ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZGZhYjEyZi4uZWJhOWJmOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTY2LDYgKzY2LDcgQEAKIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CiBMaW5hcyBWZXBzdGFzIDxsaW5hc0BhdXN0aW4uaWJtLmNvbT4KK01hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4KIE1hdHRoaWV1IENBU1RFVCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM2MmRjYjMuLjIzNTg4NDYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY1MywxNCArMTY1MywxNCBAQAogUzogVVNBCiAKIE46IERhdmUgSm9uZXMKLUU6IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitFOiBkYXZlakByZWRoYXQuY29tCiBXOiBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrCi1EOiB4ODYgZXJyYXRhL3NldHVwIG1haW50ZW5hbmNlLgotRDogQUdQR0FSVCBkcml2ZXIuCitEOiBBc3NvcnRlZCBWSUEgeDg2IHN1cHBvcnQuCitEOiAyLjUgQUdQR0FSVCBvdmVyaGF1bC4KIEQ6IENQVUZSRVEgbWFpbnRlbmFuY2UuCi1EOiBCYWNrcG9ydC9Gb3J3YXJkcG9ydCBtZXJnZSBtb25rZXkuCi1EOiBWYXJpb3VzIEphbml0b3Igd29yay4KLVM6IFVuaXRlZCBLaW5nZG9tCitEOiBGZWRvcmEga2VybmVsIG1haW50YWluZW5jZS4KK0Q6IE1pc2MvT3RoZXIuCitTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCiBOOiBNYXJ0aW4gSm9zZnNzb24KIEU6IGdhbmRhbGZAd2x1Zy53ZXN0Ym8uc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDQzODI3NzguLjcyODZhZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMjEsNiArMjEsOSBAQAogCS0gbGlzdCBvZiBjaGFuZ2VzIHRoYXQgYnJlYWsgb2xkZXIgc29mdHdhcmUgcGFja2FnZXMuCiBDb2RpbmdTdHlsZQogCS0gaG93IHRoZSBib3NzIGxpa2VzIHRoZSBDIGNvZGUgaW4gdGhlIGtlcm5lbCB0byBsb29rLgorZGV2ZWxvcG1lbnQtcHJvY2Vzcy8KKwktIEFuIGV4dGVuZGVkIHR1dG9yaWFsIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudAorCSAgcHJvY2Vzcy4KIERNQS1BUEkudHh0CiAJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KIERNQS1JU0EtTFBDLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLXVzYi11c2J0bWMKQEAgLTAsMCArMSw2MiBAQAorV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovaW50ZXJmYWNlX2NhcGFiaWxpdGllcworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovZGV2aWNlX2NhcGFiaWxpdGllcworRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoZXNlIGZpbGVzIHNob3cgdGhlIHZhcmlvdXMgVVNCIFRNQyBjYXBhYmlsaXRpZXMgYXMgZGVzY3JpYmVkCisJCWJ5IHRoZSBkZXZpY2UgaXRzZWxmLiAgVGhlIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGJpdGZpZWxkcworCQljYW4gYmUgZm91bmQgaW4gdGhlIFVTQiBUTUMgZG9jdW1lbnRzIGZyb20gdGhlIFVTQi1JRiBlbnRpdGxlZAorCQkiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIHNlY3Rpb24gNC4yLjEuOC4KKworCQlUaGUgZmlsZXMgYXJlIHJlYWQgb25seS4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi91c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllcworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovdXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGVzZSBmaWxlcyBzaG93IHRoZSB2YXJpb3VzIFVTQiBUTUMgY2FwYWJpbGl0aWVzIGFzIGRlc2NyaWJlZAorCQlieSB0aGUgZGV2aWNlIGl0c2VsZi4gIFRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBiaXRmaWVsZHMKKwkJY2FuIGJlIGZvdW5kIGluIHRoZSBVU0IgVE1DIGRvY3VtZW50cyBmcm9tIHRoZSBVU0ItSUYgZW50aXRsZWQKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzLCBTdWJjbGFzcworCQlVU0I0ODggU3BlY2lmaWNhdGlvbiAoVVNCVE1DLVVTQjQ4OCkgUmV2aXNpb24gMS4wIiBzZWN0aW9uCisJCTQuMi4yLgorCisJCVRoZSBmaWxlcyBhcmUgcmVhZCBvbmx5LgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL1Rlcm1DaGFyCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGlzIHRoZSBUZXJtQ2hhciB2YWx1ZSB0byBiZSBzZW50IHRvIHRoZSBVU0IgVE1DCisJCWRldmljZSBhcyBkZXNjcmliZWQgYnkgdGhlIGRvY3VtZW50LCAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdAorCQlhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzIHB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgorCisJCU5vdGUgdGhhdCB0aGUgVGVybUNoYXJFbmFibGVkIGZpbGUgZGV0ZXJtaW5lcyBpZiB0aGlzIHZhbHVlIGlzCisJCXNlbnQgdG8gdGhlIGRldmljZSBvciBub3QuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovVGVybUNoYXJFbmFibGVkCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGRldGVybWluZXMgaWYgdGhlIFRlcm1DaGFyIGlzIHRvIGJlIHNlbnQgdG8gdGhlCisJCWRldmljZSBvbiBldmVyeSB0cmFuc2FjdGlvbiBvciBub3QuICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0CisJCXRoaXMsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50LCAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQKKwkJTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbiAoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzCisJCXB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2F1dG9fYWJvcnQKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgZGV0ZXJtaW5lcyBpZiB0aGUgdGhlIHRyYW5zYWN0aW9uIG9mIHRoZSBVU0IgVE1DCisJCWRldmljZSBpcyB0byBiZSBhdXRvbWF0aWNhbGx5IGFib3J0ZWQgaWYgdGhlcmUgaXMgYW55IGVycm9yLgorCQlGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50LAorCQkiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzIHB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCmluZGV4IDExYTNjMTYuLmRmNmM4YTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKQEAgLTg1LDMgKzg1LDE5IEBACiBVc2VyczoKIAkJUG93ZXJUT1AgPHBvd2VyQGJ1Z2hvc3Qub3JnPgogCQlodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvcG93ZXJ0b3AvCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlLzxidXNudW0+LTxkZXZudW0+Li4uOjxjb25maWcgbnVtPi08aW50ZXJmYWNlIG51bT4vc3VwcG9ydHNfYXV0b3N1c3BlbmQKK0RhdGU6CQlKYW51YXJ5IDIwMDgKK0tlcm5lbFZlcnNpb246CTIuNi4yNworQ29udGFjdDoJU2FyYWggU2hhcnAgPHNhcmFoLmEuc2hhcnBAaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgMSBpZiB0aGUgaW50ZXJmYWNlIGRyaXZlcgorCQlmb3IgdGhpcyBpbnRlcmZhY2Ugc3VwcG9ydHMgYXV0b3N1c3BlbmQuICBJdCBhbHNvCisJCXJldHVybnMgMSBpZiBubyBkcml2ZXIgaGFzIGNsYWltZWQgdGhpcyBpbnRlcmZhY2UsIGFzIGFuCisJCXVuY2xhaW1lZCBpbnRlcmZhY2Ugd2lsbCBub3Qgc3RvcCB0aGUgZGV2aWNlIGZyb20gYmVpbmcKKwkJYXV0b3N1c3BlbmRlZCBpZiBhbGwgb3RoZXIgaW50ZXJmYWNlIGRyaXZlcnMgYXJlIGlkbGUuCisJCVRoZSBmaWxlIHJldHVybnMgMCBpZiBhdXRvc3VzcGVuZCBzdXBwb3J0IGhhcyBub3QgYmVlbgorCQlhZGRlZCB0byB0aGUgZHJpdmVyLgorVXNlcnM6CisJCVVTQiBQTSB0b29sCisJCWdpdDovL2dpdC5tb2JsaW4ub3JnL3VzZXJzL3NhcmFoL3VzYi1wbS10b29sLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODMwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2ItZGV2aWNlcy11c2JzZXZzZWcKQEAgLTAsMCArMSw0MyBAQAorV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL3Bvd2VyZWQKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB3aGV0aGVyIHRoZSBkZXZpY2UncyBkaXNwbGF5IHdpbGwgcG93ZXJlZC4KKwkJQSB2YWx1ZSBvZiAwIGlzIG9mZiBhbmQgYSBub24temVybyB2YWx1ZSBpcyBvbi4KKworV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL21vZGVfbXNiCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vbW9kZV9sc2IKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgZGV2aWNlcyBkaXNwbGF5IG1vZGUuCisJCUZvciBhIDYgY2hhcmFjdGVyIGRpc3BsYXkgdGhlIHZhbHVlcyBhcmUKKwkJCU1TQiAweDA2OyBMU0IgMHgzRiwgYW5kCisJCWZvciBhbiA4IGNoYXJhY3RlciBkaXNwbGF5IHRoZSB2YWx1ZXMgYXJlCisJCQlNU0IgMHgwODsgTFNCIDB4RkYuCisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi90ZXh0bW9kZQorRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CUNvbnRyb2xzIHRoZSB3YXkgdGhlIGRldmljZSBpbnRlcnByZXRzIGl0cyB0ZXh0IGJ1ZmZlci4KKwkJcmF3OgllYWNoIGNoYXJhY3RlciBjb250cm9scyBpdHMgc2VnbWVudCBtYW51YWxseQorCQloZXg6CWVhY2ggY2hhcmFjdGVyIGlzIGJldHdlZW4gMC0xNQorCQlhc2NpaToJZWFjaCBjaGFyYWN0ZXIgaXMgYmV0d2VlbiAnMCctJzknIGFuZCAnQSctJ0YnLgorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vdGV4dAorRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CVRoZSB0ZXh0IChvciBkYXRhKSBmb3IgdGhlIGRldmljZSB0byBkaXNwbGF5CisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9kZWNpbWFscworRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CUNvbnRyb2xzIHRoZSBkZWNpbWFsIHBsYWNlcyBvbiB0aGUgZGV2aWNlLgorCQlUbyBzZXQgdGhlIG50aCBkZWNpbWFsIHBsYWNlLCBnaXZlIHRoaXMgZmllbGQKKwkJdGhlIHZhbHVlIG9mIDEwICoqIG4uIEFzc3VtZSB0aGlzIGZpZWxkIGhhcworCQl0aGUgdmFsdWUgayBhbmQgaGFzIDEgb3IgbW9yZSBkZWNpbWFsIHBsYWNlcyBzZXQsCisJCXRvIHNldCB0aGUgbXRoIHBsYWNlICh3aGVyZSBtIGlzIG5vdCBhbHJlYWR5IHNldCksCisJCWNoYW5nZSB0aGlzIGZpZWxkcyB2YWx1ZSB0byBrICsgMTAgKiogbS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXByb2ZpbGluZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcHJvZmlsaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmQ4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXByb2ZpbGluZwpAQCAtMCwwICsxLDEzIEBACitXaGF0OgkJL3N5cy9rZXJuZWwvcHJvZmlsZQorRGF0ZToJCVNlcHRlbWJlciAyMDA4CitDb250YWN0OglEYXZlIEhhbnNlbiA8ZGF2ZUBsaW51eC52bmV0LmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJL3N5cy9rZXJuZWwvcHJvZmlsZSBpcyB0aGUgcnVudGltZSBlcXVpdmFsZW50CisJCW9mIHRoZSBib290LXRpbWUgcHJvZmlsZT0gb3B0aW9uLgorCisJCVlvdSBjYW4gZ2V0IHRoZSBzYW1lIGVmZmVjdCBydW5uaW5nOgorCisJCQllY2hvIDIgPiAvc3lzL2tlcm5lbC9wcm9maWxlCisKKwkJYXMgeW91IHdvdWxkIGJ5IGlzc3VpbmcgcHJvZmlsZT0yIG9uIHRoZSBib290CisJCWNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCAxNjE1MzUwLi5mYWJjMDY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyBUbyBhZGQgYSBuZXcgYm9vayB0aGUgb25seSBzdGVwIHJlcXVpcmVkIGlzIHRvIGFkZCB0aGUgYm9vayB0byB0aGUKICMgbGlzdCBvZiBET0NCT09LUy4KIAotRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCB2aWRlb2Jvb2sueG1sIFwKK0RPQ0JPT0tTIDo9IHdhbmJvb2sueG1sIHo4NTMwYm9vay54bWwgbWNhYm9vay54bWwgXAogCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIGRldmljZWlvYm9vay54bWwgXAogCSAgICBwcm9jZnMtZ3VpZGUueG1sIHdyaXRpbmdfdXNiX2RyaXZlci54bWwgbmV0d29ya2luZy54bWwgXAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAppbmRleCBlYTNiYzk1Li42ZWYyZjAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCkBAIC01NTcsNiArNTU3LDkgQEAKIDwvcGFyYT4KIAogIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKICFFZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKIAogPC9zZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbAppbmRleCA4YTVkYzZlLi45ZWJhNGI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsCkBAIC0xNCwxNyArMTQsMjAgQEAKIAk8b3RoZXJuYW1lPihKLkEuSy4pPC9vdGhlcm5hbWU+CiAJPHN1cm5hbWU+TW91dzwvc3VybmFtZT4KIAk8YWZmaWxpYXRpb24+Ci0JICA8b3JnbmFtZT5EZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3k8L29yZ25hbWU+Ci0JICA8b3JnZGl2PkZhY3VsdHkgb2YgSW5mb3JtYXRpb24gVGVjaG5vbG9neSBhbmQgU3lzdGVtczwvb3JnZGl2PgogCSAgPGFkZHJlc3M+Ci0gICAgICAgICAgICA8ZW1haWw+Si5BLksuTW91d0BpdHMudHVkZWxmdC5ubDwvZW1haWw+Ci0gICAgICAgICAgICA8cG9iPlBPIEJPWCA1MDMxPC9wb2I+Ci0gICAgICAgICAgICA8cG9zdGNvZGU+MjYwMCBHQTwvcG9zdGNvZGU+Ci0gICAgICAgICAgICA8Y2l0eT5EZWxmdDwvY2l0eT4KLSAgICAgICAgICAgIDxjb3VudHJ5PlRoZSBOZXRoZXJsYW5kczwvY291bnRyeT4KKyAgICAgICAgICAgIDxlbWFpbD5tb3V3QG5sLmxpbnV4Lm9yZzwvZW1haWw+CiAgICAgICAgICAgPC9hZGRyZXNzPgogCTwvYWZmaWxpYXRpb24+CiAgICAgICA8L2F1dGhvcj4KKyAgICAgIDxvdGhlcmNyZWRpdD4KKwk8Y29udHJpYj4KKwlUaGlzIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHdlcmUgd3JpdHRlbiB3aGlsZSB3b3JraW5nIG9uIHRoZQorCUxBUlQgY29tcHV0aW5nIGJvYXJkCisJKDx1bGluayB1cmw9Imh0dHA6Ly93d3cubGFydG1ha2VyLm5sLyI+aHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvPC91bGluaz4pLAorCXdoaWNoIHdhcyBzcG9uc29yZWQgYnkgdGhlIERlbHQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5IHByb2plY3RzCisJTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zLgorCTwvY29udHJpYj4KKyAgICAgIDwvb3RoZXJjcmVkaXQ+CiAgICAgPC9hdXRob3Jncm91cD4KIAogICAgIDxyZXZoaXN0b3J5PgpAQCAtMTA5LDE4ICsxMTIsNiBAQAogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIHdhcyB3cml0dGVuIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKLSAgICAgIGNvbXB1dGluZyBib2FyZCAoPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLyI+aHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvPC91bGluaz4pLAotICAgICAgd2hpY2ggaXMgc3BvbnNvcmVkIGJ5IHRoZSBNb2JpbGUgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMKLSAgICAgICg8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8iPmh0dHA6Ly93d3cubW1jLnR1ZGVsZnQubmwvPC91bGluaz4pCi0gICAgICBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucyAoPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvIj5odHRwOi8vd3d3LnViaWNvbS50dWRlbGZ0Lm5sLzwvdWxpbms+KQotICAgICAgcHJvamVjdHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+CiAgICAgICBFcmlrCiAgICAgPC9wYXJhPgogICA8L3ByZWZhY2U+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCmluZGV4IDJmM2RlMGYuLjhjNjM5NmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCkBAIC0xLDI4ICsxLDE2IEBACiAvKgogICogcHJvY2ZzX2V4YW1wbGUuYzogYW4gZXhhbXBsZSBwcm9jIGludGVyZmFjZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKQorICogQ29weXJpZ2h0IChDKSAyMDAxLCBFcmlrIE1vdXcgKG1vdXdAbmwubGludXgub3JnKQogICoKICAqIFRoaXMgZmlsZSBhY2NvbXBhbmllcyB0aGUgcHJvY2ZzLWd1aWRlIGluIHRoZSBMaW51eCBrZXJuZWwKICAqIHNvdXJjZS4gSXRzIG1haW4gdXNlIGlzIHRvIGRlbW9uc3RyYXRlIHRoZSBjb25jZXB0cyBhbmQKICAqIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gdGhlIGd1aWRlLgogICoKICAqIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gZGV2ZWxvcGVkIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKLSAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvKSwgd2hpY2ggaXMKLSAqIHNwb25zb3JlZCBieSB0aGUgTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zCi0gKiAoaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8pIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zIAotICogKGh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvKSBwcm9qZWN0cy4KLSAqCi0gKiBUaGUgYXV0aG9yIGNhbiBiZSByZWFjaGVkIGF0OgotICoKLSAqICBFcmlrIE1vdXcKLSAqICBJbmZvcm1hdGlvbiBhbmQgQ29tbXVuaWNhdGlvbiBUaGVvcnkgR3JvdXAKLSAqICBGYWN1bHR5IG9mIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgYW5kIFN5c3RlbXMKLSAqICBEZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kKLSAqICBQLk8uIEJveCA1MDMxCi0gKiAgMjYwMCBHQSBEZWxmdAotICogIFRoZSBOZXRoZXJsYW5kcwotICoKKyAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0bWFrZXIubmwpLCB3aGljaCB3YXMgc3BvbnNvcmVkCisgKiBieSB0aGUgRGVsdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kgcHJvamVjdHMgTW9iaWxlIE11bHRpLW1lZGlhCisgKiBDb21tdW5pY2F0aW9ucyBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKICAqIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmMyNTk0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWRlb2Jvb2sudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+Ci0KLTxib29rIGlkPSJWNExHdWlkZSI+Ci0gPGJvb2tpbmZvPgotICA8dGl0bGU+VmlkZW80TGludXggUHJvZ3JhbW1pbmc8L3RpdGxlPgotICAKLSAgPGF1dGhvcmdyb3VwPgotICAgPGF1dGhvcj4KLSAgICA8Zmlyc3RuYW1lPkFsYW48L2ZpcnN0bmFtZT4KLSAgICA8c3VybmFtZT5Db3g8L3N1cm5hbWU+Ci0gICAgPGFmZmlsaWF0aW9uPgotICAgICA8YWRkcmVzcz4KLSAgICAgIDxlbWFpbD5hbGFuQHJlZGhhdC5jb208L2VtYWlsPgotICAgICA8L2FkZHJlc3M+Ci0gICAgPC9hZmZpbGlhdGlvbj4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4yMDAwPC95ZWFyPgotICAgPGhvbGRlcj5BbGFuIENveDwvaG9sZGVyPgotICA8L2NvcHlyaWdodD4KLQotICA8bGVnYWxub3RpY2U+Ci0gICA8cGFyYT4KLSAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCi0gICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKLSAgICAgdmVyc2lvbi4KLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gICAgIE1BIDAyMTExLTEzMDcgVVNBCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKLSAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgotICAgPC9wYXJhPgotICA8L2xlZ2Fsbm90aWNlPgotIDwvYm9va2luZm8+Ci0KLTx0b2M+PC90b2M+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KLSAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgUGFydHMgb2YgdGhpcyBkb2N1bWVudCBmaXJzdCBhcHBlYXJlZCBpbiBMaW51eCBNYWdhemluZSB1bmRlciBhCi0gICAgICAgIG5pbmV0eSBkYXkgZXhjbHVzaXZpdHkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFZpZGVvNExpbnV4IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlCi0gICAgICAgIGZvciB0aGUgbWFueSBUViBhbmQgY2FwdHVyZSBjYXJkcyBub3cgb24gdGhlIG1hcmtldCwgYXMgd2VsbCBhcwotICAgICAgICBwYXJhbGxlbCBwb3J0IGFuZCBVU0IgdmlkZW8gY2FtZXJhcy4gUmFkaW8sIHRlbGV0ZXh0IGRlY29kZXJzIGFuZAotICAgICAgICB2ZXJ0aWNhbCBibGFua2luZyBkYXRhIGludGVyZmFjZXMgYXJlIGFsc28gcHJvdmlkZWQuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICA8Y2hhcHRlciBpZD0icmFkaW8iPgotICAgICAgICA8dGl0bGU+UmFkaW8gRGV2aWNlczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgYSB3aWRlIHZhcmlldHkgb2YgcmFkaW8gaW50ZXJmYWNlcyBhdmFpbGFibGUgZm9yIFBDJ3MsIGFuZCB0aGVzZQotICAgICAgICBhcmUgZ2VuZXJhbGx5IHZlcnkgc2ltcGxlIHRvIHByb2dyYW0uIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCBzdXBwb3J0aW5nCi0gICAgICAgIHN1Y2ggZGV2aWNlcyBpcyBub3JtYWxseSBleHRyYWN0aW5nIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgdmVuZG9yLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgcmFkaW8gaW50ZXJmYWNlIHN1cHBvcnRzIGEgc2ltcGxlIHNldCBvZiBjb250cm9sIGlvY3RscyBzdGFuZGFyZGlzZWQKLSAgICAgICAgYWNyb3NzIGFsbCByYWRpbyBhbmQgdHYgaW50ZXJmYWNlcy4gSXQgZG9lcyBub3Qgc3VwcG9ydCByZWFkIG9yIHdyaXRlLCB3aGljaAotICAgICAgICBhcmUgdXNlZCBmb3IgdmlkZW8gc3RyZWFtcy4gVGhlIHJlYXNvbiByYWRpbyBjYXJkcyBkbyBub3QgYWxsb3cgeW91IHRvIHJlYWQKLSAgICAgICAgdGhlIGF1ZGlvIHN0cmVhbSBpbnRvIGFuIGFwcGxpY2F0aW9uIGlzIHRoYXQgd2l0aG91dCBleGNlcHRpb24gdGhleSBwcm92aWRlCi0gICAgICAgIGEgY29ubmVjdGlvbiBvbiB0byBhIHNvdW5kY2FyZC4gU291bmRjYXJkcyBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSByYWRpbwotICAgICAgICBkYXRhIGp1c3QgZmluZS4gCi0gIDwvcGFyYT4KLSAgPHNlY3QxIGlkPSJyZWdpc3RlcnJhZGlvIj4KLSAgPHRpdGxlPlJlZ2lzdGVyaW5nIFJhZGlvIERldmljZXM8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZpZGVvNGxpbnV4IGNvcmUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWdpc3RlcmluZyBkZXZpY2VzLiBUaGUKLSAgICAgICAgZmlyc3Qgc3RlcCBpbiB3cml0aW5nIG91ciByYWRpbyBjYXJkIGRyaXZlciBpcyB0byByZWdpc3RlciBpdC4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbXlfcmFkaW8KLXsKLSAgICAgICAgIk15IHJhZGlvIiwKLSAgICAgICAgVklEX1RZUEVfVFVORVIsCi0gICAgICAgIHJhZGlvX29wZW4uCi0gICAgICAgIHJhZGlvX2Nsb3NlLAotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyByZWFkICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBwb2xsICovCi0gICAgICAgIHJhZGlvX2lvY3RsLAotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBzcGVjaWFsIGluaXQgZnVuY3Rpb24gKi8KLSAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KLX07Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhpcyBkZWNsYXJlcyBvdXIgdmlkZW80bGludXggZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UuIFRoZSBWSURfVFlQRV8gdmFsdWUKLSAgICAgICAgZGVmaW5lcyB3aGF0IGtpbmQgb2YgYW4gaW50ZXJmYWNlIHdlIGFyZSwgYW5kIGRlZmluZXMgYmFzaWMgY2FwYWJpbGl0aWVzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgb25seSBkZWZpbmVkIHZhbHVlIHJlbGV2YW50IGZvciBhIHJhZGlvIGNhcmQgaXMgVklEX1RZUEVfVFVORVIgd2hpY2gKLSAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgdHVuZWQuIENsZWFybHkgb3VyIHJhZGlvIGlzIGdvaW5nIHRvIGhhdmUgc29tZQotICAgICAgICB3YXkgdG8gY2hhbmdlIGNoYW5uZWwgc28gaXQgaXMgdHVuZWFibGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGRlY2xhcmUgYW4gb3BlbiBhbmQgY2xvc2Ugcm91dGluZSwgYnV0IHdlIGRvIG5vdCBuZWVkIHJlYWQgb3Igd3JpdGUsCi0gICAgICAgIHdoaWNoIGFyZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHZpZGVvIGRhdGEgdG8gb3IgZnJvbSB0aGUgY2FyZCBpdHNlbGYuIEFzCi0gICAgICAgIHdlIGhhdmUgbm8gcmVhZCBvciB3cml0ZSB0aGVyZSBpcyBubyBwb2xsIGZ1bmN0aW9uLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgcHJpdmF0ZSBpbml0aWFsaXNlIGZ1bmN0aW9uIGlzIHJ1biB3aGVuIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gSW4KLSAgICAgICAgdGhpcyBkcml2ZXIgd2UndmUgYWxyZWFkeSBkb25lIGFsbCB0aGUgd29yayBuZWVkZWQuIFRoZSBmaW5hbCBwb2ludGVyIGlzIGEKLSAgICAgICAgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciB0byBhdHRhY2ggYW5kCi0gICAgICAgIHJldHJpZXZlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLiBXZSBzZXQgdGhpcyBmaWVsZCAicHJpdiIgdG8gTlVMTCBmb3IKLSAgICAgICAgdGhlIG1vbWVudC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgSGF2aW5nIHRoZSBzdHJ1Y3R1cmUgZGVmaW5lZCBpcyBhbGwgdmVyeSB3ZWxsIGJ1dCB3ZSBub3cgbmVlZCB0byByZWdpc3RlciBpdAotICAgICAgICB3aXRoIHRoZSBrZXJuZWwuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IGlvID0gMHgzMjA7Ci0KLWludCBfX2luaXQgbXlyYWRpb19pbml0KHN0cnVjdCB2aWRlb19pbml0ICp2KQotewotICAgICAgICBpZighcmVxdWVzdF9yZWdpb24oaW8sIE1ZX0lPX1NJWkUsICJteXJhZGlvIikpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCi0gICAgICAgICAgICAgICAgICAgICJteXJhZGlvOiBwb3J0IDB4JTAzWCBpcyBpbiB1c2UuXG4iLCBpbyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHZpZGVvX2RldmljZV9yZWdpc3RlcigmYW1wO215X3JhZGlvLCBWRkxfVFlQRV9SQURJTyk9PS0xKSB7Ci0gICAgICAgICAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CQkKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCBzdGFnZSBvZiB0aGUgaW5pdGlhbGlzYXRpb24sIGFzIGlzIG5vcm1hbGx5IHRoZSBjYXNlLCBpcyB0byBjaGVjayAKLSAgICAgICAgdGhhdCB0aGUgSS9PIHNwYWNlIHdlIGFyZSBhYm91dCB0byBmaWRkbGUgd2l0aCBkb2Vzbid0IGJlbG9uZyB0byBzb21lIG90aGVyIAotICAgICAgICBkcml2ZXIuIElmIGl0IGlzIHdlIGxlYXZlIHdlbGwgYWxvbmUuIElmIHRoZSB1c2VyIGdpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSAKLSAgICAgICAgd3JvbmcgZGV2aWNlIHRoZW4gd2Ugd2lsbCBzcG90IHRoaXMuIFRoZXNlIHBvbGljaWVzIHdpbGwgZ2VuZXJhbGx5IGF2b2lkIAotICAgICAgICBjcmFzaGluZyB0aGUgbWFjaGluZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgTm93IHdlIGFzayB0aGUgVmlkZW80TGludXggbGF5ZXIgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSBmb3IgdXMuIFdlIGhhbmQgaXQKLSAgICAgICAgb3VyIGNhcmVmdWxseSBkZXNpZ25lZCB2aWRlb19kZXZpY2Ugc3RydWN0dXJlIGFuZCBhbHNvIHRlbGwgaXQgd2hpY2ggZ3JvdXAKLSAgICAgICAgb2YgZGV2aWNlcyB3ZSB3YW50IGl0IHJlZ2lzdGVyZWQgd2l0aC4gSW4gdGhpcyBjYXNlIFZGTF9UWVBFX1JBRElPLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgdHlwZXMgYXZhaWxhYmxlIGFyZQotICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9IkRldmljZV9UeXBlcyI+PHRpdGxlPkRldmljZSBUeXBlczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjMiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5WRkxfVFlQRV9SQURJTzwvZW50cnk+PGVudHJ5Pi9kZXYvcmFkaW97bn08L2VudHJ5PjxlbnRyeT4KLQotICAgICAgICBSYWRpbyBkZXZpY2VzIGFyZSBhc3NpZ25lZCBpbiB0aGlzIGJsb2NrLiBBcyB3aXRoIGFsbCBvZiB0aGVzZQotICAgICAgICBzZWxlY3Rpb25zIHRoZSBhY3R1YWwgbnVtYmVyIGFzc2lnbm1lbnQgaXMgZG9uZSBieSB0aGUgdmlkZW8gbGF5ZXIKLSAgICAgICAgYWNjb3JkaWpuZyB0byB3aGF0IGlzIGZyZWUuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VkZMX1RZUEVfR1JBQkJFUjwvZW50cnk+PGVudHJ5Pi9kZXYvdmlkZW97bn08L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgVmlkZW8gY2FwdHVyZSBkZXZpY2VzIGFuZCBhbHNvIC0tIGNvdW50ZXItaW50dWl0aXZlbHkgZm9yIHRoZSBuYW1lIC0tCi0gICAgICAgIGhhcmR3YXJlIHZpZGVvIHBsYXliYWNrIGRldmljZXMgc3VjaCBhcyBNUEVHMiBjYXJkcy48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WRkxfVFlQRV9WQkk8L2VudHJ5PjxlbnRyeT4vZGV2L3ZiaXtufTwvZW50cnk+PGVudHJ5PgotICAgICAgICBUaGUgVkJJIGRldmljZXMgY2FwdHVyZSB0aGUgaGlkZGVuIGxpbmVzIG9uIGEgdGVsZXZpc2lvbiBwaWN0dXJlCi0gICAgICAgIHRoYXQgY2FycnkgZnVydGhlciBpbmZvcm1hdGlvbiBsaWtlIGNsb3NlZCBjYXB0aW9uIGRhdGEsIHRlbGV0ZXh0Ci0gICAgICAgIChwcmltYXJpbHkgaW4gRXVyb3BlKSBhbmQgbm93IEludGVyY2FzdCBhbmQgdGhlIEFUVkVDIGludGVybmV0Ci0gICAgICAgIHRlbGV2aXNpb24gZW5jb2RpbmdzLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZGTF9UWVBFX1ZUWDwvZW50cnk+PGVudHJ5Pi9kZXYvdnR4W259PC9lbnRyeT48ZW50cnk+Ci0gICAgICAgIFZUWCBpcyAnVmlkZW90ZXh0JyBhbHNvIGtub3duIGFzICdUZWxldGV4dCcuIFRoaXMgaXMgYSBzeXN0ZW0gZm9yCi0gICAgICAgIHNlbmRpbmcgbnVtYmVyZWQsIDQweDI1LCBtb3N0bHkgdGV4dHVhbCBwYWdlIGltYWdlcyBvdmVyIHRoZSBoaWRkZW4KLSAgICAgICAgbGluZXMuIFVubGlrZSB0aGUgL2Rldi92YmkgaW50ZXJmYWNlcywgdGhpcyBpcyBmb3IgJ3NtYXJ0JyBkZWNvZGVyIAotICAgICAgICBjaGlwcy4gKFRoZSB1c2Ugb2YgdGhlIHdvcmQgc21hcnQgaGVyZSBoYXMgdG8gYmUgdGFrZW4gaW4gY29udGV4dCwKLSAgICAgICAgdGhlIHNtYXJ0ZXN0IHRlbGV0ZXh0IGNoaXBzIGFyZSBmYWlybHkgZHVtYiBwaWVjZXMgb2YgdGVjaG5vbG9neSkuCi0JPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBXZSBhcmUgbW9zdCBkZWZpbml0ZWx5IGEgcmFkaW8uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEZpbmFsbHkgd2UgYWxsb2NhdGUgb3VyIEkvTyBzcGFjZSBzbyB0aGF0IG5vYm9keSB0cmVhZHMgb24gdXMgYW5kIHJldHVybiAwCi0gICAgICAgIHRvIHNpZ25pZnkgZ2VuZXJhbCBoYXBwaW5lc3Mgd2l0aCB0aGUgc3RhdGUgb2YgdGhlIHVuaXZlcnNlLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0ib3BlbnJhZGlvIj4KLSAgPHRpdGxlPk9wZW5pbmcgQW5kIENsb3NpbmcgVGhlIFJhZGlvPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9ucyB3ZSBkZWNsYXJlZCBpbiBvdXIgdmlkZW9fZGV2aWNlIGFyZSBtb3N0bHkgdmVyeSBzaW1wbGUuCi0gICAgICAgIEZpcnN0bHkgd2UgY2FuIGRyb3AgaW4gd2hhdCBpcyBiYXNpY2FsbHkgc3RhbmRhcmQgY29kZSBmb3Igb3BlbiBhbmQgY2xvc2UuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IHVzZXJzID0gMDsKLQotc3RhdGljIGludCByYWRpb19vcGVuKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQotewotICAgICAgICBpZih1c2VycykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB1c2VycysrOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgQXQgb3BlbiB0aW1lIHdlIG5lZWQgdG8gZG8gbm90aGluZyBidXQgY2hlY2sgaWYgc29tZW9uZSBlbHNlIGlzIGFsc28gdXNpbmcKLSAgICAgICAgdGhlIHJhZGlvIGNhcmQuIElmIG5vYm9keSBpcyB1c2luZyBpdCB3ZSBtYWtlIGEgbm90ZSB0aGF0IHdlIGFyZSB1c2luZyBpdCwKLSAgICAgICAgdGhlbiB3ZSBlbnN1cmUgdGhhdCBub2JvZHkgdW5sb2FkcyBvdXIgZHJpdmVyIG9uIHVzLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IHJhZGlvX2Nsb3NlKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKLXsKLSAgICAgICAgdXNlcnMtLTsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgQXQgY2xvc2UgdGltZSB3ZSBzaW1wbHkgbmVlZCB0byByZWR1Y2UgdGhlIHVzZXIgY291bnQgYW5kIGFsbG93IHRoZSBtb2R1bGUKLSAgICAgICAgdG8gYmVjb21lIHVubG9hZGFibGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBhcmUgc2hhcnAgeW91IHdpbGwgaGF2ZSBub3RpY2VkIG5laXRoZXIgdGhlIG9wZW4gbm9yIHRoZSBjbG9zZQotICAgICAgICByb3V0aW5lcyBhdHRlbXB0IHRvIHJlc2V0IG9yIGNoYW5nZSB0aGUgcmFkaW8gc2V0dGluZ3MuIFRoaXMgaXMgaW50ZW50aW9uYWwuCi0gICAgICAgIEl0IGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBzZXQgdXAgdGhlIHJhZGlvIGFuZCBleGl0LiBJdCBhdm9pZHMgYSB1c2VyCi0gICAgICAgIGhhdmluZyB0byBsZWF2ZSBhbiBhcHBsaWNhdGlvbiBydW5uaW5nIGFsbCB0aGUgdGltZSBqdXN0IHRvIGxpc3RlbiB0byB0aGUKLSAgICAgICAgcmFkaW8uIAotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iaW9jdGxyYWRpbyI+Ci0gIDx0aXRsZT5UaGUgSW9jdGwgSW50ZXJmYWNlPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoaXMgbGVhdmVzIHRoZSBpb2N0bCByb3V0aW5lLCB3aXRob3V0IHdoaWNoIHRoZSBkcml2ZXIgd2lsbCBub3QgYmUKLSAgICAgICAgdGVycmlibHkgdXNlZnVsIHRvIGFueW9uZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGludCByYWRpb19pb2N0bChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLSAgICAgICAgc3dpdGNoKGNtZCkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NBUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklEX1RZUEVfVFVORVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYXVkaW9zID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4d2lkdGggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5taW53aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1heGhlaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbmhlaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiTXkgUmFkaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7diwgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFZJRElPQ0dDQVAgaXMgdGhlIGZpcnN0IGlvY3RsIGFsbCB2aWRlbzRsaW51eCBkZXZpY2VzIG11c3Qgc3VwcG9ydC4gSXQKLSAgICAgICAgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbnMgdG8gZmluZCBvdXQgd2hhdCBzb3J0IG9mIGEgY2FyZCB0aGV5IGhhdmUgZm91bmQgYW5kCi0gICAgICAgIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IHdhbnQgdG8gZG8gYWJvdXQgaXQuIFRoZSBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBhcmUKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jYXBhYmlsaXR5X2ZpZWxkcyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+VGhlIGRldmljZSB0ZXh0IG5hbWUuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PmNoYW5uZWxzPC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2hhbm5lbHMgeW91IGNhbiB0dW5lIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNhcmQuIEl0IGNvdWxkIGV2ZW4gYnkgemVybyBmb3IgYSBjYXJkIHRoYXQgaGFzCi0gICAgICAgICAgICAgICAgICAgICAgICBubyB0dW5pbmcgY2FwYWJpbGl0eS4gRm9yIG91ciBzaW1wbGUgRk0gcmFkaW8gaXQgaXMgMS4gCi0gICAgICAgICAgICAgICAgICAgICAgICBBbiBBTS9GTSByYWRpbyB3b3VsZCByZXBvcnQgMi48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5hdWRpb3M8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyBvbiB0aGlzIGRldmljZS4gRm9yIG91cgotICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW8gdGhlcmUgaXMgb25seSBvbmUgYXVkaW8gaW5wdXQuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bWlud2lkdGgsbWluaGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIHNtYWxsZXN0IHNpemUgdGhlIGNhcmQgaXMgY2FwYWJsZSBvZiBjYXB0dXJpbmcKLQkJICAgICAgICBpbWFnZXMgaW4uIFdlIHNldCB0aGVzZSB0byB6ZXJvLiBSYWRpb3MgZG8gbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIHBpY3R1cmVzPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bWF4d2lkdGgsbWF4aGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIGxhcmdlc3QgaW1hZ2Ugc2l6ZSB0aGUgY2FyZCBpcyBjYXBhYmxlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZy4gRm9yIG91ciByYWRpbyB3ZSByZXBvcnQgMC4KLQkJCQk8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT50eXBlPC9lbnRyeT48ZW50cnk+VGhpcyByZXBvcnRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZSwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzIHRoZSBmaWVsZCB3ZSBmaWxsZWQgaW4gaW4gdGhlIHN0cnVjdAotICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fZGV2aWNlIHdoZW4gcmVnaXN0ZXJpbmcuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBIYXZpbmcgZmlsbGVkIGluIHRoZSBmaWVsZHMsIHdlIHVzZSBjb3B5X3RvX3VzZXIgdG8gY29weSB0aGUgc3RydWN0dXJlIGludG8KLSAgICAgICAgdGhlIHVzZXJzIGJ1ZmZlci4gSWYgdGhlIGNvcHkgZmFpbHMgd2UgcmV0dXJuIGFuIEVGQVVMVCB0byB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgc28gdGhhdCBpdCBrbm93cyBpdCB0cmllZCB0byBmZWVkIHVzIGdhcmJhZ2UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBuZXh0IHBhaXIgb2YgaW9jdGwgb3BlcmF0aW9ucyBzZWxlY3Qgd2hpY2ggdHVuZXIgaXMgdG8gYmUgdXNlZCBhbmQgbGV0Ci0gICAgICAgIHRoZSBhcHBsaWNhdGlvbiBmaW5kIHRoZSB0dW5lciBwcm9wZXJ0aWVzLiBXZSBoYXZlIG9ubHkgYSBzaW5nbGUgRk0gYmFuZAotICAgICAgICB0dW5lciBpbiBvdXIgZXhhbXBsZSBkZXZpY2UuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dUVU5FUjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpIT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWxvdz0oODcqMTYwMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmZsYWdzID0gVklERU9fVFVORVJfTE9XOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5zaWduYWwgPSAweEZGRkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiRk0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSE9MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBWSURJT0NHVFVORVIgaW9jdGwgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBxdWVyeSBhIHR1bmVyLiBUaGUgYXBwbGljYXRpb24KLSAgICAgICAgc2V0cyB0aGUgdHVuZXIgZmllbGQgdG8gdGhlIHR1bmVyIG51bWJlciBpdCB3aXNoZXMgdG8gcXVlcnkuIFRoZSBxdWVyeSBkb2VzCi0gICAgICAgIG5vdCBjaGFuZ2UgdGhlIHR1bmVyIHRoYXQgaXMgYmVpbmcgdXNlZCwgaXQgbWVyZWx5IGVucXVpcmVzIGFib3V0IHRoZSB0dW5lcgotICAgICAgICBpbiBxdWVzdGlvbi4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2UgaGF2ZSBleGFjdGx5IG9uZSB0dW5lciBzbyBhZnRlciBjb3B5aW5nIHRoZSB1c2VyIGJ1ZmZlciB0byBvdXIgdGVtcG9yYXJ5Ci0gICAgICAgIHN0cnVjdHVyZSB3ZSBjb21wbGFpbiBpZiB0aGV5IGFza2VkIGZvciBhIHR1bmVyIG90aGVyIHRoYW4gdHVuZXIgMC4gCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB2aWRlb190dW5lciBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fdHVuZXJfZmllbGRzIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5pbnQgdHVuZXI8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIHRoZSB0dW5lciBpbiBxdWVzdGlvbjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2hhciBuYW1lWzMyXTwvZW50cnk+PGVudHJ5PkEgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGlzIHR1bmVyLiAiRk0iIHdpbGwgZG8gZmluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSBhcHBsaWNhdGlvbi48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PnUzMiBmbGFnczwvZW50cnk+Ci0gICAgICAgIDxlbnRyeT5UdW5lciBjYXBhYmlsaXR5IGZsYWdzPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PnUxNiBtb2RlPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgcmVjZXB0aW9uIG1vZGU8L2VudHJ5PgotCi0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+dTE2IHNpZ25hbDwvZW50cnk+PGVudHJ5PlRoZSBzaWduYWwgc3RyZW5ndGggc2NhbGVkIGJldHdlZW4gMCBhbmQgNjU1MzUuIElmCi0gICAgICAgICAgICAgICAgICAgICAgICBhIGRldmljZSBjYW5ub3QgdGVsbCB0aGUgc2lnbmFsIHN0cmVuZ3RoIGl0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IDY1NTM1LiBNYW55IHNpbXBsZSBjYXJkcyBjb250YWluIG9ubHkgYSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC9ubyBzaWduYWwgYml0LiBTdWNoIGNhcmRzIHdpbGwgcmVwb3J0IGVpdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgMCBvciA2NTUzNS48L2VudHJ5PgotCi0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+dTMyIHJhbmdlbG93LCByYW5nZWhpZ2g8L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByYW5nZSBvZiBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvCi0gICAgICAgICAgICAgICAgICAgICAgICBvciBUVi4gSXQgaXMgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgVklERU9fVFVORVJfTE9XCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnLjwvZW50cnk+Ci0KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fdHVuZXJfZmxhZ3MiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fdHVuZXIgZmxhZ3M8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotCTxlbnRyeT5WSURFT19UVU5FUl9QQUw8L2VudHJ5PjxlbnRyeT5BIFBBTCBUViB0dW5lcjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX05UU0M8L2VudHJ5PjxlbnRyeT5BbiBOVFNDIChVUykgVFYgdHVuZXI8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9TRUNBTTwvZW50cnk+PGVudHJ5PkEgU0VDQU0gKEZyZW5jaCkgVFYgdHVuZXI8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9MT1c8L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgICAgICBUaGUgdHVuZXIgZnJlcXVlbmN5IGlzIHNjYWxlZCBpbiAxLzE2dGggb2YgYSBLSHoKLSAgICAgICAgICAgICBzdGVwcy4gSWYgbm90IGl0IGlzIGluIDEvMTZ0aCBvZiBhIE1IeiBzdGVwcwotCTwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX05PUk08L2VudHJ5PjxlbnRyeT5UaGUgdHVuZXIgY2FuIHNldCBpdHMgZm9ybWF0PC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfU1RFUkVPX09OPC9lbnRyeT48ZW50cnk+VGhlIHR1bmVyIGlzIGN1cnJlbnRseSByZWNlaXZpbmcgYSBzdGVyZW8gc2lnbmFsPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotCi0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX3R1bmVyX21vZGVzIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIG1vZGVzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgRm9ybWF0PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfTlRTQzwvZW50cnk+PGVudHJ5Pk5UU0MgRm9ybWF0IChVU0EpPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfU0VDQU08L2VudHJ5PjxlbnRyeT5GcmVuY2ggRm9ybWF0PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkEgZGV2aWNlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWIGZvcm1hdCBzd2l0Y2hpbmc8L2VudHJ5PgotICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHNldHRpbmdzIGZvciB0aGUgcmFkaW8gY2FyZCBhcmUgdGh1cyBmYWlybHkgc2ltcGxlLiBXZSByZXBvcnQgdGhhdCB3ZQotICAgICAgICBhcmUgYSB0dW5lciBjYWxsZWQgIkZNIiBmb3IgRk0gcmFkaW8uIEluIG9yZGVyIHRvIGdldCB0aGUgYmVzdCB0dW5pbmcKLSAgICAgICAgcmVzb2x1dGlvbiB3ZSByZXBvcnQgVklERU9fVFVORVJfTE9XIGFuZCBzZWxlY3QgdHVuaW5nIHRvIDEvMTZ0aCBvZiBLSHouIEl0cwotICAgICAgICB1bmxpa2VseSBvdXIgY2FyZCBjYW4gZG8gdGhhdCByZXNvbHV0aW9uIGJ1dCBpdCBpcyBhIGZhaXIgYmV0IHRoZSBjYXJkIGNhbgotICAgICAgICBkbyBiZXR0ZXIgdGhhbiAxLzE2dGggb2YgYSBNSHouIFZJREVPX1RVTkVSX0xPVyBpcyBhcHByb3ByaWF0ZSB0byBhbG1vc3QgYWxsCi0gICAgICAgIHJhZGlvIHVzYWdlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSByZXBvcnQgdGhhdCB0aGUgdHVuZXIgYXV0b21hdGljYWxseSBoYW5kbGVzIGRlY2lkaW5nIHdoYXQgZm9ybWF0IGl0IGlzCi0gICAgICAgIHJlY2VpdmluZyAtIHRydWUgZW5vdWdoIGFzIGl0IG9ubHkgaGFuZGxlcyBGTSByYWRpby4gT3VyIGV4YW1wbGUgY2FyZCBpcwotICAgICAgICBhbHNvIGluY2FwYWJsZSBvZiBkZXRlY3Rpbmcgc3RlcmVvIG9yIHNpZ25hbCBzdHJlbmd0aHMgc28gaXQgcmVwb3J0cyBhCi0gICAgICAgIHN0cmVuZ3RoIG9mIDB4RkZGRiAobWF4aW11bSkgYW5kIG5vIHN0ZXJlbyBkZXRlY3RlZC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVG8gZmluaXNoIG9mZiB3ZSBzZXQgdGhlIHJhbmdlIHRoYXQgY2FuIGJlIHR1bmVkIHRvIGJlIDg3LTEwOE1oeiwgdGhlIG5vcm1hbAotICAgICAgICBGTSBicm9hZGNhc3QgcmFkaW8gcmFuZ2UuIEl0IGlzIGltcG9ydGFudCB0byBmaW5kIG91dCB3aGF0IHRoZSBjYXJkIGlzCi0gICAgICAgIGFjdHVhbGx5IGNhcGFibGUgb2YgdHVuaW5nLiBJdCBpcyBlYXN5IGVub3VnaCB0byBzaW1wbHkgdXNlIHRoZSBGTSBicm9hZGNhc3QKLSAgICAgICAgcmFuZ2UuIFVuZm9ydHVuYXRlbHkgaWYgeW91IGRvIHRoaXMgeW91IHdpbGwgZGlzY292ZXIgdGhlIEZNIGJyb2FkY2FzdAotICAgICAgICByYW5nZXMgaW4gdGhlIFVTQSwgRXVyb3BlIGFuZCBKYXBhbiBhcmUgYWxsIHN1YnRseSBkaWZmZXJlbnQgYW5kIHNvbWUgdXNlcnMKLSAgICAgICAgY2Fubm90IHJlY2VpdmUgYWxsIHRoZSBzdGF0aW9ucyB0aGV5IHdpc2guCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBhcHBsaWNhdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IHRoZSB0dW5lciBpdCB3aXNoZXMgdG8gdXNlLiBJbgotICAgICAgICBvdXIgY2FzZSwgd2l0aCBhIHNpbmdsZSB0dW5lciB0aGlzIGlzIHJhdGhlciBzaW1wbGUgdG8gYXJyYW5nZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NUVU5FUjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGNvcHkgdGhlIHVzZXIgc3VwcGxpZWQgc3RydWN0dXJlIGludG8ga2VybmVsIG1lbW9yeSBzbyB3ZSBjYW4gZXhhbWluZSBpdC4gCi0gICAgICAgIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIHR1bmVyIG90aGVyIHRoYW4gemVybyB3ZSByZWplY3QgdGhlIHJlcXVlc3QuIElmIAotICAgICAgICB0aGV5IHdhbnRlZCB0dW5lciAwIHRoZW4sIHN1cnByaXNpbmdseSBlbm91Z2gsIHRoYXQgaXMgdGhlIGN1cnJlbnQgdHVuZXIgYWxyZWFkeS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIG5leHQgdHdvIGlvY3RscyB3ZSBuZWVkIHRvIHByb3ZpZGUgYXJlIHRvIGdldCBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgb2YKLSAgICAgICAgdGhlIHJhZGlvLiBUaGVzZSBib3RoIHVzZSBhbiB1bnNpZ25lZCBsb25nIGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBmcmVxdWVuY3kuCi0gICAgICAgIFRoZSBzY2FsZSBvZiB0aGUgZnJlcXVlbmN5IGRlcGVuZHMgb24gdGhlIFZJREVPX1RVTkVSX0xPVyBmbGFnIGFzIEkKLSAgICAgICAgbWVudGlvbmVkIGVhcmxpZXIgb24uIFNpbmNlIHdlIGhhdmUgVklERU9fVFVORVJfTE9XIHNldCB0aGlzIHdpbGwgYmUgaW4KLSAgICAgICAgMS8xNnRocyBvZiBhIEtIei4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfZnJlcTsKLQotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dGUkVROgotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjdXJyZW50X2ZyZXEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFF1ZXJ5aW5nIHRoZSBmcmVxdWVuY3kgaW4gb3VyIGNhc2UgaXMgcmVsYXRpdmVseSBzaW1wbGUuIE91ciByYWRpbyBjYXJkIGlzCi0gICAgICAgIHRvbyBkdW1iIHRvIGxldCB1cyBxdWVyeSB0aGUgc2lnbmFsIHN0cmVuZ3RoIHNvIHdlIHJlbWVtYmVyIG91ciBzZXR0aW5nIGlmIAotICAgICAgICB3ZSBrbm93IGl0LiBBbGwgd2UgaGF2ZSB0byBkbyBpcyBjb3B5IGl0IHRvIHRoZSB1c2VyLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1MzIgZnJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKGFyZywgJmFtcDtmcmVxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSE9MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXJkd2FyZV9zZXRfZnJlcShmcmVxKSZsdDswKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJlcSA9IGZyZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFNldHRpbmcgdGhlIGZyZXF1ZW5jeSBpcyBhIGxpdHRsZSBtb3JlIGNvbXBsZXguIFdlIGJlZ2luIGJ5IGNvcHlpbmcgdGhlCi0gICAgICAgIGRlc2lyZWQgZnJlcXVlbmN5IGludG8ga2VybmVsIHNwYWNlLiBOZXh0IHdlIGNhbGwgYSBoYXJkd2FyZSBzcGVjaWZpYyByb3V0aW5lCi0gICAgICAgIHRvIHNldCB0aGUgcmFkaW8gdXAuIFRoaXMgbWlnaHQgYmUgYXMgc2ltcGxlIGFzIHNvbWUgc2NhbGluZyBhbmQgYSBmZXcKLSAgICAgICAgd3JpdGVzIHRvIGFuIEkvTyBwb3J0LiBGb3IgbW9zdCByYWRpbyBjYXJkcyBpdCB0dXJucyBvdXQgYSBnb29kIGRlYWwgbW9yZQotICAgICAgICBjb21wbGljYXRlZCBhbmQgbWF5IGludm9sdmUgcHJvZ3JhbW1pbmcgdGhpbmdzIGxpa2UgYSBwaGFzZSBsb2NrZWQgbG9vcCBvbgotICAgICAgICB0aGUgY2FyZC4gVGhpcyBpcyB3aGF0IGRvY3VtZW50YXRpb24gaXMgZm9yLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpbmFsIHNldCBvZiBvcGVyYXRpb25zIHdlIG5lZWQgdG8gcHJvdmlkZSBmb3Igb3VyIHJhZGlvIGFyZSB0aGUgCi0gICAgICAgIHZvbHVtZSBjb250cm9scy4gTm90IGFsbCByYWRpbyBjYXJkcyBjYW4gZXZlbiBkbyB2b2x1bWUgY29udHJvbC4gQWZ0ZXIgYWxsCi0gICAgICAgIHRoZXJlIGlzIGEgcGVyZmVjdGx5IGdvb2Qgdm9sdW1lIGNvbnRyb2wgb24gdGhlIHNvdW5kIGNhcmQuIFdlIHdpbGwgYXNzdW1lCi0gICAgICAgIG91ciByYWRpbyBjYXJkIGhhcyBhIHNpbXBsZSA0IHN0ZXAgdm9sdW1lIGNvbnRyb2wuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSB0d28gaW9jdGxzIHdpdGggYXVkaW8gd2UgbmVlZCB0byBzdXBwb3J0Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi1zdGF0aWMgaW50IGN1cnJlbnRfdm9sdW1lPTA7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dBVURJTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8gIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnZvbHVtZSA9IDE2Mzg0KmN1cnJlbnRfdm9sdW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5zdGVwID0gMTYzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiUmFkaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubW9kZSA9IFZJREVPX1NPVU5EX01PTk87Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJhbGFuY2UgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5iYXNlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHJlYmxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZy4gJmFtcDt2LCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgTXVjaCBsaWtlIHRoZSB0dW5lciB3ZSBzdGFydCBieSBjb3B5aW5nIHRoZSB1c2VyIHN0cnVjdHVyZSBpbnRvIGtlcm5lbAotICAgICAgICBzcGFjZS4gQWdhaW4gd2UgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIHZhbGlkIGF1ZGlvIGlucHV0LiBXZSBoYXZlCi0gICAgICAgIG9ubHkgaW5wdXQgMCBhbmQgd2UgcHVudCBpZiB0aGV5IGFzayBmb3IgYW5vdGhlciBpbnB1dC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlbiB3ZSBmaWxsIGluIHRoZSB2aWRlb19hdWRpbyBzdHJ1Y3R1cmUuIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0Ci0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fYXVkaW9fZmllbGRzIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICA8ZW50cnk+YXVkaW88L2VudHJ5PjxlbnRyeT5UaGUgaW5wdXQgdGhlIHVzZXIgd2lzaGVzIHRvIHF1ZXJ5PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+dm9sdW1lPC9lbnRyeT48ZW50cnk+VGhlIHZvbHVtZSBzZXR0aW5nIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmJhc2U8L2VudHJ5PjxlbnRyeT5UaGUgYmFzZSBsZXZlbCBvbiBhIHNjYWxlIG9mIDAtNjU1MzU8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT50cmVibGU8L2VudHJ5PjxlbnRyeT5UaGUgdHJlYmxlIGxldmVsIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+VGhlIGZlYXR1cmVzIHRoaXMgYXVkaW8gZGV2aWNlIHN1cHBvcnRzCi0gICA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+QSB0ZXh0IG5hbWUgdG8gZGlzcGxheSB0byB0aGUgdXNlci4gV2UgcGlja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAiUmFkaW8iIGFzIGl0IGV4cGxhaW5zIHRoaW5ncyBxdWl0ZSBuaWNlbHkuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+bW9kZTwvZW50cnk+PGVudHJ5PlRoZSBjdXJyZW50IHJlY2VwdGlvbiBtb2RlIGZvciB0aGUgYXVkaW8KLQotICAgICAgICAgICAgICAgIFdlIHJlcG9ydCBNT05PIGJlY2F1c2Ugb3VyIGNhcmQgaXMgdG9vIHN0dXBpZCB0byBrbm93IGlmIGl0IGlzIGluCi0gICAgICAgICAgICAgICAgbW9ubyBvciBzdGVyZW8uIAotICAgPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+YmFsYW5jZTwvZW50cnk+PGVudHJ5PlRoZSBzdGVyZW8gYmFsYW5jZSBvbiBhIHNjYWxlIG9mIDAtNjU1MzUsIDMyNzY4IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBtaWRkbGUuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+c3RlcDwvZW50cnk+PGVudHJ5PlRoZSBzdGVwIGJ5IHdoaWNoIHRoZSB2b2x1bWUgY29udHJvbCBqdW1wcy4gVGhpcyBpcwotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBoZWxwIG1ha2UgaXQgZWFzeSBmb3IgYXBwbGljYXRpb25zIHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlciBiZWhhdmlvdXIuPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPC90Ym9keT4KLSAgIDwvdGdyb3VwPgotICAgPC90YWJsZT4KLQotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19hdWRpb19mbGFncyI+PHRpdGxlPnN0cnVjdCB2aWRlb19hdWRpbyBmbGFnczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX01VVEU8L2VudHJ5PjxlbnRyeT5UaGUgYXVkaW8gaXMgY3VycmVudGx5IG11dGVkLiBXZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGZha2UgdGhpcyBpbiBvdXIgZHJpdmVyIGJ1dCB3ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSBub3QgdG8gYm90aGVyLjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19NVVRBQkxFPC9lbnRyeT48ZW50cnk+VGhlIGlucHV0IGhhcyBhIG11dGUgb3B0aW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX1RSRUJMRTwvZW50cnk+PGVudHJ5PlRoZSAgaW5wdXQgaGFzIGEgdHJlYmxlIGNvbnRyb2w8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fQkFTUzwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCBoYXMgYSBiYXNlIGNvbnRyb2w8L2VudHJ5PgotICAgPC9yb3c+Ci0gICA8L3Rib2R5PgotICAgPC90Z3JvdXA+Ci0gICA8L3RhYmxlPgotCi0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2F1ZGlvX21vZGVzIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIG1vZGVzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTU9OTzwvZW50cnk+PGVudHJ5Pk1vbm8gc291bmQ8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfU1RFUkVPPC9lbnRyeT48ZW50cnk+U3RlcmVvIHNvdW5kPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX0xBTkcxPC9lbnRyeT48ZW50cnk+QWx0ZXJuYXRpdmUgbGFuZ3VhZ2UgMSAoVFYgc3BlY2lmaWMpPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX0xBTkcyPC9lbnRyeT48ZW50cnk+QWx0ZXJuYXRpdmUgbGFuZ3VhZ2UgMiAoVFYgc3BlY2lmaWMpPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPC90Ym9keT4KLSAgIDwvdGdyb3VwPgotICAgPC90YWJsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEhhdmluZyBmaWxsZWQgaW4gdGhlIHN0cnVjdHVyZSB3ZSBjb3B5IGl0IGJhY2sgdG8gdXNlciBzcGFjZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZJRElPQ1NBVURJTyBpb2N0bCBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0IHRoZSBhdWRpbyBwYXJhbWV0ZXJzIGluIHRoZQotICAgICAgICB2aWRlb19hdWRpbyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgZG9lcyBpdHMgYmVzdCB0byBob25vdXIgdGhlIHJlcXVlc3QuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQVVESU86Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2F1ZGlvIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmF1ZGlvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdm9sdW1lID0gdi8xNjM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF92b2x1bWUoY3VycmVudF92b2x1bWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBJbiBvdXIgY2FzZSB0aGVyZSBpcyB2ZXJ5IGxpdHRsZSB0aGF0IHRoZSB1c2VyIGNhbiBzZXQuIFRoZSB2b2x1bWUgaXMKLSAgICAgICAgYmFzaWNhbGx5IHRoZSBsaW1pdC4gTm90ZSB0aGF0IHdlIGNvdWxkIHByZXRlbmQgdG8gaGF2ZSBhIG11dGUgZmVhdHVyZQotICAgICAgICBieSByZXdyaXRpbmcgdGhpcyB0byAKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NBVURJTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92b2x1bWUgPSB2LzE2Mzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5mbGFncyZhbXA7VklERU9fQVVESU9fTVVURSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZSgwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZShjdXJyZW50X3ZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X211dGVkID0gdi5mbGFncyAmYW1wOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURFT19BVURJT19NVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB0aGUgVklESU9DR0FVRElPIGNvZGUgdG8gcmVwb3J0IHRoZQotICAgICAgICBzdGF0ZSBvZiB0aGUgbXV0ZSBmbGFnIHdlIHNhdmUgYW5kIHRvIHJlcG9ydCB0aGUgY2FyZCBoYXMgYSBtdXRlIGZ1bmN0aW9uLAotICAgICAgICB3aWxsIGFsbG93IGFwcGxpY2F0aW9ucyB0byB1c2UgYSBtdXRlIGZhY2lsaXR5IHdpdGggdGhpcyBjYXJkLiBJdCBpcwotICAgICAgICBxdWVzdGlvbmFibGUgd2hldGhlciB0aGlzIGlzIGEgZ29vZCBpZGVhIGhvd2V2ZXIuIFVzZXIgYXBwbGljYXRpb25zIGNhbiBhbHJlYWR5Ci0gICAgICAgIGZha2UgdGhpcyB0aGVtc2VsdmVzIGFuZCBrZXJuZWwgc3BhY2UgaXMgcHJlY2lvdXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIG5vdyBoYXZlIGEgd29ya2luZyByYWRpbyBpb2N0bCBoYW5kbGVyLiBTbyB3ZSBqdXN0IHdyYXAgdXAgdGhlIGZ1bmN0aW9uCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBhbmQgcGFzcyB0aGUgVmlkZW80TGludXggbGF5ZXIgYmFjayBhbiBlcnJvciBzbyB0aGF0IGl0IGtub3dzIHdlIGRpZCBub3QKLSAgICAgICAgdW5kZXJzdGFuZCB0aGUgcmVxdWVzdCB3ZSBnb3QgcGFzc2VkLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0ibW9kcmFkaW8iPgotICA8dGl0bGU+TW9kdWxlIFdyYXBwZXI8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgRmluYWxseSB3ZSBhZGQgaW4gdGhlIHVzdWFsIG1vZHVsZSB3cmFwcGluZyBhbmQgdGhlIGRyaXZlciBpcyBkb25lLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotI2lmbmRlZiBNT0RVTEUKLQotc3RhdGljIGludCBpbyA9IDB4MzAwOwotCi0jZWxzZQotCi1zdGF0aWMgaW50IGlvID0gLTE7Ci0KLSNlbmRpZgotCi1NT0RVTEVfQVVUSE9SKCJBbGFuIENveCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgYW4gaW1hZ2luYXJ5IHJhZGlvIGNhcmQuIik7Ci1tb2R1bGVfcGFyYW0oaW8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIGNhcmQuIik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKLXsKLSAgICAgICAgaWYoaW89PS0xKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIAotICAgICAgICAgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbXlyYWRpb19pbml0KE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQotewotICAgICAgICB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYW1wO215X3JhZGlvKTsKLSAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOwotfQotCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGNsZWFudXApOwotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBJbiB0aGlzIGV4YW1wbGUgd2Ugc2V0IHRoZSBJTyBiYXNlIGJ5IGRlZmF1bHQgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvCi0gICAgICAgIHRoZSBrZXJuZWw6IHlvdSBjYW4gc3RpbGwgc2V0IGl0IHVzaW5nICJteV9yYWRpby5pcnEiIGlmIHRoaXMgZmlsZSBpcyBjYWxsZWQgPGZpbGVuYW1lPm15X3JhZGlvLmM8L2ZpbGVuYW1lPi4gRm9yIHRoZSBtb2R1bGUgd2UgcmVxdWlyZSB0aGUKLSAgICAgICAgdXNlciBzZXRzIHRoZSBwYXJhbWV0ZXIuIFdlIHNldCBpbyB0byBhIG5vbnNlbnNlIHBvcnQgKC0xKSBzbyB0aGF0IHdlIGNhbgotICAgICAgICB0ZWxsIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGFuIGlvIHBhcmFtZXRlciBvciBub3QuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHVzZSBNT0RVTEVfIGRlZmluZXMgdG8gZ2l2ZSBhbiBhdXRob3IgZm9yIHRoZSBjYXJkIGRyaXZlciBhbmQgYQotICAgICAgICBkZXNjcmlwdGlvbi4gV2UgYWxzbyB1c2UgdGhlbSB0byBkZWNsYXJlIHRoYXQgaW8gaXMgYW4gaW50ZWdlciBhbmQgaXQgaXMgdGhlCi0gICAgICAgIGFkZHJlc3Mgb2YgdGhlIGNhcmQsIGFuZCBjYW4gYmUgcmVhZCBieSBhbnlvbmUgZnJvbSBzeXNmcy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGNsZWFuLXVwIHJvdXRpbmUgdW5yZWdpc3RlcnMgdGhlIHZpZGVvX2RldmljZSB3ZSByZWdpc3RlcmVkLCBhbmQgZnJlZXMKLSAgICAgICAgdXAgdGhlIEkvTyBzcGFjZS4gTm90ZSB0aGF0IHRoZSB1bnJlZ2lzdGVyIHRha2VzIHRoZSBhY3R1YWwgdmlkZW9fZGV2aWNlCi0gICAgICAgIHN0cnVjdHVyZSBhcyBpdHMgYXJndW1lbnQuIFVubGlrZSB0aGUgZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSB3aGljaCBjYW4gYmUKLSAgICAgICAgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMgb2YgYSBkZXZpY2UgYSB2aWRlb19kZXZpY2Ugc3RydWN0dXJlIGFzIGFuIGFjdHVhbAotICAgICAgICBpbnN0YW5jZSBvZiB0aGUgZGV2aWNlLiBJZiB5b3UgYXJlIHJlZ2lzdGVyaW5nIG11bHRpcGxlIHJhZGlvIGRldmljZXMgeW91Ci0gICAgICAgIG5lZWQgdG8gZmlsbCBpbiBvbmUgc3RydWN0dXJlIHBlciBkZXZpY2UgKG1vc3QgbGlrZWx5IGJ5IHNldHRpbmcgdXAgYQotICAgICAgICB0ZW1wbGF0ZSBhbmQgY29weWluZyBpdCB0byBlYWNoIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHN0cnVjdHVyZXMpLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgPGNoYXB0ZXIgaWQ9IlZpZGVvX0NhcHR1cmVfRGV2aWNlcyI+Ci0gICAgICAgIDx0aXRsZT5WaWRlbyBDYXB0dXJlIERldmljZXM8L3RpdGxlPgotICA8c2VjdDEgaWQ9ImludHJvdmlkIj4KLSAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRGV2aWNlIFR5cGVzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB2aWRlbyBjYXB0dXJlIGRldmljZXMgc2hhcmUgdGhlIHNhbWUgaW50ZXJmYWNlcyBhcyByYWRpbyBkZXZpY2VzLiBJbgotICAgICAgICBvcmRlciB0byBleHBsYWluIHRoZSB2aWRlbyBjYXB0dXJlIGludGVyZmFjZSBJIHdpbGwgdXNlIHRoZSBleGFtcGxlIG9mIGEKLSAgICAgICAgY2FtZXJhIHRoYXQgaGFzIG5vIHR1bmVycyBvciBhdWRpbyBpbnB1dC4gVGhpcyBrZWVwcyB0aGUgZXhhbXBsZSByZWxhdGl2ZWx5Ci0gICAgICAgIGNsZWFuLiBUbyBnZXQgYm90aCBjb21iaW5lIHRoZSB0d28gZHJpdmVyIGV4YW1wbGVzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBWaWRlbyBjYXB0dXJlIGRldmljZXMgZGl2aWRlIGludG8gZm91ciBjYXRlZ29yaWVzLiBBIGxpdHRsZSB0ZWNobm9sb2d5Ci0gICAgICAgIGJhY2tncm91bmRlci4gRnVsbCBtb3Rpb24gdmlkZW8gZXZlbiBhdCB0ZWxldmlzaW9uIHJlc29sdXRpb24gKHdoaWNoIGlzCi0gICAgICAgIGFjdHVhbGx5IGZhaXJseSBsb3cpIGlzIHByZXR0eSByZXNvdXJjZS1pbnRlbnNpdmUuIFlvdSBhcmUgY29udGludWFsbHkKLSAgICAgICAgcGFzc2luZyBtZWdhYnl0ZXMgb2YgZGF0YSBldmVyeSBzZWNvbmQgZnJvbSB0aGUgY2FwdHVyZSBjYXJkIHRvIHRoZSBkaXNwbGF5LiAKLSAgICAgICAgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIGhhdmUgZW1lcmdlZCBiZWNhdXNlIGNvcHlpbmcgdGhpcyB0aHJvdWdoIHRoZSAKLSAgICAgICAgcHJvY2Vzc29yIGFuZCB0aGUgdXNlciBwcm9ncmFtIGlzIGEgcGFydGljdWxhcmx5IGJhZCBpZGVhIC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGlzIHRvIGFkZCB0aGUgdGVsZXZpc2lvbiBpbWFnZSBvbnRvIHRoZSB2aWRlbyBvdXRwdXQgZGlyZWN0bHkuCi0gICAgICAgIFRoaXMgaXMgYWxzbyBob3cgc29tZSAzRCBjYXJkcyB3b3JrLiBUaGVzZSBiYXNpYyBjYXJkcyBjYW4gZ2VuZXJhbGx5IGRyb3AgdGhlCi0gICAgICAgIHZpZGVvIGludG8gYW55IGNob3NlbiByZWN0YW5nbGUgb2YgdGhlIGRpc3BsYXkuIENhcmRzIGxpa2UgdGhpcywgd2hpY2gKLSAgICAgICAgaW5jbHVkZSBtb3N0IG1wZWcxIGNhcmRzIHRoYXQgdXNlZCB0aGUgZmVhdHVyZSBjb25uZWN0b3IsICBhcmVuJ3QgdmVyeQotICAgICAgICBmcmllbmRseSBpbiBhIHdpbmRvd2luZyBlbnZpcm9ubWVudC4gVGhleSBkb24ndCB1bmRlcnN0YW5kIHdpbmRvd3Mgb3IKLSAgICAgICAgY2xpcHBpbmcuIFRoZSB2aWRlbyB3aW5kb3cgaXMgYWx3YXlzIG9uIHRoZSB0b3Agb2YgdGhlIGRpc3BsYXkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIENocm9tYSBrZXlpbmcgaXMgYSB0ZWNobmlxdWUgdXNlZCBieSBjYXJkcyB0byBnZXQgYXJvdW5kIHRoaXMuIEl0IGlzIGFuIG9sZAotICAgICAgICB0ZWxldmlzaW9uIG1peGluZyB0cmljayB3aGVyZSB5b3UgbWFyayBhbGwgdGhlIGFyZWFzIHlvdSB3aXNoIHRvIHJlcGxhY2UKLSAgICAgICAgd2l0aCBhIHNpbmdsZSBjbGVhciBjb2xvdXIgdGhhdCBpc24ndCB1c2VkIGluIHRoZSBpbWFnZSAtIFRWIHBlb3BsZSB1c2UgYW4KLSAgICAgICAgaW5jcmVkaWJseSBicmlnaHQgYmx1ZSB3aGlsZSBjb21wdXRpbmcgcGVvcGxlIG9mdGVuIHVzZSBhIHBhcnRpY3VsYXJseQotICAgICAgICB2aXJ1bGVudCBwdXJwbGUuIEJyaWdodCBibHVlIG9jY3VycyBvbiB0aGUgZGVza3RvcC4gQW55b25lIHdpdGggdmlydWxlbnQKLSAgICAgICAgcHVycGxlIHdpbmRvd3MgaGFzIGFub3RoZXIgcHJvYmxlbSBiZXNpZGVzIHRoZWlyIFRWIG92ZXJsYXkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcHByb2FjaCBpcyB0byBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcHR1cmUgY2FyZCB0byB0aGUgdmlkZW8KLSAgICAgICAgY2FyZCwgYnV0IHRvIGRvIGl0IGRpcmVjdGx5IGFjcm9zcyB0aGUgUENJIGJ1cy4gVGhpcyByZWxpZXZlcyB0aGUgcHJvY2Vzc29yCi0gICAgICAgIGZyb20gZG9pbmcgdGhlIHdvcmsgYnV0IGRvZXMgcmVxdWlyZSBzb21lIHNtYXJ0bmVzcyBvbiB0aGUgcGFydCBvZiB0aGUgdmlkZW8KLSAgICAgICAgY2FwdHVyZSBjaGlwLCBhcyB3ZWxsIGFzIGEgc3VpdGFibGUgdmlkZW8gY2FyZC4gUHJvZ3JhbW1pbmcgdGhpcyBraW5kIG9mCi0gICAgICAgIGNhcmQgYW5kIG1vcmUgc28gZGVidWdnaW5nIGl0IGNhbiBiZSBleHRyZW1lbHkgdHJpY2t5LiBUaGVyZSBhcmUgc29tZSBxdWl0ZQotICAgICAgICBjb21wbGljYXRlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGlzcGxheSBhbmQgeW91IG1heSBhbHNvIGhhdmUgdG8gY29wZSB3aXRoCi0gICAgICAgIHZhcmlvdXMgY2hpcHNldCBidWdzIHRoYXQgc2hvdyB1cCB3aGVuIFBDSSBjYXJkcyBzdGFydCB0YWxraW5nIHRvIGVhY2gKLSAgICAgICAgb3RoZXIuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUbyBrZWVwIG91ciBleGFtcGxlIGZhaXJseSBzaW1wbGUgd2Ugd2lsbCBhc3N1bWUgYSBjYXJkIHRoYXQgc3VwcG9ydHMKLSAgICAgICAgb3ZlcmxheWluZyBhIGZsYXQgcmVjdGFuZ3VsYXIgaW1hZ2Ugb250byB0aGUgZnJhbWUgYnVmZmVyIG91dHB1dCwgYW5kIHdoaWNoCi0gICAgICAgIGNhbiBhbHNvIGNhcHR1cmUgc3R1ZmYgaW50byBwcm9jZXNzb3IgbWVtb3J5LgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0icmVndmlkIj4KLSAgPHRpdGxlPlJlZ2lzdGVyaW5nIFZpZGVvIENhcHR1cmUgRGV2aWNlczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIHRpbWUgd2UgbmVlZCB0byBhZGQgbW9yZSBmdW5jdGlvbnMgZm9yIG91ciBjYW1lcmEgZGV2aWNlLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG15X2NhbWVyYQotewotICAgICAgICAiTXkgQ2FtZXJhIiwKLSAgICAgICAgVklEX1RZUEVfT1ZFUkxBWXxWSURfVFlQRV9TQ0FMRVN8XAotICAgICAgICBWSURfVFlQRV9DQVBUVVJFfFZJRF9UWVBFX0NIUk9NQUtFWSwKLSAgICAgICAgY2FtZXJhX29wZW4uCi0gICAgICAgIGNhbWVyYV9jbG9zZSwKLSAgICAgICAgY2FtZXJhX3JlYWQsICAgICAgLyogbm8gcmVhZCAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLwotICAgICAgICBjYW1lcmFfcG9sbCwgICAgICAvKiBubyBwb2xsICovCi0gICAgICAgIGNhbWVyYV9pb2N0bCwKLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgLyogbm8gc3BlY2lhbCBpbml0IGZ1bmN0aW9uICovCi0gICAgICAgIE5VTEwgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLwotfTsKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIG5lZWQgYSByZWFkKCkgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBmb3IgY2FwdHVyaW5nIGRhdGEgZnJvbQotICAgICAgICB0aGUgY2FyZCwgYW5kIHdlIG5lZWQgYSBwb2xsIGZ1bmN0aW9uIHNvIHRoYXQgYSBkcml2ZXIgY2FuIHdhaXQgZm9yIHRoZSBuZXh0Ci0gICAgICAgIGZyYW1lIHRvIGJlIGNhcHR1cmVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSB1c2UgdGhlIGV4dHJhIHZpZGVvIGNhcGFiaWxpdHkgZmxhZ3MgdGhhdCBkaWQgbm90IGFwcGx5IHRvIHRoZQotICAgICAgICByYWRpbyBpbnRlcmZhY2UuIFRoZSB2aWRlbyByZWxhdGVkIGZsYWdzIGFyZQotICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9IkNhcHR1cmVfQ2FwYWJpbGl0aWVzIj48dGl0bGU+Q2FwdHVyZSBDYXBhYmlsaXRpZXM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotPGVudHJ5PlZJRF9UWVBFX0NBUFRVUkU8L2VudHJ5PjxlbnRyeT5XZSBzdXBwb3J0IGltYWdlIGNhcHR1cmU8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9URUxFVEVYVDwvZW50cnk+PGVudHJ5PkEgdGVsZXRleHQgY2FwdHVyZSBkZXZpY2UgKHZiaXtuXSk8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9PVkVSTEFZPC9lbnRyeT48ZW50cnk+VGhlIGltYWdlIGNhbiBiZSBkaXJlY3RseSBvdmVybGFpZCBvbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBidWZmZXI8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9DSFJPTUFLRVk8L2VudHJ5PjxlbnRyeT5DaHJvbWFrZXkgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoaWNoIHBhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpbWFnZSB0byBkaXNwbGF5PC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfQ0xJUFBJTkc8L2VudHJ5PjxlbnRyeT5JdCBpcyBwb3NzaWJsZSB0byBnaXZlIHRoZSBib2FyZCBhIGxpc3Qgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlcyB0byBkcmF3IGFyb3VuZC4gPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfRlJBTUVSQU08L2VudHJ5PjxlbnRyeT5UaGUgdmlkZW8gY2FwdHVyZSBnb2VzIGludG8gdGhlIHZpZGVvIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWN0dWFsbHkgY2hhbmdlcyBpdC4gQXBwbGljYXRpb25zIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8ga25vdyB0aGlzIHNvIHRoZXkgY2FuIGNsZWFuIHVwIGFmdGVyIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfU0NBTEVTPC9lbnRyeT48ZW50cnk+VGhlIGltYWdlIGNhbiBiZSBzY2FsZWQgdG8gdmFyaW91cyBzaXplcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaW5nbGUgZml4ZWQgc2l6ZS48L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9NT05PQ0hST01FPC9lbnRyeT48ZW50cnk+VGhlIGNhcHR1cmUgd2lsbCBiZSBtb25vY2hyb21lLiBUaGlzIGlzbid0IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBzaW5jZSBhIG1vbm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhIG9uIGEgY29sb3VyIGNhcHR1cmUgY2FyZCB3aWxsIHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgbW9ubyBvdXRwdXQuPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfU1VCQ0FQVFVSRTwvZW50cnk+PGVudHJ5PlRoZSBjYXJkIGFsbG93cyBvbmx5IHBhcnQgb2YgaXRzIGZpZWxkIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgdG8gYmUgY2FwdHVyZWQuIFRoaXMgZW5hYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgdG8gYXZvaWQgY29weWluZyBhbGwgb2YgYSBsYXJnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpbnRvIG1lbW9yeSB3aGVuIG9ubHkgc29tZSBzZWN0aW9uIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50LjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICA8cGFyYT4KLSAgICAgICAgV2Ugc2V0IFZJRF9UWVBFX0NBUFRVUkUgc28gdGhhdCB3ZSBhcmUgc2VlbiBhcyBhIGNhcHR1cmUgY2FyZCwKLSAgICAgICAgVklEX1RZUEVfQ0hST01BS0VZIHNvIHRoZSBhcHBsaWNhdGlvbiBrbm93cyBpdCBpcyB0aW1lIHRvIGRyYXcgaW4gdmlydWxlbnQKLSAgICAgICAgcHVycGxlLCBhbmQgVklEX1RZUEVfU0NBTEVTIGJlY2F1c2Ugd2UgY2FuIGJlIHJlc2l6ZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE91ciBzZXR1cCBpcyBmYWlybHkgc2ltaWxhci4gVGhpcyB0aW1lIHdlIGFsc28gd2FudCBhbiBpbnRlcnJ1cHQgbGluZQotICAgICAgICBmb3IgdGhlICdmcmFtZSBjYXB0dXJlZCcgc2lnbmFsLiBOb3QgYWxsIGNhcmRzIGhhdmUgdGhpcyBzbyBzb21lIG9mIHRoZW0KLSAgICAgICAgY2Fubm90IGhhbmRsZSBwb2xsKCkuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgaW8gPSAweDMyMDsKLXN0YXRpYyBpbnQgaXJxID0gMTE7Ci0KLWludCBfX2luaXQgbXljYW1lcmFfaW5pdChzdHJ1Y3QgdmlkZW9faW5pdCAqdikKLXsKLSAgICAgICAgaWYoIXJlcXVlc3RfcmVnaW9uKGlvLCBNWV9JT19TSVpFLCAibXljYW1lcmEiKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAKLSAgICAgICAgICAgICAgICAgICAgICAibXljYW1lcmE6IHBvcnQgMHglMDNYIGlzIGluIHVzZS5cbiIsIGlvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYodmlkZW9fZGV2aWNlX3JlZ2lzdGVyKCZhbXA7bXlfY2FtZXJhLCAKLSAgICAgICAgICAgIFZGTF9UWVBFX0dSQUJCRVIpPT0tMSkgewotICAgICAgICAgICAgICAgIHJlbGVhc2VfcmVnaW9uKGlvLCBNWV9JT19TSVpFKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBsaXR0bGUgY2hhbmdlZCBmcm9tIHRoZSBuZWVkcyBvZiB0aGUgcmFkaW8gY2FyZC4gV2Ugc3BlY2lmeQotICAgICAgICBWRkxfVFlQRV9HUkFCQkVSIHRoaXMgdGltZSBhcyB3ZSB3YW50IHRvIGJlIGFsbG9jYXRlZCBhIC9kZXYvdmlkZW8gbmFtZS4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9Im9wdmlkIj4KLSAgPHRpdGxlPk9wZW5pbmcgQW5kIENsb3NpbmcgVGhlIENhcHR1cmUgRGV2aWNlPC90aXRsZT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgdXNlcnMgPSAwOwotCi1zdGF0aWMgaW50IGNhbWVyYV9vcGVuKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQotewotICAgICAgICBpZih1c2VycykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBpZihyZXF1ZXN0X2lycShpcnEsIGNhbWVyYV9pcnEsIDAsICJjYW1lcmEiLCBkZXYpJmx0OzApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgdXNlcnMrKzsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBjYW1lcmFfY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQotewotICAgICAgICB1c2Vycy0tOwotICAgICAgICBmcmVlX2lycShpcnEsIGRldik7Ci19Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMgYXJlIGFsc28gcXVpdGUgc2ltaWxhci4gVGhlIG9ubHkgcmVhbCBjaGFuZ2UgaXMKLSAgICAgICAgdGhhdCB3ZSBub3cgcmVxdWVzdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBjYW1lcmEgZGV2aWNlIGludGVycnVwdCBsaW5lLiBJZiB3ZQotICAgICAgICBjYW5ub3QgZ2V0IHRoZSBpbnRlcnJ1cHQgd2UgcmVwb3J0IEVCVVNZIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQgZ2l2ZSB1cC4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9ImlycXZpZCI+Ci0gIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxpbmc8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGV4YW1wbGUgaGFuZGxlciBpcyBmb3IgYW4gSVNBIGJ1cyBkZXZpY2UuIElmIGl0IHdhcyBQQ0kgeW91IHdvdWxkIGJlCi0gICAgICAgIGFibGUgdG8gc2hhcmUgdGhlIGludGVycnVwdCBhbmQgd291bGQgaGF2ZSBzZXQgSVJRRl9TSEFSRUQgdG8gaW5kaWNhdGUgYQotICAgICAgICBzaGFyZWQgSVJRLiBXZSBwYXNzIHRoZSBkZXZpY2UgcG9pbnRlciBhcyB0aGUgaW50ZXJydXB0IHJvdXRpbmUgYXJndW1lbnQuIFdlCi0gICAgICAgIGRvbid0IG5lZWQgdG8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IG9uZSBjYXJkIGJ1dCBkb2luZyB0aGlzIHdpbGwgbWFrZSBpdAotICAgICAgICBlYXNpZXIgdG8gdXBncmFkZSB0aGUgZHJpdmVyIGZvciBtdWx0aXBsZSBkZXZpY2VzIGluIHRoZSBmdXR1cmUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE91ciBpbnRlcnJ1cHQgcm91dGluZSBuZWVkcyB0byBkbyBsaXR0bGUgaWYgd2UgYXNzdW1lIHRoZSBjYXJkIGNhbiBzaW1wbHkKLSAgICAgICAgcXVldWUgb25lIGZyYW1lIHRvIGJlIHJlYWQgYWZ0ZXIgaXQgY2FwdHVyZXMgaXQuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgc3RydWN0IHdhaXRfcXVldWUgKmNhcHR1cmVfd2FpdDsKLXN0YXRpYyBpbnQgY2FwdHVyZV9yZWFkeSA9IDA7Ci0KLXN0YXRpYyB2b2lkIGNhbWVyYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0gICAgICAgIGNhcHR1cmVfcmVhZHk9MTsKLSAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7Y2FwdHVyZV93YWl0KTsKLX0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBuaWNlIGFuZCBzaW1wbGUgZm9yIHRoaXMgY2FyZCBhcyB3ZSBhcmUgYXNzdW1pbmcKLSAgICAgICAgdGhlIGNhcmQgaXMgYnVmZmVyaW5nIHRoZSBmcmFtZSBmb3IgdXMuIFRoaXMgbWVhbnMgd2UgaGF2ZSBsaXR0bGUgdG8gZG8gYnV0Ci0gICAgICAgIHdha2UgdXAgICAgICAgIGFueWJvZHkgaW50ZXJlc3RlZC4gV2UgYWxzbyBzZXQgYSBjYXB0dXJlX3JlYWR5IGZsYWcsIGFzIHdlIG1heQotICAgICAgICBjYXB0dXJlIGEgZnJhbWUgYmVmb3JlIGFuIGFwcGxpY2F0aW9uIG5lZWRzIGl0LiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBrbm93Ci0gICAgICAgIHRoYXQgYSBmcmFtZSBpcyByZWFkeS4gSWYgd2UgaGFkIHRvIGNvbGxlY3QgdGhlIGZyYW1lIG9uIHRoZSBpbnRlcnJ1cHQgbGlmZQotICAgICAgICB3b3VsZCBiZSBtb3JlIGNvbXBsZXguCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB0d28gbmV3IHJvdXRpbmVzIHdlIG5lZWQgdG8gc3VwcGx5IGFyZSBjYW1lcmFfcmVhZCB3aGljaCByZXR1cm5zIGEKLSAgICAgICAgZnJhbWUsIGFuZCBjYW1lcmFfcG9sbCB3aGljaCB3YWl0cyBmb3IgYSBmcmFtZSB0byBiZWNvbWUgcmVhZHkuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgY2FtZXJhX3BvbGwoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCAKLQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGUgKndhaXQpCi17Ci0gICAgICAgIHBvbGxfd2FpdChmaWxlLCAmYW1wO2NhcHR1cmVfd2FpdCwgd2FpdCk7Ci0gICAgICAgIGlmKGNhcHR1cmVfcmVhZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUE9MTElOfFBPTExSRE5PUk07Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBPdXIgd2FpdCBxdWV1ZSBmb3IgcG9sbGluZyBpcyB0aGUgY2FwdHVyZV93YWl0IHF1ZXVlLiBUaGlzIHdpbGwgY2F1c2UgdGhlCi0gICAgICAgIHRhc2sgdG8gYmUgd29rZW4gdXAgYnkgb3VyIGNhbWVyYV9pcnEgcm91dGluZS4gV2UgY2hlY2sgY2FwdHVyZV9yZWFkIHRvIHNlZQotICAgICAgICBpZiB0aGVyZSBpcyBhbiBpbWFnZSBwcmVzZW50IGFuZCBpZiBzbyByZXBvcnQgdGhhdCBpdCBpcyByZWFkYWJsZS4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9InJkdmlkIj4KLSAgPHRpdGxlPlJlYWRpbmcgVGhlIFZpZGVvIEltYWdlPC90aXRsZT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBsb25nIGNhbWVyYV9yZWFkKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQotewotICAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZSB3YWl0ID0geyBjdXJyZW50LCBOVUxMIH07Ci0gICAgICAgIHU4ICpwdHI7Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIGFkZF93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotCi0gICAgICAgIHdoaWxlKCFjYXB0dXJlX3JlYWR5KQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoZmlsZS0+ZmxhZ3MmYW1wO09fTkRFTEFZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVXT1VMREJMT0NLOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKLSAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCB0aGluZyB3ZSBoYXZlIHRvIGRvIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3YWl0cyB1bnRpbAotICAgICAgICB0aGUgbmV4dCBmcmFtZSBpcyByZWFkeS4gVGhlIGNvZGUgaGVyZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBtb3VzZSBjb2RlCi0gICAgICAgIHdlIHVzZWQgZWFybGllciBpbiB0aGlzIGNoYXB0ZXIuIEl0IGlzIG9uZSBvZiB0aGUgY29tbW9uIGJ1aWxkaW5nIGJsb2NrcyBvZgotICAgICAgICBMaW51eCBkZXZpY2UgZHJpdmVyIGNvZGUgYW5kIHByb2JhYmx5IG9uZSB3aGljaCB5b3Ugd2lsbCBmaW5kIG9jY3VycyBpbiBhbnkKLSAgICAgICAgZHJpdmVycyB5b3Ugd3JpdGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHdhaXQgZm9yIGEgZnJhbWUgdG8gYmUgcmVhZHksIG9yIGZvciBhIHNpZ25hbCB0byBpbnRlcnJ1cHQgb3VyIHdhaXRpbmcuIElmIGEKLSAgICAgICAgc2lnbmFsIG9jY3VycyB3ZSBuZWVkIHRvIHJldHVybiBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBzbyB0aGF0IHRoZSBzaWduYWwgY2FuCi0gICAgICAgIGJlIHNlbnQgdG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi4gV2UgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgYWN0dWFsbHkKLSAgICAgICAgd2FudGVkIHRvIGF2b2lkIHdhaXRpbmcgLSBpZSAgaWYgdGhleSBhcmUgdXNpbmcgbm9uLWJsb2NraW5nIEkvTyBhbmQgaGF2ZSBvdGhlciB0aGluZ3MgCi0gICAgICAgIHRvIGdldCBvbiB3aXRoLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBOZXh0IHdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgdXNlciBhcHBsaWNhdGlvbi4gVGhpcyBpcyByYXJlbHkKLSAgICAgICAgYXMgZWFzeSBhcyBvdXIgZXhhbXBsZSBtYWtlcyBvdXQuIFdlIHdpbGwgYWRkIGNhcHR1cmVfdywgYW5kIGNhcHR1cmVfaCBoZXJlCi0gICAgICAgIHRvIGhvbGQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGNhcHR1cmVkIGltYWdlLiBXZSBhc3N1bWUgdGhlIGNhcmQgb25seQotICAgICAgICBzdXBwb3J0cyAyNGJpdCBSR0IgZm9yIG5vdy4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotCi0gICAgICAgIGNhcHR1cmVfcmVhZHkgPSAwOwotCi0gICAgICAgIHB0cj0odTggKilidWY7Ci0gICAgICAgIGxlbiA9IGNhcHR1cmVfdyAqIDMgKiBjYXB0dXJlX2g7IC8qIDI0Yml0IFJHQiAqLwotCi0gICAgICAgIGlmKGxlbj5jb3VudCkKLSAgICAgICAgICAgICAgICBsZW49Y291bnQ7ICAvKiBEb2Vzbid0IGFsbCBmaXQgKi8KLQotICAgICAgICBmb3IoaT0wOyBpJmx0O2xlbjsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHV0X3VzZXIoaW5iKGlvK0lNQUdFX0RBVEEpLCBwdHIpOwotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFyZHdhcmVfcmVzdGFydF9jYXB0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBpOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBGb3IgYSByZWFsIGhhcmR3YXJlIGRldmljZSB5b3Ugd291bGQgdHJ5IHRvIGF2b2lkIHRoZSBsb29wIHdpdGggcHV0X3VzZXIoKS4KLSAgICAgICAgRWFjaCBjYWxsIHRvIHB1dF91c2VyKCkgaGFzIGEgdGltZSBvdmVyaGVhZCBjaGVja2luZyB3aGV0aGVyIHRoZSBhY2Nlc3NlcyB0byB1c2VyCi0gICAgICAgIHNwYWNlIGFyZSBhbGxvd2VkLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVhZCBhIGxpbmUgaW50byBhIHRlbXBvcmFyeSBidWZmZXIKLSAgICAgICAgdGhlbiBjb3B5IHRoaXMgdG8gdXNlciBzcGFjZSBpbiBvbmUgZ28uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEhhdmluZyBjYXB0dXJlZCB0aGUgaW1hZ2UgYW5kIHB1dCBpdCBpbnRvIHVzZXIgc3BhY2Ugd2UgY2FuIGtpY2sgdGhlIGNhcmQgdG8KLSAgICAgICAgZ2V0IHRoZSBuZXh0IGZyYW1lIGFjcXVpcmVkLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iaW9jdmlkIj4KLSAgPHRpdGxlPlZpZGVvIElvY3RsIEhhbmRsaW5nPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEFzIHdpdGggdGhlIHJhZGlvIGRyaXZlciB0aGUgbWFqb3IgY29udHJvbCBpbnRlcmZhY2UgaXMgdmlhIHRoZSBpb2N0bCgpCi0gICAgICAgIGZ1bmN0aW9uLiBWaWRlbyBjYXB0dXJlIGRldmljZXMgc3VwcG9ydCB0aGUgc2FtZSB0dW5lciBjYWxscyBhcyBhIHJhZGlvCi0gICAgICAgIGRldmljZSBhbmQgYWxzbyBzdXBwb3J0IGFkZGl0aW9uYWwgY2FsbHMgdG8gY29udHJvbCBob3cgdGhlIHZpZGVvIGZ1bmN0aW9ucwotICAgICAgICBhcmUgaGFuZGxlZC4gSW4gdGhpcyBzaW1wbGUgZXhhbXBsZSB0aGUgY2FyZCBoYXMgbm8gdHVuZXJzIHRvIGF2b2lkIG1ha2luZwotICAgICAgICB0aGUgY29kZSBjb21wbGV4LiAKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotCi1zdGF0aWMgaW50IGNhbWVyYV9pb2N0bChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLSAgICAgICAgc3dpdGNoKGNtZCkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NBUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURfVFlQRV9DSFJPTUFLRVl8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklEX1RZUEVfU0NBTEVTfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJRF9UWVBFX09WRVJMQVk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYXVkaW9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4d2lkdGggPSA2NDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbndpZHRoID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1heGhlaWdodCA9IDQ4MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWluaGVpZ2h0ID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiTXkgQ2FtZXJhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3YsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCBpb2N0bCB3ZSBtdXN0IHN1cHBvcnQgYW5kIHdoaWNoIGFsbCB2aWRlbyBjYXB0dXJlIGFuZCByYWRpbwotICAgICAgICBkZXZpY2VzIGFyZSByZXF1aXJlZCB0byBzdXBwb3J0IGlzIFZJRElPQ0dDQVAuIFRoaXMgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lCi0gICAgICAgIGFzIHdpdGggYSByYWRpbyBkZXZpY2UuIFRoaXMgdGltZSwgaG93ZXZlciwgd2UgcmVwb3J0IHRoZSBleHRyYSBjYXBhYmlsaXRpZXMKLSAgICAgICAgd2Ugb3V0bGluZWQgZWFybGllciBvbiB3aGVuIGRlZmluaW5nIG91ciB2aWRlb19kZXYgc3RydWN0dXJlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSBub3cgc2V0IHRoZSB2aWRlbyBmbGFncyBzYXlpbmcgdGhhdCB3ZSBzdXBwb3J0IG92ZXJsYXksIGNhcHR1cmUsCi0gICAgICAgIHNjYWxpbmcgYW5kIGNocm9tYWtleS4gV2UgYWxzbyByZXBvcnQgc2l6ZSBsaW1pdHMgLSBvdXIgc21hbGxlc3QgaW1hZ2UgaXMKLSAgICAgICAgMTZ4MTYgcGl4ZWxzLCBvdXIgbGFyZ2VzdCBpcyA2NDB4NDgwLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIHdlIHJlcG9ydCBubyBhdWRpbyBhbmQgbm8gdHVuaW5nIGNhcGFiaWxpdGllcyBhdCBhbGwuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPiAgICAgICAgCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dDSEFOOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jaGFubmVsIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmNoYW5uZWwgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHVuZXJzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5ub3JtID0gVklERU9fTU9ERV9BVVRPOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYubmFtZSwgIkNhbWVyYSBJbnB1dCIpO2JyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIGZvbGxvd3Mgd2hhdCBpcyB2ZXJ5IG11Y2ggdGhlIHN0YW5kYXJkIHdheSBhbiBpb2N0bCBoYW5kbGVyIGxvb2tzCi0gICAgICAgIGluIExpbnV4LiBXZSBjb3B5IHRoZSBkYXRhIGludG8gYSBrZXJuZWwgc3BhY2UgdmFyaWFibGUgYW5kIHdlIGNoZWNrIHRoYXQgdGhlCi0gICAgICAgIHJlcXVlc3QgaXMgdmFsaWQgKGluIHRoaXMgY2FzZSB0aGF0IHRoZSBpbnB1dCBpcyAwKS4gRmluYWxseSB3ZSBjb3B5IHRoZQotICAgICAgICBjYW1lcmEgaW5mbyBiYWNrIHRvIHRoZSB1c2VyLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVklESU9DR0NIQU4gaW9jdGwgYWxsb3dzIGEgdXNlciB0byBhc2sgYWJvdXQgdmlkZW8gY2hhbm5lbHMgKHRoYXQgaXMKLSAgICAgICAgaW5wdXRzIHRvIHRoZSB2aWRlbyBjYXJkKS4gT3VyIGV4YW1wbGUgY2FyZCBoYXMgYSBzaW5nbGUgY2FtZXJhIGlucHV0LiBUaGUKLSAgICAgICAgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmUgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2hhbm5lbF9maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBmaWVsZHM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotCi0gICA8ZW50cnk+Y2hhbm5lbDwvZW50cnk+PGVudHJ5PlRoZSBjaGFubmVsIG51bWJlciB3ZSBhcmUgc2VsZWN0aW5nPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+bmFtZTwvZW50cnk+PGVudHJ5PlRoZSBuYW1lIGZvciB0aGlzIGNoYW5uZWwuIFRoaXMgaXMgaW50ZW5kZWQKLSAgICAgICAgICAgICAgICAgICB0byBkZXNjcmliZSB0aGUgcG9ydCB0byB0aGUgdXNlci4KLSAgICAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBuYW1lcyBhcmUgdGhlcmVmb3JlIHRoaW5ncyBsaWtlCi0gICAgICAgICAgICAgICAgICAgIkNhbWVyYSIgIlNDQVJUIGlucHV0IjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBwcm9wZXJ0aWVzPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+dHlwZTwvZW50cnk+PGVudHJ5PklucHV0IHR5cGU8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5ub3JtPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgdGVsZXZpc2lvbiBlbmNvZGluZyBiZWluZyB1c2VkCi0gICAgICAgICAgICAgICAgICAgaWYgcmVsZXZhbnQgZm9yIHRoaXMgY2hhbm5lbC4KLSAgICA8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2NoYW5uZWxfZmxhZ3MiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBmbGFnczwvdGl0bGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgPHRib2R5PgotICAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19WQ19UVU5FUjwvZW50cnk+PGVudHJ5PkNoYW5uZWwgaGFzIGEgdHVuZXIuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19WQ19BVURJTzwvZW50cnk+PGVudHJ5PkNoYW5uZWwgaGFzIGF1ZGlvLjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2hhbm5lbF90eXBlcyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIHR5cGVzPC90aXRsZT4KLSAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgICA8dGJvZHk+Ci0gICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RZUEVfVFY8L2VudHJ5PjxlbnRyeT5UZWxldmlzaW9uIGlucHV0LjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFlQRV9DQU1FUkE8L2VudHJ5PjxlbnRyeT5GaXhlZCBjYW1lcmEgaW5wdXQuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0JPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT5UeXBlIGlzIHVua25vd24uPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jaGFubmVsX25vcm1zIj48dGl0bGU+c3RydWN0IHZpZGVvX2NoYW5uZWwgbm9ybXM8L3RpdGxlPgotICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgIDx0Ym9keT4KLSAgICA8cm93PgotICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19NT0RFX05UU0M8L2VudHJ5PjxlbnRyeT5OVFNDIChVUykgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1NFQ0FNPC9lbnRyeT48ZW50cnk+U0VDQU0gKEZyZW5jaCkgVGVsZXZpc2lvbiA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkF1dG9tYXRpYyBzd2l0Y2hpbmcsIG9yIGZvcm1hdCBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXI8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgVklESU9DU0NIQU4gaW9jdGwgYWxsb3dzIGEgdXNlciB0byBjaGFuZ2UgY2hhbm5lbCBhbmQgdG8KLSAgICAgICAgcmVxdWVzdCB0aGUgbm9ybSBpcyBjaGFuZ2VkIC0gZm9yIGV4YW1wbGUgdG8gc3dpdGNoIGJldHdlZW4gYSBQQUwgb3IgYW4gTlRTQwotICAgICAgICBmb3JtYXQgY2FtZXJhLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQ0hBTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5jaGFubmVsICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5ub3JtICE9IFZJREVPX01PREVfQVVUTykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2FsbCBpbiBvdXIgZHJpdmVyIGlzIHJlbWFya2FibHkgZWFzeS4gQmVjYXVzZSB3ZQotICAgICAgICBhcmUgYXNzdW1pbmcgZml4ZWQgZm9ybWF0IGhhcmR3YXJlIHdlIG5lZWQgb25seSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyBub3QKLSAgICAgICAgdHJpZWQgdG8gY2hhbmdlIGFueXRoaW5nLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHVzZXIgYWxzbyBuZWVkcyB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgYWRqdXN0IHRoZSBwaWN0dXJlIHRoZXkgYXJlCi0gICAgICAgIHNlZWluZy4gVGhpcyBpcyBtdWNoIGxpa2UgYWRqdXN0aW5nIGEgdGVsZXZpc2lvbiBzZXQuIEEgdXNlciBhcHBsaWNhdGlvbgotICAgICAgICBhbHNvIG5lZWRzIHRvIGtub3cgdGhlIHBhbGV0dGUgYmVpbmcgdXNlZCBzbyB0aGF0IGl0IGtub3dzIGhvdyB0byBkaXNwbGF5Ci0gICAgICAgIHRoZSBpbWFnZSB0aGF0IGhhcyBiZWVuIGNhcHR1cmVkLiBUaGUgVklESU9DR1BJQ1QgYW5kIFZJRElPQ1NQSUNUIGlvY3RsCi0gICAgICAgIGNhbGxzIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1BJQ1QKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi5icmlnaHRuZXNzID0gaGFyZHdhcmVfYnJpZ2h0bmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5odWUgPSBoYXJkd2FyZV9odWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuY29sb3VyID0gaGFyZHdhcmVfc2F0dXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5jb250cmFzdCA9IGhhcmR3YXJlX2JyaWdodG5lc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBzZXR0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdi53aGl0ZW5lc3MgPSAzMjc2ODsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZGVwdGggPSAyNDsgICAgICAgICAgIC8qIDI0Yml0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2LnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGJyaWdodG5lc3MsIGh1ZSwgY29sb3IsIGFuZCBjb250cmFzdCBwcm92aWRlIHRoZSBwaWN0dXJlIGNvbnRyb2xzIHRoYXQKLSAgICAgICAgYXJlIGFraW4gdG8gYSBjb252ZW50aW9uYWwgdGVsZXZpc2lvbi4gV2hpdGVuZXNzIHByb3ZpZGVzIGFkZGl0aW9uYWwKLSAgICAgICAgY29udHJvbCBmb3IgZ3JleXNjYWxlIGltYWdlcy4gQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgc2NhbGVkIGJldHdlZW4gMC02NTUzNQotICAgICAgICBhbmQgaGF2ZSAzMjc2OCBhcyB0aGUgbWlkIHBvaW50IHNldHRpbmcuIFRoZSBzY2FsaW5nIG1lYW5zIHRoYXQgYXBwbGljYXRpb25zCi0gICAgICAgIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBjYXBhYmlsaXR5IHJhbmdlIG9mIHRoZSBoYXJkd2FyZSBidXQgY2FuIGxldAotICAgICAgICBpdCBtYWtlIGEgYmVzdCBlZmZvcnQgYXR0ZW1wdC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGRlcHRoIGlzIDI0LCBhcyB0aGlzIGlzIGluIGJpdHMuIFdlIHdpbGwgYmUgcmV0dXJuaW5nIFJHQjI0IGZvcm1hdC4gVGhpcwotICAgICAgICBoYXMgb25lIGJ5dGUgb2YgcmVkLCB0aGVuIG9uZSBvZiBncmVlbiwgdGhlbiBvbmUgb2YgYmx1ZS4gVGhpcyB0aGVuIHJlcGVhdHMKLSAgICAgICAgZm9yIGV2ZXJ5IG90aGVyIHBpeGVsIGluIHRoZSBpbWFnZS4gVGhlIG90aGVyIGNvbW1vbiBmb3JtYXRzIHRoZSBpbnRlcmZhY2UgCi0gICAgICAgIGRlZmluZXMgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0iRnJhbWVidWZmZXJfRW5jb2RpbmdzIj48dGl0bGU+RnJhbWVidWZmZXIgRW5jb2RpbmdzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgIDxlbnRyeT5HUkVZPC9lbnRyeT48ZW50cnk+TGluZWFyIGdyZXlzY2FsZS4gVGhpcyBpcyBmb3Igc2ltcGxlIGNhbWVyYXMgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgbGlrZTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PlJHQjU2NTwvZW50cnk+PGVudHJ5PlRoZSB0b3AgNSBiaXRzIGhvbGQgMzIgcmVkIGxldmVscywgdGhlIG5leHQgc2l4IGJpdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgZ3JlZW4gYW5kIHRoZSBsb3cgNSBiaXRzIGhvbGQgYmx1ZS4gPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+UkdCNTU1PC9lbnRyeT48ZW50cnk+VGhlIHRvcCBiaXQgaXMgY2xlYXIuIFRoZSByZWQgZ3JlZW4gYW5kIGJsdWUgbGV2ZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICBlYWNoIG9jY3VweSBmaXZlIGJpdHMuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBBZGRpdGlvbmFsIG1vZGVzIGFyZSBzdXBwb3J0IGZvciBZVVYgY2FwdHVyZSBmb3JtYXRzLiBUaGVzZSBhcmUgY29tbW9uIGZvcgotICAgICAgICBUViBhbmQgdmlkZW8gY29uZmVyZW5jaW5nIGFwcGxpY2F0aW9ucy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZJRElPQ1NQSUNUIGlvY3RsIGFsbG93cyBhIHVzZXIgdG8gc2V0IHNvbWUgb2YgdGhlIHBpY3R1cmUgcGFyYW1ldGVycy4KLSAgICAgICAgRXhhY3RseSB3aGljaCBvbmVzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBoZWF2aWx5IG9uIHRoZSBjYXJkIGl0c2VsZi4gSXQgaXMKLSAgICAgICAgcG9zc2libGUgdG8gc3VwcG9ydCBtYW55IG1vZGVzIGFuZCBlZmZlY3RzIGluIHNvZnR3YXJlLiBJbiBnZW5lcmFsIGRvaW5nCi0gICAgICAgIHRoaXMgaW4gdGhlIGtlcm5lbCBpcyBhIGJhZCBpZGVhLiBWaWRlbyBjYXB0dXJlIGlzIGEgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlCi0gICAgICAgIGFwcGxpY2F0aW9uIGFuZCB0aGUgcHJvZ3JhbXMgY2FuIG9mdGVuIGRvIGJldHRlciBpZiB0aGV5IGFyZW4ndCBiZWluZwotICAgICAgICAnaGVscGVkJyBieSBhbiBvdmVya2VlbiBkcml2ZXIgd3JpdGVyLiBUaHVzIGZvciBvdXIgZGV2aWNlIHdlIHdpbGwgcmVwb3J0Ci0gICAgICAgIFJHQjI0IG9ubHkgYW5kIHJlZnVzZSB0byBhbGxvdyBhIGNoYW5nZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1BJQ1Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuZGVwdGghPTI0IHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5icmlnaHRuZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9oYXJkd2FyZV9odWUodi5odWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX3NhdHVyYXRpb24odi5jb2xvdXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5jb250cmFzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgV2UgY2hlY2sgdGhlIHVzZXIgaGFzIG5vdCB0cmllZCB0byBjaGFuZ2UgdGhlIHBhbGV0dGUgb3IgdGhlIGRlcHRoLiBXZSBkbwotICAgICAgICBub3Qgd2FudCB0byBjYXJyeSBvdXQgc29tZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlbiByZXR1cm4gYW4gZXJyb3IuIFRoaXMgbWF5Ci0gICAgICAgIGNvbmZ1c2UgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIHdpbGwgYmUgYXNzdW1pbmcgbm8gY2hhbmdlIG9jY3VycmVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBJbiBtdWNoIHRoZSBzYW1lIHdheSBhcyB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgcGljdHVyZSBjb250cm9scyB0bwotICAgICAgICBnZXQgdGhlIHJpZ2h0IGNhcHR1cmUgaW1hZ2VzLCBtYW55IGNhcmRzIG5lZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlCi0gICAgICAgIGRpc3BsYXlpbmcgb250byB3aGVuIGdlbmVyYXRpbmcgb3ZlcmxheSBvdXRwdXQuIEluIHNvbWUgY2FzZXMgZ2V0dGluZyB0aGlzCi0gICAgICAgIHdyb25nIGV2ZW4gbWFrZXMgYSBuYXN0eSBtZXNzIG9yIG1heSBjcmFzaCB0aGUgY29tcHV0ZXIuIEZvciB0aGF0IHJlYXNvbgotICAgICAgICB0aGUgVklESU9DU0JVRiBpb2N0bCB1c2VkIHRvIHNldCB1cCB0aGUgZnJhbWUgYnVmZmVyIGluZm9ybWF0aW9uIG1heSB3ZWxsCi0gICAgICAgIG9ubHkgYmUgdXNhYmxlIGJ5IHJvb3QuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHdpbGwgYXNzdW1lIG91ciBjYXJkIGlzIG9uZSBvZiB0aGUgb2xkIElTQSBkZXZpY2VzIHdpdGggZmVhdHVyZSBjb25uZWN0b3IKLSAgICAgICAgYW5kIG9ubHkgc3VwcG9ydHMgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgdmlkZW8gbW9kZXMuIFZlcnkgY29tbW9uIGZvciBvbGRlcgotICAgICAgICBjYXJkcyBhbHRob3VnaCB0aGUgUENJIGRldmljZXMgYXJlIHdheSBzbWFydGVyIHRoYW4gdGhpcy4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIHN0cnVjdCB2aWRlb19idWZmZXIgY2FwdHVyZV9mYjsKLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0ZCVUY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX2ZiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfZmIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBXZSBrZWVwIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm1hdCB0aGUgaW9jdGwgdXNlcy4gVGhpcwotICAgICAgICBtYWtlcyBpdCBuaWNlIGFuZCBlYXN5IHRvIHdvcmsgd2l0aCBpbiB0aGUgaW9jdGwgY2FsbHMuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRkJVRjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYnVmZmVyIHY7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoIT0zMjAgJmFtcDsmYW1wOyB2LndpZHRoIT02NDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5oZWlnaHQhPTIwMCAmYW1wOyZhbXA7IHYuaGVpZ2h0IT0yNDAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgdi5oZWlnaHQhPTQwMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IHYuaGVpZ2h0ICE9NDgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYW1wO2NhcHR1cmVfZmIsICZhbXA7diwgc2l6ZW9mKHYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF9mYigmYW1wO3YpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGNhcGFibGUoKSBmdW5jdGlvbiBjaGVja3MgYSB1c2VyIGhhcyB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eS4gVGhlIExpbnV4Ci0gICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gaGFzIGEgc2V0IG9mIGFib3V0IDMwIGNhcGFiaWxpdGllcyBpbmRpY2F0aW5nIHByaXZpbGVnZWQKLSAgICAgICAgYWNjZXNzIHRvIHNlcnZpY2VzLiBUaGUgZGVmYXVsdCBzZXQgdXAgZ2l2ZXMgdGhlIHN1cGVydXNlciAodWlkIDApIGFsbCBvZgotICAgICAgICB0aGVtIGFuZCBub2JvZHkgZWxzZSBoYXMgYW55LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgU1lTX0FETUlOIGNhcGFiaWxpdHksIHRoYXQgaXMgdGhleSBhcmUKLSAgICAgICAgYWxsb3dlZCB0byBvcGVyYXRlIGFzIHRoZSBtYWNoaW5lIGFkbWluaXN0cmF0b3IuIFdlIGRvbid0IHdhbnQgYW55b25lIGJ1dAotICAgICAgICB0aGUgYWRtaW5pc3RyYXRvciBtYWtpbmcgYSBtZXNzIG9mIHRoZSBkaXNwbGF5LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBOZXh0IHdlIGNoZWNrIGZvciBzdGFuZGFyZCBQQyB2aWRlbyBtb2RlcyAoMzIwIG9yIDY0MCB3aWRlIHdpdGggZWl0aGVyCi0gICAgICAgIEVHQSBvciBWR0EgZGVwdGhzKS4gSWYgdGhlIG1vZGUgaXMgbm90IGEgc3RhbmRhcmQgdmlkZW8gbW9kZSB3ZSByZWplY3QgaXQgYXMKLSAgICAgICAgbm90IHN1cHBvcnRlZCBieSBvdXIgY2FyZC4gSWYgdGhlIG1vZGUgaXMgYWNjZXB0YWJsZSB3ZSBzYXZlIGl0IHNvIHRoYXQKLSAgICAgICAgVklESU9DRkJVRiB3aWxsIGdpdmUgdGhlIHJpZ2h0IGFuc3dlciBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLiAgVGhlCi0gICAgICAgIGhhcmR3YXJlX3NldF9mYigpIGZ1bmN0aW9uIGlzIHNvbWUgdW5kZXNjcmliZWQgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbiB0bwotICAgICAgICBwcm9ncmFtIHRoZSBjYXJkIGZvciB0aGUgZGVzaXJlZCBtb2RlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBCZWZvcmUgdGhlIGRyaXZlciBjYW4gZGlzcGxheSBhbiBvdmVybGF5IHdpbmRvdyBpdCBuZWVkcyB0byBrbm93IHdoZXJlIHRoZQotICAgICAgICB3aW5kb3cgc2hvdWxkIGJlIHBsYWNlZCwgYW5kIGFsc28gaG93IGxhcmdlIGl0IHNob3VsZCBiZS4gSWYgdGhlIGNhcmQKLSAgICAgICAgc3VwcG9ydHMgY2xpcHBpbmcgaXQgbmVlZHMgdG8ga25vdyB3aGljaCByZWN0YW5nbGVzIHRvIG9taXQgZnJvbSB0aGUKLSAgICAgICAgZGlzcGxheS4gVGhlIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgd2F5IHRoZSBpbWFnZSAKLSAgICAgICAgc2hvdWxkIGJlIGRpc3BsYXllZC4gCi0gICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX3dpbmRvd19maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fd2luZG93IGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT53aWR0aDwvZW50cnk+PGVudHJ5PlRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIGRlc2lyZWQgaW1hZ2UuIFRoZSBjYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXkgdXNlIGEgc21hbGxlciBzaXplIGlmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+aGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UuIFRoZSBjYXJkIG1heSB1c2UgYSBzbWFsbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplIGlmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5Png8L2VudHJ5PjxlbnRyeT4gICBUaGUgWCBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgb2YgdGhlIHdpbmRvdy4gVGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSBsZWZ0IGhhbmQgZWRnZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuIE5vdCBhbGwgY2FyZHMgY2FuIGRpc3BsYXkgaW1hZ2VzIGFsaWduZWQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGFueSBwaXhlbCBib3VuZGFyeS4gSWYgdGhlIHBvc2l0aW9uIGlzIHVuc3VpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYXJkIGFkanVzdHMgdGhlIGltYWdlIHJpZ2h0IGFuZCByZWR1Y2VzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGguPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+eTwvZW50cnk+PGVudHJ5PiAgIFRoZSBZIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBvZiB0aGUgd2luZG93LiBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBjb3VudGVkIGluIHBpeGVscyByZWxhdGl2ZSB0byB0aGUgdG9wIGVkZ2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLiBBcyB3aXRoIHRoZSB3aWR0aCBpZiB0aGUgY2FyZCBjYW5ub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgIHN0YXJ0aW5nIG9uIHRoaXMgbGluZSBpdCB3aWxsIGFkanVzdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5jaHJvbWFrZXk8L2VudHJ5PjxlbnRyeT5UaGUgY29sb3VyIChleHByZXNzZWQgaW4gUkdCMzIgZm9ybWF0KSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWFrZXkgY29sb3VyIGlmIGNocm9tYSBrZXlpbmcgaXMgYmVpbmcgdXNlZC4gPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2xpcHM8L2VudHJ5PjxlbnRyeT5BbiBhcnJheSBvZiByZWN0YW5nbGVzIHRoYXQgbXVzdCBub3QgYmUgZHJhd24KLQkJCW92ZXIuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2xpcGNvdW50PC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBjbGlwcyBpbiB0aGlzIGFycmF5LjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDxwYXJhPgotICAgICAgICBFYWNoIGNsaXAgaXMgYSBzdHJ1Y3QgdmlkZW9fY2xpcCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMKLSAgIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2xpcF9maWVsZHMiPjx0aXRsZT52aWRlb19jbGlwIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT54LCB5PC9lbnRyeT48ZW50cnk+Q28tb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBkaXNwbGF5PC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+d2lkdGgsIGhlaWdodDwvZW50cnk+PGVudHJ5PldpZHRoIGFuZCBoZWlnaHQgaW4gcGl4ZWxzPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bmV4dDwvZW50cnk+PGVudHJ5PkEgc3BhcmUgZmllbGQgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2U8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBlbnN1cmUgaXQgYWx3YXlzIGRyYXdzIGluIHRoZSBhcmVhIHJlcXVlc3RlZCBvciBhICAgICAgICBzbWFsbGVyIGFyZWEsIGFuZCB0aGF0IGl0IG5ldmVyIGRyYXdzIGluIGFueSBvZiB0aGUgYXJlYXMgdGhhdCBhcmUgY2xpcHBlZC4KLSAgICAgICAgVGhpcyBtYXkgd2VsbCBtZWFuIGl0IGhhcyB0byBsZWF2ZSBhbG9uZS4gc21hbGwgYXJlYXMgdGhlIGFwcGxpY2F0aW9uIHdpc2hlZCB0byBiZQotICAgICAgICBkcmF3bi4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGV4YW1wbGUgY2FyZCB1c2VzIGNocm9tYWtleSBzbyBkb2VzIG5vdCBoYXZlIHRvIGFkZHJlc3MgbW9zdCBvZiB0aGUKLSAgICAgICAgY2xpcHBpbmcuICBXZSB3aWxsIGFkZCBhIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgdG8gb3VyIGdsb2JhbCB2YXJpYWJsZXMgdG8KLSAgICAgICAgcmVtZW1iZXIgb3VyIHBhcmFtZXRlcnMsIGFzIHdlIGRpZCB3aXRoIHRoZSBmcmFtZSBidWZmZXIuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dXSU46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX3dpbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfd2luKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NXSU46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3dpbmRvdyB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi53aWR0aCAmZ3Q7IDY0MCB8fCB2LmhlaWdodCAmZ3Q7IDQ4MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoICZsdDsgMTYgfHwgdi5oZWlnaHQgJmx0OyAxNikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfa2V5KHYuY2hyb21ha2V5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF93aW5kb3codik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmFtcDtjYXB0dXJlX3dpbiwgJmFtcDt2LCBzaXplb2YodikpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV93ID0gdi53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfaCA9IHYuaGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIENocm9tYWtleSBvdXIgc2V0dXAgaXMgZmFpcmx5IHNpbXBsZS4gTW9zdGx5IHdlIGhhdmUgdG8KLSAgICAgICAgY2hlY2sgdGhlIHZhbHVlcyBhcmUgc2FuZSBhbmQgbG9hZCB0aGVtIGludG8gdGhlIGNhcHR1cmUgY2FyZC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2l0aCBhbGwgdGhlIHNldHVwIGRvbmUgd2UgY2FuIG5vdyB0dXJuIG9uIHRoZSBhY3R1YWwgY2FwdHVyZS9vdmVybGF5LiBUaGlzCi0gICAgICAgIGlzIGRvbmUgd2l0aCB0aGUgVklESU9DQ0FQVFVSRSBpb2N0bC4gVGhpcyB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50Ci0gICAgICAgIHdoZXJlIDAgaXMgb24gYW5kIDEgaXMgb2ZmLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NDQVBUVVJFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ2V0X3VzZXIodiwgKGludCAqKWFyZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodj09MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfY2FwdHVyZV9vZmYoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FwdHVyZV9mYi53aWR0aCA9PSAwIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY2FwdHVyZV93ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX2NhcHR1cmVfb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBXZSBncmFiIHRoZSBmbGFnIGZyb20gdXNlciBzcGFjZSBhbmQgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIGFjY29yZGluZyB0bwotICAgICAgICBpdHMgdmFsdWUuIFRoZXJlIGlzIG9uZSBzbWFsbCBjb3JuZXIgY2FzZSB3ZSBoYXZlIHRvIGNvbnNpZGVyIGhlcmUuIFN1cHBvc2UKLSAgICAgICAgdGhhdCB0aGUgY2FwdHVyZSB3YXMgcmVxdWVzdGVkIGJlZm9yZSB0aGUgdmlkZW8gd2luZG93IG9yIHRoZSBmcmFtZSBidWZmZXIKLSAgICAgICAgaGFkIGJlZW4gc2V0IHVwLiBJbiB0aG9zZSBjYXNlcyB0aGVyZSB3aWxsIGJlIHVuY29uZmlndXJlZCBmaWVsZHMgaW4gb3VyCi0gICAgICAgIGNhcmQgZGF0YSwgYXMgd2VsbCBhcyB1bmNvbmZpZ3VyZWQgaGFyZHdhcmUgc2V0dGluZ3MuIFdlIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kCi0gICAgICAgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZnJhbWUgYnVmZmVyIG9yIHRoZSBjYXB0dXJlIHdpbmRvdyB3aWR0aCBpcyB6ZXJvLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Ci0gICAgICAgIH0KLX0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0KLSAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGFueSBvdGhlciBpb2N0bHMsIHNvIGlmIHdlIGdldCB0aGlzIGZhciwgaXQgaXMgdGltZQotICAgICAgICB0byB0ZWxsIHRoZSB2aWRlbyBsYXllciB0aGF0IHdlIGRvbid0IG5vdyB3aGF0IHRoZSB1c2VyIGlzIHRhbGtpbmcgYWJvdXQuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJlbmR2aWQiPgotICA8dGl0bGU+T3RoZXIgRnVuY3Rpb25hbGl0eTwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVmlkZW80TGludXggbGF5ZXIgc3VwcG9ydHMgYWRkaXRpb25hbCBmZWF0dXJlcywgaW5jbHVkaW5nIGEgaGlnaAotICAgICAgICBwZXJmb3JtYW5jZSBtbWFwKCkgYmFzZWQgY2FwdHVyZSBtb2RlIGFuZCBjYXB0dXJpbmcgcGFydCBvZiB0aGUgaW1hZ2UuIAotICAgICAgICBUaGVzZSBmZWF0dXJlcyBhcmUgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGUgYm9vay4gIFlvdSBzaG91bGQgaG93ZXZlciBoYXZlIGVub3VnaCAKLSAgICAgICAgZXhhbXBsZSBjb2RlIHRvIGltcGxlbWVudCBtb3N0IHNpbXBsZSB2aWRlbzRsaW51eCBkZXZpY2VzIGZvciByYWRpbyBhbmQgVFYKLSAgICAgICAgY2FyZHMuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotICA8Y2hhcHRlciBpZD0iYnVncyI+Ci0gICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+Ci0gIDxwYXJhPgotICA8dmFyaWFibGVsaXN0PgotICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+TXVsdGlwbGUgT3BlbnM8L3Rlcm0+Ci0gICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgZHJpdmVyIGFzc3VtZXMgbXVsdGlwbGUgb3BlbnMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLiBBIGRyaXZlcgotICAgICAgICBjYW4gd29yayBhcm91bmQgdGhpcyBidXQgbm90IGNsZWFubHkuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0KLSAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkFQSSBEZWZpY2llbmNpZXM8L3Rlcm0+Ci0gICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgZXhpc3RpbmcgQVBJIHBvb3JseSByZWZsZWN0cyBjb21wcmVzc2lvbiBjYXBhYmxlIGRldmljZXMuIFRoZXJlCi0gICAgICAgIGFyZSBwbGFucyBhZm9vdCB0byBtZXJnZSBWNEwsIFY0TDIgYW5kIHNvbWUgb3RoZXIgaWRlYXMgaW50byBhCi0gICAgICAgIGJldHRlciBpbnRlcmZhY2UuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0gIDwvdmFyaWFibGVsaXN0PgotCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgotICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+Ci0hRWRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwotICA8L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSE9XVE8gYi9Eb2N1bWVudGF0aW9uL0hPV1RPCmluZGV4IDQ4YTM5NTUuLjg0OTVmYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSE9XVE8KKysrIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwpAQCAtMTEyLDcgKzExMiw3IEBACiAKICAgICBPdGhlciBleGNlbGxlbnQgZGVzY3JpcHRpb25zIG9mIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBwcm9wZXJseSBhcmU6CiAJIlRoZSBQZXJmZWN0IFBhdGNoIgotCQlodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisJCWh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dAogCSJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiCiAJCWh0dHA6Ly9saW51eC55eXoudXMvcGF0Y2gtZm9ybWF0Lmh0bWwKIApAQCAtNjIwLDcgKzYyMCw3IEBACiBGb3IgbW9yZSBkZXRhaWxzIG9uIHdoYXQgdGhpcyBzaG91bGQgYWxsIGxvb2sgbGlrZSwgcGxlYXNlIHNlZSB0aGUKIENoYW5nZUxvZyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudDoKICAgIlRoZSBQZXJmZWN0IFBhdGNoIgotICAgICAgaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvc3R1ZmYvdHBwLnR4dAorICAgICAgaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0CiAKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1NBSy50eHQgYi9Eb2N1bWVudGF0aW9uL1NBSy50eHQKaW5kZXggYjkwMTljYS4uNzRiZTE0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TQUsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vU0FLLnR4dApAQCAtMSw1ICsxLDUgQEAKIExpbnV4IDIuNC4yIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspIGhhbmRsaW5nCi0xOCBNYXJjaCAyMDAxLCBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPgorMTggTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgogCiBBbiBvcGVyYXRpbmcgc3lzdGVtJ3MgU2VjdXJlIEF0dGVudGlvbiBLZXkgaXMgYSBzZWN1cml0eSB0b29sIHdoaWNoIGlzCiBwcm92aWRlZCBhcyBwcm90ZWN0aW9uIGFnYWluc3QgdHJvamFuIHBhc3N3b3JkIGNhcHR1cmluZyBwcm9ncmFtcy4gIEl0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdCBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CmluZGV4IDIxZjA3OTUuLmFjNWUwYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CkBAIC04NSwzICs4NSw2IEBACiAyMzogVGVzdGVkIGFmdGVyIGl0IGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSAtbW0gcGF0Y2hzZXQgdG8gbWFrZSBzdXJlCiAgICAgdGhhdCBpdCBzdGlsbCB3b3JrcyB3aXRoIGFsbCBvZiB0aGUgb3RoZXIgcXVldWVkIHBhdGNoZXMgYW5kIHZhcmlvdXMKICAgICBjaGFuZ2VzIGluIHRoZSBWTSwgVkZTLCBhbmQgb3RoZXIgc3Vic3lzdGVtcy4KKworMjQ6IEFsbCBtZW1vcnkgYmFycmllcnMge2UuZy4sIGJhcnJpZXIoKSwgcm1iKCksIHdtYigpfSBuZWVkIGEgY29tbWVudCBpbiB0aGUKKyAgICBzb3VyY2UgY29kZSB0aGF0IGV4cGxhaW5zIHRoZSBsb2dpYyBvZiB3aGF0IHRoZXkgYXJlIGRvaW5nIGFuZCB3aHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCAyNGYyZWI0Li45OWU3MmE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTQxLDcgKzQxLDcgQEAKIExpbnV4IDIuNjoKIAlUaGUgc2FtZSBydWxlcyBhcHBseSBhcyAyLjQgZXhjZXB0IHRoYXQgeW91IHNob3VsZCBmb2xsb3cgbGludXgta2VybmVsCiAJdG8gdHJhY2sgY2hhbmdlcyBpbiBBUEkncy4gVGhlIGZpbmFsIGNvbnRhY3QgcG9pbnQgZm9yIExpbnV4IDIuNgotCXN1Ym1pc3Npb25zIGlzIEFuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+LgorCXN1Ym1pc3Npb25zIGlzIEFuZHJldyBNb3J0b24uCiAKIFdoYXQgQ3JpdGVyaWEgRGV0ZXJtaW5lIEFjY2VwdGFuY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCmluZGV4IGY3OWFkOWYuLmYzMDlkM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtNzcsNyArNzcsNyBAQAogaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQKIAogQW5kcmV3IE1vcnRvbidzIHBhdGNoIHNjcmlwdHM6Ci1odHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy8KK2h0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvcGF0Y2gtc2NyaXB0cy50YXIuZ3oKIEluc3RlYWQgb2YgdGhlc2Ugc2NyaXB0cywgcXVpbHQgaXMgdGhlIHJlY29tbWVuZGVkIHBhdGNoIG1hbmFnZW1lbnQKIHRvb2wgKHNlZSBhYm92ZSkuCiAKQEAgLTQwNSw3ICs0MDUsNyBAQAogaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBkaXNjdXNzaW9uCiAKIAotMTQpIFVzaW5nIFRlc3QtYnk6IGFuZCBSZXZpZXdlZC1ieToKKzE0KSBVc2luZyBUZXN0ZWQtYnk6IGFuZCBSZXZpZXdlZC1ieToKIAogQSBUZXN0ZWQtYnk6IHRhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2ggaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlc3RlZCAoaW4KIHNvbWUgZW52aXJvbm1lbnQpIGJ5IHRoZSBwZXJzb24gbmFtZWQuICBUaGlzIHRhZyBpbmZvcm1zIG1haW50YWluZXJzIHRoYXQKQEAgLTY1Myw3ICs2NTMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBbmRyZXcgTW9ydG9uLCAiVGhlIHBlcmZlY3QgcGF0Y2giICh0cHApLgotICA8aHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvc3R1ZmYvdHBwLnR4dD4KKyAgPGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dD4KIAogSmVmZiBHYXJ6aWssICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiLgogICA8aHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbD4KQEAgLTY3Miw0ICs2NzIsOSBAQAogCiBMaW51cyBUb3J2YWxkcydzIG1haWwgb24gdGhlIGNhbm9uaWNhbCBwYXRjaCBmb3JtYXQ6CiAgIDxodHRwOi8vbGttbC5vcmcvbGttbC8yMDA1LzQvNy8xODM+CisKK0FuZGkgS2xlZW4sICJPbiBzdWJtaXR0aW5nIGtlcm5lbCBwYXRjaGVzIgorICBTb21lIHN0cmF0ZWdpZXMgdG8gZ2V0IGRpZmZpY3VsdCBvciBjb250cm92ZXJzYWwgY2hhbmdlcyBpbi4KKyAgaHR0cDovL2hhbG9iYXRlcy5kZS9vbi1zdWJtaXR0aW5nLXBhdGNoZXMucGRmCisKIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svZGF0YS1pbnRlZ3JpdHkudHh0CmluZGV4IGU5ZGM4ZDguLmU4Y2EwNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svZGF0YS1pbnRlZ3JpdHkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svZGF0YS1pbnRlZ3JpdHkudHh0CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgIHJldHJpZXZlIHRoZSB0YWcgYnVmZmVyIHVzaW5nIGJpb19pbnRlZ3JpdHlfZ2V0X3RhZygpLgogCiAKLTYuMyBQQVNTSU5HIEVYSVNUSU5HIElOVEVHUklUWSBNRVRBREFUQQorNS4zIFBBU1NJTkcgRVhJU1RJTkcgSU5URUdSSVRZIE1FVEFEQVRBCiAKICAgICBGaWxlc3lzdGVtcyB0aGF0IGVpdGhlciBnZW5lcmF0ZSB0aGVpciBvd24gaW50ZWdyaXR5IG1ldGFkYXRhIG9yCiAgICAgYXJlIGNhcGFibGUgb2YgdHJhbnNmZXJyaW5nIElNRCBmcm9tIHVzZXIgc3BhY2UgY2FuIHVzZSB0aGUKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgaW50ZWdyaXR5IHVwb24gY29tcGxldGlvbi4KIAogCi02LjQgUkVHSVNURVJJTkcgQSBCTE9DSyBERVZJQ0UgQVMgQ0FQQUJMRSBPRiBFWENIQU5HSU5HIElOVEVHUklUWQorNS40IFJFR0lTVEVSSU5HIEEgQkxPQ0sgREVWSUNFIEFTIENBUEFCTEUgT0YgRVhDSEFOR0lORyBJTlRFR1JJVFkKICAgICBNRVRBREFUQQogCiAgICAgVG8gZW5hYmxlIGludGVncml0eSBleGNoYW5nZSBvbiBhIGJsb2NrIGRldmljZSB0aGUgZ2VuZGlzayBtdXN0IGJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2Nncm91cHMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9mcmVlemVyLXN1YnN5c3RlbS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MGFiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0CkBAIC0wLDAgKzEsOTkgQEAKKwlUaGUgY2dyb3VwIGZyZWV6ZXIgaXMgdXNlZnVsIHRvIGJhdGNoIGpvYiBtYW5hZ2VtZW50IHN5c3RlbSB3aGljaCBzdGFydAorYW5kIHN0b3Agc2V0cyBvZiB0YXNrcyBpbiBvcmRlciB0byBzY2hlZHVsZSB0aGUgcmVzb3VyY2VzIG9mIGEgbWFjaGluZQorYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVzIG9mIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IuIFRoaXMgc29ydCBvZiBwcm9ncmFtCitpcyBvZnRlbiB1c2VkIG9uIEhQQyBjbHVzdGVycyB0byBzY2hlZHVsZSBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIgYXMgYQord2hvbGUuIFRoZSBjZ3JvdXAgZnJlZXplciB1c2VzIGNncm91cHMgdG8gZGVzY3JpYmUgdGhlIHNldCBvZiB0YXNrcyB0bworYmUgc3RhcnRlZC9zdG9wcGVkIGJ5IHRoZSBiYXRjaCBqb2IgbWFuYWdlbWVudCBzeXN0ZW0uIEl0IGFsc28gcHJvdmlkZXMKK2EgbWVhbnMgdG8gc3RhcnQgYW5kIHN0b3AgdGhlIHRhc2tzIGNvbXBvc2luZyB0aGUgam9iLgorCisJVGhlIGNncm91cCBmcmVlemVyIHdpbGwgYWxzbyBiZSB1c2VmdWwgZm9yIGNoZWNrcG9pbnRpbmcgcnVubmluZyBncm91cHMKK29mIHRhc2tzLiBUaGUgZnJlZXplciBhbGxvd3MgdGhlIGNoZWNrcG9pbnQgY29kZSB0byBvYnRhaW4gYSBjb25zaXN0ZW50CitpbWFnZSBvZiB0aGUgdGFza3MgYnkgYXR0ZW1wdGluZyB0byBmb3JjZSB0aGUgdGFza3MgaW4gYSBjZ3JvdXAgaW50byBhCitxdWllc2NlbnQgc3RhdGUuIE9uY2UgdGhlIHRhc2tzIGFyZSBxdWllc2NlbnQgYW5vdGhlciB0YXNrIGNhbgord2FsayAvcHJvYyBvciBpbnZva2UgYSBrZXJuZWwgaW50ZXJmYWNlIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK3F1aWVzY2VkIHRhc2tzLiBDaGVja3BvaW50ZWQgdGFza3MgY2FuIGJlIHJlc3RhcnRlZCBsYXRlciBzaG91bGQgYQorcmVjb3ZlcmFibGUgZXJyb3Igb2NjdXIuIFRoaXMgYWxzbyBhbGxvd3MgdGhlIGNoZWNrcG9pbnRlZCB0YXNrcyB0byBiZQorbWlncmF0ZWQgYmV0d2VlbiBub2RlcyBpbiBhIGNsdXN0ZXIgYnkgY29weWluZyB0aGUgZ2F0aGVyZWQgaW5mb3JtYXRpb24KK3RvIGFub3RoZXIgbm9kZSBhbmQgcmVzdGFydGluZyB0aGUgdGFza3MgdGhlcmUuCisKKwlTZXF1ZW5jZXMgb2YgU0lHU1RPUCBhbmQgU0lHQ09OVCBhcmUgbm90IGFsd2F5cyBzdWZmaWNpZW50IGZvciBzdG9wcGluZworYW5kIHJlc3VtaW5nIHRhc2tzIGluIHVzZXJzcGFjZS4gQm90aCBvZiB0aGVzZSBzaWduYWxzIGFyZSBvYnNlcnZhYmxlCitmcm9tIHdpdGhpbiB0aGUgdGFza3Mgd2Ugd2lzaCB0byBmcmVlemUuIFdoaWxlIFNJR1NUT1AgY2Fubm90IGJlIGNhdWdodCwKK2Jsb2NrZWQsIG9yIGlnbm9yZWQgaXQgY2FuIGJlIHNlZW4gYnkgd2FpdGluZyBvciBwdHJhY2luZyBwYXJlbnQgdGFza3MuCitTSUdDT05UIGlzIGVzcGVjaWFsbHkgdW5zdWl0YWJsZSBzaW5jZSBpdCBjYW4gYmUgY2F1Z2h0IGJ5IHRoZSB0YXNrLiBBbnkKK3Byb2dyYW1zIGRlc2lnbmVkIHRvIHdhdGNoIGZvciBTSUdTVE9QIGFuZCBTSUdDT05UIGNvdWxkIGJlIGJyb2tlbiBieQorYXR0ZW1wdGluZyB0byB1c2UgU0lHU1RPUCBhbmQgU0lHQ09OVCB0byBzdG9wIGFuZCByZXN1bWUgdGFza3MuIFdlIGNhbgorZGVtb25zdHJhdGUgdGhpcyBwcm9ibGVtIHVzaW5nIG5lc3RlZCBiYXNoIHNoZWxsczoKKworCSQgZWNobyAkJAorCTE2NjQ0CisJJCBiYXNoCisJJCBlY2hvICQkCisJMTY2OTAKKworCUZyb20gYSBzZWNvbmQsIHVucmVsYXRlZCBiYXNoIHNoZWxsOgorCSQga2lsbCAtU0lHU1RPUCAxNjY5MAorCSQga2lsbCAtU0lHQ09OVCAxNjk5MAorCisJPGF0IHRoaXMgcG9pbnQgMTY5OTAgZXhpdHMgYW5kIGNhdXNlcyAxNjY0NCB0byBleGl0IHRvbz4KKworCVRoaXMgaGFwcGVucyBiZWNhdXNlIGJhc2ggY2FuIG9ic2VydmUgYm90aCBzaWduYWxzIGFuZCBjaG9vc2UgaG93IGl0CityZXNwb25kcyB0byB0aGVtLgorCisJQW5vdGhlciBleGFtcGxlIG9mIGEgcHJvZ3JhbSB3aGljaCBjYXRjaGVzIGFuZCByZXNwb25kcyB0byB0aGVzZQorc2lnbmFscyBpcyBnZGIuIEluIGZhY3QgYW55IHByb2dyYW0gZGVzaWduZWQgdG8gdXNlIHB0cmFjZSBpcyBsaWtlbHkgdG8KK2hhdmUgYSBwcm9ibGVtIHdpdGggdGhpcyBtZXRob2Qgb2Ygc3RvcHBpbmcgYW5kIHJlc3VtaW5nIHRhc2tzLgorCisJIEluIGNvbnRyYXN0LCB0aGUgY2dyb3VwIGZyZWV6ZXIgdXNlcyB0aGUga2VybmVsIGZyZWV6ZXIgY29kZSB0bworcHJldmVudCB0aGUgZnJlZXplL3VuZnJlZXplIGN5Y2xlIGZyb20gYmVjb21pbmcgdmlzaWJsZSB0byB0aGUgdGFza3MKK2JlaW5nIGZyb3plbi4gVGhpcyBhbGxvd3MgdGhlIGJhc2ggZXhhbXBsZSBhYm92ZSBhbmQgZ2RiIHRvIHJ1biBhcworZXhwZWN0ZWQuCisKKwlUaGUgZnJlZXplciBzdWJzeXN0ZW0gaW4gdGhlIGNvbnRhaW5lciBmaWxlc3lzdGVtIGRlZmluZXMgYSBmaWxlIG5hbWVkCitmcmVlemVyLnN0YXRlLiBXcml0aW5nICJGUk9aRU4iIHRvIHRoZSBzdGF0ZSBmaWxlIHdpbGwgZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUKK2Nncm91cC4gU3Vic2VxdWVudGx5IHdyaXRpbmcgIlRIQVdFRCIgd2lsbCB1bmZyZWV6ZSB0aGUgdGFza3MgaW4gdGhlIGNncm91cC4KK1JlYWRpbmcgd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuCisKKyogRXhhbXBsZXMgb2YgdXNhZ2UgOgorCisgICAjIG1rZGlyIC9jb250YWluZXJzL2ZyZWV6ZXIKKyAgICMgbW91bnQgLXQgY2dyb3VwIC1vZnJlZXplciBmcmVlemVyICAvY29udGFpbmVycworICAgIyBta2RpciAvY29udGFpbmVycy8wCisgICAjIGVjaG8gJHNvbWVfcGlkID4gL2NvbnRhaW5lcnMvMC90YXNrcworCit0byBnZXQgc3RhdHVzIG9mIHRoZSBmcmVlemVyIHN1YnN5c3RlbSA6CisKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgVEhBV0VECisKK3RvIGZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlIGNvbnRhaW5lciA6CisKKyAgICMgZWNobyBGUk9aRU4gPiAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgRlJFRVpJTkcKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgRlJPWkVOCisKK3RvIHVuZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUgY29udGFpbmVyIDoKKworICAgIyBlY2hvIFRIQVdFRCA+IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgIyBjYXQgL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICBUSEFXRUQKKworVGhpcyBpcyB0aGUgYmFzaWMgbWVjaGFuaXNtIHdoaWNoIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHVzZXIgc3BhY2UgdGFzaworaW4gYSBzaW1wbGUgc2NlbmFyaW8uCisKK0l0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBmcmVlemluZyBjYW4gYmUgaW5jb21wbGV0ZS4gSW4gdGhhdCBjYXNlIHdlIHJldHVybgorRUJVU1kuIFRoaXMgbWVhbnMgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBjZ3JvdXAgYXJlIGJ1c3kgZG9pbmcgc29tZXRoaW5nIHRoYXQKK3ByZXZlbnRzIHVzIGZyb20gY29tcGxldGVseSBmcmVlemluZyB0aGUgY2dyb3VwIGF0IHRoaXMgdGltZS4gQWZ0ZXIgRUJVU1ksCit0aGUgY2dyb3VwIHdpbGwgcmVtYWluIHBhcnRpYWxseSBmcm96ZW4gLS0gcmVmbGVjdGVkIGJ5IGZyZWV6ZXIuc3RhdGUgcmVwb3J0aW5nCisiRlJFRVpJTkciIHdoZW4gcmVhZC4gVGhlIHN0YXRlIHdpbGwgcmVtYWluICJGUkVFWklORyIgdW50aWwgb25lIG9mIHRoZXNlCit0aGluZ3MgaGFwcGVuczoKKworCTEpIFVzZXJzcGFjZSBjYW5jZWxzIHRoZSBmcmVlemluZyBvcGVyYXRpb24gYnkgd3JpdGluZyAiVEhBV0VEIiB0bworCQl0aGUgZnJlZXplci5zdGF0ZSBmaWxlCisJMikgVXNlcnNwYWNlIHJldHJpZXMgdGhlIGZyZWV6aW5nIG9wZXJhdGlvbiBieSB3cml0aW5nICJGUk9aRU4iIHRvCisJCXRoZSBmcmVlemVyLnN0YXRlIGZpbGUgKHdyaXRpbmcgIkZSRUVaSU5HIiBpcyBub3QgbGVnYWwKKwkJYW5kIHJldHVybnMgRUlPKQorCTMpIFRoZSB0YXNrcyB0aGF0IGJsb2NrZWQgdGhlIGNncm91cCBmcm9tIGVudGVyaW5nIHRoZSAiRlJPWkVOIgorCQlzdGF0ZSBkaXNhcHBlYXIgZnJvbSB0aGUgY2dyb3VwJ3Mgc2V0IG9mIHRhc2tzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CmluZGV4IDliNTNkNTguLjFjMDc1NDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKQEAgLTExMiwxNCArMTEyLDIyIEBACiAKIDIuMi4xIEFjY291bnRpbmcgZGV0YWlscwogCi1BbGwgbWFwcGVkIHBhZ2VzIChSU1MpIGFuZCB1bm1hcHBlZCB1c2VyIHBhZ2VzIChQYWdlIENhY2hlKSBhcmUgYWNjb3VudGVkLgotUlNTIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgdGhlIHRpbWUgb2YgcGFnZV9hZGRfKl9ybWFwKCkgdW5sZXNzIHRoZXkndmUgYWxyZWFkeQotYmVlbiBhY2NvdW50ZWQgZm9yIGVhcmxpZXIuIEEgZmlsZSBwYWdlIHdpbGwgYmUgYWNjb3VudGVkIGZvciBhcyBQYWdlIENhY2hlOwotaXQncyBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzLCBkdXBsaWNhdGUgYWNjb3VudGluZyBpcyBjYXJlZnVsbHkKLWF2b2lkZWQuIFBhZ2UgQ2FjaGUgcGFnZXMgYXJlIGFjY291bnRlZCBhdCB0aGUgdGltZSBvZiBhZGRfdG9fcGFnZV9jYWNoZSgpLgotVGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZXMgdGhhdCByZW1vdmUgYSBwYWdlIGZyb20gdGhlIHBhZ2UgdGFibGVzIG9yIHJlbW92ZXMKLWEgcGFnZSBmcm9tIFBhZ2UgQ2FjaGUgaXMgdXNlZCB0byBkZWNyZW1lbnQgdGhlIGFjY291bnRpbmcgY291bnRlcnMgb2YgdGhlCi1jZ3JvdXAuCitBbGwgbWFwcGVkIGFub24gcGFnZXMgKFJTUykgYW5kIGNhY2hlIHBhZ2VzIChQYWdlIENhY2hlKSBhcmUgYWNjb3VudGVkLgorKHNvbWUgcGFnZXMgd2hpY2ggbmV2ZXIgYmUgcmVjbGFpbWFibGUgYW5kIHdpbGwgbm90IGJlIG9uIGdsb2JhbCBMUlUKKyBhcmUgbm90IGFjY291bnRlZC4gd2UganVzdCBhY2NvdW50cyBwYWdlcyB1bmRlciB1c3VhbCB2bSBtYW5hZ2VtZW50LikKKworUlNTIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgcGFnZV9mYXVsdCB1bmxlc3MgdGhleSd2ZSBhbHJlYWR5IGJlZW4gYWNjb3VudGVkCitmb3IgZWFybGllci4gQSBmaWxlIHBhZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yIGFzIFBhZ2UgQ2FjaGUgd2hlbiBpdCdzCitpbnNlcnRlZCBpbnRvIGlub2RlIChyYWRpeC10cmVlKS4gV2hpbGUgaXQncyBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YKK3Byb2Nlc3NlcywgZHVwbGljYXRlIGFjY291bnRpbmcgaXMgY2FyZWZ1bGx5IGF2b2lkZWQuCisKK0EgUlNTIHBhZ2UgaXMgdW5hY2NvdW50ZWQgd2hlbiBpdCdzIGZ1bGx5IHVubWFwcGVkLiBBIFBhZ2VDYWNoZSBwYWdlIGlzCit1bmFjY291bnRlZCB3aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHJhZGl4LXRyZWUuCisKK0F0IHBhZ2UgbWlncmF0aW9uLCBhY2NvdW50aW5nIGluZm9ybWF0aW9uIGlzIGtlcHQuCisKK05vdGU6IHdlIGp1c3QgYWNjb3VudCBwYWdlcy1vbi1scnUgYmVjYXVzZSBvdXIgcHVycG9zZSBpcyB0byBjb250cm9sIGFtb3VudAorb2YgdXNlZCBwYWdlcy4gbm90LW9uLWxydSBwYWdlcyBhcmUgdGVuZCB0byBiZSBvdXQtb2YtY29udHJvbCBmcm9tIHZtIHZpZXcuCiAKIDIuMyBTaGFyZWQgUGFnZSBBY2NvdW50aW5nCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CmluZGV4IDQ3ZTU2OGEuLjVjODZjMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtNDgsNyArNDgsNyBAQAogam9iIHBsYWNlbWVudCBvbiBsYXJnZSBzeXN0ZW1zLgogCiBDcHVzZXRzIHVzZSB0aGUgZ2VuZXJpYyBjZ3JvdXAgc3Vic3lzdGVtIGRlc2NyaWJlZCBpbgotRG9jdW1lbnRhdGlvbi9jZ3JvdXAudHh0LgorRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0LgogCiBSZXF1ZXN0cyBieSBhIHRhc2ssIHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgyKSBzeXN0ZW0gY2FsbCB0bwogaW5jbHVkZSBDUFVzIGluIGl0cyBDUFUgYWZmaW5pdHkgbWFzaywgYW5kIHVzaW5nIHRoZSBtYmluZCgyKSBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FCmluZGV4IDc5NWExZGEuLmQ5YjA4NjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRQpAQCAtMjcsNyArMjcsNyBAQAogVGhlIEVUUkFYIDEwMExYIGNoaXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZvciByZWZlcmVuY2UsIHBsYXNlIHNlZSB0aGUgcHJlc3MtcmVsZWFzZToKK0ZvciByZWZlcmVuY2UsIHBsZWFzZSBzZWUgdGhlIHByZXNzLXJlbGVhc2U6CiAKIGh0dHA6Ly93d3cuYXhpcy5jb20vbmV3cy91cy8wMDExMDFfZXRyYXguaHRtCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8xLkludHJvIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzEuSW50cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjMmNiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8xLkludHJvCkBAIC0wLDAgKzEsMjc0IEBACisxOiBBIEdVSURFIFRPIFRIRSBLRVJORUwgREVWRUxPUE1FTlQgUFJPQ0VTUworCitUaGUgcHVycG9zZSBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIGhlbHAgZGV2ZWxvcGVycyAoYW5kIHRoZWlyIG1hbmFnZXJzKQord29yayB3aXRoIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgd2l0aCBhIG1pbmltdW0gb2YgZnJ1c3RyYXRpb24uICBJdCBpcworYW4gYXR0ZW1wdCB0byBkb2N1bWVudCBob3cgdGhpcyBjb21tdW5pdHkgd29ya3MgaW4gYSB3YXkgd2hpY2ggaXMKK2FjY2Vzc2libGUgdG8gdGhvc2Ugd2hvIGFyZSBub3QgaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIExpbnV4IGtlcm5lbAorZGV2ZWxvcG1lbnQgKG9yLCBpbmRlZWQsIGZyZWUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgaW4gZ2VuZXJhbCkuICBXaGlsZQordGhlcmUgaXMgc29tZSB0ZWNobmljYWwgbWF0ZXJpYWwgaGVyZSwgdGhpcyBpcyB2ZXJ5IG11Y2ggYSBwcm9jZXNzLW9yaWVudGVkCitkaXNjdXNzaW9uIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgYSBkZWVwIGtub3dsZWRnZSBvZiBrZXJuZWwgcHJvZ3JhbW1pbmcgdG8KK3VuZGVyc3RhbmQuCisKKworMS4xOiBFWEVDVVRJVkUgU1VNTUFSWQorCitUaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gY292ZXJzIHRoZSBzY29wZSBvZiB0aGUga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3MKK2FuZCB0aGUga2luZHMgb2YgZnJ1c3RyYXRpb25zIHRoYXQgZGV2ZWxvcGVycyBhbmQgdGhlaXIgZW1wbG95ZXJzIGNhbgorZW5jb3VudGVyIHRoZXJlLiAgVGhlcmUgYXJlIGEgZ3JlYXQgbWFueSByZWFzb25zIHdoeSBrZXJuZWwgY29kZSBzaG91bGQgYmUKK21lcmdlZCBpbnRvIHRoZSBvZmZpY2lhbCAoIm1haW5saW5lIikga2VybmVsLCBpbmNsdWRpbmcgYXV0b21hdGljCithdmFpbGFiaWxpdHkgdG8gdXNlcnMsIGNvbW11bml0eSBzdXBwb3J0IGluIG1hbnkgZm9ybXMsIGFuZCB0aGUgYWJpbGl0eSB0bworaW5mbHVlbmNlIHRoZSBkaXJlY3Rpb24gb2Yga2VybmVsIGRldmVsb3BtZW50LiAgQ29kZSBjb250cmlidXRlZCB0byB0aGUKK0xpbnV4IGtlcm5lbCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGEgR1BMLWNvbXBhdGlibGUgbGljZW5zZS4KKworU2VjdGlvbiAyIGludHJvZHVjZXMgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MsIHRoZSBrZXJuZWwgcmVsZWFzZSBjeWNsZSwgYW5kCit0aGUgbWVjaGFuaWNzIG9mIHRoZSBtZXJnZSB3aW5kb3cuICBUaGUgdmFyaW91cyBwaGFzZXMgaW4gdGhlIHBhdGNoCitkZXZlbG9wbWVudCwgcmV2aWV3LCBhbmQgbWVyZ2luZyBjeWNsZSBhcmUgY292ZXJlZC4gIFRoZXJlIGlzIHNvbWUKK2Rpc2N1c3Npb24gb2YgdG9vbHMgYW5kIG1haWxpbmcgbGlzdHMuICBEZXZlbG9wZXJzIHdhbnRpbmcgdG8gZ2V0IHN0YXJ0ZWQKK3dpdGgga2VybmVsIGRldmVsb3BtZW50IGFyZSBlbmNvdXJhZ2VkIHRvIHRyYWNrIGRvd24gYW5kIGZpeCBidWdzIGFzIGFuCitpbml0aWFsIGV4ZXJjaXNlLgorCitTZWN0aW9uIDMgY292ZXJzIGVhcmx5LXN0YWdlIHByb2plY3QgcGxhbm5pbmcsIHdpdGggYW4gZW1waGFzaXMgb24KK2ludm9sdmluZyB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGFzIHNvb24gYXMgcG9zc2libGUuCisKK1NlY3Rpb24gNCBpcyBhYm91dCB0aGUgY29kaW5nIHByb2Nlc3M7IHNldmVyYWwgcGl0ZmFsbHMgd2hpY2ggaGF2ZSBiZWVuCitlbmNvdW50ZXJlZCBieSBvdGhlciBkZXZlbG9wZXJzIGFyZSBkaXNjdXNzZWQuICBTb21lIHJlcXVpcmVtZW50cyBmb3IKK3BhdGNoZXMgYXJlIGNvdmVyZWQsIGFuZCB0aGVyZSBpcyBhbiBpbnRyb2R1Y3Rpb24gdG8gc29tZSBvZiB0aGUgdG9vbHMKK3doaWNoIGNhbiBoZWxwIHRvIGVuc3VyZSB0aGF0IGtlcm5lbCBwYXRjaGVzIGFyZSBjb3JyZWN0LgorCitTZWN0aW9uIDUgdGFsa3MgYWJvdXQgdGhlIHByb2Nlc3Mgb2YgcG9zdGluZyBwYXRjaGVzIGZvciByZXZpZXcuICBUbyBiZQordGFrZW4gc2VyaW91c2x5IGJ5IHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHksIHBhdGNoZXMgbXVzdCBiZSBwcm9wZXJseQorZm9ybWF0dGVkIGFuZCBkZXNjcmliZWQsIGFuZCB0aGV5IG11c3QgYmUgc2VudCB0byB0aGUgcmlnaHQgcGxhY2UuCitGb2xsb3dpbmcgdGhlIGFkdmljZSBpbiB0aGlzIHNlY3Rpb24gc2hvdWxkIGhlbHAgdG8gZW5zdXJlIHRoZSBiZXN0Citwb3NzaWJsZSByZWNlcHRpb24gZm9yIHlvdXIgd29yay4KKworU2VjdGlvbiA2IGNvdmVycyB3aGF0IGhhcHBlbnMgYWZ0ZXIgcG9zdGluZyBwYXRjaGVzOyB0aGUgam9iIGlzIGZhciBmcm9tCitkb25lIGF0IHRoYXQgcG9pbnQuICBXb3JraW5nIHdpdGggcmV2aWV3ZXJzIGlzIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZQorZGV2ZWxvcG1lbnQgcHJvY2VzczsgdGhpcyBzZWN0aW9uIG9mZmVycyBhIG51bWJlciBvZiB0aXBzIG9uIGhvdyB0byBhdm9pZAorcHJvYmxlbXMgYXQgdGhpcyBpbXBvcnRhbnQgc3RhZ2UuICBEZXZlbG9wZXJzIGFyZSBjYXV0aW9uZWQgYWdhaW5zdAorYXNzdW1pbmcgdGhhdCB0aGUgam9iIGlzIGRvbmUgd2hlbiBhIHBhdGNoIGlzIG1lcmdlZCBpbnRvIHRoZSBtYWlubGluZS4KKworU2VjdGlvbiA3IGludHJvZHVjZXMgYSBjb3VwbGUgb2YgImFkdmFuY2VkIiB0b3BpY3M6IG1hbmFnaW5nIHBhdGNoZXMgd2l0aAorZ2l0IGFuZCByZXZpZXdpbmcgcGF0Y2hlcyBwb3N0ZWQgYnkgb3RoZXJzLgorCitTZWN0aW9uIDggY29uY2x1ZGVzIHRoZSBkb2N1bWVudCB3aXRoIHBvaW50ZXJzIHRvIHNvdXJjZXMgZm9yIG1vcmUKK2luZm9ybWF0aW9uIG9uIGtlcm5lbCBkZXZlbG9wbWVudC4KKworCisxLjI6IFdIQVQgVEhJUyBET0NVTUVOVCBJUyBBQk9VVAorCitUaGUgTGludXgga2VybmVsLCBhdCBvdmVyIDYgbWlsbGlvbiBsaW5lcyBvZiBjb2RlIGFuZCB3ZWxsIG92ZXIgMTAwMCBhY3RpdmUKK2NvbnRyaWJ1dG9ycywgaXMgb25lIG9mIHRoZSBsYXJnZXN0IGFuZCBtb3N0IGFjdGl2ZSBmcmVlIHNvZnR3YXJlIHByb2plY3RzCitpbiBleGlzdGVuY2UuICBTaW5jZSBpdHMgaHVtYmxlIGJlZ2lubmluZyBpbiAxOTkxLCB0aGlzIGtlcm5lbCBoYXMgZXZvbHZlZAoraW50byBhIGJlc3Qtb2YtYnJlZWQgb3BlcmF0aW5nIHN5c3RlbSBjb21wb25lbnQgd2hpY2ggcnVucyBvbiBwb2NrZXQtc2l6ZWQKK2RpZ2l0YWwgbXVzaWMgcGxheWVycywgZGVza3RvcCBQQ3MsIHRoZSBsYXJnZXN0IHN1cGVyY29tcHV0ZXJzIGluCitleGlzdGVuY2UsIGFuZCBhbGwgdHlwZXMgb2Ygc3lzdGVtcyBpbiBiZXR3ZWVuLiAgSXQgaXMgYSByb2J1c3QsIGVmZmljaWVudCwKK2FuZCBzY2FsYWJsZSBzb2x1dGlvbiBmb3IgYWxtb3N0IGFueSBzaXR1YXRpb24uCisKK1dpdGggdGhlIGdyb3d0aCBvZiBMaW51eCBoYXMgY29tZSBhbiBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIG9mIGRldmVsb3BlcnMKKyhhbmQgY29tcGFuaWVzKSB3aXNoaW5nIHRvIHBhcnRpY2lwYXRlIGluIGl0cyBkZXZlbG9wbWVudC4gIEhhcmR3YXJlCit2ZW5kb3JzIHdhbnQgdG8gZW5zdXJlIHRoYXQgTGludXggc3VwcG9ydHMgdGhlaXIgcHJvZHVjdHMgd2VsbCwgbWFraW5nCit0aG9zZSBwcm9kdWN0cyBhdHRyYWN0aXZlIHRvIExpbnV4IHVzZXJzLiAgRW1iZWRkZWQgc3lzdGVtcyB2ZW5kb3JzLCB3aG8KK3VzZSBMaW51eCBhcyBhIGNvbXBvbmVudCBpbiBhbiBpbnRlZ3JhdGVkIHByb2R1Y3QsIHdhbnQgTGludXggdG8gYmUgYXMKK2NhcGFibGUgYW5kIHdlbGwtc3VpdGVkIHRvIHRoZSB0YXNrIGF0IGhhbmQgYXMgcG9zc2libGUuICBEaXN0cmlidXRvcnMgYW5kCitvdGhlciBzb2Z0d2FyZSB2ZW5kb3JzIHdobyBiYXNlIHRoZWlyIHByb2R1Y3RzIG9uIExpbnV4IGhhdmUgYSBjbGVhcgoraW50ZXJlc3QgaW4gdGhlIGNhcGFiaWxpdGllcywgcGVyZm9ybWFuY2UsIGFuZCByZWxpYWJpbGl0eSBvZiB0aGUgTGludXgKK2tlcm5lbC4gIEFuZCBlbmQgdXNlcnMsIHRvbywgd2lsbCBvZnRlbiB3aXNoIHRvIGNoYW5nZSBMaW51eCB0byBtYWtlIGl0CitiZXR0ZXIgc3VpdCB0aGVpciBuZWVkcy4KKworT25lIG9mIHRoZSBtb3N0IGNvbXBlbGxpbmcgZmVhdHVyZXMgb2YgTGludXggaXMgdGhhdCBpdCBpcyBhY2Nlc3NpYmxlIHRvCit0aGVzZSBkZXZlbG9wZXJzOyBhbnlib2R5IHdpdGggdGhlIHJlcXVpc2l0ZSBza2lsbHMgY2FuIGltcHJvdmUgTGludXggYW5kCitpbmZsdWVuY2UgdGhlIGRpcmVjdGlvbiBvZiBpdHMgZGV2ZWxvcG1lbnQuICBQcm9wcmlldGFyeSBwcm9kdWN0cyBjYW5ub3QKK29mZmVyIHRoaXMga2luZCBvZiBvcGVubmVzcywgd2hpY2ggaXMgYSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgZnJlZSBzb2Z0d2FyZQorcHJvY2Vzcy4gIEJ1dCwgaWYgYW55dGhpbmcsIHRoZSBrZXJuZWwgaXMgZXZlbiBtb3JlIG9wZW4gdGhhbiBtb3N0IG90aGVyCitmcmVlIHNvZnR3YXJlIHByb2plY3RzLiAgQSB0eXBpY2FsIHRocmVlLW1vbnRoIGtlcm5lbCBkZXZlbG9wbWVudCBjeWNsZSBjYW4KK2ludm9sdmUgb3ZlciAxMDAwIGRldmVsb3BlcnMgd29ya2luZyBmb3IgbW9yZSB0aGFuIDEwMCBkaWZmZXJlbnQgY29tcGFuaWVzCisob3IgZm9yIG5vIGNvbXBhbnkgYXQgYWxsKS4KKworV29ya2luZyB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGlzIG5vdCBlc3BlY2lhbGx5IGhhcmQuICBCdXQsCit0aGF0IG5vdHdpdGhzdGFuZGluZywgbWFueSBwb3RlbnRpYWwgY29udHJpYnV0b3JzIGhhdmUgZXhwZXJpZW5jZWQKK2RpZmZpY3VsdGllcyB3aGVuIHRyeWluZyB0byBkbyBrZXJuZWwgd29yay4gIFRoZSBrZXJuZWwgY29tbXVuaXR5IGhhcworZXZvbHZlZCBpdHMgb3duIGRpc3RpbmN0IHdheXMgb2Ygb3BlcmF0aW5nIHdoaWNoIGFsbG93IGl0IHRvIGZ1bmN0aW9uCitzbW9vdGhseSAoYW5kIHByb2R1Y2UgYSBoaWdoLXF1YWxpdHkgcHJvZHVjdCkgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUKK3Rob3VzYW5kcyBvZiBsaW5lcyBvZiBjb2RlIGFyZSBiZWluZyBjaGFuZ2VkIGV2ZXJ5IGRheS4gIFNvIGl0IGlzIG5vdAorc3VycHJpc2luZyB0aGF0IExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGRpZmZlcnMgZ3JlYXRseSBmcm9tCitwcm9wcmlldGFyeSBkZXZlbG9wbWVudCBtZXRob2RzLgorCitUaGUga2VybmVsJ3MgZGV2ZWxvcG1lbnQgcHJvY2VzcyBtYXkgY29tZSBhY3Jvc3MgYXMgc3RyYW5nZSBhbmQKK2ludGltaWRhdGluZyB0byBuZXcgZGV2ZWxvcGVycywgYnV0IHRoZXJlIGFyZSBnb29kIHJlYXNvbnMgYW5kIHNvbGlkCitleHBlcmllbmNlIGJlaGluZCBpdC4gIEEgZGV2ZWxvcGVyIHdobyBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBrZXJuZWwKK2NvbW11bml0eSdzIHdheXMgKG9yLCB3b3JzZSwgd2hvIHRyaWVzIHRvIGZsb3V0IG9yIGNpcmN1bXZlbnQgdGhlbSkgd2lsbAoraGF2ZSBhIGZydXN0cmF0aW5nIGV4cGVyaWVuY2UgaW4gc3RvcmUuICBUaGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5LCB3aGlsZQorYmVpbmcgaGVscGZ1bCB0byB0aG9zZSB3aG8gYXJlIHRyeWluZyB0byBsZWFybiwgaGFzIGxpdHRsZSB0aW1lIGZvciB0aG9zZQord2hvIHdpbGwgbm90IGxpc3RlbiBvciB3aG8gZG8gbm90IGNhcmUgYWJvdXQgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuCisKK0l0IGlzIGhvcGVkIHRoYXQgdGhvc2Ugd2hvIHJlYWQgdGhpcyBkb2N1bWVudCB3aWxsIGJlIGFibGUgdG8gYXZvaWQgdGhhdAorZnJ1c3RyYXRpbmcgZXhwZXJpZW5jZS4gIFRoZXJlIGlzIGEgbG90IG9mIG1hdGVyaWFsIGhlcmUsIGJ1dCB0aGUgZWZmb3J0CitpbnZvbHZlZCBpbiByZWFkaW5nIGl0IHdpbGwgYmUgcmVwYWlkIGluIHNob3J0IG9yZGVyLiAgVGhlIGRldmVsb3BtZW50Citjb21tdW5pdHkgaXMgYWx3YXlzIGluIG5lZWQgb2YgZGV2ZWxvcGVycyB3aG8gd2lsbCBoZWxwIHRvIG1ha2UgdGhlIGtlcm5lbAorYmV0dGVyOyB0aGUgZm9sbG93aW5nIHRleHQgc2hvdWxkIGhlbHAgeW91IC0gb3IgdGhvc2Ugd2hvIHdvcmsgZm9yIHlvdSAtCitqb2luIG91ciBjb21tdW5pdHkuCisKKworMS4zOiBDUkVESVRTCisKK1RoaXMgZG9jdW1lbnQgd2FzIHdyaXR0ZW4gYnkgSm9uYXRoYW4gQ29yYmV0LCBjb3JiZXRAbHduLm5ldC4gIEl0IGhhcyBiZWVuCitpbXByb3ZlZCBieSBjb21tZW50cyBmcm9tIEpvaGFubmVzIEJlcmcsIEphbWVzIEJlcnJ5LCBBbGV4IENoaWFuZywgUm9sYW5kCitEcmVpZXIsIFJhbmR5IER1bmxhcCwgSmFrZSBFZGdlLCBKaXJpIEtvc2luYSwgTWF0dCBNYWNrYWxsLCBBcnRodXIgTWFyc2gsCitBbWFuZGEgTWNQaGVyc29uLCBBbmRyZXcgTW9ydG9uLCBBbmRyZXcgUHJpY2UsIFRzdWdpa2F6dSBTaGliYXRhLCBhbmQKK0pvY2hlbiBWb8OfLiAKKworVGhpcyB3b3JrIHdhcyBzdXBwb3J0ZWQgYnkgdGhlIExpbnV4IEZvdW5kYXRpb247IHRoYW5rcyBlc3BlY2lhbGx5IHRvCitBbWFuZGEgTWNQaGVyc29uLCB3aG8gc2F3IHRoZSB2YWx1ZSBvZiB0aGlzIGVmZm9ydCBhbmQgbWFkZSBpdCBhbGwgaGFwcGVuLgorCisKKzEuNDogVEhFIElNUE9SVEFOQ0UgT0YgR0VUVElORyBDT0RFIElOVE8gVEhFIE1BSU5MSU5FCisKK1NvbWUgY29tcGFuaWVzIGFuZCBkZXZlbG9wZXJzIG9jY2FzaW9uYWxseSB3b25kZXIgd2h5IHRoZXkgc2hvdWxkIGJvdGhlcgorbGVhcm5pbmcgaG93IHRvIHdvcmsgd2l0aCB0aGUga2VybmVsIGNvbW11bml0eSBhbmQgZ2V0IHRoZWlyIGNvZGUgaW50byB0aGUKK21haW5saW5lIGtlcm5lbCAodGhlICJtYWlubGluZSIgYmVpbmcgdGhlIGtlcm5lbCBtYWludGFpbmVkIGJ5IExpbnVzCitUb3J2YWxkcyBhbmQgdXNlZCBhcyBhIGJhc2UgYnkgTGludXggZGlzdHJpYnV0b3JzKS4gIEluIHRoZSBzaG9ydCB0ZXJtLAorY29udHJpYnV0aW5nIGNvZGUgY2FuIGxvb2sgbGlrZSBhbiBhdm9pZGFibGUgZXhwZW5zZTsgaXQgc2VlbXMgZWFzaWVyIHRvCitqdXN0IGtlZXAgdGhlIGNvZGUgc2VwYXJhdGUgYW5kIHN1cHBvcnQgdXNlcnMgZGlyZWN0bHkuICBUaGUgdHJ1dGggb2YgdGhlCittYXR0ZXIgaXMgdGhhdCBrZWVwaW5nIGNvZGUgc2VwYXJhdGUgKCJvdXQgb2YgdHJlZSIpIGlzIGEgZmFsc2UgZWNvbm9teS4KKworQXMgYSB3YXkgb2YgaWxsdXN0cmF0aW5nIHRoZSBjb3N0cyBvZiBvdXQtb2YtdHJlZSBjb2RlLCBoZXJlIGFyZSBhIGZldworcmVsZXZhbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3M7IG1vc3Qgb2YgdGhlc2Ugd2lsbCBiZQorZGlzY3Vzc2VkIGluIGdyZWF0ZXIgZGV0YWlsIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuICBDb25zaWRlcjoKKworLSBDb2RlIHdoaWNoIGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwgaXMgYXZhaWxhYmxlIHRvIGFsbAorICBMaW51eCB1c2Vycy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBwcmVzZW50IG9uIGFsbCBkaXN0cmlidXRpb25zIHdoaWNoCisgIGVuYWJsZSBpdC4gIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGRyaXZlciBkaXNrcywgZG93bmxvYWRzLCBvciB0aGUgaGFzc2xlcworICBvZiBzdXBwb3J0aW5nIG11bHRpcGxlIHZlcnNpb25zIG9mIG11bHRpcGxlIGRpc3RyaWJ1dGlvbnM7IGl0IGFsbCBqdXN0CisgIHdvcmtzLCBmb3IgdGhlIGRldmVsb3BlciBhbmQgZm9yIHRoZSB1c2VyLiAgSW5jb3Jwb3JhdGlvbiBpbnRvIHRoZQorICBtYWlubGluZSBzb2x2ZXMgYSBsYXJnZSBudW1iZXIgb2YgZGlzdHJpYnV0aW9uIGFuZCBzdXBwb3J0IHByb2JsZW1zLgorCistIFdoaWxlIGtlcm5lbCBkZXZlbG9wZXJzIHN0cml2ZSB0byBtYWludGFpbiBhIHN0YWJsZSBpbnRlcmZhY2UgdG8gdXNlcgorICBzcGFjZSwgdGhlIGludGVybmFsIGtlcm5lbCBBUEkgaXMgaW4gY29uc3RhbnQgZmx1eC4gIFRoZSBsYWNrIG9mIGEgc3RhYmxlCisgIGludGVybmFsIGludGVyZmFjZSBpcyBhIGRlbGliZXJhdGUgZGVzaWduIGRlY2lzaW9uOyBpdCBhbGxvd3MgZnVuZGFtZW50YWwKKyAgaW1wcm92ZW1lbnRzIHRvIGJlIG1hZGUgYXQgYW55IHRpbWUgYW5kIHJlc3VsdHMgaW4gaGlnaGVyLXF1YWxpdHkgY29kZS4KKyAgQnV0IG9uZSByZXN1bHQgb2YgdGhhdCBwb2xpY3kgaXMgdGhhdCBhbnkgb3V0LW9mLXRyZWUgY29kZSByZXF1aXJlcworICBjb25zdGFudCB1cGtlZXAgaWYgaXQgaXMgdG8gd29yayB3aXRoIG5ldyBrZXJuZWxzLiAgTWFpbnRhaW5pbmcKKyAgb3V0LW9mLXRyZWUgY29kZSByZXF1aXJlcyBzaWduaWZpY2FudCBhbW91bnRzIG9mIHdvcmsganVzdCB0byBrZWVwIHRoYXQKKyAgY29kZSB3b3JraW5nLgorCisgIENvZGUgd2hpY2ggaXMgaW4gdGhlIG1haW5saW5lLCBpbnN0ZWFkLCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgd29yayBhcyB0aGUKKyAgcmVzdWx0IG9mIGEgc2ltcGxlIHJ1bGUgcmVxdWlyaW5nIGFueSBkZXZlbG9wZXIgd2hvIG1ha2VzIGFuIEFQSSBjaGFuZ2UKKyAgdG8gYWxzbyBmaXggYW55IGNvZGUgdGhhdCBicmVha3MgYXMgdGhlIHJlc3VsdCBvZiB0aGF0IGNoYW5nZS4gIFNvIGNvZGUKKyAgd2hpY2ggaGFzIGJlZW4gbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGhhcyBzaWduaWZpY2FudGx5IGxvd2VyCisgIG1haW50ZW5hbmNlIGNvc3RzLgorCistIEJleW9uZCB0aGF0LCBjb2RlIHdoaWNoIGlzIGluIHRoZSBrZXJuZWwgd2lsbCBvZnRlbiBiZSBpbXByb3ZlZCBieSBvdGhlcgorICBkZXZlbG9wZXJzLiAgU3VycHJpc2luZyByZXN1bHRzIGNhbiBjb21lIGZyb20gZW1wb3dlcmluZyB5b3VyIHVzZXIKKyAgY29tbXVuaXR5IGFuZCBjdXN0b21lcnMgdG8gaW1wcm92ZSB5b3VyIHByb2R1Y3QuCisKKy0gS2VybmVsIGNvZGUgaXMgc3ViamVjdGVkIHRvIHJldmlldywgYm90aCBiZWZvcmUgYW5kIGFmdGVyIG1lcmdpbmcgaW50bworICB0aGUgbWFpbmxpbmUuICBObyBtYXR0ZXIgaG93IHN0cm9uZyB0aGUgb3JpZ2luYWwgZGV2ZWxvcGVyJ3Mgc2tpbGxzIGFyZSwKKyAgdGhpcyByZXZpZXcgcHJvY2VzcyBpbnZhcmlhYmx5IGZpbmRzIHdheXMgaW4gd2hpY2ggdGhlIGNvZGUgY2FuIGJlCisgIGltcHJvdmVkLiAgT2Z0ZW4gcmV2aWV3IGZpbmRzIHNldmVyZSBidWdzIGFuZCBzZWN1cml0eSBwcm9ibGVtcy4gIFRoaXMgaXMKKyAgZXNwZWNpYWxseSB0cnVlIGZvciBjb2RlIHdoaWNoIGhhcyBiZWVuIGRldmVsb3BlZCBpbiBhIGNsb3NlZAorICBlbnZpcm9ubWVudDsgc3VjaCBjb2RlIGJlbmVmaXRzIHN0cm9uZ2x5IGZyb20gcmV2aWV3IGJ5IG91dHNpZGUKKyAgZGV2ZWxvcGVycy4gIE91dC1vZi10cmVlIGNvZGUgaXMgbG93ZXItcXVhbGl0eSBjb2RlLgorCistIFBhcnRpY2lwYXRpb24gaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MgaXMgeW91ciB3YXkgdG8gaW5mbHVlbmNlIHRoZQorICBkaXJlY3Rpb24gb2Yga2VybmVsIGRldmVsb3BtZW50LiAgVXNlcnMgd2hvIGNvbXBsYWluIGZyb20gdGhlIHNpZGVsaW5lcworICBhcmUgaGVhcmQsIGJ1dCBhY3RpdmUgZGV2ZWxvcGVycyBoYXZlIGEgc3Ryb25nZXIgdm9pY2UgLSBhbmQgdGhlIGFiaWxpdHkKKyAgdG8gaW1wbGVtZW50IGNoYW5nZXMgd2hpY2ggbWFrZSB0aGUga2VybmVsIHdvcmsgYmV0dGVyIGZvciB0aGVpciBuZWVkcy4KKworLSBXaGVuIGNvZGUgaXMgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LCB0aGUgcG9zc2liaWxpdHkgdGhhdCBhIHRoaXJkIHBhcnR5CisgIHdpbGwgY29udHJpYnV0ZSBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBvZiBhIHNpbWlsYXIgZmVhdHVyZSBhbHdheXMKKyAgZXhpc3RzLiAgU2hvdWxkIHRoYXQgaGFwcGVuLCBnZXR0aW5nIHlvdXIgY29kZSBtZXJnZWQgd2lsbCBiZWNvbWUgbXVjaAorICBoYXJkZXIgLSB0byB0aGUgcG9pbnQgb2YgaW1wb3NzaWJpbGl0eS4gIFRoZW4geW91IHdpbGwgYmUgZmFjZWQgd2l0aCB0aGUKKyAgdW5wbGVhc2FudCBhbHRlcm5hdGl2ZXMgb2YgZWl0aGVyICgxKSBtYWludGFpbmluZyBhIG5vbnN0YW5kYXJkIGZlYXR1cmUKKyAgb3V0IG9mIHRyZWUgaW5kZWZpbml0ZWx5LCBvciAoMikgYWJhbmRvbmluZyB5b3VyIGNvZGUgYW5kIG1pZ3JhdGluZyB5b3VyCisgIHVzZXJzIG92ZXIgdG8gdGhlIGluLXRyZWUgdmVyc2lvbi4KKworLSBDb250cmlidXRpb24gb2YgY29kZSBpcyB0aGUgZnVuZGFtZW50YWwgYWN0aW9uIHdoaWNoIG1ha2VzIHRoZSB3aG9sZQorICBwcm9jZXNzIHdvcmsuICBCeSBjb250cmlidXRpbmcgeW91ciBjb2RlIHlvdSBjYW4gYWRkIG5ldyBmdW5jdGlvbmFsaXR5IHRvCisgIHRoZSBrZXJuZWwgYW5kIHByb3ZpZGUgY2FwYWJpbGl0aWVzIGFuZCBleGFtcGxlcyB3aGljaCBhcmUgb2YgdXNlIHRvCisgIG90aGVyIGtlcm5lbCBkZXZlbG9wZXJzLiAgSWYgeW91IGhhdmUgZGV2ZWxvcGVkIGNvZGUgZm9yIExpbnV4IChvciBhcmUKKyAgdGhpbmtpbmcgYWJvdXQgZG9pbmcgc28pLCB5b3UgY2xlYXJseSBoYXZlIGFuIGludGVyZXN0IGluIHRoZSBjb250aW51ZWQKKyAgc3VjY2VzcyBvZiB0aGlzIHBsYXRmb3JtOyBjb250cmlidXRpbmcgY29kZSBpcyBvbmUgb2YgdGhlIGJlc3Qgd2F5cyB0bworICBoZWxwIGVuc3VyZSB0aGF0IHN1Y2Nlc3MuCisKK0FsbCBvZiB0aGUgcmVhc29uaW5nIGFib3ZlIGFwcGxpZXMgdG8gYW55IG91dC1vZi10cmVlIGtlcm5lbCBjb2RlLAoraW5jbHVkaW5nIGNvZGUgd2hpY2ggaXMgZGlzdHJpYnV0ZWQgaW4gcHJvcHJpZXRhcnksIGJpbmFyeS1vbmx5IGZvcm0uCitUaGVyZSBhcmUsIGhvd2V2ZXIsIGFkZGl0aW9uYWwgZmFjdG9ycyB3aGljaCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50CitiZWZvcmUgY29uc2lkZXJpbmcgYW55IHNvcnQgb2YgYmluYXJ5LW9ubHkga2VybmVsIGNvZGUgZGlzdHJpYnV0aW9uLiAgVGhlc2UKK2luY2x1ZGU6CisKKy0gVGhlIGxlZ2FsIGlzc3VlcyBhcm91bmQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBwcm9wcmlldGFyeSBrZXJuZWwgbW9kdWxlcworICBhcmUgY2xvdWR5IGF0IGJlc3Q7IHF1aXRlIGEgZmV3IGtlcm5lbCBjb3B5cmlnaHQgaG9sZGVycyBiZWxpZXZlIHRoYXQKKyAgbW9zdCBiaW5hcnktb25seSBtb2R1bGVzIGFyZSBkZXJpdmVkIHByb2R1Y3RzIG9mIHRoZSBrZXJuZWwgYW5kIHRoYXQsIGFzCisgIGEgcmVzdWx0LCB0aGVpciBkaXN0cmlidXRpb24gaXMgYSB2aW9sYXRpb24gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICBsaWNlbnNlIChhYm91dCB3aGljaCBtb3JlIHdpbGwgYmUgc2FpZCBiZWxvdykuICBZb3VyIGF1dGhvciBpcyBub3QgYQorICBsYXd5ZXIsIGFuZCBub3RoaW5nIGluIHRoaXMgZG9jdW1lbnQgY2FuIHBvc3NpYmx5IGJlIGNvbnNpZGVyZWQgdG8gYmUKKyAgbGVnYWwgYWR2aWNlLiAgVGhlIHRydWUgbGVnYWwgc3RhdHVzIG9mIGNsb3NlZC1zb3VyY2UgbW9kdWxlcyBjYW4gb25seSBiZQorICBkZXRlcm1pbmVkIGJ5IHRoZSBjb3VydHMuICBCdXQgdGhlIHVuY2VydGFpbnR5IHdoaWNoIGhhdW50cyB0aG9zZSBtb2R1bGVzCisgIGlzIHRoZXJlIHJlZ2FyZGxlc3MuCisKKy0gQmluYXJ5IG1vZHVsZXMgZ3JlYXRseSBpbmNyZWFzZSB0aGUgZGlmZmljdWx0eSBvZiBkZWJ1Z2dpbmcga2VybmVsCisgIHByb2JsZW1zLCB0byB0aGUgcG9pbnQgdGhhdCBtb3N0IGtlcm5lbCBkZXZlbG9wZXJzIHdpbGwgbm90IGV2ZW4gdHJ5LiAgU28KKyAgdGhlIGRpc3RyaWJ1dGlvbiBvZiBiaW5hcnktb25seSBtb2R1bGVzIHdpbGwgbWFrZSBpdCBoYXJkZXIgZm9yIHlvdXIKKyAgdXNlcnMgdG8gZ2V0IHN1cHBvcnQgZnJvbSB0aGUgY29tbXVuaXR5LgorCistIFN1cHBvcnQgaXMgYWxzbyBoYXJkZXIgZm9yIGRpc3RyaWJ1dG9ycyBvZiBiaW5hcnktb25seSBtb2R1bGVzLCB3aG8gbXVzdAorICBwcm92aWRlIGEgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIGZvciBldmVyeSBkaXN0cmlidXRpb24gYW5kIGV2ZXJ5IGtlcm5lbAorICB2ZXJzaW9uIHRoZXkgd2lzaCB0byBzdXBwb3J0LiAgRG96ZW5zIG9mIGJ1aWxkcyBvZiBhIHNpbmdsZSBtb2R1bGUgY2FuCisgIGJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgcmVhc29uYWJseSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlLCBhbmQgeW91ciB1c2VycworICB3aWxsIGhhdmUgdG8gdXBncmFkZSB5b3VyIG1vZHVsZSBzZXBhcmF0ZWx5IGV2ZXJ5IHRpbWUgdGhleSB1cGdyYWRlIHRoZWlyCisgIGtlcm5lbC4KKworLSBFdmVyeXRoaW5nIHRoYXQgd2FzIHNhaWQgYWJvdmUgYWJvdXQgY29kZSByZXZpZXcgYXBwbGllcyBkb3VibHkgdG8KKyAgY2xvc2VkLXNvdXJjZSBjb2RlLiAgU2luY2UgdGhpcyBjb2RlIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsLCBpdCBjYW5ub3QKKyAgaGF2ZSBiZWVuIHJldmlld2VkIGJ5IHRoZSBjb21tdW5pdHkgYW5kIHdpbGwsIGJleW9uZCBkb3VidCwgaGF2ZSBzZXJpb3VzCisgIHByb2JsZW1zLiAKKworTWFrZXJzIG9mIGVtYmVkZGVkIHN5c3RlbXMsIGluIHBhcnRpY3VsYXIsIG1heSBiZSB0ZW1wdGVkIHRvIGRpc3JlZ2FyZCBtdWNoCitvZiB3aGF0IGhhcyBiZWVuIHNhaWQgaW4gdGhpcyBzZWN0aW9uIGluIHRoZSBiZWxpZWYgdGhhdCB0aGV5IGFyZSBzaGlwcGluZworYSBzZWxmLWNvbnRhaW5lZCBwcm9kdWN0IHdoaWNoIHVzZXMgYSBmcm96ZW4ga2VybmVsIHZlcnNpb24gYW5kIHJlcXVpcmVzIG5vCittb3JlIGRldmVsb3BtZW50IGFmdGVyIGl0cyByZWxlYXNlLiAgVGhpcyBhcmd1bWVudCBtaXNzZXMgdGhlIHZhbHVlIG9mCit3aWRlc3ByZWFkIGNvZGUgcmV2aWV3IGFuZCB0aGUgdmFsdWUgb2YgYWxsb3dpbmcgeW91ciB1c2VycyB0byBhZGQKK2NhcGFiaWxpdGllcyB0byB5b3VyIHByb2R1Y3QuICBCdXQgdGhlc2UgcHJvZHVjdHMsIHRvbywgaGF2ZSBhIGxpbWl0ZWQKK2NvbW1lcmNpYWwgbGlmZSwgYWZ0ZXIgd2hpY2ggYSBuZXcgdmVyc2lvbiBtdXN0IGJlIHJlbGVhc2VkLiAgQXQgdGhhdAorcG9pbnQsIHZlbmRvcnMgd2hvc2UgY29kZSBpcyBpbiB0aGUgbWFpbmxpbmUgYW5kIHdlbGwgbWFpbnRhaW5lZCB3aWxsIGJlCittdWNoIGJldHRlciBwb3NpdGlvbmVkIHRvIGdldCB0aGUgbmV3IHByb2R1Y3QgcmVhZHkgZm9yIG1hcmtldCBxdWlja2x5LgorCisKKzEuNTogTElDRU5TSU5HCisKK0NvZGUgaXMgY29udHJpYnV0ZWQgdG8gdGhlIExpbnV4IGtlcm5lbCB1bmRlciBhIG51bWJlciBvZiBsaWNlbnNlcywgYnV0IGFsbAorY29kZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisoR1BMdjIpLCB3aGljaCBpcyB0aGUgbGljZW5zZSBjb3ZlcmluZyB0aGUga2VybmVsIGRpc3RyaWJ1dGlvbiBhcyBhIHdob2xlLgorSW4gcHJhY3RpY2UsIHRoYXQgbWVhbnMgdGhhdCBhbGwgY29kZSBjb250cmlidXRpb25zIGFyZSBjb3ZlcmVkIGVpdGhlciBieQorR1BMdjIgKHdpdGgsIG9wdGlvbmFsbHksIGxhbmd1YWdlIGFsbG93aW5nIGRpc3RyaWJ1dGlvbiB1bmRlciBsYXRlcgordmVyc2lvbnMgb2YgdGhlIEdQTCkgb3IgdGhlIHRocmVlLWNsYXVzZSBCU0QgbGljZW5zZS4gIEFueSBjb250cmlidXRpb25zCit3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgYSBjb21wYXRpYmxlIGxpY2Vuc2Ugd2lsbCBub3QgYmUgYWNjZXB0ZWQgaW50byB0aGUKK2tlcm5lbC4KKworQ29weXJpZ2h0IGFzc2lnbm1lbnRzIGFyZSBub3QgcmVxdWlyZWQgKG9yIHJlcXVlc3RlZCkgZm9yIGNvZGUgY29udHJpYnV0ZWQKK3RvIHRoZSBrZXJuZWwuICBBbGwgY29kZSBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUga2VybmVsIHJldGFpbnMgaXRzCitvcmlnaW5hbCBvd25lcnNoaXA7IGFzIGEgcmVzdWx0LCB0aGUga2VybmVsIG5vdyBoYXMgdGhvdXNhbmRzIG9mIG93bmVycy4KKworT25lIGltcGxpY2F0aW9uIG9mIHRoaXMgb3duZXJzaGlwIHN0cnVjdHVyZSBpcyB0aGF0IGFueSBhdHRlbXB0IHRvIGNoYW5nZQordGhlIGxpY2Vuc2luZyBvZiB0aGUga2VybmVsIGlzIGRvb21lZCB0byBhbG1vc3QgY2VydGFpbiBmYWlsdXJlLiAgVGhlcmUgYXJlCitmZXcgcHJhY3RpY2FsIHNjZW5hcmlvcyB3aGVyZSB0aGUgYWdyZWVtZW50IG9mIGFsbCBjb3B5cmlnaHQgaG9sZGVycyBjb3VsZAorYmUgb2J0YWluZWQgKG9yIHRoZWlyIGNvZGUgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwpLiAgU28sIGluIHBhcnRpY3VsYXIsCit0aGVyZSBpcyBubyBwcm9zcGVjdCBvZiBhIG1pZ3JhdGlvbiB0byB2ZXJzaW9uIDMgb2YgdGhlIEdQTCBpbiB0aGUKK2ZvcmVzZWVhYmxlIGZ1dHVyZS4KKworSXQgaXMgaW1wZXJhdGl2ZSB0aGF0IGFsbCBjb2RlIGNvbnRyaWJ1dGVkIHRvIHRoZSBrZXJuZWwgYmUgbGVnaXRpbWF0ZWx5CitmcmVlIHNvZnR3YXJlLiAgRm9yIHRoYXQgcmVhc29uLCBjb2RlIGZyb20gYW5vbnltb3VzIChvciBwc2V1ZG9ueW1vdXMpCitjb250cmlidXRvcnMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuICBBbGwgY29udHJpYnV0b3JzIGFyZSByZXF1aXJlZCB0byAic2lnbgorb2ZmIiBvbiB0aGVpciBjb2RlLCBzdGF0aW5nIHRoYXQgdGhlIGNvZGUgY2FuIGJlIGRpc3RyaWJ1dGVkIHdpdGggdGhlCitrZXJuZWwgdW5kZXIgdGhlIEdQTC4gIENvZGUgd2hpY2ggaGFzIG5vdCBiZWVuIGxpY2Vuc2VkIGFzIGZyZWUgc29mdHdhcmUgYnkKK2l0cyBvd25lciwgb3Igd2hpY2ggcmlza3MgY3JlYXRpbmcgY29weXJpZ2h0LXJlbGF0ZWQgcHJvYmxlbXMgZm9yIHRoZQora2VybmVsIChzdWNoIGFzIGNvZGUgd2hpY2ggZGVyaXZlcyBmcm9tIHJldmVyc2UtZW5naW5lZXJpbmcgZWZmb3J0cyBsYWNraW5nCitwcm9wZXIgc2FmZWd1YXJkcykgY2Fubm90IGJlIGNvbnRyaWJ1dGVkLgorCitRdWVzdGlvbnMgYWJvdXQgY29weXJpZ2h0LXJlbGF0ZWQgaXNzdWVzIGFyZSBjb21tb24gb24gTGludXggZGV2ZWxvcG1lbnQKK21haWxpbmcgbGlzdHMuICBTdWNoIHF1ZXN0aW9ucyB3aWxsIG5vcm1hbGx5IHJlY2VpdmUgbm8gc2hvcnRhZ2Ugb2YKK2Fuc3dlcnMsIGJ1dCBvbmUgc2hvdWxkIGJlYXIgaW4gbWluZCB0aGF0IHRoZSBwZW9wbGUgYW5zd2VyaW5nIHRob3NlCitxdWVzdGlvbnMgYXJlIG5vdCBsYXd5ZXJzIGFuZCBjYW5ub3QgcHJvdmlkZSBsZWdhbCBhZHZpY2UuICBJZiB5b3UgaGF2ZQorbGVnYWwgcXVlc3Rpb25zIHJlbGF0aW5nIHRvIExpbnV4IHNvdXJjZSBjb2RlLCB0aGVyZSBpcyBubyBzdWJzdGl0dXRlIGZvcgordGFsa2luZyB3aXRoIGEgbGF3eWVyIHdobyB1bmRlcnN0YW5kcyB0aGlzIGZpZWxkLiAgUmVseWluZyBvbiBhbnN3ZXJzCitvYnRhaW5lZCBvbiB0ZWNobmljYWwgbWFpbGluZyBsaXN0cyBpcyBhIHJpc2t5IGFmZmFpci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8yLlByb2Nlc3MgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMi5Qcm9jZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTAzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMi5Qcm9jZXNzCkBAIC0wLDAgKzEsNDU5IEBACisyOiBIT1cgVEhFIERFVkVMT1BNRU5UIFBST0NFU1MgV09SS1MKKworTGludXgga2VybmVsIGRldmVsb3BtZW50IGluIHRoZSBlYXJseSAxOTkwJ3Mgd2FzIGEgcHJldHR5IGxvb3NlIGFmZmFpciwKK3dpdGggcmVsYXRpdmVseSBzbWFsbCBudW1iZXJzIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzIGludm9sdmVkLiAgV2l0aCBhCit1c2VyIGJhc2UgaW4gdGhlIG1pbGxpb25zIGFuZCB3aXRoIHNvbWUgMiwwMDAgZGV2ZWxvcGVycyBpbnZvbHZlZCBvdmVyIHRoZQorY291cnNlIG9mIG9uZSB5ZWFyLCB0aGUga2VybmVsIGhhcyBzaW5jZSBoYWQgdG8gZXZvbHZlIGEgbnVtYmVyIG9mCitwcm9jZXNzZXMgdG8ga2VlcCBkZXZlbG9wbWVudCBoYXBwZW5pbmcgc21vb3RobHkuICBBIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YKK2hvdyB0aGUgcHJvY2VzcyB3b3JrcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiZSBhbiBlZmZlY3RpdmUgcGFydCBvZiBpdC4KKworCisyLjE6IFRIRSBCSUcgUElDVFVSRQorCitUaGUga2VybmVsIGRldmVsb3BlcnMgdXNlIGEgbG9vc2VseSB0aW1lLWJhc2VkIHJlbGVhc2UgcHJvY2Vzcywgd2l0aCBhIG5ldworbWFqb3Iga2VybmVsIHJlbGVhc2UgaGFwcGVuaW5nIGV2ZXJ5IHR3byBvciB0aHJlZSBtb250aHMuICBUaGUgcmVjZW50CityZWxlYXNlIGhpc3RvcnkgbG9va3MgbGlrZSB0aGlzOgorCisJMi42LjI2CUp1bHkgMTMsIDIwMDgKKwkyLjYuMjUJQXByaWwgMTYsIDIwMDgKKwkyLjYuMjQJSmFudWFyeSAyNCwgMjAwOAorCTIuNi4yMwlPY3RvYmVyIDksIDIwMDcKKwkyLjYuMjIJSnVseSA4LCAyMDA3CisJMi42LjIxCUFwcmlsIDI1LCAyMDA3CisJMi42LjIwCUZlYnJ1YXJ5IDQsIDIwMDcKKworRXZlcnkgMi42LnggcmVsZWFzZSBpcyBhIG1ham9yIGtlcm5lbCByZWxlYXNlIHdpdGggbmV3IGZlYXR1cmVzLCBpbnRlcm5hbAorQVBJIGNoYW5nZXMsIGFuZCBtb3JlLiAgQSB0eXBpY2FsIDIuNiByZWxlYXNlIGNhbiBjb250YWluIG92ZXIgMTAsMDAwCitjaGFuZ2VzZXRzIHdpdGggY2hhbmdlcyB0byBzZXZlcmFsIGh1bmRyZWQgdGhvdXNhbmQgbGluZXMgb2YgY29kZS4gIDIuNiBpcwordGh1cyB0aGUgbGVhZGluZyBlZGdlIG9mIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudDsgdGhlIGtlcm5lbCB1c2VzIGEKK3JvbGxpbmcgZGV2ZWxvcG1lbnQgbW9kZWwgd2hpY2ggaXMgY29udGludWFsbHkgaW50ZWdyYXRpbmcgbWFqb3IgY2hhbmdlcy4KKworQSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBkaXNjaXBsaW5lIGlzIGZvbGxvd2VkIHdpdGggcmVnYXJkIHRvIHRoZQorbWVyZ2luZyBvZiBwYXRjaGVzIGZvciBlYWNoIHJlbGVhc2UuICBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZGV2ZWxvcG1lbnQKK2N5Y2xlLCB0aGUgIm1lcmdlIHdpbmRvdyIgaXMgc2FpZCB0byBiZSBvcGVuLiAgQXQgdGhhdCB0aW1lLCBjb2RlIHdoaWNoIGlzCitkZWVtZWQgdG8gYmUgc3VmZmljaWVudGx5IHN0YWJsZSAoYW5kIHdoaWNoIGlzIGFjY2VwdGVkIGJ5IHRoZSBkZXZlbG9wbWVudAorY29tbXVuaXR5KSBpcyBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUga2VybmVsLiAgVGhlIGJ1bGsgb2YgY2hhbmdlcyBmb3IgYQorbmV3IGRldmVsb3BtZW50IGN5Y2xlIChhbmQgYWxsIG9mIHRoZSBtYWpvciBjaGFuZ2VzKSB3aWxsIGJlIG1lcmdlZCBkdXJpbmcKK3RoaXMgdGltZSwgYXQgYSByYXRlIGFwcHJvYWNoaW5nIDEsMDAwIGNoYW5nZXMgKCJwYXRjaGVzLCIgb3IgImNoYW5nZXNldHMiKQorcGVyIGRheS4KKworKEFzIGFuIGFzaWRlLCBpdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgY2hhbmdlcyBpbnRlZ3JhdGVkIGR1cmluZyB0aGUKK21lcmdlIHdpbmRvdyBkbyBub3QgY29tZSBvdXQgb2YgdGhpbiBhaXI7IHRoZXkgaGF2ZSBiZWVuIGNvbGxlY3RlZCwgdGVzdGVkLAorYW5kIHN0YWdlZCBhaGVhZCBvZiB0aW1lLiAgSG93IHRoYXQgcHJvY2VzcyB3b3JrcyB3aWxsIGJlIGRlc2NyaWJlZCBpbgorZGV0YWlsIGxhdGVyIG9uKS4KKworVGhlIG1lcmdlIHdpbmRvdyBsYXN0cyBmb3IgdHdvIHdlZWtzLiAgQXQgdGhlIGVuZCBvZiB0aGlzIHRpbWUsIExpbnVzCitUb3J2YWxkcyB3aWxsIGRlY2xhcmUgdGhhdCB0aGUgd2luZG93IGlzIGNsb3NlZCBhbmQgcmVsZWFzZSB0aGUgZmlyc3Qgb2YKK3RoZSAicmMiIGtlcm5lbHMuICBGb3IgdGhlIGtlcm5lbCB3aGljaCBpcyBkZXN0aW5lZCB0byBiZSAyLjYuMjYsIGZvcgorZXhhbXBsZSwgdGhlIHJlbGVhc2Ugd2hpY2ggaGFwcGVucyBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSB3aW5kb3cgd2lsbCBiZQorY2FsbGVkIDIuNi4yNi1yYzEuICBUaGUgLXJjMSByZWxlYXNlIGlzIHRoZSBzaWduYWwgdGhhdCB0aGUgdGltZSB0byBtZXJnZQorbmV3IGZlYXR1cmVzIGhhcyBwYXNzZWQsIGFuZCB0aGF0IHRoZSB0aW1lIHRvIHN0YWJpbGl6ZSB0aGUgbmV4dCBrZXJuZWwgaGFzCitiZWd1bi4KKworT3ZlciB0aGUgbmV4dCBzaXggdG8gdGVuIHdlZWtzLCBvbmx5IHBhdGNoZXMgd2hpY2ggZml4IHByb2JsZW1zIHNob3VsZCBiZQorc3VibWl0dGVkIHRvIHRoZSBtYWlubGluZS4gIE9uIG9jY2FzaW9uIGEgbW9yZSBzaWduaWZpY2FudCBjaGFuZ2Ugd2lsbCBiZQorYWxsb3dlZCwgYnV0IHN1Y2ggb2NjYXNpb25zIGFyZSByYXJlOyBkZXZlbG9wZXJzIHdobyB0cnkgdG8gbWVyZ2UgbmV3CitmZWF0dXJlcyBvdXRzaWRlIG9mIHRoZSBtZXJnZSB3aW5kb3cgdGVuZCB0byBnZXQgYW4gdW5mcmllbmRseSByZWNlcHRpb24uCitBcyBhIGdlbmVyYWwgcnVsZSwgaWYgeW91IG1pc3MgdGhlIG1lcmdlIHdpbmRvdyBmb3IgYSBnaXZlbiBmZWF0dXJlLCB0aGUKK2Jlc3QgdGhpbmcgdG8gZG8gaXMgdG8gd2FpdCBmb3IgdGhlIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUuICAoQW4gb2NjYXNpb25hbAorZXhjZXB0aW9uIGlzIG1hZGUgZm9yIGRyaXZlcnMgZm9yIHByZXZpb3VzbHktdW5zdXBwb3J0ZWQgaGFyZHdhcmU7IGlmIHRoZXkKK3RvdWNoIG5vIGluLXRyZWUgY29kZSwgdGhleSBjYW5ub3QgY2F1c2UgcmVncmVzc2lvbnMgYW5kIHNob3VsZCBiZSBzYWZlIHRvCithZGQgYXQgYW55IHRpbWUpLgorCitBcyBmaXhlcyBtYWtlIHRoZWlyIHdheSBpbnRvIHRoZSBtYWlubGluZSwgdGhlIHBhdGNoIHJhdGUgd2lsbCBzbG93IG92ZXIKK3RpbWUuICBMaW51cyByZWxlYXNlcyBuZXcgLXJjIGtlcm5lbHMgYWJvdXQgb25jZSBhIHdlZWs7IGEgbm9ybWFsIHNlcmllcword2lsbCBnZXQgdXAgdG8gc29tZXdoZXJlIGJldHdlZW4gLXJjNiBhbmQgLXJjOSBiZWZvcmUgdGhlIGtlcm5lbCBpcworY29uc2lkZXJlZCB0byBiZSBzdWZmaWNpZW50bHkgc3RhYmxlIGFuZCB0aGUgZmluYWwgMi42LnggcmVsZWFzZSBpcyBtYWRlLgorQXQgdGhhdCBwb2ludCB0aGUgd2hvbGUgcHJvY2VzcyBzdGFydHMgb3ZlciBhZ2Fpbi4KKworQXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBob3cgdGhlIDIuNi4yNSBkZXZlbG9wbWVudCBjeWNsZSB3ZW50IChhbGwgZGF0ZXMgaW4KKzIwMDgpOiAKKworCUphbnVhcnkgMjQJMi42LjI0IHN0YWJsZSByZWxlYXNlCisJRmVicnVhcnkgMTAJMi42LjI1LXJjMSwgbWVyZ2Ugd2luZG93IGNsb3NlcworCUZlYnJ1YXJ5IDE1CTIuNi4yNS1yYzIKKwlGZWJydWFyeSAyNAkyLjYuMjUtcmMzCisJTWFyY2ggNAkgCTIuNi4yNS1yYzQKKwlNYXJjaCA5CQkyLjYuMjUtcmM1CisJTWFyY2ggMTYJMi42LjI1LXJjNgorCU1hcmNoIDI1CTIuNi4yNS1yYzcKKwlBcHJpbCAxCQkyLjYuMjUtcmM4CisJQXByaWwgMTEJMi42LjI1LXJjOQorCUFwcmlsIDE2CTIuNi4yNSBzdGFibGUgcmVsZWFzZQorCitIb3cgZG8gdGhlIGRldmVsb3BlcnMgZGVjaWRlIHdoZW4gdG8gY2xvc2UgdGhlIGRldmVsb3BtZW50IGN5Y2xlIGFuZCBjcmVhdGUKK3RoZSBzdGFibGUgcmVsZWFzZT8gIFRoZSBtb3N0IHNpZ25pZmljYW50IG1ldHJpYyB1c2VkIGlzIHRoZSBsaXN0IG9mCityZWdyZXNzaW9ucyBmcm9tIHByZXZpb3VzIHJlbGVhc2VzLiAgTm8gYnVncyBhcmUgd2VsY29tZSwgYnV0IHRob3NlIHdoaWNoCiticmVhayBzeXN0ZW1zIHdoaWNoIHdvcmtlZCBpbiB0aGUgcGFzdCBhcmUgY29uc2lkZXJlZCB0byBiZSBlc3BlY2lhbGx5CitzZXJpb3VzLiAgRm9yIHRoaXMgcmVhc29uLCBwYXRjaGVzIHdoaWNoIGNhdXNlIHJlZ3Jlc3Npb25zIGFyZSBsb29rZWQgdXBvbgordW5mYXZvcmFibHkgYW5kIGFyZSBxdWl0ZSBsaWtlbHkgdG8gYmUgcmV2ZXJ0ZWQgZHVyaW5nIHRoZSBzdGFiaWxpemF0aW9uCitwZXJpb2QuIAorCitUaGUgZGV2ZWxvcGVycycgZ29hbCBpcyB0byBmaXggYWxsIGtub3duIHJlZ3Jlc3Npb25zIGJlZm9yZSB0aGUgc3RhYmxlCityZWxlYXNlIGlzIG1hZGUuICBJbiB0aGUgcmVhbCB3b3JsZCwgdGhpcyBraW5kIG9mIHBlcmZlY3Rpb24gaXMgaGFyZCB0bworYWNoaWV2ZTsgdGhlcmUgYXJlIGp1c3QgdG9vIG1hbnkgdmFyaWFibGVzIGluIGEgcHJvamVjdCBvZiB0aGlzIHNpemUuCitUaGVyZSBjb21lcyBhIHBvaW50IHdoZXJlIGRlbGF5aW5nIHRoZSBmaW5hbCByZWxlYXNlIGp1c3QgbWFrZXMgdGhlIHByb2JsZW0KK3dvcnNlOyB0aGUgcGlsZSBvZiBjaGFuZ2VzIHdhaXRpbmcgZm9yIHRoZSBuZXh0IG1lcmdlIHdpbmRvdyB3aWxsIGdyb3cKK2xhcmdlciwgY3JlYXRpbmcgZXZlbiBtb3JlIHJlZ3Jlc3Npb25zIHRoZSBuZXh0IHRpbWUgYXJvdW5kLiAgU28gbW9zdCAyLjYueAora2VybmVscyBnbyBvdXQgd2l0aCBhIGhhbmRmdWwgb2Yga25vd24gcmVncmVzc2lvbnMgdGhvdWdoLCBob3BlZnVsbHksIG5vbmUKK29mIHRoZW0gYXJlIHNlcmlvdXMuCisKK09uY2UgYSBzdGFibGUgcmVsZWFzZSBpcyBtYWRlLCBpdHMgb25nb2luZyBtYWludGVuYW5jZSBpcyBwYXNzZWQgb2ZmIHRvIHRoZQorInN0YWJsZSB0ZWFtLCIgY3VycmVudGx5IGNvbXByaXNlZCBvZiBHcmVnIEtyb2FoLUhhcnRtYW4gYW5kIENocmlzIFdyaWdodC4KK1RoZSBzdGFibGUgdGVhbSB3aWxsIHJlbGVhc2Ugb2NjYXNpb25hbCB1cGRhdGVzIHRvIHRoZSBzdGFibGUgcmVsZWFzZSB1c2luZwordGhlIDIuNi54LnkgbnVtYmVyaW5nIHNjaGVtZS4gIFRvIGJlIGNvbnNpZGVyZWQgZm9yIGFuIHVwZGF0ZSByZWxlYXNlLCBhCitwYXRjaCBtdXN0ICgxKSBmaXggYSBzaWduaWZpY2FudCBidWcsIGFuZCAoMikgYWxyZWFkeSBiZSBtZXJnZWQgaW50byB0aGUKK21haW5saW5lIGZvciB0aGUgbmV4dCBkZXZlbG9wbWVudCBrZXJuZWwuICBDb250aW51aW5nIG91ciAyLjYuMjUgZXhhbXBsZSwKK3RoZSBoaXN0b3J5IChhcyBvZiB0aGlzIHdyaXRpbmcpIGlzOgorCisJTWF5IDEJCTIuNi4yNS4xCisJTWF5IDYJCTIuNi4yNS4yIAorCU1heSA5CQkyLjYuMjUuMyAKKwlNYXkgMTUJCTIuNi4yNS40CisJSnVuZSA3CQkyLjYuMjUuNQorCUp1bmUgOQkJMi42LjI1LjYKKwlKdW5lIDE2CQkyLjYuMjUuNworCUp1bmUgMjEJCTIuNi4yNS44CisJSnVuZSAyNAkJMi42LjI1LjkKKworU3RhYmxlIHVwZGF0ZXMgZm9yIGEgZ2l2ZW4ga2VybmVsIGFyZSBtYWRlIGZvciBhcHByb3hpbWF0ZWx5IHNpeCBtb250aHM7CithZnRlciB0aGF0LCB0aGUgbWFpbnRlbmFuY2Ugb2Ygc3RhYmxlIHJlbGVhc2VzIGlzIHNvbGVseSB0aGUgcmVzcG9uc2liaWxpdHkKK29mIHRoZSBkaXN0cmlidXRvcnMgd2hpY2ggaGF2ZSBzaGlwcGVkIHRoYXQgcGFydGljdWxhciBrZXJuZWwuCisKKworMi4yOiBUSEUgTElGRUNZQ0xFIE9GIEEgUEFUQ0gKKworUGF0Y2hlcyBkbyBub3QgZ28gZGlyZWN0bHkgZnJvbSB0aGUgZGV2ZWxvcGVyJ3Mga2V5Ym9hcmQgaW50byB0aGUgbWFpbmxpbmUKK2tlcm5lbC4gIFRoZXJlIGlzLCBpbnN0ZWFkLCBhIHNvbWV3aGF0IGludm9sdmVkIChpZiBzb21ld2hhdCBpbmZvcm1hbCkKK3Byb2Nlc3MgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgZWFjaCBwYXRjaCBpcyByZXZpZXdlZCBmb3IgcXVhbGl0eSBhbmQgdGhhdAorZWFjaCBwYXRjaCBpbXBsZW1lbnRzIGEgY2hhbmdlIHdoaWNoIGlzIGRlc2lyYWJsZSB0byBoYXZlIGluIHRoZSBtYWlubGluZS4KK1RoaXMgcHJvY2VzcyBjYW4gaGFwcGVuIHF1aWNrbHkgZm9yIG1pbm9yIGZpeGVzLCBvciwgaW4gdGhlIGNhc2Ugb2YgbGFyZ2UKK2FuZCBjb250cm92ZXJzaWFsIGNoYW5nZXMsIGdvIG9uIGZvciB5ZWFycy4gIE11Y2ggZGV2ZWxvcGVyIGZydXN0cmF0aW9uCitjb21lcyBmcm9tIGEgbGFjayBvZiB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcHJvY2VzcyBvciBmcm9tIGF0dGVtcHRzIHRvCitjaXJjdW12ZW50IGl0LiAgCisKK0luIHRoZSBob3BlcyBvZiByZWR1Y2luZyB0aGF0IGZydXN0cmF0aW9uLCB0aGlzIGRvY3VtZW50IHdpbGwgZGVzY3JpYmUgaG93CithIHBhdGNoIGdldHMgaW50byB0aGUga2VybmVsLiAgV2hhdCBmb2xsb3dzIGJlbG93IGlzIGFuIGludHJvZHVjdGlvbiB3aGljaAorZGVzY3JpYmVzIHRoZSBwcm9jZXNzIGluIGEgc29tZXdoYXQgaWRlYWxpemVkIHdheS4gIEEgbXVjaCBtb3JlIGRldGFpbGVkCit0cmVhdG1lbnQgd2lsbCBjb21lIGluIGxhdGVyIHNlY3Rpb25zLgorCitUaGUgc3RhZ2VzIHRoYXQgYSBwYXRjaCBnb2VzIHRocm91Z2ggYXJlLCBnZW5lcmFsbHk6CisKKyAtIERlc2lnbi4gIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgcmVxdWlyZW1lbnRzIGZvciB0aGUgcGF0Y2ggLSBhbmQgdGhlIHdheQorICAgdGhvc2UgcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0IC0gYXJlIGxhaWQgb3V0LiAgRGVzaWduIHdvcmsgaXMgb2Z0ZW4KKyAgIGRvbmUgd2l0aG91dCBpbnZvbHZpbmcgdGhlIGNvbW11bml0eSwgYnV0IGl0IGlzIGJldHRlciB0byBkbyB0aGlzIHdvcmsKKyAgIGluIHRoZSBvcGVuIGlmIGF0IGFsbCBwb3NzaWJsZTsgaXQgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSByZWRlc2lnbmluZworICAgdGhpbmdzIGxhdGVyLgorCisgLSBFYXJseSByZXZpZXcuICBQYXRjaGVzIGFyZSBwb3N0ZWQgdG8gdGhlIHJlbGV2YW50IG1haWxpbmcgbGlzdCwgYW5kCisgICBkZXZlbG9wZXJzIG9uIHRoYXQgbGlzdCByZXBseSB3aXRoIGFueSBjb21tZW50cyB0aGV5IG1heSBoYXZlLiAgVGhpcworICAgcHJvY2VzcyBzaG91bGQgdHVybiB1cCBhbnkgbWFqb3IgcHJvYmxlbXMgd2l0aCBhIHBhdGNoIGlmIGFsbCBnb2VzCisgICB3ZWxsLgorCisgLSBXaWRlciByZXZpZXcuICBXaGVuIHRoZSBwYXRjaCBpcyBnZXR0aW5nIGNsb3NlIHRvIHJlYWR5IGZvciBtYWlubGluZQorICAgaW5jbHVzaW9uLCBpdCB3aWxsIGJlIGFjY2VwdGVkIGJ5IGEgcmVsZXZhbnQgc3Vic3lzdGVtIG1haW50YWluZXIgLQorICAgdGhvdWdoIHRoaXMgYWNjZXB0YW5jZSBpcyBub3QgYSBndWFyYW50ZWUgdGhhdCB0aGUgcGF0Y2ggd2lsbCBtYWtlIGl0CisgICBhbGwgdGhlIHdheSB0byB0aGUgbWFpbmxpbmUuICBUaGUgcGF0Y2ggd2lsbCBzaG93IHVwIGluIHRoZSBtYWludGFpbmVyJ3MKKyAgIHN1YnN5c3RlbSB0cmVlIGFuZCBpbnRvIHRoZSBzdGFnaW5nIHRyZWVzIChkZXNjcmliZWQgYmVsb3cpLiAgV2hlbiB0aGUKKyAgIHByb2Nlc3Mgd29ya3MsIHRoaXMgc3RlcCBsZWFkcyB0byBtb3JlIGV4dGVuc2l2ZSByZXZpZXcgb2YgdGhlIHBhdGNoIGFuZAorICAgdGhlIGRpc2NvdmVyeSBvZiBhbnkgcHJvYmxlbXMgcmVzdWx0aW5nIGZyb20gdGhlIGludGVncmF0aW9uIG9mIHRoaXMKKyAgIHBhdGNoIHdpdGggd29yayBiZWluZyBkb25lIGJ5IG90aGVycy4KKworIC0gTWVyZ2luZyBpbnRvIHRoZSBtYWlubGluZS4gIEV2ZW50dWFsbHksIGEgc3VjY2Vzc2Z1bCBwYXRjaCB3aWxsIGJlCisgICBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUgcmVwb3NpdG9yeSBtYW5hZ2VkIGJ5IExpbnVzIFRvcnZhbGRzLiAgTW9yZQorICAgY29tbWVudHMgYW5kL29yIHByb2JsZW1zIG1heSBzdXJmYWNlIGF0IHRoaXMgdGltZTsgaXQgaXMgaW1wb3J0YW50IHRoYXQKKyAgIHRoZSBkZXZlbG9wZXIgYmUgcmVzcG9uc2l2ZSB0byB0aGVzZSBhbmQgZml4IGFueSBpc3N1ZXMgd2hpY2ggYXJpc2UuCisKKyAtIFN0YWJsZSByZWxlYXNlLiAgVGhlIG51bWJlciBvZiB1c2VycyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSB0aGUgcGF0Y2gKKyAgIGlzIG5vdyBsYXJnZSwgc28sIG9uY2UgYWdhaW4sIG5ldyBwcm9ibGVtcyBtYXkgYXJpc2UuCisKKyAtIExvbmctdGVybSBtYWludGVuYW5jZS4gIFdoaWxlIGl0IGlzIGNlcnRhaW5seSBwb3NzaWJsZSBmb3IgYSBkZXZlbG9wZXIKKyAgIHRvIGZvcmdldCBhYm91dCBjb2RlIGFmdGVyIG1lcmdpbmcgaXQsIHRoYXQgc29ydCBvZiBiZWhhdmlvciB0ZW5kcyB0bworICAgbGVhdmUgYSBwb29yIGltcHJlc3Npb24gaW4gdGhlIGRldmVsb3BtZW50IGNvbW11bml0eS4gIE1lcmdpbmcgY29kZQorICAgZWxpbWluYXRlcyBzb21lIG9mIHRoZSBtYWludGVuYW5jZSBidXJkZW4sIGluIHRoYXQgb3RoZXJzIHdpbGwgZml4CisgICBwcm9ibGVtcyBjYXVzZWQgYnkgQVBJIGNoYW5nZXMuICBCdXQgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBzaG91bGQKKyAgIGNvbnRpbnVlIHRvIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBjb2RlIGlmIGl0IGlzIHRvIHJlbWFpbiB1c2VmdWwKKyAgIGluIHRoZSBsb25nZXIgdGVybS4KKworT25lIG9mIHRoZSBsYXJnZXN0IG1pc3Rha2VzIG1hZGUgYnkga2VybmVsIGRldmVsb3BlcnMgKG9yIHRoZWlyIGVtcGxveWVycykKK2lzIHRvIHRyeSB0byBjdXQgdGhlIHByb2Nlc3MgZG93biB0byBhIHNpbmdsZSAibWVyZ2luZyBpbnRvIHRoZSBtYWlubGluZSIKK3N0ZXAuICBUaGlzIGFwcHJvYWNoIGludmFyaWFibHkgbGVhZHMgdG8gZnJ1c3RyYXRpb24gZm9yIGV2ZXJ5Ym9keQoraW52b2x2ZWQuCisKKworMi4zOiBIT1cgUEFUQ0hFUyBHRVQgSU5UTyBUSEUgS0VSTkVMCisKK1RoZXJlIGlzIGV4YWN0bHkgb25lIHBlcnNvbiB3aG8gY2FuIG1lcmdlIHBhdGNoZXMgaW50byB0aGUgbWFpbmxpbmUga2VybmVsCityZXBvc2l0b3J5OiBMaW51cyBUb3J2YWxkcy4gIEJ1dCwgb2YgdGhlIG92ZXIgMTIsMDAwIHBhdGNoZXMgd2hpY2ggd2VudAoraW50byB0aGUgMi42LjI1IGtlcm5lbCwgb25seSAyNTAgKGFyb3VuZCAyJSkgd2VyZSBkaXJlY3RseSBjaG9zZW4gYnkgTGludXMKK2hpbXNlbGYuICBUaGUga2VybmVsIHByb2plY3QgaGFzIGxvbmcgc2luY2UgZ3Jvd24gdG8gYSBzaXplIHdoZXJlIG5vIHNpbmdsZQorZGV2ZWxvcGVyIGNvdWxkIHBvc3NpYmx5IGluc3BlY3QgYW5kIHNlbGVjdCBldmVyeSBwYXRjaCB1bmFzc2lzdGVkLiAgVGhlCit3YXkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgYWRkcmVzc2VkIHRoaXMgZ3Jvd3RoIGlzIHRocm91Z2ggdGhlIHVzZSBvZgorYSBsaWV1dGVuYW50IHN5c3RlbSBidWlsdCBhcm91bmQgYSBjaGFpbiBvZiB0cnVzdC4KKworVGhlIGtlcm5lbCBjb2RlIGJhc2UgaXMgbG9naWNhbGx5IGJyb2tlbiBkb3duIGludG8gYSBzZXQgb2Ygc3Vic3lzdGVtczoKK25ldHdvcmtpbmcsIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBzdXBwb3J0LCBtZW1vcnkgbWFuYWdlbWVudCwgdmlkZW8KK2RldmljZXMsIGV0Yy4gIE1vc3Qgc3Vic3lzdGVtcyBoYXZlIGEgZGVzaWduYXRlZCBtYWludGFpbmVyLCBhIGRldmVsb3Blcgord2hvIGhhcyBvdmVyYWxsIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgY29kZSB3aXRoaW4gdGhhdCBzdWJzeXN0ZW0uICBUaGVzZQorc3Vic3lzdGVtIG1haW50YWluZXJzIGFyZSB0aGUgZ2F0ZWtlZXBlcnMgKGluIGEgbG9vc2Ugd2F5KSBmb3IgdGhlIHBvcnRpb24KK29mIHRoZSBrZXJuZWwgdGhleSBtYW5hZ2U7IHRoZXkgYXJlIHRoZSBvbmVzIHdobyB3aWxsICh1c3VhbGx5KSBhY2NlcHQgYQorcGF0Y2ggZm9yIGluY2x1c2lvbiBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCisKK1N1YnN5c3RlbSBtYWludGFpbmVycyBlYWNoIG1hbmFnZSB0aGVpciBvd24gdmVyc2lvbiBvZiB0aGUga2VybmVsIHNvdXJjZQordHJlZSwgdXN1YWxseSAoYnV0IGNlcnRhaW5seSBub3QgYWx3YXlzKSB1c2luZyB0aGUgZ2l0IHNvdXJjZSBtYW5hZ2VtZW50Cit0b29sLiAgVG9vbHMgbGlrZSBnaXQgKGFuZCByZWxhdGVkIHRvb2xzIGxpa2UgcXVpbHQgb3IgbWVyY3VyaWFsKSBhbGxvdworbWFpbnRhaW5lcnMgdG8gdHJhY2sgYSBsaXN0IG9mIHBhdGNoZXMsIGluY2x1ZGluZyBhdXRob3JzaGlwIGluZm9ybWF0aW9uCithbmQgb3RoZXIgbWV0YWRhdGEuICBBdCBhbnkgZ2l2ZW4gdGltZSwgdGhlIG1haW50YWluZXIgY2FuIGlkZW50aWZ5IHdoaWNoCitwYXRjaGVzIGluIGhpcyBvciBoZXIgcmVwb3NpdG9yeSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWlubGluZS4KKworV2hlbiB0aGUgbWVyZ2Ugd2luZG93IG9wZW5zLCB0b3AtbGV2ZWwgbWFpbnRhaW5lcnMgd2lsbCBhc2sgTGludXMgdG8gInB1bGwiCit0aGUgcGF0Y2hlcyB0aGV5IGhhdmUgc2VsZWN0ZWQgZm9yIG1lcmdpbmcgZnJvbSB0aGVpciByZXBvc2l0b3JpZXMuICBJZgorTGludXMgYWdyZWVzLCB0aGUgc3RyZWFtIG9mIHBhdGNoZXMgd2lsbCBmbG93IHVwIGludG8gaGlzIHJlcG9zaXRvcnksCitiZWNvbWluZyBwYXJ0IG9mIHRoZSBtYWlubGluZSBrZXJuZWwuICBUaGUgYW1vdW50IG9mIGF0dGVudGlvbiB0aGF0IExpbnVzCitwYXlzIHRvIHNwZWNpZmljIHBhdGNoZXMgcmVjZWl2ZWQgaW4gYSBwdWxsIG9wZXJhdGlvbiB2YXJpZXMuICBJdCBpcyBjbGVhcgordGhhdCwgc29tZXRpbWVzLCBoZSBsb29rcyBxdWl0ZSBjbG9zZWx5LiAgQnV0LCBhcyBhIGdlbmVyYWwgcnVsZSwgTGludXMKK3RydXN0cyB0aGUgc3Vic3lzdGVtIG1haW50YWluZXJzIHRvIG5vdCBzZW5kIGJhZCBwYXRjaGVzIHVwc3RyZWFtLgorCitTdWJzeXN0ZW0gbWFpbnRhaW5lcnMsIGluIHR1cm4sIGNhbiBwdWxsIHBhdGNoZXMgZnJvbSBvdGhlciBtYWludGFpbmVycy4KK0ZvciBleGFtcGxlLCB0aGUgbmV0d29ya2luZyB0cmVlIGlzIGJ1aWx0IGZyb20gcGF0Y2hlcyB3aGljaCBhY2N1bXVsYXRlZAorZmlyc3QgaW4gdHJlZXMgZGVkaWNhdGVkIHRvIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMsIHdpcmVsZXNzIG5ldHdvcmtpbmcsCitldGMuICBUaGlzIGNoYWluIG9mIHJlcG9zaXRvcmllcyBjYW4gYmUgYXJiaXRyYXJpbHkgbG9uZywgdGhvdWdoIGl0IHJhcmVseQorZXhjZWVkcyB0d28gb3IgdGhyZWUgbGlua3MuICBTaW5jZSBlYWNoIG1haW50YWluZXIgaW4gdGhlIGNoYWluIHRydXN0cwordGhvc2UgbWFuYWdpbmcgbG93ZXItbGV2ZWwgdHJlZXMsIHRoaXMgcHJvY2VzcyBpcyBrbm93biBhcyB0aGUgImNoYWluIG9mCit0cnVzdC4iIAorCitDbGVhcmx5LCBpbiBhIHN5c3RlbSBsaWtlIHRoaXMsIGdldHRpbmcgcGF0Y2hlcyBpbnRvIHRoZSBrZXJuZWwgZGVwZW5kcyBvbgorZmluZGluZyB0aGUgcmlnaHQgbWFpbnRhaW5lci4gIFNlbmRpbmcgcGF0Y2hlcyBkaXJlY3RseSB0byBMaW51cyBpcyBub3QKK25vcm1hbGx5IHRoZSByaWdodCB3YXkgdG8gZ28uCisKKworMi40OiBTVEFHSU5HIFRSRUVTCisKK1RoZSBjaGFpbiBvZiBzdWJzeXN0ZW0gdHJlZXMgZ3VpZGVzIHRoZSBmbG93IG9mIHBhdGNoZXMgaW50byB0aGUga2VybmVsLAorYnV0IGl0IGFsc28gcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiB3aGF0IGlmIHNvbWVib2R5IHdhbnRzIHRvIGxvb2sKK2F0IGFsbCBvZiB0aGUgcGF0Y2hlcyB3aGljaCBhcmUgYmVpbmcgcHJlcGFyZWQgZm9yIHRoZSBuZXh0IG1lcmdlIHdpbmRvdz8KK0RldmVsb3BlcnMgd2lsbCBiZSBpbnRlcmVzdGVkIGluIHdoYXQgb3RoZXIgY2hhbmdlcyBhcmUgcGVuZGluZyB0byBzZWUKK3doZXRoZXIgdGhlcmUgYXJlIGFueSBjb25mbGljdHMgdG8gd29ycnkgYWJvdXQ7IGEgcGF0Y2ggd2hpY2ggY2hhbmdlcyBhCitjb3JlIGtlcm5lbCBmdW5jdGlvbiBwcm90b3R5cGUsIGZvciBleGFtcGxlLCB3aWxsIGNvbmZsaWN0IHdpdGggYW55IG90aGVyCitwYXRjaGVzIHdoaWNoIHVzZSB0aGUgb2xkZXIgZm9ybSBvZiB0aGF0IGZ1bmN0aW9uLiAgUmV2aWV3ZXJzIGFuZCB0ZXN0ZXJzCit3YW50IGFjY2VzcyB0byB0aGUgY2hhbmdlcyBpbiB0aGVpciBpbnRlZ3JhdGVkIGZvcm0gYmVmb3JlIGFsbCBvZiB0aG9zZQorY2hhbmdlcyBsYW5kIGluIHRoZSBtYWlubGluZSBrZXJuZWwuICBPbmUgY291bGQgcHVsbCBjaGFuZ2VzIGZyb20gYWxsIG9mCit0aGUgaW50ZXJlc3Rpbmcgc3Vic3lzdGVtIHRyZWVzLCBidXQgdGhhdCB3b3VsZCBiZSBhIGJpZyBhbmQgZXJyb3ItcHJvbmUKK2pvYi4KKworVGhlIGFuc3dlciBjb21lcyBpbiB0aGUgZm9ybSBvZiBzdGFnaW5nIHRyZWVzLCB3aGVyZSBzdWJzeXN0ZW0gdHJlZXMgYXJlCitjb2xsZWN0ZWQgZm9yIHRlc3RpbmcgYW5kIHJldmlldy4gIFRoZSBvbGRlciBvZiB0aGVzZSB0cmVlcywgbWFpbnRhaW5lZCBieQorQW5kcmV3IE1vcnRvbiwgaXMgY2FsbGVkICItbW0iIChmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIGhvdyBpdCBnb3QKK3N0YXJ0ZWQpLiAgVGhlIC1tbSB0cmVlIGludGVncmF0ZXMgcGF0Y2hlcyBmcm9tIGEgbG9uZyBsaXN0IG9mIHN1YnN5c3RlbQordHJlZXM7IGl0IGFsc28gaGFzIHNvbWUgcGF0Y2hlcyBhaW1lZCBhdCBoZWxwaW5nIHdpdGggZGVidWdnaW5nLiAgCisKK0JleW9uZCB0aGF0LCAtbW0gY29udGFpbnMgYSBzaWduaWZpY2FudCBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgd2hpY2ggaGF2ZQorYmVlbiBzZWxlY3RlZCBieSBBbmRyZXcgZGlyZWN0bHkuICBUaGVzZSBwYXRjaGVzIG1heSBoYXZlIGJlZW4gcG9zdGVkIG9uIGEKK21haWxpbmcgbGlzdCwgb3IgdGhleSBtYXkgYXBwbHkgdG8gYSBwYXJ0IG9mIHRoZSBrZXJuZWwgZm9yIHdoaWNoIHRoZXJlIGlzCitubyBkZXNpZ25hdGVkIHN1YnN5c3RlbSB0cmVlLiAgQXMgYSByZXN1bHQsIC1tbSBvcGVyYXRlcyBhcyBhIHNvcnQgb2YKK3N1YnN5c3RlbSB0cmVlIG9mIGxhc3QgcmVzb3J0OyBpZiB0aGVyZSBpcyBubyBvdGhlciBvYnZpb3VzIHBhdGggZm9yIGEKK3BhdGNoIGludG8gdGhlIG1haW5saW5lLCBpdCBpcyBsaWtlbHkgdG8gZW5kIHVwIGluIC1tbS4gIE1pc2NlbGxhbmVvdXMKK3BhdGNoZXMgd2hpY2ggYWNjdW11bGF0ZSBpbiAtbW0gd2lsbCBldmVudHVhbGx5IGVpdGhlciBiZSBmb3J3YXJkZWQgb24gdG8KK2FuIGFwcHJvcHJpYXRlIHN1YnN5c3RlbSB0cmVlIG9yIGJlIHNlbnQgZGlyZWN0bHkgdG8gTGludXMuICBJbiBhIHR5cGljYWwKK2RldmVsb3BtZW50IGN5Y2xlLCBhcHByb3hpbWF0ZWx5IDEwJSBvZiB0aGUgcGF0Y2hlcyBnb2luZyBpbnRvIHRoZSBtYWlubGluZQorZ2V0IHRoZXJlIHZpYSAtbW0uCisKK1RoZSBjdXJyZW50IC1tbSBwYXRjaCBjYW4gYWx3YXlzIGJlIGZvdW5kIGZyb20gdGhlIGZyb250IHBhZ2Ugb2YKKworCWh0dHA6Ly9rZXJuZWwub3JnLworCitUaG9zZSB3aG8gd2FudCB0byBzZWUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgLW1tIGNhbiBnZXQgdGhlICItbW0gb2YgdGhlCittb21lbnQiIHRyZWUsIGZvdW5kIGF0OgorCisJaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9tbW90bS8KKworVXNlIG9mIHRoZSBNTU9UTSB0cmVlIGlzIGxpa2VseSB0byBiZSBhIGZydXN0cmF0aW5nIGV4cGVyaWVuY2UsIHRob3VnaDsKK3RoZXJlIGlzIGEgZGVmaW5pdGUgY2hhbmNlIHRoYXQgaXQgd2lsbCBub3QgZXZlbiBjb21waWxlLgorCitUaGUgb3RoZXIgc3RhZ2luZyB0cmVlLCBzdGFydGVkIG1vcmUgcmVjZW50bHksIGlzIGxpbnV4LW5leHQsIG1haW50YWluZWQgYnkKK1N0ZXBoZW4gUm90aHdlbGwuICBUaGUgbGludXgtbmV4dCB0cmVlIGlzLCBieSBkZXNpZ24sIGEgc25hcHNob3Qgb2Ygd2hhdAordGhlIG1haW5saW5lIGlzIGV4cGVjdGVkIHRvIGxvb2sgbGlrZSBhZnRlciB0aGUgbmV4dCBtZXJnZSB3aW5kb3cgY2xvc2VzLgorTGludXgtbmV4dCB0cmVlcyBhcmUgYW5ub3VuY2VkIG9uIHRoZSBsaW51eC1rZXJuZWwgYW5kIGxpbnV4LW5leHQgbWFpbGluZworbGlzdHMgd2hlbiB0aGV5IGFyZSBhc3NlbWJsZWQ7IHRoZXkgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9zZnIvbGludXgtbmV4dC8KKworU29tZSBpbmZvcm1hdGlvbiBhYm91dCBsaW51eC1uZXh0IGhhcyBiZWVuIGdhdGhlcmVkIGF0OgorCisJaHR0cDovL2xpbnV4LmYtc2VpZGVsLmRlL2xpbnV4LW5leHQvcG13aWtpLworCitIb3cgdGhlIGxpbnV4LW5leHQgdHJlZSB3aWxsIGZpdCBpbnRvIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGlzIHN0aWxsCitjaGFuZ2luZy4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlIGZpcnN0IGZ1bGwgZGV2ZWxvcG1lbnQgY3ljbGUgaW52b2x2aW5nCitsaW51eC1uZXh0ICgyLjYuMjYpIGlzIGNvbWluZyB0byBhbiBlbmQ7IHRodXMgZmFyLCBpdCBoYXMgcHJvdmVkIHRvIGJlIGEKK3ZhbHVhYmxlIHJlc291cmNlIGZvciBmaW5kaW5nIGFuZCBmaXhpbmcgaW50ZWdyYXRpb24gcHJvYmxlbXMgYmVmb3JlIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBtZXJnZSB3aW5kb3cuICBTZWUgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjg3MTU1LyBmb3IKK21vcmUgaW5mb3JtYXRpb24gb24gaG93IGxpbnV4LW5leHQgaGFzIHdvcmtlZCB0byBzZXQgdXAgdGhlIDIuNi4yNyBtZXJnZQord2luZG93LgorCitTb21lIGRldmVsb3BlcnMgaGF2ZSBiZWd1biB0byBzdWdnZXN0IHRoYXQgbGludXgtbmV4dCBzaG91bGQgYmUgdXNlZCBhcyB0aGUKK3RhcmdldCBmb3IgZnV0dXJlIGRldmVsb3BtZW50IGFzIHdlbGwuICBUaGUgbGludXgtbmV4dCB0cmVlIGRvZXMgdGVuZCB0byBiZQorZmFyIGFoZWFkIG9mIHRoZSBtYWlubGluZSBhbmQgaXMgbW9yZSByZXByZXNlbnRhdGl2ZSBvZiB0aGUgdHJlZSBpbnRvIHdoaWNoCithbnkgbmV3IHdvcmsgd2lsbCBiZSBtZXJnZWQuICBUaGUgZG93bnNpZGUgdG8gdGhpcyBpZGVhIGlzIHRoYXQgdGhlCit2b2xhdGlsaXR5IG9mIGxpbnV4LW5leHQgdGVuZHMgdG8gbWFrZSBpdCBhIGRpZmZpY3VsdCBkZXZlbG9wbWVudCB0YXJnZXQuCitTZWUgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjg5MDEzLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLCBhbmQKK3N0YXkgdHVuZWQ7IG11Y2ggaXMgc3RpbGwgaW4gZmx1eCB3aGVyZSBsaW51eC1uZXh0IGlzIGludm9sdmVkLgorCisKKzIuNTogVE9PTFMKKworQXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgYWJvdmUgdGV4dCwgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGRlcGVuZHMKK2hlYXZpbHkgb24gdGhlIGFiaWxpdHkgdG8gaGVyZCBjb2xsZWN0aW9ucyBvZiBwYXRjaGVzIGluIHZhcmlvdXMKK2RpcmVjdGlvbnMuICBUaGUgd2hvbGUgdGhpbmcgd291bGQgbm90IHdvcmsgYW55d2hlcmUgbmVhciBhcyB3ZWxsIGFzIGl0Citkb2VzIHdpdGhvdXQgc3VpdGFibHkgcG93ZXJmdWwgdG9vbHMuICBUdXRvcmlhbHMgb24gaG93IHRvIHVzZSB0aGVzZSB0b29scworYXJlIHdlbGwgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LCBidXQgdGhlcmUgaXMgc3BhY2UgZm9yIGEgZmV3Citwb2ludGVycy4KKworQnkgZmFyIHRoZSBkb21pbmFudCBzb3VyY2UgY29kZSBtYW5hZ2VtZW50IHN5c3RlbSB1c2VkIGJ5IHRoZSBrZXJuZWwKK2NvbW11bml0eSBpcyBnaXQuICBHaXQgaXMgb25lIG9mIGEgbnVtYmVyIG9mIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbAorc3lzdGVtcyBiZWluZyBkZXZlbG9wZWQgaW4gdGhlIGZyZWUgc29mdHdhcmUgY29tbXVuaXR5LiAgSXQgaXMgd2VsbCB0dW5lZAorZm9yIGtlcm5lbCBkZXZlbG9wbWVudCwgaW4gdGhhdCBpdCBwZXJmb3JtcyBxdWl0ZSB3ZWxsIHdoZW4gZGVhbGluZyB3aXRoCitsYXJnZSByZXBvc2l0b3JpZXMgYW5kIGxhcmdlIG51bWJlcnMgb2YgcGF0Y2hlcy4gIEl0IGFsc28gaGFzIGEgcmVwdXRhdGlvbgorZm9yIGJlaW5nIGRpZmZpY3VsdCB0byBsZWFybiBhbmQgdXNlLCB0aG91Z2ggaXQgaGFzIGdvdHRlbiBiZXR0ZXIgb3ZlcgordGltZS4gIFNvbWUgc29ydCBvZiBmYW1pbGlhcml0eSB3aXRoIGdpdCBpcyBhbG1vc3QgYSByZXF1aXJlbWVudCBmb3Iga2VybmVsCitkZXZlbG9wZXJzOyBldmVuIGlmIHRoZXkgZG8gbm90IHVzZSBpdCBmb3IgdGhlaXIgb3duIHdvcmssIHRoZXknbGwgbmVlZCBnaXQKK3RvIGtlZXAgdXAgd2l0aCB3aGF0IG90aGVyIGRldmVsb3BlcnMgKGFuZCB0aGUgbWFpbmxpbmUpIGFyZSBkb2luZy4KKworR2l0IGlzIG5vdyBwYWNrYWdlZCBieSBhbG1vc3QgYWxsIExpbnV4IGRpc3RyaWJ1dGlvbnMuICBUaGVyZSBpcyBhIGhvbWUKK3BhZ2UgYXQgCisKKwlodHRwOi8vZ2l0Lm9yLmN6LworCitUaGF0IHBhZ2UgaGFzIHBvaW50ZXJzIHRvIGRvY3VtZW50YXRpb24gYW5kIHR1dG9yaWFscy4gIE9uZSBzaG91bGQgYmUKK2F3YXJlLCBpbiBwYXJ0aWN1bGFyLCBvZiB0aGUgS2VybmVsIEhhY2tlcidzIEd1aWRlIHRvIGdpdCwgd2hpY2ggaGFzCitpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBrZXJuZWwgZGV2ZWxvcG1lbnQ6CisKKwlodHRwOi8vbGludXgueXl6LnVzL2dpdC1ob3d0by5odG1sCisKK0Ftb25nIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyB3aG8gZG8gbm90IHVzZSBnaXQsIHRoZSBtb3N0IHBvcHVsYXIgY2hvaWNlIGlzCithbG1vc3QgY2VydGFpbmx5IE1lcmN1cmlhbDoKKworCWh0dHA6Ly93d3cuc2VsZW5pYy5jb20vbWVyY3VyaWFsLworCitNZXJjdXJpYWwgc2hhcmVzIG1hbnkgZmVhdHVyZXMgd2l0aCBnaXQsIGJ1dCBpdCBwcm92aWRlcyBhbiBpbnRlcmZhY2Ugd2hpY2gKK21hbnkgZmluZCBlYXNpZXIgdG8gdXNlLgorCitUaGUgb3RoZXIgdG9vbCB3b3J0aCBrbm93aW5nIGFib3V0IGlzIFF1aWx0OgorCisJaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQvCisKK1F1aWx0IGlzIGEgcGF0Y2ggbWFuYWdlbWVudCBzeXN0ZW0sIHJhdGhlciB0aGFuIGEgc291cmNlIGNvZGUgbWFuYWdlbWVudAorc3lzdGVtLiAgSXQgZG9lcyBub3QgdHJhY2sgaGlzdG9yeSBvdmVyIHRpbWU7IGl0IGlzLCBpbnN0ZWFkLCBvcmllbnRlZAordG93YXJkIHRyYWNraW5nIGEgc3BlY2lmaWMgc2V0IG9mIGNoYW5nZXMgYWdhaW5zdCBhbiBldm9sdmluZyBjb2RlIGJhc2UuCitTb21lIG1ham9yIHN1YnN5c3RlbSBtYWludGFpbmVycyB1c2UgcXVpbHQgdG8gbWFuYWdlIHBhdGNoZXMgaW50ZW5kZWQgdG8gZ28KK3Vwc3RyZWFtLiAgRm9yIHRoZSBtYW5hZ2VtZW50IG9mIGNlcnRhaW4ga2luZHMgb2YgdHJlZXMgKC1tbSwgZm9yIGV4YW1wbGUpLAorcXVpbHQgaXMgdGhlIGJlc3QgdG9vbCBmb3IgdGhlIGpvYi4KKworCisyLjY6IE1BSUxJTkcgTElTVFMKKworQSBncmVhdCBkZWFsIG9mIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCB3b3JrIGlzIGRvbmUgYnkgd2F5IG9mIG1haWxpbmcKK2xpc3RzLiAgSXQgaXMgaGFyZCB0byBiZSBhIGZ1bGx5LWZ1bmN0aW9uaW5nIG1lbWJlciBvZiB0aGUgY29tbXVuaXR5Cit3aXRob3V0IGpvaW5pbmcgYXQgbGVhc3Qgb25lIGxpc3Qgc29tZXdoZXJlLiAgQnV0IExpbnV4IG1haWxpbmcgbGlzdHMgYWxzbworcmVwcmVzZW50IGEgcG90ZW50aWFsIGhhemFyZCB0byBkZXZlbG9wZXJzLCB3aG8gcmlzayBnZXR0aW5nIGJ1cmllZCB1bmRlciBhCitsb2FkIG9mIGVsZWN0cm9uaWMgbWFpbCwgcnVubmluZyBhZm91bCBvZiB0aGUgY29udmVudGlvbnMgdXNlZCBvbiB0aGUgTGludXgKK2xpc3RzLCBvciBib3RoLgorCitNb3N0IGtlcm5lbCBtYWlsaW5nIGxpc3RzIGFyZSBydW4gb24gdmdlci5rZXJuZWwub3JnOyB0aGUgbWFzdGVyIGxpc3QgY2FuCitiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sCisKK1RoZXJlIGFyZSBsaXN0cyBob3N0ZWQgZWxzZXdoZXJlLCB0aG91Z2g7IGEgbnVtYmVyIG9mIHRoZW0gYXJlIGF0CitsaXN0cy5yZWRoYXQuY29tLgorCitUaGUgY29yZSBtYWlsaW5nIGxpc3QgZm9yIGtlcm5lbCBkZXZlbG9wbWVudCBpcywgb2YgY291cnNlLCBsaW51eC1rZXJuZWwuCitUaGlzIGxpc3QgaXMgYW4gaW50aW1pZGF0aW5nIHBsYWNlIHRvIGJlOyB2b2x1bWUgY2FuIHJlYWNoIDUwMCBtZXNzYWdlcyBwZXIKK2RheSwgdGhlIGFtb3VudCBvZiBub2lzZSBpcyBoaWdoLCB0aGUgY29udmVyc2F0aW9uIGNhbiBiZSBzZXZlcmVseQordGVjaG5pY2FsLCBhbmQgcGFydGljaXBhbnRzIGFyZSBub3QgYWx3YXlzIGNvbmNlcm5lZCB3aXRoIHNob3dpbmcgYSBoaWdoCitkZWdyZWUgb2YgcG9saXRlbmVzcy4gIEJ1dCB0aGVyZSBpcyBubyBvdGhlciBwbGFjZSB3aGVyZSB0aGUga2VybmVsCitkZXZlbG9wbWVudCBjb21tdW5pdHkgY29tZXMgdG9nZXRoZXIgYXMgYSB3aG9sZTsgZGV2ZWxvcGVycyB3aG8gYXZvaWQgdGhpcworbGlzdCB3aWxsIG1pc3MgaW1wb3J0YW50IGluZm9ybWF0aW9uLgorCitUaGVyZSBhcmUgYSBmZXcgaGludHMgd2hpY2ggY2FuIGhlbHAgd2l0aCBsaW51eC1rZXJuZWwgc3Vydml2YWw6CisKKy0gSGF2ZSB0aGUgbGlzdCBkZWxpdmVyZWQgdG8gYSBzZXBhcmF0ZSBmb2xkZXIsIHJhdGhlciB0aGFuIHlvdXIgbWFpbgorICBtYWlsYm94LiAgT25lIG11c3QgYmUgYWJsZSB0byBpZ25vcmUgdGhlIHN0cmVhbSBmb3Igc3VzdGFpbmVkIHBlcmlvZHMgb2YKKyAgdGltZS4KKworLSBEbyBub3QgdHJ5IHRvIGZvbGxvdyBldmVyeSBjb252ZXJzYXRpb24gLSBub2JvZHkgZWxzZSBkb2VzLiAgSXQgaXMKKyAgaW1wb3J0YW50IHRvIGZpbHRlciBvbiBib3RoIHRoZSB0b3BpYyBvZiBpbnRlcmVzdCAodGhvdWdoIG5vdGUgdGhhdAorICBsb25nLXJ1bm5pbmcgY29udmVyc2F0aW9ucyBjYW4gZHJpZnQgYXdheSBmcm9tIHRoZSBvcmlnaW5hbCBzdWJqZWN0CisgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGVtYWlsIHN1YmplY3QgbGluZSkgYW5kIHRoZSBwZW9wbGUgd2hvIGFyZQorICBwYXJ0aWNpcGF0aW5nLiAgCisKKy0gRG8gbm90IGZlZWQgdGhlIHRyb2xscy4gIElmIHNvbWVib2R5IGlzIHRyeWluZyB0byBzdGlyIHVwIGFuIGFuZ3J5CisgIHJlc3BvbnNlLCBpZ25vcmUgdGhlbS4KKworLSBXaGVuIHJlc3BvbmRpbmcgdG8gbGludXgta2VybmVsIGVtYWlsIChvciB0aGF0IG9uIG90aGVyIGxpc3RzKSBwcmVzZXJ2ZQorICB0aGUgQ2M6IGhlYWRlciBmb3IgYWxsIGludm9sdmVkLiAgSW4gdGhlIGFic2VuY2Ugb2YgYSBzdHJvbmcgcmVhc29uIChzdWNoCisgIGFzIGFuIGV4cGxpY2l0IHJlcXVlc3QpLCB5b3Ugc2hvdWxkIG5ldmVyIHJlbW92ZSByZWNpcGllbnRzLiAgQWx3YXlzIG1ha2UKKyAgc3VyZSB0aGF0IHRoZSBwZXJzb24geW91IGFyZSByZXNwb25kaW5nIHRvIGlzIGluIHRoZSBDYzogbGlzdC4gIFRoaXMKKyAgY29udmVudGlvbiBhbHNvIG1ha2VzIGl0IHVubmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgYXNrIHRvIGJlIGNvcGllZCBvbgorICByZXBsaWVzIHRvIHlvdXIgcG9zdGluZ3MuCisKKy0gU2VhcmNoIHRoZSBsaXN0IGFyY2hpdmVzIChhbmQgdGhlIG5ldCBhcyBhIHdob2xlKSBiZWZvcmUgYXNraW5nCisgIHF1ZXN0aW9ucy4gIFNvbWUgZGV2ZWxvcGVycyBjYW4gZ2V0IGltcGF0aWVudCB3aXRoIHBlb3BsZSB3aG8gY2xlYXJseQorICBoYXZlIG5vdCBkb25lIHRoZWlyIGhvbWV3b3JrLgorCistIEF2b2lkIHRvcC1wb3N0aW5nICh0aGUgcHJhY3RpY2Ugb2YgcHV0dGluZyB5b3VyIGFuc3dlciBhYm92ZSB0aGUgcXVvdGVkCisgIHRleHQgeW91IGFyZSByZXNwb25kaW5nIHRvKS4gIEl0IG1ha2VzIHlvdXIgcmVzcG9uc2UgaGFyZGVyIHRvIHJlYWQgYW5kCisgIG1ha2VzIGEgcG9vciBpbXByZXNzaW9uLgorCistIEFzayBvbiB0aGUgY29ycmVjdCBtYWlsaW5nIGxpc3QuICBMaW51eC1rZXJuZWwgbWF5IGJlIHRoZSBnZW5lcmFsIG1lZXRpbmcKKyAgcG9pbnQsIGJ1dCBpdCBpcyBub3QgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCBkZXZlbG9wZXJzIGZyb20gYWxsCisgIHN1YnN5c3RlbXMuCisKK1RoZSBsYXN0IHBvaW50IC0gZmluZGluZyB0aGUgY29ycmVjdCBtYWlsaW5nIGxpc3QgLSBpcyBhIGNvbW1vbiBwbGFjZSBmb3IKK2JlZ2lubmluZyBkZXZlbG9wZXJzIHRvIGdvIHdyb25nLiAgU29tZWJvZHkgd2hvIGFza3MgYSBuZXR3b3JraW5nLXJlbGF0ZWQKK3F1ZXN0aW9uIG9uIGxpbnV4LWtlcm5lbCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgcmVjZWl2ZSBhIHBvbGl0ZSBzdWdnZXN0aW9uCit0byBhc2sgb24gdGhlIG5ldGRldiBsaXN0IGluc3RlYWQsIGFzIHRoYXQgaXMgdGhlIGxpc3QgZnJlcXVlbnRlZCBieSBtb3N0CituZXR3b3JraW5nIGRldmVsb3BlcnMuICBPdGhlciBsaXN0cyBleGlzdCBmb3IgdGhlIFNDU0ksIHZpZGVvNGxpbnV4LCBJREUsCitmaWxlc3lzdGVtLCBldGMuIHN1YnN5c3RlbXMuICBUaGUgYmVzdCBwbGFjZSB0byBsb29rIGZvciBtYWlsaW5nIGxpc3RzIGlzCitpbiB0aGUgTUFJTlRBSU5FUlMgZmlsZSBwYWNrYWdlZCB3aXRoIHRoZSBrZXJuZWwgc291cmNlLgorCisKKzIuNzogR0VUVElORyBTVEFSVEVEIFdJVEggS0VSTkVMIERFVkVMT1BNRU5UCisKK1F1ZXN0aW9ucyBhYm91dCBob3cgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCB0aGUga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3MgYXJlCitjb21tb24gLSBmcm9tIGJvdGggaW5kaXZpZHVhbHMgYW5kIGNvbXBhbmllcy4gIEVxdWFsbHkgY29tbW9uIGFyZSBtaXNzdGVwcword2hpY2ggbWFrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgaGFyZGVyIHRoYW4gaXQgaGFzIHRvIGJlLgorCitDb21wYW5pZXMgb2Z0ZW4gbG9vayB0byBoaXJlIHdlbGwta25vd24gZGV2ZWxvcGVycyB0byBnZXQgYSBkZXZlbG9wbWVudAorZ3JvdXAgc3RhcnRlZC4gIFRoaXMgY2FuLCBpbiBmYWN0LCBiZSBhbiBlZmZlY3RpdmUgdGVjaG5pcXVlLiAgQnV0IGl0IGFsc28KK3RlbmRzIHRvIGJlIGV4cGVuc2l2ZSBhbmQgZG9lcyBub3QgZG8gbXVjaCB0byBncm93IHRoZSBwb29sIG9mIGV4cGVyaWVuY2VkCitrZXJuZWwgZGV2ZWxvcGVycy4gIEl0IGlzIHBvc3NpYmxlIHRvIGJyaW5nIGluLWhvdXNlIGRldmVsb3BlcnMgdXAgdG8gc3BlZWQKK29uIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCwgZ2l2ZW4gdGhlIGludmVzdG1lbnQgb2YgYSBiaXQgb2YgdGltZS4gIFRha2luZwordGhpcyB0aW1lIGNhbiBlbmRvdyBhbiBlbXBsb3llciB3aXRoIGEgZ3JvdXAgb2YgZGV2ZWxvcGVycyB3aG8gdW5kZXJzdGFuZAordGhlIGtlcm5lbCBhbmQgdGhlIGNvbXBhbnkgYm90aCwgYW5kIHdobyBjYW4gaGVscCB0byB0cmFpbiBvdGhlcnMgYXMgd2VsbC4KK092ZXIgdGhlIG1lZGl1bSB0ZXJtLCB0aGlzIGlzIG9mdGVuIHRoZSBtb3JlIHByb2ZpdGFibGUgYXBwcm9hY2guCisKK0luZGl2aWR1YWwgZGV2ZWxvcGVycyBhcmUgb2Z0ZW4sIHVuZGVyc3RhbmRhYmx5LCBhdCBhIGxvc3MgZm9yIGEgcGxhY2UgdG8KK3N0YXJ0LiAgQmVnaW5uaW5nIHdpdGggYSBsYXJnZSBwcm9qZWN0IGNhbiBiZSBpbnRpbWlkYXRpbmc7IG9uZSBvZnRlbiB3YW50cwordG8gdGVzdCB0aGUgd2F0ZXJzIHdpdGggc29tZXRoaW5nIHNtYWxsZXIgZmlyc3QuICBUaGlzIGlzIHRoZSBwb2ludCB3aGVyZQorc29tZSBkZXZlbG9wZXJzIGp1bXAgaW50byB0aGUgY3JlYXRpb24gb2YgcGF0Y2hlcyBmaXhpbmcgc3BlbGxpbmcgZXJyb3JzIG9yCittaW5vciBjb2Rpbmcgc3R5bGUgaXNzdWVzLiAgVW5mb3J0dW5hdGVseSwgc3VjaCBwYXRjaGVzIGNyZWF0ZSBhIGxldmVsIG9mCitub2lzZSB3aGljaCBpcyBkaXN0cmFjdGluZyBmb3IgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBhcyBhIHdob2xlLCBzbywKK2luY3JlYXNpbmdseSwgdGhleSBhcmUgbG9va2VkIGRvd24gdXBvbi4gIE5ldyBkZXZlbG9wZXJzIHdpc2hpbmcgdG8KK2ludHJvZHVjZSB0aGVtc2VsdmVzIHRvIHRoZSBjb21tdW5pdHkgd2lsbCBub3QgZ2V0IHRoZSBzb3J0IG9mIHJlY2VwdGlvbgordGhleSB3aXNoIGZvciBieSB0aGVzZSBtZWFucy4KKworQW5kcmV3IE1vcnRvbiBnaXZlcyB0aGlzIGFkdmljZSBmb3IgYXNwaXJpbmcga2VybmVsIGRldmVsb3BlcnMKKworCVRoZSAjMSBwcm9qZWN0IGZvciBhbGwga2VybmVsIGJlZ2lubmVycyBzaG91bGQgc3VyZWx5IGJlICJtYWtlIHN1cmUKKwl0aGF0IHRoZSBrZXJuZWwgcnVucyBwZXJmZWN0bHkgYXQgYWxsIHRpbWVzIG9uIGFsbCBtYWNoaW5lcyB3aGljaAorCXlvdSBjYW4gbGF5IHlvdXIgaGFuZHMgb24iLiAgVXN1YWxseSB0aGUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gd29yaworCXdpdGggb3RoZXJzIG9uIGdldHRpbmcgdGhpbmdzIGZpeGVkIHVwICh0aGlzIGNhbiByZXF1aXJlCisJcGVyc2lzdGVuY2UhKSBidXQgdGhhdCdzIGZpbmUgLSBpdCdzIGEgcGFydCBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQuCisKKyhodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yODM5ODIvKS4KKworSW4gdGhlIGFic2VuY2Ugb2Ygb2J2aW91cyBwcm9ibGVtcyB0byBmaXgsIGRldmVsb3BlcnMgYXJlIGFkdmlzZWQgdG8gbG9vaworYXQgdGhlIGN1cnJlbnQgbGlzdHMgb2YgcmVncmVzc2lvbnMgYW5kIG9wZW4gYnVncyBpbiBnZW5lcmFsLiAgVGhlcmUgaXMKK25ldmVyIGFueSBzaG9ydGFnZSBvZiBpc3N1ZXMgaW4gbmVlZCBvZiBmaXhpbmc7IGJ5IGFkZHJlc3NpbmcgdGhlc2UgaXNzdWVzLAorZGV2ZWxvcGVycyB3aWxsIGdhaW4gZXhwZXJpZW5jZSB3aXRoIHRoZSBwcm9jZXNzIHdoaWxlLCBhdCB0aGUgc2FtZSB0aW1lLAorYnVpbGRpbmcgcmVzcGVjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMy5FYXJseS1zdGFnZSBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8zLkVhcmx5LXN0YWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2ExNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMy5FYXJseS1zdGFnZQpAQCAtMCwwICsxLDE5NSBAQAorMzogRUFSTFktU1RBR0UgUExBTk5JTkcKKworV2hlbiBjb250ZW1wbGF0aW5nIGEgTGludXgga2VybmVsIGRldmVsb3BtZW50IHByb2plY3QsIGl0IGNhbiBiZSB0ZW1wdGluZwordG8ganVtcCByaWdodCBpbiBhbmQgc3RhcnQgY29kaW5nLiAgQXMgd2l0aCBhbnkgc2lnbmlmaWNhbnQgcHJvamVjdCwKK3Rob3VnaCwgbXVjaCBvZiB0aGUgZ3JvdW5kd29yayBmb3Igc3VjY2VzcyBpcyBiZXN0IGxhaWQgYmVmb3JlIHRoZSBmaXJzdAorbGluZSBvZiBjb2RlIGlzIHdyaXR0ZW4uICBTb21lIHRpbWUgc3BlbnQgaW4gZWFybHkgcGxhbm5pbmcgYW5kCitjb21tdW5pY2F0aW9uIGNhbiBzYXZlIGZhciBtb3JlIHRpbWUgbGF0ZXIgb24uCisKKworMy4xOiBTUEVDSUZZSU5HIFRIRSBQUk9CTEVNCisKK0xpa2UgYW55IGVuZ2luZWVyaW5nIHByb2plY3QsIGEgc3VjY2Vzc2Z1bCBrZXJuZWwgZW5oYW5jZW1lbnQgc3RhcnRzIHdpdGggYQorY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0gdG8gYmUgc29sdmVkLiAgSW4gc29tZSBjYXNlcywgdGhpcyBzdGVwIGlzCitlYXN5OiB3aGVuIGEgZHJpdmVyIGlzIG5lZWRlZCBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSwgZm9yCitleGFtcGxlLiAgSW4gb3RoZXJzLCB0aG91Z2gsIGl0IGlzIHRlbXB0aW5nIHRvIGNvbmZ1c2UgdGhlIHJlYWwgcHJvYmxlbQord2l0aCB0aGUgcHJvcG9zZWQgc29sdXRpb24sIGFuZCB0aGF0IGNhbiBsZWFkIHRvIGRpZmZpY3VsdGllcy4KKworQ29uc2lkZXIgYW4gZXhhbXBsZTogc29tZSB5ZWFycyBhZ28sIGRldmVsb3BlcnMgd29ya2luZyB3aXRoIExpbnV4IGF1ZGlvCitzb3VnaHQgYSB3YXkgdG8gcnVuIGFwcGxpY2F0aW9ucyB3aXRob3V0IGRyb3BvdXRzIG9yIG90aGVyIGFydGlmYWN0cyBjYXVzZWQKK2J5IGV4Y2Vzc2l2ZSBsYXRlbmN5IGluIHRoZSBzeXN0ZW0uICBUaGUgc29sdXRpb24gdGhleSBhcnJpdmVkIGF0IHdhcyBhCitrZXJuZWwgbW9kdWxlIGludGVuZGVkIHRvIGhvb2sgaW50byB0aGUgTGludXggU2VjdXJpdHkgTW9kdWxlIChMU00pCitmcmFtZXdvcms7IHRoaXMgbW9kdWxlIGNvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gZ2l2ZSBzcGVjaWZpYyBhcHBsaWNhdGlvbnMKK2FjY2VzcyB0byB0aGUgcmVhbHRpbWUgc2NoZWR1bGVyLiAgVGhpcyBtb2R1bGUgd2FzIGltcGxlbWVudGVkIGFuZCBzZW50IHRvCit0aGUgbGludXgta2VybmVsIG1haWxpbmcgbGlzdCwgd2hlcmUgaXQgaW1tZWRpYXRlbHkgcmFuIGludG8gcHJvYmxlbXMuCisKK1RvIHRoZSBhdWRpbyBkZXZlbG9wZXJzLCB0aGlzIHNlY3VyaXR5IG1vZHVsZSB3YXMgc3VmZmljaWVudCB0byBzb2x2ZSB0aGVpcgoraW1tZWRpYXRlIHByb2JsZW0uICBUbyB0aGUgd2lkZXIga2VybmVsIGNvbW11bml0eSwgdGhvdWdoLCBpdCB3YXMgc2VlbiBhcyBhCittaXN1c2Ugb2YgdGhlIExTTSBmcmFtZXdvcmsgKHdoaWNoIGlzIG5vdCBpbnRlbmRlZCB0byBjb25mZXIgcHJpdmlsZWdlcworb250byBwcm9jZXNzZXMgd2hpY2ggdGhleSB3b3VsZCBub3Qgb3RoZXJ3aXNlIGhhdmUpIGFuZCBhIHJpc2sgdG8gc3lzdGVtCitzdGFiaWxpdHkuICBUaGVpciBwcmVmZXJyZWQgc29sdXRpb25zIGludm9sdmVkIHJlYWx0aW1lIHNjaGVkdWxpbmcgYWNjZXNzCit2aWEgdGhlIHJsaW1pdCBtZWNoYW5pc20gZm9yIHRoZSBzaG9ydCB0ZXJtLCBhbmQgb25nb2luZyBsYXRlbmN5IHJlZHVjdGlvbgord29yayBpbiB0aGUgbG9uZyB0ZXJtLgorCitUaGUgYXVkaW8gY29tbXVuaXR5LCBob3dldmVyLCBjb3VsZCBub3Qgc2VlIHBhc3QgdGhlIHBhcnRpY3VsYXIgc29sdXRpb24KK3RoZXkgaGFkIGltcGxlbWVudGVkOyB0aGV5IHdlcmUgdW53aWxsaW5nIHRvIGFjY2VwdCBhbHRlcm5hdGl2ZXMuICBUaGUKK3Jlc3VsdGluZyBkaXNhZ3JlZW1lbnQgbGVmdCB0aG9zZSBkZXZlbG9wZXJzIGZlZWxpbmcgZGlzaWxsdXNpb25lZCB3aXRoIHRoZQorZW50aXJlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzOyBvbmUgb2YgdGhlbSB3ZW50IGJhY2sgdG8gYW4gYXVkaW8gbGlzdAorYW5kIHBvc3RlZCB0aGlzOgorCisJVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHZlcnkgZ29vZCBMaW51eCBrZXJuZWwgZGV2ZWxvcGVycywgYnV0IHRoZXkKKwl0ZW5kIHRvIGdldCBvdXRzaG91dGVkIGJ5IGEgbGFyZ2UgY3Jvd2Qgb2YgYXJyb2dhbnQgZm9vbHMuIFRyeWluZworCXRvIGNvbW11bmljYXRlIHVzZXIgcmVxdWlyZW1lbnRzIHRvIHRoZXNlIHBlb3BsZSBpcyBhIHdhc3RlIG9mCisJdGltZS4gVGhleSBhcmUgbXVjaCB0b28gImludGVsbGlnZW50IiB0byBsaXN0ZW4gdG8gbGVzc2VyIG1vcnRhbHMuCisKKyhodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8xMzE3NzYvKS4KKworVGhlIHJlYWxpdHkgb2YgdGhlIHNpdHVhdGlvbiB3YXMgZGlmZmVyZW50OyB0aGUga2VybmVsIGRldmVsb3BlcnMgd2VyZSBmYXIKK21vcmUgY29uY2VybmVkIGFib3V0IHN5c3RlbSBzdGFiaWxpdHksIGxvbmctdGVybSBtYWludGVuYW5jZSwgYW5kIGZpbmRpbmcKK3RoZSByaWdodCBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbSB0aGFuIHRoZXkgd2VyZSB3aXRoIGEgc3BlY2lmaWMgbW9kdWxlLgorVGhlIG1vcmFsIG9mIHRoZSBzdG9yeSBpcyB0byBmb2N1cyBvbiB0aGUgcHJvYmxlbSAtIG5vdCBhIHNwZWNpZmljIHNvbHV0aW9uCistIGFuZCB0byBkaXNjdXNzIGl0IHdpdGggdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBiZWZvcmUgaW52ZXN0aW5nIGluIHRoZQorY3JlYXRpb24gb2YgYSBib2R5IG9mIGNvZGUuCisKK1NvLCB3aGVuIGNvbnRlbXBsYXRpbmcgYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCwgb25lIHNob3VsZCBvYnRhaW4KK2Fuc3dlcnMgdG8gYSBzaG9ydCBzZXQgb2YgcXVlc3Rpb25zOgorCisgLSBXaGF0LCBleGFjdGx5LCBpcyB0aGUgcHJvYmxlbSB3aGljaCBuZWVkcyB0byBiZSBzb2x2ZWQ/CisKKyAtIFdobyBhcmUgdGhlIHVzZXJzIGFmZmVjdGVkIGJ5IHRoaXMgcHJvYmxlbT8gIFdoaWNoIHVzZSBjYXNlcyBzaG91bGQgdGhlCisgICBzb2x1dGlvbiBhZGRyZXNzPworCisgLSBIb3cgZG9lcyB0aGUga2VybmVsIGZhbGwgc2hvcnQgaW4gYWRkcmVzc2luZyB0aGF0IHByb2JsZW0gbm93PworCitPbmx5IHRoZW4gZG9lcyBpdCBtYWtlIHNlbnNlIHRvIHN0YXJ0IGNvbnNpZGVyaW5nIHBvc3NpYmxlIHNvbHV0aW9ucy4KKworCiszLjI6IEVBUkxZIERJU0NVU1NJT04KKworV2hlbiBwbGFubmluZyBhIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9qZWN0LCBpdCBtYWtlcyBncmVhdCBzZW5zZSB0byBob2xkCitkaXNjdXNzaW9ucyB3aXRoIHRoZSBjb21tdW5pdHkgYmVmb3JlIGxhdW5jaGluZyBpbnRvIGltcGxlbWVudGF0aW9uLiAgRWFybHkKK2NvbW11bmljYXRpb24gY2FuIHNhdmUgdGltZSBhbmQgdHJvdWJsZSBpbiBhIG51bWJlciBvZiB3YXlzOgorCisgLSBJdCBtYXkgd2VsbCBiZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGFkZHJlc3NlZCBieSB0aGUga2VybmVsIGluIHdheXMgd2hpY2gKKyAgIHlvdSBoYXZlIG5vdCB1bmRlcnN0b29kLiAgVGhlIExpbnV4IGtlcm5lbCBpcyBsYXJnZSBhbmQgaGFzIGEgbnVtYmVyIG9mCisgICBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gIE5vdCBhbGwKKyAgIGtlcm5lbCBjYXBhYmlsaXRpZXMgYXJlIGRvY3VtZW50ZWQgYXMgd2VsbCBhcyBvbmUgbWlnaHQgbGlrZSwgYW5kIGl0IGlzCisgICBlYXN5IHRvIG1pc3MgdGhpbmdzLiAgWW91ciBhdXRob3IgaGFzIHNlZW4gdGhlIHBvc3Rpbmcgb2YgYSBjb21wbGV0ZQorICAgZHJpdmVyIHdoaWNoIGR1cGxpY2F0ZWQgYW4gZXhpc3RpbmcgZHJpdmVyIHRoYXQgdGhlIG5ldyBhdXRob3IgaGFkIGJlZW4KKyAgIHVuYXdhcmUgb2YuICBDb2RlIHdoaWNoIHJlaW52ZW50cyBleGlzdGluZyB3aGVlbHMgaXMgbm90IG9ubHkgd2FzdGVmdWw7CisgICBpdCB3aWxsIGFsc28gbm90IGJlIGFjY2VwdGVkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4KKworIC0gVGhlcmUgbWF5IGJlIGVsZW1lbnRzIG9mIHRoZSBwcm9wb3NlZCBzb2x1dGlvbiB3aGljaCB3aWxsIG5vdCBiZQorICAgYWNjZXB0YWJsZSBmb3IgbWFpbmxpbmUgbWVyZ2luZy4gIEl0IGlzIGJldHRlciB0byBmaW5kIG91dCBhYm91dAorICAgcHJvYmxlbXMgbGlrZSB0aGlzIGJlZm9yZSB3cml0aW5nIHRoZSBjb2RlLgorCisgLSBJdCdzIGVudGlyZWx5IHBvc3NpYmxlIHRoYXQgb3RoZXIgZGV2ZWxvcGVycyBoYXZlIHRob3VnaHQgYWJvdXQgdGhlCisgICBwcm9ibGVtOyB0aGV5IG1heSBoYXZlIGlkZWFzIGZvciBhIGJldHRlciBzb2x1dGlvbiwgYW5kIG1heSBiZSB3aWxsaW5nCisgICB0byBoZWxwIGluIHRoZSBjcmVhdGlvbiBvZiB0aGF0IHNvbHV0aW9uLgorCitZZWFycyBvZiBleHBlcmllbmNlIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBjb21tdW5pdHkgaGF2ZSB0YXVnaHQgYQorY2xlYXIgbGVzc29uOiBrZXJuZWwgY29kZSB3aGljaCBpcyBkZXNpZ25lZCBhbmQgZGV2ZWxvcGVkIGJlaGluZCBjbG9zZWQKK2Rvb3JzIGludmFyaWFibHkgaGFzIHByb2JsZW1zIHdoaWNoIGFyZSBvbmx5IHJldmVhbGVkIHdoZW4gdGhlIGNvZGUgaXMKK3JlbGVhc2VkIGludG8gdGhlIGNvbW11bml0eS4gIFNvbWV0aW1lcyB0aGVzZSBwcm9ibGVtcyBhcmUgc2V2ZXJlLAorcmVxdWlyaW5nIG1vbnRocyBvciB5ZWFycyBvZiBlZmZvcnQgYmVmb3JlIHRoZSBjb2RlIGNhbiBiZSBicm91Z2h0IHVwIHRvCit0aGUga2VybmVsIGNvbW11bml0eSdzIHN0YW5kYXJkcy4gIFNvbWUgZXhhbXBsZXMgaW5jbHVkZToKKworIC0gVGhlIERldmljZXNjYXBlIG5ldHdvcmsgc3RhY2sgd2FzIGRlc2lnbmVkIGFuZCBpbXBsZW1lbnRlZCBmb3IKKyAgIHNpbmdsZS1wcm9jZXNzb3Igc3lzdGVtcy4gIEl0IGNvdWxkIG5vdCBiZSBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUKKyAgIHVudGlsIGl0IHdhcyBtYWRlIHN1aXRhYmxlIGZvciBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zLiAgUmV0cm9maXR0aW5nCisgICBsb2NraW5nIGFuZCBzdWNoIGludG8gY29kZSBpcyBhIGRpZmZpY3VsdCB0YXNrOyBhcyBhIHJlc3VsdCwgdGhlIG1lcmdpbmcKKyAgIG9mIHRoaXMgY29kZSAobm93IGNhbGxlZCBtYWM4MDIxMSkgd2FzIGRlbGF5ZWQgZm9yIG92ZXIgYSB5ZWFyLgorCisgLSBUaGUgUmVpc2VyNCBmaWxlc3lzdGVtIGluY2x1ZGVkIGEgbnVtYmVyIG9mIGNhcGFiaWxpdGllcyB3aGljaCwgaW4gdGhlCisgICBjb3JlIGtlcm5lbCBkZXZlbG9wZXJzJyBvcGluaW9uLCBzaG91bGQgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGluIHRoZQorICAgdmlydHVhbCBmaWxlc3lzdGVtIGxheWVyIGluc3RlYWQuICBJdCBhbHNvIGluY2x1ZGVkIGZlYXR1cmVzIHdoaWNoIGNvdWxkCisgICBub3QgZWFzaWx5IGJlIGltcGxlbWVudGVkIHdpdGhvdXQgZXhwb3NpbmcgdGhlIHN5c3RlbSB0byB1c2VyLWNhdXNlZAorICAgZGVhZGxvY2tzLiAgVGhlIGxhdGUgcmV2ZWxhdGlvbiBvZiB0aGVzZSBwcm9ibGVtcyAtIGFuZCByZWZ1c2FsIHRvCisgICBhZGRyZXNzIHNvbWUgb2YgdGhlbSAtIGhhcyBjYXVzZWQgUmVpc2VyNCB0byBzdGF5IG91dCBvZiB0aGUgbWFpbmxpbmUKKyAgIGtlcm5lbC4KKworIC0gVGhlIEFwcEFybW9yIHNlY3VyaXR5IG1vZHVsZSBtYWRlIHVzZSBvZiBpbnRlcm5hbCB2aXJ0dWFsIGZpbGVzeXN0ZW0KKyAgIGRhdGEgc3RydWN0dXJlcyBpbiB3YXlzIHdoaWNoIHdlcmUgY29uc2lkZXJlZCB0byBiZSB1bnNhZmUgYW5kCisgICB1bnJlbGlhYmxlLiAgVGhpcyBjb2RlIGhhcyBzaW5jZSBiZWVuIHNpZ25pZmljYW50bHkgcmV3b3JrZWQsIGJ1dAorICAgcmVtYWlucyBvdXRzaWRlIG9mIHRoZSBtYWlubGluZS4KKworSW4gZWFjaCBvZiB0aGVzZSBjYXNlcywgYSBncmVhdCBkZWFsIG9mIHBhaW4gYW5kIGV4dHJhIHdvcmsgY291bGQgaGF2ZSBiZWVuCithdm9pZGVkIHdpdGggc29tZSBlYXJseSBkaXNjdXNzaW9uIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wZXJzLgorCisKKzMuMzogV0hPIERPIFlPVSBUQUxLIFRPPworCitXaGVuIGRldmVsb3BlcnMgZGVjaWRlIHRvIHRha2UgdGhlaXIgcGxhbnMgcHVibGljLCB0aGUgbmV4dCBxdWVzdGlvbiB3aWxsCitiZTogd2hlcmUgZG8gd2Ugc3RhcnQ/ICBUaGUgYW5zd2VyIGlzIHRvIGZpbmQgdGhlIHJpZ2h0IG1haWxpbmcgbGlzdChzKSBhbmQKK3RoZSByaWdodCBtYWludGFpbmVyLiAgRm9yIG1haWxpbmcgbGlzdHMsIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIGxvb2sgaW4KK3RoZSBNQUlOVEFJTkVSUyBmaWxlIGZvciBhIHJlbGV2YW50IHBsYWNlIHRvIHBvc3QuICBJZiB0aGVyZSBpcyBhIHN1aXRhYmxlCitzdWJzeXN0ZW0gbGlzdCwgcG9zdGluZyB0aGVyZSBpcyBvZnRlbiBwcmVmZXJhYmxlIHRvIHBvc3Rpbmcgb24KK2xpbnV4LWtlcm5lbDsgeW91IGFyZSBtb3JlIGxpa2VseSB0byByZWFjaCBkZXZlbG9wZXJzIHdpdGggZXhwZXJ0aXNlIGluIHRoZQorcmVsZXZhbnQgc3Vic3lzdGVtIGFuZCB0aGUgZW52aXJvbm1lbnQgbWF5IGJlIG1vcmUgc3VwcG9ydGl2ZS4KKworRmluZGluZyBtYWludGFpbmVycyBjYW4gYmUgYSBiaXQgaGFyZGVyLiAgQWdhaW4sIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGlzCit0aGUgcGxhY2UgdG8gc3RhcnQuICBUaGF0IGZpbGUgdGVuZHMgdG8gbm90IGFsd2F5cyBiZSB1cCB0byBkYXRlLCB0aG91Z2gsCithbmQgbm90IGFsbCBzdWJzeXN0ZW1zIGFyZSByZXByZXNlbnRlZCB0aGVyZS4gIFRoZSBwZXJzb24gbGlzdGVkIGluIHRoZQorTUFJTlRBSU5FUlMgZmlsZSBtYXksIGluIGZhY3QsIG5vdCBiZSB0aGUgcGVyc29uIHdobyBpcyBhY3R1YWxseSBhY3RpbmcgaW4KK3RoYXQgcm9sZSBjdXJyZW50bHkuICBTbywgd2hlbiB0aGVyZSBpcyBkb3VidCBhYm91dCB3aG8gdG8gY29udGFjdCwgYQordXNlZnVsIHRyaWNrIGlzIHRvIHVzZSBnaXQgKGFuZCAiZ2l0IGxvZyIgaW4gcGFydGljdWxhcikgdG8gc2VlIHdobyBpcworY3VycmVudGx5IGFjdGl2ZSB3aXRoaW4gdGhlIHN1YnN5c3RlbSBvZiBpbnRlcmVzdC4gIExvb2sgYXQgd2hvIGlzIHdyaXRpbmcKK3BhdGNoZXMsIGFuZCB3aG8sIGlmIGFueWJvZHksIGlzIGF0dGFjaGluZyBTaWduZWQtb2ZmLWJ5IGxpbmVzIHRvIHRob3NlCitwYXRjaGVzLiAgVGhvc2UgYXJlIHRoZSBwZW9wbGUgd2hvIHdpbGwgYmUgYmVzdCBwbGFjZWQgdG8gaGVscCB3aXRoIGEgbmV3CitkZXZlbG9wbWVudCBwcm9qZWN0LgorCitJZiBhbGwgZWxzZSBmYWlscywgdGFsa2luZyB0byBBbmRyZXcgTW9ydG9uIGNhbiBiZSBhbiBlZmZlY3RpdmUgd2F5IHRvCit0cmFjayBkb3duIGEgbWFpbnRhaW5lciBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBjb2RlLgorCisKKzMuNDogV0hFTiBUTyBQT1NUPworCitJZiBwb3NzaWJsZSwgcG9zdGluZyB5b3VyIHBsYW5zIGR1cmluZyB0aGUgZWFybHkgc3RhZ2VzIGNhbiBvbmx5IGJlCitoZWxwZnVsLiAgRGVzY3JpYmUgdGhlIHByb2JsZW0gYmVpbmcgc29sdmVkIGFuZCBhbnkgcGxhbnMgdGhhdCBoYXZlIGJlZW4KK21hZGUgb24gaG93IHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRvbmUuICBBbnkgaW5mb3JtYXRpb24geW91IGNhbgorcHJvdmlkZSBjYW4gaGVscCB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IHByb3ZpZGUgdXNlZnVsIGlucHV0IG9uIHRoZQorcHJvamVjdC4KKworT25lIGRpc2NvdXJhZ2luZyB0aGluZyB3aGljaCBjYW4gaGFwcGVuIGF0IHRoaXMgc3RhZ2UgaXMgbm90IGEgaG9zdGlsZQorcmVhY3Rpb24sIGJ1dCwgaW5zdGVhZCwgbGl0dGxlIG9yIG5vIHJlYWN0aW9uIGF0IGFsbC4gIFRoZSBzYWQgdHJ1dGggb2YgdGhlCittYXR0ZXIgaXMgKDEpIGtlcm5lbCBkZXZlbG9wZXJzIHRlbmQgdG8gYmUgYnVzeSwgKDIpIHRoZXJlIGlzIG5vIHNob3J0YWdlCitvZiBwZW9wbGUgd2l0aCBncmFuZCBwbGFucyBhbmQgbGl0dGxlIGNvZGUgKG9yIGV2ZW4gcHJvc3BlY3Qgb2YgY29kZSkgdG8KK2JhY2sgdGhlbSB1cCwgYW5kICgzKSBub2JvZHkgaXMgb2JsaWdhdGVkIHRvIHJldmlldyBvciBjb21tZW50IG9uIGlkZWFzCitwb3N0ZWQgYnkgb3RoZXJzLiAgSWYgYSByZXF1ZXN0LWZvci1jb21tZW50cyBwb3N0aW5nIHlpZWxkcyBsaXR0bGUgaW4gdGhlCit3YXkgb2YgY29tbWVudHMsIGRvIG5vdCBhc3N1bWUgdGhhdCBpdCBtZWFucyB0aGVyZSBpcyBubyBpbnRlcmVzdCBpbiB0aGUKK3Byb2plY3QuICBVbmZvcnR1bmF0ZWx5LCB5b3UgYWxzbyBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlcmUgYXJlIG5vIHByb2JsZW1zCit3aXRoIHlvdXIgaWRlYS4gIFRoZSBiZXN0IHRoaW5nIHRvIGRvIGluIHRoaXMgc2l0dWF0aW9uIGlzIHRvIHByb2NlZWQsCitrZWVwaW5nIHRoZSBjb21tdW5pdHkgaW5mb3JtZWQgYXMgeW91IGdvLgorCisKKzMuNTogR0VUVElORyBPRkZJQ0lBTCBCVVktSU4KKworSWYgeW91ciB3b3JrIGlzIGJlaW5nIGRvbmUgaW4gYSBjb3Jwb3JhdGUgZW52aXJvbm1lbnQgLSBhcyBtb3N0IExpbnV4CitrZXJuZWwgd29yayBpcyAtIHlvdSBtdXN0LCBvYnZpb3VzbHksIGhhdmUgcGVybWlzc2lvbiBmcm9tIHN1aXRhYmx5CitlbXBvd2VyZWQgbWFuYWdlcnMgYmVmb3JlIHlvdSBjYW4gcG9zdCB5b3VyIGNvbXBhbnkncyBwbGFucyBvciBjb2RlIHRvIGEKK3B1YmxpYyBtYWlsaW5nIGxpc3QuICBUaGUgcG9zdGluZyBvZiBjb2RlIHdoaWNoIGhhcyBub3QgYmVlbiBjbGVhcmVkIGZvcgorcmVsZWFzZSB1bmRlciBhIEdQTC1jb21wYXRpYmxlIGxpY2Vuc2UgY2FuIGJlIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWM7IHRoZQorc29vbmVyIHRoYXQgYSBjb21wYW55J3MgbWFuYWdlbWVudCBhbmQgbGVnYWwgc3RhZmYgY2FuIGFncmVlIG9uIHRoZSBwb3N0aW5nCitvZiBhIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9qZWN0LCB0aGUgYmV0dGVyIG9mZiBldmVyeWJvZHkgaW52b2x2ZWQgd2lsbCBiZS4KKworU29tZSByZWFkZXJzIG1heSBiZSB0aGlua2luZyBhdCB0aGlzIHBvaW50IHRoYXQgdGhlaXIga2VybmVsIHdvcmsgaXMKK2ludGVuZGVkIHRvIHN1cHBvcnQgYSBwcm9kdWN0IHdoaWNoIGRvZXMgbm90IHlldCBoYXZlIGFuIG9mZmljaWFsbHkKK2Fja25vd2xlZGdlZCBleGlzdGVuY2UuICBSZXZlYWxpbmcgdGhlaXIgZW1wbG95ZXIncyBwbGFucyBvbiBhIHB1YmxpYworbWFpbGluZyBsaXN0IG1heSBub3QgYmUgYSB2aWFibGUgb3B0aW9uLiAgSW4gY2FzZXMgbGlrZSB0aGlzLCBpdCBpcyB3b3J0aAorY29uc2lkZXJpbmcgd2hldGhlciB0aGUgc2VjcmVjeSBpcyByZWFsbHkgbmVjZXNzYXJ5OyB0aGVyZSBpcyBvZnRlbiBubyByZWFsCituZWVkIHRvIGtlZXAgZGV2ZWxvcG1lbnQgcGxhbnMgYmVoaW5kIGNsb3NlZCBkb29ycy4KKworVGhhdCBzYWlkLCB0aGVyZSBhcmUgYWxzbyBjYXNlcyB3aGVyZSBhIGNvbXBhbnkgbGVnaXRpbWF0ZWx5IGNhbm5vdAorZGlzY2xvc2UgaXRzIHBsYW5zIGVhcmx5IGluIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLiAgQ29tcGFuaWVzIHdpdGgKK2V4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXJzIG1heSBjaG9vc2UgdG8gcHJvY2VlZCBpbiBhbiBvcGVuLWxvb3AgbWFubmVyCitvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXkgd2lsbCBiZSBhYmxlIHRvIGF2b2lkIHNlcmlvdXMgaW50ZWdyYXRpb24KK3Byb2JsZW1zIGxhdGVyLiAgRm9yIGNvbXBhbmllcyB3aXRob3V0IHRoYXQgc29ydCBvZiBpbi1ob3VzZSBleHBlcnRpc2UsIHRoZQorYmVzdCBvcHRpb24gaXMgb2Z0ZW4gdG8gaGlyZSBhbiBvdXRzaWRlIGRldmVsb3BlciB0byByZXZpZXcgdGhlIHBsYW5zIHVuZGVyCithIG5vbi1kaXNjbG9zdXJlIGFncmVlbWVudC4gIFRoZSBMaW51eCBGb3VuZGF0aW9uIG9wZXJhdGVzIGFuIE5EQSBwcm9ncmFtCitkZXNpZ25lZCB0byBoZWxwIHdpdGggdGhpcyBzb3J0IG9mIHNpdHVhdGlvbjsgbW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQKK2F0OgorCisgICAgaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2VuL05EQV9wcm9ncmFtCisKK1RoaXMga2luZCBvZiByZXZpZXcgaXMgb2Z0ZW4gZW5vdWdoIHRvIGF2b2lkIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24KK3dpdGhvdXQgcmVxdWlyaW5nIHB1YmxpYyBkaXNjbG9zdXJlIG9mIHRoZSBwcm9qZWN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzQuQ29kaW5nIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzQuQ29kaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNGFjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNC5Db2RpbmcKQEAgLTAsMCArMSwzODQgQEAKKzQ6IEdFVFRJTkcgVEhFIENPREUgUklHSFQKKworV2hpbGUgdGhlcmUgaXMgbXVjaCB0byBiZSBzYWlkIGZvciBhIHNvbGlkIGFuZCBjb21tdW5pdHktb3JpZW50ZWQgZGVzaWduCitwcm9jZXNzLCB0aGUgcHJvb2Ygb2YgYW55IGtlcm5lbCBkZXZlbG9wbWVudCBwcm9qZWN0IGlzIGluIHRoZSByZXN1bHRpbmcKK2NvZGUuICBJdCBpcyB0aGUgY29kZSB3aGljaCB3aWxsIGJlIGV4YW1pbmVkIGJ5IG90aGVyIGRldmVsb3BlcnMgYW5kIG1lcmdlZAorKG9yIG5vdCkgaW50byB0aGUgbWFpbmxpbmUgdHJlZS4gIFNvIGl0IGlzIHRoZSBxdWFsaXR5IG9mIHRoaXMgY29kZSB3aGljaAord2lsbCBkZXRlcm1pbmUgdGhlIHVsdGltYXRlIHN1Y2Nlc3Mgb2YgdGhlIHByb2plY3QuCisKK1RoaXMgc2VjdGlvbiB3aWxsIGV4YW1pbmUgdGhlIGNvZGluZyBwcm9jZXNzLiAgV2UnbGwgc3RhcnQgd2l0aCBhIGxvb2sgYXQgYQorbnVtYmVyIG9mIHdheXMgaW4gd2hpY2gga2VybmVsIGRldmVsb3BlcnMgY2FuIGdvIHdyb25nLiAgVGhlbiB0aGUgZm9jdXMKK3dpbGwgc2hpZnQgdG93YXJkIGRvaW5nIHRoaW5ncyByaWdodCBhbmQgdGhlIHRvb2xzIHdoaWNoIGNhbiBoZWxwIGluIHRoYXQKK3F1ZXN0LgorCisKKzQuMTogUElURkFMTFMKKworKiBDb2Rpbmcgc3R5bGUKKworVGhlIGtlcm5lbCBoYXMgbG9uZyBoYWQgYSBzdGFuZGFyZCBjb2Rpbmcgc3R5bGUsIGRlc2NyaWJlZCBpbgorRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZS4gIEZvciBtdWNoIG9mIHRoYXQgdGltZSwgdGhlIHBvbGljaWVzIGRlc2NyaWJlZAoraW4gdGhhdCBmaWxlIHdlcmUgdGFrZW4gYXMgYmVpbmcsIGF0IG1vc3QsIGFkdmlzb3J5LiAgQXMgYSByZXN1bHQsIHRoZXJlIGlzCithIHN1YnN0YW50aWFsIGFtb3VudCBvZiBjb2RlIGluIHRoZSBrZXJuZWwgd2hpY2ggZG9lcyBub3QgbWVldCB0aGUgY29kaW5nCitzdHlsZSBndWlkZWxpbmVzLiAgVGhlIHByZXNlbmNlIG9mIHRoYXQgY29kZSBsZWFkcyB0byB0d28gaW5kZXBlbmRlbnQKK2hhemFyZHMgZm9yIGtlcm5lbCBkZXZlbG9wZXJzLgorCitUaGUgZmlyc3Qgb2YgdGhlc2UgaXMgdG8gYmVsaWV2ZSB0aGF0IHRoZSBrZXJuZWwgY29kaW5nIHN0YW5kYXJkcyBkbyBub3QKK21hdHRlciBhbmQgYXJlIG5vdCBlbmZvcmNlZC4gIFRoZSB0cnV0aCBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgYWRkaW5nIG5ldworY29kZSB0byB0aGUga2VybmVsIGlzIHZlcnkgZGlmZmljdWx0IGlmIHRoYXQgY29kZSBpcyBub3QgY29kZWQgYWNjb3JkaW5nIHRvCit0aGUgc3RhbmRhcmQ7IG1hbnkgZGV2ZWxvcGVycyB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY29kZSBiZSByZWZvcm1hdHRlZAorYmVmb3JlIHRoZXkgd2lsbCBldmVuIHJldmlldyBpdC4gIEEgY29kZSBiYXNlIGFzIGxhcmdlIGFzIHRoZSBrZXJuZWwKK3JlcXVpcmVzIHNvbWUgdW5pZm9ybWl0eSBvZiBjb2RlIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIGRldmVsb3BlcnMgdG8KK3F1aWNrbHkgdW5kZXJzdGFuZCBhbnkgcGFydCBvZiBpdC4gIFNvIHRoZXJlIGlzIG5vIGxvbmdlciByb29tIGZvcgorc3RyYW5nZWx5LWZvcm1hdHRlZCBjb2RlLgorCitPY2Nhc2lvbmFsbHksIHRoZSBrZXJuZWwncyBjb2Rpbmcgc3R5bGUgd2lsbCBydW4gaW50byBjb25mbGljdCB3aXRoIGFuCitlbXBsb3llcidzIG1hbmRhdGVkIHN0eWxlLiAgSW4gc3VjaCBjYXNlcywgdGhlIGtlcm5lbCdzIHN0eWxlIHdpbGwgaGF2ZSB0bword2luIGJlZm9yZSB0aGUgY29kZSBjYW4gYmUgbWVyZ2VkLiAgUHV0dGluZyBjb2RlIGludG8gdGhlIGtlcm5lbCBtZWFucworZ2l2aW5nIHVwIGEgZGVncmVlIG9mIGNvbnRyb2wgaW4gYSBudW1iZXIgb2Ygd2F5cyAtIGluY2x1ZGluZyBjb250cm9sIG92ZXIKK2hvdyB0aGUgY29kZSBpcyBmb3JtYXR0ZWQuCisKK1RoZSBvdGhlciB0cmFwIGlzIHRvIGFzc3VtZSB0aGF0IGNvZGUgd2hpY2ggaXMgYWxyZWFkeSBpbiB0aGUga2VybmVsIGlzCit1cmdlbnRseSBpbiBuZWVkIG9mIGNvZGluZyBzdHlsZSBmaXhlcy4gIERldmVsb3BlcnMgbWF5IHN0YXJ0IHRvIGdlbmVyYXRlCityZWZvcm1hdHRpbmcgcGF0Y2hlcyBhcyBhIHdheSBvZiBnYWluaW5nIGZhbWlsaWFyaXR5IHdpdGggdGhlIHByb2Nlc3MsIG9yCithcyBhIHdheSBvZiBnZXR0aW5nIHRoZWlyIG5hbWUgaW50byB0aGUga2VybmVsIGNoYW5nZWxvZ3MgLSBvciBib3RoLiAgQnV0CitwdXJlIGNvZGluZyBzdHlsZSBmaXhlcyBhcmUgc2VlbiBhcyBub2lzZSBieSB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5OwordGhleSB0ZW5kIHRvIGdldCBhIGNoaWxseSByZWNlcHRpb24uICBTbyB0aGlzIHR5cGUgb2YgcGF0Y2ggaXMgYmVzdAorYXZvaWRlZC4gIEl0IGlzIG5hdHVyYWwgdG8gZml4IHRoZSBzdHlsZSBvZiBhIHBpZWNlIG9mIGNvZGUgd2hpbGUgd29ya2luZworb24gaXQgZm9yIG90aGVyIHJlYXNvbnMsIGJ1dCBjb2Rpbmcgc3R5bGUgY2hhbmdlcyBzaG91bGQgbm90IGJlIG1hZGUgZm9yCit0aGVpciBvd24gc2FrZS4KKworVGhlIGNvZGluZyBzdHlsZSBkb2N1bWVudCBhbHNvIHNob3VsZCBub3QgYmUgcmVhZCBhcyBhbiBhYnNvbHV0ZSBsYXcgd2hpY2gKK2NhbiBuZXZlciBiZSB0cmFuc2dyZXNzZWQuICBJZiB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIHRvIGdvIGFnYWluc3QgdGhlCitzdHlsZSAoYSBsaW5lIHdoaWNoIGJlY29tZXMgZmFyIGxlc3MgcmVhZGFibGUgaWYgc3BsaXQgdG8gZml0IHdpdGhpbiB0aGUKKzgwLWNvbHVtbiBsaW1pdCwgZm9yIGV4YW1wbGUpLCBqdXN0IGRvIGl0LgorCisKKyogQWJzdHJhY3Rpb24gbGF5ZXJzCisKK0NvbXB1dGVyIFNjaWVuY2UgcHJvZmVzc29ycyB0ZWFjaCBzdHVkZW50cyB0byBtYWtlIGV4dGVuc2l2ZSB1c2Ugb2YKK2Fic3RyYWN0aW9uIGxheWVycyBpbiB0aGUgbmFtZSBvZiBmbGV4aWJpbGl0eSBhbmQgaW5mb3JtYXRpb24gaGlkaW5nLgorQ2VydGFpbmx5IHRoZSBrZXJuZWwgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZiBhYnN0cmFjdGlvbjsgbm8gcHJvamVjdAoraW52b2x2aW5nIHNldmVyYWwgbWlsbGlvbiBsaW5lcyBvZiBjb2RlIGNvdWxkIGRvIG90aGVyd2lzZSBhbmQgc3Vydml2ZS4KK0J1dCBleHBlcmllbmNlIGhhcyBzaG93biB0aGF0IGV4Y2Vzc2l2ZSBvciBwcmVtYXR1cmUgYWJzdHJhY3Rpb24gY2FuIGJlCitqdXN0IGFzIGhhcm1mdWwgYXMgcHJlbWF0dXJlIG9wdGltaXphdGlvbi4gIEFic3RyYWN0aW9uIHNob3VsZCBiZSB1c2VkIHRvCit0aGUgbGV2ZWwgcmVxdWlyZWQgYW5kIG5vIGZ1cnRoZXIuCisKK0F0IGEgc2ltcGxlIGxldmVsLCBjb25zaWRlciBhIGZ1bmN0aW9uIHdoaWNoIGhhcyBhbiBhcmd1bWVudCB3aGljaCBpcworYWx3YXlzIHBhc3NlZCBhcyB6ZXJvIGJ5IGFsbCBjYWxsZXJzLiAgT25lIGNvdWxkIHJldGFpbiB0aGF0IGFyZ3VtZW50IGp1c3QKK2luIGNhc2Ugc29tZWJvZHkgZXZlbnR1YWxseSBuZWVkcyB0byB1c2UgdGhlIGV4dHJhIGZsZXhpYmlsaXR5IHRoYXQgaXQKK3Byb3ZpZGVzLiAgQnkgdGhhdCB0aW1lLCB0aG91Z2gsIGNoYW5jZXMgYXJlIGdvb2QgdGhhdCB0aGUgY29kZSB3aGljaAoraW1wbGVtZW50cyB0aGlzIGV4dHJhIGFyZ3VtZW50IGhhcyBiZWVuIGJyb2tlbiBpbiBzb21lIHN1YnRsZSB3YXkgd2hpY2ggd2FzCituZXZlciBub3RpY2VkIC0gYmVjYXVzZSBpdCBoYXMgbmV2ZXIgYmVlbiB1c2VkLiAgT3IsIHdoZW4gdGhlIG5lZWQgZm9yCitleHRyYSBmbGV4aWJpbGl0eSBhcmlzZXMsIGl0IGRvZXMgbm90IGRvIHNvIGluIGEgd2F5IHdoaWNoIG1hdGNoZXMgdGhlCitwcm9ncmFtbWVyJ3MgZWFybHkgZXhwZWN0YXRpb24uICBLZXJuZWwgZGV2ZWxvcGVycyB3aWxsIHJvdXRpbmVseSBzdWJtaXQKK3BhdGNoZXMgdG8gcmVtb3ZlIHVudXNlZCBhcmd1bWVudHM7IHRoZXkgc2hvdWxkLCBpbiBnZW5lcmFsLCBub3QgYmUgYWRkZWQKK2luIHRoZSBmaXJzdCBwbGFjZS4KKworQWJzdHJhY3Rpb24gbGF5ZXJzIHdoaWNoIGhpZGUgYWNjZXNzIHRvIGhhcmR3YXJlIC0gb2Z0ZW4gdG8gYWxsb3cgdGhlIGJ1bGsKK29mIGEgZHJpdmVyIHRvIGJlIHVzZWQgd2l0aCBtdWx0aXBsZSBvcGVyYXRpbmcgc3lzdGVtcyAtIGFyZSBlc3BlY2lhbGx5Citmcm93bmVkIHVwb24uICBTdWNoIGxheWVycyBvYnNjdXJlIHRoZSBjb2RlIGFuZCBtYXkgaW1wb3NlIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHk7IHRoZXkgZG8gbm90IGJlbG9uZyBpbiB0aGUgTGludXgga2VybmVsLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGZpbmQgeW91cnNlbGYgY29weWluZyBzaWduaWZpY2FudCBhbW91bnRzIG9mIGNvZGUKK2Zyb20gYW5vdGhlciBrZXJuZWwgc3Vic3lzdGVtLCBpdCBpcyB0aW1lIHRvIGFzayB3aGV0aGVyIGl0IHdvdWxkLCBpbiBmYWN0LAorbWFrZSBzZW5zZSB0byBwdWxsIG91dCBzb21lIG9mIHRoYXQgY29kZSBpbnRvIGEgc2VwYXJhdGUgbGlicmFyeSBvciB0bworaW1wbGVtZW50IHRoYXQgZnVuY3Rpb25hbGl0eSBhdCBhIGhpZ2hlciBsZXZlbC4gIFRoZXJlIGlzIG5vIHZhbHVlIGluCityZXBsaWNhdGluZyB0aGUgc2FtZSBjb2RlIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4KKworCisqICNpZmRlZiBhbmQgcHJlcHJvY2Vzc29yIHVzZSBpbiBnZW5lcmFsCisKK1RoZSBDIHByZXByb2Nlc3NvciBzZWVtcyB0byBwcmVzZW50IGEgcG93ZXJmdWwgdGVtcHRhdGlvbiB0byBzb21lIEMKK3Byb2dyYW1tZXJzLCB3aG8gc2VlIGl0IGFzIGEgd2F5IHRvIGVmZmljaWVudGx5IGVuY29kZSBhIGdyZWF0IGRlYWwgb2YKK2ZsZXhpYmlsaXR5IGludG8gYSBzb3VyY2UgZmlsZS4gIEJ1dCB0aGUgcHJlcHJvY2Vzc29yIGlzIG5vdCBDLCBhbmQgaGVhdnkKK3VzZSBvZiBpdCByZXN1bHRzIGluIGNvZGUgd2hpY2ggaXMgbXVjaCBoYXJkZXIgZm9yIG90aGVycyB0byByZWFkIGFuZAoraGFyZGVyIGZvciB0aGUgY29tcGlsZXIgdG8gY2hlY2sgZm9yIGNvcnJlY3RuZXNzLiAgSGVhdnkgcHJlcHJvY2Vzc29yIHVzZQoraXMgYWxtb3N0IGFsd2F5cyBhIHNpZ24gb2YgY29kZSB3aGljaCBuZWVkcyBzb21lIGNsZWFudXAgd29yay4KKworQ29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aCAjaWZkZWYgaXMsIGluZGVlZCwgYSBwb3dlcmZ1bCBmZWF0dXJlLCBhbmQgaXQKK2lzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuICBCdXQgdGhlcmUgaXMgbGl0dGxlIGRlc2lyZSB0byBzZWUgY29kZSB3aGljaCBpcworc3ByaW5rbGVkIGxpYmVyYWxseSB3aXRoICNpZmRlZiBibG9ja3MuICBBcyBhIGdlbmVyYWwgcnVsZSwgI2lmZGVmIHVzZQorc2hvdWxkIGJlIGNvbmZpbmVkIHRvIGhlYWRlciBmaWxlcyB3aGVuZXZlciBwb3NzaWJsZS4KK0NvbmRpdGlvbmFsbHktY29tcGlsZWQgY29kZSBjYW4gYmUgY29uZmluZWQgdG8gZnVuY3Rpb25zIHdoaWNoLCBpZiB0aGUgY29kZQoraXMgbm90IHRvIGJlIHByZXNlbnQsIHNpbXBseSBiZWNvbWUgZW1wdHkuICBUaGUgY29tcGlsZXIgd2lsbCB0aGVuIHF1aWV0bHkKK29wdGltaXplIG91dCB0aGUgY2FsbCB0byB0aGUgZW1wdHkgZnVuY3Rpb24uICBUaGUgcmVzdWx0IGlzIGZhciBjbGVhbmVyCitjb2RlIHdoaWNoIGlzIGVhc2llciB0byBmb2xsb3cuCisKK0MgcHJlcHJvY2Vzc29yIG1hY3JvcyBwcmVzZW50IGEgbnVtYmVyIG9mIGhhemFyZHMsIGluY2x1ZGluZyBwb3NzaWJsZQorbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiBleHByZXNzaW9ucyB3aXRoIHNpZGUgZWZmZWN0cyBhbmQgbm8gdHlwZSBzYWZldHkuCitJZiB5b3UgYXJlIHRlbXB0ZWQgdG8gZGVmaW5lIGEgbWFjcm8sIGNvbnNpZGVyIGNyZWF0aW5nIGFuIGlubGluZSBmdW5jdGlvbgoraW5zdGVhZC4gIFRoZSBjb2RlIHdoaWNoIHJlc3VsdHMgd2lsbCBiZSB0aGUgc2FtZSwgYnV0IGlubGluZSBmdW5jdGlvbnMgYXJlCitlYXNpZXIgdG8gcmVhZCwgZG8gbm90IGV2YWx1YXRlIHRoZWlyIGFyZ3VtZW50cyBtdWx0aXBsZSB0aW1lcywgYW5kIGFsbG93Cit0aGUgY29tcGlsZXIgdG8gcGVyZm9ybSB0eXBlIGNoZWNraW5nIG9uIHRoZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZS4KKworCisqIElubGluZSBmdW5jdGlvbnMKKworSW5saW5lIGZ1bmN0aW9ucyBwcmVzZW50IGEgaGF6YXJkIG9mIHRoZWlyIG93biwgdGhvdWdoLiAgUHJvZ3JhbW1lcnMgY2FuCitiZWNvbWUgZW5hbW9yZWQgb2YgdGhlIHBlcmNlaXZlZCBlZmZpY2llbmN5IGluaGVyZW50IGluIGF2b2lkaW5nIGEgZnVuY3Rpb24KK2NhbGwgYW5kIGZpbGwgYSBzb3VyY2UgZmlsZSB3aXRoIGlubGluZSBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMsCitob3dldmVyLCBjYW4gYWN0dWFsbHkgcmVkdWNlIHBlcmZvcm1hbmNlLiAgU2luY2UgdGhlaXIgY29kZSBpcyByZXBsaWNhdGVkCithdCBlYWNoIGNhbGwgc2l0ZSwgdGhleSBlbmQgdXAgYmxvYXRpbmcgdGhlIHNpemUgb2YgdGhlIGNvbXBpbGVkIGtlcm5lbC4KK1RoYXQsIGluIHR1cm4sIGNyZWF0ZXMgcHJlc3N1cmUgb24gdGhlIHByb2Nlc3NvcidzIG1lbW9yeSBjYWNoZXMsIHdoaWNoIGNhbgorc2xvdyBleGVjdXRpb24gZHJhbWF0aWNhbGx5LiAgSW5saW5lIGZ1bmN0aW9ucywgYXMgYSBydWxlLCBzaG91bGQgYmUgcXVpdGUKK3NtYWxsIGFuZCByZWxhdGl2ZWx5IHJhcmUuICBUaGUgY29zdCBvZiBhIGZ1bmN0aW9uIGNhbGwsIGFmdGVyIGFsbCwgaXMgbm90Cit0aGF0IGhpZ2g7IHRoZSBjcmVhdGlvbiBvZiBsYXJnZSBudW1iZXJzIG9mIGlubGluZSBmdW5jdGlvbnMgaXMgYSBjbGFzc2ljCitleGFtcGxlIG9mIHByZW1hdHVyZSBvcHRpbWl6YXRpb24uCisKK0luIGdlbmVyYWwsIGtlcm5lbCBwcm9ncmFtbWVycyBpZ25vcmUgY2FjaGUgZWZmZWN0cyBhdCB0aGVpciBwZXJpbC4gIFRoZQorY2xhc3NpYyB0aW1lL3NwYWNlIHRyYWRlb2ZmIHRhdWdodCBpbiBiZWdpbm5pbmcgZGF0YSBzdHJ1Y3R1cmVzIGNsYXNzZXMKK29mdGVuIGRvZXMgbm90IGFwcGx5IHRvIGNvbnRlbXBvcmFyeSBoYXJkd2FyZS4gIFNwYWNlICppcyogdGltZSwgaW4gdGhhdCBhCitsYXJnZXIgcHJvZ3JhbSB3aWxsIHJ1biBzbG93ZXIgdGhhbiBvbmUgd2hpY2ggaXMgbW9yZSBjb21wYWN0LgorCisKKyogTG9ja2luZworCitJbiBNYXksIDIwMDYsIHRoZSAiRGV2aWNlc2NhcGUiIG5ldHdvcmtpbmcgc3RhY2sgd2FzLCB3aXRoIGdyZWF0CitmYW5mYXJlLCByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGFuZCBtYWRlIGF2YWlsYWJsZSBmb3IgaW5jbHVzaW9uIGluIHRoZQorbWFpbmxpbmUga2VybmVsLiAgVGhpcyBkb25hdGlvbiB3YXMgd2VsY29tZSBuZXdzOyBzdXBwb3J0IGZvciB3aXJlbGVzcworbmV0d29ya2luZyBpbiBMaW51eCB3YXMgY29uc2lkZXJlZCBzdWJzdGFuZGFyZCBhdCBiZXN0LCBhbmQgdGhlIERldmljZXNjYXBlCitzdGFjayBvZmZlcmVkIHRoZSBwcm9taXNlIG9mIGZpeGluZyB0aGF0IHNpdHVhdGlvbi4gIFlldCwgdGhpcyBjb2RlIGRpZCBub3QKK2FjdHVhbGx5IG1ha2UgaXQgaW50byB0aGUgbWFpbmxpbmUgdW50aWwgSnVuZSwgMjAwNyAoMi42LjIyKS4gIFdoYXQKK2hhcHBlbmVkPworCitUaGlzIGNvZGUgc2hvd2VkIGEgbnVtYmVyIG9mIHNpZ25zIG9mIGhhdmluZyBiZWVuIGRldmVsb3BlZCBiZWhpbmQKK2NvcnBvcmF0ZSBkb29ycy4gIEJ1dCBvbmUgbGFyZ2UgcHJvYmxlbSBpbiBwYXJ0aWN1bGFyIHdhcyB0aGF0IGl0IHdhcyBub3QKK2Rlc2lnbmVkIHRvIHdvcmsgb24gbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4gIEJlZm9yZSB0aGlzIG5ldHdvcmtpbmcgc3RhY2sKKyhub3cgY2FsbGVkIG1hYzgwMjExKSBjb3VsZCBiZSBtZXJnZWQsIGEgbG9ja2luZyBzY2hlbWUgbmVlZGVkIHRvIGJlCityZXRyb2ZpdHRlZCBvbnRvIGl0LiAgCisKK09uY2UgdXBvbiBhIHRpbWUsIExpbnV4IGtlcm5lbCBjb2RlIGNvdWxkIGJlIGRldmVsb3BlZCB3aXRob3V0IHRoaW5raW5nCithYm91dCB0aGUgY29uY3VycmVuY3kgaXNzdWVzIHByZXNlbnRlZCBieSBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zLiAgTm93LAoraG93ZXZlciwgdGhpcyBkb2N1bWVudCBpcyBiZWluZyB3cml0dGVuIG9uIGEgZHVhbC1jb3JlIGxhcHRvcC4gIEV2ZW4gb24KK3NpbmdsZS1wcm9jZXNzb3Igc3lzdGVtcywgd29yayBiZWluZyBkb25lIHRvIGltcHJvdmUgcmVzcG9uc2l2ZW5lc3Mgd2lsbAorcmFpc2UgdGhlIGxldmVsIG9mIGNvbmN1cnJlbmN5IHdpdGhpbiB0aGUga2VybmVsLiAgVGhlIGRheXMgd2hlbiBrZXJuZWwKK2NvZGUgY291bGQgYmUgd3JpdHRlbiB3aXRob3V0IHRoaW5raW5nIGFib3V0IGxvY2tpbmcgYXJlIGxvbmcgcGFzdC4KKworQW55IHJlc291cmNlIChkYXRhIHN0cnVjdHVyZXMsIGhhcmR3YXJlIHJlZ2lzdGVycywgZXRjLikgd2hpY2ggY291bGQgYmUKK2FjY2Vzc2VkIGNvbmN1cnJlbnRseSBieSBtb3JlIHRoYW4gb25lIHRocmVhZCBtdXN0IGJlIHByb3RlY3RlZCBieSBhIGxvY2suCitOZXcgY29kZSBzaG91bGQgYmUgd3JpdHRlbiB3aXRoIHRoaXMgcmVxdWlyZW1lbnQgaW4gbWluZDsgcmV0cm9maXR0aW5nCitsb2NraW5nIGFmdGVyIHRoZSBmYWN0IGlzIGEgcmF0aGVyIG1vcmUgZGlmZmljdWx0IHRhc2suICBLZXJuZWwgZGV2ZWxvcGVycworc2hvdWxkIHRha2UgdGhlIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGxvY2tpbmcgcHJpbWl0aXZlcyB3ZWxsCitlbm91Z2ggdG8gcGljayB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gIENvZGUgd2hpY2ggc2hvd3MgYSBsYWNrIG9mCithdHRlbnRpb24gdG8gY29uY3VycmVuY3kgd2lsbCBoYXZlIGEgZGlmZmljdWx0IHBhdGggaW50byB0aGUgbWFpbmxpbmUuCisKKworKiBSZWdyZXNzaW9ucworCitPbmUgZmluYWwgaGF6YXJkIHdvcnRoIG1lbnRpb25pbmcgaXMgdGhpczogaXQgY2FuIGJlIHRlbXB0aW5nIHRvIG1ha2UgYQorY2hhbmdlICh3aGljaCBtYXkgYnJpbmcgYmlnIGltcHJvdmVtZW50cykgd2hpY2ggY2F1c2VzIHNvbWV0aGluZyB0byBicmVhaworZm9yIGV4aXN0aW5nIHVzZXJzLiAgVGhpcyBraW5kIG9mIGNoYW5nZSBpcyBjYWxsZWQgYSAicmVncmVzc2lvbiwiIGFuZAorcmVncmVzc2lvbnMgaGF2ZSBiZWNvbWUgbW9zdCB1bndlbGNvbWUgaW4gdGhlIG1haW5saW5lIGtlcm5lbC4gIFdpdGggZmV3CitleGNlcHRpb25zLCBjaGFuZ2VzIHdoaWNoIGNhdXNlIHJlZ3Jlc3Npb25zIHdpbGwgYmUgYmFja2VkIG91dCBpZiB0aGUKK3JlZ3Jlc3Npb24gY2Fubm90IGJlIGZpeGVkIGluIGEgdGltZWx5IG1hbm5lci4gIEZhciBiZXR0ZXIgdG8gYXZvaWQgdGhlCityZWdyZXNzaW9uIGluIHRoZSBmaXJzdCBwbGFjZS4KKworSXQgaXMgb2Z0ZW4gYXJndWVkIHRoYXQgYSByZWdyZXNzaW9uIGNhbiBiZSBqdXN0aWZpZWQgaWYgaXQgY2F1c2VzIHRoaW5ncwordG8gd29yayBmb3IgbW9yZSBwZW9wbGUgdGhhbiBpdCBjcmVhdGVzIHByb2JsZW1zIGZvci4gIFdoeSBub3QgbWFrZSBhCitjaGFuZ2UgaWYgaXQgYnJpbmdzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIHRlbiBzeXN0ZW1zIGZvciBlYWNoIG9uZSBpdAorYnJlYWtzPyAgVGhlIGJlc3QgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gd2FzIGV4cHJlc3NlZCBieSBMaW51cyBpbiBKdWx5LAorMjAwNzoKKworCVNvIHdlIGRvbid0IGZpeCBidWdzIGJ5IGludHJvZHVjaW5nIG5ldyBwcm9ibGVtcy4gIFRoYXQgd2F5IGxpZXMKKwltYWRuZXNzLCBhbmQgbm9ib2R5IGV2ZXIga25vd3MgaWYgeW91IGFjdHVhbGx5IG1ha2UgYW55IHJlYWwKKwlwcm9ncmVzcyBhdCBhbGwuIElzIGl0IHR3byBzdGVwcyBmb3J3YXJkcywgb25lIHN0ZXAgYmFjaywgb3Igb25lCisJc3RlcCBmb3J3YXJkIGFuZCB0d28gc3RlcHMgYmFjaz8KKworKGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI0MzQ2MC8pLgorCitBbiBlc3BlY2lhbGx5IHVud2VsY29tZSB0eXBlIG9mIHJlZ3Jlc3Npb24gaXMgYW55IHNvcnQgb2YgY2hhbmdlIHRvIHRoZQordXNlci1zcGFjZSBBQkkuICBPbmNlIGFuIGludGVyZmFjZSBoYXMgYmVlbiBleHBvcnRlZCB0byB1c2VyIHNwYWNlLCBpdCBtdXN0CitiZSBzdXBwb3J0ZWQgaW5kZWZpbml0ZWx5LiAgVGhpcyBmYWN0IG1ha2VzIHRoZSBjcmVhdGlvbiBvZiB1c2VyLXNwYWNlCitpbnRlcmZhY2VzIHBhcnRpY3VsYXJseSBjaGFsbGVuZ2luZzogc2luY2UgdGhleSBjYW5ub3QgYmUgY2hhbmdlZCBpbgoraW5jb21wYXRpYmxlIHdheXMsIHRoZXkgbXVzdCBiZSBkb25lIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLiAgRm9yIHRoaXMKK3JlYXNvbiwgYSBncmVhdCBkZWFsIG9mIHRob3VnaHQsIGNsZWFyIGRvY3VtZW50YXRpb24sIGFuZCB3aWRlIHJldmlldyBmb3IKK3VzZXItc3BhY2UgaW50ZXJmYWNlcyBpcyBhbHdheXMgcmVxdWlyZWQuCisKKworCis0LjI6IENPREUgQ0hFQ0tJTkcgVE9PTFMKKworRm9yIG5vdywgYXQgbGVhc3QsIHRoZSB3cml0aW5nIG9mIGVycm9yLWZyZWUgY29kZSByZW1haW5zIGFuIGlkZWFsIHRoYXQgZmV3CitvZiB1cyBjYW4gcmVhY2guICBXaGF0IHdlIGNhbiBob3BlIHRvIGRvLCB0aG91Z2gsIGlzIHRvIGNhdGNoIGFuZCBmaXggYXMKK21hbnkgb2YgdGhvc2UgZXJyb3JzIGFzIHBvc3NpYmxlIGJlZm9yZSBvdXIgY29kZSBnb2VzIGludG8gdGhlIG1haW5saW5lCitrZXJuZWwuICBUbyB0aGF0IGVuZCwgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgcHV0IHRvZ2V0aGVyIGFuIGltcHJlc3NpdmUKK2FycmF5IG9mIHRvb2xzIHdoaWNoIGNhbiBjYXRjaCBhIHdpZGUgdmFyaWV0eSBvZiBvYnNjdXJlIHByb2JsZW1zIGluIGFuCithdXRvbWF0ZWQgd2F5LiAgQW55IHByb2JsZW0gY2F1Z2h0IGJ5IHRoZSBjb21wdXRlciBpcyBhIHByb2JsZW0gd2hpY2ggd2lsbAorbm90IGFmZmxpY3QgYSB1c2VyIGxhdGVyIG9uLCBzbyBpdCBzdGFuZHMgdG8gcmVhc29uIHRoYXQgdGhlIGF1dG9tYXRlZAordG9vbHMgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUuCisKK1RoZSBmaXJzdCBzdGVwIGlzIHNpbXBseSB0byBoZWVkIHRoZSB3YXJuaW5ncyBwcm9kdWNlZCBieSB0aGUgY29tcGlsZXIuCitDb250ZW1wb3JhcnkgdmVyc2lvbnMgb2YgZ2NjIGNhbiBkZXRlY3QgKGFuZCB3YXJuIGFib3V0KSBhIGxhcmdlIG51bWJlciBvZgorcG90ZW50aWFsIGVycm9ycy4gIFF1aXRlIG9mdGVuLCB0aGVzZSB3YXJuaW5ncyBwb2ludCB0byByZWFsIHByb2JsZW1zLgorQ29kZSBzdWJtaXR0ZWQgZm9yIHJldmlldyBzaG91bGQsIGFzIGEgcnVsZSwgbm90IHByb2R1Y2UgYW55IGNvbXBpbGVyCit3YXJuaW5ncy4gIFdoZW4gc2lsZW5jaW5nIHdhcm5pbmdzLCB0YWtlIGNhcmUgdG8gdW5kZXJzdGFuZCB0aGUgcmVhbCBjYXVzZQorYW5kIHRyeSB0byBhdm9pZCAiZml4ZXMiIHdoaWNoIG1ha2UgdGhlIHdhcm5pbmcgZ28gYXdheSB3aXRob3V0IGFkZHJlc3NpbmcKK2l0cyBjYXVzZS4KKworTm90ZSB0aGF0IG5vdCBhbGwgY29tcGlsZXIgd2FybmluZ3MgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gIEJ1aWxkIHRoZQora2VybmVsIHdpdGggIm1ha2UgRVhUUkFfQ0ZMQUdTPS1XIiB0byBnZXQgdGhlIGZ1bGwgc2V0LgorCitUaGUga2VybmVsIHByb3ZpZGVzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoIHR1cm4gb24gZGVidWdnaW5nCitmZWF0dXJlczsgbW9zdCBvZiB0aGVzZSBhcmUgZm91bmQgaW4gdGhlICJrZXJuZWwgaGFja2luZyIgc3VibWVudS4gIFNldmVyYWwKK29mIHRoZXNlIG9wdGlvbnMgc2hvdWxkIGJlIHR1cm5lZCBvbiBmb3IgYW55IGtlcm5lbCB1c2VkIGZvciBkZXZlbG9wbWVudCBvcgordGVzdGluZyBwdXJwb3Nlcy4gIEluIHBhcnRpY3VsYXIsIHlvdSBzaG91bGQgdHVybiBvbjoKKworIC0gRU5BQkxFX1dBUk5fREVQUkVDQVRFRCwgRU5BQkxFX01VU1RfQ0hFQ0ssIGFuZCBGUkFNRV9XQVJOIHRvIGdldCBhbgorICAgZXh0cmEgc2V0IG9mIHdhcm5pbmdzIGZvciBwcm9ibGVtcyBsaWtlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBpbnRlcmZhY2VzCisgICBvciBpZ25vcmluZyBhbiBpbXBvcnRhbnQgcmV0dXJuIHZhbHVlIGZyb20gYSBmdW5jdGlvbi4gIFRoZSBvdXRwdXQKKyAgIGdlbmVyYXRlZCBieSB0aGVzZSB3YXJuaW5ncyBjYW4gYmUgdmVyYm9zZSwgYnV0IG9uZSBuZWVkIG5vdCB3b3JyeSBhYm91dAorICAgd2FybmluZ3MgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorCisgLSBERUJVR19PQkpFQ1RTIHdpbGwgYWRkIGNvZGUgdG8gdHJhY2sgdGhlIGxpZmV0aW1lIG9mIHZhcmlvdXMgb2JqZWN0cworICAgY3JlYXRlZCBieSB0aGUga2VybmVsIGFuZCB3YXJuIHdoZW4gdGhpbmdzIGFyZSBkb25lIG91dCBvZiBvcmRlci4gIElmCisgICB5b3UgYXJlIGFkZGluZyBhIHN1YnN5c3RlbSB3aGljaCBjcmVhdGVzIChhbmQgZXhwb3J0cykgY29tcGxleCBvYmplY3RzCisgICBvZiBpdHMgb3duLCBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIG9iamVjdCBkZWJ1Z2dpbmcKKyAgIGluZnJhc3RydWN0dXJlLgorCisgLSBERUJVR19TTEFCIGNhbiBmaW5kIGEgdmFyaWV0eSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdXNlIGVycm9yczsgaXQKKyAgIHNob3VsZCBiZSB1c2VkIG9uIG1vc3QgZGV2ZWxvcG1lbnQga2VybmVscy4KKworIC0gREVCVUdfU1BJTkxPQ0ssIERFQlVHX1NQSU5MT0NLX1NMRUVQLCBhbmQgREVCVUdfTVVURVhFUyB3aWxsIGZpbmQgYQorICAgbnVtYmVyIG9mIGNvbW1vbiBsb2NraW5nIGVycm9ycy4KKworVGhlcmUgYXJlIHF1aXRlIGEgZmV3IG90aGVyIGRlYnVnZ2luZyBvcHRpb25zLCBzb21lIG9mIHdoaWNoIHdpbGwgYmUKK2Rpc2N1c3NlZCBiZWxvdy4gIFNvbWUgb2YgdGhlbSBoYXZlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0IGFuZAorc2hvdWxkIG5vdCBiZSB1c2VkIGFsbCBvZiB0aGUgdGltZS4gIEJ1dCBzb21lIHRpbWUgc3BlbnQgbGVhcm5pbmcgdGhlCithdmFpbGFibGUgb3B0aW9ucyB3aWxsIGxpa2VseSBiZSBwYWlkIGJhY2sgbWFueSB0aW1lcyBvdmVyIGluIHNob3J0IG9yZGVyLiAKKworT25lIG9mIHRoZSBoZWF2aWVyIGRlYnVnZ2luZyB0b29scyBpcyB0aGUgbG9ja2luZyBjaGVja2VyLCBvciAibG9ja2RlcC4iCitUaGlzIHRvb2wgd2lsbCB0cmFjayB0aGUgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2Ugb2YgZXZlcnkgbG9jayAoc3BpbmxvY2sgb3IKK211dGV4KSBpbiB0aGUgc3lzdGVtLCB0aGUgb3JkZXIgaW4gd2hpY2ggbG9ja3MgYXJlIGFjcXVpcmVkIHJlbGF0aXZlIHRvCitlYWNoIG90aGVyLCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW52aXJvbm1lbnQsIGFuZCBtb3JlLiAgSXQgY2FuIHRoZW4KK2Vuc3VyZSB0aGF0IGxvY2tzIGFyZSBhbHdheXMgYWNxdWlyZWQgaW4gdGhlIHNhbWUgb3JkZXIsIHRoYXQgdGhlIHNhbWUKK2ludGVycnVwdCBhc3N1bXB0aW9ucyBhcHBseSBpbiBhbGwgc2l0dWF0aW9ucywgYW5kIHNvIG9uLiAgSW4gb3RoZXIgd29yZHMsCitsb2NrZGVwIGNhbiBmaW5kIGEgbnVtYmVyIG9mIHNjZW5hcmlvcyBpbiB3aGljaCB0aGUgc3lzdGVtIGNvdWxkLCBvbiByYXJlCitvY2Nhc2lvbiwgZGVhZGxvY2suICBUaGlzIGtpbmQgb2YgcHJvYmxlbSBjYW4gYmUgcGFpbmZ1bCAoZm9yIGJvdGgKK2RldmVsb3BlcnMgYW5kIHVzZXJzKSBpbiBhIGRlcGxveWVkIHN5c3RlbTsgbG9ja2RlcCBhbGxvd3MgdGhlbSB0byBiZSBmb3VuZAoraW4gYW4gYXV0b21hdGVkIG1hbm5lciBhaGVhZCBvZiB0aW1lLiAgQ29kZSB3aXRoIGFueSBzb3J0IG9mIG5vbi10cml2aWFsCitsb2NraW5nIHNob3VsZCBiZSBydW4gd2l0aCBsb2NrZGVwIGVuYWJsZWQgYmVmb3JlIGJlaW5nIHN1Ym1pdHRlZCBmb3IKK2luY2x1c2lvbi4gCisKK0FzIGEgZGlsaWdlbnQga2VybmVsIHByb2dyYW1tZXIsIHlvdSB3aWxsLCBiZXlvbmQgZG91YnQsIGNoZWNrIHRoZSByZXR1cm4KK3N0YXR1cyBvZiBhbnkgb3BlcmF0aW9uIChzdWNoIGFzIGEgbWVtb3J5IGFsbG9jYXRpb24pIHdoaWNoIGNhbiBmYWlsLiAgVGhlCitmYWN0IG9mIHRoZSBtYXR0ZXIsIHRob3VnaCwgaXMgdGhhdCB0aGUgcmVzdWx0aW5nIGZhaWx1cmUgcmVjb3ZlcnkgcGF0aHMKK2FyZSwgcHJvYmFibHksIGNvbXBsZXRlbHkgdW50ZXN0ZWQuICBVbnRlc3RlZCBjb2RlIHRlbmRzIHRvIGJlIGJyb2tlbiBjb2RlOworeW91IGNvdWxkIGJlIG11Y2ggbW9yZSBjb25maWRlbnQgb2YgeW91ciBjb2RlIGlmIGFsbCB0aG9zZSBlcnJvci1oYW5kbGluZworcGF0aHMgaGFkIGJlZW4gZXhlcmNpc2VkIGEgZmV3IHRpbWVzLgorCitUaGUga2VybmVsIHByb3ZpZGVzIGEgZmF1bHQgaW5qZWN0aW9uIGZyYW1ld29yayB3aGljaCBjYW4gZG8gZXhhY3RseSB0aGF0LAorZXNwZWNpYWxseSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiAgV2l0aCBmYXVsdCBpbmplY3Rpb24KK2VuYWJsZWQsIGEgY29uZmlndXJhYmxlIHBlcmNlbnRhZ2Ugb2YgbWVtb3J5IGFsbG9jYXRpb25zIHdpbGwgYmUgbWFkZSB0bworZmFpbDsgdGhlc2UgZmFpbHVyZXMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gYSBzcGVjaWZpYyByYW5nZSBvZiBjb2RlLgorUnVubmluZyB3aXRoIGZhdWx0IGluamVjdGlvbiBlbmFibGVkIGFsbG93cyB0aGUgcHJvZ3JhbW1lciB0byBzZWUgaG93IHRoZQorY29kZSByZXNwb25kcyB3aGVuIHRoaW5ncyBnbyBiYWRseS4gIFNlZQorRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnRleHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KK2hvdyB0byB1c2UgdGhpcyBmYWNpbGl0eS4KKworT3RoZXIga2luZHMgb2YgZXJyb3JzIGNhbiBiZSBmb3VuZCB3aXRoIHRoZSAic3BhcnNlIiBzdGF0aWMgYW5hbHlzaXMgdG9vbC4KK1dpdGggc3BhcnNlLCB0aGUgcHJvZ3JhbW1lciBjYW4gYmUgd2FybmVkIGFib3V0IGNvbmZ1c2lvbiBiZXR3ZWVuCit1c2VyLXNwYWNlIGFuZCBrZXJuZWwtc3BhY2UgYWRkcmVzc2VzLCBtaXh0dXJlIG9mIGJpZy1lbmRpYW4gYW5kCitzbWFsbC1lbmRpYW4gcXVhbnRpdGllcywgdGhlIHBhc3Npbmcgb2YgaW50ZWdlciB2YWx1ZXMgd2hlcmUgYSBzZXQgb2YgYml0CitmbGFncyBpcyBleHBlY3RlZCwgYW5kIHNvIG9uLiAgU3BhcnNlIG11c3QgYmUgaW5zdGFsbGVkIHNlcGFyYXRlbHkgKGl0IGNhbgorYmUgZm91bmQgYXQgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9kZXZlbC9zcGFyc2UvIGlmIHlvdXIKK2Rpc3RyaWJ1dG9yIGRvZXMgbm90IHBhY2thZ2UgaXQpOyBpdCBjYW4gdGhlbiBiZSBydW4gb24gdGhlIGNvZGUgYnkgYWRkaW5nCisiQz0xIiB0byB5b3VyIG1ha2UgY29tbWFuZC4KKworT3RoZXIga2luZHMgb2YgcG9ydGFiaWxpdHkgZXJyb3JzIGFyZSBiZXN0IGZvdW5kIGJ5IGNvbXBpbGluZyB5b3VyIGNvZGUgZm9yCitvdGhlciBhcmNoaXRlY3R1cmVzLiAgSWYgeW91IGRvIG5vdCBoYXBwZW4gdG8gaGF2ZSBhbiBTLzM5MCBzeXN0ZW0gb3IgYQorQmxhY2tmaW4gZGV2ZWxvcG1lbnQgYm9hcmQgaGFuZHksIHlvdSBjYW4gc3RpbGwgcGVyZm9ybSB0aGUgY29tcGlsYXRpb24KK3N0ZXAuICBBIGxhcmdlIHNldCBvZiBjcm9zcyBjb21waWxlcnMgZm9yIHg4NiBzeXN0ZW1zIGNhbiBiZSBmb3VuZCBhdCAKKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvdG9vbHMvY3Jvc3N0b29sLworCitTb21lIHRpbWUgc3BlbnQgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlc2UgY29tcGlsZXJzIHdpbGwgaGVscCBhdm9pZAorZW1iYXJyYXNzbWVudCBsYXRlci4KKworCis0LjM6IERPQ1VNRU5UQVRJT04KKworRG9jdW1lbnRhdGlvbiBoYXMgb2Z0ZW4gYmVlbiBtb3JlIHRoZSBleGNlcHRpb24gdGhhbiB0aGUgcnVsZSB3aXRoIGtlcm5lbAorZGV2ZWxvcG1lbnQuICBFdmVuIHNvLCBhZGVxdWF0ZSBkb2N1bWVudGF0aW9uIHdpbGwgaGVscCB0byBlYXNlIHRoZSBtZXJnaW5nCitvZiBuZXcgY29kZSBpbnRvIHRoZSBrZXJuZWwsIG1ha2UgbGlmZSBlYXNpZXIgZm9yIG90aGVyIGRldmVsb3BlcnMsIGFuZAord2lsbCBiZSBoZWxwZnVsIGZvciB5b3VyIHVzZXJzLiAgSW4gbWFueSBjYXNlcywgdGhlIGFkZGl0aW9uIG9mCitkb2N1bWVudGF0aW9uIGhhcyBiZWNvbWUgZXNzZW50aWFsbHkgbWFuZGF0b3J5LgorCitUaGUgZmlyc3QgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHBhdGNoIGlzIGl0cyBhc3NvY2lhdGVkCitjaGFuZ2Vsb2cuICBMb2cgZW50cmllcyBzaG91bGQgZGVzY3JpYmUgdGhlIHByb2JsZW0gYmVpbmcgc29sdmVkLCB0aGUgZm9ybQorb2YgdGhlIHNvbHV0aW9uLCB0aGUgcGVvcGxlIHdobyB3b3JrZWQgb24gdGhlIHBhdGNoLCBhbnkgcmVsZXZhbnQKK2VmZmVjdHMgb24gcGVyZm9ybWFuY2UsIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgbmVlZGVkIHRvCit1bmRlcnN0YW5kIHRoZSBwYXRjaC4KKworQW55IGNvZGUgd2hpY2ggYWRkcyBhIG5ldyB1c2VyLXNwYWNlIGludGVyZmFjZSAtIGluY2x1ZGluZyBuZXcgc3lzZnMgb3IKKy9wcm9jIGZpbGVzIC0gc2hvdWxkIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGludGVyZmFjZSB3aGljaCBlbmFibGVzCit1c2VyLXNwYWNlIGRldmVsb3BlcnMgdG8ga25vdyB3aGF0IHRoZXkgYXJlIHdvcmtpbmcgd2l0aC4gIFNlZQorRG9jdW1lbnRhdGlvbi9BQkkvUkVBRE1FIGZvciBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGlzIGRvY3VtZW50YXRpb24gc2hvdWxkCitiZSBmb3JtYXR0ZWQgYW5kIHdoYXQgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgcHJvdmlkZWQuCisKK1RoZSBmaWxlIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGRlc2NyaWJlcyBhbGwgb2YgdGhlIGtlcm5lbCdzCitib290LXRpbWUgcGFyYW1ldGVycy4gIEFueSBwYXRjaCB3aGljaCBhZGRzIG5ldyBwYXJhbWV0ZXJzIHNob3VsZCBhZGQgdGhlCithcHByb3ByaWF0ZSBlbnRyaWVzIHRvIHRoaXMgZmlsZS4KKworQW55IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbXVzdCBiZSBhY2NvbXBhbmllZCBieSBoZWxwIHRleHQgd2hpY2gKK2NsZWFybHkgZXhwbGFpbnMgdGhlIG9wdGlvbnMgYW5kIHdoZW4gdGhlIHVzZXIgbWlnaHQgd2FudCB0byBzZWxlY3QgdGhlbS4gCisKK0ludGVybmFsIEFQSSBpbmZvcm1hdGlvbiBmb3IgbWFueSBzdWJzeXN0ZW1zIGlzIGRvY3VtZW50ZWQgYnkgd2F5IG9mCitzcGVjaWFsbHktZm9ybWF0dGVkIGNvbW1lbnRzOyB0aGVzZSBjb21tZW50cyBjYW4gYmUgZXh0cmFjdGVkIGFuZCBmb3JtYXR0ZWQKK2luIGEgbnVtYmVyIG9mIHdheXMgYnkgdGhlICJrZXJuZWwtZG9jIiBzY3JpcHQuICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aGluCithIHN1YnN5c3RlbSB3aGljaCBoYXMga2VybmVsZG9jIGNvbW1lbnRzLCB5b3Ugc2hvdWxkIG1haW50YWluIHRoZW0gYW5kIGFkZAordGhlbSwgYXMgYXBwcm9wcmlhdGUsIGZvciBleHRlcm5hbGx5LWF2YWlsYWJsZSBmdW5jdGlvbnMuICBFdmVuIGluIGFyZWFzCit3aGljaCBoYXZlIG5vdCBiZWVuIHNvIGRvY3VtZW50ZWQsIHRoZXJlIGlzIG5vIGhhcm0gaW4gYWRkaW5nIGtlcm5lbGRvYworY29tbWVudHMgZm9yIHRoZSBmdXR1cmU7IGluZGVlZCwgdGhpcyBjYW4gYmUgYSB1c2VmdWwgYWN0aXZpdHkgZm9yCitiZWdpbm5pbmcga2VybmVsIGRldmVsb3BlcnMuICBUaGUgZm9ybWF0IG9mIHRoZXNlIGNvbW1lbnRzLCBhbG9uZyB3aXRoIHNvbWUKK2luZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUga2VybmVsZG9jIHRlbXBsYXRlcyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUKK0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dC4KKworQW55Ym9keSB3aG8gcmVhZHMgdGhyb3VnaCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBleGlzdGluZyBrZXJuZWwgY29kZSB3aWxsCitub3RlIHRoYXQsIG9mdGVuLCBjb21tZW50cyBhcmUgbW9zdCBub3RhYmxlIGJ5IHRoZWlyIGFic2VuY2UuICBPbmNlIGFnYWluLAordGhlIGV4cGVjdGF0aW9ucyBmb3IgbmV3IGNvZGUgYXJlIGhpZ2hlciB0aGFuIHRoZXkgd2VyZSBpbiB0aGUgcGFzdDsKK21lcmdpbmcgdW5jb21tZW50ZWQgY29kZSB3aWxsIGJlIGhhcmRlci4gIFRoYXQgc2FpZCwgdGhlcmUgaXMgbGl0dGxlIGRlc2lyZQorZm9yIHZlcmJvc2VseS1jb21tZW50ZWQgY29kZS4gIFRoZSBjb2RlIHNob3VsZCwgaXRzZWxmLCBiZSByZWFkYWJsZSwgd2l0aAorY29tbWVudHMgZXhwbGFpbmluZyB0aGUgbW9yZSBzdWJ0bGUgYXNwZWN0cy4KKworQ2VydGFpbiB0aGluZ3Mgc2hvdWxkIGFsd2F5cyBiZSBjb21tZW50ZWQuICBVc2VzIG9mIG1lbW9yeSBiYXJyaWVycyBzaG91bGQKK2JlIGFjY29tcGFuaWVkIGJ5IGEgbGluZSBleHBsYWluaW5nIHdoeSB0aGUgYmFycmllciBpcyBuZWNlc3NhcnkuICBUaGUKK2xvY2tpbmcgcnVsZXMgZm9yIGRhdGEgc3RydWN0dXJlcyBnZW5lcmFsbHkgbmVlZCB0byBiZSBleHBsYWluZWQgc29tZXdoZXJlLgorTWFqb3IgZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGluIGdlbmVyYWwuCitOb24tb2J2aW91cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzZXBhcmF0ZSBiaXRzIG9mIGNvZGUgc2hvdWxkIGJlIHBvaW50ZWQKK291dC4gIEFueXRoaW5nIHdoaWNoIG1pZ2h0IHRlbXB0IGEgY29kZSBqYW5pdG9yIHRvIG1ha2UgYW4gaW5jb3JyZWN0CisiY2xlYW51cCIgbmVlZHMgYSBjb21tZW50IHNheWluZyB3aHkgaXQgaXMgZG9uZSB0aGUgd2F5IGl0IGlzLiAgQW5kIHNvIG9uLgorCisKKzQuNDogSU5URVJOQUwgQVBJIENIQU5HRVMKKworVGhlIGJpbmFyeSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGNhbm5vdCBiZSBicm9rZW4KK2V4Y2VwdCB1bmRlciB0aGUgbW9zdCBzZXZlcmUgY2lyY3Vtc3RhbmNlcy4gIFRoZSBrZXJuZWwncyBpbnRlcm5hbAorcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcywgaW5zdGVhZCwgYXJlIGhpZ2hseSBmbHVpZCBhbmQgY2FuIGJlIGNoYW5nZWQgd2hlbgordGhlIG5lZWQgYXJpc2VzLiAgSWYgeW91IGZpbmQgeW91cnNlbGYgaGF2aW5nIHRvIHdvcmsgYXJvdW5kIGEga2VybmVsIEFQSSwKK29yIHNpbXBseSBub3QgdXNpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGJlY2F1c2UgaXQgZG9lcyBub3QgbWVldCB5b3VyCituZWVkcywgdGhhdCBtYXkgYmUgYSBzaWduIHRoYXQgdGhlIEFQSSBuZWVkcyB0byBjaGFuZ2UuICBBcyBhIGtlcm5lbAorZGV2ZWxvcGVyLCB5b3UgYXJlIGVtcG93ZXJlZCB0byBtYWtlIHN1Y2ggY2hhbmdlcy4KKworVGhlcmUgYXJlLCBvZiBjb3Vyc2UsIHNvbWUgY2F0Y2hlcy4gIEFQSSBjaGFuZ2VzIGNhbiBiZSBtYWRlLCBidXQgdGhleSBuZWVkCit0byBiZSB3ZWxsIGp1c3RpZmllZC4gIFNvIGFueSBwYXRjaCBtYWtpbmcgYW4gaW50ZXJuYWwgQVBJIGNoYW5nZSBzaG91bGQgYmUKK2FjY29tcGFuaWVkIGJ5IGEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgY2hhbmdlIGlzIGFuZCB3aHkgaXQgaXMKK25lY2Vzc2FyeS4gIFRoaXMga2luZCBvZiBjaGFuZ2Ugc2hvdWxkIGFsc28gYmUgYnJva2VuIG91dCBpbnRvIGEgc2VwYXJhdGUKK3BhdGNoLCByYXRoZXIgdGhhbiBidXJpZWQgd2l0aGluIGEgbGFyZ2VyIHBhdGNoLgorCitUaGUgb3RoZXIgY2F0Y2ggaXMgdGhhdCBhIGRldmVsb3BlciB3aG8gY2hhbmdlcyBhbiBpbnRlcm5hbCBBUEkgaXMKK2dlbmVyYWxseSBjaGFyZ2VkIHdpdGggdGhlIHRhc2sgb2YgZml4aW5nIGFueSBjb2RlIHdpdGhpbiB0aGUga2VybmVsIHRyZWUKK3doaWNoIGlzIGJyb2tlbiBieSB0aGUgY2hhbmdlLiAgRm9yIGEgd2lkZWx5LXVzZWQgZnVuY3Rpb24sIHRoaXMgZHV0eSBjYW4KK2xlYWQgdG8gbGl0ZXJhbGx5IGh1bmRyZWRzIG9yIHRob3VzYW5kcyBvZiBjaGFuZ2VzIC0gbWFueSBvZiB3aGljaCBhcmUKK2xpa2VseSB0byBjb25mbGljdCB3aXRoIHdvcmsgYmVpbmcgZG9uZSBieSBvdGhlciBkZXZlbG9wZXJzLiAgTmVlZGxlc3MgdG8KK3NheSwgdGhpcyBjYW4gYmUgYSBsYXJnZSBqb2IsIHNvIGl0IGlzIGJlc3QgdG8gYmUgc3VyZSB0aGF0IHRoZQoranVzdGlmaWNhdGlvbiBpcyBzb2xpZC4KKworV2hlbiBtYWtpbmcgYW4gaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2UsIG9uZSBzaG91bGQsIHdoZW5ldmVyIHBvc3NpYmxlLAorZW5zdXJlIHRoYXQgY29kZSB3aGljaCBoYXMgbm90IGJlZW4gdXBkYXRlZCBpcyBjYXVnaHQgYnkgdGhlIGNvbXBpbGVyLiAgCitUaGlzIHdpbGwgaGVscCB5b3UgdG8gYmUgc3VyZSB0aGF0IHlvdSBoYXZlIGZvdW5kIGFsbCBpbi10cmVlIHVzZXMgb2YgdGhhdAoraW50ZXJmYWNlLiAgSXQgd2lsbCBhbHNvIGFsZXJ0IGRldmVsb3BlcnMgb2Ygb3V0LW9mLXRyZWUgY29kZSB0aGF0IHRoZXJlIGlzCithIGNoYW5nZSB0aGF0IHRoZXkgbmVlZCB0byByZXNwb25kIHRvLiAgU3VwcG9ydGluZyBvdXQtb2YtdHJlZSBjb2RlIGlzIG5vdAorc29tZXRoaW5nIHRoYXQga2VybmVsIGRldmVsb3BlcnMgbmVlZCB0byBiZSB3b3JyaWVkIGFib3V0LCBidXQgd2UgYWxzbyBkbworbm90IGhhdmUgdG8gbWFrZSBsaWZlIGhhcmRlciBmb3Igb3V0LW9mLXRyZWUgZGV2ZWxvcGVycyB0aGFuIGl0IGl0IG5lZWRzIHRvCitiZS4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNS5Qb3N0aW5nIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzUuUG9zdGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ4MTMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzUuUG9zdGluZwpAQCAtMCwwICsxLDI3OCBAQAorNTogUE9TVElORyBQQVRDSEVTCisKK1Nvb25lciBvciBsYXRlciwgdGhlIHRpbWUgY29tZXMgd2hlbiB5b3VyIHdvcmsgaXMgcmVhZHkgdG8gYmUgcHJlc2VudGVkIHRvCit0aGUgY29tbXVuaXR5IGZvciByZXZpZXcgYW5kLCBldmVudHVhbGx5LCBpbmNsdXNpb24gaW50byB0aGUgbWFpbmxpbmUKK2tlcm5lbC4gIFVuc3VycHJpc2luZ2x5LCB0aGUga2VybmVsIGRldmVsb3BtZW50IGNvbW11bml0eSBoYXMgZXZvbHZlZCBhIHNldAorb2YgY29udmVudGlvbnMgYW5kIHByb2NlZHVyZXMgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIHBvc3Rpbmcgb2YgcGF0Y2hlczsKK2ZvbGxvd2luZyB0aGVtIHdpbGwgbWFrZSBsaWZlIG11Y2ggZWFzaWVyIGZvciBldmVyeWJvZHkgaW52b2x2ZWQuICBUaGlzCitkb2N1bWVudCB3aWxsIGF0dGVtcHQgdG8gY292ZXIgdGhlc2UgZXhwZWN0YXRpb25zIGluIHJlYXNvbmFibGUgZGV0YWlsOworbW9yZSBpbmZvcm1hdGlvbiBjYW4gYWxzbyBiZSBmb3VuZCBpbiB0aGUgZmlsZXMgU3VibWl0dGluZ1BhdGNoZXMsCitTdWJtaXR0aW5nRHJpdmVycywgYW5kIFN1Ym1pdENoZWNrbGlzdCBpbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24KK2RpcmVjdG9yeS4KKworCis1LjE6IFdIRU4gVE8gUE9TVAorCitUaGVyZSBpcyBhIGNvbnN0YW50IHRlbXB0YXRpb24gdG8gYXZvaWQgcG9zdGluZyBwYXRjaGVzIGJlZm9yZSB0aGV5IGFyZQorY29tcGxldGVseSAicmVhZHkuIiAgRm9yIHNpbXBsZSBwYXRjaGVzLCB0aGF0IGlzIG5vdCBhIHByb2JsZW0uICBJZiB0aGUKK3dvcmsgYmVpbmcgZG9uZSBpcyBjb21wbGV4LCB0aG91Z2gsIHRoZXJlIGlzIGEgbG90IHRvIGJlIGdhaW5lZCBieSBnZXR0aW5nCitmZWVkYmFjayBmcm9tIHRoZSBjb21tdW5pdHkgYmVmb3JlIHRoZSB3b3JrIGlzIGNvbXBsZXRlLiAgU28geW91IHNob3VsZAorY29uc2lkZXIgcG9zdGluZyBpbi1wcm9ncmVzcyB3b3JrLCBvciBldmVuIG1ha2luZyBhIGdpdCB0cmVlIGF2YWlsYWJsZSBzbwordGhhdCBpbnRlcmVzdGVkIGRldmVsb3BlcnMgY2FuIGNhdGNoIHVwIHdpdGggeW91ciB3b3JrIGF0IGFueSB0aW1lLgorCitXaGVuIHBvc3RpbmcgY29kZSB3aGljaCBpcyBub3QgeWV0IGNvbnNpZGVyZWQgcmVhZHkgZm9yIGluY2x1c2lvbiwgaXQgaXMgYQorZ29vZCBpZGVhIHRvIHNheSBzbyBpbiB0aGUgcG9zdGluZyBpdHNlbGYuICBBbHNvIG1lbnRpb24gYW55IG1ham9yIHdvcmsKK3doaWNoIHJlbWFpbnMgdG8gYmUgZG9uZSBhbmQgYW55IGtub3duIHByb2JsZW1zLiAgRmV3ZXIgcGVvcGxlIHdpbGwgbG9vayBhdAorcGF0Y2hlcyB3aGljaCBhcmUga25vd24gdG8gYmUgaGFsZi1iYWtlZCwgYnV0IHRob3NlIHdobyBkbyB3aWxsIGNvbWUgaW4KK3dpdGggdGhlIGlkZWEgdGhhdCB0aGV5IGNhbiBoZWxwIHlvdSBkcml2ZSB0aGUgd29yayBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgorCisKKzUuMjogQkVGT1JFIENSRUFUSU5HIFBBVENIRVMKKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHRoaW5ncyB3aGljaCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgeW91IGNvbnNpZGVyCitzZW5kaW5nIHBhdGNoZXMgdG8gdGhlIGRldmVsb3BtZW50IGNvbW11bml0eS4gIFRoZXNlIGluY2x1ZGU6CisKKyAtIFRlc3QgdGhlIGNvZGUgdG8gdGhlIGV4dGVudCB0aGF0IHlvdSBjYW4uICBNYWtlIHVzZSBvZiB0aGUga2VybmVsJ3MKKyAgIGRlYnVnZ2luZyB0b29scywgZW5zdXJlIHRoYXQgdGhlIGtlcm5lbCB3aWxsIGJ1aWxkIHdpdGggYWxsIHJlYXNvbmFibGUKKyAgIGNvbWJpbmF0aW9ucyBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHVzZSBjcm9zcy1jb21waWxlcnMgdG8gYnVpbGQgZm9yCisgICBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgZXRjLgorCisgLSBNYWtlIHN1cmUgeW91ciBjb2RlIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBrZXJuZWwgY29kaW5nIHN0eWxlCisgICBndWlkZWxpbmVzLgorCisgLSBEb2VzIHlvdXIgY2hhbmdlIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyAgSWYgc28sIHlvdSBzaG91bGQgcnVuCisgICBiZW5jaG1hcmtzIHNob3dpbmcgd2hhdCB0aGUgaW1wYWN0IChvciBiZW5lZml0KSBvZiB5b3VyIGNoYW5nZSBpczsgYQorICAgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cyBzaG91bGQgYmUgaW5jbHVkZWQgd2l0aCB0aGUgcGF0Y2guCisKKyAtIEJlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gcG9zdCB0aGUgY29kZS4gIElmIHRoaXMgd29yayB3YXMgZG9uZQorICAgZm9yIGFuIGVtcGxveWVyLCB0aGUgZW1wbG95ZXIgbGlrZWx5IGhhcyBhIHJpZ2h0IHRvIHRoZSB3b3JrIGFuZCBtdXN0IGJlCisgICBhZ3JlZWFibGUgd2l0aCBpdHMgcmVsZWFzZSB1bmRlciB0aGUgR1BMLgorCitBcyBhIGdlbmVyYWwgcnVsZSwgcHV0dGluZyBpbiBzb21lIGV4dHJhIHRob3VnaHQgYmVmb3JlIHBvc3RpbmcgY29kZSBhbG1vc3QKK2Fsd2F5cyBwYXlzIGJhY2sgdGhlIGVmZm9ydCBpbiBzaG9ydCBvcmRlci4KKworCis1LjM6IFBBVENIIFBSRVBBUkFUSU9OCisKK1RoZSBwcmVwYXJhdGlvbiBvZiBwYXRjaGVzIGZvciBwb3N0aW5nIGNhbiBiZSBhIHN1cnByaXNpbmcgYW1vdW50IG9mIHdvcmssCitidXQsIG9uY2UgYWdhaW4sIGF0dGVtcHRpbmcgdG8gc2F2ZSB0aW1lIGhlcmUgaXMgbm90IGdlbmVyYWxseSBhZHZpc2FibGUKK2V2ZW4gaW4gdGhlIHNob3J0IHRlcm0uCisKK1BhdGNoZXMgbXVzdCBiZSBwcmVwYXJlZCBhZ2FpbnN0IGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUga2VybmVsLiAgQXMgYQorZ2VuZXJhbCBydWxlLCBhIHBhdGNoIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgY3VycmVudCBtYWlubGluZSBhcyBmb3VuZCBpbgorTGludXMncyBnaXQgdHJlZS4gIEl0IG1heSBiZWNvbWUgbmVjZXNzYXJ5IHRvIG1ha2UgdmVyc2lvbnMgYWdhaW5zdCAtbW0sCitsaW51eC1uZXh0LCBvciBhIHN1YnN5c3RlbSB0cmVlLCB0aG91Z2gsIHRvIGZhY2lsaXRhdGUgd2lkZXIgdGVzdGluZyBhbmQKK3Jldmlldy4gIERlcGVuZGluZyBvbiB0aGUgYXJlYSBvZiB5b3VyIHBhdGNoIGFuZCB3aGF0IGlzIGdvaW5nIG9uCitlbHNld2hlcmUsIGJhc2luZyBhIHBhdGNoIGFnYWluc3QgdGhlc2Ugb3RoZXIgdHJlZXMgY2FuIHJlcXVpcmUgYQorc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdvcmsgcmVzb2x2aW5nIGNvbmZsaWN0cyBhbmQgZGVhbGluZyB3aXRoIEFQSQorY2hhbmdlcy4KKworT25seSB0aGUgbW9zdCBzaW1wbGUgY2hhbmdlcyBzaG91bGQgYmUgZm9ybWF0dGVkIGFzIGEgc2luZ2xlIHBhdGNoOworZXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBtYWRlIGFzIGEgbG9naWNhbCBzZXJpZXMgb2YgY2hhbmdlcy4gIFNwbGl0dGluZwordXAgcGF0Y2hlcyBpcyBhIGJpdCBvZiBhbiBhcnQ7IHNvbWUgZGV2ZWxvcGVycyBzcGVuZCBhIGxvbmcgdGltZSBmaWd1cmluZworb3V0IGhvdyB0byBkbyBpdCBpbiB0aGUgd2F5IHRoYXQgdGhlIGNvbW11bml0eSBleHBlY3RzLiAgVGhlcmUgYXJlIGEgZmV3CitydWxlcyBvZiB0aHVtYiwgaG93ZXZlciwgd2hpY2ggY2FuIGhlbHAgY29uc2lkZXJhYmx5OgorCisgLSBUaGUgcGF0Y2ggc2VyaWVzIHlvdSBwb3N0IHdpbGwgYWxtb3N0IGNlcnRhaW5seSBub3QgYmUgdGhlIHNlcmllcyBvZgorICAgY2hhbmdlcyBmb3VuZCBpbiB5b3VyIHdvcmtpbmcgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0uICBJbnN0ZWFkLCB0aGUKKyAgIGNoYW5nZXMgeW91IGhhdmUgbWFkZSBuZWVkIHRvIGJlIGNvbnNpZGVyZWQgaW4gdGhlaXIgZmluYWwgZm9ybSwgdGhlbgorICAgc3BsaXQgYXBhcnQgaW4gd2F5cyB3aGljaCBtYWtlIHNlbnNlLiAgVGhlIGRldmVsb3BlcnMgYXJlIGludGVyZXN0ZWQgaW4KKyAgIGRpc2NyZXRlLCBzZWxmLWNvbnRhaW5lZCBjaGFuZ2VzLCBub3QgdGhlIHBhdGggeW91IHRvb2sgdG8gZ2V0IHRvIHRob3NlCisgICBjaGFuZ2VzLgorCisgLSBFYWNoIGxvZ2ljYWxseSBpbmRlcGVuZGVudCBjaGFuZ2Ugc2hvdWxkIGJlIGZvcm1hdHRlZCBhcyBhIHNlcGFyYXRlCisgICBwYXRjaC4gIFRoZXNlIGNoYW5nZXMgY2FuIGJlIHNtYWxsICgiYWRkIGEgZmllbGQgdG8gdGhpcyBzdHJ1Y3R1cmUiKSBvcgorICAgbGFyZ2UgKGFkZGluZyBhIHNpZ25pZmljYW50IG5ldyBkcml2ZXIsIGZvciBleGFtcGxlKSwgYnV0IHRoZXkgc2hvdWxkIGJlCisgICBjb25jZXB0dWFsbHkgc21hbGwgYW5kIGFtZW5hYmxlIHRvIGEgb25lLWxpbmUgZGVzY3JpcHRpb24uICBFYWNoIHBhdGNoCisgICBzaG91bGQgbWFrZSBhIHNwZWNpZmljIGNoYW5nZSB3aGljaCBjYW4gYmUgcmV2aWV3ZWQgb24gaXRzIG93biBhbmQKKyAgIHZlcmlmaWVkIHRvIGRvIHdoYXQgaXQgc2F5cyBpdCBkb2VzLgorCisgLSBBcyBhIHdheSBvZiByZXN0YXRpbmcgdGhlIGd1aWRlbGluZSBhYm92ZTogZG8gbm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2YKKyAgIGNoYW5nZXMgaW4gdGhlIHNhbWUgcGF0Y2guICBJZiBhIHNpbmdsZSBwYXRjaCBmaXhlcyBhIGNyaXRpY2FsIHNlY3VyaXR5CisgICBidWcsIHJlYXJyYW5nZXMgYSBmZXcgc3RydWN0dXJlcywgYW5kIHJlZm9ybWF0cyB0aGUgY29kZSwgdGhlcmUgaXMgYQorICAgZ29vZCBjaGFuY2UgdGhhdCBpdCB3aWxsIGJlIHBhc3NlZCBvdmVyIGFuZCB0aGUgaW1wb3J0YW50IGZpeCB3aWxsIGJlCisgICBsb3N0LgorCisgLSBFYWNoIHBhdGNoIHNob3VsZCB5aWVsZCBhIGtlcm5lbCB3aGljaCBidWlsZHMgYW5kIHJ1bnMgcHJvcGVybHk7IGlmIHlvdXIKKyAgIHBhdGNoIHNlcmllcyBpcyBpbnRlcnJ1cHRlZCBpbiB0aGUgbWlkZGxlLCB0aGUgcmVzdWx0IHNob3VsZCBzdGlsbCBiZSBhCisgICB3b3JraW5nIGtlcm5lbC4gIFBhcnRpYWwgYXBwbGljYXRpb24gb2YgYSBwYXRjaCBzZXJpZXMgaXMgYSBjb21tb24KKyAgIHNjZW5hcmlvIHdoZW4gdGhlICJnaXQgYmlzZWN0IiB0b29sIGlzIHVzZWQgdG8gZmluZCByZWdyZXNzaW9uczsgaWYgdGhlCisgICByZXN1bHQgaXMgYSBicm9rZW4ga2VybmVsLCB5b3Ugd2lsbCBtYWtlIGxpZmUgaGFyZGVyIGZvciBkZXZlbG9wZXJzIGFuZAorICAgdXNlcnMgd2hvIGFyZSBlbmdhZ2luZyBpbiB0aGUgbm9ibGUgd29yayBvZiB0cmFja2luZyBkb3duIHByb2JsZW1zLgorCisgLSBEbyBub3Qgb3ZlcmRvIGl0LCB0aG91Z2guICBPbmUgZGV2ZWxvcGVyIHJlY2VudGx5IHBvc3RlZCBhIHNldCBvZiBlZGl0cworICAgdG8gYSBzaW5nbGUgZmlsZSBhcyA1MDAgc2VwYXJhdGUgcGF0Y2hlcyAtIGFuIGFjdCB3aGljaCBkaWQgbm90IG1ha2UgaGltCisgICB0aGUgbW9zdCBwb3B1bGFyIHBlcnNvbiBvbiB0aGUga2VybmVsIG1haWxpbmcgbGlzdC4gIEEgc2luZ2xlIHBhdGNoIGNhbgorICAgYmUgcmVhc29uYWJseSBsYXJnZSBhcyBsb25nIGFzIGl0IHN0aWxsIGNvbnRhaW5zIGEgc2luZ2xlICpsb2dpY2FsKgorICAgY2hhbmdlLiAKKworIC0gSXQgY2FuIGJlIHRlbXB0aW5nIHRvIGFkZCBhIHdob2xlIG5ldyBpbmZyYXN0cnVjdHVyZSB3aXRoIGEgc2VyaWVzIG9mCisgICBwYXRjaGVzLCBidXQgdG8gbGVhdmUgdGhhdCBpbmZyYXN0cnVjdHVyZSB1bnVzZWQgdW50aWwgdGhlIGZpbmFsIHBhdGNoCisgICBpbiB0aGUgc2VyaWVzIGVuYWJsZXMgdGhlIHdob2xlIHRoaW5nLiAgVGhpcyB0ZW1wdGF0aW9uIHNob3VsZCBiZQorICAgYXZvaWRlZCBpZiBwb3NzaWJsZTsgaWYgdGhhdCBzZXJpZXMgYWRkcyByZWdyZXNzaW9ucywgYmlzZWN0aW9uIHdpbGwKKyAgIGZpbmdlciB0aGUgbGFzdCBwYXRjaCBhcyB0aGUgb25lIHdoaWNoIGNhdXNlZCB0aGUgcHJvYmxlbSwgZXZlbiB0aG91Z2gKKyAgIHRoZSByZWFsIGJ1ZyBpcyBlbHNld2hlcmUuICBXaGVuZXZlciBwb3NzaWJsZSwgYSBwYXRjaCB3aGljaCBhZGRzIG5ldworICAgY29kZSBzaG91bGQgbWFrZSB0aGF0IGNvZGUgYWN0aXZlIGltbWVkaWF0ZWx5LgorCitXb3JraW5nIHRvIGNyZWF0ZSB0aGUgcGVyZmVjdCBwYXRjaCBzZXJpZXMgY2FuIGJlIGEgZnJ1c3RyYXRpbmcgcHJvY2Vzcword2hpY2ggdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZSBhbmQgdGhvdWdodCBhZnRlciB0aGUgInJlYWwgd29yayIgaGFzIGJlZW4KK2RvbmUuICBXaGVuIGRvbmUgcHJvcGVybHksIHRob3VnaCwgaXQgaXMgdGltZSB3ZWxsIHNwZW50LgorCisKKzUuNDogUEFUQ0ggRk9STUFUVElORworCitTbyBub3cgeW91IGhhdmUgYSBwZXJmZWN0IHNlcmllcyBvZiBwYXRjaGVzIGZvciBwb3N0aW5nLCBidXQgdGhlIHdvcmsgaXMKK25vdCBkb25lIHF1aXRlIHlldC4gIEVhY2ggcGF0Y2ggbmVlZHMgdG8gYmUgZm9ybWF0dGVkIGludG8gYSBtZXNzYWdlIHdoaWNoCitxdWlja2x5IGFuZCBjbGVhcmx5IGNvbW11bmljYXRlcyBpdHMgcHVycG9zZSB0byB0aGUgcmVzdCBvZiB0aGUgd29ybGQuICBUbwordGhhdCBlbmQsIGVhY2ggcGF0Y2ggd2lsbCBiZSBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nOgorCisgLSBBbiBvcHRpb25hbCAiRnJvbSIgbGluZSBuYW1pbmcgdGhlIGF1dGhvciBvZiB0aGUgcGF0Y2guICBUaGlzIGxpbmUgaXMKKyAgIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgcGFzc2luZyBvbiBzb21lYm9keSBlbHNlJ3MgcGF0Y2ggdmlhIGVtYWlsLAorICAgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGFkZCBpdCB3aGVuIGluIGRvdWJ0LgorCisgLSBBIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHBhdGNoIGRvZXMuICBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlCisgICBlbm91Z2ggZm9yIGEgcmVhZGVyIHdobyBzZWVzIGl0IHdpdGggbm8gb3RoZXIgY29udGV4dCB0byBmaWd1cmUgb3V0IHRoZQorICAgc2NvcGUgb2YgdGhlIHBhdGNoOyBpdCBpcyB0aGUgbGluZSB0aGF0IHdpbGwgc2hvdyB1cCBpbiB0aGUgInNob3J0IGZvcm0iCisgICBjaGFuZ2Vsb2dzLiAgVGhpcyBtZXNzYWdlIGlzIHVzdWFsbHkgZm9ybWF0dGVkIHdpdGggdGhlIHJlbGV2YW50CisgICBzdWJzeXN0ZW0gbmFtZSBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIHB1cnBvc2Ugb2YgdGhlIHBhdGNoLiAgRm9yCisgICBleGFtcGxlOgorCisJZ3BpbzogZml4IGJ1aWxkIG9uIENPTkZJR19HUElPX1NZU0ZTPW4KKworIC0gQSBibGFuayBsaW5lIGZvbGxvd2VkIGJ5IGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgcGF0Y2guICBUaGlzIGRlc2NyaXB0aW9uIGNhbiBiZSBhcyBsb25nIGFzIGlzIHJlcXVpcmVkOyBpdCBzaG91bGQgc2F5CisgICB3aGF0IHRoZSBwYXRjaCBkb2VzIGFuZCB3aHkgaXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIGtlcm5lbC4KKworIC0gT25lIG9yIG1vcmUgdGFnIGxpbmVzLCB3aXRoLCBhdCBhIG1pbmltdW0sIG9uZSBTaWduZWQtb2ZmLWJ5OiBsaW5lIGZyb20KKyAgIHRoZSBhdXRob3Igb2YgdGhlIHBhdGNoLiAgVGFncyB3aWxsIGJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBiZWxvdy4KKworVGhlIGFib3ZlIHRocmVlIGl0ZW1zIHNob3VsZCwgbm9ybWFsbHksIGJlIHRoZSB0ZXh0IHVzZWQgd2hlbiBjb21taXR0aW5nCit0aGUgY2hhbmdlIHRvIGEgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0uICBUaGV5IGFyZSBmb2xsb3dlZCBieToKKworIC0gVGhlIHBhdGNoIGl0c2VsZiwgaW4gdGhlIHVuaWZpZWQgKCItdSIpIHBhdGNoIGZvcm1hdC4gIFVzaW5nIHRoZSAiLXAiCisgICBvcHRpb24gdG8gZGlmZiB3aWxsIGFzc29jaWF0ZSBmdW5jdGlvbiBuYW1lcyB3aXRoIGNoYW5nZXMsIG1ha2luZyB0aGUKKyAgIHJlc3VsdGluZyBwYXRjaCBlYXNpZXIgZm9yIG90aGVycyB0byByZWFkLgorCitZb3Ugc2hvdWxkIGF2b2lkIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGlycmVsZXZhbnQgZmlsZXMgKHRob3NlIGdlbmVyYXRlZCBieQordGhlIGJ1aWxkIHByb2Nlc3MsIGZvciBleGFtcGxlLCBvciBlZGl0b3IgYmFja3VwIGZpbGVzKSBpbiB0aGUgcGF0Y2guICBUaGUKK2ZpbGUgImRvbnRkaWZmIiBpbiB0aGUgRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgY2FuIGhlbHAgaW4gdGhpcyByZWdhcmQ7CitwYXNzIGl0IHRvIGRpZmYgd2l0aCB0aGUgIi1YIiBvcHRpb24uCisKK1RoZSB0YWdzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCB0byBkZXNjcmliZSBob3cgdmFyaW91cyBkZXZlbG9wZXJzIGhhdmUKK2JlZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHBhdGNoLiAgVGhleSBhcmUgZGVzY3JpYmVkIGluCitkZXRhaWwgaW4gdGhlIFN1Ym1pdHRpbmdQYXRjaGVzIGRvY3VtZW50OyB3aGF0IGZvbGxvd3MgaGVyZSBpcyBhIGJyaWVmCitzdW1tYXJ5LiAgRWFjaCBvZiB0aGVzZSBsaW5lcyBoYXMgdGhlIGZvcm1hdDoKKworCXRhZzogRnVsbCBOYW1lIDxlbWFpbCBhZGRyZXNzPiAgb3B0aW9uYWwtb3RoZXItc3R1ZmYKKworVGhlIHRhZ3MgaW4gY29tbW9uIHVzZSBhcmU6CisKKyAtIFNpZ25lZC1vZmYtYnk6IHRoaXMgaXMgYSBkZXZlbG9wZXIncyBjZXJ0aWZpY2F0aW9uIHRoYXQgaGUgb3Igc2hlIGhhcworICAgdGhlIHJpZ2h0IHRvIHN1Ym1pdCB0aGUgcGF0Y2ggZm9yIGluY2x1c2lvbiBpbnRvIHRoZSBrZXJuZWwuICBJdCBpcyBhbgorICAgYWdyZWVtZW50IHRvIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4sIHRoZSBmdWxsIHRleHQgb2YKKyAgIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzLiAgQ29kZSB3aXRob3V0IGEKKyAgIHByb3BlciBzaWdub2ZmIGNhbm5vdCBiZSBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUuCisKKyAtIEFja2VkLWJ5OiBpbmRpY2F0ZXMgYW4gYWdyZWVtZW50IGJ5IGFub3RoZXIgZGV2ZWxvcGVyIChvZnRlbiBhCisgICBtYWludGFpbmVyIG9mIHRoZSByZWxldmFudCBjb2RlKSB0aGF0IHRoZSBwYXRjaCBpcyBhcHByb3ByaWF0ZSBmb3IKKyAgIGluY2x1c2lvbiBpbnRvIHRoZSBrZXJuZWwuCisKKyAtIFRlc3RlZC1ieTogc3RhdGVzIHRoYXQgdGhlIG5hbWVkIHBlcnNvbiBoYXMgdGVzdGVkIHRoZSBwYXRjaCBhbmQgZm91bmQKKyAgIGl0IHRvIHdvcmsuCisKKyAtIFJldmlld2VkLWJ5OiB0aGUgbmFtZWQgZGV2ZWxvcGVyIGhhcyByZXZpZXdlZCB0aGUgcGF0Y2ggZm9yIGNvcnJlY3RuZXNzOworICAgc2VlIHRoZSByZXZpZXdlcidzIHN0YXRlbWVudCBpbiBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGZvciBtb3JlCisgICBkZXRhaWwuCisKKyAtIFJlcG9ydGVkLWJ5OiBuYW1lcyBhIHVzZXIgd2hvIHJlcG9ydGVkIGEgcHJvYmxlbSB3aGljaCBpcyBmaXhlZCBieSB0aGlzCisgICBwYXRjaDsgdGhpcyB0YWcgaXMgdXNlZCB0byBnaXZlIGNyZWRpdCB0byB0aGUgKG9mdGVuIHVuZGVyYXBwcmVjaWF0ZWQpCisgICBwZW9wbGUgd2hvIHRlc3Qgb3VyIGNvZGUgYW5kIGxldCB1cyBrbm93IHdoZW4gdGhpbmdzIGRvIG5vdCB3b3JrCisgICBjb3JyZWN0bHkuCisKKyAtIENjOiB0aGUgbmFtZWQgcGVyc29uIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgcGF0Y2ggYW5kIGhhZCB0aGUKKyAgIG9wcG9ydHVuaXR5IHRvIGNvbW1lbnQgb24gaXQuCisKK0JlIGNhcmVmdWwgaW4gdGhlIGFkZGl0aW9uIG9mIHRhZ3MgdG8geW91ciBwYXRjaGVzOiBvbmx5IENjOiBpcyBhcHByb3ByaWF0ZQorZm9yIGFkZGl0aW9uIHdpdGhvdXQgdGhlIGV4cGxpY2l0IHBlcm1pc3Npb24gb2YgdGhlIHBlcnNvbiBuYW1lZC4KKworCis1LjU6IFNFTkRJTkcgVEhFIFBBVENICisKK0JlZm9yZSB5b3UgbWFpbCB5b3VyIHBhdGNoZXMsIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBvdGhlciB0aGluZ3MgeW91IHNob3VsZAordGFrZSBjYXJlIG9mOgorCisgLSBBcmUgeW91IHN1cmUgdGhhdCB5b3VyIG1haWxlciB3aWxsIG5vdCBjb3JydXB0IHRoZSBwYXRjaGVzPyAgUGF0Y2hlcworICAgd2hpY2ggaGF2ZSBoYWQgZ3JhdHVpdG91cyB3aGl0ZS1zcGFjZSBjaGFuZ2VzIG9yIGxpbmUgd3JhcHBpbmcgcGVyZm9ybWVkCisgICBieSB0aGUgbWFpbCBjbGllbnQgd2lsbCBub3QgYXBwbHkgYXQgdGhlIG90aGVyIGVuZCwgYW5kIG9mdGVuIHdpbGwgbm90CisgICBiZSBleGFtaW5lZCBpbiBhbnkgZGV0YWlsLiAgSWYgdGhlcmUgaXMgYW55IGRvdWJ0IGF0IGFsbCwgbWFpbCB0aGUgcGF0Y2gKKyAgIHRvIHlvdXJzZWxmIGFuZCBjb252aW5jZSB5b3Vyc2VsZiB0aGF0IGl0IHNob3dzIHVwIGludGFjdC4gIAorCisgICBEb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0IGhhcyBzb21lIGhlbHBmdWwgaGludHMgb24gbWFraW5nCisgICBzcGVjaWZpYyBtYWlsIGNsaWVudHMgd29yayBmb3Igc2VuZGluZyBwYXRjaGVzLgorCisgLSBBcmUgeW91IHN1cmUgeW91ciBwYXRjaCBpcyBmcmVlIG9mIHNpbGx5IG1pc3Rha2VzPyAgWW91IHNob3VsZCBhbHdheXMKKyAgIHJ1biBwYXRjaGVzIHRocm91Z2ggc2NyaXB0cy9jaGVja3BhdGNoLnBsIGFuZCBhZGRyZXNzIHRoZSBjb21wbGFpbnRzIGl0CisgICBjb21lcyB1cCB3aXRoLiAgUGxlYXNlIGJlYXIgaW4gbWluZCB0aGF0IGNoZWNrcGF0Y2gucGwsIHdoaWxlIGJlaW5nIHRoZQorICAgZW1ib2RpbWVudCBvZiBhIGZhaXIgYW1vdW50IG9mIHRob3VnaHQgYWJvdXQgd2hhdCBrZXJuZWwgcGF0Y2hlcyBzaG91bGQKKyAgIGxvb2sgbGlrZSwgaXMgbm90IHNtYXJ0ZXIgdGhhbiB5b3UuICBJZiBmaXhpbmcgYSBjaGVja3BhdGNoLnBsIGNvbXBsYWludAorICAgd291bGQgbWFrZSB0aGUgY29kZSB3b3JzZSwgZG9uJ3QgZG8gaXQuCisKK1BhdGNoZXMgc2hvdWxkIGFsd2F5cyBiZSBzZW50IGFzIHBsYWluIHRleHQuICBQbGVhc2UgZG8gbm90IHNlbmQgdGhlbSBhcworYXR0YWNobWVudHM7IHRoYXQgbWFrZXMgaXQgbXVjaCBoYXJkZXIgZm9yIHJldmlld2VycyB0byBxdW90ZSBzZWN0aW9ucyBvZgordGhlIHBhdGNoIGluIHRoZWlyIHJlcGxpZXMuICBJbnN0ZWFkLCBqdXN0IHB1dCB0aGUgcGF0Y2ggZGlyZWN0bHkgaW50byB5b3VyCittZXNzYWdlLgorCitXaGVuIG1haWxpbmcgcGF0Y2hlcywgaXQgaXMgaW1wb3J0YW50IHRvIHNlbmQgY29waWVzIHRvIGFueWJvZHkgd2hvIG1pZ2h0CitiZSBpbnRlcmVzdGVkIGluIGl0LiAgVW5saWtlIHNvbWUgb3RoZXIgcHJvamVjdHMsIHRoZSBrZXJuZWwgZW5jb3VyYWdlcworcGVvcGxlIHRvIGVyciBvbiB0aGUgc2lkZSBvZiBzZW5kaW5nIHRvbyBtYW55IGNvcGllczsgZG9uJ3QgYXNzdW1lIHRoYXQgdGhlCityZWxldmFudCBwZW9wbGUgd2lsbCBzZWUgeW91ciBwb3N0aW5nIG9uIHRoZSBtYWlsaW5nIGxpc3RzLiAgSW4gcGFydGljdWxhciwKK2NvcGllcyBzaG91bGQgZ28gdG86CisKKyAtIFRoZSBtYWludGFpbmVyKHMpIG9mIHRoZSBhZmZlY3RlZCBzdWJzeXN0ZW0ocykuICBBcyBkZXNjcmliZWQgZWFybGllciwKKyAgIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGlzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGZvciB0aGVzZSBwZW9wbGUuCisKKyAtIE90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUgYmVlbiB3b3JraW5nIGluIHRoZSBzYW1lIGFyZWEgLSBlc3BlY2lhbGx5CisgICB0aG9zZSB3aG8gbWlnaHQgYmUgd29ya2luZyB0aGVyZSBub3cuICBVc2luZyBnaXQgdG8gc2VlIHdobyBlbHNlIGhhcworICAgbW9kaWZpZWQgdGhlIGZpbGVzIHlvdSBhcmUgd29ya2luZyBvbiBjYW4gYmUgaGVscGZ1bC4KKworIC0gSWYgeW91IGFyZSByZXNwb25kaW5nIHRvIGEgYnVnIHJlcG9ydCBvciBhIGZlYXR1cmUgcmVxdWVzdCwgY29weSB0aGUKKyAgIG9yaWdpbmFsIHBvc3RlciBhcyB3ZWxsLgorCisgLSBTZW5kIGEgY29weSB0byB0aGUgcmVsZXZhbnQgbWFpbGluZyBsaXN0LCBvciwgaWYgbm90aGluZyBlbHNlIGFwcGxpZXMsCisgICB0aGUgbGludXgta2VybmVsIGxpc3QuCisKKyAtIElmIHlvdSBhcmUgZml4aW5nIGEgYnVnLCB0aGluayBhYm91dCB3aGV0aGVyIHRoZSBmaXggc2hvdWxkIGdvIGludG8gdGhlCisgICBuZXh0IHN0YWJsZSB1cGRhdGUuICBJZiBzbywgc3RhYmxlQGtlcm5lbC5vcmcgc2hvdWxkIGdldCBhIGNvcHkgb2YgdGhlCisgICBwYXRjaC4gIEFsc28gYWRkIGEgIkNjOiBzdGFibGVAa2VybmVsLm9yZyIgdG8gdGhlIHRhZ3Mgd2l0aGluIHRoZSBwYXRjaAorICAgaXRzZWxmOyB0aGF0IHdpbGwgY2F1c2UgdGhlIHN0YWJsZSB0ZWFtIHRvIGdldCBhIG5vdGlmaWNhdGlvbiB3aGVuIHlvdXIKKyAgIGZpeCBnb2VzIGludG8gdGhlIG1haW5saW5lLgorCitXaGVuIHNlbGVjdGluZyByZWNpcGllbnRzIGZvciBhIHBhdGNoLCBpdCBpcyBnb29kIHRvIGhhdmUgYW4gaWRlYSBvZiB3aG8KK3lvdSB0aGluayB3aWxsIGV2ZW50dWFsbHkgYWNjZXB0IHRoZSBwYXRjaCBhbmQgZ2V0IGl0IG1lcmdlZC4gIFdoaWxlIGl0CitpcyBwb3NzaWJsZSB0byBzZW5kIHBhdGNoZXMgZGlyZWN0bHkgdG8gTGludXMgVG9ydmFsZHMgYW5kIGhhdmUgaGltIG1lcmdlCit0aGVtLCB0aGluZ3MgYXJlIG5vdCBub3JtYWxseSBkb25lIHRoYXQgd2F5LiAgTGludXMgaXMgYnVzeSwgYW5kIHRoZXJlIGFyZQorc3Vic3lzdGVtIG1haW50YWluZXJzIHdobyB3YXRjaCBvdmVyIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwuICBVc3VhbGx5Cit5b3Ugd2lsbCBiZSB3YW50aW5nIHRoYXQgbWFpbnRhaW5lciB0byBtZXJnZSB5b3VyIHBhdGNoZXMuICBJZiB0aGVyZSBpcyBubworb2J2aW91cyBtYWludGFpbmVyLCBBbmRyZXcgTW9ydG9uIGlzIG9mdGVuIHRoZSBwYXRjaCB0YXJnZXQgb2YgbGFzdCByZXNvcnQuCisKK1BhdGNoZXMgbmVlZCBnb29kIHN1YmplY3QgbGluZXMuICBUaGUgY2Fub25pY2FsIGZvcm1hdCBmb3IgYSBwYXRjaCBsaW5lIGlzCitzb21ldGhpbmcgbGlrZToKKworCVtQQVRDSCBubi9tbV0gc3Vic3lzOiBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGF0Y2gKKword2hlcmUgIm5uIiBpcyB0aGUgb3JkaW5hbCBudW1iZXIgb2YgdGhlIHBhdGNoLCAibW0iIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YKK3BhdGNoZXMgaW4gdGhlIHNlcmllcywgYW5kICJzdWJzeXMiIGlzIHRoZSBuYW1lIG9mIHRoZSBhZmZlY3RlZCBzdWJzeXN0ZW0uCitDbGVhcmx5LCBubi9tbSBjYW4gYmUgb21pdHRlZCBmb3IgYSBzaW5nbGUsIHN0YW5kYWxvbmUgcGF0Y2guICAKKworSWYgeW91IGhhdmUgYSBzaWduaWZpY2FudCBzZXJpZXMgb2YgcGF0Y2hlcywgaXQgaXMgY3VzdG9tYXJ5IHRvIHNlbmQgYW4KK2ludHJvZHVjdG9yeSBkZXNjcmlwdGlvbiBhcyBwYXJ0IHplcm8uICBUaGlzIGNvbnZlbnRpb24gaXMgbm90IHVuaXZlcnNhbGx5Citmb2xsb3dlZCB0aG91Z2g7IGlmIHlvdSB1c2UgaXQsIHJlbWVtYmVyIHRoYXQgaW5mb3JtYXRpb24gaW4gdGhlCitpbnRyb2R1Y3Rpb24gZG9lcyBub3QgbWFrZSBpdCBpbnRvIHRoZSBrZXJuZWwgY2hhbmdlbG9ncy4gIFNvIHBsZWFzZSBlbnN1cmUKK3RoYXQgdGhlIHBhdGNoZXMsIHRoZW1zZWx2ZXMsIGhhdmUgY29tcGxldGUgY2hhbmdlbG9nIGluZm9ybWF0aW9uLgorCitJbiBnZW5lcmFsLCB0aGUgc2Vjb25kIGFuZCBmb2xsb3dpbmcgcGFydHMgb2YgYSBtdWx0aS1wYXJ0IHBhdGNoIHNob3VsZCBiZQorc2VudCBhcyBhIHJlcGx5IHRvIHRoZSBmaXJzdCBwYXJ0IHNvIHRoYXQgdGhleSBhbGwgdGhyZWFkIHRvZ2V0aGVyIGF0IHRoZQorcmVjZWl2aW5nIGVuZC4gIFRvb2xzIGxpa2UgZ2l0IGFuZCBxdWlsdCBoYXZlIGNvbW1hbmRzIHRvIG1haWwgb3V0IGEgc2V0IG9mCitwYXRjaGVzIHdpdGggdGhlIHByb3BlciB0aHJlYWRpbmcuICBJZiB5b3UgaGF2ZSBhIGxvbmcgc2VyaWVzLCB0aG91Z2gsIGFuZAorYXJlIHVzaW5nIGdpdCwgcGxlYXNlIHByb3ZpZGUgdGhlIC0tbm8tY2hhaW4tcmVwbHktdG8gb3B0aW9uIHRvIGF2b2lkCitjcmVhdGluZyBleGNlcHRpb25hbGx5IGRlZXAgbmVzdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy82LkZvbGxvd3Rocm91Z2ggYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNi5Gb2xsb3d0aHJvdWdoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmJhM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzYuRm9sbG93dGhyb3VnaApAQCAtMCwwICsxLDIwMiBAQAorNjogRk9MTE9XVEhST1VHSAorCitBdCB0aGlzIHBvaW50LCB5b3UgaGF2ZSBmb2xsb3dlZCB0aGUgZ3VpZGVsaW5lcyBnaXZlbiBzbyBmYXIgYW5kLCB3aXRoIHRoZQorYWRkaXRpb24gb2YgeW91ciBvd24gZW5naW5lZXJpbmcgc2tpbGxzLCBoYXZlIHBvc3RlZCBhIHBlcmZlY3Qgc2VyaWVzIG9mCitwYXRjaGVzLiAgT25lIG9mIHRoZSBiaWdnZXN0IG1pc3Rha2VzIHRoYXQgZXZlbiBleHBlcmllbmNlZCBrZXJuZWwKK2RldmVsb3BlcnMgY2FuIG1ha2UgaXMgdG8gY29uY2x1ZGUgdGhhdCB0aGVpciB3b3JrIGlzIG5vdyBkb25lLiAgSW4gdHJ1dGgsCitwb3N0aW5nIHBhdGNoZXMgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbnRvIHRoZSBuZXh0IHN0YWdlIG9mIHRoZSBwcm9jZXNzLAord2l0aCwgcG9zc2libHksIHF1aXRlIGEgYml0IG9mIHdvcmsgeWV0IHRvIGJlIGRvbmUuCisKK0l0IGlzIGEgcmFyZSBwYXRjaCB3aGljaCBpcyBzbyBnb29kIGF0IGl0cyBmaXJzdCBwb3N0aW5nIHRoYXQgdGhlcmUgaXMgbm8KK3Jvb20gZm9yIGltcHJvdmVtZW50LiAgVGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIHJlY29nbml6ZXMgdGhpcyBmYWN0LAorYW5kLCBhcyBhIHJlc3VsdCwgaXMgaGVhdmlseSBvcmllbnRlZCB0b3dhcmQgdGhlIGltcHJvdmVtZW50IG9mIHBvc3RlZAorY29kZS4gIFlvdSwgYXMgdGhlIGF1dGhvciBvZiB0aGF0IGNvZGUsIHdpbGwgYmUgZXhwZWN0ZWQgdG8gd29yayB3aXRoIHRoZQora2VybmVsIGNvbW11bml0eSB0byBlbnN1cmUgdGhhdCB5b3VyIGNvZGUgaXMgdXAgdG8gdGhlIGtlcm5lbCdzIHF1YWxpdHkKK3N0YW5kYXJkcy4gIEEgZmFpbHVyZSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGlzIHByb2Nlc3MgaXMgcXVpdGUgbGlrZWx5IHRvCitwcmV2ZW50IHRoZSBpbmNsdXNpb24gb2YgeW91ciBwYXRjaGVzIGludG8gdGhlIG1haW5saW5lLgorCisKKzYuMTogV09SS0lORyBXSVRIIFJFVklFV0VSUworCitBIHBhdGNoIG9mIGFueSBzaWduaWZpY2FuY2Ugd2lsbCByZXN1bHQgaW4gYSBudW1iZXIgb2YgY29tbWVudHMgZnJvbSBvdGhlcgorZGV2ZWxvcGVycyBhcyB0aGV5IHJldmlldyB0aGUgY29kZS4gIFdvcmtpbmcgd2l0aCByZXZpZXdlcnMgY2FuIGJlLCBmb3IKK21hbnkgZGV2ZWxvcGVycywgdGhlIG1vc3QgaW50aW1pZGF0aW5nIHBhcnQgb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudAorcHJvY2Vzcy4gIExpZmUgY2FuIGJlIG1hZGUgbXVjaCBlYXNpZXIsIHRob3VnaCwgaWYgeW91IGtlZXAgYSBmZXcgdGhpbmdzIGluCittaW5kOgorCisgLSBJZiB5b3UgaGF2ZSBleHBsYWluZWQgeW91ciBwYXRjaCB3ZWxsLCByZXZpZXdlcnMgd2lsbCB1bmRlcnN0YW5kIGl0cworICAgdmFsdWUgYW5kIHdoeSB5b3Ugd2VudCB0byB0aGUgdHJvdWJsZSBvZiB3cml0aW5nIGl0LiAgQnV0IHRoYXQgdmFsdWUKKyAgIHdpbGwgbm90IGtlZXAgdGhlbSBmcm9tIGFza2luZyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uOiB3aGF0IHdpbGwgaXQgYmUKKyAgIGxpa2UgdG8gbWFpbnRhaW4gYSBrZXJuZWwgd2l0aCB0aGlzIGNvZGUgaW4gaXQgZml2ZSBvciB0ZW4geWVhcnMgbGF0ZXI/CisgICBNYW55IG9mIHRoZSBjaGFuZ2VzIHlvdSBtYXkgYmUgYXNrZWQgdG8gbWFrZSAtIGZyb20gY29kaW5nIHN0eWxlIHR3ZWFrcworICAgdG8gc3Vic3RhbnRpYWwgcmV3cml0ZXMgLSBjb21lIGZyb20gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBMaW51eCB3aWxsCisgICBzdGlsbCBiZSBhcm91bmQgYW5kIHVuZGVyIGRldmVsb3BtZW50IGEgZGVjYWRlIGZyb20gbm93LgorCisgLSBDb2RlIHJldmlldyBpcyBoYXJkIHdvcmssIGFuZCBpdCBpcyBhIHJlbGF0aXZlbHkgdGhhbmtsZXNzIG9jY3VwYXRpb247CisgICBwZW9wbGUgcmVtZW1iZXIgd2hvIHdyb3RlIGtlcm5lbCBjb2RlLCBidXQgdGhlcmUgaXMgbGl0dGxlIGxhc3RpbmcgZmFtZQorICAgZm9yIHRob3NlIHdobyByZXZpZXdlZCBpdC4gIFNvIHJldmlld2VycyBjYW4gZ2V0IGdydW1weSwgZXNwZWNpYWxseSB3aGVuCisgICB0aGV5IHNlZSB0aGUgc2FtZSBtaXN0YWtlcyBiZWluZyBtYWRlIG92ZXIgYW5kIG92ZXIgYWdhaW4uICBJZiB5b3UgZ2V0IGEKKyAgIHJldmlldyB3aGljaCBzZWVtcyBhbmdyeSwgaW5zdWx0aW5nLCBvciBvdXRyaWdodCBvZmZlbnNpdmUsIHJlc2lzdCB0aGUKKyAgIGltcHVsc2UgdG8gcmVzcG9uZCBpbiBraW5kLiAgQ29kZSByZXZpZXcgaXMgYWJvdXQgdGhlIGNvZGUsIG5vdCBhYm91dAorICAgdGhlIHBlb3BsZSwgYW5kIGNvZGUgcmV2aWV3ZXJzIGFyZSBub3QgYXR0YWNraW5nIHlvdSBwZXJzb25hbGx5LgorCisgLSBTaW1pbGFybHksIGNvZGUgcmV2aWV3ZXJzIGFyZSBub3QgdHJ5aW5nIHRvIHByb21vdGUgdGhlaXIgZW1wbG95ZXJzJworICAgYWdlbmRhcyBhdCB0aGUgZXhwZW5zZSBvZiB5b3VyIG93bi4gIEtlcm5lbCBkZXZlbG9wZXJzIG9mdGVuIGV4cGVjdCB0bworICAgYmUgd29ya2luZyBvbiB0aGUga2VybmVsIHllYXJzIGZyb20gbm93LCBidXQgdGhleSB1bmRlcnN0YW5kIHRoYXQgdGhlaXIKKyAgIGVtcGxveWVyIGNvdWxkIGNoYW5nZS4gIFRoZXkgdHJ1bHkgYXJlLCBhbG1vc3Qgd2l0aG91dCBleGNlcHRpb24sCisgICB3b3JraW5nIHRvd2FyZCB0aGUgY3JlYXRpb24gb2YgdGhlIGJlc3Qga2VybmVsIHRoZXkgY2FuOyB0aGV5IGFyZSBub3QKKyAgIHRyeWluZyB0byBjcmVhdGUgZGlzY29tZm9ydCBmb3IgdGhlaXIgZW1wbG95ZXJzJyBjb21wZXRpdG9ycy4KKworV2hhdCBhbGwgb2YgdGhpcyBjb21lcyBkb3duIHRvIGlzIHRoYXQsIHdoZW4gcmV2aWV3ZXJzIHNlbmQgeW91IGNvbW1lbnRzLAoreW91IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgdGVjaG5pY2FsIG9ic2VydmF0aW9ucyB0aGF0IHRoZXkgYXJlCittYWtpbmcuICBEbyBub3QgbGV0IHRoZWlyIGZvcm0gb2YgZXhwcmVzc2lvbiBvciB5b3VyIG93biBwcmlkZSBrZWVwIHRoYXQKK2Zyb20gaGFwcGVuaW5nLiAgV2hlbiB5b3UgZ2V0IHJldmlldyBjb21tZW50cyBvbiBhIHBhdGNoLCB0YWtlIHRoZSB0aW1lIHRvCit1bmRlcnN0YW5kIHdoYXQgdGhlIHJldmlld2VyIGlzIHRyeWluZyB0byBzYXkuICBJZiBwb3NzaWJsZSwgZml4IHRoZSB0aGluZ3MKK3RoYXQgdGhlIHJldmlld2VyIGlzIGFza2luZyB5b3UgdG8gZml4LiAgQW5kIHJlc3BvbmQgYmFjayB0byB0aGUgcmV2aWV3ZXI6Cit0aGFuayB0aGVtLCBhbmQgZGVzY3JpYmUgaG93IHlvdSB3aWxsIGFuc3dlciB0aGVpciBxdWVzdGlvbnMuCisKK05vdGUgdGhhdCB5b3UgZG8gbm90IGhhdmUgdG8gYWdyZWUgd2l0aCBldmVyeSBjaGFuZ2Ugc3VnZ2VzdGVkIGJ5CityZXZpZXdlcnMuICBJZiB5b3UgYmVsaWV2ZSB0aGF0IHRoZSByZXZpZXdlciBoYXMgbWlzdW5kZXJzdG9vZCB5b3VyIGNvZGUsCitleHBsYWluIHdoYXQgaXMgcmVhbGx5IGdvaW5nIG9uLiAgSWYgeW91IGhhdmUgYSB0ZWNobmljYWwgb2JqZWN0aW9uIHRvIGEKK3N1Z2dlc3RlZCBjaGFuZ2UsIGRlc2NyaWJlIGl0IGFuZCBqdXN0aWZ5IHlvdXIgc29sdXRpb24gdG8gdGhlIHByb2JsZW0uICBJZgoreW91ciBleHBsYW5hdGlvbnMgbWFrZSBzZW5zZSwgdGhlIHJldmlld2VyIHdpbGwgYWNjZXB0IHRoZW0uICBTaG91bGQgeW91cgorZXhwbGFuYXRpb24gbm90IHByb3ZlIHBlcnN1YXNpdmUsIHRob3VnaCwgZXNwZWNpYWxseSBpZiBvdGhlcnMgc3RhcnQgdG8KK2FncmVlIHdpdGggdGhlIHJldmlld2VyLCB0YWtlIHNvbWUgdGltZSB0byB0aGluayB0aGluZ3Mgb3ZlciBhZ2Fpbi4gIEl0IGNhbgorYmUgZWFzeSB0byBiZWNvbWUgYmxpbmRlZCBieSB5b3VyIG93biBzb2x1dGlvbiB0byBhIHByb2JsZW0gdG8gdGhlIHBvaW50Cit0aGF0IHlvdSBkb24ndCByZWFsaXplIHRoYXQgc29tZXRoaW5nIGlzIGZ1bmRhbWVudGFsbHkgd3Jvbmcgb3IsIHBlcmhhcHMsCit5b3UncmUgbm90IGV2ZW4gc29sdmluZyB0aGUgcmlnaHQgcHJvYmxlbS4KKworT25lIGZhdGFsIG1pc3Rha2UgaXMgdG8gaWdub3JlIHJldmlldyBjb21tZW50cyBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbAorZ28gYXdheS4gIFRoZXkgd2lsbCBub3QgZ28gYXdheS4gIElmIHlvdSByZXBvc3QgY29kZSB3aXRob3V0IGhhdmluZworcmVzcG9uZGVkIHRvIHRoZSBjb21tZW50cyB5b3UgZ290IHRoZSB0aW1lIGJlZm9yZSwgeW91J3JlIGxpa2VseSB0byBmaW5kCit0aGF0IHlvdXIgcGF0Y2hlcyBnbyBub3doZXJlLgorCitTcGVha2luZyBvZiByZXBvc3RpbmcgY29kZTogcGxlYXNlIGJlYXIgaW4gbWluZCB0aGF0IHJldmlld2VycyBhcmUgbm90Citnb2luZyB0byByZW1lbWJlciBhbGwgdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUgeW91IHBvc3RlZCB0aGUgbGFzdCB0aW1lCithcm91bmQuICBTbyBpdCBpcyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVtaW5kIHJldmlld2VycyBvZiBwcmV2aW91c2x5CityYWlzZWQgaXNzdWVzIGFuZCBob3cgeW91IGRlYWx0IHdpdGggdGhlbTsgdGhlIHBhdGNoIGNoYW5nZWxvZyBpcyBhIGdvb2QKK3BsYWNlIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24uICBSZXZpZXdlcnMgc2hvdWxkIG5vdCBoYXZlIHRvIHNlYXJjaAordGhyb3VnaCBsaXN0IGFyY2hpdmVzIHRvIGZhbWlsaWFyaXplIHRoZW1zZWx2ZXMgd2l0aCB3aGF0IHdhcyBzYWlkIGxhc3QKK3RpbWU7IGlmIHlvdSBoZWxwIHRoZW0gZ2V0IGEgcnVubmluZyBzdGFydCwgdGhleSB3aWxsIGJlIGluIGEgYmV0dGVyIG1vb2QKK3doZW4gdGhleSByZXZpc2l0IHlvdXIgY29kZS4KKworV2hhdCBpZiB5b3UndmUgdHJpZWQgdG8gZG8gZXZlcnl0aGluZyByaWdodCBhbmQgdGhpbmdzIHN0aWxsIGFyZW4ndCBnb2luZworYW55d2hlcmU/ICBNb3N0IHRlY2huaWNhbCBkaXNhZ3JlZW1lbnRzIGNhbiBiZSByZXNvbHZlZCB0aHJvdWdoIGRpc2N1c3Npb24sCitidXQgdGhlcmUgYXJlIHRpbWVzIHdoZW4gc29tZWJvZHkgc2ltcGx5IGhhcyB0byBtYWtlIGEgZGVjaXNpb24uICBJZiB5b3UKK2hvbmVzdGx5IGJlbGlldmUgdGhhdCB0aGlzIGRlY2lzaW9uIGlzIGdvaW5nIGFnYWluc3QgeW91IHdyb25nbHksIHlvdSBjYW4KK2Fsd2F5cyB0cnkgYXBwZWFsaW5nIHRvIGEgaGlnaGVyIHBvd2VyLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGF0IGhpZ2hlcgorcG93ZXIgdGVuZHMgdG8gYmUgQW5kcmV3IE1vcnRvbi4gIEFuZHJldyBoYXMgYSBncmVhdCBkZWFsIG9mIHJlc3BlY3QgaW4gdGhlCitrZXJuZWwgZGV2ZWxvcG1lbnQgY29tbXVuaXR5OyBoZSBjYW4gb2Z0ZW4gdW5qYW0gYSBzaXR1YXRpb24gd2hpY2ggc2VlbXMgdG8KK2JlIGhvcGVsZXNzbHkgYmxvY2tlZC4gIEFwcGVhbGluZyB0byBBbmRyZXcgc2hvdWxkIG5vdCBiZSBkb25lIGxpZ2h0bHksCit0aG91Z2gsIGFuZCBub3QgYmVmb3JlIGFsbCBvdGhlciBhbHRlcm5hdGl2ZXMgaGF2ZSBiZWVuIGV4cGxvcmVkLiAgQW5kIGJlYXIKK2luIG1pbmQsIG9mIGNvdXJzZSwgdGhhdCBoZSBtYXkgbm90IGFncmVlIHdpdGggeW91IGVpdGhlci4KKworCis2LjI6IFdIQVQgSEFQUEVOUyBORVhUCisKK0lmIGEgcGF0Y2ggaXMgY29uc2lkZXJlZCB0byBiZSBhIGdvb2QgdGhpbmcgdG8gYWRkIHRvIHRoZSBrZXJuZWwsIGFuZCBvbmNlCittb3N0IG9mIHRoZSByZXZpZXcgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZCwgdGhlIG5leHQgc3RlcCBpcyB1c3VhbGx5CitlbnRyeSBpbnRvIGEgc3Vic3lzdGVtIG1haW50YWluZXIncyB0cmVlLiAgSG93IHRoYXQgd29ya3MgdmFyaWVzIGZyb20gb25lCitzdWJzeXN0ZW0gdG8gdGhlIG5leHQ7IGVhY2ggbWFpbnRhaW5lciBoYXMgaGlzIG9yIGhlciBvd24gd2F5IG9mIGRvaW5nCit0aGluZ3MuICBJbiBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSB0cmVlIC0gb25lLCBwZXJoYXBzLAorZGVkaWNhdGVkIHRvIHBhdGNoZXMgcGxhbm5lZCBmb3IgdGhlIG5leHQgbWVyZ2Ugd2luZG93LCBhbmQgYW5vdGhlciBmb3IKK2xvbmdlci10ZXJtIHdvcmsuICAKKworRm9yIHBhdGNoZXMgYXBwbHlpbmcgdG8gYXJlYXMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIG9idmlvdXMgc3Vic3lzdGVtIHRyZWUKKyhtZW1vcnkgbWFuYWdlbWVudCBwYXRjaGVzLCBmb3IgZXhhbXBsZSksIHRoZSBkZWZhdWx0IHRyZWUgb2Z0ZW4gZW5kcyB1cAorYmVpbmcgLW1tLiAgUGF0Y2hlcyB3aGljaCBhZmZlY3QgbXVsdGlwbGUgc3Vic3lzdGVtcyBjYW4gYWxzbyBlbmQgdXAgZ29pbmcKK3Rocm91Z2ggdGhlIC1tbSB0cmVlLgorCitJbmNsdXNpb24gaW50byBhIHN1YnN5c3RlbSB0cmVlIGNhbiBicmluZyBhIGhpZ2hlciBsZXZlbCBvZiB2aXNpYmlsaXR5IHRvIGEKK3BhdGNoLiAgTm93IG90aGVyIGRldmVsb3BlcnMgd29ya2luZyB3aXRoIHRoYXQgdHJlZSB3aWxsIGdldCB0aGUgcGF0Y2ggYnkKK2RlZmF1bHQuICBTdWJzeXN0ZW0gdHJlZXMgdHlwaWNhbGx5IGZlZWQgaW50byAtbW0gYW5kIGxpbnV4LW5leHQgYXMgd2VsbCwKK21ha2luZyB0aGVpciBjb250ZW50cyB2aXNpYmxlIHRvIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYXMgYSB3aG9sZS4gIEF0Cit0aGlzIHBvaW50LCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCB5b3Ugd2lsbCBnZXQgbW9yZSBjb21tZW50cyBmcm9tIGEKK25ldyBzZXQgb2YgcmV2aWV3ZXJzOyB0aGVzZSBjb21tZW50cyBuZWVkIHRvIGJlIGFuc3dlcmVkIGFzIGluIHRoZSBwcmV2aW91cworcm91bmQuCisKK1doYXQgbWF5IGFsc28gaGFwcGVuIGF0IHRoaXMgcG9pbnQsIGRlcGVuZGluZyBvbiB0aGUgbmF0dXJlIG9mIHlvdXIgcGF0Y2gsCitpcyB0aGF0IGNvbmZsaWN0cyB3aXRoIHdvcmsgYmVpbmcgZG9uZSBieSBvdGhlcnMgdHVybiB1cC4gIEluIHRoZSB3b3JzdAorY2FzZSwgaGVhdnkgcGF0Y2ggY29uZmxpY3RzIGNhbiByZXN1bHQgaW4gc29tZSB3b3JrIGJlaW5nIHB1dCBvbiB0aGUgYmFjaworYnVybmVyIHNvIHRoYXQgdGhlIHJlbWFpbmluZyBwYXRjaGVzIGNhbiBiZSB3b3JrZWQgaW50byBzaGFwZSBhbmQgbWVyZ2VkLgorT3RoZXIgdGltZXMsIGNvbmZsaWN0IHJlc29sdXRpb24gd2lsbCBpbnZvbHZlIHdvcmtpbmcgd2l0aCB0aGUgb3RoZXIKK2RldmVsb3BlcnMgYW5kLCBwb3NzaWJseSwgbW92aW5nIHNvbWUgcGF0Y2hlcyBiZXR3ZWVuIHRyZWVzIHRvIGVuc3VyZSB0aGF0CitldmVyeXRoaW5nIGFwcGxpZXMgY2xlYW5seS4gIFRoaXMgd29yayBjYW4gYmUgYSBwYWluLCBidXQgY291bnQgeW91cgorYmxlc3NpbmdzOiBiZWZvcmUgdGhlIGFkdmVudCBvZiB0aGUgbGludXgtbmV4dCB0cmVlLCB0aGVzZSBjb25mbGljdHMgb2Z0ZW4KK29ubHkgdHVybmVkIHVwIGR1cmluZyB0aGUgbWVyZ2Ugd2luZG93IGFuZCBoYWQgdG8gYmUgYWRkcmVzc2VkIGluIGEgaHVycnkuCitOb3cgdGhleSBjYW4gYmUgcmVzb2x2ZWQgYXQgbGVpc3VyZSwgYmVmb3JlIHRoZSBtZXJnZSB3aW5kb3cgb3BlbnMuCisKK1NvbWUgZGF5LCBpZiBhbGwgZ29lcyB3ZWxsLCB5b3UnbGwgbG9nIG9uIGFuZCBzZWUgdGhhdCB5b3VyIHBhdGNoIGhhcyBiZWVuCittZXJnZWQgaW50byB0aGUgbWFpbmxpbmUga2VybmVsLiAgQ29uZ3JhdHVsYXRpb25zISAgT25jZSB0aGUgY2VsZWJyYXRpb24gaXMKK2NvbXBsZXRlIChhbmQgeW91IGhhdmUgYWRkZWQgeW91cnNlbGYgdG8gdGhlIE1BSU5UQUlORVJTIGZpbGUpLCB0aG91Z2gsIGl0CitpcyB3b3J0aCByZW1lbWJlcmluZyBhbiBpbXBvcnRhbnQgbGl0dGxlIGZhY3Q6IHRoZSBqb2Igc3RpbGwgaXMgbm90IGRvbmUuCitNZXJnaW5nIGludG8gdGhlIG1haW5saW5lIGJyaW5ncyBpdHMgb3duIGNoYWxsZW5nZXMuCisKK1RvIGJlZ2luIHdpdGgsIHRoZSB2aXNpYmlsaXR5IG9mIHlvdXIgcGF0Y2ggaGFzIGluY3JlYXNlZCB5ZXQgYWdhaW4uICBUaGVyZQorbWF5IGJlIGEgbmV3IHJvdW5kIG9mIGNvbW1lbnRzIGZyb20gZGV2ZWxvcGVycyB3aG8gaGFkIG5vdCBiZWVuIGF3YXJlIG9mCit0aGUgcGF0Y2ggYmVmb3JlLiAgSXQgbWF5IGJlIHRlbXB0aW5nIHRvIGlnbm9yZSB0aGVtLCBzaW5jZSB0aGVyZSBpcyBubworbG9uZ2VyIGFueSBxdWVzdGlvbiBvZiB5b3VyIGNvZGUgYmVpbmcgbWVyZ2VkLiAgUmVzaXN0IHRoYXQgdGVtcHRhdGlvbiwKK3Rob3VnaDsgeW91IHN0aWxsIG5lZWQgdG8gYmUgcmVzcG9uc2l2ZSB0byBkZXZlbG9wZXJzIHdobyBoYXZlIHF1ZXN0aW9ucyBvcgorc3VnZ2VzdGlvbnMuCisKK01vcmUgaW1wb3J0YW50bHksIHRob3VnaDogaW5jbHVzaW9uIGludG8gdGhlIG1haW5saW5lIHB1dHMgeW91ciBjb2RlIGludG8KK3RoZSBoYW5kcyBvZiBhIG11Y2ggbGFyZ2VyIGdyb3VwIG9mIHRlc3RlcnMuICBFdmVuIGlmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkCithIGRyaXZlciBmb3IgaGFyZHdhcmUgd2hpY2ggaXMgbm90IHlldCBhdmFpbGFibGUsIHlvdSB3aWxsIGJlIHN1cnByaXNlZCBieQoraG93IG1hbnkgcGVvcGxlIHdpbGwgYnVpbGQgeW91ciBjb2RlIGludG8gdGhlaXIga2VybmVscy4gIEFuZCwgb2YgY291cnNlLAord2hlcmUgdGhlcmUgYXJlIHRlc3RlcnMsIHRoZXJlIHdpbGwgYmUgYnVnIHJlcG9ydHMuCisKK1RoZSB3b3JzdCBzb3J0IG9mIGJ1ZyByZXBvcnRzIGFyZSByZWdyZXNzaW9ucy4gIElmIHlvdXIgcGF0Y2ggY2F1c2VzIGEKK3JlZ3Jlc3Npb24sIHlvdSdsbCBmaW5kIGFuIHVuY29tZm9ydGFibGUgbnVtYmVyIG9mIGV5ZXMgdXBvbiB5b3U7CityZWdyZXNzaW9ucyBuZWVkIHRvIGJlIGZpeGVkIGFzIHNvb24gYXMgcG9zc2libGUuICBJZiB5b3UgYXJlIHVud2lsbGluZyBvcgordW5hYmxlIHRvIGZpeCB0aGUgcmVncmVzc2lvbiAoYW5kIG5vYm9keSBlbHNlIGRvZXMgaXQgZm9yIHlvdSksIHlvdXIgcGF0Y2gKK3dpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSByZW1vdmVkIGR1cmluZyB0aGUgc3RhYmlsaXphdGlvbiBwZXJpb2QuICBCZXlvbmQKK25lZ2F0aW5nIGFsbCBvZiB0aGUgd29yayB5b3UgaGF2ZSBkb25lIHRvIGdldCB5b3VyIHBhdGNoIGludG8gdGhlIG1haW5saW5lLAoraGF2aW5nIGEgcGF0Y2ggcHVsbGVkIGFzIHRoZSByZXN1bHQgb2YgYSBmYWlsdXJlIHRvIGZpeCBhIHJlZ3Jlc3Npb24gY291bGQKK3dlbGwgbWFrZSBpdCBoYXJkZXIgZm9yIHlvdSB0byBnZXQgd29yayBtZXJnZWQgaW4gdGhlIGZ1dHVyZS4KKworQWZ0ZXIgYW55IHJlZ3Jlc3Npb25zIGhhdmUgYmVlbiBkZWFsdCB3aXRoLCB0aGVyZSBtYXkgYmUgb3RoZXIsIG9yZGluYXJ5CitidWdzIHRvIGRlYWwgd2l0aC4gIFRoZSBzdGFiaWxpemF0aW9uIHBlcmlvZCBpcyB5b3VyIGJlc3Qgb3Bwb3J0dW5pdHkgdG8KK2ZpeCB0aGVzZSBidWdzIGFuZCBlbnN1cmUgdGhhdCB5b3VyIGNvZGUncyBkZWJ1dCBpbiBhIG1haW5saW5lIGtlcm5lbAorcmVsZWFzZSBpcyBhcyBzb2xpZCBhcyBwb3NzaWJsZS4gIFNvLCBwbGVhc2UsIGFuc3dlciBidWcgcmVwb3J0cywgYW5kIGZpeAordGhlIHByb2JsZW1zIGlmIGF0IGFsbCBwb3NzaWJsZS4gIFRoYXQncyB3aGF0IHRoZSBzdGFiaWxpemF0aW9uIHBlcmlvZCBpcworZm9yOyB5b3UgY2FuIHN0YXJ0IGNyZWF0aW5nIGNvb2wgbmV3IHBhdGNoZXMgb25jZSBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgb2xkCitvbmVzIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mLgorCitBbmQgZG9uJ3QgZm9yZ2V0IHRoYXQgdGhlcmUgYXJlIG90aGVyIG1pbGVzdG9uZXMgd2hpY2ggbWF5IGFsc28gY3JlYXRlIGJ1ZworcmVwb3J0czogdGhlIG5leHQgbWFpbmxpbmUgc3RhYmxlIHJlbGVhc2UsIHdoZW4gcHJvbWluZW50IGRpc3RyaWJ1dG9ycyBwaWNrCit1cCBhIHZlcnNpb24gb2YgdGhlIGtlcm5lbCBjb250YWluaW5nIHlvdXIgcGF0Y2gsIGV0Yy4gIENvbnRpbnVpbmcgdG8KK3Jlc3BvbmQgdG8gdGhlc2UgcmVwb3J0cyBpcyBhIG1hdHRlciBvZiBiYXNpYyBwcmlkZSBpbiB5b3VyIHdvcmsuICBJZiB0aGF0CitpcyBpbnN1ZmZpY2llbnQgbW90aXZhdGlvbiwgdGhvdWdoLCBpdCdzIGFsc28gd29ydGggY29uc2lkZXJpbmcgdGhhdCB0aGUKK2RldmVsb3BtZW50IGNvbW11bml0eSByZW1lbWJlcnMgZGV2ZWxvcGVycyB3aG8gbG9zZSBpbnRlcmVzdCBpbiB0aGVpciBjb2RlCithZnRlciBpdCdzIG1lcmdlZC4gIFRoZSBuZXh0IHRpbWUgeW91IHBvc3QgYSBwYXRjaCwgdGhleSB3aWxsIGJlIGV2YWx1YXRpbmcKK2l0IHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB5b3Ugd2lsbCBub3QgYmUgYXJvdW5kIHRvIG1haW50YWluIGl0CithZnRlcndhcmQuCisKKworNi4zOiBPVEhFUiBUSElOR1MgVEhBVCBDQU4gSEFQUEVOCisKK09uZSBkYXksIHlvdSBtYXkgb3BlbiB5b3VyIG1haWwgY2xpZW50IGFuZCBzZWUgdGhhdCBzb21lYm9keSBoYXMgbWFpbGVkIHlvdQorYSBwYXRjaCB0byB5b3VyIGNvZGUuICBUaGF0IGlzIG9uZSBvZiB0aGUgYWR2YW50YWdlcyBvZiBoYXZpbmcgeW91ciBjb2RlCitvdXQgdGhlcmUgaW4gdGhlIG9wZW4sIGFmdGVyIGFsbC4gIElmIHlvdSBhZ3JlZSB3aXRoIHRoZSBwYXRjaCwgeW91IGNhbgorZWl0aGVyIGZvcndhcmQgaXQgb24gdG8gdGhlIHN1YnN5c3RlbSBtYWludGFpbmVyIChiZSBzdXJlIHRvIGluY2x1ZGUgYQorcHJvcGVyIEZyb206IGxpbmUgc28gdGhhdCB0aGUgYXR0cmlidXRpb24gaXMgY29ycmVjdCwgYW5kIGFkZCBhIHNpZ25vZmYgb2YKK3lvdXIgb3duKSwgb3Igc2VuZCBhbiBBY2tlZC1ieTogcmVzcG9uc2UgYmFjayBhbmQgbGV0IHRoZSBvcmlnaW5hbCBwb3N0ZXIKK3NlbmQgaXQgdXB3YXJkLgorCitJZiB5b3UgZGlzYWdyZWUgd2l0aCB0aGUgcGF0Y2gsIHNlbmQgYSBwb2xpdGUgcmVzcG9uc2UgZXhwbGFpbmluZyB3aHkuICBJZgorcG9zc2libGUsIHRlbGwgdGhlIGF1dGhvciB3aGF0IGNoYW5nZXMgbmVlZCB0byBiZSBtYWRlIHRvIG1ha2UgdGhlIHBhdGNoCithY2NlcHRhYmxlIHRvIHlvdS4gIFRoZXJlIGlzIGEgY2VydGFpbiByZXNpc3RhbmNlIHRvIG1lcmdpbmcgcGF0Y2hlcyB3aGljaAorYXJlIG9wcG9zZWQgYnkgdGhlIGF1dGhvciBhbmQgbWFpbnRhaW5lciBvZiB0aGUgY29kZSwgYnV0IGl0IG9ubHkgZ29lcyBzbworZmFyLiAgSWYgeW91IGFyZSBzZWVuIGFzIG5lZWRsZXNzbHkgYmxvY2tpbmcgZ29vZCB3b3JrLCB0aG9zZSBwYXRjaGVzIHdpbGwKK2V2ZW50dWFsbHkgZmxvdyBhcm91bmQgeW91IGFuZCBnZXQgaW50byB0aGUgbWFpbmxpbmUgYW55d2F5LiAgSW4gdGhlIExpbnV4CitrZXJuZWwsIG5vYm9keSBoYXMgYWJzb2x1dGUgdmV0byBwb3dlciBvdmVyIGFueSBjb2RlLiAgRXhjZXB0IG1heWJlIExpbnVzLgorCitPbiB2ZXJ5IHJhcmUgb2NjYXNpb24sIHlvdSBtYXkgc2VlIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudDogYW5vdGhlcgorZGV2ZWxvcGVyIHBvc3RzIGEgZGlmZmVyZW50IHNvbHV0aW9uIHRvIHlvdXIgcHJvYmxlbS4gIEF0IHRoYXQgcG9pbnQsCitjaGFuY2VzIGFyZSB0aGF0IG9uZSBvZiB0aGUgdHdvIHBhdGNoZXMgd2lsbCBub3QgYmUgbWVyZ2VkLCBhbmQgIm1pbmUgd2FzCitoZXJlIGZpcnN0IiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBhIGNvbXBlbGxpbmcgdGVjaG5pY2FsIGFyZ3VtZW50LiAgSWYKK3NvbWVib2R5IGVsc2UncyBwYXRjaCBkaXNwbGFjZXMgeW91cnMgYW5kIGdldHMgaW50byB0aGUgbWFpbmxpbmUsIHRoZXJlIGlzCityZWFsbHkgb25seSBvbmUgd2F5IHRvIHJlc3BvbmQ6IGJlIHBsZWFzZWQgdGhhdCB5b3VyIHByb2JsZW0gZ290IHNvbHZlZCBhbmQKK2dldCBvbiB3aXRoIHlvdXIgd29yay4gIEhhdmluZyBvbmUncyB3b3JrIHNob3ZlZCBhc2lkZSBpbiB0aGlzIG1hbm5lciBjYW4KK2JlIGh1cnRmdWwgYW5kIGRpc2NvdXJhZ2luZywgYnV0IHRoZSBjb21tdW5pdHkgd2lsbCByZW1lbWJlciB5b3VyIHJlYWN0aW9uCitsb25nIGFmdGVyIHRoZXkgaGF2ZSBmb3Jnb3R0ZW4gd2hvc2UgcGF0Y2ggYWN0dWFsbHkgZ290IG1lcmdlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy83LkFkdmFuY2VkVG9waWNzIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzcuQWR2YW5jZWRUb3BpY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjZjc0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy83LkFkdmFuY2VkVG9waWNzCkBAIC0wLDAgKzEsMTczIEBACis3OiBBRFZBTkNFRCBUT1BJQ1MKKworQXQgdGhpcyBwb2ludCwgaG9wZWZ1bGx5LCB5b3UgaGF2ZSBhIGhhbmRsZSBvbiBob3cgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MKK3dvcmtzLiAgVGhlcmUgaXMgc3RpbGwgbW9yZSB0byBsZWFybiwgaG93ZXZlciEgIFRoaXMgc2VjdGlvbiB3aWxsIGNvdmVyIGEKK251bWJlciBvZiB0b3BpY3Mgd2hpY2ggY2FuIGJlIGhlbHBmdWwgZm9yIGRldmVsb3BlcnMgd2FudGluZyB0byBiZWNvbWUgYQorcmVndWxhciBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKworNy4xOiBNQU5BR0lORyBQQVRDSEVTIFdJVEggR0lUCisKK1RoZSB1c2Ugb2YgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIGZvciB0aGUga2VybmVsIGJlZ2FuIGluIGVhcmx5IDIwMDIsCit3aGVuIExpbnVzIGZpcnN0IHN0YXJ0ZWQgcGxheWluZyB3aXRoIHRoZSBwcm9wcmlldGFyeSBCaXRLZWVwZXIKK2FwcGxpY2F0aW9uLiAgV2hpbGUgQml0S2VlcGVyIHdhcyBjb250cm92ZXJzaWFsLCB0aGUgYXBwcm9hY2ggdG8gc29mdHdhcmUKK3ZlcnNpb24gbWFuYWdlbWVudCBpdCBlbWJvZGllZCBtb3N0IGNlcnRhaW5seSB3YXMgbm90LiAgRGlzdHJpYnV0ZWQgdmVyc2lvbgorY29udHJvbCBlbmFibGVkIGFuIGltbWVkaWF0ZSBhY2NlbGVyYXRpb24gb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudAorcHJvamVjdC4gIEluIGN1cnJlbnQgdGltZXMsIHRoZXJlIGFyZSBzZXZlcmFsIGZyZWUgYWx0ZXJuYXRpdmVzIHRvCitCaXRLZWVwZXIuICBGb3IgYmV0dGVyIG9yIGZvciB3b3JzZSwgdGhlIGtlcm5lbCBwcm9qZWN0IGhhcyBzZXR0bGVkIG9uIGdpdAorYXMgaXRzIHRvb2wgb2YgY2hvaWNlLgorCitNYW5hZ2luZyBwYXRjaGVzIHdpdGggZ2l0IGNhbiBtYWtlIGxpZmUgbXVjaCBlYXNpZXIgZm9yIHRoZSBkZXZlbG9wZXIsCitlc3BlY2lhbGx5IGFzIHRoZSB2b2x1bWUgb2YgdGhvc2UgcGF0Y2hlcyBncm93cy4gIEdpdCBhbHNvIGhhcyBpdHMgcm91Z2gKK2VkZ2VzIGFuZCBwb3NlcyBjZXJ0YWluIGhhemFyZHM7IGl0IGlzIGEgeW91bmcgYW5kIHBvd2VyZnVsIHRvb2wgd2hpY2ggaXMKK3N0aWxsIGJlaW5nIGNpdmlsaXplZCBieSBpdHMgZGV2ZWxvcGVycy4gIFRoaXMgZG9jdW1lbnQgd2lsbCBub3QgYXR0ZW1wdCB0bwordGVhY2ggdGhlIHJlYWRlciBob3cgdG8gdXNlIGdpdDsgdGhhdCB3b3VsZCBiZSBzdWZmaWNpZW50IG1hdGVyaWFsIGZvciBhCitsb25nIGRvY3VtZW50IGluIGl0cyBvd24gcmlnaHQuICBJbnN0ZWFkLCB0aGUgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGhvdyBnaXQKK2ZpdHMgaW50byB0aGUga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3MgaW4gcGFydGljdWxhci4gIERldmVsb3BlcnMgd2hvCit3aXNoIHRvIGNvbWUgdXAgdG8gc3BlZWQgd2l0aCBnaXQgd2lsbCBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYXQ6CisKKwlodHRwOi8vZ2l0Lm9yLmN6LworCisJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvdXNlci1tYW51YWwuaHRtbAorCithbmQgb24gdmFyaW91cyB0dXRvcmlhbHMgZm91bmQgb24gdGhlIHdlYi4KKworVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIHJlYWQgdGhlIGFib3ZlIHNpdGVzIGFuZCBnZXQgYSBzb2xpZAordW5kZXJzdGFuZGluZyBvZiBob3cgZ2l0IHdvcmtzIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IHRvIG1ha2UgcGF0Y2hlcworYXZhaWxhYmxlIHRvIG90aGVycy4gIEEgZ2l0LXVzaW5nIGRldmVsb3BlciBzaG91bGQgYmUgYWJsZSB0byBvYnRhaW4gYSBjb3B5CitvZiB0aGUgbWFpbmxpbmUgcmVwb3NpdG9yeSwgZXhwbG9yZSB0aGUgcmV2aXNpb24gaGlzdG9yeSwgY29tbWl0IGNoYW5nZXMgdG8KK3RoZSB0cmVlLCB1c2UgYnJhbmNoZXMsIGV0Yy4gIEFuIHVuZGVyc3RhbmRpbmcgb2YgZ2l0J3MgdG9vbHMgZm9yIHRoZQorcmV3cml0aW5nIG9mIGhpc3RvcnkgKHN1Y2ggYXMgcmViYXNlKSBpcyBhbHNvIHVzZWZ1bC4gIEdpdCBjb21lcyB3aXRoIGl0cworb3duIHRlcm1pbm9sb2d5IGFuZCBjb25jZXB0czsgYSBuZXcgdXNlciBvZiBnaXQgc2hvdWxkIGtub3cgYWJvdXQgcmVmcywKK3JlbW90ZSBicmFuY2hlcywgdGhlIGluZGV4LCBmYXN0LWZvcndhcmQgbWVyZ2VzLCBwdXNoZXMgYW5kIHB1bGxzLCBkZXRhY2hlZAoraGVhZHMsIGV0Yy4gIEl0IGNhbiBhbGwgYmUgYSBsaXR0bGUgaW50aW1pZGF0aW5nIGF0IHRoZSBvdXRzZXQsIGJ1dCB0aGUKK2NvbmNlcHRzIGFyZSBub3QgdGhhdCBoYXJkIHRvIGdyYXNwIHdpdGggYSBiaXQgb2Ygc3R1ZHkuCisKK1VzaW5nIGdpdCB0byBnZW5lcmF0ZSBwYXRjaGVzIGZvciBzdWJtaXNzaW9uIGJ5IGVtYWlsIGNhbiBiZSBhIGdvb2QKK2V4ZXJjaXNlIHdoaWxlIGNvbWluZyB1cCB0byBzcGVlZC4KKworV2hlbiB5b3UgYXJlIHJlYWR5IHRvIHN0YXJ0IHB1dHRpbmcgdXAgZ2l0IHRyZWVzIGZvciBvdGhlcnMgdG8gbG9vayBhdCwgeW91Cit3aWxsLCBvZiBjb3Vyc2UsIG5lZWQgYSBzZXJ2ZXIgdGhhdCBjYW4gYmUgcHVsbGVkIGZyb20uICBTZXR0aW5nIHVwIHN1Y2ggYQorc2VydmVyIHdpdGggZ2l0LWRhZW1vbiBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBpZiB5b3UgaGF2ZSBhIHN5c3RlbQord2hpY2ggaXMgYWNjZXNzaWJsZSB0byB0aGUgSW50ZXJuZXQuICBPdGhlcndpc2UsIGZyZWUsIHB1YmxpYyBob3N0aW5nIHNpdGVzCisoR2l0aHViLCBmb3IgZXhhbXBsZSkgYXJlIHN0YXJ0aW5nIHRvIGFwcGVhciBvbiB0aGUgbmV0LiAgRXN0YWJsaXNoZWQKK2RldmVsb3BlcnMgY2FuIGdldCBhbiBhY2NvdW50IG9uIGtlcm5lbC5vcmcsIGJ1dCB0aG9zZSBhcmUgbm90IGVhc3kgdG8gY29tZQorYnk7IHNlZSBodHRwOi8va2VybmVsLm9yZy9mYXEvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUaGUgbm9ybWFsIGdpdCB3b3JrZmxvdyBpbnZvbHZlcyB0aGUgdXNlIG9mIGEgbG90IG9mIGJyYW5jaGVzLiAgRWFjaCBsaW5lCitvZiBkZXZlbG9wbWVudCBjYW4gYmUgc2VwYXJhdGVkIGludG8gYSBzZXBhcmF0ZSAidG9waWMgYnJhbmNoIiBhbmQKK21haW50YWluZWQgaW5kZXBlbmRlbnRseS4gIEJyYW5jaGVzIGluIGdpdCBhcmUgY2hlYXAsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bworbm90IG1ha2UgZnJlZSB1c2Ugb2YgdGhlbS4gIEFuZCwgaW4gYW55IGNhc2UsIHlvdSBzaG91bGQgbm90IGRvIHlvdXIKK2RldmVsb3BtZW50IGluIGFueSBicmFuY2ggd2hpY2ggeW91IGludGVuZCB0byBhc2sgb3RoZXJzIHRvIHB1bGwgZnJvbS4KK1B1YmxpY2x5LWF2YWlsYWJsZSBicmFuY2hlcyBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGNhcmU7IG1lcmdlIGluIHBhdGNoZXMKK2Zyb20gZGV2ZWxvcG1lbnQgYnJhbmNoZXMgd2hlbiB0aGV5IGFyZSBpbiBjb21wbGV0ZSBmb3JtIGFuZCByZWFkeSB0byBnbyAtCitub3QgYmVmb3JlLgorCitHaXQgcHJvdmlkZXMgc29tZSBwb3dlcmZ1bCB0b29scyB3aGljaCBjYW4gYWxsb3cgeW91IHRvIHJld3JpdGUgeW91cgorZGV2ZWxvcG1lbnQgaGlzdG9yeS4gIEFuIGluY29udmVuaWVudCBwYXRjaCAob25lIHdoaWNoIGJyZWFrcyBiaXNlY3Rpb24sCitzYXksIG9yIHdoaWNoIGhhcyBzb21lIG90aGVyIHNvcnQgb2Ygb2J2aW91cyBidWcpIGNhbiBiZSBmaXhlZCBpbiBwbGFjZSBvcgorbWFkZSB0byBkaXNhcHBlYXIgZnJvbSB0aGUgaGlzdG9yeSBlbnRpcmVseS4gIEEgcGF0Y2ggc2VyaWVzIGNhbiBiZQorcmV3cml0dGVuIGFzIGlmIGl0IGhhZCBiZWVuIHdyaXR0ZW4gb24gdG9wIG9mIHRvZGF5J3MgbWFpbmxpbmUsIGV2ZW4gdGhvdWdoCit5b3UgaGF2ZSBiZWVuIHdvcmtpbmcgb24gaXQgZm9yIG1vbnRocy4gIENoYW5nZXMgY2FuIGJlIHRyYW5zcGFyZW50bHkKK3NoaWZ0ZWQgZnJvbSBvbmUgYnJhbmNoIHRvIGFub3RoZXIuICBBbmQgc28gb24uICBKdWRpY2lvdXMgdXNlIG9mIGdpdCdzCithYmlsaXR5IHRvIHJldmlzZSBoaXN0b3J5IGNhbiBoZWxwIGluIHRoZSBjcmVhdGlvbiBvZiBjbGVhbiBwYXRjaCBzZXRzIHdpdGgKK2Zld2VyIHByb2JsZW1zLgorCitFeGNlc3NpdmUgdXNlIG9mIHRoaXMgY2FwYWJpbGl0eSBjYW4gbGVhZCB0byBvdGhlciBwcm9ibGVtcywgdGhvdWdoLCBiZXlvbmQKK2Egc2ltcGxlIG9ic2Vzc2lvbiBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBwZXJmZWN0IHByb2plY3QgaGlzdG9yeS4KK1Jld3JpdGluZyBoaXN0b3J5IHdpbGwgcmV3cml0ZSB0aGUgY2hhbmdlcyBjb250YWluZWQgaW4gdGhhdCBoaXN0b3J5LAordHVybmluZyBhIHRlc3RlZCAoaG9wZWZ1bGx5KSBrZXJuZWwgdHJlZSBpbnRvIGFuIHVudGVzdGVkIG9uZS4gIEJ1dCwgYmV5b25kCit0aGF0LCBkZXZlbG9wZXJzIGNhbm5vdCBlYXNpbHkgY29sbGFib3JhdGUgaWYgdGhleSBkbyBub3QgaGF2ZSBhIHNoYXJlZAordmlldyBvZiB0aGUgcHJvamVjdCBoaXN0b3J5OyBpZiB5b3UgcmV3cml0ZSBoaXN0b3J5IHdoaWNoIG90aGVyIGRldmVsb3BlcnMKK2hhdmUgcHVsbGVkIGludG8gdGhlaXIgcmVwb3NpdG9yaWVzLCB5b3Ugd2lsbCBtYWtlIGxpZmUgbXVjaCBtb3JlIGRpZmZpY3VsdAorZm9yIHRob3NlIGRldmVsb3BlcnMuICBTbyBhIHNpbXBsZSBydWxlIG9mIHRodW1iIGFwcGxpZXMgaGVyZTogaGlzdG9yeQord2hpY2ggaGFzIGJlZW4gZXhwb3J0ZWQgdG8gb3RoZXJzIHNob3VsZCBnZW5lcmFsbHkgYmUgc2VlbiBhcyBpbW11dGFibGUKK3RoZXJlYWZ0ZXIuCisKK1NvLCBvbmNlIHlvdSBwdXNoIGEgc2V0IG9mIGNoYW5nZXMgdG8geW91ciBwdWJsaWNseS1hdmFpbGFibGUgc2VydmVyLCB0aG9zZQorY2hhbmdlcyBzaG91bGQgbm90IGJlIHJld3JpdHRlbi4gIEdpdCB3aWxsIGF0dGVtcHQgdG8gZW5mb3JjZSB0aGlzIHJ1bGUgaWYKK3lvdSB0cnkgdG8gcHVzaCBjaGFuZ2VzIHdoaWNoIGRvIG5vdCByZXN1bHQgaW4gYSBmYXN0LWZvcndhcmQgbWVyZ2UKKyhpLmUuIGNoYW5nZXMgd2hpY2ggZG8gbm90IHNoYXJlIHRoZSBzYW1lIGhpc3RvcnkpLiAgSXQgaXMgcG9zc2libGUgdG8KK292ZXJyaWRlIHRoaXMgY2hlY2ssIGFuZCB0aGVyZSBtYXkgYmUgdGltZXMgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmV3cml0ZQorYW4gZXhwb3J0ZWQgdHJlZS4gIE1vdmluZyBjaGFuZ2VzZXRzIGJldHdlZW4gdHJlZXMgdG8gYXZvaWQgY29uZmxpY3RzIGluCitsaW51eC1uZXh0IGlzIG9uZSBleGFtcGxlLiAgQnV0IHN1Y2ggYWN0aW9ucyBzaG91bGQgYmUgcmFyZS4gIFRoaXMgaXMgb25lCitvZiB0aGUgcmVhc29ucyB3aHkgZGV2ZWxvcG1lbnQgc2hvdWxkIGJlIGRvbmUgaW4gcHJpdmF0ZSBicmFuY2hlcyAod2hpY2gKK2NhbiBiZSByZXdyaXR0ZW4gaWYgbmVjZXNzYXJ5KSBhbmQgb25seSBtb3ZlZCBpbnRvIHB1YmxpYyBicmFuY2hlcyB3aGVuCitpdCdzIGluIGEgcmVhc29uYWJseSBhZHZhbmNlZCBzdGF0ZS4KKworQXMgdGhlIG1haW5saW5lIChvciBvdGhlciB0cmVlIHVwb24gd2hpY2ggYSBzZXQgb2YgY2hhbmdlcyBpcyBiYXNlZCkKK2FkdmFuY2VzLCBpdCBpcyB0ZW1wdGluZyB0byBtZXJnZSB3aXRoIHRoYXQgdHJlZSB0byBzdGF5IG9uIHRoZSBsZWFkaW5nCitlZGdlLiAgRm9yIGEgcHJpdmF0ZSBicmFuY2gsIHJlYmFzaW5nIGNhbiBiZSBhbiBlYXN5IHdheSB0byBrZWVwIHVwIHdpdGgKK2Fub3RoZXIgdHJlZSwgYnV0IHJlYmFzaW5nIGlzIG5vdCBhbiBvcHRpb24gb25jZSBhIHRyZWUgaXMgZXhwb3J0ZWQgdG8gdGhlCit3b3JsZC4gIE9uY2UgdGhhdCBoYXBwZW5zLCBhIGZ1bGwgbWVyZ2UgbXVzdCBiZSBkb25lLiAgTWVyZ2luZyBvY2Nhc2lvbmFsbHkKK21ha2VzIGdvb2Qgc2Vuc2UsIGJ1dCBvdmVybHkgZnJlcXVlbnQgbWVyZ2VzIGNhbiBjbHV0dGVyIHRoZSBoaXN0b3J5CituZWVkbGVzc2x5LiAgU3VnZ2VzdGVkIHRlY2huaXF1ZSBpbiB0aGlzIGNhc2UgaXMgdG8gbWVyZ2UgaW5mcmVxdWVudGx5LCBhbmQKK2dlbmVyYWxseSBvbmx5IGF0IHNwZWNpZmljIHJlbGVhc2UgcG9pbnRzIChzdWNoIGFzIGEgbWFpbmxpbmUgLXJjCityZWxlYXNlKS4gIElmIHlvdSBhcmUgbmVydm91cyBhYm91dCBzcGVjaWZpYyBjaGFuZ2VzLCB5b3UgY2FuIGFsd2F5cworcGVyZm9ybSB0ZXN0IG1lcmdlcyBpbiBhIHByaXZhdGUgYnJhbmNoLiAgVGhlIGdpdCAicmVyZXJlIiB0b29sIGNhbiBiZQordXNlZnVsIGluIHN1Y2ggc2l0dWF0aW9uczsgaXQgcmVtZW1iZXJzIGhvdyBtZXJnZSBjb25mbGljdHMgd2VyZSByZXNvbHZlZAorc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGUgc2FtZSB3b3JrIHR3aWNlLgorCitPbmUgb2YgdGhlIGJpZ2dlc3QgcmVjdXJyaW5nIGNvbXBsYWludHMgYWJvdXQgdG9vbHMgbGlrZSBnaXQgaXMgdGhpczogdGhlCittYXNzIG1vdmVtZW50IG9mIHBhdGNoZXMgZnJvbSBvbmUgcmVwb3NpdG9yeSB0byBhbm90aGVyIG1ha2VzIGl0IGVhc3kgdG8KK3NsaXAgaW4gaWxsLWFkdmlzZWQgY2hhbmdlcyB3aGljaCBnbyBpbnRvIHRoZSBtYWlubGluZSBiZWxvdyB0aGUgcmV2aWV3CityYWRhci4gIEtlcm5lbCBkZXZlbG9wZXJzIHRlbmQgdG8gZ2V0IHVuaGFwcHkgd2hlbiB0aGV5IHNlZSB0aGF0IGtpbmQgb2YKK3RoaW5nIGhhcHBlbmluZzsgcHV0dGluZyB1cCBhIGdpdCB0cmVlIHdpdGggdW5yZXZpZXdlZCBvciBvZmYtdG9waWMgcGF0Y2hlcworY2FuIGFmZmVjdCB5b3VyIGFiaWxpdHkgdG8gZ2V0IHRyZWVzIHB1bGxlZCBpbiB0aGUgZnV0dXJlLiAgUXVvdGluZyBMaW51czoKKworCVlvdSBjYW4gc2VuZCBtZSBwYXRjaGVzLCBidXQgZm9yIG1lIHRvIHB1bGwgYSBnaXQgcGF0Y2ggZnJvbSB5b3UsIEkKKwluZWVkIHRvIGtub3cgdGhhdCB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZywgYW5kIEkgbmVlZCB0byBiZSBhYmxlCisJdG8gdHJ1c3QgdGhpbmdzICp3aXRob3V0KiB0aGVuIGhhdmluZyB0byBnbyBhbmQgY2hlY2sgZXZlcnkKKwlpbmRpdmlkdWFsIGNoYW5nZSBieSBoYW5kLgorCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjI0MTM1LykuICAKKworVG8gYXZvaWQgdGhpcyBraW5kIG9mIHNpdHVhdGlvbiwgZW5zdXJlIHRoYXQgYWxsIHBhdGNoZXMgd2l0aGluIGEgZ2l2ZW4KK2JyYW5jaCBzdGljayBjbG9zZWx5IHRvIHRoZSBhc3NvY2lhdGVkIHRvcGljOyBhICJkcml2ZXIgZml4ZXMiIGJyYW5jaAorc2hvdWxkIG5vdCBiZSBtYWtpbmcgY2hhbmdlcyB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiAgQW5kLCBtb3N0CitpbXBvcnRhbnRseSwgZG8gbm90IHVzZSBhIGdpdCB0cmVlIHRvIGJ5cGFzcyB0aGUgcmV2aWV3IHByb2Nlc3MuICBQb3N0IGFuCitvY2Nhc2lvbmFsIHN1bW1hcnkgb2YgdGhlIHRyZWUgdG8gdGhlIHJlbGV2YW50IGxpc3QsIGFuZCwgd2hlbiB0aGUgdGltZSBpcworcmlnaHQsIHJlcXVlc3QgdGhhdCB0aGUgdHJlZSBiZSBpbmNsdWRlZCBpbiBsaW51eC1uZXh0LgorCitJZiBhbmQgd2hlbiBvdGhlcnMgc3RhcnQgdG8gc2VuZCBwYXRjaGVzIGZvciBpbmNsdXNpb24gaW50byB5b3VyIHRyZWUsCitkb24ndCBmb3JnZXQgdG8gcmV2aWV3IHRoZW0uICBBbHNvIGVuc3VyZSB0aGF0IHlvdSBtYWludGFpbiB0aGUgY29ycmVjdAorYXV0aG9yc2hpcCBpbmZvcm1hdGlvbjsgdGhlIGdpdCAiYW0iIHRvb2wgZG9lcyBpdHMgYmVzdCBpbiB0aGlzIHJlZ2FyZCwgYnV0Cit5b3UgbWF5IGhhdmUgdG8gYWRkIGEgIkZyb206IiBsaW5lIHRvIHRoZSBwYXRjaCBpZiBpdCBoYXMgYmVlbiByZWxheWVkIHRvCit5b3UgdmlhIGEgdGhpcmQgcGFydHkuCisKK1doZW4gcmVxdWVzdGluZyBhIHB1bGwsIGJlIHN1cmUgdG8gZ2l2ZSBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uOiB3aGVyZQoreW91ciB0cmVlIGlzLCB3aGF0IGJyYW5jaCB0byBwdWxsLCBhbmQgd2hhdCBjaGFuZ2VzIHdpbGwgcmVzdWx0IGZyb20gdGhlCitwdWxsLiAgVGhlIGdpdCByZXF1ZXN0LXB1bGwgY29tbWFuZCBjYW4gYmUgaGVscGZ1bCBpbiB0aGlzIHJlZ2FyZDsgaXQgd2lsbAorZm9ybWF0IHRoZSByZXF1ZXN0IGFzIG90aGVyIGRldmVsb3BlcnMgZXhwZWN0LCBhbmQgd2lsbCBhbHNvIGNoZWNrIHRvIGJlCitzdXJlIHRoYXQgeW91IGhhdmUgcmVtZW1iZXJlZCB0byBwdXNoIHRob3NlIGNoYW5nZXMgdG8gdGhlIHB1YmxpYyBzZXJ2ZXIuIAorCisKKzcuMjogUkVWSUVXSU5HIFBBVENIRVMKKworU29tZSByZWFkZXJzIHdpbGwgY2VydGFpbmx5IG9iamVjdCB0byBwdXR0aW5nIHRoaXMgc2VjdGlvbiB3aXRoICJhZHZhbmNlZAordG9waWNzIiBvbiB0aGUgZ3JvdW5kcyB0aGF0IGV2ZW4gYmVnaW5uaW5nIGtlcm5lbCBkZXZlbG9wZXJzIHNob3VsZCBiZQorcmV2aWV3aW5nIHBhdGNoZXMuICBJdCBpcyBjZXJ0YWlubHkgdHJ1ZSB0aGF0IHRoZXJlIGlzIG5vIGJldHRlciB3YXkgdG8KK2xlYXJuIGhvdyB0byBwcm9ncmFtIGluIHRoZSBrZXJuZWwgZW52aXJvbm1lbnQgdGhhbiBieSBsb29raW5nIGF0IGNvZGUKK3Bvc3RlZCBieSBvdGhlcnMuICBJbiBhZGRpdGlvbiwgcmV2aWV3ZXJzIGFyZSBmb3JldmVyIGluIHNob3J0IHN1cHBseTsgYnkKK2xvb2tpbmcgYXQgY29kZSB5b3UgY2FuIG1ha2UgYSBzaWduaWZpY2FudCBjb250cmlidXRpb24gdG8gdGhlIHByb2Nlc3MgYXMgYQord2hvbGUuCisKK1Jldmlld2luZyBjb2RlIGNhbiBiZSBhbiBpbnRpbWlkYXRpbmcgcHJvc3BlY3QsIGVzcGVjaWFsbHkgZm9yIGEgbmV3IGtlcm5lbAorZGV2ZWxvcGVyIHdobyBtYXkgd2VsbCBmZWVsIG5lcnZvdXMgYWJvdXQgcXVlc3Rpb25pbmcgY29kZSAtIGluIHB1YmxpYyAtCit3aGljaCBoYXMgYmVlbiBwb3N0ZWQgYnkgdGhvc2Ugd2l0aCBtb3JlIGV4cGVyaWVuY2UuICBFdmVuIGNvZGUgd3JpdHRlbiBieQordGhlIG1vc3QgZXhwZXJpZW5jZWQgZGV2ZWxvcGVycyBjYW4gYmUgaW1wcm92ZWQsIHRob3VnaC4gIFBlcmhhcHMgdGhlIGJlc3QKK3BpZWNlIG9mIGFkdmljZSBmb3IgcmV2aWV3ZXJzIChhbGwgcmV2aWV3ZXJzKSBpcyB0aGlzOiBwaHJhc2UgcmV2aWV3Citjb21tZW50cyBhcyBxdWVzdGlvbnMgcmF0aGVyIHRoYW4gY3JpdGljaXNtcy4gIEFza2luZyAiaG93IGRvZXMgdGhlIGxvY2sKK2dldCByZWxlYXNlZCBpbiB0aGlzIHBhdGg/IiB3aWxsIGFsd2F5cyB3b3JrIGJldHRlciB0aGFuIHN0YXRpbmcgInRoZQorbG9ja2luZyBoZXJlIGlzIHdyb25nLiIKKworRGlmZmVyZW50IGRldmVsb3BlcnMgd2lsbCByZXZpZXcgY29kZSBmcm9tIGRpZmZlcmVudCBwb2ludHMgb2Ygdmlldy4gIFNvbWUKK2FyZSBtb3N0bHkgY29uY2VybmVkIHdpdGggY29kaW5nIHN0eWxlIGFuZCB3aGV0aGVyIGNvZGUgbGluZXMgaGF2ZSB0cmFpbGluZword2hpdGUgc3BhY2UuICBPdGhlcnMgd2lsbCBmb2N1cyBwcmltYXJpbHkgb24gd2hldGhlciB0aGUgY2hhbmdlIGltcGxlbWVudGVkCitieSB0aGUgcGF0Y2ggYXMgYSB3aG9sZSBpcyBhIGdvb2QgdGhpbmcgZm9yIHRoZSBrZXJuZWwgb3Igbm90LiAgWWV0IG90aGVycword2lsbCBjaGVjayBmb3IgcHJvYmxlbWF0aWMgbG9ja2luZywgZXhjZXNzaXZlIHN0YWNrIHVzYWdlLCBwb3NzaWJsZQorc2VjdXJpdHkgaXNzdWVzLCBkdXBsaWNhdGlvbiBvZiBjb2RlIGZvdW5kIGVsc2V3aGVyZSwgYWRlcXVhdGUKK2RvY3VtZW50YXRpb24sIGFkdmVyc2UgZWZmZWN0cyBvbiBwZXJmb3JtYW5jZSwgdXNlci1zcGFjZSBBQkkgY2hhbmdlcywgZXRjLgorQWxsIHR5cGVzIG9mIHJldmlldywgaWYgdGhleSBsZWFkIHRvIGJldHRlciBjb2RlIGdvaW5nIGludG8gdGhlIGtlcm5lbCwgYXJlCit3ZWxjb21lIGFuZCB3b3J0aHdoaWxlLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy84LkNvbmNsdXNpb24gYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvOC5Db25jbHVzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTBhYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvOC5Db25jbHVzaW9uCkBAIC0wLDAgKzEsNzQgQEAKKzg6IEZPUiBNT1JFIElORk9STUFUSU9OCisKK1RoZXJlIGFyZSBudW1lcm91cyBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIG9uIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBhbmQKK3JlbGF0ZWQgdG9waWNzLiAgRmlyc3QgYW1vbmcgdGhvc2Ugd2lsbCBhbHdheXMgYmUgdGhlIERvY3VtZW50YXRpb24KK2RpcmVjdG9yeSBmb3VuZCBpbiB0aGUga2VybmVsIHNvdXJjZSBkaXN0cmlidXRpb24uICBUaGUgdG9wLWxldmVsIEhPV1RPCitmaWxlIGlzIGFuIGltcG9ydGFudCBzdGFydGluZyBwb2ludDsgU3VibWl0dGluZ1BhdGNoZXMgYW5kCitTdWJtaXR0aW5nRHJpdmVycyBhcmUgYWxzbyBzb21ldGhpbmcgd2hpY2ggYWxsIGtlcm5lbCBkZXZlbG9wZXJzIHNob3VsZAorcmVhZC4gIE1hbnkgaW50ZXJuYWwga2VybmVsIEFQSXMgYXJlIGRvY3VtZW50ZWQgdXNpbmcgdGhlIGtlcm5lbGRvYworbWVjaGFuaXNtOyAibWFrZSBodG1sZG9jcyIgb3IgIm1ha2UgcGRmZG9jcyIgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhvc2UKK2RvY3VtZW50cyBpbiBIVE1MIG9yIFBERiBmb3JtYXQgKHRob3VnaCB0aGUgdmVyc2lvbiBvZiBUZVggc2hpcHBlZCBieSBzb21lCitkaXN0cmlidXRpb25zIHJ1bnMgaW50byBpbnRlcm5hbCBsaW1pdHMgYW5kIGZhaWxzIHRvIHByb2Nlc3MgdGhlIGRvY3VtZW50cworcHJvcGVybHkpLgorCitWYXJpb3VzIHdlYiBzaXRlcyBkaXNjdXNzIGtlcm5lbCBkZXZlbG9wbWVudCBhdCBhbGwgbGV2ZWxzIG9mIGRldGFpbC4gIFlvdXIKK2F1dGhvciB3b3VsZCBsaWtlIHRvIGh1bWJseSBzdWdnZXN0IGh0dHA6Ly9sd24ubmV0LyBhcyBhIHNvdXJjZTsKK2luZm9ybWF0aW9uIG9uIG1hbnkgc3BlY2lmaWMga2VybmVsIHRvcGljcyBjYW4gYmUgZm91bmQgdmlhIHRoZSBMV04ga2VybmVsCitpbmRleCBhdDoKKworCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9JbmRleC8KKworQmV5b25kIHRoYXQsIGEgdmFsdWFibGUgcmVzb3VyY2UgZm9yIGtlcm5lbCBkZXZlbG9wZXJzIGlzOgorCisJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnLworCitJbmZvcm1hdGlvbiBhYm91dCB0aGUgbGludXgtbmV4dCB0cmVlIGdhdGhlcnMgYXQ6CisKKwlodHRwOi8vbGludXguZi1zZWlkZWwuZGUvbGludXgtbmV4dC9wbXdpa2kvCisKK0FuZCwgb2YgY291cnNlLCBvbmUgc2hvdWxkIG5vdCBmb3JnZXQgaHR0cDovL2tlcm5lbC5vcmcvLCB0aGUgZGVmaW5pdGl2ZQorbG9jYXRpb24gZm9yIGtlcm5lbCByZWxlYXNlIGluZm9ybWF0aW9uLgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgYm9va3Mgb24ga2VybmVsIGRldmVsb3BtZW50OgorCisJTGludXggRGV2aWNlIERyaXZlcnMsIDNyZCBFZGl0aW9uIChKb25hdGhhbiBDb3JiZXQsIEFsZXNzYW5kcm8KKwlSdWJpbmksIGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4pLiAgT25saW5lIGF0CisJaHR0cDovL2x3bi5uZXQvS2VybmVsL0xERDMvLgorCisJTGludXggS2VybmVsIERldmVsb3BtZW50IChSb2JlcnQgTG92ZSkuCisKKwlVbmRlcnN0YW5kaW5nIHRoZSBMaW51eCBLZXJuZWwgKERhbmllbCBCb3ZldCBhbmQgTWFyY28gQ2VzYXRpKS4KKworQWxsIG9mIHRoZXNlIGJvb2tzIHN1ZmZlciBmcm9tIGEgY29tbW9uIGZhdWx0LCB0aG91Z2g6IHRoZXkgdGVuZCB0byBiZQorc29tZXdoYXQgb2Jzb2xldGUgYnkgdGhlIHRpbWUgdGhleSBoaXQgdGhlIHNoZWx2ZXMsIGFuZCB0aGV5IGhhdmUgYmVlbiBvbgordGhlIHNoZWx2ZXMgZm9yIGEgd2hpbGUgbm93LiAgU3RpbGwsIHRoZXJlIGlzIHF1aXRlIGEgYml0IG9mIGdvb2QKK2luZm9ybWF0aW9uIHRvIGJlIGZvdW5kIHRoZXJlLgorCitEb2N1bWVudGF0aW9uIGZvciBnaXQgY2FuIGJlIGZvdW5kIGF0OgorCisJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvCisKKwlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy91c2VyLW1hbnVhbC5odG1sCisKKworOTogQ09OQ0xVU0lPTgorCitDb25ncmF0dWxhdGlvbnMgdG8gYW55Ym9keSB3aG8gaGFzIG1hZGUgaXQgdGhyb3VnaCB0aGlzIGxvbmctd2luZGVkCitkb2N1bWVudC4gIEhvcGVmdWxseSBpdCBoYXMgcHJvdmlkZWQgYSBoZWxwZnVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZQorTGludXgga2VybmVsIGlzIGRldmVsb3BlZCBhbmQgaG93IHlvdSBjYW4gcGFydGljaXBhdGUgaW4gdGhhdCBwcm9jZXNzLgorCitJbiB0aGUgZW5kLCBpdCdzIHRoZSBwYXJ0aWNpcGF0aW9uIHRoYXQgbWF0dGVycy4gIEFueSBvcGVuIHNvdXJjZSBzb2Z0d2FyZQorcHJvamVjdCBpcyBubyBtb3JlIHRoYW4gdGhlIHN1bSBvZiB3aGF0IGl0cyBjb250cmlidXRvcnMgcHV0IGludG8gaXQuICBUaGUKK0xpbnV4IGtlcm5lbCBoYXMgcHJvZ3Jlc3NlZCBhcyBxdWlja2x5IGFuZCBhcyB3ZWxsIGFzIGl0IGhhcyBiZWNhdXNlIGl0IGhhcworYmVlbiBoZWxwZWQgYnkgYW4gaW1wcmVzc2l2ZWx5IGxhcmdlIGdyb3VwIG9mIGRldmVsb3BlcnMsIGFsbCBvZiB3aG9tIGFyZQord29ya2luZyB0byBtYWtlIGl0IGJldHRlci4gIFRoZSBrZXJuZWwgaXMgYSBwcmVtaWVyIGV4YW1wbGUgb2Ygd2hhdCBjYW4gYmUKK2RvbmUgd2hlbiB0aG91c2FuZHMgb2YgcGVvcGxlIHdvcmsgdG9nZXRoZXIgdG93YXJkIGEgY29tbW9uIGdvYWwuCisKK1RoZSBrZXJuZWwgY2FuIGFsd2F5cyBiZW5lZml0IGZyb20gYSBsYXJnZXIgZGV2ZWxvcGVyIGJhc2UsIHRob3VnaC4gIFRoZXJlCitpcyBhbHdheXMgbW9yZSB3b3JrIHRvIGRvLiAgQnV0LCBqdXN0IGFzIGltcG9ydGFudGx5LCBtb3N0IG90aGVyCitwYXJ0aWNpcGFudHMgaW4gdGhlIExpbnV4IGVjb3N5c3RlbSBjYW4gYmVuZWZpdCB0aHJvdWdoIGNvbnRyaWJ1dGluZyB0byB0aGUKK2tlcm5lbC4gIEdldHRpbmcgY29kZSBpbnRvIHRoZSBtYWlubGluZSBpcyB0aGUga2V5IHRvIGhpZ2hlciBjb2RlIHF1YWxpdHksCitsb3dlciBtYWludGVuYW5jZSBhbmQgZGlzdHJpYnV0aW9uIGNvc3RzLCBhIGhpZ2hlciBsZXZlbCBvZiBpbmZsdWVuY2Ugb3ZlcgordGhlIGRpcmVjdGlvbiBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQsIGFuZCBtb3JlLiAgSXQgaXMgYSBzaXR1YXRpb24gd2hlcmUKK2V2ZXJ5Ym9keSBpbnZvbHZlZCB3aW5zLiAgRmlyZSB1cCB5b3VyIGVkaXRvciBhbmQgY29tZSBqb2luIHVzOyB5b3Ugd2lsbCBiZQorbW9yZSB0aGFuIHdlbGNvbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCAwNWM4MDY0Li4yYmUwODI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTI1NzEsNiArMjU3MSw5IEBACiAJCTE2MCA9IC9kZXYvdXNiL2xlZ291c2J0b3dlcjAJMXN0IFVTQiBMZWdvdG93ZXIgZGV2aWNlCiAJCSAgICAuLi4KIAkJMTc1ID0gL2Rldi91c2IvbGVnb3VzYnRvd2VyMTUJMTZ0aCBVU0IgTGVnb3Rvd2VyIGRldmljZQorCQkxNzYgPSAvZGV2L3VzYi91c2J0bWMxCUZpcnN0IFVTQiBUTUMgZGV2aWNlCisJCSAgIC4uLgorCQkxOTIgPSAvZGV2L3VzYi91c2J0bWMxNgkxNnRoIFVTQiBUTUMgZGV2aWNlCiAJCTI0MCA9IC9kZXYvdXNiL2RhYnVzYjAJRmlyc3QgZGF1YnVzYiBkZXZpY2UKIAkJICAgIC4uLgogCQkyNDMgPSAvZGV2L3VzYi9kYWJ1c2IzCUZvdXJ0aCBkYWJ1c2IgZGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCAyNzgwOTM1Li4xZTg5YTUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTIsMTEgKzIsMTMgQEAKICouYXV4CiAqLmJpbgogKi5jcGlvCi0qLmNzcworKi5jc3AKKyouZHNwCiAqLmR2aQorKi5lbGYKICouZXBzCi0qLmZ3Lmdlbi5TCiAqLmZ3CisqLmdlbi5TCiAqLmdpZgogKi5ncmVwCiAqLmdycApAQCAtMzAsNiArMzIsNyBAQAogKi5zCiAqLnNnbWwKICouc28KKyouc28uZGJnCiAqLnN5bXR5cGVzCiAqLnRhYi5jCiAqLnRhYi5oCkBAIC0zOCwyNCArNDEsMTcgQEAKICoueG1sCiAqX01PRFVMRVMKICpfdmdhMTYuYwotKmNzY29wZSoKICp+CiAqLjkKICouOS5negogLioKLS5jc2NvcGUKLS5naXRpZ25vcmUKLS5tYWlsbWFwCiAubW0KIDUzYzcwMF9kLmgKLTUzYzh4eF9kLmgqCi1DT1BZSU5HCi1DUkVESVRTCiBDVlMKIENoYW5nZVNldAogSW1hZ2UKIEtlcm50eXBlcwotTU9EUy50eHQKK01vZHVsZS5tYXJrZXJzCiBNb2R1bGUuc3ltdmVycwogUEVORElORwogU0NDUwpAQCAtNzMsNyArNjksOSBAQAogYmJvb3RzZWN0CiBiaW4yYwogYmlua2VybmVsLnNwZWMKK2Jpbm9mZnNldAogYm9vdHNlY3QKK2JvdW5kcy5oCiBic2V0dXAKIGJ0Zml4dXBwcmVwCiBidWlsZApAQCAtODksMzkgKzg3LDM2IEBACiBjb25maWdfZGF0YS5neioKIGNvbm1ha2VoYXNoCiBjb25zb2xlbWFwX2RlZnRibC5jKgorY3B1c3RyLmgKIGNyYzMydGFibGUuaCoKIGNzY29wZS4qCi1kZWZrZXltYXAuYyoKK2RlZmtleW1hcC5jCiBkZXZsaXN0LmgqCiBkb2Nwcm9jCi1kdW1teV9zeW0uYyoKIGVsZjJlY29mZgogZWxmY29uZmlnLmgqCi1maWxlbGlzdAogZml4ZGVwCiBmb3JlMjAwZV9ta2Zpcm0KIGZvcmUyMDBlX3BjYV9mdy5jKgogZ2NvbmYKIGdlbi1kZXZsaXN0Ci1nZW4ta2RiX2NtZHMuYyoKIGdlbl9jcmMzMnRhYmxlCiBnZW5faW5pdF9jcGlvCiBnZW5rc3ltcwotZ2VudGJsCiAqX2dyYXkyNTYuYworaWhleDJmdwogaWtjb25maWcuaCoKIGluaXRyYW1mc19kYXRhLmNwaW8KIGluaXRyYW1mc19kYXRhLmNwaW8uZ3oKIGluaXRyYW1mc19saXN0CiBrYWxsc3ltcwoga2NvbmZpZwota2NvbmZpZy50awota2V5d29yZHMuYyoKK2tleXdvcmRzLmMKIGtzeW0uYyoKIGtzeW0uaCoKIGt4Z2V0dGV4dAogbGtjX2RlZnMuaAotbGV4LmMqCitsZXguYwogbGV4LiouYwogbG9nb18qLmMKIGxvZ29fKl9jbHV0MjI0LmMKQEAgLTEzMCw3ICsxMjUsNiBAQAogbWFjaC10eXBlcwogbWFjaC10eXBlcy5oCiBtYWNodHlwZXMuaAotbWFrZV90aW1lc19oCiBtYXAKIG1hdWlfYm9vdC5oCiBtY29uZgpAQCAtMTM4LDYgKzEzMiw3IEBACiBta19lbGZjb25maWcKIG1rYm9vdAogbWtidWdib290Citta2NwdXN0cgogbWtkZXAKIG1rcHJlcAogbWt0YWJsZXMKQEAgLTE0NSwxMSArMTQwLDEyIEBACiBtb2Rwb3N0CiBtb2R1bGVzLm9yZGVyCiBtb2R2ZXJzaW9ucy5oKgorbmNzY29wZS4qCiBvZmZzZXQuaAogb2Zmc2V0cy5oCiBvdWkuYyoKLXBhcnNlLmMqCi1wYXJzZS5oKgorcGFyc2UuYworcGFyc2UuaAogcGF0Y2hlcyoKIHBjYTIwMGUuYmluCiBwY2EyMDBlX2VjZC5iaW4yCkBAIC0xNTcsNyArMTUzLDcgQEAKIHBpZ2d5YmFjawogcG5tdG9sb2dvCiBwcGNfZGVmcy5oKgotcHJvbWNvbl90YmwuYyoKK3Byb21jb25fdGJsLmMKIHBzc19ib290LmgKIHFjb25mCiByYWlkNmFsdGl2ZWMqLmMKQEAgLTE2OCwyNyArMTY0LDM4IEBACiBzZXR1cAogc2V0dXAuYmluCiBzZXR1cC5lbGYKLXNpbTcxMF9kLmgqCiBzSW1hZ2UKIHNtX3RibCoKIHNwbGl0LWluY2x1ZGUKK3N5c2NhbGx0YWIuaAogdGFncwogdGZ0cGJvb3QuaW1nCiB0aW1lY29uc3QuaAogdGltZXMuaCoKLXRrcGFyc2UKIHRyaXhfYm9vdC5oCiB1dHNyZWxlYXNlLmgqCit2ZHNvLXN5bXMubGRzCiB2ZHNvLmxkcwordmRzbzMyLWludDgwLXN5bXMubGRzCit2ZHNvMzItc3ltcy5sZHMKK3Zkc28zMi1zeXNjYWxsLXN5bXMubGRzCit2ZHNvMzItc3lzZW50ZXItc3ltcy5sZHMKK3Zkc28zMi5sZHMKK3Zkc28zMi5zby5kYmcKK3Zkc282NC5sZHMKK3Zkc282NC5zby5kYmcKIHZlcnNpb24uaCoKIHZtbGludXgKIHZtbGludXgtKgogdm1saW51eC5hb3V0Ci12bWxpbnV4Ki5sZHMqCi12bWxpbnV4Ki5zY3IKK3ZtbGludXgubGRzCiB2c3lzY2FsbC5sZHMKK3ZzeXNjYWxsXzMyLmxkcwogd2FueGxmdy5pbmMKIHVJbWFnZQogdW5pZmRlZgord2FrZXVwLmJpbgord2FrZXVwLmVsZgord2FrZXVwLmxkcwogekltYWdlKgogemNvbmYuaGFzaC5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dAppbmRleCAyN2EzMTYwLi5kZDllOTQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvaW50ZWxmYi50eHQKQEAgLTE0LDYgKzE0LDcgQEAKIAlJbnRlbCA5MTVHTQogCUludGVsIDk0NUcKIAlJbnRlbCA5NDVHTQorCUludGVsIDk0NUdNRQogCUludGVsIDk2NUcKIAlJbnRlbCA5NjVHTQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3V2ZXNhZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dAppbmRleCBiY2ZjMjMzLi43YWMzYzQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3V2ZXNhZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50eHQKQEAgLTUyLDcgKzUyLDcgQEAKIAogIHZpZGVvPXV2ZXNhZmI6MTAyNHg3NjgtMzIsbXRycjozLHl3cmFwIChjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwpCiAKLSAjIG1vZHByb2JlIHV2ZXNhZmIgbW9kZT0xMDI0eDc2OC0zMiBtdHJyPTMgc2Nyb2xsPXl3cmFwICAobW9kdWxlKQorICMgbW9kcHJvYmUgdXZlc2FmYiBtb2RlX29wdGlvbj0xMDI0eDc2OC0zMiBtdHJyPTMgc2Nyb2xsPXl3cmFwICAobW9kdWxlKQogCiBBY2NlcHRlZCBvcHRpb25zOgogCkBAIC0xMDUsNyArMTA1LDcgQEAKIDxtb2RlPiAgVGhlIG1vZGUgeW91IHdhbnQgdG8gc2V0LCBpbiB0aGUgc3RhbmRhcmQgbW9kZWRiIGZvcm1hdC4gIFJlZmVyIHRvCiAgICAgICAgIG1vZGVkYi50eHQgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24uICBXaGVuIHV2ZXNhZmIgaXMgY29tcGlsZWQgYXMKICAgICAgICAgYSBtb2R1bGUsIHRoZSBtb2RlIHN0cmluZyBzaG91bGQgYmUgcHJvdmlkZWQgYXMgYSB2YWx1ZSBvZiB0aGUKLSAgICAgICAgJ21vZGUnIG9wdGlvbi4KKyAgICAgICAgJ21vZGVfb3B0aW9uJyBvcHRpb24uCiAKIHZiZW1vZGU6eAogICAgICAgICBGb3JjZSB0aGUgdXNlIG9mIFZCRSBtb2RlIHguICBUaGUgbW9kZSB3aWxsIG9ubHkgYmUgc2V0IGlmIGl0J3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvdmlhZmIubW9kZXMgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLm1vZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLm1vZGVzCkBAIC0wLDAgKzEsODcwIEBACisjCisjCisjICAgVGhlc2UgZGF0YSBhcmUgYmFzZWQgb24gdGhlIENSVEMgcGFyYW1ldGVycyBpbgorIworIyAgICAgICBWSUEgSW50ZWdyYXRpb24gR3JhcGhpY3MgQ2hpcAorIyAgICAgICAoQykgMjAwNCBWSUEgVGVjaG5vbG9naWVzIEluYy4KKyMKKworIworIyAgIDY0MHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjUuMTc1IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzEuNDY5IGtIeiAgNTkuOTQgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMy44MTMgdXMgICAgMC4wNjQgbXMKKyMgICAgICAgICAgICAgICAxMiBjaGFycyAgICAyIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNjM2IHVzICAgIDAuMzE4ICBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEwIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuOTA3IHVzICAgIDEuMDQ4ICBtcworIyAgICAgICAgICAgICAgIDYgY2hhcnMgICAgIDMzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDI1LjQyMiB1cyAgIDE1LjI1MyBtcworIyAgICAgICAgICAgICAgIDgwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA2LjM1NiB1cyAgICAxLjQzMCBtcworIyAgICAgICAgICAgICAgIDIwIGNoYXJzICAgIDQ1IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisKK21vZGUgIjY0MHg0ODAtNjAiCisjIEQ6IDI1LjE3NSBNSHosIEg6IDMxLjQ2OSBrSHosIFY6IDU5Ljk0IEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyCisgICAgdGltaW5ncyAzOTcyMiA0OCAxNiAzMyAxMCA5NiAyIGVuZG1vZGUgbW9kZSAiNDgweDY0MC02MCIKKyMgRDogMjQuODIzIE1IeiwgSDogMzkuNzgwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA0ODAgNjQwIDQ4MCA2NDAgMzIgdGltaW5ncyAzOTcyMiA3MiAyNCAxOSAxIDQ4IDMgZW5kbW9kZQorIworIyAgIDY0MHg0ODAsIDc1IEh6LCBOb24tSW50ZXJsYWNlZCAoMzEuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDY0MCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzNy41MDAga0h6ICA3NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjAzMiB1cyAgICAwLjA4MCBtcworIyAgICAgICAgICAgICAgIDggY2hhcnMgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDggdXMgICAgMC4wMjcgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuODEwIHVzICAgIDAuNDI3IG1zCisjICAgICAgICAgICAgICAgMTUgY2hhcnMgICAgMTYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjAuMzE3IHVzICAgMTIuODAwIG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuMzQ5IHVzICAgIDAuNTMzIG1zCisjICAgICAgICAgICAgICAgMjUgY2hhcnMgICAgMjAgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTc1IgorIyBEOiAzMS41MCBNSHosIEg6IDM3LjUwMCBrSHosIFY6IDc1LjAwIEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyIHRpbWluZ3MgMzE3NDcgMTIwIDE2IDE2IDEgNjQgMyBlbmRtb2RlCisjCisjICAgNjQweDQ4MCwgODUgSHosIE5vbi1JbnRlcmxhY2VkICgzNi4wMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDY0MCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgIDQzLjI2OSBrSHogIDg1LjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNTU2IHVzICAgIDAuMDY5IG1zCisjICAgICAgICAgICAgICAgNyBjaGFycyAgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAxLjU1NiB1cyAgICAwLjAyMyBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yMjIgdXMgICAgMC41NzggbXMKKyMgICAgICAgICAgICAgICAxMCBjaGFycyAgICAyNSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNy43NzggdXMgICAxMS4wOTMgbXMKKyMgICAgICAgICAgICAgICA4MCBjaGFycyAgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNS4zMzMgdXMgICAgMC42NzAgbXMKKyMgICAgICAgICAgICAgICAyNCBjaGFycyAgICAyOSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBuZWdhdGl2ZQorIworICAgIG1vZGUgIjY0MHg0ODAtODUiCisjIEQ6IDM2LjAwMCBNSHosIEg6IDQzLjI2OSBrSHosIFY6IDg1LjAwIEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyIHRpbWluZ3MgMjc3NzcgODAgNTYgMjUgMSA1NiAzIGVuZG1vZGUKKyMKKyMgICA2NDB4NDgwLCAxMDAgSHosIE5vbi1JbnRlcmxhY2VkICg0My4xNjMgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDY0MCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA1MC45MDAga0h6ICAxMDAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS40ODMgdXMgICAgMC4wNTggbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuOTI3IHVzICAgIDAuMDE5IG1zCisjICAgICAgICAgICAgICAgNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjQwOSB1cyAgICAwLjQ3NSBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDI1IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE0LjgyNyB1cyAgIDkuNDMwIG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuODE5IHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMjkgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTEwMCIKKyMgRDogNDMuMTYzIE1IeiwgSDogNTAuOTAwIGtIeiwgVjogMTAwLjAwIEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyIHRpbWluZ3MgMjMxNjggMTA0IDQwIDI1IDEgNjQgMyBlbmRtb2RlCisjCisjICAgNjQweDQ4MCwgMTIwIEh6LCBOb24tSW50ZXJsYWNlZCAoNTIuNDA2IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjEuODAwIGtIeiAgMTIwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMjIxIHVzICAgIDAuMDQ4IG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NjMgdXMgICAgMC4wMTYgbXMKKyMgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuOTg0IHVzICAgIDAuNDk2IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMzEgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTIuMjEyIHVzICAgNy43NjcgbXMKKyMgICAgICAgICAgICAgICA4MCBjaGFycyAgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy45NjkgdXMgICAgMC41NjYgbXMKKyMgICAgICAgICAgICAgICAyNiBjaGFycyAgICAzNSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjY0MHg0ODAtMTIwIgorIyBEOiA1Mi40MDYgTUh6LCBIOiA2MS44MDAga0h6LCBWOiAxMjAuMDAgSHoKKyAgICBnZW9tZXRyeSA2NDAgNDgwIDY0MCA0ODAgMzIgdGltaW5ncyAxOTA4MSAxMDQgNDAgMzEgMSA2NCAzIGVuZG1vZGUKKyMKKyMgICA3MjB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI2Ljg4MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgNzIwICAgICA0ODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDMwLjAwMCBrSHogIDYwLjI0MSBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjY3OSB1cyAgICAwLjA5OSBtcworIyAgICAgICAgICAgICAgIDkgY2hhcnMgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41OTUgdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMjc0IHVzICAgIDAuNDYyIG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMTQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjYuNzg2IHVzICAgMTYuMDAwIG1zCisjICAgICAgICAgICAgICAgOTAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNTQ4IHVzICAgIDAuNjAwIG1zCisjICAgICAgICAgICAgICAgMjIgY2hhcnMgICAgMTggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI3MjB4NDgwLTYwIgorIyBEOiAyNi44ODAgTUh6LCBIOiAzMC4wMDAga0h6LCBWOiA2MC4yNCBIegorICAgIGdlb21ldHJ5IDcyMCA0ODAgNzIwIDQ4MCAzMiB0aW1pbmdzIDM3MjAyIDg4IDE2IDE0IDEgNzIgMyBlbmRtb2RlCisjCisjICAgODAweDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgyOS41ODEgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgICAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgIDI5Ljg5MiBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDIuNzA0IHVzICAgIDEwMC42MDQgdXMKKyMgICAgICAgICAgICAgICAgICAgMTAgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjU0MSB1cyAgICAzMy41MzUgdXMKKyMgICAgICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjI0NSB1cyAgICA0MzUuOTQ5IHVzCisjICAgICAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDEzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDI3LjA0NCB1cyAgIDE2LjA5NyBtcworIyAgICAgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi40OTEgdXMgICAgMC41NzAgbXMKKyMgICAgICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMTcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NDgwLTYwIgorIyBEOiAyOS41MDAgTUh6LCBIOiAyOS43Mzgga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDgwMCA0ODAgODAwIDQ4MCAzMiB0aW1pbmdzIDMzODA1IDk2IDI0IDEwIDMgNzIgNyBlbmRtb2RlCisjCisjICAgNzIweDU3NiwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgzMi42NjggTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDcyMCAgICAgNTc2CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzNS44MjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjIwNCB1cyAgICAwLjA4MyBtcworIyAgICAgICAgICAgICAgIDkgY2hhcnMgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43MzUgdXMgICAgMC4wMjcgbXMKKyMgICAgICAgICAgICAgICAzIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuOTM5IHVzICAgIDAuNDU5IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMTcgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjIuMDQwIHVzICAgMTYuMDgwIG1zCisjICAgICAgICAgICAgICAgOTAgY2hhcnMgICAgNDc2IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuODc3IHVzICAgIDAuNTg2IG1zCisjICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMjEgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI3MjB4NTc2LTYwIgorIyBEOiAzMi42NjggTUh6LCBIOiAzNS44MjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDcyMCA1NzYgNzIwIDU3NiAzMiB0aW1pbmdzIDMwNjExIDk2IDI0IDE3IDEgNzIgMyBlbmRtb2RlCisjCisjICAgODAweDYwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg0MC4wMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDM3Ljg3OSBrSHogIDYwLjMyIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDMuMjAwIHVzICAgIDAuMTA2IG1zCisjICAgICAgICAgICAgICAgMTYgY2hhcnMgICAgNCBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAxLjAwMCB1cyAgICAwLjAyNiBtcworIyAgICAgICAgICAgICAgIDUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yMDAgdXMgICAgMC42MDcgbXMKKyMgICAgICAgICAgICAgICAxMSBjaGFycyAgICAyMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyMC4wMDAgdXMgICAxNS44NDAgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi40MDAgdXMgICAgMC43MzkgbXMKKyMgICAgICAgICAgICAgICAzMiBjaGFycyAgICAyOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtNjAiCisjIEQ6IDQwLjAwIE1IeiwgSDogMzcuODc5IGtIeiwgVjogNjAuMzIgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDI1MDAwIDg4IDQwIDIzIDEgMTI4IDQgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICA4MDB4NjAwLCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDQ5LjUwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4MDAgICAgIDYwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNDYuODc1IGtIeiAgNzUuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS42MTYgdXMgICAgMC4wNjQgbXMKKyMgICAgICAgICAgICAgICAxMCBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMzIzIHVzICAgIDAuMDIxIG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjIzMiB1cyAgICAwLjQ0OCBtcworIyAgICAgICAgICAgICAgIDIwIGNoYXJzICAgIDIxIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE2LjE2MiB1cyAgIDEyLjgwMCBtcworIyAgICAgICAgICAgICAgIDEwMCBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1LjE3MiB1cyAgICAwLjUzMyBtcworIyAgICAgICAgICAgICAgIDMyIGNoYXJzICAgIDI1IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDYwMC03NSIKKyMgRDogNDkuNTAgTUh6LCBIOiA0Ni44NzUga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDgwMCA2MDAgODAwIDYwMCAzMgorICAgIHRpbWluZ3MgMjAyMDMgMTYwIDE2IDIxIDEgODAgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDgwMHg2MDAsIDg1IEh6LCBOb24tSW50ZXJsYWNlZCAoNTYuMjUgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgNjAwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA1My42NzQga0h6ICA4NS4wNjEgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4xMzggdXMgICAgMC4wNTYgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNTY5IHVzICAgIDAuMDE5IG1zCisjICAgICAgICAgICAgICAgNCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjcwMiB1cyAgICAwLjUwMyBtcworIyAgICAgICAgICAgICAgIDE5IGNoYXJzICAgIDI3IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE0LjIyMiB1cyAgIDExLjE3OSBtcworIyAgICAgICAgICAgICAgIDEwMCBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0LjQwOSB1cyAgICAwLjU3OCBtcworIyAgICAgICAgICAgICAgIDMxIGNoYXJzICAgIDMxIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDYwMC04NSIKKyMgRDogNTYuMjUgTUh6LCBIOiA1My42NzQga0h6LCBWOiA4NS4wNjEgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDE3Nzc3IDE1MiAzMiAyNyAxIDY0IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICA4MDB4NjAwLCAxMDAgSHosIE5vbi1JbnRlcmxhY2VkICg2Ny41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYyLjUwMCBrSHogIDEwMC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAwLjk0OCB1cyAgICAwLjA2NCBtcworIyAgICAgICAgICAgICAgIDggY2hhcnMgICAgIDQgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4wMDAgdXMgICAgMC4xMTIgbXMKKyMgICAgICAgICAgICAgICAwIGNoYXJzICAgICA3IGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMjAwIHVzICAgIDAuMjI0IG1zCisjICAgICAgICAgICAgICAgMjcgY2hhcnMgICAgMTQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTEuODUyIHVzICAgOS42MDAgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNC4xNDggdXMgICAgMC40MDAgbXMKKyMgICAgICAgICAgICAgICAzNSBjaGFycyAgICAyNSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtMTAwIgorIyBEOiA2Ny41MCBNSHosIEg6IDYyLjUwMCBrSHosIFY6IDEwMC4wMCBIegorICAgIGdlb21ldHJ5IDgwMCA2MDAgODAwIDYwMCAzMgorICAgIHRpbWluZ3MgMTQ2NjcgMjE2IDAgMTQgNyA2NCA0IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODAweDYwMCwgMTIwIEh6LCBOb24tSW50ZXJsYWNlZCAoODMuOTUwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4MDAgICAgIDYwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICA3Ny4xNjAga0h6ICAxMjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wNDggdXMgICAgMC4wMzkgbXMKKyMgICAgICAgICAgICAgICAxMSBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNjY3IHVzICAgIDAuMDEzIG1zCisjICAgICAgICAgICAgICAgNyBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjcxNSB1cyAgICAwLjUwNyBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDM5IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDkuNTI5IHVzICAgIDcuNzc2IG1zCisjICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNDMxIHVzICAgIDAuNTU3IG1zCisjICAgICAgICAgICAgICAgMzYgY2hhcnMgICAgNDMgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NjAwLTEyMCIKKyMgRDogODMuOTUwIE1IeiwgSDogNzcuMTYwIGtIeiwgVjogMTIwLjAwIEh6CisgICAgZ2VvbWV0cnkgODAwIDYwMCA4MDAgNjAwIDMyCisgICAgdGltaW5ncyAxMTkxMiAxNDQgNTYgMzkgMSA4OCAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODQ4eDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgzMS40OTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDg0OCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgIDI5LjgyMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDIuNzk1IHVzICAgIDAuMDk5IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjUwOCB1cyAgICAwLjAzMyBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4zMDMgdXMgICAgMC40MjkgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAxMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNi45MjkgdXMgICAxNi4wOTcgbXMKKyMgICAgICAgICAgICAgICAxMDYgY2hhcnMgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi42MDUgdXMgICAgMC41NzAgbXMKKyMgICAgICAgICAgICAgICAyNiBjaGFycyAgICAxNyBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjg0OHg0ODAtNjAiCisjIEQ6IDMxLjUwMCBNSHosIEg6IDI5LjgzMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgODQ4IDQ4MCA4NDggNDgwIDMyCisgICAgdGltaW5ncyAzMTc0NiAxMDQgMjQgMTIgMyA4MCA1IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODU2eDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgzMS43MjggTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDg1NiAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgIDI5LjgyMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDIuNzc0IHVzICAgIDAuMDk5IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjUwNCB1cyAgICAwLjAzMyBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy43MjggdXMgICAgMC40MjkgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAxMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNi45NzkgdXMgICAxNi4wOTcgbXMKKyMgICAgICAgICAgICAgICAxMDcgY2hhcnMgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi41NTYgdXMgICAgMC41NzAgbXMKKyMgICAgICAgICAgICAgICAyNiBjaGFycyAgICAxNyBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjg1Nng0ODAtNjAiCisjIEQ6IDMxLjcyOCBNSHosIEg6IDI5LjgyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgODU2IDQ4MCA4NTYgNDgwIDMyCisgICAgdGltaW5ncyAzMTUxOCAxMDQgMTYgMTMgMSA4OCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiOTYweDYwMC02MCIKKyMgRDogNDUuMjUwIE1IeiwgSDogMzcuMjEyIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA5NjAgNjAwIDk2MCA2MDAgMzIgdGltaW5ncyAyMjA5OSAxMjggMzIgMTUgMyA5NiA2IGVuZG1vZGUKKyMKKyMgICAxMDAweDYwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg0OC4wNjggTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMDAgICAgIDYwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICAzNy4zMjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjE2NCB1cyAgICAwLjA4MCBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC44MzIgdXMgICAgMC4wMjcgbXMKKyMgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuOTk2IHVzICAgIDAuNDgzIG1zCisjICAgICAgICAgICAgICAgMTggY2hhcnMgICAgMTggbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjAuODA0IHVzICAgMTYuMDc3IG1zCisjICAgICAgICAgICAgICAgMTI1IGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuOTkxIHVzICAgIDAuNTg5IG1zCisjICAgICAgICAgICAgICAgMzYgY2hhcnMgICAgMjIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDAweDYwMC02MCIKKyMgRDogNDguMDY4IE1IeiwgSDogMzcuMzIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDAwIDYwMCAxMDAwIDYwMCAzMgorICAgIHRpbWluZ3MgMjA4MzQgMTQ0IDQwIDE4IDEgMTA0IDMgZW5kbW9kZSBtb2RlICIxMDI0eDU3Ni02MCIKKyMgRDogNDYuOTk2IE1IeiwgSDogMzUuODIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDU3NiAxMDI0IDU3NiAzMgorICAgIHRpbWluZ3MgMjEyNzggMTQ0IDQwIDE3IDEgMTA0IDMgZW5kbW9kZSBtb2RlICIxMDI0eDYwMC02MCIKKyMgRDogNDguOTY0IE1IeiwgSDogMzcuMzIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDYwMCAxMDI0IDYwMCAzMgorICAgIHRpbWluZ3MgMjA0NjEgMTQ0IDQwIDE4IDEgMTA0IDMgZW5kbW9kZSBtb2RlICIxMDg4eDYxMi02MCIKKyMgRDogNTIuOTUyIE1IeiwgSDogMzguMDQwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDg4IDYxMiAxMDg4IDYxMiAzMiB0aW1pbmdzIDE4ODc3IDE1MiA0OCAxNiAzIDEwNCA1IGVuZG1vZGUKKyMKKyMgICAxMDI0eDUxMiwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg0MS4yOTEgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgNTEyCisjICAgU2NhbiBGcmVxdWVuY3kgIDMxLjg2MCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDIuNTE5IHVzICAgIDAuMDk0IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjc3NSB1cyAgICAwLjAzMSBtcworIyAgICAgICAgICAgICAgIDQgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4yOTQgdXMgICAgMC40NjUgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICAxNSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNC44MDAgdXMgICAxNi4wNzAgbXMKKyMgICAgICAgICAgICAgICAxMjggY2hhcnMgICA1MTIgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi41ODcgdXMgICAgMC41OTYgbXMKKyMgICAgICAgICAgICAgICAzNCBjaGFycyAgICAxOSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEwMjR4NTEyLTYwIgorIyBEOiA0MS4yOTEgTUh6LCBIOiAzMS44NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEwMjQgNTEyIDEwMjQgNTEyIDMyCisgICAgdGltaW5ncyAyNDIxOCAxMjYgMzIgMTUgMSAxMDQgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEwMjR4NjAwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDQ4Ljg3NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzcuMjUyIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgICAgIDIuMTI4IHVzICAgIDgwLjUzMnVzCisjICAgICAgICAgICAgICAgICAgICAgICAxMyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgICAgIDAuODE4IHVzICAgICAyNi44NDQgdXMKKyMgICAgICAgICAgICAgICAgICAgICAgIDUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgICAgIDIuOTQ2IHVzICAgIDQ4My4xOTIgdXMKKyMgICAgICAgICAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDE4IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgICAgICAyMC45NTEgdXMgICAxNi42OTcgbXMKKyMgICAgICAgICAgICAgICAgICAgICAgIDEyOCBjaGFycyAgIDYyMiBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAgICAgNS44OTMgdXMgICAgMC41OTEgbXMKKyMgICAgICAgICAgICAgICAgICAgICAgIDM2IGNoYXJzICAgIDIyIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgICAgICBuZWdhdGl2ZSAgICBwb3NpdGl2ZQorIworI21vZGUgIjEwMjR4NjAwLTYwIgorIyAgICAgIyBEOiA0OC44NzUgTUh6LCBIOiAzNy4yNTIga0h6LCBWOiA2MC4wMCBIegorIyAgICAgZ2VvbWV0cnkgMTAyNCA2MDAgMTAyNCA2MDAgMzIKKyMgICAgdGltaW5ncyAyMDQ2MCAgMTQ0IDQwIDE4IDEgMTA0ICAzCisjIGVuZG1vZGUKKyMKKyMgICAxMDI0eDc2OCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg2NS4wMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTAyNCAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA0OC4zNjMga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjA5MiB1cyAgICAwLjEyNCBtcworIyAgICAgICAgICAgICAgIDE3IGNoYXJzICAgIDYgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4zNjkgdXMgICAgMC4wNjIgbXMKKyMgICAgICAgICAgICAgICAzIGNoYXJzICAgICAzIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuNDYyIHVzICAgIDAuNjAxIG1zCisjICAgICAgICAgICAgICAgMjAgY2hhcnMgICAgMjkgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuNzU0IHVzICAgMTUuODgwIG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuOTIzIHVzICAgIDAuNzg2IG1zCisjICAgICAgICAgICAgICAgNDAgY2hhcnMgICAgMzggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC02MCIKKyMgRDogNjUuMDAgTUh6LCBIOiA0OC4zNjMga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEwMjQgNzY4IDEwMjQgNzY4IDMyIHRpbWluZ3MgMTUzODUgMTYwIDI0IDI5IDMgMTM2IDYgZW5kbW9kZQorIworIyAgIDEwMjR4NzY4LCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDc4Ljc1IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDI0ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYwLjAyMyBrSHogIDc1LjAzIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMjE5IHVzICAgIDAuMDUwIG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjIwMyB1cyAgICAwLjAxNyBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yMzUgdXMgICAgMC40NjYgbXMKKyMgICAgICAgICAgICAgICAyMiBjaGFycyAgICAyOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMy4wMDMgdXMgICAxMi43OTUgbXMKKyMgICAgICAgICAgICAgICAxMjggY2hhcnMgICA3NjggbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy42NTcgdXMgICAgMC41MzMgbXMKKyMgICAgICAgICAgICAgICAzNiBjaGFycyAgICAzMiBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEwMjR4NzY4LTc1IgorIyBEOiA3OC43NSBNSHosIEg6IDYwLjAyMyBrSHosIFY6IDc1LjAzIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICB0aW1pbmdzIDEyNjk5IDE3NiAxNiAyOCAxIDk2IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMDI0eDc2OCwgODUgSHosIE5vbi1JbnRlcmxhY2VkICg5NC41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTAyNCAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgIDY4LjY3NyBrSHogIDg1LjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDE2IHVzICAgIDAuMDQ0IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjUwOCB1cyAgICAwLjAxNSBtcworIyAgICAgICAgICAgICAgIDYgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yMDEgdXMgICAgMC41MjQgbXMKKyMgICAgICAgICAgICAgICAyNiBjaGFycyAgICAzNiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMC44MzYgdXMgICAxMS4xODMgbXMKKyMgICAgICAgICAgICAgICAxMjggY2hhcnMgICA3NjggbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy43MjUgdXMgICAgMC41ODIgbXMKKyMgICAgICAgICAgICAgICA0NCBjaGFycyAgICA0MCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEwMjR4NzY4LTg1IgorIyBEOiA5NC41MCBNSHosIEg6IDY4LjY3NyBrSHosIFY6IDg1LjAwIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICB0aW1pbmdzIDEwNTgyIDIwOCA0OCAzNiAxIDk2IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMDI0eDc2OCwgMTAwIEh6LCBOb24tSW50ZXJsYWNlZCAoMTEwLjAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNzkuMDIzIGtIeiAgOTkuNzggSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMC44MDAgdXMgICAgMC4xMDEgbXMKKyMgICAgICAgICAgICAgICAxMSBjaGFycyAgICA4IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMDAwIHVzICAgIDAuMDAwIG1zCisjICAgICAgICAgICAgICAgMCBjaGFycyAgICAgMCBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjU0NSB1cyAgICAwLjIwMiBtcworIyAgICAgICAgICAgICAgIDM1IGNoYXJzICAgIDE2IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDkuMzA5IHVzICAgIDkuNzE5IG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuMzQ1IHVzICAgIDAuMzA0IG1zCisjICAgICAgICAgICAgICAgNDYgY2hhcnMgICAgMjQgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC0xMDAiCisjIEQ6IDExMy4zIE1IeiwgSDogNzkuMDIzIGtIeiwgVjogOTkuNzggSHoKKyAgICBnZW9tZXRyeSAxMDI0IDc2OCAxMDI0IDc2OCAzMgorICAgIHRpbWluZ3MgODgyNSAyODAgMCAxNiAwIDg4IDggZW5kbW9kZSBtb2RlICIxMTUyeDcyMC02MCIKKyMgRDogNjYuNzUwIE1IeiwgSDogNDQuODU5IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMTUyIDcyMCAxMTUyIDcyMCAzMiB0aW1pbmdzIDE0OTgxIDE2OCA1NiAxOSAzIDExMiA2IGVuZG1vZGUKKyMKKyMgICAxMTUyeDg2NCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICgxMTAuMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTE1MiAgICAgICAgODY0CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA3NS4xMzcga0h6ICA3NC45OSBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjMwOSB1cyAgICAwLjEwNiBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDggbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4yNDUgdXMgICAgMC41OTkgbXMKKyMgICAgICAgICAgICAgICAzIGNoYXJzICAgICA0NSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjI4MiB1cyAgICAxLjEzMiBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDg1IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDEwLjQ3MyB1cyAgIDExLjQ5OSBtcworIyAgICAgICAgICAgICAgIDE0NCBjaGFycyAgIDg2NCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjgzNiB1cyAgICAxLjgzNyBtcworIyAgICAgICAgICAgICAgIDM5IGNoYXJzICAgIDEzOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjExNTJ4ODY0LTc1IgorIyBEOiAxMTAuMCBNSHosIEg6IDc1LjEzNyBrSHosIFY6IDc0Ljk5IEh6CisgICAgZ2VvbWV0cnkgMTE1MiA4NjQgMTE1MiA4NjQgMzIKKyAgICB0aW1pbmdzIDkyNTkgMTQ0IDI0IDg1IDQ1IDE0NCA4CisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTIwMHg3MjAtNjAiCisjIEQ6IDcwLjE4NCBNSHosIEg6IDQ0Ljc2MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTIwMCA3MjAgMTIwMCA3MjAgMzIKKyAgICB0aW1pbmdzIDE0MjUzIDE4NCAyOCAyMiAxIDEyOCAzIGVuZG1vZGUgbW9kZSAiMTI4MHg2MDAtNjAiCisjIEQ6IDYxLjUwMyBNSHosIEg6IDM3LjMyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA2MDAgMTI4MCA2MDAgMzIKKyAgICB0aW1pbmdzIDE2MjYwIDE4NCAyOCAxOCAxIDEyOCAzIGVuZG1vZGUgbW9kZSAiMTI4MHg3MjAtNTAiCisjIEQ6IDYwLjQ2NiBNSHosIEg6IDM3LjA1MCBrSHosIFY6IDUwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA3MjAgMTI4MCA3MjAgMzIKKyAgICB0aW1pbmdzIDE2NTM4IDE3NiA0OCAxNyAxIDEyOCAzIGVuZG1vZGUgbW9kZSAiMTI4MHg3NjgtNTAiCisjIEQ6IDY1LjE3OCBNSHosIEg6IDM5LjU1MCBrSHosIFY6IDUwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA3NjggMTI4MCA3NjggMzIgdGltaW5ncyAxNTM0MiAxODQgMjggMTkgMSAxMjggMyBlbmRtb2RlCisjCisjICAgMTI4MHg3NjgsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoODAuMTM2IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMjgwICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICA0Ny43MDAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjY5NyB1cyAgICAwLjA2MyBtcworIyAgICAgICAgICAgICAgIDE3IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43OTkgdXMgICAgMC4wMjEgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuNDk2IHVzICAgIDAuNDgzIG1zCisjICAgICAgICAgICAgICAgMjUgY2hhcnMgICAgMjMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuOTczIHVzICAgMTYuMTAxIG1zCisjICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuOTkyIHVzICAgIDAuNTY2IG1zCisjICAgICAgICAgICAgICAgNTAgY2hhcnMgICAgMjcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDc2OC02MCIKKyMgRDogODAuMTMgTUh6LCBIOiA0Ny43MDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNzY4IDEyODAgNzY4IDMyCisgICAgdGltaW5ncyAxMjQ4MCAyMDAgNDggMjMgMSAxMjYgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4ODAwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDgzLjM3NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICA4MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgNDkuNjI4IGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS42MzEgdXMgICAgNjAuNDUwIHVzCisjICAgICAgICAgICAgICAgICAgIDE3IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NjggdXMgICAgMjAuMTUgdXMKKyMgICAgICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjM5OSB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgICAgICAyNSBjaGFycyAgICAyNCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNS4zNTIgdXMgICAxNi4xMjAgbXMKKyMgICAgICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgODAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuNzk4IHVzICAgIDAuNTY0IG1zCisjICAgICAgICAgICAgICAgICAgIDUwIGNoYXJzICAgIDI4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ3RpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDgwMC02MCIKKyMgRDogODMuNTAwIE1IeiwgSDogNDkuNzAyIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDgwMCAxMjgwIDgwMCAzMiB0aW1pbmdzIDExOTk0IDIwMCA3MiAyMiAzIDEyOCA2IGVuZG1vZGUKKyMKKyMgICAxMjgweDk2MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxMDguMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgOTYwCisjICAgU2NhbiBGcmVxdWVuY3kgIDYwLjAwMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDM3IHVzICAgIDAuMDUwIG1zCisjICAgICAgICAgICAgICAgMTQgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjg4OSB1cyAgICAwLjAxNyBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi44ODkgdXMgICAgMC42MDAgbXMKKyMgICAgICAgICAgICAgICAzOSBjaGFycyAgICAzNiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMS44NTIgdXMgICAxNi4wMDAgbXMKKyMgICAgICAgICAgICAgICAxNjAgY2hhcnMgICA5NjAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNC44MTUgdXMgICAgMC42NjcgbXMKKyMgICAgICAgICAgICAgICA2NSBjaGFycyAgICA0MCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEyODB4OTYwLTYwIgorIyBEOiAxMDguMDAgTUh6LCBIOiA2MC4wMDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgOTYwIDEyODAgOTYwIDMyCisgICAgdGltaW5ncyA5MjU5IDMxMiA5NiAzNiAxIDExMiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTI4MHgxMDI0LCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDEwOC4wMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICAgICAgMTAyNAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjMuOTgxIGtIeiAgNjAuMDIgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wMzcgdXMgICAgMC4wNDcgbXMKKyMgICAgICAgICAgICAgICAxNCBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNDQ0IHVzICAgIDAuMDE1IG1zCisjICAgICAgICAgICAgICAgNiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjI5NyB1cyAgICAwLjU5NCBtcworIyAgICAgICAgICAgICAgIDMxIGNoYXJzICAgIDM4IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjg1MiB1cyAgIDE2LjAwNSBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDEwMjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy43NzggdXMgICAgMC42NTYgbXMKKyMgICAgICAgICAgICAgICA1MSBjaGFycyAgICA0MiBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEyODB4MTAyNC02MCIKKyMgRDogMTA4LjAwIE1IeiwgSDogNjMuOTgxIGtIeiwgVjogNjAuMDIgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMTI4MCAxMDI0IDMyCisgICAgdGltaW5ncyA5MjYwIDI0OCA0OCAzOCAxIDExMiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTI4MHgxMDI0LCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDEzNS4wMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICAgICAgMTAyNAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNzkuOTc2IGtIeiAgNzUuMDIgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wNjcgdXMgICAgMC4wMzggbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMTE5IHVzICAgIDAuMDEyIG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjgzNyB1cyAgICAwLjQ3NSBtcworIyAgICAgICAgICAgICAgIDMxIGNoYXJzICAgIDM4IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDkuNDgxIHVzICAgIDEyLjgwNCBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDEwMjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy4wMjIgdXMgICAgMC41MjUgbXMKKyMgICAgICAgICAgICAgICA1MSBjaGFycyAgICA0MiBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEyODB4MTAyNC03NSIKKyMgRDogMTM1LjAwIE1IeiwgSDogNzkuOTc2IGtIeiwgVjogNzUuMDIgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMTI4MCAxMDI0IDMyCisgICAgdGltaW5ncyA3NDA4IDI0OCAxNiAzOCAxIDE0NCAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTI4MHgxMDI0LCA4NSBIeiwgTm9uLUludGVybGFjZWQgKDE1Ny41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICAgICAgMTAyNAorIyAgIFNjYW4gRnJlcXVlbmN5ICA5MS4xNDYga0h6ICA4NS4wMiBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjAxNiB1cyAgICAwLjAzMyBtcworIyAgICAgICAgICAgICAgIDIwIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC40MDYgdXMgICAgMC4wMTEgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuNDIyIHVzICAgIDAuNDgzIG1zCisjICAgICAgICAgICAgICAgMjggY2hhcnMgICAgNDQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgOC4xMjcgdXMgICAgMTEuMjM1IG1zCisjICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgMTAyNCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjg0NCB1cyAgICAwLjUyNyBtcworIyAgICAgICAgICAgICAgIDU2IGNoYXJzICAgIDQ4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTI4MHgxMDI0LTg1IgorIyBEOiAxNTcuNTAgTUh6LCBIOiA5MS4xNDYga0h6LCBWOiA4NS4wMiBIegorICAgIGdlb21ldHJ5IDEyODAgMTAyNCAxMjgwIDEwMjQgMzIKKyAgICB0aW1pbmdzIDYzNDkgMjI0IDY0IDQ0IDEgMTYwIDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNDQweDkwMC02MCIKKyMgRDogMTA2LjUwMCBNSHosIEg6IDU1LjkzNSBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTQ0MCA5MDAgMTQ0MCA5MDAgMzIKKyAgICB0aW1pbmdzIDkzOTAgMjMyIDgwIDI1IDMgMTUyIDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNDQweDkwMC03NSIKKyMgRDogMTM2Ljc1MCBNSHosIEg6IDcwLjYzNSBrSHosIFY6IDc1LjAwIEh6CisgICAgZ2VvbWV0cnkgMTQ0MCA5MDAgMTQ0MCA5MDAgMzIKKyAgICB0aW1pbmdzIDczMTUgMjQ4IDk2IDMzIDMgMTUyIDYgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxNDQweDEwNTAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMTI1LjEwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxNDQwICAgICAgICAxMDUwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA2NS4yMjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjIwNCB1cyAgICAwLjA0NiBtcworIyAgICAgICAgICAgICAgIDE5IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NjAgdXMgICAgMC4wMTUgbXMKKyMgICAgICAgICAgICAgICAxMiBjaGFycyAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuOTY0IHVzICAgIDAuNDk1IG1zCisjICAgICAgICAgICAgICAgMzEgY2hhcnMgICAgMzMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTEuNDA1IHVzICAgMTYuMDk5IG1zCisjICAgICAgICAgICAgICAgMTgwIGNoYXJzICAgMTA1MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjkyOCB1cyAgICAwLjU2NyBtcworIyAgICAgICAgICAgICAgIDYyIGNoYXJzICAgIDM3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTQ0MHgxMDUwLTYwIgorIyBEOiAxMjUuMTAgTUh6LCBIOiA2NS4yMjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE0NDAgMTA1MCAxNDQwIDEwNTAgMzIKKyAgICB0aW1pbmdzIDc5OTMgMjQ4IDk2IDMzIDEgMTUyIDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNjAweDkwMC02MCIKKyMgRDogMTE4LjI1MCBNSHosIEg6IDU1Ljk5MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTYwMCA5MDAgMTYwMCA5MDAgMzIKKyAgICB0aW1pbmdzIDg0MTUgMjU2IDg4IDI2IDMgMTY4IDUgZW5kbW9kZSBtb2RlICIxNjAweDEwMjQtNjAiCisjIEQ6IDEzNi4zNTggTUh6LCBIOiA2My42MDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE2MDAgMTAyNCAxNjAwIDEwMjQgMzIgdGltaW5ncyA3MzE1IDI3MiAxMDQgMzIgMSAxNjggMyBlbmRtb2RlCisjCisjICAgMTYwMHgxMjAwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDE1Ni4wMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTYwMCAgICAgICAgMTIwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNzYuMjAwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wMjYgdXMgICAgMC4xMDUgbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICA4IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMjA1IHVzICAgIDAuMTMxIG1zCisjICAgICAgICAgICAgICAgNCBjaGFycyAgICAgMTAgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS42MzYgdXMgICAgMC42ODIgbXMKKyMgICAgICAgICAgICAgICAzMiBjaGFycyAgICA1MiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMC4yNTYgdXMgICAxNS43NDggbXMKKyMgICAgICAgICAgICAgICAyMDAgY2hhcnMgICAxMjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDIuODcyIHVzICAgIDAuODY2IG1zCisjICAgICAgICAgICAgICAgNTYgY2hhcnMgICAgNjYgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICIxNjAweDEyMDAtNjAiCisjIEQ6IDE1Ni4wMCBNSHosIEg6IDc2LjIwMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTYwMCAxMjAwIDE2MDAgMTIwMCAzMiB0aW1pbmdzIDYxNzIgMjU2IDMyIDUyIDEwIDE2MCA4IGVuZG1vZGUKKyMKKyMgICAxNjAweDEyMDAsIDc1IEh6LCBOb24tSW50ZXJsYWNlZCAoMjAyLjUwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxNjAwICAgICAgICAxMjAwCisjICAgU2NhbiBGcmVxdWVuY3kgIDkzLjc1MCBrSHogIDc1LjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDAuOTQ4IHVzICAgIDAuMDMyIG1zCisjICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjMxNiB1cyAgICAwLjAxMSBtcworIyAgICAgICAgICAgICAgIDggY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS41MDEgdXMgICAgMC40OTEgbXMKKyMgICAgICAgICAgICAgICAzOCBjaGFycyAgICA0NiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA3LjkwMSB1cyAgICAxMi44MDAgbXMKKyMgICAgICAgICAgICAgICAyMDAgY2hhcnMgICAxMjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDIuNzY1IHVzICAgIDAuNTMzIG1zCisjICAgICAgICAgICAgICAgNzAgY2hhcnMgICAgNTAgbGluZXMKKyMgICBQb2xhcml0eSAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjE2MDB4MTIwMC03NSIKKyMgRDogMjAyLjUwIE1IeiwgSDogOTMuNzUwIGtIeiwgVjogNzUuMDAgSHoKKyAgICBnZW9tZXRyeSAxNjAwIDEyMDAgMTYwMCAxMjAwIDMyCisgICAgdGltaW5ncyA0OTM4IDMwNCA2NCA0NiAxIDE5MiAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTY4MHgxMDUwLTYwIgorIyBEOiAxNDYuMjUwIE1IeiwgSDogNjUuMjkwIGtIeiwgVjogNTkuOTU0IEh6CisgICAgZ2VvbWV0cnkgMTY4MCAxMDUwIDE2ODAgMTA1MCAzMgorICAgIHRpbWluZ3MgNjgxNCAyODAgMTA0IDMwIDMgMTc2IDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNjgweDEwNTAtNzUiCisjIEQ6IDE4Ny4wMDAgTUh6LCBIOiA4Mi4zMDYga0h6LCBWOiA3NC44OTIgSHoKKyAgICBnZW9tZXRyeSAxNjgwIDEwNTAgMTY4MCAxMDUwIDMyCisgICAgdGltaW5ncyA1MzQ4IDI5NiAxMjAgNDAgMyAxNzYgNgorICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE3OTJ4MTM0NC02MCIKKyMgRDogMjAyLjk3NSBNSHosIEg6IDgzLjQ2MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTc5MiAxMzQ0IDE3OTIgMTM0NCAzMgorICAgIHRpbWluZ3MgNDkwMiAzMjAgMTI4IDQzIDEgMTkyIDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxODU2eDEzOTItNjAiCisjIEQ6IDIxOC41NzEgTUh6LCBIOiA4Ni40NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE4NTYgMTM5MiAxODU2IDEzOTIgMzIKKyAgICB0aW1pbmdzIDQ1NzcgMzM2IDEzNiA0NSAxIDIwMCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTkyMHgxMjAwLTYwIgorIyBEOiAxOTMuMjUwIE1IeiwgSDogNzQuNTU2IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxOTIwIDEyMDAgMTkyMCAxMjAwIDMyCisgICAgdGltaW5ncyA1MTczIDMzNiAxMzYgMzYgMyAyMDAgNgorICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE5MjB4MTQ0MC02MCIKKyMgRDogMjM0LjAwMCBNSHosIEg6OTAuMDAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxOTIwIDE0NDAgMTkyMCAxNDQwIDMyCisgICAgdGltaW5ncyA0Mjc0IDM0NCAxMjggNTYgMSAyMDggMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE5MjB4MTQ0MC03NSIKKyMgRDogMjk3LjAwMCBNSHosIEg6MTEyLjUwMCBrSHosIFY6IDc1LjAwIEh6CisgICAgZ2VvbWV0cnkgMTkyMCAxNDQwIDE5MjAgMTQ0MCAzMgorICAgIHRpbWluZ3MgMzM2NyAzNTIgMTQ0IDU2IDEgMjI0IDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIyMDQ4eDE1MzYtNjAiCisjIEQ6IDI2Ny4yNTAgTUh6LCBIOiA5NS40NDYga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDIwNDggMTUzNiAyMDQ4IDE1MzYgMzIKKyAgICB0aW1pbmdzIDM3NDIgMzc2IDE1MiA0OSAzIDIyNCA0IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTI4MHg3MjAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNzQuNDgxIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMjgwICAgICAgICA3MjAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDQ0Ljc2MCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuODI2IHVzICAgIDY3LjAyNCBtcworIyAgICAgICAgICAgICAgIDE3IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NTIgdXMgICAgMjIuMzQxIG1zCisjICAgICAgICAgICAgICAgNyBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjU3OCB1cyAgICA0OTEuNTEwIG1zCisjICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMjIgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTcuMTg2IHVzICAgMTYuMDg2IG1zCisjICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgNzIwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuMTU2IHVzICAgIDAuNTgxIG1zCisjICAgICAgICAgICAgICAgNDggY2hhcnMgICAgMjYgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDcyMC02MCIKKyMgRDogNzQuNDgxIE1IeiwgSDogNDQuNzYwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDcyMCAxMjgwIDcyMCAzMiB0aW1pbmdzIDEzNDI2IDE5MiA2NCAyMiAxIDEzNiAzIGVuZG1vZGUKKyMKKyMgICAxOTIweDEwODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMTcyLjc5OCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTkyMCAgICAgICAgMTA4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjcuMDgwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4yMDQgdXMgICAgNDQuNzIzIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjY5NCB1cyAgICAxNC45MDggbXMKKyMgICAgICAgICAgICAgICAxNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjg5OCB1cyAgICA1MDYuODU3IG1zCisjICAgICAgICAgICAgICAgNDEgY2hhcnMgICAgMzQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTEuMTExIHVzICAgMTYuMTAwIG1zCisjICAgICAgICAgICAgICAgMjQwIGNoYXJzICAgMTA4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjc5NiB1cyAgICAwLjU2NiBtcworIyAgICAgICAgICAgICAgIDgyIGNoYXJzICAgIDM4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTkyMHgxMDgwLTYwIgorIyBEOiA3NC40ODEgTUh6LCBIOiA2Ny4wODAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE5MjAgMTA4MCAxOTIwIDEwODAgMzIgdGltaW5ncyA1Nzg3IDMyOCAxMjAgMzQgMSAyMDggMyBlbmRtb2RlCisjCisjICAgMTQwMHgxMDUwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDEyMi42MSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTQwMCAgICAgICAgMTA1MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjUuMjE4IGtIeiAgNTkuOTkgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wMzcgdXMgICAgMC4wNDcgbXMKKyMgICAgICAgICAgICAgICAxOSBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNDQ0IHVzICAgIDAuMDE1IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS4xODUgdXMgICAgMC4xODggbXMKKyMgICAgICAgICAgICAgICAzMCBjaGFycyAgICAzMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMi45NjMgdXMgICAxNi40MTEgbXMKKyMgICAgICAgICAgICAgICAxNzUgY2hhcnMgICAxMDUwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDIuNjY3IHVzICAgIDAuMjUwIG1zCisjICAgICAgICAgICAgICAgNjAgY2hhcnMgICAgMzcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxNDAweDEwNTAtNjAiCisjIEQ6IDEyMi43NTAgTUh6LCBIOiA2NS4zMTcga0h6LCBWOiA1OS45OSBIegorICAgIGdlb21ldHJ5IDE0MDAgMTA1MCAxNDA4IDEwNTAgMzIKKyAgICB0aW1pbmdzIDgyMTQgMjMyIDg4IDMyIDMgMTQ0IDQgZW5kbW9kZSBtb2RlICIxNDAweDEwNTAtNzUiCisjIEQ6IDE1Ni4wMDAgTUh6LCBIOiA4Mi4yNzgga0h6LCBWOiA3NC44NjcgSHoKKyAgICBnZW9tZXRyeSAxNDAwIDEwNTAgMTQwOCAxMDUwIDMyIHRpbWluZ3MgNjQxMCAyNDggMTA0IDQyIDMgMTQ0IDQgZW5kbW9kZQorIworIyAgIDEzNjZ4NzY4LCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDg1Ljg2IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMzY2ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDQ3LjcwMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNjc3IHVzICAgIDAuMDYzIG1zCisjICAgICAgICAgICAgICAgMTggY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjgzOSB1cyAgICAwLjAyMSBtcworIyAgICAgICAgICAgICAgIDkgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi41MTYgdXMgICAgMC40ODIgbXMKKyMgICAgICAgICAgICAgICAyNyBjaGFycyAgICAyMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNS45MzMgdXMgICAxNi4xMDEgbXMKKyMgICAgICAgICAgICAgICAxNzEgY2hhcnMgICA3NjggbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNS4wMzEgdXMgICAgMC41NjYgbXMKKyMgICAgICAgICAgICAgICA1NCBjaGFycyAgICAyNyBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEzNjB4NzY4LTYwIgorIyBEOiA4NC43NTAgTUh6LCBIOiA0Ny43MjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEzNjAgNzY4IDEzNjAgNzY4IDMyCisgICAgdGltaW5ncyAxMTc5OSAyMDggNzIgMjIgMyAxMzYgNSBlbmRtb2RlIG1vZGUgIjEzNjZ4NzY4LTYwIgorIyBEOiA4NS44NiBNSHosIEg6IDQ3LjcwMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTM2NiA3NjggMTM2NiA3NjggMzIKKyAgICB0aW1pbmdzIDExNjQ3IDIxNiA3MiAyMyAxIDE0NCAzIGVuZG1vZGUgbW9kZSAiMTM2Nng3NjgtNTAiCisjIEQ6IDY5LDkyNCBNSHosIEg6IDM5LjU1MCBrSHosIFY6IDUwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTM2NiA3NjggMTM2NiA3NjggMzIgdGltaW5ncyAxNDMwMSAyMDAgNTYgMTkgMSAxNDQgMyBlbmRtb2RlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdmlhZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGJmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dApAQCAtMCwwICsxLDIxNCBAQAorCisgICAgICAgIFZJQSBJbnRlZ3JhdGlvbiBHcmFwaGljIENoaXAgQ29uc29sZSBGcmFtZWJ1ZmZlciBEcml2ZXIKKworW1BsYXRmb3JtXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBUaGUgY29uc29sZSBmcmFtZWJ1ZmZlciBkcml2ZXIgaXMgZm9yIGdyYXBoaWNzIGNoaXBzIG9mCisgICAgVklBIFVuaUNocm9tZSBGYW1pbHkoQ0xFMjY2LCBQTTgwMCAvIENONDAwIC8gQ04zMDAsCisgICAgICAgICAgICAgICAgICAgICAgICBQNE04MDBDRSAvIFA0TTgwMFBybyAvIENONzAwIC8gVk44MDAsCisgICAgICAgICAgICAgICAgICAgICAgICBDWDcwMCAvIFZYNzAwLCBLOE04OTAsIFA0TTg5MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENOODk2IC8gUDRNOTAwLCBWWDgwMCkKKworW0RyaXZlciBmZWF0dXJlc10KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIERldmljZTogQ1JULCBMQ0QsIERWSQorCisgICAgU3VwcG9ydCB2aWFmYl9tb2RlOgorICAgICAgICBDUlQ6CisgICAgICAgICAgICA2NDB4NDgwKDYwLCA3NSwgODUsIDEwMCwgMTIwIEh6KSwgNzIweDQ4MCg2MCBIeiksCisgICAgICAgICAgICA3MjB4NTc2KDYwIEh6KSwgODAweDYwMCg2MCwgNzUsIDg1LCAxMDAsIDEyMCBIeiksCisgICAgICAgICAgICA4NDh4NDgwKDYwIEh6KSwgODU2eDQ4MCg2MCBIeiksIDEwMjR4NTEyKDYwIEh6KSwKKyAgICAgICAgICAgIDEwMjR4NzY4KDYwLCA3NSwgODUsIDEwMCBIeiksIDExNTJ4ODY0KDc1IEh6KSwKKyAgICAgICAgICAgIDEyODB4NzY4KDYwIEh6KSwgMTI4MHg5NjAoNjAgSHopLCAxMjgweDEwMjQoNjAsIDc1LCA4NSBIeiksCisgICAgICAgICAgICAxNDQweDEwNTAoNjAgSHopLCAxNjAweDEyMDAoNjAsIDc1IEh6KSwgMTI4MHg3MjAoNjAgSHopLAorICAgICAgICAgICAgMTkyMHgxMDgwKDYwIEh6KSwgMTQwMHgxMDUwKDYwIEh6KSwgODAweDQ4MCg2MCBIeikKKworICAgIGNvbG9yIGRlcHRoOiA4IGJwcCwgMTYgYnBwLCAzMiBicHAgc3VwcG9ydHMuCisKKyAgICBTdXBwb3J0IDJEIGhhcmR3YXJlIGFjY2VsZXJhdG9yLgorCitbVXNpbmcgdGhlIHZpYWZiIG1vZHVsZV0KKy0tIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU3RhcnQgdmlhZmIgd2l0aCBkZWZhdWx0IHNldHRpbmdzOgorICAgICAgICAjbW9kcHJvYmUgdmlhZmIKKworICAgIFN0YXJ0IHZpYWZiIHdpdGggd2l0aCB1c2VyIG9wdGlvbnM6CisgICAgICAgICNtb2Rwcm9iZSB2aWFmYiB2aWFmYl9tb2RlPTgwMHg2MDAgdmlhZmJfYnBwPTE2IHZpYWZiX3JlZnJlc2g9NjAKKyAgICAgICAgICAgICAgICAgIHZpYWZiX2FjdGl2ZV9kZXY9Q1JUK0RWSSB2aWFmYl9kdmlfcG9ydD1EVlAxCisgICAgICAgICAgICAgICAgICB2aWFmYl9tb2RlMT0xMDI0eDc2OCB2aWFmYl9icHA9MTYgdmlhZmJfcmVmcmVzaDE9NjAKKyAgICAgICAgICAgICAgICAgIHZpYWZiX1NBTU1fT049MQorCisgICAgdmlhZmJfbW9kZToKKyAgICAgICAgNjQweDQ4MCAoZGVmYXVsdCkKKyAgICAgICAgNzIweDQ4MAorICAgICAgICA4MDB4NjAwCisgICAgICAgIDEwMjR4NzY4CisgICAgICAgIC4uLi4uLgorCisgICAgdmlhZmJfYnBwOgorICAgICAgICA4LCAxNiwgMzIgKGRlZmF1bHQ6MzIpCisKKyAgICB2aWFmYl9yZWZyZXNoOgorICAgICAgICA2MCwgNzUsIDg1LCAxMDAsIDEyMCAoZGVmYXVsdDo2MCkKKworICAgIHZpYWZiX2xjZF9kc3BfbWV0aG9kOgorICAgICAgICAwIDogZXhwYW5zaW9uIChkZWZhdWx0KQorICAgICAgICAxIDogY2VudGVyaW5nCisKKyAgICB2aWFmYl9sY2RfbW9kZToKKyAgICAgICAgMCA6IExDRCBwYW5lbCB3aXRoIExTQiBkYXRhIGZvcm1hdCBpbnB1dCAoZGVmYXVsdCkKKyAgICAgICAgMSA6IExDRCBwYW5lbCB3aXRoIE1TQiBkYXRhIGZvcm1hdCBpbnB1dAorCisgICAgdmlhZmJfbGNkX3BhbmVsX2lkOgorICAgICAgICAwIDogUmVzb2x1dGlvbjogNjQweDQ4MCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICAxIDogUmVzb2x1dGlvbjogODAweDYwMCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICAyIDogUmVzb2x1dGlvbjogMTAyNHg3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKGRlZmF1bHQpCisgICAgICAgIDMgOiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICA0IDogUmVzb2x1dGlvbjogMTI4MHgxMDI0LCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICA1IDogUmVzb2x1dGlvbjogMTQwMHgxMDUwLCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICA2IDogUmVzb2x1dGlvbjogMTYwMHgxMjAwLCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IEVuYWJsZQorCisgICAgICAgIDggOiBSZXNvbHV0aW9uOiA4MDB4NDgwLCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDkgOiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMTA6IFJlc29sdXRpb246IDEwMjR4NzY4LCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxMTogUmVzb2x1dGlvbjogMTAyNHg3NjgsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxMjogUmVzb2x1dGlvbjogMTI4MHg3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDEzOiBSZXNvbHV0aW9uOiAxMjgweDEwMjQsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxNDogUmVzb2x1dGlvbjogMTQwMHgxMDUwLCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTU6IFJlc29sdXRpb246IDE2MDB4MTIwMCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDE2OiBSZXNvbHV0aW9uOiAxMzY2eDc2OCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTc6IFJlc29sdXRpb246IDEwMjR4NjAwLCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDE4OiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMTk6IFJlc29sdXRpb246IDEyODB4ODAwLCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlCisKKyAgICB2aWFmYl9hY2NlbDoKKyAgICAgICAgMCA6IE5vIDJEIEhhcmR3YXJlIEFjY2VsZXJhdGlvbgorICAgICAgICAxIDogMkQgSGFyZHdhcmUgQWNjZWxlcmF0aW9uIChkZWZhdWx0KQorCisgICAgdmlhZmJfU0FNTV9PTjoKKyAgICAgICAgMCA6IHZpYWZiX1NBTU1fT04gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICAgICAgMSA6IHZpYWZiX1NBTU1fT04gZW5hYmxlCisKKyAgICB2aWFmYl9tb2RlMTogKHNlY29uZGFyeSBkaXNwbGF5IGRldmljZSkKKyAgICAgICAgNjQweDQ4MCAoZGVmYXVsdCkKKyAgICAgICAgNzIweDQ4MAorICAgICAgICA4MDB4NjAwCisgICAgICAgIDEwMjR4NzY4CisgICAgICAgIC4uLiAuLi4KKworICAgIHZpYWZiX2JwcDE6IChzZWNvbmRhcnkgZGlzcGxheSBkZXZpY2UpCisgICAgICAgIDgsIDE2LCAzMiAoZGVmYXVsdDozMikKKworICAgIHZpYWZiX3JlZnJlc2gxOiAoc2Vjb25kYXJ5IGRpc3BsYXkgZGV2aWNlKQorICAgICAgICA2MCwgNzUsIDg1LCAxMDAsIDEyMCAoZGVmYXVsdDo2MCkKKworICAgIHZpYWZiX2FjdGl2ZV9kZXY6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhY3RpdmUgZGV2aWNlcy4oQ1JULCBEVkksIENSVCtMQ0QuLi4pCisgICAgICAgIERWSSBzdGFuZHMgZm9yIERWSSBvciBIRE1JLCBFLmcuLCBJZiB5b3Ugd2FudCB0byBlbmFibGUgSERNSSwKKyAgICAgICAgc2V0IHZpYWZiX2FjdGl2ZV9kZXY9RFZJLiBJbiBTQU1NIGNhc2UsIHRoZSBwcmV2aW91cyBvZgorICAgICAgICB2aWFmYl9hY3RpdmVfZGV2IGlzIHByaW1hcnkgZGV2aWNlLCBhbmQgdGhlIGZvbGxvd2luZyBpcworICAgICAgICBzZWNvbmRhcnkgZGV2aWNlLgorCisgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICBUbyBlbmFibGUgb25lIGRldmljZSwgc3VjaCBhcyBEVkkgb25seSwgd2UgY2FuIHVzZToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX2FjdGl2ZV9kZXY9RFZJCisgICAgICAgIFRvIGVuYWJsZSB0d28gZGV2aWNlcywgc3VjaCBhcyBDUlQrRFZJOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1DUlQrRFZJOworCisgICAgICAgIEZvciBEdW9WaWV3IGNhc2UsIHdlIGNhbiB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PUNSVCtEVkkKKyAgICAgICAgICAgIE9SCisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PURWSStDUlQuLi4KKworICAgICAgICBGb3IgU0FNTSBjYXNlOgorICAgICAgICBJZiBDUlQgaXMgcHJpbWFyeSBhbmQgRFZJIGlzIHNlY29uZGFyeSwgd2Ugc2hvdWxkIHVzZToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX2FjdGl2ZV9kZXY9Q1JUK0RWSSB2aWFmYl9TQU1NX09OPTEuLi4KKyAgICAgICAgSWYgRFZJIGlzIHByaW1hcnkgYW5kIENSVCBpcyBzZWNvbmRhcnksIHdlIHNob3VsZCB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PURWSStDUlQgdmlhZmJfU0FNTV9PTj0xLi4uCisKKyAgICB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dDoKKyAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IGRpc3BsYXkgaGFyZHdhcmUgbGF5b3V0IGZvciBDWDcwMCBjaGlwLgorICAgICAgICAxIDogTENEIG9ubHkKKyAgICAgICAgMiA6IERWSSBvbmx5CisgICAgICAgIDMgOiBMQ0QrRFZJIChkZWZhdWx0KQorICAgICAgICA0IDogTENEMStMQ0QyIChpbnRlcm5hbCArIGludGVybmFsKQorICAgICAgICAxNjogTENEMStFeHRlcm5hbExDRDIgKGludGVybmFsICsgZXh0ZXJuYWwpCisKKyAgICB2aWFmYl9zZWNvbmRfc2l6ZToKKyAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZCB0byBzZXQgc2Vjb25kIGRldmljZSBtZW1vcnkgc2l6ZShNQikgaW4gU0FNTSBjYXNlLgorICAgICAgICBUaGUgbWluaW1hbCBzaXplIGlzIDE2LgorCisgICAgdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIERWSSBvbiBFUElBIC0gTQorICAgICAgICAwIDogTm8gRFZJIG9uIEVQSUEgLSBNIChkZWZhdWx0KQorICAgICAgICAxIDogRFZJIG9uIEVQSUEgLSBNCisKKyAgICB2aWFmYl9idXNfd2lkdGg6CisgICAgICAgIFdoZW4gdXNpbmcgMjQgLSBCaXQgQnVzIFdpZHRoIERpZ2l0YWwgSW50ZXJmYWNlLAorICAgICAgICB0aGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0LgorICAgICAgICAxMjogMTItQml0IExWRFMgb3IgMTItQml0IFRNRFMgKGRlZmF1bHQpCisgICAgICAgIDI0OiAyNC1CaXQgTFZEUyBvciAyNC1CaXQgVE1EUworCisgICAgdmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZToKKyAgICAgICAgV2hlbiB1c2luZyBEdWFsIEVkZ2UgUGFuZWwsIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQuCisgICAgICAgIDAgOiBObyBEdWFsIEVkZ2UgUGFuZWwgKGRlZmF1bHQpCisgICAgICAgIDEgOiBEdWFsIEVkZ2UgUGFuZWwKKworICAgIHZpYWZiX3ZpZGVvX2RldjoKKyAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHZpZGVvIG91dHB1dCBkZXZpY2VzKENSVCwgRFZJLCBMQ0QpIGZvcgorICAgICAgICBkdW92aWV3IGNhc2UuCisgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICBUbyBvdXRwdXQgdmlkZW8gb24gRFZJLCB3ZSBzaG91bGQgdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfdmlkZW9fZGV2PURWSS4uLgorCisgICAgdmlhZmJfbGNkX3BvcnQ6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBMQ0Qgb3V0cHV0IHBvcnQsCisgICAgICAgIGF2YWlsYWJsZSB2YWx1ZXMgYXJlICJEVlAwIiAiRFZQMSIgIkRGUF9ISUdITE9XIiAiREZQX0hJR0giICJERlBfTE9XIi4KKyAgICAgICAgZm9yIGV4dGVybmFsIExDRCArIGV4dGVybmFsIERWSSBvbiBDWDcwMChFeHRlcm5hbCBMQ0QgaXMgb24gRFZQMCksCisgICAgICAgIHdlIHNob3VsZCB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9sY2RfcG9ydD1EVlAwLi4uCisKK05vdGVzOgorICAgIDEuIENSVCBtYXkgbm90IGRpc3BsYXkgcHJvcGVybHkgZm9yIER1b1ZpZXcgQ1JUICYgRFZJIGRpc3BsYXkgYXQKKyAgICAgICB0aGUgIjY0MHg0ODAiIFBBTCBtb2RlIHdpdGggRFZJIG92ZXJzY2FuIGVuYWJsZWQuCisgICAgMi4gU0FNTSBzdGFuZHMgZm9yIHNpbmdsZSBhZGFwdGVyIG11bHRpIG1vbml0b3JzLiBJdCBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgIG11bHRpLWhlYWQgc2luY2UgU0FNTSBzdXBwb3J0IG11bHRpIG1vbml0b3IgYXQgZHJpdmVyIGxheWVycywgdGh1cyBmYmNvbgorICAgICAgIGxheWVyIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IGl0OyBTQU1NJ3Mgc2Vjb25kIHNjcmVlbiBkb2Vzbid0IGhhdmUgYQorICAgICAgIGRldmljZSBub2RlIGZpbGUsIHRodXMgYSB1c2VyIG1vZGUgYXBwbGljYXRpb24gY2FuJ3QgYWNjZXNzIGl0IGRpcmVjdGx5LgorICAgICAgIFdoZW4gU0FNTSBpcyBlbmFibGVkLCB2aWFmYl9tb2RlIGFuZCB2aWFmYl9tb2RlMSwgdmlhZmJfYnBwIGFuZAorICAgICAgIHZpYWZiX2JwcDEsIHZpYWZiX3JlZnJlc2ggYW5kIHZpYWZiX3JlZnJlc2gxIGNhbiBiZSBkaWZmZXJlbnQuCisgICAgMy4gV2hlbiBjb25zb2xlIGlzIGRlcGVuZGluZyBvbiB2aWFmYmluZm8xLCBkeW5hbWljYWxseSBjaGFuZ2UgcmVzb2x1dGlvbgorICAgICAgIGFuZCBicHAsIG5lZWQgdG8gY2FsbCBWSUFGQiBzcGVjaWZpZWQgaW9jdGwgaW50ZXJmYWNlIFZJQUZCX1NFVF9ERVZJQ0UKKyAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgY29tbW9uIGlvY3RsIGZ1bmN0aW9uIEZCSU9QVVRfVlNDUkVFTklORk8gc2luY2UKKyAgICAgICB2aWFmYiBkb2Vzbid0IHN1cHBvcnQgbXVsdGktaGVhZCB3ZWxsLCBvciBpdCB3aWxsIGNhdXNlIHNjcmVlbiBjcnVzaC4KKyAgICA0LiBWWDgwMCAyRCBhY2NlbGVyYXRvciBoYXNuJ3QgYmVlbiBzdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIgeWV0LiBXaGVuCisgICAgICAgdXNpbmcgZHJpdmVyIG9uIFZYODAwLCB0aGUgZHJpdmVyIHdpbGwgZGlzYWJsZSB0aGUgYWNjZWxlcmF0aW9uCisgICAgICAgZnVuY3Rpb24gYXMgZGVmYXVsdC4KKworCitbQ29uZmlndXJlIHZpYWZiIHdpdGggImZic2V0IiB0b29sXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAiZmJzZXQiIGlzIGFuIGluYm94IHV0aWxpdHkgb2YgTGludXguCisgICAgMS4gSW5xdWlyZSBjdXJyZW50IHZpYWZiIGluZm9ybWF0aW9uLCB0eXBlLAorICAgICAgICAgICAjIGZic2V0IC1pCisKKyAgICAyLiBTZXQgdmFyaW91cyByZXNvbHV0aW9ucyBhbmQgdmlhZmJfcmVmcmVzaCByYXRlcywKKyAgICAgICAgICAgIyBmYnNldCA8cmVzb2x1dGlvbi12ZXJ0aWNhbF9zeW5jPgorCisgICAgICAgZXhhbXBsZSwKKyAgICAgICAgICAgIyBmYnNldCAiMTAyNHg3NjgtNzUiCisgICAgICAgb3IKKyAgICAgICAgICAgIyBmYnNldCAtZyAxMDI0IDc2OCAxMDI0IDc2OCAzMgorICAgICAgIENoZWNrIHRoZSBmaWxlICIvZXRjL2ZiLm1vZGVzIiB0byBmaW5kIGRpc3BsYXkgbW9kZXMgYXZhaWxhYmxlLgorCisgICAgMy4gU2V0IHRoZSBjb2xvciBkZXB0aCwKKyAgICAgICAgICAgIyBmYnNldCAtZGVwdGggPHZhbHVlPgorCisgICAgICAgZXhhbXBsZSwKKyAgICAgICAgICAgIyBmYnNldCAtZGVwdGggMTYKKworW0Jvb3R1cCB3aXRoIHZpYWZiXToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIGdydWIuY29uZjoKKyAgICBhcHBlbmQgPSAidmlkZW89dmlhZmI6dmlhZmJfbW9kZT0xMDI0eDc2OCx2aWFmYl9icHA9MzIsdmlhZmJfcmVmcmVzaD04NSIKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDRkMjU2NmEuLmY1ZjgxMmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTI5NCw2ICsyOTQsMTUgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6IHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCkKK1doZW46IE9jdG9iZXIgMjAwOQorV2h5OiAgVGhlICVwRiB2c3ByaW50ZiBmb3JtYXQgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBpbiBhCisgICAgICBzaW1wbGVyIHdheS4gIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCkgaXMgZGVwcmVjYXRlZCBidXQKKyAgICAgIHN0aWxsIHByZXNlbnQgdG8gZ2l2ZSBvdXQtb2YtdHJlZSBtb2R1bGVzIHRpbWUgdG8gY2hhbmdlLgorV2hvOiAgQmpvcm4gSGVsZ2FhcyA8Ympvcm4uaGVsZ2Fhc0BocC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0Ogkvc3lzL28yY2Igc3ltbGluawogV2hlbjoJSmFudWFyeSAyMDEwCiBXaHk6CS9zeXMvZnMvbzJjYiBpcyB0aGUgcHJvcGVyIGxvY2F0aW9uIGZvciB0aGlzIGluZm9ybWF0aW9uIC0gL3N5cy9vMmNiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9mczQtbW91bnQtY29udHJvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9mczQtbW91bnQtY29udHJvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNDE3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dApAQCAtMCwwICsxLDM5MyBAQAorCitNaXNjZWxsYW5lb3VzIERldmljZSBjb250cm9sIG9wZXJhdGlvbnMgZm9yIHRoZSBhdXRvZnM0IGtlcm5lbCBtb2R1bGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBwcm9ibGVtCis9PT09PT09PT09PQorCitUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBhY3RpdmUgcmVzdGFydHMgaW4gYXV0b2ZzICh0aGF0IGlzIHRvIHNheQorcmVzdGFydGluZyBhdXRvZnMgd2hlbiB0aGVyZSBhcmUgYnVzeSBtb3VudHMpLgorCitEdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiBhdXRvZnMgdXNlcyBhIGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgb24gdGhlCitkaXJlY3RvcnkgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gaXNzdWUgY29udHJvbAorb3BlcmF0aW9ucy4gVXNpbmcgYSBmaWxlIGRlc2NyaXB0b3IgZ2l2ZXMgaW9jdGwgb3BlcmF0aW9ucyBhY2Nlc3MgdG8KK2F1dG9mcyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIHN1cGVyIGJsb2NrLiBUaGUgb3BlcmF0aW9ucworYXJlIHRoaW5ncyBzdWNoIGFzIHNldHRpbmcgYW4gYXV0b2ZzIG1vdW50IGNhdGF0b25pYywgc2V0dGluZyB0aGUKK2V4cGlyZSB0aW1lb3V0IGFuZCByZXF1ZXN0aW5nIGV4cGlyZSBjaGVja3MuIEFzIGlzIGV4cGxhaW5lZCBiZWxvdywKK2NlcnRhaW4gdHlwZXMgb2YgYXV0b2ZzIHRyaWdnZXJlZCBtb3VudHMgY2FuIGVuZCB1cCBjb3ZlcmluZyBhbiBhdXRvZnMKK21vdW50IGl0c2VsZiB3aGljaCBwcmV2ZW50cyB1cyBiZWluZyBhYmxlIHRvIHVzZSBvcGVuKDIpIHRvIG9idGFpbiBhCitmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZXNlIG9wZXJhdGlvbnMgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSBvcGVuLgorCitDdXJyZW50bHkgYXV0b2ZzIHVzZXMgInVtb3VudCAtbCIgKGxhenkgdW1vdW50KSB0byBjbGVhciBhY3RpdmUgbW91bnRzCithdCByZXN0YXJ0LiBXaGlsZSB1c2luZyBsYXp5IHVtb3VudCB3b3JrcyBmb3IgbW9zdCBjYXNlcywgYW55dGhpbmcgdGhhdAorbmVlZHMgdG8gd2FsayBiYWNrIHVwIHRoZSBtb3VudCB0cmVlIHRvIGNvbnN0cnVjdCBhIHBhdGgsIHN1Y2ggYXMKK2dldGN3ZCgyKSBhbmQgdGhlIHByb2MgZmlsZSBzeXN0ZW0gL3Byb2MvPHBpZD4vY3dkLCBubyBsb25nZXIgd29ya3MKK2JlY2F1c2UgdGhlIHBvaW50IGZyb20gd2hpY2ggdGhlIHBhdGggaXMgY29uc3RydWN0ZWQgaGFzIGJlZW4gZGV0YWNoZWQKK2Zyb20gdGhlIG1vdW50IHRyZWUuCisKK1RoZSBhY3R1YWwgcHJvYmxlbSB3aXRoIGF1dG9mcyBpcyB0aGF0IGl0IGNhbid0IHJlY29ubmVjdCB0byBleGlzdGluZworbW91bnRzLiBJbW1lZGlhdGVseSBvbmUgdGhpbmtzIG9mIGp1c3QgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIHJlbW91bnQKK2F1dG9mcyBmaWxlIHN5c3RlbXMgd291bGQgc29sdmUgaXQsIGJ1dCBhbGFzLCB0aGF0IGNhbid0IHdvcmsuIFRoaXMgaXMKK2JlY2F1c2UgYXV0b2ZzIGRpcmVjdCBtb3VudHMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiAib24gZGVtYW5kIG1vdW50CithbmQgZXhwaXJlIiBvZiBuZXN0ZWQgbW91bnQgdHJlZXMgaGF2ZSB0aGUgZmlsZSBzeXN0ZW0gbW91bnRlZCBkaXJlY3RseQorb24gdG9wIG9mIHRoZSBtb3VudCB0cmlnZ2VyIGRpcmVjdG9yeSBkZW50cnkuCisKK0ZvciBleGFtcGxlLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIGF1dG9tb3VudCBtYXBzLCBkaXJlY3QgKGluIHRoZSBrZXJuZWwKK21vZHVsZSBzb3VyY2UgeW91IHdpbGwgc2VlIGEgdGhpcmQgdHlwZSBjYWxsZWQgYW4gb2Zmc2V0LCB3aGljaCBpcyBqdXN0CithIGRpcmVjdCBtb3VudCBpbiBkaXNndWlzZSkgYW5kIGluZGlyZWN0LgorCitIZXJlIGlzIGEgbWFzdGVyIG1hcCB3aXRoIGRpcmVjdCBhbmQgaW5kaXJlY3QgbWFwIGVudHJpZXM6CisKKy8tICAgICAgL2V0Yy9hdXRvLmRpcmVjdAorL3Rlc3QgICAvZXRjL2F1dG8uaW5kaXJlY3QKKworYW5kIHRoZSBjb3JyZXNwb25kaW5nIG1hcCBmaWxlczoKKworL2V0Yy9hdXRvLmRpcmVjdDoKKworL2F1dG9tb3VudC9kcGFyc2UvZzYgIGJ1ZGdpZTovYXV0b2ZzL2V4cG9ydDEKKy9hdXRvbW91bnQvZHBhcnNlL2cxICBzaGFyazovYXV0b2ZzL2V4cG9ydDEKK2FuZCBzbyBvbi4KKworL2V0Yy9hdXRvLmluZGlyZWN0OgorCitnMSAgICBzaGFyazovYXV0b2ZzL2V4cG9ydDEKK2c2ICAgIGJ1ZGdpZTovYXV0b2ZzL2V4cG9ydDEKK2FuZCBzbyBvbi4KKworRm9yIHRoZSBhYm92ZSBpbmRpcmVjdCBtYXAgYW4gYXV0b2ZzIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgb24gL3Rlc3QgYW5kCittb3VudHMgYXJlIHRyaWdnZXJlZCBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IGtleSBieSB0aGUgaW5vZGUgbG9va3VwCitvcGVyYXRpb24uIFNvIHdlIHNlZSBhIG1vdW50IG9mIHNoYXJrOi9hdXRvZnMvZXhwb3J0MSBvbiAvdGVzdC9nMSwgZm9yCitleGFtcGxlLgorCitUaGUgd2F5IHRoYXQgZGlyZWN0IG1vdW50cyBhcmUgaGFuZGxlZCBpcyBieSBtYWtpbmcgYW4gYXV0b2ZzIG1vdW50IG9uCitlYWNoIGZ1bGwgcGF0aCwgc3VjaCBhcyAvYXV0b21vdW50L2RwYXJzZS9nMSwgYW5kIHVzaW5nIGl0IGFzIGEgbW91bnQKK3RyaWdnZXIuIFNvIHdoZW4gd2Ugd2FsayBvbiB0aGUgcGF0aCB3ZSBtb3VudCBzaGFyazovYXV0b2ZzL2V4cG9ydDEgIm9uCit0b3Agb2YgdGhpcyBtb3VudCBwb2ludCIuIFNpbmNlIHRoZXNlIGFyZSBhbHdheXMgZGlyZWN0b3JpZXMgd2UgY2FuCit1c2UgdGhlIGZvbGxvd19saW5rIGlub2RlIG9wZXJhdGlvbiB0byB0cmlnZ2VyIHRoZSBtb3VudC4KKworQnV0LCBlYWNoIGVudHJ5IGluIGRpcmVjdCBhbmQgaW5kaXJlY3QgbWFwcyBjYW4gaGF2ZSBvZmZzZXRzIChtYWtpbmcKK3RoZW0gbXVsdGktbW91bnQgbWFwIGVudHJpZXMpLgorCitGb3IgZXhhbXBsZSwgYW4gaW5kaXJlY3QgbW91bnQgbWFwIGVudHJ5IGNvdWxkIGFsc28gYmU6CisKK2cxICBcCisgICAvICAgICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydDUvdGVzdGluZy90ZXN0IFwKKyAgIC9zMSAgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0L3Rlc3RpbmcvdGVzdC9zMSBcCisgICAvczIgICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydDUvdGVzdGluZy90ZXN0L3MyIFwKKyAgIC9zMS9zczEgIHNoYXJrOi9hdXRvZnMvZXhwb3J0MSBcCisgICAvczIvc3MyICBzaGFyazovYXV0b2ZzL2V4cG9ydDIKKworYW5kIGEgc2ltaWxhcmx5IGEgZGlyZWN0IG1vdW50IG1hcCBlbnRyeSBjb3VsZCBhbHNvIGJlOgorCisvYXV0b21vdW50L2RwYXJzZS9nMSBcCisgICAgLyAgICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydDUvdGVzdGluZy90ZXN0IFwKKyAgICAvczEgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0L3Rlc3RpbmcvdGVzdC9zMSBcCisgICAgL3MyICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydDUvdGVzdGluZy90ZXN0L3MyIFwKKyAgICAvczEvc3MxIHNoYXJrOi9hdXRvZnMvZXhwb3J0MiBcCisgICAgL3MyL3NzMiBzaGFyazovYXV0b2ZzL2V4cG9ydDIKKworT25lIG9mIHRoZSBpc3N1ZXMgd2l0aCB2ZXJzaW9uIDQgb2YgYXV0b2ZzIHdhcyB0aGF0LCB3aGVuIG1vdW50aW5nIGFuCitlbnRyeSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIG9mZnNldHMsIHBvc3NpYmx5IHdpdGggbmVzdGluZywgd2UgbmVlZGVkCit0byBtb3VudCBhbmQgdW1vdW50IGFsbCBvZiB0aGUgb2Zmc2V0cyBhcyBhIHNpbmdsZSB1bml0LiBOb3QgcmVhbGx5IGEKK3Byb2JsZW0sIGV4Y2VwdCBmb3IgcGVvcGxlIHdpdGggYSBsYXJnZSBudW1iZXIgb2Ygb2Zmc2V0cyBpbiBtYXAgZW50cmllcy4KK1RoaXMgbWVjaGFuaXNtIGlzIHVzZWQgZm9yIHRoZSB3ZWxsIGtub3duICJob3N0cyIgbWFwIGFuZCB3ZSBoYXZlIHNlZW4KK2Nhc2VzIChpbiAyLjQpIHdoZXJlIHRoZSBhdmFpbGFibGUgbnVtYmVyIG9mIG1vdW50cyBhcmUgZXhoYXVzdGVkIG9yCit3aGVyZSB0aGUgbnVtYmVyIG9mIHByaXZpbGVnZWQgcG9ydHMgYXZhaWxhYmxlIGlzIGV4aGF1c3RlZC4KKworSW4gdmVyc2lvbiA1IHdlIG1vdW50IG9ubHkgYXMgd2UgZ28gZG93biB0aGUgdHJlZSBvZiBvZmZzZXRzIGFuZAorc2ltaWxhcmx5IGZvciBleHBpcmluZyB0aGVtIHdoaWNoIHJlc29sdmVzIHRoZSBhYm92ZSBwcm9ibGVtLiBUaGVyZSBpcworc29tZXdoYXQgbW9yZSBkZXRhaWwgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJ1dCBpdCBpc24ndCBuZWVkZWQgZm9yIHRoZQorc2FrZSBvZiB0aGUgcHJvYmxlbSBleHBsYW5hdGlvbi4gVGhlIG9uZSBpbXBvcnRhbnQgZGV0YWlsIGlzIHRoYXQgdGhlc2UKK29mZnNldHMgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyB0aGUgZGlyZWN0IG1vdW50cworYWJvdmUgYW5kIHNvIHRoZSBtb3VudCBwb2ludHMgY2FuIGJlIGNvdmVyZWQgYnkgYSBtb3VudC4KKworVGhlIGN1cnJlbnQgYXV0b2ZzIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gaW9jdGwgZmlsZSBkZXNjcmlwdG9yIG9wZW5lZAorb24gdGhlIG1vdW50IHBvaW50IGZvciBjb250cm9sIG9wZXJhdGlvbnMuIFRoZSByZWZlcmVuY2VzIGhlbGQgYnkgdGhlCitkZXNjcmlwdG9yIGFyZSBhY2NvdW50ZWQgZm9yIGluIGNoZWNrcyBtYWRlIHRvIGRldGVybWluZSBpZiBhIG1vdW50IGlzCitpbiB1c2UgYW5kIGlzIGFsc28gdXNlZCB0byBhY2Nlc3MgYXV0b2ZzIGZpbGUgc3lzdGVtIGluZm9ybWF0aW9uIGhlbGQKK2luIHRoZSBtb3VudCBzdXBlciBibG9jay4gU28gdGhlIHVzZSBvZiBhIGZpbGUgaGFuZGxlIG5lZWRzIHRvIGJlCityZXRhaW5lZC4KKworCitUaGUgU29sdXRpb24KKz09PT09PT09PT09PQorCitUbyBiZSBhYmxlIHRvIHJlc3RhcnQgYXV0b2ZzIGxlYXZpbmcgZXhpc3RpbmcgZGlyZWN0LCBpbmRpcmVjdCBhbmQKK29mZnNldCBtb3VudHMgaW4gcGxhY2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIG9idGFpbiBhIGZpbGUgaGFuZGxlCitmb3IgdGhlc2UgcG90ZW50aWFsbHkgY292ZXJlZCBhdXRvZnMgbW91bnQgcG9pbnRzLiBSYXRoZXIgdGhhbiBqdXN0CitpbXBsZW1lbnQgYW4gaXNvbGF0ZWQgb3BlcmF0aW9uIGl0IHdhcyBkZWNpZGVkIHRvIHJlLWltcGxlbWVudCB0aGUKK2V4aXN0aW5nIGlvY3RsIGludGVyZmFjZSBhbmQgYWRkIG5ldyBvcGVyYXRpb25zIHRvIHByb3ZpZGUgdGhpcworZnVuY3Rpb25hbGl0eS4KKworSW4gYWRkaXRpb24sIHRvIGJlIGFibGUgdG8gcmVjb25zdHJ1Y3QgYSBtb3VudCB0cmVlIHRoYXQgaGFzIGJ1c3kgbW91bnRzLAordGhlIHVpZCBhbmQgZ2lkIG9mIHRoZSBsYXN0IHVzZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIG1vdW50IG5lZWRzIHRvIGJlCithdmFpbGFibGUgYmVjYXVzZSB0aGVzZSBjYW4gYmUgdXNlZCBhcyBtYWNybyBzdWJzdGl0dXRpb24gdmFyaWFibGVzIGluCithdXRvZnMgbWFwcy4gVGhleSBhcmUgcmVjb3JkZWQgYXQgbW91bnQgcmVxdWVzdCB0aW1lIGFuZCBhbiBvcGVyYXRpb24KK2hhcyBiZWVuIGFkZGVkIHRvIHJldHJpZXZlIHRoZW0uCisKK1NpbmNlIHdlJ3JlIHJlLWltcGxlbWVudGluZyB0aGUgY29udHJvbCBpbnRlcmZhY2UsIGEgY291cGxlIG9mIG90aGVyCitwcm9ibGVtcyB3aXRoIHRoZSBleGlzdGluZyBpbnRlcmZhY2UgaGF2ZSBiZWVuIGFkZHJlc3NlZC4gRmlyc3QsIHdoZW4KK2EgbW91bnQgb3IgZXhwaXJlIG9wZXJhdGlvbiBjb21wbGV0ZXMgYSBzdGF0dXMgaXMgcmV0dXJuZWQgdG8gdGhlCitrZXJuZWwgYnkgZWl0aGVyIGEgInNlbmQgcmVhZHkiIG9yIGEgInNlbmQgZmFpbCIgb3BlcmF0aW9uLiBUaGUKKyJzZW5kIGZhaWwiIG9wZXJhdGlvbiBvZiB0aGUgaW9jdGwgaW50ZXJmYWNlIGNvdWxkIG9ubHkgZXZlciBzZW5kCitFTk9FTlQgc28gdGhlIHJlLWltcGxlbWVudGF0aW9uIGFsbG93cyB1c2VyIHNwYWNlIHRvIHNlbmQgYW4gYWN0dWFsCitzdGF0dXMuIEFub3RoZXIgZXhwZW5zaXZlIG9wZXJhdGlvbiBpbiB1c2VyIHNwYWNlLCBmb3IgdGhvc2UgdXNpbmcKK3ZlcnkgbGFyZ2UgbWFwcywgaXMgZGlzY292ZXJpbmcgaWYgYSBtb3VudCBpcyBwcmVzZW50LiBVc3VhbGx5IHRoaXMKK2ludm9sdmVzIHNjYW5uaW5nIC9wcm9jL21vdW50cyBhbmQgc2luY2UgaXQgbmVlZHMgdG8gYmUgZG9uZSBxdWl0ZQorb2Z0ZW4gaXQgY2FuIGludHJvZHVjZSBzaWduaWZpY2FudCBvdmVyaGVhZCB3aGVuIHRoZXJlIGFyZSBtYW55IGVudHJpZXMKK2luIHRoZSBtb3VudCB0YWJsZS4gQW4gb3BlcmF0aW9uIHRvIGxvb2t1cCB0aGUgbW91bnQgc3RhdHVzIG9mIGEgbW91bnQKK3BvaW50IGRlbnRyeSAoY292ZXJlZCBvciBub3QpIGhhcyBhbHNvIGJlZW4gYWRkZWQuCisKK0N1cnJlbnQga2VybmVsIGRldmVsb3BtZW50IHBvbGljeSByZWNvbW1lbmRzIGF2b2lkaW5nIHRoZSB1c2Ugb2YgdGhlCitpb2N0bCBtZWNoYW5pc20gaW4gZmF2b3Igb2Ygc3lzdGVtcyBzdWNoIGFzIE5ldGxpbmsuIEFuIGltcGxlbWVudGF0aW9uCit1c2luZyB0aGlzIHN5c3RlbSB3YXMgYXR0ZW1wdGVkIHRvIGV2YWx1YXRlIGl0cyBzdWl0YWJpbGl0eSBhbmQgaXQgd2FzCitmb3VuZCB0byBiZSBpbmFkZXF1YXRlLCBpbiB0aGlzIGNhc2UuIFRoZSBHZW5lcmljIE5ldGxpbmsgc3lzdGVtIHdhcwordXNlZCBmb3IgdGhpcyBhcyByYXcgTmV0bGluayB3b3VsZCBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgaW5jcmVhc2UgaW4KK2NvbXBsZXhpdHkuIFRoZXJlJ3Mgbm8gcXVlc3Rpb24gdGhhdCB0aGUgR2VuZXJpYyBOZXRsaW5rIHN5c3RlbSBpcyBhbgorZWxlZ2FudCBzb2x1dGlvbiBmb3IgY29tbW9uIGNhc2UgaW9jdGwgZnVuY3Rpb25zIGJ1dCBpdCdzIG5vdCBhIGNvbXBsZXRlCityZXBsYWNlbWVudCBwcm9iYWJseSBiZWNhdXNlIGl0J3MgcHJpbWFyeSBwdXJwb3NlIGluIGxpZmUgaXMgdG8gYmUgYQorbWVzc2FnZSBidXMgaW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IGFuIGlvY3RsIHJlcGxhY2VtZW50LgorV2hpbGUgaXQgd291bGQgYmUgcG9zc2libGUgdG8gd29yayBhcm91bmQgdGhpcyB0aGVyZSBpcyBvbmUgY29uY2VybgordGhhdCBsZWFkIHRvIHRoZSBkZWNpc2lvbiB0byBub3QgdXNlIGl0LiBUaGlzIGlzIHRoYXQgdGhlIGF1dG9mcworZXhwaXJlIGluIHRoZSBkYWVtb24gaGFzIGJlY29tZSBmYXIgdG8gY29tcGxleCBiZWNhdXNlIHVtb3VudAorY2FuZGlkYXRlcyBhcmUgZW51bWVyYXRlZCwgYWxtb3N0IGZvciBubyBvdGhlciByZWFzb24gdGhhbiB0byAiY291bnQiCit0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIGNhbGwgdGhlIGV4cGlyZSBpb2N0bC4gVGhpcyBpbnZvbHZlcyBzY2FubmluZwordGhlIG1vdW50IHRhYmxlIHdoaWNoIGhhcyBwcm92ZWQgdG8gYmUgYSBiaWcgb3ZlcmhlYWQgZm9yIHVzZXJzIHdpdGgKK2xhcmdlIG1hcHMuIFRoZSBiZXN0IHdheSB0byBpbXByb3ZlIHRoaXMgaXMgdHJ5IGFuZCBnZXQgYmFjayB0byB0aGUKK3dheSB0aGUgZXhwaXJlIHdhcyBkb25lIGxvbmcgYWdvLiBUaGF0IGlzLCB3aGVuIGFuIGV4cGlyZSByZXF1ZXN0IGlzCitpc3N1ZWQgZm9yIGEgbW91bnQgKGZpbGUgaGFuZGxlKSB3ZSBzaG91bGQgY29udGludWFsbHkgY2FsbCBiYWNrIHRvCit0aGUgZGFlbW9uIHVudGlsIHdlIGNhbid0IHVtb3VudCBhbnkgbW9yZSBtb3VudHMsIHRoZW4gcmV0dXJuIHRoZQorYXBwcm9wcmlhdGUgc3RhdHVzIHRvIHRoZSBkYWVtb24uIEF0IHRoZSBtb21lbnQgd2UganVzdCBleHBpcmUgb25lCittb3VudCBhdCBhIHRpbWUuIEEgR2VuZXJpYyBOZXRsaW5rIGltcGxlbWVudGF0aW9uIHdvdWxkIGV4Y2x1ZGUgdGhpcworcG9zc2liaWxpdHkgZm9yIGZ1dHVyZSBkZXZlbG9wbWVudCBkdWUgdG8gdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUKK21lc3NhZ2UgYnVzIGFyY2hpdGVjdHVyZS4KKworCithdXRvZnM0IE1pc2NlbGxhbmVvdXMgRGV2aWNlIG1vdW50IGNvbnRyb2wgaW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjb250cm9sIGludGVyZmFjZSBpcyBvcGVuaW5nIGEgZGV2aWNlIG5vZGUsIHR5cGljYWxseSAvZGV2L2F1dG9mcy4KKworQWxsIHRoZSBpb2N0bHMgdXNlIGEgY29tbW9uIHN0cnVjdHVyZSB0byBwYXNzIHRoZSBuZWVkZWQgcGFyYW1ldGVyCitpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIG9wZXJhdGlvbiByZXN1bHRzOgorCitzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB7CisJX191MzIgdmVyX21ham9yOworCV9fdTMyIHZlcl9taW5vcjsKKwlfX3UzMiBzaXplOyAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIGRhdGEgcGFzc2VkIGluCisJCQkJICogaW5jbHVkaW5nIHRoaXMgc3RydWN0ICovCisJX19zMzIgaW9jdGxmZDsgICAgICAgICAgLyogYXV0b21vdW50IGNvbW1hbmQgZmQgKi8KKworCV9fdTMyIGFyZzE7ICAgICAgICAgICAgIC8qIENvbW1hbmQgcGFyYW1ldGVycyAqLworCV9fdTMyIGFyZzI7CisKKwljaGFyIHBhdGhbMF07Cit9OworCitUaGUgaW9jdGxmZCBmaWVsZCBpcyBhIG1vdW50IHBvaW50IGZpbGUgZGVzY3JpcHRvciBvZiBhbiBhdXRvZnMgbW91bnQKK3BvaW50LiBJdCBpcyByZXR1cm5lZCBieSB0aGUgb3BlbiBjYWxsIGFuZCBpcyB1c2VkIGJ5IGFsbCBjYWxscyBleGNlcHQKK3RoZSBjaGVjayBmb3Igd2hldGhlciBhIGdpdmVuIHBhdGggaXMgYSBtb3VudCBwb2ludCwgd2hlcmUgaXQgbWF5CitvcHRpb25hbGx5IGJlIHVzZWQgdG8gY2hlY2sgYSBzcGVjaWZpYyBtb3VudCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4KK21vdW50IHBvaW50IGZpbGUgZGVzY3JpcHRvciwgYW5kIHdoZW4gcmVxdWVzdGluZyB0aGUgdWlkIGFuZCBnaWQgb2YgdGhlCitsYXN0IHN1Y2Nlc3NmdWwgbW91bnQgb24gYSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBhdXRvZnMgZmlsZSBzeXN0ZW0uCisKK1RoZSBmaWVsZHMgYXJnMSBhbmQgYXJnMiBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzIG9mCitjYWxscyBtYWRlIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworVGhlIHBhdGggZmllbGQgaXMgdXNlZCB0byBwYXNzIGEgcGF0aCB3aGVyZSBpdCBpcyBuZWVkZWQgYW5kIHRoZSBzaXplIGZpZWxkCitpcyB1c2VkIGFjY291bnQgZm9yIHRoZSBpbmNyZWFzZWQgc3RydWN0dXJlIGxlbmd0aCB3aGVuIHRyYW5zbGF0aW5nIHRoZQorc3RydWN0dXJlIHNlbnQgZnJvbSB1c2VyIHNwYWNlLgorCitUaGlzIHN0cnVjdHVyZSBjYW4gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIGJ5IHVzaW5nCit0aGUgdm9pZCBmdW5jdGlvbiBjYWxsIGluaXRfYXV0b2ZzX2Rldl9pb2N0bChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqKS4KKworQWxsIG9mIHRoZSBpb2N0bHMgcGVyZm9ybSBhIGNvcHkgb2YgdGhpcyBzdHJ1Y3R1cmUgZnJvbSB1c2VyIHNwYWNlIHRvCitrZXJuZWwgc3BhY2UgYW5kIHJldHVybiAtRUlOVkFMIGlmIHRoZSBzaXplIHBhcmFtZXRlciBpcyBzbWFsbGVyIHRoYW4KK3RoZSBzdHJ1Y3R1cmUgc2l6ZSBpdHNlbGYsIC1FTk9NRU0gaWYgdGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscworb3IgLUVGQVVMVCBpZiB0aGUgY29weSBpdHNlbGYgZmFpbHMuIE90aGVyIGNoZWNrcyBpbmNsdWRlIGEgdmVyc2lvbiBjaGVjaworb2YgdGhlIGNvbXBpbGVkIGluIHVzZXIgc3BhY2UgdmVyc2lvbiBhZ2FpbnN0IHRoZSBtb2R1bGUgdmVyc2lvbiBhbmQgYQorbWlzbWF0Y2ggcmVzdWx0cyBpbiBhIC1FSU5WQUwgcmV0dXJuLiBJZiB0aGUgc2l6ZSBmaWVsZCBpcyBncmVhdGVyIHRoYW4KK3RoZSBzdHJ1Y3R1cmUgc2l6ZSB0aGVuIGEgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIHByZXNlbnQgYW5kIGlzIGNoZWNrZWQgdG8KK2Vuc3VyZSBpdCBiZWdpbnMgd2l0aCBhICIvIiBhbmQgaXMgTlVMTCB0ZXJtaW5hdGVkLCBvdGhlcndpc2UgLUVJTlZBTCBpcworcmV0dXJuZWQuIEZvbGxvd2luZyB0aGVzZSBjaGVja3MsIGZvciBhbGwgaW9jdGwgY29tbWFuZHMgZXhjZXB0CitBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fQ01ELCBBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVF9DTUQgYW5kCitBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlRfQ01EIHRoZSBpb2N0bGZkIGlzIHZhbGlkYXRlZCBhbmQgaWYgaXQgaXMKK25vdCBhIHZhbGlkIGRlc2NyaXB0b3Igb3IgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFuIGF1dG9mcyBtb3VudCBwb2ludAorYW4gZXJyb3Igb2YgLUVCQURGLCAtRU5PVFRZIG9yIC1FSU5WQUwgKG5vdCBhbiBhdXRvZnMgZGVzY3JpcHRvcikgaXMKK3JldHVybmVkLgorCisKK1RoZSBpb2N0bHMKKz09PT09PT09PT0KKworQW4gZXhhbXBsZSBvZiBhbiBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIHRoaXMgaW50ZXJmYWNlIGNhbiBiZSBzZWVuCitpbiBhdXRvZnMgdmVyc2lvbiA1LjAuNCBhbmQgbGF0ZXIgaW4gZmlsZSBsaWIvZGV2LWlvY3RsLWxpYi5jIG9mIHRoZQorZGlzdHJpYnV0aW9uIHRhciBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20ga2VybmVsLm9yZyBpbiBkaXJlY3RvcnkKKy9wdWIvbGludXgvZGFlbW9ucy9hdXRvZnMvdjUuCisKK1RoZSBkZXZpY2Ugbm9kZSBpb2N0bCBvcGVyYXRpb25zIGltcGxlbWVudGVkIGJ5IHRoaXMgaW50ZXJmYWNlIGFyZToKKworCitBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZXQgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIHRoZSBhdXRvZnM0IGRldmljZSBpb2N0bCBrZXJuZWwgbW9kdWxlCitpbXBsZW1lbnRhdGlvbi4gSXQgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgYXMgYW4KK2lucHV0IHBhcmFtZXRlciBhbmQgc2V0cyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFzc2VkIGluIHN0cnVjdHVyZS4KK0l0IHJldHVybnMgMCBvbiBzdWNjZXNzIG9yIHRoZSBlcnJvciAtRUlOVkFMIGlmIGEgdmVyc2lvbiBtaXNtYXRjaCBpcworZGV0ZWN0ZWQuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1ZFUl9DTUQgYW5kIEFVVE9GU19ERVZfSU9DVExfUFJPVE9TVUJWRVJfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2V0IHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBvZiB0aGUgYXV0b2ZzNCBwcm90b2NvbCB2ZXJzaW9uIHVuZGVyc3Rvb2QKK2J5IGxvYWRlZCBtb2R1bGUuIFRoaXMgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bAord2l0aCB0aGUgaW9jdGxmZCBmaWVsZCBzZXQgdG8gYSB2YWxpZCBhdXRvZnMgbW91bnQgcG9pbnQgZGVzY3JpcHRvcgorYW5kIHNldHMgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIG51bWJlciBpbiBzdHJ1Y3R1cmUgZmllbGQgYXJnMS4gVGhlc2UKK2NvbW1hbmRzIHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpZgordmFsaWRhdGlvbiBmYWlscy4KKworCitBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVCBhbmQgQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09idGFpbiBhbmQgcmVsZWFzZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYW4gYXV0b2ZzIG1hbmFnZWQgbW91bnQgcG9pbnQKK3BhdGguIFRoZSBvcGVuIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aAordGhlIHRoZSBwYXRoIGZpZWxkIHNldCBhbmQgdGhlIHNpemUgZmllbGQgYWRqdXN0ZWQgYXBwcm9wcmlhdGVseSBhcyB3ZWxsCithcyB0aGUgYXJnMSBmaWVsZCBzZXQgdG8gdGhlIGRldmljZSBudW1iZXIgb2YgdGhlIGF1dG9mcyBtb3VudC4gVGhlCitkZXZpY2UgbnVtYmVyIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBtb3VudCBvcHRpb25zIHNob3duIGluCisvcHJvYy9tb3VudHMuIFRoZSBjbG9zZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdAorYXV0b2ZzX2Rldl9pb2N0IHdpdGggdGhlIGlvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkCitmcm9tIHRoZSBvcGVuIGNhbGwuIFRoZSByZWxlYXNlIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2FuIGFsc28gYmUgZG9uZQord2l0aCBjbG9zZSgyKSBzbyBhbnkgb3BlbiBkZXNjcmlwdG9ycyB3aWxsIGFsc28gYmUgY2xvc2VkIGF0IHByb2Nlc3MgZXhpdC4KK1RoZSBjbG9zZSBjYWxsIGlzIGluY2x1ZGVkIGluIHRoZSBpbXBsZW1lbnRlZCBvcGVyYXRpb25zIGxhcmdlbHkgZm9yCitjb21wbGV0ZW5lc3MgYW5kIHRvIHByb3ZpZGUgZm9yIGEgY29uc2lzdGVudCB1c2VyIHNwYWNlIGltcGxlbWVudGF0aW9uLgorCisKK0FVVE9GU19ERVZfSU9DVExfUkVBRFlfQ01EIGFuZCBBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXR1cm4gbW91bnQgYW5kIGV4cGlyZSByZXN1bHQgc3RhdHVzIGZyb20gdXNlciBzcGFjZSB0byB0aGUga2VybmVsLgorQm90aCBvZiB0aGVzZSBjYWxscyByZXF1aXJlIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsCit3aXRoIHRoZSBpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuCitjYWxsIGFuZCB0aGUgYXJnMSBmaWVsZCBzZXQgdG8gdGhlIHdhaXQgcXVldWUgdG9rZW4gbnVtYmVyLCByZWNlaXZlZAorYnkgdXNlciBzcGFjZSBpbiB0aGUgZm9yZWdvaW5nIG1vdW50IG9yIGV4cGlyZSByZXF1ZXN0LiBUaGUgYXJnMiBmaWVsZAoraXMgc2V0IHRvIHRoZSBzdGF0dXMgdG8gYmUgcmV0dXJuZWQuIEZvciB0aGUgcmVhZHkgY2FsbCB0aGlzIGlzIGFsd2F5cworMCBhbmQgZm9yIHRoZSBmYWlsIGNhbGwgaXQgaXMgc2V0IHRvIHRoZSBlcnJubyBvZiB0aGUgb3BlcmF0aW9uLgorCisKK0FVVE9GU19ERVZfSU9DVExfU0VUUElQRUZEX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldCB0aGUgcGlwZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBmb3Iga2VybmVsIGNvbW11bmljYXRpb24gdG8gdGhlIGRhZW1vbi4KK05vcm1hbGx5IHRoaXMgaXMgc2V0IGF0IG1vdW50IHRpbWUgdXNpbmcgYW4gb3B0aW9uIGJ1dCB3aGVuIHJlY29ubmVjdGluZwordG8gYSBleGlzdGluZyBtb3VudCB3ZSBuZWVkIHRvIHVzZSB0aGlzIHRvIHRlbGwgdGhlIGF1dG9mcyBtb3VudCBhYm91dAordGhlIG5ldyBrZXJuZWwgcGlwZSBkZXNjcmlwdG9yLiBJbiBvcmRlciB0byBwcm90ZWN0IG1vdW50cyBhZ2FpbnN0CitpbmNvcnJlY3RseSBzZXR0aW5nIHRoZSBwaXBlIGRlc2NyaXB0b3Igd2UgYWxzbyByZXF1aXJlIHRoYXQgdGhlIGF1dG9mcworbW91bnQgYmUgY2F0YXRvbmljIChzZWUgbmV4dCBjYWxsKS4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKK2lvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbCBhbmQKK3RoZSBhcmcxIGZpZWxkIHNldCB0byBkZXNjcmlwdG9yIG9mIHRoZSBwaXBlLiBPbiBzdWNjZXNzIHRoZSBjYWxsCithbHNvIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgaWQgdXNlZCB0byBpZGVudGlmeSB0aGUgY29udHJvbGxpbmcgcHJvY2VzcworKGVnLiB0aGUgb3duaW5nIGF1dG9tb3VudCg4KSBkYWVtb24pIHRvIHRoZSBwcm9jZXNzIGdyb3VwIG9mIHRoZSBjYWxsZXIuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFrZSB0aGUgYXV0b2ZzIG1vdW50IHBvaW50IGNhdGF0b25pYy4gVGhlIGF1dG9mcyBtb3VudCB3aWxsIG5vIGxvbmdlcgoraXNzdWUgbW91bnQgcmVxdWVzdHMsIHRoZSBrZXJuZWwgY29tbXVuaWNhdGlvbiBwaXBlIGRlc2NyaXB0b3IgaXMgcmVsZWFzZWQKK2FuZCBhbnkgcmVtYWluaW5nIHdhaXRzIGluIHRoZSBxdWV1ZSByZWxlYXNlZC4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKK2lvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbC4KKworCitBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVRfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldCB0aGUgZXhwaXJlIHRpbWVvdXQgZm9yIG1vdW50cyB3aXRoaW5nIGFuIGF1dG9mcyBtb3VudCBwb2ludC4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKK2lvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbC4KKworCitBVVRPRlNfREVWX0lPQ1RMX1JFUVVFU1RFUl9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXR1cm4gdGhlIHVpZCBhbmQgZ2lkIG9mIHRoZSBsYXN0IHByb2Nlc3MgdG8gc3VjY2Vzc2Z1bGx5IHRyaWdnZXIgYSB0aGUKK21vdW50IG9uIHRoZSBnaXZlbiBwYXRoIGRlbnRyeS4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUgcGF0aAorZmllbGQgc2V0IHRvIHRoZSBtb3VudCBwb2ludCBpbiBxdWVzdGlvbiBhbmQgdGhlIHNpemUgZmllbGQgYWRqdXN0ZWQKK2FwcHJvcHJpYXRlbHkgYXMgd2VsbCBhcyB0aGUgYXJnMSBmaWVsZCBzZXQgdG8gdGhlIGRldmljZSBudW1iZXIgb2YgdGhlCitjb250YWluaW5nIGF1dG9mcyBtb3VudC4gVXBvbiByZXR1cm4gdGhlIHN0cnVjdCBmaWVsZCBhcmcxIGNvbnRhaW5zIHRoZQordWlkIGFuZCBhcmcyIHRoZSBnaWQuCisKK1doZW4gcmVjb25zdHJ1Y3RpbmcgYW4gYXV0b2ZzIG1vdW50IHRyZWUgd2l0aCBhY3RpdmUgbW91bnRzIHdlIG5lZWQgdG8KK3JlLWNvbm5lY3QgdG8gbW91bnRzIHRoYXQgbWF5IGhhdmUgdXNlZCB0aGUgb3JpZ2luYWwgcHJvY2VzcyB1aWQgYW5kCitnaWQgKG9yIHN0cmluZyB2YXJpYXRpb25zIG9mIHRoZW0pIGZvciBtb3VudCBsb29rdXBzIHdpdGhpbiB0aGUgbWFwIGVudHJ5LgorVGhpcyBjYWxsIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG9idGFpbiB0aGlzIHVpZCBhbmQgZ2lkIHNvIHRoZXkgbWF5IGJlCit1c2VkIGJ5IHVzZXIgc3BhY2UgZm9yIHRoZSBtb3VudCBtYXAgbG9va3Vwcy4KKworCitBVVRPRlNfREVWX0lPQ1RMX0VYUElSRV9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJc3N1ZSBhbiBleHBpcmUgcmVxdWVzdCB0byB0aGUga2VybmVsIGZvciBhbiBhdXRvZnMgbW91bnQuIFR5cGljYWxseQordGhpcyBpb2N0bCBpcyBjYWxsZWQgdW50aWwgbm8gZnVydGhlciBleHBpcmUgY2FuZGlkYXRlcyBhcmUgZm91bmQuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCitpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwuIEluCithZGRpdGlvbiBhbiBpbW1lZGlhdGUgZXhwaXJlLCBpbmRlcGVuZGVudCBvZiB0aGUgbW91bnQgdGltZW91dCwgY2FuIGJlCityZXF1ZXN0ZWQgYnkgc2V0dGluZyB0aGUgYXJnMSBmaWVsZCB0byAxLiBJZiBubyBleHBpcmUgY2FuZGlkYXRlcyBjYW4KK2JlIGZvdW5kIHRoZSBpb2N0bCByZXR1cm5zIC0xIHdpdGggZXJybm8gc2V0IHRvIEVBR0FJTi4KKworVGhpcyBjYWxsIGNhdXNlcyB0aGUga2VybmVsIG1vZHVsZSB0byBjaGVjayB0aGUgbW91bnQgY29ycmVzcG9uZGluZwordG8gdGhlIGdpdmVuIGlvY3RsZmQgZm9yIG1vdW50cyB0aGF0IGNhbiBiZSBleHBpcmVkLCBpc3N1ZXMgYW4gZXhwaXJlCityZXF1ZXN0IGJhY2sgdG8gdGhlIGRhZW1vbiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCisKK0FVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNrcyBpZiBhbiBhdXRvZnMgbW91bnQgcG9pbnQgaXMgaW4gdXNlLgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZQoraW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbiBjYWxsIGFuZAoraXQgcmV0dXJucyB0aGUgcmVzdWx0IGluIHRoZSBhcmcxIGZpZWxkLCAxIGZvciBidXN5IGFuZCAwIG90aGVyd2lzZS4KKworCitBVVRPRlNfREVWX0lPQ1RMX0lTTU9VTlRQT0lOVF9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIG1vdW50cG9pbnQuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsLiBUaGVyZSBhcmUgdHdvCitwb3NzaWJsZSB2YXJpYXRpb25zLiBCb3RoIHVzZSB0aGUgcGF0aCBmaWVsZCBzZXQgdG8gdGhlIHBhdGggb2YgdGhlIG1vdW50Citwb2ludCB0byBjaGVjayBhbmQgdGhlIHNpemUgZmllbGQgYWRqdXN0ZWQgYXBwcm9wcmlhdGVseS4gT25lIHVzZXMgdGhlCitpb2N0bGZkIGZpZWxkIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgbW91bnQgcG9pbnQgdG8gY2hlY2sgd2hpbGUgdGhlIG90aGVyCit2YXJpYXRpb24gdXNlcyB0aGUgcGF0aCBhbmQgb3B0aW9uYWx5IGFyZzEgc2V0IHRvIGFuIGF1dG9mcyBtb3VudCB0eXBlLgorVGhlIGNhbGwgcmV0dXJucyAxIGlmIHRoaXMgaXMgYSBtb3VudCBwb2ludCBhbmQgc2V0cyBhcmcxIHRvIHRoZSBkZXZpY2UKK251bWJlciBvZiB0aGUgbW91bnQgYW5kIGZpZWxkIGFyZzIgdG8gdGhlIHJlbGV2YW50IHN1cGVyIGJsb2NrIG1hZ2ljCitudW1iZXIgKGRlc2NyaWJlZCBiZWxvdykgb3IgMCBpZiBpdCBpc24ndCBhIG1vdW50cG9pbnQuIEluIGJvdGggY2FzZXMKK3RoZSB0aGUgZGV2aWNlIG51bWJlciAoYXMgcmV0dXJuZWQgYnkgbmV3X2VuY29kZV9kZXYoKSkgaXMgcmV0dXJuZWQKK2luIGZpZWxkIGFyZzEuCisKK0lmIHN1cHBsaWVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3Igd2UncmUgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBtb3VudCwKK25vdCBuZWNlc3NhcmlseSBhdCB0aGUgdG9wIG9mIHRoZSBtb3VudGVkIHN0YWNrLiBJbiB0aGlzIGNhc2UgdGhlIHBhdGgKK3RoZSBkZXNjcmlwdG9yIGNvcnJlc3BvbmRzIHRvIGlzIGNvbnNpZGVyZWQgYSBtb3VudHBvaW50IGlmIGl0IGlzIGl0c2VsZgorYSBtb3VudHBvaW50IG9yIGNvbnRhaW5zIGEgbW91bnQsIHN1Y2ggYXMgYSBtdWx0aS1tb3VudCB3aXRob3V0IGEgcm9vdAorbW91bnQuIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gMSBpZiB0aGUgZGVzY3JpcHRvciBjb3JyZXNwb25kcyB0byBhIG1vdW50Citwb2ludCBhbmQgYW5kIGFsc28gcmV0dXJucyB0aGUgc3VwZXIgbWFnaWMgb2YgdGhlIGNvdmVyaW5nIG1vdW50IGlmIHRoZXJlCitpcyBvbmUgb3IgMCBpZiBpdCBpc24ndCBhIG1vdW50cG9pbnQuCisKK0lmIGEgcGF0aCBpcyBzdXBwbGllZCAoYW5kIHRoZSBpb2N0bGZkIGZpZWxkIGlzIHNldCB0byAtMSkgdGhlbiB0aGUgcGF0aAoraXMgbG9va2VkIHVwIGFuZCBpcyBjaGVja2VkIHRvIHNlZSBpZiBpdCBpcyB0aGUgcm9vdCBvZiBhIG1vdW50LiBJZiBhCit0eXBlIGlzIGFsc28gZ2l2ZW4gd2UgYXJlIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciBhdXRvZnMgbW91bnQgYW5kIGlmCithIG1hdGNoIGlzbid0IGZvdW5kIGEgZmFpbCBpcyByZXR1cm5lZC4gSWYgdGhlIHRoZSBsb2NhdGVkIHBhdGggaXMgdGhlCityb290IG9mIGEgbW91bnQgMSBpcyByZXR1cm5lZCBhbG9uZyB3aXRoIHRoZSBzdXBlciBtYWdpYyBvZiB0aGUgbW91bnQKK29yIDAgb3RoZXJ3aXNlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCBiNDVmM2MxYi4uOWRkMmEzYmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtOTYsNiArOTYsMTEgQEAKIGVycm9ycz1jb250aW51ZQkJS2VlcCBnb2luZyBvbiBhIGZpbGVzeXN0ZW0gZXJyb3IuCiBlcnJvcnM9cGFuaWMJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KIAorZGF0YV9lcnI9aWdub3JlKCopCUp1c3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMKKwkJCWluIGEgZmlsZSBkYXRhIGJ1ZmZlciBpbiBvcmRlcmVkIG1vZGUuCitkYXRhX2Vycj1hYm9ydAkJQWJvcnQgdGhlIGpvdXJuYWwgaWYgYW4gZXJyb3Igb2NjdXJzIGluIGEgZmlsZQorCQkJZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorCiBncnBpZAkJCUdpdmUgb2JqZWN0cyB0aGUgc2FtZSBncm91cCBJRCBhcyB0aGVpciBjcmVhdG9yLgogYnNkZ3JvdXBzCiAKQEAgLTE5Myw2ICsxOTgsNSBAQAogcHJvZ3JhbXM6IAlodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KIAkJaHR0cDovL2V4dDJyZXNpemUuc291cmNlZm9yZ2UubmV0CiAKLXVzZWZ1bCBsaW5rczoJaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L2V4dDMvZXh0My11c2FnZS5odG1sCi0JCWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KK3VzZWZ1bCBsaW5rczoJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM3LwogCQlodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1mczgvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCBlYjE1NGVmLi4xNzRlYWZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTIsMTkgKzIsMjQgQEAKIEV4dDQgRmlsZXN5c3RlbQogPT09PT09PT09PT09PT09CiAKLVRoaXMgaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGFuIGFkdmFuY2VkIGxldmVsCi1vZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcyBzY2FsYWJpbGl0eSBhbmQgcmVsaWFiaWxpdHkKLWVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcyAoNjQgYml0KSBpbiBrZWVwaW5nIHdpdGgKLWluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0IGZlYXR1cmUgcmVxdWlyZW1lbnRzLgorRXh0NCBpcyBhbiBhbiBhZHZhbmNlZCBsZXZlbCBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtIHdoaWNoIGluY29ycG9yYXRlcworc2NhbGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IGVuaGFuY2VtZW50cyBmb3Igc3VwcG9ydGluZyBsYXJnZSBmaWxlc3lzdGVtcworKDY0IGJpdCkgaW4ga2VlcGluZyB3aXRoIGluY3JlYXNpbmcgZGlzayBjYXBhY2l0aWVzIGFuZCBzdGF0ZS1vZi10aGUtYXJ0CitmZWF0dXJlIHJlcXVpcmVtZW50cy4KIAotTWFpbGluZyBsaXN0OiBsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworTWFpbGluZyBsaXN0OglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZworV2ViIHNpdGU6CWh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZwogCiAKIDEuIFF1aWNrIHVzYWdlIGluc3RydWN0aW9uczoKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitOb3RlOiBNb3JlIGV4dGVuc2l2ZSBpbmZvcm1hdGlvbiBmb3IgZ2V0dGluZyBzdGFydGVkIHdpdGggZXh0NCBjYW4gYmUKKyAgICAgIGZvdW5kIGF0IHRoZSBleHQ0IHdpa2kgc2l0ZSBhdCB0aGUgVVJMOgorICAgICAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9FeHQ0X0hvd3RvCisKICAgLSBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlMmZzcHJvZ3MgKGFzIG9mIHRoaXMKLSAgICB3cml0aW5nIHZlcnNpb24gMS40MSkgZnJvbToKKyAgICB3cml0aW5nIHZlcnNpb24gMS40MS4zKSBmcm9tOgogCiAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MjQwNgogCQpAQCAtMzYsMTEgKzQxLDkgQEAKIAogICAgIAkjIG1rZTJmcyAtdCBleHQ0IC9kZXYvaGRhMQogCi0gICAgT3IgY29uZmlndXJlIGFuIGV4aXN0aW5nIGV4dDMgZmlsZXN5c3RlbSB0byBzdXBwb3J0IGV4dGVudHMgYW5kIHNldAotICAgIHRoZSB0ZXN0X2ZzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIG9rIGZvciBhbiBpbi1kZXZlbG9wbWVudAotICAgIGZpbGVzeXN0ZW0gdG8gdG91Y2ggdGhpcyBmaWxlc3lzdGVtOgorICAgIE9yIHRvIGNvbmZpZ3VyZSBhbiBleGlzdGluZyBleHQzIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydCBleHRlbnRzOiAKIAotCSMgdHVuZTJmcyAtTyBleHRlbnRzIC1FIHRlc3RfZnMgL2Rldi9oZGExCisJIyB0dW5lMmZzIC1PIGV4dGVudHMgL2Rldi9oZGExCiAKICAgICBJZiB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCB3aXRoIDEyOCBieXRlIGlub2RlcywgaXQgY2FuIGJlCiAgICAgY29udmVydGVkIHRvIHVzZSAyNTYgYnl0ZSBmb3IgZ3JlYXRlciBlZmZpY2llbmN5IHZpYToKQEAgLTEwNCw4ICsxMDcsOCBAQAogVGhlIGJpZyBwZXJmb3JtYW5jZSB3aW4gd2lsbCBjb21lIHdpdGggbWJhbGxvYywgZGVsYWxsb2MgYW5kIGZsZXhfYmcKIGdyb3VwaW5nIG9mIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcy4gIFNvbWUgdGVzdCByZXN1bHRzIGF2YWlsYWJsZSBoZXJlOgogCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2Itd3JpdGUtMi42LjI2LXJjMi5odG1sCi0gLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwNTMwL2Zmc2ItcmVhZHdyaXRlLTIuNi4yNi1yYzIuaHRtbAorIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDgxOC1mZnNiL2Zmc2Itd3JpdGUtMi42LjI3LXJjMS5odG1sCisgLSBodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9leHQ0LzIwMDgwODE4LWZmc2IvZmZzYi1yZWFkd3JpdGUtMi42LjI3LXJjMS5odG1sCiAKIDMuIE9wdGlvbnMKID09PT09PT09PT0KQEAgLTIxNCw5ICsyMTcsNiBAQAogYnNkZGYJCSgqKQlNYWtlICdkZicgYWN0IGxpa2UgQlNELgogbWluaXhkZgkJCU1ha2UgJ2RmJyBhY3QgbGlrZSBNaW5peC4KIAotY2hlY2s9bm9uZQkJRG9uJ3QgZG8gZXh0cmEgY2hlY2tpbmcgb2YgYml0bWFwcyBvbiBtb3VudC4KLW5vY2hlY2sKLQogZGVidWcJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byBzeXNsb2cuCiAKIGVycm9ycz1yZW1vdW50LXJvKCopCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgpAQCAtMjUzLDggKzI1Myw2IEBACiAJCQkibm9iaCIgb3B0aW9uIHRyaWVzIHRvIGF2b2lkIGFzc29jaWF0aW5nIGJ1ZmZlcgogCQkJaGVhZHMgKHN1cHBvcnRlZCBvbmx5IGZvciAid3JpdGViYWNrIiBtb2RlKS4KIAotbWJhbGxvYwkJKCopCVVzZSB0aGUgbXVsdGlwbGUgYmxvY2sgYWxsb2NhdG9yIGZvciBibG9jayBhbGxvY2F0aW9uCi1ub21iYWxsb2MJCWRpc2FibGVkIG11bHRpcGxlIGJsb2NrIGFsbG9jYXRvciBmb3IgYmxvY2sgYWxsb2NhdGlvbi4KIHN0cmlwZT1uCQlOdW1iZXIgb2YgZmlsZXN5c3RlbSBibG9ja3MgdGhhdCBtYmFsbG9jIHdpbGwgdHJ5CiAJCQl0byB1c2UgZm9yIGFsbG9jYXRpb24gc2l6ZSBhbmQgYWxpZ25tZW50LiBGb3IgUkFJRDUvNgogCQkJc3lzdGVtcyB0aGlzIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0CmluZGV4IDMxYjMyOTEuLjY4YmFkZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dApAQCAtMTY5LDcgKzE2OSw3IEBACiAzLjEpICBCb290aW5nIGZyb20gYSBmbG9wcHkgdXNpbmcgc3lzbGludXgKIAogCVdoZW4gYnVpbGRpbmcga2VybmVscywgYW4gZWFzeSB3YXkgdG8gY3JlYXRlIGEgYm9vdCBmbG9wcHkgdGhhdCB1c2VzCi0Jc3lzbGludXggaXMgdG8gdXNlIHRoZSB6ZGlzayBvciBiemRpc2sgbWFrZSB0YXJnZXRzIHdoaWNoIHVzZQorCXN5c2xpbnV4IGlzIHRvIHVzZSB0aGUgemRpc2sgb3IgYnpkaXNrIG1ha2UgdGFyZ2V0cyB3aGljaCB1c2UgemltYWdlCiAgICAgICAJYW5kIGJ6aW1hZ2UgaW1hZ2VzIHJlc3BlY3RpdmVseS4gQm90aCB0YXJnZXRzIGFjY2VwdCB0aGUKICAgICAgCUZEQVJHUyBwYXJhbWV0ZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNDg4ZWRhLi5iY2NlYjk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTEzMjEsNiArMTMyMSwxOCBAQAogTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgogSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KIAorcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgTGludXggYmVoYXZpb3VyIG9uIGFuIE5NSSBvZiBlaXRoZXIgbWVtb3J5IG9yIHVua25vd24gaXMgdG8gY29udGludWUKK29wZXJhdGlvbi4gRm9yIG1hbnkgZW52aXJvbm1lbnRzIHN1Y2ggYXMgc2NpZW50aWZpYyBjb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZQordGhhdCB0aGUgYm94IGlzIHRha2VuIG91dCBhbmQgdGhlIGVycm9yIGRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZAorcGFyaXR5L0VDQyBlcnJvciBnZXQgcHJvcG9nYXRlZC4KKworQSBzbWFsbCBudW1iZXIgb2Ygc3lzdGVtcyBkbyBnZW5lcmF0ZSBOTUkncyBmb3IgYml6YXJyZSByYW5kb20gcmVhc29ucyBzdWNoIGFzCitwb3dlciBtYW5hZ2VtZW50IHNvIHRoZSBkZWZhdWx0IGlzIG9mZi4gVGhhdCBzeXNjdGwgd29ya3MgbGlrZSB0aGUgZXhpc3RpbmcKK3BhbmljIGNvbnRyb2xzIGFscmVhZHkgaW4gdGhhdCBkaXJlY3RvcnkuCisKIG5taV93YXRjaGRvZwogLS0tLS0tLS0tLS0tCiAKQEAgLTEzNzIsMTUgKzEzODQsMTggQEAKIGRpcnR5X2JhY2tncm91bmRfcmF0aW8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBzeXN0ZW0gbWVtb3J5LCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF0IHdoaWNoCi10aGUgcGRmbHVzaCBiYWNrZ3JvdW5kIHdyaXRlYmFjayBkYWVtb24gd2lsbCBzdGFydCB3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgorQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGlydHlhYmxlIHN5c3RlbSBtZW1vcnkgKGZyZWUgcGFnZXMgKyBtYXBwZWQKK3BhZ2VzICsgZmlsZSBjYWNoZSwgbm90IGluY2x1ZGluZyBsb2NrZWQgcGFnZXMgYW5kIEh1Z2VQYWdlcyksIHRoZSBudW1iZXIgb2YKK3BhZ2VzIGF0IHdoaWNoIHRoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0CitkaXJ0eSBkYXRhLgogCiBkaXJ0eV9yYXRpbwogLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCBzeXN0ZW0gbWVtb3J5LCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF0IHdoaWNoCi1hIHByb2Nlc3Mgd2hpY2ggaXMgZ2VuZXJhdGluZyBkaXNrIHdyaXRlcyB3aWxsIGl0c2VsZiBzdGFydCB3cml0aW5nIG91dCBkaXJ0eQotZGF0YS4KK0NvbnRhaW5zLCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGRpcnR5YWJsZSBzeXN0ZW0gbWVtb3J5IChmcmVlIHBhZ2VzICsgbWFwcGVkCitwYWdlcyArIGZpbGUgY2FjaGUsIG5vdCBpbmNsdWRpbmcgbG9ja2VkIHBhZ2VzIGFuZCBIdWdlUGFnZXMpLCB0aGUgbnVtYmVyIG9mCitwYWdlcyBhdCB3aGljaCBhIHByb2Nlc3Mgd2hpY2ggaXMgZ2VuZXJhdGluZyBkaXNrIHdyaXRlcyB3aWxsIGl0c2VsZiBzdGFydAord3JpdGluZyBvdXQgZGlydHkgZGF0YS4KIAogZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjQwMCwyNCArMjQxNSwyOSBAQAogb2YgbWVtb3J5IHR5cGVzLiBJZiBhIGJpdCBvZiB0aGUgYml0bWFzayBpcyBzZXQsIG1lbW9yeSBzZWdtZW50cyBvZiB0aGUKIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHR5cGUgYXJlIGR1bXBlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBkdW1wZWQuCiAKLVRoZSBmb2xsb3dpbmcgNCBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKK1RoZSBmb2xsb3dpbmcgNyBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAgLSAoYml0IDApIGFub255bW91cyBwcml2YXRlIG1lbW9yeQogICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDIpIGZpbGUtYmFja2VkIHByaXZhdGUgbWVtb3J5CiAgIC0gKGJpdCAzKSBmaWxlLWJhY2tlZCBzaGFyZWQgbWVtb3J5CiAgIC0gKGJpdCA0KSBFTEYgaGVhZGVyIHBhZ2VzIGluIGZpbGUtYmFja2VkIHByaXZhdGUgbWVtb3J5IGFyZWFzIChpdCBpcwogICAgICAgICAgICAgZWZmZWN0aXZlIG9ubHkgaWYgdGhlIGJpdCAyIGlzIGNsZWFyZWQpCisgIC0gKGJpdCA1KSBodWdldGxiIHByaXZhdGUgbWVtb3J5CisgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnkKIAogICBOb3RlIHRoYXQgTU1JTyBwYWdlcyBzdWNoIGFzIGZyYW1lIGJ1ZmZlciBhcmUgbmV2ZXIgZHVtcGVkIGFuZCB2RFNPIHBhZ2VzCiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLgogCi1EZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKLXNlZ21lbnRzIGFyZSBkdW1wZWQuCisgIE5vdGUgYml0IDAtNCBkb2Vzbid0IGVmZmVjdCBhbnkgaHVnZXRsYiBtZW1vcnkuIGh1Z2V0bGIgbWVtb3J5IGFyZSBvbmx5CisgIGVmZmVjdGVkIGJ5IGJpdCA1LTYuCisKK0RlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MjM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKK3NlZ21lbnRzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuCiAKIElmIHlvdSBkb24ndCB3YW50IHRvIGR1bXAgYWxsIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXR0YWNoZWQgdG8gcGlkIDEyMzQsCi13cml0ZSAxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlLgord3JpdGUgMHgyMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZS4KIAotICAkIGVjaG8gMHgxID4gL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXIKKyAgJCBlY2hvIDB4MjEgPiAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgogCiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzCiBwYXJlbnQuIEl0IGlzIHVzZWZ1bCB0byBzZXQgdXAgY29yZWR1bXBfZmlsdGVyIGJlZm9yZSB0aGUgcHJvZ3JhbSBydW5zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yYW1mcy1yb290ZnMtaW5pdHJhbWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmFtZnMtcm9vdGZzLWluaXRyYW1mcy50eHQKaW5kZXggN2JlMjMyYi4uNjJmZTliMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yYW1mcy1yb290ZnMtaW5pdHJhbWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JhbWZzLXJvb3Rmcy1pbml0cmFtZnMudHh0CkBAIC0yNjMsNyArMjYzLDcgQEAKICAgICBzbGVlcCg5OTk5OTk5OTkpOwogICB9CiAgIEVPRgotICBnY2MgLXN0YXRpYyBoZWxsbzIuYyAtbyBpbml0CisgIGdjYyAtc3RhdGljIGhlbGxvLmMgLW8gaW5pdAogICBlY2hvIGluaXQgfCBjcGlvIC1vIC1IIG5ld2MgfCBnemlwID4gdGVzdC5jcGlvLmd6CiAgICMgVGVzdGluZyBleHRlcm5hbCBpbml0cmFtZnMgdXNpbmcgdGhlIGluaXRyZCBsb2FkaW5nIG1lY2hhbmlzbS4KICAgcWVtdSAta2VybmVsIC9ib290L3ZtbGludXogLWluaXRyZCB0ZXN0LmNwaW8uZ3ogL2Rldi96ZXJvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ViaWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CmluZGV4IDZhMGQ3MGEuLmRkODRlYTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0CkBAIC04Niw2ICs4NiwxNSBAQAogZmFzdF91bm1vdW50CQlkbyBub3QgY29tbWl0IG9uIHVubW91bnQ7IHRoaXMgb3B0aW9uIG1ha2VzCiAJCQl1bm1vdW50IGZhc3RlciwgYnV0IHRoZSBuZXh0IG1vdW50IHNsb3dlcgogCQkJYmVjYXVzZSBvZiB0aGUgbmVlZCB0byByZXBsYXkgdGhlIGpvdXJuYWwuCitidWxrX3JlYWQJCXJlYWQgbW9yZSBpbiBvbmUgZ28gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgZmxhc2gKKwkJCW1lZGlhIHRoYXQgcmVhZCBmYXN0ZXIgc2VxdWVudGlhbGx5Citub19idWxrX3JlYWQgKCopCWRvIG5vdCBidWxrLXJlYWQKK25vX2Noa19kYXRhX2NyYwkJc2tpcCBjaGVja2luZyBvZiBDUkNzIG9uIGRhdGEgbm9kZXMgaW4gb3JkZXIgdG8KKwkJCWltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgb3B0aW9uIG9ubHkKKwkJCWlmIHRoZSBmbGFzaCBtZWRpYSBpcyBoaWdobHkgcmVsaWFibGUuIFRoZSBlZmZlY3QKKwkJCW9mIHRoaXMgb3B0aW9uIGlzIHRoYXQgY29ycnVwdGlvbiBvZiB0aGUgY29udGVudHMKKwkJCW9mIGEgZmlsZSBjYW4gZ28gdW5ub3RpY2VkLgorY2hrX2RhdGFfY3JjICgqKQlkbyBub3Qgc2tpcCBjaGVja2luZyBDUkNzIG9uIGRhdGEgbm9kZXMKIAogCiBRdWljayB1c2FnZSBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IDE4MDIyZTIuLmIxYjk4ODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtMjQwLDYgKzI0MCwxMCBAQAogbmVlZGVkIHRvIG1hbmFnZSBhIHNpZ25hbCB0aGF0J3MgaW4gYWN0aXZlIHVzZS4gIFRoYXQgaXMsIHJlcXVlc3RpbmcgYQogR1BJTyBjYW4gc2VydmUgYXMgYSBraW5kIG9mIGxvY2suCiAKK1NvbWUgcGxhdGZvcm1zIG1heSBhbHNvIHVzZSBrbm93bGVkZ2UgYWJvdXQgd2hhdCBHUElPcyBhcmUgYWN0aXZlIGZvcgorcG93ZXIgbWFuYWdlbWVudCwgc3VjaCBhcyBieSBwb3dlcmluZyBkb3duIHVudXNlZCBjaGlwIHNlY3RvcnMgYW5kLCBtb3JlCitlYXNpbHksIGdhdGluZyBvZmYgdW51c2VkIGNsb2Nrcy4KKwogVGhlc2UgdHdvIGNhbGxzIGFyZSBvcHRpb25hbCBiZWNhdXNlIG5vdCBub3QgYWxsIGN1cnJlbnQgTGludXggcGxhdGZvcm1zCiBvZmZlciBzdWNoIGZ1bmN0aW9uYWxpdHkgaW4gdGhlaXIgR1BJTyBzdXBwb3J0OyBhIHZhbGlkIGltcGxlbWVudGF0aW9uCiBjb3VsZCByZXR1cm4gc3VjY2VzcyBmb3IgYWxsIGdwaW9fcmVxdWVzdCgpIGNhbGxzLiAgVW5saWtlIHRoZSBvdGhlciBjYWxscywKQEAgLTI2NCw3ICsyNjgsNyBAQAogCS8qIG1hcCBHUElPIG51bWJlcnMgdG8gSVJRIG51bWJlcnMgKi8KIAlpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7CiAKLQkvKiBtYXAgSVJRIG51bWJlcnMgdG8gR1BJTyBudW1iZXJzICovCisJLyogbWFwIElSUSBudW1iZXJzIHRvIEdQSU8gbnVtYmVycyAoYXZvaWQgdXNpbmcgdGhpcykgKi8KIAlpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKTsKIAogVGhvc2UgcmV0dXJuIGVpdGhlciB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgaW4gdGhlIG90aGVyIG5hbWVzcGFjZSwgb3IKQEAgLTI4NCw3ICsyODgsOCBAQAogCiBOb24tZXJyb3IgdmFsdWVzIHJldHVybmVkIGZyb20gaXJxX3RvX2dwaW8oKSB3b3VsZCBtb3N0IGNvbW1vbmx5IGJlIHVzZWQKIHdpdGggZ3Bpb19nZXRfdmFsdWUoKSwgZm9yIGV4YW1wbGUgdG8gaW5pdGlhbGl6ZSBvciB1cGRhdGUgZHJpdmVyIHN0YXRlCi13aGVuIHRoZSBJUlEgaXMgZWRnZS10cmlnZ2VyZWQuCit3aGVuIHRoZSBJUlEgaXMgZWRnZS10cmlnZ2VyZWQuICBOb3RlIHRoYXQgc29tZSBwbGF0Zm9ybXMgZG9uJ3Qgc3VwcG9ydAordGhpcyByZXZlcnNlIG1hcHBpbmcsIHNvIHlvdSBzaG91bGQgYXZvaWQgdXNpbmcgaXQuCiAKIAogRW11bGF0aW5nIE9wZW4gRHJhaW4gU2lnbmFscwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDcwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDEzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzAKQEAgLTAsMCArMSw3NiBAQAorS2VybmVsIGRyaXZlciBhZHQ3NDcwCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzAKKyAgICBQcmVmaXg6ICdhZHQ3NDcwJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyQywgMHgyRSwgMHgyRgorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCisKK0F1dGhvcjogRGFycmljayBKLiBXb25nCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFQ3NDcwIGNoaXAuICBUaGVyZSBtYXkKK2JlIG90aGVyIGNoaXBzIHRoYXQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgorCitUaGUgQURUNzQ3MCB1c2VzIHRoZSAyLXdpcmUgaW50ZXJmYWNlIGNvbXBhdGlibGUgd2l0aCB0aGUgU01CdXMgMi4wCitzcGVjaWZpY2F0aW9uLiBVc2luZyBhbiBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIgaXQgbWVhc3VyZXMgdXAgdG8gdGVuICgxMCkKK2V4dGVybmFsIHRlbXBlcmF0dXJlcy4gSXQgaGFzIGZvdXIgKDQpIDE2LWJpdCBjb3VudGVycyBmb3IgbWVhc3VyaW5nIGZhbiBzcGVlZC4KK1RoZXJlIGFyZSBmb3VyICg0KSBQV00gb3V0cHV0cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgZmFuIHNwZWVkLgorCitBIHNvcGhpc3RpY2F0ZWQgY29udHJvbCBzeXN0ZW0gZm9yIHRoZSBQV00gb3V0cHV0cyBpcyBkZXNpZ25lZCBpbnRvIHRoZSBBRFQ3NDcwCit0aGF0IGFsbG93cyBmYW4gc3BlZWQgdG8gYmUgYWRqdXN0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBhbnkgb2YgdGhlIHRlbgordGVtcGVyYXR1cmUgc2Vuc29ycy4gRWFjaCBQV00gb3V0cHV0IGlzIGluZGl2aWR1YWxseSBhZGp1c3RhYmxlIGFuZAorcHJvZ3JhbW1hYmxlLiBPbmNlIGNvbmZpZ3VyZWQsIHRoZSBBRFQ3NDcwIHdpbGwgYWRqdXN0IHRoZSBQV00gb3V0cHV0cyBpbgorcmVzcG9uc2UgdG8gdGhlIG1lYXN1cmVkIHRlbXBlcmF0dXJlcyB3aXRoIGZ1cnRoZXIgaG9zdCBpbnRlcnZlbnRpb24uICBUaGlzCitmZWF0dXJlIGNhbiBhbHNvIGJlIGRpc2FibGVkIGZvciBtYW51YWwgY29udHJvbCBvZiB0aGUgUFdNJ3MuCisKK0VhY2ggb2YgdGhlIG1lYXN1cmVkIGlucHV0cyAodGVtcGVyYXR1cmUsIGZhbiBzcGVlZCkgaGFzIGNvcnJlc3BvbmRpbmcgaGlnaC9sb3cKK2xpbWl0IHZhbHVlcy4gVGhlIEFEVDc0NzAgd2lsbCBzaWduYWwgYW4gQUxBUk0gaWYgYW55IG1lYXN1cmVkIHZhbHVlIGV4Y2VlZHMKK2VpdGhlciBsaW1pdC4KKworVGhlIEFEVDc0NzAgRE9FUyBOT1Qgc2FtcGxlIGFsbCBpbnB1dHMgY29udGludW91c2x5LiAgQSBzaW5nbGUgcGluIG9uIHRoZQorQURUNzQ3MCBpcyBjb25uZWN0ZWQgdG8gYSBtdWx0aXR1ZGUgb2YgdGhlcm1hbCBkaW9kZXMsIGJ1dCB0aGUgY2hpcCBtdXN0IGJlCitpbnN0cnVjdGVkIGV4cGxpY2l0bHkgdG8gcmVhZCB0aGUgbXVsdGl0dWRlIG9mIGRpb2Rlcy4gIElmIHlvdSB3YW50IHRvIHVzZQorYXV0b21hdGljIGZhbiBjb250cm9sIG1vZGUsIHlvdSBtdXN0IG1hbnVhbGx5IHJlYWQgYW55IG9mIHRoZSB0ZW1wZXJhdHVyZQorc2Vuc29ycyBvciB0aGUgZmFuIGNvbnRyb2wgYWxnb3JpdGhtIHdpbGwgbm90IHJ1bi4gIFRoZSBjaGlwIFdJTEwgTk9UIERPIFRISVMKK0FVVE9NQVRJQ0FMTFk7IHRoaXMgbXVzdCBiZSBkb25lIGZyb20gdXNlcnNwYWNlLiAgVGhpcyBtYXkgYmUgYSBidWcgaW4gdGhlIGNoaXAKK2Rlc2lnbiwgZ2l2ZW4gdGhhdCBtYW55IG90aGVyIEFEIGNoaXBzIHRha2UgY2FyZSBvZiB0aGlzLiAgVGhlIGRyaXZlciB3aWxsIG5vdAorcmVhZCB0aGUgcmVnaXN0ZXJzIG1vcmUgb2Z0ZW4gdGhhbiBvbmNlIGV2ZXJ5IDUgc2Vjb25kcy4gIEZ1cnRoZXIsCitjb25maWd1cmF0aW9uIGRhdGEgaXMgb25seSByZWFkIG9uY2UgcGVyIG1pbnV0ZS4KKworU3BlY2lhbCBGZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQURUNzQ3MCBoYXMgYSA4LWJpdCBBREMgYW5kIGlzIGNhcGFibGUgb2YgbWVhc3VyaW5nIHRlbXBlcmF0dXJlcyB3aXRoIDEKK2RlZ0MgcmVzb2x1dGlvbi4KKworVGhlIEFuYWxvZyBEZXZpY2VzIGRhdGFzaGVldCBpcyB2ZXJ5IGRldGFpbGVkIGFuZCBkZXNjcmliZXMgYSBwcm9jZWR1cmUgZm9yCitkZXRlcm1pbmluZyBhbiBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdXRvbWF0aWMgUFdNIGNvbnRyb2wuCisKK0NvbmZpZ3VyYXRpb24gTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVzaWRlcyBzdGFuZGFyZCBpbnRlcmZhY2VzIGRyaXZlciBhZGRzIHRoZSBmb2xsb3dpbmc6CisKKyogUFdNIENvbnRyb2wKKworKiBwd20jX2F1dG9fcG9pbnQxX3B3bSBhbmQgcHdtI19hdXRvX3BvaW50MV90ZW1wIGFuZAorKiBwd20jX2F1dG9fcG9pbnQyX3B3bSBhbmQgcHdtI19hdXRvX3BvaW50Ml90ZW1wIC0KKworcG9pbnQxOiBTZXQgdGhlIHB3bSBzcGVlZCBhdCBhIGxvd2VyIHRlbXBlcmF0dXJlIGJvdW5kLgorcG9pbnQyOiBTZXQgdGhlIHB3bSBzcGVlZCBhdCBhIGhpZ2hlciB0ZW1wZXJhdHVyZSBib3VuZC4KKworVGhlIEFEVDc0NzAgd2lsbCBzY2FsZSB0aGUgcHdtIGJldHdlZW4gdGhlIGxvd2VyIGFuZCBoaWdoZXIgcHdtIHNwZWVkIHdoZW4KK3RoZSB0ZW1wZXJhdHVyZSBpcyBiZXR3ZWVuIHRoZSB0d28gdGVtcGVyYXR1cmUgYm91bmRhcmllcy4gIFBXTSB2YWx1ZXMgcmFuZ2UKK2Zyb20gMCAob2ZmKSB0byAyNTUgKGZ1bGwgc3BlZWQpLiAgRmFuIHNwZWVkIHdpbGwgYmUgc2V0IHRvIG1heGltdW0gd2hlbiB0aGUKK3RlbXBlcmF0dXJlIHNlbnNvciBhc3NvY2lhdGVkIHdpdGggdGhlIFBXTSBjb250cm9sIGV4Y2VlZHMKK3B3bSNfYXV0b19wb2ludDJfdGVtcC4KKworTm90ZXMKKy0tLS0tCisKK0FzIHN0YXRlZCBhYm92ZSwgdGhlIHRlbXBlcmF0dXJlIGlucHV0cyBtdXN0IGJlIHJlYWQgcGVyaW9kaWNhbGx5IGZyb20KK3VzZXJzcGFjZSBpbiBvcmRlciBmb3IgdGhlIGF1dG9tYXRpYyBwd20gYWxnb3JpdGhtIHRvIHJ1bi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NyBiL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NwppbmRleCAzNDk2YjcwLi4wNDJjMDQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CkBAIC0xMzYsMTAgKzEzNiwxMCBAQAogVGhlIElUODd4eCBvbmx5IHVwZGF0ZXMgaXRzIHZhbHVlcyBlYWNoIDEuNSBzZWNvbmRzOyByZWFkaW5nIGl0IG1vcmUgb2Z0ZW4KIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwgcmV0dXJuICdvbGQnIHZhbHVlcy4KIAotVG8gY2hhbmdlIHNlbnNvciBOIHRvIGEgdGhlcm1pc3RvciwgJ2VjaG8gMiA+IHRlbXBOX3R5cGUnIHdoZXJlIE4gaXMgMSwgMiwKK1RvIGNoYW5nZSBzZW5zb3IgTiB0byBhIHRoZXJtaXN0b3IsICdlY2hvIDQgPiB0ZW1wTl90eXBlJyB3aGVyZSBOIGlzIDEsIDIsCiBvciAzLiBUbyBjaGFuZ2Ugc2Vuc29yIE4gdG8gYSB0aGVybWFsIGRpb2RlLCAnZWNobyAzID4gdGVtcE5fdHlwZScuCiBHaXZlIDAgZm9yIHVudXNlZCBzZW5zb3IuIEFueSBvdGhlciB2YWx1ZSBpcyBpbnZhbGlkLiBUbyBjb25maWd1cmUgdGhpcyBhdAotc3RhcnR1cCwgY29uc3VsdCBsbV9zZW5zb3JzJ3MgL2V0Yy9zZW5zb3JzLmNvbmYuICgyID0gdGhlcm1pc3RvcjsKK3N0YXJ0dXAsIGNvbnN1bHQgbG1fc2Vuc29ycydzIC9ldGMvc2Vuc29ycy5jb25mLiAoNCA9IHRoZXJtaXN0b3I7CiAzID0gdGhlcm1hbCBkaW9kZSkKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKaW5kZXggNmQ0MWRiNy4uNDAwNjIwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQpAQCAtMTYzLDE2ICsxNjMsNiBAQAogKiBwd20jX2F1dG9fcHdtX21pbiAtIHRoaXMgc3BlY2lmaWVzIHRoZSBQV00gdmFsdWUgZm9yIHRlbXAjX2F1dG9fdGVtcF9vZmYKICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZS4gKFBXTSB2YWx1ZSBmcm9tIDAgdG8gMjU1KQogCi0qIHB3bSNfYXV0b19wd21fZnJlcSAtIHNlbGVjdCBiYXNlIGZyZXF1ZW5jeSBvZiBQV00gb3V0cHV0LiBZb3UgY2FuIHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICBpbiByYW5nZSBvZiAxMC4wIHRvIDk0LjAgSHogaW4gLjEgSHogdW5pdHMuCi0JCSAgICAgICAoVmFsdWVzIDEwMCB0byA5NDApLgotCi1UaGUgcHdtI19hdXRvX3B3bV9mcmVxIGNhbiBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgOCB2YWx1ZXMuIFNldHRpbmcgdGhlCi1mcmVxdWVuY3kgdG8gYSB2YWx1ZSBub3Qgb24gdGhpcyBsaXN0LCB3aWxsIHJlc3VsdCBpbiB0aGUgbmV4dCBoaWdoZXIgZnJlcXVlbmN5Ci1iZWluZyBzZWxlY3RlZC4gVGhlIGFjdHVhbCBkZXZpY2UgZnJlcXVlbmN5IG1heSB2YXJ5IHNsaWdodGx5IGZyb20gdGhpcwotc3BlY2lmaWNhdGlvbiBhcyBkZXNpZ25lZCBieSB0aGUgbWFudWZhY3R1cmVyLiBDb25zdWx0IHRoZSBkYXRhc2hlZXQgZm9yIG1vcmUKLWRldGFpbHMuIChQV00gRnJlcXVlbmN5IHZhbHVlczogIDEwMCwgMTUwLCAyMzAsIDMwMCwgMzgwLCA0NzAsIDYyMCwgOTQwKQotCiAqIHB3bSNfYXV0b19wd21fbWluY3RsIC0gdGhpcyBmbGFncyBzZWxlY3RzIGZvciB0ZW1wI19hdXRvX3RlbXBfb2ZmIHRlbXBlcmF0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJhaGF2aW91ciBvZiBmYW5zLiBXcml0ZSAxIHRvIGxldCBmYW5zIHNwaW5uaW5nIGF0CiAJCQkgcHdtI19hdXRvX3B3bV9taW4gb3Igd3JpdGUgMCB0byBsZXQgdGhlbSBvZmYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcKaW5kZXggZWMyN2FhMS4uNmI0N2I2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NwpAQCAtNjUsMTEgKzY1LDEwIEBACiBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCiAKIFNvbWUgZnVuY3Rpb25zIHNoYXJlIHBpbnMsIHNvIG5vdCBhbGwgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgYXQgdGhlIHNhbWUKLXRpbWUuIFdoaWNoIGFyZSBkZXBlbmRzIG9uIHRoZSBoYXJkd2FyZSBzZXR1cC4gVGhpcyBkcml2ZXIgYXNzdW1lcyB0aGF0Ci10aGUgQklPUyBjb25maWd1cmVkIHRoZSBjaGlwIGNvcnJlY3RseS4gSW4gdGhhdCByZXNwZWN0LCBpdCBkaWZmZXJzIGZyb20KLXRoZSBvcmlnaW5hbCBkcml2ZXIgKGZyb20gbG1fc2Vuc29ycyBmb3IgTGludXggMi40KSwgd2hpY2ggd291bGQgZm9yY2UgdGhlCi1MTTg3IHRvIGFuIGFyYml0cmFyeSwgY29tcGlsZS10aW1lIGNob3NlbiBtb2RlLCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwKLWNoaXBzZXQgd2lyaW5nLgordGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBub3JtYWxseQorYXNzdW1lcyB0aGF0IGZpcm13YXJlIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBXaGVyZSB0aGlzIGlzIG5vdAordGhlIGNhc2UsIHBsYXRmb3JtIGNvZGUgbXVzdCBzZXQgdGhlIEkyQyBjbGllbnQncyBwbGF0Zm9ybV9kYXRhIHRvIHBvaW50Cit0byBhIHU4IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNoYW5uZWwgcmVnaXN0ZXIuCiAKIEZvciByZWZlcmVuY2UsIGhlcmUgaXMgdGhlIGxpc3Qgb2YgZXhjbHVzaXZlIGZ1bmN0aW9uczoKICAtIGluMCtpbjUgKGRlZmF1bHQpIG9yIHRlbXAzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKaW5kZXggYWE0YTBlYy4uZTBkNTIwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MApAQCAtMTEsNyArMTEsNyBAQAogICAgIFByZWZpeDogJ2xtOTknCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3Igd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04OS5odG1sCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9tcGYvTE0vTE04OS5odG1sCiAgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk5CiAgICAgUHJlZml4OiAnbG05OScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKQEAgLTIxLDE4ICsyMSwzMiBAQAogICAgIFByZWZpeDogJ2xtODYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3Igd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE04Ni5odG1sCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9tcGYvTE0vTE04Ni5odG1sCiAgICogQW5hbG9nIERldmljZXMgQURNMTAzMgogICAgIFByZWZpeDogJ2FkbTEwMzInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsMjg3NyxBRE0xMDMyLDAwLmh0bWwKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRE0xMDMyCiAgICogQW5hbG9nIERldmljZXMgQURUNzQ2MQogICAgIFByZWZpeDogJ2FkdDc0NjEnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9lbi9wcm9kLzAsMjg3NyxBRFQ3NDYxLDAwLmh0bWwKLSAgICBOb3RlOiBPbmx5IGlmIGluIEFETTEwMzIgY29tcGF0aWJpbGl0eSBtb2RlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURUNzQ2MQorICAqIE1heGltIE1BWDY2NDYKKyAgICBQcmVmaXg6ICdtYXg2NjQ2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0ZAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzQ5NworICAqIE1heGltIE1BWDY2NDcKKyAgICBQcmVmaXg6ICdtYXg2NjQ2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0ZQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzQ5NworICAqIE1heGltIE1BWDY2NDkKKyAgICBQcmVmaXg6ICdtYXg2NjQ2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YworICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzQ5NwogICAqIE1heGltIE1BWDY2NTcKICAgICBQcmVmaXg6ICdtYXg2NjU3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwpAQCAtNzAsMjUgKzg0LDIxIEBACiAKIFRoZSBMTTkwIGlzIGEgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3IuIEl0IHNlbnNlcyBpdHMgb3duIHRlbXBlcmF0dXJlIGFzCiB3ZWxsIGFzIHRoZSB0ZW1wZXJhdHVyZSBvZiB1cCB0byBvbmUgZXh0ZXJuYWwgZGlvZGUuIEl0IGlzIGNvbXBhdGlibGUKLXdpdGggbWFueSBvdGhlciBkZXZpY2VzIHN1Y2ggYXMgdGhlIExNODYsIHRoZSBMTTg5LCB0aGUgTE05OSwgdGhlIEFETTEwMzIsCi10aGUgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQgdGhlIE1BWDY2ODEgYWxsIG9mIHdoaWNoIGFyZQotc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgord2l0aCBtYW55IG90aGVyIGRldmljZXMsIG1hbnkgb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KIAogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgTUFYNjY1NywKIE1BWDY2NTggYW5kIE1BWDY2NTkgdmFyaWFudHMuIFRoZSBleHRyYSBhZGRyZXNzIGFuZCBmZWF0dXJlcyBvZiB0aGUKIE1BWDY2NTkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuIFRoZSBNQVg2NjgwIGFuZCBNQVg2NjgxIG9ubHkKIGRpZmZlciBpbiB0aGVpciBwaW5vdXQsIHRoZXJlZm9yZSB0aGV5IG9idmlvdXNseSBjYW4ndCAoYW5kIGRvbid0IG5lZWQgdG8pCi1iZSBkaXN0aW5ndWlzaGVkLiBBZGRpdGlvbmFsbHksIHRoZSBBRFQ3NDYxIGlzIHN1cHBvcnRlZCBpZiBmb3VuZCBpbgotQURNMTAzMiBjb21wYXRpYmlsaXR5IG1vZGUuCitiZSBkaXN0aW5ndWlzaGVkLgogCiBUaGUgc3BlY2lmaWNpdHkgb2YgdGhpcyBmYW1pbHkgb2YgY2hpcHNldHMgb3ZlciB0aGUgQURNMTAyMS9MTTg0CiBmYW1pbHkgaXMgdGhhdCBpdCBmZWF0dXJlcyBjcml0aWNhbCBsaW1pdHMgd2l0aCBoeXN0ZXJlc2lzLCBhbmQgYW4KIGluY3JlYXNlZCByZXNvbHV0aW9uIG9mIHRoZSByZW1vdGUgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQuCiAKIFRoZSBkaWZmZXJlbnQgY2hpcHNldHMgb2YgdGhlIGZhbWlseSBhcmUgbm90IHN0cmljdGx5IGlkZW50aWNhbCwgYWx0aG91Z2gKLXZlcnkgc2ltaWxhci4gVGhpcyBkcml2ZXIgZG9lc24ndCBoYW5kbGUgYW55IHNwZWNpZmljIGZlYXR1cmUgZm9yIG5vdywKLXdpdGggdGhlIGV4Y2VwdGlvbiBvZiBTTUJ1cyBQRUMuIEZvciByZWZlcmVuY2UsIGhlcmUgY29tZXMgYSBub24tZXhoYXVzdGl2ZQotbGlzdCBvZiBzcGVjaWZpYyBmZWF0dXJlczoKK3Zlcnkgc2ltaWxhci4gRm9yIHJlZmVyZW5jZSwgaGVyZSBjb21lcyBhIG5vbi1leGhhdXN0aXZlIGxpc3Qgb2Ygc3BlY2lmaWMKK2ZlYXR1cmVzOgogCiBMTTkwOgogICAqIEZpbHRlciBhbmQgYWxlcnQgY29uZmlndXJhdGlvbiByZWdpc3RlciBhdCAweEJGLgpAQCAtMTE0LDkgKzEyNCwxMSBAQAogICAqIExvd2VyIHJlc29sdXRpb24gZm9yIHJlbW90ZSB0ZW1wZXJhdHVyZQogCiBNQVg2NjU3IGFuZCBNQVg2NjU4OgorICAqIEJldHRlciBsb2NhbCByZXNvbHV0aW9uCiAgICogUmVtb3RlIHNlbnNvciB0eXBlIHNlbGVjdGlvbgogCiBNQVg2NjU5OgorICAqIEJldHRlciBsb2NhbCByZXNvbHV0aW9uCiAgICogU2VsZWN0YWJsZSBhZGRyZXNzCiAgICogU2Vjb25kIGNyaXRpY2FsIHRlbXBlcmF0dXJlIGxpbWl0CiAgICogUmVtb3RlIHNlbnNvciB0eXBlIHNlbGVjdGlvbgpAQCAtMTI3LDcgKzEzOSw4IEBACiAKIEFsbCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYXJlIGdpdmVuIGluIGRlZ3JlZXMgQ2Vsc2l1cy4gUmVzb2x1dGlvbgogaXMgMS4wIGRlZ3JlZSBmb3IgdGhlIGxvY2FsIHRlbXBlcmF0dXJlLCAwLjEyNSBkZWdyZWUgZm9yIHRoZSByZW1vdGUKLXRlbXBlcmF0dXJlLgordGVtcGVyYXR1cmUsIGV4Y2VwdCBmb3IgdGhlIE1BWDY2NTcsIE1BWDY2NTggYW5kIE1BWDY2NTkgd2hpY2ggaGF2ZSBhCityZXNvbHV0aW9uIG9mIDAuMTI1IGRlZ3JlZSBmb3IgYm90aCB0ZW1wZXJhdHVyZXMuCiAKIEVhY2ggc2Vuc29yIGhhcyBpdHMgb3duIGhpZ2ggYW5kIGxvdyBsaW1pdHMsIHBsdXMgYSBjcml0aWNhbCBsaW1pdC4KIEFkZGl0aW9uYWxseSwgdGhlcmUgaXMgYSByZWxhdGl2ZSBoeXN0ZXJlc2lzIHZhbHVlIGNvbW1vbiB0byBib3RoIGNyaXRpY2FsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAKaW5kZXggODlhOGZjZi4uY2JhYzMyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MApAQCAtNSwxMiArNSw3IEBACiAgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3MzYwLCBQQzg3MzYzLCBQQzg3MzY0LCBQQzg3MzY1IGFuZCBQQzg3MzY2CiAgICAgUHJlZml4ZXM6ICdwYzg3MzYwJywgJ3BjODczNjMnLCAncGM4NzM2NCcsICdwYzg3MzY1JywgJ3BjODczNjYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUsIGFkZHJlc3MgcmVhZCBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UKLSAgICBEYXRhc2hlZXRzOgotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzYwLmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2My5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjQuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzY1Lmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2Ni5odG1sCisgICAgRGF0YXNoZWV0czogTm8gbG9uZ2VyIGF2YWlsYWJsZQogCiBBdXRob3JzOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CmluZGV4IDlhMDcwOGYuLmQxZWJiZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKQEAgLTUsNyArNSw3IEBACiAgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3NDI3CiAgICAgUHJlZml4OiAncGM4NzQyNycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQotICAgIERhdGFzaGVldDogaHR0cDovL3d3dy53aW5ib25kLmNvbS50dy9FLVdJTkJPTkRIVE0vcGFydG5lci9hcGNfMDA3Lmh0bWwKKyAgICBEYXRhc2hlZXQ6IE5vIGxvbmdlciBhdmFpbGFibGUKIAogQXV0aG9yOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCmluZGV4IDZmODAwYTAuLmM5MWUwYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKQEAgLTM1Myw3ICszNTMsNyBAQAogCiAjIFBXTQogCi1BZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiAobWF5IGFwcGx5IHRvIG90aGVyIEFzdXMKKyogQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgKG1heSBhcHBseSB0byBvdGhlciBBc3VzCiBjaGlwcyBhcyB3ZWxsKSBieSBKZWFuIERlbHZhcmUgYXMgb2YgMjAwNC0wNC0wOToKIAogQVM5OTEyN0YgcmV2aXNpb24gMiBzZWVtcyB0byBoYXZlIHR3byBQV00gcmVnaXN0ZXJzIGF0IDB4NTkgYW5kIDB4NUEsCkBAIC0zOTYsNyArMzk2LDcgQEAKIGxvbmcgYXMgd2UgZG9uJ3Qga25vdyBtb3JlLCB0aGUgdzgzNzgxZCBkcml2ZXIgZG9lc24ndCBoYW5kbGUgUFdNIG9uCiBBUzk5MTI3RiBjaGlwcyBhdCBhbGwuCiAKLUFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIHJldi4xIGJ5IEhlY3RvciBNYXJ0aW46CisqIEFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIHJldi4xIGJ5IEhlY3RvciBNYXJ0aW46CiAKIEkndmUgYmVlbiBmaWRkbGluZyBhcm91bmQgd2l0aCB0aGUgKGluKWZhbW91cyAweDU5IHJlZ2lzdGVyIGFuZAogZm91bmQgb3V0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGRvIHdvcmsgYXMgYSBmb3JtIG9mIGNvYXJzZSBwd206CkBAIC00MTgsMyArNDE4LDM2IEBACiBNeSBtb2JvIGlzIGFuIEFTVVMgQTdWMjY2LUUuIFRoaXMgYmVoYXZpb3IgaXMgc2ltaWxhciB0byB3aGF0IEkgZ290CiB3aXRoIHNwZWVkZmFuIHVuZGVyIFdpbmRvd3MsIHdoZXJlIDAtMTUlIHdvdWxkIGJlIG9mZiwgMTUtMnglIChjYW4ndAogcmVtZW1iZXIgdGhlIGV4YWN0IHZhbHVlKSB3b3VsZCBiZSA3MCUgYW5kIGhpZ2hlciB3b3VsZCBiZSBmdWxsIG9uLgorCisqIEFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIHJldi4xIGZyb20gbG0tc2Vuc29ycworICB0aWNrZXQgIzIzNTA6CisKK0kgY29uZHVjdGVkIHNvbWUgZXhwZXJpbWVudCBvbiBBc3VzIFAzQi1GIG1vdGhlcmJvYXJkIHdpdGggQVM5OTEyN0YKKyhWZXIuIDEpLgorCitJIGNvbmZpcm0gdGhhdCAweDU5IHJlZ2lzdGVyIGNvbnRyb2wgdGhlIENQVV9GYW4gSGVhZGVyIG9uIHRoaXMKK21vdGhlcmJvYXJkLCBhbmQgMHg1YSByZWdpc3RlciBjb250cm9sIFBXUl9GYW4uCisKK0luIG9yZGVyIHRvIHJlZHVjZSB0aGUgZGVwZW5kZW5jeSBvZiBzcGVjaWZpYyBmYW4sIHRoZSBtZWFzdXJlbWVudCBpcworY29uZHVjdGVkIHdpdGggYSBkaWdpdGFsIHNjb3BlIHdpdGhvdXQgZmFuIGNvbm5lY3RlZC4gSSBmb3VuZCBvdXQgdGhhdAorUDNCLUYgYWN0dWFsbHkgb3V0cHV0IHZhcmlhYmxlIERDIHZvbHRhZ2Ugb24gZmFuIGhlYWRlciBjZW50ZXIgcGluLAorbG9va3MgbGlrZSBQV00gaXMgZmlsdGVyZWQgb24gdGhpcyBtb3RoZXJib2FyZC4KKworSGVyZSBhcmUgc29tZSBvZiBtZWFzdXJlbWVudHM6CisKKzB4ODAgICAgIDIwIG1WCisweDgxICAgICAyMCBtVgorMHg4MiAgICAyMzIgbVYKKzB4ODMgICAxLjIgIFYKKzB4ODQgICAyLjMxIFYKKzB4ODUgICAzLjQ0IFYKKzB4ODYgICA0LjYyIFYKKzB4ODcgICA1LjgxIFYKKzB4ODggICA3LjAxIFYKKzl4ODkgICA4LjIyIFYKKzB4OGEgICA5LjQyIFYKKzB4OGIgIDEwLjYgIFYKKzB4OGMgIDExLjkgIFYKKzB4OGQgIDEyLjQgIFYKKzB4OGUgIDEyLjQgIFYKKzB4OGYgIDEyLjQgIFYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAppbmRleCBhNjdkM2I3Li41NjYzZTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCkBAIC01OCwyOSArNTgsMzUgQEAKIGN1cnJlbnRseSBzZWxlY3RlZCkuIElmIHlvdSBrbm93IHRoZSBhZGRyZXNzIG9mIHRoZSBjaGlwLCB1c2UgYSAnZm9yY2UnCiBwYXJhbWV0ZXI7IHRoaXMgd2lsbCBwdXQgaXQgaW50byBhIG1vcmUgd2VsbC1iZWhhdmVkIHN0YXRlIGZpcnN0LgogCi1UaGUgZHJpdmVyIGltcGxlbWVudHMgdGhyZWUgdGVtcGVyYXR1cmUgc2Vuc29ycywgZml2ZSBmYW4gcm90YXRpb24gc3BlZWQKLXNlbnNvcnMsIGFuZCB0ZW4gdm9sdGFnZSBzZW5zb3JzLgorVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIHRlbiB2b2x0YWdlIHNlbnNvcnMsCitmaXZlIGZhbiByb3RhdGlvbiBzcGVlZCBzZW5zb3JzIGFuZCBtYW51YWwgUFdNIGNvbnRyb2wgb2YgZWFjaCBmYW4uCiAKIFRlbXBlcmF0dXJlcyBhcmUgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzIGFuZCBtZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzIDEKIGRlZ0MgZm9yIHRlbXAxIGFuZCAwLjUgZGVnQyBmb3IgdGVtcDIgYW5kIHRlbXAzLiBBbiBhbGFybSBpcyB0cmlnZ2VyZWQgd2hlbgogdGhlIHRlbXBlcmF0dXJlIGdldHMgaGlnaGVyIHRoYW4gdGhlIE92ZXJ0ZW1wZXJhdHVyZSBTaHV0ZG93biB2YWx1ZTsgaXQgc3RheXMKIG9uIHVudGlsIHRoZSB0ZW1wZXJhdHVyZSBmYWxscyBiZWxvdyB0aGUgSHlzdGVyZXNpcyB2YWx1ZS4KIAorVm9sdGFnZSBzZW5zb3JzIChhbHNvIGtub3duIGFzIElOIHNlbnNvcnMpIHJlcG9ydCB0aGVpciB2YWx1ZXMgaW4gbWlsbGl2b2x0cy4KK0FuIGFsYXJtIGlzIHRyaWdnZXJlZCBpZiB0aGUgdm9sdGFnZSBoYXMgY3Jvc3NlZCBhIHByb2dyYW1tYWJsZSBtaW5pbXVtCitvciBtYXhpbXVtIGxpbWl0LgorCiBGYW4gcm90YXRpb24gc3BlZWRzIGFyZSByZXBvcnRlZCBpbiBSUE0gKHJvdGF0aW9ucyBwZXIgbWludXRlKS4gQW4gYWxhcm0gaXMKIHRyaWdnZXJlZCBpZiB0aGUgcm90YXRpb24gc3BlZWQgaGFzIGRyb3BwZWQgYmVsb3cgYSBwcm9ncmFtbWFibGUgbGltaXQuIEZhbgogcmVhZGluZ3MgY2FuIGJlIGRpdmlkZWQgYnkgYSBwcm9ncmFtbWFibGUgZGl2aWRlciAoMSwgMiwgNCwgOCwgMTYsCiAzMiwgNjQgb3IgMTI4IGZvciBhbGwgZmFucykgdG8gZ2l2ZSB0aGUgcmVhZGluZ3MgbW9yZSByYW5nZSBvciBhY2N1cmFjeS4KIAotVm9sdGFnZSBzZW5zb3JzIChhbHNvIGtub3duIGFzIElOIHNlbnNvcnMpIHJlcG9ydCB0aGVpciB2YWx1ZXMgaW4gbWlsbGl2b2x0cy4KLUFuIGFsYXJtIGlzIHRyaWdnZXJlZCBpZiB0aGUgdm9sdGFnZSBoYXMgY3Jvc3NlZCBhIHByb2dyYW1tYWJsZSBtaW5pbXVtCi1vciBtYXhpbXVtIGxpbWl0LgorRWFjaCBmYW4gY29udHJvbGxlZCBpcyBjb250cm9sbGVkIGJ5IFBXTS4gVGhlIFBXTSBkdXR5IGN5Y2xlIGNhbiBiZSByZWFkIGFuZAorc2V0IGZvciBlYWNoIGZhbiBzZXBhcmF0ZWx5LiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwIChzdG9wKSB0byAyNTUgKGZ1bGwpLgorUFdNIDEtMyBzdXBwb3J0IFRoZXJtYWwgQ3J1aXNlIG1vZGUsIGluIHdoaWNoIHRoZSBQV01zIGFyZSBhdXRvbWF0aWNhbGx5CityZWd1bGF0ZWQgdG8ga2VlcCByZXNwZWN0aXZlbHkgdGVtcCAxLTMgYXQgYSBjZXJ0YWluIHRhcmdldCB0ZW1wZXJhdHVyZS4KK1NlZSBiZWxvdyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzeXNmcy1pbnRlcmZhY2UuCiAKIFRoZSB3ODM3OTFkIGhhcyBhIGdsb2JhbCBiaXQgdXNlZCB0byBlbmFibGUgYmVlcGluZyBmcm9tIHRoZSBzcGVha2VyIHdoZW4gYW4KIGFsYXJtIGlzIHRyaWdnZXJlZCBhcyB3ZWxsIGFzIGEgYml0bWFzayB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYmVlcCBmb3IKIHNwZWNpZmljIGFsYXJtcy4gWW91IG5lZWQgYm90aCB0aGUgZ2xvYmFsIGJlZXAgZW5hYmxlIGJpdCBhbmQgdGhlCiBjb3JyZXNwb25kaW5nIGJlZXAgYml0IHRvIGJlIG9uIGZvciBhIHRyaWdnZXJlZCBhbGFybSB0byBzb3VuZCBhIGJlZXAuCiAKLVRoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdGhlIGdsb2FiYWwgZW5hYmxlIGlzIHZpYSB0aGUgc3lzZnMgYmVlcF9lbmFibGUgZmlsZS4KK1RoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdGhlIGdsb2JhbCBlbmFibGUgaXMgdmlhIHRoZSBzeXNmcyBiZWVwX2VuYWJsZSBmaWxlLgogVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGJvdGggbGVnYWN5IGFuZCBuZXcgY29kZS4KIAogVGhlIHN5c2ZzIGludGVyZmFjZSB0byB0aGUgYmVlcCBiaXRtYXNrIGhhcyBtaWdyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBsZWdhY3kKQEAgLTEwNSw2ICsxMTEsMjcgQEAKIFRoZSBkcml2ZXIgcmVhZHMgdGhlIGhhcmR3YXJlIGNoaXAgdmFsdWVzIGF0IG1vc3Qgb25jZSBldmVyeSB0aHJlZSBzZWNvbmRzLgogVXNlciBtb2RlIGNvZGUgcmVxdWVzdGluZyB2YWx1ZXMgbW9yZSBvZnRlbiB3aWxsIHJlY2VpdmUgY2FjaGVkIHZhbHVlcy4KIAorL3N5cyBmaWxlcworLS0tLS0tLS0tLQorVGhlIHN5c2ZzLWludGVyZmFjZSBpcyBkb2N1bWVudGVkIGluIHRoZSAnc3lzZnMtaW50ZXJmYWNlJyBmaWxlLiBPbmx5CitjaGlwLXNwZWNpZmljIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgaGVyZS4KKworcHdtWzEtM11fZW5hYmxlIC0JdGhpcyBmaWxlIGNvbnRyb2xzIG1vZGUgb2YgZmFuL3RlbXBlcmF0dXJlIGNvbnRyb2wgZm9yCisJCQlmYW4gMS0zLiBGYW4vUFdNIDQtNSBvbmx5IHN1cHBvcnQgbWFudWFsIG1vZGUuCisJCSAgICAgICAgICAgICogMSBNYW51YWwgbW9kZQorCQkgICAgICAgICAgICAqIDIgVGhlcm1hbCBDcnVpc2UgbW9kZQorCQkgICAgICAgICAgICAqIDMgRmFuIFNwZWVkIENydWlzZSBtb2RlIChubyBmdXJ0aGVyIHN1cHBvcnQpCisKK3RlbXBbMS0zXV90YXJnZXQgLQlkZWZpbmVzIHRoZSB0YXJnZXQgdGVtcGVyYXR1cmUgZm9yIFRoZXJtYWwgQ3J1aXNlIG1vZGUuCisJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJCQlSVworCit0ZW1wWzEtM11fdG9sZXJhbmNlIC0JdGVtcGVyYXR1cmUgdG9sZXJhbmNlIGZvciBUaGVybWFsIENydWlzZSBtb2RlLgorCQkJU3BlY2lmaWVzIGFuIGludGVydmFsIGFyb3VuZCB0aGUgdGFyZ2V0IHRlbXBlcmF0dXJlCisJCQlpbiB3aGljaCB0aGUgZmFuIHNwZWVkIGlzIG5vdCBjaGFuZ2VkLgorCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCQkJUlcKKwogQWxhcm1zIGJpdG1hcCB2cy4gYmVlcF9tYXNrIGJpdG1hc2sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRm9yIGxlZ2FjeSBjb2RlIHVzaW5nIHRoZSBhbGFybXMgYW5kIGJlZXBfbWFzayBmaWxlczoKQEAgLTEzMiw3ICsxNTksMyBAQAogdGFydDMgICAgICAgIDogIGFsYXJtczogMHgwNDAwMDAgYmVlcF9tYXNrOiAweDEwMDAwMCA8PT0gbWlzbWF0Y2gKIGNhc2Vfb3BlbiAgICA6ICBhbGFybXM6IDB4MDAxMDAwIGJlZXBfbWFzazogMHgwMDEwMDAKIGdsb2JhbF9lbmFibGU6ICBhbGFybXM6IC0tLS0tLS0tIGJlZXBfbWFzazogMHg4MDAwMDAgKG1vZGlmaWVkIHZpYSBiZWVwX2VuYWJsZSkKLQotVzgzNzkxRCBUT0RPOgotLS0tLS0tLS0tLS0tLS0tCi1Qcm92aWRlIGEgcGF0Y2ggZm9yIHNtYXJ0LWZhbiBjb250cm9sIChzdGlsbCBuZWVkIGFwcHJvcHJpYXRlIG1vdGhlcmJvYXJkL2ZhbnMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQva3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CmluZGV4IDkxNGQwN2YuLjg0ZjdjYjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CkBAIC0xLDcgKzEsOCBAQAotQ3VycmVudGx5LCBrdm0gbW9kdWxlIGluIEVYUEVSSU1FTlRBTCBzdGFnZSBvbiBJQTY0LiBUaGlzIG1lYW5zIHRoYXQKLWludGVyZmFjZXMgYXJlIG5vdCBzdGFibGUgZW5vdWdoIHRvIHVzZS4gU28sIHBsYXNlIGhhZCBiZXR0ZXIgZG9uJ3QgcnVuCi1jcml0aWNhbCBhcHBsaWNhdGlvbnMgaW4gdmlydHVhbCBtYWNoaW5lLiBXZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBtYWtlIGl0Ci1zdHJvbmcgaW4gZnV0dXJlIHZlcnNpb25zIQorQ3VycmVudGx5LCBrdm0gbW9kdWxlIGlzIGluIEVYUEVSSU1FTlRBTCBzdGFnZSBvbiBJQTY0LiBUaGlzIG1lYW5zIHRoYXQKK2ludGVyZmFjZXMgYXJlIG5vdCBzdGFibGUgZW5vdWdoIHRvIHVzZS4gU28sIHBsZWFzZSBkb24ndCBydW4gY3JpdGljYWwKK2FwcGxpY2F0aW9ucyBpbiB2aXJ0dWFsIG1hY2hpbmUuCitXZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBpbXByb3ZlIGl0IGluIGZ1dHVyZSB2ZXJzaW9ucyEKKwogCQkJCUd1aWRlOiBIb3cgdG8gYm9vdCB1cCBndWVzdHMgb24ga3ZtL2lhNjQKIAogVGhpcyBndWlkZSBpcyB0byBkZXNjcmliZSBob3cgdG8gZW5hYmxlIGt2bSBzdXBwb3J0IGZvciBJQS02NCBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CmluZGV4IDFjNmI1NDUuLmI4ODBjZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTkyLDYgKzkyLDcgQEAKICdKJwkwMC0xRglkcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCiAnSycJYWxsCWxpbnV4L2tkLmgKICdMJwkwMC0xRglsaW51eC9sb29wLmgKKydMJwkyMC0yRglkcml2ZXIvdXNiL21pc2MvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaApAQCAtMTEwLDYgKzExMSw4IEBACiAnVycJMDAtMUYJbGludXgvd2Fucm91dGVyLmgJY29uZmxpY3QhCiAnWCcJYWxsCWxpbnV4L3hmc19mcy5oCiAnWScJYWxsCWxpbnV4L2N5Y2xhZGVzLmgKKydbJwkwMC0wNwlsaW51eC91c2IvdXNidG1jLmgJVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IERldmljZXMKKwkJCQkJPG1haWx0bzpncmVna2hAc3VzZS5kZT4KICdhJwlhbGwJCQkJQVRNIG9uIGxpbnV4CiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CiAnYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMjQ0M2Y1Yi4uMGYxNTQ0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTY5MCw3ICs2OTAsNyBAQAogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQgYW5kCiAJCQlEb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGZvciBkZXRhaWxzLgogCi0JZWxmY29yZWhkcj0JW1g4Ni0zMiwgWDg2XzY0XQorCWVsZmNvcmVoZHI9CVtJQTY0LFBQQyxTSCxYODYtMzIsWDg2XzY0XQogCQkJU3BlY2lmaWVzIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnQgb2Yga2VybmVsIGNvcmUKIAkJCWltYWdlIGVsZiBoZWFkZXIuIEdlbmVyYWxseSBrZXhlYyBsb2FkZXIgd2lsbAogCQkJcGFzcyB0aGlzIG9wdGlvbiB0byBjYXB0dXJlIGtlcm5lbC4KQEAgLTc5Niw2ICs3OTYsOSBAQAogCQkJRGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlJ3MgaHVnZSBwYWdlIHNpemUKIAkJCWlmIG5vdCBzcGVjaWZpZWQuCiAKKwlobHQJCVtCVUdTPUFSTSxTSF0KKworCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKIAlpODA0Mi5kdW1ia2JkCVtIV10gUHJldGVuZCB0aGF0IGNvbnRyb2xsZXIgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20KIAkJCSAgICAga2V5Ym9hcmQgYW5kIGNhbm5vdCBjb250cm9sIGl0cyBzdGF0ZQpAQCAtMTIxMCw2ICsxMjEzLDEwIEBACiAJbWVtPW5vcGVudGl1bQlbQlVHUz1YODYtMzJdIERpc2FibGUgdXNhZ2Ugb2YgNE1CIHBhZ2VzIGZvciBrZXJuZWwKIAkJCW1lbW9yeS4KIAorCW1lbWNodW5rPW5uW0tNR10KKwkJCVtLTkwsU0hdIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2l6ZSBmb3IKKwkJCXBlci1kZXZpY2UgcGh5c2ljYWxseSBjb250aWd1b3VzIERNQSBidWZmZXJzLgorCiAJbWVtbWFwPWV4YWN0bWFwCVtLTkwsWDg2LTMyLFg4Nl82NF0gRW5hYmxlIHNldHRpbmcgb2YgYW4gZXhhY3QKIAkJCUU4MjAgbWVtb3J5IG1hcCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgogCQkJU3VjaCBtZW1tYXA9ZXhhY3RtYXAgbGluZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGJhc2VkIG9uCkBAIC0xMzkyLDYgKzEzOTksOCBAQAogCiAJbm9kaXNjb25uZWN0CVtIVyxTQ1NJLE02OEtdIERpc2FibGVzIFNDU0kgZGlzY29ubmVjdHMuCiAKKwlub2RzcAkJW1NIXSBEaXNhYmxlIGhhcmR3YXJlIERTUCBhdCBib290IHRpbWUuCisKIAlub2VmaQkJW1g4Ni0zMixYODYtNjRdIERpc2FibGUgRUZJIHJ1bnRpbWUgc2VydmljZXMgc3VwcG9ydC4KIAogCW5vZXhlYwkJW0lBLTY0XQpAQCAtMTQwOCwxMyArMTQxNywxNSBAQAogCQkJbm9leGVjMzI9b2ZmOiBkaXNhYmxlIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzCiAJCQkJcmVhZCBpbXBsaWVzIGV4ZWN1dGFibGUgbWFwcGluZ3MKIAorCW5vZnB1CQlbU0hdIERpc2FibGUgaGFyZHdhcmUgRlBVIGF0IGJvb3QgdGltZS4KKwogCW5vZnhzcgkJW0JVR1M9WDg2LTMyXSBEaXNhYmxlcyB4ODYgZmxvYXRpbmcgcG9pbnQgZXh0ZW5kZWQKIAkJCXJlZ2lzdGVyIHNhdmUgYW5kIHJlc3RvcmUuIFRoZSBrZXJuZWwgd2lsbCBvbmx5IHNhdmUKIAkJCWxlZ2FjeSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgb24gdGFzayBzd2l0Y2guCiAKIAlub2NsZmx1c2gJW0JVR1M9WDg2XSBEb24ndCB1c2UgdGhlIENMRkxVU0ggaW5zdHJ1Y3Rpb24KIAotCW5vaGx0CQlbQlVHUz1BUk1dCisJbm9obHQJCVtCVUdTPUFSTSxTSF0KIAogCW5vLWhsdAkJW0JVR1M9WDg2LTMyXSBUZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIGhsdAogCQkJaW5zdHJ1Y3Rpb24gZG9lc24ndCB3b3JrIGNvcnJlY3RseSBhbmQgbm90IHRvCkBAIC0xNzEzLDYgKzE3MjQsMTEgQEAKIAkJCWF1dG9jb25maWd1cmF0aW9uLgogCQkJUmFuZ2VzIGFyZSBpbiBwYWlycyAobWVtb3J5IGJhc2UgYW5kIHNpemUpLgogCisJZHluYW1pY19wcmludGsKKwkJCUVuYWJsZXMgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgaWYKKwkJCUNPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBoYXMgYmVlbiBlbmFibGVkLiBUaGVzZSBjYW4gYWxzbworCQkJYmUgc3dpdGNoZWQgb24vb2ZmIHZpYSA8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcworCiAJcHJpbnQtZmF0YWwtc2lnbmFscz0KIAkJCVtLTkxdIGRlYnVnOiBwcmludCBmYXRhbCBzaWduYWxzCiAJCQlwcmludC1mYXRhbC1zaWduYWxzPTE6IHByaW50IHNlZ2ZhdWx0IGluZm8gdG8KQEAgLTIyNDcsNiArMjI2MywyNSBAQAogCQkJYXV0b3N1c3BlbmRlZC4gIERldmljZXMgZm9yIHdoaWNoIHRoZSBkZWxheSBpcyBzZXQKIAkJCXRvIGEgbmVnYXRpdmUgdmFsdWUgd29uJ3QgYmUgYXV0b3N1c3BlbmRlZCBhdCBhbGwuCiAKKwl1c2Jjb3JlLnVzYmZzX3Nub29wPQorCQkJW1VTQl0gU2V0IHRvIGxvZyBhbGwgdXNiZnMgdHJhZmZpYyAoZGVmYXVsdCAwID0gb2ZmKS4KKworCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0KKwkJCVtVU0JdIFNldCB0byBjeWNsZSBsZWRzIG9uIGh1YnMgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLm9sZF9zY2hlbWVfZmlyc3Q9CisJCQlbVVNCXSBTdGFydCB3aXRoIHRoZSBvbGQgZGV2aWNlIGluaXRpYWxpemF0aW9uCisJCQlzY2hlbWUgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLnVzZV9ib3RoX3NjaGVtZXM9CisJCQlbVVNCXSBUcnkgdGhlIG90aGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUKKwkJCWlmIHRoZSBmaXJzdCBvbmUgZmFpbHMgKGRlZmF1bHQgMSA9IGVuYWJsZWQpLgorCisJdXNiY29yZS5pbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dD0KKwkJCVtVU0JdIFNwZWNpZmllcyB0aW1lb3V0IGZvciB0aGUgaW5pdGlhbCA2NC1ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUkVRX0dFVF9ERVNDUklQVE9SIHJlcXVlc3QgaW4gbWlsbGlzZWNvbmRzCisJCQkoZGVmYXVsdCA1MDAwID0gNS4wIHNlY29uZHMpLgorCiAJdXNiaGlkLm1vdXNlcG9sbD0KIAkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0CmluZGV4IDUxYTgwMjEuLmY1ZDJhYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dApAQCAtMTE4LDYgKzExOCwxMCBAQAogCiAgICAgaW50IGtvYmplY3RfcmVuYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CiAKK05vdGUga29iamVjdF9yZW5hbWUgZG9lcyBwZXJmb3JtIGFueSBsb2NraW5nIG9yIGhhdmUgYSBzb2xpZCBub3Rpb24gb2YKK3doYXQgbmFtZXMgYXJlIHZhbGlkIHNvIHRoZSBwcm92aWRlIG11c3QgcHJvdmlkZSB0aGVpciBvd24gc2FuaXR5IGNoZWNraW5nCithbmQgc2VyaWFsaXphdGlvbi4KKwogVGhlcmUgaXMgYSBmdW5jdGlvbiBjYWxsZWQga29iamVjdF9zZXRfbmFtZSgpIGJ1dCB0aGF0IGlzIGxlZ2FjeSBjcnVmdCBhbmQKIGlzIGJlaW5nIHJlbW92ZWQuICBJZiB5b3VyIGNvZGUgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLCBpdCBpcwogaW5jb3JyZWN0IGFuZCBuZWVkcyB0byBiZSBmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dCBiL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGY5M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0CkBAIC0wLDAgKzEsNzE0IEBACitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitIYXZpbmcgbG9va2VkIGF0IHRoZSBsaW51eCBtdGQvbmFuZCBkcml2ZXIgYW5kIG1vcmUgc3BlY2lmaWMgYXQgbmFuZF9lY2MuYworSSBmZWx0IHRoZXJlIHdhcyByb29tIGZvciBvcHRpbWlzYXRpb24uIEkgYmFzaGVkIHRoZSBjb2RlIGZvciBhIGZldyBob3VycworcGVyZm9ybWluZyB0cmlja3MgbGlrZSB0YWJsZSBsb29rdXAgcmVtb3Zpbmcgc3VwZXJmbHVvdXMgY29kZSBldGMuCitBZnRlciB0aGF0IHRoZSBzcGVlZCB3YXMgaW5jcmVhc2VkIGJ5IDM1LTQwJS4KK1N0aWxsIEkgd2FzIG5vdCB0b28gaGFwcHkgYXMgSSBmZWx0IHRoZXJlIHdhcyBhZGRpdGlvbmFsIHJvb20gZm9yIGltcHJvdmVtZW50LgorCitCYWQhIEkgd2FzIGhvb2tlZC4KK0kgZGVjaWRlZCB0byBhbm5vdGF0ZSBteSBzdGVwcyBpbiB0aGlzIGZpbGUuIFBlcmhhcHMgaXQgaXMgdXNlZnVsIHRvIHNvbWVvbmUKK29yIHNvbWVvbmUgbGVhcm5zIHNvbWV0aGluZyBmcm9tIGl0LgorCisKK1RoZSBwcm9ibGVtCis9PT09PT09PT09PQorCitOQU5EIGZsYXNoIChhdCBsZWFzdCBTTEMgb25lKSB0eXBpY2FsbHkgaGFzIHNlY3RvcnMgb2YgMjU2IGJ5dGVzLgorSG93ZXZlciBOQU5EIGZsYXNoIGlzIG5vdCBleHRyZW1lbHkgcmVsaWFibGUgc28gc29tZSBlcnJvciBkZXRlY3Rpb24KKyhhbmQgc29tZXRpbWVzIGNvcnJlY3Rpb24pIGlzIG5lZWRlZC4KKworVGhpcyBpcyBkb25lIGJ5IG1lYW5zIG9mIGEgSGFtbWluZyBjb2RlLiBJJ2xsIHRyeSB0byBleHBsYWluIGl0IGluCitsYXltYW5zIHRlcm1zIChhbmQgYXBvbG9naWVzIHRvIGFsbCB0aGUgcHJvJ3MgaW4gdGhlIGZpZWxkIGluIGNhc2UgSSBkbworbm90IHVzZSB0aGUgcmlnaHQgdGVybWlub2xvZ3ksIG15IGNvZGluZyB0aGVvcnkgY2xhc3Mgd2FzIGFsbW9zdCAzMAoreWVhcnMgYWdvLCBhbmQgSSBtdXN0IGFkbWl0IGl0IHdhcyBub3Qgb25lIG9mIG15IGZhdm91cml0ZXMpLgorCitBcyBJIHNhaWQgYmVmb3JlIHRoZSBlY2MgY2FsY3VsYXRpb24gaXMgcGVyZm9ybWVkIG9uIHNlY3RvcnMgb2YgMjU2CitieXRlcy4gVGhpcyBpcyBkb25lIGJ5IGNhbGN1bGF0aW5nIHNldmVyYWwgcGFyaXR5IGJpdHMgb3ZlciB0aGUgcm93cyBhbmQKK2NvbHVtbnMuIFRoZSBwYXJpdHkgdXNlZCBpcyBldmVuIHBhcml0eSB3aGljaCBtZWFucyB0aGF0IHRoZSBwYXJpdHkgYml0ID0gMQoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgaXMgMSBhbmQgdGhlIHBhcml0eSBiaXQgPSAwCitpZiB0aGUgZGF0YSBvdmVyIHdoaWNoIHRoZSBwYXJpdHkgaXMgY2FsY3VsYXRlZCBpcyAwLiBTbyB0aGUgdG90YWwKK251bWJlciBvZiBiaXRzIG92ZXIgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgKyB0aGUKK3Bhcml0eSBiaXQgaXMgZXZlbi4gKHNlZSB3aWtpcGVkaWEgaWYgeW91IGNhbid0IGZvbGxvdyB0aGlzKS4KK1Bhcml0eSBpcyBvZnRlbiBjYWxjdWxhdGVkIGJ5IG1lYW5zIG9mIGFuIGV4Y2x1c2l2ZSBvciBvcGVyYXRpb24sCitzb21ldGltZXMgYWxzbyByZWZlcnJlZCB0byBhcyB4b3IuIEluIEMgdGhlIG9wZXJhdG9yIGZvciB4b3IgaXMgXgorCitCYWNrIHRvIGVjYy4KK0xldCdzIGdpdmUgYSBzbWFsbCBmaWd1cmU6CisKK2J5dGUgICAwOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMiBycDQgLi4uIHJwMTQKK2J5dGUgICAxOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMiBycDQgLi4uIHJwMTQKK2J5dGUgICAyOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMyBycDQgLi4uIHJwMTQKK2J5dGUgICAzOiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMyBycDQgLi4uIHJwMTQKK2J5dGUgICA0OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMiBycDUgLi4uIHJwMTQKKy4uLi4KK2J5dGUgMjU0OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAwIHJwMyBycDUgLi4uIHJwMTUKK2J5dGUgMjU1OiAgYml0NyBiaXQ2IGJpdDUgYml0NCBiaXQzIGJpdDIgYml0MSBiaXQwICAgcnAxIHJwMyBycDUgLi4uIHJwMTUKKyAgICAgICAgICAgY3AxICBjcDAgIGNwMSAgY3AwICBjcDEgIGNwMCAgY3AxICBjcDAKKyAgICAgICAgICAgY3AzICBjcDMgIGNwMiAgY3AyICBjcDMgIGNwMyAgY3AyICBjcDIKKyAgICAgICAgICAgY3A1ICBjcDUgIGNwNSAgY3A1ICBjcDQgIGNwNCAgY3A0ICBjcDQKKworVGhpcyBmaWd1cmUgcmVwcmVzZW50cyBhIHNlY3RvciBvZiAyNTYgYnl0ZXMuCitjcCBpcyBteSBhYmJyZXZpYXRvbiBmb3IgY29sdW1uIHBhcml0eSwgcnAgZm9yIHJvdyBwYXJpdHkuCisKK0xldCdzIHN0YXJ0IHRvIGV4cGxhaW4gY29sdW1uIHBhcml0eS4KK2NwMCBpcyB0aGUgcGFyaXR5IHRoYXQgYmVsb25ncyB0byBhbGwgYml0MCwgYml0MiwgYml0NCwgYml0Ni4KK3NvIHRoZSBzdW0gb2YgYWxsIGJpdDAsIGJpdDIsIGJpdDQgYW5kIGJpdDYgdmFsdWVzICsgY3AwIGl0c2VsZiBpcyBldmVuLgorU2ltaWxhcmx5IGNwMSBpcyB0aGUgc3VtIG9mIGFsbCBiaXQxLCBiaXQzLCBiaXQ1IGFuZCBiaXQ3LgorY3AyIGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQ0IGFuZCBiaXQ1CitjcDMgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDIsIGJpdDMsIGJpdDYgYW5kIGJpdDcuCitjcDQgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDAsIGJpdDEsIGJpdDIgYW5kIGJpdDMuCitjcDUgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDQsIGJpdDUsIGJpdDYgYW5kIGJpdDcuCitOb3RlIHRoYXQgZWFjaCBvZiBjcDAgLi4gY3A1IGlzIGV4YWN0bHkgb25lIGJpdC4KKworUm93IHBhcml0eSBhY3R1YWxseSB3b3JrcyBhbG1vc3QgdGhlIHNhbWUuCitycDAgaXMgdGhlIHBhcml0eSBvZiBhbGwgZXZlbiBieXRlcyAoMCwgMiwgNCwgNiwgLi4uIDI1MiwgMjU0KQorcnAxIGlzIHRoZSBwYXJpdHkgb2YgYWxsIG9kZCBieXRlcyAoMSwgMywgNSwgNywgLi4uLCAyNTMsIDI1NSkKK3JwMiBpcyB0aGUgcGFyaXR5IG9mIGFsbCBieXRlcyAwLCAxLCA0LCA1LCA4LCA5LCAuLi4KKyhzbyBoYW5kbGUgdHdvIGJ5dGVzLCB0aGVuIHNraXAgMiBieXRlcykuCitycDMgaXMgY292ZXJzIHRoZSBoYWxmIHJwMiBkb2VzIG5vdCBjb3ZlciAoYnl0ZXMgMiwgMywgNiwgNywgMTAsIDExLCAuLi4pCitmb3IgcnA0IHRoZSBydWxlIGlzIGNvdmVyIDQgYnl0ZXMsIHNraXAgNCBieXRlcywgY292ZXIgNCBieXRlcywgc2tpcCA0IGV0Yy4KK3NvIHJwNCBjYWxjdWxhdGVzIHBhcml0eSBvdmVyIGJ5dGVzIDAsIDEsIDIsIDMsIDgsIDksIDEwLCAxMSwgMTYsIC4uLikKK2FuZCBycDUgY292ZXJzIHRoZSBvdGhlciBoYWxmLCBzbyBieXRlcyA0LCA1LCA2LCA3LCAxMiwgMTMsIDE0LCAxNSwgMjAsIC4uCitUaGUgc3Rvcnkgbm93IGJlY29tZXMgcXVpdGUgYm9yaW5nLiBJIGd1ZXNzIHlvdSBnZXQgdGhlIGlkZWEuCitycDYgY292ZXJzIDggYnl0ZXMgdGhlbiBza2lwcyA4IGV0YworcnA3IHNraXBzIDggYnl0ZXMgdGhlbiBjb3ZlcnMgOCBldGMKK3JwOCBjb3ZlcnMgMTYgYnl0ZXMgdGhlbiBza2lwcyAxNiBldGMKK3JwOSBza2lwcyAxNiBieXRlcyB0aGVuIGNvdmVycyAxNiBldGMKK3JwMTAgY292ZXJzIDMyIGJ5dGVzIHRoZW4gc2tpcHMgMzIgZXRjCitycDExIHNraXBzIDMyIGJ5dGVzIHRoZW4gY292ZXJzIDMyIGV0YworcnAxMiBjb3ZlcnMgNjQgYnl0ZXMgdGhlbiBza2lwcyA2NCBldGMKK3JwMTMgc2tpcHMgNjQgYnl0ZXMgdGhlbiBjb3ZlcnMgNjQgZXRjCitycDE0IGNvdmVycyAxMjggYnl0ZXMgdGhlbiBza2lwcyAxMjgKK3JwMTUgc2tpcHMgMTI4IGJ5dGVzIHRoZW4gY292ZXJzIDEyOAorCitJbiB0aGUgZW5kIHRoZSBwYXJpdHkgYml0cyBhcmUgZ3JvdXBlZCB0b2dldGhlciBpbiB0aHJlZSBieXRlcyBhcworZm9sbG93czoKK0VDQyAgICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNCBCaXQgMyBCaXQgMiBCaXQgMSBCaXQgMAorRUNDIDAgICBycDA3ICBycDA2ICBycDA1ICBycDA0ICBycDAzICBycDAyICBycDAxICBycDAwCitFQ0MgMSAgIHJwMTUgIHJwMTQgIHJwMTMgIHJwMTIgIHJwMTEgIHJwMTAgIHJwMDkgIHJwMDgKK0VDQyAyICAgY3A1ICAgY3A0ICAgY3AzICAgY3AyICAgY3AxICAgY3AwICAgICAgMSAgICAgMQorCitJIGRldGVjdGVkIGFmdGVyIHdyaXRpbmcgdGhpcyB0aGF0IFNUIGFwcGxpY2F0aW9uIG5vdGUgQU4xODIzCisoaHR0cDovL3d3dy5zdC5jb20vc3RvbmxpbmUvYm9va3MvcGRmL2RvY3MvMTAxMjMucGRmKSBnaXZlcyBhIG11Y2gKK25pY2VyIHBpY3R1cmUuKGJ1dCB0aGV5IHVzZSBsaW5lIHBhcml0eSBhcyB0ZXJtIHdoZXJlIEkgdXNlIHJvdyBwYXJpdHkpCitPaCB3ZWxsLCBJJ20gZ3JhcGhpY2FsbHkgY2hhbGxlbmdlZCwgc28gc3VmZmVyIHdpdGggbWUgZm9yIGEgbW9tZW50IDotKQorQW5kIEkgY291bGQgbm90IHJldXNlIHRoZSBTVCBwaWN0dXJlIGFueXdheSBmb3IgY29weXJpZ2h0IHJlYXNvbnMuCisKKworQXR0ZW1wdCAwCis9PT09PT09PT0KKworSW1wbGVtZW50aW5nIHRoZSBwYXJpdHkgY2FsY3VsYXRpb24gaXMgcHJldHR5IHNpbXBsZS4KK0luIEMgcHNldWRvY29kZToKK2ZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKK3sKKyAgICBpZiAoaSAmIDB4MDEpCisgICAgICAgcnAxID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE7CisgICAgZWxzZQorICAgICAgIHJwMCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGlmIChpICYgMHgwMikKKyAgICAgICBycDMgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMzsKKyAgICBlbHNlCisgICAgICAgcnAyID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDI7CisgICAgaWYgKGkgJiAweDA0KQorICAgICAgcnA1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDU7CisgICAgZWxzZQorICAgICAgcnA0ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDQ7CisgICAgaWYgKGkgJiAweDA4KQorICAgICAgcnA3ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDc7CisgICAgZWxzZQorICAgICAgcnA2ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDY7CisgICAgaWYgKGkgJiAweDEwKQorICAgICAgcnA5ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDk7CisgICAgZWxzZQorICAgICAgcnA4ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDg7CisgICAgaWYgKGkgJiAweDIwKQorICAgICAgcnAxMSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMTsKKyAgICBlbHNlCisgICAgcnAxMCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMDsKKyAgICBpZiAoaSAmIDB4NDApCisgICAgICBycDEzID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDEzOworICAgIGVsc2UKKyAgICAgIHJwMTIgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTI7CisgICAgaWYgKGkgJiAweDgwKQorICAgICAgcnAxNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxNTsKKyAgICBlbHNlCisgICAgICBycDE0ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE0OworICAgIGNwMCA9IGJpdDYgXiBiaXQ0IF4gYml0MiBeIGJpdDAgXiBjcDA7CisgICAgY3AxID0gYml0NyBeIGJpdDUgXiBiaXQzIF4gYml0MSBeIGNwMTsKKyAgICBjcDIgPSBiaXQ1IF4gYml0NCBeIGJpdDEgXiBiaXQwIF4gY3AyOworICAgIGNwMyA9IGJpdDcgXiBiaXQ2IF4gYml0MyBeIGJpdDIgXiBjcDMKKyAgICBjcDQgPSBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gY3A0CisgICAgY3A1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGNwNQorfQorCisKK0FuYWx5c2lzIDAKKz09PT09PT09PT0KKworQyBkb2VzIGhhdmUgYml0d2lzZSBvcGVyYXRvcnMgYnV0IG5vdCByZWFsbHkgb3BlcmF0b3JzIHRvIGRvIHRoZSBhYm92ZQorZWZmaWNpZW50bHkgKGFuZCBtb3N0IGhhcmR3YXJlIGhhcyBubyBzdWNoIGluc3RydWN0aW9ucyBlaXRoZXIpLgorVGhlcmVmb3JlIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoaXMgaXQgd2FzIGNsZWFyIHRoYXQgdGhlIGNvZGUgYWJvdmUgd2FzCitub3QgZ29pbmcgdG8gYnJpbmcgbWUgYSBOb2JlbCBwcml6ZSA6LSkKKworRm9ydHVuYXRlbHkgdGhlIGV4Y2x1c2l2ZSBvciBvcGVyYXRpb24gaXMgY29tbXV0YXRpdmUsIHNvIHdlIGNhbiBjb21iaW5lCit0aGUgdmFsdWVzIGluIGFueSBvcmRlci4gU28gaW5zdGVhZCBvZiBjYWxjdWxhdGluZyBhbGwgdGhlIGJpdHMKK2luZGl2aWR1YWxseSwgbGV0IHVzIHRyeSB0byByZWFycmFuZ2UgdGhpbmdzLgorRm9yIHRoZSBjb2x1bW4gcGFyaXR5IHRoaXMgaXMgZWFzeS4gV2UgY2FuIGp1c3QgeG9yIHRoZSBieXRlcyBhbmQgaW4gdGhlCitlbmQgZmlsdGVyIG91dCB0aGUgcmVsZXZhbnQgYml0cy4gVGhpcyBpcyBwcmV0dHkgbmljZSBhcyBpdCB3aWxsIGJyaW5nCithbGwgY3AgY2FsY3VsYXRpb24gb3V0IG9mIHRoZSBpZiBsb29wLgorCitTaW1pbGFybHkgd2UgY2FuIGZpcnN0IHhvciB0aGUgYnl0ZXMgZm9yIHRoZSB2YXJpb3VzIHJvd3MuCitUaGlzIGxlYWRzIHRvOgorCisKK0F0dGVtcHQgMQorPT09PT09PT09CisKK2NvbnN0IGNoYXIgcGFyaXR5WzI1Nl0gPSB7CisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMAorfTsKKwordm9pZCBlY2MxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqY29kZSkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpicCA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIGN1cjsKKyAgICB1bnNpZ25lZCBjaGFyIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGNoYXIgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQgY2hhciBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsgcnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEwID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDEgXj0gY3VyOyBlbHNlIHJwMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnAzIF49IGN1cjsgZWxzZSBycDIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxMCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4NDApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4ODApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICBjb2RlWzBdID0KKyAgICAgICAgKHBhcml0eVtycDddIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDVdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDRdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDNdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDJdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDFdIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDBdKTsKKyAgICBjb2RlWzFdID0KKyAgICAgICAgKHBhcml0eVtycDE1XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnAxNF0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwMTNdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDEyXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAxMV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMTBdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDldICA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnA4XSk7CisgICAgY29kZVsyXSA9CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDU1XSA8PCAyKTsKKyAgICBjb2RlWzBdID0gfmNvZGVbMF07CisgICAgY29kZVsxXSA9IH5jb2RlWzFdOworICAgIGNvZGVbMl0gPSB+Y29kZVsyXTsKK30KKworU3RpbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGxhc3QgdGhyZWUgaW52ZXJ0IHN0YXRlbWVudHMgYXJlIHRoZXJlIHRvCitnaXZlIGEgY2hlY2tzdW0gb2YgMHhmZiAweGZmIDB4ZmYgZm9yIGFuIGVtcHR5IGZsYXNoLiBJbiBhbiBlbXB0eSBmbGFzaAorYWxsIGRhdGEgaXMgMHhmZiwgc28gdGhlIGNoZWNrc3VtIHRoZW4gbWF0Y2hlcy4KKworSSBhbHNvIGludHJvZHVjZWQgdGhlIHBhcml0eSBsb29rdXAuIEkgZXhwZWN0ZWQgdGhpcyB0byBiZSB0aGUgZmFzdGVzdAord2F5IHRvIGNhbGN1bGF0ZSB0aGUgcGFyaXR5LCBidXQgSSB3aWxsIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBsYXRlcgorb24uCisKKworQW5hbHlzaXMgMQorPT09PT09PT09PQorCitUaGUgY29kZSB3b3JrcywgYnV0IGlzIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQuIE9uIG15IHN5c3RlbSBpdCB0b29rCithbG1vc3QgNCB0aW1lcyBhcyBtdWNoIHRpbWUgYXMgdGhlIGxpbnV4IGRyaXZlciBjb2RlLiBCdXQgaGV5LCBpZiBpdCB3YXMKKyp0aGF0KiBlYXN5IHRoaXMgd291bGQgaGF2ZSBiZWVuIGRvbmUgbG9uZyBiZWZvcmUuCitObyBwYWluLiBubyBnYWluLgorCitGb3J0dW5hdGVseSB0aGVyZSBpcyBwbGVudHkgb2Ygcm9vbSBmb3IgaW1wcm92ZW1lbnQuCisKK0luIHN0ZXAgMSB3ZSBtb3ZlZCBmcm9tIGJpdC13aXNlIGNhbGN1bGF0aW9uIHRvIGJ5dGUtd2lzZSBjYWxjdWxhdGlvbi4KK0hvd2V2ZXIgaW4gQyB3ZSBjYW4gYWxzbyB1c2UgdGhlIHVuc2lnbmVkIGxvbmcgZGF0YSB0eXBlIGFuZCB2aXJ0dWFsbHkKK2V2ZXJ5IG1vZGVybiBtaWNyb3Byb2Nlc3NvciBzdXBwb3J0cyAzMiBiaXQgb3BlcmF0aW9ucywgc28gd2h5IG5vdCB0cnkKK3RvIHdyaXRlIG91ciBjb2RlIGluIHN1Y2ggYSB3YXkgdGhhdCB3ZSBwcm9jZXNzIGRhdGEgaW4gMzIgYml0IGNodW5rcy4KKworT2YgY291cnNlIHRoaXMgbWVhbnMgc29tZSBtb2RpZmljYXRpb24gYXMgdGhlIHJvdyBwYXJpdHkgaXMgYnl0ZSBieQorYnl0ZS4gQSBxdWljayBhbmFseXNpczoKK2ZvciB0aGUgY29sdW1uIHBhcml0eSB3ZSB1c2UgdGhlIHBhciB2YXJpYWJsZS4gV2hlbiBleHRlbmRpbmcgdG8gMzIgYml0cword2UgY2FuIGluIHRoZSBlbmQgZWFzaWx5IGNhbGN1bGF0ZSBwMCBhbmQgcDEgZnJvbSBpdC4KKyhiZWNhdXNlIHBhciBub3cgY29uc2lzdHMgb2YgNCBieXRlcywgY29udHJpYnV0aW5nIHRvIHJwMSwgcnAwLCBycDEsIHJwMAorcmVzcGVjdGl2ZWx5KQorYWxzbyBycDIgYW5kIHJwMyBjYW4gYmUgZWFzaWx5IHJldHJpZXZlZCBmcm9tIHBhciBhcyBycDMgY292ZXJzIHRoZQorZmlyc3QgdHdvIGJ5dGVzIGFuZCBycDIgdGhlIGxhc3QgdHdvIGJ5dGVzLgorCitOb3RlIHRoYXQgb2YgY291cnNlIG5vdyB0aGUgbG9vcCBpcyBleGVjdXRlZCBvbmx5IDY0IHRpbWVzICgyNTYvNCkuCitBbmQgbm90ZSB0aGF0IGNhcmUgbXVzdCB0YWtlbiB3cnQgYnl0ZSBvcmRlcmluZy4gVGhlIHdheSBieXRlcyBhcmUKK29yZGVyZWQgaW4gYSBsb25nIGlzIG1hY2hpbmUgZGVwZW5kZW50LCBhbmQgbWlnaHQgYWZmZWN0IHVzLgorQW55d2F5LCBpZiB0aGVyZSBpcyBhbiBpc3N1ZTogdGhpcyBjb2RlIGlzIGRldmVsb3BlZCBvbiB4ODYgKHRvIGJlCitwcmVjaXNlOiBhIERFTEwgUEMgd2l0aCBhIEQ5MjAgSW50ZWwgQ1BVKQorCitBbmQgb2YgY291cnNlIHRoZSBwZXJmb3JtYW5jZSBtaWdodCBkZXBlbmQgb24gYWxpZ25tZW50LCBidXQgSSBleHBlY3QKK3RoYXQgdGhlIEkvTyBidWZmZXJzIGluIHRoZSBuYW5kIGRyaXZlciBhcmUgYWxpZ25lZCBwcm9wZXJseSAoYW5kCitvdGhlcndpc2UgdGhhdCBzaG91bGQgYmUgZml4ZWQgdG8gZ2V0IG1heGltdW0gcGVyZm9ybWFuY2UpLgorCitMZXQncyBnaXZlIGl0IGEgdHJ5Li4uCisKKworQXR0ZW1wdCAyCis9PT09PT09PT0KKworZXh0ZXJuIGNvbnN0IGNoYXIgcGFyaXR5WzI1Nl07CisKK3ZvaWQgZWNjMihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmNvZGUpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYnAgPSAodW5zaWduZWQgbG9uZyAqKWJ1ZjsKKyAgICB1bnNpZ25lZCBsb25nIGN1cjsKKyAgICB1bnNpZ25lZCBsb25nIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGxvbmcgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQgbG9uZyBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsgcnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEwID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICAvKgorICAgICAgIHdlIG5lZWQgdG8gYWRhcHQgdGhlIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGhlIGZhY3QgdGhhdCBycCB2YXJzIGFyZSBub3cKKyAgICAgICBsb25nOyBhbHNvIHRoZSBjb2x1bW4gcGFyaXR5IGNhbGN1bGF0aW9uIG5lZWRzIHRvIGJlIGNoYW5nZWQuCisgICAgICAgd2UnbGwgYnJpbmcgcnA0IHRvIDE1IGJhY2sgdG8gc2luZ2xlIGJ5dGUgZW50aXRpZXMgYnkgc2hpZnRpbmcgYW5kCisgICAgICAgeG9yaW5nCisgICAgKi8KKyAgICBycDQgXj0gKHJwNCA+PiAxNik7IHJwNCBePSAocnA0ID4+IDgpOyBycDQgJj0gMHhmZjsKKyAgICBycDUgXj0gKHJwNSA+PiAxNik7IHJwNSBePSAocnA1ID4+IDgpOyBycDUgJj0gMHhmZjsKKyAgICBycDYgXj0gKHJwNiA+PiAxNik7IHJwNiBePSAocnA2ID4+IDgpOyBycDYgJj0gMHhmZjsKKyAgICBycDcgXj0gKHJwNyA+PiAxNik7IHJwNyBePSAocnA3ID4+IDgpOyBycDcgJj0gMHhmZjsKKyAgICBycDggXj0gKHJwOCA+PiAxNik7IHJwOCBePSAocnA4ID4+IDgpOyBycDggJj0gMHhmZjsKKyAgICBycDkgXj0gKHJwOSA+PiAxNik7IHJwOSBePSAocnA5ID4+IDgpOyBycDkgJj0gMHhmZjsKKyAgICBycDEwIF49IChycDEwID4+IDE2KTsgcnAxMCBePSAocnAxMCA+PiA4KTsgcnAxMCAmPSAweGZmOworICAgIHJwMTEgXj0gKHJwMTEgPj4gMTYpOyBycDExIF49IChycDExID4+IDgpOyBycDExICY9IDB4ZmY7CisgICAgcnAxMiBePSAocnAxMiA+PiAxNik7IHJwMTIgXj0gKHJwMTIgPj4gOCk7IHJwMTIgJj0gMHhmZjsKKyAgICBycDEzIF49IChycDEzID4+IDE2KTsgcnAxMyBePSAocnAxMyA+PiA4KTsgcnAxMyAmPSAweGZmOworICAgIHJwMTQgXj0gKHJwMTQgPj4gMTYpOyBycDE0IF49IChycDE0ID4+IDgpOyBycDE0ICY9IDB4ZmY7CisgICAgcnAxNSBePSAocnAxNSA+PiAxNik7IHJwMTUgXj0gKHJwMTUgPj4gOCk7IHJwMTUgJj0gMHhmZjsKKyAgICBycDMgPSAocGFyID4+IDE2KTsgcnAzIF49IChycDMgPj4gOCk7IHJwMyAmPSAweGZmOworICAgIHJwMiA9IHBhciAmIDB4ZmZmZjsgcnAyIF49IChycDIgPj4gOCk7IHJwMiAmPSAweGZmOworICAgIHBhciBePSAocGFyID4+IDE2KTsKKyAgICBycDEgPSAocGFyID4+IDgpOyBycDEgJj0gMHhmZjsKKyAgICBycDAgPSAocGFyICYgMHhmZik7CisgICAgcGFyIF49IChwYXIgPj4gOCk7IHBhciAmPSAweGZmOworCisgICAgY29kZVswXSA9CisgICAgICAgIChwYXJpdHlbcnA3XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnA2XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnA1XSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnA0XSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAzXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAyXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnAxXSA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnAwXSk7CisgICAgY29kZVsxXSA9CisgICAgICAgIChwYXJpdHlbcnAxNV0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwMTRdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDEzXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnAxMl0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwMTFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDEwXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnA5XSAgPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwOF0pOworICAgIGNvZGVbMl0gPQorICAgICAgICAocGFyaXR5W3BhciAmIDB4ZjBdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MzNdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHg1NV0gPDwgMik7CisgICAgY29kZVswXSA9IH5jb2RlWzBdOworICAgIGNvZGVbMV0gPSB+Y29kZVsxXTsKKyAgICBjb2RlWzJdID0gfmNvZGVbMl07Cit9CisKK1RoZSBwYXJpdHkgYXJyYXkgaXMgbm90IHNob3duIGFueSBtb3JlLiBOb3RlIGFsc28gdGhhdCBmb3IgdGhlc2UKK2V4YW1wbGVzIEkga2luZGEgZGV2aWF0ZWQgZnJvbSBteSByZWd1bGFyIHByb2dyYW1taW5nIHN0eWxlIGJ5IGFsbG93aW5nCittdWx0aXBsZSBzdGF0ZW1lbnRzIG9uIGEgbGluZSwgbm90IHVzaW5nIHsgfSBpbiB0aGVuIGFuZCBlbHNlIGJsb2Nrcword2l0aCBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudCBhbmQgYnkgdXNpbmcgb3BlcmF0b3JzIGxpa2UgXj0KKworCitBbmFseXNpcyAyCis9PT09PT09PT09CisKK1RoZSBjb2RlIChvZiBjb3Vyc2UpIHdvcmtzLCBhbmQgaHVycmF5OiB3ZSBhcmUgYSBsaXR0bGUgYml0IGZhc3RlciB0aGFuCit0aGUgbGludXggZHJpdmVyIGNvZGUgKGFib3V0IDE1JSkuIEJ1dCB3YWl0LCBkb24ndCBjaGVlciB0b28gcXVpY2tseS4KK1RIZXJlIGlzIG1vcmUgdG8gYmUgZ2FpbmVkLgorSWYgd2UgbG9vayBhdCBlLmcuIHJwMTQgYW5kIHJwMTUgd2Ugc2VlIHRoYXQgd2UgZWl0aGVyIHhvciBvdXIgZGF0YSB3aXRoCitycDE0IG9yIHdpdGggcnAxNS4gSG93ZXZlciB3ZSBhbHNvIGhhdmUgcGFyIHdoaWNoIGdvZXMgb3ZlciBhbGwgZGF0YS4KK1RoaXMgbWVhbnMgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgcnAxNCBhcyBpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tCitycDE1IHRocm91Z2ggcnAxNCA9IHBhciBeIHJwMTU7Cisob3IgaWYgZGVzaXJlZCB3ZSBjYW4gYXZvaWQgY2FsY3VsYXRpbmcgcnAxNSBhbmQgY2FsY3VsYXRlIGl0IGZyb20KK3JwMTQpLiAgVGhhdCBpcyB3aHkgc29tZSBwbGFjZXMgcmVmZXIgdG8gaW52ZXJzZSBwYXJpdHkuCitPZiBjb3Vyc2UgdGhlIHNhbWUgdGhpbmcgaG9sZHMgZm9yIHJwNC81LCBycDYvNywgcnA4LzksIHJwMTAvMTEgYW5kIHJwMTIvMTMuCitFZmZlY3RpdmVseSB0aGlzIG1lYW5zIHdlIGNhbiBlbGltaW5hdGUgdGhlIGVsc2UgY2xhdXNlIGZyb20gdGhlIGlmCitzdGF0ZW1lbnRzLiBBbHNvIHdlIGNhbiBvcHRpbWlzZSB0aGUgY2FsY3VsYXRpb24gaW4gdGhlIGVuZCBhIGxpdHRsZSBiaXQKK2J5IGdvaW5nIGZyb20gbG9uZyB0byBieXRlIGZpcnN0LiBBY3R1YWxseSB3ZSBjYW4gZXZlbiBhdm9pZCB0aGUgdGFibGUKK2xvb2t1cHMKKworQXR0ZW1wdCAzCis9PT09PT09PT0KKworT2RkIHJlcGxhY2VkOgorICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOword2l0aAorICAgICAgICBpZiAoaSAmIDB4MDEpIHJwNSBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDkgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwMTEgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwMTMgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTUgXj0gY3VyOworCisgICAgICAgIGFuZCBvdXRzaWRlIHRoZSBsb29wIGFkZGVkOgorICAgIHJwNCAgPSBwYXIgXiBycDU7CisgICAgcnA2ICA9IHBhciBeIHJwNzsKKyAgICBycDggID0gcGFyIF4gcnA5OworICAgIHJwMTAgID0gcGFyIF4gcnAxMTsKKyAgICBycDEyICA9IHBhciBeIHJwMTM7CisgICAgcnAxNCAgPSBwYXIgXiBycDE1OworCitBbmQgYWZ0ZXIgdGhhdCB0aGUgY29kZSB0YWtlcyBhYm91dCAzMCUgbW9yZSB0aW1lLCBhbHRob3VnaCB0aGUgbnVtYmVyIG9mCitzdGF0ZW1lbnRzIGlzIHJlZHVjZWQuIFRoaXMgaXMgYWxzbyByZWZsZWN0ZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuCisKKworQW5hbHlzaXMgMworPT09PT09PT09PQorCitWZXJ5IHdlaXJkLiBHdWVzcyBpdCBoYXMgdG8gZG8gd2l0aCBjYWNoaW5nIG9yIGluc3RydWN0aW9uIHBhcmFsbGVsbGlzbQorb3Igc28uIEkgYWxzbyB0cmllZCBvbiBhbiBlZWVQQyAoQ2VsZXJvbiwgY2xvY2tlZCBhdCA5MDAgTWh6KS4gSW50ZXJlc3RpbmcKK29ic2VydmF0aW9uIHdhcyB0aGF0IHRoaXMgb25lIGlzIG9ubHkgMzAlIHNsb3dlciAoYWNjb3JkaW5nIHRvIHRpbWUpCitleGVjdXRpbmcgdGhlIGNvZGUgYXMgbXkgM0doeiBEOTIwIHByb2Nlc3Nvci4KKworV2VsbCwgaXQgd2FzIGV4cGVjdGVkIG5vdCB0byBiZSBlYXN5IHNvIG1heWJlIGluc3RlYWQgbW92ZSB0byBhCitkaWZmZXJlbnQgdHJhY2s6IGxldCdzIG1vdmUgYmFjayB0byB0aGUgY29kZSBmcm9tIGF0dGVtcHQyIGFuZCBkbyBzb21lCitsb29wIHVucm9sbGluZy4gVGhpcyB3aWxsIGVsaW1pbmF0ZSBhIGZldyBpZiBzdGF0ZW1lbnRzLiBJJ2xsIHRyeQorZGlmZmVyZW50IGFtb3VudHMgb2YgdW5yb2xsaW5nIHRvIHNlZSB3aGF0IHdvcmtzIGJlc3QuCisKKworQXR0ZW1wdCA0Cis9PT09PT09PT0KKworVW5yb2xsZWQgdGhlIGxvb3AgMSwgMiwgMyBhbmQgNCB0aW1lcy4KK0ZvciA0IHRoZSBjb2RlIHN0YXJ0cyB3aXRoOgorCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBycDQgXj0gY3VyOworICAgICAgICBycDYgXj0gY3VyOworICAgICAgICBycDggXj0gY3VyOworICAgICAgICBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEpIHJwMTMgXj0gY3VyOyBlbHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MikgcnAxNSBePSBjdXI7IGVsc2UgcnAxNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBycDUgXj0gY3VyOworICAgICAgICBycDYgXj0gY3VyOworICAgICAgICAuLi4KKworCitBbmFseXNpcyA0Cis9PT09PT09PT09CisKK1Vucm9sbGluZyBvbmNlIGdhaW5zIGFib3V0IDE1JQorVW5yb2xsaW5nIHR3aWNlIGtlZXBzIHRoZSBnYWluIGF0IGFib3V0IDE1JQorVW5yb2xsaW5nIHRocmVlIHRpbWVzIGdpdmVzIGEgZ2FpbiBvZiAzMCUgY29tcGFyZWQgdG8gYXR0ZW1wdCAyLgorVW5yb2xsaW5nIGZvdXIgdGltZXMgZ2l2ZXMgYSBtYXJnaW5hbCBpbXByb3ZlbWVudCBjb21wYXJlZCB0byB1bnJvbGxpbmcKK3RocmVlIHRpbWVzLgorCitJIGRlY2lkZWQgdG8gcHJvY2VlZCB3aXRoIGEgZm91ciB0aW1lIHVucm9sbGVkIGxvb3AgYW55d2F5LiBJdCB3YXMgbXkgZ3V0CitmZWVsaW5nIHRoYXQgaW4gdGhlIG5leHQgc3RlcHMgSSB3b3VsZCBvYnRhaW4gYWRkaXRpb25hbCBnYWluIGZyb20gaXQuCisKK1RoZSBuZXh0IHN0ZXAgd2FzIHRyaWdnZXJlZCBieSB0aGUgZmFjdCB0aGF0IHBhciBjb250YWlucyB0aGUgeG9yIG9mIGFsbAorYnl0ZXMgYW5kIHJwNCBhbmQgcnA1IGVhY2ggY29udGFpbiB0aGUgeG9yIG9mIGhhbGYgb2YgdGhlIGJ5dGVzLgorU28gaW4gZWZmZWN0IHBhciA9IHJwNCBeIHJwNS4gQnV0IGFzIHhvciBpcyBjb21tdXRhdGl2ZSB3ZSBjYW4gYWxzbyBzYXkKK3RoYXQgcnA1ID0gcGFyIF4gcnA0LiBTbyBubyBuZWVkIHRvIGtlZXAgYm90aCBycDQgYW5kIHJwNSBhcm91bmQuIFdlIGNhbgorZWxpbWluYXRlIHJwNSAob3IgcnA0LCBidXQgSSBhbHJlYWR5IGZvcmVzYXcgYW5vdGhlciBvcHRpbWlzYXRpb24pLgorVGhlIHNhbWUgaG9sZHMgZm9yIHJwNi83LCBycDgvOSwgcnAxMC8xMSBycDEyLzEzIGFuZCBycDE0LzE1LgorCisKK0F0dGVtcHQgNQorPT09PT09PT09CisKK0VmZmVjdGl2ZWx5IHNvIGFsbCBvZGQgZGlnaXQgcnAgYXNzaWdubWVudHMgaW4gdGhlIGxvb3Agd2VyZSByZW1vdmVkLgorVGhpcyBpbmNsdWRlZCB0aGUgZWxzZSBjbGF1c2Ugb2YgdGhlIGlmIHN0YXRlbWVudHMuCitPZiBjb3Vyc2UgYWZ0ZXIgdGhlIGxvb3Agd2UgbmVlZCB0byBjb3JyZWN0IHRoaW5ncyBieSBhZGRpbmcgY29kZSBsaWtlOgorICAgIHJwNSA9IHBhciBeIHJwNDsKK0Fsc28gdGhlIGluaXRpYWwgYXNzaWdubWVudHMgKHJwNSA9IDA7IGV0YykgY291bGQgYmUgcmVtb3ZlZC4KK0Fsb25nIHRoZSBsaW5lIEkgYWxzbyByZW1vdmVkIHRoZSBpbml0aWFsaXNhdGlvbiBvZiBycDAvMS8yLzMuCisKKworQW5hbHlzaXMgNQorPT09PT09PT09PQorCitNZWFzdXJlbWVudHMgc2hvd2VkIHRoaXMgd2FzIGEgZ29vZCBtb3ZlLiBUaGUgcnVuLXRpbWUgcm91Z2hseSBoYWx2ZWQKK2NvbXBhcmVkIHdpdGggYXR0ZW1wdCA0IHdpdGggNCB0aW1lcyB1bnJvbGxlZCwgYW5kIHdlIG9ubHkgcmVxdWlyZSAxLzNyZAorb2YgdGhlIHByb2Nlc3NvciB0aW1lIGNvbXBhcmVkIHRvIHRoZSBjdXJyZW50IGNvZGUgaW4gdGhlIGxpbnV4IGtlcm5lbC4KKworSG93ZXZlciwgc3RpbGwgSSB0aG91Z2h0IHRoZXJlIHdhcyBtb3JlLiBJIGRpZG4ndCBsaWtlIGFsbCB0aGUgaWYKK3N0YXRlbWVudHMuIFdoeSBub3Qga2VlcCBhIHJ1bm5pbmcgcGFyaXR5IGFuZCBvbmx5IGtlZXAgdGhlIGxhc3QgaWYKK3N0YXRlbWVudC4gVGltZSBmb3IgeWV0IGFub3RoZXIgdmVyc2lvbiEKKworCitBdHRlbXB0IDYKKz09PT09PT09PQorCitUSGUgY29kZSB3aXRoaW4gdGhlIGZvciBsb29wIHdhcyBjaGFuZ2VkIHRvOgorCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgID0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IHRtcHBhcjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gdG1wcGFyOworCisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDEwIF49IHRtcHBhcjsKKworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsgcnA4IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7IHJwOCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDggXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IGN1cjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKworCSAgICBwYXIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDEpID09IDApIHJwMTIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDIpID09IDApIHJwMTQgXj0gdG1wcGFyOworICAgIH0KKworQXMgeW91IGNhbiBzZWUgdG1wcGFyIGlzIHVzZWQgdG8gYWNjdW11bGF0ZSB0aGUgcGFyaXR5IHdpdGhpbiBhIGZvcgoraXRlcmF0aW9uLiBJbiB0aGUgbGFzdCAzIHN0YXRlbWVudHMgaXMgaXMgYWRkZWQgdG8gcGFyIGFuZCwgaWYgbmVlZGVkLAordG8gcnAxMiBhbmQgcnAxNC4KKworV2hpbGUgbWFraW5nIHRoZSBjaGFuZ2VzIEkgYWxzbyBmb3VuZCB0aGF0IEkgY291bGQgZXhwbG9pdCB0aGF0IHRtcHBhcgorY29udGFpbnMgdGhlIHJ1bm5pbmcgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbi4gU28gaW5zdGVhZCBvZiBoYXZpbmc6CitycDQgXj0gY3VyOyBycDYgPSBjdXI7CitJIHJlbW92ZWQgdGhlIHJwNiA9IGN1cjsgc3RhdGVtZW50IGFuZCBkaWQgcnA2IF49IHRtcHBhcjsgb24gbmV4dAorc3RhdGVtZW50LiBBIHNpbWlsYXIgY2hhbmdlIHdhcyBkb25lIGZvciBycDggYW5kIHJwMTAKKworCitBbmFseXNpcyA2Cis9PT09PT09PT09CisKK01lYXN1cmluZyB0aGlzIGNvZGUgYWdhaW4gc2hvd2VkIGJpZyBnYWluLiBXaGVuIGV4ZWN1dGluZyB0aGUgb3JpZ2luYWwKK2xpbnV4IGNvZGUgMSBtaWxsaW9uIHRpbWVzLCB0aGlzIHRvb2sgYWJvdXQgMSBzZWNvbmQgb24gbXkgc3lzdGVtLgorKHVzaW5nIHRpbWUgdG8gbWVhc3VyZSB0aGUgcGVyZm9ybWFuY2UpLiBBZnRlciB0aGlzIGl0ZXJhdGlvbiBJIHdhcyBiYWNrCit0byAwLjA3NSBzZWMuIEFjdHVhbGx5IEkgaGFkIHRvIGRlY2lkZSB0byBzdGFydCBtZWFzdXJpbmcgb3ZlciAxMAorbWlsbGlvbiBpbnRlcmF0aW9ucyBpbiBvcmRlciBub3QgdG8gbG9vc2UgdG9vIG11Y2ggYWNjdXJhY3kuIFRoaXMgb25lCitkZWZpbml0ZWx5IHNlZW1lZCB0byBiZSB0aGUgamFja3BvdCEKKworVGhlcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgcm9vbSBmb3IgaW1wcm92ZW1lbnQgdGhvdWdoLiBUaGVyZSBhcmUgdGhyZWUKK3BsYWNlcyB3aXRoIHN0YXRlbWVudHM6CitycDQgXj0gY3VyOyBycDYgXj0gY3VyOworSXQgc2VlbXMgbW9yZSBlZmZpY2llbnQgdG8gYWxzbyBtYWludGFpbiBhIHZhcmlhYmxlIHJwNF82IGluIHRoZSB3aGlsZQorbG9vcDsgVGhpcyBlbGltaW5hdGVzIDMgc3RhdGVtZW50cyBwZXIgbG9vcC4gT2YgY291cnNlIGFmdGVyIHRoZSBsb29wIHdlCituZWVkIHRvIGNvcnJlY3QgYnkgYWRkaW5nOgorICAgIHJwNCBePSBycDRfNjsKKyAgICBycDYgXj0gcnA0XzYKK0Z1cnRoZXJtb3JlIHRoZXJlIGFyZSA0IHNlcXVlbnRpYWwgYXNzaW5nbWVudHMgdG8gcnA4LiBUaGlzIGNhbiBiZQorZW5jb2RlZCBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBzYXZpbmcgdG1wcGFyIGJlZm9yZSB0aG9zZSA0IGxpbmVzCithbmQgbGF0ZXIgZG8gcnA4ID0gcnA4IF4gdG1wcGFyIF4gbm90cnA4OworKHdoZXJlIG5vdHJwOCBpcyB0aGUgdmFsdWUgb2YgcnA4IGJlZm9yZSB0aG9zZSA0IGxpbmVzKS4KK0FnYWluIGEgdXNlIG9mIHRoZSBjb21tdXRhdGl2ZSBwcm9wZXJ0eSBvZiB4b3IuCitUaW1lIGZvciBhIG5ldyB0ZXN0IQorCisKK0F0dGVtcHQgNworPT09PT09PT09CisKK1RoZSBuZXcgY29kZSBub3cgbG9va3MgbGlrZToKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyICA9IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSB0bXBwYXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IHRtcHBhcjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDEwIF49IHRtcHBhcjsKKworCSAgICBub3RycDggPSB0bXBwYXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisJICAgIHJwOCA9IHJwOCBeIHRtcHBhciBeIG5vdHJwODsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCisJICAgIHBhciBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MSkgPT0gMCkgcnAxMiBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MikgPT0gMCkgcnAxNCBePSB0bXBwYXI7CisgICAgfQorICAgIHJwNCBePSBycDRfNjsKKyAgICBycDYgXj0gcnA0XzY7CisKKworTm90IGEgYmlnIGNoYW5nZSwgYnV0IGV2ZXJ5IHBlbm55IGNvdW50cyA6LSkKKworCitBbmFseXNpcyA3Cis9PT09PT09PT09CisKK0FjdXRhbGx5IHRoaXMgbWFkZSB0aGluZ3Mgd29yc2UuIE5vdCB2ZXJ5IG11Y2gsIGJ1dCBJIGRvbid0IHdhbnQgdG8gbW92ZQoraW50byB0aGUgd3JvbmcgZGlyZWN0aW9uLiBNYXliZSBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgbGF0ZXIuIENvdWxkCitoYXZlIHRvIGRvIHdpdGggY2FjaGluZyBhZ2Fpbi4KKworR3Vlc3MgdGhhdCBpcyB3aGF0IHRoZXJlIGlzIHRvIHdpbiB3aXRoaW4gdGhlIGxvb3AuIE1heWJlIHVucm9sbGluZyBvbmUKK21vcmUgdGltZSB3aWxsIGhlbHAuIEknbGwga2VlcCB0aGUgb3B0aW1pc2F0aW9ucyBmcm9tIDcgZm9yIG5vdy4KKworCitBdHRlbXB0IDgKKz09PT09PT09PQorCitVbnJvbGxlZCB0aGUgbG9vcCBvbmUgbW9yZSB0aW1lLgorCisKK0FuYWx5c2lzIDgKKz09PT09PT09PT0KKworVGhpcyBtYWtlcyB0aGluZ3Mgd29yc2UuIExldCdzIHN0aWNrIHdpdGggYXR0ZW1wdCA2IGFuZCBjb250aW51ZSBmcm9tIHRoZXJlLgorQWx0aG91Z2ggaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB3aXRoaW4gdGhlIGxvb3AgY2Fubm90IGJlIG9wdGltaXNlZAorZnVydGhlciB0aGVyZSBpcyBzdGlsbCByb29tIHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBlY2MgY29kZXMuCitXZSBjYW4gc2ltcGx5IGNhbGN1YWxhdGUgdGhlIHRvdGFsIHBhcml0eS4gSWYgdGhpcyBpcyAwIHRoZW4gcnA0ID0gcnA1CitldGMuIElmIHRoZSBwYXJpdHkgaXMgMSwgdGhlbiBycDQgPSAhcnA1OworQnV0IGlmIHJwNCA9IHJwNSB3ZSBkbyBub3QgbmVlZCBycDUgZXRjLiBXZSBjYW4ganVzdCB3cml0ZSB0aGUgZXZlbiBiaXRzCitpbiB0aGUgcmVzdWx0IGJ5dGUgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UKKyAgICBjb2RlWzBdIHw9IChjb2RlWzBdIDw8IDEpOworTGV0cyB0ZXN0IHRoaXMuCisKKworQXR0ZW1wdCA5Cis9PT09PT09PT0KKworQ2hhbmdlZCB0aGUgY29kZSBidXQgYWdhaW4gdGhpcyBzbGlnaHRseSBkZWdyYWRlcyBwZXJmb3JtYW5jZS4gVHJpZWQgYWxsCitraW5kIG9mIG90aGVyIHRoaW5ncywgbGlrZSBoYXZpbmcgZGVkaWNhdGVkIHBhcml0eSBhcnJheXMgdG8gYXZvaWQgdGhlCitzaGlmdCBhZnRlciBwYXJpdHlbcnA3XSA8PCA3OyBObyBnYWluLgorQ2hhbmdlIHRoZSBsb29rdXAgdXNpbmcgdGhlIHBhcml0eSBhcnJheSBieSB1c2luZyBzaGlmdCBvcGVyYXRvcnMgKGUuZy4KK3JlcGxhY2UgcGFyaXR5W3JwN10gPDwgNyB3aXRoOgorcnA3IF49IChycDcgPDwgNCk7CitycDcgXj0gKHJwNyA8PCAyKTsKK3JwNyBePSAocnA3IDw8IDEpOworcnA3ICY9IDB4ODA7CitObyBnYWluLgorCitUaGUgb25seSBtYXJnaW5hbCBjaGFuZ2Ugd2FzIGludmVydGluZyB0aGUgcGFyaXR5IGJpdHMsIHNvIHdlIGNhbiByZW1vdmUKK3RoZSBsYXN0IHRocmVlIGludmVydCBzdGF0ZW1lbnRzLgorCitBaCB3ZWxsLCBwaXR5IHRoaXMgZG9lcyBub3QgZGVsaXZlciBtb3JlLiBUaGVuIGFnYWluIDEwIG1pbGxpb24KK2l0ZXJhdGlvbnMgdXNpbmcgdGhlIGxpbnV4IGRyaXZlciBjb2RlIHRha2VzIGJldHdlZW4gMTMgYW5kIDEzLjUKK3NlY29uZHMsIHdoZXJlYXMgbXkgY29kZSBub3cgdGFrZXMgYWJvdXQgMC43MyBzZWNvbmRzIGZvciB0aG9zZSAxMAorbWlsbGlvbiBpdGVyYXRpb25zLiBTbyBiYXNpY2FsbHkgSSd2ZSBpbXByb3ZlZCB0aGUgcGVyZm9ybWFuY2UgYnkgYQorZmFjdG9yIDE4IG9uIG15IHN5c3RlbS4gTm90IHRoYXQgYmFkLiBPZiBjb3Vyc2Ugb24gZGlmZmVyZW50IGhhcmR3YXJlCit5b3Ugd2lsbCBnZXQgZGlmZmVyZW50IHJlc3VsdHMuIE5vIHdhcnJhbnRpZXMhCisKK0J1dCBvZiBjb3Vyc2UgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhIGZyZWUgbHVuY2guIFRoZSBjb2Rlc2l6ZSBhbG1vc3QKK3RyaXBsZWQgKGZyb20gNTYyIGJ5dGVzIHRvIDE0MzQgYnl0ZXMpLiBUaGVuIGFnYWluLCBpdCBpcyBub3QgdGhhdCBtdWNoLgorCisKK0NvcnJlY3RpbmcgZXJyb3JzCis9PT09PT09PT09PT09PT09PQorCitGb3IgY29ycmVjdGluZyBlcnJvcnMgSSBhZ2FpbiB1c2VkIHRoZSBTVCBhcHBsaWNhdGlvbiBub3RlIGFzIGEgc3RhcnRlciwKK2J1dCBJIGFsc28gcGVla2VkIGF0IHRoZSBleGlzdGluZyBjb2RlLgorVGhlIGFsZ29yaXRobSBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSnVzdCB4b3IgdGhlIGdpdmVuIGFuZAordGhlIGNhbGN1bGF0ZWQgZWNjLiBJZiBhbGwgYnl0ZXMgYXJlIDAgdGhlcmUgaXMgbm8gcHJvYmxlbS4gSWYgMTEgYml0cworYXJlIDEgd2UgaGF2ZSBvbmUgY29ycmVjdGFibGUgYml0IGVycm9yLiBJZiB0aGVyZSBpcyAxIGJpdCAxLCB3ZSBoYXZlIGFuCitlcnJvciBpbiB0aGUgZ2l2ZW4gZWNjIGNvZGUuCitJdCBwcm92ZWQgdG8gYmUgZmFzdGVzdCB0byBkbyBzb21lIHRhYmxlIGxvb2t1cHMuIFBlcmZvcm1hbmNlIGdhaW4KK2ludHJvZHVjZWQgYnkgdGhpcyBpcyBhYm91dCBhIGZhY3RvciAyIG9uIG15IHN5c3RlbSB3aGVuIGEgcmVwYWlyIGhhZCB0bworYmUgZG9uZSwgYW5kIDElIG9yIHNvIGlmIG5vIHJlcGFpciBoYWQgdG8gYmUgZG9uZS4KK0NvZGUgc2l6ZSBpbmNyZWFzZWQgZnJvbSAzMzAgYnl0ZXMgdG8gNjg2IGJ5dGVzIGZvciB0aGlzIGZ1bmN0aW9uLgorKGdjYyA0LjIsIC1PMykKKworCitDb25jbHVzaW9uCis9PT09PT09PT09CisKK1RoZSBnYWluIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGVjYyBpcyB0cmVtZW5kb3VzLiBPbSBteSBkZXZlbG9wbWVudCBoYXJkd2FyZQorYSBzcGVlZHVwIG9mIGEgZmFjdG9yIG9mIDE4IGZvciBlY2MgY2FsY3VsYXRpb24gd2FzIGFjaGlldmVkLiBPbiBhIHRlc3Qgb24gYW4KK2VtYmVkZGVkIHN5c3RlbSB3aXRoIGEgTUlQUyBjb3JlIGEgZmFjdG9yIDcgd2FzIG9idGFpbmVkLgorT24gIGEgdGVzdCB3aXRoIGEgTGlua3N5cyBOU0xVMiAoQVJNdjVURSBwcm9jZXNzb3IpIHRoZSBzcGVlZHVwIHdhcyBhIGZhY3RvcgorNSAoYmlnIGVuZGlhbiBtb2RlLCBnY2MgNC4xLjIsIC1PMykKK0ZvciBjb3JyZWN0aW9uIG5vdCBtdWNoIGdhaW4gY291bGQgYmUgb2J0YWluZWQgKGFzIGJpdGZsaXBzIGFyZSByYXJlKS4gVGhlbgorYWdhaW4gdGhlcmUgYXJlIGFsc28gbXVjaCBsZXNzIGN5Y2xlcyBzcGVudCB0aGVyZS4KKworSXQgc2VlbXMgdGhlcmUgaXMgbm90IG11Y2ggbW9yZSBnYWluIHBvc3NpYmxlIGluIHRoaXMsIGF0IGxlYXN0IHdoZW4KK3Byb2dyYW1tZWQgaW4gQy4gT2YgY291cnNlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHNxdWVlemUgc29tZXRoaW5nIG1vcmUKK291dCBvZiBpdCB3aXRoIGFuIGFzc2VtYmxlciBwcm9ncmFtLCBidXQgZHVlIHRvIHBpcGVsaW5lIGJlaGF2aW91ciBldGMKK3RoaXMgaXMgdmVyeSB0cmlja3kgKGF0IGxlYXN0IGZvciBpbnRlbCBodykuCisKK0F1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzCitDb3B5cmlnaHQgKEMpIDIwMDggS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKaW5kZXggNjM4N2QzZC4uYzcyNWQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKQEAgLTMsNyArMyw3IEBACiAtLS0tCiAKIFRoaXMgZG9jdW1lbnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IENpcnJ1cyBMb2dpYyBmb3Iga2VybmVsIDIuMi41LiAgVGhpcyB2ZXJzaW9uCi1oYXMgYmVlbiB1cGRhdGVkIGZvciAyLjMuNDggYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgoraGFzIGJlZW4gdXBkYXRlZCBmb3IgMi4zLjQ4IGJ5IEFuZHJldyBNb3J0b24uCiAKIENpcnJ1cyBtYWtlIGEgY29weSBvZiB0aGlzIGRyaXZlciBhdmFpbGFibGUgYXQgdGhlaXIgd2Vic2l0ZSwgYXMKIGRlc2NyaWJlZCBiZWxvdy4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgdXNlIHRoZSBkcml2ZXIgdmVyc2lvbiB3aGljaApAQCAtNjkwLDcgKzY5MCw3IEBACiA2LjQgQ3VycmVudCBtYWludGFpbmVyCiAKIEluIEZlYnJ1YXJ5IDIwMDAgdGhlIG1haW50ZW5hbmNlIG9mIHRoaXMgZHJpdmVyIHdhcyBhc3N1bWVkIGJ5IEFuZHJldwotTW9ydG9uIDxha3BtQHppcC5jb20uYXU+CitNb3J0b24uCiAKIDYuNSBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Bob25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGhvbmV0LnR4dAppbmRleCAwZTZlNTkyLi42YTA3ZTQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGhvbmV0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGhvbmV0LnR4dApAQCAtMTQ2LDggKzE0Niw4IEBACiBXaGVuIHBvbGxpbmcgYSBjb25uZWN0ZWQgcGlwZSBzb2NrZXQgZm9yIHdyaXRhYmlsaXR5LCB0aGVyZSBpcyBhbgogaW50cmluc2ljIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgd3JpdGFiaWxpdHkgbWlnaHQgYmUgbG9zdCBiZXR3ZWVuIHRoZQogcG9sbGluZyBhbmQgdGhlIHdyaXRpbmcgc3lzdGVtIGNhbGxzLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2NrZXQgd2lsbAotYmxvY2sgdW50aWwgd3JpdGUgYmVjYXVzZSBwb3NzaWJsZSBhZ2FpbiwgdW5sZXNzIG5vbi1ibG9ja2luZyBtb2RlCi1iZWNvbWVzIGVuYWJsZWQuCitibG9jayB1bnRpbCB3cml0ZSBiZWNvbWVzIHBvc3NpYmxlIGFnYWluLCB1bmxlc3Mgbm9uLWJsb2NraW5nIG1vZGUKK2lzIGVuYWJsZWQuCiAKIAogVGhlIHBpcGUgcHJvdG9jb2wgcHJvdmlkZXMgdHdvIHNvY2tldCBvcHRpb25zIGF0IHRoZSBTT0xfUE5QSVBFIGxldmVsOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dAppbmRleCA2MzU2ZDNmLi5iZDcwOTc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dApAQCAtMSw1ICsxLDUgQEAKIERvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0Ci1BbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CitBbmRyZXcgTW9ydG9uCiAzMCBBcHJpbCAyMDAwCiAKIApAQCAtMTEsNyArMTEsNyBAQAogRG9uIGlzIG5vIGxvbmdlciB0aGUgcHJpbWUgbWFpbnRhaW5lciBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlci4gCiBQbGVhc2UgcmVwb3J0IHByb2JsZW1zIHRvIG9uZSBvciBtb3JlIG9mOgogCi0gIEFuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+CisgIEFuZHJldyBNb3J0b24KICAgTmV0ZGV2IG1haWxpbmcgbGlzdCA8bmV0ZGV2QHZnZXIua2VybmVsLm9yZz4KICAgTGludXgga2VybmVsIG1haWxpbmcgbGlzdCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4KIApAQCAtMzA1LDExICszMDUsNiBAQAogCiAJZnRwOi8vZnRwLjNjb20uY29tL3B1Yi9uaWMvM2M5MHgvM2M5MHh4Mi5leGUKIAotRHJpdmVyIHVwZGF0ZXMgYW5kIGEgZGV0YWlsZWQgY2hhbmdlbG9nIGZvciB0aGUgbW9kaWZpY2F0aW9ucyB3aGljaAotd2VyZSBtYWRlIGZvciB0aGUgMi4zLzIsNCBzZXJpZXMga2VybmVsIGlzIGF2YWlsYWJsZSBhdAotCi0gICAgIGh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC8jM2M1OXgtYmMKLQogCiBBdXRvbmVnb3RpYXRpb24gbm90ZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3MycmFtLnR4dAppbmRleCBiMDVmNTEyLi4yZWJkYzYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3MycmFtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3MycmFtLnR4dApAQCAtNTQsMyArNTQsMjEgQEAKIHRoYXQgInJhZGVvbmZiIiBzaW1wbHkgY2Fubm90IHJlc3VtZSB0aGF0IGRldmljZSAtIGl0IHRyaWVzIHRvIHNldCB0aGUKIFBMTCdzLCBhbmQgaXQganVzdCBfaGFuZ3NfLiBVc2luZyB0aGUgcmVndWxhciBWR0EgY29uc29sZSBhbmQgbGV0dGluZyBYCiByZXN1bWUgaXQgaW5zdGVhZCB3b3JrcyBmaW5lLgorCitOT1RFCis9PT09CitwbV90cmFjZSB1c2VzIHRoZSBzeXN0ZW0ncyBSZWFsIFRpbWUgQ2xvY2sgKFJUQykgdG8gc2F2ZSB0aGUgbWFnaWMgbnVtYmVyLgorUmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIFJUQyBpcyB0aGUgb25seSByZWxpYWJseSBhdmFpbGFibGUgcGllY2Ugb2YKK2hhcmR3YXJlIGR1cmluZyByZXN1bWUgb3BlcmF0aW9ucyB3aGVyZSBhIHZhbHVlIGNhbiBiZSBzZXQgdGhhdCB3aWxsCitzdXJ2aXZlIGEgcmVib290LgorCitDb25zZXF1ZW5jZSBpcyB0aGF0IGFmdGVyIGEgcmVzdW1lIChldmVuIGlmIGl0IGlzIHN1Y2Nlc3NmdWwpIHlvdXIgc3lzdGVtCitjbG9jayB3aWxsIGhhdmUgYSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWdpYyBtdW1iZXIgaW5zdGVhZCBvZiB0aGUKK2NvcnJlY3QgZGF0ZS90aW1lISBJdCBpcyB0aGVyZWZvcmUgYWR2aXNhYmxlIHRvIHVzZSBhIHByb2dyYW0gbGlrZSBudHAtZGF0ZQorb3IgcmRhdGUgdG8gcmVzZXQgdGhlIGNvcnJlY3QgZGF0ZS90aW1lIGZyb20gYW4gZXh0ZXJuYWwgdGltZSBzb3VyY2Ugd2hlbgordXNpbmcgdGhpcyB0cmFjZSBvcHRpb24uCisKK0FzIHRoZSBjbG9jayBrZWVwcyB0aWNraW5nIGl0IGlzIGFsc28gZXNzZW50aWFsIHRoYXQgdGhlIHJlYm9vdCBpcyBkb25lCitxdWlja2x5IGFmdGVyIHRoZSByZXN1bWUgZmFpbHVyZS4gVGhlIHRyYWNlIG9wdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHNlY29uZHMKK29yIHRoZSBsb3cgb3JkZXIgYml0cyBvZiB0aGUgbWludXRlcyBvZiB0aGUgUlRDLCBidXQgYSB0b28gbG9uZyBkZWxheSB3aWxsCitjb3JydXB0IHRoZSBtYWdpYyB2YWx1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWAppbmRleCAyOWQ4MzljLi5lMzk2MGI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjLzAwLUlOREVYCkBAIC0xOCwxMCArMTgsNiBAQAogCS0gTGludXggMi42Lnggb24gTVBDNTJ4eCBmYW1pbHkKIG1wYzUyeHgtZGV2aWNlLXRyZWUtYmluZGluZ3MudHh0CiAJLSBNUEM1MjAwIERldmljZSBUcmVlIEJpbmRpbmdzCi1wcGNfaHRhYi50eHQKLQktIGluZm8gYWJvdXQgdGhlIExpbnV4L1BQQyAvcHJvYy9wcGNfaHRhYiBlbnRyeQotc21wLnR4dAotCS0gdXNlIGFuZCBzdGF0ZSBpbmZvIGFib3V0IExpbnV4L1BQQyBvbiBNUCBtYWNoaW5lcwogc291bmQudHh0CiAJLSBpbmZvIG9uIHNvdW5kIHN1cHBvcnQgdW5kZXIgTGludXgvUFBDCiB6SW1hZ2VfbGF5b3V0LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84M3h4LTUxMngtcGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE0NjUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQKQEAgLTAsMCArMSw0MCBAQAorKiBGcmVlc2NhbGUgODN4eCBhbmQgNTEyeCBQQ0kgYnJpZGdlcworCitGcmVlc2NhbGUgODN4eCBhbmQgNTEyeCBTT0NzIGluY2x1ZGUgdGhlIHNhbWUgcGNpIGJyaWRnZSBjb3JlLgorCis4M3h4LzUxMnggc3BlY2lmaWMgbm90ZXM6CistIHJlZzogc2hvdWxkIGNvbnRhaW4gdHdvIGFkZHJlc3MgbGVuZ3RoIHR1cGxlcworICAgIFRoZSBmaXJzdCBpcyBmb3IgdGhlIGludGVybmFsIHBjaSBicmlkZ2UgcmVnaXN0ZXJzCisgICAgVGhlIHNlY29uZCBpcyBmb3IgdGhlIHBjaSBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycworCitFeGFtcGxlIChNUEM4MzEzRVJEQikKKwlwY2kwOiBwY2lAZTAwMDg1MDAgeworCQljZWxsLWluZGV4ID0gPDE+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkvKiBJRFNFTCAweDBFIC1taW5pIFBDSSAqLworCQkJCSAweDcwMDAgMHgwIDB4MCAweDEgJmlwaWMgMTggMHg4CisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MiAmaXBpYyAxOCAweDgKKwkJCQkgMHg3MDAwIDB4MCAweDAgMHgzICZpcGljIDE4IDB4OAorCQkJCSAweDcwMDAgMHgwIDB4MCAweDQgJmlwaWMgMTggMHg4CisKKwkJCQkvKiBJRFNFTCAweDBGIC0gUENJIHNsb3QgKi8KKwkJCQkgMHg3ODAwIDB4MCAweDAgMHgxICZpcGljIDE3IDB4OAorCQkJCSAweDc4MDAgMHgwIDB4MCAweDIgJmlwaWMgMTggMHg4CisJCQkJIDB4NzgwMCAweDAgMHgwIDB4MyAmaXBpYyAxNyAweDgKKwkJCQkgMHg3ODAwIDB4MCAweDAgMHg0ICZpcGljIDE4IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQlpbnRlcnJ1cHRzID0gPDY2IDB4OD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHgwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkJICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzh4eHhfZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTVkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dQSU8gY29udHJvbGxlcnMgb24gTVBDOHh4eCBTb0NzCisKK1RoaXMgaXMgZm9yIHRoZSBub24tUUUvQ1BNL0dVVHMgR1BJTyBjb250cm9sbGVycyBhcyBmb3VuZCBvbgorODM0OSwgODU3MiwgODYxMCBhbmQgY29tcGF0aWJsZS4KKworRXZlcnkgR1BJTyBjb250cm9sbGVyIG5vZGUgbXVzdCBoYXZlICNncGlvLWNlbGxzIHByb3BlcnR5IGRlZmluZWQsCit0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB0byB0cmFuc2xhdGUgZ3Bpby1zcGVjaWZpZXJzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogImZzbCw8Q0hJUD4tZ3BpbyIgZm9sbG93ZWQgYnkgImZzbCxtcGM4MzQ5LWdwaW8iIGZvcgorICA4M3h4LCAiZnNsLG1wYzg1NzItZ3BpbyIgZm9yIDg1eHggYW5kICJmc2wsbXBjODYxMC1ncGlvIiBmb3IgODZ4eC4KKy0gI2dwaW8tY2VsbHMgOiBTaG91bGQgYmUgdHdvLiBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgcGluIG51bWJlciBhbmQgdGhlCisgIHNlY29uZCBjZWxsIGlzIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25hbCBwYXJhbWV0ZXJzIChjdXJyZW50bHkgdW51c2VkKS4KKyAtIGludGVycnVwdHMgOiBJbnRlcnJ1cHQgbWFwcGluZyBmb3IgR1BJTyBJUlEgKGN1cnJlbnRseSB1bnVzZWQpLgorIC0gaW50ZXJydXB0LXBhcmVudCA6IFBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKy0gZ3Bpby1jb250cm9sbGVyIDogTWFya3MgdGhlIHBvcnQgYXMgR1BJTyBjb250cm9sbGVyLgorCitFeGFtcGxlIG9mIGdwaW8tY29udHJvbGxlciBub2RlcyBmb3IgYSBNUEM4MzQ3IFNvQzoKKworCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDctZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDw3NCAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJZ3Bpby1jb250cm9sbGVyOworCX07CisKKwlncGlvMjogZ3Bpby1jb250cm9sbGVyQGQwMCB7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCXJlZyA9IDwweGQwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OworCitTZWUgYm9vdGluZy13aXRob3V0LW9mLnR4dCBmb3IgZGV0YWlscyBvZiBob3cgdG8gc3BlY2lmeSBHUElPCitpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CmluZGV4IDg2ODI2ZGYuLmNjNDUzMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dApAQCAtMjAsNyArMjAsNyBAQAogICAgICAgICAtIGNvbXBhdGlibGUgICAgICAgIDogY29tcGF0aWJsZSBsaXN0LCBjb250YWlucyAyIGVudHJpZXMsIGZpcnN0IGlzCiAJCQkgImZzbCxDSElQLWRtYS1jaGFubmVsIiwgd2hlcmUgQ0hJUCBpcyB0aGUgcHJvY2Vzc29yCiAJCQkgKG1wYzgzNDksIG1wYzgzNTAsIGV0Yy4pIGFuZCB0aGUgc2Vjb25kIGlzCi0JCQkgImZzbCxlbG8tZG1hLWNoYW5uZWwiCisJCQkgImZzbCxlbG8tZG1hLWNoYW5uZWwiLiBIb3dldmVyLCBzZWUgbm90ZSBiZWxvdy4KICAgICAgICAgLSByZWcgICAgICAgICAgICAgICA6IDxyZWdpc3RlcnMgbWFwcGluZyBmb3IgY2hhbm5lbD4KICAgICAgICAgLSBjZWxsLWluZGV4ICAgICAgICA6IGRtYSBjaGFubmVsIGluZGV4IHN0YXJ0cyBhdCAwLgogCkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIC0gY29tcGF0aWJsZSAgICAgICAgOiBjb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5zIDIgZW50cmllcywgZmlyc3QgaXMKIAkJCSAiZnNsLENISVAtZG1hLWNoYW5uZWwiLCB3aGVyZSBDSElQIGlzIHRoZSBwcm9jZXNzb3IKIAkJCSAobXBjODU0MCwgbXBjODU2MCwgZXRjLikgYW5kIHRoZSBzZWNvbmQgaXMKLQkJCSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiCisJCQkgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIi4gSG93ZXZlciwgc2VlIG5vdGUgYmVsb3cuCiAgICAgICAgIC0gY2VsbC1pbmRleCAgICAgICAgOiBkbWEgY2hhbm5lbCBpbmRleCBzdGFydHMgYXQgMC4KICAgICAgICAgLSByZWcgICAgICAgICAgICAgICA6IDxyZWdpc3RlcnMgbWFwcGluZyBmb3IgY2hhbm5lbD4KICAgICAgICAgLSBpbnRlcnJ1cHRzICAgICAgICA6IDxpbnRlcnJ1cHQgbWFwcGluZyBmb3IgRE1BIGNoYW5uZWwgSVJRPgpAQCAtMTI1LDMgKzEyNSwxMiBAQAogCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKIAkJfTsKIAl9OworCitOb3RlIG9uIERNQSBjaGFubmVsIGNvbXBhdGlibGUgcHJvcGVydGllczogVGhlIGNvbXBhdGlibGUgcHJvcGVydHkgbXVzdCBzYXkKKyJmc2wsZWxvLWRtYS1jaGFubmVsIiBvciAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiIHRvIGJlIHVzZWQgYnkgdGhlIEVsbyBETUEKK2RyaXZlciAoZnNsZG1hKS4gIEFueSBETUEgY2hhbm5lbCB1c2VkIGJ5IGZzbGRtYSBjYW5ub3QgYmUgdXNlZCBieSBhbm90aGVyCitETUEgZHJpdmVyLCBzdWNoIGFzIHRoZSBTU0kgc291bmQgZHJpdmVycyBmb3IgdGhlIE1QQzg2MTAuICBUaGVyZWZvcmUsIGFueSBETUEKK2NoYW5uZWwgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgYW5vdGhlciBkcml2ZXIgc2hvdWxkIG5vdCB1c2UKKyJmc2wsZWxvLWRtYS1jaGFubmVsIiBvciAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiLiAgRm9yIHRoZSBTU0kgZHJpdmVycywgZm9yCitleGFtcGxlLCB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSBzaG91bGQgYmUgImZzbCxzc2ktZG1hLWNoYW5uZWwiLiAgU2VlIHNzaS50eHQKK2ZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKaW5kZXggZDEwMDU1NS4uYTJkOTYzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CkBAIC0yNCw2ICsyNCwxMiBAQAogCQkgICAgInJqLW1hc3RlciIgLSByLmouLCBTU0kgaXMgY2xvY2sgbWFzdGVyCiAJCSAgICAiYWM5Ny1zbGF2ZSIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQogCQkgICAgImFjOTctbWFzdGVyIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorLSBmc2wscGxheWJhY2stZG1hOiBwaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGxheWJhY2sgb2YgYXVkaW8uICBUaGlzIGlzIHR5cGljYWxseSBkaWN0YXRlZCBieSBTT0MKKyAgICAgICAgICAgICAgICAgICAgZGVzaWduLiAgU2VlIHRoZSBub3RlcyBiZWxvdy4KKy0gZnNsLGNhcHR1cmUtZG1hOiAgcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgIGNhcHR1cmUgKHJlY29yZGluZykgb2YgYXVkaW8uICBUaGlzIGlzIHR5cGljYWxseSBkaWN0YXRlZAorICAgICAgICAgICAgICAgICAgICBieSBTT0MgZGVzaWduLiAgU2VlIHRoZSBub3RlcyBiZWxvdy4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIC0gY29kZWMtaGFuZGxlCSAgOiBwaGFuZGxlIHRvIGEgJ2NvZGVjJyBub2RlIHRoYXQgZGVmaW5lcyBhbiBhdWRpbwpAQCAtMzYsMyArNDIsMjAgQEAKIENoaWxkICdjb2RlYycgbm9kZSBvcHRpb25hbCBwcm9wZXJ0aWVzOgogLSBjbG9jay1mcmVxdWVuY3kgIDogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW5wdXQgY2xvY2ssIHdoaWNoIHR5cGljYWxseQogICAgICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSBhbiBvbi1ib2FyZCBkZWRpY2F0ZWQgb3NjaWxsYXRvci4KKworTm90ZXMgb24gZnNsLHBsYXliYWNrLWRtYSBhbmQgZnNsLGNhcHR1cmUtZG1hOgorCitPbiBTT0NzIHRoYXQgaGF2ZSBhbiBTU0ksIHNwZWNpZmljIERNQSBjaGFubmVscyBhcmUgaGFyZC13aXJlZCBmb3IgcGxheWJhY2sKK2FuZCBjYXB0dXJlLiAgT24gdGhlIE1QQzg2MTAsIGZvciBleGFtcGxlLCBTU0kxIG11c3QgdXNlIERNQSBjaGFubmVsIDAgZm9yCitwbGF5YmFjayBhbmQgRE1BIGNoYW5uZWwgMSBmb3IgY2FwdHVyZS4gIFNTSTIgbXVzdCB1c2UgRE1BIGNoYW5uZWwgMiBmb3IKK3BsYXliYWNrIGFuZCBETUEgY2hhbm5lbCAzIGZvciBjYXB0dXJlLiAgVGhlIGRldmVsb3BlciBjYW4gY2hvb3NlIHdoaWNoCitETUEgY29udHJvbGxlciB0byB1c2UsIGJ1dCB0aGUgY2hhbm5lbHMgdGhlbXNlbHZlcyBhcmUgaGFyZC13aXJlZC4gIFRoZQorcHVycG9zZSBvZiB0aGVzZSB0d28gcHJvcGVydGllcyBpcyB0byByZXByZXNlbnQgdGhpcyBoYXJkd2FyZSBkZXNpZ24uCisKK1RoZSBkZXZpY2UgdHJlZSBub2RlcyBmb3IgdGhlIERNQSBjaGFubmVscyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5CisiZnNsLHBsYXliYWNrLWRtYSIgYW5kICJmc2wsY2FwdHVyZS1kbWEiIG11c3QgYmUgbWFya2VkIGFzIGNvbXBhdGlibGUgd2l0aAorImZzbCxzc2ktZG1hLWNoYW5uZWwiLiAgVGhlIFNPQy1zcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZyAoZS5nLgorImZzbCxtcGM4NjEwLWRtYS1jaGFubmVsIikgY2FuIHJlbWFpbi4gIElmIHRoZXNlIG5vZGVzIGFyZSBsZWZ0IGFzCisiZnNsLGVsby1kbWEtY2hhbm5lbCIgb3IgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiwgdGhlbiB0aGUgZ2VuZXJpYyBFbG8gRE1BCitkcml2ZXJzIChmc2xkbWEpIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlbSwgYW5kIGl0IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUKK3NvdW5kIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3BwY19odGFiLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI4YzdkZi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgL3Byb2MvcHBjX2h0YWIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgcmVsYXRlZCBjb2RlIHdhcyB3cml0dGVuIGJ5IG1lIChDb3J0IERvdWdhbiksIHBsZWFzZQotZW1haWwgbWUgKGNvcnRAZnNtbGFicy5jb20pIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywgY29tbWVudHMgb3IgY29ycmVjdGlvbnMuCi0KLUxhc3QgQ2hhbmdlOiAyLjE2Ljk4Ci0KLVRoaXMgZW50cnkgaW4gdGhlIHByb2MgZGlyZWN0b3J5IGlzIHJlYWRhYmxlIGJ5IGFsbCB1c2VycyBidXQgb25seQotd3JpdGFibGUgYnkgcm9vdC4KLQotVGhlIHBwY19odGFiIGludGVyZmFjZSBpcyBhIHVzZXIgbGV2ZWwgd2F5IG9mIGFjY2Vzc2luZyB0aGUKLXBlcmZvcm1hbmNlIG1vbml0b3JpbmcgcmVnaXN0ZXJzIGFzIHdlbGwgYXMgcHJvdmlkaW5nIGluZm9ybWF0aW9uCi1hYm91dCB0aGUgUFRFIGhhc2ggdGFibGUuCi0KLTEuIFJlYWRpbmcKLQotICBSZWFkaW5nIHRoaXMgZmlsZSB3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZW1vcnkgbWFuYWdlbWVudAotICBoYXNoIHRhYmxlIHRoYXQgc2VydmVzIGFzIGFuIGV4dGVuZGVkIHRsYiBmb3IgcGFnZSB0cmFuc2xhdGlvbiBvbiB0aGUKLSAgcG93ZXJwYy4gIEl0IHdpbGwgYWxzbyBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudAotICBzcGVjaWZpYyB0byB0aGUgY3B1IHRoYXQgeW91IGFyZSB1c2luZy4KLQotICBFeHBsYW5hdGlvbiBvZiB0aGUgNjA0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgRmllbGRzOgotICAgIE1NQ1IwIC0gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIE1NQ1IwIHJlZ2lzdGVyCi0gICAgUE1DMQotICAgIFBNQzIgLSB0aGUgdmFsdWUgb2YgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZCBhCi0gICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHdoYXQgZXZlbnRzIHRoZXkgYXJlIGNvdW50aW5nCi0gICAgICAgICAgIHdoaWNoIGFyZSBiYXNlZCBvbiBNTUNSMCBiaXQgc2V0dGluZ3MuCi0gIEV4cGxhbmF0aW9uIG9mIHRoZSBQVEUgSGFzaCBUYWJsZSBmaWVsZHM6Ci0KLSAgICBTaXplIC0gaGFzaCB0YWJsZSBzaXplIGluIEtiLgotICAgIEJ1Y2tldHMgLSAgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIHRhYmxlLgotICAgIEFkZHJlc3MgLSB0aGUgdmlydHVhbCBrZXJuZWwgYWRkcmVzcyBvZiB0aGUgaGFzaCB0YWJsZSBiYXNlLgotICAgIEVudHJpZXMgLSB0aGUgbnVtYmVyIG9mIHB0ZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBoYXNoIHRhYmxlLgotICAgIFVzZXIvS2VybmVsIC0gaG93IG1hbnkgcHRlJ3MgYXJlIGluIHVzZSBieSB0aGUga2VybmVsIG9yIHVzZXIgYXQgdGhhdCB0aW1lLgotICAgIE92ZXJmbG93cyAtIEhvdyBtYW55IG9mIHRoZSBlbnRyaWVzIGFyZSBpbiB0aGVpciBzZWNvbmRhcnkgaGFzaCBsb2NhdGlvbi4KLSAgICBQZXJjZW50IGZ1bGwgLSByYXRpbyBvZiBmcmVlIHB0ZSBlbnRyaWVzIHRvIGluIHVzZSBlbnRyaWVzLgotICAgIFJlbG9hZHMgLSBDb3VudCBvZiBob3cgbWFueSBoYXNoIHRhYmxlIG1pc3NlcyBoYXZlIG9jY3VycmVkCi0gICAgICAgICAgICAgIHRoYXQgd2VyZSBmaXhlZCB3aXRoIGEgcmVsb2FkIGZyb20gdGhlIGxpbnV4IHRhYmxlcy4KLSAgICAgICAgICAgICAgU2hvdWxkIGFsd2F5cyBiZSAwIG9uIDYwMyBiYXNlZCBtYWNoaW5lcy4KLSAgICBOb24tZXJyb3IgTWlzc2VzIC0gQ291bnQgb2YgaG93IG1hbnkgaGFzaCB0YWJsZSBtaXNzZXMgaGF2ZSBvY2N1cnJlZAotICAgICAgICAgICAgICB0aGF0IHdlcmUgY29tcGxldGVkIHdpdGggdGhlIGNyZWF0aW9uIG9mIGEgcHRlIGluIHRoZSBsaW51eAotICAgICAgICAgICAgICB0YWJsZXMgd2l0aCBhIGNhbGwgdG8gZG9fcGFnZV9mYXVsdCgpLgotICAgIEVycm9yIE1pc3NlcyAtIE51bWJlciBvZiBtaXNzZXMgZHVlIHRvIGVycm9ycyBzdWNoIGFzIGJhZCBhZGRyZXNzCi0gICAgICAgICAgICAgIGFuZCBwZXJtaXNzaW9uIHZpb2xhdGlvbnMuICBUaGlzIGluY2x1ZGVzIGtlcm5lbCBhY2Nlc3Mgb2YKLSAgICAgICAgICAgICAgYmFkIHVzZXIgYWRkcmVzc2VzIHRoYXQgYXJlIGZpeGVkIHVwIGJ5IHRoZSB0cmFwIGhhbmRsZXIuCi0KLSAgTm90ZSB0aGF0IGNhbGN1bGF0aW9uIG9mIHRoZSBkYXRhIGRpc3BsYXllZCBmcm9tIC9wcm9jL3BwY19odGFiIHRha2VzCi0gIGEgbG9uZyB0aW1lIGFuZCBzcGVuZHMgYSBncmVhdCBkZWFsIG9mIHRpbWUgaW4gdGhlIGtlcm5lbC4gIEl0IHdvdWxkCi0gIGJlIHF1aXRlIGhhcmQgb24gcGVyZm9ybWFuY2UgdG8gcmVhZCB0aGlzIGZpbGUgY29uc3RhbnRseS4gIEluIHRpbWUKLSAgdGhlcmUgbWF5IGJlIGEgY291bnRlciBpbiB0aGUga2VybmVsIHRoYXQgYWxsb3dzIHN1Y2Nlc3NpdmUgcmVhZHMgZnJvbQotICB0aGlzIGZpbGUgb25seSBhZnRlciBhIGdpdmVuIGFtb3VudCBvZiB0aW1lIGhhcyBwYXNzZWQgdG8gcmVkdWNlIHRoZQotICBwb3NzaWJpbGl0eSBvZiBhIHVzZXIgc2xvd2luZyB0aGUgc3lzdGVtIGJ5IHJlYWRpbmcgdGhpcyBmaWxlLgotCi0yLiBXcml0aW5nCi0KLSAgV3JpdGluZyB0byB0aGUgcHBjX2h0YWIgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGNoYXJhY3RlcmlzdGljcyBvZgotICB0aGUgcG93ZXJwYyBQVEUgaGFzaCB0YWJsZSBhbmQgc2V0dXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4KLQotICBSZXNpemluZyB0aGUgUFRFIGhhc2ggdGFibGUgaXMgbm90IGVuYWJsZWQgcmlnaHQgbm93IGR1ZSB0byBtYW55Ci0gIGNvbXBsaWNhdGlvbnMgd2l0aCBtb3ZpbmcgdGhlIGhhc2ggdGFibGUsIHJlaGFzaGluZyB0aGUgZW50cmllcwotICBhbmQgbWFueSBtYW55IFNNUCBpc3N1ZXMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlIGRlYWx0IHdpdGguCi0KLSAgV3JpdGUgb3B0aW9ucyB0byBwcGNfaHRhYjoKLSAgCi0gICAtIFRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSB0byA2NEtiOgotCi0gICAgICBlY2hvICdzaXplIDY0JyA+IC9wcm9jL3BwY19odGFiCi0KLSAgICAgVGhlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0IGFuZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bwotICAgICA2NC4KLQotICAgLSBUbyB0dXJuIG9mZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nOgotCi0gICAgICBlY2hvICdvZmYnID4gL3Byb2MvcHBjX2h0YWIKLQotICAgLSBUbyByZXNldCB0aGUgY291bnRlcnMgd2l0aG91dCBjaGFuZ2luZyB3aGF0IHRoZXkncmUgY291bnRpbmc6Ci0KLSAgICAgIGVjaG8gJ3Jlc2V0JyA+IC9wcm9jL3BwY19odGFiCi0KLSAgICAgTm90ZSB0aGF0IGNvdW50aW5nIHdpbGwgY29udGludWUgYWZ0ZXIgdGhlIHJlc2V0IGlmIGl0IGlzIGVuYWJsZWQuCi0KLSAgIC0gVG8gY291bnQgb25seSBldmVudHMgaW4gdXNlciBtb2RlIG9yIG9ubHkgaW4ga2VybmVsIG1vZGU6Ci0KLSAgICAgIGVjaG8gJ3VzZXInID4gL3Byb2MvcHBjX2h0YWIKLSAgICAgICAuLi5vci4uLgotICAgICAgZWNobyAna2VybmVsJyA+IC9wcm9jL3BwY19odGFiCi0KLSAgICAgTm90ZSB0aGF0IHRoZXNlIHR3byBvcHRpb25zIGFyZSBleGNsdXNpdmUgb2Ygb25lIGFub3RoZXIgYW5kIHRoZQotICAgICBsYWNrIG9mIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zIGNvdW50cyB1c2VyIGFuZCBrZXJuZWwuCi0gICAgIFVzaW5nICdyZXNldCcgYW5kICdvZmYnIHJlc2V0IHRoZXNlIGZsYWdzLgotCi0gICAtIFRoZSA2MDQgaGFzIDIgcGVyZm9ybWFuY2UgY291bnRlcnMgd2hpY2ggY2FuIGVhY2ggY291bnQgZXZlbnRzIGZyb20KLSAgICAgYSBzcGVjaWZpYyBzZXQgb2YgZXZlbnRzLiAgVGhlc2Ugc2V0cyBhcmUgZGlzam9pbnQgc28gaXQgaXMgbm90Ci0gICAgIHBvc3NpYmxlIHRvIGNvdW50IF9hbnlfIGNvbWJpbmF0aW9uIG9mIDIgZXZlbnRzLiAgT25lIGV2ZW50IGNhbgotICAgICBiZSBjb3VudGVkIGJ5IFBNQzEgYW5kIG9uZSBieSBQTUMyLgotCi0gICAgIFRvIHN0YXJ0IGNvdW50aW5nIGEgcGFydGljdWxhciBldmVudCB1c2U6Ci0KLSAgICAgIGVjaG8gJ2V2ZW50JyA+IC9wcm9jL3BwY19odGFiCi0KLSAgICAgYW5kIGNob29zZSBmcm9tIHRoZXNlIGV2ZW50czoKLQotICAgICBQTUMxCi0gICAgIC0tLS0KLSAgICAgICdpYyBtaXNzJyAtIGluc3RydWN0aW9uIGNhY2hlIG1pc3NlcwotICAgICAgJ2R0bGInIC0gZGF0YSB0bGIgbWlzc2VzIChub3QgaGFzaCB0YWJsZSBtaXNzZXMpCi0KLSAgICAgUE1DMgotICAgICAtLS0tCi0gICAgICAnZGMgbWlzcycgLSBkYXRhIGNhY2hlIG1pc3NlcwotICAgICAgJ2l0bGInIC0gaW5zdHJ1Y3Rpb24gdGxiIG1pc3NlcyAobm90IGhhc2ggdGFibGUgbWlzc2VzKQotICAgICAgJ2xvYWQgbWlzcyB0aW1lJyAtIGN5Y2xlcyB0byBjb21wbGV0ZSBhIGxvYWQgbWlzcwotCi0zLiBCdWdzCi0KLSAgVGhlIFBNQzEgYW5kIFBNQzIgY291bnRlcnMgY2FuIG92ZXJmbG93IGFuZCBnaXZlIG5vIGluZGljYXRpb24gb2YgdGhhdAotICBpbiAvcHJvYy9wcGNfaHRhYi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NtcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNTgxYjguLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NtcC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0gICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IExpbnV4L1BQQyBTTVAgbW9kZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgZG9jdW1lbnQgYW5kIHRoZSByZWxhdGVkIGNvZGUgd2FzIHdyaXR0ZW4gYnkgbWUKLShDb3J0IERvdWdhbiwgY29ydEBmc21sYWJzLmNvbSkgcGxlYXNlIGVtYWlsIG1lIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywKLWNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgotCi1MYXN0IENoYW5nZTogMy4zMS45OQotCi1JZiB5b3Ugd2FudCB0byBoZWxwIGJ5IHdyaXRpbmcgY29kZSBvciB0ZXN0aW5nIGRpZmZlcmVudCBoYXJkd2FyZSBwbGVhc2UKLWVtYWlsIG1lIQotCi0xLiBTdGF0ZSBvZiBTdXBwb3J0ZWQgSGFyZHdhcmUKLQotICBQb3dlclN1cmdlIEFyY2hpdGVjdHVyZSAtIHRlc3RlZCBvbiBVTUFYIHM5MDAsIEFwcGxlIDk2MDAKLSAgICBUaGUgc2Vjb25kIHByb2Nlc3NvciBvbiB0aGlzIG1hY2hpbmUgYm9vdHMgdXAganVzdCBmaW5lIGFuZAotICAgIGVudGVycyBpdHMgaWRsZSBsb29wLiAgSG9wZWZ1bGx5IGEgY29tcGxldGVseSB3b3JraW5nIFNNUCBrZXJuZWwKLSAgICBvbiB0aGlzIG1hY2hpbmUgd2lsbCBiZSBkb25lIHNob3J0bHkuCi0KLSAgICBUaGUgY29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiBvZiBvbmx5IHR3byBwcm9jZXNzb3JzLiAgVGhlIGNoYW5nZXMKLSAgICBuZWNlc3NhcnkgdG8gd29yayB3aXRoIGFueSBudW1iZXIgd291bGQgbm90IGJlIG92ZXJseSBkaWZmaWN1bHQgYnV0Ci0gICAgSSBkb24ndCBoYXZlIGFueSBtYWNoaW5lcyB3aXRoID4yIHByb2Nlc3NvcnMgc28gaXQncyBub3QgaGlnaCBvbiBteQotICAgIGxpc3Qgb2YgcHJpb3JpdGllcy4gIElmIGFueW9uZSBlbHNlIHdvdWxkIGxpa2UgZG8gdG8gdGhlIHdvcmsgZW1haWwKLSAgICBtZSBhbmQgSSBjYW4gcG9pbnQgb3V0IHRoZSBwbGFjZXMgdGhhdCBuZWVkIGNoYW5nZWQuICBJZiB5b3UgaGF2ZSA+MgotICAgIHByb2Nlc3NvcnMgYW5kIGRvbid0IHdhbnQgdG8gYWRkIHN1cHBvcnQgeW91cnNlbGYgbGV0IG1lIGtub3cgYW5kIEkKLSAgICBjYW4gdGFrZSBhIGxvb2sgaW50byBpdC4KLQotICBCZUJveAotICAgIEJlQm94IHN1cHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdG8gdGhlIDIuMS5YIGtlcm5lbHMgZnJvbSAyLjAuWAotICAgIGJ1dCB3b3JrIGlzIGJlaW5nIGRvbmUgYW5kIFNNUCBzdXBwb3J0IGZvciBCZUJveCBpcyBpbiB0aGUgd29ya3MuCi0KLSAgQ0hSUAotICAgIENIUlAgU01QIHdvcmtzIGFuZCBpcyBmYWlybHkgc29saWQuICBJdCdzIGJlZW4gdGVzdGVkIG9uIHRoZSBJQk0gRjUwCi0gICAgd2l0aCA0IHByb2Nlc3NvcnMgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAppbmRleCAzNzc5NmZlLi5lYWE0ODAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKQEAgLTQwOSw3ICs0MDksNyBAQAogCW1lZ2FyYWlkX21ib3hfcHJlcGFyZV9wdGhydSwgbWVnYXJhaWRfbWJveF9wcmVwYXJlX2VwdGhydSwKIAltZWdhcmFpZF9idXN5d2FpdF9tYm94CiAKLQkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQktIEFuZHJldyBNb3J0b24sIDA4LjE5LjIwMDQKIAkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKIAogCSJTb21ldGhpbmcgZWxzZSB0byBjbGVhbiB1cCBhZnRlciBpbmNsdXNpb246IGV2ZXJ5IGluc3RhbmNlIG9mIGFuCkBAIC00NzEsMTMgKzQ3MSwxMyBAQAogdmlpLglNb3ZlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBtYW5hZ2VtZW50IG1vZHVsZSBmcm9tCiAJbWVnYXJhaWRfbW0uaCB0byBtZWdhcmFpZF9tbS5jCiAKLQkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQktIEFuZHJldyBNb3J0b24sIDA4LjE5LjIwMDQKIAkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKIAogdmlpaS4JQ2hhbmdlIGRlZmF1bHQgdmFsdWVzIGZvciBNRUdBUkFJRF9ORVdHRU4sIE1FR0FSQUlEX01NLCBhbmQKIAlNRUdBUkFJRF9NQUlMQk9YIHRvICduJyBpbiBLY29uZmlnLm1lZ2FyYWlkCiAKLQkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQktIEFuZHJldyBNb3J0b24sIDA4LjE5LjIwMDQKIAkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKIAogaXguCXJlcGxhY2UgdWRlbGF5IHdpdGggbXNsZWVwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHggYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKaW5kZXggYmJlOGRlZS4uNmJiOTE2ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CisrKyBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eApAQCAtOTYsNyArOTYsNyBAQAogaW5mb3JtYXRpb24gdmlhIHRoZSBzdHJ1Y3R1cmUgInB4YTJ4eF9zcGlfY2hpcCIgZm91bmQgaW4KICJhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4X3NwaS5oIi4gIFRoZSBweGEyeHhfc3BpIG1hc3RlciBjb250cm9sbGVyIGRyaXZlcgogd2lsbCB1c2VzIHRoZSBjb25maWd1cmF0aW9uIHdoZW5ldmVyIHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIHNsYXZlCi1kZXZpY2UuCitkZXZpY2UuIEFsbCBmaWVsZHMgYXJlIG9wdGlvbmFsLgogCiBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIHsKIAl1OCB0eF90aHJlc2hvbGQ7CkBAIC0xMTIsMTQgKzExMiwxNyBAQAogcGVyZm9ybWFuY2Ugb2YgcHhhMnh4X3NwaSBkcml2ZXIgYW5kIG1pc2NvbmZpZ3VyYXRpb24gd2lsbCByZXN1bHQgaW4gcngKIGZpZm8gb3ZlcnJ1bnMgKGVzcGVjaWFsbHkgaW4gUElPIG1vZGUgdHJhbnNmZXJzKS4gR29vZCBkZWZhdWx0IHZhbHVlcyBhcmUKIAotCS50eF90aHJlc2hvbGQgPSAxMiwKLQkucnhfdGhyZXNob2xkID0gNCwKKwkudHhfdGhyZXNob2xkID0gOCwKKwkucnhfdGhyZXNob2xkID0gOCwKKworVGhlIHJhbmdlIGlzIDEgdG8gMTYgd2hlcmUgemVybyBpbmRpY2F0ZXMgInVzZSBkZWZhdWx0Ii4KIAogVGhlICJweGEyeHhfc3BpX2NoaXAuZG1hX2J1cnN0X3NpemUiIGZpZWxkIGlzIHVzZWQgdG8gY29uZmlndXJlIFBYQTJ4eCBETUEKIGVuZ2luZSBhbmQgaXMgcmVsYXRlZCB0aGUgInNwaV9kZXZpY2UuYml0c19wZXJfd29yZCIgZmllbGQuICBSZWFkIGFuZCB1bmRlcnN0YW5kCiB0aGUgUFhBMnh4ICJEZXZlbG9wZXIgTWFudWFsIiBzZWN0aW9ucyBvbiB0aGUgRE1BIGNvbnRyb2xsZXIgYW5kIFNTUCBDb250cm9sbGVycwogdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZhbHVlLiBBbiBTU1AgY29uZmlndXJlZCBmb3IgYnl0ZS13aWRlIHRyYW5zZmVycyB3b3VsZAotdXNlIGEgdmFsdWUgb2YgOC4KK3VzZSBhIHZhbHVlIG9mIDguIFRoZSBkcml2ZXIgd2lsbCBkZXRlcm1pbmUgYSByZWFzb25hYmxlIGRlZmF1bHQgaWYKK2RtYV9idXJzdF9zaXplID09IDAuCiAKIFRoZSAicHhhMnh4X3NwaV9jaGlwLnRpbWVvdXQiIGZpZWxkcyBpcyB1c2VkIHRvIGVmZmljaWVudGx5IGhhbmRsZQogdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIFNTUCByZWNlaXZlciBmaWZvLiAgVGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMKQEAgLTEzNyw3ICsxNDAsMTMgQEAKIE5VTEwsIHRoZSBweGEyeHhfc3BpIG1hc3RlciBjb250cm9sbGVyIGRyaXZlciBhc3N1bWVzIHRoYXQgdGhlIFNTUCBwb3J0IGlzCiBjb25maWd1cmVkIHRvIHVzZSBTU1BGUk0gaW5zdGVhZC4KIAotTlNTUCBTQUxWRSBTQU1QTEUKK05PVEU6IHRoZSBTUEkgZHJpdmVyIGNhbm5vdCBjb250cm9sIHRoZSBjaGlwIHNlbGVjdCBpZiBTU1BGUk0gaXMgdXNlZCwgc28gdGhlCitjaGlwc2VsZWN0IGlzIGRyb3BwZWQgYWZ0ZXIgZWFjaCBzcGlfdHJhbnNmZXIuICBNb3N0IGRldmljZXMgbmVlZCBjaGlwIHNlbGVjdAorYXNzZXJ0ZWQgYXJvdW5kIHRoZSBjb21wbGV0ZSBtZXNzYWdlLiAgVXNlIFNTUEZSTSBhcyBhIEdQSU8gKHRocm91Z2ggY3NfY29udHJvbCkKK3RvIGFjY29tb2RhdGUgdGhlc2UgY2hpcHMuCisKKworTlNTUCBTTEFWRSBTQU1QTEUKIC0tLS0tLS0tLS0tLS0tLS0tCiBUaGUgcHhhMnh4X3NwaV9jaGlwIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIHB4YTJ4eF9zcGkgZHJpdmVyIGluIHRoZQogInNwaV9ib2FyZF9pbmZvLmNvbnRyb2xsZXJfZGF0YSIgZmllbGQuIEJlbG93IGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gdXNpbmcKQEAgLTIwNiwxOCArMjE1LDIxIEBACiAKIERNQSBhbmQgUElPIEkvTyBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHB4YTJ4eF9zcGkgZHJpdmVyIHN1cHBvcnQgYm90aCBETUEgYW5kIGludGVycnVwdCBkcml2ZW4gUElPIG1lc3NhZ2UKLXRyYW5zZmVycy4gIFRoZSBkcml2ZXIgZGVmYXVsdHMgdG8gUElPIG1vZGUgYW5kIERNQSB0cmFuc2ZlcnMgbXVzdCBlbmFibGVkIGJ5Ci1zZXR0aW5nIHRoZSAiZW5hYmxlX2RtYSIgZmxhZyBpbiB0aGUgInB4YTJ4eF9zcGlfbWFzdGVyIiBzdHJ1Y3R1cmUgYW5kCi1lbnN1cmluZyB0aGF0IHRoZSAicHhhMnh4X3NwaV9jaGlwLmRtYV9idXJzdF9zaXplIiBmaWVsZCBpcyBub24temVyby4gIFRoZSBETUEKLW1vZGUgc3VwcG9ydCBib3RoIGNvaGVyZW50IGFuZCBzdHJlYW0gYmFzZWQgRE1BIG1hcHBpbmdzLgorVGhlIHB4YTJ4eF9zcGkgZHJpdmVyIHN1cHBvcnRzIGJvdGggRE1BIGFuZCBpbnRlcnJ1cHQgZHJpdmVuIFBJTyBtZXNzYWdlCit0cmFuc2ZlcnMuICBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIFBJTyBtb2RlIGFuZCBETUEgdHJhbnNmZXJzIG11c3QgYmUgZW5hYmxlZAorYnkgc2V0dGluZyB0aGUgImVuYWJsZV9kbWEiIGZsYWcgaW4gdGhlICJweGEyeHhfc3BpX21hc3RlciIgc3RydWN0dXJlLiAgVGhlIERNQQorbW9kZSBzdXBwb3J0cyBib3RoIGNvaGVyZW50IGFuZCBzdHJlYW0gYmFzZWQgRE1BIG1hcHBpbmdzLgogCiBUaGUgZm9sbG93aW5nIGxvZ2ljIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIEkvTyB0byBiZSB1c2VkIG9uCiBhIHBlciAic3BpX3RyYW5zZmVyIiBiYXNpczoKIAotaWYgIWVuYWJsZV9kbWEgb3IgZG1hX2J1cnN0X3NpemUgPT0gMCB0aGVuCitpZiAhZW5hYmxlX2RtYSB0aGVuCiAJYWx3YXlzIHVzZSBQSU8gdHJhbnNmZXJzCiAKK2lmIHNwaV9tZXNzYWdlLmxlbiA+IDgxOTEgdGhlbgorCXByaW50ICJyYXRlIGxpbWl0ZWQiIHdhcm5pbmcKKwl1c2UgUElPIHRyYW5zZmVycworCiBpZiBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkIGFuZCByeF9kbWFfYnVmICE9IDAgYW5kIHR4X2RtYV9idWYgIT0gMCB0aGVuCiAJdXNlIGNvaGVyZW50IERNQSBtb2RlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IGUxZmYwZDkuLmJkZTc5OWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMzY5LDQgKzM2OSw1IEBACiAgIDIgLSBBIG1vZHVsZSB3YXMgZm9yY2UgbG9hZGVkIGJ5IGluc21vZCAtZi4KICAgICAgIFNldCBieSBtb2R1dGlscyA+PSAyLjQuOSBhbmQgbW9kdWxlLWluaXQtdG9vbHMuCiAgIDQgLSBVbnNhZmUgU01QIHByb2Nlc3NvcnM6IFNNUCB3aXRoIENQVXMgbm90IGRlc2lnbmVkIGZvciBTTVAuCisgNjQgLSBBIG1vZHVsZSBmcm9tIGRyaXZlcnMvc3RhZ2luZyB3YXMgbG9hZGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CmluZGV4IDVjZTA5NTIuLjEwYTAyNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CkBAIC05NSw3ICs5NSw5IEBACiAKICdwJyAgICAgLSBXaWxsIGR1bXAgdGhlIGN1cnJlbnQgcmVnaXN0ZXJzIGFuZCBmbGFncyB0byB5b3VyIGNvbnNvbGUuCiAKLSdxJyAgICAgLSBXaWxsIGR1bXAgYSBsaXN0IG9mIGFsbCBydW5uaW5nIHRpbWVycy4KKydxJyAgICAgLSBXaWxsIGR1bXAgcGVyIENQVSBsaXN0cyBvZiBhbGwgYXJtZWQgaHJ0aW1lcnMgKGJ1dCBOT1QgcmVndWxhcgorICAgICAgICAgIHRpbWVyX2xpc3QgdGltZXJzKSBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYWxsCisgICAgICAgICAgY2xvY2tldmVudCBkZXZpY2VzLgogCiAncicgICAgIC0gVHVybnMgb2ZmIGtleWJvYXJkIHJhdyBtb2RlIGFuZCBzZXRzIGl0IHRvIFhMQVRFLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CmluZGV4IDVlNmI2NGMuLjZmMjRmNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0CkBAIC01Miw2ICs1MiwxMSBAQAogdGhlIGNhbGwgcmV0dXJucy4gVGhleSBtYXkgYmUgdW5saW5rZWQgbGF0ZXIgYnV0IHdpbGwgYmUgdW5saW5rZWQgaW4KIGZpbml0ZSB0aW1lLgogCit1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgVVJCcyBvZiBhbiBhbmNob3IgYXJlIHVuYW5jaG9yZWQgZW4gbWFzc2UuCisKIHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTksNCArNjQsMTYgQEAKIG9yIGEgdGltZW91dCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiBJdHMgcmV0dXJuIHZhbHVlIHdpbGwgdGVsbCB5b3UKIHdoZXRoZXIgdGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQuCiAKK3VzYl9hbmNob3JfZW1wdHkoKQorLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1JldHVybnMgdHJ1ZSBpZiBubyBVUkJzIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gYW5jaG9yLiBMb2NraW5nCitpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCisKK3VzYl9nZXRfZnJvbV9hbmNob3IoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JldHVybnMgdGhlIG9sZGVzdCBhbmNob3JlZCBVUkIgb2YgYW4gYW5jaG9yLiBUaGUgVVJCIGlzIHVuYW5jaG9yZWQKK2FuZCByZXR1cm5lZCB3aXRoIGEgcmVmZXJlbmNlLiBBcyB5b3UgbWF5IG1peCBVUkJzIHRvIHNldmVyYWwKK2Rlc3RpbmF0aW9ucyBpbiBvbmUgYW5jaG9yIHlvdSBoYXZlIG5vIGd1YXJhbnRlZSB0aGUgY2hyb25vbG9naWNhbGx5CitmaXJzdCBzdWJtaXR0ZWQgVVJCIGlzIHJldHVybmVkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjZiZTRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbWlzY191c2JzZXZzZWcudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1VTQiA3LVNlZ21lbnQgTnVtZXJpYyBEaXNwbGF5CitNYW51ZmFjdHVyZWQgYnkgRGVsY29tIEVuZ2luZWVyaW5nCisKK0RldmljZSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitVU0IgVkVORE9SX0lECTB4MGZjNQorVVNCIFBST0RVQ1RfSUQJMHgxMjI3CitCb3RoIHRoZSA2IGNoYXJhY3RlciBhbmQgOCBjaGFyYWN0ZXIgZGlzcGxheXMgaGF2ZSBQUk9EVUNUX0lELAorYW5kIGFjY29yZGluZyB0byBEZWxjb20gRW5naW5lZXJpbmcgbm8gcXVlcnlhYmxlIGluZm9ybWF0aW9uCitjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZGV2aWNlIHRvIHRlbGwgdGhlbSBhcGFydC4KKworRGV2aWNlIE1vZGVzCistLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsIHRoZSBkcml2ZXIgYXNzdW1lcyB0aGUgZGlzcGxheSBpcyBvbmx5IDYgY2hhcmFjdGVycworVGhlIG1vZGUgZm9yIDYgY2hhcmFjdGVycyBpczoKKwlNU0IgMHgwNjsgTFNCIDB4M2YKK0ZvciB0aGUgOCBjaGFyYWN0ZXIgZGlzcGxheToKKwlNU0IgMHgwODsgTFNCIDB4ZmYKK1RoZSBkZXZpY2UgY2FuIGFjY2VwdCAidGV4dCIgZWl0aGVyIGluIHJhdywgaGV4LCBvciBhc2NpaSB0ZXh0bW9kZS4KK3JhdyBjb250cm9scyBlYWNoIHNlZ21lbnQgbWFudWFsbHksCitoZXggZXhwZWN0cyBhIHZhbHVlIGJldHdlZW4gMC0xNSBwZXIgY2hhcmFjdGVyLAorYXNjaWkgZXhwZWN0cyBhIHZhbHVlIGJldHdlZW4gJzAnLSc5JyBhbmQgJ0EnLSdGJy4KK1RoZSBkZWZhdWx0IGlzIGFzY2lpLgorCitEZXZpY2UgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tCisxLglUdXJuIG9uIHRoZSBkZXZpY2U6CisJZWNobyAxID4gL3N5cy9idXMvdXNiLy4uLi9wb3dlcmVkCisyLglTZXQgdGhlIGRldmljZSdzIG1vZGU6CisJZWNobyAkbW9kZV9tc2IgPiAvc3lzL2J1cy91c2IvLi4uL21vZGVfbXNiCisJZWNobyAkbW9kZV9sc2IgPiAvc3lzL2J1cy91c2IvLi4uL21vZGVfbHNiCiszLglTZXQgdGhlIHRleHRtb2RlOgorCWVjaG8gJHRleHRtb2RlID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0bW9kZQorNC4Jc2V0IHRoZSB0ZXh0IChmb3IgZXhhbXBsZSk6CisJZWNobyAiMTIzQUJDIiA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dCAoYXNjaWkpCisJZWNobyAiQTFCMiIgPiAvc3lzL2J1cy91c2IvLi4uL3RleHQgKGFzY2lpKQorCWVjaG8gLW5lICJceDAxXHgwMlx4MDMiID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0IChoZXgpCis1LglTZXQgdGhlIGRlY2ltYWwgcGxhY2VzLgorCVRoZSBkZXZpY2UgaGFzIGVpdGhlciA2IG9yIDggZGVjaW1hbCBwb2ludHMuCisJdG8gc2V0IHRoZSBudGggZGVjaW1hbCBwbGFjZSBjYWxjdWxhdGUgMTAgKiogbgorCWFuZCBlY2hvIGl0IGluIHRvIC9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKKwlUbyBzZXQgbXVsdGlwbGUgZGVjaW1hbHMgcG9pbnRzIHN1bSB1cCBlYWNoIHBvd2VyLgorCUZvciBleGFtcGxlLCB0byBzZXQgdGhlIDB0aCBhbmQgM3JkIGRlY2ltYWwgcGxhY2UKKwllY2hvIDEwMDEgPiAvc3lzL2J1cy91c2IvLi4uL2RlY2ltYWxzCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCA5ZDMxMTQwLi5lNDhlYTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtMzUwLDEyICszNTAsMTIgQEAKIAogVGhlcmUgYWxzbyBhcmUgYSBjb3VwbGUgb2YgdXRpbGl0eSByb3V0aW5lcyBkcml2ZXJzIGNhbiB1c2U6CiAKLQl1c2JfYXV0b3BtX2VuYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDEgYW5kIHRoZW4gY2FsbHMKLQl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoKSwgd2hpY2ggd2lsbCBhdHRlbXB0IGFuIGF1dG9yZXN1bWUuCi0KLQl1c2JfYXV0b3BtX2Rpc2FibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAwIGFuZCB0aGVuIGNhbGxzCisJdXNiX2F1dG9wbV9lbmFibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAwIGFuZCB0aGVuIGNhbGxzCiAJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvc3VzcGVuZC4KIAorCXVzYl9hdXRvcG1fZGlzYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDEgYW5kIHRoZW4gY2FsbHMKKwl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoKSwgd2hpY2ggd2lsbCBhdHRlbXB0IGFuIGF1dG9yZXN1bWUuCisKIFRoZSBjb252ZW50aW9uYWwgdXNhZ2UgcGF0dGVybiBpcyB0aGF0IGEgZHJpdmVyIGNhbGxzCiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSBpbiBpdHMgb3BlbiByb3V0aW5lIGFuZAogdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgaW4gaXRzIGNsb3NlIG9yIHJlbGVhc2Ugcm91dGluZS4gIEJ1dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmF1MDgyOAppbmRleCBhYTA1ZTViLi5kNWNiNGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmF1MDgyOAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmF1MDgyOApAQCAtMSw1ICsxLDUgQEAKICAgMCAtPiBVbmtub3duIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpCi0gIDEgLT4gSGF1cHBhdWdlIEhWUjk1MFEgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzIwMCwyMDQwOjcyMTAsMjA0MDo3MjE3LDIwNDA6NzIxYiwyMDQwOjcyMWYsMjA0MDo3MjgwLDBmZDk6MDAwOF0KKyAgMSAtPiBIYXVwcGF1Z2UgSFZSOTUwUSAgICAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjAwLDIwNDA6NzIxMCwyMDQwOjcyMTcsMjA0MDo3MjFiLDIwNDA6NzIxZSwyMDQwOjcyMWYsMjA0MDo3MjgwLDBmZDk6MDAwOF0KICAgMiAtPiBIYXVwcGF1Z2UgSFZSODUwICAgICAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjQwXQogICAzIC0+IERWaUNPIEZ1c2lvbkhEVFYgVVNCICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFswZmU5OmQ2MjBdCiAgIDQgLT4gSGF1cHBhdWdlIEhWUjk1MFEgcmV2IHh4RjggICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzIwMSwyMDQwOjcyMTEsMjA0MDo3MjgxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggMzBiYmRkYS4uNjkxZDJmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC03NSwzICs3NSw0IEBACiB0dW5lcj03NSAtIFBoaWxpcHMgVEVBNTc2MSBGTSBSYWRpbwogdHVuZXI9NzYgLSBYY2VpdmUgNTAwMCB0dW5lcgogdHVuZXI9NzcgLSBUQ0wgdHVuZXIgTUYwMkdJUC01Ti1FCit0dW5lcj03OCAtIFBoaWxpcHMgRk1EMTIxNk1FWCBNSzMgSHlicmlkIFR1bmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ZWVkNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnR4dApAQCAtMCwwICsxLDYxNSBAQAorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgIlVuZXZpY3RhYmxlIExSVSIKK2luZnJhc3RydWN0dXJlIGFuZCB0aGUgdXNlIG9mIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFuYWdlIHNldmVyYWwgdHlwZXMKK29mICJ1bmV2aWN0YWJsZSIgcGFnZXMuICBUaGUgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gcHJvdmlkZSB0aGUgb3ZlcmFsbAorcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1lY2hhbmlzbSBhbmQgdGhlIHJhdGlvbmFsZSBmb3Igc29tZSBvZiB0aGUgZGVzaWduCitkZWNpc2lvbnMgdGhhdCBkcm92ZSB0aGUgaW1wbGVtZW50YXRpb24uICBUaGUgbGF0dGVyIGRlc2lnbiByYXRpb25hbGUgaXMKK2Rpc2N1c3NlZCBpbiB0aGUgY29udGV4dCBvZiBhbiBpbXBsZW1lbnRhdGlvbiBkZXNjcmlwdGlvbi4gIEFkbWl0dGVkbHksIG9uZQorY2FuIG9idGFpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy0tdGhlICJ3aGF0IGRvZXMgaXQgZG8/Ii0tYnkgcmVhZGluZyB0aGUKK2NvZGUuICBPbmUgaG9wZXMgdGhhdCB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFkZCB2YWx1ZSBieSBwcm92aWRlIHRoZSBhbnN3ZXIKK3RvICJ3aHkgZG9lcyBpdCBkbyB0aGF0PyIuCisKK1VuZXZpY3RhYmxlIExSVSBJbmZyYXN0cnVjdHVyZToKKworVGhlIFVuZXZpY3RhYmxlIExSVSBhZGRzIGFuIGFkZGl0aW9uYWwgTFJVIGxpc3QgdG8gdHJhY2sgdW5ldmljdGFibGUgcGFnZXMKK2FuZCB0byBoaWRlIHRoZXNlIHBhZ2VzIGZyb20gdm1zY2FuLiAgVGhpcyBtZWNoYW5pc20gaXMgYmFzZWQgb24gYSBwYXRjaCBieQorTGFycnkgV29vZG1hbiBvZiBSZWQgSGF0IHRvIGFkZHJlc3Mgc2V2ZXJhbCBzY2FsYWJpbGl0eSBwcm9ibGVtcyB3aXRoIHBhZ2UKK3JlY2xhaW0gaW4gTGludXguICBUaGUgcHJvYmxlbXMgaGF2ZSBiZWVuIG9ic2VydmVkIGF0IGN1c3RvbWVyIHNpdGVzIG9uIGxhcmdlCittZW1vcnkgeDg2XzY0IHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgYSBub24tbnVtYWwgeDg2XzY0IHBsYXRmb3JtIHdpdGggMTI4R0IKK29mIG1haW4gbWVtb3J5IHdpbGwgaGF2ZSBvdmVyIDMyIG1pbGxpb24gNGsgcGFnZXMgaW4gYSBzaW5nbGUgem9uZS4gIFdoZW4gYQorbGFyZ2UgZnJhY3Rpb24gb2YgdGhlc2UgcGFnZXMgYXJlIG5vdCBldmljdGFibGUgZm9yIGFueSByZWFzb24gW3NlZSBiZWxvd10sCit2bXNjYW4gd2lsbCBzcGVuZCBhIGxvdCBvZiB0aW1lIHNjYW5uaW5nIHRoZSBMUlUgbGlzdHMgbG9va2luZyBmb3IgdGhlIHNtYWxsCitmcmFjdGlvbiBvZiBwYWdlcyB0aGF0IGFyZSBldmljdGFibGUuICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaXR1YXRpb24gd2hlcmUKK2FsbCBjcHVzIGFyZSBzcGVuZGluZyAxMDAlIG9mIHRoZWlyIHRpbWUgaW4gdm1zY2FuIGZvciBob3VycyBvciBkYXlzIG9uIGVuZCwKK3dpdGggdGhlIHN5c3RlbSBjb21wbGV0ZWx5IHVucmVzcG9uc2l2ZS4KKworVGhlIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZSBhZGRyZXNzZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzIG9mCit1bmV2aWN0YWJsZSBwYWdlczoKKworKyBwYWdlIG93bmVkIGJ5IHJhbWZzCisrIHBhZ2UgbWFwcGVkIGludG8gU0hNX0xPQ0tlZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMKKysgcGFnZSBtYXBwZWQgaW50byBWTV9MT0NLRUQgW21sb2NrKCllZF0gdm1hcworCitUaGUgaW5mcmFzdHJ1Y3R1cmUgbWlnaHQgYmUgYWJsZSB0byBoYW5kbGUgb3RoZXIgY29uZGl0aW9ucyB0aGF0IG1ha2UgcGFnZXMKK3VuZXZpY3RhYmxlLCBlaXRoZXIgYnkgZGVmaW5pdGlvbiBvciBieSBjaXJjdW1zdGFuY2UsIGluIHRoZSBmdXR1cmUuCisKKworVGhlIFVuZXZpY3RhYmxlIExSVSBMaXN0CisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYW4gYWRkaXRpb25hbCwgcGVyLXpvbmUsIExSVSBsaXN0CitjYWxsZWQgdGhlICJ1bmV2aWN0YWJsZSIgbGlzdCBhbmQgYW4gYXNzb2NpYXRlZCBwYWdlIGZsYWcsIFBHX3VuZXZpY3RhYmxlLCB0bworaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBpcyBiZWluZyBtYW5hZ2VkIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LiAgVGhlCitQR191bmV2aWN0YWJsZSBmbGFnIGlzIGFuYWxvZ291cyB0bywgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoLCB0aGUgUEdfYWN0aXZlCitmbGFnIGluIHRoYXQgaXQgaW5kaWNhdGVzIG9uIHdoaWNoIExSVSBsaXN0IGEgcGFnZSByZXNpZGVzIHdoZW4gUEdfbHJ1IGlzIHNldC4KK1RoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCBpcyBzb3VyY2UgY29uZmlndXJhYmxlIGJhc2VkIG9uIHRoZSBVTkVWSUNUQUJMRV9MUlUKK0tjb25maWcgb3B0aW9uLgorCitUaGUgVW5ldmljdGFibGUgTFJVIGluZnJhc3RydWN0dXJlIG1haW50YWlucyB1bmV2aWN0YWJsZSBwYWdlcyBvbiBhbiBhZGRpdGlvbmFsCitMUlUgbGlzdCBmb3IgYSBmZXcgcmVhc29uczoKKworMSkgV2UgZ2V0IHRvICJ0cmVhdCB1bmV2aWN0YWJsZSBwYWdlcyBqdXN0IGxpa2Ugd2UgdHJlYXQgb3RoZXIgcGFnZXMgaW4gdGhlCisgICBzeXN0ZW0sIHdoaWNoIG1lYW5zIHdlIGdldCB0byB1c2UgdGhlIHNhbWUgY29kZSB0byBtYW5pcHVsYXRlIHRoZW0sIHRoZQorICAgc2FtZSBjb2RlIHRvIGlzb2xhdGUgdGhlbSAoZm9yIG1pZ3JhdGUsIGV0Yy4pLCB0aGUgc2FtZSBjb2RlIHRvIGtlZXAgdHJhY2sKKyAgIG9mIHRoZSBzdGF0aXN0aWNzLCBldGMuLi4iIFtSaWsgdmFuIFJpZWxdCisKKzIpIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBtaWdyYXRlIHVuZXZpY3RhYmxlIHBhZ2VzIGJldHdlZW4gbm9kZXMtLWZvciBtZW1vcnkKKyAgIGRlZnJhZ21lbnRhdGlvbiwgd29ya2xvYWQgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcuICBUaGUgbGludXgga2VybmVsCisgICBjYW4gb25seSBtaWdyYXRlIHBhZ2VzIHRoYXQgaXQgY2FuIHN1Y2Nlc3NmdWxseSBpc29sYXRlIGZyb20gdGhlIGxydSBsaXN0cy4KKyAgIElmIHdlIHdlcmUgdG8gbWFpbnRhaW4gcGFnZXMgZWxzZXdpc2UgdGhhbiBvbiBhbiBscnUtbGlrZSBsaXN0LCB3aGVyZSB0aGV5CisgICBjYW4gYmUgZm91bmQgYnkgaXNvbGF0ZV9scnVfcGFnZSgpLCB3ZSB3b3VsZCBwcmV2ZW50IHRoZWlyIG1pZ3JhdGlvbiwgdW5sZXNzCisgICB3ZSByZXdvcmtlZCBtaWdyYXRpb24gY29kZSB0byBmaW5kIHRoZSB1bmV2aWN0YWJsZSBwYWdlcy4KKworCitUaGUgdW5ldmljdGFibGUgTFJVIGxpc3QgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpbGUgYmFja2VkIGFuZCBzd2FwCitiYWNrZWQgW2Fub25dIHBhZ2VzLiAgVGhpcyBkaWZmZXJlbnRpYXRpb24gaXMgb25seSBpbXBvcnRhbnQgd2hpbGUgdGhlIHBhZ2VzCithcmUsIGluIGZhY3QsIGV2aWN0YWJsZS4KKworVGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IGJlbmVmaXRzIGZyb20gdGhlICJhcnJheWlmaWNhdGlvbiIgb2YgdGhlIHBlci16b25lCitMUlUgbGlzdHMgYW5kIHN0YXRpc3RpY3Mgb3JpZ2luYWxseSBwcm9wb3NlZCBhbmQgcG9zdGVkIGJ5IENocmlzdG9waCBMYW1ldGVyLgorCitUaGUgdW5ldmljdGFibGUgbGlzdCBkb2VzIG5vdCB1c2UgdGhlIGxydSBwYWdldmVjIG1lY2hhbmlzbS4gUmF0aGVyLAordW5ldmljdGFibGUgcGFnZXMgYXJlIHBsYWNlZCBkaXJlY3RseSBvbiB0aGUgcGFnZSdzIHpvbmUncyB1bmV2aWN0YWJsZQorbGlzdCB1bmRlciB0aGUgem9uZSBscnVfbG9jay4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gcHJldmVudCBzdHJhbmRpbmcKK29mIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHdoZW4gb25lIHRhc2sgaGFzIHRoZSBwYWdlIGlzb2xhdGVkIGZyb20gdGhlCitscnUgYW5kIG90aGVyIHRhc2tzIGFyZSBjaGFuZ2luZyB0aGUgImV2aWN0YWJpbGl0eSIgc3RhdGUgb2YgdGhlIHBhZ2UuCisKKworVW5ldmljdGFibGUgTFJVIGFuZCBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmFjdGlvbgorCitUaGUgbWVtb3J5IGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUgYXV0b21hdGljYWxseSBnZXRzIGEgcGVyIHpvbmUgdW5ldmljdGFibGUKK2xydSBsaXN0IGFzIGEgcmVzdWx0IG9mIHRoZSAiYXJyYXlpZmljYXRpb24iIG9mIHRoZSBwZXItem9uZSBMUlUgbGlzdHMuICBUaGUKK21lbW9yeSBjb250cm9sbGVyIHRyYWNrcyB0aGUgbW92ZW1lbnQgb2YgcGFnZXMgdG8gYW5kIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QuCitXaGVuIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29tZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGUgY29udHJvbGxlciB3aWxsCitub3QgYXR0ZW1wdCB0byByZWNsYWltIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LiAgVGhpcyBoYXMgYSBjb3VwbGUgb2YKK2VmZmVjdHMuICBCZWNhdXNlIHRoZSBwYWdlcyBhcmUgImhpZGRlbiIgZnJvbSByZWNsYWltIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LAordGhlIHJlY2xhaW0gcHJvY2VzcyBjYW4gYmUgbW9yZSBlZmZpY2llbnQsIGRlYWxpbmcgb25seSB3aXRoIHBhZ2VzIHRoYXQgaGF2ZQorYSBjaGFuY2Ugb2YgYmVpbmcgcmVjbGFpbWVkLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRvbyBtYW55IG9mIHRoZSBwYWdlcworY2hhcmdlZCB0byB0aGUgY29udHJvbCBncm91cCBhcmUgdW5ldmljdGFibGUsIHRoZSBldmljdGFibGUgcG9ydGlvbiBvZiB0aGUKK3dvcmtpbmcgc2V0IG9mIHRoZSB0YXNrcyBpbiB0aGUgY29udHJvbCBncm91cCBtYXkgbm90IGZpdCBpbnRvIHRoZSBhdmFpbGFibGUKK21lbW9yeS4gIFRoaXMgY2FuIGNhdXNlIHRoZSBjb250cm9sIGdyb3VwIHRvIHRocmFzaCBvciB0byBvb20ta2lsbCB0YXNrcy4KKworCitVbmV2aWN0YWJsZSBMUlU6ICBEZXRlY3RpbmcgVW5ldmljdGFibGUgUGFnZXMKKworVGhlIGZ1bmN0aW9uIHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkgaW4gdm1zY2FuLmMgZGV0ZXJtaW5lcyB3aGV0aGVyIGEKK3BhZ2UgaXMgZXZpY3RhYmxlIG9yIG5vdC4gIEZvciByYW1mcyBwYWdlcyBhbmQgcGFnZXMgaW4gU0hNX0xPQ0tlZCByZWdpb25zLAorcGFnZV9ldmljdGFibGUoKSB0ZXN0cyBhIG5ldyBhZGRyZXNzIHNwYWNlIGZsYWcsIEFTX1VORVZJQ1RBQkxFLCBpbiB0aGUgcGFnZSdzCithZGRyZXNzIHNwYWNlIHVzaW5nIGEgd3JhcHBlciBmdW5jdGlvbi4gIFdyYXBwZXIgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNldCwKK2NsZWFyIGFuZCB0ZXN0IHRoZSBmbGFnIHRvIHJlZHVjZSB0aGUgcmVxdWlyZW1lbnQgZm9yICNpZmRlZidzIHRocm91Z2hvdXQgdGhlCitzb3VyY2UgY29kZS4gIEFTX1VORVZJQ1RBQkxFIGlzIHNldCBvbiByYW1mcyBpbm9kZS9tYXBwaW5nIHdoZW4gaXQgaXMgY3JlYXRlZC4KK1RoaXMgZmxhZyByZW1haW5zIGZvciB0aGUgbGlmZSBvZiB0aGUgaW5vZGUuCisKK0ZvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIEFTX1VORVZJQ1RBQkxFIGlzIHNldCB3aGVuIGFuIGFwcGxpY2F0aW9uCitzdWNjZXNzZnVsbHkgU0hNX0xPQ0tzIHRoZSByZWdpb24gYW5kIGlzIHJlbW92ZWQgd2hlbiB0aGUgcmVnaW9uIGlzCitTSE1fVU5MT0NLZWQuICBOb3RlIHRoYXQgc2htY3RsKFNITV9MT0NLLCAuLi4pIGRvZXMgbm90IHBvcHVsYXRlIHRoZSBwYWdlCit0YWJsZXMgZm9yIHRoZSByZWdpb24gYXMgZG9lcywgZm9yIGV4YW1wbGUsIG1sb2NrKCkuICAgU28sIHdlIG1ha2Ugbm8gc3BlY2lhbAorZWZmb3J0IHRvIHB1c2ggYW55IHBhZ2VzIGluIHRoZSBTSE1fTE9DS2VkIHJlZ2lvbiB0byB0aGUgdW5ldmljdGFibGUgbGlzdC4KK1Ztc2NhbiB3aWxsIGRvIHRoaXMgd2hlbi9pZiBpdCBlbmNvdW50ZXJzIHRoZSBwYWdlcyBkdXJpbmcgcmVjbGFpbS4gIE9uCitTSE1fVU5MT0NLLCBzaG1jdGwoKSBzY2FucyB0aGUgcGFnZXMgaW4gdGhlIHJlZ2lvbiBhbmQgInJlc2N1ZXMiIHRoZW0gZnJvbSB0aGUKK3VuZXZpY3RhYmxlIGxpc3QgaWYgbm8gb3RoZXIgY29uZGl0aW9uIGtlZXBzIHRoZW0gdW5ldmljdGFibGUuICBJZiBhIFNITV9MT0NLZWQKK3JlZ2lvbiBpcyBkZXN0cm95ZWQsIHRoZSBwYWdlcyBhcmUgYWxzbyAicmVzY3VlZCIgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdCBpbgordGhlIHByb2Nlc3Mgb2YgZnJlZWluZyB0aGVtLgorCitwYWdlX2V2aWN0YWJsZSgpIGRldGVjdHMgbWxvY2soKWVkIHBhZ2VzIGJ5IHRlc3RpbmcgYW4gYWRkaXRpb25hbCBwYWdlIGZsYWcsCitQR19tbG9ja2VkIHZpYSB0aGUgUGFnZU1sb2NrZWQoKSB3cmFwcGVyLiAgSWYgdGhlIHBhZ2UgaXMgTk9UIG1sb2NrZWQsIGFuZCBhCitub24tTlVMTCB2bWEgaXMgc3VwcGxpZWQsIHBhZ2VfZXZpY3RhYmxlKCkgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSB2bWEgaXMKK1ZNX0xPQ0tFRCB2aWEgaXNfbWxvY2tlZF92bWEoKS4gIGlzX21sb2NrZWRfdm1hKCkgd2lsbCBTZXRQYWdlTWxvY2tlZCgpIGFuZAordXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBzdGF0aXN0aWNzIGlmIHRoZSB2bWEgaXMgVk1fTE9DS0VELiAgVGhpcyBtZXRob2QgYWxsb3dzCitlZmZpY2llbnQgImN1bGxpbmciIG9mIHBhZ2VzIGluIHRoZSBmYXVsdCBwYXRoIHRoYXQgYXJlIGJlaW5nIGZhdWx0ZWQgaW4gdG8KK1ZNX0xPQ0tFRCB2bWFzLgorCisKK1VuZXZpY3RhYmxlIFBhZ2VzIGFuZCBWbXNjYW4gW3Nocmlua18qX2xpc3QoKV0KKworSWYgdW5ldmljdGFibGUgcGFnZXMgYXJlIGN1bGxlZCBpbiB0aGUgZmF1bHQgcGF0aCwgb3IgbW92ZWQgdG8gdGhlIHVuZXZpY3RhYmxlCitsaXN0IGF0IG1sb2NrKCkgb3IgbW1hcCgpIHRpbWUsIHZtc2NhbiB3aWxsIG5ldmVyIGVuY291bnRlciB0aGUgcGFnZXMgdW50aWwKK3RoZXkgaGF2ZSBiZWNvbWUgZXZpY3RhYmxlIGFnYWluLCBmb3IgZXhhbXBsZSwgdmlhIG11bmxvY2soKSBhbmQgaGF2ZSBiZWVuCisicmVzY3VlZCIgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdC4gIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBzaXR1YXRpb25zIHdoZXJlIHdlCitkZWNpZGUsIGZvciB0aGUgc2FrZSBvZiBleHBlZGllbmN5LCB0byBsZWF2ZSBhIHVuZXZpY3RhYmxlIHBhZ2Ugb24gb25lIG9mIHRoZQorcmVndWxhciBhY3RpdmUvaW5hY3RpdmUgTFJVIGxpc3RzIGZvciB2bXNjYW4gdG8gZGVhbCB3aXRoLiAgVm1zY2FuIGNoZWNrcyBmb3IKK3N1Y2ggcGFnZXMgaW4gYWxsIG9mIHRoZSBzaHJpbmtfe2FjdGl2ZXxpbmFjdGl2ZXxwYWdlfV9saXN0KCkgZnVuY3Rpb25zIGFuZAord2lsbCAiY3VsbCIgc3VjaCBwYWdlcyB0aGF0IGl0IGVuY291bnRlcnMtLXRoYXQgaXMsIGl0IGRpdmVydHMgdGhvc2UgcGFnZXMgdG8KK3RoZSB1bmV2aWN0YWJsZSBsaXN0IGZvciB0aGUgem9uZSBiZWluZyBzY2FubmVkLgorCitUaGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSBhIHBhZ2UgaXMgbWFwcGVkIGludG8gYSBWTV9MT0NLRUQgdm1hLCBidXQgdGhlCitwYWdlIGlzIG5vdCBtYXJrZWQgYXMgUGFnZU1sb2NrZWQuICBTdWNoIHBhZ2VzIHdpbGwgbWFrZSBpdCBhbGwgdGhlIHdheSB0bworc2hyaW5rX3BhZ2VfbGlzdCgpIHdoZXJlIHRoZXkgd2lsbCBiZSBkZXRlY3RlZCB3aGVuIHZtc2NhbiB3YWxrcyB0aGUgcmV2ZXJzZQorbWFwIGluIHRyeV90b191bm1hcCgpLiAgSWYgdHJ5X3RvX3VubWFwKCkgcmV0dXJucyBTV0FQX01MT0NLLCBzaHJpbmtfcGFnZV9saXN0KCkKK3dpbGwgY3VsbCB0aGUgcGFnZSBhdCB0aGF0IHBvaW50LgorCitOb3RlIHRoYXQgZm9yIGFub255bW91cyBwYWdlcywgc2hyaW5rX3BhZ2VfbGlzdCgpIGF0dGVtcHRzIHRvIGFkZCB0aGUgcGFnZSB0bwordGhlIHN3YXAgY2FjaGUgYmVmb3JlIGl0IHRyaWVzIHRvIHVubWFwIHRoZSBwYWdlLiAgVG8gYXZvaWQgdGhpcyB1bm5lY2Vzc2FyeQorY29uc3VtcHRpb24gb2Ygc3dhcCBzcGFjZSwgc2hyaW5rX3BhZ2VfbGlzdCgpIGNhbGxzIHRyeV90b19tdW5sb2NrKCkgdG8gY2hlY2sKK3doZXRoZXIgYW55IFZNX0xPQ0tFRCB2bWFzIG1hcCB0aGUgcGFnZSB3aXRob3V0IGF0dGVtcHRpbmcgdG8gdW5tYXAgdGhlIHBhZ2UuCitJZiB0cnlfdG9fbXVubG9jaygpIHJldHVybnMgU1dBUF9NTE9DSywgc2hyaW5rX3BhZ2VfbGlzdCgpIHdpbGwgY3VsbCB0aGUgcGFnZQord2l0aG91dCBjb25zdW1pbmcgc3dhcCBzcGFjZS4gIHRyeV90b19tdW5sb2NrKCkgd2lsbCBiZSBkZXNjcmliZWQgYmVsb3cuCisKK1RvICJjdWxsIiBhbiB1bmV2aWN0YWJsZSBwYWdlLCB2bXNjYW4gc2ltcGx5IHB1dHMgdGhlIHBhZ2UgYmFjayBvbiB0aGUgbHJ1CitsaXN0IHVzaW5nIHB1dGJhY2tfbHJ1X3BhZ2UoKS0tdGhlIGludmVyc2Ugb3BlcmF0aW9uIHRvIGlzb2xhdGVfbHJ1X3BhZ2UoKS0tCithZnRlciBkcm9wcGluZyB0aGUgcGFnZSBsb2NrLiAgQmVjYXVzZSB0aGUgY29uZGl0aW9uIHdoaWNoIG1ha2VzIHRoZSBwYWdlCit1bmV2aWN0YWJsZSBtYXkgY2hhbmdlIG9uY2UgdGhlIHBhZ2UgaXMgdW5sb2NrZWQsIHB1dGJhY2tfbHJ1X3BhZ2UoKSB3aWxsCityZWNoZWNrIHRoZSB1bmV2aWN0YWJsZSBzdGF0ZSBvZiBhIHBhZ2UgdGhhdCBpdCBwbGFjZXMgb24gdGhlIHVuZXZpY3RhYmxlIGxydQorbGlzdC4gIElmIHRoZSBwYWdlIGhhcyBiZWNvbWUgdW5ldmljdGFibGUsIHB1dGJhY2tfbHJ1X3BhZ2UoKSByZW1vdmVzIGl0IGZyb20KK3RoZSBsaXN0IGFuZCByZXRyaWVzLCBpbmNsdWRpbmcgdGhlIHBhZ2VfdW5ldmljdGFibGUoKSB0ZXN0LiAgQmVjYXVzZSBzdWNoIGEKK3JhY2UgaXMgYSByYXJlIGV2ZW50IGFuZCBtb3ZlbWVudCBvZiBwYWdlcyBvbnRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHNob3VsZCBiZQorcmFyZSwgdGhlc2UgZXh0cmEgZXZpY3RhYmlsdHkgY2hlY2tzIHNob3VsZCBub3Qgb2NjdXIgaW4gdGhlIG1ham9yaXR5IG9mIGNhbGxzCit0byBwdXRiYWNrX2xydV9wYWdlKCkuCisKKworTWxvY2tlZCBQYWdlOiAgUHJpb3IgV29yaworCitUaGUgIlVuZXZpY3RhYmxlIE1sb2NrZWQgUGFnZXMiIGluZnJhc3RydWN0dXJlIGlzIGJhc2VkIG9uIHdvcmsgb3JpZ2luYWxseQorcG9zdGVkIGJ5IE5pY2sgUGlnZ2luIGluIGFuIFJGQyBwYXRjaCBlbnRpdGxlZCAibW06IG1sb2NrZWQgcGFnZXMgb2ZmIExSVSIuCitOaWNrIHBvc3RlZCBoaXMgcGF0Y2ggYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBwYXRjaCBwb3N0ZWQgYnkgQ2hyaXN0b3BoCitMYW1ldGVyIHRvIGFjaGlldmUgdGhlIHNhbWUgb2JqZWN0aXZlLS1oaWRpbmcgbWxvY2tlZCBwYWdlcyBmcm9tIHZtc2Nhbi4KK0luIE5pY2sncyBwYXRjaCwgaGUgdXNlZCBvbmUgb2YgdGhlIHN0cnVjdCBwYWdlIGxydSBsaXN0IGxpbmsgZmllbGRzIGFzIGEgY291bnQKK29mIFZNX0xPQ0tFRCB2bWFzIHRoYXQgbWFwIHRoZSBwYWdlLiAgVGhpcyB1c2Ugb2YgdGhlIGxpbmsgZmllbGQgZm9yIGEgY291bnQKK3ByZXZlbnRlZCB0aGUgbWFuYWdlbWVudCBvZiB0aGUgcGFnZXMgb24gYW4gTFJVIGxpc3QuICBUaHVzLCBtbG9ja2VkIHBhZ2VzIHdlcmUKK25vdCBtaWdyYXRhYmxlIGFzIGlzb2xhdGVfbHJ1X3BhZ2UoKSBjb3VsZCBub3QgZmluZCB0aGVtIGFuZCB0aGUgbHJ1IGxpc3QgbGluaworZmllbGQgd2FzIG5vdCBhdmFpbGFibGUgdG8gdGhlIG1pZ3JhdGlvbiBzdWJzeXN0ZW0uICBOaWNrIHJlc29sdmVkIHRoaXMgYnkKK3B1dHRpbmcgbWxvY2tlZCBwYWdlcyBiYWNrIG9uIHRoZSBscnUgbGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBpc29sYXRlIHRoZW0sCit0aHVzIGFiYW5kb25pbmcgdGhlIGNvdW50IG9mIFZNX0xPQ0tFRCB2bWFzLiAgV2hlbiBOaWNrJ3MgcGF0Y2ggd2FzIGludGVncmF0ZWQKK3dpdGggdGhlIFVuZXZpY3RhYmxlIExSVSB3b3JrLCB0aGUgY291bnQgd2FzIHJlcGxhY2VkIGJ5IHdhbGtpbmcgdGhlIHJldmVyc2UKK21hcCB0byBkZXRlcm1pbmUgd2hldGhlciBhbnkgVk1fTE9DS0VEIHZtYXMgbWFwcGVkIHRoZSBwYWdlLiAgTW9yZSBvbiB0aGlzCitiZWxvdy4KKworCitNbG9ja2VkIFBhZ2VzOiAgQmFzaWMgTWFuYWdlbWVudAorCitNbG9ja2VkIHBhZ2VzLS1wYWdlcyBtYXBwZWQgaW50byBhIFZNX0xPQ0tFRCB2bWEtLXJlcHJlc2VudCBvbmUgY2xhc3Mgb2YKK3VuZXZpY3RhYmxlIHBhZ2VzLiAgV2hlbiBzdWNoIGEgcGFnZSBoYXMgYmVlbiAibm90aWNlZCIgYnkgdGhlIG1lbW9yeQorbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRoZSBwYWdlIGlzIG1hcmtlZCB3aXRoIHRoZSBQR19tbG9ja2VkIFtQYWdlTWxvY2tlZCgpXQorZmxhZy4gIEEgUGFnZU1sb2NrZWQoKSBwYWdlIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCB3aGVuCitpdCBpcyBhZGRlZCB0byB0aGUgTFJVLiAgIFBhZ2VzIGNhbiBiZSAibm90aWNlZCIgYnkgbWVtb3J5IG1hbmFnZW1lbnQgaW4KK3NldmVyYWwgcGxhY2VzOgorCisxKSBpbiB0aGUgbWxvY2soKS9tbG9ja2FsbCgpIHN5c3RlbSBjYWxsIGhhbmRsZXJzLgorMikgaW4gdGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdoZW4gbW1hcCgpaW5nIGEgcmVnaW9uIHdpdGggdGhlCisgICBNQVBfTE9DS0VEIGZsYWcsIG9yIG1tYXAoKWluZyBhIHJlZ2lvbiBpbiBhIHRhc2sgdGhhdCBoYXMgY2FsbGVkCisgICBtbG9ja2FsbCgpIHdpdGggdGhlIE1DTF9GVVRVUkUgZmxhZy4gIEJvdGggb2YgdGhlc2UgY29uZGl0aW9ucyByZXN1bHQKKyAgIGluIHRoZSBWTV9MT0NLRUQgZmxhZyBiZWluZyBzZXQgZm9yIHRoZSB2bWEuCiszKSBpbiB0aGUgZmF1bHQgcGF0aCwgaWYgbWxvY2tlZCBwYWdlcyBhcmUgImN1bGxlZCIgaW4gdGhlIGZhdWx0IHBhdGgsCisgICBhbmQgd2hlbiBhIFZNX0xPQ0tFRCBzdGFjayBzZWdtZW50IGlzIGV4cGFuZGVkLgorNCkgYXMgbWVudGlvbmVkIGFib3ZlLCBpbiB2bXNjYW46c2hyaW5rX3BhZ2VfbGlzdCgpIHdpdGggYXR0ZW1wdGluZyB0bworICAgcmVjbGFpbSBhIHBhZ2UgaW4gYSBWTV9MT0NLRUQgdm1hLS12aWEgdHJ5X3RvX3VubWFwKCkgb3IgdHJ5X3RvX211bmxvY2soKS4KKworTWxvY2tlZCBwYWdlcyBiZWNvbWUgdW5sb2NrZWQgYW5kIHJlc2N1ZWQgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuOgorCisxKSBtYXBwZWQgaW4gYSByYW5nZSB1bmxvY2tlZCB2aWEgdGhlIG11bmxvY2soKS9tdW5sb2NrYWxsKCkgc3lzdGVtIGNhbGxzLgorMikgbXVubWFwcGVkKCkgb3V0IG9mIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgdGhhdCBtYXBzIHRoZSBwYWdlLCBpbmNsdWRpbmcKKyAgIHVubWFwcGluZyBhdCB0YXNrIGV4aXQuCiszKSB3aGVuIHRoZSBwYWdlIGlzIHRydW5jYXRlZCBmcm9tIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgb2YgYW4gbW1hcCgpZWQgZmlsZS4KKzQpIGJlZm9yZSBhIHBhZ2UgaXMgQ09XZWQgaW4gYSBWTV9MT0NLRUQgdm1hLgorCisKK01sb2NrZWQgUGFnZXM6ICBtbG9jaygpL21sb2NrYWxsKCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworQm90aCBbZG9fXW1sb2NrKCkgYW5kIFtkb19dbWxvY2thbGwoKSBzeXN0ZW0gY2FsbCBoYW5kbGVycyBjYWxsIG1sb2NrX2ZpeHVwKCkKK2ZvciBlYWNoIHZtYSBpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBjYWxsLiAgSW4gdGhlIGNhc2Ugb2YgbWxvY2thbGwoKSwKK3RoaXMgaXMgdGhlIGVudGlyZSBhY3RpdmUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgdGFzay4gIE5vdGUgdGhhdCBtbG9ja19maXh1cCgpCitpcyB1c2VkIGZvciBib3RoIG1sb2NrKClpbmcgYW5kIG11bmxvY2soKWluZyBhIHJhbmdlIG9mIG1lbW9yeS4gIEEgY2FsbCB0bworbWxvY2soKSBhbiBhbHJlYWR5IFZNX0xPQ0tFRCB2bWEsIG9yIHRvIG11bmxvY2soKSBhIHZtYSB0aGF0IGlzIG5vdCBWTV9MT0NLRUQKK2lzIHRyZWF0ZWQgYXMgYSBuby1vcC0tbWxvY2tfZml4dXAoKSBzaW1wbHkgcmV0dXJucy4KKworSWYgdGhlIHZtYSBwYXNzZXMgc29tZSBmaWx0ZXJpbmcgZGVzY3JpYmVkIGluICJNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFZtYXMiCitiZWxvdywgbWxvY2tfZml4dXAoKSB3aWxsIGF0dGVtcHQgdG8gbWVyZ2UgdGhlIHZtYSB3aXRoIGl0cyBuZWlnaGJvcnMgb3Igc3BsaXQKK29mZiBhIHN1YnNldCBvZiB0aGUgdm1hIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBjb3ZlciB0aGUgZW50aXJlIHZtYS4gIE9uY2UgdGhlCit2bWEgaGFzIGJlZW4gbWVyZ2VkIG9yIHNwbGl0IG9yIG5laXRoZXIsIG1sb2NrX2ZpeHVwKCkgd2lsbCBjYWxsCitfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvIGZhdWx0IGluIHRoZSBwYWdlcyB2aWEgZ2V0X3VzZXJfcGFnZXMoKSBhbmQKK3RvIG1hcmsgdGhlIHBhZ2VzIGFzIG1sb2NrZWQgdmlhIG1sb2NrX3ZtYV9wYWdlKCkuCisKK05vdGUgdGhhdCB0aGUgdm1hIGJlaW5nIG1sb2NrZWQgbWlnaHQgYmUgbWFwcGVkIHdpdGggUFJPVF9OT05FLiAgSW4gdGhpcyBjYXNlLAorZ2V0X3VzZXJfcGFnZXMoKSB3aWxsIGJlIHVuYWJsZSB0byBmYXVsdCBpbiB0aGUgcGFnZXMuICBUaGF0J3MgT0suICBJZiBwYWdlcworZG8gZW5kIHVwIGdldHRpbmcgZmF1bHRlZCBpbnRvIHRoaXMgVk1fTE9DS0VEIHZtYSwgd2UnbGwgaGFuZGxlIHRoZW0gaW4gdGhlCitmYXVsdCBwYXRoIG9yIGluIHZtc2Nhbi4KKworQWxzbyBub3RlIHRoYXQgYSBwYWdlIHJldHVybmVkIGJ5IGdldF91c2VyX3BhZ2VzKCkgY291bGQgYmUgdHJ1bmNhdGVkIG9yCittaWdyYXRlZCBvdXQgZnJvbSB1bmRlciB1cywgd2hpbGUgd2UncmUgdHJ5aW5nIHRvIG1sb2NrIGl0LiAgVG8gZGV0ZWN0Cit0aGlzLCBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRlc3RzIHRoZSBwYWdlX21hcHBpbmcgYWZ0ZXIgYWNxdWlyaW5nCit0aGUgcGFnZSBsb2NrLiAgSWYgdGhlIHBhZ2UgaXMgc3RpbGwgYXNzb2NpYXRlZCB3aXRoIGl0cyBtYXBwaW5nLCB3ZSdsbAorZ28gYWhlYWQgYW5kIGNhbGwgbWxvY2tfdm1hX3BhZ2UoKS4gIElmIHRoZSBtYXBwaW5nIGlzIGdvbmUsIHdlIGp1c3QKK3VubG9jayB0aGUgcGFnZSBhbmQgbW92ZSBvbi4gIFdvcnNlIGNhc2UsIHRoaXMgcmVzdWx0cyBpbiBwYWdlIG1hcHBlZAoraW4gYSBWTV9MT0NLRUQgdm1hIHJlbWFpbmluZyBvbiBhIG5vcm1hbCBMUlUgbGlzdCB3aXRob3V0IGJlaW5nCitQYWdlTWxvY2tlZCgpLiAgQWdhaW4sIHZtc2NhbiB3aWxsIGRldGVjdCBhbmQgY3VsbCBzdWNoIHBhZ2VzLgorCittbG9ja192bWFfcGFnZSgpLCBjYWxsZWQgd2l0aCB0aGUgcGFnZSBsb2NrZWQgW04uQi4sIG5vdCAibWxvY2tlZCJdLCB3aWxsCitUZXN0U2V0UGFnZU1sb2NrZWQoKSBmb3IgZWFjaCBwYWdlIHJldHVybmVkIGJ5IGdldF91c2VyX3BhZ2VzKCkuICBXZSB1c2UKK1Rlc3RTZXRQYWdlTWxvY2tlZCgpIGJlY2F1c2UgdGhlIHBhZ2UgbWlnaHQgYWxyZWFkeSBiZSBtbG9ja2VkIGJ5IGFub3RoZXIKK3Rhc2svdm1hIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIGV4dHJhIHdvcmsuICBXZSBlc3BlY2lhbGx5IGRvIG5vdCB3YW50IHRvCitjb3VudCBhbiBtbG9ja2VkIHBhZ2UgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHN0YXRpc3RpY3MuICBJZiB0aGUgcGFnZSB3YXMKK2FscmVhZHkgbWxvY2tlZCwgbWxvY2tfdm1hX3BhZ2UoKSBpcyBkb25lLgorCitJZiB0aGUgcGFnZSB3YXMgTk9UIGFscmVhZHkgbWxvY2tlZCwgbWxvY2tfdm1hX3BhZ2UoKSBhdHRlbXB0cyB0byBpc29sYXRlIHRoZQorcGFnZSBmcm9tIHRoZSBMUlUsIGFzIGl0IGlzIGxpa2VseSBvbiB0aGUgYXBwcm9wcmlhdGUgYWN0aXZlIG9yIGluYWN0aXZlIGxpc3QKK2F0IHRoYXQgdGltZS4gIElmIHRoZSBpc29sYXRlX2xydV9wYWdlKCkgc3VjY2VlZHMsIG1sb2NrX3ZtYV9wYWdlKCkgd2lsbAorcHV0YmFjayB0aGUgcGFnZS0tcHV0YmFja19scnVfcGFnZSgpLS13aGljaCB3aWxsIG5vdGljZSB0aGF0IHRoZSBwYWdlIGlzIG5vdworbWxvY2tlZCBhbmQgZGl2ZXJ0IHRoZSBwYWdlIHRvIHRoZSB6b25lJ3MgdW5ldmljdGFibGUgTFJVIGxpc3QuICBJZgorbWxvY2tfdm1hX3BhZ2UoKSBpcyB1bmFibGUgdG8gaXNvbGF0ZSB0aGUgcGFnZSBmcm9tIHRoZSBMUlUsIHZtc2NhbiB3aWxsIGhhbmRsZQoraXQgbGF0ZXIgaWYvd2hlbiBpdCBhdHRlbXB0cyB0byByZWNsYWltIHRoZSBwYWdlLgorCisKK01sb2NrZWQgUGFnZXM6ICBGaWx0ZXJpbmcgU3BlY2lhbCBWbWFzCisKK21sb2NrX2ZpeHVwKCkgZmlsdGVycyBzZXZlcmFsIGNsYXNzZXMgb2YgInNwZWNpYWwiIHZtYXM6CisKKzEpIHZtYXMgd2l0aCBWTV9JT3xWTV9QRk5NQVAgc2V0IGFyZSBza2lwcGVkIGVudGlyZWx5LiAgVGhlIHBhZ2VzIGJlaGluZAorICAgdGhlc2UgbWFwcGluZ3MgYXJlIGluaGVyZW50bHkgcGlubmVkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlbSBhcworICAgbWxvY2tlZC4gIEluIGFueSBjYXNlLCBtb3N0IG9mIHRoZSBwYWdlcyBoYXZlIG5vIHN0cnVjdCBwYWdlIGluIHdoaWNoIHRvCisgICBzbyBtYXJrIHRoZSBwYWdlLiAgQmVjYXVzZSBvZiB0aGlzLCBnZXRfdXNlcl9wYWdlcygpIHdpbGwgZmFpbCBmb3IgdGhlc2UKKyAgIHZtYXMsIHNvIHRoZXJlIGlzIG5vIHNlbnNlIGluIGF0dGVtcHRpbmcgdG8gdmlzaXQgdGhlbS4KKworMikgdm1hcyBtYXBwaW5nIGh1Z2V0bGJmcyBwYWdlIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IHBpbm5lZCBpbnRvIG1lbW9yeS4KKyAgIFdlIGRvbid0IG5lZWQgbm9yIHdhbnQgdG8gbWxvY2soKSB0aGVzZSBwYWdlcy4gIEhvd2V2ZXIsIHRvIHByZXNlcnZlIHRoZQorICAgcHJpb3IgYmVoYXZpb3Igb2YgbWxvY2soKS0tYmVmb3JlIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBjaGFuZ2VzLS1tbG9ja19maXh1cCgpCisgICB3aWxsIGNhbGwgbWFrZV9wYWdlc19wcmVzZW50KCkgaW4gdGhlIGh1Z2V0bGJmcyB2bWEgcmFuZ2UgdG8gYWxsb2NhdGUgdGhlCisgICBodWdlIHBhZ2VzIGFuZCBwb3B1bGF0ZSB0aGUgcHRlcy4KKworMykgdm1hcyB3aXRoIFZNX0RPTlRFWFBBTkR8Vk1fUkVTRVJWRUQgYXJlIGdlbmVyYWxseSB1c2VyIHNwYWNlIG1hcHBpbmdzIG9mCisgICBrZXJuZWwgcGFnZXMsIHN1Y2ggYXMgdGhlIHZkc28gcGFnZSwgcmVsYXkgY2hhbm5lbCBwYWdlcywgZXRjLiAgVGhlc2UgcGFnZXMKKyAgIGFyZSBpbmhlcmVudGx5IHVuZXZpY3RhYmxlIGFuZCBhcmUgbm90IG1hbmFnZWQgb24gdGhlIExSVSBsaXN0cy4KKyAgIG1sb2NrX2ZpeHVwKCkgdHJlYXRzIHRoZXNlIHZtYXMgdGhlIHNhbWUgYXMgaHVnZXRsYmZzIHZtYXMuICBJdCBjYWxscworICAgbWFrZV9wYWdlc19wcmVzZW50KCkgdG8gcG9wdWxhdGUgdGhlIHB0ZXMuCisKK05vdGUgdGhhdCBmb3IgYWxsIG9mIHRoZXNlIHNwZWNpYWwgdm1hcywgbWxvY2tfZml4dXAoKSBkb2VzIG5vdCBzZXQgdGhlCitWTV9MT0NLRUQgZmxhZy4gIFRoZXJlZm9yZSwgd2Ugd29uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlbSBsYXRlciBkdXJpbmcKK211bmxvY2soKSBvciBtdW5tYXAoKS0tZm9yIGV4YW1wbGUsIGF0IHRhc2sgZXhpdC4gIE5laXRoZXIgZG9lcyBtbG9ja19maXh1cCgpCithY2NvdW50IHRoZXNlIHZtYXMgYWdhaW5zdCB0aGUgdGFzaydzICJsb2NrZWRfdm0iLgorCitNbG9ja2VkIFBhZ2VzOiAgRG93bmdyYWRpbmcgdGhlIE1tYXAgU2VtYXBob3JlLgorCittbG9ja19maXh1cCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1tYXAgc2VtYXBob3JlIGhlbGQgZm9yIHdyaXRlLCBiZWNhdXNlCitpdCBtYXkgaGF2ZSB0byBtZXJnZSBvciBzcGxpdCB2bWFzLiAgSG93ZXZlciwgbWxvY2tpbmcgYSBsYXJnZSByZWdpb24gb2YKK21lbW9yeSBjYW4gdGFrZSBhIGxvbmcgdGltZS0tZXNwZWNpYWxseSBpZiB2bXNjYW4gbXVzdCByZWNsYWltIHBhZ2VzIHRvCitzYXRpc2Z5IHRoZSByZWdpb25zIHJlcXVpcmVtZW50cy4gIEZhdWx0aW5nIGluIGEgbGFyZ2UgcmVnaW9uIHdpdGggdGhlIG1tYXAKK3NlbWFwaG9yZSBoZWxkIGZvciB3cml0ZSBjYW4gaG9sZCBvZmYgb3RoZXIgZmF1bHRzIG9uIHRoZSBhZGRyZXNzIHNwYWNlLCBpbgordGhlIGNhc2Ugb2YgYSBtdWx0aS10aHJlYWRlZCB0YXNrLiAgSXQgY2FuIGFsc28gaG9sZCBvZmYgc2NhbnMgb2YgdGhlIHRhc2sncworYWRkcmVzcyBzcGFjZSB2aWEgL3Byb2MuICBXaGlsZSB0ZXN0aW5nIHVuZGVyIGhlYXZ5IGxvYWQsIGl0IHdhcyBvYnNlcnZlZCB0aGF0Cit0aGUgcHMoMSkgY29tbWFuZCBjb3VsZCBiZSBoZWxkIG9mZiBmb3IgbWFueSBtaW51dGVzIHdoaWxlIGEgbGFyZ2Ugc2VnbWVudCB3YXMKK21sb2NrKCllZCBkb3duLgorCitUbyBhZGRyZXNzIHRoaXMgaXNzdWUsIGFuZCB0byBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNwb25zaXZlIGR1cmluZyBtbG9jaygpaW5nCitvZiBsYXJnZSBzZWdtZW50cywgbWxvY2tfZml4dXAoKSBkb3duZ3JhZGVzIHRoZSBtbWFwIHNlbWFwaG9yZSB0byByZWFkIG1vZGUKK2R1cmluZyB0aGUgY2FsbCB0byBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLiAgVGhpcyB3b3JrcyBmaW5lLiAgSG93ZXZlciwgdGhlCitjYWxsZXJzIG9mIG1sb2NrX2ZpeHVwKCkgZXhwZWN0IHRoZSBzZW1hcGhvcmUgdG8gYmUgcmV0dXJuZWQgaW4gd3JpdGUgbW9kZS4KK1NvLCBtbG9ja19maXh1cCgpICJ1cGdyYWRlcyIgdGhlIHNlbXBob3JlIHRvIHdyaXRlIG1vZGUuICBMaW51eCBkb2VzIG5vdAorc3VwcG9ydCBhbiBhdG9taWMgdXBncmFkZV9zZW0oKSBjYWxsLCBzbyBtbG9ja19maXh1cCgpIG11c3QgZHJvcCB0aGUgc2VtYXBob3JlCithbmQgcmVhY3F1aXJlIGl0IGluIHdyaXRlIG1vZGUuICBJbiBhIG11bHRpLXRocmVhZGVkIHRhc2ssIGl0IGlzIHBvc3NpYmxlIGZvcgordGhlIHRhc2sgbWVtb3J5IG1hcCB0byBjaGFuZ2Ugd2hpbGUgdGhlIHNlbWFwaG9yZSBpcyBkcm9wcGVkLiAgVGhlcmVmb3JlLAorbWxvY2tfZml4dXAoKSBsb29rcyB1cCB0aGUgdm1hIGF0IHRoZSByYW5nZSBzdGFydCBhZGRyZXNzIGFmdGVyIHJlYWNxdWlyaW5nCit0aGUgc2VtYXBob3JlIGluIHdyaXRlIG1vZGUgYW5kIHZlcmlmaWVzIHRoYXQgaXQgc3RpbGwgY292ZXJzIHRoZSBvcmlnaW5hbAorcmFuZ2UuICBJZiBub3QsIG1sb2NrX2ZpeHVwKCkgcmV0dXJucyBhbiBlcnJvciBbLUVBR0FJTl0uICBBbGwgY2FsbGVycyBvZgorbWxvY2tfZml4dXAoKSBoYXZlIGJlZW4gY2hhbmdlZCB0byBkZWFsIHdpdGggdGhpcyBuZXcgZXJyb3IgY29uZGl0aW9uLgorCitOb3RlOiAgd2hlbiBtdW5sb2NraW5nIGEgcmVnaW9uLCBhbGwgb2YgdGhlIHBhZ2VzIHNob3VsZCBhbHJlYWR5IGJlIHJlc2lkZW50LS0KK3VubGVzcyB3ZSBoYXZlIHJhY2luZyB0aHJlYWRzIG1sb2NraW5nKCkgYW5kIG11bmxvY2tpbmcoKSByZWdpb25zLiAgU28sCit1bmxvY2tpbmcgc2hvdWxkIG5vdCBoYXZlIHRvIHdhaXQgZm9yIHBhZ2UgYWxsb2NhdGlvbnMgbm9yIGZhdWx0cyAgb2YgYW55IGtpbmQuCitUaGVyZWZvcmUgbWxvY2tfZml4dXAoKSBkb2VzIG5vdCBkb3duZ3JhZGUgdGhlIHNlbWFwaG9yZSBmb3IgbXVubG9jaygpLgorCisKK01sb2NrZWQgUGFnZXM6ICBtdW5sb2NrKCkvbXVubG9ja2FsbCgpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK1RoZSBtdW5sb2NrKCkgYW5kIG11bmxvY2thbGwoKSBzeXN0ZW0gY2FsbHMgYXJlIGhhbmRsZWQgYnkgdGhlIHNhbWUgZnVuY3Rpb25zLS0KK2RvX21sb2NrW2FsbF0oKS0tYXMgdGhlIG1sb2NrKCkgYW5kIG1sb2NrYWxsKCkgc3lzdGVtIGNhbGxzIHdpdGggdGhlIHVubG9jawordnMgbG9jayBvcGVyYXRpb24gaW5kaWNhdGVkIGJ5IGFuIGFyZ3VtZW50LiAgU28sIHRoZXNlIHN5c3RlbSBjYWxscyBhcmUgYWxzbworaGFuZGxlZCBieSBtbG9ja19maXh1cCgpLiAgQWdhaW4sIGlmIGNhbGxlZCBmb3IgYW4gYWxyZWFkeSBtdW5sb2NrKCllZCB2bWEsCittbG9ja19maXh1cCgpIHNpbXBseSByZXR1cm5zLiAgQmVjYXVzZSBvZiB0aGUgdm1hIGZpbHRlcmluZyBkaXNjdXNzZWQgYWJvdmUsCitWTV9MT0NLRUQgd2lsbCBub3QgYmUgc2V0IGluIGFueSAic3BlY2lhbCIgdm1hcy4gIFNvLCB0aGVzZSB2bWFzIHdpbGwgYmUKK2lnbm9yZWQgZm9yIG11bmxvY2suCisKK0lmIHRoZSB2bWEgaXMgVk1fTE9DS0VELCBtbG9ja19maXh1cCgpIGFnYWluIGF0dGVtcHRzIHRvIG1lcmdlIG9yIHNwbGl0IG9mZgordGhlIHNwZWNpZmllZCByYW5nZS4gIFRoZSByYW5nZSBpcyB0aGVuIG11bmxvY2tlZCB2aWEgdGhlIGZ1bmN0aW9uCitfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLS10aGUgc2FtZSBmdW5jdGlvbiB1c2VkIHRvIG1sb2NrIGEgdm1hIHJhbmdlLS0KK3Bhc3NpbmcgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgbXVubG9jaygpIGlzIGJlaW5nIHBlcmZvcm1lZC4KKworQmVjYXVzZSB0aGUgdm1hIGFjY2VzcyBwcm90ZWN0aW9ucyBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCB0byBQUk9UX05PTkUgYWZ0ZXIKK2ZhdWx0aW5nIGluIGFuZCBtbG9ja2luZyBzb21lIHBhZ2VzLCBnZXRfdXNlcl9wYWdlcygpIHdhcyB1bnJlbGlhYmxlIGZvciB2aXNpdGluZwordGhlc2UgcGFnZXMgZm9yIG11bmxvY2tpbmcuICBCZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbGVhdmUgcGFnZXMgbWxvY2tlZCgpLAorZ2V0X3VzZXJfcGFnZXMoKSB3YXMgZW5oYW5jZWQgdG8gYWNjZXB0IGEgZmxhZyB0byBpZ25vcmUgdGhlIHBlcm1pc3Npb25zIHdoZW4KK2ZldGNoaW5nIHRoZSBwYWdlcy0tYWxsIG9mIHdoaWNoIHNob3VsZCBiZSByZXNpZGVudCBhcyBhIHJlc3VsdCBvZiBwcmV2aW91cworbWxvY2soKWluZy4KKworRm9yIG11bmxvY2soKSwgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB1bmxvY2tzIGluZGl2aWR1YWwgcGFnZXMgYnkgY2FsbGluZworbXVubG9ja192bWFfcGFnZSgpLiAgbXVubG9ja192bWFfcGFnZSgpIHVuY29uZGl0aW9uYWxseSBjbGVhcnMgdGhlIFBHX21sb2NrZWQKK2ZsYWcgdXNpbmcgVGVzdENsZWFyUGFnZU1sb2NrZWQoKS4gIEFzIHdpdGggbWxvY2tfdm1hX3BhZ2UoKSwgbXVubG9ja192bWFfcGFnZSgpCit1c2UgdGhlIFRlc3QqUGFnZU1sb2NrZWQoKSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhZ2UgbWlnaHQKK2hhdmUgYWxyZWFkeSBiZWVuIHVubG9ja2VkIGJ5IGFub3RoZXIgdGFzay4gIElmIHRoZSBwYWdlIHdhcyBtbG9ja2VkLAorbXVubG9ja192bWFfcGFnZSgpIHVwZGF0ZXMgdGhhdCB6b25lIHN0YXRpc3RpY3MgZm9yIHRoZSBudW1iZXIgb2YgbWxvY2tlZAorcGFnZXMuICBOb3RlLCBob3dldmVyLCB0aGF0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZW4ndCBjaGVja2VkIHdoZXRoZXIgdGhlIHBhZ2UKK2lzIG1hcHBlZCBieSBvdGhlciBWTV9MT0NLRUQgdm1hcy4KKworV2UgY2FuJ3QgY2FsbCB0cnlfdG9fbXVubG9jaygpLCB0aGUgZnVuY3Rpb24gdGhhdCB3YWxrcyB0aGUgcmV2ZXJzZSBtYXAgdG8gY2hlY2sKK2ZvciBvdGhlciBWTV9MT0NLRUQgdm1hcywgd2l0aG91dCBmaXJzdCBpc29sYXRpbmcgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLgordHJ5X3RvX211bmxvY2soKSBpcyBhIHZhcmlhbnQgb2YgdHJ5X3RvX3VubWFwKCkgYW5kIHRodXMgcmVxdWlyZXMgdGhhdCB0aGUgcGFnZQorbm90IGJlIG9uIGFuIGxydSBsaXN0LiAgW01vcmUgb24gdGhlc2UgYmVsb3cuXSAgSG93ZXZlciwgdGhlIGNhbGwgdG8KK2lzb2xhdGVfbHJ1X3BhZ2UoKSBjb3VsZCBmYWlsLCBpbiB3aGljaCBjYXNlIHdlIGNvdWxkbid0IHRyeV90b19tdW5sb2NrKCkuCitTbywgd2UgZ28gYWhlYWQgYW5kIGNsZWFyIFBHX21sb2NrZWQgdXAgZnJvbnQsIGFzIHRoaXMgbWlnaHQgYmUgdGhlIG9ubHkgY2hhbmNlCit3ZSBoYXZlLiAgSWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBpc29sYXRlIHRoZSBwYWdlLCB3ZSBnbyBhaGVhZCBhbmQKK3RyeV90b19tdW5sb2NrKCksIHdoaWNoIHdpbGwgcmVzdG9yZSB0aGUgUEdfbWxvY2tlZCBmbGFnIGFuZCB1cGRhdGUgdGhlIHpvbmUKK3BhZ2Ugc3RhdGlzdGljcyBpZiBpdCBmaW5kcyBhbm90aGVyIHZtYSBob2xkaW5nIHRoZSBwYWdlIG1sb2NrZWQuICBJZiB3ZSBmYWlsCit0byBpc29sYXRlIHRoZSBwYWdlLCB3ZSdsbCBoYXZlIGxlZnQgYSBwb3RlbnRpYWxseSBtbG9ja2VkIHBhZ2Ugb24gdGhlIExSVS4KK1RoaXMgaXMgZmluZSwgYmVjYXVzZSB3ZSdsbCBjYXRjaCBpdCBsYXRlciB3aGVuL2lmIHZtc2NhbiB0cmllcyB0byByZWNsYWltIHRoZQorcGFnZS4gIFRoaXMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKworTWxvY2tlZCBQYWdlczogIE1pZ3JhdGluZyBUaGVtLi4uCisKK0EgcGFnZSB0aGF0IGlzIGJlaW5nIG1pZ3JhdGVkIGhhcyBiZWVuIGlzb2xhdGVkIGZyb20gdGhlIGxydSBsaXN0cyBhbmQgaXMKK2hlbGQgbG9ja2VkIGFjcm9zcyB1bm1hcHBpbmcgb2YgdGhlIHBhZ2UsIHVwZGF0aW5nIHRoZSBwYWdlJ3MgbWFwcGluZworW2FkZHJlc3Nfc3BhY2VdIGVudHJ5IGFuZCBjb3B5aW5nIHRoZSBjb250ZW50cyBhbmQgc3RhdGUsIHVudGlsIHRoZQorcGFnZSB0YWJsZSBlbnRyeSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGFuIGVudHJ5IHRoYXQgcmVmZXJzIHRvIHRoZSBuZXcKK3BhZ2UuICBMaW51eCBzdXBwb3J0cyBtaWdyYXRpb24gb2YgbWxvY2tlZCBwYWdlcyBhbmQgb3RoZXIgdW5ldmljdGFibGUKK3BhZ2VzLiAgVGhpcyBpbnZvbHZlcyBzaW1wbHkgbW92aW5nIHRoZSBQYWdlTWxvY2tlZCBhbmQgUGFnZVVuZXZpY3RhYmxlIHN0YXRlcworZnJvbSB0aGUgb2xkIHBhZ2UgdG8gdGhlIG5ldyBwYWdlLgorCitOb3RlIHRoYXQgcGFnZSBtaWdyYXRpb24gY2FuIHJhY2Ugd2l0aCBtbG9ja2luZyBvciBtdW5sb2NraW5nIG9mIHRoZSBzYW1lCitwYWdlLiAgVGhpcyBoYXMgYmVlbiBkaXNjdXNzZWQgZnJvbSB0aGUgbWxvY2svbXVubG9jayBwZXJzcGVjdGl2ZSBpbiB0aGUKK3Jlc3BlY3RpdmUgc2VjdGlvbnMgYWJvdmUuICBCb3RoIHByb2Nlc3NlcyBbbWlncmF0aW9uLCBtW3VuXWxvY2tpbmddLCBob2xkCit0aGUgcGFnZSBsb2NrZWQuICBUaGlzIHByb3ZpZGVzIHRoZSBmaXJzdCBsZXZlbCBvZiBzeW5jaHJvbml6YXRpb24uICBQYWdlCittaWdyYXRpb24gemVyb3Mgb3V0IHRoZSBwYWdlX21hcHBpbmcgb2YgdGhlIG9sZCBwYWdlIGJlZm9yZSB1bmxvY2tpbmcgaXQsCitzbyBtW3VuXWxvY2sgY2FuIHNraXAgdGhlc2UgcGFnZXMgYnkgdGVzdGluZyB0aGUgcGFnZSBtYXBwaW5nIHVuZGVyIHBhZ2UKK2xvY2suCisKK1doZW4gY29tcGxldGluZyBwYWdlIG1pZ3JhdGlvbiwgd2UgcGxhY2UgdGhlIG5ldyBhbmQgb2xkIHBhZ2VzIGJhY2sgb250byB0aGUKK2xydSBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSBsb2NrLiAgVGhlICJ1bm5lZWRlZCIgcGFnZS0tb2xkIHBhZ2Ugb24gc3VjY2VzcywKK25ldyBwYWdlIG9uIGZhaWx1cmUtLXdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGhlbGQgYnkgdGhlCittaWdyYXRpb24gcHJvY2VzcyBpcyByZWxlYXNlZC4gIFRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHN0cmFuZCBwYWdlcyBvbiB0aGUKK3VuZXZpY3RhYmxlIGxpc3QgYmVjYXVzZSBvZiBhIHJhY2UgYmV0d2VlbiBtdW5sb2NrIGFuZCBtaWdyYXRpb24sIHBhZ2UKK21pZ3JhdGlvbiB1c2VzIHRoZSBwdXRiYWNrX2xydV9wYWdlKCkgZnVuY3Rpb24gdG8gYWRkIG1pZ3JhdGVkIHBhZ2VzIGJhY2sgdG8KK3RoZSBscnUuCisKKworTWxvY2tlZCBQYWdlczogIG1tYXAoTUFQX0xPQ0tFRCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworSW4gYWRkaXRpb24gdGhlIHRoZSBtbG9jaygpL21sb2NrYWxsKCkgc3lzdGVtIGNhbGxzLCBhbiBhcHBsaWNhdGlvbiBjYW4gcmVxdWVzdAordGhhdCBhIHJlZ2lvbiBvZiBtZW1vcnkgYmUgbWxvY2tlZCB1c2luZyB0aGUgTUFQX0xPQ0tFRCBmbGFnIHdpdGggdGhlIG1tYXAoKQorY2FsbC4gIEZ1cnRoZXJtb3JlLCBhbnkgbW1hcCgpIGNhbGwgb3IgYnJrKCkgY2FsbCB0aGF0IGV4cGFuZHMgdGhlIGhlYXAgYnkgYQordGFzayB0aGF0IGhhcyBwcmV2aW91c2x5IGNhbGxlZCBtbG9ja2FsbCgpIHdpdGggdGhlIE1DTF9GVVRVUkUgZmxhZyB3aWxsIHJlc3VsdAoraW4gdGhlIG5ld2x5IG1hcHBlZCBtZW1vcnkgYmVpbmcgbWxvY2tlZC4gIEJlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcywKK3RoZSBrZXJuZWwgc2ltcGx5IGNhbGxlZCBtYWtlX3BhZ2VzX3ByZXNlbnQoKSB0byBhbGxvY2F0ZSBwYWdlcyBhbmQgcG9wdWxhdGUKK3RoZSBwYWdlIHRhYmxlLgorCitUbyBtbG9jayBhIHJhbmdlIG9mIG1lbW9yeSB1bmRlciB0aGUgdW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUsIHRoZQorbW1hcCgpIGhhbmRsZXIgYW5kIHRhc2sgYWRkcmVzcyBzcGFjZSBleHBhbnNpb24gZnVuY3Rpb25zIGNhbGwKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHNwZWNpZnlpbmcgdGhlIHZtYSBhbmQgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gbWxvY2suCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBmaWx0ZXJzIHZtYXMgbGlrZSBtbG9ja19maXh1cCgpLCBhcyBkZXNjcmliZWQgYWJvdmUgaW4KKyJNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFZtYXMiLiAgSXQgd2lsbCBjbGVhciB0aGUgVk1fTE9DS0VEIGZsYWcsIHdoaWNoIHdpbGwKK2hhdmUgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgY2FsbGVyLCBpbiBmaWx0ZXJlZCB2bWFzLiAgVGh1cyB0aGVzZSB2bWEncyBuZWVkCitub3QgYmUgdmlzaXRlZCBmb3IgbXVubG9jayB3aGVuIHRoZSByZWdpb24gaXMgdW5tYXBwZWQuCisKK0ZvciAibm9ybWFsIiB2bWFzLCBtbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBjYWxscyBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvCitmYXVsdC9hbGxvY2F0ZSB0aGUgcGFnZXMgYW5kIG1sb2NrIHRoZW0uICBBZ2FpbiwgbGlrZSBtbG9ja19maXh1cCgpLAorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgZG93bmdyYWRlcyB0aGUgbW1hcCBzZW1hcGhvcmUgdG8gcmVhZCBtb2RlIGJlZm9yZQorYXR0ZW1wdGluZyB0byBmYXVsdC9hbGxvY2F0ZSBhbmQgbWxvY2sgdGhlIHBhZ2VzOyBhbmQgInVwZ3JhZGVzIiB0aGUgc2VtYXBob3JlCitiYWNrIHRvIHdyaXRlIG1vZGUgYmVmb3JlIHJldHVybmluZy4KKworVGhlIGNhbGxlcnMgb2YgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgd2lsbCBoYXZlIGFscmVhZHkgYWRkZWQgdGhlIG1lbW9yeQorcmFuZ2UgdG8gYmUgbWxvY2tlZCB0byB0aGUgdGFzaydzICJsb2NrZWRfdm0iLiAgVG8gYWNjb3VudCBmb3IgZmlsdGVyZWQgdm1hcywKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyBOT1QgbWxvY2tlZC4gIEFsbCBvZiB0aGUKK2NhbGxlcnMgdGhlbiBzdWJ0cmFjdCBhIG5vbi1uZWdhdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgdGFzaydzIGxvY2tlZF92bS4KK0EgbmVnYXRpdmUgcmV0dXJuIHZhbHVlIHJlcHJlc2VudCBhbiBlcnJvci0tZm9yIGV4YW1wbGUsIGZyb20gZ2V0X3VzZXJfcGFnZXMoKQorYXR0ZW1wdGluZyB0byBmYXVsdCBpbiBhIHZtYSB3aXRoIFBST1RfTk9ORSBhY2Nlc3MuICBJbiB0aGlzIGNhc2UsIHdlIGxlYXZlCit0aGUgbWVtb3J5IHJhbmdlIGFjY291bnRlZCBhcyBsb2NrZWRfdm0sIGFzIHRoZSBwcm90ZWN0aW9ucyBjb3VsZCBiZSBjaGFuZ2VkCitsYXRlciBhbmQgcGFnZXMgYWxsb2NhdGVkIGludG8gdGhhdCByZWdpb24uCisKKworTWxvY2tlZCBQYWdlczogIG11bm1hcCgpL2V4aXQoKS9leGVjKCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworV2hlbiB1bm1hcHBpbmcgYW4gbWxvY2tlZCByZWdpb24gb2YgbWVtb3J5LCB3aGV0aGVyIGJ5IGFuIGV4cGxpY2l0IGNhbGwgdG8KK211bm1hcCgpIG9yIHZpYSBhbiBpbnRlcm5hbCB1bm1hcCBmcm9tIGV4aXQoKSBvciBleGVjKCkgcHJvY2Vzc2luZywgd2UgbXVzdAorbXVubG9jayB0aGUgcGFnZXMgaWYgd2UncmUgcmVtb3ZpbmcgdGhlIGxhc3QgVk1fTE9DS0VEIHZtYSB0aGF0IG1hcHMgdGhlIHBhZ2VzLgorQmVmb3JlIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBjaGFuZ2VzLCBtbG9ja2luZyBkaWQgbm90IG1hcmsgdGhlIHBhZ2VzIGluIGFueSB3YXksCitzbyB1bm1hcHBpbmcgdGhlbSByZXF1aXJlZCBubyBwcm9jZXNzaW5nLgorCitUbyBtdW5sb2NrIGEgcmFuZ2Ugb2YgbWVtb3J5IHVuZGVyIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBpbmZyYXN0cnVjdHVyZSwgdGhlCittdW5tYXAoKSBoYW5kZXIgYW5kIHRhc2sgYWRkcmVzcyBzcGFjZSB0ZWFyIGRvd24gZnVuY3Rpb24gY2FsbAorbXVubG9ja192bWFfcGFnZXNfYWxsKCkuICBUaGUgbmFtZSByZWZsZWN0cyB0aGUgb2JzZXJ2YXRpb24gdGhhdCBvbmUgYWx3YXlzCitzcGVjaWZpZXMgdGhlIGVudGlyZSB2bWEgcmFuZ2Ugd2hlbiBtdW5sb2NrKClpbmcgZHVyaW5nIHVubWFwIG9mIGEgcmVnaW9uLgorQmVjYXVzZSBvZiB0aGUgdm1hIGZpbHRlcmluZyB3aGVuIG1sb2NraW5nKCkgcmVnaW9ucywgb25seSAibm9ybWFsIiB2bWFzIHRoYXQKK2FjdHVhbGx5IGNvbnRhaW4gbWxvY2tlZCBwYWdlcyB3aWxsIGJlIHBhc3NlZCB0byBtdW5sb2NrX3ZtYV9wYWdlc19hbGwoKS4KKworbXVubG9ja192bWFfcGFnZXNfYWxsKCkgY2xlYXJzIHRoZSBWTV9MT0NLRUQgdm1hIGZsYWcgYW5kLCBsaWtlIG1sb2NrX2ZpeHVwKCkKK2ZvciB0aGUgbXVubG9jayBjYXNlLCBjYWxscyBfX211bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdG8gd2FsayB0aGUgcGFnZSB0YWJsZQorZm9yIHRoZSB2bWEncyBtZW1vcnkgcmFuZ2UgYW5kIG11bmxvY2tfdm1hX3BhZ2UoKSBlYWNoIHJlc2lkZW50IHBhZ2UgbWFwcGVkIGJ5Cit0aGUgdm1hLiAgVGhpcyBlZmZlY3RpdmVseSBtdW5sb2NrcyB0aGUgcGFnZSwgb25seSBpZiB0aGlzIGlzIHRoZSBsYXN0CitWTV9MT0NLRUQgdm1hIHRoYXQgbWFwcyB0aGUgcGFnZS4KKworCitNbG9ja2VkIFBhZ2U6ICB0cnlfdG9fdW5tYXAoKQorCitbTm90ZTogIHRoZSBjb2RlIGNoYW5nZXMgcmVwcmVzZW50ZWQgYnkgdGhpcyBzZWN0aW9uIGFyZSByZWFsbHkgcXVpdGUgc21hbGwKK2NvbXBhcmVkIHRvIHRoZSB0ZXh0IHRvIGRlc2NyaWJlIHdoYXQgaGFwcGVuaW5nIGFuZCB3aHksIGFuZCB0byBkaXNjdXNzIHRoZQoraW1wbGljYXRpb25zLl0KKworUGFnZXMgY2FuLCBvZiBjb3Vyc2UsIGJlIG1hcHBlZCBpbnRvIG11bHRpcGxlIHZtYXMuICBTb21lIG9mIHRoZXNlIHZtYXMgbWF5CitoYXZlIFZNX0xPQ0tFRCBmbGFnIHNldC4gIEl0IGlzIHBvc3NpYmxlIGZvciBhIHBhZ2UgbWFwcGVkIGludG8gb25lIG9yIG1vcmUKK1ZNX0xPQ0tFRCB2bWFzIG5vdCB0byBoYXZlIHRoZSBQR19tbG9ja2VkIGZsYWcgc2V0IGFuZCB0aGVyZWZvcmUgcmVzaWRlIG9uIG9uZQorb2YgdGhlIGFjdGl2ZSBvciBpbmFjdGl2ZSBMUlUgbGlzdHMuICBUaGlzIGNvdWxkIGhhcHBlbiBpZiwgZm9yIGV4YW1wbGUsIGEKK3Rhc2sgaW4gdGhlIHByb2Nlc3Mgb2YgbXVubG9jaygpaW5nIHRoZSBwYWdlIGNvdWxkIG5vdCBpc29sYXRlIHRoZSBwYWdlIGZyb20KK3RoZSBMUlUuICBBcyBhIHJlc3VsdCwgdm1zY2FuL3Nocmlua19wYWdlX2xpc3QoKSBtaWdodCBlbmNvdW50ZXIgc3VjaCBhIHBhZ2UKK2FzIGRlc2NyaWJlZCBpbiAiVW5ldmljdGFibGUgUGFnZXMgYW5kIFZtc2NhbiBbc2hyaW5rXypfbGlzdCgpXSIuICBUbworaGFuZGxlIHRoaXMgc2l0dWF0aW9uLCB0cnlfdG9fdW5tYXAoKSBoYXMgYmVlbiBlbmhhbmNlZCB0byBjaGVjayBmb3IgVk1fTE9DS0VECit2bWFzIHdoaWxlIGl0IGlzIHdhbGtpbmcgYSBwYWdlJ3MgcmV2ZXJzZSBtYXAuCisKK3RyeV90b191bm1hcCgpIGlzIGFsd2F5cyBjYWxsZWQsIGJ5IGVpdGhlciB2bXNjYW4gZm9yIHJlY2xhaW0gb3IgZm9yIHBhZ2UKK21pZ3JhdGlvbiwgd2l0aCB0aGUgYXJndW1lbnQgcGFnZSBsb2NrZWQgYW5kIGlzb2xhdGVkIGZyb20gdGhlIExSVS4gIEJVR19PTigpCithc3NlcnRpb25zIGVuZm9yY2UgdGhpcyByZXF1aXJlbWVudC4gIFNlcGFyYXRlIGZ1bmN0aW9ucyBoYW5kbGUgYW5vbnltb3VzIGFuZAorbWFwcGVkIGZpbGUgcGFnZXMsIGFzIHRoZXNlIHR5cGVzIG9mIHBhZ2VzIGhhdmUgZGlmZmVyZW50IHJldmVyc2UgbWFwCittZWNoYW5pc21zLgorCisJdHJ5X3RvX3VubWFwX2Fub24oKQorCitUbyB1bm1hcCBhbm9ueW1vdXMgcGFnZXMsIGVhY2ggdm1hIGluIHRoZSBsaXN0IGFuY2hvcmVkIGluIHRoZSBhbm9uX3ZtYSBtdXN0IGJlCit2aXNpdGVkLS1hdCBsZWFzdCB1bnRpbCBhIFZNX0xPQ0tFRCB2bWEgaXMgZW5jb3VudGVyZWQuICBJZiB0aGUgcGFnZSBpcyBiZWluZwordW5tYXBwZWQgZm9yIG1pZ3JhdGlvbiwgVk1fTE9DS0VEIHZtYXMgZG8gbm90IHN0b3AgdGhlIHByb2Nlc3MgYmVjYXVzZSBtbG9ja2VkCitwYWdlcyBhcmUgbWlncmF0YWJsZS4gIEhvd2V2ZXIsIGZvciByZWNsYWltLCBpZiB0aGUgcGFnZSBpcyBtYXBwZWQgaW50byBhCitWTV9MT0NLRUQgdm1hLCB0aGUgc2NhbiBzdG9wcy4gIHRyeV90b191bm1hcCgpIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIG1tYXAKK3NlbXBob3JlIG9mIHRoZSBtbV9zdHJ1Y3QgdG8gd2hpY2ggdGhlIHZtYSBiZWxvbmdzIGluIHJlYWQgbW9kZS4gIElmIHRoaXMgaXMKK3N1Y2Nlc3NmdWwsIHRyeV90b191bm1hcCgpIHdpbGwgbWxvY2sgdGhlIHBhZ2UgdmlhIG1sb2NrX3ZtYV9wYWdlKCktLXdlCit3b3VsZG4ndCBoYXZlIGdvdHRlbiB0byB0cnlfdG9fdW5tYXAoKSBpZiB0aGUgcGFnZSB3ZXJlIGFscmVhZHkgbWxvY2tlZC0tYW5kCit3aWxsIHJldHVybiBTV0FQX01MT0NLLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhZ2UgaXMgdW5ldmljdGFibGUuICBJZiB0aGUKK21tYXAgc2VtYXBob3JlIGNhbm5vdCBiZSBhY3F1aXJlZCwgd2UgYXJlIG5vdCBzdXJlIHdoZXRoZXIgdGhlIHBhZ2UgaXMgcmVhbGx5Cit1bmV2aWN0YWJsZSBvciBub3QuICBJbiB0aGlzIGNhc2UsIHRyeV90b191bm1hcCgpIHdpbGwgcmV0dXJuIFNXQVBfQUdBSU4uCisKKwl0cnlfdG9fdW5tYXBfZmlsZSgpIC0tIGxpbmVhciBtYXBwaW5ncworCitVbm1hcHBpbmcgb2YgYSBtYXBwZWQgZmlsZSBwYWdlIHdvcmtzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgc2NhbiB2aXNpdHMKK2FsbCB2bWFzIHRoYXQgbWFwcyB0aGUgcGFnZSdzIGluZGV4L3BhZ2Ugb2Zmc2V0IGluIHRoZSBwYWdlJ3MgbWFwcGluZydzCityZXZlcnNlIG1hcCBwcmlvcml0eSBzZWFyY2ggdHJlZS4gIEl0IG11c3QgYWxzbyB2aXNpdCBlYWNoIHZtYSBpbiB0aGUgcGFnZSdzCittYXBwaW5nJ3Mgbm9uLWxpbmVhciBsaXN0LCBpZiB0aGUgbGlzdCBpcyBub24tZW1wdHkuICBBcyBmb3IgYW5vbnltb3VzIHBhZ2VzLAorb24gZW5jb3VudGVyaW5nIGEgVk1fTE9DS0VEIHZtYSBmb3IgYSBtYXBwZWQgZmlsZSBwYWdlLCB0cnlfdG9fdW5tYXAoKSB3aWxsCithdHRlbXB0IHRvIGFjcXVpcmUgdGhlIGFzc29jaWF0ZWQgbW1fc3RydWN0J3MgbW1hcCBzZW1hcGhvcmUgdG8gbWxvY2sgdGhlIHBhZ2UsCityZXR1cm5pbmcgU1dBUF9NTE9DSyBpZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIGFuZCBTV0FQX0FHQUlOLCBpZiBub3QuCisKKwl0cnlfdG9fdW5tYXBfZmlsZSgpIC0tIG5vbi1saW5lYXIgbWFwcGluZ3MKKworSWYgYSBwYWdlJ3MgbWFwcGluZyBjb250YWlucyBhIG5vbi1lbXB0eSBub24tbGluZWFyIG1hcHBpbmcgdm1hIGxpc3QsIHRoZW4KK3RyeV90b191bnttYXB8bG9ja30oKSBtdXN0IGFsc28gdmlzaXQgZWFjaCB2bWEgaW4gdGhhdCBsaXN0IHRvIGRldGVybWluZQord2hldGhlciB0aGUgcGFnZSBpcyBtYXBwZWQgaW4gYSBWTV9MT0NLRUQgdm1hLiAgQWdhaW4sIHRoZSBzY2FuIG11c3QgdmlzaXQKK2FsbCB2bWFzIGluIHRoZSBub24tbGluZWFyIGxpc3QgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2VzIGlzIG5vdC9zaG91bGQgbm90IGJlCittbG9ja2VkLiAgSWYgYSBWTV9MT0NLRUQgdm1hIGlzIGZvdW5kIGluIHRoZSBsaXN0LCB0aGUgc2NhbiBjb3VsZCB0ZXJtaW5hdGUuCitIb3dldmVyLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcGFnZSBpcyBhY3R1YWxseSBtYXBwZWQKK2luIGEgZ2l2ZW4gdm1hLS1laXRoZXIgZm9yIHVubWFwcGluZyBvciB0ZXN0aW5nIHdoZXRoZXIgdGhlIFZNX0xPQ0tFRCB2bWEKK2FjdHVhbGx5IHBpbnMgdGhlIHBhZ2UuCisKK1NvLCB0cnlfdG9fdW5tYXBfZmlsZSgpIGhhbmRsZXMgbm9uLWxpbmVhciBtYXBwaW5ncyBieSBzY2FubmluZyBhIGNlcnRhaW4KK251bWJlciBvZiBwYWdlcy0tYSAiY2x1c3RlciItLWluIGVhY2ggbm9uLWxpbmVhciB2bWEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWdlJ3MKK21hcHBpbmcsIGZvciBlYWNoIGZpbGUgbWFwcGVkIHBhZ2UgdGhhdCB2bXNjYW4gdHJpZXMgdG8gdW5tYXAuICBJZiB0aGlzIGhhcHBlbnMKK3RvIHVubWFwIHRoZSBwYWdlIHdlJ3JlIHRyeWluZyB0byB1bm1hcCwgdHJ5X3RvX3VubWFwKCkgd2lsbCBub3RpY2UgdGhpcyBvbgorcmV0dXJuLS0ocGFnZV9tYXBjb3VudChwYWdlKSA9PSAwKS0tYW5kIHJldHVybiBTV0FQX1NVQ0NFU1MuICBPdGhlcndpc2UsIGl0Cit3aWxsIHJldHVybiBTV0FQX0FHQUlOLCBjYXVzaW5nIHZtc2NhbiB0byByZWNpcmN1bGF0ZSB0aGlzIHBhZ2UuICBXZSB0YWtlCithZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXIgc2NhbiBpbiB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGFzIGZvbGxvd3M6CisKK0ZvciBlYWNoIG5vbi1saW5lYXIgdm1hLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIG1tYXAKK3NlbWFwaG9yZSBvZiB0aGUgYXNzb2NpYXRlZCBtbV9zdHJ1Y3QgZm9yIHJlYWQgd2l0aG91dCBibG9ja2luZy4gIElmIHRoaXMKK2F0dGVtcHQgaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHZtYSBpcyBWTV9MT0NLRUQsIHRyeV90b191bm1hcF9jbHVzdGVyKCkgd2lsbAorcmV0YWluIHRoZSBtbWFwIHNlbWFwaG9yZSBmb3IgdGhlIHNjYW47IG90aGVyd2lzZSBpdCBkcm9wcyBpdCBoZXJlLiAgVGhlbiwKK2ZvciBlYWNoIHBhZ2UgaW4gdGhlIGNsdXN0ZXIsIGlmIHdlJ3JlIGhvbGRpbmcgdGhlIG1tYXAgc2VtYXBob3JlIGZvciBhIGxvY2tlZAordm1hLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGNhbGxzIG1sb2NrX3ZtYV9wYWdlKCkgdG8gbWxvY2sgdGhlIHBhZ2UuICBUaGlzCitjYWxsIGlzIGEgbm8tb3AgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBsb2NrZWQsIGJ1dCB3aWxsIG1sb2NrIGFueSBwYWdlcyBpbgordGhlIG5vbi1saW5lYXIgbWFwcGluZyB0aGF0IGhhcHBlbiB0byBiZSB1bmxvY2tlZC4gIElmIG9uZSBvZiB0aGUgcGFnZXMgc28KK21sb2NrZWQgaXMgdGhlIHBhZ2UgcGFzc2VkIGluIHRvIHRyeV90b191bm1hcCgpLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIHdpbGwKK3JldHVybiBTV0FQX01MT0NLLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBTV0FQX0FHQUlOLiAgVGhpcyB3aWxsIGFsbG93IHZtc2NhbgordG8gY3VsbCB0aGUgcGFnZSwgcmF0aGVyIHRoYW4gcmVjaXJjdWxhdGluZyBpdCBvbiB0aGUgaW5hY3RpdmUgbGlzdC4gIEFnYWluLAoraWYgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBjYW5ub3QgYWNxdWlyZSB0aGUgdm1hJ3MgbW1hcCBzZW0sIGl0IHJldHVybnMKK1NXQVBfQUdBSU4sIGluZGljYXRpbmcgdGhhdCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgYSBWTV9MT0NLRUQgdm1hLCBidXQKK2NvdWxkbid0IGJlIG1sb2NrZWQuCisKKworTWxvY2tlZCBwYWdlczogIHRyeV90b19tdW5sb2NrKCkgUmV2ZXJzZSBNYXAgU2NhbgorCitUT0RPL0ZJWE1FOiAgYSBiZXR0ZXIgbmFtZSBtaWdodCBiZSBwYWdlX21sb2NrZWQoKS0tYW5hbG9nb3VzIHRvIHRoZQorcGFnZV9yZWZlcmVuY2VkKCkgcmV2ZXJzZSBtYXAgd2Fsa2VyLS1lc3BlY2lhbGx5IGlmIHdlIGNvbnRpbnVlIHRvIGNhbGwgdGhpcworZnJvbSBzaHJpbmtfcGFnZV9saXN0KCkuICBTZWUgcmVsYXRlZCBUT0RPL0ZJWE1FIGJlbG93LgorCitXaGVuIG11bmxvY2tfdm1hX3BhZ2UoKS0tc2VlICJNbG9ja2VkIFBhZ2VzOiAgbXVubG9jaygpL211bmxvY2thbGwoKSBTeXN0ZW0KK0NhbGwgSGFuZGxpbmciIGFib3ZlLS10cmllcyB0byBtdW5sb2NrIGEgcGFnZSwgb3Igd2hlbiBzaHJpbmtfcGFnZV9saXN0KCkKK2VuY291bnRlcnMgYW4gYW5vbnltb3VzIHBhZ2UgdGhhdCBpcyBub3QgeWV0IGluIHRoZSBzd2FwIGNhY2hlLCB0aGV5IG5lZWQgdG8KK2RldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgYW55IFZNX0xPQ0tFRCB2bWEsIHdpdGhvdXQKK2FjdHVhbGx5IGF0dGVtcHRpbmcgdG8gdW5tYXAgYWxsIHB0ZXMgZnJvbSB0aGUgcGFnZS4gIEZvciB0aGlzIHB1cnBvc2UsIHRoZQordW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUgaW50cm9kdWNlZCBhIHZhcmlhbnQgb2YgdHJ5X3RvX3VubWFwKCkgY2FsbGVkCit0cnlfdG9fbXVubG9jaygpLgorCit0cnlfdG9fbXVubG9jaygpIGNhbGxzIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcyB0cnlfdG9fdW5tYXAoKSBmb3IgYW5vbnltb3VzIGFuZAorbWFwcGVkIGZpbGUgcGFnZXMgd2l0aCBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmluZyB1bmxvY2sgdmVyc3VzIHVubWFwCitwcm9jZXNzaW5nLiAgQWdhaW4sIHRoZXNlIGZ1bmN0aW9ucyB3YWxrIHRoZSByZXNwZWN0aXZlIHJldmVyc2UgbWFwcyBsb29raW5nCitmb3IgVk1fTE9DS0VEIHZtYXMuICBXaGVuIHN1Y2ggYSB2bWEgaXMgZm91bmQgZm9yIGFub255bW91cyBwYWdlcyBhbmQgZmlsZQorcGFnZXMgbWFwcGVkIGluIGxpbmVhciBWTUFzLCBhcyBpbiB0aGUgdHJ5X3RvX3VubWFwKCkgY2FzZSwgdGhlIGZ1bmN0aW9ucworYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBhc3NvY2lhdGVkIG1tYXAgc2VtcGhvcmUsIG1sb2NrIHRoZSBwYWdlIHZpYQorbWxvY2tfdm1hX3BhZ2UoKSBhbmQgcmV0dXJuIFNXQVBfTUxPQ0suICBUaGlzIGVmZmVjdGl2ZWx5IHVuZG9lcyB0aGUKK3ByZS1jbGVhcmluZyBvZiB0aGUgcGFnZSdzIFBHX21sb2NrZWQgZG9uZSBieSBtdW5sb2NrX3ZtYV9wYWdlKCkgYW5kIGluZm9ybXMKK3Nocmlua19wYWdlX2xpc3QoKSB0aGF0IHRoZSBhbm9ueW1vdXMgcGFnZSBzaG91bGQgYmUgY3VsbGVkIHJhdGhlciB0aGFuIGFkZGVkCit0byB0aGUgc3dhcCBjYWNoZSBpbiBwcmVwYXJhdGlvbiBmb3IgYSB0cnlfdG9fdW5tYXAoKSB0aGF0IHdpbGwgYWxtb3N0CitjZXJ0YWlubHkgZmFpbC4KKworSWYgdHJ5X3RvX3VubWFwKCkgaXMgdW5hYmxlIHRvIGFjcXVpcmUgYSBWTV9MT0NLRUQgdm1hJ3MgYXNzb2NpYXRlZCBtbWFwCitzZW1hcGhvcmUsIGl0IHdpbGwgcmV0dXJuIFNXQVBfQUdBSU4uICBUaGlzIHdpbGwgYWxsb3cgc2hyaW5rX3BhZ2VfbGlzdCgpCit0byByZWN5Y2xlIHRoZSBwYWdlIG9uIHRoZSBpbmFjdGl2ZSBsaXN0IGFuZCBob3BlIHRoYXQgaXQgaGFzIGJldHRlciBsdWNrCit3aXRoIHRoZSBwYWdlIG5leHQgdGltZS4KKworRm9yIGZpbGUgcGFnZXMgbWFwcGVkIGludG8gbm9uLWxpbmVhciB2bWFzLCB0aGUgdHJ5X3RvX211bmxvY2soKSBsb2dpYyB3b3Jrcworc2xpZ2h0bHkgZGlmZmVyZW50bHkuICBPbiBlbmNvdW50ZXJpbmcgYSBWTV9MT0NLRUQgbm9uLWxpbmVhciB2bWEgdGhhdCBtaWdodAorbWFwIHRoZSBwYWdlLCB0cnlfdG9fbXVubG9jaygpIHJldHVybnMgU1dBUF9BR0FJTiB3aXRob3V0IGFjdHVhbGx5IG1sb2NraW5nCit0aGUgcGFnZS4gIG11bmxvY2tfdm1hX3BhZ2UoKSB3aWxsIGp1c3QgbGVhdmUgdGhlIHBhZ2UgdW5sb2NrZWQgYW5kIGxldAordm1zY2FuIGRlYWwgd2l0aCBpdC0tdGhlIHVzdWFsIGZhbGxiYWNrIHBvc2l0aW9uLgorCitOb3RlIHRoYXQgdHJ5X3RvX211bmxvY2soKSdzIHJldmVyc2UgbWFwIHdhbGsgbXVzdCB2aXNpdCBldmVyeSB2bWEgaW4gYSBwYWdlcycKK3JldmVyc2UgbWFwIHRvIGRldGVybWluZSB0aGF0IGEgcGFnZSBpcyBOT1QgbWFwcGVkIGludG8gYW55IFZNX0xPQ0tFRCB2bWEuCitIb3dldmVyLCB0aGUgc2NhbiBjYW4gdGVybWluYXRlIHdoZW4gaXQgZW5jb3VudGVycyBhIFZNX0xPQ0tFRCB2bWEgYW5kIGNhbgorc3VjY2Vzc2Z1bGx5IGFjcXVpcmUgdGhlIHZtYSdzIG1tYXAgc2VtcGhvcmUgZm9yIHJlYWQgYW5kIG1sb2NrIHRoZSBwYWdlLgorQWx0aG91Z2ggdHJ5X3RvX211bmxvY2soKSBjYW4gYmUgY2FsbGVkIG1hbnkgW3ZlcnkgbWFueSFdIHRpbWVzIHdoZW4KK211bmxvY2soKWluZyBhIGxhcmdlIHJlZ2lvbiBvciB0ZWFyaW5nIGRvd24gYSBsYXJnZSBhZGRyZXNzIHNwYWNlIHRoYXQgaGFzIGJlZW4KK21sb2NrZWQgdmlhIG1sb2NrYWxsKCksIG92ZXJhbGwgdGhpcyBpcyBhIGZhaXJseSByYXJlIGV2ZW50LiAgSW4gYWRkaXRpb24sCithbHRob3VnaCBzaHJpbmtfcGFnZV9saXN0KCkgY2FsbHMgdHJ5X3RvX211bmxvY2soKSBmb3IgZXZlcnkgYW5vbnltb3VzIHBhZ2UgdGhhdAoraXQgaGFuZGxlcyB0aGF0IGlzIG5vdCB5ZXQgaW4gdGhlIHN3YXAgY2FjaGUsIG9uIGF2ZXJhZ2UgYW5vbnltb3VzIHBhZ2VzIHdpbGwKK2hhdmUgdmVyeSBzaG9ydCByZXZlcnNlIG1hcCBsaXN0cy4KKworTWxvY2tlZCBQYWdlOiAgUGFnZSBSZWNsYWltIGluIHNocmlua18qX2xpc3QoKQorCitzaHJpbmtfYWN0aXZlX2xpc3QoKSBjdWxscyBhbnkgb2J2aW91c2x5IHVuZXZpY3RhYmxlIHBhZ2VzLS1pLmUuLAorIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpLS1kaXZlcnRpbmcgdGhlc2UgdG8gdGhlIHVuZXZpY3RhYmxlIGxydQorbGlzdC4gIEhvd2V2ZXIsIHNocmlua19hY3RpdmVfbGlzdCgpIG9ubHkgc2VlcyB1bmV2aWN0YWJsZSBwYWdlcyB0aGF0CittYWRlIGl0IG9udG8gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBscnUgbGlzdHMuICBOb3RlIHRoYXQgdGhlc2UgcGFnZXMgZG8gbm90CitoYXZlIFBhZ2VVbmV2aWN0YWJsZSBzZXQtLW90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCBhbmQKK3Nocmlua19hY3RpdmVfbGlzdCB3b3VsZCBuZXZlciBzZWUgdGhlbS4KKworU29tZSBleGFtcGxlcyBvZiB0aGVzZSB1bmV2aWN0YWJsZSBwYWdlcyBvbiB0aGUgTFJVIGxpc3RzIGFyZToKKworMSkgcmFtZnMgcGFnZXMgdGhhdCBoYXZlIGJlZW4gcGxhY2VkIG9uIHRoZSBscnUgbGlzdHMgd2hlbiBmaXJzdCBhbGxvY2F0ZWQuCisKKzIpIFNITV9MT0NLZWQgc2hhcmVkIG1lbW9yeSBwYWdlcy4gIHNobWN0bChTSE1fTE9DSykgZG9lcyBub3QgYXR0ZW1wdCB0bworICAgYWxsb2NhdGUgb3IgZmF1bHQgaW4gdGhlIHBhZ2VzIGluIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gIFRoaXMgaGFwcGVucworICAgd2hlbiBhbiBhcHBsaWNhdGlvbiBhY2Nlc3NlcyB0aGUgcGFnZSB0aGUgZmlyc3QgdGltZSBhZnRlciBTSE1fTE9DS2luZworICAgdGhlIHNlZ21lbnQuCisKKzMpIE1sb2NrZWQgcGFnZXMgdGhhdCBjb3VsZCBub3QgYmUgaXNvbGF0ZWQgZnJvbSB0aGUgbHJ1IGFuZCBtb3ZlZCB0byB0aGUKKyAgIHVuZXZpY3RhYmxlIGxpc3QgaW4gbWxvY2tfdm1hX3BhZ2UoKS4KKworMykgUGFnZXMgbWFwcGVkIGludG8gbXVsdGlwbGUgVk1fTE9DS0VEIHZtYXMsIGJ1dCB0cnlfdG9fbXVubG9jaygpIGNvdWxkbid0CisgICBhY3F1aXJlIHRoZSB2bWEncyBtbWFwIHNlbWFwaG9yZSB0byB0ZXN0IHRoZSBmbGFncyBhbmQgc2V0IFBhZ2VNbG9ja2VkLgorICAgbXVubG9ja192bWFfcGFnZSgpIHdhcyBmb3JjZWQgdG8gbGV0IHRoZSBwYWdlIGJhY2sgb24gdG8gdGhlIG5vcm1hbAorICAgTFJVIGxpc3QgZm9yIHZtc2NhbiB0byBoYW5kbGUuCisKK3Nocmlua19pbmFjdGl2ZV9saXN0KCkgYWxzbyBjdWxscyBhbnkgdW5ldmljdGFibGUgcGFnZXMgdGhhdCBpdCBmaW5kcworb24gdGhlIGluYWN0aXZlIGxpc3RzLCBhZ2FpbiBkaXZlcnRpbmcgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgem9uZSdzIHVuZXZpY3RhYmxlCitscnUgbGlzdC4gIHNocmlua19pbmFjdGl2ZV9saXN0KCkgc2hvdWxkIG9ubHkgc2VlIFNITV9MT0NLZWQgcGFnZXMgdGhhdCBiZWNhbWUKK1NITV9MT0NLZWQgYWZ0ZXIgc2hyaW5rX2FjdGl2ZV9saXN0KCkgaGFkIG1vdmVkIHRoZW0gdG8gdGhlIGluYWN0aXZlIGxpc3QsIG9yCitwYWdlcyBtYXBwZWQgaW50byBWTV9MT0NLRUQgdm1hcyB0aGF0IG11bmxvY2tfdm1hX3BhZ2UoKSBjb3VsZG4ndCBpc29sYXRlIGZyb20KK3RoZSBscnUgdG8gcmVjaGVjayB2aWEgdHJ5X3RvX211bmxvY2soKS4gIHNocmlua19pbmFjdGl2ZV9saXN0KCkgd29uJ3Qgbm90aWNlCit0aGUgbGF0dGVyLCBidXQgd2lsbCBwYXNzIG9uIHRvIHNocmlua19wYWdlX2xpc3QoKS4KKworc2hyaW5rX3BhZ2VfbGlzdCgpIGFnYWluIGN1bGxzIG9idmlvdXNseSB1bmV2aWN0YWJsZSBwYWdlcyB0aGF0IGl0IGNvdWxkCitlbmNvdW50ZXIgZm9yIHNpbWlsYXIgcmVhc29uIHRvIHNocmlua19pbmFjdGl2ZV9saXN0KCkuICBBcyBhbHJlYWR5IGRpc2N1c3NlZCwKK3Nocmlua19wYWdlX2xpc3QoKSBwcm9hY3RpdmVseSBsb29rcyBmb3IgYW5vbnltb3VzIHBhZ2VzIHRoYXQgc2hvdWxkIGhhdmUKK1BHX21sb2NrZWQgc2V0IGJ1dCBkb24ndC0tdGhlc2Ugd291bGQgbm90IGJlIGRldGVjdGVkIGJ5IHBhZ2VfZXZpY3RhYmxlKCktLXRvCithdm9pZCBhZGRpbmcgdGhlbSB0byB0aGUgc3dhcCBjYWNoZSB1bm5lY2Vzc2FyaWx5LiAgRmlsZSBwYWdlcyBtYXBwZWQgaW50bworVk1fTE9DS0VEIHZtYXMgYnV0IHdpdGhvdXQgUEdfbWxvY2tlZCBzZXQgd2lsbCBtYWtlIGl0IGFsbCB0aGUgd2F5IHRvCit0cnlfdG9fdW5tYXAoKS4gIHNocmlua19wYWdlX2xpc3QoKSB3aWxsIGRpdmVydCB0aGVtIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHdoZW4KK3RyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSywgYXMgZGlzY3Vzc2VkIGFib3ZlLgorCitUT0RPL0ZJWE1FOiAgSWYgd2UgY2FuIGVuaGFuY2UgdGhlIHN3YXAgY2FjaGUgdG8gcmVsaWFibHkgcmVtb3ZlIGVudHJpZXMKK3dpdGggcGFnZV9jb3VudChwYWdlKSA+IDIsIGFzIGxvbmcgYXMgYWxsIHB0ZXMgYXJlIG1hcHBlZCB0byB0aGUgcGFnZSBhbmQKK25vdCB0aGUgc3dhcCBlbnRyeSwgd2UgY2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgY2FsbCB0byB0cnlfdG9fbXVubG9jaygpIGluCitzaHJpbmtfcGFnZV9saXN0KCkgYW5kIGp1c3QgcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHN3YXAgY2FjaGUgd2hlbgordHJ5X3RvX3VubWFwKCkgcmV0dXJucyBTV0FQX01MT0NLLiAgIEN1cnJlbnRseSwgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2UoKQorZG9lc24ndCBzZWVtIHRvIGFsbG93IHRoYXQuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdzEvMDAtSU5ERVgKaW5kZXggNTI3MGNmNC4uY2I0OTgwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3cxLzAwLUlOREVYCkBAIC0xLDUgKzEsNyBAQAogMDAtSU5ERVgKIAktIFRoaXMgZmlsZQorc2xhdmVzLworCS0gRHJpdmVycyB0aGF0IHByb3ZpZGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMgZmFtaWx5IGNvZGVzLgogbWFzdGVycy8KIAktIEluZGl2aWR1YWwgY2hpcHMgcHJvdmlkaW5nIDEtd2lyZSBidXNzZXMuCiB3MS5nZW5lcmljCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDkwIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ5MAppbmRleCAyMzlmOWFlLi4yODE3NmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDkwCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0OTAKQEAgLTE2LDMgKzE2LDU1IEBACiBEUzk0OTAoUikgaXMgYSBVU0IgPC0+IFcxIGJ1cyBtYXN0ZXIgZGV2aWNlCiB3aGljaCBoYXMgMHg4MSBmYW1pbHkgSUQgaW50ZWdyYXRlZCBjaGlwIGFuZCBEUzI0OTAKIGxvdy1sZXZlbCBvcGVyYXRpb25hbCBjaGlwLgorCitOb3RlcyBhbmQgbGltaXRhdGlvbnMuCistIFRoZSB3ZWFrIHB1bGx1cCBjdXJyZW50IGlzIGEgbWluaW11bSBvZiAwLjltQSBhbmQgbWF4aW11bSBvZiA2LjBtQS4KKy0gVGhlIDVWIHN0cm9uZyBwdWxsdXAgaXMgc3VwcG9ydGVkIHdpdGggYSBtaW5pbXVtIG9mIDUuOW1BIGFuZCBhCisgIG1heGltdW0gb2YgMzAuNCBtQS4gIChGcm9tIERTMjQ5MC5wZGYpCistIFdoaWxlIHRoZSBkczI0OTAgc3VwcG9ydHMgYSBoYXJkd2FyZSBzZWFyY2ggdGhlIGNvZGUgZG9lc24ndCB0YWtlCisgIGFkdmFudGFnZSBvZiBpdCAoaW4gdGVzdGVkIGNhc2UgaXQgb25seSByZXR1cm5lZCBmaXJzdCBkZXZpY2UpLgorLSBUaGUgaGFyZHdhcmUgd2lsbCBkZXRlY3Qgd2hlbiBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byB0aGUgYnVzIG9uIHRoZQorICBuZXh0IGJ1cyAocmVzZXQ/KSBvcGVyYXRpb24sIGhvd2V2ZXIgb25seSBhIG1lc3NhZ2UgaXMgcHJpbnRlZCBhcworICB0aGUgY29yZSB3MSBjb2RlIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uLiAgQ29ubmVjdGluZworICBvbmUgZGV2aWNlIHRlbmRzIHRvIGdpdmUgbXVsdGlwbGUgbmV3IGRldmljZSBub3RpZmljYXRpb25zLgorLSBUaGUgbnVtYmVyIG9mIFVTQiBidXMgdHJhbnNhY3Rpb25zIGNvdWxkIGJlIHJlZHVjZWQgaWYgdzFfcmVzZXRfc2VuZAorICB3YXMgYWRkZWQgdG8gdGhlIEFQSS4gIFRoZSBuYW1lIGlzIGp1c3QgYSBzdWdnZXN0aW9uLiAgSXQgd291bGQgdGFrZQorICBhIHdyaXRlIGJ1ZmZlciBhbmQgYSByZWFkIGJ1ZmZlciAoYWxvbmcgd2l0aCBzaXplcykgYXMgYXJndW1lbnRzLgorICBUaGUgZHMyNDkwIGJsb2NrIEkvTyBjb21tYW5kIHN1cHBvcnRzIHJlc2V0LCB3cml0ZSBidWZmZXIsIHJlYWQKKyAgYnVmZmVyLCBhbmQgc3Ryb25nIHB1bGx1cCBhbGwgaW4gb25lIGNvbW1hbmQsIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQKKyAgMSByZXNldCBidXMsIDIgd3JpdGUgdGhlIG1hdGNoIHJvbSBjb21tYW5kIGFuZCBzbGF2ZSByb20gaWQsIDMgYmxvY2sKKyAgd3JpdGUgYW5kIHJlYWQgZGF0YS4gIFRoZSB3cml0ZSBidWZmZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbWF0Y2ggcm9tCisgIGNvbW1hbmQgYW5kIHNsYXZlIHJvbSBpZCBwcmVwZW5kZWQgdG8gdGhlIGZyb250IG9mIHRoZSByZXF1ZXN0ZWQKKyAgd3JpdGUgYnVmZmVyLCBib3RoIG9mIHdoaWNoIGFyZSBrbm93biB0byB0aGUgZHJpdmVyLgorLSBUaGUgaGFyZHdhcmUgc3VwcG9ydHMgbm9ybWFsLCBmbGV4aWJsZSwgYW5kIG92ZXJkcml2ZSBidXMKKyAgY29tbXVuaWNhdGlvbiBzcGVlZHMsIGJ1dCBvbmx5IHRoZSBub3JtYWwgaXMgc3VwcG9ydGVkLgorLSBUaGUgcmVnaXN0ZXJlZCB3MV9idXNfbWFzdGVyIGZ1bmN0aW9ucyBkb24ndCBkZWZpbmUgZXJyb3IKKyAgY29uZGl0aW9ucy4gIElmIGEgYnVzIHNlYXJjaCBpcyBpbiBwcm9ncmVzcyBhbmQgdGhlIGRzMjQ5MCBpcworICByZW1vdmVkIGl0IGNhbiBwcm9kdWNlIGEgZ29vZCBhbW91bnQgb2YgZXJyb3Igb3V0cHV0IGJlZm9yZSB0aGUgYnVzCisgIHNlYXJjaCBmaW5pc2hlcy4KKy0gVGhlIGhhcmR3YXJlIHN1cHBvcnRzIGRldGVjdGluZyBzb21lIGVycm9yIGNvbmRpdGlvbnMsIHN1Y2ggYXMKKyAgc2hvcnQsIGFsYXJtaW5nIHByZXNlbmNlIG9uIHJlc2V0LCBhbmQgbm8gcHJlc2VuY2Ugb24gcmVzZXQsIGJ1dCB0aGUKKyAgZHJpdmVyIGRvZXNuJ3QgcXVlcnkgdGhvc2UgdmFsdWVzLgorLSBUaGUgZHMyNDkwIHNwZWNpZmljYXRpb24gZG9lc24ndCBjb3ZlciBzaG9ydCBidWxrIGluIHJlYWRzIGluCisgIGRldGFpbCwgYnV0IG15IG9ic2VydmF0aW9uIGlzIGlmIGZld2VyIGJ5dGVzIGFyZSByZXF1ZXN0ZWQgdGhhbiBhcmUKKyAgYXZhaWxhYmxlLCB0aGUgYnVsayByZWFkIHdpbGwgcmV0dXJuIGFuIGVycm9yIGFuZCB0aGUgaGFyZHdhcmUgd2lsbAorICBjbGVhciB0aGUgZW50aXJlIGJ1bGsgaW4gYnVmZmVyLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gcmVhZCB0aGUKKyAgbWF4aW11bSBidWZmZXIgc2l6ZSB0byBub3QgcnVuIGludG8gdGhpcyBlcnJvciBjb25kaXRpb24sIG9ubHkgZXh0cmEKKyAgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBpcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBkcml2ZXIuICBUaGUgY29kZSBzaG91bGQKKyAgc2hvdWxkIG1hdGNoIHJlYWRzIGFuZCB3cml0ZXMgYXMgd2VsbCBhcyBkYXRhIHNpemVzLiAgUmVhZHMgYW5kCisgIHdyaXRlcyBhcmUgc2VyaWFsaXplZCBhbmQgdGhlIHN0YXR1cyB2ZXJpZmllcyB0aGF0IHRoZSBjaGlwIGlzIGlkbGUKKyAgKGFuZCBkYXRhIGlzIGF2YWlsYWJsZSkgYmVmb3JlIHRoZSByZWFkIGlzIGV4ZWN1dGVkLCBzbyBpdCBzaG91bGQKKyAgbm90IGhhcHBlbi4KKy0gUnVubmluZyB4ODZfNjQgMi42LjI0IFVIQ0kgdW5kZXIgcWVtdSAwLjkuMCB1bmRlciB4ODZfNjQgMi42LjIyLXJjNgorICB3aXRoIGEgT0hDSSBjb250cm9sbGVyLCBkczI0OTAgcnVubmluZyBpbiB0aGUgZ3Vlc3Qgd291bGQgb3BlcmF0ZQorICBub3JtYWxseSB0aGUgZmlyc3QgdGltZSB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgYWZ0ZXIgcWVtdSBhdHRhY2hlZAorICB0aGUgZHMyNDkwIGhhcmR3YXJlLCBidXQgaWYgdGhlIG1vZHVsZSB3YXMgdW5sb2FkZWQsIHRoZW4gcmVsb2FkZWQKKyAgbW9zdCBvZiB0aGUgdGltZSBvbmUgb2YgdGhlIGJ1bGsgb3V0IG9yIGluLCBhbmQgdXN1YWxseSB0aGUgYnVsayBpbgorICB3b3VsZCBmYWlsLiAgcWVtdSBzZXRzIGEgNTBtcyB0aW1lb3V0IGFuZCB0aGUgYnVsayBpbiB3b3VsZCB0aW1lb3V0CisgIGV2ZW4gd2hlbiB0aGUgc3RhdHVzIHNob3dzIGRhdGEgYXZhaWxhYmxlLiAgQSBidWxrIG91dCB3cml0ZSB3b3VsZAorICBzaG93IGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBidXQgdGhlIGRzMjQ5MCBzdGF0dXMgcmVnaXN0ZXIgd291bGQKKyAgc2hvdyAwIGJ5dGVzIHdyaXR0ZW4uICBEZXRhY2hpbmcgcWVtdSBmcm9tIHRoZSBkczI0OTAgaGFyZHdhcmUgYW5kCisgIHJlYXR0YWNoaW5nIHdvdWxkIGNsZWFyIHRoZSBwcm9ibGVtLiAgdXNibW9uIG91dHB1dCBpbiB0aGUgZ3Vlc3QgYW5kCisgIGhvc3QgZGlkIG5vdCBleHBsYWluIHRoZSBwcm9ibGVtLiAgTXkgZ3Vlc3MgaXMgYSBidWcgaW4gZWl0aGVyIHFlbXUKKyAgb3IgdGhlIGhvc3QgT1MgYW5kIG1vcmUgbGlrZWx5IHRoZSBob3N0IE9TLgorLS0gMDMtMDYtMjAwOCBEYXZpZCBGcmllcyA8RGF2aWRARnJpZXMubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEwMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvMDAtSU5ERVgKQEAgLTAsMCArMSw0IEBACiswMC1JTkRFWAorCS0gVGhpcyBmaWxlCit3MV90aGVybQorCS0gVGhlIE1heGltL0RhbGxhcyBTZW1pY29uZHVjdG9yIGRzMTgqMjAgdGVtcGVyYXR1cmUgc2Vuc29yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfdGhlcm0gYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy93MV90aGVybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDAzYWFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfdGhlcm0KQEAgLTAsMCArMSw0MSBAQAorS2VybmVsIGRyaXZlciB3MV90aGVybQorPT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIGRzMTgqMjAgYmFzZWQgdGVtcGVyYXR1cmUgc2Vuc29ycy4KKworQXV0aG9yOiBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCit3MV90aGVybSBwcm92aWRlcyBiYXNpYyB0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIGZvciBkczE4KjIwIGRldmljZXMuCitzdXBwb3J0ZWQgZmFtaWx5IGNvZGVzOgorVzFfVEhFUk1fRFMxOFMyMAkweDEwCitXMV9USEVSTV9EUzE4MjIJCTB4MjIKK1cxX1RIRVJNX0RTMThCMjAJMHgyOAorCitTdXBwb3J0IGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIHN5c2ZzIHcxX3NsYXZlIGZpbGUuICBFYWNoIG9wZW4gYW5kCityZWFkIHNlcXVlbmNlIHdpbGwgaW5pdGlhdGUgYSB0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIHRoZW4gcHJvdmlkZSB0d28KK2xpbmVzIG9mIEFTQ0lJIG91dHB1dC4gIFRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIHRoZSBuaW5lIGhleCBieXRlcworcmVhZCBhbG9uZyB3aXRoIGEgY2FsY3VsYXRlZCBjcmMgdmFsdWUgYW5kIFlFUyBvciBOTyBpZiBpdCBtYXRjaGVkLgorSWYgdGhlIGNyYyBtYXRjaGVkIHRoZSByZXR1cm5lZCB2YWx1ZXMgYXJlIHJldGFpbmVkLiAgVGhlIHNlY29uZCBsaW5lCitkaXNwbGF5cyB0aGUgcmV0YWluZWQgdmFsdWVzIGFsb25nIHdpdGggYSB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMKK0NlbnRpZ3JhZGUgYWZ0ZXIgdD0uCisKK1BhcmFzaXRlIHBvd2VyZWQgZGV2aWNlcyBhcmUgbGltaXRlZCB0byBvbmUgc2xhdmUgcGVyZm9ybWluZyBhCit0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIGF0IGEgdGltZS4gIElmIG5vbmUgb2YgdGhlIGRldmljZXMgYXJlIHBhcmFzaXRlCitwb3dlcmVkIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbnZlcnQgYWxsIHRoZSBkZXZpY2VzIGF0IHRoZSBzYW1lCit0aW1lIGFuZCB0aGVuIGdvIGJhY2sgdG8gcmVhZCBpbmRpdmlkdWFsIHNlbnNvcnMuICBUaGF0IGlzbid0CitjdXJyZW50bHkgc3VwcG9ydGVkLiAgVGhlIGRyaXZlciBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCByZWR1Y2VkCitwcmVjaXNpb24gKHdoaWNoIHdvdWxkIGFsc28gcmVkdWNlIHRoZSBjb252ZXJzaW9uIHRpbWUpLgorCitUaGUgbW9kdWxlIHBhcmFtZXRlciBzdHJvbmdfcHVsbHVwIGNhbiBiZSBzZXQgdG8gMCB0byBkaXNhYmxlIHRoZQorc3Ryb25nIHB1bGx1cCBvciAxIHRvIGVuYWJsZS4gIElmIGVuYWJsZWQgdGhlIDVWIHN0cm9uZyBwdWxsdXAgd2lsbCBiZQorZW5hYmxlZCB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIHRha2luZyBwbGFjZSBwcm92aWRlZCB0aGUgbWFzdGVyIGRyaXZlcgorbXVzdCBzdXBwb3J0IHRoZSBzdHJvbmcgcHVsbHVwIChvciBpdCBmYWxscyBiYWNrIHRvIGEgcHVsbHVwCityZXNpc3RvcikuICBUaGUgRFMxOGIyMCB0ZW1wZXJhdHVyZSBzZW5zb3Igc3BlY2lmaWNhdGlvbiBsaXN0cyBhCittYXhpbXVtIGN1cnJlbnQgZHJhdyBvZiAxLjVtQSBhbmQgdGhhdCBhIDVrIHB1bGx1cCByZXNpc3RvciBpcyBub3QKK3N1ZmZpY2llbnQuICBUaGUgc3Ryb25nIHB1bGx1cCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIHRoZSBhZGRpdGlvbmFsCitjdXJyZW50IHJlcXVpcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljIGIvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljCmluZGV4IDRjNjUwOWQuLmUzMzMzZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYworKysgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMKQEAgLTc5LDEwICs3OSwxMyBAQAogPHh4LXh4eHh4eHh4eHh4eHg+IC0gYSBkaXJlY3RvcnkgZm9yIGEgZm91bmQgZGV2aWNlLiBUaGUgZm9ybWF0IGlzIGZhbWlseS1zZXJpYWwKIGJ1cyAgICAgICAgICAgICAgICAtIChzdGFuZGFyZCkgc3ltbGluayB0byB0aGUgdzEgYnVzCiBkcml2ZXIgICAgICAgICAgICAgLSAoc3RhbmRhcmQpIHN5bWxpbmsgdG8gdGhlIHcxIGRyaXZlcgordzFfbWFzdGVyX2FkZCAgICAgIC0gTWFudWFsbHkgcmVnaXN0ZXIgYSBzbGF2ZSBkZXZpY2UKIHcxX21hc3Rlcl9hdHRlbXB0cyAtIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzZWFyY2ggd2FzIGF0dGVtcHRlZAogdzFfbWFzdGVyX21heF9zbGF2ZV9jb3VudAogICAgICAgICAgICAgICAgICAgIC0gdGhlIG1heGltdW0gc2xhdmVzIHRoYXQgbWF5IGJlIGF0dGFjaGVkIHRvIGEgbWFzdGVyCiB3MV9tYXN0ZXJfbmFtZSAgICAgLSB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlICh3MV9idXNfbWFzdGVyWCkKK3cxX21hc3Rlcl9wdWxsdXAgICAtIDVWIHN0cm9uZyBwdWxsdXAgMCBlbmFibGVkLCAxIGRpc2FibGVkCit3MV9tYXN0ZXJfcmVtb3ZlICAgLSBNYW51YWxseSByZW1vdmUgYSBzbGF2ZSBkZXZpY2UKIHcxX21hc3Rlcl9zZWFyY2ggICAtIHRoZSBudW1iZXIgb2Ygc2VhcmNoZXMgbGVmdCB0byBkbywgLTE9Y29udGludWFsIChkZWZhdWx0KQogdzFfbWFzdGVyX3NsYXZlX2NvdW50CiAgICAgICAgICAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIHNsYXZlcyBmb3VuZApAQCAtOTAsNyArOTMsMTMgQEAKIHcxX21hc3Rlcl90aW1lb3V0ICAtIHRoZSBkZWxheSBpbiBzZWNvbmRzIGJldHdlZW4gc2VhcmNoZXMKIAogSWYgeW91IGhhdmUgYSB3MSBidXMgdGhhdCBuZXZlciBjaGFuZ2VzICh5b3UgZG9uJ3QgYWRkIG9yIHJlbW92ZSBkZXZpY2VzKSwKLXlvdSBjYW4gc2V0IHcxX21hc3Rlcl9zZWFyY2ggdG8gYSBwb3NpdGl2ZSB2YWx1ZSB0byBkaXNhYmxlIHNlYXJjaGVzLgoreW91IGNhbiBzZXQgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2VhcmNoX2NvdW50IHRvIGEgc21hbGwgcG9zaXRpdmUgbnVtYmVyCitmb3IgYW4gaW5pdGlhbGx5IHNtYWxsIG51bWJlciBvZiBidXMgc2VhcmNoZXMuICBBbHRlcm5hdGl2ZWx5IGl0IGNvdWxkIGJlCitzZXQgdG8gemVybywgdGhlbiBtYW51YWxseSBhZGQgdGhlIHNsYXZlIGRldmljZSBzZXJpYWwgbnVtYmVycyBieQordzFfbWFzdGVyX2FkZCBkZXZpY2UgZmlsZS4gIFRoZSB3MV9tYXN0ZXJfYWRkIGFuZCB3MV9tYXN0ZXJfcmVtb3ZlIGZpbGVzCitnZW5lcmFsbHkgb25seSBtYWtlIHNlbnNlIHdoZW4gc2VhcmNoaW5nIGlzIGRpc2FibGVkLCBhcyBhIHNlYXJjaCB3aWxsCityZWRldGVjdCBtYW51YWxseSByZW1vdmVkIGRldmljZXMgdGhhdCBhcmUgcHJlc2VudCBhbmQgdGltZW91dCBtYW51YWxseQorYWRkZWQgZGV2aWNlcyB0aGF0IGFyZW4ndCBvbiB0aGUgYnVzLgogCiAKIHcxIHNsYXZlIHN5c2ZzIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA1ZDBiOGEyLi41YzNmNzljIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogQ1BVIEZSRVFVRU5DWSBEUklWRVJTCiBQOglEYXZlIEpvbmVzCi1NOglkYXZlakBjb2RlbW9ua2V5Lm9yZy51aworTToJZGF2ZWpAcmVkaGF0LmNvbQogTDoJY3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS8KIFQ6CWdpdCBrZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlai9jcHVmcmVxLmdpdApAQCAtMTYyOSw2ICsxNjI5LDExIEBACiBNOgljaEBtdXJnYXRyb2lkLmNvbSwgY2hAaHBsLmhwLmNvbQogUzoJTWFpbnRhaW5lZAogCitFUFNPTiBTMUQxM1hYWCBGUkFNRUJVRkZFUiBEUklWRVIKK1A6CUtyaXN0b2ZmZXIgRXJpY3NvbgorTToJa3Jpc3RvZmZlci5lcmljc29uQGdtYWlsLmNvbQorUzoJTWFpbnRhaW5lZAorCiBFVEhFUkVYUFJFU1MtMTYgTkVUV09SSyBEUklWRVIKIFA6CVBoaWxpcCBCbHVuZGVsbAogTToJcGhpbGJAZ251Lm9yZwpAQCAtMjQ0Myw3ICsyNDQ4LDE0IEBACiAKIEtFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkKIFA6CUF2aSBLaXZpdHkKLU06CWF2aUBxdW1yYW5ldC5jb20KK006CWF2aUByZWRoYXQuY29tCitMOglrdm1Admdlci5rZXJuZWwub3JnCitXOglodHRwOi8va3ZtLnF1bXJhbmV0LmNvbQorUzoJU3VwcG9ydGVkCisKK0tFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkgRk9SIEFNRC1WCitQOglKb2VyZyBSb2VkZWwKK006CWpvZXJnLnJvZWRlbEBhbWQuY29tCiBMOglrdm1Admdlci5rZXJuZWwub3JnCiBXOglodHRwOi8va3ZtLnF1bXJhbmV0LmNvbQogUzoJU3VwcG9ydGVkCkBAIC0zOTI1LDcgKzM5MzcsNyBAQAogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCi1TVEFCTEUgQlJBTkNIOgorU1RBQkxFIEJSQU5DSAogUDoJR3JlZyBLcm9haC1IYXJ0bWFuCiBNOglncmVnQGtyb2FoLmNvbQogUDoJQ2hyaXMgV3JpZ2h0CkBAIC0zOTMzLDYgKzM5NDUsMTMgQEAKIEw6CXN0YWJsZUBrZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK1NUQUdJTkcgU1VCU1lTVEVNCitQOglHcmVnIEtyb2FoLUhhcnRtYW4KK006CWdyZWdraEBzdXNlLmRlCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitUOglxdWlsdCBrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2dyZWdraC9ncmVna2gtMi42LworUzoJTWFpbnRhaW5lZAorCiBTVEFSRklSRS9EVVJBTEFOIE5FVFdPUksgRFJJVkVSCiBQOglJb24gQmFkdWxlc2N1CiBNOglpb251dEBjcy5jb2x1bWJpYS5lZHUKQEAgLTQwODksNyArNDEwOCw3IEBACiBQOglNYXJjZWwgU2VsaG9yc3QKIE06CXRwbUBzZWxob3JzdC5uZXQKIFc6CWh0dHA6Ly93d3cucHJvc2VjLnJ1Yi5kZS90cG0vCi1MOgl0cG1kZC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIFRSSVZJQUwgUEFUQ0hFUwpAQCAtNDQ4MCw2ICs0NDk5LDEzIEBACiBUOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL3V0aWwtbGludXgtbmcvdXRpbC1saW51eC1uZy5naXQKIFM6CU1haW50YWluZWQKIAorVVZFU0FGQiBEUklWRVIKK1A6CU1pY2hhbCBKYW51c3pld3NraQorTToJc3BvY2tAZ2VudG9vLm9yZworTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1c6CWh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8KK1M6CU1haW50YWluZWQKKwogVkZBVC9GQVQvTVNET1MgRklMRVNZU1RFTQogUDoJT0dBV0EgSGlyb2Z1bWkKIE06CWhpcm9mdW1pQG1haWwucGFya25ldC5jby5qcApAQCAtNDQ5Nyw2ICs0NTIzLDE0IEBACiBMOglpMmNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIAorVklBIFVOSUNIUk9NRShQUk8pL0NIUk9NRTkgRlJBTUVCVUZGRVIgRFJJVkVSCitQOglKb3NlcGggQ2hhbgorTToJSm9zZXBoQ2hhbkB2aWEuY29tLnR3CitQOglTY290dCBGYW5nCitNOglTY290dEZhbmdAdmlhdGVjaC5jb20uY24KK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCisKIFZJQSBWRUxPQ0lUWSBORVRXT1JLIERSSVZFUgogUDoJRnJhbmNvaXMgUm9taWV1CiBNOglyb21pZXVAZnIuem9yZWlsLmNvbQpAQCAtNDU5OCw3ICs0NjMyLDcgQEAKIFA6CU1hcmsgQnJvd24KIE06CWJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tCiBQOglMaWFtIEdpcmR3b29kCi1NOglsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20KK006CWxyZ0BzbGltbG9naWMuY28udWsKIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9saW51eC0yLjYtdG91Y2gKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS83CmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggMDI2N2JhYi4uZTZhYjU1MCAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMjgsNyArMjgsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEhBVkVfT1BST0ZJTEUKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgS1BST0JFUwogCWJvb2wgIktwcm9iZXMiCkBAIC00Miw3ICs0Miw3IEBACiAJICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KIAogY29uZmlnIEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKLQlkZWZfYm9vbCBuCisJYm9vbAogCWhlbHAKIAkgIFNvbWUgYXJjaGl0ZWN0dXJlcyBhcmUgdW5hYmxlIHRvIHBlcmZvcm0gdW5hbGlnbmVkIGFjY2Vzc2VzCiAJICB3aXRob3V0IHRoZSB1c2Ugb2YgZ2V0X3VuYWxpZ25lZC9wdXRfdW5hbGlnbmVkLiBPdGhlcnMgYXJlCkBAIC02NSwxMyArNjUsMTMgQEAKIAlkZXBlbmRzIG9uIEtQUk9CRVMgJiYgSEFWRV9LUkVUUFJPQkVTCiAKIGNvbmZpZyBIQVZFX0lPUkVNQVBfUFJPVAotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBIQVZFX0tQUk9CRVMKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgSEFWRV9LUkVUUFJPQkVTCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogIwogIyBBbiBhcmNoIHNob3VsZCBzZWxlY3QgdGhpcyBpZiBpdCBwcm92aWRlcyBhbGwgdGhlc2UgdGhpbmdzOgpAQCAtODksMTYgKzg5LDE2IEBACiAjCXNpZ25hbCBkZWxpdmVyeQkJY2FsbHMgdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKCkKICMKIGNvbmZpZyBIQVZFX0FSQ0hfVFJBQ0VIT09LCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEhBVkVfRE1BX0FUVFJTCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEhBVkVfQ0xLCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAloZWxwCiAJICBUaGUgPGxpbnV4L2Nsay5oPiBjYWxscyBzdXBwb3J0IHNvZnR3YXJlIGNsb2NrIGdhdGluZyBhbmQKIAkgIHRodXMgYXJlIGEga2V5IHBvd2VyIG1hbmFnZW1lbnQgdG9vbCBvbiBtYW55IHN5c3RlbXMuCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggZWUzNTIyNi4uNjExMDE5NyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNzAsNiArNzAsNyBAQAogCWRlZmF1bHQgeQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogCiBtZW51ICJTeXN0ZW0gc2V0dXAiCkBAIC0yMjIsOCArMjIzLDcgQEAKIAlib29sICJNaWF0YSIKIAloZWxwCiAJICBUaGUgRGlnaXRhbCBQZXJzb25hbFdvcmtTdGF0aW9uIChQV1MgNDMzYSwgNDMzYXUsIDUwMGEsIDUwMGF1LCA2MDBhLAotCSAgb3IgNjAwYXUpLiAgVGhlcmUgaXMgYW4gSW5zdGFsbGF0aW9uIEhPV1RPIGZvciB0aGlzIGhhcmR3YXJlIGF0Ci0JICA8aHR0cDovL2VpamsuaG9tZWxpbnV4Lm9yZy9+c3RlZmFuL21pYXRhLmh0bWw+LgorCSAgb3IgNjAwYXUpLgogCiBjb25maWcgQUxQSEFfTUlLQVNBCiAJYm9vbCAiTWlrYXNhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hLm91dC5oCmluZGV4IDAyY2U4NDcuLmFjZGM2ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Eub3V0LmgKQEAgLTk1LDcgKzk1LDcgQEAKICAgIFdvcnNlLCB3ZSBoYXZlIHRvIG5vdGljZSB0aGUgc3RhcnQgYWRkcmVzcyBiZWZvcmUgc3dhcHBpbmcgdG8gdXNlCiAgICAvc2Jpbi9sb2FkZXIsIHdoaWNoIG9mIGNvdXJzZSBpcyBfbm90XyBhIFRBU08gYXBwbGljYXRpb24uICAqLwogI2RlZmluZSBTRVRfQU9VVF9QRVJTT05BTElUWShCRlBNLCBFWCkgXAotCXNldF9wZXJzb25hbGl0eSAoKChCRlBNLT5zaF9iYW5nIHx8IEVYLmFoLmVudHJ5IDwgMHgxMDAwMDAwMDBMIFwKKwlzZXRfcGVyc29uYWxpdHkgKCgoQkZQTS0+dGFzbyB8fCBFWC5haC5lbnRyeSA8IDB4MTAwMDAwMDAwTCBcCiAJCQkgICA/IEFERFJfTElNSVRfMzJCSVQgOiAwKSB8IFBFUl9PU0Y0KSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGZjMTAwMmUuLjVjNzVjMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTQ0LDkgKzE0NCw5IEBACiAJOiBhbWFzayAoQU1BU0tfQ0lYKSA/ICJldjYiIDogImV2NjciKTsJXAogfSkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgsIElCQ1MyKQkJCQlcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShFWCkJCQkJCVwKIAlzZXRfcGVyc29uYWxpdHkoKChFWCkuZV9mbGFncyAmIEVGX0FMUEhBXzMyQklUKQkJXAotCSAgID8gUEVSX0xJTlVYXzMyQklUIDogKElCQ1MyKSA/IFBFUl9TVlI0IDogUEVSX0xJTlVYKQorCSAgID8gUEVSX0xJTlVYXzMyQklUIDogUEVSX0xJTlVYKQogCiBleHRlcm4gaW50IGFscGhhX2wxaV9jYWNoZXNoYXBlOwogZXh0ZXJuIGludCBhbHBoYV9sMWRfY2FjaGVzaGFwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAxNWZkYTQzLi5kMDY5NTI2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03NCwxMiArNzQsMTQgQEAKICNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTcKICNkZWZpbmUgVElGX01FTURJRQkJOAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogLyogV29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybi4gICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9ORUVEX1JFU0NIRUQpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwppbmRleCAwNGRjYzVlLi45Y2Q4ZGNhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCiAJY2FzZSAweDcxOgkJCQkJLyogUlRDX1BPUlQoMSkgKi8KIAkJcnRjX2FjY2Vzcy5pbmRleCA9IGluZGV4OwotCQlydGNfYWNjZXNzLmRhdGEgPSBCQ0RfVE9fQklOKGIpOworCQlydGNfYWNjZXNzLmRhdGEgPSBiY2QyYmluKGIpOwogCQlydGNfYWNjZXNzLmZ1bmN0aW9uID0gMHg0OCArICF3cml0ZTsJLyogR0VUL1BVVF9UT1kgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTY2OCw3ICs2NjgsNyBAQAogI2Vsc2UKIAkJX19tYXJ2ZWxfYWNjZXNzX3J0YygmcnRjX2FjY2Vzcyk7CiAjZW5kaWYKLQkJcmV0ID0gQklOX1RPX0JDRChydGNfYWNjZXNzLmRhdGEpOworCQlyZXQgPSBiaW4yYmNkKHJ0Y19hY2Nlc3MuZGF0YSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggMjE3OWM2MC4uYjkwOTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTQxLDEzICs0MSw2IEBACiAJcmV0dXJuIChwYWRkciA+PiAoUEFHRV9TSElGVC0xKSkgfCAxOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcKLWNhbGNfbnBhZ2VzKGxvbmcgYnl0ZXMpCi17Ci0JcmV0dXJuIChieXRlcyArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci19Ci0MCi0KIC8qIFJldHVybiB0aGUgbWluaW11bSBvZiBNQVggb3IgdGhlIGZpcnN0IHBvd2VyIG9mIHR3byBsYXJnZXIKICAgIHRoYW4gbWFpbiBtZW1vcnkuICAqLwogCkBAIC0yODcsNyArMjgwLDcgQEAKIAlpZiAoIWFyZW5hIHx8IGFyZW5hLT5kbWFfYmFzZSArIGFyZW5hLT5zaXplIC0gMSA+IG1heF9kbWEpCiAJCWFyZW5hID0gaG9zZS0+c2dfaXNhOwogCi0JbnBhZ2VzID0gY2FsY19ucGFnZXMoKHBhZGRyICYgflBBR0VfTUFTSykgKyBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAKIAkvKiBGb3JjZSBhbGxvY2F0aW9uIHRvIDY0S0IgYm91bmRhcnkgZm9yIElTQSBicmlkZ2VzLiAqLwogCWlmIChwZGV2ICYmIHBkZXYgPT0gaXNhX2JyaWRnZSkKQEAgLTM4Nyw3ICszODAsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQlucGFnZXMgPSBjYWxjX25wYWdlcygoZG1hX2FkZHIgJiB+UEFHRV9NQVNLKSArIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhcmVuYS0+bG9jaywgZmxhZ3MpOwogCkBAIC01ODAsNyArNTczLDcgQEAKIAkgICBjb250aWd1b3VzLiAgKi8KIAogCXBhZGRyICY9IH5QQUdFX01BU0s7Ci0JbnBhZ2VzID0gY2FsY19ucGFnZXMocGFkZHIgKyBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJZG1hX29mcyA9IGlvbW11X2FyZW5hX2FsbG9jKGRldiwgYXJlbmEsIG5wYWdlcywgMCk7CiAJaWYgKGRtYV9vZnMgPCAwKSB7CiAJCS8qIElmIHdlIGF0dGVtcHRlZCBhIGRpcmVjdCBtYXAgYWJvdmUgYnV0IGZhaWxlZCwgZGllLiAgKi8KQEAgLTYxNiw3ICs2MDksNyBAQAogCQkJc2crKzsKIAkJfQogCi0JCW5wYWdlcyA9IGNhbGNfbnBhZ2VzKChwYWRkciAmIH5QQUdFX01BU0spICsgc2l6ZSk7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCQlwYWRkciAmPSBQQUdFX01BU0s7CiAJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSwgcGFkZHIgKz0gUEFHRV9TSVpFKQpAQCAtNzc1LDcgKzc2OCw3IEBACiAJCURCR0EoIiAgICAoJWxkKSBzZyBbJWx4LCVseF1cbiIsCiAJCSAgICAgc2cgLSBlbmQgKyBuZW50cywgYWRkciwgc2l6ZSk7CiAKLQkJbnBhZ2VzID0gY2FsY19ucGFnZXMoKGFkZHIgJiB+UEFHRV9NQVNLKSArIHNpemUpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAkJb2ZzID0gKGFkZHIgLSBhcmVuYS0+ZG1hX2Jhc2UpID4+IFBBR0VfU0hJRlQ7CiAJCWlvbW11X2FyZW5hX2ZyZWUoYXJlbmEsIG9mcywgbnBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCAwNmI2ZmRhLi5lNjU3YzQ1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IDc1NDgwY2EuLmU2YTIzMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTM0NiwxMiArMzQ2LDEyIEBACiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaG91cik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtb24pOwotCQlCQ0RfVE9fQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAkvKiBQQy1saWtlIGlzIHN0YW5kYXJkOyB1c2VkIGZvciB5ZWFyID49IDcwICovCkBAIC01MjUsNyArNTI1LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNTQzLDggKzU0Myw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDg1M2Y5ZC4uZGYzOWQyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIFR5cGUiCiAKIGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBlMjI3NGJjLi43ZDUxMjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTE4LDkgKzExOCwxMCBAQAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFAyM1hYKSAgICA6PSBpeHAyM3h4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAxKQkgICA6PSBvbWFwMQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9PTUFQMikJICAgOj0gb21hcDIKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDMpCSAgIDo9IG9tYXAyCiAgICAgcGxhdC0kKENPTkZJR19BUkNIX09NQVApCSAgIDo9IG9tYXAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJICAgOj0gczNjMjQxMCBzM2MyNDAwIHMzYzI0MTIgczNjMjQ0MCBzM2MyNDQyIHMzYzI0NDMKLSAgICBwbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJICAgOj0gczNjMjR4eAorICAgIHBsYXQtJChDT05GSUdfUExBVF9TM0MyNFhYKQkgICA6PSBzM2MyNHh4IHMzYwogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MSDdBNDBYKQkgICA6PSBsaDdhNDB4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkgIDo9IHZlcnNhdGlsZQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JTVgpCSAgIDo9IGlteApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDJkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzIxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4CisjIFdlZCBPY3QgIDEgMTc6MTQ6MjIgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX09NQVBfT1RHPXkKKyMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisKKyMKKyMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjc9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CisjIENPTkZJR19ORU9OIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfTVVTQl9IT1NUPXkKKyMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CisjIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKKyMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9NNjY1OTI9eQorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGEyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNDQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKKyMgRnJpIE9jdCAxMCAxMTo0OTo0MSAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX09NQVBfT1RHPXkKKyMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisKKyMKKyMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9NVVg9eQorQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKK0NPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKK0NPTkZJR19BUkNIX09NQVAzNFhYPXkKK0NPTkZJR19BUkNIX09NQVAzNDMwPXkKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX09NQVBfTERQPXkKKyMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX09NQVA9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CitDT05GSUdfVzE9eQorCisjCisjIDEtd2lyZSBCdXMgTWFzdGVycworIworIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBTbGF2ZXMKKyMKKyMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTIwMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKQEAgLTAsMCArMSwxODg1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4CisjIEZyaSBPY3QgIDMgMTE6NTA6MzQgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19PUFJPRklMRV9BUk1WNz15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MU0Y9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAorQ09ORklHX09NQVBfTUNCU1A9eQorIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15CitDT05GSUdfQVJDSF9PTUFQMzRYWD15CitDT05GSUdfQVJDSF9PTUFQMzQzMD15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9PVkVSTz15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfQVJNX1RIVU1CRUU9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEyOAorQ09ORklHX0FFQUJJPXkKKyMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiBkZWJ1ZyAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CitDT05GSUdfQVRBR1NfUFJPQz15CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUz15CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CitDT05GSUdfTkVPTj15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CitDT05GSUdfQlRfUkZDT01NPXkKK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPXkKK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9eQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JUX0hDSVVTQj1tCitDT05GSUdfQlRfSENJVVNCX1NDTz15CisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlQ9eQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CisjIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPXkKK0NPTkZJR19CVF9IQ0lCUEExMFg9eQorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT15CitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX01BQzgwMjExPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX1BJRD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9eQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX0VFUFJPTV85M0NYNj1tCisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9ERUxBWT1tCisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19MSUJFUlRBUz15CitDT05GSUdfTElCRVJUQVNfVVNCPXkKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKK0NPTkZJR19MSUJFUlRBU19ERUJVRz15CitDT05GSUdfVVNCX1pEMTIwMT1tCisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorQ09ORklHX1JUTDgxODc9bQorIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAorQ09ORklHX1A1NF9DT01NT049bQorQ09ORklHX1A1NF9VU0I9bQorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9eQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CitDT05GSUdfVVNCX05FVF9DRENFVEhFUj15CitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfT01BUDI0WFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CitDT05GSUdfREVCVUdfR1BJTz15CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPW0KKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KK0NPTkZJR19WSURFT19BTExPV19WNEwxPXkKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CitDT05GSUdfRFZCX0NPUkU9bQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19NRURJQV9BVFRBQ0g9eQorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjdYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREExODI3MT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCitDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVM9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPX1RWRUVQUk9NPW0KK0NPTkZJR19WSURFT19UVU5FUj1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX01TUDM0MDA9bQorQ09ORklHX1ZJREVPX0NTNTNMMzJBPW0KK0NPTkZJR19WSURFT19XTTg3NzU9bQorQ09ORklHX1ZJREVPX1NBQTcxMVg9bQorQ09ORklHX1ZJREVPX0NYMjU4NDA9bQorQ09ORklHX1ZJREVPX0NYMjM0MVg9bQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CitDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19QVlJVU0IyPW0KK0NPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTPXkKK0NPTkZJR19WSURFT19QVlJVU0IyX0RWQj15CisjIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVVNCVklTSU9OPW0KK0NPTkZJR19WSURFT19VU0JWSURFTz1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVkNBTUNISVA9bQorQ09ORklHX1VTQl9XOTk2OENGPW0KK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQz1tCisjIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSTQ3MFggaXMgbm90IHNldAorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCitDT05GSUdfRFZCX1VTQj1tCisjIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVVNCX0E4MDA9bQorQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KKyMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQorQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCitDT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KK0NPTkZJR19EVkJfVVNCX0NYVVNCPW0KK0NPTkZJR19EVkJfVVNCX005MjBYPW0KK0NPTkZJR19EVkJfVVNCX0dMODYxPW0KK0NPTkZJR19EVkJfVVNCX0FVNjYxMD1tCitDT05GSUdfRFZCX1VTQl9ESUdJVFY9bQorQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KK0NPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCitDT05GSUdfRFZCX1VTQl9HUDhQU0s9bQorQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQorQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KK0NPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQorQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KK0NPTkZJR19EVkJfVVNCX0FGOTAwNT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KKyMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfQU5ZU0VFIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVFRVU0JfQlVER0VUPW0KK0NPTkZJR19EVkJfVFRVU0JfREVDPW0KK0NPTkZJR19EVkJfQ0lORVJHWVQyPW0KKyMgQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycworIworIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKKyMKKworIworIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX0NYMjQxMTA9bQorQ09ORklHX0RWQl9DWDI0MTIzPW0KK0NPTkZJR19EVkJfTVQzMTI9bQorQ09ORklHX0RWQl9TNUgxNDIwPW0KK0NPTkZJR19EVkJfU1RWMDI5OT1tCitDT05GSUdfRFZCX1REQTgwODM9bQorQ09ORklHX0RWQl9UREExMDA4Nj1tCitDT05GSUdfRFZCX1ZFUzFYOTM9bQorQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KK0NPTkZJR19EVkJfVERBODI2WD1tCitDT05GSUdfRFZCX1RVQTYxMDA9bQorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NQODg3MD1tCitDT05GSUdfRFZCX1NQODg3WD1tCitDT05GSUdfRFZCX0NYMjI3MDA9bQorQ09ORklHX0RWQl9DWDIyNzAyPW0KKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KK0NPTkZJR19EVkJfWkwxMDM1Mz1tCitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCitDT05GSUdfRFZCX0RJQjcwMDBNPW0KK0NPTkZJR19EVkJfRElCNzAwMFA9bQorQ09ORklHX0RWQl9UREExMDA0OD1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfVERBMTAwMjM9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfTlhUMjAwWD1tCisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0JDTTM1MTA9bQorQ09ORklHX0RWQl9MR0RUMzMwWD1tCitDT05GSUdfRFZCX1M1SDE0MDk9bQorQ09ORklHX0RWQl9BVTg1MjI9bQorQ09ORklHX0RWQl9TNUgxNDExPW0KKworIworIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAorIworQ09ORklHX0RWQl9QTEw9bQorQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwPW0KKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworQ09ORklHX0RWQl9MTkJQMjE9bQorIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAorQ09ORklHX0RWQl9JU0w2NDIxPW0KKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CitDT05GSUdfU05EX1JBV01JREk9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKK0NPTkZJR19TTkRfREVCVUc9eQorIyBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9TUEk9eQorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89eQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KK0NPTkZJR19VU0JfV0RNPXkKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9FTUk2Mj1tCitDT05GSUdfVVNCX0VNSTI2PW0KKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xFR09UT1dFUj1tCitDT05GSUdfVVNCX0xDRD1tCisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTEVEPW0KKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNWJlMDE2OS4uYTU4Mzc4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwNyw2ICsxMDcsNiBAQAogI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCShfciktPkFSTV9yMCA9IDAKIAogZXh0ZXJuIHZvaWQgZWxmX3NldF9wZXJzb25hbGl0eShjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICopOwotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQllbGZfc2V0X3BlcnNvbmFsaXR5KCYoZXgpKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCWVsZl9zZXRfcGVyc29uYWxpdHkoJihleCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jCmluZGV4IGU0ZjcyZDIuLjQ0ZDRjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY3B1LmMKQEAgLTE4NCw3ICsxODQsNiBAQAogewogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSAxNjAwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gMTIwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDA7IC8qIDEgbXMsIGFzc3VtZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCA0NzhjMmM5Li41ZmJhMjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYXJlbnQgPSBjbGstPnBhcmVudDsKLQlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQorCWlmICh1bmxpa2VseShwYXJlbnQgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwogCiAJcmVhbHJhdGUgPSBwYXJlbnQtPnJhdGU7CkBAIC00OTksNyArNDk5LDcgQEAKIAlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQogCQlyZXR1cm4gMDsKIAotCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKKwlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAogCQkgICAgICAgY2xrLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzUsNyArNTM1LDcgQEAKIAlfX3UxNiByZWd2YWwxNjsKIAlfX3UzMiByZWd2YWwzMjsKIAotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpCiAJCXJldHVybjsKIAogCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKIAl9CiAKLQlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAogCXJldHVybiBjbGstPnJhdGU7CkBAIC02MjUsNyArNjI1LDcgQEAKIAogCS8qIENsb2NrcyBpbiB0aGUgRFNQIGRvbWFpbiBuZWVkIGFwaV9jay4gSnVzdCBhc3N1bWUgYm9vdGxvYWRlcgogCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLwotCWlmICgodTMyKWNsay0+ZW5hYmxlX3JlZyA9PSBEU1BfSURMRUNUMikgeworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gRFNQX0lETEVDVDIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgcmVzZXQgY2hlY2sgZm9yIERTUCBkb21haW4gIgogCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgY2xrLT5uYW1lKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCmluZGV4IDZlYWRmNzIuLjU2MzViNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKQEAgLTMyNCw3ICszMjQsNyBAQAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CiAJCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4sCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKURTUF9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCkBAIC0zNTAsNyArMzUwLDcgQEAKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKURTUF9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggOTk5ODJkMy4uZTM4MmI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCiAKLSNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlYTAwMCkKKyNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCTB4ZmZmZWEwMDAKICNkZWZpbmUgT01BUDFfU1RJX0NIQU5ORUxfQkFTRQkoT01BUDFfU1RJX0JBU0UgKyAweDQwMCkKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdGlfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKaW5kZXggMmJhZWFlYi4uN2RlN2M2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwpAQCAtMTAzLDMwICsxMDMsNiBAQAogeyB9CiAjZW5kaWYKIAotc3RhdGljIGludCBvbWFwMV9tY2JzcF9jaGVjayh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JLyogUkVWSVNJVDogQ2hlY2sgY29ycmVjdGx5IGZvciBudW1iZXIgb2YgcmVnaXN0ZXJlZCBNY0JTUHMgKi8KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewotCQlpZiAoaWQgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCAtIDIpIHsKLQkJICAgICAgIHByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCBkb2Vzbid0IGV4aXN0XG4iLAotCQkJCWlkICsgMSk7Ci0JCSAgICAgICByZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJaWYgKGlkID4gT01BUF9NQVhfTUNCU1BfQ09VTlQgLSAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwKLQkJCQlpZCArIDEpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KIHN0YXRpYyB2b2lkIG9tYXAxX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogewogCS8qCkBAIC0xNTEsNyArMTI3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX29wcyBvbWFwMV9tY2JzcF9vcHMgPSB7Ci0JLmNoZWNrCQk9IG9tYXAxX21jYnNwX2NoZWNrLAogCS5yZXF1ZXN0CT0gb21hcDFfbWNic3BfcmVxdWVzdCwKIAkuZnJlZQkJPSBvbWFwMV9tY2JzcF9mcmVlLAogfTsKQEAgLTE2MCw3ICsxMzUsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDczMF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVA3MzBfTUNCU1AxX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDczMF9NQ0JTUDFfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF83MzBfTWNCU1AxUlgsCkBAIC0xNjksNyArMTQzLDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVA3MzBfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDczMF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAogCQkucnhfaXJxCQk9IElOVF83MzBfTWNCU1AyUlgsCkBAIC0xODcsNyArMTYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXAxNXh4X21jYnNwX3BkYXRhW10gPSB7CiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AxX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLApAQCAtMTk3LDcgKzE2OSw2IEBACiAJCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDE1MTBfTUNCU1AyX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMTUxMF9TUElfUlgsCkBAIC0yMDYsNyArMTc3LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNTEwX01DQlNQM19CQVNFLAotCQkudmlydF9iYXNlCT0gT01BUDE1MTBfTUNCU1AzX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDNSWCwKQEAgLTIyNSw3ICsxOTUsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IE9NQVAxNjEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AxUlgsCkBAIC0yMzUsNyArMjA0LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQMl9CQVNFLAotCQkudmlydF9iYXNlCT0gaW9fcDJ2KE9NQVAxNjEwX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AyX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzE2MTBfTWNCU1AyX1JYLApAQCAtMjQ0LDcgKzIxMiw2IEBACiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDNfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IE9NQVAxNjEwX01DQlNQM19CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19UWCwKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCkBAIC0yNzEsNiArMjM4LDE4IEBACiAJfQogCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQNzMwX01DQlNQX1BEQVRBX1NaOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaOworCisJbWNic3BfcHRyID0ga3phbGxvYyhvbWFwX21jYnNwX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBvbWFwX21jYnNwICopLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1jYnNwX3B0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKIAkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDczMF9tY2JzcF9wZGF0YSwKIAkJCQkJCU9NQVA3MzBfTUNCU1BfUERBVEFfU1opOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCBhZWZjOTY3Li41Mjg2OTFkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtNjcsOCArNjcsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewotCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCi0JCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkubWVtYmFzZQk9IElPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKKwkJLm1hcGJhc2UJPSBPTUFQX1VBUlQxX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQxLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC03Niw4ICs3Niw4IEBACiAJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCiAJfSwKIAl7Ci0JCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDIsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTg1LDggKzg1LDggQEAKIAkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LAogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDNfQkFTRSwKKwkJLm1lbWJhc2UJPSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSksCisJCS5tYXBiYXNlCT0gT01BUF9VQVJUM19CQVNFLAogCQkuaXJxCQk9IElOVF9VQVJUMywKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDcwNjljOWQuLjQ4MzJmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTE1LDggKzE1LDE3IEBACiAJYm9vbCAiT01BUDI0MzAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIEFSQ0hfT01BUDM0WFgKKwlib29sICJPTUFQMzR4eCBCYXNlZCBTeXN0ZW0iCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisKK2NvbmZpZyBBUkNIX09NQVAzNDMwCisJYm9vbCAiT01BUDM0MzAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBBUkNIX09NQVBfT1RHCisKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMwogCiBjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKIAlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCkBAIC0zNSwzICs0NCwxNCBAQAogCWJvb2wgIk9NQVAgMjQzMCBTRFAgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIE1BQ0hfT01BUDNfQkVBR0xFCisJYm9vbCAiT01BUDMgQkVBR0xFIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX09NQVBfTERQCisJYm9vbCAiT01BUDMgTERQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX09WRVJPCisJYm9vbCAiR3Vtc3RpeCBPdmVybyBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggOTNlZTk5MC4uYzY5MzkyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC00LDE2ICs0LDIxIEBACiAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlycS5vIGlkLm8gaW8ubyBtZW1vcnkubyBjb250cm9sLm8gcHJjbS5vIGNsb2NrLm8gbXV4Lm8gXAotCQlkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8KKwkJZGV2aWNlcy5vIHNlcmlhbC5vIGdwbWMubyB0aW1lci1ncC5vIHBvd2VyZG9tYWluLm8gXAorCQljbG9ja2RvbWFpbi5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKICMgRnVuY3Rpb25zIGxvYWRlZCB0byBTUkFNCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IHNyYW0yNDJ4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gc3JhbTI0M3gubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzcmFtMzR4eC5vCiAKICMgUG93ZXIgTWFuYWdlbWVudAotb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KK2lmZXEgKCQoQ09ORklHX1BNKSx5KQorb2JqLXkJCQkJCSs9IHBtLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyNFhYKQkJKz0gc2xlZXAyNHh4Lm8KK2VuZGlmCiAKICMgQ2xvY2sgZnJhbWV3b3JrCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrMjR4eC5vCkBAIC0yNCw0ICsyOSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0g0KQkJKz0gYm9hcmQtaDQubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQKQkJKz0gYm9hcmQtMjQzMHNkcC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pCQkrPSBib2FyZC1hcG9sbG9uLm8KK29iai0kKENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSkJCSs9IGJvYXJkLW9tYXAzYmVhZ2xlLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8KK29iai0kKENPTkZJR19NQUNIX09WRVJPKQkJKz0gYm9hcmQtb3Zlcm8ubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWE1OTk4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICogTmlzaGFudCBLYW1hdCA8bnNrYW1hdEB0aS5jb20+CisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLWxkcC5oPgorI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgbGRwX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGxkcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCXsgT01BUF9UQUdfVUFSVCwJJmxkcF91YXJ0X2NvbmZpZyB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9pMmNfaW5pdCh2b2lkKQoreworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBOVUxMLCAwKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXQodm9pZCkKK3sKKwlvbWFwX2kyY19pbml0KCk7CisJb21hcF9ib2FyZF9jb25maWcgPSBsZHBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGxkcF9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF9MRFAsICJPTUFQIExEUCBib2FyZCIpCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2xkcF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF9sZHBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfbGRwX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE3OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzCisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworICoKKyAqIEluaXRpYWwgY29kZTogU3llZCBNb2hhbW1lZCBLaGFzaW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgorCisKKyNkZWZpbmUgR1BNQ19DUzBfQkFTRSAgMHg2MAorI2RlZmluZSBHUE1DX0NTX1NJWkUgICAweDMwCisKKyNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTUgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QgRW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjYwMDAwICovCisJCS5zaXplCQk9IDEgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUJCT0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIG9tYXAzYmVhZ2xlX25hbmRfZGF0YSA9IHsKKwkub3B0aW9ucwk9IE5BTkRfQlVTV0lEVEhfMTYsCisJLnBhcnRzCQk9IG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsCT0gLTEsCQkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE5BTkQgZHJpdmVyICovCisJLm5hbmRfc2V0dXAJPSBOVUxMLAorCS5kZXZfcmVhZHkJPSBOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM2JlYWdsZV9uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzYmVhZ2xlX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm9tYXAzYmVhZ2xlX25hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmb21hcDNiZWFnbGVfbmFuZF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBvbWFwM19iZWFnbGVfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cwk9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzX2JlYWdsZV9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwM2JlYWdsZV9sY2QiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9tYXAzX2JlYWdsZV9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJiZWFnbGVib2FyZDo6dXNyMCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwkJLmdwaW8JCQk9IDE1MCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJiZWFnbGVib2FyZDo6dXNyMSIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCisJCS5ncGlvCQkJPSAxNDksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0geworCS5sZWRzCQk9IGdwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGdwaW9fbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZWRzX2dwaW8gPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2xlZF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZ3Bpb19idXR0b25zW10gPSB7CisJeworCQkuY29kZQkJCT0gQlROX0VYVFJBLAorCQkuZ3BpbwkJCT0gNywKKwkJLmRlc2MJCQk9ICJ1c2VyIiwKKwkJLndha2V1cAkJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleV9pbmZvID0geworCS5idXR0b25zCT0gZ3Bpb19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ3Bpb19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtleXNfZ3BpbyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fa2V5X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9tYXAzX2JlYWdsZV9jb25maWdbXSBfX2luaXRkYXRhID0geworCXsgT01BUF9UQUdfVUFSVCwJJm9tYXAzX2JlYWdsZV91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJm9tYXAzX2JlYWdsZV9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfYmVhZ2xlX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZvbWFwM19iZWFnbGVfbGNkX2RldmljZSwKKwkmbGVkc19ncGlvLAorCSZrZXlzX2dwaW8sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNiZWFnbGVfZmxhc2hfaW5pdCh2b2lkKQoreworCXU4IGNzID0gMDsKKwl1OCBuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CisKKwl1MzIgZ3BtY19iYXNlX2FkZCA9IE9NQVAzNFhYX0dQTUNfVklSVDsKKworCS8qIGZpbmQgb3V0IHRoZSBjaGlwLXNlbGVjdCBvbiB3aGljaCBOQU5EIGV4aXN0cyAqLworCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCXUzMiByZXQgPSAwOworCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCisJCWlmICgocmV0ICYgMHhDMDApID09IDB4ODAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBOQU5EIG9uIENTJWRcbiIsIGNzKTsKKwkJCWlmIChuYW5kY3MgPiBHUE1DX0NTX05VTSkKKwkJCQluYW5kY3MgPSBjczsKKwkJfQorCQljcysrOworCX0KKworCWlmIChuYW5kY3MgPiBHUE1DX0NTX05VTSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkgImluIEdQTUNcbiAiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChuYW5kY3MgPCBHUE1DX0NTX05VTSkgeworCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuY3MgPSBuYW5kY3M7CisJCW9tYXAzYmVhZ2xlX25hbmRfZGF0YS5ncG1jX2NzX2Jhc2VhZGRyID0gKHZvaWQgKikKKwkJCShncG1jX2Jhc2VfYWRkICsgR1BNQ19DUzBfQkFTRSArIG5hbmRjcyAqIEdQTUNfQ1NfU0laRSk7CisJCW9tYXAzYmVhZ2xlX25hbmRfZGF0YS5ncG1jX2Jhc2VhZGRyID0gKHZvaWQgKikgKGdwbWNfYmFzZV9hZGQpOworCisJCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nIE5BTkQgb24gQ1MlZFxuIiwgbmFuZGNzKTsKKwkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDNiZWFnbGVfbmFuZF9kZXZpY2UpIDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIE5BTkQgZGV2aWNlXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG9tYXAzX2JlYWdsZV9kZXZpY2VzLAorCQkJQVJSQVlfU0laRShvbWFwM19iZWFnbGVfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gb21hcDNfYmVhZ2xlX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM19iZWFnbGVfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcDNiZWFnbGVfZmxhc2hfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUDNfQkVBR0xFLCAiT01BUDMgQmVhZ2xlIEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBTeWVkIE1vaGFtbWVkIEtoYXNpbSAtIGh0dHA6Ly9iZWFnbGVib2FyZC5vcmcgKi8KKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXAzX2JlYWdsZV9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcDNfYmVhZ2xlX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwM19iZWFnbGVfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWFhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBib2FyZC1vdmVyby5jIChHdW1zdGl4IE92ZXJvKQorICoKKyAqIEluaXRpYWwgY29kZTogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1vdmVyby5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL25hbmQuaD4KKworI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUgU1pfMTI4SworI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCisjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG92ZXJvX25hbmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLAorCQkub2Zmc2V0ICAgICAgICAgPSAwLAkJCS8qIE9mZnNldCA9IDB4MDAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gNCAqIE5BTkRfQkxPQ0tfU0laRSwKKwkJLm1hc2tfZmxhZ3MgICAgID0gTVREX1dSSVRFQUJMRQorCX0sCisJeworCQkubmFtZSAgICAgICAgICAgPSAidWJvb3QiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gMTQgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJ1Ym9vdCBlbnZpcm9ubWVudCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyNDAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gMiAqIE5BTkRfQkxPQ0tfU0laRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gImxpbnV4IiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkuc2l6ZSAgICAgICAgICAgPSAzMiAqIE5BTkRfQkxPQ0tfU0laRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gInJvb3RmcyIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg2ODAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSBvdmVyb19uYW5kX2RhdGEgPSB7CisJLnBhcnRzID0gb3Zlcm9fbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUob3Zlcm9fbmFuZF9wYXJ0aXRpb25zKSwKKwkuZG1hX2NoYW5uZWwgPSAtMSwJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdmVyb19uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG92ZXJvX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm92ZXJvX25hbmRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmb3Zlcm9fbmFuZF9yZXNvdXJjZSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2ZsYXNoX2luaXQodm9pZCkKK3sKKwl1OCBjcyA9IDA7CisJdTggbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCisJdTMyIGdwbWNfYmFzZV9hZGQgPSBPTUFQMzRYWF9HUE1DX1ZJUlQ7CisKKwkvKiBmaW5kIG91dCB0aGUgY2hpcC1zZWxlY3Qgb24gd2hpY2ggTkFORCBleGlzdHMgKi8KKwl3aGlsZSAoY3MgPCBHUE1DX0NTX05VTSkgeworCQl1MzIgcmV0ID0gMDsKKwkJcmV0ID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUcxKTsKKworCQlpZiAoKHJldCAmIDB4QzAwKSA9PSAweDgwMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTkFORCBvbiBDUyVkXG4iLCBjcyk7CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCX0KKwkJY3MrKzsKKwl9CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTkFORDogVW5hYmxlIHRvIGZpbmQgY29uZmlndXJhdGlvbiAiCisJCQkJICJpbiBHUE1DXG4gIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobmFuZGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJb3Zlcm9fbmFuZF9kYXRhLmNzID0gbmFuZGNzOworCQlvdmVyb19uYW5kX2RhdGEuZ3BtY19jc19iYXNlYWRkciA9ICh2b2lkICopCisJCQkoZ3BtY19iYXNlX2FkZCArIEdQTUNfQ1MwX0JBU0UgKyBuYW5kY3MgKiBHUE1DX0NTX1NJWkUpOworCQlvdmVyb19uYW5kX2RhdGEuZ3BtY19iYXNlYWRkciA9ICh2b2lkICopIChncG1jX2Jhc2VfYWRkKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBOQU5EIG9uIENTJWRcbiIsIG5hbmRjcyk7CisJCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm92ZXJvX25hbmRfZGV2aWNlKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CisJfQorfQorc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIG92ZXJvX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG92ZXJvX2kyY19pbml0KHZvaWQpCit7CisJLyogaTJjMiBwaW5zIGFyZSB1c2VkIGZvciBncGlvICovCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG92ZXJvX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm92ZXJvX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb3Zlcm9fbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgb3Zlcm9fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZvdmVyb191YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJm92ZXJvX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvdmVyb19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmb3Zlcm9fbGNkX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19pbml0KHZvaWQpCit7CisJb3Zlcm9faTJjX2luaXQoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvdmVyb19kZXZpY2VzLCBBUlJBWV9TSVpFKG92ZXJvX2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG92ZXJvX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvdmVyb19jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvdmVyb19mbGFzaF9pbml0KCk7CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1cyV19OUkVTRVQsCisJCQkgICJPVkVST19HUElPX1cyV19OUkVTRVQiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMSkgPT0gMCkpIHsKKwkJZ3Bpb19leHBvcnQoT1ZFUk9fR1BJT19XMldfTlJFU0VULCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoT1ZFUk9fR1BJT19XMldfTlJFU0VULCAwKTsKKwkJdWRlbGF5KDEwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoT1ZFUk9fR1BJT19XMldfTlJFU0VULCAxKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBvYnRhaW4gZ3BpbyBmb3IgIgorCQkJCQkiT1ZFUk9fR1BJT19XMldfTlJFU0VUXG4iKTsKKwl9CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX0JUX1hHQVRFLCAiT1ZFUk9fR1BJT19CVF9YR0FURSIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1ZFUk9fR1BJT19CVF9YR0FURSwgMCkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fQlRfWEdBVEUsIDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIE9WRVJPX0dQSU9fQlRfWEdBVEVcbiIpOworCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fR1BJT19CVF9OUkVTRVQsICJPVkVST19HUElPX0JUX05SRVNFVCIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1ZFUk9fR1BJT19CVF9OUkVTRVQsIDEpID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fQlRfTlJFU0VULCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoT1ZFUk9fR1BJT19CVF9OUkVTRVQsIDApOworCQltZGVsYXkoNik7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fQlRfTlJFU0VULCAxKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBvYnRhaW4gZ3BpbyBmb3IgIgorCQkJCQkiT1ZFUk9fR1BJT19CVF9OUkVTRVRcbiIpOworCX0KKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVVNCSF9DUEVOLCAiT1ZFUk9fR1BJT19VU0JIX0NQRU4iKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fVVNCSF9DUEVOLCAxKSA9PSAwKSkKKwkJZ3Bpb19leHBvcnQoT1ZFUk9fR1BJT19VU0JIX0NQRU4sIDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fVVNCSF9DUEVOXG4iKTsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQsCisJCQkgICJPVkVST19HUElPX1VTQkhfTlJFU0VUIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChPVkVST19HUElPX1VTQkhfTlJFU0VULCAxKSA9PSAwKSkKKwkJZ3Bpb19leHBvcnQoT1ZFUk9fR1BJT19VU0JIX05SRVNFVCwgMCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBvYnRhaW4gZ3BpbyBmb3IgIgorCQkJCQkiT1ZFUk9fR1BJT19VU0JIX05SRVNFVFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9WRVJPLCAiR3Vtc3RpeCBPdmVybyIpCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvdmVyb19tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Zlcm9faW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG92ZXJvX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCA5N2NkZTNkMy4uYWQ3MjFlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KICNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtNjEsMTAgKzYyLDM2IEBACiB1OCBjcHVfbWFzazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPbWFwMiBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqIE9NQVAyLzMgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKKyAqIG9tYXAyX2luaXRfY2xrX2Nsa2RtIC0gbG9vayB1cCBhIGNsb2NrZG9tYWluIG5hbWUsIHN0b3JlIHBvaW50ZXIgaW4gY2xrCisgKiBAY2xrOiBPTUFQIGNsb2NrIHN0cnVjdCBwdHIgdG8gdXNlCisgKgorICogQ29udmVydCBhIGNsb2NrZG9tYWluIG5hbWUgc3RvcmVkIGluIGEgc3RydWN0IGNsayAnY2xrJyBpbnRvIGEKKyAqIGNsb2NrZG9tYWluIHBvaW50ZXIsIGFuZCBzYXZlIGl0IGludG8gdGhlIHN0cnVjdCBjbGsuICBJbnRlbmRlZCB0byBiZQorICogY2FsbGVkIGR1cmluZyBjbGtfcmVnaXN0ZXIoKS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwMl9pbml0X2Nsa19jbGtkbShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKworCWlmICghY2xrLT5jbGtkbV9uYW1lKQorCQlyZXR1cm47CisKKwljbGtkbSA9IGNsa2RtX2xvb2t1cChjbGstPmNsa2RtX25hbWUpOworCWlmIChjbGtkbSkgeworCQlwcl9kZWJ1ZygiY2xvY2s6IGFzc29jaWF0ZWQgY2xrICVzIHRvIGNsa2RtICVzXG4iLAorCQkJIGNsay0+bmFtZSwgY2xrLT5jbGtkbV9uYW1lKTsKKwkJY2xrLT5jbGtkbSA9IGNsa2RtOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJjbG9jazogY291bGQgbm90IGFzc29jaWF0ZSBjbGsgJXMgdG8gIgorCQkJICJjbGtkbSAlc1xuIiwgY2xrLT5uYW1lLCBjbGstPmNsa2RtX25hbWUpOworCX0KK30KKworLyoqCiAgKiBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQgLSBzZXQgYSBjbGtzZWwgY2xrJ3MgcGFyZW50IGZpZWxkIGZyb20gdGhlIGhhcmR3YXJlCiAgKiBAY2xrOiBPTUFQIGNsb2NrIHN0cnVjdCBwdHIgdG8gdXNlCiAgKgpAQCAtMjUwLDcgKzI3Nyw3IEBACiAJaWYgKGNsay0+ZW5hYmxlKQogCQlyZXR1cm4gY2xrLT5lbmFibGUoY2xrKTsKIAotCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKKwlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAogCQkgICAgICAgY2xrLT5uYW1lKTsKIAkJcmV0dXJuIDA7IC8qIFJFVklTSVQ6IC1FSU5WQUwgKi8KQEAgLTI4Miw3ICszMDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAwKSB7CisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSB7CiAJCS8qCiAJCSAqICdJbmRlcGVuZGVudCcgaGVyZSByZWZlcnMgdG8gYSBjbG9jayB3aGljaCBpcyBub3QKIAkJICogY29udHJvbGxlZCBieSBpdHMgcGFyZW50LgpAQCAtMzA3LDYgKzMzNCw5IEBACiAJCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwogCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQogCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCQlpZiAoY2xrLT5jbGtkbSkKKwkJCW9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKGNsay0+Y2xrZG0sIGNsayk7CisKIAl9CiB9CiAKQEAgLTMyMywxMSArMzUzLDE5IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKKwkJaWYgKGNsay0+Y2xrZG0pCisJCQlvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKGNsay0+Y2xrZG0sIGNsayk7CisKIAkJcmV0ID0gX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKIAotCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7Ci0JCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Ci0JCQljbGstPnVzZWNvdW50LS07CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCWlmIChjbGstPmNsa2RtKQorCQkJCW9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKGNsay0+Y2xrZG0sIGNsayk7CisKKwkJCWlmIChjbGstPnBhcmVudCkgeworCQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJCQljbGstPnVzZWNvdW50LS07CisJCQl9CiAJCX0KIAl9CiAKQEAgLTQ3Niw3ICs1MTQsNyBAQAogLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaWYgKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gTlVMTCkKIAkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwogCiAJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQpAQCAtNTY1LDcgKzYwMyw3IEBACiAgKi8KIHZvaWQgX19pb21lbSAqb21hcDJfZ2V0X2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiAqZmllbGRfbWFzaykKIHsKLQlpZiAodW5saWtlbHkoKGNsay0+Y2xrc2VsX3JlZyA9PSAwKSB8fCAoY2xrLT5jbGtzZWxfbWFzayA9PSAwKSkpCisJaWYgKHVubGlrZWx5KChjbGstPmNsa3NlbF9yZWcgPT0gTlVMTCkgfHwgKGNsay0+Y2xrc2VsX21hc2sgPT0gTlVMTCkpKQogCQlyZXR1cm4gTlVMTDsKIAogCSpmaWVsZF9tYXNrID0gY2xrLT5jbGtzZWxfbWFzazsKQEAgLTU4NSw3ICs2MjMsNyBAQAogCXZvaWQgX19pb21lbSAqZGl2X2FkZHI7CiAKIAlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IDApCisJaWYgKGRpdl9hZGRyID09IE5VTEwpCiAJCXJldHVybiAwOwogCiAJZmllbGRfdmFsID0gX19yYXdfcmVhZGwoZGl2X2FkZHIpICYgZmllbGRfbWFzazsKQEAgLTYwNCw3ICs2NDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRpdl9hZGRyID0gb21hcDJfZ2V0X2Nsa3NlbChjbGssICZmaWVsZF9tYXNrKTsKLQlpZiAoZGl2X2FkZHIgPT0gMCkKKwlpZiAoZGl2X2FkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmaWVsZF92YWwgPSBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChjbGssIG5ld19kaXYpOwpAQCAtNjQyLDcgKzY4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogZHBsbF9jaywgY29yZV9jaywgdmlydF9wcmNtX3NldDsgcGx1cyBhbGwgY2xrc2VsIGNsb2NrcyAqLwotCWlmIChjbGstPnNldF9yYXRlICE9IDApCisJaWYgKGNsay0+c2V0X3JhdGUgIT0gTlVMTCkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwogCiAJaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCkBAIC02NjMsNyArNzAxLDcgQEAKIAljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CiAKIAkqcGFyZW50X2RpdiA9IDA7Ci0JKnNyY19hZGRyID0gMDsKKwkqc3JjX2FkZHIgPSBOVUxMOwogCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7CiAJaWYgKGNsa3MgPT0gTlVMTCkKQEAgLTcwNCw3ICs3NDIsNyBAQAogCiAJZmllbGRfdmFsID0gb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQoJnNyY19hZGRyLCBuZXdfcGFyZW50LAogCQkJCQkgICAgICAgJmZpZWxkX21hc2ssIGNsaywgJnBhcmVudF9kaXYpOwotCWlmIChzcmNfYWRkciA9PSAwKQorCWlmIChzcmNfYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbGstPnVzZWNvdW50ID4gMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCA2MjZlNWZhLi4xZmIzMzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0yMSw2ICsyMSw3IEBACiAvKiBUaGUgbWF4aW11bSBlcnJvciBiZXR3ZWVuIGEgdGFyZ2V0IERQTEwgcmF0ZSBhbmQgdGhlIHJvdW5kZWQgcmF0ZSBpbiBIeiAqLwogI2RlZmluZSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UJNTAwMDAKIAoraW50IG9tYXAyX2Nsa19pbml0KHZvaWQpOwogaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwpAQCAtMzYsNiArMzcsNyBAQAogI2VuZGlmCiAKIHZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBvbWFwMl9pbml0X2Nsa19jbGtkbShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKTsKIHUzMiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKaW5kZXggYmU0ZTI1NS4uMjQyYTE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCkBAIC02MjYsNiArNjI2LDcgQEAKIAkucmF0ZQkJPSAzMjAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIApAQCAtNjM0LDE3ICs2MzUsMTkgQEAKIAkubmFtZQkJPSAib3NjX2NrIiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGUJCT0gJm9tYXAyX2VuYWJsZV9vc2NfY2ssCiAJLmRpc2FibGUJPSAmb21hcDJfZGlzYWJsZV9vc2NfY2ssCiAJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCiB9OwogCi0vKiBXaXRoIG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCisvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCiAJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLwogCS5wYXJlbnQJCT0gJm9zY19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCiB9OwogCkBAIC02NTMsNiArNjU2LDcgQEAKIAkucmF0ZQkJPSA1NDAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIApAQCAtNjg0LDYgKzY4OCw3IEBACiAJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKIH07CkBAIC02OTQsNiArNjk5LDcgQEAKIAkucmF0ZQkJPSA5NjAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzk2TV9QTExfU0hJRlQsCiAJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKQEAgLTcwNyw2ICs3MTMsNyBAQAogCS5yYXRlCQk9IDU0MDAwMDAwLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwgRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVCwKIAkuZW5hYmxlCQk9ICZvbWFwMl9jbGtfZml4ZWRfZW5hYmxlLApAQCAtNzQxLDYgKzc0OCw3IEBACiAJLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzU0TV9TT1VSQ0UsCkBAIC03NTMsNiArNzYxLDcgQEAKIAkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC03NzksNiArNzg4LDcgQEAKIAkucGFyZW50CQk9ICZhcGxsOTZfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNDMwXzk2TV9TT1VSQ0UsCkBAIC04MTEsNiArODIxLDcgQEAKIAkucGFyZW50CQk9ICZhcGxsOTZfY2ssCSAvKiA5Nk0gb3IgQWx0ICovCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCkBAIC04MjYsNiArODM3LDcgQEAKIAkuZml4ZWRfZGl2CT0gNCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAogfTsKIApAQCAtODc4LDYgKzg5MCw3IEBACiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTEtPVVRfRU5fU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTkwOCw2ICs5MjEsNyBAQAogCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLApAQCAtOTIxLDYgKzkzNSw3IEBACiAJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTk0Miw2ICs5NTcsNyBAQAogCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa291dDJfc3JjLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKQEAgLTk1NCw2ICs5NzAsNyBAQAogCS5uYW1lCQk9ICJlbXVsX2NrIiwKIAkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS0VNVUxfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtOTkwLDEyICsxMDA3LDEzIEBACiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAogCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTVBVX01BU0ssCiAJLmNsa3NlbAkJPSBtcHVfY2xrc2VsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUgICAgID0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKIH07CiAKQEAgLTEwMzEsNiArMTA0OSw3IEBACiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IERFTEFZRURfQVBQIHwKIAkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiZHNwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEwNTQsMTAgKzEwNzMsNyBAQAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAotLyoKLSAqIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLCBidXQgaXMgYWRkZWQgdG8KLSAqIHNlcGFyYXRlIHNvdXJjZSBzZWxlY3Rpb24gZnJvbSAgWFhYCi0gKi8KKy8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKIAkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCiAJLnBhcmVudAkJPSAmZHNwX2ZjaywKQEAgLTEwODksMTEgKzExMDUsMTcgQEAKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQX1NISUZULAogfTsKIAorLyoKKyAqIFRoZSBJVkExIGlzIGFuIEFSTTcgY29yZSBvbiB0aGUgMjQyMCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGgKKyAqIHRoZSBDNTR4LCBidXQgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSBEU1AgcG93ZXJkb21haW4uICBEb2VzIG5vdAorICogZXhpc3Qgb24gbGF0ZXIgT01BUHMuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKIAkubmFtZQkJPSAiaXZhMV9pZmNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENPTkZJR19QQVJUSUNJUEFOVCB8CiAJCQkJUkFURV9QUk9QQUdBVEVTIHwgREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTExMDksNiArMTEzMSw3IEBACiAJLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKIAkucGFyZW50CQk9ICZpdmExX2lmY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfTVBVX1NISUZULAogCS5maXhlZF9kaXYJPSAyLApAQCAtMTE1Niw2ICsxMTc5LDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8CiAJCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKIAkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLApAQCAtMTE3NywxMSArMTIwMSwxMyBAQAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKKy8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwogCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLApAQCAtMTE5MywxMCArMTIxOSw0MiBAQAogfTsKIAogLyoKKyAqIEw0IGNsb2NrIG1hbmFnZW1lbnQgZG9tYWluCisgKgorICogVGhpcyBkb21haW4gY29udGFpbnMgbG90cyBvZiBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGludGVyZmFjZSwgc29tZQorICogZnVuY3Rpb25hbCBjbG9ja3MuCUZpeGVkIEFQTEwgZnVuY3Rpb25hbCBzb3VyY2UgY2xvY2tzIGFyZSBtYW5hZ2VkIGluCisgKiB0aGlzIGRvbWFpbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBsNF9jb3JlX2wzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSBsNF9jb3JlX2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBsNF9jayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhbiBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJsNF9jayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCisJLmNsa3NlbAkJPSBsNF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCisvKgogICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKICAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKICAqIGRvbWFpbi4KLSAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfQ0xJSworICogU1NJX1NTUl9GQ0xLLCBTU0lfU1NUX0ZDTEssIFNTSV9MNF9JQ0xLCiAgKgogICogc3NyID0gY29yZS8xLzIvMy80LzUsIHNzdCA9IDEvMiBzc3IuCiAgKi8KQEAgLTEyMjEsNiArMTI3OSw3IEBACiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTEyMzEsNiArMTI5MCw3IEBACiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQogfTsKIAorCiAvKgogICogR0ZYIGNsb2NrIGRvbWFpbgogICoJQ2xvY2tzOgpAQCAtMTI1NCw2ICsxMzE0LDcgQEAKIAkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLApAQCAtMTI2OCw2ICsxMzI5LDcgQEAKIAkubmFtZQkJPSAiZ2Z4XzJkX2ZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLApAQCAtMTI4Miw2ICsxMzQ0LDcgQEAKIAkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTMxMSw2ICsxMzc0LDcgQEAKIAkubmFtZQkJPSAibWRtX2ljayIsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETV9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpLApAQCAtMTMyNSw1MiArMTM4OSwxMyBAQAogCS5uYW1lCQk9ICJtZG1fb3NjX2NrIiwKIAkucGFyZW50CQk9ICZvc2NfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyoKLSAqIEw0IGNsb2NrIG1hbmFnZW1lbnQgZG9tYWluCi0gKgotICogVGhpcyBkb21haW4gY29udGFpbnMgbG90cyBvZiBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGludGVyZmFjZSwgc29tZQotICogZnVuY3Rpb25hbCBjbG9ja3MuCUZpeGVkIEFQTEwgZnVuY3Rpb25hbCBzb3VyY2UgY2xvY2tzIGFyZSBtYW5hZ2VkIGluCi0gKiB0aGlzIGRvbWFpbi4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBsNF9jb3JlX2wzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSBsNF9jb3JlX2wzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsNF9jayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhbiBpY2sgYW5kIGZjayAqLwotCS5uYW1lCQk9ICJsNF9jayIsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUywKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCi0JLmNsa3NlbAkJPSBsNF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0gewotCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qCiAgKiBEU1MgY2xvY2sgZG9tYWluCiAgKiBDTE9DS3M6CiAgKiBEU1NfTDRfSUNMSywgRFNTX0wzX0lDTEssCkBAIC0xNDA5LDYgKzE0MzQsNyBAQAogCS5uYW1lCQk9ICJkc3NfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNDE5LDYgKzE0NDUsNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE0NTEsNiArMTQ3OCw3IEBACiAJLnBhcmVudAkJPSAmc3lzX2NrLAkJLyogZml4ZWQgYXQgc3lzX2NrIG9yIDQ4TUh6ICovCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCURFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMl9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTQ2NCw2ICsxNDkyLDcgQEAKIAkubmFtZQkJPSAiZHNzXzU0bV9mY2siLAkvKiA1NG0gdHYgY2xrICovCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTQ5MSw2ICsxNTIwLDcgQEAKIAkubmFtZQkJPSAiZ3B0MV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTUwMCw2ICsxNTMwLDcgQEAKIAkubmFtZQkJPSAiZ3B0MV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTUxNSw2ICsxNTQ2LDcgQEAKIAkubmFtZQkJPSAiZ3B0Ml9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1MjQsNiArMTU1Niw3IEBACiAJLm5hbWUJCT0gImdwdDJfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNTM3LDYgKzE1NzAsNyBAQAogCS5uYW1lCQk9ICJncHQzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTU0Niw2ICsxNTgwLDcgQEAKIAkubmFtZQkJPSAiZ3B0M19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE1NTksNiArMTU5NCw3IEBACiAJLm5hbWUJCT0gImdwdDRfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNTY4LDYgKzE2MDQsNyBAQAogCS5uYW1lCQk9ICJncHQ0X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTU4MSw2ICsxNjE4LDcgQEAKIAkubmFtZQkJPSAiZ3B0NV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1OTAsNiArMTYyOCw3IEBACiAJLm5hbWUJCT0gImdwdDVfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjAzLDYgKzE2NDIsNyBAQAogCS5uYW1lCQk9ICJncHQ2X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTYxMiw2ICsxNjUyLDcgQEAKIAkubmFtZQkJPSAiZ3B0Nl9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2MzQsNiArMTY3NSw3IEBACiAJLm5hbWUJCT0gImdwdDdfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjQ3LDYgKzE2ODksNyBAQAogCS5uYW1lCQk9ICJncHQ4X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTY1Niw2ICsxNjk5LDcgQEAKIAkubmFtZQkJPSAiZ3B0OF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2NjksNiArMTcxMyw3IEBACiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNjc4LDYgKzE3MjMsNyBAQAogCS5uYW1lCQk9ICJncHQ5X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTY5MSw2ICsxNzM3LDcgQEAKIAkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTcwMCw2ICsxNzQ3LDcgQEAKIAkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTcxMyw2ICsxNzYxLDcgQEAKIAkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTcyMiw2ICsxNzcxLDcgQEAKIAkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTczNSw2ICsxNzg1LDcgQEAKIAkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTc0NCw2ICsxNzk1LDcgQEAKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTc1OCw2ICsxODEwLDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3NjgsNiArMTgyMSw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzc4LDYgKzE4MzIsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTc4OCw2ICsxODQzLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3OTgsNiArMTg1NCw3IEBACiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTgwOCw2ICsxODY1LDcgQEAKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODE4LDYgKzE4NzYsNyBAQAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4MjgsNiArMTg4Nyw3IEBACiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTgzOCw2ICsxODk4LDcgQEAKIAkuaWQJCT0gNSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODQ4LDYgKzE5MDksNyBAQAogCS5pZAkJPSA1LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4NTcsNiArMTkxOSw3IEBACiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULApAQCAtMTg2OCw2ICsxOTMxLDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4NzgsNiArMTk0Miw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODg4LDYgKzE5NTMsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTg5OCw2ICsxOTY0LDcgQEAKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTA4LDYgKzE5NzUsNyBAQAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5MTcsNiArMTk4NSw3IEBACiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5MjYsNiArMTk5NSw3IEBACiAJLm5hbWUJCT0gInVhcnQxX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5MzUsNiArMjAwNSw3IEBACiAJLm5hbWUJCT0gInVhcnQyX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5NDQsNiArMjAxNSw3IEBACiAJLm5hbWUJCT0gInVhcnQyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5NTMsNiArMjAyNSw3IEBACiAJLm5hbWUJCT0gInVhcnQzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5NjIsNiArMjAzNSw3IEBACiAJLm5hbWUJCT0gInVhcnQzX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5NzEsNiArMjA0NSw3IEBACiAJLm5hbWUJCT0gImdwaW9zX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTk4MCw2ICsyMDU1LDcgQEAKIAkubmFtZQkJPSAiZ3Bpb3NfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTg5LDYgKzIwNjUsNyBAQAogCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTk4LDYgKzIwNzUsNyBAQAogCS5uYW1lCQk9ICJtcHVfd2R0X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDA2LDMxICsyMDg0LDQwIEBACiBzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CiAJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OworCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKIAkubmFtZQkJPSAid2R0MV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0gewogCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fT01BUENUUkxfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIGljcl9pY2sgPSB7CiAJLm5hbWUJCT0gImljcl9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA0MCwxNSArMjEyNywyMiBAQAogCS5uYW1lCQk9ICJjYW1faWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKKy8qCisgKiBjYW1fZmNrIGNvbnRyb2xzIGJvdGggQ0FNX01DTEsgYW5kIENBTV9GQ0xLLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlCisgKiBzcGxpdCBpbnRvIHR3byBzZXBhcmF0ZSBjbG9ja3MsIHNpbmNlIHRoZSBwYXJlbnQgY2xvY2tzIGFyZSBkaWZmZXJlbnQKKyAqIGFuZCB0aGUgY2xvY2tkb21haW5zIGFyZSBhbHNvIGRpZmZlcmVudC4KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ZjayA9IHsKIAkubmFtZQkJPSAiY2FtX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDU4LDYgKzIxNTIsNyBAQAogCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIwNjcsNiArMjE2Miw3IEBACiAJLm5hbWUJCT0gIndkdDRfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDc2LDYgKzIxNzIsNyBAQAogCS5uYW1lCQk9ICJ3ZHQ0X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA4NSw2ICsyMTgyLDcgQEAKIAkubmFtZQkJPSAid2R0M19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDk0LDYgKzIxOTIsNyBAQAogCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxMDMsNiArMjIwMiw3IEBACiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxMTIsNiArMjIxMiw3IEBACiAJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxMjEsNiArMjIyMiw3IEBACiAJLm5hbWUJCT0gIm1tY19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxMzAsNiArMjIzMiw3IEBACiAJLm5hbWUJCT0gIm1tY19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxMzksNiArMjI0Miw3IEBACiAJLm5hbWUJCT0gImZhY19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE0OCw2ICsyMjUyLDcgQEAKIAkubmFtZQkJPSAiZmFjX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTU3LDYgKzIyNjIsNyBAQAogCS5uYW1lCQk9ICJlYWNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTY2LDYgKzIyNzIsNyBAQAogCS5uYW1lCQk9ICJlYWNfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTc1LDYgKzIyODIsNyBAQAogCS5uYW1lCQk9ICJoZHFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxODQsNiArMjI5Miw3IEBACiAJLm5hbWUJCT0gImhkcV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE5NCw2ICsyMzAzLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjA0LDYgKzIzMTQsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjE0LDYgKzIzMjUsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIyMjQsNiArMjMzNiw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjIzNCw2ICsyMzQ3LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjI0NCw2ICsyMzU4LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjUyLDcgKzIzNjcsOSBAQAogc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7CiAJLm5hbWUJCT0gImdwbWNfZmNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjYwLDYgKzIzNzcsNyBAQAogCS5uYW1lCQk9ICJzZG1hX2ZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI2Nyw2ICsyMzg1LDcgQEAKIAkubmFtZQkJPSAic2RtYV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjc0LDYgKzIzOTMsNyBAQAogCS5uYW1lCQk9ICJ2bHlucV9pY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzA4LDYgKzI0MjgsNyBAQAogCS5uYW1lCQk9ICJ2bHlucV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IERFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0yMzIzLDYgKzI0NDQsNyBAQAogCS5uYW1lCQk9ICJzZHJjX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fU0RSQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjMzMiw2ICsyNDU0LDcgQEAKIAkubmFtZQkJPSAiZGVzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fREVTX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzQxLDYgKzI0NjQsNyBAQAogCS5uYW1lCQk9ICJzaGFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TSEFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzNTAsNiArMjQ3NCw3IEBACiAJLm5hbWUJCT0gInJuZ19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM1OSw2ICsyNDg0LDcgQEAKIAkubmFtZQkJPSAiYWVzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQUVTX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzY4LDYgKzI0OTQsNyBAQAogCS5uYW1lCQk9ICJwa2FfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9QS0FfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzNzcsNiArMjUwNCw3IEBACiAJLm5hbWUJCT0gInVzYl9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM4Niw2ICsyNTE0LDcgQEAKIAkubmFtZQkJPSAidXNiaHNfaWNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM5Niw2ICsyNTI1LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDA2LDYgKzI1MzYsNyBAQAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0MTYsNiArMjU0Nyw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQzNSw2ICsyNTY3LDcgQEAKIAkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0NDQsNiArMjU3Nyw3IEBACiAJLm5hbWUJCT0gImdwaW81X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDUzLDYgKzI1ODcsNyBAQAogCS5uYW1lCQk9ICJtZG1faW50Y19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQ2Myw2ICsyNTk4LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0NzMsNiArMjYwOSw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNTUxLDcgKzI2ODgsNiBAQAogCSZ1c2JfbDRfaWNrLAogCS8qIEw0IGRvbWFpbiBjbG9ja3MgKi8KIAkmbDRfY2ssCQkJLyogdXNlZCBhcyBib3RoIGNvcmVfbDQgYW5kIHd1X2w0ICovCi0JJnNzaV9sNF9pY2ssCiAJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCiAJJnZpcnRfcHJjbV9zZXQsCiAJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZTViNDc1Zi4uMDg0ZTExMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC02MiwxMSArNjIsMTQgQEAKIHN0YXRpYyB2b2lkIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKHN0cnVjdCBjbGsgKmNsaywgdTggY2xrZW5fYml0cykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKIAogCWRkID0gY2xrLT5kcGxsX2RhdGE7CiAKLQljbV9ybXdfcmVnX2JpdHMoZGQtPmVuYWJsZV9tYXNrLCBjbGtlbl9iaXRzIDw8IF9fZmZzKGRkLT5lbmFibGVfbWFzayksCi0JCQlkZC0+Y29udHJvbF9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOworCXYgJj0gfmRkLT5lbmFibGVfbWFzazsKKwl2IHw9IGNsa2VuX2JpdHMgPDwgX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKIH0KIAogLyogX29tYXAzX3dhaXRfZHBsbF9zdGF0dXM6IHdhaXQgZm9yIGEgRFBMTCB0byBlbnRlciBhIHNwZWNpZmljIHN0YXRlICovCkBAIC04Miw3ICs4NSw3IEBACiAJc3RhdGUgPDw9IGRkLT5pZGxlc3RfYml0OwogCWlkbGVzdF9tYXNrID0gMSA8PCBkZC0+aWRsZXN0X2JpdDsKIAotCXdoaWxlICgoKGNtX3JlYWRfcmVnKGRkLT5pZGxlc3RfcmVnKSAmIGlkbGVzdF9tYXNrKSAhPSBzdGF0ZSkgJiYKKwl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBpZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCiAJICAgICAgIGkgPCBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CiAJCWkrKzsKIAkJdWRlbGF5KDEpOwpAQCAtMjg1LDcgKzI4OCw3IEBACiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0JdiA9IGNtX3JlYWRfcmVnKGRkLT5hdXRvaWRsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKIAl2ICY9IGRkLT5hdXRvaWRsZV9tYXNrOwogCXYgPj49IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKIApAQCAtMzA0LDYgKzMwNyw3IEBACiBzdGF0aWMgdm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQogewogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUzMiB2OwogCiAJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQogCQlyZXR1cm47CkBAIC0zMTUsOSArMzE5LDEwIEBACiAJICogYnkgd3JpdGluZyAweDUgaW5zdGVhZCBvZiAweDEuICBBZGQgc29tZSBtZWNoYW5pc20gdG8KIAkgKiBvcHRpb25hbGx5IGVudGVyIHRoaXMgbW9kZS4KIAkgKi8KLQljbV9ybXdfcmVnX2JpdHMoZGQtPmF1dG9pZGxlX21hc2ssCi0JCQlEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKSwKLQkJCWRkLT5hdXRvaWRsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKKwl2IHw9IERQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NUT1AgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKIH0KIAogLyoqCkBAIC0zMjksMTUgKzMzNCwxNyBAQAogc3RhdGljIHZvaWQgb21hcDNfZHBsbF9kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQogewogCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUzMiB2OwogCiAJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQogCQlyZXR1cm47CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0JY21fcm13X3JlZ19iaXRzKGRkLT5hdXRvaWRsZV9tYXNrLAotCQkJRFBMTF9BVVRPSURMRV9ESVNBQkxFIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKSwKLQkJCWRkLT5hdXRvaWRsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ICY9IH5kZC0+YXV0b2lkbGVfbWFzazsKKwl2IHw9IERQTExfQVVUT0lETEVfRElTQUJMRSA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5hdXRvaWRsZV9yZWcpOwogfQogCiAvKiBDbG9jayBjb250cm9sIGZvciBEUExMIG91dHB1dHMgKi8KQEAgLTQ4Miw4ICs0ODksMTAgQEAKIAlmb3IgKGNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOwogCSAgICAgY2xrcCA8IG9uY2hpcF8zNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF8zNHh4X2Nsa3MpOwogCSAgICAgY2xrcCsrKSB7Ci0JCWlmICgoKmNsa3ApLT5mbGFncyAmIGNwdV9jbGtmbGcpCisJCWlmICgoKmNsa3ApLT5mbGFncyAmIGNwdV9jbGtmbGcpIHsKIAkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbSgqY2xrcCk7CisJCX0KIAl9CiAKIAkvKiBSRVZJU0lUOiBOb3QgeWV0IHJlYWR5IGZvciBPTUFQMyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKaW5kZXggZWM2NjQ0NS4uYzM4YThhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCkBAIC00NzgsNyArNDc4LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDNfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtNDk1LDcgKzQ5NSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsM19tMngyX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwzX3gyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTU0MSw3ICs1NDEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZW11X2NvcmVfYWx3b25fY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwzX20zeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtNjMzLDcgKzYzMyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X20yeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtNjU5LDcgKzY1OSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbV85Nm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNF9tMngyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTcwMSw3ICs3MDEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdmlydF9vbWFwXzU0bV9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X20zeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtOTExLDcgKzkxMSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzEyMG1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw1X20yX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTkxOSwxMyArOTE5LDEzIEBACiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzEyMG1fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzEyMG1fZmNrIiwKIAkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuaW5pdCAgICAgICAgICAgPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnICAgICA9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKLQkuY2xrc2VsX21hc2sgICAgPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAotCS5jbGtzZWwgICAgICAgICA9IG9tYXBfMTIwbV9mY2tfY2xrc2VsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXBfMTIwbV9mY2tfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMgICAgICAgICA9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCkBAIC0xMDM0LDcgKzEwMzQsNyBAQAogICogY2FsbGVkICdkcGxsMV9mY2snCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDFfZmNrLCAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDFfZmNrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDFfeDJtMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC0xMDQ4LDYgKzEwNDgsNyBAQAogCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMDc1LDYgKzEwNzYsOCBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCisvKiBYWFggV2hhdCBhYm91dCBuZW9uX2Nsa2RtID8gKi8KKwogLyoKICAqIFJFVklTSVQ6IFRoaXMgY2xvY2sgaXMgbmV2ZXIgc3BlY2lmaWNhbGx5IGRlZmluZWQgaW4gdGhlIDM0MzAgVFJNLAogICogYWx0aG91Z2ggaXQgaXMgcmVmZXJlbmNlZCAtIHNvIHRoaXMgaXMgYSBndWVzcwpAQCAtMTEwNyw3ICsxMTEwLDcgQEAKICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBpdmEyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsMl9mY2ssICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDJfZmNrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwyX20yX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTExMjMsNiArMTEyNiw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKIAkuY2xrc2VsCQk9IGl2YTJfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJpdmEyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTEzNyw2ICsxMTQxLDcgQEAKIAkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTExNTQsNiArMTE1OSw3IEBACiAJLmNsa3NlbAkJPSBkaXYyX2wzX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCiB9OwpAQCAtMTE4Myw0MyArMTE4OSw1NyBAQAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2ZjayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2wzX2ZjayIsCisvKiBWaXJ0dWFsIHBhcmVudCBjbG9jayBmb3IgZ2Z4X2wzX2ljayBhbmQgZ2Z4X2wzX2ZjayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2NrID0geworCS5uYW1lCQk9ICJnZnhfbDNfY2siLAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7CisJLm5hbWUJCT0gImdmeF9sM19mY2siLAorCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCiAJLmNsa3NlbAkJPSBnZnhfbDNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19pY2siLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfY2cxX2NrID0gewogCS5uYW1lCQk9ICJnZnhfY2cxX2NrIiwKIAkucGFyZW50CQk9ICZnZnhfbDNfZmNrLCAvKiBSRVZJU0lUOiBjb3JyZWN0PyAqLworCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMl9jayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2NnMl9jayIsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEyNTIsMTUgKzEyNzIsMTggQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX01BU0ssCiAJLmNsa3NlbAkJPSBzZ3hfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZ3hfaWNrID0gewogCS5uYW1lCQk9ICJzZ3hfaWNrIiwKIAkucGFyZW50CQk9ICZsM19pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9TR1hfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInNneF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEyNjksOSArMTI5MiwxMSBAQAogc3RhdGljIHN0cnVjdCBjbGsgZDJkXzI2bV9mY2sgPSB7CiAJLm5hbWUJCT0gImQyZF8yNm1fZmNrIiwKIAkucGFyZW50CQk9ICZzeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0QyRF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTI5MSw2ICsxMzE2LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTBfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMzA0LDYgKzEzMzAsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTEzNDEsNiArMTM2OCw3IEBACiAJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzUxLDYgKzEzNzksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzYxLDYgKzEzOTAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzcwLDYgKzE0MDAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM4MCw2ICsxNDExLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM5MCwxNiArMTQyMiwxOCBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLmlkIAkJPSAyLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTQxMCw2ICsxNDQ0LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTQ0Myw2ICsxNDc4LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDVfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTQ1Niw2ICsxNDkyLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTQ2Niw2ICsxNTAzLDcgQEAKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE1NDMsNiArMTU4MSw3IEBACiAJLnBhcmVudAkJPSAmb21hcF8xMm1fZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNTgxLDYgKzE2MjAsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKIAkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTU5NiwxMSArMTYzNiwxNyBAQAogCiAvKiBDT1JFX0wzX0lDSyBiYXNlZCBjbG9ja3MgKi8KIAorLyoKKyAqIFhYWCBtdXN0IGFkZCBjbGtfZW5hYmxlL2Nsa19kaXNhYmxlIGZvciB0aGVzZSBpZiBzdGFuZGFyZCBjb2RlIHdvbid0CisgKiBoYW5kbGUgaXQKKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfaWNrIiwKIAkucGFyZW50CQk9ICZsM19pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjEwLDYgKzE2NTYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYxOSw2ICsxNjY2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjI3LDYgKzE2NzUsNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSyB8CiAJCQkJRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2NTQsOCArMTcwMywxMCBAQAogc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfbDRfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjY1LDYgKzE3MTYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2NzUsNiArMTcyNyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2ODUsNiArMTczOCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSUNSX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTY5NCw2ICsxNzQ4LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTcwMyw2ICsxNzU4LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TSEExMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3MTIsNiArMTc2OCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3MjIsNiArMTc3OSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3MzIsNiArMTc5MCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3NDEsNiArMTgwMCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzUwLDYgKzE4MTAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hEUV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3NjAsNiArMTgyMSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTc3MCw2ICsxODMyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzgwLDYgKzE4NDMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3OTAsNiArMTg1NCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTgwMCw2ICsxODY1LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTgxMCw2ICsxODc2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTgyMCw2ICsxODg3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTgyOSw2ICsxODk3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MzgsNiArMTkwNyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODQ3LDYgKzE5MTcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg1Niw2ICsxOTI3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4NjYsNiArMTkzOCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg3Niw2ICsxOTQ5LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODg1LDYgKzE5NTksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4OTQsNiArMTk2OSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUFJTEJPWEVTX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTkxMyw2ICsxOTg5LDcgQEAKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5MjIsNiArMTk5OSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTk5Niw3ICsyMDc0LDcgQEAKIAogLyogRFNTICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDRfbTR4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC0yMDExLDMzICsyMDg5LDQwIEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAogCS5jbGtzZWwJCT0gZHNzMV9hbHdvbl9mY2tfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfdHZfZmNrID0gewogCS5uYW1lCQk9ICJkc3NfdHZfZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzU0bV9mY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7CiAJLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gImRzczJfYWx3b25fZmNrIiwKIAkucGFyZW50CQk9ICZzeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMDQ1LDE2ICsyMTMwLDE4IEBACiAJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KIAkubmFtZQkJPSAiZHNzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIENBTSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjYW1fbWNsa19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDRfbTV4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC0yMDY5LDI0ICsyMTU2LDE5IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2wzX2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2wzX2ljayIsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1fbDRfaWNrID0gewotCS5uYW1lCQk9ICJjYW1fbDRfaWNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAiY2FtX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMDk1LDQ1ICsyMTc3LDQ1IEBACiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzEyMG1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF80OG1fZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0XzQ4bV9mY2siLAogCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfbDNfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0X2wzX2ljayIsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfbDRfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0X2w0X2ljayIsCitzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X2ljayA9IHsKKwkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLworCS5uYW1lCQk9ICJ1c2Job3N0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X3Nhcl9mY2sgPSB7CiAJLm5hbWUJCT0gInVzYmhvc3Rfc2FyX2ZjayIsCiAJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBQTV9QV1NUQ1RSTCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIxNzUsNiArMjI1Nyw3IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKKy8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxX2ZjayIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTIxODQsMTMgKzIyNjcsMTYgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfMzJrX2ZjayA9IHsKIAkubmFtZQkJPSAid2t1cF8zMmtfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjAwLDYgKzIyODYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjA5LDYgKzIyOTYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyMTYsNiArMjMwNCw3IEBACiAJLm5hbWUJCT0gIndrdXBfbDRfaWNrIiwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyMjcsNiArMjMxNiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjIzNiw2ICsyMzI2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjQ1LDYgKzIzMzYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNTQsNiArMjM0Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNjMsMTUgKzIzNTYsMTggQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOXzMyS1NZTkNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCisvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyODEsNiArMjM3Nyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI5MSwxNiArMjM4OCwyMCBAQAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl80OG1fZmNrID0gewogCS5uYW1lCQk9ICJwZXJfNDhtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMzEwLDYgKzI0MTEsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjMyMiw2ICsyNDI0LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjMzNCw2ICsyNDM3LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjM0Niw2ICsyNDUwLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjM1OCw2ICsyNDYzLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjM3MCw2ICsyNDc2LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjM4Miw2ICsyNDg5LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUN19NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjM5NCw2ICsyNTAyLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjQwNiwxMiArMjUxNSwxNCBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ5X01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfMzJrX2Fsd29uX2ZjayA9IHsKIAkubmFtZQkJPSAicGVyXzMya19hbHdvbl9mY2siLAogCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjQyMiw2ICsyNTMzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0MzEsNiArMjU0Myw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDQwLDYgKzI1NTMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ0OSw2ICsyNTYzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0NTgsNiArMjU3Myw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDY3LDYgKzI1ODMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDc1LDYgKzI1OTIsNyBAQAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDg0LDYgKzI2MDIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ5Myw2ICsyNjEyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI1MDIsNiArMjYyMiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTExLDYgKzI2MzIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjUyMCw2ICsyNjQyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI1MjksNiArMjY1Miw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI1MzgsNiArMjY2Miw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTQ3LDYgKzI2NzIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ5X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTU2LDYgKzI2ODIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTY1LDYgKzI2OTIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTc0LDYgKzI3MDIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ2X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTgzLDYgKzI3MTIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTkyLDYgKzI3MjIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ0X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNjAxLDYgKzI3MzIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNjEwLDYgKzI3NDIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNjIwLDYgKzI3NTMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI2MzAsNiArMjc2NCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjY0MCwxMiArMjc3NSwxMyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYnNwXzIzNF9jbGtzZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSAmcGVyXzk2bV9mY2ssIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIApAQCAtMjY1OSw2ICsyNzk1LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDJfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjY3Miw2ICsyODA5LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjY4NSw2ICsyODIzLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDRfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjczMiw2ICsyODcxLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjc1NSw2ICsyODk1LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS19NQVNLLAogCS5jbGtzZWwJCT0gcGNsa19lbXVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3NzcsNiArMjkxOCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAogCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjc5Miw2ICsyOTM0LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfTUFTSywKIAkuY2xrc2VsCQk9IGF0Y2xrX2VtdV9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjgwMiw2ICsyOTQ1LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAogCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjgyNCw2ICsyOTY4LDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKIAkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0yODUzLDExICsyOTk4LDEzIEBACiAJLm5hbWUJCT0gInNyX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogU0VDVVJFXzMyS19GQ0sgY2xvY2tzICovCiAKKy8qIFhYWCBUaGlzIGNsb2NrIG5vIGxvbmdlciBleGlzdHMgaW4gMzQzMCBUUk0gcmV2IEYgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKIAkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKQEAgLTI5MzMsNiArMzA4MCw3IEBACiAJJmwzX2ljaywKIAkmbDRfaWNrLAogCSZybV9pY2ssCisJJmdmeF9sM19jaywKIAkmZ2Z4X2wzX2ZjaywKIAkmZ2Z4X2wzX2ljaywKIAkmZ2Z4X2NnMV9jaywKQEAgLTMwMTQsMTIgKzMxNjIsMTAgQEAKIAkmZHNzMl9hbHdvbl9mY2ssCiAJJmRzc19pY2ssCiAJJmNhbV9tY2xrLAotCSZjYW1fbDNfaWNrLAotCSZjYW1fbDRfaWNrLAorCSZjYW1faWNrLAogCSZ1c2Job3N0XzEyMG1fZmNrLAogCSZ1c2Job3N0XzQ4bV9mY2ssCi0JJnVzYmhvc3RfbDNfaWNrLAotCSZ1c2Job3N0X2w0X2ljaywKKwkmdXNiaG9zdF9pY2ssCiAJJnVzYmhvc3Rfc2FyX2ZjaywKIAkmdXNpbV9mY2ssCiAJJmdwdDFfZmNrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjM2NlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBPTUFQMi8zIGNsb2NrZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleSBhbmQgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOCisjICBkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKworI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorCisjaW5jbHVkZSA8bWFjaC9wb3dlcmRvbWFpbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KKworLyogY2xrZG1fbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3QgY2xvY2tkb21haW5zICovCitzdGF0aWMgTElTVF9IRUFEKGNsa2RtX2xpc3QpOworCisvKiBjbGtkbV9tdXRleCBwcm90ZWN0cyBjbGtkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAqLworc3RhdGljIERFRklORV9NVVRFWChjbGtkbV9tdXRleCk7CisKKy8qIGFycmF5IG9mIHBvd2VyZG9tYWluIGRlcHMgdG8gYmUgYWRkZWQvcmVtb3ZlZCB3aGVuIGNsa2RtIGluIGh3c3VwIG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcHM7CisKKworLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KKworLyoKKyAqIF9hdXRvZGVwX2xvb2t1cCAtIHJlc29sdmUgYXV0b2RlcCBwd3JkbSBuYW1lcyB0byBwd3JkbSBwb2ludGVyczsgc3RvcmUKKyAqIEBhdXRvZGVwOiBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqIHRvIHJlc29sdmUKKyAqCisgKiBSZXNvbHZlIGF1dG9kZXAgcG93ZXJkb21haW4gbmFtZXMgdG8gcG93ZXJkb21haW4gcG9pbnRlcnMgdmlhCisgKiBwd3JkbV9sb29rdXAoKSBhbmQgc3RvcmUgdGhlIHBvaW50ZXJzIGluIHRoZSBhdXRvZGVwIHN0cnVjdHVyZS4gIEFuCisgKiAiYXV0b2RlcCIgaXMgYSBwb3dlcmRvbWFpbiBzbGVlcC93YWtldXAgZGVwZW5kZW5jeSB0aGF0IGlzCisgKiBhdXRvbWF0aWNhbGx5IGFkZGVkIGFuZCByZW1vdmVkIHdoZW5ldmVyIGNsb2NrcyBpbiB0aGUgYXNzb2NpYXRlZAorICogY2xvY2tkb21haW4gYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHJlc3BlY3RpdmVseSkgd2hlbiB0aGUKKyAqIGNsb2NrZG9tYWluIGlzIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4JTWVhbnQgdG8gYmUgY2FsbGVkCisgKiBvbmNlIGF0IGNsb2NrZG9tYWluIGxheWVyIGluaXRpYWxpemF0aW9uLCBzaW5jZSB0aGVzZSBzaG91bGQgcmVtYWluCisgKiBmaXhlZCBmb3IgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2F1dG9kZXBfbG9va3VwKHN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CisKKwlpZiAoIWF1dG9kZXApCisJCXJldHVybjsKKworCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCisJCXJldHVybjsKKworCXB3cmRtID0gcHdyZG1fbG9va3VwKGF1dG9kZXAtPnB3cmRtX25hbWUpOworCWlmICghcHdyZG0pIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBfYXV0b2RlcF9sb29rdXA6IHBvd2VyZG9tYWluICVzICIKKwkJCSAiZG9lcyBub3QgZXhpc3RcbiIsIGF1dG9kZXAtPnB3cmRtX25hbWUpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCWF1dG9kZXAtPnB3cmRtID0gcHdyZG07CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfY2xrZG1fYWRkX2F1dG9kZXBzIC0gYWRkIGF1dG8gc2xlZXBkZXBzL3drZGVwcyB0byBjbGtkbSB1cG9uIGNsb2NrIGVuYWJsZQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIEFkZCB0aGUgImF1dG9kZXAiIHNsZWVwICYgd2FrZXVwIGRlcGVuZGVuY2llcyB0byBjbG9ja2RvbWFpbiAnY2xrZG0nCisgKiBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuICBNZWFudCB0byBiZSBjYWxsZWQgZnJvbSBjbG9jayBmcmFtZXdvcmsKKyAqIHdoZW4gYSBjbG9jayBpbnNpZGUgY2xvY2tkb21haW4gJ2Nsa2RtJyBpcyBlbmFibGVkLglObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9jbGtkbV9hZGRfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKKworCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbV9uYW1lOyBhdXRvZGVwKyspIHsKKwkJaWYgKCFhdXRvZGVwLT5wd3JkbSkKKwkJCWNvbnRpbnVlOworCisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogYWRkaW5nICVzIHNsZWVwZGVwL3drZGVwIGZvciAiCisJCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lLAorCQkJIGNsa2RtLT5wd3JkbS0+bmFtZSk7CisKKwkJcHdyZG1fYWRkX3NsZWVwZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCQlwd3JkbV9hZGRfd2tkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7CisJfQorfQorCisvKgorICogX2Nsa2RtX2FkZF9hdXRvZGVwcyAtIHJlbW92ZSBhdXRvIHNsZWVwZGVwcy93a2RlcHMgZnJvbSBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIFJlbW92ZSB0aGUgImF1dG9kZXAiIHNsZWVwICYgd2FrZXVwIGRlcGVuZGVuY2llcyBmcm9tIGNsb2NrZG9tYWluICdjbGtkbScKKyAqIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4gIE1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGNsb2NrIGZyYW1ld29yaworICogd2hlbiBhIGNsb2NrIGluc2lkZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGlzIGRpc2FibGVkLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBfY2xrZG1fZGVsX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXA7CisKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKSB7CisJCWlmICghYXV0b2RlcC0+cHdyZG0pCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IHJlbW92aW5nICVzIHNsZWVwZGVwL3drZGVwIGZvciAiCisJCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lLAorCQkJIGNsa2RtLT5wd3JkbS0+bmFtZSk7CisKKwkJcHdyZG1fZGVsX3NsZWVwZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCQlwd3JkbV9kZWxfd2tkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7CisJfQorfQorCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCAqdGVtcF9jbGtkbTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGtkbSA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHRlbXBfY2xrZG0tPm5hbWUpKSB7CisJCQljbGtkbSA9IHRlbXBfY2xrZG07CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBjbGtkbTsKK30KKworCisvKiBQdWJsaWMgZnVuY3Rpb25zICovCisKKy8qKgorICogY2xrZG1faW5pdCAtIHNldCB1cCB0aGUgY2xvY2tkb21haW4gbGF5ZXIKKyAqIEBjbGtkbXM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zIHRvIHJlZ2lzdGVyCisgKiBAaW5pdF9hdXRvZGVwczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvZGVwcyB0byByZWdpc3RlcgorICoKKyAqIFNldCB1cCBpbnRlcm5hbCBzdGF0ZS4gIElmIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMKKyAqIHdhcyBzdXBwbGllZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIGNsb2NrZG9tYWlucywgcmVnaXN0ZXIgYWxsCisgKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uCVNpbWlsYXJseSwgaWYgYQorICogcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbi1wb3dlcmRvbWFpbiBhdXRvZGVwZW5kZW5jaWVzIHdhcworICogcHJvdmlkZWQsIHJlZ2lzdGVyIHRob3NlLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLAorCQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqaW5pdF9hdXRvZGVwcykKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKipjID0gTlVMTDsKKwlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCA9IE5VTEw7CisKKwlpZiAoY2xrZG1zKQorCQlmb3IgKGMgPSBjbGtkbXM7ICpjOyBjKyspCisJCQljbGtkbV9yZWdpc3RlcigqYyk7CisKKwlhdXRvZGVwcyA9IGluaXRfYXV0b2RlcHM7CisJaWYgKGF1dG9kZXBzKQorCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKQorCQkJX2F1dG9kZXBfbG9va3VwKGF1dG9kZXApOworfQorCisvKioKKyAqIGNsa2RtX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBjbG9ja2RvbWFpbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byByZWdpc3RlcgorICoKKyAqIEFkZHMgYSBjbG9ja2RvbWFpbiB0byB0aGUgaW50ZXJuYWwgY2xvY2tkb21haW4gbGlzdC4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiBnaXZlbiBhIG51bGwgcG9pbnRlciwgLUVFWElTVCBpZiBhIGNsb2NrZG9tYWluIGlzCisgKiBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdGhlIHByb3ZpZGVkIG5hbWUsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgY2xrZG1fcmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJaWYgKCFjbGtkbSB8fCAhY2xrZG0tPm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFvbWFwX2NoaXBfaXMoY2xrZG0tPm9tYXBfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcHdyZG0gPSBwd3JkbV9sb29rdXAoY2xrZG0tPnB3cmRtX25hbWUpOworCWlmICghcHdyZG0pIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBjbGtkbV9yZWdpc3RlciAlczogcG93ZXJkb21haW4gJXMgIgorCQkJICJkb2VzIG5vdCBleGlzdFxuIiwgY2xrZG0tPm5hbWUsIGNsa2RtLT5wd3JkbV9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNsa2RtLT5wd3JkbSA9IHB3cmRtOworCisJbXV0ZXhfbG9jaygmY2xrZG1fbXV0ZXgpOworCS8qIFZlcmlmeSB0aGF0IHRoZSBjbG9ja2RvbWFpbiBpcyBub3QgYWxyZWFkeSByZWdpc3RlcmVkICovCisJaWYgKF9jbGtkbV9sb29rdXAoY2xrZG0tPm5hbWUpKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gY3JfdW5sb2NrOworCX07CisKKwlsaXN0X2FkZCgmY2xrZG0tPm5vZGUsICZjbGtkbV9saXN0KTsKKworCXB3cmRtX2FkZF9jbGtkbShwd3JkbSwgY2xrZG0pOworCisJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBjbGtkbS0+bmFtZSk7CisJcmV0ID0gMDsKKworY3JfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2xrZG1fbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBjbGtkbV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIGNsb2NrZG9tYWluCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIHVucmVnaXN0ZXIKKyAqCisgKiBSZW1vdmVzIGEgY2xvY2tkb21haW4gZnJvbSB0aGUgaW50ZXJuYWwgY2xvY2tkb21haW4gbGlzdC4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgY2xrZG0gYXJndW1lbnQgaXMgTlVMTC4KKyAqLworaW50IGNsa2RtX3VucmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXB3cmRtX2RlbF9jbGtkbShjbGtkbS0+cHdyZG0sIGNsa2RtKTsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwlsaXN0X2RlbCgmY2xrZG0tPm5vZGUpOworCW11dGV4X3VubG9jaygmY2xrZG1fbXV0ZXgpOworCisJcHJfZGVidWcoImNsb2NrZG9tYWluOiB1bnJlZ2lzdGVyZWQgJXNcbiIsIGNsa2RtLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2xvb2t1cCAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBieSBuYW1lLCByZXR1cm4gYSBwb2ludGVyCisgKiBAbmFtZTogbmFtZSBvZiBjbG9ja2RvbWFpbgorICoKKyAqIEZpbmQgYSByZWdpc3RlcmVkIGNsb2NrZG9tYWluIGJ5IGl0cyBuYW1lLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgKiBzdHJ1Y3QgY2xvY2tkb21haW4gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sICp0ZW1wX2Nsa2RtOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWNsa2RtID0gTlVMTDsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHRlbXBfY2xrZG0tPm5hbWUpKSB7CisJCQljbGtkbSA9IHRlbXBfY2xrZG07CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXJldHVybiBjbGtkbTsKK30KKworLyoqCisgKiBjbGtkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKKyAqCisgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluLgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiB0aGUgY2xrZG1fbXV0ZXggaGVsZCwgc28gbm8gY2xvY2tkb21haW4gc3RydWN0dXJlIG1hbmlwdWxhdGlvbgorICogZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoIGhhcmR3YXJlCisgKiBjbG9ja2RvbWFpbiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuCisgKiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yCisgKiBhbnl0aGluZyBlbHNlIHRvIGluZGljYXRlIGZhaWx1cmU7IG9yIC1FSU5WQUwgaWYgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKKyAqIGlzIG51bGwuCisgKi8KK2ludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2xrZG1fbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CisJCXJldCA9ICgqZm4pKGNsa2RtKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBjbGtkbV9nZXRfcHdyZG0gLSByZXR1cm4gYSBwdHIgdG8gdGhlIHB3cmRtIHRoYXQgdGhpcyBjbGtkbSByZXNpZGVzIGluCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHBvd2VyZG9tYWluIHRoYXQgdGhlIHNwZWNpZmllZCBjbG9ja2RvbWFpbgorICogJ2Nsa2RtJyBleGlzdHMgaW4sIG9yIHJldHVybnMgTlVMTCBpZiBjbGtkbSBhcmd1bWVudCBpcyBOVUxMLgorICovCitzdHJ1Y3QgcG93ZXJkb21haW4gKmNsa2RtX2dldF9wd3JkbShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCWlmICghY2xrZG0pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNsa2RtLT5wd3JkbTsKK30KKworCisvKiBIYXJkd2FyZSBjbG9ja2RvbWFpbiBjb250cm9sICovCisKKy8qKgorICogb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQgLSByZWFkIHRoZSBjbGtkbSdzIGN1cnJlbnQgc3RhdGUgdHJhbnNpdGlvbiBtb2RlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgYSBjbG9ja2RvbWFpbgorICoKKyAqIFJldHVybiB0aGUgY2xvY2tkb21haW4ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZSBmcm9tIHRoZQorICogY29ycmVzcG9uZGluZyBkb21haW4gQ01fQ0xLU1RDVFJMIHJlZ2lzdGVyLglSZXR1cm5zIC1FSU5WQUwgaWYgY2xrCisgKiBpcyBOVUxMIG9yIHRoZSBjdXJyZW50IG1vZGUgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdTMyIHY7CisKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXYgPSBjbV9yZWFkX21vZF9yZWcoY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJdiAmPSBjbGtkbS0+Y2xrdHJjdHJsX21hc2s7CisJdiA+Pj0gX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKworCXJldHVybiB2OworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX3NsZWVwIC0gZm9yY2UgY2xvY2tkb21haW4gc2xlZXAgdHJhbnNpdGlvbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIEluc3RydWN0IHRoZSBDTSB0byBmb3JjZSBhIHNsZWVwIHRyYW5zaXRpb24gb24gdGhlIHNwZWNpZmllZAorICogY2xvY2tkb21haW4gJ2Nsa2RtJy4gIFJldHVybnMgLUVJTlZBTCBpZiBjbGsgaXMgTlVMTCBvciBpZgorICogY2xvY2tkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBzb2Z0d2FyZS1pbml0aWF0ZWQgc2xlZXA7IDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRk9SQ0VfU0xFRVApKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogJXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nICIKKwkJCSAic2xlZXAgdmlhIHNvZnR3YXJlXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZm9yY2luZyBzbGVlcCBvbiAlc1xuIiwgY2xrZG0tPm5hbWUpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisKKwkJY21fc2V0X21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFLAorCQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCisJCXUzMiB2ID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCA8PAorCQkJIF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaykpOworCisJCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLCB2LAorCQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKworCX0gZWxzZSB7CisJCUJVRygpOworCX07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwMl9jbGtkbV93YWtldXAgLSBmb3JjZSBjbG9ja2RvbWFpbiB3YWtldXAgdHJhbnNpdGlvbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIEluc3RydWN0IHRoZSBDTSB0byBmb3JjZSBhIHdha2V1cCB0cmFuc2l0aW9uIG9uIHRoZSBzcGVjaWZpZWQKKyAqIGNsb2NrZG9tYWluICdjbGtkbScuICBSZXR1cm5zIC1FSU5WQUwgaWYgY2xrZG0gaXMgTlVMTCBvciBpZiB0aGUKKyAqIGNsb2NrZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29udHJvbGxlZCB3YWtldXA7IDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IG9tYXAyX2Nsa2RtX3dha2V1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCWlmICghY2xrZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgIgorCQkJICJ3YWtldXAgdmlhIHNvZnR3YXJlXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZm9yY2luZyB3YWtldXAgb24gJXNcbiIsIGNsa2RtLT5uYW1lKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCisJCWNtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFLAorCQkJCSAgICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisKKwkJdTMyIHYgPSAoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCA8PAorCQkJIF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaykpOworCisJCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLCB2LAorCQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKworCX0gZWxzZSB7CisJCUJVRygpOworCX07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwMl9jbGtkbV9hbGxvd19pZGxlIC0gZW5hYmxlIGh3c3VwIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogQWxsb3cgdGhlIGhhcmR3YXJlIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRoZSBjbG9ja2RvbWFpbiBpbnRvCisgKiBhY3RpdmUgb3IgaWRsZSBzdGF0ZXMsIGFzIG5lZWRlZCBieSBkb3duc3RyZWFtIGNsb2Nrcy4gIElmIHRoZQorICogY2xvY2tkb21haW4gaGFzIGFueSBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jaworICogZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcCBhdXRvZGVwZW5kZW5jaWVzIGFyZSBhZGRlZDsgdGhpcyBpcyBzbworICogZGV2aWNlIGRyaXZlcnMgY2FuIHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBkZXZpY2UuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXUzMiB2OworCisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuOworCisJaWYgKCEoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPKSkgeworCQlwcl9kZWJ1ZygiY2xvY2s6IGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGNhbm5vdCBiZSBlbmFibGVkICIKKwkJCSAib24gY2xvY2tkb21haW4gJXNcbiIsIGNsa2RtLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZW5hYmxpbmcgYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgZm9yICVzXG4iLAorCQkgY2xrZG0tPm5hbWUpOworCisJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKKwkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJZWxzZQorCQlCVUcoKTsKKworCisJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCisJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAorCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgIENNX0NMS1NUQ1RSTCk7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fZGVueV9pZGxlIC0gZGlzYWJsZSBod3N1cCBpZGxlIHRyYW5zaXRpb25zIGZvciBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIFByZXZlbnQgdGhlIGhhcmR3YXJlIGZyb20gYXV0b21hdGljYWxseSBzd2l0Y2hpbmcgdGhlIGNsb2NrZG9tYWluCisgKiBpbnRvIGluYWN0aXZlIG9yIGlkbGUgc3RhdGVzLiAgSWYgdGhlIGNsb2NrZG9tYWluIGhhcyBkb3duc3RyZWFtCisgKiBjbG9ja3MgZW5hYmxlZCBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcAorICogYXV0b2RlcGVuZGVuY2llcyBhcmUgcmVtb3ZlZC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwl1MzIgdjsKKworCWlmICghY2xrZG0pCisJCXJldHVybjsKKworCWlmICghKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9ESVNBQkxFX0FVVE8pKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgY2Fubm90IGJlICIKKwkJCSAiZGlzYWJsZWQgb24gJXNcbiIsIGNsa2RtLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKKwkJIGNsa2RtLT5uYW1lKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCWVsc2UKKwkJQlVHKCk7CisKKwljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKKwkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCisJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKK30KKworCisvKiBDbG9ja2RvbWFpbi10by1jbG9jayBmcmFtZXdvcmsgaW50ZXJmYWNlIGNvZGUgKi8KKworLyoqCisgKiBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlIC0gYWRkIGFuIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jayB0byB0aGlzIGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jaworICoKKyAqIEluY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiAnY2xrZG0nIGFuZCBlbnN1cmUgdGhhdAorICogaXQgaXMgYXdha2UuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgY2xrX2VuYWJsZSgpIGNvZGUuICBJZiB0aGUKKyAqIGNsb2NrZG9tYWluIGlzIGluIHNvZnR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBmb3JjZSB0aGUKKyAqIGNsb2NrZG9tYWluIHRvIHdha2UuICBJZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZAorICogaWRsZSBtb2RlLCBhZGQgY2xrZG0tcHdyZG0gYXV0b2RlcGVuZGVuY2llcywgdG8gZW5zdXJlIHRoYXQgZGV2aWNlcworICogaW4gdGhlIGNsb2NrZG9tYWluIGNhbiBiZSByZWFkIGZyb20vd3JpdHRlbiB0byBieSBvbi1jaGlwIHByb2Nlc3NvcnMuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgcGFzc2VkIG51bGwgcG9pbnRlcnM7IHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IKKyAqIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBod3N1cCBpZGxlIG1vZGUuCisgKi8KK2ludCBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgdjsKKworCS8qCisJICogWFhYIFJld3JpdGUgdGhpcyBjb2RlIHRvIG1haW50YWluIGEgbGlzdCBvZiBlbmFibGVkCisJICogZG93bnN0cmVhbSBjbG9ja3MgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcz8KKwkgKi8KKworCWlmICghY2xrZG0gfHwgIWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNsa2RtLT51c2Vjb3VudCkgPiAxKQorCQlyZXR1cm4gMDsKKworCS8qIENsb2NrZG9tYWluIG5vdyBoYXMgb25lIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jayAqLworCisJcHJfZGVidWcoImNsb2NrZG9tYWluOiBjbGtkbSAlczogY2xrICVzIG5vdyBlbmFibGVkXG4iLCBjbGtkbS0+bmFtZSwKKwkJIGNsay0+bmFtZSk7CisKKwl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOworCisJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisJZWxzZQorCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUgLSByZW1vdmUgYW4gZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrIGZyb20gdGhpcyBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBkaXNhYmxlZCBkb3duc3RyZWFtIGNsb2NrCisgKgorICogRGVjcmVtZW50IHRoZSB1c2Vjb3VudCBvZiB0aGlzIGNsb2NrZG9tYWluICdjbGtkbScuIEludGVuZGVkIHRvIGJlCisgKiBjYWxsZWQgYnkgY2xrX2Rpc2FibGUoKSBjb2RlLiAgSWYgdGhlIHVzZWNvdW50IGdvZXMgdG8gMCwgcHV0IHRoZQorICogY2xvY2tkb21haW4gdG8gc2xlZXAgKHNvZnR3YXJlLXN1cGVydmlzZWQgbW9kZSkgb3IgcmVtb3ZlIHRoZQorICogY2xrZG0tcHdyZG0gYXV0b2RlcGVuZGVuY2llcyAoaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlKS4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgcGFzc2VkIG51bGwgcG9pbnRlcnM7IC1FUkFOR0UgaWYgdGhlIGNsa2RtIHVzZWNvdW50CisgKiB1bmRlcmZsb3dzIGFuZCBkZWJ1Z2dpbmcgaXMgZW5hYmxlZDsgb3IgcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvcgorICogaWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGh3c3VwIGlkbGUgbW9kZS4KKyAqLworaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgdjsKKworCS8qCisJICogWFhYIFJld3JpdGUgdGhpcyBjb2RlIHRvIG1haW50YWluIGEgbGlzdCBvZiBlbmFibGVkCisJICogZG93bnN0cmVhbSBjbG9ja3MgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcz8KKwkgKi8KKworCWlmICghY2xrZG0gfHwgIWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBERUJVRworCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA9PSAwKSB7CisJCVdBUk5fT04oMSk7IC8qIHVuZGVyZmxvdyAqLworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisjZW5kaWYKKworCWlmIChhdG9taWNfZGVjX3JldHVybigmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCXJldHVybiAwOworCisJLyogQWxsIGRvd25zdHJlYW0gY2xvY2tzIG9mIHRoaXMgY2xvY2tkb21haW4gYXJlIG5vdyBkaXNhYmxlZCAqLworCisJcHJfZGVidWcoImNsb2NrZG9tYWluOiBjbGtkbSAlczogY2xrICVzIG5vdyBkaXNhYmxlZFxuIiwgY2xrZG0tPm5hbWUsCisJCSBjbGstPm5hbWUpOworCisJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKKworCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8CisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOworCWVsc2UKKwkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogT01BUDIvMyBjbG9ja2RvbWFpbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAorCisjaW5jbHVkZSA8bWFjaC9jbG9ja2RvbWFpbi5oPgorCisvKgorICogT01BUDIvMy1jb21tb24gY2xvY2tkb21haW5zCisgKi8KKworLyogVGhpcyBpcyBhbiBpbXBsaWNpdCBjbG9ja2RvbWFpbiAtIGl0IGlzIG5ldmVyIGRlZmluZWQgYXMgc3VjaCBpbiBUUk0gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gd2t1cF9jbGtkbSA9IHsKKwkubmFtZQkJPSAid2t1cF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAid2t1cF9wd3JkbSIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qCisgKiAyNDIwLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTFfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiaXZhMV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZHNwX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCisjZW5kaWYgIC8qIENPTkZJR19BUkNIX09NQVAyNDIwICovCisKKworLyoKKyAqIDI0MzAtb25seSBjbG9ja2RvbWFpbnMKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAibXB1X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbWRtX2Nsa2RtID0geworCS5uYW1lCQk9ICJtZG1fY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm1kbV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAyNDMwICovCisKKworLyoKKyAqIDI0WFgtb25seSBjbG9ja2RvbWFpbnMKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzcF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZHNwX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImdmeF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1NfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCit9OworCisjZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworCisKKy8qCisgKiAzNHh4IGNsb2NrZG9tYWlucworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8zNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCB8IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX01QVV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbmVvbl9jbGtkbSA9IHsKKwkubmFtZQkJPSAibmVvbl9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAibmVvbl9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTkVPTl9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXZhMl9jbGtkbSA9IHsKKwkubmFtZQkJPSAiaXZhMl9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiaXZhMl9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfSVZBMl9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZ2Z4XzM0MzBlczFfY2xrZG0gPSB7CisJLm5hbWUJCT0gImdmeF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZ2Z4X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHNneF9jbGtkbSA9IHsKKwkubmFtZQkJPSAic2d4X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJzZ3hfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1NHWF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKK307CisKKy8qCisgKiBUaGUgZGllLXRvLWRpZSBjbG9ja2RvbWFpbiB3YXMgZG9jdW1lbnRlZCBpbiB0aGUgMzR4eCBFUzEgVFJNLCBidXQKKyAqIHRoZW4gdGhhdCBpbmZvcm1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIHRoZSAzNHh4IEVTMisgVFJNLiAgSXQgaXMKKyAqIHVuY2xlYXIgd2hldGhlciB0aGUgY29yZSBpcyBzdGlsbCB0aGVyZSwgYnV0IHRoZSBjbG9ja2RvbWFpbiBsb2dpYworICogaXMgdGhlcmUsIGFuZCBtdXN0IGJlIHByb2dyYW1tZWQgdG8gYW4gYXBwcm9wcmlhdGUgc3RhdGUgaWYgdGhlCisgKiBDT1JFIGNsb2NrZG9tYWluIGlzIHRvIGJlY29tZSBpbmFjdGl2ZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkMmRfY2xrZG0gPSB7CisJLm5hbWUJCT0gImQyZF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfRDJEX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzM0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0wzX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzM0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0w0X01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMzR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJkc3NfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY2FtX2Nsa2RtID0geworCS5uYW1lCQk9ICJjYW1fY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNhbV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfQ0FNX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB1c2Job3N0X2Nsa2RtID0geworCS5uYW1lCQk9ICJ1c2Job3N0X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJ1c2Job3N0X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBwZXJfY2xrZG0gPSB7CisJLm5hbWUJCT0gInBlcl9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAicGVyX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9QRVJfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGVtdV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZW11X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJlbXVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fRU5BQkxFX0FVVE8gfCBDTEtETV9DQU5fU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0VNVV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKyNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisKKy8qCisgKiBDbG9ja2RvbWFpbi1wb3dlcmRvbWFpbiBod3N1cCBkZXBlbmRlbmNpZXMgKDM0WFggb25seSkKKyAqLworCitzdGF0aWMgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgY2xrZG1fcHdyZG1fYXV0b2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfQorfTsKKworLyoKKyAqCisgKi8KKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xvY2tkb21haW5zX29tYXBbXSA9IHsKKworCSZ3a3VwX2Nsa2RtLAorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKwkmbXB1XzI0MjBfY2xrZG0sCisJJml2YTFfMjQyMF9jbGtkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKwkmbXB1XzI0MzBfY2xrZG0sCisJJm1kbV9jbGtkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKwkmZHNwX2Nsa2RtLAorCSZnZnhfMjR4eF9jbGtkbSwKKwkmY29yZV9sM18yNHh4X2Nsa2RtLAorCSZjb3JlX2w0XzI0eHhfY2xrZG0sCisJJmRzc18yNHh4X2Nsa2RtLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCSZtcHVfMzR4eF9jbGtkbSwKKwkmbmVvbl9jbGtkbSwKKwkmaXZhMl9jbGtkbSwKKwkmZ2Z4XzM0MzBlczFfY2xrZG0sCisJJnNneF9jbGtkbSwKKwkmZDJkX2Nsa2RtLAorCSZjb3JlX2wzXzM0eHhfY2xrZG0sCisJJmNvcmVfbDRfMzR4eF9jbGtkbSwKKwkmZHNzXzM0eHhfY2xrZG0sCisJJmNhbV9jbGtkbSwKKwkmdXNiaG9zdF9jbGtkbSwKKwkmcGVyX2Nsa2RtLAorCSZlbXVfY2xrZG0sCisjZW5kaWYKKworCU5VTEwsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IDIwYWMzODEuLjEwOThlY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaApAQCAtNjMsNyArNjMsOCBAQAogI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfTVBVX01BU0sJCQkoMHgxZiA8PCAwKQogCiAvKiBDTV9DTEtTVENUUkxfTVBVICovCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFUJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX01QVV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMqLwogI2RlZmluZSBPTUFQMjRYWF9FTl9UVl9TSElGVAkJCQkyCkBAIC0yMzgsOSArMjM5LDEyIEBACiAjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQyX01BU0sJCQkoMHgzIDw8IDIpCiAKIC8qIENNX0NMS1NUQ1RSTF9DT1JFICovCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9EU1MJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0w0CQkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MMwkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX1NISUZUCQkJMgorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDRfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9HRlggKi8KICNkZWZpbmUgT01BUDI0WFhfRU5fM0RfU0hJRlQJCQkJMgpAQCAtMjU1LDcgKzI1OSw4IEBACiAvKiBDTV9DTEtTRUxfR0ZYIHNwZWNpZmljIGJpdHMgKi8KIAogLyogQ01fQ0xLU1RDVFJMX0dGWCAqLwotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtMzY3LDggKzM3MiwxMCBAQAogI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfRFNQX01BU0sJCQkoMHgxZiA8PCAwKQogCiAvKiBDTV9DTEtTVENUUkxfRFNQICovCi0jZGVmaW5lIE9NQVAyNDIwX0FVVE9TVEFURV9JVkEJCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTUAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0sJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fTURNICovCiAvKiAyNDMwIG9ubHkgKi8KQEAgLTM5Niw2ICs0MDMsNyBAQAogCiAvKiBDTV9DTEtTVENUUkxfTURNICovCiAvKiAyNDMwIG9ubHkgKi8KLSNkZWZpbmUgT01BUDI0MzBfQVVUT1NUQVRFX01ETQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX01BU0sJCQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCmluZGV4IGVlNGMwY2EuLjIxOWY1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaApAQCAtOTYsNyArOTYsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfSVZBMl9NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX0lWQTIgKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfSVZBMgkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0lWQTJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0lWQTJfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX1JFVklTSU9OIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtMTQwLDcgKzE0MSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9NUFUgKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTVBVCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTVBVX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9NUFVfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTjFfQ09SRSBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTMwMCw5ICszMDIsMTIgQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0wzX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfQ09SRSAqLwotI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtBQ1RJVklUWV9EMkQJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MNAkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MMwkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtBQ1RJVklUWV9EMkRfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfRDJEX01BU0sJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0w0X1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MNF9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDNfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0wzX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fR0ZYICovCiAjZGVmaW5lIE9NQVAzNDMwRVMxX0VOXzNECQkJCSgxIDw8IDIpCkBAIC0zMjMsNyArMzI4LDggQEAKICNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0dGWF9NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX0dGWCAqLwotI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtBQ1RJVklUWV9HRlgJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtBQ1RJVklUWV9HRlhfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYX01BU0sJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9TR1ggKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfRU5fU0dYX1NISUZUCQkJMQpAQCAtMzMzLDYgKzMzOSwxNCBAQAogI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX01BU0sJCQkoMHg3IDw8IDApCiAKKy8qIENNX0NMS1NUQ1RSTF9TR1ggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1NHWF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1NHWF9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtTVFNUX1NHWCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtBQ1RJVklUWV9TR1hfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfU0dYX01BU0sJCSgxIDw8IDApCisKIC8qIENNX0ZDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVAkJCTkKIApAQCAtNDk4LDcgKzUxMiw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9EU1NfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9EU1MgKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRFNTCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRFNTX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9EU1NfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9DQU0gc3BlY2lmaWMgYml0cyAqLwogCkBAIC01MjIsNyArNTM3LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0NBTV9NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX0NBTSAqLwotI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9DQU0JCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9DQU1fU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0NBTV9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX1BFUiBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTU5OCw3ICs2MTQsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfUEVSICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX1BFUgkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX1BFUl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfUEVSX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9DTEtTRUwxX0VNVSAqLwogI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDRfU0hJRlQJCQkyNApAQCAtNjIzLDcgKzY0MCw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9FTVUgKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRU1VCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRU1VX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9FTVVfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0NMS1NFTDJfRU1VIHNwZWNpZmljIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0VNVV9NVUxUX1NISUZUCQk4CkBAIC02NzMsNiArNjkxLDggQEAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfU0hJRlQJCTAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfTUFTSwkJKDMgPDwgMCkKIAotCisvKiBDTV9DTEtTVFNUX1VTQkhPU1QgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfVVNCSE9TVF9TSElGVAkJMAorI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtBQ1RJVklUWV9VU0JIT1NUX01BU0sJCSgxIDw8IDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCmluZGV4IDg3YTQ0YzcuLjY1ZmRmNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAjZGVmaW5lIE9NQVBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJCVwKLQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMl9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKwkJCUlPX0FERFJFU1MoT01BUDJfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCiAjZWxzZQogI2RlZmluZSBPTUFQMjQyMF9DTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCiAJCQlJT19BRERSRVNTKE9NQVAyNDIwX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCAyZWU5NTRhLi45MGFmMmFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMjMsNTAgKzIzLDcgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLQotI2lmCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCi0KLSNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCi0jZGVmaW5lIE9NQVAyX0kyQ19JTlQyCQk1NwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXMyW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUDJfSTJDX0JBU0UyLAotCQkuZW5kCQk9IE9NQVAyX0kyQ19CQVNFMiArIDB4M2YsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19JTlQyLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTIgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLQkuaWQgICAgICAgICAgICAgPSAyLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMiksCi0JLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczIsCi19OwotCi0vKiBTZWUgYWxzbyBhcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGZvciBmaXJzdCBJMkMgb24gMjR4eCAqLwotc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKQotewotCS8qIFJFVklTSVQ6IFNlY29uZCBJMkMgbm90IGluIHVzZSBvbiBIND8gKi8KLQlpZiAobWFjaGluZV9pc19vbWFwX2g0KCkpCi0JCXJldHVybjsKLQotCWlmICghY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJb21hcF9jZmdfcmVnKEoxNV8yNFhYX0kyQzJfU0NMKTsKLQkJb21hcF9jZmdfcmVnKEgxOV8yNFhYX0kyQzJfU0RBKTsKLQl9Ci0JKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMik7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KLQotI2VuZGlmCisjaW5jbHVkZSA8bWFjaC9lYWMuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCiAjZGVmaW5lIE9NQVAyX01CT1hfQkFTRQkJSU9fQUREUkVTUyhPTUFQMjRYWF9NQUlMQk9YX0JBU0UpCkBAIC0xMDQsNyArNjEsOSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCiAKLSNkZWZpbmUgT01BUDJfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHg0ODA2ODAwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQorCisjZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQkweDQ4MDY4MDAwCiAjZGVmaW5lIE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UJMHg1NDAwMDAwMAogI2RlZmluZSBPTUFQMl9TVElfSVJRCQk0CiAKQEAgLTEyNCw2ICs4MywyNSBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisKKyNkZWZpbmUgT01BUDNfU0RUSV9CQVNFCQkweDU0NTAwMDAwCisjZGVmaW5lIE9NQVAzX1NEVElfQ0hBTk5FTF9CQVNFCTB4NTQ2MDAwMDAKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdGlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDNfU0RUSV9CQVNFLAorCQkuZW5kCQk9IE9NQVAzX1NEVElfQkFTRSArIDB4RkZGLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQM19TRFRJX0NIQU5ORUxfQkFTRSwKKwkJLmVuZAkJPSBPTUFQM19TRFRJX0NIQU5ORUxfQkFTRSArIFNaXzFNIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGlfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzdGkiLApAQCAtMTQwLDEyICsxMTgsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQMjRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9PTUFQMjRYWF9NT0RVTEUpCiAKICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAKICNkZWZpbmUgT01BUDJfTUNTUEkxX0JBU0UJCTB4NDgwOTgwMDAKICNkZWZpbmUgT01BUDJfTUNTUEkyX0JBU0UJCTB4NDgwOWEwMDAKKyNkZWZpbmUgT01BUDJfTUNTUEkzX0JBU0UJCTB4NDgwYjgwMDAKKyNkZWZpbmUgT01BUDJfTUNTUEk0X0JBU0UJCTB4NDgwYmEwMDAKIAogc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkxX2NvbmZpZyA9IHsKIAkubnVtX2NzCQk9IDQsCkBAIC0xNTksNyArMTM5LDcgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTEgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTEgPSB7CiAJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKIAkuaWQJCT0gMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGkxX3Jlc291cmNlcyksCkBAIC0xODEsNyArMTYxLDcgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTIgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTIgPSB7CiAJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKIAkuaWQJCT0gMiwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGkyX3Jlc291cmNlcyksCkBAIC0xOTEsMTYgKzE3MSwxNjIgQEAKIAl9LAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTNfY29uZmlnID0geworCS5udW1fY3MJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGkzX3Jlc291cmNlc1tdID0geworCXsKKwkuc3RhcnQJCT0gT01BUDJfTUNTUEkzX0JBU0UsCisJLmVuZAkJPSBPTUFQMl9NQ1NQSTNfQkFTRSArIDB4ZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTMgPSB7CisJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKKwkuaWQJCT0gMywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGkzX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfbWNzcGkzX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGkzX2NvbmZpZywKKwl9LAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIG9tYXAyX21jc3BpNF9jb25maWcgPSB7CisJLm51bV9jcwkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwMl9tY3NwaTRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfTUNTUEk0X0JBU0UsCisJCS5lbmQJCT0gT01BUDJfTUNTUEk0X0JBU0UgKyAweGZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAyX21jc3BpNCA9IHsKKwkubmFtZQkJPSAib21hcDJfbWNzcGkiLAorCS5pZAkJPSA0LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwMl9tY3NwaTRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwMl9tY3NwaTRfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMl9tY3NwaTRfY29uZmlnLAorCX0sCit9OworI2VuZGlmCisKIHN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGk0KTsKKyNlbmRpZgogfQogCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU05EX09NQVAyNFhYX0VBQworCisjZGVmaW5lIE9NQVAyX0VBQ19CQVNFCQkJMHg0ODA5MDAwMAorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX2VhY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMl9FQUNfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMl9FQUNfQkFTRSArIDB4MTA5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAyX2VhY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAyNHh4LWVhYyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwMl9lYWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwMl9lYWNfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwl9LAorfTsKKwordm9pZCBvbWFwX2luaXRfZWFjKHN0cnVjdCBlYWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJb21hcDJfZWFjX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfZWFjX2RldmljZSk7Cit9CisKKyNlbHNlCit2b2lkIG9tYXBfaW5pdF9lYWMoc3RydWN0IGVhY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkge30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX09NQVBfU0hBMV9NRDUKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hhMV9tZDVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQMjRYWF9TRUNfU0hBMU1ENV9CQVNFLAorCQkuZW5kCT0gT01BUDI0WFhfU0VDX1NIQTFNRDVfQkFTRSArIDB4NjQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfMjRYWF9TSEExTUQ1LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGExX21kNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIk9NQVAgU0hBMS9NRDUiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2hhMV9tZDVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzaGExX21kNV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfc2hhMV9tZDUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoYTFfbWQ1X2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9zaGExX21kNSh2b2lkKSB7IH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSERRX01BU1RFUl9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19IRFFfTUFTVEVSX09NQVBfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCisjZGVmaW5lIE9NQVBfSERRX0JBU0UJMHg0ODBCMjAwMAorI2VuZGlmCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXBfaGRxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVBfSERRX0JBU0UsCisJCS5lbmQJCT0gT01BUF9IRFFfQkFTRSArIDB4MUMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8yNFhYX0hEUV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaGRxX2RldiA9IHsKKwkubmFtZSA9ICJvbWFwX2hkcSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcF9oZHFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwX2hkcV9yZXNvdXJjZXMsCit9Oworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaGRxX2luaXQodm9pZCkKK3sKKwkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2hkcV9kZXYpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hkcV9pbml0KHZvaWQpIHt9CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2luaXQgb21hcDJfaW5pdF9kZXZpY2VzKHZvaWQpCkBAIC0yMDgsMTAgKzMzNCwxMSBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCi0Jb21hcF9pbml0X2kyYygpOwogCW9tYXBfaW5pdF9tYm94KCk7CiAJb21hcF9pbml0X21jc3BpKCk7CisJb21hcF9oZHFfaW5pdCgpOwogCW9tYXBfaW5pdF9zdGkoKTsKKwlvbWFwX2luaXRfc2hhMV9tZDUoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCBhZjEwODFhLi43NjNiZGJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpAQCAtOSw2ICs5LDggQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xNiwyMCArMTgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogCi0jdW5kZWYgREVCVUcKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi0jZGVmaW5lIEdQTUNfQkFTRQkJMHg2ODAwYTAwMAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAotI2RlZmluZSBHUE1DX0JBU0UJCTB4NkUwMDAwMDAKLSNlbmRpZgotCisvKiBHUE1DIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgR1BNQ19SRVZJU0lPTgkJMHgwMAogI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJMHgxMAogI2RlZmluZSBHUE1DX1NZU1NUQVRVUwkJMHgxNApAQCAtNTEsNyArNDcsNiBAQAogI2RlZmluZSBHUE1DX0NTMAkJMHg2MAogI2RlZmluZSBHUE1DX0NTX1NJWkUJCTB4MzAKIAotI2RlZmluZSBHUE1DX0NTX05VTQkJOAogI2RlZmluZSBHUE1DX01FTV9TVEFSVAkJMHgwMDAwMDAwMAogI2RlZmluZSBHUE1DX01FTV9FTkQJCTB4M0ZGRkZGRkYKICNkZWZpbmUgQk9PVF9ST01fU1BBQ0UJCTB4MTAwMDAwCS8qIDFNQiAqLwpAQCAtNjQsMTIgKzU5LDkgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3BtY19tZW1fbG9jayk7CiBzdGF0aWMgdW5zaWduZWQJCWdwbWNfY3NfbWFwOwogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpncG1jX2Jhc2UgPQotCSh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhHUE1DX0JBU0UpOwotc3RhdGljIHZvaWQgX19pb21lbSAqZ3BtY19jc19iYXNlID0KLQkodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoR1BNQ19CQVNFKSArIEdQTUNfQ1MwOworc3RhdGljIHZvaWQgX19pb21lbSAqZ3BtY19iYXNlOwogCi1zdGF0aWMgc3RydWN0IGNsayAqZ3BtY19mY2s7CitzdGF0aWMgc3RydWN0IGNsayAqZ3BtY19sM19jbGs7CiAKIHN0YXRpYyB2b2lkIGdwbWNfd3JpdGVfcmVnKGludCBpZHgsIHUzMiB2YWwpCiB7CkBAIC04NSwxOSArNzcsMzIgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ19hZGRyOwogCi0JcmVnX2FkZHIgPSBncG1jX2NzX2Jhc2UgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OworCXJlZ19hZGRyID0gZ3BtY19iYXNlICsgR1BNQ19DUzAgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OwogCV9fcmF3X3dyaXRlbCh2YWwsIHJlZ19hZGRyKTsKIH0KIAogdTMyIGdwbWNfY3NfcmVhZF9yZWcoaW50IGNzLCBpbnQgaWR4KQogewotCXJldHVybiBfX3Jhd19yZWFkbChncG1jX2NzX2Jhc2UgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4KTsKKwl2b2lkIF9faW9tZW0gKnJlZ19hZGRyOworCisJcmVnX2FkZHIgPSBncG1jX2Jhc2UgKyBHUE1DX0NTMCArIChjcyAqIEdQTUNfQ1NfU0laRSkgKyBpZHg7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHJlZ19hZGRyKTsKIH0KIAorLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIGdwbWNfZmNrIHRvIGNsb2NrIGZyYW1ld29yayBhbmQgdXNlIGl0ICovCiB1bnNpZ25lZCBsb25nIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKHZvaWQpCiB7Ci0JLyogSW4gcGljb3NlY29uZHMgKi8KLQlyZXR1cm4gMTAwMDAwMDAwMCAvICgoY2xrX2dldF9yYXRlKGdwbWNfZmNrKSkgLyAxMDAwKTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoZ3BtY19sM19jbGspOworCisJaWYgKHJhdGUgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJncG1jX2wzX2NsayBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXJhdGUgLz0gMTAwMDsKKwlyYXRlID0gMTAwMDAwMDAwMCAvIHJhdGU7CS8qIEluIHBpY29zZWNvbmRzICovCisKKwlyZXR1cm4gcmF0ZTsKIH0KIAogdW5zaWduZWQgaW50IGdwbWNfbnNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfbnMpCkBAIC0xMTAsNiArMTE1LDExIEBACiAJcmV0dXJuICh0aW1lX25zICogMTAwMCArIHRpY2tfcHMgLSAxKSAvIHRpY2tfcHM7CiB9CiAKK3Vuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcykKK3sKKwlyZXR1cm4gdGlja3MgKiBncG1jX2dldF9mY2xrX3BlcmlvZCgpIC8gMTAwMDsKK30KKwogdW5zaWduZWQgaW50IGdwbWNfcm91bmRfbnNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfbnMpCiB7CiAJdW5zaWduZWQgbG9uZyB0aWNrcyA9IGdwbWNfbnNfdG9fdGlja3ModGltZV9ucyk7CkBAIC0yMTAsNiArMjIwLDExIEBACiAKIAlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc1LCAyNCwgMjcsIHBhZ2VfYnVyc3RfYWNjZXNzKTsKIAorCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc2LCAxNiwgMTksIHdyX2RhdGFfbXV4X2J1cyk7CisJCUdQTUNfU0VUX09ORShHUE1DX0NTX0NPTkZJRzYsIDI0LCAyOCwgd3JfYWNjZXNzKTsKKwl9CisKIAkvKiBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBpbml0aWFsaXplZCBDT05GSUcxIHRvIGNvdmVyCiAJICogYXQgbGVhc3Qgc3luYyB2cyBhc3luYwogCSAqLwpAQCAtMzUwLDYgKzM2NSw3IEBACiAJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwogCXJldHVybiByOwogfQorRVhQT1JUX1NZTUJPTChncG1jX2NzX3JlcXVlc3QpOwogCiB2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpCiB7CkBAIC0zNjUsOCArMzgxLDkgQEAKIAlncG1jX2NzX3NldF9yZXNlcnZlZChjcywgMCk7CiAJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChncG1jX2NzX2ZyZWUpOwogCi12b2lkIF9faW5pdCBncG1jX21lbV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZ3BtY19tZW1faW5pdCh2b2lkKQogewogCWludCBjczsKIAl1bnNpZ25lZCBsb25nIGJvb3Rfcm9tX3NwYWNlID0gMDsKQEAgLTM5NiwxMiArNDEzLDMzIEBACiB2b2lkIF9faW5pdCBncG1jX2luaXQodm9pZCkKIHsKIAl1MzIgbDsKKwljaGFyICpjazsKIAotCWdwbWNfZmNrID0gY2xrX2dldChOVUxMLCAiZ3BtY19mY2siKTsgLyogQWx3YXlzIG9uIEVOQUJMRV9PTl9JTklUICovCi0JaWYgKElTX0VSUihncG1jX2ZjaykpCi0JCVdBUk5fT04oMSk7Ci0JZWxzZQotCQljbGtfZW5hYmxlKGdwbWNfZmNrKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJY2sgPSAiY29yZV9sM19jayI7CisJCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJCWwgPSBPTUFQMjQyMF9HUE1DX0JBU0U7CisJCWVsc2UKKwkJCWwgPSBPTUFQMzRYWF9HUE1DX0JBU0U7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQljayA9ICJncG1jX2ZjayI7CisJCWwgPSBPTUFQMzRYWF9HUE1DX0JBU0U7CisJfQorCisJZ3BtY19sM19jbGsgPSBjbGtfZ2V0KE5VTEwsIGNrKTsKKwlpZiAoSVNfRVJSKGdwbWNfbDNfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgR1BNQyBjbG9jayAlc1xuIiwgY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlncG1jX2Jhc2UgPSBpb3JlbWFwKGwsIFNaXzRLKTsKKwlpZiAoIWdwbWNfYmFzZSkgeworCQljbGtfcHV0KGdwbWNfbDNfY2xrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IEdQTUMgcmVnaXN0ZXIgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJQlVHX09OKElTX0VSUihncG1jX2wzX2NsaykpOwogCiAJbCA9IGdwbWNfcmVhZF9yZWcoR1BNQ19SRVZJU0lPTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiR1BNQyByZXZpc2lvbiAlZC4lZFxuIiwgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggMjA5MTc3Yy4uYmY0NWZmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMTgsMjQgKzE4LDE1IEBACiAKICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKLSNkZWZpbmUgVEFQX0JBU0UJaW9fcDJ2KDB4NDgwMTQwMDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQotI2RlZmluZSBUQVBfQkFTRQlpb19wMnYoMHg0OTAwQTAwMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0jZGVmaW5lIFRBUF9CQVNFCWlvX3AydigweDQ4MzBBMDAwKQotI2VuZGlmCitzdGF0aWMgdTMyIGNsYXNzOworc3RhdGljIHZvaWQgX19pb21lbSAqdGFwX2Jhc2U7CitzdGF0aWMgdTE2IHRhcF9wcm9kX2lkOwogCiAjZGVmaW5lIE9NQVBfVEFQX0lEQ09ERQkJMHgwMjA0Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLSNkZWZpbmUgT01BUF9UQVBfUFJPRF9JRAkweDAyMTAKLSNlbHNlCi0jZGVmaW5lIE9NQVBfVEFQX1BST0RfSUQJMHgwMjA4Ci0jZW5kaWYKLQogI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMAkweDAyMTgKICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzEJMHgwMjFDCiAjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8yCTB4MDIyMApAQCAtOTQsMTggKzg1LDI0IEBACiAJICogaXQgbWVhbnMgaXRzIENvcnRleCByMHAwIHdoaWNoIGlzIDM0MzAgRVMxCiAJICovCiAJaWYgKCgoKGNwdWlkID4+IDQpICYgMHhGRkYpID09IDB4QzA4KSAmJiAoKGNwdWlkICYgMHhGKSA9PSAweDApKSB7CisKKwkJaWYgKHJlZyA9PSB0YXBfcHJvZF9pZCkgeworCQkJcmVndmFsID0gMHgwMDBGMDBGMDsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJc3dpdGNoIChyZWcpIHsKIAkJY2FzZSBPTUFQX1RBUF9JRENPREUgIDogcmVndmFsID0gMHgwQjdBRTAyRjsgYnJlYWs7CiAJCS8qIE1ha2luZyBEZXZUeXBlIGFzIDB4RiBpbiBFUzEgdG8gZGlmZmVyIGZyb20gRVMyICovCi0JCWNhc2UgT01BUF9UQVBfUFJPRF9JRCA6IHJlZ3ZhbCA9IDB4MDAwRjAwRjA7IGJyZWFrOwogCQljYXNlIE9NQVBfVEFQX0RJRV9JRF8wOiByZWd2YWwgPSAweDAxMDAwMDAwOyBicmVhazsKIAkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMTogcmVndmFsID0gMHgxMDEyZDY4NzsgYnJlYWs7CiAJCWNhc2UgT01BUF9UQVBfRElFX0lEXzI6CXJlZ3ZhbCA9IDB4MDAwMDAwMDA7IGJyZWFrOwogCQljYXNlIE9NQVBfVEFQX0RJRV9JRF8zOglyZWd2YWwgPSAweDJkMmMwMDAwOyBicmVhazsKIAkJfQogCX0gZWxzZQotCQlyZWd2YWwgPSBfX3Jhd19yZWFkbChUQVBfQkFTRSArIHJlZyk7CisJCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKHRhcF9iYXNlICsgcmVnKTsKIAorb3V0OgogCXJldHVybiByZWd2YWw7CiAKIH0KQEAgLTIwNCw3ICsyMDEsNyBAQAogCXU4ICByZXY7CiAKIAlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKLQlwcm9kX2lkID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX1BST0RfSUQpOworCXByb2RfaWQgPSByZWFkX3RhcF9yZWcodGFwX3Byb2RfaWQpOwogCWhhd2tleWUgPSAoaWRjb2RlID4+IDEyKSAmIDB4ZmZmZjsKIAlyZXYgPSAoaWRjb2RlID4+IDI4KSAmIDB4MGY7CiAJZGV2X3R5cGUgPSAocHJvZF9pZCA+PiAxNikgJiAweDBmOwpAQCAtMjY5LDMgKzI2NiwxMyBAQAogCiB9CiAKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3RhcChzdHJ1Y3Qgb21hcF9nbG9iYWxzICpvbWFwMl9nbG9iYWxzKQoreworCWNsYXNzID0gb21hcDJfZ2xvYmFscy0+Y2xhc3M7CisJdGFwX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT50YXA7CisKKwlpZiAoY2xhc3MgPT0gMHgzNDMwKQorCQl0YXBfcHJvZF9pZCA9IDB4MDIxMDsKKwllbHNlCisJCXRhcF9wcm9kX2lkID0gMHgwMjA4OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDdjM2Q2MjguLjVlYTY0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTQsOCArNCwxMSBAQAogICogT01BUDIgSS9PIG1hcHBpbmcgY29kZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgotICogVXBkYXRlZCBtYXAgZGVzYyB0byBhZGQgMjQzMCBzdXBwb3J0IDogPHgwa2hhc2ltQHRpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIEF1dGhvcjoKKyAqCUp1aGEgWXJqb2xhIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKglTeWVkIEtoYXNpbSA8eDBraGFzaW1AdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjMsMTkgKzI2LDI2IEBACiAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CisjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAKLWV4dGVybiB2b2lkIG9tYXBfc3JhbV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9tZW1vcnkodm9pZCk7Ci1leHRlcm4gdm9pZCBncG1jX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKKyNpbmNsdWRlICJtZW1vcnkuaCIKKworI2luY2x1ZGUgImNsb2NrLmgiCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwb3dlcmRvbWFpbnMuaCIKKworI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlICJjbG9ja2RvbWFpbnMuaCIKIAogLyoKICAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKICAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgogICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDI0eHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewogCQkudmlydHVhbAk9IEwzXzI0WFhfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEwzXzI0WFhfUEhZUyksCkBAIC00MywyNSArNTMsMTUgQEAKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKIAl7Ci0JCS52aXJ0dWFsICAgICAgICA9IEw0XzI0WFhfVklSVCwKLQkJLnBmbiAgICAgICAgICAgID0gX19waHlzX3RvX3BmbihMNF8yNFhYX1BIWVMpLAotCQkubGVuZ3RoICAgICAgICAgPSBMNF8yNFhYX1NJWkUsCi0JCS50eXBlICAgICAgICAgICA9IE1UX0RFVklDRQotCX0sCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLQl7Ci0JCS52aXJ0dWFsCT0gTDRfV0tfMjQzWF9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfV0tfMjQzWF9QSFlTKSwKLQkJLmxlbmd0aAkJPSBMNF9XS18yNDNYX1NJWkUsCisJCS52aXJ0dWFsCT0gTDRfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF8yNFhYX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCi0JewotCQkudmlydHVhbAk9IE9NQVAyNDNYX0dQTUNfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAyNDNYX0dQTUNfUEhZUyksCi0JCS5sZW5ndGgJCT0gT01BUDI0M1hfR1BNQ19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDI0MnhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewogCQkudmlydHVhbAk9IERTUF9NRU1fMjRYWF9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX01FTV8yNFhYX1BIWVMpLApAQCAtNzksMTIgKzc5LDEwOSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX01NVV8yNFhYX1BIWVMpLAogCQkubGVuZ3RoCQk9IERTUF9NTVVfMjRYWF9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9CisJfSwKIH07CiAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDI0M3hfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEw0X1dLXzI0M1hfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzI0M1hfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfV0tfMjQzWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMjQzWF9HUE1DX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMjQzWF9HUE1DX1BIWVMpLAorCQkubGVuZ3RoCQk9IE9NQVAyNDNYX0dQTUNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDI0M1hfU0RSQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDI0M1hfU0RSQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMjQzWF9TRFJDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAyNDNYX1NNU19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDI0M1hfU01TX1BIWVMpLAorCQkubGVuZ3RoCQk9IE9NQVAyNDNYX1NNU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMzR4eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gTDNfMzRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDNfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMM18zNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IEw0XzM0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0XzM0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF9XS18zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9XS18zNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0X1dLXzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDM0WFhfR1BNQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDM0WFhfR1BNQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMzRYWF9HUE1DX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAzNDNYX1NNU19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDM0M1hfU01TX1BIWVMpLAorCQkubGVuZ3RoCQk9IE9NQVAzNDNYX1NNU19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMzQzWF9TRFJDX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMzQzWF9TRFJDX1BIWVMpLAorCQkubGVuZ3RoCQk9IE9NQVAzNDNYX1NEUkNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfUEVSXzM0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1BFUl8zNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0X1BFUl8zNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IEw0X0VNVV8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9FTVVfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF9FTVVfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKyNlbmRpZgorCiB2b2lkIF9faW5pdCBvbWFwMl9tYXBfY29tbW9uX2lvKHZvaWQpCiB7Ci0JaW90YWJsZV9pbml0KG9tYXAyX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDJfaW9fZGVzYykpOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChvbWFwMjQyeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDJ4X2lvX2Rlc2MpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKKwlpb3RhYmxlX2luaXQob21hcDI0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjR4eF9pb19kZXNjKSk7CisJaW90YWJsZV9pbml0KG9tYXAyNDN4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0M3hfaW9fZGVzYykpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorCWlvdGFibGVfaW5pdChvbWFwMzR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAzNHh4X2lvX2Rlc2MpKTsKKyNlbmRpZgogCiAJLyogTm9ybWFsbHkgZGV2aWNlbWFwc19pbml0KCkgd291bGQgZmx1c2ggY2FjaGVzIGFuZCB0bGIgYWZ0ZXIKIAkgKiBtZGVzYy0+bWFwX2lvKCksIGJ1dCB3ZSBtdXN0IGFsc28gZG8gaXQgaGVyZSBiZWNhdXNlIG9mIHRoZSBDUFUKQEAgLTEwMSwxMiArMTk4LDkgQEAKIHZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHZvaWQpCiB7CiAJb21hcDJfbXV4X2luaXQoKTsKKwlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwKTsKKwljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwLCBjbGtkbV9wd3JkbV9hdXRvZGVwcyk7CiAJb21hcDJfY2xrX2luaXQoKTsKLS8qCi0gKiBOZWVkIHRvIEZpeCB0aGlzIGZvciAyNDMwCi0gKi8KLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKIAlvbWFwMl9pbml0X21lbW9yeSgpOwotI2VuZGlmCiAJZ3BtY19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwppbmRleCAxOTZhOTU2Li5kMzU0ZTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTE2LDE0ICsxNiwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBJTlRDX1JFVklTSU9OCTB4MDAwMAotI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkweDAwMTAKLSNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJMHgwMDE0Ci0jZGVmaW5lIElOVENfQ09OVFJPTAkweDAwNDgKLSNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCTB4MDA4OAotI2RlZmluZSBJTlRDX01JUl9TRVQwCTB4MDA4YworCisvKiBzZWxlY3RlZCBJTlRDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKworI2RlZmluZSBJTlRDX1JFVklTSU9OCQkweDAwMDAKKyNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCTB4MDAxMAorI2RlZmluZSBJTlRDX1NZU1NUQVRVUwkJMHgwMDE0CisjZGVmaW5lIElOVENfQ09OVFJPTAkJMHgwMDQ4CisjZGVmaW5lIElOVENfTUlSX0NMRUFSMAkJMHgwMDg4CisjZGVmaW5lIElOVENfTUlSX1NFVDAJCTB4MDA4YworI2RlZmluZSBJTlRDX1BFTkRJTkdfSVJRMAkweDAwOTgKKworLyogTnVtYmVyIG9mIElSUSBzdGF0ZSBiaXRzIGluIGVhY2ggTUlSIHJlZ2lzdGVyICovCisjZGVmaW5lIElSUV9CSVRTX1BFUl9SRUcJMzIKIAogLyoKICAqIE9NQVAyIGhhcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBlYWNoIGludGVycnVwdApAQCAtMzIsNDggKzM4LDUwIEBACiAgKiBmb3IgZWFjaCBiYW5rLi4gd2hlbiBpbiBkb3VidCwgY29uc3VsdCB0aGUgVFJNLgogICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgewotCXVuc2lnbmVkIGxvbmcgYmFzZV9yZWc7CisJdm9pZCBfX2lvbWVtICpiYXNlX3JlZzsKIAl1bnNpZ25lZCBpbnQgbnJfaXJxczsKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNCkpKSBpcnFfYmFua3NbXSA9IHsKIAl7CiAJCS8qIE1QVSBJTlRDICovCi0JCS5iYXNlX3JlZwk9IElPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSksCisJCS5iYXNlX3JlZwk9IDAsCiAJCS5ucl9pcnFzCT0gOTYsCi0JfSwgewotCQkvKiBYWFg6IERTUCBJTlRDICovCi0JfQorCX0sCiB9OwogCisvKiBJTlRDIGJhbmsgcmVnaXN0ZXIgZ2V0L3NldCAqLworCitzdGF0aWMgdm9pZCBpbnRjX2Jhbmtfd3JpdGVfcmVnKHUzMiB2YWwsIHN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rLCB1MTYgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGJhbmstPmJhc2VfcmVnICsgcmVnKTsKK30KKworc3RhdGljIHUzMiBpbnRjX2JhbmtfcmVhZF9yZWcoc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmssIHUxNiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGJhbmstPmJhc2VfcmVnICsgcmVnKTsKK30KKwogLyogWFhYOiBGSVEgYW5kIGFkZGl0aW9uYWwgSU5UQyBzdXBwb3J0IChvbmx5IE1QVSBhdCB0aGUgbW9tZW50KSAqLwogc3RhdGljIHZvaWQgb21hcF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JX19yYXdfd3JpdGVsKDB4MSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19DT05UUk9MKTsKKwlpbnRjX2Jhbmtfd3JpdGVfcmVnKDB4MSwgJmlycV9iYW5rc1swXSwgSU5UQ19DT05UUk9MKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisJaW50IG9mZnNldCA9IGlycSAmICh+KElSUV9CSVRTX1BFUl9SRUcgLSAxKSk7CiAKLQlpZiAoaXJxID49IDY0KSB7Ci0JCWlycSAlPSA2NDsKLQl9IGVsc2UgaWYgKGlycSA+PSAzMikgewotCQlpcnEgJT0gMzI7Ci0JfQorCWlycSAmPSAoSVJRX0JJVFNfUEVSX1JFRyAtIDEpOwogCi0JX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX01JUl9TRVQwICsgb2Zmc2V0KTsKKwlpbnRjX2Jhbmtfd3JpdGVfcmVnKDEgPDwgaXJxLCAmaXJxX2JhbmtzWzBdLCBJTlRDX01JUl9TRVQwICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaW50IG9mZnNldCA9IChpcnEgPj4gNSkgPDwgNTsKKwlpbnQgb2Zmc2V0ID0gaXJxICYgKH4oSVJRX0JJVFNfUEVSX1JFRyAtIDEpKTsKIAotCWlmIChpcnEgPj0gNjQpIHsKLQkJaXJxICU9IDY0OwotCX0gZWxzZSBpZiAoaXJxID49IDMyKSB7Ci0JCWlycSAlPSAzMjsKLQl9CisJaXJxICY9IChJUlFfQklUU19QRVJfUkVHIC0gMSk7CiAKLQlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7CisJaW50Y19iYW5rX3dyaXRlX3JlZygxIDw8IGlycSwgJmlycV9iYW5rc1swXSwgSU5UQ19NSVJfQ0xFQVIwICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgb21hcF9tYXNrX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTkzLDIwICsxMDEsMjAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAotCXRtcCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19SRVZJU0lPTikgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gIklSUTogRm91bmQgYW4gSU5UQyBhdCAweCUwOGx4ICIKKwl0bXAgPSBpbnRjX2JhbmtfcmVhZF9yZWcoYmFuaywgSU5UQ19SRVZJU0lPTikgJiAweGZmOworCXByaW50ayhLRVJOX0lORk8gIklSUTogRm91bmQgYW4gSU5UQyBhdCAweCVwICIKIAkJCSAiKHJldmlzaW9uICVsZC4lbGQpIHdpdGggJWQgaW50ZXJydXB0c1xuIiwKIAkJCSBiYW5rLT5iYXNlX3JlZywgdG1wID4+IDQsIHRtcCAmIDB4ZiwgYmFuay0+bnJfaXJxcyk7CiAKLQl0bXAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKwl0bXAgPSBpbnRjX2JhbmtfcmVhZF9yZWcoYmFuaywgSU5UQ19TWVNDT05GSUcpOwogCXRtcCB8PSAxIDw8IDE7CS8qIHNvZnQgcmVzZXQgKi8KLQlfX3Jhd193cml0ZWwodG1wLCBiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKwlpbnRjX2Jhbmtfd3JpdGVfcmVnKHRtcCwgYmFuaywgSU5UQ19TWVNDT05GSUcpOwogCi0Jd2hpbGUgKCEoX19yYXdfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU1NUQVRVUykgJiAweDEpKQorCXdoaWxlICghKGludGNfYmFua19yZWFkX3JlZyhiYW5rLCBJTlRDX1NZU1NUQVRVUykgJiAweDEpKQogCQkvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZSAqLzsKIAogCS8qIEVuYWJsZSBhdXRvaWRsZSAqLwotCV9fcmF3X3dyaXRlbCgxIDw8IDAsIGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNDT05GSUcpOworCWludGNfYmFua193cml0ZV9yZWcoMSA8PCAwLCBiYW5rLCBJTlRDX1NZU0NPTkZJRyk7CiB9CiAKIHZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKQEAgLTExOCw5ICsxMjYsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOwogCi0JCS8qIFhYWCAqLwotCQlpZiAoIWJhbmstPmJhc2VfcmVnKQotCQkJY29udGludWU7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWJhbmstPmJhc2VfcmVnID0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKKwkJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQliYW5rLT5iYXNlX3JlZyA9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0WFhfSUNfQkFTRSk7CiAKIAkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCmluZGV4IGIyNjFmMWYuLmNhZTNlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKQEAgLTg5LDYgKzg5LDMwIEBACiAJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCiAJCX0sCiAJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSAzLAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA0LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA1LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKIH07CiAKICNkZWZpbmUgb21hcF9tY2JzcF9jbGtzX3NpemUJQVJSQVlfU0laRShvbWFwX21jYnNwX2Nsa3MpCkBAIC0xMTcsMjUgKzE0MSwxNCBAQAogCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfbWNic3BfY2hlY2sodW5zaWduZWQgaW50IGlkKQotewotCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UIC0gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3Bfb3BzIG9tYXAyX21jYnNwX29wcyA9IHsKIAkucmVxdWVzdAk9IG9tYXAyX21jYnNwX3JlcXVlc3QsCi0JLmNoZWNrCQk9IG9tYXAyX21jYnNwX2NoZWNrLAogfTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCi1zdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjR4eF9tY2JzcF9wZGF0YVtdID0geworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQyMF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMjRYWF9NQ0JTUDFfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKQEAgLTE0NSw3ICsxNTgsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBJT19BRERSRVNTKE9NQVAyNFhYX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYLApAQCAtMTU0LDE3ICsxNjYsNzAgQEAKIAkJLmNsa19uYW1lCT0gIm1jYnNwX2NsayIsCiAJfSwKIH07Ci0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNHh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcF9wZGF0YSkKICNlbHNlCi0jZGVmaW5lIG9tYXAyNHh4X21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQkwCisjZGVmaW5lIG9tYXAyNDIwX21jYnNwX3BkYXRhCQlOVUxMCisjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaCQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQzMF9tY2JzcF9wZGF0YVtdID0geworCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorfTsKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCisjZWxzZQorI2RlZmluZSBvbWFwMjQzMF9tY2JzcF9wZGF0YQkJTlVMTAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWgkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDM0eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IElPX0FERFJFU1MoT01BUDM0WFhfTUNCU1AxX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCkBAIC0xNzQsNyArMjM5LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMzRYWF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKQEAgLTE4Miw2ICsyNDYsMzMgQEAKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAogCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKIAl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAogfTsKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDM0eHhfbWNic3BfcGRhdGEpCiAjZWxzZQpAQCAtMTg5LDcgKzI4MCw3IEBACiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQkwCiAjZW5kaWYKIAotaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTE5OSwxMCArMjkwLDI0IEBACiAJCWNsa19yZWdpc3Rlcigmb21hcF9tY2JzcF9jbGtzW2ldLmNsayk7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjR4eF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVAyNFhYX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWjsKIAorCW1jYnNwX3B0ciA9IGt6YWxsb2Mob21hcF9tY2JzcF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCAqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2JzcF9wdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjQyMF9tY2JzcF9wZGF0YSwKKwkJCQkJCU9NQVAyNDIwX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXAyNDMwX21jYnNwX3BkYXRhLAorCQkJCQkJT01BUDI0MzBfTUNCU1BfUERBVEFfU1opOwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDM0eHhfbWNic3BfcGRhdGEsCiAJCQkJCQlPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwppbmRleCBhYjE0NjJiLi44ODJjNzAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKQEAgLTEwMSw2ICsxMDEsMTcgQEAKIAlyZXR1cm4gcHJldjsKIH0KIAorI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spCit7Cit9Cit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSkKK3sKK30KKyNlbmRpZgorCiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CkBAIC0xNjUsNiArMTc2LDkgQEAKIHsKIAl1MzIgbDsKIAorCWlmICghY3B1X2lzX29tYXAyNDIwKCkpCisJCXJldHVybjsKKwogCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7CiAJbCAmPSB+KDB4MyA8PCAzKTsKIAlsIHw9ICgweDIgPDwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaAppbmRleCA5YTI4MGI1Li5iYjNkYjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKQEAgLTE0LDYgKzE0LDkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9NRU1PUllfSAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX01FTU9SWV9ICisKIC8qIE1lbW9yeSB0aW1pbmdzICovCiAjZGVmaW5lIE1fRERSCQkxCiAjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCkBAIC0zNCwzICszNyw3IEBACiBleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfdHlwZSh2b2lkKTsKIHUzMiBvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKHZvaWQpOwogdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKTsKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwordm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDZiN2Q2NzIuLmIxMzkzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCiAgKgotICogT01BUDIgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICogT01BUDIgYW5kIE9NQVAzIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTIyMCwxNiArMjIwLDIyMiBAQAogI2RlZmluZSBPTUFQMjRYWF9QSU5TX1NaCTAKICNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLwogCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfRU5BCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfVVAJKDEgPDwgNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAzNHh4X3BpbnNbXSA9IHsKKy8qCisgKgkJTmFtZSwgcmVnLW9mZnNldCwKKyAqCQltdXgtbW9kZSB8IFthY3RpdmUtbW9kZSB8IG9mZi1tb2RlXQorICovCisKKy8qIDM0eHggSTJDICovCitNVVhfQ0ZHXzM0WFgoIksyMV8zNFhYX0kyQzFfU0NMIiwgMHgxYmEsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkoyMV8zNFhYX0kyQzFfU0RBIiwgMHgxYmMsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFGMTVfMzRYWF9JMkMyX1NDTCIsIDB4MWJlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRTE1XzM0WFhfSTJDMl9TREEiLCAweDFjMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUYxNF8zNFhYX0kyQzNfU0NMIiwgMHgxYzIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFHMTRfMzRYWF9JMkMzX1NEQSIsIDB4MWM0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRDI2XzM0WFhfSTJDNF9TQ0wiLCAweGEwMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUUyNl8zNFhYX0kyQzRfU0RBIiwgMHhhMDIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCisKKy8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCitNVVhfQ0ZHXzM0WFgoIlk4XzM0MzBfVVNCMUhTX1BIWV9DTEsiLCAweDVkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfUEhZX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1BIWV9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfUEhZX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1BIWV9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19QSFlfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfUEhZX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfUEhZX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1BIWV9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1BIWV9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19QSFlfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBQSFkgLSBIU1VTQjogMTItcGluIFVMUEkgUEhZOiBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfUEhZX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTEwXzM0MzBfVVNCMkhTX1BIWV9TVFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiQUE5XzM0MzBfVVNCMkhTX1BIWV9ESVIiLCAweDVmNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjExXzM0MzBfVVNCMkhTX1BIWV9OWFQiLCAweDVmNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjEwXzM0MzBfVVNCMkhTX1BIWV9EMCIsIDB4NWY4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCOV8zNDMwX1VTQjJIU19QSFlfRDEiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJIU19QSFlfRDIiLCAweDFkNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUNF8zNDMwX1VTQjJIU19QSFlfRDMiLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUM18zNDMwX1VTQjJIU19QSFlfRDQiLCAweDFkOCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSM18zNDMwX1VTQjJIU19QSFlfRDUiLCAweDFkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSNF8zNDMwX1VTQjJIU19QSFlfRDYiLCAweDFkYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUMl8zNDMwX1VTQjJIU19QSFlfRDciLCAweDFkNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLworTVVYX0NGR18zNFhYKCJZOF8zNDMwX1VTQjFIU19UTExfQ0xLIiwgMHg1ZGEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfVExMX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1RMTF9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfVExMX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1RMTF9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19UTExfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfVExMX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfVExMX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1RMTF9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1RMTF9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19UTExfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfVExMX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCIsIDB4NWYyLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTlfMzQzMF9VU0IySFNfVExMX0RJUiIsIDB4NWY0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTFfMzQzMF9VU0IySFNfVExMX05YVCIsIDB4NWY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTBfMzQzMF9VU0IySFNfVExMX0QwIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkhTX1RMTF9EMSIsIDB4NWZhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlczXzM0MzBfVVNCMkhTX1RMTF9EMiIsIDB4MWQ0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQ0XzM0MzBfVVNCMkhTX1RMTF9EMyIsIDB4MWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQzXzM0MzBfVVNCMkhTX1RMTF9ENCIsIDB4MWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlIzXzM0MzBfVVNCMkhTX1RMTF9ENSIsIDB4MWRhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlI0XzM0MzBfVVNCMkhTX1RMTF9ENiIsIDB4MWRjLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQyXzM0MzBfVVNCMkhTX1RMTF9ENyIsIDB4MWQ2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCisKKy8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCitNVVhfQ0ZHXzM0WFgoIkFBNl8zNDMwX1VTQjNIU19UTExfQ0xLIiwgMHgxODAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAiLCAweDE2NiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIiLCAweDE2OCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZM18zNDMwX1VTQjNIU19UTExfTlhUIiwgMHgxNmEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUE1XzM0MzBfVVNCM0hTX1RMTF9EMCIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk0XzM0MzBfVVNCM0hTX1RMTF9EMSIsIDB4MTg0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk1XzM0MzBfVVNCM0hTX1RMTF9EMiIsIDB4MTg4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc1XzM0MzBfVVNCM0hTX1RMTF9EMyIsIDB4MThhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTJfMzQzMF9VU0IzSFNfVExMX0Q0IiwgMHgxNmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxM18zNDMwX1VTQjNIU19UTExfRDUiLCAweDE2ZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTEzXzM0MzBfVVNCM0hTX1RMTF9ENiIsIDB4MTcwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTJfMzQzMF9VU0IzSFNfVExMX0Q3IiwgMHgxNzIsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUYxMF8zNDMwX1VTQjFGU19QSFlfTU0xX1JYRFAiLCAweDVkOCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNIiwgMHg1ZWUsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEzXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhSQ1YiLCAweDVkYywKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTJfMzQzMF9VU0IxRlNfUEhZX01NMV9UWFNFMCIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFUIiwgMHg1ZTAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhFTl9OIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCisKKy8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCitNVVhfQ0ZHXzM0WFgoIkFGN18zNDMwX1VTQjJGU19QSFlfTU0yX1JYRFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNIiwgMHg1ZjYsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxMF8zNDMwX1VTQjJGU19QSFlfTU0yX1JYUkNWIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhTRTAiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFUIiwgMHgxZDQsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVDRfMzQzMF9VU0IyRlNfUEhZX01NMl9UWEVOX04iLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUgzXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhEUCIsIDB4MTY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0iLCAweDE2YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRDFfMzQzMF9VU0IzRlNfUEhZX01NM19SWFJDViIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFMV8zNDMwX1VTQjNGU19QSFlfTU0zX1RYU0UwIiwgMHgxODQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQiLCAweDE4OCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04iLCAweDE4YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworfTsKKworI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCUFSUkFZX1NJWkUob21hcDM0eHhfcGlucykKKworI2Vsc2UKKyNkZWZpbmUgb21hcDM0eHhfcGlucwkJTlVMTAorI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCTAKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKQotdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1OCByZWcpCitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1MTYgcmVnKQogewogCXUxNiBvcmlnOwogCXU4IHdhcm4gPSAwLCBkZWJ1ZyA9IDA7CiAKLQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJZWxzZQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWR3KGNmZy0+bXV4X3JlZyk7CiAKICNpZmRlZglDT05GSUdfT01BUF9NVVhfREVCVUcKIAlkZWJ1ZyA9IGNmZy0+ZGVidWc7CkBAIC0yNTUsOSArNDYxLDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7CiAJaWYgKGNmZy0+cHVsbF92YWwpCi0JCXJlZyB8PSBPTUFQMjRYWF9QVUxMX0VOQTsKKwkJcmVnIHw9IE9NQVAyX1BVTExfRU5BOwogCWlmIChjZmctPnB1X3BkX3ZhbCkKLQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisJCXJlZyB8PSBPTUFQMl9QVUxMX1VQOwogCW9tYXAyX2NmZ19kZWJ1ZyhjZmcsIHJlZyk7CiAJb21hcF9jdHJsX3dyaXRlYihyZWcsIGNmZy0+bXV4X3JlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwpAQCAtMjY1LDcgKzQ3MSwyNiBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgb21hcDI0eHhfY2ZnX3JlZwkwCisjZGVmaW5lIG9tYXAyNHh4X2NmZ19yZWcJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAzNHh4X2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHJlZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCXJlZyB8PSBjZmctPm11eF92YWw7CisJb21hcDJfY2ZnX2RlYnVnKGNmZywgcmVnKTsKKwlvbWFwX2N0cmxfd3JpdGV3KHJlZywgY2ZnLT5tdXhfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9tYXAzNHh4X2NmZ19yZWcJTlVMTAogI2VuZGlmCiAKIGludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKQEAgLTI3NCw2ICs0OTksMTAgQEAKIAkJYXJjaF9tdXhfY2ZnLnBpbnMJPSBvbWFwMjR4eF9waW5zOwogCQlhcmNoX211eF9jZmcuc2l6ZQk9IE9NQVAyNFhYX1BJTlNfU1o7CiAJCWFyY2hfbXV4X2NmZy5jZmdfcmVnCT0gb21hcDI0eHhfY2ZnX3JlZzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDM0eHhfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMzRYWF9QSU5TX1NaOworCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAzNHh4X2NmZ19yZWc7CiAJfQogCiAJcmV0dXJuIG9tYXBfbXV4X3JlZ2lzdGVyKCZhcmNoX211eF9jZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTI5NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTAsMCArMSwxMTEzIEBACisvKgorICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisjIGRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisKKy8qIHB3cmRtX2xpc3QgY29udGFpbnMgYWxsIHJlZ2lzdGVyZWQgc3RydWN0IHBvd2VyZG9tYWlucyAqLworc3RhdGljIExJU1RfSEVBRChwd3JkbV9saXN0KTsKKworLyoKKyAqIHB3cmRtX3J3bG9jayBwcm90ZWN0cyBwd3JkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAtIGFsc28gcmV1c2VkIHRvCisgKiBwcm90ZWN0IHB3cmRtX2Nsa2Rtc1tdIGR1cmluZyBjbGtkbSBhZGQvZGVsIG9wcworICovCitzdGF0aWMgREVGSU5FX1JXTE9DSyhwd3JkbV9yd2xvY2spOworCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKK3N0YXRpYyB1MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9wd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCAqdGVtcF9wd3JkbTsKKworCXB3cmRtID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgdGVtcF9wd3JkbS0+bmFtZSkpIHsKKwkJCXB3cmRtID0gdGVtcF9wd3JkbTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHB3cmRtOworfQorCisvKiBfcHdyZG1fZGVwc19sb29rdXAgLSBsb29rIHVwIHRoZSBzcGVjaWZpZWQgcG93ZXJkb21haW4gaW4gYSBwd3JkbSBsaXN0ICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfcHdyZG1fZGVwc19sb29rdXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkJICAgICAgc3RydWN0IHB3cmRtX2RlcCAqZGVwcykKK3sKKwlzdHJ1Y3QgcHdyZG1fZGVwICpwZDsKKworCWlmICghcHdyZG0gfHwgIWRlcHMgfHwgIW9tYXBfY2hpcF9pcyhwd3JkbS0+b21hcF9jaGlwKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlmb3IgKHBkID0gZGVwczsgcGQ7IHBkKyspIHsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhwZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcGQtPnB3cmRtICYmIHBkLT5wd3JkbV9uYW1lKQorCQkJcGQtPnB3cmRtID0gcHdyZG1fbG9va3VwKHBkLT5wd3JkbV9uYW1lKTsKKworCQlpZiAocGQtPnB3cmRtID09IHB3cmRtKQorCQkJYnJlYWs7CisKKwl9CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCXJldHVybiBwZC0+cHdyZG07Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIHB3cmRtX2luaXQgLSBzZXQgdXAgdGhlIHBvd2VyZG9tYWluIGxheWVyCisgKgorICogTG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIHBvd2VyZG9tYWlucywgcmVnaXN0ZXJpbmcgYWxsIHRoYXQgYXJlCisgKiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkIGFuZCBub3QKKyAqIG51bGwsIGFsbCBvZiB0aGUgcmVmZXJlbmNlZCBwb3dlcmRvbWFpbnMgd2lsbCBiZSByZWdpc3RlcmVkLiAgTm8KKyAqIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICoqcCA9IE5VTEw7CisKKwlpZiAocHdyZG1fbGlzdCkKKwkJZm9yIChwID0gcHdyZG1fbGlzdDsgKnA7IHArKykKKwkJCXB3cmRtX3JlZ2lzdGVyKCpwKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gcmVnaXN0ZXIKKyAqCisgKiBBZGRzIGEgcG93ZXJkb21haW4gdG8gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgcG93ZXJkb21haW4gaXMKKyAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisJaWYgKF9wd3JkbV9sb29rdXAocHdyZG0tPm5hbWUpKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gcHJfdW5sb2NrOworCX0KKworCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisJcmV0ID0gMDsKKworcHJfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB1bnJlZ2lzdGVyCisgKgorICogUmVtb3ZlcyBhIHBvd2VyZG9tYWluIGZyb20gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHB3cmRtIGFyZ3VtZW50IGlzIE5VTEwuCisgKi8KK2ludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHdyZG0tPm5vZGUpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9sb29rdXAgLSBsb29rIHVwIGEgcG93ZXJkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgorICogQG5hbWU6IG5hbWUgb2YgcG93ZXJkb21haW4KKyAqCisgKiBGaW5kIGEgcmVnaXN0ZXJlZCBwb3dlcmRvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogc3RydWN0IHBvd2VyZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXB3cmRtID0gX3B3cmRtX2xvb2t1cChuYW1lKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwd3JkbTsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKKyAqCisgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KKyAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCisgKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCisgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKKyAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KKyAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnRlbXBfcHdyZG07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJcmV0ID0gKCpmbikodGVtcF9wd3JkbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2FkZF9jbGtkbSAtIGFkZCBhIGNsb2NrZG9tYWluIHRvIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gYWRkIHRoZSBjbG9ja2RvbWFpbiB0bworICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byBhc3NvY2lhdGUgd2l0aCBhIHBvd2VyZG9tYWluCisgKgorICogQXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIHdpdGggYSBwb3dlcmRvbWFpbiAncHdyZG0nLiAgVGhpcworICogZW5hYmxlcyB0aGUgdXNlIG9mIHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKCkuICBSZXR1cm5zIC1FSU5WQUwgaWYKKyAqIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ7CisgKiBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtIHx8ICFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGFzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIHdpdGggcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspIHsKKwkJaWYgKCFwd3JkbS0+cHdyZG1fY2xrZG1zW2ldKQorCQkJYnJlYWs7CisjaWZkZWYgREVCVUcKKwkJaWYgKHB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPT0gY2xrZG0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHBhY19leGl0OworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaW5jcmVhc2UgUFdSRE1fTUFYX0NMS0RNUyBmb3IgIgorCQkJICJwd3JkbSAlcyBjbGtkbSAlc1xuIiwgcHdyZG0tPm5hbWUsIGNsa2RtLT5uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwYWNfZXhpdDsKKwl9CisKKwlwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID0gY2xrZG07CisKKwlyZXQgPSAwOworCitwYWNfZXhpdDoKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2RlbF9jbGtkbSAtIHJlbW92ZSBhIGNsb2NrZG9tYWluIGZyb20gYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBhZGQgdGhlIGNsb2NrZG9tYWluIHRvCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgcG93ZXJkb21haW4KKyAqCisgKiBEaXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGZyb20gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb2ludGVyczsKKyAqIC1FTk9FTlQgaWYgdGhlIGNsa2RtIHdhcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3dlcmRvbWFpbiwgb3IgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgaTsKKworCWlmICghcHdyZG0gfHwgIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogZGlzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIGZyb20gcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspCisJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID09IGNsa2RtKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogY2xrZG0gJXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwd3JkbSAiCisJCQkgIiVzID8hXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHBkY19leGl0OworCX0KKworCXB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPSBOVUxMOworCisJcmV0ID0gMDsKKworcGRjX2V4aXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaF9jbGtkbSAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCBjbGtkbSBpbiBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGl0ZXJhdGUgb3ZlcgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggY2xvY2tkb21haW4gaW4gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiB0aGUgcHdyZG1fcndsb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIG5vIHBvd2VyZG9tYWluIHN0cnVjdHVyZQorICogbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaAorICogaGFyZHdhcmUgcG93ZXJkb21haW4gY29udHJvbCBmdW5jdGlvbnMgYXJlIGZpbmUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IG9yIHBhc3NlcyBhbG9uZyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkgaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkJICAgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9DTEtETVMgJiYgIXJldDsgaSsrKQorCQlyZXQgPSAoKmZuKShwd3JkbSwgcHdyZG0tPnB3cmRtX2Nsa2Rtc1tpXSk7CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBwd3JkbV9hZGRfd2tkZXAgLSBhZGQgYSB3YWtldXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogV2hlbiB0aGUgcG93ZXJkb21haW4gcmVwcmVzZW50ZWQgYnkgcHdyZG0yIHdha2VzIHVwIChkdWUgdG8gYW4KKyAqIGludGVycnVwdCksIHdha2UgdXAgcHdyZG0xLglJbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgT01BUCwKKyAqIHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZCB0byByZWR1Y2Ugd2FrZXVwIGxhdGVuY3kgb2YgdGhlIGRlcGVuZGVudAorICogcG93ZXJkb21haW4uICBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbgorICogcG9pbnRlcnMsIC1FTk9FTlQgaWYgcHdyZG0yIGNhbm5vdCB3YWtlIHVwIHB3cmRtMSBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwID0gX3B3cmRtX2RlcHNfbG9va3VwKHB3cmRtMiwgcHdyZG0xLT53a2RlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKKwkJCSAiJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCQlyZXR1cm4gSVNfRVJSKHApOworCX0KKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgd2lsbCB3YWtlIHVwICVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwlwcm1fc2V0X21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICBwd3JkbTEtPnByY21fb2ZmcywgUE1fV0tERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZGVsX3drZGVwIC0gcmVtb3ZlIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiB3YWtlIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogdXAgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQorICoKKyAqIFJlbW92ZSBhIHdha2V1cCBkZXBlbmRlbmN5IHRoYXQgY2F1c2VzIHB3cmRtMSB0byB3YWtlIHVwIHdoZW4gcHdyZG0yCisgKiB3YWtlcyB1cC4gIFJldHVybnMgLUVJTlZBTCBpZiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluCisgKiBwb2ludGVycywgLUVOT0VOVCBpZiBwd3JkbTIgY2Fubm90IHdha2UgdXAgcHdyZG0xIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9kZWxfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPndrZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzIGFmdGVyICVzICIKKwkJICJ3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3drZGVwIC0gcmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSB3YWtldXAgZGVwZW5kZW5jeSBleGlzdHMgd2hlcmVpbiBwd3JkbTEgd2lsbCBiZQorICogYXdva2VuIHdoZW4gcHdyZG0yIHdha2VzIHVwOyAwIGlmIGRlcGVuZGVuY3kgaXMgbm90IHNldDsgLUVJTlZBTAorICogaWYgZWl0aGVyIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgaW52YWxpZDsgb3IgLUVOT0VOVCBpZiB0aGUgaGFyZHdhcmUKKyAqIGlzIGluY2FwYWJsZS4KKyAqCisgKiBSRVZJU0lUOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHJlcHJlc2VudHMgc29mdHdhcmUtY29udHJvbGxhYmxlCisgKiB3YWtldXAgZGVwZW5kZW5jaWVzLiAgV2FrZXVwIGRlcGVuZGVuY2llcyBmaXhlZCBpbiBoYXJkd2FyZSBhcmUgbm90CisgKiB5ZXQgaGFuZGxlZCBoZXJlLgorICovCitpbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICpwOworCisJaWYgKCFwd3JkbTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCisJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIFBNX1dLREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9hZGRfc2xlZXBkZXAgLSBhZGQgYSBzbGVlcCBkZXBlbmRlbmN5IGZyb20gcHdyZG0yIHRvIHB3cmRtMQorICogQHB3cmRtMTogcHJldmVudCB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGZyb20gc2xlZXBpbmcgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBpcyBhY3RpdmUgKHNvdXJjZSkKKyAqCisgKiBQcmV2ZW50IHB3cmRtMSBmcm9tIGF1dG9tYXRpY2FsbHkgZ29pbmcgaW5hY3RpdmUgKGFuZCB0aGVuIHRvCisgKiByZXRlbnRpb24gb3Igb2ZmKSBpZiBwd3JkbTIgaXMgc3RpbGwgYWN0aXZlLgkgUmV0dXJucyAtRUlOVkFMIGlmCisgKiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluIHBvaW50ZXJzIG9yIGNhbGxlZCBvbiBhIG1hY2hpbmUKKyAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBzb2Z0d2FyZS1jb25maWd1cmFibGUgaGFyZHdhcmUgc2xlZXAgZGVwZW5kZW5jaWVzLAorICogLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIGRlcGVuZGVuY3kgY2Fubm90IGJlIHNldCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyBpcyBhY3RpdmVcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwljbV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgcHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB3cmRtX2RlbF9zbGVlcGRlcCAtIHJlbW92ZSBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIEFsbG93IHB3cmRtMSB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIChhbmQgdGhlbiB0byByZXRlbnRpb24gb3IKKyAqIG9mZiksIGluZGVwZW5kZW50IG9mIHRoZSBhY3Rpdml0eSBzdGF0ZSBvZiBwd3JkbTIuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4gcG9pbnRlcnMgb3IgY2FsbGVkIG9uIGEgbWFjaGluZQorICogdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmNpZXMsCisgKiAtRU5PRU5UIGlmIHRoZSBzcGVjaWZpZWQgZGVwZW5kZW5jeSBjYW5ub3QgYmUgY2xlYXJlZCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIG5vIGxvbmdlciBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgIgorCQkgIiVzIGlzIGFjdGl2ZVxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJY21fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9zbGVlcGRlcCAtIHJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCisgKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIHB3cmRtMSB3aWxsCisgKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIHB3cmRtMiBpcyBhY3RpdmU7CisgKiAwIGlmIHB3cmRtMSdzIGF1dG9tYXRpYyBwb3dlciBzdGF0ZSBpbmFjdGl2aXR5IHRyYW5zaXRpb24gaXMgaW5kZXBlbmRlbnQKKyAqIG9mIHB3cmRtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCisgKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAorICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCisJCQkgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQgLSBnZXQgbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiBwb3dlcmRvbWFpbiBwd3JkbSwKKyAqIHN0YXJ0aW5nIHdpdGggMS4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLgorICovCitpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHdyZG0tPmJhbmtzOworfQorCisvKioKKyAqIHB3cmRtX3NldF9uZXh0X3B3cnN0IC0gc2V0IG5leHQgcG93ZXJkb21haW4gcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CisgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKKyAqCisgKiBTZXQgdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgorICogbWF5IG5vdCBlbnRlciB0aGlzIHN0YXRlIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIHN0YXRlCisgKiBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcworICogbnVsbCBvciBpZiB0aGUgcG93ZXIgc3RhdGUgaXMgaW52YWxpZCBmb3IgdGhlIHBvd2VyZG9taW4sIG9yIHJldHVybnMgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBwb3dlcnN0YXRlIGZvciAlcyB0byAlMHhcbiIsCisJCSBwd3JkbS0+bmFtZSwgcHdyc3QpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUF9QT1dFUlNUQVRFX01BU0ssCisJCQkgICAgIChwd3JzdCA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX25leHRfcHdyc3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBuZXh0IHBvd2VyIHN0YXRlCisgKiB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCwKKwkJCQkJT01BUF9QT1dFUlNUQVRFX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHdyc3QgLSBnZXQgY3VycmVudCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBwb3dlciBzdGF0ZS4JUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QsCisJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHJldl9wd3JzdCAtIGdldCBwcmV2aW91cyBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIE9NQVAzNDMwX1BNX1BSRVBXU1RTVCwKKwkJCQkJT01BUDM0MzBfTEFTVFBPV0VSU1RBVEVFTlRFUkVEX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3NldF9sb2dpY19yZXRzdCAtIHNldCBwb3dlcmRvbWFpbiBsb2dpYyBwb3dlciBzdGF0ZSB1cG9uIHJldGVudGlvbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBzZXQKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mIHRoZSBwb3dlcmRvbWFpbgorICogcHdyZG0gd2lsbCBlbnRlciB3aGVuIHRoZSBwb3dlcmRvbWFpbiBlbnRlcnMgcmV0ZW50aW9uLiAgVGhpcyB3aWxsCisgKiBiZSBlaXRoZXIgUkVURU5USU9OIG9yIE9GRiwgaWYgc3VwcG9ydGVkLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZQorICogcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgaXMgbm90IG5vdAorICogc3VwcG9ydGVkLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19sb2dpY19yZXQgJiAoMSA8PCBwd3JzdCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogc2V0dGluZyBuZXh0IGxvZ2ljIHBvd2Vyc3RhdGUgZm9yICVzIHRvICUweFxuIiwKKwkJIHB3cmRtLT5uYW1lLCBwd3JzdCk7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQorCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCisJICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCisJICogcG93ZXJkb21haW4uCisJICovCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUDM0MzBfTE9HSUNMMUNBQ0hFUkVUU1RBVEUsCisJCQkgICAgIChwd3JzdCA8PCBfX2ZmcyhPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURSkpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9zZXRfbWVtX29uc3QgLSBzZXQgbWVtb3J5IHBvd2VyIHN0YXRlIHdoaWxlIHBvd2VyZG9tYWluIE9OCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgT04gc3RhdGUuICBCYW5rCisgKiB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMgb2YKKyAqIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKKyAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKKyAqIHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rCisgKiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9vbnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KQoreworCXUzMiBtOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzX21lbV9vbltiYW5rXSAmICgxIDw8IHB3cnN0KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBzZXR0aW5nIG5leHQgbWVtb3J5IHBvd2Vyc3RhdGUgZm9yIGRvbWFpbiAlcyAiCisJCSAiYmFuayAlMHggd2hpbGUgcHdyZG0tT04gdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fc2V0X21lbV9yZXRzdCAtIHNldCBtZW1vcnkgcG93ZXIgc3RhdGUgd2hpbGUgcG93ZXJkb21haW4gaW4gUkVUCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgUkVURU5USU9OIHN0YXRlLgorICogQmFuayB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMKKyAqIG9mIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIHB3cnN0IHdpbGwgYmUgZWl0aGVyCisgKiBSRVRFTlRJT04gb3IgT0ZGLCBpZiBzdXBwb3J0ZWQuIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4KKyAqIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3Qgc3VwcG9ydGVkIGZvcgorICogdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rIGRvZXMgbm90IGV4aXN0CisgKiBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCkKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19tZW1fcmV0W2JhbmtdICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBtZW1vcnkgcG93ZXJzdGF0ZSBmb3IgZG9tYWluICVzICIKKwkJICJiYW5rICUweCB3aGlsZSBwd3JkbS1SRVQgdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbSA9IE9NQVAzNDMwX0wxRkxBVE1FTVJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlwcm1fcm13X21vZF9yZWdfYml0cyhtLCAocHdyc3QgPDwgX19mZnMobSkpLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgICBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0IC0gZ2V0IGN1cnJlbnQgcG93ZXJkb21haW4gbG9naWMgcmV0ZW50aW9uIHBvd2VyIHN0YXRlCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBjdXJyZW50IGxvZ2ljIHJldGVudGlvbiBwb3dlciBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mCisgKiBwb3dlcmRvbWFpbiBwd3JkbSB3aWxsIGVudGVyCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZQorICogY3VycmVudCBsb2dpYyByZXRlbnRpb24gcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwKKwkJCQkJT01BUDM0MzBfTE9HSUNTVEFURVNUKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QgLSBnZXQgcHJldmlvdXMgcG93ZXJkb21haW4gbG9naWMgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IHByZXZpb3VzIGxvZ2ljIHBvd2VyIHN0YXRlCisgKgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGxvZ2ljIHBvd2VyIHN0YXRlLiAgUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIHByZXZpb3VzIGxvZ2ljCisgKiBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgT01BUDM0MzBfUE1fUFJFUFdTVFNULAorCQkJCQlPTUFQMzQzMF9MQVNUTE9HSUNTVEFURUVOVEVSRUQpOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfbWVtX3B3cnN0IC0gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgZm9yIGJhbmsKKyAqIHguICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwgLUVFWElTVCBpZgorICogdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvcgorICogcmV0dXJucyB0aGUgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaykKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwgbSk7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdCAtIGdldCBwcmV2aW91cyBtZW1vcnkgYmFuayBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCisgKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKKyAqIHJldHVybnMgdGhlIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwd3JkbS0+YmFua3MgPCAoYmFuayArIDEpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlzd2l0Y2ggKGJhbmspIHsKKwljYXNlIDA6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMlNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9MQVNUU0hBUkVETDJDQUNIRUZMQVRTVEFURUVOVEVSRURfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltID0gT01BUDM0MzBfTEFTVEwyRkxBVE1FTVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAtRUVYSVNUOworCX0KKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQMzQzMF9QTV9QUkVQV1NUU1QsIG0pOworfQorCisvKioKKyAqIHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0IC0gY2xlYXIgcHJldmlvdXMgcG93ZXJzdGF0ZSByZWdpc3RlciBmb3IgYSBwd3JkbQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBjbGVhcgorICoKKyAqIENsZWFyIHRoZSBwb3dlcmRvbWFpbidzIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZ2lzdGVyLiAgQ2xlYXJzIHRoZQorICogZW50aXJlIHJlZ2lzdGVyLCBpbmNsdWRpbmcgbG9naWMgYW5kIG1lbW9yeSBiYW5rIHByZXZpb3VzIHBvd2VyIHN0YXRlcy4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFhYWCBzaG91bGQgZ2V0IHRoZSBwb3dlcmRvbWFpbidzIGN1cnJlbnQgc3RhdGUgaGVyZTsKKwkgKiB3YXJuICYgZmFpbCBpZiBpdCBpcyBub3QgT04uCisJICovCisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGNsZWFyaW5nIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZyBmb3IgJXNcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fd3JpdGVfbW9kX3JlZygwLCBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZW5hYmxlX2hkd3Jfc2FyIC0gZW5hYmxlIGF1dG9tYXRpYyBoYXJkd2FyZSBTQVIgZm9yIGEgcHdyZG0KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICoKKyAqCisgKiBFbmFibGUgYXV0b21hdGljIGNvbnRleHQgc2F2ZS1hbmQtcmVzdG9yZSB1cG9uIHBvd2VyIHN0YXRlIGNoYW5nZQorICogZm9yIHNvbWUgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluLiAgV2FybmluZzogdGhpcyBvbmx5IGFmZmVjdHMgYQorICogc3Vic2V0IG9mIGRldmljZXMgaW4gYSBwb3dlcmRvbWFpbjsgY2hlY2sgdGhlIFRSTSBjbG9zZWx5LiAgUmV0dXJucworICogLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIGlmIHRoZSBwb3dlcmRvbWFpbgorICogZG9lcyBub3Qgc3VwcG9ydCBhdXRvbWF0aWMgc2F2ZS1hbmQtcmVzdG9yZSwgb3IgcmV0dXJucyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogc2V0dGluZyBTQVZFQU5EUkVTVE9SRSBiaXRcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fcm13X21vZF9yZWdfYml0cygwLCAxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9kaXNhYmxlX2hkd3Jfc2FyIC0gZGlzYWJsZSBhdXRvbWF0aWMgaGFyZHdhcmUgU0FSIGZvciBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogRGlzYWJsZSBhdXRvbWF0aWMgY29udGV4dCBzYXZlLWFuZC1yZXN0b3JlIHVwb24gcG93ZXIgc3RhdGUgY2hhbmdlCisgKiBmb3Igc29tZSBkZXZpY2VzIGluIGEgcG93ZXJkb21haW4uICBXYXJuaW5nOiB0aGlzIG9ubHkgYWZmZWN0cyBhCisgKiBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNIGNsb3NlbHkuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogY2xlYXJpbmcgU0FWRUFORFJFU1RPUkUgYml0XG4iLAorCQkgcHdyZG0tPm5hbWUpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoMSA8PCBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwgMCwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1faGFzX2hkd3Jfc2FyIC0gdGVzdCB3aGV0aGVyIHBvd2VyZG9tYWluIHN1cHBvcnRzIGhhcmR3YXJlIFNBUgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgorICoKKyAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiAncHdyZG0nIHN1cHBvcnRzIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUKKyAqIGZvciBzb21lIGRldmljZXMsIG9yIDAgaWYgaXQgZG9lcyBub3QuCisgKi8KK2Jvb2wgcHdyZG1faGFzX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIChwd3JkbSAmJiBwd3JkbS0+ZmxhZ3MgJiBQV1JETV9IQVNfSERXUl9TQVIpID8gMSA6IDA7Cit9CisKKy8qKgorICogcHdyZG1fd2FpdF90cmFuc2l0aW9uIC0gd2FpdCBmb3IgcG93ZXJkb21haW4gcG93ZXIgdHJhbnNpdGlvbiB0byBmaW5pc2gKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gd2FpdCBmb3IKKyAqCisgKiBJZiB0aGUgcG93ZXJkb21haW4gcHdyZG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYSBzdGF0ZSB0cmFuc2l0aW9uLAorICogc3BpbiB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIHBvd2VyIHRyYW5zaXRpb24sIG9yIHVudGlsIGFuIGl0ZXJhdGlvbgorICogYmFpbG91dCB2YWx1ZSBpcyByZWFjaGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBwb2ludGVyIGlzIG51bGwsIC1FQUdBSU4gaWYgdGhlIGJhaWxvdXQgdmFsdWUgd2FzIHJlYWNoZWQsIG9yCisgKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fd2FpdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdTMyIGMgPSAwOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFJFVklTSVQ6IHB3cmRtX3dhaXRfdHJhbnNpdGlvbigpIG1heSBiZSBiZXR0ZXIgaW1wbGVtZW50ZWQKKwkgKiB2aWEgYSBjYWxsYmFjayBhbmQgYSBwZXJpb2RpYyB0aW1lciBjaGVjayAtLSBob3cgbG9uZyBkbyB3ZSBleHBlY3QKKwkgKiBwb3dlcmRvbWFpbiB0cmFuc2l0aW9ucyB0byB0YWtlPworCSAqLworCisJLyogWFhYIElzIHRoaXMgdWRlbGF5KCkgdmFsdWUgbWVhbmluZ2Z1bD8gKi8KKwl3aGlsZSAoKHBybV9yZWFkX21vZF9yZWcocHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVFNUKSAmCisJCU9NQVBfSU5UUkFOU0lUSU9OKSAmJgorCSAgICAgICAoYysrIDwgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSkKKwkJdWRlbGF5KDEpOworCisJaWYgKGMgPj0gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgorCQkgICAgICAgInBvd2VyZG9tYWluICVzIHRvIGNvbXBsZXRlIHRyYW5zaXRpb25cbiIsIHB3cmRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBjb21wbGV0ZWQgdHJhbnNpdGlvbiBpbiAlZCBsb29wc1xuIiwgYyk7CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1MWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy04IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgcG93ZXJkb21haW5zIHRoYXQgaGF2ZSBzb21lIGVsZW1lbnQKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0WFggY2hpcHMuCisgKgorICogQSBmZXcgbm90ZXM6CisgKgorICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKKyAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IHBvd2VyZG9tYWluOgorICogQW55IHBvd2VyZG9tYWluIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkKKyAqIG11c3QgaGF2ZSBhIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseQorICoganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqLworCisvKgorICogVGhlIG5hbWVzIGZvciB0aGUgRFNQL0lWQTIgcG93ZXJkb21haW5zIGFyZSBjb25mdXNpbmcuCisgKgorICogTW9zdCBPTUFQIGNoaXBzIGhhdmUgYW4gb24tYm9hcmQgRFNQLgorICoKKyAqIE9uIHRoZSAyNDIwLCB0aGlzIGlzIGEgJ0M1NSBEU1AgY2FsbGVkLCBzaW1wbHksIHRoZSBEU1AuICBJdHMKKyAqIHBvd2VyZG9tYWluIGlzIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIiAgT24gdGhlIDI0MzAsIHRoZQorICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgdGhlIElWQTIgb3IgSVZBMi4xLiAgSXRzCisgKiBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQgdGhlICJEU1AgcG93ZXIgZG9tYWluLiIJT24gdGhlIDM0MzAsCisgKiB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUgMjQzMCwgYWxzbyBrbm93biBhcyB0aGUgSVZBMjsgYnV0CisgKiBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUgIklWQTIgcG93ZXIgZG9tYWluLiIKKyAqCisgKiBUaGUgMjQyMCBhbHNvIGhhcyBzb21ldGhpbmcgY2FsbGVkIHRoZSBJVkEsIHdoaWNoIGlzIGEgc2VwYXJhdGUgQVJNCisgKiBjb3JlLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgRFNQL0lWQTIuCisgKgorICogSWRlYWxseSB0aGUgRFNQL0lWQTIgY291bGQganVzdCBiZSB0aGUgc2FtZSBwb3dlcmRvbWFpbiwgYnV0IHRoZSBQUkNNCisgKiBhZGRyZXNzIG9mZnNldCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgQzU1IGFuZCBDNjQgRFNQcy4KKyAqCisgKiBUaGUgb3Zlcmx5LXNwZWNpZmljIGRlcF9iaXQgbmFtZXMgYXJlIGR1ZSB0byBhIGJpdCBuYW1lIGNvbGxpc2lvbgorICogd2l0aCBDTV9GQ0xLRU5fe0RTUCxJVkEyfS4gIFRoZSBEU1AvSVZBMiBQTV9XS0RFUCBhbmQgQ01fU0xFRVBERVAgc2hpZnQKKyAqIHZhbHVlIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHBvd2VyZG9tYWluczogMgorICovCisKKy8qCisgKiBYWFggc2hvdWxkIGRlcF9iaXQgYmUgYSBtYXNrLCBzbyB3ZSBjYW4gdGVzdCB0byBzZWUgaWYgaXQgaXMgMCBhcyBhCisgKiBzYW5pdHkgY2hlY2s/CisgKiBYWFggZW5jb2RlIGhhcmR3YXJlIGZpeGVkIHdha2V1cCBkZXBlbmRlbmNpZXMgLS0gZXNwLiBmb3IgMzQzMCBDT1JFCisgKi8KKworI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKworLyogT01BUDIvMy1jb21tb24gcG93ZXJkb21haW5zIGFuZCB3YWtldXAgZGVwZW5kZW5jaWVzICovCisKKy8qCisgKiAyNDIwLzI0MzAgUE1fV0tERVBfR0ZYOiBDT1JFLCBNUFUsIFdLVVAKKyAqIDM0MzBFUzEgUE1fV0tERVBfR0ZYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogMzQzMEVTMiBQTV9XS0RFUF9TR1g6IGFkZHMgSVZBMiwgcmVtb3ZlcyBDT1JFCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGdmeF9zZ3hfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICAgQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwOiBDTV9TTEVFUERFUF9DQU06IE1QVQorICogMzQzMEVTMTogQ01fU0xFRVBERVBfR0ZYOiBNUFUKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1NHWDogTVBVCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9nZnhfc2xlZXBkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisjaW5jbHVkZSAicG93ZXJkb21haW5zMjR4eC5oIgorI2luY2x1ZGUgInBvd2VyZG9tYWluczM0eHguaCIKKworCisvKgorICogT01BUDIvMyBjb21tb24gcG93ZXJkb21haW5zCisgKi8KKworLyoKKyAqIFRoZSBHRlggcG93ZXJkb21haW4gaXMgbm90IHByZXNlbnQgb24gMzQzMEVTMiwgYnV0IGN1cnJlbnRseSB3ZSBkbyBub3QKKyAqIGhhdmUgYSBtYWNybyB0byBmaWx0ZXIgaXQgb3V0IGF0IGNvbXBpbGUtdGltZS4KKyAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZ2Z4X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBHRlhfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMxKSwKKwkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwX3B3cmRtID0geworCS5uYW1lCQk9ICJ3a3VwX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gV0tVUF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAk9IE9NQVBfRU5fV0tVUF9TSElGVCwKK307CisKKworCisvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXBbXSBfX2luaXRkYXRhID0geworCisJJmdmeF9wd3JkbSwKKwkmd2t1cF9wd3JkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJJmRzcF9wd3JkbSwKKwkmbXB1XzI0eHhfcHdyZG0sCisJJmNvcmVfMjR4eF9wd3JkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKwkmbWRtX3B3cmRtLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCSZpdmEyX3B3cmRtLAorCSZtcHVfMzR4eF9wd3JkbSwKKwkmbmVvbl9wd3JkbSwKKwkmY29yZV8zNHh4X3B3cmRtLAorCSZjYW1fcHdyZG0sCisJJmRzc19wd3JkbSwKKwkmcGVyX3B3cmRtLAorCSZlbXVfcHdyZG0sCisJJnNneF9wd3JkbSwKKwkmdXNiaG9zdF9wd3JkbSwKKyNlbmRpZgorCisJTlVMTAorfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwOGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogT01BUDI0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMjRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzI0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorCisvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorCisKKy8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KKworLyoKKyAqIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUAorICogMjQzMCBQTV9XS0RFUF9NRE06IHNhbWUgYXMgYWJvdmUKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgZHNwX21kbV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKgorICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAorICogMjQzMCBhZGRzIE1ETQorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibWRtX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gImdmeF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtZG1fcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiBQb3dlcmRvbWFpbnMgKi8KKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3BfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZHNwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMjRYWF9EU1BfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorCS5kZXBfYml0CSAgPSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQX1NISUZULAorCS53a2RlcF9zcmNzCSAgPSBkc3BfbWRtXzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKKwkud2tkZXBfc3JjcwkgID0gY29yZV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0xUkVUU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0yUkVUU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0zUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0xT05TVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMk9OU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTNPTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZgkgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworCisKKworLyoKKyAqIDI0MzAtc3BlY2lmaWMgcG93ZXJkb21haW5zCisgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisKKy8qIFhYWCAyNDMwIEtJTExET01BSU5XS1VQIGJpdD8gIE5vIGN1cnJlbnQgdXNlcnMgYXBwYXJlbnRseSAqLworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0geworCS5uYW1lCQkgID0gIm1kbV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3M2Y3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogT01BUDM0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMzRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzM0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorCisvKgorICogMzRYWC1zcGVjaWZpYyBwb3dlcmRvbWFpbnMsIGRlcGVuZGVuY2llcworICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCisvKgorICogMzQzMDogUE1fV0tERVBfe1BFUixVU0JIT1NUfTogQ09SRSwgSVZBMiwgTVBVLCBXS1VQCisgKiAoVVNCSE9TVCBpcyBFUzIgb25seSkKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgcGVyX3VzYmhvc3Rfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDM0MzAgUE1fV0tERVBfTVBVOiBDT1JFLCBJVkEyLCBEU1MsIFBFUgorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMzR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJkc3NfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAicGVyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgaXZhMl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNzX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gInBlcl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDM0MzAgUE1fV0tERVBfe0NBTSxEU1N9OiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9kc3Nfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJ3a3VwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzA6IFBNX1dLREVQX05FT046IE1QVSAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgbmVvbl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIFNsZWVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyBmb3IgMzR4eC1zcGVjaWZpYyBwd3JkbXMgLSAzNFhYIG9ubHkgKi8KKworLyoKKyAqIDM0MzA6IENNX1NMRUVQREVQX3tEU1MsUEVSfTogTVBVLCBJVkEKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1VTQkhPU1Q6IE1QVSwgSVZBCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKworLyoKKyAqIFBvd2VyZG9tYWlucworICovCisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhMl9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJpdmEyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9JVkEyX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0lWQTJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IGl2YTJfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwKKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAorCQlbMl0gPSBQV1JTVFNfT0ZGX09OLAorCQlbM10gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMzR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzM0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9PTiwKKwl9LAorfTsKKworLyogTm8gd2tkZXBzIG9yIHNsZWVwZGVwcyBmb3IgMzR4eCBjb3JlIGFwcGFyZW50bHkgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zNHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTJSRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTFPTlNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0yT05TVEFURSAqLworCX0sCit9OworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9EU1MgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0geworCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfRFNTX01PRCwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHMsCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHNneF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJzZ3hfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IGdmeF9zZ3hfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSBjYW1fZ2Z4X3NsZWVwZGVwcywKKwkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY2FtX3B3cmRtID0geworCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfQ0FNX01PRCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBwZXJfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAicGVyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9QRVJfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfcHdyZG0gPSB7CisJLm5hbWUJCT0gImVtdV9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0VNVV9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBuZW9uX3B3cmRtID0geworCS5uYW1lCQkgID0gIm5lb25fcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX05FT05fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS53a2RlcF9zcmNzCSAgPSBuZW9uX3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHVzYmhvc3RfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAidXNiaG9zdF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDU0YzMyZjQuLjRhMzI4MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTMxMiw3ICszMTIsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQyCQkJCSgxIDw8IDMpCiAKIC8qIENNX1NMRUVQREVQX1BFUiwgUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9QRVIgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IGM2ZDE3YTMuLjQwMDIwNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCkBAIC0yOSw4ICsyOSwxMCBAQAogI2RlZmluZSBPTUFQMjRYWF9XS1VQMV9FTgkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfRFNQLCBQTV9XS0RFUF9NRE0gc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRU5fTVBVCQkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9FTl9DT1JFCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQgCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKIC8qCiAgKiBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0dGWCwgUE1fUFdTVENUUkxfRFNQLCBQTV9QV1NUQ1RSTF9NRE0KQEAgLTE0MCw4ICsxNDIsMTAgQEAKIC8qIDI0MzAgY2FsbHMgR0xPQkFMV01QVV9SU1QgIkdMT0JBTFdBUk1fUlNUIiBpbnN0ZWFkICovCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1BNX1dLREVQX01QVV9FTl9NRE0JCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVAkJNQorI2RlZmluZSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX01BU0sJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVIHNwZWNpZmljIGJpdHMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAppbmRleCBiNDY4NmJjLi41YjVlY2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaApAQCAtNjgsNyArNjgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9WUElOSURMRQkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9NUFUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fUEVSCQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfTUFTSwkJCQkoMSA8PCA3KQogCiAvKiBQTV9QV1NUQ1RSTF9JVkEyLCBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0NPUkUgc2hhcmVkIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfTUVNT1JZQ0hBTkdFCQkJCSgxIDw8IDMpCkBAIC03Nyw3ICs3OCw3IEBACiAjZGVmaW5lIE9NQVAzNDMwX0xPR0lDU1RBVEVTVAkJCQkoMSA8PCAyKQogCiAvKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX0NPUkUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfTEFTVExPR0lDU1RBVEVFTlRFUkVECQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0xBU1RMT0dJQ1NUQVRFRU5URVJFRAkJCSgxIDw8IDIpCiAKIC8qCiAgKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX01QVSwgUE1fUFJFUFdTVFNUX0NPUkUsCkBAIC0yNzgsOCArMjc5LDEwIEBACiAjZGVmaW5lIE9NQVAzNDMwX0VNVUxBVElPTl9NUFVfUlNUCQkJKDEgPDwgMTEpCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1MJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMgkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1NfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVAkJMgorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVICovCiAjZGVmaW5lIE9NQVAzNDMwX09GRkxPQURNT0RFX1NISUZUCQkJMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggYmJmNDFmYy4uZTRkYzRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBPTUFQX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKwkJCUlPX0FERFJFU1MoT01BUDJfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2Vsc2UKICNkZWZpbmUgT01BUDI0MjBfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKIAkJCUlPX0FERFJFU1MoT01BUDI0MjBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQpAQCAtMzA1LDcgKzMwNSw4IEBACiAgKiAzNDMwOiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX0RTUywgUE1fV0tERVBfQ0FNLAogICoJIFBNX1dLREVQX1BFUgogICovCi0jZGVmaW5lIE9NQVBfRU5fV0tVUAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUF9FTl9XS1VQX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUF9FTl9XS1VQX01BU0sJCQkJKDEgPDwgNCkKIAogLyoKICAqIDI0WFg6IFBNX1BXU1RDVFJMX01QVSwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggN2Q5NDQ0YS4uNGRjZjM5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBPTUFQMiBzZXJpYWwgc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgogICoKICAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKQEAgLTIyLDM4ICsyMiwzNCBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCi1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqdWFydF9pY2tbT01BUF9NQVhfTlJfUE9SVFNdOworc3RhdGljIHN0cnVjdCBjbGsgKnVhcnRfZmNrW09NQVBfTUFYX05SX1BPUlRTXTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSA3MiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSA3MywKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDNfQkFTRSwKIAkJLmlycQkJPSA3NCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKIAkJLmZsYWdzCQk9IDAKIAl9CkBAIC03MCw3ICs2Niw3IEBACiAJCQkJICAgIGludCB2YWx1ZSkKIHsKIAlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OwotCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKKwlfX3Jhd193cml0ZWIodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOwogfQogCiAvKgpAQCAtODYsMTAgKzgyLDI3IEBACiAJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfU1lTQywgKDB4MDIgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDApKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCgpCit2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlpZiAodWFydF9pY2tbaV0gJiYgdWFydF9mY2tbaV0pIHsKKwkJCWlmIChlbmFibGUpIHsKKwkJCQljbGtfZW5hYmxlKHVhcnRfaWNrW2ldKTsKKwkJCQljbGtfZW5hYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJY2xrX2Rpc2FibGUodWFydF9pY2tbaV0pOworCQkJCWNsa19kaXNhYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewogCWludCBpOwogCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICppbmZvOworCWNoYXIgbmFtZVsxNl07CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgpAQCAtOTcsOCArMTEwLDcgQEAKIAkgKiBpZiBub3QgbmVlZGVkLgogCSAqLwogCi0JaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEwNyw1OCArMTE5LDI2IEBACiAJCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhICsgaTsKIAogCQlpZiAoIShpbmZvLT5lbmFibGVkX3VhcnRzICYgKDEgPDwgaSkpKSB7Ci0JCQlwLT5tZW1iYXNlID0gMDsKKwkJCXAtPm1lbWJhc2UgPSBOVUxMOwogCQkJcC0+bWFwYmFzZSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQl1YXJ0MV9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfaWNrKTsKLQkJCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ljayIsIGkrMSk7CisJCXVhcnRfaWNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2lja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfaWNrXG4iLCBpKzEpOworCQkJdWFydF9pY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9pY2tbaV0pOwogCi0JCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfZmNrKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDJfaWNrKTsKLQkJCX0KLQotCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQyX2Zjayk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQzX2ljayk7Ci0JCQl9Ci0KLQkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOwotCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQotCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOwotCQkJZWxzZSB7Ci0JCQkJY2xrX2VuYWJsZSh1YXJ0M19mY2spOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ZjayIsIGkrMSk7CisJCXVhcnRfZmNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2Zja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfZmNrXG4iLCBpKzEpOworCQkJdWFydF9mY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9mY2tbaV0pOwogCiAJCW9tYXBfc2VyaWFsX3Jlc2V0KHApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhNzA2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxtYWNoL2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9wbS5oPgotCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKiBGaXJzdCBhZGRyZXNzIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2U/ICBhcHBhcmVudGx5IHZhbGlkIGZvciBPTUFQMiAmIDMgKi8KLSNkZWZpbmUgQV9TRFJDMF9WCQkoMHhDMDAwMDAwMCkKLQotCS50ZXh0Ci0KLS8qCi0gKiBGb3JjZXMgT01BUCBpbnRvIGlkbGUgc3RhdGUKLSAqCi0gKiBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKLSAqIGZvciBub3JtYWwgaWRsZXMuCi0gKgotICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKLSAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgotICovCi1FTlRSWShvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCkKLQlzdG1mZAlzcCEsIHtyMCwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIwLCAjMAkJCUAgY2xlYXIgZm9yIG1jciBzZXR1cAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlsZG1mZAlzcCEsIHtyMCwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0KLUVOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KQotCS53b3JkCS4gLSBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZAotCi0vKgotICogb21hcDI0MnhfY3B1X3N1c3BlbmQoKSAtIEZvcmNlcyBPTUFQIGludG8gZGVlcCBzbGVlcCBzdGF0ZSBieSBjb21wbGV0aW5nCi0gKiBTRFJDIHNodXRkb3duIHRoZW4gQVJNIHNodXRkb3duLiAgVXBvbiB3YWtlIE1QVSBpcyBiYWNrIG9uIHNvIGp1c3QgcmVzdG9yZQotICogU0RSQy4KLSAqCi0gKiBJbnB1dDoKLSAqIFIwIDoJRExMIGN0cmwgdmFsdWUgcHJlLVNsZWVwCi0gKiBSMSA6IFByb2Nlc3NvcitSZXZpc2lvbgotICoJMjQyMDogMHgyMSA9IDI0MnhFUzEsIDB4MjYgPSAyNDJ4RVMyLjIKLSAqCTI0MzA6IDB4MzEgPSAyNDMwRVMxLCAweDMyID0gMjQzMEVTMgotICoKLSAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgotICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCi0gKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KLSAqIGlmIGluIHVubG9ja2VkIG1vZGUuCi0gKgotICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKLSAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegotICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCi0gKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCi0gKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCi0gKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKLSAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KLSAqCi0gKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKLSAqIGF0IHdha2UKLSAqLwotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCi0Jc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAotCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAotCW5vcAotCW5vcAotCWxkcglyMywgQV9TRFJDX1BPV0VSCUAgYWRkciBvZiBzZHJjIHBvd2VyCi0JbGRyCXI0LCBbcjNdCQlAIHZhbHVlIG9mIHNkcmMgcG93ZXIKLQlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCi0JbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQotCXN0cglyNCwgW3IzXQkJQCBtYWtlIGl0IHNvCi0JbW92CXIyLCAjMAotCW5vcAotCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlub3AKLWxvb3A6Ci0Jc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAotCWJuZQlsb29wCi0KLQkvKiBUaGUgRFBMTCBoYXMgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCi0JYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCi0Jc3RyCXI0LCBbcjNdCQlAIHB1dCB2bGF1ZSBiYWNrLgotCWxkcglyNCwgQV9TRFJDMAkJQCBtYWtlIGEgY2xvY2sgaGFwcGVuCi0JbGRyCXI0LCBbcjRdCi0Jbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCi0JbW92cwlyMCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCi0JbGRybmUJcjEsIEFfU0RSQ19ETExBX0NUUkxfUwlAIGdldCBhZGRyIG9mIERMTCBjdHJsCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExBIHRvIGZvcmNlIERMTCByZWxvYWQKLQlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBETExCCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQKLQotCW1vdglyNSwgIzB4MTAwMAotbG9vcDI6Ci0Jc3VicwlyNSwgcjUsICMweDEKLQlibmUJbG9vcDIKLQkvKiByZXN1bWUqLwotCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgotCi1BX1NEUkNfUE9XRVI6Ci0JLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCi1BX1NEUkMwOgotCS53b3JkIEFfU0RSQzBfVgotQV9TRFJDX0RMTEFfQ1RSTF9TOgotCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX0RMTEFfQ1RSTCkKLQotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmRfc3opCi0JLndvcmQJLiAtIG9tYXAyNHh4X2NwdV9zdXNwZW5kCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzM2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBGaXhlZCBpZGxlIGxvb3Agc2xlZXAKKyAqIElnb3IgU3RvcHBhIDxpZ29yLnN0b3BwYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPG1hY2gvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CisKKyNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisKKy8qIEZpcnN0IGFkZHJlc3Mgb2YgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZT8gIGFwcGFyZW50bHkgdmFsaWQgZm9yIE9NQVAyICYgMyAqLworI2RlZmluZSBBX1NEUkMwX1YJCSgweEMwMDAwMDAwKQorCisJLnRleHQKKworLyoKKyAqIEZvcmNlcyBPTUFQIGludG8gaWRsZSBzdGF0ZQorICoKKyAqIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKCkgLSBUaGlzIGJpdCBvZiBjb2RlIGp1c3QgZXhlY3V0ZXMgdGhlIFdGSQorICogZm9yIG5vcm1hbCBpZGxlcy4KKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgZ2V0J3MgY29waWVkIHRvIGludGVybmFsIFNSQU0gYXQgYm9vdC4gV2hlbiB0aGUgT01BUAorICoJIHdha2VzIHVwIGl0IGNvbnRpbnVlcyBleGVjdXRpb24gYXQgdGhlIHBvaW50IGl0IHdlbnQgdG8gc2xlZXAuCisgKi8KK0VOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKQorCXN0bWZkCXNwISwge3IwLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjAsICMwCQkJQCBjbGVhciBmb3IgbWNyIHNldHVwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAlAIHdhaXQgZm9yIGludGVycnVwdAorCWxkbWZkCXNwISwge3IwLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworRU5UUlkob21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kCisKKy8qCisgKiBvbWFwMjR4eF9jcHVfc3VzcGVuZCgpIC0gRm9yY2VzIE9NQVAgaW50byBkZWVwIHNsZWVwIHN0YXRlIGJ5IGNvbXBsZXRpbmcKKyAqIFNEUkMgc2h1dGRvd24gdGhlbiBBUk0gc2h1dGRvd24uICBVcG9uIHdha2UgTVBVIGlzIGJhY2sgb24gc28ganVzdCByZXN0b3JlCisgKiBTRFJDLgorICoKKyAqIElucHV0OgorICogUjAgOglETEwgY3RybCB2YWx1ZSBwcmUtU2xlZXAKKyAqIFIxIDogU0RSQ19ETExBX0NUUkwKKyAqIFIyIDogU0RSQ19QT1dFUgorICoKKyAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgorICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCisgKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KKyAqIGlmIGluIHVubG9ja2VkIG1vZGUuCisgKgorICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKKyAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegorICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCisgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCisgKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCisgKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKKyAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KKyAqCisgKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKyAqIGF0IHdha2UKKyAqLworRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtY3IgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAorCW5vcAorCW5vcAorCWxkcglyNCwgW3IyXQkJQCByZWFkIFNEUkNfUE9XRVIKKwlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQorCXN0cglyNCwgW3IyXQkJQCBtYWtlIGl0IHNvCisJbW92CXIyLCAjMAorCW5vcAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlub3AKK2xvb3A6CisJc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAorCWJuZQlsb29wCisKKwkvKiBUaGUgRFBMTCBoYXMgdG8gYmUgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCisJYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCisJc3RyCXI0LCBbcjJdCQlAIHdyaXRlIHRvIFNEUkNfUE9XRVIKKwlsZHIJcjQsIEFfU0RSQzAJCUAgbWFrZSBhIGNsb2NrIGhhcHBlbgorCWxkcglyNCwgW3I0XQkJQCByZWFkIEFfU0RSQzAKKwlub3AJCQkJQCBzdGFydCBhdXRvIHJlZnJlc2ggb25seSBhZnRlciBjbGsgb2sKKwltb3ZzCXIwLCByMAkJCUAgc2VlIGlmIEREUiBvciBTRFIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEEgdG8gZm9yY2UgRExMIHJlbG9hZAorCWFkZG5lCXIxLCByMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEIgdG8gZm9yY2UgRExMIHJlbG9hZAorCisJbW92CXI1LCAjMHgxMDAwCitsb29wMjoKKwlzdWJzCXI1LCByNSwgIzB4MQorCWJuZQlsb29wMgorCS8qIHJlc3VtZSovCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0FfU0RSQzA6CisJLndvcmQgQV9TRFJDMF9WCisKK0VOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzE0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAzL3NyYW0uUworICoKKyAqIE9tYXAzIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvLmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisjaW5jbHVkZSAiY20uaCIKKworCS50ZXh0CisKKy8qCisgKiBDaGFuZ2UgZnJlcXVlbmN5IG9mIGNvcmUgZHBsbAorICogcjAgPSBzZHJjX3Jmcl9jdHJsIHIxID0gc2RyY19hY3RpbV9jdHJsYSByMiA9IHNkcmNfYWN0aW1fY3RybGIgcjMgPSBNMgorICovCitFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCisJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCisJY21wCXIzLCAjMHgyCisJYmxuZQljb25maWd1cmVfc2RyYworCWNtcAlyMywgIzB4MgorCWJsbmUJbG9ja19kbGwKKwljbXAJcjMsICMweDEKKwlibG5lCXVubG9ja19kbGwKKwlibAlzZHJhbV9pbl9zZWxmcmVmcmVzaAlAIHB1dCB0aGUgU0RSQU0gaW4gc2VsZiByZWZyZXNoCisJYmwgCWNvbmZpZ3VyZV9jb3JlX2RwbGwKKwlibAllbmFibGVfc2RyYworCWNtcAlyMywgIzB4MQorCWJsbmUJd2FpdF9kbGxfdW5sb2NrCisJY21wCXIzLCAjMHgyCisJYmxuZQl3YWl0X2RsbF9sb2NrCisJY21wCXIzLCAjMHgxCisJYmxuZQljb25maWd1cmVfc2RyYworCW1vdiAJcjAsICMwIAkJCUAgcmV0dXJuIHZhbHVlCisJbGRtZmQJc3AhLCB7cjEtcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgordW5sb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJb3JyCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitsb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJYmljCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitzZHJhbV9pbl9zZWxmcmVmcmVzaDoKKwltb3YJcjUsICMweDAJCUAgTW92ZSAwIHRvIFI1CisJbWNyCXAxNSwgMCwgcjUsIGM3LCBjMTAsIDUJQCBtZW1vcnkgYmFycmllcgorCWxkcglyNCwgb21hcDNfc2RyY19wb3dlcglAIHJlYWQgdGhlIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjUsIFtyNF0JCUAgcmVhZCB0aGUgY29udGVudHMgb2YgU0RSQ19QT1dFUgorCW9yciAJcjUsIHI1LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJc3RyIAlyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIHRvIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQlAIHJlYWQgdGhlIENNX0lDTEtFTjFfQ09SRSByZWcKKwlsZHIJcjUsIFtyNF0KKwliaWMJcjUsIHI1LCAjMHgyCQlAIGRpc2FibGUgaWNsayBiaXQgZm9yIFNSREMKKwlzdHIgCXI1LCBbcjRdCit3YWl0X3NkcmNfaWRsZToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIgCXI1LCBbcjRdCisJYW5kIAlyNSwgcjUsICMweDIJCUAgY2hlY2sgZm9yIFNEUkMgaWRsZQorCWNtcCAJcjUsICMyCisJYm5lIAl3YWl0X3NkcmNfaWRsZQorCWJ4IAlscgorY29uZmlndXJlX2NvcmVfZHBsbDoKKwlsZHIgCXI0LCBvbWFwM19jbV9jbGtzZWwxX3BsbAorCWxkcglyNSwgW3I0XQorCWxkcglyNiwgY29yZV9tMl9tYXNrX3ZhbAlAIG1vZGlmeSBtMiBmb3IgY29yZSBkcGxsCisJYW5kCXI1LCByNSwgcjYKKwlvcnIJcjUsIHI1LCByMywgbHNsICMweDFCCUAgcjMgY29udGFpbnMgdGhlIE0yIHZhbAorCXN0cglyNSwgW3I0XQorCW1vdiAJcjUsICMweDgwMAkJQCB3YWl0IGZvciB0aGUgY2xvY2sgdG8gc3RhYmlsaXNlCisJY21wCXIzLCAjMgorCWJuZQl3YWl0X2Nsa19zdGFibGUKKwlieAlscgord2FpdF9jbGtfc3RhYmxlOgorCXN1YnMgCXI1LCByNSwgIzEKKwlibmUJd2FpdF9jbGtfc3RhYmxlCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYngJbHIKK2VuYWJsZV9zZHJjOgorCWxkciAJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQorCWxkcglyNSwgW3I0XQorCW9yciAJcjUsIHI1LCAjMHgyCQlAIGVuYWJsZSBpY2xrIGJpdCBmb3IgU0RSQworCXN0ciAJcjUsIFtyNF0KK3dhaXRfc2RyY19pZGxlMToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIJcjUsIFtyNF0KKwlhbmQgCXI1LCByNSwgIzB4MgorCWNtcAlyNSwgIzAKKwlibmUJd2FpdF9zZHJjX2lkbGUxCisJbGRyCXI0LCBvbWFwM19zZHJjX3Bvd2VyCisJbGRyCXI1LCBbcjRdCisJYmljIAlyNSwgcjUsICMweDQwCisJc3RyIAlyNSwgW3I0XQorCWJ4CWxyCit3YWl0X2RsbF9sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZCAJcjUsIHI1LCAjMHg0CisJY21wCXI1LCAjMHg0CisJYm5lCXdhaXRfZGxsX2xvY2sKKwlieAlscgord2FpdF9kbGxfdW5sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZAlyNSwgcjUsICMweDQKKwljbXAJcjUsICMweDAKKwlibmUJd2FpdF9kbGxfdW5sb2NrCisJYngJbHIKK2NvbmZpZ3VyZV9zZHJjOgorCWxkcglyNCwgb21hcDNfc2RyY19yZnJfY3RybAorCXN0cglyMCwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYQorCXN0cglyMSwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYgorCXN0cglyMiwgW3I0XQorCWJ4CWxyCisKK29tYXAzX3NkcmNfcG93ZXI6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCitvbWFwM19jbV9jbGtzZWwxX3BsbDoKKwkud29yZCBPTUFQMzRYWF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpCitvbWFwM19jbV9pZGxlc3QxX2NvcmU6CisJLndvcmQgT01BUDM0WFhfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSURMRVNUKQorb21hcDNfY21faWNsa2VuMV9jb3JlOgorCS53b3JkIE9NQVAzNFhYX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpCitvbWFwM19zZHJjX3Jmcl9jdHJsOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX1JGUl9DVFJMXzApCitvbWFwM19zZHJjX2FjdGltX2N0cmxhOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX0FDVElNX0NUUkxfQV8wKQorb21hcDNfc2RyY19hY3RpbV9jdHJsYjoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19BQ1RJTV9DVFJMX0JfMCkKK29tYXAzX3NkcmNfZGxsYV9zdGF0dXM6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9TVEFUVVMpCitvbWFwM19zZHJjX2RsbGFfY3RybDoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCitjb3JlX20yX21hc2tfdmFsOgorCS53b3JkIDB4MDdGRkZGRkYKKworRU5UUlkob21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KQorCS53b3JkCS4gLSBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwppbmRleCBhODJkYWQxLi5kZjgzYjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9ydGNfZGV2aWNlKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY214Mnh4X2luaXRfcnRjKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfcnRjKHZvaWQpIHt9CiAjZW5kaWYKIAogLyogMjcwMEcgZ3JhcGhpY3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IGQ4MjUyOGUuLjFmMjcyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMzM1LDkgKzMzNSw2IEBACiAJCXB4YTI3eF9ndWVzc19tYXhfZnJlcSgpOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKLQlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQlwb2xpY3ktPnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwOyAvKiBGSVhNRTogMSBtcywgYXNzdW1lZCAqLwogCXBvbGljeS0+Y3VyID0gZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDApOwkgICAvKiBjdXJyZW50IGZyZXEgKi8KIAlwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gcG9saWN5LT5jdXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwppbmRleCAxZWEwYzljLi45NjhjODMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKQEAgLTIxMCw3ICsyMTAsNiBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSAxMDQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gKGNwdV9pc19weGEzMjAoKSkgPyA4MDYwMDAgOiA2MjQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDA7IC8qIEZJWE1FOiAxIG1zLCBhc3N1bWVkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4X25hbmQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCmluZGV4IGViNGIxOTAuLmViMzVmY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCkBAIC00LDYgKzQsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAorc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7CisJdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCisJdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLworCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLworCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLworCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgeworCXVpbnQxNl90CXJlYWQxOworCXVpbnQxNl90CXJlYWQyOworCXVpbnQxNl90CXByb2dyYW07CisJdWludDE2X3QJcmVhZF9zdGF0dXM7CisJdWludDE2X3QJcmVhZF9pZDsKKwl1aW50MTZfdAllcmFzZTsKKwl1aW50MTZfdAlyZXNldDsKKwl1aW50MTZfdAlsb2NrOworCXVpbnQxNl90CXVubG9jazsKKwl1aW50MTZfdAlsb2NrX3N0YXR1czsKK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKKworCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KKwl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KKwl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KKwl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCisJdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLworCXVpbnQzMl90IGNoaXBfaWQ7Cit9OworCiBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSB7CiAKIAkvKiB0aGUgZGF0YSBmbGFzaCBidXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFN0YXRpYyBNZW1vcnkKQEAgLTEyLDggKzQ5LDExIEBACiAJICovCiAJaW50CWVuYWJsZV9hcmJpdGVyOwogCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCXVuc2lnbmVkIGludAlucl9wYXJ0czsKKwljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkJKnBhcnRzOworCXVuc2lnbmVkIGludAkJCQlucl9wYXJ0czsKKworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqIAlmbGFzaDsKKwlzaXplX3QJCQkJCW51bV9mbGFzaDsKIH07CiAKIGV4dGVybiB2b2lkIHB4YTN4eF9zZXRfbmFuZF9pbmZvKHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oCmluZGV4IGE3MjgwM2YuLjhiY2U2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3Rvc2EuaApAQCAtNTksOCArNTksNiBAQAogICogVEM2MzkzWEIgR1BJT3MKICAqLwogI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRQkJKE5SX0JVSUxUSU5fR1BJTyArIDIgKiAxMikKLSNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPKGkpCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAoaSkpCi0jZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJT19CSVQoZ3BpbykJKDEgPDwgKGdwaW8gLSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSkpCiAKICNkZWZpbmUgVE9TQV9HUElPX1RHX09OCQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMCkKICNkZWZpbmUgVE9TQV9HUElPX0xfTVVURQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAxMzBlMzdlLi5hNmM0Njk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC03MDYsMTYgKzcwNiwzOSBAQAogCS5iYWRibG9ja19wYXR0ZXJuID0gJnRvc2FfdGM2MzkzeGJfbmFuZF9iYnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgdG9zYV90YzYzOTN4Yl9zZXR1cCA9IHsKK3N0YXRpYyBpbnQgdG9zYV90YzYzOTN4Yl9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0NBUkRfVkNDX09OLCAiQ0FSRF9WQ0NfT04iKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3JlcTsKKworCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19DQVJEX1ZDQ19PTiwgMSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9kaXI7CisKKwlyZXR1cm4gcmM7CisKK2Vycl9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7CitlcnJfcmVxOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdG9zYV90YzYzOTN4Yl90ZWFyZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB0b3NhX3RjNjM5M3hiX2RhdGEgPSB7CiAJLnNjcl9wbGwyY3IJPSAweDBjYzEsCiAJLnNjcl9ncGVyCT0gMHgzMzAwLAotCS5zY3JfZ3BvX2Rzcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKLQkuc2NyX2dwb19kb2Vjcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKIAogCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9TVEFSVCwKIAkuZ3Bpb19iYXNlCT0gVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsCisJLnNldHVwCQk9IHRvc2FfdGM2MzkzeGJfc2V0dXAsCisJLnRlYXJkb3duCT0gdG9zYV90YzYzOTN4Yl90ZWFyZG93biwKIAogCS5lbmFibGUJCT0gdG9zYV90YzYzOTN4Yl9lbmFibGUsCiAJLmRpc2FibGUJPSB0b3NhX3RjNjM5M3hiX2Rpc2FibGUsCkBAIC03MjMsNiArNzQ2LDggQEAKIAkucmVzdW1lCQk9IHRvc2FfdGM2MzkzeGJfcmVzdW1lLAogCiAJLm5hbmRfZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX25hbmRfY29uZmlnLAorCisJLnJlc3VtZV9yZXN0b3JlID0gMSwKIH07CiAKIApAQCAtNzMwLDcgKzc1NSw3IEBACiAJLm5hbWUJPSAidGM2MzkzeGIiLAogCS5pZAk9IC0xLAogCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfc2V0dXAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0YzYzOTN4Yl9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHRjNjM5M3hiX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGQ3NjMyZjYuLjRiMzEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtMjA0LDI1ICsyMDQsNTQgQEAKIAogLyogSW50ZXJydXB0IGhhbmRsaW5nICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2aXBlcl9pcnFfZW5hYmxlZF9tYXNrOworc3RhdGljIGNvbnN0IGludCB2aXBlcl9pc2FfaXJxc1tdID0geyAzLCA0LCA1LCA2LCA3LCAxMCwgMTEsIDEyLCA5LCAxNCwgMTUgfTsKK3N0YXRpYyBjb25zdCBpbnQgdmlwZXJfaXNhX2lycV9tYXBbXSA9IHsKKwkwLAkJLyogSVNBIGlycSAjMCwgaW52YWxpZCAqLworCTAsCQkvKiBJU0EgaXJxICMxLCBpbnZhbGlkICovCisJMCwJCS8qIElTQSBpcnEgIzIsIGludmFsaWQgKi8KKwkxIDw8IDAsCQkvKiBJU0EgaXJxICMzICovCisJMSA8PCAxLAkJLyogSVNBIGlycSAjNCAqLworCTEgPDwgMiwJCS8qIElTQSBpcnEgIzUgKi8KKwkxIDw8IDMsCQkvKiBJU0EgaXJxICM2ICovCisJMSA8PCA0LAkJLyogSVNBIGlycSAjNyAqLworCTAsCQkvKiBJU0EgaXJxICM4LCBpbnZhbGlkICovCisJMSA8PCA4LAkJLyogSVNBIGlycSAjOSAqLworCTEgPDwgNSwJCS8qIElTQSBpcnEgIzEwICovCisJMSA8PCA2LAkJLyogSVNBIGlycSAjMTEgKi8KKwkxIDw8IDcsCQkvKiBJU0EgaXJxICMxMiAqLworCTAsCQkvKiBJU0EgaXJxICMxMywgaW52YWxpZCAqLworCTEgPDwgOSwJCS8qIElTQSBpcnEgIzE0ICovCisJMSA8PCAxMCwJLyogSVNBIGlycSAjMTUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHZpcGVyX2lycV90b19iaXRtYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIHZpcGVyX2lzYV9pcnFfbWFwW2lycSAtIFBYQV9JU0FfSVJRKDApXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmlwZXJfYml0X3RvX2lycShpbnQgYml0KQoreworCXJldHVybiB2aXBlcl9pc2FfaXJxc1tiaXRdICsgUFhBX0lTQV9JUlEoMCk7Cit9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgdmlwZXJfaXJxID0gaXJxIC0gUFhBX0lTQV9JUlEoMCk7CisJaW50IHZpcGVyX2lycSA9IHZpcGVyX2lycV90b19iaXRtYXNrKGlycSk7CiAKLQlpZiAodmlwZXJfaXJxIDwgOCkKLQkJVklQRVJfTE9fSVJRX1NUQVRVUyA9IDEgPDwgdmlwZXJfaXJxOworCWlmICh2aXBlcl9pcnEgJiAweGZmKQorCQlWSVBFUl9MT19JUlFfU1RBVFVTID0gdmlwZXJfaXJxOwogCWVsc2UKLQkJVklQRVJfSElfSVJRX1NUQVRVUyA9IDEgPDwgKHZpcGVyX2lycSAtIDgpOworCQlWSVBFUl9ISV9JUlFfU1RBVFVTID0gKHZpcGVyX2lycSA+PiA4KTsKIH0KIAogc3RhdGljIHZvaWQgdmlwZXJfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4oMSA8PCAoaXJxIC0gUFhBX0lTQV9JUlEoMCkpKTsKKwl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4odmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrIHw9ICgxIDw8IChpcnEgLSBQWEFfSVNBX0lSUSgwKSkpOworCXZpcGVyX2lycV9lbmFibGVkX21hc2sgfD0gdmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcGVyX2lycV9wZW5kaW5nKHZvaWQpCkBAIC0yMzcsOCArMjY2LDEyIEBACiAKIAlwZW5kaW5nID0gdmlwZXJfaXJxX3BlbmRpbmcoKTsKIAlkbyB7CisJCS8qIHdlJ3JlIGluIGEgY2hhaW5lZCBpcnEgaGFuZGxlciwKKwkJICogc28gYWNrIHRoZSBpbnRlcnJ1cHQgYnkgaGFuZCAqLworCQlHRURSKFZJUEVSX0NQTERfR1BJTykgPSBHUElPX2JpdChWSVBFUl9DUExEX0dQSU8pOworCiAJCWlmIChsaWtlbHkocGVuZGluZykpIHsKLQkJCWlycSA9IFBYQV9JU0FfSVJRKDApICsgX19mZnMocGVuZGluZyk7CisJCQlpcnEgPSB2aXBlcl9iaXRfdG9faXJxKF9fZmZzKHBlbmRpbmcpKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCQl9CiAJCXBlbmRpbmcgPSB2aXBlcl9pcnFfcGVuZGluZygpOwpAQCAtMjU0LDE1ICsyODcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZpcGVyX2luaXRfaXJxKHZvaWQpCiB7Ci0JY29uc3QgaW50IGlzYV9pcnFzW10gPSB7IDMsIDQsIDUsIDYsIDcsIDEwLCAxMSwgMTIsIDksIDE0LCAxNSB9OwotCWludCBpcnE7CisJaW50IGxldmVsOwogCWludCBpc2FfaXJxOwogCiAJcHhhMjV4X2luaXRfaXJxKCk7CiAKIAkvKiBzZXR1cCBJU0EgSVJRcyAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgQVJSQVlfU0laRShpc2FfaXJxcyk7IGlycSsrKSB7Ci0JCWlzYV9pcnEgPSBpc2FfaXJxc1tpcnFdOworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IEFSUkFZX1NJWkUodmlwZXJfaXNhX2lycXMpOyBsZXZlbCsrKSB7CisJCWlzYV9pcnEgPSB2aXBlcl9iaXRfdG9faXJxKGxldmVsKTsKIAkJc2V0X2lycV9jaGlwKGlzYV9pcnEsICZ2aXBlcl9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpc2FfaXJxLCBoYW5kbGVfZWRnZV9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlzYV9pcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKaW5kZXggNzU3MzgwMC4uOWEzN2M4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2Jhc3QtbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9iYXN0LWlycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAjaWYgMAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCBmZWY2NDZjLi40ZTA3OTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBpbnQgczNjMjQxMF9jbGtjb25fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA4NzMwNzk3Li43ZDkxNGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDY4MmRmMjMuLjRjMjlhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKICNkZWZpbmUgU0hJRlRfMjQ0MFRYRiAoMTQtOSkKQEAgLTk5LDQgKzk5LDQgQEAKIAogLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yayAqLwogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlM+CisjaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggNjRiZjdlOS4uMjNjNDcwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NQVBfSAogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvbWFwLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9BRERSKHgpCQlTM0NfQUREUih4KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAppbmRleCA5MjFiMTNiLi40NmQ0NmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKQEAgLTE4LDYgKzE4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCSBudW1fY3M7CS8qIHRvdGFsIGNoaXBzZWxlY3RzICovCiAJaW50CQkJIGJ1c19udW07ICAgICAgIC8qIGJ1cyBudW1iZXIgdG8gdXNlLiAqLwogCisJdm9pZCAoKmdwaW9fc2V0dXApKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBlbmFibGUpOwogCXZvaWQgKCpzZXRfY3MpKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDcwOGU0NzQuLmFiMzk0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjdW5kZWYgUzNDMjQxMF9HUElPUkVHCiAjZGVmaW5lIFMzQzI0MTBfR1BJT1JFRyh4KSAoKFMzQzI0WFhfUEFfR1BJTyArICh4KSkpCiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvdW5jb21wcmVzcy5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgogCiBzdGF0aWMgaW5saW5lIGludCBpc19hcm05MjYodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwppbmRleCBmNWM1YzUzLi45MjE1MDM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIGludCBzM2MyNDEwX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IDUyN2Y4OGEuLmQwNjFmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IGU0MzY4ZTYuLjhkYjljNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNTUsOSArNTUsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDg1ZTcxMGYuLjk4NzE2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgpAQCAtNDAsMTAgKzQwLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGgxOTQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCAzZWNlMmQwLi44MjUwNTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuMzBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBjNGRmZTNlLi5kODI1NWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb3RvbTExX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIERldmljZSBhcmVhICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCmluZGV4IDk3YzEzMTkuLjY2MTgwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC00OCwxNyArNDgsMTcgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcXQyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGUwMDAwMDAwLCBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKzB4MDEwMDAwMDApLCBTWl8xTSwgTVRfREVWSUNFIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IGQ0OWU1OGEuLjE1MjUyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtNDYsMTIgKzQ2LDEyIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYwppbmRleCBjYzJlNzlmLi4zMDlkY2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCkBAIC00NCw5ICs0NCw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggZWQzYWNiMC4uOTQxMzUzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKaW5kZXggNzMzZjhhMi4uYTY5NzBmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKIGV4dGVybiB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCBiMWU2NThjLi5hYzc5YjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiAvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggYmUzN2YyMi4uZGQ1YjYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKIAkvKiBzM2MyNDEwX2NwdV9zdXNwZW5kCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCmluZGV4IGViNmZjMGIuLjYwNzhmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwppbmRleCA1ZmJhYWM2Li45NmQ5ZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKICAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCBkY2ZmZjZiLi5iYTA1OTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCmluZGV4IDQxNzIwZjIuLjYwMDBjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1wb3dlci5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjZGVmaW5lIElOVE1TSyhzdGFydCwgZW5kKSAoKDEgPDwgKChlbmQpICsgMSAtIChzdGFydCkpKSAtIDEpCiAjZGVmaW5lIElOVE1TS19TVUIoc3RhcnQsIGVuZCkgKElOVE1TSyhzdGFydCwgZW5kKSA8PCAoKHN0YXJ0IC0gUzNDMjQxMF9JUlFTVUIoMCkpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwppbmRleCBhZDk4MGExLi5iMDhmMThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+CiAKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgaml2ZV9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKaW5kZXggOGY4ZDkxMS4uYzcxOWI1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIC8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwppbmRleCBiYjliZjYzLi40Y2ZhMTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDEsMTEgKzQxLDExIEBACiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB2c3Rtc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwppbmRleCA5NTQwZWY3Li4yMTdlOWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgogCiBleHRlcm4gdm9pZCBzM2MyNDEyX3NsZWVwX2VudGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwppbmRleCA0MjQ0MGZjLi4zMTM3NTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lkbGUuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtcG93ZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvai5oPgpAQCAtNDIsMTEgKzQyLDExIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZuZGVmIENPTkZJR19DUFVfUzNDMjQxMl9PTkxZCiB2b2lkIF9faW9tZW0gKnMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCmluZGV4IDQwNTAzYTYuLmQxYzI5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCkBAIC00MSw4ICs0MSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBTM0MyNDQwIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCmluZGV4IGNkZDRlNmUuLjMyMzAzZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKQEAgLTIwLDEwICsyMCwxMCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMKaW5kZXggNGY3ZDA2Yi4uNTU0MDQ0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kc2MuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWRzYy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgogCiBpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwppbmRleCAzM2UzZWRlLi42M2M1YWI2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwpAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAvKiBXRFQvQUM5NyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCmluZGV4IDE5ZWIwZTUyLi5lMmJlY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KQEAgLTQ4LDkgKzQ4LDkgQEAKIAogI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCmluZGV4IGYwZjBjYzYuLjY2ODc2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNDIsOSArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDI0NDBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBOb3RoaW5nIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCmluZGV4IDQ5ZTgyOGQuLmE1NDYzMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwpAQCAtMzYsMTMgKzM2LDEzIEBACiAKIC8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbmV4Y29kZXJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCmluZGV4IDg1MTQ0YWEuLjIzNjFkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogb25ib2FyZCBwZXJpaHBlcmFsIG1hcCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCmluZGV4IGE0YzY5MDQuLjRkMTRjN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAKQEAgLTQ1LDEwICs0NSwxMCBAQAogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyByeDM3MTVfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBkdW1wIElTQSBzcGFjZSBzb21ld2hlcmUgdW51c2VkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYwppbmRleCA3YWM2MGI4Li5mZWZlYWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKQEAgLTMxLDIwICszMSwyMCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCmluZGV4IGM4MWNkYjMuLmFjMWY3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwpAQCAtMjksOSArMjksOSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQwX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQwX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwppbmRleCAxOGYyY2U0Li5lYTFhYTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogUzNDMjQ0MiBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCmluZGV4IGZiZjgyNjQuLjQ2NjNiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL3MzYzI0NDIuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0Mi5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCA2MDNiNWVhLi4yZjYwYmY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMzksOSArMzksOSBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0My5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKICAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwppbmRleCA1ZDllZTc3Li5mNzNjY2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jCmluZGV4IGU0NDM0MWQuLjBlMGQ2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvaXJxLmMKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAogI2RlZmluZSBJTlRNU0soc3RhcnQsIGVuZCkgKCgxIDw8ICgoZW5kKSArIDEgLSAoc3RhcnQpKSkgLSAxKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYwppbmRleCBmMGQxMTlkLi5hN2ZlNjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKQEAgLTMxLDIwICszMSwyMCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQzX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCmluZGV4IGM5NzNiNjguLmJiZWRkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYwpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NDNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwppbmRleCBmN2ZhMDM0Ny4uMjQ0ZDU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtMjI0LDcgKzIyNCw2IEBACiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IHNhMTF4MF9nZXRzcGVlZCgwKTsKLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IDU5MDAwOwogCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IDI4NzAwMDsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gQ1BVRlJFUV9FVEVSTkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk5YzhmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaWRlLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggSHVnbyBGaWVubmVzICYgTmljb2xhcyBQaXRyZQotICoKLSAqIDE4LWF1Zy0yMDAwOiBDbGVhbnVwIGJ5IEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKLSAqICAgICAgICAgICAgICBHZXQgcmlkIG9mIHRoZSBzcGVjaWFsIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBmdW5jdGlvbnMKLSAqICAgICAgICAgICAgICBhbmQgbWFrZSBhIGdlbmVyYWxpc2VkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsCi0gKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jZXJyb3IgIlRoaXMgY29kZSBpcyBicm9rZW4gYW5kIG5lZWRzIHVwZGF0ZSB0byBtYXRjaCB3aXRoIGN1cnJlbnQgaWRlIHN1cHBvcnQiCi0KLQotLyoKLSAqIFNldCB1cCBhIGh3IHN0cnVjdHVyZSBmb3IgYSBzcGVjaWZpZWQgZGF0YSBwb3J0LCBjb250cm9sIHBvcnQgYW5kIElSUS4KLSAqIFRoaXMgc2hvdWxkIGZvbGxvdyB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdXNlcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQlpbnQgaTsKLQlpbnQgcmVnaW5jciA9IDE7Ci0KLQkvKiBUaGUgRW1wZWcgYm9hcmQgaGFzIHRoZSBmaXJzdCB0d28gYWRkcmVzcyBsaW5lcyB1bnVzZWQgKi8KLQlpZiAobWFjaGluZV9pc19lbXBlZygpKQotCQlyZWdpbmNyID0gMSA8PCAyOwotCi0JLyogVGhlIExBUlQgZG9lc24ndCB1c2UgQTAgZm9yIElERSAqLwotCWlmIChtYWNoaW5lX2lzX2xhcnQoKSkKLQkJcmVnaW5jciA9IDEgPDwgMTsKLQotCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwotCi0JZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKLQkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnOwotCQlyZWcgKz0gcmVnaW5jcjsKLQl9Ci0KLQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKLX0KLQotLyoKLSAqIFRoaXMgcmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCBwb3J0cyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgSURFCi0gKiBkcml2ZXIuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWlkZV9pbml0X2RlZmF1bHRfaHdpZnModm9pZCkKLXsKLSAgICBpZiAobWFjaGluZV9pc19sYXJ0KCkpIHsKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0xBUlQKLSAgICAgICAgaHdfcmVnc190IGh3OwotCi0gICAgICAgIC8qIEVuYWJsZSBHUElPIGFzIGludGVycnVwdCBsaW5lICovCi0gICAgICAgIEdQRFIgJj0gfkxBUlRfR1BJT19JREU7Ci0Jc2V0X2lycV90eXBlKExBUlRfSVJRX0lERSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0gICAgICAgIC8qIHNldCBQQ01DSUEgaW50ZXJmYWNlIHRpbWluZyAqLwotICAgICAgICBNRUNSID0gMHgwMDA2MDAwNjsKLQotICAgICAgICAvKiBpbml0IHRoZSBpbnRlcmZhY2UgKi8KLQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgUENNQ0lBX0lPXzBfQkFTRSArIDB4MDAwMCwgUENNQ0lBX0lPXzBfQkFTRSArIDB4MTAwMCwgTlVMTCk7Ci0gICAgICAgIGh3LmlycSA9IExBUlRfSVJRX0lERTsKLSAgICAgICAgaWRlX3JlZ2lzdGVyX2h3KCZodyk7Ci0jZW5kaWYKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCAzMzA4MTRkLi5kMTE5Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTQyOCw3ICs0MjgsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAzCiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5NzJkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBTYXNjaGEgSGF1ZXIsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9OQU5EX0gKKyNkZWZpbmUgX19BU01fQVJDSF9OQU5EX0gKKworc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgeworCWludCB3aWR0aDsJLyogZGF0YSBidXMgd2lkdGggaW4gYnl0ZXMgKi8KKwlpbnQgaHdfZWNjOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCit9OworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTkFORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGI5MTcyMDYuLmE5NGYwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xNSw2ICsxNSw5IEBACiBjb25maWcgQVJDSF9PTUFQMgogCWJvb2wgIlRJIE9NQVAyIgogCitjb25maWcgQVJDSF9PTUFQMworCWJvb2wgIlRJIE9NQVAzIgorCiBlbmRjaG9pY2UKIAogY29tbWVudCAiT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMiCkBAIC0yOSw2ICszMiwzMCBAQAogCWRlcGVuZHMgb24gT01BUF9ERUJVR19ERVZJQ0VTCiAJZGVmYXVsdCB5IGlmIExFRFMgfHwgTEVEU19PTUFQX0RFQlVHCiAKK2NvbmZpZyBPTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHBvd2VyZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIHBvd2VyZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIHBvd2VyZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IHBvd2VyZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKK2NvbmZpZyBPTUFQX0RFQlVHX0NMT0NLRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIGNsb2NrZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIGNsb2NrZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIGNsb2NrZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IGNsb2NrZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKIGNvbmZpZyBPTUFQX1JFU0VUX0NMT0NLUwogCWJvb2wgIlJlc2V0IHVudXNlZCBjbG9ja3MgZHVyaW5nIGJvb3QiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKQEAgLTg4LDEzICsxMTUsMTMgQEAKIAogY29uZmlnIE9NQVBfMzJLX1RJTUVSCiAJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCiAJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcwogCSAgc3VwcG9ydCBmb3Igbm8gdGljayBkdXJpbmcgaWRsZS4gVGhlIDMyS0h6IHRpbWVyIHByb3ZpZGVzIGxlc3MKIAkgIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIE9NQVBfTVBVX1RJTUVSLiBUaGUgMzJLSHogdGltZXIgaXMKLQkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFggYW5kIDI0WFguCisJICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAxNlhYLCAyNFhYIGFuZCAzNFhYLgogCiBlbmRjaG9pY2UKIApAQCAtMTA5LDcgKzEzNiw3IEBACiAKIGNvbmZpZyBPTUFQX0RNX1RJTUVSCiAJYm9vbCAiVXNlIGR1YWwtbW9kZSB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYIHx8IEFSQ0hfT01BUDM0WFgKIAloZWxwCiAJIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBEdWFsLU1vZGUgdGltZXJzLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggMmM0MDUxYy4uZGVhZmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gY29tbW9uLm8gc3JhbS5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBcCi0JIHVzYi5vIGZiLm8KKwkgdXNiLm8gZmIubyBpby5vCiBvYmotbSA6PQogb2JqLW4gOj0KIG9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggOGJkZjBlYS4uMDg0M2I4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjQ4LDYgKzI0OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX29tYXAyX3NldF9nbG9iYWxzKHZvaWQpCiB7CisJb21hcDJfc2V0X2dsb2JhbHNfdGFwKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20ob21hcDJfZ2xvYmFscyk7CkBAIC0yNTgsMTIgKzI1OSwxMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXAyNDJ4X2dsb2JhbHMgPSB7Ci0JLnRhcAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoMHg0ODAxNDAwMCksCi0JLnNkcmMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NEUkNfQkFTRSksCi0JLnNtcwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UpLAotCS5jdHJsCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DVFJMX0JBU0UpLAotCS5wcm0JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1BSTV9CQVNFKSwKLQkuY20JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX0NNX0JBU0UpLAorCS5jbGFzcwk9IE9NQVAyNDJYX0NMQVNTLAorCS50YXAJPSBPTUFQMl9JT19BRERSRVNTKDB4NDgwMTQwMDApLAorCS5zZHJjCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9TRFJDX0JBU0UpLAorCS5zbXMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFKSwKKwkuY3RybAk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfQ1RSTF9CQVNFKSwKKwkucHJtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9QUk1fQkFTRSksCisJLmNtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFKSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzI0Mngodm9pZCkKQEAgLTI3NiwxMiArMjc4LDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKIAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0M3hfZ2xvYmFscyA9IHsKLQkudGFwCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUygweDQ5MDBhMDAwKSwKLQkuc2RyYwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU0RSQ19CQVNFKSwKLQkuc21zCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSksCi0JLmN0cmwJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UpLAotCS5jbQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfQ01fQkFTRSksCisJLmNsYXNzCT0gT01BUDI0M1hfQ0xBU1MsCisJLnRhcAk9IE9NQVAyX0lPX0FERFJFU1MoMHg0OTAwYTAwMCksCisJLnNkcmMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX1NEUkNfQkFTRSksCisJLnNtcwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UpLAorCS5jdHJsCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UpLAorCS5wcm0JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX1BSTV9CQVNFKSwKKwkuY20JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX0NNX0JBU0UpLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQzeCh2b2lkKQpAQCAtMjk0LDEyICsyOTcsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMzQzeF9nbG9iYWxzID0gewotCS50YXAJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKDB4NDgzMEEwMDApLAotCS5zZHJjCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TRFJDX0JBU0UpLAotCS5zbXMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFKSwKLQkuY3RybAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFKSwKLQkucHJtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9QUk1fQkFTRSksCi0JLmNtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9DTV9CQVNFKSwKKwkuY2xhc3MJPSBPTUFQMzQzWF9DTEFTUywKKwkudGFwCT0gT01BUDJfSU9fQUREUkVTUygweDQ4MzBBMDAwKSwKKwkuc2RyYwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfU0RSQ19CQVNFKSwKKwkuc21zCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TTVNfQkFTRSksCisJLmN0cmwJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSksCisJLnBybQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfUFJNX0JBU0UpLAorCS5jbQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfQ01fQkFTRSksCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA5NzE4N2ZhLi4wY2IyYjIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTIwLDE3ICsyMCwxNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC90Yy5oPgorI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tZW5lbGF1cy5oPgogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KKyNpbmNsdWRlIDxtYWNoL2RzcF9jb21tb24uaD4KIAogI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCiAKLSNpbmNsdWRlICIuLi9wbGF0LW9tYXAvZHNwL2RzcF9jb21tb24uaCIKLQogc3RhdGljIHN0cnVjdCBkc3BfcGxhdGZvcm1fZGF0YSBkc3BfcGRhdGEgPSB7CiAJLmtkZXZfbGlzdCA9IExJU1RfSEVBRF9JTklUKGRzcF9wZGF0YS5rZGV2X2xpc3QpLAogfTsKQEAgLTc2LDcgKzc2LDcgQEAKIHsKIAlzdGF0aWMgREVGSU5FX01VVEVYKGRzcF9wZGF0YV9sb2NrKTsKIAotCW11dGV4X2luaXQoJmtkZXYtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZrZGV2LT5sb2NrKTsKIAogCW11dGV4X2xvY2soJmRzcF9wZGF0YV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZrZGV2LT5lbnRyeSwgJmRzcF9wZGF0YS5rZGV2X2xpc3QpOwpAQCAtOTUsNiArOTUsMTAgQEAKIAogc3RhdGljIHZvaWQgb21hcF9pbml0X2twKHZvaWQpCiB7CisJLyogMjQzMCBhbmQgMzR4eCBrZXlwYWQgaXMgb24gVFdMNDAzMCAqLworCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuOworCiAJaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oMygpKSB7CiAJCW9tYXBfY2ZnX3JlZyhGMThfMTYxMF9LQkMwKTsKIAkJb21hcF9jZmdfcmVnKEQyMF8xNjEwX0tCQzEpOwpAQCAtMTU2LDEzICsxNjAsNiBAQAogewogCWludCBpOwogCi0JaWYgKHNpemUgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWdpc3RlcmVkIHRvbyBtYW55IE1jQlNQcyBwbGF0Zm9ybV9kYXRhLiIKLQkJCSIgVXNpbmcgbWF4aW11bSAoJWQpIGF2YWlsYWJsZS5cbiIsCi0JCQlPTUFQX01BWF9NQ0JTUF9DT1VOVCk7Ci0JCXNpemUgPSBPTUFQX01BWF9NQ0JTUF9DT1VOVDsKLQl9Ci0KIAlvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7CkBAIC01MzAsMTAgKzUyNyw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9kZXZpY2VzKHZvaWQpCiB7Ci0vKgotICogTmVlZCB0byBlbmFibGUgcmVsZXZhbnQgb25jZSBmb3IgMjQzMCBTRFAKLSAqLwotI2lmbmRlZiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwpAQCAtNTQzLDcgKzUzNiw2IEBACiAJb21hcF9pbml0X3V3aXJlKCk7CiAJb21hcF9pbml0X3dkdCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTYzYjY0NC4uNTBmOGI0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkvKiByZXF1ZXN0IGFuZCByZXNlcnZlIERNQSBjaGFubmVscyBmb3IgdGhlIGNoYWluICovCiAJZm9yIChpID0gMDsgaSA8IG5vX29mX2NoYW5zOyBpKyspIHsKIAkJZXJyID0gb21hcF9yZXF1ZXN0X2RtYShkZXZfaWQsIGRldl9uYW1lLAotCQkJCQljYWxsYmFjaywgMCwgJmNoYW5uZWxzW2ldKTsKKwkJCQkJY2FsbGJhY2ssIE5VTEwsICZjaGFubmVsc1tpXSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpbnQgajsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCkBAIC0yMjk3LDEzICsyMjk3LDEzIEBACiAJaW50IGNoLCByOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCW9tYXBfZG1hX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMV9ETUFfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAxX0RNQV9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVAxX0xPR0lDQUxfRE1BX0NIX0NPVU5UOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJb21hcF9kbWFfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CiAJCWRtYV9sY2hfY291bnQgPSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlvbWFwX2RtYV9iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKKwkJb21hcF9kbWFfYmFzZSA9IElPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlwcl9lcnIoIkRNQSBpbml0IGZhaWxlZCBmb3IgdW5zdXBwb3J0ZWQgb21hcFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCA2MDZmY2ZmLi45NjNjMzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGRtX3RpbWVyX2NvdW50OyBpKyspIHsKIAkJdGltZXIgPSAmZG1fdGltZXJzW2ldOwotCQl0aW1lci0+aW9fYmFzZSA9ICh2b2lkIF9faW9tZW0gKilpb19wMnYodGltZXItPnBoeXNfYmFzZSk7CisJCXRpbWVyLT5pb19iYXNlID0gSU9fQUREUkVTUyh0aW1lci0+cGh5c19iYXNlKTsKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJCWNoYXIgY2xrX25hbWVbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNTkzNWFlNC4uODY3OWZiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAvKgogICogT01BUDE1MTAgR1BJTyByZWdpc3RlcnMKICAqLwotI2RlZmluZSBPTUFQMTUxMF9HUElPX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmNlMDAwCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fQkFTRQkJSU9fQUREUkVTUygweGZmZmNlMDAwKQogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfSU5QVVQJMHgwMAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKICNkZWZpbmUgT01BUDE1MTBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC00MiwxMCArNDIsMTAgQEAKIC8qCiAgKiBPTUFQMTYxMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlYzAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiYzAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTQwMCkKKyNkZWZpbmUgT01BUDE2MTBfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweGZmZmJlYzAwKQorI2RlZmluZSBPTUFQMTYxMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmI0MDApCisjZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYmMwMCkKICNkZWZpbmUgT01BUDE2MTBfR1BJT19SRVZJU0lPTgkJMHgwMDAwCiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU1lTQ09ORklHCQkweDAwMTAKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TWVNTVEFUVVMJCTB4MDAxNApAQCAtNjcsMTIgKzY3LDEyIEBACiAvKgogICogT01BUDczMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmMwMDAKLSNkZWZpbmUgT01BUDczMF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiYzgwMAotI2RlZmluZSBPTUFQNzMwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJkMDAwCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmQ4MDAKLSNkZWZpbmUgT01BUDczMF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZTAwMAotI2RlZmluZSBPTUFQNzMwX0dQSU82X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJSU9fQUREUkVTUygweGZmZmJjMDAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYzgwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmQwMDApCisjZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJSU9fQUREUkVTUygweGZmZmJkODAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTAwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPNl9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmU4MDApCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX0lOUFVUCQkweDAwCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX09VVFBVVAkweDA0CiAjZGVmaW5lIE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC04MywxNiArODMsMTYgQEAKIC8qCiAgKiBvbWFwMjR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDE4MDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFhMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFjMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFlMDAwCisjZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxODAwMCkKKyNkZWZpbmUgT01BUDI0MlhfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweDQ4MDFhMDAwKQorI2RlZmluZSBPTUFQMjQyWF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4NDgwMWMwMDApCisjZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxZTAwMCkKIAotI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwQzAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwRTAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMDAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMjAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODBCNjAwMAorI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDkwMEMwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTAwRTAwMCkKKyNkZWZpbmUgT01BUDI0M1hfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDEwMDAwKQorI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwMTIwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0ODBCNjAwMCkKIAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgT01BUDI0WFhfR1BJT19TWVNDT05GSUcJCTB4MDAxMApAQCAtMTIyLDEzICsxMjIsMTQgQEAKICAqIG9tYXAzNHh4IHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KIAotI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODMxMDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1ODAwMAorI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDgzMTAwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1MDAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDUyMDAwKQorI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwNTQwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1NjAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzZfQkFTRQkJSU9fQUREUkVTUygweDQ5MDU4MDAwKQogCisjZGVmaW5lIE9NQVBfTVBVSU9fVkJBU0UJCUlPX0FERFJFU1MoT01BUF9NUFVJT19CQVNFKQogCiBzdHJ1Y3QgZ3Bpb19iYW5rIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0xNjAsNyArMTYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTYxMFs1XSA9IHsKLQl7IE9NQVBfTVBVSU9fQkFTRSwgICAgIElOVF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsICAgICBNRVRIT0RfTVBVSU99LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwgICAgIE1FVEhPRF9NUFVJT30sCiAJeyBPTUFQMTYxMF9HUElPMV9CQVNFLCBJTlRfR1BJT19CQU5LMSwJICAgIElIX0dQSU9fQkFTRSwgICAgICBNRVRIT0RfR1BJT18xNjEwIH0sCiAJeyBPTUFQMTYxMF9HUElPMl9CQVNFLCBJTlRfMTYxMF9HUElPX0JBTksyLCBJSF9HUElPX0JBU0UgKyAxNiwgTUVUSE9EX0dQSU9fMTYxMCB9LAogCXsgT01BUDE2MTBfR1BJTzNfQkFTRSwgSU5UXzE2MTBfR1BJT19CQU5LMywgSUhfR1BJT19CQVNFICsgMzIsIE1FVEhPRF9HUElPXzE2MTAgfSwKQEAgLTE3MCwxNCArMTcxLDE0IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE1MTBbMl0gPSB7Ci0JeyBPTUFQX01QVUlPX0JBU0UsICAgIElOVF9NUFVJTywgICAgICBJSF9NUFVJT19CQVNFLCBNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVBfTVBVSU9fVkJBU0UsICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CiB9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfNzMwWzddID0gewotCXsgT01BUF9NUFVJT19CQVNFLCAgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDczMF9HUElPMV9CQVNFLCAgSU5UXzczMF9HUElPX0JBTksxLCAgSUhfR1BJT19CQVNFLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzJfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMiwgIElIX0dQSU9fQkFTRSArIDMyLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzNfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMywgIElIX0dQSU9fQkFTRSArIDY0LAlNRVRIT0RfR1BJT183MzAgfSwKQEAgLTEzODksNyArMTM5MCw3IEBACiAKIAkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE2MTA7Ci0JCXJldiA9IG9tYXBfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCSAgICAgICAocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQwOCw3ICsxNDA5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA0OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQyeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQyeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQxNyw3ICsxNDE4LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA1OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQzeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQzeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQyOCw3ICsxNDI5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSBPTUFQMzRYWF9OUl9HUElPUzsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzM0eHg7Ci0JCXJldiA9IG9tYXBfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDM0eHggR1BJTyBoYXJkd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAogCQkJKHJldiA+PiA0KSAmIDB4MGYsIHJldiAmIDB4MGYpOwogCX0KQEAgLTE0MzcsMTAgKzE0MzgsOSBAQAogCQlpbnQgaiwgZ3Bpb19jb3VudCA9IDE2OwogCiAJCWJhbmsgPSAmZ3Bpb19iYW5rW2ldOwotCQliYW5rLT5iYXNlID0gSU9fQUREUkVTUyhiYW5rLT5iYXNlKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmJhbmstPmxvY2spOwogCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKLQkJCW9tYXBfd3JpdGV3KDB4RkZGRiwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CiAJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOwogCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCmluZGV4IGNmMWRjMDIuLjEwZDQ0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCkBAIC0zMCwxMCArMzAsMTIgQEAKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSAogCiAvKiBQbGFjZWhvbGRlciBmb3IgMjQzMFNEUCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCSAweDA4MDAwMzAwCisjZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCTB4MDgwMDAzMDAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJMTQ5CiAjZGVmaW5lIFNEUDI0MzBfQ1MwX0JBU0UJCTB4MDQwMDAwMDAKIAotI2RlZmluZSBUV0w0MDMwX0lSUU5VTQkJCUlOVF8yNFhYX1NZU19OSVJRCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBzZHAyNDMwX2ZsYXNoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzZHAyNDMwX3VzYl9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAppbmRleCBkNmYyYThlLi43MzFjODU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaApAQCAtMzEsNiArMzEsMTIgQEAKIAogZXh0ZXJuIHZvaWQgYXBvbGxvbl9tbWNfaW5pdCh2b2lkKTsKIAorc3RhdGljIGlubGluZSBpbnQgYXBvbGxvbl9wbHVzKHZvaWQpCit7CisJLyogVGhlIGFwb2xsb24gcGx1cyBoYXMgSURDT0RFIHJldmlzaW9uIDUgKi8KKwlyZXR1cm4gc3lzdGVtX3JldiAmIDB4YzA7Cit9CisKIC8qIFBsYWNlaG9sZGVyIGZvciBBUE9MTE9OIHNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCQk3NAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKaW5kZXggMTQ3MGNkMy4uN2MzZmEwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oNC5oCiAgKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAxNjEwIEg0IGJvYXJkLgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAyNDIwIEg0IGJvYXJkLgogICoKICAqIEluaXRpYWwgY3JlYXRpb24gYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+CiAgKgpAQCAtMjksNiArMjksOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDRfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDRfSAogCisvKiBNTUMgUHJvdG90eXBlcyAqLworZXh0ZXJuIHZvaWQgaDRfbW1jX2luaXQodm9pZCk7CisKIC8qIFBsYWNlaG9sZGVyIGZvciBINCBzcGVjaWZpYyBkZWZpbmVzICovCiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9INF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmUyNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMyBMRFAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9MRFBfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfTERQX0gKKworZXh0ZXJuIHZvaWQgdHdsNDAzMF9iY2lfYmF0dGVyeV9pbml0KHZvaWQpOworCisjZGVmaW5lIFRXTDQwMzBfSVJRTlVNCQlJTlRfMzRYWF9TWVNfTklSUQorCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX0xEUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MGQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAzIEJFQUdMRS4KKyAqCisgKiBJbml0aWFsIGNyZWF0aW9uIGJ5IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQM19CRUFHTEVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9ICisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWNhZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBib2FyZC1vdmVyby5oIChHdW1zdGl4IE92ZXJvKQorICoKKyAqIEluaXRpYWwgY29kZTogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PVkVST19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT1ZFUk9fSAorCisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfWEdBVEUJMTUKKyNkZWZpbmUgT1ZFUk9fR1BJT19XMldfTlJFU0VUCTE2CisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfTlJFU0VUCTE2NAorI2RlZmluZSBPVkVST19HUElPX1VTQkhfQ1BFTgkxNjgKKyNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKKworI2VuZGlmIC8qIF9fX19BU01fQVJDSF9PVkVST19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCA1NDQ0NTY0Li5jMjNjMTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC00NSw2ICs0NSw4IEBACiAJdW5zaWduZWQgY292ZXI6MTsKIAkvKiA0IHdpcmUgc2lnbmFsaW5nIGlzIG9wdGlvbmFsLCBhbmQgaXMgb25seSB1c2VkIGZvciBTRC9TRElPICovCiAJdW5zaWduZWQgd2lyZTQ6MTsKKwkvKiB1c2UgdGhlIGludGVybmFsIGNsb2NrICovCisJdW5zaWduZWQgaW50ZXJuYWxfY2xvY2s6MTsKIAlzMTYgcG93ZXJfcGluOwogCXMxNiBzd2l0Y2hfcGluOwogCXMxNiB3cF9waW47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggOTJmN2M3Mi4uNzE5Mjk4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMTUsNiArMTUsNyBAQAogCiBzdHJ1Y3QgbW9kdWxlOwogc3RydWN0IGNsazsKK3N0cnVjdCBjbG9ja2RvbWFpbjsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKQEAgLTc5LDYgKzgwLDggQEAKIAl1MzIJCQljbGtzZWxfbWFzazsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsCSpjbGtzZWw7CiAJc3RydWN0IGRwbGxfZGF0YQkqZHBsbF9kYXRhOworCWNvbnN0IGNoYXIJCSpjbGtkbV9uYW1lOworCXN0cnVjdCBjbG9ja2RvbWFpbgkqY2xrZG07CiAjZWxzZQogCV9fdTgJCQlyYXRlX29mZnNldDsKIAlfX3U4CQkJc3JjX29mZnNldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjUxZjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9ja2RvbWFpbi5oCisgKgorICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfT01BUF9DTE9DS0RPTUFJTl9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX09NQVBfQ0xPQ0tET01BSU5fSAorCisjaW5jbHVkZSA8bWFjaC9wb3dlcmRvbWFpbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorCisvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9TTEVFUAkJCSgxIDw8IDApCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9XQUtFVVAJCQkoMSA8PCAxKQorI2RlZmluZSBDTEtETV9DQU5fRU5BQkxFX0FVVE8JCQkoMSA8PCAyKQorI2RlZmluZSBDTEtETV9DQU5fRElTQUJMRV9BVVRPCQkJKDEgPDwgMykKKworI2RlZmluZSBDTEtETV9DQU5fSFdTVVAJCShDTEtETV9DQU5fRU5BQkxFX0FVVE8gfCBDTEtETV9DQU5fRElTQUJMRV9BVVRPKQorI2RlZmluZSBDTEtETV9DQU5fU1dTVVAJCShDTEtETV9DQU5fRk9SQ0VfU0xFRVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQKQorI2RlZmluZSBDTEtETV9DQU5fSFdTVVBfU1dTVVAJKENMS0RNX0NBTl9TV1NVUCB8IENMS0RNX0NBTl9IV1NVUCkKKworLyogT01BUDI0WFggQ01fQ0xLU1RDVFJMXyouQVVUT1NUQVRFXyogcmVnaXN0ZXIgYml0IHZhbHVlcyAqLworI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPCQkweDAKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPCQkweDEKKworLyogT01BUDNYWFggQ01fQ0xLU1RDVFJMXyouQ0xLVFJDVFJMXyogcmVnaXN0ZXIgYml0IHZhbHVlcyAqLworI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPCQkweDAKKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQCQkweDEKKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUAkJMHgyCisjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTwkJMHgzCisKKy8qCisgKiBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAtIGEgcG93ZXJkb21haW4gdGhhdCBzaG91bGQgaGF2ZSB3a2RlcHMKKyAqIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhIHBvd2VyZG9tYWluIHNob3VsZCBzdGF5IGFjdGl2ZSBpbiBod3N1cCBtb2RlOworICogYW5kIGNvbnZlcnNlbHksIHJlbW92ZWQgd2hlbiB0aGUgcG93ZXJkb21haW4gc2hvdWxkIGJlIGFsbG93ZWQgdG8gZ28KKyAqIGluYWN0aXZlIGluIGh3c3VwIG1vZGUuCisgKi8KK3N0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIHsKKworCS8qIE5hbWUgb2YgdGhlIHBvd2VyZG9tYWluIHRvIGFkZCBhIHdrZGVwL3NsZWVwZGVwIG9uICovCisJY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKworCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJLyogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBkZXAgaXMgdmFsaWQgb24gKi8KKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKworfTsKKworc3RydWN0IGNsb2NrZG9tYWluIHsKKworCS8qIENsb2NrZG9tYWluIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogUG93ZXJkb21haW4gZW5jbG9zaW5nIHRoaXMgY2xvY2tkb21haW4gKi8KKwljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCisJLyogQ0xLVFJDVFJML0FVVE9TVEFURSBmaWVsZCBtYXNrIGluIENNX0NMS1NUQ1RSTCByZWcgKi8KKwljb25zdCB1MTYgY2xrdHJjdHJsX21hc2s7CisKKwkvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisJY29uc3QgdTggZmxhZ3M7CisKKwkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGlzIHZhbGlkIG9uICovCisJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CisKKwkvKiBVc2Vjb3VudCB0cmFja2luZyAqLworCWF0b21pY190IHVzZWNvdW50OworCisJLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworfTsKKwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2Rtcywgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXBzKTsKK2ludCBjbGtkbV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBjbGtkbV91bnJlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpOworc3RydWN0IHBvd2VyZG9tYWluICpjbGtkbV9nZXRfcHdyZG0oc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKK3ZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK3ZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspOworaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggMDYwOTMxMS4uZWY3MGUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0zNCw2ICszNCw3IEBACiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSk7CiAjaWZkZWYgQ09ORklHX0kyQ19PTUFQCiBleHRlcm4gaW50IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKIAkJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLApAQCAtNDksNiArNTAsNyBAQAogCiAvKiBJTyBiYXNlcyBmb3IgdmFyaW91cyBPTUFQIHByb2Nlc3NvcnMgKi8KIHN0cnVjdCBvbWFwX2dsb2JhbHMgeworCXUzMgkJY2xhc3M7CQkvKiBPTUFQIGNsYXNzIHRvIGRldGVjdCAqLwogCXZvaWQgX19pb21lbQkqdGFwOwkJLyogQ29udHJvbCBtb2R1bGUgSUQgY29kZSAqLwogCXZvaWQgX19pb21lbQkqc2RyYzsJCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KIAl2b2lkIF9faW9tZW0JKnNtczsJCS8qIFNEUkFNIE1lbW9yeSBTY2hlZHVsZXIgKi8KQEAgLTYyLDYgKzY0LDcgQEAKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfMzQzeCh2b2lkKTsKIAogLyogVGhlc2UgZ2V0IGNhbGxlZCBmcm9tIG9tYXAyX3NldF9nbG9iYWxzX3h4eHgoKSwgZG8gbm90IGNhbGwgdGhlc2UgKi8KK3ZvaWQgb21hcDJfc2V0X2dsb2JhbHNfdGFwKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmgKaW5kZXggZTNmZDYyZC4uZGM5ODg2NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCkBAIC0xLDEzICsxLDEwIEBACi0jaWZuZGVmIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICi0KIC8qCiAgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbnRyb2wuaAogICoKICAqIE9NQVAyLzMgU3lzdGVtIENvbnRyb2wgTW9kdWxlIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKQEAgLTE2LDE0ICsxMywyMyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICisKICNpbmNsdWRlIDxtYWNoL2lvLmg+CiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIE9NQVAyNDJYX0NUUkxfUkVHQUREUihyZWcpCQkJCQlcCi0JKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0MlhfQ1RSTF9CQVNFICsgKHJlZykpCisJSU9fQUREUkVTUyhPTUFQMjQyWF9DVFJMX0JBU0UgKyAocmVnKSkKICNkZWZpbmUgT01BUDI0M1hfQ1RSTF9SRUdBRERSKHJlZykJCQkJCVwKLQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UgKyAocmVnKSkKKwlJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQogI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQorCUlPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFICsgKHJlZykpCisjZWxzZQorI2RlZmluZSBPTUFQMjQyWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMjQzWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgogICogQXMgZWxzZXdoZXJlLCB0aGUgIk9NQVAyXyIgcHJlZml4IGluZGljYXRlcyB0aGF0IHRoZSBtYWNybyBpcyB2YWxpZCBmb3IKQEAgLTEzNCw2ICsxNDAsNyBAQAogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzEzCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZmMpCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFTVBfU0VOU09SCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAyYjQpCiAKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGxpc3Qgb2YgcmVnaXN0ZXJzIGlzIG5vdCBjb21wcmVoZW5zaXZlIC0gdGhlcmUgYXJlIG1vcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDA1YWVlMGUuLmUwNDY0MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzQ2LDkgKzM0NiwxNCBAQAogCQlnZXRfc2lsX3JldmlzaW9uKHN5c3RlbV9yZXYpCiAKIC8qIFZhcmlvdXMgc2lsaWNvbiBtYWNyb3MgZGVmaW5lZCBoZXJlICovCisjZGVmaW5lIE9NQVAyNDJYX0NMQVNTCQkweDI0MjAwMDAwCiAjZGVmaW5lIE9NQVAyNDIwX1JFVl9FUzFfMAkweDI0MjAwMDAwCiAjZGVmaW5lIE9NQVAyNDIwX1JFVl9FUzJfMAkweDI0MjAxMDAwCisKKyNkZWZpbmUgT01BUDI0M1hfQ0xBU1MJCTB4MjQzMDAwMDAKICNkZWZpbmUgT01BUDI0MzBfUkVWX0VTMV8wCTB4MjQzMDAwMDAKKworI2RlZmluZSBPTUFQMzQzWF9DTEFTUwkJMHgzNDMwMDAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMxXzAJMHgzNDMwMDAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMyXzAJMHgzNDMwMTAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMyXzEJMHgzNDMwMjAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDFiMDAzOWIuLjFiMTFmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTM1LDYgKzM1LDE4IEBACiAjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKIAkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwNDAwMAlAIFVBUlQgMwogI2VuZGlmCisKKyNlbGlmCUNPTkZJR19BUkNIX09NQVAzCisJCW1vdmVxCVxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbW92bmUJXHJ4LCAjMHhkODAwMDAwMAlAIHZpcnR1YWwgYmFzZQorCQlvcnIJXHJ4LCBccngsICMweDAwMDZhMDAwCisjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwMjAwMAlAIFVBUlQgMgorI2VuZGlmCisjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAlAIFVBUlQgMworCQlhZGQJXHJ4LCBccngsICMweDAwMDA2MDAwCisjZW5kaWYKICNlbmRpZgogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggZDRlOTA0My4uMDMwMTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtNTUsOSArNTUsMTcgQEAKIDE1MTA6CiAJCS5lbmRtCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKICNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2luY2x1ZGUgPG1hY2gvb21hcDM0eHguaD4KKyNlbmRpZgorCisjZGVmaW5lIElOVENQU19TSVJfSVJRX09GRlNFVAkweDAwNDAJCS8qIEFjdGl2ZSBpbnRlcnJ1cHQgbnVtYmVyICovCiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCkBAIC03OSw3ICs4Nyw3IEBACiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4ZDhdIC8qIElSUSBwZW5kaW5nIHJlZyAzICovCiAJCWNtcAlcaXJxbnIsICMweDAKIDIyMjI6Ci0JCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSVJRX1NJUl9JUlFdCisJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUXQogCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZnBnYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKaW5kZXggYzkyZTRiNC4uZjE4NjRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKQEAgLTM0LDkgKzM0LDkgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKiBtYXBzIGluIHRoZSBGUEdBIHJlZ2lzdGVycyBhbmQgdGhlIEVUSFIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfQkFTRQkJMHhFODAwMDAwMAkvKiBWQSAqLwotI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUJCVNaXzRLCQkvKiBTSVpFICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQJCTB4MDQwMDAwMDAJLyogUEEgKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUJCVNaXzRLCQkJLyogU0laRSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX1NUQVJUCQkweDA0MDAwMDAwCQkvKiBQQSAqLwogCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRVRIUl9TVEFSVAkoSDJQMl9EQkdfRlBHQV9TVEFSVCArIDB4MzAwKQogI2RlZmluZSBIMlAyX0RCR19GUEdBX0ZQR0FfUkVWCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxMCkJLyogRlBHQSBSZXZpc2lvbiAqLwpAQCAtODUsOSArODUsOSBAQAogICogIE9NQVAtMTUxMCBGUEdBCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UJCQkweEU4MDAwMDAwCS8qIFZpcnR1YWwgKi8KLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9TSVpFCQkJU1pfNEsKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9TVEFSVAkJCTB4MDgwMDAwMDAJLyogUGh5c2ljYWwgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NJWkUJCVNaXzRLCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU1RBUlQJCTB4MDgwMDAwMDAJCS8qIFBBICovCiAKIC8qIFJldmlzaW9uICovCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0xPVwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDhjNzFlMjguLjk4ZTkwMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotI2RlZmluZSBPTUFQX01QVUlPX0JBU0UJCQkodm9pZCBfX2lvbWVtICopMHhmZmZiNTAwMAorI2RlZmluZSBPTUFQX01QVUlPX0JBU0UJCQkweGZmZmI1MDAwCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiAjZGVmaW5lIE9NQVBfTVBVSU9fSU5QVVRfTEFUQ0gJCTB4MDAKQEAgLTc2LDYgKzc2LDggQEAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGludCBncGlvLCBpbnQgaXNfaW5wdXQpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGludCBncGlvLCBpbnQgZW5hYmxlKTsKIGV4dGVybiBpbnQgb21hcF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pOworZXh0ZXJuIHZvaWQgb21hcDJfZ3Bpb19wcmVwYXJlX2Zvcl9yZXRlbnRpb24odm9pZCk7CitleHRlcm4gdm9pZCBvbWFwMl9ncGlvX3Jlc3VtZV9hZnRlcl9yZXRlbnRpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGVib3VuY2VfdGltZShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKaW5kZXggNmE4ZTA3Zi4uNDViNjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKQEAgLTExLDYgKzExLDkgQEAKICNpZm5kZWYgX19PTUFQMl9HUE1DX0gKICNkZWZpbmUgX19PTUFQMl9HUE1DX0gKIAorLyogTWF4aW11bSBOdW1iZXIgb2YgQ2hpcCBTZWxlY3RzICovCisjZGVmaW5lIEdQTUNfQ1NfTlVNCQk4CisKICNkZWZpbmUgR1BNQ19DU19DT05GSUcxCQkweDAwCiAjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMgkJMHgwNAogI2RlZmluZSBHUE1DX0NTX0NPTkZJRzMJCTB4MDgKQEAgLTIyLDYgKzI1LDkgQEAKICNkZWZpbmUgR1BNQ19DU19OQU5EX0FERFJFU1MJMHgyMAogI2RlZmluZSBHUE1DX0NTX05BTkRfREFUQQkweDI0CiAKKyNkZWZpbmUgR1BNQ19DT05GSUcJCTB4NTAKKyNkZWZpbmUgR1BNQ19TVEFUVVMJCTB4NTQKKwogI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JBUEJVUlNUX1NVUFAgICAgICgxIDw8IDMxKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRE1VTFRJUExFX1NVUFAgICgxIDw8IDMwKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfQVNZTkMgICAgICgwIDw8IDI5KQpAQCAtNzgsOSArODQsMTQgQEAKIAl1MTYgYWNjZXNzOwkJLyogU3RhcnQtY3ljbGUgdG8gZmlyc3QgZGF0YSB2YWxpZCBkZWxheSAqLwogCXUxNiByZF9jeWNsZTsJCS8qIFRvdGFsIHJlYWQgY3ljbGUgdGltZSAqLwogCXUxNiB3cl9jeWNsZTsJCS8qIFRvdGFsIHdyaXRlIGN5Y2xlIHRpbWUgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgb24gT01BUDM0MzAgKi8KKwl1MTYgd3JfYWNjZXNzOwkJLyogV1JBQ0NFU1NUSU1FICovCisJdTE2IHdyX2RhdGFfbXV4X2J1czsJLyogV1JEQVRBT05BRE1VWEJVUyAqLwogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3JvdW5kX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKHZvaWQpOwogCkBAIC05Miw1ICsxMDMsNiBAQAogZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CiBleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKTsKIGV4dGVybiBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpOworZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAwN2Y1ZDdmLi42NTg5ZGRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIERQTExfQ1RMCQkoMHhmZmZlY2YwMCkKIAogLyogRFNQIGNsb2NrIGNvbnRyb2wuIE11c3QgdXNlIF9fcmF3X3JlYWR3KCkgYW5kIF9fcmF3X3dyaXRldygpIHdpdGggdGhlc2UgKi8KLSNkZWZpbmUgRFNQX0NPTkZJR19SRUdfQkFTRSAgICAgKDB4ZTEwMDgwMDApCisjZGVmaW5lIERTUF9DT05GSUdfUkVHX0JBU0UgICAgIElPTUVNKDB4ZTEwMDgwMDApCiAjZGVmaW5lIERTUF9DS0NUTAkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDApCiAjZGVmaW5lIERTUF9JRExFQ1QxCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4NCkKICNkZWZpbmUgRFNQX0lETEVDVDIJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHg4KQpAQCAtMjgyLDggKzI4Miw4IEBACiAKICNpbmNsdWRlICJvbWFwNzMwLmgiCiAjaW5jbHVkZSAib21hcDE1MTAuaCIKLSNpbmNsdWRlICJvbWFwMjR4eC5oIgogI2luY2x1ZGUgIm9tYXAxNnh4LmgiCisjaW5jbHVkZSAib21hcDI0eHguaCIKICNpbmNsdWRlICJvbWFwMzR4eC5oIgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KQEAgLTMyMiw2ICszMjIsMTQgQEAKICNpbmNsdWRlICJib2FyZC0yNDMwc2RwLmgiCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRQorI2luY2x1ZGUgImJvYXJkLW9tYXAzYmVhZ2xlLmgiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09NQVBfTERQCisjaW5jbHVkZSAiYm9hcmQtbGRwLmgiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfQVBPTExPTgogI2luY2x1ZGUgImJvYXJkLWFwb2xsb24uaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDJhMzBiN2QuLmFkYzgzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTU1LDE0ICs1NSwxMyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKIAotI2RlZmluZSBJT19QSFlTCQkweEZGRkIwMDAwCi0jZGVmaW5lIElPX09GRlNFVAkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCi0jZGVmaW5lIElPX1NJWkUJCTB4NDAwMDAKLSNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgLSBJT19PRkZTRVQpCi0jZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQotI2RlZmluZSBPTUFQMV9JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSAtIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSArIElPX09GRlNFVCkKKyNkZWZpbmUgSU9fUEhZUwkJCTB4RkZGQjAwMDAKKyNkZWZpbmUgSU9fT0ZGU0VUCQkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCisjZGVmaW5lIElPX1NJWkUJCQkweDQwMDAwCisjZGVmaW5lIElPX1ZJUlQJCQkoSU9fUEhZUyAtIElPX09GRlNFVCkKKyNkZWZpbmUgX19JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgX19PTUFQMV9JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fdjJwKHZhKQkJKCh2YSkgKyBJT19PRkZTRVQpCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAKQEAgLTc0LDcgKzczLDYgQEAKICNkZWZpbmUgTDRfMjRYWF9WSVJUCTB4ZDgwMDAwMDAKICNkZWZpbmUgTDRfMjRYWF9TSVpFCVNaXzFNCQkvKiAxTUIgb2YgMTI4TUIgdXNlZCwgd2FudCAxTUIgc2VjdCAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKICNkZWZpbmUgTDRfV0tfMjQzWF9QSFlTCQlMNF9XS18yNDNYX0JBU0UJCS8qIDB4NDkwMDAwMDAgKi8KICNkZWZpbmUgTDRfV0tfMjQzWF9WSVJUCQkweGQ5MDAwMDAwCiAjZGVmaW5lIEw0X1dLXzI0M1hfU0laRQkJU1pfMU0KQEAgLTg4LDEzICs4NiwxMCBAQAogI2RlZmluZSBPTUFQMjQzWF9TTVNfVklSVAkweEZDMDAwMDAwCiAjZGVmaW5lIE9NQVAyNDNYX1NNU19TSVpFCVNaXzFNCiAKLSNlbmRpZgotCi0jZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCi0jZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCi0jZGVmaW5lIE9NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCi0jZGVmaW5lIGlvX3AydihwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSAtIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBJT19PRkZTRVQJCTB4OTAwMDAwMDAKKyNkZWZpbmUgX19JT19BRERSRVNTKHBhKQkoKHBhKSArIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBfX09NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIGlvX3YycCh2YSkJCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCiAKIC8qIERTUCAqLwogI2RlZmluZSBEU1BfTUVNXzI0WFhfUEhZUwlPTUFQMjQyMF9EU1BfTUVNX0JBU0UJLyogMHg1ODAwMDAwMCAqLwpAQCAtMTQ5LDkgKzE0NCw4IEBACiAKIAogI2RlZmluZSBJT19PRkZTRVQJCTB4OTAwMDAwMDAKLSNkZWZpbmUgSU9fQUREUkVTUyhwYSkJCSgocGEpICsgSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgT01BUDJfSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwotI2RlZmluZSBpb19wMnYocGEpCQkoKHBhKSArIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIF9fSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBfX09NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KICNkZWZpbmUgaW9fdjJwKHZhKQkJKCh2YSkgLSBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwogCiAvKiBEU1AgKi8KQEAgLTE2Nyw3ICsxNjEsMTQgQEAKIAogI2VuZGlmCiAKLSNpZm5kZWYgX19BU1NFTUJMRVJfXworI2RlZmluZSBJT19BRERSRVNTKHBhKQkJSU9NRU0oX19JT19BRERSRVNTKHBhKSkKKyNkZWZpbmUgT01BUDFfSU9fQUREUkVTUyhwYSkJSU9NRU0oX19PTUFQMV9JT19BRERSRVNTKHBhKSkKKyNkZWZpbmUgT01BUDJfSU9fQUREUkVTUyhwYSkJSU9NRU0oX19PTUFQMl9JT19BRERSRVNTKHBhKSkKKworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0oeCkJCXgKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpCQkoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopKHgpKQogCiAvKgogICogRnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgT01BUCBJTyByZWdpb24KQEAgLTE3OCwxMyArMTc5LDEzIEBACiAgKgkgLSBETyBOT1QgdXNlIGhhcmRjb2RlZCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBhbGxvdyBjaGFuZ2luZyB0aGUKICAqCSAgIElPIGFkZHJlc3Mgc3BhY2UgYWdhaW4gaWYgbmVlZGVkCiAgKi8KLSNkZWZpbmUgb21hcF9yZWFkYihhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKilJT19BRERSRVNTKGEpKQotI2RlZmluZSBvbWFwX3JlYWR3KGEpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlPX0FERFJFU1MoYSkpCi0jZGVmaW5lIG9tYXBfcmVhZGwoYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkYihhKQkJX19yYXdfcmVhZGIoSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkdyhhKQkJX19yYXdfcmVhZHcoSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkbChhKQkJX19yYXdfcmVhZGwoSU9fQUREUkVTUyhhKSkKIAotI2RlZmluZSBvbWFwX3dyaXRlYih2LGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICopSU9fQUREUkVTUyhhKSA9ICh2KSkKLSNkZWZpbmUgb21hcF93cml0ZXcodixhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlPX0FERFJFU1MoYSkgPSAodikpCi0jZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICAgKilJT19BRERSRVNTKGEpID0gKHYpKQorI2RlZmluZSBvbWFwX3dyaXRlYih2LGEpCV9fcmF3X3dyaXRlYih2LCBJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3dyaXRldyh2LGEpCV9fcmF3X3dyaXRldyh2LCBJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3dyaXRlbCh2LGEpCV9fcmF3X3dyaXRlbCh2LCBJT19BRERSRVNTKGEpKQogCiBleHRlcm4gdm9pZCBvbWFwMV9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDFfaW5pdF9jb21tb25faHcodm9pZCk7CkBAIC0xOTIsNiArMTkzLDEyIEBACiBleHRlcm4gdm9pZCBvbWFwMl9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9jb21tb25faHcodm9pZCk7CiAKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCxzLHQpCW9tYXBfaW9yZW1hcChwLHMsdCkKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJb21hcF9pb3VubWFwKHYpCisKK3ZvaWQgX19pb21lbSAqb21hcF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCB0eXBlKTsKK3ZvaWQgb21hcF9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNjJhYTdkZi4uYTI5MjlhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2RlZmluZSBJTlRfVUFSVDIJCSgxNSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfQlRfTUNTSTFUWAkJKDE2ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9CVF9NQ1NJMVJYCQkoMTcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX1NPU1NJX01BVENICQkoMTkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX1VTQl9XMkZDCQkoMjAgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzFXSVJFCQkoMjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX09TX1RJTUVSCQkoMjIgKyBJSDJfQkFTRSkKQEAgLTE3Niw2ICsxNzcsNyBAQAogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNAkoNjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX05BTkQJCSg2MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9TSEExTUQ1CSg5MSArIElIMl9CQVNFKQogCiAvKgogICogT01BUC03MzAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDIKQEAgLTI2MywxMiArMjY1LDE4IEBACiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMAk0NgogI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTEJNDcKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEyCTQ4CisjZGVmaW5lIElOVF8yNFhYX1NIQTFNRDUJNTEKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1A0X0lSUV9UWAk1NAorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYCTU1CiAjZGVmaW5lIElOVF8yNFhYX0kyQzFfSVJRCTU2CiAjZGVmaW5lIElOVF8yNFhYX0kyQzJfSVJRCTU3CisjZGVmaW5lIElOVF8yNFhYX0hEUV9JUlEJNTgKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9UWAk1OQogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYCTYwCiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFgJNjIKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWAk2MworI2RlZmluZSBJTlRfMjRYWF9TUEkxX0lSUQk2NQorI2RlZmluZSBJTlRfMjRYWF9TUEkyX0lSUQk2NgogI2RlZmluZSBJTlRfMjRYWF9VQVJUMV9JUlEJNzIKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDJfSVJRCTczCiAjZGVmaW5lIElOVF8yNFhYX1VBUlQzX0lSUQk3NApAQCAtMjc4LDcgKzI4Niw1OCBAQAogI2RlZmluZSBJTlRfMjRYWF9VU0JfSVJRX0hHRU4JNzgKICNkZWZpbmUgSU5UXzI0WFhfVVNCX0lSUV9IU09GCTc5CiAjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfT1RHCTgwCisjZGVmaW5lIElOVF8yNFhYX01DQlNQNV9JUlFfVFgJODEKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1A1X0lSUV9SWAk4MgogI2RlZmluZSBJTlRfMjRYWF9NTUNfSVJRCTgzCisjZGVmaW5lIElOVF8yNFhYX01NQzJfSVJRCTg2CisjZGVmaW5lIElOVF8yNFhYX01DQlNQM19JUlFfVFgJODkKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AzX0lSUV9SWAk5MAorI2RlZmluZSBJTlRfMjRYWF9TUEkzX0lSUQk5MQorCisjZGVmaW5lIElOVF8yNDNYX01DQlNQMl9JUlEJMTYKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1AzX0lSUQkxNworI2RlZmluZSBJTlRfMjQzWF9NQ0JTUDRfSVJRCTE4CisjZGVmaW5lIElOVF8yNDNYX01DQlNQNV9JUlEJMTkKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1AxX0lSUQk2NAorI2RlZmluZSBJTlRfMjQzWF9IU19VU0JfTUMJOTIKKyNkZWZpbmUgSU5UXzI0M1hfSFNfVVNCX0RNQQk5MworI2RlZmluZSBJTlRfMjQzWF9DQVJLSVRfSVJRCTk0CisKKyNkZWZpbmUgSU5UXzM0WFhfQkVOQ0hfTVBVX0VNVUwJMworI2RlZmluZSBJTlRfMzRYWF9TVF9NQ0JTUDJfSVJRCTQKKyNkZWZpbmUgSU5UXzM0WFhfU1RfTUNCU1AzX0lSUQk1CisjZGVmaW5lIElOVF8zNFhYX1NTTV9BQk9SVF9JUlEJNgorI2RlZmluZSBJTlRfMzRYWF9TWVNfTklSUQk3CisjZGVmaW5lIElOVF8zNFhYX0QyRF9GV19JUlEJOAorI2RlZmluZSBJTlRfMzRYWF9QUkNNX01QVV9JUlEJMTEKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1AxX0lSUQkxNgorI2RlZmluZSBJTlRfMzRYWF9NQ0JTUDJfSVJRCTE3CisjZGVmaW5lIElOVF8zNFhYX01DQlNQM19JUlEJMjIKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1A0X0lSUQkyMworI2RlZmluZSBJTlRfMzRYWF9DQU1fSVJRCTI0CisjZGVmaW5lIElOVF8zNFhYX01DQlNQNV9JUlEJMjcKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LMQkyOQorI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTksyCTMwCisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzMJMzEKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LNAkzMgorI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTks1CTMzCisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzYJMzQKKyNkZWZpbmUgSU5UXzM0WFhfVVNJTV9JUlEJMzUKKyNkZWZpbmUgSU5UXzM0WFhfV0RUM19JUlEJMzYKKyNkZWZpbmUgSU5UXzM0WFhfU1BJNF9JUlEJNDgKKyNkZWZpbmUgSU5UXzM0WFhfU0hBMU1ENTJfSVJRCTQ5CisjZGVmaW5lIElOVF8zNFhYX0ZQS0FfUkVBRFlfSVJRCTUwCisjZGVmaW5lIElOVF8zNFhYX1NIQTFNRDUxX0lSUQk1MQorI2RlZmluZSBJTlRfMzRYWF9STkdfSVJRCTUyCisjZGVmaW5lIElOVF8zNFhYX0kyQzNfSVJRCTYxCisjZGVmaW5lIElOVF8zNFhYX0ZQS0FfRVJST1JfSVJRCTY0CisjZGVmaW5lIElOVF8zNFhYX1BCSUFTX0lSUQk3NQorI2RlZmluZSBJTlRfMzRYWF9PSENJX0lSUQk3NgorI2RlZmluZSBJTlRfMzRYWF9FSENJX0lSUQk3NworI2RlZmluZSBJTlRfMzRYWF9UTExfSVJRCTc4CisjZGVmaW5lIElOVF8zNFhYX1BBUlRIQVNIX0lSUQk3OQorI2RlZmluZSBJTlRfMzRYWF9NTUMzX0lSUQk5NAorI2RlZmluZSBJTlRfMzRYWF9HUFQxMl9JUlEJOTUKIAogI2RlZmluZQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAppbmRleCA4ZmRiOTVlLi42YTBkMWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCkBAIC00Myw5ICs0MywxNSBAQAogCiAjZGVmaW5lIE9NQVAyNFhYX01DQlNQMV9CQVNFCTB4NDgwNzQwMDAKICNkZWZpbmUgT01BUDI0WFhfTUNCU1AyX0JBU0UJMHg0ODA3NjAwMAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUDNfQkFTRQkweDQ4MDhjMDAwCisjZGVmaW5lIE9NQVAyNDMwX01DQlNQNF9CQVNFCTB4NDgwOGUwMDAKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1A1X0JBU0UJMHg0ODA5NjAwMAogCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQMV9CQVNFCTB4NDgwNzQwMDAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1AyX0JBU0UJMHg0OTAyMjAwMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDNfQkFTRQkweDQ5MDI0MDAwCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQNF9CQVNFCTB4NDkwMjYwMDAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1A1X0JBU0UJMHg0ODA5NjAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogCkBAIC04MSw5ICs4Nyw2IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJHCTB4M0EKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkgJMHgzQwogCi0jZGVmaW5lIE9NQVBfTUFYX01DQlNQX0NPVU5UCTMKLSNkZWZpbmUgTUFYX01DQlNQX0NMT0NLUwkzCi0KICNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVdSSVRFCShPTUFQMTUxMF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFSRUFECShPTUFQMTUxMF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUjEpCiAKQEAgLTkxLDEyICs5NCwxNCBAQAogI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVBfRE1BX01DQlNQMV9UWAogI2RlZmluZSBBVURJT19ETUFfUlgJCU9NQVBfRE1BX01DQlNQMV9SWAogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIyCTB4MDAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMQkweDA0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjIJMHgwOAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIxCTB4MEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSCTB4MDAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSCTB4MDgKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1BDUjIJMHgxMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMQkweDE0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDUjIJMHgxOApAQCAtMTI0LDkgKzEyOSw5IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJICTB4NzAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkcJMHg3NAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSSAkweDc4Ci0KLSNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQJMgotI2RlZmluZSBNQVhfTUNCU1BfQ0xPQ0tTCTIKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1lTQ09OCTB4OEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENDUgkweEFDCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDQ1IJMHhCMAogCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQogI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQpAQCAtMTM3LDEwICsxNDIsNiBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKQkJX19yYXdfcmVhZHcoKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCi0jZGVmaW5lIE9NQVBfTUNCU1BfV1JJVEUoYmFzZSwgcmVnLCB2YWwpCV9fcmF3X3dyaXRldygodmFsKSwgKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNQQ1IxIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgUlJTVAkJCTB4MDAwMQogI2RlZmluZSBSUkRZCQkJMHgwMDAyCkBAIC0xNTEsNiArMTUyLDcgQEAKICNkZWZpbmUgRFhFTkEJCQkweDAwODAKICNkZWZpbmUgQ0xLU1RQKHZhbHVlKQkJKCh2YWx1ZSk8PDExKQkvKiBiaXRzIDExOjEyICovCiAjZGVmaW5lIFJKVVNUKHZhbHVlKQkJKCh2YWx1ZSk8PDEzKQkvKiBiaXRzIDEzOjE0ICovCisjZGVmaW5lIEFMQgkJCTB4ODAwMAogI2RlZmluZSBETEIJCQkweDgwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNQQ1IyIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyOCw2ICsyMzAsMTcgQEAKICNkZWZpbmUgWFBBQkxLKHZhbHVlKQkJKCh2YWx1ZSk8PDUpCS8qIEJpdHMgNTo2ICovCiAjZGVmaW5lIFhQQkJMSyh2YWx1ZSkJCSgodmFsdWUpPDw3KQkvKiBCaXRzIDc6OCAqLwogCisvKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgWENDUiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRElMQgkJCTB4MDAyMAorI2RlZmluZSBYRE1BRU4JCQkweDAwMDgKKyNkZWZpbmUgWERJU0FCTEUJCTB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBSQ0NSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRE1BRU4JCQkweDAwMDgKKyNkZWZpbmUgUkRJU0FCTEUJCTB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTWVNDT05GSUcgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTT0ZUUlNUCQkJMHgwMDAyCiAKIC8qIHdlIGRvbid0IGRvIG11bHRpY2hhbm5lbCBmb3Igbm93ICovCiBzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnIHsKQEAgLTI2MCw2ICsyNzMsOCBAQAogCU9NQVBfTUNCU1AxID0gMCwKIAlPTUFQX01DQlNQMiwKIAlPTUFQX01DQlNQMywKKwlPTUFQX01DQlNQNCwKKwlPTUFQX01DQlNQNQogfSBvbWFwX21jYnNwX2lkOwogCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugb21hcF9tY2JzcF9pb190eXBlX3Q7CkBAIC0zMTEsMTIgKzMyNiwxMCBAQAogc3RydWN0IG9tYXBfbWNic3Bfb3BzIHsKIAl2b2lkICgqcmVxdWVzdCkodW5zaWduZWQgaW50KTsKIAl2b2lkICgqZnJlZSkodW5zaWduZWQgaW50KTsKLQlpbnQgKCpjaGVjaykodW5zaWduZWQgaW50KTsKIH07CiAKIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCXUzMiB2aXJ0X2Jhc2U7CiAJdTggZG1hX3J4X3N5bmMsIGRtYV90eF9zeW5jOwogCXUxNiByeF9pcnEsIHR4X2lycTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9vcHMgKm9wczsKQEAgLTMyNiw3ICszMzksNyBAQAogc3RydWN0IG9tYXBfbWNic3AgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKLQl1MzIgaW9fYmFzZTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTggaWQ7CiAJdTggZnJlZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwpAQCAtMzU0LDYgKzM2Nyw4IEBACiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGNsayAqY2xrOwogfTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKK2V4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudDsKIAogaW50IG9tYXBfbWNic3BfaW5pdCh2b2lkKTsKIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLApAQCAtMzc4LDUgKzM5Myw2IEBACiAvKiBQb2xsZWQgcmVhZC93cml0ZSBmdW5jdGlvbnMgKi8KIGludCBvbWFwX21jYnNwX3BvbGxyZWFkKHVuc2lnbmVkIGludCBpZCwgdTE2ICogYnVmKTsKIGludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpOworaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBhMzI1Y2FmLi5kNDBjYWM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM4LDcgKzM4LDcgQEAKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDEwMDAwMDAwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDgwMDAwMDAwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCmluZGV4IDYxNGIyYzEuLjZiYmYxNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaApAQCAtMTI1LDIwICsxMjUsNjQgQEAKIAkucHVfcGRfdmFsCT0gcHVsbF9tb2RlLAkJCQlcCiB9LAogCisvKiAyNHh4LzM0eHggbXV4IGJpdCBkZWZpbmVzICovCisjZGVmaW5lIE9NQVAyX1BVTExfRU5BCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMl9QVUxMX1VQCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMl9BTFRFTEVDVFJJQ0FMU0VMCSgxIDw8IDUpCiAKLSNkZWZpbmUgUFVMTF9ESVNBQkxFRAkwCi0jZGVmaW5lIFBVTExfRU5BQkxFRAkxCisvKiAzNHh4IHNwZWNpZmljIG11eCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBPTUFQM19JTlBVVF9FTgkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDNfT0ZGX0VOCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQM19PRkZPVVRfRU4JCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQM19PRkZPVVRfVkFMCSgxIDw8IDExKQorI2RlZmluZSBPTUFQM19PRkZfUFVMTF9FTgkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDNfT0ZGX1BVTExfVVAJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzX1dBS0VVUF9FTgkJKDEgPDwgMTQpCiAKLSNkZWZpbmUgUFVMTF9ET1dOCTAKLSNkZWZpbmUgUFVMTF9VUAkJMQorLyogMzR4eCBtdXggbW9kZSBvcHRpb25zIGZvciBlYWNoIHBpbi4gU2VlIFRSTSBmb3Igb3B0aW9ucyAqLworI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTAJMAorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTEJMQorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTIJMgorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTMJMworI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTQJNAorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTUJNQorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTYJNgorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTcJNworCisvKiAzNHh4IGFjdGl2ZSBwaW4gc3RhdGVzICovCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PVVRQVVQJCTAKKyNkZWZpbmUgT01BUDM0WFhfUElOX0lOUFVUCQlPTUFQM19JTlBVVF9FTgorI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQCShPTUFQMl9QVUxMX0VOQSB8IE9NQVAzX0lOUFVUX0VOIFwKKwkJCQkJCXwgT01BUDJfUFVMTF9VUCkKKyNkZWZpbmUgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOCShPTUFQMl9QVUxMX0VOQSB8IE9NQVAzX0lOUFVUX0VOKQorCisvKiAzNHh4IG9mZiBtb2RlIHN0YXRlcyAqLworI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX05PTkUgICAgICAgICAgIDAKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9PVVRQVVRfSElHSAkoT01BUDNfT0ZGX0VOIHwgT01BUDNfT0ZGT1VUX0VOIFwKKwkJCQkJCXwgT01BUDNfT0ZGT1VUX1ZBTCkKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9PVVRQVVRfTE9XCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZPVVRfRU4pCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfSU5QVVRfUFVMTFVQCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZfUFVMTF9FTiBcCisJCQkJCQl8IE9NQVAzX09GRl9QVUxMX1VQKQorI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX0lOUFVUX1BVTExET1dOCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZfUFVMTF9FTikKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9XQUtFVVBFTkFCTEUJT01BUDNfV0FLRVVQX0VOCisKKyNkZWZpbmUgTVVYX0NGR18zNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG11eF92YWx1ZSkgewkJXAorCS5uYW1lCQk9IGRlc2MsCQkJCQlcCisJLmRlYnVnCQk9IDAsCQkJCQlcCisJLm11eF9yZWcJPSByZWdfb2Zmc2V0LAkJCQlcCisJLm11eF92YWwJPSBtdXhfdmFsdWUJCQkJXAorfSwKIAogc3RydWN0IHBpbl9jb25maWcgewotCWNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgY2hhciBidXN5OwotCXVuc2lnbmVkIGNoYXIgZGVidWc7CisJY2hhciAJCQkqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgCW11eF9yZWc7CisJdW5zaWduZWQgY2hhcgkJZGVidWc7CiAKLQljb25zdCBjaGFyICptdXhfcmVnX25hbWU7Ci0JY29uc3QgdW5zaWduZWQgaW50IG11eF9yZWc7CisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKwl1MTYJCQltdXhfdmFsOyAvKiBXYWtlLXVwLCBvZmYgbW9kZSwgcHVsbCwgbXV4IG1vZGUgKi8KKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKIAljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKIApAQCAtMTUwLDYgKzE5NCwxMiBAQAogCWNvbnN0IGNoYXIgKnB1X3BkX25hbWU7CiAJY29uc3QgdW5zaWduZWQgaW50IHB1X3BkX3JlZzsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHB1X3BkX3ZhbDsKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfT01BUF9NVVhfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKQorCWNvbnN0IGNoYXIgKm11eF9yZWdfbmFtZTsKKyNlbmRpZgorCiB9OwogCiBlbnVtIG9tYXA3MzBfaW5kZXggewpAQCAtNTkzLDYgKzY0MywxMTQgQEAKIAogfTsKIAorZW51bSBvbWFwMzR4eF9pbmRleCB7CisJLyogMzR4eCBJMkMgKi8KKwlLMjFfMzRYWF9JMkMxX1NDTCwKKwlKMjFfMzRYWF9JMkMxX1NEQSwKKwlBRjE1XzM0WFhfSTJDMl9TQ0wsCisJQUUxNV8zNFhYX0kyQzJfU0RBLAorCUFGMTRfMzRYWF9JMkMzX1NDTCwKKwlBRzE0XzM0WFhfSTJDM19TREEsCisJQUQyNl8zNFhYX0kyQzRfU0NMLAorCUFFMjZfMzRYWF9JMkM0X1NEQSwKKworCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCisJWThfMzQzMF9VU0IxSFNfUEhZX0NMSywKKwlZOV8zNDMwX1VTQjFIU19QSFlfU1RQLAorCUFBMTRfMzQzMF9VU0IxSFNfUEhZX0RJUiwKKwlBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQsCisJVzEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBMCwKKwlXMTJfMzQzMF9VU0IxSFNfUEhZX0RBVEExLAorCVcxMV8zNDMwX1VTQjFIU19QSFlfREFUQTIsCisJWTExXzM0MzBfVVNCMUhTX1BIWV9EQVRBMywKKwlXOV8zNDMwX1VTQjFIU19QSFlfREFUQTQsCisJWTEyXzM0MzBfVVNCMUhTX1BIWV9EQVRBNSwKKwlXOF8zNDMwX1VTQjFIU19QSFlfREFUQTYsCisJWTEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBNywKKworCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMiovCisJQUE4XzM0MzBfVVNCMkhTX1BIWV9DTEssCisJQUExMF8zNDMwX1VTQjJIU19QSFlfU1RQLAorCUFBOV8zNDMwX1VTQjJIU19QSFlfRElSLAorCUFCMTFfMzQzMF9VU0IySFNfUEhZX05YVCwKKwlBQjEwXzM0MzBfVVNCMkhTX1BIWV9EQVRBMCwKKwlBQjlfMzQzMF9VU0IySFNfUEhZX0RBVEExLAorCVczXzM0MzBfVVNCMkhTX1BIWV9EQVRBMiwKKwlUNF8zNDMwX1VTQjJIU19QSFlfREFUQTMsCisJVDNfMzQzMF9VU0IySFNfUEhZX0RBVEE0LAorCVIzXzM0MzBfVVNCMkhTX1BIWV9EQVRBNSwKKwlSNF8zNDMwX1VTQjJIU19QSFlfREFUQTYsCisJVDJfMzQzMF9VU0IySFNfUEhZX0RBVEE3LAorCisKKwkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLworCVk4XzM0MzBfVVNCMUhTX1RMTF9DTEssCisJWTlfMzQzMF9VU0IxSFNfVExMX1NUUCwKKwlBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIsCisJQUExMV8zNDMwX1VTQjFIU19UTExfTlhULAorCVcxM18zNDMwX1VTQjFIU19UTExfREFUQTAsCisJVzEyXzM0MzBfVVNCMUhTX1RMTF9EQVRBMSwKKwlXMTFfMzQzMF9VU0IxSFNfVExMX0RBVEEyLAorCVkxMV8zNDMwX1VTQjFIU19UTExfREFUQTMsCisJVzlfMzQzMF9VU0IxSFNfVExMX0RBVEE0LAorCVkxMl8zNDMwX1VTQjFIU19UTExfREFUQTUsCisJVzhfMzQzMF9VU0IxSFNfVExMX0RBVEE2LAorCVkxM18zNDMwX1VTQjFIU19UTExfREFUQTcsCisKKwkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLworCUFBOF8zNDMwX1VTQjJIU19UTExfQ0xLLAorCUFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCwKKwlBQTlfMzQzMF9VU0IySFNfVExMX0RJUiwKKwlBQjExXzM0MzBfVVNCMkhTX1RMTF9OWFQsCisJQUIxMF8zNDMwX1VTQjJIU19UTExfREFUQTAsCisJQUI5XzM0MzBfVVNCMkhTX1RMTF9EQVRBMSwKKwlXM18zNDMwX1VTQjJIU19UTExfREFUQTIsCisJVDRfMzQzMF9VU0IySFNfVExMX0RBVEEzLAorCVQzXzM0MzBfVVNCMkhTX1RMTF9EQVRBNCwKKwlSM18zNDMwX1VTQjJIU19UTExfREFUQTUsCisJUjRfMzQzMF9VU0IySFNfVExMX0RBVEE2LAorCVQyXzM0MzBfVVNCMkhTX1RMTF9EQVRBNywKKworCS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCisJQUE2XzM0MzBfVVNCM0hTX1RMTF9DTEssCisJQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAsCisJQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIsCisJWTNfMzQzMF9VU0IzSFNfVExMX05YVCwKKwlBQTVfMzQzMF9VU0IzSFNfVExMX0RBVEEwLAorCVk0XzM0MzBfVVNCM0hTX1RMTF9EQVRBMSwKKwlZNV8zNDMwX1VTQjNIU19UTExfREFUQTIsCisJVzVfMzQzMF9VU0IzSFNfVExMX0RBVEEzLAorCUFCMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE0LAorCUFCMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE1LAorCUFBMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE2LAorCUFBMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE3LAorCisJLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KKwlBRjEwXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhEUCwKKwlBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNLAorCVcxM18zNDMwX1VTQjFGU19QSFlfTU0xX1JYUkNWLAorCVcxMl8zNDMwX1VTQjFGU19QSFlfTU0xX1RYU0UwLAorCVcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFULAorCVkxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYRU5fTiwKKworCS8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCisJQUY3XzM0MzBfVVNCMkZTX1BIWV9NTTJfUlhEUCwKKwlBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNLAorCUFCMTBfMzQzMF9VU0IyRlNfUEhZX01NMl9SWFJDViwKKwlBQjlfMzQzMF9VU0IyRlNfUEhZX01NMl9UWFNFMCwKKwlXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFULAorCVQ0XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhFTl9OLAorCisJLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KKwlBSDNfMzQzMF9VU0IzRlNfUEhZX01NM19SWERQLAorCUFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0sCisJQUQxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhSQ1YsCisJQUUxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhTRTAsCisJQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQsCisJQUMxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhFTl9OLAorCit9OworCiBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIHsKIAlzdHJ1Y3QgcGluX2NvbmZpZwkqcGluczsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTUxMC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTUxMC5oCmluZGV4IDUwNWEzOGEuLmQyNDAwNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE1MTAuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNTEwLmgKQEAgLTQ0LDUgKzQ0LDcgQEAKICNkZWZpbmUgT01BUDE1MTBfRFNQUkVHX1NJWkUJU1pfMTI4SwogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAogCisjZGVmaW5lIE9NQVAxNTEwX0RTUF9NTVVfQkFTRQkoMHhmZmZlZDIwMCkKKwogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNVhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTZ4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTZ4eC5oCmluZGV4IGM2YzkzYWYuLjBlNjliNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE2eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNnh4LmgKQEAgLTQ0LDYgKzQ0LDExIEBACiAjZGVmaW5lIE9NQVAxNlhYX0RTUFJFR19TSVpFCVNaXzEyOEsKICNkZWZpbmUgT01BUDE2WFhfRFNQUkVHX1NUQVJUCTB4RTEwMDAwMDAKIAorI2RlZmluZSBPTUFQMTZYWF9TRUNfQkFTRQkweEZGRkU0MDAwCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19ERVMJKE9NQVAxNlhYX1NFQ19CQVNFICsgMHgwMDAwKQorI2RlZmluZSBPTUFQMTZYWF9TRUNfU0hBMU1ENQkoT01BUDE2WFhfU0VDX0JBU0UgKyAweDA4MDApCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19STkcJKE9NQVAxNlhYX1NFQ19CQVNFICsgMHgxMDAwKQorCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbnRlcnJ1cHRzCkBAIC0xOTAsNyArMTk1LDcgQEAKICNkZWZpbmUgV1NQUl9ESVNBQkxFXzAgICAgICAgICAoMHgwMDAwYWFhYSkKICNkZWZpbmUgV1NQUl9ESVNBQkxFXzEgICAgICAgICAoMHgwMDAwNTU1NSkKIAotLyogTWFpbGJveCAqLworI2RlZmluZSBPTUFQMTZYWF9EU1BfTU1VX0JBU0UJKDB4ZmZmZWQyMDApCiAjZGVmaW5lIE9NQVAxNlhYX01BSUxCT1hfQkFTRQkoMHhmZmZjZjAwMCkKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNlhYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDI0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDI0eHguaAppbmRleCBiYjgzMTlkLi4yNDMzNWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAyNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMjR4eC5oCkBAIC0zOSw3ICszOSw2IEBACiAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQogI2RlZmluZSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFCTB4NDAwMDAwMDAKLSNkZWZpbmUgSVJRX1NJUl9JUlEJCTB4MDA0MAogCiAjZGVmaW5lIE9NQVAyNDIwX0NUUkxfQkFTRQlMNF8yNFhYX0JBU0UKICNkZWZpbmUgT01BUDI0MjBfMzJLU1lOQ1RfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg0MDAwKQpAQCAtNDgsNiArNDcsNyBAQAogI2RlZmluZSBPTUFQMjQyMF9QUk1fQkFTRQlPTUFQMjQyMF9DTV9CQVNFCiAjZGVmaW5lIE9NQVAyNDIwX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQogI2RlZmluZSBPTUFQMjQyMF9TTVNfQkFTRQkweDY4MDA4MDAwCisjZGVmaW5lIE9NQVAyNDIwX0dQTUNfQkFTRQkweDY4MDBhMDAwCiAKICNkZWZpbmUgT01BUDI0MzBfMzJLU1lOQ1RfQkFTRQkoTDRfV0tfMjQzWF9CQVNFICsgMHgyMDAwMCkKICNkZWZpbmUgT01BUDI0MzBfUFJDTV9CQVNFCShMNF9XS18yNDNYX0JBU0UgKyAweDYwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaAppbmRleCBjYWUwMzdkLi5lYzY3ZmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmgKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1BJWEVMX0RPVUJMRQkweDAwMDEwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19TQ0FMRQkweDAwMDIwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZCTB4MDAwNDAwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1JPVEFURQkweDAwMDgwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1NFVF9CQUNLTElHSFQJMHgwMTAwMDAwMAogCiAvKiBWYWx1ZXMgZnJvbSBEU1AgbXVzdCBtYXAgdG8gbG93ZXIgMTYtYml0cyAqLwpAQCAtMzA1LDYgKzMwNiw3IEBACiAJCQkJCSAgIGludCBzY3JlZW5fd2lkdGgsCiAJCQkJCSAgIGludCBwb3NfeCwgaW50IHBvc195LCBpbnQgd2lkdGgsCiAJCQkJCSAgIGludCBoZWlnaHQsIGludCBjb2xvcl9tb2RlKTsKKwlpbnQJCSgqc2V0X3JvdGF0ZSkJICAoaW50IGFuZ2xlKTsKIAlpbnQJCSgqc2V0dXBfbWVtKQkgIChpbnQgcGxhbmUsIHNpemVfdCBzaXplLAogCQkJCQkgICBpbnQgbWVtX3R5cGUsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKIAlpbnQJCSgqbW1hcCkJCSAgKHN0cnVjdCBmYl9pbmZvICppbmZvLApAQCAtMzc0LDYgKzM3Niw3IEBACiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAyX2Rpc3BfY3RybDsKICNlbmRpZgogCitleHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBmYl9yZWdpc3Rlcl9wYW5lbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CiBleHRlcm4gdm9pZCBvbWFwZmJfd3JpdGVfZmlyc3RfcGl4ZWwoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LCB1MTYgcGl4dmFsKTsKIGV4dGVybiB2b2lkIG9tYXBmYl9ub3RpZnlfY2xpZW50cyhzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCmluZGV4IGQ1N2YyMDIuLjQ2NDlkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCkBAIC0xNiw2ICsxNiwxMCBAQAogCWludAkJCWdwaW9faXJxOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKIAlpbnQJCQlucl9wYXJ0czsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAoKm9uZW5hbmRfc2V0dXApKHZvaWQgX19pb21lbSAqKTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAoKm9uZW5hbmRfc2V0dXApKHZvaWQgX19pb21lbSAqLCBpbnQgZnJlcSk7CiAJaW50CQkJZG1hX2NoYW5uZWw7CiB9OworCitpbnQgb21hcDJfb25lbmFuZF9yZXBoYXNlKHZvaWQpOworCisjZGVmaW5lIE9ORU5BTkRfTUFYX1BBUlRJVElPTlMgOApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IGJmYTA5MzIuLjc2OGViNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTM5LDExICszOSwxMSBAQAogICogUmVnaXN0ZXIgYW5kIG9mZnNldCBkZWZpbml0aW9ucyB0byBiZSB1c2VkIGluIFBNIGFzc2VtYmxlciBjb2RlCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLSNkZWZpbmUgQ0xLR0VOX1JFR19BU01fQkFTRQkJaW9fcDJ2KDB4ZmZmZWNlMDApCisjZGVmaW5lIENMS0dFTl9SRUdfQVNNX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlY2UwMCkKICNkZWZpbmUgQVJNX0lETEVDVDFfQVNNX09GRlNFVAkJMHgwNAogI2RlZmluZSBBUk1fSURMRUNUMl9BU01fT0ZGU0VUCQkweDA4CiAKLSNkZWZpbmUgVENNSUZfQVNNX0JBU0UJCQlpb19wMnYoMHhmZmZlY2MwMCkKKyNkZWZpbmUgVENNSUZfQVNNX0JBU0UJCQlJT19BRERSRVNTKDB4ZmZmZWNjMDApCiAjZGVmaW5lIEVNSUZTX0NPTkZJR19BU01fT0ZGU0VUCQkweDBjCiAjZGVmaW5lIEVNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUCTB4MjAKIApAQCAtMTM1LDcgKzEzNSw4IEBACiBleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkIG9tYXAyNHh4X2NwdV9zdXNwZW5kKHUzMiBkbGxfY3RybCwgdTMyIGNwdV9yZXZpc2lvbik7CitleHRlcm4gdm9pZCBvbWFwMjR4eF9jcHVfc3VzcGVuZCh1MzIgZGxsX2N0cmwsIHZvaWQgX19pb21lbSAqc2RyY19kbGxhX2N0cmwsCisJCQkJCXZvaWQgX19pb21lbSAqc2RyY19wb3dlcik7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA2YTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogT01BUDIvMyBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy04IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFTTV9BUk1fQVJDSF9PTUFQX1BPV0VSRE9NQUlOCisjZGVmaW5lIEFTTV9BUk1fQVJDSF9PTUFQX1BPV0VSRE9NQUlOCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CisKKworLyogUG93ZXJkb21haW4gYmFzaWMgcG93ZXIgc3RhdGVzICovCisjZGVmaW5lIFBXUkRNX1BPV0VSX09GRgkJMHgwCisjZGVmaW5lIFBXUkRNX1BPV0VSX1JFVAkJMHgxCisjZGVmaW5lIFBXUkRNX1BPV0VSX0lOQUNUSVZFCTB4MgorI2RlZmluZSBQV1JETV9QT1dFUl9PTgkJMHgzCisKKy8qIFBvd2VyZG9tYWluIGFsbG93YWJsZSBzdGF0ZSBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgUFdSU1RTX09GRl9PTgkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCisJCQkJICgxIDw8IFBXUkRNX1BPV0VSX09OKSkKKworI2RlZmluZSBQV1JTVFNfT0ZGX1JFVAkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCisJCQkJICgxIDw8IFBXUkRNX1BPV0VSX1JFVCkpCisKKyNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQorCisKKy8qIFBvd2VyZG9tYWluIGZsYWdzICovCisjZGVmaW5lIFBXUkRNX0hBU19IRFdSX1NBUgkoMSA8PCAwKSAvKiBoYXJkd2FyZSBzYXZlLWFuZC1yZXN0b3JlIHN1cHBvcnQgKi8KKworCisvKgorICogTnVtYmVyIG9mIG1lbW9yeSBiYW5rcyB0aGF0IGFyZSBwb3dlci1jb250cm9sbGFibGUuCU9uIE9NQVAzNDMwLCB0aGUKKyAqIG1heGltdW0gaXMgNC4KKyAqLworI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTQKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb3dlcmRvbWFpbi4KKyAqIENPUkUgcG93ZXJkb21haW4gaXMgcHJvYmFibHkgdGhlIHdvcnN0IGNhc2UuCisgKi8KKyNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwkzCisKKy8qIFhYWCBBIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IG51bWJlci4gV2hhdCBpcyByZWFzb25hYmxlIGhlcmU/ICovCisjZGVmaW5lIFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCAxMDAwMDAKKworc3RydWN0IGNsb2NrZG9tYWluOworc3RydWN0IHBvd2VyZG9tYWluOworCisvKiBFbmNvZGVzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBvd2VyZG9tYWlucyAtIHN0YXRpY2FsbHkgZGVmaW5lZCAqLworc3RydWN0IHB3cmRtX2RlcCB7CisKKwkvKiBQb3dlcmRvbWFpbiBuYW1lICovCisJY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKworCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgLSByZXNvbHZlZCBieSB0aGUgcG93ZXJkb21haW4gY29kZSAqLworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CisKKwkvKiBGbGFncyB0byBtYXJrIE9NQVAgY2hpcCByZXN0cmljdGlvbnMsIGV0Yy4gKi8KKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKworfTsKKworc3RydWN0IHBvd2VyZG9tYWluIHsKKworCS8qIFBvd2VyZG9tYWluIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogdGhlIGFkZHJlc3Mgb2Zmc2V0IGZyb20gQ01fQkFTRS9QUk1fQkFTRSAqLworCWNvbnN0IHMxNiBwcmNtX29mZnM7CisKKwkvKiBVc2VkIHRvIHJlcHJlc2VudCB0aGUgT01BUCBjaGlwIHR5cGVzIGNvbnRhaW5pbmcgdGhpcyBwd3JkbSAqLworCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworCisJLyogQml0IHNoaWZ0IG9mIHRoaXMgcG93ZXJkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQgKi8KKwljb25zdCB1OCBkZXBfYml0OworCisJLyogUG93ZXJkb21haW5zIHRoYXQgY2FuIGJlIHRvbGQgdG8gd2FrZSB0aGlzIHBvd2VyZG9tYWluIHVwICovCisJc3RydWN0IHB3cmRtX2RlcCAqd2tkZXBfc3JjczsKKworCS8qIFBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIGtlZXAgdGhpcyBwd3JkbSBmcm9tIGluYWN0aXZpdHkgKi8KKwlzdHJ1Y3QgcHdyZG1fZGVwICpzbGVlcGRlcF9zcmNzOworCisJLyogUG9zc2libGUgcG93ZXJkb21haW4gcG93ZXIgc3RhdGVzICovCisJY29uc3QgdTggcHdyc3RzOworCisJLyogUG9zc2libGUgbG9naWMgcG93ZXIgc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OICovCisJY29uc3QgdTggcHdyc3RzX2xvZ2ljX3JldDsKKworCS8qIFBvd2VyZG9tYWluIGZsYWdzICovCisJY29uc3QgdTggZmxhZ3M7CisKKwkvKiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluICovCisJY29uc3QgdTggYmFua3M7CisKKwkvKiBQb3NzaWJsZSBtZW1vcnkgYmFuayBwd3JzdGF0ZXMgd2hlbiBwd3JkbSBpbiBSRVRFTlRJT04gKi8KKwljb25zdCB1OCBwd3JzdHNfbWVtX3JldFtQV1JETV9NQVhfTUVNX0JBTktTXTsKKworCS8qIFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGlzIE9OICovCisJY29uc3QgdTggcHdyc3RzX21lbV9vbltQV1JETV9NQVhfTUVNX0JBTktTXTsKKworCS8qIENsb2NrZG9tYWlucyBpbiB0aGlzIHBvd2VyZG9tYWluICovCisJc3RydWN0IGNsb2NrZG9tYWluICpwd3JkbV9jbGtkbXNbUFdSRE1fTUFYX0NMS0RNU107CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisKK307CisKKwordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpOworCitpbnQgcHdyZG1fcmVnaXN0ZXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK3N0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pKTsKKworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgcHdyZG1fZm9yX2VhY2hfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCSBpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkgICBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKSk7CisKK2ludCBwd3JkbV9hZGRfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9kZWxfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9yZWFkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fcmVhZF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOworCitpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCitpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOworaW50IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fY2xlYXJfYWxsX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisKK2ludCBwd3JkbV9zZXRfbG9naWNfcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOworaW50IHB3cmRtX3NldF9tZW1fb25zdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCk7CitpbnQgcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCk7CisKK2ludCBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworCitpbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Citib29sIHB3cmRtX2hhc19oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworaW50IHB3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NkcmMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCmluZGV4IDc4N2I3YWMuLmE5OGM2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCkBAIC0yNSw2ICsyNSw4IEBACiAjZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJMHgwNkMKICNkZWZpbmUgU0RSQ19QT1dFUgkJMHgwNzAKICNkZWZpbmUgU0RSQ19NUl8wCQkweDA4NAorI2RlZmluZSBTRFJDX0FDVElNX0NUUkxfQV8wCTB4MDljCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTF9CXzAJMHgwYTAKICNkZWZpbmUgU0RSQ19SRlJfQ1RSTF8wCQkweDBhNAogCiAvKgpAQCAtNjMsOSArNjUsOSBAQAogICovCiAKIAotI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFICsgcmVnKQotI2RlZmluZSBPTUFQMjQzWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDNYX1NNU19CQVNFICsgcmVnKQotI2RlZmluZSBPTUFQMzQzWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAyNDNYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQogCiAvKiBTTVMgcmVnaXN0ZXIgb2Zmc2V0cyAtIHJlYWQvd3JpdGUgd2l0aCBzbXNfe3JlYWQsd3JpdGV9X3JlZygpICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2VyaWFsLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCmluZGV4IGNjNmJmYTUuLjhhNjc2YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZXJpYWwuaApAQCAtMjAsMTggKzIwLDI0IEBACiAjZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAogI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKICNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ4MDZlMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorLyogT01BUDMgc2VyaWFsIHBvcnRzICovCisjZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAorI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKKyNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ5MDIwMDAwCiAjZW5kaWYKIAogI2RlZmluZSBPTUFQX01BWF9OUl9QT1JUUwkzCiAjZGVmaW5lIE9NQVAxNTEwX0JBU0VfQkFVRAkoMTIwMDAwMDAvMTYpCiAjZGVmaW5lIE9NQVAxNlhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCisjZGVmaW5lIE9NQVAyNFhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCiAKLSNkZWZpbmUgaXNfb21hcF9wb3J0KHApCSh7aW50IF9fcmV0ID0gMDsJCQlcCi0JCQlpZiAocCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSkgfHwJXAotCQkJICAgIHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpIHx8CVwKLQkJCSAgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSkJXAotCQkJCV9fcmV0ID0gMTsJCQlcCi0JCQlfX3JldDsJCQkJCVwKKyNkZWZpbmUgaXNfb21hcF9wb3J0KHB0KQkoe2ludCBfX3JldCA9IDA7CQkJXAorCQkJaWYgKChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQxX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQyX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQzX0JBU0UpCVwKKwkJCQlfX3JldCA9IDE7CQkJCVwKKwkJCV9fcmV0OwkJCQkJCVwKIAkJCX0pCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaAppbmRleCBlMDkzMjM0Li5hYjM1ZDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaApAQCAtMjEsNiArMjEsMTAgQEAKIAkJCQkgICAgICB1MzIgbWVtX3R5cGUpOwogZXh0ZXJuIHUzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CiAKK2V4dGVybiB1MzIgb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCh1MzIgc2RyY19yZnJfY3RybCwKKwkJCQkgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxhLAorCQkJCSAgICAgdTMyIHNkcmNfYWN0aW1fY3RybGIsIHUzMiBtMik7CisKIC8qIERvIG5vdCB1c2UgdGhlc2UgKi8KIGV4dGVybiB2b2lkIG9tYXAxX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBja2N0bCwgdTMyIGRwbGxjdGwpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDFfc3JhbV9yZXByb2dyYW1fY2xvY2tfc3o7CkBAIC01Myw0ICs1NywxMCBAQAogCQkJCQkJdTMyIG1lbV90eXBlKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAyNDN4X3NyYW1fcmVwcm9ncmFtX3NkcmNfc3o7CiAKKworZXh0ZXJuIHUzMiBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwodTMyIHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgdTMyIHNkcmNfYWN0aW1fY3RybGEsCisJCQkJCSAgdTMyIHNkcmNfYWN0aW1fY3RybGIsIHUzMiBtMik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3o7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDZhMjhjNy4uMDY5MjNmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKIHsKLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCW9tYXAxX2FyY2hfcmVzZXQobW9kZSk7CiAJZWxzZQogCQlvbWFwX3ByY21fYXJjaF9yZXNldChtb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjZlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCkBAIC0wLDAgKzEsMTA3IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8bWFjaC9vbWFwNzMwLmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwMTUxMC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcDE2eHguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwMzR4eC5oPgorCisjZGVmaW5lIEJFVFdFRU4ocCxzdCxzeikJKChwKSA+PSAoc3QpICYmIChwKSA8ICgoc3QpICsgKHN6KSkpCisjZGVmaW5lIFhMQVRFKHAscHN0LHZzdCkJKCh2b2lkIF9faW9tZW0gKikoKHApIC0gKHBzdCkgKyAodnN0KSkpCisKKy8qCisgKiBJbnRlcmNlcHQgaW9yZW1hcCgpIHJlcXVlc3RzIGZvciBhZGRyZXNzZXMgaW4gb3VyIGZpeGVkIG1hcHBpbmcgcmVnaW9ucy4KKyAqLwordm9pZCBfX2lvbWVtICpvbWFwX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgSU9fUEhZUywgSU9fU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgSU9fUEhZUywgSU9fVklSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIE9NQVA3MzBfRFNQX0JBU0UsIE9NQVA3MzBfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVA3MzBfRFNQX0JBU0UsIE9NQVA3MzBfRFNQX1NUQVJUKTsKKworCQlpZiAoQkVUV0VFTihwLCBPTUFQNzMwX0RTUFJFR19CQVNFLCBPTUFQNzMwX0RTUFJFR19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQNzMwX0RTUFJFR19CQVNFLAorCQkJCQlPTUFQNzMwX0RTUFJFR19TVEFSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBPTUFQMTUxMF9EU1BfQkFTRSwgT01BUDE1MTBfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAxNTEwX0RTUF9CQVNFLCBPTUFQMTUxMF9EU1BfU1RBUlQpOworCisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNTEwX0RTUFJFR19CQVNFLCBPTUFQMTUxMF9EU1BSRUdfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE1MTBfRFNQUkVHX0JBU0UsCisJCQkJCU9NQVAxNTEwX0RTUFJFR19TVEFSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBPTUFQMTZYWF9EU1BfQkFTRSwgT01BUDE2WFhfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAxNlhYX0RTUF9CQVNFLCBPTUFQMTZYWF9EU1BfU1RBUlQpOworCisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNlhYX0RTUFJFR19CQVNFLCBPTUFQMTZYWF9EU1BSRUdfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE2WFhfRFNQUkVHX0JBU0UsCisJCQkJCU9NQVAxNlhYX0RTUFJFR19TVEFSVCk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgTDNfMjRYWF9QSFlTLCBMM18yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzI0WFhfUEhZUywgTDNfMjRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfMjRYWF9QSFlTLCBMNF8yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzI0WFhfUEhZUywgTDRfMjRYWF9WSVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIERTUF9NRU1fMjRYWF9QSFlTLCBEU1BfTUVNXzI0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgRFNQX01FTV8yNFhYX1BIWVMsIERTUF9NRU1fMjRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgRFNQX0lQSV8yNFhYX1BIWVMsIERTUF9JUElfMjRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBEU1BfSVBJXzI0WFhfUEhZUywgRFNQX0lQSV8yNFhYX1NJWkUpOworCQlpZiAoQkVUV0VFTihwLCBEU1BfTU1VXzI0WFhfUEhZUywgRFNQX01NVV8yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIERTUF9NTVVfMjRYWF9QSFlTLCBEU1BfTU1VXzI0WFhfVklSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgeworCQlpZiAoQkVUV0VFTihwLCBMNF9XS18yNDNYX1BIWVMsIEw0X1dLXzI0M1hfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfV0tfMjQzWF9QSFlTLCBMNF9XS18yNDNYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9HUE1DX1BIWVMsIE9NQVAyNDNYX0dQTUNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDI0M1hfR1BNQ19QSFlTLCBPTUFQMjQzWF9HUE1DX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9TRFJDX1BIWVMsIE9NQVAyNDNYX1NEUkNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDI0M1hfU0RSQ19QSFlTLCBPTUFQMjQzWF9TRFJDX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9TTVNfUEhZUywgT01BUDI0M1hfU01TX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAyNDNYX1NNU19QSFlTLCBPTUFQMjQzWF9TTVNfVklSVCk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgTDNfMzRYWF9QSFlTLCBMM18zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzM0WFhfUEhZUywgTDNfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfMzRYWF9QSFlTLCBMNF8zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfV0tfMzRYWF9QSFlTLCBMNF9XS18zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0X1dLXzM0WFhfUEhZUywgTDRfV0tfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDM0WFhfR1BNQ19QSFlTLCBPTUFQMzRYWF9HUE1DX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAzNFhYX0dQTUNfUEhZUywgT01BUDM0WFhfR1BNQ19WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDM0M1hfU01TX1BIWVMsIE9NQVAzNDNYX1NNU19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMzQzWF9TTVNfUEhZUywgT01BUDM0M1hfU01TX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMzQzWF9TRFJDX1BIWVMsIE9NQVAzNDNYX1NEUkNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDM0M1hfU0RSQ19QSFlTLCBPTUFQMzQzWF9TRFJDX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF9QRVJfMzRYWF9QSFlTLCBMNF9QRVJfMzRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBMNF9QRVJfMzRYWF9QSFlTLCBMNF9QRVJfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfRU1VXzM0WFhfUEhZUywgTDRfRU1VXzM0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfRU1VXzM0WFhfUEhZUywgTDRfRU1VXzM0WFhfVklSVCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gX19hcm1faW9yZW1hcChwLCBzaXplLCB0eXBlKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9pb3JlbWFwKTsKKwordm9pZCBvbWFwX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmlydCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisKKwlpZiAodmlydCA+PSBWTUFMTE9DX1NUQVJUICYmIHZpcnQgPCBWTUFMTE9DX0VORCkKKwkJX19pb3VubWFwKGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCAwMTRkMjY1Li5hZjMzZmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjcsNDMgKzI3LDY1IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcCBtY2JzcFtPTUFQX01BWF9NQ0JTUF9DT1VOVF07CitzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKK2ludCBvbWFwX21jYnNwX2NvdW50OwogCi0jZGVmaW5lIG9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpCShtY2JzcFtpZF0ucGRhdGEgJiYgXAotCQkJCQltY2JzcFtpZF0ucGRhdGEtPm9wcyAmJiBcCi0JCQkJCW1jYnNwW2lkXS5wZGF0YS0+b3BzLT5jaGVjayAmJiBcCi0JCQkJCShtY2JzcFtpZF0ucGRhdGEtPm9wcy0+Y2hlY2soaWQpID09IDApKQordm9pZCBvbWFwX21jYnNwX3dyaXRlKHZvaWQgX19pb21lbSAqaW9fYmFzZSwgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgfHwgY3B1X2lzX29tYXAyNDIwKCkpCisJCV9fcmF3X3dyaXRldygodTE2KXZhbCwgaW9fYmFzZSArIHJlZyk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmFsLCBpb19iYXNlICsgcmVnKTsKK30KKworaW50IG9tYXBfbWNic3BfcmVhZCh2b2lkIF9faW9tZW0gKmlvX2Jhc2UsIHUxNiByZWcpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpIHx8IGNwdV9pc19vbWFwMjQyMCgpKQorCQlyZXR1cm4gX19yYXdfcmVhZHcoaW9fYmFzZSArIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gX19yYXdfcmVhZGwoaW9fYmFzZSArIHJlZyk7Cit9CisKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUFEKGJhc2UsIHJlZykgXAorCQkJb21hcF9tY2JzcF9yZWFkKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnKQorI2RlZmluZSBPTUFQX01DQlNQX1dSSVRFKGJhc2UsIHJlZywgdmFsKSBcCisJCQlvbWFwX21jYnNwX3dyaXRlKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnLCB2YWwpCisKKyNkZWZpbmUgb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkJKGlkIDwgb21hcF9tY2JzcF9jb3VudCkKKyNkZWZpbmUgaWRfdG9fbWNic3BfcHRyKGlkKQkJbWNic3BfcHRyW2lkXTsKIAogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kdW1wX3JlZyh1OCBpZCkKIHsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICIqKioqIE1jQlNQJWQgcmVncyAqKioqXG4iLCBtY2JzcFtpZF0uaWQpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkRSUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERSUjIpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJEUlIxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBEUlIxKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiRFhSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFhSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkRYUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERYUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJTUENSMjogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBTUENSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlNQQ1IxOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNQQ1IxKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiUkNSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgUkNSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlJDUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFJDUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJYQ1IyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBYQ1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiWENSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgWENSMSkpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlNSR1IyOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNSR1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiU1JHUjE6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgU1JHUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJQQ1IwOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBQQ1IwKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICIqKioqIE1jQlNQJWQgcmVncyAqKioqXG4iLCBtY2JzcC0+aWQpOworCWRldl9kYmcobWNic3AtPmRldiwgIkRSUjI6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERSUjIpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJEUlIxOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBEUlIxKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFhSMjogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFhSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIkRYUjE6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERYUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUENSMjogMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUENSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIlNQQ1IxOiAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNQQ1IxKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiUkNSMjogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgUkNSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIlJDUjE6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFJDUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJYQ1IyOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBYQ1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiWENSMTogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgWENSMSkpOworCWRldl9kYmcobWNic3AtPmRldiwgIlNSR1IyOiAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNSR1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1JHUjE6IDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1JHUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJQQ1IwOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBQQ1IwKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0xMjYsMTYgKzE0OCwxOCBAQAogICovCiB2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqY29uZmlnKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkNvbmZpZ3VyaW5nIE1jQlNQJWQgIGlvX2Jhc2U6IDB4JTh4XG4iLAotCQkJbWNic3BbaWRdLmlkLCBpb19iYXNlKTsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiQ29uZmlndXJpbmcgTWNCU1AlZCAgcGh5c19iYXNlOiAweCUwOGx4XG4iLAorCQkJbWNic3AtPmlkLCBtY2JzcC0+cGh5c19iYXNlKTsKIAogCS8qIFdlIHdyaXRlIHRoZSBnaXZlbiBjb25maWcgKi8KIAlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBjb25maWctPnNwY3IyKTsKQEAgLTE1OCwyMyArMTgyLDI2IEBACiAgKi8KIGludCBvbWFwX21jYnNwX3NldF9pb190eXBlKHVuc2lnbmVkIGludCBpZCwgb21hcF9tY2JzcF9pb190eXBlX3QgaW9fdHlwZSkKIHsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKIAotCWlmICghbWNic3BbaWRdLmZyZWUpIHsKLQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAotCQkJbWNic3BbaWRdLmlkKTsKLQkJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwlpZiAoIW1jYnNwLT5mcmVlKSB7CisJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwKKwkJCW1jYnNwLT5pZCk7CisJCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1jYnNwW2lkXS5pb190eXBlID0gaW9fdHlwZTsKKwltY2JzcC0+aW9fdHlwZSA9IGlvX3R5cGU7CiAKLQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Miw1MyArMjA5LDYwIEBACiAKIGludCBvbWFwX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgZXJyOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaWYgKG1jYnNwW2lkXS5wZGF0YS0+b3BzLT5yZXF1ZXN0KQotCQltY2JzcFtpZF0ucGRhdGEtPm9wcy0+cmVxdWVzdChpZCk7CisJaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdCkKKwkJbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QoaWQpOwogCi0JY2xrX2VuYWJsZShtY2JzcFtpZF0uY2xrKTsKKwljbGtfZW5hYmxlKG1jYnNwLT5jbGspOwogCi0Jc3Bpbl9sb2NrKCZtY2JzcFtpZF0ubG9jayk7Ci0JaWYgKCFtY2JzcFtpZF0uZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIGlzIGN1cnJlbnRseSBpbiB1c2VcbiIsCi0JCQltY2JzcFtpZF0uaWQpOwotCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOworCWlmICghbWNic3AtPmZyZWUpIHsKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAorCQkJbWNic3AtPmlkKTsKKwkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1jYnNwW2lkXS5mcmVlID0gMDsKLQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCW1jYnNwLT5mcmVlID0gMDsKKwlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCi0JaWYgKG1jYnNwW2lkXS5pb190eXBlID09IE9NQVBfTUNCU1BfSVJRX0lPKSB7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0cmFuc21pdHRlciwgcmVjZWl2ZXIgYW5kIHNhbXBsZS1yYXRlIGdlbmVyYXRvciBhcmUKKwkgKiBub3QgcnVubmluZyBiZWZvcmUgYWN0aXZhdGluZyBJUlFzLgorCSAqLworCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNQQ1IxLCAwKTsKKwlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTUENSMiwgMCk7CisKKwlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogV2UgbmVlZCB0byBnZXQgSVJRcyBoZXJlICovCi0JCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS50eF9pcnEsIG9tYXBfbWNic3BfdHhfaXJxX2hhbmRsZXIsCi0JCQkJCTAsICJNY0JTUCIsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWluaXRfY29tcGxldGlvbigmbWNic3AtPnR4X2lycV9jb21wbGV0aW9uKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3AtPnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwKKwkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKiltY2JzcCk7CiAJCWlmIChlcnIgIT0gMCkgewotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkICIKLQkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcFtpZF0udHhfaXJxLAotCQkJCQltY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkICIKKwkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcC0+dHhfaXJxLAorCQkJCQltY2JzcC0+aWQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9pcnFfY29tcGxldGlvbikpOwotCi0JCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS5yeF9pcnEsIG9tYXBfbWNic3BfcnhfaXJxX2hhbmRsZXIsCi0JCQkJCTAsICJNY0JTUCIsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWluaXRfY29tcGxldGlvbigmbWNic3AtPnJ4X2lycV9jb21wbGV0aW9uKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3AtPnJ4X2lycSwgb21hcF9tY2JzcF9yeF9pcnFfaGFuZGxlciwKKwkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKiltY2JzcCk7CiAJCWlmIChlcnIgIT0gMCkgewotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkICIKLQkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcFtpZF0ucnhfaXJxLAotCQkJCQltY2JzcFtpZF0uaWQpOwotCQkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFJYIElSUSAlZCAiCisJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnJ4X2lycSwKKwkJCQkJbWNic3AtPmlkKTsKKwkJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCi0JCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS5yeF9pcnFfY29tcGxldGlvbikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjM3LDMxICsyNzEsMzQgQEAKIAogdm9pZCBvbWFwX21jYnNwX2ZyZWUodW5zaWduZWQgaW50IGlkKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAobWNic3BbaWRdLnBkYXRhLT5vcHMtPmZyZWUpCi0JCW1jYnNwW2lkXS5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKKwlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQorCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShpZCk7CiAKLQljbGtfZGlzYWJsZShtY2JzcFtpZF0uY2xrKTsKKwljbGtfZGlzYWJsZShtY2JzcC0+Y2xrKTsKIAotCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOwotCWlmIChtY2JzcFtpZF0uZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsCi0JCQltY2JzcFtpZF0uaWQpOwotCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOworCWlmIChtY2JzcC0+ZnJlZSkgeworCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsCisJCQltY2JzcC0+aWQpOworCQlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCQlyZXR1cm47CiAJfQogCi0JbWNic3BbaWRdLmZyZWUgPSAxOwotCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJbWNic3AtPmZyZWUgPSAxOworCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKLQlpZiAobWNic3BbaWRdLmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKKwlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogRnJlZSBJUlFzICovCi0JCWZyZWVfaXJxKG1jYnNwW2lkXS5yeF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7Ci0JCWZyZWVfaXJxKG1jYnNwW2lkXS50eF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWZyZWVfaXJxKG1jYnNwLT5yeF9pcnEsICh2b2lkICopbWNic3ApOworCQlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CkBAIC0yNzMsMTggKzMxMCwxOSBAQAogICovCiB2b2lkIG9tYXBfbWNic3Bfc3RhcnQodW5zaWduZWQgaW50IGlkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTE2IHc7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKLQotCW1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNSMSkgPj4gNSkgJiAweDc7Ci0JbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ1IxKSA+PiA1KSAmIDB4NzsKKwltY2JzcC0+cnhfd29yZF9sZW5ndGggPSAoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDUjEpID4+IDUpICYgMHg3OworCW1jYnNwLT50eF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENSMSkgPj4gNSkgJiAweDc7CiAKIAkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLwogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwpAQCAtMzEwLDcgKzM0OCw4IEBACiAKIHZvaWQgb21hcF9tY2JzcF9zdG9wKHVuc2lnbmVkIGludCBpZCkKIHsKLQl1MzIgaW9fYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCXUxNiB3OwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtMzE4LDcgKzM1Nyw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAogCS8qIFJlc2V0IHRyYW5zbWl0dGVyICovCiAJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CkBAIC0zMzcsMTQgKzM3NywxNyBAQAogLyogcG9sbGVkIG1jYnNwIGkvbyBvcGVyYXRpb25zICovCiBpbnQgb21hcF9tY2JzcF9wb2xsd3JpdGUodW5zaWduZWQgaW50IGlkLCB1MTYgYnVmKQogewotCXUzMiBiYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWJhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJYmFzZSA9IG1jYnNwLT5pb19iYXNlOworCiAJd3JpdGV3KGJ1ZiwgYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOwogCS8qIGlmIGZyYW1lIHN5bmMgZXJyb3IgLSBjbGVhciB0aGUgZXJyb3IgKi8KIAlpZiAocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKSAmIFhTWU5DX0VSUikgewpAQCAtMzY2LDggKzQwOSw4IEBACiAJCQkJICAgICAgIChYUlNUKSwKIAkJCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCWRldl9lcnIobWNic3BbaWRdLmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byIKLQkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcFtpZF0uaWQpOworCQkJCWRldl9lcnIobWNic3AtPmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byIKKwkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcC0+aWQpOwogCQkJCXJldHVybiAtMjsKIAkJCX0KIAkJfQpAQCAtMzc5LDE0ICs0MjIsMTYgQEAKIAogaW50IG9tYXBfbWNic3BfcG9sbHJlYWQodW5zaWduZWQgaW50IGlkLCB1MTYgKmJ1ZikKIHsKLQl1MzIgYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCWJhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAkvKiBpZiBmcmFtZSBzeW5jIGVycm9yIC0gY2xlYXIgdGhlIGVycm9yICovCiAJaWYgKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiBSU1lOQ19FUlIpIHsKIAkJLyogY2xlYXIgZXJyb3IgKi8KQEAgLTQwNyw4ICs0NTIsOCBAQAogCQkJCSAgICAgICAoUlJTVCksCiAJCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSk7CiAJCQkJdWRlbGF5KDEwKTsKLQkJCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJDb3VsZCBub3QgcmVhZCBmcm9tIgotCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwW2lkXS5pZCk7CisJCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiQ291bGQgbm90IHJlYWQgZnJvbSIKKwkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcC0+aWQpOwogCQkJCXJldHVybiAtMjsKIAkJCX0KIAkJfQpAQCAtNDI0LDcgKzQ2OSw4IEBACiAgKi8KIHZvaWQgb21hcF9tY2JzcF94bWl0X3dvcmQodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCkKIHsKLQl1MzIgaW9fYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggd29yZF9sZW5ndGg7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CkBAIC00MzIsMTAgKzQ3OCwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCXdvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoOworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CisJd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnR4X2lycV9jb21wbGV0aW9uKTsKIAogCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKIAkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIyLCB3b3JkID4+IDE2KTsKQEAgLTQ0NSw3ICs0OTIsOCBAQAogCiB1MzIgb21hcF9tY2JzcF9yZWN2X3dvcmQodW5zaWduZWQgaW50IGlkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTE2IHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKIApAQCAtNDUzLDExICs1MDEsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCXdvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnJ4X3dvcmRfbGVuZ3RoOwotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwl3b3JkX2xlbmd0aCA9IG1jYnNwLT5yeF93b3JkX2xlbmd0aDsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2lycV9jb21wbGV0aW9uKSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnJ4X2lycV9jb21wbGV0aW9uKTsKIAogCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKIAkJd29yZF9tc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMik7CkBAIC00NjksNyArNTE4LDggQEAKIAogaW50IG9tYXBfbWNic3Bfc3BpX21hc3Rlcl94bWl0X3dvcmRfcG9sbCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB0eF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwogCXUxNiBzcGNyMiwgc3BjcjEsIGF0dGVtcHRzID0gMCwgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKQEAgLTQ3OCwxMCArNTI4LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKLQl0eF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS50eF93b3JkX2xlbmd0aDsKLQlyeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOworCXR4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnR4X3dvcmRfbGVuZ3RoOworCXJ4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOwogCiAJaWYgKHR4X3dvcmRfbGVuZ3RoICE9IHJ4X3dvcmRfbGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5Niw4ICs1NDYsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTUxNyw4ICs1NjcsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxIHwgUlJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgcmVjZWl2ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTUzNCw3ICs1ODQsOSBAQAogCiBpbnQgb21hcF9tY2JzcF9zcGlfbWFzdGVyX3JlY3Zfd29yZF9wb2xsKHVuc2lnbmVkIGludCBpZCwgdTMyICp3b3JkKQogewotCXUzMiBpb19iYXNlLCBjbG9ja193b3JkID0gMDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdTMyIGNsb2NrX3dvcmQgPSAwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHR4X3dvcmRfbGVuZ3RoOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CiAJdTE2IHNwY3IyLCBzcGNyMSwgYXR0ZW1wdHMgPSAwLCB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwpAQCAtNTQ0LDkgKzU5NiwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7Ci0JdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7Ci0Jcnhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0ucnhfd29yZF9sZW5ndGg7CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKworCXR4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnR4X3dvcmRfbGVuZ3RoOworCXJ4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOwogCiAJaWYgKHR4X3dvcmRfbGVuZ3RoICE9IHJ4X3dvcmRfbGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU2MSw4ICs2MTUsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTU4Miw4ICs2MzYsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxIHwgUlJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgcmVjZWl2ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTYwOSw2ICs2NjMsNyBAQAogaW50IG9tYXBfbWNic3BfeG1pdF9idWZmZXIodW5zaWduZWQgaW50IGlkLCBkbWFfYWRkcl90IGJ1ZmZlciwKIAkJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgZG1hX3R4X2NoOwogCWludCBzcmNfcG9ydCA9IDA7CiAJaW50IGRlc3RfcG9ydCA9IDA7CkBAIC02MTgsNTAgKzY3Myw1MSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3BbaWRdLmRtYV90eF9zeW5jLCAiTWNCU1AgVFgiLAorCWlmIChvbWFwX3JlcXVlc3RfZG1hKG1jYnNwLT5kbWFfdHhfc3luYywgIk1jQlNQIFRYIiwKIAkJCQlvbWFwX21jYnNwX3R4X2RtYV9jYWxsYmFjaywKLQkJCQkmbWNic3BbaWRdLAorCQkJCW1jYnNwLAogCQkJCSZkbWFfdHhfY2gpKSB7Ci0JCWRldl9lcnIobWNic3BbaWRdLmRldiwgIiBVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgIgorCQlkZXZfZXJyKG1jYnNwLT5kZXYsICIgVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKIAkJCQkiTWNCU1AlZCBUWC4gVHJ5aW5nIElSUSBiYXNlZCBUWFxuIiwKLQkJCQltY2JzcFtpZF0uaWQpOworCQkJCW1jYnNwLT5pZCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KLQltY2JzcFtpZF0uZG1hX3R4X2xjaCA9IGRtYV90eF9jaDsKKwltY2JzcC0+ZG1hX3R4X2xjaCA9IGRtYV90eF9jaDsKIAotCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgVFggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwW2lkXS5pZCwKKwlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIFRYIERNQSBvbiBjaGFubmVsICVkXG4iLCBtY2JzcC0+aWQsCiAJCWRtYV90eF9jaCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfZG1hX2NvbXBsZXRpb24pKTsKKwlpbml0X2NvbXBsZXRpb24oJm1jYnNwLT50eF9kbWFfY29tcGxldGlvbik7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CiAJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CiAJfQogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKLQkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3R4X3N5bmM7CisJCXN5bmNfZGV2ID0gbWNic3AtPmRtYV90eF9zeW5jOwogCi0Jb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwLT5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAogCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAogCSBzeW5jX2RldiwgMCk7CiAKLQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwLT5kbWFfdHhfbGNoLAogCQkJCSBzcmNfcG9ydCwKIAkJCQkgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJIG1jYnNwW2lkXS5waHlzX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAorCQkJCSBtY2JzcC0+cGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKIAkJCQkgMCwgMCk7CiAKLQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcC0+ZG1hX3R4X2xjaCwKIAkJCQlkZXN0X3BvcnQsCiAJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCiAJCQkJYnVmZmVyLAogCQkJCTAsIDApOwogCi0Jb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV90eF9sY2gpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfZG1hX2NvbXBsZXRpb24pKTsKKwlvbWFwX3N0YXJ0X2RtYShtY2JzcC0+ZG1hX3R4X2xjaCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnR4X2RtYV9jb21wbGV0aW9uKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjcwLDYgKzcyNiw3IEBACiBpbnQgb21hcF9tY2JzcF9yZWN2X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLAogCQkJCXVuc2lnbmVkIGludCBsZW5ndGgpCiB7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBkbWFfcnhfY2g7CiAJaW50IHNyY19wb3J0ID0gMDsKIAlpbnQgZGVzdF9wb3J0ID0gMDsKQEAgLTY3OSw1MCArNzM2LDUxIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAob21hcF9yZXF1ZXN0X2RtYShtY2JzcFtpZF0uZG1hX3J4X3N5bmMsICJNY0JTUCBSWCIsCisJaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3AtPmRtYV9yeF9zeW5jLCAiTWNCU1AgUlgiLAogCQkJCW9tYXBfbWNic3BfcnhfZG1hX2NhbGxiYWNrLAotCQkJCSZtY2JzcFtpZF0sCisJCQkJbWNic3AsCiAJCQkJJmRtYV9yeF9jaCkpIHsKLQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKIAkJCQkiTWNCU1AlZCBSWC4gVHJ5aW5nIElSUSBiYXNlZCBSWFxuIiwKLQkJCQltY2JzcFtpZF0uaWQpOworCQkJCW1jYnNwLT5pZCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KLQltY2JzcFtpZF0uZG1hX3J4X2xjaCA9IGRtYV9yeF9jaDsKKwltY2JzcC0+ZG1hX3J4X2xjaCA9IGRtYV9yeF9jaDsKIAotCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgUlggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwW2lkXS5pZCwKKwlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIFJYIERNQSBvbiBjaGFubmVsICVkXG4iLCBtY2JzcC0+aWQsCiAJCWRtYV9yeF9jaCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKKwlpbml0X2NvbXBsZXRpb24oJm1jYnNwLT5yeF9kbWFfY29tcGxldGlvbik7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CiAJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CiAJfQogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKLQkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3J4X3N5bmM7CisJCXN5bmNfZGV2ID0gbWNic3AtPmRtYV9yeF9zeW5jOwogCi0Jb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwLT5kbWFfcnhfbGNoLAogCQkJCQlPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCQlsZW5ndGggPj4gMSwgMSwKIAkJCQkJT01BUF9ETUFfU1lOQ19FTEVNRU5ULAogCQkJCQlzeW5jX2RldiwgMCk7CiAKLQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcC0+ZG1hX3J4X2xjaCwKIAkJCQlzcmNfcG9ydCwKIAkJCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCQltY2JzcFtpZF0ucGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKKwkJCQltY2JzcC0+cGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKIAkJCQkwLCAwKTsKIAotCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3AtPmRtYV9yeF9sY2gsCiAJCQkJCWRlc3RfcG9ydCwKIAkJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCiAJCQkJCWJ1ZmZlciwKIAkJCQkJMCwgMCk7CiAKLQlvbWFwX3N0YXJ0X2RtYShtY2JzcFtpZF0uZG1hX3J4X2xjaCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmKG1jYnNwW2lkXS5yeF9kbWFfY29tcGxldGlvbikpOworCW9tYXBfc3RhcnRfZG1hKG1jYnNwLT5kbWFfcnhfbGNoKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+cnhfZG1hX2NvbXBsZXRpb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MzcsMTIgKzc5NSwxNCBAQAogdm9pZCBvbWFwX21jYnNwX3NldF9zcGlfbW9kZSh1bnNpZ25lZCBpbnQgaWQsCiAJCQkJY29uc3Qgc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyAqc3BpX2NmZykKIHsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9jZmc7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCiAJbWVtc2V0KCZtY2JzcF9jZmcsIDAsIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnKSk7CiAKQEAgLTgwMyw5ICs4NjMsMTAgQEAKICAqIE1jQlNQMSBhbmQgTWNCU1AzIGFyZSBkaXJlY3RseSBtYXBwZWQgb24gMTYxMCBhbmQgMTUxMC4KICAqIDczMCBoYXMgb25seSAyIE1jQlNQLCBhbmQgYm90aCBvZiB0aGVtIGFyZSBNUFUgcGVyaXBoZXJhbHMuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfbWNic3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfbWNic3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgaWQgPSBwZGV2LT5pZCAtIDE7CiAJaW50IHJldCA9IDA7CiAKQEAgLTgxOCw0NyArODc5LDYzIEBACiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJJbml0aWFsaXppbmcgT01BUCBNY0JTUCAoJWQpLlxuIiwgcGRldi0+aWQpOwogCi0JaWYgKGlkID49IE9NQVBfTUFYX01DQlNQX0NPVU5UKSB7CisJaWYgKGlkID49IG9tYXBfbWNic3BfY291bnQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBNY0JTUCBkZXZpY2UgaWQgKCVkKVxuIiwgaWQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJm1jYnNwW2lkXS5sb2NrKTsKLQltY2JzcFtpZF0uaWQgPSBpZCArIDE7Ci0JbWNic3BbaWRdLmZyZWUgPSAxOwotCW1jYnNwW2lkXS5kbWFfdHhfbGNoID0gLTE7Ci0JbWNic3BbaWRdLmRtYV9yeF9sY2ggPSAtMTsKLQotCW1jYnNwW2lkXS5waHlzX2Jhc2UgPSBwZGF0YS0+cGh5c19iYXNlOwotCW1jYnNwW2lkXS5pb19iYXNlID0gcGRhdGEtPnZpcnRfYmFzZTsKLQkvKiBEZWZhdWx0IEkvTyBpcyBJUlEgYmFzZWQgKi8KLQltY2JzcFtpZF0uaW9fdHlwZSA9IE9NQVBfTUNCU1BfSVJRX0lPOwotCW1jYnNwW2lkXS50eF9pcnEgPSBwZGF0YS0+dHhfaXJxOwotCW1jYnNwW2lkXS5yeF9pcnEgPSBwZGF0YS0+cnhfaXJxOwotCW1jYnNwW2lkXS5kbWFfcnhfc3luYyA9IHBkYXRhLT5kbWFfcnhfc3luYzsKLQltY2JzcFtpZF0uZG1hX3R4X3N5bmMgPSBwZGF0YS0+ZG1hX3R4X3N5bmM7Ci0KLQlpZiAocGRhdGEtPmNsa19uYW1lKQotCQltY2JzcFtpZF0uY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBwZGF0YS0+Y2xrX25hbWUpOwotCWlmIChJU19FUlIobWNic3BbaWRdLmNsaykpIHsKLQkJbWNic3BbaWRdLmZyZWUgPSAwOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiSW52YWxpZCBjbG9jayBjb25maWd1cmF0aW9uIGZvciBNY0JTUCVkLlxuIiwKLQkJCW1jYnNwW2lkXS5pZCk7Ci0JCXJldCA9IC1FSU5WQUw7CisJbWNic3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCksIEdGUF9LRVJORUwpOworCWlmICghbWNic3ApIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBleGl0OwogCX0KKwltY2JzcF9wdHJbaWRdID0gbWNic3A7CiAKLQltY2JzcFtpZF0ucGRhdGEgPSBwZGF0YTsKLQltY2JzcFtpZF0uZGV2ID0gJnBkZXYtPmRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmbWNic3BbaWRdKTsKKwlzcGluX2xvY2tfaW5pdCgmbWNic3AtPmxvY2spOworCW1jYnNwLT5pZCA9IGlkICsgMTsKKwltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPmRtYV90eF9sY2ggPSAtMTsKKwltY2JzcC0+ZG1hX3J4X2xjaCA9IC0xOwogCisJbWNic3AtPnBoeXNfYmFzZSA9IHBkYXRhLT5waHlzX2Jhc2U7CisJbWNic3AtPmlvX2Jhc2UgPSBpb3JlbWFwKHBkYXRhLT5waHlzX2Jhc2UsIFNaXzRLKTsKKwlpZiAoIW1jYnNwLT5pb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJLyogRGVmYXVsdCBJL08gaXMgSVJRIGJhc2VkICovCisJbWNic3AtPmlvX3R5cGUgPSBPTUFQX01DQlNQX0lSUV9JTzsKKwltY2JzcC0+dHhfaXJxID0gcGRhdGEtPnR4X2lycTsKKwltY2JzcC0+cnhfaXJxID0gcGRhdGEtPnJ4X2lycTsKKwltY2JzcC0+ZG1hX3J4X3N5bmMgPSBwZGF0YS0+ZG1hX3J4X3N5bmM7CisJbWNic3AtPmRtYV90eF9zeW5jID0gcGRhdGEtPmRtYV90eF9zeW5jOworCisJaWYgKHBkYXRhLT5jbGtfbmFtZSkKKwkJbWNic3AtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgcGRhdGEtPmNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKG1jYnNwLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGNsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIE1jQlNQJWQuXG4iLAorCQkJbWNic3AtPmlkKTsKKwkJcmV0ID0gUFRSX0VSUihtY2JzcC0+Y2xrKTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCW1jYnNwLT5wZGF0YSA9IHBkYXRhOworCW1jYnNwLT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jYnNwKTsKKwlyZXR1cm4gMDsKKworZXJyX2NsazoKKwlpb3VubWFwKG1jYnNwLT5pb19iYXNlKTsKK2Vycl9pb3JlbWFwOgorCW1jYnNwLT5mcmVlID0gMDsKIGV4aXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvbWFwX21jYnNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9tY2JzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtODcyLDYgKzk0OSw4IEBACiAJCWNsa19kaXNhYmxlKG1jYnNwLT5jbGspOwogCQljbGtfcHV0KG1jYnNwLT5jbGspOwogCisJCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOworCiAJCW1jYnNwLT5jbGsgPSBOVUxMOwogCQltY2JzcC0+ZnJlZSA9IDA7CiAJCW1jYnNwLT5kZXYgPSBOVUxMOwpAQCAtODgyLDcgKzk2MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfbWNic3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvbWFwX21jYnNwX3Byb2JlLAotCS5yZW1vdmUJCT0gb21hcF9tY2JzcF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvbWFwX21jYnNwX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm9tYXAtbWNic3AiLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBlMDAwM2UwLi45ZjlhOTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogI2RlZmluZSBvbWFwMV9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogCiBzdGF0aWMgdm9pZCAoKl9vbWFwMl9zcmFtX2Rkcl9pbml0KSh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAogCQkJICAgICAgdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spOwpAQCAtMzUyLDIzICszNTIsMTkgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAKLXN0YXRpYyB1MzIgKCpfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYykodTMyIHBlcmZfbGV2ZWwpOwotdTMyIG9tYXAyX3NyYW1fcmVwcm9ncmFtX2dwbWModTMyIHBlcmZfbGV2ZWwpCitzdGF0aWMgdTMyICgqX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkodTMyIHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxhLAorCQkJCQkgICAgICB1MzIgc2RyY19hY3RpbV9jdHJsYiwKKwkJCQkJICAgICAgdTMyIG0yKTsKK3UzMiBvbWFwM19jb25maWd1cmVfY29yZV9kcGxsKHUzMiBzZHJjX3Jmcl9jdHJsLCB1MzIgc2RyY19hY3RpbV9jdHJsYSwKKwkJCSAgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxiLCB1MzIgbTIpCiB7Ci0JaWYgKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYykKKwlpZiAoIV9vbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCiAJCW9tYXBfc3JhbV9lcnJvcigpOwogCi0JcmV0dXJuIF9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jKHBlcmZfbGV2ZWwpOwotfQotCi1zdGF0aWMgdTMyICgqX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkodTMyIG0sIHUzMiBuLAotCQkJCQkJdTMyIGZyZXFzZWwsIHUzMiBtMik7Ci11MzIgb21hcDJfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKHUzMiBtLCB1MzIgbiwgdTMyIGZyZXFzZWwsIHUzMiBtMikKLXsKLQlpZiAoIV9vbWFwMl9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCi0JCW9tYXBfc3JhbV9lcnJvcigpOwotCi0JcmV0dXJuIF9vbWFwMl9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwobSwgbiwgZnJlcXNlbCwgbTIpOworCXJldHVybiBfb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgICAgICBzZHJjX2FjdGltX2N0cmxhLAorCQkJCQkgICAgICAgc2RyY19hY3RpbV9jdHJsYiwgbTIpOwogfQogCiAvKiBSRVZJU0lUOiBTaG91bGQgdGhpcyBiZSBzYW1lIGFzIG9tYXAzNHh4X3NyYW1faW5pdCgpIGFmdGVyIG9mZi1pZGxlPyAqLwpAQCAtMzc2LDMxICszNzIsMTYgQEAKIHsKIAlvbWFwX3NyYW1fY2VpbCA9IG9tYXBfc3JhbV9iYXNlICsgb21hcF9zcmFtX3NpemU7CiAKLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWMsCi0JCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWNfc3opOwotCi0JX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9Ci0JCQlvbWFwX3NyYW1fcHVzaChvbWFwMzR4eF9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwsCi0JCQkJCW9tYXAzNHh4X3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF9zeik7CisJX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9CisJCW9tYXBfc3JhbV9wdXNoKG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCwKKwkJCSAgICAgICBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opOwogfQogCiBpbnQgX19pbml0IG9tYXAzNHh4X3NyYW1faW5pdCh2b2lkKQogewotCV9vbWFwMl9zcmFtX2Rkcl9pbml0ID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9kZHJfaW5pdCwKLQkJCQkJb21hcDM0eHhfc3JhbV9kZHJfaW5pdF9zeik7Ci0KLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX3NkcmMsCi0JCQkJCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX3NkcmNfc3opOwotCi0JX29tYXAyX3NldF9wcmNtID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9zZXRfcHJjbSwKLQkJCQkJb21hcDM0eHhfc3JhbV9zZXRfcHJjbV9zeik7Ci0KLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWMsCi0JCQkJCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWNfc3opOwotCi0JX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9Ci0JCQkJb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsLAotCQkJCQlvbWFwMzR4eF9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opOworCV9vbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwgPQorCQlvbWFwX3NyYW1fcHVzaChvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwsCisJCQkgICAgICAgb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNkN2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIGR1bW15IG1ha2VmaWxlLCBjdXJyZW50bHkganVzdCBpbmNsdWRpbmcgYXNtL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQKKworb2JqLW4JOj0gZHVtbXkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE3ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw3NSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKy8qIFRoZSBTM0MyNDQwIGltcGxlbWVudGF0aW9ucyBhcmUgdXNlZCBieSBkZWZhdWx0IGFzIHRoZXkgYXJlIHRoZQorICogbW9zdCB3aWRlbHkgcmUtdXNlZCAqLworCisJLm1hY3JvIGZpZm9fbGV2ZWxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQlhbmQJXHJkLCBccmQsICNTM0MyNDQwX1VGU1RBVF9UWE1BU0sKKwkuZW5kbQorCisjaWZuZGVmIGZpZm9fbGV2ZWwKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0MTAKKyNlbmRpZgorCisJLm1hY3JvICBmaWZvX2Z1bGxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhGVUxMCisJLmVuZG0KKworI2lmbmRlZiBmaWZvX2Z1bGwKKyNkZWZpbmUgZmlmb19mdWxsIGZpZm9fZnVsbF9zM2MyNDQwCisjZW5kaWYKKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiIAlccmQsIFtccngsICMgUzNDMjQxMF9VVFhIIF0KKwkuZW5kbQorCisJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJZmlmb19mdWxsIFxyZCwgXHJ4CisJCWJuZQkxMDAzYgorCQliCTEwMDJmCisKKzEwMDE6CisJCUAgYnVzeSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZDT04gXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQlAIGZpZm8gZW5hYmxlZD8KKwkJYmVxCTEwMDFmCQkJCUAKKwkJQCBGSUZPIGVuYWJsZWQuLi4KKzEwMDM6CisJCWZpZm9fbGV2ZWwgXHJkLCBccngKKwkJdGVxCVxyZCwgIzAKKwkJYm5lCTEwMDNiCisJCWIJMTAwMmYKKzEwMDE6CisJCUAgaWRsZSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL21hcC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvbWFwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtYWRjLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1hZGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtYWRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWFkYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1zZXJpYWwuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXRpbWVyLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy10aW1lci5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGYwMDZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDE1NSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgLSB1bmNvbXByZXNzIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAorCit0eXBlZGVmIHVuc2lnbmVkIGludCB1cGZfdDsJLyogY2Fubm90IGluY2x1ZGUgbGludXgvc2VyaWFsX2NvcmUuaCAqLworCisvKiB1YXJ0IHNldHVwICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlmb19tYXNrOworc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21heDsKKworLyogZm9yd2FyZCBkZWNsZXJhdGlvbnMgKi8KKworc3RhdGljIHZvaWQgYXJjaF9kZXRlY3RfY3B1KHZvaWQpOworCisvKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLworCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmg+CisKKy8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KKyN1bmRlZiBTM0MyNDEwX1dET0dSRUcKKyNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjRYWF9QQV9XQVRDSERPRyArICh4KSkpCisKKy8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLworI2RlZmluZSBGSUZPX01BWAkgKDE0KQorCisjZGVmaW5lIHVhcnRfYmFzZSBTM0MyNFhYX1BBX1VBUlQgKyAoMHg0MDAwKkNPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCit1YXJ0X3dyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7CisKKwlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7CisJKnB0ciA9IHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50Cit1YXJ0X3JkKHVuc2lnbmVkIGludCByZWcpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7CisKKwlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7CisJcmV0dXJuICpwdHI7Cit9CisKKy8qIHdlIGNhbiBkZWFsIHdpdGggdGhlIGNhc2UgdGhlIFVBUlRzIGFyZSBiZWluZyBydW4KKyAqIGluIEZJRk8gbW9kZSwgc28gdGhhdCB3ZSBkb24ndCBob2xkIHVwIG91ciBleGVjdXRpb24KKyAqIHdhaXRpbmcgZm9yIHR4IHRvIGhhcHBlbi4uLgorKi8KKworc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCit7CisJaWYgKHVhcnRfcmQoUzNDMjQxMF9VRkNPTikgJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSB7CisJCWludCBsZXZlbDsKKworCQl3aGlsZSAoMSkgeworCQkJbGV2ZWwgPSB1YXJ0X3JkKFMzQzI0MTBfVUZTVEFUKTsKKwkJCWxldmVsICY9IGZpZm9fbWFzazsKKworCQkJaWYgKGxldmVsIDwgZmlmb19tYXgpCisJCQkJYnJlYWs7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIG5vdCB1c2luZyBmaWZvcyAqLworCisJCXdoaWxlICgodWFydF9yZChTM0MyNDEwX1VUUlNUQVQpICYgUzNDMjQxMF9VVFJTVEFUX1RYRSkgIT0gUzNDMjQxMF9VVFJTVEFUX1RYRSkKKwkJCWJhcnJpZXIoKTsKKwl9CisKKwkvKiB3cml0ZSBieXRlIHRvIHRyYW5zbWlzc2lvbiByZWdpc3RlciAqLworCXVhcnRfd3IoUzNDMjQxMF9VVFhILCBjaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisKKy8qIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRworICoKKyAqIFNpbXBsZSBib290LXRpbWUgd2F0Y2hkb2cgc2V0dXAsIHRvIHJlYm9vdCB0aGUgc3lzdGVtIGlmIHRoZXJlIGlzCisgKiBhbnkgcHJvYmxlbSB3aXRoIHRoZSBib290IHByb2Nlc3MKKyovCisKKyNpZmRlZiBDT05GSUdfUzNDX0JPT1RfV0FUQ0hET0cKKworI2RlZmluZSBXRE9HX0NPVU5UICgweGZmMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF93ZG9nKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1REQVQpOworCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4ODApLCBTM0MyNDEwX1dUQ09OKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQKKworc3RhdGljIHZvaWQgYXJjaF9kZWNvbXBfZXJyb3IoY29uc3QgY2hhciAqeCkKK3sKKwlwdXRzdHIoIlxuXG4iKTsKKwlwdXRzdHIoeCk7CisJcHV0c3RyKCJcblxuIC0tIFN5c3RlbSByZXNldHRpbmdcbiIpOworCisJX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVERBVCk7CisJX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVENOVCk7CisJX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFIHwgUzNDMjQxMF9XVENPTl9ESVYxMjggfCBTM0MyNDEwX1dUQ09OX1JTVEVOIHwgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDQwKSwgUzNDMjQxMF9XVENPTik7CisKKwl3aGlsZSgxKTsKK30KKworI2RlZmluZSBhcmNoX2Vycm9yIGFyY2hfZGVjb21wX2Vycm9yCisjZW5kaWYKKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqZXJyKTsKKworc3RhdGljIHZvaWQKK2FyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJLyogd2UgbWF5IG5lZWQgdG8gc2V0dXAgdGhlIHVhcnQocykgaGVyZSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcKKwkgKiBvbiBhbiBCQVNULi4uIHRoZSBCQVNUIHdpbGwgaGF2ZSBsZWZ0IHRoZSB1YXJ0cyBjb25maWd1cmVkCisJICogYWZ0ZXIgY2FsbGluZyBsaW51eC4KKwkgKi8KKworCWFyY2hfZGV0ZWN0X2NwdSgpOworCWFyY2hfZGVjb21wX3dkb2dfc3RhcnQoKTsKK30KKworCisjZW5kaWYgLyogX19BU01fUExBVF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKaW5kZXggNDAwNTQxMy4uYTAwNWRkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIC8qIGNsb2NrIGluZm9ybWF0aW9uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKaW5kZXggZDUyOGY0Ni4uMzA5ODczNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKQEAgLTQwLDkgKzQwLDkgQEAKIAogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIC8qIExFRCBkZXZpY2VzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCA5YzYwN2JiLi4yMmEzMjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC00MiwxOCArNDIsMTggQEAKICNpbmNsdWRlIDxtYWNoL3N5c3RlbS1yZXNldC5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MDAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KICNpbmNsdWRlICJzM2MyNDR4LmgiCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQyLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CiAKIHN0cnVjdCBjcHVfdGFibGUgewogCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggNmIxM2I1NC4uZTkzZjhiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oPgogCiAvKiBTZXJpYWwgcG9ydCByZWdpc3RyYXRpb25zICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKaW5kZXggZDYzNDQ0Ni4uMWJhZjk0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKIC8qIGlvIG1hcCBmb3IgZG1hICovCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpkbWFfYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jbG9jay5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY29tbW9uLXNtZGsuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NvbW1vbi1zbWRrLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2NwdS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZGV2cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9kZXZzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZG1hLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RtYS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RtYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9pcnEuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQwMC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0MC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0Mi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCmluZGV4IDU5MGZjNWEuLjk2M2Y3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKQEAgLTY1LDkgKzY1LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAogLyogd2FrZXVwIGlycSBjb250cm9sICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwppbmRleCAwYTA3NGQzLi4yMWRmYTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCmluZGV4IGQzOTM0YjEuLjhlZmI1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CkBAIC00OCw3ICs0OCw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAvKiBmb3IgZXh0ZXJuYWwgdXNlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYwppbmRleCAzMDZjYzljLi5iOGU4NTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS1jbG9jay5jCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgogCiAvKiBFYWNoIG9mIHRoZSB0aW1lcnMgMCB0aHJvdWdoIDUgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCiAgKiBjbG9jayB0cmVlLCB3aXRoIHRoZSBpbnB1dHMgZGVwZW5kaW5nIG9uIHRoZSB0aW1lcnMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKaW5kZXggN2E5MmM5My4uZmViNzcwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgogCiBzdHJ1Y3QgcHdtX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAkgbGlzdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCmluZGV4IDExOTY0N2EuLjdjMDk3NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtY2xvY2suYwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIGludCBzM2MyNDQwX3NldHBhcmVudF9hcm1jbGsoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCmluZGV4IDA2MDFjNWYuLjA5MDJhZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAKIC8qIGNhbWVyYSBpcnEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKaW5kZXggMTQ2ODYzYS4uYzAzNDRmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCkBAIC0zMCwxOCArMzAsMTggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpb2ouaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDAuaD4KICNpbmNsdWRlICJzM2MyNDR4LmgiCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDR4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJSU9ERVNDX0VOVChDTEtQV1IpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwppbmRleCA0OTgxYTA4Yi4uNzY1OTRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKIC8qIENPTkZJR19ERUJVR19SRVNVTUUgaXMgZGFuZ2Vyb3VzIGlmIHlvdXIgYm9vdGxvYWRlciBkb2VzIG5vdAogICogcmVzZXQgdGhlIFVBUlQgY29uZmlndXJhdGlvbiwgb25seSBlbmFibGUgaWYgeW91IHJlYWxseSBuZWVkIHRoaXMhCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYwppbmRleCA2NGJmYTE5Li5jNTE5MTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMKQEAgLTMzLDEyICszMywxMiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0dmFsOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdXNlY190aWNrczsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCA3YzIzOWE5Li4zM2E1YjI5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC03Miw2ICs3Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcyIKIAogc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNjRjZTQwZS4uZDVkMWQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMDMsNiArMTAzLDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKIAogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0VMRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMjk0YjI1Zi4uNDQ0MmY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTYsNiArOTYsNyBAQAogI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9DUFVfR09JTkdfVE9fU0xFRVAgKDEgPDwgVElGX0NQVV9HT0lOR19UT19TTEVFUCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKIC8qIE5vdGU6IFRoZSBtYXNrcyBiZWxvdyBtdXN0IG5ldmVyIHNwYW4gbW9yZSB0aGFuIDE2IGJpdHMhICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY3B1ZnJlcS5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKaW5kZXggNWRkOGQyNS4uZDg0ZWZlNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAlwb2xpY3ktPmN1ciA9IGF0MzJfZ2V0X3NwZWVkKDApOwogCXBvbGljeS0+bWluID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxOwogCXBvbGljeS0+bWF4ID0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxOwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAKIAlwcmludGsoImNwdWZyZXE6IEFUMzJBUCBDUFUgZnJlcXVlbmN5IGRyaXZlclxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCA4MTAyYzc5Li4yOWU3MWVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC02NCw4ICs2NCwxMSBAQAogCWRlcGVuZHMgb24gT1BST0ZJTEUKIAogc291cmNlICJpbml0L0tjb25maWciCisKIHNvdXJjZSAia2VybmVsL0tjb25maWcucHJlZW1wdCIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJCbGFja2ZpbiBQcm9jZXNzb3IgT3B0aW9ucyIKIAogY29tbWVudCAiUHJvY2Vzc29yIGFuZCBCb2FyZCBTZXR0aW5ncyIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCmluZGV4IGMzM2JmNmYuLjQ0NDNhNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCA2Njg1NGE4Li40YTJhNjYwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTc3Miw3ICs3NzIsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggNmJjMTFkYi4uZGVlYjVlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC02NzQsNyArNjc0LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc0MCw3ICs3NDAsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBkNzdkOTkxLi5jMjMyNjdlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTY4MSw3ICs2ODEsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggNWZkN2M0Yi4uNjNhMGY4NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC03MzEsNyArNzMxLDcgQEAKICMgQ09ORklHX0NBTl9VTkNUV0lOQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19DQU5fQkxBQ0tGSU49bQogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NzEsNyArODcxLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggMzkwNjY5ZS4uYmY2MzY2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC04NTUsNyArODU1LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDk3NmE0ZDcuLjNjNzBkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtNzE5LDcgKzcxOSw3IEBACiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03ODUsNyArNzg1LDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggMDc5OWFhOS4uYjZhMTQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC02NzksNyArNjc5LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCmluZGV4IDA5ZGVlYTQuLmMzYmE5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwpAQCAtNjcyLDcgKzY3Miw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKaW5kZXggMjE5ZmMzNC4uY2RjNmI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKQEAgLTcwMyw3ICs3MDMsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCmluZGV4IDk4NzNkNTguLmYwNzRiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCkBAIC02ODMsNyArNjgzLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggMGUzNjA1Zi4uNWM0NGZkYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC03NjIsNyArNzYyLDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTkwOSw3ICs5MDksNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwppbmRleCA1OWM3Y2RiLi4wODZmZTVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKQEAgLTY4NCw3ICs2ODQsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDVlZjllMzUuLjQ0MDM0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQkxBQ0tGSU5fQ0FDSEVGTFVTSF9ICiAKLWV4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBibGFja2Zpbl9kZmx1c2hfcGFnZSh2b2lkICopOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5faWNhY2hlX2RjYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CitleHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyZXNzKTsKK2V4dGVybiB2b2lkIGJsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CitleHRlcm4gdm9pZCBibGFja2Zpbl9kZmx1c2hfcGFnZSh2b2lkICpwYWdlKTsKIAogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCkBAIC04NSw0ICs4NSwyMSBAQAogIyBkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9pY2FjaGVfb247CisKK3N0YXRpYyBpbmxpbmUgaW50IGJmaW5fYWRkcl9kY2FjaGFibGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworI2lmZGVmIENPTkZJR19CRklOX0RDQUNIRQorCWlmIChhZGRyIDwgKF9yYW1lbmQgLSBETUFfVU5DQUNIRURfUkVHSU9OKSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCWlmIChyZXNlcnZlZF9tZW1fZGNhY2hlX29uICYmCisJCWFkZHIgPj0gX3JhbWVuZCAmJiBhZGRyIDwgcGh5c2ljYWxfbWVtX2VuZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9JQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKaW5kZXggZDE3OWI3NC4uZjg0NWI0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaApAQCAtODcsMjMgKzg3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NUFUgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbjsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9pY2FjaGVfb247Ci0KIGV4dGVybiB2b2lkIGdlbmVyYXRlX2NwbGJfdGFibGVzKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIGludCBiZmluX2FkZHJfZGNhY2hhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLSNpZmRlZiBDT05GSUdfQkZJTl9EQ0FDSEUKLQlpZiAoYWRkciA8IChfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTikpCi0JCXJldHVybiAxOwotI2VuZGlmCi0KLQlpZiAocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbiAmJgotCQlhZGRyID49IF9yYW1lbmQgJiYgYWRkciA8IHBoeXNpY2FsX21lbV9lbmQpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNjdhMDNhOGEuLmNkYmZjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTIyLDYgKzEyMiw2IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggY2JiZjdmZi4uN2RjNzdhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaApAQCAtMTM0LDYgKzEzNCwzNiBAQAogZXh0ZXJuIHZvaWQgZG1hX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CiBleHRlcm4gdm9pZCBkbWFfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIAorc3RhdGljIGlubGluZSB2b2lkIHJlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnNsKCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlYWRzdyhjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnN3KCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlYWRzYihjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnNiKCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJb3V0c2woKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzdyhjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlvdXRzdygodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNiKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCW91dHNiKCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKwogLyoKICAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGltZXguaAppbmRleCAyMmIwODA2Li4yNDhhZWIwNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGltZXguaApAQCAtMTYsNyArMTYsNyBAQAogc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAsIHRtcDI7Ci0JX19hc21fXygiJTAgPSBjeWNsZXM7ICUxID0gY3ljbGVzMjsiIDogIj1kIih0bXApLCAiPWQiKHRtcDIpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiJTAgPSBjeWNsZXM7ICUxID0gY3ljbGVzMjsiIDogIj1kIih0bXApLCAiPWQiKHRtcDIpKTsKIAlyZXR1cm4gdG1wIHwgKChjeWNsZXNfdCl0bXAyIDw8IDMyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCmluZGV4IDUwOTQ2NzcuLmJhYTUyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3BsYmluaXQuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApAQCAtMTQ0LDkgKzE0NSw3IEBACiAKIAlkX2RhdGEgPSBDUExCX1NVUFZfV1IgfCBDUExCX1ZBTElEIHwgQ1BMQl9ESVJUWSB8IFBBR0VfU0laRV80S0I7CiAjaWZkZWYgQ09ORklHX0JGSU5fRENBQ0hFCi0JaWYgKGFkZHIgPCBfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTiB8fAotCSAgICAocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbiAmJiBhZGRyID49IF9yYW1lbmQgJiYKLQkgICAgIGFkZHIgPCBwaHlzaWNhbF9tZW1fZW5kKSkgeworCWlmIChiZmluX2FkZHJfZGNhY2hhYmxlKGFkZHIpKSB7CiAJCWRfZGF0YSB8PSBDUExCX0wxX0NIQkwgfCBBTk9NQUxZXzA1MDAwMTU4X1dPUktBUk9VTkQ7CiAjaWZkZWYgQ09ORklHX0JGSU5fV1QKIAkJZF9kYXRhIHw9IENQTEJfTDFfQU9XIHwgQ1BMQl9XVDsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCAzMDEyNTJlLi41MTJmOGM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcGxiLmg+CiAjaW5jbHVkZSA8YXNtL2NwbGJpbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaGVhZC5TCmluZGV4IDY1ODgxNzAuLjBlYjFkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2hlYWQuUwpAQCAtODgsNyArODgsNyBAQAogCXIxID0gcjEgPDwgODsgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0IGl0IG92ZXIgICAgICAgICAgICAgICAgICAgKi8KIAlyMCA9IHIxIHwgcjA7ICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlbSBhbGwgdG9nZXRoZXIgICAgICAgICAgICovCiAjaWZkZWYgQU5PTUFMWV8wNTAwMDI2NQotCXIwID0gQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KICNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9oZWFkLlMKaW5kZXggNjE5Njg1Yi4uOWZjOTVhYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TCkBAIC03OSw3ICs3OSw3IEBACiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KICNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1Ci0JcjAgPSBCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKwlCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLwogI2VuZGlmCiAKIAlwMC5oID0gaGkoUExMX0NUTCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCAzNGFiMGU0Li5mM2Q5ZTQ5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogCX0KIAlpZiAodWFydC0+cnRzX3BpbiA+PSAwKSB7CiAJCWdwaW9fcmVxdWVzdCh1YXJ0LT5ydHNfcGluLCBEUklWRVJfTkFNRSk7Ci0JCWdwaW9fZGlyZWN0aW9uX2lucHV0KHVhcnQtPnJ0c19waW4sIDApOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodWFydC0+cnRzX3BpbiwgMCk7CiAJfQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKaW5kZXggZGM1YTMwOC4uOGQzOTQzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwpAQCAtNTc3LDExICs1NzcsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZDc4NzkuaD4KLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc5X2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDAsCi0JLmJpdHNfcGVyX3dvcmQgPSAxNiwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3ODc5X3BsYXRmb3JtX2RhdGEgYmZpbl9hZDc4NzlfdHNfaW5mbyA9IHsKIAkubW9kZWwJCQk9IDc4NzksCS8qIE1vZGVsID0gQUQ3ODc5ICovCiAJLnhfcGxhdGVfb2htcwkJPSA2MjAsCS8qIDYyMCBPaG0gZnJvbSB0aGUgdG91Y2ggZGF0YXNoZWV0ICovCkBAIC01OTcsNiArNTkyLDEzIEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc5X2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSAxNiwKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9TUElERVYpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9TUElERVZfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaWRldl9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLApAQCAtNzUwLDcgKzc1Miw3IEBACiAJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2FkNzg3N19jaGlwX2luZm8sCiAJfSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSkgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJX01PRFVMRSkKIAl7CiAJCS5tb2RhbGlhcyA9ICJhZDc4NzkiLAogCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2FkNzg3OV90c19pbmZvLApAQCAtOTM1LDcgKzkzNyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQUQ3MTQyKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19BRDcxNDJfTU9EVUxFKQogCXsKIAkJSTJDX0JPQVJEX0lORk8oImFkNzE0Ml9qb3lzdGljayIsIDB4MkMpLAotCQkuaXJxID0gNTUsCisJCS5pcnEgPSBJUlFfUEY1LAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19UV0lfTENEKSB8fCBkZWZpbmVkKENPTkZJR19UV0lfTENEX01PRFVMRSkKQEAgLTk0Niw3ICs5NDgsMTQgQEAKICNpZiBkZWZpbmVkKENPTkZJR19UV0lfS0VZUEFEKSB8fCBkZWZpbmVkKENPTkZJR19UV0lfS0VZUEFEX01PRFVMRSkKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0X2tleXBhZCIsIDB4MjcpLAotCQkuaXJxID0gNzIsCisJCS5pcnEgPSBJUlFfUEc2LAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhZDc4NzkiLCAweDJGKSwKKwkJLmlycSA9IElSUV9QRzUsCisJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYmZpbl9hZDc4NzlfdHNfaW5mbywKIAl9LAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9oZWFkLlMKaW5kZXggNTU5YTdlZS4uZjVjOTRiZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TCkBAIC04OCw3ICs4OCw3IEBACiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KICNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1Ci0JcjAgPSBCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKwlCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLwogI2VuZGlmCiAKIAlwMC5oID0gaGkoUExMX0NUTCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUwppbmRleCAwNTFiMDVjLi45M2IzNjFkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9oZWFkLlMKQEAgLTk1LDcgKzk1LDcgQEAKIAlyMSA9IHIxIDw8IDg7ICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdCBpdCBvdmVyICAgICAgICAgICAgICAgICAgICovCiAJcjAgPSByMSB8IHIwOyAgICAgICAgICAgICAgICAgICAgLyogYWRkIHRoZW0gYWxsIHRvZ2V0aGVyICAgICAgICAgICAqLwogI2lmZGVmIEFOT01BTFlfMDUwMDAyNjUKLQlyMCA9IEJJVFNFVChyMCwgMTUpOyAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLworCUJJVFNFVChyMCwgMTUpOyAgICAgICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCiAjZW5kaWYKIAogCXAwLmggPSBoaShQTExfQ1RMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaGVhZC5TCmluZGV4IDBiMjgxMzcuLjMxYTc3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwpAQCAtNzgsNyArNzgsNyBAQAogCXIxID0gcjEgPDwgODsgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0IGl0IG92ZXIgICAgICAgICAgICAgICAgICAgKi8KIAlyMCA9IHIxIHwgcjA7ICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlbSBhbGwgdG9nZXRoZXIgICAgICAgICAgICovCiAjaWZkZWYgQU5PTUFMWV8wNTAwMDI2NQotCXIwID0gQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KICNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZjUzMjcyNi4uMDQzYmZjZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl9CiAJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewogCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9pbnB1dCh1YXJ0LT5ydHNfcGluLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVhcnQtPnJ0c19waW4sIDApOwogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCmluZGV4IDg1ZjhjNzkuLmRiNTMyMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKQEAgLTEsMTQ4ICsxLDkxIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBMRyBTb2Z0IEluZGlhCisgKiBCbGFja2ZpbiBjYWNoZSBjb250cm9sIGNvZGUKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBjYWNoZSBjb250cm9sIHN1cHBvcnQKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2NwbGIuaD4KLSNpbmNsdWRlIDxhc20vZW50cnkuaD4KICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAudGV4dAogCi0vKgotICogYmxhY2tmaW5fY2FjaGVfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqIEludmFsaWRhdGUgYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcwotICogYXJlYSBvZiBtZW1vcnkuCisvKiBTaW5jZSBhbGwgTDEgY2FjaGVzIHdvcmsgdGhlIHNhbWUgd2F5LCB3ZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGZvciBmbHVzaGluZworICogdGhlbS4gIE9ubHkgdGhlIGFjdHVhbCBmbHVzaCBpbnN0cnVjdGlvbiBkaWZmZXJzLiAgV2Ugd3JpdGUgdGhpcyBpbiBhc20gYXMKKyAqIEdDQyBjYW4gYmUgaGFyZCB0byBjb2F4IGludG8gd3JpdGluZyBuaWNlIGhhcmR3YXJlIGxvb3BzLgogICoKLSAqIHN0YXJ0OglTdGFydCBhZGRyZXNzCi0gKiBlbmQ6CQlFbmQgYWRkcmVzcworICogQWxzbywgd2UgYXNzdW1lIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgc2V0dXA6CisgKiBSMCA9IHN0YXJ0IGFkZHJlc3MKKyAqIFIxID0gZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKKy5tYWNybyBkb19mbHVzaCBmbHVzaGluczpyZXEgb3B0Zmx1c2hpbnMgb3B0bm9waW5zIGxhYmVsCisKKwkvKiBlbmQgPSAoKGVuZCAtIDEpICYgLUwxX0NBQ0hFX0JZVEVTKSArIEwxX0NBQ0hFX0JZVEVTOyAqLworCVIxICs9IC0xOwogCVIyID0gLUwxX0NBQ0hFX0JZVEVTOwotCVIyID0gUjAgJiBSMjsKLQlQMCA9IFIyOwotCVAxID0gUjE7Ci0JQ1NZTkMoUjMpOwotCUlGTFVTSCBbUDBdOworCVIxID0gUjEgJiBSMjsKKwlSMSArPSBMMV9DQUNIRV9CWVRFUzsKKworCS8qIGNvdW50ID0gKGVuZCAtIHN0YXJ0KSA+PiBMMV9DQUNIRV9TSElGVCAqLworCVIyID0gUjEgLSBSMDsKKwlSMiA+Pj0gTDFfQ0FDSEVfU0hJRlQ7CisJUDEgPSBSMjsKKworLmlmbmIgXGxhYmVsCitcbGFiZWwgOgorLmVuZGlmCisJUDAgPSBSMDsKKwlMU0VUVVAgKDFmLCAyZikgTEMxID0gUDE7CiAxOgotCUlGTFVTSCBbUDArK107Ci0JQ0MgPSBQMCA8IFAxIChpdSk7Ci0JSUYgQ0MgSlVNUCAxYiAoYnApOwotCUlGTFVTSCBbUDBdOwotCVNTWU5DKFIzKTsKKy5pZm5iIFxvcHRmbHVzaGlucworCVxvcHRmbHVzaGlucyBbUDBdOworLmVuZGlmCisuaWZiIFxvcHRub3BpbnMKKzI6CisuZW5kaWYKKwlcZmx1c2hpbnMgW1AwKytdOworLmlmbmIgXG9wdG5vcGlucworMjogXG9wdG5vcGluczsKKy5lbmRpZgorCiAJUlRTOworLmVuZG0KKworLyogSW52YWxpZGF0ZSBhbGwgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMgYXNzb2NvaWF0ZWQgd2l0aCB0aGlzIG1lbW9yeSBhcmVhICovCitFTlRSWShfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQorCWRvX2ZsdXNoIElGTFVTSCwgLCBub3AKIEVORFBST0MoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKIAotLyoKLSAqIGJsYWNrZmluX2ljYWNoZV9kY2FjaGVfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqIEZMVVNIIGFsbCBjYWNoZSBsaW5lcyBhc3NvY29pYXRlZCB3aXRoIHRoaXMKLSAqIGFyZWEgb2YgbWVtb3J5LgotICoKLSAqIHN0YXJ0OglTdGFydCBhZGRyZXNzCi0gKiBlbmQ6CQlFbmQgYWRkcmVzcwotICovCi0KKy8qIEZsdXNoIGFsbCBjYWNoZSBsaW5lcyBhc3NvY29pYXRlZCB3aXRoIHRoaXMgYXJlYSBvZiBtZW1vcnkuICovCiBFTlRSWShfYmxhY2tmaW5faWNhY2hlX2RjYWNoZV9mbHVzaF9yYW5nZSkKLQlSMiA9IC1MMV9DQUNIRV9CWVRFUzsKLQlSMiA9IFIwICYgUjI7Ci0JUDAgPSBSMjsKLQlQMSA9IFIxOwotCUNTWU5DKFIzKTsKLQlJRkxVU0ggW1AwXTsKLTE6Ci0JRkxVU0ggW1AwXTsKLQlJRkxVU0ggW1AwKytdOwotCUNDID0gUDAgPCBQMSAoaXUpOwotCUlGIENDIEpVTVAgMWIgKGJwKTsKLQlJRkxVU0ggW1AwXTsKLQlGTFVTSCBbUDBdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJZG9fZmx1c2ggSUZMVVNILCBGTFVTSAogRU5EUFJPQyhfYmxhY2tmaW5faWNhY2hlX2RjYWNoZV9mbHVzaF9yYW5nZSkKIAogLyogVGhyb3cgYXdheSBhbGwgRC1jYWNoZWQgZGF0YSBpbiBzcGVjaWZpZWQgcmVnaW9uIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gdG8KLSAqIHdyaXRlIHRoZW0gYmFjay4gSG93ZXZlciwgd2UgbXVzdCBjbGVhbiB0aGUgRC1jYWNoZWQgZW50cmllcyBhcm91bmQgdGhlCi0gKiBib3VuZGFyaWVzIG9mIHRoZSBzdGFydCBhbmQvb3IgZW5kIGFkZHJlc3MgaXMgbm90IGNhY2hlIGFsaWduZWQuCi0gKgotICogU3RhcnQ6IHN0YXJ0IGFkZHJlc3MsCi0gKiBlbmQgIDogZW5kIGFkZHJlc3MuCisgKiB3cml0ZSB0aGVtIGJhY2suICBTaW5jZSB0aGUgQmxhY2tmaW4gSVNBIGRvZXMgbm90IGhhdmUgYW4gImludmFsaWRhdGUiCisgKiBpbnN0cnVjdGlvbiwgd2UgdXNlIGZsdXNoL2ludmFsaWRhdGUuICBQZXJoYXBzIGFzIGEgc3BlZWQgb3B0aW1pemF0aW9uIHdlCisgKiBjb3VsZCBiYW5nIG9uIHRoZSBEVEVTVCBNTVJzIC4uLgogICovCi0KIEVOVFJZKF9ibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSkKLQlSMiA9IC1MMV9DQUNIRV9CWVRFUzsKLQlSMiA9IFIwICYgUjI7Ci0JUDAgPSBSMjsKLQlQMSA9IFIxOwotCUNTWU5DKFIzKTsKLQlGTFVTSElOVltQMF07Ci0xOgotCUZMVVNISU5WW1AwKytdOwotCUNDID0gUDAgPCBQMSAoaXUpOwotCUlGIENDIEpVTVAgMWIgKGJwKTsKLQotCS8qIElmIHRoZSBkYXRhIGNyb3NzZXMgYSBjYWNoZSBsaW5lLCB0aGVuIHdlJ2xsIGJlIHBvaW50aW5nIHRvCi0JICogdGhlIGxhc3QgY2FjaGUgbGluZSwgYnV0IHdvbid0IGhhdmUgZmx1c2hlZC9pbnZhbGlkYXRlZCBpdCB5ZXQsCi0JICogc28gZG8gb25lIG1vcmUuCi0JICovCi0JRkxVU0hJTlZbUDBdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJZG9fZmx1c2ggRkxVU0hJTlYKIEVORFBST0MoX2JsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKQogCisvKiBGbHVzaCBhbGwgZGF0YSBjYWNoZSBsaW5lcyBhc3NvY29pYXRlZCB3aXRoIHRoaXMgbWVtb3J5IGFyZWEgKi8KIEVOVFJZKF9ibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UpCi0JUjIgPSAtTDFfQ0FDSEVfQllURVM7Ci0JUjIgPSBSMCAmIFIyOwotCVAwID0gUjI7Ci0JUDEgPSBSMTsKLQlDU1lOQyhSMyk7Ci0JRkxVU0hbUDBdOwotMToKLQlGTFVTSFtQMCsrXTsKLQlDQyA9IFAwIDwgUDEgKGl1KTsKLQlJRiBDQyBKVU1QIDFiIChicCk7Ci0KLQkvKiBJZiB0aGUgZGF0YSBjcm9zc2VzIGEgY2FjaGUgbGluZSwgdGhlbiB3ZSdsbCBiZSBwb2ludGluZyB0bwotCSAqIHRoZSBsYXN0IGNhY2hlIGxpbmUsIGJ1dCB3b24ndCBoYXZlIGZsdXNoZWQgaXQgeWV0LCBzbyBkbwotCSAqIG9uZSBtb3JlLgotCSAqLwotCUZMVVNIW1AwXTsKLQlTU1lOQyhSMyk7Ci0JUlRTOworCWRvX2ZsdXNoIEZMVVNILCAsICwgLkxkZnIKIEVORFBST0MoX2JsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSkKIAorLyogT3VyIGhlYWRlcnMgY29udmVydCB0aGUgcGFnZSBzdHJ1Y3R1cmUgdG8gYW4gYWRkcmVzcywgc28ganVzdCBuZWVkIHRvIGZsdXNoCisgKiBpdHMgY29udGVudHMgbGlrZSBub3JtYWwuICBXZSBrbm93IHRoZSBzdGFydCBhZGRyZXNzIGlzIHBhZ2UgYWxpZ25lZCAod2hpY2gKKyAqIGdyZWF0ZXIgdGhhbiBvdXIgY2FjaGUgYWxpZ25tZW50KSwgYXMgaXMgdGhlIGVuZCBhZGRyZXNzLiAgU28ganVzdCBqdW1wIGludG8KKyAqIHRoZSBtaWRkbGUgb2YgdGhlIGRjYWNoZSBmbHVzaCBmdW5jdGlvbi4KKyAqLwogRU5UUlkoX2JsYWNrZmluX2RmbHVzaF9wYWdlKQogCVAxID0gMSA8PCAoUEFHRV9TSElGVCAtIEwxX0NBQ0hFX1NISUZUKTsKLQlQMCA9IFIwOwotCUNTWU5DKFIzKTsKLQlGTFVTSFtQMF07Ci0JTFNFVFVQICguTGZsMSwgLkxmbDEpIExDMCA9IFAxOwotLkxmbDE6CUZMVVNIIFtQMCsrXTsKLQlTU1lOQyhSMyk7Ci0JUlRTOworCWp1bXAgLkxkZnI7CiBFTkRQUk9DKF9ibGFja2Zpbl9kZmx1c2hfcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKaW5kZXggNzVjZGFkMi4uYzIyYzQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKQEAgLTE1OCw4ICsxNTgsNiBAQAogCQkJCQkJIGRwbV9zdGF0ZV90YWJsZVtpbmRleF0udHNjYWxlKTsKIAl9CiAKLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwotCiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IChiZmluX3JlYWRfUExMX0xPQ0tDTlQoKSAvIChzY2xrIC8gMTAwMDAwMCkpICogMTAwMDsKIAkvKk5vdyAsb25seSBzdXBwb3J0IG9uZSBjcHUgKi8KIAlwb2xpY3ktPmN1ciA9IGNjbGs7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCmluZGV4IDMwNjlkZjUuLmYxMjNhNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCkBAIC0yMDYsNiArMjA2LDYwIEBACiAJd1twMF0gPSByMDsKIAlzc3luYzsKIAorI2lmIEwxX0RBVEFfQV9MRU5HVEggPiAwCisJcjEubCA9IF9fc2Jzc19sMTsKKwlyMS5oID0gX19zYnNzX2wxOworCXIyLmwgPSBfX2Vic3NfbDE7CisJcjIuaCA9IF9fZWJzc19sMTsKKwlyMCA9IDAgKHopOworCXIyID0gcjIgLSByMTsKKwljYyA9IHIyID09IDA7CisJaWYgY2MganVtcCAuTF9hX2wxX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfYV9sMSwgLkxfY2xlYXJfYV9sMSApIGxjMCA9IHAyOworLkxfY2xlYXJfYV9sMToKKwlbcDErK10gPSByMDsKKy5MX2FfbDFfZG9uZToKKyNlbmRpZgorCisjaWYgTDFfREFUQV9CX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2JfbDE7CisJcjEuaCA9IF9fc2Jzc19iX2wxOworCXIyLmwgPSBfX2Vic3NfYl9sMTsKKwlyMi5oID0gX19lYnNzX2JfbDE7CisJcjAgPSAwICh6KTsKKwlyMiA9IHIyIC0gcjE7CisJY2MgPSByMiA9PSAwOworCWlmIGNjIGp1bXAgLkxfYl9sMV9kb25lOworCXIyID4+PSAyOworCXAxID0gcjE7CisJcDIgPSByMjsKKwlsc2V0dXAgKC5MX2NsZWFyX2JfbDEsIC5MX2NsZWFyX2JfbDEgKSBsYzAgPSBwMjsKKy5MX2NsZWFyX2JfbDE6CisJW3AxKytdID0gcjA7CisuTF9iX2wxX2RvbmU6CisjZW5kaWYKKworI2lmIEwyX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2wyOworCXIxLmggPSBfX3Nic3NfbDI7CisJcjIubCA9IF9fZWJzc19sMjsKKwlyMi5oID0gX19lYnNzX2wyOworCXIwID0gMCAoeik7CisJcjIgPSByMiAtIHIxOworCWNjID0gcjIgPT0gMDsKKwlpZiBjYyBqdW1wIC5MX2wyX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfbDIsIC5MX2NsZWFyX2wyICkgbGMwID0gcDI7CisuTF9jbGVhcl9sMjoKKwlbcDErK10gPSByMDsKKy5MX2wyX2RvbmU6CisjZW5kaWYKKwogCS8qIFplcm8gb3V0IHRoZSBic3MgcmVnaW9uCiAJICogTm90ZTogdGhpcyB3aWxsIGZhaWwgaWYgYnNzIGlzIDAgYnl0ZXMgLi4uCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDkzODlkMzguLjA3MzM1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC02Miw2ICs2Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkdlbmVyYWwgc2V0dXAiCiAKIHNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvTWFrZWZpbGUgYi9hcmNoL2NyaXMvTWFrZWZpbGUKaW5kZXggODM4Y2QyYS4uYzZmNWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsOCBAQAogIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAjIGZvciBtb3JlIGRldGFpbHMuCiAKK0tCVUlMRF9ERUZDT05GSUcgOj0gZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCisKIGFyY2gteSA6PSB2MTAKIGFyY2gtJChDT05GSUdfRVRSQVhfQVJDSF9WMTApIDo9IHYxMAogYXJjaC0kKENPTkZJR19FVFJBWF9BUkNIX1YzMikgOj0gdjMyCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCAwOGQ5NDNjLi42ZmUwZmZhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGFzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDA3Njg4ZGEuLjgyYWI1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGNjZmxhZ3MteSArPSAtTzIgJChMSU5VWElOQ0xVREUpCiBhc2ZsYWdzLXkgKz0gJChMSU5VWElOQ0xVREUpCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvcmVzY3VlLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvcmVzY3VlLmxkcwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogb2JqLSQoQ09ORklHX0VUUkFYX0FYSVNGTEFTSE1BUCkgPSBoZWFkLm8KIE9CSkVDVCA6PSAkKG9iaikvaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCmluZGV4IGM5YWEzOTAuLjNiZGZhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpAQCAtMjk1LDEyICsyOTUsMTIgQEAKIAkJCWVsc2UKIAkJCQl5cnMgLT0gMTkwMDsJLyogUlRDICg3MCwgNzEsIC4uLiA5OSkgKi8KIAotCQkJQklOX1RPX0JDRChzZWMpOwotCQkJQklOX1RPX0JDRChtaW4pOwotCQkJQklOX1RPX0JDRChocnMpOwotCQkJQklOX1RPX0JDRChkYXkpOwotCQkJQklOX1RPX0JDRChtb24pOwotCQkJQklOX1RPX0JDRCh5cnMpOworCQkJc2VjID0gYmluMmJjZChzZWMpOworCQkJbWluID0gYmluMmJjZChtaW4pOworCQkJaHJzID0gYmluMmJjZChocnMpOworCQkJZGF5ID0gYmluMmJjZChkYXkpOworCQkJbW9uID0gYmluMmJjZChtb24pOworCQkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCQlDTU9TX1dSSVRFKHlycywgUlRDX1lFQVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDg3NjlkYzkuLjFlOTBjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkgICAgICAgImluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkIVxuIiwgUENGODU2M19OQU1FKTsKIAl9CiAKLQl0bS0+dG1feWVhciAgPSBCQ0RfVE9fQklOKHRtLT50bV95ZWFyKSArCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbih0bS0+dG1feWVhcikgKwogCQkgICAgICAgKCh0bS0+dG1fbW9uICYgMHg4MCkgPyAxMDAgOiAwKTsKIAl0bS0+dG1fc2VjICAmPSAweDdGOwogCXRtLT50bV9taW4gICY9IDB4N0Y7CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCXRtLT50bV93ZGF5ICY9IDB4MDc7IC8qIE5vdCBjb2RlZCBpbiBCQ0QuICovCiAJdG0tPnRtX21vbiAgJj0gMHgxRjsKIAotCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKIAl0bS0+dG1fbW9uLS07IC8qIE1vbnRoIGlzIDEuLjEyIGluIFJUQyBidXQgMC4uMTEgaW4gbGludXggKi8KIH0KIApAQCAtMjgyLDEyICsyODIsMTIgQEAKIAkJY2VudHVyeSA9ICh0bS50bV95ZWFyID49IDIwMDApID8gMHg4MCA6IDA7CiAJCXRtLnRtX3llYXIgPSB0bS50bV95ZWFyICUgMTAwOwogCi0JCUJJTl9UT19CQ0QodG0udG1feWVhcik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbW9uKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKLQkJQklOX1RPX0JDRCh0bS50bV9ob3VyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9taW4pOwotCQlCSU5fVE9fQkNEKHRtLnRtX3NlYyk7CisJCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOworCQl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CisJCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwkJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOworCQl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJCXRtLnRtX21vbiB8PSBjZW50dXJ5OwogCiAJCW11dGV4X2xvY2soJnJ0Y19sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGQ2MzM1ZjIuLjVhMWIzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBjY2ZsYWdzLXkgKz0gLU8yIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvZGVjb21wcmVzcy5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL2RlY29tcHJlc3MubGRzCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCmluZGV4IDQ0YWUwYWQuLjU2NmFhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAJCS1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAogYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaC9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIExEID0gZ2NjLWNyaXMgLW1saW51eCAtbWFyY2g9djMyIC1ub3N0ZGxpYgotbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChvYmopL3Jlc2N1ZS5sZAorbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChzcmMpL3Jlc2N1ZS5sZHMKIExEUE9TVEZMQUdTID0gLWxnY2MKIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIG9iai0kKENPTkZJR19FVFJBWF9BWElTRkxBU0hNQVApID0gaGVhZC5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggZjI2M2FiNS4uZjQ0Nzg1MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCSAgICAgICAiaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQhXG4iLCBQQ0Y4NTYzX05BTUUpOwogCX0KIAotCXRtLT50bV95ZWFyICA9IEJDRF9UT19CSU4odG0tPnRtX3llYXIpICsKKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArCiAJCSAgICAgICAoKHRtLT50bV9tb24gJiAweDgwKSA/IDEwMCA6IDApOwogCXRtLT50bV9zZWMgICY9IDB4N0Y7CiAJdG0tPnRtX21pbiAgJj0gMHg3RjsKQEAgLTEyNywxMSArMTI3LDExIEBACiAJdG0tPnRtX3dkYXkgJj0gMHgwNzsgLyogTm90IGNvZGVkIGluIEJDRC4gKi8KIAl0bS0+dG1fbW9uICAmPSAweDFGOwogCi0JQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9taW4pOwotCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4odG0tPnRtX21vbik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pOwogCXRtLT50bV9tb24tLTsgLyogTW9udGggaXMgMS4uMTIgaW4gUlRDIGJ1dCAwLi4xMSBpbiBsaW51eCAqLwogfQogCkBAIC0yNzksMTIgKzI3OSwxMiBAQAogCQljZW50dXJ5ID0gKHRtLnRtX3llYXIgPj0gMjAwMCkgPyAweDgwIDogMDsKIAkJdG0udG1feWVhciA9IHRtLnRtX3llYXIgJSAxMDA7CiAKLQkJQklOX1RPX0JDRCh0bS50bV95ZWFyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tb24pOwotCQlCSU5fVE9fQkNEKHRtLnRtX21kYXkpOwotCQlCSU5fVE9fQkNEKHRtLnRtX2hvdXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21pbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fc2VjKTsKKwkJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CisJCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKKwkJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCQl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAkJdG0udG1fbW9uIHw9IGNlbnR1cnk7CiAKIAkJbXV0ZXhfbG9jaygmcnRjX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvY3B1ZnJlcS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvY3B1ZnJlcS5jCmluZGV4IDhlNWEzY2EuLmVlMzkxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2NwdWZyZXEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9jcHVmcmVxLmMKQEAgLTg1LDcgKzg1LDYgQEAKIAlpbnQgcmVzdWx0OwogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDsgLyogMW1zICovCiAJcG9saWN5LT5jdXIgPSBjcmlzX2ZyZXFfZ2V0X2NwdV9mcmVxdWVuY3koMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2NwdWZyZXEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2NwdWZyZXEuYwppbmRleCBkNTc2MzFjLi41OGJkNzFlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9jcHVmcmVxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvY3B1ZnJlcS5jCkBAIC04MSw3ICs4MSw2IEBACiAJaW50IHJlc3VsdDsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDA7CS8qIDFtcyAqLwogCXBvbGljeS0+Y3VyID0gY3Jpc19mcmVxX2dldF9jcHVfZnJlcXVlbmN5KDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJ0cGVjXzNfZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJ0cGVjXzNfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9hcnRwZWNfM19kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcmNoLXYxMC9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvZXRyYXhmc19kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9ldHJheGZzX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2V0cmF4ZnNfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9ldHJheGZzX2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwppbmRleCBmZjRjNmFhLi4wNzRmZTdkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCXJldHVybiAwOwogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKLQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtMTQyLDggKzE0Miw4IEBACiAJcmVhbF9taW51dGVzICU9IDYwOwogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKLQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewpAQCAtMTcwLDEyICsxNzAsMTIgQEAKIAltb24gPSBDTU9TX1JFQUQoUlRDX01PTlRIKTsKIAl5ZWFyID0gQ01PU19SRUFEKFJUQ19ZRUFSKTsKIAotCUJDRF9UT19CSU4oc2VjKTsKLQlCQ0RfVE9fQklOKG1pbik7Ci0JQkNEX1RPX0JJTihob3VyKTsKLQlCQ0RfVE9fQklOKGRheSk7Ci0JQkNEX1RPX0JJTihtb24pOwotCUJDRF9UT19CSU4oeWVhcik7CisJc2VjID0gYmNkMmJpbihzZWMpOworCW1pbiA9IGJjZDJiaW4obWluKTsKKwlob3VyID0gYmNkMmJpbihob3VyKTsKKwlkYXkgPSBiY2QyYmluKGRheSk7CisJbW9uID0gYmNkMmJpbihtb24pOworCXllYXIgPSBiY2QyYmluKHllYXIpOwogCiAJaWYgKCh5ZWFyICs9IDE5MDApIDwgMTk3MCkKIAkJeWVhciArPSAxMDA7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9LY29uZmlnIGIvYXJjaC9mcnYvS2NvbmZpZwppbmRleCBhNWFhYzFiLi45ZDE1NTJhIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9LY29uZmlnCisrKyBiL2FyY2gvZnJ2L0tjb25maWcKQEAgLTY2LDYgKzY2LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJGdWppdHN1IEZSLVYgc3lzdGVtIHNldHVwIgogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcG0uYyBiL2FyY2gvZnJ2L2tlcm5lbC9wbS5jCmluZGV4IGQxMTEzYzUuLmJlNzIyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9wbS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wbS5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAlyZXR1cm4gdHJ5X3NldF9jbW9kZShuZXdfY21vZGUpPzoqbGVucDsKIH0KIAotc3RhdGljIGludCBjbW9kZV9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGNtb2RlX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLAogCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0zMTQsNyArMzE0LDcgQEAKIAlyZXR1cm4gdHJ5X3NldF9wMChuZXdfcDApPzoqbGVucDsKIH0KIAotc3RhdGljIGludCBwMF9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHAwX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLAogCQkgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTM1OCw3ICszNTgsNyBAQAogCXJldHVybiB0cnlfc2V0X2NtKG5ld19jbSk/OipsZW5wOwogfQogCi1zdGF0aWMgaW50IGNtX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgY21fc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCSAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEtbm9tbXUuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMKaW5kZXggNjRlZTU4ZC4uNTJmZjlhZSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEtbm9tbXUuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS1ub21tdS5jCkBAIC0xMTEsNyArMTExLDcgQEAKICAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgogICoKICAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQotICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZSBpcyBwZXJmb3JtZWQuCisgKiB1bnRpbCBlaXRoZXIgZG1hX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KICAqLwogZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCiAJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTEyOSw3ICsxMjksNyBAQAogLyoKICAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKICAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CiAgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKICAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgogICoKQEAgLTEzOSw3ICsxMzksNyBAQAogICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5CiAgKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgogICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCisgKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIGRtYV9tYXBfc2luZ2xlIGFyZQogICogdGhlIHNhbWUgaGVyZS4KICAqLwogaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCkBAIC0xNTgsMyArMTU4LDIwIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woZG1hX21hcF9zZyk7CisKKy8qCisgKiBNYXAgYSBzaW5nbGUgcGFnZSBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KKyAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgorICoKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgZG1hX21hcF9zaW5nbGUgYXJlCisgKiB0aGUgc2FtZSBoZXJlLgorICovCitkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJcmV0dXJuIChkbWFfYWRkcl90KSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS5jCmluZGV4IDY2MmY3YjEuLjNkZGVkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEuYwpAQCAtNjEsNyArNjEsNyBAQAogLyoKICAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKICAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CiAgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKICAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgogICoKQEAgLTcxLDcgKzcxLDcgQEAKICAqICAgICAgIFRoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiBhZGRyL2xlbmd0aCBwYWlycyBhY3R1YWxseQogICogICAgICAgdXNlZCwgYXQgbW9zdCBuZW50cy4KICAqCi0gKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIHBjaV9tYXBfc2luZ2xlIGFyZQorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtMTA1LDYgKzEwNSwxMyBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOwogCisvKgorICogTWFwIGEgc2luZ2xlIHBhZ2Ugb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCisgKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KKyAqCisgKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIGRtYV9tYXBfc2luZ2xlIGFyZQorICogdGhlIHNhbWUgaGVyZS4KKyAqLwogZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggZWRhZTExNy4uNDNkNjc1MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC0yMDEsMzggKzIwMSw2IEBACiAJcGNpYmlvc19hc3NpZ25fcmVzb3VyY2VzKCk7CiB9CiAKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCi17Ci0JdTE2IGNtZCwgb2xkX2NtZDsKLQlpbnQgaWR4OwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwotCW9sZF9jbWQgPSBjbWQ7Ci0JZm9yKGlkeD0wOyBpZHg8NjsgaWR4KyspIHsKLQkJLyogT25seSBzZXQgdXAgdGhlIHJlcXVlc3RlZCBzdHVmZiAqLwotCQlpZiAoIShtYXNrICYgKDE8PGlkeCkpKQotCQkJY29udGludWU7Ci0KLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmICghci0+c3RhcnQgJiYgci0+ZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBDSTogRGV2aWNlICVzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSBvZiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLCBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0JaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpCi0JCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JaWYgKGNtZCAhPSBvbGRfY21kKSB7Ci0JCXByaW50aygiUENJOiBFbmFibGluZyBkZXZpY2UgJXMgKCUwNHggLT4gJTA0eClcbiIsIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqICBJZiB3ZSBzZXQgdXAgYSBkZXZpY2UgZm9yIGJ1cyBtYXN0ZXJpbmcsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGxhdGVuY3kKICAqICB0aW1lciBhcyBjZXJ0YWluIGNyYXBweSBCSU9TZXMgZm9yZ2V0IHRvIHNldCBpdCBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmggYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCmluZGV4IDBjN2JmMzkuLmYzZmU1NTkxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmgKQEAgLTI5LDcgKzI5LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19tYXhfbGF0ZW5jeTsKIAogdm9pZCBwY2liaW9zX3Jlc291cmNlX3N1cnZleSh2b2lkKTsKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogcGNpLXZkay5jICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCmluZGV4IGYwMDNjZmEuLjBmNDFjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYwpAQCAtNDEyLDcgKzQxMiw3IEBACiB7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoIWRldi0+bXNpX2VuYWJsZWQpCiAJCXBjaWJpb3NfZW5hYmxlX2lycShkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vaW5pdC5jIGIvYXJjaC9mcnYvbW0vaW5pdC5jCmluZGV4IDFiODUxZGIuLjA3MDgyODQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2luaXQuYworKysgYi9hcmNoL2Zydi9tbS9pbml0LmMKQEAgLTg3LDggKzg3LDYgQEAKIAogCQlwa21hcF9wYWdlX3RhYmxlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogCi0JCW1lbXNldChwa21hcF9wYWdlX3RhYmxlLCAwLCBQQUdFX1NJWkUpOwotCiAJCXBnZSA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4X2soUEtNQVBfQkFTRSk7CiAJCXB1ZSA9IHB1ZF9vZmZzZXQocGdlLCBQS01BUF9CQVNFKTsKIAkJcG1lID0gcG1kX29mZnNldChwdWUsIFBLTUFQX0JBU0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IDEwN2NiNWIuLmJkMTk5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTYyLDYgKzYyLDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19CVUcKKyAgICAgICAgYm9vbAorICAgICAgICBkZXBlbmRzIG9uIEJVRworCiBjb25maWcgVElNRV9MT1dfUkVTCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtODYsNiArOTAsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBzb3VyY2UgImFyY2gvaDgzMDAvS2NvbmZpZy5jcHUiCiAKIG1lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdSBiL2FyY2gvaDgzMDAvS2NvbmZpZy5jcHUKaW5kZXggNTgyNzk3ZC4uYjY1ZGNmZSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdQorKysgYi9hcmNoL2g4MzAwL0tjb25maWcuY3B1CkBAIC0xLDUgKzEsNyBAQAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKIGNob2ljZQogCXByb21wdCAiSDgvMzAwIHBsYXRmb3JtIgogCWRlZmF1bHQgSDgzMDBIX0dFTkVSSUMKQEAgLTExLDYgKzEzLDcgQEAKIAogY29uZmlnIEg4MzAwSF9BS0kzMDY4TkVUCiAJYm9vbCAiQUUtMzA2OC82OSIKKwlzZWxlY3QgQ09ORklHX0g4MzA2OAogCWhlbHAKIAkgIEFLSS1IOC8zMDY4RiAvIEFLSS1IOC8zMDY5RiBGbGFzaG1pY29tIExBTiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTIxLDYgKzI0LDcgQEAKIAogY29uZmlnIEg4MzAwSF9IOE1BWAogCWJvb2wgIkg4TUFYIgorCXNlbGVjdCBDT05GSUdfSDgzMDY4CiAJaGVscAogCSAgSDhNQVggRXZhbHVhdGlvbiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTI4LDYgKzMyLDcgQEAKIAogY29uZmlnIEg4MzAwSF9TSU0KIAlib29sICJIOC8zMDBIIFNpbXVsYXRvciIKKwlzZWxlY3QgQ09ORklHX0g4MzAwNwogCWhlbHAKIAkgIEdEQiBTaW11bGF0b3IgU3VwcG9ydAogCSAgTW9yZSBJbmZvcm1hdGlvbi4KQEAgLTQwLDYgKzQ1LDcgQEAKIAogY29uZmlnIEg4U19FRE9TSzI2NzQKIAlib29sICJFRE9TSy0yNjc0IgorCXNlbGVjdCBDT05GSUdfSDhTMjc2OAogCWhlbHAKIAkgIFJlbmVzYXMgRURPU0stMjY3NCBFdmFsdWF0aW9uIEJvYXJkIFN1cHBvcnQKIAkgIE1vcmUgSW5mb3JtYXRpb24uCkBAIC01NSw0NCArNjEsMzcgQEAKIAogZW5kY2hvaWNlCiAKLWlmIChIODMwMEhfR0VORVJJQyB8fCBIOFNfR0VORVJJQykKLW1lbnUgIkRldGFpbCBTZWxlY3Rpb24iCi1pZiAoSDgzMDBIX0dFTkVSSUMpCiBjaG9pY2UKIAlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCiAKIGNvbmZpZyBIODMwMDIKIAlib29sICJIOC8zMDAxLDMwMDIsMzAwMyIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDA3CiAJYm9vbCAiSDgvMzAwNiwzMDA3IgorCXNlbGVjdCBDUFVfSDgzMDBICiAKIGNvbmZpZyBIODMwNDgKIAlib29sICJIOC8zMDQ0LDMwNDUsMzA0NiwzMDQ3LDMwNDgsMzA1MiIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDY4CiAJYm9vbCAiSDgvMzA2NSwzMDY2LDMwNjcsMzA2OCwzMDY5IgotZW5kY2hvaWNlCi1lbmRpZgotCi1pZiAoSDhTX0dFTkVSSUMpCi1jaG9pY2UKLQlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCisJc2VsZWN0IENQVV9IODMwMEgKIAogY29uZmlnIEg4UzI2NzgKIAlib29sICJIOFMvMjY3MCwyNjczLDI2NzRSLDI2NzUsMjY3NiIKKwlzZWxlY3QgQ1BVX0g4UworCiBlbmRjaG9pY2UKLWVuZGlmCiAKIGNvbmZpZyBDUFVfQ0xPQ0sKIAlpbnQgIkNQVSBDbG9jayBGcmVxdWVuY3kgKC8xS0h6KSIKIAlkZWZhdWx0ICIyMDAwMCIKIAloZWxwCiAJICBDUFUgQ2xvY2sgRnJlcXVlbmN5IGRpdmlkZSB0byAxMDAwCi1lbmRtZW51Ci1lbmRpZgogCi1pZiAoSDgzMDBIX0dFTkVSSUMgfHwgSDhTX0dFTkVSSUMgfHwgSDgzMDBIX1NJTSB8fCBIOFNfU0lNIHx8IEg4U19FRE9TSzI2NzQpCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBleGVjdXRlcyBmcm9tIgogCS0tLWhlbHAtLS0KQEAgLTEwNyw2NSArMTA2LDggQEAKIAlib29sICJST00iCiAJaGVscAogCSAgVGhlIGtlcm5lbCB3aWxsIGJlIHJlc2lkZW50IGluIEZMQVNIL1JPTSB3aGVuIHJ1bm5pbmcuCi0KIGVuZGNob2ljZQotZW5kaWYKIAotaWYgKEg4MzAwSF9BS0kzMDY4TkVUKQotY29uZmlnIEg4MzA2OAotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIENQVV9DTE9DSwotCWludAotCWRlZmF1bHQgIjIwMDAwIgotCi1jb25maWcgUkFNS0VSTkVMCi0JYm9vbAotCWRlZmF1bHQgeQotZW5kaWYKLQotaWYgKEg4MzAwSF9IOE1BWCkKLWNvbmZpZyBIODMwNjgKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDI1MDAwCi0KLWNvbmZpZyBSQU1LRVJORUwKLQlib29sCi0JZGVmYXVsdCB5Ci1lbmRpZgotCi1pZiAoSDgzMDBIX1NJTSkKLWNvbmZpZyBIODMwMDcKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0ICIxNjAwMCIKLWVuZGlmCi0KLWlmIChIOFNfRURPU0syNjc0KQotY29uZmlnIEg4UzI2NzgKLQlib29sCi0JZGVmYXVsdCB5Ci1jb25maWcgQ1BVX0NMT0NLCi0JaW50Ci0JZGVmYXVsdCAzMzAwMAotZW5kaWYKLQotaWYgKEg4U19TSU0pCi1jb25maWcgSDhTMjY3OAotCWJvb2wKLQlkZWZhdWx0IHkKLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDMzMDAwCi1lbmRpZgogCiBjb25maWcgQ1BVX0g4MzAwSAogCWJvb2wKQEAgLTE3Nyw2ICsxMTksNDkgQEAKIAlkZXBlbmRzIG9uIEg4UzI2NzgKIAlkZWZhdWx0IHkKIAorY2hvaWNlCisJcHJvbXB0ICJUaW1lciIKK2NvbmZpZyBIODMwMF9USU1FUjgKKwlib29sICI4Yml0IHRpbWVyICgyY2ggY2FzY2FkZSkiCisJZGVwZW5kcyBvbiAoSDgzMDA3IHx8IEg4MzA2OCB8fCBIOFMyNjc4KQorCitjb25maWcgSDgzMDBfVElNRVIxNgorCWJvb2wgIjE2Yml0IHRpbWVyIgorCWRlcGVuZHMgb24gKEg4MzAwNyB8fCBIODMwNjgpCisKK2NvbmZpZyBIODMwMF9JVFUKKwlib29sICJJVFUiCisJZGVwZW5kcyBvbiAoSDgzMDAyIHx8IEg4MzA0OCkKKworY29uZmlnIEg4MzAwX1RQVQorCWJvb2wgIlRQVSIKKwlkZXBlbmRzIG9uIEg4UzI2NzgKK2VuZGNob2ljZQorCitpZiBIODMwMF9USU1FUjgKK2Nob2ljZQorCXByb21wdCAiVGltZXIgQ2hhbm5lbCIKK2NvbmZpZyBIODMwMF9USU1FUjhfQ0gwCisJYm9vbCAiQ2hhbm5lbCAwIgorY29uZmlnIEg4MzAwX1RJTUVSOF9DSDIKKwlib29sICJDaGFubmVsIDIiCisJZGVwZW5kcyBvbiBDUFVfSDgzMDBICitlbmRjaG9pY2UKK2VuZGlmCisKK2NvbmZpZyBIODMwMF9USU1FUjE2X0NICisJaW50ICIxNmJpdCB0aW1lciBjaGFubmVsICgwIC0gMikiCisJZGVwZW5kcyBvbiBIODMwMF9USU1FUjE2CisJcmFuZ2UgMCAyCisKK2NvbmZpZyBIODMwMF9JVFVfQ0gKKwlpbnQgIklUVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfSVRVCisKK2NvbmZpZyBIODMwMF9UUFVfQ0gKKwlpbnQgIlRQVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfVFBVCisKIGNvbmZpZyBQUkVFTVBUCiAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggZWRkZGY1Yi4uODg3YzE5NyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0xLDQgKzEsOCBAQAogI2lmbmRlZiBfSDgzMDBfQlVHX0gKICNkZWZpbmUgX0g4MzAwX0JVR19ICisKKy8qIGFsd2F5cyB0cnVlICovCisjZGVmaW5lIGlzX3ZhbGlkX2J1Z2FkZHIoYWRkcikgKDEpCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYThiNTdkMS4uOTRlMjI4NCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC01NSw3ICs1NSw3IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNkZWZpbmUgUl9IOF9OT05FICAgICAgIDAKICNkZWZpbmUgUl9IOF9ESVIzMiAgICAgIDEKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaAppbmRleCAyNmRjNmNjLi4zM2U4NDJmIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yOTUsNiArMjk1LDQwIEBACiAgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY3RybF9iY2xyKGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGIpKQorCQlzd2l0Y2ggKGIpIHsKKwkJY2FzZSAwOiBfX2FzbV9fKCJiY2xyICMwLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDE6IF9fYXNtX18oImJjbHIgIzEsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMjogX19hc21fXygiYmNsciAjMixAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAzOiBfX2FzbV9fKCJiY2xyICMzLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDQ6IF9fYXNtX18oImJjbHIgIzQsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNTogX19hc21fXygiYmNsciAjNSxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA2OiBfX2FzbV9fKCJiY2xyICM2LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDc6IF9fYXNtX18oImJjbHIgIzcsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCX0KKwllbHNlCisJCV9fYXNtX18oImJjbHIgJXcwLEAlMSI6OiJyIihiKSwgInIiKGFkZHIpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBjdHJsX2JzZXQoaW50IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYikpCisJCXN3aXRjaCAoYikgeworCQljYXNlIDA6IF9fYXNtX18oImJzZXQgIzAsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMTogX19hc21fXygiYnNldCAjMSxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAyOiBfX2FzbV9fKCJic2V0ICMyLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDM6IF9fYXNtX18oImJzZXQgIzMsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNDogX19hc21fXygiYnNldCAjNCxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA1OiBfX2FzbV9fKCJic2V0ICM1LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDY6IF9fYXNtX18oImJzZXQgIzYsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNzogX19hc21fXygiYnNldCAjNyxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJfQorCWVsc2UKKwkJX19hc21fXygiYnNldCAldzAsQCUxIjo6InIiKGIpLCAiciIoYWRkcikpOworfQorCiAvKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpICAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21kLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21kLmgKaW5kZXggMWE0N2RjNi4uMWI3MzAwZSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbWQuaApAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogbWQuaCx2IDEuMSAyMDAyLzExLzE5IDAyOjA5OjI2IGdlcmcgRXhwICQKKy8qCiAgKiBtZC5oOiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUgCiAgKgogICovCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA0YjhlNDc1Li5kOThkOTc2IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTE1NSw0ICsxNTUsNiBAQAogCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCiAKK3ZvaWQgZGllKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKmZwLCB1bnNpZ25lZCBsb25nIGVycik7CisKICNlbmRpZiAvKiBfSDgzMDBfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBhYWZkNGQzLi43MDAwMTRkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04OSw2ICs4OSw3IEBACiAJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJNAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTUJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKQEAgLTk2LDYgKzk3LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9oODMwMC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNmMyNDhjMy4uOGQ0ZDJhNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvTWFrZWZpbGUKQEAgLTcsNiArNyw2IEBACiBvYmoteSA6PSBwcm9jZXNzLm8gdHJhcHMubyBwdHJhY2UubyBpcnEubyBcCiAJIHN5c19oODMwMC5vIHRpbWUubyBzaWduYWwubyBcCiAgICAgICAgICBzZXR1cC5vIGdwaW8ubyBpbml0X3Rhc2subyBzeXNjYWxscy5vIFwKLQkgZW50cnkubworCSBlbnRyeS5vIHRpbWVyLwogCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8gaDgzMDBfa3N5bXMubyAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL21vZHVsZS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNGZkNzEzOC4uY2ZjOTEyNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvbW9kdWxlLmMKQEAgLTExNCw5ICsxMTQsMTAgQEAKIAkJICAgIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAogCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIG1vZHVsZV9idWdfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtZSk7CiB9CiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CisJbW9kdWxlX2J1Z19jbGVhbnVwKG1vZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMKaW5kZXggZTM3YzgzNS4uN2YyZDZjZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYwpAQCAtMjcsMjcgKzI3LDIxIEBACiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3RhcmdldF90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKICNkZWZpbmUJVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi0vKgotICogdGltZXJfaW50ZXJydXB0KCkgbmVlZHMgdG8ga2VlcCB1cCB0aGUgcmVhbC10aW1lIGNsb2NrLAotICogYXMgd2VsbCBhcyBjYWxsIHRoZSAiZG9fdGltZXIoKSIgcm91dGluZSBldmVyeSBjbG9ja3RpY2sKLSAqLwotc3RhdGljIHZvaWQgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit2b2lkIGg4MzAwX3RpbWVyX3RpY2sodm9pZCkKIHsKLQkvKiBtYXkgbmVlZCB0byBraWNrIHRoZSBoYXJkd2FyZSB0aW1lciAqLwotCXBsYXRmb3JtX3RpbWVyX2VvaSgpOwotCisJaWYgKGN1cnJlbnQtPnBpZCkKKwkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCWRvX3RpbWVyKDEpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKLSNlbmRpZgotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogfQogCi12b2lkIHRpbWVfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKIApAQCAtNTcsMTIgKzUxLDEzIEBACiAJeWVhciA9IDE5ODA7CiAJbW9uID0gZGF5ID0gMTsKIAlob3VyID0gbWluID0gc2VjID0gMDsKLQlwbGF0Zm9ybV9nZXR0b2QgKCZ5ZWFyLCAmbW9uLCAmZGF5LCAmaG91ciwgJm1pbiwgJnNlYyk7Ci0KKyNpZmRlZiBDT05GSUdfSDgzMDBfR0VUVE9ECisJaDgzMDBfZ2V0dG9kICgmeWVhciwgJm1vbiwgJmRheSwgJmhvdXIsICZtaW4sICZzZWMpOworI2VuZGlmCiAJaWYgKCh5ZWFyICs9IDE5MDApIDwgMTk3MCkKIAkJeWVhciArPSAxMDA7CiAJeHRpbWUudHZfc2VjID0gbWt0aW1lKHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYyk7CiAJeHRpbWUudHZfbnNlYyA9IDA7CiAKLQlwbGF0Zm9ybV90aW1lcl9zZXR1cCh0aW1lcl9pbnRlcnJ1cHQpOworCWg4MzAwX3RpbWVyX3NldHVwKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9NYWtlZmlsZSBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMgaDgzMDAgaW50ZXJuYWwgdGltZXIgaGFuZGxlcgorCitvYmotJChDT05GSUdfSDgzMDBfVElNRVI4KSAgOj0gdGltZXI4Lm8KK29iai0kKENPTkZJR19IODMwMF9USU1FUjE2KSA6PSB0aW1lcjE2Lm8KK29iai0kKENPTkZJR19IODMwMF9JVFUpICAgICA6PSBpdHUubworb2JqLSQoQ09ORklHX0g4MzAwX1RQVSkgICAgIDo9IHRwdS5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzkyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb2dlLmpwPgorICoKKyAqICBJVFUgVGltZXIgSGFuZGxlcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgorCisjaWYgQ09ORklHX0g4MzAwX0lUVV9DSCA9PSAwCisjZGVmaW5lIElUVUJBU0UJMHhmZmZmNjQKKyNkZWZpbmUgSVRVSVJRCTI0CisjZWxpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDEKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY2ZQorI2RlZmluZSBJVFVJUlEJMjgKKyNlbGlmIENPTkZJR19IODMwMF9JVFVfQ0ggPT0gMgorI2RlZmluZSBJVFVCQVNFCTB4ZmZmZjc4CisjZGVmaW5lIElUVUlSUQkzMgorI2VsaWYgQ09ORklHX0g4MzAwX0lUVV9DSCA9PSAzCisjZGVmaW5lIElUVUJBU0UJMHhmZmZmODIKKyNkZWZpbmUgSVRVSVJRCTM2CisjZWxpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDQKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY5MgorI2RlZmluZSBJVFVJUlEJNDAKKyNlbHNlCisjZXJyb3IgVW5rbm93biB0aW1lciBjaGFubmVsLgorI2VuZGlmCisKKyNkZWZpbmUgVENSCTAKKyNkZWZpbmUgVElPUgkxCisjZGVmaW5lIFRJRVIJMgorI2RlZmluZSBUU1IJMworI2RlZmluZSBUQ05UCTQKKyNkZWZpbmUgR1JBCTYKKyNkZWZpbmUgR1JCCTgKKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaDgzMDBfdGltZXJfdGljaygpOworCWN0cmxfYmNscihJTUZBLCBJVFVCQVNFICsgVFNSKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGl0dV9pcnEgPSB7CisJLm5hbWUJCT0gIml0dSIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsxLCAyLCA0LCA4fTsKKwordm9pZCBfX2luaXQgaDgzMDBfdGltZXJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBjbnQ7CisKKwljYWxjX3BhcmFtKGNudCwgZGl2LCBkaXZpZGVfcmF0ZSwgMHgxMDAwMCk7CisKKwlzZXR1cF9pcnEoSVRVSVJRLCAmaXR1X2lycSk7CisKKwkvKiBpbml0YWxpemUgdGltZXIgKi8KKwljdHJsX291dGIoMCwgVFNUUik7CisJY3RybF9vdXRiKENDTFIwIHwgZGl2LCBJVFVCQVNFICsgVENSKTsKKwljdHJsX291dGIoMHgwMSwgSVRVQkFTRSArIFRJRVIpOworCWN0cmxfb3V0dyhjbnQsIElUVUJBU0UgKyBHUkEpOworCWN0cmxfYnNldChDT05GSUdfSDgzMDBfSVRVX0NILCBUU1RSKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQyNzFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb2dlLmpwPgorICoKKyAqICAxNmJpdCBUaW1lciBIYW5kbGVyCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CisKKy8qIDE2Yml0IHRpbWVyICovCisjaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMAorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjc4CisjZGVmaW5lIF8xNklSUQkyNAorI2VsaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMQorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjgwCisjZGVmaW5lIF8xNklSUQkyOAorI2VsaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMgorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjg4CisjZGVmaW5lIF8xNklSUQkzMgorI2Vsc2UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBUQ1IJMAorI2RlZmluZSBUSU9SCTEKKyNkZWZpbmUgVENOVAkyCisjZGVmaW5lIEdSQQk0CisjZGVmaW5lIEdSQgk2CisKKyNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAwIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWg4MzAwX3RpbWVyX3RpY2soKTsKKwljdHJsX2JjbHIoQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0gsIFRJU1JBKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyMTZfaXJxID0geworCS5uYW1lCQk9ICJ0aW1lci0xNiIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsxLCAyLCA0LCA4fTsKKwordm9pZCBfX2luaXQgaDgzMDBfdGltZXJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBjbnQ7CisKKwljYWxjX3BhcmFtKGNudCwgZGl2LCBkaXZpZGVfcmF0ZSwgMHgxMDAwMCk7CisKKwlzZXR1cF9pcnEoXzE2SVJRLCAmdGltZXIxNl9pcnEpOworCisJLyogaW5pdGFsaXplIHRpbWVyICovCisJY3RybF9vdXRiKDAsIFRTVFIpOworCWN0cmxfb3V0YihDQ0xSMCB8IGRpdiwgXzE2QkFTRSArIFRDUik7CisJY3RybF9vdXR3KGNudCwgXzE2QkFTRSArIEdSQSk7CisJY3RybF9ic2V0KDQgKyBDT05GSUdfSDgzMDBfVElNRVIxNl9DSCwgVElTUkEpOworCWN0cmxfYnNldChDT05GSUdfSDgzMDBfVElNRVIxNl9DSCwgVFNUUik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjguYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTZkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjguYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2g4MzAwL2tlcm5lbC9jcHUvdGltZXIvdGltZXI4LmMKKyAqCisgKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+CisgKgorICogIDhiaXQgVGltZXIgSGFuZGxlcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9IODMwMEgpCisjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQorI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgorI2VuZGlmCisKKy8qIDhiaXQgdGltZXIgeDIgKi8KKyNkZWZpbmUgQ01GQQk2CisKKyNpZiBkZWZpbmVkKENPTkZJR19IODMwMF9USU1FUjhfQ0gwKQorI2RlZmluZSBfOEJBU0UJXzhUQ1IwCisjaWZkZWYgQ09ORklHX0NQVV9IODMwMEgKKyNkZWZpbmUgXzhJUlEJMzYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfSDhTCisjZGVmaW5lIF84SVJRCTcyCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0g4MzAwX1RJTUVSOF9DSDIpCisjaWZkZWYgQ09ORklHX0NQVV9IODMwMEgKKyNkZWZpbmUgXzhCQVNFCV84VENSMgorI2RlZmluZSBfOElSUQk0MAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfOEJBU0UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBfOFRDUgkwCisjZGVmaW5lIF84VENTUgkyCisjZGVmaW5lIFRDT1JBCTQKKyNkZWZpbmUgVENPUkIJNgorI2RlZmluZSBfOFRDTlQJOAorCisjZGVmaW5lIENNSUVBCTB4NDAKKyNkZWZpbmUgQ0NMUl9DTUEgMHgwOAorI2RlZmluZSBDS1MyCTB4MDQKKworLyoKKyAqIHRpbWVyX2ludGVycnVwdCgpIG5lZWRzIHRvIGtlZXAgdXAgdGhlIHJlYWwtdGltZSBjbG9jaywKKyAqIGFzIHdlbGwgYXMgY2FsbCB0aGUgImRvX3RpbWVyKCkiIHJvdXRpbmUgZXZlcnkgY2xvY2t0aWNrCisgKi8KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaDgzMDBfdGltZXJfdGljaygpOworCWN0cmxfYmNscihDTUZBLCBfOEJBU0UgKyBfOFRDU1IpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXI4X2lycSA9IHsKKwkubmFtZQkJPSAidGltZXItOCIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHs4LCA2NCwgODE5Mn07CisKK3ZvaWQgX19pbml0IGg4MzAwX3RpbWVyX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgY250OworCisJY2FsY19wYXJhbShjbnQsIGRpdiwgZGl2aWRlX3JhdGUsIDB4MTAwMDApOworCWRpdisrOworCisJc2V0dXBfaXJxKF84SVJRLCAmdGltZXI4X2lycSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQorCS8qIFRpbWVyIG1vZHVsZSBlbmFibGUgKi8KKwljdHJsX2JjbHIoMCwgTVNUUENSTCkKKyNlbmRpZgorCisJLyogaW5pdGFsaXplIHRpbWVyICovCisJY3RybF9vdXR3KGNudCwgXzhCQVNFICsgVENPUkEpOworCWN0cmxfb3V0dygweDAwMDAsIF84QkFTRSArIF84VENTUik7CisJY3RybF9vdXR3KChDTUlFQXxDQ0xSX0NNQXxDS1MyKSA8PCA4IHwgZGl2LAorCQkgIF84QkFTRSArIF84VENSKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3ZjQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIGxpbnV4L2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKiAgVFBVIFRpbWVyIEhhbmRsZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KKworLyogVFBVICovCisjaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAwCisjZGVmaW5lIFRQVUJBU0UJMHhmZmZmZDAKKyNkZWZpbmUgVFBVSVJRCTQwCisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDEKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmZlMAorI2RlZmluZSBUUFVJUlEJNDgKKyNlbGlmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMgorI2RlZmluZSBUUFVCQVNFCTB4ZmZmZmYwCisjZGVmaW5lIFRQVUlSUQk1MgorI2VsaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAzCisjZGVmaW5lIFRQVUJBU0UJMHhmZmZlODAKKyNkZWZpbmUgVFBVSVJRCTU2CisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDQKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmU5MAorI2RlZmluZSBUUFVJUlEJNjQKKyNlbHNlCisjZXJyb3IgVW5rbm93biB0aW1lciBjaGFubmVsLgorI2VuZGlmCisKKyNkZWZpbmUgX1RDUgkwCisjZGVmaW5lIF9UTURSCTEKKyNkZWZpbmUgX1RJT1IJMgorI2RlZmluZSBfVElFUgk0CisjZGVmaW5lIF9UU1IJNQorI2RlZmluZSBfVENOVAk2CisjZGVmaW5lIF9HUkEJOAorI2RlZmluZSBfR1JCCTEwCisKKyNkZWZpbmUgQ0NMUjAJMHgyMAorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwloODMwMF90aW1lcl90aWNrKCk7CisJY3RybF9iY2xyKDAsIFRQVUJBU0UgKyBfVFNSKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRwdV9pcnEgPSB7CisJLm5hbWUJCT0gInRwdSIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitjb25zdCBzdGF0aWMgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsKKyNpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDAKKwkxLDQsMTYsNjQsMCwwLDAsMCwKKyNlbGlmIChDT05GSUdfSDgzMDBfVFBVX0NIID09IDEpIHx8IChDT05GSUdfSDgzMDBfVFBVX0NIID09IDUpCisJMSw0LDE2LDY0LDAsMCwyNTYsMCwKKyNlbGlmIChDT05GSUdfSDgzMDBfVFBVX0NIID09IDIpIHx8IChDT05GSUdfSDgzMDBfVFBVX0NIID09IDQpCisJMSw0LDE2LDY0LDAsMCwwLDEwMjQsCisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDMKKwkxLDQsMTYsNjQsMCwxMDI0LDI1Niw0MDk2LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCBoODMwMF90aW1lcl9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWNhbGNfcGFyYW0oY250LCBkaXYsIGRpdmlkZV9yYXRlLCAweDEwMDAwKTsKKworCXNldHVwX2lycShUUFVJUlEsICZ0cHVfaXJxKTsKKworCS8qIFRQVSBtb2R1bGUgZW5hYmxlZCAqLworCWN0cmxfYmNscigzLCBNU1RQQ1JIKTsKKworCWN0cmxfb3V0YigwLCBUU1RSKTsKKwljdHJsX291dGIoQ0NMUjAgfCBkaXYsIFRQVUJBU0UgKyBfVENSKTsKKwljdHJsX291dGIoMCwgVFBVQkFTRSArIF9UTURSKTsKKwljdHJsX291dHcoMCwgVFBVQkFTRSArIF9USU9SKTsKKwljdHJsX291dGIoMHgwMSwgVFBVQkFTRSArIF9USUVSKTsKKwljdHJsX291dHcoY250LCBUUFVCQVNFICsgX0dSQSk7CisJY3RybF9ic2V0KENPTkZJR19IODMwMF9UUFVfQ0gsIFRTVFIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKaW5kZXggZjhmN2Q3ZWEuLjNjMGI2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYwpAQCAtMjAsMTIgKzIwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CiAKIC8qCiAgKiB0aGlzIG11c3QgYmUgY2FsbGVkIHZlcnkgZWFybHkgYXMgdGhlIGtlcm5lbCBtaWdodApAQCAtOTQsMTYgKzk2LDE5IEBACiAJcHJpbnRrKCJcblxuIik7CiB9CiAKLXZvaWQgZGllX2lmX2tlcm5lbCAoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCBucikKK3ZvaWQgZGllKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKmZwLCB1bnNpZ25lZCBsb25nIGVycikKIHsKLQlleHRlcm4gaW50IGNvbnNvbGVfbG9nbGV2ZWw7CisJc3RhdGljIGludCBkaWVjb3VudDsKIAotCWlmICghKGZwLT5jY3IgJiBQU19TKSkKLQkJcmV0dXJuOworCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKKwlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJcmVwb3J0X2J1ZyhmcC0+cGMsIGZwKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdICIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZWNvdW50KTsKIAlkdW1wKGZwKTsKIAorCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbW0vZmF1bHQuYyBiL2FyY2gvaDgzMDAvbW0vZmF1bHQuYwppbmRleCAyOWU5YWY5Li4xZDA5MmFiIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9oODMwMC9tbS9mYXVsdC5jCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLWV4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLQogLyoKICAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHBhZ2UgZmF1bHRzLiAgSXQgZGV0ZXJtaW5lcyB0aGUgcHJvYmxlbSwgYW5kCiAgKiB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lcy4KQEAgLTUwLDcgKzQ4LDggQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIGFjY2VzcyIpOwogCXByaW50aygiIGF0IHZpcnR1YWwgYWRkcmVzcyAlMDhseFxuIixhZGRyZXNzKTsKLQlkaWVfaWZfa2VybmVsKCJPb3BzIiwgcmVncywgZXJyb3JfY29kZSk7CisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWRpZSgiT29wcyIsIHJlZ3MsIGVycm9yX2NvZGUpOwogCWRvX2V4aXQoU0lHS0lMTCk7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L01ha2VmaWxlCmluZGV4IGIwM2MzMjhmLi5iN2ZmNzgwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgOj0gY3J0MF9yYW0ubwotb2JqLXkgOj0gdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2NkODVkLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jCi0gKgotICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb2dlLmpwPgotICoKLSAqICBQbGF0Zm9ybSBkZXBlbmQgVGltZXIgSGFuZGxlcgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgotCi0jZGVmaW5lIENNRkEgNgotCi0jZGVmaW5lIENNSUVBIDB4NDAKLSNkZWZpbmUgQ0NMUl9DTUEgMHgwOAotI2RlZmluZSBDTEtfRElWODE5MiAweDAzCi0KLSNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvODE5MiAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLwotCi12b2lkIF9faW5pdCBwbGF0Zm9ybV90aW1lcl9zZXR1cChpcnFyZXR1cm5fdCAoKnRpbWVyX2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQotewotCS8qIHNldHVwIDhiaXQgdGltZXIgY2gyICovCi0JY3RybF9vdXRiKEg4MzAwX1RJTUVSX0ZSRVEgLyBIWiwgVENPUkEyKTsgICAgICAvKiBzZXQgaW50ZXJ2YWwgKi8KLQljdHJsX291dGIoMHgwMCwgXzhUQ1NSMik7ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCAqLwotCXJlcXVlc3RfaXJxKDQwLCB0aW1lcl9pbnQsIDAsICJ0aW1lciIsIDApOwotCWN0cmxfb3V0YihDTUlFQXxDQ0xSX0NNQXxDTEtfRElWODE5MiwgXzhUQ1IyKTsgLyogc3RhcnQgY291bnQgKi8KLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfOFRDU1IyICY9IH4oMSA8PCBDTUZBKTsKLX0KLQotdm9pZCBwbGF0Zm9ybV9nZXR0b2QoaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICpkYXksIGludCAqaG91ciwKLQkJIGludCAqbWluLCBpbnQgKnNlYykKLXsKLQkqeWVhciA9ICptb24gPSAqZGF5ID0gKmhvdXIgPSAqbWluID0gKnNlYyA9IDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy9NYWtlZmlsZQppbmRleCAzMmI5NjRhLi4yYjEyYTE3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgOj0gIGNydDBfJChNT0RFTCkubwotb2JqLXkgOj0gdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjVjZWZlMC4uMDAwMDAwMAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvdGltZXIuYwotICoKLSAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+Ci0gKgotICogIFBsYXRmb3JtIGRlcGVuZCBUaW1lciBIYW5kbGVyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfSDgzMDA3KSB8fCBkZWZpbmVkKENPTkZJR19IODMwNjgpCi0jaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+Ci0jZGVmaW5lIENNRkEgNgotCi0jZGVmaW5lIENNSUVBIDB4NDAKLSNkZWZpbmUgQ0NMUl9DTUEgMHgwOAotI2RlZmluZSBDTEtfRElWODE5MiAweDAzCi0KLSNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvODE5MiAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLwotCi12b2lkIF9faW5pdCBwbGF0Zm9ybV90aW1lcl9zZXR1cChpcnFyZXR1cm5fdCAoKnRpbWVyX2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQotewotCS8qIHNldHVwIDhiaXQgdGltZXIgY2gyICovCi0JY3RybF9vdXRiKEg4MzAwX1RJTUVSX0ZSRVEgLyBIWiwgVENPUkEyKTsgICAgICAvKiBzZXQgaW50ZXJ2YWwgKi8KLQljdHJsX291dGIoMHgwMCwgXzhUQ1NSMik7ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCAqLwotCXJlcXVlc3RfaXJxKDQwLCB0aW1lcl9pbnQsIDAsICJ0aW1lciIsIDApOwotCWN0cmxfb3V0YihDTUlFQXxDQ0xSX0NNQXxDTEtfRElWODE5MiwgXzhUQ1IyKTsgLyogc3RhcnQgY291bnQgKi8KLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfOFRDU1IyICY9IH4oMSA8PCBDTUZBKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfSDgzMDAyKSB8fCBkZWZpbmVkKENPTkZJR19IODMwNDgpCi0vKiBGSVhNRSEgKi8KLSNkZWZpbmUgVFNUUiAweDAwZmZmZjYwCi0jZGVmaW5lIFRTTkMgMHgwMGZmZmY2MQotI2RlZmluZSBUTURSIDB4MDBmZmZmNjIKLSNkZWZpbmUgVEZDUiAweDAwZmZmZjYzCi0jZGVmaW5lIFRPRVIgMHgwMGZmZmY5MAotI2RlZmluZSBUT0NSIDB4MDBmZmZmOTEKLS8qIElUVTAgKi8KLSNkZWZpbmUgVENSICAweDAwZmZmZjY0Ci0jZGVmaW5lIFRJT1IgMHgwMGZmZmY2NQotI2RlZmluZSBUSUVSIDB4MDBmZmZmNjYKLSNkZWZpbmUgVFNSICAweDAwZmZmZjY3Ci0jZGVmaW5lIFRDTlQgMHgwMGZmZmY2OAotI2RlZmluZSBHUkEgIDB4MDBmZmZmNmEKLSNkZWZpbmUgR1JCICAweDAwZmZmZjZjCi0KLSNkZWZpbmUgQ0NMUl9DTUdSQSAweDIwCi0jZGVmaW5lIENMS19ESVY4IDB4MDMKLQotI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMC84IC8qIFRpbWVyIGlucHV0IGZyZXEuICovCi0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3RpbWVyX3NldHVwKGlycXJldHVybl90ICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCi17Ci0JKih1bnNpZ25lZCBzaG9ydCAqKUdSQT0gSDgzMDBfVElNRVJfRlJFUSAvIEhaOyAgLyogc2V0IGludGVydmFsICovCi0JKih1bnNpZ25lZCBzaG9ydCAqKVRDTlQ9MDsgICAgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgY291bnRlciAqLwotCWN0cmxfb3V0YigweDgwfENDTFJfQ01HUkF8Q0xLX0RJVjgsIFRDUik7ICAgICAgIC8qIHNldCBJVFUwIGNsb2NrICovCi0JY3RybF9vdXRiKDB4ODgsIFRJT1IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3V0cHV0ICovCi0JcmVxdWVzdF9pcnEoMjYsIHRpbWVyX2ludCwgMCwgInRpbWVyIiwgMCk7Ci0JY3RybF9vdXRiKDB4ZjksIFRJRVIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29tcGFyZSBtYXRjaCBHUkEgaW50ZXJydXB0ICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKFRTTkMpICYgfjB4MDEsIFRTTkMpOyAgICAgICAgLyogSVRVMCBhc3luYyAqLwotCWN0cmxfb3V0YihjdHJsX2luYihUTURSKSAmIH4weDAxLCBUTURSKTsgICAgICAgIC8qIElUVTAgbm9ybWFsIG1vZGUgKi8KLQljdHJsX291dGIoY3RybF9pbmIoVFNUUikgfCAweDAxLCBUU1RSKTsgICAgICAgICAvKiBJVFUwIFN0YXJ0ICovCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFRTUikgJiB+MHgwMSxUU1IpOwotfQotI2VuZGlmCi0KLXZvaWQgcGxhdGZvcm1fZ2V0dG9kKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCi0JCSBpbnQgKm1pbiwgaW50ICpzZWMpCi17Ci0JKnllYXIgPSAqbW9uID0gKmRheSA9ICpob3VyID0gKm1pbiA9ICpzZWMgPSAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9oOG1heC9NYWtlZmlsZQppbmRleCBiMDNjMzI4Zi4uYjdmZjc4MCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgOj0gY3J0MF9yYW0ubwotb2JqLXkgOj0gdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YTU3NGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYwotICoKLSAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9nZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiBzZXR1cCA4Yml0IHRpbWVyIGNoMiAqLwotCWN0cmxfb3V0YihIODMwMF9USU1FUl9GUkVRIC8gSFosIFRDT1JBMik7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjIpOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg0MCwgdGltZXJfaW50LCAwLCAidGltZXIiLCAwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMik7IC8qIHN0YXJ0IGNvdW50ICovCi19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXzhUQ1NSMiAmPSB+KDEgPDwgQ01GQSk7Ci19Ci0KLXZvaWQgcGxhdGZvcm1fZ2V0dG9kKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCi0JCSBpbnQgKm1pbiwgaW50ICpzZWMpCi17Ci0JKnllYXIgPSAqbW9uID0gKmRheSA9ICpob3VyID0gKm1pbiA9ICpzZWMgPSAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvTWFrZWZpbGUKaW5kZXggZjc2MzY1NC4uOGUzNDk3MiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC9NYWtlZmlsZQpAQCAtMyw0ICszLDMgQEAKICMKIAogZXh0cmEteSA6PSBjcnQwXyQoTU9ERUwpLm8KLW9iai15IDo9IHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjE0MjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCi0gKgotICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiA4Yml0IHRpbWVyIG1vZHVsZSBlbmFibGVkICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKE1TVFBDUkwpICYgfjB4MDEsIE1TVFBDUkwpOwotCS8qIHNldHVwIDhiaXQgdGltZXIgY2gxICovCi0JY3RybF9vdXRiKEg4MzAwX1RJTUVSX0ZSRVEgLyBIWiwgXzhUQ09SQTEpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IxKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg3NiwgdGltZXJfaW50LCAwLCAidGltZXIiICwwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMSk7ICAgLyogc3RhcnQgY291bnQgKi8KLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfOFRDU1IxICY9IH4oMSA8PCBDTUZBKTsKLX0KLQotdm9pZCBwbGF0Zm9ybV9nZXR0b2QoaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICpkYXksIGludCAqaG91ciwKLQkJIGludCAqbWluLCBpbnQgKnNlYykKLXsKLS8qIEZJWE1FISBub3QgUlRDIHN1cHBvcnQgKi8KLQkqeWVhciA9ICptb24gPSAqZGF5ID0gKmhvdXIgPSAqbWluID0gKnNlYyA9IDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9NYWtlZmlsZQppbmRleCAwNTVkNTNhLi40NGI0Njg1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgPSAgY3J0MF8kKE1PREVMKS5vCi1vYmoteSA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMjExYzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMKLSAqCi0gKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgotICoKLSAqICBQbGF0Zm9ybSBkZXBlbmQgVGltZXIgSGFuZGxlcgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgotCi0jZGVmaW5lIENNRkEgNgotCi0jZGVmaW5lIENNSUVBIDB4NDAKLSNkZWZpbmUgQ0NMUl9DTUEgMHgwOAotI2RlZmluZSBDTEtfRElWODE5MiAweDAzCi0KLSNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvODE5MiAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLwotCi12b2lkIF9faW5pdCBwbGF0Zm9ybV90aW1lcl9zZXR1cChpcnFyZXR1cm5fdCAoKnRpbWVyX2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQotewotCS8qIDhiaXQgdGltZXIgbW9kdWxlIGVuYWJsZWQgKi8KLQljdHJsX291dGIoY3RybF9pbmIoTVNUUENSTCkgJiB+MHgwMSwgTVNUUENSTCk7Ci0JLyogc2V0dXAgOGJpdCB0aW1lciBjaDEgKi8KLQljdHJsX291dGIoSDgzMDBfVElNRVJfRlJFUSAvIEhaLCBfOFRDT1JBMSk7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCAqLwotCXJlcXVlc3RfaXJxKDc2LCB0aW1lcl9pbnQsIDAsICJ0aW1lciIgLDApOwotCWN0cmxfb3V0YihDTUlFQXxDQ0xSX0NNQXxDTEtfRElWODE5MiwgXzhUQ1IxKTsgICAvKiBzdGFydCBjb3VudCAqLwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV84VENTUjEgJj0gfigxIDw8IENNRkEpOwotfQotCi12b2lkIHBsYXRmb3JtX2dldHRvZChpbnQgKnllYXIsIGludCAqbW9uLCBpbnQgKmRheSwgaW50ICpob3VyLAotCQkgaW50ICptaW4sIGludCAqc2VjKQotewotCSp5ZWFyID0gKm1vbiA9ICpkYXkgPSAqaG91ciA9ICptaW4gPSAqc2VjID0gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggNDhlNDk2Zi4uOTEyYzU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTcsNiArNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAogY29uZmlnIElBNjQKQEAgLTYwLDE0ICs2Miw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JYm9vbAotCWRlZmF1bHQgbgotCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0Ci0JYm9vbAotCWRlZmF1bHQgbgotCiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUKIAlib29sCiAJZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDQ5NTZiZTQuLmQ5OGYwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMjA3MCwxNCArMjA3MCwxMyBAQAogCWlmICghaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDEiKSAmJiAhaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDFfc3dpb3RsYiIpKQogCQlyZXR1cm4gMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgJiYgZGVmaW5lZChDT05GSUdfQ1JBU0hfRFVNUCkgJiYgXAotICAgICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKIAkvKiBJZiB3ZSBhcmUgYm9vdGluZyBhIGtkdW1wIGtlcm5lbCwgdGhlIHNiYV9pb21tdSB3aWxsCiAJICogY2F1c2UgZGV2aWNlcyB0aGF0IHdlcmUgbm90IHNodXRkb3duIHByb3Blcmx5IHRvIE1DQQogCSAqIGFzIHNvb24gYXMgdGhleSBhcmUgdHVybmVkIGJhY2sgb24uICBPdXIgb25seSBvcHRpb24gZm9yCiAJICogYSBzdWNjZXNzZnVsIGtkdW1wIGtlcm5lbCBib290IGlzIHRvIHVzZSB0aGUgc3dpb3RsYi4KIAkgKi8KLQlpZiAoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkgeworCWlmIChpc19rZHVtcF9rZXJuZWwoKSkgewogCQlpZiAoc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKSAhPSAwKQogCQkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEI6IgogCQkJCSAgIiBUcnkgbWFjaHZlYz1kaWcgYm9vdCBvcHRpb24iKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggNGYwYzMwYy4uZjkyYmRhYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgZWxmX21hcAkJCQllbGYzMl9tYXAKIAogI3VuZGVmIFNFVF9QRVJTT05BTElUWQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQllbGYzMl9zZXRfcGVyc29uYWxpdHkoKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCWVsZjMyX3NldF9wZXJzb25hbGl0eSgpCiAKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykJKCEoaGF2ZV9wdF9nbnVfc3RhY2spKQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKaW5kZXggZmY4OGM0OC4uNTM1MDViYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwpAQCAtMjUxLDggKzI1MSw4IEBACiAJZGF0YTggY29tcGF0X3N5c19zZXRybGltaXQJICAvKiA3NSAqLwogCWRhdGE4IGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdAogCWRhdGE4IGNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JZGF0YTggc3lzMzJfZ2V0dGltZW9mZGF5Ci0JZGF0YTggc3lzMzJfc2V0dGltZW9mZGF5CisJZGF0YTggY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKKwlkYXRhOCBjb21wYXRfc3lzX3NldHRpbWVvZmRheQogCWRhdGE4IHN5czMyX2dldGdyb3VwczE2CSAgLyogODAgKi8KIAlkYXRhOCBzeXMzMl9zZXRncm91cHMxNgogCWRhdGE4IHN5czMyX29sZF9zZWxlY3QKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmggYi9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oCmluZGV4IGRkMGM1MzYuLjBmMTUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKKysrIGIvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaApAQCAtMzMyLDggKzMzMiw4IEBACiAjZGVmaW5lIEVMRl9QTEFURk9STQlOVUxMCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgsSUJDUzIpCQkJCVwKLQkoY3VycmVudC0+cGVyc29uYWxpdHkgPSAoSUJDUzIpID8gUEVSX1NWUjQgOiBQRVJfTElOVVgpCisjIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgpCQkJCVwKKwkoY3VycmVudC0+cGVyc29uYWxpdHkgPSBQRVJfTElOVVgpCiAjZW5kaWYKIAogI2RlZmluZSBJQTMyX0VGTEFHCTB4MjAwCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCBiZjE5NmNiLi5mNDQzMGJiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKQEAgLTExOCw0MSArMTE4LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnVidWYpCi17Ci0JY29tcGF0X2lub190IGlubzsKLQlpbnQgZXJyOwotCi0JaWYgKCh1NjQpIHN0YXQtPnNpemUgPiBNQVhfTk9OX0xGUyB8fAotCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8Ci0JICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlmIChjbGVhcl91c2VyKHVidWYsIHNpemVvZigqdWJ1ZikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVyciAgPSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZ1YnVmLT5zdF9kZXYpOwotCWVyciB8PSBfX3B1dF91c2VyKGlubywgJnVidWYtPnN0X2lubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bW9kZSwgJnVidWYtPnN0X21vZGUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBfX3B1dF91c2VyKGhpZ2gybG93dWlkKHN0YXQtPnVpZCksICZ1YnVmLT5zdF91aWQpOwotCWVyciB8PSBfX3B1dF91c2VyKGhpZ2gybG93Z2lkKHN0YXQtPmdpZCksICZ1YnVmLT5zdF9naWQpOwotCWVyciB8PSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmdWJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnVidWYtPnN0X3NpemUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZ1YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibG9ja3MsICZ1YnVmLT5zdF9ibG9ja3MpOwotCXJldHVybiBlcnI7Ci19CiAKICNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCiAKQEAgLTExNDgsNjggKzExMTMsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcKLWdldF90djMyIChzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpIHx8Ci0JCShfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfCBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcKLXB1dF90djMyIChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpIHwgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBzeXMzMl9hbGFybSAodW5zaWduZWQgaW50IHNlY29uZHMpCiB7CiAJcmV0dXJuIGFsYXJtX3NldGl0aW1lcihzZWNvbmRzKTsKIH0KIAotLyogVHJhbnNsYXRpb25zIGR1ZSB0byB0aW1lX3Qgc2l6ZSBkaWZmZXJlbmNlcy4gIFdoaWNoIGFmZmVjdHMgYWxsCi0gICBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgdGltZXZhbCBhbmQgaXRpbWVydmFsLiAgKi8KLQotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZ2V0dGltZW9mZGF5IChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0JaWYgKHR2KSB7Ci0JCXN0cnVjdCB0aW1ldmFsIGt0djsKLQkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCQlpZiAocHV0X3R2MzIodHYsICZrdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV90b191c2VyKHR6LCAmc3lzX3R6LCBzaXplb2Yoc3lzX3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2V0dGltZW9mZGF5IChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWV2YWwga3R2OwotCXN0cnVjdCB0aW1lc3BlYyBrdHM7Ci0Jc3RydWN0IHRpbWV6b25lIGt0ejsKLQotCWlmICh0dikgewotCQlpZiAoZ2V0X3R2MzIoJmt0diwgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWt0cy50dl9zZWMgPSBrdHYudHZfc2VjOwotCQlrdHMudHZfbnNlYyA9IGt0di50dl91c2VjICogMTAwMDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIHN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IG47CiAJdW5zaWduZWQgaW50IGlucDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAyYWNiNmI2Li44NmVkZGVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMDIsNyArMjAyLDcgQEAKICAgIHJlbGV2YW50IHVudGlsIHdlIGhhdmUgcmVhbCBoYXJkd2FyZSB0byBwbGF5IHdpdGguLi4gKi8KICNkZWZpbmUgRUxGX1BMQVRGT1JNCU5VTEwKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY3V0YWJsZV9zdGFjaykJCQkJCVwKIAkoKGV4ZWN1dGFibGVfc3RhY2shPUVYU1RBQ0tfRElTQUJMRV9YKSAmJiAoKGV4KS5lX2ZsYWdzICYgRUZfSUFfNjRfTElOVVhfRVhFQ1VUQUJMRV9TVEFDSykgIT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAxZWZlNTEzLi44NWRiMTI0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAjZGVmaW5lIEdQRk5fSU9TQVBJQyAgICAgICAgKDRVTCA8PCA2MCkgLyogSU9TQVBJQyBiYXNlICovCiAjZGVmaW5lIEdQRk5fTEVHQUNZX0lPICAgICAgKDVVTCA8PCA2MCkgLyogTGVnYWN5IEkvTyBiYXNlICovCiAjZGVmaW5lIEdQRk5fR0ZXICAgICAgICAoNlVMIDw8IDYwKSAvKiBHdWVzdCBGaXJtd2FyZSAqLwotI2RlZmluZSBHUEZOX0hJR0hfTU1JTyAgICAgICg3VUwgPDwgNjApIC8qIEhpZ2ggTU1JTyByYW5nZSAqLworI2RlZmluZSBHUEZOX1BIWVNfTU1JTyAgICAgICg3VUwgPDwgNjApIC8qIERpcmVjdGVkIE1NSU8gUmFuZ2UgKi8KIAogI2RlZmluZSBHUEZOX0lPX01BU0sgICAgICAgICg3VUwgPDwgNjApIC8qIEd1ZXN0IHBmbiBpcyBJL08gdHlwZSAqLwogI2RlZmluZSBHUEZOX0lOVl9NQVNLICAgICAgICgxVUwgPDwgNjMpIC8qIEd1ZXN0IHBmbiBpcyBpbnZhbGlkICovCkBAIC00MTMsNiArNDEzLDEwIEBACiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9zYWxfZGF0YSByZHZfc2FsX2RhdGE7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzc2lnbmVkX2Rldl9oZWFkOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZG9tYWluOworCXN0cnVjdCBobGlzdF9oZWFkIGlycV9hY2tfbm90aWZpZXJfbGlzdDsKIH07CiAKIHVuaW9uIGNwdWlkM190IHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggZGE2MGU5MC4uMjNlOTEyOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTgsMTAgKzgsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKy8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwordW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCA1MWI3NWNlLi5lZmFmZjE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTEzMzUsNyArMTMzNSw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAvKiBsb2NhdGUgdGhlIHNpemUgZmluZCBhIHRoZSBkZXNjcmlwdG9yIGF0IGEgY2VydGFpbiBhZGRyZXNzICovCiB1bnNpZ25lZCBsb25nIF9faW5pdAogdm1jb3JlX2ZpbmRfZGVzY3JpcHRvcl9zaXplICh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggZGU2MzZiMi4uOTE2YmE4OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKyNpZmRlZiBDT05GSUdfQ1JBU0hfS0VSTkVMCiAJaWYgKHJlc2VydmVfZWxmY29yZWhkcigmcnN2ZF9yZWdpb25bbl0uc3RhcnQsCiAJCQkgICAgICAgJnJzdmRfcmVnaW9uW25dLmVuZCkgPT0gMCkKIAkJbisrOwpAQCAtNDc4LDcgKzQ3OCwxMiBAQAogfQogZWFybHlfcGFyYW0oIm5vbWNhIiwgc2V0dXBfbm9tY2EpOwogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisvKgorICogTm90ZTogZWxmY29yZWhkcl9hZGRyIGlzIG5vdCBqdXN0IGxpbWl0ZWQgdG8gdm1jb3JlLiBJdCBpcyBhbHNvIHVzZWQgYnkKKyAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZQorICogaWZkZWYgaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIKICAqIHN0b3JlZCBieSB0aGUgY3Jhc2hlZCBrZXJuZWwuCiAgKi8KQEAgLTUwMiwxMSArNTA3LDExIEBACiAJICogdG8gd29yayBwcm9wZXJseS4KIAkgKi8KIAotCWlmIChlbGZjb3JlaGRyX2FkZHIgPj0gRUxGQ09SRV9BRERSX01BWCkKKwlpZiAoIWlzX3ZtY29yZV91c2FibGUoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKGxlbmd0aCA9IHZtY29yZV9maW5kX2Rlc2NyaXB0b3Jfc2l6ZShlbGZjb3JlaGRyX2FkZHIpKSA9PSAwKSB7Ci0JCWVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisJCXZtY29yZV91bnVzYWJsZSgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwppbmRleCA3OTE0ZTQ4Li44ZTk5ZmVkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL0tjb25maWcKKysrIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCkBAIC00Niw0ICs0Niw2IEBACiBjb25maWcgS1ZNX1RSQUNFCiAgICAgICAgYm9vbAogCitzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZworCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZQppbmRleCBiZjIyZmI5Li5jZjM3ZjhmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUKQEAgLTQ0LDcgKzQ0LDExIEBACiBFWFRSQV9BRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvaWE2NC9rdm0vCiAKIGNvbW1vbi1vYmpzID0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKLQkJY29hbGVzY2VkX21taW8ubykKKwkJY29hbGVzY2VkX21taW8ubyBpcnFfY29tbS5vKQorCitpZmVxICgkKENPTkZJR19ETUFSKSx5KQorY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCB2dGQubykKK2VuZGlmCiAKIGt2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMpIGt2bS1pYTY0Lm8ga3ZtX2Z3Lm8KIG9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2lycS5oIGIvYXJjaC9pYTY0L2t2bS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjc4NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2t2bS9pcnEuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogaXJxLmg6IEluLWtlcm5lbCBpbnRlcnJ1cHQgY29udHJvbGxlciByZWxhdGVkIGRlZmluaXRpb25zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICBYaWFudGFvIFpoYW5nIDx4aWFudGFvLnpoYW5nQGludGVsLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lSUV9ICisjZGVmaW5lIF9fSVJRX0gKKworc3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKQoreworCXJldHVybiAxOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwppbmRleCBjZDBkMWE3Li5jMDY5OWYwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vZ2NjX2ludHJpbi5oPgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgImlvZGV2LmgiCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAjaW5jbHVkZSAibGFwaWMuaCIKKyNpbmNsdWRlICJpcnEuaCIKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3ZtbV9iYXNlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX3ZzYV9iYXNlOwpAQCAtMTc5LDEyICsxODEsMTYgQEAKIAlzd2l0Y2ggKGV4dCkgewogCWNhc2UgS1ZNX0NBUF9JUlFDSElQOgogCWNhc2UgS1ZNX0NBUF9VU0VSX01FTU9SWToKKwljYXNlIEtWTV9DQVBfTVBfU1RBVEU6CiAKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTzoKIAkJciA9IEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVDsKIAkJYnJlYWs7CisJY2FzZSBLVk1fQ0FQX0lPTU1VOgorCQlyID0gaW50ZWxfaW9tbXVfZm91bmQoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJfQpAQCAtNzcxLDYgKzc3Nyw3IEBACiAJICovCiAJa3ZtX2J1aWxkX2lvX3BtdChrdm0pOwogCisJSU5JVF9MSVNUX0hFQUQoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCk7CiB9CiAKIHN0cnVjdCAga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCkKQEAgLTEzMzQsNiArMTM0MSwxMCBAQAogCiB2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQogeworCWt2bV9pb21tdV91bm1hcF9ndWVzdChrdm0pOworI2lmZGVmICBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCisJa3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoa3ZtKTsKKyNlbmRpZgogCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKIAlrdm1fcmVsZWFzZV92bV9wYWdlcyhrdm0pOwogCWt2bV9mcmVlX3BoeXNtZW0oa3ZtKTsKQEAgLTE0MzUsMTcgKzE0NDYsMjQgQEAKIAkJaW50IHVzZXJfYWxsb2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgcGZuOwogCWludCBucGFnZXMgPSBtZW0tPm1lbW9yeV9zaXplID4+IFBBR0VfU0hJRlQ7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW21lbS0+c2xvdF07CiAJdW5zaWduZWQgbG9uZyBiYXNlX2dmbiA9IG1lbXNsb3QtPmJhc2VfZ2ZuOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7Ci0JCXBhZ2UgPSBnZm5fdG9fcGFnZShrdm0sIGJhc2VfZ2ZuICsgaSk7Ci0JCWt2bV9zZXRfcG10X2VudHJ5KGt2bSwgYmFzZV9nZm4gKyBpLAotCQkJCXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQsCi0JCQkJX1BBR0VfQVJfUldYfF9QQUdFX01BX1dCKTsKLQkJbWVtc2xvdC0+cm1hcFtpXSA9ICh1bnNpZ25lZCBsb25nKXBhZ2U7CisJCXBmbiA9IGdmbl90b19wZm4oa3ZtLCBiYXNlX2dmbiArIGkpOworCQlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKSB7CisJCQlrdm1fc2V0X3BtdF9lbnRyeShrdm0sIGJhc2VfZ2ZuICsgaSwKKwkJCQkJcGZuIDw8IFBBR0VfU0hJRlQsCisJCQkJX1BBR0VfQVJfUldYIHwgX1BBR0VfTUFfV0IpOworCQkJbWVtc2xvdC0+cm1hcFtpXSA9ICh1bnNpZ25lZCBsb25nKXBmbl90b19wYWdlKHBmbik7CisJCX0gZWxzZSB7CisJCQlrdm1fc2V0X3BtdF9lbnRyeShrdm0sIGJhc2VfZ2ZuICsgaSwKKwkJCQkJR1BGTl9QSFlTX01NSU8gfCAocGZuIDw8IFBBR0VfU0hJRlQpLAorCQkJCQlfUEFHRV9NQV9VQyk7CisJCQltZW1zbG90LT5ybWFwW2ldID0gMDsKKwkJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE3ODksMTEgKzE4MDcsNDMgQEAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJdmNwdV9sb2FkKHZjcHUpOworCW1wX3N0YXRlLT5tcF9zdGF0ZSA9IHZjcHUtPmFyY2gubXBfc3RhdGU7CisJdmNwdV9wdXQodmNwdSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IHI7CisJbG9uZyBwc3I7CisJbG9jYWxfaXJxX3NhdmUocHNyKTsKKwlyID0ga3ZtX2luc2VydF92bW1fbWFwcGluZyh2Y3B1KTsKKwlpZiAocikKKwkJZ290byBmYWlsOworCisJdmNwdS0+YXJjaC5sYXVuY2hlZCA9IDA7CisJa3ZtX2FyY2hfdmNwdV91bmluaXQodmNwdSk7CisJciA9IGt2bV9hcmNoX3ZjcHVfaW5pdCh2Y3B1KTsKKwlpZiAocikKKwkJZ290byBmYWlsOworCisJa3ZtX3B1cmdlX3ZtbV9tYXBwaW5nKHZjcHUpOworCXIgPSAwOworZmFpbDoKKwlsb2NhbF9pcnFfcmVzdG9yZShwc3IpOworCXJldHVybiByOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKQogewotCXJldHVybiAtRUlOVkFMOworCWludCByID0gMDsKKworCXZjcHVfbG9hZCh2Y3B1KTsKKwl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gbXBfc3RhdGUtPm1wX3N0YXRlOworCWlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEKQorCQlyID0gdmNwdV9yZXNldCh2Y3B1KTsKKwl2Y3B1X3B1dCh2Y3B1KTsKKwlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtX21pbnN0YXRlLmggYi9hcmNoL2lhNjQva3ZtL2t2bV9taW5zdGF0ZS5oCmluZGV4IDEzOTgwZDkuLjJjYzQxZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtX21pbnN0YXRlLmgKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm1fbWluc3RhdGUuaApAQCAtNTAsMjcgKzUwLDE4IEBACiAKICNkZWZpbmUgUEFMX1ZTQV9TWU5DX1JFQUQJCQkJCQlcCiAJLyogYmVnaW4gdG8gY2FsbCBwYWwgdnBzIHN5bmNfcmVhZCAqLwkJCQlcCit7Lm1paTsJCQkJCQkJCQlcCiAJYWRkIHIyNSA9IFZNTV9WUERfQkFTRV9PRkZTRVQsIHIyMTsJCQkJXAotCWFkZHMgcjIwID0gVk1NX1ZDUFVfVlNBX0JBU0VfT0ZGU0VULCByMjE7ICAvKiBlbnRyeSBwb2ludCAqLwlcCi0JOzsJCQkJCQkJCVwKLQlsZDggcjI1ID0gW3IyNV07ICAgICAgLyogcmVhZCB2cGQgYmFzZSAqLwkJCVwKLQlsZDggcjIwID0gW3IyMF07CQkJCQkJXAotCTs7CQkJCQkJCQlcCi0JYWRkIHIyMCA9IFBBTF9WUFNfU1lOQ19SRUFELHIyMDsJCQkJXAotCTs7CQkJCQkJCQlcCi17IC5taWk7CQkJCQkJCQkJXAogCW5vcCAweDA7CQkJCQkJCVwKLQltb3YgcjI0ID0gaXA7CQkJCQkJCVwKLQltb3YgYjAgPSByMjA7CQkJCQkJCVwKKwltb3YgcjI0PWlwOwkJCQkJCQlcCisJOzsJCQkJCQkJCVwKK30JCQkJCQkJCQlcCit7Lm1tYgkJCQkJCQkJCVwKKwlhZGQgcjI0PTB4MjAsIHIyNDsJCQkJCQlcCisJbGQ4IHIyNSA9IFtyMjVdOyAgICAgIC8qIHJlYWQgdnBkIGJhc2UgKi8JCQlcCisJYnIuY29uZC5zcHRrIGt2bV92cHNfc3luY19yZWFkOwkJLypjYWxsIHRoZSBzZXJ2aWNlKi8JXAogCTs7CQkJCQkJCQlcCiB9OwkJCQkJCQkJCVwKLXsgLm1tYjsJCQkJCQkJCQlcCi0JYWRkIHIyNCA9IDB4MjAsIHIyNDsJCQkJCQlcCi0Jbm9wIDB4MDsJCQkJCQkJXAotCWJyLmNvbmQuc3B0ayBiMDsgICAgICAgIC8qICBjYWxsIHRoZSBzZXJ2aWNlICovCQkJXAotCTs7CQkJCQkJCQlcCi19OwotCiAKIAogI2RlZmluZSBLVk1fTUlOU1RBVEVfR0VUX0NVUlJFTlQocmVnKSAgIG1vdiByZWc9cjIxCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL29wdHZmYXVsdC5TIGIvYXJjaC9pYTY0L2t2bS9vcHR2ZmF1bHQuUwppbmRleCBlNGYxNWQ2Li42MzRhYmFkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL29wdHZmYXVsdC5TCisrKyBiL2FyY2gvaWE2NC9rdm0vb3B0dmZhdWx0LlMKQEAgLTEsOSArMSwxMiBAQAogLyoKLSAqIGFyY2gvaWE2NC92bXgvb3B0dmZhdWx0LlMKKyAqIGFyY2gvaWE2NC9rdm0vb3B0dmZhdWx0LlMKICAqIG9wdGltaXplIHZpcnR1YWxpemF0aW9uIGZhdWx0IGhhbmRsZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ28KICAqCVh1ZWZlaSBYdSAoQW50aG9ueSBYdSkgPGFudGhvbnkueHVAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEludGVsIENvCisgKiAgICAgIEFkZCB0aGUgc3VwcG9ydCBmb3IgVHVrd2lsYSBwcm9jZXNzb3JzLgorICoJWGlhbnRhbyBaaGFuZyA8eGlhbnRhby56aGFuZ0BpbnRlbC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgpAQCAtMjAsNiArMjMsOTggQEAKICNkZWZpbmUgQUNDRV9NT1ZfVE9fUFNSCiAjZGVmaW5lIEFDQ0VfVEhBU0gKIAorI2RlZmluZSBWTVhfVlBTX1NZTkNfUkVBRAkJCVwKKwlhZGQgcjE2PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxOwlcCisJbW92IHIxNyA9IGIwOwkJCQlcCisJbW92IHIxOCA9IHIyNDsJCQkJXAorCW1vdiByMTkgPSByMjU7CQkJCVwKKwltb3YgcjIwID0gcjMxOwkJCQlcCisJOzsJCQkJCVwKK3subWlpOwkJCQkJCVwKKwlsZDggcjE2ID0gW3IxNl07CQkJXAorCW5vcCAweDA7CQkJCVwKKwltb3YgcjI0ID0gaXA7CQkJCVwKKwk7OwkJCQkJXAorfTsJCQkJCQlcCit7Lm1tYjsJCQkJCQlcCisJYWRkIHIyND0weDIwLCByMjQ7CQkJXAorCW1vdiByMjUgPXIxNjsJCQkJXAorCWJyLnNwdGsubWFueSBrdm1fdnBzX3N5bmNfcmVhZDsJCVwKK307CQkJCQkJXAorCW1vdiBiMCA9IHIxNzsJCQkJXAorCW1vdiByMjQgPSByMTg7CQkJCVwKKwltb3YgcjI1ID0gcjE5OwkJCQlcCisJbW92IHIzMSA9IHIyMAorCitFTlRSWShrdm1fdnBzX2VudHJ5KQorCWFkZHMgcjI5ID0gVk1NX1ZDUFVfVlNBX0JBU0VfT0ZGU0VULHIyMQorCTs7CisJbGQ4IHIyOSA9IFtyMjldCisJOzsKKwlhZGQgcjI5ID0gcjI5LCByMzAKKwk7OworCW1vdiBiMCA9IHIyOQorCWJyLnNwdGsubWFueSBiMAorRU5EKGt2bV92cHNfZW50cnkpCisKKy8qCisgKglJbnB1dHM6CisgKglyMjQgOiByZXR1cm4gYWRkcmVzcworICogIAlyMjUgOiB2cGQKKyAqCXIyOSA6IHNjcmF0Y2gKKyAqCisgKi8KK0dMT0JBTF9FTlRSWShrdm1fdnBzX3N5bmNfcmVhZCkKKwltb3ZsIHIzMCA9IFBBTF9WUFNfU1lOQ19SRUFECisJOzsKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19lbnRyeQorRU5EKGt2bV92cHNfc3luY19yZWFkKQorCisvKgorICoJSW5wdXRzOgorICoJcjI0IDogcmV0dXJuIGFkZHJlc3MKKyAqICAJcjI1IDogdnBkCisgKglyMjkgOiBzY3JhdGNoCisgKgorICovCitHTE9CQUxfRU5UUlkoa3ZtX3Zwc19zeW5jX3dyaXRlKQorCW1vdmwgcjMwID0gUEFMX1ZQU19TWU5DX1dSSVRFCisJOzsKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19lbnRyeQorRU5EKGt2bV92cHNfc3luY193cml0ZSkKKworLyoKKyAqCUlucHV0czoKKyAqCXIyMyA6IHByCisgKglyMjQgOiBndWVzdCBiMAorICogIAlyMjUgOiB2cGQKKyAqCisgKi8KK0dMT0JBTF9FTlRSWShrdm1fdnBzX3Jlc3VtZV9ub3JtYWwpCisJbW92bCByMzAgPSBQQUxfVlBTX1JFU1VNRV9OT1JNQUwKKwk7OworCW1vdiBwcj1yMjMsLTIKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19lbnRyeQorRU5EKGt2bV92cHNfcmVzdW1lX25vcm1hbCkKKworLyoKKyAqCUlucHV0czoKKyAqCXIyMyA6IHByCisgKglyMjQgOiBndWVzdCBiMAorICogIAlyMjUgOiB2cGQKKyAqCXIxNyA6IGlzcgorICovCitHTE9CQUxfRU5UUlkoa3ZtX3Zwc19yZXN1bWVfaGFuZGxlcikKKwltb3ZsIHIzMCA9IFBBTF9WUFNfUkVTVU1FX0hBTkRMRVIKKwk7OworCWxkOCByMjc9W3IyNV0KKwlzaHIgcjE3PXIxNyxJQTY0X0lTUl9JUl9CSVQKKwk7OworCWRlcCByMjc9cjE3LHIyNyw2MywxICAgLy8gYml0IDYzIG9mIHIyNyBpbmRpY2F0ZSB3aGV0aGVyIGVuYWJsZSBDRkxFCisJbW92IHByPXIyMywtMgorCWJyLnNwdGsubWFueSBrdm1fdnBzX2VudHJ5CitFTkQoa3ZtX3Zwc19yZXN1bWVfaGFuZGxlcikKKwogLy9tb3YgcjE9YXIzCiBHTE9CQUxfRU5UUlkoa3ZtX2FzbV9tb3ZfZnJvbV9hcikKICNpZm5kZWYgQUNDRV9NT1ZfRlJPTV9BUgpAQCAtMTU3LDExICsyNTIsMTEgQEAKICNpZm5kZWYgQUNDRV9SU00KIAlici5tYW55IGt2bV92aXJ0dWFsaXphdGlvbl9mYXVsdF9iYWNrCiAjZW5kaWYKLQlhZGQgcjE2PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxCisJVk1YX1ZQU19TWU5DX1JFQUQKKwk7OwogCWV4dHIudSByMjY9cjI1LDYsMjEKIAlleHRyLnUgcjI3PXIyNSwzMSwyCiAJOzsKLQlsZDggcjE2PVtyMTZdCiAJZXh0ci51IHIyOD1yMjUsMzYsMQogCWRlcCByMjY9cjI3LHIyNiwyMSwyCiAJOzsKQEAgLTE5Niw3ICsyOTEsNyBAQAogCXRiaXQubnogcDYscDA9cjIzLDAKIAk7OwogCXRiaXQuei5vciBwNixwMD1yMjYsSUE2NF9QU1JfRFRfQklUCi0JKHA2KSBici5kcHRrIGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwkocDYpIGJyLmRwdGsga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIAk7OwogCWFkZCByMjY9Vk1NX1ZDUFVfTUVUQV9SUjBfT0ZGU0VULHIyMQogCWFkZCByMjc9Vk1NX1ZDUFVfTUVUQV9SUjBfT0ZGU0VUKzgscjIxCkBAIC0yMTIsNyArMzA3LDcgQEAKIAltb3YgcnJbcjI4XT1yMjcKIAk7OwogCXNybHouZAotCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdAorCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIEVORChrdm1fYXNtX3JzbSkKIAogCkBAIC0yMjEsMTEgKzMxNiwxMSBAQAogI2lmbmRlZiBBQ0NFX1NTTQogCWJyLm1hbnkga3ZtX3ZpcnR1YWxpemF0aW9uX2ZhdWx0X2JhY2sKICNlbmRpZgotCWFkZCByMTY9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjEKKwlWTVhfVlBTX1NZTkNfUkVBRAorCTs7CiAJZXh0ci51IHIyNj1yMjUsNiwyMQogCWV4dHIudSByMjc9cjI1LDMxLDIKIAk7OwotCWxkOCByMTY9W3IxNl0KIAlleHRyLnUgcjI4PXIyNSwzNiwxCiAJZGVwIHIyNj1yMjcscjI2LDIxLDIKIAk7OyAgLy9yMjYgaXMgaW1tMjQKQEAgLTI3MSw3ICszNjYsNyBAQAogCXRiaXQubnogcDYscDA9cjI5LElBNjRfUFNSX0lfQklUCiAJOzsKIAl0Yml0Lnoub3IgcDYscDA9cjE5LElBNjRfUFNSX0lfQklUCi0JKHA2KSBici5kcHRrIGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwkocDYpIGJyLmRwdGsga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIAk7OwogCWFkZCByMjk9VlBEX1ZUUFJfU1RBUlRfT0ZGU0VULHIxNgogCWFkZCByMzA9VlBEX1ZIUElfU1RBUlRfT0ZGU0VULHIxNgpAQCAtMjg2LDcgKzM4MSw3IEBACiAJOzsKIAljbXAuZ3QgcDYscDA9cjMwLHIxNwogCShwNikgYnIuZHBudC5mZXcga3ZtX2FzbV9kaXNwYXRjaF92ZXhpcnEKLQlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiBFTkQoa3ZtX2FzbV9zc20pCiAKIApAQCAtMjk1LDEwICszOTAsOSBAQAogI2lmbmRlZiBBQ0NFX01PVl9UT19QU1IKIAlici5tYW55IGt2bV92aXJ0dWFsaXphdGlvbl9mYXVsdF9iYWNrCiAjZW5kaWYKLQlhZGQgcjE2PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxCi0JZXh0ci51IHIyNj1yMjUsMTMsNyAvL3IyCisJVk1YX1ZQU19TWU5DX1JFQUQKIAk7OwotCWxkOCByMTY9W3IxNl0KKwlleHRyLnUgcjI2PXIyNSwxMyw3IC8vcjIKIAlhZGRsIHIyMD1AZ3ByZWwoYXNtX21vdl9mcm9tX3JlZyksZ3AKIAk7OwogCWFkZHMgcjMwPWt2bV9hc21fbW92X3RvX3Bzcl9iYWNrLWFzbV9tb3ZfZnJvbV9yZWcscjIwCkBAIC0zNzQsNyArNDY4LDcgQEAKIAk7OwogCXRiaXQubnoub3IgcDYscDA9cjE3LElBNjRfUFNSX0lfQklUCiAJdGJpdC56Lm9yIHA2LHAwPXIzMCxJQTY0X1BTUl9JX0JJVAotCShwNikgYnIuZHBudC5mZXcga3ZtX3Jlc3VtZV90b19ndWVzdAorCShwNikgYnIuZHBudC5mZXcga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIAk7OwogCWFkZCByMjk9VlBEX1ZUUFJfU1RBUlRfT0ZGU0VULHIxNgogCWFkZCByMzA9VlBEX1ZIUElfU1RBUlRfT0ZGU0VULHIxNgpAQCAtMzg5LDEzICs0ODMsMjkgQEAKIAk7OwogCWNtcC5ndCBwNixwMD1yMzAscjE3CiAJKHA2KSBici5kcG50LmZldyBrdm1fYXNtX2Rpc3BhdGNoX3ZleGlycQotCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdAorCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIEVORChrdm1fYXNtX21vdl90b19wc3IpCiAKIAogRU5UUlkoa3ZtX2FzbV9kaXNwYXRjaF92ZXhpcnEpCiAvL2luY3JlbWVudCBpaXAKKwltb3YgcjE3ID0gYjAKKwltb3YgcjE4ID0gcjMxCit7Lm1paQorCWFkZCByMjU9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjEKKwlub3AgMHgwCisJbW92IHIyNCA9IGlwCisJOzsKK30KK3subW1iCisJYWRkIHIyNCA9IDB4MjAsIHIyNAorCWxkOCByMjUgPSBbcjI1XQorCWJyLnNwdGsubWFueSBrdm1fdnBzX3N5bmNfd3JpdGUKK30KKwltb3YgYjAgPXIxNwogCW1vdiByMTY9Y3IuaXBzcgorCW1vdiByMzEgPSByMTgKKwltb3YgcjE5ID0gMzcKIAk7OwogCWV4dHIudSByMTc9cjE2LElBNjRfUFNSX1JJX0JJVCwyCiAJdGJpdC5ueiBwNixwNz1yMTYsSUE2NF9QU1JfUklfQklUKzEKQEAgLTQzNSwyNSArNTQ1LDMxIEBACiAJOzsKIGt2bV9hc21fdGhhc2hfYmFjazE6CiAJc2hyLnUgcjIzPXIxOSw2MQkJLy8gZ2V0IFJSIG51bWJlcgotCWFkZHMgcjI1PVZNTV9WQ1BVX1ZSUjBfT0ZGU0VULHIyMQkvLyBnZXQgdmNwdS0+YXJjaC52cnJbMF0ncyBhZGRyCisJYWRkcyByMjg9Vk1NX1ZDUFVfVlJSMF9PRkZTRVQscjIxCS8vIGdldCB2Y3B1LT5hcmNoLnZyclswXSdzIGFkZHIKIAlhZGRzIHIxNj1WTU1fVlBEX1ZQVEFfT0ZGU0VULHIxNgkvLyBnZXQgdnB0YQogCTs7Ci0Jc2hsYWRkIHIyNz1yMjMsMyxyMjUJLy8gZ2V0IHZjcHUtPmFyY2gudnJyW3IyM10ncyBhZGRyCisJc2hsYWRkIHIyNz1yMjMsMyxyMjgJLy8gZ2V0IHZjcHUtPmFyY2gudnJyW3IyM10ncyBhZGRyCiAJbGQ4IHIxNz1bcjE2XQkJLy8gZ2V0IFBUQQogCW1vdiByMjY9MQogCTs7Ci0JZXh0ci51IHIyOT1yMTcsMiw2CQkvLyBnZXQgcHRhLnNpemUKLQlsZDggcjI1PVtyMjddCQkvLyBnZXQgdmNwdS0+YXJjaC52cnJbcjIzXSdzIHZhbHVlCisJZXh0ci51IHIyOT1yMTcsMiw2CS8vIGdldCBwdGEuc2l6ZQorCWxkOCByMjg9W3IyN10JCS8vIGdldCB2Y3B1LT5hcmNoLnZycltyMjNdJ3MgdmFsdWUKIAk7OwotCWV4dHIudSByMjU9cjI1LDIsNgkJLy8gZ2V0IHJyLnBzCisJbW92IGIwPXIyNAorCS8vRmFsbGJhY2sgdG8gQyBpZiBwdGEudmYgaXMgc2V0CisJdGJpdC5ueiBwNixwMD1yMTcsIDgKKwk7OworCShwNikgbW92IHIyND1FVkVOVF9USEFTSAorCShwNikgYnIuY29uZC5kcG50Lm1hbnkga3ZtX3ZpcnR1YWxpemF0aW9uX2ZhdWx0X2JhY2sKKwlleHRyLnUgcjI4PXIyOCwyLDYJLy8gZ2V0IHJyLnBzCiAJc2hsIHIyMj1yMjYscjI5CQkvLyAxVUwgPDwgcHRhLnNpemUKIAk7OwotCXNoci51IHIyMz1yMTkscjI1CQkvLyB2YWRkciA+PiByci5wcworCXNoci51IHIyMz1yMTkscjI4CS8vIHZhZGRyID4+IHJyLnBzCiAJYWRkcyByMjY9MyxyMjkJCS8vIHB0YS5zaXplICsgMwogCXNobCByMjc9cjE3LDMJCS8vIHB0YSA8PCAzCiAJOzsKIAlzaGwgcjIzPXIyMywzCQkvLyAodmFkZHIgPj4gcnIucHMpIDw8IDMKLQlzaHIudSByMjc9cjI3LHIyNgkJLy8gKHB0YSA8PCAzKSA+PiAocHRhLnNpemUrMykKKwlzaHIudSByMjc9cjI3LHIyNgkvLyAocHRhIDw8IDMpID4+IChwdGEuc2l6ZSszKQogCW1vdmwgcjE2PTc8PDYxCiAJOzsKIAlhZGRzIHIyMj0tMSxyMjIJCS8vICgxVUwgPDwgcHRhLnNpemUpIC0gMQpAQCAtNzI0LDYgKzg0MCwyOSBAQAogICogcjMxOiBwcgogICogcjI0OiBiMAogICovCitFTlRSWShrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYykKKwlhZGRzIHIxOT1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMQorCW1vdiByMTYgPSByMzEKKwltb3YgcjE3ID0gcjI0CisJOzsKK3subWlpCisJbGQ4IHIyNSA9W3IxOV0KKwlub3AgMHgwCisJbW92IHIyNCA9IGlwCisJOzsKK30KK3subW1iCisJYWRkIHIyNCA9MHgyMCwgcjI0CisJbm9wIDB4MAorCWJyLnNwdGsubWFueSBrdm1fdnBzX3N5bmNfd3JpdGUKK30KKworCW1vdiByMzEgPSByMTYKKwltb3YgcjI0ID1yMTcKKwk7OworCWJyLnNwdGsubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0CitFTkQoa3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMpCisKIEVOVFJZKGt2bV9yZXN1bWVfdG9fZ3Vlc3QpCiAJYWRkcyByMTYgPSBWTU1fVkNQVV9TQVZFRF9HUF9PRkZTRVQscjIxCiAJOzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggNWEzM2Y3ZS4uMzQxNzc4MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTk2Miw5ICs5NjIsOSBAQAogdm9pZCB2bW1fdHJhbnNpdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWE2NF9jYWxsX3ZzYShQQUxfVlBTX1NBVkUsICh1bnNpZ25lZCBsb25nKXZjcHUtPmFyY2gudnBkLAotCQkJMCwgMCwgMCwgMCwgMCwgMCk7CisJCQkxLCAwLCAwLCAwLCAwLCAwKTsKIAl2bW1fdHJhbXBvbGluZSgmdmNwdS0+YXJjaC5ndWVzdCwgJnZjcHUtPmFyY2guaG9zdCk7CiAJaWE2NF9jYWxsX3ZzYShQQUxfVlBTX1JFU1RPUkUsICh1bnNpZ25lZCBsb25nKXZjcHUtPmFyY2gudnBkLAotCQkJCQkJMCwgMCwgMCwgMCwgMCwgMCk7CisJCQkJCQkxLCAwLCAwLCAwLCAwLCAwKTsKIAlrdm1fZG9fcmVzdW1lX29wKHZjcHUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmggYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaAppbmRleCBiMGZjZmI2Li4zNDFlM2ZlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaAorKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaApAQCAtMzEzLDIxICszMTMsMjEgQEAKIAl0cnAtPnJpZCA9IHJpZDsKIH0KIAotZXh0ZXJuIHU2NCBrdm1fbG9va3VwX21wYSh1NjQgZ3Bmbik7Ci1leHRlcm4gdTY0IGt2bV9ncGFfdG9fbXBhKHU2NCBncGEpOworZXh0ZXJuIHU2NCBrdm1fZ2V0X21wdF9lbnRyeSh1NjQgZ3Bmbik7CiAKLS8qIFJldHVybiBJL08gdHlwZSBpZiB0cnllICovCi0jZGVmaW5lIF9fZ3Bmbl9pc19pbyhncGZuKQkJCVwKLQkoewkJCQkJCVwKLQkgdTY0IHB0ZSwgcmV0ID0gMDsJCQlcCi0JIHB0ZSA9IGt2bV9sb29rdXBfbXBhKGdwZm4pOwkJXAotCSBpZiAoIShwdGUgJiBHUEZOX0lOVl9NQVNLKSkJCVwKLQkgcmV0ID0gcHRlICYgR1BGTl9JT19NQVNLOwlcCi0JIHJldDsJCQkJCVwKLQkgfSkKLQorLyogUmV0dXJuIEkvICovCitzdGF0aWMgaW5saW5lIHU2NCBfX2dwZm5faXNfaW8odTY0IGdwZm4pCit7CisJdTY0ICBwdGU7CisJcHRlID0ga3ZtX2dldF9tcHRfZW50cnkoZ3Bmbik7CisJaWYgKCEocHRlICYgR1BGTl9JTlZfTUFTSykpIHsKKwkJcHRlID0gcHRlICYgR1BGTl9JT19NQVNLOworCQlpZiAocHRlICE9IEdQRk5fUEhZU19NTUlPKQorCQkJcmV0dXJuIHB0ZTsKKwl9CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKLQogI2RlZmluZSBJQTY0X05PX0ZBVUxUCTAKICNkZWZpbmUgSUE2NF9GQVVMVAkxCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdm1tX2l2dC5TIGIvYXJjaC9pYTY0L2t2bS92bW1faXZ0LlMKaW5kZXggM2VlNWY0OC4uYzFkNzI1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92bW1faXZ0LlMKKysrIGIvYXJjaC9pYTY0L2t2bS92bW1faXZ0LlMKQEAgLTEyNjEsMTEgKzEyNjEsNiBAQAogICAgIGFkZHMgcjE5PVZNTV9WUERfVlBTUl9PRkZTRVQscjE4CiAgICAgOzsKICAgICBsZDggcjE5PVtyMTldICAgICAgICAvL3Zwc3IKLSAgICBhZGRzIHIyMD1WTU1fVkNQVV9WU0FfQkFTRV9PRkZTRVQscjIxCi0gICAgOzsKLSAgICBsZDggcjIwPVtyMjBdCi0gICAgOzsKLS8vdnNhX3N5bmNfd3JpdGVfc3RhcnQKICAgICBtb3YgcjI1PXIxOAogICAgIGFkZHMgcjE2PSBWTU1fVkNQVV9HUF9PRkZTRVQscjIxCiAgICAgOzsKQEAgLTEyNzQsMTAgKzEyNjksNyBAQAogICAgIDs7CiAgICAgYWRkICByMjQ9cjI0LHIxNgogICAgIDs7Ci0gICAgYWRkIHIxNj1QQUxfVlBTX1NZTkNfV1JJVEUscjIwCi0gICAgOzsKLSAgICBtb3YgYjA9cjE2Ci0gICAgYnIuY29uZC5zcHRrIGIwICAgICAgICAgLy8gY2FsbCB0aGUgc2VydmljZQorICAgIGJyLnNwdGsubWFueSAga3ZtX3Zwc19zeW5jX3dyaXRlICAgICAgIC8vIGNhbGwgdGhlIHNlcnZpY2UKICAgICA7OwogRU5EKGlhNjRfbGVhdmVfaHlwZXJ2aXNvcikKIC8vIGZhbGwgdGhyb3VnaApAQCAtMTI4OCwyOCArMTI4MCwxNSBAQAogICogIHIxNzpjci5pc3IKICAqICByMTg6dnBkCiAgKiAgcjE5OnZwc3IKLSAqICByMjA6X192c2FfYmFzZQogICogIHIyMjpiMAogICogIHIyMzpwcmVkaWNhdGUKICAqLwogICAgIG1vdiByMjQ9cjIyCiAgICAgbW92IHIyNT1yMTgKICAgICB0Yml0Lm56IHAxLHAyID0gcjE5LElBNjRfUFNSX0lDX0JJVCAgICAgICAgLy8gcDE9dnBzci5pYworICAgIChwMSkgYnIuY29uZC5zcHRrLmZldyBrdm1fdnBzX3Jlc3VtZV9ub3JtYWwKKyAgICAocDIpIGJyLmNvbmQuc3B0ay5tYW55IGt2bV92cHNfcmVzdW1lX2hhbmRsZXIKICAgICA7OwotICAgIChwMSkgYWRkIHIyOT1QQUxfVlBTX1JFU1VNRV9OT1JNQUwscjIwCi0gICAgKHAxKSBici5zcHRrLm1hbnkgaWE2NF92bW1fZW50cnlfb3V0Ci0gICAgOzsKLSAgICB0Yml0Lm56IHAxLHAyID0gcjE3LElBNjRfSVNSX0lSX0JJVAkJLy9wMT1jci5pc3IuaXIKLSAgICA7OwotICAgIChwMSkgYWRkIHIyOT1QQUxfVlBTX1JFU1VNRV9OT1JNQUwscjIwCi0gICAgKHAyKSBhZGQgcjI5PVBBTF9WUFNfUkVTVU1FX0hBTkRMRVIscjIwCi0gICAgKHAyKSBsZDggcjI2PVtyMjVdCi0gICAgOzsKLWlhNjRfdm1tX2VudHJ5X291dDoKLSAgICBtb3YgcHI9cjIzLC0yCi0gICAgbW92IGIwPXIyOQotICAgIDs7Ci0gICAgYnIuY29uZC5zcHRrIGIwICAgICAgICAgICAgIC8vIGNhbGwgcGFsIHNlcnZpY2UKIEVORChpYTY0X3ZtbV9lbnRyeSkKIAogCkBAIC0xMzc2LDYgKzEzNTUsOSBAQAogICAgIC8vc2V0IHVwIGlwc3IsIGlpcCwgdnBkLnZwc3IsIGRjcgogICAgIC8vIEZvciBJUFNSOiBpdC9kdC9ydD0xLCBpL2ljPTEsIHNpPTEsIHZtL2JuPTEKICAgICAvLyBGb3IgRENSOiBhbGwgYml0cyAwCisgICAgYnN3LjAKKyAgICA7OworICAgIG1vdiByMjEgPXIxMwogICAgIGFkZHMgcjE0PS1WTU1fUFRfUkVHU19TSVpFLCByMTIKICAgICA7OwogICAgIG1vdmwgcjY9MHg1MDEwMDg4MjYwMDAgICAgICAvLyBJUFNSIGR0L3J0L2l0OjE7aS9pYzoxLCBzaToxLCB2bS9ibjoxCkBAIC0xMzg3LDEyICsxMzY5LDYgQEAKICAgICA7OwogICAgIHNybHouaQogICAgIDs7Ci0gICAgYnN3LjAKLSAgICA7OwotICAgIG1vdiByMjEgPXIxMwotICAgIDs7Ci0gICAgYnN3LjEKLSAgICA7OwogICAgIG1vdiBhci5yc2MgPSAwCiAgICAgOzsKICAgICBmbHVzaHJzCkBAIC0xNDA2LDEyICsxMzgyLDkgQEAKICAgICBsZDggcjEgPSBbcjIwXQogICAgIDs7CiAgICAgbW92IGNyLmlpcD1yNAotICAgIDs7CiAgICAgYWRkcyByMTY9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMTMKLSAgICBhZGRzIHIyMD1WTU1fVkNQVV9WU0FfQkFTRV9PRkZTRVQscjEzCiAgICAgOzsKICAgICBsZDggcjE4PVtyMTZdCi0gICAgbGQ4IHIyMD1bcjIwXQogICAgIDs7CiAgICAgYWRkcyByMTk9Vk1NX1ZQRF9WUFNSX09GRlNFVCxyMTgKICAgICA7OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGxiLmMgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwppbmRleCBkZWY0NTc2Li5lMjJiOTMzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYworKysgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAKIHU2NCB0cmFuc2xhdGVfcGh5X3B0ZSh1NjQgKnB0ZSwgdTY0IGl0aXIsIHU2NCB2YSkKIHsKLQl1NjQgcHMsIHBzX21hc2ssIHBhZGRyLCBtYWRkcjsKKwl1NjQgcHMsIHBzX21hc2ssIHBhZGRyLCBtYWRkciwgaW9fbWFzazsKIAl1bmlvbiBwdGVfZmxhZ3MgcGh5X3B0ZTsKIAogCXBzID0gaXRpcl9wcyhpdGlyKTsKQEAgLTM5OCw4ICszOTgsOSBAQAogCXBoeV9wdGUudmFsID0gKnB0ZTsKIAlwYWRkciA9ICpwdGU7CiAJcGFkZHIgPSAoKHBhZGRyICYgX1BBR0VfUFBOX01BU0spICYgcHNfbWFzaykgfCAodmEgJiB+cHNfbWFzayk7Ci0JbWFkZHIgPSBrdm1fbG9va3VwX21wYShwYWRkciA+PiBQQUdFX1NISUZUKTsKLQlpZiAobWFkZHIgJiBHUEZOX0lPX01BU0spIHsKKwltYWRkciA9IGt2bV9nZXRfbXB0X2VudHJ5KHBhZGRyID4+IFBBR0VfU0hJRlQpOworCWlvX21hc2sgPSBtYWRkciAmIEdQRk5fSU9fTUFTSzsKKwlpZiAoaW9fbWFzayAmJiAoaW9fbWFzayAhPSBHUEZOX1BIWVNfTU1JTykpIHsKIAkJKnB0ZSB8PSBWVExCX1BURV9JTzsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQxOCw3ICs0MTksNyBAQAogCQkJCQkJdTY0IGlmYSwgaW50IHR5cGUpCiB7CiAJdTY0IHBzOwotCXU2NCBwaHlfcHRlOworCXU2NCBwaHlfcHRlLCBpb19tYXNrLCBpbmRleDsKIAl1bmlvbiBpYTY0X3JyIHZyciwgbXJyOwogCWludCByZXQgPSAwOwogCkBAIC00MjYsMTMgKzQyNywxNiBAQAogCXZyci52YWwgPSB2Y3B1X2dldF9ycih2LCBpZmEpOwogCW1yci52YWwgPSBpYTY0X2dldF9ycihpZmEpOwogCisJaW5kZXggPSAocHRlICYgX1BBR0VfUFBOX01BU0spID4+IFBBR0VfU0hJRlQ7CisJaW9fbWFzayA9IGt2bV9nZXRfbXB0X2VudHJ5KGluZGV4KSAmIEdQRk5fSU9fTUFTSzsKIAlwaHlfcHRlID0gdHJhbnNsYXRlX3BoeV9wdGUoJnB0ZSwgaXRpciwgaWZhKTsKIAogCS8qIEVuc3VyZSBXQiBhdHRyaWJ1dGUgaWYgcHRlIGlzIHJlbGF0ZWQgdG8gYSBub3JtYWwgbWVtIHBhZ2UsCiAJICogd2hpY2ggaXMgcmVxdWlyZWQgYnkgdmdhIGFjY2VsZXJhdGlvbiBzaW5jZSBxZW11IG1hcHMgc2hhcmVkCiAJICogdnJhbSBidWZmZXIgd2l0aCBXQi4KIAkgKi8KLQlpZiAoIShwdGUgJiBWVExCX1BURV9JTykgJiYgKChwdGUgJiBfUEFHRV9NQV9NQVNLKSAhPSBfUEFHRV9NQV9OQVQpKSB7CisJaWYgKCEocHRlICYgVlRMQl9QVEVfSU8pICYmICgocHRlICYgX1BBR0VfTUFfTUFTSykgIT0gX1BBR0VfTUFfTkFUKSAmJgorCQkJaW9fbWFzayAhPSBHUEZOX1BIWVNfTU1JTykgewogCQlwdGUgJj0gfl9QQUdFX01BX01BU0s7CiAJCXBoeV9wdGUgJj0gfl9QQUdFX01BX01BU0s7CiAJfQpAQCAtNTY2LDEyICs1NzAsMTkgQEAKIAl9CiB9CiAKLXU2NCBrdm1fbG9va3VwX21wYSh1NjQgZ3BmbikKK3U2NCBrdm1fZ2V0X21wdF9lbnRyeSh1NjQgZ3BmbikKIHsKIAl1NjQgKmJhc2UgPSAodTY0ICopIEtWTV9QMk1fQkFTRTsKIAlyZXR1cm4gKihiYXNlICsgZ3Bmbik7CiB9CiAKK3U2NCBrdm1fbG9va3VwX21wYSh1NjQgZ3BmbikKK3sKKwl1NjQgbWFkZHI7CisJbWFkZHIgPSBrdm1fZ2V0X21wdF9lbnRyeShncGZuKTsKKwlyZXR1cm4gbWFkZHImX1BBR0VfUFBOX01BU0s7Cit9CisKIHU2NCBrdm1fZ3BhX3RvX21wYSh1NjQgZ3BhKQogewogCXU2NCBwdGUgPSBrdm1fbG9va3VwX21wYShncGEgPj4gUEFHRV9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCBmNDgyYTkwLi4wNTRiY2Q5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKQEAgLTcwMCwyMyArNzAwLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMTIwICogSFo7Ci0JaW50IHJldDsKLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgdGltZW91dCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JLyogd2UgY2FuIGZyZWUgbWVtX21hcCBhdCB0aGlzIHBvaW50ICovCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggMDAyODljMS4uZGJhZWQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTQyLDYgKzQyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWJlNGZhYS4uNzEwM2Q5MSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExLDcgKzExLDcgQEAKICN1bmRlZiBERUJVR19QUk9DRVNTCiAjaWZkZWYgREVCVUdfUFJPQ0VTUwogI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgIHByaW50aygiJXM6JWQ6JXM6ICIgZm10LCBfX0ZJTEVfXywgX19MSU5FX18sIFwKLSAgX19GVU5DVElPTl9fLCAjI2FyZ3MpCisgIF9fZnVuY19fLCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCmluZGV4IGNiYzNjNGMuLjdkYWY4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKQEAgLTExMSw5ICsxMTEsOSBAQAogCQkJCWluaXRyZF9zdGFydCwgSU5JVFJEX1NJWkUpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCi0JCQkJIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCisJCQkJIigweCUwOGx4ID4gMHglMDhsbHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAogCQkJCUlOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFLAotCQkJCVBGTl9QSFlTKG1heF9sb3dfcGZuKSk7CisJCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAogCQkJaW5pdHJkX3N0YXJ0ID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCA2NzdjOTNhLi44MzZmYjY2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNjIsNiArNjIsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAiCiAKIGNvbmZpZyBFSVNBCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKaW5kZXggODA4YzkwMS4uYzUwYmVjOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCisrKyBiL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgkvKiBGb3Igc3RydWN0IHJ0Y190aW1lIGFuZCBpb2N0bHMsIGV0YyAqLwotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8YXNtL2J2bWU2MDAwaHcuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggMGE4OTk4My4uNzZiNjZmZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC03NSw2ICs3NSw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAogY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDI3ZjBlYzcuLmI4MDQ2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMDUsNiArMTA1LDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBjOWJjMDkuLjgyNTI5ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODQsMTIgKzg0LDE0IEBACiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkzCS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZwogCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGNkNWZiZjYuLjVmMTQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC01Miw2ICs1Miw3IEBACiAJc2VsZWN0IFNTQgogCXNlbGVjdCBTU0JfRFJJVkVSX01JUFMKIAlzZWxlY3QgU1NCX0RSSVZFUl9FWFRJRgorCXNlbGVjdCBTU0JfRU1CRURERUQKIAlzZWxlY3QgU1NCX1BDSUNPUkVfSE9TVE1PREUgaWYgUENJCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwpAQCAtMTg4NCw2ICsxODg1LDggQEAKIAkgIGFkZCBpbml0cmQgb3IgaW5pdHJhbWZzIGltYWdlIHRvIHRoZSBrZXJuZWwgaW1hZ2UuCiAJICBPdGhlcndpc2UsIHNheSBOLgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykiCiAKIGNvbmZpZyBIV19IQVNfRUlTQQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCmluZGV4IGY1YTUzYWMuLjliNzk4ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKQEAgLTEyLDY4ICsxMiw1MSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWJjbTQ3eHgvYmNtNDd4eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWJjbTQ3eHgvZ3Bpby5oPgogCi1pbnQgYmNtNDd4eF9ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQorI2lmIChCQ000N1hYX0NISVBDT19HUElPX0xJTkVTID4gQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKQorc3RhdGljIERFQ0xBUkVfQklUTUFQKGdwaW9faW5fdXNlLCBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKTsKKyNlbHNlCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZ3Bpb19pbl91c2UsIEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUyk7CisjZW5kaWYKKworaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICp0YWcpCiB7Ci0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYpCisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5jaGlwY28pICYmCisJICAgICgodW5zaWduZWQpZ3BpbyA+PSBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3NiX2V4dGlmX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguZXh0aWYpICYmCisJICAgICgodW5zaWduZWQpZ3BpbyA+PSBCQ000N1hYX0VYVElGX0dQSU9fTElORVMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KGdwaW8sIGdwaW9faW5fdXNlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOworCit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQoreworCWlmIChzc2JfY2hpcGNvX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguY2hpcGNvKSAmJgorCSAgICAoKHVuc2lnbmVkKWdwaW8gPj0gQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUykpCisJCXJldHVybjsKKworCWlmIChzc2JfZXh0aWZfYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5leHRpZikgJiYKKwkgICAgKCh1bnNpZ25lZClncGlvID49IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCisJCXJldHVybjsKKworCWNsZWFyX2JpdChncGlvLCBncGlvX2luX3VzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK2ludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCWlmIChzc2JfY2hpcGNvX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguY2hpcGNvKSkKIAkJcmV0dXJuIHNzYl9taXBzX2lycShzc2JfYmNtNDd4eC5jaGlwY28uZGV2KSArIDI7Ci0JZWxzZSBpZiAoc3NiX2JjbTQ3eHguZXh0aWYuZGV2KQorCWVsc2UgaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJnNzYl9iY200N3h4LmV4dGlmKSkKIAkJcmV0dXJuIHNzYl9taXBzX2lycShzc2JfYmNtNDd4eC5leHRpZi5kZXYpICsgMjsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX3RvX2lycSk7Ci0KLWludCBiY200N3h4X2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYpCi0JCXJldHVybiBzc2JfY2hpcGNvX2dwaW9faW4oJnNzYl9iY200N3h4LmNoaXBjbywgMSA8PCBncGlvKTsKLQllbHNlIGlmIChzc2JfYmNtNDd4eC5leHRpZi5kZXYpCi0JCXJldHVybiBzc2JfZXh0aWZfZ3Bpb19pbigmc3NiX2JjbTQ3eHguZXh0aWYsIDEgPDwgZ3Bpbyk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUpOwotCi12b2lkIGJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChzc2JfYmNtNDd4eC5jaGlwY28uZGV2KQotCQlzc2JfY2hpcGNvX2dwaW9fb3V0KCZzc2JfYmNtNDd4eC5jaGlwY28sCi0JCQkJICAgIDEgPDwgZ3BpbywKLQkJCQkgICAgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKLQllbHNlIGlmIChzc2JfYmNtNDd4eC5leHRpZi5kZXYpCi0JCXNzYl9leHRpZl9ncGlvX291dCgmc3NiX2JjbTQ3eHguZXh0aWYsCi0JCQkJICAgMSA8PCBncGlvLAotCQkJCSAgIHZhbHVlID8gMSA8PCBncGlvIDogMCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChiY200N3h4X2dwaW9fc2V0X3ZhbHVlKTsKLQotaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoc3NiX2JjbTQ3eHguY2hpcGNvLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMpKQotCQlzc2JfY2hpcGNvX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LmNoaXBjbywKLQkJCQkgICAgICAxIDw8IGdwaW8sIDApOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCi0JCXNzYl9leHRpZl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5leHRpZiwKLQkJCQkgICAgIDEgPDwgZ3BpbywgMCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotCi0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYgJiYgKGdwaW8gPCBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKSkKLQkJc3NiX2NoaXBjb19ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5jaGlwY28sCi0JCQkJICAgICAgMSA8PCBncGlvLCAxIDw8IGdwaW8pOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCi0JCXNzYl9leHRpZl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5leHRpZiwKLQkJCQkgICAgIDEgPDwgZ3BpbywgMSA8PCBncGlvKTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQpOworRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb190b19pcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCA4ZDM2ZjE4Li4yZjU4MGZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTQxLDcgKzQyLDcgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIHJlYm9vdGluZyB0aGUgc3lzdGVtLi4uXG4iKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCS8qIFNldCB0aGUgd2F0Y2hkb2cgdGltZXIgdG8gcmVzZXQgaW1tZWRpYXRlbHkgKi8KLQlzc2JfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldCgmc3NiX2JjbTQ3eHguY2hpcGNvLCAxKTsKKwlzc2Jfd2F0Y2hkb2dfdGltZXJfc2V0KCZzc2JfYmNtNDd4eCwgMSk7CiAJd2hpbGUgKDEpCiAJCWNwdV9yZWxheCgpOwogfQpAQCAtNTAsNyArNTEsNyBAQAogewogCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgd2F0Y2hkb2cgYW5kIHNwaW4gZm9yZXZlciAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3NiX2NoaXBjb193YXRjaGRvZ190aW1lcl9zZXQoJnNzYl9iY200N3h4LmNoaXBjbywgMCk7CisJc3NiX3dhdGNoZG9nX3RpbWVyX3NldCgmc3NiX2JjbTQ3eHgsIDApOwogCXdoaWxlICgxKQogCQljcHVfcmVsYXgoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwppbmRleCBkMWQ5MGM5ZS4uZWYwMGU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9iY200N3h4Lmg+CiAKIC8qIEdQSU8gZGVmaW5pdGlvbnMgZm9yIHRoZSBXR1Q2MzRVICovCkBAIC05OSw2ICsxMDIsMzAgQEAKIAkmd2d0NjM0dV9ncGlvX2xlZHMsCiB9OwogCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaWdub3JlZCkKK3sKKwlpbnQgc3RhdGU7CisKKwkvKiBJbnRlcnJ1cHRzIGFyZSBzaGFyZWQsIGNoZWNrIGlmIHRoZSBjdXJyZW50IG9uZSBpcworCSAgIGEgR1BJTyBpbnRlcnJ1cHQuICovCisJaWYgKCFzc2JfY2hpcGNvX2lycV9zdGF0dXMoJnNzYl9iY200N3h4LmNoaXBjbywKKwkJCQkgICBTU0JfQ0hJUENPX0lSUV9HUElPKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3RhdGUgPSBncGlvX2dldF92YWx1ZShXR1Q2MzRVX0dQSU9fUkVTRVQpOworCisJLyogSW50ZXJydXB0IGFyZSBsZXZlbCB0cmlnZ2VyZWQsIHJldmVydCB0aGUgaW50ZXJydXB0IHBvbGFyaXR5CisJICAgdG8gY2xlYXIgdGhlIGludGVycnVwdC4gKi8KKwlncGlvX3BvbGFyaXR5KFdHVDYzNFVfR1BJT19SRVNFVCwgc3RhdGUpOworCisJaWYgKCFzdGF0ZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJSZXNldCBidXR0b24gcHJlc3NlZCIpOworCQljdHJsX2FsdF9kZWwoKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHdndDYzNHVfaW5pdCh2b2lkKQogewogCS8qIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGRldGVjdCB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIGEgV0dUNjM0VQpAQCAtMTEyLDYgKzEzOSwxOSBAQAogCSAgICAoKGV0MG1hY1sxXSA9PSAweDA5ICYmIGV0MG1hY1syXSA9PSAweDViKSB8fAogCSAgICAgKGV0MG1hY1sxXSA9PSAweDBmICYmIGV0MG1hY1syXSA9PSAweGI1KSkpIHsKIAkJc3RydWN0IHNzYl9taXBzY29yZSAqbWNvcmUgPSAmc3NiX2JjbTQ3eHgubWlwc2NvcmU7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiV0dUNjM0VSBtYWNoaW5lIGRldGVjdGVkLlxuIik7CisKKwkJaWYgKCFyZXF1ZXN0X2lycShncGlvX3RvX2lycShXR1Q2MzRVX0dQSU9fUkVTRVQpLAorCQkJCSBncGlvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJICJXR1Q2MzRVIEdQSU8iLCAmc3NiX2JjbTQ3eHguY2hpcGNvKSkgeworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoV0dUNjM0VV9HUElPX1JFU0VUKTsKKwkJCWdwaW9faW50bWFzayhXR1Q2MzRVX0dQSU9fUkVTRVQsIDEpOworCQkJc3NiX2NoaXBjb19pcnFfbWFzaygmc3NiX2JjbTQ3eHguY2hpcGNvLAorCQkJCQkgICAgU1NCX0NISVBDT19JUlFfR1BJTywKKwkJCQkJICAgIFNTQl9DSElQQ09fSVJRX0dQSU8pOworCQl9CisKIAkJd2d0NjM0dV9mbGFzaF9kYXRhLndpZHRoID0gbWNvcmUtPmZsYXNoX2J1c3dpZHRoOwogCQl3Z3Q2MzR1X2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gbWNvcmUtPmZsYXNoX3dpbmRvdzsKIAkJd2d0NjM0dV9mbGFzaF9yZXNvdXJjZS5lbmQgPSBtY29yZS0+Zmxhc2hfd2luZG93CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3RpbWUuYyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCmluZGV4IDM5NjVmZGEuLjEzNTljMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvdGltZS5jCkBAIC00NSwxMiArNDUsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQkJbWluID0gQkNEMkJJTihtaW4pOwotCQlob3VyID0gQkNEMkJJTihob3VyKTsKLQkJZGF5ID0gQkNEMkJJTihkYXkpOwotCQltb24gPSBCQ0QyQklOKG1vbik7Ci0JCXllYXIgPSBCQ0QyQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAl5ZWFyICs9IHJlYWxfeWVhciAtIDcyICsgMjAwMDsKQEAgLTgzLDcgKzgzLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCWNtb3NfbWludXRlcyA9IEJDRDJCSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtOTksOCArOTksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCXJlYWxfc2Vjb25kcyA9IEJJTjJCQ0QocmVhbF9zZWNvbmRzKTsKLQkJCXJlYWxfbWludXRlcyA9IEJJTjJCQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCmluZGV4IGQ5NTYwNDcuLjkxY2JkOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jCmluZGV4IDVlOTJiM2EuLmUxNGEyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKaW5kZXggZDcwNjI3ZC4uZmI5Y2RhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jZXZ0LXI0ay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLW1pcHMvY2V2dC1yNGsuaApyZW5hbWUgdG8gYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmNjlmN2FjLi5hOGVhYzE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yNDcsMTAgKzI0Nyw4IEBACiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoaWJjczIpCQkJCQkJCVwKLQkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCQkJXAogCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJCQkJXAogCQkJCQkJCQkJXAogCWN1cnJlbnQtPnRocmVhZC5hYmkgPSAmbWlwc19hYmk7CQkJCVwKQEAgLTI5Niw3ICsyOTQsNyBAQAogI2RlZmluZSBfX1NFVF9QRVJTT05BTElUWTMyKGV4KQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfUkVHUyk7CQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfQUREUik7CQkJCVwKQEAgLTMwNiw5ICszMDQsNyBAQAogCWVsc2UJCQkJCQkJCVwKIAkJY3VycmVudC0+dGhyZWFkLmFiaSA9ICZtaXBzX2FiaTsJCQlcCiAJCQkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJCQlcCi0JCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7CQkJCVwKLQllbHNlIGlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgzMikJCQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQkJCVwKIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKaW5kZXggY2ZjOGY0ZC4uZDhmZjRjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKQEAgLTksNDcgKzksNDYgQEAKICNpZm5kZWYgX19CQ000N1hYX0dQSU9fSAogI2RlZmluZSBfX0JDTTQ3WFhfR1BJT19ICiAKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2VtYmVkZGVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9iY200N3h4Lmg+CisKICNkZWZpbmUgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTCTUKICNkZWZpbmUgQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUwkxNgogCi1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBiY200N3h4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLSAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBiY200N3h4X2dwaW9fdG9faXJxKGdwaW8pOwotfQorZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOworZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworZXh0ZXJuIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2dldF92YWx1ZShncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9faW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCWJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworCXNzYl9ncGlvX291dCgmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXJldHVybiBiY200N3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7CisJcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworfQorCitzdGF0aWMgaW50IGdwaW9faW50bWFzayh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIHNzYl9ncGlvX2ludG1hc2soJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKK30KKworc3RhdGljIGludCBncGlvX3BvbGFyaXR5KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gc3NiX2dwaW9fcG9sYXJpdHkoJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJIHZhbHVlID8gMSA8PCBncGlvIDogMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvd2FyLmgKaW5kZXggNGEyYjc5OC4uODdjZDQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L3dhci5oCkBAIC01LDggKzUsOCBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNyBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKi8KLSNpZm5kZWYgX19BU01fTUlQU19NQUNIX0JDTTk0N1hYX1dBUl9ICi0jZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSAorI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAorI2RlZmluZSBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAogCiAjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCiAjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCkBAIC0yMiw0ICsyMiw0IEBACiAjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKICNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKIAotI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSCAqLworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ000N1hYX1dBUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDIyL2RzMTI4Ni5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMi9kczEyODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5ZjFlYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDIyL2RzMTI4Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMSwgMDMgYnkgUmFsZiBCYWVjaGxlCi0gKgotICogUlRDIHJvdXRpbmVzIGZvciBQQyBzdHlsZSBhdHRhY2hlZCBEYWxsYXMgY2hpcC4KLSAqLwotI2lmbmRlZiBfX0FTTV9NQUNIX0lQMjJfRFMxMjg2X0gKLSNkZWZpbmUgX19BU01fTUFDSF9JUDIyX0RTMTI4Nl9ICi0KLSNpbmNsdWRlIDxhc20vc2dpL2hwYzMuaD4KLQotI2RlZmluZSBydGNfcmVhZChyZWcpCQkoaHBjM2MwLT5ydGNyZWdzWyhyZWcpXSAmIDB4ZmYpCi0jZGVmaW5lIHJ0Y193cml0ZShkYXRhLCByZWcpCWRvIHsgaHBjM2MwLT5ydGNyZWdzWyhyZWcpXSA9IChkYXRhKTsgfSB3aGlsZSgwKQotCi0jZW5kaWYgLyogX19BU01fTUFDSF9JUDIyX0RTMTI4Nl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI4L2RzMTI4Ni5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOC9kczEyODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcxYmI5YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI4L2RzMTI4Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX01BQ0hfSVAyOF9EUzEyODZfSAotI2RlZmluZSBfX0FTTV9NQUNIX0lQMjhfRFMxMjg2X0gKLSNpbmNsdWRlIDxhc20vbWFjaC1pcDIyL2RzMTI4Ni5oPgotI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAyOF9EUzEyODZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKaW5kZXggY2RjMzc5YS4uMTk5YjQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCkBAIC00NCw3ICs0NCw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTYwLDggKzYwLDggQEAKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7CiAJCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCQlCSU5fVE9fQkNEKHJlYWxfbWludXRlcyk7CisJCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCX0KIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKQEAgLTEwMywxMiArMTAzLDEyIEBACiAJfSB3aGlsZSAoc2VjICE9IENNT1NfUkVBRChSVENfU0VDT05EUykpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAJeWVhciA9IG1jMTQ2ODE4X2RlY29kZV95ZWFyKHllYXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA1ZDk4YTNjLi4xYTFmMzIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCSIJb3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgogCQkiCXhvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCiAJCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6bAklW3RpY2tldF0sIDJmCQkJCVxuIgorCQkiCWJlcXpsCSVbdGlja2V0XSwgMWIJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCAyZmVmYjE0Li5hYTJjNTVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtNjMsNDEgKzYzLDYgQEAKICNkZWZpbmUgbWVyZ2VfNjQocjEsIHIyKSAoKCgocjIpICYgMHhmZmZmZmZmZlVMKSA8PCAzMikgKyAoKHIxKSAmIDB4ZmZmZmZmZmZVTCkpCiAjZW5kaWYKIAotLyoKLSAqIFJldmFsaWRhdGUgdGhlIGlub2RlLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgTkZTIGF0dHJpYnV0ZSBjYWNoaW5nLgotICovCi0KLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnN0YXRidWYpCi17Ci0Jc3RydWN0IGNvbXBhdF9zdGF0IHRtcDsKLQotCWlmICghbmV3X3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8ICFuZXdfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7Ci0JdG1wLnN0X2RldiA9IG5ld19lbmNvZGVfZGV2KHN0YXQtPmRldik7Ci0JdG1wLnN0X2lubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKHRtcC5zdF9pbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgdG1wLnN0X2lubyAhPSBzdGF0LT5pbm8pCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCXRtcC5zdF9tb2RlID0gc3RhdC0+bW9kZTsKLQl0bXAuc3RfbmxpbmsgPSBzdGF0LT5ubGluazsKLQlTRVRfVUlEKHRtcC5zdF91aWQsIHN0YXQtPnVpZCk7Ci0JU0VUX0dJRCh0bXAuc3RfZ2lkLCBzdGF0LT5naWQpOwotCXRtcC5zdF9yZGV2ID0gbmV3X2VuY29kZV9kZXYoc3RhdC0+cmRldik7Ci0JdG1wLnN0X3NpemUgPSBzdGF0LT5zaXplOwotCXRtcC5zdF9hdGltZSA9IHN0YXQtPmF0aW1lLnR2X3NlYzsKLQl0bXAuc3RfbXRpbWUgPSBzdGF0LT5tdGltZS50dl9zZWM7Ci0JdG1wLnN0X2N0aW1lID0gc3RhdC0+Y3RpbWUudHZfc2VjOwotI2lmZGVmIFNUQVRfSEFWRV9OU0VDCi0JdG1wLnN0X2F0aW1lX25zZWMgPSBzdGF0LT5hdGltZS50dl9uc2VjOwotCXRtcC5zdF9tdGltZV9uc2VjID0gc3RhdC0+bXRpbWUudHZfbnNlYzsKLQl0bXAuc3RfY3RpbWVfbnNlYyA9IHN0YXQtPmN0aW1lLnR2X25zZWM7Ci0jZW5kaWYKLQl0bXAuc3RfYmxvY2tzID0gc3RhdC0+YmxvY2tzOwotCXRtcC5zdF9ibGtzaXplID0gc3RhdC0+Ymxrc2l6ZTsKLQlyZXR1cm4gY29weV90b191c2VyKHN0YXRidWYsICZ0bXAsIHNpemVvZih0bXApKSA/IC1FRkFVTFQgOiAwOwotfQotCiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcKIHN5czMyX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCkBAIC0xNjgsNzIgKzEzMyw2IEBACiAJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsIG1lcmdlXzY0KGEyLCBhMykpOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcKLWdldF90djMyKHN0cnVjdCB0aW1ldmFsICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkgfHwKLQkJKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSB8Ci0JCSBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcKLXB1dF90djMyKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sIHN0cnVjdCB0aW1ldmFsICppKQotewotCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG8sIHNpemVvZigqbykpIHx8Ci0JCShfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCWlmICh0dikgewotCQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3RzMzIoc3RydWN0IHRpbWVzcGVjICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWxvbmcgdXNlYzsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpLCBzaXplb2YoKmkpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGludAotc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgaW50IHN5czMyX2xsc2Vlayh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBvZmZzZXRfaGlnaCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0X2xvdywgbG9mZl90IF9fdXNlciAqIHJlc3VsdCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgb3JpZ2luKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwppbmRleCA3NWJiMTMwLi4yNjc2MGNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwpAQCAtMzksNyArMzksNyBAQAogCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0XHQ6ICVsZFxuIiwgbik7CiAJc3ByaW50ZihmbXQsICJjcHUgbW9kZWxcdFx0OiAlJXMgViUlZC4lJWQlc1xuIiwKIAkgICAgICAgIGNwdV9kYXRhW25dLm9wdGlvbnMgJiBNSVBTX0NQVV9GUFUgPyAiICBGUFUgViVkLiVkIiA6ICIiKTsKLQlzZXFfcHJpbnRmKG0sIGZtdCwgX19jcHVfbmFtZVtzbXBfcHJvY2Vzc29yX2lkKCldLAorCXNlcV9wcmludGYobSwgZm10LCBfX2NwdV9uYW1lW25dLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uID4+IDQpICYgMHgwZiwgdmVyc2lvbiAmIDB4MGYsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwX3ZlcnMgPj4gNCkgJiAweDBmLCBmcF92ZXJzICYgMHgwZik7CiAJc2VxX3ByaW50ZihtLCAiQm9nb01JUFNcdFx0OiAlbHUuJTAybHVcbiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3J0bHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCmluZGV4IGRmZDg2OGIuLjRjZTkzYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCkBAIC01MjIsOCArNTIyLDggQEAKIAkJYXRvbWljX3NldCgmY2hhbm5lbF93cXNbaV0uaW5fb3BlbiwgMCk7CiAJCW11dGV4X2luaXQoJmNoYW5uZWxfd3FzW2ldLm11dGV4KTsKIAotCQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobXRfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwKLQkJCQkJICAgIE5VTEwsICIlcyVkIiwgbW9kdWxlX25hbWUsIGkpOworCQlkZXYgPSBkZXZpY2VfY3JlYXRlKG10X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCisJCQkJICAgICIlcyVkIiwgbW9kdWxlX25hbWUsIGkpOwogCQlpZiAoSVNfRVJSKGRldikpIHsKIAkJCWVyciA9IFBUUl9FUlIoZGV2KTsKIAkJCWdvdG8gb3V0X2NocmRldjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCAzMjRjNTQ5Li5lMjY2YjNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlQVFIJc3lzX2ZjaG93bgogCVBUUglzeXNfbGNob3duCiAJUFRSCXN5c191bWFzawotCVBUUglzeXMzMl9nZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKIAlQVFIJY29tcGF0X3N5c19nZXRybGltaXQJCS8qIDYwOTUgKi8KIAlQVFIJY29tcGF0X3N5c19nZXRydXNhZ2UKIAlQVFIJY29tcGF0X3N5c19zeXNpbmZvCkBAIC0yNzksNyArMjc5LDcgQEAKIAlQVFIJc3lzX2Nocm9vdAogCVBUUglzeXNfc3luYwogCVBUUglzeXNfYWNjdAotCVBUUglzeXMzMl9zZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkKIAlQVFIJY29tcGF0X3N5c19tb3VudAkJLyogNjE2MCAqLwogCVBUUglzeXNfdW1vdW50CiAJUFRSCXN5c19zd2Fwb24KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCA4NWZlZGFjLi42YzdlZjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC0yODMsOCArMjgzLDggQEAKIAlQVFIJY29tcGF0X3N5c19zZXRybGltaXQJCS8qIDQwNzUgKi8KIAlQVFIJY29tcGF0X3N5c19nZXRybGltaXQKIAlQVFIJY29tcGF0X3N5c19nZXRydXNhZ2UKLQlQVFIJc3lzMzJfZ2V0dGltZW9mZGF5Ci0JUFRSCXN5czMyX3NldHRpbWVvZmRheQorCVBUUgljb21wYXRfc3lzX2dldHRpbWVvZmRheQorCVBUUgljb21wYXRfc3lzX3NldHRpbWVvZmRheQogCVBUUglzeXNfZ2V0Z3JvdXBzCQkJLyogNDA4MCAqLwogCVBUUglzeXNfc2V0Z3JvdXBzCiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogb2xkX3NlbGVjdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGFmYjExOWYuLjU4NzM4YzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCS4gPSBBTElHTihfUEFHRV9TSVpFKTsKIAlfX25vc2F2ZV9lbmQgPSAuOwogCi0JLiA9IEFMSUdOKDMyKTsKKwkuID0gQUxJR04oMSA8PCBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVCk7CiAJLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7CiAJCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jIGIvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCmluZGV4IDg2Njg4MWUuLjhmODg4ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYworKysgYi9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKQEAgLTM4LDE0ICszOCwxMyBAQAogI2VuZGlmCiAKIC8qIFN0cmF0ZWd5IGZ1bmN0aW9uIHRvIHdyaXRlIEVFUFJPTSBhZnRlciBjaGFuZ2luZyBzdHJpbmcgZW50cnkgKi8KLWludCBzeXNjdGxfbGFzYXRzdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfbGFzYXRzdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCiAJCXZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcjsKIAotCXIgPSBzeXNjdGxfc3RyaW5nKHRhYmxlLCBuYW1lLAotCQkJICBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyID0gc3lzY3RsX3N0cmluZyh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIApAQCAtMTEzLDEzICsxMTIsMTMgQEAKICNlbmRpZgogCiAvKiBTeXNjdGwgZm9yIHNldHRpbmcgdGhlIElQIGFkZHJlc3NlcyAqLwotaW50IHN5c2N0bF9sYXNhdF9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfbGFzYXRfaW50dmVjKGN0bF90YWJsZSAqdGFibGUsCiAJCSAgICB2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKIAkJICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcjsKIAotCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIApAQCAtMTMxLDcgKzEzMCw3IEBACiAKICNpZmRlZiBDT05GSUdfRFMxNjAzCiAvKiBTYW1lIGZvciBSVEMgKi8KLWludCBzeXNjdGxfbGFzYXRfcnRjKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2xhc2F0X3J0YyhjdGxfdGFibGUgKnRhYmxlLAogCQkgICAgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCiAJCSAgICB2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xNDAsNyArMTM5LDcgQEAKIAlydGN0bXAgPSByZWFkX3BlcnNpc3RlbnRfY2xvY2soKTsKIAlpZiAocnRjdG1wIDwgMCkKIAkJcnRjdG1wID0gMDsKLQlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAJaWYgKG5ld3ZhbCAmJiBuZXdsZW4pCkBAIC0yMTEsMTMgKzIxMCwxMyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgc3lzY3RsX2xhc2F0X3ByaWQoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgc3lzY3RsX2xhc2F0X3ByaWQoY3RsX3RhYmxlICp0YWJsZSwKIAkJCQkgICAgIHZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAogCQkJCSAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCByOwogCi0JciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAociA8IDApCiAJCXJldHVybiByOwogCWlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZW1tYTJyaC5jCmluZGV4IGEyNzA1ODkuLjg0NmVhZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtZW1tYTJyaC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZW1tYTJyaC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtcG54ODU1MC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG54ODU1MC5jCmluZGV4IDBlMTYwZDlmMC4uMWU2MjEzZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG54ODU1MC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYwpAQCAtMjksOCArMjksNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtcG54ODU1MC9wY2kuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1wbng4NTUwL2dsYi5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zdGF0dXModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYwppbmRleCBkOTk1OTFhLi43NzJlMjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKaW5kZXggYzdmZTZlYy4uYTM3N2U5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS5jCkBAIC0zNCw2ICszNCw4IEBACiB1bnNpZ25lZCBsb25nIFBDSUJJT1NfTUlOX0lPCT0gMHgwMDAwOwogdW5zaWduZWQgbG9uZyBQQ0lCSU9TX01JTl9NRU0JPSAwOwogCitzdGF0aWMgaW50IHBjaV9pbml0aWFsaXplZDsKKwogLyoKICAqIFdlIG5lZWQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIGBtaXJyb3JlZCcgVkdBIHBvcnRzCiAgKiBhbmQgb3RoZXIgc3RyYW5nZSBJU0EgaGFyZHdhcmUsIHNvIHdlIGFsd2F5cyB3YW50IHRoZQpAQCAtNzQsNiArNzYsNDIgQEAKIAlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5idXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworCXN0YXRpYyBpbnQgbmV4dF9idXNubzsKKwlzdGF0aWMgaW50IG5lZWRfZG9tYWluX2luZm87CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCWlmICghaG9zZS0+aW9tbXUpCisJCVBDSV9ETUFfQlVTX0lTX1BIWVMgPSAxOworCisJaWYgKGhvc2UtPmdldF9idXNubyAmJiBwY2lfcHJvYmVfb25seSkKKwkJbmV4dF9idXNubyA9ICgqaG9zZS0+Z2V0X2J1c25vKSgpOworCisJYnVzID0gcGNpX3NjYW5fYnVzKG5leHRfYnVzbm8sIGhvc2UtPnBjaV9vcHMsIGhvc2UpOworCWhvc2UtPmJ1cyA9IGJ1czsKKworCW5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvIHx8IGhvc2UtPmluZGV4OworCWhvc2UtPm5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvOworCWlmIChidXMpIHsKKwkJbmV4dF9idXNubyA9IGJ1cy0+c3Vib3JkaW5hdGUgKyAxOworCQkvKiBEb24ndCBhbGxvdyA4LWJpdCBidXMgbnVtYmVyIG92ZXJmbG93IGluc2lkZSB0aGUgaG9zZSAtCisJCSAgIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgYnJpZGdlcy4gKi8KKwkJaWYgKG5leHRfYnVzbm8gPiAyMjQpIHsKKwkJCW5leHRfYnVzbm8gPSAwOworCQkJbmVlZF9kb21haW5faW5mbyA9IDE7CisJCX0KKworCQlpZiAoIXBjaV9wcm9iZV9vbmx5KSB7CisJCQlwY2lfYnVzX3NpemVfYnJpZGdlcyhidXMpOworCQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CisJCQlwY2lfZW5hYmxlX2JyaWRnZXMoYnVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIERFRklORV9NVVRFWChwY2lfc2Nhbl9tdXRleCk7CisKIHZvaWQgX19kZXZpbml0IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIGhvc2UtPm1lbV9yZXNvdXJjZSkgPCAwKQpAQCAtOTMsNiArMTMxLDE3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJyZWdpc3RlcmluZyBQQ0kgY29udHJvbGxlciB3aXRoIGlvX21hcF9iYXNlIHVuc2V0XG4iKTsKIAl9CisKKwkvKgorCSAqIFNjYW4gdGhlIGJ1cyBpZiBpdCBpcyByZWdpc3RlciBhZnRlciB0aGUgUENJIHN1YnN5c3RlbQorCSAqIGluaXRpYWxpemF0aW9uLgorCSAqLworCWlmIChwY2lfaW5pdGlhbGl6ZWQpIHsKKwkJbXV0ZXhfbG9jaygmcGNpX3NjYW5fbXV0ZXgpOworCQlwY2liaW9zX3NjYW5idXMoaG9zZSk7CisJCW11dGV4X3VubG9jaygmcGNpX3NjYW5fbXV0ZXgpOworCX0KKwogCXJldHVybjsKIAogb3V0OgpAQCAtMTI1LDM4ICsxNzQsMTUgQEAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwotCWludCBuZXh0X2J1c25vOwotCWludCBuZWVkX2RvbWFpbl9pbmZvID0gMDsKIAogCS8qIFNjYW4gYWxsIG9mIHRoZSByZWNvcmRlZCBQQ0kgY29udHJvbGxlcnMuICAqLwotCWZvciAobmV4dF9idXNubyA9IDAsIGhvc2UgPSBob3NlX2hlYWQ7IGhvc2U7IGhvc2UgPSBob3NlLT5uZXh0KSB7CisJZm9yIChob3NlID0gaG9zZV9oZWFkOyBob3NlOyBob3NlID0gaG9zZS0+bmV4dCkKKwkJcGNpYmlvc19zY2FuYnVzKGhvc2UpOwogCi0JCWlmICghaG9zZS0+aW9tbXUpCi0JCQlQQ0lfRE1BX0JVU19JU19QSFlTID0gMTsKLQotCQlpZiAoaG9zZS0+Z2V0X2J1c25vICYmIHBjaV9wcm9iZV9vbmx5KQotCQkJbmV4dF9idXNubyA9ICgqaG9zZS0+Z2V0X2J1c25vKSgpOwotCi0JCWJ1cyA9IHBjaV9zY2FuX2J1cyhuZXh0X2J1c25vLCBob3NlLT5wY2lfb3BzLCBob3NlKTsKLQkJaG9zZS0+YnVzID0gYnVzOwotCQluZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbyB8fCBob3NlLT5pbmRleDsKLQkJaG9zZS0+bmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm87Ci0JCWlmIChidXMpIHsKLQkJCW5leHRfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlICsgMTsKLQkJCS8qIERvbid0IGFsbG93IDgtYml0IGJ1cyBudW1iZXIgb3ZlcmZsb3cgaW5zaWRlIHRoZSBob3NlIC0KLQkJCSAgIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgYnJpZGdlcy4gKi8KLQkJCWlmIChuZXh0X2J1c25vID4gMjI0KSB7Ci0JCQkJbmV4dF9idXNubyA9IDA7Ci0JCQkJbmVlZF9kb21haW5faW5mbyA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIXBjaV9wcm9iZV9vbmx5KQotCQlwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7CiAJcGNpX2ZpeHVwX2lycXMoY29tbW9uX3N3aXp6bGUsIHBjaWJpb3NfbWFwX2lycSk7CiAKKwlwY2lfaW5pdGlhbGl6ZWQgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCmluZGV4IDY1MzdkOTAuLjJkM2MwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYwpAQCAtNzksMTQgKzc5LDE0IEBACiAJLyogU3RvcCB0aGUgdXBkYXRlIHRvIHRoZSB0aW1lICovCiAJbTQ4dDM3X2Jhc2UtPmNvbnRyb2wgPSAweDQwOwogCi0JeWVhciA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPnllYXIpOwotCXllYXIgKz0gQkNEMkJJTihtNDh0MzdfYmFzZS0+Y2VudHVyeSkgKiAxMDA7CisJeWVhciA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPnllYXIpOworCXllYXIgKz0gYmNkMmJpbihtNDh0MzdfYmFzZS0+Y2VudHVyeSkgKiAxMDA7CiAKLQltb250aCA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPm1vbnRoKTsKLQlkYXkgPSBCQ0QyQklOKG00OHQzN19iYXNlLT5kYXRlKTsKLQlob3VyID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+aG91cik7Ci0JbWluID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+bWluKTsKLQlzZWMgPSBCQ0QyQklOKG00OHQzN19iYXNlLT5zZWMpOworCW1vbnRoID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+bW9udGgpOworCWRheSA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPmRhdGUpOworCWhvdXIgPSBiY2QyYmluKG00OHQzN19iYXNlLT5ob3VyKTsKKwltaW4gPSBiY2QyYmluKG00OHQzN19iYXNlLT5taW4pOworCXNlYyA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPnNlYyk7CiAKIAkvKiBTdGFydCB0aGUgdXBkYXRlIHRvIHRoZSB0aW1lIGFnYWluICovCiAJbTQ4dDM3X2Jhc2UtPmNvbnRyb2wgPSAweDAwOwpAQCAtMTEzLDIyICsxMTMsMjIgQEAKIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4ODA7CiAKIAkvKiB5ZWFyICovCi0JbTQ4dDM3X2Jhc2UtPnllYXIgPSBCSU4yQkNEKHRtLnRtX3llYXIgJSAxMDApOwotCW00OHQzN19iYXNlLT5jZW50dXJ5ID0gQklOMkJDRCh0bS50bV95ZWFyIC8gMTAwKTsKKwltNDh0MzdfYmFzZS0+eWVhciA9IGJpbjJiY2QodG0udG1feWVhciAlIDEwMCk7CisJbTQ4dDM3X2Jhc2UtPmNlbnR1cnkgPSBiaW4yYmNkKHRtLnRtX3llYXIgLyAxMDApOwogCiAJLyogbW9udGggKi8KLQltNDh0MzdfYmFzZS0+bW9udGggPSBCSU4yQkNEKHRtLnRtX21vbik7CisJbTQ4dDM3X2Jhc2UtPm1vbnRoID0gYmluMmJjZCh0bS50bV9tb24pOwogCiAJLyogZGF5ICovCi0JbTQ4dDM3X2Jhc2UtPmRhdGUgPSBCSU4yQkNEKHRtLnRtX21kYXkpOworCW00OHQzN19iYXNlLT5kYXRlID0gYmluMmJjZCh0bS50bV9tZGF5KTsKIAogCS8qIGhvdXIvbWluL3NlYyAqLwotCW00OHQzN19iYXNlLT5ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKLQltNDh0MzdfYmFzZS0+bWluID0gQklOMkJDRCh0bS50bV9taW4pOwotCW00OHQzN19iYXNlLT5zZWMgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CisJbTQ4dDM3X2Jhc2UtPmhvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCW00OHQzN19iYXNlLT5taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJbTQ4dDM3X2Jhc2UtPnNlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAogCS8qIGRheSBvZiB3ZWVrIC0tIG5vdCByZWFsbHkgdXNlZCwgYnV0IGxldCdzIGtlZXAgaXQgdXAtdG8tZGF0ZSAqLwotCW00OHQzN19iYXNlLT5kYXkgPSBCSU4yQkNEKHRtLnRtX3dkYXkgKyAxKTsKKwltNDh0MzdfYmFzZS0+ZGF5ID0gYmluMmJjZCh0bS50bV93ZGF5ICsgMSk7CiAKIAkvKiBkaXNhYmxlIHdyaXRpbmcgKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4MDA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvdGltZS5jIGIvYXJjaC9taXBzL3JiNTMyL3RpbWUuYwppbmRleCA4ZTdhNDY4Li4xMzc3ZDU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcmI1MzIvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JjMzI0MzQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKaW5kZXggNTI0ODZjNGQuLmRlZGRiZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwpAQCAtMTkyLDMgKzE5MiwxOCBAQAogfQogCiBkZXZpY2VfaW5pdGNhbGwoc2dpX2J1dHRvbl9kZXZpbml0KTsKKworc3RhdGljIGludCBfX2luaXQgc2dpX2RzMTI4Nl9kZXZpbml0KHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7CisJcmVzLnN0YXJ0ID0gSFBDM19DSElQMF9CQVNFICsgb2Zmc2V0b2Yoc3RydWN0IGhwYzNfcmVncywgcnRjcmVncyk7CisJcmVzLmVuZCA9IHJlcy5zdGFydCArIHNpemVvZihocGMzYzAtPnJ0Y3JlZ3MpIC0gMTsKKwlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBJU19FUlIocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLWRzMTI4NiIsIC0xLAorCQkJCQkJICAgICAgJnJlcywgMSkpOworfQorCitkZXZpY2VfaW5pdGNhbGwoc2dpX2RzMTI4Nl9kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCmluZGV4IDg5NmExZWYuLmI5YTkzMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKICAqLwotI2luY2x1ZGUgPGxpbnV4L2RzMTI4Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwppbmRleCAxMGU1MDU0Li4zZGNiMjdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDA2IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqLwogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RzMTI4Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5LDY5ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaS9pcDIyLmg+CiAKLS8qCi0gKiBOb3RlIHRoYXQgbWt0aW1lIHVzZXMgbW9udGggZnJvbSAxIHRvIDEyIHdoaWxlIHJ0Y190aW1lX3RvX3RtCi0gKiB1c2VzIDAgdG8gMTEuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHlycywgbW9uLCBkYXksIGhycywgbWluLCBzZWM7Ci0JdW5zaWduZWQgaW50IHNhdmVfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0Jc2F2ZV9jb250cm9sID0gaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdICYgMHhmZjsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0NNRF0gPSBzYXZlX2NvbnRyb2wgfCBSVENfVEU7Ci0KLQlzZWMgPSBCQ0QyQklOKGhwYzNjMC0+cnRjcmVnc1tSVENfU0VDT05EU10gJiAweGZmKTsKLQltaW4gPSBCQ0QyQklOKGhwYzNjMC0+cnRjcmVnc1tSVENfTUlOVVRFU10gJiAweGZmKTsKLQlocnMgPSBCQ0QyQklOKGhwYzNjMC0+cnRjcmVnc1tSVENfSE9VUlNdICYgMHgzZik7Ci0JZGF5ID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX0RBVEVdICYgMHhmZik7Ci0JbW9uID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX01PTlRIXSAmIDB4MWYpOwotCXlycyA9IEJDRDJCSU4oaHBjM2MwLT5ydGNyZWdzW1JUQ19ZRUFSXSAmIDB4ZmYpOwotCi0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoeXJzIDwgNDUpCi0JCXlycyArPSAzMDsKLQlpZiAoKHlycyArPSA0MCkgPCA3MCkKLQkJeXJzICs9IDEwMDsKLQotCXJldHVybiBta3RpbWUoeXJzICsgMTkwMCwgbW9uLCBkYXksIGhycywgbWluLCBzZWMpOwotfQotCi1pbnQgcnRjX21pcHNfc2V0X3RpbWUodW5zaWduZWQgbG9uZyB0aW0pCi17Ci0Jc3RydWN0IHJ0Y190aW1lIHRtOwotCXVuc2lnbmVkIGludCBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJ0Y190aW1lX3RvX3RtKHRpbSwgJnRtKTsKLQotCXRtLnRtX21vbiArPSAxOwkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCi0JdG0udG1feWVhciAtPSA0MDsKLQlpZiAodG0udG1feWVhciA+PSAxMDApCi0JCXRtLnRtX3llYXIgLT0gMTAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0Jc2F2ZV9jb250cm9sID0gaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdICYgMHhmZjsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0NNRF0gPSBzYXZlX2NvbnRyb2wgfCBSVENfVEU7Ci0KLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX1lFQVJdID0gQklOMkJDRCh0bS50bV95ZWFyKTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX01PTlRIXSA9IEJJTjJCQ0QodG0udG1fbW9uKTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0RBVEVdID0gQklOMkJDRCh0bS50bV9tZGF5KTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0hPVVJTXSA9IEJJTjJCQ0QodG0udG1faG91cik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19NSU5VVEVTXSA9IEJJTjJCQ0QodG0udG1fbWluKTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX1NFQ09ORFNdID0gQklOMkJDRCh0bS50bV9zZWMpOwotCWhwYzNjMC0+cnRjcmVnc1tSVENfSFVORFJFRFRIX1NFQ09ORF0gPSAwOwotCi0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9zYW1wbGUodm9pZCkKIHsKIAl1MzIgY3QwLCBjdDE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCA4YjRlODU0Li4xMzI3YzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTEzLDEyICsxMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWFsaWIuaD4KICNpbmNsdWRlIDxhc20vc24vaW9jMy5oPgotI2luY2x1ZGUgPGFzbS9tNDh0MzUuaD4KICNpbmNsdWRlIDxhc20vc24va2xjb25maWcuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgpAQCAtMjgsNTEgKzI4LDYgQEAKIAogI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKLSNpZiAwCi1zdGF0aWMgaW50IHNldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IHJlYWxfc2Vjb25kcywgcmVhbF9taW51dGVzLCBjbW9zX21pbnV0ZXM7Ci0Jc3RydWN0IG00OHQzNV9ydGMgKnJ0YzsKLQluYXNpZF90IG5pZDsKLQotCW5pZCA9IGdldF9uYXNpZCgpOwotCXJ0YyA9IChzdHJ1Y3QgbTQ4dDM1X3J0YyAqKShLTF9DT05GSUdfQ0hfQ09OU19JTkZPKG5pZCktPm1lbW9yeV9iYXNlICsKLQkJCQkJCQlJT0MzX0JZVEVCVVNfREVWMCk7Ci0KLQlydGMtPmNvbnRyb2wgfD0gTTQ4VDM1X1JUQ19SRUFEOwotCWNtb3NfbWludXRlcyA9IEJDRDJCSU4ocnRjLT5taW4pOwotCXJ0Yy0+Y29udHJvbCAmPSB+TTQ4VDM1X1JUQ19SRUFEOwotCi0JLyoKLQkgKiBTaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLCBkb24ndCBpbnRlcmZlcmUgd2l0aAotCSAqIGhvdXIgb3ZlcmZsb3cuIFRoaXMgYXZvaWRzIG1lc3Npbmcgd2l0aCB1bmtub3duIHRpbWUgem9uZXMgYnV0Ci0JICogcmVxdWlyZXMgeW91ciBSVEMgbm90IHRvIGJlIG9mZiBieSBtb3JlIHRoYW4gMTUgbWludXRlcwotCSAqLwotCXJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MDsKLQlyZWFsX21pbnV0ZXMgPSBub3d0aW1lIC8gNjA7Ci0JaWYgKCgoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgKyAxNSkvMzApICYgMSkKLQkJcmVhbF9taW51dGVzICs9IDMwOwkvKiBjb3JyZWN0IGZvciBoYWxmIGhvdXIgdGltZSB6b25lICovCi0JcmVhbF9taW51dGVzICU9IDYwOwotCi0JaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKLQkJcmVhbF9zZWNvbmRzID0gQklOMkJDRChyZWFsX3NlY29uZHMpOwotCQlyZWFsX21pbnV0ZXMgPSBCSU4yQkNEKHJlYWxfbWludXRlcyk7Ci0JCXJ0Yy0+Y29udHJvbCB8PSBNNDhUMzVfUlRDX1NFVDsKLQkJcnRjLT5zZWMgPSByZWFsX3NlY29uZHM7Ci0JCXJ0Yy0+bWluID0gcmVhbF9taW51dGVzOwotCQlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfU0VUOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAotCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOwotCQlyZXR2YWwgPSAtMTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotI2VuZGlmCi0KIC8qIEluY2x1ZGVzIGZvciBpb2MzX2luaXQoKS4gICovCiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9hZGRycy5oPgpAQCAtODAsMzcgKzM1LDYgQEAKICNpbmNsdWRlIDxhc20vc24vc24wL2h1YmlvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS9icmlkZ2UuaD4KIAotdW5zaWduZWQgbG9uZyByZWFkX3BlcnNpc3RlbnRfY2xvY2sodm9pZCkKLXsKLSAgICAgICAgdW5zaWduZWQgaW50IHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW4sIHNlYzsKLQlzdHJ1Y3QgbTQ4dDM1X3J0YyAqcnRjOwotCW5hc2lkX3QgbmlkOwotCi0JbmlkID0gZ2V0X25hc2lkKCk7Ci0JcnRjID0gKHN0cnVjdCBtNDh0MzVfcnRjICopKEtMX0NPTkZJR19DSF9DT05TX0lORk8obmlkKS0+bWVtb3J5X2Jhc2UgKwotCQkJCQkJCUlPQzNfQllURUJVU19ERVYwKTsKLQotCXJ0Yy0+Y29udHJvbCB8PSBNNDhUMzVfUlRDX1JFQUQ7Ci0Jc2VjID0gcnRjLT5zZWM7Ci0JbWluID0gcnRjLT5taW47Ci0JaG91ciA9IHJ0Yy0+aG91cjsKLQlkYXRlID0gcnRjLT5kYXRlOwotCW1vbnRoID0gcnRjLT5tb250aDsKLQl5ZWFyID0gcnRjLT55ZWFyOwotCXJ0Yy0+Y29udHJvbCAmPSB+TTQ4VDM1X1JUQ19SRUFEOwotCi0gICAgICAgIHNlYyA9IEJDRDJCSU4oc2VjKTsKLSAgICAgICAgbWluID0gQkNEMkJJTihtaW4pOwotICAgICAgICBob3VyID0gQkNEMkJJTihob3VyKTsKLSAgICAgICAgZGF0ZSA9IEJDRDJCSU4oZGF0ZSk7Ci0gICAgICAgIG1vbnRoID0gQkNEMkJJTihtb250aCk7Ci0gICAgICAgIHllYXIgPSBCQ0QyQklOKHllYXIpOwotCi0gICAgICAgIHllYXIgKz0gMTk3MDsKLQotICAgICAgICByZXR1cm4gbWt0aW1lKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW4sIHNlYyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGVuYWJsZV9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIH0KQEAgLTI4Niw2ICsyMTAsNyBAQAogCiB2b2lkIF9fY3B1aW5pdCBodWJfcnRjX2luaXQoY25vZGVpZF90IGNub2RlKQogeworCiAJLyoKIAkgKiBXZSBvbmx5IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY3VycmVudCBub2RlLgogCSAqIElmIHRoaXMgaXMgbm90IHRoZSBjdXJyZW50IG5vZGUgdGhlbiBpdCBpcyBhIGNwdWxlc3MKQEAgLTMwMSwzICsyMjYsMjMgQEAKIAkJTE9DQUxfSFVCX1MoUElfUlRfUEVORF9CLCAwKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV9pcDI3X3J0Y19kZXZpbml0KHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCW1lbXNldCgmcmVzLCAwLCBzaXplb2YocmVzKSk7CisJcmVzLnN0YXJ0ID0gWFBIWVNBRERSKEtMX0NPTkZJR19DSF9DT05TX0lORk8obWFzdGVyX25hc2lkKS0+bWVtb3J5X2Jhc2UgKworCQkJICAgICAgSU9DM19CWVRFQlVTX0RFVjApOworCXJlcy5lbmQgPSByZXMuc3RhcnQgKyAzMjc2NzsKKwlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBJU19FUlIocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLW00OHQzNSIsIC0xLAorCQkJCQkJICAgICAgJnJlcywgMSkpOworfQorCisvKgorICoga2x1ZGdlIG1ha2UgdGhpcyBhIGRldmljZV9pbml0Y2FsbCBhZnRlciBpb2MzIHJlc291cmNlIGNvbmZsaWN0cworICogYXJlIHJlc29sdmVkCisgKi8KK2xhdGVfaW5pdGNhbGwoc2dpX2lwMjdfcnRjX2RldmluaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMKaW5kZXggM2Q2MzcyMS4uNTExZTlmZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCkBAIC05MCw2ICs5MCwyMiBAQAogCiBkZXZpY2VfaW5pdGNhbGwoc2dpbzJidG5zX2RldmluaXQpOwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNnaW8yX2Ntb3NfcnNyY1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHg3MCwKKwkJLmVuZCAgID0gMHg3MSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JTworCX0KK307CisKK3N0YXRpYyBfX2luaXQgaW50IHNnaW8yX2Ntb3NfZGV2aW5pdCh2b2lkKQoreworCXJldHVybiBJU19FUlIocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjX2Ntb3MiLCAtMSwKKwkJCQkJCSAgICAgIHNnaW8yX2Ntb3NfcnNyYywgMSkpOworfQorCitkZXZpY2VfaW5pdGNhbGwoc2dpbzJfY21vc19kZXZpbml0KTsKKwogTU9EVUxFX0FVVEhPUigiUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCI4MjUwIFVBUlQgcHJvYmUgZHJpdmVyIGZvciBTR0kgSVAzMiBha2EgTzIiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCmluZGV4IDEwMjRiZjQuLmM1YTVkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYwpAQCAtNjIsMTEgKzYyLDYgQEAKIH0KICNlbmRpZgogCi11bnNpZ25lZCBsb25nIHJlYWRfcGVyc2lzdGVudF9jbG9jayh2b2lkKQotewotCXJldHVybiBtYzE0NjgxOF9nZXRfY21vc190aW1lKCk7Ci19Ci0KIC8qIEFuIGFyYml0cmFyeSB0aW1lOyB0aGlzIGNhbiBiZSBkZWNyZWFzZWQgaWYgcmVsaWFiaWxpdHkgbG9va3MgZ29vZCAqLwogI2RlZmluZSBXQUlUX01TIDEwCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggNjZlM2UzZi4uNjM3YTE5NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTU3Niw4ICs1NzYsNyBAQAogCiAJdGJfY2xhc3MgPSB0YmM7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodGJjLCBOVUxMLCBNS0RFVihTQlBST0ZfVEJfTUFKT1IsIDApLAotCQkJCSAgICBOVUxMLCAidGIiKTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKHRiYywgTlVMTCwgTUtERVYoU0JQUk9GX1RCX01BSk9SLCAwKSwgTlVMTCwgInRiIik7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGV2KTsKIAkJZ290byBvdXRfY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX200MXQ4MS5jCmluZGV4IDI2ZmJmZjQuLmI3MzI2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX200MXQ4MS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX200MXQ4MS5jCkBAIC0xNTYsMzIgKzE1NiwzMiBAQAogCSAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0JdG0udG1fc2VjID0gQklOMkJDRCh0bS50bV9zZWMpOworCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX1NDLCB0bS50bV9zZWMpOwogCi0JdG0udG1fbWluID0gQklOMkJDRCh0bS50bV9taW4pOworCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX01OLCB0bS50bV9taW4pOwogCi0JdG0udG1faG91ciA9IEJJTjJCQ0QodG0udG1faG91cik7CisJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CiAJdG0udG1faG91ciA9ICh0bS50bV9ob3VyICYgMHgzZikgfCAobTQxdDgxX3JlYWQoTTQxVDgxUkVHX0hSKSAmIDB4YzApOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfSFIsIHRtLnRtX2hvdXIpOwogCiAJLyogdG1fd2RheSBzdGFydHMgZnJvbSAwIHRvIDYgKi8KIAlpZiAodG0udG1fd2RheSA9PSAwKSB0bS50bV93ZGF5ID0gNzsKLQl0bS50bV93ZGF5ID0gQklOMkJDRCh0bS50bV93ZGF5KTsKKwl0bS50bV93ZGF5ID0gYmluMmJjZCh0bS50bV93ZGF5KTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX0RZLCB0bS50bV93ZGF5KTsKIAotCXRtLnRtX21kYXkgPSBCSU4yQkNEKHRtLnRtX21kYXkpOworCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfRFQsIHRtLnRtX21kYXkpOwogCiAJLyogdG1fbW9uIHN0YXJ0cyBmcm9tIDAsICppY2sqICovCiAJdG0udG1fbW9uICsrOwotCXRtLnRtX21vbiA9IEJJTjJCQ0QodG0udG1fbW9uKTsKKwl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19NTywgdG0udG1fbW9uKTsKIAogCS8qIHdlIGRvbid0IGRvIGNlbnR1cnksIGV2ZXJ5dGhpbmcgaXMgYmV5b25kIDIwMDAgKi8KIAl0bS50bV95ZWFyICU9IDEwMDsKLQl0bS50bV95ZWFyID0gQklOMkJDRCh0bS50bV95ZWFyKTsKKwl0bS50bV95ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX1lSLCB0bS50bV95ZWFyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCkBAIC0yMDksMTIgKzIwOSwxMiBAQAogCXllYXIgPSBtNDF0ODFfcmVhZChNNDFUODFSRUdfWVIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKLQlzZWMgPSBCQ0QyQklOKHNlYyk7Ci0JbWluID0gQkNEMkJJTihtaW4pOwotCWhvdXIgPSBCQ0QyQklOKGhvdXIpOwotCWRheSA9IEJDRDJCSU4oZGF5KTsKLQltb24gPSBCQ0QyQklOKG1vbik7Ci0JeWVhciA9IEJDRDJCSU4oeWVhcik7CisJc2VjID0gYmNkMmJpbihzZWMpOworCW1pbiA9IGJjZDJiaW4obWluKTsKKwlob3VyID0gYmNkMmJpbihob3VyKTsKKwlkYXkgPSBiY2QyYmluKGRheSk7CisJbW9uID0gYmNkMmJpbihtb24pOworCXllYXIgPSBiY2QyYmluKHllYXIpOwogCiAJeWVhciArPSAyMDAwOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX3hpY29yMTI0MS5jCmluZGV4IGZmM2U1ZGEuLjQ0MzhiMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX3hpY29yMTI0MS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vcnRjX3hpY29yMTI0MS5jCkBAIC0xMjQsMTggKzEyNCwxOCBAQAogCXhpY29yX3dyaXRlKFgxMjQxUkVHX1NSLCBYMTI0MVJFR19TUl9XRUwgfCBYMTI0MVJFR19TUl9SV0VMKTsKIAogCS8qIHRyaXZpYWwgb25lcyAqLwotCXRtLnRtX3NlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfU0MsIHRtLnRtX3NlYyk7CiAKLQl0bS50bV9taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7CisJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX01OLCB0bS50bV9taW4pOwogCi0JdG0udG1fbWRheSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfRFQsIHRtLnRtX21kYXkpOwogCiAJLyogdG1fbW9uIHN0YXJ0cyBmcm9tIDAsICppY2sqICovCiAJdG0udG1fbW9uICsrOwotCXRtLnRtX21vbiA9IEJJTjJCQ0QodG0udG1fbW9uKTsKKwl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfTU8sIHRtLnRtX21vbik7CiAKIAkvKiB5ZWFyIGlzIHNwbGl0ICovCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAl0bXAgPSB4aWNvcl9yZWFkKFgxMjQxUkVHX0hSKTsKIAlpZiAodG1wICYgWDEyNDFSRUdfSFJfTUlMKSB7CiAJCS8qIDI0IGhvdXIgZm9ybWF0ICovCi0JCXRtLnRtX2hvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKIAkJdG1wID0gKHRtcCAmIH4weDNmKSB8ICh0bS50bV9ob3VyICYgMHgzZik7CiAJfSBlbHNlIHsKIAkJLyogMTIgaG91ciBmb3JtYXQsIHdpdGggMHgyIGZvciBwbSAqLwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCQl0bXAgfD0gMHgyMDsKIAkJCXRtLnRtX2hvdXIgLT0gMTI7CiAJCX0KLQkJdG0udG1faG91ciA9IEJJTjJCQ0QodG0udG1faG91cik7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOwogCQl0bXAgfD0gdG0udG1faG91cjsKIAl9CiAJeGljb3Jfd3JpdGUoWDEyNDFSRUdfSFIsIHRtcCk7CkBAIC0xOTEsMTMgKzE5MSwxMyBAQAogCXkyayA9IHhpY29yX3JlYWQoWDEyNDFSRUdfWTJLKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCi0Jc2VjID0gQkNEMkJJTihzZWMpOwotCW1pbiA9IEJDRDJCSU4obWluKTsKLQlob3VyID0gQkNEMkJJTihob3VyKTsKLQlkYXkgPSBCQ0QyQklOKGRheSk7Ci0JbW9uID0gQkNEMkJJTihtb24pOwotCXllYXIgPSBCQ0QyQklOKHllYXIpOwotCXkyayA9IEJDRDJCSU4oeTJrKTsKKwlzZWMgPSBiY2QyYmluKHNlYyk7CisJbWluID0gYmNkMmJpbihtaW4pOworCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCWRheSA9IGJjZDJiaW4oZGF5KTsKKwltb24gPSBiY2QyYmluKG1vbik7CisJeWVhciA9IGJjZDJiaW4oeWVhcik7CisJeTJrID0gYmNkMmJpbih5MmspOwogCiAJeWVhciArPSAoeTJrICogMTAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL0tjb25maWcgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwppbmRleCBkZDU1N2M5Li45YTlmNDMzIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvS2NvbmZpZworKysgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwpAQCAtNjgsNiArNjgsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiAKIG1lbnUgIk1hdHN1c2hpdGEgTU4xMDMwMCBzeXN0ZW0gc2V0dXAiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCmluZGV4IDA0MmY3OTIuLjc5Nzg0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC04NCw4ICs4NCw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCA4MzEzZmNjLi4yYmQxZjZlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTkwLDYgKzkwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYwppbmRleCBlY2IxMGE0Li5mNjE2OTJkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2JpbmZtdF9lbGYzMi5jCkBAIC04NSw3ICs4NSw3IEBACiAgKiBjb3VsZCBzZXQgYSBwcm9jZXNzb3IgZGVwZW5kZW50IGZsYWcgaW4gdGhlIHRocmVhZF9zdHJ1Y3QuCiAgKi8KIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgXAogCXNldF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpOyBcCiAJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlID0gREVGQVVMVF9NQVBfQkFTRTMyOyBcCiAJY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZSA9IERFRkFVTFRfVEFTS19TSVpFMzIgXApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCmluZGV4IDcxZWZkNmEuLjA4MzgxNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKQEAgLTE3OSwxMTEgKzE3OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotcHV0X2NvbXBhdF90aW1ldmFsKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnUsIHN0cnVjdCB0aW1ldmFsICp0KQotewotCXN0cnVjdCBjb21wYXRfdGltZXZhbCB0MzI7Ci0JdDMyLnR2X3NlYyA9IHQtPnR2X3NlYzsKLQl0MzIudHZfdXNlYyA9IHQtPnR2X3VzZWM7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcih1LCAmdDMyLCBzaXplb2YgdDMyKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19nZXRfdXNlcih1c2VjLCAmaS0+dHZfdXNlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCW8tPnR2X25zZWMgPSB1c2VjICogMTAwMDsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0gICAgZXh0ZXJuIHZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7Ci0KLSAgICBpZiAodHYpIHsKLQkgICAgc3RydWN0IHRpbWV2YWwga3R2OwotCSAgICBkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JICAgIGlmIChwdXRfY29tcGF0X3RpbWV2YWwodHYsICZrdHYpKQotCQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotICAgIGlmICh0eikgewotCSAgICBleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKLQkgICAgaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1hc21saW5rYWdlIAotaW50IHN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmIChzdGF0LT5zaXplID4gTUFYX05PTl9MRlMgfHwgIW5ld192YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fAotCSAgICAhbmV3X3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgaW5vICE9IHN0YXQtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQllcnIgID0gcHV0X3VzZXIobmV3X2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnN0YXRidWYtPnN0X2Rldik7Ci0JZXJyIHw9IHB1dF91c2VyKGlubywgJnN0YXRidWYtPnN0X2lubyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm1vZGUsICZzdGF0YnVmLT5zdF9tb2RlKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bmxpbmssICZzdGF0YnVmLT5zdF9ubGluayk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9yZXNlcnZlZDEpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3RfcmVzZXJ2ZWQyKTsKLQllcnIgfD0gcHV0X3VzZXIobmV3X2VuY29kZV9kZXYoc3RhdC0+cmRldiksICZzdGF0YnVmLT5zdF9yZGV2KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnN0YXRidWYtPnN0X3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmF0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9hdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2N0aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmc3RhdGJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmJsb2NrcywgJnN0YXRidWYtPnN0X2Jsb2Nrcyk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDEpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQyKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkMyk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDQpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ1KTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X2ZzdHlwZSk7IC8qIG5vdCBhdmFpbCAqLwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3RfcmVhbGRldik7IC8qIG5vdCBhdmFpbCAqLwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3RfYmFzZW1vZGUpOyAvKiBub3QgYXZhaWwgKi8KLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3NwYXJlc2hvcnQpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT51aWQsICZzdGF0YnVmLT5zdF91aWQpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5naWQsICZzdGF0YnVmLT5zdF9naWQpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3Rfc3BhcmU0WzBdKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3NwYXJlNFsxXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9zcGFyZTRbMl0pOwotCi0JcmV0dXJuIGVycjsKLX0KLQogLyoqKiBjb3BpZWQgZnJvbSBtaXBzNjQgKioqLwogLyoKICAqIE9vbywgbmFzdHkuICBXZSBuZWVkIGhlcmUgdG8gZnJvYiAzMi1iaXQgdW5zaWduZWQgbG9uZ3MgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDZiNWFjMzguLmM3ZTU5ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMTQ5LDggKzE0OSw4IEBACiAJRU5UUllfQ09NUChnZXRybGltaXQpCiAJRU5UUllfQ09NUChnZXRydXNhZ2UpCiAJLyogc3RydWN0IHRpbWV2YWwgYW5kIHRpbWV6b25lIGFyZSBtYXliZT8/IGNvbnNpc3RlbnQgd2lkZSBhbmQgbmFycm93ICovCi0JRU5UUllfRElGRihnZXR0aW1lb2ZkYXkpCi0JRU5UUllfRElGRihzZXR0aW1lb2ZkYXkpCisJRU5UUllfQ09NUChnZXR0aW1lb2ZkYXkpCisJRU5UUllfQ09NUChzZXR0aW1lb2ZkYXkpCiAJRU5UUllfU0FNRShnZXRncm91cHMpCQkvKiA4MCAqLwogCUVOVFJZX1NBTUUoc2V0Z3JvdXBzKQogCS8qIHN0cnVjdCBzb2NrZXRhZGRyLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDU4N2RhNWUuLjkzOTExOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0yMiw2ICsyMiw5IEBACiBjb25maWcgUFBDX01FUkdFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorICAgICAgIGRlZl9ib29sIFBQQzY0IHx8IFBIWVNfNjRCSVQKKwogY29uZmlnIE1NVQogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTIyNyw2ICsyMzAsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnIgogCkBAIC00MTUsOCArNDIwLDExIEBACiAKIGNvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCiAJaW50ICJNYXhpbXVtIHpvbmUgb3JkZXIiCisJcmFuZ2UgOSA2NCBpZiBQUENfNjRLX1BBR0VTCiAJZGVmYXVsdCAiOSIgaWYgUFBDXzY0S19QQUdFUworCXJhbmdlIDEzIDY0IGlmIFBQQzY0ICYmICFQUENfNjRLX1BBR0VTCiAJZGVmYXVsdCAiMTMiIGlmIFBQQzY0ICYmICFQUENfNjRLX1BBR0VTCisJcmFuZ2UgMTEgNjQKIAlkZWZhdWx0ICIxMSIKIAloZWxwCiAJICBUaGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IgZGl2aWRlcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5CkBAIC04MDYsNiArODE0LDE5IEBACiBlbmRtZW51CiAKIGlmIFBQQzY0Citjb25maWcgUkVMT0NBVEFCTEUKKwlib29sICJCdWlsZCBhIHJlbG9jYXRhYmxlIGtlcm5lbCIKKwloZWxwCisJICBUaGlzIGJ1aWxkcyBhIGtlcm5lbCBpbWFnZSB0aGF0IGlzIGNhcGFibGUgb2YgcnVubmluZyBhbnl3aGVyZQorCSAgaW4gdGhlIFJNQSAocmVhbCBtZW1vcnkgYXJlYSkgYXQgYW55IDE2ay1hbGlnbmVkIGJhc2UgYWRkcmVzcy4KKwkgIFRoZSBrZXJuZWwgaXMgbGlua2VkIGFzIGEgcG9zaXRpb24taW5kZXBlbmRlbnQgZXhlY3V0YWJsZSAoUElFKQorCSAgYW5kIGNvbnRhaW5zIGR5bmFtaWMgcmVsb2NhdGlvbnMgd2hpY2ggYXJlIHByb2Nlc3NlZCBlYXJseQorCSAgaW4gdGhlIGJvb3R1cCBwcm9jZXNzLgorCisJICBPbmUgdXNlIGlzIGZvciB0aGUga2V4ZWMgb24gcGFuaWMgY2FzZSB3aGVyZSB0aGUgcmVjb3Zlcnkga2VybmVsCisJICBtdXN0IGxpdmUgYXQgYSBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB0aGFuIHRoZSBwcmltYXJ5CisJICBrZXJuZWwuCisKIGNvbmZpZyBQQUdFX09GRlNFVAogCWhleAogCWRlZmF1bHQgIjB4YzAwMDAwMDAwMDAwMDAwMCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggNGViYzUyYS4uMTVlYjI3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTUxLDYgKzUxLDExIEBACiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZWZhdWx0IG4KIAorY29uZmlnIE1TSV9CSVRNQVBfU0VMRlRFU1QKKwlib29sICJSdW4gc2VsZi10ZXN0cyBvZiB0aGUgTVNJIGJpdG1hcCBjb2RlLiIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWRlZmF1bHQgbgorCiBjb25maWcgWE1PTgogCWJvb2wgIkluY2x1ZGUgeG1vbiBrZXJuZWwgZGVidWdnZXIiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCBjNmJlMTllLi4yNGRkMWEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC02Myw3ICs2Myw5IEBACiBvdmVycmlkZSBBUgk6PSBHTlVUQVJHRVQ9ZWxmJChDT05GSUdfV09SRF9TSVpFKS1wb3dlcnBjICQoQVIpCiBlbmRpZgogCi1MREZMQUdTX3ZtbGludXgJOj0gLUJzdGF0aWMKK0xERkxBR1Nfdm1saW51eC15eSA6PSAtQnN0YXRpYworTERGTEFHU192bWxpbnV4LSQoQ09ORklHX1BQQzY0KSQoQ09ORklHX1JFTE9DQVRBQkxFKSA6PSAtcGllCitMREZMQUdTX3ZtbGludXgJOj0gJChMREZMQUdTX3ZtbGludXgteXkpCiAKIENGTEFHUy0kKENPTkZJR19QUEM2NCkJOj0gLW1taW5pbWFsLXRvYyAtbXRyYWNlYmFjaz1ub25lICAtbWNhbGwtYWl4ZGVzYwogQ0ZMQUdTLSQoQ09ORklHX1BQQzMyKQk6PSAtZmZpeGVkLXIyIC1tbXVsdGlwbGUKQEAgLTEwMiw3ICsxMDQsMTAgQEAKIEtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLWFsdGl2ZWMpCiAKICMgTm8gU1BFIGluc3RydWN0aW9uIHdoZW4gYnVpbGRpbmcga2VybmVsCisjIChXZSB1c2UgYWxsIGF2YWlsYWJsZSBvcHRpb25zIHRvIGhlbHAgc2VtaS1icm9rZW4gY29tcGlsZXJzKQogS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tc3BlKQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tc3BlPW5vKQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYWJpPW5vLXNwZSkKIAogIyBFbmFibGUgdW5pdC1hdC1hLXRpbWUgbW9kZSB3aGVuIHBvc3NpYmxlLiBJdCBzaHJpbmtzIHRoZQogIyBrZXJuZWwgY29uc2lkZXJhYmx5LgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCA2NWQxYTg0Li5hYWMxNDA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtMzEwLDggKzMxMCwxMSBAQAogJChvYmopL3ZtbGludXguc3RyaXA6IHZtbGludXgKIAkkKFNUUklQKSAtcyAtUiAuY29tbWVudCAkPCAtbyAkQAogCisjIFRoZSBpc2VyaWVzIGh5cGVydmlzb3Igd29uJ3QgdGFrZSBhbiBFVF9EWU4gZXhlY3V0YWJsZSwgc28gdGhpcworIyBjaGFuZ2VzIHRoZSB0eXBlIChieXRlIDE3KSBpbiB0aGUgZmlsZSB0byBFVF9FWEVDICgyKS4KICQob2JqKS96SW1hZ2UuaXNlcmllczogdm1saW51eAogCSQoU1RSSVApIC1zIC1SIC5jb21tZW50ICQ8IC1vICRACisJcHJpbnRmICJceDAyIiB8IGRkIG9mPSRAIGNvbnY9bm90cnVuYyBicz0xIHNlZWs9MTcKIAogJChvYmopL3VJbWFnZTogdm1saW51eCAkKHdyYXBwZXJiaXRzKQogCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsdWJvb3QpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9hZGRub3RlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRub3RlLmMKaW5kZXggYjFlNTYxMS4uZGNjOWFiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2FkZG5vdGUuYwpAQCAtMTEsNyArMTEsMTIgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBVc2FnZTogYWRkbm90ZSB6SW1hZ2UKKyAqIFVzYWdlOiBhZGRub3RlIHpJbWFnZSBbbm90ZS5lbGZdCisgKgorICogSWYgbm90ZS5lbGYgaXMgc3VwcGxpZWQsIGl0IGlzIHRoZSBuYW1lIG9mIGFuIEVMRiBmaWxlIHRoYXQgY29udGFpbnMKKyAqIGFuIFJQQSBub3RlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBvbmUuICBBbHRlcm5hdGl2ZWx5LCB0aGUKKyAqIG5vdGUuZWxmIGZpbGUgbWF5IGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBidWlsdC1pbiBSUEEgbm90ZSBpcworICogdXNlZCAodGhpcyBpcyB0byBzaW1wbGlmeSBob3cgdGhpcyBpcyBpbnZva2VkIGZyb20gdGhlIHdyYXBwZXIgc2NyaXB0KS4KICAqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00MywyNyArNDgsMjkgQEAKICAqLwogI2RlZmluZSBOX1JQQV9ERVNDUgk4CiB1bnNpZ25lZCBpbnQgcnBhbm90ZVtOX1JQQV9ERVNDUl0gPSB7Ci0JMCwJCQkvKiBscGFyYWZmaW5pdHkgKi8KLQk2NCwJCQkvKiBtaW5fcm1vX3NpemUgKi8KKwkxLAkJCS8qIGxwYXJhZmZpbml0eSAqLworCTEyOCwJCQkvKiBtaW5fcm1vX3NpemUgKi8KIAkwLAkJCS8qIG1pbl9ybW9fcGVyY2VudCAqLwotCTQwLAkJCS8qIG1heF9wZnRfc2l6ZSAqLworCTQ2LAkJCS8qIG1heF9wZnRfc2l6ZSAqLwogCTEsCQkJLyogc3BscGFyICovCiAJLTEsCQkJLyogbWluX2xvYWQgKi8KLQkwLAkJCS8qIG5ld19tZW1fZGVmICovCi0JMSwJCQkvKiBpZ25vcmVfbXlfY2xpZW50X2NvbmZpZyAqLworCTEsCQkJLyogbmV3X21lbV9kZWYgKi8KKwkwLAkJCS8qIGlnbm9yZV9teV9jbGllbnRfY29uZmlnICovCiB9OwogCiAjZGVmaW5lIFJPVU5EVVAobGVuKQkoKChsZW4pICsgMykgJiB+MykKIAogdW5zaWduZWQgY2hhciBidWZbNTEyXTsKK3Vuc2lnbmVkIGNoYXIgbm90ZWJ1Zls1MTJdOwogCi0jZGVmaW5lIEdFVF8xNkJFKG9mZikJKChidWZbb2ZmXSA8PCA4KSArIChidWZbKG9mZikrMV0pKQotI2RlZmluZSBHRVRfMzJCRShvZmYpCSgoR0VUXzE2QkUob2ZmKSA8PCAxNikgKyBHRVRfMTZCRSgob2ZmKSsyKSkKKyNkZWZpbmUgR0VUXzE2QkUoYiwgb2ZmKQkoKChiKVtvZmZdIDw8IDgpICsgKChiKVsob2ZmKSsxXSkpCisjZGVmaW5lIEdFVF8zMkJFKGIsIG9mZikJKChHRVRfMTZCRSgoYiksIChvZmYpKSA8PCAxNikgKyBcCisJCQkJIEdFVF8xNkJFKChiKSwgKG9mZikrMikpCiAKLSNkZWZpbmUgUFVUXzE2QkUob2ZmLCB2KQkoYnVmW29mZl0gPSAoKHYpID4+IDgpICYgMHhmZiwgXAotCQkJCSBidWZbKG9mZikgKyAxXSA9ICh2KSAmIDB4ZmYpCi0jZGVmaW5lIFBVVF8zMkJFKG9mZiwgdikJKFBVVF8xNkJFKChvZmYpLCAodikgPj4gMTYpLCBcCi0JCQkJIFBVVF8xNkJFKChvZmYpICsgMiwgKHYpKSkKKyNkZWZpbmUgUFVUXzE2QkUoYiwgb2ZmLCB2KQkoKGIpW29mZl0gPSAoKHYpID4+IDgpICYgMHhmZiwgXAorCQkJCSAoYilbKG9mZikgKyAxXSA9ICh2KSAmIDB4ZmYpCisjZGVmaW5lIFBVVF8zMkJFKGIsIG9mZiwgdikJKFBVVF8xNkJFKChiKSwgKG9mZiksICh2KSA+PiAxNiksIFwKKwkJCQkgUFVUXzE2QkUoKGIpLCAob2ZmKSArIDIsICh2KSkpCiAKIC8qIFN0cnVjdHVyZSBvZiBhbiBFTEYgZmlsZSAqLwogI2RlZmluZSBFX0lERU5UCQkwCS8qIEVMRiBoZWFkZXIgKi8KQEAgLTg4LDE1ICs5NSw3MSBAQAogCiB1bnNpZ25lZCBjaGFyIGVsZl9tYWdpY1s0XSA9IHsgMHg3ZiwgJ0UnLCAnTCcsICdGJyB9OwogCit1bnNpZ25lZCBjaGFyICpyZWFkX3JwYW5vdGUoY29uc3QgY2hhciAqZm5hbWUsIGludCAqbm5wKQoreworCWludCBub3RlZmQsIG5yLCBpOworCWludCBwaCwgcHMsIG5wOworCWludCBub3RlLCBub3Rlc2l6ZTsKKworCW5vdGVmZCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZKTsKKwlpZiAobm90ZWZkIDwgMCkgeworCQlwZXJyb3IoZm5hbWUpOworCQlleGl0KDEpOworCX0KKwluciA9IHJlYWQobm90ZWZkLCBub3RlYnVmLCBzaXplb2Yobm90ZWJ1ZikpOworCWlmIChuciA8IDApIHsKKwkJcGVycm9yKCJyZWFkIG5vdGUiKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKG5yID09IDApCQkvKiBlbXB0eSBmaWxlICovCisJCXJldHVybiBOVUxMOworCWlmIChuciA8IEVfSFNJWkUgfHwKKwkgICAgbWVtY21wKCZub3RlYnVmW0VfSURFTlQrRUlfTUFHSUNdLCBlbGZfbWFnaWMsIDQpICE9IDAgfHwKKwkgICAgbm90ZWJ1ZltFX0lERU5UK0VJX0NMQVNTXSAhPSBFTEZDTEFTUzMyIHx8CisJICAgIG5vdGVidWZbRV9JREVOVCtFSV9EQVRBXSAhPSBFTEZEQVRBMk1TQikKKwkJZ290byBub3RlbGY7CisJY2xvc2Uobm90ZWZkKTsKKworCS8qIG5vdyBsb29rIGZvciB0aGUgUlBBLW5vdGUgKi8KKwlwaCA9IEdFVF8zMkJFKG5vdGVidWYsIEVfUEhPRkYpOworCXBzID0gR0VUXzE2QkUobm90ZWJ1ZiwgRV9QSEVOVFNJWkUpOworCW5wID0gR0VUXzE2QkUobm90ZWJ1ZiwgRV9QSE5VTSk7CisJaWYgKHBoIDwgRV9IU0laRSB8fCBwcyA8IFBIX0hTSVpFIHx8IG5wIDwgMSkKKwkJZ290byBub3RlbGY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnA7ICsraSwgcGggKz0gcHMpIHsKKwkJaWYgKEdFVF8zMkJFKG5vdGVidWYsIHBoICsgUEhfVFlQRSkgIT0gUFRfTk9URSkKKwkJCWNvbnRpbnVlOworCQlub3RlID0gR0VUXzMyQkUobm90ZWJ1ZiwgcGggKyBQSF9PRkZTRVQpOworCQlub3Rlc2l6ZSA9IEdFVF8zMkJFKG5vdGVidWYsIHBoICsgUEhfRklMRVNaKTsKKwkJaWYgKG5vdGVzaXplIDwgMzQgfHwgbm90ZSArIG5vdGVzaXplID4gbnIpCisJCQljb250aW51ZTsKKwkJaWYgKEdFVF8zMkJFKG5vdGVidWYsIG5vdGUpICE9IHN0cmxlbihycGFuYW1lKSArIDEgfHwKKwkJICAgIEdFVF8zMkJFKG5vdGVidWYsIG5vdGUgKyA4KSAhPSAweDEyNzU5OTk5IHx8CisJCSAgICBzdHJjbXAoKGNoYXIgKikmbm90ZWJ1Zltub3RlICsgMTJdLCBycGFuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisJCS8qIGxvb2tzIGxpa2UgYW4gUlBBIG5vdGUsIHJldHVybiBpdCAqLworCQkqbm5wID0gbm90ZXNpemU7CisJCXJldHVybiAmbm90ZWJ1Zltub3RlXTsKKwl9CisJLyogbm8gUlBBIG5vdGUgZm91bmQgKi8KKwlyZXR1cm4gTlVMTDsKKworIG5vdGVsZjoKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIG5vdCBhIGJpZy1lbmRpYW4gMzItYml0IEVMRiBpbWFnZVxuIiwgZm5hbWUpOworCWV4aXQoMSk7Cit9CisKIGludAogbWFpbihpbnQgYWMsIGNoYXIgKiphdikKIHsKIAlpbnQgZmQsIG4sIGk7CiAJaW50IHBoLCBwcywgbnA7CiAJaW50IG5ub3RlLCBubm90ZTIsIG5zOworCXVuc2lnbmVkIGNoYXIgKnJwYXA7CiAKLQlpZiAoYWMgIT0gMikgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBlbGYtZmlsZVxuIiwgYXZbMF0pOworCWlmIChhYyAhPSAyICYmIGFjICE9IDMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZWxmLWZpbGUgW3JwYW5vdGUuZWxmXVxuIiwgYXZbMF0pOwogCQlleGl0KDEpOwogCX0KIAlmZCA9IG9wZW4oYXZbMV0sIE9fUkRXUik7CkBAIC0xMDcsNiArMTcwLDcgQEAKIAogCW5ub3RlID0gMTIgKyBST1VORFVQKHN0cmxlbihhcmNoKSArIDEpICsgc2l6ZW9mKGRlc2NyKTsKIAlubm90ZTIgPSAxMiArIFJPVU5EVVAoc3RybGVuKHJwYW5hbWUpICsgMSkgKyBzaXplb2YocnBhbm90ZSk7CisJcnBhcCA9IE5VTEw7CiAKIAluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CiAJaWYgKG4gPCAwKSB7CkBAIC0xMjQsMTYgKzE4OCwxOSBAQAogCQlleGl0KDEpOwogCX0KIAotCXBoID0gR0VUXzMyQkUoRV9QSE9GRik7Ci0JcHMgPSBHRVRfMTZCRShFX1BIRU5UU0laRSk7Ci0JbnAgPSBHRVRfMTZCRShFX1BITlVNKTsKKwlpZiAoYWMgPT0gMykKKwkJcnBhcCA9IHJlYWRfcnBhbm90ZShhdlsyXSwgJm5ub3RlMik7CisKKwlwaCA9IEdFVF8zMkJFKGJ1ZiwgRV9QSE9GRik7CisJcHMgPSBHRVRfMTZCRShidWYsIEVfUEhFTlRTSVpFKTsKKwlucCA9IEdFVF8xNkJFKGJ1ZiwgRV9QSE5VTSk7CiAJaWYgKHBoIDwgRV9IU0laRSB8fCBwcyA8IFBIX0hTSVpFIHx8IG5wIDwgMSkKIAkJZ290byBub3RlbGY7CiAJaWYgKHBoICsgKG5wICsgMikgKiBwcyArIG5ub3RlICsgbm5vdGUyID4gbikKIAkJZ290byBub3NwYWNlOwogCiAJZm9yIChpID0gMDsgaSA8IG5wOyArK2kpIHsKLQkJaWYgKEdFVF8zMkJFKHBoICsgUEhfVFlQRSkgPT0gUFRfTk9URSkgeworCQlpZiAoR0VUXzMyQkUoYnVmLCBwaCArIFBIX1RZUEUpID09IFBUX05PVEUpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiJXMgYWxyZWFkeSBoYXMgYSBub3RlIGVudHJ5XG4iLAogCQkJCWF2WzFdKTsKIAkJCWV4aXQoMCk7CkBAIC0xNDgsMzcgKzIxNSw0MiBAQAogCiAJLyogZmlsbCBpbiB0aGUgcHJvZ3JhbSBoZWFkZXIgZW50cnkgKi8KIAlucyA9IHBoICsgMiAqIHBzOwotCVBVVF8zMkJFKHBoICsgUEhfVFlQRSwgUFRfTk9URSk7Ci0JUFVUXzMyQkUocGggKyBQSF9PRkZTRVQsIG5zKTsKLQlQVVRfMzJCRShwaCArIFBIX0ZJTEVTWiwgbm5vdGUpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9UWVBFLCBQVF9OT1RFKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfT0ZGU0VULCBucyk7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX0ZJTEVTWiwgbm5vdGUpOwogCiAJLyogZmlsbCBpbiB0aGUgbm90ZSBhcmVhIHdlIHBvaW50IHRvICovCiAJLyogWFhYIHdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBwcm9wZXIgc2VjdGlvbiAqLwotCVBVVF8zMkJFKG5zLCBzdHJsZW4oYXJjaCkgKyAxKTsKLQlQVVRfMzJCRShucyArIDQsIE5fREVTQ1IgKiA0KTsKLQlQVVRfMzJCRShucyArIDgsIDB4MTI3NSk7CisJUFVUXzMyQkUoYnVmLCBucywgc3RybGVuKGFyY2gpICsgMSk7CisJUFVUXzMyQkUoYnVmLCBucyArIDQsIE5fREVTQ1IgKiA0KTsKKwlQVVRfMzJCRShidWYsIG5zICsgOCwgMHgxMjc1KTsKIAlzdHJjcHkoKGNoYXIgKikgJmJ1ZltucyArIDEyXSwgYXJjaCk7CiAJbnMgKz0gMTIgKyBzdHJsZW4oYXJjaCkgKyAxOwogCWZvciAoaSA9IDA7IGkgPCBOX0RFU0NSOyArK2ksIG5zICs9IDQpCi0JCVBVVF8zMkJFKG5zLCBkZXNjcltpXSk7CisJCVBVVF8zMkJFKGJ1ZiwgbnMsIGRlc2NyW2ldKTsKIAogCS8qIGZpbGwgaW4gdGhlIHNlY29uZCBwcm9ncmFtIGhlYWRlciBlbnRyeSBhbmQgdGhlIFJQQSBub3RlIGFyZWEgKi8KIAlwaCArPSBwczsKLQlQVVRfMzJCRShwaCArIFBIX1RZUEUsIFBUX05PVEUpOwotCVBVVF8zMkJFKHBoICsgUEhfT0ZGU0VULCBucyk7Ci0JUFVUXzMyQkUocGggKyBQSF9GSUxFU1osIG5ub3RlMik7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX1RZUEUsIFBUX05PVEUpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9PRkZTRVQsIG5zKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfRklMRVNaLCBubm90ZTIpOwogCiAJLyogZmlsbCBpbiB0aGUgbm90ZSBhcmVhIHdlIHBvaW50IHRvICovCi0JUFVUXzMyQkUobnMsIHN0cmxlbihycGFuYW1lKSArIDEpOwotCVBVVF8zMkJFKG5zICsgNCwgc2l6ZW9mKHJwYW5vdGUpKTsKLQlQVVRfMzJCRShucyArIDgsIDB4MTI3NTk5OTkpOwotCXN0cmNweSgoY2hhciAqKSAmYnVmW25zICsgMTJdLCBycGFuYW1lKTsKLQlucyArPSAxMiArIFJPVU5EVVAoc3RybGVuKHJwYW5hbWUpICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IE5fUlBBX0RFU0NSOyArK2ksIG5zICs9IDQpCi0JCVBVVF8zMkJFKG5zLCBycGFub3RlW2ldKTsKKwlpZiAocnBhcCkgeworCQkvKiBSUEEgbm90ZSBzdXBwbGllZCBpbiBmaWxlLCBqdXN0IGNvcHkgdGhlIHdob2xlIHRoaW5nIG92ZXIgKi8KKwkJbWVtY3B5KGJ1ZiArIG5zLCBycGFwLCBubm90ZTIpOworCX0gZWxzZSB7CisJCVBVVF8zMkJFKGJ1ZiwgbnMsIHN0cmxlbihycGFuYW1lKSArIDEpOworCQlQVVRfMzJCRShidWYsIG5zICsgNCwgc2l6ZW9mKHJwYW5vdGUpKTsKKwkJUFVUXzMyQkUoYnVmLCBucyArIDgsIDB4MTI3NTk5OTkpOworCQlzdHJjcHkoKGNoYXIgKikgJmJ1ZltucyArIDEyXSwgcnBhbmFtZSk7CisJCW5zICs9IDEyICsgUk9VTkRVUChzdHJsZW4ocnBhbmFtZSkgKyAxKTsKKwkJZm9yIChpID0gMDsgaSA8IE5fUlBBX0RFU0NSOyArK2ksIG5zICs9IDQpCisJCQlQVVRfMzJCRShidWYsIG5zLCBycGFub3RlW2ldKTsKKwl9CiAKIAkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KLQlQVVRfMTZCRShFX1BITlVNLCBucCArIDIpOworCVBVVF8xNkJFKGJ1ZiwgRV9QSE5VTSwgbnAgKyAyKTsKIAogCS8qIHdyaXRlIGJhY2sgKi8KIAlsc2VlayhmZCwgKGxvbmcpIDAsIFNFRUtfU0VUKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9NYWtlZmlsZS5kdGMKaW5kZXggZDYwN2ZkYi4uNmRkZjllYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9NYWtlZmlsZS5kdGMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9NYWtlZmlsZS5kdGMKQEAgLTUsMjEgKzUsNSBAQAogIwogRFRDX1NSQ1MgPSBkdGMuYyBmbGF0dHJlZS5jIGZzdHJlZS5jIGRhdGEuYyBsaXZldHJlZS5jIHRyZWVzb3VyY2UuYyBzcmNwb3MuYyBcCiAJY2hlY2tzLmMKLURUQ19FWFRSQSA9IGR0Yy5oIHNyY3Bvcy5oCi1EVENfTEVYRklMRVMgPSBkdGMtbGV4ZXIubAotRFRDX0JJU09ORklMRVMgPSBkdGMtcGFyc2VyLnkKLQotRFRDX0xFWF9TUkNTID0gJChEVENfTEVYRklMRVM6JS5sPSUubGV4LmMpCi1EVENfQklTT05fU1JDUyA9ICQoRFRDX0JJU09ORklMRVM6JS55PSUudGFiLmMpCi1EVENfQklTT05fSU5DTFVERVMgPSAkKERUQ19CSVNPTkZJTEVTOiUueT0lLnRhYi5oKQotCi1EVENfR0VOX1NSQ1MgPSAkKERUQ19MRVhfU1JDUykgJChEVENfQklTT05fU1JDUykKLURUQ19HRU5fQUxMID0gJChEVENfR0VOX1NSQ1MpICQoRFRDX0JJU09OX0lOQ0xVREVTKQorRFRDX0dFTl9TUkNTID0gZHRjLWxleGVyLmxleC5jIGR0Yy1wYXJzZXIudGFiLmMKIERUQ19PQkpTID0gJChEVENfU1JDUzolLmM9JS5vKSAkKERUQ19HRU5fU1JDUzolLmM9JS5vKQotCi1EVENfQ0xFQU5GSUxFUyA9ICQoRFRDX0dFTl9BTEwpCi0KLSMgV2UgYXNzdW1lIHRoZSBjb250YWluaW5nIE1ha2VmaWxlIHN5c3RlbSBjYW4gZG8gYXV0by1kZXBlbmRlbmNpZXMgZm9yIG1vc3QKLSMgdGhpbmdzLCBidXQgd2Ugc3VwcGx5IHRoZSBkZXBlbmRlbmNpZXMgb24gZ2VuZXJhdGVkIGhlYWRlciBmaWxlcyBleHBsaWNpdGx5Ci0KLSQoYWRkcHJlZml4ICQoRFRDX29iamRpcikvLCQoRFRDX0dFTl9TUkNTOiUuYz0lLm8pKTogJChhZGRwcmVmaXggJChEVENfb2JqZGlyKS8sJChEVENfQklTT05fSU5DTFVERVMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9jaGVja3MuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvY2hlY2tzLmMKaW5kZXggMmNlOTYxYy4uOTU0ODU3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9jaGVja3MuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2NoZWNrcy5jCkBAIC0yNDIsNiArMjQyLDQyIEBACiB9CiBOT0RFX0NIRUNLKGR1cGxpY2F0ZV9wcm9wZXJ0eV9uYW1lcywgTlVMTCwgRVJST1IpOwogCisjZGVmaW5lIExPV0VSQ0FTRQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisjZGVmaW5lIFVQUEVSQ0FTRQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisjZGVmaW5lIERJR0lUUwkJIjAxMjM0NTY3ODkiCisjZGVmaW5lIFBST1BOT0RFQ0hBUlMJTE9XRVJDQVNFIFVQUEVSQ0FTRSBESUdJVFMgIiwuXysqIz8tIgorCitzdGF0aWMgdm9pZCBjaGVja19ub2RlX25hbWVfY2hhcnMoc3RydWN0IGNoZWNrICpjLCBzdHJ1Y3Qgbm9kZSAqZHQsCisJCQkJICBzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlpbnQgbiA9IHN0cnNwbihub2RlLT5uYW1lLCBjLT5kYXRhKTsKKworCWlmIChuIDwgc3RybGVuKG5vZGUtPm5hbWUpKQorCQlGQUlMKGMsICJCYWQgY2hhcmFjdGVyICclYycgaW4gbm9kZSAlcyIsCisJCSAgICAgbm9kZS0+bmFtZVtuXSwgbm9kZS0+ZnVsbHBhdGgpOworfQorTk9ERV9DSEVDSyhub2RlX25hbWVfY2hhcnMsIFBST1BOT0RFQ0hBUlMgIkAiLCBFUlJPUik7CisKK3N0YXRpYyB2b2lkIGNoZWNrX25vZGVfbmFtZV9mb3JtYXQoc3RydWN0IGNoZWNrICpjLCBzdHJ1Y3Qgbm9kZSAqZHQsCisJCQkJICAgc3RydWN0IG5vZGUgKm5vZGUpCit7CisJaWYgKHN0cmNocihnZXRfdW5pdG5hbWUobm9kZSksICdAJykpCisJCUZBSUwoYywgIk5vZGUgJXMgaGFzIG11bHRpcGxlICdAJyBjaGFyYWN0ZXJzIGluIG5hbWUiLAorCQkgICAgIG5vZGUtPmZ1bGxwYXRoKTsKK30KK05PREVfQ0hFQ0sobm9kZV9uYW1lX2Zvcm1hdCwgTlVMTCwgRVJST1IsICZub2RlX25hbWVfY2hhcnMpOworCitzdGF0aWMgdm9pZCBjaGVja19wcm9wZXJ0eV9uYW1lX2NoYXJzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAorCQkJCSAgICAgIHN0cnVjdCBub2RlICpub2RlLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCit7CisJaW50IG4gPSBzdHJzcG4ocHJvcC0+bmFtZSwgYy0+ZGF0YSk7CisKKwlpZiAobiA8IHN0cmxlbihwcm9wLT5uYW1lKSkKKwkJRkFJTChjLCAiQmFkIGNoYXJhY3RlciAnJWMnIGluIHByb3BlcnR5IG5hbWUgXCIlc1wiLCBub2RlICVzIiwKKwkJICAgICBwcm9wLT5uYW1lW25dLCBwcm9wLT5uYW1lLCBub2RlLT5mdWxscGF0aCk7Cit9CitQUk9QX0NIRUNLKHByb3BlcnR5X25hbWVfY2hhcnMsIFBST1BOT0RFQ0hBUlMsIEVSUk9SKTsKKwogc3RhdGljIHZvaWQgY2hlY2tfZXhwbGljaXRfcGhhbmRsZXMoc3RydWN0IGNoZWNrICpjLCBzdHJ1Y3Qgbm9kZSAqcm9vdCwKIAkJCQkJICBzdHJ1Y3Qgbm9kZSAqbm9kZSkKIHsKQEAgLTI4MCwxNiArMzE2LDI5IEBACiBzdGF0aWMgdm9pZCBjaGVja19uYW1lX3Byb3BlcnRpZXMoc3RydWN0IGNoZWNrICpjLCBzdHJ1Y3Qgbm9kZSAqcm9vdCwKIAkJCQkgIHN0cnVjdCBub2RlICpub2RlKQogewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgcHJvcGVydHkgKipwcCwgKnByb3AgPSBOVUxMOwogCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCAibmFtZSIpOworCWZvciAocHAgPSAmbm9kZS0+cHJvcGxpc3Q7ICpwcDsgcHAgPSAmKCgqcHApLT5uZXh0KSkKKwkJaWYgKHN0cmVxKCgqcHApLT5uYW1lLCAibmFtZSIpKSB7CisJCQlwcm9wID0gKnBwOworCQkJYnJlYWs7CisJCX0KKwogCWlmICghcHJvcCkKIAkJcmV0dXJuOyAvKiBObyBuYW1lIHByb3BlcnR5LCB0aGF0J3MgZmluZSAqLwogCiAJaWYgKChwcm9wLT52YWwubGVuICE9IG5vZGUtPmJhc2VuYW1lbGVuKzEpCi0JICAgIHx8IChtZW1jbXAocHJvcC0+dmFsLnZhbCwgbm9kZS0+bmFtZSwgbm9kZS0+YmFzZW5hbWVsZW4pICE9IDApKQorCSAgICB8fCAobWVtY21wKHByb3AtPnZhbC52YWwsIG5vZGUtPm5hbWUsIG5vZGUtPmJhc2VuYW1lbGVuKSAhPSAwKSkgewogCQlGQUlMKGMsICJcIm5hbWVcIiBwcm9wZXJ0eSBpbiAlcyBpcyBpbmNvcnJlY3QgKFwiJXNcIiBpbnN0ZWFkIgogCQkgICAgICIgb2YgYmFzZSBub2RlIG5hbWUpIiwgbm9kZS0+ZnVsbHBhdGgsIHByb3AtPnZhbC52YWwpOworCX0gZWxzZSB7CisJCS8qIFRoZSBuYW1lIHByb3BlcnR5IGlzIGNvcnJlY3QsIGFuZCB0aGVyZWZvcmUgcmVkdW5kYW50LgorCQkgKiBEZWxldGUgaXQgKi8KKwkJKnBwID0gcHJvcC0+bmV4dDsKKwkJZnJlZShwcm9wLT5uYW1lKTsKKwkJZGF0YV9mcmVlKHByb3AtPnZhbCk7CisJCWZyZWUocHJvcCk7CisJfQogfQogQ0hFQ0tfSVNfU1RSSU5HKG5hbWVfaXNfc3RyaW5nLCAibmFtZSIsIEVSUk9SKTsKIE5PREVfQ0hFQ0sobmFtZV9wcm9wZXJ0aWVzLCBOVUxMLCBFUlJPUiwgJm5hbWVfaXNfc3RyaW5nKTsKQEAgLTMwMSwyMyArMzUwLDIzIEBACiBzdGF0aWMgdm9pZCBmaXh1cF9waGFuZGxlX3JlZmVyZW5jZXMoc3RydWN0IGNoZWNrICpjLCBzdHJ1Y3Qgbm9kZSAqZHQsCiAJCQkJICAgICBzdHJ1Y3Qgbm9kZSAqbm9kZSwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQogewotICAgICAgc3RydWN0IG1hcmtlciAqbSA9IHByb3AtPnZhbC5tYXJrZXJzOwotICAgICAgc3RydWN0IG5vZGUgKnJlZm5vZGU7Ci0gICAgICBjZWxsX3QgcGhhbmRsZTsKKwlzdHJ1Y3QgbWFya2VyICptID0gcHJvcC0+dmFsLm1hcmtlcnM7CisJc3RydWN0IG5vZGUgKnJlZm5vZGU7CisJY2VsbF90IHBoYW5kbGU7CiAKLSAgICAgIGZvcl9lYWNoX21hcmtlcl9vZl90eXBlKG0sIFJFRl9QSEFORExFKSB7Ci0JICAgICAgYXNzZXJ0KG0tPm9mZnNldCArIHNpemVvZihjZWxsX3QpIDw9IHByb3AtPnZhbC5sZW4pOworCWZvcl9lYWNoX21hcmtlcl9vZl90eXBlKG0sIFJFRl9QSEFORExFKSB7CisJCWFzc2VydChtLT5vZmZzZXQgKyBzaXplb2YoY2VsbF90KSA8PSBwcm9wLT52YWwubGVuKTsKIAotCSAgICAgIHJlZm5vZGUgPSBnZXRfbm9kZV9ieV9yZWYoZHQsIG0tPnJlZik7Ci0JICAgICAgaWYgKCEgcmVmbm9kZSkgewotCQkgICAgICBGQUlMKGMsICJSZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IG5vZGUgb3IgbGFiZWwgXCIlc1wiXG4iLAotCQkJICAgbS0+cmVmKTsKLQkJICAgICAgY29udGludWU7Ci0JICAgICAgfQorCQlyZWZub2RlID0gZ2V0X25vZGVfYnlfcmVmKGR0LCBtLT5yZWYpOworCQlpZiAoISByZWZub2RlKSB7CisJCQlGQUlMKGMsICJSZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IG5vZGUgb3IgbGFiZWwgXCIlc1wiXG4iLAorCQkJICAgICBtLT5yZWYpOworCQkJY29udGludWU7CisJCX0KIAotCSAgICAgIHBoYW5kbGUgPSBnZXRfbm9kZV9waGFuZGxlKGR0LCByZWZub2RlKTsKLQkgICAgICAqKChjZWxsX3QgKikocHJvcC0+dmFsLnZhbCArIG0tPm9mZnNldCkpID0gY3B1X3RvX2JlMzIocGhhbmRsZSk7Ci0gICAgICB9CisJCXBoYW5kbGUgPSBnZXRfbm9kZV9waGFuZGxlKGR0LCByZWZub2RlKTsKKwkJKigoY2VsbF90ICopKHByb3AtPnZhbC52YWwgKyBtLT5vZmZzZXQpKSA9IGNwdV90b19mZHQzMihwaGFuZGxlKTsKKwl9CiB9CiBDSEVDSyhwaGFuZGxlX3JlZmVyZW5jZXMsIE5VTEwsIE5VTEwsIGZpeHVwX3BoYW5kbGVfcmVmZXJlbmNlcywgTlVMTCwgRVJST1IsCiAgICAgICAmZHVwbGljYXRlX25vZGVfbmFtZXMsICZleHBsaWNpdF9waGFuZGxlcyk7CkBAIC00OTgsNiArNTQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjaGVjayAqY2hlY2tfdGFibGVbXSA9IHsKIAkmZHVwbGljYXRlX25vZGVfbmFtZXMsICZkdXBsaWNhdGVfcHJvcGVydHlfbmFtZXMsCisJJm5vZGVfbmFtZV9jaGFycywgJm5vZGVfbmFtZV9mb3JtYXQsICZwcm9wZXJ0eV9uYW1lX2NoYXJzLAogCSZuYW1lX2lzX3N0cmluZywgJm5hbWVfcHJvcGVydGllcywKIAkmZXhwbGljaXRfcGhhbmRsZXMsCiAJJnBoYW5kbGVfcmVmZXJlbmNlcywgJnBhdGhfcmVmZXJlbmNlcywKQEAgLTUxMSwxMCArNTYxLDcgQEAKIAkmb2Jzb2xldGVfY2hvc2VuX2ludGVycnVwdF9jb250cm9sbGVyLAogfTsKIAotaW50IGNoZWNrX3NlbWFudGljcyhzdHJ1Y3Qgbm9kZSAqZHQsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKTsKLQotdm9pZCBwcm9jZXNzX2NoZWNrcyhpbnQgZm9yY2UsIHN0cnVjdCBib290X2luZm8gKmJpLAotCQkgICAgaW50IGNoZWNrZmxhZywgaW50IG91dHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpCit2b2lkIHByb2Nlc3NfY2hlY2tzKGludCBmb3JjZSwgc3RydWN0IGJvb3RfaW5mbyAqYmkpCiB7CiAJc3RydWN0IG5vZGUgKmR0ID0gYmktPmR0OwogCWludCBpOwpAQCAtNTM3LDIxNCArNTg0LDQgQEAKIAkJCQkib3V0cHV0IGZvcmNlZFxuIik7CiAJCX0KIAl9Ci0KLQlpZiAoY2hlY2tmbGFnKSB7Ci0JCWlmIChlcnJvcikgewotCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBTa2lwcGluZyBzZW1hbnRpYyBjaGVja3MgZHVlIHRvIHN0cnVjdHVyYWwgZXJyb3JzXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWlmICghY2hlY2tfc2VtYW50aWNzKGJpLT5kdCwgb3V0dmVyc2lvbiwKLQkJCQkJICAgICBib290X2NwdWlkX3BoeXMpKQotCQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogSW5wdXQgdHJlZSBoYXMgc2VtYW50aWMgZXJyb3JzXG4iKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIFNlbWFudGljIGNoZWNrIGZ1bmN0aW9ucwotICovCi0KLSNkZWZpbmUgRVJSTVNHKC4uLikgaWYgKHF1aWV0IDwgMikgZnByaW50ZihzdGRlcnIsICJFUlJPUjogIiBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgV0FSTk1TRyguLi4pIGlmIChxdWlldCA8IDEpIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogIiBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBET19FUlIoLi4uKSBkbyB7RVJSTVNHKF9fVkFfQVJHU19fKTsgb2sgPSAwOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkUobm9kZSwgcHJvcG5hbWUpIFwKLQlkbyB7IFwKLQkJaWYgKCEgKHByb3AgPSBnZXRfcHJvcGVydHkoKG5vZGUpLCAocHJvcG5hbWUpKSkpIFwKLQkJCURPX0VSUigiTWlzc2luZyBcIiVzXCIgcHJvcGVydHkgaW4gJXNcbiIsIChwcm9wbmFtZSksIFwKLQkJCQkobm9kZSktPmZ1bGxwYXRoKTsgXAotCX0gd2hpbGUgKDApOwotCi0jZGVmaW5lIENIRUNLX0hBVkVfV0FSTihub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlpZiAoISAocHJvcCAgPSBnZXRfcHJvcGVydHkoKG5vZGUpLCAocHJvcG5hbWUpKSkpIFwKLQkJCVdBUk5NU0coIiVzIGhhcyBubyBcIiVzXCIgcHJvcGVydHlcbiIsIFwKLQkJCQkobm9kZSktPmZ1bGxwYXRoLCAocHJvcG5hbWUpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfSEFWRV9TVFJJTkcobm9kZSwgcHJvcG5hbWUpIFwKLQlkbyB7IFwKLQkJQ0hFQ0tfSEFWRSgobm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wICYmICFkYXRhX2lzX29uZV9zdHJpbmcocHJvcC0+dmFsKSkgXAotCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgaXMgbm90IGEgc3RyaW5nXG4iLCBcCi0JCQkJKHByb3BuYW1lKSwgKG5vZGUpLT5mdWxscGF0aCk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfU1RSRVEobm9kZSwgcHJvcG5hbWUsIHZhbHVlKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkVfU1RSSU5HKChub2RlKSwgKHByb3BuYW1lKSk7IFwKLQkJaWYgKHByb3AgJiYgIXN0cmVxKHByb3AtPnZhbC52YWwsICh2YWx1ZSkpKSBcCi0JCQlET19FUlIoIiVzIGhhcyB3cm9uZyAlcywgJXMgKHNob3VsZCBiZSAlc1xuIiwgXAotCQkJCShub2RlKS0+ZnVsbHBhdGgsIChwcm9wbmFtZSksIFwKLQkJCQlwcm9wLT52YWwudmFsLCAodmFsdWUpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfSEFWRV9PTkVDRUxMKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkUoKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAocHJvcC0+dmFsLmxlbiAhPSBzaXplb2YoY2VsbF90KSkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGhhcyB3cm9uZyBzaXplICVkIChzaG91bGQgYmUgMSBjZWxsKVxuIiwgKHByb3BuYW1lKSwgKG5vZGUpLT5mdWxscGF0aCwgcHJvcC0+dmFsLmxlbik7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfV0FSTl9PTkVDRUxMKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkVfV0FSTigobm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wICYmIChwcm9wLT52YWwubGVuICE9IHNpemVvZihjZWxsX3QpKSkgXAotCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgaGFzIHdyb25nIHNpemUgJWQgKHNob3VsZCBiZSAxIGNlbGwpXG4iLCAocHJvcG5hbWUpLCAobm9kZSktPmZ1bGxwYXRoLCBwcm9wLT52YWwubGVuKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfSEFWRV9XQVJOX1BIQU5ETEUoeG5vZGUsIHByb3BuYW1lLCByb290KSBcCi0JZG8geyBcCi0JCXN0cnVjdCBub2RlICpyZWY7IFwKLQkJQ0hFQ0tfSEFWRV9XQVJOX09ORUNFTEwoKHhub2RlKSwgKHByb3BuYW1lKSk7IFwKLQkJaWYgKHByb3ApIHtcCi0JCQljZWxsX3QgcGhhbmRsZSA9IHByb3B2YWxfY2VsbChwcm9wKTsgXAotCQkJaWYgKChwaGFuZGxlID09IDApIHx8IChwaGFuZGxlID09IC0xKSkgeyBcCi0JCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgY29udGFpbnMgYW4gaW52YWxpZCBwaGFuZGxlICV4XG4iLCAocHJvcG5hbWUpLCAoeG5vZGUpLT5mdWxscGF0aCwgcGhhbmRsZSk7IFwKLQkJCX0gZWxzZSB7IFwKLQkJCQlyZWYgPSBnZXRfbm9kZV9ieV9waGFuZGxlKChyb290KSwgcHJvcHZhbF9jZWxsKHByb3ApKTsgXAotCQkJCWlmICghIHJlZikgXAotCQkJCQlET19FUlIoIlwiJXNcIiBwcm9wZXJ0eSBpbiAlcyByZWZlcnMgdG8gbm9uLWV4aXN0YW50IHBoYW5kbGUgJXhcbiIsIChwcm9wbmFtZSksICh4bm9kZSktPmZ1bGxwYXRoLCBwcm9wdmFsX2NlbGwocHJvcCkpOyBcCi0JCQl9IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFX1dBUk5fU1RSSU5HKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkVfV0FSTigobm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wICYmICFkYXRhX2lzX29uZV9zdHJpbmcocHJvcC0+dmFsKSkgXAotCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgaXMgbm90IGEgc3RyaW5nXG4iLCBcCi0JCQkJKHByb3BuYW1lKSwgKG5vZGUpLT5mdWxscGF0aCk7IFwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50IGNoZWNrX3Jvb3Qoc3RydWN0IG5vZGUgKnJvb3QpCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCWludCBvayA9IDE7Ci0KLQlDSEVDS19IQVZFX1NUUklORyhyb290LCAibW9kZWwiKTsKLQlDSEVDS19IQVZFX1dBUk4ocm9vdCwgImNvbXBhdGlibGUiKTsKLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGludCBjaGVja19jcHVzKHN0cnVjdCBub2RlICpyb290LCBpbnQgb3V0dmVyc2lvbiwgaW50IGJvb3RfY3B1aWRfcGh5cykKLXsKLQlzdHJ1Y3Qgbm9kZSAqY3B1cywgKmNwdTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IG5vZGUgKmJvb3RjcHUgPSBOVUxMOwotCWludCBvayA9IDE7Ci0KLQljcHVzID0gZ2V0X3N1Ym5vZGUocm9vdCwgImNwdXMiKTsKLQlpZiAoISBjcHVzKSB7Ci0JCUVSUk1TRygiTWlzc2luZyAvY3B1cyBub2RlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGNwdXMtPmFkZHJfY2VsbHMgIT0gMSkKLQkJRE9fRVJSKCIlcyBoYXMgYmFkICNhZGRyZXNzLWNlbGxzIHZhbHVlICVkIChzaG91bGQgYmUgMSlcbiIsCi0JCSAgICAgICBjcHVzLT5mdWxscGF0aCwgY3B1cy0+YWRkcl9jZWxscyk7Ci0JaWYgKGNwdXMtPnNpemVfY2VsbHMgIT0gMCkKLQkJRE9fRVJSKCIlcyBoYXMgYmFkICNzaXplLWNlbGxzIHZhbHVlICVkIChzaG91bGQgYmUgMClcbiIsCi0JCSAgICAgICBjcHVzLT5mdWxscGF0aCwgY3B1cy0+c2l6ZV9jZWxscyk7Ci0KLQlmb3JfZWFjaF9jaGlsZChjcHVzLCBjcHUpIHsKLQkJQ0hFQ0tfSEFWRV9TVFJFUShjcHUsICJkZXZpY2VfdHlwZSIsICJjcHUiKTsKLQotCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAicmVnIik7Ci0JCWlmIChwcm9wKSB7Ci0JCQljZWxsX3QgdW5pdG51bTsKLQkJCWNoYXIgKmVwdHI7Ci0KLQkJCXVuaXRudW0gPSBzdHJ0b2woZ2V0X3VuaXRuYW1lKGNwdSksICZlcHRyLCAxNik7Ci0JCQlpZiAoKmVwdHIpIHsKLQkJCQlXQVJOTVNHKCIlcyBoYXMgYmFkIGZvcm1hdCB1bml0IG5hbWUgJXMgKHNob3VsZCBiZSBDUFUgbnVtYmVyXG4iLAotCQkJCQljcHUtPmZ1bGxwYXRoLCBnZXRfdW5pdG5hbWUoY3B1KSk7Ci0JCQl9IGVsc2UgaWYgKHVuaXRudW0gIT0gcHJvcHZhbF9jZWxsKHByb3ApKSB7Ci0JCQkJV0FSTk1TRygiJXMgdW5pdCBuYW1lIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBcInJlZ1wiIHByb3BlcnR5IDwleD5cbiIsCi0JCQkJICAgICAgIGNwdS0+ZnVsbHBhdGgsIGdldF91bml0bmFtZShjcHUpLAotCQkJCSAgICAgICBwcm9wdmFsX2NlbGwocHJvcCkpOwotCQkJfQotCQl9Ci0KLS8qIAkJQ0hFQ0tfSEFWRV9PTkVDRUxMKGNwdSwgImQtY2FjaGUtbGluZS1zaXplIik7ICovCi0vKiAJCUNIRUNLX0hBVkVfT05FQ0VMTChjcHUsICJpLWNhY2hlLWxpbmUtc2l6ZSIpOyAqLwotCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAiZC1jYWNoZS1zaXplIik7Ci0JCUNIRUNLX0hBVkVfT05FQ0VMTChjcHUsICJpLWNhY2hlLXNpemUiKTsKLQotCQlDSEVDS19IQVZFX1dBUk5fT05FQ0VMTChjcHUsICJjbG9jay1mcmVxdWVuY3kiKTsKLQkJQ0hFQ0tfSEFWRV9XQVJOX09ORUNFTEwoY3B1LCAidGltZWJhc2UtZnJlcXVlbmN5Iik7Ci0KLQkJcHJvcCA9IGdldF9wcm9wZXJ0eShjcHUsICJsaW51eCxib290LWNwdSIpOwotCQlpZiAocHJvcCkgewotCQkJaWYgKHByb3AtPnZhbC5sZW4pCi0JCQkJV0FSTk1TRygiXCJsaW51eCxib290LWNwdVwiIHByb3BlcnR5IGluICVzIGlzIG5vbi1lbXB0eVxuIiwKLQkJCQkJY3B1LT5mdWxscGF0aCk7Ci0JCQlpZiAoYm9vdGNwdSkKLQkJCQlET19FUlIoIk11bHRpcGxlIGJvb3QgY3B1cyAoJXMgYW5kICVzKVxuIiwKLQkJCQkgICAgICAgYm9vdGNwdS0+ZnVsbHBhdGgsIGNwdS0+ZnVsbHBhdGgpOwotCQkJZWxzZQotCQkJCWJvb3RjcHUgPSBjcHU7Ci0JCX0KLQl9Ci0KLQlpZiAob3V0dmVyc2lvbiA8IDIpIHsKLQkJaWYgKCEgYm9vdGNwdSkKLQkJCVdBUk5NU0coIk5vIGNwdSBoYXMgXCJsaW51eCxib290LWNwdVwiIHByb3BlcnR5XG4iKTsKLQl9IGVsc2UgewotCQlpZiAoYm9vdGNwdSkKLQkJCVdBUk5NU0coIlwibGludXgsYm9vdC1jcHVcIiBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGluIGJsb2IgdmVyc2lvbiAyIG9yIGhpZ2hlclxuIik7Ci0JCWlmIChib290X2NwdWlkX3BoeXMgPT0gMHhmZWVkYmVlZikKLQkJCVdBUk5NU0coInBoeXNpY2FsIGJvb3QgQ1BVIG5vdCBzZXQuICBVc2UgLWIgb3B0aW9uIHRvIHNldFxuIik7Ci0JfQotCi0JcmV0dXJuIG9rOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX21lbW9yeShzdHJ1Y3Qgbm9kZSAqcm9vdCkKLXsKLQlzdHJ1Y3Qgbm9kZSAqbWVtOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlpbnQgbm5vZGVzID0gMDsKLQlpbnQgb2sgPSAxOwotCi0JZm9yX2VhY2hfY2hpbGQocm9vdCwgbWVtKSB7Ci0JCWlmICghIHN0cm5lcShtZW0tPm5hbWUsICJtZW1vcnkiLCBtZW0tPmJhc2VuYW1lbGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCW5ub2RlcysrOwotCi0JCUNIRUNLX0hBVkVfU1RSRVEobWVtLCAiZGV2aWNlX3R5cGUiLCAibWVtb3J5Iik7Ci0JCUNIRUNLX0hBVkUobWVtLCAicmVnIik7Ci0JfQotCi0JaWYgKG5ub2RlcyA9PSAwKSB7Ci0JCUVSUk1TRygiTm8gbWVtb3J5IG5vZGVzXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIG9rOwotfQotCi1pbnQgY2hlY2tfc2VtYW50aWNzKHN0cnVjdCBub2RlICpkdCwgaW50IG91dHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpCi17Ci0JaW50IG9rID0gMTsKLQotCW9rID0gb2sgJiYgY2hlY2tfcm9vdChkdCk7Ci0Jb2sgPSBvayAmJiBjaGVja19jcHVzKGR0LCBvdXR2ZXJzaW9uLCBib290X2NwdWlkX3BoeXMpOwotCW9rID0gb2sgJiYgY2hlY2tfbWVtb3J5KGR0KTsKLQlpZiAoISBvaykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kYXRhLmMKaW5kZXggYTk0NzE4Yy4uZGQyZTNkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kYXRhLmMKQEAgLTMyLDggKzMyLDYgQEAKIAkJbSA9IG5tOwogCX0KIAotCWFzc2VydCghZC52YWwgfHwgZC5hc2l6ZSk7Ci0KIAlpZiAoZC52YWwpCiAJCWZyZWUoZC52YWwpOwogfQpAQCAtNDMsOSArNDEsNiBAQAogCXN0cnVjdCBkYXRhIG5kOwogCWludCBuZXdzaXplOwogCi0JLyogd2UgbXVzdCBzdGFydCB3aXRoIGFuIGFsbG9jYXRlZCBkYXR1bSAqLwotCWFzc2VydCghZC52YWwgfHwgZC5hc2l6ZSk7Ci0KIAlpZiAoeGxlbiA9PSAwKQogCQlyZXR1cm4gZDsKIApAQCAtNTYsMTEgKzUxLDggQEAKIAl3aGlsZSAoKGQubGVuICsgeGxlbikgPiBuZXdzaXplKQogCQluZXdzaXplICo9IDI7CiAKLQluZC5hc2l6ZSA9IG5ld3NpemU7CiAJbmQudmFsID0geHJlYWxsb2MoZC52YWwsIG5ld3NpemUpOwogCi0JYXNzZXJ0KG5kLmFzaXplID49IChkLmxlbiArIHhsZW4pKTsKLQogCXJldHVybiBuZDsKIH0KIApAQCAtODMsMTYgKzc1LDExIEBACiAJbG9uZyB2YWw7CiAKIAl4WzNdID0gJ1wwJzsKLQl4WzBdID0gc1soKmkpXTsKLQlpZiAoeFswXSkgewotCQl4WzFdID0gc1soKmkpKzFdOwotCQlpZiAoeFsxXSkKLQkJCXhbMl0gPSBzWygqaSkrMl07Ci0JfQorCXN0cm5jcHkoeCwgcyArICppLCAzKTsKIAogCXZhbCA9IHN0cnRvbCh4LCAmZW5keCwgOCk7Ci0JaWYgKChlbmR4IC0geCkgPT0gMCkKLQkJZnByaW50ZihzdGRlcnIsICJFbXB0eSBcXG5ubiBlc2NhcGVcbiIpOworCisJYXNzZXJ0KGVuZHggPiB4KTsKIAogCSgqaSkgKz0gZW5keCAtIHg7CiAJcmV0dXJuIHZhbDsKQEAgLTEwNSwxMyArOTIsMTEgQEAKIAlsb25nIHZhbDsKIAogCXhbMl0gPSAnXDAnOwotCXhbMF0gPSBzWygqaSldOwotCWlmICh4WzBdKQotCQl4WzFdID0gc1soKmkpKzFdOworCXN0cm5jcHkoeCwgcyArICppLCAyKTsKIAogCXZhbCA9IHN0cnRvbCh4LCAmZW5keCwgMTYpOwotCWlmICgoZW5keCAtIHgpID09IDApCi0JCWZwcmludGYoc3RkZXJyLCAiRW1wdHkgXFx4IGVzY2FwZVxuIik7CisJaWYgKCEoZW5keCAgPiB4KSkKKwkJZGllKCJcXHggdXNlZCB3aXRoIG5vIGZvbGxvd2luZyBoZXggZGlnaXRzXG4iKTsKIAogCSgqaSkgKz0gZW5keCAtIHg7CiAJcmV0dXJuIHZhbDsKQEAgLTE4MiwxNCArMTY3LDI5IEBACiAJcmV0dXJuIGQ7CiB9CiAKLXN0cnVjdCBkYXRhIGRhdGFfY29weV9maWxlKEZJTEUgKmYsIHNpemVfdCBsZW4pCitzdHJ1Y3QgZGF0YSBkYXRhX2NvcHlfZmlsZShGSUxFICpmLCBzaXplX3QgbWF4bGVuKQogewotCXN0cnVjdCBkYXRhIGQ7CisJc3RydWN0IGRhdGEgZCA9IGVtcHR5X2RhdGE7CiAKLQlkID0gZGF0YV9ncm93X2ZvcihlbXB0eV9kYXRhLCBsZW4pOworCXdoaWxlICghZmVvZihmKSAmJiAoZC5sZW4gPCBtYXhsZW4pKSB7CisJCXNpemVfdCBjaHVua3NpemUsIHJldDsKIAotCWQubGVuID0gbGVuOwotCWZyZWFkKGQudmFsLCBsZW4sIDEsIGYpOworCQlpZiAobWF4bGVuID09IC0xKQorCQkJY2h1bmtzaXplID0gNDA5NjsKKwkJZWxzZQorCQkJY2h1bmtzaXplID0gbWF4bGVuIC0gZC5sZW47CisKKwkJZCA9IGRhdGFfZ3Jvd19mb3IoZCwgY2h1bmtzaXplKTsKKwkJcmV0ID0gZnJlYWQoZC52YWwgKyBkLmxlbiwgMSwgY2h1bmtzaXplLCBmKTsKKworCQlpZiAoZmVycm9yKGYpKQorCQkJZGllKCJFcnJvciByZWFkaW5nIGZpbGUgaW50byBkYXRhOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwkJaWYgKGQubGVuICsgcmV0IDwgZC5sZW4pCisJCQlkaWUoIk92ZXJmbG93IHJlYWRpbmcgZmlsZSBpbnRvIGRhdGFcbiIpOworCisJCWQubGVuICs9IHJldDsKKwl9CiAKIAlyZXR1cm4gZDsKIH0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9jZWxsKHN0cnVjdCBkYXRhIGQsIGNlbGxfdCB3b3JkKQogewotCWNlbGxfdCBiZXdvcmQgPSBjcHVfdG9fYmUzMih3b3JkKTsKKwljZWxsX3QgYmV3b3JkID0gY3B1X3RvX2ZkdDMyKHdvcmQpOwogCiAJcmV0dXJuIGRhdGFfYXBwZW5kX2RhdGEoZCwgJmJld29yZCwgc2l6ZW9mKGJld29yZCkpOwogfQpAQCAtMjU2LDE1ICsyNTYsMTUgQEAKIHsKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgYmVyZTsKIAotCWJlcmUuYWRkcmVzcyA9IGNwdV90b19iZTY0KHJlLT5hZGRyZXNzKTsKLQliZXJlLnNpemUgPSBjcHVfdG9fYmU2NChyZS0+c2l6ZSk7CisJYmVyZS5hZGRyZXNzID0gY3B1X3RvX2ZkdDY0KHJlLT5hZGRyZXNzKTsKKwliZXJlLnNpemUgPSBjcHVfdG9fZmR0NjQocmUtPnNpemUpOwogCiAJcmV0dXJuIGRhdGFfYXBwZW5kX2RhdGEoZCwgJmJlcmUsIHNpemVvZihiZXJlKSk7CiB9CiAKLXN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX2FkZHIoc3RydWN0IGRhdGEgZCwgdTY0IGFkZHIpCitzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHVpbnQ2NF90IGFkZHIpCiB7Ci0JdTY0IGJlYWRkciA9IGNwdV90b19iZTY0KGFkZHIpOworCXVpbnQ2NF90IGJlYWRkciA9IGNwdV90b19mZHQ2NChhZGRyKTsKIAogCXJldHVybiBkYXRhX2FwcGVuZF9kYXRhKGQsICZiZWFkZHIsIHNpemVvZihiZWFkZHIpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmwgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sCmluZGV4IGM4MTFiMjIuLjQ0ZGJmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubApAQCAtMjgsNiArMjgsMTAgQEAKIFBST1BOT0RFQ0hBUglbYS16QS1aMC05LC5fKyojP0AtXQogUEFUSENIQVIJKHtQUk9QTk9ERUNIQVJ9fFsvXSkKIExBQkVMCQlbYS16QS1aX11bYS16QS1aMC05X10qCitTVFJJTkcJCVwiKFteXFwiXXxcXC4pKlwiCitXUwkJW1s6c3BhY2U6XV0KK0NPTU1FTlQJCSIvKiIoW14qXXxcKitbXiovXSkqXCorIi8iCitMSU5FQ09NTUVOVAkiLy8iLipcbgogCiAlewogI2luY2x1ZGUgImR0Yy5oIgpAQCAtNTIsMjkgKzU2LDI2IEBACiAJCQkJRFBSSU5UKCI8VjE+XG4iKTsgXAogCQkJCUJFR0lOKFYxKTsgXAogCQkJfQorCitzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKTsKICV9CiAKICUlCi08Kj4iL2luY2x1ZGUvIgkJQkVHSU4oSU5DTFVERSk7Ci0KLTxJTkNMVURFPlwiW14iXG5dKlwiCXsKLQkJCXl5dGV4dFtzdHJsZW4oeXl0ZXh0KSAtIDFdID0gMDsKLQkJCWlmICghcHVzaF9pbnB1dF9maWxlKHl5dGV4dCArIDEpKSB7Ci0JCQkJLyogU29tZSB1bnJlY292ZXJhYmxlIGVycm9yLiovCi0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJCUJFR0lOX0RFRkFVTFQoKTsKKzwqPiIvaW5jbHVkZS8ie1dTfSp7U1RSSU5HfSB7CisJCQljaGFyICpuYW1lID0gc3RyY2hyKHl5dGV4dCwgJ1wiJykgKyAxOworCQkJeXl0ZXh0W3l5bGVuZy0xXSA9ICdcMCc7CisJCQlwdXNoX2lucHV0X2ZpbGUobmFtZSk7CiAJCX0KIAotCiA8Kj48PEVPRj4+CQl7CiAJCQlpZiAoIXBvcF9pbnB1dF9maWxlKCkpIHsKIAkJCQl5eXRlcm1pbmF0ZSgpOwogCQkJfQogCQl9CiAKLTwqPlwiKFteXFwiXXxcXC4pKlwiCXsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07Cis8Kj57U1RSSU5HfQl7CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiU3RyaW5nOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5kYXRhID0gZGF0YV9jb3B5X2VzY2FwZV9zdHJpbmcoeXl0ZXh0KzEsCkBAIC04NCw3ICs4NSw3IEBACiAJCX0KIAogPCo+Ii9kdHMtdjEvIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIktleXdvcmQ6IC9kdHMtdjEvXG4iKTsKIAkJCWR0c192ZXJzaW9uID0gMTsKQEAgLTkzLDcgKzk0LDcgQEAKIAkJfQogCiA8Kj4iL21lbXJlc2VydmUvIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIktleXdvcmQ6IC9tZW1yZXNlcnZlL1xuIik7CiAJCQlCRUdJTl9ERUZBVUxUKCk7CkBAIC0xMDEsNyArMTAyLDcgQEAKIAkJfQogCiA8Kj57TEFCRUx9Ogl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIkxhYmVsOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5sYWJlbHJlZiA9IHN0cmR1cCh5eXRleHQpOwpAQCAtMTEwLDcgKzExMSw3IEBACiAJCX0KIAogPElOSVRJQUw+W2JvZGhdIyB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlpZiAoKnl5dGV4dCA9PSAnYicpCiAJCQkJeXlsdmFsLmNiYXNlID0gMjsKQEAgLTEyNSw3ICsxMjYsNyBAQAogCQl9CiAKIDxJTklUSUFMPlswLTlhLWZBLUZdKwl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eWx2YWwubGl0ZXJhbCA9IHN0cmR1cCh5eXRleHQpOwogCQkJRFBSSU5UKCJMaXRlcmFsOiAnJXMnXG4iLCB5eWx2YWwubGl0ZXJhbCk7CkBAIC0xMzMsNyArMTM0LDcgQEAKIAkJfQogCiA8VjE+WzAtOV0rfDBbeFhdWzAtOWEtZkEtRl0rICAgICAgewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwpAQCAtMTQxLDcgKzE0Miw3IEBACiAJCX0KIAogXCZ7TEFCRUx9CXsJLyogbGFiZWwgcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlJlZjogJXNcbiIsIHl5dGV4dCsxKTsKIAkJCXl5bHZhbC5sYWJlbHJlZiA9IHN0cmR1cCh5eXRleHQrMSk7CkBAIC0xNDksNyArMTUwLDcgQEAKIAkJfQogCiAiJnsvIntQQVRIQ0hBUn0rXH0JewkvKiBuZXctc3R5bGUgcGF0aCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMik7CkBAIC0xNTgsNyArMTU5LDcgQEAKIAkJfQogCiA8SU5JVElBTD4iJi8ie1BBVEhDSEFSfSsgewkvKiBvbGQtc3R5bGUgcGF0aCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzEpOwogCQkJeXlsdmFsLmxhYmVscmVmID0gc3RyZHVwKHl5dGV4dCsxKTsKQEAgLTE2Niw3ICsxNjcsNyBAQAogCQl9CiAKIDxCWVRFU1RSSU5HPlswLTlhLWZBLUZdezJ9IHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5ieXRlID0gc3RydG9sKHl5dGV4dCwgTlVMTCwgMTYpOwogCQkJRFBSSU5UKCJCeXRlOiAlMDJ4XG4iLCAoaW50KXl5bHZhbC5ieXRlKTsKQEAgLTE3NCw3ICsxNzUsNyBAQAogCQl9CiAKIDxCWVRFU1RSSU5HPiJdIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIi9CWVRFU1RSSU5HXG4iKTsKIAkJCUJFR0lOX0RFRkFVTFQoKTsKQEAgLTE4Miw3ICsxODMsNyBAQAogCQl9CiAKIDxQUk9QTk9ERU5BTUU+e1BST1BOT0RFQ0hBUn0rIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUHJvcE5vZGVOYW1lOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5wcm9wbm9kZW5hbWUgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTE5MCwyMCArMTkxLDE5IEBACiAJCQlyZXR1cm4gRFRfUFJPUE5PREVOQU1FOwogCQl9CiAKLQotPCo+W1s6c3BhY2U6XV0rCS8qIGVhdCB3aGl0ZXNwYWNlICovCi0KLTwqPiIvKiIoW14qXXxcKitbXiovXSkqXCorIi8iCXsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisiL2luY2Jpbi8iCXsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwotCQkJRFBSSU5UKCJDb21tZW50OiAlc1xuIiwgeXl0ZXh0KTsKLQkJCS8qIGVhdCBjb21tZW50cyAqLworCQkJRFBSSU5UKCJCaW5hcnkgSW5jbHVkZVxuIik7CisJCQlyZXR1cm4gRFRfSU5DQklOOwogCQl9CiAKLTwqPiIvLyIuKlxuCS8qIGVhdCBsaW5lIGNvbW1lbnRzICovCis8Kj57V1N9KwkvKiBlYXQgd2hpdGVzcGFjZSAqLworPCo+e0NPTU1FTlR9KwkvKiBlYXQgQy1zdHlsZSBjb21tZW50cyAqLworPCo+e0xJTkVDT01NRU5UfSsgLyogZWF0IEMrKy1zdHlsZSBjb21tZW50cyAqLwogCiA8Kj4uCQl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIkNoYXI6ICVjIChcXHglMDJ4KVxuIiwgeXl0ZXh0WzBdLAogCQkJCSh1bnNpZ25lZCl5eXRleHRbMF0pOwpAQCAtMjI3LDE0ICsyMjcsMTMgQEAKICAqLwogCiBzdHJ1Y3QgaW5jbF9maWxlIHsKLQlpbnQgZmlsZW51bTsKLQlGSUxFICpmaWxlOworCXN0cnVjdCBkdGNfZmlsZSAqZmlsZTsKIAlZWV9CVUZGRVJfU1RBVEUgeXlfcHJldl9idWY7CiAJaW50IHl5X3ByZXZfbGluZW5vOwogCXN0cnVjdCBpbmNsX2ZpbGUgKnByZXY7CiB9OwogCi1zdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGVfc3RhY2s7CitzdGF0aWMgc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOwogCiAKIC8qCkBAIC0yNDUsMzYgKzI0NCwzNCBAQAogc3RhdGljIGludCBpbmNsX2RlcHRoID0gMDsKIAogCi1pbnQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotCUZJTEUgKmY7CiAJc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlOworCXN0cnVjdCBkdGNfZmlsZSAqbmV3ZmlsZTsKKwlzdHJ1Y3Qgc2VhcmNoX3BhdGggc2VhcmNoLCAqc2VhcmNocHRyID0gTlVMTDsKIAotCWlmICghZmlsZW5hbWUpIHsKLQkJeXllcnJvcigiTm8gaW5jbHVkZSBmaWxlIG5hbWUgZ2l2ZW4uIik7Ci0JCXJldHVybiAwOworCWFzc2VydChmaWxlbmFtZSk7CisKKwlpZiAoaW5jbF9kZXB0aCsrID49IE1BWF9JTkNMVURFX0RFUFRIKQorCQlkaWUoIkluY2x1ZGVzIG5lc3RlZCB0b28gZGVlcGx5Iik7CisKKwlpZiAoc3JjcG9zX2ZpbGUpIHsKKwkJc2VhcmNoLmRpciA9IHNyY3Bvc19maWxlLT5kaXI7CisJCXNlYXJjaC5uZXh0ID0gTlVMTDsKKwkJc2VhcmNoLnByZXYgPSBOVUxMOworCQlzZWFyY2hwdHIgPSAmc2VhcmNoOwogCX0KIAotCWlmIChpbmNsX2RlcHRoKysgPj0gTUFYX0lOQ0xVREVfREVQVEgpIHsKLQkJeXllcnJvcigiSW5jbHVkZXMgbmVzdGVkIHRvbyBkZWVwbHkiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCW5ld2ZpbGUgPSBkdGNfb3Blbl9maWxlKGZpbGVuYW1lLCBzZWFyY2hwdHIpOwogCi0JZiA9IGR0Y19vcGVuX2ZpbGUoZmlsZW5hbWUpOwotCi0JaW5jbF9maWxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7Ci0JaWYgKCFpbmNsX2ZpbGUpIHsKLQkJeXllcnJvcigiQ2FuIG5vdCBhbGxvY2F0ZSBpbmNsdWRlIGZpbGUgc3BhY2UuIik7Ci0JCXJldHVybiAwOwotCX0KKwlpbmNsX2ZpbGUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7CiAKIAkvKgogCSAqIFNhdmUgY3VycmVudCBjb250ZXh0LgogCSAqLwogCWluY2xfZmlsZS0+eXlfcHJldl9idWYgPSBZWV9DVVJSRU5UX0JVRkZFUjsKIAlpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vID0geXlsaW5lbm87Ci0JaW5jbF9maWxlLT5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07Ci0JaW5jbF9maWxlLT5maWxlID0geXlpbjsKKwlpbmNsX2ZpbGUtPmZpbGUgPSBzcmNwb3NfZmlsZTsKIAlpbmNsX2ZpbGUtPnByZXYgPSBpbmNsX2ZpbGVfc3RhY2s7CiAKIAlpbmNsX2ZpbGVfc3RhY2sgPSBpbmNsX2ZpbGU7CkBAIC0yODIsMjMgKzI3OSwyMSBAQAogCS8qCiAJICogRXN0YWJsaXNoIG5ldyBjb250ZXh0LgogCSAqLwotCXNyY3Bvc19maWxlbnVtID0gbG9va3VwX2ZpbGVfbmFtZShmaWxlbmFtZSwgMCk7CisJc3JjcG9zX2ZpbGUgPSBuZXdmaWxlOwogCXl5bGluZW5vID0gMTsKLQl5eWluID0gZjsKKwl5eWluID0gbmV3ZmlsZS0+ZmlsZTsKIAl5eV9zd2l0Y2hfdG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbiwgWVlfQlVGX1NJWkUpKTsKLQotCXJldHVybiAxOwogfQogCiAKLWludCBwb3BfaW5wdXRfZmlsZSh2b2lkKQorc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKQogewogCXN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZTsKIAogCWlmIChpbmNsX2ZpbGVfc3RhY2sgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlmY2xvc2UoeXlpbik7CisJZHRjX2Nsb3NlX2ZpbGUoc3JjcG9zX2ZpbGUpOwogCiAJLyoKIAkgKiBQb3AuCkBAIC0zMTMsMTYgKzMwOCwxMyBAQAogCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOwogCXl5X3N3aXRjaF90b19idWZmZXIoaW5jbF9maWxlLT55eV9wcmV2X2J1Zik7CiAJeXlsaW5lbm8gPSBpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vOwotCXNyY3Bvc19maWxlbnVtID0gaW5jbF9maWxlLT5maWxlbnVtOwotCXl5aW4gPSBpbmNsX2ZpbGUtPmZpbGU7CisJc3JjcG9zX2ZpbGUgPSBpbmNsX2ZpbGUtPmZpbGU7CisJeXlpbiA9IGluY2xfZmlsZS0+ZmlsZSA/IGluY2xfZmlsZS0+ZmlsZS0+ZmlsZSA6IE5VTEw7CiAKIAkvKgogCSAqIEZyZWUgb2xkIHN0YXRlLgogCSAqLwogCWZyZWUoaW5jbF9maWxlKTsKIAotCWlmIChZWV9DVVJSRU5UX0JVRkZFUiA9PSAwKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKaW5kZXggZDBmNzQyNC4uYWMzOTJjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDMzCisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNAogI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKICNkZWZpbmUgRkxFWF9CRVRBCiAjZW5kaWYKQEAgLTMxLDcgKzMxLDcgQEAKIAogLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KIAotI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAogCiAvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAogICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCkBAIC05NCwxMSArOTQsMTIgQEAKIAogI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLwogCi0jaWYgX19TVERDX18KKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCiAKICNkZWZpbmUgWVlfVVNFX0NPTlNUCiAKLSNlbmRpZgkvKiBfX1NURENfXyAqLworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwogI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KIAogI2lmZGVmIFlZX1VTRV9DT05TVApAQCAtMTk0LDExICsxOTUsMTMgQEAKIC8qIFRoZSBmb2xsb3dpbmcgaXMgYmVjYXVzZSB3ZSBjYW5ub3QgcG9ydGFibHkgZ2V0IG91ciBoYW5kcyBvbiBzaXplX3QKICAqICh3aXRob3V0IGF1dG9jb25mJ3MgaGVscCwgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlIGJlY2F1c2Ugd2Ugd2FudAogICogZmxleC1nZW5lcmF0ZWQgc2Nhbm5lcnMgdG8gY29tcGlsZSBvbiB0aGVpciBvd24pLgorICogR2l2ZW4gdGhhdCB0aGUgc3RhbmRhcmQgaGFzIGRlY3JlZWQgdGhhdCBzaXplX3QgZXhpc3RzIHNpbmNlIDE5ODksCisgKiBJIGd1ZXNzIHdlIGNhbiBhZmZvcmQgdG8gZGVwZW5kIG9uIGl0LiBNYW5vai4KICAqLwogCiAjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCiAjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHVuc2lnbmVkIGludCB5eV9zaXplX3Q7Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CiAjZW5kaWYKIAogI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCkBAIC0zNDksNyArMzUyLDcgQEAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0jZGVmaW5lIHl5d3JhcCgpIDEKKyNkZWZpbmUgeXl3cmFwKG4pIDEKICNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zODksMTkgKzM5MiwyMCBAQAogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs5NF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsxMDRdID0KICAgICB7ICAgMCwKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAyMSwgICAxOSwgICAxNiwgICAxNiwgICAxOSwgICAxOSwgICAxOSwgICAgOCwgICAgOCwgICAxOSwKLSAgICAgICAgOCwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxNCwgICAxNSwgICAxNSwgICAxOSwgICAgOSwKLSAgICAgICAgOSwgICAxNiwgICAgMCwgICAgMywgICAgMCwgICAgMCwgICAxMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgOCwgICAgOCwgICAgNiwgICAgMCwgICAgNywgICAgMCwgICAgMiwKLSAgICAgICAgMCwgICAxMywgICAxMywgICAxNSwgICAxNSwgICAgOSwgICAgMCwgICAxMiwgICAxMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAxOCwgICAgMCwgICAgMCwgICAgMCwgICAgMiwgICAgOSwgICAgMCwKLSAgICAgICAxNywgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNCwgICAgMCwgICAgMCwgICAgMSwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgNSwgICAgMAorICAgICAgIDIxLCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE5LCAgIDE5LCAgIDE5LCAgICA3LCAgICA3LCAgIDE5LAorICAgICAgICA3LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDEzLCAgIDE0LCAgIDE0LCAgIDE5LCAgICA4LAorICAgICAgICA4LCAgIDE2LCAgICAwLCAgICAyLCAgICAwLCAgICAwLCAgICA5LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICA3LCAgICA3LCAgICA1LCAgICAwLCAgICA2LCAgICAwLCAgIDEyLAorICAgICAgIDEyLCAgIDE0LCAgIDE0LCAgICA4LCAgICAwLCAgIDExLCAgICA5LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgIDE4LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICA4LCAgICAwLCAgIDE3LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDEwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAzLCAgIDE1LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAxLCAgICAwLAogCisgICAgICAgIDAsICAgIDQsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDQ0LDEyMiArNDQ4LDEyNiBAQAogICAgICAgICA3LCAgICA3LCAgICA3LCAgICA4LCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwN10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTE3XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMzIsICAgIDAsICAgNTMsICAgIDAsICAgNzYsICAgIDAsICAxMDgsICAxMTEsCi0gICAgICAyODAsICAyODgsICAgMzcsICAgMzksICAgMzMsICAgMzYsICAxMDYsICAgIDAsICAxMjMsICAxNDYsCi0gICAgICAyNTUsICAyNTEsICAgNDUsICAgIDAsICAxNTksICAyODgsICAgIDAsICAgNTMsICAxMDgsICAxNzIsCi0gICAgICAxMTQsICAxMjcsICAxNTgsICAyODgsICAyNDUsICAgIDAsICAgIDAsICAyMzQsICAyMzUsICAyMzYsCi0gICAgICAxOTcsICAxOTUsICAxOTksICAgIDAsICAgIDAsICAyODgsICAgIDAsICAyODgsICAxNjAsICAyODgsCi0gICAgICAxODMsICAyODgsICAgIDAsICAgIDAsICAxODMsICAxODIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAyMDQsICAxODksICAyMDcsICAyODgsICAxNzksICAxODcsICAxODAsICAxOTQsICAgIDAsICAxNzEsCi0gICAgICAyODgsICAxOTYsICAxNzgsICAxNzQsICAyODgsICAxNjksICAxNjksICAxNzcsICAxNjUsICAxNTMsCi0gICAgICAxNDMsICAxNTUsICAxMzcsICAxMTgsICAyODgsICAxMjIsICAgNDIsICAyODgsICAgMzYsICAgMzYsCi0gICAgICAgNDAsICAyODgsICAyODgsICAyMTIsICAyMTgsICAyMjMsICAyMjksICAyMzQsICAyMzksICAyNDUsCisgICAgICAgIDAsICAgIDAsICAgMzAsICAgIDAsICAgNDQsICAgIDAsICAgNjcsICAgIDAsICAgOTcsICAxMDUsCisgICAgICAzMDIsICAzMDMsICAgMzUsICAgNDQsICAgNDAsICAgOTQsICAxMTIsICAgIDAsICAxMjksICAxNTIsCisgICAgICAyOTYsICAyOTUsICAxNTksICAgIDAsICAxNzYsICAzMDMsICAgIDAsICAxMTYsICAgOTUsICAxNjUsCisgICAgICAgNDksICAgNDYsICAxMDIsICAzMDMsICAyOTYsICAgIDAsICAgIDAsICAyODgsICAyOTAsICAyOTMsCisgICAgICAyNjQsICAyNjYsICAyNzAsICAgIDAsICAgIDAsICAzMDMsICAgIDAsICAzMDMsICAyNjQsICAzMDMsCisgICAgICAgIDAsICAgIDAsICAxOTUsICAxMDEsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAyODQsICAxMjUsCisgICAgICAyNzcsICAyNjUsICAyMjUsICAyMzAsICAyMTYsICAyMTgsICAgIDAsICAyMDIsICAyMjQsICAyMjEsCisgICAgICAyMTcsICAxMDcsICAxOTYsICAxODgsICAzMDMsICAyMDYsICAxNzksICAxODYsICAxNzgsICAxODUsCisgICAgICAxODMsICAxNjIsICAxNjEsICAxNTAsICAxNjksICAxNjAsICAxNDUsICAxMjUsICAzMDMsICAzMDMsCisgICAgICAxMzcsICAxMDksICAxOTAsICAxMDMsICAyMDMsICAxNjcsICAxMDgsICAxOTcsICAzMDMsICAxMjMsCiAKLSAgICAgIDI1MSwgIDI1NSwgIDI2MiwgIDI3MCwgIDI3NSwgIDI4MAorICAgICAgIDI5LCAgMzAzLCAgMzAzLCAgMjE1LCAgMjIxLCAgMjI2LCAgMjI5LCAgMjM0LCAgMjQwLCAgMjQ2LAorICAgICAgMjUwLCAgMjU3LCAgMjY1LCAgMjcwLCAgMjc1LCAgMjgyCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbMTA3XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzExN10gPQogICAgIHsgICAwLAotICAgICAgIDkzLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA1LCAgIDkzLCAgICA3LCAgICAzLCAgICAzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDk0LCAgIDk1LCAgIDkzLCAgIDk2LCAgIDkzLCAgIDE5LAotICAgICAgIDE5LCAgIDIwLCAgIDk3LCAgIDk4LCAgIDIwLCAgIDkzLCAgIDk5LCAgMTAwLCAgIDk1LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDk0LCAgIDkzLCAgIDk0LCAgMTAxLCAgMTAyLCAgIDkzLCAgMTAzLCAgMTA0LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDk2LCAgIDE5LCAgIDkzLCAgIDIwLCAgIDkzLCAgIDk3LCAgIDkzLAotICAgICAgIDk3LCAgIDkzLCAgIDIwLCAgIDk5LCAgMTAwLCAgIDkzLCAgMTA1LCAgMTAxLCAgMTAyLCAgMTA2LAotICAgICAgMTAzLCAgMTAzLCAgMTA0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDk0LCAgMTA1LCAgMTA2LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgICAwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgMTAzLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA1LCAgMTAzLCAgICA3LCAgICAzLCAgICAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTA0LCAgMTA1LCAgMTAzLCAgMTA2LCAgMTAzLCAgIDE5LAorICAgICAgIDE5LCAgIDIwLCAgMTAzLCAgMTA3LCAgIDIwLCAgMTAzLCAgMTA4LCAgMTA5LCAgMTA1LCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTA0LCAgMTAzLCAgMTA0LCAgMTEwLCAgMTExLCAgMTAzLCAgMTEyLCAgMTEzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTA2LCAgIDE5LCAgMTAzLCAgIDIwLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgIDIwLCAgMTA4LCAgMTA5LCAgMTAzLCAgMTE0LCAgMTEwLCAgMTExLCAgMTE1LCAgMTEyLCAgMTEyLAorICAgICAgMTEzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTE0LCAgMTE1LCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTE2LCAgMTAzLCAgMTE2LCAgMTAzLCAgMTE2LAogCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMKKyAgICAgIDEwMywgIDEwMywgICAgMCwgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzMyNF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFszMzldID0KICAgICB7ICAgMCwKICAgICAgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxMiwgICAxNiwgICAxMiwgICAxMiwgICAxMiwgICAxNywKICAgICAgICAxOCwgICAxOCwgICAxOCwgICAxMiwgICAxOSwgICAyMCwgICAyMCwgICAxMiwgICAxMiwgICAyMSwKICAgICAgICAxOSwgICAyMSwgICAxOSwgICAyMiwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMCwgICAyMCwgICAxMiwgICAxMiwgICAyMywgICAzNCwgICAxMiwgICAzMiwgICAzMiwKLSAgICAgICAzMiwgICAzMiwgICAxMiwgICAxMiwgICAxMiwgICAzNiwgICAyMCwgICAzMywgICA1MCwgICA5MiwKLSAgICAgICAzNSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAxNSwgICA1NCwgICA5MSwgICA1NCwKLSAgICAgICA1NCwgICA1NCwgICA1MSwgICAyNCwgICAyNCwgICAyNCwgICA0NiwgICAyNSwgICA5MCwgICAzOCwKLSAgICAgICA4OSwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKLSAgICAgICAyNywgICAxMiwgICAyNywgICAyNywgICAyNywgICAxNywgICAyNywgICAyNywgICAyNywgICAxMiwKLSAgICAgICAyOCwgICAyOCwgICAyOCwgICAxMiwgICAxMiwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAxMiwgICAxMiwgICAxMiwgICAzMiwgICAzMiwgIDEwMiwgICAyMywKKyAgICAgICAxMiwgICAxMiwgICAxMiwgICAzNCwgICAyMCwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyNCwgICAyNCwgICAyNCwgICAzNSwgICAyNSwgICA1NCwKKyAgICAgICA1NCwgICA1NCwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAxMiwgICAxMywgICAxNCwKKyAgICAgICAxNSwgICAyNywgICAxMiwgICAyNywgICAyNywgICAyNywgICAyMywgICAyNywgICAyNywgICAyNywKKyAgICAgICAxMiwgICAyOCwgICAyOCwgICAyOCwgICAxMiwgICAxMiwgICAyOCwgICAyOCwgICAyOCwgICAyOCwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwKIAotICAgICAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDEyLAotICAgICAgIDEyLCAgIDE1LCAgIDM5LCAgIDI5LCAgIDE1LCAgIDQwLCAgIDI5LCAgIDkzLCAgIDMwLCAgIDMxLAotICAgICAgIDMxLCAgIDMwLCAgIDMxLCAgIDMxLCAgIDU2LCAgIDU2LCAgIDU2LCAgIDQxLCAgIDMyLCAgIDMyLAotICAgICAgIDQyLCAgIDg4LCAgIDQzLCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ2LCAgIDQ1LCAgIDQ3LCAgIDQ3LAotICAgICAgIDg3LCAgIDM4LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LAotICAgICAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDg2LAotICAgICAgIDQ3LCAgIDM0LCAgIDMzLCAgIDUwLCAgIDg1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUzLAotICAgICAgIDUzLCAgIDUzLCAgIDg0LCAgIDUzLCAgIDgzLCAgIDM1LCAgIDgyLCAgIDUxLCAgIDUzLCAgIDUzLAotICAgICAgIDUzLCAgIDUzLCAgIDU2LCAgIDU2LCAgIDU2LCAgIDkzLCAgIDY4LCAgIDU0LCAgIDU3LCAgIDU0LAotICAgICAgIDU0LCAgIDU0LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDYyLCAgIDQ2LCAgIDM0LCAgIDcxLCAgIDgxLAorICAgICAgIDEyLCAgIDEyLCAgIDI5LCAgIDM2LCAgMTAzLCAgIDM0LCAgIDE3LCAgIDMwLCAgIDMxLCAgIDMxLAorICAgICAgIDI5LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDE3LCAgIDMwLCAgIDMxLCAgIDMxLCAgIDM5LCAgIDM1LAorICAgICAgIDUyLCAgIDQwLCAgIDUyLCAgIDUyLCAgIDUyLCAgMTAzLCAgIDc4LCAgIDM4LCAgIDM4LCAgIDQ2LAorICAgICAgMTAxLCAgIDYwLCAgIDc5LCAgIDQxLCAgIDY5LCAgIDk3LCAgIDQyLCAgIDk0LCAgIDQzLCAgIDQ1LAorICAgICAgIDQ1LCAgIDQ1LCAgIDQ2LCAgIDQ1LCAgIDQ3LCAgIDQ3LCAgIDkzLCAgIDkyLCAgIDQ1LCAgIDQ1LAorICAgICAgIDQ1LCAgIDQ1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDM5LCAgIDQ3LCAgIDkxLCAgIDQwLCAgIDkwLAorICAgICAgIDk5LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDg5LCAgIDg4LAorICAgICAgIDQxLCAgIDU1LCAgIDg3LCAgIDQ5LCAgMTAwLCAgIDQzLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDg2LAorICAgICAgIDUxLCAgIDk1LCAgIDk1LCAgIDk2LCAgIDg1LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUyLAogCi0gICAgICAgODAsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAgNjQsCi0gICAgICAgNjIsICAgMzUsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsCi0gICAgICAgMzcsICAgNjcsICAgNjYsICAgMzcsICAgMzcsICAgMzcsICAgNDQsICAgNjUsICAgNDQsICAgNDksCi0gICAgICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNTIsICAgNjQsICAgNTIsCi0gICAgICAgNTQsICAgNjIsICAgNTQsICAgNjAsICAgNTQsICAgNTQsICAgNTUsICAgOTMsICAgNTUsICAgNTUsCi0gICAgICAgNTUsICAgNTUsICAgNTgsICAgNTgsICAgNTgsICAgNDgsICAgNTgsICAgNTgsICAgNTksICAgNDgsCi0gICAgICAgNTksICAgNTksICAgNjEsICAgNjEsICAgNjEsICAgNjEsICAgNjEsICAgNjEsICAgNjEsICAgNjEsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjksICAgOTMsCi0gICAgICAgNjksICAgNzAsICAgNzAsICAgNzAsICAgOTMsICAgNzAsICAgNzAsICAgMTEsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTksICAgNTIsICAgNTIsICAgNTIsICAgOTUsICAgOTUsICAgOTYsICAgODQsICAgNDYsICAgODMsCisgICAgICAgODIsICAgODEsICAgMzksICAgNzksICAxMDAsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsCisgICAgICAgMzMsICAgMzMsICAgMzMsICAgMzcsICAgODAsICAgNzcsICAgMzcsICAgMzcsICAgMzcsICAgNDQsCisgICAgICAgNDAsICAgNDQsICAgNTAsICAgNzYsICAgNTAsICAgNTIsICAgNzUsICAgNTIsICAgNzQsICAgNTIsCisgICAgICAgNTIsICAgNTMsICAgNzMsICAgNTMsICAgNTMsICAgNTMsICAgNTMsICAgNTYsICAgNTYsICAgNTYsCisgICAgICAgNzIsICAgNTYsICAgNTYsICAgNTcsICAgNzEsICAgNTcsICAgNTcsICAgNTksICAgNTksICAgNTksCisgICAgICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNjEsICAgNjEsICAgNjEsICAgNjEsICAgNjEsCisgICAgICAgNjEsICAgNjEsICAgNjEsICAgNjcsICAgNzAsICAgNjcsICAgNjgsICAgNjgsICAgNjgsICAgNjIsCisgICAgICAgNjgsICAgNjgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgNjAsICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjAsICAgNTgsICAxMDMsICAgNDgsCiAKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MworICAgICAgIDQ4LCAgMTAzLCAgIDExLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMzI0XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzMzOV0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgIDE1LCAgICAzLCAgIDEzLCAgIDEzLAotICAgICAgIDE0LCAgIDE0LCAgICAzLCAgICAzLCAgICAzLCAgIDE2LCAgICAzLCAgIDIzLCAgIDIzLCAgIDkxLAotICAgICAgIDE1LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA1LCAgIDI4LCAgIDkwLCAgIDI4LAotICAgICAgIDI4LCAgIDI4LCAgIDIzLCAgICA1LCAgICA1LCAgICA1LCAgIDI4LCAgICA1LCAgIDg5LCAgIDE2LAotICAgICAgIDg3LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgIDEzLCAgIDEzLCAgMTAxLCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgIDE1LCAgICAzLCAgIDE0LCAgIDE0LCAgIDMyLCAgIDMyLCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA1LCAgICA1LCAgICA1LCAgIDE1LCAgICA1LCAgIDMxLAorICAgICAgIDMxLCAgIDMxLCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA3LCAgICA3LCAgICA3LAorICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAogICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAogICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAogCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDksICAgMTcsICAgIDksICAgMTAsICAgMTcsICAgMTAsICAgMjksICAgIDksICAgIDksCi0gICAgICAgIDksICAgMTAsICAgMTAsICAgMTAsICAgMzEsICAgMzEsICAgMzEsICAgMTcsICAgMzIsICAgMzIsCi0gICAgICAgMTcsICAgODYsICAgMTcsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCi0gICAgICAgODQsICAgMjksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCi0gICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgODMsCi0gICAgICAgMjAsICAgMzMsICAgNDksICAgNDksICAgODIsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjUsCi0gICAgICAgMjUsICAgMjUsICAgODEsICAgMjUsICAgODAsICAgMzMsICAgNzksICAgNDksICAgMjUsICAgMjUsCi0gICAgICAgMjUsICAgMjUsICAgMzAsICAgMzAsICAgMzAsICAgNTEsICAgNTEsICAgNTUsICAgMzAsICAgNTUsCi0gICAgICAgNTUsICAgNTUsICAgNTYsICAgNTYsICAgNTYsICAgNjIsICAgNTUsICAgNjgsICAgNjIsICAgNzgsCisgICAgICAgIDcsICAgIDcsICAgIDksICAgMTYsICAgMjksICAgMzMsICAgIDksICAgIDksICAgIDksICAgIDksCisgICAgICAgMTAsICAgNTQsICAgNTQsICAgNTQsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMTcsICAgMzMsCisgICAgICAgMjgsICAgMTcsICAgMjgsICAgMjgsICAgMjgsICAxMDAsICAgNzIsICAgMTYsICAgMjksICAgMjgsCisgICAgICAgOTcsICAgNjAsICAgNzIsICAgMTcsICAgNjAsICAgOTQsICAgMTcsICAgOTIsICAgMTcsICAgMTksCisgICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgOTEsICAgODgsICAgMTksICAgMTksCisgICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCisgICAgICAgMTksICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgMjMsICAgMjAsICAgODcsICAgMjMsICAgODYsCisgICAgICAgOTYsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzAsICAgMzAsICAgMzAsICAgODUsICAgODQsCisgICAgICAgMjMsICAgMzAsICAgODMsICAgMjMsICAgOTYsICAgMjMsICAgMjUsICAgMjUsICAgMjUsICAgODIsCisgICAgICAgMjUsICAgOTMsICAgOTMsICAgOTMsICAgODEsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgNTMsCiAKLSAgICAgICA3NywgICA3NiwgICA3NCwgICA3MywgICA3MiwgICA3MCwgICA2NywgICA2NiwgICA2NSwgICA2MywKLSAgICAgICA2MSwgICA2OCwgICA5NCwgICA5NCwgICA5NCwgICA5NCwgICA5NCwgICA5NCwgICA5NCwgICA5NCwKLSAgICAgICA5NSwgICA0MywgICA0MiwgICA5NSwgICA5NSwgICA5NSwgICA5NiwgICA0MSwgICA5NiwgICA5NywKLSAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5OCwgICA0MCwgICA5OCwKLSAgICAgICA5OSwgICAzOSwgICA5OSwgICAzOCwgICA5OSwgICA5OSwgIDEwMCwgICAzNSwgIDEwMCwgIDEwMCwKLSAgICAgIDEwMCwgIDEwMCwgIDEwMSwgIDEwMSwgIDEwMSwgICAyMiwgIDEwMSwgIDEwMSwgIDEwMiwgICAyMSwKLSAgICAgIDEwMiwgIDEwMiwgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNSwgICAxMSwKLSAgICAgIDEwNSwgIDEwNiwgIDEwNiwgIDEwNiwgICAgMCwgIDEwNiwgIDEwNiwgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgICA5OCwgICA1MywgICA1MywgICA1MywgICA5NSwgICA5NSwgICA5NSwgICA4MCwgICA1MywgICA3OSwKKyAgICAgICA3OCwgICA3NywgICA3NiwgICA3NCwgICA5OCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKKyAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNSwgICA3MywgICA3MSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNiwKKyAgICAgICA3MCwgIDEwNiwgIDEwNywgICA2OSwgIDEwNywgIDEwOCwgICA2OCwgIDEwOCwgICA2NiwgIDEwOCwKKyAgICAgIDEwOCwgIDEwOSwgICA2NSwgIDEwOSwgIDEwOSwgIDEwOSwgIDEwOSwgIDExMCwgIDExMCwgIDExMCwKKyAgICAgICA2NCwgIDExMCwgIDExMCwgIDExMSwgICA2MywgIDExMSwgIDExMSwgIDExMiwgIDExMiwgIDExMiwKKyAgICAgIDExMiwgIDExMiwgIDExMiwgIDExMiwgIDExMiwgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywKKyAgICAgIDExMywgIDExMywgIDExMywgIDExNCwgICA2MiwgIDExNCwgIDExNSwgIDExNSwgIDExNSwgICA2MSwKKyAgICAgIDExNSwgIDExNSwgIDExNiwgIDExNiwgIDExNiwgIDExNiwgIDExNiwgIDExNiwgIDExNiwgIDExNiwKKyAgICAgICA1OSwgICA0OSwgICA0MywgICA0MiwgICA0MSwgICA0MCwgICAzOSwgICAzOCwgICAzNSwgICAyMiwKIAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzCisgICAgICAgMjEsICAgMTEsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCisgICAgICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCisgICAgICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCisgICAgICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMKICAgICB9IDsKIAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzIxXSA9CiAgICAgeyAgIDAsCi0wLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAKKzEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIAogICAgIDAsICAgICB9OwogCiBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKQEAgLTYwMCw3ICs2MDgsNyBAQAogCiAKIAotI2xpbmUgMzMgImR0Yy1sZXhlci5sIgorI2xpbmUgMzcgImR0Yy1sZXhlci5sIgogI2luY2x1ZGUgImR0Yy5oIgogI2luY2x1ZGUgInNyY3Bvcy5oIgogI2luY2x1ZGUgImR0Yy1wYXJzZXIudGFiLmgiCkBAIC02MjMsNyArNjMxLDEwIEBACiAJCQkJRFBSSU5UKCI8VjE+XG4iKTsgXAogCQkJCUJFR0lOKFYxKTsgXAogCQkJfQotI2xpbmUgNjI3ICJkdGMtbGV4ZXIubGV4LmMiCisKK3N0YXRpYyB2b2lkIHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50IHBvcF9pbnB1dF9maWxlKHZvaWQpOworI2xpbmUgNjM4ICJkdGMtbGV4ZXIubGV4LmMiCiAKICNkZWZpbmUgSU5JVElBTCAwCiAjZGVmaW5lIElOQ0xVREUgMQpAQCAtNjg1LDcgKzY5Niw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyAodm9pZCkgZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCkBAIC02OTYsNyArNzA3LDcgQEAKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQlzaXplX3QgbjsgXAorCQlpbnQgbjsgXAogCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC03NzgsOSArNzg5LDkgQEAKIAlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwogCXJlZ2lzdGVyIGludCB5eV9hY3Q7CiAgICAgCi0jbGluZSA1NyAiZHRjLWxleGVyLmwiCisjbGluZSA2NCAiZHRjLWxleGVyLmwiCiAKLSNsaW5lIDc4NCAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgNzk1ICJkdGMtbGV4ZXIubGV4LmMiCiAKIAlpZiAoICEoeXlfaW5pdCkgKQogCQl7CkBAIC04MzMsMTMgKzg0NCwxMyBAQAogCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJCXsKIAkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA5NCApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNCApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICE9IDI4OCApOworCQl3aGlsZSAoIHl5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gIT0gMzAzICk7CiAKIHl5X2ZpbmRfYWN0aW9uOgogCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CkBAIC04NzQsMjAgKzg4NSwxMyBAQAogCQkJZ290byB5eV9maW5kX2FjdGlvbjsKIAogY2FzZSAxOgorLyogcnVsZSAxIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDU4ICJkdGMtbGV4ZXIubCIKLUJFR0lOKElOQ0xVREUpOwotCVlZX0JSRUFLCi1jYXNlIDI6Ci1ZWV9SVUxFX1NFVFVQCi0jbGluZSA2MCAiZHRjLWxleGVyLmwiCisjbGluZSA2NSAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eXRleHRbc3RybGVuKHl5dGV4dCkgLSAxXSA9IDA7Ci0JCQlpZiAoIXB1c2hfaW5wdXRfZmlsZSh5eXRleHQgKyAxKSkgewotCQkJCS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvci4qLwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCQlCRUdJTl9ERUZBVUxUKCk7CisJCQljaGFyICpuYW1lID0gc3RyY2hyKHl5dGV4dCwgJ1wiJykgKyAxOworCQkJeXl0ZXh0W3l5bGVuZy0xXSA9ICdcMCc7CisJCQlwdXNoX2lucHV0X2ZpbGUobmFtZSk7CiAJCX0KIAlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CkBAIC04OTUsMTkgKzg5OSwxOSBAQAogY2FzZSBZWV9TVEFURV9FT0YoQllURVNUUklORyk6CiBjYXNlIFlZX1NUQVRFX0VPRihQUk9QTk9ERU5BTUUpOgogY2FzZSBZWV9TVEFURV9FT0YoVjEpOgotI2xpbmUgNzAgImR0Yy1sZXhlci5sIgorI2xpbmUgNzEgImR0Yy1sZXhlci5sIgogewogCQkJaWYgKCFwb3BfaW5wdXRfZmlsZSgpKSB7CiAJCQkJeXl0ZXJtaW5hdGUoKTsKIAkJCX0KIAkJfQogCVlZX0JSRUFLCi1jYXNlIDM6Ci0vKiBydWxlIDMgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyOgorLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDc2ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDc3ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiU3RyaW5nOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5kYXRhID0gZGF0YV9jb3B5X2VzY2FwZV9zdHJpbmcoeXl0ZXh0KzEsCkBAIC05MTYsMTEgKzkyMCwxMSBAQAogCQkJcmV0dXJuIERUX1NUUklORzsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDQ6CitjYXNlIDM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA4NiAiZHRjLWxleGVyLmwiCisjbGluZSA4NyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIktleXdvcmQ6IC9kdHMtdjEvXG4iKTsKIAkJCWR0c192ZXJzaW9uID0gMTsKQEAgLTkyOCwyMiArOTMyLDIyIEBACiAJCQlyZXR1cm4gRFRfVjE7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA1OgorY2FzZSA0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgOTUgImR0Yy1sZXhlci5sIgorI2xpbmUgOTYgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvbWVtcmVzZXJ2ZS9cbiIpOwogCQkJQkVHSU5fREVGQVVMVCgpOwogCQkJcmV0dXJuIERUX01FTVJFU0VSVkU7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA2OgorY2FzZSA1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTAzICJkdGMtbGV4ZXIubCIKKyNsaW5lIDEwNCAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIkxhYmVsOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5sYWJlbHJlZiA9IHN0cmR1cCh5eXRleHQpOwpAQCAtOTUxLDExICs5NTUsMTEgQEAKIAkJCXJldHVybiBEVF9MQUJFTDsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDc6CitjYXNlIDY6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMTIgImR0Yy1sZXhlci5sIgorI2xpbmUgMTEzICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCWlmICgqeXl0ZXh0ID09ICdiJykKIAkJCQl5eWx2YWwuY2Jhc2UgPSAyOwpAQCAtOTY5LDQ0ICs5NzMsNDQgQEAKIAkJCXJldHVybiBEVF9CQVNFOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgODoKK2Nhc2UgNzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEyNyAiZHRjLWxleGVyLmwiCisjbGluZSAxMjggImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwogCQkJcmV0dXJuIERUX0xFR0FDWUxJVEVSQUw7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA5OgorY2FzZSA4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTM1ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDEzNiAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eWx2YWwubGl0ZXJhbCA9IHN0cmR1cCh5eXRleHQpOwogCQkJRFBSSU5UKCJMaXRlcmFsOiAnJXMnXG4iLCB5eWx2YWwubGl0ZXJhbCk7CiAJCQlyZXR1cm4gRFRfTElURVJBTDsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDEwOgorY2FzZSA5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTQzICJkdGMtbGV4ZXIubCIKKyNsaW5lIDE0NCAiZHRjLWxleGVyLmwiCiB7CS8qIGxhYmVsIHJlZmVyZW5jZSAqLwotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMSk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KzEpOwogCQkJcmV0dXJuIERUX1JFRjsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDExOgorY2FzZSAxMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE1MSAiZHRjLWxleGVyLmwiCisjbGluZSAxNTIgImR0Yy1sZXhlci5sIgogewkvKiBuZXctc3R5bGUgcGF0aCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMik7CkBAIC0xMDE0LDQ0ICsxMDE4LDQ0IEBACiAJCQlyZXR1cm4gRFRfUkVGOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgMTI6CitjYXNlIDExOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTYwICJkdGMtbGV4ZXIubCIKKyNsaW5lIDE2MSAiZHRjLWxleGVyLmwiCiB7CS8qIG9sZC1zdHlsZSBwYXRoIHJlZmVyZW5jZSAqLwotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMSk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KzEpOwogCQkJcmV0dXJuIERUX1JFRjsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDEzOgorY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE2OCAiZHRjLWxleGVyLmwiCisjbGluZSAxNjkgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmJ5dGUgPSBzdHJ0b2woeXl0ZXh0LCBOVUxMLCAxNik7CiAJCQlEUFJJTlQoIkJ5dGU6ICUwMnhcbiIsIChpbnQpeXlsdmFsLmJ5dGUpOwogCQkJcmV0dXJuIERUX0JZVEU7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxNDoKK2Nhc2UgMTM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxNzYgImR0Yy1sZXhlci5sIgorI2xpbmUgMTc3ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiL0JZVEVTVFJJTkdcbiIpOwogCQkJQkVHSU5fREVGQVVMVCgpOwogCQkJcmV0dXJuICddJzsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDE1OgorY2FzZSAxNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE4NCAiZHRjLWxleGVyLmwiCisjbGluZSAxODUgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJQcm9wTm9kZU5hbWU6ICVzXG4iLCB5eXRleHQpOwogCQkJeXlsdmFsLnByb3Bub2RlbmFtZSA9IHN0cmR1cCh5eXRleHQpOwpAQCAtMTA1OSwzNCArMTA2MywzOSBAQAogCQkJcmV0dXJuIERUX1BST1BOT0RFTkFNRTsKIAkJfQogCVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAorI2xpbmUgMTk0ICJkdGMtbGV4ZXIubCIKK3sKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CisJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOworCQkJRFBSSU5UKCJCaW5hcnkgSW5jbHVkZVxuIik7CisJCQlyZXR1cm4gRFRfSU5DQklOOworCQl9CisJWVlfQlJFQUsKIGNhc2UgMTY6CiAvKiBydWxlIDE2IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5NCAiZHRjLWxleGVyLmwiCisjbGluZSAyMDEgImR0Yy1sZXhlci5sIgogLyogZWF0IHdoaXRlc3BhY2UgKi8KIAlZWV9CUkVBSwogY2FzZSAxNzoKIC8qIHJ1bGUgMTcgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTk2ICJkdGMtbGV4ZXIubCIKLXsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07Ci0JCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwotCQkJRFBSSU5UKCJDb21tZW50OiAlc1xuIiwgeXl0ZXh0KTsKLQkJCS8qIGVhdCBjb21tZW50cyAqLwotCQl9CisjbGluZSAyMDIgImR0Yy1sZXhlci5sIgorLyogZWF0IEMtc3R5bGUgY29tbWVudHMgKi8KIAlZWV9CUkVBSwogY2FzZSAxODoKIC8qIHJ1bGUgMTggY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAogI2xpbmUgMjAzICJkdGMtbGV4ZXIubCIKLS8qIGVhdCBsaW5lIGNvbW1lbnRzICovCisvKiBlYXQgQysrLXN0eWxlIGNvbW1lbnRzICovCiAJWVlfQlJFQUsKIGNhc2UgMTk6CiBZWV9SVUxFX1NFVFVQCiAjbGluZSAyMDUgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJDaGFyOiAlYyAoXFx4JTAyeClcbiIsIHl5dGV4dFswXSwKIAkJCQkodW5zaWduZWQpeXl0ZXh0WzBdKTsKQEAgLTExMDcsNyArMTExNiw3IEBACiAjbGluZSAyMjIgImR0Yy1sZXhlci5sIgogRUNITzsKIAlZWV9CUkVBSwotI2xpbmUgMTExMSAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgMTEyMCAiZHRjLWxleGVyLmxleC5jIgogCiAJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgogCQl7CkBAIC0xMzYwLDYgKzEzNjksMTQgQEAKIAllbHNlCiAJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CiAKKwlpZiAoKHl5X3NpemVfdCkgKCh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0gKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKwogCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKIAlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwogCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwpAQCAtMTM4OSw3ICsxNDA2LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA5NCApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA0ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0xNDE3LDExICsxNDM0LDExIEBACiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA5NCApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDQgKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA5Myk7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTAzKTsKIAogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KQEAgLTE3NDMsNyArMTc2MCw5IEBACiAJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCiAJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCiAJCQkJCQkJCSk7Ci0JCQorCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCiAJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CiAJCQkJCiAJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKQEAgLTE3NjEsNiArMTc4MCw4IEBACiAJCQkJCQkJCSgoeXlfYnVmZmVyX3N0YWNrKSwKIAkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CiAKIAkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KIAkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKQEAgLTIwNzIsMTQgKzIwOTMsMTMgQEAKICAqLwogCiBzdHJ1Y3QgaW5jbF9maWxlIHsKLQlpbnQgZmlsZW51bTsKLQlGSUxFICpmaWxlOworCXN0cnVjdCBkdGNfZmlsZSAqZmlsZTsKIAlZWV9CVUZGRVJfU1RBVEUgeXlfcHJldl9idWY7CiAJaW50IHl5X3ByZXZfbGluZW5vOwogCXN0cnVjdCBpbmNsX2ZpbGUgKnByZXY7CiB9OwogCi1zdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGVfc3RhY2s7CitzdGF0aWMgc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOwogCiAKIC8qCkBAIC0yMDkwLDM2ICsyMTEwLDM0IEBACiBzdGF0aWMgaW50IGluY2xfZGVwdGggPSAwOwogCiAKLWludCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCitzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0JRklMRSAqZjsKIAlzdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGU7CisJc3RydWN0IGR0Y19maWxlICpuZXdmaWxlOworCXN0cnVjdCBzZWFyY2hfcGF0aCBzZWFyY2gsICpzZWFyY2hwdHIgPSBOVUxMOwogCi0JaWYgKCFmaWxlbmFtZSkgewotCQl5eWVycm9yKCJObyBpbmNsdWRlIGZpbGUgbmFtZSBnaXZlbi4iKTsKLQkJcmV0dXJuIDA7CisJYXNzZXJ0KGZpbGVuYW1lKTsKKworCWlmIChpbmNsX2RlcHRoKysgPj0gTUFYX0lOQ0xVREVfREVQVEgpCisJCWRpZSgiSW5jbHVkZXMgbmVzdGVkIHRvbyBkZWVwbHkiKTsKKworCWlmIChzcmNwb3NfZmlsZSkgeworCQlzZWFyY2guZGlyID0gc3JjcG9zX2ZpbGUtPmRpcjsKKwkJc2VhcmNoLm5leHQgPSBOVUxMOworCQlzZWFyY2gucHJldiA9IE5VTEw7CisJCXNlYXJjaHB0ciA9ICZzZWFyY2g7CiAJfQogCi0JaWYgKGluY2xfZGVwdGgrKyA+PSBNQVhfSU5DTFVERV9ERVBUSCkgewotCQl5eWVycm9yKCJJbmNsdWRlcyBuZXN0ZWQgdG9vIGRlZXBseSIpOwotCQlyZXR1cm4gMDsKLQl9CisJbmV3ZmlsZSA9IGR0Y19vcGVuX2ZpbGUoZmlsZW5hbWUsIHNlYXJjaHB0cik7CiAKLQlmID0gZHRjX29wZW5fZmlsZShmaWxlbmFtZSk7Ci0KLQlpbmNsX2ZpbGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmNsX2ZpbGUpKTsKLQlpZiAoIWluY2xfZmlsZSkgewotCQl5eWVycm9yKCJDYW4gbm90IGFsbG9jYXRlIGluY2x1ZGUgZmlsZSBzcGFjZS4iKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWluY2xfZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmNsX2ZpbGUpKTsKIAogCS8qCiAJICogU2F2ZSBjdXJyZW50IGNvbnRleHQuCiAJICovCiAJaW5jbF9maWxlLT55eV9wcmV2X2J1ZiA9IFlZX0NVUlJFTlRfQlVGRkVSOwogCWluY2xfZmlsZS0+eXlfcHJldl9saW5lbm8gPSB5eWxpbmVubzsKLQlpbmNsX2ZpbGUtPmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKLQlpbmNsX2ZpbGUtPmZpbGUgPSB5eWluOworCWluY2xfZmlsZS0+ZmlsZSA9IHNyY3Bvc19maWxlOwogCWluY2xfZmlsZS0+cHJldiA9IGluY2xfZmlsZV9zdGFjazsKIAogCWluY2xfZmlsZV9zdGFjayA9IGluY2xfZmlsZTsKQEAgLTIxMjcsMjMgKzIxNDUsMjEgQEAKIAkvKgogCSAqIEVzdGFibGlzaCBuZXcgY29udGV4dC4KIAkgKi8KLQlzcmNwb3NfZmlsZW51bSA9IGxvb2t1cF9maWxlX25hbWUoZmlsZW5hbWUsIDApOworCXNyY3Bvc19maWxlID0gbmV3ZmlsZTsKIAl5eWxpbmVubyA9IDE7Ci0JeXlpbiA9IGY7CisJeXlpbiA9IG5ld2ZpbGUtPmZpbGU7CiAJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUpKTsKLQotCXJldHVybiAxOwogfQogCiAKLWludCBwb3BfaW5wdXRfZmlsZSh2b2lkKQorc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKQogewogCXN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZTsKIAogCWlmIChpbmNsX2ZpbGVfc3RhY2sgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlmY2xvc2UoeXlpbik7CisJZHRjX2Nsb3NlX2ZpbGUoc3JjcG9zX2ZpbGUpOwogCiAJLyoKIAkgKiBQb3AuCkBAIC0yMTU4LDE3ICsyMTc0LDE0IEBACiAJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7CiAJeXlfc3dpdGNoX3RvX2J1ZmZlcihpbmNsX2ZpbGUtPnl5X3ByZXZfYnVmKTsKIAl5eWxpbmVubyA9IGluY2xfZmlsZS0+eXlfcHJldl9saW5lbm87Ci0Jc3JjcG9zX2ZpbGVudW0gPSBpbmNsX2ZpbGUtPmZpbGVudW07Ci0JeXlpbiA9IGluY2xfZmlsZS0+ZmlsZTsKKwlzcmNwb3NfZmlsZSA9IGluY2xfZmlsZS0+ZmlsZTsKKwl5eWluID0gaW5jbF9maWxlLT5maWxlID8gaW5jbF9maWxlLT5maWxlLT5maWxlIDogTlVMTDsKIAogCS8qCiAJICogRnJlZSBvbGQgc3RhdGUuCiAJICovCiAJZnJlZShpbmNsX2ZpbGUpOwogCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSID09IDApCi0JCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5jX3NoaXBwZWQKaW5kZXggMjhlNmVjMC4uMjcxMjkzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5jX3NoaXBwZWQKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5jX3NoaXBwZWQKQEAgLTc1LDcgKzc1LDggQEAKICAgICAgRFRfQllURSA9IDI2NCwKICAgICAgRFRfU1RSSU5HID0gMjY1LAogICAgICBEVF9MQUJFTCA9IDI2NiwKLSAgICAgRFRfUkVGID0gMjY3CisgICAgIERUX1JFRiA9IDI2NywKKyAgICAgRFRfSU5DQklOID0gMjY4CiAgICB9OwogI2VuZGlmCiAvKiBUb2tlbnMuICAqLwpAQCAtODksNiArOTAsNyBAQAogI2RlZmluZSBEVF9TVFJJTkcgMjY1CiAjZGVmaW5lIERUX0xBQkVMIDI2NgogI2RlZmluZSBEVF9SRUYgMjY3CisjZGVmaW5lIERUX0lOQ0JJTiAyNjgKIAogCiAKQEAgLTk2LDE0ICs5OCwxNyBAQAogLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAjbGluZSAyMyAiZHRjLXBhcnNlci55IgogCisjaW5jbHVkZSA8c3RkaW8uaD4KKwogI2luY2x1ZGUgImR0Yy5oIgogI2luY2x1ZGUgInNyY3Bvcy5oIgogCi1pbnQgeXlsZXgodm9pZCk7Ci11bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cyk7CitleHRlcm4gaW50IHl5bGV4KHZvaWQpOwogCiBleHRlcm4gc3RydWN0IGJvb3RfaW5mbyAqdGhlX2Jvb3RfaW5mbzsKK2V4dGVybiBpbnQgdHJlZXNvdXJjZV9lcnJvcjsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKTsKIAogCiAvKiBFbmFibGluZyB0cmFjZXMuICAqLwpAQCAtMTI2LDE2ICsxMzEsMTYgQEAKIAogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLSNsaW5lIDM0ICJkdGMtcGFyc2VyLnkiCisjbGluZSAzNyAiZHRjLXBhcnNlci55IgogewogCWNoYXIgKnByb3Bub2RlbmFtZTsKIAljaGFyICpsaXRlcmFsOwogCWNoYXIgKmxhYmVscmVmOwogCXVuc2lnbmVkIGludCBjYmFzZTsKLQl1OCBieXRlOworCXVpbnQ4X3QgYnl0ZTsKIAlzdHJ1Y3QgZGF0YSBkYXRhOwogCi0JdTY0IGFkZHI7CisJdWludDY0X3QgYWRkcjsKIAljZWxsX3QgY2VsbDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wbGlzdDsKQEAgLTE0NCw3ICsxNDksNyBAQAogCXN0cnVjdCByZXNlcnZlX2luZm8gKnJlOwogfQogLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE0OCAiZHRjLXBhcnNlci50YWIuYyIKKyNsaW5lIDE1MyAiZHRjLXBhcnNlci50YWIuYyIKIAlZWVNUWVBFOwogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCkBAIC0xNjksNyArMTc0LDcgQEAKIAogCiAvKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotI2xpbmUgMTczICJkdGMtcGFyc2VyLnRhYi5jIgorI2xpbmUgMTc4ICJkdGMtcGFyc2VyLnRhYi5jIgogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTM4NiwyMCArMzkxLDIwIEBACiAvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwogI2RlZmluZSBZWUZJTkFMICA5CiAvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgNjAKKyNkZWZpbmUgWVlMQVNUICAgNzMKIAogLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDI0CisjZGVmaW5lIFlZTlRPS0VOUyAgMjcKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KICNkZWZpbmUgWVlOTlRTICAyMAogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDQzCisjZGVmaW5lIFlZTlJVTEVTICA0NQogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgNjcKKyNkZWZpbmUgWVlOU1RBVEVTICA3NgogCiAvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY4CiAKICNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQpAQCAtNDExLDE1ICs0MTYsMTUgQEAKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAgMTQsICAgICAyLCAgICAxNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTMsCi0gICAgICAxOSwgICAgMTgsICAgIDIwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDI0LCAgICAyNiwgICAgIDIsICAgICAyLCAgICAyNSwgICAgMTUsICAgICAyLCAgICAxNiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTQsCisgICAgICAyMCwgICAgMTksICAgIDIxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjEsICAgICAyLCAgICAyMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAyMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDE2LCAgICAgMiwgICAgMTcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCkBAIC00MzMsNyArNDM4LDcgQEAKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMgorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMwogfTsKIAogI2lmIFlZREVCVUcKQEAgLTQ0MywzNyArNDQ4LDM5IEBACiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgOCwgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMjEsICAgIDIyLCAgICAyNSwKICAgICAgIDI3LCAgICAzNCwgICAgMzYsICAgIDM4LCAgICA0MSwgICAgNDcsICAgIDQ4LCAgICA1MSwgICAgNTcsICAgIDYxLAotICAgICAgNjQsICAgIDY5LCAgICA3NCwgICAgNzcsICAgIDgwLCAgICA4MSwgICAgODQsICAgIDg3LCAgICA4OCwgICAgOTEsCi0gICAgICA5NCwgICAgOTcsICAgIDk4LCAgIDEwMCwgICAxMDIsICAgMTA1LCAgIDEwNiwgICAxMDksICAgMTEyLCAgIDExMywKLSAgICAgMTE2LCAgIDExOSwgICAxMjMsICAgMTI0CisgICAgICA2NCwgICAgNjksICAgIDc0LCAgICA3NywgICAgODcsICAgIDkzLCAgICA5NiwgICAgOTcsICAgMTAwLCAgIDEwMywKKyAgICAgMTA0LCAgIDEwNywgICAxMTAsICAgMTEzLCAgIDExNCwgICAxMTYsICAgMTE4LCAgIDEyMSwgICAxMjIsICAgMTI1LAorICAgICAxMjgsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM5LCAgIDE0MAogfTsKIAogLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KIHsKLSAgICAgIDI1LCAgICAgMCwgICAgLTEsICAgICAzLCAgICAxMywgICAgMjYsICAgIDMxLCAgICAtMSwgICAgMjgsICAgIDMxLAotICAgICAgLTEsICAgIC0xLCAgICAyNywgICAgMjYsICAgIC0xLCAgICA0MywgICAgIDQsICAgIDMwLCAgICAzMCwgICAgMTMsCi0gICAgICAtMSwgICAgLTEsICAgIDI5LCAgICAyOCwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgNDMsICAgICA0LCAgICAzMCwKLSAgICAgIDE0LCAgICAzMCwgICAgMTMsICAgIC0xLCAgICAgNiwgICAgLTEsICAgICA3LCAgICAtMSwgICAgMTUsICAgIDMyLAotICAgICAgLTEsICAgIDE2LCAgICAzMywgICAgNDEsICAgIDE3LCAgICAxMywgICAgLTEsICAgIC0xLCAgICAzMywgICAgMzQsCi0gICAgICAtMSwgICAgNDMsICAgICA1LCAgICAxOCwgICAgMzUsICAgIDEzLCAgICAtMSwgICAgNDMsICAgICA1LCAgICAxMywKLSAgICAgIC0xLCAgICAzNiwgICAgMTAsICAgIC0xLCAgICAzNiwgICAgMTksICAgIDM3LCAgICAyMCwgICAgLTEsICAgIDM2LAotICAgICAgMjEsICAgIDQwLCAgICAyMiwgICAgLTEsICAgIDM2LCAgICAxMiwgICAgLTEsICAgIDM1LCAgICAxMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzUsICAgIDIzLCAgICAtMSwgICAgMzYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAzOSwKLSAgICAgIC0xLCAgICAzNywgICAgMTIsICAgIC0xLCAgICAzNywgICAgMTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgIC0xLAotICAgICAgIDYsICAgIC0xLCAgICAzOCwgICAgIDcsICAgIC0xLCAgICAtMSwgICAgNDAsICAgICA5LCAgICAtMSwgICAgNDAsCi0gICAgICAxMSwgICAgLTEsICAgIC0xLCAgICA0MiwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgMzQsICAgIC0xLCAgICA0MywKLSAgICAgICA1LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAxMSwgICAgLTEKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgICAzLCAgICAxNCwgICAgMjksICAgIDM0LCAgICAtMSwgICAgMzEsICAgIDM0LAorICAgICAgLTEsICAgIC0xLCAgICAzMCwgICAgMjksICAgIC0xLCAgICA0NiwgICAgIDQsICAgIDMzLCAgICAzMywgICAgMTQsCisgICAgICAtMSwgICAgLTEsICAgIDMyLCAgICAzMSwgICAgLTEsICAgIDMwLCAgICAtMSwgICAgNDYsICAgICA0LCAgICAzMywKKyAgICAgIDE1LCAgICAzMywgICAgMTQsICAgIC0xLCAgICAgNiwgICAgLTEsICAgICA3LCAgICAtMSwgICAgMTYsICAgIDM1LAorICAgICAgLTEsICAgIDE3LCAgICAzNiwgICAgNDQsICAgIDE4LCAgICAxNCwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsCisgICAgICAtMSwgICAgNDYsICAgICA1LCAgICAxOSwgICAgMzgsICAgIDE0LCAgICAtMSwgICAgNDYsICAgICA1LCAgICAxNCwKKyAgICAgIC0xLCAgICAzOSwgICAgMTAsICAgIC0xLCAgICAzOSwgICAgMjAsICAgIDQwLCAgICAyMSwgICAgLTEsICAgIDM5LAorICAgICAgMjIsICAgIDQzLCAgICAyMywgICAgLTEsICAgIDM5LCAgICAxMiwgICAgLTEsICAgIDM5LCAgICAxMywgICAgMjQsCisgICAgICAxMCwgICAgMjUsICAgIDMzLCAgICAyNSwgICAgMzMsICAgIDI2LCAgICAtMSwgICAgMzksICAgIDEzLCAgICAyNCwKKyAgICAgIDEwLCAgICAyNiwgICAgLTEsICAgIDM4LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMjUsICAgIC0xLAorICAgICAgMzksICAgIDExLCAgICAtMSwgICAgLTEsICAgIDQwLCAgICA0MiwgICAgLTEsICAgIDQwLCAgICAxMiwgICAgLTEsCisgICAgICA0MCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgIDgsICAgIC0xLCAgICAgNiwgICAgLTEsICAgIDQxLCAgICAgNywKKyAgICAgIC0xLCAgICAtMSwgICAgNDMsICAgICA5LCAgICAtMSwgICAgNDMsICAgIDExLCAgICAtMSwgICAgLTEsICAgIDQ1LAorICAgICAgNDQsICAgIC0xLCAgICA0NSwgICAgMzcsICAgIC0xLCAgICA0NiwgICAgIDUsICAgIDM1LCAgICAtMSwgICAgLTEsCisgICAgICAxMSwgICAgLTEKIH07CiAKIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA4NSwgICAgODUsICAgIDg5LCAgICA5NywgICAxMDAsICAgMTA3LCAgIDExNSwgICAxMTgsICAgMTI1LAotICAgICAxMjksICAgMTM2LCAgIDE0MCwgICAxNDcsICAgMTU0LCAgIDE2MiwgICAxNjUsICAgMTcyLCAgIDE3NiwgICAxODMsCi0gICAgIDE4NywgICAxOTEsICAgMTk1LCAgIDE5OSwgICAyMDcsICAgMjEwLCAgIDIxNCwgICAyMjIsICAgMjI1LCAgIDIyOSwKLSAgICAgMjM0LCAgIDI0MiwgICAyNDUsICAgMjQ5LCAgIDI1MywgICAyNjEsICAgMjY0LCAgIDI2OCwgICAyNzYsICAgMjc5LAotICAgICAyODMsICAgMjkxLCAgIDI5OSwgICAzMDIKKyAgICAgICAwLCAgICA4OSwgICAgODksICAgIDkzLCAgIDEwMSwgICAxMDQsICAgMTExLCAgIDExOSwgICAxMjIsICAgMTI5LAorICAgICAxMzMsICAgMTQwLCAgIDE0NCwgICAxNTEsICAgMTU4LCAgIDE2NiwgICAxNjksICAgMTc2LCAgIDE4MCwgICAxODcsCisgICAgIDE5MSwgICAxOTUsICAgMTk5LCAgIDIwMywgICAyMjAsICAgMjMxLCAgIDIzOSwgICAyNDIsICAgMjQ2LCAgIDI1NCwKKyAgICAgMjU3LCAgIDI2MSwgICAyNjYsICAgMjc0LCAgIDI3NywgICAyODEsICAgMjg1LCAgIDI5MywgICAyOTYsICAgMzAwLAorICAgICAzMDgsICAgMzExLCAgIDMxNSwgICAzMjMsICAgMzMxLCAgIDMzNAogfTsKICNlbmRpZgogCkBAIC00ODQsMTIgKzQ5MSwxMiBAQAogewogICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkRUX1YxIiwgIkRUX01FTVJFU0VSVkUiLAogICAiRFRfUFJPUE5PREVOQU1FIiwgIkRUX0xJVEVSQUwiLCAiRFRfTEVHQUNZTElURVJBTCIsICJEVF9CQVNFIiwKLSAgIkRUX0JZVEUiLCAiRFRfU1RSSU5HIiwgIkRUX0xBQkVMIiwgIkRUX1JFRiIsICInOyciLCAiJy0nIiwgIicvJyIsICIneyciLAotICAiJ30nIiwgIic9JyIsICInPCciLCAiJz4nIiwgIidbJyIsICInXSciLCAiJywnIiwgIiRhY2NlcHQiLCAic291cmNlZmlsZSIsCi0gICJtZW1yZXNlcnZlcyIsICJtZW1yZXNlcnZlIiwgInYwX21lbXJlc2VydmVzIiwgInYwX21lbXJlc2VydmUiLCAiYWRkciIsCi0gICJkZXZpY2V0cmVlIiwgIm5vZGVkZWYiLCAicHJvcGxpc3QiLCAicHJvcGRlZiIsICJwcm9wZGF0YSIsCi0gICJwcm9wZGF0YXByZWZpeCIsICJjZWxsbGlzdCIsICJjZWxsYmFzZSIsICJjZWxsdmFsIiwgImJ5dGVzdHJpbmciLAotICAic3Vibm9kZXMiLCAic3Vibm9kZSIsICJsYWJlbCIsIDAKKyAgIkRUX0JZVEUiLCAiRFRfU1RSSU5HIiwgIkRUX0xBQkVMIiwgIkRUX1JFRiIsICJEVF9JTkNCSU4iLCAiJzsnIiwgIictJyIsCisgICInLyciLCAiJ3snIiwgIid9JyIsICInPSciLCAiJzwnIiwgIic+JyIsICInWyciLCAiJ10nIiwgIicoJyIsICInLCciLAorICAiJyknIiwgIiRhY2NlcHQiLCAic291cmNlZmlsZSIsICJtZW1yZXNlcnZlcyIsICJtZW1yZXNlcnZlIiwKKyAgInYwX21lbXJlc2VydmVzIiwgInYwX21lbXJlc2VydmUiLCAiYWRkciIsICJkZXZpY2V0cmVlIiwgIm5vZGVkZWYiLAorICAicHJvcGxpc3QiLCAicHJvcGRlZiIsICJwcm9wZGF0YSIsICJwcm9wZGF0YXByZWZpeCIsICJjZWxsbGlzdCIsCisgICJjZWxsYmFzZSIsICJjZWxsdmFsIiwgImJ5dGVzdHJpbmciLCAic3Vibm9kZXMiLCAic3Vibm9kZSIsICJsYWJlbCIsIDAKIH07CiAjZW5kaWYKIApAQCAtNDk5LDE5ICs1MDYsMTkgQEAKIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQogewogICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgICA1OSwgICAgNDUsICAgIDQ3LCAgIDEyMywgICAxMjUsICAgIDYxLCAgICA2MCwKLSAgICAgIDYyLCAgICA5MSwgICAgOTMsICAgIDQ0CisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAgNTksICAgIDQ1LCAgICA0NywgICAxMjMsICAgMTI1LCAgICA2MSwKKyAgICAgIDYwLCAgICA2MiwgICAgOTEsICAgIDkzLCAgICA0MCwgICAgNDQsICAgIDQxCiB9OwogIyBlbmRpZgogCiAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KIHsKLSAgICAgICAwLCAgICAyNCwgICAgMjUsICAgIDI1LCAgICAyNiwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjgsICAgIDI5LAotICAgICAgMjksICAgIDMwLCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzMsICAgIDM0LCAgICAzNCwgICAgMzUsCi0gICAgICAzNSwgICAgMzUsICAgIDM1LCAgICAzNSwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzcsICAgIDM3LCAgICAzNywKLSAgICAgIDM3LCAgICAzOCwgICAgMzgsICAgIDM5LCAgICAzOSwgICAgNDAsICAgIDQwLCAgICA0MCwgICAgNDEsICAgIDQxLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDMKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzEsICAgIDMyLAorICAgICAgMzIsICAgIDMzLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzgsCisgICAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOSwgICAgMzksICAgIDM5LCAgICA0MCwKKyAgICAgIDQwLCAgICA0MCwgICAgNDAsICAgIDQxLCAgICA0MSwgICAgNDIsICAgIDQyLCAgICA0MywgICAgNDMsICAgIDQzLAorICAgICAgNDQsICAgIDQ0LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NgogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwpAQCAtNTE5LDkgKzUyNiw5IEBACiB7CiAgICAgICAgMCwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDAsICAgICAyLCAgICAgMSwKICAgICAgICA2LCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgNSwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAyLAotICAgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMiwKLSAgICAgICAyLCAgICAgMywgICAgIDAsICAgICAxCisgICAgICAgNCwgICAgIDQsICAgICAyLCAgICAgOSwgICAgIDUsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAorICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMQogfTsKIAogLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCkBAIC01MjksODEgKzUzNiw4NiBAQAogICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KIHsKLSAgICAgICA3LCAgICAgMCwgICAgNDMsICAgICAwLCAgICAgOSwgICAgIDAsICAgICA3LCAgICAgMCwgICAgIDQsICAgICAxLAorICAgICAgIDcsICAgICAwLCAgICA0NSwgICAgIDAsICAgICA5LCAgICAgMCwgICAgIDcsICAgICAwLCAgICAgNCwgICAgIDEsCiAgICAgICAgMCwgICAgIDMsICAgICA4LCAgICAgMCwgICAgIDAsICAgICA0LCAgICAgMCwgICAgMTUsICAgIDEzLCAgICAxMSwKLSAgICAgIDEyLCAgICAgMCwgICAgIDIsICAgICA1LCAgICAgMCwgICAgMzgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LAotICAgICAgIDAsICAgIDM4LCAgICAgMCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgNDAsICAgIDM5LCAgICAgMCwgICAgMTAsCi0gICAgICAxNCwgICAgMTgsICAgIDI0LCAgICA0MSwgICAgIDAsICAgICAwLCAgICAyMywgICAgMTcsICAgIDI1LCAgICAxOSwKLSAgICAgIDI2LCAgICAyMiwgICAgMjcsICAgIDM1LCAgICAzMSwgICAgIDAsICAgIDMzLCAgICAzMiwgICAgMzAsICAgIDI5LAotICAgICAgMjAsICAgICAwLCAgICAyOCwgICAgMzYsICAgIDM3LCAgICAyMSwgICAgMzQKKyAgICAgIDEyLCAgICAgMCwgICAgIDIsICAgICA1LCAgICAgMCwgICAgNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE2LAorICAgICAgIDAsICAgIDQwLCAgICAgMCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgNDIsICAgIDQxLCAgICAgMCwgICAgMTAsCisgICAgICAxNCwgICAgMTgsICAgIDI2LCAgICA0MywgICAgIDAsICAgICAwLCAgICAyNSwgICAgMTcsICAgIDI3LCAgICAxOSwKKyAgICAgIDI4LCAgICAyMiwgICAgIDAsICAgIDI5LCAgICAzNywgICAgIDAsICAgIDMzLCAgICAgMCwgICAgIDAsICAgIDM1LAorICAgICAgMzQsICAgIDMyLCAgICAzMSwgICAgMjAsICAgICAwLCAgICAzMCwgICAgMzgsICAgIDM5LCAgICAyMSwgICAgIDAsCisgICAgICAyNCwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzCiB9OwogCiAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQogewogICAgICAgLTEsICAgICAzLCAgICAxNCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgMjcsICAgIDExLCAgICAxOCwgICAgMjUsCi0gICAgICAyOSwgICAgNDQsICAgIDQ1LCAgICA1NCwgICAgNjEsICAgIDYyLCAgICA1NSwgICAgMzAsICAgIDMxLCAgICAgNworICAgICAgMjksICAgIDQ0LCAgICA0NSwgICAgNTYsICAgIDY0LCAgICA2NSwgICAgNTcsICAgIDMwLCAgICAzMSwgICAgIDcKIH07CiAKIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwogICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTEzCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xNAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGFjdFtdID0KIHsKLSAgICAgIDIzLCAgICAxMSwgICAtMTMsICAgIDM3LCAgIC0xMywgICAgLTQsICAgIDE4LCAgICAzOSwgICAgMTgsICAgLTEzLAotICAgICAgMjgsICAgLTEzLCAgIC0xMywgICAgMzQsICAgIC00LCAgICAxOCwgICAgNDEsICAgLTEzLCAgIC0xMywgICAtMTMsCi0gICAgIC0xMywgICAgMjUsICAgLTEzLCAgIC0xMywgICAgMzQsICAgIC0zLCAgICAzNCwgICAgMzMsICAgIDM0LCAgIC0xMywKLSAgICAgIDMwLCAgICAtMywgICAgNDMsICAgIDM2LCAgIC0xMywgICAgMzgsICAgLTEzLCAgIC0xMywgICAgMjAsICAgLTEzLAotICAgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgICAyLCAgICAgOSwgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsCi0gICAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMywgICAgLTIsICAgIC02LCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMywKLSAgICAgLTEzLCAgICA0NSwgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzCisgICAgICAzMCwgICAtMTEsICAgLTE0LCAgICAgNywgICAtMTQsICAgIC0xLCAgICAyNywgICAgMTMsICAgIDI3LCAgIC0xNCwKKyAgICAgICA4LCAgIC0xNCwgICAtMTQsICAgIDQwLCAgICAtMSwgICAgMjcsICAgIDM1LCAgIC0xNCwgICAtMTQsICAgLTE0LAorICAgICAtMTQsICAgIDIxLCAgIC0xNCwgICAtMTQsICAgIDQwLCAgICAyNCwgICAgNDAsICAgIDI4LCAgICA0MCwgICAtMTQsCisgICAgICAzMiwgICAgMjQsICAgIDQ2LCAgICAzOCwgICAtMTQsICAgIDM5LCAgIC0xNCwgICAtMTQsICAgIDI2LCAgIC0xNCwKKyAgICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgICAtOSwgICAgMTAsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LAorICAgICAtMTQsICAgLTE0LCAgICAzMSwgICAtMTQsICAgLTE0LCAgICA0NCwgICAgLTIsICAgICAzLCAgICAyMywgICAtMTQsCisgICAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAgNTAsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgICA0MCwKKyAgICAgLTE0LCAgIC0xNCwgICAgMzMsICAgIDQwLCAgICAzNiwgICAtMTQKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KIHsKLSAgICAgLTEzLCAgIC0xMywgICAgMzUsICAgIDI3LCAgICA0NywgICAtMTMsICAgLTEyLCAgICA0MCwgICAgMTcsICAgLTEzLAotICAgICAgMjYsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgIDI5LCAgIC0xMywgICAgLTgKKyAgICAgLTE0LCAgIC0xNCwgICAgNDgsICAgIDI5LCAgICA1MywgICAtMTQsICAgLTEzLCAgICA0NywgICAgMzQsICAgLTE0LAorICAgICAgMzcsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgIDQyLCAgIC0xNCwgICAgLTcKIH07CiAKIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgogICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTQzCisjZGVmaW5lIFlZVEFCTEVfTklORiAtNDUKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXRhYmxlW10gPQogewotICAgICAgMTYsICAgIDIxLCAgIC00MiwgICAgNjMsICAgIDU2LCAgICA2NCwgICAgNTcsICAgIDE2LCAgICAgMiwgICAgNTgsCi0gICAgICA1OSwgICAgMTAsICAgIDI4LCAgICA0NiwgICAgMzMsICAgIDQ3LCAgICA2NSwgICAgMzIsICAgIDYwLCAgICA0OSwKLSAgICAgIDUwLCAgICA1MSwgICAtNDIsICAgIDMyLCAgICAgOCwgICAgNDgsICAgICAxLCAgIC00MiwgICAgNTIsICAgICAyLAotICAgICAgNTMsICAgIDE5LCAgICAyMCwgICAgNDEsICAgICAyLCAgICAxNSwgICAgMTcsICAgICA5LCAgICA0MiwgICAgMjYsCi0gICAgICAxOSwgICAgMjAsICAgIDE1LCAgICAxMywgICAgMTcsICAgIDI0LCAgICAzNCwgICAgMzUsICAgIDM4LCAgICAzOSwKLSAgICAgIDIzLCAgICA0MCwgICAgNjYsICAgIDEyLCAgICAyMiwgICAgNDMsICAgICAwLCAgICAzNiwgICAgIDAsICAgICAwLAotICAgICAgMzcKKyAgICAgIDIxLCAgICAxNiwgICAgNDYsICAgICA4LCAgICA1OSwgICAgNDcsICAgIDYwLCAgICAgOSwgICAgMTYsICAgIDYxLAorICAgICAgNjIsICAgIDI4LCAgICA2NiwgICAgMzMsICAgIDY3LCAgICAxMCwgICAgNDgsICAgIDEzLCAgICAzMiwgICAgNjMsCisgICAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgMzIsICAgIDE3LCAgICA2OCwgICAgMTksICAgIDIwLCAgIC00NCwKKyAgICAgIDUzLCAgIC00NCwgICAgNTQsICAgICAxLCAgIC00NCwgICAgIDIsICAgIDI2LCAgICAxNSwgICAgIDIsICAgIDI0LAorICAgICAgNDEsICAgICAyLCAgICAzNCwgICAgMTcsICAgIDE1LCAgICA0MiwgICAgMTksICAgIDIwLCAgICA2OSwgICAgNzAsCisgICAgICAzNSwgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNTgsICAgIDU1LCAgICA3MiwgICAgNzEsICAgIDczLCAgICAxMiwKKyAgICAgIDc0LCAgICAyMiwgICAgNzUsICAgIDIzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MywgICAgMzcKIH07CiAKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQogewotICAgICAgIDgsICAgIDEzLCAgICAgNSwgICAgIDksICAgICA2LCAgICAxMSwgICAgIDgsICAgIDE1LCAgICAxMSwgICAgMTEsCi0gICAgICAxMiwgICAgMTUsICAgIDI0LCAgICAxMSwgICAgMjYsICAgIDEzLCAgICAyMiwgICAgMjUsICAgIDIwLCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgIDQsICAgIDMxLCAgICAxMywgICAgMjMsICAgICAzLCAgICAgNCwgICAgMTksICAgIDExLAotICAgICAgMjEsICAgICA2LCAgICAgNywgICAgMTMsICAgIDExLCAgICAgOCwgICAgMTYsICAgICAwLCAgICAxOCwgICAgMTQsCi0gICAgICAgNiwgICAgIDcsICAgIDE1LCAgICAgNCwgICAgMTYsICAgICA0LCAgICAxMywgICAgMTcsICAgICA1LCAgICAxMywKLSAgICAgIDE1LCAgICAxMywgICAgIDcsICAgICA2LCAgICAxNCwgICAgMzgsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIC0xLAotICAgICAgMzEKKyAgICAgIDEzLCAgICAgOCwgICAgMTEsICAgIDE0LCAgICAgNiwgICAgMTQsICAgICA4LCAgICAgMCwgICAgMTUsICAgIDExLAorICAgICAgMTIsICAgIDI0LCAgICAgOSwgICAgMjYsICAgIDExLCAgICAxNiwgICAgMjUsICAgICA0LCAgICAyNSwgICAgMjEsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMzEsICAgIDE3LCAgICAyMywgICAgIDYsICAgICA3LCAgICAgNSwKKyAgICAgIDIwLCAgICAgNCwgICAgMjIsICAgICAzLCAgICAgNCwgICAgMTEsICAgIDE1LCAgICAgOCwgICAgMTEsICAgICA0LAorICAgICAgMTQsICAgIDExLCAgICAxNCwgICAgMTcsICAgIDE1LCAgICAxOSwgICAgIDYsICAgICA3LCAgICAyNSwgICAgMjYsCisgICAgICAxOCwgICAgIDUsICAgIDE0LCAgICAxNCwgICAgMTAsICAgIDI0LCAgICA2OSwgICAgIDcsICAgIDI1LCAgICAgNiwKKyAgICAgIDczLCAgICAxNCwgICAgMjYsICAgIDE1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzEKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCiAgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogewotICAgICAgIDAsICAgICAzLCAgICAxMSwgICAgMjUsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDQzLCAgICAxMywgICAgIDAsCi0gICAgICAxNSwgICAgMzEsICAgIDI4LCAgICAgNCwgICAgMjYsICAgIDI3LCAgICA0MywgICAgMTYsICAgIDMyLCAgICAgNiwKLSAgICAgICA3LCAgICAzMCwgICAgMzEsICAgIDI2LCAgICAgNCwgICAgMzMsICAgIDE0LCAgICAzMCwgICAgMzAsICAgIDM0LAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgMzAsICAgIDEzLCAgICAxNywgICAgMzQsICAgIDQxLCAgICAgNSwgICAgMTMsCi0gICAgICAxMywgICAgMTMsICAgIDE4LCAgICAzMiwgICAgMzUsICAgIDM2LCAgICAxMSwgICAgMTMsICAgIDIzLCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTksICAgIDIxLCAgICAzNywgICAgNDAsICAgICA2LCAgICAgOCwgICAgMTEsICAgIDEyLAotICAgICAgMjAsICAgIDM4LCAgICAzOSwgICAgIDksICAgIDExLCAgICAyMiwgICAgIDcKKyAgICAgICAwLCAgICAgMywgICAgMTEsICAgIDI4LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICA0NiwgICAgMTQsICAgICAwLAorICAgICAgMTYsICAgIDM0LCAgICAzMSwgICAgIDQsICAgIDI5LCAgICAzMCwgICAgNDYsICAgIDE3LCAgICAzNSwgICAgIDYsCisgICAgICAgNywgICAgMzMsICAgIDM0LCAgICAyOSwgICAgIDQsICAgIDM2LCAgICAxNSwgICAgMzMsICAgIDMzLCAgICAzNywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDMzLCAgICAxNCwgICAgMTgsICAgIDM3LCAgICA0NCwgICAgIDUsICAgIDE0LAorICAgICAgMTQsICAgIDE0LCAgICAxOSwgICAgMzUsICAgIDM4LCAgICAzOSwgICAgMTEsICAgIDE0LCAgICAyNSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyMCwgICAgMjIsICAgIDI0LCAgICA0MCwgICAgNDMsICAgIDEwLCAgICAgNiwKKyAgICAgICA4LCAgICAxMSwgICAgMTIsICAgIDIxLCAgICA0MSwgICAgNDIsICAgICA5LCAgICAxMSwgICAgMjMsICAgIDI1LAorICAgICAgMjYsICAgICA3LCAgICAzMywgICAgMjUsICAgIDMzLCAgICAyNgogfTsKIAogI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQpAQCAtMTQ0MCwyODkgKzE0NTIsMzIzIEBACiAgIHN3aXRjaCAoeXluKQogICAgIHsKICAgICAgICAgY2FzZSAyOgotI2xpbmUgODYgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDkwICJkdGMtcGFyc2VyLnkiCiAgICAgewotCQkJdGhlX2Jvb3RfaW5mbyA9IGJ1aWxkX2Jvb3RfaW5mbygoeXl2c3BbKDMpIC0gKDQpXS5yZSksICh5eXZzcFsoNCkgLSAoNCldLm5vZGUpKTsKKwkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygzKSAtICg0KV0ucmUpLCAoeXl2c3BbKDQpIC0gKDQpXS5ub2RlKSwgMCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOgotI2xpbmUgOTAgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDk0ICJkdGMtcGFyc2VyLnkiCiAgICAgewotCQkJdGhlX2Jvb3RfaW5mbyA9IGJ1aWxkX2Jvb3RfaW5mbygoeXl2c3BbKDEpIC0gKDIpXS5yZSksICh5eXZzcFsoMikgLSAoMildLm5vZGUpKTsKKwkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5ub2RlKSwgMCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OgotI2xpbmUgOTcgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDEwMSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKLSNsaW5lIDEwMSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTA1ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9IGNoYWluX3Jlc2VydmVfZW50cnkoKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5yZSkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDEwOCAiZHRjLXBhcnNlci55IgorI2xpbmUgMTEyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9IGJ1aWxkX3Jlc2VydmVfZW50cnkoKHl5dnNwWygzKSAtICg1KV0uYWRkciksICh5eXZzcFsoNCkgLSAoNSldLmFkZHIpLCAoeXl2c3BbKDEpIC0gKDUpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKLSNsaW5lIDExNSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTE5ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9IE5VTEw7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMTE5ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMjMgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gY2hhaW5fcmVzZXJ2ZV9lbnRyeSgoeXl2c3BbKDEpIC0gKDIpXS5yZSksICh5eXZzcFsoMikgLSAoMildLnJlKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTI2ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMzAgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gKHl5dnNwWygxKSAtICgxKV0ucmUpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAxMzAgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDEzNCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBidWlsZF9yZXNlcnZlX2VudHJ5KCh5eXZzcFsoMykgLSAoNildLmFkZHIpLCAoeXl2c3BbKDUpIC0gKDYpXS5hZGRyKSAtICh5eXZzcFsoMykgLSAoNildLmFkZHIpICsgMSwgKHl5dnNwWygxKSAtICg2KV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDExOgotI2xpbmUgMTM3ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxNDEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuYWRkcikgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygxKSAtICgxKV0ubGl0ZXJhbCksIDAsIDY0KTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDEyOgotI2xpbmUgMTQxICJkdGMtcGFyc2VyLnkiCisjbGluZSAxNDUgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuYWRkcikgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygxKSAtICgxKV0ubGl0ZXJhbCksIDE2LCA2NCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDE0OCAiZHRjLXBhcnNlci55IgorI2xpbmUgMTUyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGUpID0gbmFtZV9ub2RlKCh5eXZzcFsoMikgLSAoMildLm5vZGUpLCAiIiwgTlVMTCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKLSNsaW5lIDE1NSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTU5ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGUpID0gYnVpbGRfbm9kZSgoeXl2c3BbKDIpIC0gKDUpXS5wcm9wbGlzdCksICh5eXZzcFsoMykgLSAoNSldLm5vZGVsaXN0KSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNToKLSNsaW5lIDE2MiAiZHRjLXBhcnNlci55IgorI2xpbmUgMTY2ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnByb3BsaXN0KSA9IE5VTEw7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKLSNsaW5lIDE2NiAiZHRjLXBhcnNlci55IgorI2xpbmUgMTcwICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnByb3BsaXN0KSA9IGNoYWluX3Byb3BlcnR5KCh5eXZzcFsoMikgLSAoMildLnByb3ApLCAoeXl2c3BbKDEpIC0gKDIpXS5wcm9wbGlzdCkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAxNzMgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE3NyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wKSA9IGJ1aWxkX3Byb3BlcnR5KCh5eXZzcFsoMikgLSAoNSldLnByb3Bub2RlbmFtZSksICh5eXZzcFsoNCkgLSAoNSldLmRhdGEpLCAoeXl2c3BbKDEpIC0gKDUpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAxNzcgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE4MSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wKSA9IGJ1aWxkX3Byb3BlcnR5KCh5eXZzcFsoMikgLSAoMyldLnByb3Bub2RlbmFtZSksIGVtcHR5X2RhdGEsICh5eXZzcFsoMSkgLSAoMyldLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKLSNsaW5lIDE4NCAiZHRjLXBhcnNlci55IgorI2xpbmUgMTg4ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgKHl5dnNwWygyKSAtICgyKV0uZGF0YSkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6Ci0jbGluZSAxODggImR0Yy1wYXJzZXIueSIKLSAgICB7Ci0JCQkoeXl2YWwuZGF0YSkgPSBkYXRhX21lcmdlKCh5eXZzcFsoMSkgLSAoNCldLmRhdGEpLCAoeXl2c3BbKDMpIC0gKDQpXS5kYXRhKSk7Ci0JCTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMToKICNsaW5lIDE5MiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfbWVyZ2UoKHl5dnNwWygxKSAtICg0KV0uZGF0YSksICh5eXZzcFsoMykgLSAoNCldLmRhdGEpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDIyOgorICBjYXNlIDIxOgogI2xpbmUgMTk2ICJkdGMtcGFyc2VyLnkiCiAgICAgeworCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDQpXS5kYXRhKSwgKHl5dnNwWygzKSAtICg0KV0uZGF0YSkpOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisjbGluZSAyMDAgImR0Yy1wYXJzZXIueSIKKyAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIFJFRl9QQVRILCAoeXl2c3BbKDIpIC0gKDIpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6Ci0jbGluZSAyMDAgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDIwNCAiZHRjLXBhcnNlci55IgorICAgIHsKKwkJCXN0cnVjdCBzZWFyY2hfcGF0aCBwYXRoID0geyBzcmNwb3NfZmlsZS0+ZGlyLCBOVUxMLCBOVUxMIH07CisJCQlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGUgPSBkdGNfb3Blbl9maWxlKCh5eXZzcFsoNCkgLSAoOSldLmRhdGEpLnZhbCwgJnBhdGgpOworCQkJc3RydWN0IGRhdGEgZCA9IGVtcHR5X2RhdGE7CisKKwkJCWlmICgoeXl2c3BbKDYpIC0gKDkpXS5hZGRyKSAhPSAwKQorCQkJCWlmIChmc2VlayhmaWxlLT5maWxlLCAoeXl2c3BbKDYpIC0gKDkpXS5hZGRyKSwgU0VFS19TRVQpICE9IDApCisJCQkJCXl5ZXJyb3JmKCJDb3VsZG4ndCBzZWVrIHRvIG9mZnNldCAlbGx1IGluIFwiJXNcIjogJXMiLAorCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKHl5dnNwWyg2KSAtICg5KV0uYWRkciksCisJCQkJCQkgKHl5dnNwWyg0KSAtICg5KV0uZGF0YSkudmFsLCBzdHJlcnJvcihlcnJubykpOworCisJCQlkID0gZGF0YV9jb3B5X2ZpbGUoZmlsZS0+ZmlsZSwgKHl5dnNwWyg4KSAtICg5KV0uYWRkcikpOworCisJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX21lcmdlKCh5eXZzcFsoMSkgLSAoOSldLmRhdGEpLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjQ6CisjbGluZSAyMjEgImR0Yy1wYXJzZXIueSIKKyAgICB7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgoeXl2c3BbKDQpIC0gKDUpXS5kYXRhKS52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlkID0gZGF0YV9jb3B5X2ZpbGUoZmlsZS0+ZmlsZSwgLTEpOworCisJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX21lcmdlKCh5eXZzcFsoMSkgLSAoNSldLmRhdGEpLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQk7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjU6CisjbGluZSAyMzIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIExBQkVMLCAoeXl2c3BbKDIpIC0gKDIpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjQ6Ci0jbGluZSAyMDcgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAyNjoKKyNsaW5lIDIzOSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGVtcHR5X2RhdGE7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKLSNsaW5lIDIxMSAiZHRjLXBhcnNlci55IgorICBjYXNlIDI3OgorI2xpbmUgMjQzICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gKHl5dnNwWygxKSAtICgyKV0uZGF0YSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNjoKLSNsaW5lIDIxNSAiZHRjLXBhcnNlci55IgorICBjYXNlIDI4OgorI2xpbmUgMjQ3ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBMQUJFTCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI3OgotI2xpbmUgMjIyICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMjk6CisjbGluZSAyNTQgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBlbXB0eV9kYXRhOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjg6Ci0jbGluZSAyMjYgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzMDoKKyNsaW5lIDI1OCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYXBwZW5kX2NlbGwoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksICh5eXZzcFsoMikgLSAoMildLmNlbGwpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI5OgotI2xpbmUgMjMwICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzE6CisjbGluZSAyNjIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FwcGVuZF9jZWxsKGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgUkVGX1BIQU5ETEUsCiAJCQkJCQkJICAgICAgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKSwgLTEpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzA6Ci0jbGluZSAyMzUgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzMjoKKyNsaW5lIDI2NyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgTEFCRUwsICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMToKLSNsaW5lIDI0MiAiZHRjLXBhcnNlci55IgorICBjYXNlIDMzOgorI2xpbmUgMjc0ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmNiYXNlKSA9IDE2OwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzM6Ci0jbGluZSAyNTAgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzNToKKyNsaW5lIDI4MiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5jZWxsKSA9IGV2YWxfbGl0ZXJhbCgoeXl2c3BbKDEpIC0gKDEpXS5saXRlcmFsKSwgMCwgMzIpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzQ6Ci0jbGluZSAyNTQgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzNjoKKyNsaW5lIDI4NiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5jZWxsKSA9IGV2YWxfbGl0ZXJhbCgoeXl2c3BbKDIpIC0gKDIpXS5saXRlcmFsKSwgKHl5dnNwWygxKSAtICgyKV0uY2Jhc2UpLCAzMik7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNToKLSNsaW5lIDI2MSAiZHRjLXBhcnNlci55IgorICBjYXNlIDM3OgorI2xpbmUgMjkzICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZW1wdHlfZGF0YTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDM2OgotI2xpbmUgMjY1ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzg6CisjbGluZSAyOTcgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FwcGVuZF9ieXRlKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCAoeXl2c3BbKDIpIC0gKDIpXS5ieXRlKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKLSNsaW5lIDI2OSAiZHRjLXBhcnNlci55IgorICBjYXNlIDM5OgorI2xpbmUgMzAxICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBMQUJFTCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDM4OgotI2xpbmUgMjc2ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDA6CisjbGluZSAzMDggImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubm9kZWxpc3QpID0gTlVMTDsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDM5OgotI2xpbmUgMjgwICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDE6CisjbGluZSAzMTIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubm9kZWxpc3QpID0gY2hhaW5fbm9kZSgoeXl2c3BbKDEpIC0gKDIpXS5ub2RlKSwgKHl5dnNwWygyKSAtICgyKV0ubm9kZWxpc3QpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDQwOgotI2xpbmUgMjg0ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDI6CisjbGluZSAzMTYgImR0Yy1wYXJzZXIueSIKICAgICB7Ci0JCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzXG4iKTsKKwkJCXl5ZXJyb3IoInN5bnRheCBlcnJvcjogcHJvcGVydGllcyBtdXN0IHByZWNlZGUgc3Vibm9kZXMiKTsKIAkJCVlZRVJST1I7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MToKLSNsaW5lIDI5MiAiZHRjLXBhcnNlci55IgorICBjYXNlIDQzOgorI2xpbmUgMzI0ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGUpID0gbmFtZV9ub2RlKCh5eXZzcFsoMykgLSAoMyldLm5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5wcm9wbm9kZW5hbWUpLCAoeXl2c3BbKDEpIC0gKDMpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDI6Ci0jbGluZSAyOTkgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSA0NDoKKyNsaW5lIDMzMSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5sYWJlbHJlZikgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDM6Ci0jbGluZSAzMDMgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSA0NToKKyNsaW5lIDMzNSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5sYWJlbHJlZikgPSAoeXl2c3BbKDEpIC0gKDEpXS5sYWJlbHJlZik7CiAJCTt9CkBAIC0xNzMwLDcgKzE3NzYsNyBAQAogCiAKIC8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotI2xpbmUgMTczNCAiZHRjLXBhcnNlci50YWIuYyIKKyNsaW5lIDE3ODAgImR0Yy1wYXJzZXIudGFiLmMiCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKQEAgLTE5NTAsMjEgKzE5OTYsMzIgQEAKIH0KIAogCi0jbGluZSAzMDggImR0Yy1wYXJzZXIueSIKKyNsaW5lIDM0MCAiZHRjLXBhcnNlci55IgogCiAKLXZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqcykKK3ZvaWQgeXllcnJvcmYoY2hhciBjb25zdCAqcywgLi4uKQogewotCWNvbnN0IGNoYXIgKmZuYW1lID0gc3JjcG9zX2ZpbGVuYW1lX2Zvcl9udW0oeXlsbG9jLmZpbGVudW0pOworCWNvbnN0IGNoYXIgKmZuYW1lID0gc3JjcG9zX2ZpbGUgPyBzcmNwb3NfZmlsZS0+bmFtZSA6ICI8bm8tZmlsZT4iOworCXZhX2xpc3QgdmE7CisJdmFfc3RhcnQodmEsIHMpOwogCiAJaWYgKHN0cmNtcChmbmFtZSwgIi0iKSA9PSAwKQogCQlmbmFtZSA9ICJzdGRpbiI7CiAKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICVzXG4iLAotCQlmbmFtZSwgeXlsbG9jLmZpcnN0X2xpbmUsIHMpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgIiwgZm5hbWUsIHl5bGxvYy5maXJzdF9saW5lKTsKKwl2ZnByaW50ZihzdGRlcnIsIHMsIHZhKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKwl0cmVlc291cmNlX2Vycm9yID0gMTsKKwl2YV9lbmQodmEpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cykKK3ZvaWQgeXllcnJvciAoY2hhciBjb25zdCAqcykKK3sKKwl5eWVycm9yZigiJXMiLCBzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CiAJY2hhciAqZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5oX3NoaXBwZWQKaW5kZXggNDcwN2IwMi4uYmE5OTEwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5oX3NoaXBwZWQKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnRhYi5oX3NoaXBwZWQKQEAgLTQ4LDcgKzQ4LDggQEAKICAgICAgRFRfQllURSA9IDI2NCwKICAgICAgRFRfU1RSSU5HID0gMjY1LAogICAgICBEVF9MQUJFTCA9IDI2NiwKLSAgICAgRFRfUkVGID0gMjY3CisgICAgIERUX1JFRiA9IDI2NywKKyAgICAgRFRfSU5DQklOID0gMjY4CiAgICB9OwogI2VuZGlmCiAvKiBUb2tlbnMuICAqLwpAQCAtNjIsMjIgKzYzLDIzIEBACiAjZGVmaW5lIERUX1NUUklORyAyNjUKICNkZWZpbmUgRFRfTEFCRUwgMjY2CiAjZGVmaW5lIERUX1JFRiAyNjcKKyNkZWZpbmUgRFRfSU5DQklOIDI2OAogCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotI2xpbmUgMzQgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDM3ICJkdGMtcGFyc2VyLnkiCiB7CiAJY2hhciAqcHJvcG5vZGVuYW1lOwogCWNoYXIgKmxpdGVyYWw7CiAJY2hhciAqbGFiZWxyZWY7CiAJdW5zaWduZWQgaW50IGNiYXNlOwotCXU4IGJ5dGU7CisJdWludDhfdCBieXRlOwogCXN0cnVjdCBkYXRhIGRhdGE7CiAKLQl1NjQgYWRkcjsKKwl1aW50NjRfdCBhZGRyOwogCWNlbGxfdCBjZWxsOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3BsaXN0OwpAQCAtODYsNyArODgsNyBAQAogCXN0cnVjdCByZXNlcnZlX2luZm8gKnJlOwogfQogLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0jbGluZSA5MCAiZHRjLXBhcnNlci50YWIuaCIKKyNsaW5lIDkyICJkdGMtcGFyc2VyLnRhYi5oIgogCVlZU1RZUEU7CiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55IGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnkKaW5kZXggMDAyZWE3Zi4uYjJhYjU2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnkKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtcGFyc2VyLnkKQEAgLTIxLDE0ICsyMSwxNyBAQAogJWxvY2F0aW9ucwogCiAleworI2luY2x1ZGUgPHN0ZGlvLmg+CisKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKIAotaW50IHl5bGV4KHZvaWQpOwotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpOworZXh0ZXJuIGludCB5eWxleCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBib290X2luZm8gKnRoZV9ib290X2luZm87CitleHRlcm4gaW50IHRyZWVzb3VyY2VfZXJyb3I7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cyk7CiAlfQogCiAldW5pb24gewpAQCAtMzYsMTAgKzM5LDEwIEBACiAJY2hhciAqbGl0ZXJhbDsKIAljaGFyICpsYWJlbHJlZjsKIAl1bnNpZ25lZCBpbnQgY2Jhc2U7Ci0JdTggYnl0ZTsKKwl1aW50OF90IGJ5dGU7CiAJc3RydWN0IGRhdGEgZGF0YTsKIAotCXU2NCBhZGRyOworCXVpbnQ2NF90IGFkZHI7CiAJY2VsbF90IGNlbGw7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcGxpc3Q7CkBAIC01OCw2ICs2MSw3IEBACiAldG9rZW4gPGRhdGE+IERUX1NUUklORwogJXRva2VuIDxsYWJlbHJlZj4gRFRfTEFCRUwKICV0b2tlbiA8bGFiZWxyZWY+IERUX1JFRgorJXRva2VuIERUX0lOQ0JJTgogCiAldHlwZSA8ZGF0YT4gcHJvcGRhdGEKICV0eXBlIDxkYXRhPiBwcm9wZGF0YXByZWZpeApAQCAtODQsMTEgKzg4LDExIEBACiBzb3VyY2VmaWxlOgogCSAgRFRfVjEgJzsnIG1lbXJlc2VydmVzIGRldmljZXRyZWUKIAkJewotCQkJdGhlX2Jvb3RfaW5mbyA9IGJ1aWxkX2Jvb3RfaW5mbygkMywgJDQpOworCQkJdGhlX2Jvb3RfaW5mbyA9IGJ1aWxkX2Jvb3RfaW5mbygkMywgJDQsIDApOwogCQl9CiAJfCB2MF9tZW1yZXNlcnZlcyBkZXZpY2V0cmVlCiAJCXsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDEsICQyKTsKKwkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDEsICQyLCAwKTsKIAkJfQogCTsKIApAQCAtMTk2LDYgKzIwMCwzNCBAQAogCQl7CiAJCQkkJCA9IGRhdGFfYWRkX21hcmtlcigkMSwgUkVGX1BBVEgsICQyKTsKIAkJfQorCXwgcHJvcGRhdGFwcmVmaXggRFRfSU5DQklOICcoJyBEVF9TVFJJTkcgJywnIGFkZHIgJywnIGFkZHIgJyknCisJCXsKKwkJCXN0cnVjdCBzZWFyY2hfcGF0aCBwYXRoID0geyBzcmNwb3NfZmlsZS0+ZGlyLCBOVUxMLCBOVUxMIH07CisJCQlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGUgPSBkdGNfb3Blbl9maWxlKCQ0LnZhbCwgJnBhdGgpOworCQkJc3RydWN0IGRhdGEgZCA9IGVtcHR5X2RhdGE7CisKKwkJCWlmICgkNiAhPSAwKQorCQkJCWlmIChmc2VlayhmaWxlLT5maWxlLCAkNiwgU0VFS19TRVQpICE9IDApCisJCQkJCXl5ZXJyb3JmKCJDb3VsZG4ndCBzZWVrIHRvIG9mZnNldCAlbGx1IGluIFwiJXNcIjogJXMiLAorCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpJDYsCisJCQkJCQkgJDQudmFsLCBzdHJlcnJvcihlcnJubykpOworCisJCQlkID0gZGF0YV9jb3B5X2ZpbGUoZmlsZS0+ZmlsZSwgJDgpOworCisJCQkkJCA9IGRhdGFfbWVyZ2UoJDEsIGQpOworCQkJZHRjX2Nsb3NlX2ZpbGUoZmlsZSk7CisJCX0KKwl8IHByb3BkYXRhcHJlZml4IERUX0lOQ0JJTiAnKCcgRFRfU1RSSU5HICcpJworCQl7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgkNC52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlkID0gZGF0YV9jb3B5X2ZpbGUoZmlsZS0+ZmlsZSwgLTEpOworCisJCQkkJCA9IGRhdGFfbWVyZ2UoJDEsIGQpOworCQkJZHRjX2Nsb3NlX2ZpbGUoZmlsZSk7CisJCX0KIAl8IHByb3BkYXRhIERUX0xBQkVMCiAJCXsKIAkJCSQkID0gZGF0YV9hZGRfbWFya2VyKCQxLCBMQUJFTCwgJDIpOwpAQCAtMjgyLDcgKzMxNCw3IEBACiAJCX0KIAl8IHN1Ym5vZGUgcHJvcGRlZgogCQl7Ci0JCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzXG4iKTsKKwkJCXl5ZXJyb3IoInN5bnRheCBlcnJvcjogcHJvcGVydGllcyBtdXN0IHByZWNlZGUgc3Vibm9kZXMiKTsKIAkJCVlZRVJST1I7CiAJCX0KIAk7CkBAIC0zMDcsMTggKzMzOSwyOSBAQAogCiAlJQogCi12b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit2b2lkIHl5ZXJyb3JmKGNoYXIgY29uc3QgKnMsIC4uLikKIHsKLQljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKHl5bGxvYy5maWxlbnVtKTsKKwljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlID8gc3JjcG9zX2ZpbGUtPm5hbWUgOiAiPG5vLWZpbGU+IjsKKwl2YV9saXN0IHZhOworCXZhX3N0YXJ0KHZhLCBzKTsKIAogCWlmIChzdHJjbXAoZm5hbWUsICItIikgPT0gMCkKIAkJZm5hbWUgPSAic3RkaW4iOwogCi0JZnByaW50ZihzdGRlcnIsICIlczolZCAlc1xuIiwKLQkJZm5hbWUsIHl5bGxvYy5maXJzdF9saW5lLCBzKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICIsIGZuYW1lLCB5eWxsb2MuZmlyc3RfbGluZSk7CisJdmZwcmludGYoc3RkZXJyLCBzLCB2YSk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJdHJlZXNvdXJjZV9lcnJvciA9IDE7CisJdmFfZW5kKHZhKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpCit2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit7CisJeXllcnJvcmYoIiVzIiwgcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCWNoYXIgKmU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuYwppbmRleCAwMTEzMWQ3Li5kOGZkNDNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlyZXR1cm4gc3RyOwogfQogCi12b2lkIGZpbGxfZnVsbHBhdGhzKHN0cnVjdCBub2RlICp0cmVlLCBjb25zdCBjaGFyICpwcmVmaXgpCitzdGF0aWMgdm9pZCBmaWxsX2Z1bGxwYXRocyhzdHJ1Y3Qgbm9kZSAqdHJlZSwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBub2RlICpjaGlsZDsKIAljb25zdCBjaGFyICp1bml0OwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJZnByaW50ZihzdGRlcnIsICJcdFx0Rm9yY2UgLSB0cnkgdG8gcHJvZHVjZSBvdXRwdXQgZXZlbiBpZiB0aGUgaW5wdXQgdHJlZSBoYXMgZXJyb3JzXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LXZcbiIpOwogCWZwcmludGYoc3RkZXJyLCAiXHRcdFByaW50IERUQyB2ZXJzaW9uIGFuZCBleGl0XG4iKTsKLQlleGl0KDIpOworCWV4aXQoMyk7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xMTgsMTAgKzExOCw5IEBACiAJaW50IGZvcmNlID0gMCwgY2hlY2sgPSAwOwogCWNvbnN0IGNoYXIgKmFyZzsKIAlpbnQgb3B0OwotCUZJTEUgKmluZiA9IE5VTEw7CiAJRklMRSAqb3V0ZiA9IE5VTEw7CiAJaW50IG91dHZlcnNpb24gPSBERUZBVUxUX0ZEVF9WRVJTSU9OOwotCWludCBib290X2NwdWlkX3BoeXMgPSAweGZlZWRiZWVmOworCWxvbmcgbG9uZyBjbWRsaW5lX2Jvb3RfY3B1aWQgPSAtMTsKIAogCXF1aWV0ICAgICAgPSAwOwogCXJlc2VydmVudW0gPSAwOwpAQCAtMTYxLDExICsxNjAsMTEgQEAKIAkJCXF1aWV0Kys7CiAJCQlicmVhazsKIAkJY2FzZSAnYic6Ci0JCQlib290X2NwdWlkX3BoeXMgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTsKKwkJCWNtZGxpbmVfYm9vdF9jcHVpZCA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlICd2JzoKLQkJICAgIHByaW50ZigiVmVyc2lvbjogJXNcbiIsIERUQ19WRVJTSU9OKTsKLQkJICAgIGV4aXQoMCk7CisJCQlwcmludGYoIlZlcnNpb246ICVzXG4iLCBEVENfVkVSU0lPTik7CisJCQlleGl0KDApOwogCQljYXNlICdoJzoKIAkJZGVmYXVsdDoKIAkJCXVzYWdlKCk7CkBAIC0xODAsMzEgKzE3OSwyNyBAQAogCQlhcmcgPSBhcmd2W29wdGluZF07CiAKIAkvKiBtaW5zaXplIGFuZCBwYWRzaXplIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi8KLQlpZiAoKG1pbnNpemUpICYmIChwYWRzaXplKSkgeworCWlmIChtaW5zaXplICYmIHBhZHNpemUpCiAJCWRpZSgiQ2FuJ3Qgc2V0IGJvdGggLXAgYW5kIC1TXG4iKTsKLQl9CiAKIAlmcHJpbnRmKHN0ZGVyciwgIkRUQzogJXMtPiVzICBvbiBmaWxlIFwiJXNcIlxuIiwKIAkJaW5mb3JtLCBvdXRmb3JtLCBhcmcpOwogCi0JaWYgKHN0cmVxKGluZm9ybSwgImR0cyIpKSB7CisJaWYgKHN0cmVxKGluZm9ybSwgImR0cyIpKQogCQliaSA9IGR0X2Zyb21fc291cmNlKGFyZyk7Ci0JfSBlbHNlIGlmIChzdHJlcShpbmZvcm0sICJmcyIpKSB7CisJZWxzZSBpZiAoc3RyZXEoaW5mb3JtLCAiZnMiKSkKIAkJYmkgPSBkdF9mcm9tX2ZzKGFyZyk7Ci0JfSBlbHNlIGlmKHN0cmVxKGluZm9ybSwgImR0YiIpKSB7Ci0JCWluZiA9IGR0Y19vcGVuX2ZpbGUoYXJnKTsKLQkJYmkgPSBkdF9mcm9tX2Jsb2IoaW5mKTsKLQl9IGVsc2UgeworCWVsc2UgaWYoc3RyZXEoaW5mb3JtLCAiZHRiIikpCisJCWJpID0gZHRfZnJvbV9ibG9iKGFyZyk7CisJZWxzZQogCQlkaWUoIlVua25vd24gaW5wdXQgZm9ybWF0IFwiJXNcIlxuIiwgaW5mb3JtKTsKLQl9CiAKLQlpZiAoaW5mICYmIChpbmYgIT0gc3RkaW4pKQotCQlmY2xvc2UoaW5mKTsKKwlpZiAoY21kbGluZV9ib290X2NwdWlkICE9IC0xKQorCQliaS0+Ym9vdF9jcHVpZF9waHlzID0gY21kbGluZV9ib290X2NwdWlkOwogCi0JaWYgKCEgYmkgfHwgISBiaS0+ZHQpCi0JCWRpZSgiQ291bGRuJ3QgcmVhZCBpbnB1dCB0cmVlXG4iKTsKKwlmaWxsX2Z1bGxwYXRocyhiaS0+ZHQsICIiKTsKKwlwcm9jZXNzX2NoZWNrcyhmb3JjZSwgYmkpOwogCi0JcHJvY2Vzc19jaGVja3MoZm9yY2UsIGJpLCBjaGVjaywgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKIAogCWlmIChzdHJlcShvdXRuYW1lLCAiLSIpKSB7CiAJCW91dGYgPSBzdGRvdXQ7CkBAIC0yMTgsOSArMjEzLDkgQEAKIAlpZiAoc3RyZXEob3V0Zm9ybSwgImR0cyIpKSB7CiAJCWR0X3RvX3NvdXJjZShvdXRmLCBiaSk7CiAJfSBlbHNlIGlmIChzdHJlcShvdXRmb3JtLCAiZHRiIikpIHsKLQkJZHRfdG9fYmxvYihvdXRmLCBiaSwgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKKwkJZHRfdG9fYmxvYihvdXRmLCBiaSwgb3V0dmVyc2lvbik7CiAJfSBlbHNlIGlmIChzdHJlcShvdXRmb3JtLCAiYXNtIikpIHsKLQkJZHRfdG9fYXNtKG91dGYsIGJpLCBvdXR2ZXJzaW9uLCBib290X2NwdWlkX3BoeXMpOworCQlkdF90b19hc20ob3V0ZiwgYmksIG91dHZlcnNpb24pOwogCX0gZWxzZSBpZiAoc3RyZXEob3V0Zm9ybSwgIm51bGwiKSkgewogCQkvKiBkbyBub3RoaW5nICovCiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5oCmluZGV4IDY1MjgxNzcuLjA4ZDU0YzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuaApAQCAtMzAsMTAgKzMwLDggQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAKKyNpbmNsdWRlIDxsaWJmZHRfZW52Lmg+CiAjaW5jbHVkZSA8ZmR0Lmg+CiAKICNkZWZpbmUgREVGQVVMVF9GRFRfVkVSU0lPTgkxNwpAQCAtNzUsMjUgKzczLDggQEAKIAlyZXR1cm4gbmV3OwogfQogCi10eXBlZGVmIHVpbnQ4X3QgdTg7Ci10eXBlZGVmIHVpbnQxNl90IHUxNjsKLXR5cGVkZWYgdWludDMyX3QgdTMyOwotdHlwZWRlZiB1aW50NjRfdCB1NjQ7Ci10eXBlZGVmIHUzMiBjZWxsX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGNlbGxfdDsKIAotI2RlZmluZSBjcHVfdG9fYmUxNih4KQlodG9ucyh4KQotI2RlZmluZSBiZTE2X3RvX2NwdSh4KQludG9ocyh4KQotCi0jZGVmaW5lIGNwdV90b19iZTMyKHgpCWh0b25sKHgpCi0jZGVmaW5lIGJlMzJfdG9fY3B1KHgpCW50b2hsKHgpCi0KLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0jZGVmaW5lIGNwdV90b19iZTY0KHgpCSh4KQotI2RlZmluZSBiZTY0X3RvX2NwdSh4KQkoeCkKLSNlbHNlCi0jZGVmaW5lIGNwdV90b19iZTY0KHgpCWJzd2FwXzY0KHgpCi0jZGVmaW5lIGJlNjRfdG9fY3B1KHgpCWJzd2FwXzY0KHgpCi0jZW5kaWYKIAogI2RlZmluZSBzdHJlcShhLCBiKQkoc3RyY21wKChhKSwgKGIpKSA9PSAwKQogI2RlZmluZSBzdHJuZXEoYSwgYiwgbikJKHN0cm5jbXAoKGEpLCAoYiksIChuKSkgPT0gMCkKQEAgLTExOCw3ICs5OSw2IEBACiBzdHJ1Y3QgZGF0YSB7CiAJaW50IGxlbjsKIAljaGFyICp2YWw7Ci0JaW50IGFzaXplOwogCXN0cnVjdCBtYXJrZXIgKm1hcmtlcnM7CiB9OwogCkBAIC0xNDUsNyArMTI1LDcgQEAKIHN0cnVjdCBkYXRhIGRhdGFfbWVyZ2Uoc3RydWN0IGRhdGEgZDEsIHN0cnVjdCBkYXRhIGQyKTsKIHN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX2NlbGwoc3RydWN0IGRhdGEgZCwgY2VsbF90IHdvcmQpOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfcmUoc3RydWN0IGRhdGEgZCwgY29uc3Qgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyZSk7Ci1zdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHU2NCBhZGRyKTsKK3N0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX2FkZHIoc3RydWN0IGRhdGEgZCwgdWludDY0X3QgYWRkcik7CiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9ieXRlKHN0cnVjdCBkYXRhIGQsIHVpbnQ4X3QgYnl0ZSk7CiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF96ZXJvZXMoc3RydWN0IGRhdGEgZCwgaW50IGxlbik7CiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hbGlnbihzdHJ1Y3QgZGF0YSBkLCBpbnQgYWxpZ24pOwpAQCAtMjIzLDcgKzIwMyw3IEBACiAJY2hhciAqbGFiZWw7CiB9OwogCi1zdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpidWlsZF9yZXNlcnZlX2VudHJ5KHU2NCBzdGFydCwgdTY0IGxlbiwgY2hhciAqbGFiZWwpOworc3RydWN0IHJlc2VydmVfaW5mbyAqYnVpbGRfcmVzZXJ2ZV9lbnRyeSh1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuLCBjaGFyICpsYWJlbCk7CiBzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpjaGFpbl9yZXNlcnZlX2VudHJ5KHN0cnVjdCByZXNlcnZlX2luZm8gKmZpcnN0LAogCQkJCQkgc3RydWN0IHJlc2VydmVfaW5mbyAqbGlzdCk7CiBzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICphZGRfcmVzZXJ2ZV9lbnRyeShzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpsaXN0LApAQCAtMjMzLDI0ICsyMTMsMjIgQEAKIHN0cnVjdCBib290X2luZm8gewogCXN0cnVjdCByZXNlcnZlX2luZm8gKnJlc2VydmVsaXN0OwogCXN0cnVjdCBub2RlICpkdDsJCS8qIHRoZSBkZXZpY2UgdHJlZSAqLworCXVpbnQzMl90IGJvb3RfY3B1aWRfcGh5czsKIH07CiAKIHN0cnVjdCBib290X2luZm8gKmJ1aWxkX2Jvb3RfaW5mbyhzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdCwKLQkJCQkgIHN0cnVjdCBub2RlICp0cmVlKTsKKwkJCQkgIHN0cnVjdCBub2RlICp0cmVlLCB1aW50MzJfdCBib290X2NwdWlkX3BoeXMpOwogCiAvKiBDaGVja3MgKi8KIAotdm9pZCBwcm9jZXNzX2NoZWNrcyhpbnQgZm9yY2UsIHN0cnVjdCBib290X2luZm8gKmJpLAotCQkgICAgaW50IGNoZWNrZmxhZywgaW50IG91dHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpOwordm9pZCBwcm9jZXNzX2NoZWNrcyhpbnQgZm9yY2UsIHN0cnVjdCBib290X2luZm8gKmJpKTsKIAogLyogRmxhdHRlbmVkIHRyZWVzICovCiAKLXZvaWQgZHRfdG9fYmxvYihGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24sCi0JCWludCBib290X2NwdWlkX3BoeXMpOwotdm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLAotCSAgICAgICBpbnQgYm9vdF9jcHVpZF9waHlzKTsKK3ZvaWQgZHRfdG9fYmxvYihGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24pOwordm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uKTsKIAotc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9ibG9iKEZJTEUgKmYpOworc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9ibG9iKGNvbnN0IGNoYXIgKmZuYW1lKTsKIAogLyogVHJlZSBzb3VyY2UgKi8KIApAQCAtMjY0LDYgKzI0Miw1IEBACiAvKiBtaXNjICovCiAKIGNoYXIgKmpvaW5fcGF0aChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgZmlsbF9mdWxscGF0aHMoc3RydWN0IG5vZGUgKnRyZWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiAKICNlbmRpZiAvKiBfRFRDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZmxhdHRyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZmxhdHRyZWUuYwppbmRleCBhN2NmYjg0Li43NmFjZDI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZsYXR0cmVlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mbGF0dHJlZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImR0Yy5oIgorI2luY2x1ZGUgInNyY3Bvcy5oIgogCiAjZGVmaW5lIEZURl9GVUxMUEFUSAkweDEKICNkZWZpbmUgRlRGX1ZBUkFMSUdOCTB4MgpAQCAtMTYyLDI4ICsxNjMsMTggQEAKIHsKIAlGSUxFICpmID0gZTsKIAlpbnQgb2ZmID0gMDsKLQlzdHJ1Y3QgbWFya2VyICptOworCXN0cnVjdCBtYXJrZXIgKm0gPSBkLm1hcmtlcnM7CiAKLQltID0gZC5tYXJrZXJzOwotCXdoaWxlIChtKSB7Ci0JCWlmIChtLT50eXBlID09IExBQkVMKQotCQkJZW1pdF9vZmZzZXRfbGFiZWwoZiwgbS0+cmVmLCBtLT5vZmZzZXQpOwotCQltID0gbS0+bmV4dDsKLQl9CisJZm9yX2VhY2hfbWFya2VyX29mX3R5cGUobSwgTEFCRUwpCisJCWVtaXRfb2Zmc2V0X2xhYmVsKGYsIG0tPnJlZiwgbS0+b2Zmc2V0KTsKIAotCXdoaWxlICgoZC5sZW4gLSBvZmYpID49IHNpemVvZih1MzIpKSB7CisJd2hpbGUgKChkLmxlbiAtIG9mZikgPj0gc2l6ZW9mKHVpbnQzMl90KSkgewogCQlmcHJpbnRmKGYsICJcdC5sb25nXHQweCV4XG4iLAotCQkJYmUzMl90b19jcHUoKigodTMyICopKGQudmFsK29mZikpKSk7Ci0JCW9mZiArPSBzaXplb2YodTMyKTsKKwkJCWZkdDMyX3RvX2NwdSgqKCh1aW50MzJfdCAqKShkLnZhbCtvZmYpKSkpOworCQlvZmYgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAl9CiAKLQlpZiAoKGQubGVuIC0gb2ZmKSA+PSBzaXplb2YodTE2KSkgewotCQlmcHJpbnRmKGYsICJcdC5zaG9ydFx0MHglaHhcbiIsCi0JCQliZTE2X3RvX2NwdSgqKCh1MTYgKikoZC52YWwrb2ZmKSkpKTsKLQkJb2ZmICs9IHNpemVvZih1MTYpOwotCX0KLQotCWlmICgoZC5sZW4gLSBvZmYpID49IDEpIHsKKwl3aGlsZSAoKGQubGVuIC0gb2ZmKSA+PSAxKSB7CiAJCWZwcmludGYoZiwgIlx0LmJ5dGVcdDB4JWhoeFxuIiwgZC52YWxbb2ZmXSk7CiAJCW9mZiArPSAxOwogCX0KQEAgLTMzNiwyOSArMzI3LDI4IEBACiAKIAltZW1zZXQoZmR0LCAweGZmLCBzaXplb2YoKmZkdCkpOwogCi0JZmR0LT5tYWdpYyA9IGNwdV90b19iZTMyKEZEVF9NQUdJQyk7Ci0JZmR0LT52ZXJzaW9uID0gY3B1X3RvX2JlMzIodmktPnZlcnNpb24pOwotCWZkdC0+bGFzdF9jb21wX3ZlcnNpb24gPSBjcHVfdG9fYmUzMih2aS0+bGFzdF9jb21wX3ZlcnNpb24pOworCWZkdC0+bWFnaWMgPSBjcHVfdG9fZmR0MzIoRkRUX01BR0lDKTsKKwlmZHQtPnZlcnNpb24gPSBjcHVfdG9fZmR0MzIodmktPnZlcnNpb24pOworCWZkdC0+bGFzdF9jb21wX3ZlcnNpb24gPSBjcHVfdG9fZmR0MzIodmktPmxhc3RfY29tcF92ZXJzaW9uKTsKIAogCS8qIFJlc2VydmUgbWFwIHNob3VsZCBiZSBkb3VibGV3b3JkIGFsaWduZWQgKi8KIAlyZXNlcnZlX29mZiA9IEFMSUdOKHZpLT5oZHJfc2l6ZSwgOCk7CiAKLQlmZHQtPm9mZl9tZW1fcnN2bWFwID0gY3B1X3RvX2JlMzIocmVzZXJ2ZV9vZmYpOwotCWZkdC0+b2ZmX2R0X3N0cnVjdCA9IGNwdV90b19iZTMyKHJlc2VydmVfb2ZmICsgcmVzZXJ2ZXNpemUpOwotCWZkdC0+b2ZmX2R0X3N0cmluZ3MgPSBjcHVfdG9fYmUzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplCisJZmR0LT5vZmZfbWVtX3Jzdm1hcCA9IGNwdV90b19mZHQzMihyZXNlcnZlX29mZik7CisJZmR0LT5vZmZfZHRfc3RydWN0ID0gY3B1X3RvX2ZkdDMyKHJlc2VydmVfb2ZmICsgcmVzZXJ2ZXNpemUpOworCWZkdC0+b2ZmX2R0X3N0cmluZ3MgPSBjcHVfdG9fZmR0MzIocmVzZXJ2ZV9vZmYgKyByZXNlcnZlc2l6ZQogCQkJCQkgICsgZHRzaXplKTsKLQlmZHQtPnRvdGFsc2l6ZSA9IGNwdV90b19iZTMyKHJlc2VydmVfb2ZmICsgcmVzZXJ2ZXNpemUgKyBkdHNpemUgKyBzdHJzaXplKTsKKwlmZHQtPnRvdGFsc2l6ZSA9IGNwdV90b19mZHQzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplICsgZHRzaXplICsgc3Ryc2l6ZSk7CiAKIAlpZiAodmktPmZsYWdzICYgRlRGX0JPT1RDUFVJRCkKLQkJZmR0LT5ib290X2NwdWlkX3BoeXMgPSBjcHVfdG9fYmUzMihib290X2NwdWlkX3BoeXMpOworCQlmZHQtPmJvb3RfY3B1aWRfcGh5cyA9IGNwdV90b19mZHQzMihib290X2NwdWlkX3BoeXMpOwogCWlmICh2aS0+ZmxhZ3MgJiBGVEZfU1RSVEFCU0laRSkKLQkJZmR0LT5zaXplX2R0X3N0cmluZ3MgPSBjcHVfdG9fYmUzMihzdHJzaXplKTsKKwkJZmR0LT5zaXplX2R0X3N0cmluZ3MgPSBjcHVfdG9fZmR0MzIoc3Ryc2l6ZSk7CiAJaWYgKHZpLT5mbGFncyAmIEZURl9TVFJVQ1RTSVpFKQotCQlmZHQtPnNpemVfZHRfc3RydWN0ID0gY3B1X3RvX2JlMzIoZHRzaXplKTsKKwkJZmR0LT5zaXplX2R0X3N0cnVjdCA9IGNwdV90b19mZHQzMihkdHNpemUpOwogfQogCi12b2lkIGR0X3RvX2Jsb2IoRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLAotCQlpbnQgYm9vdF9jcHVpZF9waHlzKQordm9pZCBkdF90b19ibG9iKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbikKIHsKIAlzdHJ1Y3QgdmVyc2lvbl9pbmZvICp2aSA9IE5VTEw7CiAJaW50IGk7CkBAIC0zODMsMjYgKzM3MywyNiBAQAogCiAJLyogTWFrZSBoZWFkZXIgKi8KIAltYWtlX2ZkdF9oZWFkZXIoJmZkdCwgdmksIHJlc2VydmVidWYubGVuLCBkdGJ1Zi5sZW4sIHN0cmJ1Zi5sZW4sCi0JCQlib290X2NwdWlkX3BoeXMpOworCQkJYmktPmJvb3RfY3B1aWRfcGh5cyk7CiAKIAkvKgogCSAqIElmIHRoZSB1c2VyIGFza2VkIGZvciBtb3JlIHNwYWNlIHRoYW4gaXMgdXNlZCwgYWRqdXN0IHRoZSB0b3RhbHNpemUuCiAJICovCiAJaWYgKG1pbnNpemUgPiAwKSB7Ci0JCXBhZGxlbiA9IG1pbnNpemUgLSBiZTMyX3RvX2NwdShmZHQudG90YWxzaXplKTsKKwkJcGFkbGVuID0gbWluc2l6ZSAtIGZkdDMyX3RvX2NwdShmZHQudG90YWxzaXplKTsKIAkJaWYgKChwYWRsZW4gPCAwKSAmJiAocXVpZXQgPCAxKSkKIAkJCWZwcmludGYoc3RkZXJyLAogCQkJCSJXYXJuaW5nOiBibG9iIHNpemUgJWQgPj0gbWluaW11bSBzaXplICVkXG4iLAotCQkJCWJlMzJfdG9fY3B1KGZkdC50b3RhbHNpemUpLCBtaW5zaXplKTsKKwkJCQlmZHQzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSksIG1pbnNpemUpOwogCX0KIAogCWlmIChwYWRzaXplID4gMCkKIAkJcGFkbGVuID0gcGFkc2l6ZTsKIAogCWlmIChwYWRsZW4gPiAwKSB7Ci0JCWludCB0c2l6ZSA9IGJlMzJfdG9fY3B1KGZkdC50b3RhbHNpemUpOworCQlpbnQgdHNpemUgPSBmZHQzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSk7CiAJCXRzaXplICs9IHBhZGxlbjsKLQkJZmR0LnRvdGFsc2l6ZSA9IGNwdV90b19iZTMyKHRzaXplKTsKKwkJZmR0LnRvdGFsc2l6ZSA9IGNwdV90b19mZHQzMih0c2l6ZSk7CiAJfQogCiAJLyoKQEAgLTQxMCw3ICs0MDAsNyBAQAogCSAqIHRoZSByZXNlcnZlIGJ1ZmZlciwgYWRkIHRoZSByZXNlcnZlIG1hcCB0ZXJtaW5hdGluZyB6ZXJvZXMsCiAJICogdGhlIGRldmljZSB0cmVlIGl0c2VsZiwgYW5kIGZpbmFsbHkgdGhlIHN0cmluZ3MuCiAJICovCi0JYmxvYiA9IGRhdGFfYXBwZW5kX2RhdGEoYmxvYiwgJmZkdCwgc2l6ZW9mKGZkdCkpOworCWJsb2IgPSBkYXRhX2FwcGVuZF9kYXRhKGJsb2IsICZmZHQsIHZpLT5oZHJfc2l6ZSk7CiAJYmxvYiA9IGRhdGFfYXBwZW5kX2FsaWduKGJsb2IsIDgpOwogCWJsb2IgPSBkYXRhX21lcmdlKGJsb2IsIHJlc2VydmVidWYpOwogCWJsb2IgPSBkYXRhX2FwcGVuZF96ZXJvZXMoYmxvYiwgc2l6ZW9mKHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSkpOwpAQCAtNDQ5LDcgKzQzOSw3IEBACiAJfQogfQogCi12b2lkIGR0X3RvX2FzbShGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpCit2b2lkIGR0X3RvX2FzbShGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IHZlcnNpb25faW5mbyAqdmkgPSBOVUxMOwogCWludCBpOwpAQCAtNDg5LDcgKzQ3OSw3IEBACiAKIAlpZiAodmktPmZsYWdzICYgRlRGX0JPT1RDUFVJRCkKIAkJZnByaW50ZihmLCAiXHQubG9uZ1x0JWlcdFx0XHRcdFx0LyogYm9vdF9jcHVpZF9waHlzICovXG4iLAotCQkJYm9vdF9jcHVpZF9waHlzKTsKKwkJCWJpLT5ib290X2NwdWlkX3BoeXMpOwogCiAJaWYgKHZpLT5mbGFncyAmIEZURl9TVFJUQUJTSVpFKQogCQlmcHJpbnRmKGYsICJcdC5sb25nXHRfJXNfc3RyaW5nc19lbmQgLSBfJXNfc3RyaW5nc19zdGFydFx0Lyogc2l6ZV9kdF9zdHJpbmdzICovXG4iLApAQCAtNTc5LDE1ICs1NjksMTUgQEAKIAlpbmItPnB0ciArPSBsZW47CiB9CiAKLXN0YXRpYyB1MzIgZmxhdF9yZWFkX3dvcmQoc3RydWN0IGluYnVmICppbmIpCitzdGF0aWMgdWludDMyX3QgZmxhdF9yZWFkX3dvcmQoc3RydWN0IGluYnVmICppbmIpCiB7Ci0JdTMyIHZhbDsKKwl1aW50MzJfdCB2YWw7CiAKIAlhc3NlcnQoKChpbmItPnB0ciAtIGluYi0+YmFzZSkgJSBzaXplb2YodmFsKSkgPT0gMCk7CiAKIAlmbGF0X3JlYWRfY2h1bmsoaW5iLCAmdmFsLCBzaXplb2YodmFsKSk7CiAKLQlyZXR1cm4gYmUzMl90b19jcHUodmFsKTsKKwlyZXR1cm4gZmR0MzJfdG9fY3B1KHZhbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsYXRfcmVhbGlnbihzdHJ1Y3QgaW5idWYgKmluYiwgaW50IGFsaWduKQpAQCAtNjE1LDcgKzYwNSw3IEBACiAKIAlpbmItPnB0ciArPSBsZW47CiAKLQlmbGF0X3JlYWxpZ24oaW5iLCBzaXplb2YodTMyKSk7CisJZmxhdF9yZWFsaWduKGluYiwgc2l6ZW9mKHVpbnQzMl90KSk7CiAKIAlyZXR1cm4gc3RyOwogfQpAQCAtNjMyLDcgKzYyMiw3IEBACiAKIAlmbGF0X3JlYWRfY2h1bmsoaW5iLCBkLnZhbCwgbGVuKTsKIAotCWZsYXRfcmVhbGlnbihpbmIsIHNpemVvZih1MzIpKTsKKwlmbGF0X3JlYWxpZ24oaW5iLCBzaXplb2YodWludDMyX3QpKTsKIAogCXJldHVybiBkOwogfQpAQCAtNjU5LDcgKzY0OSw3IEBACiBzdGF0aWMgc3RydWN0IHByb3BlcnR5ICpmbGF0X3JlYWRfcHJvcGVydHkoc3RydWN0IGluYnVmICpkdGJ1ZiwKIAkJCQkJICAgc3RydWN0IGluYnVmICpzdHJidWYsIGludCBmbGFncykKIHsKLQl1MzIgcHJvcGxlbiwgc3Ryb2ZmOworCXVpbnQzMl90IHByb3BsZW4sIHN0cm9mZjsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBkYXRhIHZhbDsKIApAQCAtNjkzLDggKzY4Myw4IEBACiAJcCA9IGluYi0+cHRyOwogCXdoaWxlICgxKSB7CiAJCWZsYXRfcmVhZF9jaHVuayhpbmIsICZyZSwgc2l6ZW9mKHJlKSk7Ci0JCXJlLmFkZHJlc3MgID0gYmU2NF90b19jcHUocmUuYWRkcmVzcyk7Ci0JCXJlLnNpemUgPSBiZTY0X3RvX2NwdShyZS5zaXplKTsKKwkJcmUuYWRkcmVzcyAgPSBmZHQ2NF90b19jcHUocmUuYWRkcmVzcyk7CisJCXJlLnNpemUgPSBmZHQ2NF90b19jcHUocmUuc2l6ZSk7CiAJCWlmIChyZS5zaXplID09IDApCiAJCQlicmVhazsKIApAQCAtNzA4LDc3ICs2OTgsMzcgQEAKIAogc3RhdGljIGNoYXIgKm5vZGVuYW1lX2Zyb21fcGF0aChjb25zdCBjaGFyICpwcGF0aCwgY29uc3QgY2hhciAqY3BhdGgpCiB7Ci0JY29uc3QgY2hhciAqbHNsYXNoOwogCWludCBwbGVuOwogCi0JbHNsYXNoID0gc3RycmNocihjcGF0aCwgJy8nKTsKLQlpZiAoISBsc2xhc2gpCi0JCXJldHVybiBOVUxMOworCXBsZW4gPSBzdHJsZW4ocHBhdGgpOwogCi0JcGxlbiA9IGxzbGFzaCAtIGNwYXRoOworCWlmICghc3RybmVxKHBwYXRoLCBjcGF0aCwgcGxlbikpCisJCWRpZSgiUGF0aCBcIiVzXCIgaXMgbm90IHZhbGlkIGFzIGEgY2hpbGQgb2YgXCIlc1wiXG4iLAorCQkgICAgY3BhdGgsIHBwYXRoKTsKIAotCWlmIChzdHJlcShjcGF0aCwgIi8iKSAmJiBzdHJlcShwcGF0aCwgIiIpKQotCQlyZXR1cm4gIiI7CisJLyogcm9vdCBub2RlIGlzIGEgc3BlY2lhbCBjYXNlICovCisJaWYgKCFzdHJlcShwcGF0aCwgIi8iKSkKKwkJcGxlbisrOwogCi0JaWYgKChwbGVuID09IDApICYmIHN0cmVxKHBwYXRoLCAiLyIpKQotCQlyZXR1cm4gc3RyZHVwKGxzbGFzaCsxKTsKLQotCWlmICghIHN0cm5lcShwcGF0aCwgY3BhdGgsIHBsZW4pKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzdHJkdXAobHNsYXNoKzEpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBQUk9QQ0hBUltdID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5LC5fKyojPy0iOwotc3RhdGljIGNvbnN0IGNoYXIgVU5JVENIQVJbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmLCI7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfbm9kZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JY29uc3QgY2hhciAqYXRwb3M7Ci0JaW50IGJhc2VuYW1lbGVuOwotCi0JYXRwb3MgPSBzdHJyY2hyKG5hbWUsICdAJyk7Ci0KLQlpZiAoYXRwb3MpCi0JCWJhc2VuYW1lbGVuID0gYXRwb3MgLSBuYW1lOwotCWVsc2UKLQkJYmFzZW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7Ci0KLQlpZiAoc3Ryc3BuKG5hbWUsIFBST1BDSEFSKSA8IGJhc2VuYW1lbGVuKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoYXRwb3MKLQkgICAgJiYgKChiYXNlbmFtZWxlbiArIDEgKyBzdHJzcG4oYXRwb3MrMSwgVU5JVENIQVIpKSA8IHN0cmxlbihuYW1lKSkpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBiYXNlbmFtZWxlbjsKKwlyZXR1cm4gc3RyZHVwKGNwYXRoICsgcGxlbik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqdW5mbGF0dGVuX3RyZWUoc3RydWN0IGluYnVmICpkdGJ1ZiwKIAkJCQkgICBzdHJ1Y3QgaW5idWYgKnN0cmJ1ZiwKLQkJCQkgICBjb25zdCBjaGFyICpwYXJlbnRfcGF0aCwgaW50IGZsYWdzKQorCQkJCSAgIGNvbnN0IGNoYXIgKnBhcmVudF9mbGF0bmFtZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBub2RlICpub2RlOwotCXUzMiB2YWw7CisJY2hhciAqZmxhdG5hbWU7CisJdWludDMyX3QgdmFsOwogCiAJbm9kZSA9IGJ1aWxkX25vZGUoTlVMTCwgTlVMTCk7CiAKLQlpZiAoZmxhZ3MgJiBGVEZfRlVMTFBBVEgpIHsKLQkJbm9kZS0+ZnVsbHBhdGggPSBmbGF0X3JlYWRfc3RyaW5nKGR0YnVmKTsKLQkJbm9kZS0+bmFtZSA9IG5vZGVuYW1lX2Zyb21fcGF0aChwYXJlbnRfcGF0aCwgbm9kZS0+ZnVsbHBhdGgpOworCWZsYXRuYW1lID0gZmxhdF9yZWFkX3N0cmluZyhkdGJ1Zik7CiAKLQkJaWYgKCEgbm9kZS0+bmFtZSkKLQkJCWRpZSgiUGF0aCBcIiVzXCIgaXMgbm90IHZhbGlkIGFzIGEgY2hpbGQgb2YgXCIlc1wiXG4iLAotCQkJICAgIG5vZGUtPmZ1bGxwYXRoLCBwYXJlbnRfcGF0aCk7Ci0JfSBlbHNlIHsKLQkJbm9kZS0+bmFtZSA9IGZsYXRfcmVhZF9zdHJpbmcoZHRidWYpOwotCQlub2RlLT5mdWxscGF0aCA9IGpvaW5fcGF0aChwYXJlbnRfcGF0aCwgbm9kZS0+bmFtZSk7Ci0JfQotCi0Jbm9kZS0+YmFzZW5hbWVsZW4gPSBjaGVja19ub2RlX25hbWUobm9kZS0+bmFtZSk7Ci0JaWYgKG5vZGUtPmJhc2VuYW1lbGVuIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmcgXCIlc1wiIGhhcyBpbmNvcnJlY3QgZm9ybWF0XG4iLCBub2RlLT5uYW1lKTsKLQl9CisJaWYgKGZsYWdzICYgRlRGX0ZVTExQQVRIKQorCQlub2RlLT5uYW1lID0gbm9kZW5hbWVfZnJvbV9wYXRoKHBhcmVudF9mbGF0bmFtZSwgZmxhdG5hbWUpOworCWVsc2UKKwkJbm9kZS0+bmFtZSA9IGZsYXRuYW1lOwogCiAJZG8gewogCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CkBAIC03OTUsOCArNzQ1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQljaGlsZCA9IHVuZmxhdHRlbl90cmVlKGR0YnVmLHN0cmJ1Ziwgbm9kZS0+ZnVsbHBhdGgsCi0JCQkJCSAgICAgICBmbGFncyk7CisJCQljaGlsZCA9IHVuZmxhdHRlbl90cmVlKGR0YnVmLHN0cmJ1ZiwgZmxhdG5hbWUsIGZsYWdzKTsKIAkJCWFkZF9jaGlsZChub2RlLCBjaGlsZCk7CiAJCQlicmVhazsKIApAQCAtODI1LDEwICs3NzQsMTEgQEAKIH0KIAogCi1zdHJ1Y3QgYm9vdF9pbmZvICpkdF9mcm9tX2Jsb2IoRklMRSAqZikKK3N0cnVjdCBib290X2luZm8gKmR0X2Zyb21fYmxvYihjb25zdCBjaGFyICpmbmFtZSkKIHsKLQl1MzIgbWFnaWMsIHRvdGFsc2l6ZSwgdmVyc2lvbiwgc2l6ZV9zdHIsIHNpemVfZHQ7Ci0JdTMyIG9mZl9kdCwgb2ZmX3N0ciwgb2ZmX21lbV9yc3ZtYXA7CisJc3RydWN0IGR0Y19maWxlICpkdGNmOworCXVpbnQzMl90IG1hZ2ljLCB0b3RhbHNpemUsIHZlcnNpb24sIHNpemVfZHQsIGJvb3RfY3B1aWRfcGh5czsKKwl1aW50MzJfdCBvZmZfZHQsIG9mZl9zdHIsIG9mZl9tZW1fcnN2bWFwOwogCWludCByYzsKIAljaGFyICpibG9iOwogCXN0cnVjdCBmZHRfaGVhZGVyICpmZHQ7CkBAIC04MzgsNTQgKzc4OCw1NiBAQAogCWludCBzaXplbGVmdDsKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdDsKIAlzdHJ1Y3Qgbm9kZSAqdHJlZTsKLQl1MzIgdmFsOworCXVpbnQzMl90IHZhbDsKIAlpbnQgZmxhZ3MgPSAwOwogCi0JcmMgPSBmcmVhZCgmbWFnaWMsIHNpemVvZihtYWdpYyksIDEsIGYpOwotCWlmIChmZXJyb3IoZikpCisJZHRjZiA9IGR0Y19vcGVuX2ZpbGUoZm5hbWUsIE5VTEwpOworCisJcmMgPSBmcmVhZCgmbWFnaWMsIHNpemVvZihtYWdpYyksIDEsIGR0Y2YtPmZpbGUpOworCWlmIChmZXJyb3IoZHRjZi0+ZmlsZSkpCiAJCWRpZSgiRXJyb3IgcmVhZGluZyBEVCBibG9iIG1hZ2ljIG51bWJlcjogJXNcbiIsCiAJCSAgICBzdHJlcnJvcihlcnJubykpOwogCWlmIChyYyA8IDEpIHsKLQkJaWYgKGZlb2YoZikpCisJCWlmIChmZW9mKGR0Y2YtPmZpbGUpKQogCQkJZGllKCJFT0YgcmVhZGluZyBEVCBibG9iIG1hZ2ljIG51bWJlclxuIik7CiAJCWVsc2UKIAkJCWRpZSgiTXlzdGVyaW91cyBzaG9ydCByZWFkIHJlYWRpbmcgbWFnaWMgbnVtYmVyXG4iKTsKIAl9CiAKLQltYWdpYyA9IGJlMzJfdG9fY3B1KG1hZ2ljKTsKKwltYWdpYyA9IGZkdDMyX3RvX2NwdShtYWdpYyk7CiAJaWYgKG1hZ2ljICE9IEZEVF9NQUdJQykKIAkJZGllKCJCbG9iIGhhcyBpbmNvcnJlY3QgbWFnaWMgbnVtYmVyXG4iKTsKIAotCXJjID0gZnJlYWQoJnRvdGFsc2l6ZSwgc2l6ZW9mKHRvdGFsc2l6ZSksIDEsIGYpOwotCWlmIChmZXJyb3IoZikpCisJcmMgPSBmcmVhZCgmdG90YWxzaXplLCBzaXplb2YodG90YWxzaXplKSwgMSwgZHRjZi0+ZmlsZSk7CisJaWYgKGZlcnJvcihkdGNmLT5maWxlKSkKIAkJZGllKCJFcnJvciByZWFkaW5nIERUIGJsb2Igc2l6ZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAJaWYgKHJjIDwgMSkgewotCQlpZiAoZmVvZihmKSkKKwkJaWYgKGZlb2YoZHRjZi0+ZmlsZSkpCiAJCQlkaWUoIkVPRiByZWFkaW5nIERUIGJsb2Igc2l6ZVxuIik7CiAJCWVsc2UKIAkJCWRpZSgiTXlzdGVyaW91cyBzaG9ydCByZWFkIHJlYWRpbmcgYmxvYiBzaXplXG4iKTsKIAl9CiAKLQl0b3RhbHNpemUgPSBiZTMyX3RvX2NwdSh0b3RhbHNpemUpOworCXRvdGFsc2l6ZSA9IGZkdDMyX3RvX2NwdSh0b3RhbHNpemUpOwogCWlmICh0b3RhbHNpemUgPCBGRFRfVjFfU0laRSkKIAkJZGllKCJEVCBibG9iIHNpemUgKCVkKSBpcyB0b28gc21hbGxcbiIsIHRvdGFsc2l6ZSk7CiAKIAlibG9iID0geG1hbGxvYyh0b3RhbHNpemUpOwogCiAJZmR0ID0gKHN0cnVjdCBmZHRfaGVhZGVyICopYmxvYjsKLQlmZHQtPm1hZ2ljID0gY3B1X3RvX2JlMzIobWFnaWMpOwotCWZkdC0+dG90YWxzaXplID0gY3B1X3RvX2JlMzIodG90YWxzaXplKTsKKwlmZHQtPm1hZ2ljID0gY3B1X3RvX2ZkdDMyKG1hZ2ljKTsKKwlmZHQtPnRvdGFsc2l6ZSA9IGNwdV90b19mZHQzMih0b3RhbHNpemUpOwogCiAJc2l6ZWxlZnQgPSB0b3RhbHNpemUgLSBzaXplb2YobWFnaWMpIC0gc2l6ZW9mKHRvdGFsc2l6ZSk7CiAJcCA9IGJsb2IgKyBzaXplb2YobWFnaWMpICArIHNpemVvZih0b3RhbHNpemUpOwogCiAJd2hpbGUgKHNpemVsZWZ0KSB7Ci0JCWlmIChmZW9mKGYpKQorCQlpZiAoZmVvZihkdGNmLT5maWxlKSkKIAkJCWRpZSgiRU9GIGJlZm9yZSByZWFkaW5nICVkIGJ5dGVzIG9mIERUIGJsb2JcbiIsCiAJCQkgICAgdG90YWxzaXplKTsKIAotCQlyYyA9IGZyZWFkKHAsIDEsIHNpemVsZWZ0LCBmKTsKLQkJaWYgKGZlcnJvcihmKSkKKwkJcmMgPSBmcmVhZChwLCAxLCBzaXplbGVmdCwgZHRjZi0+ZmlsZSk7CisJCWlmIChmZXJyb3IoZHRjZi0+ZmlsZSkpCiAJCQlkaWUoIkVycm9yIHJlYWRpbmcgRFQgYmxvYjogJXNcbiIsCiAJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKIApAQCAtODkzLDE5ICs4NDUsMTEgQEAKIAkJcCArPSByYzsKIAl9CiAKLQlvZmZfZHQgPSBiZTMyX3RvX2NwdShmZHQtPm9mZl9kdF9zdHJ1Y3QpOwotCW9mZl9zdHIgPSBiZTMyX3RvX2NwdShmZHQtPm9mZl9kdF9zdHJpbmdzKTsKLQlvZmZfbWVtX3Jzdm1hcCA9IGJlMzJfdG9fY3B1KGZkdC0+b2ZmX21lbV9yc3ZtYXApOwotCXZlcnNpb24gPSBiZTMyX3RvX2NwdShmZHQtPnZlcnNpb24pOwotCi0JZnByaW50ZihzdGRlcnIsICJcdG1hZ2ljOlx0XHRcdDB4JXhcbiIsIG1hZ2ljKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0dG90YWxzaXplOlx0XHQlZFxuIiwgdG90YWxzaXplKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0b2ZmX2R0X3N0cnVjdDpcdFx0MHgleFxuIiwgb2ZmX2R0KTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0b2ZmX2R0X3N0cmluZ3M6XHRcdDB4JXhcbiIsIG9mZl9zdHIpOwotCWZwcmludGYoc3RkZXJyLCAiXHRvZmZfbWVtX3Jzdm1hcDpcdFx0MHgleFxuIiwgb2ZmX21lbV9yc3ZtYXApOwotCWZwcmludGYoc3RkZXJyLCAiXHR2ZXJzaW9uOlx0XHQweCV4XG4iLCB2ZXJzaW9uICk7Ci0JZnByaW50ZihzdGRlcnIsICJcdGxhc3RfY29tcF92ZXJzaW9uOlx0MHgleFxuIiwKLQkJYmUzMl90b19jcHUoZmR0LT5sYXN0X2NvbXBfdmVyc2lvbikpOworCW9mZl9kdCA9IGZkdDMyX3RvX2NwdShmZHQtPm9mZl9kdF9zdHJ1Y3QpOworCW9mZl9zdHIgPSBmZHQzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RyaW5ncyk7CisJb2ZmX21lbV9yc3ZtYXAgPSBmZHQzMl90b19jcHUoZmR0LT5vZmZfbWVtX3Jzdm1hcCk7CisJdmVyc2lvbiA9IGZkdDMyX3RvX2NwdShmZHQtPnZlcnNpb24pOworCWJvb3RfY3B1aWRfcGh5cyA9IGZkdDMyX3RvX2NwdShmZHQtPmJvb3RfY3B1aWRfcGh5cyk7CiAKIAlpZiAob2ZmX21lbV9yc3ZtYXAgPj0gdG90YWxzaXplKQogCQlkaWUoIk1lbSBSZXNlcnZlIHN0cnVjdHVyZSBvZmZzZXQgZXhjZWVkcyB0b3RhbCBzaXplXG4iKTsKQEAgLTkxNiwyMSArODYwLDE3IEBACiAJaWYgKG9mZl9zdHIgPiB0b3RhbHNpemUpCiAJCWRpZSgiU3RyaW5nIHRhYmxlIG9mZnNldCBleGNlZWRzIHRvdGFsIHNpemVcbiIpOwogCi0JaWYgKHZlcnNpb24gPj0gMikKLQkJZnByaW50ZihzdGRlcnIsICJcdGJvb3RfY3B1aWRfcGh5czpcdDB4JXhcbiIsCi0JCQliZTMyX3RvX2NwdShmZHQtPmJvb3RfY3B1aWRfcGh5cykpOwotCi0Jc2l6ZV9zdHIgPSAtMTsKIAlpZiAodmVyc2lvbiA+PSAzKSB7Ci0JCXNpemVfc3RyID0gYmUzMl90b19jcHUoZmR0LT5zaXplX2R0X3N0cmluZ3MpOwotCQlmcHJpbnRmKHN0ZGVyciwgIlx0c2l6ZV9kdF9zdHJpbmdzOlx0JWRcbiIsIHNpemVfc3RyKTsKKwkJdWludDMyX3Qgc2l6ZV9zdHIgPSBmZHQzMl90b19jcHUoZmR0LT5zaXplX2R0X3N0cmluZ3MpOwogCQlpZiAob2ZmX3N0citzaXplX3N0ciA+IHRvdGFsc2l6ZSkKIAkJCWRpZSgiU3RyaW5nIHRhYmxlIGV4dGVuZHMgcGFzdCB0b3RhbCBzaXplXG4iKTsKKwkJaW5idWZfaW5pdCgmc3RyYnVmLCBibG9iICsgb2ZmX3N0ciwgYmxvYiArIG9mZl9zdHIgKyBzaXplX3N0cik7CisJfSBlbHNlIHsKKwkJaW5idWZfaW5pdCgmc3RyYnVmLCBibG9iICsgb2ZmX3N0ciwgYmxvYiArIHRvdGFsc2l6ZSk7CiAJfQogCiAJaWYgKHZlcnNpb24gPj0gMTcpIHsKLQkJc2l6ZV9kdCA9IGJlMzJfdG9fY3B1KGZkdC0+c2l6ZV9kdF9zdHJ1Y3QpOwotCQlmcHJpbnRmKHN0ZGVyciwgIlx0c2l6ZV9kdF9zdHJ1Y3Q6XHRcdCVkXG4iLCBzaXplX2R0KTsKKwkJc2l6ZV9kdCA9IGZkdDMyX3RvX2NwdShmZHQtPnNpemVfZHRfc3RydWN0KTsKIAkJaWYgKG9mZl9kdCtzaXplX2R0ID4gdG90YWxzaXplKQogCQkJZGllKCJTdHJ1Y3R1cmUgYmxvY2sgZXh0ZW5kcyBwYXN0IHRvdGFsIHNpemVcbiIpOwogCX0KQEAgLTk0NCwxMCArODg0LDYgQEAKIAlpbmJ1Zl9pbml0KCZtZW1yZXN2YnVmLAogCQkgICBibG9iICsgb2ZmX21lbV9yc3ZtYXAsIGJsb2IgKyB0b3RhbHNpemUpOwogCWluYnVmX2luaXQoJmR0YnVmLCBibG9iICsgb2ZmX2R0LCBibG9iICsgdG90YWxzaXplKTsKLQlpZiAoc2l6ZV9zdHIgPj0gMCkKLQkJaW5idWZfaW5pdCgmc3RyYnVmLCBibG9iICsgb2ZmX3N0ciwgYmxvYiArIG9mZl9zdHIgKyBzaXplX3N0cik7Ci0JZWxzZQotCQlpbmJ1Zl9pbml0KCZzdHJidWYsIGJsb2IgKyBvZmZfc3RyLCBibG9iICsgdG90YWxzaXplKTsKIAogCXJlc2VydmVsaXN0ID0gZmxhdF9yZWFkX21lbV9yZXNlcnZlKCZtZW1yZXN2YnVmKTsKIApAQCAtOTY0LDUgKzkwMCw3IEBACiAKIAlmcmVlKGJsb2IpOwogCi0JcmV0dXJuIGJ1aWxkX2Jvb3RfaW5mbyhyZXNlcnZlbGlzdCwgdHJlZSk7CisJZHRjX2Nsb3NlX2ZpbGUoZHRjZik7CisKKwlyZXR1cm4gYnVpbGRfYm9vdF9pbmZvKHJlc2VydmVsaXN0LCB0cmVlLCBib290X2NwdWlkX3BoeXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mc3RyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZnN0cmVlLmMKaW5kZXggMmExNjBhNC4uNzY2YjI2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mc3RyZWUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZzdHJlZS5jCkBAIC0zMSw4ICszMSw4IEBACiAJc3RydWN0IG5vZGUgKnRyZWU7CiAKIAlkID0gb3BlbmRpcihkaXJuYW1lKTsKLQlpZiAoISBkKQotCQlkaWUoIm9wZW5kaXIoKTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKCFkKQorCQlkaWUoIkNvdWxkbid0IG9wZW5kaXIoKSBcIiVzXCI6ICVzXG4iLCBkaXJuYW1lLCBzdHJlcnJvcihlcnJubykpOwogCiAJdHJlZSA9IGJ1aWxkX25vZGUoTlVMTCwgTlVMTCk7CiAKQEAgLTg3LDggKzg3LDYgQEAKIAl0cmVlID0gcmVhZF9mc3RyZWUoZGlybmFtZSk7CiAJdHJlZSA9IG5hbWVfbm9kZSh0cmVlLCAiIiwgTlVMTCk7CiAKLQlmaWxsX2Z1bGxwYXRocyh0cmVlLCAiIik7Ci0KLQlyZXR1cm4gYnVpbGRfYm9vdF9pbmZvKE5VTEwsIHRyZWUpOworCXJldHVybiBidWlsZF9ib290X2luZm8oTlVMTCwgdHJlZSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGliZmR0X2Vudi5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9saWJmZHRfZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5YmY2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGliZmR0X2Vudi5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX0xJQkZEVF9FTlZfSAorI2RlZmluZSBfTElCRkRUX0VOVl9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBfQihuKQkoKHVuc2lnbmVkIGxvbmcgbG9uZykoKHVpbnQ4X3QgKikmeClbbl0pCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGZkdDMyX3RvX2NwdSh1aW50MzJfdCB4KQoreworCXJldHVybiAoX0IoMCkgPDwgMjQpIHwgKF9CKDEpIDw8IDE2KSB8IChfQigyKSA8PCA4KSB8IF9CKDMpOworfQorI2RlZmluZSBjcHVfdG9fZmR0MzIoeCkgZmR0MzJfdG9fY3B1KHgpCisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZmR0NjRfdG9fY3B1KHVpbnQ2NF90IHgpCit7CisJcmV0dXJuIChfQigwKSA8PCA1NikgfCAoX0IoMSkgPDwgNDgpIHwgKF9CKDIpIDw8IDQwKSB8IChfQigzKSA8PCAzMikKKwkJfCAoX0IoNCkgPDwgMjQpIHwgKF9CKDUpIDw8IDE2KSB8IChfQig2KSA8PCA4KSB8IF9CKDcpOworfQorI2RlZmluZSBjcHVfdG9fZmR0NjQoeCkgZmR0NjRfdG9fY3B1KHgpCisjdW5kZWYgX0IKKworI2VuZGlmIC8qIF9MSUJGRFRfRU5WX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGl2ZXRyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGl2ZXRyZWUuYwppbmRleCA2YmEwODQ2Li4wY2EzZGU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpdmV0cmVlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9saXZldHJlZS5jCkBAIC0xMTUsNiArMTE1LDcgQEAKIAlzdHJ1Y3Qgbm9kZSAqKnA7CiAKIAljaGlsZC0+bmV4dF9zaWJsaW5nID0gTlVMTDsKKwljaGlsZC0+cGFyZW50ID0gcGFyZW50OwogCiAJcCA9ICZwYXJlbnQtPmNoaWxkcmVuOwogCXdoaWxlICgqcCkKQEAgLTEyMyw3ICsxMjQsOCBAQAogCSpwID0gY2hpbGQ7CiB9CiAKLXN0cnVjdCByZXNlcnZlX2luZm8gKmJ1aWxkX3Jlc2VydmVfZW50cnkodTY0IGFkZHJlc3MsIHU2NCBzaXplLCBjaGFyICpsYWJlbCkKK3N0cnVjdCByZXNlcnZlX2luZm8gKmJ1aWxkX3Jlc2VydmVfZW50cnkodWludDY0X3QgYWRkcmVzcywgdWludDY0X3Qgc2l6ZSwKKwkJCQkJIGNoYXIgKmxhYmVsKQogewogCXN0cnVjdCByZXNlcnZlX2luZm8gKm5ldyA9IHhtYWxsb2Moc2l6ZW9mKCpuZXcpKTsKIApAQCAtMTY1LDEzICsxNjcsMTQgQEAKIH0KIAogc3RydWN0IGJvb3RfaW5mbyAqYnVpbGRfYm9vdF9pbmZvKHN0cnVjdCByZXNlcnZlX2luZm8gKnJlc2VydmVsaXN0LAotCQkJCSAgc3RydWN0IG5vZGUgKnRyZWUpCisJCQkJICBzdHJ1Y3Qgbm9kZSAqdHJlZSwgdWludDMyX3QgYm9vdF9jcHVpZF9waHlzKQogewogCXN0cnVjdCBib290X2luZm8gKmJpOwogCiAJYmkgPSB4bWFsbG9jKHNpemVvZigqYmkpKTsKIAliaS0+cmVzZXJ2ZWxpc3QgPSByZXNlcnZlbGlzdDsKIAliaS0+ZHQgPSB0cmVlOworCWJpLT5ib290X2NwdWlkX3BoeXMgPSBib290X2NwdWlkX3BoeXM7CiAKIAlyZXR1cm4gYmk7CiB9CkBAIC0yMDIsNyArMjA1LDcgQEAKIGNlbGxfdCBwcm9wdmFsX2NlbGwoc3RydWN0IHByb3BlcnR5ICpwcm9wKQogewogCWFzc2VydChwcm9wLT52YWwubGVuID09IHNpemVvZihjZWxsX3QpKTsKLQlyZXR1cm4gYmUzMl90b19jcHUoKigoY2VsbF90ICopcHJvcC0+dmFsLnZhbCkpOworCXJldHVybiBmZHQzMl90b19jcHUoKigoY2VsbF90ICopcHJvcC0+dmFsLnZhbCkpOwogfQogCiBzdHJ1Y3Qgbm9kZSAqZ2V0X3N1Ym5vZGUoc3RydWN0IG5vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5vZGVuYW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmMKaW5kZXggMzUyYjBmZS4uOTY0MWI3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5jCkBAIC0yMCw4NiArMjAsOTcgQEAKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKIAotCi0vKgotICogUmVjb3JkIHRoZSBjb21wbGV0ZSB1bmlxdWUgc2V0IG9mIG9wZW5lZCBmaWxlIG5hbWVzLgotICogUHJpbWFyaWx5IHVzZWQgdG8gY2FjaGUgc291cmNlIHBvc2l0aW9uIGZpbGUgbmFtZXMuCi0gKi8KLSNkZWZpbmUgTUFYX05fRklMRV9OQU1FUwkoMTAwKQotCi1jb25zdCBjaGFyICpmaWxlX25hbWVzW01BWF9OX0ZJTEVfTkFNRVNdOwotc3RhdGljIGludCBuX2ZpbGVfbmFtZXMgPSAwOwotCiAvKgogICogTGlrZSB5eWxpbmVubywgdGhpcyBpcyB0aGUgY3VycmVudCBvcGVuIGZpbGUgcG9zLgogICovCiAKLWludCBzcmNwb3NfZmlsZW51bSA9IC0xOworc3RydWN0IGR0Y19maWxlICpzcmNwb3NfZmlsZTsKIAotCi0KLUZJTEUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUpCitzdGF0aWMgaW50IGR0Y19vcGVuX29uZShzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZWFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSkKIHsKLQlGSUxFICpmOworCWNoYXIgKmZ1bGxuYW1lOwogCi0JaWYgKGxvb2t1cF9maWxlX25hbWUoZm5hbWUsIDEpIDwgMCkKLQkJZGllKCJUb28gbWFueSBmaWxlcyBvcGVuZWRcbiIpOworCWlmIChzZWFyY2gpIHsKKwkJZnVsbG5hbWUgPSB4bWFsbG9jKHN0cmxlbihzZWFyY2gpICsgc3RybGVuKGZuYW1lKSArIDIpOwogCi0JaWYgKHN0cmVxKGZuYW1lLCAiLSIpKQotCQlmID0gc3RkaW47Ci0JZWxzZQotCQlmID0gZm9wZW4oZm5hbWUsICJyIik7CisJCXN0cmNweShmdWxsbmFtZSwgc2VhcmNoKTsKKwkJc3RyY2F0KGZ1bGxuYW1lLCAiLyIpOworCQlzdHJjYXQoZnVsbG5hbWUsIGZuYW1lKTsKKwl9IGVsc2UgeworCQlmdWxsbmFtZSA9IHN0cmR1cChmbmFtZSk7CisJfQogCi0JaWYgKCEgZikKLQkJZGllKCJDb3VsZG4ndCBvcGVuIFwiJXNcIjogJXNcbiIsIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWZpbGUtPmZpbGUgPSBmb3BlbihmdWxsbmFtZSwgInIiKTsKKwlpZiAoIWZpbGUtPmZpbGUpIHsKKwkJZnJlZShmdWxsbmFtZSk7CisJCXJldHVybiAwOworCX0KIAotCXJldHVybiBmOworCWZpbGUtPm5hbWUgPSBmdWxsbmFtZTsKKwlyZXR1cm4gMTsKIH0KIAogCi0KLS8qCi0gKiBMb2NhdGUgYW5kIG9wdGlvbmFsbHkgYWRkIGZpbGVuYW1lIGZuYW1lIGluIHRoZSBmaWxlX25hbWVzW10gYXJyYXkuCi0gKgotICogSWYgdGhlIGZpbGVuYW1lIGlzIGN1cnJlbnRseSBub3QgaW4gdGhlIGFycmF5IGFuZCB0aGUgYm9vbGVhbgotICogYWRkX2l0IGlzIG5vbi16ZXJvLCBhbiBhdHRlbXB0IHRvIGFkZCB0aGUgZmlsZW5hbWUgd2lsbCBiZSBtYWRlLgotICoKLSAqIFJldHVybnM7Ci0gKiAgICBJbmRleCBbMC4uTUFYX05fRklMRV9OQU1FUykgd2hlcmUgdGhlIGZpbGVuYW1lIGlzIGtlcHQKLSAqICAgIC0xIGlmIHRoZSBuYW1lIGNhbiBub3QgYmUgcmVjb3JkZWQKLSAqLwotCi1pbnQgbG9va3VwX2ZpbGVfbmFtZShjb25zdCBjaGFyICpmbmFtZSwgaW50IGFkZF9pdCkKK3N0cnVjdCBkdGNfZmlsZSAqZHRjX29wZW5fZmlsZShjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2VhcmNoX3BhdGggKnNlYXJjaCkKIHsKLQlpbnQgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNlYXJjaF9wYXRoIGRlZmF1bHRfc2VhcmNoID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CiAKLQlmb3IgKGkgPSAwOyBpIDwgbl9maWxlX25hbWVzOyBpKyspIHsKLQkJaWYgKHN0cmNtcChmaWxlX25hbWVzW2ldLCBmbmFtZSkgPT0gMCkKLQkJCXJldHVybiBpOworCXN0cnVjdCBkdGNfZmlsZSAqZmlsZTsKKwljb25zdCBjaGFyICpzbGFzaDsKKworCWZpbGUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZHRjX2ZpbGUpKTsKKworCXNsYXNoID0gc3RycmNocihmbmFtZSwgJy8nKTsKKwlpZiAoc2xhc2gpIHsKKwkJY2hhciAqZGlyID0geG1hbGxvYyhzbGFzaCAtIGZuYW1lICsgMSk7CisKKwkJbWVtY3B5KGRpciwgZm5hbWUsIHNsYXNoIC0gZm5hbWUpOworCQlkaXJbc2xhc2ggLSBmbmFtZV0gPSAwOworCQlmaWxlLT5kaXIgPSBkaXI7CisJfSBlbHNlIHsKKwkJZmlsZS0+ZGlyID0gTlVMTDsKIAl9CiAKLQlpZiAoYWRkX2l0KSB7Ci0JCWlmIChuX2ZpbGVfbmFtZXMgPCBNQVhfTl9GSUxFX05BTUVTKSB7Ci0JCQlmaWxlX25hbWVzW25fZmlsZV9uYW1lc10gPSBzdHJkdXAoZm5hbWUpOwotCQkJcmV0dXJuIG5fZmlsZV9uYW1lcysrOwotCQl9CisJaWYgKHN0cmVxKGZuYW1lLCAiLSIpKSB7CisJCWZpbGUtPm5hbWUgPSAic3RkaW4iOworCQlmaWxlLT5maWxlID0gc3RkaW47CisJCXJldHVybiBmaWxlOwogCX0KIAotCXJldHVybiAtMTsKKwlpZiAoZm5hbWVbMF0gPT0gJy8nKSB7CisJCWZpbGUtPmZpbGUgPSBmb3BlbihmbmFtZSwgInIiKTsKKwkJaWYgKCFmaWxlLT5maWxlKQorCQkJZ290byBmYWlsOworCisJCWZpbGUtPm5hbWUgPSBzdHJkdXAoZm5hbWUpOworCQlyZXR1cm4gZmlsZTsKKwl9CisKKwlpZiAoIXNlYXJjaCkKKwkJc2VhcmNoID0gJmRlZmF1bHRfc2VhcmNoOworCisJd2hpbGUgKHNlYXJjaCkgeworCQlpZiAoZHRjX29wZW5fb25lKGZpbGUsIHNlYXJjaC0+ZGlyLCBmbmFtZSkpCisJCQlyZXR1cm4gZmlsZTsKKworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJZ290byBmYWlsOworCisJCXNlYXJjaCA9IHNlYXJjaC0+bmV4dDsKKwl9CisKK2ZhaWw6CisJZGllKCJDb3VsZG4ndCBvcGVuIFwiJXNcIjogJXNcbiIsIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOwogfQogCi0KLWNvbnN0IGNoYXIgKnNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKGludCBmaWxlbnVtKQordm9pZCBkdGNfY2xvc2VfZmlsZShzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGUpCiB7Ci0JaWYgKDAgPD0gZmlsZW51bSAmJiBmaWxlbnVtIDwgbl9maWxlX25hbWVzKSB7Ci0JCXJldHVybiBmaWxlX25hbWVzW2ZpbGVudW1dOwotCX0KKwlpZiAoZmNsb3NlKGZpbGUtPmZpbGUpKQorCQlkaWUoIkVycm9yIGNsb3NpbmcgXCIlc1wiOiAlc1xuIiwgZmlsZS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAotCXJldHVybiAwOwotfQotCi0KLWNvbnN0IGNoYXIgKnNyY3Bvc19nZXRfZmlsZW5hbWUodm9pZCkKLXsKLQlyZXR1cm4gc3JjcG9zX2ZpbGVuYW1lX2Zvcl9udW0oc3JjcG9zX2ZpbGVudW0pOworCWZyZWUoZmlsZS0+ZGlyKTsKKwlmcmVlKGZpbGUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuaCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmgKaW5kZXggY2U3YWI1Yi4uZTE3YzdjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5oCkBAIC0yMiwxMyArMjIsMjEgQEAKICAqIGFycmF5IG9mIGFsbCBvcGVuZWQgZmlsZW5hbWVzLgogICovCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdHJ1Y3QgZHRjX2ZpbGUgeworCWNoYXIgKmRpcjsKKwljb25zdCBjaGFyICpuYW1lOworCUZJTEUgKmZpbGU7Cit9OworCiAjaWYgISBkZWZpbmVkKFlZTFRZUEUpICYmICEgZGVmaW5lZChZWUxUWVBFX0lTX0RFQ0xBUkVEKQogdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRSB7CiAgICAgaW50IGZpcnN0X2xpbmU7CiAgICAgaW50IGZpcnN0X2NvbHVtbjsKICAgICBpbnQgbGFzdF9saW5lOwogICAgIGludCBsYXN0X2NvbHVtbjsKLSAgICBpbnQgZmlsZW51bTsKKyAgICBzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CiB9IFlZTFRZUEU7CiAKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRAkxCkBAIC00OCw3ICs1Niw3IEBACiAJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlcCiAJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAogCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCi0JICAoQ3VycmVudCkuZmlsZW51bSAgICAgID0gWVlSSFNMT0MgKFJocywgTikuZmlsZW51bTsJCVwKKwkgIChDdXJyZW50KS5maWxlICAgICAgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5maWxlOwkJXAogCX0JCQkJCQkJCVwKICAgICAgIGVsc2UJCQkJCQkJCVwKIAl7CQkJCQkJCQlcCkBAIC01NiwyMCArNjQsMjIgQEAKIAkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCiAJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKIAkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQkgIChDdXJyZW50KS5maWxlbnVtICAgICAgPSBZWVJIU0xPQyAoUmhzLCAwKS5maWxlbnVtOwkJXAorCSAgKEN1cnJlbnQpLmZpbGUgICAgICAgICA9IFlZUkhTTE9DIChSaHMsIDApLmZpbGU7CQlcCiAJfQkJCQkJCQkJXAogICAgIHdoaWxlIChZWUlEICgwKSkKIAogCiAKIGV4dGVybiB2b2lkIHl5ZXJyb3IoY2hhciBjb25zdCAqKTsKK2V4dGVybiB2b2lkIHl5ZXJyb3JmKGNoYXIgY29uc3QgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOwogCi1leHRlcm4gaW50IHNyY3Bvc19maWxlbnVtOworZXh0ZXJuIHN0cnVjdCBkdGNfZmlsZSAqc3JjcG9zX2ZpbGU7CiAKLWV4dGVybiBpbnQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLWV4dGVybiBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCk7CitzdHJ1Y3Qgc2VhcmNoX3BhdGggeworCWNvbnN0IGNoYXIgKmRpcjsgLyogTlVMTCBmb3IgY3VycmVudCBkaXJlY3RvcnkgKi8KKwlzdHJ1Y3Qgc2VhcmNoX3BhdGggKnByZXYsICpuZXh0OworfTsKIAotZXh0ZXJuIEZJTEUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUpOwotZXh0ZXJuIGludCBsb29rdXBfZmlsZV9uYW1lKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgYWRkX2l0KTsKLWV4dGVybiBjb25zdCBjaGFyICpzcmNwb3NfZmlsZW5hbWVfZm9yX251bShpbnQgZmlsZW51bSk7Ci1jb25zdCBjaGFyICpzcmNwb3NfZ2V0X2ZpbGVuYW1lKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBkdGNfZmlsZSAqZHRjX29wZW5fZmlsZShjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNlYXJjaF9wYXRoICpzZWFyY2gpOworZXh0ZXJuIHZvaWQgZHRjX2Nsb3NlX2ZpbGUoc3RydWN0IGR0Y19maWxlICpmaWxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy90cmVlc291cmNlLmMKaW5kZXggYTZhNzc2Ny4uZWJlYjZlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy90cmVlc291cmNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy90cmVlc291cmNlLmMKQEAgLTIzLDIwICsyMywyMyBAQAogCiBleHRlcm4gRklMRSAqeXlpbjsKIGV4dGVybiBpbnQgeXlwYXJzZSh2b2lkKTsKLWV4dGVybiB2b2lkIHl5ZXJyb3IoY2hhciBjb25zdCAqKTsKIAogc3RydWN0IGJvb3RfaW5mbyAqdGhlX2Jvb3RfaW5mbzsKK2ludCB0cmVlc291cmNlX2Vycm9yOwogCiBzdHJ1Y3QgYm9vdF9pbmZvICpkdF9mcm9tX3NvdXJjZShjb25zdCBjaGFyICpmbmFtZSkKIHsKIAl0aGVfYm9vdF9pbmZvID0gTlVMTDsKKwl0cmVlc291cmNlX2Vycm9yID0gMDsKIAotCXB1c2hfaW5wdXRfZmlsZShmbmFtZSk7CisJc3JjcG9zX2ZpbGUgPSBkdGNfb3Blbl9maWxlKGZuYW1lLCBOVUxMKTsKKwl5eWluID0gc3JjcG9zX2ZpbGUtPmZpbGU7CiAKIAlpZiAoeXlwYXJzZSgpICE9IDApCi0JCXJldHVybiBOVUxMOworCQlkaWUoIlVuYWJsZSB0byBwYXJzZSBpbnB1dCB0cmVlXG4iKTsKIAotCWZpbGxfZnVsbHBhdGhzKHRoZV9ib290X2luZm8tPmR0LCAiIik7CisJaWYgKHRyZWVzb3VyY2VfZXJyb3IpCisJCWRpZSgiU3ludGF4IGVycm9yIHBhcnNpbmcgaW5wdXQgdHJlZVxuIik7CiAKIAlyZXR1cm4gdGhlX2Jvb3RfaW5mbzsKIH0KQEAgLTE0NCw3ICsxNDcsNyBAQAogCQkJbSA9IG0tPm5leHQ7CiAJCX0KIAotCQlmcHJpbnRmKGYsICIweCV4IiwgYmUzMl90b19jcHUoKmNwKyspKTsKKwkJZnByaW50ZihmLCAiMHgleCIsIGZkdDMyX3RvX2NwdSgqY3ArKykpOwogCQlpZiAoKHZvaWQgKiljcCA+PSBwcm9wZW5kKQogCQkJYnJlYWs7CiAJCWZwcmludGYoZiwgIiAiKTsKQEAgLTE3Myw3ICsxNzYsNyBAQAogCQl9CiAKIAkJZnByaW50ZihmLCAiJTAyaGh4IiwgKmJwKyspOwotCQlpZiAoKHZvaWQgKilicCA+PSBwcm9wZW5kKQorCQlpZiAoKGNvbnN0IHZvaWQgKilicCA+PSBwcm9wZW5kKQogCQkJYnJlYWs7CiAJCWZwcmludGYoZiwgIiAiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3ZlcnNpb25fZ2VuLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3ZlcnNpb25fZ2VuLmgKaW5kZXggNmMzNDMwMy4uNjU4ZmY0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy92ZXJzaW9uX2dlbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdmVyc2lvbl9nZW4uaApAQCAtMSArMSBAQAotI2RlZmluZSBEVENfVkVSU0lPTiAiRFRDIDEuMC4wLWdkNmY5YjYyZiIKKyNkZWZpbmUgRFRDX1ZFUlNJT04gIkRUQyAxLjIuMCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBBTUNDIEFyY2hlcyAoZHVhbCA0NjBHVCBib2FyZCkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbgorICogVmljdG9yIEdhbGxhcmRvIDx2Z2FsbGFyZG9AYW1jYy5jb20+CisgKiBBZGFtIEdyYWhhbSA8YWdyYWhhbUBhbWNjLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgZ2xhY2llci5kdHMgZmlsZQorICogICBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKiAgIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy9kdHMtdjEvOworCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwltb2RlbCA9ICJhbWNjLGFyY2hlcyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLGFyY2hlcyI7CisJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlldGhlcm5ldDEgPSAmRU1BQzE7CisJCWV0aGVybmV0MiA9ICZFTUFDMjsKKwkJc2VyaWFsMCA9ICZVQVJUMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJbW9kZWwgPSAiUG93ZXJQQyw0NjBHVCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkY3ItY29udHJvbGxlcjsKKwkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwl9OworCisJVUlDMDogaW50ZXJydXB0LWNvbnRyb2xsZXIwIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDA+OworCQlkY3ItcmVnID0gPDB4MGMwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlVSUMxOiBpbnRlcnJ1cHQtY29udHJvbGxlcjEgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwZ3QiLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MT47CisJCWRjci1yZWcgPSA8MHgwZDAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHgxZSAweDQgMHgxZiAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlVSUMyOiBpbnRlcnJ1cHQtY29udHJvbGxlcjIgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwZ3QiLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8Mj47CisJCWRjci1yZWcgPSA8MHgwZTAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHhhIDB4NCAweGIgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMzogaW50ZXJydXB0LWNvbnRyb2xsZXIzIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDM+OworCQlkY3ItcmVnID0gPDB4MGYwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4MTAgMHg0IDB4MTEgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJU0RSMDogc2RyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sc2RyLTQ2MGd0IjsKKwkJZGNyLXJlZyA9IDwweDAwZSAweDAwMj47CisJfTsKKworCUNQUjA6IGNwciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwci00NjBndCI7CisJCWRjci1yZWcgPSA8MHgwMGMgMHgwMDI+OworCX07CisKKwlwbGIgeworCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwZ3QiLCAiaWJtLHBsYjQiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJU0RSQU0wOiBzZHJhbSB7CisJCQljb21wYXRpYmxlID0gImlibSxzZHJhbS00NjBndCIsICJpYm0sc2RyYW0tNDA1Z3AiOworCQkJZGNyLXJlZyA9IDwweDAxMCAweDAwMj47CisJCX07CisKKwkJTUFMMDogbWNtYWwgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZ3QiLCAiaWJtLG1jbWFsMiI7CisJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDwzPjsKKwkJCW51bS1yeC1jaGFucyA9IDwyND47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQlpbnRlcnJ1cHRzID0gPAkvKlRYRU9CKi8gMHg2IDB4NAorCQkJCQkvKlJYRU9CKi8gMHg3IDB4NAorCQkJCQkvKlNFUlIqLyAgMHgzIDB4NAorCQkJCQkvKlRYREUqLyAgMHg0IDB4NAorCQkJCQkvKlJYREUqLyAgMHg1IDB4ND47CisJCQlkZXNjLWJhc2UtYWRkci1oaWdoID0gPDB4OD47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NjBndCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHhiMDAwMDAwMCAweDAwMDAwMDA0IDB4YjAwMDAwMDAgMHg1MDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQkJRUJDMDogZWJjIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDYwZ3QiLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwweDAxMiAweDAwMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJLyogcmFuZ2VzIHByb3BlcnR5IGlzIHN1cHBsaWVkIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8MHg2IDB4ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQl9OworCisJCQlVQVJUMDogc2VyaWFsQGVmNjAwMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDB4ZWY2MDAzMDAgMHgwMDAwMDAwOD47CisJCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDMwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCWludGVycnVwdHMgPSA8MHgxIDB4ND47CisJCQl9OworCisJCQlJSUMwOiBpMmNAZWY2MDA3MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NjBndCIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJfTsKKworCQkJSUlDMTogaTJjQGVmNjAwODAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwZ3QiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPDB4ZWY2MDA4MDAgMHgwMDAwMDAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKKwkJCX07CisKKwkJCVRBSDA6IGVtYWMtdGFoQGVmNjAxMzUwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSx0YWgtNDYwZ3QiLCAiaWJtLHRhaCI7CisJCQkJcmVnID0gPDB4ZWY2MDEzNTAgMHgwMDAwMDAzMD47CisJCQl9OworCisJCQlUQUgxOiBlbWFjLXRhaEBlZjYwMTQ1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MGd0IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDwweGVmNjAxNDUwIDB4MDAwMDAwMzA+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNHN5bmMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEwIDB4NAorCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTQgMHg0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMGM0PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CisJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKKwkJCQlwaHktbWFwID0gPDB4ZmZmZmZmZmY+OworCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBhPjsKKwkJCQl0YWgtZGV2aWNlID0gPCZUQUgwPjsKKwkJCQl0YWgtY2hhbm5lbCA9IDwwPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQl9OworCisJCQlFTUFDMTogZXRoZXJuZXRAZWY2MDBmMDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMHgwICZVSUMyIDB4MTEgMHg0CisJCQkJCQkgLypXYWtlKi8gICAweDEgJlVJQzIgMHgxNSAweDQ+OworCQkJCXJlZyA9IDwweGVmNjAwZjAwIDB4MDAwMDAwYzQ+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwxPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDw4PjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAic2dtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGI+OworCQkJCXRhaC1kZXZpY2UgPSA8JlRBSDE+OworCQkJCXRhaC1jaGFubmVsID0gPDE+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCQltZGlvLWRldmljZSA9IDwmRU1BQzA+OworCQkJfTsKKworCQkJRU1BQzI6IGV0aGVybmV0QGVmNjAxMTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNHN5bmMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEyIDB4NAorCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTYgMHg0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMGM0PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MTY+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CisJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAxPjsKKwkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwQz47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJCW1kaW8tZGV2aWNlID0gPCZFTUFDMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwppbmRleCA4YjFiYjBlLi42MjM1ZmNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwpAQCAtMTMwLDI0ICsxMzAsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkNjA4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzYxMCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IFNCUyBDTTYgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwNyBTQlMgVGVjaG5vbG9naWVzIEdtYkggJiBDby4gS0cKKyAqIEFuZDogbXBjODY0MV9ocGNuLmR0cyAoTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZSkKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqLworCisvKgorICogQ29tcGlsZWQgd2l0aCBkdGMgLUkgZHRzIC1PIGR0YiAtbyBnZWZfc2JjNjEwLmR0YiBnZWZfc2JjNjEwLmR0cworICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJHRUZfU0JDNjEwIjsKKwljb21wYXRpYmxlID0gImdlZixzYmM2MTAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODY0MUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OwkvLyBzZXQgYnkgdWJvb3QKKwl9OworCisJbG9jYWxidXNAZmVmMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGY4MDA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwICAgICAvLyAxNk1CIEJvb3QgZmxhc2gKKwkJCSAgMSAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwICAgICAvLyBQYWdlZCBGbGFzaCAxCisJCQkgIDMgMCAweGZjMTAwMDAwIDB4MDAwMjAwMDAgICAgIC8vIE5WUkFNCisJCQkgIDQgMCAweGZjMDAwMDAwIDB4MDAwMDgwMDAgICAgIC8vIEZQR0EKKwkJCSAgNSAwIDB4ZmMwMDgwMDAgMHgwMDAwODAwMCAgICAgLy8gQUZJWCBGUEdBCisJCQkgIDYgMCAweGZkMDAwMDAwIDB4MDA4MDAwMDAgICAgIC8vIElPIEZQR0EgKDgtYml0KQorCQkJICA3IDAgMHhmZDgwMDAwMCAweDAwODAwMDAwPjsgICAvLyBJTyBGUEdBICgzMi1iaXQpCisKKwkJZnBnYUA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS1yZWdzIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OworCQl9OworCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcGljIjsKKwkJCXJlZyA9IDwweDQgMHg0MDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweDgKKwkJCQkgICAgICAweDk+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKwl9OworCisJc29jQGZlZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZmVmMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGZlZjAwMDAwIDB4MTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWkyYzE6IGkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWV0aUA2YiB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxNjgyIjsKKwkJCQlyZWcgPSA8MHg2Yj47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4OSAweDQ+OworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQlyZWcgPSA8Mz47CisJCQl9OworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgMHgyIDB4MjAgMHgyIDB4MjEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJhIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxYyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZlZjA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmZWYwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDQwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAweDAgMHgwMDQwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDQwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwppbmRleCAyNGNmMGRiLi5mMzc4N2EyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCkBAIC0xNCw3ICsxNCw3IEBACiAJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJI3NpemUtY2VsbHMgPSA8MT47CiAJbW9kZWwgPSAiYW1jYyxnbGFjaWVyIjsKLQljb21wYXRpYmxlID0gImFtY2MsZ2xhY2llciIsICJhbWNjLGNhbnlvbmxhbmRzIjsKKwljb21wYXRpYmxlID0gImFtY2MsZ2xhY2llciI7CiAJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CiAKIAlhbGlhc2VzIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ2NvZ2UuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nY29nZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzMjU1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ2NvZ2UuZHRzCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogRGV2aWNlIFRyZWUgZm9yIHRoZSBNR0NPR0UgcGxhdHRmb3JtIGZyb20ga2V5bWlsZQorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gIk1HQ09HRSI7CisJY29tcGF0aWJsZSA9ICJrZXltaWxlLG1nY29nZSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmV0aDA7CisJCXNlcmlhbDAgPSAmc21jMjsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDgyNDdAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDE2Mzg0PjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwxNjM4ND47CisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQl9OworCX07CisKKwlsb2NhbGJ1c0BmMDAxMDEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctbG9jYWxidXMiLAorCQkgICAgICAgICAgICAgImZzbCxwcTItbG9jYWxidXMiLAorCQkgICAgICAgICAgICAgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweGYwMDEwMTAwIDB4NDA+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZTAwMDAwMCAweDAwNDAwMDAwCisJCQkgIDUgMCAweDUwMDAwMDAwIDB4MjAwMDAwMDAKKwkJCT47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMHgwIDB4NDAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQliYW5rLXdpZHRoID0gPDE+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJcmVnID0gPDAgMHg0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDQwMDAwIHsKKwkJCQlsYWJlbCA9ICJlbnYiOworCQkJCXJlZyA9IDwweDQwMDAwIDB4MjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA2MDAwMCB7CisJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQlyZWcgPSA8MHg2MDAwMCAweDIyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDI4MDAwMCB7CisJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQlyZWcgPSA8MHgyODAwMDAgMHgyMDAwMD47CisJCQl9OworCQl9OworCisJCWZsYXNoQDUsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8NSAweDAgMHgyMDAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInJhbWRpc2siOworCQkJCXJlZyA9IDwwIDB4N2EwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AN2EwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHg3YTAwMDAgMHgxODYwMDAwPjsKKwkJCX07CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwIDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJfTsKKworCXNvY0BmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1pbW1yIiwgImZzbCxwcTItc29jIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweGYwMDAwMDAwIDB4MDAwNTMwMDA+OworCisJCS8vIFRlbXBvcmFyeSB1bnRpbCBjb2RlIHN0b3BzIGRlcGVuZGluZyBvbiBpdC4KKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKworCQljcG1AMTE5YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ3LWNwbSIsICJmc2wsY3BtMiIsCisJCQkJCSJzaW1wbGUtYnVzIjsKKwkJCXJlZyA9IDwweDExOWMwIDB4MzA+OworCQkJcmFuZ2VzOworCisJCQltdXJhbSB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyYW5nZXMgPSA8MCAwIDB4MTAwMDA+OworCisJCQkJZGF0YUAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtLWRhdGEiOworCQkJCQlyZWcgPSA8MHg4MCAweDFmODAgMHg5ODAwIDB4ODAwPjsKKwkJCQl9OworCQkJfTsKKworCQkJYnJnQDExOWYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ3LWJyZyIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1icmciLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbS1icmciOworCQkJCXJlZyA9IDwweDExOWYwIDB4MTAgMHgxMTVmMCAweDEwPjsKKwkJCX07CisKKwkJCS8qIE1vbml0b3IgcG9ydC9TTUMyICovCisJCQlzbWMyOiBzZXJpYWxAMTFhOTAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1zbWMtdWFydCIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1zbWMtdWFydCI7CisJCQkJcmVnID0gPDB4MTFhOTAgMHgyMCAweDg4ZmMgMHgwMj47CisJCQkJaW50ZXJydXB0cyA9IDw1IDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisJCQkJZnNsLGNwbS1icmcgPSA8Mj47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MjEyMDAwMDA+OworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCX07CisKKwkJCWV0aDA6IGV0aGVybmV0QDExYTYwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ3LXNjYy1lbmV0IiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLXNjYy1lbmV0IjsKKwkJCQlyZWcgPSA8MHgxMWE2MCAweDIwIDB4ODMwMCAweDEwMCAweDExMzkwIDE+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0cyA9IDw0MyA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4Y2UwMDAwMD47CisJCQkJZml4ZWQtbGluayA9IDwwIDAgMTAgMCAwPjsKKwkJCX07CisKKwkJfTsKKworCQlQSUM6IGludGVycnVwdC1jb250cm9sbGVyQDEwYzAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCXJlZyA9IDwweDEwYzAwIDB4ODA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1waWMiLCAiZnNsLHBxMi1waWMiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nc3V2ZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdzdXZkLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGZjNTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nc3V2ZC5kdHMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBNR1NVVkQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworLyB7CisJbW9kZWwgPSAiTUdTVVZEIjsKKwljb21wYXRpYmxlID0gImtleW1pbGUsbWdzdXZkIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTJAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MTY+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MTY+OworCQkJZC1jYWNoZS1zaXplID0gPDgxOTI+OworCQkJaS1jYWNoZS1zaXplID0gPDgxOTI+OworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJaW50ZXJydXB0cyA9IDwxNSAyPjsJCS8qIGRlY3JlbWVudGVyIGludGVycnVwdCAqLworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAwMDAwMDAwIDB4NDAwMDAwMD47ICAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCisJfTsKKworCWxvY2FsYnVzQGZmZjAwMTAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLWxvY2FsYnVzIiwgImZzbCxwcTEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4ZmZmMDAxMDAgMHg0MD47CisKKwkJcmFuZ2VzID0gPDAgMCAweGYwMDAwMDAwIDB4MDEwMDAwMDA+OyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MTAwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwwIDB4ODAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQlyZWcgPSA8MHg4MDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AYTAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4YTAwMDAgMHgxZTAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyODAwMDAgeworCQkJCWxhYmVsID0gImR0YiI7CisJCQkJcmVnID0gPDB4MjgwMDAwIDB4MjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyYTAwMDAgeworCQkJICAgICAgICBsYWJlbCA9ICJyb290IjsKKwkJCSAgICAgICAgcmVnID0gPDB4MmEwMDAwIDB4NTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AN2EwMDAwIHsKKwkJCSAgICAgICAgbGFiZWwgPSAidXNlciI7CisJCQkgICAgICAgIHJlZyA9IDwweDdhMDAwMCAweDg2MDAwMD47CisJCQl9OworCQl9OworCX07CisKKwlzb2NAZmZmMDAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTIiLCAiZnNsLHBxMS1zb2MiLCAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJcmFuZ2VzID0gPDAgMHhmZmYwMDAwMCAweDAwMDA0MDAwPjsKKworCQlQSUM6IGludGVycnVwdC1jb250cm9sbGVyQDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDAgMjQ+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLXBpYyIsICJmc2wscHExLXBpYyI7CisJCX07CisKKwkJY3BtQDljMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyLWNwbSIsICJmc2wsY3BtMSIsICJzaW1wbGUtYnVzIjsKKwkJCWludGVycnVwdHMgPSA8MD47CS8qIGNwbSBlcnJvciBpbnRlcnJ1cHQgKi8KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OworCQkJcmVnID0gPDB4OWMwIDEwPjsKKwkJCXJhbmdlczsKKworCQkJbXVyYW1AMjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyYW5nZXMgPSA8MCAweDIwMDAgMHgyMDAwPjsKKworCQkJCWRhdGFAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKKwkJCQkJcmVnID0gPDB4ODAwIDB4MTgwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWJyZ0A5ZjAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1icmciLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKKwkJCQlyZWcgPSA8MHg5ZjAgMHgxMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCisJCQl9OworCisJCQlDUE1fUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckA5MzAgeworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJaW50ZXJydXB0cyA9IDw1IDIgMCAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCXJlZyA9IDwweDkzMCAweDIwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxjcG0xLXBpYyI7CisJCQl9OworCisJCQkvKiBNT04tMSAqLworCQkJc2VyaWFsQGE4MCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxjcG0xLXNtYy11YXJ0IjsKKwkJCQlyZWcgPSA8MHhhODAgMHgxMCAweDNmYzAgMHg0MD47CisJCQkJaW50ZXJydXB0cyA9IDw0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKwkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHgwMDkwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgdS1ib290ICovCisJCQl9OworCisJCQlldGhlcm5ldEBhNDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgID0gImZzbCxtcGM4NjYtc2NjLWVuZXQiLAorCQkJCSAgICAgICAgICAgICAgImZzbCxjcG0xLXNjYy1lbmV0IjsKKwkJCQlyZWcgPSA8MHhhNDAgMHgxOCAweDNlMDAgMHgxMDA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8Mjg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDgwPjsKKwkJCQlmaXhlZC1saW5rID0gPDAgMCAxMCAwIDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwppbmRleCAxZjkwMzZjLi5jMmI4ZGJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCkBAIC00MDMsNyArNDAzLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHg4MDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweDgwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ODAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKaW5kZXggMmE5NGFlMC4uNzQ3ZjI3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCkBAIC0xNzYsMjQgKzE3NiwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTM1OSw3ICszNjMsOCBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwppbmRleCBmNzA0NTEzLi43NDQ5ZTU0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCkBAIC0xNDQsMjQgKzE0NCwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMxNCw3ICszMTgsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwppbmRleCBmYmM5MzA0Li5lNGNjMTc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKQEAgLTEyNywyNCArMTI3LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtNDE5LDcgKzQyMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCmluZGV4IGIxNTdkMTguLjIyNmZmMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cwpAQCAtMTA1LDI0ICsxMDUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMjcsNyArMzMxLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwppbmRleCA3MDBlMDc2Li41Y2VkZjM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwpAQCAtMTA2LDI0ICsxMDYsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yNTAsNyArMjU0LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpAQCAtMjc2LDcgKzI4MSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg2MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzgwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCmluZGV4IGNkZDMwNjMuLjgxYWUxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwpAQCAtMTA0LDI0ICsxMDQsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yMjQsNyArMjI4LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NjAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzODAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKaW5kZXggNzgzMjQxYy4uMDRiZmRlMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCkBAIC0xMTYsMjQgKzExNiwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMxMSw3ICszMTUsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CkBAIC0zNzIsNyArMzc3LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NjAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzODAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKaW5kZXggYTNiNzZhNy4uNjZhMTJkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCkBAIC01Miw5ICs1MiwyNiBAQAogCQlyZWcgPSA8MHgwMDAwMDAwMCAweDEwMDAwMDAwPjsKIAl9OwogCi0JYmNzckBmODAwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOwotCQlyZWcgPSA8MHhmODAwMDAwMCAweDgwMDA+OworCWxvY2FsYnVzQGUwMDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWxvY2FsYnVzIiwgImZzbCxwcTJwcm8tbG9jYWxidXMiLAorCQkJICAgICAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4ZDg+OworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkgICAgICAgICAgMSAwIDB4ZjgwMDAwMDAgMHgwMDAwODAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CisKKwkJYmNzckAxLDAgeworCQkJZGV2aWNlX3R5cGUgPSAiYm9hcmQtY29udHJvbCI7CisJCQlyZWcgPSA8MSAwIDB4ODAwMD47CisJCX07CiAJfTsKIAogCXNvYzgzNjBAZTAwMDAwMDAgewpAQCAtMTMxLDI0ICsxNDgsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC00MDUsNyArNDI2LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMKaW5kZXggODljOTIwMi4uZGVjYWRmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9yZGsuZHRzCkBAIC0xMjUsMjQgKzEyNSwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTM4Myw2ICszODcsMTggQEAKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAkJfTsKIAorCQl1cG1AMSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHVwbS1uYW5kIjsKKwkJCXJlZyA9IDwxIDAgMT47CisJCQlmc2wsdXBtLWFkZHItb2Zmc2V0ID0gPDE2PjsKKwkJCWZzbCx1cG0tY21kLW9mZnNldCA9IDw4PjsKKwkJCWdwaW9zID0gPCZxZV9waW9fZSAxOCAwPjsKKworCQkJZmxhc2ggeworCQkJCWNvbXBhdGlibGUgPSAic3RtLG5hbmQ1MTItYSI7CisJCQl9OworCQl9OworCiAJCWRpc3BsYXlAMiwwIHsKIAkJCWRldmljZV90eXBlID0gImRpc3BsYXkiOwogCQkJY29tcGF0aWJsZSA9ICJmdWppdHN1LE1CODYyNzciLCAiZnVqaXRzdSxtaW50IjsKQEAgLTQwNSw3ICs0MjEsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLXBjaSIsICJmc2wsbXBjODM0OS1wY2kiOwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDAgMHgxMDAwMDAwMAogCQkJICAweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgxMDAwMDAwMAogCQkJICAweDAxMDAwMDAwIDAgMHhlMDMwMDAwMCAweGUwMzAwMDAwIDAgMHgwMDEwMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwppbmRleCA0MzI3ODJiLi4wNDg0NTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKQEAgLTEzNiw2ICsxMzYsMTMgQEAKIAkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZGZzcnI7CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlpMmNAMzEwMCB7CkBAIC0yNDYsMjQgKzI1MywyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8MHg0NyA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8MHg0NyA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDQ3IDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NDcgOD47CiAJCQl9OwpAQCAtMzc0LDcgKzM4NSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IGVkMTM3YWEuLjUzMTkxYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMTU1LDI0ICsxNTUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMTUsNyArMzE5LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKaW5kZXggZWQzMmM4ZC4uNjdhMDhkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCkBAIC0xMzYsNiArMTM2LDEzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtMTcwLDI0ICsxNzcsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zNjAsNyArMzcxLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKaW5kZXggMzRhN2YyZi4uNGEwOTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCkBAIC0xNTUsMjQgKzE1NSwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMwMSw3ICszMDUsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCBmNGRiOWVkLi4zMjMzNzBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTEzNiw2ICsxMzYsMTMgQEAKIAkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZGZzcnI7CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlpMmNAMzEwMCB7CkBAIC0xNzAsMjQgKzE3NywyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTM4OCw3ICszOTksOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwppbmRleCBlNGQ3MDMwLi5iYmQ4ODRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKQEAgLTE1NSwyNCArMTU1LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMzI5LDcgKzMzMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKaW5kZXggMTUwNWQ2OC4uOTNmZGQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKQEAgLTkxLDYgKzkxLDggQEAKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMzMjMyIjsKIAkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDB4MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl9OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCmluZGV4IDU4NGE0ZjEuLmY3MjRkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJCXJlZyA9IDwweGU0MDAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMnNAMTYwMDAgeworCQlzc2lAMTYwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1zc2kiOwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDE2MDAwIDB4MTAwPjsKQEAgLTIxNSw2ICsyMTUsOCBAQAogCQkJaW50ZXJydXB0cyA9IDw2MiAyPjsKIAkJCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJCQljb2RlYy1oYW5kbGUgPSA8JmNzNDI3MD47CisJCQlmc2wscGxheWJhY2stZG1hID0gPCZkbWEwMD47CisJCQlmc2wsY2FwdHVyZS1kbWEgPSA8JmRtYTAxPjsKIAkJfTsKIAogCQlzc2lAMTYxMDAgewpAQCAtMjMzLDE3ICsyMzUsMTcgQEAKIAkJCXJlZyA9IDwweDIxMzAwIDB4ND47IC8qIERNQSBnZW5lcmFsIHN0YXR1cyByZWdpc3RlciAqLwogCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKIAotCQkJZG1hLWNoYW5uZWxAMCB7CisJCQlkbWEwMDogZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIsCi0JCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJCSJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKIAkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxIHsKKwkJCWRtYTAxOiBkbWEtY2hhbm5lbEAxIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWRtYS1jaGFubmVsIiwKLQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQkJImZzbCxzc2ktZG1hLWNoYW5uZWwiOwogCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKaW5kZXggNDVmNzg5Yi4uMGY5NDFmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwpAQCAtMTA3LDI0ICsxMDcsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yNjgsNyArMjcyLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzCmluZGV4IDcyZDE1ZjAuLjNiMjk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zZXF1b2lhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2VxdW9pYS5kdHMKQEAgLTI0NiwxMyArMjQ2LDIyIEBACiAJICAgCQl9OwogCiAJCQlJSUMwOiBpMmNAZWY2MDA3MDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKworCQkJCWh3bW9uQDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhZGksYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDB4ZWY2MDA4MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cwppbmRleCBlMzk0MjJhLi4xZmEzY2I0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy95b3NlbWl0ZS5kdHMKQEAgLTE1LDcgKzE1LDcgQEAKIAkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIAltb2RlbCA9ICJhbWNjLHlvc2VtaXRlIjsKLQljb21wYXRpYmxlID0gImFtY2MseW9zZW1pdGUiLCJhbWNjLGJhbWJvbyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLHlvc2VtaXRlIjsKIAlkY3ItcGFyZW50ID0gPCZ7L2NwdXMvY3B1QDB9PjsKIAogCWFsaWFzZXMgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZWxmX3V0aWwuYyBiL2FyY2gvcG93ZXJwYy9ib290L2VsZl91dGlsLmMKaW5kZXggNzQ1NGFhNC4uMTU2N2EwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZWxmX3V0aWwuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9lbGZfdXRpbC5jCkBAIC0yNyw3ICsyNyw4IEBACiAJICAgICAgZWxmNjQtPmVfaWRlbnRbRUlfTUFHM10gID09IEVMRk1BRzMJJiYKIAkgICAgICBlbGY2NC0+ZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NAkmJgogCSAgICAgIGVsZjY0LT5lX2lkZW50W0VJX0RBVEFdICA9PSBFTEZEQVRBMk1TQgkmJgotCSAgICAgIGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDCSYmCisJICAgICAgKGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDIHx8CisJICAgICAgIGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9EWU4pCSYmCiAJICAgICAgZWxmNjQtPmVfbWFjaGluZSAgICAgICAgID09IEVNX1BQQzY0KSkKIAkJcmV0dXJuIDA7CiAKQEAgLTU4LDcgKzU5LDggQEAKIAkgICAgICBlbGYzMi0+ZV9pZGVudFtFSV9NQUczXSAgPT0gRUxGTUFHMwkmJgogCSAgICAgIGVsZjMyLT5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyCSYmCiAJICAgICAgZWxmMzItPmVfaWRlbnRbRUlfREFUQV0gID09IEVMRkRBVEEyTVNCCSYmCi0JICAgICAgZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0VYRUMJJiYKKwkgICAgICAoZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0VYRUMgfHwKKwkgICAgICAgZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0RZTikgICAgICAmJgogCSAgICAgIGVsZjMyLT5lX21hY2hpbmUgICAgICAgICA9PSBFTV9QUEMpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L01ha2VmaWxlLmxpYmZkdCBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9NYWtlZmlsZS5saWJmZHQKaW5kZXggODJmOWM2YS4uNmM0MmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L01ha2VmaWxlLmxpYmZkdAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvTWFrZWZpbGUubGliZmR0CkBAIC0zLDEyICszLDYgQEAKICMgVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBNYWtlZmlsZSBvZiBpdHNlbGYuICBJbnN0ZWFkLCBpdCBpcyBkZXNpZ25lZCB0bwogIyBiZSBlYXNpbHkgZW1iZWRkYWJsZSBpbnRvIG90aGVyIHN5c3RlbXMgb2YgTWFrZWZpbGVzLgogIwotTElCRkRUX1NSQ1MgPSBmZHQuYyBmZHRfcm8uYyBmZHRfd2lwLmMgZmR0X3N3LmMgZmR0X3J3LmMgZmR0X3N0cmVycm9yLmMKIExJQkZEVF9JTkNMVURFUyA9IGZkdC5oIGxpYmZkdC5oCi1MSUJGRFRfRVhUUkEgPSBsaWJmZHRfaW50ZXJuYWwuaAotTElCRkRUX0xJQiA9IGxpYmZkdC9saWJmZHQuYQotCitMSUJGRFRfU1JDUyA9IGZkdC5jIGZkdF9yby5jIGZkdF93aXAuYyBmZHRfc3cuYyBmZHRfcncuYyBmZHRfc3RyZXJyb3IuYwogTElCRkRUX09CSlMgPSAkKExJQkZEVF9TUkNTOiUuYz0lLm8pCi0KLSQoTElCRkRUX29iamRpcikvJChMSUJGRFRfTElCKTogJChhZGRwcmVmaXggJChMSUJGRFRfb2JqZGlyKS8sJChMSUJGRFRfT0JKUykpCi0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHQuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHQuYwppbmRleCA1ODZhMzYxLi4yYWNhZWM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdC5jCkBAIC02Myw3ICs2Myw3IEBACiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEVkVSU0lPTjsKIAkJaWYgKGZkdF9sYXN0X2NvbXBfdmVyc2lvbihmZHQpID4gRkRUX0xBU1RfU1VQUE9SVEVEX1ZFUlNJT04pCiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEVkVSU0lPTjsKLQl9IGVsc2UgaWYgKGZkdF9tYWdpYyhmZHQpID09IFNXX01BR0lDKSB7CisJfSBlbHNlIGlmIChmZHRfbWFnaWMoZmR0KSA9PSBGRFRfU1dfTUFHSUMpIHsKIAkJLyogVW5maW5pc2hlZCBzZXF1ZW50aWFsLXdyaXRlIGJsb2IgKi8KIAkJaWYgKGZkdF9zaXplX2R0X3N0cnVjdChmZHQpID09IDApCiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RBVEU7CkBAIC03Niw3ICs3Niw3IEBACiAKIGNvbnN0IHZvaWQgKmZkdF9vZmZzZXRfcHRyKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50IGxlbikKIHsKLQljb25zdCB2b2lkICpwOworCWNvbnN0IGNoYXIgKnA7CiAKIAlpZiAoZmR0X3ZlcnNpb24oZmR0KSA+PSAweDExKQogCQlpZiAoKChvZmZzZXQgKyBsZW4pIDwgb2Zmc2V0KQpAQCAtMTI0LDExICsxMjQsNTkgQEAKIAl9CiAKIAlpZiAobmV4dG9mZnNldCkKLQkJKm5leHRvZmZzZXQgPSBBTElHTihvZmZzZXQsIEZEVF9UQUdTSVpFKTsKKwkJKm5leHRvZmZzZXQgPSBGRFRfVEFHQUxJR04ob2Zmc2V0KTsKIAogCXJldHVybiB0YWc7CiB9CiAKK2ludCBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCkKK3sKKwlpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgJSBGRFRfVEFHU0laRSkKKwkgICAgfHwgKGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm9mZnNldCkgIT0gRkRUX0JFR0lOX05PREUpKQorCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOworCisJcmV0dXJuIG9mZnNldDsKK30KKworaW50IGZkdF9uZXh0X25vZGUoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgKmRlcHRoKQoreworCWludCBuZXh0b2Zmc2V0ID0gMDsKKwl1aW50MzJfdCB0YWc7CisKKwlpZiAob2Zmc2V0ID49IDApCisJCWlmICgobmV4dG9mZnNldCA9IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoZmR0LCBvZmZzZXQpKSA8IDApCisJCQlyZXR1cm4gbmV4dG9mZnNldDsKKworCWRvIHsKKwkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7CisKKwkJc3dpdGNoICh0YWcpIHsKKwkJY2FzZSBGRFRfUFJPUDoKKwkJY2FzZSBGRFRfTk9QOgorCQkJYnJlYWs7CisKKwkJY2FzZSBGRFRfQkVHSU5fTk9ERToKKwkJCWlmIChkZXB0aCkKKwkJCQkoKmRlcHRoKSsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBGRFRfRU5EX05PREU6CisJCQlpZiAoZGVwdGgpCisJCQkJKCpkZXB0aCktLTsKKwkJCWJyZWFrOworCisJCWNhc2UgRkRUX0VORDoKKwkJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwkJfQorCX0gd2hpbGUgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCiBjb25zdCBjaGFyICpfZmR0X2ZpbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cnRhYiwgaW50IHRhYnNpemUsIGNvbnN0IGNoYXIgKnMpCiB7CiAJaW50IGxlbiA9IHN0cmxlbihzKSArIDE7CkBAIC0xMzYsMTcgKzE4NCwxNCBAQAogCWNvbnN0IGNoYXIgKnA7CiAKIAlmb3IgKHAgPSBzdHJ0YWI7IHAgPD0gbGFzdDsgcCsrKQotCQlpZiAobWVtZXEocCwgcywgbGVuKSkKKwkJaWYgKG1lbWNtcChwLCBzLCBsZW4pID09IDApCiAJCQlyZXR1cm4gcDsKIAlyZXR1cm4gTlVMTDsKIH0KIAogaW50IGZkdF9tb3ZlKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKLQlpbnQgZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoZmR0X3RvdGFsc2l6ZShmZHQpID4gYnVmc2l6ZSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3JvLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3JvLmMKaW5kZXggMTJhMzdkNS4uMTI5YjUzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9yby5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcm8uYwpAQCAtNTUsMTcgKzU1LDEwIEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotI2RlZmluZSBDSEVDS19IRUFERVIoZmR0KSBcCi0JeyBcCi0JCWludCBlcnI7IFwKLQkJaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKLQkJCXJldHVybiBlcnI7IFwKLQl9Ci0KLXN0YXRpYyBpbnQgbm9kZW5hbWVfZXEoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LAotCQkgICAgICAgY29uc3QgY2hhciAqcywgaW50IGxlbikKK3N0YXRpYyBpbnQgX2ZkdF9ub2RlbmFtZV9lcShjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQsCisJCQkgICAgY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKLQljb25zdCBjaGFyICpwID0gZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQsIGxlbisxKTsKKwljb25zdCBjaGFyICpwID0gZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQgKyBGRFRfVEFHU0laRSwgbGVuKzEpOwogCiAJaWYgKCEgcCkKIAkJLyogc2hvcnQgbWF0Y2ggKi8KQEAgLTg0LDEyICs3NywxMiBAQAogCiBjb25zdCBjaGFyICpmZHRfc3RyaW5nKGNvbnN0IHZvaWQgKmZkdCwgaW50IHN0cm9mZnNldCkKIHsKLQlyZXR1cm4gKGNoYXIgKilmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIHN0cm9mZnNldDsKKwlyZXR1cm4gKGNvbnN0IGNoYXIgKilmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIHN0cm9mZnNldDsKIH0KIAogaW50IGZkdF9nZXRfbWVtX3Jzdihjb25zdCB2b2lkICpmZHQsIGludCBuLCB1aW50NjRfdCAqYWRkcmVzcywgdWludDY0X3QgKnNpemUpCiB7Ci0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCSphZGRyZXNzID0gZmR0NjRfdG9fY3B1KF9mZHRfbWVtX3JzdihmZHQsIG4pLT5hZGRyZXNzKTsKIAkqc2l6ZSA9IGZkdDY0X3RvX2NwdShfZmR0X21lbV9yc3YoZmR0LCBuKS0+c2l6ZSk7CiAJcmV0dXJuIDA7CkBAIC0xMDQsNTAgKzk3LDI0IEBACiAJcmV0dXJuIGk7CiB9CiAKLWludCBmZHRfc3Vibm9kZV9vZmZzZXRfbmFtZWxlbihjb25zdCB2b2lkICpmZHQsIGludCBwYXJlbnRvZmZzZXQsCitpbnQgZmR0X3N1Ym5vZGVfb2Zmc2V0X25hbWVsZW4oY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQogewotCWludCBsZXZlbCA9IDA7Ci0JdWludDMyX3QgdGFnOwotCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7CisJaW50IGRlcHRoOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCi0JdGFnID0gZmR0X25leHRfdGFnKGZkdCwgcGFyZW50b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKGRlcHRoID0gMDsKKwkgICAgIG9mZnNldCA+PSAwOworCSAgICAgb2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIG9mZnNldCwgJmRlcHRoKSkgeworCQlpZiAoZGVwdGggPCAwKQorCQkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCQllbHNlIGlmICgoZGVwdGggPT0gMSkKKwkJCSAmJiBfZmR0X25vZGVuYW1lX2VxKGZkdCwgb2Zmc2V0LCBuYW1lLCBuYW1lbGVuKSkKKwkJCXJldHVybiBvZmZzZXQ7CisJfQogCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQotCQlzd2l0Y2ggKHRhZykgewotCQljYXNlIEZEVF9FTkQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfVFJVTkNBVEVEOwotCi0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsICE9IDEpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobm9kZW5hbWVfZXEoZmR0LCBvZmZzZXQrRkRUX1RBR1NJWkUsIG5hbWUsIG5hbWVsZW4pKQotCQkJCS8qIEZvdW5kIGl0ISAqLwotCQkJCXJldHVybiBvZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9FTkRfTk9ERToKLQkJCWxldmVsLS07Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9QUk9QOgotCQljYXNlIEZEVF9OT1A6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKLQkJfQotCX0gd2hpbGUgKGxldmVsID49IDApOwotCi0JcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yICovCiB9CiAKIGludCBmZHRfc3Vibm9kZV9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBpbnQgcGFyZW50b2Zmc2V0LApAQCAtMTYyLDcgKzEyOSw3IEBACiAJY29uc3QgY2hhciAqcCA9IHBhdGg7CiAJaW50IG9mZnNldCA9IDA7CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoKnBhdGggIT0gJy8nKQogCQlyZXR1cm4gLUZEVF9FUlJfQkFEUEFUSDsKQEAgLTE5MCwxNiArMTU3LDEyIEBACiAKIGNvbnN0IGNoYXIgKmZkdF9nZXRfbmFtZShjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBpbnQgKmxlbikKIHsKLQljb25zdCBzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaDsKKwljb25zdCBzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaCA9IF9mZHRfb2Zmc2V0X3B0cihmZHQsIG5vZGVvZmZzZXQpOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkKLQkJZ290byBmYWlsOwotCi0JZXJyID0gLUZEVF9FUlJfQkFET0ZGU0VUOwotCW5oID0gZmR0X29mZnNldF9wdHIoZmR0LCBub2Rlb2Zmc2V0LCBzaXplb2YoKm5oKSk7Ci0JaWYgKCFuaCB8fCAoZmR0MzJfdG9fY3B1KG5oLT50YWcpICE9IEZEVF9CRUdJTl9OT0RFKSkKLQkJZ290byBmYWlsOworCWlmICgoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkKKwkgICAgfHwgKChlcnIgPSBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGZkdCwgbm9kZW9mZnNldCkpIDwgMCkpCisJCQlnb3RvIGZhaWw7CiAKIAlpZiAobGVuKQogCQkqbGVuID0gc3RybGVuKG5oLT5uYW1lKTsKQEAgLTIyMiwxNyArMTg1LDExIEBACiAJaW50IG9mZnNldCwgbmV4dG9mZnNldDsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCi0JCWdvdG8gZmFpbDsKKwlpZiAoKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCisJICAgIHx8ICgoZXJyID0gX2ZkdF9jaGVja19ub2RlX29mZnNldChmZHQsIG5vZGVvZmZzZXQpKSA8IDApKQorCQkJZ290byBmYWlsOwogCi0JZXJyID0gLUZEVF9FUlJfQkFET0ZGU0VUOwotCWlmIChub2Rlb2Zmc2V0ICUgRkRUX1RBR1NJWkUpCi0JCWdvdG8gZmFpbDsKLQotCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG5vZGVvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQlnb3RvIGZhaWw7Ci0KKwluZXh0b2Zmc2V0ID0gZXJyOwogCWRvIHsKIAkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKIApAQCAtMjUzLDcgKzIxMCw3IEBACiAJCQlpZiAoISBwcm9wKQogCQkJCWdvdG8gZmFpbDsKIAkJCW5hbWVzdHJvZmYgPSBmZHQzMl90b19jcHUocHJvcC0+bmFtZW9mZik7Ci0JCQlpZiAoc3RyZXEoZmR0X3N0cmluZyhmZHQsIG5hbWVzdHJvZmYpLCBuYW1lKSkgeworCQkJaWYgKHN0cmNtcChmZHRfc3RyaW5nKGZkdCwgbmFtZXN0cm9mZiksIG5hbWUpID09IDApIHsKIAkJCQkvKiBGb3VuZCBpdCEgKi8KIAkJCQlpbnQgbGVuID0gZmR0MzJfdG9fY3B1KHByb3AtPmxlbik7CiAJCQkJcHJvcCA9IGZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0LApAQCAtMzA3LDExNSArMjY0LDkxIEBACiAKIGludCBmZHRfZ2V0X3BhdGgoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewotCXVpbnQzMl90IHRhZzsKLQlpbnQgcCA9IDAsIG92ZXJmbG93ID0gMDsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0LCBuYW1lbGVuOworCWludCBwZGVwdGggPSAwLCBwID0gMDsKKwlpbnQgb2Zmc2V0LCBkZXB0aCwgbmFtZWxlbjsKIAljb25zdCBjaGFyICpuYW1lOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7Ci0KLQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCAwLCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoYnVmbGVuIDwgMikKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7Ci0JYnVmWzBdID0gJy8nOwotCXAgPSAxOwogCi0Jd2hpbGUgKG5leHRvZmZzZXQgPD0gbm9kZW9mZnNldCkgewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfRU5EOgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKG9mZnNldCA9IDAsIGRlcHRoID0gMDsKKwkgICAgIChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8PSBub2Rlb2Zmc2V0KTsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsICZkZXB0aCkpIHsKKwkJaWYgKHBkZXB0aCA8IGRlcHRoKQorCQkJY29udGludWU7IC8qIG92ZXJmbG93ZWQgYnVmZmVyICovCiAKLQkJY2FzZSBGRFRfQkVHSU5fTk9ERToKLQkJCW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBvZmZzZXQsICZuYW1lbGVuKTsKLQkJCWlmICghbmFtZSkKLQkJCQlyZXR1cm4gbmFtZWxlbjsKLQkJCWlmIChvdmVyZmxvdyB8fCAoKHAgKyBuYW1lbGVuICsgMSkgPiBidWZsZW4pKSB7Ci0JCQkJb3ZlcmZsb3crKzsKLQkJCQlicmVhazsKLQkJCX0KKwkJd2hpbGUgKHBkZXB0aCA+IGRlcHRoKSB7CisJCQlkbyB7CisJCQkJcC0tOworCQkJfSB3aGlsZSAoYnVmW3AtMV0gIT0gJy8nKTsKKwkJCXBkZXB0aC0tOworCQl9CisKKwkJbmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIG9mZnNldCwgJm5hbWVsZW4pOworCQlpZiAoIW5hbWUpCisJCQlyZXR1cm4gbmFtZWxlbjsKKwkJaWYgKChwICsgbmFtZWxlbiArIDEpIDw9IGJ1ZmxlbikgewogCQkJbWVtY3B5KGJ1ZiArIHAsIG5hbWUsIG5hbWVsZW4pOwogCQkJcCArPSBuYW1lbGVuOwogCQkJYnVmW3ArK10gPSAnLyc7Ci0JCQlicmVhazsKKwkJCXBkZXB0aCsrOworCQl9CiAKLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCQlpZiAob3ZlcmZsb3cpIHsKLQkJCQlvdmVyZmxvdy0tOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZG8geworCQlpZiAob2Zmc2V0ID09IG5vZGVvZmZzZXQpIHsKKwkJCWlmIChwZGVwdGggPCAoZGVwdGggKyAxKSkKKwkJCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKKworCQkJaWYgKHAgPiAxKSAvKiBzcGVjaWFsIGNhc2Ugc28gdGhhdCByb290IHBhdGggaXMgIi8iLCBub3QgIiIgKi8KIAkJCQlwLS07Ci0JCQl9IHdoaWxlICAoYnVmW3AtMV0gIT0gJy8nKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOworCQkJYnVmW3BdID0gJ1wwJzsKKwkJCXJldHVybiBwOwogCQl9CiAJfQogCi0JaWYgKG92ZXJmbG93KQotCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKKwlpZiAoKG9mZnNldCA9PSAtRkRUX0VSUl9OT1RGT1VORCkgfHwgKG9mZnNldCA+PSAwKSkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwllbHNlIGlmIChvZmZzZXQgPT0gLUZEVF9FUlJfQkFET0ZGU0VUKQorCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOwogCi0JaWYgKHAgPiAxKSAvKiBzcGVjaWFsIGNhc2Ugc28gdGhhdCByb290IHBhdGggaXMgIi8iLCBub3QgIiIgKi8KLQkJcC0tOwotCWJ1ZltwXSA9ICdcMCc7Ci0JcmV0dXJuIHA7CisJcmV0dXJuIG9mZnNldDsgLyogZXJyb3IgZnJvbSBmZHRfbmV4dF9ub2RlKCkgKi8KIH0KIAogaW50IGZkdF9zdXBlcm5vZGVfYXRkZXB0aF9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwKIAkJCQkgaW50IHN1cGVybm9kZWRlcHRoLCBpbnQgKm5vZGVkZXB0aCkKIHsKLQlpbnQgbGV2ZWwgPSAtMTsKLQl1aW50MzJfdCB0YWc7Ci0JaW50IG9mZnNldCwgbmV4dG9mZnNldCA9IDA7CisJaW50IG9mZnNldCwgZGVwdGg7CiAJaW50IHN1cGVybm9kZW9mZnNldCA9IC1GRFRfRVJSX0lOVEVSTkFMOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJaWYgKHN1cGVybm9kZWRlcHRoIDwgMCkKIAkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOwogCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfRU5EOgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKG9mZnNldCA9IDAsIGRlcHRoID0gMDsKKwkgICAgIChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8PSBub2Rlb2Zmc2V0KTsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsICZkZXB0aCkpIHsKKwkJaWYgKGRlcHRoID09IHN1cGVybm9kZWRlcHRoKQorCQkJc3VwZXJub2Rlb2Zmc2V0ID0gb2Zmc2V0OwogCi0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsID09IHN1cGVybm9kZWRlcHRoKQotCQkJCXN1cGVybm9kZW9mZnNldCA9IG9mZnNldDsKLQkJCWJyZWFrOworCQlpZiAob2Zmc2V0ID09IG5vZGVvZmZzZXQpIHsKKwkJCWlmIChub2RlZGVwdGgpCisJCQkJKm5vZGVkZXB0aCA9IGRlcHRoOwogCi0JCWNhc2UgRkRUX0VORF9OT0RFOgotCQkJbGV2ZWwtLTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOworCQkJaWYgKHN1cGVybm9kZWRlcHRoID4gZGVwdGgpCisJCQkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCQkJZWxzZQorCQkJCXJldHVybiBzdXBlcm5vZGVvZmZzZXQ7CiAJCX0KLQl9IHdoaWxlIChvZmZzZXQgPCBub2Rlb2Zmc2V0KTsKKwl9CiAKLQlpZiAobm9kZWRlcHRoKQotCQkqbm9kZWRlcHRoID0gbGV2ZWw7CisJaWYgKChvZmZzZXQgPT0gLUZEVF9FUlJfTk9URk9VTkQpIHx8IChvZmZzZXQgPj0gMCkpCisJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZWxzZSBpZiAob2Zmc2V0ID09IC1GRFRfRVJSX0JBRE9GRlNFVCkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKIAotCWlmIChzdXBlcm5vZGVkZXB0aCA+IGxldmVsKQotCQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7Ci0JcmV0dXJuIHN1cGVybm9kZW9mZnNldDsKKwlyZXR1cm4gb2Zmc2V0OyAvKiBlcnJvciBmcm9tIGZkdF9uZXh0X25vZGUoKSAqLwogfQogCiBpbnQgZmR0X25vZGVfZGVwdGgoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCkKQEAgLTQ0Myw1MSArMzc2LDI3IEBACiAJCQkJICBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCQkgIGNvbnN0IHZvaWQgKnByb3B2YWwsIGludCBwcm9wbGVuKQogewotCXVpbnQzMl90IHRhZzsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0OworCWludCBvZmZzZXQ7CiAJY29uc3Qgdm9pZCAqdmFsOwogCWludCBsZW47CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKLQotCWlmIChzdGFydG9mZnNldCA+PSAwKSB7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIHN0YXJ0b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5leHRvZmZzZXQgPSAwOwotCX0KKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAkvKiBGSVhNRTogVGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBob3JyaWJsZTogd2Ugc2NhbiBlYWNoCiAJICogcHJvcGVydHkgb2YgYSBub2RlIGluIGZkdF9nZXRwcm9wKCksIHRoZW4gaWYgdGhhdCBkaWRuJ3QKIAkgKiBmaW5kIHdoYXQgd2Ugd2FudCwgd2Ugc2NhbiBvdmVyIHRoZW0gYWdhaW4gbWFraW5nIG91ciB3YXkKIAkgKiB0byB0aGUgbmV4dCBub2RlLiAgU3RpbGwgaXQncyB0aGUgZWFzaWVzdCB0byBpbXBsZW1lbnQKIAkgKiBhcHByb2FjaDsgcGVyZm9ybWFuY2UgY2FuIGNvbWUgbGF0ZXIuICovCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKKwlmb3IgKG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBzdGFydG9mZnNldCwgTlVMTCk7CisJICAgICBvZmZzZXQgPj0gMDsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsIE5VTEwpKSB7CisJCXZhbCA9IGZkdF9nZXRwcm9wKGZkdCwgb2Zmc2V0LCBwcm9wbmFtZSwgJmxlbik7CisJCWlmICh2YWwgJiYgKGxlbiA9PSBwcm9wbGVuKQorCQkgICAgJiYgKG1lbWNtcCh2YWwsIHByb3B2YWwsIGxlbikgPT0gMCkpCisJCQlyZXR1cm4gb2Zmc2V0OworCX0KIAotCQlzd2l0Y2ggKHRhZykgewotCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJdmFsID0gZmR0X2dldHByb3AoZmR0LCBvZmZzZXQsIHByb3BuYW1lLCAmbGVuKTsKLQkJCWlmICh2YWwKLQkJCSAgICAmJiAobGVuID09IHByb3BsZW4pCi0JCQkgICAgJiYgKG1lbWNtcCh2YWwsIHByb3B2YWwsIGxlbikgPT0gMCkpCi0JCQkJcmV0dXJuIG9mZnNldDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX0VORDoKLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOwotCQl9Ci0JfSB3aGlsZSAodGFnICE9IEZEVF9FTkQpOwotCi0JcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yIGZyb20gZmR0X25leHRfbm9kZSgpICovCiB9CiAKIGludCBmZHRfbm9kZV9vZmZzZXRfYnlfcGhhbmRsZShjb25zdCB2b2lkICpmZHQsIHVpbnQzMl90IHBoYW5kbGUpCkBAIC00OTksMTAgKzQwOCwxMCBAQAogCQkJCQkgICAgICZwaGFuZGxlLCBzaXplb2YocGhhbmRsZSkpOwogfQogCi1pbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3Qgdm9pZCAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKK2ludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQogewogCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKLQljb25zdCB2b2lkICpwOworCWNvbnN0IGNoYXIgKnA7CiAKIAl3aGlsZSAobGlzdGxlbiA+PSBsZW4pIHsKIAkJaWYgKG1lbWNtcChzdHIsIHN0cmxpc3QsIGxlbisxKSA9PSAwKQpAQCAtNTM0LDUwICs0NDMsMjQgQEAKIGludCBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0aWJsZShjb25zdCB2b2lkICpmZHQsIGludCBzdGFydG9mZnNldCwKIAkJCQkgIGNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCiB7Ci0JdWludDMyX3QgdGFnOwotCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7Ci0JaW50IGVycjsKKwlpbnQgb2Zmc2V0LCBlcnI7CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKLQotCWlmIChzdGFydG9mZnNldCA+PSAwKSB7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIHN0YXJ0b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5leHRvZmZzZXQgPSAwOwotCX0KKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAkvKiBGSVhNRTogVGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBob3JyaWJsZTogd2Ugc2NhbiBlYWNoCiAJICogcHJvcGVydHkgb2YgYSBub2RlIGluIGZkdF9ub2RlX2NoZWNrX2NvbXBhdGlibGUoKSwgdGhlbiBpZgogCSAqIHRoYXQgZGlkbid0IGZpbmQgd2hhdCB3ZSB3YW50LCB3ZSBzY2FuIG92ZXIgdGhlbSBhZ2FpbgogCSAqIG1ha2luZyBvdXIgd2F5IHRvIHRoZSBuZXh0IG5vZGUuICBTdGlsbCBpdCdzIHRoZSBlYXNpZXN0IHRvCiAJICogaW1wbGVtZW50IGFwcHJvYWNoOyBwZXJmb3JtYW5jZSBjYW4gY29tZSBsYXRlci4gKi8KLQlkbyB7Ci0JCW9mZnNldCA9IG5leHRvZmZzZXQ7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm5leHRvZmZzZXQpOworCWZvciAob2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIHN0YXJ0b2Zmc2V0LCBOVUxMKTsKKwkgICAgIG9mZnNldCA+PSAwOworCSAgICAgb2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIG9mZnNldCwgTlVMTCkpIHsKKwkJZXJyID0gZmR0X25vZGVfY2hlY2tfY29tcGF0aWJsZShmZHQsIG9mZnNldCwgY29tcGF0aWJsZSk7CisJCWlmICgoZXJyIDwgMCkgJiYgKGVyciAhPSAtRkRUX0VSUl9OT1RGT1VORCkpCisJCQlyZXR1cm4gZXJyOworCQllbHNlIGlmIChlcnIgPT0gMCkKKwkJCXJldHVybiBvZmZzZXQ7CisJfQogCi0JCXN3aXRjaCAodGFnKSB7Ci0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQllcnIgPSBmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgb2Zmc2V0LAotCQkJCQkJCWNvbXBhdGlibGUpOwotCQkJaWYgKChlcnIgPCAwKQotCQkJICAgICYmIChlcnIgIT0gLUZEVF9FUlJfTk9URk9VTkQpKQotCQkJCXJldHVybiBlcnI7Ci0JCQllbHNlIGlmIChlcnIgPT0gMCkKLQkJCQlyZXR1cm4gb2Zmc2V0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGRFRfUFJPUDoKLQkJY2FzZSBGRFRfRU5EOgotCQljYXNlIEZEVF9FTkRfTk9ERToKLQkJY2FzZSBGRFRfTk9QOgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7Ci0JCX0KLQl9IHdoaWxlICh0YWcgIT0gRkRUX0VORCk7Ci0KLQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7CisJcmV0dXJuIG9mZnNldDsgLyogZXJyb3IgZnJvbSBmZHRfbmV4dF9ub2RlKCkgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcncuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcncuYwppbmRleCA2NjczZjhlLi44ZTdlYzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3J3LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9ydy5jCkBAIC01NSwxMCArNTUsMTAgQEAKIAogI2luY2x1ZGUgImxpYmZkdF9pbnRlcm5hbC5oIgogCi1zdGF0aWMgaW50IF9ibG9ja3NfbWlzb3JkZXJlZChjb25zdCB2b2lkICpmZHQsCitzdGF0aWMgaW50IF9mZHRfYmxvY2tzX21pc29yZGVyZWQoY29uc3Qgdm9pZCAqZmR0LAogCQkJICAgICAgaW50IG1lbV9yc3Zfc2l6ZSwgaW50IHN0cnVjdF9zaXplKQogewotCXJldHVybiAoZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkgPCBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSkKKwlyZXR1cm4gKGZkdF9vZmZfbWVtX3Jzdm1hcChmZHQpIDwgRkRUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksIDgpKQogCQl8fCAoZmR0X29mZl9kdF9zdHJ1Y3QoZmR0KSA8CiAJCSAgICAoZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkgKyBtZW1fcnN2X3NpemUpKQogCQl8fCAoZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgPApAQCAtNjcsMTYgKzY3LDE0IEBACiAJCSAgICAoZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgKyBmZHRfc2l6ZV9kdF9zdHJpbmdzKGZkdCkpKTsKIH0KIAotc3RhdGljIGludCByd19jaGVja19oZWFkZXIodm9pZCAqZmR0KQorc3RhdGljIGludCBfZmR0X3J3X2NoZWNrX2hlYWRlcih2b2lkICpmZHQpCiB7Ci0JaW50IGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKLQlpZiAoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkpCi0JCXJldHVybiBlcnI7CiAJaWYgKGZkdF92ZXJzaW9uKGZkdCkgPCAxNykKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRFZFUlNJT047Ci0JaWYgKF9ibG9ja3NfbWlzb3JkZXJlZChmZHQsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpLAotCQkJICAgICAgIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKSkKKwlpZiAoX2ZkdF9ibG9ja3NfbWlzb3JkZXJlZChmZHQsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpLAorCQkJCSAgIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKSkKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRExBWU9VVDsKIAlpZiAoZmR0X3ZlcnNpb24oZmR0KSA+IDE3KQogCQlmZHRfc2V0X3ZlcnNpb24oZmR0LCAxNyk7CkBAIC04NCwzNiArODIsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBSV19DSEVDS19IRUFERVIoZmR0KSBcCisjZGVmaW5lIEZEVF9SV19DSEVDS19IRUFERVIoZmR0KSBcCiAJeyBcCiAJCWludCBlcnI7IFwKLQkJaWYgKChlcnIgPSByd19jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkgXAorCQlpZiAoKGVyciA9IF9mZHRfcndfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKIAkJCXJldHVybiBlcnI7IFwKIAl9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9ibG9iX2RhdGFfc2l6ZSh2b2lkICpmZHQpCitzdGF0aWMgaW5saW5lIGludCBfZmR0X2RhdGFfc2l6ZSh2b2lkICpmZHQpCiB7CiAJcmV0dXJuIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogfQogCi1zdGF0aWMgaW50IF9ibG9iX3NwbGljZSh2b2lkICpmZHQsIHZvaWQgKnAsIGludCBvbGRsZW4sIGludCBuZXdsZW4pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlKHZvaWQgKmZkdCwgdm9pZCAqc3BsaWNlcG9pbnQsIGludCBvbGRsZW4sIGludCBuZXdsZW4pCiB7Ci0Jdm9pZCAqZW5kID0gZmR0ICsgX2Jsb2JfZGF0YV9zaXplKGZkdCk7CisJY2hhciAqcCA9IHNwbGljZXBvaW50OworCWNoYXIgKmVuZCA9IChjaGFyICopZmR0ICsgX2ZkdF9kYXRhX3NpemUoZmR0KTsKIAogCWlmICgoKHAgKyBvbGRsZW4pIDwgcCkgfHwgKChwICsgb2xkbGVuKSA+IGVuZCkpCiAJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7Ci0JaWYgKChlbmQgLSBvbGRsZW4gKyBuZXdsZW4pID4gKGZkdCArIGZkdF90b3RhbHNpemUoZmR0KSkpCisJaWYgKChlbmQgLSBvbGRsZW4gKyBuZXdsZW4pID4gKChjaGFyICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpKSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAJbWVtbW92ZShwICsgbmV3bGVuLCBwICsgb2xkbGVuLCBlbmQgLSBwIC0gb2xkbGVuKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfYmxvYl9zcGxpY2VfbWVtX3Jzdih2b2lkICpmZHQsIHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcCwKLQkJCQlpbnQgb2xkbiwgaW50IG5ld24pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlX21lbV9yc3Yodm9pZCAqZmR0LCBzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnAsCisJCQkgICAgICAgaW50IG9sZG4sIGludCBuZXduKQogewogCWludCBkZWx0YSA9IChuZXduIC0gb2xkbikgKiBzaXplb2YoKnApOwogCWludCBlcnI7Ci0JZXJyID0gX2Jsb2Jfc3BsaWNlKGZkdCwgcCwgb2xkbiAqIHNpemVvZigqcCksIG5ld24gKiBzaXplb2YoKnApKTsKKwllcnIgPSBfZmR0X3NwbGljZShmZHQsIHAsIG9sZG4gKiBzaXplb2YoKnApLCBuZXduICogc2l6ZW9mKCpwKSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlmZHRfc2V0X29mZl9kdF9zdHJ1Y3QoZmR0LCBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpICsgZGVsdGEpOwpAQCAtMTIxLDEzICsxMjAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfYmxvYl9zcGxpY2Vfc3RydWN0KHZvaWQgKmZkdCwgdm9pZCAqcCwKLQkJCSAgICAgICBpbnQgb2xkbGVuLCBpbnQgbmV3bGVuKQorc3RhdGljIGludCBfZmR0X3NwbGljZV9zdHJ1Y3Qodm9pZCAqZmR0LCB2b2lkICpwLAorCQkJICAgICAgaW50IG9sZGxlbiwgaW50IG5ld2xlbikKIHsKIAlpbnQgZGVsdGEgPSBuZXdsZW4gLSBvbGRsZW47CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gX2Jsb2Jfc3BsaWNlKGZkdCwgcCwgb2xkbGVuLCBuZXdsZW4pKSkKKwlpZiAoKGVyciA9IF9mZHRfc3BsaWNlKGZkdCwgcCwgb2xkbGVuLCBuZXdsZW4pKSkKIAkJcmV0dXJuIGVycjsKIAogCWZkdF9zZXRfc2l6ZV9kdF9zdHJ1Y3QoZmR0LCBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSArIGRlbHRhKTsKQEAgLTEzNSwxOSArMTM0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2Jsb2Jfc3BsaWNlX3N0cmluZyh2b2lkICpmZHQsIGludCBuZXdsZW4pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlX3N0cmluZyh2b2lkICpmZHQsIGludCBuZXdsZW4pCiB7Ci0Jdm9pZCAqcCA9IGZkdCArIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOworCXZvaWQgKnAgPSAoY2hhciAqKWZkdAorCQkrIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IF9ibG9iX3NwbGljZShmZHQsIHAsIDAsIG5ld2xlbikpKQorCWlmICgoZXJyID0gX2ZkdF9zcGxpY2UoZmR0LCBwLCAwLCBuZXdsZW4pKSkKIAkJcmV0dXJuIGVycjsKIAogCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKGZkdCwgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpICsgbmV3bGVuKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQgX2ZkdF9maW5kX2FkZF9zdHJpbmcodm9pZCAqZmR0LCBjb25zdCBjaGFyICpzKQogewogCWNoYXIgKnN0cnRhYiA9IChjaGFyICopZmR0ICsgZmR0X29mZl9kdF9zdHJpbmdzKGZkdCk7CiAJY29uc3QgY2hhciAqcDsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQlyZXR1cm4gKHAgLSBzdHJ0YWIpOwogCiAJbmV3ID0gc3RydGFiICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwotCWVyciA9IF9ibG9iX3NwbGljZV9zdHJpbmcoZmR0LCBsZW4pOworCWVyciA9IF9mZHRfc3BsaWNlX3N0cmluZyhmZHQsIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc0LDExICsxNzQsMTAgQEAKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnJlOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHJ3X2NoZWNrX2hlYWRlcihmZHQpKSkKLQkJcmV0dXJuIGVycjsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlyZSA9IF9mZHRfbWVtX3Jzdl93KGZkdCwgZmR0X251bV9tZW1fcnN2KGZkdCkpOwotCWVyciA9IF9ibG9iX3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDAsIDEpOworCWVyciA9IF9mZHRfc3BsaWNlX21lbV9yc3YoZmR0LCByZSwgMCwgMSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTkyLDE5ICsxOTEsMTkgQEAKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnJlID0gX2ZkdF9tZW1fcnN2X3coZmR0LCBuKTsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSByd19jaGVja19oZWFkZXIoZmR0KSkpCi0JCXJldHVybiBlcnI7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOworCiAJaWYgKG4gPj0gZmR0X251bV9tZW1fcnN2KGZkdCkpCiAJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKIAotCWVyciA9IF9ibG9iX3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDEsIDApOworCWVyciA9IF9mZHRfc3BsaWNlX21lbV9yc3YoZmR0LCByZSwgMSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfcmVzaXplX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCi0JCQkgICAgc3RydWN0IGZkdF9wcm9wZXJ0eSAqKnByb3ApCitzdGF0aWMgaW50IF9mZHRfcmVzaXplX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJaW50IGxlbiwgc3RydWN0IGZkdF9wcm9wZXJ0eSAqKnByb3ApCiB7CiAJaW50IG9sZGxlbjsKIAlpbnQgZXJyOwpAQCAtMjEzLDM2ICsyMTIsMzMgQEAKIAlpZiAoISAoKnByb3ApKQogCQlyZXR1cm4gb2xkbGVuOwogCi0JaWYgKChlcnIgPSBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgKCpwcm9wKS0+ZGF0YSwKLQkJCQkgICAgICAgQUxJR04ob2xkbGVuLCBGRFRfVEFHU0laRSksCi0JCQkJICAgICAgIEFMSUdOKGxlbiwgRkRUX1RBR1NJWkUpKSkpCisJaWYgKChlcnIgPSBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCAoKnByb3ApLT5kYXRhLCBGRFRfVEFHQUxJR04ob2xkbGVuKSwKKwkJCQkgICAgICBGRFRfVEFHQUxJR04obGVuKSkpKQogCQlyZXR1cm4gZXJyOwogCiAJKCpwcm9wKS0+bGVuID0gY3B1X3RvX2ZkdDMyKGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2FkZF9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAotCQkJIHN0cnVjdCBmZHRfcHJvcGVydHkgKipwcm9wKQorc3RhdGljIGludCBfZmR0X2FkZF9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgZmR0X3Byb3BlcnR5ICoqcHJvcCkKIHsKLQl1aW50MzJfdCB0YWc7CiAJaW50IHByb3BsZW47CiAJaW50IG5leHRvZmZzZXQ7CiAJaW50IG5hbWVzdHJvZmY7CiAJaW50IGVycjsKIAotCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG5vZGVvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOworCWlmICgobmV4dG9mZnNldCA9IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoZmR0LCBub2Rlb2Zmc2V0KSkgPCAwKQorCQlyZXR1cm4gbmV4dG9mZnNldDsKIAotCW5hbWVzdHJvZmYgPSBfZmluZF9hZGRfc3RyaW5nKGZkdCwgbmFtZSk7CisJbmFtZXN0cm9mZiA9IF9mZHRfZmluZF9hZGRfc3RyaW5nKGZkdCwgbmFtZSk7CiAJaWYgKG5hbWVzdHJvZmYgPCAwKQogCQlyZXR1cm4gbmFtZXN0cm9mZjsKIAogCSpwcm9wID0gX2ZkdF9vZmZzZXRfcHRyX3coZmR0LCBuZXh0b2Zmc2V0KTsKLQlwcm9wbGVuID0gc2l6ZW9mKCoqcHJvcCkgKyBBTElHTihsZW4sIEZEVF9UQUdTSVpFKTsKKwlwcm9wbGVuID0gc2l6ZW9mKCoqcHJvcCkgKyBGRFRfVEFHQUxJR04obGVuKTsKIAotCWVyciA9IF9ibG9iX3NwbGljZV9zdHJ1Y3QoZmR0LCAqcHJvcCwgMCwgcHJvcGxlbik7CisJZXJyID0gX2ZkdF9zcGxpY2Vfc3RydWN0KGZkdCwgKnByb3AsIDAsIHByb3BsZW4pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI1MiwxOCArMjQ4LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBmZHRfc2V0X25hbWUodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICpuYW1lcDsKKwlpbnQgb2xkbGVuLCBuZXdsZW47CisJaW50IGVycjsKKworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKKworCW5hbWVwID0gKGNoYXIgKikodWludHB0cl90KWZkdF9nZXRfbmFtZShmZHQsIG5vZGVvZmZzZXQsICZvbGRsZW4pOworCWlmICghbmFtZXApCisJCXJldHVybiBvbGRsZW47CisKKwluZXdsZW4gPSBzdHJsZW4obmFtZSk7CisKKwllcnIgPSBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBuYW1lcCwgRkRUX1RBR0FMSUdOKG9sZGxlbisxKSwKKwkJCQkgRkRUX1RBR0FMSUdOKG5ld2xlbisxKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbWNweShuYW1lcCwgbmFtZSwgbmV3bGVuKzEpOworCXJldHVybiAwOworfQorCiBpbnQgZmR0X3NldHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqdmFsLCBpbnQgbGVuKQogewogCXN0cnVjdCBmZHRfcHJvcGVydHkgKnByb3A7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCkpKQotCQlyZXR1cm4gZXJyOworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKIAotCWVyciA9IF9yZXNpemVfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKKwllcnIgPSBfZmR0X3Jlc2l6ZV9wcm9wZXJ0eShmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbiwgJnByb3ApOwogCWlmIChlcnIgPT0gLUZEVF9FUlJfTk9URk9VTkQpCi0JCWVyciA9IF9hZGRfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKKwkJZXJyID0gX2ZkdF9hZGRfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNzYsMTQgKzI5NCwxNCBAQAogCXN0cnVjdCBmZHRfcHJvcGVydHkgKnByb3A7CiAJaW50IGxlbiwgcHJvcGxlbjsKIAotCVJXX0NIRUNLX0hFQURFUihmZHQpOworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKIAogCXByb3AgPSBmZHRfZ2V0X3Byb3BlcnR5X3coZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCAmbGVuKTsKIAlpZiAoISBwcm9wKQogCQlyZXR1cm4gbGVuOwogCi0JcHJvcGxlbiA9IHNpemVvZigqcHJvcCkgKyBBTElHTihsZW4sIEZEVF9UQUdTSVpFKTsKLQlyZXR1cm4gX2Jsb2Jfc3BsaWNlX3N0cnVjdChmZHQsIHByb3AsIHByb3BsZW4sIDApOworCXByb3BsZW4gPSBzaXplb2YoKnByb3ApICsgRkRUX1RBR0FMSUdOKGxlbik7CisJcmV0dXJuIF9mZHRfc3BsaWNlX3N0cnVjdChmZHQsIHByb3AsIHByb3BsZW4sIDApOwogfQogCiBpbnQgZmR0X2FkZF9zdWJub2RlX25hbWVsZW4odm9pZCAqZmR0LCBpbnQgcGFyZW50b2Zmc2V0LApAQCAtMjk2LDcgKzMxNCw3IEBACiAJdWludDMyX3QgdGFnOwogCXVpbnQzMl90ICplbmR0YWc7CiAKLQlSV19DSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlvZmZzZXQgPSBmZHRfc3Vibm9kZV9vZmZzZXRfbmFtZWxlbihmZHQsIHBhcmVudG9mZnNldCwgbmFtZSwgbmFtZWxlbik7CiAJaWYgKG9mZnNldCA+PSAwKQpAQCAtMzA5LDE5ICszMjcsMTkgQEAKIAlkbyB7CiAJCW9mZnNldCA9IG5leHRvZmZzZXQ7CiAJCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm5leHRvZmZzZXQpOwotCX0gd2hpbGUgKHRhZyA9PSBGRFRfUFJPUCk7CisJfSB3aGlsZSAoKHRhZyA9PSBGRFRfUFJPUCkgfHwgKHRhZyA9PSBGRFRfTk9QKSk7CiAKIAluaCA9IF9mZHRfb2Zmc2V0X3B0cl93KGZkdCwgb2Zmc2V0KTsKLQlub2RlbGVuID0gc2l6ZW9mKCpuaCkgKyBBTElHTihuYW1lbGVuKzEsIEZEVF9UQUdTSVpFKSArIEZEVF9UQUdTSVpFOworCW5vZGVsZW4gPSBzaXplb2YoKm5oKSArIEZEVF9UQUdBTElHTihuYW1lbGVuKzEpICsgRkRUX1RBR1NJWkU7CiAKLQllcnIgPSBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgbmgsIDAsIG5vZGVsZW4pOworCWVyciA9IF9mZHRfc3BsaWNlX3N0cnVjdChmZHQsIG5oLCAwLCBub2RlbGVuKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJbmgtPnRhZyA9IGNwdV90b19mZHQzMihGRFRfQkVHSU5fTk9ERSk7Ci0JbWVtc2V0KG5oLT5uYW1lLCAwLCBBTElHTihuYW1lbGVuKzEsIEZEVF9UQUdTSVpFKSk7CisJbWVtc2V0KG5oLT5uYW1lLCAwLCBGRFRfVEFHQUxJR04obmFtZWxlbisxKSk7CiAJbWVtY3B5KG5oLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQllbmR0YWcgPSAodWludDMyX3QgKikoKHZvaWQgKiluaCArIG5vZGVsZW4gLSBGRFRfVEFHU0laRSk7CisJZW5kdGFnID0gKHVpbnQzMl90ICopKChjaGFyICopbmggKyBub2RlbGVuIC0gRkRUX1RBR1NJWkUpOwogCSplbmR0YWcgPSBjcHVfdG9fZmR0MzIoRkRUX0VORF9OT0RFKTsKIAogCXJldHVybiBvZmZzZXQ7CkBAIC0zMzYsMzYgKzM1NCwzNiBAQAogewogCWludCBlbmRvZmZzZXQ7CiAKLQlSV19DSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAllbmRvZmZzZXQgPSBfZmR0X25vZGVfZW5kX29mZnNldChmZHQsIG5vZGVvZmZzZXQpOwogCWlmIChlbmRvZmZzZXQgPCAwKQogCQlyZXR1cm4gZW5kb2Zmc2V0OwogCi0JcmV0dXJuIF9ibG9iX3NwbGljZV9zdHJ1Y3QoZmR0LCBfZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQpLAotCQkJCSAgIGVuZG9mZnNldCAtIG5vZGVvZmZzZXQsIDApOworCXJldHVybiBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBfZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQpLAorCQkJCSAgZW5kb2Zmc2V0IC0gbm9kZW9mZnNldCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9wYWNrYmxvY2tzKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLAotCQkgICAgICAgaW50IG1lbV9yc3Zfc2l6ZSwgaW50IHN0cnVjdF9zaXplKQorc3RhdGljIHZvaWQgX2ZkdF9wYWNrYmxvY2tzKGNvbnN0IGNoYXIgKm9sZCwgY2hhciAqbmV3LAorCQkJICAgIGludCBtZW1fcnN2X3NpemUsIGludCBzdHJ1Y3Rfc2l6ZSkKIHsKIAlpbnQgbWVtX3Jzdl9vZmYsIHN0cnVjdF9vZmYsIHN0cmluZ3Nfb2ZmOwogCi0JbWVtX3Jzdl9vZmYgPSBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KTsKKwltZW1fcnN2X29mZiA9IEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KTsKIAlzdHJ1Y3Rfb2ZmID0gbWVtX3Jzdl9vZmYgKyBtZW1fcnN2X3NpemU7CiAJc3RyaW5nc19vZmYgPSBzdHJ1Y3Rfb2ZmICsgc3RydWN0X3NpemU7CiAKLQltZW1tb3ZlKGJ1ZiArIG1lbV9yc3Zfb2ZmLCBmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KSwgbWVtX3Jzdl9zaXplKTsKLQlmZHRfc2V0X29mZl9tZW1fcnN2bWFwKGJ1ZiwgbWVtX3Jzdl9vZmYpOworCW1lbW1vdmUobmV3ICsgbWVtX3Jzdl9vZmYsIG9sZCArIGZkdF9vZmZfbWVtX3Jzdm1hcChvbGQpLCBtZW1fcnN2X3NpemUpOworCWZkdF9zZXRfb2ZmX21lbV9yc3ZtYXAobmV3LCBtZW1fcnN2X29mZik7CiAKLQltZW1tb3ZlKGJ1ZiArIHN0cnVjdF9vZmYsIGZkdCArIGZkdF9vZmZfZHRfc3RydWN0KGZkdCksIHN0cnVjdF9zaXplKTsKLQlmZHRfc2V0X29mZl9kdF9zdHJ1Y3QoYnVmLCBzdHJ1Y3Rfb2ZmKTsKLQlmZHRfc2V0X3NpemVfZHRfc3RydWN0KGJ1Ziwgc3RydWN0X3NpemUpOworCW1lbW1vdmUobmV3ICsgc3RydWN0X29mZiwgb2xkICsgZmR0X29mZl9kdF9zdHJ1Y3Qob2xkKSwgc3RydWN0X3NpemUpOworCWZkdF9zZXRfb2ZmX2R0X3N0cnVjdChuZXcsIHN0cnVjdF9vZmYpOworCWZkdF9zZXRfc2l6ZV9kdF9zdHJ1Y3QobmV3LCBzdHJ1Y3Rfc2l6ZSk7CiAKLQltZW1tb3ZlKGJ1ZiArIHN0cmluZ3Nfb2ZmLCBmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSwKLQkJZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpKTsKLQlmZHRfc2V0X29mZl9kdF9zdHJpbmdzKGJ1Ziwgc3RyaW5nc19vZmYpOwotCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKGJ1ZiwgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpKTsKKwltZW1tb3ZlKG5ldyArIHN0cmluZ3Nfb2ZmLCBvbGQgKyBmZHRfb2ZmX2R0X3N0cmluZ3Mob2xkKSwKKwkJZmR0X3NpemVfZHRfc3RyaW5ncyhvbGQpKTsKKwlmZHRfc2V0X29mZl9kdF9zdHJpbmdzKG5ldywgc3RyaW5nc19vZmYpOworCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKG5ldywgZmR0X3NpemVfZHRfc3RyaW5ncyhvbGQpKTsKIH0KIAogaW50IGZkdF9vcGVuX2ludG8oY29uc3Qgdm9pZCAqZmR0LCB2b2lkICpidWYsIGludCBidWZzaXplKQpAQCAtMzczLDExICszOTEsMTEgQEAKIAlpbnQgZXJyOwogCWludCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplOwogCWludCBuZXdzaXplOwotCXZvaWQgKnRtcDsKKwljb25zdCBjaGFyICpmZHRzdGFydCA9IGZkdDsKKwljb25zdCBjaGFyICpmZHRlbmQgPSBmZHRzdGFydCArIGZkdF90b3RhbHNpemUoZmR0KTsKKwljaGFyICp0bXA7CiAKLQllcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAltZW1fcnN2X3NpemUgPSAoZmR0X251bV9tZW1fcnN2KGZkdCkrMSkKIAkJKiBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KTsKQEAgLTM5MCw3ICs0MDgsNyBAQAogCQkJOwogCX0KIAotCWlmICghX2Jsb2Nrc19taXNvcmRlcmVkKGZkdCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSkpIHsKKwlpZiAoIV9mZHRfYmxvY2tzX21pc29yZGVyZWQoZmR0LCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplKSkgewogCQkvKiBubyBmdXJ0aGVyIHdvcmsgbmVjZXNzYXJ5ICovCiAJCWVyciA9IGZkdF9tb3ZlKGZkdCwgYnVmLCBidWZzaXplKTsKIAkJaWYgKGVycikKQEAgLTQwMiwyMiArNDIwLDIzIEBACiAJfQogCiAJLyogTmVlZCB0byByZW9yZGVyICovCi0JbmV3c2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksIDgpICsgbWVtX3Jzdl9zaXplCisJbmV3c2l6ZSA9IEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSArIG1lbV9yc3Zfc2l6ZQogCQkrIHN0cnVjdF9zaXplICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogCiAJaWYgKGJ1ZnNpemUgPCBuZXdzaXplKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIAotCWlmICgoKGJ1ZiArIG5ld3NpemUpIDw9IGZkdCkKLQkgICAgfHwgKGJ1ZiA+PSAoZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpKSkpIHsKLQkJdG1wID0gYnVmOwotCX0gZWxzZSB7Ci0JCXRtcCA9ICh2b2lkICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpOwotCQlpZiAoKHRtcCArIG5ld3NpemUpID4gKGJ1ZiArIGJ1ZnNpemUpKQorCS8qIEZpcnN0IGF0dGVtcHQgdG8gYnVpbGQgY29udmVydGVkIHRyZWUgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLworCXRtcCA9IGJ1ZjsKKwkvKiBCdXQgaWYgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBvbGQgdHJlZS4uLiAqLworCWlmICgoKHRtcCArIG5ld3NpemUpID4gZmR0c3RhcnQpICYmICh0bXAgPCBmZHRlbmQpKSB7CisJCS8qIFRyeSByaWdodCBhZnRlciB0aGUgb2xkIHRyZWUgaW5zdGVhZCAqLworCQl0bXAgPSAoY2hhciAqKSh1aW50cHRyX3QpZmR0ZW5kOworCQlpZiAoKHRtcCArIG5ld3NpemUpID4gKChjaGFyICopYnVmICsgYnVmc2l6ZSkpCiAJCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIAl9CiAKLQlfcGFja2Jsb2NrcyhmZHQsIHRtcCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSk7CisJX2ZkdF9wYWNrYmxvY2tzKGZkdCwgdG1wLCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplKTsKIAltZW1tb3ZlKGJ1ZiwgdG1wLCBuZXdzaXplKTsKIAogCWZkdF9zZXRfbWFnaWMoYnVmLCBGRFRfTUFHSUMpOwpAQCAtNDMyLDE2ICs0NTEsMTMgQEAKIGludCBmZHRfcGFjayh2b2lkICpmZHQpCiB7CiAJaW50IG1lbV9yc3Zfc2l6ZTsKLQlpbnQgZXJyOwogCi0JZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAltZW1fcnN2X3NpemUgPSAoZmR0X251bV9tZW1fcnN2KGZkdCkrMSkKIAkJKiBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KTsKLQlfcGFja2Jsb2NrcyhmZHQsIGZkdCwgbWVtX3Jzdl9zaXplLCBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSk7Ci0JZmR0X3NldF90b3RhbHNpemUoZmR0LCBfYmxvYl9kYXRhX3NpemUoZmR0KSk7CisJX2ZkdF9wYWNrYmxvY2tzKGZkdCwgZmR0LCBtZW1fcnN2X3NpemUsIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKTsKKwlmZHRfc2V0X3RvdGFsc2l6ZShmZHQsIF9mZHRfZGF0YV9zaXplKGZkdCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N0cmVycm9yLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N0cmVycm9yLmMKaW5kZXggZjlkMzJlZi4uZTZjM2NlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdHJlcnJvci5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3RyZXJyb3IuYwpAQCAtNTUsMjkgKzU1LDI5IEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotc3RydWN0IGVycnRhYmVudCB7CitzdHJ1Y3QgZmR0X2VycnRhYmVudCB7CiAJY29uc3QgY2hhciAqc3RyOwogfTsKIAotI2RlZmluZSBFUlJUQUJFTlQodmFsKSBcCisjZGVmaW5lIEZEVF9FUlJUQUJFTlQodmFsKSBcCiAJWyh2YWwpXSA9IHsgLnN0ciA9ICN2YWwsIH0KIAotc3RhdGljIHN0cnVjdCBlcnJ0YWJlbnQgZXJydGFibGVbXSA9IHsKLQlFUlJUQUJFTlQoRkRUX0VSUl9OT1RGT1VORCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfRVhJU1RTKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9OT1NQQUNFKSwKK3N0YXRpYyBzdHJ1Y3QgZmR0X2VycnRhYmVudCBmZHRfZXJydGFibGVbXSA9IHsKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfTk9URk9VTkQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9FWElTVFMpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9OT1NQQUNFKSwKIAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRE9GRlNFVCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEUEFUSCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RBVEUpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURPRkZTRVQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURQQVRIKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RBVEUpLAogCi0JRVJSVEFCRU5UKEZEVF9FUlJfVFJVTkNBVEVEKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9CQURNQUdJQyksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEVkVSU0lPTiksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RSVUNUVVJFKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9CQURMQVlPVVQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9UUlVOQ0FURUQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURNQUdJQyksCisJRkRUX0VSUlRBQkVOVChGRFRfRVJSX0JBRFZFUlNJT04pLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURTVFJVQ1RVUkUpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURMQVlPVVQpLAogfTsKLSNkZWZpbmUgRVJSVEFCU0laRQkoc2l6ZW9mKGVycnRhYmxlKSAvIHNpemVvZihlcnJ0YWJsZVswXSkpCisjZGVmaW5lIEZEVF9FUlJUQUJTSVpFCShzaXplb2YoZmR0X2VycnRhYmxlKSAvIHNpemVvZihmZHRfZXJydGFibGVbMF0pKQogCiBjb25zdCBjaGFyICpmZHRfc3RyZXJyb3IoaW50IGVycnZhbCkKIHsKQEAgLTg1LDggKzg1LDggQEAKIAkJcmV0dXJuICI8dmFsaWQgb2Zmc2V0L2xlbmd0aD4iOwogCWVsc2UgaWYgKGVycnZhbCA9PSAwKQogCQlyZXR1cm4gIjxubyBlcnJvcj4iOwotCWVsc2UgaWYgKGVycnZhbCA+IC1FUlJUQUJTSVpFKSB7Ci0JCWNvbnN0IGNoYXIgKnMgPSBlcnJ0YWJsZVstZXJydmFsXS5zdHI7CisJZWxzZSBpZiAoZXJydmFsID4gLUZEVF9FUlJUQUJTSVpFKSB7CisJCWNvbnN0IGNoYXIgKnMgPSBmZHRfZXJydGFibGVbLWVycnZhbF0uc3RyOwogCiAJCWlmIChzKQogCQkJcmV0dXJuIHM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N3LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N3LmMKaW5kZXggZGRhMmRlMy4uNjk4MzI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdy5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3cuYwpAQCAtNTUsMTQgKzU1LDIyIEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotc3RhdGljIGludCBjaGVja19oZWFkZXJfc3codm9pZCAqZmR0KQorc3RhdGljIGludCBfZmR0X3N3X2NoZWNrX2hlYWRlcih2b2lkICpmZHQpCiB7Ci0JaWYgKGZkdF9tYWdpYyhmZHQpICE9IFNXX01BR0lDKQorCWlmIChmZHRfbWFnaWMoZmR0KSAhPSBGRFRfU1dfTUFHSUMpCiAJCXJldHVybiAtRkRUX0VSUl9CQURNQUdJQzsKKwkvKiBGSVhNRTogc2hvdWxkIGNoZWNrIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaGVhZGVyIHN0YXRlICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICpncmFiX3NwYWNlKHZvaWQgKmZkdCwgaW50IGxlbikKKyNkZWZpbmUgRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpIFwKKwl7IFwKKwkJaW50IGVycjsgXAorCQlpZiAoKGVyciA9IF9mZHRfc3dfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKKwkJCXJldHVybiBlcnI7IFwKKwl9CisKK3N0YXRpYyB2b2lkICpfZmR0X2dyYWJfc3BhY2Uodm9pZCAqZmR0LCBpbnQgbGVuKQogewogCWludCBvZmZzZXQgPSBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KTsKIAlpbnQgc3BhY2VsZWZ0OwpAQCAtODYsMTMgKzk0LDEzIEBACiAKIAltZW1zZXQoYnVmLCAwLCBidWZzaXplKTsKIAotCWZkdF9zZXRfbWFnaWMoZmR0LCBTV19NQUdJQyk7CisJZmR0X3NldF9tYWdpYyhmZHQsIEZEVF9TV19NQUdJQyk7CiAJZmR0X3NldF92ZXJzaW9uKGZkdCwgRkRUX0xBU1RfU1VQUE9SVEVEX1ZFUlNJT04pOwogCWZkdF9zZXRfbGFzdF9jb21wX3ZlcnNpb24oZmR0LCBGRFRfRklSU1RfU1VQUE9SVEVEX1ZFUlNJT04pOwogCWZkdF9zZXRfdG90YWxzaXplKGZkdCwgIGJ1ZnNpemUpOwogCi0JZmR0X3NldF9vZmZfbWVtX3Jzdm1hcChmZHQsIEFMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSkpKTsKKwlmZHRfc2V0X29mZl9tZW1fcnN2bWFwKGZkdCwgRkRUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpKSk7CiAJZmR0X3NldF9vZmZfZHRfc3RydWN0KGZkdCwgZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkpOwogCWZkdF9zZXRfb2ZmX2R0X3N0cmluZ3MoZmR0LCBidWZzaXplKTsKIApAQCAtMTAyLDExICsxMTAsMTAgQEAKIGludCBmZHRfYWRkX3Jlc2VydmVtYXBfZW50cnkodm9pZCAqZmR0LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBzaXplKQogewogCXN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcmU7Ci0JaW50IGVyciA9IGNoZWNrX2hlYWRlcl9zdyhmZHQpOwogCWludCBvZmZzZXQ7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCUZEVF9TV19DSEVDS19IRUFERVIoZmR0KTsKKwogCWlmIChmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSkKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUQVRFOwogCkBAIC0xMTQsNyArMTIxLDcgQEAKIAlpZiAoKG9mZnNldCArIHNpemVvZigqcmUpKSA+IGZkdF90b3RhbHNpemUoZmR0KSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAKLQlyZSA9IChzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKikoZmR0ICsgb2Zmc2V0KTsKKwlyZSA9IChzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKikoKGNoYXIgKilmZHQgKyBvZmZzZXQpOwogCXJlLT5hZGRyZXNzID0gY3B1X3RvX2ZkdDY0KGFkZHIpOwogCXJlLT5zaXplID0gY3B1X3RvX2ZkdDY0KHNpemUpOwogCkBAIC0xMzEsMTMgKzEzOCwxMSBAQAogaW50IGZkdF9iZWdpbl9ub2RlKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaDsKLQlpbnQgZXJyID0gY2hlY2tfaGVhZGVyX3N3KGZkdCk7CiAJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwogCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfU1dfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKLQluaCA9IGdyYWJfc3BhY2UoZmR0LCBzaXplb2YoKm5oKSArIEFMSUdOKG5hbWVsZW4sIEZEVF9UQUdTSVpFKSk7CisJbmggPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKm5oKSArIEZEVF9UQUdBTElHTihuYW1lbGVuKSk7CiAJaWYgKCEgbmgpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCkBAIC0xNDksMTIgKzE1NCwxMCBAQAogaW50IGZkdF9lbmRfbm9kZSh2b2lkICpmZHQpCiB7CiAJdWludDMyX3QgKmVuOwotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCi0JZW4gPSBncmFiX3NwYWNlKGZkdCwgRkRUX1RBR1NJWkUpOworCWVuID0gX2ZkdF9ncmFiX3NwYWNlKGZkdCwgRkRUX1RBR1NJWkUpOwogCWlmICghIGVuKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIApAQCAtMTYyLDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQgX2ZkdF9maW5kX2FkZF9zdHJpbmcodm9pZCAqZmR0LCBjb25zdCBjaGFyICpzKQogewogCWNoYXIgKnN0cnRhYiA9IChjaGFyICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpOwogCWNvbnN0IGNoYXIgKnA7CkBAIC0xODgsMTcgKzE5MSwxNSBAQAogaW50IGZkdF9wcm9wZXJ0eSh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgZmR0X3Byb3BlcnR5ICpwcm9wOwotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAlpbnQgbmFtZW9mZjsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCi0JbmFtZW9mZiA9IGZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOworCW5hbWVvZmYgPSBfZmR0X2ZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOwogCWlmIChuYW1lb2ZmID09IDApCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCi0JcHJvcCA9IGdyYWJfc3BhY2UoZmR0LCBzaXplb2YoKnByb3ApICsgQUxJR04obGVuLCBGRFRfVEFHU0laRSkpOworCXByb3AgPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKnByb3ApICsgRkRUX1RBR0FMSUdOKGxlbikpOwogCWlmICghIHByb3ApCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCkBAIC0yMTEsMTggKzIxMiwxNiBAQAogCiBpbnQgZmR0X2ZpbmlzaCh2b2lkICpmZHQpCiB7Ci0JaW50IGVyciA9IGNoZWNrX2hlYWRlcl9zdyhmZHQpOwogCWNoYXIgKnAgPSAoY2hhciAqKWZkdDsKIAl1aW50MzJfdCAqZW5kOwogCWludCBvbGRzdHJvZmZzZXQsIG5ld3N0cm9mZnNldDsKIAl1aW50MzJfdCB0YWc7CiAJaW50IG9mZnNldCwgbmV4dG9mZnNldDsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJLyogQWRkIHRlcm1pbmF0b3IgKi8KLQllbmQgPSBncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCplbmQpKTsKKwllbmQgPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKmVuZCkpOwogCWlmICghIGVuZCkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAJKmVuZCA9IGNwdV90b19mZHQzMihGRFRfRU5EKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfd2lwLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3dpcC5jCmluZGV4IDg4ZTI0YjguLmE0NjUyYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfd2lwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF93aXAuYwpAQCAtNzIsMTEgKzcyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5vcF9yZWdpb24odm9pZCAqc3RhcnQsIGludCBsZW4pCitzdGF0aWMgdm9pZCBfZmR0X25vcF9yZWdpb24odm9pZCAqc3RhcnQsIGludCBsZW4pCiB7CiAJdWludDMyX3QgKnA7CiAKLQlmb3IgKHAgPSBzdGFydDsgKHZvaWQgKilwIDwgKHN0YXJ0ICsgbGVuKTsgcCsrKQorCWZvciAocCA9IHN0YXJ0OyAoY2hhciAqKXAgPCAoKGNoYXIgKilzdGFydCArIGxlbik7IHArKykKIAkJKnAgPSBjcHVfdG9fZmR0MzIoRkRUX05PUCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAKIAlpZiAoISBwcm9wKQogCQlyZXR1cm4gbGVuOwogCi0Jbm9wX3JlZ2lvbihwcm9wLCBsZW4gKyBzaXplb2YoKnByb3ApKTsKKwlfZmR0X25vcF9yZWdpb24ocHJvcCwgbGVuICsgc2l6ZW9mKCpwcm9wKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzOSw2ICsxMzksNyBAQAogCWlmIChlbmRvZmZzZXQgPCAwKQogCQlyZXR1cm4gZW5kb2Zmc2V0OwogCi0Jbm9wX3JlZ2lvbihmZHRfb2Zmc2V0X3B0cl93KGZkdCwgbm9kZW9mZnNldCwgMCksIGVuZG9mZnNldCAtIG5vZGVvZmZzZXQpOworCV9mZHRfbm9wX3JlZ2lvbihmZHRfb2Zmc2V0X3B0cl93KGZkdCwgbm9kZW9mZnNldCwgMCksCisJCQllbmRvZmZzZXQgLSBub2Rlb2Zmc2V0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHQuaCBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHQuaAppbmRleCA2YjJmYjkyLi5jZTgwZTRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdC5oCkBAIC0xMjUsMTIgKzEyNSwxOCBAQAogY29uc3Qgdm9pZCAqZmR0X29mZnNldF9wdHIoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgY2hlY2tsZW4pOwogc3RhdGljIGlubGluZSB2b2lkICpmZHRfb2Zmc2V0X3B0cl93KHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50IGNoZWNrbGVuKQogewotCXJldHVybiAodm9pZCAqKWZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0LCBjaGVja2xlbik7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClmZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCwgY2hlY2tsZW4pOwogfQogCiB1aW50MzJfdCBmZHRfbmV4dF90YWcoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgKm5leHRvZmZzZXQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRyYXZlcnNhbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBmZHRfbmV4dF9ub2RlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50ICpkZXB0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogR2VuZXJhbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjA3LDcgKzIxMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCi0gKiBmZHRfc3RyaW5nIC0gcmV0cmVpdmUgYSBzdHJpbmcgZnJvbSB0aGUgc3RyaW5ncyBibG9jayBvZiBhIGRldmljZSB0cmVlCisgKiBmZHRfc3RyaW5nIC0gcmV0cmlldmUgYSBzdHJpbmcgZnJvbSB0aGUgc3RyaW5ncyBibG9jayBvZiBhIGRldmljZSB0cmVlCiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAc3Ryb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIHN0cmluZyB3aXRoaW4gdGhlIHN0cmluZ3MgYmxvY2sgKG5hdGl2ZSBlbmRpYW4pCiAgKgpAQCAtMjIxLDcgKzIyNyw3IEBACiBjb25zdCBjaGFyICpmZHRfc3RyaW5nKGNvbnN0IHZvaWQgKmZkdCwgaW50IHN0cm9mZnNldCk7CiAKIC8qKgotICogZmR0X251bV9tZW1fcnN2IC0gcmV0cmVpdmUgdGhlIG51bWJlciBvZiBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cmllcworICogZmR0X251bV9tZW1fcnN2IC0gcmV0cmlldmUgdGhlIG51bWJlciBvZiBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cmllcwogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXZpY2UgdHJlZSBibG9iJ3MgbWVtb3J5CkBAIC0yMzQsNyArMjQwLDcgQEAKIGludCBmZHRfbnVtX21lbV9yc3YoY29uc3Qgdm9pZCAqZmR0KTsKIAogLyoqCi0gKiBmZHRfZ2V0X21lbV9yc3YgLSByZXRyZWl2ZSBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CisgKiBmZHRfZ2V0X21lbV9yc3YgLSByZXRyaWV2ZSBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAYWRkcmVzcywgQHNpemU6IHBvaW50ZXJzIHRvIDY0LWJpdCB2YXJpYWJsZXMKICAqCkBAIC0zMTQsNyArMzIwLDcgQEAKIGludCBmZHRfcGF0aF9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoKTsKIAogLyoqCi0gKiBmZHRfZ2V0X25hbWUgLSByZXRyZWl2ZSB0aGUgbmFtZSBvZiBhIGdpdmVuIG5vZGUKKyAqIGZkdF9nZXRfbmFtZSAtIHJldHJpZXZlIHRoZSBuYW1lIG9mIGEgZ2l2ZW4gbm9kZQogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQG5vZGVvZmZzZXQ6IHN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgdGhlIHN0YXJ0aW5nIG5vZGUKICAqIEBsZW5wOiBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgKHdpbGwgYmUgb3ZlcndyaXR0ZW4pIG9yIE5VTEwKQEAgLTM0Niw3ICszNTIsNyBAQAogICogZmR0X2dldF9wcm9wZXJ0eSgpIHJldHJpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIGZkdF9wcm9wZXJ0eQogICogc3RydWN0dXJlIHdpdGhpbiB0aGUgZGV2aWNlIHRyZWUgYmxvYiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eQogICogbmFtZWQgJ25hbWUnIG9mIHRoZSBub2RlIGF0IG9mZnNldCBub2Rlb2Zmc2V0LiAgSWYgbGVucCBpcwotICogbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGFsc28gcmV0dXJuZWQsIGluIHRoZQorICogbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGFsc28gcmV0dXJuZWQsIGluIHRoZQogICogaW50ZWdlciBwb2ludGVkIHRvIGJ5IGxlbnAuCiAgKgogICogcmV0dXJuczoKQEAgLTM2OSw4ICszNzUsOCBAQAogCQkJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCSAgICAgIGludCAqbGVucCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBmZHRfcHJvcGVydHkgKilmZHRfZ2V0X3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwKLQkJCQkJCSAgICAgICBuYW1lLCBsZW5wKTsKKwlyZXR1cm4gKHN0cnVjdCBmZHRfcHJvcGVydHkgKikodWludHB0cl90KQorCQlmZHRfZ2V0X3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVucCk7CiB9CiAKIC8qKgpAQCAtMzgzLDcgKzM4OSw3IEBACiAgKiBmZHRfZ2V0cHJvcCgpIHJldHJpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQogICogbmFtZWQgJ25hbWUnIG9mIHRoZSBub2RlIGF0IG9mZnNldCBub2Rlb2Zmc2V0ICh0aGlzIHdpbGwgYmUgYQogICogcG9pbnRlciB0byB3aXRoaW4gdGhlIGRldmljZSBibG9iIGl0c2VsZiwgbm90IGEgY29weSBvZiB0aGUgdmFsdWUpLgotICogSWYgbGVucCBpcyBub24tTlVMTCwgdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUgYWxzbworICogSWYgbGVucCBpcyBub24tTlVMTCwgdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYWxzbwogICogcmV0dXJuZWQsIGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgbGVucC4KICAqCiAgKiByZXR1cm5zOgpAQCAtNDA1LDExICs0MTEsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZmR0X2dldHByb3Bfdyh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgaW50ICpsZW5wKQogewotCXJldHVybiAodm9pZCAqKWZkdF9nZXRwcm9wKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVucCk7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClmZHRfZ2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbnApOwogfQogCiAvKioKLSAqIGZkdF9nZXRfcGhhbmRsZSAtIHJldHJlaXZlIHRoZSBwaGFuZGxlIG9mIGEgZ2l2ZW4gbm9kZQorICogZmR0X2dldF9waGFuZGxlIC0gcmV0cmlldmUgdGhlIHBoYW5kbGUgb2YgYSBnaXZlbiBub2RlCiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAbm9kZW9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgbm9kZQogICoKQEAgLTQxNyw3ICs0MjMsNyBAQAogICogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBub2Rlb2Zmc2V0LgogICoKICAqIHJldHVybnM6Ci0gKgl0aGUgcGhhbmRsZSBvZiB0aGUgbm9kZSBhdCBub2Rlb2Zmc2V0LCBvbiBzdWNjZXMgKCE9IDAsICE9IC0xKQorICoJdGhlIHBoYW5kbGUgb2YgdGhlIG5vZGUgYXQgbm9kZW9mZnNldCwgb24gc3VjY2VzcyAoIT0gMCwgIT0gLTEpCiAgKgkwLCBpZiB0aGUgbm9kZSBoYXMgbm8gcGhhbmRsZSwgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMKICAqLwogdWludDMyX3QgZmR0X2dldF9waGFuZGxlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpOwpAQCAtNTE2LDcgKzUyMiw3IEBACiAgKiBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3RhcnQgdG8gbm9kZW9mZnNldCwgKnR3aWNlKi4KICAqCiAgKiByZXR1cm5zOgotICoJc3R1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIHRoZSBwYXJlbnQgb2YgdGhlIG5vZGUgYXQgbm9kZW9mZnNldAorICoJc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgcGFyZW50IG9mIHRoZSBub2RlIGF0IG5vZGVvZmZzZXQKICAqCQkoPj0wKSwgb24gc3VjY2VzcwogICogCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkb2VzIG5vdCByZWZlciB0byBhIEJFR0lOX05PREUgdGFnCiAgKgktRkRUX0VSUl9CQURNQUdJQywKQEAgLTU3Myw3ICs1NzksNyBAQAogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQHBoYW5kbGU6IHBoYW5kbGUgdmFsdWUKICAqCi0gKiBmZHRfbm9kZV9vZmZzZXRfYnlfcHJvcF92YWx1ZSgpIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbm9kZQorICogZmR0X25vZGVfb2Zmc2V0X2J5X3BoYW5kbGUoKSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIG5vZGUKICAqIHdoaWNoIGhhcyB0aGUgZ2l2ZW4gcGhhbmRsZSB2YWx1ZS4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbm9kZQogICogaW4gdGhlIHRyZWUgd2l0aCB0aGUgZ2l2ZW4gcGhhbmRsZSAoYW4gaW52YWxpZCB0cmVlKSwgcmVzdWx0cyBhcmUKICAqIHVuZGVmaW5lZC4KQEAgLTY1NSw4ICs2NjEsNjUgQEAKIC8qIFdyaXRlLWluLXBsYWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qKgorICogZmR0X3NldHByb3BfaW5wbGFjZSAtIGNoYW5nZSBhIHByb3BlcnR5J3MgdmFsdWUsIGJ1dCBub3QgaXRzIHNpemUKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAdmFsOiBwb2ludGVyIHRvIGRhdGEgdG8gcmVwbGFjZSB0aGUgcHJvcGVydHkgdmFsdWUgd2l0aAorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZQorICoKKyAqIGZkdF9zZXRwcm9wX2lucGxhY2UoKSByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgKiB0aGUgZGF0YSBpbiB2YWwsIG9mIGxlbmd0aCBsZW4uICBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBjaGFuZ2UgdGhlCisgKiBzaXplIG9mIGEgcHJvcGVydHksIGFuZCBzbyB3aWxsIG9ubHkgd29yayBpZiBsZW4gaXMgZXF1YWwgdG8gdGhlCisgKiBjdXJyZW50IGxlbmd0aCBvZiB0aGUgcHJvcGVydHkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsdGVyIG9ubHkgdGhlIGJ5dGVzIGluIHRoZSBibG9iIHdoaWNoIGNvbnRhaW4KKyAqIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSwgYW5kIHdpbGwgbm90IGFsdGVyIG9yIG1vdmUgYW55IG90aGVyIHBhcnQKKyAqIG9mIHRoZSB0cmVlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCBpZiBsZW4gaXMgbm90IGVxdWFsIHRvIHRoZSBwcm9wZXJ0eSdzIGN1cnJlbnQgbGVuZ3RoCisgKgktRkRUX0VSUl9OT1RGT1VORCwgbm9kZSBkb2VzIG5vdCBoYXZlIHRoZSBuYW1lZCBwcm9wZXJ0eQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9zZXRwcm9wX2lucGxhY2Uodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCWNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbik7CisKKy8qKgorICogZmR0X3NldHByb3BfaW5wbGFjZV9jZWxsIC0gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZS1jZWxsIHByb3BlcnR5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHdob3NlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQHZhbDogY2VsbCAoMzItYml0IGludGVnZXIpIHZhbHVlIHRvIHJlcGxhY2UgdGhlIHByb3BlcnR5IHdpdGgKKyAqCisgKiBmZHRfc2V0cHJvcF9pbnBsYWNlX2NlbGwoKSByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBwcm9wZXJ0eQorICogd2l0aCB0aGUgMzItYml0IGludGVnZXIgY2VsbCB2YWx1ZSBpbiB2YWwsIGNvbnZlcnRpbmcgdmFsIHRvCisgKiBiaWctZW5kaWFuIGlmIG5lY2Vzc2FyeS4gIFRoaXMgZnVuY3Rpb24gY2Fubm90IGNoYW5nZSB0aGUgc2l6ZSBvZiBhCisgKiBwcm9wZXJ0eSwgYW5kIHNvIHdpbGwgb25seSB3b3JrIGlmIHRoZSBwcm9wZXJ0eSBhbHJlYWR5IGV4aXN0cyBhbmQKKyAqIGhhcyBsZW5ndGggNC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgb25seSB0aGUgYnl0ZXMgaW4gdGhlIGJsb2Igd2hpY2ggY29udGFpbgorICogdGhlIGdpdmVuIHByb3BlcnR5IHZhbHVlLCBhbmQgd2lsbCBub3QgYWx0ZXIgb3IgbW92ZSBhbnkgb3RoZXIgcGFydAorICogb2YgdGhlIHRyZWUuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIGlmIHRoZSBwcm9wZXJ0eSdzIGxlbmd0aCBpcyBub3QgZXF1YWwgdG8gNAorICAqCS1GRFRfRVJSX05PVEZPVU5ELCBub2RlIGRvZXMgbm90IGhhdmUgdGhlIG5hbWVkIHByb3BlcnR5CisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBzdGF0aWMgaW5saW5lIGludCBmZHRfc2V0cHJvcF9pbnBsYWNlX2NlbGwodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwKIAkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgdmFsKQogewpAQCAtNjY0LDcgKzcyNyw1NCBAQAogCXJldHVybiBmZHRfc2V0cHJvcF9pbnBsYWNlKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgJnZhbCwgc2l6ZW9mKHZhbCkpOwogfQogCisvKioKKyAqIGZkdF9ub3BfcHJvcGVydHkgLSByZXBsYWNlIGEgcHJvcGVydHkgd2l0aCBub3AgdGFncworICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBub3AKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBub3AKKyAqCisgKiBmZHRfbm9wX3Byb3BlcnR5KCkgd2lsbCByZXBsYWNlIGEgZ2l2ZW4gcHJvcGVydHkncyByZXByZXNlbnRhdGlvbgorICogaW4gdGhlIGJsb2Igd2l0aCBGRFRfTk9QIHRhZ3MsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0IGZyb20gdGhlCisgKiB0cmVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHRlciBvbmx5IHRoZSBieXRlcyBpbiB0aGUgYmxvYiB3aGljaCBjb250YWluCisgKiB0aGUgcHJvcGVydHksIGFuZCB3aWxsIG5vdCBhbHRlciBvciBtb3ZlIGFueSBvdGhlciBwYXJ0IG9mIHRoZQorICogdHJlZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIG5vZGUgZG9lcyBub3QgaGF2ZSB0aGUgbmFtZWQgcHJvcGVydHkKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfbm9wX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIGZkdF9ub3Bfbm9kZSAtIHJlcGxhY2UgYSBub2RlIChzdWJ0cmVlKSB3aXRoIG5vcCB0YWdzCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHRvIG5vcAorICoKKyAqIGZkdF9ub3Bfbm9kZSgpIHdpbGwgcmVwbGFjZSBhIGdpdmVuIG5vZGUncyByZXByZXNlbnRhdGlvbiBpbiB0aGUKKyAqIGJsb2IsIGluY2x1ZGluZyBhbGwgaXRzIHN1Ym5vZGVzLCBpZiBhbnksIHdpdGggRkRUX05PUCB0YWdzLAorICogZWZmZWN0aXZlbHkgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgdHJlZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgb25seSB0aGUgYnl0ZXMgaW4gdGhlIGJsb2Igd2hpY2ggY29udGFpbgorICogdGhlIG5vZGUgYW5kIGl0cyBwcm9wZXJ0aWVzIGFuZCBzdWJub2RlcywgYW5kIHdpbGwgbm90IGFsdGVyIG9yCisgKiBtb3ZlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSB0cmVlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X25vcF9ub2RlKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY5MywyMyArODAzLDI2OCBAQAogaW50IGZkdF9vcGVuX2ludG8oY29uc3Qgdm9pZCAqZmR0LCB2b2lkICpidWYsIGludCBidWZzaXplKTsKIGludCBmZHRfcGFjayh2b2lkICpmZHQpOwogCisvKioKKyAqIGZkdF9hZGRfbWVtX3JzdiAtIGFkZCBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAYWRkcmVzcywgQHNpemU6IDY0LWJpdCB2YWx1ZXMgKG5hdGl2ZSBlbmRpYW4pCisgKgorICogQWRkcyBhIHJlc2VydmUgbWFwIGVudHJ5IHRvIHRoZSBnaXZlbiBibG9iIHJlc2VydmluZyBhIHJlZ2lvbiBhdAorICogYWRkcmVzcyBhZGRyZXNzIG9mIGxlbmd0aCBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgZGF0YSBpbnRvIHRoZSByZXNlcnZlIG1hcCBhbmQgd2lsbAorICogdGhlcmVmb3JlIGNoYW5nZSB0aGUgaW5kZXhlcyBvZiBzb21lIGVudHJpZXMgaW4gdGhlIHRhYmxlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUgYmxvYiB0bworICoJCWNvbnRhaW4gdGhlIG5ldyByZXNlcnZhdGlvbiBlbnRyeQorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfYWRkX21lbV9yc3Yodm9pZCAqZmR0LCB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBzaXplKTsKKworLyoqCisgKiBmZHRfZGVsX21lbV9yc3YgLSByZW1vdmUgYSBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cnkKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBuOiBlbnRyeSB0byByZW1vdmUKKyAqCisgKiBmZHRfZGVsX21lbV9yc3YoKSByZW1vdmVzIHRoZSBuLXRoIG1lbW9yeSByZXNlcnZlIG1hcCBlbnRyeSBmcm9tCisgKiB0aGUgYmxvYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVsZXRlIGRhdGEgZnJvbSB0aGUgcmVzZXJ2YXRpb24gdGFibGUgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIGluZGV4ZXMgb2Ygc29tZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIHRoZXJlIGlzIG5vIGVudHJ5IG9mIHRoZSBnaXZlbiBpbmRleCAoaS5lLiB0aGVyZQorICoJCWFyZSBsZXNzIHRoYW4gbisxIHJlc2VydmUgbWFwIGVudHJpZXMpCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9kZWxfbWVtX3Jzdih2b2lkICpmZHQsIGludCBuKTsKIAorLyoqCisgKiBmZHRfc2V0X25hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb2YgYSBnaXZlbiBub2RlCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiBhIG5vZGUKKyAqIEBuYW1lOiBuYW1lIHRvIGdpdmUgdGhlIG5vZGUKKyAqCisgKiBmZHRfc2V0X25hbWUoKSByZXBsYWNlcyB0aGUgbmFtZSAoaW5jbHVkaW5nIHVuaXQgYWRkcmVzcywgaWYgYW55KQorICogb2YgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLiAgTk9URTogdGhpcyBmdW5jdGlvbiBjYW4ndAorICogZWZmaWNpZW50bHkgY2hlY2sgaWYgdGhlIG5ldyBuYW1lIGlzIHVuaXF1ZSBhbW9uZ3N0IHRoZSBnaXZlbgorICogbm9kZSdzIHNpYmxpbmdzOyByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkCisgKiB3aXRoIGEgbmFtZSBlcXVhbCB0byBvbmUgb2YgdGhlIGdpdmVuIG5vZGUncyBzaWJsaW5ncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBpbnNlcnQgb3IgZGVsZXRlIGRhdGEgZnJvbSB0aGUgYmxvYiwgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIG9mZnNldHMgb2Ygc29tZSBleGlzdGluZyBub2Rlcy4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlIGJsb2IKKyAqCQl0byBjb250YWluIHRoZSBuZXcgbmFtZQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLworaW50IGZkdF9zZXRfbmFtZSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBmZHRfc2V0cHJvcCAtIGNyZWF0ZSBvciBjaGFuZ2UgYSBwcm9wZXJ0eQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEB2YWw6IHBvaW50ZXIgdG8gZGF0YSB0byBzZXQgdGhlIHByb3BlcnR5IHZhbHVlIHRvCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlCisgKgorICogZmR0X3NldHByb3AoKSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgcHJvcGVydHkgaW4gdGhlIGdpdmVuCisgKiBub2RlIHRvIHRoZSBnaXZlbiB2YWx1ZSBhbmQgbGVuZ3RoLCBjcmVhdGluZyB0aGUgcHJvcGVydHkgaWYgaXQKKyAqIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iIHRvCisgKgkJY29udGFpbiB0aGUgbmV3IHByb3BlcnR5IHZhbHVlCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X3NldHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqdmFsLCBpbnQgbGVuKTsKKworLyoqCisgKiBmZHRfc2V0cHJvcF9jZWxsIC0gc2V0IGEgcHJvcGVydHkgdG8gYSBzaW5nbGUgY2VsbCB2YWx1ZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEB2YWw6IDMyLWJpdCBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgcHJvcGVydHkgKG5hdGl2ZSBlbmRpYW4pCisgKgorICogZmR0X3NldHByb3BfY2VsbCgpIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBwcm9wZXJ0eSBpbiB0aGUKKyAqIGdpdmVuIG5vZGUgdG8gdGhlIGdpdmVuIGNlbGwgdmFsdWUgKGNvbnZlcnRpbmcgdG8gYmlnLWVuZGlhbiBpZgorICogbmVjZXNzYXJ5KSwgb3IgY3JlYXRlcyBhIG5ldyBwcm9wZXJ0eSB3aXRoIHRoYXQgdmFsdWUgaWYgaXQgZG9lcworICogbm90IGFscmVhZHkgZXhpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iIHRvCisgKgkJY29udGFpbiB0aGUgbmV3IHByb3BlcnR5IHZhbHVlCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBzdGF0aWMgaW5saW5lIGludCBmZHRfc2V0cHJvcF9jZWxsKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgdWludDMyX3QgdmFsKQogewogCXZhbCA9IGNwdV90b19mZHQzMih2YWwpOwogCXJldHVybiBmZHRfc2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsIG5hbWUsICZ2YWwsIHNpemVvZih2YWwpKTsKIH0KKworLyoqCisgKiBmZHRfc2V0cHJvcF9zdHJpbmcgLSBzZXQgYSBwcm9wZXJ0eSB0byBhIHN0cmluZyB2YWx1ZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBzdHI6IHN0cmluZyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5CisgKgorICogZmR0X3NldHByb3Bfc3RyaW5nKCkgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHByb3BlcnR5IGluIHRoZQorICogZ2l2ZW4gbm9kZSB0byB0aGUgZ2l2ZW4gc3RyaW5nIHZhbHVlICh1c2luZyB0aGUgbGVuZ3RoIG9mIHRoZQorICogc3RyaW5nIHRvIGRldGVybWluZSB0aGUgbmV3IGxlbmd0aCBvZiB0aGUgcHJvcGVydHkpLCBvciBjcmVhdGVzIGEKKyAqIG5ldyBwcm9wZXJ0eSB3aXRoIHRoYXQgdmFsdWUgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBpbnNlcnQgb3IgZGVsZXRlIGRhdGEgZnJvbSB0aGUgYmxvYiwgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIG9mZnNldHMgb2Ygc29tZSBleGlzdGluZyBub2Rlcy4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlIGJsb2IgdG8KKyAqCQljb250YWluIHRoZSBuZXcgcHJvcGVydHkgdmFsdWUKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KICNkZWZpbmUgZmR0X3NldHByb3Bfc3RyaW5nKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgc3RyKSBcCiAJZmR0X3NldHByb3AoKGZkdCksIChub2Rlb2Zmc2V0KSwgKG5hbWUpLCAoc3RyKSwgc3RybGVuKHN0cikrMSkKKworLyoqCisgKiBmZHRfZGVscHJvcCAtIGRlbGV0ZSBhIHByb3BlcnR5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHdob3NlIHByb3BlcnR5IHRvIG5vcAorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIG5vcAorICoKKyAqIGZkdF9kZWxfcHJvcGVydHkoKSB3aWxsIGRlbGV0ZSB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsIHRoZXJlZm9yZQorICogY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PVEZPVU5ELCBub2RlIGRvZXMgbm90IGhhdmUgdGhlIG5hbWVkIHByb3BlcnR5CisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X2RlbHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogZmR0X2FkZF9zdWJub2RlX25hbWVsZW4gLSBjcmVhdGVzIGEgbmV3IG5vZGUgYmFzZWQgb24gc3Vic3RyaW5nCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAcGFyZW50b2Zmc2V0OiBzdHJ1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIGEgbm9kZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHN1Ym5vZGUgdG8gbG9jYXRlCisgKiBAbmFtZWxlbjogbnVtYmVyIG9mIGNoYXJhY3RlcnMgb2YgbmFtZSB0byBjb25zaWRlcgorICoKKyAqIElkZW50aWNhbCB0byBmZHRfYWRkX3N1Ym5vZGUoKSwgYnV0IHVzZSBvbmx5IHRoZSBmaXJzdCBuYW1lbGVuCisgKiBjaGFyYWN0ZXJzIG9mIG5hbWUgYXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBub2RlLiAgVGhpcyBpcyB1c2VmdWwgZm9yCisgKiBjcmVhdGluZyBzdWJub2RlcyBiYXNlZCBvbiBhIHBvcnRpb24gb2YgYSBsYXJnZXIgc3RyaW5nLCBzdWNoIGFzIGEKKyAqIGZ1bGwgcGF0aC4KKyAqLwogaW50IGZkdF9hZGRfc3Vibm9kZV9uYW1lbGVuKHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwKIAkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CisKKy8qKgorICogZmR0X2FkZF9zdWJub2RlIC0gY3JlYXRlcyBhIG5ldyBub2RlCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAcGFyZW50b2Zmc2V0OiBzdHJ1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIGEgbm9kZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHN1Ym5vZGUgdG8gbG9jYXRlCisgKgorICogZmR0X2FkZF9zdWJub2RlKCkgY3JlYXRlcyBhIG5ldyBub2RlIGFzIGEgc3Vibm9kZSBvZiB0aGUgbm9kZSBhdAorICogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBwYXJlbnRvZmZzZXQsIHdpdGggdGhlIGdpdmVuIG5hbWUgKHdoaWNoCisgKiBzaG91bGQgaW5jbHVkZSB0aGUgdW5pdCBhZGRyZXNzLCBpZiBhbnkpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgZGF0YSBpbnRvIHRoZSBibG9iLCBhbmQgd2lsbCB0aGVyZWZvcmUKKyAqIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorCisgKiByZXR1cm5zOgorICoJc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgY3JlYXRlZCBub2RlZXF1ZXN0ZWQgc3Vibm9kZSAoPj0wKSwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIGlmIHRoZSByZXF1ZXN0ZWQgc3Vibm9kZSBkb2VzIG5vdCBleGlzdAorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBpZiBwYXJlbnRvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBhbiBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0VYSVNUUywgaWYgdGhlIG5vZGUgYXQgcGFyZW50b2Zmc2V0IGFscmVhZHkgaGFzIGEgc3Vibm9kZSBvZgorICoJCXRoZSBnaXZlbiBuYW1lCisgKgktRkRUX0VSUl9OT1NQQUNFLCBpZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUKKyAqCQlibG9iIHRvIGNvbnRhaW4gdGhlIG5ldyBub2RlCisgKgktRkRUX0VSUl9OT1NQQUNFCisgKgktRkRUX0VSUl9CQURMQVlPVVQKKyAqICAgICAgLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzLgorICovCiBpbnQgZmR0X2FkZF9zdWJub2RlKHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogZmR0X2RlbF9ub2RlIC0gZGVsZXRlIGEgbm9kZSAoc3VidHJlZSkKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgdG8gbm9wCisgKgorICogZmR0X2RlbF9ub2RlKCkgd2lsbCByZW1vdmUgdGhlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgaXRzCisgKiBzdWJub2RlcyBpZiBhbnksIGZyb20gdGhlIGJsb2IuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsIHRoZXJlZm9yZQorICogY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfZGVsX25vZGUodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdF9pbnRlcm5hbC5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdF9pbnRlcm5hbC5oCmluZGV4IDFlNjA5MzYuLjQ2ZWI5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHRfaW50ZXJuYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0X2ludGVybmFsLmgKQEAgLTUyLDM4ICs1Miw0NCBAQAogICovCiAjaW5jbHVkZSA8ZmR0Lmg+CiAKLSNkZWZpbmUgQUxJR04oeCwgYSkJKCgoeCkgKyAoYSkgLSAxKSAmIH4oKGEpIC0gMSkpCi0jZGVmaW5lIFBBTElHTihwLCBhKQkoKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZykocCksIChhKSkpCisjZGVmaW5lIEZEVF9BTElHTih4LCBhKQkJKCgoeCkgKyAoYSkgLSAxKSAmIH4oKGEpIC0gMSkpCisjZGVmaW5lIEZEVF9UQUdBTElHTih4KQkJKEZEVF9BTElHTigoeCksIEZEVF9UQUdTSVpFKSkKIAotI2RlZmluZSBtZW1lcShwLCBxLCBuKQkobWVtY21wKChwKSwgKHEpLCAobikpID09IDApCi0jZGVmaW5lIHN0cmVxKHAsIHEpCShzdHJjbXAoKHApLCAocSkpID09IDApCisjZGVmaW5lIEZEVF9DSEVDS19IRUFERVIoZmR0KSBcCisJeyBcCisJCWludCBlcnI7IFwKKwkJaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKKwkJCXJldHVybiBlcnI7IFwKKwl9CiAKIHVpbnQzMl90IF9mZHRfbmV4dF90YWcoY29uc3Qgdm9pZCAqZmR0LCBpbnQgc3RhcnRvZmZzZXQsIGludCAqbmV4dG9mZnNldCk7CitpbnQgX2ZkdF9jaGVja19ub2RlX29mZnNldChjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQpOwogY29uc3QgY2hhciAqX2ZkdF9maW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHJ0YWIsIGludCB0YWJzaXplLCBjb25zdCBjaGFyICpzKTsKIGludCBfZmR0X25vZGVfZW5kX29mZnNldCh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0KTsKIAogc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpfZmR0X29mZnNldF9wdHIoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0KQogewotCXJldHVybiBmZHQgKyBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpICsgb2Zmc2V0OworCXJldHVybiAoY29uc3QgY2hhciAqKWZkdCArIGZkdF9vZmZfZHRfc3RydWN0KGZkdCkgKyBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqX2ZkdF9vZmZzZXRfcHRyX3codm9pZCAqZmR0LCBpbnQgb2Zmc2V0KQogewotCXJldHVybiAodm9pZCAqKV9mZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCk7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClfZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqX2ZkdF9tZW1fcnN2KGNvbnN0IHZvaWQgKmZkdCwgaW50IG4pCiB7CiAJY29uc3Qgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyc3ZfdGFibGUgPQotCQlmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KTsKKwkJKGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqKQorCQkoKGNvbnN0IGNoYXIgKilmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KSk7CiAKIAlyZXR1cm4gcnN2X3RhYmxlICsgbjsKIH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpfZmR0X21lbV9yc3Zfdyh2b2lkICpmZHQsIGludCBuKQogewotCXJldHVybiAodm9pZCAqKV9mZHRfbWVtX3JzdihmZHQsIG4pOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpX2ZkdF9tZW1fcnN2KGZkdCwgbik7CiB9CiAKLSNkZWZpbmUgU1dfTUFHSUMJCSh+RkRUX01BR0lDKQorI2RlZmluZSBGRFRfU1dfTUFHSUMJCSh+RkRUX01BR0lDKQogCiAjZW5kaWYgLyogX0xJQkZEVF9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHRfZW52LmggYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHRfZW52LmgKaW5kZXggYTRiMGZjOS4uYzg5ZmRiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0X2Vudi5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdF9lbnYuaApAQCAtNiw2ICs2LDcgQEAKIAogdHlwZWRlZiB1MzIgdWludDMyX3Q7CiB0eXBlZGVmIHU2NCB1aW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50cHRyX3Q7CiAKICNkZWZpbmUgZmR0MTZfdG9fY3B1KHgpCQkoeCkKICNkZWZpbmUgY3B1X3RvX2ZkdDE2KHgpCQkoeCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCmluZGV4IDk2NWMyMzcuLmVlMGRjNDEgMTAwNzU1Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgpAQCAtMzA3LDcgKzMwNyw5IEBACiAjIHBvc3QtcHJvY2Vzc2luZyBuZWVkZWQgZm9yIHNvbWUgcGxhdGZvcm1zCiBjYXNlICIkcGxhdGZvcm0iIGluCiBwc2VyaWVzfGNocnApCi0gICAgJG9iamJpbi9hZGRub3RlICIkb2ZpbGUiCisgICAgJHtDUk9TU31vYmpjb3B5IC1PIGJpbmFyeSAtaiAuZmFrZWVsZiAiJGtlcm5lbCIgIiRvZmlsZSIucnBhbm90ZQorICAgICRvYmpiaW4vYWRkbm90ZSAiJG9maWxlIiAiJG9maWxlIi5ycGFub3RlCisgICAgcm0gLXIgIiRvZmlsZSIucnBhbm90ZQogICAgIDs7CiBjb2ZmKQogICAgICR7Q1JPU1N9b2JqY29weSAtTyBhaXhjb2ZmLXJzNjAwMCAtLXNldC1zdGFydCAiJGVudHJ5IiAiJG9maWxlIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGY0NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKQEAgLTAsMCArMSw3NjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKKyMgV2VkIE9jdCAgMSAxNTo1NDo1NyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CitDT05GSUdfNDR4PXkKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHXzR4eD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX1BURV82NEJJVD15CitDT05GSUdfUEhZU182NEJJVD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAorIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIRVM9eQorIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAorIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQorQ09ORklHXzQ2MEVYPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDX1RBSD15CitDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggNWU2NzgwYS4uMGIxZmEyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwpAQCAtMTY0LDExICsxNjQsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IDIwMjgzMzcuLmI3ZWFlMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggZGQ4MGViMC4uYjBhMjdhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwppbmRleCBiZGY1MGM4Li5hZDgyNWJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCmluZGV4IDRlZWY4YzkuLjM4MjY3NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKaW5kZXggOGQ2NTEzOS4uOTBhYWIzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggYThhZmEzOS4uNzQ1OGEyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCmluZGV4IDI0YzMyMGEuLjFhOTI3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKaW5kZXggZTAyOWU5ZS4uMDNkOGNlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApAQCAtMzgzLDcgKzM4Myw4NCBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggN2Q2NzRiZS4uY2RmODQxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTE2NCwxMSArMTY0LDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwppbmRleCBkZTQ3MjAyLi45N2UwMmQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwpAQCAtMTY0LDExICsxNjQsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCmluZGV4IGU4ZDJkNjkuLjVhYzMzMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCmluZGV4IDkyNDVhNjcuLmMzNTljYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwpAQCAtMTYyLDExICsxNjIsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJkN2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NTcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzUKKyMgV2VkIEp1biAxMSAxMjowNjo1MyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfU0JDNjEwPXkKK0NPTkZJR19NUEM4NjQxPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfUkFQSURJTz15CisjIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfUkFXPW0KKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKK0NPTkZJR19USVBDPW0KKyMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAorIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRNPW0KK0NPTkZJR19BVE1fQ0xJUD1tCisjIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0FOX1JPVVRFUj1tCitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorIyBDT05GSUdfTkVUX1NDSF9SUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorIyBDT05GSUdfTVREX0NGSV9OT1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CisjIENPTkZJR19HRkFSX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0RSSVZFUlM9eQorIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRk9SRTIwMEVfTUFZQkUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9BVE09bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19EUzE2ODI9eQorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTkwPXkKK0NPTkZJR19TRU5TT1JTX0xNOTI9eQorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPW0KK0NPTkZJR19SVENfQ0xBU1M9bQorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OGM2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTAsMCArMSwxNDk3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0CisjIFRodSBBdWcgMjEgMDA6NTI6MTAgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CitDT05GSUdfSElCRVJOQVRFXzMyPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NjEwX0hQQ0Q9eQorQ09ORklHX01QQzg2MTA9eQorIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAorQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19SVEFTPXkKKyMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfUlRBU19QUk9DPXkKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEMxMDY9eQorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CitDT05GSUdfRlNMX1VMSTE1NzU9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTIKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfRlNMX0VMQkM9eQorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisjIENPTkZJR19CTEtfREVWX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorQ09ORklHX1NDU0lfVEdUPXkKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTUVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01BQzUzQzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorQ09ORklHX1BBVEFfQUxJPXkKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX05FVF9UVUxJUD15CisjIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CitDT05GSUdfVUxJNTI2WD15CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUE9XRVJNQUM9eQorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUExBVElOVU0gaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkFMS1lSSUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZTTF9ESVU9eQorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKKyMgQ09ORklHX1NORF9QT1dFUk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX01QQzg2MTA9eQorQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEPXkKK0NPTkZJR19TTkRfU09DX0NTNDI3MD15CitDT05GSUdfU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEE9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorQ09ORklHX0xETV9QQVJUSVRJT049eQorIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDRkZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY2NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAorIyBUaHUgQXVnIDIxIDAwOjUyOjExIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CitDT05GSUdfTVBDODY0MV9IUENOPXkKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CitDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CitDT05GSUdfUFBDX1JUQVM9eQorIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEFTX1BST0M9eQorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzEwNj15CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKK0NPTkZJR19GU0xfVUxJMTU3NT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1JBUElESU89eQorIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15CitDT05GSUdfTkVUX0lQR1JFPXkKK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTUVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01BQzUzQzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorQ09ORklHX1BBVEFfQUxJPXkKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19WSVRFU1NFX1BIWT15CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNQUMgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0JSSVFfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfTlZSQU09eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUE9XRVJNQUM9eQorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKKworIworIyBTdXBwb3J0ZWQgU0FBNzE0NiBiYXNlZCBQQ0kgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQlVER0VUX0NPUkUgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RUVVNCX0JVREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFRVU0JfREVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DSU5FUkdZVDIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgQlQ4NzggQWRhcHRlcnMKKyMKKworIworIyBTdXBwb3J0ZWQgUGx1dG8yIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfUExVVE8yIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKKworIworIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9DWDI0MTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9NVDMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI5OSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODA4MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwODYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1ZFUzFYOTMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX0lURDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVQTYxMDAgaXMgbm90IHNldAorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfU1A4ODcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TUDg4N1ggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjI3MDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjI3MDIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RSWDM5N1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9MNjQ3ODEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9OWFQ2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9NVDM1MiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCMzAwME1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUI3MDAwUCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwNDggaXMgbm90IHNldAorCisjCisjIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfVkVTMTgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwMjEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TVFYwMjk3IGlzIG5vdCBzZXQKKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9OWFQyMDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9PUjUxMTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CQ00zNTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9MR0RUMzMwWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfUzVIMTQwOSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQVU4NTIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDExIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAorIworIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0CisKKyMKKyMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKKyMKKyMgQ09ORklHX0RWQl9MTkJQMjEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfSU5URUw4WDA9eQorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CisjIENPTkZJR19TTkRfUE9XRVJNQUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FPQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NJRVJSQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9eQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19BREZTX0ZTPW0KKyMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCitDT05GSUdfQkVGU19GUz1tCisjIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CRlNfRlM9bQorQ09ORklHX0VGU19GUz1tCitDT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19WWEZTX0ZTPW0KKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorQ09ORklHX1FOWDRGU19GUz1tCisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDBmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0ODEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzQKKyMgVGh1IEF1ZyAyMSAwMDo1MjoxNSAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKK0NPTkZJR19TQkM4NjQxRD15CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX01QQzg2NDE9eQorQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19SVEFTPXkKKyMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfUlRBU19QUk9DPXkKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEMxMDY9eQorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCisjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9SQVc9bQorIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKK0NPTkZJR19USVBDPW0KKyMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAorIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRNPW0KK0NPTkZJR19BVE1fQ0xJUD1tCisjIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfU1RQPW0KK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0FOX1JPVVRFUj1tCitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCisKKyMKKyMgQ2xhc3NpZmljYXRpb24KKyMKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKKyMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CitDT05GSUdfTURfUkFJRDEwPXkKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD15CitDT05GSUdfTURfRkFVTFRZPXkKK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD15CitDT05GSUdfRE1fU05BUFNIT1Q9eQorQ09ORklHX0RNX01JUlJPUj15CitDT05GSUdfRE1fWkVSTz15CisjIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorQ09ORklHX0JST0FEQ09NX1BIWT15CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX01BQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0RSSVZFUlM9eQorIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRk9SRTIwMEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9BVE09bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BPV0VSTUFDPXkKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworQ09ORklHX1NPRlRfV0FUQ0hET0c9bQorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HX1JUQVMgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfT0NGUzJfRlM9bQorQ09ORklHX09DRlMyX0ZTX08yQ0I9bQorQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKK0NPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz1tCisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz1tCisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCmluZGV4IGVmMGM2ZTguLmNkNjkxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC0xNTAsMTEgKzE1MCwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzllYWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDkwMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMgorIyBUaHUgTWF5IDIyIDA4OjE4OjQ3IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1BQQ184Mnh4PXkKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MjcyX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJGQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQODI0OEUgaXMgbm90IHNldAorQ09ORklHX01HQ09HRT15CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHXzgyNjA9eQorQ09ORklHXzgyNzI9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMj15CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CisjIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorQ09ORklHX0ZJWEVEX1BIWT15CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVQ9eQorQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CisjIENPTkZJR19GU19FTkVUX0hBU19GQ0MgaXMgbm90IHNldAorIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ1BNPXkKK0NPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ1BNX1NNQzE9eQorQ09ORklHX1NFUklBTF9DUE1fU01DMj15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQkRJX1NXSVRDSD15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fUENCQz15CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNmNlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKQEAgLTAsMCArMSw4NzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzIKKyMgV2VkIE1heSAyMSAxMzozMDozMyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzh4eD15CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHXzh4eD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTEKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQTTE9eQorIyBDT05GSUdfTVBDOFhYRkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NlhBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODg1QURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FUDg4WEMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0FEREVSODc1IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTUdTVVZEPXkKKworIworIyBNUEM4eHggQ1BNIE9wdGlvbnMKKyMKKworIworIyBHZW5lcmljIE1QQzh4eCBPcHRpb25zCisjCitDT05GSUdfOHh4X0NPUFlCQUNLPXkKK0NPTkZJR184eHhfQ1BVNj15CitDT05GSUdfOHh4X0NQVTE1PXkKKyMgQ09ORklHX05PX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TT0ZfVUNPREVfUEFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NQSV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIPXkKK0NPTkZJR19VQ09ERV9QQVRDSD15CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19GU0xfU09DPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfUVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZkMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NGSV9TVEFBPXkKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfQ0ZJX0ZMQUdBRE0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19GSVhFRF9QSFk9eQorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19GU19FTkVUPXkKK0NPTkZJR19GU19FTkVUX0hBU19TQ0M9eQorIyBDT05GSUdfRlNfRU5FVF9IQVNfRkVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX0VORVRfTURJT19GRUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ1BNPXkKK0NPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ1BNX1NNQzE9eQorIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMyIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CisjIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDdjNDM1YzguLmZmNmY3YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTE1MSwxMSArMTUxLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogQ09ORklHX1BQQ184Mnh4PXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKaW5kZXggOTE2ZTNkZi4uOTkxYzliZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKQEAgLTE2NiwxMSArMTY2LDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOTk5MDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0OTcgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUaHUgQXVnIDIxIDAwOjUyOjEwIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0hJQkVSTkFURV8zMj15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLSMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLUNPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg2eHg9eQotIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjEwX0hQQ0Q9eQotQ09ORklHX01QQzg2MTA9eQotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotQ09ORklHX1BQQ19SVEFTPXkKLSMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRBU19QUk9DPXkKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEMxMDY9eQotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTIKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lTQSBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci1DT05GSUdfUENJX0RFQlVHPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRlNMX0VMQkM9eQotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotQ09ORklHX0lERT15Ci0jIENPTkZJR19CTEtfREVWX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotQ09ORklHX1NDU0lfVEdUPXkKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01BQzUzQzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1NBVEFfUE1QPXkKLUNPTkZJR19TQVRBX0FIQ0k9eQotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotQ09ORklHX1BBVEFfQUxJPXkKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotQ09ORklHX05FVF9UVUxJUD15Ci0jIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0Ci1DT05GSUdfVUxJNTI2WD15Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUE9XRVJNQUM9eQotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUExBVElOVU0gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkFMS1lSSUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotQ09ORklHX0ZCX0ZTTF9ESVU9eQotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKLSMgQ09ORklHX1NORF9QT1dFUk1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfU09DX01QQzg2MTA9eQotQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEPXkKLUNPTkZJR19TTkRfU09DX0NTNDI3MD15Ci1DT05GSUdfU05EX1NPQ19DUzQyNzBfVkQzM19FUlJBVEE9eQotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi1DT05GSUdfUlRDX0RSVl9DTU9TPXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19ORlNEPXkKLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotQ09ORklHX0xETV9QQVJUSVRJT049eQotIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19TSElSUT15Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTA5YmUzLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNjY2ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzQKLSMgVGh1IEF1ZyAyMSAwMDo1MjoxMSAyMDA4Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR182eHg9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MgotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVD15Ci0jIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX1BDU1BLUl9QTEFURk9STT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLSMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODZ4eD15Ci1DT05GSUdfTVBDODY0MV9IUENOPXkKLSMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODY0MT15Ci1DT05GSUdfUFBDX05BVElWRT15Ci0jIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci1DT05GSUdfUFBDX1JUQVM9eQotIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19SVEFTX1BST0M9eQotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzEwNj15Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfVUxJMTU3NT15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLUNPTkZJR19ISUdITUVNPXkKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCi0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKLUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLUNPTkZJR19ORVRfSVBJUD15Ci1DT05GSUdfTkVUX0lQR1JFPXkKLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKLUNPTkZJR19JUF9NUk9VVEU9eQotQ09ORklHX0lQX1BJTVNNX1YxPXkKLUNPTkZJR19JUF9QSU1TTV9WMj15Ci1DT05GSUdfQVJQRD15Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPR0dJTkc9eQotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTUVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01BQzUzQzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1NBVEFfUE1QPXkKLUNPTkZJR19TQVRBX0FIQ0k9eQotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotQ09ORklHX1BBVEFfQUxJPXkKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19WSVRFU1NFX1BIWT15Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0JSSVFfUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfTlZSQU09eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUE9XRVJNQUM9eQotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX0RWQl9DT1JFPW0KLUNPTkZJR19WSURFT19NRURJQT1tCi0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPW0KLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KLUNPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCi1DT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KLUNPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKLQotIwotIyBTdXBwb3J0ZWQgU0FBNzE0NiBiYXNlZCBQQ0kgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQlVER0VUX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RUVVNCX0JVREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFRVU0JfREVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DSU5FUkdZVDIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgQlQ4NzggQWRhcHRlcnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUGx1dG8yIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19EVkJfUExVVE8yIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcwotIwotCi0jCi0jIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKLQotIwotIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9DWDI0MTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9NVDMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1RWMDI5OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBODA4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwODYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1ZFUzFYOTMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX0lURDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVQTYxMDAgaXMgbm90IHNldAotCi0jCi0jIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfU1A4ODcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TUDg4N1ggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjI3MDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjI3MDIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RSWDM5N1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MNjQ3ODEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9OWFQ2MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9NVDM1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUIzMDAwTUMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwNDggaXMgbm90IHNldAotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfVkVTMTgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwMjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjk3IGlzIG5vdCBzZXQKLQotIwotIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9OWFQyMDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9CQ00zNTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MR0RUMzMwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQVU4NTIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDExIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAotIwotIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKLSMKLSMgQ09ORklHX0RWQl9MTkJQMjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfQUM5N19DT0RFQz15Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfSU5URUw4WDA9eQotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BQQz15Ci0jIENPTkZJR19TTkRfUE9XRVJNQUMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FPQSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz15Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NJRVJSQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfSVNPOTY2MF9GUz1tCi1DT05GSUdfSk9MSUVUPXkKLUNPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotQ09ORklHX05URlNfRlM9eQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAotQ09ORklHX0FGRlNfRlM9bQotQ09ORklHX0hGU19GUz1tCi1DT05GSUdfSEZTUExVU19GUz1tCi1DT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19CRlNfRlM9bQotQ09ORklHX0VGU19GUz1tCi1DT05GSUdfQ1JBTUZTPXkKLUNPTkZJR19WWEZTX0ZTPW0KLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0hQRlNfRlM9bQotQ09ORklHX1FOWDRGU19GUz1tCi0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVl9GUz1tCi1DT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGJlODIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjQ2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1CisjIFR1ZSBTZXAgMjMgMjM6Mjg6MzggMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorQ09ORklHX01QQzg2NDFfSFBDTj15CitDT05GSUdfU0JDODY0MUQ9eQorQ09ORklHX01QQzg2MTBfSFBDRD15CitDT05GSUdfR0VGX1NCQzYxMD15CitDT05GSUdfTVBDODY0MT15CitDT05GSUdfTVBDODYxMD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKK0NPTkZJR19GU0xfVUxJMTU3NT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfUkFQSURJTz15CisjIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19ORVRfSVBHUkU9eQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKK0NPTkZJR19BUlBEPXkKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorQ09ORklHX1BBVEFfQUxJPXkKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19WSVRFU1NFX1BIWT15CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj1tCisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisKKyMKKyMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCisjCisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RUVVNCX0RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ0lORVJHWVQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycworIworIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCisjCisKKyMKKyMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKKyMKKworIworIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgwODMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9WRVMxWDkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MjZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTDY0NzgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDQ4IGlzIG5vdCBzZXQKKworIworIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1ZFUzE4MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI5NyBpcyBub3Qgc2V0CisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0FVODUyMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKKyMKKyMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAorCisjCisjIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCisjCisjIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CitDT05GSUdfU05EX0lOVEVMOFgwPXkKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfQURGU19GUz1tCisjIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorQ09ORklHX0JFRlNfRlM9bQorIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQkZTX0ZTPW0KK0NPTkZJR19FRlNfRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfVlhGU19GUz1tCisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KK0NPTkZJR19RTlg0RlNfRlM9bQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGIzOTBiNzQuLjdlMTc4NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zYmM4NjQxZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zYmM4NjQxZF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDU0MjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4MSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0Ci0jIFRodSBBdWcgMjEgMDA6NTI6MTUgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLUNPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg2eHg9eQotIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKLUNPTkZJR19TQkM4NjQxRD15Ci0jIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAotQ09ORklHX01QQzg2NDE9eQotQ09ORklHX1BQQ19OQVRJVkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotQ09ORklHX1BQQ19SVEFTPXkKLSMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRBU19QUk9DPXkKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEMxMDY9eQotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCi0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX0FMTF9DUFVTPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KLUNPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKLUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKLUNPTkZJR19JUF9NUk9VVEU9eQotQ09ORklHX0lQX1BJTVNNX1YxPXkKLUNPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci1DT05GSUdfSU5FVF9BSD1tCi1DT05GSUdfSU5FVF9FU1A9bQotQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9BSD1tCi1DT05GSUdfSU5FVDZfRVNQPW0KLUNPTkZJR19JTkVUNl9JUENPTVA9bQotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLUNPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9SQVc9bQotIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLUNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQNl9ORl9RVUVVRT1tCi1DT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCi1DT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi0jIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQotQ09ORklHX0lQNl9ORl9GSUxURVI9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAotQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLUNPTkZJR19USVBDPW0KLSMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAotIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNPW0KLUNPTkZJR19BVE1fQ0xJUD1tCi0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKLUNPTkZJR19BVE1fTEFORT1tCi1DT05GSUdfQVRNX01QT0E9bQotQ09ORklHX0FUTV9CUjI2ODQ9bQotIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1RQPW0KLUNPTkZJR19CUklER0U9bQotQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0FOX1JPVVRFUj1tCi1DT05GSUdfTkVUX1NDSEVEPXkKLQotIwotIyBRdWV1ZWluZy9TY2hlZHVsaW5nCi0jCi1DT05GSUdfTkVUX1NDSF9DQlE9bQotQ09ORklHX05FVF9TQ0hfSFRCPW0KLUNPTkZJR19ORVRfU0NIX0hGU0M9bQotQ09ORklHX05FVF9TQ0hfQVRNPW0KLUNPTkZJR19ORVRfU0NIX1BSSU89bQotQ09ORklHX05FVF9TQ0hfUkVEPW0KLUNPTkZJR19ORVRfU0NIX1NGUT1tCi1DT05GSUdfTkVUX1NDSF9URVFMPW0KLUNPTkZJR19ORVRfU0NIX1RCRj1tCi1DT05GSUdfTkVUX1NDSF9HUkVEPW0KLUNPTkZJR19ORVRfU0NIX0RTTUFSSz1tCi1DT05GSUdfTkVUX1NDSF9ORVRFTT1tCi0KLSMKLSMgQ2xhc3NpZmljYXRpb24KLSMKLUNPTkZJR19ORVRfQ0xTPXkKLSMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCi1DT05GSUdfTkVUX0NMU19ST1VURTQ9bQotQ09ORklHX05FVF9DTFNfUk9VVEU9eQotQ09ORklHX05FVF9DTFNfRlc9bQotQ09ORklHX05FVF9DTFNfVTMyPW0KLSMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUlNWUD1tCi1DT05GSUdfTkVUX0NMU19SU1ZQNj1tCi0jIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLUNPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9MSU5FQVI9eQotQ09ORklHX01EX1JBSUQwPXkKLUNPTkZJR19NRF9SQUlEMT15Ci1DT05GSUdfTURfUkFJRDEwPXkKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotQ09ORklHX01EX01VTFRJUEFUSD15Ci1DT05GSUdfTURfRkFVTFRZPXkKLUNPTkZJR19CTEtfREVWX0RNPXkKLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ETV9DUllQVD15Ci1DT05GSUdfRE1fU05BUFNIT1Q9eQotQ09ORklHX0RNX01JUlJPUj15Ci1DT05GSUdfRE1fWkVSTz15Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT1tCi1DT05GSUdfQk9ORElORz1tCi0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotQ09ORklHX0JST0FEQ09NX1BIWT15Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX01BQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0RSSVZFUlM9eQotIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRk9SRTIwMEUgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci1DT05GSUdfUFBQX0ZJTFRFUj15Ci1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfU1lOQ19UVFk9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KLUNPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQT0U9bQotQ09ORklHX1BQUE9BVE09bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotQ09ORklHX1NMSVA9bQotQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15Ci1DT05GSUdfU0xIQz1tCi1DT05GSUdfU0xJUF9TTUFSVD15Ci1DT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19ORVRDT05TT0xFPXkKLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci1DT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BPV0VSTUFDPXkKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX1NPRlRfV0FUQ0hET0c9bQotIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HX1JUQVMgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX09DRlMyX0ZTX08yQ0I9bQotQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKLUNPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKLSMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz1tCi0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz1tCi0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKLUNPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCi1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTX1hBVFRSPXkKLUNPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPW0KLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQotQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQotQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi1DT05GSUdfTkxTX0FTQ0lJPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLUNPTkZJR19OTFNfSVNPODg1OV8yPW0KLUNPTkZJR19OTFNfSVNPODg1OV8zPW0KLUNPTkZJR19OTFNfSVNPODg1OV80PW0KLUNPTkZJR19OTFNfSVNPODg1OV81PW0KLUNPTkZJR19OTFNfSVNPODg1OV82PW0KLUNPTkZJR19OTFNfSVNPODg1OV83PW0KLUNPTkZJR19OTFNfSVNPODg1OV85PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQotQ09ORklHX05MU19JU084ODU5XzE1PW0KLUNPTkZJR19OTFNfS09JOF9SPW0KLUNPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFk9eQotQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19OVUxMPW0KLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KLUNPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IGVmOGEyNDguLjFlOTRiMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC02Miw2ICs2Miw3IEBACiAJUFBDX1BNQ19ERUZBVUxUID0gMCwKIAlQUENfUE1DX0lCTSA9IDEsCiAJUFBDX1BNQ19QQTZUID0gMiwKKwlQUENfUE1DX0c0ID0gMywKIH07CiAKIHN0cnVjdCBwdF9yZWdzOwpAQCAtMTkyLDYgKzE5Myw3IEBACiAjZGVmaW5lIENQVV9GVFJfTk9fU0xCSUVfQgkJTE9OR19BU01fQ09OU1QoMHgwMDA4MDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1ZTWAkJCUxPTkdfQVNNX0NPTlNUKDB4MDAxMDAwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9TQU8JCQlMT05HX0FTTV9DT05TVCgweDAwMjAwMDAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ1BfVVNFX0RDQlRaCQlMT05HX0FTTV9DT05TVCgweDAwNDAwMDAwMDAwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTM4NywxMCArMzg5LDExIEBACiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NUUkwpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAotCSAgICBDUFVfRlRSX01NQ1JBKQorCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9DUF9VU0VfRENCVFopCiAjZGVmaW5lIENQVV9GVFJTX1BQQzk3MAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAotCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0FOX05BUCB8IENQVV9GVFJfTU1DUkEpCisJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9DQU5fTkFQIHwgQ1BVX0ZUUl9NTUNSQSB8IFwKKwkgICAgQ1BVX0ZUUl9DUF9VU0VfRENCVFopCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNQkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCkBAIC00MTEsNyArNDE0LDggQEAKICNkZWZpbmUgQ1BVX0ZUUlNfQ0VMTAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9QQVVTRV9aRVJPIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgQ1BVX0ZUUl9DRUxMX1RCX0JVRykKKwkgICAgQ1BVX0ZUUl9QQVVTRV9aRVJPIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgXAorCSAgICBDUFVfRlRSX0NFTExfVEJfQlVHIHwgQ1BVX0ZUUl9DUF9VU0VfRENCVFopCiAjZGVmaW5lIENQVV9GVFJTX1BBNlQgKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGNyLXJlZ3MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kY3ItcmVncy5oCmluZGV4IGYxNTI5NmMuLjgyOGUzYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kY3ItcmVncy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kY3ItcmVncy5oCkBAIC02OCw2ICs2OCwxMyBAQAogI2RlZmluZSBTRFIwX1VBUlQzCQkweDAxMjMKICNkZWZpbmUgU0RSMF9DVVNUMAkJMHg0MDAwCiAKKy8qIFNEUiBmb3IgNDA1RVogKi8KKyNkZWZpbmUgRENSTl9TRFJfSUNJTlRTVEFUCTB4NDUxMAorI2RlZmluZSBJQ0lOVFNUQVRfSUNSWAkweDgwMDAwMDAwCisjZGVmaW5lIElDSU5UU1RBVF9JQ1RYMAkweDQwMDAwMDAwCisjZGVmaW5lIElDSU5UU1RBVF9JQ1RYMSAweDIwMDAwMDAwCisjZGVmaW5lIElDSU5UU1RBVF9JQ1RYCTB4NjAwMDAwMDAKKwogLyogU0RScyAoNDYwRVgvNDYwR1QpICovCiAjZGVmaW5lIFNEUjBfRVRIX0NGRwkJMHg0MTAzCiAjZGVmaW5lIFNEUjBfRVRIX0NGR19FQ1MJMHgwMDAwMDEwMAkvKiBFTUFDIGludCBjbGsgc291cmNlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggMjI4YWIyYS4uZGZkNTA0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMTYsOSArMTYsNiBAQAogCS8qIERNQSBvcGVyYXRpb25zIG9uIHRoYXQgZGV2aWNlICovCiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcwkqZG1hX29wczsKIAl2b2lkCQkJKmRtYV9kYXRhOwotCi0JLyogTlVNQSBub2RlIGlmIGFwcGxpY2FibGUgKi8KLQlpbnQJCQludW1hX25vZGU7CiB9OwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGM3Y2E0NWYuLmZkZGIyMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC00NCw4ICs0NCw2IEBACiAKICNlbmRpZiAvKiAhIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KIAotI2lmZGVmIENPTkZJR19QUEM2NAotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGV2aWNlX3RvX21hc2soc3RydWN0IGRldmljZSAqZGV2KQogewogCWlmIChkZXYtPmRtYV9tYXNrICYmICpkZXYtPmRtYV9tYXNrKQpAQCAtNzYsOCArNzQsMjQgQEAKIAkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiAJaW50CQkoKmRtYV9zdXBwb3J0ZWQpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwogCWludAkJKCpzZXRfZG1hX21hc2spKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKTsKKwlkbWFfYWRkcl90IAkoKm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCXZvaWQJCSgqdW5tYXBfcGFnZSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiB9OwogCisvKgorICogQXZhaWxhYmxlIGdlbmVyaWMgc2V0cyBvZiBvcGVyYXRpb25zCisgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9pb21tdV9vcHM7CisjZW5kaWYKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9kaXJlY3Rfb3BzOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBXZSBkb24ndCBoYW5kbGUgdGhlIE5VTEwgZGV2IGNhc2UgZm9yIElTQSBmb3Igbm93LiBXZSBjb3VsZApAQCAtODUsOCArOTksMTkgQEAKIAkgKiBvbmx5IElTQSBETUEgZGV2aWNlIHdlIHN1cHBvcnQgaXMgdGhlIGZsb3BweSBhbmQgd2UgaGF2ZSBhIGhhY2sKIAkgKiBpbiB0aGUgZmxvcHB5IGRyaXZlciBkaXJlY3RseSB0byBnZXQgYSBkZXZpY2UgZm9yIHVzLgogCSAqLwotCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCB8fCBkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPT0gTlVMTCkpCisKKwlpZiAodW5saWtlbHkoZGV2ID09IE5VTEwpIHx8IGRldi0+YXJjaGRhdGEuZG1hX29wcyA9PSBOVUxMKSB7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJCXJldHVybiBOVUxMOworI2Vsc2UKKwkJLyogVXNlIGRlZmF1bHQgb24gMzItYml0IGlmIGRtYV9vcHMgaXMgbm90IHNldCB1cCAqLworCQkvKiBUT0RPOiBMb25nIHRlcm0sIHdlIHNob3VsZCBmaXggZHJpdmVycyBzbyB0aGF0IGRldiBhbmQKKwkJICogYXJjaGRhdGEgZG1hX29wcyBhcmUgc2V0IHVwIGZvciBhbGwgYnVzZXMuCisJCSAqLworCQlyZXR1cm4gJmRtYV9kaXJlY3Rfb3BzOworI2VuZGlmCisJfQorCiAJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX29wczsKIH0KIApAQCAtMTIzLDYgKzE0OCwxMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVE9ETzogbWFwXy91bm1hcF9zaW5nbGUgd2lsbCBpZGVhbGx5IGdvIGF3YXksIHRvIGJlIGNvbXBsZXRlbHkKKyAqIHJlcGxhY2VkIGJ5IG1hcC91bm1hcF9wYWdlLiAgIFVudGlsIHRoZW4sIHdlIGFsbG93IGRtYV9vcHMgdG8gaGF2ZQorICogb25lIG9yIHRoZSBvdGhlciwgb3IgYm90aCBieSBjaGVja2luZyB0byBzZWUgaWYgdGhlIHNwZWNpZmljCisgKiBmdW5jdGlvbiByZXF1ZXN0ZWQgZXhpc3RzOyBhbmQgaWYgbm90LCBmYWxsaW5nIGJhY2sgb24gdGhlIG90aGVyIHNldC4KKyAqLwogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgICAgdm9pZCAqY3B1X2FkZHIsCiAJCQkJCSAgICAgIHNpemVfdCBzaXplLApAQCAtMTMyLDcgKzE2MywxNCBAQAogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAJQlVHX09OKCFkbWFfb3BzKTsKLQlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKworCWlmIChkbWFfb3BzLT5tYXBfc2luZ2xlKQorCQlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sCisJCQkJCSAgIGF0dHJzKTsKKworCXJldHVybiBkbWFfb3BzLT5tYXBfcGFnZShkZXYsIHZpcnRfdG9fcGFnZShjcHVfYWRkciksCisJCQkJICh1bnNpZ25lZCBsb25nKWNwdV9hZGRyICUgUEFHRV9TSVpFLCBzaXplLAorCQkJCSBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTQ0LDcgKzE4MiwxMyBAQAogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAJQlVHX09OKCFkbWFfb3BzKTsKLQlkbWFfb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7CisKKwlpZiAoZG1hX29wcy0+dW5tYXBfc2luZ2xlKSB7CisJCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKwkJcmV0dXJuOworCX0KKworCWRtYV9vcHMtPnVubWFwX3BhZ2UoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTU2LDggKzIwMCwxMyBAQAogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAJQlVHX09OKCFkbWFfb3BzKTsKKworCWlmIChkbWFfb3BzLT5tYXBfcGFnZSkKKwkJcmV0dXJuIGRtYV9vcHMtPm1hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXJlY3Rpb24sCisJCQkJCSBhdHRycyk7CisKIAlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwKLQkJCWRpcmVjdGlvbiwgYXR0cnMpOworCQkJCSAgIGRpcmVjdGlvbiwgYXR0cnMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3BhZ2VfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTY5LDYgKzIxOCwxMiBAQAogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAJQlVHX09OKCFkbWFfb3BzKTsKKworCWlmIChkbWFfb3BzLT51bm1hcF9wYWdlKSB7CisJCWRtYV9vcHMtPnVubWFwX3BhZ2UoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7CisJCXJldHVybjsKKwl9CisKIAlkbWFfb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKQEAgLTI1MywxMjYgKzMwOCw2IEBACiAJZG1hX3VubWFwX3NnX2F0dHJzKGRldiwgc2csIG5od2VudHJpZXMsIGRpcmVjdGlvbiwgTlVMTCk7CiB9CiAKLS8qCi0gKiBBdmFpbGFibGUgZ2VuZXJpYyBzZXRzIG9mIG9wZXJhdGlvbnMKLSAqLwotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wczsKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9kaXJlY3Rfb3BzOwotCi0jZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KLQotI2RlZmluZSBkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykJKDEpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKLXsKLQlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQkqZGV2LT5kbWFfbWFzayA9IGRtYV9tYXNrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgKiBkbWFfaGFuZGxlLAotCQkJCSAgICAgICBnZnBfdCBnZnApCi17Ci0jaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQotCXJldHVybiBfX2RtYV9hbGxvY19jb2hlcmVudChzaXplLCBkbWFfaGFuZGxlLCBnZnApOwotI2Vsc2UKLQl2b2lkICpyZXQ7Ci0JLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCi0JZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7Ci0KLQlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IDB4ZmZmZmZmZmYpCi0JCWdmcCB8PSBHRlBfRE1BOwotCi0JcmV0ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGdmcCwgZ2V0X29yZGVyKHNpemUpKTsKLQotCWlmIChyZXQgIT0gTlVMTCkgewotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2J1cyhyZXQpOwotCX0KLQotCXJldHVybiByZXQ7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKLQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0jaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQotCV9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZSwgdmFkZHIpOwotI2Vsc2UKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAotZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7Ci0KLQlfX2RtYV9zeW5jKHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKLQotCXJldHVybiB2aXJ0X3RvX2J1cyhwdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLAotCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyogV2UgZG8gbm90aGluZy4gKi8KLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKLQotCV9fZG1hX3N5bmNfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Ci0KLQlyZXR1cm4gcGFnZV90b19idXMocGFnZSkgKyBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCi0JCQkJICBzaXplX3Qgc2l6ZSwKLQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBXZSBkbyBub3RoaW5nLiAqLwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IGk7Ci0KLQlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKLQotCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7Ci0JCUJVR19PTighc2dfcGFnZShzZykpOwotCQlfX2RtYV9zeW5jX3BhZ2Uoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fYnVzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7Ci0JfQotCi0JcmV0dXJuIG5lbnRzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmh3ZW50cmllcywKLQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZS4gKi8KLX0KLQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwotCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAogCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAogCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNjRjNmVlMi4uZDgxMjkyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMjMyLDcgKzIzMiw3IEBACiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjaWZkZWYgX19wb3dlcnBjNjRfXwotIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJCQkJXAorIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQkJCQkJXAogZG8gewkJCQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gMDsJCQkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCQlcCkBAIC0yNTYsNyArMjU2LDcgQEAKICMgZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY19zdGspICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkgPyBcCiAJCShleGVjX3N0ayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkgOiAwKQogI2Vsc2UgCi0jIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiBleHRlcm4gaW50IGRjYWNoZV9ic2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24uaAppbmRleCAzMjkxNDhiLi5kM2Q0NTM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oCkBAIC01MywxNCArNTMsOCBAQAogICogbG93IGhhbGZ3b3JkIG9mIHRoZSBhZGRyZXNzLCBidXQgZm9yIEtkdW1wIHdlIG5lZWQgdGhlIHdob2xlIGxvdwogICogd29yZC4KICAqLwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAjZGVmaW5lIExPQURfSEFORExFUihyZWcsIGxhYmVsKQkJCQkJXAotCW9yaXMJcmVnLHJlZywobGFiZWwpQGg7CS8qIHZpcnQgYWRkciBvZiBoYW5kbGVyIC4uLiAqLwlcCi0Jb3JpCXJlZyxyZWcsKGxhYmVsKUBsOwkvKiAuLiBhbmQgdGhlIHJlc3QgKi8KLSNlbHNlCi0jZGVmaW5lIExPQURfSEFORExFUihyZWcsIGxhYmVsKQkJCQkJXAotCW9yaQlyZWcscmVnLChsYWJlbClAbDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCi0jZW5kaWYKKwlhZGRpCXJlZyxyZWcsKGxhYmVsKS1fc3RleHQ7CS8qIHZpcnQgYWRkciBvZiBoYW5kbGVyIC4uLiAqLwogCiAjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKQkJCQlcCiAJbWZzcHIJcjEzLFNQUk5fU1BSRzM7CQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKQEAgLTcyLDM3ICs2NiwxMiBAQAogCXN0ZAlyOSxhcmVhK0VYX1IxMyhyMTMpOwkJCQkJXAogCW1mY3IJcjkKIAotLyoKLSAqIEVxdWFsIHRvIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUywgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIDY0Yml0IG1vZGUuCi0gKiBUaGUgZmlybXdhcmUgY2FsbHMgdGhlIHJlZ2lzdGVyZWQgc3lzdGVtX3Jlc2V0X2Z3bm1pIGFuZAotICogbWFjaGluZV9jaGVja19md25taSBoYW5kbGVycyBpbiAzMmJpdCBtb2RlIGlmIHRoZSBjcHUgaGFwcGVucyB0byBydW4KLSAqIGEgMzJiaXQgYXBwbGljYXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50LgotICogVGhpcyBmaXJtd2FyZSBidWcgaXMgcHJlc2VudCBvbiBQT1dFUjQgYW5kIEpTMjAuCi0gKi8KLSNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTX0ZPUkNFXzY0QklUKGFyZWEsIGxhYmVsKQkJXAotCUVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKTsJCQkJCVwKLQljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQltZm1zcglyMTA7CQkJCQkJCVwKLQkvKiBmb3JjZSA2NGJpdCBtb2RlICovCQkJCQkJXAotCWxpCXIxMSw1OwkJCS8qIE1TUl9TRl9MR3xNU1JfSVNGX0xHICovCVwKLQlybGRpbWkJcjEwLHIxMSw2MSwwOwkJLyogaW5zZXJ0IGludG8gdG9wIDMgYml0cyAqLwlcCi0JLyogZG9uZSA2NGJpdCBtb2RlICovCQkJCQkJXAotCW1mc3ByCXIxMSxTUFJOX1NSUjA7CQkvKiBzYXZlIFNSUjAgKi8JCQlcCi0JTE9BRF9IQU5ETEVSKHIxMixsYWJlbCkJCQkJCQlcCi0Jb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkk7CQkJCVwKLQltdHNwcglTUFJOX1NSUjAscjEyOwkJCQkJCVwKLQltZnNwcglyMTIsU1BSTl9TUlIxOwkJLyogYW5kIFNSUjEgKi8JCQlcCi0JbXRzcHIJU1BSTl9TUlIxLHIxMDsJCQkJCQlcCi0JcmZpZDsJCQkJCQkJCVwKLQliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KLQogI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoYXJlYSwgbGFiZWwpCQkJCVwKIAlFWENFUFRJT05fUFJPTE9HXzEoYXJlYSk7CQkJCQlcCi0JY2xycmRpCXIxMixyMTMsMzI7CQkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCi0JbWZtc3IJcjEwOwkJCQkJCQlcCisJbGQJcjEyLFBBQ0FLQkFTRShyMTMpOwkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCisJbGQJcjEwLFBBQ0FLTVNSKHIxMyk7CS8qIGdldCBNU1IgdmFsdWUgZm9yIGtlcm5lbCAqLwlcCiAJbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKIAlMT0FEX0hBTkRMRVIocjEyLGxhYmVsKQkJCQkJCVwKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSTsJCQkJXAogCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAogCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKIAltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKQEAgLTIxMCwxMSArMTc5LDEwIEBACiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMyhyMTMpOwkJCQlcCiAJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpOwkJCQlcCiAJc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpOwkJCQlcCi0JY2xycmRpCXIxMixyMTMsMzI7CQkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCi0JbWZtc3IJcjEwOwkJCQkJCQlcCisJbGQJcjEyLFBBQ0FLQkFTRShyMTMpOwkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCisJbGQJcjEwLFBBQ0FLTVNSKHIxMyk7CS8qIGdldCBNU1IgdmFsdWUgZm9yIGtlcm5lbCAqLwlcCiAJbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKIAlMT0FEX0hBTkRMRVIocjEyLGxhYmVsIyNfY29tbW9uKQkJCQlcCi0Jb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkk7CQkJCVwKIAltdHNwcglTUFJOX1NSUjAscjEyOwkJCQkJCVwKIAltZnNwcglyMTIsU1BSTl9TUlIxOwkJLyogYW5kIFNSUjEgKi8JCQlcCiAJbXRzcHIJU1BSTl9TUlIxLHIxMDsJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xiYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9sYmMuaAppbmRleCAzMDNmNTQ4Li42M2E0Zjc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xiYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGJjLmgKQEAgLTIzLDkgKzIzLDkgQEAKICNpZm5kZWYgX19BU01fRlNMX0xCQ19ICiAjZGVmaW5lIF9fQVNNX0ZTTF9MQkNfSAogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogc3RydWN0IGZzbF9sYmNfYmFuayB7CiAJX19iZTMyIGJyOyAgICAgICAgICAgICAvKio8IEJhc2UgUmVnaXN0ZXIgICovCkBAIC0yMjcsOSArMjI3LDYgQEAKIAl1OCByZXM4WzB4RjAwXTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmZzbF9sYmNfcmVnczsKLWV4dGVybiBzcGlubG9ja190IGZzbF9sYmNfbG9jazsKLQogLyoKICAqIEZTTCBVUE0gcm91dGluZXMKICAqLwpAQCAtMjY4LDQ0ICsyNjUsNyBAQAogCQljcHVfcmVsYXgoKTsKIH0KIAotLyoqCi0gKiBmc2xfdXBtX3J1bl9wYXR0ZXJuIC0gYWN0dWFsbHkgcnVuIGFuIFVQTSBwYXR0ZXJuCi0gKiBAdXBtOglwb2ludGVyIHRvIHRoZSBmc2xfdXBtIHN0cnVjdHVyZSBvYnRhaW5lZCB2aWEgZnNsX3VwbV9maW5kCi0gKiBAaW9fYmFzZToJcmVtYXBwZWQgcG9pbnRlciB0byB3aGVyZSBtZW1vcnkgYWNjZXNzIHNob3VsZCBoYXBwZW4KLSAqIEBtYXI6CU1BUiByZWdpc3RlciBjb250ZW50IGR1cmluZyBwYXR0ZXJuIGV4ZWN1dGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgZHVtbXkgd3JpdGUgdG8gdGhlIG1lbW9yeSBzcGVjaWZpZWQgYnkgdGhlIGlvX2Jhc2UsCi0gKiB0aHVzIFVQTSBwYXR0ZXJuIGFjdHVhbGx5IGV4ZWN1dGVkLiBOb3RlIHRoYXQgbWFyIHVzYWdlIGRlcGVuZHMgb24gdGhlCi0gKiBwcmUtcHJvZ3JhbW1lZCBBTVggYml0cyBpbiB0aGUgVVBNIFJBTS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZnNsX3VwbV9ydW5fcGF0dGVybihzdHJ1Y3QgZnNsX3VwbSAqdXBtLAotCQkJCSAgICAgIHZvaWQgX19pb21lbSAqaW9fYmFzZSwgdTMyIG1hcikKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOwotCi0Jb3V0X2JlMzIoJmZzbF9sYmNfcmVncy0+bWFyLCBtYXIgPDwgKDMyIC0gdXBtLT53aWR0aCkpOwotCi0Jc3dpdGNoICh1cG0tPndpZHRoKSB7Ci0JY2FzZSA4OgotCQlvdXRfOChpb19iYXNlLCAweDApOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlvdXRfYmUxNihpb19iYXNlLCAweDApOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlvdXRfYmUzMihpb19iYXNlLCAweDApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfbGJjX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19CitleHRlcm4gaW50IGZzbF91cG1fcnVuX3BhdHRlcm4oc3RydWN0IGZzbF91cG0gKnVwbSwgdm9pZCBfX2lvbWVtICppb19iYXNlLAorCQkJICAgICAgIHUzMiBtYXIpOwogCiAjZW5kaWYgLyogX19BU01fRlNMX0xCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCA1ZDk5YjY0OC4uOTFjNTg5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtODQsNyArODQsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKICNlbmRpZgotCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSk7CisJX19zZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwga21hcF9wdGUtaWR4LCBta19wdGUocGFnZSwgcHJvdCkpOwogCWZsdXNoX3RsYl9wYWdlKE5VTEwsIHZhZGRyKTsKIAogCXJldHVybiAodm9pZCopIHZhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3N2M3ZmEwLi4wODI2NmQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaApAQCAtNzExLDcgKzcxMSw3IEBACiAvKgogICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KICAqLwotI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKHBoeXNfYWRkcl90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAKIC8qIFdlIGRvIE5PVCB3YW50IHZpcnR1YWwgbWVyZ2luZywgaXQgd291bGQgcHV0IHRvbyBtdWNoIHByZXNzdXJlIG9uCiAgKiBvdXIgaW9tbXUgYWxsb2NhdG9yLiBJbnN0ZWFkLCB3ZSB3YW50IGRyaXZlcnMgdG8gYmUgc21hcnQgZW5vdWdoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggYTM3MmY3Ni4uMGE1MTM3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMjM2LDE1ICsyMzYsMjcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX2NyZWF0ZV9kaXJlY3RfbWFwcGluZyhzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QpOwogCiAvKioKLSAqIGlycV9yYWRpeF9yZXZtYXAgLSBGaW5kIGEgbGludXggdmlycSBmcm9tIGEgaHcgaXJxIG51bWJlci4KKyAqIGlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0IC0gSW5zZXJ0IGEgaHcgaXJxIHRvIGxpbnV4IHZpcnEgbnVtYmVyIG1hcHBpbmcuCisgKiBAaG9zdDogaG9zdCBvd25pbmcgdGhpcyBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIEB2aXJxOiBsaW51eCBpcnEgbnVtYmVyCisgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCisgKgorICogVGhpcyBpcyBmb3IgdXNlIGJ5IGlycSBjb250cm9sbGVycyB0aGF0IHVzZSBhIHJhZGl4IHRyZWUgcmV2ZXJzZQorICogbWFwcGluZyBmb3IgZmFzdCBsb29rdXAuCisgKi8KK2V4dGVybiB2b2lkIGlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CisKKy8qKgorICogaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAgLSBGaW5kIGEgbGludXggdmlycSBmcm9tIGEgaHcgaXJxIG51bWJlci4KICAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdAogICogQGh3aXJxOiBoYXJkd2FyZSBpcnEgbnVtYmVyIGluIHRoYXQgaG9zdCBzcGFjZQogICoKICAqIFRoaXMgaXMgYSBmYXN0IHBhdGgsIGZvciB1c2UgYnkgaXJxIGNvbnRyb2xsZXIgY29kZSB0aGF0IHVzZXMgcmFkaXggdHJlZQogICogcmV2bWFwcwogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGlycV9yYWRpeF9yZXZtYXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAotCQkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKTsKIAogLyoqCiAgKiBpcnFfbGluZWFyX3Jldm1hcCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyNjU1ZTJhLi4zNGI1MmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtODEsMTEgKzgxLDE3IEBACiAJc3RydWN0IHRsYmUgc2hhZG93X3RsYltQUEM0NHhfVExCX1NJWkVdOwogCS8qIFBhZ2VzIHdoaWNoIGFyZSByZWZlcmVuY2VkIGluIHRoZSBzaGFkb3cgVExCLiAqLwogCXN0cnVjdCBwYWdlICpzaGFkb3dfcGFnZXNbUFBDNDR4X1RMQl9TSVpFXTsKLQkvKiBDb3B5IG9mIHRoZSBob3N0J3MgVExCLiAqLwotCXN0cnVjdCB0bGJlIGhvc3RfdGxiW1BQQzQ0eF9UTEJfU0laRV07CisKKwkvKiBUcmFjayB3aGljaCBUTEIgZW50cmllcyB3ZSd2ZSBtb2RpZmllZCBpbiB0aGUgY3VycmVudCBleGl0LiAqLworCXU4IHNoYWRvd190bGJfbW9kW1BQQzQ0eF9UTEJfU0laRV07CiAKIAl1MzIgaG9zdF9zdGFjazsKIAl1MzIgaG9zdF9waWQ7CisJdTMyIGhvc3RfZGJjcjA7CisJdTMyIGhvc3RfZGJjcjE7CisJdTMyIGhvc3RfZGJjcjI7CisJdTMyIGhvc3RfaWFjWzRdOworCXUzMiBob3N0X21zcjsKIAogCXU2NCBmcHJbMzJdOwogCXUzMiBncHJbMzJdOwpAQCAtMTIzLDcgKzEyOSwxMSBAQAogCXUzMiBpdm9yWzE2XTsKIAl1MzIgaXZwcjsKIAl1MzIgcGlyOworCisJdTMyIHNoYWRvd19waWQ7CiAJdTMyIHBpZDsKKwl1MzIgc3dhcF9waWQ7CisKIAl1MzIgcHZyOwogCXUzMiBjY3IwOwogCXUzMiBjY3IxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggYThiMDY4Ny4uODkzMWJhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC02NCw2ICs2NCwxMCBAQAogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWVuZCwgdTMyIGFzaWQpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9wcml2X3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB1c2VybW9kZSk7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X3N3aXRjaF9waWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcGlkKTsKKworLyogWFhYIEJvb2sgRSBzcGVjaWZpYyAqLworZXh0ZXJuIHZvaWQga3ZtcHBjX3RsYmVfc2V0X21vZGlmaWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGkpOwogCiBleHRlcm4gdm9pZCBrdm1wcGNfY2hlY2tfYW5kX2RlbGl2ZXJfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCkBAIC05Miw0ICs5NiwxMiBAQAogCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG5ld19waWQpCit7CisJaWYgKHZjcHUtPmFyY2gucGlkICE9IG5ld19waWQpIHsKKwkJdmNwdS0+YXJjaC5waWQgPSBuZXdfcGlkOworCQl2Y3B1LT5hcmNoLnN3YXBfcGlkID0gMTsKKwl9Cit9CisKICNlbmRpZiAvKiBfX1BPV0VSUENfS1ZNX1BQQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDg5M2FhZmQuLjI3NDBjNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtODgsOCArODgsNiBAQAogCXVuc2lnbmVkIGxvbmcJKCp0Y2VfZ2V0KShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKIAkJCQkgICAgbG9uZyBpbmRleCk7CiAJdm9pZAkJKCp0Y2VfZmx1c2gpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKLQl2b2lkCQkoKnBjaV9kbWFfZGV2X3NldHVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQl2b2lkCQkoKnBjaV9kbWFfYnVzX3NldHVwKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAogCXZvaWQgX19pb21lbSAqCSgqaW9yZW1hcCkocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtMTAxLDYgKzk5LDkgQEAKICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCisJdm9pZAkJKCpwY2lfZG1hX2Rldl9zZXR1cCkoc3RydWN0IHBjaV9kZXYgKmRldik7CisJdm9pZAkJKCpwY2lfZG1hX2J1c19zZXR1cCkoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKIAlpbnQJCSgqcHJvYmUpKHZvaWQpOwogCXZvaWQJCSgqc2V0dXBfYXJjaCkodm9pZCk7IC8qIE9wdGlvbmFsLCBtYXkgYmUgTlVMTCAqLwogCXZvaWQJCSgqaW5pdF9lYXJseSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5MjA5Zjc1Li5lN2I5OWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIGlubGluZSBwZ3Byb3RfdCBhcmNoX3ZtX2dldF9wYWdlX3Byb3QodW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKLQlyZXR1cm4gKHZtX2ZsYWdzICYgVk1fU0FPKSA/IF9fcGdwcm90KF9QQUdFX1NBTykgOiAwOworCXJldHVybiAodm1fZmxhZ3MgJiBWTV9TQU8pID8gX19wZ3Byb3QoX1BBR0VfU0FPKSA6IF9fcGdwcm90KDApOwogfQogI2RlZmluZSBhcmNoX3ZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpIGFyY2hfdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKaW5kZXggYzJkZjUzYy4uNWE0NDE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCkBAIC00MzcsNyArNDM3LDcgQEAKIAl9KQogI2VuZGlmIC8qIDEgKi8KIAotLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMgPj0gS0VSTkVMQkFTRSAqLworLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMgPj0gUEFHRV9PRkZTRVQgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfa2VybmVsX3ZzaWQodW5zaWduZWQgbG9uZyBlYSwgaW50IHNzaXplKQogewogCWlmIChzc2l6ZSA9PSBNTVVfU0VHU0laRV8yNTZNKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKaW5kZXggZmU1NjZhMy4uMzRkOWFjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAvKgogICogR2xvYmFsIHJlZ2lzdGVycwpAQCAtMzAxLDggKzMwMiw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCi0Jc3BpbmxvY2tfdAkJYml0bWFwX2xvY2s7Ci0JdW5zaWduZWQgbG9uZwkJKmh3aXJxX2JpdG1hcDsKKwlzdHJ1Y3QgbXNpX2JpdG1hcAltc2lfYml0bWFwOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fUkVHUkVBRApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21zaV9iaXRtYXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tc2lfYml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhYzNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tc2lfYml0bWFwLmgKQEAgLTAsMCArMSwzNSBAQAorI2lmbmRlZiBfUE9XRVJQQ19TWVNERVZfTVNJX0JJVE1BUF9ICisjZGVmaW5lIF9QT1dFUlBDX1NZU0RFVl9NU0lfQklUTUFQX0gKKworLyoKKyAqIENvcHlyaWdodCAyMDA4LCBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0cnVjdCBtc2lfYml0bWFwIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CisJdW5zaWduZWQgbG9uZwkJKmJpdG1hcDsKKwlzcGlubG9ja190CQlsb2NrOworCXVuc2lnbmVkIGludAkJaXJxX2NvdW50OworfTsKKworaW50IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIGludCBudW0pOwordm9pZCBtc2lfYml0bWFwX2ZyZWVfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgdW5zaWduZWQgaW50IG51bSk7Cit2b2lkIG1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaHdpcnEpOworCitpbnQgbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wKTsKKworaW50IG1zaV9iaXRtYXBfYWxsb2Moc3RydWN0IG1zaV9iaXRtYXAgKmJtcCwgdW5zaWduZWQgaW50IGlycV9jb3VudCwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOwordm9pZCBtc2lfYml0bWFwX2ZyZWUoc3RydWN0IG1zaV9iaXRtYXAgKmJtcCk7CisKKyNlbmRpZiAvKiBfUE9XRVJQQ19TWVNERVZfTVNJX0JJVE1BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmgKaW5kZXggM2MxMjM5OS4uYTY0ZGViZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaApAQCAtMjQsOCArMjQsNSBAQAogZXh0ZXJuIGludCBvZl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwogCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfT0ZfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9wbGF0Zm9ybS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKaW5kZXggMTg2NTllZi4uNTNiNDY1MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKQEAgLTExLDkgKzExLDYgQEAKICAqCiAgKi8KIAotLyogVGhpcyBpcyBqdXN0IGhlcmUgZHVyaW5nIHRoZSB0cmFuc2l0aW9uICovCi0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQogLyogUGxhdGZvcm0gZHJpdmVycyByZWdpc3Rlci91bnJlZ2lzdGVyICovCiBzdGF0aWMgaW5saW5lIGludCBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggNjQ5M2EzOS4uMDgyYjNhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC02Miw2ICs2Miw4IEBACiAJdTE2IHBhY2FfaW5kZXg7CQkJLyogTG9naWNhbCBwcm9jZXNzb3IgbnVtYmVyICovCiAKIAl1NjQga2VybmVsX3RvYzsJCQkvKiBLZXJuZWwgVE9DIGFkZHJlc3MgKi8KKwl1NjQga2VybmVsYmFzZTsJCQkvKiBCYXNlIGFkZHJlc3Mgb2Yga2VybmVsICovCisJdTY0IGtlcm5lbF9tc3I7CQkJLyogTVNSIHdoaWxlIHJ1bm5pbmcgaW4ga2VybmVsICovCiAJdTY0IHN0YWJfcmVhbDsJCQkvKiBBYnNvbHV0ZSBhZGRyZXNzIG9mIHNlZ21lbnQgdGFibGUgKi8KIAl1NjQgc3RhYl9hZGRyOwkJCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBzZWdtZW50IHRhYmxlICovCiAJdm9pZCAqZW1lcmdlbmN5X3NwOwkJLyogcG9pbnRlciB0byBlbWVyZ2VuY3kgc3RhY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDk0ZmU1MTMuLjVhYzUxZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNzUsMTUgKzc1LDIxIEBACiAjZGVmaW5lIFBBR0VfT0ZGU0VUCUFTTV9DT05TVChDT05GSUdfUEFHRV9PRkZTRVQpCiAjZGVmaW5lIExPQURfT0ZGU0VUCUFTTV9DT05TVCgoQ09ORklHX0tFUk5FTF9TVEFSVC1DT05GSUdfUEhZU0lDQUxfU1RBUlQpKQogCi0jaWYgZGVmaW5lZChDT05GSUdfUkVMT0NBVEFCTEUpICYmIGRlZmluZWQoQ09ORklHX0ZMQVRNRU0pCisjaWYgZGVmaW5lZChDT05GSUdfUkVMT0NBVEFCTEUpCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHBoeXNfYWRkcl90IG1lbXN0YXJ0X2FkZHI7CiBleHRlcm4gcGh5c19hZGRyX3Qga2VybnN0YXJ0X2FkZHI7CiAjZW5kaWYKICNkZWZpbmUgUEhZU0lDQUxfU1RBUlQJa2VybnN0YXJ0X2FkZHIKLSNkZWZpbmUgTUVNT1JZX1NUQVJUCW1lbXN0YXJ0X2FkZHIKICNlbHNlCiAjZGVmaW5lIFBIWVNJQ0FMX1NUQVJUCUFTTV9DT05TVChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBNRU1PUllfU1RBUlQJMFVMCisjZWxpZiBkZWZpbmVkKENPTkZJR19SRUxPQ0FUQUJMRSkKKyNkZWZpbmUgTUVNT1JZX1NUQVJUCW1lbXN0YXJ0X2FkZHIKKyNlbHNlCiAjZGVmaW5lIE1FTU9SWV9TVEFSVAkoUEhZU0lDQUxfU1RBUlQgKyBQQUdFX09GRlNFVCAtIEtFUk5FTEJBU0UpCiAjZW5kaWYKIApAQCAtOTYsOCArMTAyLDggQEAKICNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCi0jZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBIWVNJQ0FMX1NUQVJUICsgS0VSTkVMQkFTRSkpCi0jZGVmaW5lIF9fcGEoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSArIFBIWVNJQ0FMX1NUQVJUIC0gS0VSTkVMQkFTRSkKKyNkZWZpbmUgX192YSh4KSAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUEFHRV9PRkZTRVQgLSBNRU1PUllfU1RBUlQpKQorI2RlZmluZSBfX3BhKHgpICgodW5zaWduZWQgbG9uZykoeCkgLSBQQUdFX09GRlNFVCArIE1FTU9SWV9TVEFSVCkKIAogLyoKICAqIFVuZm9ydHVuYXRlbHkgdGhlIFBMVCBpcyBpbiB0aGUgQlNTIGluIHRoZSBQUEMzMiBFTEYgQUJJLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKaW5kZXggZWJmYWU1My4uZDc3MDcyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCkBAIC0xMywxMCArMTMsMTYgQEAKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKyNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAk0CS8qIG9mZnNldCBvZiBQVEUgZmxhZ3MsIGluIGJ5dGVzICovCisjZWxzZQorI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTAKKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKICAqIFRoZSBiYXNpYyB0eXBlIG9mIGEgUFRFIC0gNjQgYml0cyBmb3IgdGhvc2UgQ1BVcyB3aXRoID4gMzIgYml0Ci0gKiBwaHlzaWNhbCBhZGRyZXNzaW5nLiAgRm9yIG5vdyB0aGlzIGp1c3QgdGhlIElCTSBQUEM0NDAuCisgKiBwaHlzaWNhbCBhZGRyZXNzaW5nLgogICovCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX2Jhc2ljX3Q7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYTA1YTk0Mi4uMGU1MmM3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNjAsNiArNjAsMTQgQEAKIAlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyk7CitleHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpOworI2Vsc2UJLyogQ09ORklHX1BDSSAqLworI2RlZmluZSBzZXRfcGNpX2RtYV9vcHMoZCkKKyNkZWZpbmUgZ2V0X3BjaV9kbWFfb3BzKCkJTlVMTAorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFBDNjQKIAogLyoKQEAgLTcwLDkgKzc4LDYgQEAKICNkZWZpbmUgUENJX0RJU0FCTEVfTVdJCiAKICNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyk7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKnN0cmF0ZWd5X3BhcmFtZXRlcikKQEAgLTg5LDkgKzk0LDYgQEAKIAkqc3RyYXQgPSBQQ0lfRE1BX0JVUlNUX01VTFRJUExFOwogCSpzdHJhdGVneV9wYXJhbWV0ZXIgPSBjYWNoZWxpbmVfc2l6ZTsKIH0KLSNlbHNlCS8qIENPTkZJR19QQ0kgKi8KLSNkZWZpbmUgc2V0X3BjaV9kbWFfb3BzKGQpCi0jZGVmaW5lIGdldF9wY2lfZG1hX29wcygpCU5VTEwKICNlbmRpZgogCiAjZWxzZSAvKiAzMi1iaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCmluZGV4IDZmZTM5ZTMuLjZhYjdjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaApAQCAtMjYxLDYgKzI2MSw3IEBACiAjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDAwMDA0CQkvKiBIOiBFeGVjdXRlIHBlcm1pc3Npb24gKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAwMDAwOAkJLyogUzogUGFnZSByZWZlcmVuY2VkICovCiAjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDAwMTAJCS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwMDIwCQkvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAwMDQwCQkvKiBTOiBVc2VyIHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwMDAwODAJCS8qIEg6IEUgYml0ICovCiAjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDAwMDEwMAkJLyogSDogRyBiaXQgKi8KQEAgLTI3Niw2ICsyNzcsNyBAQAogLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLwogI2RlZmluZSBfUFRFX05PTkVfTUFTSwkweGZmZmZmZmZmMDAwMDAwMDBVTEwKIAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAvKgpAQCAtMzA1LDYgKzMwNyw3IEBACiAjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLwogI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCiAKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCiAvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCkBAIC0zMTUsNiArMzE4LDggQEAKICNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKICNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCiAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQogLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLwpAQCAtMzYyLDggKzM2NywxNCBAQAogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KICNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KICNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCiAKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisvKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCisjZWxzZQogI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjZW5kaWYKIAogI2RlZmluZSBfUE1EX1BSRVNFTlQJMAogI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQpAQCAtMzcyLDYgKzM4Myw4IEBACiAvKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KICNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKIAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorCiAjZW5kaWYKIAogLyoKQEAgLTQwNCw2ICs0MTcsOSBAQAogI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKICNlbmRpZgorI2lmbmRlZiBfUEFHRV9TUEVDSUFMCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAorI2VuZGlmCiAjaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAogI2VuZGlmCkBAIC00MTUsMTEgKzQzMSwxMSBAQAogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKIAogCi0jZGVmaW5lIFBBR0VfUFJPVF9CSVRTCV9fcGdwcm90KF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAotCQkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBcCi0JCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKLQkJCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCi0JCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCisjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKKwkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBcCisJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgXAorCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCiAvKgogICogTm90ZTogdGhlIF9QQUdFX0NPSEVSRU5UIGJpdCBhdXRvbWF0aWNhbGx5IGdldHMgc2V0IGluIHRoZSBoYXJkd2FyZQogICogUFRFIGlmIENPTkZJR19TTVAgaXMgZGVmaW5lZCAoaGFzaF9wYWdlIGRvZXMgdGhpcyk7IHRoZXJlIGlzIG5vIG5lZWQKQEAgLTUxNyw3ICs1MzMsOCBAQAogCiAjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQogI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlkbyB7IHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKSBcCisJZG8geyBwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCAwKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKICNkZWZpbmUJcG1kX2JhZChwbWQpCQkocG1kX3ZhbChwbWQpICYgX1BNRF9CQUQpCkBAIC01MzMsNyArNTUwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfU1BFQ0lBTDsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VuY2FjaGUocHRlX3QgcHRlKSAgICAgICB7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9OT19DQUNIRTsgfQogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jYWNoZShwdGVfdCBwdGUpICAgICAgICAgeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX05PX0NBQ0hFOyB9CkBAIC01NTIsMTAgKzU2OSwxMCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKIAlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpIHsKLQlyZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BncHJvdChwdGVfdCBwdGUpCisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSkgJiBQQUdFX1BST1RfQklUUzsKKwlyZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQpAQCAtNTc1LDYgKzU5MiwxMCBAQAogZXh0ZXJuIHZvaWQgYWRkX2hhc2hfcGFnZSh1bnNpZ25lZCBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHZhLAogCQkJICB1bnNpZ25lZCBsb25nIHBtZHZhbCk7CiAKKy8qIEZsdXNoIGFuIGVudHJ5IGZyb20gdGhlIFRMQi9oYXNoIHRhYmxlICovCitleHRlcm4gdm9pZCBmbHVzaF9oYXNoX2VudHJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKwogLyoKICAqIEF0b21pYyBQVEUgdXBkYXRlcy4KICAqCkBAIC02MTIsOSArNjMzLDYgQEAKIAlyZXR1cm4gb2xkOwogfQogI2Vsc2UgLyogQ09ORklHX1BURV82NEJJVCAqLwotLyogVE9ETzogQ2hhbmdlIHRoYXQgdG8gb25seSBtb2RpZnkgdGhlIGxvdyB3b3JkIGFuZCBtb3ZlIHNldF9wdGVfYXQoKQotICogb3V0IG9mIGxpbmUKLSAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX3VwZGF0ZShwdGVfdCAqcCwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzZXQpCkBAIC02NTIsMTQgKzY3MCwzNiBAQAogICogT24gbWFjaGluZXMgd2hpY2ggdXNlIGFuIE1NVSBoYXNoIHRhYmxlIHdlIGF2b2lkIGNoYW5naW5nIHRoZQogICogX1BBR0VfSEFTSFBURSBiaXQuCiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKyNpZiAoX1BBR0VfSEFTSFBURSAhPSAwKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgcHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeShtbSwgcHRlcCwgYWRkcik7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorCQlzdHclVTAlWDAgJTIsJTBcblwKKwkJZWllaW9cblwKKwkJc3R3JVUwJVgwICVMMiwlMSIKKwk6ICI9bSIgKCpwdGVwKSwgIj1tIiAoKigodW5zaWduZWQgY2hhciAqKXB0ZXArNCkpCisJOiAiciIgKHB0ZSkgOiAibWVtb3J5Iik7CisjZWxzZQorCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKLSNpZiBfUEFHRV9IQVNIUFRFICE9IDAKLQlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7Ci0jZWxzZQotCSpwdGVwID0gcHRlOworI2lmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKICNlbmRpZgorCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IDQ1OTdjNDkuLjRjMGE4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMTE3LDEwICsxMTcsMTAgQEAKICNkZWZpbmUgUEFHRV9BR1AJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUpCiAjZGVmaW5lIEhBVkVfUEFHRV9BR1AKIAotI2RlZmluZSBQQUdFX1BST1RfQklUUwlfX3BncHJvdChfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCi0JCQkJIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfV1JJVEVUSFJVIHwgXAotCQkJCSBfUEFHRV80S19QRk4gfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBcCi0gCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IFwKKwkJCSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX1dSSVRFVEhSVSB8CQlcCisJCQkgX1BBR0VfNEtfUEZOIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJCVwKKwkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKIC8qIFBURUlEWCBuaWJibGUgKi8KICNkZWZpbmUgX1BURUlEWF9TRUNPTkRBUlkJMHg4CiAjZGVmaW5lIF9QVEVJRFhfR1JPVVBfSVgJMHg3CkBAIC0yNjQsOSArMjY0LDkgQEAKIAlyZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGdwcm90KHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSkgJiBQQUdFX1BST1RfQklUUzsKKwlyZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOwogfQogCiAvKiBBdG9taWMgUFRFIHVwZGF0ZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCmluZGV4IDA5NjY4OTkuLmM0YTAyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaApAQCAtMjY4LDcgKzI2OCw3IEBACiAgKiAgIExvYWRzIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAnZXhwcicgaW50byByZWdpc3RlciAncm4nCiAgKiAgIHVzaW5nIGltbWVkaWF0ZSBpbnN0cnVjdGlvbnMgb25seS4gIFVzZSB0aGlzIHdoZW4gaXQncyBpbXBvcnRhbnQgbm90CiAgKiAgIHRvIHJlZmVyZW5jZSBvdGhlciBkYXRhIChpLmUuIG9uIHBwYzY0IHdoZW4gdGhlIFRPQyBwb2ludGVyIGlzIG5vdAotICogICB2YWxpZCkuCisgKiAgIHZhbGlkKSBhbmQgd2hlbiAnZXhwcicgaXMgYSBjb25zdGFudCBvciBhYnNvbHV0ZSBhZGRyZXNzLgogICoKICAqIExPQURfUkVHX0FERFIocm4sIG5hbWUpCiAgKiAgIExvYWRzIHRoZSBhZGRyZXNzIG9mIGxhYmVsICduYW1lJyBpbnRvIHJlZ2lzdGVyICdybicuICBVc2UgdGhpcyB3aGVuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCmluZGV4IGZkYTk4NzEuLjVhYTIyY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCkBAIC02NzgsNiArNjc4LDggQEAKIAl1OCBidWZbUFMzQVZfUEtUX0FWQl9QQVJBTV9NQVhfQlVGX1NJWkVdOwogfTsKIAorLyogY2hhbm5lbCBzdGF0dXMgKi8KK2V4dGVybiB1OCBwczNhdl9tb2RlX2NzX2luZm9bXTsKIAogLyoqIGNvbW1hbmQgc3RhdHVzICoqLwogI2RlZmluZSBQUzNBVl9TVEFUVVNfU1VDQ0VTUwkJCTB4MDAwMAkvKiBzdWNjZXNzICovCkBAIC03MzUsNiArNzM3LDcgQEAKIGV4dGVybiBpbnQgcHMzYXZfdmlkZW9fbW9kZTJyZXModTMyLCB1MzIgKiwgdTMyICopOwogZXh0ZXJuIGludCBwczNhdl92aWRlb19tdXRlKGludCk7CiBleHRlcm4gaW50IHBzM2F2X2F1ZGlvX211dGUoaW50KTsKK2V4dGVybiBpbnQgcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coaW50KTsKIGV4dGVybiBpbnQgcHMzYXZfZGV2X29wZW4odm9pZCk7CiBleHRlcm4gaW50IHBzM2F2X2Rldl9jbG9zZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBzM2F2X3JlZ2lzdGVyX2ZsaXBfY3RsKHZvaWQgKCpmbGlwX2N0bCkoaW50IG9uLCB2b2lkICpkYXRhKSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCBiZTk4MGY0Li42NzQ1Mzc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0xMDksNiArMTA5LDcgQEAKICNkZWZpbmUgU1BSTl9FVlBSCTB4M0Q2CS8qIEV4Y2VwdGlvbiBWZWN0b3IgUHJlZml4IFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fTDFDU1IwCTB4M0YyCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fTDFDU1IxCTB4M0YzCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTU1VQ1NSMAkweDNGNAkvKiBNTVUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9QSVQJMHgzREIJLyogUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyICovCiAjZGVmaW5lIFNQUk5fQlVDU1IJMHgzRjUJLyogQnJhbmNoIFVuaXQgQ29udHJvbCBhbmQgU3RhdHVzICovCiAjZGVmaW5lIFNQUk5fTDJDU1IwCTB4M0Y5CS8qIEwyIERhdGEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KQEAgLTQxMCw2ICs0MTEsMTIgQEAKICNkZWZpbmUgTDJDU1IwX0wyTE9BCTB4MDAwMDAwODAJLyogTDIgQ2FjaGUgTG9jayBPdmVyZmxvdyBBbGxvY2F0ZSAqLwogI2RlZmluZSBMMkNTUjBfTDJMTwkweDAwMDAwMDIwCS8qIEwyIENhY2hlIExvY2sgT3ZlcmZsb3cgKi8KIAorLyogQml0IGRlZmluaXRpb25zIGZvciBNTVVDU1IwICovCisjZGVmaW5lIE1NVUNTUjBfVExCMUZJCTB4MDAwMDAwMDIJLyogVExCMSBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCMEZJCTB4MDAwMDAwMDQJLyogVExCMCBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCMkZJCTB4MDAwMDAwNDAJLyogVExCMiBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCM0ZJCTB4MDAwMDAwMjAJLyogVExCMyBGbGFzaCBpbnZhbGlkYXRlICovCisKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgU0dSLiAqLwogI2RlZmluZSBTR1JfTk9STUFMCTAJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGFsbG93ZWQuICovCiAjZGVmaW5lIFNHUl9HVUFSREVECTEJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGRpc2FsbG93ZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDA3OTU2ZjMuLjZmYmNlNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xOCw2ICsxOCwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvdmVybGFwc19rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlyZXR1cm4gc3RhcnQgPCAodW5zaWduZWQgbG9uZylfX2luaXRfZW5kICYmCisJCSh1bnNpZ25lZCBsb25nKV9zdGV4dCA8IGVuZDsKK30KKwogI3VuZGVmIGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcih2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2ZwLW1hY2hpbmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZnAtbWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDM0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2ZwLW1hY2hpbmUuaApAQCAtMCwwICsxLDM1MyBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuICBQUEMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCisgICBBY3R1YWxseSwgdGhpcyBpcyBhIFBQQyAoMzJiaXQpIHZlcnNpb24sIHdyaXR0ZW4gYmFzZWQgb24gdGhlCisgICBpMzg2LCBzcGFyYywgYW5kIHNwYXJjNjQgdmVyc2lvbnMsIGJ5IG1lLAorICAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisgICBDb21tZW50cyBhcmUgYnkgYW5kIGxhcmdlIGFsc28gbWluZSwgYWx0aG91Z2ggdGhleSBtYXkgYmUgaW5hY2N1cmF0ZS4KKworICAgSW4gcGlja2luZyBvdXQgYXNtIGZyYWdtZW50cyBJJ3ZlIGdvbmUgd2l0aCB0aGUgbG93ZXN0IGNvbW1vbgorICAgZGVub21pbmF0b3IsIHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSB0aGUgaGFyZHdhcmUgSSBoYXZlIDotPgorICAgVGhhdCBpcywgYSBTUEFSQyB3aXRob3V0IGhhcmR3YXJlIG11bHRpcGx5IGFuZCBkaXZpZGUuCisgKi8KKworLyogYmFzaWMgd29yZCBzaXplIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKKyNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZworI2RlZmluZSBfRlBfV1NfVFlQRQkJc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX0lfVFlQRQkJbG9uZworCisjZGVmaW5lIF9fbGxfQgkJCSgoVVd0eXBlKSAxIDw8IChXX1RZUEVfU0laRSAvIDIpKQorI2RlZmluZSBfX2xsX2xvd3BhcnQodCkJCSgoVVd0eXBlKSAodCkgJiAoX19sbF9CIC0gMSkpCisjZGVmaW5lIF9fbGxfaGlnaHBhcnQodCkJKChVV3R5cGUpICh0KSA+PiAoV19UWVBFX1NJWkUgLyAyKSkKKworLyogWW91IGNhbiBvcHRpb25hbGx5IGNvZGUgc29tZSB0aGluZ3MgbGlrZSBhZGRpdGlvbiBpbiBhc20uIEZvcgorICogZXhhbXBsZSwgaTM4NiBkZWZpbmVzIF9fRlBfRlJBQ19BRERfMiBhcyBhc20uIElmIHlvdSBkb24ndAorICogdGhlbiB5b3UgZ2V0IGEgZnJhZ21lbnQgb2YgQyBjb2RlIFtpZiB5b3UgY2hhbmdlIGFuICNpZmRlZiAwCisgKiBpbiBvcC0yLmhdIG9yIGEgY2FsbCB0byBhZGRfc3NhYWFhIChzZWUgYmVsb3cpLgorICogR29vZCBwbGFjZXMgdG8gbG9vayBmb3IgYXNtIGZyYWdtZW50cyB0byB1c2UgYXJlIGdjYyBhbmQgZ2xpYmMuCisgKiBnY2MncyBsb25nbG9uZy5oIGlzIHVzZWZ1bC4KKyAqLworCisvKiBXZSBuZWVkIHRvIGtub3cgaG93IHRvIG11bHRpcGx5IGFuZCBkaXZpZGUuIElmIHRoZSBob3N0IHdvcmQgc2l6ZQorICogaXMgPj0gMipmcmFjYml0cyB5b3UgY2FuIHVzZSBGUF9NVUxfTUVBVF9uX2ltbSh0LFIsWCxZKSB3aGljaAorICogY29kZXMgdGhlIG11bHRpcGx5IHdpdGggd2hhdGV2ZXIgZ2NjIGRvZXMgdG8gJ2EgKiBiJy4KKyAqIF9GUF9NVUxfTUVBVF9uX3dpZGUodCxSLFgsWSxmKSBpcyB1c2VkIHdoZW4geW91IGhhdmUgYW4gYXNtCisgKiBmdW5jdGlvbiB0aGF0IGNhbiBtdWx0aXBseSB0d28gMVcgdmFsdWVzIGFuZCBnZXQgYSAyVyByZXN1bHQuCisgKiBPdGhlcndpc2UgeW91J3JlIHN0dWNrIHdpdGggX0ZQX01VTF9NRUFUX25faGFyZCh0LFIsWCxZKSB3aGljaAorICogZG9lcyBiaXRzaGlmdGluZyB0byBhdm9pZCBvdmVyZmxvdy4KKyAqIEZvciBkaXZpc2lvbiB0aGVyZSBpcyBGUF9ESVZfTUVBVF9uX2ltbSh0LFIsWCxZLGYpIGZvciB3b3JkIHNpemUKKyAqID49IDIqZnJhY2JpdHMsIHdoZXJlIGYgaXMgZWl0aGVyIF9GUF9ESVZfSEVMUF9pbW0gb3IKKyAqIF9GUF9ESVZfSEVMUF9sZGl2IChzZWUgb3AtMS5oKS4KKyAqIF9GUF9ESVZfTUVBVF91ZGl2KCkgaXMgaWYgeW91IGhhdmUgYXNtIHRvIGRvIDJXLzFXID0+ICgxVywgMVcpLgorICogW0dDQyBhbmQgZ2xpYmMgaGF2ZSBsb25nbG9uZy5oIHdoaWNoIGhhcyB0aGUgYXNtIG1hY3JvIHVkaXZfcXJubmQKKyAqIHRvIGRvIHRoaXMuXQorICogSW4gZ2VuZXJhbCwgJ24nIGlzIHRoZSBudW1iZXIgb2Ygd29yZHMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgdHlwZSwKKyAqIGFuZCAndCcgaXMgZWl0aGVyIFMsIEQgb3IgUSBmb3Igc2luZ2xlL2RvdWJsZS9xdWFkLgorICogICAgICAgICAgIC0tIFBNTQorICovCisvKiBFeGFtcGxlOiBTUEFSQzY0OgorICogI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJX0ZQX01VTF9NRUFUXzFfaW1tKFMsUixYLFkpCisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKQlfRlBfTVVMX01FQVRfMV93aWRlKEQsUixYLFksdW11bF9wcG1tKQorICogI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJX0ZQX01VTF9NRUFUXzJfd2lkZShRLFIsWCxZLHVtdWxfcHBtbSkKKyAqCisgKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV9pbW0oUyxSLFgsWSxfRlBfRElWX0hFTFBfaW1tKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihELFIsWCxZKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfUShSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChRLFIsWCxZKQorICoKKyAqIEV4YW1wbGU6IGkzODY6CisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8xX3dpZGUoUyxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoRCxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCisgKgorICogI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkgICBfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFksX2kzODZfZGl2XzY0XzMyKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkgICBfRlBfRElWX01FQVRfMl91ZGl2XzY0KEQsUixYLFkpCisgKi8KKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkgICBfRlBfTVVMX01FQVRfMV93aWRlKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSx1bXVsX3BwbW0pCisjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKworI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZKQorI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdihELFIsWCxZKQorCisvKiBUaGVzZSBtYWNyb3MgZGVmaW5lIHdoYXQgTmFOIGxvb2tzIGxpa2UuIFRoZXkncmUgc3VwcG9zZWQgdG8gZXhwYW5kIHRvCisgKiBhIGNvbW1hLXNlcGFyYXRlZCBzZXQgb2YgMzJiaXQgdW5zaWduZWQgaW50cyB0aGF0IGVuY29kZSBOYU4uCisgKi8KKyNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSksIC0xCisjZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMSwgLTEsIC0xCisjZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCisKKyNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gIFdlIHVzZSB0aGUgYml0IHBvc2l0aW9ucyBvZiB0aGUgYXBwcm9wcmlhdGUgYml0cworICAgaW4gdGhlIEZQU0NSLCB3aGljaCBhbHNvIGNvcnJlc3BvbmQgdG8gdGhlIEZFXyogYml0cy4gIFRoaXMgbWFrZXMKKyAgIGV2ZXJ5dGhpbmcgZWFzaWVyIDstKS4gICovCisjZGVmaW5lIEZQX0VYX0lOVkFMSUQgICAgICAgICAoMSA8PCAoMzEgLSAyKSkKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9TTkFOCUVGTEFHX1ZYU05BTgorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lTSQlFRkxBR19WWElTSQorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lESQlFRkxBR19WWElESQorI2RlZmluZSBGUF9FWF9JTlZBTElEX1pEWglFRkxBR19WWFpEWgorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lNWglFRkxBR19WWElNWgorI2RlZmluZSBGUF9FWF9PVkVSRkxPVyAgICAgICAgKDEgPDwgKDMxIC0gMykpCisjZGVmaW5lIEZQX0VYX1VOREVSRkxPVyAgICAgICAoMSA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgRlBfRVhfRElWWkVSTyAgICAgICAgICgxIDw8ICgzMSAtIDUpKQorI2RlZmluZSBGUF9FWF9JTkVYQUNUICAgICAgICAgKDEgPDwgKDMxIC0gNikpCisKKy8qIFRoaXMgbWFjcm8gYXBwZWFycyB0byBiZSBjYWxsZWQgd2hlbiBib3RoIFggYW5kIFkgYXJlIE5hTnMsIGFuZAorICogaGFzIHRvIGNob29zZSBvbmUgYW5kIGNvcHkgaXQgdG8gUi4gaTM4NiBnb2VzIGZvciB0aGUgbGFyZ2VyIG9mIHRoZQorICogdHdvLCBzcGFyYzY0IGp1c3QgcGlja3MgWS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgYXQgYWxsIHNvIEknbGwKKyAqIGdvIHdpdGggc3BhcmM2NCBiZWNhdXNlIGl0J3Mgc2hvcnRlciA6LT4gICAtLSBQTU0KKyAqLworI2RlZmluZSBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSwgT1ApCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIFIjI19zID0gWSMjX3M7CQkJCQlcCisgICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWSk7CQkJCVwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgX19GUFVfRlBTQ1IJKGN1cnJlbnQtPnRocmVhZC5mcHNjci52YWwpCisKKy8qIFdlIG9ubHkgYWN0dWFsbHkgd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisgKiBpZiBleGNlcHRpb25zIHNpZ25hbGxlZCAoaWYgYW55KSB3aWxsIG5vdCB0cmFwLgorICovCisjZGVmaW5lIF9fRlBVX0VOQUJMRURfRVhDIFwKKyh7CQkJCQkJXAorCShfX0ZQVV9GUFNDUiA+PiAzKSAmIDB4MWY7CVwKK30pCisKKyNkZWZpbmUgX19GUFVfVFJBUF9QKGJpdHMpIFwKKwkoKF9fRlBVX0VOQUJMRURfRVhDICYgKGJpdHMpKSAhPSAwKQorCisjZGVmaW5lIF9fRlBfUEFDS19TKHZhbCxYKQkJCVwKKyh7ICBpbnQgX19leGMgPSBfRlBfUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCisgICAgaWYoIV9fZXhjIHx8ICFfX0ZQVV9UUkFQX1AoX19leGMpKQkJXAorICAgICAgICBfRlBfUEFDS19SQVdfMV9QKFMsdmFsLFgpOwkJXAorICAgIF9fZXhjOwkJCQkJXAorfSkKKworI2RlZmluZSBfX0ZQX1BBQ0tfRCh2YWwsWCkJCQlcCisgICBkbyB7CQkJCQkJCQkJXAorCV9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsJCQkJCVwKKwlpZiAoIUZQX0NVUl9FWENFUFRJT05TIHx8ICFfX0ZQVV9UUkFQX1AoRlBfQ1VSX0VYQ0VQVElPTlMpKQlcCisJCV9GUF9QQUNLX1JBV18yX1AoRCwgdmFsLCBYKTsJCQkJXAorICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0ZQX1BBQ0tfRFModmFsLFgpCQkJCQkJCVwKKyAgIGRvIHsJCQkJCQkJCQkJXAorCSAgIEZQX0RFQ0xfUyhfX1gpOwkJCQkJCQlcCisJICAgRlBfQ09OVihTLCBELCAxLCAyLCBfX1gsIFgpOwkJCQkJCVwKKwkgICBfRlBfUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsJCQkJCVwKKwkgICBpZiAoIUZQX0NVUl9FWENFUFRJT05TIHx8ICFfX0ZQVV9UUkFQX1AoRlBfQ1VSX0VYQ0VQVElPTlMpKSB7CVwKKwkJICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsJCQkJXAorCQkgICBGUF9DT05WKEQsIFMsIDIsIDEsIFgsIF9fWCk7CQkJCQlcCisJCSAgIF9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsJCQkJCVwKKwkJICAgaWYgKCFGUF9DVVJfRVhDRVBUSU9OUyB8fCAhX19GUFVfVFJBUF9QKEZQX0NVUl9FWENFUFRJT05TKSkJXAorCQkgICBfRlBfUEFDS19SQVdfMl9QKEQsIHZhbCwgWCk7CQkJCQlcCisJICAgfQkJCQkJCQkJCVwKKyAgIH0gd2hpbGUgKDApCisKKy8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLworI2RlZmluZSBGUF9ST1VORE1PREUJCQlcCisoewkJCQkJXAorCV9fRlBVX0ZQU0NSICYgMHgzOwkJXAorfSkKKworLyogdGhlIGFzbSBmcmFnbWVudHMgZ28gaGVyZTogYWxsIHRoZXNlIGFyZSB0YWtlbiBmcm9tIGdsaWJjLTIuMC41J3MKKyAqIHN0ZGxpYi9sb25nbG9uZy5oCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKiBhZGRfc3NhYWFhIGlzIHVzZWQgaW4gb3AtMi5oIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bworICogI2RlZmluZSBhZGRfc3NhYWFhKHNoLHNsLGFoLGFsLGJoLGJsKSAoc2ggPSBhaCtiaCsgKCggc2wgPSBhbCtibCkgPCBhbCkpCisgKiBhZGRfc3NhYWFhKGhpZ2hfc3VtLCBsb3dfc3VtLCBoaWdoX2FkZGVuZF8xLCBsb3dfYWRkZW5kXzEsCisgKiBoaWdoX2FkZGVuZF8yLCBsb3dfYWRkZW5kXzIpIGFkZHMgdHdvIFVXdHlwZSBpbnRlZ2VycywgY29tcG9zZWQgYnkKKyAqIEhJR0hfQURERU5EXzEgYW5kIExPV19BRERFTkRfMSwgYW5kIEhJR0hfQURERU5EXzIgYW5kIExPV19BRERFTkRfMgorICogcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9TVU0gYW5kIExPV19TVU0uICBPdmVyZmxvdworICogKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLCBhbmQgaXMgbG9zdC4KKyAqLworI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09IDApCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7YSVJNHxhZGQlSTRjfSAlMSwlMywlNFxuXHR7YXplfGFkZHplfSAlMCwlMiIJCVwKKwkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2FtZXxhZGRtZX0gJTAsJTIiCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgX19hc21fXyAoInthJUk1fGFkZCVJNWN9ICUxLCU0LCU1XG5cdHthZXxhZGRlfSAlMCwlMiwlMyIJCVwKKwkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkgICAgICAgInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKKwkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogc3ViX2RkbW1zcyBpcyB1c2VkIGluIG9wLTIuaCBhbmQgdWRpdm1vZHRpNC5jIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bworICogI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIChzaCA9IGFoLWJoIC0gKChzbCA9IGFsLWJsKSA+IGFsKSkKKyAqIHN1Yl9kZG1tc3MoaGlnaF9kaWZmZXJlbmNlLCBsb3dfZGlmZmVyZW5jZSwgaGlnaF9taW51ZW5kLCBsb3dfbWludWVuZCwKKyAqIGhpZ2hfc3VidHJhaGVuZCwgbG93X3N1YnRyYWhlbmQpIHN1YnRyYWN0cyB0d28gdHdvLXdvcmQgVVd0eXBlIGludGVnZXJzLAorICogY29tcG9zZWQgYnkgSElHSF9NSU5VRU5EXzEgYW5kIExPV19NSU5VRU5EXzEsIGFuZCBISUdIX1NVQlRSQUhFTkRfMiBhbmQKKyAqIExPV19TVUJUUkFIRU5EXzIgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9ESUZGRVJFTkNFCisgKiBhbmQgTE9XX0RJRkZFUkVOQ0UuICBPdmVyZmxvdyAoaS5lLiBjYXJyeSBvdXQpIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUsCisgKiBhbmQgaXMgbG9zdC4KKyAqLworI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGFoKSAmJiAoYWgpID09IDApCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZnplfHN1YmZ6ZX0gJTAsJTIiCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PX4oVVNJdHlwZSkgMCkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZm1lfHN1YmZtZX0gJTAsJTIiCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSAwKQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAorCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09fihVU0l0eXBlKSAwKQkJXAorICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e2F6ZXxhZGR6ZX0gJTAsJTIiCQlcCisJICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUk0fHN1YmYlSTRjfSAlMSwlNSwlNFxuXHR7c2ZlfHN1YmZlfSAlMCwlMywlMiIJXAorCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKiBhc20gZnJhZ21lbnRzIGZvciBtdWwgYW5kIGRpdiAqLworCisvKiB1bXVsX3BwbW0oaGlnaF9wcm9kLCBsb3dfcHJvZCwgbXVsdGlwbGVyLCBtdWx0aXBsaWNhbmQpIG11bHRpcGxpZXMgdHdvCisgKiBVV3R5cGUgaW50ZWdlcnMgTVVMVElQTEVSIGFuZCBNVUxUSVBMSUNBTkQsIGFuZCBnZW5lcmF0ZXMgYSB0d28gVVd0eXBlCisgKiB3b3JkIHByb2R1Y3QgaW4gSElHSF9QUk9EIGFuZCBMT1dfUFJPRC4KKyAqLworI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoIm11bGh3dSAlMCwlMSwlMiIJCQkJCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShwaCkpCQkJCQlcCisJICAgICA6ICIlciIgKF9fbTApLAkJCQkJCVwKKyAgICAgICAgICAgICAgICJyIiAoX19tMSkpOwkJCQkJCVwKKyAgICAocGwpID0gX19tMCAqIF9fbTE7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogdWRpdl9xcm5uZChxdW90aWVudCwgcmVtYWluZGVyLCBoaWdoX251bWVyYXRvciwgbG93X251bWVyYXRvciwKKyAqIGRlbm9taW5hdG9yKSBkaXZpZGVzIGEgVURXdHlwZSwgY29tcG9zZWQgYnkgdGhlIFVXdHlwZSBpbnRlZ2VycworICogSElHSF9OVU1FUkFUT1IgYW5kIExPV19OVU1FUkFUT1IsIGJ5IERFTk9NSU5BVE9SIGFuZCBwbGFjZXMgdGhlIHF1b3RpZW50CisgKiBpbiBRVU9USUVOVCBhbmQgdGhlIHJlbWFpbmRlciBpbiBSRU1BSU5ERVIuICBISUdIX05VTUVSQVRPUiBtdXN0IGJlIGxlc3MKKyAqIHRoYW4gREVOT01JTkFUT1IgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLiAgSWYsIGluIGFkZGl0aW9uLCB0aGUgbW9zdAorICogc2lnbmlmaWNhbnQgYml0IG9mIERFTk9NSU5BVE9SIG11c3QgYmUgMSwgdGhlbiB0aGUgcHJlLXByb2Nlc3NvciBzeW1ib2wKKyAqIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBkZWZpbmVkIHRvIDEuCisgKi8KKyNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9fZDEsIF9fZDAsIF9fcTEsIF9fcTAsIF9fcjEsIF9fcjAsIF9fbTsJCQlcCisgICAgX19kMSA9IF9fbGxfaGlnaHBhcnQgKGQpOwkJCQkJCVwKKyAgICBfX2QwID0gX19sbF9sb3dwYXJ0IChkKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX19yMSA9IChuMSkgJSBfX2QxOwkJCQkJCQlcCisgICAgX19xMSA9IChuMSkgLyBfX2QxOwkJCQkJCQlcCisgICAgX19tID0gKFVXdHlwZSkgX19xMSAqIF9fZDA7CQkJCQkJXAorICAgIF9fcjEgPSBfX3IxICogX19sbF9CIHwgX19sbF9oaWdocGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjEgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjEgPj0gKGQpKSAvKiB3ZSBkaWRuJ3QgZ2V0IGNhcnJ5IHdoZW4gYWRkaW5nIHRvIF9fcjEgKi8JXAorCSAgaWYgKF9fcjEgPCBfX20pCQkJCQkJXAorCSAgICBfX3ExLS0sIF9fcjEgKz0gKGQpOwkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBfX3IxIC09IF9fbTsJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9fcjAgPSBfX3IxICUgX19kMTsJCQkJCQkJXAorICAgIF9fcTAgPSBfX3IxIC8gX19kMTsJCQkJCQkJXAorICAgIF9fbSA9IChVV3R5cGUpIF9fcTAgKiBfX2QwOwkJCQkJCVwKKyAgICBfX3IwID0gX19yMCAqIF9fbGxfQiB8IF9fbGxfbG93cGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjAgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjAgPj0gKGQpKQkJCQkJCVwKKwkgIGlmIChfX3IwIDwgX19tKQkJCQkJCVwKKwkgICAgX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgX19yMCAtPSBfX207CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAocSkgPSAoVVd0eXBlKSBfX3ExICogX19sbF9CIHwgX19xMDsJCQkJXAorICAgIChyKSA9IF9fcjA7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OIDEKKworI2RlZmluZSBhYm9ydCgpCQkJCQkJCQlcCisJcmV0dXJuIDAKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBfX0JZVEVfT1JERVIgX19CSUdfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworLyogRXhjZXB0aW9uIGZsYWdzLiAqLworI2RlZmluZSBFRkxBR19JTlZBTElECQkoMSA8PCAoMzEgLSAyKSkKKyNkZWZpbmUgRUZMQUdfT1ZFUkZMT1cJCSgxIDw8ICgzMSAtIDMpKQorI2RlZmluZSBFRkxBR19VTkRFUkZMT1cJCSgxIDw8ICgzMSAtIDQpKQorI2RlZmluZSBFRkxBR19ESVZaRVJPCQkoMSA8PCAoMzEgLSA1KSkKKyNkZWZpbmUgRUZMQUdfSU5FWEFDVAkJKDEgPDwgKDMxIC0gNikpCisKKyNkZWZpbmUgRUZMQUdfVlhTTkFOCQkoMSA8PCAoMzEgLSA3KSkKKyNkZWZpbmUgRUZMQUdfVlhJU0kJCSgxIDw8ICgzMSAtIDgpKQorI2RlZmluZSBFRkxBR19WWElESQkJKDEgPDwgKDMxIC0gOSkpCisjZGVmaW5lIEVGTEFHX1ZYWkRaCQkoMSA8PCAoMzEgLSAxMCkpCisjZGVmaW5lIEVGTEFHX1ZYSU1aCQkoMSA8PCAoMzEgLSAxMSkpCisjZGVmaW5lIEVGTEFHX1ZYVkMJCSgxIDw8ICgzMSAtIDEyKSkKKyNkZWZpbmUgRUZMQUdfVlhTT0ZUCQkoMSA8PCAoMzEgLSAyMSkpCisjZGVmaW5lIEVGTEFHX1ZYU1FSVAkJKDEgPDwgKDMxIC0gMjIpKQorI2RlZmluZSBFRkxBR19WWENWSQkJKDEgPDwgKDMxIC0gMjMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDRkMjhlMWUuLjE4NjZjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKQEAgLTU2LDkgKzU2LDE2IEBACiAKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpIAkoc21wX2h3X2luZGV4W3NtcF9wcm9jZXNzb3JfaWQoKV0pCi0jZGVmaW5lIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KQkoc21wX2h3X2luZGV4WyhjcHUpXSkKLSNkZWZpbmUgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUsIHBoeXMpXAotCQkJCQkoc21wX2h3X2luZGV4WyhjcHUpXSA9IChwaHlzKSkKKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBzbXBfaHdfaW5kZXhbY3B1XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSwgaW50IHBoeXMpCit7CisJc21wX2h3X2luZGV4W2NwdV0gPSBwaHlzOworfQogI2VuZGlmCiAKIERFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CkBAIC04NiwxNSArOTMsMjEgQEAKIAogI2Vsc2UKIC8qIGZvciBVUCAqLwotI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgwKQogI2RlZmluZSBzbXBfc2V0dXBfY3B1X21hcHMoKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoQ1BVKSAocGFjYVsoQ1BVKV0uaHdfY3B1X2lkKQotI2RlZmluZSBzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKENQVSwgVkFMKSBcCi0JZG8geyAocGFjYVsoQ1BVKV0uaHdfY3B1X2lkID0gKFZBTCkpOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBwYWNhW2NwdV0uaHdfY3B1X2lkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1LCBpbnQgcGh5cykKK3sKKwlwYWNhW2NwdV0uaHdfY3B1X2lkID0gcGh5czsKK30KIAogZXh0ZXJuIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKTsKIApAQCAtMTAyLDEwICsxMTUsMTcgQEAKIC8qIDMyLWJpdCAqLwogI2lmbmRlZiBDT05GSUdfU01QCiBleHRlcm4gaW50IGJvb3RfY3B1aWRfcGh5czsKLSNkZWZpbmUgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpIAlib290X2NwdWlkX3BoeXMKLSNkZWZpbmUgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUsIHBoeXMpCi0jZW5kaWYKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBib290X2NwdWlkX3BoeXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGludCBjcHUsIGludCBwaHlzKQoreworCWJvb3RfY3B1aWRfcGh5cyA9IHBoeXM7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiAhQ09ORklHX1BQQzY0ICovCiAKIGV4dGVybiBpbnQgc210X2VuYWJsZWRfYXRfYm9vdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCmluZGV4IGY2Y2M3YTQuLjgwM2RlZjIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zMiw3ICszMiw3IEBACiBDT01QQVRfU1lTKHB0cmFjZSkKIFNZU0NBTExfU1BVKGFsYXJtKQogT0xEU1lTKGZzdGF0KQotQ09NUEFUX1NZUyhwYXVzZSkKK1NZU0NBTEwocGF1c2UpCiBDT01QQVRfU1lTKHV0aW1lKQogU1lTQ0FMTChuaV9zeXNjYWxsKQogU1lTQ0FMTChuaV9zeXNjYWxsKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCAzNjFjZDVjLi5hMmM2YmZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIGV4dGVybiB2b2lkIF90bGJpZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpOworZXh0ZXJuIHZvaWQgX3RsYmlsX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIF90bGJpbF9waWQodW5zaWduZWQgaW50IHBpZCk7CitleHRlcm4gdm9pZCBfdGxiaWxfdmEodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgcGlkKTsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KQogI2RlZmluZSBfdGxiaWEoKQlhc20gdm9sYXRpbGUgKCJ0bGJpYTsgc3luYyIgOiA6IDogIm1lbW9yeSIpCkBAIC0zOCwzMSArNDEsMzEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlfdGxiaWEoKTsKKwlfdGxiaWxfcGlkKG1tLT5jb250ZXh0LmlkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JX3RsYmllKHZtYWRkciwgdm1hID8gdm1hLT52bV9tbS0+Y29udGV4dC5pZCA6IDApOworCV90bGJpbF92YSh2bWFkZHIsIHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlX25vaGFzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewotCV90bGJpZSh2bWFkZHIsIHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwKTsKKwlmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JX3RsYmlhKCk7CisJX3RsYmlsX3BpZCh2bWEtPnZtX21tLT5jb250ZXh0LmlkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlfdGxiaWEoKTsKKwlfdGxiaWxfcGlkKDApOwogfQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggZDMzNzRiYy4uYzAwNGMxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTQ4LDE0ICs0OCw3IEBACiAKIHR5cGVkZWYgX192ZWN0b3IxMjggdmVjdG9yMTI4OwogCi0vKiBQaHlzaWNhbCBhZGRyZXNzIHVzZWQgYnkgc29tZSBJTyBmdW5jdGlvbnMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfUEhZU182NEJJVCkKLXR5cGVkZWYgdTY0IHBoeXNfYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdTMyIHBoeXNfYWRkcl90OwotI2VuZGlmCi0KLSNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKENPTkZJR19QSFlTXzY0QklUKQogdHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKICNlbHNlCiB0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC8uZ2l0aWdub3JlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordm1saW51eC5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDk0NmRhZWEuLmZkYjU4MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjgsMTMgKzI4LDE0IEBACiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXAogCQkJCSAgIGlycS5vIGFsaWduLm8gc2lnbmFsXzMyLm8gcG1jLm8gdmRzby5vIFwKIAkJCQkgICBpbml0X3Rhc2subyBwcm9jZXNzLm8gc3lzdGJsLm8gaWRsZS5vIFwKLQkJCQkgICBzaWduYWwubworCQkJCSAgIHNpZ25hbC5vIHN5c2ZzLm8KIG9iai15CQkJCSs9IHZkc28zMi8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHNldHVwXzY0Lm8gc3lzX3BwYzMyLm8gXAogCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gXAogCQkJCSAgIHBhY2EubyBjcHVfc2V0dXBfcHBjOTcwLm8gXAogCQkJCSAgIGNwdV9zZXR1cF9wYTZ0Lm8gXAotCQkJCSAgIGZpcm13YXJlLm8gc3lzZnMubyBudnJhbV82NC5vCisJCQkJICAgZmlybXdhcmUubyBudnJhbV82NC5vCitvYmo2NC0kKENPTkZJR19SRUxPQ0FUQUJMRSkJKz0gcmVsb2NfNjQubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gdmRzbzY0Lwogb2JqLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWNlbXUubyB2ZWN0b3Iubwogb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCkBAIC02OSwxMCArNzAsMTAgQEAKIGV4dHJhLXkJCQkJKz0gdm1saW51eC5sZHMKIAogb2JqLXkJCQkJKz0gdGltZS5vIHByb20ubyB0cmFwcy5vIHNldHVwLWNvbW1vbi5vIFwKLQkJCQkgICB1ZGJnLm8gbWlzYy5vIGlvLm8gXAorCQkJCSAgIHVkYmcubyBtaXNjLm8gaW8ubyBkbWEubyBcCiAJCQkJICAgbWlzY18kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR19QUEMzMikJCSs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubwotb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gZG1hXzY0Lm8gaW9tbXUubworb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gZG1hLWlvbW11Lm8gaW9tbXUubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIG9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcHJvbV9pbml0Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gcHBjX2tzeW1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA5Mjc2OGQzLi43NWM1ZGQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMjIsNiArMTIyLDggQEAKIAlERUZJTkUoUEFDQVNUQUJSUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzdGFiX3JyKSk7CiAJREVGSU5FKFBBQ0FSMSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzYXZlZF9yMSkpOwogCURFRklORShQQUNBVE9DLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGtlcm5lbF90b2MpKTsKKwlERUZJTkUoUEFDQUtCQVNFLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGtlcm5lbGJhc2UpKTsKKwlERUZJTkUoUEFDQUtNU1IsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsX21zcikpOwogCURFRklORShQQUNBU09GVElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNvZnRfZW5hYmxlZCkpOwogCURFRklORShQQUNBSEFSRElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGhhcmRfZW5hYmxlZCkpOwogCURFRklORShQQUNBU0xCQ0FDSEUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2xiX2NhY2hlKSk7CkBAIC0zNTAsMTQgKzM1MiwxNSBAQAogI2VuZGlmCiAKIAlERUZJTkUoUEdEX1RBQkxFX1NJWkUsIFBHRF9UQUJMRV9TSVpFKTsKKwlERUZJTkUoUFRFX1NJWkUsIHNpemVvZihwdGVfdCkpOwogCiAjaWZkZWYgQ09ORklHX0tWTQogCURFRklORShUTEJFX0JZVEVTLCBzaXplb2Yoc3RydWN0IHRsYmUpKTsKIAogCURFRklORShWQ1BVX0hPU1RfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3N0YWNrKSk7CiAJREVGSU5FKFZDUFVfSE9TVF9QSUQsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3BpZCkpOwotCURFRklORShWQ1BVX0hPU1RfVExCLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF90bGIpKTsKIAlERUZJTkUoVkNQVV9TSEFET1dfVExCLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hhZG93X3RsYikpOworCURFRklORShWQ1BVX1NIQURPV19NT0QsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfdGxiX21vZCkpOwogCURFRklORShWQ1BVX0dQUlMsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ncHIpKTsKIAlERUZJTkUoVkNQVV9MUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmxyKSk7CiAJREVGSU5FKFZDUFVfQ1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jcikpOwpAQCAtMzY5LDcgKzM3Miw3IEBACiAJREVGSU5FKFZDUFVfU1BSRzUsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zcHJnNSkpOwogCURFRklORShWQ1BVX1NQUkc2LCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc3ByZzYpKTsKIAlERUZJTkUoVkNQVV9TUFJHNywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNwcmc3KSk7Ci0JREVGSU5FKFZDUFVfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gucGlkKSk7CisJREVGSU5FKFZDUFVfU0hBRE9XX1BJRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNoYWRvd19waWQpKTsKIAogCURFRklORShWQ1BVX0xBU1RfSU5TVCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmxhc3RfaW5zdCkpOwogCURFRklORShWQ1BVX0ZBVUxUX0RFQVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5mYXVsdF9kZWFyKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggZDhmMDMyOS4uMjZlNTg2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtNDQyLDI4ICs0NDIsMjYgQEAKIAogdm9pZCBidGV4dF9kcmF3aGV4KHVuc2lnbmVkIGxvbmcgdikKIHsKLQljaGFyICpoZXhfdGFibGUgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0KIAlpZiAoIWJvb3RfdGV4dF9tYXBwZWQpCiAJCXJldHVybjsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNjApICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDU2KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA1MikgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNDgpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDQ0KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA0MCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMzYpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDMyKSAmIDB4MDAwMDAwMEZVTF0pOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA1NikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA1NikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA0OCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA0OCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA0MCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA0MCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiAzMikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiAzMikpOwogI2VuZGlmCi0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDI4KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAyNCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMjApICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDE2KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAxMikgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gIDgpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+ICA0KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAgMCkgJiAweDAwMDAwMDBGVUxdKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gMjQpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2xvKHYgPj4gMjQpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gMTYpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2xvKHYgPj4gMTYpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gOCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA4KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2KSk7CiAJYnRleHRfZHJhd2NoYXIoJyAnKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcHBjOTcwLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUwppbmRleCBiZjExOGMzLi4yN2YyNTA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUwpAQCAtMTEwLDcgKzExMCw3IEBACiAJaXN5bmMKIAogCS8qIFNhdmUgYXdheSBjcHUgc3RhdGUgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjUsY3B1X3N0YXRlX3N0b3JhZ2UpCisJTE9BRF9SRUdfQUREUihyNSxjcHVfc3RhdGVfc3RvcmFnZSkKIAogCS8qIFNhdmUgSElEMCwxLDQgYW5kIDUgKi8KIAltZnNwcglyMyxTUFJOX0hJRDAKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJsZGljbC4JcjAscjAsNCw2MwogCWJlcWxyCiAKLQlMT0FEX1JFR19JTU1FRElBVEUocjUsY3B1X3N0YXRlX3N0b3JhZ2UpCisJTE9BRF9SRUdfQUREUihyNSxjcHVfc3RhdGVfc3RvcmFnZSkKIAkvKiBCZWZvcmUgYWNjZXNzaW5nIG1lbW9yeSwgd2UgbWFrZSBzdXJlIHJtX2NpIGlzIGNsZWFyICovCiAJbGkJcjAsMAogCW1mc3ByCXIzLFNQUk5fSElENApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDI1YzI3M2MuLmU3MGQwNDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTYxMCw2ICs2MTAsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTYyMyw2ICs2MjQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTYzNiw2ICs2MzgsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTY0OSw2ICs2NTIsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC02NjIsNiArNjY2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjc1LDYgKzY4MCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTY4OCw2ICs2OTQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MDEsNiArNzA4LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MTQsNiArNzIyLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MjcsNiArNzM2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNzQxLDYgKzc1MSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDAwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzQwMCIsCkBAIC03NTUsNiArNzY2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0MDAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NDAwIiwKQEAgLTc2OSw2ICs3ODEsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQxMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc0MDAiLApAQCAtNzgzLDYgKzc5Niw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTc5OSw2ICs4MTMsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04MTUsNiArODMwLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODMxLDYgKzg0Nyw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTg0Nyw2ICs4NjQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04NjMsNiArODgxLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODc5LDYgKzg5OCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTg5NSw2ICs5MTUsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC05MTAsNiArOTMxLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtOTI2LDYgKzk0OCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTk0Miw2ICs5NjUsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGEzMjNjOWIuLjk3ZTA1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC0yNyw2ICsyNyw5IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogdm9pZCBfX2luaXQgcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbG1iX3Jlc2VydmUoMCwgS0RVTVBfUkVTRVJWRV9MSU1JVCk7CkBAIC02Niw3ICs2OSwxMSBAQAogCURCRygiIDwtIHNldHVwX2tkdW1wX3RyYW1wb2xpbmUoKVxuIik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLwogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZWxmY29yZWhkcihjaGFyICpwKQogewogCWlmIChwKQpAQCAtNzUsNyArODIsNiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiZWxmY29yZWhkcj0iLCBwYXJzZV9lbGZjb3JlaGRyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9zYXZlbWF4bWVtKGNoYXIgKnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCisgKiBidXNzZXMgdXNpbmcgdGhlIGlvbW11IGluZnJhc3RydWN0dXJlCisgKi8KKworI2luY2x1ZGUgPGFzbS9pb21tdS5oPgorCisvKgorICogR2VuZXJpYyBpb21tdSBpbXBsZW1lbnRhdGlvbgorICovCisKKy8qIEFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgcmVhbCBidWZmZXIgYW5kIGNyZWF0ZXMgbWFwcGluZ3Mgb3ZlciBpdC4KKyAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGFuZCBzZXRzIGRtYV9oYW5kbGUKKyAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCisgKi8KK3N0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQoreworCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCisJCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCisJCQkJICAgIGRldl90b19ub2RlKGRldikpOworfQorCitzdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCisvKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQorICogY29udGlndW91cyByZWFsIGtlcm5lbCBzdG9yYWdlIChub3Qgdm1hbGxvYykuICBUaGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyCisgKiBwYXNzZWQgaGVyZSBpcyB0aGUga2VybmVsICh2aXJ0dWFsKSBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGUgYnVmZmVyCisgKiBuZWVkIG5vdCBiZSBwYWdlIGFsaWduZWQsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUKKyAqIGJ5dGUgd2l0aGluIHRoZSBwYWdlIGFzIHZhZGRyLgorICovCitzdGF0aWMgZG1hX2FkZHJfdCBkbWFfaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlyZXR1cm4gaW9tbXVfbWFwX3NpbmdsZShkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHZhZGRyLCBzaXplLAorCQkJCWRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworfQorCisKK3N0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgc2l6ZV90IHNpemUsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCWlvbW11X3VubWFwX3NpbmdsZShkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCisJCQkgICBhdHRycyk7Cit9CisKKworc3RhdGljIGludCBkbWFfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywKKwkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2lvbW11X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKKwkJICAgICAgIGF0dHJzKTsKK30KKworLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLworc3RhdGljIGludCBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKKworCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiV2FybmluZzogSU9NTVUgb2Zmc2V0IHRvbyBiaWcgZm9yIGRldmljZSBtYXNrXG4iKTsKKwkJaWYgKHRibCkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAibWFzazogMHglMDhseCwgdGFibGUgb2Zmc2V0OiAweCUwOGx4XG4iLAorCQkJCW1hc2ssIHRibC0+aXRfb2Zmc2V0KTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWFzazogMHglMDhseCwgdGFibGUgdW5hdmFpbGFibGVcbiIsCisJCQkJbWFzayk7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfb3BzID0geworCS5hbGxvY19jb2hlcmVudAk9IGRtYV9pb21tdV9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAk9IGRtYV9pb21tdV9mcmVlX2NvaGVyZW50LAorCS5tYXBfc2luZ2xlCT0gZG1hX2lvbW11X21hcF9zaW5nbGUsCisJLnVubWFwX3NpbmdsZQk9IGRtYV9pb21tdV91bm1hcF9zaW5nbGUsCisJLm1hcF9zZwkJPSBkbWFfaW9tbXVfbWFwX3NnLAorCS51bm1hcF9zZwk9IGRtYV9pb21tdV91bm1hcF9zZywKKwkuZG1hX3N1cHBvcnRlZAk9IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkLAorfTsKK0VYUE9SVF9TWU1CT0woZG1hX2lvbW11X29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYyZGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCisgKiBkaXJlY3RseSBtYXBwZWQgYnVzc2VzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KKworLyoKKyAqIEdlbmVyaWMgZGlyZWN0IERNQSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBwZXItZGV2aWNlIG9mZnNldCB0aGF0IGNhbiBiZSBhcHBsaWVkIGlmCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCBtZW1vcnkgaXMgdmlzaWJsZSB0byBkZXZpY2VzIGlzIG5vdCAwLiBQbGF0Zm9ybSBjb2RlCisgKiBjYW4gc2V0IGFyY2hkYXRhLmRtYV9kYXRhIHRvIGFuIHVuc2lnbmVkIGxvbmcgaG9sZGluZyB0aGUgb2Zmc2V0LiBCeQorICogZGVmYXVsdCB0aGUgb2Zmc2V0IGlzIFBDSV9EUkFNX09GRlNFVC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCXJldHVybiAodW5zaWduZWQgbG9uZylkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCisJcmV0dXJuIFBDSV9EUkFNX09GRlNFVDsKK30KKwordm9pZCAqZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCit7CisJdm9pZCAqcmV0OworI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKwlyZXQgPSBfX2RtYV9hbGxvY19jb2hlcmVudChzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKKwlpZiAocmV0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCSpkbWFfaGFuZGxlICs9IGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiByZXQ7CisjZWxzZQorCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTsKKworCS8qIGlnbm9yZSByZWdpb24gc3BlY2lmaWVycyAqLworCWZsYWcgICY9IH4oX19HRlBfSElHSE1FTSk7CisKKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOworCWlmIChwYWdlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKwkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYWJzKHJldCkgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKworCXJldHVybiByZXQ7CisjZW5kaWYKK30KKwordm9pZCBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQorCV9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZSwgdmFkZHIpOworI2Vsc2UKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgZG1hX2RpcmVjdF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgaSkgeworCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorCitzdGF0aWMgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKK30KKworc3RhdGljIGludCBkbWFfZGlyZWN0X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkvKiBDb3VsZCBiZSBpbXByb3ZlZCB0byBjaGVjayBmb3IgbWVtb3J5IHRob3VnaCBpdCBiZXR0ZXIgYmUKKwkgKiBkb25lIHZpYSBzb21lIGdsb2JhbCBzbyBwbGF0Zm9ybXMgY2FuIHNldCB0aGUgbGltaXQgaW4gY2FzZQorCSAqIHRoZXkgaGF2ZSBsaW1pdGVkIERNQSB3aW5kb3dzCisJICovCisJcmV0dXJuIG1hc2sgPj0gRE1BXzMyQklUX01BU0s7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfZGlyZWN0X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CisJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0ICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkJCQkJIHNpemVfdCBzaXplLAorCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7Cit9CisKK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CT0gZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAk9IGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudCwKKwkubWFwX3NnCQk9IGRtYV9kaXJlY3RfbWFwX3NnLAorCS51bm1hcF9zZwk9IGRtYV9kaXJlY3RfdW5tYXBfc2csCisJLmRtYV9zdXBwb3J0ZWQJPSBkbWFfZGlyZWN0X2RtYV9zdXBwb3J0ZWQsCisJLm1hcF9wYWdlCT0gZG1hX2RpcmVjdF9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZQk9IGRtYV9kaXJlY3RfdW5tYXBfcGFnZSwKK307CitFWFBPUlRfU1lNQk9MKGRtYV9kaXJlY3Rfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYV82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTU3MDhlLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCi0gKiBkaXJlY3RseSBtYXBwZWQgYnVzc2VzIGFuZCBidXNzZXMgdXNpbmcgdGhlIGlvbW11IGluZnJhc3RydWN0dXJlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL2J1Zy5oPgotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgotCi0vKgotICogR2VuZXJpYyBpb21tdSBpbXBsZW1lbnRhdGlvbgotICovCi0KLS8qIEFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgcmVhbCBidWZmZXIgYW5kIGNyZWF0ZXMgbWFwcGluZ3Mgb3ZlciBpdC4KLSAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGFuZCBzZXRzIGRtYV9oYW5kbGUKLSAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCi0gKi8KLXN0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQotewotCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCi0JCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCi0JCQkJICAgIGRldi0+YXJjaGRhdGEubnVtYV9ub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlpb21tdV9mcmVlX2NvaGVyZW50KGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKLX0KLQotLyogQ3JlYXRlcyBUQ0VzIGZvciBhIHVzZXIgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHVzZXIgYnVmZmVyIG11c3QgYmUKLSAqIGNvbnRpZ3VvdXMgcmVhbCBrZXJuZWwgc3RvcmFnZSAobm90IHZtYWxsb2MpLiAgVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgotICogcGFzc2VkIGhlcmUgaXMgdGhlIGtlcm5lbCAodmlydHVhbCkgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLiAgVGhlIGJ1ZmZlcgotICogbmVlZCBub3QgYmUgcGFnZSBhbGlnbmVkLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCB3aWxsIHBvaW50IHRvIHRoZSBzYW1lCi0gKiBieXRlIHdpdGhpbiB0aGUgcGFnZSBhcyB2YWRkci4KLSAqLwotc3RhdGljIGRtYV9hZGRyX3QgZG1hX2lvbW11X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwKLQkJCQkgICAgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JcmV0dXJuIGlvbW11X21hcF9zaW5nbGUoZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCB2YWRkciwgc2l6ZSwKLQkJCQlkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBkbWFfaW9tbXVfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCSAgIHNpemVfdCBzaXplLAotCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpb21tdV91bm1hcF9zaW5nbGUoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uLAotCQkJICAgYXR0cnMpOwotfQotCi0KLXN0YXRpYyBpbnQgZG1hX2lvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsCi0JCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlvbW11X3VubWFwX3NnKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCi0JCSAgICAgICBhdHRycyk7Ci19Ci0KLS8qIFdlIHN1cHBvcnQgRE1BIHRvL2Zyb20gYW55IG1lbW9yeSBwYWdlIHZpYSB0aGUgaW9tbXUgKi8KLXN0YXRpYyBpbnQgZG1hX2lvbW11X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGRldi0+YXJjaGRhdGEuZG1hX2RhdGE7Ci0KLQlpZiAoIXRibCB8fCB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIldhcm5pbmc6IElPTU1VIG9mZnNldCB0b28gYmlnIGZvciBkZXZpY2UgbWFza1xuIik7Ci0JCWlmICh0YmwpCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIm1hc2s6IDB4JTA4bHgsIHRhYmxlIG9mZnNldDogMHglMDhseFxuIiwKLQkJCQltYXNrLCB0YmwtPml0X29mZnNldCk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIm1hc2s6IDB4JTA4bHgsIHRhYmxlIHVuYXZhaWxhYmxlXG4iLAotCQkJCW1hc2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQJPSBkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQJPSBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZQk9IGRtYV9pb21tdV9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUJPSBkbWFfaW9tbXVfdW5tYXBfc2luZ2xlLAotCS5tYXBfc2cJCT0gZG1hX2lvbW11X21hcF9zZywKLQkudW5tYXBfc2cJPSBkbWFfaW9tbXVfdW5tYXBfc2csCi0JLmRtYV9zdXBwb3J0ZWQJPSBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZCwKLX07Ci1FWFBPUlRfU1lNQk9MKGRtYV9pb21tdV9vcHMpOwotCi0vKgotICogR2VuZXJpYyBkaXJlY3QgRE1BIGltcGxlbWVudGF0aW9uCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBhIHBlci1kZXZpY2Ugb2Zmc2V0IHRoYXQgY2FuIGJlIGFwcGxpZWQgaWYKLSAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIG1lbW9yeSBpcyB2aXNpYmxlIHRvIGRldmljZXMgaXMgbm90IDAuIFBsYXRmb3JtIGNvZGUKLSAqIGNhbiBzZXQgYXJjaGRhdGEuZG1hX2RhdGEgdG8gYW4gdW5zaWduZWQgbG9uZyBob2xkaW5nIHRoZSBvZmZzZXQuIEJ5Ci0gKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgemVyby4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOwotfQotCi1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKnJldDsKLQlpbnQgbm9kZSA9IGRldi0+YXJjaGRhdGEubnVtYV9ub2RlOwotCi0JcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZywgZ2V0X29yZGVyKHNpemUpKTsKLQlpZiAocGFnZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlyZXQgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIGRtYV9hZGRyX3QgZG1hX2RpcmVjdF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLAotCQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gdmlydF90b19hYnMocHRyKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLAotCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotfQotCi1zdGF0aWMgaW50IGRtYV9kaXJlY3RfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBpOwotCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKLQkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZykgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKLQkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwotCX0KLQotCXJldHVybiBuZW50czsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2RpcmVjdF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci19Ci0KLXN0YXRpYyBpbnQgZG1hX2RpcmVjdF9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCi17Ci0JLyogQ291bGQgYmUgaW1wcm92ZWQgdG8gY2hlY2sgZm9yIG1lbW9yeSB0aG91Z2ggaXQgYmV0dGVyIGJlCi0JICogZG9uZSB2aWEgc29tZSBnbG9iYWwgc28gcGxhdGZvcm1zIGNhbiBzZXQgdGhlIGxpbWl0IGluIGNhc2UKLQkgKiB0aGV5IGhhdmUgbGltaXRlZCBETUEgd2luZG93cwotCSAqLwotCXJldHVybiBtYXNrID49IERNQV8zMkJJVF9NQVNLOwotfQotCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9kaXJlY3Rfb3BzID0gewotCS5hbGxvY19jb2hlcmVudAk9IGRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQJPSBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUJPSBkbWFfZGlyZWN0X21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZQk9IGRtYV9kaXJlY3RfdW5tYXBfc2luZ2xlLAotCS5tYXBfc2cJCT0gZG1hX2RpcmVjdF9tYXBfc2csCi0JLnVubWFwX3NnCT0gZG1hX2RpcmVjdF91bm1hcF9zZywKLQkuZG1hX3N1cHBvcnRlZAk9IGRtYV9kaXJlY3RfZG1hX3N1cHBvcnRlZCwKLX07Ci1FWFBPUlRfU1lNQk9MKGRtYV9kaXJlY3Rfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCAyZDgwMmU5Li5mZDhiNGJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC01MTIsMzEgKzUxMiwxMiBAQAogI2VuZGlmCiAKIHJlc3RvcmU6Ci0JbGQJcjUsU09GVEUocjEpCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiBCRUdJTl9GV19GVFJfU0VDVElPTgotCWNtcGRpCTAscjUsMAotCWJlcQk0ZgotCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMgKGlTZXJpZXMpICovCi0JbGQJcjMsUEFDQUxQUEFDQVBUUihyMTMpCi0JbGQJcjMsTFBQQUNBQU5ZSU5UKHIzKQotCWNtcGRpCXIzLDAKLQliZXErCTRmCQkJLyogc2tpcCBkb19JUlEgaWYgbm8gaW50ZXJydXB0cyAqLwotCi0JbGkJcjMsMAotCXN0YglyMyxQQUNBU09GVElSUUVOKHIxMykJLyogZW5zdXJlIHdlIGFyZSBzb2Z0LWRpc2FibGVkICovCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JYmwJLnRyYWNlX2hhcmRpcnFzX29mZgotCW1mbXNyCXIxMAotI2VuZGlmCi0Jb3JpCXIxMCxyMTAsTVNSX0VFCi0JbXRtc3JkCXIxMAkJCS8qIGhhcmQtZW5hYmxlIGFnYWluICovCi0JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCWJsCS5kb19JUlEKLQliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQkJLyogbG9vcCBiYWNrIGFuZCBoYW5kbGUgbW9yZSAqLwotNDoKLUVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCi0jZW5kaWYKKwlsZAlyNSxTT0ZURShyMSkKK0ZXX0ZUUl9TRUNUSU9OX0VMU0UKKwliCWlzZXJpZXNfY2hlY2tfcGVuZGluZ19pcnFzCitBTFRfRldfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKEZXX0ZFQVRVUkVfSVNFUklFUykKKzI6CiAJVFJBQ0VfQU5EX1JFU1RPUkVfSVJRKHI1KTsKIAogCS8qIGV4dHJhY3QgRUUgYml0IGFuZCB1c2UgaXQgdG8gcmVzdG9yZSBwYWNhLT5oYXJkX2VuYWJsZWQgKi8KQEAgLTU5Miw2ICs1NzMsMzAgQEAKIAlyZmlkCiAJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCiAKK2lzZXJpZXNfY2hlY2tfcGVuZGluZ19pcnFzOgorI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCWxkCXI1LFNPRlRFKHIxKQorCWNtcGRpCTAscjUsMAorCWJlcQkyYgorCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMgKGlTZXJpZXMpICovCisJbGQJcjMsUEFDQUxQUEFDQVBUUihyMTMpCisJbGQJcjMsTFBQQUNBQU5ZSU5UKHIzKQorCWNtcGRpCXIzLDAKKwliZXErCTJiCQkJLyogc2tpcCBkb19JUlEgaWYgbm8gaW50ZXJydXB0cyAqLworCisJbGkJcjMsMAorCXN0YglyMyxQQUNBU09GVElSUUVOKHIxMykJLyogZW5zdXJlIHdlIGFyZSBzb2Z0LWRpc2FibGVkICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJYmwJLnRyYWNlX2hhcmRpcnFzX29mZgorCW1mbXNyCXIxMAorI2VuZGlmCisJb3JpCXIxMCxyMTAsTVNSX0VFCisJbXRtc3JkCXIxMAkJCS8qIGhhcmQtZW5hYmxlIGFnYWluICovCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWJsCS5kb19JUlEKKwliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQkJLyogbG9vcCBiYWNrIGFuZCBoYW5kbGUgbW9yZSAqLworI2VuZGlmCisKIGRvX3dvcms6CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlhbmRpLglyMCxyMyxNU1JfUFIJLyogUmV0dXJuaW5nIHRvIHVzZXIgbW9kZT8gKi8KQEAgLTY4NSwxMCArNjkwLDYgQEAKIAlzdGQJcjcsX0RBUihyMSkKIAltZmRzaXNyCXI4CiAJc3RkCXI4LF9EU0lTUihyMSkKLQltZnNycjAJcjkKLQlzdGQJcjksX1NSUjAocjEpCi0JbWZzcnIxCXIxMAotCXN0ZAlyMTAsX1NSUjEocjEpCiAKIAkvKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBjbGVhciBDUiB1bnRpbCBSVEFTIGNhbiBiZSBtb2RpZmllZCB0bwogCSAqIGlnbm9yZSBhbGwgYml0cy4KQEAgLTc0OSw2ICs3NTAsMTAgQEAKIAltZnNwcglyNCxTUFJOX1NQUkczCSAgICAgICAgLyogR2V0IFBBQ0EgKi8KIAljbHJsZGkJcjQscjQsMgkJCS8qIGNvbnZlcnQgdG8gcmVhbG1vZGUgYWRkcmVzcyAqLwogCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyMworCWxkCXIzLCgxZi0wYikocjMpCQkvKiBnZXQgJi5ydGFzX3Jlc3RvcmVfcmVncyAqLworCiAJbWZtc3IgICByNgogCWxpCXIwLE1TUl9SSQogCWFuZGMJcjYscjYscjAKQEAgLTc1Niw3ICs3NjEsNiBAQAogCW10bXNyZCAgcjYKICAgICAgICAgCiAgICAgICAgIGxkCXIxLFBBQ0FSMShyNCkgICAgICAgICAgIC8qIFJlc3RvcmUgb3VyIFNQICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLC5ydGFzX3Jlc3RvcmVfcmVncykKICAgICAgICAgbGQJcjQsUEFDQVNBVkVETVNSKHI0KSAgICAgLyogUmVzdG9yZSBvdXIgTVNSICovCiAKIAltdHNwcglTUFJOX1NSUjAscjMKQEAgLTc2NCw2ICs3NjgsOSBAQAogCXJmaWQKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KIAorCS5hbGlnbgkzCisxOgkubGxvbmcJLnJ0YXNfcmVzdG9yZV9yZWdzCisKIF9TVEFUSUMocnRhc19yZXN0b3JlX3JlZ3MpCiAJLyogcmVsb2NhdGlvbiBpcyBvbiBhdCB0aGlzIHBvaW50ICovCiAJUkVTVF9HUFIoMiwgcjEpCQkJLyogUmVzdG9yZSB0aGUgVE9DICovCkBAIC03ODMsMTAgKzc5MCw2IEBACiAJbXRkYXIJcjcKIAlsZAlyOCxfRFNJU1IocjEpCiAJbXRkc2lzcglyOAotCWxkCXI5LF9TUlIwKHIxKQotCW10c3JyMAlyOQotCWxkCXIxMCxfU1JSMShyMSkKLQltdHNycjEJcjEwCiAKICAgICAgICAgYWRkaQlyMSxyMSxSVEFTX0ZSQU1FX1NJWkUJLyogVW5zdGFjayBvdXIgZnJhbWUgKi8KIAlsZAlyMCwxNihyMSkJCS8qIGdldCByZXR1cm4gYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCA4YmI2NTc1Li4wYzMyNjgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTEwLDYgKzExMCwxMiBAQAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogCWNtcHdpCTAscjUsMAogCWJlcQkxZgorCisJLyogZmluZCBvdXQgd2hlcmUgd2UgYXJlIG5vdyAqLworCWJjbAkyMCwzMSwkKzQKKzA6CW1mbHIJcjgJCQkvKiByOCA9IHJ1bnRpbWUgYWRkciBoZXJlICovCisJYWRkaXMJcjgscjgsKF9zdGV4dCAtIDBiKUBoYQorCWFkZGkJcjgscjgsKF9zdGV4dCAtIDBiKUBsCS8qIGN1cnJlbnQgcnVudGltZSBiYXNlIGFkZHIgKi8KIAlibAlwcm9tX2luaXQKIAl0cmFwCiAjZW5kaWYKQEAgLTM2OSwxMyArMzc1LDEzIEBACiBEYXRhQWNjZXNzOgogCUVYQ0VQVElPTl9QUk9MT0cKIAltZnNwcglyMTAsU1BSTl9EU0lTUgorCXN0dwlyMTAsX0RTSVNSKHIxMSkKIAlhbmRpcy4JcjAscjEwLDB4YTQ3MAkJLyogd2VpcmQgZXJyb3I/ICovCiAJYm5lCTFmCQkJLyogaWYgbm90LCB0cnkgdG8gcHV0IGEgUFRFICovCiAJbWZzcHIJcjQsU1BSTl9EQVIJCS8qIGludG8gdGhlIGhhc2ggdGFibGUgKi8KIAlybHdpbm0JcjMscjEwLDMyLTE1LDIxLDIxCS8qIERTSVNSX1NUT1JFIC0+IF9QQUdFX1JXICovCiAJYmwJaGFzaF9wYWdlCi0xOglzdHcJcjEwLF9EU0lTUihyMTEpCi0JbXIJcjUscjEwCisxOglsd3oJcjUsX0RTSVNSKHIxMSkJCS8qIGdldCBEU0lTUiB2YWx1ZSAqLwogCW1mc3ByCXI0LFNQUk5fREFSCiAJRVhDX1hGRVJfRUVfTElURSgweDMwMCwgaGFuZGxlX3BhZ2VfZmF1bHQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggY2M4ZmI0Ny4uODQ4NTZiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTgyLDcgKzgyLDExIEBACiAJLyogQ2F0Y2ggYnJhbmNoIHRvIDAgaW4gcmVhbCBtb2RlICovCiAJdHJhcAogCi0JLyogU2Vjb25kYXJ5IHByb2Nlc3NvcnMgc3BpbiBvbiB0aGlzIHZhbHVlIHVudGlsIGl0IGdvZXMgdG8gMS4gKi8KKwkvKiBTZWNvbmRhcnkgcHJvY2Vzc29ycyBzcGluIG9uIHRoaXMgdmFsdWUgdW50aWwgaXQgYmVjb21lcyBub256ZXJvLgorCSAqIFdoZW4gaXQgZG9lcyBpdCBjb250YWlucyB0aGUgcmVhbCBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yCisJICogb2YgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIGNwdSBzaG91bGQganVtcCB0byB0byBjb250aW51ZQorCSAqIGluaXRpYWxpemF0aW9uLgorCSAqLwogCS5nbG9ibCAgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcAogX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcDoKIAkubGxvbmcJMHgwCkBAIC0xMDksOCArMTEzLDExIEBACiAgKiBiZWZvcmUgdGhlIGJ1bGsgb2YgdGhlIGtlcm5lbCBoYXMgYmVlbiByZWxvY2F0ZWQuICBUaGlzIGNvZGUKICAqIGlzIHJlbG9jYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzIDB4NjAgYmVmb3JlIHByb21faW5pdCBpcyBydW4uCiAgKiBBbGwgb2YgaXQgbXVzdCBmaXQgYmVsb3cgdGhlIGZpcnN0IGV4Y2VwdGlvbiB2ZWN0b3IgYXQgMHgxMDAuCisgKiBVc2UgLmdsb2JsIGhlcmUgbm90IF9HTE9CQUwgYmVjYXVzZSB3ZSB3YW50IF9fc2Vjb25kYXJ5X2hvbGQKKyAqIHRvIGJlIHRoZSBhY3R1YWwgdGV4dCBhZGRyZXNzLCBub3QgYSBkZXNjcmlwdG9yLgogICovCi1fR0xPQkFMKF9fc2Vjb25kYXJ5X2hvbGQpCisJLmdsb2JsCV9fc2Vjb25kYXJ5X2hvbGQKK19fc2Vjb25kYXJ5X2hvbGQ6CiAJbWZtc3IJcjI0CiAJb3JpCXIyNCxyMjQsTVNSX1JJCiAJbXRtc3JkCXIyNAkJCS8qIFJJIG9uICovCkBAIC0xMjEsMTYgKzEyOCwxNiBAQAogCS8qIFRlbGwgdGhlIG1hc3RlciBjcHUgd2UncmUgaGVyZSAqLwogCS8qIFJlbG9jYXRpb24gaXMgb2ZmICYgd2UgYXJlIGxvY2F0ZWQgYXQgYW4gYWRkcmVzcyBsZXNzICovCiAJLyogdGhhbiAweDEwMCwgc28gb25seSBuZWVkIHRvIGdyYWIgbG93IG9yZGVyIG9mZnNldC4gICAgKi8KLQlzdGQJcjI0LF9fc2Vjb25kYXJ5X2hvbGRfYWNrbm93bGVkZ2VAbCgwKQorCXN0ZAlyMjQsX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZS1fc3RleHQoMCkKIAlzeW5jCiAKIAkvKiBBbGwgc2Vjb25kYXJ5IGNwdXMgd2FpdCBoZXJlIHVudGlsIHRvbGQgdG8gc3RhcnQuICovCi0xMDA6CWxkCXI0LF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3BAbCgwKQotCWNtcGRpCTAscjQsMQotCWJuZQkxMDBiCisxMDA6CWxkCXI0LF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AtX3N0ZXh0KDApCisJY21wZGkJMCxyNCwwCisJYmVxCTEwMGIKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCAuZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQpCisJbGQJcjQsMChyNCkJCS8qIGRlcmVmIGZ1bmN0aW9uIGRlc2NyaXB0b3IgKi8KIAltdGN0cglyNAogCW1yCXIzLHIyNAogCWJjdHIKQEAgLTE0Nyw2ICsxNTQsMTAgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBwU2VyaWVzCiAgKiBUaGlzIGNvZGUgcnVucyB3aXRoIHJlbG9jYXRpb24gb2ZmLgorICogQ29kZSBmcm9tIGhlcmUgdG8gX19lbmRfaW50ZXJydXB0cyBnZXRzIGNvcGllZCBkb3duIHRvIHJlYWwKKyAqIGFkZHJlc3MgMHgxMDAgd2hlbiB3ZSBhcmUgcnVubmluZyBhIHJlbG9jYXRhYmxlIGtlcm5lbC4KKyAqIFRoZXJlZm9yZSBhbnkgcmVsYXRpdmUgYnJhbmNoZXMgaW4gdGhpcyBzZWN0aW9uIG11c3Qgb25seQorICogYnJhbmNoIHRvIGxhYmVscyBpbiB0aGlzIHNlY3Rpb24uCiAgKi8KIAkuID0gMHgxMDAKIAkuZ2xvYmwgX19zdGFydF9pbnRlcnJ1cHRzCkBAIC0yMDAsNyArMjExLDIwIEBACiAJbWZzcHIJcjEwLFNQUk5fU1BSRzEKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAltZnNwcglyMTIsU1BSTl9TUlIxCQkvKiBhbmQgU1JSMSAqLwotCWIJLnNsYl9taXNzX3JlYWxtb2RlCS8qIFJlbC4gYnJhbmNoIHdvcmtzIGluIHJlYWwgbW9kZSAqLworI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwliCS5zbGJfbWlzc19yZWFsbW9kZQorI2Vsc2UKKwkvKgorCSAqIFdlIGNhbid0IGp1c3QgdXNlIGEgZGlyZWN0IGJyYW5jaCB0byAuc2xiX21pc3NfcmVhbG1vZGUKKwkgKiBiZWNhdXNlIHRoZSBkaXN0YW5jZSBmcm9tIGhlcmUgdG8gdGhlcmUgZGVwZW5kcyBvbiB3aGVyZQorCSAqIHRoZSBrZXJuZWwgZW5kcyB1cCBiZWluZyBwdXQuCisJICovCisJbWZjdHIJcjExCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCisJTE9BRF9IQU5ETEVSKHIxMCwgLnNsYl9taXNzX3JlYWxtb2RlKQorCW10Y3RyCXIxMAorCWJjdHIKKyNlbmRpZgogCiAJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NDAwLCBpbnN0cnVjdGlvbl9hY2Nlc3MpCiAKQEAgLTIyNSw3ICsyNDksMTUgQEAKIAltZnNwcglyMTAsU1BSTl9TUFJHMQogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQogCW1mc3ByCXIxMixTUFJOX1NSUjEJCS8qIGFuZCBTUlIxICovCi0JYgkuc2xiX21pc3NfcmVhbG1vZGUJLyogUmVsLiBicmFuY2ggd29ya3MgaW4gcmVhbCBtb2RlICovCisjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQorCWIJLnNsYl9taXNzX3JlYWxtb2RlCisjZWxzZQorCW1mY3RyCXIxMQorCWxkCXIxMCxQQUNBS0JBU0UocjEzKQorCUxPQURfSEFORExFUihyMTAsIC5zbGJfbWlzc19yZWFsbW9kZSkKKwltdGN0cglyMTAKKwliY3RyCisjZW5kaWYKIAogCU1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4NTAwLCBoYXJkd2FyZV9pbnRlcnJ1cHQpCiAJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NjAwLCBhbGlnbm1lbnQpCkBAIC0yNDQsMTQgKzI3NiwxMiBAQAogCWJlcS0JMWYKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1JFQUxfTEUpCiAJbXIJcjkscjEzCi0JbWZtc3IJcjEwCiAJbWZzcHIJcjEzLFNQUk5fU1BSRzMKIAltZnNwcglyMTEsU1BSTl9TUlIwCi0JY2xycmRpCXIxMixyMTMsMzIKLQlvcmlzCXIxMixyMTIsc3lzdGVtX2NhbGxfY29tbW9uQGgKLQlvcmkJcjEyLHIxMixzeXN0ZW1fY2FsbF9jb21tb25AbAorCWxkCXIxMixQQUNBS0JBU0UocjEzKQorCWxkCXIxMCxQQUNBS01TUihyMTMpCisJTE9BRF9IQU5ETEVSKHIxMiwgc3lzdGVtX2NhbGxfZW50cnkpCiAJbXRzcHIJU1BSTl9TUlIwLHIxMgotCW9yaQlyMTAscjEwLE1TUl9JUnxNU1JfRFJ8TVNSX1JJCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlyZmlkCkBAIC0zMjUsMTYgKzM1NSwzMiBAQAogCW1mc3ByCXIxMixTUFJOX1NQUkcyCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhTTEIsIC5kb19zdGFiX2JvbHRlZCkKIAorI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKLSAqIFdlIGhhdmUgc29tZSByb29tIGhlcmUgIHdlIHVzZSB0aGF0IHRvIHB1dAotICogdGhlIHBlcmllcyBzbGIgbWlzcyB1c2VyIHRyYW1wb2xpbmUgY29kZSBzbyBpdCdzIHJlYXNvbmFibHkKLSAqIGF3YXkgZnJvbSBzbGJfbWlzc191c2VyX2NvbW1vbiB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJmaWQKLSAqCisgKiBWZWN0b3JzIGZvciB0aGUgRldOTUkgb3B0aW9uLiAgU2hhcmUgY29tbW9uIGNvZGUuCisgKi8KKwkuZ2xvYmwgc3lzdGVtX3Jlc2V0X2Z3bm1pCisgICAgICAuYWxpZ24gNworc3lzdGVtX3Jlc2V0X2Z3bm1pOgorCUhNVF9NRURJVU0KKwltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgc3lzdGVtX3Jlc2V0X2NvbW1vbikKKworCS5nbG9ibCBtYWNoaW5lX2NoZWNrX2Z3bm1pCisgICAgICAuYWxpZ24gNworbWFjaGluZV9jaGVja19md25taToKKwlITVRfTUVESVVNCisJbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KKworI2lmZGVmIF9fRElTQUJMRURfXworLyoKICAqIFRoaXMgaXMgdXNlZCBmb3Igd2hlbiB0aGUgU0xCIG1pc3MgaGFuZGxlciBoYXMgdG8gZ28gdmlydHVhbCwKICAqIHdoaWNoIGRvZXNuJ3QgaGFwcGVuIGZvciBub3cgYW55bW9yZSBidXQgd2lsbCBvbmNlIHdlIHJlLWltcGxlbWVudAogICogZHluYW1pYyBWU0lEcyBmb3Igc2hhcmVkIHBhZ2UgdGFibGVzCiAgKi8KLSNpZmRlZiBfX0RJU0FCTEVEX18KIHNsYl9taXNzX3VzZXJfcHNlcmllczoKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMykKQEAgLTM1NywyNSArNDAzLDE3IEBACiAJYgkuCQkJCS8qIHByZXZlbnQgc3BlYy4gZXhlY3V0aW9uICovCiAjZW5kaWYgLyogX19ESVNBQkxFRF9fICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKKwkuYWxpZ24JNworCS5nbG9ibAlfX2VuZF9pbnRlcnJ1cHRzCitfX2VuZF9pbnRlcnJ1cHRzOgorCiAvKgotICogVmVjdG9ycyBmb3IgdGhlIEZXTk1JIG9wdGlvbi4gIFNoYXJlIGNvbW1vbiBjb2RlLgorICogQ29kZSBmcm9tIGhlcmUgZG93biB0byBfX2VuZF9oYW5kbGVycyBpcyBpbnZva2VkIGZyb20gdGhlCisgKiBleGNlcHRpb24gcHJvbG9ncyBhYm92ZS4gIEJlY2F1c2UgdGhlIHByb2xvZ3MgYXNzZW1ibGUgdGhlCisgKiBhZGRyZXNzZXMgb2YgdGhlc2UgaGFuZGxlcnMgdXNpbmcgdGhlIExPQURfSEFORExFUiBtYWNybywKKyAqIHdoaWNoIHVzZXMgYW4gYWRkaSBpbnN0cnVjdGlvbiwgdGhlc2UgaGFuZGxlcnMgbXVzdCBiZSBpbgorICogdGhlIGZpcnN0IDMyayBvZiB0aGUga2VybmVsIGltYWdlLgogICovCi0JLmdsb2JsIHN5c3RlbV9yZXNldF9md25taQotICAgICAgLmFsaWduIDcKLXN5c3RlbV9yZXNldF9md25taToKLQlITVRfTUVESVVNCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTX0ZPUkNFXzY0QklUKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24pCi0KLQkuZ2xvYmwgbWFjaGluZV9jaGVja19md25taQotICAgICAgLmFsaWduIDcKLW1hY2hpbmVfY2hlY2tfZndubWk6Ci0JSE1UX01FRElVTQotCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU19GT1JDRV82NEJJVChQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uKQotCi0jZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKIC8qKiogQ29tbW9uIGludGVycnVwdCBoYW5kbGVycyAqKiovCiAKQEAgLTQxNCw2ICs0NTIsMTAgQEAKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweDE4MDAsIGNiZV90aGVybWFsLCAuY2JlX3RoZXJtYWxfZXhjZXB0aW9uKQogI2VuZGlmIC8qIENPTkZJR19DQkVfUkFTICovCiAKKwkuYWxpZ24JNworc3lzdGVtX2NhbGxfZW50cnk6CisJYglzeXN0ZW1fY2FsbF9jb21tb24KKwogLyoKICAqIEhlcmUgd2UgaGF2ZSBkZXRlY3RlZCB0aGF0IHRoZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBpcyBiYWQuCiAgKiBSOSBjb250YWlucyB0aGUgc2F2ZWQgQ1IsIHIxMyBwb2ludHMgdG8gdGhlIHBhY2EsCkBAIC00NTcsNjUgKzQ5OSw2IEBACiAJYgkxYgogCiAvKgotICogUmV0dXJuIGZyb20gYW4gZXhjZXB0aW9uIHdpdGggbWluaW1hbCBjaGVja3MuCi0gKiBUaGUgY2FsbGVyIGlzIGFzc3VtZWQgdG8gaGF2ZSBkb25lIEVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OLgotICogSWYgaW50ZXJydXB0cyBoYXZlIGJlZW4gZW5hYmxlZCwgb3IgYW55dGhpbmcgaGFzIGJlZW4KLSAqIGRvbmUgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHNjaGVkdWxpbmcgc3RhdHVzIG9mCi0gKiBhbnkgdGFzayBvciBzZW50IGFueSB0YXNrIGEgc2lnbmFsLCB5b3Ugc2hvdWxkIHVzZQotICogcmV0X2Zyb21fZXhjZXB0IG9yIHJldF9mcm9tX2V4Y2VwdF9saXRlIGluc3RlYWQgb2YgdGhpcy4KLSAqLwotZmFzdF9leGNfcmV0dXJuX2lycToJCQkvKiByZXN0b3JlcyBpcnEgc3RhdGUgdG9vICovCi0JbGQJcjMsU09GVEUocjEpCi0JVFJBQ0VfQU5EX1JFU1RPUkVfSVJRKHIzKTsKLQlsZAlyMTIsX01TUihyMSkKLQlybGRpY2wJcjQscjEyLDQ5LDYzCQkvKiBnZXQgTVNSX0VFIHRvIExTQiAqLwotCXN0YglyNCxQQUNBSEFSRElSUUVOKHIxMykJLyogcmVzdG9yZSBwYWNhLT5oYXJkX2VuYWJsZWQgKi8KLQliCTFmCi0KLQkuZ2xvYmwJZmFzdF9leGNlcHRpb25fcmV0dXJuCi1mYXN0X2V4Y2VwdGlvbl9yZXR1cm46Ci0JbGQJcjEyLF9NU1IocjEpCi0xOglsZAlyMTEsX05JUChyMSkKLQlhbmRpLglyMyxyMTIsTVNSX1JJCQkvKiBjaGVjayBpZiBSSSBpcyBzZXQgKi8KLQliZXEtCXVucmVjb3ZfZmVyCi0KLSNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwotCWFuZGkuCXIzLHIxMixNU1JfUFIKLQliZXEJMmYKLQlBQ0NPVU5UX0NQVV9VU0VSX0VYSVQocjMsIHI0KQotMjoKLSNlbmRpZgotCi0JbGQJcjMsX0NDUihyMSkKLQlsZAlyNCxfTElOSyhyMSkKLQlsZAlyNSxfQ1RSKHIxKQotCWxkCXI2LF9YRVIocjEpCi0JbXRjcglyMwotCW10bHIJcjQKLQltdGN0cglyNQotCW10eGVyCXI2Ci0JUkVTVF9HUFIoMCwgcjEpCi0JUkVTVF84R1BSUygyLCByMSkKLQotCW1mbXNyCXIxMAotCXJsZGljbAlyMTAscjEwLDQ4LDEJCS8qIGNsZWFyIEVFICovCi0JcmxkaWNyCXIxMCxyMTAsMTYsNjEJCS8qIGNsZWFyIFJJIChMRSBpcyAwIGFscmVhZHkpICovCi0JbXRtc3JkCXIxMCwxCi0KLQltdHNwcglTUFJOX1NSUjEscjEyCi0JbXRzcHIJU1BSTl9TUlIwLHIxMQotCVJFU1RfNEdQUlMoMTAsIHIxKQotCWxkCXIxLEdQUjEocjEpCi0JcmZpZAotCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwotCi11bnJlY292X2ZlcjoKLQlibAkuc2F2ZV9udmdwcnMKLTE6CWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlibAkudW5yZWNvdmVyYWJsZV9leGNlcHRpb24KLQliCTFiCi0KLS8qCiAgKiBIZXJlIHIxMyBwb2ludHMgdG8gdGhlIHBhY2EsIHI5IGNvbnRhaW5zIHRoZSBzYXZlZCBDUiwKICAqIFNSUjAgYW5kIFNSUjEgYXJlIHNhdmVkIGluIHIxMSBhbmQgcjEyLAogICogcjkgLSByMTMgYXJlIHNhdmVkIGluIHBhY2EtPmV4Z2VuLgpAQCAtNjE2LDYgKzU5OSw5IEBACiAgKi8KIF9HTE9CQUwoc2xiX21pc3NfcmVhbG1vZGUpCiAJbWZscglyMTAKKyNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwltdGN0cglyMTEKKyNlbmRpZgogCiAJc3R3CXI5LFBBQ0FfRVhTTEIrRVhfQ0NSKHIxMykJLyogc2F2ZSBDUiBpbiBleGMuIGZyYW1lICovCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX0xSKHIxMykJLyogc2F2ZSBMUiAqLwpAQCAtNjY2LDExICs2NTIsMTAgQEAKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCiAjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAJbWZzcHIJcjExLFNQUk5fU1JSMAotCWNscnJkaQlyMTAscjEzLDMyCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCiAJTE9BRF9IQU5ETEVSKHIxMCx1bnJlY292X3NsYikKIAltdHNwcglTUFJOX1NSUjAscjEwCi0JbWZtc3IJcjEwCi0Jb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkkKKwlsZAlyMTAsUEFDQUtNU1IocjEzKQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlyZmlkCiAJYgkuCkBAIC03NjYsNiArNzUxLDg1IEBACiAJYmwJLmFsdGl2ZWNfdW5hdmFpbGFibGVfZXhjZXB0aW9uCiAJYgkucmV0X2Zyb21fZXhjZXB0CiAKKwkuYWxpZ24JNworCS5nbG9ibCB2c3hfdW5hdmFpbGFibGVfY29tbW9uCit2c3hfdW5hdmFpbGFibGVfY29tbW9uOgorCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4ZjQwLCBQQUNBX0VYR0VOKQorI2lmZGVmIENPTkZJR19WU1gKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYm5lCS5sb2FkX3VwX3ZzeAorMToKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1ZTWCkKKyNlbmRpZgorCWJsCS5zYXZlX252Z3BycworCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlFTkFCTEVfSU5UUworCWJsCS52c3hfdW5hdmFpbGFibGVfZXhjZXB0aW9uCisJYgkucmV0X2Zyb21fZXhjZXB0CisKKwkuYWxpZ24JNworCS5nbG9ibAlfX2VuZF9oYW5kbGVycworX19lbmRfaGFuZGxlcnM6CisKKy8qCisgKiBSZXR1cm4gZnJvbSBhbiBleGNlcHRpb24gd2l0aCBtaW5pbWFsIGNoZWNrcy4KKyAqIFRoZSBjYWxsZXIgaXMgYXNzdW1lZCB0byBoYXZlIGRvbmUgRVhDRVBUSU9OX1BST0xPR19DT01NT04uCisgKiBJZiBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBlbmFibGVkLCBvciBhbnl0aGluZyBoYXMgYmVlbgorICogZG9uZSB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgc2NoZWR1bGluZyBzdGF0dXMgb2YKKyAqIGFueSB0YXNrIG9yIHNlbnQgYW55IHRhc2sgYSBzaWduYWwsIHlvdSBzaG91bGQgdXNlCisgKiByZXRfZnJvbV9leGNlcHQgb3IgcmV0X2Zyb21fZXhjZXB0X2xpdGUgaW5zdGVhZCBvZiB0aGlzLgorICovCitmYXN0X2V4Y19yZXR1cm5faXJxOgkJCS8qIHJlc3RvcmVzIGlycSBzdGF0ZSB0b28gKi8KKwlsZAlyMyxTT0ZURShyMSkKKwlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjMpOworCWxkCXIxMixfTVNSKHIxKQorCXJsZGljbAlyNCxyMTIsNDksNjMJCS8qIGdldCBNU1JfRUUgdG8gTFNCICovCisJc3RiCXI0LFBBQ0FIQVJESVJRRU4ocjEzKQkvKiByZXN0b3JlIHBhY2EtPmhhcmRfZW5hYmxlZCAqLworCWIJMWYKKworCS5nbG9ibAlmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KK2Zhc3RfZXhjZXB0aW9uX3JldHVybjoKKwlsZAlyMTIsX01TUihyMSkKKzE6CWxkCXIxMSxfTklQKHIxKQorCWFuZGkuCXIzLHIxMixNU1JfUkkJCS8qIGNoZWNrIGlmIFJJIGlzIHNldCAqLworCWJlcS0JdW5yZWNvdl9mZXIKKworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJYW5kaS4JcjMscjEyLE1TUl9QUgorCWJlcQkyZgorCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMywgcjQpCisyOgorI2VuZGlmCisKKwlsZAlyMyxfQ0NSKHIxKQorCWxkCXI0LF9MSU5LKHIxKQorCWxkCXI1LF9DVFIocjEpCisJbGQJcjYsX1hFUihyMSkKKwltdGNyCXIzCisJbXRscglyNAorCW10Y3RyCXI1CisJbXR4ZXIJcjYKKwlSRVNUX0dQUigwLCByMSkKKwlSRVNUXzhHUFJTKDIsIHIxKQorCisJbWZtc3IJcjEwCisJcmxkaWNsCXIxMCxyMTAsNDgsMQkJLyogY2xlYXIgRUUgKi8KKwlybGRpY3IJcjEwLHIxMCwxNiw2MQkJLyogY2xlYXIgUkkgKExFIGlzIDAgYWxyZWFkeSkgKi8KKwltdG1zcmQJcjEwLDEKKworCW10c3ByCVNQUk5fU1JSMSxyMTIKKwltdHNwcglTUFJOX1NSUjAscjExCisJUkVTVF80R1BSUygxMCwgcjEpCisJbGQJcjEsR1BSMShyMSkKKwlyZmlkCisJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCisKK3VucmVjb3ZfZmVyOgorCWJsCS5zYXZlX252Z3BycworMToJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWJsCS51bnJlY292ZXJhYmxlX2V4Y2VwdGlvbgorCWIJMWIKKwogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAvKgogICogbG9hZF91cF9hbHRpdmVjKHVudXNlZCwgdW51c2VkLCB0c2spCkBAIC04NDAsMjIgKzkwNCw2IEBACiAJYmxyCiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KIAotCS5hbGlnbgk3Ci0JLmdsb2JsIHZzeF91bmF2YWlsYWJsZV9jb21tb24KLXZzeF91bmF2YWlsYWJsZV9jb21tb246Ci0JRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHhmNDAsIFBBQ0FfRVhHRU4pCi0jaWZkZWYgQ09ORklHX1ZTWAotQkVHSU5fRlRSX1NFQ1RJT04KLQlibmUJLmxvYWRfdXBfdnN4Ci0xOgotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfVlNYKQotI2VuZGlmCi0JYmwJLnNhdmVfbnZncHJzCi0JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCUVOQUJMRV9JTlRTCi0JYmwJLnZzeF91bmF2YWlsYWJsZV9leGNlcHRpb24KLQliCS5yZXRfZnJvbV9leGNlcHQKLQogI2lmZGVmIENPTkZJR19WU1gKIC8qCiAgKiBsb2FkX3VwX3ZzeCh1bnVzZWQsIHVudXNlZCwgdHNrKQpAQCAtMTE3NSwxMSArMTIyMywxNCBAQAogCS8qIHR1cm4gb24gNjQtYml0IG1vZGUgKi8KIAlibAkuZW5hYmxlXzY0Yl9tb2RlCiAKKwkvKiBnZXQgdGhlIFRPQyBwb2ludGVyIChyZWFsIGFkZHJlc3MpICovCisJYmwJLnJlbGF0aXZlX3RvYworCiAJLyogU2V0IHVwIGEgcGFjYSB2YWx1ZSBmb3IgdGhpcyBwcm9jZXNzb3IuIFNpbmNlIHdlIGhhdmUgdGhlCiAJICogcGh5c2ljYWwgY3B1IGlkIGluIHIyNCwgd2UgbmVlZCB0byBzZWFyY2ggdGhlIHBhY2FzIHRvIGZpbmQKIAkgKiB3aGljaCBsb2dpY2FsIGlkIG1hcHMgdG8gb3VyIHBoeXNpY2FsIG9uZS4KIAkgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjEzLCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLworCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLwogCWxpCXI1LDAJCQkvKiBsb2dpY2FsIGNwdSBpZCAgICAgICAgICAgICAgICAqLwogMToJbGh6CXI2LFBBQ0FIV0NQVUlEKHIxMykJLyogTG9hZCBIVyBwcm9jaWQgZnJvbSBwYWNhICAgICAgKi8KIAljbXB3CXI2LHIyNAkJCS8qIENvbXBhcmUgdG8gb3VyIGlkICAgICAgICAgICAgICovCkBAIC0xMjA4LDcgKzEyNTksNyBAQAogCXN5bmMJCQkJLyogb3JkZXIgcGFjYS5ydW4gYW5kIGN1cl9jcHVfc3BlYyAqLwogCiAJLyogU2VlIGlmIHdlIG5lZWQgdG8gY2FsbCBhIGNwdSBzdGF0ZSByZXN0b3JlIGhhbmRsZXIgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBjdXJfY3B1X3NwZWMpCisJTE9BRF9SRUdfQUREUihyMjMsIGN1cl9jcHVfc3BlYykKIAlsZAlyMjMsMChyMjMpCiAJbGQJcjIzLENQVV9TUEVDX1JFU1RPUkUocjIzKQogCWNtcGRpCTAscjIzLDAKQEAgLTEyMjQsMTAgKzEyNzUsMTUgQEAKIAliCV9fc2Vjb25kYXJ5X3N0YXJ0CiAjZW5kaWYKIAorLyoKKyAqIFR1cm4gdGhlIE1NVSBvZmYuCisgKiBBc3N1bWVzIHdlJ3JlIG1hcHBlZCBFQSA9PSBSQSBpZiB0aGUgTU1VIGlzIG9uLgorICovCiBfU1RBVElDKF9fbW11X29mZikKIAltZm1zcglyMwogCWFuZGkuCXIwLHIzLE1TUl9JUnxNU1JfRFIKIAliZXFscgorCW1mbHIJcjQKIAlhbmRjCXIzLHIzLHIwCiAJbXRzcHIJU1BSTl9TUlIwLHI0CiAJbXRzcHIJU1BSTl9TUlIxLHIzCkBAIC0xMjQ4LDYgKzEzMDQsMTggQEAKICAqCiAgKi8KIF9HTE9CQUwoX19zdGFydF9pbml0aWFsaXphdGlvbl9tdWx0aXBsYXRmb3JtKQorCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBpbiA2NCBiaXRzIG1vZGUgKi8KKwlibAkuZW5hYmxlXzY0Yl9tb2RlCisKKwkvKiBHZXQgVE9DIHBvaW50ZXIgKGN1cnJlbnQgcnVudGltZSBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKKworCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KKwliY2wJMjAsMzEsJCs0CiswOgltZmxyCXIyNgkJCS8qIHIyNiA9IHJ1bnRpbWUgYWRkciBoZXJlICovCisJYWRkaXMJcjI2LHIyNiwoX3N0ZXh0IC0gMGIpQGhhCisJYWRkaQlyMjYscjI2LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCisKIAkvKgogCSAqIEFyZSB3ZSBib290ZWQgZnJvbSBhIFBST00gT2YtdHlwZSBjbGllbnQtaW50ZXJmYWNlID8KIAkgKi8KQEAgLTEyNTksOSArMTMyNyw2IEBACiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CiAKLQkvKiBNYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgaW4gNjQgYml0cyBtb2RlICovCi0JYmwJLmVuYWJsZV82NGJfbW9kZQotCiAJLyogU2V0dXAgc29tZSBjcml0aWNhbCA5NzAgU1BScyBiZWZvcmUgc3dpdGNoaW5nIE1NVSBvZmYgKi8KIAltZnNwcglyMCxTUFJOX1BWUgogCXNyd2kJcjAscjAsMTYKQEAgLTEyNzYsOSArMTM0MSw3IEBACiAxOglibAkuX19jcHVfcHJlaW5pdF9wcGM5NzAKIDI6CiAKLQkvKiBTd2l0Y2ggb2ZmIE1NVSBpZiBub3QgYWxyZWFkeSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCwgLl9fYWZ0ZXJfcHJvbV9zdGFydCAtIEtFUk5FTEJBU0UpCi0JYWRkCXI0LHI0LHIzMAorCS8qIFN3aXRjaCBvZmYgTU1VIGlmIG5vdCBhbHJlYWR5IG9mZiAqLwogCWJsCS5fX21tdV9vZmYKIAliCS5fX2FmdGVyX3Byb21fc3RhcnQKIApAQCAtMTI5MywyMiArMTM1NiwxNSBAQAogCS8qCiAJICogQWxpZ24gdGhlIHN0YWNrIHRvIDE2LWJ5dGUgYm91bmRhcnkKIAkgKiBEZXBlbmRpbmcgb24gdGhlIHNpemUgYW5kIGxheW91dCBvZiB0aGUgRUxGIHNlY3Rpb25zIGluIHRoZSBpbml0aWFsCi0JICogYm9vdCBiaW5hcnksIHRoZSBzdGFjayBwb2ludGVyIHdpbGwgYmUgdW5hbGlnbmV0IG9uIFBvd2VyTWFjCisJICogYm9vdCBiaW5hcnksIHRoZSBzdGFjayBwb2ludGVyIG1heSBiZSB1bmFsaWduZWQgb24gUG93ZXJNYWMKIAkgKi8KIAlybGRpY3IJcjEscjEsMCw1OQogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIGluIDY0IGJpdHMgbW9kZSAqLwotCWJsCS5lbmFibGVfNjRiX21vZGUKLQotCS8qIHB1dCBhIHJlbG9jYXRpb24gb2Zmc2V0IGludG8gcjMgKi8KLQlibAkucmVsb2Nfb2Zmc2V0Ci0KLQlMT0FEX1JFR19JTU1FRElBVEUocjIsX190b2Nfc3RhcnQpCi0JYWRkaQlyMixyMiwweDQwMDAKLQlhZGRpCXIyLHIyLDB4NDAwMAotCi0JLyogUmVsb2NhdGUgdGhlIFRPQyBmcm9tIGEgdmlydCBhZGRyIHRvIGEgcmVhbCBhZGRyICovCi0JYWRkCXIyLHIyLHIzCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogUmVsb2NhdGUgY29kZSBmb3Igd2hlcmUgd2UgYXJlIG5vdyAqLworCW1yCXIzLHIyNgorCWJsCS5yZWxvY2F0ZQorI2VuZGlmCiAKIAkvKiBSZXN0b3JlIHBhcmFtZXRlcnMgKi8KIAltcglyMyxyMzEKQEAgLTEzMTgsNjAgKzEzNzQsNTEgQEAKIAltcglyNyxyMjcKIAogCS8qIERvIGFsbCBvZiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBPRiBjbGllbnQgaW50ZXJmYWNlICovCisJbXIJcjgscjI2CiAJYmwJLnByb21faW5pdAogCS8qIFdlIG5ldmVyIHJldHVybiAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogcHJvY2VzcyByZWxvY2F0aW9ucyBmb3IgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCAqLworCWxpcwlyMjUsUEFHRV9PRkZTRVRAaGlnaGVzdAkvKiBjb21wdXRlIHZpcnR1YWwgYmFzZSBvZiBrZXJuZWwgKi8KKwlzbGRpCXIyNSxyMjUsMzIKKwltcglyMyxyMjUKKwlibAkucmVsb2NhdGUKKyNlbmRpZgogCiAvKgotICogV2UgbmVlZCB0byBydW4gd2l0aCBfX3N0YXJ0IGF0IHBoeXNpY2FsIGFkZHJlc3MgUEhZU0lDQUxfU1RBUlQuCisgKiBXZSBuZWVkIHRvIHJ1biB3aXRoIF9zdGV4dCBhdCBwaHlzaWNhbCBhZGRyZXNzIFBIWVNJQ0FMX1NUQVJULgogICogVGhpcyB3aWxsIGxlYXZlIHNvbWUgY29kZSBpbiB0aGUgZmlyc3QgMjU2QiBvZgogICogcmVhbCBtZW1vcnksIHdoaWNoIGFyZSByZXNlcnZlZCBmb3Igc29mdHdhcmUgdXNlLgotICogVGhlIHJlbWFpbmRlciBvZiB0aGUgZmlyc3QgcGFnZSBpcyBsb2FkZWQgd2l0aCB0aGUgZml4ZWQKLSAqIGludGVycnVwdCB2ZWN0b3JzLiAgVGhlIG5leHQgdHdvIHBhZ2VzIGFyZSBmaWxsZWQgd2l0aAotICogdW5rbm93biBleGNlcHRpb24gcGxhY2Vob2xkZXJzLgogICoKICAqIE5vdGU6IFRoaXMgcHJvY2VzcyBvdmVyd3JpdGVzIHRoZSBPRiBleGNlcHRpb24gdmVjdG9ycy4KLSAqCXIyNiA9PSByZWxvY2F0aW9uIG9mZnNldAotICoJcjI3ID09IEtFUk5FTEJBU0UKICAqLwotCWJsCS5yZWxvY19vZmZzZXQKLQltcglyMjYscjMKLQlMT0FEX1JFR19JTU1FRElBVEUocjI3LCBLRVJORUxCQVNFKQotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBQSFlTSUNBTF9TVEFSVCkJLyogdGFyZ2V0IGFkZHIgKi8KLQotCS8vIFhYWCBGSVhNRTogVXNlIHBoeXMgcmV0dXJuZWQgYnkgT0YgKHIzMCkKLQlhZGQJcjQscjI3LHIyNiAJCS8qIHNvdXJjZSBhZGRyCQkJICovCi0JCQkJCS8qIGN1cnJlbnQgYWRkcmVzcyBvZiBfc3RhcnQJICovCi0JCQkJCS8qICAgaS5lLiB3aGVyZSB3ZSBhcmUgcnVubmluZwkgKi8KLQkJCQkJLyoJdGhlIHNvdXJjZSBhZGRyCQkgKi8KLQotCWNtcGRpCXI0LDAJCQkvKiBJbiBzb21lIGNhc2VzIHRoZSBsb2FkZXIgbWF5ICAqLwotCWJuZQkxZgotCWIJLnN0YXJ0X2hlcmVfbXVsdGlwbGF0Zm9ybSAvKiBoYXZlIGFscmVhZHkgcHV0IHVzIGF0IHplcm8gKi8KLQkJCQkJLyogc28gd2UgY2FuIHNraXAgdGhlIGNvcHkuICAgICAgKi8KLTE6CUxPQURfUkVHX0lNTUVESUFURShyNSxjb3B5X3RvX2hlcmUpIC8qICMgYnl0ZXMgb2YgbWVtb3J5IHRvIGNvcHkgKi8KLQlzdWIJcjUscjUscjI3Ci0KKwlsaQlyMywwCQkJLyogdGFyZ2V0IGFkZHIgKi8KKwltci4JcjQscjI2CQkJLyogSW4gc29tZSBjYXNlcyB0aGUgbG9hZGVyIG1heSAgKi8KKwliZXEJOWYJCQkvKiBoYXZlIGFscmVhZHkgcHV0IHVzIGF0IHplcm8gKi8KKwlsaXMJcjUsKGNvcHlfdG9faGVyZSAtIF9zdGV4dClAaGEKKwlhZGRpCXI1LHI1LChjb3B5X3RvX2hlcmUgLSBfc3RleHQpQGwgLyogIyBieXRlcyBvZiBtZW1vcnkgdG8gY29weSAqLwogCWxpCXI2LDB4MTAwCQkvKiBTdGFydCBvZmZzZXQsIHRoZSBmaXJzdCAweDEwMCAqLwogCQkJCQkvKiBieXRlcyB3ZXJlIGNvcGllZCBlYXJsaWVyLgkgKi8KIAogCWJsCS5jb3B5X2FuZF9mbHVzaAkJLyogY29weSB0aGUgZmlyc3QgbiBieXRlcwkgKi8KIAkJCQkJLyogdGhpcyBpbmNsdWRlcyB0aGUgY29kZSBiZWluZwkgKi8KIAkJCQkJLyogZXhlY3V0ZWQgaGVyZS4JCSAqLwotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIwLCA0ZikJLyogSnVtcCB0byB0aGUgY29weSBvZiB0aGlzIGNvZGUgKi8KLQltdGN0cglyMAkJCS8qIHRoYXQgd2UganVzdCBtYWRlL3JlbG9jYXRlZAkgKi8KKwlhZGRpcwlyOCxyMywoNGYgLSBfc3RleHQpQGhhCS8qIEp1bXAgdG8gdGhlIGNvcHkgb2YgdGhpcyBjb2RlICovCisJYWRkaQlyOCxyOCwoNGYgLSBfc3RleHQpQGwJLyogdGhhdCB3ZSBqdXN0IG1hZGUgKi8KKwltdGN0cglyOAogCWJjdHIKIAotNDoJTE9BRF9SRUdfSU1NRURJQVRFKHI1LGtsaW1pdCkKLQlhZGQJcjUscjUscjI2Ci0JbGQJcjUsMChyNSkJCS8qIGdldCB0aGUgdmFsdWUgb2Yga2xpbWl0ICovCi0Jc3ViCXI1LHI1LHIyNworNDoJLyogTm93IGNvcHkgdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCB1cCB0byBfZW5kICovCisJYWRkaXMJcjUscjI2LChwX2VuZCAtIF9zdGV4dClAaGEKKwlsZAlyNSwocF9lbmQgLSBfc3RleHQpQGwocjUpCS8qIGdldCBfZW5kICovCiAJYmwJLmNvcHlfYW5kX2ZsdXNoCQkvKiBjb3B5IHRoZSByZXN0ICovCi0JYgkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtCisKKzk6CWIJLnN0YXJ0X2hlcmVfbXVsdGlwbGF0Zm9ybQorCitwX2VuZDoJLmxsb25nCV9lbmQgLSBfc3RleHQKIAogLyoKICAqIENvcHkgcm91dGluZSB1c2VkIHRvIGNvcHkgdGhlIGtlcm5lbCB0byBzdGFydCBhdCBwaHlzaWNhbCBhZGRyZXNzIDAKQEAgLTE0MzYsNiArMTQ4Myw5IEBACiAJLyogdHVybiBvbiA2NC1iaXQgbW9kZSAqLwogCWJsCS5lbmFibGVfNjRiX21vZGUKIAorCS8qIGdldCBUT0MgcG9pbnRlciAocmVhbCBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKKwogCS8qIENvcHkgc29tZSBDUFUgc2V0dGluZ3MgZnJvbSBDUFUgMCAqLwogCWJsCS5fX3Jlc3RvcmVfY3B1X3BwYzk3MAogCkBAIC0xNDQ1LDEwICsxNDk1LDEwIEBACiAJbXRtc3JkCXIzCQkJLyogUkkgb24gKi8KIAogCS8qIFNldCB1cCBhIHBhY2EgdmFsdWUgZm9yIHRoaXMgcHJvY2Vzc29yLiAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCwgcGFjYSkJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkqLwotCW11bGxpCXIxMyxyMjQsUEFDQV9TSVpFCSAvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLworCUxPQURfUkVHX0FERFIocjQscGFjYSkJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJKi8KKwltdWxsaQlyMTMscjI0LFBBQ0FfU0laRQkvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLwogCWFkZAlyMTMscjEzLHI0CQkvKiBmb3IgdGhpcyBwcm9jZXNzb3IuCQkqLwotCW10c3ByCVNQUk5fU1BSRzMscjEzCQkgLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIFNQUkczCSovCisJbXRzcHIJU1BSTl9TUFJHMyxyMTMJCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBTUFJHMwkqLwogCiAJLyogQ3JlYXRlIGEgdGVtcCBrZXJuZWwgc3RhY2sgZm9yIHVzZSBiZWZvcmUgcmVsb2NhdGlvbiBpcyBvbi4JKi8KIAlsZAlyMSxQQUNBRU1FUkdTUChyMTMpCkBAIC0xNDc2LDkgKzE1MjYsNiBAQAogCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCiAJSE1UX01FRElVTQogCi0JLyogTG9hZCBUT0MgKi8KLQlsZAlyMixQQUNBVE9DKHIxMykKLQogCS8qIERvIGVhcmx5IHNldHVwIGZvciB0aGF0IENQVSAoc3RhYiwgc2xiLCBoYXNoIHRhYmxlIHBvaW50ZXIpICovCiAJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCkBAIC0xNTE1LDkgKzE1NjIsMTEgQEAKIAogLyogCiAgKiBSdW5uaW5nIHdpdGggcmVsb2NhdGlvbiBvbiBhdCB0aGlzIHBvaW50LiAgQWxsIHdlIHdhbnQgdG8gZG8gaXMKLSAqIHplcm8gdGhlIHN0YWNrIGJhY2stY2hhaW4gcG9pbnRlciBiZWZvcmUgZ29pbmcgaW50byBDIGNvZGUuCisgKiB6ZXJvIHRoZSBzdGFjayBiYWNrLWNoYWluIHBvaW50ZXIgYW5kIGdldCB0aGUgVE9DIHZpcnR1YWwgYWRkcmVzcworICogYmVmb3JlIGdvaW5nIGludG8gQyBjb2RlLgogICovCiBfR0xPQkFMKHN0YXJ0X3NlY29uZGFyeV9wcm9sb2cpCisJbGQJcjIsUEFDQVRPQyhyMTMpCiAJbGkJcjMsMAogCXN0ZAlyMywwKHIxKQkJLyogWmVybyB0aGUgc3RhY2sgZnJhbWUgcG9pbnRlcgkqLwogCWJsCS5zdGFydF9zZWNvbmRhcnkKQEAgLTE1MjksMzQgKzE1NzgsNDYgQEAKICAqLwogX0dMT0JBTChlbmFibGVfNjRiX21vZGUpCiAJbWZtc3IJcjExCQkJLyogZ3JhYiB0aGUgY3VycmVudCBNU1IgKi8KLQlsaQlyMTIsMQotCXJsZGljcglyMTIscjEyLE1TUl9TRl9MRywoNjMtTVNSX1NGX0xHKQotCW9yCXIxMSxyMTEscjEyCi0JbGkJcjEyLDEKLQlybGRpY3IJcjEyLHIxMixNU1JfSVNGX0xHLCg2My1NU1JfSVNGX0xHKQorCWxpCXIxMiwoTVNSX1NGIHwgTVNSX0lTRilAaGlnaGVzdAorCXNsZGkJcjEyLHIxMiw0OAogCW9yCXIxMSxyMTEscjEyCiAJbXRtc3JkCXIxMQogCWlzeW5jCiAJYmxyCiAKIC8qCisgKiBUaGlzIHB1dHMgdGhlIFRPQyBwb2ludGVyIGludG8gcjIsIG9mZnNldCBieSAweDgwMDAgKGFzIGV4cGVjdGVkCisgKiBieSB0aGUgdG9vbGNoYWluKS4gIEl0IGNvbXB1dGVzIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB3aGVyZXZlciB3ZQorICogYXJlIHJ1bm5pbmcgYXQgdGhlIG1vbWVudCwgdXNpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4KKyAqLworX0dMT0JBTChyZWxhdGl2ZV90b2MpCisJbWZscglyMAorCWJjbAkyMCwzMSwkKzQKKzA6CW1mbHIJcjkKKwlsZAlyMiwocF90b2MgLSAwYikocjkpCisJYWRkCXIyLHIyLHI5CisJbXRscglyMAorCWJscgorCitwX3RvYzoJLmxsb25nCV9fdG9jX3N0YXJ0ICsgMHg4MDAwIC0gMGIKKworLyoKICAqIFRoaXMgaXMgd2hlcmUgdGhlIG1haW4ga2VybmVsIGNvZGUgc3RhcnRzLgogICovCiBfSU5JVF9TVEFUSUMoc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtKQotCS8qIGdldCBhIG5ldyBvZmZzZXQsIG5vdyB0aGF0IHRoZSBrZXJuZWwgaGFzIG1vdmVkLiAqLwotCWJsCS5yZWxvY19vZmZzZXQKLQltcglyMjYscjMKKwkvKiBzZXQgdXAgdGhlIFRPQyAocmVhbCBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKIAogCS8qIENsZWFyIG91dCB0aGUgQlNTLiBJdCBtYXkgaGF2ZSBiZWVuIGRvbmUgaW4gcHJvbV9pbml0LAogCSAqIGFscmVhZHkgYnV0IHRoYXQncyBpcnJlbGV2YW50IHNpbmNlIHByb21faW5pdCB3aWxsIHNvb24KIAkgKiBiZSBkZXRhY2hlZCBmcm9tIHRoZSBrZXJuZWwgY29tcGxldGVseS4gQmVzaWRlcywgd2UgbmVlZAogCSAqIHRvIGNsZWFyIGl0IG5vdyBmb3Iga2V4ZWMtc3R5bGUgZW50cnkuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIxMSxfX2Jzc19zdG9wKQotCUxPQURfUkVHX0lNTUVESUFURShyOCxfX2Jzc19zdGFydCkKKwlMT0FEX1JFR19BRERSKHIxMSxfX2Jzc19zdG9wKQorCUxPQURfUkVHX0FERFIocjgsX19ic3Nfc3RhcnQpCiAJc3ViCXIxMSxyMTEscjgJCS8qIGJzcyBzaXplCQkJKi8KIAlhZGRpCXIxMSxyMTEsNwkJLyogcm91bmQgdXAgdG8gYW4gZXZlbiBkb3VibGUgd29yZCAqLwotCXJsZGljbC4gcjExLHIxMSw2MSwzCQkvKiBzaGlmdCByaWdodCBieSAzCQkqLworCXNyZGkuCXIxMSxyMTEsMwkJLyogc2hpZnQgcmlnaHQgYnkgMwkJKi8KIAliZXEJNGYKIAlhZGRpCXI4LHI4LC04CiAJbGkJcjAsMApAQCAtMTU2OSwzNSArMTYzMCwzNSBAQAogCW9yaQlyNixyNixNU1JfUkkKIAltdG1zcmQJcjYJCQkvKiBSSSBvbiAqLwogCi0JLyogVGhlIGZvbGxvd2luZyBnZXRzIHRoZSBzdGFjayBhbmQgVE9DIHNldCB1cCB3aXRoIHRoZSByZWdzICovCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyB3ZSdyZSBydW5uaW5nIGF0IGluIGtlcm5zdGFydF9hZGRyICovCisJTE9BRF9SRUdfQUREUihyNCwga2VybnN0YXJ0X2FkZHIpCisJY2xybGRpCXIwLHIyNSwyCisJc3RkCXIwLDAocjQpCisjZW5kaWYKKworCS8qIFRoZSBmb2xsb3dpbmcgZ2V0cyB0aGUgc3RhY2sgc2V0IHVwIHdpdGggdGhlIHJlZ3MgKi8KIAkvKiBwb2ludGluZyB0byB0aGUgcmVhbCBhZGRyIG9mIHRoZSBrZXJuZWwgc3RhY2suICBUaGlzIGlzICAgKi8KIAkvKiBhbGwgZG9uZSB0byBzdXBwb3J0IHRoZSBDIGZ1bmN0aW9uIGNhbGwgYmVsb3cgd2hpY2ggc2V0cyAgKi8KIAkvKiB1cCB0aGUgaHRhYi4gIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHdlIGhhdmUgcmVsb2NhdGVkIHRoZSAgKi8KIAkvKiBrZXJuZWwgYnV0IGFyZSBzdGlsbCBydW5uaW5nIGluIHJlYWwgbW9kZS4gKi8KIAotCUxPQURfUkVHX0lNTUVESUFURShyMyxpbml0X3RocmVhZF91bmlvbikKLQlhZGQJcjMscjMscjI2CisJTE9BRF9SRUdfQUREUihyMyxpbml0X3RocmVhZF91bmlvbikKIAotCS8qIHNldCB1cCBhIHN0YWNrIHBvaW50ZXIgKHBoeXNpY2FsIGFkZHJlc3MpICovCisJLyogc2V0IHVwIGEgc3RhY2sgcG9pbnRlciAqLwogCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKIAlsaQlyMCwwCiAJc3RkdQlyMCwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpCiAKLQkvKiBzZXQgdXAgdGhlIFRPQyAocGh5c2ljYWwgYWRkcmVzcykgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjIsX190b2Nfc3RhcnQpCi0JYWRkaQlyMixyMiwweDQwMDAKLQlhZGRpCXIyLHIyLDB4NDAwMAotCWFkZAlyMixyMixyMjYKLQogCS8qIERvIHZlcnkgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9ucywgaW5jbHVkaW5nIGluaXRpYWwgaGFzaCB0YWJsZSwKIAkgKiBzdGFiIGFuZCBzbGIgc2V0dXAgYmVmb3JlIHdlIHR1cm4gb24gcmVsb2NhdGlvbi4JKi8KIAogCS8qIFJlc3RvcmUgcGFyYW1ldGVycyBwYXNzZWQgZnJvbSBwcm9tX2luaXQva2V4ZWMgKi8KIAltcglyMyxyMzEKLSAJYmwJLmVhcmx5X3NldHVwCisJYmwJLmVhcmx5X3NldHVwCQkvKiBhbHNvIHNldHMgcjEzIGFuZCBTUFJHMyAqLwogCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLCAuc3RhcnRfaGVyZV9jb21tb24pCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBNU1JfS0VSTkVMKQorCUxPQURfUkVHX0FERFIocjMsIC5zdGFydF9oZXJlX2NvbW1vbikKKwlsZAlyNCxQQUNBS01TUihyMTMpCiAJbXRzcHIJU1BSTl9TUlIwLHIzCiAJbXRzcHIJU1BSTl9TUlIxLHI0CiAJcmZpZApAQCAtMTYwNiwyMSArMTY2NywxMSBAQAogCS8qIFRoaXMgaXMgd2hlcmUgYWxsIHBsYXRmb3JtcyBjb252ZXJnZSBleGVjdXRpb24gKi8KIF9JTklUX0dMT0JBTChzdGFydF9oZXJlX2NvbW1vbikKIAkvKiByZWxvY2F0aW9uIGlzIG9uIGF0IHRoaXMgcG9pbnQgKi8KLQotCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBzZXRzIHVwIHRoZSBTUCBhbmQgVE9DIG5vdyB0aGF0IHdlIGFyZSAqLwotCS8qIHJ1bm5pbmcgd2l0aCB0cmFuc2xhdGlvbiBlbmFibGVkLiAqLwotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLGluaXRfdGhyZWFkX3VuaW9uKQotCi0JLyogc2V0IHVwIHRoZSBzdGFjayAqLwotCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKLQlsaQlyMCwwCi0Jc3RkdQlyMCwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpCi0KLQkvKiBMb2FkIHRoZSBUT0MgKi8KLQlsZAlyMixQQUNBVE9DKHIxMykKIAlzdGQJcjEsUEFDQUtTQVZFKHIxMykKIAorCS8qIExvYWQgdGhlIFRPQyAodmlydHVhbCBhZGRyZXNzKSAqLworCWxkCXIyLFBBQ0FUT0MocjEzKQorCiAJYmwJLnNldHVwX3N5c3RlbQogCiAJLyogTG9hZCB1cCB0aGUga2VybmVsIGNvbnRleHQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCAzY2I1MmZhLi41OTAzMDRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC00MjIsNyArNDIyLDYgQEAKICAqICAgcjEyIGlzIHBvaW50ZXIgdG8gdGhlIHB0ZQogICovCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTQKICNkZWZpbmUgRklORF9QVEUJXAogCXJsd2lubQlyMTIsIHIxMCwgMTMsIDE5LCAyOTsJLyogQ29tcHV0ZSBwZ2Rpci9wbWQgb2Zmc2V0ICovCVwKIAlsd3p4CXIxMSwgcjEyLCByMTE7CQkvKiBHZXQgcGdkL3BtZCBlbnRyeSAqLwkJXApAQCAtNDMxLDcgKzQzMCw2IEBACiAJcmx3aW1pCXIxMiwgcjEwLCAyMywgMjAsIDI4OwkvKiBDb21wdXRlIHB0ZSBhZGRyZXNzICovCVwKIAlsd3oJcjExLCA0KHIxMik7CQkvKiBHZXQgcHRlIGVudHJ5ICovCiAjZWxzZQotI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTAKICNkZWZpbmUgRklORF9QVEUJXAogCXJsd2ltaQlyMTEsIHIxMCwgMTIsIDIwLCAyOTsJLyogQ3JlYXRlIEwxIChwZ2Rpci9wbWQpIGFkZHJlc3MgKi8JXAogCWx3eglyMTEsIDAocjExKTsJCS8qIEdldCBMMSBlbnRyeSAqLwkJCVwKQEAgLTU3OSwxMyArNTc3LDE5IEBACiAKIAlGSU5EX1BURQogCWFuZGMuCXIxMyxyMTMscjExCQkvKiBDaGVjayBwZXJtaXNzaW9uICovCi0JYm5lCTJmCQkJLyogQmFpbCBpZiBwZXJtaXNzaW9uIG1pc21hY2ggKi8KIAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLQlsd3oJcjEzLCAwKHIxMikKKyNpZmRlZiBDT05GSUdfU01QCisJc3ViZglyMTAscjExLHIxMgkJLyogY3JlYXRlIGZhbHNlIGRhdGEgZGVwICovCisJbHd6eAlyMTMscjExLHIxMAkJLyogR2V0IHVwcGVyIHB0ZSBiaXRzICovCisjZWxzZQorCWx3eglyMTMsMChyMTIpCQkvKiBHZXQgdXBwZXIgcHRlIGJpdHMgKi8KKyNlbmRpZgogI2VuZGlmCiAKLQkgLyogSnVtcCB0byBjb21tb24gdGxiIGxvYWQgKi8KKwlibmUJMmYJCQkvKiBCYWlsIGlmIHBlcm1pc3Npb24vdmFsaWQgbWlzbWFjaCAqLworCisJLyogSnVtcCB0byBjb21tb24gdGxiIGxvYWQgKi8KIAliCWZpbmlzaF90bGJfbG9hZAogMjoKIAkvKiBUaGUgYmFpbG91dC4gIFJlc3RvcmUgcmVnaXN0ZXJzIHRvIHByZS1leGNlcHRpb24gY29uZGl0aW9ucwpAQCAtNjQwLDExICs2NDQsMTcgQEAKIAogCUZJTkRfUFRFCiAJYW5kYy4JcjEzLHIxMyxyMTEJCS8qIENoZWNrIHBlcm1pc3Npb24gKi8KLQlibmUJMmYJCQkvKiBCYWlsIGlmIHBlcm1pc3Npb24gbWlzbWFjaCAqLwogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotCWx3eglyMTMsIDAocjEyKQorI2lmZGVmIENPTkZJR19TTVAKKwlzdWJmCXIxMCxyMTEscjEyCQkvKiBjcmVhdGUgZmFsc2UgZGF0YSBkZXAgKi8KKwlsd3p4CXIxMyxyMTEscjEwCQkvKiBHZXQgdXBwZXIgcHRlIGJpdHMgKi8KKyNlbHNlCisJbHd6CXIxMywwKHIxMikJCS8qIEdldCB1cHBlciBwdGUgYml0cyAqLwogI2VuZGlmCisjZW5kaWYKKworCWJuZQkyZgkJCS8qIEJhaWwgaWYgcGVybWlzc2lvbiBtaXNtYWNoICovCiAKIAkvKiBKdW1wIHRvIGNvbW1vbiBUTEIgbG9hZCBwb2ludCAqLwogCWIJZmluaXNoX3RsYl9sb2FkCkBAIC03MDIsNyArNzEyLDcgQEAKIC8qCiAgKiBCb3RoIHRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBUTEIgbWlzcyBnZXQgdG8gdGhpcwogICogcG9pbnQgdG8gbG9hZCB0aGUgVExCLgotICoJcjEwIC0gRUEgb2YgZmF1bHQKKyAqCXIxMCAtIGF2YWlsYWJsZSB0byB1c2UKICAqCXIxMSAtIFRMQiAoaW5mbyBmcm9tIExpbnV4IFBURSkKICAqCXIxMiAtIGF2YWlsYWJsZSB0byB1c2UKICAqCXIxMyAtIHVwcGVyIGJpdHMgb2YgUFRFIChpZiBQVEVfNjRCSVQpIG9yIGF2YWlsYWJsZSB0byB1c2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCA1NTBhMTkzLi5lYTFiYTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC01MSwxNyArNTEsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2lvbW11X2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICosIGRtYV9hZGRyX3QsIHVuc2lnbmVkIGludCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQotCW5wYWdlcyA9IElPTU1VX1BBR0VfQUxJR04odmFkZHIgKyBzbGVuKSAtICh2YWRkciAmIElPTU1VX1BBR0VfTUFTSyk7Ci0JbnBhZ2VzID4+PSBJT01NVV9QQUdFX1NISUZUOwotCi0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcHJvdGVjdDRnYihjaGFyICpzdHIpCiB7CiAJaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApCkBAIC0zMjUsNyArMzE0LDcgQEAKIAkJfQogCQkvKiBBbGxvY2F0ZSBpb21tdSBlbnRyaWVzIGZvciB0aGF0IHNlZ21lbnQgKi8KIAkJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgc2dfdmlydChzKTsKLQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHZhZGRyLCBzbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHZhZGRyLCBzbGVuLCBJT01NVV9QQUdFX1NJWkUpOwogCQlhbGlnbiA9IDA7CiAJCWlmIChJT01NVV9QQUdFX1NISUZUIDwgUEFHRV9TSElGVCAmJiBzbGVuID49IFBBR0VfU0laRSAmJgogCQkgICAgKHZhZGRyICYgflBBR0VfTUFTSykgPT0gMCkKQEAgLTQxOCw3ICs0MDcsOCBAQAogCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzOwogCiAJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9NTVVfUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKKwkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwKKwkJCQkJCSBJT01NVV9QQUdFX1NJWkUpOwogCQkJX19pb21tdV9mcmVlKHRibCwgdmFkZHIsIG5wYWdlcyk7CiAJCQlzLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwogCQkJcy0+ZG1hX2xlbmd0aCA9IDA7CkBAIC00NTIsNyArNDQyLDggQEAKIAogCQlpZiAoc2ctPmRtYV9sZW5ndGggPT0gMCkKIAkJCWJyZWFrOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2ctPmRtYV9sZW5ndGgpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2ctPmRtYV9sZW5ndGgsCisJCQkJCSBJT01NVV9QQUdFX1NJWkUpOwogCQlfX2lvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCQlzZyA9IHNnX25leHQoc2cpOwogCX0KQEAgLTU4NCw3ICs1NzUsNyBAQAogCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogCiAJdWFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKLQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModWFkZHIsIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh1YWRkciwgc2l6ZSwgSU9NTVVfUEFHRV9TSVpFKTsKIAogCWlmICh0YmwpIHsKIAkJYWxpZ24gPSAwOwpAQCAtNjE3LDcgKzYwOCw3IEBACiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlpZiAodGJsKSB7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIHNpemUsIElPTU1VX1BBR0VfU0laRSk7CiAJCWlvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGQ5NzJkZWMuLmFjMjIyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNDM5LDggKzQzOSw4IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoaXJxX2hvc3RzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9yYWRpeF9yZWFkZXIpOwotc3RhdGljIHVuc2lnbmVkIGludCBpcnFfcmFkaXhfd3JpdGVyOworc3RhdGljIHVuc2lnbmVkIGludCByZXZtYXBfdHJlZXNfYWxsb2NhdGVkOworc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX3ZpcnFfY291bnQgPSBOUl9JUlFTOwogc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqaXJxX2RlZmF1bHRfaG9zdDsKQEAgLTU4Myw1NyArNTgzLDYgQEAKIAkJaXJxX3ZpcnFfY291bnQgPSBjb3VudDsKIH0KIAotLyogcmFkaXggdHJlZSBub3QgbG9ja2xlc3Mgc2FmZSAhIHdlIHVzZSBhIGJybG9jay10eXBlIG1lY2FuaXNtCi0gKiBmb3Igbm93LCB1bnRpbCB3ZSBjYW4gdXNlIGEgbG9ja2xlc3MgcmFkaXggdHJlZQotICovCi1zdGF0aWMgdm9pZCBpcnFfcmFkaXhfd3Jsb2NrKHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCXVuc2lnbmVkIGludCBjcHUsIG9rOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgKmZsYWdzKTsKLQlpcnFfcmFkaXhfd3JpdGVyID0gMTsKLQlzbXBfbWIoKTsKLQlkbyB7Ci0JCWJhcnJpZXIoKTsKLQkJb2sgPSAxOwotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCQlpZiAocGVyX2NwdShpcnFfcmFkaXhfcmVhZGVyLCBjcHUpKSB7Ci0JCQkJb2sgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghb2spCi0JCQljcHVfcmVsYXgoKTsKLQl9IHdoaWxlKCFvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9yYWRpeF93cnVubG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXNtcF93bWIoKTsKLQlpcnFfcmFkaXhfd3JpdGVyID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaXJxX3JhZGl4X3JkbG9jayh1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAxOwotCXNtcF9tYigpOwotCWlmIChsaWtlbHkoaXJxX3JhZGl4X3dyaXRlciA9PSAwKSkKLQkJcmV0dXJuOwotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAwOwotCXNtcF93bWIoKTsKLQlzcGluX2xvY2soJmlycV9iaWdfbG9jayk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDE7Ci0Jc3Bpbl91bmxvY2soJmlycV9iaWdfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9yYWRpeF9yZHVubG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBpcnFfc2V0dXBfdmlycShzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJICAgIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKQEAgLTc4OCw3ICs3MzcsNiBAQAogewogCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh2aXJxID09IE5PX0lSUSkKIAkJcmV0dXJuOwpAQCAtODIxLDEyICs3NjksMTYgQEAKIAkJCWhvc3QtPnJldm1hcF9kYXRhLmxpbmVhci5yZXZtYXBbaHdpcnFdID0gTk9fSVJROwogCQlicmVhazsKIAljYXNlIElSUV9IT1NUX01BUF9UUkVFOgotCQkvKiBDaGVjayBpZiByYWRpeCB0cmVlIGFsbG9jYXRlZCB5ZXQgKi8KLQkJaWYgKGhvc3QtPnJldm1hcF9kYXRhLnRyZWUuZ2ZwX21hc2sgPT0gMCkKKwkJLyoKKwkJICogQ2hlY2sgaWYgcmFkaXggdHJlZSBhbGxvY2F0ZWQgeWV0LCBpZiBub3QgdGhlbiBub3RoaW5nIHRvCisJCSAqIHJlbW92ZS4KKwkJICovCisJCXNtcF9ybWIoKTsKKwkJaWYgKHJldm1hcF90cmVlc19hbGxvY2F0ZWQgPCAxKQogCQkJYnJlYWs7Ci0JCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKIAkJcmFkaXhfdHJlZV9kZWxldGUoJmhvc3QtPnJldm1hcF9kYXRhLnRyZWUsIGh3aXJxKTsKLQkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwogCQlicmVhazsKIAl9CiAKQEAgLTg3NSw0NSArODI3LDY0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZmluZF9tYXBwaW5nKTsKIAogCi11bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCi0JCQkgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnRyZWU7CiAJc3RydWN0IGlycV9tYXBfZW50cnkgKnB0cjsKIAl1bnNpZ25lZCBpbnQgdmlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7CiAKLQkvKiBDaGVjayBpZiB0aGUgcmFkaXggdHJlZSBleGlzdCB5ZXQuIFdlIHRlc3QgdGhlIHZhbHVlIG9mCi0JICogdGhlIGdmcF9tYXNrIGZvciB0aGF0LiBTbmVha3kgYnV0IHNhdmVzIGFub3RoZXIgaW50IGluIHRoZQotCSAqIHN0cnVjdHVyZS4gSWYgbm90LCB3ZSBmYWxsYmFjayB0byBzbG93IG1vZGUKKwkvKgorCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyBhbmQgaGFzIGJlZSBpbml0aWFsaXplZC4KKwkgKiBJZiBub3QsIHdlIGZhbGxiYWNrIHRvIHNsb3cgbW9kZQogCSAqLwotCXRyZWUgPSAmaG9zdC0+cmV2bWFwX2RhdGEudHJlZTsKLQlpZiAodHJlZS0+Z2ZwX21hc2sgPT0gMCkKKwlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDIpCiAJCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKIAogCS8qIE5vdyB0cnkgdG8gcmVzb2x2ZSAqLwotCWlycV9yYWRpeF9yZGxvY2soJmZsYWdzKTsKLQlwdHIgPSByYWRpeF90cmVlX2xvb2t1cCh0cmVlLCBod2lycSk7Ci0JaXJxX3JhZGl4X3JkdW5sb2NrKGZsYWdzKTsKKwkvKgorCSAqIE5vIHJjdV9yZWFkX2xvY2soaW5nKSBuZWVkZWQsIHRoZSBwdHIgcmV0dXJuZWQgY2FuJ3QgZ28gdW5kZXIgdXMKKwkgKiBhcyBpdCdzIHJlZmVyZW5jaW5nIGFuIGVudHJ5IGluIHRoZSBzdGF0aWMgaXJxX21hcCB0YWJsZS4KKwkgKi8KKwlwdHIgPSByYWRpeF90cmVlX2xvb2t1cCgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOwogCi0JLyogRm91bmQgaXQsIHJldHVybiAqLwotCWlmIChwdHIpIHsKKwkvKgorCSAqIElmIGZvdW5kIGluIHJhZGl4IHRyZWUsIHRoZW4gZmluZS4KKwkgKiBFbHNlIGZhbGxiYWNrIHRvIGxpbmVhciBsb29rdXAgLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGluIHByYWN0aWNlCisJICogYXMgaXQgbWVhbnMgdGhhdCB3ZSBmYWlsZWQgdG8gaW5zZXJ0IHRoZSBub2RlIGluIHRoZSByYWRpeCB0cmVlLgorCSAqLworCWlmIChwdHIpCiAJCXZpcnEgPSBwdHIgLSBpcnFfbWFwOwotCQlyZXR1cm4gdmlycTsKLQl9CisJZWxzZQorCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CiAKLQkvKiBJZiBub3QgdGhlcmUsIHRyeSB0byBpbnNlcnQgaXQgKi8KLQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7Ci0JaWYgKHZpcnEgIT0gTk9fSVJRKSB7Ci0JCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKLQkJcmFkaXhfdHJlZV9pbnNlcnQodHJlZSwgaHdpcnEsICZpcnFfbWFwW3ZpcnFdKTsKLQkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKLQl9CiAJcmV0dXJuIHZpcnE7CiB9CiAKK3ZvaWQgaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoc3RydWN0IGlycV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCisJV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyB5ZXQuCisJICogSWYgbm90LCB0aGVuIHRoZSBpcnEgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlIHdoZW4gaXQgZ2V0cworCSAqIGluaXRpYWxpemVkLgorCSAqLworCXNtcF9ybWIoKTsKKwlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDEpCisJCXJldHVybjsKKworCWlmICh2aXJxICE9IE5PX0lSUSkgeworCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQlyYWRpeF90cmVlX2luc2VydCgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEsCisJCQkJICAmaXJxX21hcFt2aXJxXSk7CisJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwl9Cit9CisKIHVuc2lnbmVkIGludCBpcnFfbGluZWFyX3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCiAJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewpAQCAtMTAyMCwxNCArOTkxLDQ0IEBACiBzdGF0aWMgaW50IGlycV9sYXRlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2hvc3QgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKKwkvKgorCSAqIE5vIG11dHVhbCBleGNsdXNpb24gd2l0aCByZXNwZWN0IHRvIGFjY2Vzc29ycyBvZiB0aGUgdHJlZSBpcyBuZWVkZWQKKwkgKiBoZXJlIGFzIHRoZSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSB2aWEgdGhlIHN0YXRlIHZhcmlhYmxlCisJICogcmV2bWFwX3RyZWVzX2FsbG9jYXRlZC4KKwkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZpcnFfaG9zdHMsIGxpbmspIHsKIAkJaWYgKGgtPnJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9UUkVFKQotCQkJSU5JVF9SQURJWF9UUkVFKCZoLT5yZXZtYXBfZGF0YS50cmVlLCBHRlBfQVRPTUlDKTsKKwkJCUlOSVRfUkFESVhfVFJFRSgmaC0+cmV2bWFwX2RhdGEudHJlZSwgR0ZQX0tFUk5FTCk7CiAJfQotCWlycV9yYWRpeF93cnVubG9jayhmbGFncyk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgcmFkaXggdHJlZXMgaW5pdHMgYXJlIHZpc2libGUgYmVmb3JlIHNldHRpbmcKKwkgKiB0aGUgZmxhZworCSAqLworCXNtcF93bWIoKTsKKwlyZXZtYXBfdHJlZXNfYWxsb2NhdGVkID0gMTsKKworCS8qCisJICogSW5zZXJ0IHRoZSByZXZlcnNlIG1hcHBpbmcgZm9yIHRob3NlIGludGVycnVwdHMgYWxyZWFkeSBwcmVzZW50CisJICogaW4gaXJxX21hcFtdLgorCSAqLworCW11dGV4X2xvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IGlycV92aXJxX2NvdW50OyBpKyspIHsKKwkJaWYgKGlycV9tYXBbaV0uaG9zdCAmJgorCQkgICAgKGlycV9tYXBbaV0uaG9zdC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpKQorCQkJcmFkaXhfdHJlZV9pbnNlcnQoJmlycV9tYXBbaV0uaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwKKwkJCQkJICBpcnFfbWFwW2ldLmh3aXJxLCAmaXJxX21hcFtpXSk7CisJfQorCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSByYWRpeCB0cmVlcyBpbnNlcnRpb25zIGFyZSB2aXNpYmxlIGJlZm9yZSBzZXR0aW5nCisJICogdGhlIGZsYWcKKwkgKi8KKwlzbXBfd21iKCk7CisJcmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA9IDI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggYjNlZWYzMC4uZDA1MWU4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTUxMCwxMCArNTEwLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJfZGVidWcoIiVzOiBjdXJyZW50X2VudGl0bGVkID0gJWx1LCBjdXJyZW50X3dlaWdodCA9ICV1XG4iLAotCSAgICAgICAgIF9fRlVOQ1RJT05fXywgcHBwX2RhdGEuZW50aXRsZW1lbnQsIHBwcF9kYXRhLndlaWdodCk7CisJCSBfX2Z1bmNfXywgcHBwX2RhdGEuZW50aXRsZW1lbnQsIHBwcF9kYXRhLndlaWdodCk7CiAKIAlwcl9kZWJ1ZygiJXM6IG5ld19lbnRpdGxlZCA9ICVsdSwgbmV3X3dlaWdodCA9ICV1XG4iLAotCQkgX19GVU5DVElPTl9fLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOworCQkgX19mdW5jX18sIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CiAKIAlyZXR2YWwgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUFBQLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCXJldHVybiByZXR2YWw7CkBAIC01NTYsMTAgKzU1NiwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogY3VycmVudF9lbnRpdGxlZCA9ICVsdSwgY3VycmVudF93ZWlnaHQgPSAldVxuIiwKLQkgICAgICAgICBfX0ZVTkNUSU9OX18sIG1wcF9kYXRhLmVudGl0bGVkX21lbSwgbXBwX2RhdGEubWVtX3dlaWdodCk7CisJICAgICAgICAgX19mdW5jX18sIG1wcF9kYXRhLmVudGl0bGVkX21lbSwgbXBwX2RhdGEubWVtX3dlaWdodCk7CiAKIAlwcl9kZWJ1ZygiJXM6IG5ld19lbnRpdGxlZCA9ICVsdSwgbmV3X3dlaWdodCA9ICV1XG4iLAotCSAgICAgICAgIF9fRlVOQ1RJT05fXywgbmV3X2VudGl0bGVkLCBuZXdfd2VpZ2h0KTsKKwkJIF9fZnVuY19fLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCiAJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfTVBQLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKaW5kZXggODVjYjZmMy4uMmQyOTc1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKQEAgLTMxLDExICszMSwxNCBAQAogCW1mbHIJcjAKIAlibAkxZgogMToJbWZscglyMwotCUxPQURfUkVHX0lNTUVESUFURShyNCwxYikKKwlQUENfTEwJcjQsKDJmLTFiKShyMykKIAlzdWJmCXIzLHI0LHIzCiAJbXRscglyMAogCWJscgogCisJLmFsaWduCTMKKzI6CVBQQ19MT05HIDFiCisKIC8qCiAgKiBhZGRfcmVsb2Nfb2Zmc2V0KHgpIHJldHVybnMgeCArIHJlbG9jX29mZnNldCgpLgogICovCkBAIC00MywxMiArNDYsMTUgQEAKIAltZmxyCXIwCiAJYmwJMWYKIDE6CW1mbHIJcjUKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCisJUFBDX0xMCXI0LCgyZi0xYikocjUpCiAJc3ViZglyNSxyNCxyNQogCWFkZAlyMyxyMyxyNQogCW10bHIJcjAKIAlibHIKIAorCS5hbGlnbgkzCisyOglQUENfTE9ORyAxYgorCiBfR0xPQkFMKGtlcm5lbF9leGVjdmUpCiAJbGkJcjAsX19OUl9leGVjdmUKIAlzYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCA3YTZkZmJjLi42YTliNGJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtMjc0LDYgKzI3NCwxMCBAQAogLyoKICAqIEZsdXNoIE1NVSBUTEIKICAqLworI2lmbmRlZiBDT05GSUdfRlNMX0JPT0tFCitfR0xPQkFMKF90bGJpbF9hbGwpCitfR0xPQkFMKF90bGJpbF9waWQpCisjZW5kaWYKIF9HTE9CQUwoX3RsYmlhKQogI2lmIGRlZmluZWQoQ09ORklHXzQweCkKIAlzeW5jCQkJLyogRmx1c2ggdG8gbWVtb3J5IGJlZm9yZSBjaGFuZ2luZyBtYXBwaW5nICovCkBAIC0zNDQsNiArMzQ4LDkgQEAKIC8qCiAgKiBGbHVzaCBNTVUgVExCIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcwogICovCisjaWZuZGVmIENPTkZJR19GU0xfQk9PS0UKK19HTE9CQUwoX3RsYmlsX3ZhKQorI2VuZGlmCiBfR0xPQkFMKF90bGJpZSkKICNpZiBkZWZpbmVkKENPTkZJR180MHgpCiAJLyogV2UgcnVuIHRoZSBzZWFyY2ggd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2Ugd2UgaGF2ZSB0byBjaGFuZ2UKQEAgLTQzNiw2ICs0NDMsNTMgQEAKICNlbmRpZiAvKiAhIENPTkZJR180MHggKi8KIAlibHIKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKy8qCisgKiBGbHVzaCBNTVUgVExCLCBidXQgb25seSBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yIChubyBicm9hZGNhc3QpCisgKi8KK19HTE9CQUwoX3RsYmlsX2FsbCkKKyNkZWZpbmUgTU1VQ1NSMF9UTEJGSQkoTU1VQ1NSMF9UTEIwRkkgfCBNTVVDU1IwX1RMQjFGSSB8IFwKKwkJCSBNTVVDU1IwX1RMQjJGSSB8IE1NVUNTUjBfVExCM0ZJKQorCWxpCXIzLChNTVVDU1IwX1RMQkZJKUBsCisJbXRzcHIJU1BSTl9NTVVDU1IwLCByMworMToKKwltZnNwcglyMyxTUFJOX01NVUNTUjAKKwlhbmRpLglyMyxyMyxNTVVDU1IwX1RMQkZJQGwKKwlibmUJMWIKKwlibHIKKworLyoKKyAqIEZsdXNoIE1NVSBUTEIgZm9yIGEgcGFydGljdWxhciBwcm9jZXNzIGlkLCBidXQgb25seSBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yCisgKiAobm8gYnJvYWRjYXN0KQorICovCitfR0xPQkFMKF90bGJpbF9waWQpCisvKiB3ZSBjdXJyZW50bHkgZG8gYW4gaW52YWxpZGF0ZSBhbGwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBwZXIgcGlkIGludmFsaWRhdGUgKi8KKwlsaQlyMywoTU1VQ1NSMF9UTEJGSSlAbAorCW10c3ByCVNQUk5fTU1VQ1NSMCwgcjMKKzE6CisJbWZzcHIJcjMsU1BSTl9NTVVDU1IwCisJYW5kaS4JcjMscjMsTU1VQ1NSMF9UTEJGSUBsCisJYm5lCTFiCisJYmxyCisKKy8qCisgKiBGbHVzaCBNTVUgVExCIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcywgYnV0IG9ubHkgb24gdGhlIGxvY2FsIHByb2Nlc3NvcgorICogKG5vIGJyb2FkY2FzdCkKKyAqLworX0dMT0JBTChfdGxiaWxfdmEpCisJc2x3aQlyNCxyNCwxNgorCW10c3ByCVNQUk5fTUFTNixyNAkJLyogYXNzdW1lIEFTPTAgZm9yIG5vdyAqLworCXRsYnN4CTAscjMKKwltZnNwcglyNCxTUFJOX01BUzEJCS8qIGNoZWNrIHZhbGlkICovCisJYW5kaXMuCXIzLHI0LE1BUzFfVkFMSURAaAorCWJlcWxyCisJcmx3aW5tCXI0LHI0LDAsMSwzMQorCW10c3ByCVNQUk5fTUFTMSxyNAorCXRsYndlCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZTTF9CT09LRSAqLworCisKIC8qCiAgKiBGbHVzaCBpbnN0cnVjdGlvbiBjYWNoZS4KICAqIFRoaXMgaXMgYSBuby1vcCBvbiB0aGUgNjAxLgpAQCAtODQ2LDggKzkwMCwxMCBAQAogCWxpCXI0LDAJCS8qIG5ldyBzcCAodW51c2VkKSAqLwogCWxpCXIwLF9fTlJfY2xvbmUKIAlzYwotCWNtcHdpCTAscjMsMAkJLyogcGFyZW50IG9yIGNoaWxkPyAqLwotCWJuZQkxZgkJLyogcmV0dXJuIGlmIHBhcmVudCAqLworCWJucysJMWYJCS8qIGRpZCBzeXN0ZW0gY2FsbCBpbmRpY2F0ZSBlcnJvcj8gKi8KKwluZWcJcjMscjMJCS8qIGlmIHNvLCBtYWtlIHJldHVybiBjb2RlIG5lZ2F0aXZlICovCisxOgljbXB3aQkwLHIzLDAJCS8qIHBhcmVudCBvciBjaGlsZD8gKi8KKwlibmUJMmYJCS8qIHJldHVybiBpZiBwYXJlbnQgKi8KIAlsaQlyMCwwCQkvKiBtYWtlIHRvcC1sZXZlbCBzdGFjayBmcmFtZSAqLwogCXN0d3UJcjAsLTE2KHIxKQogCW10bHIJcjMwCQkvKiBmbiBhZGRyIGluIGxyICovCkBAIC04NTcsNyArOTEzLDcgQEAKIAlsaQlyMCxfX05SX2V4aXQJLyogZXhpdCBpZiBmdW5jdGlvbiByZXR1cm5zICovCiAJbGkJcjMsMAogCXNjCi0xOglsd3oJcjMwLDgocjEpCisyOglsd3oJcjMwLDgocjEpCiAJbHd6CXIzMSwxMihyMSkKIAlhZGRpCXIxLHIxLDE2CiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IDRkZDcwY2YuLjMwNTNmZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC00MjYsOCArNDI2LDEwIEBACiAJbGkJcjQsMAkJLyogbmV3IHNwICh1bnVzZWQpICovCiAJbGkJcjAsX19OUl9jbG9uZQogCXNjCi0JY21wZGkJMCxyMywwCQkvKiBwYXJlbnQgb3IgY2hpbGQ/ICovCi0JYm5lCTFmCQkvKiByZXR1cm4gaWYgcGFyZW50ICovCisJYm5zKwkxZgkJLyogZGlkIHN5c3RlbSBjYWxsIGluZGljYXRlIGVycm9yPyAqLworCW5lZwlyMyxyMwkJLyogaWYgc28sIG1ha2UgcmV0dXJuIGNvZGUgbmVnYXRpdmUgKi8KKzE6CWNtcGRpCTAscjMsMAkJLyogcGFyZW50IG9yIGNoaWxkPyAqLworCWJuZQkyZgkJLyogcmV0dXJuIGlmIHBhcmVudCAqLwogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAlsZAlyMiw4KHIyOSkKQEAgLTQzOCw3ICs0NDAsNyBAQAogCWxpCXIwLF9fTlJfZXhpdAkvKiBleGl0IGFmdGVyIGNoaWxkIGV4aXRzICovCiAgICAgICAgIGxpCXIzLDAKIAlzYwotMToJYWRkaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAkKKzI6CWFkZGkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlsZAlyMjksLTI0KHIxKQogCWxkCXIzMCwtMTYocjEpCiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCBlOWJlOTA4Li45M2FlNWIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAlkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAJZGV2LT5kZXYucmVsZWFzZSA9IG9mX3JlbGVhc2VfZGV2OwogCWRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUgPSBucDsKLQlkZXYtPmRldi5hcmNoZGF0YS5udW1hX25vZGUgPSBvZl9ub2RlX3RvX25pZChucCk7CisJc2V0X2Rldl9ub2RlKCZkZXYtPmRldiwgb2Zfbm9kZV90b19uaWQobnApKTsKIAogCWlmIChidXNfaWQpCiAJCXN0cmxjcHkoZGV2LT5kZXYuYnVzX2lkLCBidXNfaWQsIEJVU19JRF9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggYzliZjE3ZS4uNDhhMzQ3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAvKiBUaGlzIHN5bWJvbCBpcyBwcm92aWRlZCBieSB0aGUgbGlua2VyIC0gbGV0IGl0IGZpbGwgaW4gdGhlIHBhY2EKICAqIGZpZWxkIGNvcnJlY3RseSAqLwpAQCAtNzksNiArODAsOCBAQAogCQluZXdfcGFjYS0+bG9ja190b2tlbiA9IDB4ODAwMDsKIAkJbmV3X3BhY2EtPnBhY2FfaW5kZXggPSBjcHU7CiAJCW5ld19wYWNhLT5rZXJuZWxfdG9jID0ga2VybmVsX3RvYzsKKwkJbmV3X3BhY2EtPmtlcm5lbGJhc2UgPSAodW5zaWduZWQgbG9uZykgX3N0ZXh0OworCQluZXdfcGFjYS0+a2VybmVsX21zciA9IE1TUl9LRVJORUw7CiAJCW5ld19wYWNhLT5od19jcHVfaWQgPSAweGZmZmY7CiAJCW5ld19wYWNhLT5zbGJfc2hhZG93X3B0ciA9ICZzbGJfc2hhZG93W2NwdV07CiAJCW5ld19wYWNhLT5fX2N1cnJlbnQgPSAmaW5pdF90YXNrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBlYTBjNjFlLi4wMWNlOGMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtNTYsNiArNTYsMzQgQEAKIC8qIERlZmF1bHQgUENJIGZsYWdzIGlzIDAgKi8KIHVuc2lnbmVkIGludCBwcGNfcGNpX2ZsYWdzOwogCitzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHM7CisKK3ZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpCit7CisJcGNpX2RtYV9vcHMgPSBkbWFfb3BzOworfQorCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCkKK3sKKwlyZXR1cm4gcGNpX2RtYV9vcHM7Cit9CitFWFBPUlRfU1lNQk9MKGdldF9wY2lfZG1hX29wcyk7CisKK2ludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQoreworCXJldHVybiBkbWFfc2V0X21hc2soJmRldi0+ZGV2LCBtYXNrKTsKK30KKworaW50IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOworCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKKworCXJldHVybiByYzsKK30KKwogc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CkBAIC0xODAsNiArMjA4LDI2IEBACiAJcmV0dXJuIHN0cjsKIH0KIAordm9pZCBfX2RldmluaXQgcGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGRldl9hcmNoZGF0YSAqc2QgPSAmZGV2LT5kZXYuYXJjaGRhdGE7CisKKwlzZC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCisJREJHKCJQQ0k6IGRldmljZSAlcyBPRiBub2RlOiAlc1xuIiwgcGNpX25hbWUoZGV2KSwKKwkgICAgc2QtPm9mX25vZGUgPyBzZC0+b2Zfbm9kZS0+ZnVsbF9uYW1lIDogIjxub25lPiIpOworCisJc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKKyNpZmRlZiBDT05GSUdfUFBDMzIKKwlzZC0+ZG1hX2RhdGEgPSAodm9pZCAqKVBDSV9EUkFNX09GRlNFVDsKKyNlbmRpZgorCXNldF9kZXZfbm9kZSgmZGV2LT5kZXYsIHBjaWJ1c190b19ub2RlKGRldi0+YnVzKSk7CisKKwlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQorCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKTsKKwogLyoKICAqIFJlYWRzIHRoZSBpbnRlcnJ1cHQgcGluIHRvIGRldGVybWluZSBpZiBpbnRlcnJ1cHQgaXMgdXNlIGJ5IGNhcmQuCiAgKiBJZiB0aGUgaW50ZXJydXB0IGlzIHVzZWQsIHRoZW4gZ2V0cyB0aGUgaW50ZXJydXB0IGxpbmUgZnJvbSB0aGUKQEAgLTM3MSw3ICs0MTksNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmZvdW5kID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIHByb3QgPSBwZ3Byb3RfdmFsKHByb3RlY3Rpb24pOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcGZuIDw8IFBBR0VfU0hJRlQ7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9ICgocmVzb3VyY2Vfc2l6ZV90KXBmbikgPDwgUEFHRV9TSElGVDsKIAlpbnQgaTsKIAogCWlmIChwYWdlX2lzX3JhbShwZm4pKQpAQCAtNDIyLDcgKzQ3MCw4IEBACiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpCiB7Ci0JcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0KKwkJKChyZXNvdXJjZV9zaXplX3Qpdm1hLT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJwOwogCWludCByZXQ7CiAKQEAgLTczMSwxMSArNzgwLDYgQEAKIAogCXJlcy0+c3RhcnQgPSAocmVzLT5zdGFydCArIG9mZnNldCkgJiBtYXNrOwogCXJlcy0+ZW5kID0gKHJlcy0+ZW5kICsgb2Zmc2V0KSAmIG1hc2s7Ci0KLQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAotCQkgcGNpX25hbWUoZGV2KSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogfQogCiAKQEAgLTc4MSw2ICs4MjUsMTEgQEAKIAkJCSAodW5zaWduZWQgaW50KXJlcy0+ZmxhZ3MpOwogCiAJCWZpeHVwX3Jlc291cmNlKHJlcywgZGV2KTsKKworCQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAorCQkJIHBjaV9uYW1lKGRldiksCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCX0KIAogCS8qIENhbGwgbWFjaGluZSBzcGVjaWZpYyByZXNvdXJjZSBmaXh1cCAqLwpAQCAtNzg5LDU4ICs4MzgsMTI3IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpYmlvc19maXh1cF9yZXNvdXJjZXMpOwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgX19wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaWd1cmUgb3V0IGlmIGEgYnJpZGdlIHJlc291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCisgKiBieSB0aGUgZmlybXdhcmUgb3Igbm90LiBJdCBkb2Vzbid0IGhhdmUgdG8gYmUgYWJzb2x1dGVseSBidWxsZXQgcHJvb2YsIGJ1dAorICogdGhpbmdzIGdvIG1vcmUgc21vb3RobHkgd2hlbiBpdCBnZXRzIGl0IHJpZ2h0LiBJdCBzaG91bGQgY292ZXJzIGNhc2VzIHN1Y2gKKyAqIGFzIEFwcGxlICJjbG9zZWQiIGJyaWRnZSByZXNvdXJjZXMgYW5kIGJhcmUtbWV0YWwgcFNlcmllcyB1bmFzc2lnbmVkIGJyaWRnZXMKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgcGNpYmlvc191bmluaXRpYWxpemVkX2JyaWRnZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKwl1MTYgY29tbWFuZDsKKwlpbnQgaTsKKworCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIFBDSV9QUk9CRV9PTkxZIGlzIHNldCAqLworCWlmIChwcGNfcGNpX2ZsYWdzICYgUFBDX1BDSV9QUk9CRV9PTkxZKQorCQlyZXR1cm4gMDsKKworCS8qIEpvYiBpcyBhIGJpdCBkaWZmZXJlbnQgYmV0d2VlbiBtZW1vcnkgYW5kIElPICovCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkvKiBJZiB0aGUgQkFSIGlzIG5vbi0wIChyZXMgIT0gcGNpX21lbV9vZmZzZXQpIHRoZW4gaXQncyBwcm9iYWJseSBiZWVuCisJCSAqIGluaXRpYWxpemVkIGJ5IHNvbWVib2R5CisJCSAqLworCQlpZiAocmVzLT5zdGFydCAhPSBob3NlLT5wY2lfbWVtX29mZnNldCkKKwkJCXJldHVybiAwOworCisJCS8qIFRoZSBCQVIgaXMgMCwgbGV0J3MgY2hlY2sgaWYgbWVtb3J5IGRlY29kaW5nIGlzIGVuYWJsZWQgb24KKwkJICogdGhlIGJyaWRnZS4gSWYgbm90LCB3ZSBjb25zaWRlciBpdCB1bmFzc2lnbmVkCisJCSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJCWlmICgoY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPT0gMCkKKwkJCXJldHVybiAxOworCisJCS8qIE1lbW9yeSBkZWNvZGluZyBpcyBlbmFibGVkIGFuZCB0aGUgQkFSIGlzIDAuIElmIGFueSBvZiB0aGUgYnJpZGdlCisJCSAqIHJlc291cmNlcyBjb3ZlcnMgdGhhdCBzdGFydGluZyBhZGRyZXNzICgwIHRoZW4gaXQncyBnb29kIGVub3VnaCBmb3IKKwkJICogdXMgZm9yIG1lbW9yeQorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKChob3NlLT5tZW1fcmVzb3VyY2VzW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCQkgICAgaG9zZS0+bWVtX3Jlc291cmNlc1tpXS5zdGFydCA9PSBob3NlLT5wY2lfbWVtX29mZnNldCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFdlbGwsIGl0IHN0YXJ0cyBhdCAwIGFuZCB3ZSBrbm93IGl0IHdpbGwgY29sbGlkZSBzbyB3ZSBtYXkgYXMKKwkJICogd2VsbCBjb25zaWRlciBpdCBhcyB1bmFzc2lnbmVkLiBUaGF0IGNvdmVycyB0aGUgQXBwbGUgY2FzZS4KKwkJICovCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIElmIHRoZSBCQVIgaXMgbm9uLTAsIHRoZW4gd2UgY29uc2lkZXIgaXQgYXNzaWduZWQgKi8KKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7CisJCWlmICgoKHJlcy0+c3RhcnQgLSBvZmZzZXQpICYgMHhmZmZmZmZmZnVsKSAhPSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSGVyZSwgd2UgYXJlIGEgYml0IGRpZmZlcmVudCB0aGFuIG1lbW9yeSBhcyB0eXBpY2FsbHkgSU8gc3BhY2UKKwkJICogc3RhcnRpbmcgYXQgbG93IGFkZHJlc3NlcyAtaXMtIHZhbGlkLiBXaGF0IHdlIGRvIGluc3RlYWQgaWYgdGhhdAorCQkgKiB3ZSBjb25zaWRlciBhcyB1bmFzc2lnbmVkIGFueXRoaW5nIHRoYXQgZG9lc24ndCBoYXZlIElPIGVuYWJsZWQKKwkJICogaW4gdGhlIFBDSSBjb21tYW5kIHJlZ2lzdGVyLCBhbmQgdGhhdCdzIGl0LgorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSXQncyBzdGFydGluZyBhdCAwIGFuZCBJTyBpcyBkaXNhYmxlZCBpbiB0aGUgYnJpZGdlLCBjb25zaWRlcgorCQkgKiBpdCB1bmFzc2lnbmVkCisJCSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIEZpeHVwIHJlc291cmNlcyBvZiBhIFBDSTwtPlBDSSBicmlkZ2UgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2ZpeHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7ICsraSkgeworCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCFyZXMtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmIChpID49IDMgJiYgYnVzLT5zZWxmLT50cmFuc3BhcmVudCkKKwkJCWNvbnRpbnVlOworCisJCXByX2RlYnVnKCJQQ0k6JXMgQnVzIHJzcmMgJWQgJTAxNmxseC0lMDE2bGx4IFsleF0gZml4dXAuLi5cbiIsCisJCQkgcGNpX25hbWUoZGV2KSwgaSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsXAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCisJCQkgKHVuc2lnbmVkIGludClyZXMtPmZsYWdzKTsKKworCQkvKiBQZXJmb3JtIGZpeHVwICovCisJCWZpeHVwX3Jlc291cmNlKHJlcywgZGV2KTsKKworCQkvKiBUcnkgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgUDJQIGJyaWRnZSByZXNvdXJjZXMsCisJCSAqIGFuZCBjbGVhciB0aGVtIG91dCBzbyB0aGV5IGdldCByZS1hc3NpZ25lZCBsYXRlcgorCQkgKi8KKwkJaWYgKHBjaWJpb3NfdW5pbml0aWFsaXplZF9icmlkZ2VfcmVzb3VyY2UoYnVzLCByZXMpKSB7CisJCQlyZXMtPmZsYWdzID0gMDsKKwkJCXByX2RlYnVnKCJQQ0k6JXMgICAgICAgICAgICAodW5hc3NpZ25lZClcbiIsIHBjaV9uYW1lKGRldikpOworCQl9IGVsc2UgeworCisJCQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAorCQkJCSBwY2lfbmFtZShkZXYpLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgX19wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CiAKIAlwcl9kZWJ1ZygiUENJOiBGaXh1cCBidXMgJWQgKCVzKVxuIiwgYnVzLT5udW1iZXIsIGRldiA/IHBjaV9uYW1lKGRldikgOiAiUEhCIik7CiAKIAkvKiBGaXh1cCBQQ0k8LT5QQ0kgYnJpZGdlcy4gSG9zdCBicmlkZ2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHksIGZvcgogCSAqIG5vdyBkaWZmZXJlbnRseSBiZXR3ZWVuIDMyIGFuZCA2NCBiaXRzLgogCSAqLwotCWlmIChkZXYgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIXJlcy0+ZmxhZ3MpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoaSA+PSAzICYmIGJ1cy0+c2VsZi0+dHJhbnNwYXJlbnQpCi0JCQkJY29udGludWU7Ci0JCQkvKiBPbiBQb3dlck1hYywgQXBwbGUgbGVhdmVzIGJyaWRnZSB3aW5kb3dzIG9wZW4gb3ZlcgotCQkJICogYW4gaW5hY2Nlc3NpYmxlIHJlZ2lvbiBvZiBtZW1vcnkgc3BhY2UgKDAuLi5mZmZmZikKLQkJCSAqIHdoaWNoIGlzIHNvbWV3aGF0IGJvZ3VzLCBidXQgdGhhdCdzIHdoYXQgdGhleSB0aGluawotCQkJICogbWVhbnMgZGlzYWJsZWQuLi4KLQkJCSAqCi0JCQkgKiBXZSBjbGVhciB0aG9zZSB0byBmb3JjZSB0aGVtIHRvIGJlIHJlYWxsb2NhdGVkIGxhdGVyCi0JCQkgKgotCQkJICogV2UgZGV0ZWN0IHN1Y2ggcmVnaW9ucyBieSB0aGUgZmFjdCB0aGF0IHRoZSBiYXNlIGlzCi0JCQkgKiBlcXVhbCB0byB0aGUgcGNpX21lbV9vZmZzZXQgb2YgdGhlIGhvc3QgYnJpZGdlIGFuZAotCQkJICogdGhlaXIgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMU0uCi0JCQkgKi8KLQkJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0gJiYKLQkJCSAgICByZXMtPnN0YXJ0ID09IGhvc2UtPnBjaV9tZW1fb2Zmc2V0ICYmCi0JCQkgICAgcmVzLT5lbmQgPCAweDEwMDAwMCkgewotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIlBDSTogQ2xvc2luZyBib2d1cyBBcHBsZSBGaXJtd2FyZSIKLQkJCQkgICAgICAgIiByZWdpb24gJWQgb24gYnVzIDB4JTAyeFxuIiwKLQkJCQkgICAgICAgaSwgYnVzLT5udW1iZXIpOwotCQkJCXJlcy0+ZmxhZ3MgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlwcl9kZWJ1ZygiUENJOiVzIEJ1cyByc3JjICVkICUwMTZsbHgtJTAxNmxseCBbJXhdIGZpeHVwLi4uXG4iLAotCQkJCSBwY2lfbmFtZShkZXYpLCBpLAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsXAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAotCQkJCSAodW5zaWduZWQgaW50KXJlcy0+ZmxhZ3MpOwotCi0JCQlmaXh1cF9yZXNvdXJjZShyZXMsIGRldik7Ci0JCX0KLQl9CisJaWYgKGRldiAhPSBOVUxMKQorCQlwY2liaW9zX2ZpeHVwX2JyaWRnZShidXMpOwogCiAJLyogQWRkaXRpb25hbCBzZXR1cCB0aGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIDMyIGFuZCA2NCBiaXRzIGZvciBub3cgKi8KIAlwY2liaW9zX2RvX2J1c19zZXR1cChidXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKaW5kZXggODhkYjRmZi4uMTMxYjFkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCkBAIC01MywxMiArNTMsMTkgQEAKIAogc3RhdGljIGludCBwY2lfYnVzX2NvdW50OwogCisvKiBUaGlzIHdpbGwgcmVtYWluIE5VTEwgZm9yIG5vdywgdW50aWwgaXNhLWJyaWRnZS5jIGlzIG1hZGUgY29tbW9uCisgKiB0byBib3RoIDMyLWJpdCBhbmQgNjQtYml0LgorICovCitzdHJ1Y3QgcGNpX2RldiAqaXNhX2JyaWRnZV9wY2lkZXY7CitFWFBPUlRfU1lNQk9MX0dQTChpc2FfYnJpZGdlX3BjaWRldik7CisKIHN0YXRpYyB2b2lkCi1maXh1cF9oaWRlX2hvc3RfcmVzb3VyY2VfZnNsKHN0cnVjdCBwY2lfZGV2KiBkZXYpCitmaXh1cF9oaWRlX2hvc3RfcmVzb3VyY2VfZnNsKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IGksIGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OwogCi0JaWYgKChjbGFzcyA9PSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BPV0VSUEMpICYmCisJaWYgKChjbGFzcyA9PSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BPV0VSUEMgfHwKKwkgICAgIGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfT1RIRVIpICYmCiAJCShkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpICYmCiAJCShkZXYtPmJ1cy0+cGFyZW50ID09IE5VTEwpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewpAQCAtNDI0LDYgKzQzMSw3IEBACiAJdW5zaWduZWQgbG9uZyBpb19vZmZzZXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGk7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCS8qIEhvb2t1cCBQSEIgcmVzb3VyY2VzICovCiAJaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gaXNhX2lvX2Jhc2U7CkBAIC00NTcsNiArNDY1LDEyIEBACiAJCQlidXMtPnJlc291cmNlW2krMV0gPSByZXM7CiAJCX0KIAl9CisKKwlpZiAocHBjX21kLnBjaV9kbWFfYnVzX3NldHVwKQorCQlwcGNfbWQucGNpX2RtYV9idXNfc2V0dXAoYnVzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJcGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKGRldik7CiB9CiAKIC8qIHRoZSBuZXh0IG9uZSBpcyBzdG9sZW4gZnJvbSB0aGUgYWxwaGEgcG9ydC4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggMzBlZWRmYy4uODI0N2NmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC01MiwzNSArNTIsNiBAQAogCiBMSVNUX0hFQUQoaG9zZV9saXN0KTsKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzOwotCi12b2lkIHNldF9wY2lfZG1hX29wcyhzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzKQotewotCXBjaV9kbWFfb3BzID0gZG1hX29wczsKLX0KLQotc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9kbWFfb3BzOwotfQotRVhQT1JUX1NZTUJPTChnZXRfcGNpX2RtYV9vcHMpOwotCi0KLWludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiBkbWFfc2V0X21hc2soJmRldi0+ZGV2LCBtYXNrKTsKLX0KLQotaW50IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOwotCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHZvaWQgZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CkBAIC01NDgsMjYgKzUxOSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX21hcF9pb19zcGFjZSk7CiAKLXZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2V0dXBfbmV3X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkID0gJmRldi0+ZGV2LmFyY2hkYXRhOwotCi0Jc2QtPm9mX25vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQotCURCRygiUENJOiBkZXZpY2UgJXMgT0Ygbm9kZTogJXNcbiIsIHBjaV9uYW1lKGRldiksCi0JICAgIHNkLT5vZl9ub2RlID8gc2QtPm9mX25vZGUtPmZ1bGxfbmFtZSA6ICI8bm9uZT4iKTsKLQotCXNkLT5kbWFfb3BzID0gcGNpX2RtYV9vcHM7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlzZC0+bnVtYV9ub2RlID0gcGNpYnVzX3RvX25vZGUoZGV2LT5idXMpOwotI2Vsc2UKLQlzZC0+bnVtYV9ub2RlID0gLTE7Ci0jZW5kaWYKLQlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQotCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAoZGV2KTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKTsKLQogdm9pZCBfX2RldmluaXQgcGNpYmlvc19kb19idXNfc2V0dXAoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggZTFlYTRmZS4uOGVkYzIzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC0xMTksNiArMTE5LDkgQEAKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woX3RsYmllKTsKKyNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQorRVhQT1JUX1NZTUJPTChfdGxiaWxfdmEpOworI2VuZGlmCiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woX19mbHVzaF9pY2FjaGVfcmFuZ2UpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA4N2Q4M2M1Li4zYTJkYzdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtODg4LDkgKzg4OCwxMCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUpCiB7Ci0JY2VsbF90ICpkbSwgKmxzOworCWNlbGxfdCAqZG0sICpscywgKnVzbTsKIAl1bnNpZ25lZCBsb25nIGwsIG4sIGZsYWdzOwogCXU2NCBiYXNlLCBzaXplLCBsbWJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaXNfa2V4ZWNfa2R1bXAgPSAwLCBybmdzOwogCiAJbHMgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwogCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKQEAgLTkwNSw2ICs5MDYsMTIgQEAKIAlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsLiAqLworCXVzbSA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSIsCisJCQkJCQkgJmwpOworCWlmICh1c20gIT0gTlVMTCkKKwkJaXNfa2V4ZWNfa2R1bXAgPSAxOworCiAJZm9yICg7IG4gIT0gMDsgLS1uKSB7CiAJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJmRtKTsKIAkJZmxhZ3MgPSBkbVszXTsKQEAgLTkxNSwxMyArOTIyLDM0IEBACiAJCWlmICgoZmxhZ3MgJiAweDgwKSB8fCAhKGZsYWdzICYgMHg4KSkKIAkJCWNvbnRpbnVlOwogCQlzaXplID0gbG1iX3NpemU7Ci0JCWlmIChpb21tdV9pc19vZmYpIHsKLQkJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKKwkJcm5ncyA9IDE7CisJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJLyoKKwkJCSAqIEZvciBlYWNoIGxtYiBpbiBpYm0sZHluYW1pYy1tZW1vcnksIGEgY29ycmVzcG9uZGluZworCQkJICogZW50cnkgaW4gbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgcHJvcGVydHkgY29udGFpbnMKKwkJCSAqIGEgY291bnRlciAncCcgZm9sbG93ZWQgYnkgJ3AnIChiYXNlLCBzaXplKSBkdXBsZS4KKwkJCSAqIE5vdyByZWFkIHRoZSBjb3VudGVyIGZyb20KKwkJCSAqIGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IHByb3BlcnR5CisJCQkgKi8KKwkJCXJuZ3MgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnVzbSk7CisJCQlpZiAoIXJuZ3MpIC8qIHRoZXJlIGFyZSBubyAoYmFzZSwgc2l6ZSkgZHVwbGUgKi8KIAkJCQljb250aW51ZTsKLQkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQotCQkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOwogCQl9Ci0JCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisJCWRvIHsKKwkJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywKKwkJCQkJCQkgJnVzbSk7CisJCQkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLAorCQkJCQkJCSAmdXNtKTsKKwkJCX0KKwkJCWlmIChpb21tdV9pc19vZmYpIHsKKwkJCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJCQlzaXplID0gMHg4MDAwMDAwMHVsIC0gYmFzZTsKKwkJCX0KKwkJCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisJCX0gd2hpbGUgKC0tcm5ncyk7CiAJfQogCWxtYl9kdW1wX2FsbCgpOwogCXJldHVybiAwOwpAQCAtMTE2NCw2ICsxMTkyLDkgQEAKIAogCS8qIFJlc2VydmUgTE1CIHJlZ2lvbnMgdXNlZCBieSBrZXJuZWwsIGluaXRyZCwgZHQsIGV0Yy4uLiAqLwogCWxtYl9yZXNlcnZlKFBIWVNJQ0FMX1NUQVJULCBfX3BhKGtsaW1pdCkgLSBQSFlTSUNBTF9TVEFSVCk7CisJLyogSWYgcmVsb2NhdGFibGUsIHJlc2VydmUgZmlyc3QgMzJrIGZvciBpbnRlcnJ1cHQgdmVjdG9ycyBldGMuICovCisJaWYgKFBIWVNJQ0FMX1NUQVJUID4gTUVNT1JZX1NUQVJUKQorCQlsbWJfcmVzZXJ2ZShNRU1PUllfU1RBUlQsIDB4ODAwMCk7CiAJcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKCk7CiAJcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpOwogCWVhcmx5X3Jlc2VydmVfbWVtKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCBiNzI4NDlhLi4yZmRiYzE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTczMiw3ICs3MzIsNyBAQAogCQkJdTMyCWlnbm9yZV9tZTsKIAkJfSBycGFkZXNjOwogCX0gcnBhbm90ZTsKLX0gZmFrZV9lbGYgPSB7Cit9IGZha2VfZWxmIF9fc2VjdGlvbiguZmFrZWVsZikgPSB7CiAJLmVsZmhkciA9IHsKIAkJLmVfaWRlbnQgPSB7IDB4N2YsICdFJywgJ0wnLCAnRicsCiAJCQkgICAgIEVMRkNMQVNTMzIsIEVMRkRBVEEyTVNCLCBFVl9DVVJSRU5UIH0sCkBAIC03NzQsMTMgKzc3NCwxMyBAQAogCQkudHlwZSA9IDB4MTI3NTk5OTksCiAJCS5uYW1lID0gIklCTSxSUEEtQ2xpZW50LUNvbmZpZyIsCiAJCS5ycGFkZXNjID0gewotCQkJLmxwYXJfYWZmaW5pdHkgPSAwLAotCQkJLm1pbl9ybW9fc2l6ZSA9IDY0LAkvKiBpbiBtZWdhYnl0ZXMgKi8KKwkJCS5scGFyX2FmZmluaXR5ID0gMSwKKwkJCS5taW5fcm1vX3NpemUgPSAxMjgsCS8qIGluIG1lZ2FieXRlcyAqLwogCQkJLm1pbl9ybW9fcGVyY2VudCA9IDAsCi0JCQkubWF4X3BmdF9zaXplID0gNDgsCS8qIDJeNDggYnl0ZXMgbWF4IFBGVCBzaXplICovCisJCQkubWF4X3BmdF9zaXplID0gNDYsCS8qIDJeNDYgYnl0ZXMgbWF4IFBGVCBzaXplICovCiAJCQkuc3BscGFyID0gMSwKIAkJCS5taW5fbG9hZCA9IH4wVSwKLQkJCS5uZXdfbWVtX2RlZiA9IDAKKwkJCS5uZXdfbWVtX2RlZiA9IDEKIAkJfQogCX0KIH07CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogICoKICAqIC0tIENvcnQKICAqLwotZXh0ZXJuIHZvaWQgX19zZWNvbmRhcnlfaG9sZCh2b2lkKTsKK2V4dGVybiBjaGFyIF9fc2Vjb25kYXJ5X2hvbGQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZTsKIApAQCAtMTM0MiwxMyArMTM0Miw3IEBACiAJCT0gKHZvaWQgKikgTE9XX0FERFIoX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCk7CiAJdW5zaWduZWQgbG9uZyAqYWNrbm93bGVkZ2UKIAkJPSAodm9pZCAqKSBMT1dfQUREUihfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkvKiBfX3NlY29uZGFyeV9ob2xkIGlzIGFjdHVhbGx5IGEgZGVzY3JpcHRvciwgbm90IHRoZSB0ZXh0IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9ob2xkCi0JCT0gX19wYSgqUFRSUkVMT0MoKHVuc2lnbmVkIGxvbmcgKilfX3NlY29uZGFyeV9ob2xkKSk7Ci0jZWxzZQogCXVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2hvbGQgPSBMT1dfQUREUihfX3NlY29uZGFyeV9ob2xkKTsKLSNlbmRpZgogCiAJcHJvbV9kZWJ1ZygicHJvbV9ob2xkX2NwdXM6IHN0YXJ0Li4uXG4iKTsKIAlwcm9tX2RlYnVnKCIgICAgMSkgc3Bpbmxvb3AgICAgICAgPSAweCV4XG4iLCAodW5zaWduZWQgbG9uZylzcGlubG9vcCk7CkBAIC0yMzE1LDEzICsyMzA5LDE0IEBACiAKIHVuc2lnbmVkIGxvbmcgX19pbml0IHByb21faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHAsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcga2Jhc2UpCiB7CQogCXN0cnVjdCBwcm9tX3QgKl9wcm9tOwogCXVuc2lnbmVkIGxvbmcgaGRyOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOwogCXJlbG9jX2dvdDIob2Zmc2V0KTsKICNlbmRpZgogCkBAIC0yMzU1LDkgKzIzNTAsMTEgQEAKIAkgKi8KIAlSRUxPQyhvZl9wbGF0Zm9ybSkgPSBwcm9tX2ZpbmRfbWFjaGluZV90eXBlKCk7CiAKKyNpZm5kZWYgQ09ORklHX1JFTE9DQVRBQkxFCiAJLyogQmFpbCBpZiB0aGlzIGlzIGEga2R1bXAga2VybmVsLiAqLwogCWlmIChQSFlTSUNBTF9TVEFSVCA+IDApCiAJCXByb21fcGFuaWMoIkVycm9yOiBZb3UgY2FuJ3QgYm9vdCBhIGtkdW1wIGtlcm5lbCBmcm9tIE9GIVxuIik7CisjZW5kaWYKIAogCS8qCiAJICogQ2hlY2sgZm9yIGFuIGluaXRyZApAQCAtMjM3Nyw3ICsyMzc0LDcgQEAKIAkgKiBDb3B5IHRoZSBDUFUgaG9sZCBjb2RlCiAJICovCiAJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAhPSBQTEFURk9STV9QT1dFUk1BQykKLQkJY29weV9hbmRfZmx1c2goMCwgS0VSTkVMQkFTRSArIG9mZnNldCwgMHgxMDAsIDApOworCQljb3B5X2FuZF9mbHVzaCgwLCBrYmFzZSwgMHgxMDAsIDApOwogCiAJLyoKIAkgKiBEbyBlYXJseSBwYXJzaW5nIG9mIGNvbW1hbmQgbGluZQpAQCAtMjQ4MCw3ICsyNDc3LDcgQEAKIAlyZWxvY19nb3QyKC1vZmZzZXQpOwogI2VuZGlmCiAKLQlfX3N0YXJ0KGhkciwgS0VSTkVMQkFTRSArIG9mZnNldCwgMCk7CisJX19zdGFydChoZHIsIGtiYXNlLCAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9yZWxvY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9yZWxvY182NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2EwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3JlbG9jXzY0LlMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvZGUgdG8gcHJvY2VzcyBkeW5hbWljIHJlbG9jYXRpb25zIGluIHRoZSBrZXJuZWwuCisgKgorICogQ29weXJpZ2h0IDIwMDggUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorCitSRUxBID0gNworUkVMQUNPVU5UID0gMHg2ZmZmZmZmOQorUl9QUEM2NF9SRUxBVElWRSA9IDIyCisKKy8qCisgKiByMyA9IGRlc2lyZWQgZmluYWwgYWRkcmVzcyBvZiBrZXJuZWwKKyAqLworX0dMT0JBTChyZWxvY2F0ZSkKKwltZmxyCXIwCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyMTIJCS8qIHIxMiBoYXMgcnVudGltZSBhZGRyIG9mIGxhYmVsIDAgKi8KKwltdGxyCXIwCisJbGQJcjExLChwX2R5biAtIDBiKShyMTIpCisJYWRkCXIxMSxyMTEscjEyCS8qIHIxMSBoYXMgcnVudGltZSBhZGRyIG9mIC5keW5hbWljIHNlY3Rpb24gKi8KKwlsZAlyOSwocF9yZWxhIC0gMGIpKHIxMikKKwlhZGQJcjkscjkscjEyCS8qIHI5IGhhcyBydW50aW1lIGFkZHIgb2YgLnJlbGEuZHluIHNlY3Rpb24gKi8KKwlsZAlyMTAsKHBfc3QgLSAwYikocjEyKQorCWFkZAlyMTAscjEwLHIxMgkvKiByMTAgaGFzIHJ1bnRpbWUgYWRkciBvZiBfc3RleHQgKi8KKworCS8qCisJICogU2NhbiB0aGUgZHluYW1pYyBzZWN0aW9uIGZvciB0aGUgUkVMQSBhbmQgUkVMQUNPVU5UIGVudHJpZXMuCisJICovCisJbGkJcjcsMAorCWxpCXI4LDAKKzE6CWxkCXI2LDAocjExKQkvKiBnZXQgdGFnICovCisJY21wZGkJcjYsMAorCWJlcQk0ZgkJLyogZW5kIG9mIGxpc3QgKi8KKwljbXBkaQlyNixSRUxBCisJYm5lCTJmCisJbGQJcjcsOChyMTEpCS8qIGdldCBSRUxBIHBvaW50ZXIgaW4gcjcgKi8KKwliCTNmCisyOglhZGRpcwlyNixyNiwoLVJFTEFDT1VOVClAaGEKKwljbXBkaQlyNixSRUxBQ09VTlRAbAorCWJuZQkzZgorCWxkCXI4LDgocjExKQkvKiBnZXQgUkVMQUNPVU5UIHZhbHVlIGluIHI4ICovCiszOglhZGRpCXIxMSxyMTEsMTYKKwliCTFiCis0OgljbXBkaQlyNywwCQkvKiBjaGVjayB3ZSBoYXZlIGJvdGggUkVMQSBhbmQgUkVMQUNPVU5UICovCisJY21wZGkJY3IxLHI4LDAKKwliZXEJNmYKKwliZXEJY3IxLDZmCisKKwkvKgorCSAqIFdvcmsgb3V0IGxpbmt0aW1lIGFkZHJlc3Mgb2YgX3N0ZXh0IGFuZCBoZW5jZSB0aGUKKwkgKiByZWxvY2F0aW9uIG9mZnNldCB0byBiZSBhcHBsaWVkLgorCSAqIGN1cl9vZmZzZXQgW3I3XSA9IHJlbGEucnVuIFtyOV0gLSByZWxhLmxpbmsgW3I3XQorCSAqIF9zdGV4dC5saW5rIFtyMTBdID0gX3N0ZXh0LnJ1biBbcjEwXSAtIGN1cl9vZmZzZXQgW3I3XQorCSAqIGZpbmFsX29mZnNldCBbcjNdID0gX3N0ZXh0LmZpbmFsIFtyM10gLSBfc3RleHQubGluayBbcjEwXQorCSAqLworCXN1YmYJcjcscjcscjkJLyogY3VyX29mZnNldCAqLworCXN1YmYJcjEwLHI3LHIxMAorCXN1YmYJcjMscjEwLHIzCS8qIGZpbmFsX29mZnNldCAqLworCisJLyoKKwkgKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiByZWxvY2F0aW9ucyBhbmQgcHJvY2VzcyB0aGUKKwkgKiBSX1BQQzY0X1JFTEFUSVZFIG9uZXMuCisJICovCisJbXRjdHIJcjgKKzU6CWx3eglyMCwxMig5KQkvKiBFTEY2NF9SX1RZUEUocmVsb2MtPnJfaW5mbykgKi8KKwljbXB3aQlyMCxSX1BQQzY0X1JFTEFUSVZFCisJYm5lCTZmCisJbGQJcjYsMChyOSkJLyogcmVsb2MtPnJfb2Zmc2V0ICovCisJbGQJcjAsMTYocjkpCS8qIHJlbG9jLT5yX2FkZGVuZCAqLworCWFkZAlyMCxyMCxyMworCXN0ZHgJcjAscjcscjYKKwlhZGRpCXI5LHI5LDI0CisJYmRuegk1YgorCis2OglibHIKKworcF9keW46CS5sbG9uZwlfX2R5bmFtaWNfc3RhcnQgLSAwYgorcF9yZWxhOgkubGxvbmcJX19yZWxhX2R5bl9zdGFydCAtIDBiCitwX3N0OgkubGxvbmcJX3N0ZXh0IC0gMGIKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggOWNjNWE1Mi4uNWVjNTZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0yNTQsOCArMjU0LDIxIEBACiAJLyogSWYgd2UgYXJlIGEgRnJlZXNjYWxlIGNvcmUgZG8gYSBzaW1wbGUgY2hlY2sgc28KIAkgKiB3ZSBkb250IGhhdmUgdG8ga2VlcCBhZGRpbmcgY2FzZXMgaW4gdGhlIGZ1dHVyZSAqLwogCWlmIChQVlJfVkVSKHB2cikgJiAweDgwMDApIHsKLQkJbWFqID0gUFZSX01BSihwdnIpOwotCQltaW4gPSBQVlJfTUlOKHB2cik7CisJCXN3aXRjaCAoUFZSX1ZFUihwdnIpKSB7CisJCWNhc2UgMHg4MDAwOgkvKiA3NDQxLzc0NTAvNzQ1MSwgVm95YWdlciAqLworCQljYXNlIDB4ODAwMToJLyogNzQ0NS83NDU1LCBBcG9sbG8gNiAqLworCQljYXNlIDB4ODAwMjoJLyogNzQ0Ny83NDU3LCBBcG9sbG8gNyAqLworCQljYXNlIDB4ODAwMzoJLyogNzQ0N0EsIEFwb2xsbyA3IFBNICovCisJCWNhc2UgMHg4MDA0OgkvKiA3NDQ4LCBBcG9sbG8gOCAqLworCQljYXNlIDB4ODAwYzoJLyogNzQxMCwgTml0cm8gKi8KKwkJCW1haiA9ICgocHZyID4+IDgpICYgMHhGKTsKKwkJCW1pbiA9IFBWUl9NSU4ocHZyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiBlNTAwL2Jvb2stZSAqLworCQkJbWFqID0gUFZSX01BSihwdnIpOworCQkJbWluID0gUFZSX01JTihwdnIpOworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKFBWUl9WRVIocHZyKSkgewogCQkJY2FzZSAweDAwMjA6CS8qIDQwMyBmYW1pbHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAwNjZlNjVjLi5jMWEyNzYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0xMTEsNyArMTExLDcgQEAKICAqIFRoaXMgaXMgY2FsbGVkIHZlcnkgZWFybHkgb24gdGhlIGJvb3QgcHJvY2VzcywgYWZ0ZXIgYSBtaW5pbWFsCiAgKiBNTVUgZW52aXJvbm1lbnQgaGFzIGJlZW4gc2V0IHVwIGJ1dCBiZWZvcmUgTU1VX2luaXQgaXMgY2FsbGVkLgogICovCi1ub3RyYWNlIHZvaWQgX19pbml0IG1hY2hpbmVfaW5pdCh1bnNpZ25lZCBsb25nIGR0X3B0ciwgdW5zaWduZWQgbG9uZyBwaHlzKQorbm90cmFjZSB2b2lkIF9faW5pdCBtYWNoaW5lX2luaXQodW5zaWduZWQgbG9uZyBkdF9wdHIpCiB7CiAJLyogRW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBpZiBhbnkgc3BlY2lmaWVkIChzZWUgdWRiZy5oKSAqLwogCXVkYmdfZWFybHlfaW5pdCgpOwpAQCAtMjA5LDIzICsyMDksMTIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19OVlJBTSAqLwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwotCiBpbnQgX19pbml0IHBwY19pbml0KHZvaWQpCiB7Ci0JaW50IGNwdTsKLQogCS8qIGNsZWFyIHRoZSBwcm9ncmVzcyBsaW5lICovCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCIgICAgICAgICAgICAgIiwgMHhmZmZmKTsKIAotCS8qIHJlZ2lzdGVyIENQVSBkZXZpY2VzICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgY3B1ICpjID0gJnBlcl9jcHUoY3B1X2RldmljZXMsIGNwdSk7Ci0JCWMtPmhvdHBsdWdnYWJsZSA9IDE7Ci0JCXJlZ2lzdGVyX2NwdShjLCBjcHUpOwotCX0KLQogCS8qIGNhbGwgcGxhdGZvcm0gaW5pdCAqLwogCWlmIChwcGNfbWQuaW5pdCAhPSBOVUxMKSB7CiAJCXBwY19tZC5pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggOGIyNWY1MS4uODQzYzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMjU1LDkgKzI1NSwxMSBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQodm9pZCk7CisKIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKQogewotCWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3A7CiAJdW5zaWduZWQgbG9uZyAqcHRyOwogCiAJREJHKCIgLT4gc21wX3JlbGVhc2VfY3B1cygpXG4iKTsKQEAgLTI2NiwxMiArMjY4LDExIEBACiAJICogYWxsIG5vdyBzbyB0aGV5IGNhbiBzdGFydCB0byBzcGluIG9uIHRoZWlyIGluZGl2aWR1YWwgcGFjYQogCSAqIHNwaW5sb29wcy4gRm9yIG5vbiBTTVAga2VybmVscywgdGhlIHNlY29uZGFyeSBjcHVzIG5ldmVyIGdldCBvdXQKIAkgKiBvZiB0aGUgY29tbW9uIHNwaW5sb29wLgotCSAqIFRoaXMgaXMgdXNlbGVzcyBidXQgaGFybWxlc3Mgb24gaVNlcmllcywgc2Vjb25kYXJpZXMgYXJlIGFscmVhZHkKLQkgKiB3YWl0aW5nIG9uIHRoZWlyIHBhY2Egc3Bpbmxvb3BzLiAqLworCSAqLwogCiAJcHRyICA9ICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKSZfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wCiAJCQktIFBIWVNJQ0FMX1NUQVJUKTsKLQkqcHRyID0gMTsKKwkqcHRyID0gX19wYShnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCk7CiAJbWIoKTsKIAogCURCRygiIDwtIHNtcF9yZWxlYXNlX2NwdXMoKVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCBjMjdiMTBhLi5mZjlmNzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTEwMSw4ICsxMDEsNyBAQAogCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwogCQlicmVhazsKIAljYXNlIFBQQ19NU0dfUkVTQ0hFRFVMRToKLQkJLyogWFhYIERvIHdlIGhhdmUgdG8gZG8gdGhpcz8gKi8KLQkJc2V0X25lZWRfcmVzY2hlZCgpOworCQkvKiB3ZSBub3RpY2UgbmVlZF9yZXNjaGVkIG9uIGV4aXQgKi8KIAkJYnJlYWs7CiAJY2FzZSBQUENfTVNHX0NBTExfRlVOQ19TSU5HTEU6CiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfYXNtNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKaW5kZXggZTA5MmMzYy4uODZhYzFkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfYXNtNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCWNtcGRpCXIxMiwwCiAJYmVxLQlub3RoaW5nX3RvX2NvcHkKLQlsaQlyMTUsNTEyCisJbGkJcjE1LFBBR0VfU0laRT4+MwogY29weWxvb3A6CiAJbGQJcjEzLHBiZV9hZGRyZXNzKHIxMikKIAlsZAlyMTQscGJlX29yaWdfYWRkcmVzcyhyMTIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCBkOTg2MzRjLi5iYjFjZmNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTYxLDQyICs2MSw2IEBACiAJcmV0dXJuIGNvbXBhdF9zeXNfc2VsZWN0KChpbnQpbiwgaW5wLCBvdXRwLCBleHAsIGNvbXBhdF9wdHIodHZwX3gpKTsKIH0KIAotaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQljb21wYXRfaW5vX3QgaW5vOwotCWxvbmcgZXJyOwotCi0JaWYgKHN0YXQtPnNpemUgPiBNQVhfTk9OX0xGUyB8fCAhbmV3X3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8Ci0JICAgICFuZXdfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWVyciAgPSBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBzdGF0YnVmLCBzaXplb2YoKnN0YXRidWYpKSA/IDAgOiAtRUZBVUxUOwotCWVyciB8PSBfX3B1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBfX3B1dF91c2VyKGlubywgJnN0YXRidWYtPnN0X2lubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bW9kZSwgJnN0YXRidWYtPnN0X21vZGUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPnVpZCwgJnN0YXRidWYtPnN0X3VpZCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Z2lkLCAmc3RhdGJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gX19wdXRfdXNlcihuZXdfZW5jb2RlX2RldihzdGF0LT5yZGV2KSwgJnN0YXRidWYtPnN0X3JkZXYpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2F0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfY3RpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmc3RhdGJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YmxvY2tzLCAmc3RhdGJ1Zi0+c3RfYmxvY2tzKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0WzBdKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0WzFdKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIC8qIE5vdGU6IGl0IGlzIG5lY2Vzc2FyeSB0byB0cmVhdCBvcHRpb24gYXMgYW4gdW5zaWduZWQgaW50LAogICogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjYXN0IHRvIGEgc2lnbmVkIGludCB0byBpbnN1cmUgdGhhdCB0aGUgCiAgKiBwcm9wZXIgY29udmVyc2lvbiAoc2lnbiBleHRlbnNpb24pIGJldHdlZW4gdGhlIHJlZ2lzdGVyIHJlcHJlc2VudGF0aW9uIG9mIGEgc2lnbmVkIGludCAobXNyIGluIDMyLWJpdCBtb2RlKQpAQCAtMTA3LDc3ICs3MSw2IEBACiAJcmV0dXJuIHN5c19zeXNmcygoaW50KW9wdGlvbiwgYXJnMSwgYXJnMik7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3BhdXNlKHZvaWQpCi17Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0Jc2NoZWR1bGUoKTsKLQkKLQlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3RzMzIoc3RydWN0IHRpbWVzcGVjICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWxvbmcgdXNlYzsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpLCBzaXplb2YoKmkpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBwdXRfdHYzMihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpIHwKLQkJIF9fcHV0X3VzZXIoaS0+dHZfdXNlYywgJm8tPnR2X3VzZWMpKSk7Ci19Ci0KLQotCi0KLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi1leHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKLQotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQkKLQlyZXR1cm4gMDsKLX0KLQotCi0KLWFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCQotIAlpZiAodHYpIHsKLQkJaWYgKGdldF90czMyKCZrdHMsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdHosIHR6LCBzaXplb2Yoa3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZrdHMgOiBOVUxMLCB0eiA/ICZrdHogOiBOVUxMKTsKLX0KLQogI2lmZGVmIENPTkZJR19TWVNWSVBDCiBsb25nIGNvbXBhdF9zeXNfaXBjKHUzMiBjYWxsLCB1MzIgZmlyc3QsIHUzMiBzZWNvbmQsIHUzMiB0aGlyZCwgY29tcGF0X3VwdHJfdCBwdHIsCiAJICAgICAgIHUzMiBmaWZ0aCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCA1NmQxNzJkLi44NmEyZmZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC0xNSwxOCArMTUsMjQgQEAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgorI2VuZGlmCisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1LCBjcHVfZGV2aWNlcyk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga29iamVjdCAqLCBjYWNoZV90b3BsZXZlbCk7CiAKLS8qIFNNVCBzdHVmZiAqLworLyoKKyAqIFNNVCBzbm9vemUgZGVsYXkgc3R1ZmYsIDY0LWJpdCBvbmx5IGZvciBub3cKKyAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisjaWZkZWYgQ09ORklHX1BQQzY0CisKIC8qIFRpbWUgaW4gbWljcm9zZWNvbmRzIHdlIGRlbGF5IGJlZm9yZSBzbGVlcGluZyBpbiB0aGUgaWRsZSBsb29wICovCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzbXRfc25vb3plX2RlbGF5KSA9IHsgMTAwIH07CiAKQEAgLTEwNiw3ICsxMTIsNyBAQAogfQogX19zZXR1cCgic210LXNub296ZS1kZWxheT0iLCBzZXR1cF9zbXRfc25vb3plX2RlbGF5KTsKIAotI2VuZGlmIC8qIENPTkZJR19QUENfTVVMVElQTEFURk9STSAqLworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAvKgogICogRW5hYmxpbmcgUE1DcyB3aWxsIHNsb3cgcGFydGl0aW9uIGNvbnRleHQgc3dpdGNoIHRpbWVzIHNvIHdlIG9ubHkgZG8KQEAgLTExNSw3ICsxMjEsNyBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhciwgcG1jc19lbmFibGVkKTsKIAotdm9pZCBwcGM2NF9lbmFibGVfcG1jcyh2b2lkKQordm9pZCBwcGNfZW5hYmxlX3BtY3Modm9pZCkKIHsKIAkvKiBPbmx5IG5lZWQgdG8gZW5hYmxlIHRoZW0gb25jZSAqLwogCWlmIChfX2dldF9jcHVfdmFyKHBtY3NfZW5hYmxlZCkpCkBAIC0xMjYsOCArMTMyLDkgQEAKIAlpZiAocHBjX21kLmVuYWJsZV9wbWNzKQogCQlwcGNfbWQuZW5hYmxlX3BtY3MoKTsKIH0KLUVYUE9SVF9TWU1CT0wocHBjNjRfZW5hYmxlX3BtY3MpOworRVhQT1JUX1NZTUJPTChwcGNfZW5hYmxlX3BtY3MpOwogCisjaWYgZGVmaW5lZChDT05GSUdfNnh4KSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKIC8qIFhYWCBjb252ZXJ0IHRvIHJ1c3R5J3Mgb25fb25lX2NwdSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcnVuX29uX2NwdSh1bnNpZ25lZCBsb25nIGNwdSwKIAkJCSAgICAgICAgdW5zaWduZWQgbG9uZyAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcpLApAQCAtMTQ2LDYgKzE1Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCiAKICNkZWZpbmUgU1lTRlNfUE1DU0VUVVAoTkFNRSwgQUREUkVTUykgXAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF8jI05BTUUodW5zaWduZWQgbG9uZyBqdW5rKSBcCkBAIC0xNTQsNyArMTYyLDcgQEAKIH0gXAogc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfIyNOQU1FKHVuc2lnbmVkIGxvbmcgdmFsKSBcCiB7IFwKLQlwcGM2NF9lbmFibGVfcG1jcygpOyBcCisJcHBjX2VuYWJsZV9wbWNzKCk7IFwKIAltdHNwcihBRERSRVNTLCB2YWwpOyBcCiAJcmV0dXJuIDA7IFwKIH0gXApAQCAtMTg0LDI4ICsxOTIsNTMgQEAKICAqIHRoYXQgYXJlIGltcGxlbWVudGVkIG9uIHRoZSBjdXJyZW50IHByb2Nlc3NvcgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKKyNkZWZpbmUgSEFTX1BQQ19QTUNfQ0xBU1NJQwkxCisjZGVmaW5lIEhBU19QUENfUE1DX0lCTQkJMQorI2RlZmluZSBIQVNfUFBDX1BNQ19QQTZUCTEKKyNlbGlmIGRlZmluZWQoQ09ORklHXzZ4eCkKKyNkZWZpbmUgSEFTX1BQQ19QTUNfQ0xBU1NJQwkxCisjZGVmaW5lIEhBU19QUENfUE1DX0lCTQkJMQorI2RlZmluZSBIQVNfUFBDX1BNQ19HNAkJMQorI2VuZGlmCisKKworI2lmZGVmIEhBU19QUENfUE1DX0NMQVNTSUMKIFNZU0ZTX1BNQ1NFVFVQKG1tY3IwLCBTUFJOX01NQ1IwKTsKIFNZU0ZTX1BNQ1NFVFVQKG1tY3IxLCBTUFJOX01NQ1IxKTsKLVNZU0ZTX1BNQ1NFVFVQKG1tY3JhLCBTUFJOX01NQ1JBKTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzEsIFNQUk5fUE1DMSk7CiBTWVNGU19QTUNTRVRVUChwbWMyLCBTUFJOX1BNQzIpOwogU1lTRlNfUE1DU0VUVVAocG1jMywgU1BSTl9QTUMzKTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzQsIFNQUk5fUE1DNCk7CiBTWVNGU19QTUNTRVRVUChwbWM1LCBTUFJOX1BNQzUpOwogU1lTRlNfUE1DU0VUVVAocG1jNiwgU1BSTl9QTUM2KTsKKworI2lmZGVmIEhBU19QUENfUE1DX0c0CitTWVNGU19QTUNTRVRVUChtbWNyMiwgU1BSTl9NTUNSMik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUEM2NAogU1lTRlNfUE1DU0VUVVAocG1jNywgU1BSTl9QTUM3KTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzgsIFNQUk5fUE1DOCk7CisKK1NZU0ZTX1BNQ1NFVFVQKG1tY3JhLCBTUFJOX01NQ1JBKTsKIFNZU0ZTX1BNQ1NFVFVQKHB1cnIsIFNQUk5fUFVSUik7CiBTWVNGU19QTUNTRVRVUChzcHVyciwgU1BSTl9TUFVSUik7CiBTWVNGU19QTUNTRVRVUChkc2NyLCBTUFJOX0RTQ1IpOwogCitzdGF0aWMgU1lTREVWX0FUVFIobW1jcmEsIDA2MDAsIHNob3dfbW1jcmEsIHN0b3JlX21tY3JhKTsKK3N0YXRpYyBTWVNERVZfQVRUUihzcHVyciwgMDYwMCwgc2hvd19zcHVyciwgTlVMTCk7CitzdGF0aWMgU1lTREVWX0FUVFIoZHNjciwgMDYwMCwgc2hvd19kc2NyLCBzdG9yZV9kc2NyKTsKK3N0YXRpYyBTWVNERVZfQVRUUihwdXJyLCAwNjAwLCBzaG93X3B1cnIsIHN0b3JlX3B1cnIpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VAogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWMwLCBTUFJOX1BBNlRfUE1DMCk7CiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzEsIFNQUk5fUEE2VF9QTUMxKTsKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jMiwgU1BSTl9QQTZUX1BNQzIpOwogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWMzLCBTUFJOX1BBNlRfUE1DMyk7CiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzQsIFNQUk5fUEE2VF9QTUM0KTsKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jNSwgU1BSTl9QQTZUX1BNQzUpOwotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTAogU1lTRlNfUE1DU0VUVVAoaGlkMCwgU1BSTl9ISUQwKTsKIFNZU0ZTX1BNQ1NFVFVQKGhpZDEsIFNQUk5fSElEMSk7CkBAIC0yMzYsMjggKzI2OSwzNyBAQAogU1lTRlNfUE1DU0VUVVAodHNyMiwgU1BSTl9QQTZUX1RTUjIpOwogU1lTRlNfUE1DU0VUVVAodHNyMywgU1BSTl9QQTZUX1RTUjMpOwogI2VuZGlmIC8qIENPTkZJR19ERUJVR19LRVJORUwgKi8KKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19QQTZUICovCiAKLXN0YXRpYyBTWVNERVZfQVRUUihtbWNyYSwgMDYwMCwgc2hvd19tbWNyYSwgc3RvcmVfbW1jcmEpOwotc3RhdGljIFNZU0RFVl9BVFRSKHNwdXJyLCAwNjAwLCBzaG93X3NwdXJyLCBOVUxMKTsKLXN0YXRpYyBTWVNERVZfQVRUUihkc2NyLCAwNjAwLCBzaG93X2RzY3IsIHN0b3JlX2RzY3IpOwotc3RhdGljIFNZU0RFVl9BVFRSKHB1cnIsIDA2MDAsIHNob3dfcHVyciwgc3RvcmVfcHVycik7Ci0KKyNpZmRlZiBIQVNfUFBDX1BNQ19JQk0KIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBpYm1fY29tbW9uX2F0dHJzW10gPSB7CiAJX1NZU0RFVl9BVFRSKG1tY3IwLCAwNjAwLCBzaG93X21tY3IwLCBzdG9yZV9tbWNyMCksCiAJX1NZU0RFVl9BVFRSKG1tY3IxLCAwNjAwLCBzaG93X21tY3IxLCBzdG9yZV9tbWNyMSksCiB9OworI2VuZGlmIC8qIEhBU19QUENfUE1DX0c0ICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBpYm1fcG1jX2F0dHJzW10gPSB7CisjaWZkZWYgSEFTX1BQQ19QTUNfRzQKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBnNF9jb21tb25fYXR0cnNbXSA9IHsKKwlfU1lTREVWX0FUVFIobW1jcjAsIDA2MDAsIHNob3dfbW1jcjAsIHN0b3JlX21tY3IwKSwKKwlfU1lTREVWX0FUVFIobW1jcjEsIDA2MDAsIHNob3dfbW1jcjEsIHN0b3JlX21tY3IxKSwKKwlfU1lTREVWX0FUVFIobW1jcjIsIDA2MDAsIHNob3dfbW1jcjIsIHN0b3JlX21tY3IyKSwKK307CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfRzQgKi8KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGNsYXNzaWNfcG1jX2F0dHJzW10gPSB7CiAJX1NZU0RFVl9BVFRSKHBtYzEsIDA2MDAsIHNob3dfcG1jMSwgc3RvcmVfcG1jMSksCiAJX1NZU0RFVl9BVFRSKHBtYzIsIDA2MDAsIHNob3dfcG1jMiwgc3RvcmVfcG1jMiksCiAJX1NZU0RFVl9BVFRSKHBtYzMsIDA2MDAsIHNob3dfcG1jMywgc3RvcmVfcG1jMyksCiAJX1NZU0RFVl9BVFRSKHBtYzQsIDA2MDAsIHNob3dfcG1jNCwgc3RvcmVfcG1jNCksCiAJX1NZU0RFVl9BVFRSKHBtYzUsIDA2MDAsIHNob3dfcG1jNSwgc3RvcmVfcG1jNSksCiAJX1NZU0RFVl9BVFRSKHBtYzYsIDA2MDAsIHNob3dfcG1jNiwgc3RvcmVfcG1jNiksCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJX1NZU0RFVl9BVFRSKHBtYzcsIDA2MDAsIHNob3dfcG1jNywgc3RvcmVfcG1jNyksCiAJX1NZU0RFVl9BVFRSKHBtYzgsIDA2MDAsIHNob3dfcG1jOCwgc3RvcmVfcG1jOCksCisjZW5kaWYKIH07CiAKKyNpZmRlZiBIQVNfUFBDX1BNQ19QQTZUCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgcGE2dF9hdHRyc1tdID0gewogCV9TWVNERVZfQVRUUihtbWNyMCwgMDYwMCwgc2hvd19tbWNyMCwgc3RvcmVfbW1jcjApLAogCV9TWVNERVZfQVRUUihtbWNyMSwgMDYwMCwgc2hvd19tbWNyMSwgc3RvcmVfbW1jcjEpLApAQCAtMjk4LDYgKzM0MCw4IEBACiAJX1NZU0RFVl9BVFRSKHRzcjMsIDA2MDAsIHNob3dfdHNyMywgc3RvcmVfdHNyMyksCiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0tFUk5FTCAqLwogfTsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19QQTZUICovCisjZW5kaWYgLyogSEFTX1BQQ19QTUNfQ0xBU1NJQyAqLwogCiBzdHJ1Y3QgY2FjaGVfZGVzYyB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKQEAgLTU4OCwyMyArNjMyLDM2IEBACiAJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHJzLCAqcG1jX2F0dHJzOwogCWludCBpLCBuYXR0cnM7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykgJiYKIAkJCWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9zbXRfc25vb3plX2RlbGF5KTsKKyNlbmRpZgogCiAJLyogUE1DIHN0dWZmICovCiAJc3dpdGNoIChjdXJfY3B1X3NwZWMtPnBtY190eXBlKSB7CisjaWZkZWYgSEFTX1BQQ19QTUNfSUJNCiAJY2FzZSBQUENfUE1DX0lCTToKIAkJYXR0cnMgPSBpYm1fY29tbW9uX2F0dHJzOwogCQluYXR0cnMgPSBzaXplb2YoaWJtX2NvbW1vbl9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOwotCQlwbWNfYXR0cnMgPSBpYm1fcG1jX2F0dHJzOworCQlwbWNfYXR0cnMgPSBjbGFzc2ljX3BtY19hdHRyczsKIAkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfSUJNICovCisjaWZkZWYgSEFTX1BQQ19QTUNfRzQKKwljYXNlIFBQQ19QTUNfRzQ6CisJCWF0dHJzID0gZzRfY29tbW9uX2F0dHJzOworCQluYXR0cnMgPSBzaXplb2YoZzRfY29tbW9uX2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7CisJCXBtY19hdHRycyA9IGNsYXNzaWNfcG1jX2F0dHJzOworCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19HNCAqLworI2lmZGVmIEhBU19QUENfUE1DX1BBNlQKIAljYXNlIFBQQ19QTUNfUEE2VDoKIAkJLyogUEEgU2VtaSBzdGFydHMgY291bnRpbmcgYXQgUE1DMCAqLwogCQlhdHRycyA9IHBhNnRfYXR0cnM7CiAJCW5hdHRycyA9IHNpemVvZihwYTZ0X2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7CiAJCXBtY19hdHRycyA9IE5VTEw7CiAJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX1BBNlQgKi8KIAlkZWZhdWx0OgogCQlhdHRycyA9IE5VTEw7CiAJCW5hdHRycyA9IDA7CkBAIC02MTgsNiArNjc1LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IGN1cl9jcHVfc3BlYy0+bnVtX3BtY3M7IGkrKykKIAkJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmcG1jX2F0dHJzW2ldKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9NTUNSQSkpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9tbWNyYSk7CiAKQEAgLTYyOSw2ICs2ODcsNyBAQAogCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RTQ1IpKQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfZHNjcik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIAljcmVhdGVfY2FjaGVfaW5mbyhzKTsKIH0KQEAgLTY0MSwxNiArNzAwLDkgQEAKIAlpbnQgY3B1ID0gc3lzZGV2LT5pZDsKIAogCWNhY2hlX2Rlc2MgPSBwZXJfY3B1KGNhY2hlX2Rlc2MsIGNwdSk7Ci0JaWYgKGNhY2hlX2Rlc2MgIT0gTlVMTCkgewotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX3NpemVfYXR0ci5hdHRyKTsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV9saW5lX3NpemVfYXR0ci5hdHRyKTsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV90eXBlX2F0dHIuYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfbGV2ZWxfYXR0ci5hdHRyKTsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV9ucl9zZXRzX2F0dHIuYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfYXNzb2NfYXR0ci5hdHRyKTsKLQorCWlmIChjYWNoZV9kZXNjICE9IE5VTEwpCiAJCWtvYmplY3RfcHV0KCZjYWNoZV9kZXNjLT5rb2JqKTsKLQl9CisKIAljYWNoZV90b3BsZXZlbCA9IHBlcl9jcHUoY2FjaGVfdG9wbGV2ZWwsIGNwdSk7CiAJaWYgKGNhY2hlX3RvcGxldmVsICE9IE5VTEwpCiAJCWtvYmplY3RfcHV0KGNhY2hlX3RvcGxldmVsKTsKQEAgLTY3MSwxNyArNzIzLDI4IEBACiAKIAkvKiBQTUMgc3R1ZmYgKi8KIAlzd2l0Y2ggKGN1cl9jcHVfc3BlYy0+cG1jX3R5cGUpIHsKKyNpZmRlZiBIQVNfUFBDX1BNQ19JQk0KIAljYXNlIFBQQ19QTUNfSUJNOgogCQlhdHRycyA9IGlibV9jb21tb25fYXR0cnM7CiAJCW5hdHRycyA9IHNpemVvZihpYm1fY29tbW9uX2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7Ci0JCXBtY19hdHRycyA9IGlibV9wbWNfYXR0cnM7CisJCXBtY19hdHRycyA9IGNsYXNzaWNfcG1jX2F0dHJzOwogCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19JQk0gKi8KKyNpZmRlZiBIQVNfUFBDX1BNQ19HNAorCWNhc2UgUFBDX1BNQ19HNDoKKwkJYXR0cnMgPSBnNF9jb21tb25fYXR0cnM7CisJCW5hdHRycyA9IHNpemVvZihnNF9jb21tb25fYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKKwkJcG1jX2F0dHJzID0gY2xhc3NpY19wbWNfYXR0cnM7CisJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX0c0ICovCisjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VAogCWNhc2UgUFBDX1BNQ19QQTZUOgogCQkvKiBQQSBTZW1pIHN0YXJ0cyBjb3VudGluZyBhdCBQTUMwICovCiAJCWF0dHJzID0gcGE2dF9hdHRyczsKIAkJbmF0dHJzID0gc2l6ZW9mKHBhNnRfYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKIAkJcG1jX2F0dHJzID0gTlVMTDsKIAkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfUEE2VCAqLwogCWRlZmF1bHQ6CiAJCWF0dHJzID0gTlVMTDsKIAkJbmF0dHJzID0gMDsKQEAgLTY5NSw2ICs3NTgsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgY3VyX2NwdV9zcGVjLT5udW1fcG1jczsgaSsrKQogCQkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZwbWNfYXR0cnNbaV0pOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX01NQ1JBKSkKIAkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZhdHRyX21tY3JhKTsKIApAQCAtNzA2LDYgKzc3MCw3IEBACiAKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfRFNDUikpCiAJCXN5c2Rldl9yZW1vdmVfZmlsZShzLCAmYXR0cl9kc2NyKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCXJlbW92ZV9jYWNoZV9pbmZvKHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggMjc1MGZiYS4uNDM0YzkyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCWVsc2UKIAkJdmlvZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZkbWFfaW9tbXVfb3BzOwogCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2Rldik7Ci0JdmlvZGV2LT5kZXYuYXJjaGRhdGEubnVtYV9ub2RlID0gb2Zfbm9kZV90b19uaWQob2Zfbm9kZSk7CisJc2V0X2Rldl9ub2RlKCZ2aW9kZXYtPmRldiwgb2Zfbm9kZV90b19uaWQob2Zfbm9kZSkpOwogCiAJLyogaW5pdCBnZW5lcmljICdzdHJ1Y3QgZGV2aWNlJyBmaWVsZHM6ICovCiAJdmlvZGV2LT5kZXYucGFyZW50ID0gJnZpb19idXNfZGV2aWNlLmRldjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5ZjZjMWNhLi5iMzljMjdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xODcsNiArMTg3LDI0IEBACiAJCSooLm1hY2hpbmUuZGVzYykKIAkJX19tYWNoaW5lX2Rlc2NfZW5kID0gLiA7CiAJfQorCS4gPSBBTElHTig4KTsKKwkuZHluc3ltIDogQVQoQUREUiguZHluc3ltKSAtIExPQURfT0ZGU0VUKSB7ICooLmR5bnN5bSkgfQorCS5keW5zdHIgOiBBVChBRERSKC5keW5zdHIpIC0gTE9BRF9PRkZTRVQpIHsgKiguZHluc3RyKSB9CisJLmR5bmFtaWMgOiBBVChBRERSKC5keW5hbWljKSAtIExPQURfT0ZGU0VUKQorCXsKKwkJX19keW5hbWljX3N0YXJ0ID0gLjsKKwkJKiguZHluYW1pYykKKwl9CisJLmhhc2ggOiBBVChBRERSKC5oYXNoKSAtIExPQURfT0ZGU0VUKSB7ICooLmhhc2gpIH0KKwkuaW50ZXJwIDogQVQoQUREUiguaW50ZXJwKSAtIExPQURfT0ZGU0VUKSB7ICooLmludGVycCkgfQorCS5yZWxhLmR5biA6IEFUKEFERFIoLnJlbGEuZHluKSAtIExPQURfT0ZGU0VUKQorCXsKKwkJX19yZWxhX2R5bl9zdGFydCA9IC47CisJCSooLnJlbGEqKQorCX0KKworCS8qIEZha2UgRUxGIGhlYWRlciBjb250YWluaW5nIFJQQSBub3RlOyBmb3IgYWRkbm90ZSAqLworCS5mYWtlZWxmIDogQVQoQUREUiguZmFrZWVsZikgLSBMT0FEX09GRlNFVCkgeyAqKC5mYWtlZWxmKSB9CiAKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwppbmRleCA1YTU2MDJkLi4yZTIyN2E0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgpAQCAtMTA5LDcgKzExMCw2IEBACiAJcmV0dXJuIHRsYmUtPndvcmQyICYgKFBQQzQ0eF9UTEJfU1d8UFBDNDR4X1RMQl9VVyk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggbW1hcF9zZW0gbG9ja2VkIGZvciB3cml0aW5nLiAqLwogc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTEyNCw2ICsxMjQsMTEgQEAKIAl9CiB9CiAKK3ZvaWQga3ZtcHBjX3RsYmVfc2V0X21vZGlmaWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGkpCit7CisgICAgdmNwdS0+YXJjaC5zaGFkb3dfdGxiX21vZFtpXSA9IDE7Cit9CisKIC8qIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgZ3Vlc3QgVExCIGVudHJ5IGlzIHNhZmUgdG8gaW5zZXJ0IGludG8KICAqIHRoZSBzaGFkb3cgVExCLiAqLwogdm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdmbl90IGdmbiwgdTY0IGFzaWQsCkBAIC0xNDIsMTkgKzE0NywxNiBAQAogCXN0bGJlID0gJnZjcHUtPmFyY2guc2hhZG93X3RsYlt2aWN0aW1dOwogCiAJLyogR2V0IHJlZmVyZW5jZSB0byBuZXcgcGFnZS4gKi8KLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJbmV3X3BhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGdmbik7CiAJaWYgKGlzX2Vycm9yX3BhZ2UobmV3X3BhZ2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbHghXG4iLCBnZm4pOwogCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKG5ld19wYWdlKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJcmV0dXJuOwogCX0KIAlocGFkZHIgPSBwYWdlX3RvX3BoeXMobmV3X3BhZ2UpOwogCiAJLyogRHJvcCByZWZlcmVuY2UgdG8gb2xkIHBhZ2UuICovCiAJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCB2aWN0aW0pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl2Y3B1LT5hcmNoLnNoYWRvd19wYWdlc1t2aWN0aW1dID0gbmV3X3BhZ2U7CiAKQEAgLTE2NCwyNyArMTY2LDMwIEBACiAKIAkvKiBYWFggd2hhdCBhYm91dCBBUz8gKi8KIAotCXN0bGJlLT50aWQgPSBhc2lkICYgMHhmZjsKKwlzdGxiZS0+dGlkID0gIShhc2lkICYgMHhmZik7CiAKIAkvKiBGb3JjZSBUUz0xIGZvciBhbGwgZ3Vlc3QgbWFwcGluZ3MuICovCiAJLyogRm9yIG5vdyB3ZSBoYXJkY29kZSA0S0IgbWFwcGluZ3MsIGJ1dCBpdCB3aWxsIGJlIGltcG9ydGFudCB0bwogCSAqIHVzZSBob3N0IGxhcmdlIHBhZ2VzIGluIHRoZSBmdXR1cmUuICovCiAJc3RsYmUtPndvcmQwID0gKGd2YWRkciAmIFBBR0VfTUFTSykgfCBQUEM0NHhfVExCX1ZBTElEIHwgUFBDNDR4X1RMQl9UUwogCSAgICAgICAgICAgICAgIHwgUFBDNDR4X1RMQl80SzsKLQogCXN0bGJlLT53b3JkMSA9IChocGFkZHIgJiAweGZmZmZmYzAwKSB8ICgoaHBhZGRyID4+IDMyKSAmIDB4Zik7CiAJc3RsYmUtPndvcmQyID0ga3ZtcHBjXzQ0eF90bGJfc2hhZG93X2F0dHJpYihmbGFncywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKTsKKwlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgdmljdGltKTsKKworCUtWTVRSQUNFXzVEKFNUTEJfV1JJVEUsIHZjcHUsIHZpY3RpbSwKKwkJCXN0bGJlLT50aWQsIHN0bGJlLT53b3JkMCwgc3RsYmUtPndvcmQxLCBzdGxiZS0+d29yZDIsCisJCQloYW5kbGVyKTsKIH0KIAogdm9pZCBrdm1wcGNfbW11X2ludmFsaWRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd2YV90IGVlbmQsIHUzMiBhc2lkKQogewotCXVuc2lnbmVkIGludCBwaWQgPSBhc2lkICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgcGlkID0gIShhc2lkICYgMHhmZik7CiAJaW50IGk7CiAKIAkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLwotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJZm9yIChpID0gMDsgaSA8PSB0bGJfNDR4X2h3YXRlcjsgaSsrKSB7CiAJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1LT5hcmNoLnNoYWRvd190bGJbaV07CiAJCXVuc2lnbmVkIGludCB0aWQ7CkBAIC0yMDQsMjEgKzIwOSwzNSBAQAogCiAJCWt2bXBwY180NHhfc2hhZG93X3JlbGVhc2UodmNwdSwgaSk7CiAJCXN0bGJlLT53b3JkMCA9IDA7CisJCWt2bXBwY190bGJlX3NldF9tb2RpZmllZCh2Y3B1LCBpKTsKKwkJS1ZNVFJBQ0VfNUQoU1RMQl9JTlZBTCwgdmNwdSwgaSwKKwkJCQlzdGxiZS0+dGlkLCBzdGxiZS0+d29yZDAsIHN0bGJlLT53b3JkMSwKKwkJCQlzdGxiZS0+d29yZDIsIGhhbmRsZXIpOwogCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIH0KIAotLyogSW52YWxpZGF0ZSBhbGwgbWFwcGluZ3MsIHNvIHRoYXQgd2hlbiB0aGV5IGZhdWx0IGJhY2sgaW4gdGhleSB3aWxsIGdldCB0aGUKLSAqIHByb3BlciBwZXJtaXNzaW9uIGJpdHMuICovCisvKiBJbnZhbGlkYXRlIGFsbCBtYXBwaW5ncyBvbiB0aGUgcHJpdmlsZWdlIHN3aXRjaCBhZnRlciBQSUQgaGFzIGJlZW4gY2hhbmdlZC4KKyAqIFRoZSBndWVzdCBhbHdheXMgcnVucyB3aXRoIFBJRD0xLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZSBlbnRpcmUgVExCIHdoZW4KKyAqIHN3aXRjaGluZyBhZGRyZXNzIHNwYWNlcy4gKi8KIHZvaWQga3ZtcHBjX21tdV9wcml2X3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB1c2VybW9kZSkKIHsKIAlpbnQgaTsKIAotCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspIHsKLQkJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCBpKTsKLQkJdmNwdS0+YXJjaC5zaGFkb3dfdGxiW2ldLndvcmQwID0gMDsKKwlpZiAodmNwdS0+YXJjaC5zd2FwX3BpZCkgeworCQkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspIHsKKwkJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1LT5hcmNoLnNoYWRvd190bGJbaV07CisKKwkJCS8qIEZ1dHVyZSBvcHRpbWl6YXRpb246IGNsZWFyIG9ubHkgdXNlcnNwYWNlIG1hcHBpbmdzLiAqLworCQkJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCBpKTsKKwkJCXN0bGJlLT53b3JkMCA9IDA7CisJCQlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgaSk7CisJCQlLVk1UUkFDRV81RChTVExCX0lOVkFMLCB2Y3B1LCBpLAorCQkJICAgICAgICAgICAgc3RsYmUtPnRpZCwgc3RsYmUtPndvcmQwLCBzdGxiZS0+d29yZDEsCisJCQkgICAgICAgICAgICBzdGxiZS0+d29yZDIsIGhhbmRsZXIpOworCQl9CisJCXZjcHUtPmFyY2guc3dhcF9waWQgPSAwOwogCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXZjcHUtPmFyY2guc2hhZG93X3BpZCA9ICF1c2VybW9kZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA2YjA3NjAxLi41M2FhYTY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCkBAIC0zNyw2ICszNywxNyBAQAogCSAgUHJvdmlkZXMgaG9zdCBzdXBwb3J0IGZvciBLVk0gb24gQm9vayBFIFBvd2VyUEMgcHJvY2Vzc29ycy4gQ3VycmVudGx5CiAJICB0aGlzIHdvcmtzIG9uIDQ0MCBwcm9jZXNzb3JzIG9ubHkuCiAKK2NvbmZpZyBLVk1fVFJBQ0UKKwlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEtWTSAmJiBNQVJLRVJTICYmIFNZU0ZTCisJc2VsZWN0IFJFTEFZCisJc2VsZWN0IERFQlVHX0ZTCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHJlYWRpbmcgYSB0cmFjZSBvZiBrdm0tcmVsYXRlZCBldmVudHMgdGhyb3VnaAorCSAgcmVsYXlmcy4gIE5vdGUgdGhlIEFCSSBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUgYW5kIHdpbGwgYmUKKwkgIG1vZGlmaWVkIGluIGZ1dHVyZSB1cGRhdGVzLgorCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQppbmRleCAwNGUzNDQ5Li4yYTVkNDM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKQEAgLTQsOSArNCwxMSBAQAogCiBFWFRSQV9DRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvcG93ZXJwYy9rdm0KIAotY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gY29hbGVzY2VkX21taW8ubykKK2NvbW1vbi1vYmpzLXkgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gY29hbGVzY2VkX21taW8ubykKIAota3ZtLW9ianMgOj0gJChjb21tb24tb2JqcykgcG93ZXJwYy5vIGVtdWxhdGUubyBib29rZV9ndWVzdC5vCitjb21tb24tb2Jqcy0kKENPTkZJR19LVk1fVFJBQ0UpICArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV90cmFjZS5vKQorCitrdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzLXkpIHBvd2VycGMubyBlbXVsYXRlLm8gYm9va2VfZ3Vlc3Qubwogb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KIAogQUZMQUdTX2Jvb2tlX2ludGVycnVwdHMubyA6PSAtSSQob2JqKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9ndWVzdC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9ndWVzdC5jCmluZGV4IDljOGFkODUuLjdiMjU5MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZ3Vlc3QuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2d1ZXN0LmMKQEAgLTQxMCw2ICs0MTAsMjEgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfREVCVUc6IHsKKwkJdTMyIGRic3I7CisKKwkJdmNwdS0+YXJjaC5wYyA9IG1mc3ByKFNQUk5fQ1NSUjApOworCisJCS8qIGNsZWFyIElBQyBldmVudHMgaW4gREJTUiByZWdpc3RlciAqLworCQlkYnNyID0gbWZzcHIoU1BSTl9EQlNSKTsKKwkJZGJzciAmPSBEQlNSX0lBQzEgfCBEQlNSX0lBQzIgfCBEQlNSX0lBQzMgfCBEQlNSX0lBQzQ7CisJCW10c3ByKFNQUk5fREJTUiwgZGJzcik7CisKKwkJcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCQlyID0gUkVTVU1FX0hPU1Q7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VNRVJHICJleGl0X25yICVkXG4iLCBleGl0X25yKTsKIAkJQlVHKCk7CkBAIC00NzEsNiArNDg2LDggQEAKIAl2Y3B1LT5hcmNoLm1zciA9IDA7CiAJdmNwdS0+YXJjaC5ncHJbMV0gPSAoMTY8PDIwKSAtIDg7IC8qIC04IGZvciB0aGUgY2FsbGVlLXNhdmUgTFIgc2xvdCAqLwogCisJdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0gMTsKKwogCS8qIEV5ZS1jYXRjaGluZyBudW1iZXIgc28gd2Uga25vdyBpZiB0aGUgZ3Vlc3QgdGFrZXMgYW4gaW50ZXJydXB0CiAJICogYmVmb3JlIGl0J3MgcHJvZ3JhbW1lZCBpdHMgb3duIElWUFIuICovCiAJdmNwdS0+YXJjaC5pdnByID0gMHg1NTU1MDAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggM2I2NTNiNS4uOTVlMTY1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTQyLDcgKzQyLDggQEAKICNkZWZpbmUgSE9TVF9TVEFDS19MUiAgIChIT1NUX1NUQUNLX1NJWkUgKyA0KSAvKiBJbiBjYWxsZXIgc3RhY2sgZnJhbWUuICovCiAKICNkZWZpbmUgTkVFRF9JTlNUX01BU0sgKCgxPDxCT09LRV9JTlRFUlJVUFRfUFJPR1JBTSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUykpCisgICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RFQlVHKSkKIAogI2RlZmluZSBORUVEX0RFQVJfTUFTSyAoKDE8PEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UpIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgKDE8PEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MpKQpAQCAtMzMxLDUwICszMzIsNTYgQEAKIAogCW1mc3ByCXIzLCBTUFJOX1BJRAogCXN0dwlyMywgVkNQVV9IT1NUX1BJRChyNCkKLQlsd3oJcjMsIFZDUFVfUElEKHI0KQorCWx3eglyMywgVkNQVV9TSEFET1dfUElEKHI0KQogCW10c3ByCVNQUk5fUElELCByMwogCi0JLyogUHJldmVudCBhbGwgVExCIHVwZGF0ZXMuICovCisJLyogUHJldmVudCBhbGwgYXN5bmNocm9ub3VzIFRMQiB1cGRhdGVzLiAqLwogCW1mbXNyCXI1CiAJbGlzCXI2LCAoTVNSX0VFfE1TUl9DRXxNU1JfTUV8TVNSX0RFKUBoCiAJb3JpCXI2LCByNiwgKE1TUl9FRXxNU1JfQ0V8TVNSX01FfE1TUl9ERSlAbAogCWFuZGMJcjYsIHI1LCByNgogCW10bXNyCXI2CiAKLQkvKiBTYXZlIHRoZSBob3N0J3Mgbm9uLXBpbm5lZCBUTEIgbWFwcGluZ3MsIGFuZCBsb2FkIHRoZSBndWVzdCBtYXBwaW5ncwotCSAqIG92ZXIgdGhlbS4gTGVhdmUgdGhlIGhvc3QncyAicGlubmVkIiBrZXJuZWwgbWFwcGluZ3MgaW4gcGxhY2UuICovCi0JLyogWFhYIG9wdGltaXphdGlvbjogdXNlIGdlbmVyYXRpb24gY291bnQgdG8gYXZvaWQgc3dhcHBpbmcgdW5tb2RpZmllZAotCSAqIGVudHJpZXMuICovCisJLyogTG9hZCB0aGUgZ3Vlc3QgbWFwcGluZ3MsIGxlYXZpbmcgdGhlIGhvc3QncyAicGlubmVkIiBrZXJuZWwgbWFwcGluZ3MKKwkgKiBpbiBwbGFjZS4gKi8KIAltZnNwcglyMTAsIFNQUk5fTU1VQ1IJCQkvKiBTYXZlIGhvc3QgTU1VQ1IuICovCi0JbGlzCXI4LCB0bGJfNDR4X2h3YXRlckBoYQotCWx3eglyOCwgdGxiXzQ0eF9od2F0ZXJAbChyOCkKLQlhZGRpCXIzLCByNCwgVkNQVV9IT1NUX1RMQiAtIDQKLQlhZGRpCXI5LCByNCwgVkNQVV9TSEFET1dfVExCIC0gNAorCWxpCXI1LCBQUEM0NHhfVExCX1NJWkUKKwlsaXMJcjUsIHRsYl80NHhfaHdhdGVyQGhhCisJbHd6CXI1LCB0bGJfNDR4X2h3YXRlckBsKHI1KQorCW10Y3RyCXI1CisJYWRkaQlyOSwgcjQsIFZDUFVfU0hBRE9XX1RMQgorCWFkZGkJcjUsIHI0LCBWQ1BVX1NIQURPV19NT0QKKwlsaQlyMywgMAorMToKKwlsYnp4CXI3LCByMywgcjUKKwljbXB3aQlyNywgMAorCWJlcQkzZgorCisJLyogTG9hZCBndWVzdCBlbnRyeS4gKi8KKwltdWxsaQlyMTEsIHIzLCBUTEJFX0JZVEVTCisJYWRkCXIxMSwgcjExLCByOQorCWx3eglyNywgMChyMTEpCisJbXRzcHIJU1BSTl9NTVVDUiwgcjcKKwlsd3oJcjcsIDQocjExKQorCXRsYndlCXI3LCByMywgUFBDNDR4X1RMQl9QQUdFSUQKKwlsd3oJcjcsIDgocjExKQorCXRsYndlCXI3LCByMywgUFBDNDR4X1RMQl9YTEFUCisJbHd6CXI3LCAxMihyMTEpCisJdGxid2UJcjcsIHIzLCBQUEM0NHhfVExCX0FUVFJJQgorMzoKKwlhZGRpCXIzLCByMywgMSAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVtZW50IGluZGV4LiAqLworCWJkbnoJMWIKKworCW10c3ByCVNQUk5fTU1VQ1IsIHIxMAkJCS8qIFJlc3RvcmUgaG9zdCBNTVVDUi4gKi8KKworCS8qIENsZWFyIGJpdG1hcCBvZiBtb2RpZmllZCBUTEIgZW50cmllcyAqLworCWxpCXI1LCBQUEM0NHhfVExCX1NJWkU+PjIKKwltdGN0cglyNQorCWFkZGkJcjUsIHI0LCBWQ1BVX1NIQURPV19NT0QgLSA0CiAJbGkJcjYsIDAKIDE6Ci0JLyogU2F2ZSBob3N0IGVudHJ5LiAqLwotCXRsYnJlCXI3LCByNiwgUFBDNDR4X1RMQl9QQUdFSUQKLQltZnNwcglyNSwgU1BSTl9NTVVDUgotCXN0d3UJcjUsIDQocjMpCi0Jc3R3dQlyNywgNChyMykKLQl0bGJyZQlyNywgcjYsIFBQQzQ0eF9UTEJfWExBVAotCXN0d3UJcjcsIDQocjMpCi0JdGxicmUJcjcsIHI2LCBQUEM0NHhfVExCX0FUVFJJQgotCXN0d3UJcjcsIDQocjMpCi0JLyogTG9hZCBndWVzdCBlbnRyeS4gKi8KLQlsd3p1CXI3LCA0KHI5KQotCW10c3ByCVNQUk5fTU1VQ1IsIHI3Ci0JbHd6dQlyNywgNChyOSkKLQl0bGJ3ZQlyNywgcjYsIFBQQzQ0eF9UTEJfUEFHRUlECi0JbHd6dQlyNywgNChyOSkKLQl0bGJ3ZQlyNywgcjYsIFBQQzQ0eF9UTEJfWExBVAotCWx3enUJcjcsIDQocjkpCi0JdGxid2UJcjcsIHI2LCBQUEM0NHhfVExCX0FUVFJJQgotCS8qIEluY3JlbWVudCBpbmRleC4gKi8KLQlhZGRpCXI2LCByNiwgMQotCWNtcHcJcjYsIHI4Ci0JYmx0CTFiCi0JbXRzcHIJU1BSTl9NTVVDUiwgcjEwCQkJLyogUmVzdG9yZSBob3N0IE1NVUNSLiAqLworCXN0d3UJcjYsIDQocjUpCisJYmRuegkxYgogCiAJaWNjY2kJMCwgMCAvKiBYWFggaGFjayAqLwogCkBAIC00MzEsNiArNDM4LDE0IEBACiAJb3JpcwlyMywgcjMsIEtWTVBQQ19NU1JfTUFTS0BoCiAJb3JpCXIzLCByMywgS1ZNUFBDX01TUl9NQVNLQGwKIAltdHNycjEJcjMKKworCS8qIENsZWFyIGFueSBkZWJ1ZyBldmVudHMgd2hpY2ggb2NjdXJyZWQgc2luY2Ugd2UgZGlzYWJsZWQgTVNSW0RFXS4KKwkgKiBYWFggVGhpcyBnaXZlcyB1cyBhIDMtaW5zdHJ1Y3Rpb24gd2luZG93IGluIHdoaWNoIGEgYnJlYWtwb2ludAorCSAqIGludGVuZGVkIGZvciBndWVzdCBjb250ZXh0IGNvdWxkIGZpcmUgaW4gdGhlIGhvc3QgaW5zdGVhZC4gKi8KKwlsaXMJcjMsIDB4ZmZmZgorCW9yaQlyMywgcjMsIDB4ZmZmZgorCW10c3ByCVNQUk5fREJTUiwgcjMKKwogCWx3eglyMywgVkNQVV9HUFIocjMpKHI0KQogCWx3eglyNCwgVkNQVV9HUFIocjQpKHI0KQogCXJmaQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCA4YzYwNWQwLi4wZmNlNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtMTcwLDYgKzE3MCwxMCBAQAogCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgcmFkZHIgPj4gUEFHRV9TSElGVCwgYXNpZCwgZmxhZ3MpOwogCX0KIAorCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIGluZGV4LAorCQkJdGxiZS0+dGlkLCB0bGJlLT53b3JkMCwgdGxiZS0+d29yZDEsIHRsYmUtPndvcmQyLAorCQkJaGFuZGxlcik7CisKIAlyZXR1cm4gRU1VTEFURV9ET05FOwogfQogCkBAIC01MDQsNyArNTA4LDcgQEAKIAkJCWNhc2UgU1BSTl9NTVVDUjoKIAkJCQl2Y3B1LT5hcmNoLm1tdWNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAkJCWNhc2UgU1BSTl9QSUQ6Ci0JCQkJdmNwdS0+YXJjaC5waWQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQkJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOwogCQkJY2FzZSBTUFJOX0NDUjA6CiAJCQkJdmNwdS0+YXJjaC5jY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAkJCWNhc2UgU1BSTl9DQ1IxOgpAQCAtNzY1LDYgKzc2OSw4IEBACiAJCWJyZWFrOwogCX0KIAorCUtWTVRSQUNFXzNEKFBQQ19JTlNUUiwgdmNwdSwgaW5zdCwgdmNwdS0+YXJjaC5wYywgZW11bGF0ZWQsIGVudHJ5ZXhpdCk7CisKIAlpZiAoYWR2YW5jZSkKIAkJdmNwdS0+YXJjaC5wYyArPSA0OyAvKiBBZHZhbmNlIHBhc3QgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggNTM4MjZhNS4uOTBhNmZjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIAogZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCkBAIC0yMzksMTggKzI0MCwxMTQgQEAKIHsKIH0KIAorLyogTm90ZTogY2xlYXJpbmcgTVNSW0RFXSBqdXN0IG1lYW5zIHRoYXQgdGhlIGRlYnVnIGludGVycnVwdCB3aWxsIG5vdCBiZQorICogZGVsaXZlcmVkICppbW1lZGlhdGVseSouIEluc3RlYWQsIGl0IHNpbXBseSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBEQlNSIGJpdHMuCisgKiBJZiB0aG9zZSBEQlNSIGJpdHMgYXJlIHN0aWxsIHNldCB3aGVuIE1TUltERV0gaXMgcmUtZW5hYmxlZCwgdGhlIGludGVycnVwdAorICogd2lsbCBiZSBkZWxpdmVyZWQgYXMgYW4gImltcHJlY2lzZSBkZWJ1ZyBldmVudCIgKHdoaWNoIGlzIGluZGljYXRlZCBieQorICogREJTUltJREVdLgorICovCitzdGF0aWMgdm9pZCBrdm1wcGNfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKHZvaWQpCit7CisJbXRtc3IobWZtc3IoKSAmIH5NU1JfREUpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfcmVzdG9yZV9ob3N0X2RlYnVnX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKCk7CisKKwltdHNwcihTUFJOX0lBQzEsIHZjcHUtPmFyY2guaG9zdF9pYWNbMF0pOworCW10c3ByKFNQUk5fSUFDMiwgdmNwdS0+YXJjaC5ob3N0X2lhY1sxXSk7CisJbXRzcHIoU1BSTl9JQUMzLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdKTsKKwltdHNwcihTUFJOX0lBQzQsIHZjcHUtPmFyY2guaG9zdF9pYWNbM10pOworCW10c3ByKFNQUk5fREJDUjEsIHZjcHUtPmFyY2guaG9zdF9kYmNyMSk7CisJbXRzcHIoU1BSTl9EQkNSMiwgdmNwdS0+YXJjaC5ob3N0X2RiY3IyKTsKKwltdHNwcihTUFJOX0RCQ1IwLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjApOworCW10bXNyKHZjcHUtPmFyY2guaG9zdF9tc3IpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfbG9hZF9ndWVzdF9kZWJ1Z19yZWdpc3RlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyA9ICZ2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwl1MzIgZGJjcjAgPSAwOworCisJdmNwdS0+YXJjaC5ob3N0X21zciA9IG1mbXNyKCk7CisJa3ZtcHBjX2Rpc2FibGVfZGVidWdfaW50ZXJydXB0cygpOworCisJLyogU2F2ZSBob3N0IGRlYnVnIHJlZ2lzdGVyIHN0YXRlLiAqLworCXZjcHUtPmFyY2guaG9zdF9pYWNbMF0gPSBtZnNwcihTUFJOX0lBQzEpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbMV0gPSBtZnNwcihTUFJOX0lBQzIpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbMl0gPSBtZnNwcihTUFJOX0lBQzMpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbM10gPSBtZnNwcihTUFJOX0lBQzQpOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMCA9IG1mc3ByKFNQUk5fREJDUjApOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMSA9IG1mc3ByKFNQUk5fREJDUjEpOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMiA9IG1mc3ByKFNQUk5fREJDUjIpOworCisJLyogc2V0IHJlZ2lzdGVycyB1cCBmb3IgZ3Vlc3QgKi8KKworCWlmIChkYmctPmJwWzBdKSB7CisJCW10c3ByKFNQUk5fSUFDMSwgZGJnLT5icFswXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzEgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzFdKSB7CisJCW10c3ByKFNQUk5fSUFDMiwgZGJnLT5icFsxXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzIgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzJdKSB7CisJCW10c3ByKFNQUk5fSUFDMywgZGJnLT5icFsyXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzMgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzNdKSB7CisJCW10c3ByKFNQUk5fSUFDNCwgZGJnLT5icFszXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzQgfCBEQkNSMF9JRE07CisJfQorCisJbXRzcHIoU1BSTl9EQkNSMCwgZGJjcjApOworCW10c3ByKFNQUk5fREJDUjEsIDApOworCW10c3ByKFNQUk5fREJDUjIsIDApOworfQorCiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CisJaW50IGk7CisKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKKwkJa3ZtcHBjX2xvYWRfZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzKHZjcHUpOworCisJLyogTWFyayBldmVyeSBndWVzdCBlbnRyeSBpbiB0aGUgc2hhZG93IFRMQiBlbnRyeSBtb2RpZmllZCwgc28gdGhhdCB0aGV5CisJICogd2lsbCBhbGwgYmUgcmVsb2FkZWQgb24gdGhlIG5leHQgdmNwdSBydW4gKGluc3RlYWQgb2YgYmVpbmcKKwkgKiBkZW1hbmQtZmF1bHRlZCkuICovCisJZm9yIChpID0gMDsgaSA8PSB0bGJfNDR4X2h3YXRlcjsgaSsrKQorCQlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgaSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQorCQlrdm1wcGNfcmVzdG9yZV9ob3N0X2RlYnVnX3N0YXRlKHZjcHUpOworCisJLyogRG9uJ3QgbGVhdmUgZ3Vlc3QgVExCIGVudHJpZXMgcmVzaWRlbnQgd2hlbiBiZWluZyBkZS1zY2hlZHVsZWQuICovCisJLyogWFhYIEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGhlYXZ5d2VpZ2h0IGV4aXQgYW5kCisJICogc2NoZWRfb3V0IGhlcmUsIHNpbmNlIHdlIGNvdWxkIGF2b2lkIHRoZSBUTEIgZmx1c2ggZm9yIGhlYXZ5d2VpZ2h0CisJICogZXhpdHMuICovCisJX3RsYmlhKCk7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKIHsKLQlyZXR1cm4gLUVOT1RTVVBQOworCWludCBpOworCisJdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgeworCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+Z3Vlc3RfZGVidWcuYnApOyBpKyspIHsKKwkJCWlmIChkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCisJCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7CisJCQllbHNlCisJCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9kY3JfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggZjk4MzdmNC4uNzVmMzI2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmVsc29uLCBJQk0gQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtOCwxMTIgKzgsMTAwIEBACiAgKi8KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworICAgICAgICAuc2VjdGlvbiAgICAgICAgIi50b2MiLCJhdyIKK1BQQzY0X0NBQ0hFUzoKKyAgICAgICAgLnRjICAgICAgICAgICAgIHBwYzY0X2NhY2hlc1tUQ10scHBjNjRfY2FjaGVzCisgICAgICAgIC5zZWN0aW9uICAgICAgICAiLnRleHQiCisKIAogX0dMT0JBTChjb3B5XzRLX3BhZ2UpCi0Jc3RkCXIzMSwtOCgxKQotCXN0ZAlyMzAsLTE2KDEpCi0Jc3RkCXIyOSwtMjQoMSkKLQlzdGQJcjI4LC0zMigxKQotCXN0ZAlyMjcsLTQwKDEpCi0Jc3RkCXIyNiwtNDgoMSkKLQlzdGQJcjI1LC01NigxKQotCXN0ZAlyMjQsLTY0KDEpCi0Jc3RkCXIyMywtNzIoMSkKLQlzdGQJcjIyLC04MCgxKQotCXN0ZAlyMjEsLTg4KDEpCi0Jc3RkCXIyMCwtOTYoMSkKLQlsaQlyNSw0MDk2LzMyIC0gMQorCWxpCXI1LDQwOTYJCS8qIDRLIHBhZ2Ugc2l6ZSAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwlsZCAgICAgIHIxMCxQUEM2NF9DQUNIRVNAdG9jKHIyKQorCWx3eglyMTEsRENBQ0hFTDFMT0dMSU5FU0laRShyMTApCS8qIGxvZzIgb2YgY2FjaGUgbGluZSBzaXplICovCisJbHd6ICAgICByMTIsRENBQ0hFTDFMSU5FU0laRShyMTApCS8qIGdldCBjYWNoZSBsaW5lIHNpemUgKi8KKwlsaQlyOSwwCisJc3JkCXI4LHI1LHIxMQorCisJbXRjdHIJcjgKK3NldHVwOgorCWRjYnQJcjkscjQKKwlkY2J6CXI5LHIzCisJYWRkCXI5LHI5LHIxMgorCWJkbnoJc2V0dXAKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NQX1VTRV9EQ0JUWikKIAlhZGRpCXIzLHIzLC04Ci0JbGkJcjEyLDUKLTA6CWFkZGkJcjUscjUsLTI0Ci0JbXRjdHIJcjEyCi0JbGQJcjIyLDY0MCg0KQotCWxkCXIyMSw1MTIoNCkKLQlsZAlyMjAsMzg0KDQpCi0JbGQJcjExLDI1Nig0KQotCWxkCXI5LDEyOCg0KQotCWxkCXI3LDAoNCkKLQlsZAlyMjUsNjQ4KDQpCi0JbGQJcjI0LDUyMCg0KQotCWxkCXIyMywzOTIoNCkKLQlsZAlyMTAsMjY0KDQpCi0JbGQJcjgsMTM2KDQpCi0JbGR1CXI2LDgoNCkKLQljbXB3aQlyNSwyNAotMToJc3RkCXIyMiw2NDgoMykKLQlzdGQJcjIxLDUyMCgzKQotCXN0ZAlyMjAsMzkyKDMpCi0Jc3RkCXIxMSwyNjQoMykKLQlzdGQJcjksMTM2KDMpCi0Jc3RkCXI3LDgoMykKLQlsZAlyMjgsNjQ4KDQpCi0JbGQJcjI3LDUyMCg0KQotCWxkCXIyNiwzOTIoNCkKLQlsZAlyMzEsMjY0KDQpCi0JbGQJcjMwLDEzNig0KQotCWxkCXIyOSw4KDQpCi0Jc3RkCXIyNSw2NTYoMykKLQlzdGQJcjI0LDUyOCgzKQotCXN0ZAlyMjMsNDAwKDMpCi0Jc3RkCXIxMCwyNzIoMykKLQlzdGQJcjgsMTQ0KDMpCi0Jc3RkCXI2LDE2KDMpCi0JbGQJcjIyLDY1Nig0KQotCWxkCXIyMSw1MjgoNCkKLQlsZAlyMjAsNDAwKDQpCi0JbGQJcjExLDI3Mig0KQotCWxkCXI5LDE0NCg0KQotCWxkCXI3LDE2KDQpCi0Jc3RkCXIyOCw2NjQoMykKLQlzdGQJcjI3LDUzNigzKQotCXN0ZAlyMjYsNDA4KDMpCi0Jc3RkCXIzMSwyODAoMykKLQlzdGQJcjMwLDE1MigzKQotCXN0ZHUJcjI5LDI0KDMpCi0JbGQJcjI1LDY2NCg0KQotCWxkCXIyNCw1MzYoNCkKLQlsZAlyMjMsNDA4KDQpCi0JbGQJcjEwLDI4MCg0KQotCWxkCXI4LDE1Mig0KQotCWxkdQlyNiwyNCg0KQorCXNyZGkgICAgcjgscjUsNwkJLyogcGFnZSBpcyBjb3BpZWQgaW4gMTI4IGJ5dGUgc3RyaWRlcyAqLworCWFkZGkJcjgscjgsLTEJLyogb25lIHN0cmlkZSBjb3BpZWQgb3V0c2lkZSBsb29wICovCisKKwltdGN0cglyOAorCisJbGQJcjUsMChyNCkKKwlsZAlyNiw4KHI0KQorCWxkCXI3LDE2KHI0KQorCWxkdQlyOCwyNChyNCkKKzE6CXN0ZAlyNSw4KHIzKQorCWxkCXI5LDgocjQpCisJc3RkCXI2LDE2KHIzKQorCWxkCXIxMCwxNihyNCkKKwlzdGQJcjcsMjQocjMpCisJbGQJcjExLDI0KHI0KQorCXN0ZAlyOCwzMihyMykKKwlsZAlyMTIsMzIocjQpCisJc3RkCXI5LDQwKHIzKQorCWxkCXI1LDQwKHI0KQorCXN0ZAlyMTAsNDgocjMpCisJbGQJcjYsNDgocjQpCisJc3RkCXIxMSw1NihyMykKKwlsZAlyNyw1NihyNCkKKwlzdGQJcjEyLDY0KHIzKQorCWxkCXI4LDY0KHI0KQorCXN0ZAlyNSw3MihyMykKKwlsZAlyOSw3MihyNCkKKwlzdGQJcjYsODAocjMpCisJbGQJcjEwLDgwKHI0KQorCXN0ZAlyNyw4OChyMykKKwlsZAlyMTEsODgocjQpCisJc3RkCXI4LDk2KHIzKQorCWxkCXIxMiw5NihyNCkKKwlzdGQJcjksMTA0KHIzKQorCWxkCXI1LDEwNChyNCkKKwlzdGQJcjEwLDExMihyMykKKwlsZAlyNiwxMTIocjQpCisJc3RkCXIxMSwxMjAocjMpCisJbGQJcjcsMTIwKHI0KQorCXN0ZHUJcjEyLDEyOChyMykKKwlsZHUJcjgsMTI4KHI0KQogCWJkbnoJMWIKLQlzdGQJcjIyLDY0OCgzKQotCXN0ZAlyMjEsNTIwKDMpCi0Jc3RkCXIyMCwzOTIoMykKLQlzdGQJcjExLDI2NCgzKQotCXN0ZAlyOSwxMzYoMykKLQlzdGQJcjcsOCgzKQotCWFkZGkJcjQscjQsNjQwCi0JYWRkaQlyMyxyMyw2NDgKLQliZ2UJMGIKLQltdGN0cglyNQotCWxkCXI3LDAoNCkKLQlsZAlyOCw4KDQpCi0JbGR1CXI5LDE2KDQpCi0zOglsZAlyMTAsOCg0KQotCXN0ZAlyNyw4KDMpCi0JbGQJcjcsMTYoNCkKLQlzdGQJcjgsMTYoMykKLQlsZAlyOCwyNCg0KQotCXN0ZAlyOSwyNCgzKQotCWxkdQlyOSwzMig0KQotCXN0ZHUJcjEwLDMyKDMpCi0JYmRuegkzYgotNDoJbGQJcjEwLDgoNCkKLQlzdGQJcjcsOCgzKQotCXN0ZAlyOCwxNigzKQotCXN0ZAlyOSwyNCgzKQotCXN0ZAlyMTAsMzIoMykKLTk6CWxkCXIyMCwtOTYoMSkKLQlsZAlyMjEsLTg4KDEpCi0JbGQJcjIyLC04MCgxKQotCWxkCXIyMywtNzIoMSkKLQlsZAlyMjQsLTY0KDEpCi0JbGQJcjI1LC01NigxKQotCWxkCXIyNiwtNDgoMSkKLQlsZAlyMjcsLTQwKDEpCi0JbGQJcjI4LC0zMigxKQotCWxkCXIyOSwtMjQoMSkKLQlsZAlyMzAsLTE2KDEpCi0JbGQJcjMxLC04KDEpCisKKwlzdGQJcjUsOChyMykKKwlsZAlyOSw4KHI0KQorCXN0ZAlyNiwxNihyMykKKwlsZAlyMTAsMTYocjQpCisJc3RkCXI3LDI0KHIzKQorCWxkCXIxMSwyNChyNCkKKwlzdGQJcjgsMzIocjMpCisJbGQJcjEyLDMyKHI0KQorCXN0ZAlyOSw0MChyMykKKwlsZAlyNSw0MChyNCkKKwlzdGQJcjEwLDQ4KHIzKQorCWxkCXI2LDQ4KHI0KQorCXN0ZAlyMTEsNTYocjMpCisJbGQJcjcsNTYocjQpCisJc3RkCXIxMiw2NChyMykKKwlsZAlyOCw2NChyNCkKKwlzdGQJcjUsNzIocjMpCisJbGQJcjksNzIocjQpCisJc3RkCXI2LDgwKHIzKQorCWxkCXIxMCw4MChyNCkKKwlzdGQJcjcsODgocjMpCisJbGQJcjExLDg4KHI0KQorCXN0ZAlyOCw5NihyMykKKwlsZAlyMTIsOTYocjQpCisJc3RkCXI5LDEwNChyMykKKwlzdGQJcjEwLDExMihyMykKKwlzdGQJcjExLDEyMChyMykKKwlzdGQJcjEyLDEyOChyMykKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCmluZGV4IDVkODM5MDcuLjMxNzM0YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCS8qCiAJCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCiAJCSAqLwotCQkqaGFuZGxlID0gcGFnZV90b19idXMocGFnZSk7CisJCSpoYW5kbGUgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiAKIAkJZG8gewogCQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggMjliYzkxMi4uMDNhYTk4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtNCwxMyArNCwxNCBAQAogb2JqLSQoQ09ORklHX01BVEhfRU1VTEFUSU9OKQkrPSBmYWJzLm8gZmFkZC5vIGZhZGRzLm8gZmNtcG8ubyBmY21wdS5vIFwKIAkJCQkJZmN0aXcubyBmY3Rpd3oubyBmZGl2Lm8gZmRpdnMubyBcCiAJCQkJCWZtYWRkLm8gZm1hZGRzLm8gZm1zdWIubyBmbXN1YnMubyBcCi0JCQkJCWZtdWwubyBmbXVscy5vIGZuYWJzLm8gZm5lZy5vIHR5cGVzLm8gXAorCQkJCQlmbXVsLm8gZm11bHMubyBmbmFicy5vIGZuZWcubyBcCiAJCQkJCWZubWFkZC5vIGZubWFkZHMubyBmbm1zdWIubyBmbm1zdWJzLm8gXAogCQkJCQlmcmVzLm8gZnJzcC5vIGZyc3FydGUubyBmc2VsLm8gbGZzLm8gXAogCQkJCQlmc3FydC5vCWZzcXJ0cy5vIGZzdWIubyBmc3Vicy5vIFwKIAkJCQkJbWNyZnMubyBtZmZzLm8gbXRmc2IwLm8gbXRmc2IxLm8gXAotCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubyBcCi0JCQkJCXVkaXZtb2R0aTQubworCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubwogCiBDRkxBR1NfZmFicy5vID0gLWZuby1idWlsdGluLWZhYnMKIENGTEFHU19tYXRoLm8gPSAtZm5vLWJ1aWx0aW4tZmFicworCitFWFRSQV9DRkxBR1MgPSAtSS4gLUlpbmNsdWRlL21hdGgtZW11IC13CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZG91YmxlLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZG91YmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYmE4YjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2RvdWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgSUVFRSBEb3VibGUgUHJlY2lzaW9uCi0gKi8KLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDMyCi0jZXJyb3IgIkhlcmUncyBhIG5pY2tlbCBraWQuICBHbyBidXkgeW91cnNlbGYgYSByZWFsIGNvbXB1dGVyLiIKLSNlbmRpZgotCi0jaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKLSNkZWZpbmUgX0ZQX0ZSQUNUQklUU19ECQkoMiAqIF9GUF9XX1RZUEVfU0laRSkKLSNlbHNlCi0jZGVmaW5lIF9GUF9GUkFDVEJJVFNfRAkJX0ZQX1dfVFlQRV9TSVpFCi0jZW5kaWYKLQotI2RlZmluZSBfRlBfRlJBQ0JJVFNfRAkJNTMKLSNkZWZpbmUgX0ZQX0ZSQUNYQklUU19ECQkoX0ZQX0ZSQUNUQklUU19EIC0gX0ZQX0ZSQUNCSVRTX0QpCi0jZGVmaW5lIF9GUF9XRlJBQ0JJVFNfRAkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19EKQotI2RlZmluZSBfRlBfV0ZSQUNYQklUU19ECShfRlBfRlJBQ1RCSVRTX0QgLSBfRlBfV0ZSQUNCSVRTX0QpCi0jZGVmaW5lIF9GUF9FWFBCSVRTX0QJCTExCi0jZGVmaW5lIF9GUF9FWFBCSUFTX0QJCTEwMjMKLSNkZWZpbmUgX0ZQX0VYUE1BWF9ECQkyMDQ3Ci0KLSNkZWZpbmUgX0ZQX1FOQU5CSVRfRAkJXAotCSgoX0ZQX1dfVFlQRSkxIDw8ICgoX0ZQX0ZSQUNCSVRTX0QtMikgJSBfRlBfV19UWVBFX1NJWkUpKQotI2RlZmluZSBfRlBfSU1QTEJJVF9ECQlcCi0JKChfRlBfV19UWVBFKTEgPDwgKChfRlBfRlJBQ0JJVFNfRC0xKSAlIF9GUF9XX1RZUEVfU0laRSkpCi0jZGVmaW5lIF9GUF9PVkVSRkxPV19ECQlcCi0JKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XRlJBQ0JJVFNfRCAlIF9GUF9XX1RZUEVfU0laRSkpCi0KLSNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAotCi11bmlvbiBfRlBfVU5JT05fRAotewotICBkb3VibGUgZmx0OwotICBzdHJ1Y3QgewotI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0gICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIGZyYWMxIDogX0ZQX0ZSQUNCSVRTX0QgLSAoX0ZQX0lNUExCSVRfRCAhPSAwKSAtIF9GUF9XX1RZUEVfU0laRTsKLSAgICB1bnNpZ25lZCBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKLSNlbHNlCi0gICAgdW5zaWduZWQgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7Ci0gICAgdW5zaWduZWQgZnJhYzEgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApIC0gX0ZQX1dfVFlQRV9TSVpFOwotICAgIHVuc2lnbmVkIGV4cCAgIDogX0ZQX0VYUEJJVFNfRDsKLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0jZW5kaWYKLSAgfSBiaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotfTsKLQotI2RlZmluZSBGUF9ERUNMX0QoWCkJCV9GUF9ERUNMKDIsWCkKLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19EKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18yKEQsWCx2YWwpCi0jZGVmaW5lIEZQX1BBQ0tfUkFXX0QodmFsLFgpCV9GUF9QQUNLX1JBV18yKEQsdmFsLFgpCi0KLSNkZWZpbmUgRlBfVU5QQUNLX0QoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfVU5QQUNLX1JBV18yKEQsWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsMixYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfRCh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChELDIsWCk7CQlcCi0gICAgX0ZQX1BBQ0tfUkFXXzIoRCx2YWwsWCk7CQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfTkVHX0QoUixYKQkJX0ZQX05FRyhELDIsUixYKQotI2RlZmluZSBGUF9BRERfRChSLFgsWSkJCV9GUF9BREQoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9TVUJfRChSLFgsWSkJCV9GUF9TVUIoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9NVUxfRChSLFgsWSkJCV9GUF9NVUwoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9ESVZfRChSLFgsWSkJCV9GUF9ESVYoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9TUVJUX0QoUixYKQkJX0ZQX1NRUlQoRCwyLFIsWCkKLQotI2RlZmluZSBGUF9DTVBfRChyLFgsWSx1bikJX0ZQX0NNUChELDIscixYLFksdW4pCi0jZGVmaW5lIEZQX0NNUF9FUV9EKHIsWCxZKQlfRlBfQ01QX0VRKEQsMixyLFgsWSkKLQotI2RlZmluZSBGUF9UT19JTlRfRChyLFgscnN6LHJzZykgIF9GUF9UT19JTlQoRCwyLHIsWCxyc3oscnNnKQotI2RlZmluZSBGUF9GUk9NX0lOVF9EKFgscixycyxydCkgIF9GUF9GUk9NX0lOVChELDIsWCxyLHJzLHJ0KQotCi0jZWxzZQotCi11bmlvbiBfRlBfVU5JT05fRAotewotICBkb3VibGUgZmx0OwotICBzdHJ1Y3QgewotI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLSAgICB1bnNpZ25lZCBzaWduIDogMTsKLSAgICB1bnNpZ25lZCBleHAgIDogX0ZQX0VYUEJJVFNfRDsKLSAgICB1bnNpZ25lZCBsb25nIGZyYWMgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApOwotI2Vsc2UKLSAgICB1bnNpZ25lZCBsb25nIGZyYWMgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApOwotICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIHNpZ24gOiAxOwotI2VuZGlmCi0gIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLX07Ci0KLSNkZWZpbmUgRlBfREVDTF9EKFgpCQlfRlBfREVDTCgxLFgpCi0jZGVmaW5lIEZQX1VOUEFDS19SQVdfRChYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMShELFgsdmFsKQotI2RlZmluZSBGUF9QQUNLX1JBV19EKHZhbCxYKQlfRlBfUEFDS19SQVdfMShELHZhbCxYKQotCi0jZGVmaW5lIEZQX1VOUEFDS19EKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX1VOUEFDS19SQVdfMShELFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChELDEsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX0QodmFsLFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfUEFDS19DQU5PTklDQUwoRCwxLFgpOwkJXAotICAgIF9GUF9QQUNLX1JBV18xKEQsdmFsLFgpOwkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX05FR19EKFIsWCkJCV9GUF9ORUcoRCwxLFIsWCkKLSNkZWZpbmUgRlBfQUREX0QoUixYLFkpCQlfRlBfQUREKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1VCX0QoUixYLFkpCQlfRlBfU1VCKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfTVVMX0QoUixYLFkpCQlfRlBfTVVMKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfRElWX0QoUixYLFkpCQlfRlBfRElWKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1FSVF9EKFIsWCkJCV9GUF9TUVJUKEQsMSxSLFgpCi0KLS8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfRlBfTVVMX0QgYW5kIF9GUF9ESVZfRCBzaG91bGQgYmUgY2hvc2VuIGJ5Ci0gICB0aGUgdGFyZ2V0IG1hY2hpbmUuICAqLwotCi0jZGVmaW5lIEZQX0NNUF9EKHIsWCxZLHVuKQlfRlBfQ01QKEQsMSxyLFgsWSx1bikKLSNkZWZpbmUgRlBfQ01QX0VRX0QocixYLFkpCV9GUF9DTVBfRVEoRCwxLHIsWCxZKQotCi0jZGVmaW5lIEZQX1RPX0lOVF9EKHIsWCxyc3oscnNnKSAgX0ZQX1RPX0lOVChELDEscixYLHJzeixyc2cpCi0jZGVmaW5lIEZQX0ZST01fSU5UX0QoWCxyLHJzLHJ0KSAgX0ZQX0ZST01fSU5UKEQsMSxYLHIscnMscnQpCi0KLSNlbmRpZiAvKiBXX1RZUEVfU0laRSA8IDY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGQuYwppbmRleCA3YmVmYmJmLi4wNGQzYjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmYWRkKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwyOCArMTIsMjggQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwogI2VuZGlmCiAKLQlpZiAoQV9zICE9IEJfcyAmJiBBX2MgPT0gRlBfQ0xTX0lORiAmJiBCX2MgPT0gRlBfQ0xTX0lORikKLQkJcmV0IHw9IEVGTEFHX1ZYSVNJOwotCiAJRlBfQUREX0QoUiwgQSwgQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYwppbmRleCAyYjM0NmIzLi41OTMwZjQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmYWRkcyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTIsMjggKzEzLDI3IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7Ci0JaW50IHJldCA9IDA7CisJRlBfREVDTF9FWDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwogCXByaW50aygiQjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBCX3MsIEJfZjEsIEJfZjAsIEJfZSwgQl9jKTsKICNlbmRpZgogCi0JaWYgKEFfcyAhPSBCX3MgJiYgQV9jID09IEZQX0NMU19JTkYgJiYgQl9jID09IEZQX0NMU19JTkYpCi0JCXJldCB8PSBFRkxBR19WWElTSTsKLQogCUZQX0FERF9EKFIsIEEsIEIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXBvLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYwppbmRleCAzNmQ2ODkwLi5iNWRjNDQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYwpAQCAtMiwxNCArMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZmNtcG8odTMyICpjY3IsIGludCBjcmZELCB2b2lkICpmckEsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAJaW50IGNvZGVbNF0gPSB7ICgxIDw8IDMpLCAoMSA8PCAxKSwgKDEgPDwgMiksICgxIDw8IDApIH07CiAJbG9uZyBjbXA7CiAJaW50IHJldCA9IDA7CkBAIC0xOCw4ICsyMCw4IEBACiAJcHJpbnRrKCIlczogJXAgKCUwOHgpICVkICVwICVwXG4iLCBfX2Z1bmNfXywgY2NyLCAqY2NyLCBjcmZELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wdS5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKaW5kZXggNTNkOTM4OS4uZDRmYjFiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKQEAgLTIsMTQgKzIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZjbXB1KHUzMiAqY2NyLCBpbnQgY3JmRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKKwlGUF9ERUNMX0VYOwogCWludCBjb2RlWzRdID0geyAoMSA8PCAzKSwgKDEgPDwgMSksICgxIDw8IDIpLCAoMSA8PCAwKSB9OwogCWxvbmcgY21wOwogCkBAIC0xNyw4ICsxOSw4IEBACiAJcHJpbnRrKCIlczogJXAgKCUwOHgpICVkICVwICVwXG4iLCBfX2Z1bmNfXywgY2NyLCAqY2NyLCBjcmZELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpdy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKaW5kZXggZmNkN2E5NS4uZjY5NDQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKQEAgLTIsMTYgKzIsMTggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZjdGl3KHUzMiAqZnJELCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAJdW5zaWduZWQgaW50IHI7CiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAJRlBfVE9fSU5UX0QociwgQiwgMzIsIDEpOwogCWZyRFsxXSA9IHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYwppbmRleCAxNTE0ZDU5Li43MWU3ODJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXd6LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3ei5jCkBAIC0yLDEzICsyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmY3Rpd3oodTMyICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CisJRlBfREVDTF9FWDsKIAl1MzIgZnBzY3I7CiAJdW5zaWduZWQgaW50IHI7CiAKQEAgLTE2LDcgKzE4LDcgQEAKIAlfX0ZQVV9GUFNDUiAmPSB+KDMpOwogCV9fRlBVX0ZQU0NSIHw9IEZQX1JORF9aRVJPOwogCi0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCUZQX1RPX0lOVF9EKHIsIEIsIDMyLCAxKTsKIAlmckRbMV0gPSByOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXYuYwppbmRleCAxOGEyMGZlLi4yZGIxNTA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2LmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmZGl2KHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwxNCArMTIsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00OSw1ICs1MSw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCmluZGV4IDI0ZmVlZDYuLjc5N2Y2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZkaXZzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwxNCArMTMsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC01MSw1ICs1Myw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKaW5kZXggZGVkYjQ2NS4uOTI1MzEzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbWFkZCh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xMywxNSArMTQsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00NCw1ICs0Niw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMKaW5kZXggNmJiYjU2ZC4uYWVhODBlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmbWFkZHModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTQsMTUgKzE1LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDUsNSArNDcsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWIuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCmluZGV4IGYzMTFlMmMuLmE2NDRkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZm1zdWIodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTMsMTUgKzE0LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDcsNSArNDksNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jCmluZGV4IDgxYTcxNmQuLjJmZGVlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1YnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWJzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZm1zdWJzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTE0LDE1ICsxNSwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTQ4LDUgKzUwLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVsLmMKaW5kZXggMmYzZDMyNy4uMzkxZmQxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZm11bCh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTEsMTQgKzEyLDE1IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZCkgWyUwOGx4LiUwOGx4ICVseF1cbiIsCkBAIC0zOCw1ICs0MCw3IEBACiAJICAgICAgIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MsIFJfZjEsIFJfZjAsIFJfZSArIDEwMjMpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCmluZGV4IDk2MmI1ODguLjJkM2VjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZtdWxzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwxNCArMTMsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKSBbJTA4bHguJTA4bHggJWx4XVxuIiwKQEAgLTM5LDUgKzQxLDcgQEAKIAkgICAgICAgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYywgUl9mMSwgUl9mMCwgUl9lICsgMTAyMyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jCmluZGV4IDhjZjc4MjcuLjI0OTdiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbm1hZGQodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTMsMTUgKzE0LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDcsNSArNDksNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMKaW5kZXggZjFjNGYwZi4uZWU5ZDcxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkcy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZubWFkZHModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTQsMTUgKzE1LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDgsNSArNTAsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3ViLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3ViLmMKaW5kZXggOTg5NDRlNi4uMzg4NWE3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWIuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZubXN1Yih2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xMywxNSArMTQsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC01MCw1ICs1Miw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3Vicy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1YnMuYwppbmRleCBiMjBmNGViLi5mODM1ZGZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3Vicy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZm5tc3Vicyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xNCwxNSArMTUsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC01MSw1ICs1Myw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNwLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcC5jCmluZGV4IDcyNGNjYmMuLmRkY2MxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYwpAQCAtMiwyNCArMiwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZnJzcCh2b2lkICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CisJRlBfREVDTF9FWDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogRCAlcCwgQiAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQl9zLCBCX2YxLCBCX2YwLCBCX2UsIEJfYyk7CiAjZW5kaWYKIAotCXJldHVybiBfX0ZQX1BBQ0tfRFMoZnJELCBCKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBCKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc2VsLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jCmluZGV4IGVjYjVmMjguLjFiMGMxNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc2VsLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzZWwuYwpAQCAtMiwxOSArMiwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZnNlbCh1MzIgKmZyRCwgdm9pZCAqZnJBLCB1MzIgKmZyQiwgdTMyICpmckMpCiB7CiAJRlBfREVDTF9EKEEpOworCUZQX0RFQ0xfRVg7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOworCUZQX1VOUEFDS19EUChBLCBmckEpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnQuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCmluZGV4IDM4ZWMyYjcuLjNlOTAwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCkBAIC0yLDIxICsyLDIzIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmc3FydCh2b2lkICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBCX3MsIEJfZjEsIEJfZjAsIEJfZSwgQl9jKTsKQEAgLTMzLDUgKzM1LDcgQEAKIAlwcmludGsoIlI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydHMuYwppbmRleCAzMzUyNjNlLi4yODQzYmU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jCkBAIC0yLDIyICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmc3FydHModm9pZCAqZnJELCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQl9zLCBCX2YxLCBCX2YwLCBCX2UsIEJfYyk7CkBAIC0zNCw1ICszNiw3IEBACiAJcHJpbnRrKCJSOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3ViLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jCmluZGV4IDIwOGQyMGYuLjc4YjA5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3ViLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWIuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZzdWIodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTExLDE0ICsxMiwxNSBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTM3LDUgKzM5LDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3Vicy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWJzLmMKaW5kZXggMGU2MWI4MC4uZDNiZjkwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWJzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWJzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZnN1YnModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTEyLDE0ICsxMywxNSBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTM4LDUgKzQwLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmZC5jCmluZGV4IDZlYzkwYjUuLjc5YWM3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZmQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMKQEAgLTIsOCArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic2ZwLW1hY2hpbmUuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBsZmQodm9pZCAqZnJELCB2b2lkICplYSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZnMuYwppbmRleCA2ZjE4ZWJlLi40MzRlZDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jCkBAIC0yLDE1ICsyLDE3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBsZnModm9pZCAqZnJELCB2b2lkICplYSkKIHsKIAlGUF9ERUNMX0QoUik7CiAJRlBfREVDTF9TKEEpOworCUZQX0RFQ0xfRVg7CiAJZmxvYXQgZjsKIAogI2lmZGVmIERFQlVHCkBAIC0yMCw3ICsyMiw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmLCBlYSwgc2l6ZW9mKGZsb2F0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JX19GUF9VTlBBQ0tfUyhBLCAmZik7CisJRlBfVU5QQUNLX1MoQSwgZik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbGQgKCVsZCkgWyUwOGx4XVxuIiwgQV9zLCBBX2YsIEFfZSwgQV9jLApAQCAtMzMsNSArMzUsMTIgQEAKIAlwcmludGsoIlI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiBfX0ZQX1BBQ0tfRChmckQsIFIpOworCWlmIChSX2MgPT0gRlBfQ0xTX05BTikgeworCQlSX2UgPSBfRlBfRVhQTUFYX0Q7CisJCV9GUF9QQUNLX1JBV18yX1AoRCwgZnJELCBSKTsKKwl9IGVsc2UgeworCQlfX0ZQX1BBQ0tfRChmckQsIFIpOworCX0KKworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGguYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMKaW5kZXggMjllNTQ1ZS4uMTY0ZDU1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGguYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aC5jCkBAIC04LDggKzgsOCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogCi0jaW5jbHVkZSAic2ZwLW1hY2hpbmUuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogI2RlZmluZSBGTE9BVEZVTkMoeCkJZXh0ZXJuIGludCB4KHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKikKIApAQCAtMTY4LDYgKzE2OCw4IEBACiAJCQlmcHNjciB8PSBGUFNDUl9aWDsKIAkJaWYgKGVmbGFnICYgRUZMQUdfSU5FWEFDVCkKIAkJCWZwc2NyIHw9IEZQU0NSX1hYOworCQlpZiAoZWZsYWcgJiBFRkxBR19JTlZBTElEKQorCQkJZnBzY3IgfD0gRlBTQ1JfVlg7CiAJCWlmIChlZmxhZyAmIEVGTEFHX1ZYU05BTikKIAkJCWZwc2NyIHw9IEZQU0NSX1ZYU05BTjsKIAkJaWYgKGVmbGFnICYgRUZMQUdfVlhJU0kpCkBAIC0xODgsNyArMTkwLDcgQEAKIAkJCWZwc2NyIHw9IEZQU0NSX1ZYQ1ZJOwogCX0KIAotCWZwc2NyICY9IH4oRlBTQ1JfVlgpOworLy8JZnBzY3IgJj0gfihGUFNDUl9WWCk7CiAJaWYgKGZwc2NyICYgKEZQU0NSX1ZYU05BTiB8IEZQU0NSX1ZYSVNJIHwgRlBTQ1JfVlhJREkgfAogCQkgICAgIEZQU0NSX1ZYWkRaIHwgRlBTQ1JfVlhJTVogfCBGUFNDUl9WWFZDIHwKIAkJICAgICBGUFNDUl9WWFNPRlQgfCBGUFNDUl9WWFNRUlQgfCBGUFNDUl9WWENWSSkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWNyZnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tY3Jmcy5jCmluZGV4IDQxYmEyNDcuLmU5NDhkNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tY3Jmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tY3Jmcy5jCkBAIC0yLDcgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbWNyZnModTMyICpjY3IsIHUzMiBjcmZELCB1MzIgY3JmUykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tZmZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWZmcy5jCmluZGV4IGIwZTIxMDYuLjU1MjZjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tZmZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYwpAQCAtMiw3ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG1mZnModTMyICpmckQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IwLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IwLmMKaW5kZXggZDMwNjIzNS4uYmM5ODU1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjAuYwpAQCAtMiw3ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG10ZnNiMChpbnQgY3JiRCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYwppbmRleCAyZTk0ODcwLi5mZTZlZDVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IxLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMS5jCkBAIC0yLDcgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbXRmc2IxKGludCBjcmJEKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2YuYwppbmRleCA0ODAxNGQ4Li5kYmNlOTJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2YuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2YuYwpAQCAtMiwxMiArMiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbXRmc2YodW5zaWduZWQgaW50IEZNLCB1MzIgKmZyQikKIHsKIAl1MzIgbWFzazsKKwl1MzIgZnBzY3I7CiAKIAlpZiAoRk0gPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0zNyw2ICszOSwyMiBAQAogCV9fRlBVX0ZQU0NSICY9IH4obWFzayk7CiAJX19GUFVfRlBTQ1IgfD0gKGZyQlsxXSAmIG1hc2spOwogCisJX19GUFVfRlBTQ1IgJj0gfihGUFNDUl9WWCk7CisJaWYgKF9fRlBVX0ZQU0NSICYgKEZQU0NSX1ZYU05BTiB8IEZQU0NSX1ZYSVNJIHwgRlBTQ1JfVlhJREkgfAorCQkgICAgIEZQU0NSX1ZYWkRaIHwgRlBTQ1JfVlhJTVogfCBGUFNDUl9WWFZDIHwKKwkJICAgICBGUFNDUl9WWFNPRlQgfCBGUFNDUl9WWFNRUlQgfCBGUFNDUl9WWENWSSkpCisJCV9fRlBVX0ZQU0NSIHw9IEZQU0NSX1ZYOworCisJZnBzY3IgPSBfX0ZQVV9GUFNDUjsKKwlmcHNjciAmPSB+KEZQU0NSX0ZFWCk7CisJaWYgKCgoZnBzY3IgJiBGUFNDUl9WWCkgJiYgKGZwc2NyICYgRlBTQ1JfVkUpKSB8fAorCSAgICAoKGZwc2NyICYgRlBTQ1JfT1gpICYmIChmcHNjciAmIEZQU0NSX09FKSkgfHwKKwkgICAgKChmcHNjciAmIEZQU0NSX1VYKSAmJiAoZnBzY3IgJiBGUFNDUl9VRSkpIHx8CisJICAgICgoZnBzY3IgJiBGUFNDUl9aWCkgJiYgKGZwc2NyICYgRlBTQ1JfWkUpKSB8fAorCSAgICAoKGZwc2NyICYgRlBTQ1JfWFgpICYmIChmcHNjciAmIEZQU0NSX1hFKSkpCisJCWZwc2NyIHw9IEZQU0NSX0ZFWDsKKwlfX0ZQVV9GUFNDUiA9IGZwc2NyOworCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlMDJ4ICVwOiAlMDhseFxuIiwgX19mdW5jX18sIEZNLCBmckIsIF9fRlBVX0ZQU0NSKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmaS5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmaS5jCmluZGV4IDAzMWUyMDAuLmZkMmFjYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZmkuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMKQEAgLTIsNyArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtdGZzZmkodW5zaWduZWQgaW50IGNyZkQsIHVuc2lnbmVkIGludCBJTU0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMS5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyZmE5NS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0gKiBCYXNpYyBvbmUtd29yZCBmcmFjdGlvbiBkZWNsYXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLgotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8xKFgpCV9GUF9XX1RZUEUgWCMjX2YKLSNkZWZpbmUgX0ZQX0ZSQUNfQ09QWV8xKEQsUykJKEQjI19mID0gUyMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX1NFVF8xKFgsSSkJKFgjI19mID0gSSkKLSNkZWZpbmUgX0ZQX0ZSQUNfSElHSF8xKFgpCShYIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfTE9XXzEoWCkJKFgjI19mKQotI2RlZmluZSBfRlBfRlJBQ19XT1JEXzEoWCx3KQkoWCMjX2YpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQURESV8xKFgsSSkJKFgjI19mICs9IEkpCi0jZGVmaW5lIF9GUF9GUkFDX1NMTF8xKFgsTikJCQlcCi0gIGRvIHsJCQkJCQlcCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKE4pICYmIChOKSA9PSAxKQlcCi0gICAgICBYIyNfZiArPSBYIyNfZjsJCQkJXAotICAgIGVsc2UJCQkJCVwKLSAgICAgIFgjI19mIDw8PSAoTik7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfU1JMXzEoWCxOKQkoWCMjX2YgPj49IE4pCi0KLS8qIFJpZ2h0IHNoaWZ0IHdpdGggc3RpY2t5LWxzYi4gICovCi0jZGVmaW5lIF9GUF9GUkFDX1NSU18xKFgsTixzeikJX19GUF9GUkFDX1NSU18xKFgjI19mLCBOLCBzeikKLQotI2RlZmluZSBfX0ZQX0ZSQUNfU1JTXzEoWCxOLHN6KQkJCQkJCVwKLSAgIChYID0gKFggPj4gKE4pIHwgKF9fYnVpbHRpbl9jb25zdGFudF9wKE4pICYmIChOKSA9PSAxCQlcCi0JCSAgICAgPyBYICYgMSA6IChYIDw8IChfRlBfV19UWVBFX1NJWkUgLSAoTikpKSAhPSAwKSkpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQUREXzEoUixYLFkpCShSIyNfZiA9IFgjI19mICsgWSMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX1NVQl8xKFIsWCxZKQkoUiMjX2YgPSBYIyNfZiAtIFkjI19mKQotI2RlZmluZSBfRlBfRlJBQ19DTFpfMSh6LCBYKQlfX0ZQX0NMWih6LCBYIyNfZikKLQotLyogUHJlZGljYXRlcyAqLwotI2RlZmluZSBfRlBfRlJBQ19ORUdQXzEoWCkJKChfRlBfV1NfVFlQRSlYIyNfZiA8IDApCi0jZGVmaW5lIF9GUF9GUkFDX1pFUk9QXzEoWCkJKFgjI19mID09IDApCi0jZGVmaW5lIF9GUF9GUkFDX09WRVJQXzEoZnMsWCkJKFgjI19mICYgX0ZQX09WRVJGTE9XXyMjZnMpCi0jZGVmaW5lIF9GUF9GUkFDX0VRXzEoWCwgWSkJKFgjI19mID09IFkjI19mKQotI2RlZmluZSBfRlBfRlJBQ19HRV8xKFgsIFkpCShYIyNfZiA+PSBZIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfR1RfMShYLCBZKQkoWCMjX2YgPiBZIyNfZikKLQotI2RlZmluZSBfRlBfWkVST0ZSQUNfMQkJMAotI2RlZmluZSBfRlBfTUlORlJBQ18xCQkxCi0KLS8qCi0gKiBVbnBhY2sgdGhlIHJhdyBiaXRzIG9mIGEgbmF0aXZlIGZwIHZhbHVlLiAgRG8gbm90IGNsYXNzaWZ5IG9yCi0gKiBub3JtYWxpemUgdGhlIGRhdGEuCi0gKi8KLQotI2RlZmluZSBfRlBfVU5QQUNLX1JBV18xKGZzLCBYLCB2YWwpCQkJCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87IF9mbG8uZmx0ID0gKHZhbCk7CQlcCi0JCQkJCQkJCVwKLSAgICBYIyNfZiA9IF9mbG8uYml0cy5mcmFjOwkJCQkJXAotICAgIFgjI19lID0gX2Zsby5iaXRzLmV4cDsJCQkJCVwKLSAgICBYIyNfcyA9IF9mbG8uYml0cy5zaWduOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBSZXBhY2sgdGhlIHJhdyBiaXRzIG9mIGEgbmF0aXZlIGZwIHZhbHVlLgotICovCi0KLSNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzEoZnMsIHZhbCwgWCkJCQkJXAotICBkbyB7CQkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsJCQkJCVwKLQkJCQkJCQkJXAotICAgIF9mbG8uYml0cy5mcmFjID0gWCMjX2Y7CQkJCQlcCi0gICAgX2Zsby5iaXRzLmV4cCAgPSBYIyNfZTsJCQkJCVwKLSAgICBfZmxvLmJpdHMuc2lnbiA9IFgjI19zOwkJCQkJXAotCQkJCQkJCQlcCi0gICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE11bHRpcGxpY2F0aW9uIGFsZ29yaXRobXM6Ci0gKi8KLQotLyogQmFzaWMuICBBc3N1bWluZyB0aGUgaG9zdCB3b3JkIHNpemUgaXMgPj0gMipGUkFDQklUUywgd2UgY2FuIGRvIHRoZQotICAgbXVsdGlwbGljYXRpb24gaW1tZWRpYXRlbHkuICAqLwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF8xX2ltbShmcywgUiwgWCwgWSkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBSIyNfZiA9IFgjI19mICogWSMjX2Y7CQkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAotICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKLSAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzEoUiwgX0ZQX1dGUkFDQklUU18jI2ZzLTEsIDIqX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICB9IHdoaWxlICgwKQotCi0vKiBHaXZlbiBhIDFXICogMVcgPT4gMlcgcHJpbWl0aXZlLCBkbyB0aGUgZXh0ZW5kZWQgbXVsdGlwbGljYXRpb24uICAqLwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF8xX3dpZGUoZnMsIFIsIFgsIFksIGRvaXQpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF9aX2YwLCBfWl9mMTsJCQkJCQlcCi0gICAgZG9pdChfWl9mMSwgX1pfZjAsIFgjI19mLCBZIyNfZik7CQkJCQlcCi0gICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCi0gICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAotICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfMihfWiwgX0ZQX1dGUkFDQklUU18jI2ZzLTEsIDIqX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICAgIFIjI19mID0gX1pfZjA7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogRmluYWxseSwgYSBzaW1wbGUgd2lkZW5pbmcgbXVsdGlwbHkgYWxnb3JpdGhtLiAgV2hhdCBmdW4hICAqLwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF8xX2hhcmQoZnMsIFIsIFgsIFkpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF94aCwgX3hsLCBfeWgsIF95bCwgX3pfZjAsIF96X2YxLCBfYV9mMCwgX2FfZjE7CQlcCi0JCQkJCQkJCQlcCi0gICAgLyogc3BsaXQgdGhlIHdvcmRzIGluIGhhbGYgKi8JCQkJCVwKLSAgICBfeGggPSBYIyNfZiA+PiAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCQkJXAotICAgIF94bCA9IFgjI19mICYgKCgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUvMikpIC0gMSk7CQlcCi0gICAgX3loID0gWSMjX2YgPj4gKF9GUF9XX1RZUEVfU0laRS8yKTsJCQkJCVwKLSAgICBfeWwgPSBZIyNfZiAmICgoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpKSAtIDEpOwkJXAotCQkJCQkJCQkJXAotICAgIC8qIG11bHRpcGx5IHRoZSBwaWVjZXMgKi8JCQkJCQlcCi0gICAgX3pfZjAgPSBfeGwgKiBfeWw7CQkJCQkJCVwKLSAgICBfYV9mMCA9IF94aCAqIF95bDsJCQkJCQkJXAotICAgIF9hX2YxID0gX3hsICogX3loOwkJCQkJCQlcCi0gICAgX3pfZjEgPSBfeGggKiBfeWg7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiByZWFzc2VtYmxlIGludG8gdHdvIGZ1bGwgd29yZHMgKi8JCQkJXAotICAgIGlmICgoX2FfZjAgKz0gX2FfZjEpIDwgX2FfZjEpCQkJCQlcCi0gICAgICBfel9mMSArPSAoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUvMik7CQkJXAotICAgIF9hX2YxID0gX2FfZjAgPj4gKF9GUF9XX1RZUEVfU0laRS8yKTsJCQkJXAotICAgIF9hX2YwID0gX2FfZjAgPDwgKF9GUF9XX1RZUEVfU0laRS8yKTsJCQkJXAotICAgIF9GUF9GUkFDX0FERF8yKF96LCBfeiwgX2EpOwkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBub3JtYWxpemUgKi8JCQkJCQkJXAotICAgIF9GUF9GUkFDX1NSU18yKF96LCBfRlBfV0ZSQUNCSVRTXyMjZnMgLSAxLCAyKl9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgICBSIyNfZiA9IF96X2YwOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIERpdmlzaW9uIGFsZ29yaXRobXM6Ci0gKi8KLQotLyogQmFzaWMuICBBc3N1bWluZyB0aGUgaG9zdCB3b3JkIHNpemUgaXMgPj0gMipGUkFDQklUUywgd2UgY2FuIGRvIHRoZQotICAgZGl2aXNpb24gaW1tZWRpYXRlbHkuICBHaXZlIHRoaXMgbWFjcm8gZWl0aGVyIF9GUF9ESVZfSEVMUF9pbW0gZm9yCi0gICBDIHByaW1pdGl2ZXMgb3IgX0ZQX0RJVl9IRUxQX2xkaXYgZm9yIHRoZSBJU08gZnVuY3Rpb24uICBXaGljaCB5b3UKLSAgIGNob29zZSB3aWxsIGRlcGVuZCBvbiB3aGF0IHRoZSBjb21waWxlciBkb2VzIHdpdGggZGl2cmVtNC4gICovCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUXzFfaW1tKGZzLCBSLCBYLCBZLCBkb2l0KQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF9xLCBfcjsJCQkJCVwKLSAgICBYIyNfZiA8PD0gKFgjI19mIDwgWSMjX2YJCQkJXAotCSAgICAgICA/IFIjI19lLS0sIF9GUF9XRlJBQ0JJVFNfIyNmcwkJXAotCSAgICAgICA6IF9GUF9XRlJBQ0JJVFNfIyNmcyAtIDEpOwkJXAotICAgIGRvaXQoX3EsIF9yLCBYIyNfZiwgWSMjX2YpOwkJCQlcCi0gICAgUiMjX2YgPSBfcSB8IChfciAhPSAwKTsJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBHQ0MncyBsb25nbG9uZy5oIGRlZmluZXMgYSAyVyAvIDFXID0+ICgxVywxVykgcHJpbWl0aXZlIHVkaXZfcXJubmQKLSAgIHRoYXQgbWF5IGJlIHVzZWZ1bCBpbiB0aGlzIHNpdHVhdGlvbi4gIFRoaXMgZmlyc3QgaXMgZm9yIGEgcHJpbWl0aXZlCi0gICB0aGF0IHJlcXVpcmVzIG5vcm1hbGl6YXRpb24sIHRoZSBzZWNvbmQgZm9yIG9uZSB0aGF0IGRvZXMgbm90LiAgTG9vawotICAgZm9yIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiB0byB0ZWxsIHdoaWNoIHlvdXIgbWFjaGluZSBuZWVkcy4gICovCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUXzFfdWRpdl9ub3JtKGZzLCBSLCBYLCBZKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfbmgsIF9ubCwgX3EsIF9yOwkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSBZIC0tIGkuZS4gbWFrZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0LiAgKi8JXAotICAgIFkjI19mIDw8PSBfRlBfV0ZSQUNYQklUU18jI2ZzIC0gMTsJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBTaGlmdCBYIG9wIGNvcnJlc3BvbmRpbmdseSBoaWdoLCB0aGF0IGlzLCB1cCBvbmUgZnVsbCB3b3JkLiAgKi8JXAotICAgIGlmIChYIyNfZiA8PSBZIyNfZikJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfbmwgPSAwOwkJCQkJCQlcCi0JX25oID0gWCMjX2Y7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlSIyNfZSsrOwkJCQkJCQlcCi0JX25sID0gWCMjX2YgPDwgKF9GUF9XX1RZUEVfU0laRS0xKTsJCQkJXAotCV9uaCA9IFgjI19mID4+IDE7CQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICAJCQkJCQkJCQlcCi0gICAgdWRpdl9xcm5uZChfcSwgX3IsIF9uaCwgX25sLCBZIyNfZik7CQkJCVwKLSAgICBSIyNfZiA9IF9xIHwgKF9yICE9IDApOwkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRElWX01FQVRfMV91ZGl2KGZzLCBSLCBYLCBZKQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF9uaCwgX25sLCBfcSwgX3I7CQkJXAotICAgIGlmIChYIyNfZiA8IFkjI19mKQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0JUiMjX2UtLTsJCQkJCVwKLQlfbmwgPSBYIyNfZiA8PCBfRlBfV0ZSQUNCSVRTXyMjZnM7CQlcCi0JX25oID0gWCMjX2YgPj4gX0ZQX1dGUkFDWEJJVFNfIyNmczsJCVwKLSAgICAgIH0JCQkJCQkJXAotICAgIGVsc2UJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLQlfbmwgPSBYIyNfZiA8PCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gMSk7CVwKLQlfbmggPSBYIyNfZiA+PiAoX0ZQX1dGUkFDWEJJVFNfIyNmcyArIDEpOwlcCi0gICAgICB9CQkJCQkJCVwKLSAgICB1ZGl2X3Fybm5kKF9xLCBfciwgX25oLCBfbmwsIFkjI19mKTsJCVwKLSAgICBSIyNfZiA9IF9xIHwgKF9yICE9IDApOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIFNxdWFyZSByb290IGFsZ29yaXRobXM6Ci0gKiBXZSBoYXZlIGp1c3Qgb25lIHJpZ2h0IG5vdywgbWF5YmUgTmV3dG9uIGFwcHJveGltYXRpb24KLSAqIHNob3VsZCBiZSBhZGRlZCBmb3IgdGhvc2UgbWFjaGluZXMgd2hlcmUgZGl2aXNpb24gaXMgZmFzdC4KLSAqLwotCi0jZGVmaW5lIF9GUF9TUVJUX01FQVRfMShSLCBTLCBULCBYLCBxKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgd2hpbGUgKHEpCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0gICAgICAgIFQjI19mID0gUyMjX2YgKyBxOwkJCQlcCi0gICAgICAgIGlmIChUIyNfZiA8PSBYIyNfZikJCQkJXAotICAgICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgICBTIyNfZiA9IFQjI19mICsgcTsJCQkJXAotICAgICAgICAgICAgWCMjX2YgLT0gVCMjX2Y7CQkJCVwKLSAgICAgICAgICAgIFIjI19mICs9IHE7CQkJCQlcCi0gICAgICAgICAgfQkJCQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0xMXzEoWCwgMSk7CQkJCVwKLSAgICAgICAgcSA+Pj0gMTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKgotICogQXNzZW1ibHkvZGlzYXNzZW1ibHkgZm9yIGNvbnZlcnRpbmcgdG8vZnJvbSBpbnRlZ3JhbCB0eXBlcy4KLSAqIE5vIHNoaWZ0aW5nIG9yIG92ZXJmbG93IGhhbmRsZWQgaGVyZS4KLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0FTU0VNQkxFXzEociwgWCwgcnNpemUpCShyID0gWCMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX0RJU0FTU0VNQkxFXzEoWCwgciwgcnNpemUpCShYIyNfZiA9IHIpCi0KLQotLyoKLSAqIENvbnZlcnQgRlAgdmFsdWVzIGJldHdlZW4gd29yZCBzaXplcwotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8xXzEoZGZzLCBzZnMsIEQsIFMpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBEIyNfZiA9IFMjI19mOwkJCQkJCQlcCi0gICAgaWYgKF9GUF9XRlJBQ0JJVFNfIyNzZnMgPiBfRlBfV0ZSQUNCSVRTXyMjZGZzKQkJCVwKLSAgICAgIF9GUF9GUkFDX1NSU18xKEQsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzLV9GUF9XRlJBQ0JJVFNfIyNkZnMpLAlcCi0JCSAgICAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7CQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICBEIyNfZiA8PD0gX0ZQX1dGUkFDQklUU18jI2RmcyAtIF9GUF9XRlJBQ0JJVFNfIyNzZnM7CQlcCi0gIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMi5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2ZjE3Yy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qCi0gKiBCYXNpYyB0d28td29yZCBmcmFjdGlvbiBkZWNsYXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLgotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8yKFgpCV9GUF9XX1RZUEUgWCMjX2YwLCBYIyNfZjEKLSNkZWZpbmUgX0ZQX0ZSQUNfQ09QWV8yKEQsUykJKEQjI19mMCA9IFMjI19mMCwgRCMjX2YxID0gUyMjX2YxKQotI2RlZmluZSBfRlBfRlJBQ19TRVRfMihYLEkpCV9fRlBfRlJBQ19TRVRfMihYLCBJKQotI2RlZmluZSBfRlBfRlJBQ19ISUdIXzIoWCkJKFgjI19mMSkKLSNkZWZpbmUgX0ZQX0ZSQUNfTE9XXzIoWCkJKFgjI19mMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfV09SRF8yKFgsdykJKFgjI19mIyN3KQotCi0jZGVmaW5lIF9GUF9GUkFDX1NMTF8yKFgsTikJCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKChOKSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEpIAkJCVwKLSAgICAgICAgICB7CQkJCQkJCQlcCi0gICAgICAgICAgICBYIyNfZjEgPSBYIyNfZjEgKyBYIyNfZjEgKyAoKChfRlBfV1NfVFlQRSkoWCMjX2YwKSkgPCAwKTsJXAotICAgICAgICAgICAgWCMjX2YwICs9IFgjI19mMDsJCQkJCQlcCi0gICAgICAgICAgfQkJCQkJCQkJXAotICAgICAgICBlbHNlCQkJCQkJCQlcCi0gICAgICAgICAgewkJCQkJCQkJXAotCSAgICBYIyNfZjEgPSBYIyNfZjEgPDwgKE4pIHwgWCMjX2YwID4+IChfRlBfV19UWVBFX1NJWkUgLSAoTikpOwlcCi0JICAgIFgjI19mMCA8PD0gKE4pOwkJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfZjEgPSBYIyNfZjAgPDwgKChOKSAtIF9GUF9XX1RZUEVfU0laRSk7CQkJXAotCVgjI19mMCA9IDA7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfU1JMXzIoWCxOKQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoKE4pIDwgX0ZQX1dfVFlQRV9TSVpFKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2YwID0gWCMjX2YwID4+IChOKSB8IFgjI19mMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKTsJXAotCVgjI19mMSA+Pj0gKE4pOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2YwID0gWCMjX2YxID4+ICgoTikgLSBfRlBfV19UWVBFX1NJWkUpOwkJCVwKLQlYIyNfZjEgPSAwOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBSaWdodCBzaGlmdCB3aXRoIHN0aWNreS1sc2IuICAqLwotI2RlZmluZSBfRlBfRlJBQ19TUlNfMihYLE4sc3opCQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmICgoTikgPCBfRlBfV19UWVBFX1NJWkUpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfZjAgPSAoWCMjX2YxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAoTikpIHwgWCMjX2YwID4+IChOKSB8CVwKLQkJICAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEJCQlcCi0JCSAgID8gWCMjX2YwICYgMQkJCQkJCVwKLQkJICAgOiAoWCMjX2YwIDw8IChfRlBfV19UWVBFX1NJWkUgLSAoTikpKSAhPSAwKSk7CVwKLQlYIyNfZjEgPj49IChOKTsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19mMCA9IChYIyNfZjEgPj4gKChOKSAtIF9GUF9XX1RZUEVfU0laRSkgfAkJCVwKLQkgICAgICAgICAgKCgoWCMjX2YxIDw8ICgyICogX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKSkgfAkJXAotCQkgICBYIyNfZjApICE9IDApKTsJCQkJCVwKLQlYIyNfZjEgPSAwOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERElfMihYLEkpIFwKLSAgX19GUF9GUkFDX0FERElfMihYIyNfZjEsIFgjI19mMCwgSSkKLQotI2RlZmluZSBfRlBfRlJBQ19BRERfMihSLFgsWSkgXAotICBfX0ZQX0ZSQUNfQUREXzIoUiMjX2YxLCBSIyNfZjAsIFgjI19mMSwgWCMjX2YwLCBZIyNfZjEsIFkjI19mMCkKLQotI2RlZmluZSBfRlBfRlJBQ19TVUJfMihSLFgsWSkgXAotICBfX0ZQX0ZSQUNfU1VCXzIoUiMjX2YxLCBSIyNfZjAsIFgjI19mMSwgWCMjX2YwLCBZIyNfZjEsIFkjI19mMCkKLQotI2RlZmluZSBfRlBfRlJBQ19DTFpfMihSLFgpCVwKLSAgZG8gewkJCQlcCi0gICAgaWYgKFgjI19mMSkJCQlcCi0gICAgICBfX0ZQX0NMWihSLFgjI19mMSk7CVwKLSAgICBlbHNlIAkJCVwKLSAgICB7CQkJCVwKLSAgICAgIF9fRlBfQ0xaKFIsWCMjX2YwKTsJXAotICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkU7CVwKLSAgICB9CQkJCVwKLSAgfSB3aGlsZSgwKQotCi0vKiBQcmVkaWNhdGVzICovCi0jZGVmaW5lIF9GUF9GUkFDX05FR1BfMihYKQkoKF9GUF9XU19UWVBFKVgjI19mMSA8IDApCi0jZGVmaW5lIF9GUF9GUkFDX1pFUk9QXzIoWCkJKChYIyNfZjEgfCBYIyNfZjApID09IDApCi0jZGVmaW5lIF9GUF9GUkFDX09WRVJQXzIoZnMsWCkJKFgjI19mMSAmIF9GUF9PVkVSRkxPV18jI2ZzKQotI2RlZmluZSBfRlBfRlJBQ19FUV8yKFgsIFkpCShYIyNfZjEgPT0gWSMjX2YxICYmIFgjI19mMCA9PSBZIyNfZjApCi0jZGVmaW5lIF9GUF9GUkFDX0dUXzIoWCwgWSkJXAotICAoKFgjI19mMSA+IFkjI19mMSkgfHwgKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID4gWSMjX2YwKSkKLSNkZWZpbmUgX0ZQX0ZSQUNfR0VfMihYLCBZKQlcCi0gICgoWCMjX2YxID4gWSMjX2YxKSB8fCAoWCMjX2YxID09IFkjI19mMSAmJiBYIyNfZjAgPj0gWSMjX2YwKSkKLQotI2RlZmluZSBfRlBfWkVST0ZSQUNfMgkJMCwgMAotI2RlZmluZSBfRlBfTUlORlJBQ18yCQkwLCAxCi0KLS8qCi0gKiBJbnRlcm5hbHMKLSAqLwotCi0jZGVmaW5lIF9fRlBfRlJBQ19TRVRfMihYLEkxLEkwKQkoWCMjX2YwID0gSTAsIFgjI19mMSA9IEkxKQotCi0jZGVmaW5lIF9fRlBfQ0xaXzIoUiwgeGgsIHhsKQlcCi0gIGRvIHsJCQkJXAotICAgIGlmICh4aCkJCQlcCi0gICAgICBfX0ZQX0NMWihSLHhsKTsJCVwKLSAgICBlbHNlIAkJCVwKLSAgICB7CQkJCVwKLSAgICAgIF9fRlBfQ0xaKFIseGwpOwkJXAotICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkU7CVwKLSAgICB9CQkJCVwKLSAgfSB3aGlsZSgwKQotCi0jaWYgMAotCi0jaWZuZGVmIF9fRlBfRlJBQ19BRERJXzIKLSNkZWZpbmUgX19GUF9GUkFDX0FERElfMih4aCwgeGwsIGkpIFwKLSAgKHhoICs9ICgoeGwgKz0gaSkgPCBpKSkKLSNlbmRpZgotI2lmbmRlZiBfX0ZQX0ZSQUNfQUREXzIKLSNkZWZpbmUgX19GUF9GUkFDX0FERF8yKHJoLCBybCwgeGgsIHhsLCB5aCwgeWwpIFwKLSAgKHJoID0geGggKyB5aCArICgocmwgPSB4bCArIHlsKSA8IHhsKSkKLSNlbmRpZgotI2lmbmRlZiBfX0ZQX0ZSQUNfU1VCXzIKLSNkZWZpbmUgX19GUF9GUkFDX1NVQl8yKHJoLCBybCwgeGgsIHhsLCB5aCwgeWwpIFwKLSAgKHJoID0geGggLSB5aCAtICgocmwgPSB4bCAtIHlsKSA+IHhsKSkKLSNlbmRpZgotCi0jZWxzZQotCi0jdW5kZWYgX19GUF9GUkFDX0FERElfMgotI2RlZmluZSBfX0ZQX0ZSQUNfQURESV8yKHhoLCB4bCwgaSkJYWRkX3NzYWFhYSh4aCwgeGwsIHhoLCB4bCwgMCwgaSkKLSN1bmRlZiBfX0ZQX0ZSQUNfQUREXzIKLSNkZWZpbmUgX19GUF9GUkFDX0FERF8yCQkJYWRkX3NzYWFhYQotI3VuZGVmIF9fRlBfRlJBQ19TVUJfMgotI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzIJCQlzdWJfZGRtbXNzCi0KLSNlbmRpZgotCi0vKgotICogVW5wYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4gIERvIG5vdCBjbGFzc2lmeSBvcgotICogbm9ybWFsaXplIHRoZSBkYXRhLgotICovCi0KLSNkZWZpbmUgX0ZQX1VOUEFDS19SQVdfMihmcywgWCwgdmFsKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsJXAotCQkJCQkJCVwKLSAgICBYIyNfZjAgPSBfZmxvLmJpdHMuZnJhYzA7CQkJCVwKLSAgICBYIyNfZjEgPSBfZmxvLmJpdHMuZnJhYzE7CQkJCVwKLSAgICBYIyNfZSAgPSBfZmxvLmJpdHMuZXhwOwkJCQlcCi0gICAgWCMjX3MgID0gX2Zsby5iaXRzLnNpZ247CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogUmVwYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4KLSAqLwotCi0jZGVmaW5lIF9GUF9QQUNLX1JBV18yKGZzLCB2YWwsIFgpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOwkJCQlcCi0JCQkJCQkJXAotICAgIF9mbG8uYml0cy5mcmFjMCA9IFgjI19mMDsJCQkJXAotICAgIF9mbG8uYml0cy5mcmFjMSA9IFgjI19mMTsJCQkJXAotICAgIF9mbG8uYml0cy5leHAgICA9IFgjI19lOwkJCQlcCi0gICAgX2Zsby5iaXRzLnNpZ24gID0gWCMjX3M7CQkJCVwKLQkJCQkJCQlcCi0gICAgKHZhbCkgPSBfZmxvLmZsdDsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogTXVsdGlwbGljYXRpb24gYWxnb3JpdGhtczoKLSAqLwotCi0vKiBHaXZlbiBhIDFXICogMVcgPT4gMlcgcHJpbWl0aXZlLCBkbyB0aGUgZXh0ZW5kZWQgbXVsdGlwbGljYXRpb24uICAqLwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF8yX3dpZGUoZnMsIFIsIFgsIFksIGRvaXQpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19ERUNMXzQoX3opOyBfRlBfRlJBQ19ERUNMXzIoX2IpOyBfRlBfRlJBQ19ERUNMXzIoX2MpOwlcCi0JCQkJCQkJCQlcCi0gICAgZG9pdChfRlBfRlJBQ19XT1JEXzQoX3osMSksIF9GUF9GUkFDX1dPUkRfNChfeiwwKSwgWCMjX2YwLCBZIyNfZjApOyBcCi0gICAgZG9pdChfYl9mMSwgX2JfZjAsIFgjI19mMCwgWSMjX2YxKTsJCQkJCVwKLSAgICBkb2l0KF9jX2YxLCBfY19mMCwgWCMjX2YxLCBZIyNfZjApOwkJCQkJXAotICAgIGRvaXQoX0ZQX0ZSQUNfV09SRF80KF96LDMpLCBfRlBfRlJBQ19XT1JEXzQoX3osMiksIFgjI19mMSwgWSMjX2YxKTsgXAotCQkJCQkJCQkJXAotICAgIF9fRlBfRlJBQ19BRERfNChfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksX0ZQX0ZSQUNfV09SRF80KF96LDApLAlcCi0JCSAgICAwLCBfYl9mMSwgX2JfZjAsIDAsCQkJCQlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksX0ZQX0ZSQUNfV09SRF80KF96LDApKTsJXAotICAgIF9fRlBfRlJBQ19BRERfNChfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksX0ZQX0ZSQUNfV09SRF80KF96LDApLAlcCi0JCSAgICAwLCBfY19mMSwgX2NfZjAsIDAsCQkJCQlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMyksX0ZQX0ZSQUNfV09SRF80KF96LDIpLAlcCi0JCSAgICBfRlBfRlJBQ19XT1JEXzQoX3osMSksX0ZQX0ZSQUNfV09SRF80KF96LDApKTsJXAotCQkJCQkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAotICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKLSAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzQoX3osIF9GUF9XRlJBQ0JJVFNfIyNmcy0xLCAyKl9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgICBSIyNfZjAgPSBfRlBfRlJBQ19XT1JEXzQoX3osMCk7CQkJCQlcCi0gICAgUiMjX2YxID0gX0ZQX0ZSQUNfV09SRF80KF96LDEpOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBUaGlzIG5leHQgbWFjcm8gYXBwZWFycyB0byBiZSB0b3RhbGx5IGJyb2tlbi4gRm9ydHVuYXRlbHkgbm93aGVyZQotICogc2VlbXMgdG8gdXNlIGl0IDotPiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIGRlZmluZSBfels0XSBidXQKLSAqIHRoZW4gdXNlIGl0IGluIF9GUF9GUkFDX1NSU180LCB3aGljaCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzCi0gKiBfel9mW25dIHdoaWNoIHdpbGwgY2F1c2UgYW4gZXJyb3IuIFRoZSBmaXggcHJvYmFibHkgaW52b2x2ZXMKLSAqIGRlY2xhcmluZyBpdCB3aXRoIF9GUF9GUkFDX0RFQ0xfNCwgc2VlIHByZXZpb3VzIG1hY3JvLiAtLSBQTU0gMDIvMTk5OAotICovCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF8yX2dtcChmcywgUiwgWCwgWSkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF94WzJdLCBfeVsyXSwgX3pbNF07CQkJCQlcCi0gICAgX3hbMF0gPSBYIyNfZjA7IF94WzFdID0gWCMjX2YxOwkJCQkJXAotICAgIF95WzBdID0gWSMjX2YwOyBfeVsxXSA9IFkjI19mMTsJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBtcG5fbXVsX24oX3osIF94LCBfeSwgMik7CQkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAotICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKLSAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzQoX3osIF9GUF9XRlJBQ0JJVFMjI19mcy0xLCAyKl9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgICBSIyNfZjAgPSBfelswXTsJCQkJCQkJXAotICAgIFIjI19mMSA9IF96WzFdOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIERpdmlzaW9uIGFsZ29yaXRobXM6Ci0gKiBUaGlzIHNlZW1zIHRvIGJlIGdpdmluZyBtZSBkaWZmaWN1bHRpZXMgLS0gUE1NCi0gKiBMb29rLCBOZXRCU0Qgc2VlbXMgdG8gYmUgYWJsZSB0byBjb21tZW50IGFsZ29yaXRobXMuIENhbid0IHlvdT8KLSAqIEkndmUgdGhyb3duIHByaW50a3MgYXQgdGhlIHByb2JsZW0uCi0gKiBUaGlzIG5vdyBhcHBlYXJzIHRvIHdvcmssIGJ1dCBJIHN0aWxsIGRvbid0IHJlYWxseSBrbm93IHdoeS4KLSAqIEFsc28sIEkgZG9uJ3QgdGhpbmsgdGhlIHJlc3VsdCBpcyBwcm9wZXJseSBub3JtYWxpc2VkLi4uCi0gKi8KLQotI2RlZmluZSBfRlBfRElWX01FQVRfMl91ZGl2XzY0KGZzLCBSLCBYLCBZKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgZXh0ZXJuIHZvaWQgX2ZwX3VkaXZtb2R0aTQoX0ZQX1dfVFlQRSBxWzJdLCBfRlBfV19UWVBFIHJbMl0sCVwKLQkJCSAgICAgICBfRlBfV19UWVBFIG4xLCBfRlBfV19UWVBFIG4wLAkJXAotCQkJICAgICAgIF9GUF9XX1RZUEUgZDEsIF9GUF9XX1RZUEUgZDApOwkJXAotICAgIF9GUF9XX1RZUEUgX25fZjMsIF9uX2YyLCBfbl9mMSwgX25fZjAsIF9yX2YxLCBfcl9mMDsJCVwKLSAgICBfRlBfV19UWVBFIF9xX2YxLCBfcV9mMCwgX21fZjEsIF9tX2YwOwkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfcm1lbVsyXSwgX3FtZW1bMl07CQkJCQlcCi0gICAgLyogSSB0aGluayB0aGlzIGNoZWNrIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgbm9ybWFsaXNlZC4gICBcCi0gICAgICogQXNzdW1pbmcgWCxZIG5vcm1hbGlzZWQgKGllIGluIFsxLjAsMi4wKSkgWC9ZIHdpbGwgYmUgaW4gICAgICAgICBcCi0gICAgICogWzAuNSwyLjApLiBGdXJ0aGVybW9yZSwgaXQgd2lsbCBiZSBsZXNzIHRoYW4gMS4wIGlmZiBYIDwgWS4gICAgICBcCi0gICAgICogSW4gdGhpcyBjYXNlIHdlIHR3ZWFrIHRoaW5ncy4gKHRoaXMgaXMgYmFzZWQgb24gY29tbWVudHMgaW4gICAgICBcCi0gICAgICogdGhlIE5ldEJTRCBGUFUgZW11bGF0aW9uIGNvZGUuICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICogV2Uga25vdyBYLFkgYXJlIG5vcm1hbGlzZWQgYmVjYXVzZSB3ZSBlbnN1cmUgdGhpcyBhcyBwYXJ0IG9mICAgICBcCi0gICAgICogdGhlIHVucGFja2luZyBwcm9jZXNzLiAtLSBQTU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICovCQkJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19HVF8yKFgsIFkpKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0vKglSIyNfZSsrOyAqLwkJCQkJCQlcCi0JX25fZjMgPSBYIyNfZjEgPj4gMTsJCQkJCQlcCi0JX25fZjIgPSBYIyNfZjEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpIHwgWCMjX2YwID4+IDE7CQlcCi0JX25fZjEgPSBYIyNfZjAgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJCVwKLQlfbl9mMCA9IDA7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlSIyNfZS0tOwkJCQkJCQlcCi0JX25fZjMgPSBYIyNfZjE7CQkJCQkJCVwKLQlfbl9mMiA9IFgjI19mMDsJCQkJCQkJXAotCV9uX2YxID0gX25fZjAgPSAwOwkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogTm9ybWFsaXplLCBpLmUuIG1ha2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSAJCVwKLSAgICAgICBkZW5vbWluYXRvciBzZXQuICBDSEFOR0VEOiAtIDEgdG8gbm90aGluZyAtLSBQTU0gKi8JCVwKLSAgICBfRlBfRlJBQ19TTExfMihZLCBfRlBfV0ZSQUNYQklUU18jI2ZzIC8qIC0xICovKTsJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogRG8gdGhlIDI1Ni8xMjggYml0IGRpdmlzaW9uIGdpdmVuIHRoZSAxMjgtYml0IF9mcF91ZGl2bW9kdGY0IAlcCi0gICAgICAgcHJpbWl0aXZlIHNuYWdnZWQgZnJvbSBsaWJnY2MyLmMuICAqLwkJCQlcCi0JCQkJCQkJCQlcCi0gICAgX2ZwX3VkaXZtb2R0aTQoX3FtZW0sIF9ybWVtLCBfbl9mMywgX25fZjIsIDAsIFkjI19mMSk7CQlcCi0gICAgX3FfZjEgPSBfcW1lbVswXTsJCQkJCQkJXAotICAgIHVtdWxfcHBtbShfbV9mMSwgX21fZjAsIF9xX2YxLCBZIyNfZjApOwkJCQlcCi0gICAgX3JfZjEgPSBfcm1lbVswXTsJCQkJCQkJXAotICAgIF9yX2YwID0gX25fZjE7CQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfR1RfMihfbSwgX3IpKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX3FfZjEtLTsJCQkJCQkJXAotCV9GUF9GUkFDX0FERF8yKF9yLCBfciwgWSk7CQkJCQlcCi0JaWYgKF9GUF9GUkFDX0dFXzIoX3IsIFkpICYmIF9GUF9GUkFDX0dUXzIoX20sIF9yKSkJCVwKLQkgIHsJCQkJCQkJCVwKLQkgICAgX3FfZjEtLTsJCQkJCQkJXAotCSAgICBfRlBfRlJBQ19BRERfMihfciwgX3IsIFkpOwkJCQkJXAotCSAgfQkJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TVUJfMihfciwgX3IsIF9tKTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgX2ZwX3VkaXZtb2R0aTQoX3FtZW0sIF9ybWVtLCBfcl9mMSwgX3JfZjAsIDAsIFkjI19mMSk7CQlcCi0gICAgX3FfZjAgPSBfcW1lbVswXTsJCQkJCQkJXAotICAgIHVtdWxfcHBtbShfbV9mMSwgX21fZjAsIF9xX2YwLCBZIyNfZjApOwkJCQlcCi0gICAgX3JfZjEgPSBfcm1lbVswXTsJCQkJCQkJXAotICAgIF9yX2YwID0gX25fZjA7CQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfR1RfMihfbSwgX3IpKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX3FfZjAtLTsJCQkJCQkJXAotCV9GUF9GUkFDX0FERF8yKF9yLCBfciwgWSk7CQkJCQlcCi0JaWYgKF9GUF9GUkFDX0dFXzIoX3IsIFkpICYmIF9GUF9GUkFDX0dUXzIoX20sIF9yKSkJCVwKLQkgIHsJCQkJCQkJCVwKLQkgICAgX3FfZjAtLTsJCQkJCQkJXAotCSAgICBfRlBfRlJBQ19BRERfMihfciwgX3IsIFkpOwkJCQkJXAotCSAgfQkJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TVUJfMihfciwgX3IsIF9tKTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgUiMjX2YxID0gX3FfZjE7CQkJCQkJCVwKLSAgICBSIyNfZjAgPSBfcV9mMCB8ICgoX3JfZjEgfCBfcl9mMCkgIT0gMCk7CQkJCVwKLSAgICAvKiBhZGp1c3Qgc28gYW5zd2VyIGlzIG5vcm1hbGl6ZWQgYWdhaW4uIEknbSBub3Qgc3VyZSB3aGF0IHRoZSAJXAotICAgICAqIGZpbmFsIHN6IHBhcmFtIHNob3VsZCBiZS4gSW4gcHJhY3RpY2UgaXQncyBuZXZlciB1c2VkIHNpbmNlICAgICAgXAotICAgICAqIE4gaXMgMSB3aGljaCBpcyBhbHdheXMgZ29pbmcgdG8gYmUgPCBfRlBfV19UWVBFX1NJWkUuLi4JCVwKLSAgICAgKi8JCQkJCQkJCQlcCi0gICAgLyogX0ZQX0ZSQUNfU1JTXzIoUiwxLF9GUF9XRlJBQ0JJVFNfIyNmcyk7CSovCQkJXAotICB9IHdoaWxlICgwKQotCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUXzJfZ21wKGZzLCBSLCBYLCBZKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3hbNF0sIF95WzJdLCBfels0XTsJCQkJCVwKLSAgICBfeVswXSA9IFkjI19mMDsgX3lbMV0gPSBZIyNfZjE7CQkJCQlcCi0gICAgX3hbMF0gPSBfeFszXSA9IDA7CQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfR1RfMihYLCBZKSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVIjI19lKys7CQkJCQkJCVwKLQlfeFsxXSA9IChYIyNfZjAgPDwgKF9GUF9XRlJBQ0JJVFMtMSAtIF9GUF9XX1RZUEVfU0laRSkgfAlcCi0JCSBYIyNfZjEgPj4gKF9GUF9XX1RZUEVfU0laRSAtCQkJCVwKLQkJCSAgICAoX0ZQX1dGUkFDQklUUy0xIC0gX0ZQX1dfVFlQRV9TSVpFKSkpOwlcCi0JX3hbMl0gPSBYIyNfZjEgPDwgKF9GUF9XRlJBQ0JJVFMtMSAtIF9GUF9XX1RZUEVfU0laRSk7CQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX3hbMV0gPSAoWCMjX2YwIDw8IChfRlBfV0ZSQUNCSVRTIC0gX0ZQX1dfVFlQRV9TSVpFKSB8CQlcCi0JCSBYIyNfZjEgPj4gKF9GUF9XX1RZUEVfU0laRSAtCQkJCVwKLQkJCSAgICAoX0ZQX1dGUkFDQklUUyAtIF9GUF9XX1RZUEVfU0laRSkpKTsJXAotCV94WzJdID0gWCMjX2YxIDw8IChfRlBfV0ZSQUNCSVRTIC0gX0ZQX1dfVFlQRV9TSVpFKTsJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgKHZvaWQpIG1wbl9kaXZyZW0gKF96LCAwLCBfeCwgNCwgX3ksIDIpOwkJCQlcCi0gICAgUiMjX2YxID0gX3pbMV07CQkJCQkJCVwKLSAgICBSIyNfZjAgPSBfelswXSB8ICgoX3hbMF0gfCBfeFsxXSkgIT0gMCk7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogU3F1YXJlIHJvb3QgYWxnb3JpdGhtczoKLSAqIFdlIGhhdmUganVzdCBvbmUgcmlnaHQgbm93LCBtYXliZSBOZXd0b24gYXBwcm94aW1hdGlvbgotICogc2hvdWxkIGJlIGFkZGVkIGZvciB0aG9zZSBtYWNoaW5lcyB3aGVyZSBkaXZpc2lvbiBpcyBmYXN0LgotICovCi0KLSNkZWZpbmUgX0ZQX1NRUlRfTUVBVF8yKFIsIFMsIFQsIFgsIHEpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB3aGlsZSAocSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLSAgICAgICAgVCMjX2YxID0gUyMjX2YxICsgcTsJCQkJXAotICAgICAgICBpZiAoVCMjX2YxIDw9IFgjI19mMSkJCQkJXAotICAgICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgICBTIyNfZjEgPSBUIyNfZjEgKyBxOwkJCVwKLSAgICAgICAgICAgIFgjI19mMSAtPSBUIyNfZjE7CQkJCVwKLSAgICAgICAgICAgIFIjI19mMSArPSBxOwkJCQlcCi0gICAgICAgICAgfQkJCQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0xMXzIoWCwgMSk7CQkJCVwKLSAgICAgICAgcSA+Pj0gMTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJXAotICAgIHEgPSAoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCVwKLSAgICB3aGlsZSAocSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLSAgICAgICAgVCMjX2YwID0gUyMjX2YwICsgcTsJCQkJXAotICAgICAgICBUIyNfZjEgPSBTIyNfZjE7CQkJCVwKLSAgICAgICAgaWYgKFQjI19mMSA8IFgjI19mMSB8fCAJCQkJXAotICAgICAgICAgICAgKFQjI19mMSA9PSBYIyNfZjEgJiYgVCMjX2YwIDwgWCMjX2YwKSkJXAotICAgICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgICBTIyNfZjAgPSBUIyNfZjAgKyBxOwkJCVwKLSAgICAgICAgICAgIGlmICgoKF9GUF9XU19UWVBFKVQjI19mMCkgPCAwICYmCQlcCi0gICAgICAgICAgICAgICAgKChfRlBfV1NfVFlQRSlTIyNfZjApID49IDApCQlcCi0gICAgICAgICAgICAgIFMjI19mMSsrOwkJCQkJXAotICAgICAgICAgICAgX0ZQX0ZSQUNfU1VCXzIoWCwgWCwgVCk7CQkJXAotICAgICAgICAgICAgUiMjX2YwICs9IHE7CQkJCVwKLSAgICAgICAgICB9CQkJCQkJXAotICAgICAgICBfRlBfRlJBQ19TTExfMihYLCAxKTsJCQkJXAotICAgICAgICBxID4+PSAxOwkJCQkJXAotICAgICAgfQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIEFzc2VtYmx5L2Rpc2Fzc2VtYmx5IGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gaW50ZWdyYWwgdHlwZXMuCi0gKiBObyBzaGlmdGluZyBvciBvdmVyZmxvdyBoYW5kbGVkIGhlcmUuCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19BU1NFTUJMRV8yKHIsIFgsIHJzaXplKQlcCi0gIGRvIHsJCQkJCQlcCi0gICAgaWYgKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSkJCVwKLSAgICAgIHIgPSBYIyNfZjA7CQkJCVwKLSAgICBlbHNlCQkJCQlcCi0gICAgICB7CQkJCQkJXAotCXIgPSBYIyNfZjE7CQkJCVwKLQlyIDw8PSBfRlBfV19UWVBFX1NJWkU7CQkJXAotCXIgKz0gWCMjX2YwOwkJCQlcCi0gICAgICB9CQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0RJU0FTU0VNQkxFXzIoWCwgciwgcnNpemUpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBYIyNfZjAgPSByOwkJCQkJCQkJXAotICAgIFgjI19mMSA9IChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiBfRlBfV19UWVBFX1NJWkUpOwlcCi0gIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBDb252ZXJ0IEZQIHZhbHVlcyBiZXR3ZWVuIHdvcmQgc2l6ZXMKLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfMV8yKGRmcywgc2ZzLCBELCBTKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzIoUywgKF9GUF9XRlJBQ0JJVFNfIyNzZnMgLSBfRlBfV0ZSQUNCSVRTXyMjZGZzKSwJXAotCQkgICBfRlBfV0ZSQUNCSVRTXyMjc2ZzKTsJCQkJXAotICAgIEQjI19mID0gUyMjX2YwOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8yXzEoZGZzLCBzZnMsIEQsIFMpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBEIyNfZjAgPSBTIyNfZjsJCQkJCQkJXAotICAgIEQjI19mMSA9IDA7CQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0xMXzIoRCwgKF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzKSk7CVwKLSAgfSB3aGlsZSAoMCkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTQuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC00LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YWU2MjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0vKgotICogQmFzaWMgZm91ci13b3JkIGZyYWN0aW9uIGRlY2xhcmF0aW9uIGFuZCBtYW5pcHVsYXRpb24uCi0gKgotICogV2hlbiBhZGRpbmcgcXVhZHdvcmQgc3VwcG9ydCBmb3IgMzIgYml0IG1hY2hpbmVzLCB3ZSBuZWVkCi0gKiB0byBiZSBhIGxpdHRsZSBjYXJlZnVsIGFzIGRvdWJsZSBtdWx0aXBseSB1c2VzIHNvbWUgb2YgdGhlc2UKLSAqIG1hY3JvczogKGluIG9wLTIuaCkKLSAqIF9GUF9NVUxfTUVBVF8yX3dpZGUoKSB1c2VzIF9GUF9GUkFDX0RFQ0xfNCwgX0ZQX0ZSQUNfV09SRF80LAotICogX0ZQX0ZSQUNfQUREXzQsIF9GUF9GUkFDX1NSU180Ci0gKiBfRlBfTVVMX01FQVRfMl9nbXAoKSB1c2VzIF9GUF9GUkFDX1NSU180IChhbmQgc2hvdWxkIHVzZQotICogX0ZQX0ZSQUNfREVDTF80OiBpdCBhcHBlYXJzIHRvIGJlIGJyb2tlbiBhbmQgaXMgbm90IHVzZWQKLSAqIGFueXdoZXJlIGFueXdheS4gKQotICoKLSAqIEkndmUgbm93IGZpeGVkIGFsbCB0aGUgbWFjcm9zIHRoYXQgd2VyZSBoZXJlIGZyb20gdGhlIHNwYXJjNjQgY29kZS4KLSAqIFsqbm9uZSogb2YgdGhlIHNoaWZ0IG1hY3JvcyB3ZXJlIGNvcnJlY3QhXSAtLSBQTU0gMDIvMTk5OAotICoKLSAqIFRoZSBvbmx5IHF1YWR3b3JkIHN0dWZmIHRoYXQgcmVtYWlucyB0byBiZSBjb2RlZCBpczoKLSAqIDEpIHRoZSBjb252ZXJzaW9uIHRvL2Zyb20gaW50cywgd2hpY2ggcmVxdWlyZXMKLSAqIHRoYXQgd2UgY2hlY2sgKGluIG9wLWNvbW1vbi5oKSB0aGF0IHRoZSBmb2xsb3dpbmcgZG8gdGhlIHJpZ2h0IHRoaW5nCi0gKiBmb3IgcXVhZHdvcmRzOiBfRlBfVE9fSU5UKFEsNCxyLFgscnN6LHJzZyksIF9GUF9GUk9NX0lOVChRLDQsWCxyLHJzLHJ0KQotICogMikgbXVsdGlwbHksIGRpdmlkZSBhbmQgc3FydCwgd2hpY2ggcmVxdWlyZToKLSAqIF9GUF9NVUxfTUVBVF80XyooUixYLFkpLCBfRlBfRElWX01FQVRfNF8qKFIsWCxZKSwgX0ZQX1NRUlRfTUVBVF80KFIsUyxULFgscSksCi0gKiBUaGlzIGFsc28gbmVlZHMgX0ZQX01VTF9NRUFUX1EgYW5kIF9GUF9ESVZfTUVBVF9RIHRvIGJlIGRlZmluZWQgdG8KLSAqIHNvbWUgc3VpdGFibGUgX0ZQX01VTF9NRUFUXzRfKiBtYWNyb3MgaW4gc2ZwLW1hY2hpbmUuaC4KLSAqIFt3ZSdyZSBmcmVlIHRvIGNob29zZSB3aGF0ZXZlciBGUF9NVUxfTUVBVF80XyogbWFjcm9zIHdlIG5lZWQgZm9yCi0gKiB0aGVzZTsgdGhleSBhcmUgdXNlZCBub3doZXJlIGVsc2UuIF0KLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0RFQ0xfNChYKQlfRlBfV19UWVBFIFgjI19mWzRdCi0jZGVmaW5lIF9GUF9GUkFDX0NPUFlfNChELFMpCQkJXAotICAoRCMjX2ZbMF0gPSBTIyNfZlswXSwgRCMjX2ZbMV0gPSBTIyNfZlsxXSwJXAotICAgRCMjX2ZbMl0gPSBTIyNfZlsyXSwgRCMjX2ZbM10gPSBTIyNfZlszXSkKLS8qIFRoZSBfRlBfRlJBQ19TRVRfbihYLEkpIG1hY3JvIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBhbm90aGVyCi0gKiBtYWNybyBzdWNoIGFzIF9GUF9aRVJPRlJBQ19uIHdoaWNoIHJldHVybnMgbiBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLgotICogVGhlIHJlc3VsdCBpcyB0aGF0IHdlIGdldCBhbiBleHBhbnNpb24gb2YgX19GUF9GUkFDX1NFVF9uKFgsSTAsSTEsSTIsSTMpCi0gKiB3aGljaCBqdXN0IGFzc2lnbnMgdGhlIEluIHZhbHVlcyB0byB0aGUgYXJyYXkgWCMjX2ZbXS4KLSAqIFRoaXMgaXMgd2h5IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBkb2Vzbid0IGFwcGVhciB0byBtYXRjaAotICogYXQgZmlyc3QgZ2xhbmNlLi4uICAgICAgLS0gUE1NCi0gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzQoWCxJKQlfX0ZQX0ZSQUNfU0VUXzQoWCwgSSkKLSNkZWZpbmUgX0ZQX0ZSQUNfSElHSF80KFgpCShYIyNfZlszXSkKLSNkZWZpbmUgX0ZQX0ZSQUNfTE9XXzQoWCkJKFgjI19mWzBdKQotI2RlZmluZSBfRlBfRlJBQ19XT1JEXzQoWCx3KQkoWCMjX2Zbd10pCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfU0xMXzQoWCxOKQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfSV9UWVBFIF91cCwgX2Rvd24sIF9za2lwLCBfaTsJCQkJCVwKLSAgICBfc2tpcCA9IChOKSAvIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfdXAgPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX2Rvd24gPSBfRlBfV19UWVBFX1NJWkUgLSBfdXA7CQkJCQlcCi0gICAgZm9yIChfaSA9IDM7IF9pID4gX3NraXA7IC0tX2kpCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSBYIyNfZltfaS1fc2tpcF0gPDwgX3VwIHwgWCMjX2ZbX2ktX3NraXAtMV0gPj4gX2Rvd247CVwKLS8qIGJ1Z2ZpeGVkOiB3YXMgWCMjX2ZbX2ldIDw8PSBfdXA7ICAtLSBQTU0gMDIvMTk5OCAqLyAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZltfaV0gPSBYIyNfZlswXSA8PCBfdXA7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBmb3IgKC0tX2k7IF9pID49IDA7IC0tX2kpCQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gMDsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBUaGlzIG9uZSB3YXMgYnJva2VuIHRvbyAqLwotI2RlZmluZSBfRlBfRlJBQ19TUkxfNChYLE4pCQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9JX1RZUEUgX3VwLCBfZG93biwgX3NraXAsIF9pOwkJCQkJXAotICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF9kb3duID0gKE4pICUgX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF91cCA9IF9GUF9XX1RZUEVfU0laRSAtIF9kb3duOwkJCQkJXAotICAgIGZvciAoX2kgPSAwOyBfaSA8IDMtX3NraXA7ICsrX2kpCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF0gPj4gX2Rvd24gfCBYIyNfZltfaStfc2tpcCsxXSA8PCBfdXA7CVwKLSAgICBYIyNfZltfaV0gPSBYIyNfZlszXSA+PiBfZG93bjsJCQkgICAgICAgICAJXAotICAgIGZvciAoKytfaTsgX2kgPCA0OyArK19pKQkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKiBSaWdodCBzaGlmdCB3aXRoIHN0aWNreS1sc2IuCi0gKiBXaGF0IHRoaXMgYWN0dWFsbHkgbWVhbnMgaXMgdGhhdCB3ZSBkbyBhIHN0YW5kYXJkIHJpZ2h0LXNoaWZ0LAotICogYnV0IHRoYXQgaWYgYW55IG9mIHRoZSBiaXRzIHRoYXQgZmFsbCBvZmYgdGhlIHJpZ2h0IGhhbmQgc2lkZQotICogd2VyZSBvbmUgdGhlbiB3ZSBhbHdheXMgc2V0IHRoZSBMU2JpdC4KLSAqLwotI2RlZmluZSBfRlBfRlJBQ19TUlNfNChYLE4sc2l6ZSkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfSV9UWVBFIF91cCwgX2Rvd24sIF9za2lwLCBfaTsJCQkJCVwKLSAgICBfRlBfV19UWVBFIF9zOwkJCQkJCQlcCi0gICAgX3NraXAgPSAoTikgLyBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX2Rvd24gPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX3VwID0gX0ZQX1dfVFlQRV9TSVpFIC0gX2Rvd247CQkJCQlcCi0gICAgZm9yIChfcyA9IF9pID0gMDsgX2kgPCBfc2tpcDsgKytfaSkJCQkJCVwKLSAgICAgIF9zIHw9IFgjI19mW19pXTsJCQkJCQkJXAotICAgIF9zIHw9IFgjI19mW19pXSA8PCBfdXA7CQkJCQkJXAotLyogcyBpcyBub3cgIT0gMCBpZiB3ZSB3YW50IHRvIHNldCB0aGUgTFNiaXQgKi8gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoX2kgPSAwOyBfaSA8IDMtX3NraXA7ICsrX2kpCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSBYIyNfZltfaStfc2tpcF0gPj4gX2Rvd24gfCBYIyNfZltfaStfc2tpcCsxXSA8PCBfdXA7CVwKLSAgICBYIyNfZltfaV0gPSBYIyNfZlszXSA+PiBfZG93bjsJCQkJCVwKLSAgICBmb3IgKCsrX2k7IF9pIDwgNDsgKytfaSkJCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSAwOwkJCQkJCQlcCi0gICAgLyogZG9uJ3QgZml4IHRoZSBMU0IgdW50aWwgdGhlIHZlcnkgZW5kIHdoZW4gd2UncmUgc3VyZSBmWzBdIGlzIHN0YWJsZSAqLyBcCi0gICAgWCMjX2ZbMF0gfD0gKF9zICE9IDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQUREXzQoUixYLFkpCQkJCQkJXAotICBfX0ZQX0ZSQUNfQUREXzQoUiMjX2ZbM10sIFIjI19mWzJdLCBSIyNfZlsxXSwgUiMjX2ZbMF0sCQlcCi0JCSAgWCMjX2ZbM10sIFgjI19mWzJdLCBYIyNfZlsxXSwgWCMjX2ZbMF0sCQlcCi0JCSAgWSMjX2ZbM10sIFkjI19mWzJdLCBZIyNfZlsxXSwgWSMjX2ZbMF0pCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfU1VCXzQoUixYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19GUF9GUkFDX1NVQl80KFIjI19mWzNdLCBSIyNfZlsyXSwgUiMjX2ZbMV0sIFIjI19mWzBdLAkJXAotCQkgIFgjI19mWzNdLCBYIyNfZlsyXSwgWCMjX2ZbMV0sIFgjI19mWzBdLAkJXAotCQkgIFkjI19mWzNdLCBZIyNfZlsyXSwgWSMjX2ZbMV0sIFkjI19mWzBdKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERElfNChYLEkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fRlBfRlJBQ19BRERJXzQoWCMjX2ZbM10sIFgjI19mWzJdLCBYIyNfZlsxXSwgWCMjX2ZbMF0sIEkpCi0KLSNkZWZpbmUgX0ZQX1pFUk9GUkFDXzQgIDAsMCwwLDAKLSNkZWZpbmUgX0ZQX01JTkZSQUNfNCAgIDAsMCwwLDEKLQotI2RlZmluZSBfRlBfRlJBQ19aRVJPUF80KFgpICAgICAoKFgjI19mWzBdIHwgWCMjX2ZbMV0gfCBYIyNfZlsyXSB8IFgjI19mWzNdKSA9PSAwKQotI2RlZmluZSBfRlBfRlJBQ19ORUdQXzQoWCkgICAgICAoKF9GUF9XU19UWVBFKVgjI19mWzNdIDwgMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfT1ZFUlBfNChmcyxYKSAgKFgjI19mWzBdICYgX0ZQX09WRVJGTE9XXyMjZnMpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfRVFfNChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotIChYIyNfZlswXSA9PSBZIyNfZlswXSAmJiBYIyNfZlsxXSA9PSBZIyNfZlsxXSAgICAgICAgICBcCi0gICYmIFgjI19mWzJdID09IFkjI19mWzJdICYmIFgjI19mWzNdID09IFkjI19mWzNdKQotCi0jZGVmaW5lIF9GUF9GUkFDX0dUXzQoWCxZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAoWCMjX2ZbM10gPiBZIyNfZlszXSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoWCMjX2ZbM10gPT0gWSMjX2ZbM10gJiYgKFgjI19mWzJdID4gWSMjX2ZbMl0gfHwgICAgICBcCi0gICAoWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgKFgjI19mWzFdID4gWSMjX2ZbMV0gfHwgICAgIFwKLSAgICAoWCMjX2ZbMV0gPT0gWSMjX2ZbMV0gJiYgWCMjX2ZbMF0gPiBZIyNfZlswXSkgICAgICAgXAotICAgKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfR0VfNChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotIChYIyNfZlszXSA+IFkjI19mWzNdIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChYIyNfZlszXSA9PSBZIyNfZlszXSAmJiAoWCMjX2ZbMl0gPiBZIyNfZlsyXSB8fCAgICAgIFwKLSAgIChYIyNfZlsyXSA9PSBZIyNfZlsyXSAmJiAoWCMjX2ZbMV0gPiBZIyNfZlsxXSB8fCAgICAgXAotICAgIChYIyNfZlsxXSA9PSBZIyNfZlsxXSAmJiBYIyNfZlswXSA+PSBZIyNfZlswXSkgICAgICBcCi0gICApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICkKLQotCi0jZGVmaW5lIF9GUF9GUkFDX0NMWl80KFIsWCkgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoWCMjX2ZbM10pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX0ZQX0NMWihSLFgjI19mWzNdKTsgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoWCMjX2ZbMl0pICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19GUF9DTFooUixYIyNfZlsyXSk7ICAgICAgICAgICBcCi0gICAgICAgIFIgKz0gX0ZQX1dfVFlQRV9TSVpFOyAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChYIyNfZlsxXSkgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX0ZQX0NMWihSLFgjI19mWzJdKTsgICAgICAgICAgIFwKLSAgICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkUqMjsgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fRlBfQ0xaKFIsWCMjX2ZbMF0pOyAgICAgICAgICAgXAotICAgICAgICBSICs9IF9GUF9XX1RZUEVfU0laRSozOyAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUoMCkKLQotCi0jZGVmaW5lIF9GUF9VTlBBQ0tfUkFXXzQoZnMsIFgsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOyBfZmxvLmZsdCA9ICh2YWwpOyAgICAgICAgCVwKLSAgICBYIyNfZlswXSA9IF9mbG8uYml0cy5mcmFjMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbMV0gPSBfZmxvLmJpdHMuZnJhYzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mWzJdID0gX2Zsby5iaXRzLmZyYWMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZlszXSA9IF9mbG8uYml0cy5mcmFjMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2UgID0gX2Zsby5iaXRzLmV4cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19zICA9IF9mbG8uYml0cy5zaWduOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfUEFDS19SQVdfNChmcywgdmFsLCBYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsJCQkJCVwKLSAgICBfZmxvLmJpdHMuZnJhYzAgPSBYIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2Zsby5iaXRzLmZyYWMxID0gWCMjX2ZbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9mbG8uYml0cy5mcmFjMiA9IFgjI19mWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmxvLmJpdHMuZnJhYzMgPSBYIyNfZlszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2Zsby5iaXRzLmV4cCAgID0gWCMjX2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9mbG8uYml0cy5zaWduICA9IFgjI19zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAodmFsKSA9IF9mbG8uZmx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogSW50ZXJuYWxzCi0gKi8KLQotI2RlZmluZSBfX0ZQX0ZSQUNfU0VUXzQoWCxJMyxJMixJMSxJMCkJCQkJCVwKLSAgKFgjI19mWzNdID0gSTMsIFgjI19mWzJdID0gSTIsIFgjI19mWzFdID0gSTEsIFgjI19mWzBdID0gSTApCi0KLSNpZm5kZWYgX19GUF9GUkFDX0FERF80Ci0jZGVmaW5lIF9fRlBfRlJBQ19BRERfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJXAotICBkbyB7CQkJCQkJCQlcCi0gICAgaW50IF9jMSwgX2MyLCBfYzM7CQkJCQkJXAotICAgIHIwID0geDAgKyB5MDsJCQkJCQlcCi0gICAgX2MxID0gcjAgPCB4MDsJCQkJCQlcCi0gICAgcjEgPSB4MSArIHkxOwkJCQkJCVwKLSAgICBfYzIgPSByMSA8IHgxOwkJCQkJCVwKLSAgICByMSArPSBfYzE7CQkJCQkJCVwKLSAgICBfYzIgfD0gcjEgPCBfYzE7CQkJCQkJXAotICAgIHIyID0geDIgKyB5MjsJCQkJCQlcCi0gICAgX2MzID0gcjIgPCB4MjsJCQkJCQlcCi0gICAgcjIgKz0gX2MyOwkJCQkJCQlcCi0gICAgX2MzIHw9IHIyIDwgX2MyOwkJCQkJCVwKLSAgICByMyA9IHgzICsgeTMgKyBfYzM7CQkJCQkJXAotICB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgX19GUF9GUkFDX1NVQl80Ci0jZGVmaW5lIF9fRlBfRlJBQ19TVUJfNChyMyxyMixyMSxyMCx4Myx4Mix4MSx4MCx5Myx5Mix5MSx5MCkJXAotICBkbyB7CQkJCQkJCQlcCi0gICAgaW50IF9jMSwgX2MyLCBfYzM7CQkJCQkJXAotICAgIHIwID0geDAgLSB5MDsJCQkJCQlcCi0gICAgX2MxID0gcjAgPiB4MDsJCQkJCQlcCi0gICAgcjEgPSB4MSAtIHkxOwkJCQkJCVwKLSAgICBfYzIgPSByMSA+IHgxOwkJCQkJCVwKLSAgICByMSAtPSBfYzE7CQkJCQkJCVwKLSAgICBfYzIgfD0gcjEgPiBfYzE7CQkJCQkJXAotICAgIHIyID0geDIgLSB5MjsJCQkJCQlcCi0gICAgX2MzID0gcjIgPiB4MjsJCQkJCQlcCi0gICAgcjIgLT0gX2MyOwkJCQkJCQlcCi0gICAgX2MzIHw9IHIyID4gX2MyOwkJCQkJCVwKLSAgICByMyA9IHgzIC0geTMgLSBfYzM7CQkJCQkJXAotICB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgX19GUF9GUkFDX0FERElfNAotLyogSSBhbHdheXMgd2FudGVkIHRvIGJlIGEgbGlzcCBwcm9ncmFtbWVyIDotPiAqLwotI2RlZmluZSBfX0ZQX0ZSQUNfQURESV80KHgzLHgyLHgxLHgwLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoeDMgKz0gKCh4MiArPSAoKHgxICs9ICgoeDAgKz0gaSkgPCB4MCkpIDwgeDEpIDwgeDIpKSkKLSNlbmRpZgotCi0vKiBDb252ZXJ0IEZQIHZhbHVlcyBiZXR3ZWVuIHdvcmQgc2l6ZXMuIFRoaXMgYXBwZWFycyB0byBiZSBtb3JlCi0gKiBjb21wbGljYXRlZCB0aGFuIEknZCBoYXZlIGV4cGVjdGVkIGl0IHRvIGJlLCBzbyB0aGVzZSBtaWdodCBiZQotICogd3JvbmcuLi4gVGhlc2UgbWFjcm9zIGFyZSBpbiBhbnkgY2FzZSBzb21ld2hhdCBib2d1cyBiZWNhdXNlIHRoZXkKLSAqIHVzZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHZhcmlvdXMgRlJBQ19uIHZhcmlhYmxlcyBsb29rIGxpa2UKLSAqIGludGVybmFsbHkgW2VnLCB0aGF0IDIgd29yZCB2YXJzIGFyZSBYX2YwIGFuZCB4X2YxXS4gQnV0IHNvIGRvCi0gKiB0aGUgb25lcyBpbiBvcC0yLmggYW5kIG9wLTEuaC4KLSAqLwotI2RlZmluZSBfRlBfRlJBQ19DT05WXzFfNChkZnMsIHNmcywgRCwgUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBfRlBfRlJBQ19TUlNfNChTLCAoX0ZQX1dGUkFDQklUU18jI3NmcyAtIF9GUF9XRlJBQ0JJVFNfIyNkZnMpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZiA9IFMjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzJfNChkZnMsIHNmcywgRCwgUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBfRlBfRlJBQ19TUlNfNChTLCAoX0ZQX1dGUkFDQklUU18jI3NmcyAtIF9GUF9XRlJBQ0JJVFNfIyNkZnMpLCAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZjAgPSBTIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2YxID0gUyMjX2ZbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLS8qIEFzc2VtYmx5L2Rpc2Fzc2VtYmx5IGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gaW50ZWdyYWwgdHlwZXMuCi0gKiBObyBzaGlmdGluZyBvciBvdmVyZmxvdyBoYW5kbGVkIGhlcmUuCi0gKi8KLS8qIFB1dCB0aGUgRlAgdmFsdWUgWCBpbnRvIHIsIHdoaWNoIGlzIGFuIGludGVnZXIgb2Ygc2l6ZSByc2l6ZS4gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfQVNTRU1CTEVfNChyLCBYLCByc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPSBYIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChyc2l6ZSA8PSAyKl9GUF9XX1RZUEVfU0laRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPSBYIyNfZlsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPDw9IF9GUF9XX1RZUEVfU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgKz0gWCMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIC8qIEknbSBmZWVsaW5nIGxhenkgc28gd2UgZGVhbCB3aXRoIGludCA9PSAzd29yZHMgKGltcGxhdXNpYmxlKSovIFwKLSAgICAgIC8qIGFuZCBpbnQgPT0gNHdvcmRzIGFzIGEgc2luZ2xlIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgIHIgPSBYIyNfZlszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPDw9IF9GUF9XX1RZUEVfU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgKz0gWCMjX2ZbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPDw9IF9GUF9XX1RZUEVfU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgKz0gWCMjX2ZbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgPDw9IF9GUF9XX1RZUEVfU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHIgKz0gWCMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLyogIk5vIGRpc2Fzc2VtYmxlIE51bWJlciBGaXZlISIgKi8KLS8qIG1vdmUgYW4gaW50ZWdlciBvZiBzaXplIHJzaXplIGludG8gWCdzIGZyYWN0aW9uYWwgcGFydC4gV2UgcmVseSBvbgotICogdGhlIF9mW10gYXJyYXkgY29uc2lzdGluZyBvZiB3b3JkcyBvZiBzaXplIF9GUF9XX1RZUEVfU0laRSB0byBhdm9pZAotICogaGF2aW5nIHRvIG1hc2sgdGhlIHZhbHVlcyB3ZSBzdG9yZSBpbnRvIGl0LgotICovCi0jZGVmaW5lIF9GUF9GUkFDX0RJU0FTU0VNQkxFXzQoWCwgciwgcnNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbMF0gPSByOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbMV0gPSAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFID8gMCA6IHIgPj4gX0ZQX1dfVFlQRV9TSVpFKTsgICBcCi0gICAgWCMjX2ZbMl0gPSAocnNpemUgPD0gMipfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiAyKl9GUF9XX1RZUEVfU0laRSk7IFwKLSAgICBYIyNfZlszXSA9IChyc2l6ZSA8PSAzKl9GUF9XX1RZUEVfU0laRSA/IDAgOiByID4+IDMqX0ZQX1dfVFlQRV9TSVpFKTsgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfNF8xKGRmcywgc2ZzLCBELCBTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mWzBdID0gUyMjX2Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mWzFdID0gRCMjX2ZbMl0gPSBEIyNfZlszXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIF9GUF9GUkFDX1NMTF80KEQsIChfRlBfV0ZSQUNCSVRTXyMjZGZzIC0gX0ZQX1dGUkFDQklUU18jI3NmcykpOyAgICBcCi0gICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfNF8yKGRmcywgc2ZzLCBELCBTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mWzBdID0gUyMjX2YwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mWzFdID0gUyMjX2YxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mWzJdID0gRCMjX2ZbM10gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIF9GUF9GUkFDX1NMTF80KEQsIChfRlBfV0ZSQUNCSVRTXyMjZGZzIC0gX0ZQX1dGUkFDQklUU18jI3NmcykpOyAgICBcCi0gICB9IHdoaWxlICgwKQotCi0vKiBGSVhNRSEgVGhpcyBoYXMgdG8gYmUgd3JpdHRlbiAqLwotI2RlZmluZSBfRlBfU1FSVF9NRUFUXzQoUiwgUywgVCwgWCwgcSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC1jb21tb24uaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC1jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiODJiNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotI2RlZmluZSBfRlBfREVDTCh3YywgWCkJCQlcCi0gIF9GUF9JX1RZUEUgWCMjX2MsIFgjI19zLCBYIyNfZTsJXAotICBfRlBfRlJBQ19ERUNMXyMjd2MoWCkKLQotLyoKLSAqIEZpbmlzaCB0cnVlbHkgdW5wYWNraW5nIGEgbmF0aXZlIGZwIHZhbHVlIGJ5IGNsYXNzaWZ5aW5nIHRoZSBraW5kCi0gKiBvZiBmcCB2YWx1ZSBhbmQgbm9ybWFsaXppbmcgYm90aCB0aGUgZXhwb25lbnQgYW5kIHRoZSBmcmFjdGlvbi4KLSAqLwotCi0jZGVmaW5lIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKGZzLCB3YywgWCkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0gIHN3aXRjaCAoWCMjX2UpCQkJCQkJCVwKLSAgewkJCQkJCQkJCVwKLSAgZGVmYXVsdDoJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19ISUdIXyMjd2MoWCkgfD0gX0ZQX0lNUExCSVRfIyNmczsJCQkJXAotICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIF9GUF9XT1JLQklUUyk7CQkJCQlcCi0gICAgWCMjX2UgLT0gX0ZQX0VYUEJJQVNfIyNmczsJCQkJCQlcCi0gICAgWCMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKLSAgICBicmVhazsJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgY2FzZSAwOgkJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJCQkJCVwKLSAgICAgIFgjI19jID0gRlBfQ0xTX1pFUk87CQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JLyogYSBkZW5vcm1hbGl6ZWQgbnVtYmVyICovCQkJCQlcCi0JX0ZQX0lfVFlQRSBfc2hpZnQ7CQkJCQkJXAotCV9GUF9GUkFDX0NMWl8jI3djKF9zaGlmdCwgWCk7CQkJCQlcCi0JX3NoaWZ0IC09IF9GUF9GUkFDWEJJVFNfIyNmczsJCQkJCVwKLQlfRlBfRlJBQ19TTExfIyN3YyhYLCAoX3NoaWZ0K19GUF9XT1JLQklUUykpOwkJCVwKLQlYIyNfZSAtPSBfRlBfRVhQQklBU18jI2ZzIC0gMSArIF9zaGlmdDsJCQkJXAotCVgjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGJyZWFrOwkJCQkJCQkJXAotCQkJCQkJCQkJXAotICBjYXNlIF9GUF9FWFBNQVhfIyNmczoJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJCQkJCVwKLSAgICAgIFgjI19jID0gRlBfQ0xTX0lORjsJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgLyogd2UgZG9uJ3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHNpZ25hbGluZyBhbmQgcXVpZXQgbmFucyAqLwlcCi0gICAgICBYIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJXAotICAgIGJyZWFrOwkJCQkJCQkJXAotICB9CQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi0vKgotICogQmVmb3JlIHBhY2tpbmcgdGhlIGJpdHMgYmFjayBpbnRvIHRoZSBuYXRpdmUgZnAgcmVzdWx0LCB0YWtlIGNhcmUKLSAqIG9mIHN1Y2ggbXVuZGFuZSB0aGluZ3MgYXMgcm91bmRpbmcgYW5kIG92ZXJmbG93LiAgQWxzbywgZm9yIHNvbWUKLSAqIGtpbmRzIG9mIGZwIHZhbHVlcywgdGhlIG9yaWdpbmFsIHBhcnRzIG1heSBub3QgaGF2ZSBiZWVuIGZ1bGx5Ci0gKiBleHRyYWN0ZWQgLS0gYnV0IHRoYXQgaXMgb2ssIHdlIGNhbiByZWdlbmVyYXRlIHRoZW0gbm93LgotICovCi0KLSNkZWZpbmUgX0ZQX1BBQ0tfQ0FOT05JQ0FMKGZzLCB3YywgWCkJCQkJXAotKHtpbnQgX19yZXQgPSAwOwkJCQkJCVwKLSAgc3dpdGNoIChYIyNfYykJCQkJCQlcCi0gIHsJCQkJCQkJCVwKLSAgY2FzZSBGUF9DTFNfTk9STUFMOgkJCQkJCVwKLSAgICBYIyNfZSArPSBfRlBfRVhQQklBU18jI2ZzOwkJCQkJXAotICAgIGlmIChYIyNfZSA+IDApCQkJCQkJXAotICAgICAgewkJCQkJCQkJXAotCV9fcmV0IHw9IF9GUF9ST1VORCh3YywgWCk7CQkJCVwKLQlpZiAoX0ZQX0ZSQUNfT1ZFUlBfIyN3YyhmcywgWCkpCQkJCVwKLQkgIHsJCQkJCQkJXAotCSAgICBfRlBfRlJBQ19TUkxfIyN3YyhYLCAoX0ZQX1dPUktCSVRTKzEpKTsJCVwKLQkgICAgWCMjX2UrKzsJCQkJCQlcCi0JICB9CQkJCQkJCVwKLQllbHNlCQkJCQkJCVwKLQkgIF9GUF9GUkFDX1NSTF8jI3djKFgsIF9GUF9XT1JLQklUUyk7CQkJXAotCWlmIChYIyNfZSA+PSBfRlBfRVhQTUFYXyMjZnMpCQkJCVwKLQkgIHsJCQkJCQkJXAotCSAgICAvKiBvdmVyZmxvdyB0byBpbmZpbml0eSAqLwkJCQlcCi0JICAgIFgjI19lID0gX0ZQX0VYUE1BWF8jI2ZzOwkJCQlcCi0JICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCVwKLSAgICAgICAgICAgIF9fcmV0IHw9IEVGTEFHX09WRVJGTE9XOwkJCQlcCi0JICB9CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLQkvKiB3ZSd2ZSBnb3QgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyICovCQkJXAotCVgjI19lID0gLVgjI19lICsgMTsJCQkJCVwKLQlpZiAoWCMjX2UgPD0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCVwKLQkgIHsJCQkJCQkJXAotCSAgICBfRlBfRlJBQ19TUlNfIyN3YyhYLCBYIyNfZSwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotCSAgICBfRlBfRlJBQ19TTExfIyN3YyhYLCAxKTsJCQkJXAotCSAgICBpZiAoX0ZQX0ZSQUNfT1ZFUlBfIyN3YyhmcywgWCkpCQkJXAotCSAgICAgIHsJCQkJCQkJXAotCSAgICAgICAgWCMjX2UgPSAxOwkJCQkJXAotCSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwlcCi0JICAgICAgfQkJCQkJCQlcCi0JICAgIGVsc2UJCQkJCQlcCi0JICAgICAgewkJCQkJCQlcCi0JCVgjI19lID0gMDsJCQkJCVwKLQkJX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgX0ZQX1dPUktCSVRTKzEpOwkJXAotICAgICAgICAgICAgICAgIF9fcmV0IHw9IEVGTEFHX1VOREVSRkxPVzsJCQlcCi0JICAgICAgfQkJCQkJCQlcCi0JICB9CQkJCQkJCVwKLQllbHNlCQkJCQkJCVwKLQkgIHsJCQkJCQkJXAotCSAgICAvKiB1bmRlcmZsb3cgdG8gemVybyAqLwkJCQlcCi0JICAgIFgjI19lID0gMDsJCQkJCQlcCi0JICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCVwKLSAgICAgICAgICAgIF9fcmV0IHw9IEVGTEFHX1VOREVSRkxPVzsJCQkJXAotCSAgfQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJCVwKLQkJCQkJCQkJXAotICBjYXNlIEZQX0NMU19aRVJPOgkJCQkJCVwKLSAgICBYIyNfZSA9IDA7CQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAotICAgIGJyZWFrOwkJCQkJCQlcCi0JCQkJCQkJCVwKLSAgY2FzZSBGUF9DTFNfSU5GOgkJCQkJCVwKLSAgICBYIyNfZSA9IF9GUF9FWFBNQVhfIyNmczsJCQkJCVwKLSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAotICAgIGJyZWFrOwkJCQkJCQlcCi0JCQkJCQkJCVwKLSAgY2FzZSBGUF9DTFNfTkFOOgkJCQkJCVwKLSAgICBYIyNfZSA9IF9GUF9FWFBNQVhfIyNmczsJCQkJCVwKLSAgICBpZiAoIV9GUF9LRUVQTkFORlJBQ1ApCQkJCQlcCi0gICAgICB7CQkJCQkJCQlcCi0JX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX05BTkZSQUNfIyNmcyk7CQkJXAotCVgjI19zID0gMDsJCQkJCQlcCi0gICAgICB9CQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQlcCi0gICAgICBfRlBfRlJBQ19ISUdIXyMjd2MoWCkgfD0gX0ZQX1FOQU5CSVRfIyNmczsJCVwKLSAgICBicmVhazsJCQkJCQkJXAotICB9CQkJCQkJCQlcCi0gIF9fcmV0OwkJCQkJCQlcCi19KQotCi0KLS8qCi0gKiBNYWluIGFkZGl0aW9uIHJvdXRpbmUuICBUaGUgaW5wdXQgdmFsdWVzIHNob3VsZCBiZSBjb29rZWQuCi0gKi8KLQotI2RlZmluZSBfRlBfQUREKGZzLCB3YywgUiwgWCwgWSkJCQkJCSAgICAgXAotZG8gewkJCQkJCQkJCSAgICAgXAotICBzd2l0Y2ggKF9GUF9DTFNfQ09NQklORShYIyNfYywgWSMjX2MpKQkJCQkgICAgIFwKLSAgewkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OT1JNQUwpOgkJCSAgICAgXAotICAgIHsJCQkJCQkJCQkgICAgIFwKLSAgICAgIC8qIHNoaWZ0IHRoZSBzbWFsbGVyIG51bWJlciBzbyB0aGF0IGl0cyBleHBvbmVudCBtYXRjaGVzIHRoZSBsYXJnZXIgKi8gXAotICAgICAgX0ZQX0lfVFlQRSBkaWZmID0gWCMjX2UgLSBZIyNfZTsJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gICAgICBpZiAoZGlmZiA8IDApCQkJCQkJCSAgICAgXAotCXsJCQkJCQkJCSAgICAgXAotCSAgZGlmZiA9IC1kaWZmOwkJCQkJCQkgICAgIFwKLQkgIGlmIChkaWZmIDw9IF9GUF9XRlJBQ0JJVFNfIyNmcykJCQkJICAgICBcCi0JICAgIF9GUF9GUkFDX1NSU18jI3djKFgsIGRpZmYsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkgICAgIFwKLQkgIGVsc2UgaWYgKCFfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJCQkgICAgIFwKLQkgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX01JTkZSQUNfIyN3Yyk7CQkJICAgICBcCi0JICBlbHNlCQkJCQkJCQkgICAgIFwKLQkgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCSAgICAgXAotCSAgUiMjX2UgPSBZIyNfZTsJCQkJCQkgICAgIFwKLQl9CQkJCQkJCQkgICAgIFwKLSAgICAgIGVsc2UJCQkJCQkJCSAgICAgXAotCXsJCQkJCQkJCSAgICAgXAotCSAgaWYgKGRpZmYgPiAwKQkJCQkJCQkgICAgIFwKLQkgICAgewkJCQkJCQkJICAgICBcCi0JICAgICAgaWYgKGRpZmYgPD0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCQkgICAgIFwKLQkgICAgICAgIF9GUF9GUkFDX1NSU18jI3djKFksIGRpZmYsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkgICAgIFwKLQkgICAgICBlbHNlIGlmICghX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkJCQkJICAgICBcCi0JICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhZLCBfRlBfTUlORlJBQ18jI3djKTsJCQkgICAgIFwKLQkgICAgICBlbHNlCQkJCQkJCSAgICAgXAotCSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWSwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJICAgICBcCi0JICAgIH0JCQkJCQkJCSAgICAgXAotCSAgUiMjX2UgPSBYIyNfZTsJCQkJCQkgICAgIFwKLQl9CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICAgICAgUiMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gICAgICBpZiAoWCMjX3MgPT0gWSMjX3MpCQkJCQkJICAgICBcCi0JewkJCQkJCQkJICAgICBcCi0JICBSIyNfcyA9IFgjI19zOwkJCQkJCSAgICAgXAotCSAgX0ZQX0ZSQUNfQUREXyMjd2MoUiwgWCwgWSk7CQkJCQkgICAgIFwKLQkgIGlmIChfRlBfRlJBQ19PVkVSUF8jI3djKGZzLCBSKSkJCQkJICAgICBcCi0JICAgIHsJCQkJCQkJCSAgICAgXAotCSAgICAgIF9GUF9GUkFDX1NSU18jI3djKFIsIDEsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CQkgICAgIFwKLQkgICAgICBSIyNfZSsrOwkJCQkJCQkgICAgIFwKLQkgICAgfQkJCQkJCQkJICAgICBcCi0JfQkJCQkJCQkJICAgICBcCi0gICAgICBlbHNlCQkJCQkJCQkgICAgIFwKLQl7CQkJCQkJCQkgICAgIFwKLQkgIFIjI19zID0gWCMjX3M7CQkJCQkJICAgICBcCi0JICBfRlBfRlJBQ19TVUJfIyN3YyhSLCBYLCBZKTsJCQkJCSAgICAgXAotCSAgaWYgKF9GUF9GUkFDX1pFUk9QXyMjd2MoUikpCQkJCQkgICAgIFwKLQkgICAgewkJCQkJCQkJICAgICBcCi0JICAgICAgLyogcmV0dXJuIGFuIGV4YWN0IHplcm8gKi8JCQkJICAgICBcCi0JICAgICAgaWYgKEZQX1JPVU5ETU9ERSA9PSBGUF9STkRfTUlORikJCQkJICAgICBcCi0JCVIjI19zIHw9IFkjI19zOwkJCQkJCSAgICAgXAotCSAgICAgIGVsc2UJCQkJCQkJICAgICBcCi0JCVIjI19zICY9IFkjI19zOwkJCQkJCSAgICAgXAotCSAgICAgIFIjI19jID0gRlBfQ0xTX1pFUk87CQkJCQkgICAgIFwKLQkgICAgfQkJCQkJCQkJICAgICBcCi0JICBlbHNlCQkJCQkJCQkgICAgIFwKLQkgICAgewkJCQkJCQkJICAgICBcCi0JICAgICAgaWYgKF9GUF9GUkFDX05FR1BfIyN3YyhSKSkJCQkJICAgICBcCi0JCXsJCQkJCQkJICAgICBcCi0JCSAgX0ZQX0ZSQUNfU1VCXyMjd2MoUiwgWSwgWCk7CQkJCSAgICAgXAotCQkgIFIjI19zID0gWSMjX3M7CQkJCQkgICAgIFwKLQkJfQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotCSAgICAgIC8qIHJlbm9ybWFsaXplIGFmdGVyIHN1YnRyYWN0aW9uICovCQkJICAgICBcCi0JICAgICAgX0ZQX0ZSQUNfQ0xaXyMjd2MoZGlmZiwgUik7CQkJCSAgICAgXAotCSAgICAgIGRpZmYgLT0gX0ZQX1dGUkFDWEJJVFNfIyNmczsJCQkJICAgICBcCi0JICAgICAgaWYgKGRpZmYpCQkJCQkJCSAgICAgXAotCQl7CQkJCQkJCSAgICAgXAotCQkgIFIjI19lIC09IGRpZmY7CQkJCQkgICAgIFwKLQkJICBfRlBfRlJBQ19TTExfIyN3YyhSLCBkaWZmKTsJCQkJICAgICBcCi0JCX0JCQkJCQkJICAgICBcCi0JICAgIH0JCQkJCQkJCSAgICAgXAotCX0JCQkJCQkJCSAgICAgXAotICAgICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLSAgICB9CQkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTkFOKToJCQkJICAgICBcCi0gICAgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFkpOwkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19aRVJPKToJCQkgICAgIFwKLSAgICBSIyNfZSA9IFgjI19lOwkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfSU5GKToJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX1pFUk8pOgkJCQkgICAgIFwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCQkJICAgICBcCi0gICAgUiMjX3MgPSBYIyNfczsJCQkJCQkJICAgICBcCi0gICAgUiMjX2MgPSBYIyNfYzsJCQkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKLSAgICBSIyNfZSA9IFkjI19lOwkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTkFOKToJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OQU4pOgkJCQkgICAgIFwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCQkJICAgICBcCi0gICAgUiMjX3MgPSBZIyNfczsJCQkJCQkJICAgICBcCi0gICAgUiMjX2MgPSBZIyNfYzsJCQkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19JTkYpOgkJCQkgICAgIFwKLSAgICBpZiAoWCMjX3MgIT0gWSMjX3MpCQkJCQkJCSAgICAgXAotICAgICAgewkJCQkJCQkJCSAgICAgXAotCS8qICtJTkYgKyAtSU5GID0+IE5BTiAqLwkJCQkJICAgICBcCi0JX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQkJCSAgICAgXAotCVIjI19zID0gWCMjX3MgXiBZIyNfczsJCQkJCQkgICAgIFwKLQlSIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJICAgICBcCi0JYnJlYWs7CQkJCQkJCQkgICAgIFwKLSAgICAgIH0JCQkJCQkJCQkgICAgIFwKLSAgICAvKiBGQUxMVEhSVSAqLwkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OT1JNQUwpOgkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19aRVJPKToJCQkJICAgICBcCi0gICAgUiMjX3MgPSBYIyNfczsJCQkJCQkJICAgICBcCi0gICAgUiMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX0lORik6CQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19JTkYpOgkJCQkgICAgIFwKLSAgICBSIyNfcyA9IFkjI19zOwkJCQkJCQkgICAgIFwKLSAgICBSIyNfYyA9IEZQX0NMU19JTkY7CQkJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX1pFUk8pOgkJCSAgICAgXAotICAgIC8qIG1ha2Ugc3VyZSB0aGUgc2lnbiBpcyBjb3JyZWN0ICovCQkJCQkgICAgIFwKLSAgICBpZiAoRlBfUk9VTkRNT0RFID09IEZQX1JORF9NSU5GKQkJCQkJICAgICBcCi0gICAgICBSIyNfcyA9IFgjI19zIHwgWSMjX3M7CQkJCQkJICAgICBcCi0gICAgZWxzZQkJCQkJCQkJICAgICBcCi0gICAgICBSIyNfcyA9IFgjI19zICYgWSMjX3M7CQkJCQkJICAgICBcCi0gICAgUiMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGRlZmF1bHQ6CQkJCQkJCQkgICAgIFwKLSAgICBhYm9ydCgpOwkJCQkJCQkJICAgICBcCi0gIH0JCQkJCQkJCQkgICAgIFwKLX0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE1haW4gbmVnYXRpb24gcm91dGluZS4gIEZJWE1FIC0tIHdoZW4gd2UgY2FyZSBhYm91dCBzZXR0aW5nIGV4Y2VwdGlvbgotICogYml0cyByZWxpYWJseSwgdGhpcyB3aWxsIG5vdCBkby4gIFdlIHNob3VsZCBleGFtaW5lIGFsbCBvZiB0aGUgZnAgY2xhc3Nlcy4KLSAqLwotCi0jZGVmaW5lIF9GUF9ORUcoZnMsIHdjLCBSLCBYKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFgpOwkJXAotICAgIFIjI19jID0gWCMjX2M7CQkJXAotICAgIFIjI19lID0gWCMjX2U7CQkJXAotICAgIFIjI19zID0gMSBeIFgjI19zOwkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogTWFpbiBtdWx0aXBsaWNhdGlvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgotICovCi0KLSNkZWZpbmUgX0ZQX01VTChmcywgd2MsIFIsIFgsIFkpCQkJXAotZG8gewkJCQkJCQlcCi0gIFIjI19zID0gWCMjX3MgXiBZIyNfczsJCQkJXAotICBzd2l0Y2ggKF9GUF9DTFNfQ09NQklORShYIyNfYywgWSMjX2MpKQkJXAotICB7CQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJXAotICAgIFIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJXAotICAgIFIjI19lID0gWCMjX2UgKyBZIyNfZSArIDE7CQkJCVwKLQkJCQkJCQlcCi0gICAgX0ZQX01VTF9NRUFUXyMjZnMoUixYLFkpOwkJCQlcCi0JCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19PVkVSUF8jI3djKGZzLCBSKSkJCQlcCi0gICAgICBfRlBfRlJBQ19TUlNfIyN3YyhSLCAxLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gICAgZWxzZQkJCQkJCVwKLSAgICAgIFIjI19lLS07CQkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05BTik6CQlcCi0gICAgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFkpOwkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OT1JNQUwpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX0lORik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX1pFUk8pOgkJXAotICAgIFIjI19zID0gWCMjX3M7CQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19JTkYpOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OT1JNQUwpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OT1JNQUwpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBYKTsJCQkJXAotICAgIFIjI19jID0gWCMjX2M7CQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTkFOKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OQU4pOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTkFOKToJCVwKLSAgICBSIyNfcyA9IFkjI19zOwkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfSU5GKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19aRVJPKToJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBZKTsJCQkJXAotICAgIFIjI19jID0gWSMjX2M7CQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfWkVSTyk6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19JTkYpOgkJXAotICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKLSAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBkZWZhdWx0OgkJCQkJCVwKLSAgICBhYm9ydCgpOwkJCQkJCVwKLSAgfQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNYWluIGRpdmlzaW9uIHJvdXRpbmUuICBUaGUgaW5wdXQgdmFsdWVzIHNob3VsZCBiZSBjb29rZWQuCi0gKi8KLQotI2RlZmluZSBfRlBfRElWKGZzLCB3YywgUiwgWCwgWSkJCQlcCi1kbyB7CQkJCQkJCVwKLSAgUiMjX3MgPSBYIyNfcyBeIFkjI19zOwkJCQlcCi0gIHN3aXRjaCAoX0ZQX0NMU19DT01CSU5FKFgjI19jLCBZIyNfYykpCQlcCi0gIHsJCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OT1JNQUwpOglcCi0gICAgUiMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQlcCi0gICAgUiMjX2UgPSBYIyNfZSAtIFkjI19lOwkJCQlcCi0JCQkJCQkJXAotICAgIF9GUF9ESVZfTUVBVF8jI2ZzKFIsWCxZKTsJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05BTik6CQlcCi0gICAgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFkpOwkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OT1JNQUwpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX0lORik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX1pFUk8pOgkJXAotICAgIFIjI19zID0gWCMjX3M7CQkJCQlcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFgpOwkJCQlcCi0gICAgUiMjX2MgPSBYIyNfYzsJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OQU4pOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05BTik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OQU4pOgkJXAotICAgIFIjI19zID0gWSMjX3M7CQkJCQlcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFkpOwkJCQlcCi0gICAgUiMjX2MgPSBZIyNfYzsJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19JTkYpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19JTkYpOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTk9STUFMKToJXAotICAgIFIjI19jID0gRlBfQ0xTX1pFUk87CQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19aRVJPKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19aRVJPKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTk9STUFMKToJXAotICAgIFIjI19jID0gRlBfQ0xTX0lORjsJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19JTkYpOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CVwKLSAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgZGVmYXVsdDoJCQkJCQlcCi0gICAgYWJvcnQoKTsJCQkJCQlcCi0gIH0JCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi0vKgotICogTWFpbiBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbiByb3V0aW5lLiAgVGhlIGlucHV0cyBzaG91bGQgYmUgcmF3IG5vdAotICogY29va2VkLiAgVGhlIHJldHVybiBpcyAtMSwwLDEgZm9yIG5vcm1hbCB2YWx1ZXMsIDIgb3RoZXJ3aXNlLgotICovCi0KLSNkZWZpbmUgX0ZQX0NNUChmcywgd2MsIHJldCwgWCwgWSwgdW4pCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgLyogTkFOcyBhcmUgdW5vcmRlcmVkICovCQkJCQkJXAotICAgIGlmICgoWCMjX2UgPT0gX0ZQX0VYUE1BWF8jI2ZzICYmICFfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJXAotCXx8IChZIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWSkpKQlcCi0gICAgICB7CQkJCQkJCQkJXAotCXJldCA9IHVuOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0gICAgICAgIGludCBfX3hfemVybyA9ICghWCMjX2UgJiYgX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkgPyAxIDogMDsJXAotICAgICAgICBpbnQgX195X3plcm8gPSAoIVkjI19lICYmIF9GUF9GUkFDX1pFUk9QXyMjd2MoWSkpID8gMSA6IDA7CVwKLQkJCQkJCQkJCVwKLQlpZiAoX194X3plcm8gJiYgX195X3plcm8pCQkJCQlcCi0JICByZXQgPSAwOwkJCQkJCQlcCi0JZWxzZSBpZiAoX194X3plcm8pCQkJCQkJXAotCSAgcmV0ID0gWSMjX3MgPyAxIDogLTE7CQkJCQkJXAotCWVsc2UgaWYgKF9feV96ZXJvKQkJCQkJCVwKLQkgIHJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJCVwKLQllbHNlIGlmIChYIyNfcyAhPSBZIyNfcykJCQkJCVwKLQkgIHJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJCVwKLQllbHNlIGlmIChYIyNfZSA+IFkjI19lKQkJCQkJCVwKLQkgIHJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJCVwKLQllbHNlIGlmIChYIyNfZSA8IFkjI19lKQkJCQkJCVwKLQkgIHJldCA9IFgjI19zID8gMSA6IC0xOwkJCQkJCVwKLQllbHNlIGlmIChfRlBfRlJBQ19HVF8jI3djKFgsIFkpKQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IC0xIDogMTsJCQkJCQlcCi0JZWxzZSBpZiAoX0ZQX0ZSQUNfR1RfIyN3YyhZLCBYKSkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAxIDogLTE7CQkJCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkgIHJldCA9IDA7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyogU2ltcGxpZmljYXRpb24gZm9yIHN0cmljdCBlcXVhbGl0eS4gICovCi0KLSNkZWZpbmUgX0ZQX0NNUF9FUShmcywgd2MsIHJldCwgWCwgWSkJCQkJCSAgXAotICBkbyB7CQkJCQkJCQkJICBcCi0gICAgLyogTkFOcyBhcmUgdW5vcmRlcmVkICovCQkJCQkJICBcCi0gICAgaWYgKChYIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkgIFwKLQl8fCAoWSMjX2UgPT0gX0ZQX0VYUE1BWF8jI2ZzICYmICFfRlBfRlJBQ19aRVJPUF8jI3djKFkpKSkJICBcCi0gICAgICB7CQkJCQkJCQkJICBcCi0JcmV0ID0gMTsJCQkJCQkJICBcCi0gICAgICB9CQkJCQkJCQkJICBcCi0gICAgZWxzZQkJCQkJCQkJICBcCi0gICAgICB7CQkJCQkJCQkJICBcCi0JcmV0ID0gIShYIyNfZSA9PSBZIyNfZQkJCQkJCSAgXAotCQkmJiBfRlBfRlJBQ19FUV8jI3djKFgsIFkpCQkJCSAgXAotCQkmJiAoWCMjX3MgPT0gWSMjX3MgfHwgIVgjI19lICYmIF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpKTsgXAotICAgICAgfQkJCQkJCQkJCSAgXAotICB9IHdoaWxlICgwKQotCi0vKgotICogTWFpbiBzcXVhcmUgcm9vdCByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlIHNob3VsZCBiZSBjb29rZWQuCi0gKi8KLQotI2RlZmluZSBfRlBfU1FSVChmcywgd2MsIFIsIFgpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19ERUNMXyMjd2MoVCk7IF9GUF9GUkFDX0RFQ0xfIyN3YyhTKTsJCQlcCi0gICAgX0ZQX1dfVFlQRSBxOwkJCQkJCQlcCi0gICAgc3dpdGNoIChYIyNfYykJCQkJCQkJXAotICAgIHsJCQkJCQkJCQlcCi0gICAgY2FzZSBGUF9DTFNfTkFOOgkJCQkJCQlcCi0gICAgCVIjI19zID0gMDsJCQkJCQkJXAotICAgIAlSIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJXAotICAgIAlfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAotICAgIAlicmVhazsJCQkJCQkJCVwKLSAgICBjYXNlIEZQX0NMU19JTkY6CQkJCQkJCVwKLSAgICAJaWYgKFgjI19zKQkJCQkJCQlcCi0gICAgCSAgewkJCQkJCQkJXAotICAgIAkgICAgUiMjX3MgPSAwOwkJCQkJCQlcCi0JICAgIFIjI19jID0gRlBfQ0xTX05BTjsgLyogc05BTiAqLwkJCQlcCi0gICAgCSAgfQkJCQkJCQkJXAotICAgIAllbHNlCQkJCQkJCQlcCi0gICAgCSAgewkJCQkJCQkJXAotICAgIAkgICAgUiMjX3MgPSAwOwkJCQkJCQlcCi0gICAgCSAgICBSIyNfYyA9IEZQX0NMU19JTkY7IC8qIHNxcnQoK2luZikgPSAraW5mICovCQkJXAotICAgIAkgIH0JCQkJCQkJCVwKLSAgICAJYnJlYWs7CQkJCQkJCQlcCi0gICAgY2FzZSBGUF9DTFNfWkVSTzoJCQkJCQkJXAotCVIjI19zID0gWCMjX3M7CQkJCQkJCVwKLSAgICAJUiMjX2MgPSBGUF9DTFNfWkVSTzsgLyogc3FydCgrLTApID0gKy0wICovCQkJXAotCWJyZWFrOwkJCQkJCQkJXAotICAgIGNhc2UgRlBfQ0xTX05PUk1BTDoJCQkJCQkJXAotICAgIAlSIyNfcyA9IDA7CQkJCQkJCVwKLSAgICAgICAgaWYgKFgjI19zKQkJCQkJCQlcCi0gICAgICAgICAgewkJCQkJCQkJXAotCSAgICBSIyNfYyA9IEZQX0NMU19OQU47IC8qIHNOQU4gKi8JCQkJXAotCSAgICBicmVhazsJCQkJCQkJXAotICAgICAgICAgIH0JCQkJCQkJCVwKLSAgICAJUiMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKLSAgICAgICAgaWYgKFgjI19lICYgMSkJCQkJCQkJXAotICAgICAgICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIDEpOwkJCQkJXAotICAgICAgICBSIyNfZSA9IFgjI19lID4+IDE7CQkJCQkJXAotICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhTLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAotICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJXAotICAgICAgICBxID0gX0ZQX09WRVJGTE9XXyMjZnM7CQkJCQkJXAotICAgICAgICBfRlBfRlJBQ19TTExfIyN3YyhYLCAxKTsJCQkJCVwKLSAgICAgICAgX0ZQX1NRUlRfTUVBVF8jI3djKFIsIFMsIFQsIFgsIHEpOwkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NSTF8jI3djKFIsIDEpOwkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBDb252ZXJ0IGZyb20gRlAgdG8gaW50ZWdlcgotICovCi0KLS8qICJXaGVuIGEgTmFOLCBpbmZpbml0eSwgbGFyZ2UgcG9zaXRpdmUgYXJndW1lbnQgPj0gMjE0NzQ4MzY0OC4wLCBvcgotICogbGFyZ2UgbmVnYXRpdmUgYXJndW1lbnQgPD0gLTIxNDc0ODM2NDkuMCBpcyBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciwKLSAqIHRoZSBpbnZhbGlkX2N1cnJlbnQgYml0Li4uc2hvdWxkIGJlIHNldCBhbmQgZnBfZXhjZXB0aW9uX0lFRUVfNzU0IHNob3VsZAotICogYmUgcmFpc2VkLiBJZiB0aGUgZmxvYXRpbmcgcG9pbnQgaW52YWxpZCB0cmFwIGlzIGRpc2FibGVkLCBubyB0cmFwIG9jY3VycwotICogYW5kIGEgbnVtZXJpY2FsIHJlc3VsdCBpcyBnZW5lcmF0ZWQ6IGlmIHRoZSBzaWduIGJpdCBvZiB0aGUgb3BlcmFuZAotICogaXMgMCwgdGhlIHJlc3VsdCBpcyAyMTQ3NDgzNjQ3OyBpZiB0aGUgc2lnbiBiaXQgb2YgdGhlIG9wZXJhbmQgaXMgMSwKLSAqIHRoZSByZXN1bHQgaXMgLTIxNDc0ODM2NDguIgotICogU2ltaWxhcmx5IGZvciBjb252ZXJzaW9uIHRvIGV4dGVuZGVkIGludHMsIGV4Y2VwdCB0aGF0IHRoZSBib3VuZGFyaWVzCi0gKiBhcmUgPj0gMl42MywgPD0gLSgyXjYzICsgMSksIGFuZCB0aGUgcmVzdWx0cyBhcmUgMl42MyArIDEgZm9yIHM9MCBhbmQKLSAqIC0yXjYzIGZvciBzPTEuCi0gKiAtLSBTUEFSQyBBcmNoaXRlY3R1cmUgTWFudWFsIFY5LCBBcHBlbmRpeCBCLCB3aGljaCBzcGVjaWZpZXMgaG93Ci0gKiBTUEFSQ3MgcmVzb2x2ZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbmNpZXMgaW4gdGhlIElFRUUtNzU0IHNwZWMuCi0gKiBJIGRvbid0IGJlbGlldmUgdGhhdCB0aGUgY29kZSBiZWxvdyBmb2xsb3dzIHRoaXMuIEknbSBub3QgZXZlbiBzdXJlCi0gKiBpdCdzIHJpZ2h0IQotICogSXQgZG9lc24ndCBjb3BlIHdpdGggbmVlZGluZyB0byBjb252ZXJ0IHRvIGFuIG4gYml0IGludGVnZXIgd2hlbiB0aGVyZQotICogaXMgbm8gbiBiaXQgaW50ZWdlciB0eXBlLiBGb3J0dW5hdGVseSBnY2MgcHJvdmlkZXMgbG9uZyBsb25nIHNvIHRoaXMKLSAqIGlzbid0IGEgcHJvYmxlbSBmb3Igc3BhcmMzMi4KLSAqIEkgaGF2ZSwgaG93ZXZlciwgZml4ZWQgaXRzIE5hTiBoYW5kbGluZyB0byBjb25mb3JtIGFzIGFib3ZlLgotICogICAgICAgICAtLSBQTU0gMDIvMTk5OAotICogTkI6IHJzaWduZWQgaXMgbm90ICdpcyByIGRlY2xhcmVkIHNpZ25lZD8nIGJ1dCAnc2hvdWxkIHRoZSB2YWx1ZSBzdG9yZWQKLSAqIGluIHIgYmUgc2lnbmVkIG9yIHVuc2lnbmVkPycuIHIgaXMgYWx3YXlzKD8pIGRlY2xhcmVkIHVuc2lnbmVkLgotICogQ29tbWVudHMgYmVsb3cgYXJlIG1pbmUsIEJUVyAtLSBQTU0KLSAqLwotI2RlZmluZSBfRlBfVE9fSU5UKGZzLCB3YywgciwgWCwgcnNpemUsIHJzaWduZWQpCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIHN3aXRjaCAoWCMjX2MpCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0gICAgICBjYXNlIEZQX0NMU19OT1JNQUw6CQkJCQkJXAotCWlmIChYIyNfZSA8IDApCQkJCQkJCVwKLQkgIHsJCQkJCQkJCVwKLQkgIC8qIGNhc2UgRlBfQ0xTX05BTjogc2VlIGFib3ZlISAqLwkJCQlcCi0JICBjYXNlIEZQX0NMU19aRVJPOgkJCQkJCVwKLQkgICAgciA9IDA7CQkJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLQllbHNlIGlmIChYIyNfZSA+PSByc2l6ZSAtIChyc2lnbmVkICE9IDApKQkJCVwKLQkgIHsJLyogb3ZlcmZsb3cgKi8JCQkJCQlcCi0JICBjYXNlIEZQX0NMU19OQU46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjYXNlIEZQX0NMU19JTkY6CQkJCQkJXAotCSAgICBpZiAocnNpZ25lZCkJCQkJCQlcCi0JICAgICAgewkJCQkJCQkJXAotCQlyID0gMTsJCQkJCQkJXAotCQlyIDw8PSByc2l6ZSAtIDE7CQkJCQlcCi0JCXIgLT0gMSAtIFgjI19zOwkJCQkJCVwKLQkgICAgICB9CQkJCQkJCQlcCi0JICAgIGVsc2UJCQkJCQkJXAotCSAgICAgIHsJCQkJCQkJCVwKLQkJciA9IDA7CQkJCQkJCVwKLQkJaWYgKCFYIyNfcykJCQkJCQlcCi0JCSAgciA9IH5yOwkJCQkJCVwKLQkgICAgICB9CQkJCQkJCQlcCi0JICB9CQkJCQkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCSAgewkJCQkJCQkJXAotCSAgICBpZiAoX0ZQX1dfVFlQRV9TSVpFKndjIDwgcnNpemUpCQkJCVwKLQkgICAgICB7CQkJCQkJCQlcCi0JCV9GUF9GUkFDX0FTU0VNQkxFXyMjd2MociwgWCwgcnNpemUpOwkJCVwKLQkJciA8PD0gWCMjX2UgLSBfRlBfV0ZSQUNCSVRTXyMjZnM7CQkJXAotCSAgICAgIH0JCQkJCQkJCVwKLQkgICAgZWxzZQkJCQkJCQlcCi0JICAgICAgewkJCQkJCQkJXAotCQlpZiAoWCMjX2UgPj0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCVwKLQkJICBfRlBfRlJBQ19TTExfIyN3YyhYLCAoWCMjX2UgLSBfRlBfV0ZSQUNCSVRTXyMjZnMgKyAxKSk7XAotCQllbHNlCQkJCQkJCVwKLQkJICBfRlBfRlJBQ19TUkxfIyN3YyhYLCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gWCMjX2UgLSAxKSk7XAotCQlfRlBfRlJBQ19BU1NFTUJMRV8jI3djKHIsIFgsIHJzaXplKTsJCQlcCi0JICAgICAgfQkJCQkJCQkJXAotCSAgICBpZiAocnNpZ25lZCAmJiBYIyNfcykJCQkJCVwKLQkgICAgICByID0gLXI7CQkJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLQlicmVhazsJCQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZST01fSU5UKGZzLCB3YywgWCwgciwgcnNpemUsIHJ0eXBlKQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAocikJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoKFgjI19zID0gKHIgPCAwKSkpCQkJCQkJXAotCSAgciA9IC1yOwkJCQkJCQlcCi0JLyogTm90ZSB0aGF0IGByJyBpcyBub3cgY29uc2lkZXJlZCB1bnNpZ25lZCwgc28gd2UgZG9uJ3QgaGF2ZQlcCi0JICAgdG8gd29ycnkgYWJvdXQgdGhlIHNpbmdsZSBzaWduZWQgb3ZlcmZsb3cgY2FzZS4gICovCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSkJCQkJCVwKLQkgIF9fRlBfQ0xaKFgjI19lLCByKTsJCQkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCSAgX19GUF9DTFpfMihYIyNfZSwgKF9GUF9XX1RZUEUpKHIgPj4gX0ZQX1dfVFlQRV9TSVpFKSwgCVwKLQkJICAgICAoX0ZQX1dfVFlQRSlyKTsJCQkJCVwKLQlpZiAocnNpemUgPCBfRlBfV19UWVBFX1NJWkUpCQkJCQlcCi0JCVgjI19lIC09IChfRlBfV19UWVBFX1NJWkUgLSByc2l6ZSk7CQkJXAotCVgjI19lID0gcnNpemUgLSBYIyNfZSAtIDE7CQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKF9GUF9GUkFDQklUU18jI2ZzIDwgcnNpemUgJiYgX0ZQX1dGUkFDQklUU18jI2ZzIDwgWCMjX2UpCVwKLQkgIF9fRlBfRlJBQ19TUlNfMShyLCAoWCMjX2UgLSBfRlBfV0ZSQUNCSVRTXyMjZnMpLCByc2l6ZSk7CVwKLQlyICY9IH4oKF9GUF9XX1RZUEUpMSA8PCBYIyNfZSk7CQkJCQlcCi0JX0ZQX0ZSQUNfRElTQVNTRU1CTEVfIyN3YyhYLCAoKHVuc2lnbmVkIHJ0eXBlKXIpLCByc2l6ZSk7CVwKLQlfRlBfRlJBQ19TTExfIyN3YyhYLCAoX0ZQX1dGUkFDQklUU18jI2ZzIC0gWCMjX2UgLSAxKSk7CQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2MgPSBGUF9DTFNfWkVSTywgWCMjX3MgPSAwOwkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIEZQX0NPTlYoZGZzLHNmcyxkd2Msc3djLEQsUykJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIF9GUF9GUkFDX0NPTlZfIyNkd2MjI18jI3N3YyhkZnMsIHNmcywgRCwgUyk7CVwKLSAgICBEIyNfZSA9IFMjI19lOwkJCQkJXAotICAgIEQjI19jID0gUyMjX2M7CQkJCQlcCi0gICAgRCMjX3MgPSBTIyNfczsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIEhlbHBlciBwcmltaXRpdmVzLgotICovCi0KLS8qIENvdW50IGxlYWRpbmcgemVyb3MgaW4gYSB3b3JkLiAgKi8KLQotI2lmbmRlZiBfX0ZQX0NMWgotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDY0Ci0vKiB0aGlzIGlzIGp1c3QgdG8gc2h1dCB0aGUgY29tcGlsZXIgdXAgYWJvdXQgc2hpZnRzID4gd29yZCBsZW5ndGggLS0gUE1NIDAyLzE5OTggKi8KLSNkZWZpbmUgX19GUF9DTFoociwgeCkJCQkJXAotICBkbyB7CQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3QgPSAoeCk7CQkJXAotICAgIHIgPSBfRlBfV19UWVBFX1NJWkUgLSAxOwkJCVwKLSAgICBpZiAoX3QgPiAweGZmZmYpIHIgLT0gMTY7CQkJXAotICAgIGlmIChfdCA+IDB4ZmZmZikgX3QgPj49IDE2OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmKSByIC09IDg7CQkJXAotICAgIGlmIChfdCA+IDB4ZmYpIF90ID4+PSA4OwkJCVwKLSAgICBpZiAoX3QgJiAweGYwKSByIC09IDQ7CQkJXAotICAgIGlmIChfdCAmIDB4ZjApIF90ID4+PSA0OwkJCVwKLSAgICBpZiAoX3QgJiAweGMpIHIgLT0gMjsJCQlcCi0gICAgaWYgKF90ICYgMHhjKSBfdCA+Pj0gMjsJCQlcCi0gICAgaWYgKF90ICYgMHgyKSByIC09IDE7CQkJXAotICB9IHdoaWxlICgwKQotI2Vsc2UgLyogbm90IF9GUF9XX1RZUEVfU0laRSA8IDY0ICovCi0jZGVmaW5lIF9fRlBfQ0xaKHIsIHgpCQkJCVwKLSAgZG8gewkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF90ID0gKHgpOwkJCVwKLSAgICByID0gX0ZQX1dfVFlQRV9TSVpFIC0gMTsJCQlcCi0gICAgaWYgKF90ID4gMHhmZmZmZmZmZikgciAtPSAzMjsJCVwKLSAgICBpZiAoX3QgPiAweGZmZmZmZmZmKSBfdCA+Pj0gMzI7CQlcCi0gICAgaWYgKF90ID4gMHhmZmZmKSByIC09IDE2OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmZmYpIF90ID4+PSAxNjsJCQlcCi0gICAgaWYgKF90ID4gMHhmZikgciAtPSA4OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmKSBfdCA+Pj0gODsJCQlcCi0gICAgaWYgKF90ICYgMHhmMCkgciAtPSA0OwkJCVwKLSAgICBpZiAoX3QgJiAweGYwKSBfdCA+Pj0gNDsJCQlcCi0gICAgaWYgKF90ICYgMHhjKSByIC09IDI7CQkJXAotICAgIGlmIChfdCAmIDB4YykgX3QgPj49IDI7CQkJXAotICAgIGlmIChfdCAmIDB4MikgciAtPSAxOwkJCVwKLSAgfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KLSNlbmRpZiAvKiBuZGVmIF9fRlBfQ0xaICovCi0KLSNkZWZpbmUgX0ZQX0RJVl9IRUxQX2ltbShxLCByLCBuLCBkKQkJXAotICBkbyB7CQkJCQkJXAotICAgIHEgPSBuIC8gZCwgciA9IG4gJSBkOwkJCVwKLSAgfSB3aGlsZSAoMCkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NmcC1tYWNoaW5lLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2ZwLW1hY2hpbmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxN2Q4My4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2ZwLW1hY2hpbmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKiBNYWNoaW5lLWRlcGVuZGVudCBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBkZWZpbml0aW9ucy4gIFBQQyB2ZXJzaW9uLgotICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCi0KLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKLSAgIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0KLSAgIEFjdHVhbGx5LCB0aGlzIGlzIGEgUFBDICgzMmJpdCkgdmVyc2lvbiwgd3JpdHRlbiBiYXNlZCBvbiB0aGUKLSAgIGkzODYsIHNwYXJjLCBhbmQgc3BhcmM2NCB2ZXJzaW9ucywgYnkgbWUsCi0gICBQZXRlciBNYXlkZWxsIChwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrKS4KLSAgIENvbW1lbnRzIGFyZSBieSBhbmQgbGFyZ2UgYWxzbyBtaW5lLCBhbHRob3VnaCB0aGV5IG1heSBiZSBpbmFjY3VyYXRlLgotCi0gICBJbiBwaWNraW5nIG91dCBhc20gZnJhZ21lbnRzIEkndmUgZ29uZSB3aXRoIHRoZSBsb3dlc3QgY29tbW9uCi0gICBkZW5vbWluYXRvciwgd2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHRoZSBoYXJkd2FyZSBJIGhhdmUgOi0+Ci0gICBUaGF0IGlzLCBhIFNQQVJDIHdpdGhvdXQgaGFyZHdhcmUgbXVsdGlwbHkgYW5kIGRpdmlkZS4KLSAqLwotCi0vKiBiYXNpYyB3b3JkIHNpemUgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgX0ZQX1dfVFlQRV9TSVpFCQkzMgotI2RlZmluZSBfRlBfV19UWVBFCQl1bnNpZ25lZCBsb25nCi0jZGVmaW5lIF9GUF9XU19UWVBFCQlzaWduZWQgbG9uZwotI2RlZmluZSBfRlBfSV9UWVBFCQlsb25nCi0KLSNkZWZpbmUgX19sbF9CCQkJKChVV3R5cGUpIDEgPDwgKFdfVFlQRV9TSVpFIC8gMikpCi0jZGVmaW5lIF9fbGxfbG93cGFydCh0KQkJKChVV3R5cGUpICh0KSAmIChfX2xsX0IgLSAxKSkKLSNkZWZpbmUgX19sbF9oaWdocGFydCh0KQkoKFVXdHlwZSkgKHQpID4+IChXX1RZUEVfU0laRSAvIDIpKQotCi0vKiBZb3UgY2FuIG9wdGlvbmFsbHkgY29kZSBzb21lIHRoaW5ncyBsaWtlIGFkZGl0aW9uIGluIGFzbS4gRm9yCi0gKiBleGFtcGxlLCBpMzg2IGRlZmluZXMgX19GUF9GUkFDX0FERF8yIGFzIGFzbS4gSWYgeW91IGRvbid0Ci0gKiB0aGVuIHlvdSBnZXQgYSBmcmFnbWVudCBvZiBDIGNvZGUgW2lmIHlvdSBjaGFuZ2UgYW4gI2lmZGVmIDAKLSAqIGluIG9wLTIuaF0gb3IgYSBjYWxsIHRvIGFkZF9zc2FhYWEgKHNlZSBiZWxvdykuCi0gKiBHb29kIHBsYWNlcyB0byBsb29rIGZvciBhc20gZnJhZ21lbnRzIHRvIHVzZSBhcmUgZ2NjIGFuZCBnbGliYy4KLSAqIGdjYydzIGxvbmdsb25nLmggaXMgdXNlZnVsLgotICovCi0KLS8qIFdlIG5lZWQgdG8ga25vdyBob3cgdG8gbXVsdGlwbHkgYW5kIGRpdmlkZS4gSWYgdGhlIGhvc3Qgd29yZCBzaXplCi0gKiBpcyA+PSAyKmZyYWNiaXRzIHlvdSBjYW4gdXNlIEZQX01VTF9NRUFUX25faW1tKHQsUixYLFkpIHdoaWNoCi0gKiBjb2RlcyB0aGUgbXVsdGlwbHkgd2l0aCB3aGF0ZXZlciBnY2MgZG9lcyB0byAnYSAqIGInLgotICogX0ZQX01VTF9NRUFUX25fd2lkZSh0LFIsWCxZLGYpIGlzIHVzZWQgd2hlbiB5b3UgaGF2ZSBhbiBhc20KLSAqIGZ1bmN0aW9uIHRoYXQgY2FuIG11bHRpcGx5IHR3byAxVyB2YWx1ZXMgYW5kIGdldCBhIDJXIHJlc3VsdC4KLSAqIE90aGVyd2lzZSB5b3UncmUgc3R1Y2sgd2l0aCBfRlBfTVVMX01FQVRfbl9oYXJkKHQsUixYLFkpIHdoaWNoCi0gKiBkb2VzIGJpdHNoaWZ0aW5nIHRvIGF2b2lkIG92ZXJmbG93LgotICogRm9yIGRpdmlzaW9uIHRoZXJlIGlzIEZQX0RJVl9NRUFUX25faW1tKHQsUixYLFksZikgZm9yIHdvcmQgc2l6ZQotICogPj0gMipmcmFjYml0cywgd2hlcmUgZiBpcyBlaXRoZXIgX0ZQX0RJVl9IRUxQX2ltbSBvcgotICogX0ZQX0RJVl9IRUxQX2xkaXYgKHNlZSBvcC0xLmgpLgotICogX0ZQX0RJVl9NRUFUX3VkaXYoKSBpcyBpZiB5b3UgaGF2ZSBhc20gdG8gZG8gMlcvMVcgPT4gKDFXLCAxVykuCi0gKiBbR0NDIGFuZCBnbGliYyBoYXZlIGxvbmdsb25nLmggd2hpY2ggaGFzIHRoZSBhc20gbWFjcm8gdWRpdl9xcm5uZAotICogdG8gZG8gdGhpcy5dCi0gKiBJbiBnZW5lcmFsLCAnbicgaXMgdGhlIG51bWJlciBvZiB3b3JkcyByZXF1aXJlZCB0byBob2xkIHRoZSB0eXBlLAotICogYW5kICd0JyBpcyBlaXRoZXIgUywgRCBvciBRIGZvciBzaW5nbGUvZG91YmxlL3F1YWQuCi0gKiAgICAgICAgICAgLS0gUE1NCi0gKi8KLS8qIEV4YW1wbGU6IFNQQVJDNjQ6Ci0gKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKQlfRlBfTVVMX01FQVRfMV9pbW0oUyxSLFgsWSkKLSAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCV9GUF9NVUxfTUVBVF8xX3dpZGUoRCxSLFgsWSx1bXVsX3BwbW0pCi0gKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9RKFIsWCxZKQlfRlBfTVVMX01FQVRfMl93aWRlKFEsUixYLFksdW11bF9wcG1tKQotICoKLSAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpCV9GUF9ESVZfTUVBVF8xX2ltbShTLFIsWCxZLF9GUF9ESVZfSEVMUF9pbW0pCi0gKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKQlfRlBfRElWX01FQVRfMV91ZGl2KEQsUixYLFkpCi0gKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9RKFIsWCxZKQlfRlBfRElWX01FQVRfMl91ZGl2XzY0KFEsUixYLFkpCi0gKgotICogRXhhbXBsZTogaTM4NjoKLSAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpICAgX0ZQX01VTF9NRUFUXzFfd2lkZShTLFIsWCxZLF9pMzg2X211bF8zMl82NCkKLSAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpICAgX0ZQX01VTF9NRUFUXzJfd2lkZShELFIsWCxZLF9pMzg2X211bF8zMl82NCkKLSAqCi0gKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKSAgIF9GUF9ESVZfTUVBVF8xX3VkaXYoUyxSLFgsWSxfaTM4Nl9kaXZfNjRfMzIpCi0gKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKSAgIF9GUF9ESVZfTUVBVF8yX3VkaXZfNjQoRCxSLFgsWSkKLSAqLwotCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8xX3dpZGUoUyxSLFgsWSx1bXVsX3BwbW0pCi0jZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoRCxSLFgsWSx1bXVsX3BwbW0pCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZKQotI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkgICBfRlBfRElWX01FQVRfMl91ZGl2XzY0KEQsUixYLFkpCi0KLS8qIFRoZXNlIG1hY3JvcyBkZWZpbmUgd2hhdCBOYU4gbG9va3MgbGlrZS4gVGhleSdyZSBzdXBwb3NlZCB0byBleHBhbmQgdG8KLSAqIGEgY29tbWEtc2VwYXJhdGVkIHNldCBvZiAzMmJpdCB1bnNpZ25lZCBpbnRzIHRoYXQgZW5jb2RlIE5hTi4KLSAqLwotI2RlZmluZSBfRlBfTkFORlJBQ19TCQlfRlBfUU5BTkJJVF9TCi0jZGVmaW5lIF9GUF9OQU5GUkFDX0QJCV9GUF9RTkFOQklUX0QsIDAKLSNkZWZpbmUgX0ZQX05BTkZSQUNfUSAgICAgICAgICAgX0ZQX1FOQU5CSVRfUSwgMCwgMCwgMAotCi0jZGVmaW5lIF9GUF9LRUVQTkFORlJBQ1AgMQotCi0vKiBUaGlzIG1hY3JvIGFwcGVhcnMgdG8gYmUgY2FsbGVkIHdoZW4gYm90aCBYIGFuZCBZIGFyZSBOYU5zLCBhbmQKLSAqIGhhcyB0byBjaG9vc2Ugb25lIGFuZCBjb3B5IGl0IHRvIFIuIGkzODYgZ29lcyBmb3IgdGhlIGxhcmdlciBvZiB0aGUKLSAqIHR3bywgc3BhcmM2NCBqdXN0IHBpY2tzIFkuIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGF0IGFsbCBzbyBJJ2xsCi0gKiBnbyB3aXRoIHNwYXJjNjQgYmVjYXVzZSBpdCdzIHNob3J0ZXIgOi0+ICAgLS0gUE1NCi0gKi8KLSNkZWZpbmUgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFkpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBSIyNfcyA9IFkjI19zOwkJCQkJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLFkpOwkJCQlcCi0gICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLWV4dGVybiB2b2lkIGZwX3VucGFja19kKGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCi0JCQlsb25nICosIGxvbmcgKiwgdm9pZCAqKTsKLWV4dGVybiBpbnQgIGZwX3BhY2tfZCh2b2lkICosIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpOwotZXh0ZXJuIGludCAgZnBfcGFja19kcyh2b2lkICosIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIGxvbmcpOwotCi0jZGVmaW5lIF9fRlBfVU5QQUNLX1JBV18xKGZzLCBYLCB2YWwpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJXAotICAgIAkodW5pb24gX0ZQX1VOSU9OXyMjZnMgKil2YWw7CQkJXAotCQkJCQkJCVwKLSAgICBYIyNfZiA9IF9mbG8tPmJpdHMuZnJhYzsJCQkJXAotICAgIFgjI19lID0gX2Zsby0+Yml0cy5leHA7CQkJCVwKLSAgICBYIyNfcyA9IF9mbG8tPmJpdHMuc2lnbjsJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfVU5QQUNLX1JBV18yKGZzLCBYLCB2YWwpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJXAotICAgIAkodW5pb24gX0ZQX1VOSU9OXyMjZnMgKil2YWw7CQkJXAotCQkJCQkJCVwKLSAgICBYIyNfZjAgPSBfZmxvLT5iaXRzLmZyYWMwOwkJCQlcCi0gICAgWCMjX2YxID0gX2Zsby0+Yml0cy5mcmFjMTsJCQkJXAotICAgIFgjI19lICA9IF9mbG8tPmJpdHMuZXhwOwkJCQlcCi0gICAgWCMjX3MgID0gX2Zsby0+Yml0cy5zaWduOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19GUF9VTlBBQ0tfUyhYLHZhbCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9fRlBfVU5QQUNLX1JBV18xKFMsWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfVU5QQUNLX0QoWCx2YWwpCQlcCi0JZnBfdW5wYWNrX2QoJlgjI19zLCAmWCMjX2YxLCAmWCMjX2YwLCAmWCMjX2UsICZYIyNfYywgdmFsKQotCi0jZGVmaW5lIF9fRlBfUEFDS19SQVdfMShmcywgdmFsLCBYKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgKl9mbG8gPQkJCVwKLSAgICAJKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopdmFsOwkJCVwKLQkJCQkJCQlcCi0gICAgX2Zsby0+Yml0cy5mcmFjID0gWCMjX2Y7CQkJCVwKLSAgICBfZmxvLT5iaXRzLmV4cCAgPSBYIyNfZTsJCQkJXAotICAgIF9mbG8tPmJpdHMuc2lnbiA9IFgjI19zOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19GUF9QQUNLX1JBV18yKGZzLCB2YWwsIFgpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJXAotICAgIAkodW5pb24gX0ZQX1VOSU9OXyMjZnMgKil2YWw7CQkJXAotCQkJCQkJCVwKLSAgICBfZmxvLT5iaXRzLmZyYWMwID0gWCMjX2YwOwkJCQlcCi0gICAgX2Zsby0+Yml0cy5mcmFjMSA9IFgjI19mMTsJCQkJXAotICAgIF9mbG8tPmJpdHMuZXhwICAgPSBYIyNfZTsJCQkJXAotICAgIF9mbG8tPmJpdHMuc2lnbiAgPSBYIyNfczsJCQkJXAotICB9IHdoaWxlICgwKQotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotI2RlZmluZSBfX0ZQVV9GUFNDUgkoY3VycmVudC0+dGhyZWFkLmZwc2NyLnZhbCkKLQotLyogV2Ugb25seSBhY3R1YWxseSB3cml0ZSB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIKLSAqIGlmIGV4Y2VwdGlvbnMgc2lnbmFsbGVkIChpZiBhbnkpIHdpbGwgbm90IHRyYXAuCi0gKi8KLSNkZWZpbmUgX19GUFVfRU5BQkxFRF9FWEMgXAotKHsJCQkJCQlcCi0JKF9fRlBVX0ZQU0NSID4+IDMpICYgMHgxZjsJXAotfSkKLQotI2RlZmluZSBfX0ZQVV9UUkFQX1AoYml0cykgXAotCSgoX19GUFVfRU5BQkxFRF9FWEMgJiAoYml0cykpICE9IDApCi0KLSNkZWZpbmUgX19GUF9QQUNLX1ModmFsLFgpCQkJXAotKHsgIGludCBfX2V4YyA9IF9GUF9QQUNLX0NBTk9OSUNBTChTLDEsWCk7CVwKLSAgICBpZighX19leGMgfHwgIV9fRlBVX1RSQVBfUChfX2V4YykpCQlcCi0gICAgICAgIF9fRlBfUEFDS19SQVdfMShTLHZhbCxYKTsJCVwKLSAgICBfX2V4YzsJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX19GUF9QQUNLX0QodmFsLFgpCQkJXAotCWZwX3BhY2tfZCh2YWwsIFgjI19zLCBYIyNfZjEsIFgjI19mMCwgWCMjX2UsIFgjI19jKQotCi0jZGVmaW5lIF9fRlBfUEFDS19EUyh2YWwsWCkJCQlcCi0JZnBfcGFja19kcyh2YWwsIFgjI19zLCBYIyNfZjEsIFgjI19mMCwgWCMjX2UsIFgjI19jKQotCi0vKiBPYnRhaW4gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4gKi8KLSNkZWZpbmUgRlBfUk9VTkRNT0RFCQkJXAotKHsJCQkJCVwKLQlfX0ZQVV9GUFNDUiAmIDB4MzsJCVwKLX0pCi0KLS8qIHRoZSBhc20gZnJhZ21lbnRzIGdvIGhlcmU6IGFsbCB0aGVzZSBhcmUgdGFrZW4gZnJvbSBnbGliYy0yLjAuNSdzCi0gKiBzdGRsaWIvbG9uZ2xvbmcuaAotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotLyogYWRkX3NzYWFhYSBpcyB1c2VkIGluIG9wLTIuaCBhbmQgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8KLSAqICNkZWZpbmUgYWRkX3NzYWFhYShzaCxzbCxhaCxhbCxiaCxibCkgKHNoID0gYWgrYmgrICgoIHNsID0gYWwrYmwpIDwgYWwpKQotICogYWRkX3NzYWFhYShoaWdoX3N1bSwgbG93X3N1bSwgaGlnaF9hZGRlbmRfMSwgbG93X2FkZGVuZF8xLAotICogaGlnaF9hZGRlbmRfMiwgbG93X2FkZGVuZF8yKSBhZGRzIHR3byBVV3R5cGUgaW50ZWdlcnMsIGNvbXBvc2VkIGJ5Ci0gKiBISUdIX0FEREVORF8xIGFuZCBMT1dfQURERU5EXzEsIGFuZCBISUdIX0FEREVORF8yIGFuZCBMT1dfQURERU5EXzIKLSAqIHJlc3BlY3RpdmVseS4gIFRoZSByZXN1bHQgaXMgcGxhY2VkIGluIEhJR0hfU1VNIGFuZCBMT1dfU1VNLiAgT3ZlcmZsb3cKLSAqIChpLmUuIGNhcnJ5IG91dCkgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSwgYW5kIGlzIGxvc3QuCi0gKi8KLSNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSAwKQkJCQlcCi0gICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2F6ZXxhZGR6ZX0gJTAsJTIiCQlcCi0JICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09fihVU0l0eXBlKSAwKQkJXAotICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAotCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkgICAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkgICAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIF9fYXNtX18gKCJ7YSVJNXxhZGQlSTVjfSAlMSwlNCwlNVxuXHR7YWV8YWRkZX0gJTAsJTIsJTMiCQlcCi0JICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JICAgICAgICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCi0JICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIHN1Yl9kZG1tc3MgaXMgdXNlZCBpbiBvcC0yLmggYW5kIHVkaXZtb2R0aTQuYyBhbmQgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8KLSAqICNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSAoc2ggPSBhaC1iaCAtICgoc2wgPSBhbC1ibCkgPiBhbCkpCi0gKiBzdWJfZGRtbXNzKGhpZ2hfZGlmZmVyZW5jZSwgbG93X2RpZmZlcmVuY2UsIGhpZ2hfbWludWVuZCwgbG93X21pbnVlbmQsCi0gKiBoaWdoX3N1YnRyYWhlbmQsIGxvd19zdWJ0cmFoZW5kKSBzdWJ0cmFjdHMgdHdvIHR3by13b3JkIFVXdHlwZSBpbnRlZ2VycywKLSAqIGNvbXBvc2VkIGJ5IEhJR0hfTUlOVUVORF8xIGFuZCBMT1dfTUlOVUVORF8xLCBhbmQgSElHSF9TVUJUUkFIRU5EXzIgYW5kCi0gKiBMT1dfU1VCVFJBSEVORF8yIHJlc3BlY3RpdmVseS4gIFRoZSByZXN1bHQgaXMgcGxhY2VkIGluIEhJR0hfRElGRkVSRU5DRQotICogYW5kIExPV19ESUZGRVJFTkNFLiAgT3ZlcmZsb3cgKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLAotICogYW5kIGlzIGxvc3QuCi0gKi8KLSNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PSAwKQkJCQlcCi0gICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2Z6ZXxzdWJmemV9ICUwLCUyIglcCi0JICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgICAgOiAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAotCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWgpICYmIChhaCkgPT1+KFVTSXR5cGUpIDApCQlcCi0gICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2ZtZXxzdWJmbWV9ICUwLCUyIglcCi0JICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgICAgOiAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAotCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkJCQlcCi0gICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YW1lfGFkZG1lfSAlMCwlMiIJCVwKLQkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PX4oVVNJdHlwZSkgMCkJCVwKLSAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHthemV8YWRkemV9ICUwLCUyIgkJXAotCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgX19hc21fXyAoIntzZiVJNHxzdWJmJUk0Y30gJTEsJTUsJTRcblx0e3NmZXxzdWJmZX0gJTAsJTMsJTIiCVwKLQkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAotCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogYXNtIGZyYWdtZW50cyBmb3IgbXVsIGFuZCBkaXYgKi8KLQotLyogdW11bF9wcG1tKGhpZ2hfcHJvZCwgbG93X3Byb2QsIG11bHRpcGxlciwgbXVsdGlwbGljYW5kKSBtdWx0aXBsaWVzIHR3bwotICogVVd0eXBlIGludGVnZXJzIE1VTFRJUExFUiBhbmQgTVVMVElQTElDQU5ELCBhbmQgZ2VuZXJhdGVzIGEgdHdvIFVXdHlwZQotICogd29yZCBwcm9kdWN0IGluIEhJR0hfUFJPRCBhbmQgTE9XX1BST0QuCi0gKi8KLSNkZWZpbmUgdW11bF9wcG1tKHBoLCBwbCwgbTAsIG0xKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIFVTSXR5cGUgX19tMCA9IChtMCksIF9fbTEgPSAobTEpOwkJCQkJXAotICAgIF9fYXNtX18gKCJtdWxod3UgJTAsJTEsJTIiCQkJCQkJXAotCSAgICAgOiAiPXIiICgoVVNJdHlwZSkocGgpKQkJCQkJXAotCSAgICAgOiAiJXIiIChfX20wKSwJCQkJCQlcCi0gICAgICAgICAgICAgICAiciIgKF9fbTEpKTsJCQkJCQlcCi0gICAgKHBsKSA9IF9fbTAgKiBfX20xOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIHVkaXZfcXJubmQocXVvdGllbnQsIHJlbWFpbmRlciwgaGlnaF9udW1lcmF0b3IsIGxvd19udW1lcmF0b3IsCi0gKiBkZW5vbWluYXRvcikgZGl2aWRlcyBhIFVEV3R5cGUsIGNvbXBvc2VkIGJ5IHRoZSBVV3R5cGUgaW50ZWdlcnMKLSAqIEhJR0hfTlVNRVJBVE9SIGFuZCBMT1dfTlVNRVJBVE9SLCBieSBERU5PTUlOQVRPUiBhbmQgcGxhY2VzIHRoZSBxdW90aWVudAotICogaW4gUVVPVElFTlQgYW5kIHRoZSByZW1haW5kZXIgaW4gUkVNQUlOREVSLiAgSElHSF9OVU1FUkFUT1IgbXVzdCBiZSBsZXNzCi0gKiB0aGFuIERFTk9NSU5BVE9SIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gIElmLCBpbiBhZGRpdGlvbiwgdGhlIG1vc3QKLSAqIHNpZ25pZmljYW50IGJpdCBvZiBERU5PTUlOQVRPUiBtdXN0IGJlIDEsIHRoZW4gdGhlIHByZS1wcm9jZXNzb3Igc3ltYm9sCi0gKiBVRElWX05FRURTX05PUk1BTElaQVRJT04gaXMgZGVmaW5lZCB0byAxLgotICovCi0jZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIFVXdHlwZSBfX2QxLCBfX2QwLCBfX3ExLCBfX3EwLCBfX3IxLCBfX3IwLCBfX207CQkJXAotICAgIF9fZDEgPSBfX2xsX2hpZ2hwYXJ0IChkKTsJCQkJCQlcCi0gICAgX19kMCA9IF9fbGxfbG93cGFydCAoZCk7CQkJCQkJXAotCQkJCQkJCQkJXAotICAgIF9fcjEgPSAobjEpICUgX19kMTsJCQkJCQkJXAotICAgIF9fcTEgPSAobjEpIC8gX19kMTsJCQkJCQkJXAotICAgIF9fbSA9IChVV3R5cGUpIF9fcTEgKiBfX2QwOwkJCQkJCVwKLSAgICBfX3IxID0gX19yMSAqIF9fbGxfQiB8IF9fbGxfaGlnaHBhcnQgKG4wKTsJCQkJXAotICAgIGlmIChfX3IxIDwgX19tKQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV9fcTEtLSwgX19yMSArPSAoZCk7CQkJCQkJXAotCWlmIChfX3IxID49IChkKSkgLyogd2UgZGlkbid0IGdldCBjYXJyeSB3aGVuIGFkZGluZyB0byBfX3IxICovCVwKLQkgIGlmIChfX3IxIDwgX19tKQkJCQkJCVwKLQkgICAgX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgX19yMSAtPSBfX207CQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBfX3IwID0gX19yMSAlIF9fZDE7CQkJCQkJCVwKLSAgICBfX3EwID0gX19yMSAvIF9fZDE7CQkJCQkJCVwKLSAgICBfX20gPSAoVVd0eXBlKSBfX3EwICogX19kMDsJCQkJCQlcCi0gICAgX19yMCA9IF9fcjAgKiBfX2xsX0IgfCBfX2xsX2xvd3BhcnQgKG4wKTsJCQkJXAotICAgIGlmIChfX3IwIDwgX19tKQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQkJXAotCWlmIChfX3IwID49IChkKSkJCQkJCQlcCi0JICBpZiAoX19yMCA8IF9fbSkJCQkJCQlcCi0JICAgIF9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIF9fcjAgLT0gX19tOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgKHEpID0gKFVXdHlwZSkgX19xMSAqIF9fbGxfQiB8IF9fcTA7CQkJCVwKLSAgICAocikgPSBfX3IwOwkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiAxCi0KLSNkZWZpbmUgYWJvcnQoKQkJCQkJCQkJXAotCXJldHVybiAwCi0KLSNpZmRlZiBfX0JJR19FTkRJQU4KLSNkZWZpbmUgX19CWVRFX09SREVSIF9fQklHX0VORElBTgotI2Vsc2UKLSNkZWZpbmUgX19CWVRFX09SREVSIF9fTElUVExFX0VORElBTgotI2VuZGlmCi0KLS8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KLSNkZWZpbmUgRUZMQUdfSU5WQUxJRAkJKDEgPDwgKDMxIC0gMikpCi0jZGVmaW5lIEVGTEFHX09WRVJGTE9XCQkoMSA8PCAoMzEgLSAzKSkKLSNkZWZpbmUgRUZMQUdfVU5ERVJGTE9XCQkoMSA8PCAoMzEgLSA0KSkKLSNkZWZpbmUgRUZMQUdfRElWWkVSTwkJKDEgPDwgKDMxIC0gNSkpCi0jZGVmaW5lIEVGTEFHX0lORVhBQ1QJCSgxIDw8ICgzMSAtIDYpKQotCi0jZGVmaW5lIEVGTEFHX1ZYU05BTgkJKDEgPDwgKDMxIC0gNykpCi0jZGVmaW5lIEVGTEFHX1ZYSVNJCQkoMSA8PCAoMzEgLSA4KSkKLSNkZWZpbmUgRUZMQUdfVlhJREkJCSgxIDw8ICgzMSAtIDkpKQotI2RlZmluZSBFRkxBR19WWFpEWgkJKDEgPDwgKDMxIC0gMTApKQotI2RlZmluZSBFRkxBR19WWElNWgkJKDEgPDwgKDMxIC0gMTEpKQotI2RlZmluZSBFRkxBR19WWFZDCQkoMSA8PCAoMzEgLSAxMikpCi0jZGVmaW5lIEVGTEFHX1ZYU09GVAkJKDEgPDwgKDMxIC0gMjEpKQotI2RlZmluZSBFRkxBR19WWFNRUlQJCSgxIDw8ICgzMSAtIDIyKSkKLSNkZWZpbmUgRUZMQUdfVlhDVkkJCSgxIDw8ICgzMSAtIDIzKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zaW5nbGUuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zaW5nbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5ZDk5NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2luZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogRGVmaW5pdGlvbnMgZm9yIElFRUUgU2luZ2xlIFByZWNpc2lvbgotICovCi0KLSNpZiBfRlBfV19UWVBFX1NJWkUgPCAzMgotI2Vycm9yICJIZXJlJ3MgYSBuaWNrZWwga2lkLiAgR28gYnV5IHlvdXJzZWxmIGEgcmVhbCBjb21wdXRlci4iCi0jZW5kaWYKLQotI2RlZmluZSBfRlBfRlJBQ0JJVFNfUwkJMjQKLSNkZWZpbmUgX0ZQX0ZSQUNYQklUU19TCQkoX0ZQX1dfVFlQRV9TSVpFIC0gX0ZQX0ZSQUNCSVRTX1MpCi0jZGVmaW5lIF9GUF9XRlJBQ0JJVFNfUwkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19TKQotI2RlZmluZSBfRlBfV0ZSQUNYQklUU19TCShfRlBfV19UWVBFX1NJWkUgLSBfRlBfV0ZSQUNCSVRTX1MpCi0jZGVmaW5lIF9GUF9FWFBCSVRTX1MJCTgKLSNkZWZpbmUgX0ZQX0VYUEJJQVNfUwkJMTI3Ci0jZGVmaW5lIF9GUF9FWFBNQVhfUwkJMjU1Ci0jZGVmaW5lIF9GUF9RTkFOQklUX1MJCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfUy0yKSkKLSNkZWZpbmUgX0ZQX0lNUExCSVRfUwkJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19TLTEpKQotI2RlZmluZSBfRlBfT1ZFUkZMT1dfUwkJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XRlJBQ0JJVFNfUykpCi0KLS8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfRlBfTVVMX01FQVRfUyBhbmQgX0ZQX0RJVl9NRUFUX1Mgc2hvdWxkIGJlCi0gICBjaG9zZW4gYnkgdGhlIHRhcmdldCBtYWNoaW5lLiAgKi8KLQotdW5pb24gX0ZQX1VOSU9OX1MKLXsKLSAgZmxvYXQgZmx0OwotICBzdHJ1Y3QgewotI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLSAgICB1bnNpZ25lZCBzaWduIDogMTsKLSAgICB1bnNpZ25lZCBleHAgIDogX0ZQX0VYUEJJVFNfUzsKLSAgICB1bnNpZ25lZCBmcmFjIDogX0ZQX0ZSQUNCSVRTX1MgLSAoX0ZQX0lNUExCSVRfUyAhPSAwKTsKLSNlbHNlCi0gICAgdW5zaWduZWQgZnJhYyA6IF9GUF9GUkFDQklUU19TIC0gKF9GUF9JTVBMQklUX1MgIT0gMCk7Ci0gICAgdW5zaWduZWQgZXhwICA6IF9GUF9FWFBCSVRTX1M7Ci0gICAgdW5zaWduZWQgc2lnbiA6IDE7Ci0jZW5kaWYKLSAgfSBiaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotfTsKLQotI2RlZmluZSBGUF9ERUNMX1MoWCkJCV9GUF9ERUNMKDEsWCkKLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19TKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18xKFMsWCx2YWwpCi0jZGVmaW5lIEZQX1BBQ0tfUkFXX1ModmFsLFgpCV9GUF9QQUNLX1JBV18xKFMsdmFsLFgpCi0KLSNkZWZpbmUgRlBfVU5QQUNLX1MoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfVU5QQUNLX1JBV18xKFMsWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfUyh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChTLDEsWCk7CQlcCi0gICAgX0ZQX1BBQ0tfUkFXXzEoUyx2YWwsWCk7CQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfTkVHX1MoUixYKQkJX0ZQX05FRyhTLDEsUixYKQotI2RlZmluZSBGUF9BRERfUyhSLFgsWSkJCV9GUF9BREQoUywxLFIsWCxZKQotI2RlZmluZSBGUF9TVUJfUyhSLFgsWSkJCV9GUF9TVUIoUywxLFIsWCxZKQotI2RlZmluZSBGUF9NVUxfUyhSLFgsWSkJCV9GUF9NVUwoUywxLFIsWCxZKQotI2RlZmluZSBGUF9ESVZfUyhSLFgsWSkJCV9GUF9ESVYoUywxLFIsWCxZKQotI2RlZmluZSBGUF9TUVJUX1MoUixYKQkJX0ZQX1NRUlQoUywxLFIsWCkKLQotI2RlZmluZSBGUF9DTVBfUyhyLFgsWSx1bikJX0ZQX0NNUChTLDEscixYLFksdW4pCi0jZGVmaW5lIEZQX0NNUF9FUV9TKHIsWCxZKQlfRlBfQ01QX0VRKFMsMSxyLFgsWSkKLQotI2RlZmluZSBGUF9UT19JTlRfUyhyLFgscnN6LHJzZykgIF9GUF9UT19JTlQoUywxLHIsWCxyc3oscnNnKQotI2RlZmluZSBGUF9GUk9NX0lOVF9TKFgscixycyxydCkgIF9GUF9GUk9NX0lOVChTLDEsWCxyLHJzLHJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NvZnQtZnAuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zb2Z0LWZwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYTM5NTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NvZnQtZnAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0jaWZuZGVmIFNPRlRfRlBfSAotI2RlZmluZSBTT0ZUX0ZQX0gKLQotI2luY2x1ZGUgInNmcC1tYWNoaW5lLmgiCi0KLSNkZWZpbmUgX0ZQX1dPUktCSVRTCQkzCi0jZGVmaW5lIF9GUF9XT1JLX0xTQgkJKChfRlBfV19UWVBFKTEgPDwgMykKLSNkZWZpbmUgX0ZQX1dPUktfUk9VTkQJCSgoX0ZQX1dfVFlQRSkxIDw8IDIpCi0jZGVmaW5lIF9GUF9XT1JLX0dVQVJECQkoKF9GUF9XX1RZUEUpMSA8PCAxKQotI2RlZmluZSBfRlBfV09SS19TVElDS1kJCSgoX0ZQX1dfVFlQRSkxIDw8IDApCi0KLSNpZm5kZWYgRlBfUk5EX05FQVJFU1QKLSMgZGVmaW5lIEZQX1JORF9ORUFSRVNUCQkwCi0jIGRlZmluZSBGUF9STkRfWkVSTwkJMQotIyBkZWZpbmUgRlBfUk5EX1BJTkYJCTIKLSMgZGVmaW5lIEZQX1JORF9NSU5GCQkzCi0jaWZuZGVmIEZQX1JPVU5ETU9ERQotIyBkZWZpbmUgRlBfUk9VTkRNT0RFCQlGUF9STkRfTkVBUkVTVAotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBfRlBfUk9VTkRfTkVBUkVTVCh3YywgWCkJCQlcCi0oeyAgaW50IF9fcmV0ID0gMDsJCQkJCVwKLSAgICBpbnQgX19mcmFjID0gX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiAxNTsJCVwKLSAgICBpZiAoX19mcmFjICYgNykgewkJCQkJXAotICAgICAgX19yZXQgPSBFRkxBR19JTkVYQUNUOwkJCQlcCi0gICAgICBpZiAoKF9fZnJhYyAmIDcpICE9IF9GUF9XT1JLX1JPVU5EKQkJXAotICAgICAgICBfRlBfRlJBQ19BRERJXyMjd2MoWCwgX0ZQX1dPUktfUk9VTkQpOwkJXAotICAgICAgZWxzZSBpZiAoX19mcmFjICYgX0ZQX1dPUktfTFNCKQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfQURESV8jI3djKFgsIF9GUF9XT1JLX1JPVU5EKTsJCVwKLSAgICB9CQkJCQkJCVwKLSAgICBfX3JldDsJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9GUF9ST1VORF9aRVJPKHdjLCBYKQkJCQlcCi0oeyAgaW50IF9fcmV0ID0gMDsJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiA3KQkJCVwKLSAgICAgIF9fcmV0ID0gRUZMQUdfSU5FWEFDVDsJCQkJXAotICAgIF9fcmV0OwkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX0ZQX1JPVU5EX1BJTkYod2MsIFgpCQkJCVwKLSh7ICBpbnQgX19yZXQgPSBFRkxBR19JTkVYQUNUOwkJCQlcCi0gICAgaWYgKCFYIyNfcyAmJiAoX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiA3KSkJCVwKLSAgICAgIF9GUF9GUkFDX0FERElfIyN3YyhYLCBfRlBfV09SS19MU0IpOwkJXAotICAgIGVsc2UgX19yZXQgPSAwOwkJCQkJXAotICAgIF9fcmV0OwkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX0ZQX1JPVU5EX01JTkYod2MsIFgpCQkJCVwKLSh7ICBpbnQgX19yZXQgPSBFRkxBR19JTkVYQUNUOwkJCQlcCi0gICAgaWYgKFgjI19zICYmIChfRlBfRlJBQ19MT1dfIyN3YyhYKSAmIDcpKQkJXAotICAgICAgX0ZQX0ZSQUNfQURESV8jI3djKFgsIF9GUF9XT1JLX0xTQik7CQlcCi0gICAgZWxzZSBfX3JldCA9IDA7CQkJCQlcCi0gICAgX19yZXQ7CQkJCQkJXAotfSkKLQotI2RlZmluZSBfRlBfUk9VTkQod2MsIFgpCQkJXAotKHsJaW50IF9fcmV0ID0gMDsJCQkJXAotCXN3aXRjaCAoRlBfUk9VTkRNT0RFKQkJCVwKLQl7CQkJCQlcCi0JICBjYXNlIEZQX1JORF9ORUFSRVNUOgkJCVwKLQkgICAgX19yZXQgfD0gX0ZQX1JPVU5EX05FQVJFU1Qod2MsWCk7CVwKLQkgICAgYnJlYWs7CQkJCVwKLQkgIGNhc2UgRlBfUk5EX1pFUk86CQkJXAotCSAgICBfX3JldCB8PSBfRlBfUk9VTkRfWkVSTyh3YyxYKTsJXAotCSAgICBicmVhazsJCQkJXAotCSAgY2FzZSBGUF9STkRfUElORjoJCQlcCi0JICAgIF9fcmV0IHw9IF9GUF9ST1VORF9QSU5GKHdjLFgpOwlcCi0JICAgIGJyZWFrOwkJCQlcCi0JICBjYXNlIEZQX1JORF9NSU5GOgkJCVwKLQkgICAgX19yZXQgfD0gX0ZQX1JPVU5EX01JTkYod2MsWCk7CVwKLQkgICAgYnJlYWs7CQkJCVwKLQl9OwkJCQkJXAotCV9fcmV0OwkJCQkJXAotfSkKLQotI2RlZmluZSBGUF9DTFNfTk9STUFMCQkwCi0jZGVmaW5lIEZQX0NMU19aRVJPCQkxCi0jZGVmaW5lIEZQX0NMU19JTkYJCTIKLSNkZWZpbmUgRlBfQ0xTX05BTgkJMwotCi0jZGVmaW5lIF9GUF9DTFNfQ09NQklORSh4LHkpCSgoKHgpIDw8IDIpIHwgKHkpKQotCi0jaW5jbHVkZSAib3AtMS5oIgotI2luY2x1ZGUgIm9wLTIuaCIKLSNpbmNsdWRlICJvcC00LmgiCi0jaW5jbHVkZSAib3AtY29tbW9uLmgiCi0KLS8qIFNpZ2guICBTaWxseSB0aGluZ3MgbG9uZ2xvbmcuaCBuZWVkcy4gICovCi0jZGVmaW5lIFVXdHlwZQkJX0ZQX1dfVFlQRQotI2RlZmluZSBXX1RZUEVfU0laRQlfRlBfV19UWVBFX1NJWkUKLQotdHlwZWRlZiBpbnQgU0l0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoU0kpKSk7Ci10eXBlZGVmIGludCBESXR5cGUgX19hdHRyaWJ1dGVfXygobW9kZShESSkpKTsKLXR5cGVkZWYgdW5zaWduZWQgaW50IFVTSXR5cGUgX19hdHRyaWJ1dGVfXygobW9kZShTSSkpKTsKLXR5cGVkZWYgdW5zaWduZWQgaW50IFVESXR5cGUgX19hdHRyaWJ1dGVfXygobW9kZShESSkpKTsKLSNpZiBfRlBfV19UWVBFX1NJWkUgPT0gMzIKLXR5cGVkZWYgdW5zaWduZWQgaW50IFVIV3R5cGUgX19hdHRyaWJ1dGVfXygobW9kZShISSkpKTsKLSNlbGlmIF9GUF9XX1RZUEVfU0laRSA9PSA2NAotdHlwZWRlZiBVU0l0eXBlIFVIV3R5cGU7Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3Rmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZnMuYwppbmRleCA4Njg5YWE0Li42MTIyMTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3Rmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMKQEAgLTIsMjMgKzIsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIHN0ZnModm9pZCAqZnJTLCB2b2lkICplYSkKIHsKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9TKFIpOworCUZQX0RFQ0xfRVg7CiAJZmxvYXQgZjsKLQlpbnQgZXJyOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiBTICVwLCBlYSAlcFxuIiwgX19mdW5jX18sIGZyUywgZWEpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyUyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyUyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTMwLDEyICszMSwxMiBAQAogCXByaW50aygiUjogJWxkICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCWVyciA9IF9GUF9QQUNLX0NBTk9OSUNBTChTLCAxLCBSKTsKLQlpZiAoIWVyciB8fCAhX19GUFVfVFJBUF9QKGVycikpIHsKLQkJX19GUF9QQUNLX1JBV18xKFMsICZmLCBSKTsKKwlfRlBfUEFDS19DQU5PTklDQUwoUywgMSwgUik7CisJaWYgKCFGUF9DVVJfRVhDRVBUSU9OUyB8fCAhX19GUFVfVFJBUF9QKEZQX0NVUl9FWENFUFRJT05TKSkgeworCQlfRlBfUEFDS19SQVdfMV9QKFMsICZmLCBSKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihlYSwgJmYsIHNpemVvZihmbG9hdCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdHlwZXMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS90eXBlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWVkMTVkLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS90eXBlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKLQotdm9pZAotZnBfdW5wYWNrX2QobG9uZyAqX3MsIHVuc2lnbmVkIGxvbmcgKl9mMSwgdW5zaWduZWQgbG9uZyAqX2YwLAotCSAgICBsb25nICpfZSwgbG9uZyAqX2MsIHZvaWQgKnZhbCkKLXsKLQlGUF9ERUNMX0QoWCk7Ci0KLQlfX0ZQX1VOUEFDS19SQVdfMihELCBYLCB2YWwpOwotCi0JX0ZQX1VOUEFDS19DQU5PTklDQUwoRCwgMiwgWCk7Ci0KLQkqX3MgPSBYX3M7Ci0JKl9mMSA9IFhfZjE7Ci0JKl9mMCA9IFhfZjA7Ci0JKl9lID0gWF9lOwotCSpfYyA9IFhfYzsKLX0KLQotaW50Ci1mcF9wYWNrX2Qodm9pZCAqdmFsLCBsb25nIFhfcywgdW5zaWduZWQgbG9uZyBYX2YxLAotCSAgdW5zaWduZWQgbG9uZyBYX2YwLCBsb25nIFhfZSwgbG9uZyBYX2MpCi17Ci0JaW50IGV4YzsKLQotCWV4YyA9IF9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsKLQlpZiAoIWV4YyB8fCAhX19GUFVfVFJBUF9QKGV4YykpCi0JCV9fRlBfUEFDS19SQVdfMihELCB2YWwsIFgpOwotCXJldHVybiBleGM7Ci19Ci0KLWludAotZnBfcGFja19kcyh2b2lkICp2YWwsIGxvbmcgWF9zLCB1bnNpZ25lZCBsb25nIFhfZjEsCi0JICAgdW5zaWduZWQgbG9uZyBYX2YwLCBsb25nIFhfZSwgbG9uZyBYX2MpCi17Ci0JRlBfREVDTF9TKF9fWCk7Ci0JaW50IGV4YzsKLQotCUZQX0NPTlYoUywgRCwgMSwgMiwgX19YLCBYKTsKLQlleGMgPSBfRlBfUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsKLQlpZiAoIWV4YyB8fCAhX19GUFVfVFJBUF9QKGV4YykpIHsKLQkJX0ZQX1VOUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsKLQkJRlBfQ09OVihELCBTLCAyLCAxLCBYLCBfX1gpOwotCQlleGMgfD0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKEQsIDIsIFgpOwotCQlpZiAoIWV4YyB8fCAhX19GUFVfVFJBUF9QKGV4YykpCi0JCQlfX0ZQX1BBQ0tfUkFXXzIoRCwgdmFsLCBYKTsKLQl9Ci0JcmV0dXJuIGV4YzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS91ZGl2bW9kdGk0LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdWRpdm1vZHRpNC5jCmluZGV4IDdlMTEyZGMuLjYxNzIwNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS91ZGl2bW9kdGk0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3VkaXZtb2R0aTQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIFRoaXMgaGFzIHNvIHZlcnkgZmV3IGNoYW5nZXMgb3ZlciBsaWJnY2MyJ3MgX191ZGl2bW9kZGk0IGl0IGlzbid0IGZ1bm55LiAgKi8KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKICN1bmRlZiBjb3VudF9sZWFkaW5nX3plcm9zCiAjZGVmaW5lIGNvdW50X2xlYWRpbmdfemVyb3MgIF9fRlBfQ0xaCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwppbmRleCBjZTEwZTJiLi4yM2NlZTM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQljYW1fbWF4X3NpemUgPSBtYXhfbG93bWVtX3NpemU7CiAKIAkvKiBhZGp1c3QgbG93bWVtIHNpemUgdG8gbWF4X2xvd21lbV9zaXplICovCi0JcmFtID0gbWluKG1heF9sb3dtZW1fc2l6ZSwgKHBoeXNfYWRkcl90KXRvdGFsX2xvd21lbSk7CisJcmFtID0gbWluKG1heF9sb3dtZW1fc2l6ZSwgdG90YWxfbG93bWVtKTsKIAogCS8qIENhbGN1bGF0ZSBDQU0gdmFsdWVzICovCiAJX19jYW0wID0gMVVMIDw8IDIgKiAoX19pbG9nMihyYW0pIC8gMik7CkBAIC0yMjUsNyArMjI1LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgQ0FNIG1hcHBpbmc6IENBTTA9JWxkTWIsIENBTTE9JWxkTWIsIgogCQkJIiBDQU0yPSVsZE1iIHJlc2lkdWFsOiAlbGRNYlxuIiwKIAkJCV9fY2FtMCA+PiAyMCwgX19jYW0xID4+IDIwLCBfX2NhbTIgPj4gMjAsCi0JCQkodG90YWxfbG93bWVtIC0gX19jYW0wIC0gX19jYW0xIC0gX19jYW0yKSA+PiAyMCk7CisJCQkobG9uZyBpbnQpKCh0b3RhbF9sb3dtZW0gLSBfX2NhbTAgLSBfX2NhbTEgLSBfX2NhbTIpCisJCQkJICAgPj4gMjApKTsKIAlfX21heF9sb3dfbWVtb3J5ID0gX19jYW0wICsgX19jYW0xICsgX19jYW0yOwogCV9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyBfX21heF9sb3dfbWVtb3J5OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCmluZGV4IDlmZGY0ZDYuLjI4YTExNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAkJcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CiAJCWlmICghcGFnZV9jYWNoZV9nZXRfc3BlY3VsYXRpdmUocGFnZSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKHVubGlrZWx5KHB0ZSAhPSAqcHRlcCkpIHsKKwkJaWYgKHVubGlrZWx5KHB0ZV92YWwocHRlKSAhPSBwdGVfdmFsKCpwdGVwKSkpIHsKIAkJCXB1dF9wYWdlKHBhZ2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTkyLDcgKzkyLDcgQEAKIAkJKm5yIC09IHJlZnM7CiAJCXJldHVybiAwOwogCX0KLQlpZiAodW5saWtlbHkocHRlICE9ICpwdGVwKSkgeworCWlmICh1bmxpa2VseShwdGVfdmFsKHB0ZSkgIT0gcHRlX3ZhbCgqcHRlcCkpKSB7CiAJCS8qIENvdWxkIGJlIG9wdGltaXplZCBiZXR0ZXIgKi8KIAkJd2hpbGUgKCpucikgewogCQkJcHV0X3BhZ2UocGFnZSk7CkBAIC0yMzcsNyArMjM3LDggQEAKIAkJCXBnZF90IHBnZCA9ICpwZ2RwOwogCiAJCQlWTV9CVUdfT04oc2hpZnQgIT0gbW11X3BzaXplX2RlZnNbZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKV0uc2hpZnQpOwotCQkJcHJfZGVidWcoIiAgJTAxNmx4OiBub3JtYWwgcGdkICVwXG4iLCBhZGRyLCAodm9pZCAqKXBnZCk7CisJCQlwcl9kZWJ1ZygiICAlMDE2bHg6IG5vcm1hbCBwZ2QgJXBcbiIsIGFkZHIsCisJCQkJICh2b2lkICopcGdkX3ZhbChwZ2QpKTsKIAkJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJCWlmIChwZ2Rfbm9uZShwZ2QpKQogCQkJCWdvdG8gc2xvdzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKaW5kZXggYjliYTdkOS4uN2JmZmI3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIFJldHVybnMgdG8gdGhlIGNhbGxlciBpZiB0aGUgYWNjZXNzIGlzIGlsbGVnYWwgb3IgdGhlcmUgaXMgbm8KICAqIG1hcHBpbmcgZm9yIHRoZSBhZGRyZXNzLiAgT3RoZXJ3aXNlIGl0IHBsYWNlcyBhbiBhcHByb3ByaWF0ZSBQVEUKICAqIGluIHRoZSBoYXNoIHRhYmxlIGFuZCByZXR1cm5zIGZyb20gdGhlIGV4Y2VwdGlvbi4KLSAqIFVzZXMgcjAsIHIzIC0gcjgsIGN0ciwgbHIuCisgKiBVc2VzIHIwLCByMyAtIHI4LCByMTAsIGN0ciwgbHIuCiAgKi8KIAkudGV4dAogX0dMT0JBTChoYXNoX3BhZ2UpCkBAIC0xMDYsOSArMTA2LDE1IEBACiAJYWRkaQlyNSxyNSxzd2FwcGVyX3BnX2RpckBsCS8qIGtlcm5lbCBwYWdlIHRhYmxlICovCiAJcmx3aW1pCXIzLHI5LDMyLTEyLDI5LDI5CS8qIE1TUl9QUiAtPiBfUEFHRV9VU0VSICovCiAxMTI6CWFkZAlyNSxyNSxyNwkJLyogY29udmVydCB0byBwaHlzIGFkZHIgKi8KKyNpZm5kZWYgQ09ORklHX1BURV82NEJJVAogCXJsd2ltaQlyNSxyNCwxMiwyMCwyOQkJLyogaW5zZXJ0IHRvcCAxMCBiaXRzIG9mIGFkZHJlc3MgKi8KIAlsd3oJcjgsMChyNSkJCS8qIGdldCBwbWQgZW50cnkgKi8KIAlybHdpbm0uCXI4LHI4LDAsMCwxOQkJLyogZXh0cmFjdCBhZGRyZXNzIG9mIHB0ZSBwYWdlICovCisjZWxzZQorCXJsd2lubQlyOCxyNCwxMywxOSwyOQkJLyogQ29tcHV0ZSBwZ2Rpci9wbWQgb2Zmc2V0ICovCisJbHd6eAlyOCxyOCxyNQkJLyogR2V0IEwxIGVudHJ5ICovCisJcmx3aW5tLglyOCxyOCwwLDAsMjAJCS8qIGV4dHJhY3QgcHQgYmFzZSBhZGRyZXNzICovCisjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJYmVxLQloYXNoX3BhZ2Vfb3V0CQkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogI2Vsc2UKQEAgLTExOCw3ICsxMjQsMTEgQEAKIAkgICB0byB0aGUgYWRkcmVzcyBmb2xsb3dpbmcgdGhlIHJmaS4gKi8KIAliZXFsci0KICNlbmRpZgorI2lmbmRlZiBDT05GSUdfUFRFXzY0QklUCiAJcmx3aW1pCXI4LHI0LDIyLDIwLDI5CQkvKiBpbnNlcnQgbmV4dCAxMCBiaXRzIG9mIGFkZHJlc3MgKi8KKyNlbHNlCisJcmx3aW1pCXI4LHI0LDIzLDIwLDI4CQkvKiBjb21wdXRlIHB0ZSBhZGRyZXNzICovCisjZW5kaWYKIAlybHdpbm0JcjAscjMsMzItMywyNCwyNAkvKiBfUEFHRV9SVyBhY2Nlc3MgLT4gX1BBR0VfRElSVFkgKi8KIAlvcmkJcjAscjAsX1BBR0VfQUNDRVNTRUR8X1BBR0VfSEFTSFBURQogCkBAIC0xMjcsOSArMTM3LDE1IEBACiAJICogYmVjYXVzZSBhbG1vc3QgYWx3YXlzLCB0aGVyZSB3b24ndCBiZSBhIHBlcm1pc3Npb24gdmlvbGF0aW9uCiAJICogYW5kIHRoZXJlIHdvbid0IGFscmVhZHkgYmUgYW4gSFBURSwgYW5kIHRodXMgd2Ugd2lsbCBoYXZlCiAJICogdG8gdXBkYXRlIHRoZSBQVEUgdG8gc2V0IF9QQUdFX0hBU0hQVEUuICAtLSBwYXVsdXMuCisJICoKKwkgKiBJZiBQVEVfNjRCSVQgaXMgc2V0LCB0aGUgbG93IHdvcmQgaXMgdGhlIGZsYWdzIHdvcmQ7IHVzZSB0aGF0CisJICogd29yZCBmb3IgbG9ja2luZyBzaW5jZSBpdCBjb250YWlucyBhbGwgdGhlIGludGVyZXN0aW5nIGJpdHMuCiAJICovCisjaWYgKFBURV9GTEFHU19PRkZTRVQgIT0gMCkKKwlhZGRpCXI4LHI4LFBURV9GTEFHU19PRkZTRVQKKyNlbmRpZgogcmV0cnk6Ci0JbHdhcngJcjYsMCxyOAkJCS8qIGdldCBsaW51eC1zdHlsZSBwdGUgKi8KKwlsd2FyeAlyNiwwLHI4CQkJLyogZ2V0IGxpbnV4LXN0eWxlIHB0ZSwgZmxhZyB3b3JkICovCiAJYW5kYy4JcjUscjMscjYJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAjaWZkZWYgQ09ORklHX1NNUAogCWJuZS0JaGFzaF9wYWdlX291dAkJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCkBAIC0xMzcsNiArMTUzLDE1IEBACiAJYm5lbHItCiAjZW5kaWYKIAlvcglyNSxyMCxyNgkJLyogc2V0IGFjY2Vzc2VkL2RpcnR5IGJpdHMgKi8KKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisjaWZkZWYgQ09ORklHX1NNUAorCXN1YmYJcjEwLHI2LHI4CQkvKiBjcmVhdGUgZmFsc2UgZGF0YSBkZXBlbmRlbmN5ICovCisJc3ViaQlyMTAscjEwLFBURV9GTEFHU19PRkZTRVQKKwlsd3p4CXIxMCxyNixyMTAJCS8qIEdldCB1cHBlciBQVEUgd29yZCAqLworI2Vsc2UKKwlsd3oJcjEwLC1QVEVfRkxBR1NfT0ZGU0VUKHI4KQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFRFXzY0QklUICovCiAJc3R3Y3guCXI1LDAscjgJCQkvKiBhdHRlbXB0IHRvIHVwZGF0ZSBQVEUgKi8KIAlibmUtCXJldHJ5CQkJLyogcmV0cnkgaWYgc29tZW9uZSBnb3QgdGhlcmUgZmlyc3QgKi8KIApAQCAtMjAzLDkgKzIyOCw5IEBACiAJICogd2UgY2FuJ3QgdGFrZSBhIGhhc2ggdGFibGUgbWlzcyAoYXNzdW1pbmcgdGhlIGNvZGUgaXMKIAkgKiBjb3ZlcmVkIGJ5IGEgQkFUKS4gIC0tIHBhdWx1cwogCSAqLwotCW1mbXNyCXIxMAorCW1mbXNyCXI5CiAJU1lOQwotCXJsd2lubQlyMCxyMTAsMCwxNywxNQkJLyogY2xlYXIgYml0IDE2IChNU1JfRUUpICovCisJcmx3aW5tCXIwLHI5LDAsMTcsMTUJCS8qIGNsZWFyIGJpdCAxNiAoTVNSX0VFKSAqLwogCXJsd2lubQlyMCxyMCwwLDI4LDI2CQkvKiBjbGVhciBNU1JfRFIgKi8KIAltdG1zcglyMAogCVNZTkNfNjAxCkBAIC0yMTQsMTQgKzIzOSwxNCBAQAogCXRvcGh5cyhyNywwKQogCiAjaWZkZWYgQ09ORklHX1NNUAotCWFkZGlzCXI5LHI3LG1tdV9oYXNoX2xvY2tAaGEKLQlhZGRpCXI5LHI5LG1tdV9oYXNoX2xvY2tAbAotMTA6CWx3YXJ4CXIwLDAscjkJCQkvKiB0YWtlIHRoZSBtbXVfaGFzaF9sb2NrICovCisJYWRkaXMJcjYscjcsbW11X2hhc2hfbG9ja0BoYQorCWFkZGkJcjYscjYsbW11X2hhc2hfbG9ja0BsCisxMDoJbHdhcngJcjAsMCxyNgkJCS8qIHRha2UgdGhlIG1tdV9oYXNoX2xvY2sgKi8KIAljbXBpCTAscjAsMAogCWJuZS0JMTFmCi0Jc3R3Y3guCXI4LDAscjkKKwlzdHdjeC4JcjgsMCxyNgogCWJlcSsJMTJmCi0xMToJbHd6CXIwLDAocjkpCisxMToJbHd6CXIwLDAocjYpCiAJY21waQkwLHIwLDAKIAliZXEJMTBiCiAJYgkxMWIKQEAgLTIzNCwxMCArMjU5LDI0IEBACiAJICogSFBURSwgc28gd2UganVzdCB1bmxvY2sgYW5kIHJldHVybi4KIAkgKi8KIAltcglyOCxyNQorI2lmbmRlZiBDT05GSUdfUFRFXzY0QklUCiAJcmx3aW1pCXI4LHI0LDIyLDIwLDI5CisjZWxzZQorCXJsd2ltaQlyOCxyNCwyMywyMCwyOAorCWFkZGkJcjgscjgsUFRFX0ZMQUdTX09GRlNFVAorI2VuZGlmCiAxOglsd2FyeAlyNiwwLHI4CiAJYW5kaS4JcjAscjYsX1BBR0VfSEFTSFBURQogCWJuZQk5ZgkJCS8qIGlmIEhBU0hQVEUgYWxyZWFkeSBzZXQsIGRvbmUgKi8KKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisjaWZkZWYgQ09ORklHX1NNUAorCXN1YmYJcjEwLHI2LHI4CQkvKiBjcmVhdGUgZmFsc2UgZGF0YSBkZXBlbmRlbmN5ICovCisJc3ViaQlyMTAscjEwLFBURV9GTEFHU19PRkZTRVQKKwlsd3p4CXIxMCxyNixyMTAJCS8qIEdldCB1cHBlciBQVEUgd29yZCAqLworI2Vsc2UKKwlsd3oJcjEwLC1QVEVfRkxBR1NfT0ZGU0VUKHI4KQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFRFXzY0QklUICovCiAJb3JpCXI1LHI2LF9QQUdFX0hBU0hQVEUKIAlzdHdjeC4JcjUsMCxyOAogCWJuZS0JMWIKQEAgLTI0NiwxMyArMjg1LDE1IEBACiAKIDk6CiAjaWZkZWYgQ09ORklHX1NNUAorCWFkZGlzCXI2LHI3LG1tdV9oYXNoX2xvY2tAaGEKKwlhZGRpCXI2LHI2LG1tdV9oYXNoX2xvY2tAbAogCWVpZWlvCiAJbGkJcjAsMAotCXN0dwlyMCwwKHI5KQkJLyogY2xlYXIgbW11X2hhc2hfbG9jayAqLworCXN0dwlyMCwwKHI2KQkJLyogY2xlYXIgbW11X2hhc2hfbG9jayAqLwogI2VuZGlmCiAKIAkvKiByZWVuYWJsZSBpbnRlcnJ1cHRzIGFuZCBEUiAqLwotCW10bXNyCXIxMAorCW10bXNyCXI5CiAJU1lOQ182MDEKIAlpc3luYwogCkBAIC0yNjcsNyArMzA4LDggQEAKICAqIHI1IGNvbnRhaW5zIHRoZSBsaW51eCBQVEUsIHI2IGNvbnRhaW5zIHRoZSBvbGQgdmFsdWUgb2YgdGhlCiAgKiBsaW51eCBQVEUgKGJlZm9yZSBzZXR0aW5nIF9QQUdFX0hBU0hQVEUpIGFuZCByNyBjb250YWlucyB0aGUKICAqIG9mZnNldCB0byBiZSBhZGRlZCB0byBhZGRyZXNzZXMgKDAgaWYgdGhlIE1NVSBpcyBvbiwKLSAqIC1LRVJORUxCQVNFIGlmIGl0IGlzIG9mZikuCisgKiAtS0VSTkVMQkFTRSBpZiBpdCBpcyBvZmYpLiAgcjEwIGNvbnRhaW5zIHRoZSB1cHBlciBoYWxmIG9mCisgKiB0aGUgUFRFIGlmIENPTkZJR19QVEVfNjRCSVQuCiAgKiBPbiBTTVAsIHRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgdGhlIG1tdV9oYXNoX2xvY2sgaGVsZC4KICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIgaGFzIChvciB3aWxsKSBzZXQgdGhlIF9QQUdFX0hBU0hQVEUKICAqIGJpdCBpbiB0aGUgbGludXggUFRFIGluIG1lbW9yeS4gIFRoZSB2YWx1ZSBwYXNzZWQgaW4gcjYgc2hvdWxkCkBAIC0yODUsNyArMzI3LDcgQEAKIEhhc2hfbXNrID0gKCgoMSA8PCBIYXNoX2JpdHMpIC0gMSkgKiA2NCkKIAogLyogZGVmaW5lcyBmb3IgdGhlIFBURSBmb3JtYXQgZm9yIDMyLWJpdCBQUENzICovCi0jZGVmaW5lIFBURV9TSVpFCTgKKyNkZWZpbmUgSFBURV9TSVpFCTgKICNkZWZpbmUgUFRFR19TSVpFCTY0CiAjZGVmaW5lIExHX1BURUdfU0laRQk2CiAjZGVmaW5lIExEUFRFdQkJbHd6dQpAQCAtMzEzLDYgKzM1NSwxMSBAQAogQkVHSU5fRlRSX1NFQ1RJT04KIAlvcmkJcjgscjgsX1BBR0VfQ09IRVJFTlQJLyogc2V0IE0gKGNvaGVyZW5jZSByZXF1aXJlZCkgKi8KIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX05FRURfQ09IRVJFTlQpCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorCS8qIFB1dCB0aGUgWFBOIGJpdHMgaW50byB0aGUgUFRFICovCisJcmx3aW1pCXI4LHIxMCw4LDIwLDIyCisJcmx3aW1pCXI4LHIxMCwyLDI5LDI5CisjZW5kaWYKIAogCS8qIENvbnN0cnVjdCB0aGUgaGlnaCB3b3JkIG9mIHRoZSBQUEMtc3R5bGUgUFRFIChyNSkgKi8KIAlybHdpbm0JcjUscjMsNywxLDI0CQkvKiBwdXQgVlNJRCBpbiAweDdmZmZmZjgwIGJpdHMgKi8KQEAgLTM0Miw4ICszODksOCBAQAogCiAJLyogU2VhcmNoIHRoZSBwcmltYXJ5IFBURUcgZm9yIGEgUFRFIHdob3NlIDFzdCAoZCl3b3JkIG1hdGNoZXMgcjUgKi8KIAltdGN0cglyMAotCWFkZGkJcjQscjMsLVBURV9TSVpFCi0xOglMRFBURXUJcjYsUFRFX1NJWkUocjQpCQkvKiBnZXQgbmV4dCBQVEUgKi8KKwlhZGRpCXI0LHIzLC1IUFRFX1NJWkUKKzE6CUxEUFRFdQlyNixIUFRFX1NJWkUocjQpCS8qIGdldCBuZXh0IFBURSAqLwogCUNNUFBURQkwLHI2LHI1CiAJYmRuemYJMiwxYgkJCS8qIGxvb3Agd2hpbGUgY3RyICE9IDAgJiYgIWNyMC5lcSAqLwogCWJlcSsJZm91bmRfc2xvdApAQCAtMzUzLDkgKzQwMCw5IEBACiBfR0xPQkFMKGhhc2hfcGFnZV9wYXRjaF9CKQogCXhvcmlzCXI0LHIzLEhhc2hfbXNrPj4xNgkvKiBjb21wdXRlIHNlY29uZGFyeSBoYXNoICovCiAJeG9yaQlyNCxyNCwoLVBURUdfU0laRSAmIDB4ZmZmZikKLQlhZGRpCXI0LHI0LC1QVEVfU0laRQorCWFkZGkJcjQscjQsLUhQVEVfU0laRQogCW10Y3RyCXIwCi0yOglMRFBURXUJcjYsUFRFX1NJWkUocjQpCisyOglMRFBURXUJcjYsSFBURV9TSVpFKHI0KQogCUNNUFBURQkwLHI2LHI1CiAJYmRuemYJMiwyYgogCWJlcSsJZm91bmRfc2xvdApAQCAtMzYzLDggKzQxMCw4IEBACiAKIAkvKiBTZWFyY2ggdGhlIHByaW1hcnkgUFRFRyBmb3IgYW4gZW1wdHkgc2xvdCAqLwogMTA6CW10Y3RyCXIwCi0JYWRkaQlyNCxyMywtUFRFX1NJWkUJCS8qIHNlYXJjaCBwcmltYXJ5IFBURUcgKi8KLTE6CUxEUFRFdQlyNixQVEVfU0laRShyNCkJCS8qIGdldCBuZXh0IFBURSAqLworCWFkZGkJcjQscjMsLUhQVEVfU0laRQkvKiBzZWFyY2ggcHJpbWFyeSBQVEVHICovCisxOglMRFBURXUJcjYsSFBURV9TSVpFKHI0KQkvKiBnZXQgbmV4dCBQVEUgKi8KIAlUU1RfVihyNikJCQkvKiB0ZXN0IHZhbGlkIGJpdCAqLwogCWJkbnpmCTIsMWIJCQkvKiBsb29wIHdoaWxlIGN0ciAhPSAwICYmICFjcjAuZXEgKi8KIAliZXErCWZvdW5kX2VtcHR5CkBAIC0zODAsOSArNDI3LDkgQEAKIF9HTE9CQUwoaGFzaF9wYWdlX3BhdGNoX0MpCiAJeG9yaXMJcjQscjMsSGFzaF9tc2s+PjE2CS8qIGNvbXB1dGUgc2Vjb25kYXJ5IGhhc2ggKi8KIAl4b3JpCXI0LHI0LCgtUFRFR19TSVpFICYgMHhmZmZmKQotCWFkZGkJcjQscjQsLVBURV9TSVpFCisJYWRkaQlyNCxyNCwtSFBURV9TSVpFCiAJbXRjdHIJcjAKLTI6CUxEUFRFdQlyNixQVEVfU0laRShyNCkKKzI6CUxEUFRFdQlyNixIUFRFX1NJWkUocjQpCiAJVFNUX1YocjYpCiAJYmRuemYJMiwyYgogCWJlcSsJZm91bmRfZW1wdHkKQEAgLTQwOSwxMSArNDU2LDExIEBACiAKIDE6CWFkZGlzCXI0LHI3LG5leHRfc2xvdEBoYQkJLyogZ2V0IG5leHQgZXZpY3Qgc2xvdCAqLwogCWx3eglyNixuZXh0X3Nsb3RAbChyNCkKLQlhZGRpCXI2LHI2LFBURV9TSVpFCQkJLyogc2VhcmNoIGZvciBjYW5kaWRhdGUgKi8KLQlhbmRpLglyNixyNiw3KlBURV9TSVpFCisJYWRkaQlyNixyNixIUFRFX1NJWkUJCQkvKiBzZWFyY2ggZm9yIGNhbmRpZGF0ZSAqLworCWFuZGkuCXI2LHI2LDcqSFBURV9TSVpFCiAJc3R3CXI2LG5leHRfc2xvdEBsKHI0KQogCWFkZAlyNCxyMyxyNgotCUxEUFRFCXIwLFBURV9TSVpFLzIocjQpCQkvKiBnZXQgUFRFIHNlY29uZCB3b3JkICovCisJTERQVEUJcjAsSFBURV9TSVpFLzIocjQpCQkvKiBnZXQgUFRFIHNlY29uZCB3b3JkICovCiAJY2xycndpCXIwLHIwLDEyCiAJbGlzCXI2LGV0ZXh0QGgKIAlvcmkJcjYscjYsZXRleHRAbAkJCS8qIGdldCBldGV4dCAqLwpAQCAtNDI2LDcgKzQ3Myw3IEBACiBmb3VuZF9lbXB0eToKIAlTVFBURQlyNSwwKHI0KQogZm91bmRfc2xvdDoKLQlTVFBURQlyOCxQVEVfU0laRS8yKHI0KQorCVNUUFRFCXI4LEhQVEVfU0laRS8yKHI0KQogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCiAvKgpAQCAtNDUyLDcgKzQ5OSw3IEBACiAJU1RQVEUJcjUsMChyNCkKIAlzeW5jCiAJVExCU1lOQwotCVNUUFRFCXI4LFBURV9TSVpFLzIocjQpIC8qIHB1dCBpbiBjb3JyZWN0IFJQTiwgV0lNRywgUFAgYml0cyAqLworCVNUUFRFCXI4LEhQVEVfU0laRS8yKHI0KSAvKiBwdXQgaW4gY29ycmVjdCBSUE4sIFdJTUcsIFBQIGJpdHMgKi8KIAlzeW5jCiAJU0VUX1YocjUpCiAJU1RQVEUJcjUsMChyNCkJLyogZmluYWxseSBzZXQgViBiaXQgaW4gUFRFICovCkBAIC00OTksMTQgKzU0NiwxOCBAQAogCWlzeW5jCiAKIAkvKiBGaXJzdCBmaW5kIGEgUFRFIGluIHRoZSByYW5nZSB0aGF0IGhhcyBfUEFHRV9IQVNIUFRFIHNldCAqLworI2lmbmRlZiBDT05GSUdfUFRFXzY0QklUCiAJcmx3aW1pCXI1LHI0LDIyLDIwLDI5Ci0xOglsd3oJcjAsMChyNSkKKyNlbHNlCisJcmx3aW1pCXI1LHI0LDIzLDIwLDI4CisjZW5kaWYKKzE6CWx3eglyMCxQVEVfRkxBR1NfT0ZGU0VUKHI1KQogCWNtcHdpCWNyMSxyNiwxCiAJYW5kaS4JcjAscjAsX1BBR0VfSEFTSFBURQogCWJuZQkyZgogCWJsZQljcjEsMTlmCiAJYWRkaQlyNCxyNCwweDEwMDAKLQlhZGRpCXI1LHI1LDQKKwlhZGRpCXI1LHI1LFBURV9TSVpFCiAJYWRkaQlyNixyNiwtMQogCWIJMWIKIApAQCAtNTQ1LDcgKzU5NiwxMCBAQAogCSAqIGFscmVhZHkgY2xlYXIsIHdlJ3JlIGRvbmUgKGZvciB0aGlzIHB0ZSkuICBJZiBub3QsCiAJICogY2xlYXIgaXQgKGF0b21pY2FsbHkpIGFuZCBwcm9jZWVkLiAgLS0gcGF1bHVzLgogCSAqLwotMzM6CWx3YXJ4CXI4LDAscjUJCQkvKiBmZXRjaCB0aGUgcHRlICovCisjaWYgKFBURV9GTEFHU19PRkZTRVQgIT0gMCkKKwlhZGRpCXI1LHI1LFBURV9GTEFHU19PRkZTRVQKKyNlbmRpZgorMzM6CWx3YXJ4CXI4LDAscjUJCQkvKiBmZXRjaCB0aGUgcHRlIGZsYWdzIHdvcmQgKi8KIAlhbmRpLglyMCxyOCxfUEFHRV9IQVNIUFRFCiAJYmVxCThmCQkJLyogZG9uZSBpZiBIQVNIUFRFIGlzIGFscmVhZHkgY2xlYXIgKi8KIAlybHdpbm0JcjgscjgsMCwzMSwyOQkJLyogY2xlYXIgSEFTSFBURSBiaXQgKi8KQEAgLTU2Miw4ICs2MTYsOCBAQAogCS8qIFNlYXJjaCB0aGUgcHJpbWFyeSBQVEVHIGZvciBhIFBURSB3aG9zZSAxc3QgKGQpd29yZCBtYXRjaGVzIHI1ICovCiAJbGkJcjAsOAkJCS8qIFBURXMvZ3JvdXAgKi8KIAltdGN0cglyMAotCWFkZGkJcjEyLHI4LC1QVEVfU0laRQotMToJTERQVEV1CXIwLFBURV9TSVpFKHIxMikJLyogZ2V0IG5leHQgUFRFICovCisJYWRkaQlyMTIscjgsLUhQVEVfU0laRQorMToJTERQVEV1CXIwLEhQVEVfU0laRShyMTIpCS8qIGdldCBuZXh0IFBURSAqLwogCUNNUFBURQkwLHIwLHIxMQogCWJkbnpmCTIsMWIJCQkvKiBsb29wIHdoaWxlIGN0ciAhPSAwICYmICFjcjAuZXEgKi8KIAliZXErCTNmCkBAIC01NzQsOSArNjI4LDkgQEAKIF9HTE9CQUwoZmx1c2hfaGFzaF9wYXRjaF9CKQogCXhvcmlzCXIxMixyOCxIYXNoX21zaz4+MTYJLyogY29tcHV0ZSBzZWNvbmRhcnkgaGFzaCAqLwogCXhvcmkJcjEyLHIxMiwoLVBURUdfU0laRSAmIDB4ZmZmZikKLQlhZGRpCXIxMixyMTIsLVBURV9TSVpFCisJYWRkaQlyMTIscjEyLC1IUFRFX1NJWkUKIAltdGN0cglyMAotMjoJTERQVEV1CXIwLFBURV9TSVpFKHIxMikKKzI6CUxEUFRFdQlyMCxIUFRFX1NJWkUocjEyKQogCUNNUFBURQkwLHIwLHIxMQogCWJkbnpmCTIsMmIKIAl4b3JpCXIxMSxyMTEsUFRFX0gJCS8qIGNsZWFyIEggYWdhaW4gKi8KQEAgLTU5MCw3ICs2NDQsNyBAQAogCiA4OglibGUJY3IxLDlmCQkJLyogaWYgYWxsIHB0ZXMgY2hlY2tlZCAqLwogODE6CWFkZGkJcjYscjYsLTEKLQlhZGRpCXI1LHI1LDQJCQkvKiBhZHZhbmNlIHRvIG5leHQgcHRlICovCisJYWRkaQlyNSxyNSxQVEVfU0laRQogCWFkZGkJcjQscjQsMHgxMDAwCiAJbHd6CXIwLDAocjUpCQkvKiBjaGVjayBuZXh0IHB0ZSAqLwogCWNtcHdpCWNyMSxyNiwxCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA4OTIwZWVhLi41YzY0YWYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIHRwcm90ID0gcHJvdDsKIAogCQkvKiBNYWtlIGtlcm5lbCB0ZXh0IGV4ZWN1dGFibGUgKi8KLQkJaWYgKGluX2tlcm5lbF90ZXh0KHZhZGRyKSkKKwkJaWYgKG92ZXJsYXBzX2tlcm5lbF90ZXh0KHZhZGRyLCB2YWRkciArIHN0ZXApKQogCQkJdHByb3QgJj0gfkhQVEVfUl9OOwogCiAJCWhhc2ggPSBocHRfaGFzaCh2YSwgc2hpZnQsIHNzaXplKTsKQEAgLTM0OCw2ICszNDgsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogLyogU2NhbiBmb3IgMTZHIG1lbW9yeSBibG9ja3MgdGhhdCBoYXZlIGJlZW4gc2V0IGFzaWRlIGZvciBodWdlIHBhZ2VzCiAgKiBhbmQgcmVzZXJ2ZSB0aG9zZSBibG9ja3MgZm9yIDE2RyBodWdlIHBhZ2VzLgogICovCkBAIC0zODUsNiArMzg2LDcgQEAKIAlhZGRfZ3BhZ2UocGh5c19hZGRyLCBibG9ja19zaXplLCBleHBlY3RlZF9wYWdlcyk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9pbml0X3BhZ2Vfc2l6ZXModm9pZCkKIHsKQEAgLTUzOSw3ICs1NDEsNyBAQAogdm9pZCBjcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyhzdGFydCwgZW5kLCBfX3BhKHN0YXJ0KSwKLQkJCQkgUEFHRV9LRVJORUwsIG1tdV9saW5lYXJfcHNpemUsCisJCQkJIHBncHJvdF92YWwoUEFHRV9LRVJORUwpLCBtbXVfbGluZWFyX3BzaXplLAogCQkJCSBtbXVfa2VybmVsX3NzaXplKSk7CiB9CiAKQEAgLTY0Nyw3ICs2NDksNyBAQAogCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKIAl9CiAKLQlwcm90ID0gUEFHRV9LRVJORUw7CisJcHJvdCA9IHBncHJvdF92YWwoUEFHRV9LRVJORUwpOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogCWxpbmVhcl9tYXBfaGFzaF9jb3VudCA9IGxtYl9lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IGYxYzJkNTUuLmExMTcwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC0xMjgsMjkgKzEyOCwzNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBCYXNlIHBhZ2Ugc2l6ZSBhZmZlY3RzIGhvdyB3ZSB3YWxrIGh1Z2V0bGIgcGFnZSB0YWJsZXMgKi8KLSNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotI2RlZmluZSBocG1kX29mZnNldChwdWQsIGFkZHIsIGgpCXBtZF9vZmZzZXQocHVkLCBhZGRyKQotI2RlZmluZSBocG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIsIGgpCXBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUKLXBtZF90ICpocG1kX29mZnNldChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKKworc3RhdGljIHB1ZF90ICpocHVkX29mZnNldChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKIHsKLQlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPT0gUEFHRV9TSElGVF82NEspCisJaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpIDwgUFVEX1NISUZUKQorCQlyZXR1cm4gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIChwdWRfdCAqKSBwZ2Q7Cit9CitzdGF0aWMgcHVkX3QgKmhwdWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCit7CisJaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpIDwgUFVEX1NISUZUKQorCQlyZXR1cm4gcHVkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIChwdWRfdCAqKSBwZ2Q7Cit9CitzdGF0aWMgcG1kX3QgKmhwbWRfb2Zmc2V0KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQoreworCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBNRF9TSElGVCkKIAkJcmV0dXJuIHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAllbHNlCiAJCXJldHVybiAocG1kX3QgKikgcHVkOwogfQotc3RhdGljIGlubGluZQotcG1kX3QgKmhwbWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCitzdGF0aWMgcG1kX3QgKmhwbWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCiB7Ci0JaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpID09IFBBR0VfU0hJRlRfNjRLKQorCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBNRF9TSElGVCkKIAkJcmV0dXJuIHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKIAllbHNlCiAJCXJldHVybiAocG1kX3QgKikgcHVkOwogfQotI2VuZGlmCiAKIC8qIEJ1aWxkIGxpc3Qgb2YgYWRkcmVzc2VzIG9mIGdpZ2FudGljIHBhZ2VzLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGVhcmx5CiAgKiBib290IGJlZm9yZSB0aGUgYnVkZHkgb3IgYm9vdG1lbSBhbGxvY2F0b3IgaXMgc2V0dXAuCkBAIC0yMDQsNyArMjEyLDcgQEAKIAogCXBnID0gcGdkX29mZnNldChtbSwgYWRkcik7CiAJaWYgKCFwZ2Rfbm9uZSgqcGcpKSB7Ci0JCXB1ID0gcHVkX29mZnNldChwZywgYWRkcik7CisJCXB1ID0gaHB1ZF9vZmZzZXQocGcsIGFkZHIsIGhzdGF0ZSk7CiAJCWlmICghcHVkX25vbmUoKnB1KSkgewogCQkJcG0gPSBocG1kX29mZnNldChwdSwgYWRkciwgaHN0YXRlKTsKIAkJCWlmICghcG1kX25vbmUoKnBtKSkKQEAgLTIzMyw3ICsyNDEsNyBAQAogCWFkZHIgJj0gaHN0YXRlLT5tYXNrOwogCiAJcGcgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKLQlwdSA9IHB1ZF9hbGxvYyhtbSwgcGcsIGFkZHIpOworCXB1ID0gaHB1ZF9hbGxvYyhtbSwgcGcsIGFkZHIsIGhzdGF0ZSk7CiAKIAlpZiAocHUpIHsKIAkJcG0gPSBocG1kX2FsbG9jKG1tLCBwdSwgYWRkciwgaHN0YXRlKTsKQEAgLTMxNiwxMyArMzI0LDcgQEAKIAlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQkJaWYgKHB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKQotCQkJY29udGludWU7Ci0JCWh1Z2V0bGJfZnJlZV9wbWRfcmFuZ2UodGxiLCBwdWQsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLAotCQkJCSAgICAgICBwc2l6ZSk7Ci0jZWxzZQotCQlpZiAoc2hpZnQgPT0gUEFHRV9TSElGVF82NEspIHsKKwkJaWYgKHNoaWZ0IDwgUE1EX1NISUZUKSB7CiAJCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCiAJCQkJY29udGludWU7CiAJCQlodWdldGxiX2ZyZWVfcG1kX3JhbmdlKHRsYiwgcHVkLCBhZGRyLCBuZXh0LCBmbG9vciwKQEAgLTMzMiw3ICszMzQsNiBAQAogCQkJCWNvbnRpbnVlOwogCQkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcHVkLCBwc2l6ZSk7CiAJCX0KLSNlbmRpZgogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCiAJc3RhcnQgJj0gUEdESVJfTUFTSzsKQEAgLTQyMiw5ICs0MjMsMTUgQEAKIAkJcHNpemUgPSBnZXRfc2xpY2VfcHNpemUodGxiLT5tbSwgYWRkcik7CiAJCUJVR19PTighbW11X2h1Z2VfcHNpemVzW3BzaXplXSk7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQotCQkJY29udGludWU7Ci0JCWh1Z2V0bGJfZnJlZV9wdWRfcmFuZ2UodGxiLCBwZ2QsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKKwkJaWYgKG1tdV9wc2l6ZV90b19zaGlmdChwc2l6ZSkgPCBQVURfU0hJRlQpIHsKKwkJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKKwkJCQljb250aW51ZTsKKwkJCWh1Z2V0bGJfZnJlZV9wdWRfcmFuZ2UodGxiLCBwZ2QsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwZ2Rfbm9uZSgqcGdkKSkKKwkJCQljb250aW51ZTsKKwkJCWZyZWVfaHVnZXB0ZV9yYW5nZSh0bGIsIChodWdlcGRfdCAqKXBnZCwgcHNpemUpOworCQl9CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDAzNmZlMmYuLjNlNmE2NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMjI4LDggKzIyOCw4IEBACiAJCQlzdGFydCwgcCwgX19wYShwKSk7CiAKIAkJbWFwcGVkID0gaHRhYl9ib2x0X21hcHBpbmcoc3RhcnQsIHN0YXJ0ICsgcGFnZV9zaXplLCBfX3BhKHApLAotCQkJCQkgICBQQUdFX0tFUk5FTCwgbW11X3ZtZW1tYXBfcHNpemUsCi0JCQkJCSAgIG1tdV9rZXJuZWxfc3NpemUpOworCQkJCQkgICBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSwKKwkJCQkJICAgbW11X3ZtZW1tYXBfcHNpemUsIG1tdV9rZXJuZWxfc3NpemUpOwogCQlCVUdfT04obWFwcGVkIDwgMCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggMWM5M2MyNS4uYjllMWExZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNzUsMTEgKzc1LDEwIEBACiAKIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbikKIHsKLQl1bnNpZ25lZCBsb25nIHBhZGRyID0gKHBmbiA8PCBQQUdFX1NISUZUKTsKLQogI2lmbmRlZiBDT05GSUdfUFBDNjQJLyogWFhYIGZvciBub3cgKi8KLQlyZXR1cm4gcGFkZHIgPCBfX3BhKGhpZ2hfbWVtb3J5KTsKKwlyZXR1cm4gcGZuIDwgbWF4X3BmbjsKICNlbHNlCisJdW5zaWduZWQgbG9uZyBwYWRkciA9IChwZm4gPDwgUEFHRV9TSElGVCk7CiAJaW50IGk7CiAJZm9yIChpPTA7IGkgPCBsbWIubWVtb3J5LmNudDsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKQEAgLTEzNSwyMyArMTM0LDYgQEAKIAogCXJldHVybiBfX2FkZF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIH0KLQotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCi1pbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCWludCByZXQ7Ci0KLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCS8qIEFyY2gtc3BlY2lmaWMgY2FsbHMgZ28gaGVyZSAtIG5leHQgcGF0Y2ggKi8KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCBkOWExODEzLi42Y2Y1YzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTg5LDYgKzg5LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBnZXRfYWN0aXZlX3JlZ2lvbl93b3JrX2ZuIC0gQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldF9ub2RlX2FjdGl2ZV9yZWdpb24KKyAqCVJldHVybnMgZGF0YXggc2V0IHRvIHRoZSBzdGFydF9wZm4gYW5kIGVuZF9wZm4gaWYgdGhleSBjb250YWluCisgKgl0aGUgaW5pdGlhbCB2YWx1ZSBvZiBkYXRheC0+c3RhcnRfcGZuIGJldHdlZW4gdGhlbQorICogQHN0YXJ0X3Bmbjogc3RhcnQgcGFnZShpbmNsdXNpdmUpIG9mIHJlZ2lvbiB0byBjaGVjaworICogQGVuZF9wZm46IGVuZCBwYWdlKGV4Y2x1c2l2ZSkgb2YgcmVnaW9uIHRvIGNoZWNrCisgKiBAZGF0YXg6IGNvbWVzIGluIHdpdGggLT5zdGFydF9wZm4gc2V0IHRvIHZhbHVlIHRvIHNlYXJjaCBmb3IgYW5kCisgKglnb2VzIG91dCB3aXRoIGFjdGl2ZSByYW5nZSBpZiBpdCBjb250YWlucyBpdAorICogUmV0dXJucyAxIGlmIHNlYXJjaCB2YWx1ZSBpcyBpbiByYW5nZSBlbHNlIDAKKyAqLworc3RhdGljIGludCBfX2luaXQgZ2V0X2FjdGl2ZV9yZWdpb25fd29ya19mbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCB2b2lkICpkYXRheCkKK3sKKwlzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uICpkYXRhOworCWRhdGEgPSAoc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiAqKWRhdGF4OworCisJaWYgKHN0YXJ0X3BmbiA8PSBkYXRhLT5zdGFydF9wZm4gJiYgZW5kX3BmbiA+IGRhdGEtPnN0YXJ0X3BmbikgeworCQlkYXRhLT5zdGFydF9wZm4gPSBzdGFydF9wZm47CisJCWRhdGEtPmVuZF9wZm4gPSBlbmRfcGZuOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CisKK30KKworLyoKKyAqIGdldF9ub2RlX2FjdGl2ZV9yZWdpb24gLSBSZXR1cm4gYWN0aXZlIHJlZ2lvbiBjb250YWluaW5nIHN0YXJ0X3BmbgorICogQHN0YXJ0X3BmbjogVGhlIHBhZ2UgdG8gcmV0dXJuIHRoZSByZWdpb24gZm9yLgorICogQG5vZGVfYXI6IFJldHVybmVkIHNldCB0byB0aGUgYWN0aXZlIHJlZ2lvbiBjb250YWluaW5nIHN0YXJ0X3BmbgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJICAgICAgIHN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gKm5vZGVfYXIpCit7CisJaW50IG5pZCA9IGVhcmx5X3Bmbl90b19uaWQoc3RhcnRfcGZuKTsKKworCW5vZGVfYXItPm5pZCA9IG5pZDsKKwlub2RlX2FyLT5zdGFydF9wZm4gPSBzdGFydF9wZm47CisJd29ya193aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgZ2V0X2FjdGl2ZV9yZWdpb25fd29ya19mbiwgbm9kZV9hcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBtYXBfY3B1X3RvX25vZGUoaW50IGNwdSwgaW50IG5vZGUpCiB7CiAJbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV0gPSBub2RlOwpAQCAtMTUwLDYgKzE5MCwyMSBAQAogCXJldHVybiBvZl9nZXRfcHJvcGVydHkoZGV2LCAiaWJtLGFzc29jaWF0aXZpdHkiLCBOVUxMKTsKIH0KIAorLyoKKyAqIFJldHVybnMgdGhlIHByb3BlcnR5IGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IGlmCisgKiBpdCBleGlzdHMgKHRoZSBwcm9wZXJ0eSBleGlzdHMgb25seSBpbiBrZXhlYy9rZHVtcCBrZXJuZWxzLAorICogYWRkZWQgYnkga2V4ZWMtdG9vbHMpCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgKm9mX2dldF91c2FibGVfbWVtb3J5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5KQoreworCWNvbnN0IHUzMiAqcHJvcDsKKwl1MzIgbGVuOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobWVtb3J5LCAibGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkiLCAmbGVuKTsKKwlpZiAoIXByb3AgfHwgbGVuIDwgc2l6ZW9mKHVuc2lnbmVkIGludCkpCisJCXJldHVybiAwOworCXJldHVybiBwcm9wOworfQorCiAvKiBSZXR1cm5zIG5pZCBpbiB0aGUgcmFuZ2UgWzAuLk1BWF9OVU1OT0RFUy0xXSwgb3IgLTEgaWYgbm8gdXNlZnVsIG51bWEKICAqIGluZm8gaXMgZm91bmQuCiAgKi8KQEAgLTQ4NywxNCArNTQyLDI5IEBACiB9CiAKIC8qCisgKiBSZWFkcyB0aGUgY291bnRlciBmb3IgYSBnaXZlbiBlbnRyeSBpbgorICogbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgcHJvcGVydHkKKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pbml0IHJlYWRfdXNtX3Jhbmdlcyhjb25zdCB1MzIgKip1c20pCit7CisJLyoKKwkgKiBGb3IgZWFjaCBsbWIgaW4gaWJtLGR5bmFtaWMtbWVtb3J5IGEgY29ycmVzcG9uZGluZworCSAqIGVudHJ5IGluIGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IHByb3BlcnR5IGNvbnRhaW5zCisJICogYSBjb3VudGVyIGZvbGxvd2VkIGJ5IHRoYXQgbWFueSAoYmFzZSwgc2l6ZSkgZHVwbGUuCisJICogcmVhZCB0aGUgY291bnRlciBmcm9tIGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5CisJICovCisJcmV0dXJuIHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCB1c20pOworfQorCisvKgogICogRXh0cmFjdCBOVU1BIGluZm9ybWF0aW9uIGZyb20gdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkKICAqIG5vZGUuICBUaGlzIGFzc3VtZXMgbl9tZW1fe2FkZHIsc2l6ZX1fY2VsbHMgaGF2ZSBiZWVuIHNldC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2RyY29uZl9tZW1vcnkoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkpCiB7Ci0JY29uc3QgdTMyICpkbTsKLQl1bnNpZ25lZCBpbnQgbiwgcmM7Ci0JdW5zaWduZWQgbG9uZyBsbWJfc2l6ZSwgc2l6ZTsKKwljb25zdCB1MzIgKmRtLCAqdXNtOworCXVuc2lnbmVkIGludCBuLCByYywgcmFuZ2VzLCBpc19rZXhlY19rZHVtcCA9IDA7CisJdW5zaWduZWQgbG9uZyBsbWJfc2l6ZSwgYmFzZSwgc2l6ZSwgc3o7CiAJaW50IG5pZDsKIAlzdHJ1Y3QgYXNzb2NfYXJyYXlzIGFhOwogCkBAIC01MTAsNiArNTgwLDExIEBACiAJaWYgKHJjKQogCQlyZXR1cm47CiAKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsICovCisJdXNtID0gb2ZfZ2V0X3VzYWJsZV9tZW1vcnkobWVtb3J5KTsKKwlpZiAodXNtICE9IE5VTEwpCisJCWlzX2tleGVjX2tkdW1wID0gMTsKKwogCWZvciAoOyBuICE9IDA7IC0tbikgewogCQlzdHJ1Y3Qgb2ZfZHJjb25mX2NlbGwgZHJtZW07CiAKQEAgLTUyMSwyMSArNTk2LDMxIEBACiAJCSAgICB8fCAhKGRybWVtLmZsYWdzICYgRFJDT05GX01FTV9BU1NJR05FRCkpCiAJCQljb250aW51ZTsKIAotCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCWJhc2UgPSBkcm1lbS5iYXNlX2FkZHI7CisJCXNpemUgPSBsbWJfc2l6ZTsKKwkJcmFuZ2VzID0gMTsKIAotCQlmYWtlX251bWFfY3JlYXRlX25ld19ub2RlKAotCQkJCSgoZHJtZW0uYmFzZV9hZGRyICsgbG1iX3NpemUpID4+IFBBR0VfU0hJRlQpLAorCQlpZiAoaXNfa2V4ZWNfa2R1bXApIHsKKwkJCXJhbmdlcyA9IHJlYWRfdXNtX3JhbmdlcygmdXNtKTsKKwkJCWlmICghcmFuZ2VzKSAvKiB0aGVyZSBhcmUgbm8gKGJhc2UsIHNpemUpIGR1cGxlICovCisJCQkJY29udGludWU7CisJCX0KKwkJZG8geworCQkJaWYgKGlzX2tleGVjX2tkdW1wKSB7CisJCQkJYmFzZSA9IHJlYWRfbl9jZWxscyhuX21lbV9hZGRyX2NlbGxzLCAmdXNtKTsKKwkJCQlzaXplID0gcmVhZF9uX2NlbGxzKG5fbWVtX3NpemVfY2VsbHMsICZ1c20pOworCQkJfQorCQkJbmlkID0gb2ZfZHJjb25mX3RvX25pZF9zaW5nbGUoJmRybWVtLCAmYWEpOworCQkJZmFrZV9udW1hX2NyZWF0ZV9uZXdfbm9kZSgKKwkJCQkoKGJhc2UgKyBzaXplKSA+PiBQQUdFX1NISUZUKSwKIAkJCQkJICAgJm5pZCk7Ci0KLQkJbm9kZV9zZXRfb25saW5lKG5pZCk7Ci0KLQkJc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQoZHJtZW0uYmFzZV9hZGRyLCBsbWJfc2l6ZSk7Ci0JCWlmICghc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWFkZF9hY3RpdmVfcmFuZ2UobmlkLCBkcm1lbS5iYXNlX2FkZHIgPj4gUEFHRV9TSElGVCwKLQkJCQkgKGRybWVtLmJhc2VfYWRkciA+PiBQQUdFX1NISUZUKQotCQkJCSArIChzaXplID4+IFBBR0VfU0hJRlQpKTsKKwkJCW5vZGVfc2V0X29ubGluZShuaWQpOworCQkJc3ogPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGJhc2UsIHNpemUpOworCQkJaWYgKHN6KQorCQkJCWFkZF9hY3RpdmVfcmFuZ2UobmlkLCBiYXNlID4+IFBBR0VfU0hJRlQsCisJCQkJCQkgKGJhc2UgPj4gUEFHRV9TSElGVCkKKwkJCQkJCSArIChzeiA+PiBQQUdFX1NISUZUKSk7CisJCX0gd2hpbGUgKC0tcmFuZ2VzKTsKIAl9CiB9CiAKQEAgLTgzNywzOCArOTIyLDUwIEBACiAJCQkJICBzdGFydF9wZm4sIGVuZF9wZm4pOwogCiAJCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgZW5kX3Bmbik7CisJfQogCi0JCS8qIE1hcmsgcmVzZXJ2ZWQgcmVnaW9ucyBvbiB0aGlzIG5vZGUgKi8KLQkJZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewotCQkJdW5zaWduZWQgbG9uZyBwaHlzYmFzZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZTsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKLQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BhZGRyID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworCS8qIE1hcmsgcmVzZXJ2ZWQgcmVnaW9ucyAqLworCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBwaHlzYmFzZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5zaXplOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHBoeXNiYXNlID4+IFBBR0VfU0hJRlQ7CisJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9ICgocGh5c2Jhc2UgKyBzaXplKSA+PiBQQUdFX1NISUZUKTsKKwkJc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiBub2RlX2FyOwogCi0JCQlpZiAoZWFybHlfcGZuX3RvX25pZChwaHlzYmFzZSA+PiBQQUdFX1NISUZUKSAhPSBuaWQgJiYKLQkJCSAgICBlYXJseV9wZm5fdG9fbmlkKChwaHlzYmFzZStzaXplLTEpID4+IFBBR0VfU0hJRlQpICE9IG5pZCkKLQkJCQljb250aW51ZTsKKwkJZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbihzdGFydF9wZm4sICZub2RlX2FyKTsKKwkJd2hpbGUgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJCS8qCisJCQkgKiBpZiByZXNlcnZlZCByZWdpb24gZXh0ZW5kcyBwYXN0IGFjdGl2ZSByZWdpb24KKwkJCSAqIHRoZW4gdHJpbSBzaXplIHRvIGFjdGl2ZSByZWdpb24KKwkJCSAqLworCQkJaWYgKGVuZF9wZm4gPiBub2RlX2FyLmVuZF9wZm4pCisJCQkJc2l6ZSA9IChub2RlX2FyLmVuZF9wZm4gPDwgUEFHRV9TSElGVCkKKwkJCQkJLSAoc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQpOworCQkJZGJnKCJyZXNlcnZlX2Jvb3RtZW0gJWx4ICVseCBuaWQ9JWRcbiIsIHBoeXNiYXNlLCBzaXplLAorCQkJCW5vZGVfYXIubmlkKTsKKwkJCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlX2FyLm5pZCksIHBoeXNiYXNlLAorCQkJCQkJc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKwkJCS8qCisJCQkgKiBpZiByZXNlcnZlZCByZWdpb24gaXMgY29udGFpbmVkIGluIHRoZSBhY3RpdmUgcmVnaW9uCisJCQkgKiB0aGVuIGRvbmUuCisJCQkgKi8KKwkJCWlmIChlbmRfcGZuIDw9IG5vZGVfYXIuZW5kX3BmbikKKwkJCQlicmVhazsKIAotCQkJaWYgKHBoeXNiYXNlIDwgZW5kX3BhZGRyICYmCi0JCQkgICAgKHBoeXNiYXNlK3NpemUpID4gc3RhcnRfcGFkZHIpIHsKLQkJCQkvKiBvdmVybGFwcyAqLwotCQkJCWlmIChwaHlzYmFzZSA8IHN0YXJ0X3BhZGRyKSB7Ci0JCQkJCXNpemUgLT0gc3RhcnRfcGFkZHIgLSBwaHlzYmFzZTsKLQkJCQkJcGh5c2Jhc2UgPSBzdGFydF9wYWRkcjsKLQkJCQl9Ci0KLQkJCQlpZiAoc2l6ZSA+IGVuZF9wYWRkciAtIHBoeXNiYXNlKQotCQkJCQlzaXplID0gZW5kX3BhZGRyIC0gcGh5c2Jhc2U7Ci0KLQkJCQlkYmcoInJlc2VydmVfYm9vdG1lbSAlbHggJWx4XG4iLCBwaHlzYmFzZSwKLQkJCQkgICAgc2l6ZSk7Ci0JCQkJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIHBoeXNiYXNlLAotCQkJCQkJICAgICBzaXplLCBCT09UTUVNX0RFRkFVTFQpOwotCQkJfQorCQkJLyoKKwkJCSAqIHJlc2VydmVkIHJlZ2lvbiBleHRlbmRzIHBhc3QgdGhlIGFjdGl2ZSByZWdpb24KKwkJCSAqICAgZ2V0IG5leHQgYWN0aXZlIHJlZ2lvbiB0aGF0IGNvbnRhaW5zIHRoaXMKKwkJCSAqICAgcmVzZXJ2ZWQgcmVnaW9uCisJCQkgKi8KKwkJCXN0YXJ0X3BmbiA9IG5vZGVfYXIuZW5kX3BmbjsKKwkJCXBoeXNiYXNlID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCQlnZXRfbm9kZV9hY3RpdmVfcmVnaW9uKHN0YXJ0X3BmbiwgJm5vZGVfYXIpOwogCQl9CiAKLQkJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkKTsKIAl9CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCisJCXNwYXJzZV9tZW1vcnlfcHJlc2VudF93aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCk7CiB9CiAKIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCAyMDAxYWJkLi5jMzFkNmQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTczLDcgKzczLDcgQEAKICNlbmRpZiAvKiBIQVZFX1RMQkNBTSAqLwogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotLyogNDR4IHVzZXMgYW4gOGtCIHBnZGlyIGJlY2F1c2UgaXQgaGFzIDgtYnl0ZSBMaW51eCBQVEVzLiAqLworLyogU29tZSBwcm9jZXNzb3JzIHVzZSBhbiA4a0IgcGdkaXIgYmVjYXVzZSB0aGV5IGhhdmUgOC1ieXRlIExpbnV4IFBURXMuICovCiAjZGVmaW5lIFBHRElSX09SREVSCTEKICNlbHNlCiAjZGVmaW5lIFBHRElSX09SREVSCTAKQEAgLTI4OCw3ICsyODgsNyBAQAogfQogCiAvKgotICogTWFwIGluIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkgc3RhcnRpbmcgYXQgS0VSTkVMQkFTRS4KKyAqIE1hcCBpbiBhIGJpZyBjaHVuayBvZiBwaHlzaWNhbCBtZW1vcnkgc3RhcnRpbmcgYXQgS0VSTkVMQkFTRS4KICAqLwogdm9pZCBfX2luaXQgbWFwaW5fcmFtKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMKaW5kZXggZWI0YjUxMi4uZjlhNDdmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYwpAQCAtNDUsNiArNDUsNyBAQAogCQlmbHVzaF9oYXNoX3BhZ2VzKG1tLT5jb250ZXh0LmlkLCBhZGRyLCBwdGVwaHlzLCAxKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2hhc2hfZW50cnkpOwogCiAvKgogICogQ2FsbGVkIGJ5IHB0ZXBfc2V0X2FjY2Vzc19mbGFncywgbXVzdCBmbHVzaCBvbiBDUFVzIGZvciB3aGljaCB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYwppbmRleCBmZmY2NjY2Li4yNThmYTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC92bWFfbWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvdm1hX21hcC5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAkgKi8KIAlvdmVybGF5X3RibF9vZmZzZXQgPSB2bWFfbWFwX2xvb2t1cChtYXAsIG92bHlfdGFibGVfc3ltLAogCQkJCQkgICAgYVNwdSwgJmdyZF92YWwpOwotCWlmIChvdmVybGF5X3RibF9vZmZzZXQgPCAwKSB7CisJaWYgKG92ZXJsYXlfdGJsX29mZnNldCA+IDB4MTAwMDAwMDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkgICAgICAgIiVzLCBsaW5lICVkOiBFcnJvciBmaW5kaW5nIFNQVSBvdmVybGF5IHRhYmxlXG4iLAogCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwppbmRleCA0NDZhOGJiLi4zZTNkOTFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC02NCw3ICs2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiB2b2lkIHBwYzY0X2VuYWJsZV9wbWNzKHZvaWQpOworZXh0ZXJuIHZvaWQgcHBjX2VuYWJsZV9wbWNzKHZvaWQpOwogCiAvKgogICogT2xkZXIgQ1BVcyByZXF1aXJlIHRoZSBNTUNSQSBzYW1wbGUgYml0IHRvIGJlIGFsd2F5cyBzZXQsIGJ1dCBuZXdlciAKQEAgLTkxLDcgKzkxLDcgQEAKIAl1bnNpZ25lZCBpbnQgbW1jcjAgPSBtbWNyMF92YWw7CiAJdW5zaWduZWQgbG9uZyBtbWNyYSA9IG1tY3JhX3ZhbDsKIAotCXBwYzY0X2VuYWJsZV9wbWNzKCk7CisJcHBjX2VuYWJsZV9wbWNzKCk7CiAKIAkvKiBzZXQgdGhlIGZyZWV6ZSBiaXQgKi8KIAltbWNyMCB8PSBNTUNSMF9GQzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCmluZGV4IDI0OWJhMDEuLjc5YzExNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAlib29sICJCYW1ib28iCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBFUAogCXNlbGVjdCBQQ0kKIAloZWxwCkBAIC0zMCw2ICszMSw3IEBACiAJYm9vbCAiU2VxdW9pYSIKIAlkZXBlbmRzIG9uIDQ0eAogCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCiAJc2VsZWN0IDQ0MEVQWAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDQwRVBYIGV2YWx1YXRpb24gYm9hcmQuCkBAIC0zOCw2ICs0MCw3IEBACiAJYm9vbCAiVGFpc2hhbiIKIAlkZXBlbmRzIG9uIDQ0eAogCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCiAJc2VsZWN0IDQ0MEdYCiAJc2VsZWN0IFBDSQogCWhlbHAKQEAgLTQ4LDYgKzUxLDcgQEAKIAlib29sICJLYXRtYWkiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBTUGUKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUwpAQCAtNTgsNiArNjIsNyBAQAogCWJvb2wgIlJhaW5pZXIiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBHUlgKIAlzZWxlY3QgUENJCiAJaGVscApAQCAtNzYsMjAgKzgxLDQ4IEBACiAJICBTZWUgaHR0cDovL3d3dy5waWthdGVjaG5vbG9naWVzLmNvbS8gYW5kIGZvbGxvdyB0aGUgIlBJS0EgZm9yIENvbXB1dGVyCiAJICBUZWxlcGhvbnkgRGV2ZWxvcGVycyIgbGluayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIEFSQ0hFUworCWJvb2wgIkFyY2hlcyIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MEVYICMgT2RkIHNpbmNlIGl0IHVzZXMgNDYwR1QgYnV0IHRoZSBlZmZlY3RzIGFyZSB0aGUgc2FtZQorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQU1DQyBEdWFsIFBQQzQ2MEdUIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBDQU5ZT05MQU5EUwogCWJvb2wgIkNhbnlvbmxhbmRzIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDYwRVgKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUworCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKKwlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEVYIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBHTEFDSUVSCisJYm9vbCAiR2xhY2llciIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MEVYICMgT2RkIHNpbmNlIGl0IHVzZXMgNDYwR1QgYnV0IHRoZSBlZmZlY3RzIGFyZSB0aGUgc2FtZQorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwR1QgZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFlPU0VNSVRFCiAJYm9vbCAiWW9zZW1pdGUiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBFUAogCXNlbGVjdCBQQ0kKIAloZWxwCkBAIC0xMjcsNiArMTYwLDEzIEBACiAJICBNb3N0IFZpcnRleCA1IGRlc2lnbnMgc2hvdWxkIHVzZSB0aGlzIHVubGVzcyBpdCBuZWVkcyB0byBkbyBzb21lCiAJICBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gYXQgYm9hcmQgcHJvYmUgdGltZS4KIAorY29uZmlnIFBQQzQ0eF9TSU1QTEUKKwlib29sICJTaW1wbGUgUG93ZXJQQyA0NHggYm9hcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHNpbXBsZSBQb3dlclBDIDQ0eCBwbGF0Zm9ybSBzdXBwb3J0LgorCiAjIDQ0eCBzcGVjaWZpYyBDUFUgbW9kdWxlcywgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGJvYXJkIGFib3ZlLgogY29uZmlnIDQ0MEVQCiAJYm9vbApAQCAtMTcwLDggKzIxMCw2IEBACiAJYm9vbAogCXNlbGVjdCBQUENfRlBVCiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAotCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKLQlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKIAlzZWxlY3QgSUJNX05FV19FTUFDX1RBSAogCiAjIDQ0eCBlcnJhdGEvd29ya2Fyb3VuZCBjb25maWcgc3ltYm9scywgc2VsZWN0ZWQgYnkgdGhlIENQVSBtb2RlbHMgYWJvdmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKaW5kZXggOGQwYjFhMS4uNjk4MTMzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKQEAgLTEsMTMgKzEsNyBAQAogb2JqLSQoQ09ORklHXzQ0eCkJOj0gbWlzY180NHgubyBpZGxlLm8KK29iai0kKENPTkZJR19QUEM0NHhfU0lNUExFKSArPSBwcGM0NHhfc2ltcGxlLm8KIG9iai0kKENPTkZJR19FQk9OWSkJKz0gZWJvbnkubwotb2JqLSQoQ09ORklHX1RBSVNIQU4pCSs9IHRhaXNoYW4ubwotb2JqLSQoQ09ORklHX0JBTUJPTykJKz0gYmFtYm9vLm8KLW9iai0kKENPTkZJR19ZT1NFTUlURSkJKz0gYmFtYm9vLm8KIG9iai0kKENPTkZJR19TQU00NDBFUCkgCSs9IHNhbTQ0MGVwLm8KLW9iai0kKENPTkZJR19TRVFVT0lBKQkrPSBzZXF1b2lhLm8KLW9iai0kKENPTkZJR19LQVRNQUkpCSs9IGthdG1haS5vCi1vYmotJChDT05GSUdfUkFJTklFUikJKz0gcmFpbmllci5vCiBvYmotJChDT05GSUdfV0FSUCkJKz0gd2FycC5vCiBvYmotJChDT05GSUdfV0FSUCkJKz0gd2FycC1uYW5kLm8KLW9iai0kKENPTkZJR19DQU5ZT05MQU5EUykgKz0gY2FueW9ubGFuZHMubwogb2JqLSQoQ09ORklHX1hJTElOWF9WSVJURVhfNV9GWFQpICs9IHZpcnRleC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9iYW1ib28uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2JhbWJvby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWYxNjllLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2JhbWJvby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIEJhbWJvbyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwotICoKLSAqIFdhZGUgRmFybnN3b3J0aCA8d2Zhcm5zd29ydGhAbXZpc3RhLmNvbT4KLSAqIENvcHlyaWdodCAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFJld3JpdHRlbiBhbmQgcG9ydGVkIHRvIHRoZSBtZXJnZWQgcG93ZXJwYyB0cmVlOgotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBiYW1ib29fb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYmFtYm9vX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBiYW1ib29fb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoYmFtYm9vLCBiYW1ib29fZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgYmFtYm9vX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2MsYmFtYm9vIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUoYmFtYm9vKSB7Ci0JLm5hbWUgCQkJPSAiQmFtYm9vIiwKLQkucHJvYmUgCQkJPSBiYW1ib29fcHJvYmUsCi0JLnByb2dyZXNzIAkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IgCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9jYW55b25sYW5kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0OTI4OS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9jYW55b25sYW5kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENhbnlvbmxhbmRzIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgotICoKLSAqIEJhc2VkIG9uIHRoZSBLYXRtYWkgY29kZSBieQotICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCi0gKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VpYy5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNhbnlvbmxhbmRzX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhbnlvbmxhbmRzX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBjYW55b25sYW5kc19vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChjYW55b25sYW5kcywgY2FueW9ubGFuZHNfZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgY2FueW9ubGFuZHNfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxjYW55b25sYW5kcyIpKQotCQlyZXR1cm4gMDsKLQotCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKGNhbnlvbmxhbmRzKSB7Ci0JLm5hbWUgCQkJCT0gIkNhbnlvbmxhbmRzIiwKLQkucHJvYmUgCQkJCT0gY2FueW9ubGFuZHNfcHJvYmUsCi0JLnByb2dyZXNzIAkJCT0gdWRiZ19wcm9ncmVzcywKLQkuaW5pdF9JUlEgCQkJPSB1aWNfaW5pdF90cmVlLAotCS5nZXRfaXJxIAkJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyCQkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2thdG1haS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjRiM2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogS2F0bWFpIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCi0gKgotICogQmFzZWQgb24gdGhlIEJhbWJvbyBjb2RlIGJ5Ci0gKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VpYy5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGthdG1haV9vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrYXRtYWlfZGV2aWNlX3Byb2JlKHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIGthdG1haV9vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChrYXRtYWksIGthdG1haV9kZXZpY2VfcHJvYmUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBrYXRtYWlfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxrYXRtYWkiKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKLQotCXJldHVybiAxOwotfQotCi1kZWZpbmVfbWFjaGluZShrYXRtYWkpIHsKLQkubmFtZSAJCQkJPSAiS2F0bWFpIiwKLQkucHJvYmUgCQkJCT0ga2F0bWFpX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2NzEyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogR2VuZXJpYyBQb3dlclBDIDQ0eCBwbGF0Zm9ybSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBpbXBsZW1lbnRzIHNpbXBsZSBwbGF0Zm9ybSBzdXBwb3J0IGZvciBQb3dlclBDIDQ0eCBjaGlwcy4gIFRoaXMgaXMKKyAqIG1vc3RseSB1c2VkIGZvciBldmFsIGJvYXJkcyBvciBvdGhlciBzaW1wbGUgYW5kICJnZW5lcmljIiA0NHggYm9hcmRzLiAgSWYKKyAqIHlvdXIgYm9hcmQgaGFzIGN1c3RvbSBmdW5jdGlvbnMgb3IgaGFyZHdhcmUsIHRoZW4geW91IHdpbGwgbGlrZWx5IHdhbnQgdG8KKyAqIGltcGxlbWVudCB5b3VyIG93biBib2FyZC5jIGZpbGUgdG8gYWNjb21tb2RhdGUgaXQuCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL3VpYy5oPgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHBjNDR4X29mX2J1c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBjNDR4X2RldmljZV9wcm9iZSh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBwcGM0NHhfb2ZfYnVzLCBOVUxMKTsKKworCXJldHVybiAwOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwocHBjNDR4X3NpbXBsZSwgcHBjNDR4X2RldmljZV9wcm9iZSk7CisKKy8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYm9hcmRzIHRoYXQgY2FuIGJlIHN1cHBvcnRlZCBieSB0aGlzIHNpbXBsZQorICogcGxhdGZvcm0gY29kZS4gIFRoaXMgZG9lcyBfbm90XyBtZWFuIHRoZSBib2FyZHMgYXJlIGNvbXBhdGlibGUsCisgKiBhcyB0aGV5IG1vc3QgY2VydGFpbmx5IGFyZSBub3QgZnJvbSBhIGRldmljZSB0cmVlIHBlcnNwZWN0aXZlLgorICogSG93ZXZlciwgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGhhbmRsZWQgYnkgdGhlIGRldmljZSB0cmVlIGFuZCB0aGUKKyAqIGRyaXZlcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGRvbid0IG5lZWQgY3VzdG9tIGJvYXJkIHN1cHBvcnQgZmlsZXMuCisgKgorICogQWdhaW4sIGlmIHlvdXIgYm9hcmQgbmVlZHMgdG8gZG8gdGhpbmdzIGRpZmZlcmVudGx5IHRoZW4gY3JlYXRlIGEKKyAqIGJvYXJkLmMgZmlsZSBmb3IgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0IHRvIHRoaXMgbGlzdC4KKyAqLworc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKKwkiYW1jYyxhcmNoZXMiLAorCSJhbWNjLGJhbWJvbyIsCisJImFtY2MsY2FueW9ubGFuZHMiLAorCSJhbWNjLGdsYWNpZXIiLAorCSJpYm0sZWJvbnkiLAorCSJhbWNjLGthdG1haSIsCisJImFtY2MscmFpbmllciIsCisJImFtY2Msc2VxdW9pYSIsCisJImFtY2MsdGFpc2hhbiIsCisJImFtY2MseW9zZW1pdGUiCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcGM0NHhfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm9hcmQpOyBpKyspIHsKKwkJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCBib2FyZFtpXSkpIHsKKwkJCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUocHBjNDR4X3NpbXBsZSkgeworCS5uYW1lID0gIlBvd2VyUEMgNDR4IFBsYXRmb3JtIiwKKwkucHJvYmUgPSBwcGM0NHhfcHJvYmUsCisJLnByb2dyZXNzID0gdWRiZ19wcm9ncmVzcywKKwkuaW5pdF9JUlEgPSB1aWNfaW5pdF90cmVlLAorCS5nZXRfaXJxID0gdWljX2dldF9pcnEsCisJLnJlc3RhcnQgPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAorCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjFmZjg0Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3JhaW5pZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBSYWluaWVyIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogVmFsZW50aW5lIEJhcnNoYWsgPHZiYXJzaGFrQHJ1Lm12aXN0YS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgQmFtYm9vIGNvZGUgYnkKLSAqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmFpbmllcl9vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCByYWluaWVyX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCByYWluaWVyX29mX2J1cywgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHJhaW5pZXIsIHJhaW5pZXJfZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgcmFpbmllcl9wcm9iZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLQotCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJhbWNjLHJhaW5pZXIiKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKLQotCXJldHVybiAxOwotfQotCi1kZWZpbmVfbWFjaGluZShyYWluaWVyKSB7Ci0JLm5hbWUgCQkJCT0gIlJhaW5pZXIiLAotCS5wcm9iZSAJCQkJPSByYWluaWVyX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWI3M2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvc2VxdW9pYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIFNlcXVvaWEgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKLSAqCi0gKiBWYWxlbnRpbmUgQmFyc2hhayA8dmJhcnNoYWtAcnUubXZpc3RhLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIEJhc2VkIG9uIHRoZSBCYW1ib28gY29kZSBieQotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotCi0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNlcXVvaWFfb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2VxdW9pYV9kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgc2VxdW9pYV9vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChzZXF1b2lhLCBzZXF1b2lhX2RldmljZV9wcm9iZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNlcXVvaWFfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxzZXF1b2lhIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUoc2VxdW9pYSkgewotCS5uYW1lIAkJCQk9ICJTZXF1b2lhIiwKLQkucHJvYmUgCQkJCT0gc2VxdW9pYV9wcm9iZSwKLQkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCi0JLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvdGFpc2hhbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvdGFpc2hhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWM3OGIyLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBUYWlzaGFuIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzIGJhc2VkIG9mZiBlYm9ueS5jIGNvZGUKLSAqIG9yaWdpbmFsIGNvcHlyaWdodHMgYmVsb3cKLSAqCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDItMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzCi0gKgotICogUmV3cml0dGVuIGFuZCBwb3J0ZWQgdG8gdGhlIG1lcmdlZCBwb3dlcnBjIHRyZWU6Ci0gKiBDb3B5cmlnaHQgMjAwNyBEYXZpZCBHaWJzb24gPGR3Z0BhdTEuaWJtLmNvbT4sIElCTSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBNb2RpZmllZCBmcm9tIGVib255LmMgZm9yIHRhaXNoYW46Ci0gKiBDb3B5cmlnaHQgMjAwNyBIdWdoIEJsZW1pbmdzIDxodWdoQGF1LmlibS5jb20+LCBJQk0gQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCB0YWlzaGFuX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRhaXNoYW5fZGV2aWNlX3Byb2JlKHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHRhaXNoYW5fb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwodGFpc2hhbiwgdGFpc2hhbl9kZXZpY2VfcHJvYmUpOwotCi0vKgotICogQ2FsbGVkIHZlcnkgZWFybHksIE1NVSBpcyBvZmYsIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRhaXNoYW5fcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyx0YWlzaGFuIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUodGFpc2hhbikgewotCS5uYW1lCQkJPSAiVGFpc2hhbiIsCi0JLnByb2JlCQkJPSB0YWlzaGFuX3Byb2JlLAotCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUQkJPSB1aWNfaW5pdF90cmVlLAotCS5nZXRfaXJxCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwppbmRleCBjNjJmODkzLi4zMjY4NTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwpAQCAtMyw2ICszLDggQEAKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBJUElDCiAJc2VsZWN0IFBQQ19DTE9DSworCXNlbGVjdCBQUENfUENJX0NIT0lDRQorCXNlbGVjdCBGU0xfUENJIGlmIFBDSQogCiBjb25maWcgUFBDX01QQzUxMjEKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCmluZGV4IDVlYmY2OTMuLjQ0MWFiYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCkBAIC0yMiwxNiArMjIsMjYgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogI2luY2x1ZGUgIm1wYzUxMjFfYWRzLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM1MTIxX2Fkc19zZXR1cF9hcmNoKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisjZW5kaWYKIAlwcmludGsoS0VSTl9JTkZPICJNUEM1MTIxIEFEUyBib2FyZCBmcm9tIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAkvKgogCSAqIGNwbGQgcmVncyBhcmUgbmVlZGVkIGVhcmx5CiAJICovCiAJbXBjNTEyMV9hZHNfY3BsZF9tYXAoKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzUxMjEtcGNpIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyMV9hZHNfaW5pdF9JUlEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKaW5kZXggNGQ1ZmQxZC4uMDQ0YjRlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlvZl9ub2RlX3B1dChucCk7CiAJaWYgKCF4bGIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKLQkJCSJFcnJvciBtYXBwaW5nIFhMQiBpbiBtcGM1Mnh4X3NldHVwX2NwdSgpLiAgIgorCQkJIkVycm9yIG1hcHBpbmcgWExCIGluIG1wYzUyeHhfc2V0dXBfY3B1KCkuICIKIAkJCSJFeHBlY3Qgc29tZSBhYm5vcm1hbCBiZWhhdmlvclxuIik7CiAJCXJldHVybjsKIAl9CkBAIC0yMTYsNyArMjE2LDggQEAKIAkJb3V0X2JlMzIoJm1wYzUyeHhfd2R0LT5jb3VudCwgMHgwMDAwMDBmZik7CiAJCW91dF9iZTMyKCZtcGM1Mnh4X3dkdC0+bW9kZSwgMHgwMDAwOTAwNCk7CiAJfSBlbHNlCi0JCXByaW50aygibXBjNTJ4eF9yZXN0YXJ0OiBDYW4ndCBhY2Nlc3Mgd2R0LiAiCisJCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiAiCisJCQkibXBjNTJ4eF9yZXN0YXJ0OiBDYW4ndCBhY2Nlc3Mgd2R0LiAiCiAJCQkiUmVzdGFydCBpbXBvc3NpYmxlLCBzeXN0ZW0gaGFsdGVkLlxuIik7CiAKIAl3aGlsZSAoMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BjaS5jCmluZGV4IDVhMzgyYmIuLmI0OWExODUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYwpAQCAtMjY1LDggKzI2NSwxMSBAQAogCS8qIE1lbW9yeSB3aW5kb3dzICovCiAJcmVzID0gJmhvc2UtPm1lbV9yZXNvdXJjZXNbMF07CiAJaWYgKHJlcy0+ZmxhZ3MpIHsKLQkJcHJfZGVidWcoIm1lbV9yZXNvdXJjZVswXSA9IHsuc3RhcnQ9JXgsIC5lbmQ9JXgsIC5mbGFncz0lbHh9XG4iLAotCQkgICAgICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCXByX2RlYnVnKCJtZW1fcmVzb3VyY2VbMF0gPSAiCisJCSAgICAgICAgICJ7LnN0YXJ0PSVsbHgsIC5lbmQ9JWxseCwgLmZsYWdzPSVsbHh9XG4iLAorCQkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZmxhZ3MpOwogCQlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MGJ0YXIsCiAJCSAgICAgICAgIE1QQzUyeHhfUENJX0lXQlRBUl9UUkFOU0xBVElPTihyZXMtPnN0YXJ0LCByZXMtPnN0YXJ0LAogCQkgICAgICAgICAgICAgICAgICByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKSk7CkBAIC0yOTcsOSArMzAwLDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IERpZG4ndCBmaW5kIElPIHJlc291cmNlc1xuIiwgX19GSUxFX18pOwogCQlyZXR1cm47CiAJfQotCXByX2RlYnVnKCIuaW9fcmVzb3VyY2U9ey5zdGFydD0leCwuZW5kPSV4LC5mbGFncz0lbHh9ICIKKwlwcl9kZWJ1ZygiLmlvX3Jlc291cmNlPXsuc3RhcnQ9JWxseCwuZW5kPSVsbHgsLmZsYWdzPSVsbHh9ICIKIAkgICAgICAgICAiLmlvX2Jhc2VfcGh5cz0weCVwXG4iLAotCSAgICAgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKKwkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKIAlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MmJ0YXIsCiAJICAgICAgICAgTVBDNTJ4eF9QQ0lfSVdCVEFSX1RSQU5TTEFUSU9OKGhvc2UtPmlvX2Jhc2VfcGh5cywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLT5zdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKaW5kZXggNzVlYjFlZC4uMzBmMDA4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKQEAgLTM4LDYgKzM4LDE0IEBACiAJICBUaGlzIGJvYXJkIGlzIGFsc28gcmVzb2xkIGJ5IEZyZWVzY2FsZSBhcyB0aGUgUVVJQ0NTdGFydAogCSAgTVBDODI0OCBFdmFsdWF0aW9uIFN5c3RlbSBhbmQvb3IgdGhlIENXSC1QUEMtODI0OE4tVkUuCiAKK2NvbmZpZyBNR0NPR0UKKwlib29sICJLZXltaWxlIE1HQ09HRSIKKwlzZWxlY3QgODI3MgorCXNlbGVjdCA4MjYwCisJc2VsZWN0IEZTTF9TT0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEtleW1pbGUgTUdDT0dFIGJvYXJkLgorCiBlbmRpZgogCiBjb25maWcgUFEyQURTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUKaW5kZXggNmNkNWNkNS4uZDk4Mjc5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19QUTJfQURTX1BDSV9QSUMpICs9IHBxMmFkcy1wY2ktcGljLm8KIG9iai0kKENPTkZJR19QUTJGQURTKSArPSBwcTJmYWRzLm8KIG9iai0kKENPTkZJR19FUDgyNDhFKSArPSBlcDgyNDhlLm8KK29iai0kKENPTkZJR19NR0NPR0UpICs9IG1nY29nZS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZjE2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9tZ2NvZ2UuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEtleW1pbGUgbWdjb2dlIHN1cHBvcnQKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogQXV0aG9yOiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBiYXNlZCBvbiBjb2RlIGZyb206CisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjODI2MC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9jcG0yX3BpYy5oPgorCisjaW5jbHVkZSAicHEyLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZ2NvZ2VfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxwcTItcGljIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBJQyBpbml0OiBjYW4gbm90IGZpbmQgY3BtLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNwbTJfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKK30KKworc3RydWN0IGNwbV9waW4geworCWludCBwb3J0LCBwaW4sIGZsYWdzOworfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdjb2dlX3BpbnNbXSA9IHsKKworCS8qIFNNQzIgKi8KKwl7MSwgOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezEsIDksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIFNDQzQgKi8KKwl7MywgMjUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsICA5LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MywgIDgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXs0LCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezQsIDIxLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9pb3BvcnRzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZ2NvZ2VfcGlucyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJm1nY29nZV9waW5zW2ldOworCQljcG0yX3NldF9waW4ocGluLT5wb3J0IC0gMSwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOworCX0KKworCWNwbTJfc21jX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzIsIENQTV9CUkc4KTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs3LCBDUE1fQ0xLX1JYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs4LCBDUE1fQ0xLX1RYKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1nY29nZV9zZXR1cF9hcmNoKHZvaWQpCit7CisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtZ2NvZ2Vfc2V0dXBfYXJjaCgpIiwgMCk7CisKKwljcG0yX3Jlc2V0KCk7CisKKwkvKiBXaGVuIHRoaXMgaXMgc2V0LCBzbm9vcGluZyBDUE0gRE1BIGZyb20gUkFNIGNhdXNlcworCSAqIG1hY2hpbmUgY2hlY2tzLiAgU2VlIGVycmF0dW0gU0lVMTguCisJICovCisJY2xyYml0czMyKCZjcG0yX2ltbXItPmltX3NpdV9jb25mLnNpdV84Mnh4LnNjX2JjciwgTVBDODJYWF9CQ1JfUExEUCk7CisKKwlpbml0X2lvcG9ydHMoKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibWdjb2dlX3NldHVwX2FyY2goKSwgZmluaXNoIiwgMCk7Cit9CisKK3N0YXRpYyAgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtZ2NvZ2UsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbWdjb2dlX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsbWdjb2dlIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1nY29nZSkKK3sKKwkubmFtZSA9ICJLZXltaWxlIE1HQ09HRSIsCisJLnByb2JlID0gbWdjb2dlX3Byb2JlLAorCS5zZXR1cF9hcmNoID0gbWdjb2dlX3NldHVwX2FyY2gsCisJLmluaXRfSVJRID0gbWdjb2dlX3BpY19pbml0LAorCS5nZXRfaXJxID0gY3BtMl9nZXRfaXJxLAorCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnJlc3RhcnQgPSBwcTJfcmVzdGFydCwKKwkucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggNjE1OWM1ZC4uODNjNjY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTE5LDcgKzE5LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyeCBNRFMgZXZhbHVhdGlvbiBib2FyZC4KQEAgLTI3LDcgKzI2LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X1JEQgogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IFJEQiIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyMyBSREIgYm9hcmQuCkBAIC01NywxNSArNTUsMTIgQEAKIGNvbmZpZyBNUEM4MzZ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzZ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM2eCBNRFMgUHJvY2Vzc29yIEJvYXJkLgogCiBjb25maWcgTVBDODM2eF9SREsKIAlib29sICJGcmVlc2NhbGUvTG9naWMgTVBDODM2eCBSREsiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFFVSUNDX0VOR0lORQotCXNlbGVjdCBRRV9HUElPCiAJc2VsZWN0IEZTTF9HVE0KIAlzZWxlY3QgRlNMX0xCQwogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKaW5kZXggYmU2MmRlMi4uOGJiMTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKQEAgLTg1LDggKzg1LDE0IEBACiAJCXBwY19tZC5wcm9ncmVzcygibXBjODM3eF9tZHNfc2V0dXBfYXJjaCgpIiwgMCk7CiAKICNpZmRlZiBDT05GSUdfUENJCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpIHsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkgeworCQkJcHJfd2FybmluZygiJXM6IGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS5cbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOworCX0KICNlbmRpZgogCW1wYzgzN3htZHNfdXNiX2NmZygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCAyOTE2NzViLi5iNzlkYzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtMzMsNyArMzMsNiBAQAogY29uZmlnIE1QQzg1eHhfTURTCiAJYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHggTURTIgogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQotCXNlbGVjdCBRVUlDQ19FTkdJTkUKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODV4eCBNRFMgYm9hcmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKaW5kZXggZDE3ODA3YS4uMDI5M2UzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKQEAgLTIxMyw3ICsyMTMsNiBAQAogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKIAlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6IG1wYzg1eHhcbiIpOwogCXNlcV9wcmludGYobSwgIlBWUlx0XHQ6IDB4JXhcbiIsIHB2aWQpOwogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA2NTA5YWRlLi4wYzlhODU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JjODU2MF9waW5zKTsgaSsrKSB7Ci0JCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmc2JjODU2MF9waW5zW2ldOworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJnNiYzg1NjBfcGluc1tpXTsKIAkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOwogCX0KIApAQCAtMjAwLDcgKzIwMCw2IEBACiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXJcbiIpOwotCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBTQkM4NTYwXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA5MzU1YTUyLi43N2RkNzk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIEhQQ0QgYm9hcmQuCiAKK2NvbmZpZyBHRUZfU0JDNjEwCisJYm9vbCAiR0UgRmFudWMgU0JDNjEwIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBIQVNfUkFQSURJTworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgR0UgRmFudWMncyBTQkM2MTAuCisKIGVuZGlmCiAKIGNvbmZpZyBNUEM4NjQxCkBAIC0zOSw3ICs0Niw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFECisJZGVmYXVsdCB5IGlmIE1QQzg2NDFfSFBDTiB8fCBTQkM4NjQxRCB8fCBHRUZfU0JDNjEwCiAKIGNvbmZpZyBNUEM4NjEwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCmluZGV4IDhmZWUzN2QuLjRhNTZmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKQEAgLTcsMyArNyw0IEBACiBvYmotJChDT05GSUdfTVBDODY0MV9IUENOKQkrPSBtcGM4Nnh4X2hwY24ubwogb2JqLSQoQ09ORklHX1NCQzg2NDFEKQkJKz0gc2JjODY0MWQubwogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KK29iai0kKENPTkZJR19HRUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgR0UgRmFudWMncyBGUEdBIGJhc2VkIFBJQworICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogMjAwOCAoYykgR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyNkZWZpbmUgREVCVUcKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9ERUJVRyAiZ2VmX3BpYzogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgR0VGX1BJQ19OVU1fSVJRUwkzMgorCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdFRl9QSUNfSU5UUl9TVEFUVVMJMHgwMDAwCisKKyNkZWZpbmUgR0VGX1BJQ19JTlRSX01BU0soY3B1KQkoMHgwMDEwICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9JTlRSX01BU0sJR0VGX1BJQ19JTlRSX01BU0soMCkKKyNkZWZpbmUgR0VGX1BJQ19DUFUxX0lOVFJfTUFTSwlHRUZfUElDX0lOVFJfTUFTSygxKQorCisjZGVmaW5lIEdFRl9QSUNfTUNQX01BU0soY3B1KQkoMHgwMDE4ICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDApCisjZGVmaW5lIEdFRl9QSUNfQ1BVMV9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDEpCisKKyNkZWZpbmUgZ2VmX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQorCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2VmX3BpY19sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ2VmX3BpY19pcnFfcmVnX2Jhc2U7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpnZWZfcGljX2lycV9ob3N0Oworc3RhdGljIGludCBnZWZfcGljX2Nhc2NhZGVfaXJxOworCisvKgorICogSW50ZXJydXB0IENvbnRyb2xsZXIgSGFuZGxpbmcKKyAqCisgKiBUaGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaGFuZGxlcyBpbnRlcnJ1cHRzIGZvciBtb3N0IG9uIGJvYXJkIGludGVycnVwdHMsCisgKiBhcGFydCBmcm9tIFBDSSBpbnRlcnJ1cHRzLiBGb3IgZXhhbXBsZSBvbiBTQkM2MTA6CisgKgorICogMTc6MzEgUk8gUmVzZXJ2ZWQKKyAqIDE2ICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDMgU3RhdHVzCisgKiAxNSAgICBSTyBQQ0kgRXhwcmVzcyBEb29yYmVsbCAyIFN0YXR1cworICogMTQgICAgUk8gUENJIEV4cHJlc3MgRG9vcmJlbGwgMSBTdGF0dXMKKyAqIDEzICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDAgU3RhdHVzCisgKiAxMiAgICBSTyBSZWFsIFRpbWUgQ2xvY2sgSW50ZXJydXB0IFN0YXR1cworICogMTEgICAgUk8gVGVtcGVyYXR1cmUgSW50ZXJydXB0IFN0YXR1cworICogMTAgICAgUk8gVGVtcGVyYXR1cmUgQ3JpdGljYWwgSW50ZXJydXB0IFN0YXR1cworICogOSAgICAgUk8gRXRoZXJuZXQgUEhZMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiA4ICAgICBSTyBFdGhlcm5ldCBQSFkzIEludGVycnVwdCBTdGF0dXMKKyAqIDcgICAgIFJPIFBFWDg1NDggSW50ZXJydXB0IFN0YXR1cworICogNiAgICAgUk8gUmVzZXJ2ZWQKKyAqIDUgICAgIFJPIFdhdGNoZG9nIDAgSW50ZXJydXB0IFN0YXR1cworICogNCAgICAgUk8gV2F0Y2hkb2cgMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiAzICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBBIEludGVycnVwdCBTdGF0dXMKKyAqIDIgICAgIFJPIEFYSVMgTWVzc2FnZSBGSUZPIEIgSW50ZXJydXB0IFN0YXR1cworICogMSAgICAgUk8gQVhJUyBNZXNzYWdlIEZJRk8gQyBJbnRlcnJ1cHQgU3RhdHVzCisgKiAwICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBEIEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBJbnRlcnJ1cHRzIGNhbiBiZSBmb3J3YXJkZWQgdG8gb25lIG9mIHR3byBvdXRwdXQgbGluZXMuIE5vdGhpbmcKKyAqIGNsZXZlciBpcyBkb25lLCBzbyBpZiB0aGUgbWFza3MgYXJlIGluY29ycmVjdGx5IHNldCwgYSBzaW5nbGUgaW5wdXQKKyAqIGludGVycnVwdCBjb3VsZCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIG9uIGJvdGggb3V0cHV0IGxpbmVzIQorICoKKyAqIFRoZSBkdWFsIGxpbmVzIGFyZSB0aGVyZSB0byBhbGxvdyB0aGUgY2hhaW5lZCBpbnRlcnJ1cHRzIHRvIGJlIGVhc2lseQorICogcGFzc2VkIGludG8gdHdvIGRpZmZlcmVudCBjb3Jlcy4gV2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5CisgKiBpbiB0aGlzIGRyaXZlci4KKyAqCisgKiBDb250cm9sbGVyIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgTWFjaGluZSBjaGVja3MgKE1DUCksIGFnYWluIG9uCisgKiB0d28gbGluZXMsIHRvIGJlIGF0dGFjaGVkIHRvIHR3byBkaWZmZXJlbnQgY29yZXMuIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZXNlCisgKiBzaG91bGQgYmUgbWFza2VkIG91dC4KKyAqLworCit2b2lkIGdlZl9waWNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOworCisJLyoKKwkgKiBTZWUgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBpbnRlcnJ1cHQsIGNhbGwgZ2VuZXJpYyBoYW5kbGluZyBjb2RlIGlmCisJICogd2UgZG8uCisJICovCisJY2FzY2FkZV9pcnEgPSBnZWZfcGljX2dldF9pcnEoKTsKKworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX01BU0soMCksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCS8qIERvbid0IHRoaW5rIHdlIGFjdHVhbGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gYWNrIGFuIGludGVycnVwdCwKKwkgKiB3ZSBqdXN0IG5lZWQgdG8gY2xlYXIgZG93biB0aGUgZGV2aWNlcyBpbnRlcnJ1cHQgYW5kIGl0IHdpbGwgZ28gYXdheQorCSAqLworCWdlZl9waWNfbWFzayh2aXJxKTsKK30KKworc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayB8PSAoMSA8PCBod2lycSk7CisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2VmX3BpY19jaGlwID0geworCS50eXBlbmFtZQk9ICJnZWZwIiwKKwkubWFzawkJPSBnZWZfcGljX21hc2ssCisJLm1hc2tfYWNrCT0gZ2VmX3BpY19tYXNrX2FjaywKKwkudW5tYXNrCQk9IGdlZl9waWNfdW5tYXNrLAorfTsKKworCisvKiBXaGVuIGFuIGludGVycnVwdCBpcyBiZWluZyBjb25maWd1cmVkLCB0aGlzIGNhbGwgYWxsb3dzIHNvbWUgZmxleGliaWx0eQorICogaW4gZGVjaWRpbmcgd2hpY2ggaXJxX2NoaXAgc3RydWN0dXJlIGlzIHVzZWQKKyAqLworc3RhdGljIGludCBnZWZfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwkvKiBBbGwgaW50ZXJydXB0cyBhcmUgTEVWRUwgc2Vuc2l0aXZlICovCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ2VmX3BpY19jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlZl9waWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkgICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAoaW50c2l6ZSA+IDEpCisJCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzFdOworCWVsc2UKKwkJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0hJR0g7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgZ2VmX3BpY19ob3N0X29wcyA9IHsKKwkubWFwCT0gZ2VmX3BpY19ob3N0X21hcCwKKwkueGxhdGUJPSBnZWZfcGljX2hvc3RfeGxhdGUsCit9OworCisKKy8qCisgKiBJbml0aWFsaXNhdGlvbiBvZiBQSUMsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiBCU1AKKyAqLwordm9pZCBfX2luaXQgZ2VmX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE1hcCB0aGUgZGV2aWNlcyByZWdpc3RlcnMgaW50byBtZW1vcnkgKi8KKwlnZWZfcGljX2lycV9yZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKworCS8qIEluaXRpYWxpc2UgZXZlcnl0aGluZyBhcyBtYXNrZWQuICovCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfSU5UUl9NQVNLLCAwKTsKKwlvdXRfYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfQ1BVMV9JTlRSX01BU0ssIDApOworCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfTUNQX01BU0ssIDApOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19DUFUxX01DUF9NQVNLLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworCisJLyogTWFwIGNvbnRyb2xsZXIgKi8KKwlnZWZfcGljX2Nhc2NhZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChnZWZfcGljX2Nhc2NhZGVfaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNCQzYxMDogZmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdCIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0dXAgYW4gaXJxX2hvc3Qgc3RydWN0dXJlICovCisJZ2VmX3BpY19pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KG5wLCBJUlFfSE9TVF9NQVBfTElORUFSLAorCQkJCQkgIEdFRl9QSUNfTlVNX0lSUVMsCisJCQkJCSAgJmdlZl9waWNfaG9zdF9vcHMsIE5PX0lSUSk7CisJaWYgKGdlZl9waWNfaXJxX2hvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2hhaW4gd2l0aCBwYXJlbnQgY29udHJvbGxlciAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGdlZl9waWNfY2FzY2FkZV9pcnEsIGdlZl9waWNfY2FzY2FkZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYW4gaW50ZXJydXB0IHdpdGggYXBwYXJlbnRseSBjb21lcyBmcm9tIHRoaXMKKyAqIGNoaXAgLSBjaGVjaywgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IGludGVycnVwdCBnZW5lcmF0ZWQgb3IgcmV0dXJuIE5PX0lSUQorICovCit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpCit7CisJdTMyIGNhdXNlLCBtYXNrLCBhY3RpdmU7CisJdW5zaWduZWQgaW50IHZpcnEgPSBOT19JUlE7CisJaW50IGh3aXJxOworCisJY2F1c2UgPSBpbl9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX1NUQVRVUyk7CisKKwltYXNrID0gaW5fYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfSU5UUl9NQVNLKDApKTsKKworCWFjdGl2ZSA9IGNhdXNlICYgbWFzazsKKworCWlmIChhY3RpdmUpIHsKKwkJZm9yIChod2lycSA9IEdFRl9QSUNfTlVNX0lSUVMgLSAxOyBod2lycSA+IC0xOyBod2lycS0tKSB7CisJCQlpZiAoYWN0aXZlICYgKDB4MSA8PCBod2lycSkpCisJCQkJYnJlYWs7CisJCX0KKwkJdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKGdlZl9waWNfaXJxX2hvc3QsCisJCQkoaXJxX2h3X251bWJlcl90KWh3aXJxKTsKKwl9CisKKwlyZXR1cm4gdmlycTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0OTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX0dFRl9QSUNfSF9fCisjZGVmaW5lIF9fR0VGX1BJQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwordm9pZCBnZWZfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxX2Rlc2MgKik7Cit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpOwordm9pZCBnZWZfcGljX2luaXQoc3RydWN0IGRldmljZV9ub2RlICopOworCisjZW5kaWYgLyogX19HRUZfUElDX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjFjNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzYxMCBib2FyZCBzdXBwb3J0CisgKgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IG1wYzg2eHhfaHBjbi5jIChNUEM4Nnh4IEhQQ04gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogTkVDIGZpeHVwIGFkYXB0ZWQgZnJvbSBhcmNoL21pcHMvcGNpL2ZpeHVwLWxtMmUuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzg2eHguaCIKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgcHJpbnRrKEtFUk5fRVJSICJTQkM2MTA6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpzYmM2MTBfcmVnczsKKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhc2NhZGVfbm9kZSA9IE5VTEw7CisKKwltcGM4Nnh4X2luaXRfaXJxKCk7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgc2ltcGxlIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBtYWluIEZQR0EsIHRoaXMgbmVlZHMKKwkgKiB0byBiZSBjYXNjYWRlZCBpbnRvIHRoZSBNUElDCisJICovCisJY2FzY2FkZV9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXBpYyIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNCQzYxMDogTm8gRlBHQSBQSUNcbiIpOworCQlyZXR1cm47CisJfQorCisJZ2VmX3BpY19pbml0KGNhc2NhZGVfbm9kZSk7CisJb2Zfbm9kZV9wdXQoY2FzY2FkZV9ub2RlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnczsKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODY0MS1wY2llIikgeworCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgU0JDNjEwIDZVIFZQWCBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJc2JjNjEwX3JlZ3MgPSBvZl9pb21hcChyZWdzLCAwKTsKKwkJaWYgKHNiYzYxMF9yZWdzID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gbWFwIGJvYXJkIHJlZ2lzdGVyc1xuIik7CisJCW9mX25vZGVfcHV0KHJlZ3MpOworCX0KK30KKworLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmM2MTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gOCkgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIGJvYXJkIChzb2Z0d2FyZSkgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzYxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjNjEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDI0KSAmIDB4ZjsKK30KKworc3RhdGljIHZvaWQgZ2VmX3NiYzYxMF9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzYxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKwlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzYxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9zYmM2MTBfbmVjX2ZpeHVwKTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBCU1AgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICogc3VwcGxpZWQgZGV2aWNlLXRyZWUsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgYWN0dWFsCisgKiBib2FyZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdGksIGluIHRoZSBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlCisgKiBib2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGdlZl9zYmM2MTBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJnZWYsc2JjNjEwIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjNjEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjNjEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkM2MTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzYxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjNjEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmM2MTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjNjEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IDVlZWRiNzEuLmU4ZDU0YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTIzOCw3ICsyMzgsNiBAQAogICAgICAgICB9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLQlwcmVhbGxvY2F0ZV9kaXVfdmlkZW9tZW1vcnkoKTsKIAlkaXVfb3BzLmdldF9waXhlbF9mb3JtYXQJPSBtcGM4NjEwaHBjZF9nZXRfcGl4ZWxfZm9ybWF0OwogCWRpdV9vcHMuc2V0X2dhbW1hX3RhYmxlCQk9IG1wYzg2MTBocGNkX3NldF9nYW1tYV90YWJsZTsKIAlkaXVfb3BzLnNldF9tb25pdG9yX3BvcnQJPSBtcGM4NjEwaHBjZF9zZXRfbW9uaXRvcl9wb3J0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IGY3MTJkOWMuLjI2NzI4MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwMSwxOSArMTAxLDExIEBACiBzdGF0aWMgdm9pZAogbXBjODZ4eF9ocGNuX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWlmIChyb290KQotCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKLQlzZXFfcHJpbnRmKG0sICJNYWNoaW5lXHRcdDogJXNcbiIsIG1vZGVsKTsKLQlvZl9ub2RlX3B1dChyb290KTsKLQogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCmluZGV4IDAwZTZmYWQuLmRhNjc3YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCkBAIC02MywxOSArNjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBzYmM4NjQxX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXIgU3lzdGVtc1xuIik7CiAKLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkKLQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6ICVzXG4iLCBtb2RlbCk7Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7Ci0KIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKaW5kZXggNzFkNzU2Mi4uNDhhOTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCkBAIC00OSw2ICs0OSwxMiBAQAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2d1ZSAmIE1pY3JvIEFkZGVyIDg3NQogCSAgYm9hcmQuCiAKK2NvbmZpZyBQUENfTUdTVVZECisJYm9vbCAiTUdTVVZEIgorCXNlbGVjdCBDUE0xCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBLZXltaWxlIE1HU1VWRCBib2FyZC4KKwogZW5kY2hvaWNlCiAKIG1lbnUgIkZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKaW5kZXggN2I3MWQ5Yy4uYmRiZmQ3NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX01QQzg2WEFEUykgICArPSBtcGM4NnhhZHNfc2V0dXAubwogb2JqLSQoQ09ORklHX1BQQ19FUDg4WEMpICArPSBlcDg4eGMubwogb2JqLSQoQ09ORklHX1BQQ19BRERFUjg3NSkgKz0gYWRkZXI4NzUubworb2JqLSQoQ09ORklHX1BQQ19NR1NVVkQpICs9IG1nc3V2ZC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21nc3V2ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhM2NiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICoKKyAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgS2V5bWlsZSBtZ3N1dmQgYm9hcmQKKyAqCisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NwbTEuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9mc19wZC5oPgorCisjaW5jbHVkZSAibXBjOHh4LmgiCisKK3N0cnVjdCBjcG1fcGluIHsKKwlpbnQgcG9ydCwgcGluLCBmbGFnczsKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBjcG1fcGluIG1nc3V2ZF9waW5zW10gPSB7CisJLyogU01DMSAqLworCXtDUE1fUE9SVEIsIDI0LCBDUE1fUElOX0lOUFVUfSwgLyogUlggKi8KKwl7Q1BNX1BPUlRCLCAyNSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwgLyogVFggKi8KKworCS8qIFNDQzMgKi8KKwl7Q1BNX1BPUlRBLCAxMCwgQ1BNX1BJTl9JTlBVVH0sCisJe0NQTV9QT1JUQSwgMTEsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEEsIDMsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEEsIDIsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEMsIDEzLCBDUE1fUElOX0lOUFVUfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvcG9ydHModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1nc3V2ZF9waW5zKTsgaSsrKSB7CisJCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmbWdzdXZkX3BpbnNbaV07CisJCWNwbTFfc2V0X3BpbihwaW4tPnBvcnQsIHBpbi0+cGluLCBwaW4tPmZsYWdzKTsKKwl9CisKKwlzZXRiaXRzMTYoJm1wYzh4eF9pbW1yLT5pbV9pb3BvcnQuaW9wX3Bjc28sIDB4MzAwKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzMsIENQTV9DTEs1LCBDUE1fQ0xLX1JYKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzMsIENQTV9DTEs2LCBDUE1fQ0xLX1RYKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzEsIENQTV9CUkcxLCBDUE1fQ0xLX1JUWCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZ3N1dmRfc2V0dXBfYXJjaCh2b2lkKQoreworCWNwbV9yZXNldCgpOworCWluaXRfaW9wb3J0cygpOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtZ3N1dmQsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG1nc3V2ZF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJrZXltaWxlLG1nc3V2ZCIpOworfQorCitkZWZpbmVfbWFjaGluZShtZ3N1dmQpIHsKKwkubmFtZSAgICAgICAgICAgPSAiTUdTVVZEIiwKKwkucHJvYmUgICAgICAgICAgPSBtZ3N1dmRfcHJvYmUsCisJLnNldHVwX2FyY2ggICAgID0gbWdzdXZkX3NldHVwX2FyY2gsCisJLmluaXRfSVJRICAgICAgID0gbXBjOHh4X3BpY3NfaW5pdCwKKwkuZ2V0X2lycSAgICAgICAgPSBtcGM4eHhfZ2V0X2lycSwKKwkucmVzdGFydCAgICAgICAgPSBtcGM4eHhfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IgPSBtcGM4eHhfY2FsaWJyYXRlX2RlY3IsCisJLnNldF9ydGNfdGltZSAgID0gbXBjOHh4X3NldF9ydGNfdGltZSwKKwkuZ2V0X3J0Y190aW1lICAgPSBtcGM4eHhfZ2V0X3J0Y190aW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCA0YzkwMGVmLi40N2U5NTZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0yMzksNyArMjM5LDggQEAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgogCiBjb25maWcgUVVJQ0NfRU5HSU5FCi0JYm9vbAorCWJvb2wgIkZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgKFFFKSBTdXBwb3J0IgorCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBQUENfTElCX1JIRUFQCiAJc2VsZWN0IENSQzMyCiAJaGVscApAQCAtMjQ4LDYgKzI0OSwxNSBAQAogCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIG1lYW5zIHRoYXQgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwKIAkgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLgogCitjb25maWcgUUVfR1BJTworCWJvb2wgIlFFIEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFFVSUNDX0VOR0lORQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSdyZSBnb2luZyB0byB1c2UgaGFyZHdhcmUgdGhhdCBjb25uZWN0cyB0byB0aGUKKwkgIFFFIEdQSU9zLgorCiBjb25maWcgQ1BNMgogCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ1BNMiAoQ29tbXVuaWNhdGlvbnMgUHJvY2Vzc29yIE1vZHVsZSkiCiAJZGVwZW5kcyBvbiBNUEM4NXh4IHx8IDgyNjAKQEAgLTI5Myw0ICszMDMsMTMgQEAKIAogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL0tjb25maWciCiAKK2NvbmZpZyBNUEM4eHh4X0dQSU8KKwlib29sICJNUEM4eHh4IEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQ19NUEM4MzF4IHx8IFBQQ19NUEM4MzR4IHx8IFBQQ19NUEM4Mzd4IHx8IFBQQ184NXh4IHx8IFBQQ184Nnh4CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91J3JlIGdvaW5nIHRvIHVzZSBoYXJkd2FyZSB0aGF0IGNvbm5lY3RzIHRvIHRoZQorCSAgTVBDODMxeC84MzR4LzgzN3gvODU3Mi84NjEwIEdQSU9zLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IDdmNjUxMjcuLjU0OGVmYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC01MCw2ICs1MCw3IEBACiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IDR4eF9TT0MKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKKwlzZWxlY3QgUEhZU182NEJJVAogCiBjb25maWcgRTIwMAogCWJvb2wgIkZyZWVzY2FsZSBlMjAwIgpAQCAtMTI4LDE4ICsxMjksMTkgQEAKIAogY29uZmlnIFBURV82NEJJVAogCWJvb2wKLQlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwCi0JZGVmYXVsdCB5IGlmIDQ0eAotCWRlZmF1bHQgeSBpZiBFNTAwICYmIFBIWVNfNjRCSVQKKwlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwIHx8IFBQQ184Nnh4CisJZGVmYXVsdCB5IGlmIFBIWVNfNjRCSVQKIAogY29uZmlnIFBIWVNfNjRCSVQKLQlib29sICdMYXJnZSBwaHlzaWNhbCBhZGRyZXNzIHN1cHBvcnQnIGlmIEU1MDAKLQlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVAotCWRlZmF1bHQgeSBpZiA0NHgKKwlib29sICdMYXJnZSBwaHlzaWNhbCBhZGRyZXNzIHN1cHBvcnQnIGlmIEU1MDAgfHwgUFBDXzg2eHgKKwlkZXBlbmRzIG9uICg0NHggfHwgRTUwMCB8fCBQUENfODZ4eCkgJiYgIVBQQ184M3h4ICYmICFQUENfODJ4eAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIHN1cHBvcnQgZm9yIGxhcmdlciB0aGFuIDMyLWJpdCBwaHlzaWNhbAotCSAgYWRkcmVzc2VzLiAgVGhpcyBmZWF0dXJlcyBpcyBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBlNTAwIGNvcmVzLgorCSAgYWRkcmVzc2VzLiAgVGhpcyBmZWF0dXJlIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBjb3Jlcy4KKworCSAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIDMuNUdCIG9mIFJBTSBvciBzbywgeW91IGFsc28gbmVlZCB0byBlbmFibGUKKwkgIFNXSU9UTEIgdW5kZXIgS2VybmVsIE9wdGlvbnMgZm9yIHRoaXMgdG8gd29yay4gIFRoZSBhY3R1YWwgbnVtYmVyCisJICBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQuCiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IGUwNjQyMGEuLmVmOTJlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC01NTYsMTEgKzU1NiwxMSBAQAogCSAqIG5vZGUncyBpb21tdS4gV2UgLW1pZ2h0LSBkbyBzb21ldGhpbmcgc21hcnRlciBsYXRlciB0aG91Z2ggaXQgbWF5CiAJICogbmV2ZXIgYmUgbmVjZXNzYXJ5CiAJICovCi0JaW9tbXUgPSBjZWxsX2lvbW11X2Zvcl9ub2RlKGFyY2hkYXRhLT5udW1hX25vZGUpOworCWlvbW11ID0gY2VsbF9pb21tdV9mb3Jfbm9kZShkZXZfdG9fbm9kZShkZXYpKTsKIAlpZiAoaW9tbXUgPT0gTlVMTCB8fCBsaXN0X2VtcHR5KCZpb21tdS0+d2luZG93cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpb21tdTogbWlzc2luZyBpb21tdSBmb3IgJXMgKG5vZGUgJWQpXG4iLAogCQkgICAgICAgYXJjaGRhdGEtPm9mX25vZGUgPyBhcmNoZGF0YS0+b2Zfbm9kZS0+ZnVsbF9uYW1lIDogIj8iLAotCQkgICAgICAgYXJjaGRhdGEtPm51bWFfbm9kZSk7CisJCSAgICAgICBkZXZfdG9fbm9kZShkZXYpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXdpbmRvdyA9IGxpc3RfZW50cnkoaW9tbXUtPndpbmRvd3MubmV4dCwgc3RydWN0IGlvbW11X3dpbmRvdywgbGlzdCk7CkBAIC01NzcsNyArNTc3LDcgQEAKIAkJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwKIAkJCQkJICAgIHNpemUsIGRtYV9oYW5kbGUsCiAJCQkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBmbGFnLAotCQkJCQkgICAgZGV2LT5hcmNoZGF0YS5udW1hX25vZGUpOworCQkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7CiAJZWxzZQogCQlyZXR1cm4gZG1hX2RpcmVjdF9vcHMuYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAogCQkJCQkJICAgICBmbGFnKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggMmM4YjgwOS4uY2I4NWQyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTI5OCw4ICsyOTgsOCBAQAogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlkZ2V0KGRlbnRyeSk7Ci0JZGlyLT5pX25saW5rKys7Ci0JZGVudHJ5LT5kX2lub2RlLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CisJaW5jX25saW5rKGRlbnRyeS0+ZF9pbm9kZSk7CiAJZ290byBvdXQ7CiAKIG91dF9mcmVlX2N0eDoKQEAgLTQ5Niw2ICs0OTYsOCBAQAogCXJldCA9IHNwdWZzX2NvbnRleHRfb3BlbihkZ2V0KGRlbnRyeSksIG1udGdldChtbnQpKTsKIAlpZiAocmV0IDwgMCkgewogCQlXQVJOX09OKHNwdWZzX3JtZGlyKGlub2RlLCBkZW50cnkpKTsKKwkJaWYgKGFmZmluaXR5KQorCQkJbXV0ZXhfdW5sb2NrKCZnYW5nLT5hZmZfbXV0ZXgpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJc3B1X2ZvcmdldChTUFVGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmlfY3R4KTsKIAkJZ290byBvdXQ7CkBAIC01MzgsOCArNTQwLDggQEAKIAlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlkaXItPmlfbmxpbmsrKzsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKKwlpbmNfbmxpbmsoZGVudHJ5LT5kX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogCiBvdXRfaXB1dDoKQEAgLTc1NSw2ICs3NTcsNyBAQAogCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCVNQVUZTX0koaW5vZGUpLT5pX2N0eCA9IE5VTEw7CisJaW5jX25saW5rKGlub2RlKTsKIAogCXJldCA9IC1FSU5WQUw7CiAJaWYgKCFzcHVmc19wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCBpbm9kZSkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKaW5kZXggNzY4YzI2Mi4uZDNjZGU2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYwpAQCAtMjYwLDEzICsyNjAsMTMgQEAKIAkJCQlkZXYtPmZ1bGxfbmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZVswXTsKKwkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBob3NlLT5zZWxmX2J1c25vID0gYnVzX3JhbmdlWzBdOwogCQlob3NlLT5sYXN0X2J1c25vID0gYnVzX3JhbmdlWzFdOwogCiAJCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgIm1vZGVsIiwgTlVMTCk7CiAJCWlmIChtb2RlbCA9PSBOVUxMKQogCQkJbW9kZWwgPSAiPG5vbmU+IjsKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgIklCTSxweXRob24iKSkgeworCQlpZiAoc3RybmNtcChtb2RlbCwgIklCTSwgUHl0aG9uIiwgMTEpID09IDApIHsKIAkJCXNldHVwX3B5dGhvbihob3NlLCBkZXYpOwogCQl9IGVsc2UgaWYgKGlzX21vdAogCQkJICAgfHwgc3RybmNtcChtb2RlbCwgIk1vdG9yb2xhLCBHcmFja2xlIiwgMTcpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jCmluZGV4IDk2ZDFlNGIuLjA1NGRmZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYwpAQCAtOTQsMTIgKzk0LDEyIEBACiAJY2hycF9jbW9zX2Nsb2NrX3dyaXRlKChzYXZlX2ZyZXFfc2VsZWN0fFJUQ19ESVZfUkVTRVQyKSwgUlRDX0ZSRVFfU0VMRUNUKTsKIAogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJJTl9UT19CQ0QodG0udG1fc2VjKTsKLQkJQklOX1RPX0JDRCh0bS50bV9taW4pOwotCQlCSU5fVE9fQkNEKHRtLnRtX2hvdXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21vbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWRheSk7Ci0JCUJJTl9UT19CQ0QodG0udG1feWVhcik7CisJCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKKwkJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwkJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOworCQl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKKwkJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CiAJfQogCWNocnBfY21vc19jbG9ja193cml0ZSh0bS50bV9zZWMsUlRDX1NFQ09ORFMpOwogCWNocnBfY21vc19jbG9ja193cml0ZSh0bS50bV9taW4sUlRDX01JTlVURVMpOwpAQCAtMTM2LDEyICsxMzYsMTIgQEAKIAl9IHdoaWxlIChzZWMgIT0gY2hycF9jbW9zX2Nsb2NrX3JlYWQoUlRDX1NFQ09ORFMpKTsKIAogCWlmICghKGNocnBfY21vc19jbG9ja19yZWFkKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCWlmICh5ZWFyIDwgNzApCiAJCXllYXIgKz0gMTAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKaW5kZXggODRlMmQ3OC4uN2EyYmEzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCkBAIC0xNjQsNyArMTY0LDYgQEAKIHZvaWQgbXBjNzQ0OF9ocGMyX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc2VxX3ByaW50ZihtLCAidmVuZG9yXHRcdDogRnJlZXNjYWxlIFNlbWljb25kdWN0b3JcbiIpOwotCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiBNUEM3NDQ4aHBjMlxuIik7CiB9CiAKIHZvaWQgbXBjNzQ0OF9ocGMyX3Jlc3RhcnQoY2hhciAqY21kKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCmluZGV4IDhmZjMzMGQuLjJmNTgxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKQEAgLTM4LDEyICszOCwxMyBAQAogCiAJLmdsb2JsIHN5c3RlbV9yZXNldF9pU2VyaWVzCiBzeXN0ZW1fcmVzZXRfaVNlcmllczoKKwlibAkucmVsYXRpdmVfdG9jCiAJbWZzcHIJcjEzLFNQUk5fU1BSRzMJCS8qIEdldCBhbHBhY2EgYWRkcmVzcyAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMjMsIGFscGFjYSkKKwlMT0FEX1JFR19BRERSKHIyMywgYWxwYWNhKQogCWxpCXIwLEFMUEFDQV9TSVpFCiAJc3ViCXIyMyxyMTMscjIzCiAJZGl2ZHUJcjIzLHIyMyxyMAkJLyogcjIzIGhhcyBjcHUgbnVtYmVyICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIxMywgcGFjYSkKKwlMT0FEX1JFR19BRERSKHIxMywgcGFjYSkKIAltdWxsaQlyMCxyMjMsUEFDQV9TSVpFCiAJYWRkCXIxMyxyMTMscjAKIAltdHNwcglTUFJOX1NQUkczLHIxMwkJLyogU2F2ZSBpdCBhd2F5IGZvciB0aGUgZnV0dXJlICovCkBAIC02MCwxNCArNjEsMTQgQEAKIAltdHNwcglTUFJOX0NUUkxULHI0CiAKIC8qIFNwaW4gb24gX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCB1bnRpbCBpdCBpcyB1cGRhdGVkIGJ5IHRoZSBib290IGNwdS4gKi8KLS8qIEluIHRoZSBVUCBjYXNlIHdlJ2xsIHllaWxkKCkgbGF0ZXIsIGFuZCB3ZSB3aWxsIG5vdCBhY2Nlc3MgdGhlIHBhY2EgYW55d2F5ICovCisvKiBJbiB0aGUgVVAgY2FzZSB3ZSdsbCB5aWVsZCgpIGxhdGVyLCBhbmQgd2Ugd2lsbCBub3QgYWNjZXNzIHRoZSBwYWNhIGFueXdheSAqLwogI2lmZGVmIENPTkZJR19TTVAKIDE6CiAJSE1UX0xPVwotCUxPQURfUkVHX0lNTUVESUFURShyMjMsIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3ApCisJTE9BRF9SRUdfQUREUihyMjMsIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3ApCiAJbGQJcjIzLDAocjIzKQogCXN5bmMKLQlMT0FEX1JFR19JTU1FRElBVEUocjMsY3VycmVudF9zZXQpCisJTE9BRF9SRUdfQUREUihyMyxjdXJyZW50X3NldCkKIAlzbGRpCXIyOCxyMjQsMwkJLyogZ2V0IGN1cnJlbnRfc2V0W2NwdSNdICovCiAJbGR4CXIzLHIzLHIyOAogCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKQEAgLTkwLDcgKzkxLDcgQEAKIAlsYnoJcjIzLFBBQ0FQUk9DU1RBUlQocjEzKQkvKiBUZXN0IGlmIHRoaXMgcHJvY2Vzc29yCiAJCQkJCSAqIHNob3VsZCBzdGFydCAqLwogCXN5bmMKLQlMT0FEX1JFR19JTU1FRElBVEUocjMsY3VycmVudF9zZXQpCisJTE9BRF9SRUdfQUREUihyMyxjdXJyZW50X3NldCkKIAlzbGRpCXIyOCxyMjQsMwkJLyogZ2V0IGN1cnJlbnRfc2V0W2NwdSNdICovCiAJbGR4CXIzLHIzLHIyOAogCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKQEAgLTI1NSw4ICsyNTYsOCBAQAogCiBfSU5JVF9TVEFUSUMoX19zdGFydF9pbml0aWFsaXphdGlvbl9pU2VyaWVzKQogCS8qIENsZWFyIG91dCB0aGUgQlNTICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIxMSxfX2Jzc19zdG9wKQotCUxPQURfUkVHX0lNTUVESUFURShyOCxfX2Jzc19zdGFydCkKKwlMT0FEX1JFR19BRERSKHIxMSxfX2Jzc19zdG9wKQorCUxPQURfUkVHX0FERFIocjgsX19ic3Nfc3RhcnQpCiAJc3ViCXIxMSxyMTEscjgJCS8qIGJzcyBzaXplCQkJKi8KIAlhZGRpCXIxMSxyMTEsNwkJLyogcm91bmQgdXAgdG8gYW4gZXZlbiBkb3VibGUgd29yZCAqLwogCXJsZGljbC4gcjExLHIxMSw2MSwzCQkvKiBzaGlmdCByaWdodCBieSAzCQkqLwpAQCAtMjY3LDE1ICsyNjgsMTEgQEAKIDM6CXN0ZHUJcjAsOChyOCkKIAliZG56CTNiCiA0OgotCUxPQURfUkVHX0lNTUVESUFURShyMSxpbml0X3RocmVhZF91bmlvbikKKwlMT0FEX1JFR19BRERSKHIxLGluaXRfdGhyZWFkX3VuaW9uKQogCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUKIAlsaQlyMCwwCiAJc3RkdQlyMCwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpCiAKLQlMT0FEX1JFR19JTU1FRElBVEUocjIsX190b2Nfc3RhcnQpCi0JYWRkaQlyMixyMiwweDQwMDAKLQlhZGRpCXIyLHIyLDB4NDAwMAotCiAJYmwJLmlTZXJpZXNfZWFybHlfc2V0dXAKIAlibAkuZWFybHlfc2V0dXAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwppbmRleCA3MzFkN2IxLi4zNjg5YzI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwpAQCAtNzIyLDEzICs3MjIsMTMgQEAKIAlkYXkgPSB0bS0+dG1fbWRheTsKIAltb24gPSB0bS0+dG1fbW9uICsgMTsKIAotCUJJTl9UT19CQ0Qoc2VjKTsKLQlCSU5fVE9fQkNEKG1pbik7Ci0JQklOX1RPX0JDRChob3VyKTsKLQlCSU5fVE9fQkNEKG1vbik7Ci0JQklOX1RPX0JDRChkYXkpOwotCUJJTl9UT19CQ0QoeTEpOwotCUJJTl9UT19CQ0QoeTIpOworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaG91ciA9IGJpbjJiY2QoaG91cik7CisJbW9uID0gYmluMmJjZChtb24pOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwl5MSA9IGJpbjJiY2QoeTEpOworCXkyID0gYmluMmJjZCh5Mik7CiAKIAltZW1zZXQoY2VfdGltZSwgMCwgc2l6ZW9mKGNlX3RpbWUpKTsKIAljZV90aW1lWzNdID0gMHg0MTsKQEAgLTc3NywxMiArNzc3LDEyIEBACiAJCXU4IGRheSA9IGNlX21zZ1sxMF07CiAJCXU4IG1vbiA9IGNlX21zZ1sxMV07CiAKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaG91cik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtb24pOwotCQlCQ0RfVE9fQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCQlpZiAoeWVhciA8PSA2OSkKIAkJCXllYXIgKz0gMTAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwppbmRleCA1M2JjYTEzLi5lYWM1NjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwpAQCAtNjgsMTIgKzY4LDEyIEBACiAKIAlpZiAoIShtYXBsZV9jbG9ja19yZWFkKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpCiAJICAgIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTih0bS0+dG1feWVhcik7CisJCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCQl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwkJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwkJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJCXRtLT50bV95ZWFyID0gYmNkMmJpbih0bS0+dG1feWVhcik7CiAJICB9CiAJaWYgKCh0bS0+dG1feWVhciArIDE5MDApIDwgMTk3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIAl5ZWFyID0gdG0tPnRtX3llYXI7CiAKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCUJJTl9UT19CQ0QobWluKTsKLQkJQklOX1RPX0JDRChob3VyKTsKLQkJQklOX1RPX0JDRChtb24pOwotCQlCSU5fVE9fQkNEKG1kYXkpOwotCQlCSU5fVE9fQkNEKHllYXIpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaG91ciA9IGJpbjJiY2QoaG91cik7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJbWRheSA9IGJpbjJiY2QobWRheSk7CisJCXllYXIgPSBiaW4yYmNkKHllYXIpOwogCX0KIAltYXBsZV9jbG9ja193cml0ZShzZWMsIFJUQ19TRUNPTkRTKTsKIAltYXBsZV9jbG9ja193cml0ZShtaW4sIFJUQ19NSU5VVEVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggNTE2OWVjYy4uZTZjMDA0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJbWFjaW9fY2hpcHNbaV0ub2Zfbm9kZQk9IG5vZGU7CiAJbWFjaW9fY2hpcHNbaV0udHlwZQk9IHR5cGU7CiAJbWFjaW9fY2hpcHNbaV0uYmFzZQk9IGJhc2U7Ci0JbWFjaW9fY2hpcHNbaV0uZmxhZ3MJPSBNQUNJT19GTEFHX1NDQ0JfT04gfCBNQUNJT19GTEFHX1NDQ0JfT047CisJbWFjaW9fY2hpcHNbaV0uZmxhZ3MJPSBNQUNJT19GTEFHX1NDQ0FfT04gfCBNQUNJT19GTEFHX1NDQ0JfT047CiAJbWFjaW9fY2hpcHNbaV0ubmFtZQk9IG1hY2lvX25hbWVzW3R5cGVdOwogCXJldnAgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJldmlzaW9uLWlkIiwgTlVMTCk7CiAJaWYgKHJldnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCA0YWUzZDAwLi40MGY3MmMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTc4Nyw3ICs3ODcsNyBAQAogewogCXVuc2lnbmVkIGludCBzYXZlX3ZlY3RvcjsKIAl1bnNpZ25lZCBsb25nIHRhcmdldCwgZmxhZ3M7Ci0JdW5zaWduZWQgaW50ICp2ZWN0b3IgPSAodW5zaWduZWQgaW50ICopKEtFUk5FTEJBU0UrMHgxMDApOworCXVuc2lnbmVkIGludCAqdmVjdG9yID0gKHVuc2lnbmVkIGludCAqKShQQUdFX09GRlNFVCsweDEwMCk7CiAKIAlpZiAobnIgPCAwIHx8IG5yID4gMykKIAkJcmV0dXJuOwpAQCAtODAxLDcgKzgwMSw3IEBACiAJc2F2ZV92ZWN0b3IgPSAqdmVjdG9yOwogCiAJLyogU2V0dXAgZmFrZSByZXNldCB2ZWN0b3IgdGhhdCBkb2VzCi0JICogICBiIF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCArIG5yKjggLSBLRVJORUxCQVNFCisJICogICBiIF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCArIG5yKjgKIAkgKi8KIAl0YXJnZXQgPSAodW5zaWduZWQgbG9uZykgX19zZWNvbmRhcnlfc3RhcnRfcG1hY18wICsgbnIgKiA4OwogCXBhdGNoX2JyYW5jaCh2ZWN0b3IsIHRhcmdldCwgQlJBTkNIX1NFVF9MSU5LKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKaW5kZXggYmJiZWZkNi4uNTllYjg0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKQEAgLTkzLDExICs5MywxNCBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BREJfQ1VEQSkgfHwgZGVmaW5lZChDT05GSUdfQURCX1BNVSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1BNQUNfU01VKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJvbV9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXJldHVybiBta3RpbWUodG0tPnRtX3llYXIrMTkwMCwgdG0tPnRtX21vbisxLCB0bS0+dG1fbWRheSwKIAkJICAgICAgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwogfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQURCX0NVREEKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGN1ZGFfZ2V0X3RpbWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwppbmRleCAyODBlZTg4Li5hNzg5YmY1OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKQEAgLTc2Miw3ICs3NjIsNyBAQAogCX07CiAKIAlkZXYtPmNvcmUuYXJjaGRhdGEub2Zfbm9kZSA9IE5VTEw7Ci0JZGV2LT5jb3JlLmFyY2hkYXRhLm51bWFfbm9kZSA9IDA7CisJc2V0X2Rldl9ub2RlKCZkZXYtPmNvcmUsIDApOwogCiAJcHJfZGVidWcoIiVzOiVkIGFkZCAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBkZXYtPmNvcmUuYnVzX2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCmluZGV4IDM4ZmUzMmEuLjVjZDRkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkJbnBhID0gKHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CiAJCQkJCQkJCSAgICAgICBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CiAJCQlpZiAoIW5wYSkgewotCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJcHJfaW5mbygiJXM6IENhbiBub3QgYWxsb2NhdGUgbmV3IHBhZ2UgbGlzdFxuIiwgX19mdW5jX18pOwogCQkJCWZyZWVfcGFnZShhZGRyKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTEzOCw3ICsxMzgsNyBAQAogCQl9CiAKIAkJaWYgKChyYyA9IHBscGFyX3BhZ2Vfc2V0X2xvYW5lZChfX3BhKGFkZHIpKSkpIHsKLQkJCXByX2VycigiJXM6IENhbiBub3Qgc2V0IHBhZ2UgdG8gbG9hbmVkLiByYz0lbGRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCQkJcHJfZXJyKCIlczogQ2FuIG5vdCBzZXQgcGFnZSB0byBsb2FuZWQuIHJjPSVsZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CiAJCQlmcmVlX3BhZ2UoYWRkcik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDhjMWNhNDcuLjBhZDU2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtNDEsNyArNDEsNyBAQAogCXJldHVybiAiIjsKIH0KIAotI2lmZGVmIERFQlVHCisjaWYgMAogc3RhdGljIHZvaWQgcHJpbnRfZGV2aWNlX25vZGVfdHJlZShzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBkZW50KQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYwppbmRleCBhMWEzNjhkLi4xNDBkMDJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYwpAQCAtMjEsNyArMjEsNyBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCWludCByZXQ7CiAKLQlzdGFydF9wZm4gPSBiYXNlID4+IFBGTl9TRUNUSU9OX1NISUZUOworCXN0YXJ0X3BmbiA9IGJhc2UgPj4gUEFHRV9TSElGVDsKIAl6b25lID0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggNzYzN2JkMy4uYzU5MWEyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQ2NiwxMSArNDY2LDExIEBACiAJCWVsc2UKIAkJCWFjdGlvbiA9IFBTRVJJRVNfRFJDT05GX01FTV9SRU1PVkU7CiAKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcFNlcmllc19yZWNvbmZpZ19jaGFpbiwKLQkJCQkJICAgICBhY3Rpb24sIHZhbHVlKTsKKwkJcmMgPSBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZwU2VyaWVzX3JlY29uZmlnX2NoYWluLAorCQkJCQkJICBhY3Rpb24sIHZhbHVlKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwppbmRleCBjOWZmZDhjLi5mNGU1NWJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwpAQCAtMjk1LDE5ICsyOTUsMjkgQEAKIAlpZiAoIXRtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CiAJLyogaWYgaXQncyAwLCB0aGVuIHdlIGtub3cgd2UgZ290IHRoZSBsYXN0IG9uZSAodGhlIG9uZSBpbiBOVlJBTSkgKi8KLQlpZiAocnRhc19sb2dfc2l6ZSA9PSAwICYmIGxvZ2dpbmdfZW5hYmxlZCkKKwl3aGlsZSAocnRhc19sb2dfc2l6ZSA9PSAwKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQkJZXJyb3IgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWxvZ2dpbmdfZW5hYmxlZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQkJZXJyb3IgPSAtRU5PREFUQTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCW52cmFtX2NsZWFyX2Vycm9yX2xvZygpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJ0YXNfbG9nX3dhaXQsIHJ0YXNfbG9nX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKKwl9CiAKLQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShydGFzX2xvZ193YWl0LCBydGFzX2xvZ19zaXplKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAlvZmZzZXQgPSBydGFzX2Vycm9yX2xvZ19idWZmZXJfbWF4ICogKHJ0YXNfbG9nX3N0YXJ0ICYgTE9HX05VTUJFUl9NQVNLKTsKIAltZW1jcHkodG1wLCAmcnRhc19sb2dfYnVmW29mZnNldF0sIGNvdW50KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IDlkOGY4YzguLmUwMGY5NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlICJ4aWNzLmgiCiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDksNiArNDgsNyBAQAogCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJwc2VyaWVzLmgiCisjaW5jbHVkZSAieGljcy5oIgogCiAKIC8qCkBAIC0xMDUsMzYgKzEwNSw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWElDUwotc3RhdGljIGlubGluZSB2b2lkIHNtcF94aWNzX2RvX21lc3NhZ2UoaW50IGNwdSwgaW50IG1zZykKLXsKLQlzZXRfYml0KG1zZywgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSk7Ci0JbWIoKTsKLQl4aWNzX2NhdXNlX0lQSShjcHUpOwotfQotCi1zdGF0aWMgdm9pZCBzbXBfeGljc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICh0YXJnZXQgPCBOUl9DUFVTKSB7Ci0JCXNtcF94aWNzX2RvX21lc3NhZ2UodGFyZ2V0LCBtc2cpOwotCX0gZWxzZSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQkJaWYgKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGCi0JCQkgICAgJiYgaSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQkJY29udGludWU7Ci0JCQlzbXBfeGljc19kb19tZXNzYWdlKGksIG1zZyk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNtcF94aWNzX3Byb2JlKHZvaWQpCi17Ci0JeGljc19yZXF1ZXN0X0lQSXMoKTsKLQotCXJldHVybiBjcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKTsKLX0KLQogc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF94aWNzX3NldHVwX2NwdShpbnQgY3B1KQogewogCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDBmYzgzMGYuLmUxOTA0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtOSwzMiArOSwzMCBAQAogICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogCiAjaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKnhpY3NfaG9zdDsKKwogI2RlZmluZSBYSUNTX0lQSQkJMgogI2RlZmluZSBYSUNTX0lSUV9TUFVSSU9VUwkwCiAKQEAgLTQ3LDYgKzQ1LDIwIEBACiAgKi8KICNkZWZpbmUgSVBJX1BSSU9SSVRZCQk0CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zZXJ2ZXIgPSAweEZGOworc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplID0gODsKKworLyogUlRBUyBzZXJ2aWNlIHRva2VucyAqLworc3RhdGljIGludCBpYm1fZ2V0X3hpdmU7CitzdGF0aWMgaW50IGlibV9zZXRfeGl2ZTsKK3N0YXRpYyBpbnQgaWJtX2ludF9vbjsKK3N0YXRpYyBpbnQgaWJtX2ludF9vZmY7CisKKworLyogRGlyZWN0IGhhcmR3YXJlIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KKworLyogVGhlIHBhcnQgb2YgdGhlIGludGVycnVwdCBwcmVzZW50YXRpb24gbGF5ZXIgdGhhdCB3ZSBjYXJlIGFib3V0ICovCiBzdHJ1Y3QgeGljc19pcGwgewogCXVuaW9uIHsKIAkJdTMyIHdvcmQ7CkBAIC02NSwyNyArNzcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHhpY3NfaXBsIF9faW9tZW0gKnhpY3NfcGVyX2NwdVtOUl9DUFVTXTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X3NlcnZlciA9IDB4RkY7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSA4OwotCi1zdGF0aWMgc3RydWN0IGlycV9ob3N0ICp4aWNzX2hvc3Q7Ci0KLS8qCi0gKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCi0gKi8KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgeGljc19pcGlfbWVzc2FnZVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwotCi0vKiBSVEFTIHNlcnZpY2UgdG9rZW5zICovCi1zdGF0aWMgaW50IGlibV9nZXRfeGl2ZTsKLXN0YXRpYyBpbnQgaWJtX3NldF94aXZlOwotc3RhdGljIGludCBpYm1faW50X29uOwotc3RhdGljIGludCBpYm1faW50X29mZjsKLQotCi0vKiBEaXJlY3QgSFcgbG93IGxldmVsIGFjY2Vzc29ycyAqLwotCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpcmVjdF94aXJyX2luZm9fZ2V0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTkzLDcgKzg0LDcgQEAKIAlyZXR1cm4gaW5fYmUzMigmeGljc19wZXJfY3B1W2NwdV0tPnhpcnIud29yZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXJlY3RfeGlycl9pbmZvX3NldChpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X3hpcnJfaW5mb19zZXQodW5zaWduZWQgaW50IHZhbHVlKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTExNSw3ICsxMDYsNiBAQAogCiAvKiBMUEFSIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KIAotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBscGFyX3hpcnJfaW5mb19nZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CkBAIC0xMjcsMTUgKzExNywxNCBAQAogCXJldHVybiAodW5zaWduZWQgaW50KXJldHVybl92YWx1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxwYXJfeGlycl9pbmZvX3NldChpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl94aXJyX2luZm9fc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7Ci0JdW5zaWduZWQgbG9uZyB2YWw2NCA9IHZhbHVlICYgMHhmZmZmZmZmZjsKIAotCWxwYXJfcmMgPSBwbHBhcl9lb2kodmFsNjQpOworCWxwYXJfcmMgPSBwbHBhcl9lb2kodmFsdWUpOwogCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKLQkJcGFuaWMoImJhZCByZXR1cm4gY29kZSBFT0kgLSByYyA9ICVsZCwgdmFsdWU9JWx4XG4iLCBscGFyX3JjLAotCQkgICAgICB2YWw2NCk7CisJCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgRU9JIC0gcmMgPSAlbGQsIHZhbHVlPSV4XG4iLCBscGFyX3JjLAorCQkgICAgICB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBscGFyX2NwcHJfaW5mbyh1OCB2YWx1ZSkKQEAgLTE1Nyw0OCArMTQ2LDcgQEAKIH0KIAogCi0vKiBIaWdoIGxldmVsIGhhbmRsZXJzIGFuZCBpbml0IGNvZGUgKi8KLQotc3RhdGljIHZvaWQgeGljc191cGRhdGVfaXJxX3NlcnZlcnModm9pZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXUzMiBpbGVuOwotCWNvbnN0IHUzMiAqaXJlZywgKmlzaXplOwotCXUzMiBoY3B1aWQ7Ci0KLQkvKiBGaW5kIHRoZSBzZXJ2ZXIgbnVtYmVycyBmb3IgdGhlIGJvb3QgY3B1LiAqLwotCW5wID0gb2ZfZ2V0X2NwdV9ub2RlKGJvb3RfY3B1aWQsIE5VTEwpOwotCUJVR19PTighbnApOwotCi0JaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LWdzZXJ2ZXIjcyIsICZpbGVuKTsKLQlpZiAoIWlyZWcpIHsKLQkJb2Zfbm9kZV9wdXQobnApOwotCQlyZXR1cm47Ci0JfQotCi0JaSA9IGlsZW4gLyBzaXplb2YoaW50KTsKLQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQpOwotCi0JLyogR2xvYmFsIGludGVycnVwdCBkaXN0cmlidXRpb24gc2VydmVyIGlzIHNwZWNpZmllZCBpbiB0aGUgbGFzdAotCSAqIGVudHJ5IG9mICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiIHByb3BlcnR5LiBHZXQgdGhlIGxhc3QKLQkgKiBlbnRyeSBmb20gdGhpcyBwcm9wZXJ0eSBmb3IgY3VycmVudCBib290IGNwdSBpZCBhbmQgdXNlIGl0IGFzCi0JICogZGVmYXVsdCBkaXN0cmlidXRpb24gc2VydmVyCi0JICovCi0JZm9yIChqID0gMDsgaiA8IGk7IGogKz0gMikgewotCQlpZiAoaXJlZ1tqXSA9PSBoY3B1aWQpIHsKLQkJCWRlZmF1bHRfc2VydmVyID0gaGNwdWlkOwotCQkJZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IGlyZWdbaisxXTsKLQotCQkJaXNpemUgPSBvZl9nZXRfcHJvcGVydHkobnAsCi0JCQkJCSJpYm0saW50ZXJydXB0LXNlcnZlciMtc2l6ZSIsIE5VTEwpOwotCQkJaWYgKGlzaXplKQotCQkJCWludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9ICppc2l6ZTsKLQkJfQotCX0KLQotCW9mX25vZGVfcHV0KG5wKTsKLX0KKy8qIEludGVyZmFjZSB0byBnZW5lcmljIGlycSBzdWJzeXN0ZW0gKi8KIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBzdHJpY3RfY2hlY2spCkBAIC0yMDgsOSArMTU2LDYgQEAKIAljcHVtYXNrX3QgY3B1bWFzayA9IGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5OwogCWNwdW1hc2tfdCB0bXAgPSBDUFVfTUFTS19OT05FOwogCi0JaWYgKCEgY3B1X2lzc2V0KGRlZmF1bHRfc2VydmVyLCBjcHVfb25saW5lX21hcCkpCi0JCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7Ci0KIAlpZiAoIWRpc3RyaWJ1dGVfaXJxcykKIAkJcmV0dXJuIGRlZmF1bHRfc2VydmVyOwogCkBAIC0yMzgsNyArMTgzLDYgQEAKIH0KICNlbmRpZgogCi0KIHN0YXRpYyB2b2lkIHhpY3NfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtMjU3LDIxICsyMDEsMjggQEAKIAljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGlycSwgc2VydmVyLAogCQkJCURFRkFVTFRfUFJJT1JJVFkpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19lbmFibGVfaXJxOiBpcnE9JXU6IGlibV9zZXRfeGl2ZSAiCi0JCSAgICAgICAicmV0dXJuZWQgJWRcbiIsIGlycSwgY2FsbF9zdGF0dXMpOwotCQlwcmludGsoInNldF94aXZlICV4LCBzZXJ2ZXIgJXhcbiIsIGlibV9zZXRfeGl2ZSwgc2VydmVyKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXM6IGlibV9zZXRfeGl2ZSBpcnEgJXUgc2VydmVyICV4IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgc2VydmVyLCBjYWxsX3N0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBOb3cgdW5tYXNrIHRoZSBpbnRlcnJ1cHQgKG9mdGVuIGEgbm8tb3ApICovCiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX2ludF9vbiwgMSwgMSwgTlVMTCwgaXJxKTsKIAlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInhpY3NfZW5hYmxlX2lycTogaXJxPSV1OiBpYm1faW50X29uICIKLQkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgaXJxLCBjYWxsX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb24gaXJxPSV1IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgY2FsbF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cCh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwkvKiB1bm1hc2sgaXQgKi8KKwl4aWNzX3VubWFza19pcnEodmlycSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHhpY3NfbWFza19yZWFsX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBjYWxsX3N0YXR1czsKQEAgLTI4MSw4ICsyMzIsOCBAQAogCiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX2ludF9vZmYsIDEsIDEsIE5VTEwsIGlycSk7CiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX2Rpc2FibGVfcmVhbF9pcnE6IGlycT0ldTogIgotCQkgICAgICAgImlibV9pbnRfb2ZmIHJldHVybmVkICVkXG4iLCBpcnEsIGNhbGxfc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX2ludF9vZmYgaXJxPSV1IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgY2FsbF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yOTAsOCArMjQxLDggQEAKIAljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGlycSwKIAkJCQlkZWZhdWx0X3NlcnZlciwgMHhmZik7CiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX2Rpc2FibGVfaXJxOiBpcnE9JXU6IGlibV9zZXRfeGl2ZSgweGZmKSIKLQkJICAgICAgICIgcmV0dXJuZWQgJWRcbiIsIGlycSwgY2FsbF9zdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1fc2V0X3hpdmUoMHhmZikgaXJxPSV1IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgY2FsbF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogfQpAQCAtMzA4LDE3ICsyNTksNjEgQEAKIAl4aWNzX21hc2tfcmVhbF9pcnEoaXJxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCitzdGF0aWMgdm9pZCB4aWNzX21hc2tfdW5rbm93bl92ZWModW5zaWduZWQgaW50IHZlYykKIHsKKwlwcmludGsoS0VSTl9FUlIgIkludGVycnVwdCAldSAocmVhbCkgaXMgaW52YWxpZCwgZGlzYWJsaW5nIGl0LlxuIiwgdmVjKTsKKwl4aWNzX21hc2tfcmVhbF9pcnEodmVjKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGljc194aXJyX3ZlY3Rvcih1bnNpZ25lZCBpbnQgeGlycikKK3sKKwkvKgorCSAqIFRoZSB0b3AgYnl0ZSBpcyB0aGUgb2xkIGNwcHIsIHRvIGJlIHJlc3RvcmVkIG9uIEVPSS4KKwkgKiBUaGUgcmVtYWluaW5nIDI0IGJpdHMgYXJlIHRoZSB2ZWN0b3IuCisJICovCisJcmV0dXJuIHhpcnIgJiAweDAwZmZmZmZmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9kaXJlY3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgeGlyciA9IGRpcmVjdF94aXJyX2luZm9fZ2V0KCk7CisJdW5zaWduZWQgaW50IHZlYyA9IHhpY3NfeGlycl92ZWN0b3IoeGlycik7CiAJdW5zaWduZWQgaW50IGlycTsKIAotCS8qIGZvcmNlIGEgcmV2ZXJzZSBtYXBwaW5nIG9mIHRoZSBpbnRlcnJ1cHQgc28gaXQgZ2V0cyBpbiB0aGUgY2FjaGUgKi8KLQlpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7Ci0JaXJxX3JhZGl4X3Jldm1hcCh4aWNzX2hvc3QsIGlycSk7CisJaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuIE5PX0lSUTsKIAotCS8qIHVubWFzayBpdCAqLwotCXhpY3NfdW5tYXNrX2lycSh2aXJxKTsKLQlyZXR1cm4gMDsKKwlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7CisJaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKKwkJcmV0dXJuIGlycTsKKworCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIHJ0YXMgbWFzayBpdC4gKi8KKwl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKKworCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KKwlkaXJlY3RfeGlycl9pbmZvX3NldCh4aXJyKTsKKwlyZXR1cm4gTk9fSVJROworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9scGFyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHhpcnIgPSBscGFyX3hpcnJfaW5mb19nZXQoKTsKKwl1bnNpZ25lZCBpbnQgdmVjID0geGljc194aXJyX3ZlY3Rvcih4aXJyKTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuIE5PX0lSUTsKKworCWlycSA9IGlycV9yYWRpeF9yZXZtYXBfbG9va3VwKHhpY3NfaG9zdCwgdmVjKTsKKwlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKQorCQlyZXR1cm4gaXJxOworCisJLyogV2UgZG9uJ3QgaGF2ZSBhIGxpbnV4IG1hcHBpbmcsIHNvIGhhdmUgUlRBUyBtYXNrIGl0LiAqLworCXhpY3NfbWFza191bmtub3duX3ZlYyh2ZWMpOworCisJLyogV2UgbWlnaHQgbGVhcm4gYWJvdXQgaXQgbGF0ZXIsIHNvIEVPSSBpdCAqLworCWxwYXJfeGlycl9pbmZvX3NldCh4aXJyKTsKKwlyZXR1cm4gTk9fSVJROwogfQogCiBzdGF0aWMgdm9pZCB4aWNzX2VvaV9kaXJlY3QodW5zaWduZWQgaW50IHZpcnEpCkBAIC0zMjksNyArMzI0LDYgQEAKIAlkaXJlY3RfeGlycl9pbmZvX3NldCgoMHhmZiA8PCAyNCkgfCBpcnEpOwogfQogCi0KIHN0YXRpYyB2b2lkIHhpY3NfZW9pX2xwYXIodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IGlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKQEAgLTMzOCwxMDQgKzMzMiw2IEBACiAJbHBhcl94aXJyX2luZm9fc2V0KCgweGZmIDw8IDI0KSB8IGlycSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfcmVtYXBfaXJxKHVuc2lnbmVkIGludCB2ZWMpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCXZlYyAmPSAweDAwZmZmZmZmOwotCi0JaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykKLQkJcmV0dXJuIE5PX0lSUTsKLQlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwKHhpY3NfaG9zdCwgdmVjKTsKLQlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKQotCQlyZXR1cm4gaXJxOwotCi0JcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIgotCSAgICAgICAiIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7Ci0JeGljc19tYXNrX3JlYWxfaXJxKHZlYyk7Ci0JcmV0dXJuIE5PX0lSUTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfZGlyZWN0KHZvaWQpCi17Ci0JcmV0dXJuIHhpY3NfcmVtYXBfaXJxKGRpcmVjdF94aXJyX2luZm9fZ2V0KCkpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9scGFyKHZvaWQpCi17Ci0JcmV0dXJuIHhpY3NfcmVtYXBfaXJxKGxwYXJfeGlycl9pbmZvX2dldCgpKTsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2Rpc3BhdGNoKGludCBjcHUpCi17Ci0JV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKLQotCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7Ci0JCQltYigpOwotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ1RJT04pOwotCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19SRVNDSEVEVUxFLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgewotCQkJbWIoKTsKLQkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKLQkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKLQkJCW1iKCk7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSk7Ci0JCX0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19ERUJVR0dFUl9CUkVBSywKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKLQkJCW1iKCk7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfREVCVUdHRVJfQlJFQUspOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfYWN0aW9uX2RpcmVjdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWRpcmVjdF9xaXJyX2luZm8oY3B1LCAweGZmKTsKLQotCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfYWN0aW9uX2xwYXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlscGFyX3FpcnJfaW5mbyhjcHUsIDB4ZmYpOwotCi0JcmV0dXJuIHhpY3NfaXBpX2Rpc3BhdGNoKGNwdSk7Ci19Ci0KLXZvaWQgeGljc19jYXVzZV9JUEkoaW50IGNwdSkKLXsKLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJbHBhcl9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOwotCWVsc2UKLQkJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLXN0YXRpYyB2b2lkIHhpY3Nfc2V0X2NwdV9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGNwcHIpCi17Ci0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfY3Bwcl9pbmZvKGNwcHIpOwotCWVsc2UKLQkJZGlyZWN0X2NwcHJfaW5mbyhjcHByKTsKLQlpb3N5bmMoKTsKLX0KLQogc3RhdGljIHZvaWQgeGljc19zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IHZpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKQogewogCXVuc2lnbmVkIGludCBpcnE7CkBAIC00NTAsOCArMzQ2LDggQEAKIAlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaXJxKTsKIAogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX3NldF9hZmZpbml0eTogaXJxPSV1IGlibSxnZXQteGl2ZSAiCi0JCSAgICAgICAicmV0dXJucyAlZFxuIiwgaXJxLCBzdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sZ2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCisJCQlfX2Z1bmNfXywgaXJxLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NjMsOCArMzU5LDkgQEAKIAlpZiAoaXJxX3NlcnZlciA9PSAtMSkgewogCQljaGFyIGNwdWxpc3RbMTI4XTsKIAkJY3B1bWFza19zY25wcmludGYoY3B1bGlzdCwgc2l6ZW9mKGNwdWxpc3QpLCBjcHVtYXNrKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAieGljc19zZXRfYWZmaW5pdHk6IE5vIG9ubGluZSBjcHVzIGluICIKLQkJCQkidGhlIG1hc2sgJXMgZm9yIGlycSAlZFxuIiwgY3B1bGlzdCwgdmlycSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSIlczogTm8gb25saW5lIGNwdXMgaW4gdGhlIG1hc2sgJXMgZm9yIGlycSAlZFxuIiwKKwkJCV9fZnVuY19fLCBjcHVsaXN0LCB2aXJxKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDcyLDI4ICszNjksMTIgQEAKIAkJCQlpcnEsIGlycV9zZXJ2ZXIsIHhpY3Nfc3RhdHVzWzFdKTsKIAogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX3NldF9hZmZpbml0eTogaXJxPSV1IGlibSxzZXQteGl2ZSAiCi0JCSAgICAgICAicmV0dXJucyAlZFxuIiwgaXJxLCBzdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sc2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCisJCQlfX2Z1bmNfXywgaXJxLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogfQogCi12b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpCi17Ci0JeGljc19zZXRfY3B1X3ByaW9yaXR5KDB4ZmYpOwotCi0JLyoKLQkgKiBQdXQgdGhlIGNhbGxpbmcgcHJvY2Vzc29yIGludG8gdGhlIEdJUS4gIFRoaXMgaXMgcmVhbGx5IG9ubHkKLQkgKiBuZWNlc3NhcnkgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQgYXMgdGhlIE9GIHN0YXJ0LWNwdSBpbnRlcmZhY2UKLQkgKiBwZXJmb3JtcyB0aGlzIGZ1bmN0aW9uIGZvciB1cyBvbiBwcmltYXJ5IHRocmVhZHMuCi0JICoKLQkgKiBYWFg6IHVuZG8gb2YgdGVhcmRvd24gb24ga2V4ZWMgbmVlZHMgdGhpcyB0b28sIGFzIG1heSBob3RwbHVnCi0JICovCi0JcnRhc19zZXRfaW5kaWNhdG9yX2Zhc3QoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKLQkJKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGljc19waWNfZGlyZWN0ID0gewogCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKQEAgLTUwMyw3ICszODQsNiBAQAogCS5zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQogfTsKIAotCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2xwYXIgPSB7CiAJLnR5cGVuYW1lID0gIiBYSUNTICAgICAiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLApAQCAtNTEzLDYgKzM5Myw5IEBACiAJLnNldF9hZmZpbml0eSA9IHhpY3Nfc2V0X2FmZmluaXR5CiB9OwogCisKKy8qIEludGVyZmFjZSB0byBhcmNoIGlycSBjb250cm9sbGVyIHN1YnN5c3RlbSBsYXllciAqLworCiAvKiBQb2ludHMgdG8gdGhlIGlycV9jaGlwIHdlJ3JlIGFjdHVhbGx5IHVzaW5nICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwICp4aWNzX2lycV9jaGlwOwogCkBAIC01MzAsNiArNDEzLDkgQEAKIHsKIAlwcl9kZWJ1ZygieGljczogbWFwIHZpcnEgJWQsIGh3aXJxIDB4JWx4XG4iLCB2aXJxLCBodyk7CiAKKwkvKiBJbnNlcnQgdGhlIGludGVycnVwdCBtYXBwaW5nIGludG8gdGhlIHJhZGl4IHRyZWUgZm9yIGZhc3QgbG9va3VwICovCisJaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoeGljc19ob3N0LCB2aXJxLCBodyk7CisKIAlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIHhpY3NfaXJxX2NoaXAsIGhhbmRsZV9mYXN0ZW9pX2lycSk7CiAJcmV0dXJuIDA7CkBAIC01NjksMTAgKzQ1NSwxNjkgQEAKIAlpcnFfc2V0X2RlZmF1bHRfaG9zdCh4aWNzX2hvc3QpOwogfQogCisKKy8qIEludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHQgc3VwcG9ydCAqLworCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIFhJQ1Mgb25seSBoYXMgYSBzaW5nbGUgSVBJLCBzbyBlbmNvZGUgdGhlIG1lc3NhZ2VzIHBlciBDUFUKKyAqLworc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisJfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGlubGluZSB2b2lkIHNtcF94aWNzX2RvX21lc3NhZ2UoaW50IGNwdSwgaW50IG1zZykKK3sKKwlzZXRfYml0KG1zZywgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSk7CisJbWIoKTsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJbHBhcl9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOworCWVsc2UKKwkJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7Cit9CisKK3ZvaWQgc21wX3hpY3NfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgeworCQlzbXBfeGljc19kb19tZXNzYWdlKHRhcmdldCwgbXNnKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgorCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOworCQkJc21wX3hpY3NfZG9fbWVzc2FnZShpLCBtc2cpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKK3sKKwlXQVJOX09OKGNwdV9pc19vZmZsaW5lKGNwdSkpOworCisJbWIoKTsJLyogb3JkZXIgbW1pbyBjbGVhcmluZyBxaXJyICovCisJd2hpbGUgKHhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DVElPTiwKKwkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKKwkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKKwkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKKwkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKKwkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKKwkJfQorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLAorCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKKwkJfQorI2VuZGlmCisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlkaXJlY3RfcWlycl9pbmZvKGNwdSwgMHhmZik7CisKKwlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9scGFyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKKworCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOworfQorCitzdGF0aWMgdm9pZCB4aWNzX3JlcXVlc3RfaXBpKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGlwaTsKKwlpbnQgcmM7CisKKwlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7CisJQlVHX09OKGlwaSA9PSBOT19JUlEpOworCisJLyoKKwkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcworCSAqIGRpc2FibGVkCisJICovCisJc2V0X2lycV9oYW5kbGVyKGlwaSwgaGFuZGxlX3BlcmNwdV9pcnEpOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2xwYXIsCisJCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVSwgIklQSSIsIE5VTEwpOworCWVsc2UKKwkJcmMgPSByZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QsCisJCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVSwgIklQSSIsIE5VTEwpOworCUJVR19PTihyYyk7Cit9CisKK2ludCBfX2luaXQgc21wX3hpY3NfcHJvYmUodm9pZCkKK3sKKwl4aWNzX3JlcXVlc3RfaXBpKCk7CisKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKworLyogSW5pdGlhbGl6YXRpb24gKi8KKworc3RhdGljIHZvaWQgeGljc191cGRhdGVfaXJxX3NlcnZlcnModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXUzMiBpbGVuOworCWNvbnN0IHUzMiAqaXJlZywgKmlzaXplOworCXUzMiBoY3B1aWQ7CisKKwkvKiBGaW5kIHRoZSBzZXJ2ZXIgbnVtYmVycyBmb3IgdGhlIGJvb3QgY3B1LiAqLworCW5wID0gb2ZfZ2V0X2NwdV9ub2RlKGJvb3RfY3B1aWQsIE5VTEwpOworCUJVR19PTighbnApOworCisJaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LWdzZXJ2ZXIjcyIsICZpbGVuKTsKKwlpZiAoIWlyZWcpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJaSA9IGlsZW4gLyBzaXplb2YoaW50KTsKKwloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQpOworCisJLyogR2xvYmFsIGludGVycnVwdCBkaXN0cmlidXRpb24gc2VydmVyIGlzIHNwZWNpZmllZCBpbiB0aGUgbGFzdAorCSAqIGVudHJ5IG9mICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiIHByb3BlcnR5LiBHZXQgdGhlIGxhc3QKKwkgKiBlbnRyeSBmb20gdGhpcyBwcm9wZXJ0eSBmb3IgY3VycmVudCBib290IGNwdSBpZCBhbmQgdXNlIGl0IGFzCisJICogZGVmYXVsdCBkaXN0cmlidXRpb24gc2VydmVyCisJICovCisJZm9yIChqID0gMDsgaiA8IGk7IGogKz0gMikgeworCQlpZiAoaXJlZ1tqXSA9PSBoY3B1aWQpIHsKKwkJCWRlZmF1bHRfc2VydmVyID0gaGNwdWlkOworCQkJZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IGlyZWdbaisxXTsKKwkJfQorCX0KKworCS8qIGdldCB0aGUgYml0IHNpemUgb2Ygc2VydmVyIG51bWJlcnMgKi8KKwlpc2l6ZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxpbnRlcnJ1cHQtc2VydmVyIy1zaXplIiwgTlVMTCk7CisJaWYgKGlzaXplKQorCQlpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSAqaXNpemU7CisKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB4aWNzX21hcF9vbmVfY3B1KGludCBod19pZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewotI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgaTsKIAogCS8qIFRoaXMgbWF5IGxvb2sgZ3Jvc3MgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vdywgd2UgZG9uJ3QgcXVpdGUKQEAgLTU4NiwxMSArNjMxLDYgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLSNlbHNlCi0JaWYgKGh3X2lkICE9IDApCi0JCXJldHVybjsKLQl4aWNzX3Blcl9jcHVbMF0gPSBpb3JlbWFwKGFkZHIsIHNpemUpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHhpY3NfaW5pdF9vbmVfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLApAQCAtNjUyLDE1ICs2OTIsMTcgQEAKIAogCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgIlBvd2VyUEMtRXh0ZXJuYWwtSW50ZXJydXB0LVByZXNlbnRhdGlvbiIpIHsKIAkJZm91bmQgPSAxOwotCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpIHsKKwkJCW9mX25vZGVfcHV0KG5wKTsKIAkJCWJyZWFrOworCQkJfQogCQl4aWNzX2luaXRfb25lX25vZGUobnAsICZpbmR4KTsKIAl9CiAJaWYgKGZvdW5kID09IDApCiAJCXJldHVybjsKIAotCXhpY3NfaW5pdF9ob3N0KCk7CiAJeGljc191cGRhdGVfaXJxX3NlcnZlcnMoKTsKKwl4aWNzX2luaXRfaG9zdCgpOwogCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCXBwY19tZC5nZXRfaXJxID0geGljc19nZXRfaXJxX2xwYXI7CkBAIC02NzIsMzAgKzcxNCwzMSBAQAogCXBwYzY0X2Jvb3RfbXNnKDB4MjEsICJYSUNTIERvbmUiKTsKIH0KIAorLyogQ3B1IHN0YXJ0dXAsIHNodXRkb3duLCBhbmQgaG90cGx1ZyAqLwogCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCB4aWNzX3JlcXVlc3RfSVBJcyh2b2lkKQorc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X3ByaW9yaXR5KHVuc2lnbmVkIGNoYXIgY3BwcikKIHsKLQl1bnNpZ25lZCBpbnQgaXBpOwotCWludCByYzsKLQotCWlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyh4aWNzX2hvc3QsIFhJQ1NfSVBJKTsKLQlCVUdfT04oaXBpID09IE5PX0lSUSk7Ci0KLQkvKgotCSAqIElQSXMgYXJlIG1hcmtlZCBJUlFGX0RJU0FCTEVEIGFzIHRoZXkgbXVzdCBydW4gd2l0aCBpcnFzCi0JICogZGlzYWJsZWQKLQkgKi8KLQlzZXRfaXJxX2hhbmRsZXIoaXBpLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fbHBhciwgSVJRRl9ESVNBQkxFRCwKLQkJCQkiSVBJIiwgTlVMTCk7CisJCWxwYXJfY3Bwcl9pbmZvKGNwcHIpOwogCWVsc2UKLQkJcmMgPSByZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QsIElSUUZfRElTQUJMRUQsCi0JCQkJIklQSSIsIE5VTEwpOwotCUJVR19PTihyYyk7CisJCWRpcmVjdF9jcHByX2luZm8oY3Bwcik7CisJaW9zeW5jKCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKiBIYXZlIHRoZSBjYWxsaW5nIHByb2Nlc3NvciBqb2luIG9yIGxlYXZlIHRoZSBzcGVjaWZpZWQgZ2xvYmFsIHF1ZXVlICovCitzdGF0aWMgdm9pZCB4aWNzX3NldF9jcHVfZ2lxKHVuc2lnbmVkIGludCBnc2VydmVyLCB1bnNpZ25lZCBpbnQgam9pbikKK3sKKwlpbnQgc3RhdHVzID0gcnRhc19zZXRfaW5kaWNhdG9yX2Zhc3QoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKKwkJKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGdzZXJ2ZXIsIGpvaW4pOworCVdBUk5fT04oc3RhdHVzIDwgMCk7Cit9CisKK3ZvaWQgeGljc19zZXR1cF9jcHUodm9pZCkKK3sKKwl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMHhmZik7CisKKwl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOworfQogCiB2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpCiB7CkBAIC03MDMsOSArNzQ2LDcgQEAKIAogCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgwKTsKIAotCS8qCi0JICogQ2xlYXIgSVBJCi0JICovCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgSVBJIHJlcXVlc3QgKi8KIAlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKIAllbHNlCkBAIC03MTQsMzQgKzc1NSwyOCBAQAogCiB2b2lkIHhpY3Nfa2V4ZWNfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpCiB7Ci0JdW5zaWduZWQgaW50IGlwaTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KIAl4aWNzX3RlYXJkb3duX2NwdSgpOwogCiAJLyoKLQkgKiB3ZSBuZWVkIHRvIEVPSSB0aGUgSVBJCisJICogd2UgdGFrZSB0aGUgaXBpIGlycSBidXQgYW5kIG5ldmVyIHJldHVybiBzbyB3ZQorCSAqIG5lZWQgdG8gRU9JIHRoZSBJUEksIGJ1dCB3YW50IHRvIGxlYXZlIG91ciBwcmlvcml0eSAwCiAJICoKLQkgKiBwcm9iYWJseSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyB0b28KKwkgKiBzaG91bGQgd2UgY2hlY2sgYWxsIHRoZSBvdGhlciBpbnRlcnJ1cHRzIHRvbz8KIAkgKiBzaG91bGQgd2UgYmUgZmxhZ2dpbmcgaWRsZSBsb29wIGluc3RlYWQ/CiAJICogb3IgY3JlYXRpbmcgc29tZSB0YXNrIHRvIGJlIHNjaGVkdWxlZD8KIAkgKi8KIAotCWlwaSA9IGlycV9maW5kX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7Ci0JaWYgKGlwaSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKLQkJcmV0dXJuOwotCWRlc2MgPSBnZXRfaXJxX2Rlc2MoaXBpKTsKLQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5lb2kpCi0JCWRlc2MtPmNoaXAtPmVvaShpcGkpOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlscGFyX3hpcnJfaW5mb19zZXQoKDB4MDAgPDwgMjQpIHwgWElDU19JUEkpOworCWVsc2UKKwkJZGlyZWN0X3hpcnJfaW5mb19zZXQoKDB4MDAgPDwgMjQpIHwgWElDU19JUEkpOwogCiAJLyoKIAkgKiBTb21lIG1hY2hpbmVzIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgY3B1IGluIHRoZSBHSVEsCiAJICogc28gbGVhdmUgdGhlIG1hc3RlciBjcHUgaW4gdGhlIGdyb3VwLgogCSAqLwogCWlmIChzZWNvbmRhcnkpCi0JCXJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCi0JCQkJICAgKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtCi0JCQkJICAgZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CisJCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTc0OSwxNyArNzg0LDE4IEBACiAvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gKi8KIHZvaWQgeGljc19taWdyYXRlX2lycXNfYXdheSh2b2lkKQogewotCWludCBzdGF0dXM7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKSwgaHdfY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgaW50IGlycSwgdmlycTsKIAorCS8qIElmIHdlIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgc2VydmVyLCBtb3ZlIHRvIHRoZSBuZXcgImJvb3RfY3B1aWQiICovCisJaWYgKGh3X2NwdSA9PSBkZWZhdWx0X3NlcnZlcikKKwkJeGljc191cGRhdGVfaXJxX3NlcnZlcnMoKTsKKwogCS8qIFJlamVjdCBhbnkgaW50ZXJydXB0IHRoYXQgd2FzIHF1ZXVlZCB0byB1cy4uLiAqLwogCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgwKTsKIAotCS8qIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZ2xvYmFsIGludGVycnVwdCBxdWV1ZSAqLwotCXN0YXR1cyA9IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCi0JCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAwKTsKLQlXQVJOX09OKHN0YXR1cyA8IDApOworCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZ2xvYmFsIGludGVycnVwdCBxdWV1ZSAqLworCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CiAKIAkvKiBBbGxvdyBJUElzIGFnYWluLi4uICovCiAJeGljc19zZXRfY3B1X3ByaW9yaXR5KERFRkFVTFRfUFJJT1JJVFkpOwpAQCAtNzY3LDYgKzgwMyw3IEBACiAJZm9yX2VhY2hfaXJxKHZpcnEpIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCQlpbnQgeGljc19zdGF0dXNbMl07CisJCWludCBzdGF0dXM7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogV2UgY2FudCBzZXQgYWZmaW5pdHkgb24gSVNBIGludGVycnVwdHMgKi8KQEAgLTc5MCw5ICs4MjcsOCBAQAogCiAJCXN0YXR1cyA9IHJ0YXNfY2FsbChpYm1fZ2V0X3hpdmUsIDEsIDMsIHhpY3Nfc3RhdHVzLCBpcnEpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1pZ3JhdGVfaXJxc19hd2F5OiBpcnE9JXUgIgotCQkJCQkiaWJtLGdldC14aXZlIHJldHVybnMgJWRcbiIsCi0JCQkJCXZpcnEsIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sZ2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBpcnEsIHN0YXR1cyk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAppbmRleCAxYzUzMjFhLi5kMWQ1YTgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKQEAgLTEyLDIwICsxMiwxMiBAQAogI2lmbmRlZiBfUE9XRVJQQ19LRVJORUxfWElDU19ICiAjZGVmaW5lIF9QT1dFUlBDX0tFUk5FTF9YSUNTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KIGV4dGVybiB2b2lkIHhpY3NfaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKTsKIGV4dGVybiB2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpOwogZXh0ZXJuIHZvaWQgeGljc19rZXhlY190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSk7Ci1leHRlcm4gdm9pZCB4aWNzX2NhdXNlX0lQSShpbnQgY3B1KTsKLWV4dGVybiAgdm9pZCB4aWNzX3JlcXVlc3RfSVBJcyh2b2lkKTsKIGV4dGVybiB2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCk7Ci0KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdmFsdWU7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotZXh0ZXJuIHN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgeGljc19pcGlfbWVzc2FnZVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOworZXh0ZXJuIGludCBzbXBfeGljc19wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNtcF94aWNzX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKIAogI2VuZGlmIC8qIF9QT1dFUlBDX0tFUk5FTF9YSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZwppbmRleCA3MmZiMzViLi4zOTY1ODI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnCkBAIC02LDMgKzYsOSBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIFBDSSAmJiA0eHgKIAlkZWZhdWx0IG4KKworY29uZmlnIFBQQ19NU0lfQklUTUFQCisJYm9vbAorCWRlcGVuZHMgb24gUENJX01TSQorCWRlZmF1bHQgeSBpZiBNUElDCisJZGVmYXVsdCB5IGlmIEZTTF9QQ0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IGE5MDA1NGIuLmE0NDcwOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIG1waWMtbXNpLW9iai0kKENPTkZJR19QQ0lfTVNJKQkrPSBtcGljX21zaS5vIG1waWNfdTNtc2kubyBtcGljX3Bhc2VtaV9tc2kubwogb2JqLSQoQ09ORklHX01QSUMpCQkrPSBtcGljLm8gJChtcGljLW1zaS1vYmoteSkKIGZzbC1tc2ktb2JqLSQoQ09ORklHX1BDSV9NU0kpCSs9IGZzbF9tc2kubworb2JqLSQoQ09ORklHX1BQQ19NU0lfQklUTUFQKQkrPSBtc2lfYml0bWFwLm8KIAogb2JqLSQoQ09ORklHX1BQQ19NUEMxMDYpCSs9IGdyYWNrbGUubwogb2JqLSQoQ09ORklHX1BQQ19EQ1JfTkFUSVZFKQkrPSBkY3ItbG93Lm8KQEAgLTE1LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19GU0xfUENJKQkJKz0gZnNsX3BjaS5vICQoZnNsLW1zaS1vYmoteSkKIG9iai0kKENPTkZJR19GU0xfTEJDKQkJKz0gZnNsX2xiYy5vCiBvYmotJChDT05GSUdfRlNMX0dUTSkJCSs9IGZzbF9ndG0ubworb2JqLSQoQ09ORklHX01QQzh4eHhfR1BJTykJKz0gbXBjOHh4eF9ncGlvLm8KIG9iai0kKENPTkZJR19SQVBJRElPKQkJKz0gZnNsX3Jpby5vCiBvYmotJChDT05GSUdfVFNJMTA4X0JSSURHRSkJKz0gdHNpMTA4X3BjaS5vIHRzaTEwOF9kZXYubwogb2JqLSQoQ09ORklHX1FVSUNDX0VOR0lORSkJKz0gcWVfbGliLwpAQCAtMzYsMTUgKzM4LDEyIEBACiBvYmotJChDT05GSUdfNHh4KQkJKz0gcHBjNHh4X3BjaS5vCiBlbmRpZgogCi0jIFRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGhhdmUgbWlncmF0ZWQgdG8gYXNtLXBvd2VycGMKLWlmZXEgKCQoQVJDSCkscG93ZXJwYykKIG9iai0kKENPTkZJR19DUE0pCQkrPSBjcG1fY29tbW9uLm8KIG9iai0kKENPTkZJR19DUE0yKQkJKz0gY3BtMi5vIGNwbTJfcGljLm8KIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpCSs9IGNwbV9jb21tb24ubwogb2JqLSQoQ09ORklHX1BQQ19EQ1IpCQkrPSBkY3Iubwogb2JqLSQoQ09ORklHXzh4eCkJCSs9IG1wYzh4eF9waWMubyBjcG0xLm8KIG9iai0kKENPTkZJR19VQ09ERV9QQVRDSCkJKz0gbWljcm9wYXRjaC5vCi1lbmRpZgogCiBpZmVxICgkKENPTkZJR19TVVNQRU5EKSx5KQogb2JqLSQoQ09ORklHXzZ4eCkJCSs9IDZ4eC1zdXNwZW5kLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKaW5kZXggNGEwNDgyMy4uNDkwNDczYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKQEAgLTU0NiwzNyArNTQ2LDQ4IEBACiAJcmV0dXJuICEhKGluX2JlMTYoJmlvcC0+ZGF0KSAmIHBpbl9tYXNrKTsKIH0KIAorc3RhdGljIHZvaWQgX19jcG0xX2dwaW8xNl9zZXQoc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MsIHUxNiBwaW5fbWFzaywKKwlpbnQgdmFsdWUpCit7CisJc3RydWN0IGNwbTFfZ3BpbzE2X2NoaXAgKmNwbTFfZ2MgPSB0b19jcG0xX2dwaW8xNl9jaGlwKG1tX2djKTsKKwlzdHJ1Y3QgY3BtX2lvcG9ydDE2IF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOworCisJaWYgKHZhbHVlKQorCQljcG0xX2djLT5jcGRhdGEgfD0gcGluX21hc2s7CisJZWxzZQorCQljcG0xX2djLT5jcGRhdGEgJj0gfnBpbl9tYXNrOworCisJb3V0X2JlMTYoJmlvcC0+ZGF0LCBjcG0xX2djLT5jcGRhdGEpOworfQorCiBzdGF0aWMgdm9pZCBjcG0xX2dwaW8xNl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwogCXN0cnVjdCBjcG0xX2dwaW8xNl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMTZfY2hpcChtbV9nYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKworCV9fY3BtMV9ncGlvMTZfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNwbTFfZ3BpbzE2X2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgY3BtMV9ncGlvMTZfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzE2X2NoaXAobW1fZ2MpOwogCXN0cnVjdCBjcG1faW9wb3J0MTYgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKIAotCWlmICh2YWx1ZSkKLQkJY3BtMV9nYy0+Y3BkYXRhIHw9IHBpbl9tYXNrOwotCWVsc2UKLQkJY3BtMV9nYy0+Y3BkYXRhICY9IH5waW5fbWFzazsKLQotCW91dF9iZTE2KCZpb3AtPmRhdCwgY3BtMV9nYy0+Y3BkYXRhKTsKKwlzZXRiaXRzMTYoJmlvcC0+ZGlyLCBwaW5fbWFzayk7CisJX19jcG0xX2dwaW8xNl9zZXQobW1fZ2MsIHBpbl9tYXNrLCB2YWwpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGNwbTFfZ3BpbzE2X2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgY3BtX2lvcG9ydDE2IF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwotCXUxNiBwaW5fbWFzazsKLQotCXBpbl9tYXNrID0gMSA8PCAoMTUgLSBncGlvKTsKLQotCXNldGJpdHMxNigmaW9wLT5kaXIsIHBpbl9tYXNrKTsKLQotCWNwbTFfZ3BpbzE2X3NldChnYywgZ3BpbywgdmFsKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTg0LDEzICs1OTUsMTcgQEAKIHN0YXRpYyBpbnQgY3BtMV9ncGlvMTZfZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKIHsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IGNwbTFfZ3BpbzE2X2NoaXAgKmNwbTFfZ2MgPSB0b19jcG0xX2dwaW8xNl9jaGlwKG1tX2djKTsKIAlzdHJ1Y3QgY3BtX2lvcG9ydDE2IF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwotCXUxNiBwaW5fbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwaW5fbWFzayA9IDEgPDwgKDE1IC0gZ3Bpbyk7CiAKLQlwaW5fbWFzayA9IDEgPDwgKDE1IC0gZ3Bpbyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKIAogCWNscmJpdHMxNigmaW9wLT5kaXIsIHBpbl9tYXNrKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02NTUsMzcgKzY3MCw0OCBAQAogCXJldHVybiAhIShpbl9iZTMyKCZpb3AtPmRhdCkgJiBwaW5fbWFzayk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3BtMV9ncGlvMzJfc2V0KHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djLCB1MzIgcGluX21hc2ssCisJaW50IHZhbHVlKQoreworCXN0cnVjdCBjcG0xX2dwaW8zMl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMzJfY2hpcChtbV9nYyk7CisJc3RydWN0IGNwbV9pb3BvcnQzMmIgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7CisKKwlpZiAodmFsdWUpCisJCWNwbTFfZ2MtPmNwZGF0YSB8PSBwaW5fbWFzazsKKwllbHNlCisJCWNwbTFfZ2MtPmNwZGF0YSAmPSB+cGluX21hc2s7CisKKwlvdXRfYmUzMigmaW9wLT5kYXQsIGNwbTFfZ2MtPmNwZGF0YSk7Cit9CisKIHN0YXRpYyB2b2lkIGNwbTFfZ3BpbzMyX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CiAJc3RydWN0IGNwbTFfZ3BpbzMyX2NoaXAgKmNwbTFfZ2MgPSB0b19jcG0xX2dwaW8zMl9jaGlwKG1tX2djKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOworCisJX19jcG0xX2dwaW8zMl9zZXQobW1fZ2MsIHBpbl9tYXNrLCB2YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY3BtMV9ncGlvMzJfZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBjcG0xX2dwaW8zMl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMzJfY2hpcChtbV9nYyk7CiAJc3RydWN0IGNwbV9pb3BvcnQzMmIgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcGluX21hc2sgPSAxIDw8ICgzMSAtIGdwaW8pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKIAotCWlmICh2YWx1ZSkKLQkJY3BtMV9nYy0+Y3BkYXRhIHw9IHBpbl9tYXNrOwotCWVsc2UKLQkJY3BtMV9nYy0+Y3BkYXRhICY9IH5waW5fbWFzazsKLQotCW91dF9iZTMyKCZpb3AtPmRhdCwgY3BtMV9nYy0+Y3BkYXRhKTsKKwlzZXRiaXRzMzIoJmlvcC0+ZGlyLCBwaW5fbWFzayk7CisJX19jcG0xX2dwaW8zMl9zZXQobW1fZ2MsIHBpbl9tYXNrLCB2YWwpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGNwbTFfZ3BpbzMyX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgY3BtX2lvcG9ydDMyYiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKLQl1MzIgcGluX21hc2s7Ci0KLQlwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7Ci0KLQlzZXRiaXRzMzIoJmlvcC0+ZGlyLCBwaW5fbWFzayk7Ci0KLQljcG0xX2dwaW8zMl9zZXQoZ2MsIGdwaW8sIHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5MywxMyArNzE5LDE3IEBACiBzdGF0aWMgaW50IGNwbTFfZ3BpbzMyX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBjcG0xX2dwaW8zMl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMzJfY2hpcChtbV9nYyk7CiAJc3RydWN0IGNwbV9pb3BvcnQzMmIgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7Ci0JdTMyIHBpbl9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHBpbl9tYXNrID0gMSA8PCAoMzEgLSBncGlvKTsKIAotCXBpbl9tYXNrID0gMSA8PCAoMzEgLSBncGlvKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOwogCiAJY2xyYml0czMyKCZpb3AtPmRpciwgcGluX21hc2spOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKaW5kZXggNDIyYzhmYS4uMDQ5NGVlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKQEAgLTExLDE0ICsxMSwxOSBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9mc2xfbGJjLmg+CiAKLXNwaW5sb2NrX3QgZnNsX2xiY19sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZnNsX2xiY19sb2NrKTsKLQotc3RydWN0IGZzbF9sYmNfcmVncyBfX2lvbWVtICpmc2xfbGJjX3JlZ3M7Ci1FWFBPUlRfU1lNQk9MKGZzbF9sYmNfcmVncyk7CitzdGF0aWMgc3BpbmxvY2tfdCBmc2xfbGJjX2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChmc2xfbGJjX2xvY2spOworc3RhdGljIHN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqZnNsX2xiY19yZWdzOwogCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhICpjb21wYXRfbGJjW10gPSB7CiAJImZzbCxwcTItbG9jYWxidXMiLApAQCAtMTI3LDMgKzEzMiw0MyBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmc2xfdXBtX2ZpbmQpOworCisvKioKKyAqIGZzbF91cG1fcnVuX3BhdHRlcm4gLSBhY3R1YWxseSBydW4gYW4gVVBNIHBhdHRlcm4KKyAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKKyAqIEBpb19iYXNlOglyZW1hcHBlZCBwb2ludGVyIHRvIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgc2hvdWxkIGhhcHBlbgorICogQG1hcjoJTUFSIHJlZ2lzdGVyIGNvbnRlbnQgZHVyaW5nIHBhdHRlcm4gZXhlY3V0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBkdW1teSB3cml0ZSB0byB0aGUgbWVtb3J5IHNwZWNpZmllZCBieSB0aGUgaW9fYmFzZSwKKyAqIHRodXMgVVBNIHBhdHRlcm4gYWN0dWFsbHkgZXhlY3V0ZWQuIE5vdGUgdGhhdCBtYXIgdXNhZ2UgZGVwZW5kcyBvbiB0aGUKKyAqIHByZS1wcm9ncmFtbWVkIEFNWCBiaXRzIGluIHRoZSBVUE0gUkFNLgorICovCitpbnQgZnNsX3VwbV9ydW5fcGF0dGVybihzdHJ1Y3QgZnNsX3VwbSAqdXBtLCB2b2lkIF9faW9tZW0gKmlvX2Jhc2UsIHUzMiBtYXIpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfbGJjX2xvY2ssIGZsYWdzKTsKKworCW91dF9iZTMyKCZmc2xfbGJjX3JlZ3MtPm1hciwgbWFyIDw8ICgzMiAtIHVwbS0+d2lkdGgpKTsKKworCXN3aXRjaCAodXBtLT53aWR0aCkgeworCWNhc2UgODoKKwkJb3V0XzgoaW9fYmFzZSwgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJb3V0X2JlMTYoaW9fYmFzZSwgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJb3V0X2JlMzIoaW9fYmFzZSwgMHgwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChmc2xfdXBtX3J1bl9wYXR0ZXJuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKaW5kZXggMmM1MTg3Yy4uZjI1Y2U4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgpAQCAtNjcsOTUgKzY2LDIyIEBACiAJLm1hcCA9IGZzbF9tc2lfaG9zdF9tYXAsCiB9OwogCi1zdGF0aWMgaXJxX2h3X251bWJlcl90IGZzbF9tc2lfYWxsb2NfaHdpcnFzKHN0cnVjdCBmc2xfbXNpICptc2ksIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKLQlpbnQgb2Zmc2V0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zaS0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQotCW9mZnNldCA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKG1zaS0+ZnNsX21zaV9iaXRtYXAsCi0JCQkJCU5SX01TSV9JUlFTLCBvcmRlcik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2ktPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiJXM6IGFsbG9jYXRlZCAweCV4ICgyXiVkKSBhdCBvZmZzZXQgMHgleFxuIiwKLQkJX19mdW5jX18sIG51bSwgb3JkZXIsIG9mZnNldCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBmc2xfbXNpX2ZyZWVfaHdpcnFzKHN0cnVjdCBmc2xfbXNpICptc2ksIGludCBvZmZzZXQsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKLQotCXByX2RlYnVnKCIlczogZnJlZWluZyAweCV4ICgyXiVkKSBhdCBvZmZzZXQgMHgleFxuIiwKLQkJX19mdW5jX18sIG51bSwgb3JkZXIsIG9mZnNldCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXNpLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihtc2ktPmZzbF9tc2lfYml0bWFwLCBvZmZzZXQsIG9yZGVyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2ktPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX21zaV9mcmVlX2R0X2h3aXJxcyhzdHJ1Y3QgZnNsX21zaSAqbXNpKQotewotCWludCBpOwotCWludCBsZW47Ci0JY29uc3QgdTMyICpwOwotCi0JYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihtc2ktPmZzbF9tc2lfYml0bWFwLCAwLAotCQkgICAgICAgZ2V0X2NvdW50X29yZGVyKE5SX01TSV9JUlFTKSk7Ci0KLQlwID0gb2ZfZ2V0X3Byb3BlcnR5KG1zaS0+b2Zfbm9kZSwgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7Ci0KLQlpZiAoIXApIHsKLQkJLyogTm8gbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHksCi0JCSAqIEFsbCB0aGUgMjU2IE1TSSBpbnRlcnJ1cHRzIGNhbiBiZSB1c2VkCi0JCSAqLwotCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaSwgMCwgMHgxMDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoKGxlbiAlICgyICogc2l6ZW9mKHUzMikpKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImZzbF9tc2k6IE1hbGZvcm1lZCBtc2ktYXZhaWxhYmxlLXJhbmdlcyAiCi0JCSAgICAgICAicHJvcGVydHkgb24gJXNcbiIsIG1zaS0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogRm9ybWF0IGlzOiAoPHUzMiBzdGFydD4gPHUzMiBjb3VudD4pKyAqLwotCWxlbiAvPSAyICogc2l6ZW9mKHUzMik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBwICs9IDIpCi0JCWZzbF9tc2lfZnJlZV9od2lycXMobXNpLCAqcCwgKihwICsgMSkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZnNsX21zaV9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgZnNsX21zaSAqbXNpX2RhdGEpCiB7CiAJaW50IHJjOwotCWludCBzaXplID0gQklUU19UT19MT05HUyhOUl9NU0lfSVJRUykgKiBzaXplb2YodTMyKTsKIAotCW1zaV9kYXRhLT5mc2xfbXNpX2JpdG1hcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcmMgPSBtc2lfYml0bWFwX2FsbG9jKCZtc2lfZGF0YS0+Yml0bWFwLCBOUl9NU0lfSVJRUywKKwkJCSAgICAgIG1zaV9kYXRhLT5pcnFob3N0LT5vZl9ub2RlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCWlmIChtc2lfZGF0YS0+ZnNsX21zaV9iaXRtYXAgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiJXM6IEVOT01FTSBhbGxvY2F0aW5nIGFsbG9jYXRvciBiaXRtYXAhXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZtc2lfZGF0YS0+Yml0bWFwKTsKKwlpZiAocmMgPCAwKSB7CisJCW1zaV9iaXRtYXBfZnJlZSgmbXNpX2RhdGEtPmJpdG1hcCk7CisJCXJldHVybiByYzsKIAl9CiAKLQlyYyA9IGZzbF9tc2lfZnJlZV9kdF9od2lycXMobXNpX2RhdGEpOwotCWlmIChyYykKLQkJZ290byBvdXRfZnJlZTsKLQogCXJldHVybiAwOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUobXNpX2RhdGEtPmZzbF9tc2lfYml0bWFwKTsKLQotCW1zaV9kYXRhLT5mc2xfbXNpX2JpdG1hcCA9IE5VTEw7Ci0JcmV0dXJuIHJjOwotCiB9CiAKIHN0YXRpYyBpbnQgZnNsX21zaV9jaGVja19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKQEAgLTE3NSw3ICsxMDEsOCBAQAogCQlpZiAoZW50cnktPmlycSA9PSBOT19JUlEpCiAJCQljb250aW51ZTsKIAkJc2V0X2lycV9tc2koZW50cnktPmlycSwgTlVMTCk7Ci0JCWZzbF9tc2lfZnJlZV9od2lycXMobXNpX2RhdGEsIHZpcnFfdG9faHcoZW50cnktPmlycSksIDEpOworCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZtc2lfZGF0YS0+Yml0bWFwLAorCQkJCSAgICAgICB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKIAkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhlbnRyeS0+aXJxKTsKIAl9CiAKQEAgLTE5NywxNSArMTI0LDE0IEBACiAKIHN0YXRpYyBpbnQgZnNsX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaXJxX2h3X251bWJlcl90IGh3aXJxOwotCWludCByYzsKKwlpbnQgcmMsIGh3aXJxOwogCXVuc2lnbmVkIGludCB2aXJxOwogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXN0cnVjdCBmc2xfbXNpICptc2lfZGF0YSA9IGZzbF9tc2k7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaHdpcnEgPSBmc2xfbXNpX2FsbG9jX2h3aXJxcyhtc2lfZGF0YSwgMSk7CisJCWh3aXJxID0gbXNpX2JpdG1hcF9hbGxvY19od2lycXMoJm1zaV9kYXRhLT5iaXRtYXAsIDEpOwogCQlpZiAoaHdpcnEgPCAwKSB7CiAJCQlyYyA9IGh3aXJxOwogCQkJcHJfZGVidWcoIiVzOiBmYWlsIGFsbG9jYXRpbmcgbXNpIGludGVycnVwdFxuIiwKQEAgLTIxNiw5ICsxNDIsOSBAQAogCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKG1zaV9kYXRhLT5pcnFob3N0LCBod2lycSk7CiAKIAkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGZhaWwgbWFwcGluZyBod2lycSAweCVseFxuIiwKKwkJCXByX2RlYnVnKCIlczogZmFpbCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsCiAJCQkJCV9fZnVuY19fLCBod2lycSk7Ci0JCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaV9kYXRhLCBod2lycSwgMSk7CisJCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZtc2lfZGF0YS0+Yml0bWFwLCBod2lycSwgMSk7CiAJCQlyYyA9IC1FTk9TUEM7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC0zMTcsMTQgKzI0MywxMSBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQltc2ktPm9mX25vZGUgPSBvZl9ub2RlX2dldChkZXYtPm5vZGUpOworCW1zaS0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KGRldi0+bm9kZSwgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCQkgICAgICBOUl9NU0lfSVJRUywgJmZzbF9tc2lfaG9zdF9vcHMsIDApOwogCi0JbXNpLT5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3Qob2Zfbm9kZV9nZXQoZGV2LT5ub2RlKSwKLQkJCQlJUlFfSE9TVF9NQVBfTElORUFSLAotCQkJCU5SX01TSV9JUlFTLCAmZnNsX21zaV9ob3N0X29wcywgMCk7CiAJaWYgKG1zaS0+aXJxaG9zdCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNU0kgaXJxaG9zdFxuIik7Ci0JCW9mX25vZGVfcHV0KGRldi0+bm9kZSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmgKaW5kZXggYTY1MzQ2OC4uMzMxYzdlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmgKQEAgLTEzLDYgKzEzLDggQEAKICNpZm5kZWYgX1BPV0VSUENfU1lTREVWX0ZTTF9NU0lfSAogI2RlZmluZSBfUE9XRVJQQ19TWVNERVZfRlNMX01TSV9ICiAKKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgorCiAjZGVmaW5lIE5SX01TSV9SRUcJCTgKICNkZWZpbmUgSVJRU19QRVJfTVNJX1JFRwkzMgogI2RlZmluZSBOUl9NU0lfSVJRUwkoTlJfTVNJX1JFRyAqIElSUVNfUEVSX01TSV9SRUcpCkBAIC0yMiw5ICsyNCw2IEBACiAjZGVmaW5lIEZTTF9QSUNfSVBfSVBJQwkweDAwMDAwMDAyCiAKIHN0cnVjdCBmc2xfbXNpIHsKLQkvKiBEZXZpY2Ugbm9kZSBvZiB0aGUgTVNJIGludGVycnVwdCovCi0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwotCiAJc3RydWN0IGlycV9ob3N0ICppcnFob3N0OwogCiAJdW5zaWduZWQgbG9uZyBjYXNjYWRlX2lycTsKQEAgLTM0LDggKzMzLDcgQEAKIAl2b2lkIF9faW9tZW0gKm1zaV9yZWdzOwogCXUzMiBmZWF0dXJlOwogCi0JdW5zaWduZWQgbG9uZyAqZnNsX21zaV9iaXRtYXA7Ci0Jc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsKKwlzdHJ1Y3QgbXNpX2JpdG1hcCBiaXRtYXA7CiB9OwogCiAjZW5kaWYgLyogX1BPV0VSUENfU1lTREVWX0ZTTF9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA2MWU2ZDc3Li41YjI2NGViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBNUEM4NXh4Lzg2eHggUENJL1BDSUUgc3VwcG9ydCByb3V0aW5nLgorICogTVBDODN4eC84NXh4Lzg2eHggUENJL1BDSUUgc3VwcG9ydCByb3V0aW5nLgogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKyAqIENvcHlyaWdodCAyMDA3LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYwogICoKICAqIEluaXRpYWwgYXV0aG9yOiBYaWFuZ2h1YSBYaWFvIDx4LnhpYW9AZnJlZXNjYWxlLmNvbT4KICAqIFJlY29kZTogWkhBTkcgV0VJIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KQEAgLTI1MSwyMCArMjUxLDQ3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzg2MTAsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CiAjZW5kaWYgLyogQ09ORklHX1BQQ184NXh4IHx8IENPTkZJR19QUENfODZ4eCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDXzgzeHgpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDXzgzeHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ19NUEM1MTJ4KQogaW50IF9faW5pdCBtcGM4M3h4X2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CiAJaW50IGxlbjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7Ci0Jc3RydWN0IHJlc291cmNlIHJzcmM7CisJc3RydWN0IHJlc291cmNlIHJzcmNfcmVnOworCXN0cnVjdCByZXNvdXJjZSByc3JjX2NmZzsKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKLQlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKLQlwaHlzX2FkZHJfdCBpbW1yID0gZ2V0X2ltbXJiYXNlKCk7CisJaW50IHByaW1hcnk7CiAKIAlwcl9kZWJ1ZygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwogCiAJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KLQloYXNfYWRkcmVzcyA9IChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmMpID09IDApOworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmNfcmVnKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgcGNpIHJlZ2lzdGVyIGJhc2UhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KCZyc3JjX2NmZywgMCwgc2l6ZW9mKHJzcmNfY2ZnKSk7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDEsICZyc3JjX2NmZykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIk5vIHBjaSBjb25maWcgcmVnaXN0ZXIgYmFzZSBpbiBkZXYgdHJlZSwgIgorCQkJInVzaW5nIGRlZmF1bHRcbiIpOworCQkvKgorCQkgKiBNUEM4M3h4IHN1cHBvcnRzIHVwIHRvIHR3byBob3N0IGNvbnRyb2xsZXJzCisJCSAqIAlvbmUgYXQgMHg4NTAwIGhhcyBjb25maWcgc3BhY2UgcmVnaXN0ZXJzIGF0IDB4ODMwMAorCQkgKiAJb25lIGF0IDB4ODYwMCBoYXMgY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhdCAweDgzODAKKwkJICovCisJCWlmICgocnNyY19yZWcuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg1MDApCisJCQlyc3JjX2NmZy5zdGFydCA9IChyc3JjX3JlZy5zdGFydCAmIDB4ZmZmMDAwMDApICsgMHg4MzAwOworCQllbHNlIGlmICgocnNyY19yZWcuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg2MDApCisJCQlyc3JjX2NmZy5zdGFydCA9IChyc3JjX3JlZy5zdGFydCAmIDB4ZmZmMDAwMDApICsgMHg4MzgwOworCX0KKwkvKgorCSAqIENvbnRyb2xsZXIgYXQgb2Zmc2V0IDB4ODUwMCBpcyBwcmltYXJ5CisJICovCisJaWYgKChyc3JjX3JlZy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODUwMCkKKwkJcHJpbWFyeSA9IDE7CisJZWxzZQorCQlwcmltYXJ5ID0gMDsKIAogCS8qIEdldCBidXMgcmFuZ2UgaWYgYW55ICovCiAJYnVzX3JhbmdlID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOwpAQCAtMjgxLDIyICszMDgsMTEgQEAKIAlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CiAJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CiAKLQkvKiBNUEM4M3h4IHN1cHBvcnRzIHVwIHRvIHR3byBob3N0IGNvbnRyb2xsZXJzIG9uZSBhdCAweDg1MDAgZnJvbSBpbW1yYmFyCi0JICogdGhlIG90aGVyIGF0IDB4ODYwMCwgd2UgY29uc2lkZXIgdGhlIDB4ODUwMCB0aGUgcHJpbWFyeSBjb250cm9sbGVyCi0JICovCi0JLyogUENJIDEgKi8KLQlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg1MDApIHsKLQkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGltbXIgKyAweDgzMDAsIGltbXIgKyAweDgzMDQsIDApOwotCX0KLQkvKiBQQ0kgMiAqLwotCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODYwMCkgewotCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgaW1tciArIDB4ODM4MCwgaW1tciArIDB4ODM4NCwgMCk7Ci0JCXByaW1hcnkgPSAwOwotCX0KKwlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyY19jZmcuc3RhcnQsIHJzcmNfY2ZnLnN0YXJ0ICsgNCwgMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNUEM4M3h4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBGU0wgUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJzcmNfcmVnLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywKIAkgICAgICAgaG9zZS0+bGFzdF9idXNubyk7CiAKIAlwcl9kZWJ1ZygiIC0+SG9zZSBhdCAweCVwLCBjZmdfYWRkcj0weCVwLGNmZ19kYXRhPTB4JXBcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IDIxNDM4OGUuLjAxYjg4NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC00MTIsNTMgKzQxMiw2IEBACiAKIGFyY2hfaW5pdGNhbGwoZ2Zhcl9vZl9pbml0KTsKIAotCi0jaWZkZWYgQ09ORklHX1BQQ184M3h4Ci1zdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3dkdF9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHJlc291cmNlIHI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXY7Ci0JdTMyIGZyZXEgPSBmc2xfZ2V0X3N5c19mcmVxKCk7Ci0JaW50IHJldDsKLQotCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgIndhdGNoZG9nIiwgIm1wYzgzeHhfd2R0Iik7Ci0KLQlpZiAoIW5wKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gbm9kZXY7Ci0JfQotCi0JbWVtc2V0KCZyLCAwLCBzaXplb2YocikpOwotCi0JcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibXBjODN4eF93ZHQiLCAwLCAmciwgMSk7Ci0JaWYgKElTX0VSUihkZXYpKSB7Ci0JCXJldCA9IFBUUl9FUlIoZGV2KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGRldiwgJmZyZXEsIHNpemVvZihmcmVxKSk7Ci0JaWYgKHJldCkKLQkJZ290byB1bnJlZzsKLQotCW9mX25vZGVfcHV0KG5wKTsKLQlyZXR1cm4gMDsKLQotdW5yZWc6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKLWVycjoKLQlvZl9ub2RlX3B1dChucCk7Ci1ub2RldjoKLQlyZXR1cm4gcmV0OwotfQotCi1hcmNoX2luaXRjYWxsKG1wYzgzeHhfd2R0X2luaXQpOwotI2VuZGlmCi0KIHN0YXRpYyBlbnVtIGZzbF91c2IyX3BoeV9tb2RlcyBkZXRlcm1pbmVfdXNiX3BoeShjb25zdCBjaGFyICpwaHlfdHlwZSkKIHsKIAlpZiAoIXBoeV90eXBlKQpAQCAtNzY3LDQyICs3MjAsNiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLXN0cnVjdCBwbGF0Zm9ybV9kaXVfZGF0YV9vcHMgZGl1X29wcyA9IHsKLQkuZGl1X3NpemUgPSAxMjgwICogMTAyNCAqIDQsCS8qIGRlZmF1bHQgb25lIDEyODB4MTAyNCBidWZmZXIgKi8KLX07CitzdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIGRpdV9vcHM7CiBFWFBPUlRfU1lNQk9MKGRpdV9vcHMpOwotCi1pbnQgX19pbml0IHByZWFsbG9jYXRlX2RpdV92aWRlb21lbW9yeSh2b2lkKQotewotCXByX2RlYnVnKCJkaXVfc2l6ZT0lbHVcbiIsIGRpdV9vcHMuZGl1X3NpemUpOwotCi0JZGl1X29wcy5kaXVfbWVtID0gX19hbGxvY19ib290bWVtKGRpdV9vcHMuZGl1X3NpemUsIDgsIDApOwotCWlmICghZGl1X29wcy5kaXVfbWVtKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZnNsLWRpdTogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlc1xuIiwKLQkJCWRpdV9vcHMuZGl1X3NpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwcl9kZWJ1ZygiZGl1X21lbT0lcFxuIiwgZGl1X29wcy5kaXVfbWVtKTsKLQotCXJoX2luaXQoJmRpdV9vcHMuZGl1X3JoX2luZm8sIDQwOTYsIEFSUkFZX1NJWkUoZGl1X29wcy5kaXVfcmhfYmxvY2spLAotCQlkaXVfb3BzLmRpdV9yaF9ibG9jayk7Ci0JcmV0dXJuIHJoX2F0dGFjaF9yZWdpb24oJmRpdV9vcHMuZGl1X3JoX2luZm8sCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGRpdV9vcHMuZGl1X21lbSwKLQkJCQlkaXVfb3BzLmRpdV9zaXplKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfZGl1ZmIoY2hhciAqcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAxOwotCi0JZGl1X29wcy5kaXVfc2l6ZSA9IF9BTElHTl9VUChtZW1wYXJzZShwLCAmcCksIDgpOwotCi0JcHJfZGVidWcoImRpdV9zaXplPSVsdVxuIiwgZGl1X29wcy5kaXVfc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXVmYiIsIGVhcmx5X3BhcnNlX2RpdWZiKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCmluZGV4IDAyNDI5OTguLjYwZjdmMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCkBAIC0yMCwxNCArMjAsNyBAQAogZXh0ZXJuIHZvaWQgZnNsX3JzdGNyX3Jlc3RhcnQoY2hhciAqY21kKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0ZTTF9ESVUpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0ZTTF9ESVVfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxhc20vcmhlYXAuaD4KIHN0cnVjdCBwbGF0Zm9ybV9kaXVfZGF0YV9vcHMgewotCXJoX2Jsb2NrX3QgZGl1X3JoX2Jsb2NrWzE2XTsKLQlyaF9pbmZvX3QgZGl1X3JoX2luZm87Ci0JdW5zaWduZWQgbG9uZyBkaXVfc2l6ZTsKLQl2b2lkICpkaXVfbWVtOwotCiAJdW5zaWduZWQgaW50ICgqZ2V0X3BpeGVsX2Zvcm1hdCkgKHVuc2lnbmVkIGludCBiaXRzX3Blcl9waXhlbCwKIAkJaW50IG1vbml0b3JfcG9ydCk7CiAJdm9pZCAoKnNldF9nYW1tYV90YWJsZSkgKGludCBtb25pdG9yX3BvcnQsIGNoYXIgKmdhbW1hX3RhYmxlX2Jhc2UpOwpAQCAtMzgsNyArMzEsNiBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kaXVfZGF0YV9vcHMgZGl1X29wczsKLWludCBfX2luaXQgcHJlYWxsb2NhdGVfZGl1X3ZpZGVvbWVtb3J5KHZvaWQpOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZWFjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBHUElPcyBvbiBNUEM4MzQ5Lzg1NzIvODYxMCBhbmQgY29tcGF0aWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2RlZmluZSBNUEM4WFhYX0dQSU9fUElOUwkzMgorCisjZGVmaW5lIEdQSU9fRElSCQkweDAwCisjZGVmaW5lIEdQSU9fT0RSCQkweDA0CisjZGVmaW5lIEdQSU9fREFUCQkweDA4CisjZGVmaW5lIEdQSU9fSUVSCQkweDBjCisjZGVmaW5lIEdQSU9fSU1SCQkweDEwCisjZGVmaW5lIEdQSU9fSUNSCQkweDE0CisKK3N0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCB7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCBtbV9nYzsKKwlzcGlubG9ja190IGxvY2s7CisKKwkvKgorCSAqIHNoYWRvd2VkIGRhdGEgcmVnaXN0ZXIgdG8gYmUgYWJsZSB0byBjbGVhci9zZXQgb3V0cHV0IHBpbnMgaW4KKwkgKiBvcGVuIGRyYWluIG1vZGUgc2FmZWx5CisJICovCisJdTMyIGRhdGE7Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiBtcGM4eHh4X2dwaW8ybWFzayh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gMXUgPDwgKE1QQzhYWFhfR1BJT19QSU5TIC0gMSAtIGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqCit0b19tcGM4eHh4X2dwaW9fY2hpcChzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG1tLCBzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAsIG1tX2djKTsKK30KKworc3RhdGljIHZvaWQgbXBjOHh4eF9ncGlvX3NhdmVfcmVncyhzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSkKK3sKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisKKwltcGM4eHh4X2djLT5kYXRhID0gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKTsKK30KKworc3RhdGljIGludCBtcGM4eHh4X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisKKwlyZXR1cm4gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKSAmIG1wYzh4eHhfZ3BpbzJtYXNrKGdwaW8pOworfQorCitzdGF0aWMgdm9pZCBtcGM4eHh4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gdG9fbXBjOHh4eF9ncGlvX2NoaXAobW0pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJaWYgKHZhbCkKKwkJbXBjOHh4eF9nYy0+ZGF0YSB8PSBtcGM4eHh4X2dwaW8ybWFzayhncGlvKTsKKwllbHNlCisJCW1wYzh4eHhfZ2MtPmRhdGEgJj0gfm1wYzh4eHhfZ3BpbzJtYXNrKGdwaW8pOworCisJb3V0X2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCwgbXBjOHh4eF9nYy0+ZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IHRvX21wYzh4eHhfZ3Bpb19jaGlwKG1tKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKworCWNscmJpdHMzMihtbS0+cmVncyArIEdQSU9fRElSLCBtcGM4eHh4X2dwaW8ybWFzayhncGlvKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM4eHh4X2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IHRvX21wYzh4eHhfZ3Bpb19jaGlwKG1tKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXBjOHh4eF9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CisKKwlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0RJUiwgbXBjOHh4eF9ncGlvMm1hc2soZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4eHh4X2FkZF9jb250cm9sbGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOworCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djOworCXN0cnVjdCBncGlvX2NoaXAgKmdjOworCWludCByZXQ7CisKKwltcGM4eHh4X2djID0ga3phbGxvYyhzaXplb2YoKm1wYzh4eHhfZ2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1wYzh4eHhfZ2MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJm1wYzh4eHhfZ2MtPmxvY2spOworCisJbW1fZ2MgPSAmbXBjOHh4eF9nYy0+bW1fZ2M7CisJb2ZfZ2MgPSAmbW1fZ2MtPm9mX2djOworCWdjID0gJm9mX2djLT5nYzsKKworCW1tX2djLT5zYXZlX3JlZ3MgPSBtcGM4eHh4X2dwaW9fc2F2ZV9yZWdzOworCW9mX2djLT5ncGlvX2NlbGxzID0gMjsKKwlnYy0+bmdwaW8gPSBNUEM4WFhYX0dQSU9fUElOUzsKKwlnYy0+ZGlyZWN0aW9uX2lucHV0ID0gbXBjOHh4eF9ncGlvX2Rpcl9pbjsKKwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IG1wYzh4eHhfZ3Bpb19kaXJfb3V0OworCWdjLT5nZXQgPSBtcGM4eHh4X2dwaW9fZ2V0OworCWdjLT5zZXQgPSBtcGM4eHh4X2dwaW9fc2V0OworCisJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBtbV9nYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm47CisKK2VycjoKKwlwcl9lcnIoIiVzOiByZWdpc3RyYXRpb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCSAgICAgICBucC0+ZnVsbF9uYW1lLCByZXQpOworCWtmcmVlKG1wYzh4eHhfZ2MpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtcGM4eHh4X2FkZF9ncGlvY2hpcHModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLG1wYzgzNDktZ3BpbyIpCisJCW1wYzh4eHhfYWRkX2NvbnRyb2xsZXIobnApOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLG1wYzg1NzItZ3BpbyIpCisJCW1wYzh4eHhfYWRkX2NvbnRyb2xsZXIobnApOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLG1wYzg2MTAtZ3BpbyIpCisJCW1wYzh4eHhfYWRkX2NvbnRyb2xsZXIobnApOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG1wYzh4eHhfYWRkX2dwaW9jaGlwcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCmluZGV4IGZiZjhhMjYuLjYyMDljNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCkBAIC0xNCw4ICsxNCw2IEBACiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIGV4dGVybiB2b2lkIG1waWNfbXNpX3Jlc2VydmVfaHdpcnEoc3RydWN0IG1waWMgKm1waWMsIGlycV9od19udW1iZXJfdCBod2lycSk7CiBleHRlcm4gaW50IG1waWNfbXNpX2luaXRfYWxsb2NhdG9yKHN0cnVjdCBtcGljICptcGljKTsKLWV4dGVybiBpcnFfaHdfbnVtYmVyX3QgbXBpY19tc2lfYWxsb2NfaHdpcnFzKHN0cnVjdCBtcGljICptcGljLCBpbnQgbnVtKTsKLWV4dGVybiB2b2lkIG1waWNfbXNpX2ZyZWVfaHdpcnFzKHN0cnVjdCBtcGljICptcGljLCBpbnQgb2Zmc2V0LCBpbnQgbnVtKTsKIGV4dGVybiBpbnQgbXBpY191M21zaV9pbml0KHN0cnVjdCBtcGljICptcGljKTsKIGV4dGVybiBpbnQgbXBpY19wYXNlbWlfbXNpX2luaXQoc3RydWN0IG1waWMgKm1waWMpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwppbmRleCBkZTNlNWU4Li4xZDQ0ZWVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCkBAIC0xNSw1OSArMTUsMTcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CiAKICNpbmNsdWRlIDxzeXNkZXYvbXBpYy5oPgogCi1zdGF0aWMgdm9pZCBfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEoc3RydWN0IG1waWMgKm1waWMsIGlycV9od19udW1iZXJfdCBod2lycSkKLXsKLQlwcl9kZWJ1ZygibXBpYzogcmVzZXJ2aW5nIGh3aXJxIDB4JWx4XG4iLCBod2lycSk7Ci0JYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihtcGljLT5od2lycV9iaXRtYXAsIGh3aXJxLCAwKTsKLX0KLQogdm9pZCBtcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCS8qIFRoZSBtcGljIGNhbGxzIHRoaXMgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGFsbG9jYXRvciBzZXR1cCAqLwotCWlmICghbXBpYy0+aHdpcnFfYml0bWFwKQorCWlmICghbXBpYy0+bXNpX2JpdG1hcC5iaXRtYXApCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBod2lycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLX0KLQotaXJxX2h3X251bWJlcl90IG1waWNfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG51bSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBvZmZzZXQsIG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIFRoaXMgaXMgZmFzdCwgYnV0IHN0cmljdGVyIHRoYW4gd2UgbmVlZC4gV2UgbWlnaHQgd2FudCB0byBhZGQKLQkgKiBhIGZhbGxiYWNrIHJvdXRpbmUgd2hpY2ggZG9lcyBhIGxpbmVhciBzZWFyY2ggd2l0aCBubyBhbGlnbm1lbnQuCi0JICovCi0Jb2Zmc2V0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24obXBpYy0+aHdpcnFfYml0bWFwLCBtcGljLT5pcnFfY291bnQsCi0JCQkJCSBvcmRlcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCJtcGljOiBhbGxvY2F0ZWQgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCSBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotdm9pZCBtcGljX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG9mZnNldCwgaW50IG51bSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOwotCi0JcHJfZGVidWcoIm1waWM6IGZyZWVpbmcgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCSBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0JYml0bWFwX3JlbGVhc2VfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgb2Zmc2V0LCBvcmRlcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKKwltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGh3aXJxKTsKIH0KIAogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKQEAgLTgzLDEzICs0MSwxMyBAQAogCiAJLyogUmVzZXJ2ZSBzb3VyY2UgbnVtYmVycyB3ZSBrbm93IGFyZSByZXNlcnZlZCBpbiB0aGUgSFcgKi8KIAlmb3IgKGkgPSAwOyAgIGkgPCA4OyAgIGkrKykKLQkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGkpOworCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOwogCiAJZm9yIChpID0gNDI7ICBpIDwgNDY7ICBpKyspCi0JCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBpKTsKKwkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIAogCWZvciAoaSA9IDEwMDsgaSA8IDEwNTsgaSsrKQotCQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaSk7CisJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CiAKIAlucCA9IE5VTEw7CiAJd2hpbGUgKChucCA9IG9mX2ZpbmRfYWxsX25vZGVzKG5wKSkpIHsKQEAgLTk5LDcgKzU3LDcgQEAKIAkJd2hpbGUgKG9mX2lycV9tYXBfb25lKG5wLCBpbmRleCsrLCAmb2lycSkgPT0gMCkgewogCQkJb3BzLT54bGF0ZShtcGljLT5pcnFob3N0LCBOVUxMLCBvaXJxLnNwZWNpZmllciwKIAkJCQkJCW9pcnEuc2l6ZSwgJmh3aXJxLCAmZmxhZ3MpOwotCQkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGh3aXJxKTsKKwkJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaHdpcnEpOwogCQl9CiAJfQogCkBAIC0xMTIsNzAgKzcwLDI1IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBtcGljX21zaV9yZXNlcnZlX2R0X2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYykKLXsKLQlpbnQgaSwgbGVuOwotCWNvbnN0IHUzMiAqcDsKLQotCXAgPSBvZl9nZXRfcHJvcGVydHkobXBpYy0+aXJxaG9zdC0+b2Zfbm9kZSwKLQkJCSAgICAibXNpLWF2YWlsYWJsZS1yYW5nZXMiLCAmbGVuKTsKLQlpZiAoIXApIHsKLQkJcHJfZGVidWcoIm1waWM6IG5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzIHByb3BlcnR5IGZvdW5kIG9uICVzXG4iLAotCQkJICBtcGljLT5pcnFob3N0LT5vZl9ub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAobGVuICUgOCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1waWM6IE1hbGZvcm1lZCBtc2ktYXZhaWxhYmxlLXJhbmdlcyAiCi0JCSAgICAgICAicHJvcGVydHkgb24gJXNcbiIsIG1waWMtPmlycWhvc3QtPm9mX25vZGUtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24obXBpYy0+aHdpcnFfYml0bWFwLCAwLAotCQkJICAgICAgIGdldF9jb3VudF9vcmRlcihtcGljLT5pcnFfY291bnQpKTsKLQotCS8qIEZvcm1hdCBpczogKDx1MzIgc3RhcnQ+IDx1MzIgY291bnQ+KSsgKi8KLQlsZW4gLz0gc2l6ZW9mKHUzMik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbiAvIDI7IGkrKywgcCArPSAyKQotCQltcGljX21zaV9mcmVlX2h3aXJxcyhtcGljLCAqcCwgKihwICsgMSkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBtcGljX21zaV9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgbXBpYyAqbXBpYykKIHsKLQlpbnQgcmMsIHNpemU7CisJaW50IHJjOwogCi0JQlVHX09OKG1waWMtPmh3aXJxX2JpdG1hcCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1waWMtPmJpdG1hcF9sb2NrKTsKKwlyYyA9IG1zaV9iaXRtYXBfYWxsb2MoJm1waWMtPm1zaV9iaXRtYXAsIG1waWMtPmlycV9jb3VudCwKKwkJCSAgICAgIG1waWMtPmlycWhvc3QtPm9mX25vZGUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0Jc2l6ZSA9IEJJVFNfVE9fTE9OR1MobXBpYy0+aXJxX2NvdW50KSAqIHNpemVvZihsb25nKTsKLQlwcl9kZWJ1ZygibXBpYzogYWxsb2NhdG9yIGJpdG1hcCBzaXplIGlzIDB4JXggYnl0ZXNcbiIsIHNpemUpOwotCi0JbXBpYy0+aHdpcnFfYml0bWFwID0gYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKLQotCWlmICghbXBpYy0+aHdpcnFfYml0bWFwKSB7Ci0JCXByX2RlYnVnKCJtcGljOiBFTk9NRU0gYWxsb2NhdGluZyBhbGxvY2F0b3IgYml0bWFwIVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChtcGljLT5od2lycV9iaXRtYXAsIDAsIHNpemUpOwotCi0JcmMgPSBtcGljX21zaV9yZXNlcnZlX2R0X2h3aXJxcyhtcGljKTsKLQlpZiAocmMpIHsKKwlyYyA9IG1zaV9iaXRtYXBfcmVzZXJ2ZV9kdF9od2lycXMoJm1waWMtPm1zaV9iaXRtYXApOworCWlmIChyYyA+IDApIHsKIAkJaWYgKG1waWMtPmZsYWdzICYgTVBJQ19VM19IVF9JUlFTKQogCQkJcmMgPSBtcGljX21zaV9yZXNlcnZlX3UzX2h3aXJxcyhtcGljKTsKIAotCQlpZiAocmMpCi0JCQlnb3RvIG91dF9mcmVlOworCQlpZiAocmMpIHsKKwkJCW1zaV9iaXRtYXBfZnJlZSgmbXBpYy0+bXNpX2JpdG1hcCk7CisJCQlyZXR1cm4gcmM7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKLQotIG91dF9mcmVlOgotCWlmIChtZW1faW5pdF9kb25lKQotCQlrZnJlZShtcGljLT5od2lycV9iaXRtYXApOwotCi0JbXBpYy0+aHdpcnFfYml0bWFwID0gTlVMTDsKLQlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwppbmRleCA2OGFmZjYwLi42NTZjYjc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CiAKICNpbmNsdWRlICJtcGljLmgiCiAKQEAgLTgxLDggKzgyLDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNldF9pcnFfbXNpKGVudHJ5LT5pcnEsIE5VTEwpOwotCQltcGljX21zaV9mcmVlX2h3aXJxcyhtc2lfbXBpYywgdmlycV90b19odyhlbnRyeS0+aXJxKSwKLQkJCQkgICAgIEFMTE9DX0NIVU5LKTsKKwkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsCisJCQkJICAgICAgIHZpcnFfdG9faHcoZW50cnktPmlycSksIEFMTE9DX0NIVU5LKTsKIAkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhlbnRyeS0+aXJxKTsKIAl9CiAKQEAgLTkxLDExICs5MiwxMCBAQAogCiBzdGF0aWMgaW50IHBhc2VtaV9tc2lfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKIHsKLQlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CiAJdW5zaWduZWQgaW50IHZpcnE7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JaW50IHJldDsKKwlpbnQgaHdpcnE7CiAKIAlwcl9kZWJ1ZygicGFzZW1pX21zaV9zZXR1cF9tc2lfaXJxcywgcGRldiAlcCBudmVjICVkIHR5cGUgJWRcbiIsCiAJCSBwZGV2LCBudmVjLCB0eXBlKTsKQEAgLTEwOSwxNyArMTA5LDE5IEBACiAJCSAqIGZldyBNU0lzIGZvciBzb21lb25lLCBidXQgcmVzdHJpY3Rpb25zIHdpbGwgYXBwbHkgdG8gaG93IHRoZQogCQkgKiBzb3VyY2VzIGNhbiBiZSBjaGFuZ2VkIGluZGVwZW5kZW50bHkuCiAJCSAqLwotCQlyZXQgPSBtcGljX21zaV9hbGxvY19od2lycXMobXNpX21waWMsIEFMTE9DX0NIVU5LKTsKLQkJaHdpcnEgPSByZXQ7Ci0JCWlmIChyZXQgPCAwKSB7CisJCWh3aXJxID0gbXNpX2JpdG1hcF9hbGxvY19od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLAorCQkJCQkJQUxMT0NfQ0hVTkspOworCQlpZiAoaHdpcnEgPCAwKSB7CiAJCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogZmFpbGVkIGFsbG9jYXRpbmcgaHdpcnFcbiIpOwogCQkJcmV0dXJuIGh3aXJxOwogCQl9CiAKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfbXBpYy0+aXJxaG9zdCwgaHdpcnEpOwogCQlpZiAodmlycSA9PSBOT19JUlEpIHsKLQkJCXByX2RlYnVnKCJwYXNlbWlfbXNpOiBmYWlsZWQgbWFwcGluZyBod2lycSAweCVseFxuIiwgaHdpcnEpOwotCQkJbXBpY19tc2lfZnJlZV9od2lycXMobXNpX21waWMsIGh3aXJxLCBBTExPQ19DSFVOSyk7CisJCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHgleFxuIiwKKwkJCQkgIGh3aXJxKTsKKwkJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLCBod2lycSwKKwkJCQkJICAgICAgIEFMTE9DX0NIVU5LKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAKQEAgLTEzMyw4ICsxMzUsOCBAQAogCQlzZXRfaXJxX2NoaXAodmlycSwgJm1waWNfcGFzZW1pX21zaV9jaGlwKTsKIAkJc2V0X2lycV90eXBlKHZpcnEsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKIAotCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHglbHgpIGFkZHIgMHgleFxuIiwKLQkJCSAgdmlycSwgaHdpcnEsIG1zZy5hZGRyZXNzX2xvKTsKKwkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpICIgXAorCQkJICJhZGRyIDB4JXhcbiIsIHZpcnEsIGh3aXJxLCBtc2cuYWRkcmVzc19sbyk7CiAKIAkJLyogTGlrZXdpc2UsIHRoZSBkZXZpY2Ugd3JpdGVzIFswLi4uNTExXSBpbnRvIHRoZSB0YXJnZXQKIAkJICogcmVnaXN0ZXIgdG8gZ2VuZXJhdGUgTVNJIFs1MTIuLi4xMDIzXQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwppbmRleCA2ZTJmODY4Li4wYThmNWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CisjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KIAogI2luY2x1ZGUgIm1waWMuaCIKIApAQCAtMTAxLDcgKzEwMiw4IEBACiAJCQljb250aW51ZTsKIAogCQlzZXRfaXJxX21zaShlbnRyeS0+aXJxLCBOVUxMKTsKLQkJbXBpY19tc2lfZnJlZV9od2lycXMobXNpX21waWMsIHZpcnFfdG9faHcoZW50cnktPmlycSksIDEpOworCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwKKwkJCQkgICAgICAgdmlycV90b19odyhlbnRyeS0+aXJxKSwgMSk7CiAJCWlycV9kaXNwb3NlX21hcHBpbmcoZW50cnktPmlycSk7CiAJfQogCkBAIC0xMTAsMjkgKzExMiwyNyBAQAogCiBzdGF0aWMgaW50IHUzbXNpX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaXJxX2h3X251bWJlcl90IGh3aXJxOwogCXVuc2lnbmVkIGludCB2aXJxOwogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXU2NCBhZGRyOwotCWludCByZXQ7CisJaW50IGh3aXJxOwogCiAJYWRkciA9IGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2KTsKIAltc2cuYWRkcmVzc19sbyA9IGFkZHIgJiAweEZGRkZGRkZGOwogCW1zZy5hZGRyZXNzX2hpID0gYWRkciA+PiAzMjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlyZXQgPSBtcGljX21zaV9hbGxvY19od2lycXMobXNpX21waWMsIDEpOwotCQlpZiAocmV0IDwgMCkgeworCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwgMSk7CisJCWlmIChod2lycSA8IDApIHsKIAkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIGFsbG9jYXRpbmcgaHdpcnFcbiIpOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybiBod2lycTsKIAkJfQotCQlod2lycSA9IHJldDsKIAogCQl2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKG1zaV9tcGljLT5pcnFob3N0LCBod2lycSk7CiAJCWlmICh2aXJxID09IE5PX0lSUSkgewotCQkJcHJfZGVidWcoInUzbXNpOiBmYWlsZWQgbWFwcGluZyBod2lycSAweCVseFxuIiwgaHdpcnEpOwotCQkJbXBpY19tc2lfZnJlZV9od2lycXMobXNpX21waWMsIGh3aXJxLCAxKTsKKwkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHgleFxuIiwgaHdpcnEpOworCQkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsIGh3aXJxLCAxKTsKIAkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAKQEAgLTE0MCw4ICsxNDAsOCBAQAogCQlzZXRfaXJxX2NoaXAodmlycSwgJm1waWNfdTNtc2lfY2hpcCk7CiAJCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CiAKLQkJcHJfZGVidWcoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCVseCkgYWRkciAweCVseFxuIiwKLQkJCSAgdmlycSwgaHdpcnEsIGFkZHIpOworCQlwcl9kZWJ1ZygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpIGFkZHIgMHglbHhcbiIsCisJCQkgIHZpcnEsIGh3aXJxLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAogCQltc2cuZGF0YSA9IGh3aXJxOwogCQl3cml0ZV9tc2lfbXNnKHZpcnEsICZtc2cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21zaV9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQyMTdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4LCBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KKworaW50IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIGludCBudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb2Zmc2V0LCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJtcC0+bG9jaywgZmxhZ3MpOworCS8qCisJICogVGhpcyBpcyBmYXN0LCBidXQgc3RyaWN0ZXIgdGhhbiB3ZSBuZWVkLiBXZSBtaWdodCB3YW50IHRvIGFkZAorCSAqIGEgZmFsbGJhY2sgcm91dGluZSB3aGljaCBkb2VzIGEgbGluZWFyIHNlYXJjaCB3aXRoIG5vIGFsaWdubWVudC4KKwkgKi8KKwlvZmZzZXQgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAtPmJpdG1hcCwgYm1wLT5pcnFfY291bnQsIG9yZGVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibXAtPmxvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJtc2lfYml0bWFwOiBhbGxvY2F0ZWQgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCisJCSBudW0sIG9yZGVyLCBvZmZzZXQpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBtc2lfYml0bWFwX2ZyZWVfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgdW5zaWduZWQgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOworCisJcHJfZGVidWcoIm1zaV9iaXRtYXA6IGZyZWVpbmcgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCisJCSBudW0sIG9yZGVyLCBvZmZzZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJtcC0+bG9jaywgZmxhZ3MpOworCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihibXAtPmJpdG1hcCwgb2Zmc2V0LCBvcmRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm1wLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBod2lycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIm1zaV9iaXRtYXA6IHJlc2VydmluZyBod2lycSAweCV4XG4iLCBod2lycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYm1wLT5sb2NrLCBmbGFncyk7CisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihibXAtPmJpdG1hcCwgaHdpcnEsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJtcC0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIG1zaV9iaXRtYXBfcmVzZXJ2ZV9kdF9od2lycXMgLSBSZXNlcnZlIGlycXMgc3BlY2lmaWVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKyAqIEBibXA6IHBvaW50ZXIgdG8gdGhlIE1TSSBiaXRtYXAuCisgKgorICogTG9va3MgaW4gdGhlIGRldmljZSB0cmVlIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHByb3BlcnR5IHNwZWNpZnlpbmcgd2hpY2gKKyAqIGlycXMgY2FuIGJlIHVzZWQgZm9yIE1TSS4gSWYgZm91bmQgdGhvc2UgaXJxcyByZXNlcnZlZCBpbiB0aGUgZGV2aWNlIHRyZWUKKyAqIGFyZSByZXNlcnZlZCBpbiB0aGUgYml0bWFwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcywgPCAwIGlmIHRoZXJlIHdhcyBhbiBlcnJvciwgYW5kID4gMCBpZiBubyBwcm9wZXJ0eQorICogd2FzIGZvdW5kIGluIHRoZSBkZXZpY2UgdHJlZS4KKyAqKi8KK2ludCBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXApCit7CisJaW50IGksIGosIGxlbjsKKwljb25zdCB1MzIgKnA7CisKKwlpZiAoIWJtcC0+b2Zfbm9kZSkKKwkJcmV0dXJuIDE7CisKKwlwID0gb2ZfZ2V0X3Byb3BlcnR5KGJtcC0+b2Zfbm9kZSwgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7CisJaWYgKCFwKSB7CisJCXByX2RlYnVnKCJtc2lfYml0bWFwOiBubyBtc2ktYXZhaWxhYmxlLXJhbmdlcyBwcm9wZXJ0eSAiIFwKKwkJCSAiZm91bmQgb24gJXNcbiIsIGJtcC0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGxlbiAlICgyICogc2l6ZW9mKHUzMikpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNpX2JpdG1hcDogTWFsZm9ybWVkIG1zaS1hdmFpbGFibGUtcmFuZ2VzIgorCQkgICAgICAgIiBwcm9wZXJ0eSBvbiAlc1xuIiwgYm1wLT5vZl9ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKGJtcC0+Yml0bWFwLCAwLCBnZXRfY291bnRfb3JkZXIoYm1wLT5pcnFfY291bnQpKTsKKworCXNwaW5fbG9jaygmYm1wLT5sb2NrKTsKKworCS8qIEZvcm1hdCBpczogKDx1MzIgc3RhcnQ+IDx1MzIgY291bnQ+KSsgKi8KKwlsZW4gLz0gMiAqIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcCArPSAyKSB7CisJCWZvciAoaiA9IDA7IGogPCAqKHAgKyAxKTsgaisrKQorCQkJYml0bWFwX3JlbGVhc2VfcmVnaW9uKGJtcC0+Yml0bWFwLCAqcCArIGosIDApOworCX0KKworCXNwaW5fdW5sb2NrKCZibXAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtc2lfYml0bWFwX2FsbG9jKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBpcnFfY291bnQsCisJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQoreworCWludCBzaXplOworCisJaWYgKCFpcnFfY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IEJJVFNfVE9fTE9OR1MoaXJxX2NvdW50KSAqIHNpemVvZihsb25nKTsKKwlwcl9kZWJ1ZygibXNpX2JpdG1hcDogYWxsb2NhdG9yIGJpdG1hcCBzaXplIGlzIDB4JXggYnl0ZXNcbiIsIHNpemUpOworCisJYm1wLT5iaXRtYXAgPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJtcC0+Yml0bWFwKSB7CisJCXByX2RlYnVnKCJtc2lfYml0bWFwOiBFTk9NRU0gYWxsb2NhdGluZyBhbGxvY2F0b3IgYml0bWFwIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFdlIHphbGxvYydlZCB0aGUgYml0bWFwLCBzbyBhbGwgaXJxcyBhcmUgZnJlZSBieSBkZWZhdWx0ICovCisJc3Bpbl9sb2NrX2luaXQoJmJtcC0+bG9jayk7CisJYm1wLT5vZl9ub2RlID0gb2Zfbm9kZV9nZXQob2Zfbm9kZSk7CisJYm1wLT5pcnFfY291bnQgPSBpcnFfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtc2lfYml0bWFwX2ZyZWUoc3RydWN0IG1zaV9iaXRtYXAgKmJtcCkKK3sKKwkvKiB3ZSBjYW4ndCBmcmVlIHRoZSBiaXRtYXAgd2UgZG9uJ3Qga25vdyBpZiBpdCdzIGJvb3RtZW0gZXRjLiAqLworCW9mX25vZGVfcHV0KGJtcC0+b2Zfbm9kZSk7CisJYm1wLT5iaXRtYXAgPSBOVUxMOworfQorCisjaWZkZWYgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QKKworI2RlZmluZSBjaGVjayh4KQlcCisJaWYgKCEoeCkpIHByaW50aygibXNpX2JpdG1hcDogdGVzdCBmYWlsZWQgYXQgbGluZSAlZFxuIiwgX19MSU5FX18pOworCit2b2lkIHRlc3RfYmFzaWNzKHZvaWQpCit7CisJc3RydWN0IG1zaV9iaXRtYXAgYm1wOworCWludCBpLCBzaXplID0gNTEyOworCisJLyogQ2FuJ3QgYWxsb2NhdGUgYSBiaXRtYXAgb2YgMCBpcnFzICovCisJY2hlY2sobXNpX2JpdG1hcF9hbGxvYygmYm1wLCAwLCBOVUxMKSAhPSAwKTsKKworCS8qIG9mX25vZGUgbWF5IGJlIE5VTEwgKi8KKwljaGVjaygwID09IG1zaV9iaXRtYXBfYWxsb2MoJmJtcCwgc2l6ZSwgTlVMTCkpOworCisJLyogU2hvdWxkIGFsbCBiZSBmcmVlIGJ5IGRlZmF1bHQgKi8KKwljaGVjaygwID09IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKGJtcC5iaXRtYXAsIHNpemUsCisJCQkJCSAgIGdldF9jb3VudF9vcmRlcihzaXplKSkpOworCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihibXAuYml0bWFwLCAwLCBnZXRfY291bnRfb3JkZXIoc2l6ZSkpOworCisJLyogV2l0aCBubyBub2RlLCB0aGVyZSdzIG5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzLCBzbyBleHBlY3QgPiAwICovCisJY2hlY2sobXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcygmYm1wKSA+IDApOworCisJLyogU2hvdWxkIGFsbCBzdGlsbCBiZSBmcmVlICovCisJY2hlY2soMCA9PSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLAorCQkJCQkgICBnZXRfY291bnRfb3JkZXIoc2l6ZSkpKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKHNpemUpKTsKKworCS8qIENoZWNrIHdlIGNhbiBmaWxsIGl0IHVwIGFuZCB0aGVuIG5vIG1vcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQljaGVjayhtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmYm1wLCAxKSA+PSAwKTsKKworCWNoZWNrKG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZibXAsIDEpIDwgMCk7CisKKwkvKiBTaG91bGQgYWxsIGJlIGFsbG9jYXRlZCAqLworCWNoZWNrKGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKGJtcC5iaXRtYXAsIHNpemUsIDApIDwgMCk7CisKKwkvKiBBbmQgaWYgd2UgZnJlZSBvbmUgd2UgY2FuIHRoZW4gYWxsb2NhdGUgYW5vdGhlciAqLworCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJmJtcCwgc2l6ZSAvIDIsIDEpOworCWNoZWNrKG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZibXAsIDEpID09IHNpemUgLyAyKTsKKworCW1zaV9iaXRtYXBfZnJlZSgmYm1wKTsKKworCS8qIENsaWVudHMgbWF5IGNoZWNrIGJpdG1hcCA9PSBOVUxMIGZvciAibm90LWFsbG9jYXRlZCIgKi8KKwljaGVjayhibXAuYml0bWFwID09IE5VTEwpOworCisJa2ZyZWUoYm1wLmJpdG1hcCk7Cit9CisKK3ZvaWQgdGVzdF9vZl9ub2RlKHZvaWQpCit7CisJdTMyIHByb3BfZGF0YVtdID0geyAxMCwgMTAsIDI1LCAzLCA0MCwgMSwgMTAwLCAxMDAsIDIwMCwgMjAgfTsKKwljb25zdCBjaGFyICpleHBlY3RlZF9zdHIgPSAiMC05LDIwLTI0LDI4LTM5LDQxLTk5LDIyMC0yNTUiOworCWNoYXIgKnByb3BfbmFtZSA9ICJtc2ktYXZhaWxhYmxlLXJhbmdlcyI7CisJY2hhciAqbm9kZV9uYW1lID0gIi9mYWtlbm9kZSI7CisJc3RydWN0IGRldmljZV9ub2RlIG9mX25vZGU7CisJc3RydWN0IHByb3BlcnR5IHByb3A7CisJc3RydWN0IG1zaV9iaXRtYXAgYm1wOworCWludCBzaXplID0gMjU2OworCURFQ0xBUkVfQklUTUFQKGV4cGVjdGVkLCBzaXplKTsKKworCS8qIFRoZXJlIHNob3VsZCByZWFsbHkgYmUgYSBzdHJ1Y3QgZGV2aWNlX25vZGUgYWxsb2NhdG9yICovCisJbWVtc2V0KCZvZl9ub2RlLCAwLCBzaXplb2Yob2Zfbm9kZSkpOworCWtyZWZfaW5pdCgmb2Zfbm9kZS5rcmVmKTsKKwlvZl9ub2RlLmZ1bGxfbmFtZSA9IG5vZGVfbmFtZTsKKworCWNoZWNrKDAgPT0gbXNpX2JpdG1hcF9hbGxvYygmYm1wLCBzaXplLCAmb2Zfbm9kZSkpOworCisJLyogTm8gbXNpLWF2YWlsYWJsZS1yYW5nZXMsIHNvIGV4cGVjdCA+IDAgKi8KKwljaGVjayhtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZibXApID4gMCk7CisKKwkvKiBTaG91bGQgYWxsIHN0aWxsIGJlIGZyZWUgKi8KKwljaGVjaygwID09IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKGJtcC5iaXRtYXAsIHNpemUsCisJCQkJCSAgIGdldF9jb3VudF9vcmRlcihzaXplKSkpOworCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihibXAuYml0bWFwLCAwLCBnZXRfY291bnRfb3JkZXIoc2l6ZSkpOworCisJLyogTm93IGNyZWF0ZSBhIGZha2UgbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHkgKi8KKworCS8qIFRoZXJlIHNob3VsZCByZWFsbHkgLi4gb2ggd2hhdGV2ZXIgKi8KKwltZW1zZXQoJnByb3AsIDAsIHNpemVvZihwcm9wKSk7CisJcHJvcC5uYW1lID0gcHJvcF9uYW1lOworCXByb3AudmFsdWUgPSAmcHJvcF9kYXRhOworCXByb3AubGVuZ3RoID0gc2l6ZW9mKHByb3BfZGF0YSk7CisKKwlvZl9ub2RlLnByb3BlcnRpZXMgPSAmcHJvcDsKKworCS8qIG1zaS1hdmFpbGFibGUtcmFuZ2VzLCBzbyBleHBlY3QgPT0gMCAqLworCWNoZWNrKG1zaV9iaXRtYXBfcmVzZXJ2ZV9kdF9od2lycXMoJmJtcCkgPT0gMCk7CisKKwkvKiBDaGVjayB3ZSBnb3QgdGhlIGV4cGVjdGVkIHJlc3VsdCAqLworCWNoZWNrKDAgPT0gYml0bWFwX3BhcnNlbGlzdChleHBlY3RlZF9zdHIsIGV4cGVjdGVkLCBzaXplKSk7CisJY2hlY2soYml0bWFwX2VxdWFsKGV4cGVjdGVkLCBibXAuYml0bWFwLCBzaXplKSk7CisKKwltc2lfYml0bWFwX2ZyZWUoJmJtcCk7CisJa2ZyZWUoYm1wLmJpdG1hcCk7Cit9CisKK2ludCBtc2lfYml0bWFwX3NlbGZ0ZXN0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIlJ1bm5pbmcgTVNJIGJpdG1hcCBzZWxmLXRlc3RzIC4uLlxuIik7CisKKwl0ZXN0X2Jhc2ljcygpOworCXRlc3Rfb2Zfbm9kZSgpOworCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG1zaV9iaXRtYXBfc2VsZnRlc3QpOworI2VuZGlmIC8qIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCmluZGV4IGZiMzY4ZGYuLmQzZTRkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCkBAIC0zMCwyNCArMzAsMTkgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9kY3IuaD4KICNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgogCiAjaW5jbHVkZSAicHBjNHh4X3BjaS5oIgogCiBzdGF0aWMgaW50IGRtYV9vZmZzZXRfc2V0OwogCi0vKiBNb3ZlIHRoYXQgdG8gYSB1c2VhYmxlIGhlYWRlciAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfbWVtb3J5OwotCiAjZGVmaW5lIFU2NF9UT19VMzJfTE9XKHZhbCkJKCh1MzIpKCh2YWwpICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSkKICNkZWZpbmUgVTY0X1RPX1UzMl9ISUdIKHZhbCkJKCh1MzIpKCh2YWwpID4+IDMyKSkKIAotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLSNkZWZpbmUgUkVTX1RPX1UzMl9MT1codmFsKQlVNjRfVE9fVTMyX0xPVyh2YWwpCi0jZGVmaW5lIFJFU19UT19VMzJfSElHSCh2YWwpCVU2NF9UT19VMzJfSElHSCh2YWwpCi0jZWxzZQotI2RlZmluZSBSRVNfVE9fVTMyX0xPVyh2YWwpCSh2YWwpCi0jZGVmaW5lIFJFU19UT19VMzJfSElHSCh2YWwpCSgwKQotI2VuZGlmCisjZGVmaW5lIFJFU19UT19VMzJfTE9XKHZhbCkJXAorCSgoc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgPiBzaXplb2YodTMyKSkgPyBVNjRfVE9fVTMyX0xPVyh2YWwpIDogKHZhbCkpCisjZGVmaW5lIFJFU19UT19VMzJfSElHSCh2YWwpCVwKKwkoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpID4gc2l6ZW9mKHUzMikpID8gVTY0X1RPX1UzMl9ISUdIKHZhbCkgOiAoMCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBwYzQ0MHNwZV9yZXZBKHZvaWQpCiB7CkBAIC0xMDUsNyArMTAwLDggQEAKIAogCS8qIERlZmF1bHQgKi8KIAlyZXMtPnN0YXJ0ID0gMDsKLQlyZXMtPmVuZCA9IHNpemUgPSAweDgwMDAwMDAwOworCXNpemUgPSAweDgwMDAwMDAwOworCXJlcy0+ZW5kID0gc2l6ZSAtIDE7CiAJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAogCS8qIEdldCBkbWEtcmFuZ2VzIHByb3BlcnR5ICovCkBAIC0xNDUsMTIgKzE0MSwxMSBAQAogCiAJCS8qIFVzZSB0aGF0ICovCiAJCXJlcy0+c3RhcnQgPSBwY2lfYWRkcjsKLSNpZm5kZWYgQ09ORklHX1JFU09VUkNFU182NEJJVAogCQkvKiBCZXdhcmUgb2YgMzIgYml0cyByZXNvdXJjZXMgKi8KLQkJaWYgKChwY2lfYWRkciArIHNpemUpID4gMHgxMDAwMDAwMDB1bGwpCisJCWlmIChzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSA9PSBzaXplb2YodTMyKSAmJgorCQkgICAgKHBjaV9hZGRyICsgc2l6ZSkgPiAweDEwMDAwMDAwMHVsbCkKIAkJCXJlcy0+ZW5kID0gMHhmZmZmZmZmZjsKIAkJZWxzZQotI2VuZGlmCiAJCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBzaXplIC0gMTsKIAkJYnJlYWs7CiAJfQpAQCAtMTY3LDEzICsxNjIsMTMgQEAKIAkgKi8KIAlpZiAoc2l6ZSA8IHRvdGFsX21lbW9yeSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEtcmFuZ2VzIHRvbyBzbWFsbCAiCi0JCSAgICAgICAiKHNpemU9JWxseCB0b3RhbF9tZW1vcnk9JWx4KVxuIiwKLQkJICAgICAgIGhvc2UtPmRuLT5mdWxsX25hbWUsIHNpemUsIHRvdGFsX21lbW9yeSk7CisJCSAgICAgICAiKHNpemU9JWxseCB0b3RhbF9tZW1vcnk9JWxseClcbiIsCisJCSAgICAgICBob3NlLT5kbi0+ZnVsbF9uYW1lLCBzaXplLCAodTY0KXRvdGFsX21lbW9yeSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCiAJLyogQ2hlY2sgd2UgYXJlIGEgcG93ZXIgb2YgMiBzaXplIGFuZCB0aGF0IGJhc2UgaXMgYSBtdWx0aXBsZSBvZiBzaXplKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoc2l6ZSkgfHwKKwlpZiAoKHNpemUgJiAoc2l6ZSAtIDEpKSAhPSAwICB8fAogCSAgICAocmVzLT5zdGFydCAmIChzaXplIC0gMSkpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hLXJhbmdlcyB1bmFsaWduZWRcbiIsCiAJCSAgICAgICBob3NlLT5kbi0+ZnVsbF9uYW1lKTsKQEAgLTI3Nyw5ICsyNzIsMTYgQEAKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeSA9IDA7CiAKKwkvKiBDaGVjayBpZiBkZXZpY2UgaXMgZW5hYmxlZCAqLworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBvcnQgZGlzYWJsZWQgdmlhIGRldmljZS10cmVlXG4iLAorCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CisJCXJldHVybjsKKwl9CisKIAkvKiBGZXRjaCBjb25maWcgc3BhY2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KIAlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJzcmNfY2ZnKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOkNhbid0IGdldCBQQ0kgY29uZmlnIHJlZ2lzdGVyIGJhc2UgISIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGdldCBQQ0kgY29uZmlnIHJlZ2lzdGVyIGJhc2UgISIsCiAJCSAgICAgICBucC0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgxMCw3ICs4MTIsNyBAQAogCXN3aXRjaCAocG9ydC0+aW5kZXgpIHsKIAljYXNlIDA6CiAJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfTDBDRFJDVEwsIDB4MDAwMDMyMzApOwotCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwRFJWLCAweDAwMDAwMTM2KTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMF80NjBFWF9MMERSViwgMHgwMDAwMDEzMCk7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfTDBDTEssIDB4MDAwMDAwMDYpOwogCiAJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfUEhZX0NUTF9SU1QsMHgxMDAwMDAwMCk7CkBAIC04MjEsMTAgKzgyMywxMCBAQAogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wxQ0RSQ1RMLCAweDAwMDAzMjMwKTsKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMkNEUkNUTCwgMHgwMDAwMzIzMCk7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDNDRFJDVEwsIDB4MDAwMDMyMzApOwotCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wwRFJWLCAweDAwMDAwMTM2KTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMURSViwgMHgwMDAwMDEzNik7Ci0JCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJEUlYsIDB4MDAwMDAxMzYpOwotCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wzRFJWLCAweDAwMDAwMTM2KTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMERSViwgMHgwMDAwMDEzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDFEUlYsIDB4MDAwMDAxMzApOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wyRFJWLCAweDAwMDAwMTMwKTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MM0RSViwgMHgwMDAwMDEzMCk7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDBDTEssIDB4MDAwMDAwMDYpOwogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wxQ0xLLCAweDAwMDAwMDA2KTsKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMkNMSywgMHgwMDAwMDAwNik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZwppbmRleCAxY2U1NDY0Li43NmZmYmM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL0tjb25maWcKQEAgLTI0LDEyICsyNCwzIEBACiAJYm9vbAogCWhlbHAKIAkgIFFFIFVTQiBIb3N0IENvbnRyb2xsZXIgc3VwcG9ydAotCi1jb25maWcgUUVfR1BJTwotCWJvb2wgIlFFIEdQSU8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFFVSUNDX0VOR0lORQotCXNlbGVjdCBHRU5FUklDX0dQSU8KLQlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSdyZSBnb2luZyB0byB1c2UgaGFyZHdhcmUgdGhhdCBjb25uZWN0cyB0byB0aGUKLQkgIFFFIEdQSU9zLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCA0YzAzMDQ5Li43MGI3NjQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNzgsNiArNzgsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJCYXNlIHNldHVwIgogCiBjb21tZW50ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCkBAIC01NjUsMTMgKzU2NywxNiBAQAogCSAgUmVmZXIgdG8gPGZpbGU6RG9jdW1lbnRhdGlvbi9zMzkwL3pmY3BkdW1wLnR4dD4gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzLgogCiBjb25maWcgUzM5MF9HVUVTVAotYm9vbCAiczM5MCBndWVzdCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorYm9vbCAiczM5MCBndWVzdCBzdXBwb3J0IGZvciBLVk0gKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiA2NEJJVCAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgVklSVElPCiAJc2VsZWN0IFZJUlRJT19SSU5HCiAJc2VsZWN0IFZJUlRJT19DT05TT0xFCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biB0aGUga2VybmVsIHVuZGVyIHMzOTAgbGludXgKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gdGhlIGtlcm5lbCBhcyBhIGd1ZXN0IHVuZGVyCisJICB0aGUgS1ZNIGh5cGVydmlzb3IuIFRoaXMgd2lsbCBhZGQgZGV0ZWN0aW9uIGZvciBLVk0gYXMgd2VsbCAgYXMgYQorCSAgdmlydGlvIHRyYW5zcG9ydC4gSWYgS1ZNIGlzIGRldGVjdGVkLCB0aGUgdmlydGlvIGNvbnNvbGUgd2lsbCBiZQorCSAgdGhlIGRlZmF1bHQgY29uc29sZS4KIGVuZG1lbnUKIAogc291cmNlICJuZXQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAzY2FkNTY5Li4yNjE3ODVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNjYsMTMgKzE2NiwxMSBAQAogI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9wbGF0Zm9ybSkKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJCQlcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkJCQkJXAogZG8gewkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAotCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCVwKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGVhNDBhOWQuLmRlM2ZhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05OSw2ICs5OSw3IEBACiAjZGVmaW5lIFRJRl8zMUJJVAkJMTgJLyogMzJiaXQgcHJvY2VzcyAqLyAKICNkZWZpbmUgVElGX01FTURJRQkJMTkKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMAkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTIxCS8qIHRocmVhZCBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC0xMTIsNiArMTEzLDcgQEAKICNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl8zMUJJVAkJKDE8PFRJRl8zMUJJVCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwppbmRleCA5OGUyNDZkLi40NjQ2MzgyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKQEAgLTI3OSwyMiArMjc5LDYgQEAKIAlyZXR1cm4gaGlnaDJsb3dnaWQoY3VycmVudC0+ZWdpZCk7CiB9CiAKLS8qIDMyLWJpdCB0aW1ldmFsIGFuZCByZWxhdGVkIGZsb3RzYW0uICAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3R2MzIoc3RydWN0IHRpbWV2YWwgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpIHx8Ci0JCSBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8fAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogLyoKICAqIHN5czMyX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzIGluIDMyYml0IGVtdWxhdGlvbi4KICAqCkBAIC0zNjIsNDEgKzM0Niw2IEBACiAJCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoaGlnaCA8PCAzMikgfCBsb3cpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmICghb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8ICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWVyciA9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5pbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBwdXRfdXNlcihoaWdoMmxvd3VpZChzdGF0LT51aWQpLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gcHV0X3VzZXIoaGlnaDJsb3dnaWQoc3RhdC0+Z2lkKSwgJnN0YXRidWYtPnN0X2dpZCk7Ci0JZXJyIHw9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotLyogZml4bWUKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMV0pOwotKi8KLQlyZXR1cm4gZXJyOwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsKGNvbXBhdF9waWRfdCBwaWQsCiAJCQkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKQogewpAQCAtNTU3LDU3ICs1MDYsNiBAQAogCiAjZW5kaWYgIC8qIENPTkZJR19NT0RVTEVTICovCiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJc2l6ZV90IGNvdW50LCB1MzIgcG9zaGksIHUzMiBwb3NsbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmggYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCmluZGV4IDA1Zjg1MTYuLjgzNmEyODggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaApAQCAtMjAyLDEwICsyMDIsNiBAQAogbG9uZyBzeXMzMl9pbml0X21vZHVsZSh2b2lkIF9fdXNlciAqdW1vZCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpOwogbG9uZyBzeXMzMl9kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsIHVuc2lnbmVkIGludCBmbGFncyk7Ci1sb25nIHN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKLWxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOwogbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKIAkJICAgdTMyIHBvc2hpLCB1MzIgcG9zbG8pOwogbG9uZyBzeXMzMl9wd3JpdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IGVlNTFjYTkuLmZjMmM5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTMzMiwxNyArMzMyLDE3IEBACiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHJ1c2FnZV9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19nZXRydXNhZ2UJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9nZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfZ2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfc2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfc2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyCiBzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDNhZTMwMzkuLjJkNjE3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTg2LDggKzg2LDggQEAKIFNZU0NBTEwoc3lzX3NldHJsaW1pdCxzeXNfc2V0cmxpbWl0LGNvbXBhdF9zeXNfc2V0cmxpbWl0X3dyYXBwZXIpCS8qIDc1ICovCiBTWVNDQUxMKHN5c19vbGRfZ2V0cmxpbWl0LHN5c19nZXRybGltaXQsY29tcGF0X3N5c19vbGRfZ2V0cmxpbWl0X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19nZXRydXNhZ2Usc3lzX2dldHJ1c2FnZSxjb21wYXRfc3lzX2dldHJ1c2FnZV93cmFwcGVyKQotU1lTQ0FMTChzeXNfZ2V0dGltZW9mZGF5LHN5c19nZXR0aW1lb2ZkYXksc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCi1TWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2dldHRpbWVvZmRheSxzeXNfZ2V0dGltZW9mZGF5LGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCitTWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxjb21wYXRfc3lzX3NldHRpbWVvZmRheV93cmFwcGVyKQogU1lTQ0FMTChzeXNfZ2V0Z3JvdXBzMTYsc3lzX25pX3N5c2NhbGwsc3lzMzJfZ2V0Z3JvdXBzMTZfd3JhcHBlcikJLyogODAgb2xkIGdldGdyb3VwczE2IHN5c2NhbGwgKi8KIFNZU0NBTEwoc3lzX3NldGdyb3VwczE2LHN5c19uaV9zeXNjYWxsLHN5czMyX3NldGdyb3VwczE2X3dyYXBwZXIpCS8qIG9sZCBzZXRncm91cHMxNiBzeXNjYWxsICovCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG9sZCBzZWxlY3Qgc3lzY2FsbCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBkMWZhZjVjLi5jY2U0MGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJaW50IHJjOwogCiAJdmNwdS0+c3RhdC5pbnN0cnVjdGlvbl9zdGZsKys7Ci0JZmFjaWxpdHlfbGlzdCAmPSB+KDFVTDw8MjQpOyAvKiBubyBzdGZsZSAqLwotCWZhY2lsaXR5X2xpc3QgJj0gfigxVUw8PDIzKTsgLyogbm8gbGFyZ2UgcGFnZXMgKi8KKwkvKiBvbmx5IHBhc3MgdGhlIGZhY2lsaXR5IGJpdHMsIHdoaWNoIHdlIGNhbiBoYW5kbGUgKi8KKwlmYWNpbGl0eV9saXN0ICY9IDB4ZmUwMGZmZjM7CiAKIAlyYyA9IGNvcHlfdG9fZ3Vlc3QodmNwdSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdGZsX2ZhY19saXN0KSwKIAkJCSAgICZmYWNpbGl0eV9saXN0LCBzaXplb2YoZmFjaWxpdHlfbGlzdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggMTE2OTEzMC4uMTU4YjBkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xODksMTQgKzE4OSwzIEBACiAJcmV0dXJuIHJjOwogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0KLQlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOwotCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNTEzMWQ1MC4uY2IyYzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApAQCAtMjAsNiArMjEsMTAgQEAKIAogY29uZmlnIFNVUEVSSDMyCiAJZGVmX2Jvb2wgIVNVUEVSSDY0CisJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBIQVZFX0ZUUkFDRQogCiBjb25maWcgU1VQRVJINjQKIAlkZWZfYm9vbCB5IGlmIENQVV9TSDUKQEAgLTU0LDggKzU5LDExIEBACiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCBuCisKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQotCWRlZl9ib29sIHkKKwlib29sCiAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJYm9vbApAQCAtNjYsNiArNzQsOSBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCBuCiAKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAorCWJvb2wKKwogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKQEAgLTkyLDYgKzEwMywxMCBAQAogY29uZmlnIExPQ0tERVBfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gIVNNUAorCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCiAJZGVmX2Jvb2wgbgogCkBAIC0xMDYsNiArMTIxLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIHR5cGUiCiAKICMKQEAgLTMyMyw2ICszNDAsNyBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCBpZiBTTVAKIAogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtNDkwLDcgKzUwOCw2IEBACiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNGQyZDEwMi4uZTZkMmM4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgNEtTVEFDS1MKIAlib29sICJVc2UgNEtiIGZvciBrZXJuZWwgc3RhY2tzIGluc3RlYWQgb2YgOEtiIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKSAmJiAhUEFHRV9TSVpFXzY0S0IKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCiAJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggMDFkODVjNy4uMWY0MDliZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC03Niw4ICs3NiwxMCBAQAogIyBlcnJvciBtZXNzYWdlcyBkdXJpbmcgbGlua2luZy4KICMKIGlmZGVmIENPTkZJR19TVVBFUkgzMgorVVRTX01BQ0hJTkUJOj0gc2gKIExERkxBR1Nfdm1saW51eAkrPSAtZSBfc3RleHQKIGVsc2UKK1VUU19NQUNISU5FCTo9IHNoNjQKIExERkxBR1Nfdm1saW51eAkrPSAtLWRlZnN5bSBwaHlzX3N0ZXh0PV9zdGV4dC0kKENPTkZJR19QQUdFX09GRlNFVCkgXAogCQkgICAtLWRlZnN5bSBwaHlzX3N0ZXh0X3NobWVkaWE9cGh5c19zdGV4dCsxIFwKIAkJICAgLWUgcGh5c19zdGV4dF9zaG1lZGlhCkBAIC0xMjMsNiArMTI1LDkgQEAKIAkgICAgICQoZmlsdGVyLW91dCAuLCAkKHBhdHN1YnN0ICUsJS8sJChtYWNoZGlyLXkpKSkpCiBlbmRpZgogCisjIENvbW1vbiBtYWNoaW5lIHR5cGUgaGVhZGVycy4gTm90IHBhcnQgb2YgdGhlIGFyY2gvc2gvYm9hcmRzLyBoaWVyYXJjaHkuCittYWNoZGlyLXkJKz0gbWFjaC1jb21tb24KKwogIyBDb21wYW5pb24gY2hpcHMKIGNvcmUtJChDT05GSUdfSEQ2NDQ2WF9TRVJJRVMpCSs9IGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlMTk0ODYuLjUwNDY3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogY29uZmlnIFNIX1NESzc3ODAKQEAgLTE2Miw2ICsxNjMsNyBAQAogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNjksNiArMTcxLDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMworCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODQsNiArMTg3LDEzIEBACiAJYm9vbCAiRURPU0s3NzA1IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA1CiAKK2NvbmZpZyBTSF9FRE9TSzc3NjAKKwlib29sICJFRE9TSzc3NjAiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjAKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBFRE9TSzc3NjAKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9TSDQyMDJfTUlDUk9ERVYKIAlib29sICJTSDQtMjAyIE1pY3JvRGV2IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g0XzIwMgpAQCAtMjI4LDYgKzIzOCw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAorCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDQ2MzAyMmMuLmQ5ZWZhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1NIX1JTSzcyMDMpCSs9IGJvYXJkLXJzazcyMDMubwogb2JqLSQoQ09ORklHX1NIX1NINzc4NUxDUikJKz0gYm9hcmQtc2g3Nzg1bGNyLm8KIG9iai0kKENPTkZJR19TSF9TSE1JTikJCSs9IGJvYXJkLXNobWluLm8KK29iai0kKENPTkZJR19TSF9FRE9TSzc3NjApCSs9IGJvYXJkLWVkb3NrNzc2MC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBmZDE2MTI1Li43Yzc4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE4LDExICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxMVhfVVNFXzMyQklULApAQCAtNTIsMjAgKzU0LDMzIEBACiAJfSwKIH07CiAKKy8qCisgKiBBUDMyMCBhbmQgQVAzMjVSWEEgaGFzIENQTEQgZGF0YSBpbiBOT1IgRmxhc2goMHhBODAwMDAtMHhBQkZGRkYpLgorICogSWYgdGhpcyBhcmVhIGVyYXNlZCwgdGhpcyBib2FyZCBjYW4gbm90IGJvb3QuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcDMyNXJ4YV9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJIC5uYW1lID0gInVib290IiwKLQkJIC5vZmZzZXQgPSAwLAotCQkgLnNpemUgPSAoMSAqIDEwMjQgKiAxMDI0KSwKLQkJIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJCS5uYW1lID0gInVib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDEgKiAxMDI0ICogMTAyNCksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCiAJfSwgewotCQkgLm5hbWUgPSAia2VybmVsIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAorCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAogCX0sIHsKLQkJIC5uYW1lID0gIm90aGVyIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5uYW1lID0gImZyZWUtYXJlYTAiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgoNyAqIDEwMjQgKiAxMDI0KSArICg1MTIgKiAxMDI0KSksCisJfSwgeworCQkubmFtZSA9ICJDUExELURhdGEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCQkuc2l6ZSA9ICgxMDI0ICogMTI4ICogMiksCisJfSwgeworCQkubmFtZSA9ICJmcmVlLWFyZWExIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC05NiwxNyArMTExLDcgQEAKICNkZWZpbmUgRlBHQV9MQ0RSRUcJMHhCNDEwMDE4MAogI2RlZmluZSBGUEdBX0JLTFJFRwkweEI0MTAwMjEyCiAjZGVmaW5lIEZQR0FfTENEUkVHX1ZBTAkweDAwMTgKLSNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEUKLSNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTQKLSNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMTYKLSNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUMKLSNkZWZpbmUgUE9SVF9QU0NSCTB4QTQwNTAxMUUKLSNkZWZpbmUgUE9SVF9QWkNSCTB4QTQwNTAxNEMKLSNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE1OAogI2RlZmluZSBQT1JUX01TRUxDUkIJMHhBNDA1MDE4MgotI2RlZmluZSBQT1JUX1BTRFIJMHhBNDA1MDEzRQotI2RlZmluZSBQT1JUX1BaRFIJMHhBNDA1MDE2QwotI2RlZmluZSBQT1JUX1BTRUxECTB4QTQwNTAxNTQKIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQogewpAQCAtMTE2LDggKzEyMSw3IEBACiAJY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTQ1IpICYgfjB4MDBDMCkgfCAweDQwLCBQT1JUX1BTQ1IpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BTRFIpICYgfjB4MDgsIFBPUlRfUFNEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIApAQCAtMjgxLDEyICsyODUsODQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhcDMyNXJ4YV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXAzMjVyeGFfZGV2aWNlc19zZXR1cCh2b2lkKQogewotCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7IC8qIExDREMgKi8KLQljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMyIpOyAvKiBDRVUgKi8KKwkvKiBMRDMgYW5kIExENCBMRURzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRYNSwgTlVMTCk7IC8qIFJVTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWDUsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUFRYNSwgMCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QVFg0LCBOVUxMKTsgLyogSU5ESUNBVE9SICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRYNCwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QVFg0LCAwKTsKKworCS8qIFNXMSBpbnB1dCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BURjcsIE5VTEwpOyAvKiBNT0RFICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEY3KTsKKwlncGlvX2V4cG9ydChHUElPX1BURjcsIDApOworCisJLyogTENEQyAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEtfUFRSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKworCS8qIExDRCBiYWNrbGlnaHQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFMzLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFMzLCAxKTsKKworCS8qIENFVSAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAzIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUWjcsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjcsIDApOyAvKiBPRV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo2LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo2LCAwKTsgLyogU1RCWV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo1LCAxKTsgLyogUlNUX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLworCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZjZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKQEAgLTMwMCwxOCArMzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFwMzI1cnhhX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JLyogTENEQyBjb25maWd1cmF0aW9uICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEhDUikgJiB+MHhmZmZmLCBQT1JUX1BIQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BMQ1IpICYgfjB4ZmZmZiwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QTUNSKSAmIH4weGZmZmYsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwM2ZmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMUMwLCBQT1JUX0hJWkNSQSk7Ci0KLQkvKiBDRVUgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMywgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4ZmYwMCkgfCAweDU1MDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXRiKChjdHJsX2luYihQT1JUX1BaRFIpICYgfjB4ZjApIHwgMHgyMCwgUE9SVF9QWkRSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9hcDMyNXJ4YSBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZWRvc2s3NzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogUmVuZXNhcyBFdXJvcGUgRURPU0s3NzYwIEJvYXJkIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU1BFUyBTb2NpZXRhJyBQcm9nZXR0YXppb25lIEVsZXR0cm9uaWNhIGUgU29mdHdhcmUgTHRkLgorICogQXV0aG9yOiBMdWNhIFNhbnRpbmkgPGx1Y2Euc2FudGluaUBzcGVzb25saW5lLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2kyYy1zaDc3NjAuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyogQnVzIHN0YXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGZvciBDUzQgYXJlYSAqLworI2RlZmluZSBCU0NfQ1M0QkNSCTB4QTRGRDAwMTAKKyNkZWZpbmUgQlNDX0NTNFdDUgkweEE0RkQwMDMwCisKKyNkZWZpbmUgU01DX0lPQkFTRQkweEEyMDAwMDAwCisjZGVmaW5lIFNNQ19JT19PRkZTRVQJMHgzMDAKKyNkZWZpbmUgU01DX0lPQUREUgkoU01DX0lPQkFTRSArIFNNQ19JT19PRkZTRVQpCisKKyNkZWZpbmUgRVRIRVJORVRfSVJRCTUKKworLyogTk9SIGZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gImtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMk0sCisJfSwgeworCQkubmFtZSA9ICJmcyIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMjZNLAorCX0sIHsKKwkJLm5hbWUgPSAib3RoZXIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkucGFydHMJCT0gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk5PUiBGbGFzaCIsCisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDAwMDAwMDAwICsgU1pfMzJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZQk9IGVkb3NrNzc2MF9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlZG9zazc3NjBfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogaTJjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzaDc3NjBfaTJjX3BsYXRkYXRhIGkyY19wZCA9IHsKKwkuc3BlZWRfa2h6CT0gNDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NjBfaTJjMV9yZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFNINzc2MF9JMkMxX01NSU8sCisJCS5lbmQJPSBTSDc3NjBfSTJDMV9NTUlPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LHsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZW5kCT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2g3NzYwX2kyYzFfZGV2ID0geworCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wZCwKKwl9LAorCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMxX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzFfcmVzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzYwX2kyYzBfcmVzW10gPSB7CisJeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9NTUlPLAorCQkuZW5kCT0gU0g3NzYwX0kyQzBfTU1JT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5lbmQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaDc3NjBfaTJjMF9kZXYgPSB7CisJLmRldiAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaTJjX3BkLAorCX0sCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMwX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzBfcmVzKSwKK307CisKKy8qIGV0aCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfSU9fU0hJRlRfMSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTTUNfSU9BRERSLAorCQkuZW5kCT0gU01DX0lPQUREUiArIFNaXzMyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEVUSEVSTkVUX0lSUSwKKwkJLmVuZAk9IEVUSEVSTkVUX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXYgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzLAorCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKKy8qIHBsYXRmb3JtIGluaXQgY29kZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVkb3NrNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21jOTF4X2RldiwKKwkmZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UsCisJJnNoNzc2MF9pMmMwX2RldiwKKwkmc2g3NzYwX2kyYzFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9lZG9zazc3NjBfZGV2aWNlcyh2b2lkKQoreworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlZG9zazc3NjBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlZG9zazc3NjBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChpbml0X2Vkb3NrNzc2MF9kZXZpY2VzKTsKKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZWRvc2s3NzYwIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIkVET1NLNzc2MCIsCisJLm12X25yX2lycXMJPSAxMjgsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwppbmRleCBmM2I4YjA3Li4zZGUyMmNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwpAQCAtMTMsMTIgKzEzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hZ2ljcGFuZWxyMi5oPgorI2luY2x1ZGUgPG1hY2gvbWFnaWNwYW5lbHIyLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAogI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCkBAIC0xNzAsNyArMTcyLDE0IEBACiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QUkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMTksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EwLCBOVUxMKTsKIAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMKaW5kZXggZmZiZWRjNS4uZGVkNzk5YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXJzazcyMDMuYwpAQCAtMTYsOCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NoNzIwMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncwkJPSBTTUM5MTFYX1VTRV8xNkJJVCwKQEAgLTEyMiw2ICsxMjQsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgcnNrNzIwM19kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogU2VsZWN0IHBpbnMgZm9yIFNDSUYwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVFhEMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUlhEMCwgTlVMTCk7CisKKwkvKiBMaXQgTEVEMCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BFMTAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BFMTAsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUEUxMCwgMCk7CisKIAlzZXRfbXRkX3BhcnRpdGlvbnMoKTsKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnNrNzIwM19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHJzazcyMDNfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBiOTVkNjc0Li40MDhiYmRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NoNzc4NWxjci5oPgorI2luY2x1ZGUgPG1hY2gvc2g3Nzg1bGNyLmg+CiAKIC8qCiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggMTZlNWRhZS4uNWNjMDg2N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2htaW4uaD4KKyNpbmNsdWRlIDxtYWNoL3NobWluLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jCmluZGV4IDU0MWNlYTIuLjdkMTUzZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Vkb3NrNzcwNS9pby5oPgorI2luY2x1ZGUgPG1hY2gvZWRvc2s3NzA1Lmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAjZGVmaW5lIFNNQ19JT0FERFIJMHhBMjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMKaW5kZXggZjA3NmM0NS4uYWIzZjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vZWRvc2s3NzA1L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9lZG9zazc3MDUuaD4KIAogc3RhdGljIHZvaWQgX19pbml0IHNoX2Vkb3NrNzcwNV9pbml0X2lycSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwppbmRleCBhZTFjZmNiLi44M2MyOGJjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCmluZGV4IDlkMzkyMWYuLmI3MjFlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKaW5kZXggODk2YzA0NS4uMzgxMWIwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCmluZGV4IGJlOGQ1NDcuLjM3YjFhMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KICNpbmNsdWRlIDxhc20vcHVzaC1zd2l0Y2guaD4KIAogc3RhdGljIGlycXJldHVybl90IHBzd19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCmluZGV4IGJjNzlhZmIuLmM1YTQwZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKaW5kZXggMTc3ZjRmMC4uZTg1MjEyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogLyogcGVyY2VudGFnZSB2YWx1ZXMgKi8KICNkZWZpbmUgQVBNX0NSSVRJQ0FMCQkJMTAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwppbmRleCBlOTY2ODRkLi42NGFmMWYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogI2luY2x1ZGUgPGNwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vcG0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDQ3NWI0NmMuLjQ4ZmVjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgogCiAjZGVmaW5lCVNDUENSCTB4YTQwMDAxMTYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYwppbmRleCA1YTFjM2JiLi44YWExNzFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCmluZGV4IGM3NDQ0MGQuLjJiMGI1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xib3hyZTIuaD4KKyNpbmNsdWRlIDxtYWNoL2xib3hyZTIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKaW5kZXggOWY4YTU0MC4uNTJkZDc0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAKIAkvKgogCSAqCXdlIG5lZWQgdG8gaGF2ZSBhICdzYWZlJyBhZGRyZXNzIHRvIHJlLWRpcmVjdCBhbGwgSS9PIHJlcXVlc3RzCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwppbmRleCA0ZDMzNTA3Li43MDI3NTNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogCiAjZGVmaW5lIE5VTV9FWFRFUk5BTF9JUlFTIDE2CS8qIElSTDAgLi4gSVJMMTUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jCmluZGV4IGZjOGNkMDYuLmE5MjAyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDx2aWRlby9zMWQxM3h4eGZiLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYwppbmRleCA2ZTk2MDk1Li5kZTkwMTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL2xjZF9xdmdhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jCkBAIC0xNyw4ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisjaW5jbHVkZSA8bWFjaC9taWdvci5oPgogCiAvKiBMQ0QgTW9kdWxlIGlzIGEgUEgyNDAzMjBUIGFjY29yZGluZyB0byBib2FyZCBzY2hlbWF0aWNzLiBUaGlzIG1vZHVsZQogICogaXMgbWFkZSB1cCBvZiBhIDI0MHgzMjAgTENEIGhvb2tlZCB1cCB0byBhIFI2MTUwNVUgKG9yIEhYODM0Ny1BMDE/KQpAQCAtMzAsOSArMzIsOSBAQAogCiBzdGF0aWMgdm9pZCByZXNldF9sY2RfbW9kdWxlKHZvaWQpCiB7Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFBPUlRfUEhEUikgJiB+MHgwNCwgUE9SVF9QSERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUSDIsIDApOwogCW1kZWxheSgyKTsKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QSERSKSB8IDB4MDQsIFBPUlRfUEhEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEgyLCAxKTsKIAltZGVsYXkoMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCA3MTRkY2U5Li43NjlkNjMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0xNywxNCArMTcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2hfa2V5c2MuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxtYWNoL21pZ29yLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiAvKiBBZGRyZXNzICAgICBJUlEgIFNpemUgIEJ1cyAgRGVzY3JpcHRpb24KICAqIDB4MDAwMDAwMDAgICAgICAgNjRNQiAgMTYgICBOT1IgRmxhc2ggKFNQMjlQTDI1Nk4pCkBAIC0zNSw3ICszNyw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCwKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X2V0aF9yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBzdGF0aWMgaW50IG1pZ29yX25hbmRfZmxhc2hfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFBPUlRfUEFEUikgJiAweDAyOyAvKiBQVEExICovCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRBMSk7IC8qIE5BTkRfUkJuICovCiB9CiAKIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbWlnb3JfbmFuZF9mbGFzaF9kYXRhID0gewpAQCAtMjg2LDIyICsyODgsMTUgQEAKIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29uKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciB2YWx1ZTsKLQogCWNhbWVyYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aWRlb19jbGsiKTsKIAljbGtfc2V0X3JhdGUoY2FtZXJhX2NsaywgMjQwMDAwMDApOwogCWNsa19lbmFibGUoY2FtZXJhX2Nsayk7CS8qIHN0YXJ0IFZJT19DS08gKi8KIAorCS8qIHVzZSBWSU9fUlNUIHRvIHRha2UgY2FtZXJhIG91dCBvZiByZXNldCAqLwogCW1kZWxheSgxMCk7Ci0JdmFsdWUgPSBjdHJsX2luYihQT1JUX1BURFIpOwotCXZhbHVlICY9IH4weDA5OwotI2lmbmRlZiBDT05GSUdfU0hfTUlHT1JfUlRBX1dWR0EKLQl2YWx1ZSB8PSAweDAxOwotI2VuZGlmCi0JY3RybF9vdXRiKHZhbHVlLCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiAJbWRlbGF5KDEwKTsKLQotCWN0cmxfb3V0Yih2YWx1ZSB8IDgsIFBPUlRfUFREUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFQzLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29mZih2b2lkKQpAQCAtMzA5LDcgKzMwNCw3IEBACiAJY2xrX2Rpc2FibGUoY2FtZXJhX2Nsayk7IC8qIHN0b3AgVklPX0NLTyAqLwogCWNsa19wdXQoY2FtZXJhX2Nsayk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QVERSKSAmIH4weDA4LCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSTJDCkBAIC00NTgsNzUgKzQ1MywxMzUgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIExpdCBEMTEgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKKworCS8qIExpdCBEMTIgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKworCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOworCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKKwljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisKKwkvKiBLRVlTQyAqLwogCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjE0Iik7IC8qIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNF9JTjYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNV9JTjUsIE5VTEwpOworCisJLyogTkFORCBGbGFzaCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7CisJY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOworCWdwaW9fcmVxdWVzdChHUElPX1BUQTEsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRBMSk7CisKKwkvKiBUb3VjaCBQYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTYsIE5VTEwpOworCisJLyogTENEIFBhbmVsICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDAiKTsgLyogTENEQyAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9RVkdBIC8qIExDREMgLSBRVkdBIC0gRW5hYmxlIFNZUyBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJTLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RDUywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEUkQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFdSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVEgyLCBOVUxMKTsgLyogTENEX0RPTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSDIsIDEpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBIC8qIExDREMgLSBXVkdBIC0gRW5hYmxlIFJHQiBJbnRlcmZhY2Ugc2lnbmFscyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE0LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDExLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKyNlbmRpZgorCisJLyogQ0VVICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMDMiKTsgLyogQ0VVICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUVDMsIE5VTEwpOyAvKiBWSU9fUlNUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMywgMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMiwgTlVMTCk7IC8qIFRWX0lOX0VOICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMiwgMSk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMCwgTlVMTCk7IC8qIENBTV9FTiAqLworI2lmZGVmIENPTkZJR19TSF9NSUdPUl9SVEFfV1ZHQQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDApOworI2Vsc2UKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQwLCAxKTsKKyNlbmRpZgorCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJm1pZ29yX2NldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1pZ29yX2kyY19kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobWlnb3JfaTJjX2RldmljZXMpKTsKLSAKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtaWdvcl9kZXZpY2VzLCBBUlJBWV9TSVpFKG1pZ29yX2RldmljZXMpKTsKIH0KIF9faW5pdGNhbGwobWlnb3JfZGV2aWNlc19zZXR1cCk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaWdvcl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEpDUikgJiB+MHgwMDAzLCBQT1JUX1BKQ1IpOwotCi0JLyogS0VZU0MgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWUNSKSAmIH4weDBmZmYsIFBPUlRfUFlDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFpDUikgJiB+MHgwZmYwLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxBKSAmIH4weDQxMDAsIFBPUlRfUFNFTEEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHg0MDAwLCBQT1JUX0hJWkNSQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weGMwMDAsIFBPUlRfSElaQ1JDKTsKLQotCS8qIE5BTkQgRmxhc2ggKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWENSKSAmIDB4MGZmZiwgUE9SVF9QWENSKTsKLQljdHJsX291dGwoKGN0cmxfaW5sKEJTQ19DUzZBQkNSKSAmIH4weDAwMDAwNjAwKSB8IDB4MDAwMDAyMDAsCi0JCSAgQlNDX0NTNkFCQ1IpOwotCi0JLyogVG91Y2ggUGFuZWwgLSBFbmFibGUgSVJRNiAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4YywgUE9SVF9QWkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEEpIHwgMHg4MDAwKSwgUE9SVF9QU0VMQSk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkNSQykgJiB+MHg0MDAwKSwgUE9SVF9ISVpDUkMpOwotCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBCi0JLyogTENEQyAtIFdWR0EgLSBFbmFibGUgUkdCIEludGVyZmFjZSBzaWduYWxzICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEFDUikgJiB+MHgwMDAzLCBQT1JUX1BBQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDAwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwZCkgfCAweDA0MDAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpICYgfjB4MDEwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MDFlMCwgUE9SVF9ISVpDUkEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NIX01JR09SX1FWR0EKLQkvKiBMQ0RDIC0gUVZHQSAtIEVuYWJsZSBTWVMgSW50ZXJmYWNlIHNpZ25hbHMgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDAwMDMsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BIQ1IpICYgfjB4Y2ZmZikgfCAweDAwMTAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BSQ1IpICYgfjB4MDMwZiwgUE9SVF9QUkNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMSkgfCAweDA0MjAsIFBPUlRfUFNFTEQpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgwMTAwLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMWUwLCBQT1JUX0hJWkNSQSk7Ci0jZW5kaWYKLQotCS8qIENFVSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QVENSKSAmIH4weDAzYzMpIHwgMHgwMDUxLCBQT1JUX1BUQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BVQ1IpICYgfjB4MDNmZiwgUE9SVF9QVUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QVkNSKSAmIH4weDAzZmYsIFBPUlRfUFZDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFdDUikgJiB+MHgzYzAwLCBQT1JUX1BXQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUxDKSB8IDB4MDAwMSwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MjAwMCwgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEUpIHwgMHgwMDBmLCBQT1JUX1BTRUxFKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSB8IDB4MjIwMCwgUE9SVF9NU0VMQ1JCKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4MGEwMCwgUE9SVF9ISVpDUkEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQikgJiB+MHgwMDAzLCBQT1JUX0hJWkNSQik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfbWlnb3IgX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCmluZGV4IDhlNDlmNmUuLmM3MGZlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAKICNkZWZpbmUgUjJEX05SX0lSTCAxMwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwppbmRleCAyMzA4ZTg3Li5jNTg1YmUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODdjZGM1Ny4uODU1NTU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zZGs3NzgwLmg+CisjaW5jbHVkZSA8bWFjaC9zZGs3NzgwLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFjYzU5MzIuLmFhZDk0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2RrNzc4MC5oPgorI2luY2x1ZGUgPG1hY2gvc2RrNzc4MC5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCmluZGV4IGZkODUwYmEuLmQ4ZWJmYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaDc3NjNyZHAuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzc2M3JkcC5oPgogCiAjZGVmaW5lIElOVENfQkFTRQkJKDB4RkZEMDAwMDApCiAjZGVmaW5lIElOVENfSU5UMlBSSTcgICAoSU5UQ19CQVNFKzB4NDAwMUMpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCAyMzg1MGRhLi42ZjkyNmZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vc2g3NzYzcmRwLmg+CisjaW5jbHVkZSA8bWFjaC9zaDc3NjNyZHAuaD4KICNpbmNsdWRlIDxhc20vc2hfZXRoLmg+CiAjaW5jbHVkZSA8YXNtL3NoNzc2MGZiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYwppbmRleCBhNWUzNDlkLi5hMzI3N2EyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgorI2luY2x1ZGUgPG1hY2gvc25hcGdlYXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8Y3B1L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCmluZGV4IDFiNzY3ZTEuLmRlYzNkYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWg3NzUxLmg+CisjaW5jbHVkZSA8bWFjaC9zeXN0ZW1oNzc1MS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCmluZGV4IDYwMWM5YzguLjUzODQwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KICNpbmNsdWRlIDxhc20vc21jMzdjOTN4Lmg+CiAKIC8qIGFkZHJlc3Mgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKaW5kZXggZWU3OGFmOC4uMjE5ZmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KIAogZXh0ZXJuIHZvaWQgbWFrZV9zeXN0ZW1oX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmluZGV4IDQ3MzBjMWQuLjRiYWRhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwppbmRleCA1ZGUzYjJhLi44MWU3ZTBmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCmluZGV4IGI2NzE4ZGUuLmFhZDVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCkBAIC0xICsxLDQgQEAKIHpJbWFnZQordm1saW51eC5zcmVjCit1SW1hZ2UKK3VJbWFnZS5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggNWI1NDk2NS4uYzE2Y2NkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDE2IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK2lmZXEgKCQoQ09ORklHXzMyQklUKSx5KQorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbHNlCiBLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbmRpZgogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKaW5kZXggNDc2ODVmNi4uMzAxZTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKQEAgLTIzLDYgKzIzLDExIEBACiAKIExJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKK2lmZXEgKCQoQ09ORklHX0ZUUkFDRSkseSkKK09SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKK2VuZGlmCisKIExERkxBR1Nfdm1saW51eCA6PSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgLVQgJChvYmopLy4uLy4uL2tlcm5lbC92bWxpbnV4LmxkcwogCiAkKG9iaikvdm1saW51eDogJChPQkpFQ1RTKSAkKG9iaikvcGlnZ3kubyAkKExJQkdDQykgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYwppbmRleCBmMzg2OTk3Li5lZmRiYTZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQogewotCW91dHB1dF9kYXRhID0gMDsKKwlvdXRwdXRfZGF0YSA9IE5VTEw7CiAJb3V0cHV0X3B0ciA9IFBIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR18yOUJJVAogCW91dHB1dF9wdHIgfD0gUDJTRUc7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBUdWUgQXVnIDI2IDExOjM2OjA5IDIwMDgKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSJfZWRvc2s3NzYwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX0VET1NLNzc2MD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQV9BUEk9eQorQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMjAwMDAwMAorIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MyLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTkyLjE2OC4wLjM6L3NjcmlwdHMvZmlsZXN5cyBpcD0xOTIuMTY4LjAuNCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOD15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzI9eQorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorQ09ORklHX01URF9DRklfSTg9eQorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNjAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTk0IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDc3NjA9eQorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPW0KKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX01CODYyOTBfNjQwWDQ4MF8xNkJQUCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIFNVUEVSSCBkZXZpY2VzCisjCisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworQ09ORklHX1NORF9TT0M9eQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIworIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjc5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzIKKyMgTW9uIEF1ZyAxOCAyMjoxNzo0NCAyMDA4CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAorQ09ORklHX1NIX1JUUzc3NTFSMkQ9eQorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9MQk9YX1JFMiBpcyBub3Qgc2V0CisKKyMKKyMgUlRTNzc1MVIyRCBCb2FyZCBSZXZpc2lvbgorIworQ09ORklHX1JUUzc3NTFSMkRfUExVUz15CisjIENPTkZJR19SVFM3NzUxUjJEXzEgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CisjIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfU1VQRVJIPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1BSSU1FPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1I5NzAxPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMKaW5kZXggYTEzY2I3Ni4uODZjMGI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxib3hyZTIuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgY2hhciBsYm94cmUyX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCmluZGV4IDVmZGFkYWUuLjg1NTUyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCmluZGV4IGIzZmEzZTIuLmQ2Y2E3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgdTggcnRzNzc1MXIyZF9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYwppbmRleCA2NmE5YjQwLi40ZGNjNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2RrNzc4MC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3Nkazc3ODAuaD4KKyNpbmNsdWRlIDxtYWNoL3Nkazc3ODAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCmluZGV4IGFjOGVlMjMuLmE4Zjc4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtdGl0YW4uYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKIHN0YXRpYyBjaGFyIHRpdGFuX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjhlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCisJCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKKwkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpCisJCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJIm9yCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0JJVE9QU19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGQ3ZDM4MmYuLjM2NzkzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaWZkZWYgQ09ORklHX0dVU0FfUkIKICNpbmNsdWRlIDxhc20vYml0b3BzLWdyYi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjaW5jbHVkZSA8YXNtL2JpdG9wcy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9iaXRvcHMtaXJxLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA3MjBkZmFiLi5mOWM4ODU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0zOSw2ICszOSw3IEBACiAKIC8qIFNob3VsZCBiZSBkZWZpbmVkIGJ5IHByb2Nlc3Nvci1zcGVjaWZpYyBjb2RlICovCiB2b2lkIGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqLCBpbnQgdHlwZSk7CitpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCk7CiAKIC8qIGFyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jICovCiBpbnQgY2xrX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisjZGVmaW5lIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHU4ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJiZgkJMmYJCQkJXG5cdCIKKwkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSIyOgkJCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmMDE0NDlhLi45ZWI5MDM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2ZkcGljKHgpCQkoKHgpLT5lX2ZsYWdzICYgRUZfU0hfRkRQSUMpCiAjZGVmaW5lIGVsZl9jaGVja19jb25zdF9kaXNwbGFjZW1lbnQoeCkJKCh4KS0+ZV9mbGFncyAmIEVGX1NIX1BJQykKIAorI2lmZGVmIENPTkZJR19TVVBFUkgzMgorLyoKKyAqIEVuYWJsZSBkdW1wIHVzaW5nIHJlZ3NldC4KKyAqIFRoaXMgY292ZXJzIGFsbCBvZiBnZW5lcmFsL0RTUC9GUFUgcmVncy4KKyAqLworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorI2VuZGlmCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX1NIX0ZEUElDCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQpAQCAtMTg5LDEzICsxOTcsNyBAQAogfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci1leHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKLWV4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOwotCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCA5MTQ2MmZlLi4xZDNhZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTMwLDggKzMwLDE1IEBACiB9CiAjZW5kaWYKIAorc3RydWN0IHVzZXJfcmVnc2V0OworCiBleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAorZXh0ZXJuIGludCBmcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1Zik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTUwLDYgKzU3LDE4IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9GVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9GVFJBQ0VfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjZjMyYmQyLi45NjUwZTdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgaW5jbHVkZS9hc20tc2gvZ3Bpby5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogR2VuZXJpYyBHUElPIEFQSSBhbmQgcGlubXV4IHRhYmxlIHN1cHBvcnQgZm9yIFN1cGVySC4KICAqCi0gKiAgQWRkcmVzc2VzIGZvciB0aGUgUGluIEZ1bmN0aW9uIENvbnRyb2xsZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNYWdudXMgRGFtbQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNiw0ICsxNiw5MiBAQAogI2luY2x1ZGUgPGNwdS9ncGlvLmg+CiAjZW5kaWYKIAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZW51bV90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHBpbm11eF9mbGFnX3Q7CisKKyNkZWZpbmUgUElOTVVYX1RZUEVfTk9ORSAgICAgICAgICAgIDAKKyNkZWZpbmUgUElOTVVYX1RZUEVfRlVOQ1RJT04gICAgICAgIDEKKyNkZWZpbmUgUElOTVVYX1RZUEVfR1BJTyAgICAgICAgICAgIDIKKyNkZWZpbmUgUElOTVVYX1RZUEVfT1VUUFVUICAgICAgICAgIDMKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVQgICAgICAgICAgIDQKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTFVQICAgIDUKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV04gIDYKKworI2RlZmluZSBQSU5NVVhfRkxBR19UWVBFICAgICAgICAgICAgKDB4NykKKyNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMVVAgICAgICgxIDw8IDMpCisjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTERPV04gICAoMSA8PCA0KQorCitzdHJ1Y3QgcGlubXV4X2dwaW8geworCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKKwlwaW5tdXhfZmxhZ190IGZsYWdzOworfTsKKworI2RlZmluZSBQSU5NVVhfR1BJTyhncGlvLCBkYXRhX29yX21hcmspIFtncGlvXSA9IHsgZGF0YV9vcl9tYXJrIH0KKyNkZWZpbmUgUElOTVVYX0RBVEEoZGF0YV9vcl9tYXJrLCBpZHMuLi4pIGRhdGFfb3JfbWFyaywgaWRzLCAwCisKK3N0cnVjdCBwaW5tdXhfY2ZnX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7CisJdW5zaWduZWQgbG9uZyAqY250OworCXBpbm11eF9lbnVtX3QgKmVudW1faWRzOworfTsKKworI2RlZmluZSBQSU5NVVhfQ0ZHX1JFRyhuYW1lLCByLCByX3dpZHRoLCBmX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLCAuZmllbGRfd2lkdGggPSBmX3dpZHRoLAkJXAorCS5jbnQgPSAodW5zaWduZWQgbG9uZyBbcl93aWR0aCAvIGZfd2lkdGhdKSB7fSwgXAorCS5lbnVtX2lkcyA9IChwaW5tdXhfZW51bV90IFsocl93aWR0aCAvIGZfd2lkdGgpICogKDEgPDwgZl93aWR0aCldKSBcCisKK3N0cnVjdCBwaW5tdXhfZGF0YV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGg7CisJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7Cit9OworCisjZGVmaW5lIFBJTk1VWF9EQVRBX1JFRyhuYW1lLCByLCByX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLAlcCisJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgW3Jfd2lkdGhdKSBcCisKK3N0cnVjdCBwaW5tdXhfcmFuZ2UgeworCXBpbm11eF9lbnVtX3QgYmVnaW47CisJcGlubXV4X2VudW1fdCBlbmQ7Cit9OworCitzdHJ1Y3QgcGlubXV4X2luZm8geworCWNoYXIgKm5hbWU7CisJcGlubXV4X2VudW1fdCByZXNlcnZlZF9pZDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGRhdGE7CisJc3RydWN0IHBpbm11eF9yYW5nZSBpbnB1dDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGlucHV0X3BkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgaW5wdXRfcHU7CisJc3RydWN0IHBpbm11eF9yYW5nZSBvdXRwdXQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBtYXJrOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgZnVuY3Rpb247CisKKwl1bnNpZ25lZCBmaXJzdF9ncGlvLCBsYXN0X2dwaW87CisKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9zOworCXN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY2ZnX3JlZ3M7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWdzOworCisJcGlubXV4X2VudW1fdCAqZ3Bpb19kYXRhOworCXVuc2lnbmVkIGludCBncGlvX2RhdGFfc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcgKmdwaW9faW5fdXNlOworfTsKKworaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCk7CisKK2ludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlyZXR1cm4gX19ncGlvX3JlcXVlc3QoZ3Bpbyk7Cit9Cit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK2ludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9TSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGQ1NTdiMDAuLjYwM2NkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BU01fU0hfSFdfSVJRX0gKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKQEAgLTIzLDEwMSArMjQsMTIgQEAKIAogdm9pZCByZWdpc3Rlcl9pcHJfY29udHJvbGxlcihzdHJ1Y3QgaXByX2Rlc2MgKik7CiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07Ci0KLXN0cnVjdCBpbnRjX3ZlY3QgewotCWludGNfZW51bSBlbnVtX2lkOwotCXVuc2lnbmVkIHNob3J0IHZlY3Q7Ci19OwotCi0jZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQotI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCi0KLXN0cnVjdCBpbnRjX2dyb3VwIHsKLQlpbnRjX2VudW0gZW51bV9pZDsKLQlpbnRjX2VudW0gZW51bV9pZHNbMzJdOwotfTsKLQotI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KLQotc3RydWN0IGludGNfbWFza19yZWcgewotCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1szMl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19wcmlvX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19zZW5zZV9yZWcgewotCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQotI2Vsc2UKLSNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKLSNlbmRpZgotCi1zdHJ1Y3QgaW50Y19kZXNjIHsKLQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOwotCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOwotCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7Ci0JdW5zaWduZWQgaW50IG5yX2dyb3VwczsKLQlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOwotCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOwotCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKLQljaGFyICpuYW1lOwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKLSNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAotCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCi1zdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKLQltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAotc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKLQlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAotfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKLWludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7Ci0KIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpOwotI2lmZGVmIENPTkZJR19DUFVfU0gzCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9zaDModm9pZCk7Ci0jZW5kaWYKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiBlbnVtIHsgSVJRX01PREVfSVJRLCBJUlFfTU9ERV9JUlE3NjU0LCBJUlFfTU9ERV9JUlEzMjEwLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTRfTUFTSywgSVJRX01PREVfSVJMMzIxMF9NQVNLLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTQsIElSUV9NT0RFX0lSTDMyMTAgfTsKLXZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiAjZW5kaWYgLyogX19BU01fU0hfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCBhNGZiZjBjLi40MzZjMjg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDI3ICsxLDI2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0lPX0gKICNkZWZpbmUgX19BU01fU0hfSU9fSAotCiAvKgogICogQ29udmVudGlvbjoKLSAqICAgIHJlYWR7Yix3LGx9L3dyaXRle2IsdyxsfSBhcmUgZm9yIFBDSSwKKyAqICAgIHJlYWR7Yix3LGwscX0vd3JpdGV7Yix3LGwscX0gYXJlIGZvciBQQ0ksCiAgKiAgICB3aGlsZSBpbntiLHcsbH0vb3V0e2IsdyxsfSBhcmUgZm9yIElTQQotICogVGhlc2UgbWF5ICh3aWxsKSBiZSBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbi4KKyAqCiAgKiBJbiBhZGRpdGlvbiB3ZSBoYXZlICdwYXVzaW5nJyB2ZXJzaW9uczogaW57Yix3LGx9X3Avb3V0e2IsdyxsfV9wCiAgKiBhbmQgJ3N0cmluZycgdmVyc2lvbnM6IGluc3tiLHcsbH0vb3V0c3tiLHcsbH0KLSAqIEZvciByZWFke2IsdyxsfSBhbmQgd3JpdGV7Yix3LGx9IHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaAotICogZG8gbm90IGhhdmUgYSBtZW1vcnkgYmFycmllciBhZnRlciB0aGVtLgogICoKLSAqIEluIGFkZGl0aW9uLCB3ZSBoYXZlCi0gKiAgIGN0cmxfaW57Yix3LGx9L2N0cmxfb3V0e2IsdyxsfSBmb3IgU3VwZXJIIHNwZWNpZmljIEkvTy4KLSAqICAgd2hpY2ggYXJlIHByb2Nlc3NvciBzcGVjaWZpYy4KLSAqLwotCi0vKgotICogV2UgZm9sbG93IHRoZSBBbHBoYSBjb252ZW50aW9uIGhlcmU6Ci0gKiAgX19pbmIgZXhwYW5kcyB0byBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCAod2hpY2ggY2FsbHMgdmlhIHRoZSBtdikKLSAqICBfaW5iICBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbCAobm90ZSBfX19yYXcgZm5zIGFyZSBfIHZlcnNpb24gb2YgX19yYXcpCi0gKiAgaW5iICAgYnkgZGVmYXVsdCBleHBhbmRzIHRvIF9pbmIsIGJ1dCB0aGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heQotICogICAgICAgIGRlZmluZSBpdCB0byBfX2luYiBpZiBpdCBjaG9vc2VzLgorICogV2hpbGUgcmVhZHtiLHcsbCxxfSBhbmQgd3JpdGV7Yix3LGwscX0gY29udGFpbiBtZW1vcnkgYmFycmllcnMKKyAqIGF1dG9tYXRpY2FsbHksIHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaCBkbyBub3QuCisgKgorICogSGlzdG9yaWNhbGx5LCB3ZSBoYXZlIGFsc28gaGFkIGN0cmxfaW57Yix3LGwscX0vY3RybF9vdXR7Yix3LGwscX0gZm9yCisgKiBTdXBlckggc3BlY2lmaWMgSS9PIChyYXcgSS9PIHRvIG9uLWNoaXAgQ1BVIHBlcmlwaGVyYWxzKS4gSW4gcHJhY3RpY2UKKyAqIHRoZXNlIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBfX3JhdyB2YXJpYW50cywgYW5kIGFzIHN1Y2gsIGFsbAorICogbmV3IGNvZGUgc2hvdWxkIGJlIHVzaW5nIHRoZSBfX3JhdyB2ZXJzaW9ucy4KKyAqCisgKiBBbGwgSVNBIEkvTyByb3V0aW5lcyBhcmUgd3JhcHBlZCB0aHJvdWdoIHRoZSBtYWNoaW5lIHZlY3Rvci4gSWYgYQorICogYm9hcmQgZG9lcyBub3QgcHJvdmlkZSBvdmVycmlkZXMsIGEgZ2VuZXJpYyBzZXQgdGhhdCBhcmUgY29waWVkIGluCisgKiBmcm9tIHRoZSBkZWZhdWx0IG1hY2hpbmUgdmVjdG9yIGFyZSB1c2VkIGluc3RlYWQuIFRoZXNlIGFyZSBsYXJnZWx5CisgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCisgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0zMSw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KLQogLyoKICAqIERlcGVuZGluZyBvbiB3aGljaCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbiwgd2UgbmVlZCBkaWZmZXJlbnQKICAqIEkvTyBmdW5jdGlvbnMuCkBAIC00MCwxMDUgKzM4LDY4IEBACiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogCi0jZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAotICBwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAotCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAocG9ydCksICh1MzIpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorI2RlZmluZSBpbmIocCkJCQlzaF9tdi5tdl9pbmIoKHApKQorI2RlZmluZSBpbncocCkJCQlzaF9tdi5tdl9pbncoKHApKQorI2RlZmluZSBpbmwocCkJCQlzaF9tdi5tdl9pbmwoKHApKQorI2RlZmluZSBvdXRiKHgscCkJCXNoX212Lm12X291dGIoKHgpLChwKSkKKyNkZWZpbmUgb3V0dyh4LHApCQlzaF9tdi5tdl9vdXR3KCh4KSwocCkpCisjZGVmaW5lIG91dGwoeCxwKQkJc2hfbXYubXZfb3V0bCgoeCksKHApKQogCi0vKgotICogU2luY2UgYm9hcmRzIGFyZSBhYmxlIHRvIGRlZmluZSB0aGVpciBvd24gc2V0IG9mIEkvTyByb3V0aW5lcyB0aHJvdWdoCi0gKiB0aGVpciByZXNwZWN0aXZlIG1hY2hpbmUgdmVjdG9yLCB3ZSBhbHdheXMgd3JhcCB0aHJvdWdoIHRoZSBtdi4KLSAqCi0gKiBBbHNvLCBpbiB0aGUgZXZlbnQgdGhhdCBhIGJvYXJkIGhhc24ndCBwcm92aWRlZCBpdHMgb3duIGRlZmluaXRpb24gZm9yCi0gKiBhIGdpdmVuIHJvdXRpbmUsIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBnZW5lcmljIGNvZGUgYXQgcnVuLXRpbWUuCi0gKi8KKyNkZWZpbmUgaW5iX3AocCkJCXNoX212Lm12X2luYl9wKChwKSkKKyNkZWZpbmUgaW53X3AocCkJCXNoX212Lm12X2lud19wKChwKSkKKyNkZWZpbmUgaW5sX3AocCkJCXNoX212Lm12X2lubF9wKChwKSkKKyNkZWZpbmUgb3V0Yl9wKHgscCkJCXNoX212Lm12X291dGJfcCgoeCksKHApKQorI2RlZmluZSBvdXR3X3AoeCxwKQkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCisjZGVmaW5lIG91dGxfcCh4LHApCQlzaF9tdi5tdl9vdXRsX3AoKHgpLChwKSkKIAotI2RlZmluZSBfX2luYihwKQlzaF9tdi5tdl9pbmIoKHApKQotI2RlZmluZSBfX2ludyhwKQlzaF9tdi5tdl9pbncoKHApKQotI2RlZmluZSBfX2lubChwKQlzaF9tdi5tdl9pbmwoKHApKQotI2RlZmluZSBfX291dGIoeCxwKQlzaF9tdi5tdl9vdXRiKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0dyh4LHApCXNoX212Lm12X291dHcoKHgpLChwKSkKLSNkZWZpbmUgX19vdXRsKHgscCkJc2hfbXYubXZfb3V0bCgoeCksKHApKQorI2RlZmluZSBpbnNiKHAsYixjKQkJc2hfbXYubXZfaW5zYigocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnN3KHAsYixjKQkJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnNsKHAsYixjKQkJc2hfbXYubXZfaW5zbCgocCksIChiKSwgKGMpKQorI2RlZmluZSBvdXRzYihwLGIsYykJCXNoX212Lm12X291dHNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIG91dHN3KHAsYixjKQkJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKKyNkZWZpbmUgb3V0c2wocCxiLGMpCQlzaF9tdi5tdl9vdXRzbCgocCksIChiKSwgKGMpKQogCi0jZGVmaW5lIF9faW5iX3AocCkJc2hfbXYubXZfaW5iX3AoKHApKQotI2RlZmluZSBfX2lud19wKHApCXNoX212Lm12X2lud19wKChwKSkKLSNkZWZpbmUgX19pbmxfcChwKQlzaF9tdi5tdl9pbmxfcCgocCkpCi0jZGVmaW5lIF9fb3V0Yl9wKHgscCkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0d19wKHgscCkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0bF9wKHgscCkJc2hfbXYubXZfb3V0bF9wKCh4KSwocCkpCisjZGVmaW5lIF9fcmF3X3dyaXRlYih2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlcSh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkgPSAodikpCiAKLSNkZWZpbmUgX19pbnNiKHAsYixjKQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIF9faW5zdyhwLGIsYykJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQotI2RlZmluZSBfX2luc2wocCxiLGMpCXNoX212Lm12X2luc2woKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzYihwLGIsYykJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzdyhwLGIsYykJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzbChwLGIsYykJc2hfbXYubXZfb3V0c2woKHApLCAoYiksIChjKSkKKyNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWR3KGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHEoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkpCiAKLSNkZWZpbmUgX19yZWFkYihhKQlzaF9tdi5tdl9yZWFkYigoYSkpCi0jZGVmaW5lIF9fcmVhZHcoYSkJc2hfbXYubXZfcmVhZHcoKGEpKQotI2RlZmluZSBfX3JlYWRsKGEpCXNoX212Lm12X3JlYWRsKChhKSkKLSNkZWZpbmUgX193cml0ZWIodixhKQlzaF9tdi5tdl93cml0ZWIoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZXcodixhKQlzaF9tdi5tdl93cml0ZXcoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZWwodixhKQlzaF9tdi5tdl93cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgcmVhZGIoYSkJCSh7IHU4ICByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHcoYSkJCSh7IHUxNiByXyA9IF9fcmF3X3JlYWR3KGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZGwoYSkJCSh7IHUzMiByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHEoYSkJCSh7IHU2NCByXyA9IF9fcmF3X3JlYWRxKGEpOyBtYigpOyByXzsgfSkKIAotI2RlZmluZSBpbmIJCV9faW5iCi0jZGVmaW5lIGludwkJX19pbncKLSNkZWZpbmUgaW5sCQlfX2lubAotI2RlZmluZSBvdXRiCQlfX291dGIKLSNkZWZpbmUgb3V0dwkJX19vdXR3Ci0jZGVmaW5lIG91dGwJCV9fb3V0bAorI2RlZmluZSB3cml0ZWIodixhKQkJKHsgX19yYXdfd3JpdGViKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXcodixhKQkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZWwodixhKQkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXEodixhKQkJKHsgX19yYXdfd3JpdGVxKCh2KSwoYSkpOyBtYigpOyB9KQogCi0jZGVmaW5lIGluYl9wCQlfX2luYl9wCi0jZGVmaW5lIGlud19wCQlfX2lud19wCi0jZGVmaW5lIGlubF9wCQlfX2lubF9wCi0jZGVmaW5lIG91dGJfcAkJX19vdXRiX3AKLSNkZWZpbmUgb3V0d19wCQlfX291dHdfcAotI2RlZmluZSBvdXRsX3AJCV9fb3V0bF9wCisvKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCisjZGVmaW5lIGN0cmxfaW5iCQlfX3Jhd19yZWFkYgorI2RlZmluZSBjdHJsX2ludwkJX19yYXdfcmVhZHcKKyNkZWZpbmUgY3RybF9pbmwJCV9fcmF3X3JlYWRsCisjZGVmaW5lIGN0cmxfaW5xCQlfX3Jhd19yZWFkcQogCi0jZGVmaW5lIGluc2IJCV9faW5zYgotI2RlZmluZSBpbnN3CQlfX2luc3cKLSNkZWZpbmUgaW5zbAkJX19pbnNsCi0jZGVmaW5lIG91dHNiCQlfX291dHNiCi0jZGVmaW5lIG91dHN3CQlfX291dHN3Ci0jZGVmaW5lIG91dHNsCQlfX291dHNsCisjZGVmaW5lIGN0cmxfb3V0YgkJX19yYXdfd3JpdGViCisjZGVmaW5lIGN0cmxfb3V0dwkJX19yYXdfd3JpdGV3CisjZGVmaW5lIGN0cmxfb3V0bAkJX19yYXdfd3JpdGVsCisjZGVmaW5lIGN0cmxfb3V0cQkJX19yYXdfd3JpdGVxCiAKLSNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCV9fcmVhZGIoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCV9fcmVhZHcoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZGwoYSkJCV9fcmVhZGwoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfd3JpdGViKHYsIGEpCV9fd3JpdGViKHYsICh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRldyh2LCBhKQlfX3dyaXRldyh2LCAodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd193cml0ZWwodiwgYSkJX193cml0ZWwodiwgKHZvaWQgX19pb21lbSAqKShhKSkKLQotdm9pZCBfX3Jhd193cml0ZXNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwotdm9pZCBfX3Jhd19yZWFkc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Ci0KLS8qCi0gKiBUaGUgcGxhdGZvcm0gaGVhZGVyIGZpbGVzIG1heSBkZWZpbmUgc29tZSBvZiB0aGVzZSBtYWNyb3MgdG8gdXNlCi0gKiB0aGUgaW5saW5lZCB2ZXJzaW9ucyB3aGVyZSBhcHByb3ByaWF0ZS4gIFRoZXNlIG1hY3JvcyBtYXkgYWxzbyBiZQotICogcmVkZWZpbmVkIGJ5IHVzZXJsZXZlbCBwcm9ncmFtcy4KLSAqLwotI2lmZGVmIF9fcmVhZGIKLSMgZGVmaW5lIHJlYWRiKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCit7CisjaWZkZWYgUDJTRUcKKwlfX3Jhd19yZWFkdyhQMlNFRyk7CiAjZW5kaWYKLSNpZmRlZiBfX3Jhd19yZWFkdwotIyBkZWZpbmUgcmVhZHcoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQotI2VuZGlmCi0jaWZkZWYgX19yYXdfcmVhZGwKLSMgZGVmaW5lIHJlYWRsKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKLSNlbmRpZgotCi0jaWZkZWYgX19yYXdfd3JpdGViCi0jIGRlZmluZSB3cml0ZWIodixhKQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCi0jZW5kaWYKLSNpZmRlZiBfX3Jhd193cml0ZXcKLSMgZGVmaW5lIHdyaXRldyh2LGEpCSh7IF9fcmF3X3dyaXRldygodiksKGEpKTsgbWIoKTsgfSkKLSNlbmRpZgotI2lmZGVmIF9fcmF3X3dyaXRlbAotIyBkZWZpbmUgd3JpdGVsKHYsYSkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQotI2VuZGlmCit9CiAKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCiAJCQkJY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQlcCiB7CQkJCQkJCQkJXAogCWNvbnN0IHZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCVwKQEAgLTE0OSw4ICsxMTAsOCBAQAogCX0JCQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sIHZvaWQgKmFkZHIsCVwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCisJCQkgICAgICAgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQkJXAogewkJCQkJCQkJCVwKIAl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAogCQkJCQkJCQkJXApAQCAtMTYyLDEwNiArMTIzLDcxIEBACiAKIF9fQlVJTERfTUVNT1JZX1NUUklORyhiLCB1OCkKIF9fQlVJTERfTUVNT1JZX1NUUklORyh3LCB1MTYpCi0jZGVmaW5lIHdyaXRlc2wgX19yYXdfd3JpdGVzbAotI2RlZmluZSByZWFkc2wgIF9fcmF3X3JlYWRzbAorX19CVUlMRF9NRU1PUllfU1RSSU5HKHEsIHU2NCkKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIHJlYWRiKGEpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgcmVhZHcoYSkKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhKSByZWFkbChhKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisKKyNkZWZpbmUgd3JpdGVzYgkJCV9fcmF3X3dyaXRlc2IKKyNkZWZpbmUgd3JpdGVzdwkJCV9fcmF3X3dyaXRlc3cKKyNkZWZpbmUgd3JpdGVzbAkJCV9fcmF3X3dyaXRlc2wKKworI2RlZmluZSByZWFkc2IJCQlfX3Jhd19yZWFkc2IKKyNkZWZpbmUgcmVhZHN3CQkJX19yYXdfcmVhZHN3CisjZGVmaW5lIHJlYWRzbAkJCV9fcmF3X3JlYWRzbAorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkJcmVhZGIoYSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKQlyZWFkdyhhKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGEpCXJlYWRsKGEpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJcmVhZHEoYSkKIAogLyogU2ltcGxlIE1NSU8gKi8KLSNkZWZpbmUgaW9yZWFkOChhKQkJcmVhZGIoYSkKLSNkZWZpbmUgaW9yZWFkMTYoYSkJCXJlYWR3KGEpCisjZGVmaW5lIGlvcmVhZDgoYSkJCV9fcmF3X3JlYWRiKGEpCisjZGVmaW5lIGlvcmVhZDE2KGEpCQlfX3Jhd19yZWFkdyhhKQogI2RlZmluZSBpb3JlYWQxNmJlKGEpCQliZTE2X3RvX2NwdShfX3Jhd19yZWFkdygoYSkpKQotI2RlZmluZSBpb3JlYWQzMihhKQkJcmVhZGwoYSkKKyNkZWZpbmUgaW9yZWFkMzIoYSkJCV9fcmF3X3JlYWRsKGEpCiAjZGVmaW5lIGlvcmVhZDMyYmUoYSkJCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChhKSkpCiAKLSNkZWZpbmUgaW93cml0ZTgodixhKQkJd3JpdGViKCh2KSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUxNih2LGEpCQl3cml0ZXcoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTgodixhKQkJX19yYXdfd3JpdGViKCh2KSwoYSkpCisjZGVmaW5lIGlvd3JpdGUxNih2LGEpCQlfX3Jhd193cml0ZXcoKHYpLChhKSkKICNkZWZpbmUgaW93cml0ZTE2YmUodixhKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHYpKSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUzMih2LGEpCQl3cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTMyKHYsYSkJCV9fcmF3X3dyaXRlbCgodiksKGEpKQogI2RlZmluZSBpb3dyaXRlMzJiZSh2LGEpCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMigodikpLChhKSkKIAotI2RlZmluZSBpb3JlYWQ4X3JlcChhLCBkLCBjKQlyZWFkc2IoKGEpLCAoZCksIChjKSkKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsIGQsIGMpCXJlYWRzdygoYSksIChkKSwgKGMpKQotI2RlZmluZSBpb3JlYWQzMl9yZXAoYSwgZCwgYykJcmVhZHNsKChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzYigoYSksIChkKSwgKGMpKQorI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHN3KChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc2woKGEpLCAoZCksIChjKSkKIAotI2RlZmluZSBpb3dyaXRlOF9yZXAoYSwgcywgYykJd3JpdGVzYigoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKGEsIHMsIGMpCXdyaXRlc3coKGEpLCAocyksIChjKSkKLSNkZWZpbmUgaW93cml0ZTMyX3JlcChhLCBzLCBjKQl3cml0ZXNsKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXNiKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzdygoYSksIChzKSwgKGMpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2woKGEpLCAocyksIChjKSkKIAotI2RlZmluZSBtbWlvd2IoKQl3bWIoKQkvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisjZGVmaW5lIG1taW93YigpCQl3bWIoKQogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOworCiAvKgotICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhlIGdlbmVyaWMgY2FzZSB3aGVyZSBhIGJvYXJkLXNwZWNpZmljCi0gKiBpb3BvcnRfbWFwIHNpbXBseSBuZWVkcyB0byByZXR1cm4gdGhlIHBvcnQgKyBzb21lIGFyYml0cmFyeSBwb3J0IGJhc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEKKyAqIGJvYXJkLXNwZWNpZmljIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUKKyAqIGFyYml0cmFyeSBwb3J0IGJhc2UuCiAgKgogICogV2UgdXNlIHRoaXMgYXQgYm9hcmQgc2V0dXAgdGltZSB0byBpbXBsaWNpdGx5IHNldCB0aGUgcG9ydCBiYXNlLCBhbmQKICAqIGFzIGEgcmVzdWx0LCB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljIGlvcG9ydF9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pb19wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyBwYmFzZSkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7Ci0KIAlnZW5lcmljX2lvX2Jhc2UgPSBwYmFzZTsKIH0KIAogI2RlZmluZSBfX2lvcG9ydF9tYXAocCwgbikgc2hfbXYubXZfaW9wb3J0X21hcCgocCksIChuKSkKIAogLyogV2UgcmVhbGx5IHdhbnQgdG8gdHJ5IGFuZCBnZXQgdGhlc2UgdG8gbWVtY3B5IGV0YyAqLwotZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotCi0vKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY3RybF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3RybF9pbnEodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXR3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyID0gYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRxKHVuc2lnbmVkIGxvbmcgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9kZWxheSh2b2lkKQotewotI2lmZGVmIFAyU0VHCi0JY3RybF9pbncoUDJTRUcpOwotI2VuZGlmCi19Cit2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIFF1YWQtd29yZCByZWFsLW1vZGUgSS9PLCBkb24ndCBhc2suLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIHBlZWtfcmVhbF9hZGRyZXNzX3EodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwpAQCAtMzQ3LDkgKzI3MywxNSBAQAogCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIF9QQUdFX0NBQ0hBQkxFKQogI2RlZmluZSBwM19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQkJXAogCV9faW9yZW1hcCgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQorI2RlZmluZSBpb3JlbWFwX3Byb3Qob2Zmc2V0LCBzaXplLCBmbGFncykJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQogI2RlZmluZSBpb3VubWFwKGFkZHIpCQkJCQlcCiAJX19pb3VubWFwKChhZGRyKSkKIAorI2RlZmluZSBtYXliZWJhZGlvKHBvcnQpIFwKKwlwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAorCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIChwb3J0KSwgKHUzMilfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisKIC8qCiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCiAgKiBhY2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW9fZ2VuZXJpYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKaW5kZXggOTJmYzYwNy4uMWU1ZDM3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKQEAgLTMzLDEzICszMyw2IEBACiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHNsKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCi11OCBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGIpKHZvaWQgX19pb21lbSAqKTsKLXUxNiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLXUzMiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGwpKHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlYikodTgsIHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZWwpKHUzMiwgdm9pZCBfX2lvbWVtICopOwotCiB2b2lkICpJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZW1hcCkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3VubWFwKSh2b2lkICphZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggNjE5NWE1My4uZDMxOWJhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oCkBAIC00MSw2ICs0MSw5IEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKQkoaXJxKQogI2RlZmluZSBpcnFfZGVtdXgoaXJxKQkJc2hfbXYubXZfaXJxX2RlbXV4KGlycSkKIAordm9pZCBpbml0X0lSUSh2b2lkKTsKK2FzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBpcnFfY3R4X2V4aXQoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fQVNNX1NIX0tQUk9CRVNfSAorI2RlZmluZSBfX0FTTV9TSF9LUFJPQkVTX0gKKworI2lmZGVmIENPTkZJR19LUFJPQkVTCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCit0eXBlZGVmIHUxNiBrcHJvYmVfb3Bjb2RlX3Q7CisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhjMzNhCisKKyNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgorI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAorI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKSAoKChNQVhfU1RBQ0tfU0laRSkgPCBcCisJKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKSBcCisJPyAoTUFYX1NUQUNLX1NJWkUpIFwKKwk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKKworI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCisKK3N0cnVjdCBrcHJvYmU7CisKK3ZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKik7Cit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwordm9pZCBqcHJvYmVfcmV0dXJuX2VuZCh2b2lkKTsKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLworc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CisJLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbltNQVhfSU5TTl9TSVpFXTsKK307CisKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCisvKiBwZXItY3B1IGtwcm9iZSBjb250cm9sIGJsb2NrICovCitzdHJ1Y3Qga3Byb2JlX2N0bGJsayB7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNTsKKwlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKKwlrcHJvYmVfb3Bjb2RlX3QganByb2Jlc19zdGFja1tNQVhfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQga3Byb2JlX2hhbmRsZV9pbGxzbG90KHVuc2lnbmVkIGxvbmcgcGMpOworI2Vsc2UKKworI2RlZmluZSBrcHJvYmVfaGFuZGxlX2lsbHNsb3QocGMpCSgtMSkKKworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX19BU01fU0hfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGIyZTQxMjQuLmYxYmFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC00MiwxMyArNDIsNiBAQAogCXZvaWQgKCptdl9vdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAl2b2lkICgqbXZfb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLQl1OCAoKm12X3JlYWRiKSh2b2lkIF9faW9tZW0gKik7Ci0JdTE2ICgqbXZfcmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLQl1MzIgKCptdl9yZWFkbCkodm9pZCBfX2lvbWVtICopOwotCXZvaWQgKCptdl93cml0ZWIpKHU4LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIAlpbnQgKCptdl9pcnFfZGVtdXgpKGludCBpcnEpOwogCiAJdm9pZCAoKm12X2luaXRfaXJxKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyYjYzMi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pZ29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01JR09SX0gKLSNkZWZpbmUgX19BU01fU0hfTUlHT1JfSAotCi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc2gvbWlnb3IuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNyBOb2J1aGlybyBJd2FtYXRzdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0vKiBHUElPICovCi0jZGVmaW5lIFBPUlRfUEFDUiAweGE0MDUwMTAwCi0jZGVmaW5lIFBPUlRfUERDUiAweGE0MDUwMTA2Ci0jZGVmaW5lIFBPUlRfUEVDUiAweGE0MDUwMTA4Ci0jZGVmaW5lIFBPUlRfUEhDUiAweGE0MDUwMTBlCi0jZGVmaW5lIFBPUlRfUEpDUiAweGE0MDUwMTEwCi0jZGVmaW5lIFBPUlRfUEtDUiAweGE0MDUwMTEyCi0jZGVmaW5lIFBPUlRfUExDUiAweGE0MDUwMTE0Ci0jZGVmaW5lIFBPUlRfUE1DUiAweGE0MDUwMTE2Ci0jZGVmaW5lIFBPUlRfUFJDUiAweGE0MDUwMTFjCi0jZGVmaW5lIFBPUlRfUFRDUiAweGE0MDUwMTQwCi0jZGVmaW5lIFBPUlRfUFVDUiAweGE0MDUwMTQyCi0jZGVmaW5lIFBPUlRfUFZDUiAweGE0MDUwMTQ0Ci0jZGVmaW5lIFBPUlRfUFdDUiAweGE0MDUwMTQ2Ci0jZGVmaW5lIFBPUlRfUFhDUiAweGE0MDUwMTQ4Ci0jZGVmaW5lIFBPUlRfUFlDUiAweGE0MDUwMTRhCi0jZGVmaW5lIFBPUlRfUFpDUiAweGE0MDUwMTRjCi0jZGVmaW5lIFBPUlRfUEFEUiAweGE0MDUwMTIwCi0jZGVmaW5lIFBPUlRfUEhEUiAweGE0MDUwMTJlCi0jZGVmaW5lIFBPUlRfUFREUiAweGE0MDUwMTYwCi0jZGVmaW5lIFBPUlRfUFdEUiAweGE0MDUwMTY2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCi0KLSNkZWZpbmUgUE9SVF9NU0VMQ1JCIDB4YTQwNTAxODIKLQotI2RlZmluZSBQT1JUX1BTRUxBIDB4YTQwNTAxNGUKLSNkZWZpbmUgUE9SVF9QU0VMQiAweGE0MDUwMTUwCi0jZGVmaW5lIFBPUlRfUFNFTEMgMHhhNDA1MDE1MgotI2RlZmluZSBQT1JUX1BTRUxEIDB4YTQwNTAxNTQKLSNkZWZpbmUgUE9SVF9QU0VMRSAweGE0MDUwMTU2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCi0jZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKLQotI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCi0KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLQotaW50IG1pZ29yX2xjZF9xdmdhX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAotCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAyOTY5MjUzLi43ZjUzNjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTQsNiArNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDc3ZmI4YmYuLjU4NzFkNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgX19wZ3Byb3QocHRlX3ZhbCh4KSAmIFBURV9GTEFHU19NQVNLKQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNGE4ZjhiLi41MjIyMGQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNzYsNiArNzYsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFRFX1BIWVNfTUFTSwkJKFBIWVNfQUREUl9NQVNLICYgUEFHRV9NQVNLKQorI2RlZmluZSBQVEVfRkxBR1NfTUFTSwkJKH4oUFRFX1BIWVNfTUFTSykgPDwgUEFHRV9TSElGVCkKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBWTUFMTE9DX1NUQVJUCShQM1NFRykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDE1ZDlmOTIuLjY5MzM2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKQEAgLTQzLDExICs0NCw1MiBAQAogCUNQVV9TSF9OT05FCiB9OwogCisvKgorICogVExCIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCB0bGIsIHBlci1wcm9jZXNzb3IuCisgKi8KK3N0cnVjdCB0bGJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OworCisJdW5zaWduZWQgaW50IGVudHJpZXM7CisJdW5zaWduZWQgaW50IHN0ZXA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IHNoX2NwdWluZm8geworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBjdXRfbWFqb3IsIGN1dF9taW5vcjsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CisKKwlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCisJc3RydWN0IGNhY2hlX2luZm8gc2NhY2hlOwkvKiBTZWNvbmRhcnkgY2FjaGUgKi8KKworCS8qIFRMQiBpbmZvICovCisJc3RydWN0IHRsYl9pbmZvIGl0bGI7CisJc3RydWN0IHRsYl9pbmZvIGR0bGI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKworZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107CisjZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCisKIC8qIEZvcndhcmQgZGVjbCAqLwotc3RydWN0IHNoX2NwdWluZm87CitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CisKK2V4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogaW50IHZzeXNjYWxsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCAwZGFkZDc1Li5hNDZhMDIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwLDkgKzEwLDkgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyoKQEAgLTI2LDIzICsyNiw3IEBACiAjZGVmaW5lIENDTl9DVlIJCTB4ZmYwMDAwNDAKICNkZWZpbmUgQ0NOX1BSUgkJMHhmZjAwMDA0NAogCi1zdHJ1Y3Qgc2hfY3B1aW5mbyB7Ci0JdW5zaWduZWQgaW50IHR5cGU7Ci0JaW50IGN1dF9tYWpvciwgY3V0X21pbm9yOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZTsKLQotCXN0cnVjdCBjYWNoZV9pbmZvIGljYWNoZTsJLyogUHJpbWFyeSBJLWNhY2hlICovCi0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwkvKiBQcmltYXJ5IEQtY2FjaGUgKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOwotI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQotI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQorYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKTsKIAogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IuCkBAIC0xOTYsNiArMTgwLDggQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisKICNkZWZpbmUgY3B1X3NsZWVwKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzbGVlcCIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA3NzBkNTE2Li5iMGI0ODI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGNwdS9yZWdpc3RlcnMuaD4KIApAQCAtMzYsNDYgKzM1LDYgQEAKIAk6ICIxIiAoX19kdW1teSkpOyBcCiBwYzsgfSkKIAotLyoKLSAqIFRMQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBEZWZpbmVkIGZvciBib3RoIEkgYW5kIEQgdGxiLCBwZXItcHJvY2Vzc29yLgotICovCi1zdHJ1Y3QgdGxiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKLQotCXVuc2lnbmVkIGludCBlbnRyaWVzOwotCXVuc2lnbmVkIGludCBzdGVwOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLXN0cnVjdCBzaF9jcHVpbmZvIHsKLQllbnVtIGNwdV90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX2NhY2hlOwotCi0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKLQotCS8qIENhY2hlIGluZm8gKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7Ci0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwotCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsKLQotCS8qIFRMQiBpbmZvICovCi0Jc3RydWN0IHRsYl9pbmZvIGl0bGI7Ci0Jc3RydWN0IHRsYl9pbmZvIGR0bGI7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107Ci0jZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCi0jZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCi0KICNlbmRpZgogCiAvKgpAQCAtMTY5LDggKzEyOCw2IEBACiAjZGVmaW5lIElOSVRfTU1BUCBcCiB7ICZpbml0X21tLCAwLCAwLCBOVUxMLCBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgMSwgTlVMTCwgTlVMTCB9CiAKLWV4dGVybiAgc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7Ci0KICNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJXAogCS5zcAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKwlcCiAJCQkgIChsb25nKSAmaW5pdF9zdGFjaywJXApAQCAtMjY5LDYgKzIyNiw4IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+c3ApCisKICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGI4NmFlYWIuLjNhZDE4ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtODcsMTIgKzg3LDE4IEBACiAJdW5zaWduZWQgbG9uZwltb2Q7CiB9OwogCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgkvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCTE0CS8qIEZQVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUwkxNQorCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQwkJMzEJLyogZ2V0IHRoZSBFTEYgZmRwaWMgbG9hZG1hcCBhZGRyZXNzICovCiAKICNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMJMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAJMQkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgaW50ZXJwcmV0ZXIgbG9hZG1hcCAqLwogCi0jZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CisjZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CS8qIERTUCByZWdpc3RlcnMgKi8KICNkZWZpbmUJUFRSQUNFX1NFVERTUFJFR1MJNTYKICNlbmRpZgogCkBAIC0xMTcsNiArMTIzLDkgQEAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCiAJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKyNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCisJCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaAppbmRleCAxODEzZjQyLi5mN2IwMTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fUlRDX0gKICNkZWZpbmUgX0FTTV9SVENfSAogCit2b2lkIHRpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIGV4dGVybiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKik7CiBleHRlcm4gaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDU1YTJiZDMuLmQ0NTBiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMTAyZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX21vYmlsZV9sY2RjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXwotI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLWVudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLwotICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLwotICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KLSAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCi0gICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLwotICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCi0gICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KLSAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLwotICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLwotICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLwotICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KLSAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCi0gICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLwotICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KLQotZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCi0gICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCi0gICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OwotCi1lbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgewotCXVuc2lnbmVkIGxvbmcgbGRtdDJyOwotCXVuc2lnbmVkIGxvbmcgbGRtdDNyOwotfTsKLQotc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKLQl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKLQl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Ci19OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKLQl2b2lkICpib2FyZF9kYXRhOwotCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCi0JCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKLQl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7Ci0Jdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCi0JdW5zaWduZWQgbG9uZyB3aWR0aDsKLQl1bnNpZ25lZCBsb25nIGhlaWdodDsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7Ci0JaW50IGNoYW47Ci0JaW50IGJwcDsKLQlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCi0JaW50IGNsb2NrX2RpdmlkZXI7Ci0Jc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgbGNkX3NpemVfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcgYm9hcmRfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyBzeXNfYnVzX2NmZzsgLyogb25seSBmb3IgU1lTbiBJL0YgKi8KLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxkZGNrcjsKLQlpbnQgY2xvY2tfc291cmNlOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyBjaFsyXTsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFmYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXplcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKy8qIERPIE5PVCBFRElUISEgLSB0aGlzIGZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyAqICAgICAgICAgICAgICAgICBmcm9tIC5zIGZpbGUgYnkgYXdrIC1mIHMyaC5hd2sKKyAqLworLyogIFNpemUgZGVmaW5pdGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkIDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX3NpemVzX2gKKyNkZWZpbmUgX19zaXplc19oICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzE2CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMzIJCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NAkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNaXzEyOAkJCQkweDAwMDAwMDgwCisjZGVmaW5lIFNaXzI1NgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIFNaXzUxMgkJCQkweDAwMDAwMjAwCisKKyNkZWZpbmUgU1pfMUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTWl84SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1pfMTZLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNaXzMySwkJCQkweDAwMDA4MDAwCisjZGVmaW5lIFNaXzY0SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBTWl8xMjhLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgU1pfMjU2SyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFNaXzUxMksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorCisjZGVmaW5lIFNaXzFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1pfNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFNaXzhNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMjZNCQkJCTB4MDFhMDAwMDAKKyNkZWZpbmUgU1pfMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0gICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTWl8yRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmCisKKy8qICAgICAgICAgRU5EICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA1OTMzNDNjLi44NWI2NjBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIxLDI1ICsyMSwyOSBAQAogZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKICNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KIAotLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCi0jZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKK2VudW0geworCVNNUF9NU0dfRlVOQ1RJT04sCisJU01QX01TR19SRVNDSEVEVUxFLAorCVNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFLAorCVNNUF9NU0dfVElNRVIsCiAKLSNkZWZpbmUgTk9fUFJPQ19JRAkoLTEpCisJU01QX01TR19OUiwJLyogbXVzdCBiZSBsYXN0ICovCit9OwogCi0jZGVmaW5lIFNNUF9NU0dfRlVOQ1RJT04JMAotI2RlZmluZSBTTVBfTVNHX1JFU0NIRURVTEUJMQotI2RlZmluZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRQkyCi0jZGVmaW5lIFNNUF9NU0dfTlIJCTMKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKTsKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CisKK3ZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwordm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKIAogdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGludCBwbGF0X3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiB2b2lkIHBsYXRfc3RhcnRfY3B1KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpOwogdm9pZCBwbGF0X3NlbmRfaXBpKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLWludCBwbGF0X3JlZ2lzdGVyX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBtZXNzYWdlLAotCQkJICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiksIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMX0gKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJzeXNjYWxsXzY0LmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc3M2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF8zMl9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfMzJfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT50cmEgPj0gMCkgPyByZWdzLT5yZWdzWzNdIDogLTFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogWFhYOiBUaGlzIG5lZWRzIHNvbWUgdGhvdWdodC4gT24gU0ggd2UgZG9uJ3QKKwkgKiBzYXZlIGF3YXkgdGhlIG9yaWdpbmFsIHIwIHZhbHVlIGFueXdoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3lzY2FsbF9oYXNfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5zciAmIDB4MSkgPyB0cnVlIDogZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgfD0gMHgxOworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfY2xlYXJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgJj0gfjB4MTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBzeXNjYWxsX2hhc19lcnJvcihyZWdzKSA/IHJlZ3MtPnJlZ3NbMF0gOiAwOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yZWdzWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlpZiAoZXJyb3IpIHsKKwkJc3lzY2FsbF9zZXRfZXJyb3IocmVncyk7CisJCXJlZ3MtPnJlZ3NbMF0gPSAtZXJyb3I7CisJfSBlbHNlIHsKKwkJc3lzY2FsbF9jbGVhcl9lcnJvcihyZWdzKTsKKwkJcmVncy0+cmVnc1swXSA9IHZhbDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qCisJICogRG8gdGhpcyBzaW1wbHkgZm9yIG5vdy4gSWYgd2UgbmVlZCB0byBzdGFydCBzdXBwb3J0aW5nCisJICogZmV0Y2hpbmcgYXJndW1lbnRzIGZyb20gYXJiaXRyYXJ5IGluZGljZXMsIHRoaXMgd2lsbCBuZWVkIHNvbWUKKwkgKiBleHRyYSBsb2dpYy4gUHJlc2VudGx5IHRoZXJlIGFyZSBubyBpbi10cmVlIHVzZXJzIHRoYXQgZGVwZW5kCisJICogb24gdGhpcyBiZWhhdmlvdXIuCisJICovCisJQlVHX09OKGkpOworCisJLyogQXJndW1lbnQgcGF0dGVybiBpczogUjQsIFI1LCBSNiwgUjcsIFIwLCBSMSAqLworCXN3aXRjaCAobikgeworCWNhc2UgNjogYXJnc1s1XSA9IHJlZ3MtPnJlZ3NbMV07CisJY2FzZSA1OiBhcmdzWzRdID0gcmVncy0+cmVnc1swXTsKKwljYXNlIDQ6IGFyZ3NbM10gPSByZWdzLT5yZWdzWzddOworCWNhc2UgMzogYXJnc1syXSA9IHJlZ3MtPnJlZ3NbNl07CisJY2FzZSAyOiBhcmdzWzFdID0gcmVncy0+cmVnc1s1XTsKKwljYXNlIDE6CWFyZ3NbMF0gPSByZWdzLT5yZWdzWzRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qIFNhbWUgbm90ZSBhcyBhYm92ZSBhcHBsaWVzICovCisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OiByZWdzLT5yZWdzWzFdID0gYXJnc1s1XTsKKwljYXNlIDU6IHJlZ3MtPnJlZ3NbMF0gPSBhcmdzWzRdOworCWNhc2UgNDogcmVncy0+cmVnc1s3XSA9IGFyZ3NbM107CisJY2FzZSAzOiByZWdzLT5yZWdzWzZdID0gYXJnc1syXTsKKwljYXNlIDI6IHJlZ3MtPnJlZ3NbNV0gPSBhcmdzWzFdOworCWNhc2UgMTogcmVncy0+cmVnc1s0XSA9IGFyZ3NbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYThjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfNjRfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMXzY0X0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N5c2NhbGwuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMU19ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IG9sZF91dHNuYW1lOworCithc21saW5rYWdlIGludCBvbGRfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50IGZkLCB1bnNpZ25lZCBsb25nIG9mZik7Cithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAorCQkgICAgICAgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKK2FzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsc18zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic3lzY2FsbHNfNjQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRjNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc18zMi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTFNfMzJfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMU18zMl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfdGlkcHRyLAorCQkJIHVuc2lnbmVkIGxvbmcgY2hpbGRfdGlkcHRyLAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICp1ZmlsZW5hbWUsIGNoYXIgX191c2VyICogX191c2VyICp1YXJndiwKKwkJCSAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQob2xkX3NpZ3NldF90IG1hc2ssIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCk7Cithc21saW5rYWdlIGludCBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2UgaW50IHN5c19mYWR2aXNlNjRfNjRfd3JhcHBlcihpbnQgZmQsIHUzMiBvZmZzZXQwLCB1MzIgb2Zmc2V0MSwKKwkJCQkJdTMyIGxlbjAsIHUzMiBsZW4xLCBpbnQgYWR2aWNlKTsKKworLyogTWlzYyBzeXNjYWxsIHJlbGF0ZWQgYml0cyAqLworYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzYXZlX3IwLAorCQkJCSB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfNjQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExTXzY0X0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTFNfNjRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsCisJCQl1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzICpwcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKwkJCSB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayh1bnNpZ25lZCBsb25nIHIyLCB1bnNpZ25lZCBsb25nIHIzLAorCQkJIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICp1ZmlsZW5hbWUsIGNoYXIgKip1YXJndiwKKwkJCSAgY2hhciAqKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworCisvKiBNaXNjIHN5c2NhbGwgcmVsYXRlZCBiaXRzICovCithc21saW5rYWdlIGxvbmcgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNTZkNjhjLi42MTYwZmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTcwLDYgKzcwLDggQEAKIAogI2lmZGVmIENPTkZJR19HVVNBX1JCCiAjaW5jbHVkZSA8YXNtL2NtcHhjaGctZ3JiLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKyNpbmNsdWRlIDxhc20vY21weGNoZy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLWlycS5oPgogI2VuZGlmCkBAIC0xMjUsNiArMTI3LDggQEAKICAgfSkKIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcik7CiAKQEAgLTE3Nyw4ICsxODEsOCBAQAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCiBzdHJ1Y3QgbWVtX2FjY2VzcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmZyb20pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNudCk7Ci0JdW5zaWduZWQgbG9uZyAoKnRvKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOworCXVuc2lnbmVkIGxvbmcgKCpmcm9tKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKKwl1bnNpZ25lZCBsb25nICgqdG8pKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggZjExYmNmMC4uYTcyNmQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC01OCw3ICs1OCw4IEBACiAJbGFzdCA9IF9fbGFzdDsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKKyNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXAorCW5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi51bmNhY2hlZC50ZXh0IikpKQogCiAvKgogICogSnVtcCB0byB1bmNhY2hlZCBhcmVhLgpAQCAtOTYsNyArOTcsNDggQEAKIAkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKIH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgorI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfdmVjOwkJXAorCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkic3RjIHIyX2JhbmssICUwXG5cdCIJXAorCQk6ICI9ciIgKF92ZWMpCQlcCisJKTsJCQkJXAorCQkJCQlcCisJX3ZlYzsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF92ZWM7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkibW92IHI0LCAlMFxuXHQiCVwKKwkJOiAiPXIiIChfdmVjKQkJXAorCSk7CQkJCVwKKwkJCQkJXAorCV92ZWM7CQkJCVwKK30pCisjZW5kaWYKKwogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKG9wY29kZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEpOwogCithc21saW5rYWdlIHZvaWQgZG9fYWRkcmVzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fcmVzZXJ2ZWRfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19pbGxlZ2FsX3Nsb3RfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9TWVNURU1fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBhODk0Y2EuLmYwOWFjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMzLDIwICszMywxMiBAQAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfNEtTVEFDS1MpCi0jZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzRLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV8xNktCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV82NEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKKyNkZWZpbmUgVEhSRUFEX1NISUZUCTEyCiAjZWxzZQotI2Vycm9yICJVbmtub3duIHRocmVhZCBzaXplIgorI2RlZmluZSBUSFJFQURfU0hJRlQJMTMKICNlbmRpZgogCi0jZGVmaW5lIFRIUkVBRF9TSVpFCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSVpFCSgxIDw8IFRIUkVBRF9TSElGVCkKICNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUgPj4gMykKIAogLyoKQEAgLTk0LDE1ICs4NiwxOSBAQAogCXJldHVybiB0aTsKIH0KIAorLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZiBUSFJFQURfU0hJRlQgPj0gUEFHRV9TSElGVAorCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZWxzZSAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQotI2Vsc2UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odGkpCWttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCi0jZW5kaWYKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJa2ZyZWUodGkpCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworIAorI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDU1ODBmZDQuLjU2ZmQyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yNiwxNiArMjYsMjAgQEAKIAlyZXR2YWwgPSAwOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fYigodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fdyh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV93KCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9sKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2woKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fcSgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCVwKIAkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCVwKQEAgLTU0LDE2ICs1OCwyMCBAQAogCXJldHZhbCA9IDA7CQkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fYih4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9iKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3coKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2woeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fbCgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fcSh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9xKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJXAogCQlfX3B1dF91c2VyX3Vua25vd24oKTsJCQkJXApAQCAtNzcsNSArODUsNyBAQAogZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl91bmtub3duKHZvaWQpOwogCiBleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyICpfX3MsIGxvbmcgX19uKTsKK2V4dGVybiBpbnQgX19zdHJuY3B5X2Zyb21fdXNlcih1bnNpZ25lZCBsb25nIF9fZGVzdCwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgX19zcmMsIGludCBfX2NvdW50KTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1VBQ0NFU1NfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDJhL2NwdS9zaDcyMDMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKQEAgLTAsMCArMSwxNDMgQEAKKyNpZm5kZWYgX19BU01fU0g3MjAzX0hfXworI2RlZmluZSBfX0FTTV9TSDcyMDNfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEIxMiwKKwlHUElPX1BCMTEsIEdQSU9fUEIxMCwgR1BJT19QQjksIEdQSU9fUEI4LAorCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDMTQsIEdQSU9fUEMxMywgR1BJT19QQzEyLAorCUdQSU9fUEMxMSwgR1BJT19QQzEwLCBHUElPX1BDOSwgR1BJT19QQzgsCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQxNSwgR1BJT19QRDE0LCBHUElPX1BEMTMsIEdQSU9fUEQxMiwKKwlHUElPX1BEMTEsIEdQSU9fUEQxMCwgR1BJT19QRDksIEdQSU9fUEQ4LAorCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFMTUsIEdQSU9fUEUxNCwgR1BJT19QRTEzLCBHUElPX1BFMTIsCisJR1BJT19QRTExLCBHUElPX1BFMTAsIEdQSU9fUEU5LCBHUElPX1BFOCwKKwlHUElPX1BFNywgR1BJT19QRTYsIEdQSU9fUEU1LCBHUElPX1BFNCwKKwlHUElPX1BFMywgR1BJT19QRTIsIEdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjMwLCBHUElPX1BGMjksIEdQSU9fUEYyOCwKKwlHUElPX1BGMjcsIEdQSU9fUEYyNiwgR1BJT19QRjI1LCBHUElPX1BGMjQsCisJR1BJT19QRjIzLCBHUElPX1BGMjIsIEdQSU9fUEYyMSwgR1BJT19QRjIwLAorCUdQSU9fUEYxOSwgR1BJT19QRjE4LCBHUElPX1BGMTcsIEdQSU9fUEYxNiwKKwlHUElPX1BGMTUsIEdQSU9fUEYxNCwgR1BJT19QRjEzLCBHUElPX1BGMTIsCisJR1BJT19QRjExLCBHUElPX1BGMTAsIEdQSU9fUEY5LCBHUElPX1BGOCwKKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIElOVEM6IElSUSBhbmQgUElOVCBvbiBQQi9QRC9QRSAqLworCUdQSU9fRk5fUElOVDdfUEIsIEdQSU9fRk5fUElOVDZfUEIsIEdQSU9fRk5fUElOVDVfUEIsIEdQSU9fRk5fUElOVDRfUEIsCisJR1BJT19GTl9QSU5UM19QQiwgR1BJT19GTl9QSU5UMl9QQiwgR1BJT19GTl9QSU5UMV9QQiwgR1BJT19GTl9QSU5UMF9QQiwKKwlHUElPX0ZOX1BJTlQ3X1BELCBHUElPX0ZOX1BJTlQ2X1BELCBHUElPX0ZOX1BJTlQ1X1BELCBHUElPX0ZOX1BJTlQ0X1BELAorCUdQSU9fRk5fUElOVDNfUEQsIEdQSU9fRk5fUElOVDJfUEQsIEdQSU9fRk5fUElOVDFfUEQsIEdQSU9fRk5fUElOVDBfUEQsCisJR1BJT19GTl9JUlE3X1BCLCBHUElPX0ZOX0lSUTZfUEIsIEdQSU9fRk5fSVJRNV9QQiwgR1BJT19GTl9JUlE0X1BCLAorCUdQSU9fRk5fSVJRM19QQiwgR1BJT19GTl9JUlEyX1BCLCBHUElPX0ZOX0lSUTFfUEIsIEdQSU9fRk5fSVJRMF9QQiwKKwlHUElPX0ZOX0lSUTdfUEQsIEdQSU9fRk5fSVJRNl9QRCwgR1BJT19GTl9JUlE1X1BELCBHUElPX0ZOX0lSUTRfUEQsCisJR1BJT19GTl9JUlEzX1BELCBHUElPX0ZOX0lSUTJfUEQsIEdQSU9fRk5fSVJRMV9QRCwgR1BJT19GTl9JUlEwX1BELAorCUdQSU9fRk5fSVJRN19QRSwgR1BJT19GTl9JUlE2X1BFLCBHUElPX0ZOX0lSUTVfUEUsIEdQSU9fRk5fSVJRNF9QRSwKKwlHUElPX0ZOX0lSUTNfUEUsIEdQSU9fRk5fSVJRMl9QRSwgR1BJT19GTl9JUlExX1BFLCBHUElPX0ZOX0lSUTBfUEUsCisKKwlHUElPX0ZOX1dEVE9WRiwgR1BJT19GTl9JUlFPVVQsIEdQSU9fRk5fUkVGT1VULCBHUElPX0ZOX0lSUU9VVF9SRUZPVVQsCisJR1BJT19GTl9VQkNUUkcsCisKKwkvKiBDQU4gKi8KKwlHUElPX0ZOX0NUWDEsIEdQSU9fRk5fQ1JYMSwgR1BJT19GTl9DVFgwLCBHUElPX0ZOX0NUWDBfQ1RYMSwKKwlHUElPX0ZOX0NSWDAsIEdQSU9fRk5fQ1JYMF9DUlgxLAorCisJLyogSUlDMyAqLworCUdQSU9fRk5fU0RBMywgR1BJT19GTl9TQ0wzLAorCUdQSU9fRk5fU0RBMiwgR1BJT19GTl9TQ0wyLAorCUdQSU9fRk5fU0RBMSwgR1BJT19GTl9TQ0wxLAorCUdQSU9fRk5fU0RBMCwgR1BJT19GTl9TQ0wwLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fVEVORDBfUEQsIEdQSU9fRk5fVEVORDBfUEUsIEdQSU9fRk5fREFDSzBfUEQsCisJR1BJT19GTl9EQUNLMF9QRSwgR1BJT19GTl9EUkVRMF9QRCwgR1BJT19GTl9EUkVRMF9QRSwKKwlHUElPX0ZOX1RFTkQxX1BELCBHUElPX0ZOX1RFTkQxX1BFLCBHUElPX0ZOX0RBQ0sxX1BELAorCUdQSU9fRk5fREFDSzFfUEUsIEdQSU9fRk5fRFJFUTFfUEQsIEdQSU9fRk5fRFJFUTFfUEUsCisJR1BJT19GTl9EQUNLMiwgR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX0RBQ0szLCBHUElPX0ZOX0RSRVEzLAorCisJLyogQURDICovCisJR1BJT19GTl9BRFRSR19QRCwgR1BJT19GTl9BRFRSR19QRSwKKworCS8qIEJTQyAqLworCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0QzMCwgR1BJT19GTl9EMjksIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRDI3LCBHUElPX0ZOX0QyNiwgR1BJT19GTl9EMjUsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fRDIzLCBHUElPX0ZOX0QyMiwgR1BJT19GTl9EMjEsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRDE5LCBHUElPX0ZOX0QxOCwgR1BJT19GTl9EMTcsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQTIxLCBHUElPX0ZOX0NTNCwgR1BJT19GTl9NUkVTLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fSU9JUzE2LCBHUElPX0ZOX0NTMSwgR1BJT19GTl9DUzZfQ0UxQiwKKwlHUElPX0ZOX0NFMkIsIEdQSU9fRk5fQ1M1X0NFMUEsIEdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX0ZSQU1FLCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fUkRXUiwKKwlHUElPX0ZOX0NLRSwgR1BJT19GTl9DQVNVLCBHUElPX0ZOX0JSRVEsIEdQSU9fRk5fUkFTVSwKKwlHUElPX0ZOX0JBQ0ssIEdQSU9fRk5fQ0FTTCwgR1BJT19GTl9SQVNMLAorCUdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwKKwlHUElPX0ZOX1dFMV9EUU1MVV9XRSwgR1BJT19GTl9XRTBfRFFNTEwsCisJR1BJT19GTl9DUzMsIEdQSU9fRk5fQ1MyLCBHUElPX0ZOX0ExLCBHUElPX0ZOX0EwLCBHUElPX0ZOX0NTNywKKworCS8qIFRNVSAqLworCUdQSU9fRk5fVElPQzRELCBHUElPX0ZOX1RJT0M0QywgR1BJT19GTl9USU9DNEIsIEdQSU9fRk5fVElPQzRBLAorCUdQSU9fRk5fVElPQzNELCBHUElPX0ZOX1RJT0MzQywgR1BJT19GTl9USU9DM0IsIEdQSU9fRk5fVElPQzNBLAorCUdQSU9fRk5fVElPQzJCLCBHUElPX0ZOX1RJT0MxQiwgR1BJT19GTl9USU9DMkEsIEdQSU9fRk5fVElPQzFBLAorCUdQSU9fRk5fVElPQzBELCBHUElPX0ZOX1RJT0MwQywgR1BJT19GTl9USU9DMEIsIEdQSU9fRk5fVElPQzBBLAorCUdQSU9fRk5fVENMS0RfUEQsIEdQSU9fRk5fVENMS0NfUEQsIEdQSU9fRk5fVENMS0JfUEQsIEdQSU9fRk5fVENMS0FfUEQsCisJR1BJT19GTl9UQ0xLRF9QRiwgR1BJT19GTl9UQ0xLQ19QRiwgR1BJT19GTl9UQ0xLQl9QRiwgR1BJT19GTl9UQ0xLQV9QRiwKKworCS8qIFNTVSAqLworCUdQSU9fRk5fU0NTMF9QRCwgR1BJT19GTl9TU08wX1BELCBHUElPX0ZOX1NTSTBfUEQsIEdQSU9fRk5fU1NDSzBfUEQsCisJR1BJT19GTl9TQ1MwX1BGLCBHUElPX0ZOX1NTTzBfUEYsIEdQSU9fRk5fU1NJMF9QRiwgR1BJT19GTl9TU0NLMF9QRiwKKwlHUElPX0ZOX1NDUzFfUEQsIEdQSU9fRk5fU1NPMV9QRCwgR1BJT19GTl9TU0kxX1BELCBHUElPX0ZOX1NTQ0sxX1BELAorCUdQSU9fRk5fU0NTMV9QRiwgR1BJT19GTl9TU08xX1BGLCBHUElPX0ZOX1NTSTFfUEYsIEdQSU9fRk5fU1NDSzFfUEYsCisKKwkvKiBTQ0lGICovCisJR1BJT19GTl9UWEQwLCBHUElPX0ZOX1JYRDAsIEdQSU9fRk5fU0NLMCwKKwlHUElPX0ZOX1RYRDEsIEdQSU9fRk5fUlhEMSwgR1BJT19GTl9TQ0sxLAorCUdQSU9fRk5fVFhEMiwgR1BJT19GTl9SWEQyLCBHUElPX0ZOX1NDSzIsCisJR1BJT19GTl9SVFMzLCBHUElPX0ZOX0NUUzMsIEdQSU9fRk5fVFhEMywgR1BJT19GTl9SWEQzLCBHUElPX0ZOX1NDSzMsCisKKwkvKiBTU0kgKi8KKwlHUElPX0ZOX0FVRElPX0NMSywKKwlHUElPX0ZOX1NTSURBVEEzLCBHUElPX0ZOX1NTSVdTMywgR1BJT19GTl9TU0lTQ0szLAorCUdQSU9fRk5fU1NJREFUQTIsIEdQSU9fRk5fU1NJV1MyLCBHUElPX0ZOX1NTSVNDSzIsCisJR1BJT19GTl9TU0lEQVRBMSwgR1BJT19GTl9TU0lXUzEsIEdQSU9fRk5fU1NJU0NLMSwKKwlHUElPX0ZOX1NTSURBVEEwLCBHUElPX0ZOX1NTSVdTMCwgR1BJT19GTl9TU0lTQ0swLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9GUkIsCisJR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwKKwlHUElPX0ZOX0ZTQywgR1BJT19GTl9GT0UsIEdQSU9fRk5fRkNERSwgR1BJT19GTl9GV0UsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCUdQSU9fRk5fTENEX0NMSywgR1BJT19GTl9MQ0RfRkxNLAorCUdQSU9fRk5fTENEX01fRElTUCwgR1BJT19GTl9MQ0RfQ0wyLAorCUdQSU9fRk5fTENEX0NMMSwgR1BJT19GTl9MQ0RfRE9OLAorCUdQSU9fRk5fTENEX0RBVEExNSwgR1BJT19GTl9MQ0RfREFUQTE0LAorCUdQSU9fRk5fTENEX0RBVEExMywgR1BJT19GTl9MQ0RfREFUQTEyLAorCUdQSU9fRk5fTENEX0RBVEExMSwgR1BJT19GTl9MQ0RfREFUQTEwLAorCUdQSU9fRk5fTENEX0RBVEE5LCBHUElPX0ZOX0xDRF9EQVRBOCwKKwlHUElPX0ZOX0xDRF9EQVRBNywgR1BJT19GTl9MQ0RfREFUQTYsCisJR1BJT19GTl9MQ0RfREFUQTUsIEdQSU9fRk5fTENEX0RBVEE0LAorCUdQSU9fRk5fTENEX0RBVEEzLCBHUElPX0ZOX0xDRF9EQVRBMiwKKwlHUElPX0ZOX0xDRF9EQVRBMSwgR1BJT19GTl9MQ0RfREFUQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3MjAzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvc2g3NzIwLmgKQEAgLTAsMCArMSwxNzQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIwX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjBfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTYsIEdQSU9fUFRFNSwgR1BJT19QVEU0LCBHUElPX1BURTMsCisJR1BJT19QVEUyLCBHUElPX1BURTEsIEdQSU9fUFRFMCwKKworCS8qIFBURiAqLworCUdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsIEdQSU9fUFRGMywKKwlHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLCBHUElPX1BURzYsCisKKwkvKiBQVEcgKi8KKwlHUElPX1BURzUsIEdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsCisJR1BJT19QVEcxLCBHUElPX1BURzAsCisKKwkvKiBQVEggKi8KKwlHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LCBHUElPX1BUSDMsCisJR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNiwgR1BJT19QVEo1LCBHUElPX1BUSjQsIEdQSU9fUFRKMywKKwlHUElPX1BUSjIsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEszLCBHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LCBHUElPX1BUTDMsCisKKwkvKiBQVE0gKi8KKwlHUElPX1BUTTcsIEdQSU9fUFRNNiwgR1BJT19QVE01LCBHUElPX1BUTTQsCisJR1BJT19QVE0zLCBHUElPX1BUTTIsIEdQSU9fUFRNMSwgR1BJT19QVE0wLAorCisJLyogUFRQICovCisJR1BJT19QVFA0LCBHUElPX1BUUDMsIEdQSU9fUFRQMiwgR1BJT19QVFAxLCBHUElPX1BUUDAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM0LCBHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDQsIEdQSU9fUFRUMywgR1BJT19QVFQyLCBHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsIEdQSU9fUFRVMSwgR1BJT19QVFUwLAorCisJLyogUFRWICovCisJR1BJT19QVFY0LCBHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0QzMSwgR1BJT19GTl9EMzAsIEdQSU9fRk5fRDI5LCBHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9EMjYsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9EMjIsIEdQSU9fRk5fRDIxLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwgR1BJT19GTl9EMTgsIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9SQVMsIEdQSU9fRk5fQ0FTLCBHUElPX0ZOX0NLRSwKKwlHUElPX0ZOX0NTNUJfQ0UxQSwgR1BJT19GTl9DUzZCX0NFMUIsCisJR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9BMjEsIEdQSU9fRk5fQTIwLCBHUElPX0ZOX0ExOSwgR1BJT19GTl9BMCwKKwlHUElPX0ZOX1JFRk9VVCwgR1BJT19GTl9JUlFPVVQsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfREFUQTE1LCBHUElPX0ZOX0xDRF9EQVRBMTQsCisJR1BJT19GTl9MQ0RfREFUQTEzLCBHUElPX0ZOX0xDRF9EQVRBMTIsCisJR1BJT19GTl9MQ0RfREFUQTExLCBHUElPX0ZOX0xDRF9EQVRBMTAsCisJR1BJT19GTl9MQ0RfREFUQTksIEdQSU9fRk5fTENEX0RBVEE4LAorCUdQSU9fRk5fTENEX0RBVEE3LCBHUElPX0ZOX0xDRF9EQVRBNiwKKwlHUElPX0ZOX0xDRF9EQVRBNSwgR1BJT19GTl9MQ0RfREFUQTQsCisJR1BJT19GTl9MQ0RfREFUQTMsIEdQSU9fRk5fTENEX0RBVEEyLAorCUdQSU9fRk5fTENEX0RBVEExLCBHUElPX0ZOX0xDRF9EQVRBMCwKKwlHUElPX0ZOX0xDRF9NX0RJU1AsCisJR1BJT19GTl9MQ0RfQ0wxLCBHUElPX0ZOX0xDRF9DTDIsCisJR1BJT19GTl9MQ0RfRE9OLCBHUElPX0ZOX0xDRF9GTE0sCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCisJLyogQUZFSUYgKi8KKwlHUElPX0ZOX0FGRV9SWElOLCBHUElPX0ZOX0FGRV9SREVULAorCUdQSU9fRk5fQUZFX0ZTLCBHUElPX0ZOX0FGRV9UWE9VVCwKKwlHUElPX0ZOX0FGRV9TQ0xLLCBHUElPX0ZOX0FGRV9STFlDTlQsCisJR1BJT19GTl9BRkVfSEMxLAorCisJLyogSUlDICovCisJR1BJT19GTl9JSUNfU0NMLCBHUElPX0ZOX0lJQ19TREEsCisKKwkvKiBEQUMgKi8KKwlHUElPX0ZOX0RBMSwgR1BJT19GTl9EQTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCMURfUkNWLCBHUElPX0ZOX1VTQjFEX1RYU0UwLAorCUdQSU9fRk5fVVNCMURfVFhEUExTLCBHUElPX0ZOX1VTQjFEX0RNTlMsCisJR1BJT19GTl9VU0IxRF9EUExTLCBHUElPX0ZOX1VTQjFEX1NQRUVELAorCUdQSU9fRk5fVVNCMURfVFhFTkwsIEdQSU9fRk5fVVNCMl9QV1JfRU4sCisJR1BJT19GTl9VU0IxX1BXUl9FTl9VU0JGX1VQTFVQLCBHUElPX0ZOX1VTQjFEX1NVU1BFTkQsCisKKwkvKiBJTlRDICovCisJR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTQsCisJR1BJT19GTl9JUlEzX0lSTDMsIEdQSU9fRk5fSVJRMl9JUkwyLAorCUdQSU9fRk5fSVJRMV9JUkwxLCBHUElPX0ZOX0lSUTBfSVJMMCwKKworCS8qIFBDQyAqLworCUdQSU9fRk5fUENDX1JFRywgR1BJT19GTl9QQ0NfRFJWLAorCUdQSU9fRk5fUENDX0JWRDIsIEdQSU9fRk5fUENDX0JWRDEsCisJR1BJT19GTl9QQ0NfQ0QyLCBHUElPX0ZOX1BDQ19DRDEsCisJR1BJT19GTl9QQ0NfUkVTRVQsIEdQSU9fRk5fUENDX1JEWSwKKwlHUElPX0ZOX1BDQ19WUzIsIEdQSU9fRk5fUENDX1ZTMSwKKworCS8qIEhVREkgKi8KKwlHUElPX0ZOX0FVREFUQTMsIEdQSU9fRk5fQVVEQVRBMiwgR1BJT19GTl9BVURBVEExLCBHUElPX0ZOX0FVREFUQTAsCisJR1BJT19GTl9BVURDSywgR1BJT19GTl9BVURTWU5DLCBHUElPX0ZOX0FTRUJSS0FLLCBHUElPX0ZOX1RSU1QsCisJR1BJT19GTl9UTVMsIEdQSU9fRk5fVERPLCBHUElPX0ZOX1RESSwgR1BJT19GTl9UQ0ssCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMSwgR1BJT19GTl9EUkVRMSwgR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1RFTkQxLCBHUElPX0ZOX1RFTkQwLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX1NZTkMsIEdQSU9fRk5fU0lPRjBfTUNMSywKKwlHUElPX0ZOX1NJT0YwX1RYRCwgR1BJT19GTl9TSU9GMF9SWEQsCisJR1BJT19GTl9TSU9GMF9TQ0ssCisKKwkvKiBTSU9GMSAqLworCUdQSU9fRk5fU0lPRjFfU1lOQywgR1BJT19GTl9TSU9GMV9NQ0xLLAorCUdQSU9fRk5fU0lPRjFfVFhELCBHUElPX0ZOX1NJT0YxX1JYRCwKKwlHUElPX0ZOX1NJT0YxX1NDSywKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogVFBVICovCisJR1BJT19GTl9UUFVfVE8xLCBHUElPX0ZOX1RQVV9UTzAsCisJR1BJT19GTl9UUFVfVEkzQiwgR1BJT19GTl9UUFVfVEkzQSwKKwlHUElPX0ZOX1RQVV9USTJCLCBHUElPX0ZOX1RQVV9USTJBLAorCUdQSU9fRk5fVFBVX1RPMywgR1BJT19GTl9UUFVfVE8yLAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBNTUMgKi8KKwlHUElPX0ZOX01NQ19EQVQsIEdQSU9fRk5fTU1DX0NNRCwKKwlHUElPX0ZOX01NQ19DTEssIEdQSU9fRk5fTU1DX1ZERE9OLAorCUdQSU9fRk5fTU1DX09ETU9ELAorCisJLyogU1lTQyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9TVEFUVVMxLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyMF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjMwOTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCkBAIC0wLDAgKzEsMjEwIEBACisjaWZuZGVmIF9fQVNNX1NINzcyMl9IX18KKyNkZWZpbmUgX19BU01fU0g3NzIyX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM1LCBHUElPX1BUQzQsIEdQSU9fUFRDMywKKwlHUElPX1BUQzIsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTcsIEdQSU9fUFRFNiwgR1BJT19QVEU1LCBHUElPX1BURTQsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LCBHUElPX1BURjMsCisJR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwKKworCS8qIFBURyAqLworCUdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsIEdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo2LCBHUElPX1BUSjUsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwgR1BJT19QVEszLAorCUdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTcsIEdQSU9fUFRRNiwgR1BJT19QVFE1LCBHUElPX1BUUTQsCisJR1BJT19QVFEzLCBHUElPX1BUUTIsIEdQSU9fUFRRMSwgR1BJT19QVFEwLAorCisJLyogUFRSICovCisJR1BJT19QVFI0LCBHUElPX1BUUjMsIEdQSU9fUFRSMiwgR1BJT19QVFIxLCBHUElPX1BUUjAsCisKKwkvKiBQVFMgKi8KKwlHUElPX1BUUzQsIEdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNCwgR1BJT19QVFQzLCBHUElPX1BUVDIsIEdQSU9fUFRUMSwgR1BJT19QVFQwLAorCisJLyogUFRVICovCisJR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwgR1BJT19QVFUxLCBHUElPX1BUVTAsCisKKwkvKiBQVFYgKi8KKwlHUElPX1BUVjQsIEdQSU9fUFRWMywgR1BJT19QVFYyLCBHUElPX1BUVjEsIEdQSU9fUFRWMCwKKworCS8qIFBUVyAqLworCUdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsIEdQSU9fUFRXMywKKwlHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg2LCBHUElPX1BUWDUsIEdQSU9fUFRYNCwgR1BJT19QVFgzLAorCUdQSU9fUFRYMiwgR1BJT19QVFgxLCBHUElPX1BUWDAsCisKKwkvKiBQVFkgKi8KKwlHUElPX1BUWTUsIEdQSU9fUFRZNCwgR1BJT19QVFkzLCBHUElPX1BUWTIsCisJR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjUsIEdQSU9fUFRaNCwgR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogU0NJRjIgKi8KKwlHUElPX0ZOX1NDSUYyX1RYRCwgR1BJT19GTl9TQ0lGMl9SWEQsCisJR1BJT19GTl9TQ0lGMl9SVFMsIEdQSU9fRk5fU0NJRjJfQ1RTLCBHUElPX0ZOX1NDSUYyX1NDSywKKworCS8qIFNJTyAqLworCUdQSU9fRk5fU0lPVFhELCBHUElPX0ZOX1NJT1JYRCwKKwlHUElPX0ZOX1NJT0QsIEdQSU9fRk5fU0lPU1RSQjAsIEdQSU9fRk5fU0lPU1RSQjEsCisJR1BJT19GTl9TSU9TQ0ssIEdQSU9fRk5fU0lPTUNLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sIEdQSU9fRk5fVklPX1NURVgsIEdQSU9fRk5fVklPX1NURU0sCisJR1BJT19GTl9WSU9fVkQsIEdQSU9fRk5fVklPX0hELCBHUElPX0ZOX1ZJT19DTEssCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEssCisJLyogTWFpbiBMQ0QgKi8KKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RWQ1BXQywgR1BJT19GTl9MQ0RWRVBXQywgR1BJT19GTl9MQ0RWU1lOLAorCS8qIE1haW4gTENEIC0gUkdCIE1vZGUgKi8KKwlHUElPX0ZOX0xDRERDSywgR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRERJU1AsCisJLyogTWFpbiBMQ0QgLSBTWVMgTW9kZSAqLworCUdQSU9fRk5fTENEUlMsIEdQSU9fRk5fTENEQ1MsIEdQSU9fRk5fTENEV1IsIEdQSU9fRk5fTENEUkQsCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0xDRFZDUFdDMiwgR1BJT19GTl9MQ0RWRVBXQzIsCisJR1BJT19GTl9MQ0RWU1lOMiwgR1BJT19GTl9MQ0RDUzIsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9CUywgR1BJT19GTl9DUzZCX0NFMUIsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9DUzZBX0NFMkIsCisKKwkvKiBTQlNDICovCisJR1BJT19GTl9IUEQ2MywgR1BJT19GTl9IUEQ2MiwgR1BJT19GTl9IUEQ2MSwgR1BJT19GTl9IUEQ2MCwKKwlHUElPX0ZOX0hQRDU5LCBHUElPX0ZOX0hQRDU4LCBHUElPX0ZOX0hQRDU3LCBHUElPX0ZOX0hQRDU2LAorCUdQSU9fRk5fSFBENTUsIEdQSU9fRk5fSFBENTQsIEdQSU9fRk5fSFBENTMsIEdQSU9fRk5fSFBENTIsCisJR1BJT19GTl9IUEQ1MSwgR1BJT19GTl9IUEQ1MCwgR1BJT19GTl9IUEQ0OSwgR1BJT19GTl9IUEQ0OCwKKwlHUElPX0ZOX0hQRFFNNywgR1BJT19GTl9IUERRTTYsIEdQSU9fRk5fSFBEUU01LCBHUElPX0ZOX0hQRFFNNCwKKworCS8qIElSUSAqLworCUdQSU9fRk5fSVJRMCwgR1BJT19GTl9JUlExLCBHUElPX0ZOX0lSUTIsIEdQSU9fRk5fSVJRMywKKwlHUElPX0ZOX0lSUTQsIEdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE2LCBHUElPX0ZOX0lSUTcsCisKKwkvKiBTREhJICovCisJR1BJT19GTl9TREhJQ0QsIEdQSU9fRk5fU0RISVdQLCBHUElPX0ZOX1NESElEMywgR1BJT19GTl9TREhJRDIsCisJR1BJT19GTl9TREhJRDEsIEdQSU9fRk5fU0RISUQwLCBHUElPX0ZOX1NESElDTUQsIEdQSU9fRk5fU0RISUNMSywKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCUdQSU9fRk5fU0lVQU9MUiwgR1BJT19GTl9TSVVBT0JULCBHUElPX0ZOX1NJVUFJU0xELCBHUElPX0ZOX1NJVUFJTFIsCisJR1BJT19GTl9TSVVBSUJULCBHUElPX0ZOX1NJVUFPU0xELCBHUElPX0ZOX1NJVU1DS0EsIEdQSU9fRk5fU0lVRkNLQSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJJU0xELCBHUElPX0ZOX1NJVUJJTFIsCisJR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVU1DS0IsIEdQSU9fRk5fU0lVRkNLQiwKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEU1lOQywgR1BJT19GTl9BVURBVEEzLCBHUElPX0ZOX0FVREFUQTIsIEdQSU9fRk5fQVVEQVRBMSwKKwlHUElPX0ZOX0FVREFUQTAsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLLCBHUElPX0ZOX0RSRVEwLAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogQ1BHICovCisJR1BJT19GTl9TVEFUVVMwLCBHUElPX0ZOX1BEU1RBVFVTLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX01DSywgR1BJT19GTl9TSU9GMF9TQ0ssCisJR1BJT19GTl9TSU9GMF9TWU5DLCBHUElPX0ZOX1NJT0YwX1NTMSwgR1BJT19GTl9TSU9GMF9TUzIsCisJR1BJT19GTl9TSU9GMF9UWEQsIEdQSU9fRk5fU0lPRjBfUlhELAorCisJLyogU0lPRjEgKi8KKwlHUElPX0ZOX1NJT0YxX01DSywgR1BJT19GTl9TSU9GMV9TQ0ssCisJR1BJT19GTl9TSU9GMV9TWU5DLCBHUElPX0ZOX1NJT0YxX1NTMSwgR1BJT19GTl9TSU9GMV9TUzIsCisJR1BJT19GTl9TSU9GMV9UWEQsIEdQSU9fRk5fU0lPRjFfUlhELAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBUU0lGICovCisJR1BJT19GTl9UU19TREFULCBHUElPX0ZOX1RTX1NDSywgR1BJT19GTl9UU19TREVOLCBHUElPX0ZOX1RTX1NQU1lOQywKKworCS8qIElSREEgKi8KKwlHUElPX0ZOX0lSREFfSU4sIEdQSU9fRk5fSVJEQV9PVVQsCisKKwkvKiBUUFUgKi8KKwlHUElPX0ZOX1RQVVRPLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmY2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIzLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIzX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjNfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTUsIEdQSU9fUFRFNCwgR1BJT19QVEUzLCBHUElPX1BURTIsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjcsIEdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsCisJR1BJT19QVEYzLCBHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLAorCisJLyogUFRHICovCisJR1BJT19QVEc1LCBHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLAorCUdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo1LCBHUElPX1BUSjMsIEdQSU9fUFRKMiwKKwlHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLNywgR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwKKwlHUElPX1BUSzMsIEdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTMsIEdQSU9fUFRRMiwgR1BJT19QVFExLCBHUElPX1BUUTAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM3LCBHUElPX1BUUzYsIEdQSU9fUFRTNSwgR1BJT19QVFM0LAorCUdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNSwgR1BJT19QVFQ0LCBHUElPX1BUVDMsIEdQSU9fUFRUMiwKKwlHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNSwgR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwKKwlHUElPX1BUVTEsIEdQSU9fUFRVMCwKKworCS8qIFBUViAqLworCUdQSU9fUFRWNywgR1BJT19QVFY2LCBHUElPX1BUVjUsIEdQSU9fUFRWNCwKKwlHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBQVFcgKi8KKwlHUElPX1BUVzcsIEdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsCisJR1BJT19QVFczLCBHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg3LCBHUElPX1BUWDYsIEdQSU9fUFRYNSwgR1BJT19QVFg0LAorCUdQSU9fUFRYMywgR1BJT19QVFgyLCBHUElPX1BUWDEsIEdQSU9fUFRYMCwKKworCS8qIFBUWSAqLworCUdQSU9fUFRZNywgR1BJT19QVFk2LCBHUElPX1BUWTUsIEdQSU9fUFRZNCwKKwlHUElPX1BUWTMsIEdQSU9fUFRZMiwgR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjcsIEdQSU9fUFRaNiwgR1BJT19QVFo1LCBHUElPX1BUWjQsCisJR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwgR1BJT19QVFowLAorCisJLyogU0NJRjAgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMF9QVFRfVFhELCBHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjBfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYwX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjBfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMF9QVFVfU0NLLAorCisJLyogU0NJRjEgKFNDSUY6IDMgcGluIFBUUy9QVFYpICovCisJR1BJT19GTl9TQ0lGMV9QVFNfVFhELCBHUElPX0ZOX1NDSUYxX1BUU19SWEQsIEdQSU9fRk5fU0NJRjFfUFRTX1NDSywKKwlHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIEdQSU9fRk5fU0NJRjFfUFRWX1JYRCwgR1BJT19GTl9TQ0lGMV9QVFZfU0NLLAorCisJLyogU0NJRjIgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBHUElPX0ZOX1NDSUYyX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjJfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYyX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMl9QVFVfU0NLLAorCisJLyogU0NJRjMgKFNDSUZBOiA1IHBpbiBQVFMvUFRWKSAqLworCUdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgR1BJT19GTl9TQ0lGM19QVFNfUlhELCBHUElPX0ZOX1NDSUYzX1BUU19TQ0ssCisJR1BJT19GTl9TQ0lGM19QVFNfUlRTLCBHUElPX0ZOX1NDSUYzX1BUU19DVFMsCisJR1BJT19GTl9TQ0lGM19QVFZfVFhELCBHUElPX0ZOX1NDSUYzX1BUVl9SWEQsIEdQSU9fRk5fU0NJRjNfUFRWX1NDSywKKwlHUElPX0ZOX1NDSUYzX1BUVl9SVFMsIEdQSU9fRk5fU0NJRjNfUFRWX0NUUywKKworCS8qIFNDSUY0IChTQ0lGQTogMyBwaW4gUFRFL1BUTikgKi8KKwlHUElPX0ZOX1NDSUY0X1BURV9UWEQsIEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgR1BJT19GTl9TQ0lGNF9QVEVfU0NLLAorCUdQSU9fRk5fU0NJRjRfUFROX1RYRCwgR1BJT19GTl9TQ0lGNF9QVE5fUlhELCBHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssCisKKwkvKiBTQ0lGNSAoU0NJRkE6IDMgcGluIFBURS9QVE4pICovCisJR1BJT19GTl9TQ0lGNV9QVEVfVFhELCBHUElPX0ZOX1NDSUY1X1BURV9SWEQsIEdQSU9fRk5fU0NJRjVfUFRFX1NDSywKKwlHUElPX0ZOX1NDSUY1X1BUTl9UWEQsIEdQSU9fRk5fU0NJRjVfUFROX1JYRCwgR1BJT19GTl9TQ0lGNV9QVE5fU0NLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9WSU9fVkQxLCBHUElPX0ZOX1ZJT19IRDEsIEdQSU9fRk5fVklPX0NMSzEsCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEtfUFRSLCBHUElPX0ZOX0xDRExDTEtfUFRXLAorCS8qIE1haW4gTENEICovCisJR1BJT19GTl9MQ0RET04sIEdQSU9fRk5fTENEVkNQV0MsIEdQSU9fRk5fTENEVkVQV0MsIEdQSU9fRk5fTENEVlNZTiwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENESFNZTiwgR1BJT19GTl9MQ0RESVNQLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlHUElPX0ZOX0xDRFJTLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRFdSLCBHUElPX0ZOX0xDRFJELAorCisJLyogSVJRICovCisJR1BJT19GTl9JUlEwLCBHUElPX0ZOX0lSUTEsIEdQSU9fRk5fSVJRMiwgR1BJT19GTl9JUlEzLAorCUdQSU9fRk5fSVJRNCwgR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTYsIEdQSU9fRk5fSVJRNywKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEQVRBMywgR1BJT19GTl9BVURBVEEyLCBHUElPX0ZOX0FVREFUQTEsIEdQSU9fRk5fQVVEQVRBMCwKKwlHUElPX0ZOX0FVRENLLCBHUElPX0ZOX0FVRFNZTkMsCisKKwkvKiBTREhJMCAoUFREKSAqLworCUdQSU9fRk5fU0RISTBDRF9QVEQsIEdQSU9fRk5fU0RISTBXUF9QVEQsCisJR1BJT19GTl9TREhJMEQzX1BURCwgR1BJT19GTl9TREhJMEQyX1BURCwKKwlHUElPX0ZOX1NESEkwRDFfUFRELCBHUElPX0ZOX1NESEkwRDBfUFRELAorCUdQSU9fRk5fU0RISTBDTURfUFRELCBHUElPX0ZOX1NESEkwQ0xLX1BURCwKKworCS8qIFNESEkwIChQVFMpICovCisJR1BJT19GTl9TREhJMENEX1BUUywgR1BJT19GTl9TREhJMFdQX1BUUywKKwlHUElPX0ZOX1NESEkwRDNfUFRTLCBHUElPX0ZOX1NESEkwRDJfUFRTLAorCUdQSU9fRk5fU0RISTBEMV9QVFMsIEdQSU9fRk5fU0RISTBEMF9QVFMsCisJR1BJT19GTl9TREhJMENNRF9QVFMsIEdQSU9fRk5fU0RISTBDTEtfUFRTLAorCisJLyogU0RISTEgKi8KKwlHUElPX0ZOX1NESEkxQ0QsIEdQSU9fRk5fU0RISTFXUCwgR1BJT19GTl9TREhJMUQzLCBHUElPX0ZOX1NESEkxRDIsCisJR1BJT19GTl9TREhJMUQxLCBHUElPX0ZOX1NESEkxRDAsIEdQSU9fRk5fU0RISTFDTUQsIEdQSU9fRk5fU0RISTFDTEssCisKKwkvKiBTSVVBICovCisJR1BJT19GTl9TSVVBRkNLLCBHUElPX0ZOX1NJVUFJTFIsIEdQSU9fRk5fU0lVQUlCVCwgR1BJT19GTl9TSVVBSVNMRCwKKwlHUElPX0ZOX1NJVUFPTFIsIEdQSU9fRk5fU0lVQU9CVCwgR1BJT19GTl9TSVVBT1NMRCwgR1BJT19GTl9TSVVBTUNLLAorCUdQSU9fRk5fU0lVQUlTUEQsIEdQSU9fRk5fU0lVT1NQRCwKKworCS8qIFNJVUIgKi8KKwlHUElPX0ZOX1NJVUJGQ0ssIEdQSU9fRk5fU0lVQklMUiwgR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJJU0xELAorCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVUJNQ0ssCisKKwkvKiBJUkRBICovCisJR1BJT19GTl9JUkRBX0lOLCBHUElPX0ZOX0lSREFfT1VULAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkvKiBNU0lPRjAgKFBURikgKi8KKwlHUElPX0ZOX01TSU9GMF9QVEZfVFhELCBHUElPX0ZOX01TSU9GMF9QVEZfUlhELCBHUElPX0ZOX01TSU9GMF9QVEZfTUNLLAorCUdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgR1BJT19GTl9NU0lPRjBfUFRGX1RTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRGX1JTWU5DLCBHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywKKwlHUElPX0ZOX01TSU9GMF9QVEZfU1MxLCBHUElPX0ZOX01TSU9GMF9QVEZfU1MyLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCUdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRUX1RTWU5DLCBHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywKKwlHUElPX0ZOX01TSU9GMF9QVFRfUlNZTkMsIEdQSU9fRk5fTVNJT0YwX1BUVF9SU0NLLAorCUdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsCisKKwkvKiBNU0lPRjEgKi8KKwlHUElPX0ZOX01TSU9GMV9UWEQsIEdQSU9fRk5fTVNJT0YxX1JYRCwgR1BJT19GTl9NU0lPRjFfTUNLLAorCUdQSU9fRk5fTVNJT0YxX1RTWU5DLCBHUElPX0ZOX01TSU9GMV9UU0NLLAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX01TSU9GMV9SU0NLLAorCUdQSU9fRk5fTVNJT0YxX1NTMSwgR1BJT19GTl9NU0lPRjFfU1MyLAorCisJLyogVFNJRiAqLworCUdQSU9fRk5fVFMwX1NEQVQsIEdQSU9fRk5fVFMwX1NDSywgR1BJT19GTl9UUzBfU0RFTiwgR1BJT19GTl9UUzBfU1BTWU5DLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSzEsIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fREFDSzAsIEdQSU9fRk5fRFJFUTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIENQRyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9QRFNUQVRVUywKKworCS8qIFRQVSAqLworCUdQSU9fRk5fVFBVVE8zLCBHUElPX0ZOX1RQVVRPMiwgR1BJT19GTl9UUFVUTzEsIEdQSU9fRk5fVFBVVE8wLAorCisJLyogQlNDICovCisJR1BJT19GTl9EMzEsIEdQSU9fRk5fRDMwLCBHUElPX0ZOX0QyOSwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9EMjcsIEdQSU9fRk5fRDI2LCBHUElPX0ZOX0QyNSwgR1BJT19GTl9EMjQsCisJR1BJT19GTl9EMjMsIEdQSU9fRk5fRDIyLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9EMjAsCisJR1BJT19GTl9EMTksIEdQSU9fRk5fRDE4LCBHUElPX0ZOX0QxNywgR1BJT19GTl9EMTYsCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9CUywKKwlHUElPX0ZOX0EyNSwgR1BJT19GTl9BMjQsIEdQSU9fRk5fQTIzLCBHUElPX0ZOX0EyMiwKKwlHUElPX0ZOX0NTNkJfQ0UxQiwgR1BJT19GTl9DUzZBX0NFMkIsCisJR1BJT19GTl9DUzVCX0NFMUEsIEdQSU9fRk5fQ1M1QV9DRTJBLAorCUdQSU9fRk5fV0UzX0lDSU9XUiwgR1BJT19GTl9XRTJfSUNJT1JELAorCisJLyogQVRBUEkgKi8KKwlHUElPX0ZOX0lERUQxNSwgR1BJT19GTl9JREVEMTQsIEdQSU9fRk5fSURFRDEzLCBHUElPX0ZOX0lERUQxMiwKKwlHUElPX0ZOX0lERUQxMSwgR1BJT19GTl9JREVEMTAsIEdQSU9fRk5fSURFRDksIEdQSU9fRk5fSURFRDgsCisJR1BJT19GTl9JREVENywgR1BJT19GTl9JREVENiwgR1BJT19GTl9JREVENSwgR1BJT19GTl9JREVENCwKKwlHUElPX0ZOX0lERUQzLCBHUElPX0ZOX0lERUQyLCBHUElPX0ZOX0lERUQxLCBHUElPX0ZOX0lERUQwLAorCUdQSU9fRk5fRElSRUNUSU9OLCBHUElPX0ZOX0VYQlVGX0VOQiwgR1BJT19GTl9JREVSU1QsIEdQSU9fRk5fSU9EQUNLLAorCUdQSU9fRk5fSU9EUkVRLCBHUElPX0ZOX0lERUlPUkRZLCBHUElPX0ZOX0lERUlOVCwgR1BJT19GTl9JREVJT1dSLAorCUdQSU9fRk5fSURFSU9SRCwgR1BJT19GTl9JREVDUzEsIEdQSU9fRk5fSURFQ1MwLCBHUElPX0ZOX0lERUEyLAorCUdQSU9fRk5fSURFQTEsIEdQSU9fRk5fSURFQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lZG9zazc3MDUuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2Vkb3NrNzcwNS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2Vkb3NrNzcwNS5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9lZG9zazc3MDUuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yNzc4MHJwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hwNnh4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaHA2eHguaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9sYm94cmUyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbGJveHJlMi5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFnaWNwYW5lbHIyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWdpY3BhbmVscjIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pY3JvZGV2LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWljcm9kZXYuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1MWYwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0FTTV9TSF9NSUdPUl9ICisjZGVmaW5lIF9fQVNNX1NIX01JR09SX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogR1BJTyAqLworI2RlZmluZSBQT1JUX1BBQ1IgMHhhNDA1MDEwMAorI2RlZmluZSBQT1JUX1BEQ1IgMHhhNDA1MDEwNgorI2RlZmluZSBQT1JUX1BFQ1IgMHhhNDA1MDEwOAorI2RlZmluZSBQT1JUX1BIQ1IgMHhhNDA1MDEwZQorI2RlZmluZSBQT1JUX1BKQ1IgMHhhNDA1MDExMAorI2RlZmluZSBQT1JUX1BLQ1IgMHhhNDA1MDExMgorI2RlZmluZSBQT1JUX1BMQ1IgMHhhNDA1MDExNAorI2RlZmluZSBQT1JUX1BNQ1IgMHhhNDA1MDExNgorI2RlZmluZSBQT1JUX1BSQ1IgMHhhNDA1MDExYworI2RlZmluZSBQT1JUX1BUQ1IgMHhhNDA1MDE0MAorI2RlZmluZSBQT1JUX1BVQ1IgMHhhNDA1MDE0MgorI2RlZmluZSBQT1JUX1BWQ1IgMHhhNDA1MDE0NAorI2RlZmluZSBQT1JUX1BXQ1IgMHhhNDA1MDE0NgorI2RlZmluZSBQT1JUX1BYQ1IgMHhhNDA1MDE0OAorI2RlZmluZSBQT1JUX1BZQ1IgMHhhNDA1MDE0YQorI2RlZmluZSBQT1JUX1BaQ1IgMHhhNDA1MDE0YworI2RlZmluZSBQT1JUX1BBRFIgMHhhNDA1MDEyMAorI2RlZmluZSBQT1JUX1BIRFIgMHhhNDA1MDEyZQorI2RlZmluZSBQT1JUX1BURFIgMHhhNDA1MDE2MAorI2RlZmluZSBQT1JUX1BXRFIgMHhhNDA1MDE2NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkMgMHhhNDA1MDE1YworCisjZGVmaW5lIFBPUlRfTVNFTENSQiAweGE0MDUwMTgyCisKKyNkZWZpbmUgUE9SVF9QU0VMQSAweGE0MDUwMTRlCisjZGVmaW5lIFBPUlRfUFNFTEIgMHhhNDA1MDE1MAorI2RlZmluZSBQT1JUX1BTRUxDIDB4YTQwNTAxNTIKKyNkZWZpbmUgUE9SVF9QU0VMRCAweGE0MDUwMTU0CisjZGVmaW5lIFBPUlRfUFNFTEUgMHhhNDA1MDE1NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkIgMHhhNDA1MDE1YQorI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCisKKyNkZWZpbmUgQlNDX0NTNEJDUiAweGZlYzEwMDEwCisjZGVmaW5lIEJTQ19DUzZBQkNSIDB4ZmVjMTAwMWMKKyNkZWZpbmUgQlNDX0NTNFdDUiAweGZlYzEwMDMwCisKKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorCitpbnQgbWlnb3JfbGNkX3F2Z2Ffc2V0dXAodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01JR09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yMmQuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZGs3NzgwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2RrNzc4MC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3NzYzcmRwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3NjNyZHAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3NjNyZHAuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3NzYzcmRwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3Nzg1bGNyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3ODVsY3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3ODVsY3IuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3Nzg1bGNyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NobWluLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2htaW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc25hcGdlYXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zbmFwZ2Vhci5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zeXN0ZW1oNzc1MS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3N5c3RlbWg3NzUxLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3RpdGFuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdGl0YW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCAwZTY5MDVmLi40OGVkZmIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgpAQCAtMjEsNyArMjEsOCBAQAogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwotb2JqLSQoQ09ORklHX0VMRl9DT1JFKQkJKz0gZHVtcF90YXNrLm8KIG9iai0kKENPTkZJR19JT19UUkFQUEVEKQkrPSBpb190cmFwcGVkLm8KK29iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0IGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKaW5kZXggNmVkZjUzYi4uYzk3NjYwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KLW9iai0kKENPTkZJR19CSU5GTVRfRUxGKQkrPSBkdW1wX3Rhc2subwogb2JqLSQoQ09ORklHX0lPX1RSQVBQRUQpCSs9IGlvX3RyYXBwZWQubworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IGY1ZWI1NmUuLmI3ZTQ2ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yOTQsOSArMjk0LDEwIEBACiB7CiB9CiAKLXZvaWQgX19pbml0IF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKK2ludCBfX2luaXQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQogYXJjaF9jbGtfaW5pdCh2b2lkKQogeworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNob3dfY2xvY2tzKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC0zMzEsNyArMzMyLDcgQEAKIAkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGspOwogCX0KIAotCWFyY2hfY2xrX2luaXQoKTsKKwlyZXQgfD0gYXJjaF9jbGtfaW5pdCgpOwogCiAJLyogS2ljayB0aGUgY2hpbGQgY2xvY2tzLi4gKi8KIAlwcm9wYWdhdGVfcmF0ZSgmbWFzdGVyX2Nsayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQppbmRleCA0NjJhOGY2Li5mMGM3MDI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKQEAgLTEsOCArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIENQVS1zcGVjaWZjIElSUSBoYW5kbGVycy4KICMKLW9iai15CSs9IGludGMubwotCiBvYmotJChDT05GSUdfU1VQRVJIMzIpCQkJKz0gaW1hc2subwogb2JqLSQoQ09ORklHX0NQVV9TSDUpCQkJKz0gaW50Yy1zaDUubwogb2JqLSQoQ09ORklHX0NQVV9IQVNfSVBSX0lSUSkJCSs9IGlwci5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZTIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEwICswLDAgQEAKLS8qCi0gKiBTaGFyZWQgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgZm9yIElQUiBhbmQgSU5UQzIgdHlwZXMgb2YgSVJRcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTWFnbnVzIERhbW0KLSAqCi0gKiBCYXNlZCBvbiBpbnRjMi5jIGFuZCBpcHIuYwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthICYgVGFrZXNoaSBZYWVnYXNoaQotICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgVGFrYXNoaSBLdXN1ZGEgPGt1c3VkYS10YWthc2hpQGhpdGFjaGktdWwuY28uanA+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAotCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXAotCSAoKGFkZHJfZSkgPDwgMTYpIHwgKChhZGRyX2QgPDwgMjQpKSkKLQotI2RlZmluZSBfSU5UQ19TSElGVChoKSAoaCAmIDB4MWYpCi0jZGVmaW5lIF9JTlRDX1dJRFRIKGgpICgoaCA+PiA1KSAmIDB4ZikKLSNkZWZpbmUgX0lOVENfRk4oaCkgKChoID4+IDkpICYgMHhmKQotI2RlZmluZSBfSU5UQ19NT0RFKGgpICgoaCA+PiAxMykgJiAweDcpCi0jZGVmaW5lIF9JTlRDX0FERFJfRShoKSAoKGggPj4gMTYpICYgMHhmZikKLSNkZWZpbmUgX0lOVENfQUREUl9EKGgpICgoaCA+PiAyNCkgJiAweGZmKQotCi1zdHJ1Y3QgaW50Y19oYW5kbGVfaW50IHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwotfTsKLQotc3RydWN0IGludGNfZGVzY19pbnQgewotCXVuc2lnbmVkIGxvbmcgKnJlZzsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyAqc21wOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IG5yX3JlZzsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpwcmlvOwotCXVuc2lnbmVkIGludCBucl9wcmlvOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnNlbnNlOwotCXVuc2lnbmVkIGludCBucl9zZW5zZTsKLQlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTX1NNUCh4KSB4LnNtcAotI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0gKyAoKGQtPnNtcFsoeCldICYgMHhmZikgKiBjKSkKLSNkZWZpbmUgU01QX05SKGQsIHgpICgoZC0+c21wWyh4KV0gPj4gOCkgPyAoZC0+c21wWyh4KV0gPj4gOCkgOiAxKQotI2Vsc2UKLSNkZWZpbmUgSVNfU01QKHgpIDAKLSNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldKQotI2RlZmluZSBTTVBfTlIoZCwgeCkgMQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y19wcmlvX2xldmVsW05SX0lSUVNdOyAvKiBmb3Igbm93ICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhY2tfaGFuZGxlW05SX0lSUVNdOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGNfZGVzY19pbnQgKmdldF9pbnRjX2Rlc2ModW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKLQlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGludGNfZGVzY19pbnQsIGNoaXApKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2V0X2ZpZWxkKHVuc2lnbmVkIGludCB2YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0JdW5zaWduZWQgaW50IHdpZHRoID0gX0lOVENfV0lEVEgoaGFuZGxlKTsKLQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBfSU5UQ19TSElGVChoYW5kbGUpOwotCi0JdmFsdWUgJj0gfigoKDEgPDwgd2lkdGgpIC0gMSkgPDwgc2hpZnQpOwotCXZhbHVlIHw9IGZpZWxkX3ZhbHVlIDw8IHNoaWZ0OwotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0YihzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0dyhzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0bChzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBtb2RpZnlfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0YihzZXRfZmllbGQoY3RybF9pbmIoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0dyhzZXRfZmllbGQoY3RybF9pbncoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0bChzZXRfZmllbGQoY3RybF9pbmwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLWVudW0gewlSRUdfRk5fRVJSID0gMCwgUkVHX0ZOX1dSSVRFX0JBU0UgPSAxLCBSRUdfRk5fTU9ESUZZX0JBU0UgPSA1IH07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19yZWdfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkgPSB7Ci0JW1JFR19GTl9XUklURV9CQVNFICsgMF0gPSB3cml0ZV84LAotCVtSRUdfRk5fV1JJVEVfQkFTRSArIDFdID0gd3JpdGVfMTYsCi0JW1JFR19GTl9XUklURV9CQVNFICsgM10gPSB3cml0ZV8zMiwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMF0gPSBtb2RpZnlfOCwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMV0gPSBtb2RpZnlfMTYsCi0JW1JFR19GTl9NT0RJRllfQkFTRSArIDNdID0gbW9kaWZ5XzMyLAotfTsKLQotZW51bSB7CU1PREVfRU5BQkxFX1JFRyA9IDAsIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGVuYWJsZWQgKi8KLQlNT0RFX01BU0tfUkVHLCAgICAgICAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBkaXNhYmxlZCAqLwotCU1PREVfRFVBTF9SRUcsICAgICAgIC8qIFR3byByZWdpc3RlcnMsIHNldCBiaXQgdG8gZW5hYmxlIC8gZGlzYWJsZSAqLwotCU1PREVfUFJJT19SRUcsICAgICAgIC8qIFByaW9yaXR5IHZhbHVlIHdyaXR0ZW4gdG8gZW5hYmxlIGludGVycnVwdCAqLwotCU1PREVfUENMUl9SRUcsICAgICAgIC8qIEFib3ZlIHBsdXMgYWxsIGJpdHMgc2V0IHRvIGRpc2FibGUgaW50ZXJydXB0ICovCi19OwotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfZmllbGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJICAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsICgoMSA8PCBfSU5UQ19XSURUSChoYW5kbGUpKSAtIDEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19tb2RlX3plcm8odW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfcHJpbyh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19wcmlvX2xldmVsW2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCAoKmludGNfZW5hYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJCSB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCi0JCQkJIHVuc2lnbmVkIGludCBpcnEpID0gewotCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLQlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLQlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLX07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19kaXNhYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCQkgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJCSAgdW5zaWduZWQgaW50IGlycSkgPSB7Ci0JW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfemVybywKLQlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCi0JW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7Ci0JCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKLQkJaW50Y19lbmFibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNcCi0JCQkJCQkgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlfaW50Y19lbmFibGUoaXJxLCAodW5zaWduZWQgbG9uZylnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBoYW5kbGUgPSAodW5zaWduZWQgbG9uZykgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaW50IGNwdTsKLQotCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOwotCQlpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLGludGNfcmVnX2Zuc1wKLQkJCQkJCSAgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gYWNrX2hhbmRsZVtpcnFdOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWludGNfZGlzYWJsZShpcnEpOwotCi0JLyogcmVhZCByZWdpc3RlciBhbmQgd3JpdGUgemVybyBvbmx5IHRvIHRoZSBhc3NvY2FpdGVkIGJpdCAqLwotCi0JaWYgKGhhbmRsZSkgewotCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOwotCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKLQkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCi0JCQljdHJsX2luYihhZGRyKTsKLQkJCWN0cmxfb3V0YigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMToJLyogMTZiaXQgKi8KLQkJCWN0cmxfaW53KGFkZHIpOwotCQkJY3RybF9vdXR3KDB4ZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDM6CS8qIDMyYml0ICovCi0JCQljdHJsX2lubChhZGRyKTsKLQkJCWN0cmxfb3V0bCgweGZmZmZmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppbnRjX2ZpbmRfaXJxKHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBucl9ocCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpOwotCi0JLyogdGhpcyBkb2Vzbid0IHNjYWxlIHdlbGwsIGJ1dC4uLgotCSAqCi0JICogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjZXJhaW4gdW5jb21tb24KLQkgKiBvcGVyYXRpb25zIHN1Y2ggYXMgaW50Y19zZXRfcHJpb3JpdHkoKSBhbmQgaW50Y19zZXRfc2Vuc2UoKQotCSAqIGFuZCBpbiB0aG9zZSByYXJlIGNhc2VzIHBlcmZvcm1hbmNlIGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KLQkgKiBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGxvdyBpcyBtb3JlIGltcG9ydGFudC4KLQkgKgotCSAqIG9uZSByYXRoZXIgc2ltcGxlIHdheSB0byBzcGVlZCB0aGlzIHVwIGFuZCBzdGlsbCBrZWVwIHRoZQotCSAqIG1lbW9yeSBmb290cHJpbnQgZG93biBpcyB0byBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNvcnRlZAotCSAqIGFuZCB0aGVuIHBlcmZvcm0gYSBiaXNlY3QgdG8gbG9va3VwIHRoZSBpcnEuCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaHA7IGkrKykgewotCQlpZiAoKGhwICsgaSktPmlycSAhPSBpcnEpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gaHAgKyBpOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1pbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0Jc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOwotCi0JaWYgKCFpbnRjX3ByaW9fbGV2ZWxbaXJxXSB8fCBwcmlvIDw9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWhwID0gaW50Y19maW5kX2lycShkLT5wcmlvLCBkLT5ucl9wcmlvLCBpcnEpOwotCWlmIChpaHApIHsKLQkJaWYgKHByaW8gPj0gKDEgPDwgX0lOVENfV0lEVEgoaWhwLT5oYW5kbGUpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWludGNfcHJpb19sZXZlbFtpcnFdID0gcHJpbzsKLQotCQkvKgotCQkgKiBvbmx5IHNldCBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgZGlyZWN0bHkKLQkJICogcHJpbWFyeSBtYXNraW5nIG1ldGhvZCBpcyB1c2luZyBpbnRjX3ByaW9fbGV2ZWxbaXJxXQotCQkgKiBwcmlvcml0eSBsZXZlbCB3aWxsIGJlIHNldCBkdXJpbmcgbmV4dCBlbmFibGUoKQotCQkgKi8KLQotCQlpZiAoX0lOVENfRk4oaWhwLT5oYW5kbGUpICE9IFJFR19GTl9FUlIpCi0JCQlfaW50Y19lbmFibGUoaXJxLCBpaHAtPmhhbmRsZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0gewotCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCi0JW0lSUV9UWVBFX0VER0VfUklTSU5HXSA9IFZBTElEKDEpLAotCVtJUlFfVFlQRV9MRVZFTF9MT1ddID0gVkFMSUQoMiksCi0JLyogU0g3NzA2LCBTSDc3MDcgYW5kIFNINzcwOSBkbyBub3Qgc3VwcG9ydCBoaWdoIGxldmVsIHRyaWdnZXJlZCAqLwotI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpICYmIFwKLSAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLQlbSVJRX1RZUEVfTEVWRUxfSElHSF0gPSBWQUxJRCgzKSwKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpbnRjX3NldF9zZW5zZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW50Y19pcnFfc2Vuc2VfdGFibGVbdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0tdOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlocCA9IGludGNfZmluZF9pcnEoZC0+c2Vuc2UsIGQtPm5yX3NlbnNlLCBpcnEpOwotCWlmIChpaHApIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShpaHAtPmhhbmRsZSksIDApOwotCQlpbnRjX3JlZ19mbnNbX0lOVENfRk4oaWhwLT5oYW5kbGUpXShhZGRyLCBpaHAtPmhhbmRsZSwgdmFsdWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19nZXRfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgZC0+bnJfcmVnOyBrKyspIHsKLQkJaWYgKGQtPnJlZ1trXSA9PSBhZGRyZXNzKQotCQkJcmV0dXJuIGs7Ci0JfQotCi0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQotewotCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOwotCXVuc2lnbmVkIGludCBpLCBqOwotCi0JZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgewotCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKLQotCQlmb3IgKGogPSAwOyBnLT5lbnVtX2lkc1tqXTsgaisrKSB7Ci0JCQlpZiAoZy0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0dXJuIGctPmVudW1faWQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+bWFza19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKLQotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7Ci0JCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9EVUFMX1JFRzsKLQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0JCQl9IGVsc2UgewotCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOwotCQkJCWlmIChtci0+c2V0X3JlZykgewotCQkJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGUgPSBNT0RFX01BU0tfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5jbHJfcmVnOwotCQkJCX0KLQkJCX0KLQotCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOwotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKLXsKLQlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5wcmlvX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlLCBiaXQ7Ci0JdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7Ci0KLQlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocHItPmVudW1faWRzKTsgaisrKSB7Ci0JCQlpZiAocHItPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgewotCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7Ci0JCQkJbW9kZSA9IE1PREVfUENMUl9SRUc7Ci0JCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKLQkJCQlyZWdfZCA9IHByLT5jbHJfcmVnOwotCQkJfSBlbHNlIHsKLQkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9QUklPX1JFRzsKLQkJCQlpZiAoIXByLT5zZXRfcmVnKQotCQkJCQlCVUcoKTsKLQkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOwotCQkJCXJlZ19kID0gcHItPnNldF9yZWc7Ci0JCQl9Ci0KLQkJCWZuICs9IChwci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQlwci0+ZmllbGRfd2lkdGgsIGJpdCk7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2Fja19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+YWNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOwotCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOwotCi0JZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykgewotCQltciA9IGRlc2MtPmFja19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7Ci0JCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKLQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0KLQkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKLQkJCQkJMSwKLQkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19zZW5zZV9kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKLXsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKLQotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCWZuICs9IChzci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHNyLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHNyLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCi0JCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW50Y19yZWdpc3Rlcl9pcnEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkgICAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSAgICAgaW50Y19lbnVtIGVudW1faWQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwOwotCXVuc2lnbmVkIGludCBkYXRhWzJdLCBwcmltYXJ5OwotCi0JLyogUHJlZmVyIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIGJpdG1hcCBvdmVyIG90aGVyIGNvbWJpbmF0aW9uczoKLQkgKiAxLiBiaXRtYXAsIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMi4gcHJpb3JpdHksIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMy4gYml0bWFwLCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqIDQuIHByaW9yaXR5LCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqLwotCi0JZGF0YVswXSA9IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOwotCWRhdGFbMV0gPSBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKLQotCXByaW1hcnkgPSAwOwotCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQotCQlwcmltYXJ5ID0gMTsKLQotCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCi0JaWYgKCFkYXRhW3ByaW1hcnldKQotCQlwcmltYXJ5IF49IDE7Ci0KLQlCVUdfT04oIWRhdGFbcHJpbWFyeV0pOyAvKiBtdXN0IGhhdmUgcHJpbWFyeSBtYXNraW5nIG1ldGhvZCAqLwotCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZC0+Y2hpcCwKLQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICh2b2lkICopZGF0YVtwcmltYXJ5XSk7Ci0KLQkvKiBzZXQgcHJpb3JpdHkgbGV2ZWwKLQkgKiAtIHRoaXMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMiBmb3IgNS1iaXQgcHJpb3JpdGllcyBvbiA3NzgwCi0JICovCi0JaW50Y19wcmlvX2xldmVsW2lycV0gPSAyOwotCi0JLyogZW5hYmxlIHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBpZiBwcmVzZW50ICovCi0JaWYgKGRhdGFbIXByaW1hcnldKQotCQlfaW50Y19lbmFibGUoaXJxLCBkYXRhWyFwcmltYXJ5XSk7Ci0KLQkvKiBhZGQgaXJxIHRvIGQtPnByaW8gbGlzdCBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoZGF0YVsxXSkgewotCQlocCA9IGQtPnByaW8gKyBkLT5ucl9wcmlvOwotCQlocC0+aXJxID0gaXJxOwotCQlocC0+aGFuZGxlID0gZGF0YVsxXTsKLQotCQlpZiAocHJpbWFyeSkgewotCQkJLyoKLQkJCSAqIG9ubHkgc2Vjb25kYXJ5IHByaW9yaXR5IHNob3VsZCBhY2Nlc3MgcmVnaXN0ZXJzLCBzbwotCQkJICogc2V0IF9JTlRDX0ZOKGgpID0gUkVHX0ZOX0VSUiBmb3IgaW50Y19zZXRfcHJpb3JpdHkoKQotCQkJICovCi0KLQkJCWhwLT5oYW5kbGUgJj0gfl9JTlRDX01LKDB4MGYsIDAsIDAsIDAsIDAsIDApOwotCQkJaHAtPmhhbmRsZSB8PSBfSU5UQ19NSyhSRUdfRk5fRVJSLCAwLCAwLCAwLCAwLCAwKTsKLQkJfQotCQlkLT5ucl9wcmlvKys7Ci0JfQotCi0JLyogYWRkIGlycSB0byBkLT5zZW5zZSBsaXN0IGlmIHNlbnNlIGlzIGF2YWlsYWJsZSAqLwotCWRhdGFbMF0gPSBpbnRjX3NlbnNlX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7Ci0JaWYgKGRhdGFbMF0pIHsKLQkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5pcnEgPSBpcnE7Ci0JCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aGFuZGxlID0gZGF0YVswXTsKLQkJZC0+bnJfc2Vuc2UrKzsKLQl9Ci0KLQkvKiBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLQlkLT5jaGlwLm1hc2soaXJxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWlmIChkZXNjLT5hY2tfcmVncykKLQkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNudCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSwKLQkJCQkgICAgdW5zaWduZWQgaW50IHNtcCkKLXsKLQlpZiAodmFsdWUpIHsKLQkJZC0+cmVnW2NudF0gPSB2YWx1ZTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWQtPnNtcFtjbnRdID0gc21wOwotI2VuZGlmCi0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQotewotCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQ7Ci0KLQlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKLQotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JZC0+bnJfcmVnICs9IGRlc2MtPmFja19yZWdzID8gZGVzYy0+bnJfYWNrX3JlZ3MgOiAwOwotI2VuZGlmCi0JZC0+cmVnID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnJlZykpOwotI2lmZGVmIENPTkZJR19TTVAKLQlkLT5zbXAgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+c21wKSk7Ci0jZW5kaWYKLQlrID0gMDsKLQotCWlmIChkZXNjLT5tYXNrX3JlZ3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+bWFza19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5zZW5zZV9yZWdzW2ldLnJlZywgMCk7Ci0JCX0KLQl9Ci0KLQlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOwotCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKLQlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOwotCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7Ci0JZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JaWYgKGRlc2MtPmFja19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKQotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKLQotCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKLQl9Ci0jZW5kaWYKLQotCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOwotCi0JCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDU2ZWE3YjIuLjNlYjE3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2lwcl9kZXNjKGlycSktPmlwcl9vZmZzZXRzW3AtPmlwcl9pZHhdOwogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9pcHJfZGVzYyhpcnEpLT5pcHJfb2Zmc2V0c1twLT5pcHJfaWR4XTsKIAkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKaW5kZXggMWFiMWVjZi4uNDI4NDUwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDggQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpCSs9IHNldHVwLXNoNzIwMy5vIGNsb2NrLXNoNzIwMy5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQkrPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX01YRykJCSs9IHNldHVwLW14Zy5vIGNsb2NrLXNoNzIwNi5vCisKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQk6PSBwaW5tdXgtc2g3MjAzLm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gJChwaW5tdXgteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE1Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcGlubXV4LXNoNzIwMy5jCkBAIC0wLDAgKzEsMTU5OSBAQAorLyoKKyAqIFNINzIwMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9zaDcyMDMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCMTJfREFUQSwKKwlQQjExX0RBVEEsIFBCMTBfREFUQSwgUEI5X0RBVEEsIFBCOF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDMTRfREFUQSwgUEMxM19EQVRBLCBQQzEyX0RBVEEsCisJUEMxMV9EQVRBLCBQQzEwX0RBVEEsIFBDOV9EQVRBLCBQQzhfREFUQSwKKwlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSwKKwlQRDE1X0RBVEEsIFBEMTRfREFUQSwgUEQxM19EQVRBLCBQRDEyX0RBVEEsCisJUEQxMV9EQVRBLCBQRDEwX0RBVEEsIFBEOV9EQVRBLCBQRDhfREFUQSwKKwlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSwKKwlQRTE1X0RBVEEsIFBFMTRfREFUQSwgUEUxM19EQVRBLCBQRTEyX0RBVEEsCisJUEUxMV9EQVRBLCBQRTEwX0RBVEEsIFBFOV9EQVRBLCBQRThfREFUQSwKKwlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwlQRTNfREFUQSwgUEUyX0RBVEEsIFBFMV9EQVRBLCBQRTBfREFUQSwKKwlQRjMwX0RBVEEsIFBGMjlfREFUQSwgUEYyOF9EQVRBLAorCVBGMjdfREFUQSwgUEYyNl9EQVRBLCBQRjI1X0RBVEEsIFBGMjRfREFUQSwKKwlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJUEYxOV9EQVRBLCBQRjE4X0RBVEEsIFBGMTdfREFUQSwgUEYxNl9EQVRBLAorCVBGMTVfREFUQSwgUEYxNF9EQVRBLCBQRjEzX0RBVEEsIFBGMTJfREFUQSwKKwlQRjExX0RBVEEsIFBGMTBfREFUQSwgUEY5X0RBVEEsIFBGOF9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQQTdfSU4sIFBBNl9JTiwgUEE1X0lOLCBQQTRfSU4sCisJUEEzX0lOLCBQQTJfSU4sIFBBMV9JTiwgUEEwX0lOLAorCVBCMTFfSU4sIFBCMTBfSU4sIFBCOV9JTiwgUEI4X0lOLAorCVBCN19JTiwgUEI2X0lOLCBQQjVfSU4sIFBCNF9JTiwKKwlQQjNfSU4sIFBCMl9JTiwgUEIxX0lOLCBQQjBfSU4sCisJUEMxNF9JTiwgUEMxM19JTiwgUEMxMl9JTiwKKwlQQzExX0lOLCBQQzEwX0lOLCBQQzlfSU4sIFBDOF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEMTVfSU4sIFBEMTRfSU4sIFBEMTNfSU4sIFBEMTJfSU4sCisJUEQxMV9JTiwgUEQxMF9JTiwgUEQ5X0lOLCBQRDhfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTE1X0lOLCBQRTE0X0lOLCBQRTEzX0lOLCBQRTEyX0lOLAorCVBFMTFfSU4sIFBFMTBfSU4sIFBFOV9JTiwgUEU4X0lOLAorCVBFN19JTiwgUEU2X0lOLCBQRTVfSU4sIFBFNF9JTiwKKwlQRTNfSU4sIFBFMl9JTiwgUEUxX0lOLCBQRTBfSU4sCisJUEYzMF9JTiwgUEYyOV9JTiwgUEYyOF9JTiwKKwlQRjI3X0lOLCBQRjI2X0lOLCBQRjI1X0lOLCBQRjI0X0lOLAorCVBGMjNfSU4sIFBGMjJfSU4sIFBGMjFfSU4sIFBGMjBfSU4sCisJUEYxOV9JTiwgUEYxOF9JTiwgUEYxN19JTiwgUEYxNl9JTiwKKwlQRjE1X0lOLCBQRjE0X0lOLCBQRjEzX0lOLCBQRjEyX0lOLAorCVBGMTFfSU4sIFBGMTBfSU4sIFBGOV9JTiwgUEY4X0lOLAorCVBGN19JTiwgUEY2X0lOLCBQRjVfSU4sIFBGNF9JTiwKKwlQRjNfSU4sIFBGMl9JTiwgUEYxX0lOLCBQRjBfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEIxMl9PVVQsCisJUEIxMV9PVVQsIFBCMTBfT1VULCBQQjlfT1VULCBQQjhfT1VULAorCVBDMTRfT1VULCBQQzEzX09VVCwgUEMxMl9PVVQsCisJUEMxMV9PVVQsIFBDMTBfT1VULCBQQzlfT1VULCBQQzhfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDE1X09VVCwgUEQxNF9PVVQsIFBEMTNfT1VULCBQRDEyX09VVCwKKwlQRDExX09VVCwgUEQxMF9PVVQsIFBEOV9PVVQsIFBEOF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFMTVfT1VULCBQRTE0X09VVCwgUEUxM19PVVQsIFBFMTJfT1VULAorCVBFMTFfT1VULCBQRTEwX09VVCwgUEU5X09VVCwgUEU4X09VVCwKKwlQRTdfT1VULCBQRTZfT1VULCBQRTVfT1VULCBQRTRfT1VULAorCVBFM19PVVQsIFBFMl9PVVQsIFBFMV9PVVQsIFBFMF9PVVQsCisJUEYzMF9PVVQsIFBGMjlfT1VULCBQRjI4X09VVCwKKwlQRjI3X09VVCwgUEYyNl9PVVQsIFBGMjVfT1VULCBQRjI0X09VVCwKKwlQRjIzX09VVCwgUEYyMl9PVVQsIFBGMjFfT1VULCBQRjIwX09VVCwKKwlQRjE5X09VVCwgUEYxOF9PVVQsIFBGMTdfT1VULCBQRjE2X09VVCwKKwlQRjE1X09VVCwgUEYxNF9PVVQsIFBGMTNfT1VULCBQRjEyX09VVCwKKwlQRjExX09VVCwgUEYxMF9PVVQsIFBGOV9PVVQsIFBGOF9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBCMTFfSU9SX0lOLCBQQjExX0lPUl9PVVQsCisJUEIxMF9JT1JfSU4sIFBCMTBfSU9SX09VVCwKKwlQQjlfSU9SX0lOLCBQQjlfSU9SX09VVCwKKwlQQjhfSU9SX0lOLCBQQjhfSU9SX09VVCwKKwlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJUEIxMU1EXzAsIFBCMTFNRF8xLAorCVBCMTBNRF8wLCBQQjEwTURfMSwKKwlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLAorCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsCisJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisKKwlQQjEySVJRXzAwLCBQQjEySVJRXzAxLCBQQjEySVJRXzEwLAorCisJUEMxNE1EXzAsIFBDMTRNRF8xLAorCVBDMTNNRF8wLCBQQzEzTURfMSwKKwlQQzEyTURfMCwgUEMxMk1EXzEsCisJUEMxMU1EXzAwLCBQQzExTURfMDEsIFBDMTFNRF8xMCwKKwlQQzEwTURfMDAsIFBDMTBNRF8wMSwgUEMxME1EXzEwLAorCVBDOU1EXzAsIFBDOU1EXzEsCisJUEM4TURfMCwgUEM4TURfMSwKKwlQQzdNRF8wLCBQQzdNRF8xLAorCVBDNk1EXzAsIFBDNk1EXzEsCisJUEM1TURfMCwgUEM1TURfMSwKKwlQQzRNRF8wLCBQQzRNRF8xLAorCVBDM01EXzAsIFBDM01EXzEsCisJUEMyTURfMCwgUEMyTURfMSwKKwlQQzFNRF8wLCBQQzFNRF8xLAorCVBDME1EXzAwLCBQQzBNRF8wMSwgUEMwTURfMTAsCisKKwlQRDE1TURfMDAwLCBQRDE1TURfMDAxLCBQRDE1TURfMDEwLCBQRDE1TURfMTAwLCBQRDE1TURfMTAxLAorCVBEMTRNRF8wMDAsIFBEMTRNRF8wMDEsIFBEMTRNRF8wMTAsIFBEMTRNRF8xMDEsCisJUEQxM01EXzAwMCwgUEQxM01EXzAwMSwgUEQxM01EXzAxMCwgUEQxM01EXzEwMCwgUEQxM01EXzEwMSwKKwlQRDEyTURfMDAwLCBQRDEyTURfMDAxLCBQRDEyTURfMDEwLCBQRDEyTURfMTAwLCBQRDEyTURfMTAxLAorCVBEMTFNRF8wMDAsIFBEMTFNRF8wMDEsIFBEMTFNRF8wMTAsIFBEMTFNRF8xMDAsIFBEMTFNRF8xMDEsCisJUEQxME1EXzAwMCwgUEQxME1EXzAwMSwgUEQxME1EXzAxMCwgUEQxME1EXzEwMCwgUEQxME1EXzEwMSwKKwlQRDlNRF8wMDAsIFBEOU1EXzAwMSwgUEQ5TURfMDEwLCBQRDlNRF8xMDAsIFBEOU1EXzEwMSwKKwlQRDhNRF8wMDAsIFBEOE1EXzAwMSwgUEQ4TURfMDEwLCBQRDhNRF8xMDAsIFBEOE1EXzEwMSwKKwlQRDdNRF8wMDAsIFBEN01EXzAwMSwgUEQ3TURfMDEwLCBQRDdNRF8wMTEsIFBEN01EXzEwMCwgUEQ3TURfMTAxLAorCVBENk1EXzAwMCwgUEQ2TURfMDAxLCBQRDZNRF8wMTAsIFBENk1EXzAxMSwgUEQ2TURfMTAwLCBQRDZNRF8xMDEsCisJUEQ1TURfMDAwLCBQRDVNRF8wMDEsIFBENU1EXzAxMCwgUEQ1TURfMDExLCBQRDVNRF8xMDAsIFBENU1EXzEwMSwKKwlQRDRNRF8wMDAsIFBENE1EXzAwMSwgUEQ0TURfMDEwLCBQRDRNRF8wMTEsIFBENE1EXzEwMCwgUEQ0TURfMTAxLAorCVBEM01EXzAwMCwgUEQzTURfMDAxLCBQRDNNRF8wMTAsIFBEM01EXzAxMSwgUEQzTURfMTAwLCBQRDNNRF8xMDEsCisJUEQyTURfMDAwLCBQRDJNRF8wMDEsIFBEMk1EXzAxMCwgUEQyTURfMDExLCBQRDJNRF8xMDAsIFBEMk1EXzEwMSwKKwlQRDFNRF8wMDAsIFBEMU1EXzAwMSwgUEQxTURfMDEwLCBQRDFNRF8wMTEsIFBEMU1EXzEwMCwgUEQxTURfMTAxLAorCVBEME1EXzAwMCwgUEQwTURfMDAxLCBQRDBNRF8wMTAsIFBEME1EXzAxMSwgUEQwTURfMTAwLCBQRDBNRF8xMDEsCisKKwlQRTE1TURfMDAsIFBFMTVNRF8wMSwgUEUxNU1EXzExLAorCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCBQRTE0TURfMTEsCisJUEUxM01EXzAwLCBQRTEzTURfMTEsCisJUEUxMk1EXzAwLCBQRTEyTURfMTEsCisJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgUEUxMU1EXzEwMCwKKwlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCBQRTEwTURfMTAwLAorCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwgUEU3TURfMTAwLAorCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwgUEU2TURfMTAwLAorCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwgUEU1TURfMTAwLAorCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwgUEU0TURfMTAwLAorCVBFM01EXzAwLCBQRTNNRF8wMSwgUEUzTURfMTEsCisJUEUyTURfMDAsIFBFMk1EXzAxLCBQRTJNRF8xMSwKKwlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwlQRTBNRF8wMDAsIFBFME1EXzAwMSwgUEUwTURfMDExLCBQRTBNRF8xMDAsCisKKwlQRjMwTURfMCwgUEYzME1EXzEsCisJUEYyOU1EXzAsIFBGMjlNRF8xLAorCVBGMjhNRF8wLCBQRjI4TURfMSwKKwlQRjI3TURfMCwgUEYyN01EXzEsCisJUEYyNk1EXzAsIFBGMjZNRF8xLAorCVBGMjVNRF8wLCBQRjI1TURfMSwKKwlQRjI0TURfMCwgUEYyNE1EXzEsCisJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwKKwlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLAorCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsCisJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwKKwlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLAorCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsCisJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwKKwlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLAorCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsCisJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwKKwlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLAorCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsCisJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwKKwlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLAorCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsCisJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwKKwlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOVDdfUEJfTUFSSywgUElOVDZfUEJfTUFSSywgUElOVDVfUEJfTUFSSywgUElOVDRfUEJfTUFSSywKKwlQSU5UM19QQl9NQVJLLCBQSU5UMl9QQl9NQVJLLCBQSU5UMV9QQl9NQVJLLCBQSU5UMF9QQl9NQVJLLAorCVBJTlQ3X1BEX01BUkssIFBJTlQ2X1BEX01BUkssIFBJTlQ1X1BEX01BUkssIFBJTlQ0X1BEX01BUkssCisJUElOVDNfUERfTUFSSywgUElOVDJfUERfTUFSSywgUElOVDFfUERfTUFSSywgUElOVDBfUERfTUFSSywKKwlJUlE3X1BCX01BUkssIElSUTZfUEJfTUFSSywgSVJRNV9QQl9NQVJLLCBJUlE0X1BCX01BUkssCisJSVJRM19QQl9NQVJLLCBJUlEyX1BCX01BUkssIElSUTFfUEJfTUFSSywgSVJRMF9QQl9NQVJLLAorCUlSUTdfUERfTUFSSywgSVJRNl9QRF9NQVJLLCBJUlE1X1BEX01BUkssIElSUTRfUERfTUFSSywKKwlJUlEzX1BEX01BUkssIElSUTJfUERfTUFSSywgSVJRMV9QRF9NQVJLLCBJUlEwX1BEX01BUkssCisJSVJRN19QRV9NQVJLLCBJUlE2X1BFX01BUkssIElSUTVfUEVfTUFSSywgSVJRNF9QRV9NQVJLLAorCUlSUTNfUEVfTUFSSywgSVJRMl9QRV9NQVJLLCBJUlExX1BFX01BUkssIElSUTBfUEVfTUFSSywKKwlXRFRPVkZfTUFSSywgSVJRT1VUX01BUkssIFJFRk9VVF9NQVJLLCBJUlFPVVRfUkVGT1VUX01BUkssCisJVUJDVFJHX01BUkssCisJQ1RYMV9NQVJLLCBDUlgxX01BUkssIENUWDBfTUFSSywgQ1RYMF9DVFgxX01BUkssCisJQ1JYMF9NQVJLLCBDUlgwX0NSWDFfTUFSSywKKwlTREEzX01BUkssIFNDTDNfTUFSSywKKwlTREEyX01BUkssIFNDTDJfTUFSSywKKwlTREExX01BUkssIFNDTDFfTUFSSywKKwlTREEwX01BUkssIFNDTDBfTUFSSywKKwlURU5EMF9QRF9NQVJLLCBURU5EMF9QRV9NQVJLLCBEQUNLMF9QRF9NQVJLLCBEQUNLMF9QRV9NQVJLLAorCURSRVEwX1BEX01BUkssIERSRVEwX1BFX01BUkssIFRFTkQxX1BEX01BUkssIFRFTkQxX1BFX01BUkssCisJREFDSzFfUERfTUFSSywgREFDSzFfUEVfTUFSSywgRFJFUTFfUERfTUFSSywgRFJFUTFfUEVfTUFSSywKKwlEQUNLMl9NQVJLLCBEUkVRMl9NQVJLLCBEQUNLM19NQVJLLCBEUkVRM19NQVJLLAorCUFEVFJHX1BEX01BUkssIEFEVFJHX1BFX01BUkssCisJRDMxX01BUkssIEQzMF9NQVJLLCBEMjlfTUFSSywgRDI4X01BUkssCisJRDI3X01BUkssIEQyNl9NQVJLLCBEMjVfTUFSSywgRDI0X01BUkssCisJRDIzX01BUkssIEQyMl9NQVJLLCBEMjFfTUFSSywgRDIwX01BUkssCisJRDE5X01BUkssIEQxOF9NQVJLLCBEMTdfTUFSSywgRDE2X01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIENTNF9NQVJLLCBNUkVTX01BUkssIEJTX01BUkssCisJSU9JUzE2X01BUkssIENTMV9NQVJLLCBDUzZfQ0UxQl9NQVJLLCBDRTJCX01BUkssCisJQ1M1X0NFMUFfTUFSSywgQ0UyQV9NQVJLLCBGUkFNRV9NQVJLLCBXQUlUX01BUkssCisJUkRXUl9NQVJLLCBDS0VfTUFSSywgQ0FTVV9NQVJLLAlCUkVRX01BUkssCisJUkFTVV9NQVJLLCBCQUNLX01BUkssIENBU0xfTUFSSywgUkFTTF9NQVJLLAorCVdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFdFMl9EUU1VTF9JQ0lPUkRfTUFSSywKKwlXRTFfRFFNTFVfV0VfTUFSSywgV0UwX0RRTUxMX01BUkssCisJQ1MzX01BUkssIENTMl9NQVJLLCBBMV9NQVJLLCBBMF9NQVJLLCBDUzdfTUFSSywKKwlUSU9DNERfTUFSSywgVElPQzRDX01BUkssIFRJT0M0Ql9NQVJLLCBUSU9DNEFfTUFSSywKKwlUSU9DM0RfTUFSSywgVElPQzNDX01BUkssIFRJT0MzQl9NQVJLLCBUSU9DM0FfTUFSSywKKwlUSU9DMkJfTUFSSywgVElPQzFCX01BUkssIFRJT0MyQV9NQVJLLCBUSU9DMUFfTUFSSywKKwlUSU9DMERfTUFSSywgVElPQzBDX01BUkssIFRJT0MwQl9NQVJLLCBUSU9DMEFfTUFSSywKKwlUQ0xLRF9QRF9NQVJLLCBUQ0xLQ19QRF9NQVJLLCBUQ0xLQl9QRF9NQVJLLCBUQ0xLQV9QRF9NQVJLLAorCVRDTEtEX1BGX01BUkssIFRDTEtDX1BGX01BUkssIFRDTEtCX1BGX01BUkssIFRDTEtBX1BGX01BUkssCisJU0NTMF9QRF9NQVJLLCBTU08wX1BEX01BUkssIFNTSTBfUERfTUFSSywgU1NDSzBfUERfTUFSSywKKwlTQ1MwX1BGX01BUkssIFNTTzBfUEZfTUFSSywgU1NJMF9QRl9NQVJLLCBTU0NLMF9QRl9NQVJLLAorCVNDUzFfUERfTUFSSywgU1NPMV9QRF9NQVJLLCBTU0kxX1BEX01BUkssIFNTQ0sxX1BEX01BUkssCisJU0NTMV9QRl9NQVJLLCBTU08xX1BGX01BUkssIFNTSTFfUEZfTUFSSywgU1NDSzFfUEZfTUFSSywKKwlUWEQwX01BUkssIFJYRDBfTUFSSywgU0NLMF9NQVJLLAorCVRYRDFfTUFSSywgUlhEMV9NQVJLLCBTQ0sxX01BUkssCisJVFhEMl9NQVJLLCBSWEQyX01BUkssIFNDSzJfTUFSSywKKwlSVFMzX01BUkssIENUUzNfTUFSSywgVFhEM19NQVJLLAorCVJYRDNfTUFSSywgU0NLM19NQVJLLAorCUFVRElPX0NMS19NQVJLLAorCVNTSURBVEEzX01BUkssIFNTSVdTM19NQVJLLCBTU0lTQ0szX01BUkssCisJU1NJREFUQTJfTUFSSywgU1NJV1MyX01BUkssIFNTSVNDSzJfTUFSSywKKwlTU0lEQVRBMV9NQVJLLCBTU0lXUzFfTUFSSywgU1NJU0NLMV9NQVJLLAorCVNTSURBVEEwX01BUkssIFNTSVdTMF9NQVJLLCBTU0lTQ0swX01BUkssCisJRkNFX01BUkssIEZSQl9NQVJLLAorCU5BRjdfTUFSSywgTkFGNl9NQVJLLCBOQUY1X01BUkssIE5BRjRfTUFSSywKKwlOQUYzX01BUkssIE5BRjJfTUFSSywgTkFGMV9NQVJLLCBOQUYwX01BUkssCisJRlNDX01BUkssIEZPRV9NQVJLLCBGQ0RFX01BUkssIEZXRV9NQVJLLAorCUxDRF9WRVBXQ19NQVJLLCBMQ0RfVkNQV0NfTUFSSywJTENEX0NMS19NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX01fRElTUF9NQVJLLCBMQ0RfQ0wyX01BUkssIExDRF9DTDFfTUFSSywgTENEX0RPTl9NQVJLLAorCUxDRF9EQVRBMTVfTUFSSywgTENEX0RBVEExNF9NQVJLLCBMQ0RfREFUQTEzX01BUkssIExDRF9EQVRBMTJfTUFSSywKKwlMQ0RfREFUQTExX01BUkssIExDRF9EQVRBMTBfTUFSSywgTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywgTENEX0RBVEE1X01BUkssIExDRF9EQVRBNF9NQVJLLAorCUxDRF9EQVRBM19NQVJLLCBMQ0RfREFUQTJfTUFSSywgTENEX0RBVEExX01BUkssIExDRF9EQVRBMF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSAqLworCVBJTk1VWF9EQVRBKFBBN19EQVRBLCBQQTdfSU4pLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4pLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4pLAorCVBJTk1VWF9EQVRBKFBBNF9EQVRBLCBQQTRfSU4pLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4pLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4pLAorCVBJTk1VWF9EQVRBKFBBMV9EQVRBLCBQQTFfSU4pLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4pLAorCisJLyogUEIgKi8KKwlQSU5NVVhfREFUQShQQjEyX0RBVEEsIFBCMTJNRF8wMCwgUEIxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFdEVE9WRl9NQVJLLCBQQjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDApLAorCVBJTk1VWF9EQVRBKFJFRk9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9SRUZPVVRfTUFSSywgUEIxMk1EXzEwLCBQQjEySVJRXzEwKSwKKwlQSU5NVVhfREFUQShVQkNUUkdfTUFSSywgUEIxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMTFfREFUQSwgUEIxMU1EXzAsIFBCMTFfSU4sIFBCMTFfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgxX01BUkssIFBCMTFNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCMTBfREFUQSwgUEIxME1EXzAsIFBCMTBfSU4sIFBCMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDUlgxX01BUkssIFBCMTBNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCOV9EQVRBLCBQQjlNRF8wMCwgUEI5X0lOLCBQQjlfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgwX01BUkssIFBCOU1EXzAxKSwKKwlQSU5NVVhfREFUQShDVFgwX0NUWDFfTUFSSywgUEI5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEI4X0RBVEEsIFBCOE1EXzAwLCBQQjhfSU4sIFBCOF9PVVQpLAorCVBJTk1VWF9EQVRBKENSWDBfTUFSSywgUEI4TURfMDEpLAorCVBJTk1VWF9EQVRBKENSWDBfQ1JYMV9NQVJLLCBQQjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQjdfREFUQSwgUEI3TURfMDAsIFBCN19JTiksCisJUElOTVVYX0RBVEEoU0RBM19NQVJLLCBQQjdNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDdfUEJfTUFSSywgUEI3TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTdfUEJfTUFSSywgUEI3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNk1EXzAwLCBQQjZfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDNfTUFSSywgUEI2TURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BCX01BUkssIFBCNk1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlE2X1BCX01BUkssIFBCNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVNRF8wMCwgUEI1X0lOKSwKKwlQSU5NVVhfREFUQShTREEyX01BUkssIFBCNk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QQl9NQVJLLCBQQjZNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRNV9QQl9NQVJLLCBQQjZNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjRfREFUQSwgUEI0TURfMDAsIFBCNF9JTiksCisJUElOTVVYX0RBVEEoU0NMMl9NQVJLLCBQQjRNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDRfUEJfTUFSSywgUEI0TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTRfUEJfTUFSSywgUEI0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM01EXzAwLCBQQjNfSU4pLAorCVBJTk1VWF9EQVRBKFNEQTFfTUFSSywgUEIzTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BCX01BUkssIFBCM01EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEzX1BCX01BUkssIFBCM01EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJNRF8wMCwgUEIyX0lOKSwKKwlQSU5NVVhfREFUQShTQ0wxX01BUkssIFBCMk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QQl9NQVJLLCBQQjJNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRMl9QQl9NQVJLLCBQQjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjFfREFUQSwgUEIxTURfMDAsIFBCMV9JTiksCisJUElOTVVYX0RBVEEoU0RBMF9NQVJLLCBQQjFNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDFfUEJfTUFSSywgUEIxTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTFfUEJfTUFSSywgUEIxTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCME1EXzAwLCBQQjBfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDBfTUFSSywgUEIwTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQwX1BCX01BUkssIFBCME1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEwX1BCX01BUkssIFBCME1EXzExKSwKKworCS8qIFBDICovCisJUElOTVVYX0RBVEEoUEMxNF9EQVRBLCBQQzE0TURfMCwgUEMxNF9JTiwgUEMxNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdBSVRfTUFSSywgUEMxNE1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxM19EQVRBLCBQQzEzTURfMCwgUEMxM19JTiwgUEMxM19PVVQpLAorCVBJTk1VWF9EQVRBKFJEV1JfTUFSSywgUEMxM01EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxMl9EQVRBLCBQQzEyTURfMCwgUEMxMl9JTiwgUEMxMl9PVVQpLAorCVBJTk1VWF9EQVRBKENLRV9NQVJLLCBQQzEyTURfMSksCisKKwlQSU5NVVhfREFUQShQQzExX0RBVEEsIFBDMTFNRF8wMCwgUEMxMV9JTiwgUEMxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENBU1VfTUFSSywgUEMxMU1EXzAxKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssIFBDMTFNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzEwX0RBVEEsIFBDMTBNRF8wMCwgUEMxMF9JTiwgUEMxMF9PVVQpLAorCVBJTk1VWF9EQVRBKFJBU1VfTUFSSywgUEMxME1EXzAxKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssIFBDMTBNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzlfREFUQSwgUEM5TURfMCwgUEM5X0lOLCBQQzlfT1VUKSwKKwlQSU5NVVhfREFUQShDQVNMX01BUkssIFBDOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM4X0RBVEEsIFBDOE1EXzAsIFBDOF9JTiwgUEM4X09VVCksCisJUElOTVVYX0RBVEEoUkFTTF9NQVJLLCBQQzhNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdNRF8wLCBQQzdfSU4sIFBDN19PVVQpLAorCVBJTk1VWF9EQVRBKFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFBDN01EXzEpLAorCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNk1EXzAsIFBDNl9JTiwgUEM2X09VVCksCisJUElOTVVYX0RBVEEoV0UyX0RRTVVMX0lDSU9SRF9NQVJLLCBQQzZNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNV9EQVRBLCBQQzVNRF8wLCBQQzVfSU4sIFBDNV9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMV9EUU1MVV9XRV9NQVJLLCBQQzVNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRNRF8wLCBQQzRfSU4sIFBDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMF9EUU1MTF9NQVJLLCBQQzRNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNNRF8wLCBQQzNfSU4sIFBDM19PVVQpLAorCVBJTk1VWF9EQVRBKENTM19NQVJLLCBQQzNNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMl9EQVRBLCBQQzJNRF8wLCBQQzJfSU4sIFBDMl9PVVQpLAorCVBJTk1VWF9EQVRBKENTMl9NQVJLLCBQQzJNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFNRF8wLCBQQzFfSU4sIFBDMV9PVVQpLAorCVBJTk1VWF9EQVRBKEExX01BUkssIFBDMU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDME1EXzAwLCBQQzBfSU4sIFBDMF9PVVQpLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBDME1EXzAxKSwKKwlQSU5NVVhfREFUQShDUzdfTUFSSywgUEMwTURfMTApLAorCisJLyogUEQgKi8KKwlQSU5NVVhfREFUQShQRDE1X0RBVEEsIFBEMTVNRF8wMDAsIFBEMTVfSU4sIFBEMTVfT1VUKSwKKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUEQxNU1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDdfUERfTUFSSywgUEQxNU1EXzAxMCksCisJUElOTVVYX0RBVEEoQURUUkdfUERfTUFSSywgUEQxNU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzREX01BUkssIFBEMTVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxNF9EQVRBLCBQRDE0TURfMDAwLCBQRDE0X0lOLCBQRDE0X09VVCksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBEMTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BEX01BUkssIFBEMTRNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRJT0M0Q19NQVJLLCBQRDE0TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTNfREFUQSwgUEQxM01EXzAwMCwgUEQxM19JTiwgUEQxM19PVVQpLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQRDEzTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QRF9NQVJLLCBQRDEzTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMV9QRF9NQVJLLCBQRDEzTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DNEJfTUFSSywgUEQxM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDEyX0RBVEEsIFBEMTJNRF8wMDAsIFBEMTJfSU4sIFBEMTJfT1VUKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUEQxMk1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDRfUERfTUFSSywgUEQxMk1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzFfUERfTUFSSywgUEQxMk1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzRBX01BUkssIFBEMTJNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxMV9EQVRBLCBQRDExTURfMDAwLCBQRDExX0lOLCBQRDExX09VVCksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBEMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BEX01BUkssIFBEMTFNRF8wMTApLAorCVBJTk1VWF9EQVRBKERSRVExX1BEX01BUkssIFBEMTFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzRF9NQVJLLCBQRDExTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTBfREFUQSwgUEQxME1EXzAwMCwgUEQxMF9JTiwgUEQxMF9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQRDEwTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QRF9NQVJLLCBQRDEwTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMF9QRF9NQVJLLCBQRDEwTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0NfTUFSSywgUEQxME1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDlfREFUQSwgUEQ5TURfMDAwLCBQRDlfSU4sIFBEOV9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQRDlNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQxX1BEX01BUkssIFBEOU1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzBfUERfTUFSSywgUEQ5TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0JfTUFSSywgUEQ5TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEOF9EQVRBLCBQRDhNRF8wMDAsIFBEOF9JTiwgUEQ4X09VVCksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBEOE1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDBfUERfTUFSSywgUEQ4TURfMDEwKSwKKwlQSU5NVVhfREFUQShEUkVRMF9QRF9NQVJLLCBQRDhNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzQV9NQVJLLCBQRDhNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN01EXzAwMCwgUEQ3X0lOLCBQRDdfT1VUKSwKKwlQSU5NVVhfREFUQShEMjNfTUFSSywgUEQ3TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE3X1BEX01BUkssIFBEN01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMV9QRF9NQVJLLCBQRDdNRF8wMTEpLAorCVBJTk1VWF9EQVRBKFRDTEtEX1BEX01BUkssIFBEN01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzJCX01BUkssIFBEN01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2TURfMDAwLCBQRDZfSU4sIFBENl9PVVQpLAorCVBJTk1VWF9EQVRBKEQyMl9NQVJLLCBQRDZNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUERfTUFSSywgUEQ2TURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BEX01BUkssIFBENk1EXzAxMSksCisJUElOTVVYX0RBVEEoVENMS0NfUERfTUFSSywgUEQ2TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMkFfTUFSSywgUEQ2TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVNRF8wMDAsIFBENV9JTiwgUEQ1X09VVCksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBENU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRNV9QRF9NQVJLLCBQRDVNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUERfTUFSSywgUEQ1TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQl9QRF9NQVJLLCBQRDVNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQl9NQVJLLCBQRDVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENE1EXzAwMCwgUEQ0X0lOLCBQRDRfT1VUKSwKKwlQSU5NVVhfREFUQShEMjBfTUFSSywgUEQ0TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE0X1BEX01BUkssIFBENE1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzFfUERfTUFSSywgUEQ0TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQV9QRF9NQVJLLCBQRDRNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQV9NQVJLLCBQRDRNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQzX0RBVEEsIFBEM01EXzAwMCwgUEQzX0lOLCBQRDNfT1VUKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUEQzTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEzX1BEX01BUkssIFBEM01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRF9NQVJLLCBQRDNNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0szX01BUkssIFBEM01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzBEX01BUkssIFBEM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDJfREFUQSwgUEQyTURfMDAwLCBQRDJfSU4sIFBEMl9PVVQpLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQRDJNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTJfUERfTUFSSywgUEQyTURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08wX1BEX01BUkssIFBEMk1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywgUEQyTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMENfTUFSSywgUEQyTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMV9EQVRBLCBQRDFNRF8wMDAsIFBEMV9JTiwgUEQxX09VVCksCisJUElOTVVYX0RBVEEoRDE3X01BUkssIFBEMU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMV9QRF9NQVJLLCBQRDFNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTBfUERfTUFSSywgUEQxTURfMDExKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLCBQRDFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQl9NQVJLLCBQRDFNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQwX0RBVEEsIFBEME1EXzAwMCwgUEQwX0lOLCBQRDBfT1VUKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUEQwTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEwX1BEX01BUkssIFBEME1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUERfTUFSSywgUEQwTURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLCBQRDBNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQV9NQVJLLCBQRDBNRF8xMDEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfREFUQShQRTE1X0RBVEEsIFBFMTVNRF8wMCwgUEUxNV9JTiwgUEUxNV9PVVQpLAorCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLCBQRTE1TURfMDEpLAorCVBJTk1VWF9EQVRBKFJUUzNfTUFSSywgUEUxNU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTRfREFUQSwgUEUxNE1EXzAwLCBQRTE0X0lOLCBQRTE0X09VVCksCisJUElOTVVYX0RBVEEoQ1MxX01BUkssIFBFMTRNRF8wMSksCisJUElOTVVYX0RBVEEoQ1RTM19NQVJLLCBQRTE0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUxM19EQVRBLCBQRTEzTURfMDAsIFBFMTNfSU4sIFBFMTNfT1VUKSwKKwlQSU5NVVhfREFUQShUWEQzX01BUkssIFBFMTNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTEyX0RBVEEsIFBFMTJNRF8wMCwgUEUxMl9JTiwgUEUxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFJYRDNfTUFSSywgUEUxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTFfREFUQSwgUEUxMU1EXzAwMCwgUEUxMV9JTiwgUEUxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENTNl9DRTFCX01BUkssIFBFMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTdfUEVfTUFSSywgUEUxMU1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDFfUEVfTUFSSywgUEUxMU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTEwX0RBVEEsIFBFMTBNRF8wMDAsIFBFMTBfSU4sIFBFMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssIFBFMTBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUEVfTUFSSywgUEUxME1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDBfUEVfTUFSSywgUEUxME1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTlfREFUQSwgUEU5TURfMDAsIFBFOV9JTiwgUEU5X09VVCksCisJUElOTVVYX0RBVEEoQ1M1X0NFMUFfTUFSSywgUEU5TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTVfUEVfTUFSSywgUEU5TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzNfTUFSSywgUEU5TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU4X0RBVEEsIFBFOE1EXzAwLCBQRThfSU4sIFBFOF9PVVQpLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywgUEU4TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTRfUEVfTUFSSywgUEU4TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzJfTUFSSywgUEU4TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN01EXzAwMCwgUEU3X0lOLCBQRTdfT1VUKSwKKwlQSU5NVVhfREFUQShGUkFNRV9NQVJLLCBQRTdNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTNfUEVfTUFSSywgUEU3TURfMDEwKSwKKwlQSU5NVVhfREFUQShUWEQyX01BUkssIFBFN01EXzAxMSksCisJUElOTVVYX0RBVEEoREFDSzFfUEVfTUFSSywgUEU3TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFNl9EQVRBLCBQRTZNRF8wMDAsIFBFNl9JTiwgUEU2X09VVCksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBFNk1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMl9QRV9NQVJLLCBQRTZNRF8wMTApLAorCVBJTk1VWF9EQVRBKFJYRDJfTUFSSywgUEU2TURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMV9QRV9NQVJLLCBQRTZNRF8xMDApLAorCisJUElOTVVYX0RBVEEoUEU1X0RBVEEsIFBFNU1EXzAwMCwgUEU1X0lOLCBQRTVfT1VUKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUEU1TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlExX1BFX01BUkssIFBFNU1EXzAxMCksCisJUElOTVVYX0RBVEEoVFhEMV9NQVJLLCBQRTVNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0swX1BFX01BUkssIFBFNU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTRfREFUQSwgUEU0TURfMDAwLCBQRTRfSU4sIFBFNF9PVVQpLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBQRTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTBfUEVfTUFSSywgUEU0TURfMDEwKSwKKwlQSU5NVVhfREFUQShSWEQxX01BUkssIFBFNE1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTBfUEVfTUFSSywgUEU0TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFM19EQVRBLCBQRTNNRF8wMCwgUEUzX0lOLCBQRTNfT1VUKSwKKwlQSU5NVVhfREFUQShBMjJfTUFSSywgUEUzTURfMDEpLAorCVBJTk1VWF9EQVRBKFNDSzFfTUFSSywgUEUzTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUyX0RBVEEsIFBFMk1EXzAwLCBQRTJfSU4sIFBFMl9PVVQpLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQRTJNRF8wMSksCisJUElOTVVYX0RBVEEoU0NLMF9NQVJLLCBQRTJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTFfREFUQSwgUEUxTURfMDAsIFBFMV9JTiwgUEUxX09VVCksCisJUElOTVVYX0RBVEEoQ1M0X01BUkssIFBFMU1EXzAxKSwKKwlQSU5NVVhfREFUQShNUkVTX01BUkssIFBFMU1EXzEwKSwKKwlQSU5NVVhfREFUQShUWEQwX01BUkssIFBFMU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMF9EQVRBLCBQRTBNRF8wMDAsIFBFMF9JTiwgUEUwX09VVCksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUEUwTURfMDAxKSwKKwlQSU5NVVhfREFUQShSWEQwX01BUkssIFBFME1EXzAxMSksCisJUElOTVVYX0RBVEEoQURUUkdfUEVfTUFSSywgUEUwTURfMTAwKSwKKworCS8qIFBGICovCisJUElOTVVYX0RBVEEoUEYzMF9EQVRBLCBQRjMwTURfMCwgUEYzMF9JTiwgUEYzMF9PVVQpLAorCVBJTk1VWF9EQVRBKEFVRElPX0NMS19NQVJLLCBQRjMwTURfMSksCisKKwlQSU5NVVhfREFUQShQRjI5X0RBVEEsIFBGMjlNRF8wLCBQRjI5X0lOLCBQRjI5X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTNfTUFSSywgUEYyOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyOF9EQVRBLCBQRjI4TURfMCwgUEYyOF9JTiwgUEYyOF9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTM19NQVJLLCBQRjI4TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI3X0RBVEEsIFBGMjdNRF8wLCBQRjI3X0lOLCBQRjI3X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLM19NQVJLLCBQRjI3TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI2X0RBVEEsIFBGMjZNRF8wLCBQRjI2X0lOLCBQRjI2X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTJfTUFSSywgUEYyNk1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyNV9EQVRBLCBQRjI1TURfMCwgUEYyNV9JTiwgUEYyNV9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMl9NQVJLLCBQRjI1TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI0X0RBVEEsIFBGMjRNRF8wLCBQRjI0X0lOLCBQRjI0X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLMl9NQVJLLCBQRjI0TURfMSksCisKKwlQSU5NVVhfREFUQShQRjIzX0RBVEEsIFBGMjNNRF8wMCwgUEYyM19JTiwgUEYyM19PVVQpLAorCVBJTk1VWF9EQVRBKFNTSURBVEExX01BUkssIFBGMjNNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBGMjNNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjIyX0RBVEEsIFBGMjJNRF8wMCwgUEYyMl9JTiwgUEYyMl9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMV9NQVJLLCBQRjIyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9WQ1BXQ19NQVJLLCBQRjIyTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMV9EQVRBLCBQRjIxTURfMDAsIFBGMjFfSU4sIFBGMjFfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0sxX01BUkssIFBGMjFNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMS19NQVJLLCBQRjIxTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMF9EQVRBLCBQRjIwTURfMDAsIFBGMjBfSU4sIFBGMjBfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lEQVRBMF9NQVJLLCBQRjIwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUEYyME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTlfREFUQSwgUEYxOU1EXzAwLCBQRjE5X0lOLCBQRjE5X09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MwX01BUkssIFBGMTlNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX01fRElTUF9NQVJLLCBQRjE5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxOF9EQVRBLCBQRjE4TURfMDAsIFBGMThfSU4sIFBGMThfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0swX01BUkssIFBGMThNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQRjE4TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxN19EQVRBLCBQRjE3TURfMDAsIFBGMTdfSU4sIFBGMTdfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUEYxN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfQ0wxX01BUkssIFBGMTdNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjE2X0RBVEEsIFBGMTZNRF8wMCwgUEYxNl9JTiwgUEYxNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLCBQRjE2TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9ET05fTUFSSywgUEYxNk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTVfREFUQSwgUEYxNU1EXzAwLCBQRjE1X0lOLCBQRjE1X09VVCksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQRjE1TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUEYxNU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTRfREFUQSwgUEYxNE1EXzAwLCBQRjE0X0lOLCBQRjE0X09VVCksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQRjE0TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTRfTUFSSywgUEYxNE1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTNfREFUQSwgUEYxM01EXzAwLCBQRjEzX0lOLCBQRjEzX09VVCksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQRjEzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTNfTUFSSywgUEYxM01EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTJfREFUQSwgUEYxMk1EXzAwLCBQRjEyX0lOLCBQRjEyX09VVCksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQRjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUEYxMk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTFfREFUQSwgUEYxMU1EXzAwLCBQRjExX0lOLCBQRjExX09VVCksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQRjExTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTFfTUFSSywgUEYxMU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTBfREFUQSwgUEYxME1EXzAwLCBQRjEwX0lOLCBQRjEwX09VVCksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQRjEwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTBfTUFSSywgUEYxME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGOV9EQVRBLCBQRjlNRF8wMCwgUEY5X0lOLCBQRjlfT1VUKSwKKwlQSU5NVVhfREFUQShOQUYxX01BUkssIFBGOU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTlfTUFSSywgUEY5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEY4X0RBVEEsIFBGOE1EXzAwLCBQRjhfSU4sIFBGOF9PVVQpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUEY4TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOF9NQVJLLCBQRjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3TURfMDAsIFBGN19JTiwgUEY3X09VVCksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBGN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTdfTUFSSywgUEY3TURfMTApLAorCVBJTk1VWF9EQVRBKFNDUzFfUEZfTUFSSywgUEY3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNk1EXzAwLCBQRjZfSU4sIFBGNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQRjZNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE2X01BUkssIFBGNk1EXzEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BGX01BUkssIFBGNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGNV9EQVRBLCBQRjVNRF8wMCwgUEY1X0lOLCBQRjVfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBGNU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUEY1TURfMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUEZfTUFSSywgUEY1TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY0X0RBVEEsIFBGNE1EXzAwLCBQRjRfSU4sIFBGNF9PVVQpLAorCVBJTk1VWF9EQVRBKEZXRV9NQVJLLCBQRjRNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBGNE1EXzEwKSwKKwlQSU5NVVhfREFUQShTU0NLMV9QRl9NQVJLLCBQRjRNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjNfREFUQSwgUEYzTURfMDAsIFBGM19JTiwgUEYzX09VVCksCisJUElOTVVYX0RBVEEoVENMS0RfUEZfTUFSSywgUEYzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQRjNNRF8xMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRl9NQVJLLCBQRjNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyTURfMDAsIFBGMl9JTiwgUEYyX09VVCksCisJUElOTVVYX0RBVEEoVENMS0NfUEZfTUFSSywgUEYyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMl9NQVJLLCBQRjJNRF8xMCksCisJUElOTVVYX0RBVEEoU1NPMF9QRl9NQVJLLCBQRjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxTURfMDAsIFBGMV9JTiwgUEYxX09VVCksCisJUElOTVVYX0RBVEEoVENMS0JfUEZfTUFSSywgUEYxTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMV9NQVJLLCBQRjFNRF8xMCksCisJUElOTVVYX0RBVEEoU1NJMF9QRl9NQVJLLCBQRjFNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjBfREFUQSwgUEYwTURfMDAsIFBGMF9JTiwgUEYwX09VVCksCisJUElOTVVYX0RBVEEoVENMS0FfUEZfTUFSSywgUEYwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQRjBNRF8xMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUEZfTUFSSywgUEYwTURfMTEpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCMTIsIFBCMTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjExLCBQQjExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIxMCwgUEIxMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCOSwgUEI5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI4LCBQQjhfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDMTQsIFBDMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEzLCBQQzEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxMiwgUEMxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMTEsIFBDMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEwLCBQQzEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM5LCBQQzlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzgsIFBDOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQxNSwgUEQxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTQsIFBEMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEzLCBQRDEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxMiwgUEQxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTEsIFBEMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEwLCBQRDEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ5LCBQRDlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDgsIFBEOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENywgUEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ2LCBQRDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDUsIFBENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENCwgUEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQzLCBQRDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDIsIFBEMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMSwgUEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQwLCBQRDBfREFUQSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEUxNSwgUEUxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTQsIFBFMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEzLCBQRTEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxMiwgUEUxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTEsIFBFMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEwLCBQRTEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU5LCBQRTlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTgsIFBFOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNywgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU2LCBQRTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUzLCBQRTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTIsIFBFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMSwgUEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUwLCBQRTBfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEYzMCwgUEYzMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjksIFBGMjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI4LCBQRjI4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNywgUEYyN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjYsIFBGMjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI1LCBQRjI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNCwgUEYyNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjMsIFBGMjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIyLCBQRjIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyMSwgUEYyMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjAsIFBGMjBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE5LCBQRjE5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxOCwgUEYxOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTcsIFBGMTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE2LCBQRjE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxNSwgUEYxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTQsIFBGMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEzLCBQRjEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxMiwgUEYxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTEsIFBGMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEwLCBQRjEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY5LCBQRjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjgsIFBGOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBJTlRDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QQiwgUElOVDdfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QQiwgUElOVDZfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QQiwgUElOVDVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QQiwgUElOVDRfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QQiwgUElOVDNfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QQiwgUElOVDJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QQiwgUElOVDFfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QQiwgUElOVDBfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QRCwgUElOVDdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QRCwgUElOVDZfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QRCwgUElOVDVfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QRCwgUElOVDRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QRCwgUElOVDNfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QRCwgUElOVDJfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QRCwgUElOVDFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QRCwgUElOVDBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE3X1BCLCBJUlE3X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNl9QQiwgSVJRNl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTVfUEIsIElSUTVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE0X1BCLCBJUlE0X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRM19QQiwgSVJRM19QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfUEIsIElSUTJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlExX1BCLCBJUlExX1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMF9QQiwgSVJRMF9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTdfUEQsIElSUTdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2X1BELCBJUlE2X1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNV9QRCwgSVJRNV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTRfUEQsIElSUTRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX1BELCBJUlEzX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMl9QRCwgSVJRMl9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTFfUEQsIElSUTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX1BELCBJUlEwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRN19QRSwgSVJRN19QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTZfUEUsIElSUTZfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1X1BFLCBJUlE1X1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNF9QRSwgSVJRNF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTNfUEUsIElSUTNfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyX1BFLCBJUlEyX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9QRSwgSVJRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTBfUEUsIElSUTBfUEVfTUFSSyksCisKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dEVE9WRiwgV0RUT1ZGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRT1VULCBJUlFPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVF9SRUZPVVQsIElSUU9VVF9SRUZPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VQkNUUkcsIFVCQ1RSR19NQVJLKSwKKworCS8qIENBTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMSwgQ1RYMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NSWDEsIENSWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFgwLCBDVFgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMF9DVFgxLCBDVFgwX0NUWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUlgwLCBDUlgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1JYMF9DUlgxLCBDUlgwX0NSWDFfTUFSSyksCisKKwkvKiBJSUMzICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEzLCBTREEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMywgU0NMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NEQTIsIFNEQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0wyLCBTQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RBMSwgU0RBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDTDEsIFNDTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEwLCBTREEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMCwgU0NMMF9NQVJLKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BELCBURU5EMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BFLCBURU5EMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BELCBEQUNLMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BFLCBEQUNLMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BELCBEUkVRMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BFLCBEUkVRMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BELCBURU5EMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BFLCBURU5EMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BELCBEQUNLMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BFLCBEQUNLMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BELCBEUkVRMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BFLCBEUkVRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0syLCBEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEyLCBEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLCBEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEzLCBEUkVRM19NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEQsIEFEVFJHX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEUsIEFEVFJHX1BFX01BUkspLAorCisJLyogQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMzEsIEQzMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMCwgRDMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI5LCBEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjgsIEQyOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNywgRDI3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI2LCBEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjUsIEQyNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNCwgRDI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIzLCBEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjIsIEQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMSwgRDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIwLCBEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTksIEQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOCwgRDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE3LCBEMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTYsIEQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyNSwgQTI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI0LCBBMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjMsIEEyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMiwgQTIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIxLCBBMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzQsIENTNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01SRVMsIE1SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsIElPSVMxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMSwgQ1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2X0NFMUIsIENTNl9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwgQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNV9DRTFBLCBDUzVfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NFMkEsIENFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkFNRSwgRlJBTUVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUkRXUiwgUkRXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NLRSwgQ0tFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0FTVSwgQ0FTVV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsIEJSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNVLCBSQVNVX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywgQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBU0wsIENBU0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNMLCBSQVNMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwgV0UyX0RRTVVMX0lDSU9SRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFMV9EUU1MVV9XRSwgV0UxX0RRTUxVX1dFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UwX0RRTUxMLCBXRTBfRFFNTExfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzMsIENTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMiwgQ1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTEsIEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTAsIEEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M3LCBDUzdfTUFSSyksCisKKwkvKiBUTVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0RCwgVElPQzREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzRDLCBUSU9DNENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DNEIsIFRJT0M0Ql9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0QSwgVElPQzRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNELCBUSU9DM0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DM0MsIFRJT0MzQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MzQiwgVElPQzNCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNBLCBUSU9DM0FfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMkIsIFRJT0MyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MxQiwgVElPQzFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzJBLCBUSU9DMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMUEsIFRJT0MxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwRCwgVElPQzBEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzBDLCBUSU9DMENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMEIsIFRJT0MwQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwQSwgVElPQzBBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEQsIFRDTEtEX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEQsIFRDTEtDX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEQsIFRDTEtCX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEQsIFRDTEtBX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEYsIFRDTEtEX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEYsIFRDTEtDX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEYsIFRDTEtCX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEYsIFRDTEtBX1BGX01BUkspLAorCisJLyogU1NVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BELCBTQ1MwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRCwgU1NPMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEQsIFNTSTBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRCwgU1NDSzBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BGLCBTQ1MwX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRiwgU1NPMF9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEYsIFNTSTBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRiwgU1NDSzBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BELCBTQ1MxX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRCwgU1NPMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEQsIFNTSTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRCwgU1NDSzFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BGLCBTQ1MxX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRiwgU1NPMV9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEYsIFNTSTFfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRiwgU1NDSzFfUEZfTUFSSyksCisKKwkvKiBTQ0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQwLCBUWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMCwgUlhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzAsIFNDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQxLCBUWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMSwgUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzEsIFNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQyLCBUWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMiwgUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzIsIFNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SVFMzLCBSVFMzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RTMywgQ1RTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDMsIFRYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQzLCBSWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMywgU0NLM19NQVJLKSwKKworCS8qIFNTSSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVESU9fQ0xLLCBBVURJT19DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMywgU1NJREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzMsIFNTSVdTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzMsIFNTSVNDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMiwgU1NJREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzIsIFNTSVdTMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzIsIFNTSVNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMSwgU1NJREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzEsIFNTSVdTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzEsIFNTSVNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMCwgU1NJREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzAsIFNTSVdTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzAsIFNTSVNDSzBfTUFSSyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNFLCBGQ0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsIEZSQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GT0UsIEZPRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDREUsIEZDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0xLLCBMQ0RfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9NX0RJU1AsIExDRF9NX0RJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0wyLCBMQ0RfQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9ET04sIExDRF9ET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTE1LCBMQ0RfREFUQTE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNCwgTENEX0RBVEExNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTMsIExDRF9EQVRBMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEyLCBMQ0RfREFUQTEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMSwgTENEX0RBVEExMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTAsIExDRF9EQVRBMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTksIExDRF9EQVRBOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBOCwgTENEX0RBVEE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE3LCBMQ0RfREFUQTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTYsIExDRF9EQVRBNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNSwgTENEX0RBVEE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE0LCBMQ0RfREFUQTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTMsIExDRF9EQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMiwgTENEX0RBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExLCBMQ0RfREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTAsIExDRF9EQVRBMF9NQVJLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJJT1JMIiwgMHhmZmZlMzg4NiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUEIxMV9JTiwgUEIxMV9PVVQsCisJCVBCMTBfSU4sIFBCMTBfT1VULAorCQlQQjlfSU4sIFBCOV9PVVQsCisJCVBCOF9JTiwgUEI4X09VVCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDQiLCAweGZmZmUzODkwLCAxNiwgNCkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwzIiwgMHhmZmZlMzg5MiwgMTYsIDQpIHsKKwkJUEIxMU1EXzAsIFBCMTFNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTBNRF8wLCBQQjEwTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwyIiwgMHhmZmZlMzg5NCwgMTYsIDQpIHsKKwkJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwxIiwgMHhmZmZlMzg5NiwgMTYsIDQpIHsKKwkJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSUZDUiIsIDB4ZmZmZTM4YTIsIDE2LCA0KSB7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTJJUlFfMDAsIFBCMTJJUlFfMDEsIFBCMTJJUlFfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENJT1JMIiwgMHhmZmZlMzkwNiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEMxNF9JTiwgUEMxNF9PVVQsCisJCVBDMTNfSU4sIFBDMTNfT1VULAorCQlQQzEyX0lOLCBQQzEyX09VVCwKKwkJUEMxMV9JTiwgUEMxMV9PVVQsCisJCVBDMTBfSU4sIFBDMTBfT1VULAorCQlQQzlfSU4sIFBDOV9PVVQsCisJCVBDOF9JTiwgUEM4X09VVCwKKwkJUEM3X0lOLCBQQzdfT1VULAorCQlQQzZfSU4sIFBDNl9PVVQsCisJCVBDNV9JTiwgUEM1X09VVCwKKwkJUEM0X0lOLCBQQzRfT1VULAorCQlQQzNfSU4sIFBDM19PVVQsCisJCVBDMl9JTiwgUEMyX09VVCwKKwkJUEMxX0lOLCBQQzFfT1VULAorCQlQQzBfSU4sIFBDMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkw0IiwgMHhmZmZlMzkxMCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzE0TURfMCwgUEMxNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxM01EXzAsIFBDMTNNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTJNRF8wLCBQQzEyTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSTDMiLCAweGZmZmUzOTEyLCAxNiwgNCkgeworCQlQQzExTURfMDAsIFBDMTFNRF8wMSwgUEMxMU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTBNRF8wMCwgUEMxME1EXzAxLCBQQzEwTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM5TURfMCwgUEM5TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzhNRF8wLCBQQzhNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1JMMiIsIDB4ZmZmZTM5MTQsIDE2LCA0KSB7CisJCVBDN01EXzAsIFBDN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM2TURfMCwgUEM2TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzVNRF8wLCBQQzVNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDNE1EXzAsIFBDNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkwxIiwgMHhmZmZlMzkxNiwgMTYsIDQpIHsKKwkJUEMzTURfMCwgUEMzTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzJNRF8wLCBQQzJNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMU1EXzAsIFBDMU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMwTURfMDAsIFBDME1EXzAxLCBQQzBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRElPUkwiLCAweGZmZmUzOTg2LCAxNiwgMSkgeworCQlQRDE1X0lOLCBQRDE1X09VVCwKKwkJUEQxNF9JTiwgUEQxNF9PVVQsCisJCVBEMTNfSU4sIFBEMTNfT1VULAorCQlQRDEyX0lOLCBQRDEyX09VVCwKKwkJUEQxMV9JTiwgUEQxMV9PVVQsCisJCVBEMTBfSU4sIFBEMTBfT1VULAorCQlQRDlfSU4sIFBEOV9PVVQsCisJCVBEOF9JTiwgUEQ4X09VVCwKKwkJUEQ3X0lOLCBQRDdfT1VULAorCQlQRDZfSU4sIFBENl9PVVQsCisJCVBENV9JTiwgUEQ1X09VVCwKKwkJUEQ0X0lOLCBQRDRfT1VULAorCQlQRDNfSU4sIFBEM19PVVQsCisJCVBEMl9JTiwgUEQyX09VVCwKKwkJUEQxX0lOLCBQRDFfT1VULAorCQlQRDBfSU4sIFBEMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkw0IiwgMHhmZmZlMzk5MCwgMTYsIDQpIHsKKwkJUEQxNU1EXzAwMCwgUEQxNU1EXzAwMSwgUEQxNU1EXzAxMCwgMCwKKwkJUEQxNU1EXzEwMCwgUEQxNU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDE0TURfMDAwLCBQRDE0TURfMDAxLCBQRDE0TURfMDEwLCAwLAorCQkwLCBQRDE0TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTNNRF8wMDAsIFBEMTNNRF8wMDEsIFBEMTNNRF8wMTAsIDAsCisJCVBEMTNNRF8xMDAsIFBEMTNNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxMk1EXzAwMCwgUEQxMk1EXzAwMSwgUEQxMk1EXzAxMCwgMCwKKwkJUEQxMk1EXzEwMCwgUEQxMk1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDMiLCAweGZmZmUzOTkyLCAxNiwgNCkgeworCQlQRDExTURfMDAwLCBQRDExTURfMDAxLCBQRDExTURfMDEwLCAwLAorCQlQRDExTURfMTAwLCBQRDExTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTBNRF8wMDAsIFBEMTBNRF8wMDEsIFBEMTBNRF8wMTAsIDAsCisJCVBEMTBNRF8xMDAsIFBEMTBNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ5TURfMDAwLCBQRDlNRF8wMDEsIFBEOU1EXzAxMCwgMCwKKwkJUEQ5TURfMTAwLCBQRDlNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ4TURfMDAwLCBQRDhNRF8wMDEsIFBEOE1EXzAxMCwgMCwKKwkJUEQ4TURfMTAwLCBQRDhNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkwyIiwgMHhmZmZlMzk5NCwgMTYsIDQpIHsKKwkJUEQ3TURfMDAwLCBQRDdNRF8wMDEsIFBEN01EXzAxMCwgUEQ3TURfMDExLAorCQlQRDdNRF8xMDAsIFBEN01EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDZNRF8wMDAsIFBENk1EXzAwMSwgUEQ2TURfMDEwLCBQRDZNRF8wMTEsCisJCVBENk1EXzEwMCwgUEQ2TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBENU1EXzAwMCwgUEQ1TURfMDAxLCBQRDVNRF8wMTAsIFBENU1EXzAxMSwKKwkJUEQ1TURfMTAwLCBQRDVNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ0TURfMDAwLCBQRDRNRF8wMDEsIFBENE1EXzAxMCwgUEQ0TURfMDExLAorCQlQRDRNRF8xMDAsIFBENE1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDEiLCAweGZmZmUzOTk2LCAxNiwgNCkgeworCQlQRDNNRF8wMDAsIFBEM01EXzAwMSwgUEQzTURfMDEwLCBQRDNNRF8wMTEsCisJCVBEM01EXzEwMCwgUEQzTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMk1EXzAwMCwgUEQyTURfMDAxLCBQRDJNRF8wMTAsIFBEMk1EXzAxMSwKKwkJUEQyTURfMTAwLCBQRDJNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxTURfMDAwLCBQRDFNRF8wMDEsIFBEMU1EXzAxMCwgUEQxTURfMDExLAorCQlQRDFNRF8xMDAsIFBEMU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDBNRF8wMDAsIFBEME1EXzAwMSwgUEQwTURfMDEwLCBQRDBNRF8wMTEsCisJCVBEME1EXzEwMCwgUEQwTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFSU9STCIsIDB4ZmZmZTNhMDYsIDE2LCAxKSB7CisJCVBFMTVfSU4sIFBFMTVfT1VULAorCQlQRTE0X0lOLCBQRTE0X09VVCwKKwkJUEUxM19JTiwgUEUxM19PVVQsCisJCVBFMTJfSU4sIFBFMTJfT1VULAorCQlQRTExX0lOLCBQRTExX09VVCwKKwkJUEUxMF9JTiwgUEUxMF9PVVQsCisJCVBFOV9JTiwgUEU5X09VVCwKKwkJUEU4X0lOLCBQRThfT1VULAorCQlQRTdfSU4sIFBFN19PVVQsCisJCVBFNl9JTiwgUEU2X09VVCwKKwkJUEU1X0lOLCBQRTVfT1VULAorCQlQRTRfSU4sIFBFNF9PVVQsCisJCVBFM19JTiwgUEUzX09VVCwKKwkJUEUyX0lOLCBQRTJfT1VULAorCQlQRTFfSU4sIFBFMV9PVVQsCisJCVBFMF9JTiwgUEUwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSTDQiLCAweGZmZmUzYTEwLCAxNiwgNCkgeworCQlQRTE1TURfMDAsIFBFMTVNRF8wMSwgMCwgUEUxNU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCAwLCBQRTE0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxM01EXzAwLCAwLCAwLCBQRTEzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxMk1EXzAwLCAwLCAwLCBQRTEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUkwzIiwgMHhmZmZlM2ExMiwgMTYsIDQpIHsKKwkJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgMCwKKwkJUEUxMU1EXzEwMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCAwLAorCQlQRTEwTURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMiIsIDB4ZmZmZTNhMTQsIDE2LCA0KSB7CisJCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwKKwkJUEU3TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwKKwkJUEU2TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwKKwkJUEU1TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwKKwkJUEU0TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMSIsIDB4ZmZmZTNhMTYsIDE2LCA0KSB7CisJCVBFM01EXzAwLCBQRTNNRF8wMSwgMCwgUEUzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUyTURfMDAsIFBFMk1EXzAxLCAwLCBQRTJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTBNRF8wMDAsIFBFME1EXzAwMSwgMCwgUEUwTURfMDExLAorCQlQRTBNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZJT1JIIiwgMHhmZmZlM2E4NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEYzMF9JTiwgUEYzMF9PVVQsCisJCVBGMjlfSU4sIFBGMjlfT1VULAorCQlQRjI4X0lOLCBQRjI4X09VVCwKKwkJUEYyN19JTiwgUEYyN19PVVQsCisJCVBGMjZfSU4sIFBGMjZfT1VULAorCQlQRjI1X0lOLCBQRjI1X09VVCwKKwkJUEYyNF9JTiwgUEYyNF9PVVQsCisJCVBGMjNfSU4sIFBGMjNfT1VULAorCQlQRjIyX0lOLCBQRjIyX09VVCwKKwkJUEYyMV9JTiwgUEYyMV9PVVQsCisJCVBGMjBfSU4sIFBGMjBfT1VULAorCQlQRjE5X0lOLCBQRjE5X09VVCwKKwkJUEYxOF9JTiwgUEYxOF9PVVQsCisJCVBGMTdfSU4sIFBGMTdfT1VULAorCQlQRjE2X0lOLCBQRjE2X09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRklPUkwiLCAweGZmZmUzYTg2LCAxNiwgMSkgeworCQlQRjE1X0lOLCBQRjE1X09VVCwKKwkJUEYxNF9JTiwgUEYxNF9PVVQsCisJCVBGMTNfSU4sIFBGMTNfT1VULAorCQlQRjEyX0lOLCBQRjEyX09VVCwKKwkJUEYxMV9JTiwgUEYxMV9PVVQsCisJCVBGMTBfSU4sIFBGMTBfT1VULAorCQlQRjlfSU4sIFBGOV9PVVQsCisJCVBGOF9JTiwgUEY4X09VVCwKKwkJUEY3X0lOLCBQRjdfT1VULAorCQlQRjZfSU4sIFBGNl9PVVQsCisJCVBGNV9JTiwgUEY1X09VVCwKKwkJUEY0X0lOLCBQRjRfT1VULAorCQlQRjNfSU4sIFBGM19PVVQsCisJCVBGMl9JTiwgUEYyX09VVCwKKwkJUEYxX0lOLCBQRjFfT1VULAorCQlQRjBfSU4sIFBGMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkg0IiwgMHhmZmZlM2E4OCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjMwTURfMCwgUEYzME1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyOU1EXzAsIFBGMjlNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjhNRF8wLCBQRjI4TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDMiLCAweGZmZmUzYThhLCAxNiwgNCkgeworCQlQRjI3TURfMCwgUEYyN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyNk1EXzAsIFBGMjZNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjVNRF8wLCBQRjI1TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjI0TURfMCwgUEYyNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkgyIiwgMHhmZmZlM2E4YywgMTYsIDQpIHsKKwkJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDEiLCAweGZmZmUzYThlLCAxNiwgNCkgeworCQlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JMNCIsIDB4ZmZmZTNhOTAsIDE2LCA0KSB7CisJCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkwzIiwgMHhmZmZlM2E5MiwgMTYsIDQpIHsKKwkJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDIiLCAweGZmZmUzYTk0LCAxNiwgNCkgeworCQlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDEiLCAweGZmZmUzYTk2LCAxNiwgNCkgeworCQlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSTCIsIDB4ZmZmZTM4MDIsIDE2KSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCQlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUkwiLCAweGZmZmUzODgyLCAxNikgeworCQkwLCAwLCAwLCBQQjEyX0RBVEEsCisJCVBCMTFfREFUQSwgUEIxMF9EQVRBLCBQQjlfREFUQSwgUEI4X0RBVEEsCisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUkwiLCAweGZmZmUzOTAyLCAxNikgeworCQkwLCBQQzE0X0RBVEEsIFBDMTNfREFUQSwgUEMxMl9EQVRBLAorCQlQQzExX0RBVEEsIFBDMTBfREFUQSwgUEM5X0RBVEEsIFBDOF9EQVRBLAorCQlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwkJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBERFJMIiwgMHhmZmZlMzk4MiwgMTYpIHsKKwkJUEQxNV9EQVRBLCBQRDE0X0RBVEEsIFBEMTNfREFUQSwgUEQxMl9EQVRBLAorCQlQRDExX0RBVEEsIFBEMTBfREFUQSwgUEQ5X0RBVEEsIFBEOF9EQVRBLAorCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFJMIiwgMHhmZmZlM2EwMiwgMTYpIHsKKwkJUEUxNV9EQVRBLCBQRTE0X0RBVEEsIFBFMTNfREFUQSwgUEUxMl9EQVRBLAorCQlQRTExX0RBVEEsIFBFMTBfREFUQSwgUEU5X0RBVEEsIFBFOF9EQVRBLAorCQlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwkJUEUzX0RBVEEsIFBFMl9EQVRBLCBQRTFfREFUQSwgUEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFJIIiwgMHhmZmZlM2E4MCwgMTYpIHsKKwkJMCwgUEYzMF9EQVRBLCBQRjI5X0RBVEEsIFBGMjhfREFUQSwKKwkJUEYyN19EQVRBLCBQRjI2X0RBVEEsIFBGMjVfREFUQSwgUEYyNF9EQVRBLAorCQlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJCVBGMTlfREFUQSwgUEYxOF9EQVRBLCBQRjE3X0RBVEEsIFBGMTZfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUkwiLCAweGZmZmUzYTgyLCAxNikgeworCQlQRjE1X0RBVEEsIFBGMTRfREFUQSwgUEYxM19EQVRBLCBQRjEyX0RBVEEsCisJCVBGMTFfREFUQSwgUEYxMF9EQVRBLCBQRjlfREFUQSwgUEY4X0RBVEEsCisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzIwM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDcyMDNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9MQ0RfREFUQTAsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDcyMDNfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IDUxMWRlNTUuLmUwN2M2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtMjQsNCArMjQsOCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQk6PSBjbG9jay1zaDc3MTAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQk6PSBjbG9jay1zaDc3MTIubwogCisjIFBpbm11eCBzZXR1cAorcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkJOj0gcGlubXV4LXNoNzcyMC5vCisKIG9iai15CSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcGlubXV4LXNoNzcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYwpAQCAtMCwwICsxLDEyNDIgQEAKKy8qCisgKiBTSDc3MjAgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIwLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM2X0RBVEEsIFBUQzVfREFUQSwgUFRDNF9EQVRBLAorCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBLAorCVBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBLAorCVBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEo0X0RBVEEsCisJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsIFBUTDNfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUUDRfREFUQSwgUFRQM19EQVRBLCBQVFAyX0RBVEEsIFBUUDFfREFUQSwgUFRQMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTNF9EQVRBLCBQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNF9EQVRBLCBQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEsCisJUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWNF9EQVRBLCBQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBUQTdfSU4sIFBUQTZfSU4sIFBUQTVfSU4sIFBUQTRfSU4sCisJUFRBM19JTiwgUFRBMl9JTiwgUFRBMV9JTiwgUFRBMF9JTiwKKwlQVEI3X0lOLCBQVEI2X0lOLCBQVEI1X0lOLCBQVEI0X0lOLAorCVBUQjNfSU4sIFBUQjJfSU4sIFBUQjFfSU4sIFBUQjBfSU4sCisJUFRDN19JTiwgUFRDNl9JTiwgUFRDNV9JTiwgUFRDNF9JTiwKKwlQVEMzX0lOLCBQVEMyX0lOLCBQVEMxX0lOLCBQVEMwX0lOLAorCVBURDdfSU4sIFBURDZfSU4sIFBURDVfSU4sIFBURDRfSU4sCisJUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwgUFREMF9JTiwKKwlQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLAorCVBURTNfSU4sIFBURTJfSU4sIFBURTFfSU4sIFBURTBfSU4sCisJUFRGNl9JTiwgUFRGNV9JTiwgUFRGNF9JTiwKKwlQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLCBQVEYwX0lOLAorCVBURzZfSU4sIFBURzVfSU4sIFBURzRfSU4sCisJUFRHM19JTiwgUFRHMl9JTiwgUFRHMV9JTiwgUFRHMF9JTiwKKwlQVEg2X0lOLCBQVEg1X0lOLCBQVEg0X0lOLAorCVBUSDNfSU4sIFBUSDJfSU4sIFBUSDFfSU4sIFBUSDBfSU4sCisJUFRKNl9JTiwgUFRKNV9JTiwgUFRKNF9JTiwKKwlQVEozX0lOLCBQVEoyX0lOLCBQVEoxX0lOLCBQVEowX0lOLAorCVBUSzNfSU4sIFBUSzJfSU4sIFBUSzFfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwgUFRMM19JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRQNF9JTiwgUFRQM19JTiwgUFRQMl9JTiwgUFRQMV9JTiwgUFRQMF9JTiwKKwlQVFI3X0lOLCBQVFI2X0lOLCBQVFI1X0lOLCBQVFI0X0lOLAorCVBUUjNfSU4sIFBUUjJfSU4sIFBUUjFfSU4sIFBUUjBfSU4sCisJUFRTNF9JTiwgUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWNF9JTiwgUFRWM19JTiwgUFRWMl9JTiwgUFRWMV9JTiwgUFRWMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE3X0lOX1BVLCBQVEE2X0lOX1BVLCBQVEE1X0lOX1BVLCBQVEE0X0lOX1BVLAorCVBUQTNfSU5fUFUsIFBUQTJfSU5fUFUsIFBUQTFfSU5fUFUsIFBUQTBfSU5fUFUsCisJUFRCN19JTl9QVSwgUFRCNl9JTl9QVSwgUFRCNV9JTl9QVSwgUFRCNF9JTl9QVSwKKwlQVEIzX0lOX1BVLCBQVEIyX0lOX1BVLCBQVEIxX0lOX1BVLCBQVEIwX0lOX1BVLAorCVBUQzdfSU5fUFUsIFBUQzZfSU5fUFUsIFBUQzVfSU5fUFUsIFBUQzRfSU5fUFUsCisJUFRDM19JTl9QVSwgUFRDMl9JTl9QVSwgUFRDMV9JTl9QVSwgUFRDMF9JTl9QVSwKKwlQVEQ3X0lOX1BVLCBQVEQ2X0lOX1BVLCBQVEQ1X0lOX1BVLCBQVEQ0X0lOX1BVLAorCVBURDNfSU5fUFUsIFBURDJfSU5fUFUsIFBURDFfSU5fUFUsIFBURDBfSU5fUFUsCisJUFRFNF9JTl9QVSwgUFRFM19JTl9QVSwgUFRFMl9JTl9QVSwgUFRFMV9JTl9QVSwgUFRFMF9JTl9QVSwKKwlQVEYwX0lOX1BVLAorCVBURzZfSU5fUFUsIFBURzVfSU5fUFUsIFBURzRfSU5fUFUsCisJUFRHM19JTl9QVSwgUFRHMl9JTl9QVSwgUFRHMV9JTl9QVSwgUFRHMF9JTl9QVSwKKwlQVEg2X0lOX1BVLCBQVEg1X0lOX1BVLCBQVEg0X0lOX1BVLAorCVBUSDNfSU5fUFUsIFBUSDJfSU5fUFUsIFBUSDFfSU5fUFUsIFBUSDBfSU5fUFUsCisJUFRKNl9JTl9QVSwgUFRKNV9JTl9QVSwgUFRKNF9JTl9QVSwKKwlQVEozX0lOX1BVLCBQVEoyX0lOX1BVLCBQVEoxX0lOX1BVLCBQVEowX0lOX1BVLAorCVBUSzNfSU5fUFUsIFBUSzJfSU5fUFUsIFBUSzFfSU5fUFUsIFBUSzBfSU5fUFUsCisJUFRMN19JTl9QVSwgUFRMNl9JTl9QVSwgUFRMNV9JTl9QVSwgUFRMNF9JTl9QVSwgUFRMM19JTl9QVSwKKwlQVE03X0lOX1BVLCBQVE02X0lOX1BVLCBQVE01X0lOX1BVLCBQVE00X0lOX1BVLAorCVBUTTNfSU5fUFUsIFBUTTJfSU5fUFUsIFBUTTFfSU5fUFUsIFBUTTBfSU5fUFUsCisJUFRQNF9JTl9QVSwgUFRQM19JTl9QVSwgUFRQMl9JTl9QVSwgUFRQMV9JTl9QVSwgUFRQMF9JTl9QVSwKKwlQVFI3X0lOX1BVLCBQVFI2X0lOX1BVLCBQVFI1X0lOX1BVLCBQVFI0X0lOX1BVLAorCVBUUjNfSU5fUFUsIFBUUjJfSU5fUFUsIFBUUjFfSU5fUFUsIFBUUjBfSU5fUFUsCisJUFRTNF9JTl9QVSwgUFRTM19JTl9QVSwgUFRTMl9JTl9QVSwgUFRTMV9JTl9QVSwgUFRTMF9JTl9QVSwKKwlQVFQ0X0lOX1BVLCBQVFQzX0lOX1BVLCBQVFQyX0lOX1BVLCBQVFQxX0lOX1BVLCBQVFQwX0lOX1BVLAorCVBUVTRfSU5fUFUsIFBUVTNfSU5fUFUsIFBUVTJfSU5fUFUsIFBUVTFfSU5fUFUsIFBUVTBfSU5fUFUsCisJUFRWNF9JTl9QVSwgUFRWM19JTl9QVSwgUFRWMl9JTl9QVSwgUFRWMV9JTl9QVSwgUFRWMF9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNF9PVVQsIFBURTNfT1VULCBQVEUyX09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjBfT1VULAorCVBURzZfT1VULCBQVEc1X09VVCwgUFRHNF9PVVQsCisJUFRHM19PVVQsIFBURzJfT1VULCBQVEcxX09VVCwgUFRHMF9PVVQsCisJUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjRfT1VULAorCVBUSjNfT1VULCBQVEoyX09VVCwgUFRKMV9PVVQsIFBUSjBfT1VULAorCVBUSzNfT1VULCBQVEsyX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULCBQVEwzX09VVCwKKwlQVE03X09VVCwgUFRNNl9PVVQsIFBUTTVfT1VULCBQVE00X09VVCwKKwlQVE0zX09VVCwgUFRNMl9PVVQsIFBUTTFfT1VULCBQVE0wX09VVCwKKwlQVFA0X09VVCwgUFRQM19PVVQsIFBUUDJfT1VULCBQVFAxX09VVCwgUFRQMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSM19PVVQsIFBUUjJfT1VULCBQVFIxX09VVCwgUFRSMF9PVVQsCisJUFRTNF9PVVQsIFBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDRfT1VULCBQVFQzX09VVCwgUFRUMl9PVVQsIFBUVDFfT1VULCBQVFQwX09VVCwKKwlQVFU0X09VVCwgUFRVM19PVVQsIFBUVTJfT1VULCBQVFUxX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBUQTdfRk4sIFBUQTZfRk4sIFBUQTVfRk4sIFBUQTRfRk4sCisJUFRBM19GTiwgUFRBMl9GTiwgUFRBMV9GTiwgUFRBMF9GTiwKKwlQVEI3X0ZOLCBQVEI2X0ZOLCBQVEI1X0ZOLCBQVEI0X0ZOLAorCVBUQjNfRk4sIFBUQjJfRk4sIFBUQjFfRk4sIFBUQjBfRk4sCisJUFRDN19GTiwgUFRDNl9GTiwgUFRDNV9GTiwgUFRDNF9GTiwKKwlQVEMzX0ZOLCBQVEMyX0ZOLCBQVEMxX0ZOLCBQVEMwX0ZOLAorCVBURDdfRk4sIFBURDZfRk4sIFBURDVfRk4sIFBURDRfRk4sCisJUFREM19GTiwgUFREMl9GTiwgUFREMV9GTiwgUFREMF9GTiwKKwlQVEU2X0ZOLCBQVEU1X0ZOLCBQVEU0X0ZOLAorCVBURTNfRk4sIFBURTJfRk4sIFBURTFfRk4sIFBURTBfRk4sCisJUFRGNl9GTiwgUFRGNV9GTiwgUFRGNF9GTiwKKwlQVEYzX0ZOLCBQVEYyX0ZOLCBQVEYxX0ZOLCBQVEYwX0ZOLAorCVBURzZfRk4sIFBURzVfRk4sIFBURzRfRk4sCisJUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKNl9GTiwgUFRKNV9GTiwgUFRKNF9GTiwKKwlQVEozX0ZOLCBQVEoyX0ZOLCBQVEoxX0ZOLCBQVEowX0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwgUFRMM19GTiwKKwlQVE03X0ZOLCBQVE02X0ZOLCBQVE01X0ZOLCBQVE00X0ZOLAorCVBUTTNfRk4sIFBUTTJfRk4sIFBUTTFfRk4sIFBUTTBfRk4sCisJUFRQNF9GTiwgUFRQM19GTiwgUFRQMl9GTiwgUFRQMV9GTiwgUFRQMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTNF9GTiwgUFRTM19GTiwgUFRTMl9GTiwgUFRTMV9GTiwgUFRTMF9GTiwKKwlQVFQ0X0ZOLCBQVFQzX0ZOLCBQVFQyX0ZOLCBQVFQxX0ZOLCBQVFQwX0ZOLAorCVBUVTRfRk4sIFBUVTNfRk4sIFBUVTJfRk4sIFBUVTFfRk4sIFBUVTBfRk4sCisJUFRWNF9GTiwgUFRWM19GTiwgUFRWMl9GTiwgUFRWMV9GTiwgUFRWMF9GTiwKKworCVBTRUxBXzFfMF8wMCwgUFNFTEFfMV8wXzAxLCBQU0VMQV8xXzBfMTAsCisJUFNFTEFfM18yXzAwLCBQU0VMQV8zXzJfMDEsIFBTRUxBXzNfMl8xMCwgUFNFTEFfM18yXzExLAorCVBTRUxBXzVfNF8wMCwgUFNFTEFfNV80XzAxLCBQU0VMQV81XzRfMTAsIFBTRUxBXzVfNF8xMSwKKwlQU0VMQV83XzZfMDAsIFBTRUxBXzdfNl8wMSwgUFNFTEFfN182XzEwLAorCVBTRUxBXzlfOF8wMCwgUFNFTEFfOV84XzAxLCBQU0VMQV85XzhfMTAsCisJUFNFTEFfMTFfMTBfMDAsIFBTRUxBXzExXzEwXzAxLCBQU0VMQV8xMV8xMF8xMCwKKwlQU0VMQV8xM18xMl8wMCwgUFNFTEFfMTNfMTJfMTAsCisJUFNFTEFfMTVfMTRfMDAsIFBTRUxBXzE1XzE0XzEwLAorCVBTRUxCXzlfOF8wMCwgUFNFTEJfOV84XzExLAorCVBTRUxCXzExXzEwXzAwLCBQU0VMQl8xMV8xMF8wMSwgUFNFTEJfMTFfMTBfMTAsIFBTRUxCXzExXzEwXzExLAorCVBTRUxCXzEzXzEyXzAwLCBQU0VMQl8xM18xMl8wMSwgUFNFTEJfMTNfMTJfMTAsIFBTRUxCXzEzXzEyXzExLAorCVBTRUxCXzE1XzE0XzAwLCBQU0VMQl8xNV8xNF8xMSwKKwlQU0VMQ185XzhfMDAsIFBTRUxDXzlfOF8xMCwKKwlQU0VMQ18xMV8xMF8wMCwgUFNFTENfMTFfMTBfMTAsCisJUFNFTENfMTNfMTJfMDAsCVBTRUxDXzEzXzEyXzAxLAlQU0VMQ18xM18xMl8xMCwKKwlQU0VMQ18xNV8xNF8wMCwJUFNFTENfMTVfMTRfMDEsCVBTRUxDXzE1XzE0XzEwLAorCVBTRUxEXzFfMF8wMCwgUFNFTERfMV8wXzEwLAorCVBTRUxEXzExXzEwXzAwLAlQU0VMRF8xMV8xMF8wMSwKKwlQU0VMRF8xNV8xNF8wMCwJUFNFTERfMTVfMTRfMDEsCVBTRUxEXzE1XzE0XzEwLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgUkFTX01BUkssIENBU19NQVJLLCBDS0VfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M2Ql9DRTFCX01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIEEyMF9NQVJLLCBBMTlfTUFSSywgQTBfTUFSSywKKwlSRUZPVVRfTUFSSywgSVJRT1VUX01BUkssCisJTENEX0RBVEExNV9NQVJLLCBMQ0RfREFUQTE0X01BUkssCisJTENEX0RBVEExM19NQVJLLCBMQ0RfREFUQTEyX01BUkssCisJTENEX0RBVEExMV9NQVJLLCBMQ0RfREFUQTEwX01BUkssCisJTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywKKwlMQ0RfREFUQTVfTUFSSywgTENEX0RBVEE0X01BUkssCisJTENEX0RBVEEzX01BUkssIExDRF9EQVRBMl9NQVJLLAorCUxDRF9EQVRBMV9NQVJLLCBMQ0RfREFUQTBfTUFSSywKKwlMQ0RfTV9ESVNQX01BUkssCisJTENEX0NMMV9NQVJLLCBMQ0RfQ0wyX01BUkssCisJTENEX0RPTl9NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX1ZFUFdDX01BUkssIExDRF9WQ1BXQ19NQVJLLAorCUFGRV9SWElOX01BUkssIEFGRV9SREVUX01BUkssCisJQUZFX0ZTX01BUkssIEFGRV9UWE9VVF9NQVJLLAorCUFGRV9TQ0xLX01BUkssIEFGRV9STFlDTlRfTUFSSywKKwlBRkVfSEMxX01BUkssCisJSUlDX1NDTF9NQVJLLCBJSUNfU0RBX01BUkssCisJREExX01BUkssIERBMF9NQVJLLAorCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCVVTQjFEX1JDVl9NQVJLLCBVU0IxRF9UWFNFMF9NQVJLLAorCVVTQjFEX1RYRFBMU19NQVJLLCBVU0IxRF9ETU5TX01BUkssCisJVVNCMURfRFBMU19NQVJLLCBVU0IxRF9TUEVFRF9NQVJLLAorCVVTQjFEX1RYRU5MX01BUkssCisJVVNCMl9QV1JfRU5fTUFSSywgVVNCMV9QV1JfRU5fVVNCRl9VUExVUF9NQVJLLCBVU0IxRF9TVVNQRU5EX01BUkssCisJSVJRNV9NQVJLLCBJUlE0X01BUkssCisJSVJRM19JUkwzX01BUkssIElSUTJfSVJMMl9NQVJLLAorCUlSUTFfSVJMMV9NQVJLLCBJUlEwX0lSTDBfTUFSSywKKwlQQ0NfUkVHX01BUkssIFBDQ19EUlZfTUFSSywKKwlQQ0NfQlZEMl9NQVJLLCBQQ0NfQlZEMV9NQVJLLAorCVBDQ19DRDJfTUFSSywgUENDX0NEMV9NQVJLLAorCVBDQ19SRVNFVF9NQVJLLCBQQ0NfUkRZX01BUkssCisJUENDX1ZTMl9NQVJLLCBQQ0NfVlMxX01BUkssCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywgQVNFQlJLQUtfTUFSSywgVFJTVF9NQVJLLAorCVRNU19NQVJLLCBURE9fTUFSSywgVERJX01BUkssIFRDS19NQVJLLAorCURBQ0sxX01BUkssIERSRVExX01BUkssIERBQ0swX01BUkssIERSRVEwX01BUkssCisJVEVORDFfTUFSSywgVEVORDBfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX01DTEtfTUFSSywKKwlTSU9GMF9UWERfTUFSSywgU0lPRjBfUlhEX01BUkssCisJU0lPRjBfU0NLX01BUkssCisJU0lPRjFfU1lOQ19NQVJLLCBTSU9GMV9NQ0xLX01BUkssCisJU0lPRjFfVFhEX01BUkssIFNJT0YxX1JYRF9NQVJLLAorCVNJT0YxX1NDS19NQVJLLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVRQVV9UTzFfTUFSSywgVFBVX1RPMF9NQVJLLAorCVRQVV9USTNCX01BUkssIFRQVV9USTNBX01BUkssCisJVFBVX1RJMkJfTUFSSywgVFBVX1RJMkFfTUFSSywKKwlUUFVfVE8zX01BUkssIFRQVV9UTzJfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlNTUNfREFUX01BUkssIE1NQ19DTURfTUFSSywKKwlNTUNfQ0xLX01BUkssIE1NQ19WRERPTl9NQVJLLAorCU1NQ19PRE1PRF9NQVJLLAorCVNUQVRVUzBfTUFSSywgU1RBVFVTMV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfT1VULCBQVEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfT1VULCBQVEE2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfT1VULCBQVEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfT1VULCBQVEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEzX0RBVEEsIFBUQTNfSU4sIFBUQTNfT1VULCBQVEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfT1VULCBQVEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfT1VULCBQVEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEwX0RBVEEsIFBUQTBfSU4sIFBUQTBfT1VULCBQVEEwX0lOX1BVKSwKKworCS8qIFBUQiBHUElPICovCisJUElOTVVYX0RBVEEoUFRCN19EQVRBLCBQVEI3X0lOLCBQVEI3X09VVCwgUFRCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNl9EQVRBLCBQVEI2X0lOLCBQVEI2X09VVCwgUFRCNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNV9EQVRBLCBQVEI1X0lOLCBQVEI1X09VVCwgUFRCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNF9EQVRBLCBQVEI0X0lOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCM19EQVRBLCBQVEIzX0lOLCBQVEIzX09VVCwgUFRCM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMl9EQVRBLCBQVEIyX0lOLCBQVEIyX09VVCwgUFRCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMV9EQVRBLCBQVEIxX0lOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMF9EQVRBLCBQVEIwX0lOLCBQVEIwX09VVCwgUFRCMF9JTl9QVSksCisKKwkvKiBQVEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19PVVQsIFBUQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzZfREFUQSwgUFRDNl9JTiwgUFRDNl9PVVQsIFBUQzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzVfREFUQSwgUFRDNV9JTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQsIFBUQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQsIFBUQzNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzFfREFUQSwgUFRDMV9JTiwgUFRDMV9PVVQsIFBUQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQsIFBUQzBfSU5fUFUpLAorCisJLyogUFREIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEQ3X0RBVEEsIFBURDdfSU4sIFBURDdfT1VULCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfSU4sIFBURDZfT1VULCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfSU4sIFBURDVfT1VULCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfSU4sIFBURDRfT1VULCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfSU4sIFBURDNfT1VULCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfSU4sIFBURDJfT1VULCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfSU4sIFBURDFfT1VULCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfSU4sIFBURDBfT1VULCBQVEQwX0lOX1BVKSwKKworCS8qIFBURSBHUElPICovCisJUElOTVVYX0RBVEEoUFRFNl9EQVRBLCBQVEU2X0lOKSwKKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4pLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9JTiwgUFRFNF9PVVQsIFBURTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTNfREFUQSwgUFRFM19JTiwgUFRFM19PVVQsIFBURTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTJfREFUQSwgUFRFMl9JTiwgUFRFMl9PVVQsIFBURTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9JTiwgUFRFMV9PVVQsIFBURTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9JTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUpLAorCisJLyogUFRGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEY2X0RBVEEsIFBURjZfSU4pLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9JTiksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOKSwKKwlQSU5NVVhfREFUQShQVEYzX0RBVEEsIFBURjNfSU4pLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9JTiksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfSU4sIFBURjBfT1VULCBQVEYwX0lOX1BVKSwKKworCS8qIFBURyBHUElPICovCisJUElOTVVYX0RBVEEoUFRHNl9EQVRBLCBQVEc2X0lOLCBQVEc2X09VVCwgUFRHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNV9EQVRBLCBQVEc1X0lOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNF9EQVRBLCBQVEc0X0lOLCBQVEc0X09VVCwgUFRHNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHM19EQVRBLCBQVEczX0lOLCBQVEczX09VVCwgUFRHM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMl9EQVRBLCBQVEcyX0lOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMV9EQVRBLCBQVEcxX0lOLCBQVEcxX09VVCwgUFRHMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMF9EQVRBLCBQVEcwX0lOLCBQVEcwX09VVCwgUFRHMF9JTl9QVSksCisKKwkvKiBQVEggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSDZfREFUQSwgUFRINl9JTiwgUFRINl9PVVQsIFBUSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDVfREFUQSwgUFRINV9JTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDRfREFUQSwgUFRINF9JTiwgUFRINF9PVVQsIFBUSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDNfREFUQSwgUFRIM19JTiwgUFRIM19PVVQsIFBUSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDJfREFUQSwgUFRIMl9JTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDFfREFUQSwgUFRIMV9JTiwgUFRIMV9PVVQsIFBUSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDBfREFUQSwgUFRIMF9JTiwgUFRIMF9PVVQsIFBUSDBfSU5fUFUpLAorCisJLyogUFRKIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfSU4sIFBUSjZfT1VULCBQVEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfSU4sIFBUSjVfT1VULCBQVEo1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo0X0RBVEEsIFBUSjRfSU4sIFBUSjRfT1VULCBQVEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEozX0RBVEEsIFBUSjNfSU4sIFBUSjNfT1VULCBQVEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoyX0RBVEEsIFBUSjJfSU4sIFBUSjJfT1VULCBQVEoyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfSU4sIFBUSjFfT1VULCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfSU4sIFBUSjBfT1VULCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyBHUElPICovCisJUElOTVVYX0RBVEEoUFRLM19EQVRBLCBQVEszX0lOLCBQVEszX09VVCwgUFRLM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMl9EQVRBLCBQVEsyX0lOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX0lOLCBQVEsxX09VVCwgUFRLMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX0lOLCBQVEswX09VVCwgUFRLMF9JTl9QVSksCisKKwkvKiBQVEwgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTDdfREFUQSwgUFRMN19JTiwgUFRMN19PVVQsIFBUTDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDZfREFUQSwgUFRMNl9JTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDVfREFUQSwgUFRMNV9JTiwgUFRMNV9PVVQsIFBUTDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDRfREFUQSwgUFRMNF9JTiwgUFRMNF9PVVQsIFBUTDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDNfREFUQSwgUFRMM19JTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUpLAorCisJLyogUFRNIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVE03X0RBVEEsIFBUTTdfSU4sIFBUTTdfT1VULCBQVE03X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE02X0RBVEEsIFBUTTZfSU4sIFBUTTZfT1VULCBQVE02X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE01X0RBVEEsIFBUTTVfSU4sIFBUTTVfT1VULCBQVE01X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE00X0RBVEEsIFBUTTRfSU4sIFBUTTRfT1VULCBQVE00X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0zX0RBVEEsIFBUTTNfSU4sIFBUTTNfT1VULCBQVE0zX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0yX0RBVEEsIFBUTTJfSU4sIFBUTTJfT1VULCBQVE0yX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0xX0RBVEEsIFBUTTFfSU4sIFBUTTFfT1VULCBQVE0xX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0wX0RBVEEsIFBUTTBfSU4sIFBUTTBfT1VULCBQVE0wX0lOX1BVKSwKKworCS8qIFBUUCBHUElPICovCisJUElOTVVYX0RBVEEoUFRQNF9EQVRBLCBQVFA0X0lOLCBQVFA0X09VVCwgUFRQNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQM19EQVRBLCBQVFAzX0lOLCBQVFAzX09VVCwgUFRQM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMl9EQVRBLCBQVFAyX0lOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMV9EQVRBLCBQVFAxX0lOLCBQVFAxX09VVCwgUFRQMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMF9EQVRBLCBQVFAwX0lOLCBQVFAwX09VVCwgUFRQMF9JTl9QVSksCisKKwkvKiBQVFIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUjdfREFUQSwgUFRSN19JTiwgUFRSN19PVVQsIFBUUjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjZfREFUQSwgUFRSNl9JTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjVfREFUQSwgUFRSNV9JTiwgUFRSNV9PVVQsIFBUUjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjRfREFUQSwgUFRSNF9JTiwgUFRSNF9PVVQsIFBUUjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjNfREFUQSwgUFRSM19JTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9PVVQsIFBUUjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjFfREFUQSwgUFRSMV9JTiwgUFRSMV9PVVQsIFBUUjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjBfREFUQSwgUFRSMF9JTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUpLAorCisJLyogUFRTIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfT1VULCBQVFM0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMzX0RBVEEsIFBUUzNfSU4sIFBUUzNfT1VULCBQVFMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMyX0RBVEEsIFBUUzJfSU4sIFBUUzJfT1VULCBQVFMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMxX0RBVEEsIFBUUzFfSU4sIFBUUzFfT1VULCBQVFMxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfSU4sIFBUUzBfT1VULCBQVFMwX0lOX1BVKSwKKworCS8qIFBUVCBHUElPICovCisJUElOTVVYX0RBVEEoUFRUNF9EQVRBLCBQVFQ0X0lOLCBQVFQ0X09VVCwgUFRUNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUM19EQVRBLCBQVFQzX0lOLCBQVFQzX09VVCwgUFRUM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMl9EQVRBLCBQVFQyX0lOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMV9EQVRBLCBQVFQxX0lOLCBQVFQxX09VVCwgUFRUMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX0lOLCBQVFQwX09VVCwgUFRUMF9JTl9QVSksCisKKwkvKiBQVFUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVTRfREFUQSwgUFRVNF9JTiwgUFRVNF9PVVQsIFBUVTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTNfREFUQSwgUFRVM19JTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTJfREFUQSwgUFRVMl9JTiwgUFRVMl9PVVQsIFBUVTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTFfREFUQSwgUFRVMV9JTiwgUFRVMV9PVVQsIFBUVTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9JTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUpLAorCisJLyogUFRWIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFY0X0RBVEEsIFBUVjRfSU4sIFBUVjRfT1VULCBQVFY0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYzX0RBVEEsIFBUVjNfSU4sIFBUVjNfT1VULCBQVFYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYyX0RBVEEsIFBUVjJfSU4sIFBUVjJfT1VULCBQVFYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYxX0RBVEEsIFBUVjFfSU4sIFBUVjFfT1VULCBQVFYxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYwX0RBVEEsIFBUVjBfSU4sIFBUVjBfT1VULCBQVFYwX0lOX1BVKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUFRBM19GTiksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUFRBMF9GTiksCisKKwkvKiBQVEIgRk4gKi8KKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUFRCN19GTiksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBUQjZfRk4pLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQVEI1X0ZOKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUFRCNF9GTiksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBUQjNfRk4pLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoTENEX0RBVEE3X01BUkssIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBNl9NQVJLLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTJfTUFSSywgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExX01BUkssIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUFREN19GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNF9NQVJLLCBQVEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEzX01BUkssIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUFRENF9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMV9NQVJLLCBQVEQzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEwX01BUkssIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOV9NQVJLLCBQVEQxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQThfTUFSSywgUFREMF9GTiksCisKKwkvKiBQVEUgRk4gKi8KKwlQSU5NVVhfREFUQShJSUNfU0NMX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNl9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JYSU5fTUFSSywgUFNFTEJfOV84XzExLCBQVEU2X0ZOKSwKKwlQSU5NVVhfREFUQShJSUNfU0RBX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNV9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JERVRfTUFSSywgUFNFTEJfOV84XzExLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfTV9ESVNQX01BUkssIFBURTRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9DTDFfTUFSSywgUFRFM19GTiksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfRE9OX01BUkssIFBURTFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShEQTFfTUFSSywgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoREEwX01BUkssIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKEFOM19NQVJLLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShBTjJfTUFSSywgUFRGM19GTiksCisJUElOTVVYX0RBVEEoQU4xX01BUkssIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMF9NQVJLLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShBRFRSR19NQVJLLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKFVTQjFEX1JDVl9NQVJLLCBQU0VMQV8zXzJfMDAsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9GU19NQVJLLCBQU0VMQV8zXzJfMDEsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19SRUdfTUFSSywgUFNFTEFfM18yXzEwLCBQVEc2X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIFBTRUxBXzNfMl8xMSwgUFRHNl9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhTRTBfTUFSSywgUFNFTEFfNV80XzAwLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShBRkVfVFhPVVRfTUFSSywgUFNFTEFfNV80XzAxLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfRFJWX01BUkssIFBTRUxBXzVfNF8xMCwgUFRHNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0VMQV81XzRfMTEsIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX1RYRFBMU19NQVJLLCBQU0VMQV83XzZfMDAsIFBURzRfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9TQ0xLX01BUkssIFBTRUxBXzdfNl8wMSwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTRUxBXzdfNl8xMCwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfRE1OU19NQVJLLCBQU0VMQV85XzhfMDAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9STFlDTlRfTUFSSywgUFNFTEFfOV84XzAxLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfQlZEMl9NQVJLLCBQU0VMQV85XzhfMTAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX0RQTFNfTUFSSywgUFNFTEFfMTFfMTBfMDAsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9IQzFfTUFSSywgUFNFTEFfMTFfMTBfMDEsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19CVkQxX01BUkssIFBTRUxBXzExXzEwXzEwLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShVU0IxRF9TUEVFRF9NQVJLLCBQU0VMQV8xM18xMl8wMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoUENDX0NEMl9NQVJLLCBQU0VMQV8xM18xMl8xMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhFTkxfTUFSSywgUFNFTEFfMTVfMTRfMDAsIFBURzBfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19DRDFfTUFSSywgUFNFTEFfMTVfMTRfMTAsIFBURzBfRk4pLAorCisJLyogUFRIIEZOICovCisJUElOTVVYX0RBVEEoUkFTX01BUkssIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKENBU19NQVJLLCBQVEg1X0ZOKSwKKwlQSU5NVVhfREFUQShDS0VfTUFSSywgUFRINF9GTiksCisJUElOTVVYX0RBVEEoU1RBVFVTMV9NQVJLLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSDJfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjJfUFdSX0VOX01BUkssIFBUSDFfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShBVURDS19NQVJLLCBQVEo2X0ZOKSwKKwlQSU5NVVhfREFUQShBU0VCUktBS19NQVJLLCBQVEo1X0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEzX01BUkssIFBUSjRfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTJfTUFSSywgUFRKM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQVEoyX0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEwX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRKMF9GTiksCisKKwkvKiBQVEsgRk4gKi8KKwlQSU5NVVhfREFUQShQQ0NfUkVTRVRfTUFSSywgUFRLM19GTiksCisJUElOTVVYX0RBVEEoUENDX1JEWV9NQVJLLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfVlMyX01BUkssIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19WUzFfTUFSSywgUFRLMF9GTiksCisKKwkvKiBQVEwgRk4gKi8KKwlQSU5NVVhfREFUQShUUlNUX01BUkssIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKFRNU19NQVJLLCBQVEw2X0ZOKSwKKwlQSU5NVVhfREFUQShURE9fTUFSSywgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoVERJX01BUkssIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKFRDS19NQVJLLCBQVEwzX0ZOKSwKKworCS8qIFBUTSBGTiAqLworCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUTTdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBUTTZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUTTVfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssIFBUTTRfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQxX01BUkssIFBUTTNfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQwX01BUkssIFBUTTJfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRNMF9GTiksCisKKwkvKiBQVFAgRk4gKi8KKwlQSU5NVVhfREFUQShVU0IxRF9TVVNQRU5EX01BUkssIFBTRUxBXzFfMF8wMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoUkVGT1VUX01BUkssIFBTRUxBXzFfMF8wMSwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRT1VUX01BUkssIFBTRUxBXzFfMF8xMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19JUkwzX01BUkssIFBUUDNfRk4pLAorCVBJTk1VWF9EQVRBKElSUTJfSVJMMl9NQVJLLCBQVFAyX0ZOKSwKKwlQSU5NVVhfREFUQShJUlExX0lSTDFfTUFSSywgUFRQMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9JUkwwX01BUkssIFBUUDBfRk4pLAorCisJLyogUFRSIEZOICovCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBUUjdfRk4pLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQVFI2X0ZOKSwKKwlQSU5NVVhfREFUQShBMjNfTUFSSywgUFRSNV9GTiksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIFBUUjRfRk4pLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShBMjBfTUFSSywgUFRSMl9GTiksCisJUElOTVVYX0RBVEEoQTE5X01BUkssIFBUUjFfRk4pLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBUUjBfRk4pLAorCisJLyogUFRTIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9NQ0xLX01BUkssIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0YwX1RYRF9NQVJLLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9SWERfTUFSSywgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU0NLX01BUkssIFBUUzBfRk4pLAorCisJLyogUFRUIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssIFBTRUxCXzE1XzE0XzAwLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVE8xX01BUkssIFBTRUxCXzE1XzE0XzExLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywgUFNFTEJfMTVfMTRfMDAsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzBfTUFSSywgUFNFTEJfMTVfMTRfMTEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssIFBUVDBfRk4pLAorCisJLyogUFRVIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjFfU1lOQ19NQVJLLCBQVFU0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMV9NQ0xLX01BUkssIFBTRUxEXzExXzEwXzAwLCBQVFUzX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQl9NQVJLLCBQU0VMRF8xMV8xMF8wMSwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfVFhEX01BUkssIFBTRUxEXzE1XzE0XzAwLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQV9NQVJLLCBQU0VMRF8xNV8xNF8wMSwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoTU1DX0RBVF9NQVJLLCBQU0VMRF8xNV8xNF8xMCwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTRUxDXzEzXzEyXzAwLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQl9NQVJLLCBQU0VMQ18xM18xMl8wMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NNRF9NQVJLLCBQU0VMQ18xM18xMl8xMCwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfU0NLX01BUkssIFBTRUxDXzE1XzE0XzAwLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQV9NQVJLLCBQU0VMQ18xNV8xNF8wMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NMS19NQVJLLCBQU0VMQ18xNV8xNF8xMCwgUFRVMF9GTiksCisKKwkvKiBQVFYgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNFTEJfMTFfMTBfMDAsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzNfTUFSSywgUFNFTEJfMTFfMTBfMDEsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19WRERPTl9NQVJLLCBQU0VMQl8xMV8xMF8xMCwgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBTRUxCXzExXzEwXzExLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNFTEJfMTNfMTJfMDAsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzJfTUFSSywgUFNFTEJfMTNfMTJfMDEsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19PRE1PRF9NQVJLLCBQU0VMQl8xM18xMl8xMCwgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTENEX1ZDUFdDX01BUkssIFBTRUxCXzEzXzEyXzExLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUFNFTENfOV84XzAwLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU1fRF9NQVJLLCBQU0VMQ185XzhfMTAsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLCBQU0VMQ18xMV8xMF8wMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0lNX1JTVF9NQVJLLCBQU0VMQ18xMV8xMF8xMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssIFBTRUxEXzFfMF8wMCwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLCBQU0VMRF8xXzBfMTAsIFBUVjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUzLCBQVEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMiwgUFRFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTEsIFBURTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUwLCBQVEUwX0RBVEEpLAorCisJLyogUFRGICovCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc2LCBQVEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNSwgUFRHNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo2LCBQVEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjQsIFBUSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEozLCBQVEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMiwgUFRKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjEsIFBUSjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEowLCBQVEowX0RBVEEpLAorCisJLyogUFRLICovCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVFAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUDQsIFBUUDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAzLCBQVFAzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRQMiwgUFRQMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUDEsIFBUUDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAwLCBQVFAwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDQsIFBUVDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQzLCBQVFQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMiwgUFRUMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDEsIFBUVDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQwLCBQVFQwX0RBVEEpLAorCisJLyogUFRVICovCisJUElOTVVYX0dQSU8oR1BJT19QVFU0LCBQVFU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMywgUFRVM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTIsIFBUVTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUxLCBQVFUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMCwgUFRVMF9EQVRBKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRWNCwgUFRWNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjMsIFBUVjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYyLCBQVFYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMSwgUFRWMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjAsIFBUVjBfREFUQSksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVMsIFJBU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBUywgQ0FTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0tFLCBDS0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVCX0NFMUEsIENTNUJfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkJfQ0UxQiwgQ1M2Ql9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjEsIEEyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMCwgQTIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTE5LCBBMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMCwgQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVCwgSVJRT1VUX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNSwgTENEX0RBVEExNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTQsIExDRF9EQVRBMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEzLCBMQ0RfREFUQTEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMiwgTENEX0RBVEExMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTEsIExDRF9EQVRBMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEwLCBMQ0RfREFUQTEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE5LCBMQ0RfREFUQTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTgsIExDRF9EQVRBOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNywgTENEX0RBVEE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE2LCBMQ0RfREFUQTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTUsIExDRF9EQVRBNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNCwgTENEX0RBVEE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEzLCBMQ0RfREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTIsIExDRF9EQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMSwgTENEX0RBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEwLCBMQ0RfREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfTV9ESVNQLCBMQ0RfTV9ESVNQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTDIsIExDRF9DTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfRE9OLCBMQ0RfRE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisKKwkvKiBBRkVJRiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JYSU4sIEFGRV9SWElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JERVQsIEFGRV9SREVUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX0ZTLCBBRkVfRlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfVFhPVVQsIEFGRV9UWE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9TQ0xLLCBBRkVfU0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9STFlDTlQsIEFGRV9STFlDTlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfSEMxLCBBRkVfSEMxX01BUkspLAorCisJLyogSUlDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JSUNfU0NMLCBJSUNfU0NMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSUlDX1NEQSwgSUlDX1NEQV9NQVJLKSwKKworCS8qIERBQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREExLCBEQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQTAsIERBMF9NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4zLCBBTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjIsIEFOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMSwgQU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4wLCBBTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSRywgQURUUkdfTUFSSyksCisKKwkvKiBVU0IgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1JDViwgVVNCMURfUkNWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhTRTAsIFVTQjFEX1RYU0UwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhEUExTLCBVU0IxRF9UWERQTFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9ETU5TLCBVU0IxRF9ETU5TX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfRFBMUywgVVNCMURfRFBMU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1NQRUVELCBVU0IxRF9TUEVFRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1RYRU5MLCBVU0IxRF9UWEVOTF9NQVJLKSwKKworCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMl9QV1JfRU4sIFVTQjJfUFdSX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMV9QV1JfRU5fVVNCRl9VUExVUCwKKwkJICAgIFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9TVVNQRU5ELCBVU0IxRF9TVVNQRU5EX01BUkspLAorCisJLyogSU5UQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNSwgSVJRNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX0lSTDMsIElSUTNfSVJMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfSVJMMiwgSVJRMl9JUkwyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9JUkwxLCBJUlExX0lSTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX0lSTDAsIElSUTBfSVJMMF9NQVJLKSwKKworCS8qIFBDQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JFRywgUENDX1JFR19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19EUlYsIFBDQ19EUlZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMiwgUENDX0JWRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMSwgUENDX0JWRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQ0QyLCBQQ0NfQ0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX0NEMSwgUENDX0NEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19SRVNFVCwgUENDX1JFU0VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JEWSwgUENDX1JEWV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19WUzIsIFBDQ19WUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfVlMxLCBQQ0NfVlMxX01BUkspLAorCisJLyogSFVESSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMywgQVVEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTIsIEFVREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEExLCBBVURBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMCwgQVVEQVRBMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BU0VCUktBSywgQVNFQlJLQUtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUlNULCBUUlNUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVE1TLCBUTVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URE8sIFRET19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RESSwgVERJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENLLCBUQ0tfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwgREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwgRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMCwgREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwgRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMSwgVEVORDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMCwgVEVORDBfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU1lOQywgU0lPRjBfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX01DTEssIFNJT0YwX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9UWEQsIFNJT0YwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1JYRCwgU0lPRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU0NLLCBTSU9GMF9TQ0tfTUFSSyksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX01DTEssIFNJT0YxX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU0NLLCBTSU9GMV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfVFhELCBTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SWEQsIFNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywgU0NJRjBfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLCBTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19NQVJLKSwKKworCS8qIFNDSUYxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsIFNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwgU0NJRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlRTLCBTQ0lGMV9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9DVFMsIFNDSUYxX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NDSywgU0NJRjFfU0NLX01BUkspLAorCisJLyogVFBVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8xLCBUUFVfVE8xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVX1RPMCwgVFBVX1RPMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNCLCBUUFVfVEkzQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNBLCBUUFVfVEkzQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJCLCBUUFVfVEkyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJBLCBUUFVfVEkyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9UTzMsIFRQVV9UTzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8yLCBUUFVfVE8yX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIE1NQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX0RBVCwgTU1DX0RBVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01NQ19DTUQsIE1NQ19DTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfQ0xLLCBNTUNfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX1ZERE9OLCBNTUNfVkRET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfT0RNT0QsIE1NQ19PRE1PRF9NQVJLKSwKKworCS8qIFNZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TVEFUVVMxLCBTVEFUVVMxX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJUFRBN19GTiwgUFRBN19PVVQsIFBUQTdfSU5fUFUsIFBUQTdfSU4sCisJCVBUQTZfRk4sIFBUQTZfT1VULCBQVEE2X0lOX1BVLCBQVEE2X0lOLAorCQlQVEE1X0ZOLCBQVEE1X09VVCwgUFRBNV9JTl9QVSwgUFRBNV9JTiwKKwkJUFRBNF9GTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUsIFBUQTRfSU4sCisJCVBUQTNfRk4sIFBUQTNfT1VULCBQVEEzX0lOX1BVLCBQVEEzX0lOLAorCQlQVEEyX0ZOLCBQVEEyX09VVCwgUFRBMl9JTl9QVSwgUFRBMl9JTiwKKwkJUFRBMV9GTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUsIFBUQTFfSU4sCisJCVBUQTBfRk4sIFBUQTBfT1VULCBQVEEwX0lOX1BVLCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlQVEI3X0ZOLCBQVEI3X09VVCwgUFRCN19JTl9QVSwgUFRCN19JTiwKKwkJUFRCNl9GTiwgUFRCNl9PVVQsIFBUQjZfSU5fUFUsIFBUQjZfSU4sCisJCVBUQjVfRk4sIFBUQjVfT1VULCBQVEI1X0lOX1BVLCBQVEI1X0lOLAorCQlQVEI0X0ZOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSwgUFRCNF9JTiwKKwkJUFRCM19GTiwgUFRCM19PVVQsIFBUQjNfSU5fUFUsIFBUQjNfSU4sCisJCVBUQjJfRk4sIFBUQjJfT1VULCBQVEIyX0lOX1BVLCBQVEIyX0lOLAorCQlQVEIxX0ZOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSwgUFRCMV9JTiwKKwkJUFRCMF9GTiwgUFRCMF9PVVQsIFBUQjBfSU5fUFUsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCVBUQzdfRk4sIFBUQzdfT1VULCBQVEM3X0lOX1BVLCBQVEM3X0lOLAorCQlQVEM2X0ZOLCBQVEM2X09VVCwgUFRDNl9JTl9QVSwgUFRDNl9JTiwKKwkJUFRDNV9GTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUsIFBUQzVfSU4sCisJCVBUQzRfRk4sIFBUQzRfT1VULCBQVEM0X0lOX1BVLCBQVEM0X0lOLAorCQlQVEMzX0ZOLCBQVEMzX09VVCwgUFRDM19JTl9QVSwgUFRDM19JTiwKKwkJUFRDMl9GTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUsIFBUQzJfSU4sCisJCVBUQzFfRk4sIFBUQzFfT1VULCBQVEMxX0lOX1BVLCBQVEMxX0lOLAorCQlQVEMwX0ZOLCBQVEMwX09VVCwgUFRDMF9JTl9QVSwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJUFREN19GTiwgUFREN19PVVQsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVBURDZfRk4sIFBURDZfT1VULCBQVEQ2X0lOX1BVLCBQVEQ2X0lOLAorCQlQVEQ1X0ZOLCBQVEQ1X09VVCwgUFRENV9JTl9QVSwgUFRENV9JTiwKKwkJUFRENF9GTiwgUFRENF9PVVQsIFBURDRfSU5fUFUsIFBURDRfSU4sCisJCVBURDNfRk4sIFBURDNfT1VULCBQVEQzX0lOX1BVLCBQVEQzX0lOLAorCQlQVEQyX0ZOLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJUFREMV9GTiwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVBURDBfRk4sIFBURDBfT1VULCBQVEQwX0lOX1BVLCBQVEQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEU2X0ZOLCAwLCAwLCBQVEU2X0lOLAorCQlQVEU1X0ZOLCAwLCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgUFRFNF9JTl9QVSwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIFBURTNfSU5fUFUsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCBQVEUyX0lOX1BVLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgUFRFMV9JTl9QVSwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjZfRk4sIDAsIDAsIFBURjZfSU4sCisJCVBURjVfRk4sIDAsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIDAsIDAsIFBURjRfSU4sCisJCVBURjNfRk4sIDAsIDAsIFBURjNfSU4sCisJCVBURjJfRk4sIDAsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIDAsIDAsIFBURjFfSU4sCisJCVBURjBfRk4sIDAsIDAsIFBURjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4YTQwNTAxMGMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURzZfRk4sIFBURzZfT1VULCBQVEc2X0lOX1BVLCBQVEc2X0lOLAorCQlQVEc1X0ZOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSwgUFRHNV9JTiwKKwkJUFRHNF9GTiwgUFRHNF9PVVQsIFBURzRfSU5fUFUsIFBURzRfSU4sCisJCVBURzNfRk4sIFBURzNfT1VULCBQVEczX0lOX1BVLCBQVEczX0lOLAorCQlQVEcyX0ZOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSwgUFRHMl9JTiwKKwkJUFRHMV9GTiwgUFRHMV9PVVQsIFBURzFfSU5fUFUsIFBURzFfSU4sCisJCVBURzBfRk4sIFBURzBfT1VULCBQVEcwX0lOX1BVLCBQVEcwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGE0MDUwMTBlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEg2X0ZOLCBQVEg2X09VVCwgUFRINl9JTl9QVSwgUFRINl9JTiwKKwkJUFRINV9GTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUsIFBUSDVfSU4sCisJCVBUSDRfRk4sIFBUSDRfT1VULCBQVEg0X0lOX1BVLCBQVEg0X0lOLAorCQlQVEgzX0ZOLCBQVEgzX09VVCwgUFRIM19JTl9QVSwgUFRIM19JTiwKKwkJUFRIMl9GTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUsIFBUSDJfSU4sCisJCVBUSDFfRk4sIFBUSDFfT1VULCBQVEgxX0lOX1BVLCBQVEgxX0lOLAorCQlQVEgwX0ZOLCBQVEgwX09VVCwgUFRIMF9JTl9QVSwgUFRIMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhhNDA1MDExMCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNl9GTiwgUFRKNl9PVVQsIFBUSjZfSU5fUFUsIFBUSjZfSU4sCisJCVBUSjVfRk4sIFBUSjVfT1VULCBQVEo1X0lOX1BVLCBQVEo1X0lOLAorCQlQVEo0X0ZOLCBQVEo0X09VVCwgUFRKNF9JTl9QVSwgUFRKNF9JTiwKKwkJUFRKM19GTiwgUFRKM19PVVQsIFBUSjNfSU5fUFUsIFBUSjNfSU4sCisJCVBUSjJfRk4sIFBUSjJfT1VULCBQVEoyX0lOX1BVLCBQVEoyX0lOLAorCQlQVEoxX0ZOLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJUFRKMF9GTiwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSzNfRk4sIFBUSzNfT1VULCBQVEszX0lOX1BVLCBQVEszX0lOLAorCQlQVEsyX0ZOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSwgUFRLMl9JTiwKKwkJUFRLMV9GTiwgUFRLMV9PVVQsIFBUSzFfSU5fUFUsIFBUSzFfSU4sCisJCVBUSzBfRk4sIFBUSzBfT1VULCBQVEswX0lOX1BVLCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlQVEw3X0ZOLCBQVEw3X09VVCwgUFRMN19JTl9QVSwgUFRMN19JTiwKKwkJUFRMNl9GTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUsIFBUTDZfSU4sCisJCVBUTDVfRk4sIFBUTDVfT1VULCBQVEw1X0lOX1BVLCBQVEw1X0lOLAorCQlQVEw0X0ZOLCBQVEw0X09VVCwgUFRMNF9JTl9QVSwgUFRMNF9JTiwKKwkJUFRMM19GTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUsIFBUTDNfSU4sCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE1DUiIsIDB4YTQwNTAxMTYsIDE2LCAyKSB7CisJCVBUTTdfRk4sIFBUTTdfT1VULCBQVE03X0lOX1BVLCBQVE03X0lOLAorCQlQVE02X0ZOLCBQVE02X09VVCwgUFRNNl9JTl9QVSwgUFRNNl9JTiwKKwkJUFRNNV9GTiwgUFRNNV9PVVQsIFBUTTVfSU5fUFUsIFBUTTVfSU4sCisJCVBUTTRfRk4sIFBUTTRfT1VULCBQVE00X0lOX1BVLCBQVE00X0lOLAorCQlQVE0zX0ZOLCBQVE0zX09VVCwgUFRNM19JTl9QVSwgUFRNM19JTiwKKwkJUFRNMl9GTiwgUFRNMl9PVVQsIFBUTTJfSU5fUFUsIFBUTTJfSU4sCisJCVBUTTFfRk4sIFBUTTFfT1VULCBQVE0xX0lOX1BVLCBQVE0xX0lOLAorCQlQVE0wX0ZOLCBQVE0wX09VVCwgUFRNMF9JTl9QVSwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQUENSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRQNF9GTiwgUFRQNF9PVVQsIFBUUDRfSU5fUFUsIFBUUDRfSU4sCisJCVBUUDNfRk4sIFBUUDNfT1VULCBQVFAzX0lOX1BVLCBQVFAzX0lOLAorCQlQVFAyX0ZOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSwgUFRQMl9JTiwKKwkJUFRQMV9GTiwgUFRQMV9PVVQsIFBUUDFfSU5fUFUsIFBUUDFfSU4sCisJCVBUUDBfRk4sIFBUUDBfT1VULCBQVFAwX0lOX1BVLCBQVFAwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQlQVFI3X0ZOLCBQVFI3X09VVCwgUFRSN19JTl9QVSwgUFRSN19JTiwKKwkJUFRSNl9GTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUsIFBUUjZfSU4sCisJCVBUUjVfRk4sIFBUUjVfT1VULCBQVFI1X0lOX1BVLCBQVFI1X0lOLAorCQlQVFI0X0ZOLCBQVFI0X09VVCwgUFRSNF9JTl9QVSwgUFRSNF9JTiwKKwkJUFRSM19GTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUsIFBUUjNfSU4sCisJCVBUUjJfRk4sIFBUUjJfT1VULCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgUFRSMV9JTl9QVSwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUzRfRk4sIFBUUzRfT1VULCBQVFM0X0lOX1BVLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgUFRTM19JTl9QVSwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIFBUUzJfSU5fUFUsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCBQVFMxX0lOX1BVLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgUFRTMF9JTl9QVSwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDExZSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNF9GTiwgUFRUNF9PVVQsIFBUVDRfSU5fUFUsIFBUVDRfSU4sCisJCVBUVDNfRk4sIFBUVDNfT1VULCBQVFQzX0lOX1BVLCBQVFQzX0lOLAorCQlQVFQyX0ZOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSwgUFRUMl9JTiwKKwkJUFRUMV9GTiwgUFRUMV9PVVQsIFBUVDFfSU5fUFUsIFBUVDFfSU4sCisJCVBUVDBfRk4sIFBUVDBfT1VULCBQVFQwX0lOX1BVLCBQVFQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBVQ1IiLCAweGE0MDUwMTIwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVFU0X0ZOLCBQVFU0X09VVCwgUFRVNF9JTl9QVSwgUFRVNF9JTiwKKwkJUFRVM19GTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUsIFBUVTNfSU4sCisJCVBUVTJfRk4sIFBUVTJfT1VULCBQVFUyX0lOX1BVLCBQVFUyX0lOLAorCQlQVFUxX0ZOLCBQVFUxX09VVCwgUFRVMV9JTl9QVSwgUFRVMV9JTiwKKwkJUFRVMF9GTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUsIFBUVTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFZDUiIsIDB4YTQwNTAxMjIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVjRfRk4sIFBUVjRfT1VULCBQVFY0X0lOX1BVLCBQVFY0X0lOLAorCQlQVFYzX0ZOLCBQVFYzX09VVCwgUFRWM19JTl9QVSwgUFRWM19JTiwKKwkJUFRWMl9GTiwgUFRWMl9PVVQsIFBUVjJfSU5fUFUsIFBUVjJfSU4sCisJCVBUVjFfRk4sIFBUVjFfT1VULCBQVFYxX0lOX1BVLCBQVFYxX0lOLAorCQlQVFYwX0ZOLCBQVFYwX09VVCwgUFRWMF9JTl9QVSwgUFRWMF9JTiB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDE0MCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxNDIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTQ0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxNDgsIDgpIHsKKwkJMCwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhhNDA1MDE0YSwgOCkgeworCQkwLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTRjLCA4KSB7CisJCTAsIFBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJCVBURzNfREFUQSwgUFRHMl9EQVRBLCBQVEcxX0RBVEEsIFBURzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4YTQwNTAxNGUsIDgpIHsKKwkJMCwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDE1MCwgOCkgeworCQkwLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgUFRKNF9EQVRBLAorCQlQVEozX0RBVEEsIFBUSjJfREFUQSwgUFRKMV9EQVRBLCBQVEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGE0MDUwMTUyLCA4KSB7CisJCTAsIDAsIDAsIDAsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxNTQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTU2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUERSIiwgMHhhNDA1MDE1OCwgOCkgeworCQkwLCAwLCAwLCBQVFA0X0RBVEEsCisJCVBUUDNfREFUQSwgUFRQMl9EQVRBLCBQVFAxX0RBVEEsIFBUUDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFJEUiIsIDB4YTQwNTAxNWEsIDgpIHsKKwkJUFRSN19EQVRBLCBQVFI2X0RBVEEsIFBUUjVfREFUQSwgUFRSNF9EQVRBLAorCQlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBTRFIiLCAweGE0MDUwMTVjLCA4KSB7CisJCTAsIDAsIDAsIFBUUzRfREFUQSwKKwkJUFRTM19EQVRBLCBQVFMyX0RBVEEsIFBUUzFfREFUQSwgUFRTMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVERSIiwgMHhhNDA1MDE1ZSwgOCkgeworCQkwLCAwLCAwLCBQVFQ0X0RBVEEsCisJCVBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFVEUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3NzIwX3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzcyMF9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fU1RBVFVTMSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzcyMF9waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggMmQ0NTJmNi4uMjc4MDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC0zNiw3ICszNiw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGZsb2F0NjRfc3ViKHVuc2lnbmVkIGxvbmcgbG9uZyBhLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCBmbG9hdDMyX3N1Yih1bnNpZ25lZCBsb25nIGludCBhLCB1bnNpZ25lZCBsb25nIGludCBiKTsKLQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IGZsb2F0NjRfdG9fZmxvYXQzMih1bnNpZ25lZCBsb25nIGxvbmcgYSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZwdV9leGNlcHRpb25fZmxhZ3M7CiAKIC8qCkBAIC00MTcsNiArNDE3LDI5IEBACiAKIAkJcmVncy0+cGMgPSBuZXh0cGM7CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKGZpbnNuICYgMHhmMGJkKSA9PSAweGYwYmQpIHsKKwkJLyogZmNudmRzIC0gZG91YmxlIHRvIHNpbmdsZSBwcmVjaXNpb24gY29udmVydCAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJCWludCBtOworCQl1bnNpZ25lZCBpbnQgaHg7CisKKwkJbSA9IChmaW5zbiA+PiA5KSAmIDB4NzsKKwkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCisJCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CisJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KKwkJCWxvbmcgbG9uZyBsbHg7CisKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCisJCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKworCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCXJlZ3MtPnBjID0gbmV4dHBjOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDI1NGM1YzUuLmQ5YmRjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTE3OCwxMCArMTc5LDE0IEBACiB9CiBfX2luaXRjYWxsKHNoNzc2MF9kZXZpY2VzX3NldHVwKTsKIAorI2RlZmluZSBJTlRDX0lDUgkweGZmZDAwMDAwVUwKKyNkZWZpbmUgSU5UQ19JQ1JfSVJMTQkoMSA8PCA3KQorCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgorCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc29mdGZsb2F0LmMKaW5kZXggODI4Y2I1Ny4uMmI3NDdmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NvZnRmbG9hdC5jCkBAIC04NSw2ICs4NSw3IEBACiBmbG9hdDMyIGZsb2F0MzJfZGl2KGZsb2F0MzIgYSwgZmxvYXQzMiBiKTsKIGZsb2F0MzIgZmxvYXQzMl9tdWwoZmxvYXQzMiBhLCBmbG9hdDMyIGIpOwogZmxvYXQ2NCBmbG9hdDY0X211bChmbG9hdDY0IGEsIGZsb2F0NjQgYik7CitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpOwogaW5saW5lIHZvaWQgYWRkMTI4KGJpdHM2NCBhMCwgYml0czY0IGExLCBiaXRzNjQgYjAsIGJpdHM2NCBiMSwgYml0czY0ICogejBQdHIsCiAJCSAgIGJpdHM2NCAqIHoxUHRyKTsKIGlubGluZSB2b2lkIHN1YjEyOChiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqIHowUHRyLApAQCAtODkwLDMgKzg5MSwzMSBAQAogCX0KIAlyZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCh6U2lnbiwgekV4cCwgelNpZzApOwogfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKiAgYGEnIHRvIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCisgKiAgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorICogIEFyaXRobWV0aWMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICovCitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHM2NCBhU2lnOworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisKKyAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCAyMiwgJmFTaWcgKTsKKyAgICB6U2lnID0gYVNpZzsKKyAgICBpZiAoIGFFeHAgfHwgelNpZyApIHsKKyAgICAgICAgelNpZyB8PSAweDQwMDAwMDAwOworICAgICAgICBhRXhwIC09IDB4MzgxOworICAgIH0KKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMihhU2lnbiwgYUV4cCwgelNpZyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDkzODFhZDguLmJlOWEwYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC0yNyw1ICsyNywxMCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykJOj0gY2xvY2stc2h4My5vCiAKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KK3Bpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubworCiBvYmoteQkJCSs9ICQoY2xvY2steSkKIG9iai0kKENPTkZJR19TTVApCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKQEAgLTAsMCArMSwxNzgzIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwgUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwgUFRFMV9EQVRBLCBQVEUwX0RBVEEsCisJUFRGNl9EQVRBLCBQVEY1X0RBVEEsIFBURjRfREFUQSwKKwlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEsCisJUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEoxX0RBVEEsIFBUSjBfREFUQSwKKwlQVEs2X0RBVEEsIFBUSzVfREFUQSwgUFRLNF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJUFRMM19EQVRBLCBQVEwyX0RBVEEsIFBUTDFfREFUQSwgUFRMMF9EQVRBLAorCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEsCisJUFRON19EQVRBLCBQVE42X0RBVEEsIFBUTjVfREFUQSwgUFRONF9EQVRBLAorCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSwKKwlQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCVBUUTNfREFUQSwgUFRRMl9EQVRBLCBQVFExX0RBVEEsIFBUUTBfREFUQSwKKwlQVFI0X0RBVEEsIFBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSwKKwlQVFM0X0RBVEEsIFBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ0X0RBVEEsIFBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSwKKwlQVFU0X0RBVEEsIFBUVTNfREFUQSwgUFRVMl9EQVRBLCBQVFUxX0RBVEEsIFBUVTBfREFUQSwKKwlQVFY0X0RBVEEsIFBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc2X0RBVEEsIFBUVzVfREFUQSwgUFRXNF9EQVRBLAorCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSwKKwlQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCVBUWDNfREFUQSwgUFRYMl9EQVRBLCBQVFgxX0RBVEEsIFBUWDBfREFUQSwKKwlQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo1X0RBVEEsIFBUWjRfREFUQSwgUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzVfSU4sIFBUQzRfSU4sIFBUQzNfSU4sIFBUQzJfSU4sIFBUQzBfSU4sCisJUFREN19JTiwgUFRENl9JTiwgUFRENV9JTiwgUFRENF9JTiwgUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwKKwlQVEU3X0lOLCBQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLCBQVEUxX0lOLCBQVEUwX0lOLAorCVBURjZfSU4sIFBURjVfSU4sIFBURjRfSU4sIFBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sCisJUFRINl9JTiwgUFRINV9JTiwgUFRIMV9JTiwgUFRIMF9JTiwKKwlQVEoxX0lOLCBQVEowX0lOLAorCVBUSzZfSU4sIFBUSzVfSU4sIFBUSzRfSU4sIFBUSzNfSU4sIFBUSzJfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwKKwlQVEwzX0lOLCBQVEwyX0lOLCBQVEwxX0lOLCBQVEwwX0lOLAorCVBUTTdfSU4sIFBUTTZfSU4sIFBUTTVfSU4sIFBUTTRfSU4sCisJUFRNM19JTiwgUFRNMl9JTiwgUFRNMV9JTiwgUFRNMF9JTiwKKwlQVE43X0lOLCBQVE42X0lOLCBQVE41X0lOLCBQVE40X0lOLAorCVBUTjNfSU4sIFBUTjJfSU4sIFBUTjFfSU4sIFBUTjBfSU4sCisJUFRRNV9JTiwgUFRRNF9JTiwgUFRRM19JTiwgUFRRMl9JTiwgUFRRMF9JTiwKKwlQVFIyX0lOLAorCVBUUzRfSU4sIFBUUzJfSU4sIFBUUzFfSU4sCisJUFRUNF9JTiwgUFRUM19JTiwgUFRUMl9JTiwgUFRUMV9JTiwKKwlQVFU0X0lOLCBQVFUzX0lOLCBQVFUyX0lOLCBQVFUxX0lOLCBQVFUwX0lOLAorCVBUVjRfSU4sIFBUVjNfSU4sIFBUVjJfSU4sIFBUVjFfSU4sIFBUVjBfSU4sCisJUFRXNl9JTiwgUFRXNF9JTiwgUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLCBQVFgzX0lOLCBQVFgyX0lOLCBQVFgxX0lOLCBQVFgwX0lOLAorCVBUWTVfSU4sIFBUWTRfSU4sIFBUWTNfSU4sIFBUWTJfSU4sIFBUWTBfSU4sCisJUFRaNV9JTiwgUFRaNF9JTiwgUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLAorCVBUQTdfSU5fUEQsIFBUQTZfSU5fUEQsIFBUQTVfSU5fUEQsIFBUQTRfSU5fUEQsCisJUFRBM19JTl9QRCwgUFRBMl9JTl9QRCwgUFRBMV9JTl9QRCwgUFRBMF9JTl9QRCwKKwlQVEU3X0lOX1BELCBQVEU2X0lOX1BELCBQVEU1X0lOX1BELCBQVEU0X0lOX1BELAlQVEUxX0lOX1BELCBQVEUwX0lOX1BELAorCVBURjZfSU5fUEQsIFBURjVfSU5fUEQsIFBURjRfSU5fUEQsIFBURjNfSU5fUEQsIFBURjJfSU5fUEQsIFBURjFfSU5fUEQsCisJUFRINl9JTl9QRCwgUFRINV9JTl9QRCwgUFRIMV9JTl9QRCwgUFRIMF9JTl9QRCwKKwlQVEs2X0lOX1BELCBQVEs1X0lOX1BELCBQVEs0X0lOX1BELCBQVEszX0lOX1BELCBQVEsyX0lOX1BELCBQVEswX0lOX1BELAorCVBUTDdfSU5fUEQsIFBUTDZfSU5fUEQsIFBUTDVfSU5fUEQsIFBUTDRfSU5fUEQsCisJUFRMM19JTl9QRCwgUFRMMl9JTl9QRCwgUFRMMV9JTl9QRCwgUFRMMF9JTl9QRCwKKwlQVE03X0lOX1BELCBQVE02X0lOX1BELCBQVE01X0lOX1BELCBQVE00X0lOX1BELAorCVBUTTNfSU5fUEQsIFBUTTJfSU5fUEQsIFBUTTFfSU5fUEQsIFBUTTBfSU5fUEQsCisJUFRRNV9JTl9QRCwgUFRRNF9JTl9QRCwgUFRRM19JTl9QRCwgUFRRMl9JTl9QRCwKKwlQVFM0X0lOX1BELCBQVFMyX0lOX1BELCBQVFMxX0lOX1BELAorCVBUVDRfSU5fUEQsIFBUVDNfSU5fUEQsIFBUVDJfSU5fUEQsIFBUVDFfSU5fUEQsCisJUFRVNF9JTl9QRCwgUFRVM19JTl9QRCwgUFRVMl9JTl9QRCwgUFRVMV9JTl9QRCwgUFRVMF9JTl9QRCwKKwlQVFY0X0lOX1BELCBQVFYzX0lOX1BELCBQVFYyX0lOX1BELCBQVFYxX0lOX1BELCBQVFYwX0lOX1BELAorCVBUVzZfSU5fUEQsIFBUVzRfSU5fUEQsCVBUVzNfSU5fUEQsIFBUVzJfSU5fUEQsIFBUVzFfSU5fUEQsIFBUVzBfSU5fUEQsCisJUFRYNl9JTl9QRCwgUFRYNV9JTl9QRCwgUFRYNF9JTl9QRCwKKwlQVFgzX0lOX1BELCBQVFgyX0lOX1BELCBQVFgxX0lOX1BELCBQVFgwX0lOX1BELAorCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBUQzdfSU5fUFUsIFBUQzVfSU5fUFUsCisJUFREN19JTl9QVSwgUFRENl9JTl9QVSwgUFRENV9JTl9QVSwgUFRENF9JTl9QVSwKKwlQVEQzX0lOX1BVLCBQVEQyX0lOX1BVLCBQVEQxX0lOX1BVLAorCVBUSjFfSU5fUFUsIFBUSjBfSU5fUFUsCisJUFRRMF9JTl9QVSwKKwlQVFIyX0lOX1BVLAorCVBUWDZfSU5fUFUsCisJUFRZNV9JTl9QVSwgUFRZNF9JTl9QVSwgUFRZM19JTl9QVSwgUFRZMl9JTl9QVSwgUFRZMF9JTl9QVSwKKwlQVFo1X0lOX1BVLCBQVFo0X0lOX1BVLCBQVFozX0lOX1BVLCBQVFoyX0lOX1BVLCBQVFoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQVEE3X09VVCwgUFRBNV9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDNF9PVVQsIFBUQzNfT1VULCBQVEMyX09VVCwgUFRDMF9PVVQsCisJUFRENl9PVVQsIFBURDVfT1VULCBQVEQ0X09VVCwKKwlQVEQzX09VVCwgUFREMl9PVVQsIFBURDFfT1VULCBQVEQwX09VVCwKKwlQVEU3X09VVCwgUFRFNl9PVVQsIFBURTVfT1VULCBQVEU0X09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjZfT1VULCBQVEY1X09VVCwgUFRGNF9PVVQsIFBURjNfT1VULCBQVEYyX09VVCwgUFRGMF9PVVQsCisJUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjFfT1VULCBQVEowX09VVCwKKwlQVEs2X09VVCwgUFRLNV9PVVQsIFBUSzRfT1VULCBQVEszX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULAorCVBUTDNfT1VULCBQVEwyX09VVCwgUFRMMV9PVVQsIFBUTDBfT1VULAorCVBUTTdfT1VULCBQVE02X09VVCwgUFRNNV9PVVQsIFBUTTRfT1VULAorCVBUTTNfT1VULCBQVE0yX09VVCwgUFRNMV9PVVQsIFBUTTBfT1VULAorCVBUTjdfT1VULCBQVE42X09VVCwgUFRONV9PVVQsIFBUTjRfT1VULAorCVBUTjNfT1VULCBQVE4yX09VVCwgUFROMV9PVVQsIFBUTjBfT1VULAlQVFE2X09VVCwgUFRRNV9PVVQsIFBUUTRfT1VULAorCVBUUTNfT1VULCBQVFEyX09VVCwgUFRRMV9PVVQsIFBUUTBfT1VULAorCVBUUjRfT1VULCBQVFIzX09VVCwgUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMF9PVVQsCisJUFRUNF9PVVQsIFBUVDNfT1VULCBQVFQyX09VVCwgUFRUMF9PVVQsCisJUFRVNF9PVVQsIFBUVTNfT1VULCBQVFUyX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBUVzVfT1VULCBQVFc0X09VVCwgUFRXM19PVVQsIFBUVzJfT1VULCBQVFcxX09VVCwgUFRXMF9PVVQsCisJUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwgUFRYM19PVVQsIFBUWDJfT1VULCBQVFgxX09VVCwgUFRYMF9PVVQsCisJUFRZNV9PVVQsIFBUWTRfT1VULCBQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVNDSUYyX1RYRF9NQVJLLCBTQ0lGMl9SWERfTUFSSywKKwlTQ0lGMl9SVFNfTUFSSywgU0NJRjJfQ1RTX01BUkssIFNDSUYyX1NDS19NQVJLLAorCVNJT1RYRF9NQVJLLCBTSU9SWERfTUFSSywKKwlTSU9EX01BUkssIFNJT1NUUkIwX01BUkssIFNJT1NUUkIxX01BUkssCisJU0lPU0NLX01BUkssIFNJT01DS19NQVJLLAorCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19DTEtfTUFSSywgVklPX1ZEX01BUkssIFZJT19IRF9NQVJLLCBWSU9fRkxEX01BUkssCisJVklPX0NLT19NQVJLLCBWSU9fU1RFWF9NQVJLLCBWSU9fU1RFTV9NQVJLLCBWSU9fVkQyX01BUkssCisJVklPX0hEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCUxDREQyM19NQVJLLCBMQ0REMjJfTUFSSywgTENERDIxX01BUkssIExDREQyMF9NQVJLLAorCUxDREQxOV9NQVJLLCBMQ0REMThfTUFSSywgTENERDE3X01BUkssIExDREQxNl9NQVJLLAorCUxDREQxNV9NQVJLLCBMQ0REMTRfTUFSSywgTENERDEzX01BUkssIExDREQxMl9NQVJLLAorCUxDREQxMV9NQVJLLCBMQ0REMTBfTUFSSywgTENERDlfTUFSSywgTENERDhfTUFSSywKKwlMQ0REN19NQVJLLCBMQ0RENl9NQVJLLCBMQ0RENV9NQVJLLCBMQ0RENF9NQVJLLAorCUxDREQzX01BUkssIExDREQyX01BUkssIExDREQxX01BUkssIExDREQwX01BUkssCisJTENETENMS19NQVJLLCBMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRERPTjJfTUFSSywgTENEVkNQV0MyX01BUkssIExDRFZFUFdDMl9NQVJLLCBMQ0RWU1lOMl9NQVJLLAorCUxDRENTMl9NQVJLLAorCUlPSVMxNl9NQVJLLCBBMjVfTUFSSywgQTI0X01BUkssIEEyM19NQVJLLCBBMjJfTUFSSywKKwlCU19NQVJLLCBDUzZCX0NFMUJfTUFSSywgV0FJVF9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlIUEQ2M19NQVJLLCBIUEQ2Ml9NQVJLLCBIUEQ2MV9NQVJLLCBIUEQ2MF9NQVJLLAorCUhQRDU5X01BUkssIEhQRDU4X01BUkssIEhQRDU3X01BUkssIEhQRDU2X01BUkssCisJSFBENTVfTUFSSywgSFBENTRfTUFSSywgSFBENTNfTUFSSywgSFBENTJfTUFSSywKKwlIUEQ1MV9NQVJLLCBIUEQ1MF9NQVJLLCBIUEQ0OV9NQVJLLCBIUEQ0OF9NQVJLLAorCUhQRFFNN19NQVJLLCBIUERRTTZfTUFSSywgSFBEUU01X01BUkssIEhQRFFNNF9NQVJLLAorCUlSUTBfTUFSSywgSVJRMV9NQVJLLCBJUlEyX01BUkssIElSUTNfTUFSSywKKwlJUlE0X01BUkssIElSUTVfTUFSSywgSVJRNl9NQVJLLCBJUlE3X01BUkssCisJU0RISUNEX01BUkssIFNESElXUF9NQVJLLCBTREhJRDNfTUFSSywgU0RISUQyX01BUkssCisJU0RISUQxX01BUkssIFNESElEMF9NQVJLLCBTREhJQ01EX01BUkssIFNESElDTEtfTUFSSywKKwlTSVVBT0xSX01BUkssIFNJVUFPQlRfTUFSSywgU0lVQUlTTERfTUFSSywgU0lVQUlMUl9NQVJLLAorCVNJVUFJQlRfTUFSSywgU0lVQU9TTERfTUFSSywgU0lVTUNLQV9NQVJLLCBTSVVGQ0tBX01BUkssCisJU0lVQk9MUl9NQVJLLCBTSVVCT0JUX01BUkssIFNJVUJJU0xEX01BUkssIFNJVUJJTFJfTUFSSywKKwlTSVVCSUJUX01BUkssIFNJVUJPU0xEX01BUkssIFNJVU1DS0JfTUFSSywgU0lVRkNLQl9NQVJLLAorCUFVRFNZTkNfTUFSSywgQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywJQVVEQVRBMF9NQVJLLAorCURBQ0tfTUFSSywgRFJFUTBfTUFSSywKKwlEVl9DTEtJX01BUkssIERWX0NMS19NQVJLLCBEVl9IU1lOQ19NQVJLLCBEVl9WU1lOQ19NQVJLLAorCURWX0QxNV9NQVJLLCBEVl9EMTRfTUFSSywgRFZfRDEzX01BUkssIERWX0QxMl9NQVJLLAorCURWX0QxMV9NQVJLLCBEVl9EMTBfTUFSSywgRFZfRDlfTUFSSywgRFZfRDhfTUFSSywKKwlEVl9EN19NQVJLLCBEVl9ENl9NQVJLLCBEVl9ENV9NQVJLLCBEVl9ENF9NQVJLLAorCURWX0QzX01BUkssIERWX0QyX01BUkssIERWX0QxX01BUkssIERWX0QwX01BUkssCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCVNJT0YwX01DS19NQVJLLCBTSU9GMF9TQ0tfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX1NTMV9NQVJLLCBTSU9GMF9TUzJfTUFSSywKKwlTSU9GMF9UWERfTUFSSywJU0lPRjBfUlhEX01BUkssCisJU0lPRjFfTUNLX01BUkssIFNJT0YxX1NDS19NQVJLLAorCVNJT0YxX1NZTkNfTUFSSywgU0lPRjFfU1MxX01BUkssIFNJT0YxX1NTMl9NQVJLLAorCVNJT0YxX1RYRF9NQVJLLCBTSU9GMV9SWERfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlUU19TREFUX01BUkssIFRTX1NDS19NQVJLLCBUU19TREVOX01BUkssIFRTX1NQU1lOQ19NQVJLLAorCUlSREFfSU5fTUFSSywgSVJEQV9PVVRfTUFSSywKKwlUUFVUT19NQVJLLAorCUZDRV9NQVJLLCBOQUY3X01BUkssIE5BRjZfTUFSSywgTkFGNV9NQVJLLCBOQUY0X01BUkssCisJTkFGM19NQVJLLCBOQUYyX01BUkssIE5BRjFfTUFSSywgTkFGMF9NQVJLLCBGQ0RFX01BUkssCisJRk9FX01BUkssIEZTQ19NQVJLLCBGV0VfTUFSSywgRlJCX01BUkssCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlWSU9fRDdfU0NJRjFfU0NLLCBWSU9fRDZfU0NJRjFfUlhELCBWSU9fRDVfU0NJRjFfVFhELCBWSU9fRDQsCisJVklPX0QzLCBWSU9fRDIsIFZJT19EMSwgVklPX0QwX0xDRExDTEssCisJSFBENTUsIEhQRDU0LCBIUEQ1MywgSFBENTIsIEhQRDUxLCBIUEQ1MCwgSFBENDksIEhQRDQ4LAorCUlPSVMxNiwgSFBEUU03LCBIUERRTTYsIEhQRFFNNSwgSFBEUU00LAorCVNESElDRCwgU0RISVdQLCBTREhJRDMsIElSUTJfU0RISUQyLCBTREhJRDEsIFNESElEMCwgU0RISUNNRCwgU0RISUNMSywKKwlBMjUsIEEyNCwgQTIzLCBBMjIsIElSUTUsIElSUTRfQlMsCisJUFRGNiwgU0lPU0NLX1NJVUJPQlQsIFNJT1NUUkIxX1NJVUJPTFIsCisJU0lPU1RSQjBfU0lVQklCVCwgU0lPRF9TSVVCSUxSLCBTSU9SWERfU0lVQklTTEQsIFNJT1RYRF9TSVVCT1NMRCwKKwlBVURTWU5DLCBBVURBVEEzLCBBVURBVEEyLCBBVURBVEExLCBBVURBVEEwLAorCUxDRFZDUFdDX0xDRFZDUFdDMiwgTENEVlNZTjJfREFDSywgTENEVlNZTiwgTENERElTUF9MQ0RSUywKKwlMQ0RIU1lOX0xDRENTLCBMQ0RET05fTENERE9OMiwgTENERDE3X0RWX0hTWU5DLCBMQ0REMTZfRFZfVlNZTkMsCisJU1RBVFVTMCwgUERTVEFUVVMsIElSUTEsIElSUTAsCisJU0lVQUlMUl9TSU9GMV9TUzIsIFNJVUFJQlRfU0lPRjFfU1MxLCBTSVVBT0xSX1NJT0YxX1NZTkMsCisJU0lVQU9CVF9TSU9GMV9TQ0ssIFNJVUFJU0xEX1NJT0YxX1JYRCwgU0lVQU9TTERfU0lPRjFfVFhELCBQVEswLAorCUxDREQxNV9EVl9EMTUsIExDREQxNF9EVl9EMTQsIExDREQxM19EVl9EMTMsIExDREQxMl9EVl9EMTIsCisJTENERDExX0RWX0QxMSwgTENERDEwX0RWX0QxMCwgTENERDlfRFZfRDksIExDREQ4X0RWX0Q4LAorCUxDREQ3X0RWX0Q3LCBMQ0RENl9EVl9ENiwgTENERDVfRFZfRDUsIExDREQ0X0RWX0Q0LAorCUxDREQzX0RWX0QzLCBMQ0REMl9EVl9EMiwgTENERDFfRFZfRDEsIExDREQwX0RWX0QwLAorCUhQRDYzLCBIUEQ2MiwgSFBENjEsIEhQRDYwLCBIUEQ1OSwgSFBENTgsIEhQRDU3LCBIUEQ1NiwKKwlTSU9GMF9TUzJfU0lNX1JTVCwgU0lPRjBfU1MxX1RTX1NQU1lOQywgU0lPRjBfU1lOQ19UU19TREVOLAorCVNJT0YwX1NDS19UU19TQ0ssIFBUUTIsIFBUUTEsIFBUUTAsCisJTENEUkQsIENTNkJfQ0UxQl9MQ0RDUzIsIFdBSVQsIExDRERDS19MQ0RXUiwgTENEVkVQV0NfTENEVkVQV0MyLAorCVNDSUYwX0NUU19TSVVBSVNQRCwgU0NJRjBfUlRTX1NJVUFPU1BELAorCVNDSUYwX1NDS19UUFVUTywgU0NJRjBfUlhELCBTQ0lGMF9UWEQsCisJRk9FX1ZJT19WRDIsIEZXRSwgRlNDLCBEUkVRMCwgRkNERSwKKwlOQUYyX1ZJT19EMTAsIE5BRjFfVklPX0Q5LCBOQUYwX1ZJT19EOCwKKwlGUkJfVklPX0NMSzIsIEZDRV9WSU9fSEQyLAorCU5BRjdfVklPX0QxNSwgTkFGNl9WSU9fRDE0LCBOQUY1X1ZJT19EMTMsIE5BRjRfVklPX0QxMiwgTkFGM19WSU9fRDExLAorCVZJT19GTERfU0NJRjJfQ1RTLCBWSU9fQ0tPX1NDSUYyX1JUUywgVklPX1NURVhfU0NJRjJfU0NLLAorCVZJT19TVEVNX1NDSUYyX1RYRCwgVklPX0hEX1NDSUYyX1JYRCwKKwlWSU9fVkRfU0NJRjFfQ1RTLCBWSU9fQ0xLX1NDSUYxX1JUUywKKwlDUzZBX0NFMkIsIExDREQyMywgTENERDIyLCBMQ0REMjEsIExDREQyMCwKKwlMQ0REMTlfRFZfQ0xLSSwgTENERDE4X0RWX0NMSywKKwlLRVlPVVQ1X0lONSwgS0VZT1VUNF9JTjYsIEtFWU9VVDMsIEtFWU9VVDIsIEtFWU9VVDEsIEtFWU9VVDAsCisJS0VZSU40X0lSUTcsIEtFWUlOMywgS0VZSU4yLCBLRVlJTjEsIEtFWUlOMF9JUlE2LAorCisJUFNBMTVfS0VZSU4wLCBQU0ExNV9JUlE2LCBQU0ExNF9LRVlJTjQsIFBTQTE0X0lSUTcsCisJUFNBOV9JUlE0LCBQU0E5X0JTLCBQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCVBTQjE1X1NJT1RYRCwgUFNCMTVfU0lVQk9TTEQsIFBTQjE0X1NJT1JYRCwgUFNCMTRfU0lVQklTTEQsCisJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwgUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJUFNCMTFfU0lPU1RSQjEsIFBTQjExX1NJVUJPTFIsIFBTQjEwX1NJT1NDSywgUFNCMTBfU0lVQk9CVCwKKwlQU0I5X1NJT01DSywgUFNCOV9TSVVNQ0tCLCBQU0I4X1NJT0YwX01DSywgUFNCOF9JUlEzLAorCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULCBQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCVBTQjVfU0lPRjBfU0NLLCBQU0I1X1RTX1NDSywgUFNCNF9TSU9GMF9TWU5DLCBQU0I0X1RTX1NERU4sCisJUFNCM19TSU9GMF9TUzEsIFBTQjNfVFNfU1BTWU5DLCBQU0IyX1NJT0YwX1NTMiwgUFNCMl9TSU1fUlNULAorCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssIFBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhELAorCVBTQzE1X1NJVUFJU0xELCBQU0MxNV9TSU9GMV9SWEQsIFBTQzE0X1NJVUFPQlQsIFBTQzE0X1NJT0YxX1NDSywKKwlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLCBQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJUFNDMTFfU0lVQUlMUiwgUFNDMTFfU0lPRjFfU1MyLCBQU0MwX05BRiwgUFNDMF9WSU8sCisJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwgUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwlQU0QxMV9WSU8sIFBTRDExX1NDSUYxLCBQU0QxMF9WSU9fRDAsIFBTRDEwX0xDRExDTEssCisJUFNEOV9TSU9NQ0tfU0lVTUNLQiwgUFNEOV9TSVVGQ0tCLCBQU0Q4X1NDSUYwX1NDSywgUFNEOF9UUFVUTywKKwlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwgUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJUFNENV9DUzZCX0NFMUIsIFBTRDVfTENEQ1MyLAorCVBTRDNfTENEVkVQV0NfTENEVkNQV0MsIFBTRDNfTENEVkVQV0MyX0xDRFZDUFdDMiwKKwlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLCBQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViwKKwlQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNFMTVfU0lNX0QsCisJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCVBTRTEzX1NJT0YwX1JYRF9JUkRBX0lOLCBQU0UxM19UU19TREFULCBQU0UxMl9MQ0RWU1lOMiwgUFNFMTJfREFDSywKKwlQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgUFNFMTFfU0lVRkNLQSwKKwlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywgUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJUFNFMV9OQUYxLCBQU0UxX1ZJT19EOSwgUFNFMF9OQUYwLCBQU0UwX1ZJT19EOCwKKworCUhJWkExNF9LRVlTQywgSElaQTE0X0hJWiwKKwlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCUhJWkE5X1ZJTywgSElaQTlfSElaLAorCUhJWkE4X0xDREMsIEhJWkE4X0hJWiwKKwlISVpBN19MQ0RDLCBISVpBN19ISVosCisJSElaQTZfTENEQywgSElaQTZfSElaLAorCUhJWkIxX1ZJTywgSElaQjFfSElaLAorCUhJWkIwX1ZJTywgSElaQjBfSElaLAorCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLAorCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCUhJWkMxM19JUlE1LCBISVpDMTNfSElaLAorCUhJWkMxMl9JUlE0LCBISVpDMTJfSElaLAorCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCUhJWkMxMF9JUlEyLCBISVpDMTBfSElaLAorCUhJWkM5X0lSUTEsIEhJWkM5X0hJWiwKKwlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJTVNFTEI5X1ZJTywgTVNFTEI5X1ZJTzIsCisJTVNFTEI4X1JHQiwgTVNFTEI4X1NZUywKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfSU5fUEQsIFBUQTdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9JTl9QRCwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBM19EQVRBLCBQVEEzX0lOLCBQVEEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBMF9EQVRBLCBQVEEwX0lOLCBQVEEwX0lOX1BEKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9EQVRBKFBUQjdfREFUQSwgUFRCN19JTiwgUFRCN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjZfREFUQSwgUFRCNl9JTiwgUFRCNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjVfREFUQSwgUFRCNV9JTiwgUFRCNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjRfREFUQSwgUFRCNF9JTiwgUFRCNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjNfREFUQSwgUFRCM19JTiwgUFRCM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjJfREFUQSwgUFRCMl9JTiwgUFRCMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjFfREFUQSwgUFRCMV9JTiwgUFRCMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjBfREFUQSwgUFRCMF9JTiwgUFRCMF9PVVQpLAorCisJLyogUFRDICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEM1X0RBVEEsIFBUQzVfSU4sIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQpLAorCisJLyogUFREICovCisJUElOTVVYX0RBVEEoUFREN19EQVRBLCBQVEQ3X0lOLCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfT1VULCBQVEQ2X0lOLCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfT1VULCBQVEQ1X0lOLCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfT1VULCBQVEQ0X0lOLCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfT1VULCBQVEQzX0lOLCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfT1VULCBQVEQyX0lOLCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfT1VULCBQVEQxX0lOLCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfT1VUKSwKKworCS8qIFBURSAqLworCVBJTk1VWF9EQVRBKFBURTdfREFUQSwgUFRFN19PVVQsIFBURTdfSU4sIFBURTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTZfREFUQSwgUFRFNl9PVVQsIFBURTZfSU4sIFBURTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTVfREFUQSwgUFRFNV9PVVQsIFBURTVfSU4sIFBURTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9PVVQsIFBURTRfSU4sIFBURTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9PVVQsIFBURTFfSU4sIFBURTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9PVVQsIFBURTBfSU4sIFBURTBfSU5fUEQpLAorCisJLyogUFRGICovCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X09VVCwgUFRGNl9JTiwgUFRGNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X09VVCwgUFRGNV9JTiwgUFRGNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X09VVCwgUFRGNF9JTiwgUFRGNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX09VVCwgUFRGM19JTiwgUFRGM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX09VVCwgUFRGMl9JTiwgUFRGMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfT1VUKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIICovCisJUElOTVVYX0RBVEEoUFRIN19EQVRBLCBQVEg3X09VVCksCisJUElOTVVYX0RBVEEoUFRINl9EQVRBLCBQVEg2X09VVCwgUFRINl9JTiwgUFRINl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINV9EQVRBLCBQVEg1X09VVCwgUFRINV9JTiwgUFRINV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINF9EQVRBLCBQVEg0X09VVCksCisJUElOTVVYX0RBVEEoUFRIM19EQVRBLCBQVEgzX09VVCksCisJUElOTVVYX0RBVEEoUFRIMl9EQVRBLCBQVEgyX09VVCksCisJUElOTVVYX0RBVEEoUFRIMV9EQVRBLCBQVEgxX09VVCwgUFRIMV9JTiwgUFRIMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRIMF9EQVRBLCBQVEgwX09VVCwgUFRIMF9JTiwgUFRIMF9JTl9QRCksCisKKwkvKiBQVEogKi8KKwlQSU5NVVhfREFUQShQVEo3X0RBVEEsIFBUSjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfT1VULCBQVEoxX0lOLCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfT1VULCBQVEowX0lOLCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9PVVQsIFBUSzZfSU4sIFBUSzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9PVVQsIFBUSzVfSU4sIFBUSzVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9PVVQsIFBUSzRfSU4sIFBUSzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19PVVQsIFBUSzNfSU4sIFBUSzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX09VVCksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX09VVCwgUFRLMF9JTiwgUFRLMF9JTl9QRCksCisKKwkvKiBQVEwgKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfT1VULCBQVEw3X0lOLCBQVEw3X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfT1VULCBQVEw2X0lOLCBQVEw2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfT1VULCBQVEw1X0lOLCBQVEw1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfT1VULCBQVEw0X0lOLCBQVEw0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfT1VULCBQVEwzX0lOLCBQVEwzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfT1VULCBQVEwyX0lOLCBQVEwyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfT1VULCBQVEwxX0lOLCBQVEwxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfT1VULCBQVEwwX0lOLCBQVEwwX0lOX1BEKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9EQVRBKFBUTTdfREFUQSwgUFRNN19PVVQsIFBUTTdfSU4sIFBUTTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTZfREFUQSwgUFRNNl9PVVQsIFBUTTZfSU4sIFBUTTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTVfREFUQSwgUFRNNV9PVVQsIFBUTTVfSU4sIFBUTTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTRfREFUQSwgUFRNNF9PVVQsIFBUTTRfSU4sIFBUTTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTNfREFUQSwgUFRNM19PVVQsIFBUTTNfSU4sIFBUTTNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTJfREFUQSwgUFRNMl9PVVQsIFBUTTJfSU4sIFBUTTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTFfREFUQSwgUFRNMV9PVVQsIFBUTTFfSU4sIFBUTTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTBfREFUQSwgUFRNMF9PVVQsIFBUTTBfSU4sIFBUTTBfSU5fUEQpLAorCisJLyogUFROICovCisJUElOTVVYX0RBVEEoUFRON19EQVRBLCBQVE43X09VVCwgUFRON19JTiksCisJUElOTVVYX0RBVEEoUFRONl9EQVRBLCBQVE42X09VVCwgUFRONl9JTiksCisJUElOTVVYX0RBVEEoUFRONV9EQVRBLCBQVE41X09VVCwgUFRONV9JTiksCisJUElOTVVYX0RBVEEoUFRONF9EQVRBLCBQVE40X09VVCwgUFRONF9JTiksCisJUElOTVVYX0RBVEEoUFROM19EQVRBLCBQVE4zX09VVCwgUFROM19JTiksCisJUElOTVVYX0RBVEEoUFROMl9EQVRBLCBQVE4yX09VVCwgUFROMl9JTiksCisJUElOTVVYX0RBVEEoUFROMV9EQVRBLCBQVE4xX09VVCwgUFROMV9JTiksCisJUElOTVVYX0RBVEEoUFROMF9EQVRBLCBQVE4wX09VVCwgUFROMF9JTiksCisKKwkvKiBQVFEgKi8KKwlQSU5NVVhfREFUQShQVFE2X0RBVEEsIFBUUTZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFE1X0RBVEEsIFBUUTVfT1VULCBQVFE1X0lOLCBQVFE1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFE0X0RBVEEsIFBUUTRfT1VULCBQVFE0X0lOLCBQVFE0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfT1VULCBQVFEzX0lOLCBQVFEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEyX0RBVEEsIFBUUTJfSU4sIFBUUTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUUTFfREFUQSwgUFRRMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUTBfREFUQSwgUFRRMF9PVVQsIFBUUTBfSU4sIFBUUTBfSU5fUFUpLAorCisJLyogUFRSICovCisJUElOTVVYX0RBVEEoUFRSNF9EQVRBLCBQVFI0X09VVCksCisJUElOTVVYX0RBVEEoUFRSM19EQVRBLCBQVFIzX09VVCksCisJUElOTVVYX0RBVEEoUFRSMl9EQVRBLCBQVFIyX0lOLCBQVFIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFIxX0RBVEEsIFBUUjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIwX0RBVEEsIFBUUjBfT1VUKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTM19EQVRBLCBQVFMzX09VVCksCisJUElOTVVYX0RBVEEoUFRTMl9EQVRBLCBQVFMyX09VVCwgUFRTMl9JTiwgUFRTMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTMV9EQVRBLCBQVFMxX0lOLCBQVFMxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfT1VUKSwKKworCS8qIFBUVCAqLworCVBJTk1VWF9EQVRBKFBUVDRfREFUQSwgUFRUNF9PVVQsIFBUVDRfSU4sIFBUVDRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDNfREFUQSwgUFRUM19PVVQsIFBUVDNfSU4sIFBUVDNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDJfREFUQSwgUFRUMl9PVVQsIFBUVDJfSU4sIFBUVDJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDFfREFUQSwgUFRUMV9JTiwgUFRUMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX09VVCksCisKKwkvKiBQVFUgKi8KKwlQSU5NVVhfREFUQShQVFU0X0RBVEEsIFBUVTRfT1VULCBQVFU0X0lOLCBQVFU0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUzX0RBVEEsIFBUVTNfT1VULCBQVFUzX0lOLCBQVFUzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUyX0RBVEEsIFBUVTJfT1VULCBQVFUyX0lOLCBQVFUyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUxX0RBVEEsIFBUVTFfSU4sIFBUVTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9PVVQsIFBUVTBfSU4sIFBUVTBfSU5fUEQpLAorCisJLyogUFRWICovCisJUElOTVVYX0RBVEEoUFRWNF9EQVRBLCBQVFY0X09VVCwgUFRWNF9JTiwgUFRWNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWM19EQVRBLCBQVFYzX09VVCwgUFRWM19JTiwgUFRWM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMl9EQVRBLCBQVFYyX09VVCwgUFRWMl9JTiwgUFRWMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMV9EQVRBLCBQVFYxX09VVCwgUFRWMV9JTiwgUFRWMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMF9EQVRBLCBQVFYwX09VVCwgUFRWMF9JTiwgUFRWMF9JTl9QRCksCisKKwkvKiBQVFcgKi8KKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzVfREFUQSwgUFRXNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVzRfREFUQSwgUFRXNF9PVVQsIFBUVzRfSU4sIFBUVzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzNfREFUQSwgUFRXM19PVVQsIFBUVzNfSU4sIFBUVzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzJfREFUQSwgUFRXMl9PVVQsIFBUVzJfSU4sIFBUVzJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzFfREFUQSwgUFRXMV9PVVQsIFBUVzFfSU4sIFBUVzFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzBfREFUQSwgUFRXMF9PVVQsIFBUVzBfSU4sIFBUVzBfSU5fUEQpLAorCisJLyogUFRYICovCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X09VVCwgUFRYNl9JTiwgUFRYNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X09VVCwgUFRYNV9JTiwgUFRYNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X09VVCwgUFRYNF9JTiwgUFRYNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX09VVCwgUFRYM19JTiwgUFRYM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX09VVCwgUFRYMl9JTiwgUFRYMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX09VVCwgUFRYMV9JTiwgUFRYMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX09VVCwgUFRYMF9JTiwgUFRYMF9JTl9QRCksCisKKwkvKiBQVFkgKi8KKwlQSU5NVVhfREFUQShQVFk1X0RBVEEsIFBUWTVfT1VULCBQVFk1X0lOLCBQVFk1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFk0X0RBVEEsIFBUWTRfT1VULCBQVFk0X0lOLCBQVFk0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkzX0RBVEEsIFBUWTNfT1VULCBQVFkzX0lOLCBQVFkzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkyX0RBVEEsIFBUWTJfT1VULCBQVFkyX0lOLCBQVFkyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkxX0RBVEEsIFBUWTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkwX0RBVEEsIFBUWTBfT1VULCBQVFkwX0lOLCBQVFkwX0lOX1BVKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9EQVRBKFBUWjVfREFUQSwgUFRaNV9JTiwgUFRaNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaNF9EQVRBLCBQVFo0X0lOLCBQVFo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUWjJfREFUQSwgUFRaMl9JTiwgUFRaMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaMV9EQVRBLCBQVFoxX0lOLCBQVFoxX0lOX1BVKSwKKworCS8qIFNDSUYwICovCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssIFNDSUYwX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssIFNDSUYwX1JYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssIFBTRDdfU0NJRjBfUlRTLCBTQ0lGMF9SVFNfU0lVQU9TUEQpLAorCVBJTk1VWF9EQVRBKFNDSUYwX0NUU19NQVJLLCBQU0Q2X1NDSUYwX0NUUywgU0NJRjBfQ1RTX1NJVUFJU1BEKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywgUFNEOF9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1RYRF9NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q1X1NDSUYxX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssIFBTRDExX1NDSUYxLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19WRF9TQ0lGMV9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYxX1NDS19NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q3X1NDSUYxX1NDSyksCisKKwkvKiBTQ0lGMiAqLworCVBJTk1VWF9EQVRBKFNDSUYyX1RYRF9NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURU1fU0NJRjJfVFhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9SWERfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19IRF9TQ0lGMl9SWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1JUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX0NUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0ZMRF9TQ0lGMl9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1NDS19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURVhfU0NJRjJfU0NLKSwKKworCS8qIFNJTyAqLworCVBJTk1VWF9EQVRBKFNJT1RYRF9NQVJLLCBQU0IxNV9TSU9UWEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lPUlhEX01BUkssIFBTQjE0X1NJT1JYRCwgU0lPUlhEX1NJVUJJU0xEKSwKKwlQSU5NVVhfREFUQShTSU9EX01BUkssIFBTQjEzX1NJT0QsIFNJT0RfU0lVQklMUiksCisJUElOTVVYX0RBVEEoU0lPU1RSQjBfTUFSSywgUFNCMTJfU0lPU1RSQjAsIFNJT1NUUkIwX1NJVUJJQlQpLAorCVBJTk1VWF9EQVRBKFNJT1NUUkIxX01BUkssIFBTQjExX1NJT1NUUkIxLCBTSU9TVFJCMV9TSVVCT0xSKSwKKwlQSU5NVVhfREFUQShTSU9TQ0tfTUFSSywgUFNCMTBfU0lPU0NLLCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lPTUNLX01BUkssIFBTRDlfU0lPTUNLX1NJVU1DS0IsIFBTQjlfU0lPTUNLLCBQVEY2KSwKKworCS8qIENFVSAqLworCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjdfVklPX0QxNSksCisJUElOTVVYX0RBVEEoVklPX0QxNF9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGNl9WSU9fRDE0KSwKKwlQSU5NVVhfREFUQShWSU9fRDEzX01BUkssIFBTQzBfVklPLCBISVpBMTBfTkFGLCBOQUY1X1ZJT19EMTMpLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjRfVklPX0QxMiksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGM19WSU9fRDExKSwKKwlQSU5NVVhfREFUQShWSU9fRDEwX01BUkssIFBTRTJfVklPX0QxMCwgSElaQjBfVklPLCBOQUYyX1ZJT19EMTApLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0UxX1ZJT19EOSwgSElaQjBfVklPLCBOQUYxX1ZJT19EOSksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTRTBfVklPX0Q4LCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShWSU9fRDdfTUFSSywgUFNEMTFfVklPLCBWSU9fRDdfU0NJRjFfU0NLKSwKKwlQSU5NVVhfREFUQShWSU9fRDZfTUFSSywgUFNEMTFfVklPLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFNEMTFfVklPLCBWSU9fRDVfU0NJRjFfVFhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDRfTUFSSywgVklPX0Q0KSwKKwlQSU5NVVhfREFUQShWSU9fRDNfTUFSSywgVklPX0QzKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgVklPX0QyKSwKKwlQSU5NVVhfREFUQShWSU9fRDFfTUFSSywgVklPX0QxKSwKKwlQSU5NVVhfREFUQShWSU9fRDBfTUFSSywgUFNEMTBfVklPX0QwLCBWSU9fRDBfTENETENMSyksCisJUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLCBQU0QxMl9WSU8sIE1TRUxCOV9WSU8sIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShWSU9fVkRfTUFSSywgUFNEMTJfVklPLCBNU0VMQjlfVklPLCBWSU9fVkRfU0NJRjFfQ1RTKSwKKwlQSU5NVVhfREFUQShWSU9fSERfTUFSSywgUFNEMTNfVklPLCBNU0VMQjlfVklPLCBWSU9fSERfU0NJRjJfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRkxEX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fRkxEX1NDSUYyX0NUUyksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFZJT19TVEVYX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFWF9TQ0lGMl9TQ0spLAorCVBJTk1VWF9EQVRBKFZJT19TVEVNX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFTV9TQ0lGMl9UWEQpLAorCVBJTk1VWF9EQVRBKFZJT19WRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAorCQkgICAgSElaQjBfVklPLCBGT0VfVklPX1ZEMiksCisJUElOTVVYX0RBVEEoVklPX0hEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCisJCSAgICBISVpCMV9WSU8sIEhJWkIxX1ZJTywgRkNFX1ZJT19IRDIpLAorCVBJTk1VWF9EQVRBKFZJT19DTEsyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKKwkJICAgIEhJWkIxX1ZJTywgRlJCX1ZJT19DTEsyKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfREFUQShMQ0REMjNfTUFSSywgSElaQThfTENEQywgTENERDIzKSwKKwlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywgSElaQThfTENEQywgTENERDIyKSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgSElaQThfTENEQywgTENERDIxKSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgSElaQThfTENEQywgTENERDIwKSwKKwlQSU5NVVhfREFUQShMQ0REMTlfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOV9EVl9DTEtJKSwKKwlQSU5NVVhfREFUQShMQ0REMThfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOF9EVl9DTEspLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywKKwkJICAgIExDREQxN19EVl9IU1lOQyksCisJUElOTVVYX0RBVEEoTENERDE2X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLAorCQkgICAgTENERDE2X0RWX1ZTWU5DKSwKKwlQSU5NVVhfREFUQShMQ0REMTVfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKExDREQxNF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDE0X0RWX0QxNCksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTNfRFZfRDEzKSwKKwlQSU5NVVhfREFUQShMQ0REMTJfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKExDREQxMV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDExX0RWX0QxMSksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTBfRFZfRDEwKSwKKwlQSU5NVVhfREFUQShMQ0REOV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKExDREQ4X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REOF9EVl9EOCksCisJUElOTVVYX0RBVEEoTENERDdfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ3X0RWX0Q3KSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKExDREQ1X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0RENV9EVl9ENSksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ0X0RWX0Q0KSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMl9EVl9EMiksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxX0RWX0QxKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDBfRFZfRDApLAorCVBJTk1VWF9EQVRBKExDRExDTEtfTUFSSywgUFNEMTBfTENETENMSywgVklPX0QwX0xDRExDTEspLAorCS8qIE1haW4gTENEICovCisJUElOTVVYX0RBVEEoTENERE9OX01BUkssIFBTRDJfTENERE9OLCBISVpBN19MQ0RDLCBMQ0RET05fTENERE9OMiksCisJUElOTVVYX0RBVEEoTENEVkNQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZDUFdDX0xDRFZDUFdDMiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZFUFdDX0xDRFZFUFdDMiksCisJUElOTVVYX0RBVEEoTENEVlNZTl9NQVJLLCBISVpBN19MQ0RDLCBMQ0RWU1lOKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIE1TRUxCOF9SR0IsIEhJWkE4X0xDREMsIExDRERDS19MQ0RXUiksCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLCBNU0VMQjhfUkdCLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RESVNQX01BUkssIE1TRUxCOF9SR0IsIEhJWkE3X0xDREMsIExDRERJU1BfTENEUlMpLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RSU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RESVNQX0xDRFJTKSwKKwlQSU5NVVhfREFUQShMQ0RDU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBNU0VMQjhfU1lTLCBISVpBOF9MQ0RDLCBMQ0REQ0tfTENEV1IpLAorCVBJTk1VWF9EQVRBKExDRFJEX01BUkssIEhJWkE3X0xDREMsIExDRFJEKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RET04yX01BUkssIFBTRDJfTENERE9OMiwgSElaQTdfTENEQywgTENERE9OX0xDRERPTjIpLAorCVBJTk1VWF9EQVRBKExDRFZDUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWQ1BXQ19MQ0RWQ1BXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZFUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWRVBXQ19MQ0RWRVBXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZTWU4yX01BUkssIFBTRTEyX0xDRFZTWU4yLCBISVpBOF9MQ0RDLCBMQ0RWU1lOMl9EQUNLKSwKKwlQSU5NVVhfREFUQShMQ0RDUzJfTUFSSywgUFNENV9MQ0RDUzIsIENTNkJfQ0UxQl9MQ0RDUzIpLAorCisJLyogQlNDICovCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIElPSVMxNiksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIEEyNSksCisJUElOTVVYX0RBVEEoQTI0X01BUkssIEEyNCksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIEEyMyksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIEEyMiksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUFNBOV9CUywgSVJRNF9CUyksCisJUElOTVVYX0RBVEEoQ1M2Ql9DRTFCX01BUkssIFBTRDVfQ1M2Ql9DRTFCLCBDUzZCX0NFMUJfTENEQ1MyKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFdBSVQpLAorCVBJTk1VWF9EQVRBKENTNkFfQ0UyQl9NQVJLLCBDUzZBX0NFMkIpLAorCisJLyogU0JTQyAqLworCVBJTk1VWF9EQVRBKEhQRDYzX01BUkssIEhQRDYzKSwKKwlQSU5NVVhfREFUQShIUEQ2Ml9NQVJLLCBIUEQ2MiksCisJUElOTVVYX0RBVEEoSFBENjFfTUFSSywgSFBENjEpLAorCVBJTk1VWF9EQVRBKEhQRDYwX01BUkssIEhQRDYwKSwKKwlQSU5NVVhfREFUQShIUEQ1OV9NQVJLLCBIUEQ1OSksCisJUElOTVVYX0RBVEEoSFBENThfTUFSSywgSFBENTgpLAorCVBJTk1VWF9EQVRBKEhQRDU3X01BUkssIEhQRDU3KSwKKwlQSU5NVVhfREFUQShIUEQ1Nl9NQVJLLCBIUEQ1NiksCisJUElOTVVYX0RBVEEoSFBENTVfTUFSSywgSFBENTUpLAorCVBJTk1VWF9EQVRBKEhQRDU0X01BUkssIEhQRDU0KSwKKwlQSU5NVVhfREFUQShIUEQ1M19NQVJLLCBIUEQ1MyksCisJUElOTVVYX0RBVEEoSFBENTJfTUFSSywgSFBENTIpLAorCVBJTk1VWF9EQVRBKEhQRDUxX01BUkssIEhQRDUxKSwKKwlQSU5NVVhfREFUQShIUEQ1MF9NQVJLLCBIUEQ1MCksCisJUElOTVVYX0RBVEEoSFBENDlfTUFSSywgSFBENDkpLAorCVBJTk1VWF9EQVRBKEhQRDQ4X01BUkssIEhQRDQ4KSwKKwlQSU5NVVhfREFUQShIUERRTTdfTUFSSywgSFBEUU03KSwKKwlQSU5NVVhfREFUQShIUERRTTZfTUFSSywgSFBEUU02KSwKKwlQSU5NVVhfREFUQShIUERRTTVfTUFSSywgSFBEUU01KSwKKwlQSU5NVVhfREFUQShIUERRTTRfTUFSSywgSFBEUU00KSwKKworCS8qIElSUSAqLworCVBJTk1VWF9EQVRBKElSUTBfTUFSSywgSElaQzhfSVJRMCwgSVJRMCksCisJUElOTVVYX0RBVEEoSVJRMV9NQVJLLCBISVpDOV9JUlExLCBJUlExKSwKKwlQSU5NVVhfREFUQShJUlEyX01BUkssIFBTQTRfSVJRMiwgSElaQzEwX0lSUTIsIElSUTJfU0RISUQyKSwKKwlQSU5NVVhfREFUQShJUlEzX01BUkssIFBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0I4X0lSUTMsCisJCSAgICBISVpDMTFfSVJRMywgUFRRMCksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0E5X0lSUTQsIEhJWkMxMl9JUlE0LCBJUlE0X0JTKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIEhJWkMxM19JUlE1LCBJUlE1KSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBTQTE1X0lSUTYsIEhJWkMxNF9JUlE2LCBLRVlJTjBfSVJRNiksCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQU0ExNF9JUlE3LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCisJLyogU0RISSAqLworCVBJTk1VWF9EQVRBKFNESElDRF9NQVJLLCBTREhJQ0QpLAorCVBJTk1VWF9EQVRBKFNESElXUF9NQVJLLCBTREhJV1ApLAorCVBJTk1VWF9EQVRBKFNESElEM19NQVJLLCBTREhJRDMpLAorCVBJTk1VWF9EQVRBKFNESElEMl9NQVJLLCBQU0E0X1NESElEMiwgSVJRMl9TREhJRDIpLAorCVBJTk1VWF9EQVRBKFNESElEMV9NQVJLLCBTREhJRDEpLAorCVBJTk1VWF9EQVRBKFNESElEMF9NQVJLLCBTREhJRDApLAorCVBJTk1VWF9EQVRBKFNESElDTURfTUFSSywgU0RISUNNRCksCisJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKKwlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCisJUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCVBJTk1VWF9EQVRBKFNJVUJPTFJfTUFSSywgUFNCMTFfU0lVQk9MUiwgU0lPU1RSQjFfU0lVQk9MUiksCisJUElOTVVYX0RBVEEoU0lVQk9CVF9NQVJLLCBQU0IxMF9TSVVCT0JULCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lVQklTTERfTUFSSywgUFNCMTRfU0lVQklTTEQsIFNJT1JYRF9TSVVCSVNMRCksCisJUElOTVVYX0RBVEEoU0lVQklMUl9NQVJLLCBQU0IxM19TSVVCSUxSLCBTSU9EX1NJVUJJTFIpLAorCVBJTk1VWF9EQVRBKFNJVUJJQlRfTUFSSywgUFNCMTJfU0lVQklCVCwgU0lPU1RSQjBfU0lVQklCVCksCisJUElOTVVYX0RBVEEoU0lVQk9TTERfTUFSSywgUFNCMTVfU0lVQk9TTEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lVTUNLQl9NQVJLLCBQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0I5X1NJVU1DS0IsIFBURjYpLAorCVBJTk1VWF9EQVRBKFNJVUZDS0JfTUFSSywgUFNEOV9TSVVGQ0tCLCBQVEY2KSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgQVVEU1lOQyksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBBVURBVEEzKSwKKwlQSU5NVVhfREFUQShBVURBVEEyX01BUkssIEFVREFUQTIpLAorCVBJTk1VWF9EQVRBKEFVREFUQTFfTUFSSywgQVVEQVRBMSksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBBVURBVEEwKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfREFUQShEQUNLX01BUkssIFBTRTEyX0RBQ0ssIExDRFZTWU4yX0RBQ0spLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIERSRVEwKSwKKworCS8qIFZPVSAqLworCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNEMF9EViwgTENERDE5X0RWX0NMS0kpLAorCVBJTk1VWF9EQVRBKERWX0NMS19NQVJLLCBQU0QwX0RWLCBMQ0REMThfRFZfQ0xLKSwKKwlQSU5NVVhfREFUQShEVl9IU1lOQ19NQVJLLCBQU0QwX0RWLCBMQ0REMTdfRFZfSFNZTkMpLAorCVBJTk1VWF9EQVRBKERWX1ZTWU5DX01BUkssIFBTRDBfRFYsIExDREQxNl9EVl9WU1lOQyksCisJUElOTVVYX0RBVEEoRFZfRDE1X01BUkssIFBTRDBfRFYsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKERWX0QxNF9NQVJLLCBQU0QwX0RWLCBMQ0REMTRfRFZfRDE0KSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNEMF9EViwgTENERDEzX0RWX0QxMyksCisJUElOTVVYX0RBVEEoRFZfRDEyX01BUkssIFBTRDBfRFYsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKERWX0QxMV9NQVJLLCBQU0QwX0RWLCBMQ0REMTFfRFZfRDExKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNEMF9EViwgTENERDEwX0RWX0QxMCksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNEMF9EViwgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKERWX0Q4X01BUkssIFBTRDBfRFYsIExDREQ4X0RWX0Q4KSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0QwX0RWLCBMQ0REN19EVl9ENyksCisJUElOTVVYX0RBVEEoRFZfRDZfTUFSSywgUFNEMF9EViwgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKERWX0Q1X01BUkssIFBTRDBfRFYsIExDREQ1X0RWX0Q1KSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0QwX0RWLCBMQ0RENF9EVl9ENCksCisJUElOTVVYX0RBVEEoRFZfRDNfTUFSSywgUFNEMF9EViwgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKERWX0QyX01BUkssIFBTRDBfRFYsIExDREQyX0RWX0QyKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0QwX0RWLCBMQ0REMV9EVl9EMSksCisJUElOTVVYX0RBVEEoRFZfRDBfTUFSSywgUFNEMF9EViwgTENERDBfRFZfRDApLAorCisJLyogQ1BHICovCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBTVEFUVVMwKSwKKwlQSU5NVVhfREFUQShQRFNUQVRVU19NQVJLLCBQRFNUQVRVUyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9EQVRBKFNJT0YwX01DS19NQVJLLCBQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNCOF9TSU9GMF9NQ0ssIFBUUTApLAorCVBJTk1VWF9EQVRBKFNJT0YwX1NDS19NQVJLLCBQU0I1X1NJT0YwX1NDSywgU0lPRjBfU0NLX1RTX1NDSyksCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQU0I0X1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfVFNfU0RFTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU1MxX01BUkssIFBTQjNfU0lPRjBfU1MxLCBTSU9GMF9TUzFfVFNfU1BTWU5DKSwKKwlQSU5NVVhfREFUQShTSU9GMF9TUzJfTUFSSywgUFNCMl9TSU9GMF9TUzIsIFNJT0YwX1NTMl9TSU1fUlNUKSwKKwlQSU5NVVhfREFUQShTSU9GMF9UWERfTUFSSywgUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULAorCQkgICAgUFNCN19TSU9GMF9UWEQsIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJT0YwX1JYRF9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwKKwkJICAgIFBTQjZfU0lPRjBfUlhELCBQVFEyKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0RBVEEoU0lPRjFfTUNLX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLAorCQkgICAgUFNCMV9TSU9GMV9NQ0ssIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NDS19NQVJLLCBQU0MxNF9TSU9GMV9TQ0ssIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSU9GMV9TWU5DX01BUkssIFBTQzEzX1NJT0YxX1NZTkMsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lPRjFfU1MxX01BUkssIFBTQzEyX1NJT0YxX1NTMSwgU0lVQUlCVF9TSU9GMV9TUzEpLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NTMl9NQVJLLCBQU0MxMV9TSU9GMV9TUzIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSU9GMV9UWERfTUFSSywgUFNCMF9TSU9GMV9UWEQsIFNJVUFPU0xEX1NJT0YxX1RYRCksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTQzE1X1NJT0YxX1JYRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKworCS8qIFNJTSAqLworCVBJTk1VWF9EQVRBKFNJTV9EX01BUkssIFBTRTE1X1NJTV9ELCBQVFEwKSwKKwlQSU5NVVhfREFUQShTSU1fQ0xLX01BUkssIFBTRTE0X1NJTV9DTEssIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJTV9SU1RfTUFSSywgUFNCMl9TSU1fUlNULCBTSU9GMF9TUzJfU0lNX1JTVCksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0RBVEEoVFNfU0RBVF9NQVJLLCBQU0UxM19UU19TREFULCBQVFEyKSwKKwlQSU5NVVhfREFUQShUU19TQ0tfTUFSSywgUFNCNV9UU19TQ0ssIFNJT0YwX1NDS19UU19TQ0spLAorCVBJTk1VWF9EQVRBKFRTX1NERU5fTUFSSywgUFNCNF9UU19TREVOLCBTSU9GMF9TWU5DX1RTX1NERU4pLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQ19NQVJLLCBQU0IzX1RTX1NQU1lOQywgU0lPRjBfU1MxX1RTX1NQU1lOQyksCisKKwkvKiBJUkRBICovCisJUElOTVVYX0RBVEEoSVJEQV9JTl9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNCNl9JUkRBX0lOLCBQVFEyKSwKKwlQSU5NVVhfREFUQShJUkRBX09VVF9NQVJLLCBQU0UxNF9TSU9GMF9UWERfSVJEQV9PVVQsCisJCSAgICBQU0I3X0lSREFfT1VULCBQVFExKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9EQVRBKFRQVVRPX01BUkssIFBTRDhfVFBVVE8sIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9EQVRBKEZDRV9NQVJLLCBQU0UzX0ZMQ1RMLCBGQ0VfVklPX0hEMiksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGN19WSU9fRDE1KSwKKwlQSU5NVVhfREFUQShOQUY2X01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUY2X1ZJT19EMTQpLAorCVBJTk1VWF9EQVRBKE5BRjVfTUFSSywgUFNDMF9OQUYsIEhJWkExMF9OQUYsIE5BRjVfVklPX0QxMyksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGNF9WSU9fRDEyKSwKKwlQSU5NVVhfREFUQShOQUYzX01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUYzX1ZJT19EMTEpLAorCVBJTk1VWF9EQVRBKE5BRjJfTUFSSywgUFNFMl9OQUYyLCBISVpCMF9WSU8sIE5BRjJfVklPX0QxMCksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0UxX05BRjEsIEhJWkIwX1ZJTywgTkFGMV9WSU9fRDkpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUFNFMF9OQUYwLCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIEZDREUpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQU0UzX0ZMQ1RMLCBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKKwlQSU5NVVhfREFUQShGU0NfTUFSSywgRlNDKSwKKwlQSU5NVVhfREFUQShGV0VfTUFSSywgRldFKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNFM19GTENUTCwgRlJCX1ZJT19DTEsyKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0RBVEEoS0VZSU4wX01BUkssIFBTQTE1X0tFWUlOMCwgSElaQzE0X0lSUTYsIEtFWUlOMF9JUlE2KSwKKwlQSU5NVVhfREFUQShLRVlJTjFfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlJTjEpLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWUlOMiksCisJUElOTVVYX0RBVEEoS0VZSU4zX01BUkssIEhJWkExNF9LRVlTQywgS0VZSU4zKSwKKwlQSU5NVVhfREFUQShLRVlJTjRfTUFSSywgUFNBMTRfS0VZSU40LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDBfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQwKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIEhJWkExNF9LRVlTQywgS0VZT1VUMSksCisJUElOTVVYX0RBVEEoS0VZT1VUMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDIpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDNfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQzKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ0X0lONl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDRfSU42KSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDVfSU41KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUFRBICovCisJUElOTVVYX0dQSU8oR1BJT19QVEE3LCBQVEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNiwgUFRBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTUsIFBUQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE0LCBQVEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMywgUFRBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTIsIFBUQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEExLCBQVEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMCwgUFRBMF9EQVRBKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRCNywgUFRCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjYsIFBUQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI1LCBQVEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNCwgUFRCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjMsIFBUQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIyLCBQVEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMSwgUFRCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjAsIFBUQjBfREFUQSksCisKKwkvKiBQVEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQzcsIFBUQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMCwgUFRDMF9EQVRBKSwKKworCS8qIFBURCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRENywgUFREN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDYsIFBURDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ1LCBQVEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENCwgUFRENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDMsIFBURDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQyLCBQVEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMSwgUFREMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDAsIFBURDBfREFUQSksCisKKwkvKiBQVEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURTcsIFBURTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUxLCBQVEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMCwgUFRFMF9EQVRBKSwKKworCS8qIFBURiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRGNiwgUFRGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjUsIFBURjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY0LCBQVEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMywgUFRGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjIsIFBURjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYxLCBQVEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMCwgUFRGMF9EQVRBKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNiwgUFRKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjUsIFBUSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoxLCBQVEoxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMCwgUFRKMF9EQVRBKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRLNiwgUFRLNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzUsIFBUSzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs0LCBQVEs0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMywgUFRLM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzIsIFBUSzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEsxLCBQVEsxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMCwgUFRLMF9EQVRBKSwKKworCS8qIFBUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRMNywgUFRMN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDYsIFBUTDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw1LCBQVEw1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNCwgUFRMNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDMsIFBUTDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwyLCBQVEwyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMSwgUFRMMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDAsIFBUTDBfREFUQSksCisKKwkvKiBQVE0gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTTcsIFBUTTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE02LCBQVE02X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNSwgUFRNNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTQsIFBUTTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0zLCBQVE0zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMiwgUFRNMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTEsIFBUTTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0wLCBQVE0wX0RBVEEpLAorCisJLyogUFROICovCisJUElOTVVYX0dQSU8oR1BJT19QVE43LCBQVE43X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONiwgUFRONl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjUsIFBUTjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE40LCBQVE40X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMywgUFROM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjIsIFBUTjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4xLCBQVE4xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMCwgUFROMF9EQVRBKSwKKworCS8qIFBUUSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRRNiwgUFRRNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTUsIFBUUTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFE0LCBQVFE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMywgUFRRM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTIsIFBUUTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFExLCBQVFExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMCwgUFRRMF9EQVRBKSwKKworCS8qIFBUUiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRSNCwgUFRSNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjMsIFBUUjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIyLCBQVFIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMSwgUFRSMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjAsIFBUUjBfREFUQSksCisKKwkvKiBQVFMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUzQsIFBUUzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMzLCBQVFMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMiwgUFRTMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzEsIFBUUzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMwLCBQVFMwX0RBVEEpLAorCisJLyogUFRUICovCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNCwgUFRVNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTMsIFBUVTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUyLCBQVFUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMSwgUFRVMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTAsIFBUVTBfREFUQSksCisKKwkvKiBQVFYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVjQsIFBUVjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYzLCBQVFYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMiwgUFRWMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjEsIFBUVjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYwLCBQVFYwX0RBVEEpLAorCisJLyogUFRXICovCisJUElOTVVYX0dQSU8oR1BJT19QVFc2LCBQVFc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNSwgUFRXNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzQsIFBUVzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFczLCBQVFczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMiwgUFRXMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzEsIFBUVzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcwLCBQVFcwX0RBVEEpLAorCisJLyogUFRYICovCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk1LCBQVFk1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNCwgUFRZNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTMsIFBUWTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkyLCBQVFkyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMSwgUFRZMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTAsIFBUWTBfREFUQSksCisKKwkvKiBQVFogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWjUsIFBUWjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo0LCBQVFo0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMywgUFRaM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjIsIFBUWjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoxLCBQVFoxX0RBVEEpLAorCisJLyogU0NJRjAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwgU0NJRjBfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELCBTQ0lGMF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsIFNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX0NUUywgU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLCBTQ0lGMF9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELCBTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsIFNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JUUywgU0NJRjFfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfQ1RTLCBTQ0lGMV9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TQ0ssIFNDSUYxX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9UWEQsIFNDSUYyX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1JYRCwgU0NJRjJfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUlRTLCBTQ0lGMl9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9DVFMsIFNDSUYyX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1NDSywgU0NJRjJfU0NLX01BUkspLAorCisJLyogU0lPICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9UWEQsIFNJT1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1JYRCwgU0lPUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRCwgU0lPRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIwLCBTSU9TVFJCMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIxLCBTSU9TVFJCMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NDSywgU0lPU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPTUNLLCBTSU9NQ0tfTUFSSyksCisKKwkvKiBDRVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTUsIFZJT19EMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE0LCBWSU9fRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMywgVklPX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTIsIFZJT19EMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDExLCBWSU9fRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMCwgVklPX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOSwgVklPX0Q5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q4LCBWSU9fRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDcsIFZJT19EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENiwgVklPX0Q2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q1LCBWSU9fRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDQsIFZJT19ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMywgVklPX0QzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QyLCBWSU9fRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEsIFZJT19EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMCwgVklPX0QwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSywgVklPX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRCwgVklPX1ZEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hELCBWSU9fSERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRkxELCBWSU9fRkxEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NLTywgVklPX0NLT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVYLCBWSU9fU1RFWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVNLCBWSU9fU1RFTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDIsIFZJT19WRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQyLCBWSU9fSEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSzIsIFZJT19DTEsyX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIzLCBMQ0REMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjIsIExDREQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMSwgTENERDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIwLCBMQ0REMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTksIExDREQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxOCwgTENERDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE3LCBMQ0REMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTYsIExDREQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNSwgTENERDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE0LCBMQ0REMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTMsIExDREQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMiwgTENERDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDExLCBMQ0REMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTAsIExDREQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ5LCBMQ0REOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ4LCBMQ0REOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ3LCBMQ0REN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ2LCBMQ0RENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ1LCBMQ0RENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ0LCBMQ0RENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQzLCBMQ0REM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyLCBMQ0REMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxLCBMQ0REMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQwLCBMQ0REMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRExDTEssIExDRExDTEtfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTjIsIExDRERPTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RWQ1BXQzIsIExDRFZDUFdDMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZFUFdDMiwgTENEVkVQV0MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTjIsIExDRFZTWU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEQ1MyLCBMQ0RDUzJfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dBSVQsIFdBSVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZBX0NFMkIsIENTNkFfQ0UyQl9NQVJLKSwKKworCS8qIFNCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYzLCBIUEQ2M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYyLCBIUEQ2Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYxLCBIUEQ2MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYwLCBIUEQ2MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU5LCBIUEQ1OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU4LCBIUEQ1OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU3LCBIUEQ1N19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU2LCBIUEQ1Nl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU1LCBIUEQ1NV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU0LCBIUEQ1NF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUzLCBIUEQ1M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUyLCBIUEQ1Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUxLCBIUEQ1MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUwLCBIUEQ1MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ5LCBIUEQ0OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ4LCBIUEQ0OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNywgSFBEUU03X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFBEUU02LCBIUERRTTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUERRTTUsIEhQRFFNNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNCwgSFBEUU00X01BUkspLAorCisJLyogSVJRICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwLCBJUlEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMSwgSVJRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTIsIElSUTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzLCBJUlEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNCwgSVJRNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTUsIElSUTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2LCBJUlE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNywgSVJRN19NQVJLKSwKKworCS8qIFNESEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDRCwgU0RISUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISVdQLCBTREhJV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDMsIFNESElEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElEMiwgU0RISUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUQxLCBTREhJRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDAsIFNESElEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDTUQsIFNESElDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJQ0xLLCBTREhJQ0xLX01BUkspLAorCisJLyogU0lVIC0gUG9ydCBBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJU0xELCBTSVVBSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJTFIsIFNJVUFJTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSUJULCBTSVVBSUJUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9TTEQsIFNJVUFPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVTUNLQSwgU0lVTUNLQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUZDS0EsIFNJVUZDS0FfTUFSSyksCisKKwkvKiBTSVUgLSBQb3J0IEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklTTEQsIFNJVUJJU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklMUiwgU0lVQklMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJQlQsIFNJVUJJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT1NMRCwgU0lVQk9TTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVNQ0tCLCBTSVVNQ0tCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVRkNLQiwgU0lVRkNLQl9NQVJLKSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEU1lOQywgQVVEU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTMsIEFVREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEyLCBBVURBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMSwgQVVEQVRBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTAsIEFVREFUQTBfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLLCBEQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogVk9VICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEtJLCBEVl9DTEtJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfQ0xLLCBEVl9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9IU1lOQywgRFZfSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9WU1lOQywgRFZfVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTUsIERWX0QxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNCwgRFZfRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEzLCBEVl9EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTIsIERWX0QxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMSwgRFZfRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEwLCBEVl9EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOSwgRFZfRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOCwgRFZfRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENywgRFZfRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENiwgRFZfRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENSwgRFZfRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENCwgRFZfRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMywgRFZfRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMiwgRFZfRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMSwgRFZfRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMCwgRFZfRDBfTUFSSyksCisKKwkvKiBDUEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QRFNUQVRVUywgUERTVEFUVVNfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfTUNLLCBTSU9GMF9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TQ0ssIFNJT0YwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TUzEsIFNJT0YwX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NTMiwgU0lPRjBfU1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfVFhELCBTSU9GMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9SWEQsIFNJT0YwX1JYRF9NQVJLKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9NQ0ssIFNJT0YxX01DS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NDSywgU0lPRjFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NTMSwgU0lPRjFfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1MyLCBTSU9GMV9TUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIFRTSUYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NEQVQsIFRTX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TQ0ssIFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NERU4sIFRTX1NERU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TUFNZTkMsIFRTX1NQU1lOQ19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBUUFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPLCBUUFVUT19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogS0VZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMCwgS0VZSU4wX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4xLCBLRVlJTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjIsIEtFWUlOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMywgS0VZSU4zX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU40LCBLRVlJTjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQwLCBLRVlPVVQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMSwgS0VZT1VUMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDIsIEtFWU9VVDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQzLCBLRVlPVVQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNF9JTjYsIEtFWU9VVDRfSU42X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNV9JTjUsIEtFWU9VVDVfSU41X01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJVklPX0Q3X1NDSUYxX1NDSywgUFRBN19PVVQsIFBUQTdfSU5fUEQsIFBUQTdfSU4sCisJCVZJT19ENl9TQ0lGMV9SWEQsIDAsIFBUQTZfSU5fUEQsIFBUQTZfSU4sCisJCVZJT19ENV9TQ0lGMV9UWEQsIFBUQTVfT1VULCBQVEE1X0lOX1BELCBQVEE1X0lOLAorCQlWSU9fRDQsIDAsIFBUQTRfSU5fUEQsIFBUQTRfSU4sCisJCVZJT19EMywgMCwgUFRBM19JTl9QRCwgUFRBM19JTiwKKwkJVklPX0QyLCAwLCBQVEEyX0lOX1BELCBQVEEyX0lOLAorCQlWSU9fRDEsIDAsIFBUQTFfSU5fUEQsIFBUQTFfSU4sCisJCVZJT19EMF9MQ0RMQ0xLLCAwLCBQVEEwX0lOX1BELCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlIUEQ1NSwgUFRCN19PVVQsIDAsIFBUQjdfSU4sCisJCUhQRDU0LCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJSFBENTMsIFBUQjVfT1VULCAwLCBQVEI1X0lOLAorCQlIUEQ1MiwgUFRCNF9PVVQsIDAsIFBUQjRfSU4sCisJCUhQRDUxLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJSFBENTAsIFBUQjJfT1VULCAwLCBQVEIyX0lOLAorCQlIUEQ0OSwgUFRCMV9PVVQsIDAsIFBUQjFfSU4sCisJCUhQRDQ4LCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJMCwgMCwgUFRDN19JTl9QVSwgUFRDN19JTiwKKwkJMCwgMCwgMCwgMCwKKwkJSU9JUzE2LCAwLCBQVEM1X0lOX1BVLCBQVEM1X0lOLAorCQlIUERRTTcsIFBUQzRfT1VULCAwLCBQVEM0X0lOLAorCQlIUERRTTYsIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlIUERRTTUsIFBUQzJfT1VULCAwLCBQVEMyX0lOLAorCQkwLCAwLCAwLCAwLAorCQlIUERRTTQsIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlTREhJQ0QsIDAsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVNESElXUCwgUFRENl9PVVQsIFBURDZfSU5fUFUsIFBURDZfSU4sCisJCVNESElEMywgUFRENV9PVVQsIFBURDVfSU5fUFUsIFBURDVfSU4sCisJCUlSUTJfU0RISUQyLCBQVEQ0X09VVCwgUFRENF9JTl9QVSwgUFRENF9JTiwKKwkJU0RISUQxLCBQVEQzX09VVCwgUFREM19JTl9QVSwgUFREM19JTiwKKwkJU0RISUQwLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJU0RISUNNRCwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVNESElDTEssIFBURDBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQlBMjUsIFBURTdfT1VULCBQVEU3X0lOX1BELCBQVEU3X0lOLAorCQlBMjQsIFBURTZfT1VULCBQVEU2X0lOX1BELCBQVEU2X0lOLAorCQlBMjMsIFBURTVfT1VULCBQVEU1X0lOX1BELCBQVEU1X0lOLAorCQlBMjIsIFBURTRfT1VULCBQVEU0X0lOX1BELCBQVEU0X0lOLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlE1LCBQVEUxX09VVCwgUFRFMV9JTl9QRCwgUFRFMV9JTiwKKwkJSVJRNF9CUywgUFRFMF9PVVQsIFBURTBfSU5fUEQsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjYsIFBURjZfT1VULCBQVEY2X0lOX1BELCBQVEY2X0lOLAorCQlTSU9TQ0tfU0lVQk9CVCwgUFRGNV9PVVQsIFBURjVfSU5fUEQsIFBURjVfSU4sCisJCVNJT1NUUkIxX1NJVUJPTFIsIFBURjRfT1VULCBQVEY0X0lOX1BELCBQVEY0X0lOLAorCQlTSU9TVFJCMF9TSVVCSUJULCBQVEYzX09VVCwgUFRGM19JTl9QRCwgUFRGM19JTiwKKwkJU0lPRF9TSVVCSUxSLCBQVEYyX09VVCwgUFRGMl9JTl9QRCwgUFRGMl9JTiwKKwkJU0lPUlhEX1NJVUJJU0xELCAwLCBQVEYxX0lOX1BELCBQVEYxX0lOLAorCQlTSU9UWERfU0lVQk9TTEQsIFBURjBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBHQ1IiLCAweGE0MDUwMTBjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlBVURTWU5DLCBQVEc0X09VVCwgMCwgMCwKKwkJQVVEQVRBMywgUFRHM19PVVQsIDAsIDAsCisJCUFVREFUQTIsIFBURzJfT1VULCAwLCAwLAorCQlBVURBVEExLCBQVEcxX09VVCwgMCwgMCwKKwkJQVVEQVRBMCwgUFRHMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4YTQwNTAxMGUsIDE2LCAyKSB7CisJCUxDRFZDUFdDX0xDRFZDUFdDMiwgUFRIN19PVVQsIDAsIDAsCisJCUxDRFZTWU4yX0RBQ0ssIFBUSDZfT1VULCBQVEg2X0lOX1BELCBQVEg2X0lOLAorCQlMQ0RWU1lOLCBQVEg1X09VVCwgUFRINV9JTl9QRCwgUFRINV9JTiwKKwkJTENERElTUF9MQ0RSUywgUFRINF9PVVQsIDAsIDAsCisJCUxDREhTWU5fTENEQ1MsIFBUSDNfT1VULCAwLCAwLAorCQlMQ0RET05fTENERE9OMiwgUFRIMl9PVVQsIDAsIDAsCisJCUxDREQxN19EVl9IU1lOQywgUFRIMV9PVVQsIFBUSDFfSU5fUEQsIFBUSDFfSU4sCisJCUxDREQxNl9EVl9WU1lOQywgUFRIMF9PVVQsIFBUSDBfSU5fUEQsIFBUSDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4YTQwNTAxMTAsIDE2LCAyKSB7CisJCVNUQVRVUzAsIFBUSjdfT1VULCAwLCAwLAorCQkwLCBQVEo2X09VVCwgMCwgMCwKKwkJUERTVEFUVVMsIFBUSjVfT1VULCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlExLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJSVJRMCwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJVUFJTFJfU0lPRjFfU1MyLCBQVEs2X09VVCwgUFRLNl9JTl9QRCwgUFRLNl9JTiwKKwkJU0lVQUlCVF9TSU9GMV9TUzEsIFBUSzVfT1VULCBQVEs1X0lOX1BELCBQVEs1X0lOLAorCQlTSVVBT0xSX1NJT0YxX1NZTkMsIFBUSzRfT1VULCBQVEs0X0lOX1BELCBQVEs0X0lOLAorCQlTSVVBT0JUX1NJT0YxX1NDSywgUFRLM19PVVQsIFBUSzNfSU5fUEQsIFBUSzNfSU4sCisJCVNJVUFJU0xEX1NJT0YxX1JYRCwgMCwgUFRLMl9JTl9QRCwgUFRLMl9JTiwKKwkJU0lVQU9TTERfU0lPRjFfVFhELCBQVEsxX09VVCwgMCwgMCwKKwkJUFRLMCwgUFRLMF9PVVQsIFBUSzBfSU5fUEQsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCUxDREQxNV9EVl9EMTUsIFBUTDdfT1VULCBQVEw3X0lOX1BELCBQVEw3X0lOLAorCQlMQ0REMTRfRFZfRDE0LCBQVEw2X09VVCwgUFRMNl9JTl9QRCwgUFRMNl9JTiwKKwkJTENERDEzX0RWX0QxMywgUFRMNV9PVVQsIFBUTDVfSU5fUEQsIFBUTDVfSU4sCisJCUxDREQxMl9EVl9EMTIsIFBUTDRfT1VULCBQVEw0X0lOX1BELCBQVEw0X0lOLAorCQlMQ0REMTFfRFZfRDExLCBQVEwzX09VVCwgUFRMM19JTl9QRCwgUFRMM19JTiwKKwkJTENERDEwX0RWX0QxMCwgUFRMMl9PVVQsIFBUTDJfSU5fUEQsIFBUTDJfSU4sCisJCUxDREQ5X0RWX0Q5LCBQVEwxX09VVCwgUFRMMV9JTl9QRCwgUFRMMV9JTiwKKwkJTENERDhfRFZfRDgsIFBUTDBfT1VULCBQVEwwX0lOX1BELCBQVEwwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBNQ1IiLCAweGE0MDUwMTE2LCAxNiwgMikgeworCQlMQ0REN19EVl9ENywgUFRNN19PVVQsIFBUTTdfSU5fUEQsIFBUTTdfSU4sCisJCUxDREQ2X0RWX0Q2LCBQVE02X09VVCwgUFRNNl9JTl9QRCwgUFRNNl9JTiwKKwkJTENERDVfRFZfRDUsIFBUTTVfT1VULCBQVE01X0lOX1BELCBQVE01X0lOLAorCQlMQ0RENF9EVl9ENCwgUFRNNF9PVVQsIFBUTTRfSU5fUEQsIFBUTTRfSU4sCisJCUxDREQzX0RWX0QzLCBQVE0zX09VVCwgUFRNM19JTl9QRCwgUFRNM19JTiwKKwkJTENERDJfRFZfRDIsIFBUTTJfT1VULCBQVE0yX0lOX1BELCBQVE0yX0lOLAorCQlMQ0REMV9EVl9EMSwgUFRNMV9PVVQsIFBUTTFfSU5fUEQsIFBUTTFfSU4sCisJCUxDREQwX0RWX0QwLCBQVE0wX09VVCwgUFRNMF9JTl9QRCwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTkNSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJSFBENjMsIFBUTjdfT1VULCAwLCBQVE43X0lOLAorCQlIUEQ2MiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCUhQRDYxLCBQVE41X09VVCwgMCwgUFRONV9JTiwKKwkJSFBENjAsIFBUTjRfT1VULCAwLCBQVE40X0lOLAorCQlIUEQ1OSwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCUhQRDU4LCBQVE4yX09VVCwgMCwgUFROMl9JTiwKKwkJSFBENTcsIFBUTjFfT1VULCAwLCBQVE4xX0lOLAorCQlIUEQ1NiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJT0YwX1NTMl9TSU1fUlNULCBQVFE2X09VVCwgMCwgMCwKKwkJU0lPRjBfU1MxX1RTX1NQU1lOQywgUFRRNV9PVVQsIFBUUTVfSU5fUEQsIFBUUTVfSU4sCisJCVNJT0YwX1NZTkNfVFNfU0RFTiwgUFRRNF9PVVQsIFBUUTRfSU5fUEQsIFBUUTRfSU4sCisJCVNJT0YwX1NDS19UU19TQ0ssIFBUUTNfT1VULCBQVFEzX0lOX1BELCBQVFEzX0lOLAorCQlQVFEyLCAwLCBQVFEyX0lOX1BELCBQVFEyX0lOLAorCQlQVFExLCBQVFExX09VVCwgMCwgMCwKKwkJUFRRMCwgUFRRMF9PVVQsIFBUUTBfSU5fUFUsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCUxDRFJELCBQVFI0X09VVCwgMCwgMCwKKwkJQ1M2Ql9DRTFCX0xDRENTMiwgUFRSM19PVVQsIDAsIDAsCisJCVdBSVQsIDAsIFBUUjJfSU5fUFUsIFBUUjJfSU4sCisJCUxDRERDS19MQ0RXUiwgUFRSMV9PVVQsIDAsIDAsCisJCUxDRFZFUFdDX0xDRFZFUFdDMiwgUFRSMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVNDSUYwX0NUU19TSVVBSVNQRCwgMCwgUFRTNF9JTl9QRCwgUFRTNF9JTiwKKwkJU0NJRjBfUlRTX1NJVUFPU1BELCBQVFMzX09VVCwgMCwgMCwKKwkJU0NJRjBfU0NLX1RQVVRPLCBQVFMyX09VVCwgUFRTMl9JTl9QRCwgUFRTMl9JTiwKKwkJU0NJRjBfUlhELCAwLCBQVFMxX0lOX1BELCBQVFMxX0lOLAorCQlTQ0lGMF9UWEQsIFBUUzBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBUQ1IiLCAweGE0MDUwMTQwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlGT0VfVklPX1ZEMiwgUFRUNF9PVVQsIFBUVDRfSU5fUEQsIFBUVDRfSU4sCisJCUZXRSwgUFRUM19PVVQsIFBUVDNfSU5fUEQsIFBUVDNfSU4sCisJCUZTQywgUFRUMl9PVVQsIFBUVDJfSU5fUEQsIFBUVDJfSU4sCisJCURSRVEwLCAwLCBQVFQxX0lOX1BELCBQVFQxX0lOLAorCQlGQ0RFLCBQVFQwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJTkFGMl9WSU9fRDEwLCBQVFU0X09VVCwgUFRVNF9JTl9QRCwgUFRVNF9JTiwKKwkJTkFGMV9WSU9fRDksIFBUVTNfT1VULCBQVFUzX0lOX1BELCBQVFUzX0lOLAorCQlOQUYwX1ZJT19EOCwgUFRVMl9PVVQsIFBUVTJfSU5fUEQsIFBUVTJfSU4sCisJCUZSQl9WSU9fQ0xLMiwgMCwgUFRVMV9JTl9QRCwgUFRVMV9JTiwKKwkJRkNFX1ZJT19IRDIsIFBUVTBfT1VULCBQVFUwX0lOX1BELCBQVFUwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBWQ1IiLCAweGE0MDUwMTQ0LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlOQUY3X1ZJT19EMTUsIFBUVjRfT1VULCBQVFY0X0lOX1BELCBQVFY0X0lOLAorCQlOQUY2X1ZJT19EMTQsIFBUVjNfT1VULCBQVFYzX0lOX1BELCBQVFYzX0lOLAorCQlOQUY1X1ZJT19EMTMsIFBUVjJfT1VULCBQVFYyX0lOX1BELCBQVFYyX0lOLAorCQlOQUY0X1ZJT19EMTIsIFBUVjFfT1VULCBQVFYxX0lOX1BELCBQVFYxX0lOLAorCQlOQUYzX1ZJT19EMTEsIFBUVjBfT1VULCBQVFYwX0lOX1BELCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlWSU9fRkxEX1NDSUYyX0NUUywgMCwgUFRXNl9JTl9QRCwgUFRXNl9JTiwKKwkJVklPX0NLT19TQ0lGMl9SVFMsIFBUVzVfT1VULCAwLCAwLAorCQlWSU9fU1RFWF9TQ0lGMl9TQ0ssIFBUVzRfT1VULCBQVFc0X0lOX1BELCBQVFc0X0lOLAorCQlWSU9fU1RFTV9TQ0lGMl9UWEQsIFBUVzNfT1VULCBQVFczX0lOX1BELCBQVFczX0lOLAorCQlWSU9fSERfU0NJRjJfUlhELCBQVFcyX09VVCwgUFRXMl9JTl9QRCwgUFRXMl9JTiwKKwkJVklPX1ZEX1NDSUYxX0NUUywgUFRXMV9PVVQsIFBUVzFfSU5fUEQsIFBUVzFfSU4sCisJCVZJT19DTEtfU0NJRjFfUlRTLCBQVFcwX09VVCwgUFRXMF9JTl9QRCwgUFRXMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWENSIiwgMHhhNDA1MDE0OCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJQ1M2QV9DRTJCLCBQVFg2X09VVCwgUFRYNl9JTl9QVSwgUFRYNl9JTiwKKwkJTENERDIzLCBQVFg1X09VVCwgUFRYNV9JTl9QRCwgUFRYNV9JTiwKKwkJTENERDIyLCBQVFg0X09VVCwgUFRYNF9JTl9QRCwgUFRYNF9JTiwKKwkJTENERDIxLCBQVFgzX09VVCwgUFRYM19JTl9QRCwgUFRYM19JTiwKKwkJTENERDIwLCBQVFgyX09VVCwgUFRYMl9JTl9QRCwgUFRYMl9JTiwKKwkJTENERDE5X0RWX0NMS0ksIFBUWDFfT1VULCBQVFgxX0lOX1BELCBQVFgxX0lOLAorCQlMQ0REMThfRFZfQ0xLLCBQVFgwX09VVCwgUFRYMF9JTl9QRCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJS0VZT1VUNV9JTjUsIFBUWTVfT1VULCBQVFk1X0lOX1BVLCBQVFk1X0lOLAorCQlLRVlPVVQ0X0lONiwgUFRZNF9PVVQsIFBUWTRfSU5fUFUsIFBUWTRfSU4sCisJCUtFWU9VVDMsIFBUWTNfT1VULCBQVFkzX0lOX1BVLCBQVFkzX0lOLAorCQlLRVlPVVQyLCBQVFkyX09VVCwgUFRZMl9JTl9QVSwgUFRZMl9JTiwKKwkJS0VZT1VUMSwgUFRZMV9PVVQsIDAsIDAsCisJCUtFWU9VVDAsIFBUWTBfT1VULCBQVFkwX0lOX1BVLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlLRVlJTjRfSVJRNywgMCwgUFRaNV9JTl9QVSwgUFRaNV9JTiwKKwkJS0VZSU4zLCAwLCBQVFo0X0lOX1BVLCBQVFo0X0lOLAorCQlLRVlJTjIsIDAsIFBUWjNfSU5fUFUsIFBUWjNfSU4sCisJCUtFWUlOMSwgMCwgUFRaMl9JTl9QVSwgUFRaMl9JTiwKKwkJS0VZSU4wX0lSUTYsIDAsIFBUWjFfSU5fUFUsIFBUWjFfSU4sCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMSkgeworCQlQU0ExNV9LRVlJTjAsIFBTQTE1X0lSUTYsCisJCVBTQTE0X0tFWUlONCwgUFNBMTRfSVJRNywKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNBOV9JUlE0LCBQU0E5X0JTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDEpIHsKKwkJUFNCMTVfU0lPVFhELCBQU0IxNV9TSVVCT1NMRCwKKwkJUFNCMTRfU0lPUlhELCBQU0IxNF9TSVVCSVNMRCwKKwkJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwKKwkJUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJCVBTQjExX1NJT1NUUkIxLCBQU0IxMV9TSVVCT0xSLAorCQlQU0IxMF9TSU9TQ0ssIFBTQjEwX1NJVUJPQlQsCisJCVBTQjlfU0lPTUNLLCBQU0I5X1NJVU1DS0IsCisJCVBTQjhfU0lPRjBfTUNLLCBQU0I4X0lSUTMsCisJCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULAorCQlQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCQlQU0I1X1NJT0YwX1NDSywgUFNCNV9UU19TQ0ssCisJCVBTQjRfU0lPRjBfU1lOQywgUFNCNF9UU19TREVOLAorCQlQU0IzX1NJT0YwX1NTMSwgUFNCM19UU19TUFNZTkMsCisJCVBTQjJfU0lPRjBfU1MyLCBQU0IyX1NJTV9SU1QsCisJCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssCisJCVBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhEIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxDIiwgMHhhNDA1MDE1MiwgMTYsIDEpIHsKKwkJUFNDMTVfU0lVQUlTTEQsIFBTQzE1X1NJT0YxX1JYRCwKKwkJUFNDMTRfU0lVQU9CVCwgUFNDMTRfU0lPRjFfU0NLLAorCQlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLAorCQlQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJCVBTQzExX1NJVUFJTFIsIFBTQzExX1NJT0YxX1NTMiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNDMF9OQUYsIFBTQzBfVklPIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxEIiwgMHhhNDA1MDE1NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwKKwkJUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwkJUFNEMTFfVklPLCBQU0QxMV9TQ0lGMSwKKwkJUFNEMTBfVklPX0QwLCBQU0QxMF9MQ0RMQ0xLLAorCQlQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0Q5X1NJVUZDS0IsCisJCVBTRDhfU0NJRjBfU0NLLCBQU0Q4X1RQVVRPLAorCQlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwKKwkJUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJCVBTRDVfQ1M2Ql9DRTFCLCBQU0Q1X0xDRENTMiwKKwkJMCwgMCwKKwkJUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywgUFNEM19MQ0RWRVBXQzJfTENEVkNQV0MyLAorCQlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLAorCQkwLCAwLAorCQlQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRSIsIDB4YTQwNTAxNTYsIDE2LCAxKSB7CisJCVBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0UxNV9TSU1fRCwKKwkJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCQlQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNFMTNfVFNfU0RBVCwKKwkJUFNFMTJfTENEVlNZTjIsIFBTRTEyX0RBQ0ssCisJCVBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBQU0UxMV9TSVVGQ0tBLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywKKwkJUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJCVBTRTFfTkFGMSwgUFNFMV9WSU9fRDksCisJCVBTRTBfTkFGMCwgUFNFMF9WSU9fRDggfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JBIiwgMHhhNDA1MDE1OCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJSElaQTE0X0tFWVNDLCBISVpBMTRfSElaLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCQlISVpBOV9WSU8sIEhJWkE5X0hJWiwKKwkJSElaQThfTENEQywgSElaQThfSElaLAorCQlISVpBN19MQ0RDLCBISVpBN19ISVosCisJCUhJWkE2X0xDREMsIEhJWkE2X0hJWiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJISVpDUkIiLCAweGE0MDUwMTVhLCAxNiwgMSkgeworCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKKwkJSElaQjBfVklPLCBISVpCMF9ISVogfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JDIiwgMHhhNDA1MDE1YywgMTYsIDEpIHsKKwkJSElaQzE1X0lSUTcsIEhJWkMxNV9ISVosCisJCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCQlISVpDMTNfSVJRNSwgSElaQzEzX0hJWiwKKwkJSElaQzEyX0lSUTQsIEhJWkMxMl9ISVosCisJCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCQlISVpDMTBfSVJRMiwgSElaQzEwX0hJWiwKKwkJSElaQzlfSVJRMSwgSElaQzlfSElaLAorCQlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTENSQiIsIDB4YTQwNTAxODIsIDE2LCAxKSB7CisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCU1TRUxCOV9WSU8sIE1TRUxCOV9WSU8yLAorCQlNU0VMQjhfUkdCLCBNU0VMQjhfU1lTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBBRFIiLCAweGE0MDUwMTIwLCA4KSB7CisJCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwkJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhhNDA1MDEyMiwgOCkgeworCQlQVEI3X0RBVEEsIFBUQjZfREFUQSwgUFRCNV9EQVRBLCBQVEI0X0RBVEEsCisJCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4YTQwNTAxMjQsIDgpIHsKKwkJUFRDN19EQVRBLCAwLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIDAsIFBUQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4YTQwNTAxMjYsIDgpIHsKKwkJUFREN19EQVRBLCBQVEQ2X0RBVEEsIFBURDVfREFUQSwgUFRENF9EQVRBLAorCQlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGE0MDUwMTI4LCA4KSB7CisJCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJMCwgMCwgUFRFMV9EQVRBLCBQVEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGE0MDUwMTJhLCA4KSB7CisJCTAsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJCVBURjNfREFUQSwgUFRGMl9EQVRBLCBQVEYxX0RBVEEsIFBURjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4YTQwNTAxMmMsIDgpIHsKKwkJMCwgMCwgMCwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCAwLAorCQkwLCAwLCBQVEoxX0RBVEEsIFBUSjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEtEUiIsIDB4YTQwNTAxMzIsIDgpIHsKKwkJMCwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwkJUFRLM19EQVRBLCBQVEsyX0RBVEEsIFBUSzFfREFUQSwgUFRLMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTERSIiwgMHhhNDA1MDEzNCwgOCkgeworCQlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE1EUiIsIDB4YTQwNTAxMzYsIDgpIHsKKwkJUFRNN19EQVRBLCBQVE02X0RBVEEsIFBUTTVfREFUQSwgUFRNNF9EQVRBLAorCQlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBORFIiLCAweGE0MDUwMTM4LCA4KSB7CisJCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwkJUFROM19EQVRBLCBQVE4yX0RBVEEsIFBUTjFfREFUQSwgUFROMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUURSIiwgMHhhNDA1MDEzYSwgOCkgeworCQkwLCBQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCQlQVFEzX0RBVEEsIFBUUTJfREFUQSwgUFRRMV9EQVRBLCBQVFEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBSRFIiLCAweGE0MDUwMTNjLCA4KSB7CisJCTAsIDAsIDAsIFBUUjRfREFUQSwKKwkJUFRSM19EQVRBLCBQVFIyX0RBVEEsIFBUUjFfREFUQSwgUFRSMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQU0RSIiwgMHhhNDA1MDEzZSwgOCkgeworCQkwLCAwLCAwLCBQVFM0X0RBVEEsCisJCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFREUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVTRfREFUQSwKKwkJUFRVM19EQVRBLCBQVFUyX0RBVEEsIFBUVTFfREFUQSwgUFRVMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVkRSIiwgMHhhNDA1MDE2NCwgOCkgeworCQkwLCAwLCAwLCBQVFY0X0RBVEEsCisJCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFdEUiIsIDB4YTQwNTAxNjYsIDgpIHsKKwkJMCwgUFRXNl9EQVRBLCBQVFc1X0RBVEEsIFBUVzRfREFUQSwKKwkJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWERSIiwgMHhhNDA1MDE2OCwgOCkgeworCQkwLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCTAsIFBUWTZfREFUQSwgUFRZNV9EQVRBLCBQVFk0X0RBVEEsCisJCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFpEUiIsIDB4YTQwNTAxNmMsIDgpIHsKKwkJMCwgMCwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyMl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjJfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wZCA9IHsgUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3MjJfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJmNWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMy5jCkBAIC0wLDAgKzEsMTkwOSBAQAorLyoKKyAqIFNINzcyMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwlQVEEzX0RBVEEsIFBUQTJfREFUQSwgUFRBMV9EQVRBLCBQVEEwX0RBVEEsCisJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSwKKwlQVEM3X0RBVEEsIFBUQzZfREFUQSwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsCisJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBLAorCVBURDdfREFUQSwgUFRENl9EQVRBLCBQVEQ1X0RBVEEsIFBURDRfREFUQSwKKwlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEsCisJUFRFNV9EQVRBLCBQVEU0X0RBVEEsIFBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSwKKwlQVEY3X0RBVEEsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzVfREFUQSwgUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjVfREFUQSwgUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzdfREFUQSwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwlQVEszX0RBVEEsIFBUSzJfREFUQSwgUFRLMV9EQVRBLCBQVEswX0RBVEEsCisJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwlQVE4zX0RBVEEsIFBUTjJfREFUQSwgUFROMV9EQVRBLCBQVE4wX0RBVEEsCisJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ1X0RBVEEsIFBUVDRfREFUQSwgUFRUM19EQVRBLCBQVFQyX0RBVEEsIFBUVDFfREFUQSwgUFRUMF9EQVRBLAorCVBUVTVfREFUQSwgUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWN19EQVRBLCBQVFY2X0RBVEEsIFBUVjVfREFUQSwgUFRWNF9EQVRBLAorCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBLAorCVBUWDdfREFUQSwgUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEsCisJUFRZN19EQVRBLCBQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzZfSU4sIFBUQzVfSU4sIFBUQzRfSU4sCisJUFRDM19JTiwgUFRDMl9JTiwgUFRDMV9JTiwgUFRDMF9JTiwKKwlQVEQ3X0lOLCBQVEQ2X0lOLCBQVEQ1X0lOLCBQVEQ0X0lOLAorCVBURDNfSU4sIFBURDJfSU4sIFBURDFfSU4sIFBURDBfSU4sCisJUFRFNV9JTiwgUFRFNF9JTiwgUFRFM19JTiwgUFRFMl9JTiwgUFRFMV9JTiwgUFRFMF9JTiwKKwlQVEY3X0lOLCBQVEY2X0lOLCBQVEY1X0lOLCBQVEY0X0lOLAorCVBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sIFBURjBfSU4sCisJUFRIN19JTiwgUFRINl9JTiwgUFRINV9JTiwgUFRINF9JTiwKKwlQVEgzX0lOLCBQVEgyX0lOLCBQVEgxX0lOLCBQVEgwX0lOLAorCVBUSjNfSU4sIFBUSjJfSU4sIFBUSjFfSU4sIFBUSjBfSU4sCisJUFRLN19JTiwgUFRLNl9JTiwgUFRLNV9JTiwgUFRLNF9JTiwKKwlQVEszX0lOLCBQVEsyX0lOLCBQVEsxX0lOLCBQVEswX0lOLAorCVBUTDdfSU4sIFBUTDZfSU4sIFBUTDVfSU4sIFBUTDRfSU4sCisJUFRMM19JTiwgUFRMMl9JTiwgUFRMMV9JTiwgUFRMMF9JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRON19JTiwgUFRONl9JTiwgUFRONV9JTiwgUFRONF9JTiwKKwlQVE4zX0lOLCBQVE4yX0lOLCBQVE4xX0lOLCBQVE4wX0lOLAorCVBUUTNfSU4sIFBUUTJfSU4sIFBUUTFfSU4sIFBUUTBfSU4sCisJUFRSN19JTiwgUFRSNl9JTiwgUFRSNV9JTiwgUFRSNF9JTiwKKwlQVFIzX0lOLCBQVFIyX0lOLCBQVFIxX0lOLCBQVFIwX0lOLAorCVBUUzdfSU4sIFBUUzZfSU4sIFBUUzVfSU4sIFBUUzRfSU4sCisJUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ1X0lOLCBQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTVfSU4sIFBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWN19JTiwgUFRWNl9JTiwgUFRWNV9JTiwgUFRWNF9JTiwKKwlQVFYzX0lOLCBQVFYyX0lOLCBQVFYxX0lOLCBQVFYwX0lOLAorCVBUVzdfSU4sIFBUVzZfSU4sIFBUVzVfSU4sIFBUVzRfSU4sCisJUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg3X0lOLCBQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLAorCVBUWDNfSU4sIFBUWDJfSU4sIFBUWDFfSU4sIFBUWDBfSU4sCisJUFRZN19JTiwgUFRZNl9JTiwgUFRZNV9JTiwgUFRZNF9JTiwKKwlQVFkzX0lOLCBQVFkyX0lOLCBQVFkxX0lOLCBQVFkwX0lOLAorCVBUWjdfSU4sIFBUWjZfSU4sIFBUWjVfSU4sIFBUWjRfSU4sCisJUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwgUFRaMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE0X0lOX1BVLCBQVEEzX0lOX1BVLCBQVEEyX0lOX1BVLCBQVEExX0lOX1BVLCBQVEEwX0lOX1BVLAorCVBUQjJfSU5fUFUsIFBUQjFfSU5fUFUsCisJUFRSMl9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNV9PVVQsIFBURTRfT1VULCBQVEUzX09VVCwgUFRFMl9PVVQsIFBURTFfT1VULCBQVEUwX09VVCwKKwlQVEY3X09VVCwgUFRGNl9PVVQsIFBURjVfT1VULCBQVEY0X09VVCwKKwlQVEYzX09VVCwgUFRGMl9PVVQsIFBURjFfT1VULCBQVEYwX09VVCwKKwlQVEc1X09VVCwgUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo1X09VVCwgUFRKM19PVVQsIFBUSjJfT1VULCBQVEoxX09VVCwgUFRKMF9PVVQsCisJUFRLN19PVVQsIFBUSzZfT1VULCBQVEs1X09VVCwgUFRLNF9PVVQsCisJUFRLM19PVVQsIFBUSzJfT1VULCBQVEsxX09VVCwgUFRLMF9PVVQsCisJUFRMN19PVVQsIFBUTDZfT1VULCBQVEw1X09VVCwgUFRMNF9PVVQsCisJUFRMM19PVVQsIFBUTDJfT1VULCBQVEwxX09VVCwgUFRMMF9PVVQsCisJUFRNN19PVVQsIFBUTTZfT1VULCBQVE01X09VVCwgUFRNNF9PVVQsCisJUFRNM19PVVQsIFBUTTJfT1VULCBQVE0xX09VVCwgUFRNMF9PVVQsCisJUFRON19PVVQsIFBUTjZfT1VULCBQVE41X09VVCwgUFRONF9PVVQsCisJUFROM19PVVQsIFBUTjJfT1VULCBQVE4xX09VVCwgUFROMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzdfT1VULCBQVFM2X09VVCwgUFRTNV9PVVQsIFBUUzRfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDVfT1VULCBQVFQ0X09VVCwgUFRUM19PVVQsIFBUVDJfT1VULCBQVFQxX09VVCwgUFRUMF9PVVQsCisJUFRVNV9PVVQsIFBUVTRfT1VULCBQVFUzX09VVCwgUFRVMl9PVVQsIFBUVTFfT1VULCBQVFUwX09VVCwKKwlQVFY3X09VVCwgUFRWNl9PVVQsIFBUVjVfT1VULCBQVFY0X09VVCwKKwlQVFYzX09VVCwgUFRWMl9PVVQsIFBUVjFfT1VULCBQVFYwX09VVCwKKwlQVFc3X09VVCwgUFRXNl9PVVQsIFBUVzVfT1VULCBQVFc0X09VVCwKKwlQVFczX09VVCwgUFRXMl9PVVQsIFBUVzFfT1VULCBQVFcwX09VVCwKKwlQVFg3X09VVCwgUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwKKwlQVFgzX09VVCwgUFRYMl9PVVQsIFBUWDFfT1VULCBQVFgwX09VVCwKKwlQVFk3X09VVCwgUFRZNl9PVVQsIFBUWTVfT1VULCBQVFk0X09VVCwKKwlQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQVFo3X09VVCwgUFRaNl9PVVQsIFBUWjVfT1VULCBQVFo0X09VVCwKKwlQVFozX09VVCwgUFRaMl9PVVQsIFBUWjFfT1VULCBQVFowX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQVEE3X0ZOLCBQVEE2X0ZOLCBQVEE1X0ZOLCBQVEE0X0ZOLAorCVBUQTNfRk4sIFBUQTJfRk4sIFBUQTFfRk4sIFBUQTBfRk4sCisJUFRCN19GTiwgUFRCNl9GTiwgUFRCNV9GTiwgUFRCNF9GTiwKKwlQVEIzX0ZOLCBQVEIyX0ZOLCBQVEIxX0ZOLCBQVEIwX0ZOLAorCVBUQzdfRk4sIFBUQzZfRk4sIFBUQzVfRk4sIFBUQzRfRk4sCisJUFRDM19GTiwgUFRDMl9GTiwgUFRDMV9GTiwgUFRDMF9GTiwKKwlQVEQ3X0ZOLCBQVEQ2X0ZOLCBQVEQ1X0ZOLCBQVEQ0X0ZOLAorCVBURDNfRk4sIFBURDJfRk4sIFBURDFfRk4sIFBURDBfRk4sCisJUFRFNV9GTiwgUFRFNF9GTiwgUFRFM19GTiwgUFRFMl9GTiwgUFRFMV9GTiwgUFRFMF9GTiwKKwlQVEY3X0ZOLCBQVEY2X0ZOLCBQVEY1X0ZOLCBQVEY0X0ZOLAorCVBURjNfRk4sIFBURjJfRk4sIFBURjFfRk4sIFBURjBfRk4sCisJUFRHNV9GTiwgUFRHNF9GTiwgUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg3X0ZOLCBQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKN19GTiwgUFRKNV9GTiwgUFRKM19GTiwgUFRKMl9GTiwgUFRKMV9GTiwgUFRKMF9GTiwKKwlQVEs3X0ZOLCBQVEs2X0ZOLCBQVEs1X0ZOLCBQVEs0X0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwKKwlQVEwzX0ZOLCBQVEwyX0ZOLCBQVEwxX0ZOLCBQVEwwX0ZOLAorCVBUTTdfRk4sIFBUTTZfRk4sIFBUTTVfRk4sIFBUTTRfRk4sCisJUFRNM19GTiwgUFRNMl9GTiwgUFRNMV9GTiwgUFRNMF9GTiwKKwlQVE43X0ZOLCBQVE42X0ZOLCBQVE41X0ZOLCBQVE40X0ZOLAorCVBUTjNfRk4sIFBUTjJfRk4sIFBUTjFfRk4sIFBUTjBfRk4sCisJUFRRM19GTiwgUFRRMl9GTiwgUFRRMV9GTiwgUFRRMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTN19GTiwgUFRTNl9GTiwgUFRTNV9GTiwgUFRTNF9GTiwKKwlQVFMzX0ZOLCBQVFMyX0ZOLCBQVFMxX0ZOLCBQVFMwX0ZOLAorCVBUVDVfRk4sIFBUVDRfRk4sIFBUVDNfRk4sIFBUVDJfRk4sIFBUVDFfRk4sIFBUVDBfRk4sCisJUFRVNV9GTiwgUFRVNF9GTiwgUFRVM19GTiwgUFRVMl9GTiwgUFRVMV9GTiwgUFRVMF9GTiwKKwlQVFY3X0ZOLCBQVFY2X0ZOLCBQVFY1X0ZOLCBQVFY0X0ZOLAorCVBUVjNfRk4sIFBUVjJfRk4sIFBUVjFfRk4sIFBUVjBfRk4sCisJUFRXN19GTiwgUFRXNl9GTiwgUFRXNV9GTiwgUFRXNF9GTiwKKwlQVFczX0ZOLCBQVFcyX0ZOLCBQVFcxX0ZOLCBQVFcwX0ZOLAorCVBUWDdfRk4sIFBUWDZfRk4sIFBUWDVfRk4sIFBUWDRfRk4sCisJUFRYM19GTiwgUFRYMl9GTiwgUFRYMV9GTiwgUFRYMF9GTiwKKwlQVFk3X0ZOLCBQVFk2X0ZOLCBQVFk1X0ZOLCBQVFk0X0ZOLAorCVBUWTNfRk4sIFBUWTJfRk4sIFBUWTFfRk4sIFBUWTBfRk4sCisJUFRaN19GTiwgUFRaNl9GTiwgUFRaNV9GTiwgUFRaNF9GTiwKKwlQVFozX0ZOLCBQVFoyX0ZOLCBQVFoxX0ZOLCBQVFowX0ZOLAorCisKKwlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwKKwlQU0ExM19QU0ExMl9GTjEsIFBTQTEzX1BTQTEyX0ZOMiwKKwlQU0ExMV9QU0ExMF9GTjEsIFBTQTExX1BTQTEwX0ZOMiwKKwlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLAorCVBTQTNfUFNBMl9GTjEsIFBTQTNfUFNBMl9GTjIsCisJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsCisJUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBTQjEzX1BTQjEyX0xDRENfU1lTLAorCVBTQjlfUFNCOF9GTjEsIFBTQjlfUFNCOF9GTjIsIFBTQjlfUFNCOF9GTjMsCisJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwKKwlQU0I1X1BTQjRfRk4xLCBQU0I1X1BTQjRfRk4yLAorCVBTQjNfUFNCMl9GTjEsIFBTQjNfUFNCMl9GTjIsCisJUFNDMTVfUFNDMTRfRk4xLCBQU0MxNV9QU0MxNF9GTjIsCisJUFNDMTNfUFNDMTJfRk4xLCBQU0MxM19QU0MxMl9GTjIsCisJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywKKwlQU0M5X1BTQzhfRk4xLCBQU0M5X1BTQzhfRk4yLAorCVBTQzdfUFNDNl9GTjEsIFBTQzdfUFNDNl9GTjIsIFBTQzdfUFNDNl9GTjMsCisJUFNEMTVfUFNEMTRfRk4xLCBQU0QxNV9QU0QxNF9GTjIsCisJUFNEMTNfUFNEMTJfRk4xLCBQU0QxM19QU0QxMl9GTjIsCisJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywKKwlQU0Q5X1BTRDhfRk4xLCBQU0Q5X1BTRDhfRk4yLAorCVBTRDdfUFNENl9GTjEsIFBTRDdfUFNENl9GTjIsCisJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwKKwlQU0QzX1BTRDJfRk4xLCBQU0QzX1BTRDJfRk4yLAorCVBTRDFfUFNEMF9GTjEsIFBTRDFfUFNEMF9GTjIsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1BUVF9UWERfTUFSSywgU0NJRjBfUFRUX1JYRF9NQVJLLAorCVNDSUYwX1BUVF9TQ0tfTUFSSywgU0NJRjBfUFRVX1RYRF9NQVJLLAorCVNDSUYwX1BUVV9SWERfTUFSSywgU0NJRjBfUFRVX1NDS19NQVJLLAorCisJU0NJRjFfUFRTX1RYRF9NQVJLLCBTQ0lGMV9QVFNfUlhEX01BUkssCisJU0NJRjFfUFRTX1NDS19NQVJLLCBTQ0lGMV9QVFZfVFhEX01BUkssCisJU0NJRjFfUFRWX1JYRF9NQVJLLCBTQ0lGMV9QVFZfU0NLX01BUkssCisKKwlTQ0lGMl9QVFRfVFhEX01BUkssIFNDSUYyX1BUVF9SWERfTUFSSywKKwlTQ0lGMl9QVFRfU0NLX01BUkssIFNDSUYyX1BUVV9UWERfTUFSSywKKwlTQ0lGMl9QVFVfUlhEX01BUkssIFNDSUYyX1BUVV9TQ0tfTUFSSywKKworCVNDSUYzX1BUU19UWERfTUFSSywgU0NJRjNfUFRTX1JYRF9NQVJLLAorCVNDSUYzX1BUU19TQ0tfTUFSSywgU0NJRjNfUFRTX1JUU19NQVJLLAorCVNDSUYzX1BUU19DVFNfTUFSSywgU0NJRjNfUFRWX1RYRF9NQVJLLAorCVNDSUYzX1BUVl9SWERfTUFSSywgU0NJRjNfUFRWX1NDS19NQVJLLAorCVNDSUYzX1BUVl9SVFNfTUFSSywgU0NJRjNfUFRWX0NUU19NQVJLLAorCisJU0NJRjRfUFRFX1RYRF9NQVJLLCBTQ0lGNF9QVEVfUlhEX01BUkssCisJU0NJRjRfUFRFX1NDS19NQVJLLCBTQ0lGNF9QVE5fVFhEX01BUkssCisJU0NJRjRfUFROX1JYRF9NQVJLLCBTQ0lGNF9QVE5fU0NLX01BUkssCisKKwlTQ0lGNV9QVEVfVFhEX01BUkssIFNDSUY1X1BURV9SWERfTUFSSywKKwlTQ0lGNV9QVEVfU0NLX01BUkssIFNDSUY1X1BUTl9UWERfTUFSSywKKwlTQ0lGNV9QVE5fUlhEX01BUkssIFNDSUY1X1BUTl9TQ0tfTUFSSywKKworCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19GTERfTUFSSywgVklPX0NLT19NQVJLLAorCVZJT19WRDFfTUFSSywgVklPX0hEMV9NQVJLLCBWSU9fQ0xLMV9NQVJLLAorCVZJT19IRDJfTUFSSywgVklPX1ZEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCisJTENERDIzX01BUkssIExDREQyMl9NQVJLLCBMQ0REMjFfTUFSSywgTENERDIwX01BUkssCisJTENERDE5X01BUkssIExDREQxOF9NQVJLLCBMQ0REMTdfTUFSSywgTENERDE2X01BUkssCisJTENERDE1X01BUkssIExDREQxNF9NQVJLLCBMQ0REMTNfTUFSSywgTENERDEyX01BUkssCisJTENERDExX01BUkssIExDREQxMF9NQVJLLCBMQ0REOV9NQVJLLCBMQ0REOF9NQVJLLAorCUxDREQ3X01BUkssIExDREQ2X01BUkssIExDREQ1X01BUkssIExDREQ0X01BUkssCisJTENERDNfTUFSSywgTENERDJfTUFSSywgTENERDFfTUFSSywgTENERDBfTUFSSywKKwlMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRExDTEtfUFRSX01BUkssIExDRExDTEtfUFRXX01BUkssCisKKwlJUlEwX01BUkssIElSUTFfTUFSSywgSVJRMl9NQVJLLCBJUlEzX01BUkssCisJSVJRNF9NQVJLLCBJUlE1X01BUkssIElSUTZfTUFSSywgSVJRN19NQVJLLAorCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywKKworCVNESEkwQ0RfUFREX01BUkssIFNESEkwV1BfUFREX01BUkssCisJU0RISTBEM19QVERfTUFSSywgU0RISTBEMl9QVERfTUFSSywKKwlTREhJMEQxX1BURF9NQVJLLCBTREhJMEQwX1BURF9NQVJLLAorCVNESEkwQ01EX1BURF9NQVJLLCBTREhJMENMS19QVERfTUFSSywKKworCVNESEkwQ0RfUFRTX01BUkssIFNESEkwV1BfUFRTX01BUkssCisJU0RISTBEM19QVFNfTUFSSywgU0RISTBEMl9QVFNfTUFSSywKKwlTREhJMEQxX1BUU19NQVJLLCBTREhJMEQwX1BUU19NQVJLLAorCVNESEkwQ01EX1BUU19NQVJLLCBTREhJMENMS19QVFNfTUFSSywKKworCVNESEkxQ0RfTUFSSywgU0RISTFXUF9NQVJLLCBTREhJMUQzX01BUkssIFNESEkxRDJfTUFSSywKKwlTREhJMUQxX01BUkssIFNESEkxRDBfTUFSSywgU0RISTFDTURfTUFSSywgU0RISTFDTEtfTUFSSywKKworCVNJVUFGQ0tfTUFSSywgU0lVQUlMUl9NQVJLLCBTSVVBSUJUX01BUkssIFNJVUFJU0xEX01BUkssCisJU0lVQU9MUl9NQVJLLCBTSVVBT0JUX01BUkssIFNJVUFPU0xEX01BUkssIFNJVUFNQ0tfTUFSSywKKwlTSVVBSVNQRF9NQVJLLCBTSVVBT1NQRF9NQVJLLAorCisJU0lVQkZDS19NQVJLLCBTSVVCSUxSX01BUkssIFNJVUJJQlRfTUFSSywgU0lVQklTTERfTUFSSywKKwlTSVVCT0xSX01BUkssIFNJVUJPQlRfTUFSSywgU0lVQk9TTERfTUFSSywgU0lVQk1DS19NQVJLLAorCisJSVJEQV9JTl9NQVJLLCBJUkRBX09VVF9NQVJLLAorCisJRFZfQ0xLSV9NQVJLLCBEVl9DTEtfTUFSSywgRFZfSFNZTkNfTUFSSywgRFZfVlNZTkNfTUFSSywKKwlEVl9EMTVfTUFSSywgRFZfRDE0X01BUkssIERWX0QxM19NQVJLLCBEVl9EMTJfTUFSSywKKwlEVl9EMTFfTUFSSywgRFZfRDEwX01BUkssIERWX0Q5X01BUkssIERWX0Q4X01BUkssCisJRFZfRDdfTUFSSywgRFZfRDZfTUFSSywgRFZfRDVfTUFSSywgRFZfRDRfTUFSSywKKwlEVl9EM19NQVJLLCBEVl9EMl9NQVJLLCBEVl9EMV9NQVJLLCBEVl9EMF9NQVJLLAorCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCisJTVNJT0YwX1BURl9UWERfTUFSSywgTVNJT0YwX1BURl9SWERfTUFSSywgTVNJT0YwX1BURl9NQ0tfTUFSSywKKwlNU0lPRjBfUFRGX1RTWU5DX01BUkssIE1TSU9GMF9QVEZfVFNDS19NQVJLLCBNU0lPRjBfUFRGX1JTWU5DX01BUkssCisJTVNJT0YwX1BURl9SU0NLX01BUkssIE1TSU9GMF9QVEZfU1MxX01BUkssIE1TSU9GMF9QVEZfU1MyX01BUkssCisKKwlNU0lPRjBfUFRUX1RYRF9NQVJLLCBNU0lPRjBfUFRUX1JYRF9NQVJLLCBNU0lPRjBfUFRYX01DS19NQVJLLAorCU1TSU9GMF9QVFRfVFNZTkNfTUFSSywgTVNJT0YwX1BUVF9UU0NLX01BUkssIE1TSU9GMF9QVFRfUlNZTkNfTUFSSywKKwlNU0lPRjBfUFRUX1JTQ0tfTUFSSywgTVNJT0YwX1BUVF9TUzFfTUFSSywgTVNJT0YwX1BUVF9TUzJfTUFSSywKKworCU1TSU9GMV9UWERfTUFSSywgTVNJT0YxX1JYRF9NQVJLLCBNU0lPRjFfTUNLX01BUkssCisJTVNJT0YxX1RTWU5DX01BUkssIE1TSU9GMV9UU0NLX01BUkssIE1TSU9GMV9SU1lOQ19NQVJLLAorCU1TSU9GMV9SU0NLX01BUkssIE1TSU9GMV9TUzFfTUFSSywgTVNJT0YxX1NTMl9NQVJLLAorCisJVFMwX1NEQVRfTUFSSywgVFMwX1NDS19NQVJLLCBUUzBfU0RFTl9NQVJLLCBUUzBfU1BTWU5DX01BUkssCisKKwlGQ0VfTUFSSywgTkFGN19NQVJLLCBOQUY2X01BUkssIE5BRjVfTUFSSywgTkFGNF9NQVJLLAorCU5BRjNfTUFSSywgTkFGMl9NQVJLLCBOQUYxX01BUkssIE5BRjBfTUFSSywgRkNERV9NQVJLLAorCUZPRV9NQVJLLCBGU0NfTUFSSywgRldFX01BUkssIEZSQl9NQVJLLAorCisJREFDSzFfTUFSSywgRFJFUTFfTUFSSywgREFDSzBfTUFSSywgRFJFUTBfTUFSSywKKworCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCisJVFBVVE8zX01BUkssIFRQVVRPMl9NQVJLLCBUUFVUTzFfTUFSSywgVFBVVE8wX01BUkssCisKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgV0FJVF9NQVJLLCBCU19NQVJLLAorCUEyNV9NQVJLLCBBMjRfTUFSSywgQTIzX01BUkssIEEyMl9NQVJLLAorCUNTNkJfQ0UxQl9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M1QV9DRTJBX01BUkssCisJV0UzX0lDSU9XUl9NQVJLLCBXRTJfSUNJT1JEX01BUkssCisKKwlJREVEMTVfTUFSSywgSURFRDE0X01BUkssIElERUQxM19NQVJLLCBJREVEMTJfTUFSSywKKwlJREVEMTFfTUFSSywgSURFRDEwX01BUkssIElERUQ5X01BUkssIElERUQ4X01BUkssCisJSURFRDdfTUFSSywgSURFRDZfTUFSSywgSURFRDVfTUFSSywgSURFRDRfTUFSSywKKwlJREVEM19NQVJLLCBJREVEMl9NQVJLLCBJREVEMV9NQVJLLCBJREVEMF9NQVJLLAorCURJUkVDVElPTl9NQVJLLCBFWEJVRl9FTkJfTUFSSywgSURFUlNUX01BUkssIElPREFDS19NQVJLLAorCUlPRFJFUV9NQVJLLCBJREVJT1JEWV9NQVJLLCBJREVJTlRfTUFSSywgSURFSU9XUl9NQVJLLAorCUlERUlPUkRfTUFSSywgSURFQ1MxX01BUkssIElERUNTMF9NQVJLLCBJREVBMl9NQVJLLAorCUlERUExX01BUkssIElERUEwX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQTdfREFUQSwgUFRBN19JTiwgUFRBN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTZfREFUQSwgUFRBNl9JTiwgUFRBNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTNfREFUQSwgUFRBM19JTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTJfREFUQSwgUFRBMl9JTiwgUFRBMl9PVVQsIFBUQTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTBfREFUQSwgUFRBMF9JTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUpLAorCisJLyogUFRCIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEI3X0RBVEEsIFBUQjdfSU4sIFBUQjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI2X0RBVEEsIFBUQjZfSU4sIFBUQjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI1X0RBVEEsIFBUQjVfSU4sIFBUQjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI0X0RBVEEsIFBUQjRfSU4sIFBUQjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIzX0RBVEEsIFBUQjNfSU4sIFBUQjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIyX0RBVEEsIFBUQjJfSU4sIFBUQjJfT1VULCBQVEIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIxX0RBVEEsIFBUQjFfSU4sIFBUQjFfT1VULCBQVEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIwX0RBVEEsIFBUQjBfSU4sIFBUQjBfT1VUKSwKKworCS8qIFBUQyBHUElPICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X09VVCksCisJUElOTVVYX0RBVEEoUFRDNl9EQVRBLCBQVEM2X0lOLCBQVEM2X09VVCksCisJUElOTVVYX0RBVEEoUFRDNV9EQVRBLCBQVEM1X0lOLCBQVEM1X09VVCksCisJUElOTVVYX0RBVEEoUFRDNF9EQVRBLCBQVEM0X0lOLCBQVEM0X09VVCksCisJUElOTVVYX0RBVEEoUFRDM19EQVRBLCBQVEMzX0lOLCBQVEMzX09VVCksCisJUElOTVVYX0RBVEEoUFRDMl9EQVRBLCBQVEMyX0lOLCBQVEMyX09VVCksCisJUElOTVVYX0RBVEEoUFRDMV9EQVRBLCBQVEMxX0lOLCBQVEMxX09VVCksCisJUElOTVVYX0RBVEEoUFRDMF9EQVRBLCBQVEMwX0lOLCBQVEMwX09VVCksCisKKwkvKiBQVEQgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURDdfREFUQSwgUFREN19JTiwgUFREN19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDZfREFUQSwgUFRENl9JTiwgUFRENl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDVfREFUQSwgUFRENV9JTiwgUFRENV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDRfREFUQSwgUFRENF9JTiwgUFRENF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDNfREFUQSwgUFREM19JTiwgUFREM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDJfREFUQSwgUFREMl9JTiwgUFREMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDFfREFUQSwgUFREMV9JTiwgUFREMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDBfREFUQSwgUFREMF9JTiwgUFREMF9PVVQpLAorCisJLyogUFRFIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4sIFBURTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEU0X0RBVEEsIFBURTRfSU4sIFBURTRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUzX0RBVEEsIFBURTNfSU4sIFBURTNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUyX0RBVEEsIFBURTJfSU4sIFBURTJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUxX0RBVEEsIFBURTFfSU4sIFBURTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUwX0RBVEEsIFBURTBfSU4sIFBURTBfT1VUKSwKKworCS8qIFBURiBHUElPICovCisJUElOTVVYX0RBVEEoUFRGN19EQVRBLCBQVEY3X0lOLCBQVEY3X09VVCksCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X0lOLCBQVEY2X09VVCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X0lOLCBQVEY1X09VVCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOLCBQVEY0X09VVCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX0lOLCBQVEYzX09VVCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX0lOLCBQVEYyX09VVCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX09VVCksCisJUElOTVVYX0RBVEEoUFRGMF9EQVRBLCBQVEYwX0lOLCBQVEYwX09VVCksCisKKwkvKiBQVEcgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURzVfREFUQSwgUFRHNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEg3X0RBVEEsIFBUSDdfSU4sIFBUSDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg2X0RBVEEsIFBUSDZfSU4sIFBUSDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg1X0RBVEEsIFBUSDVfSU4sIFBUSDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg0X0RBVEEsIFBUSDRfSU4sIFBUSDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgzX0RBVEEsIFBUSDNfSU4sIFBUSDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgyX0RBVEEsIFBUSDJfSU4sIFBUSDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgxX0RBVEEsIFBUSDFfSU4sIFBUSDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgwX0RBVEEsIFBUSDBfSU4sIFBUSDBfT1VUKSwKKworCS8qIFBUSiBHUElPICovCisJUElOTVVYX0RBVEEoUFRKN19EQVRBLCBQVEo3X09VVCksCisJUElOTVVYX0RBVEEoUFRKNV9EQVRBLCBQVEo1X09VVCksCisJUElOTVVYX0RBVEEoUFRKM19EQVRBLCBQVEozX0lOLCBQVEozX09VVCksCisJUElOTVVYX0RBVEEoUFRKMl9EQVRBLCBQVEoyX0lOLCBQVEoyX09VVCksCisJUElOTVVYX0RBVEEoUFRKMV9EQVRBLCBQVEoxX0lOLCBQVEoxX09VVCksCisJUElOTVVYX0RBVEEoUFRKMF9EQVRBLCBQVEowX0lOLCBQVEowX09VVCksCisKKwkvKiBQVEsgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSzdfREFUQSwgUFRLN19JTiwgUFRLN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9JTiwgUFRLNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9JTiwgUFRLNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9JTiwgUFRLNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19JTiwgUFRLM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzFfREFUQSwgUFRLMV9JTiwgUFRLMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzBfREFUQSwgUFRLMF9JTiwgUFRLMF9PVVQpLAorCisJLyogUFRMIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfSU4sIFBUTDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfSU4sIFBUTDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfSU4sIFBUTDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfSU4sIFBUTDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfSU4sIFBUTDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfSU4sIFBUTDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfSU4sIFBUTDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfSU4sIFBUTDBfT1VUKSwKKworCS8qIFBUTSBHUElPICovCisJUElOTVVYX0RBVEEoUFRNN19EQVRBLCBQVE03X0lOLCBQVE03X09VVCksCisJUElOTVVYX0RBVEEoUFRNNl9EQVRBLCBQVE02X0lOLCBQVE02X09VVCksCisJUElOTVVYX0RBVEEoUFRNNV9EQVRBLCBQVE01X0lOLCBQVE01X09VVCksCisJUElOTVVYX0RBVEEoUFRNNF9EQVRBLCBQVE00X0lOLCBQVE00X09VVCksCisJUElOTVVYX0RBVEEoUFRNM19EQVRBLCBQVE0zX0lOLCBQVE0zX09VVCksCisJUElOTVVYX0RBVEEoUFRNMl9EQVRBLCBQVE0yX0lOLCBQVE0yX09VVCksCisJUElOTVVYX0RBVEEoUFRNMV9EQVRBLCBQVE0xX0lOLCBQVE0xX09VVCksCisJUElOTVVYX0RBVEEoUFRNMF9EQVRBLCBQVE0wX0lOLCBQVE0wX09VVCksCisKKwkvKiBQVE4gR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTjdfREFUQSwgUFRON19JTiwgUFRON19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjZfREFUQSwgUFRONl9JTiwgUFRONl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjVfREFUQSwgUFRONV9JTiwgUFRONV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjRfREFUQSwgUFRONF9JTiwgUFRONF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjNfREFUQSwgUFROM19JTiwgUFROM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjJfREFUQSwgUFROMl9JTiwgUFROMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjFfREFUQSwgUFROMV9JTiwgUFROMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjBfREFUQSwgUFROMF9JTiwgUFROMF9PVVQpLAorCisJLyogUFRRIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUTJfREFUQSwgUFRRMl9JTiksCisJUElOTVVYX0RBVEEoUFRRMV9EQVRBLCBQVFExX0lOKSwKKwlQSU5NVVhfREFUQShQVFEwX0RBVEEsIFBUUTBfSU4pLAorCisJLyogUFRSIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFI3X0RBVEEsIFBUUjdfSU4sIFBUUjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI2X0RBVEEsIFBUUjZfSU4sIFBUUjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI1X0RBVEEsIFBUUjVfSU4sIFBUUjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI0X0RBVEEsIFBUUjRfSU4sIFBUUjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIzX0RBVEEsIFBUUjNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRSMV9EQVRBLCBQVFIxX0lOLCBQVFIxX09VVCksCisJUElOTVVYX0RBVEEoUFRSMF9EQVRBLCBQVFIwX0lOLCBQVFIwX09VVCksCisKKwkvKiBQVFMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUzdfREFUQSwgUFRTN19JTiwgUFRTN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzZfREFUQSwgUFRTNl9JTiwgUFRTNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzVfREFUQSwgUFRTNV9JTiwgUFRTNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzNfREFUQSwgUFRTM19JTiwgUFRTM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzJfREFUQSwgUFRTMl9JTiwgUFRTMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzFfREFUQSwgUFRTMV9JTiwgUFRTMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzBfREFUQSwgUFRTMF9JTiwgUFRTMF9PVVQpLAorCisJLyogUFRUIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFQ1X0RBVEEsIFBUVDVfSU4sIFBUVDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQ0X0RBVEEsIFBUVDRfSU4sIFBUVDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQzX0RBVEEsIFBUVDNfSU4sIFBUVDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQyX0RBVEEsIFBUVDJfSU4sIFBUVDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQxX0RBVEEsIFBUVDFfSU4sIFBUVDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQwX0RBVEEsIFBUVDBfSU4sIFBUVDBfT1VUKSwKKworCS8qIFBUVSBHUElPICovCisJUElOTVVYX0RBVEEoUFRVNV9EQVRBLCBQVFU1X0lOLCBQVFU1X09VVCksCisJUElOTVVYX0RBVEEoUFRVNF9EQVRBLCBQVFU0X0lOLCBQVFU0X09VVCksCisJUElOTVVYX0RBVEEoUFRVM19EQVRBLCBQVFUzX0lOLCBQVFUzX09VVCksCisJUElOTVVYX0RBVEEoUFRVMl9EQVRBLCBQVFUyX0lOLCBQVFUyX09VVCksCisJUElOTVVYX0RBVEEoUFRVMV9EQVRBLCBQVFUxX0lOLCBQVFUxX09VVCksCisJUElOTVVYX0RBVEEoUFRVMF9EQVRBLCBQVFUwX0lOLCBQVFUwX09VVCksCisKKwkvKiBQVFYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVjdfREFUQSwgUFRWN19JTiwgUFRWN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjZfREFUQSwgUFRWNl9JTiwgUFRWNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjVfREFUQSwgUFRWNV9JTiwgUFRWNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjRfREFUQSwgUFRWNF9JTiwgUFRWNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjNfREFUQSwgUFRWM19JTiwgUFRWM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjJfREFUQSwgUFRWMl9JTiwgUFRWMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjFfREFUQSwgUFRWMV9JTiwgUFRWMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjBfREFUQSwgUFRWMF9JTiwgUFRWMF9PVVQpLAorCisJLyogUFRXIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFc3X0RBVEEsIFBUVzdfSU4sIFBUVzdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc1X0RBVEEsIFBUVzVfSU4sIFBUVzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc0X0RBVEEsIFBUVzRfSU4sIFBUVzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFczX0RBVEEsIFBUVzNfSU4sIFBUVzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcyX0RBVEEsIFBUVzJfSU4sIFBUVzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcxX0RBVEEsIFBUVzFfSU4sIFBUVzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcwX0RBVEEsIFBUVzBfSU4sIFBUVzBfT1VUKSwKKworCS8qIFBUWCBHUElPICovCisJUElOTVVYX0RBVEEoUFRYN19EQVRBLCBQVFg3X0lOLCBQVFg3X09VVCksCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X0lOLCBQVFg2X09VVCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X0lOLCBQVFg1X09VVCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X0lOLCBQVFg0X09VVCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX0lOLCBQVFgzX09VVCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX0lOLCBQVFgyX09VVCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX0lOLCBQVFgxX09VVCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX0lOLCBQVFgwX09VVCksCisKKwkvKiBQVFkgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUWTdfREFUQSwgUFRZN19JTiwgUFRZN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTZfREFUQSwgUFRZNl9JTiwgUFRZNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTVfREFUQSwgUFRZNV9JTiwgUFRZNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTRfREFUQSwgUFRZNF9JTiwgUFRZNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTNfREFUQSwgUFRZM19JTiwgUFRZM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTJfREFUQSwgUFRZMl9JTiwgUFRZMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTFfREFUQSwgUFRZMV9JTiwgUFRZMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTBfREFUQSwgUFRZMF9JTiwgUFRZMF9PVVQpLAorCisJLyogUFRaIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFo3X0RBVEEsIFBUWjdfSU4sIFBUWjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo2X0RBVEEsIFBUWjZfSU4sIFBUWjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo1X0RBVEEsIFBUWjVfSU4sIFBUWjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo0X0RBVEEsIFBUWjRfSU4sIFBUWjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoyX0RBVEEsIFBUWjJfSU4sIFBUWjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoxX0RBVEEsIFBUWjFfSU4sIFBUWjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFowX0RBVEEsIFBUWjBfSU4sIFBUWjBfT1VUKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTdfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDJfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEE2X0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRBNV9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlONF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEQxNl9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTBfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTBfRk4pLAorCisJLyogUFRCIEZOICovCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBUQjdfRk4pLAorCVBJTk1VWF9EQVRBKEQzMF9NQVJLLCBQVEI2X0ZOKSwKKwlQSU5NVVhfREFUQShEMjlfTUFSSywgUFRCNV9GTiksCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBUQjRfRk4pLAorCVBJTk1VWF9EQVRBKEQyN19NQVJLLCBQVEIzX0ZOKSwKKwlQSU5NVVhfREFUQShEMjZfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjJfRk4pLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQjFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDRfSU42X01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRCMF9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoSURFRDE1X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDN19GTiksCisJUElOTVVYX0RBVEEoU0RISTFDRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxNF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxV1BfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTNfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQzX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoSURFRDEyX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDNF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFEMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxRDFfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQwX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoSURFRDlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUNNRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ4X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFDTEtfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKElERUQ3X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREN19GTiksCisJUElOTVVYX0RBVEEoU0RISTBDRF9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShJREVENl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwV1BfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRENl9GTiksCisJUElOTVVYX0RBVEEoSURFRDVfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ0X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRENF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMl9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEM19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwRDFfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREM19GTiksCisJUElOTVVYX0RBVEEoSURFRDJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTURfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoSURFRDBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQwX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENMS19QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQwX0ZOKSwKKworCS8qIFBURSBGTiAqLworCVBJTk1VWF9EQVRBKERJUkVDVElPTl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShFWEJVRl9FTkJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEU0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFNF9GTiksCisJUElOTVVYX0RBVEEoSURFUlNUX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFRFX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTNfRk4pLAorCVBJTk1VWF9EQVRBKElPREFDS19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShJT0RSRVFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMV9GTiksCisJUElOTVVYX0RBVEEoSURFSU9SRFlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfVFhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShJREVJTlRfTUFSSywgUFRGN19GTiksCisJUElOTVVYX0RBVEEoSURFSU9XUl9NQVJLLCBQU0E1X1BTQTRfRk4xLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1NTMl9NQVJLLCBQU0E1X1BTQTRfRk4yLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1JTWU5DX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjZfRk4pLAorCVBJTk1VWF9EQVRBKElERUlPUkRfTUFSSywgUFNBNV9QU0E0X0ZOMSwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9TUzFfTUFSSywgUFNBNV9QU0E0X0ZOMiwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9SU0NLX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKElERUNTMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfVFNZTkNfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVDUzBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RTQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVBMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGMl9GTiksCisJUElOTVVYX0RBVEEoSURFQTFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURjFfRk4pLAorCVBJTk1VWF9EQVRBKElERUEwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRGMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9NQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKEFVRENLX01BUkssIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzNfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMl9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzJfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMl9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzFfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzBfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMF9GTiksCisKKwkvKiBQVEcgRk4gKi8KKwlQSU5NVVhfREFUQShMQ0RWQ1BXQ19NQVJLLCBQVEg3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLCBQU0IxNV9QU0IxNF9GTjEsIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNCMTVfUFNCMTRfRk4yLCBQVEg2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RWU1lOX01BUkssIFBTQjE1X1BTQjE0X0ZOMSwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoRFZfQ0xLX01BUkssIFBTQjE1X1BTQjE0X0ZOMiwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoTENERElTUF9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1JHQiwgUFRINF9GTiksCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgUFNCMTNfUFNCMTJfTENEQ19TWVMsIFBUSDRfRk4pLAorCVBJTk1VWF9EQVRBKExDREhTWU5fTUFSSywgUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBUSDNfRk4pLAorCVBJTk1VWF9EQVRBKExDRENTX01BUkssIFBTQjEzX1BTQjEyX0xDRENfU1lTLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RET05fTUFSSywgUFRIMl9GTiksCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIFBTQjEzX1BTQjEyX0xDRENfUkdCLCBQVEgxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgUFRIMV9GTiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSjdfRk4pLAorCVBJTk1VWF9EQVRBKFBEU1RBVFVTX01BUkssIFBUSjVfRk4pLAorCVBJTk1VWF9EQVRBKEEyNV9NQVJLLCBQVEozX0ZOKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUFRKMl9GTiksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBQVEowX0ZOKSwKKworCS8qIFBUSyBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUFGQ0tfTUFSSywgUFRLN19GTiksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0I5X1BTQjhfRk4xLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MyX01BUkssIFBTQjlfUFNCOF9GTjIsIFBUSzZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU1lOQ19NQVJLLCBQU0I5X1BTQjhfRk4zLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQjlfUFNCOF9GTjEsIFBUSzVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzFfTUFSSywgUFNCOV9QU0I4X0ZOMiwgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTQ0tfTUFSSywgUFNCOV9QU0I4X0ZOMywgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNCN19QU0I2X0ZOMSwgUFRLNF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JYRF9NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEs0X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU1lOQ19NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEszX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU0NLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfTUFSSywgUFNCN19QU0I2X0ZOMiwgUFRLMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQU1DS19NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEswX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfTUNLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzBfRk4pLAorCisJLyogUFRMIEZOICovCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxNV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMNl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDE0X01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEw1X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw0X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMM19GTiksCisJUElOTVVYX0RBVEEoRFZfRDExX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEwyX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMl9GTiksCisJUElOTVVYX0RBVEEoTENERDlfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoTENERDhfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMF9GTiksCisJUElOTVVYX0RBVEEoRFZfRDhfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMF9GTiksCisKKwkvKiBQVE0gRk4gKi8KKwlQSU5NVVhfREFUQShMQ0REN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EM19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0wX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0wX0ZOKSwKKworCS8qIFBUTiBGTiAqLworCVBJTk1VWF9EQVRBKExDREQyM19NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE43X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjdfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMl9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE42X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE41X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjVfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE40X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjRfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4zX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4yX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjJfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9WU1lOQ19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFROMF9GTiksCisJUElOTVVYX0RBVEEoRFZfSFNZTkNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFROMF9GTiksCisKKwkvKiBQVFEgRk4gKi8KKwlQSU5NVVhfREFUQShBTjNfTUFSSywgUFRRM19GTiksCisJUElOTVVYX0RBVEEoQU4yX01BUkssIFBUUTJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMV9NQVJLLCBQVFExX0ZOKSwKKwlQSU5NVVhfREFUQShBTjBfTUFSSywgUFRRMF9GTiksCisKKwkvKiBQVFIgRk4gKi8KKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRSN19GTiksCisJUElOTVVYX0RBVEEoQ1M2QV9DRTJCX01BUkssIFBUUjZfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVFI1X0ZOKSwKKwlQSU5NVVhfREFUQShDUzVBX0NFMkFfTUFSSywgUFRSNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTQTEzX1BTQTEyX0ZOMSwgUFRSM19GTiksCisJUElOTVVYX0RBVEEoTENETENMS19QVFJfTUFSSywgUFNBMTNfUFNBMTJfRk4yLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFBUUjJfRk4pLAorCVBJTk1VWF9EQVRBKFdFM19JQ0lPV1JfTUFSSywgUFRSMV9GTiksCisJUElOTVVYX0RBVEEoV0UyX0lDSU9SRF9NQVJLLCBQVFIwX0ZOKSwKKworCS8qIFBUUyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM3X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENEX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM2X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMFdQX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19UWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19DVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQyX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMzX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQxX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENNRF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfVFhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTEtfUFRTX01BUkssIFBTQzE1X1BTQzE0X0ZOMiwgUFRTMF9GTiksCisKKwkvKiBQVFQgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMF9QVFRfU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMSwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9UU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1JYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfUlhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1RYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRUX1NDS19NQVJLLCBQU0MxMV9QU0MxMF9GTjEsIFBUVDJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFNZTkNfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfUlhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzFfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTQ0tfTUFSSywgUFNDMTFfUFNDMTBfRk4zLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfVFhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzJfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQwX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTWU5DX01BUkssIFBTQzExX1BTQzEwX0ZOMywgUFRUMF9GTiksCisKKwkvKiBQVFUgRk4gKi8KKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9TQ0tfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNV9GTiksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9SWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNF9GTiksCisJUElOTVVYX0RBVEEoRldFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9UWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoRk9FX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVV9TQ0tfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1JYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1RYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVTBfRk4pLAorCisJLyogUFRWIEZOICovCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWN19GTiksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjZfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNl9GTiksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfVFhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjVfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTNfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNV9GTiksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfQ1RTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlRTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTFfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTBfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWMl9GTiksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShOQUYwX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVjBfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUVl9UWERfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjBfRk4pLAorCisJLyogUFRXIEZOICovCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQVFc3X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBUVzZfRk4pLAorCVBJTk1VWF9EQVRBKElSUTVfTUFSSywgUFRXNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0QxNV9QU0QxNF9GTjEsIFBUVzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRExDTEtfUFRXX01BUkssIFBTRDE1X1BTRDE0X0ZOMiwgUFRXNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19NQVJLLCBQU0QxM19QU0QxMl9GTjEsIFBUVzNfRk4pLAorCVBJTk1VWF9EQVRBKEFEVFJHX01BUkssIFBTRDEzX1BTRDEyX0ZOMiwgUFRXM19GTiksCisJUElOTVVYX0RBVEEoSVJRMl9NQVJLLCBQU0QxMV9QU0QxMF9GTjEsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKEJTX01BUkssIFBTRDExX1BTRDEwX0ZOMiwgUFRXMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxMV9QU0QxMF9GTjMsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKElSUTFfTUFSSywgUFNEOV9QU0Q4X0ZOMSwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTUERfTUFSSywgUFNEOV9QU0Q4X0ZOMiwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9NQVJLLCBQU0Q3X1BTRDZfRk4xLCBQVFcwX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT1NQRF9NQVJLLCBQU0Q3X1BTRDZfRk4yLCBQVFcwX0ZOKSwKKworCS8qIFBUWCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBTRDNfUFNEMl9GTjEsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFhfTUNLX01BUkssIFBTRDNfUFNEMl9GTjIsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfT1VUX01BUkssIFBTRDVfUFNENF9GTjIsIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUWDRfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywgUFNENV9QU0Q0X0ZOMiwgUFRYNF9GTiksCisJUElOTVVYX0RBVEEoVFMwX1NEQVRfTUFSSywgUFRYM19GTiksCisJUElOTVVYX0RBVEEoVFMwX1NDS19NQVJLLCBQVFgyX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU0RFTl9NQVJLLCBQVFgxX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU1BTWU5DX01BUkssIFBUWDBfRk4pLAorCisJLyogUFRZIEZOICovCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBUWTdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19ENl9NQVJLLCBQVFk2X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFRZNV9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q0X01BUkssIFBUWTRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EM19NQVJLLCBQVFkzX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgUFRZMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0QxX01BUkssIFBUWTFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMF9NQVJLLCBQVFkwX0ZOKSwKKworCS8qIFBUWiBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUJPQlRfTUFSSywgUFRaN19GTiksCisJUElOTVVYX0RBVEEoU0lVQk9MUl9NQVJLLCBQVFo2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCT1NMRF9NQVJLLCBQVFo1X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCTUNLX01BUkssIFBUWjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19GTERfTUFSSywgUFNEMV9QU0QwX0ZOMSwgUFRaM19GTiksCisJUElOTVVYX0RBVEEoU0lVQkZDS19NQVJLLCBQU0QxX1BTRDBfRk4yLCBQVFozX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJTFJfTUFSSywgUFNEMV9QU0QwX0ZOMiwgUFRaMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMV9NQVJLLCBQU0QxX1BTRDBfRk4xLCBQVFoxX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCSUJUX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19DTEsxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjBfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJU0xEX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU1LCBQVEU1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNCwgUFRFNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTMsIFBURTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUyLCBQVEUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMSwgUFRFMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTAsIFBURTBfREFUQSksCisKKwkvKiBQVEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURjcsIFBURjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc1LCBQVEc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjMsIFBUSjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoyLCBQVEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMSwgUFRKMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjAsIFBUSjBfREFUQSksCisKKwkvKiBQVEsgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSzcsIFBUSzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs2LCBQVEs2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLNSwgUFRLNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzQsIFBUSzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDIsIFBUTDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwxLCBQVEwxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMCwgUFRMMF9EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVE4gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTjcsIFBUTjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE42LCBQVE42X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONSwgUFRONV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjQsIFBUTjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4zLCBQVE4zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMiwgUFROMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjEsIFBUTjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4wLCBQVE4wX0RBVEEpLAorCisJLyogUFRRICovCisJUElOTVVYX0dQSU8oR1BJT19QVFEzLCBQVFEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMiwgUFRRMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTEsIFBUUTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFEwLCBQVFEwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNywgUFRTN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzYsIFBUUzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFM1LCBQVFM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDUsIFBUVDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNSwgUFRVNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTQsIFBUVTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUzLCBQVFUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMiwgUFRVMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTEsIFBUVTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUwLCBQVFUwX0RBVEEpLAorCisJLyogUFRWICovCisJUElOTVVYX0dQSU8oR1BJT19QVFY3LCBQVFY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWNiwgUFRWNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjUsIFBUVjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFY0LCBQVFY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMywgUFRWM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjIsIFBUVjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYxLCBQVFYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMCwgUFRWMF9EQVRBKSwKKworCS8qIFBUVyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRXNywgUFRXN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzYsIFBUVzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFc1LCBQVFc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNCwgUFRXNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzMsIFBUVzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcyLCBQVFcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMSwgUFRXMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzAsIFBUVzBfREFUQSksCisKKwkvKiBQVFggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWDcsIFBUWDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk3LCBQVFk3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNiwgUFRZNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTUsIFBUWTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFk0LCBQVFk0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMywgUFRZM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTIsIFBUWTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkxLCBQVFkxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMCwgUFRZMF9EQVRBKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRaNywgUFRaN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjYsIFBUWjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo1LCBQVFo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaNCwgUFRaNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjMsIFBUWjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoyLCBQVFoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMSwgUFRaMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjAsIFBUWjBfREFUQSksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRUX1RYRCwgU0NJRjBfUFRUX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIFNDSUYwX1BUVF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFRfU0NLLCBTQ0lGMF9QVFRfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRVX1RYRCwgU0NJRjBfUFRVX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVV9SWEQsIFNDSUYwX1BUVV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFVfU0NLLCBTQ0lGMF9QVFVfU0NLX01BUkspLAorCisJLyogU0NJRjEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUU19UWEQsIFNDSUYxX1BUU19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFNfUlhELCBTQ0lGMV9QVFNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRTX1NDSywgU0NJRjFfUFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIFNDSUYxX1BUVl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFZfUlhELCBTQ0lGMV9QVFZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRWX1NDSywgU0NJRjFfUFRWX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBTQ0lGMl9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRUX1JYRCwgU0NJRjJfUFRUX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVF9TQ0ssIFNDSUYyX1BUVF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFVfVFhELCBTQ0lGMl9QVFVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgU0NJRjJfUFRVX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVV9TQ0ssIFNDSUYyX1BUVV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgU0NJRjNfUFRTX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19SWEQsIFNDSUYzX1BUU19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFNfU0NLLCBTQ0lGM19QVFNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1JUUywgU0NJRjNfUFRTX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19DVFMsIFNDSUYzX1BUU19DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfVFhELCBTQ0lGM19QVFZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX1JYRCwgU0NJRjNfUFRWX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUVl9TQ0ssIFNDSUYzX1BUVl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfUlRTLCBTQ0lGM19QVFZfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX0NUUywgU0NJRjNfUFRWX0NUU19NQVJLKSwKKworCS8qIFNDSUY0ICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVEVfVFhELCBTQ0lGNF9QVEVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgU0NJRjRfUFRFX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BURV9TQ0ssIFNDSUY0X1BURV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVE5fVFhELCBTQ0lGNF9QVE5fVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFROX1JYRCwgU0NJRjRfUFROX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssIFNDSUY0X1BUTl9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGNSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFRFX1RYRCwgU0NJRjVfUFRFX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BURV9SWEQsIFNDSUY1X1BURV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVEVfU0NLLCBTQ0lGNV9QVEVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFROX1RYRCwgU0NJRjVfUFROX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BUTl9SWEQsIFNDSUY1X1BUTl9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVE5fU0NLLCBTQ0lGNV9QVE5fU0NLX01BUkspLAorCisJLyogQ0VVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE1LCBWSU9fRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxNCwgVklPX0QxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTMsIFZJT19EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEyLCBWSU9fRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMSwgVklPX0QxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTAsIFZJT19EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDksIFZJT19EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOCwgVklPX0Q4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q3LCBWSU9fRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDYsIFZJT19ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENSwgVklPX0Q1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q0LCBWSU9fRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDMsIFZJT19EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMiwgVklPX0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxLCBWSU9fRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDAsIFZJT19EMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsxLCBWSU9fQ0xLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDEsIFZJT19WRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQxLCBWSU9fSEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0ZMRCwgVklPX0ZMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DS08sIFZJT19DS09fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQyLCBWSU9fVkQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hEMiwgVklPX0hEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsyLCBWSU9fQ0xLMl9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMywgTENERDIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIyLCBMQ0REMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjEsIExDREQyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMCwgTENERDIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE5LCBMQ0REMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTgsIExDREQxOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNywgTENERDE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE2LCBMQ0REMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTUsIExDREQxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNCwgTENERDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEzLCBMQ0REMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTIsIExDREQxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMSwgTENERDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEwLCBMQ0REMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOSwgTENERDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOCwgTENERDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENywgTENERDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENiwgTENERDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENSwgTENERDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENCwgTENERDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMywgTENERDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMiwgTENERDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMSwgTENERDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMCwgTENERDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUUiwgTENETENMS19QVFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUVywgTENETENMS19QVFdfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKworCS8qIElSUSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMCwgSVJRMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTEsIElSUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyLCBJUlEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMywgSVJRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1LCBJUlE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNiwgSVJRNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTcsIElSUTdfTUFSSyksCisKKwkvKiBBVUQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEzLCBBVURBVEEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMiwgQVVEQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTEsIEFVREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEwLCBBVURBVEEwX01BUkspLAorCisJLyogU0RISTAgKFBURCkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ0RfUFRELCBTREhJMENEX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwV1BfUFRELCBTREhJMFdQX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDNfUFRELCBTREhJMEQzX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDJfUFRELCBTREhJMEQyX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDFfUFRELCBTREhJMEQxX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDBfUFRELCBTREhJMEQwX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ01EX1BURCwgU0RISTBDTURfUFREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTEtfUFRELCBTREhJMENMS19QVERfTUFSSyksCisKKwkvKiBTREhJMCAoUFRTKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDRF9QVFMsIFNESEkwQ0RfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBXUF9QVFMsIFNESEkwV1BfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEM19QVFMsIFNESEkwRDNfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMl9QVFMsIFNESEkwRDJfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMV9QVFMsIFNESEkwRDFfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMF9QVFMsIFNESEkwRDBfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTURfUFRTLCBTREhJMENNRF9QVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMENMS19QVFMsIFNESEkwQ0xLX1BUU19NQVJLKSwKKworCS8qIFNESEkxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNELCBTREhJMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFXUCwgU0RISTFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDMsIFNESEkxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUQyLCBTREhJMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFEMSwgU0RISTFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDAsIFNESEkxRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNNRCwgU0RISTFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNMSywgU0RISTFDTEtfTUFSSyksCisKKwkvKiBTSVVBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBRkNLLCBTSVVBRkNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlMUiwgU0lVQUlMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJQlQsIFNJVUFJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNMRCwgU0lVQUlTTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPU0xELCBTSVVBT1NMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFNQ0ssIFNJVUFNQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNQRCwgU0lVQUlTUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVPU1BELCBTSVVBT1NQRF9NQVJLKSwKKworCS8qIFNJVUIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJGQ0ssIFNJVUJGQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCSUxSLCBTSVVCSUxSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklCVCwgU0lVQklCVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJU0xELCBTSVVCSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9TTEQsIFNJVUJPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk1DSywgU0lVQk1DS19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBWT1UgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0NMS0ksIERWX0NMS0lfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEssIERWX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0hTWU5DLCBEVl9IU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX1ZTWU5DLCBEVl9WU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNSwgRFZfRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDE0LCBEVl9EMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTMsIERWX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMiwgRFZfRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDExLCBEVl9EMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTAsIERWX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q5LCBEVl9EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q4LCBEVl9EOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q3LCBEVl9EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q2LCBEVl9ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q1LCBEVl9ENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q0LCBEVl9ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QzLCBEVl9EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QyLCBEVl9EMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxLCBEVl9EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QwLCBEVl9EMF9NQVJLKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjAsIEtFWUlOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMSwgS0VZSU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4yLCBLRVlJTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjMsIEtFWUlOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlONCwgS0VZSU40X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMCwgS0VZT1VUMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDEsIEtFWU9VVDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQyLCBLRVlPVVQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMywgS0VZT1VUM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDRfSU42LCBLRVlPVVQ0X0lONl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDVfSU41LCBLRVlPVVQ1X0lONV9NQVJLKSwKKworCS8qIE1TSU9GMCAoUFRGKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UWEQsIE1TSU9GMF9QVEZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SWEQsIE1TSU9GMF9QVEZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9NQ0ssIE1TSU9GMF9QVEZfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgTVNJT0YwX1BURl9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfVFNDSywgTVNJT0YwX1BURl9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SU1lOQywgTVNJT0YwX1BURl9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywgTVNJT0YwX1BURl9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzEsIE1TSU9GMF9QVEZfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzIsIE1TSU9GMF9QVEZfU1MyX01BUkspLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIE1TSU9GMF9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIE1TSU9GMF9QVFRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssIE1TSU9GMF9QVFhfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UU1lOQywgTVNJT0YwX1BUVF9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywgTVNJT0YwX1BUVF9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SU1lOQywgTVNJT0YwX1BUVF9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfUlNDSywgTVNJT0YwX1BUVF9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIE1TSU9GMF9QVFRfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsIE1TSU9GMF9QVFRfU1MyX01BUkspLAorCisJLyogTVNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFhELCBNU0lPRjFfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JYRCwgTVNJT0YxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9NQ0ssIE1TSU9GMV9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFNZTkMsIE1TSU9GMV9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9UU0NLLCBNU0lPRjFfVFNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9SU1lOQywgTVNJT0YxX1JTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JTQ0ssIE1TSU9GMV9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1NTMSwgTVNJT0YxX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9TUzIsIE1TSU9GMV9TUzJfTUFSSyksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0RBVCwgVFMwX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0NLLCBUUzBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NERU4sIFRTMF9TREVOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NQU1lOQywgVFMwX1NQU1lOQ19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogRE1BQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsIERBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsIERSRVExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsIERBQ0swX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogQURDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjMsIEFOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMiwgQU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4xLCBBTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjAsIEFOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FEVFJHLCBBRFRSR19NQVJLKSwKKworCS8qIENQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RBVFVTMCwgU1RBVFVTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BEU1RBVFVTLCBQRFNUQVRVU19NQVJLKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8wLCBUUFVUTzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVUTzEsIFRQVVRPMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPMiwgVFBVVE8yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8zLCBUUFVUTzNfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlMsIEJTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkFfQ0UyQiwgQ1M2QV9DRTJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M1Ql9DRTFBLCBDUzVCX0NFMUFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVBX0NFMkEsIENTNUFfQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFM19JQ0lPV1IsIFdFM19JQ0lPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTJfSUNJT1JELCBXRTJfSUNJT1JEX01BUkspLAorCisJLyogQVRBUEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxNSwgSURFRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDE0LCBJREVEMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTMsIElERUQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxMiwgSURFRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDExLCBJREVEMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTAsIElERUQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ5LCBJREVEOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ4LCBJREVEOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ3LCBJREVEN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ2LCBJREVENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ1LCBJREVENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ0LCBJREVENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQzLCBJREVEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQyLCBJREVEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxLCBJREVEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQwLCBJREVEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RJUkVDVElPTiwgRElSRUNUSU9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVhCVUZfRU5CLCBFWEJVRl9FTkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVSU1QsIElERVJTVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPREFDSywgSU9EQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9EUkVRLCBJT0RSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JEWSwgSURFSU9SRFlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJTlQsIElERUlOVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUlPV1IsIElERUlPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JELCBJREVJT1JEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFQ1MxLCBJREVDUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVDUzAsIElERUNTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEyLCBJREVBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUExLCBJREVBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEwLCBJREVBMF9NQVJLKSwKKyB9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGE0MDUwMTAwLCAxNiwgMikgeworCQlQVEE3X0ZOLCBQVEE3X09VVCwgMCwgUFRBN19JTiwKKwkJUFRBNl9GTiwgUFRBNl9PVVQsIDAsIFBUQTZfSU4sCisJCVBUQTVfRk4sIFBUQTVfT1VULCAwLCBQVEE1X0lOLAorCQlQVEE0X0ZOLCBQVEE0X09VVCwgUFRBNF9JTl9QVSwgUFRBNF9JTiwKKwkJUFRBM19GTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUsIFBUQTNfSU4sCisJCVBUQTJfRk4sIFBUQTJfT1VULCBQVEEyX0lOX1BVLCBQVEEyX0lOLAorCQlQVEExX0ZOLCBQVEExX09VVCwgUFRBMV9JTl9QVSwgUFRBMV9JTiwKKwkJUFRBMF9GTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUsIFBUQTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUiIsIDB4YTQwNTAxMDIsIDE2LCAyKSB7CisJCVBUQjdfRk4sIFBUQjdfT1VULCAwLCBQVEI3X0lOLAorCQlQVEI2X0ZOLCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJUFRCNV9GTiwgUFRCNV9PVVQsIDAsIFBUQjVfSU4sCisJCVBUQjRfRk4sIFBUQjRfT1VULCAwLCBQVEI0X0lOLAorCQlQVEIzX0ZOLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJUFRCMl9GTiwgUFRCMl9PVVQsIFBUQjJfSU5fUFUsIFBUQjJfSU4sCisJCVBUQjFfRk4sIFBUQjFfT1VULCBQVEIxX0lOX1BVLCBQVEIxX0lOLAorCQlQVEIwX0ZOLCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJUFRDN19GTiwgUFRDN19PVVQsIDAsIFBUQzdfSU4sCisJCVBUQzZfRk4sIFBUQzZfT1VULCAwLCBQVEM2X0lOLAorCQlQVEM1X0ZOLCBQVEM1X09VVCwgMCwgUFRDNV9JTiwKKwkJUFRDNF9GTiwgUFRDNF9PVVQsIDAsIFBUQzRfSU4sCisJCVBUQzNfRk4sIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlQVEMyX0ZOLCBQVEMyX09VVCwgMCwgUFRDMl9JTiwKKwkJUFRDMV9GTiwgUFRDMV9PVVQsIDAsIFBUQzFfSU4sCisJCVBUQzBfRk4sIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlQVEQ3X0ZOLCBQVEQ3X09VVCwgMCwgUFREN19JTiwKKwkJUFRENl9GTiwgUFRENl9PVVQsIDAsIFBURDZfSU4sCisJCVBURDVfRk4sIFBURDVfT1VULCAwLCBQVEQ1X0lOLAorCQlQVEQ0X0ZOLCBQVEQ0X09VVCwgMCwgUFRENF9JTiwKKwkJUFREM19GTiwgUFREM19PVVQsIDAsIFBURDNfSU4sCisJCVBURDJfRk4sIFBURDJfT1VULCAwLCBQVEQyX0lOLAorCQlQVEQxX0ZOLCBQVEQxX09VVCwgMCwgUFREMV9JTiwKKwkJUFREMF9GTiwgUFREMF9PVVQsIDAsIFBURDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUiIsIDB4YTQwNTAxMDgsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBURTVfRk4sIFBURTVfT1VULCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgMCwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIDAsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCAwLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgMCwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIDAsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCVBURjdfRk4sIFBURjdfT1VULCAwLCBQVEY3X0lOLAorCQlQVEY2X0ZOLCBQVEY2X09VVCwgMCwgUFRGNl9JTiwKKwkJUFRGNV9GTiwgUFRGNV9PVVQsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIFBURjRfT1VULCAwLCBQVEY0X0lOLAorCQlQVEYzX0ZOLCBQVEYzX09VVCwgMCwgUFRGM19JTiwKKwkJUFRGMl9GTiwgUFRGMl9PVVQsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIFBURjFfT1VULCAwLCBQVEYxX0lOLAorCQlQVEYwX0ZOLCBQVEYwX09VVCwgMCwgUFRGMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhhNDA1MDEwYywgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRHNV9GTiwgUFRHNV9PVVQsIDAsIDAsCisJCVBURzRfRk4sIFBURzRfT1VULCAwLCAwLAorCQlQVEczX0ZOLCBQVEczX09VVCwgMCwgMCwKKwkJUFRHMl9GTiwgUFRHMl9PVVQsIDAsIDAsCisJCVBURzFfRk4sIFBURzFfT1VULCAwLCAwLAorCQlQVEcwX0ZOLCBQVEcwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSENSIiwgMHhhNDA1MDEwZSwgMTYsIDIpIHsKKwkJUFRIN19GTiwgUFRIN19PVVQsIDAsIFBUSDdfSU4sCisJCVBUSDZfRk4sIFBUSDZfT1VULCAwLCBQVEg2X0lOLAorCQlQVEg1X0ZOLCBQVEg1X09VVCwgMCwgUFRINV9JTiwKKwkJUFRINF9GTiwgUFRINF9PVVQsIDAsIFBUSDRfSU4sCisJCVBUSDNfRk4sIFBUSDNfT1VULCAwLCBQVEgzX0lOLAorCQlQVEgyX0ZOLCBQVEgyX09VVCwgMCwgUFRIMl9JTiwKKwkJUFRIMV9GTiwgUFRIMV9PVVQsIDAsIFBUSDFfSU4sCisJCVBUSDBfRk4sIFBUSDBfT1VULCAwLCBQVEgwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGE0MDUwMTEwLCAxNiwgMikgeworCQlQVEo3X0ZOLCBQVEo3X09VVCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNV9GTiwgUFRKNV9PVVQsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSjNfRk4sIFBUSjNfT1VULCAwLCBQVEozX0lOLAorCQlQVEoyX0ZOLCBQVEoyX09VVCwgMCwgUFRKMl9JTiwKKwkJUFRKMV9GTiwgUFRKMV9PVVQsIDAsIFBUSjFfSU4sCisJCVBUSjBfRk4sIFBUSjBfT1VULCAwLCBQVEowX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBLQ1IiLCAweGE0MDUwMTEyLCAxNiwgMikgeworCQlQVEs3X0ZOLCBQVEs3X09VVCwgMCwgUFRLN19JTiwKKwkJUFRLNl9GTiwgUFRLNl9PVVQsIDAsIFBUSzZfSU4sCisJCVBUSzVfRk4sIFBUSzVfT1VULCAwLCBQVEs1X0lOLAorCQlQVEs0X0ZOLCBQVEs0X09VVCwgMCwgUFRLNF9JTiwKKwkJUFRLM19GTiwgUFRLM19PVVQsIDAsIFBUSzNfSU4sCisJCVBUSzJfRk4sIFBUSzJfT1VULCAwLCBQVEsyX0lOLAorCQlQVEsxX0ZOLCBQVEsxX09VVCwgMCwgUFRLMV9JTiwKKwkJUFRLMF9GTiwgUFRLMF9PVVQsIDAsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCVBUTDdfRk4sIFBUTDdfT1VULCAwLCBQVEw3X0lOLAorCQlQVEw2X0ZOLCBQVEw2X09VVCwgMCwgUFRMNl9JTiwKKwkJUFRMNV9GTiwgUFRMNV9PVVQsIDAsIFBUTDVfSU4sCisJCVBUTDRfRk4sIFBUTDRfT1VULCAwLCBQVEw0X0lOLAorCQlQVEwzX0ZOLCBQVEwzX09VVCwgMCwgUFRMM19JTiwKKwkJUFRMMl9GTiwgUFRMMl9PVVQsIDAsIFBUTDJfSU4sCisJCVBUTDFfRk4sIFBUTDFfT1VULCAwLCBQVEwxX0lOLAorCQlQVEwwX0ZOLCBQVEwwX09VVCwgMCwgUFRMMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTUNSIiwgMHhhNDA1MDExNiwgMTYsIDIpIHsKKwkJUFRNN19GTiwgUFRNN19PVVQsIDAsIFBUTTdfSU4sCisJCVBUTTZfRk4sIFBUTTZfT1VULCAwLCBQVE02X0lOLAorCQlQVE01X0ZOLCBQVE01X09VVCwgMCwgUFRNNV9JTiwKKwkJUFRNNF9GTiwgUFRNNF9PVVQsIDAsIFBUTTRfSU4sCisJCVBUTTNfRk4sIFBUTTNfT1VULCAwLCBQVE0zX0lOLAorCQlQVE0yX0ZOLCBQVE0yX09VVCwgMCwgUFRNMl9JTiwKKwkJUFRNMV9GTiwgUFRNMV9PVVQsIDAsIFBUTTFfSU4sCisJCVBUTTBfRk4sIFBUTTBfT1VULCAwLCBQVE0wX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBOQ1IiLCAweGE0MDUwMTE4LCAxNiwgMikgeworCQlQVE43X0ZOLCBQVE43X09VVCwgMCwgUFRON19JTiwKKwkJUFRONl9GTiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCVBUTjVfRk4sIFBUTjVfT1VULCAwLCBQVE41X0lOLAorCQlQVE40X0ZOLCBQVE40X09VVCwgMCwgUFRONF9JTiwKKwkJUFROM19GTiwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCVBUTjJfRk4sIFBUTjJfT1VULCAwLCBQVE4yX0lOLAorCQlQVE4xX0ZOLCBQVE4xX09VVCwgMCwgUFROMV9JTiwKKwkJUFROMF9GTiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUTNfRk4sIDAsIDAsIFBUUTNfSU4sCisJCVBUUTJfRk4sIDAsIDAsIFBUUTJfSU4sCisJCVBUUTFfRk4sIDAsIDAsIFBUUTFfSU4sCisJCVBUUTBfRk4sIDAsIDAsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCVBUUjdfRk4sIFBUUjdfT1VULCAwLCBQVFI3X0lOLAorCQlQVFI2X0ZOLCBQVFI2X09VVCwgMCwgUFRSNl9JTiwKKwkJUFRSNV9GTiwgUFRSNV9PVVQsIDAsIFBUUjVfSU4sCisJCVBUUjRfRk4sIFBUUjRfT1VULCAwLCBQVFI0X0lOLAorCQlQVFIzX0ZOLCAwLCAwLCBQVFIzX0lOLAorCQlQVFIyX0ZOLCAwLCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgMCwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIDAsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCVBUUzdfRk4sIFBUUzdfT1VULCAwLCBQVFM3X0lOLAorCQlQVFM2X0ZOLCBQVFM2X09VVCwgMCwgUFRTNl9JTiwKKwkJUFRTNV9GTiwgUFRTNV9PVVQsIDAsIFBUUzVfSU4sCisJCVBUUzRfRk4sIFBUUzRfT1VULCAwLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgMCwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIDAsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCAwLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgMCwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDE0MCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNV9GTiwgUFRUNV9PVVQsIDAsIFBUVDVfSU4sCisJCVBUVDRfRk4sIFBUVDRfT1VULCAwLCBQVFQ0X0lOLAorCQlQVFQzX0ZOLCBQVFQzX09VVCwgMCwgUFRUM19JTiwKKwkJUFRUMl9GTiwgUFRUMl9PVVQsIDAsIFBUVDJfSU4sCisJCVBUVDFfRk4sIFBUVDFfT1VULCAwLCBQVFQxX0lOLAorCQlQVFQwX0ZOLCBQVFQwX09VVCwgMCwgUFRUMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRVNV9GTiwgUFRVNV9PVVQsIDAsIFBUVTVfSU4sCisJCVBUVTRfRk4sIFBUVTRfT1VULCAwLCBQVFU0X0lOLAorCQlQVFUzX0ZOLCBQVFUzX09VVCwgMCwgUFRVM19JTiwKKwkJUFRVMl9GTiwgUFRVMl9PVVQsIDAsIFBUVTJfSU4sCisJCVBUVTFfRk4sIFBUVTFfT1VULCAwLCBQVFUxX0lOLAorCQlQVFUwX0ZOLCBQVFUwX09VVCwgMCwgUFRVMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVkNSIiwgMHhhNDA1MDE0NCwgMTYsIDIpIHsKKwkJUFRWN19GTiwgUFRWN19PVVQsIDAsIFBUVjdfSU4sCisJCVBUVjZfRk4sIFBUVjZfT1VULCAwLCBQVFY2X0lOLAorCQlQVFY1X0ZOLCBQVFY1X09VVCwgMCwgUFRWNV9JTiwKKwkJUFRWNF9GTiwgUFRWNF9PVVQsIDAsIFBUVjRfSU4sCisJCVBUVjNfRk4sIFBUVjNfT1VULCAwLCBQVFYzX0lOLAorCQlQVFYyX0ZOLCBQVFYyX09VVCwgMCwgUFRWMl9JTiwKKwkJUFRWMV9GTiwgUFRWMV9PVVQsIDAsIFBUVjFfSU4sCisJCVBUVjBfRk4sIFBUVjBfT1VULCAwLCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQlQVFc3X0ZOLCBQVFc3X09VVCwgMCwgUFRXN19JTiwKKwkJUFRXNl9GTiwgUFRXNl9PVVQsIDAsIFBUVzZfSU4sCisJCVBUVzVfRk4sIFBUVzVfT1VULCAwLCBQVFc1X0lOLAorCQlQVFc0X0ZOLCBQVFc0X09VVCwgMCwgUFRXNF9JTiwKKwkJUFRXM19GTiwgUFRXM19PVVQsIDAsIFBUVzNfSU4sCisJCVBUVzJfRk4sIFBUVzJfT1VULCAwLCBQVFcyX0lOLAorCQlQVFcxX0ZOLCBQVFcxX09VVCwgMCwgUFRXMV9JTiwKKwkJUFRXMF9GTiwgUFRXMF9PVVQsIDAsIFBUVzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFhDUiIsIDB4YTQwNTAxNDgsIDE2LCAyKSB7CisJCVBUWDdfRk4sIFBUWDdfT1VULCAwLCBQVFg3X0lOLAorCQlQVFg2X0ZOLCBQVFg2X09VVCwgMCwgUFRYNl9JTiwKKwkJUFRYNV9GTiwgUFRYNV9PVVQsIDAsIFBUWDVfSU4sCisJCVBUWDRfRk4sIFBUWDRfT1VULCAwLCBQVFg0X0lOLAorCQlQVFgzX0ZOLCBQVFgzX09VVCwgMCwgUFRYM19JTiwKKwkJUFRYMl9GTiwgUFRYMl9PVVQsIDAsIFBUWDJfSU4sCisJCVBUWDFfRk4sIFBUWDFfT1VULCAwLCBQVFgxX0lOLAorCQlQVFgwX0ZOLCBQVFgwX09VVCwgMCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJUFRZN19GTiwgUFRZN19PVVQsIDAsIFBUWTdfSU4sCisJCVBUWTZfRk4sIFBUWTZfT1VULCAwLCBQVFk2X0lOLAorCQlQVFk1X0ZOLCBQVFk1X09VVCwgMCwgUFRZNV9JTiwKKwkJUFRZNF9GTiwgUFRZNF9PVVQsIDAsIFBUWTRfSU4sCisJCVBUWTNfRk4sIFBUWTNfT1VULCAwLCBQVFkzX0lOLAorCQlQVFkyX0ZOLCBQVFkyX09VVCwgMCwgUFRZMl9JTiwKKwkJUFRZMV9GTiwgUFRZMV9PVVQsIDAsIFBUWTFfSU4sCisJCVBUWTBfRk4sIFBUWTBfT1VULCAwLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQlQVFo3X0ZOLCBQVFo3X09VVCwgMCwgUFRaN19JTiwKKwkJUFRaNl9GTiwgUFRaNl9PVVQsIDAsIFBUWjZfSU4sCisJCVBUWjVfRk4sIFBUWjVfT1VULCAwLCBQVFo1X0lOLAorCQlQVFo0X0ZOLCBQVFo0X09VVCwgMCwgUFRaNF9JTiwKKwkJUFRaM19GTiwgUFRaM19PVVQsIDAsIFBUWjNfSU4sCisJCVBUWjJfRk4sIFBUWjJfT1VULCAwLCBQVFoyX0lOLAorCQlQVFoxX0ZOLCBQVFoxX09VVCwgMCwgUFRaMV9JTiwKKwkJUFRaMF9GTiwgUFRaMF9PVVQsIDAsIFBUWjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMikgeworCQlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwgMCwgMCwKKwkJUFNBMTNfUFNBMTJfRk4xLCBQU0ExM19QU0ExMl9GTjIsIDAsIDAsCisJCVBTQTExX1BTQTEwX0ZOMSwgUFNBMTFfUFNBMTBfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLCAwLAorCQlQU0EzX1BTQTJfRk4xLCBQU0EzX1BTQTJfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDIpIHsKKwkJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsIDAsIDAsCisJCVBTQjEzX1BTQjEyX0xDRENfUkdCLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFNCOV9QU0I4X0ZOMSwgUFNCOV9QU0I4X0ZOMiwgUFNCOV9QU0I4X0ZOMywgMCwKKwkJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwgMCwgMCwKKwkJUFNCNV9QU0I0X0ZOMSwgUFNCNV9QU0I0X0ZOMiwgMCwgMCwKKwkJUFNCM19QU0IyX0ZOMSwgUFNCM19QU0IyX0ZOMiwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQyIsIDB4YTQwNTAxNTIsIDE2LCAyKSB7CisJCVBTQzE1X1BTQzE0X0ZOMSwgUFNDMTVfUFNDMTRfRk4yLCAwLCAwLAorCQlQU0MxM19QU0MxMl9GTjEsIFBTQzEzX1BTQzEyX0ZOMiwgMCwgMCwKKwkJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywgMCwKKwkJUFNDOV9QU0M4X0ZOMSwgUFNDOV9QU0M4X0ZOMiwgMCwgMCwKKwkJUFNDN19QU0M2X0ZOMSwgUFNDN19QU0M2X0ZOMiwgUFNDN19QU0M2X0ZOMywgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRCIsIDB4YTQwNTAxNTQsIDE2LCAyKSB7CisJCVBTRDE1X1BTRDE0X0ZOMSwgUFNEMTVfUFNEMTRfRk4yLCAwLCAwLAorCQlQU0QxM19QU0QxMl9GTjEsIFBTRDEzX1BTRDEyX0ZOMiwgMCwgMCwKKwkJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywgMCwKKwkJUFNEOV9QU0Q4X0ZOMSwgUFNEOV9QU0Q4X0ZOMiwgMCwgMCwKKwkJUFNEN19QU0Q2X0ZOMSwgUFNEN19QU0Q2X0ZOMiwgMCwgMCwKKwkJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwgMCwgMCwKKwkJUFNEM19QU0QyX0ZOMSwgUFNEM19QU0QyX0ZOMiwgMCwgMCwKKwkJUFNEMV9QU0QwX0ZOMSwgUFNEMV9QU0QwX0ZOMiwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDEyMCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxMjIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTI0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxMjgsIDgpIHsKKwkJMCwgMCwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJCVBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4YTQwNTAxMmEsIDgpIHsKKwkJUFRGN19EQVRBLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTJjLCA4KSB7CisJCTAsIDAsIFBURzVfREFUQSwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIDAsIFBUSjVfREFUQSwgMCwKKwkJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQS0RSIiwgMHhhNDA1MDEzMiwgOCkgeworCQlQVEs3X0RBVEEsIFBUSzZfREFUQSwgUFRLNV9EQVRBLCBQVEs0X0RBVEEsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxMzQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIFBUTDJfREFUQSwgUFRMMV9EQVRBLCBQVEwwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTM2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTkRSIiwgMHhhNDA1MDEzOCwgOCkgeworCQlQVE43X0RBVEEsIFBUTjZfREFUQSwgUFRONV9EQVRBLCBQVE40X0RBVEEsCisJCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFFEUiIsIDB4YTQwNTAxM2EsIDgpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUkRSIiwgMHhhNDA1MDEzYywgOCkgeworCQlQVFI3X0RBVEEsIFBUUjZfREFUQSwgUFRSNV9EQVRBLCBQVFI0X0RBVEEsCisJCVBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFNEUiIsIDB4YTQwNTAxM2UsIDgpIHsKKwkJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCQlQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBURFIiLCAweGE0MDUwMTYwLCA4KSB7CisJCTAsIDAsIFBUVDVfREFUQSwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIFBUVTVfREFUQSwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTY0LCA4KSB7CisJCVBUVjdfREFUQSwgUFRWNl9EQVRBLCBQVFY1X0RBVEEsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQV0RSIiwgMHhhNDA1MDE2NiwgOCkgeworCQlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFhEUiIsIDB4YTQwNTAxNjgsIDgpIHsKKwkJUFRYN19EQVRBLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCVBUWTdfREFUQSwgUFRZNl9EQVRBLCBQVFk1X0RBVEEsIFBUWTRfREFUQSwKKwkJUFRZM19EQVRBLCBQVFkyX0RBVEEsIFBUWTFfREFUQSwgUFRZMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWkRSIiwgMHhhNDA1MDE2YywgOCkgeworCQlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QVEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0lERUEwLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3NzIzX3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwppbmRleCBlNWUwNjg0Li5iODg2OWFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gtWDMgU01QCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hZ251cyBEYW1tCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTE0LDYgKzE0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IG1lc3NhZ2UgPSAodW5zaWduZWQgaW50KShsb25nKWFyZzsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG9mZnMgPSA0ICogY3B1OworCXVuc2lnbmVkIGludCB4OworCisJeCA9IGN0cmxfaW5sKDB4ZmU0MTAwNzAgKyBvZmZzKTsgLyogQzBJTklUSUNJLi5DbklOVElDSSAqLworCXggJj0gKDEgPDwgKG1lc3NhZ2UgPDwgMikpOworCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLworCisJc21wX21lc3NhZ2VfcmVjdihtZXNzYWdlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogdm9pZCBfX2luaXQgcGxhdF9zbXBfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKQEAgLTQwLDYgKzU2LDEzIEBACiAKIHZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihTTVBfTVNHX05SID49IDgpOworCisJZm9yIChpID0gMDsgaSA8IFNNUF9NU0dfTlI7IGkrKykKKwkJcmVxdWVzdF9pcnEoMTA0ICsgaSwgaXBpX2ludGVycnVwdF9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICJJUEkiLCAodm9pZCAqKShsb25nKWkpOwogfQogCiAjZGVmaW5lIFNUQkNSX1JFRyhwaHlzX2lkKSAoMHhmZTQwMDAwNCB8IChwaHlzX2lkIDw8IDEyKSkKQEAgLTU5LDcgKzgyLDcgQEAKIAkJY3RybF9vdXRsKFNUQkNSX01TVFAsIFNUQkNSX1JFRyhjcHUpKTsKIAogCXdoaWxlICghKGN0cmxfaW5sKFNUQkNSX1JFRyhjcHUpKSAmIFNUQkNSX01TVFApKQotCQk7CisJCWNwdV9yZWxheCgpOwogCiAJLyogU3RhcnQgdXAgc2Vjb25kYXJ5IHByb2Nlc3NvciBieSBzZW5kaW5nIGEgcmVzZXQgKi8KIAljdHJsX291dGwoU1RCQ1JfQVBfVkFMLCBTVEJDUl9SRUcoY3B1KSk7CkBAIC03NSw0NiArOTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IDB4ZmU0MTAwNzAgKyAoY3B1ICogNCk7CiAKIAlCVUdfT04oY3B1ID49IDQpOwotCUJVR19PTihtZXNzYWdlID49IFNNUF9NU0dfTlIpOwogCiAJY3RybF9vdXRsKDEgPDwgKG1lc3NhZ2UgPDwgMiksIGFkZHIpOyAvKiBDMElOVElDSS4uQ25JTlRJQ0kgKi8KIH0KLQotc3RydWN0IGlwaV9kYXRhIHsKLQl2b2lkICgqaGFuZGxlcikodm9pZCAqKTsKLQl2b2lkICphcmc7Ci0JdW5zaWduZWQgaW50IG1lc3NhZ2U7Ci19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXBpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaXBpX2RhdGEgKmlkID0gYXJnOwotCXVuc2lnbmVkIGludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDQgKiBjcHU7Ci0JdW5zaWduZWQgaW50IHg7Ci0KLQl4ID0gY3RybF9pbmwoMHhmZTQxMDA3MCArIG9mZnMpOyAvKiBDMElOSVRJQ0kuLkNuSU5USUNJICovCi0JeCAmPSAoMSA8PCAoaWQtPm1lc3NhZ2UgPDwgMikpOwotCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLwotCi0JaWQtPmhhbmRsZXIoaWQtPmFyZyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBpX2RhdGEgaXBpX2hhbmRsZXJzW1NNUF9NU0dfTlJdOwotCi1pbnQgcGxhdF9yZWdpc3Rlcl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgbWVzc2FnZSwKLQkJCSAgICAgIHZvaWQgKCpoYW5kbGVyKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGlwaV9kYXRhICppZCA9ICZpcGlfaGFuZGxlcnNbbWVzc2FnZV07Ci0KLQlCVUdfT04oU01QX01TR19OUiA+PSA4KTsKLQlCVUdfT04obWVzc2FnZSA+PSBTTVBfTVNHX05SKTsKLQotCWlkLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlpZC0+YXJnID0gYXJnOwotCWlkLT5tZXNzYWdlID0gbWVzc2FnZTsKLQotCXJldHVybiByZXF1ZXN0X2lycSgxMDQgKyBtZXNzYWdlLCBpcGlfaW50ZXJydXB0X2hhbmRsZXIsIDAsICJJUEkiLCBpZCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9NYWtlZmlsZQppbmRleCA4NjQ2MzYzLi5jZTQ2MDJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvTWFrZWZpbGUKQEAgLTUsMyArNSw4IEBACiAKIG9iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKQkJKz0gdW53aW5kLm8KKworIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitjbG9jay0kKENPTkZJR19DUFVfU0g1KQkJOj0gY2xvY2stc2g1Lm8KKworb2JqLXkJCQkrPSAkKGNsb2NrLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM0OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYworICoKKyAqIFNILTUgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpZmNfdGFibGVbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNiwgMjQgfTsKKworLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCisjZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKKyNkZWZpbmUgQ1BSQ19CQVNFCShQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBDUFJDX0JMT0NLX09GRikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ByY19iYXNlOworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CisJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g1X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDVfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDVfY2xrX29wc1tdID0geworCSZzaDVfbWFzdGVyX2Nsa19vcHMsCisJJnNoNV9tb2R1bGVfY2xrX29wcywKKwkmc2g1X2J1c19jbGtfb3BzLAorCSZzaDVfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOworCUJVR19PTighY3ByY19iYXNlKTsKKworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNV9jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggNGEyZWNiZS4uOTVkMjE2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jIGIvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjdjZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL2ZwdS5oPgotCi0vKgotICogQ2FwdHVyZSB0aGUgdXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIgc3BhY2UpCi0gKi8KLWludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7Ci0KLQlwdHJlZ3MgPSAqdGFza19wdF9yZWdzKHRzayk7Ci0JZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnB1KQotewotCWludCBmcHZhbGlkID0gMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKLQlmcHZhbGlkID0gISF0c2tfdXNlZF9tYXRoKHRzayk7Ci0JaWYgKGZwdmFsaWQpIHsKLQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGZwdmFsaWQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZWZiYjQyNi4uMWE1Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTM3MSwzICszNzEsNDcgQEAKICNlbmRpZgogNzoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgogODoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9sZWF2ZQorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorCS5hbGlnbiAyCisJLmdsb2JsCV9tY291bnQKKwkudHlwZQlfbWNvdW50LEBmdW5jdGlvbgorCS5nbG9ibAltY291bnQKKwkudHlwZQltY291bnQsQGZ1bmN0aW9uCitfbWNvdW50OgorbWNvdW50OgorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI3LCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCisJbW92LmwJQCgyMCxyMTUpLHI0CisJc3RzCXByLCByNQorCisJbW92LmwJMWYsIHI2CisJbW92LmwJZnRyYWNlX3N0dWIsIHI3CQorCWNtcC9lcQlyNiwgcjcKKwlidAlza2lwX3RyYWNlCisKKwltb3YubAlAcjYsIHI2CisJanNyCUByNgorCSBub3AKKworc2tpcF90cmFjZToKKworCWxkcy5sCUByMTUrLCBwcgorCW1vdi5sCUByMTUrLCByNworCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNQorCXJ0cworCSBtb3YubAlAcjE1KywgcjQKKworCS5hbGlnbiAyCisxOgkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKworCS5nbG9ibAlmdHJhY2Vfc3R1YgorZnRyYWNlX3N0dWI6CisJcnRzCisJIG5vcAorI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2dwaW8uYyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhiODEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogUGlubXV4ZWQgR1BJTyBzdXBwb3J0IGZvciBTdXBlckguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQoreworCWlmICghcmVnaXN0ZXJlZF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKK30KKworc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKK3sKKwlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQorCQlyZXR1cm4gMDsKKworCWlmIChlbnVtX2lkID4gci0+ZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKKworCWRhdGEgPSAwOworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKKwkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQlkYXRhID0gY3RybF9pbmIocmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJZGF0YSA9IGN0cmxfaW53KHJlZyk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRhdGEgPSBjdHJsX2lubChyZWcpOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRvX3dyaXRlKQorCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7CisKKwlkYXRhICY9IH4obWFzayA8PCBwb3MpOworCWRhdGEgfD0gdmFsdWUgPDwgcG9zOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoZGF0YSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKKwlpbnQgaywgbjsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gMDsKKwl3aGlsZSAoMSkgeworCQlkYXRhX3JlZyA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZGF0YV9yZWctPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgeworCQkJCSpkcnAgPSBkYXRhX3JlZzsKKwkJCQkqYml0cCA9IG47CisJCQkJcmV0dXJuIDA7CisKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHBpbm11eF9lbnVtX3QgZW51bV9pZCwKKwkJCSAgc3RydWN0IHBpbm11eF9jZmdfcmVnICoqY3JwLCBpbnQgKmluZGV4cCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqKmNudHApCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjb25maWdfcmVnOworCXVuc2lnbmVkIGxvbmcgcl93aWR0aCwgZl93aWR0aDsKKwlpbnQgaywgbjsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWNvbmZpZ19yZWcgPSBncGlvYy0+Y2ZnX3JlZ3MgKyBrOworCisJCXJfd2lkdGggPSBjb25maWdfcmVnLT5yZWdfd2lkdGg7CisJCWZfd2lkdGggPSBjb25maWdfcmVnLT5maWVsZF93aWR0aDsKKworCQlpZiAoIXJfd2lkdGgpCisJCQlicmVhazsKKwkJZm9yIChuID0gMDsgbiA8IChyX3dpZHRoIC8gZl93aWR0aCkgKiAxIDw8IGZfd2lkdGg7IG4rKykgeworCQkJaWYgKGNvbmZpZ19yZWctPmVudW1faWRzW25dID09IGVudW1faWQpIHsKKwkJCQkqY3JwID0gY29uZmlnX3JlZzsKKwkJCQkqaW5kZXhwID0gbjsKKwkJCQkqY250cCA9ICZjb25maWdfcmVnLT5jbnRbbiAvICgxIDw8IGZfd2lkdGgpXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9ncGlvX2VudW1faWQoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICBpbnQgcG9zLCBwaW5tdXhfZW51bV90ICplbnVtX2lkcCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlwaW5tdXhfZW51bV90ICpkYXRhID0gZ3Bpb2MtPmdwaW9fZGF0YTsKKwlpbnQgazsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKSB7CisJCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPm1hcmspKSB7CisJCQlwcl9lcnIoIm5vbiBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocG9zKSB7CisJCSplbnVtX2lkcCA9IGRhdGFbcG9zICsgMV07CisJCXJldHVybiBwb3MgKyAxOworCX0KKworCWZvciAoayA9IDA7IGsgPCBncGlvYy0+Z3Bpb19kYXRhX3NpemU7IGsrKykgeworCQlpZiAoZGF0YVtrXSA9PSBlbnVtX2lkKSB7CisJCQkqZW51bV9pZHAgPSBkYXRhW2sgKyAxXTsKKwkJCXJldHVybiBrICsgMTsKKwkJfQorCX0KKworCXByX2VycigiY2Fubm90IGxvY2F0ZSBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJaWYgKHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgMCwgMCkgPT0gdmFsdWUpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitlbnVtIHsgR1BJT19DRkdfRFJZUlVOLCBHUElPX0NGR19SRVEsIEdQSU9fQ0ZHX0ZSRUUgfTsKKworaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkgICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjciA9IE5VTEw7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgKnJhbmdlOworCWludCBpbl9yYW5nZSwgcG9zLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nICpjbnRwOworCisJc3dpdGNoIChwaW5tdXhfdHlwZSkgeworCisJY2FzZSBQSU5NVVhfVFlQRV9GVU5DVElPTjoKKwkJcmFuZ2UgPSBOVUxMOworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCQlyYW5nZSA9ICZncGlvYy0+b3V0cHV0OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dDsKKwkJYnJlYWs7CisKKwljYXNlIFBJTk1VWF9UWVBFX0lOUFVUX1BVTExVUDoKKwkJcmFuZ2UgPSAmZ3Bpb2MtPmlucHV0X3B1OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV046CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dF9wZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9lcnI7CisJfQorCisJcG9zID0gMDsKKwllbnVtX2lkID0gMDsKKwlpbmRleCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJcG9zID0gZ2V0X2dwaW9fZW51bV9pZChncGlvYywgZ3BpbywgcG9zLCAmZW51bV9pZCk7CisJCWlmIChwb3MgPD0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlpZiAoIWVudW1faWQpCisJCQlicmVhazsKKworCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5mdW5jdGlvbik7CisJCWlmICghaW5fcmFuZ2UgJiYgcmFuZ2UpCisJCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCisJCWlmICghaW5fcmFuZ2UpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X2NvbmZpZ19yZWcoZ3Bpb2MsIGVudW1faWQsICZjciwgJmluZGV4LCAmY250cCkgIT0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlzd2l0Y2ggKGNmZ19tb2RlKSB7CisJCWNhc2UgR1BJT19DRkdfRFJZUlVOOgorCQkJaWYgKCEqY250cCB8fCAhY2hlY2tfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfUkVROgorCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQkqY250cCA9ICpjbnRwICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfRlJFRToKKwkJCSpjbnRwID0gKmNudHAgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKyBvdXRfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCitpbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KKworCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfRlVOQ1RJT047CisJZWxzZQorCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0dQSU87CisKKwlpZiAocGlubXV4X3R5cGUgPT0gUElOTVVYX1RZUEVfRlVOQ1RJT04pIHsKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJCQkgICAgICAgcGlubXV4X3R5cGUsCisJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKKwkJCWdvdG8gZXJyX3VubG9jazsKKworCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKKwkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQorCQkJQlVHKCk7CisJfQorCisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisgZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwaW5tdXhfdHlwZTsKKworCWlmICghZ3Bpb2MpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKwlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK3N0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCit7CisJaW50IHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKworCXN3aXRjaCAocGlubXV4X3R5cGUpIHsKKwljYXNlIFBJTk1VWF9UWVBFX0dQSU86CisJCWJyZWFrOworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVA6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTjoKKwkJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJICAgICAgIG5ld19waW5tdXhfdHlwZSwKKwkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCisJCWdvdG8gZXJyX291dDsKKworCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCQkgICAgICAgbmV3X3Bpbm11eF90eXBlLAorCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKKwkJQlVHKCk7CisKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBuZXdfcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKyBlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKKworc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKKwkJCQlpbnQgZG9fd3JpdGUpCit7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOworCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCQlCVUcoKTsKKwllbHNlCisJCXZhbHVlID0gcmVhZF93cml0ZV9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwKKwkJCQkgICAgICAgMSwgYml0LCB2YWx1ZSwgZG9fd3JpdGUpOworCisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIWdwaW9jKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKKworaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWx1ZSA9IDA7CisKKwlpZiAoIWdwaW9jKQorCQlCVUcoKTsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQl2YWx1ZSA9IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCAwLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTChncGlvX2dldF92YWx1ZSk7CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZ3Bpb2MpCisJCUJVRygpOworCWVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCitpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKQoreworCXJlZ2lzdGVyZWRfZ3BpbyA9IHBpcDsKKwlwcl9pbmZvKCJwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCisJCXBpcC0+bmFtZSwgcGlwLT5maXJzdF9ncGlvLCBwaXAtPmxhc3RfZ3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvLmMgYi9hcmNoL3NoL2tlcm5lbC9pby5jCmluZGV4IDJiODk5MTIuLjI5Y2Y0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW8uYwpAQCAtMTksMTIgKzE5LDEyIEBACiAgKiBDb3B5IGRhdGEgZnJvbSBJTyBtZW1vcnkgc3BhY2UgdG8gInJlYWwiIG1lbW9yeSBzcGFjZS4KICAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgogICovCi12b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNoYXIgKnAgPSB0bzsKKwl1bnNpZ25lZCBjaGFyICpwID0gdG87CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgKnAgPSByZWFkYigodm9pZCBfX2lvbWVtICopZnJvbSk7CisgICAgICAgICAgICAgICAgKnAgPSByZWFkYihmcm9tKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgZnJvbSsrOwogICAgICAgICB9CkBAIC0zNywxMCArMzcsMTAgQEAKICAqLwogdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNvbnN0IGNoYXIgKnAgPSBmcm9tOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBmcm9tOwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYigqcCwgKHZvaWQgX19pb21lbSAqKXRvKTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoKnAsIHRvKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgdG8rKzsKICAgICAgICAgfQpAQCAtNTUsNyArNTUsNyBAQAogewogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYihjLCAodm9pZCBfX2lvbWVtICopZHN0KTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoYywgZHN0KTsKICAgICAgICAgICAgICAgICBkc3QrKzsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IGRiNzY5NDQuLjVhN2Y1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTE5LDM4ICsxOSwzMyBAQAogLyogU0gzIGhhcyBhIFBDTUNJQSBidWcgdGhhdCBuZWVkcyBhIGR1bW15IHJlYWQgZnJvbSBhcmVhIDYgZm9yIGEKICAqIHdvcmthcm91bmQuICovCiAvKiBJJ20gbm90IHN1cmUgU0g3NzA5IGhhcyB0aGlzIGtpbmQgb2YgYnVnICovCi0jZGVmaW5lIGR1bW15X3JlYWQoKQljdHJsX2luYigweGJhMDAwMDAwKQorI2RlZmluZSBkdW1teV9yZWFkKCkJX19yYXdfcmVhZGIoMHhiYTAwMDAwMCkKICNlbHNlCiAjZGVmaW5lIGR1bW15X3JlYWQoKQogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKLXsKLQljdHJsX2ludygweGEwMDAwMDAwKTsKLX0KLQogdTggZ2VuZXJpY19pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCAxKSk7CisJcmV0dXJuIF9fcmF3X3JlYWRiKF9faW9wb3J0X21hcChwb3J0LCAxKSk7CiB9CiAKIHUxNiBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcoX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKIH0KIAogdTMyIGdlbmVyaWNfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgNCkpOworCXJldHVybiBfX3Jhd19yZWFkbChfX2lvcG9ydF9tYXAocG9ydCwgNCkpOwogfQogCiB1OCBnZW5lcmljX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIHYgPSBnZW5lcmljX2luYihwb3J0KTsKIAotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCkBAIC01OCw3ICs1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbncocG9ydCk7CiAKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtNjYsNyArNjEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdiA9IGdlbmVyaWNfaW5sKHBvcnQpOwogCi0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTgxLDcgKzc2LDcgQEAKIAl2b2xhdGlsZSB1OCAqcG9ydF9hZGRyOwogCXU4ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTggKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHU4IF9fZm9yY2UgKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSpidWYrKyA9ICpwb3J0X2FkZHI7CiB9CkBAIC05MSw3ICs4Niw3IEBACiAJdm9sYXRpbGUgdTE2ICpwb3J0X2FkZHI7CiAJdTE2ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTE2ICopX19pb3BvcnRfbWFwKHBvcnQsIDIpOworCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MTYgX19mb3JjZSAqKV9faW9wb3J0X21hcChwb3J0LCAyKTsKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIApAQCAtMTAzLDcgKzk4LDcgQEAKIAl2b2xhdGlsZSB1MzIgKnBvcnRfYWRkcjsKIAl1MzIgKmJ1ZiA9IGRzdDsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MzIgKilfX2lvcG9ydF9tYXAocG9ydCwgNCk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopX19pb3BvcnRfbWFwKHBvcnQsIDQpOwogCXdoaWxlIChjb3VudC0tKQogCQkqYnVmKysgPSAqcG9ydF9hZGRyOwogCkBAIC0xMTIsMzUgKzEwNywzNSBAQAogCiB2b2lkIGdlbmVyaWNfb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKKwlfX3Jhd193cml0ZWIoYiwgX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgMikpOworCV9fcmF3X3dyaXRldyhiLCBfX2lvcG9ydF9tYXAocG9ydCwgMikpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCA0KSk7CisJX19yYXdfd3JpdGVsKGIsIF9faW9wb3J0X21hcChwb3J0LCA0KSk7CiB9CiAKIHZvaWQgZ2VuZXJpY19vdXRiX3AodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0YihiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHdfcCh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0dyhiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dGxfcCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0bChiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogLyoKQEAgLTE4NCwzNiArMTc5LDYgQEAKIAlkdW1teV9yZWFkKCk7CiB9CiAKLXU4IGdlbmVyaWNfcmVhZGIodm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCi11MTYgZ2VuZXJpY19yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXUzMiBnZW5lcmljX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlYih1OCBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXZvaWQgZ2VuZXJpY193cml0ZXcodTE2IGIsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlbCh1MzIgYiwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCiB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Njg1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCisgKiBLZXJuZWwgcHJvYmVzIChrcHJvYmVzKSBmb3IgU3VwZXJICisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENocmlzIFNtaXRoIDxjaHJpcy5zbWl0aEBzdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSkgPSBOVUxMOworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOworCitzdGF0aWMgc3RydWN0IGtwcm9iZSBzYXZlZF9jdXJyZW50X29wY29kZTsKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIHNhdmVkX25leHRfb3Bjb2RlOworc3RhdGljIHN0cnVjdCBrcHJvYmUgc2F2ZWRfbmV4dF9vcGNvZGUyOworCisjZGVmaW5lIE9QQ09ERV9KTVAoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4NDAyYikKKyNkZWZpbmUgT1BDT0RFX0pTUih4KQkoKCh4KSAmIDB4RjBGRikgPT0gMHg0MDBiKQorI2RlZmluZSBPUENPREVfQlJBKHgpCSgoKHgpICYgMHhGMDAwKSA9PSAweGEwMDApCisjZGVmaW5lIE9QQ09ERV9CUkFGKHgpCSgoKHgpICYgMHhGMEZGKSA9PSAweDAwMjMpCisjZGVmaW5lIE9QQ09ERV9CU1IoeCkJKCgoeCkgJiAweEYwMDApID09IDB4YjAwMCkKKyNkZWZpbmUgT1BDT0RFX0JTUkYoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4MDAwMykKKworI2RlZmluZSBPUENPREVfQkZfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZjAwKQorI2RlZmluZSBPUENPREVfQlRfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZDAwKQorCisjZGVmaW5lIE9QQ09ERV9CRih4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4YjAwKQorI2RlZmluZSBPUENPREVfQlQoeCkJKCgoeCkgJiAweEZGMDApID09IDB4ODkwMCkKKworI2RlZmluZSBPUENPREVfUlRTKHgpCSgoKHgpICYgMHgwMDBGKSA9PSAweDAwMGIpCisjZGVmaW5lIE9QQ09ERV9SVEUoeCkJKCgoeCkgJiAweEZGRkYpID09IDB4MDAyYikKKworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJa3Byb2JlX29wY29kZV90IG9wY29kZSA9ICooa3Byb2JlX29wY29kZV90ICopIChwLT5hZGRyKTsKKworCWlmIChPUENPREVfUlRFKG9wY29kZSkpCisJCXJldHVybiAtRUZBVUxUOwkvKiBCYWQgYnJlYWtwb2ludCAqLworCisJcC0+b3Bjb2RlID0gb3Bjb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGFyY2hfY29weV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwltZW1jcHkocC0+YWluc24uaW5zbiwgcC0+YWRkciwgTUFYX0lOU05fU0laRSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwLT5hZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBwLT5vcGNvZGU7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCitpbnQgX19rcHJvYmVzIGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpZiAoKnAtPmFkZHIgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBJZiBhbiBpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIG9jY3VycyBmb3IgYW4gYWRkcmVzcworICogY29udGFpbmluZyBhIGtwcm9iZSwgcmVtb3ZlIHRoZSBwcm9iZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGV4Y2VwdGlvbiB3YXMgaGFuZGxlZCBzdWNjZXNzZnVsbHksIDEgb3RoZXJ3aXNlLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVfaWxsc2xvdCh1bnNpZ25lZCBsb25nIHBjKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBnZXRfa3Byb2JlKChrcHJvYmVfb3Bjb2RlX3QgKikgcGMgKyAxKTsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJcHJpbnRrKCJXYXJuaW5nOiByZW1vdmluZyBrcHJvYmUgZnJvbSBkZWxheSBzbG90OiAweCUuOHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXBjICsgMik7CisJCXVucmVnaXN0ZXJfa3Byb2JlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIgIT0gMHgwKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZSk7CisJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJCXNhdmVkX25leHRfb3Bjb2RlLm9wY29kZSA9IDB4MDsKKworCQlpZiAoc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgIT0gMHgwKSB7CisJCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5vcGNvZGUgPSAweDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOworCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CisJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSBzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKK30KKworLyoKKyAqIFNpbmdsZXN0ZXAgaXMgaW1wbGVtZW50ZWQgYnkgZGlzYWJsaW5nIHRoZSBjdXJyZW50IGtwcm9iZSBhbmQgc2V0dGluZyBvbmUKKyAqIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLCBmb2xsb3dpbmcgYnJhbmNoZXMuIFR3byBwcm9iZXMgYXJlIHNldCBpZiB0aGUKKyAqIGJyYW5jaCBpcyBjb25kaXRpb25hbC4KKyAqLworc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyk7CisJYWRkciA9IHNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHI7CisKKwlpZiAocCAhPSBOVUxMKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKworCQlpZiAoT1BDT0RFX0pTUihwLT5vcGNvZGUpIHx8IE9QQ09ERV9KTVAocC0+b3Bjb2RlKSkgeworCQkJdW5zaWduZWQgaW50IHJlZ19uciA9ICgocC0+b3Bjb2RlID4+IDgpICYgMHgwMDBGKTsKKwkJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPQorCQkJICAgIChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+cmVnc1tyZWdfbnJdOworCQl9IGVsc2UgaWYgKE9QQ09ERV9CUkEocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGlzcCA9IChwLT5vcGNvZGUgJiAweDBGRkYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JSQUYocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSRihwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgcmVnX25yID0gKChwLT5vcGNvZGUgPj4gOCkgJiAweDAwMEYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsKKwkJCQkJCSByZWdzLT5yZWdzW3JlZ19ucl0pOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX1JUUyhwLT5vcGNvZGUpKSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCQl9IGVsc2UgaWYgKE9QQ09ERV9CRihwLT5vcGNvZGUpIHx8IE9QQ09ERV9CVChwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAxOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JGX1MocC0+b3Bjb2RlKSB8fCBPUENPREVfQlRfUyhwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAyOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gcC0+YWRkciArIDE7CisJCX0KKworCQlzYXZlZF9uZXh0X29wY29kZS5vcGNvZGUgPSAqKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwl9Cit9CisKKy8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KK3ZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCisJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmktPnJldF9hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZylrcmV0cHJvYmVfdHJhbXBvbGluZTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqcDsKKwlpbnQgcmV0ID0gMDsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gYmUgcHJlZW1wdGVkIGZvciB0aGUgZW50aXJlCisJICogZHVyYXRpb24gb2Yga3Byb2JlIHByb2Nlc3NpbmcKKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKHJlZ3MtPnBjKTsKKworCS8qIENoZWNrIHdlJ3JlIG5vdCBhY3R1YWxseSByZWN1cnNpbmcgKi8KKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJaWYgKHApIHsKKwkJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgorCQkJICAgICpwLT5haW5zbi5pbnNuID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCQlnb3RvIG5vX2twcm9iZTsKKwkJCX0KKwkJCS8qIFdlIGhhdmUgcmVlbnRlcmVkIHRoZSBrcHJvYmVfaGFuZGxlcigpLCBzaW5jZQorCQkJICogYW5vdGhlciBwcm9iZSB3YXMgaGl0IHdoaWxlIHdpdGhpbiB0aGUgaGFuZGxlci4KKwkJCSAqIFdlIGhlcmUgc2F2ZSB0aGUgb3JpZ2luYWwga3Byb2JlcyB2YXJpYWJsZXMgYW5kCisJCQkgKiBqdXN0IHNpbmdsZSBzdGVwIG9uIHRoZSBpbnN0cnVjdGlvbiBvZiB0aGUgbmV3IHByb2JlCisJCQkgKiB3aXRob3V0IGNhbGxpbmcgYW55IHVzZXIgaGFuZGxlcnMuCisJCQkgKi8KKwkJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwkJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQocCk7CisJCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7CisJCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfUkVFTlRFUjsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcCA9IF9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpOworCQkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgcC0+YnJlYWtfaGFuZGxlcihwLCByZWdzKSkgeworCQkJCWdvdG8gc3NfcHJvYmU7CisJCQl9CisJCX0KKwkJZ290byBub19rcHJvYmU7CisJfQorCisJcCA9IGdldF9rcHJvYmUoYWRkcik7CisJaWYgKCFwKSB7CisJCS8qIE5vdCBvbmUgb2Ygb3VyczogbGV0IGtlcm5lbCBoYW5kbGUgaXQgKi8KKwkJaWYgKCooa3Byb2JlX29wY29kZV90ICopYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CisJCQkvKgorCQkJICogVGhlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgcmlnaHQKKwkJCSAqIGFmdGVyIHdlIGhpdCBpdC4gQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHByb2JlcG9pbnQgb3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJlc3MuIEluIGVpdGhlciBjYXNlLCBubyBmdXJ0aGVyCisJCQkgKiBoYW5kbGluZyBvZiB0aGlzIGludGVycnVwdCBpcyBhcHByb3ByaWF0ZS4KKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCisJCWdvdG8gbm9fa3Byb2JlOworCX0KKworCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfQUNUSVZFOworCisJaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQorCQkvKiBoYW5kbGVyIGhhcyBhbHJlYWR5IHNldCB0aGluZ3MgdXAsIHNvIHNraXAgc3Mgc2V0dXAgKi8KKwkJcmV0dXJuIDE7CisKK3NzX3Byb2JlOgorCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCXJldHVybiAxOworCitub19rcHJvYmU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgZnVuY3Rpb24tcmV0dXJuIHByb2JlcywgaW5pdF9rcHJvYmVzKCkgZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50CisgKiBoZXJlLiBXaGVuIGEgcmV0cHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUgaXMgaGl0IGFuZAorICogdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKCkgcnVucywgY2FsbGluZyB0aGUga3JldHByb2JlJ3MgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgX191c2VkIGtyZXRwcm9iZV90cmFtcG9saW5lX2hvbGRlcih2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoIi5nbG9ibCBrcmV0cHJvYmVfdHJhbXBvbGluZVxuIgorCQkgICAgICAia3JldHByb2JlX3RyYW1wb2xpbmU6XG5cdCIKKwkJICAgICAgIm5vcFxuIik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSBoaXQgdGhlIHByb2JlIHBvaW50IGF0IGtyZXRwcm9iZV90cmFtcG9saW5lCisgKi8KK2ludCBfX2twcm9iZXMgdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgZW1wdHlfcnA7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb3JpZ19yZXRfYWRkcmVzcyA9IDA7CisJdW5zaWduZWQgbG9uZyB0cmFtcG9saW5lX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7CisKKwlJTklUX0hMSVNUX0hFQUQoJmVtcHR5X3JwKTsKKwlrcmV0cHJvYmVfaGFzaF9sb2NrKGN1cnJlbnQsICZoZWFkLCAmZmxhZ3MpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgorCSAqIHRhc2sgZWl0aGVyIGJlY2F1c2UgYW4gbXVsdGlwbGUgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHBhdGgKKwkgKiBoYXZlIGEgcmV0dXJuIHByb2JlIGluc3RhbGxlZCBvbiB0aGVtLCBhbmQvb3IgbW9yZSB0aGVuIG9uZSByZXR1cm4KKwkgKiByZXR1cm4gcHJvYmUgd2FzIHJlZ2lzdGVyZWQgZm9yIGEgdGFyZ2V0IGZ1bmN0aW9uLgorCSAqCisJICogV2UgY2FuIGhhbmRsZSB0aGlzIGJlY2F1c2U6CisJICogICAgIC0gaW5zdGFuY2VzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QKKwkgKiAgICAgLSB3aGVuIG11bHRpcGxlIHJldHVybiBwcm9iZXMgYXJlIHJlZ2lzdGVyZWQgZm9yIHRoZSBzYW1lCisJICogICAgICAgZnVuY3Rpb24sIHRoZSBmaXJzdCBpbnN0YW5jZSdzIHJldF9hZGRyIHdpbGwgcG9pbnQgdG8gdGhlCisJICogICAgICAgcmVhbCByZXR1cm4gYWRkcmVzcywgYW5kIGFsbCB0aGUgcmVzdCB3aWxsIHBvaW50IHRvCisJICogICAgICAga3JldHByb2JlX3RyYW1wb2xpbmUKKwkgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsIGhlYWQsIGhsaXN0KSB7CisJCWlmIChyaS0+dGFzayAhPSBjdXJyZW50KQorCQkJLyogYW5vdGhlciB0YXNrIGlzIHNoYXJpbmcgb3VyIGhhc2ggYnVja2V0ICovCisJCQljb250aW51ZTsKKworCQlpZiAocmktPnJwICYmIHJpLT5ycC0+aGFuZGxlcikgeworCQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSAmcmktPnJwLT5rcDsKKwkJCXJpLT5ycC0+aGFuZGxlcihyaSwgcmVncyk7CisJCQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IE5VTEw7CisJCX0KKworCQlvcmlnX3JldF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOworCQlyZWN5Y2xlX3JwX2luc3QocmksICZlbXB0eV9ycCk7CisKKwkJaWYgKG9yaWdfcmV0X2FkZHJlc3MgIT0gdHJhbXBvbGluZV9hZGRyZXNzKQorCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuIEFueSBvdGhlcgorCQkJICogaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2sgYXJlIGZvcgorCQkJICogb3RoZXIgY2FsbHMgZGVlcGVyIG9uIHRoZSBjYWxsIHN0YWNrCisJCQkgKi8KKwkJCWJyZWFrOworCX0KKworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CisKKwlyZWdzLT5wYyA9IG9yaWdfcmV0X2FkZHJlc3M7CisJa3JldHByb2JlX2hhc2hfdW5sb2NrKGN1cnJlbnQsICZmbGFncyk7CisKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsICZlbXB0eV9ycCwgaGxpc3QpIHsKKwkJaGxpc3RfZGVsKCZyaS0+aGxpc3QpOworCQlrZnJlZShyaSk7CisJfQorCisJcmV0dXJuIG9yaWdfcmV0X2FkZHJlc3M7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCisJaWYgKCFjdXIpCisJCXJldHVybiAwOworCisJaWYgKChrY2ItPmtwcm9iZV9zdGF0dXMgIT0gS1BST0JFX1JFRU5URVIpICYmIGN1ci0+cG9zdF9oYW5kbGVyKSB7CisJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1NET05FOworCQljdXItPnBvc3RfaGFuZGxlcihjdXIsIHJlZ3MsIDApOworCX0KKworCWlmIChzYXZlZF9uZXh0X29wY29kZS5hZGRyICE9IDB4MCkgeworCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IDB4MDsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJCWFkZHIgPSBzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyOworCQlzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyID0gMHgwOworCisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUocCk7CisKKwkJaWYgKHNhdmVkX25leHRfb3Bjb2RlMi5hZGRyICE9IDB4MCkgeworCQkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgPSAweDA7CisJCQlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCQl9CisJfQorCisJLyogUmVzdG9yZSBiYWNrIHRoZSBvcmlnaW5hbCBzYXZlZCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQgY29udGludWUuICovCisJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikgeworCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCitvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKKworCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CisJY2FzZSBLUFJPQkVfSElUX1NTOgorCWNhc2UgS1BST0JFX1JFRU5URVI6CisJCS8qCisJCSAqIFdlIGFyZSBoZXJlIGJlY2F1c2UgdGhlIGluc3RydWN0aW9uIGJlaW5nIHNpbmdsZQorCQkgKiBzdGVwcGVkIGNhdXNlZCBhIHBhZ2UgZmF1bHQuIFdlIHJlc2V0IHRoZSBjdXJyZW50CisJCSAqIGtwcm9iZSwgcG9pbnQgdGhlIHBjIGJhY2sgdG8gdGhlIHByb2JlIGFkZHJlc3MKKwkJICogYW5kIGFsbG93IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gY29udGludWUgYXMgYQorCQkgKiBub3JtYWwgcGFnZSBmYXVsdC4KKwkJICovCisJCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpY3VyLT5hZGRyOworCQlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKQorCQkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZWxzZQorCQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlicmVhazsKKwljYXNlIEtQUk9CRV9ISVRfQUNUSVZFOgorCWNhc2UgS1BST0JFX0hJVF9TU0RPTkU6CisJCS8qCisJCSAqIFdlIGluY3JlbWVudCB0aGUgbm1pc3NlZCBjb3VudCBmb3IgYWNjb3VudGluZywKKwkJICogd2UgY2FuIGFsc28gdXNlIG5wcmUvbnBvc3RmYXVsdCBjb3VudCBmb3IgYWNjb3VudGluZworCQkgKiB0aGVzZSBzcGVjaWZpYyBmYXVsdCBjYXNlcy4KKwkJICovCisJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoY3VyKTsKKworCQkvKgorCQkgKiBXZSBjb21lIGhlcmUgYmVjYXVzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZS9wb3N0CisJCSAqIGhhbmRsZXIgY2F1c2VkIHRoZSBwYWdlX2ZhdWx0LCB0aGlzIGNvdWxkIGhhcHBlbgorCQkgKiBpZiBoYW5kbGVyIHRyaWVzIHRvIGFjY2VzcyB1c2VyIHNwYWNlIGJ5CisJCSAqIGNvcHlfZnJvbV91c2VyKCksIGdldF91c2VyKCkgZXRjLiBMZXQgdGhlCisJCSAqIHVzZXItc3BlY2lmaWVkIGhhbmRsZXIgdHJ5IHRvIGZpeCBpdCBmaXJzdC4KKwkJICovCisJCWlmIChjdXItPmZhdWx0X2hhbmRsZXIgJiYgY3VyLT5mYXVsdF9oYW5kbGVyKGN1ciwgcmVncywgdHJhcG5yKSkKKwkJCXJldHVybiAxOworCisJCS8qCisJCSAqIEluIGNhc2UgdGhlIHVzZXItc3BlY2lmaWVkIGZhdWx0IGhhbmRsZXIgcmV0dXJuZWQKKwkJICogemVybywgdHJ5IHRvIGZpeCB1cC4KKwkJICovCisJCWlmICgoZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wYykpICE9IE5VTEwpIHsKKwkJCXJlZ3MtPnBjID0gZW50cnktPmZpeHVwOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKgorCQkgKiBmaXh1cF9leGNlcHRpb24oKSBjb3VsZCBub3QgaGFuZGxlIGl0LAorCQkgKiBMZXQgZG9fcGFnZV9mYXVsdCgpIGZpeCBpdC4KKwkJICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIHRvIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKGFyZ3MtPnJlZ3MtPnBjKTsKKwlpZiAodmFsID09IERJRV9UUkFQKSB7CisJCWlmICgha3Byb2JlX3J1bm5pbmcoKSkgeworCQkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKSB7CisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vdCBhIGtwcm9iZSB0cmFwICovCisJCQkJcmV0ID0gTk9USUZZX0RPTkU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9ISVRfU1MpIHx8CisJCQkgICAgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikpIHsKKwkJCQlpZiAocG9zdF9rcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkKKwkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCWlmIChrcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkgeworCQkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCQl9IGVsc2UgeworCQkJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCQkJCWlmIChwLT5icmVha19oYW5kbGVyICYmCisJCQkJCSAgICBwLT5icmVha19oYW5kbGVyKHAsIGFyZ3MtPnJlZ3MpKQorCQkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IF9fa3Byb2JlcyBzZXRqbXBfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGpwcm9iZSAqanAgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGpwcm9iZSwga3ApOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWtjYi0+anByb2JlX3NhdmVkX3JlZ3MgPSAqcmVnczsKKwlrY2ItPmpwcm9iZV9zYXZlZF9yMTUgPSByZWdzLT5yZWdzWzE1XTsKKwlhZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCisJLyoKKwkgKiBUQkQ6IEFzIExpbnVzIHBvaW50ZWQgb3V0LCBnY2MgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZWUKKwkgKiBvd25zIHRoZSBhcmd1bWVudCBzcGFjZSBhbmQgY291bGQgb3ZlcndyaXRlIGl0LCBlLmcuCisJICogdGFpbGNhbGwgb3B0aW1pemF0aW9uLiBTbywgdG8gYmUgYWJzb2x1dGVseSBzYWZlCisJICogd2UgYWxzbyBzYXZlIGFuZCByZXN0b3JlIGVub3VnaCBzdGFjayBieXRlcyB0byBjb3ZlcgorCSAqIHRoZSBhcmd1bWVudCBhcmVhLgorCSAqLworCW1lbWNweShrY2ItPmpwcm9iZXNfc3RhY2ssIChrcHJvYmVfb3Bjb2RlX3QgKikgYWRkciwKKwkgICAgICAgTUlOX1NUQUNLX1NJWkUoYWRkcikpOworCisJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KTsKKworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJuKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlICgidHJhcGEgIzB4M2Fcblx0IiAianByb2JlX3JldHVybl9lbmQ6XG5cdCIgIm5vcFxuXHQiKTsKK30KKworaW50IF9fa3Byb2JlcyBsb25nam1wX2JyZWFrX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBzdGFja19hZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCXU4ICphZGRyID0gKHU4ICopcmVncy0+cGM7CisKKwlpZiAoKGFkZHIgPj0gKHU4ICopanByb2JlX3JldHVybikgJiYKKwkgICAgKGFkZHIgPD0gKHU4ICopanByb2JlX3JldHVybl9lbmQpKSB7CisJCSpyZWdzID0ga2NiLT5qcHJvYmVfc2F2ZWRfcmVnczsKKworCQltZW1jcHkoKGtwcm9iZV9vcGNvZGVfdCAqKXN0YWNrX2FkZHIsIGtjYi0+anByb2Jlc19zdGFjaywKKwkJICAgICAgIE1JTl9TVEFDS19TSVpFKHN0YWNrX2FkZHIpKTsKKworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtwcm9iZSB0cmFtcG9saW5lX3AgPSB7CisJLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopJmtyZXRwcm9iZV90cmFtcG9saW5lLAorCS5wcmVfaGFuZGxlciA9IHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcgorfTsKKworaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJc2F2ZWRfY3VycmVudF9vcGNvZGUuYWRkciA9IDB4MDsKKwlzYXZlZF9jdXJyZW50X29wY29kZS5vcGNvZGUgPSAweDA7CisKKwlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCisJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCAxMjliMmNmLi5jMWVhNDFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTEyNSw5ICsxMjYsNiBAQAogCW12X3NldChpbnNiKTsJbXZfc2V0KGluc3cpOwltdl9zZXQoaW5zbCk7CiAJbXZfc2V0KG91dHNiKTsJbXZfc2V0KG91dHN3KTsJbXZfc2V0KG91dHNsKTsKIAotCW12X3NldChyZWFkYik7CW12X3NldChyZWFkdyk7CW12X3NldChyZWFkbCk7Ci0JbXZfc2V0KHdyaXRlYik7CW12X3NldCh3cml0ZXcpOwltdl9zZXQod3JpdGVsKTsKLQogCW12X3NldChpb3BvcnRfbWFwKTsKIAltdl9zZXQoaW9wb3J0X3VubWFwKTsKIAltdl9zZXQoaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAzMzI2YTQ1Li5iOTY1ZjAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC03LDcgKzcsMTEgQEAKICAqCiAgKiAgU3VwZXJIIHZlcnNpb246ICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYSAmIEtheiBLb2ppbWEKICAqCQkgICAgIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMgSW5jLiBzdXBwb3J0IFNINEEgVUJDCi0gKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3ICBQYXVsIE11bmR0CisgKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjYsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWJjLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogCiBzdGF0aWMgaW50IGhsdF9jb3VudGVyOwogaW50IHViY191c2VyY250ID0gMDsKQEAgLTExMSwxNSArMTE2LDIxIEBACiB7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50aygiUGlkIDogJWQsIENvbW06ICUyMHNcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tKTsKKwlwcmludGsoIkNQVSA6ICVkICAgICVzICAoJXMgJS4qcylcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcHJpbnRfdGFpbnRlZCgpLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkgICAgICAgKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAorCSAgICAgICBpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CisKIAlwcmludF9zeW1ib2woIlBDIGlzIGF0ICVzXG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwlwcmludF9zeW1ib2woIlBSIGlzIGF0ICVzXG4iLCByZWdzLT5wcik7CisKIAlwcmludGsoIlBDICA6ICUwOGx4IFNQICA6ICUwOGx4IFNSICA6ICUwOGx4ICIsCiAJICAgICAgIHJlZ3MtPnBjLCByZWdzLT5yZWdzWzE1XSwgcmVncy0+c3IpOwogI2lmZGVmIENPTkZJR19NTVUKLQlwcmludGsoIlRFQSA6ICUwOHggICAgIiwgY3RybF9pbmwoTU1VX1RFQSkpOworCXByaW50aygiVEVBIDogJTA4eFxuIiwgY3RybF9pbmwoTU1VX1RFQSkpOwogI2Vsc2UKLQlwcmludGsoIiAgICAgICAgICAgICAgICAgICIpOworCXByaW50aygiXG4iKTsKICNlbmRpZgotCXByaW50aygiJXNcbiIsIHByaW50X3RhaW50ZWQoKSk7CiAKIAlwcmludGsoIlIwICA6ICUwOGx4IFIxICA6ICUwOGx4IFIyICA6ICUwOGx4IFIzICA6ICUwOGx4XG4iLAogCSAgICAgICByZWdzLT5yZWdzWzBdLHJlZ3MtPnJlZ3NbMV0sCkBAIC0xNjIsNiArMTczLDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC0xNzEsOCArMTgzLDEyIEBACiAJcmVncy5zciA9ICgxIDw8IDMwKTsKIAogCS8qIE9rLCBjcmVhdGUgdGhlIG5ldyBwcm9jZXNzLi4gKi8KLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJcGlkID0gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCisJCSAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKworCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfa3RocmVhZF9jcmVhdGUsICJwaWQgJWQgZm4gJXAiLCBwaWQsIGZuKTsKKworCXJldHVybiBwaWQ7CiB9CiAKIC8qCkBAIC0yMTAsMTAgKzIyNiwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAogCWZwdmFsaWQgPSAhIXRza191c2VkX21hdGgodHNrKTsKLQlpZiAoZnB2YWxpZCkgewotCQl1bmxhenlfZnB1KHRzaywgcmVncyk7Ci0JCW1lbWNweShmcHUsICZ0c2stPnRocmVhZC5mcHUuaGFyZCwgc2l6ZW9mKCpmcHUpKTsKLQl9CisJaWYgKGZwdmFsaWQpCisJCWZwdmFsaWQgPSAhZnByZWdzX2dldCh0c2ssIE5VTEwsIDAsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QpLAorCQkJCSAgICAgIGZwdSwgTlVMTCk7CiAjZW5kaWYKIAogCXJldHVybiBmcHZhbGlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGI5ZGJkMmQuLmI3YWEwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zOTUsNiArMzk2LDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbMl0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC00MDMsOCArNDA1LDEzIEBACiAJcmVncy5wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOwogCXJlZ3Muc3IgPSAoMSA8PCAzMCk7CiAKLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLworCXBpZCA9IGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELCAwLAorCQkgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisKKwl0cmFjZV9tYXJrKGtlcm5lbF9hcmNoX2t0aHJlYWRfY3JlYXRlLCAicGlkICVkIGZuICVwIiwgcGlkLCBmbik7CisKKwlyZXR1cm4gcGlkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAwMzVjYjMwLi4yOWNhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMSwxMiArMSwxNCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCisgKiBTdXBlckggcHJvY2VzcyB0cmFjaW5nCiAgKgotICogT3JpZ2luYWwgeDg2IGltcGxlbWVudGF0aW9uOgotICoJQnkgUm9zcyBCaXJvIDEvMjMvOTIKLSAqCWVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CiAgKgotICogU3VwZXJIIHZlcnNpb246ICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCi0gKiBBdWRpdCBzdXBwb3J0OiBZdWljaGkgTmFrYW11cmEgPHluYWthbUBoaXRhY2hpc29mdC5qcD4KKyAqIEF1ZGl0IHN1cHBvcnQgYnkgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjIsMTYgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLS8qCi0gKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCi0gKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCi0gKi8KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgd2lsbCBnZXQgYSB3b3JkIG9mZiBvZiB0aGUgcHJvY2VzcyBrZXJuZWwgc3RhY2suCkBAIC02MSwxNiArNjIsMTIgQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQlsb25nIHBjOwotCi0JcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgKGxvbmcpJnJlZ3MtPnBjKTsKLQogCS8qIE5leHQgc2NoZWR1bGluZyB3aWxsIHNldCB1cCBVQkMgKi8KIAlpZiAoY2hpbGQtPnRocmVhZC51YmNfcGMgPT0gMCkKIAkJdWJjX3VzZXJjbnQgKz0gMTsKIAotCWNoaWxkLT50aHJlYWQudWJjX3BjID0gcGM7CisJY2hpbGQtPnRocmVhZC51YmNfcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIH0KQEAgLTEwMiw5ICs5OSwyMTMgQEAKIAl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY2hpbGQpOwogfQogCitzdGF0aWMgaW50IGdlbnJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgcmVncy0+cmVncywKKwkJCQkgIDAsIDE2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoIXJldCkKKwkJLyogUEMsIFBSLCBTUiwgR0JSLCBNQUNILCBNQUNMLCBUUkEgKi8KKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmcmVncy0+cGMsCisJCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgLTEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZW5yZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFyZ2V0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSByZWdzLT5yZWdzLAorCQkJCSAwLCAxNiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKCFyZXQgJiYgY291bnQgPiAwKQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSAmcmVncy0+cGMsCisJCQkJCSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X3JlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQoraW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworfQorCitzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKKworCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKK30KKworc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQoreworCXJldHVybiB0c2tfdXNlZF9tYXRoKHRhcmdldCkgPyByZWdzZXQtPm4gOiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCitzdGF0aWMgaW50IGRzcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9IHRhc2tfcHRfZHNwcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLAorCQkJCSAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyksIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHNwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0gdGFza19wdF9kc3ByZWdzKHRhcmdldCk7CisJaW50IHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgcmVncywKKwkJCQkgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRzcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCisJcmV0dXJuIHJlZ3MtPnNyICYgU1JfRFNQID8gcmVnc2V0LT5uIDogMDsKK30KKyNlbmRpZgorCisvKgorICogVGhlc2UgYXJlIG91ciBuYXRpdmUgcmVnc2V0IGZsYXZvdXJzLgorICovCitlbnVtIHNoX3JlZ3NldCB7CisJUkVHU0VUX0dFTkVSQUwsCisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCVJFR1NFVF9GUFUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJUkVHU0VUX0RTUCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBzaF9yZWdzZXRzW10gPSB7CisJLyoKKwkgKiBGb3JtYXQgaXM6CisJICoJUjAgLS0+IFIxNQorCSAqCVBDLCBQUiwgU1IsIEdCUiwgTUFDSCwgTUFDTCwgVFJBCisJICovCisJW1JFR1NFVF9HRU5FUkFMXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlCT0gTlRfUFJTVEFUVVMsCisJCS5uCQk9IEVMRl9OR1JFRywKKwkJLnNpemUJCT0gc2l6ZW9mKGxvbmcpLAorCQkuYWxpZ24JCT0gc2l6ZW9mKGxvbmcpLAorCQkuZ2V0CQk9IGdlbnJlZ3NfZ2V0LAorCQkuc2V0CQk9IGdlbnJlZ3Nfc2V0LAorCX0sCisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisJW1JFR1NFVF9GUFVdID0geworCQkuY29yZV9ub3RlX3R5cGUJPSBOVF9QUkZQUkVHLAorCQkubgkJPSBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCkgLyBzaXplb2YobG9uZyksCisJCS5zaXplCQk9IHNpemVvZihsb25nKSwKKwkJLmFsaWduCQk9IHNpemVvZihsb25nKSwKKwkJLmdldAkJPSBmcHJlZ3NfZ2V0LAorCQkuc2V0CQk9IGZwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZnByZWdzX2FjdGl2ZSwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJW1JFR1NFVF9EU1BdID0geworCQkubgkJPSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC8gc2l6ZW9mKGxvbmcpLAorCQkuc2l6ZQkJPSBzaXplb2YobG9uZyksCisJCS5hbGlnbgkJPSBzaXplb2YobG9uZyksCisJCS5nZXQJCT0gZHNwcmVnc19nZXQsCisJCS5zZXQJCT0gZHNwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZHNwcmVnc19hY3RpdmUsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfc2hfbmF0aXZlX3ZpZXcgPSB7CisJLm5hbWUJCT0gInNoIiwKKwkuZV9tYWNoaW5lCT0gRU1fU0gsCisJLnJlZ3NldHMJPSBzaF9yZWdzZXRzLAorCS5uCQk9IEFSUkFZX1NJWkUoc2hfcmVnc2V0cyksCit9OworCitjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdGFza191c2VyX3JlZ3NldF92aWV3KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gJnVzZXJfc2hfbmF0aXZlX3ZpZXc7Cit9CisKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgdXNlciAqIGR1bW15ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqZGF0YXAgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKQEAgLTEzMyw3ICszMzQsNyBAQAogCQkJdG1wID0gISF0c2tfdXNlZF9tYXRoKGNoaWxkKTsKIAkJZWxzZQogCQkJdG1wID0gMDsKLQkJcmV0ID0gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJcmV0ID0gcHV0X3VzZXIodG1wLCBkYXRhcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTU3LDM0ICszNTgsMzkgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX0dFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0dFTkVSQUwsCisJCQkJCSAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF9mcm9tX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICAgIFJFR1NFVF9HRU5FUkFMLAorCQkJCQkgICAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCWNhc2UgUFRSQUNFX0dFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICBSRUdTRVRfRlBVLAorCQkJCQkgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0ZQVSwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0hfRFNQCi0JY2FzZSBQVFJBQ0VfR0VURFNQUkVHUzogewotCQl1bnNpZ25lZCBsb25nIGRwOwotCi0JCXJldCA9IC1FSU87Ci0JCWRwID0gKCh1bnNpZ25lZCBsb25nKSBjaGlsZCkgKyBUSFJFQURfU0laRSAtCi0JCQkgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKTsKLQkJaWYgKCooKGludCAqKSAoZHAgLSA0KSkgPT0gU1JfRkQpIHsKLQkJCWNvcHlfdG9fdXNlcigodm9pZCAqKWFkZHIsICh2b2lkICopIGRwLAotCQkJCXNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpOwotCQkJcmV0ID0gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFBUUkFDRV9TRVREU1BSRUdTOiB7Ci0JCXVuc2lnbmVkIGxvbmcgZHA7Ci0KLQkJcmV0ID0gLUVJTzsKLQkJZHAgPSAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkKSArIFRIUkVBRF9TSVpFIC0KLQkJCSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpOwotCQlpZiAoKigoaW50ICopIChkcCAtIDQpKSA9PSBTUl9GRCkgewotCQkJY29weV9mcm9tX3VzZXIoKHZvaWQgKikgZHAsICh2b2lkICopYWRkciwKLQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCWNhc2UgUFRSQUNFX0dFVERTUFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSwKKwkJCQkJICAgKHZvaWQgX191c2VyICopZGF0YSk7CisJY2FzZSBQVFJBQ0VfU0VURFNQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLAorCQkJCQkgICAgIChjb25zdCB2b2lkIF9fdXNlciAqKWRhdGEpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKIAljYXNlIFBUUkFDRV9HRVRGRFBJQzogewpAQCAtMjAyLDcgKzQwOCw3IEBACiAJCX0KIAogCQlyZXQgPSAwOwotCQlpZiAocHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKSkgeworCQlpZiAocHV0X3VzZXIodG1wLCBkYXRhcCkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwppbmRleCA5YzY0MjQ4Li5lMTViMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAvKiBUaGlzIG1hc2sgZGVmaW5lcyB0aGUgYml0cyBvZiB0aGUgU1Igd2hpY2ggdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGRlODMyMDUuLmU3MTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNDQsNiArMTQ3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZnJlZV9tZW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGNyYXNoX3NpemUsIGNyYXNoX2Jhc2U7CisJdm9pZCAqdnA7CiAJaW50IHJldDsKIAogCWZyZWVfbWVtID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbWF4X2xvd19wZm4gLSBtaW5fbG93X3BmbikgPDwgUEFHRV9TSElGVDsKQEAgLTE1MiwxMiArMTU2LDE0IEBACiAJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOwogCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplKSB7CiAJCWlmIChjcmFzaF9iYXNlIDw9IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKLQkJCQkJInlvdSBoYXZlIHRvIHNwZWNpZnkgYSBiYXNlIGFkZHJlc3NcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKHJlc2VydmVfYm9vdG1lbShjcmFzaF9iYXNlLCBjcmFzaF9zaXplLAorCQkJdnAgPSBhbGxvY19ib290bWVtX25vcGFuaWMoY3Jhc2hfc2l6ZSk7IAorCQkJaWYgKCF2cCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIGFsbG9jYXRpb24gIgorCQkJCSAgICAgICAiZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQljcmFzaF9iYXNlID0gX19wYSh2cCk7CisJCX0gZWxzZSBpZiAocmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUsCiAJCQkJCUJPT1RNRU1fRVhDTFVTSVZFKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKIAkJCQkJIm1lbW9yeSBpcyBpbiB1c2VcbiIpOwpAQCAtMTc5LDYgKzE4NSwyNCBAQAoge30KICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWQordm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCisJaWYgKElTX0VSUihjbGspKQorCQlwYW5pYygiTmVlZCBhIHNhbmUgQ1BVIGNsb2NrIGRlZmluaXRpb24hIik7CisKKwlsb29wc19wZXJfamlmZnkgPSAoY2xrX2dldF9yYXRlKGNsaykgPj4gMSkgLyBIWjsKKworCXByaW50ayhLRVJOX0lORk8gIkNhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLi4uICIKKwkJCSAiJWx1LiUwMmx1IEJvZ29NSVBTIFBSRVNFVCAobHBqPSVsdSlcbiIsCisJCQkgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCQkJIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSAlIDEwMCwKKwkJCSBsb29wc19wZXJfamlmZnkpOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IF9fYWRkX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKQEAgLTIzMiwxNSArMjU2LDE3IEBACiAJICogY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZSBib290bWVtIGFsbG9jYXRvciB3aXRoCiAJICogYW4gaW52YWxpZCBSQU0gYXJlYS4KIAkgKi8KLQlyZXNlcnZlX2Jvb3RtZW0oX19NRU1PUllfU1RBUlQrUEFHRV9TSVpFLAotCQkoUEZOX1BIWVMoZnJlZV9wZm4pK2Jvb3RtYXBfc2l6ZStQQUdFX1NJWkUtMSktX19NRU1PUllfU1RBUlQsCi0JCUJPT1RNRU1fREVGQVVMVCk7CisJcmVzZXJ2ZV9ib290bWVtKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQkoUEZOX1BIWVMoZnJlZV9wZm4pICsgYm9vdG1hcF9zaXplICsgUEFHRV9TSVpFIC0gMSkgLQorCQkJKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpLAorCQkJQk9PVE1FTV9ERUZBVUxUKTsKIAogCS8qCiAJICogcmVzZXJ2ZSBwaHlzaWNhbCBwYWdlIDAgLSBpdCdzIGEgc3BlY2lhbCBCSU9TIHBhZ2Ugb24gbWFueSBib3hlcywKIAkgKiBlbmFibGluZyBjbGVhbiByZWJvb3RzLCBTTVAgb3BlcmF0aW9uLCBsYXB0b3AgZnVuY3Rpb25zLgogCSAqLwotCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgUEFHRV9TSVpFLCBCT09UTUVNX0RFRkFVTFQpOworCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQlCT09UTUVNX0RFRkFVTFQpOwogCiAJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCk7CiAKQEAgLTI0OCwxNyArMjc0LDE4IEBACiAJUk9PVF9ERVYgPSBSb290X1JBTTA7CiAKIAlpZiAoTE9BREVSX1RZUEUgJiYgSU5JVFJEX1NUQVJUKSB7Ci0JCWlmIChJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSA8PSAobWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCkpIHsKLQkJCXJlc2VydmVfYm9vdG1lbShJTklUUkRfU1RBUlQgKyBfX01FTU9SWV9TVEFSVCwKLQkJCQkJSU5JVFJEX1NJWkUsIEJPT1RNRU1fREVGQVVMVCk7Ci0JCQlpbml0cmRfc3RhcnQgPSBJTklUUkRfU1RBUlQgKyBQQUdFX09GRlNFVCArCi0JCQkJCV9fTUVNT1JZX1NUQVJUOworCQl1bnNpZ25lZCBsb25nIGluaXRyZF9zdGFydF9waHlzID0gSU5JVFJEX1NUQVJUICsgX19NRU1PUllfU1RBUlQ7CisKKwkJaWYgKGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUgPD0gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oaW5pdHJkX3N0YXJ0X3BoeXMsIElOSVRSRF9TSVpFLAorCQkJCQlCT09UTUVNX0RFRkFVTFQpOworCQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShpbml0cmRfc3RhcnRfcGh5cyk7CiAJCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKLQkJCSAgICAiKDB4JTA4bHggPiAweCUwOGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUsCi0JCQkJICAgIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOworCQkJICAgICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkJICAgICAgIGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAkJCWluaXRyZF9zdGFydCA9IDA7CiAJCX0KIAl9CkBAIC01MzAsNiArNTU3LDggQEAKIHN0YXRpYyBpbnQgX19pbml0IHNoX2RlYnVnZnNfaW5pdCh2b2lkKQogewogCXNoX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2giLCBOVUxMKTsKKwlpZiAoIXNoX2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKElTX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpKQogCQlyZXR1cm4gUFRSX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCA2ZTFiMWMyLi5kOTE3YjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIAogZXh0ZXJuIGludCBkdW1wX2ZwdShzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbm9faXJxX3R5cGU7CkBAIC0xMzMsNiArMTM0LDkgQEAKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9wYWdlKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorRVhQT1JUX1NZTUJPTChtY291bnQpOworI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwogI2lmZGVmIENPTkZJR19JUFY2CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDUxNjg5ZDIuLjY5ZDA5YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQpAQCAtMjE1LDYgKzIxNiw5IEBACiAJc2lnc2V0X3Qgc2V0OwogCWludCByMDsKIAorICAgICAgICAvKiBBbHdheXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGxzIHJldHVybiAtRUlOVFIgKi8KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjQ3LDkgKzI1MSwxMSBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKIAlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopcmVncy0+cmVnc1sxNV07CiAJc2lnc2V0X3Qgc2V0OwotCXN0YWNrX3Qgc3Q7CiAJaW50IHIwOwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTI2NSwxMSArMjcxLDkgQEAKIAlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZyMCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigmc3QsICZmcmFtZS0+dWMudWNfc3RhY2ssIHNpemVvZihzdCkpKQorCWlmIChkb19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLAorCQkJICAgcmVncy0+cmVnc1sxNV0pID09IC1FRkFVTFQpCiAJCWdvdG8gYmFkZnJhbWU7Ci0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlkb19zaWdhbHRzdGFjaygoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKikmc3QsIE5VTEwsICh1bnNpZ25lZCBsb25nKWZyYW1lKTsKIAogCXJldHVybiByMDsKIApAQCAtNDI5LDcgKzQzMyw3IEBACiAKIAkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsCiAJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5yZWdzWzE1XSksCkBAIC00OTIsMzcgKzQ5Niw0MyBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhbmRsZV9zeXNjYWxsX3Jlc3RhcnQodW5zaWduZWQgbG9uZyBzYXZlX3IwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKnNhKQoreworCS8qIElmIHdlJ3JlIG5vdCBmcm9tIGEgc3lzY2FsbCwgYmFpbCBvdXQgKi8KKwlpZiAocmVncy0+dHJhIDwgMCkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnQuLiAqLworCXN3aXRjaCAocmVncy0+cmVnc1swXSkgeworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQlub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OgorCQkJcmVncy0+cmVnc1swXSA9IC1FSU5UUjsKKwkJCXJlZ3MtPnNyIHw9IDE7CisJCQlicmVhazsKKworCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJCWlmICghKHNhLT5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKQorCQkJCWdvdG8gbm9fc3lzdGVtX2NhbGxfcmVzdGFydDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlicmVhazsKKwl9Cit9CisKIC8qCiAgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCiAgKi8KLQogc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2F2ZV9yMCkKIHsKIAlpbnQgcmV0OwogCi0JLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAocmVncy0+dHJhID49IDApIHsKLQkJLyogSWYgc28sIGNoZWNrIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLiAqLwotCQlzd2l0Y2ggKHJlZ3MtPnJlZ3NbMF0pIHsKLQkJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgotCQkJbm9fc3lzdGVtX2NhbGxfcmVzdGFydDoKLQkJCQlyZWdzLT5yZWdzWzBdID0gLUVJTlRSOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkKLQkJCQkJZ290byBub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OwotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgotCQkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoCi0JCQkJCQljdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKLQkJCQlicmVhazsKLQkJfQotCX0KIAogCS8qIFNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKQEAgLTU4MCw2ICs1OTAsOSBAQAogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgeworCQlpZiAocmVncy0+c3IgJiAxKQorCQkJaGFuZGxlX3N5c2NhbGxfcmVzdGFydChzYXZlX3IwLCByZWdzLCAma2Euc2EpOworCiAJCS8qIFdoZWUhICBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICAqLwogCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LAogCQkJCSAgcmVncywgc2F2ZV9yMCkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAxZDYyZGZlLi5jZTNlODUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDMsNiArNDMsMTAgQEAKIAogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAorc3RhdGljIHZvaWQKK2hhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHNpZ2luZm9fdCAqaW5mbywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKwogLyoKICAqIE5vdGUgdGhhdCAnaW5pdCcgaXMgYSBzcGVjaWFsIHByb2Nlc3M6IGl0IGRvZXNuJ3QgZ2V0IHNpZ25hbHMgaXQgZG9lc24ndAogICogd2FudCB0byBoYW5kbGUuIFRodXMgeW91IGNhbm5vdCBraWxsIGluaXQgZXZlbiB3aXRoIGEgU0lHS0lMTCBldmVuIGJ5CkBAIC0zNzEsNiArMzc1LDkgQEAKIAlzaWdzZXRfdCBzZXQ7CiAJbG9uZyBsb25nIHJldDsKIAorCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGJhZGZyYW1lOwogCkBAIC00MDgsNiArNDE1LDkgQEAKIAlzdGFja190IF9fdXNlciBzdDsKIAlsb25nIGxvbmcgcmV0OwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTUzNSw3ICs1NDUsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC01NTAsMTAgKzU2MCwxMCBAQAogCQkgKi8KIAkJREVSRUZfUkVHX1BSID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlIHwgMHgwMTsKIAkJREVSRUZfUkVHX1BSID0gKERFUkVGX1JFR19QUiAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CisJCQkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKIAogCQlpZiAoX19jb3B5X3RvX3VzZXIoZnJhbWUtPnJldGNvZGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpLCAxNikgIT0gMCkKKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpKSwgMTYpICE9IDApCiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAogCQkvKiBDb2hlcmUgdGhlIHRyYW1wb2xpbmUgd2l0aCB0aGUgSS1jYWNoZS4gKi8KQEAgLTU2Niw3ICs1NzYsNyBAQAogCSAqLwogCXJlZ3MtPnJlZ3NbUkVHX1NQXSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAocmVncy0+cmVnc1tSRUdfU1BdICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOworCQkgKHJlZ3MtPnJlZ3NbUkVHX1NQXSB8IE5FRkZfTUFTSykgOiByZWdzLT5yZWdzW1JFR19TUF07CiAJcmVncy0+cmVnc1tSRUdfQVJHMV0gPSBzaWduYWw7IC8qIEFyZyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KIAogICAgICAgICAvKiBGSVhNRToKQEAgLTY1Miw3ICs2NjIsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC02NjgsMTAgKzY3OCwxMCBAQAogCiAJCURFUkVGX1JFR19QUiA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+cmV0Y29kZSB8IDB4MDE7CiAJCURFUkVGX1JFR19QUiA9IChERVJFRl9SRUdfUFIgJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOworCQkJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CiAKIAkJaWYgKF9fY29weV90b191c2VyKGZyYW1lLT5yZXRjb2RlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSwgMTYpICE9IDApCisJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSksIDE2KSAhPSAwKQogCQkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKIAkJZmx1c2hfaWNhY2hlX3JhbmdlKERFUkVGX1JFR19QUi0xLCBERVJFRl9SRUdfUFItMSsxNSk7CkBAIC02ODMsNyArNjkzLDcgQEAKIAkgKi8KIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAJcmVncy0+cmVnc1tSRUdfU1BdID0gKHJlZ3MtPnJlZ3NbUkVHX1NQXSAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAocmVncy0+cmVnc1tSRUdfU1BdIHwgTkVGRl9NQVNLKSA6IHJlZ3MtPnJlZ3NbUkVHX1NQXTsKKwkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOwogCXJlZ3MtPnJlZ3NbUkVHX0FSRzFdID0gc2lnbmFsOyAvKiBBcmcgZm9yIHNpZ25hbCBoYW5kbGVyICovCiAJcmVncy0+cmVnc1tSRUdfQVJHMl0gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPmluZm87CiAJcmVncy0+cmVnc1tSRUdfQVJHM10gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPnVjLnVjX21jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCAwMDE3NzhmLi41MDhkZmIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTTVAgc3VwcG9ydCBmb3IgdGhlIFN1cGVySCBwcm9jZXNzb3JzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOCBQYXVsIE11bmR0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3IEFraW8gSWRlaGFyYQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC04Niw5ICs4NiwxMiBAQAogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogRW5hYmxlIGxvY2FsIHRpbWVycyAqLworCWxvY2FsX3RpbWVyX3NldHVwKGNwdSk7CiAJY2FsaWJyYXRlX2RlbGF5KCk7CiAKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CiAKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwpAQCAtMTg2LDYgKzE4OSw0MiBAQAogCXBsYXRfc2VuZF9pcGkoY3B1LCBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRSk7CiB9CiAKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQorCQlwbGF0X3NlbmRfaXBpKGNwdSwgU01QX01TR19USU1FUik7Cit9CisKK3N0YXRpYyB2b2lkIGlwaV90aW1lcih2b2lkKQoreworCWlycV9lbnRlcigpOworCWxvY2FsX3RpbWVyX2ludGVycnVwdCgpOworCWlycV9leGl0KCk7Cit9CisKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKQoreworCXN3aXRjaCAobXNnKSB7CisJY2FzZSBTTVBfTVNHX0ZVTkNUSU9OOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCQlicmVhazsKKwljYXNlIFNNUF9NU0dfUkVTQ0hFRFVMRToKKwkJYnJlYWs7CisJY2FzZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRToKKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJCWJyZWFrOworCWNhc2UgU01QX01TR19USU1FUjoKKwkJaXBpX3RpbWVyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNUCAlZDogJXMoKTogdW5rbm93biBJUEkgJWRcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBtc2cpOworCQlicmVhazsKKwl9Cit9CisKIC8qIE5vdCByZWFsbHkgU01QIHN0dWZmIC4uLiAqLwogaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCA1NGQxZjYxLi4xYTJhNWViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFN0YWNrIHRyYWNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzYsMyArMzYsMjQgQEAKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopdHNrLT50aHJlYWQuc3A7CisKKwl3aGlsZSAoIWtzdGFja19lbmQoc3ApKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICpzcCsrOworCisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKKwkJCWlmIChpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCisJCQkJYnJlYWs7CisJCQlpZiAodHJhY2UtPnNraXAgPiAwKQorCQkJCXRyYWNlLT5za2lwLS07CisJCQllbHNlCisJCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOworCQkJaWYgKHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCQlicmVhazsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2VfdHNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKaW5kZXggOTA2MWI4Ni4uMzhmMDk4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKQEAgLTE3MCw2ICsxNzEsOCBAQAogCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJY2FsbCAmPSAweGZmZmY7CiAKKwl0cmFjZV9tYXJrKGtlcm5lbF9hcmNoX2lwY19jYWxsLCAiY2FsbCAldSBmaXJzdCAlZCIsIGNhbGwsIGZpcnN0KTsKKwogCWlmIChjYWxsIDw9IFNFTVRJTUVET1ApCiAJCXN3aXRjaCAoY2FsbCkgewogCQljYXNlIFNFTU9QOgpAQCAtMTg2LDcgKzE4OSw3IEBACiAJCQl1bmlvbiBzZW11biBmb3VydGg7CiAJCQlpZiAoIXB0cikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICogX191c2VyICopIHB0cikpCisJCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKIAkJCX0KQEAgLTI2MSwxMyArMjY0LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgKiBuYW1lKQorYXNtbGlua2FnZSBpbnQgc3lzX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCiB7CiAJaW50IGVycjsKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAtRUZBVUxUOwogCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyID0gY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mICgqbmFtZSkpOworCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZigqbmFtZSkpOwogCXVwX3JlYWQoJnV0c19zZW0pOwogCXJldHVybiBlcnI/LUVGQVVMVDowOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYyBiL2FyY2gvc2gva2VybmVsL3N5c19zaDMyLmMKaW5kZXggZjBhYTVjMy4uZGJiYTFlMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2gzMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KIAogLyoKICAqIHN5c19waXBlKCkgaXMgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc3RhbmRhcmQgZm9yIGNyZWF0aW5nCkBAIC0zNywxMyArMzgsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgKiBidWYsCithc21saW5rYWdlIHNzaXplX3Qgc3lzX3ByZWFkX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpCiB7CiAJcmV0dXJuIHN5c19wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBwb3MpOwogfQogCi1hc21saW5rYWdlIHNzaXplX3Qgc3lzX3B3cml0ZV93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciAqIGJ1ZiwKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHdyaXRlX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKQogewogCXJldHVybiBzeXNfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIHBvcyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggMDc1OGI1ZS4uMjNjYTcxMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiAgYXJjaC9zaC9rZXJuZWwvdGltZS5jCisgKiAgYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQogICogIENvcHlyaWdodCAoQykgMjAwMCAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duICA8bXJicm93bkBsaW51eC1zaC5vcmc+CiAgKgogICogIFNvbWUgY29kZSB0YWtlbiBmcm9tIGkzODYgdmVyc2lvbi4KQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIGZvciBydGNfbG9jayAqLworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KQEAgLTI1Myw2ICsyNTUsMTAgQEAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCQkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCisJbG9jYWxfdGltZXJfc2V0dXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBGaW5kIHRoZSB0aW1lciB0byB1c2UgYXMgdGhlIHN5c3RlbSB0aW1lciwgaXQgd2lsbCBiZQogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KQEAgLTI2MCw2ICsyNjYsNyBAQAogCXN5c190aW1lciA9IGdldF9zeXNfdGltZXIoKTsKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyAlcyBmb3Igc3lzdGVtIHRpbWVyXG4iLCBzeXNfdGltZXItPm5hbWUpOwogCisKIAlpZiAoc3lzX3RpbWVyLT5vcHMtPnJlYWQpCiAJCWNsb2Nrc291cmNlX3NoLnJlYWQgPSBzeXNfdGltZXItPm9wcy0+cmVhZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCmluZGV4IDc5MWVkYWIuLmJiYjJhZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogI2RlZmluZSBUTVVfVE9DUl9JTklUCTB4MDAKICNkZWZpbmUgVE1VMF9UQ1JfSU5JVAkweDAwMjAKQEAgLTUxLDE0ICs1Miw2IEBACiAjZGVmaW5lIFJUQ19SQ1IxX0NJRQkweDEwCS8qIENhcnJ5IEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgUlRDX1JDUjEJKHJ0Y19iYXNlICsgMHgzOCkKIAotLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCi0jZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKLSNkZWZpbmUgQ1BSQ19CQVNFCVBIWVNfUEVSSVBIRVJBTF9CTE9DSyArIENQUkNfQkxPQ0tfT0ZGCi0KLSNkZWZpbmUgRlJRQ1IJCShjcHJjX2Jhc2UrMHgwKQotI2RlZmluZSBXVENTUgkJKGNwcmNfYmFzZSsweDAwMTgpCi0jZGVmaW5lIFNUQkNSCQkoY3ByY19iYXNlKzB4MDAzMCkKLQogLyogVGltZSBNYW5hZ2VtZW50IFVuaXQgKi8KICNkZWZpbmUJVE1VX0JMT0NLX09GRgkweDAxMDIwMDAwCiAjZGVmaW5lIFRNVV9CQVNFCVBIWVNfUEVSSVBIRVJBTF9CTE9DSyArIFRNVV9CTE9DS19PRkYKQEAgLTI5MywxMDMgKzI4NiwxNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotCi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGludCBnZXRfY3B1X2h6KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKLQl1bnNpZ25lZCBsb25nIGN0Y192YWxfaW5pdCwgY3RjX3ZhbDsKLQotCS8qCi0JKiogUmVnYXJkbGVzcyB0aGUgdG9vbGNoYWluLCBmb3JjZSB0aGUgY29tcGlsZXIgdG8gdXNlIHRoZQotCSoqIGFyYml0cmFyeSByZWdpc3RlciByMyBhcyBhIGNsb2NrIHRpY2sgY291bnRlci4KLQkqKiBOT1RFOiByMyBtdXN0IGJlIGluIGFjY29yZGFuY2Ugd2l0aCBzaDY0X3J0Y19pbnRlcnJ1cHQoKQotCSovCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nICBfX3J0Y19pcnFfZmxhZyBfX2FzbV9fICgicjMiKTsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlkbyB7fSB3aGlsZSAoY3RybF9pbmIocnRjX2Jhc2UpICE9IDApOwotCWN0cmxfb3V0YihSVENfUkNSMV9DSUUsIFJUQ19SQ1IxKTsgLyogRW5hYmxlIGNhcnJ5IGludGVycnVwdCAqLwotCi0JLyoKLQkgKiByMyBpcyBhcmJpdHJhcnkuIENEQyBkb2VzIG5vdCBzdXBwb3J0ICI9eiIuCi0JICovCi0JY3RjX3ZhbF9pbml0ID0gMHhmZmZmZmZmZjsKLQljdGNfdmFsID0gY3RjX3ZhbF9pbml0OwotCi0JYXNtIHZvbGF0aWxlKCJnZXR0cgl0cjAsICUxXG5cdCIKLQkJICAgICAicHV0Y29uCSUwLCAiIF9fQ1RDICJcblx0IgotCQkgICAgICJhbmQJJTIsIHI2MywgJTJcblx0IgotCQkgICAgICJwdGEJJCs0LCB0cjBcblx0IgotCQkgICAgICJiZXEvbAklMiwgcjYzLCB0cjBcblx0IgotCQkgICAgICJwdGFicwklMSwgdHIwXG5cdCIKLQkJICAgICAiZ2V0Y29uCSIgX19DVEMgIiwgJTBcblx0IgotCQk6ICI9ciIoY3RjX3ZhbCksICI9ciIgKF9fZHVtbXkpLCAiPXIiIChfX3J0Y19pcnFfZmxhZykKLQkJOiAiMCIgKDApKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCS8qCi0JICogU0gtMzoKLQkgKiBDUFUgY2xvY2sgPSA0IHN0YWdlcyAqIGxvb3AKLQkgKiB0c3QgICAgcm0scm0gICAgICBpZiBpZCBleAotCSAqIGJ0L3MgICAxYiAgICAgICAgICAgIGlmIGlkIGV4Ci0JICogYWRkICAgICMxLHJkICAgICAgICAgICAgaWYgaWQgZXgKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmKSBwaXBlIGxpbmUgc3RvbGUKLQkgKiB0c3QgICAgcm0scm0gICAgICAgICAgICAgICAgICBpZiBpZCBleAotICAgICAgICAgKiAuLi4uCi0JICoKLQkgKgotCSAqIFNILTQ6Ci0JICogQ1BVIGNsb2NrID0gNiBzdGFnZXMgKiBsb29wCi0JICogSSBkb24ndCBrbm93IHdoeS4KLSAgICAgICAgICogLi4uLgotCSAqCi0JICogU0gtNToKLQkgKiBVc2UgQ1RDIHJlZ2lzdGVyIHRvIGNvdW50LiAgVGhpcyBhcHByb2FjaCByZXR1cm5zIHRoZSByaWdodCB2YWx1ZQotCSAqIGV2ZW4gaWYgdGhlIEktY2FjaGUgaXMgZGlzYWJsZWQgKGUuZy4gd2hpbHN0IGRlYnVnZ2luZy4pCi0JICoKLQkgKi8KLQotCWNvdW50ID0gY3RjX3ZhbF9pbml0IC0gY3RjX3ZhbDsgLyogQ1RDIGNvdW50cyBkb3duICovCi0KLQkvKgotCSAqIFRoaXMgcmVhbGx5IGlzIGNvdW50IGJ5IHRoZSBudW1iZXIgb2YgY2xvY2sgY3ljbGVzCi0gICAgICAgICAqIGJ5IHRoZSByYXRpbyBiZXR3ZWVuIGEgY29tcGxldGUgUjY0Q05UCi0gICAgICAgICAqIHdyYXAtYXJvdW5kICgxMjgpIGFuZCBDVUkgaW50ZXJydXB0IGJlaW5nIHJhaXNlZCAoNjQpLgotCSAqLwotCXJldHVybiBjb3VudCoyOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2g2NF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotCi0JY3RybF9vdXRiKDAsIFJUQ19SQ1IxKTsJLyogRGlzYWJsZSBDYXJyeSBJbnRlcnJ1cHRzICovCi0JcmVncy0+cmVnc1szXSA9IDE7CS8qIFVzaW5nIHIzICovCi0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIiwKIH07Ci1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnExICA9IHsKLQkuaGFuZGxlciA9IHNoNjRfcnRjX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJydGMiLAotfTsKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKIAl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCXVuc2lnbmVkIGxvbmcgZnJxY3IsIGlmYywgcGZjOwotCXN0YXRpYyBpbnQgaWZjX3RhYmxlW10gPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTYsIDI0IH07Ci0jZGVmaW5lIGJmY190YWJsZSBpZmNfdGFibGUJLyogU2FtZSAqLwotI2RlZmluZSBwZmNfdGFibGUgaWZjX3RhYmxlCS8qIFNhbWUgKi8KKwlzdHJ1Y3QgY2xrICpjbGs7CiAKIAl0bXVfYmFzZSA9IG9uY2hpcF9yZW1hcChUTVVfQkFTRSwgMTAyNCwgIlRNVSIpOwogCWlmICghdG11X2Jhc2UpIHsKQEAgLTQwMSw1MCArMzA4LDE5IEBACiAJCXBhbmljKCJVbmFibGUgdG8gcmVtYXAgUlRDXG4iKTsKIAl9CiAKLQljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOwotCWlmICghY3ByY19iYXNlKSB7Ci0JCXBhbmljKCJVbmFibGUgdG8gcmVtYXAgQ1BSQ1xuIik7Ci0JfQorCWNsayA9IGNsa19nZXQoTlVMTCwgImNwdV9jbGsiKTsKKwlzY2FsZWRfcmVjaXBfY3RjX3RpY2tzX3Blcl9qaWZmeSA9ICgoMVVMTCA8PCBDVENfSklGRllfU0NBTEVfU0hJRlQpIC8KKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKGNsa19nZXRfcmF0ZShjbGspIC8gSFopKTsKIAogCXJ0Y19zaF9nZXRfdGltZSgmeHRpbWUpOwogCiAJc2V0dXBfaXJxKFRJTUVSX0lSUSwgJmlycTApOwotCXNldHVwX2lycShSVENfSVJRLCAmaXJxMSk7CiAKLQkvKiBDaGVjayBob3cgZmFzdCBpdCBpcy4uICovCi0JY3B1X2Nsb2NrID0gZ2V0X2NwdV9oeigpOwotCi0JLyogTm90ZSBjYXJlZnVsIG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gbWFpbnRhaW4gcmVhc29uYWJsZSBwcmVjaXNpb24gYW5kIGF2b2lkIG92ZXJmbG93LiAqLwotCXNjYWxlZF9yZWNpcF9jdGNfdGlja3NfcGVyX2ppZmZ5ID0gKCgxVUxMIDw8IENUQ19KSUZGWV9TQ0FMRV9TSElGVCkgLyAodW5zaWduZWQgbG9uZyBsb25nKShjcHVfY2xvY2sgLyBIWikpOwotCi0JZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7Ci0KLQlwcmludGsoIkNQVSBjbG9jazogJWQuJTAyZE1IelxuIiwKLQkgICAgICAgKGNwdV9jbG9jayAvIDEwMDAwMDApLCAoY3B1X2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCXsKLQkJdW5zaWduZWQgc2hvcnQgYmZjOwotCQlmcnFjciA9IGN0cmxfaW5sKEZSUUNSKTsKLQkJaWZjICA9IGlmY190YWJsZVsoZnJxY3I+PiA2KSAmIDB4MDAwN107Ci0JCWJmYyAgPSBiZmNfdGFibGVbKGZycWNyPj4gMykgJiAweDAwMDddOwotCQlwZmMgID0gcGZjX3RhYmxlWyhmcnFjcj4+IDEyKSAmIDB4MDAwN107Ci0JCW1hc3Rlcl9jbG9jayA9IGNwdV9jbG9jayAqIGlmYzsKLQkJYnVzX2Nsb2NrID0gbWFzdGVyX2Nsb2NrL2JmYzsKLQl9Ci0KLQlwcmludGsoIkJ1cyBjbG9jazogJWQuJTAyZE1IelxuIiwKLQkgICAgICAgKGJ1c19jbG9jay8xMDAwMDAwKSwgKGJ1c19jbG9jayAlIDEwMDAwMDApLzEwMDAwKTsKLQltb2R1bGVfY2xvY2sgPSBtYXN0ZXJfY2xvY2svcGZjOwotCXByaW50aygiTW9kdWxlIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAobW9kdWxlX2Nsb2NrLzEwMDAwMDApLCAobW9kdWxlX2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCWludGVydmFsID0gKG1vZHVsZV9jbG9jay8oSFoqNCkpOworCWNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKKwlpbnRlcnZhbCA9IChjbGtfZ2V0X3JhdGUoY2xrKS8oSFoqNCkpOwogCiAJcHJpbnRrKCJJbnRlcnZhbCA9ICVsZFxuIiwgaW50ZXJ2YWwpOwogCi0JY3VycmVudF9jcHVfZGF0YS5jcHVfY2xvY2sgICAgPSBjcHVfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tYXN0ZXJfY2xvY2sgPSBtYXN0ZXJfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5idXNfY2xvY2sgICAgPSBidXNfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgPSBtb2R1bGVfY2xvY2s7Ci0KIAkvKiBTdGFydCBUTVUwICovCiAJY3RybF9vdXRiKFRNVV9UU1RSX09GRiwgVE1VX1RTVFIpOwogCWN0cmxfb3V0YihUTVVfVE9DUl9JTklULCBUTVVfVE9DUik7CkBAIC00NTQsMzYgKzMzMCw2IEBACiAJY3RybF9vdXRiKFRNVV9UU1RSX0lOSVQsIFRNVV9UU1RSKTsKIH0KIAotdm9pZCBlbnRlcl9kZWVwX3N0YW5kYnkodm9pZCkKLXsKLQkvKiBEaXNhYmxlIHdhdGNoZG9nIHRpbWVyICovCi0JY3RybF9vdXRsKDB4YTUwMDAwMDAsIFdUQ1NSKTsKLQkvKiBDb25maWd1cmUgZGVlcCBzdGFuZGJ5IG9uIHNsZWVwICovCi0JY3RybF9vdXRsKDB4MDMsIFNUQkNSKTsKLQotI2lmZGVmIENPTkZJR19TSF9BTFBIQU5VTUVSSUMKLQl7Ci0JCWV4dGVybiB2b2lkIG1hY2hfYWxwaGFudW0oaW50IHBvc2l0aW9uLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKLQkJZXh0ZXJuIHZvaWQgbWFjaF9hbHBoYW51bV9icmlnaHRuZXNzKGludCBzZXR0aW5nKTsKLQkJY2hhciBoYWx0ZWRbXSA9ICJIYWx0ZWQuICI7Ci0JCWludCBpOwotCQltYWNoX2FscGhhbnVtX2JyaWdodG5lc3MoNik7IC8qIGRpbW1lc3Qgc2V0dGluZyBhYm92ZSBvZmYgKi8KLQkJZm9yIChpPTA7IGk8ODsgaSsrKSB7Ci0JCQltYWNoX2FscGhhbnVtKGksIGhhbHRlZFtpXSk7Ci0JCX0KLQkJYXNtIF9fdm9sYXRpbGVfXyAoInN5bmNvIik7Ci0JfQotI2VuZGlmCi0KLQlhc20gX192b2xhdGlsZV9fICgic2xlZXAiKTsKLQlhc20gX192b2xhdGlsZV9fICgic3luY2kiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoIm5vcCIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJub3AiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JcGFuaWMoIlVuZXhwZWN0ZWQgd2FrZXVwIVxuIik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLyogUlRDIGJhc2UsIGZpbGxlZCBpbiBieSBydGNfaW5pdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlCmluZGV4IGJjZjI0NGYuLjBiN2Y4NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfU0hfTVRVMikJCSs9IHRpbWVyLW10dTIubwogb2JqLSQoQ09ORklHX1NIX0NNVCkJCSs9IHRpbWVyLWNtdC5vCiAKK29iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCkJKz0gdGltZXItYnJvYWRjYXN0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1icm9hZGNhc3QuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1icm9hZGNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMxNzYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWJyb2FkY2FzdC5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBEdW1teSBsb2NhbCB0aW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICoKKyAqIGNsb25lZCBmcm9tOgorICoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBsb2NhbF9jbG9ja2V2ZW50KTsKKworLyoKKyAqIFVzZWQgb24gU01QIGZvciBlaXRoZXIgdGhlIGxvY2FsIHRpbWVyIG9yIFNNUF9NU0dfVElNRVIKKyAqLwordm9pZCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGsgPSAmX19nZXRfY3B1X3Zhcihsb2NhbF9jbG9ja2V2ZW50KTsKKworCWNsay0+ZXZlbnRfaGFuZGxlcihjbGspOworfQorCitzdGF0aWMgdm9pZCBkdW1teV90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrKQoreworfQorCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsayA9ICZwZXJfY3B1KGxvY2FsX2Nsb2NrZXZlbnQsIGNwdSk7CisKKwljbGstPm5hbWUJCT0gImR1bW15X3RpbWVyIjsKKwljbGstPmZlYXR1cmVzCQk9IENMT0NLX0VWVF9GRUFUX0RVTU1ZOworCWNsay0+cmF0aW5nCQk9IDIwMDsKKwljbGstPm11bHQJCT0gMTsKKwljbGstPnNldF9tb2RlCQk9IGR1bW15X3RpbWVyX3NldF9tb2RlOworCWNsay0+YnJvYWRjYXN0CQk9IHNtcF90aW1lcl9icm9hZGNhc3Q7CisJY2xrLT5jcHVtYXNrCQk9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2xrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwppbmRleCBkMjBjOGMzLi5jMTI3MjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5c190aW1lcl9vcHMgY210X3RpbWVyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyX29wcyBjbXRfdGltZXJfb3BzID0gewogCS5pbml0CQk9IGNtdF90aW1lcl9pbml0LAogCS5zdGFydAkJPSBjbXRfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gY210X3RpbWVyX3N0b3AsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMWNhOWFkNC4uYWFhZjkwZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMjgsNDMgKzI4LDkwIEBACiAjZGVmaW5lIFRNVV9UT0NSX0lOSVQJMHgwMAogI2RlZmluZSBUTVVfVENSX0lOSVQJMHgwMDIwCiAKKyNkZWZpbmUgVE1VMAkJKDApCisjZGVmaW5lIFRNVTEJCSgxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9zdGFydChpbnQgdG11X251bSkKK3sKKwljdHJsX291dGIoY3RybF9pbmIoVE1VXzAxMl9UU1RSKSB8ICgweDE8PHRtdV9udW0pLCBUTVVfMDEyX1RTVFIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9zZXRfaXJxKGludCB0bXVfbnVtLCBpbnQgZW5hYmxlZCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtdV90Y3IgPSBUTVUwX1RDUiArICgweGMqdG11X251bSk7CisJY3RybF9vdXR3KCAoZW5hYmxlZCA/IGN0cmxfaW53KHRtdV90Y3IpIHwgKDE8PDUpIDogY3RybF9pbncodG11X3RjcikgJiB+KDE8PDUpKSwgdG11X3Rjcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X3N0b3AoaW50IHRtdV9udW0pCit7CisJY3RybF9vdXRiKGN0cmxfaW5iKFRNVV8wMTJfVFNUUikgJiB+KDB4MTw8dG11X251bSksIFRNVV8wMTJfVFNUUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X2NsZWFyX3N0YXR1cyhpbnQgdG11X251bSkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtdV90Y3IgPSBUTVUwX1RDUiArICgweGMqdG11X251bSk7CisJLyogQ2xlYXIgVU5GIGJpdCAqLworCWN0cmxfb3V0dyhjdHJsX2ludyh0bXVfdGNyKSAmIH4weDEwMCwgdG11X3Rjcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfdG11X3JlYWQoaW50IHRtdV9udW0pCit7CisgICAgICAgIHJldHVybiBjdHJsX2lubChUTVUwX1RDTlQrMHhDKnRtdV9udW0pOworfQorCiBzdGF0aWMgaW50IHRtdV90aW1lcl9zdGFydCh2b2lkKQogewotCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpIHwgMHgzLCBUTVVfMDEyX1RTVFIpOworCV90bXVfc3RhcnQoVE1VMCk7CisJX3RtdV9zdGFydChUTVUxKTsKKwlfdG11X3NldF9pcnEoVE1VMCwxKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdG11MF90aW1lcl9zZXRfaW50ZXJ2YWwodW5zaWduZWQgbG9uZyBpbnRlcnZhbCwgdW5zaWduZWQgaW50IHJlbG9hZCkKK3N0YXRpYyBpbnQgdG11X3RpbWVyX3N0b3Aodm9pZCkKIHsKLQljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTBfVENOVCk7CisJX3RtdV9zdG9wKFRNVTApOworCV90bXVfc3RvcChUTVUxKTsKKwlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFsc28gd2hlbiB0aGUgbW9kdWxlX2NsayBpcyBzY2FsZWQgdGhlIFRNVTEKKyAqIHdpbGwgc2hvdyB0aGUgc2FtZSBmcmVxdWVuY3kKKyAqLworc3RhdGljIGludCB0bXVzX2FyZV9zY2FsZWQ7CisKK3N0YXRpYyBjeWNsZV90IHRtdV90aW1lcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuICgoY3ljbGVfdCkofl90bXVfcmVhZChUTVUxKSkpPDx0bXVzX2FyZV9zY2FsZWQ7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG11X2xhdGVzdF9pbnRlcnZhbFszXTsKK3N0YXRpYyB2b2lkIHRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoaW50IHRtdV9udW0sIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsIHVuc2lnbmVkIGludCByZWxvYWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXVfdGNudCA9IFRNVTBfVENOVCArIHRtdV9udW0qMHhDOworCXVuc2lnbmVkIGxvbmcgdG11X3Rjb3IgPSBUTVUwX1RDT1IgKyB0bXVfbnVtKjB4QzsKKworCV90bXVfc3RvcCh0bXVfbnVtKTsKKworCWN0cmxfb3V0bChpbnRlcnZhbCwgdG11X3RjbnQpOworCXRtdV9sYXRlc3RfaW50ZXJ2YWxbdG11X251bV0gPSBpbnRlcnZhbDsKIAogCS8qCiAJICogVENOVCByZWxvYWRzIGZyb20gVENPUiBvbiB1bmRlcmZsb3csIGNsZWFyIGl0IGlmIHdlIGRvbid0CiAJICogaW50ZW5kIHRvIGF1dG8tcmVsb2FkCiAJICovCi0JaWYgKHJlbG9hZCkKLQkJY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDT1IpOwotCWVsc2UKLQkJY3RybF9vdXRsKDAsIFRNVTBfVENPUik7CisJY3RybF9vdXRsKCByZWxvYWQgPyBpbnRlcnZhbCA6IDAgLCB0bXVfdGNvcik7CiAKLQl0bXVfdGltZXJfc3RhcnQoKTsKLX0KLQotc3RhdGljIGludCB0bXVfdGltZXJfc3RvcCh2b2lkKQotewotCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpICYgfjB4MywgVE1VXzAxMl9UU1RSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGN5Y2xlX3QgdG11X3RpbWVyX3JlYWQodm9pZCkKLXsKLQlyZXR1cm4gfmN0cmxfaW5sKFRNVTFfVENOVCk7CisJX3RtdV9zdGFydCh0bXVfbnVtKTsKIH0KIAogc3RhdGljIGludCB0bXVfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCiAJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JdG11MF90aW1lcl9zZXRfaW50ZXJ2YWwoY3ljbGVzLCAxKTsKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsY3ljbGVzLCBldnQtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpOworCV90bXVfc2V0X2lycShUTVUwLDEpOwogCXJldHVybiAwOwogfQogCkBAIC05NiwxMiArMTQzLDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0bXVfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15KQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZ0bXUwX2Nsb2NrZXZlbnQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lcl9zdGF0dXM7Ci0KLQkvKiBDbGVhciBVTkYgYml0ICovCi0JdGltZXJfc3RhdHVzID0gY3RybF9pbncoVE1VMF9UQ1IpOwotCXRpbWVyX3N0YXR1cyAmPSB+MHgxMDA7Ci0JY3RybF9vdXR3KHRpbWVyX3N0YXR1cywgVE1VMF9UQ1IpOworCV90bXVfY2xlYXJfc3RhdHVzKFRNVTApOworCV90bXVfc2V0X2lycShUTVUwLHRtdTBfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwogCiAJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CiAKQEAgLTEwOSw1NiArMTUyLDczIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRtdTBfaXJxID0gewotCS5uYW1lCQk9ICJwZXJpb2RpYyB0aW1lciIsCisJLm5hbWUJCT0gInBlcmlvZGljL29uZXNob3QgdGltZXIiLAogCS5oYW5kbGVyCT0gdG11X3RpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKLXN0YXRpYyB2b2lkIHRtdTBfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgX19pbml0IHRtdV9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTggZGl2aXNvciA9IFRNVV9UQ1JfSU5JVCAmIDB4NzsKLQljdHJsX291dHcoVE1VX1RDUl9JTklULCBUTVUwX1RDUik7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CisJdTggZGl2aXNvciAgPSBUTVVfVENSX0lOSVQgJiAweDc7CisJaW50IHRtdV9udW0gPSBjbGstPm5hbWVbM10tJzAnOworCWN0cmxfb3V0dyhUTVVfVENSX0lOSVQsIFRNVTBfVENSKyh0bXVfbnVtKjB4QykpOworCWNsay0+cmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRtdTBfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCB0bXVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTggZGl2aXNvciA9IGN0cmxfaW53KFRNVTBfVENSKSAmIDB4NzsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKKwlpbnQgdG11X251bSA9IGNsay0+bmFtZVszXS0nMCc7CisJdW5zaWduZWQgbG9uZyBwcmV2X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUwX1RDUit0bXVfbnVtKjB4QykgJiAweDc7CisJY2xrLT5yYXRlICA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CisKKwlpZihwcmV2X3JhdGU9PWNsa19nZXRfcmF0ZShjbGspKQorCQlyZXR1cm47CisKKwlpZih0bXVfbnVtKQorCQlyZXR1cm47IC8qIE5vIG1vcmUgd29yayBvbiBUTVUxICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG11c19hcmVfc2NhbGVkID0gKHByZXZfcmF0ZSA+IGNsay0+cmF0ZSk7CisKKwlfdG11X3N0b3AoVE1VMCk7CisKKwl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhjbGstPnJhdGUsIE5TRUNfUEVSX1NFQywKKwkJCQl0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOworCXRtdTBfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQkJY2xvY2tldmVudF9kZWx0YTJucygtMSwgJnRtdTBfY2xvY2tldmVudCk7CisJdG11MF9jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOworCisJaWYgKHRtdXNfYXJlX3NjYWxlZCkKKwkJdG11X2xhdGVzdF9pbnRlcnZhbFtUTVUwXSA+Pj0gMTsKKwllbHNlCisJCXRtdV9sYXRlc3RfaW50ZXJ2YWxbVE1VMF0gPDw9IDE7CisKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsCisJCXRtdV9sYXRlc3RfaW50ZXJ2YWxbVE1VMF0sCisJCXRtdTBfY2xvY2tldmVudC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKworCV90bXVfc3RhcnQoVE1VMCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXUwX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gdG11MF9jbGtfaW5pdCwKLQkucmVjYWxjCQk9IHRtdTBfY2xrX3JlY2FsYywKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXVfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSB0bXVfY2xrX2luaXQsCisJLnJlY2FsYwkJPSB0bXVfY2xrX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRtdTBfY2xrID0gewogCS5uYW1lCQk9ICJ0bXUwX2NsayIsCi0JLm9wcwkJPSAmdG11MF9jbGtfb3BzLAotfTsKLQotc3RhdGljIHZvaWQgdG11MV9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTggZGl2aXNvciA9IFRNVV9UQ1JfSU5JVCAmIDB4NzsKLQljdHJsX291dHcoZGl2aXNvciwgVE1VMV9UQ1IpOwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOwotfQotCi1zdGF0aWMgdm9pZCB0bXUxX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUxX1RDUikgJiAweDc7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXUxX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gdG11MV9jbGtfaW5pdCwKLQkucmVjYWxjCQk9IHRtdTFfY2xrX3JlY2FsYywKKwkub3BzCQk9ICZ0bXVfY2xrX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRtdTFfY2xrID0gewogCS5uYW1lCQk9ICJ0bXUxX2NsayIsCi0JLm9wcwkJPSAmdG11MV9jbGtfb3BzLAorCS5vcHMJCT0gJnRtdV9jbGtfb3BzLAogfTsKIAogc3RhdGljIGludCB0bXVfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTg5LDExICsyNDksMTIgQEAKIAlmcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoJnRtdTBfY2xrKTsKIAlpbnRlcnZhbCA9IChmcmVxdWVuY3kgKyBIWiAvIDIpIC8gSFo7CiAKLQlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7Ci0JY3RybF9vdXRsKH4wLCBUTVUxX1RDTlQpOwotCWN0cmxfb3V0bCh+MCwgVE1VMV9UQ09SKTsKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsaW50ZXJ2YWwsIDEpOworCXRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoVE1VMSx+MCwxKTsKIAotCXRtdTBfdGltZXJfc2V0X2ludGVydmFsKGludGVydmFsLCAxKTsKKwlfdG11X3N0YXJ0KFRNVTEpOworCisJc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOwogCiAJdG11MF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZnJlcXVlbmN5LCBOU0VDX1BFUl9TRUMsCiAJCQkJICAgICAgdG11MF9jbG9ja2V2ZW50LnNoaWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDUxMWE5NDIuLmIzNTliMDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0tHREIKICNpbmNsdWRlIDxhc20va2dkYi5oPgpAQCAtMTkyLDYgKzE5Myw3IEBACiAJaW50IHJldCwgaW5kZXgsIGNvdW50OwogCXVuc2lnbmVkIGxvbmcgKnJtLCAqcm47CiAJdW5zaWduZWQgY2hhciAqc3JjLCAqZHN0OworCXVuc2lnbmVkIGNoYXIgX191c2VyICpzcmN1LCAqZHN0dTsKIAogCWluZGV4ID0gKGluc3RydWN0aW9uPj44KSYxNTsJLyogMHgwRjAwICovCiAJcm4gPSAmcmVncy0+cmVnc1tpbmRleF07CkBAIC0yMDYsMjggKzIwOCwyOCBAQAogCWNhc2UgMDogLyogbW92Lltid2xdIHRvL2Zyb20gbWVtb3J5IHZpYSByMCtybiAqLwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiA4KSB7CiAJCQkvKiBmcm9tIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gcmVncy0+cmVnc1swXTsKLQkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgcm47Ci0JCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCQlzcmN1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOworCQkJc3JjdSArPSByZWdzLT5yZWdzWzBdOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKilybjsKKwkJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IDA7CiAKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCWRzdCArPSA0LWNvdW50OwogI2VuZGlmCi0JCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIGNvdW50KSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCiAJCQlzaWduX2V4dGVuZChjb3VudCwgZHN0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIHRvIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSBybTsKKwkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyICopcm07CiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAqcm47Ci0JCQlkc3QgKz0gcmVncy0+cmVnc1swXTsKKwkJCWRzdHUgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm47CisJCQlkc3R1ICs9IHJlZ3MtPnJlZ3NbMF07CiAKLQkJCWlmIChtYS0+dG8oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJfQogCQlyZXQgPSAwOwpAQCAtMjM1LDEwICsyMzcsMTAgQEAKIAogCWNhc2UgMTogLyogbW92LmwgUm0sQChkaXNwLFJuKSAqLwogCQlzcmMgPSAodW5zaWduZWQgY2hhciopIHJtOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybjsKLQkJZHN0ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOworCQlkc3R1ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwogCi0JCWlmIChtYS0+dG8oZHN0LCBzcmMsIDQpKQorCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgNCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTI0NywyOCArMjQ5LDI4IEBACiAJCWlmIChpbnN0cnVjdGlvbiAmIDQpCiAJCQkqcm4gLT0gY291bnQ7CiAJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgcm07Ci0JCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgKnJuOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOwogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPnRvKGRzdCwgc3JjLCBjb3VudCkpCisJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKIAogCWNhc2UgNTogLyogbW92LmwgQChkaXNwLFJtKSxSbiAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKLQkJc3JjICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopIHJuOwotCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm07CisJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAyOworCQlkc3QgPSAodW5zaWduZWQgY2hhciAqKXJuOworCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCi0JCWlmIChtYS0+ZnJvbShkc3QsIHNyYywgNCkpCisJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIDY6CS8qIG1vdi5bYndsXSBmcm9tIG1lbW9yeSwgcG9zc2libHkgd2l0aCBwb3N0LWluY3JlbWVudCAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKKwkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKIAkJaWYgKGluc3RydWN0aW9uICYgNCkKIAkJCSpybSArPSBjb3VudDsKIAkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSBybjsKQEAgLTI3Nyw3ICsyNzksNyBAQAogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlkc3QgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjdSwgY291bnQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJc2lnbl9leHRlbmQoY291bnQsIGRzdCk7CiAJCXJldCA9IDA7CkBAIC0yODYsMjggKzI4OCwyOCBAQAogCWNhc2UgODoKIAkJc3dpdGNoICgoaW5zdHJ1Y3Rpb24mMHhGRjAwKT4+OCkgewogCQljYXNlIDB4ODE6IC8qIG1vdi53IFIwLEAoZGlzcCxSbikgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgJnJlZ3MtPnJlZ3NbMF07CisJCQlzcmMgPSAodW5zaWduZWQgY2hhciAqKSAmcmVncy0+cmVnc1swXTsKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCXNyYyArPSAyOwogI2VuZGlmCi0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybTsgLyogY2FsbGVkIFJuIGluIHRoZSBzcGVjICovCi0JCQlkc3QgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7CisJCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOyAvKiBjYWxsZWQgUm4gaW4gdGhlIHNwZWMgKi8KKwkJCWRzdHUgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOwogCi0JCQlpZiAobWEtPnRvKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCAyKSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHg4NTogLyogbW92LncgQChkaXNwLFJtKSxSMCAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7Ci0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICZyZWdzLT5yZWdzWzBdOwotCQkJKih1bnNpZ25lZCBsb25nKilkc3QgPSAwOworCQkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKKwkJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKikgJnJlZ3MtPnJlZ3NbMF07CisJCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlkc3QgKz0gMjsKICNlbmRpZgotCQkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDIpKQogCQkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCQlzaWduX2V4dGVuZCgyLCBkc3QpOwogCQkJcmV0ID0gMDsKQEAgLTMzMyw3ICszMzUsOCBAQAogCQkJCSAgIHN0cnVjdCBtZW1fYWNjZXNzICptYSkKIHsKIAlvcGNvZGVfdCBpbnN0cnVjdGlvbjsKLQl2b2lkICphZGRyID0gKHZvaWQgKikocmVncy0+cGMgKyBpbnN0cnVjdGlvbl9zaXplKG9sZF9pbnN0cnVjdGlvbikpOworCXZvaWQgX191c2VyICphZGRyID0gKHZvaWQgX191c2VyICopKHJlZ3MtPnBjICsKKwkJaW5zdHJ1Y3Rpb25fc2l6ZShvbGRfaW5zdHJ1Y3Rpb24pKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIGFkZHIsIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCS8qIHRoZSBpbnN0cnVjdGlvbi1mZXRjaCBmYXVsdGVkICovCkBAIC01MTEsMTQgKzUxNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YyByMl9iYW5rLCAlMFxuXHQiIDogIj1yIiAoKHgpKSkKLSNlbHNlCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiByNCwgJTBcblx0IiA6ICI9ciIgKCh4KSkpCi0jZW5kaWYKLQogLyoKICAqIEhhbmRsZSB2YXJpb3VzIGFkZHJlc3MgZXJyb3IgZXhjZXB0aW9uczoKICAqICAtIGluc3RydWN0aW9uIGFkZHJlc3MgZXJyb3I6CkBAIC01NDIsNyArNTM3LDcgQEAKIAogCS8qIEludGVudGlvbmFsIGlmZGVmICovCiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihlcnJvcl9jb2RlKTsKKwllcnJvcl9jb2RlID0gbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKTsKICNlbmRpZgogCiAJb2xkZnMgPSBnZXRfZnMoKTsKQEAgLTU1OSw3ICs1NTQsNyBAQAogCQl9CiAKIAkJc2V0X2ZzKFVTRVJfRFMpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCAqKShyZWdzLT5wYyksCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh2b2lkIF9fdXNlciAqKShyZWdzLT5wYyksCiAJCQkJICAgc2l6ZW9mKGluc3RydWN0aW9uKSkpIHsKIAkJCS8qIEFyZ2guIEZhdWx0IG9uIHRoZSBpbnN0cnVjdGlvbiBpdHNlbGYuCiAJCQkgICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gbm9uLVNNUApAQCAtNTg5LDcgKzU4NCw3IEBACiAJCQlkaWUoInVuYWxpZ25lZCBwcm9ncmFtIGNvdW50ZXIiLCByZWdzLCBlcnJvcl9jb2RlKTsKIAogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHZvaWQgKikocmVncy0+cGMpLAorCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCBfX3VzZXIgKikocmVncy0+cGMpLAogCQkJCSAgIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCQkvKiBBcmdoLiBGYXVsdCBvbiB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgogCQkJICAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vbi1TTVAKQEAgLTY4Myw3ICs2NzgsNyBAQAogCX0KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJZXJyb3JfY29kZSA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKQEAgLTczOSwxMSArNzM0LDEzIEBACiAJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKLQl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBpbnN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLSNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQotCXVuc2lnbmVkIHNob3J0IGluc3QgPSAwOwogCisJaWYgKGtwcm9iZV9oYW5kbGVfaWxsc2xvdChyZWdzLT5wYykgPT0gMCkKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKIAlnZXRfdXNlcihpbnN0LCAodW5zaWduZWQgc2hvcnQgKilyZWdzLT5wYyArIDEpOwogCWlmICghZG9fZnB1X2luc3QoaW5zdCwgcmVncykpIHsKIAkJZ2V0X3VzZXIoaW5zdCwgKHVuc2lnbmVkIHNob3J0ICopcmVncy0+cGMpOwpAQCAtNzU0LDEyICs3NTEsMTIgQEAKIAkvKiBub3QgYSBGUFUgaW5zdC4gKi8KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJaW5zdCA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKIAlmb3JjZV9zaWcoU0lHSUxMLCB0c2spOwotCWRpZV9pZl9ub19maXh1cCgiaWxsZWdhbCBzbG90IGluc3RydWN0aW9uIiwgcmVncywgZXJyb3JfY29kZSk7CisJZGllX2lmX25vX2ZpeHVwKCJpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24iLCByZWdzLCBpbnN0KTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX2V4Y2VwdGlvbl9lcnJvcih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LApAQCAtNzY5LDcgKzc2Niw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCWxvbmcgZXg7CiAKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihleCk7CisJZXggPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOwogCWRpZV9pZl9rZXJuZWwoImV4Y2VwdGlvbiIsIHJlZ3MsIGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jIGIvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jCmluZGV4IDRiZWYzYjUuLjYwZTc2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2RpdjY0LWdlbmVyaWMuYworKysgYi9hcmNoL3NoL2xpYi9kaXY2NC1nZW5lcmljLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIGV4dGVybiB1aW50NjRfdCBfX3hkaXY2NF8zMih1NjQgbiwgdTMyIGQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9pby5jIGIvYXJjaC9zaC9saWIvaW8uYwppbmRleCA0ZjU0ZWM0Li44OGRmZTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9pby5jCisrKyBiL2FyY2gvc2gvbGliL2lvLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXZvaWQgX19yYXdfcmVhZHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YXAsIGludCBsZW4pCit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGFwLCBpbnQgbGVuKQogewogCXUzMiAqZGF0YTsKIAogCWZvciAoZGF0YSA9IGRhdGFwOyAobGVuICE9IDApICYmICgoKHUzMilkYXRhICYgMHgxZikgIT0gMCk7IGxlbi0tKQotCQkqZGF0YSsrID0gY3RybF9pbmwoYWRkcik7CisJCSpkYXRhKysgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCWlmIChsaWtlbHkobGVuID49ICgweDIwID4+IDIpKSkgewogCQlpbnQgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKQEAgLTU5LDExICs1OSwxMSBAQAogCX0KIAogCWZvciAoOyBsZW4gIT0gMDsgbGVuLS0pCi0JCSpkYXRhKysgPSBjdHJsX2lubChhZGRyKTsKKwkJKmRhdGErKyA9IF9fcmF3X3JlYWRsKGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTChfX3Jhd19yZWFkc2wpOwogCi12b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAlpZiAobGlrZWx5KGxlbiAhPSAwKSkgewogCQlpbnQgdG1wMTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA4YTAzOTI2Li41NTVlYzk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0xMzIsNyArMTMyLDExIEBACiAKIGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTQorCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmIE1NVQorCitjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBNTVUKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCiAJZGVmX2Jvb2wgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwppbmRleCAwZTE4OWNjLi41YmEwNjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwpAQCAtMTMwLDEyICsxMzAsMTggQEAKIAlkY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfRENBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFkY2FjaGVfZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKGRjYWNoZV9kZW50cnkpKQogCQlyZXR1cm4gUFRSX0VSUihkY2FjaGVfZGVudHJ5KTsKIAogCWljYWNoZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpY2FjaGUiLCBTX0lSVVNSLCBzaF9kZWJ1Z2ZzX3Jvb3QsCiAJCQkJCSAgICAodW5zaWduZWQgaW50ICopQ0FDSEVfVFlQRV9JQ0FDSEUsCiAJCQkJCSAgICAmY2FjaGVfZGVidWdmc19mb3BzKTsKKwlpZiAoIWljYWNoZV9kZW50cnkpIHsKKwkJZGVidWdmc19yZW1vdmUoZGNhY2hlX2RlbnRyeSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlpZiAoSVNfRVJSKGljYWNoZV9kZW50cnkpKSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGRjYWNoZV9kZW50cnkpOwogCQlyZXR1cm4gUFRSX0VSUihpY2FjaGVfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IDFmZGM4ZDkuLjVjZmUwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiB9CiAKIC8qIFRPRE86IFNlbGVjdGl2ZSBpY2FjaGUgaW52YWxpZGF0aW9uIHRocm91Z2ggSUMgYWRkcmVzcyBhcnJheS4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNjcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwppbmRleCA2NGI4ZjdmLi45ZjhlYTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwpAQCAtMTYsMTQgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKLQl2b2lkCQkqdmlydF9iYXNlOwotCXUzMgkJZGV2aWNlX2Jhc2U7Ci0JaW50CQlzaXplOwotCWludAkJZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkqYml0bWFwOwotfTsKLQogdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCiB7CkBAIC00NCw3ICszNiw3IEBACiAJICovCiAJZG1hX2NhY2hlX3N5bmMoZGV2LCByZXQsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIAotCXJldF9ub2NhY2hlID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhyZXQpLCBzaXplKTsKKwlyZXRfbm9jYWNoZSA9ICh2b2lkIF9fZm9yY2UgKilpb3JlbWFwX25vY2FjaGUodmlydF90b19waHlzKHJldCksIHNpemUpOwogCWlmICghcmV0X25vY2FjaGUpIHsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyZXQsIG9yZGVyKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01OCwxMiArNTAsMTAgQEAKIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0gPSBkZXYgPyBkZXYtPmRtYV9tZW0gOiBOVUxMOwogCWludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogCWlmICghZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpIHsKIAkJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwkvKiBmb3IgcG9ydGFiaWxpdHkgKi8KLQkJQlVHX09OKG1lbSAmJiBtZW0tPmZsYWdzICYgRE1BX01FTU9SWV9FWENMVVNJVkUpOwogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgb3JkZXIpOwogCQlpb3VubWFwKHZhZGRyKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKaW5kZXggMGM3NzZmZC4uODk4ZDQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgU0ggd2l0aCBhbiBNTVUuCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gbGludXgvYXJjaC9pMzg2L21tL2ZhdWx0LmM6CiAgKiAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zNywxMCArMzgsMTAgQEAKIAlpbnQgZmF1bHQ7CiAJc2lnaW5mb190IGluZm87CiAKLSNpZmRlZiBDT05GSUdfU0hfS0dEQgotCWlmIChrZ2RiX25vZmF1bHQgJiYga2dkYl9idXNfZXJyX2hvb2spCi0JCWtnZGJfYnVzX2Vycl9ob29rKCk7Ci0jZW5kaWYKKwkvKgorCSAqIFdlIGRvbid0IGJvdGhlciB3aXRoIGFueSBub3RpZmllciBjYWxsYmFja3MgaGVyZSwgYXMgdGhleSBhcmUKKwkgKiBhbGwgaGFuZGxlZCB0aHJvdWdoIHRoZSBfX2RvX3BhZ2VfZmF1bHQoKSBmYXN0LXBhdGguCisJICovCiAKIAl0c2sgPSBjdXJyZW50OwogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTYxLDcgKzYyLDYgQEAKIAkJcGdkID0gZ2V0X1RUQigpICsgb2Zmc2V0OwogCQlwZ2RfayA9IHN3YXBwZXJfcGdfZGlyICsgb2Zmc2V0OwogCi0JCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gd2l0aCB0aGUgZm9sZGVkIHBhZ2UgdGFibGUuICovCiAJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKIAkJCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKIAkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwpAQCAtNzEsOSArNzEsMTMgQEAKIAogCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7Ci0JCWlmIChwdWRfcHJlc2VudCgqcHVkKSB8fCAhcHVkX3ByZXNlbnQoKnB1ZF9rKSkKLQkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7Ci0JCXNldF9wdWQocHVkLCAqcHVkX2spOworCisJCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKKwkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQkJc2V0X3B1ZChwdWQsICpwdWRfayk7CisJCQlyZXR1cm47CisJCX0KIAogCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CkBAIC0yNDIsNiArMjQ2LDI1IEBACiAJCWdvdG8gbm9fY29udGV4dDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwKQoreworCWludCByZXQgPSAwOworCisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2VudHJ5LCAidHJhcF9pZCAlZCBpcCAjcCVsZCIsCisJCSAgIHRyYXAgPj4gNSwgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCB0cmFwKSkKKwkJCXJldCA9IDE7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCiAjaWZkZWYgQ09ORklHX1NIX1NUT1JFX1FVRVVFUwogLyoKICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBTSC00IHN0b3JlIHF1ZXVlcywgYXMgcGFnZXMgZm9yIHRoaXMKQEAgLTI2NSwxMiArMjg4LDE4IEBACiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IGVudHJ5OworCWludCByZXQgPSAwOworCisJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkpKQorCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAJaWYgKGtnZGJfbm9mYXVsdCAmJiBrZ2RiX2J1c19lcnJfaG9vaykKIAkJa2dkYl9idXNfZXJyX2hvb2soKTsKICNlbmRpZgogCisJcmV0ID0gMTsKKwogCS8qCiAJICogV2UgZG9uJ3QgdGFrZSBwYWdlIGZhdWx0cyBmb3IgUDEsIFAyLCBhbmQgcGFydHMgb2YgUDQsIHRoZXNlCiAJICogYXJlIGFsd2F5cyBtYXBwZWQsIHdoZXRoZXIgaXQgYmUgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvdXIgaW4KQEAgLTI4MCwyNCArMzA5LDIzIEBACiAJCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKIAl9IGVsc2UgewogCQlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUgfHwgIWN1cnJlbnQtPm1tKSkKLQkJCXJldHVybiAxOworCQkJZ290byBvdXQ7CiAKIAkJcGdkID0gcGdkX29mZnNldChjdXJyZW50LT5tbSwgYWRkcmVzcyk7CiAJfQogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0OwogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCi0JCXJldHVybiAxOwotCisJCWdvdG8gb3V0OwogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiAJZW50cnkgPSAqcHRlOwogCWlmICh1bmxpa2VseShwdGVfbm9uZShlbnRyeSkgfHwgcHRlX25vdF9wcmVzZW50KGVudHJ5KSkpCi0JCXJldHVybiAxOworCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkod3JpdGVhY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAKIAlpZiAod3JpdGVhY2Nlc3MpCiAJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwpAQCAtMzE0LDUgKzM0Miw4IEBACiAJc2V0X3B0ZShwdGUsIGVudHJ5KTsKIAl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHJlc3MsIGVudHJ5KTsKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2V4aXQsIE1BUktfTk9BUkdTKTsKKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBiNzVhN2FjLi4yYTUzOTQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjMsNyArMjMsMTkgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07Ci11bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IDA7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKy8qCisgKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKKyAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KKyAqIDUxMk1CIGxvd21lbS4KKyAqCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgorICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHdpbGwgYmUKKyAqIG92ZXJyaWRkZW4gaW4gcG1iX2luaXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQpAQCAtNTgsOSArNzAsNyBAQAogCX0KIAogCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOwotCi0JaWYgKGNhY2hlZF90b191bmNhY2hlZCkKLQkJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKKwlmbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOwogfQogCiAvKgpAQCAtMTEzLDcgKzEyMyw2IEBACiAJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKIAkJCXB0ZV90ICpwdGVfdGFibGU7CiAJCQlwdGVfdGFibGUgPSAocHRlX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCQkJbWVtc2V0KHB0ZV90YWJsZSwgMCwgUEFHRV9TSVpFKTsKIAkJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlX3RhYmxlKTsKIAkJfQogCkBAIC0xNjUsMTUgKzE3NCw2IEBACiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAJLyogU2V0IHVwIHRoZSB1bmNhY2hlZCBmaXhtYXAgKi8KIAlzZXRfZml4bWFwX25vY2FjaGUoRklYX1VOQ0FDSEVELCBfX3BhKCZfX3VuY2FjaGVkX3N0YXJ0KSk7Ci0KLSNpZmRlZiBDT05GSUdfMjlCSVQKLQkvKgotCSAqIEhhbmRsZSB0cml2aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gY2FjaGVkIGFuZCB1bmNhY2hlZAotCSAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KLQkgKiA1MTJNQiBsb3dtZW0uCi0JICovCi0JY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKLSNlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI2NSw2ICsyNjUsMzUgQEAKIH0KICNlbmRpZgogCisjaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCisJdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOworI2VuZGlmCisJcmV0dXJuIHRpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUodGhyZWFkX2luZm9fY2FjaGUsIHRpKTsKK30KKwordm9pZCB0aHJlYWRfaW5mb19jYWNoZV9pbml0KHZvaWQpCit7CisJdGhyZWFkX2luZm9fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGhyZWFkX2luZm8iLCBUSFJFQURfU0laRSwKKwkJCQkJICAgICAgVEhSRUFEX1NJWkUsIDAsIE5VTEwpOworCUJVR19PTih0aHJlYWRfaW5mb19jYWNoZSA9PSBOVUxMKTsKK30KKyNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTI5Miw0ICszMjEsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIChzaXplID4+IFBBR0VfU0hJRlQpOworCWludCByZXQ7CisKKwlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOworCWlmICh1bmxpa2VseShyZXQpKQorCQlwcmludGsoIiVzOiBGYWlsZWQsIG9mZmxpbmVfcGFnZXMoKSA9PSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CiAjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZy1ub21tdS5jIGIvYXJjaC9zaC9tbS9wZy1ub21tdS5jCmluZGV4IDY3N2RkNTcuLjkxZWQ0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcGctbm9tbXUuYworKysgYi9hcmNoL3NoL21tL3BnLW5vbW11LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggY2VmNzI3Ni4uODQyNDE2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zOTQsNiArMzk0LDggQEAKIAogCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBtYiIsIFNfSUZSRUcgfCBTX0lSVUdPLAogCQkJCSAgICAgc2hfZGVidWdmc19yb290LCBOVUxMLCAmcG1iX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFkZW50cnkpCisJCXJldHVybiAtRU5PTUVNOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItbm9tbXUuYyBiL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMKaW5kZXggMTUxMTFiYy4uNzFjNzQyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItbm9tbXUuYworKysgYi9hcmNoL3NoL21tL3RsYi1ub21tdS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgogICogTm90aGluZyB0b28gdGVycmlibHkgZXhjaXRpbmcgaGVyZSAuLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDBhMTFjYzA4Li5kNGZiMTFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0zMCw2ICszMCw3IEBACiBEUkVBTUNBU1QJCVNIX0RSRUFNQ0FTVAogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBFRE9TSzc3MDUJCVNIX0VET1NLNzcwNQorRURPU0s3NzYwCQlTSF9FRE9TSzc3NjAKIFNINDIwMl9NSUNST0RFVgkJU0hfU0g0MjAyX01JQ1JPREVWCiBTSDAzCQkJU0hfU0gwMwogTEFORElTSwkJCVNIX0xBTkRJU0sKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCA5NzY3MWRhLi5lNTk0NTU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0zNyw2ICszNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkdlbmVyYWwgbWFjaGluZSBzZXR1cCIKIAogY29uZmlnIFNNUApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzMyLmgKaW5kZXggYjdhYjYwNS4uMzgxYTFiNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl8zMi5oCkBAIC0xMzcsNiArMTM3LDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0JKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZiAvKiAhKF9fQVNNU1BBUkNfRUxGX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaAppbmRleCAwODE4YTEzLi40MjVjMmY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCVwKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQkJCQlcCiBkbyB7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFnczsgXAogCW5ld19mbGFncyAmPSBfVElGXzMyQklUOwkJCVwKIAlpZiAoKGV4KS5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQlcCkBAIC0yMDgsOSArMjA4LDcgQEAKIAllbHNlCQkJCQkJXAogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCiAJLyogZmx1c2hfdGhyZWFkIHdpbGwgdXBkYXRlIHBnZCBjYWNoZSAqLwlcCi0JaWYgKGliY3MyKQkJCQkJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAotCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCmluZGV4IDI5ODk5ZmQuLjgwZmU1NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJOQkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKIAkJCQkJICogVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxMAorI2RlZmluZSBUSUZfRlJFRVpFCQkxMQkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKQEAgLTE0OCw2ICsxNDksNyBAQAogI2RlZmluZSBfVElGX0RPX05PVElGWV9SRVNVTUVfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FIHwgXAogCQkJCQkgX1RJRl9TSUdQRU5ESU5HIHwgXAogCQkJCQkgX1RJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCmluZGV4IGMwYTczN2QuLjYzOWFjODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTEyCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTEzCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNAorI2RlZmluZSBUSUZfRlJFRVpFCQkxNQkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC0yNDksNiArMjUwLDcgQEAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9BQklfUEVORElORwkoMTw8VElGX0FCSV9QRU5ESU5HKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLCSgoMHhmZiA8PCBUSV9GTEFHX1dTQVZFRF9TSElGVCkgfCBcCiAJCQkJIF9USUZfRE9fTk9USUZZX1JFU1VNRV9NQVNLIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCA1NDQ2ZTJhLi4wMzViMTVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtOTYsNiArOTYsNyBAQAogCWRlZl9ib29sIHkKIAogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdS5jCmluZGV4IDJhMzdhNmMuLjFjYzE5OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMKQEAgLTU3NSw3ICs1NzUsNyBAQAogCQl9CiAJCS8qIEFsbG9jYXRlIGlvbW11IGVudHJpZXMgZm9yIHRoYXQgc2VnbWVudCAqLwogCQlwYWRkciA9ICh1bnNpZ25lZCBsb25nKSBTR19FTlRfUEhZU19BRERSRVNTKHMpOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNsZW4sIElPX1BBR0VfU0laRSk7CiAJCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2MoZGV2LCBpb21tdSwgbnBhZ2VzLCAmaGFuZGxlKTsKIAogCQkvKiBIYW5kbGUgZmFpbHVyZSAqLwpAQCAtNjQ3LDcgKzY0Nyw4IEBACiAJCQlpb3B0ZV90ICpiYXNlOwogCiAJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9fUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKKwkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwKKwkJCQkJCSBJT19QQUdFX1NJWkUpOwogCQkJaW9tbXVfcmFuZ2VfZnJlZShpb21tdSwgdmFkZHIsIG5wYWdlcyk7CiAKIAkJCWVudHJ5ID0gKHZhZGRyIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpCkBAIC03MTUsNyArNzE2LDcgQEAKIAogCQlpZiAoIWxlbikKIAkJCWJyZWFrOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIGxlbiwgSU9fUEFHRV9TSVpFKTsKIAkJaW9tbXVfcmFuZ2VfZnJlZShpb21tdSwgZG1hX2hhbmRsZSwgbnBhZ2VzKTsKIAogCQllbnRyeSA9ICgoZG1hX2hhbmRsZSAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaCBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmgKaW5kZXggNTNiMTljOC4uNTkxZjU4NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oCkBAIC0zNSwxNyArMzUsNiBAQAogCiAjZGVmaW5lIFNHX0VOVF9QSFlTX0FERFJFU1MoU0cpCShfX3BhKHNnX3ZpcnQoKFNHKSkpKQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHNsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBucGFnZXM7Ci0KLQlucGFnZXMgPSBJT19QQUdFX0FMSUdOKHZhZGRyICsgc2xlbikgLSAodmFkZHIgJiBJT19QQUdFX01BU0spOwotCW5wYWdlcyA+Pj0gSU9fUEFHRV9TSElGVDsKLQotCXJldHVybiBucGFnZXM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGlzX3NwYW5fYm91bmRhcnkodW5zaWduZWQgbG9uZyBlbnRyeSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHNoaWZ0LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZSwKQEAgLTUzLDcgKzQyLDggQEAKIAkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewogCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBTR19FTlRfUEhZU19BRERSRVNTKG91dHMpOwotCWludCBuciA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgb3V0cy0+ZG1hX2xlbmd0aCArIHNnLT5sZW5ndGgpOworCWludCBuciA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgb3V0cy0+ZG1hX2xlbmd0aCArIHNnLT5sZW5ndGgsCisJCQkJIElPX1BBR0VfU0laRSk7CiAKIAlyZXR1cm4gaW9tbXVfaXNfc3Bhbl9ib3VuZGFyeShlbnRyeSwgbnIsIHNoaWZ0LCBib3VuZGFyeV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IGU4NmM3M2UuLjM0YTFmZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCX0KIAkJLyogQWxsb2NhdGUgaW9tbXUgZW50cmllcyBmb3IgdGhhdCBzZWdtZW50ICovCiAJCXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIFNHX0VOVF9QSFlTX0FERFJFU1Mocyk7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbik7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbiwgSU9fUEFHRV9TSVpFKTsKIAkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyhkZXYsIGlvbW11LCBucGFnZXMsICZoYW5kbGUpOwogCiAJCS8qIEhhbmRsZSBmYWlsdXJlICovCkBAIC00NjEsNyArNDYxLDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgdmFkZHIsIG5wYWdlczsKIAogCQkJdmFkZHIgPSBzLT5kbWFfYWRkcmVzcyAmIElPX1BBR0VfTUFTSzsKLQkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCk7CisJCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgsCisJCQkJCQkgSU9fUEFHRV9TSVpFKTsKIAkJCWlvbW11X3JhbmdlX2ZyZWUoaW9tbXUsIHZhZGRyLCBucGFnZXMpOwogCQkJLyogWFhYIGRlbWFwPyBYWFggKi8KIAkJCXMtPmRtYV9hZGRyZXNzID0gRE1BX0VSUk9SX0NPREU7CkBAIC01MDAsNyArNTAxLDcgQEAKIAogCQlpZiAoIWxlbikKIAkJCWJyZWFrOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIGxlbiwgSU9fUEFHRV9TSVpFKTsKIAkJaW9tbXVfcmFuZ2VfZnJlZShpb21tdSwgZG1hX2hhbmRsZSwgbnBhZ2VzKTsKIAogCQllbnRyeSA9ICgoZG1hX2hhbmRsZSAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlKSA+PiBJT19QQUdFX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCAzMzIwYzlkLi5lODAwNTAzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC01OCwxNSArNTgsNiBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXRfc2lnbmFsLmg+CiAKLS8qIDMyLWJpdCB0aW1ldmFsIGFuZCByZWxhdGVkIGZsb3RzYW0uICAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8Ci0JCSBfX3B1dF91c2VyKGktPnR2X3VzZWMsICZvLT50dl91c2VjKSkpOwotfQotCiAjaWZkZWYgQ09ORklHX1NZU1ZJUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfaXBjKHUzMiBjYWxsLCB1MzIgZmlyc3QsIHUzMiBzZWNvbmQsIHUzMiB0aGlyZCwgY29tcGF0X3VwdHJfdCBwdHIsIHUzMiBmaWZ0aCkKIHsKQEAgLTE0OCw0MSArMTM5LDYgQEAKIAkJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsIChoaWdoIDw8IDMyKSB8IGxvdyk7CiB9CiAKLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnN0YXRidWYpCi17Ci0JY29tcGF0X2lub190IGlubzsKLQlpbnQgZXJyOwotCi0JaWYgKHN0YXQtPnNpemUgPiBNQVhfTk9OX0xGUyB8fCAhb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8Ci0JICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWVyciAgPSBwdXRfdXNlcihvbGRfZW5jb2RlX2RldihzdGF0LT5kZXYpLCAmc3RhdGJ1Zi0+c3RfZGV2KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+aW5vLCAmc3RhdGJ1Zi0+c3RfaW5vKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bW9kZSwgJnN0YXRidWYtPnN0X21vZGUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ubGluaywgJnN0YXRidWYtPnN0X25saW5rKTsKLQllcnIgfD0gcHV0X3VzZXIoaGlnaDJsb3d1aWQoc3RhdC0+dWlkKSwgJnN0YXRidWYtPnN0X3VpZCk7Ci0JZXJyIHw9IHB1dF91c2VyKGhpZ2gybG93Z2lkKHN0YXQtPmdpZCksICZzdGF0YnVmLT5zdF9naWQpOwotCWVyciB8PSBwdXRfdXNlcihvbGRfZW5jb2RlX2RldihzdGF0LT5yZGV2KSwgJnN0YXRidWYtPnN0X3JkZXYpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5zaXplLCAmc3RhdGJ1Zi0+c3Rfc2l6ZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2F0aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2F0aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9tdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9tdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfY3RpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfY3RpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmJsa3NpemUsICZzdGF0YnVmLT5zdF9ibGtzaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YmxvY2tzLCAmc3RhdGJ1Zi0+c3RfYmxvY2tzKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMV0pOwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBjcF9jb21wYXRfc3RhdDY0KHN0cnVjdCBrc3RhdCAqc3RhdCwKIAkJCSAgICBzdHJ1Y3QgY29tcGF0X3N0YXQ2NCBfX3VzZXIgKnN0YXRidWYpCiB7CkBAIC01MjIsNTkgKzQ3OCw2IEBACiAKICNlbmRpZiAgLyogQ09ORklHX01PRFVMRVMgKi8KIAotLyogVHJhbnNsYXRpb25zIGR1ZSB0byB0aW1lX3Qgc2l6ZSBkaWZmZXJlbmNlcy4gIFdoaWNoIGFmZmVjdHMgYWxsCi0gICBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgdGltZXZhbCBhbmQgaXRpbWVydmFsLiAgKi8KLQotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCi0JCQkJICAgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0JaWYgKHR2KSB7Ci0JCXN0cnVjdCB0aW1ldmFsIGt0djsKLQkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCQlpZiAocHV0X3R2MzIodHYsICZrdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV90b191c2VyKHR6LCAmc3lzX3R6LCBzaXplb2Yoc3lzX3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JbG9uZyB1c2VjOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19nZXRfdXNlcih1c2VjLCAmaS0+dHZfdXNlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCW8tPnR2X25zZWMgPSB1c2VjICogMTAwMDsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCQkgICBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgY29tcGF0X3NzaXplX3Qgc3lzMzJfcHJlYWQ2NCh1bnNpZ25lZCBpbnQgZmQsCiAJCQkJCWNoYXIgX191c2VyICp1YnVmLAogCQkJCQljb21wYXRfc2l6ZV90IGNvdW50LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwppbmRleCA1ZGFlZTRiLi5iMmZhNGMxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwpAQCAtNDEsOCArNDEsOCBAQAogLyoxMDAqLyAud29yZCBzeXMzMl9nZXRwcmlvcml0eSwgc3lzMzJfcnRfc2lncmV0dXJuLCBzeXMzMl9ydF9zaWdhY3Rpb24sIHN5czMyX3J0X3NpZ3Byb2NtYXNrLCBzeXMzMl9ydF9zaWdwZW5kaW5nCiAJLndvcmQgY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXQsIHN5czMyX3J0X3NpZ3F1ZXVlaW5mbywgY29tcGF0X3N5c19ydF9zaWdzdXNwZW5kLCBzeXNfc2V0cmVzdWlkLCBzeXNfZ2V0cmVzdWlkCiAvKjExMCovCS53b3JkIHN5c19zZXRyZXNnaWQsIHN5c19nZXRyZXNnaWQsIHN5c19zZXRyZWdpZCwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwKLQkud29yZCBzeXMzMl9nZXRncm91cHMsIHN5czMyX2dldHRpbWVvZmRheSwgc3lzMzJfZ2V0cnVzYWdlLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19nZXRjd2QKLS8qMTIwKi8JLndvcmQgY29tcGF0X3N5c19yZWFkdiwgY29tcGF0X3N5c193cml0ZXYsIHN5czMyX3NldHRpbWVvZmRheSwgc3lzX2ZjaG93bjE2LCBzeXNfZmNobW9kCisJLndvcmQgc3lzMzJfZ2V0Z3JvdXBzLCBjb21wYXRfc3lzX2dldHRpbWVvZmRheSwgc3lzMzJfZ2V0cnVzYWdlLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19nZXRjd2QKKy8qMTIwKi8JLndvcmQgY29tcGF0X3N5c19yZWFkdiwgY29tcGF0X3N5c193cml0ZXYsIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5LCBzeXNfZmNob3duMTYsIHN5c19mY2htb2QKIAkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZXRyZXVpZDE2LCBzeXNfc2V0cmVnaWQxNiwgc3lzX3JlbmFtZSwgc3lzX3RydW5jYXRlCiAvKjEzMCovCS53b3JkIHN5c19mdHJ1bmNhdGUsIHN5c19mbG9jaywgY29tcGF0X3N5c19sc3RhdDY0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbAogCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzMzJfbWtkaXIsIHN5c19ybWRpciwgY29tcGF0X3N5c191dGltZXMsIGNvbXBhdF9zeXNfc3RhdDY0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMKaW5kZXggNDdlM2FjYS4uMzY1YjY0NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYwpAQCAtMTgzLDcgKzE4Myw2IEBACiAJdGFibGVbM10uaW5kZXggPSAwOwogCXRhYmxlWzNdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOwogCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMDsKIAlwb2xpY3ktPmN1ciA9IGNsb2NrX3RpY2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCA2OTc2ODEyLi4zOTNiY2NmIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC0yMjksNiArMjI5LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJkcml2ZXJzL2Jsb2NrL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC91bS9LY29uZmlnLmNoYXIiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9leGVjLmMgYi9hcmNoL3VtL2tlcm5lbC9leGVjLmMKaW5kZXggZjVkN2Y0NS4uNTk4NzExYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvZXhlYy5jCisrKyBiL2FyY2gvdW0va2VybmVsL2V4ZWMuYwpAQCAtNDIsMjMgKzQyLDExIEBACiAJUFRfUkVHU19TUChyZWdzKSA9IGVzcDsKIH0KIAotI2lmZGVmIENPTkZJR19UVFlfTE9HCi1leHRlcm4gdm9pZCBsb2dfZXhlYyhjaGFyICoqYXJndiwgdm9pZCAqdHR5KTsKLSNlbmRpZgotCiBzdGF0aWMgbG9uZyBleGVjdmUxKGNoYXIgKmZpbGUsIGNoYXIgX191c2VyICogX191c2VyICphcmd2LAogCQkgICAgY2hhciBfX3VzZXIgKl9fdXNlciAqZW52KQogewogCWxvbmcgZXJyb3I7Ci0jaWZkZWYgQ09ORklHX1RUWV9MT0cKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKLQlpZiAodHR5KQotCQlsb2dfZXhlYyhhcmd2LCB0dHkpOwotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKLSNlbmRpZgogCWVycm9yID0gZG9fZXhlY3ZlKGZpbGUsIGFyZ3YsIGVudiwgJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKIAlpZiAoZXJyb3IgPT0gMCkgewogCQl0YXNrX2xvY2soY3VycmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQppbmRleCA4YTQ4ZDZhLi5kNjZmMDM4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKQEAgLTcsOSArNyw2IEBACiAJcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyB0dHkubyB1YWNjZXNzLm8gXAogCXVtaWQubyB0bHMubyB1c2VyX3N5bXMubyB1dGlsLm8gZHJpdmVycy8gc3lzLSQoU1VCQVJDSCkvIHNrYXMvCiAKLW9iai0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLXVzZXItb2Jqcy0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLQogVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGFpby5vIGVsZl9hdXgubyBleGVjdnAubyBmaWxlLm8gaGVscGVyLm8gaXJxLm8gXAogCW1haW4ubyBtZW0ubyBwcm9jZXNzLm8gcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyBcCiAJdHR5Lm8gdGxzLm8gdWFjY2Vzcy5vIHVtaWQubyB1dGlsLm8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHR5X2xvZy5jIGIvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjQ4ZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pIGFuZAotICogZ2VvZmZyZXkgaGluZyA8Z2hpbmdAbmV0Lm9oaW8tc3RhdGUuZWR1PgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlICJpbml0LmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgIm9zLmgiCi0KLSNkZWZpbmUgVFRZX0xPR19ESVIgIi4vIgotCi0vKiBTZXQgZWFybHkgaW4gYm9vdCBhbmQgdGhlbiB1bmNoYW5nZWQgKi8KLXN0YXRpYyBjaGFyICp0dHlfbG9nX2RpciA9IFRUWV9MT0dfRElSOwotc3RhdGljIGludCB0dHlfbG9nX2ZkID0gLTE7Ci0KLSNkZWZpbmUgVFRZX0xPR19PUEVOIDEKLSNkZWZpbmUgVFRZX0xPR19DTE9TRSAyCi0jZGVmaW5lIFRUWV9MT0dfV1JJVEUgMwotI2RlZmluZSBUVFlfTE9HX0VYRUMgNAotCi0jZGVmaW5lIFRUWV9SRUFEIDEKLSNkZWZpbmUgVFRZX1dSSVRFIDIKLQotc3RydWN0IHR0eV9sb2dfYnVmIHsKLQlpbnQgd2hhdDsKLQl1bnNpZ25lZCBsb25nIHR0eTsKLQlpbnQgbGVuOwotCWludCBkaXJlY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBzZWM7Ci0JdW5zaWduZWQgbG9uZyB1c2VjOwotfTsKLQotaW50IG9wZW5fdHR5X2xvZyh2b2lkICp0dHksIHZvaWQgKmN1cnJlbnRfdHR5KQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWNoYXIgYnVmW3N0cmxlbih0dHlfbG9nX2RpcikgKyBzaXplb2YoIjAxMjM0NTY3ODkwLTAxMjM0NTY3XDAiKV07Ci0JaW50IGZkOwotCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JaWYodHR5X2xvZ19mZCAhPSAtMSl7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX09QRU4sCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IHNpemVvZihjdXJyZW50X3R0eSksCi0JCQkJCSAgICAgICAuZGlyZWN0aW9uID0gMCwKLQkJCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJCSAgICAgICAudXNlYyA9IHR2LnR2X3VzZWMgfSApOwotCQl3cml0ZSh0dHlfbG9nX2ZkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmN1cnJlbnRfdHR5LCBkYXRhLmxlbik7Ci0JCXJldHVybiB0dHlfbG9nX2ZkOwotCX0KLQotCXNwcmludGYoYnVmLCAiJXMvJTB1LSUwdSIsIHR0eV9sb2dfZGlyLCAodW5zaWduZWQgaW50KSB0di50dl9zZWMsCi0gCQkodW5zaWduZWQgaW50KSB0di50dl91c2VjKTsKLQotCWZkID0gb3Nfb3Blbl9maWxlKGJ1Ziwgb2ZfYXBwZW5kKG9mX2NyZWF0ZShvZl9yZHdyKE9QRU5GTEFHUygpKSkpLAotCQkJICAwNjQ0KTsKLQlpZihmZCA8IDApewotCQlwcmludGsoIm9wZW5fdHR5X2xvZyA6IGNvdWxkbid0IG9wZW4gJyVzJywgZXJybm8gPSAlZFxuIiwKLQkJICAgICAgIGJ1ZiwgLWZkKTsKLQl9Ci0JcmV0dXJuIGZkOwotfQotCi12b2lkIGNsb3NlX3R0eV9sb2coaW50IGZkLCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlpZih0dHlfbG9nX2ZkICE9IC0xKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX0NMT1NFLAotCQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCQkgICAgICAgLmxlbiAgPSAwLAotCQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JCXJldHVybjsKLQl9Ci0Jb3NfY2xvc2VfZmlsZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgbG9nX2NodW5rKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWludCB0b3RhbCA9IDAsIHRyeSwgbWlzc2VkLCBuOwotCWNoYXIgY2h1bmtbNjRdOwotCi0Jd2hpbGUobGVuID4gMCl7Ci0JCXRyeSA9IChsZW4gPiBzaXplb2YoY2h1bmspKSA/IHNpemVvZihjaHVuaykgOiBsZW47Ci0JCW1pc3NlZCA9IGNvcHlfZnJvbV91c2VyX3Byb2MoY2h1bmssIChjaGFyICopIGJ1ZiwgdHJ5KTsKLQkJdHJ5IC09IG1pc3NlZDsKLQkJbiA9IHdyaXRlKGZkLCBjaHVuaywgdHJ5KTsKLQkJaWYobiAhPSB0cnkpIHsKLQkJCWlmKG4gPCAwKQotCQkJCXJldHVybiAtZXJybm87Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZihtaXNzZWQgIT0gMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWxlbiAtPSB0cnk7Ci0JCXRvdGFsICs9IHRyeTsKLQkJYnVmICs9IHRyeTsKLQl9Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLWludCB3cml0ZV90dHlfbG9nKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuLCB2b2lkICp0dHksIGludCBpc19yZWFkKQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWludCBkaXJlY3Rpb247Ci0KLQlpZihmZCA9PSB0dHlfbG9nX2ZkKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRpcmVjdGlvbiA9IGlzX3JlYWQgPyBUVFlfUkVBRCA6IFRUWV9XUklURTsKLQkJZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfV1JJVEUsCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkJICAgICAgIC5kaXJlY3Rpb24gPSBkaXJlY3Rpb24sCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JfQotCi0JcmV0dXJuIGxvZ19jaHVuayhmZCwgYnVmLCBsZW4pOwotfQotCi12b2lkIGxvZ19leGVjKGNoYXIgKiphcmd2LCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0JY2hhciAqKnB0ciwqYXJnOwotCWludCBsZW47Ci0KLQlpZih0dHlfbG9nX2ZkID09IC0xKSByZXR1cm47Ci0KLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQotCWxlbiA9IDA7Ci0JZm9yKHB0ciA9IGFyZ3Y7IDsgcHRyKyspewotCQlpZihjb3B5X2Zyb21fdXNlcl9wcm9jKCZhcmcsIHB0ciwgc2l6ZW9mKGFyZykpKQotCQkJcmV0dXJuOwotCQlpZihhcmcgPT0gTlVMTCkgYnJlYWs7Ci0JCWxlbiArPSBzdHJsZW5fdXNlcl9wcm9jKGFyZyk7Ci0JfQotCi0JZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfRVhFQywKLQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJICAgICAgIC51c2VjID0gdHYudHZfdXNlYyB9ICk7Ci0Jd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0KLQlmb3IocHRyID0gYXJndjsgOyBwdHIrKyl7Ci0JCWlmKGNvcHlfZnJvbV91c2VyX3Byb2MoJmFyZywgcHRyLCBzaXplb2YoYXJnKSkpCi0JCQlyZXR1cm47Ci0JCWlmKGFyZyA9PSBOVUxMKSBicmVhazsKLQkJbG9nX2NodW5rKHR0eV9sb2dfZmQsIGFyZywgc3RybGVuX3VzZXJfcHJvYyhhcmcpKTsKLQl9Ci19Ci0KLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3R0eV9sb2dnZXIoaW50ICgqb3BlbmVyKSh2b2lkICosIHZvaWQgKiksCi0JCQkJaW50ICgqd3JpdGVyKShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAotCQkJCQkgICAgICB2b2lkICosIGludCksCi0JCQkJdm9pZCAoKmNsb3NlcikoaW50LCB2b2lkICopKTsKLQotc3RhdGljIGludCByZWdpc3Rlcl9sb2dnZXIodm9pZCkKLXsKLQlyZWdpc3Rlcl90dHlfbG9nZ2VyKG9wZW5fdHR5X2xvZywgd3JpdGVfdHR5X2xvZywgY2xvc2VfdHR5X2xvZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX2luaXRjYWxsKHJlZ2lzdGVyX2xvZ2dlcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldF90dHlfbG9nX2RpcihjaGFyICpuYW1lLCBpbnQgKmFkZCkKLXsKLQl0dHlfbG9nX2RpciA9IG5hbWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX3NldHVwKCJ0dHlfbG9nX2Rpcj0iLCBzZXRfdHR5X2xvZ19kaXIsCi0idHR5X2xvZ19kaXI9PGRpcmVjdG9yeT5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbG9ncyBvZiBhbGwgcHR5XG4iCi0iICAgIGRhdGEgZnJvbSB0aGlzIFVNTCBtYWNoaW5lIHdpbGwgYmUgd3JpdHRlbi5cblxuIgotKTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0X3R0eV9sb2dfZmQoY2hhciAqbmFtZSwgaW50ICphZGQpCi17Ci0JY2hhciAqZW5kOwotCi0JdHR5X2xvZ19mZCA9IHN0cnRvdWwobmFtZSwgJmVuZCwgMCk7Ci0JaWYoKCplbmQgIT0gJ1wwJykgfHwgKGVuZCA9PSBuYW1lKSl7Ci0JCXByaW50Zigic2V0X3R0eV9sb2dfZmQgLSBzdHJ0b3VsIGZhaWxlZCBvbiAnJXMnXG4iLCBuYW1lKTsKLQkJdHR5X2xvZ19mZCA9IC0xOwotCX0KLQotCSphZGQgPSAwOwotCXJldHVybiAwOwotfQotCi1fX3VtbF9zZXR1cCgidHR5X2xvZ19mZD0iLCBzZXRfdHR5X2xvZ19mZCwKLSJ0dHlfbG9nX2ZkPTxmZD5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYSBwcmVjb25maWd1cmVkIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCBhbGxcbiIKLSIgICAgdHR5IGRhdGEgd2lsbCBiZSB3cml0dGVuLiAgUHJlY29uZmlndXJlIHRoZSBkZXNjcmlwdG9yIHdpdGggc29tZXRoaW5nXG4iCi0iICAgIGxpa2UgJzEwPnR0eV9sb2cgdHR5X2xvZ19mZD0xMCcuXG5cbiIKLSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwppbmRleCBmZDBjMjVhLi4xMjk2NDczIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogCWlmIChoYXZlX2ZweF9yZWdzKSB7CiAJCXN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGZweDsKIAotCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LCAmc2MuZnBzdGF0ZS0+X2Z4c3JfZW52WzBdLAorCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LAorCQkJJigoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKXNjLmZwc3RhdGUpLT5fZnhzcl9lbnZbMF0sCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggZjY1YzI3NC4uNDkzNDliYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0zOSwxMCArMzksNiBAQAogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWciIGlmIFg4Nl8zMgogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIgaWYgWDg2XzY0CiAKLQotY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JZGVmX2Jvb2wgbgotCiBjb25maWcgR0VORVJJQ19USU1FCiAJZGVmX2Jvb2wgeQogCkBAIC05NSw3ICs5MSw3IEBACiAJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19HUElPCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJZGVmX2Jvb2wgeQpAQCAtMTA2LDEyICsxMDIsNiBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJZGVmX2Jvb2wgWDg2X1hBREQKIAotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgotCWRlZl9ib29sIG4KLQotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAotCWRlZl9ib29sIG4KLQogY29uZmlnIEFSQ0hfSEFTX0NQVV9JRExFX1dBSVQKIAlkZWZfYm9vbCB5CiAKQEAgLTIwMyw2ICsxOTMsNyBAQAogY29uZmlnIEtUSU1FX1NDQUxBUgogCWRlZl9ib29sIFg4Nl8zMgogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApAQCAtNzU4LDkgKzc0OSw4IEBACiAJICBTYXkgTiBvdGhlcndpc2UuCiAKIGNvbmZpZyBYODZfUkVCT09URklYVVBTCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiRW5hYmxlIFg4NiBib2FyZCBzcGVjaWZpYyBmaXh1cHMgZm9yIHJlYm9vdCIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBYODYKKwlib29sICJFbmFibGUgWDg2IGJvYXJkIHNwZWNpZmljIGZpeHVwcyBmb3IgcmVib290IgorCWRlcGVuZHMgb24gWDg2XzMyCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGNoaXBzZXQgYW5kL29yIGJvYXJkIHNwZWNpZmljIGZpeHVwcyB0byBiZSBkb25lCiAJICBpbiBvcmRlciB0byBnZXQgcmVib290IHRvIHdvcmsgY29ycmVjdGx5LiBUaGlzIGlzIG9ubHkgbmVlZGVkIG9uCkBAIC05NDQsMTYgKzkzNCwxNyBAQAogCWRlcGVuZHMgb24gWDg2XzMyICYmIChISUdITUVNNjRHIHx8IEhJR0hNRU00RykKIAogY29uZmlnIFg4Nl9QQUUKLQlkZWZfYm9vbCBuCi0JcHJvbXB0ICJQQUUgKFBoeXNpY2FsIEFkZHJlc3MgRXh0ZW5zaW9uKSBTdXBwb3J0IgorCWJvb2wgIlBBRSAoUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb24pIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgIUhJR0hNRU00RwotCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQKIAloZWxwCiAJICBQQUUgaXMgcmVxdWlyZWQgZm9yIE5YIHN1cHBvcnQsIGFuZCBmdXJ0aGVybW9yZSBlbmFibGVzCiAJICBsYXJnZXIgc3dhcHNwYWNlIHN1cHBvcnQgZm9yIG5vbi1vdmVyY29tbWl0IHB1cnBvc2VzLiBJdAogCSAgaGFzIHRoZSBjb3N0IG9mIG1vcmUgcGFnZXRhYmxlIGxvb2t1cCBvdmVyaGVhZCwgYW5kIGFsc28KIAkgIGNvbnN1bWVzIG1vcmUgcGFnZXRhYmxlIHNwYWNlIHBlciBwcm9jZXNzLgogCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorICAgICAgIGRlZl9ib29sIFg4Nl82NCB8fCBYODZfUEFFCisKICMgQ29tbW9uIE5VTUEgRmVhdHVyZXMKIGNvbmZpZyBOVU1BCiAJYm9vbCAiTnVtYSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCkBAIC0xMjM4LDggKzEyMjksNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIEVGSQotCWRlZl9ib29sIG4KLQlwcm9tcHQgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKKwlib29sICJFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBQ1BJCiAJLS0taGVscC0tLQogCVRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvIHVzZSBFRkkgcnVudGltZSBzZXJ2aWNlcyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12ZXNhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwppbmRleCAxZTZmZTAyLi45OWIzMDc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwpAQCAtODgsMTQgKzg4LDExIEBACiAJCQkgICAodm1pbmZvLm1lbW9yeV9sYXlvdXQgPT0gNCB8fAogCQkJICAgIHZtaW5mby5tZW1vcnlfbGF5b3V0ID09IDYpICYmCiAJCQkgICB2bWluZm8ubWVtb3J5X3BsYW5lcyA9PSAxKSB7Ci0jaWZkZWYgQ09ORklHX0ZCCisjaWZkZWYgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUCiAJCQkvKiBHcmFwaGljcyBtb2RlLCBjb2xvciwgbGluZWFyIGZyYW1lIGJ1ZmZlcgogCQkJICAgc3VwcG9ydGVkLiAgT25seSByZWdpc3RlciB0aGUgbW9kZSBpZgogCQkJICAgaWYgZnJhbWVidWZmZXIgaXMgY29uZmlndXJlZCwgaG93ZXZlciwKLQkJCSAgIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGJlIGxlZnQgd2l0aG91dCBhIHNjcmVlbi4KLQkJCSAgIFdlIGRvbid0IHJlcXVpcmUgQ09ORklHX0ZCX1ZFU0EsIGhvd2V2ZXIsIHNpbmNlCi0JCQkgICBzb21lIG9mIHRoZSBvdGhlciBmcmFtZWJ1ZmZlciBkcml2ZXJzIGNhbiB1c2UKLQkJCSAgIHRoaXMgbW9kZS1zZXR0aW5nLCB0b28uICovCisJCQkgICBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBiZSBsZWZ0IHdpdGhvdXQgYSBzY3JlZW4uICovCiAJCQltaSA9IEdFVF9IRUFQKHN0cnVjdCBtb2RlX2luZm8sIDEpOwogCQkJbWktPm1vZGUgPSBtb2RlICsgVklERU9fRklSU1RfVkVTQTsKIAkJCW1pLT5kZXB0aCA9IHZtaW5mby5icHA7CkBAIC0xMzMsMTAgKzEzMCwxMiBAQAogCWlmICgodm1pbmZvLm1vZGVfYXR0ciAmIDB4MTUpID09IDB4MDUpIHsKIAkJLyogSXQncyBhIHN1cHBvcnRlZCB0ZXh0IG1vZGUgKi8KIAkJaXNfZ3JhcGhpYyA9IDA7CisjaWZkZWYgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUCiAJfSBlbHNlIGlmICgodm1pbmZvLm1vZGVfYXR0ciAmIDB4OTkpID09IDB4OTkpIHsKIAkJLyogSXQncyBhIGdyYXBoaWNzIG1vZGUgd2l0aCBsaW5lYXIgZnJhbWUgYnVmZmVyICovCiAJCWlzX2dyYXBoaWMgPSAxOwogCQl2ZXNhX21vZGUgfD0gMHg0MDAwOyAvKiBSZXF1ZXN0IGxpbmVhciBmcmFtZSBidWZmZXIgKi8KKyNlbmRpZgogCX0gZWxzZSB7CiAJCXJldHVybiAtMTsJLyogSW52YWxpZCBtb2RlICovCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggZWI0MzE0Ny4uMjU2YjAwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC01NzEsOCArNTcxLDggQEAKIAkucXVhZCBjb21wYXRfc3lzX3NldHJsaW1pdAkvKiA3NSAqLwogCS5xdWFkIGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdAkvKiBvbGRfZ2V0cmxpbWl0ICovCiAJLnF1YWQgY29tcGF0X3N5c19nZXRydXNhZ2UKLQkucXVhZCBzeXMzMl9nZXR0aW1lb2ZkYXkKLQkucXVhZCBzeXMzMl9zZXR0aW1lb2ZkYXkKKwkucXVhZCBjb21wYXRfc3lzX2dldHRpbWVvZmRheQorCS5xdWFkIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5CiAJLnF1YWQgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCiAJLnF1YWQgc3lzX3NldGdyb3VwczE2CiAJLnF1YWQgc3lzMzJfb2xkX3NlbGVjdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCmluZGV4IGJlZGE0MjMuLjJlMDlkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKQEAgLTQ5LDQxICs0OSw2IEBACiAKICNkZWZpbmUgQUEoX194KQkJKCh1bnNpZ25lZCBsb25nKShfX3gpKQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICprYnVmLCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICp1YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0KLQl0eXBlb2YodWJ1Zi0+c3RfdWlkKSB1aWQgPSAwOwotCXR5cGVvZih1YnVmLT5zdF9naWQpIGdpZCA9IDA7Ci0JU0VUX1VJRCh1aWQsIGtidWYtPnVpZCk7Ci0JU0VUX0dJRChnaWQsIGtidWYtPmdpZCk7Ci0JaWYgKCFvbGRfdmFsaWRfZGV2KGtidWYtPmRldikgfHwgIW9sZF92YWxpZF9kZXYoa2J1Zi0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCWlmIChrYnVmLT5zaXplID49IDB4N2ZmZmZmZmYpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCWlubyA9IGtidWYtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoa2J1Zi0+aW5vKSAmJiBpbm8gIT0ga2J1Zi0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVidWYsIHNpemVvZihzdHJ1Y3QgY29tcGF0X3N0YXQpKSB8fAotCSAgICBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KGtidWYtPmRldiksICZ1YnVmLT5zdF9kZXYpIHx8Ci0JICAgIF9fcHV0X3VzZXIoaW5vLCAmdWJ1Zi0+c3RfaW5vKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm1vZGUsICZ1YnVmLT5zdF9tb2RlKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspIHx8Ci0JICAgIF9fcHV0X3VzZXIodWlkLCAmdWJ1Zi0+c3RfdWlkKSB8fAotCSAgICBfX3B1dF91c2VyKGdpZCwgJnVidWYtPnN0X2dpZCkgfHwKLQkgICAgX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihrYnVmLT5yZGV2KSwgJnVidWYtPnN0X3JkZXYpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+c2l6ZSwgJnVidWYtPnN0X3NpemUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfYXRpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+bXRpbWUudHZfbnNlYywgJnVidWYtPnN0X210aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Y3RpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfY3RpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Ymxrc2l6ZSwgJnVidWYtPnN0X2Jsa3NpemUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl90cnVuY2F0ZTY0KGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXRfbG93LApAQCAtNDAyLDc1ICszNjcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIGdldF90djMyKHN0cnVjdCB0aW1ldmFsICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWludCBlcnIgPSAtRUZBVUxUOwotCi0JaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpIHsKLQkJZXJyID0gX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpOwotCQllcnIgfD0gX19nZXRfdXNlcihvLT50dl91c2VjLCAmaS0+dHZfdXNlYyk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBwdXRfdHYzMihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlpbnQgZXJyID0gLUVGQVVMVDsKLQotCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSkgewotCQllcnIgPSBfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYyk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGktPnR2X3VzZWMsICZvLT50dl91c2VjKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewogCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7CiB9CiAKLS8qCi0gKiBUcmFuc2xhdGlvbnMgZHVlIHRvIHRpbWVfdCBzaXplIGRpZmZlcmVuY2VzLiBXaGljaCBhZmZlY3RzIGFsbAotICogc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCQkgICBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCi0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJCSAgIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1ldmFsIGt0djsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLQlpZiAodHYpIHsKLQkJaWYgKGdldF90djMyKCZrdHYsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlrdHMudHZfc2VjID0ga3R2LnR2X3NlYzsKLQkJa3RzLnR2X25zZWMgPSBrdHYudHZfdXNlYyAqIE5TRUNfUEVSX1VTRUM7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBuOwogCXVuc2lnbmVkIGludCBpbnA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggMzRlNGQxMS4uYThmZDllYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJCXU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgcyA9IDA7Ci0JdW5zaWduZWQgcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkcmVzcywgc2l6ZSk7CisJdW5zaWduZWQgcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkcmVzcywgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCWFkZHJlc3MgJj0gUEFHRV9NQVNLOwogCkBAIC02ODAsNyArNjgwLDggQEAKIAkgICAgaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCA8IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydHBhZ2UgPSBpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJCWludCBwYWdlcyA9IGlvbW11X251bV9wYWdlcyhpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0LAotCQkJCQkgICAgaW9tbXUtPmV4Y2x1c2lvbl9sZW5ndGgpOworCQkJCQkgICAgaW9tbXUtPmV4Y2x1c2lvbl9sZW5ndGgsCisJCQkJCSAgICBQQUdFX1NJWkUpOwogCQlkbWFfb3BzX3Jlc2VydmVfYWRkcmVzc2VzKGRtYV9kb20sIHN0YXJ0cGFnZSwgcGFnZXMpOwogCX0KIApAQCAtOTM1LDcgKzkzNiw3IEBACiAJdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrID0gMDsKIAlpbnQgaTsKIAotCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzaXplKTsKKwlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAlwYWRkciAmPSBQQUdFX01BU0s7CiAKIAlpZiAoYWxpZ24pCkBAIC05ODAsNyArOTgxLDcgQEAKIAlpZiAoKGRtYV9hZGRyID09IDApIHx8IChkbWFfYWRkciArIHNpemUgPiBkbWFfZG9tLT5hcGVydHVyZV9zaXplKSkKIAkJcmV0dXJuOwogCi0JcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUpOworCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9hZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCWRtYV9hZGRyICY9IFBBR0VfTUFTSzsKIAlzdGFydCA9IGRtYV9hZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1Ly5naXRpZ25vcmUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3ZGY1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitjYXBmbGFncy5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDA2ZmNjZTUuLmIwNDYxODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICAoQykgMjAwMS0yMDA0ICBEYXZlIEpvbmVzLiA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAgKEMpIDIwMDEtMjAwNCAgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+CiAgKiAgKEMpIDIwMDIgIFBhZHJhaWcgQnJhZHkuIDxwYWRyYWlnQGFudGVmYWN0by5jb20+CiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTEwMTksNyArMTAxOSw3IEBACiBtb2R1bGVfcGFyYW0ocmV2aWRfZXJyYXRhLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZXZpZF9lcnJhdGEsICJJZ25vcmUgQ1BVIFJldmlzaW9uIElEIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKaW5kZXggYjVjZWQ4MC4uYzFhYzU3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuLCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlck5vdyEgZHJpdmVyIGZvciBBTUQgSzYtMisgLyBLNi0zKyBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCmluZGV4IDBhNjExNTkuLjdjN2Q1NmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBBTUQgSzcgUG93ZXJub3cgZHJpdmVyLgotICogIChDKSAyMDAzIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzLgorICogIChDKSAyMDAzIERhdmUgSm9uZXMgb24gYmVoYWxmIG9mIFN1U0UgTGFicy4KICAqICAoQykgMjAwMy0yMDA0IERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTY5Miw3ICs2OTIsNyBAQAogbW9kdWxlX3BhcmFtKGFjcGlfZm9yY2UsICBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhY3BpX2ZvcmNlLCAiRm9yY2UgQUNQSSB0byBiZSB1c2VkLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlBvd2Vybm93IGRyaXZlciBmb3IgQU1EIEs3IHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDg0YmIzOTUuLjAwOGQyM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC03LDcgKzcsNyBAQAogICogIFN1cHBvcnQgOiBtYXJrLmxhbmdzZG9yZkBhbWQuY29tCiAgKgogICogIEJhc2VkIG9uIHRoZSBwb3dlcm5vdy1rNy5jIG1vZHVsZSB3cml0dGVuIGJ5IERhdmUgSm9uZXMuCi0gKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+IG9uIGJlaGFsZiBvZiBTdVNFIExhYnMKKyAqICAoQykgMjAwMyBEYXZlIEpvbmVzIG9uIGJlaGFsZiBvZiBTdVNFIExhYnMKICAqICAoQykgMjAwNCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+CiAgKiAgKEMpIDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDE5MWY3MjYuLjA0ZDAzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtNDMxLDcgKzQzMSw3IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyB3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jCmluZGV4IGYzOTBjOWYuLmRkM2FmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBBdGhsb24vSGFtbWVyIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZwotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogQXRobG9uIHNwZWNpZmljIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZworICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKaW5kZXggNzc0ZDg3Yy4uMGViZjNmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbWNlLmMgLSB4ODYgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCi0gKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAoYykgMjAwMiBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwppbmRleCBjYzFmY2NkLi5hNzRhZjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBOb24gRmF0YWwgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCiAgKgotICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gY2hlY2sgZm9yIG5vbi1mYXRhbCBNQ0VzIGV2ZXJ5IDE1cwogICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKaW5kZXggNmE0NGQ2NC4uNzJjZWZkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKQEAgLTE0Nyw4ICsxNDcsOCBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGNwdSksCi0JCQkJICAgIE5VTEwsICJjcHUlZCIsIGNwdSk7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGNwdSksIE5VTEwsCisJCQkgICAgImNwdSVkIiwgY3B1KTsKIAlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwppbmRleCA3MmQwYzU2Li5mN2NkYjNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKQEAgLTEzLDYgKzEzLDkgQEAKIAogc3RhdGljIHZvaWQgKmtkdW1wX2J1Zl9wYWdlOwogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKaW5kZXggZTkwYTYwZS4uMDQ1YjM2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCkBAIC0xMCw2ICsxMCw5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKy8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwordW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKaW5kZXggMjAxZWUzNS4uMWE3ODE4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKQEAgLTM0Myw2ICszNDQsNyBAQAogCXByaW50aygiREVCVUdfUEFHRUFMTE9DIik7CiAjZW5kaWYKIAlwcmludGsoIlxuIik7CisJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKIAkJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggMDg2Y2M4MS4uOTZhNWRiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKQEAgLTQ4OSw2ICs0OTAsNyBAQAogCXByaW50aygiREVCVUdfUEFHRUFMTE9DIik7CiAjZW5kaWYKIAlwcmludGsoIlxuIik7CisJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKIAkJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA3OGU2NDJmLi5jZTk3YmYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTEyODIsMTIgKzEyODIsMTAgQEAKIAllODIwX3JlcyA9IHJlczsKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewogCQllbmQgPSBlODIwLm1hcFtpXS5hZGRyICsgZTgyMC5tYXBbaV0uc2l6ZSAtIDE7Ci0jaWZuZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLQkJaWYgKGVuZCA+IDB4MTAwMDAwMDAwVUxMKSB7CisJCWlmIChlbmQgIT0gKHJlc291cmNlX3NpemVfdCllbmQpIHsKIAkJCXJlcysrOwogCQkJY29udGludWU7CiAJCX0KLSNlbmRpZgogCQlyZXMtPm5hbWUgPSBlODIwX3R5cGVfdG9fc3RyaW5nKGU4MjAubWFwW2ldLnR5cGUpOwogCQlyZXMtPnN0YXJ0ID0gZTgyMC5tYXBbaV0uYWRkcjsKIAkJcmVzLT5lbmQgPSBlbmQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCmluZGV4IGQwMmRlZjAuLjc3NGFjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCkBAIC03OCw2ICs3OCwzNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBJZiB3ZSBkb24ndCBkbyB0aGF0LCB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgZ3Vlc3QKKyAqIHdpbGwgY2FsaWJyYXRlIHVuZGVyIGhlYXZ5IGxvYWQgLSB0aHVzLCBnZXR0aW5nIGEgbG93ZXIgbHBqIC0KKyAqIGFuZCBleGVjdXRlIHRoZSBkZWxheXMgdGhlbXNlbHZlcyB3aXRob3V0IGxvYWQuIFRoaXMgaXMgd3JvbmcsCisgKiBiZWNhdXNlIG5vIGRlbGF5IGxvb3AgY2FuIGZpbmlzaCBiZWZvcmVoYW5kLgorICogQW55IGhldXJpc3RpY3MgaXMgc3ViamVjdCB0byBmYWlsLCBiZWNhdXNlIHVsdGltYXRlbHksIGEgbGFyZ2UKKyAqIHBvbGwgb2YgZ3Vlc3RzIGNhbiBiZSBydW5uaW5nIGFuZCB0cm91YmxlIGVhY2ggb3RoZXIuIFNvIHdlIHByZXNldAorICogbHBqIGhlcmUKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2dldF90c2Nfa2h6KHZvaWQpCit7CisJcmV0dXJuIHByZXNldF9scGo7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9nZXRfcHJlc2V0X2xwaih2b2lkKQoreworCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmM7CisJdW5zaWduZWQgbG9uZyBraHo7CisJdTY0IGxwajsKKworCXNyYyA9ICZwZXJfY3B1KGh2X2Nsb2NrLCAwKTsKKwlraHogPSBwdmNsb2NrX3RzY19raHooc3JjKTsKKworCWxwaiA9ICgodTY0KWtoeiAqIDEwMDApOworCWRvX2RpdihscGosIEhaKTsKKwlwcmVzZXRfbHBqID0gbHBqOworfQorCiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGt2bV9jbG9jayA9IHsKIAkubmFtZSA9ICJrdm0tY2xvY2siLAogCS5yZWFkID0ga3ZtX2Nsb2NrX3JlYWQsCkBAIC0xNTMsNiArMTgxLDcgQEAKIAkJcHZfdGltZV9vcHMuZ2V0X3dhbGxjbG9jayA9IGt2bV9nZXRfd2FsbGNsb2NrOwogCQlwdl90aW1lX29wcy5zZXRfd2FsbGNsb2NrID0ga3ZtX3NldF93YWxsY2xvY2s7CiAJCXB2X3RpbWVfb3BzLnNjaGVkX2Nsb2NrID0ga3ZtX2Nsb2NrX3JlYWQ7CisJCXB2X3RpbWVfb3BzLmdldF90c2Nfa2h6ID0ga3ZtX2dldF90c2Nfa2h6OwogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQlwdl9hcGljX29wcy5zZXR1cF9zZWNvbmRhcnlfY2xvY2sgPSBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrOwogI2VuZGlmCkBAIC0xNjMsNiArMTkyLDcgQEAKICNpZmRlZiBDT05GSUdfS0VYRUMKIAkJbWFjaGluZV9vcHMuY3Jhc2hfc2h1dGRvd24gID0ga3ZtX2NyYXNoX3NodXRkb3duOwogI2VuZGlmCisJCWt2bV9nZXRfcHJlc2V0X2xwaigpOwogCQljbG9ja3NvdXJjZV9yZWdpc3Rlcigma3ZtX2Nsb2NrKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKaW5kZXggMmUyYWY1ZC4uODJhN2M3ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21zci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwpAQCAtMTYzLDggKzE2Myw4IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG1zcl9jbGFzcywgTlVMTCwgTUtERVYoTVNSX01BSk9SLCBjcHUpLAotCQkJCSAgICBOVUxMLCAibXNyJWQiLCBjcHUpOworCWRldiA9IGRldmljZV9jcmVhdGUobXNyX2NsYXNzLCBOVUxMLCBNS0RFVihNU1JfTUFKT1IsIGNwdSksIE5VTEwsCisJCQkgICAgIm1zciVkIiwgY3B1KTsKIAlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCmluZGV4IDA4MGQxZDIuLmUxZTczMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCkBAIC0yMTcsMTYgKzIxNyw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfSU9NTVVfREVCVUcgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2RtYV9wYWdlcyh1bnNpZ25lZCBsb25nIGRtYSwgdW5zaWduZWQgaW50IGRtYWxlbikKLXsKLQl1bnNpZ25lZCBpbnQgbnBhZ2VzOwotCi0JbnBhZ2VzID0gUEFHRV9BTElHTihkbWEgKyBkbWFsZW4pIC0gKGRtYSAmIFBBR0VfTUFTSyk7Ci0JbnBhZ2VzID4+PSBQQUdFX1NISUZUOwotCi0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgdHJhbnNsYXRpb25fZW5hYmxlZChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKIHsKIAkvKiBvbmx5IFBIQnMgd2l0aCB0cmFuc2xhdGlvbiBlbmFibGVkIGhhdmUgYW4gSU9NTVUgdGFibGUgKi8KQEAgLTQwOCw3ICszOTgsNyBAQAogCQlpZiAoZG1hbGVuID09IDApCiAJCQlicmVhazsKIAotCQlucGFnZXMgPSBudW1fZG1hX3BhZ2VzKGRtYSwgZG1hbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYSwgZG1hbGVuLCBQQUdFX1NJWkUpOwogCQlpb21tdV9mcmVlKHRibCwgZG1hLCBucGFnZXMpOwogCX0KIH0KQEAgLTQyNyw3ICs0MTcsNyBAQAogCQlCVUdfT04oIXNnX3BhZ2UocykpOwogCiAJCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHNnX3ZpcnQocyk7Ci0JCW5wYWdlcyA9IG51bV9kbWFfcGFnZXModmFkZHIsIHMtPmxlbmd0aCk7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh2YWRkciwgcy0+bGVuZ3RoLCBQQUdFX1NJWkUpOwogCiAJCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2MoZGV2LCB0YmwsIG5wYWdlcyk7CiAJCWlmIChlbnRyeSA9PSBiYWRfZG1hX2FkZHJlc3MpIHsKQEAgLTQ2NCw3ICs0NTQsNyBAQAogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwogCiAJdWFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKLQlucGFnZXMgPSBudW1fZG1hX3BhZ2VzKHVhZGRyLCBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModWFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAKIAlyZXR1cm4gaW9tbXVfYWxsb2MoZGV2LCB0YmwsIHZhZGRyLCBucGFnZXMsIGRpcmVjdGlvbik7CiB9CkBAIC00NzUsNyArNDY1LDcgQEAKIAlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGZpbmRfaW9tbXVfdGFibGUoZGV2KTsKIAl1bnNpZ25lZCBpbnQgbnBhZ2VzOwogCi0JbnBhZ2VzID0gbnVtX2RtYV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2l6ZSwgUEFHRV9TSVpFKTsKIAlpb21tdV9mcmVlKHRibCwgZG1hX2hhbmRsZSwgbnBhZ2VzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggMGEzODI0ZS4uMTkyNjI0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCkBAIC0xMjUsMTMgKzEyNSwxMyBAQAogCXBjaV9zd2lvdGxiX2luaXQoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKK3Vuc2lnbmVkIGxvbmcgaW9tbXVfbnJfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByb3VuZHVwKChhZGRyICYgflBBR0VfTUFTSykgKyBsZW4sIFBBR0VfU0laRSk7CiAKIAlyZXR1cm4gc2l6ZSA+PiBQQUdFX1NISUZUOwogfQotRVhQT1JUX1NZTUJPTChpb21tdV9udW1fcGFnZXMpOworRVhQT1JUX1NZTUJPTChpb21tdV9ucl9wYWdlcyk7CiAjZW5kaWYKIAogdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggMTQ1ZjFjOC4uZTNmNzViYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogc3RhdGljIGRtYV9hZGRyX3QgZG1hX21hcF9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBwaHlzX21lbSwKIAkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpciwgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrKQogewotCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBoeXNfbWVtLCBzaXplKTsKKwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwaHlzX21lbSwgc2l6ZSwgUEFHRV9TSVpFKTsKIAl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2UgPSBhbGxvY19pb21tdShkZXYsIG5wYWdlcywgYWxpZ25fbWFzayk7CiAJaW50IGk7CiAKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlyZXR1cm47CiAKIAlpb21tdV9wYWdlID0gKGRtYV9hZGRyIC0gaW9tbXVfYnVzX2Jhc2UpPj5QQUdFX1NISUZUOwotCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSk7CisJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9hZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewogCQlpb21tdV9nYXR0X2Jhc2VbaW9tbXVfcGFnZSArIGldID0gZ2FydF91bm1hcHBlZF9lbnRyeTsKIAkJQ0xFQVJfTEVBSyhpb21tdV9wYWdlICsgaSk7CkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJfQogCiAJCWFkZHIgPSBwaHlzX2FkZHI7Ci0JCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPm9mZnNldCwgcy0+bGVuZ3RoKTsKKwkJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+b2Zmc2V0LCBzLT5sZW5ndGgsIFBBR0VfU0laRSk7CiAJCXdoaWxlIChwYWdlcy0tKSB7CiAJCQlpb21tdV9nYXR0X2Jhc2VbaW9tbXVfcGFnZV0gPSBHUFRFX0VOQ09ERShhZGRyKTsKIAkJCVNFVF9MRUFLKGlvbW11X3BhZ2UpOwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAKIAkJc2VnX3NpemUgKz0gcy0+bGVuZ3RoOwogCQluZWVkID0gbmV4dG5lZWQ7Ci0JCXBhZ2VzICs9IGlvbW11X251bV9wYWdlcyhzLT5vZmZzZXQsIHMtPmxlbmd0aCk7CisJCXBhZ2VzICs9IGlvbW11X251bV9wYWdlcyhzLT5vZmZzZXQsIHMtPmxlbmd0aCwgUEFHRV9TSVpFKTsKIAkJcHMgPSBzOwogCX0KIAlpZiAoZG1hX21hcF9jb250KGRldiwgc3RhcnRfc2csIGkgLSBzdGFydCwgc2dtYXAsIHBhZ2VzLCBuZWVkKSA8IDApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jIGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYwppbmRleCAwNWZiZTlhLi40ZjljNTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKQEAgLTk3LDYgKzk3LDE4IEBACiAJcmV0dXJuIGRzdC0+dmVyc2lvbjsKIH0KIAordW5zaWduZWQgbG9uZyBwdmNsb2NrX3RzY19raHooc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYykKK3sKKwl1NjQgcHZfdHNjX2toeiA9IDEwMDAwMDBVTEwgPDwgMzI7CisKKwlkb19kaXYocHZfdHNjX2toeiwgc3JjLT50c2NfdG9fc3lzdGVtX211bCk7CisJaWYgKHNyYy0+dHNjX3NoaWZ0IDwgMCkKKwkJcHZfdHNjX2toeiA8PD0gLXNyYy0+dHNjX3NoaWZ0OworCWVsc2UKKwkJcHZfdHNjX2toeiA+Pj0gc3JjLT50c2Nfc2hpZnQ7CisJcmV0dXJuIHB2X3RzY19raHo7Cit9CisKIGN5Y2xlX3QgcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmMpCiB7CiAJc3RydWN0IHB2Y2xvY2tfc2hhZG93X3RpbWUgc2hhZG93OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IDBhMjNiNTcuLmRkNmYyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNjksOCArNjksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKQEAgLTEyNCwxNiArMTI0LDE2IEBACiAJV0FSTl9PTl9PTkNFKFJUQ19BTFdBWVNfQkNEICYmIChzdGF0dXMgJiBSVENfRE1fQklOQVJZKSk7CiAKIAlpZiAoUlRDX0FMV0FZU19CQ0QgfHwgIShzdGF0dXMgJiBSVENfRE1fQklOQVJZKSkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCWlmIChjZW50dXJ5KSB7Ci0JCUJDRF9UT19CSU4oY2VudHVyeSk7CisJCWNlbnR1cnkgPSBiY2QyYmluKGNlbnR1cnkpOwogCQl5ZWFyICs9IGNlbnR1cnkgKiAxMDA7CiAJCXByaW50ayhLRVJOX0lORk8gIkV4dGVuZGVkIENNT1MgeWVhcjogJWRcbiIsIGNlbnR1cnkgKiAxMDApOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCAyMjU1NzgyLi5iMmM5Nzg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNTYxLDcgKzU2MSwxMyBAQAogCiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCiAgKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLiBUaGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZAogICogYnkga2V4ZWMgbG9hZGVyIHRvIHRoZSBjYXB0dXJlIGtlcm5lbC4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDhjM2FjYTcuLjdlZDllMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjgyLDYgKzI4Miw4IEBACiAJY3B1X3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApOwogfQogCitzdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgdW5zYWZlX3NtcDsKKwogLyoKICAqIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3Nvci4KICAqLwpAQCAtMzk3LDcgKzM5OSw3IEBACiAJCQkJZ290byB2YWxpZF9rNzsKIAogCQkvKiBJZiB3ZSBnZXQgaGVyZSwgbm90IGEgY2VydGlmaWVkIFNNUCBjYXBhYmxlIEFNRCBzeXN0ZW0uICovCi0JCWFkZF90YWludChUQUlOVF9VTlNBRkVfU01QKTsKKwkJdW5zYWZlX3NtcCA9IDE7CiAJfQogCiB2YWxpZF9rNzoKQEAgLTQxNCwxMiArNDE2LDEwIEBACiAJICogRG9uJ3QgdGFpbnQgaWYgd2UgYXJlIHJ1bm5pbmcgU01QIGtlcm5lbCBvbiBhIHNpbmdsZSBub24tTVAKIAkgKiBhcHByb3ZlZCBBdGhsb24KIAkgKi8KLQlpZiAodGFpbnRlZCAmIFRBSU5UX1VOU0FGRV9TTVApIHsKLQkJaWYgKG51bV9vbmxpbmVfY3B1cygpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiV0FSTklORzogVGhpcyBjb21iaW5hdGlvbiBvZiBBTUQiCi0JCQkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKLQkJZWxzZQotCQkJdGFpbnRlZCAmPSB+VEFJTlRfVU5TQUZFX1NNUDsKKwlpZiAodW5zYWZlX3NtcCAmJiBudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiV0FSTklORzogVGhpcyBjb21iaW5hdGlvbiBvZiBBTUQiCisJCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOworCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKaW5kZXggZDBlOTQwYi4uYzAyMzQzNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZQpAQCAtMywxMCArMywxMyBAQAogIwogCiBjb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBpb2FwaWMubyBcCi0gICAgICAgICAgICAgICAgY29hbGVzY2VkX21taW8ubykKKyAgICAgICAgICAgICAgICBjb2FsZXNjZWRfbW1pby5vIGlycV9jb21tLm8pCiBpZmVxICgkKENPTkZJR19LVk1fVFJBQ0UpLHkpCiBjb21tb24tb2JqcyArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV90cmFjZS5vKQogZW5kaWYKK2lmZXEgKCQoQ09ORklHX0RNQVIpLHkpCitjb21tb24tb2JqcyArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIHZ0ZC5vKQorZW5kaWYKIAogRVhUUkFfQ0ZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL3g4Ni9rdm0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCBjMGY3ODcyLi42MzQxMzJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjAwLDEzICsyMDAsMTQgQEAKIAogCWlmICghYXRvbWljX2luY19hbmRfdGVzdCgmcHQtPnBlbmRpbmcpKQogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUwLT5yZXF1ZXN0cyk7Ci0JaWYgKHZjcHUwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUwLT53cSkpIHsKLQkJdmNwdTAtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CisKKwlpZiAodmNwdTAgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdTAtPndxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1MC0+d3EpOwotCX0KIAogCXB0LT50aW1lci5leHBpcmVzID0ga3RpbWVfYWRkX25zKHB0LT50aW1lci5leHBpcmVzLCBwdC0+cGVyaW9kKTsKIAlwdC0+c2NoZWR1bGVkID0ga3RpbWVfdG9fbnMocHQtPnRpbWVyLmV4cGlyZXMpOworCWlmIChwdC0+cGVyaW9kKQorCQlwcy0+Y2hhbm5lbHNbMF0uY291bnRfbG9hZF90aW1lID0gcHQtPnRpbWVyLmV4cGlyZXM7CiAKIAlyZXR1cm4gKHB0LT5wZXJpb2QgPT0gMCA/IDAgOiAxKTsKIH0KQEAgLTIxNSwxMiArMjE2LDIyIEBACiB7CiAJc3RydWN0IGt2bV9waXQgKnBpdCA9IHZjcHUtPmt2bS0+YXJjaC52cGl0OwogCi0JaWYgKHBpdCAmJiB2Y3B1LT52Y3B1X2lkID09IDAgJiYgcGl0LT5waXRfc3RhdGUuaW5qZWN0X3BlbmRpbmcpCisJaWYgKHBpdCAmJiB2Y3B1LT52Y3B1X2lkID09IDAgJiYgcGl0LT5waXRfc3RhdGUuaXJxX2FjaykKIAkJcmV0dXJuIGF0b21pY19yZWFkKCZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIucGVuZGluZyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQga3ZtX3BpdF9hY2tfaXJxKHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKK3sKKwlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgKnBzID0gY29udGFpbmVyX29mKGtpYW4sIHN0cnVjdCBrdm1fa3BpdF9zdGF0ZSwKKwkJCQkJCSBpcnFfYWNrX25vdGlmaWVyKTsKKwlzcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpIDwgMCkKKwkJYXRvbWljX2luYygmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKKwlwcy0+aXJxX2FjayA9IDE7CisJc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7Cit9CisKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBwaXRfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmRhdGEpCiB7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwczsKQEAgLTI1NSw4ICsyNjYsOSBAQAogCWhydGltZXJfY2FuY2VsKCZwdC0+dGltZXIpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVfcGl0X3RpbWVyKHN0cnVjdCBrdm1fa3BpdF90aW1lciAqcHQsIHUzMiB2YWwsIGludCBpc19wZXJpb2QpCitzdGF0aWMgdm9pZCBjcmVhdGVfcGl0X3RpbWVyKHN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHMsIHUzMiB2YWwsIGludCBpc19wZXJpb2QpCiB7CisJc3RydWN0IGt2bV9rcGl0X3RpbWVyICpwdCA9ICZwcy0+cGl0X3RpbWVyOwogCXM2NCBpbnRlcnZhbDsKIAogCWludGVydmFsID0gbXVsZGl2NjQodmFsLCBOU0VDX1BFUl9TRUMsIEtWTV9QSVRfRlJFUSk7CkBAIC0yNjgsNiArMjgwLDcgQEAKIAlwdC0+cGVyaW9kID0gKGlzX3BlcmlvZCA9PSAwKSA/IDAgOiBpbnRlcnZhbDsKIAlwdC0+dGltZXIuZnVuY3Rpb24gPSBwaXRfdGltZXJfZm47CiAJYXRvbWljX3NldCgmcHQtPnBlbmRpbmcsIDApOworCXBzLT5pcnFfYWNrID0gMTsKIAogCWhydGltZXJfc3RhcnQoJnB0LT50aW1lciwga3RpbWVfYWRkX25zKGt0aW1lX2dldCgpLCBpbnRlcnZhbCksCiAJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOwpAQCAtMzAyLDExICszMTUsMTEgQEAKIAljYXNlIDE6CiAgICAgICAgIC8qIEZJWE1FOiBlbmhhbmNlIG1vZGUgNCBwcmVjaXNpb24gKi8KIAljYXNlIDQ6Ci0JCWNyZWF0ZV9waXRfdGltZXIoJnBzLT5waXRfdGltZXIsIHZhbCwgMCk7CisJCWNyZWF0ZV9waXRfdGltZXIocHMsIHZhbCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAljYXNlIDM6Ci0JCWNyZWF0ZV9waXRfdGltZXIoJnBzLT5waXRfdGltZXIsIHZhbCwgMSk7CisJCWNyZWF0ZV9waXRfdGltZXIocHMsIHZhbCwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRlc3Ryb3lfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyKTsKQEAgLTUyMCw3ICs1MzMsNyBAQAogCW11dGV4X3VubG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CiAKIAlhdG9taWNfc2V0KCZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIucGVuZGluZywgMCk7Ci0JcGl0LT5waXRfc3RhdGUuaW5qZWN0X3BlbmRpbmcgPSAxOworCXBpdC0+cGl0X3N0YXRlLmlycV9hY2sgPSAxOwogfQogCiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKQpAQCAtNTM0LDYgKzU0Nyw3IEBACiAKIAltdXRleF9pbml0KCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAltdXRleF9sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGl0LT5waXRfc3RhdGUuaW5qZWN0X2xvY2spOwogCiAJLyogSW5pdGlhbGl6ZSBQSU8gZGV2aWNlICovCiAJcGl0LT5kZXYucmVhZCA9IHBpdF9pb3BvcnRfcmVhZDsKQEAgLTU1NSw2ICs1NjksOSBAQAogCXBpdF9zdGF0ZS0+cGl0ID0gcGl0OwogCWhydGltZXJfaW5pdCgmcGl0X3N0YXRlLT5waXRfdGltZXIudGltZXIsCiAJCSAgICAgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfQUJTKTsKKwlwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIuZ3NpID0gMDsKKwlwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIuaXJxX2Fja2VkID0ga3ZtX3BpdF9hY2tfaXJxOworCWt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJnBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllcik7CiAJbXV0ZXhfdW5sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAogCWt2bV9waXRfcmVzZXQocGl0KTsKQEAgLTU3OCwxMCArNTk1LDggQEAKIHN0YXRpYyB2b2lkIF9faW5qZWN0X3BpdF90aW1lcl9pbnRyKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgMCwgMSk7Ci0Ja3ZtX2lvYXBpY19zZXRfaXJxKGt2bS0+YXJjaC52aW9hcGljLCAwLCAwKTsKLQlrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgMCwgMSk7Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIDAsIDApOworCWt2bV9zZXRfaXJxKGt2bSwgMCwgMSk7CisJa3ZtX3NldF9pcnEoa3ZtLCAwLCAwKTsKIAltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiB9CiAKQEAgLTU5MiwzNyArNjA3LDE5IEBACiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwczsKIAogCWlmICh2Y3B1ICYmIHBpdCkgeworCQlpbnQgaW5qZWN0ID0gMDsKIAkJcHMgPSAmcGl0LT5waXRfc3RhdGU7CiAKLQkJLyogVHJ5IHRvIGluamVjdCBwZW5kaW5nIGludGVycnVwdHMgd2hlbjoKLQkJICogMS4gUGVuZGluZyBleGlzdHMKLQkJICogMi4gTGFzdCBpbnRlcnJ1cHQgd2FzIGFjY2VwdGVkIG9yIHdhaXRlZCBmb3IgdG9vIGxvbmcgdGltZSovCi0JCWlmIChhdG9taWNfcmVhZCgmcHMtPnBpdF90aW1lci5wZW5kaW5nKSAmJgotCQkgICAgKHBzLT5pbmplY3RfcGVuZGluZyB8fAotCQkgICAgKGppZmZpZXMgLSBwcy0+bGFzdF9pbmplY3RlZF90aW1lCi0JCQkJPj0gS1ZNX01BWF9QSVRfSU5UUl9JTlRFUlZBTCkpKSB7Ci0JCQlwcy0+aW5qZWN0X3BlbmRpbmcgPSAwOworCQkvKiBUcnkgdG8gaW5qZWN0IHBlbmRpbmcgaW50ZXJydXB0cyB3aGVuCisJCSAqIGxhc3Qgb25lIGhhcyBiZWVuIGFja2VkLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCQlpZiAoYXRvbWljX3JlYWQoJnBzLT5waXRfdGltZXIucGVuZGluZykgJiYgcHMtPmlycV9hY2spIHsKKwkJCXBzLT5pcnFfYWNrID0gMDsKKwkJCWluamVjdCA9IDE7CisJCX0KKwkJc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7CisJCWlmIChpbmplY3QpCiAJCQlfX2luamVjdF9waXRfdGltZXJfaW50cihrdm0pOwotCQkJcHMtPmxhc3RfaW5qZWN0ZWRfdGltZSA9IGppZmZpZXM7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQga3ZtX3BpdF90aW1lcl9pbnRyX3Bvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjKQotewotCXN0cnVjdCBrdm1fYXJjaCAqYXJjaCA9ICZ2Y3B1LT5rdm0tPmFyY2g7Ci0Jc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwczsKLQotCWlmICh2Y3B1ICYmIGFyY2gtPnZwaXQpIHsKLQkJcHMgPSAmYXJjaC0+dnBpdC0+cGl0X3N0YXRlOwotCQlpZiAoYXRvbWljX3JlYWQoJnBzLT5waXRfdGltZXIucGVuZGluZykgJiYKLQkJKCgoYXJjaC0+dnBpYy0+cGljc1swXS5pbXIgJiAxKSA9PSAwICYmCi0JCSAgYXJjaC0+dnBpYy0+cGljc1swXS5pcnFfYmFzZSA9PSB2ZWMpIHx8Ci0JCSAgKGFyY2gtPnZpb2FwaWMtPnJlZGlydGJsWzBdLmZpZWxkcy52ZWN0b3IgPT0gdmVjICYmCi0JCSAgYXJjaC0+dmlvYXBpYy0+cmVkaXJ0YmxbMF0uZmllbGRzLm1hc2sgIT0gMSkpKSB7Ci0JCQlwcy0+aW5qZWN0X3BlbmRpbmcgPSAxOwotCQkJYXRvbWljX2RlYygmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKLQkJCXBzLT5jaGFubmVsc1swXS5jb3VudF9sb2FkX3RpbWUgPSBrdGltZV9nZXQoKTsKLQkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggZGIyNWMyYS4uZTQzNmQ0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKQEAgLTgsNyArOCw2IEBACiAJaW50IGlycTsKIAlzNjQgcGVyaW9kOyAvKiB1bml0OiBucyAqLwogCXM2NCBzY2hlZHVsZWQ7Ci0Ja3RpbWVfdCBsYXN0X3VwZGF0ZTsKIAlhdG9taWNfdCBwZW5kaW5nOwogfTsKIApAQCAtMzQsOCArMzMsOSBAQAogCXUzMiAgICBzcGVha2VyX2RhdGFfb247CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGt2bV9waXQgKnBpdDsKLQlib29sIGluamVjdF9wZW5kaW5nOyAvKiBpZiBpbmplY3QgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X2luamVjdGVkX3RpbWU7CisJc3BpbmxvY2tfdCBpbmplY3RfbG9jazsKKwl1bnNpZ25lZCBsb25nIGlycV9hY2s7CisJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIGlycV9hY2tfbm90aWZpZXI7CiB9OwogCiBzdHJ1Y3Qga3ZtX3BpdCB7CkBAIC01NCw3ICs1NCw2IEBACiAjZGVmaW5lIEtWTV9QSVRfQ0hBTk5FTF9NQVNLCSAgICAweDMKIAogdm9pZCBrdm1faW5qZWN0X3BpdF90aW1lcl9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9waXRfdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYyk7CiB2b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsKTsKIHN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fZnJlZV9waXQoc3RydWN0IGt2bSAqa3ZtKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXggYzMxMTY0ZS4uMTdlNDFlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTMwLDYgKzMwLDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogCitzdGF0aWMgdm9pZCBwaWNfY2xlYXJfaXNyKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSkKK3sKKwlzLT5pc3IgJj0gfigxIDw8IGlycSk7CisJcy0+aXNyX2FjayB8PSAoMSA8PCBpcnEpOworfQorCit2b2lkIGt2bV9waWNfY2xlYXJfaXNyX2FjayhzdHJ1Y3Qga3ZtICprdm0pCit7CisJc3RydWN0IGt2bV9waWMgKnMgPSBwaWNfaXJxY2hpcChrdm0pOworCXMtPnBpY3NbMF0uaXNyX2FjayA9IDB4ZmY7CisJcy0+cGljc1sxXS5pc3JfYWNrID0gMHhmZjsKK30KKwogLyoKICAqIHNldCBpcnEgbGV2ZWwuIElmIGFuIGVkZ2UgaXMgZGV0ZWN0ZWQsIHRoZW4gdGhlIElSUiBpcyBzZXQgdG8gMQogICovCkBAIC0xNDEsMTEgKzE1NCwxMiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcGljX2ludGFjayhzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMsIGludCBpcnEpCiB7CisJcy0+aXNyIHw9IDEgPDwgaXJxOwogCWlmIChzLT5hdXRvX2VvaSkgewogCQlpZiAocy0+cm90YXRlX29uX2F1dG9fZW9pKQogCQkJcy0+cHJpb3JpdHlfYWRkID0gKGlycSArIDEpICYgNzsKLQl9IGVsc2UKLQkJcy0+aXNyIHw9ICgxIDw8IGlycSk7CisJCXBpY19jbGVhcl9pc3IocywgaXJxKTsKKwl9CiAJLyoKIAkgKiBXZSBkb24ndCBjbGVhciBhIGxldmVsIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgaGVyZQogCSAqLwpAQCAtMTUzLDkgKzE2NywxMCBAQAogCQlzLT5pcnIgJj0gfigxIDw8IGlycSk7CiB9CiAKLWludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm1fcGljICpzKQoraW50IGt2bV9waWNfcmVhZF9pcnEoc3RydWN0IGt2bSAqa3ZtKQogewogCWludCBpcnEsIGlycTIsIGludG5vOworCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKIAogCWlycSA9IHBpY19nZXRfaXJxKCZzLT5waWNzWzBdKTsKIAlpZiAoaXJxID49IDApIHsKQEAgLTE4MSwxNiArMTk2LDMyIEBACiAJCWludG5vID0gcy0+cGljc1swXS5pcnFfYmFzZSArIGlycTsKIAl9CiAJcGljX3VwZGF0ZV9pcnEocyk7CisJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBpcnEpOwogCiAJcmV0dXJuIGludG5vOwogfQogCiB2b2lkIGt2bV9waWNfcmVzZXQoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzKQogeworCWludCBpcnEsIGlycWJhc2U7CisJc3RydWN0IGt2bSAqa3ZtID0gcy0+cGljc19zdGF0ZS0+aXJxX3JlcXVlc3Rfb3BhcXVlOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPnZjcHVzWzBdOworCisJaWYgKHMgPT0gJnMtPnBpY3Nfc3RhdGUtPnBpY3NbMF0pCisJCWlycWJhc2UgPSAwOworCWVsc2UKKwkJaXJxYmFzZSA9IDg7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IFBJQ19OVU1fUElOUy8yOyBpcnErKykgeworCQlpZiAodmNwdTAgJiYga3ZtX2FwaWNfYWNjZXB0X3BpY19pbnRyKHZjcHUwKSkKKwkJCWlmIChzLT5pcnIgJiAoMSA8PCBpcnEpIHx8IHMtPmlzciAmICgxIDw8IGlycSkpCisJCQkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBpcnEraXJxYmFzZSk7CisJfQogCXMtPmxhc3RfaXJyID0gMDsKIAlzLT5pcnIgPSAwOwogCXMtPmltciA9IDA7CiAJcy0+aXNyID0gMDsKKwlzLT5pc3JfYWNrID0gMHhmZjsKIAlzLT5wcmlvcml0eV9hZGQgPSAwOwogCXMtPmlycV9iYXNlID0gMDsKIAlzLT5yZWFkX3JlZ19zZWxlY3QgPSAwOwpAQCAtMjQzLDcgKzI3NCw3IEBACiAJCQkJcHJpb3JpdHkgPSBnZXRfcHJpb3JpdHkocywgcy0+aXNyKTsKIAkJCQlpZiAocHJpb3JpdHkgIT0gOCkgewogCQkJCQlpcnEgPSAocHJpb3JpdHkgKyBzLT5wcmlvcml0eV9hZGQpICYgNzsKLQkJCQkJcy0+aXNyICY9IH4oMSA8PCBpcnEpOworCQkJCQlwaWNfY2xlYXJfaXNyKHMsIGlycSk7CiAJCQkJCWlmIChjbWQgPT0gNSkKIAkJCQkJCXMtPnByaW9yaXR5X2FkZCA9IChpcnEgKyAxKSAmIDc7CiAJCQkJCXBpY191cGRhdGVfaXJxKHMtPnBpY3Nfc3RhdGUpOwpAQCAtMjUxLDcgKzI4Miw3IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIDM6CiAJCQkJaXJxID0gdmFsICYgNzsKLQkJCQlzLT5pc3IgJj0gfigxIDw8IGlycSk7CisJCQkJcGljX2NsZWFyX2lzcihzLCBpcnEpOwogCQkJCXBpY191cGRhdGVfaXJxKHMtPnBpY3Nfc3RhdGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSA2OgpAQCAtMjYwLDggKzI5MSw4IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIDc6CiAJCQkJaXJxID0gdmFsICYgNzsKLQkJCQlzLT5pc3IgJj0gfigxIDw8IGlycSk7CiAJCQkJcy0+cHJpb3JpdHlfYWRkID0gKGlycSArIDEpICYgNzsKKwkJCQlwaWNfY2xlYXJfaXNyKHMsIGlycSk7CiAJCQkJcGljX3VwZGF0ZV9pcnEocy0+cGljc19zdGF0ZSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtMzAzLDcgKzMzNCw3IEBACiAJCQlzLT5waWNzX3N0YXRlLT5waWNzWzBdLmlyciAmPSB+KDEgPDwgMik7CiAJCX0KIAkJcy0+aXJyICY9IH4oMSA8PCByZXQpOwotCQlzLT5pc3IgJj0gfigxIDw8IHJldCk7CisJCXBpY19jbGVhcl9pc3IocywgcmV0KTsKIAkJaWYgKGFkZHIxID4+IDcgfHwgcmV0ICE9IDIpCiAJCQlwaWNfdXBkYXRlX2lycShzLT5waWNzX3N0YXRlKTsKIAl9IGVsc2UgewpAQCAtNDIyLDEwICs0NTMsMTQgQEAKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBvcGFxdWU7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtLT52Y3B1c1swXTsKKwlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CisJaW50IGlycSA9IHBpY19nZXRfaXJxKCZzLT5waWNzWzBdKTsKIAotCXBpY19pcnFjaGlwKGt2bSktPm91dHB1dCA9IGxldmVsOwotCWlmICh2Y3B1KQorCXMtPm91dHB1dCA9IGxldmVsOworCWlmICh2Y3B1ICYmIGxldmVsICYmIChzLT5waWNzWzBdLmlzcl9hY2sgJiAoMSA8PCBpcnEpKSkgeworCQlzLT5waWNzWzBdLmlzcl9hY2sgJj0gfigxIDw8IGlycSk7CiAJCWt2bV92Y3B1X2tpY2sodmNwdSk7CisJfQogfQogCiBzdHJ1Y3Qga3ZtX3BpYyAqa3ZtX2NyZWF0ZV9waWMoc3RydWN0IGt2bSAqa3ZtKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IDc2ZDczNmIuLmMwMTliOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYworKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAkJaWYgKGt2bV9hcGljX2FjY2VwdF9waWNfaW50cih2KSkgewogCQkJcyA9IHBpY19pcnFjaGlwKHYtPmt2bSk7CiAJCQlzLT5vdXRwdXQgPSAwOwkJLyogUElDICovCi0JCQl2ZWN0b3IgPSBrdm1fcGljX3JlYWRfaXJxKHMpOworCQkJdmVjdG9yID0ga3ZtX3BpY19yZWFkX2lycSh2LT5rdm0pOwogCQl9CiAJfQogCXJldHVybiB2ZWN0b3I7CkBAIC05MCw3ICs5MCw2IEBACiB2b2lkIGt2bV90aW1lcl9pbnRyX3Bvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjKQogewogCWt2bV9hcGljX3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2ZWMpOwotCWt2bV9waXRfdGltZXJfaW50cl9wb3N0KHZjcHUsIHZlYyk7CiAJLyogVE9ETzogUElULCBSVEMgZXRjLiAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3RpbWVyX2ludHJfcG9zdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggN2NhNDdjYi4uZjE3YzhmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtNDIsNiArNDIsNyBAQAogCXU4IGlycjsJCS8qIGludGVycnVwdCByZXF1ZXN0IHJlZ2lzdGVyICovCiAJdTggaW1yOwkJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KIAl1OCBpc3I7CQkvKiBpbnRlcnJ1cHQgc2VydmljZSByZWdpc3RlciAqLworCXU4IGlzcl9hY2s7CS8qIGludGVycnVwdCBhY2sgZGV0ZWN0aW9uICovCiAJdTggcHJpb3JpdHlfYWRkOwkvKiBoaWdoZXN0IGlycSBwcmlvcml0eSAqLwogCXU4IGlycV9iYXNlOwogCXU4IHJlYWRfcmVnX3NlbGVjdDsKQEAgLTYzLDEyICs2NCwxMyBAQAogCXZvaWQgKmlycV9yZXF1ZXN0X29wYXF1ZTsKIAlpbnQgb3V0cHV0OwkJLyogaW50ciBmcm9tIG1hc3RlciBQSUMgKi8KIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSBkZXY7CisJdm9pZCAoKmFja19ub3RpZmllcikodm9pZCAqb3BhcXVlLCBpbnQgaXJxKTsKIH07CiAKIHN0cnVjdCBrdm1fcGljICprdm1fY3JlYXRlX3BpYyhzdHJ1Y3Qga3ZtICprdm0pOwotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwotaW50IGt2bV9waWNfcmVhZF9pcnEoc3RydWN0IGt2bV9waWMgKnMpOworaW50IGt2bV9waWNfcmVhZF9pcnEoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3BpY191cGRhdGVfaXJxKHN0cnVjdCBrdm1fcGljICpzKTsKK3ZvaWQga3ZtX3BpY19jbGVhcl9pc3JfYWNrKHN0cnVjdCBrdm0gKmt2bSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9waWMgKnBpY19pcnFjaGlwKHN0cnVjdCBrdm0gKmt2bSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oIGIvYXJjaC94ODYva3ZtL2t2bV9jYWNoZV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmODE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgQVNNX0tWTV9DQUNIRV9SRUdTX0gKKyNkZWZpbmUgQVNNX0tWTV9DQUNIRV9SRUdTX0gKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICAgZW51bSBrdm1fcmVnIHJlZykKK3sKKwlpZiAoIXRlc3RfYml0KHJlZywgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkKKwkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZyh2Y3B1LCByZWcpOworCisJcmV0dXJuIHZjcHUtPmFyY2gucmVnc1tyZWddOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICBlbnVtIGt2bV9yZWcgcmVnLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZjcHUtPmFyY2gucmVnc1tyZWddID0gdmFsOworCV9fc2V0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19kaXJ0eSk7CisJX19zZXRfYml0KHJlZywgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yaXBfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SSVApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JpcF93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUklQLCB2YWwpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggNzNmNDNkZS4uNjU3MTkyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCiAjaW5jbHVkZSAiaXJxLmgiCiAKICNkZWZpbmUgUFJJZDY0ICJkIgpAQCAtMzM4LDEzICszMzksNyBAQAogCQl9IGVsc2UKIAkJCWFwaWNfY2xlYXJfdmVjdG9yKHZlY3RvciwgYXBpYy0+cmVncyArIEFQSUNfVE1SKTsKIAotCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpCi0JCQlrdm1fdmNwdV9raWNrKHZjcHUpOwotCQllbHNlIGlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9IQUxURUQpIHsKLQkJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7Ci0JCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdS0+d3EpKQotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdS0+d3EpOwotCQl9CisJCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAKIAkJcmVzdWx0ID0gKG9yaWdfaXJyID09IDApOwogCQlicmVhazsKQEAgLTM3MCwyMSArMzY1LDE4IEBACiAJCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX0lOSVRfUkVDRUlWRUQ7CiAJCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAiSWdub3JpbmcgZGUtYXNzZXJ0IElOSVQgdG8gdmNwdSAlZFxuIiwKLQkJCSAgICAgICB2Y3B1LT52Y3B1X2lkKTsKKwkJCWFwaWNfZGVidWcoIklnbm9yaW5nIGRlLWFzc2VydCBJTklUIHRvIHZjcHUgJWRcbiIsCisJCQkJICAgdmNwdS0+dmNwdV9pZCk7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgQVBJQ19ETV9TVEFSVFVQOgotCQlwcmludGsoS0VSTl9ERUJVRyAiU0lQSSB0byB2Y3B1ICVkIHZlY3RvciAweCUwMnhcbiIsCi0JCSAgICAgICB2Y3B1LT52Y3B1X2lkLCB2ZWN0b3IpOworCQlhcGljX2RlYnVnKCJTSVBJIHRvIHZjcHUgJWQgdmVjdG9yIDB4JTAyeFxuIiwKKwkJCSAgIHZjcHUtPnZjcHVfaWQsIHZlY3Rvcik7CiAJCWlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKSB7CiAJCQl2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yID0gdmVjdG9yOwogCQkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9TSVBJX1JFQ0VJVkVEOwotCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUtPndxKSkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUtPndxKTsKKwkJCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTQzOCw3ICs0MzAsNyBAQAogc3RhdGljIHZvaWQgYXBpY19zZXRfZW9pKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCiB7CiAJaW50IHZlY3RvciA9IGFwaWNfZmluZF9oaWdoZXN0X2lzcihhcGljKTsKLQorCWludCB0cmlnZ2VyX21vZGU7CiAJLyoKIAkgKiBOb3QgZXZlcnkgd3JpdGUgRU9JIHdpbGwgaGFzIGNvcnJlc3BvbmRpbmcgSVNSLAogCSAqIG9uZSBleGFtcGxlIGlzIHdoZW4gS2VybmVsIGNoZWNrIHRpbWVyIG9uIHNldHVwX0lPX0FQSUMKQEAgLTQ1MCw3ICs0NDIsMTAgQEAKIAlhcGljX3VwZGF0ZV9wcHIoYXBpYyk7CiAKIAlpZiAoYXBpY190ZXN0X2FuZF9jbGVhcl92ZWN0b3IodmVjdG9yLCBhcGljLT5yZWdzICsgQVBJQ19UTVIpKQotCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koYXBpYy0+dmNwdS0+a3ZtLCB2ZWN0b3IpOworCQl0cmlnZ2VyX21vZGUgPSBJT0FQSUNfTEVWRUxfVFJJRzsKKwllbHNlCisJCXRyaWdnZXJfbW9kZSA9IElPQVBJQ19FREdFX1RSSUc7CisJa3ZtX2lvYXBpY191cGRhdGVfZW9pKGFwaWMtPnZjcHUtPmt2bSwgdmVjdG9yLCB0cmlnZ2VyX21vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBhcGljX3NlbmRfaXBpKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCkBAIC01NTgsOCArNTUzLDcgQEAKIAlzdHJ1Y3Qga3ZtX3J1biAqcnVuID0gdmNwdS0+cnVuOwogCiAJc2V0X2JpdChLVk1fUkVRX1JFUE9SVF9UUFJfQUNDRVNTLCAmdmNwdS0+cmVxdWVzdHMpOwotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCXJ1bi0+dHByX2FjY2Vzcy5yaXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwlydW4tPnRwcl9hY2Nlc3MucmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJ1bi0+dHByX2FjY2Vzcy5pc193cml0ZSA9IHdyaXRlOwogfQogCkBAIC02ODMsOSArNjc3LDkgQEAKIAkgKiBSZWZlciBTRE0gOC40LjEKIAkgKi8KIAlpZiAobGVuICE9IDQgfHwgYWxpZ25tZW50KSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgImFwaWMgd3JpdGU6IGJhZCBzaXplPSVkICVseFxuIiwKLQkJCSAgICAgICBsZW4sIChsb25nKWFkZHJlc3MpOworCQkvKiBEb24ndCBzaG91dCBsb3VkLCAkaW5mYW1vdXNfb3Mgd291bGQgY2F1c2Ugb25seSBub2lzZS4gKi8KKwkJYXBpY19kZWJ1ZygiYXBpYyB3cml0ZTogYmFkIHNpemU9JWQgJWx4XG4iLAorCQkJICAgbGVuLCAobG9uZylhZGRyZXNzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTQ3LDEwICs5NDEsOSBAQAogCiAJaWYoIWF0b21pY19pbmNfYW5kX3Rlc3QoJmFwaWMtPnRpbWVyLnBlbmRpbmcpKQogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJmFwaWMtPnZjcHUtPnJlcXVlc3RzKTsKLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkgewotCQlhcGljLT52Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCWlmICh3YWl0cXVldWVfYWN0aXZlKHEpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUocSk7Ci0JfQorCiAJaWYgKGFwaWNfbHZ0dF9wZXJpb2QoYXBpYykpIHsKIAkJcmVzdWx0ID0gMTsKIAkJYXBpYy0+dGltZXIuZGV2LmV4cGlyZXMgPSBrdGltZV9hZGRfbnMoCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggM2RhMjUwOC4uOTljMjM5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtNzAsNiArNzAsOSBAQAogbW9kdWxlX3BhcmFtKGRiZywgYm9vbCwgMDY0NCk7CiAjZW5kaWYKIAorc3RhdGljIGludCBvb3Nfc2hhZG93ID0gMTsKK21vZHVsZV9wYXJhbShvb3Nfc2hhZG93LCBib29sLCAwNjQ0KTsKKwogI2lmbmRlZiBNTVVfREVCVUcKICNkZWZpbmUgQVNTRVJUKHgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbHNlCkBAIC0xMzUsMTggKzEzOCwyNCBAQAogI2RlZmluZSBBQ0NfVVNFUl9NQVNLICAgIFBUX1VTRVJfTUFTSwogI2RlZmluZSBBQ0NfQUxMICAgICAgICAgIChBQ0NfRVhFQ19NQVNLIHwgQUNDX1dSSVRFX01BU0sgfCBBQ0NfVVNFUl9NQVNLKQogCi1zdHJ1Y3Qga3ZtX3B2X21tdV9vcF9idWZmZXIgewotCXZvaWQgKnB0cjsKLQl1bnNpZ25lZCBsZW47Ci0JdW5zaWduZWQgcHJvY2Vzc2VkOwotCWNoYXIgYnVmWzUxMl0gX19hbGlnbmVkKHNpemVvZihsb25nKSk7Ci19OworI2RlZmluZSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCiAKIHN0cnVjdCBrdm1fcm1hcF9kZXNjIHsKIAl1NjQgKnNoYWRvd19wdGVzW1JNQVBfRVhUXTsKIAlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqbW9yZTsKIH07CiAKK3N0cnVjdCBrdm1fc2hhZG93X3dhbGsgeworCWludCAoKmVudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCSAgICAgdTY0IGFkZHIsIHU2NCAqc3B0ZSwgaW50IGxldmVsKTsKK307CisKK3N0cnVjdCBrdm1fdW5zeW5jX3dhbGsgeworCWludCAoKmVudHJ5KSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspOworfTsKKwordHlwZWRlZiBpbnQgKCptbXVfcGFyZW50X3dhbGtfZm4pIChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTsKKwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwdGVfY2hhaW5fY2FjaGU7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJtYXBfZGVzY19jYWNoZTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbW11X3BhZ2VfaGVhZGVyX2NhY2hlOwpAQCAtNDA1LDE2ICs0MTQsMTkgQEAKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHJldCA9IDA7CiAKIAlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7CiAJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKIAlpZiAodm1hICYmIGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQlyZXR1cm4gMTsKKwkJcmV0ID0gMTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpc19sYXJnZXBhZ2VfYmFja2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgbGFyZ2VfZ2ZuKQpAQCAtNjQ5LDggKzY2MSw2IEBACiAKIAlpZiAod3JpdGVfcHJvdGVjdGVkKQogCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKLQotCWFjY291bnRfc2hhZG93ZWQoa3ZtLCBnZm4pOwogfQogCiBzdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQpAQCAtODU5LDYgKzg2OSw3NyBAQAogCUJVRygpOwogfQogCisKK3N0YXRpYyB2b2lkIG1tdV9wYXJlbnRfd2FsayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAorCQkJICAgIG1tdV9wYXJlbnRfd2Fsa19mbiBmbikKK3sKKwlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcHRlX2NoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhcmVudF9zcDsKKwlpbnQgaTsKKworCWlmICghc3AtPm11bHRpbWFwcGVkICYmIHNwLT5wYXJlbnRfcHRlKSB7CisJCXBhcmVudF9zcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3AtPnBhcmVudF9wdGUpKTsKKwkJZm4odmNwdSwgcGFyZW50X3NwKTsKKwkJbW11X3BhcmVudF93YWxrKHZjcHUsIHBhcmVudF9zcCwgZm4pOworCQlyZXR1cm47CisJfQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ZV9jaGFpbiwgbm9kZSwgJnNwLT5wYXJlbnRfcHRlcywgbGluaykKKwkJZm9yIChpID0gMDsgaSA8IE5SX1BURV9DSEFJTl9FTlRSSUVTOyArK2kpIHsKKwkJCWlmICghcHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSkKKwkJCQlicmVhazsKKwkJCXBhcmVudF9zcCA9IHBhZ2VfaGVhZGVyKF9fcGEocHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSkpOworCQkJZm4odmNwdSwgcGFyZW50X3NwKTsKKwkJCW1tdV9wYXJlbnRfd2Fsayh2Y3B1LCBwYXJlbnRfc3AsIGZuKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCBrdm1fbW11X3VwZGF0ZV91bnN5bmNfYml0bWFwKHU2NCAqc3B0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKKworCWluZGV4ID0gc3B0ZSAtIHNwLT5zcHQ7CisJX19zZXRfYml0KGluZGV4LCBzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCk7CisJc3AtPnVuc3luY19jaGlsZHJlbiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfdXBkYXRlX3BhcmVudHNfdW5zeW5jKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXN0cnVjdCBrdm1fcHRlX2NoYWluICpwdGVfY2hhaW47CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJaW50IGk7CisKKwlpZiAoIXNwLT5wYXJlbnRfcHRlKQorCQlyZXR1cm47CisKKwlpZiAoIXNwLT5tdWx0aW1hcHBlZCkgeworCQlrdm1fbW11X3VwZGF0ZV91bnN5bmNfYml0bWFwKHNwLT5wYXJlbnRfcHRlKTsKKwkJcmV0dXJuOworCX0KKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ZV9jaGFpbiwgbm9kZSwgJnNwLT5wYXJlbnRfcHRlcywgbGluaykKKwkJZm9yIChpID0gMDsgaSA8IE5SX1BURV9DSEFJTl9FTlRSSUVTOyArK2kpIHsKKwkJCWlmICghcHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSkKKwkJCQlicmVhazsKKwkJCWt2bV9tbXVfdXBkYXRlX3Vuc3luY19iaXRtYXAocHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSk7CisJCX0KK30KKworc3RhdGljIGludCB1bnN5bmNfd2Fsa19mbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXNwLT51bnN5bmNfY2hpbGRyZW4gPSAxOworCWt2bV9tbXVfdXBkYXRlX3BhcmVudHNfdW5zeW5jKHNwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQga3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJbW11X3BhcmVudF93YWxrKHZjcHUsIHNwLCB1bnN5bmNfd2Fsa19mbik7CisJa3ZtX21tdV91cGRhdGVfcGFyZW50c191bnN5bmMoc3ApOworfQorCiBzdGF0aWMgdm9pZCBub25wYWdpbmdfcHJlZmV0Y2hfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewpAQCAtODY4LDYgKzk0OSw1OCBAQAogCQlzcC0+c3B0W2ldID0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGU7CiB9CiAKK3N0YXRpYyBpbnQgbm9ucGFnaW5nX3N5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG5vbnBhZ2luZ19pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCit7Cit9CisKKyNkZWZpbmUgZm9yX2VhY2hfdW5zeW5jX2NoaWxkcmVuKGJpdG1hcCwgaWR4KQkJXAorCWZvciAoaWR4ID0gZmluZF9maXJzdF9iaXQoYml0bWFwLCA1MTIpOwkJXAorCSAgICAgaWR4IDwgNTEyOwkJCQkJXAorCSAgICAgaWR4ID0gZmluZF9uZXh0X2JpdChiaXRtYXAsIDUxMiwgaWR4KzEpKQorCitzdGF0aWMgaW50IG1tdV91bnN5bmNfd2FsayhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCSAgIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGtlcikKK3sKKwlpbnQgaSwgcmV0OworCisJaWYgKCFzcC0+dW5zeW5jX2NoaWxkcmVuKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX3Vuc3luY19jaGlsZHJlbihzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCwgaSkgeworCQl1NjQgZW50ID0gc3AtPnNwdFtpXTsKKworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGVudCkpIHsKKwkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkOworCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihlbnQgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKKworCQkJaWYgKGNoaWxkLT51bnN5bmNfY2hpbGRyZW4pIHsKKwkJCQlyZXQgPSBtbXVfdW5zeW5jX3dhbGsoY2hpbGQsIHdhbGtlcik7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlfX2NsZWFyX2JpdChpLCBzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCk7CisJCQl9CisKKwkJCWlmIChjaGlsZC0+dW5zeW5jKSB7CisJCQkJcmV0ID0gd2Fsa2VyLT5lbnRyeShjaGlsZCwgd2Fsa2VyKTsKKwkJCQlfX2NsZWFyX2JpdChpLCBzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmaW5kX2ZpcnN0X2JpdChzcC0+dW5zeW5jX2NoaWxkX2JpdG1hcCwgNTEyKSA9PSA1MTIpCisJCXNwLT51bnN5bmNfY2hpbGRyZW4gPSAwOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX21tdV9wYWdlICprdm1fbW11X2xvb2t1cF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCXVuc2lnbmVkIGluZGV4OwpAQCAtODg4LDYgKzEwMjEsNTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQga3ZtX3VubGlua191bnN5bmNfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCVdBUk5fT04oIXNwLT51bnN5bmMpOworCXNwLT51bnN5bmMgPSAwOworCS0ta3ZtLT5zdGF0Lm1tdV91bnN5bmM7Cit9CisKK3N0YXRpYyBpbnQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTsKKworc3RhdGljIGludCBrdm1fc3luY19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJaWYgKHNwLT5yb2xlLmdsZXZlbHMgIT0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCkgeworCQlrdm1fbW11X3phcF9wYWdlKHZjcHUtPmt2bSwgc3ApOworCQlyZXR1cm4gMTsKKwl9CisKKwlybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKKwlpZiAodmNwdS0+YXJjaC5tbXUuc3luY19wYWdlKHZjcHUsIHNwKSkgeworCQlrdm1fbW11X3phcF9wYWdlKHZjcHUtPmt2bSwgc3ApOworCQlyZXR1cm4gMTsKKwl9CisKKwlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKKwlrdm1fdW5saW5rX3Vuc3luY19wYWdlKHZjcHUtPmt2bSwgc3ApOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc3luY193YWxrZXIgeworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrIHdhbGtlcjsKK307CisKK3N0YXRpYyBpbnQgbW11X3N5bmNfZm4oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspCit7CisJc3RydWN0IHN5bmNfd2Fsa2VyICpzeW5jX3dhbGsgPSBjb250YWluZXJfb2Yod2Fsaywgc3RydWN0IHN5bmNfd2Fsa2VyLAorCQkJCQkJICAgICB3YWxrZXIpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHN5bmNfd2Fsay0+dmNwdTsKKworCWt2bV9zeW5jX3BhZ2UodmNwdSwgc3ApOworCXJldHVybiAobmVlZF9yZXNjaGVkKCkgfHwgc3Bpbl9uZWVkYnJlYWsoJnZjcHUtPmt2bS0+bW11X2xvY2spKTsKK30KKworc3RhdGljIHZvaWQgbW11X3N5bmNfY2hpbGRyZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzdHJ1Y3Qgc3luY193YWxrZXIgd2Fsa2VyID0geworCQkud2Fsa2VyID0geyAuZW50cnkgPSBtbXVfc3luY19mbiwgfSwKKwkJLnZjcHUgPSB2Y3B1LAorCX07CisKKwl3aGlsZSAobW11X3Vuc3luY193YWxrKHNwLCAmd2Fsa2VyLndhbGtlcikpCisJCWNvbmRfcmVzY2hlZF9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKK30KKwogc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfZ2V0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkgICAgIGdmbl90IGdmbiwKIAkJCQkJICAgICBndmFfdCBnYWRkciwKQEAgLTkwMSw3ICsxMDg3LDcgQEAKIAl1bnNpZ25lZCBxdWFkcmFudDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOwogCiAJcm9sZS53b3JkID0gMDsKIAlyb2xlLmdsZXZlbHMgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsOwpAQCAtOTE3LDkgKzExMDMsMjAgQEAKIAkJIGdmbiwgcm9sZS53b3JkKTsKIAlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm4pOwogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoc3AsIG5vZGUsIGJ1Y2tldCwgaGFzaF9saW5rKQotCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgc3AtPnJvbGUud29yZCA9PSByb2xlLndvcmQpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCB0bXAsIGJ1Y2tldCwgaGFzaF9saW5rKQorCQlpZiAoc3AtPmdmbiA9PSBnZm4pIHsKKwkJCWlmIChzcC0+dW5zeW5jKQorCQkJCWlmIChrdm1fc3luY19wYWdlKHZjcHUsIHNwKSkKKwkJCQkJY29udGludWU7CisKKwkJCWlmIChzcC0+cm9sZS53b3JkICE9IHJvbGUud29yZCkKKwkJCQljb250aW51ZTsKKwogCQkJbW11X3BhZ2VfYWRkX3BhcmVudF9wdGUodmNwdSwgc3AsIHBhcmVudF9wdGUpOworCQkJaWYgKHNwLT51bnN5bmNfY2hpbGRyZW4pIHsKKwkJCQlzZXRfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJCQkJa3ZtX21tdV9tYXJrX3BhcmVudHNfdW5zeW5jKHZjcHUsIHNwKTsKKwkJCX0KIAkJCXBncHJpbnRrKCIlczogZm91bmRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBzcDsKIAkJfQpAQCAtOTMxLDggKzExMjgsMTAgQEAKIAlzcC0+Z2ZuID0gZ2ZuOwogCXNwLT5yb2xlID0gcm9sZTsKIAlobGlzdF9hZGRfaGVhZCgmc3AtPmhhc2hfbGluaywgYnVja2V0KTsKLQlpZiAoIW1ldGFwaHlzaWNhbCkKKwlpZiAoIW1ldGFwaHlzaWNhbCkgewogCQlybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBnZm4pOworCQlhY2NvdW50X3NoYWRvd2VkKHZjcHUtPmt2bSwgZ2ZuKTsKKwl9CiAJaWYgKHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlICE9IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCiAJCXZjcHUtPmFyY2gubW11LnByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCWVsc2UKQEAgLTk0MCw2ICsxMTM5LDM1IEBACiAJcmV0dXJuIHNwOwogfQogCitzdGF0aWMgaW50IHdhbGtfc2hhZG93KHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKndhbGtlciwKKwkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIpCit7CisJaHBhX3Qgc2hhZG93X2FkZHI7CisJaW50IGxldmVsOworCWludCByOworCXU2NCAqc3B0ZXA7CisJdW5zaWduZWQgaW5kZXg7CisKKwlzaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOworCWxldmVsID0gdmNwdS0+YXJjaC5tbXUuc2hhZG93X3Jvb3RfbGV2ZWw7CisJaWYgKGxldmVsID09IFBUMzJFX1JPT1RfTEVWRUwpIHsKKwkJc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFsoYWRkciA+PiAzMCkgJiAzXTsKKwkJc2hhZG93X2FkZHIgJj0gUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwkJLS1sZXZlbDsKKwl9CisKKwl3aGlsZSAobGV2ZWwgPj0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgeworCQlpbmRleCA9IFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCk7CisJCXNwdGVwID0gKCh1NjQgKilfX3ZhKHNoYWRvd19hZGRyKSkgKyBpbmRleDsKKwkJciA9IHdhbGtlci0+ZW50cnkod2Fsa2VyLCB2Y3B1LCBhZGRyLCBzcHRlcCwgbGV2ZWwpOworCQlpZiAocikKKwkJCXJldHVybiByOworCQlzaGFkb3dfYWRkciA9ICpzcHRlcCAmIFBUNjRfQkFTRV9BRERSX01BU0s7CisJCS0tbGV2ZWw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkJIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewpAQCAtOTU1LDcgKzExODMsNiBAQAogCQkJCXJtYXBfcmVtb3ZlKGt2bSwgJnB0W2ldKTsKIAkJCXB0W2ldID0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGU7CiAJCX0KLQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk3NCw3ICsxMjAxLDYgQEAKIAkJfQogCQlwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogCX0KLQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtX21tdV9wdXRfcGFnZShzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgdTY0ICpwYXJlbnRfcHRlKQpAQCAtOTkxLDExICsxMjE3LDEwIEBACiAJCQlrdm0tPnZjcHVzW2ldLT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCitzdGF0aWMgdm9pZCBrdm1fbW11X3VubGlua19wYXJlbnRzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CiAJdTY0ICpwYXJlbnRfcHRlOwogCi0JKytrdm0tPnN0YXQubW11X3NoYWRvd196YXBwZWQ7CiAJd2hpbGUgKHNwLT5tdWx0aW1hcHBlZCB8fCBzcC0+cGFyZW50X3B0ZSkgewogCQlpZiAoIXNwLT5tdWx0aW1hcHBlZCkKIAkJCXBhcmVudF9wdGUgPSBzcC0+cGFyZW50X3B0ZTsKQEAgLTEwMTAsMjEgKzEyMzUsNTkgQEAKIAkJa3ZtX21tdV9wdXRfcGFnZShzcCwgcGFyZW50X3B0ZSk7CiAJCXNldF9zaGFkb3dfcHRlKHBhcmVudF9wdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKIAl9Cit9CisKK3N0cnVjdCB6YXBfd2Fsa2VyIHsKKwlzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrIHdhbGtlcjsKKwlzdHJ1Y3Qga3ZtICprdm07CisJaW50IHphcHBlZDsKK307CisKK3N0YXRpYyBpbnQgbW11X3phcF9mbihzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgc3RydWN0IGt2bV91bnN5bmNfd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3QgemFwX3dhbGtlciAqemFwX3dhbGsgPSBjb250YWluZXJfb2Yod2Fsaywgc3RydWN0IHphcF93YWxrZXIsCisJCQkJCQkgICAgIHdhbGtlcik7CisJa3ZtX21tdV96YXBfcGFnZSh6YXBfd2Fsay0+a3ZtLCBzcCk7CisJemFwX3dhbGstPnphcHBlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW11X3phcF91bnN5bmNfY2hpbGRyZW4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzdHJ1Y3QgemFwX3dhbGtlciB3YWxrZXIgPSB7CisJCS53YWxrZXIgPSB7IC5lbnRyeSA9IG1tdV96YXBfZm4sIH0sCisJCS5rdm0gPSBrdm0sCisJCS56YXBwZWQgPSAwLAorCX07CisKKwlpZiAoc3AtPnJvbGUubGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJcmV0dXJuIDA7CisJbW11X3Vuc3luY193YWxrKHNwLCAmd2Fsa2VyLndhbGtlcik7CisJcmV0dXJuIHdhbGtlci56YXBwZWQ7Cit9CisKK3N0YXRpYyBpbnQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCByZXQ7CisJKytrdm0tPnN0YXQubW11X3NoYWRvd196YXBwZWQ7CisJcmV0ID0gbW11X3phcF91bnN5bmNfY2hpbGRyZW4oa3ZtLCBzcCk7CiAJa3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihrdm0sIHNwKTsKKwlrdm1fbW11X3VubGlua19wYXJlbnRzKGt2bSwgc3ApOworCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCWlmICghc3AtPnJvbGUuaW52YWxpZCAmJiAhc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQl1bmFjY291bnRfc2hhZG93ZWQoa3ZtLCBzcC0+Z2ZuKTsKKwlpZiAoc3AtPnVuc3luYykKKwkJa3ZtX3VubGlua191bnN5bmNfcGFnZShrdm0sIHNwKTsKIAlpZiAoIXNwLT5yb290X2NvdW50KSB7Ci0JCWlmICghc3AtPnJvbGUubWV0YXBoeXNpY2FsICYmICFzcC0+cm9sZS5pbnZhbGlkKQotCQkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJCWhsaXN0X2RlbCgmc3AtPmhhc2hfbGluayk7CiAJCWt2bV9tbXVfZnJlZV9wYWdlKGt2bSwgc3ApOwogCX0gZWxzZSB7Ci0JCWludCBpbnZhbGlkID0gc3AtPnJvbGUuaW52YWxpZDsKLQkJbGlzdF9tb3ZlKCZzcC0+bGluaywgJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAkJc3AtPnJvbGUuaW52YWxpZCA9IDE7CisJCWxpc3RfbW92ZSgmc3AtPmxpbmssICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJCWt2bV9yZWxvYWRfcmVtb3RlX21tdXMoa3ZtKTsKLQkJaWYgKCFzcC0+cm9sZS5tZXRhcGh5c2ljYWwgJiYgIWludmFsaWQpCi0JCQl1bmFjY291bnRfc2hhZG93ZWQoa3ZtLCBzcC0+Z2ZuKTsKIAl9CiAJa3ZtX21tdV9yZXNldF9sYXN0X3B0ZV91cGRhdGVkKGt2bSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTEwNzcsOCArMTM0MCw5IEBACiAJCWlmIChzcC0+Z2ZuID09IGdmbiAmJiAhc3AtPnJvbGUubWV0YXBoeXNpY2FsKSB7CiAJCQlwZ3ByaW50aygiJXM6IGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwKIAkJCQkgc3AtPnJvbGUud29yZCk7Ci0JCQlrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApOwogCQkJciA9IDE7CisJCQlpZiAoa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKSkKKwkJCQluID0gYnVja2V0LT5maXJzdDsKIAkJfQogCXJldHVybiByOwogfQpAQCAtMTEwMSw2ICsxMzY1LDIwIEBACiAJX19zZXRfYml0KHNsb3QsICZzcC0+c2xvdF9iaXRtYXApOwogfQogCitzdGF0aWMgdm9pZCBtbXVfY29udmVydF9ub3RyYXAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJaW50IGk7CisJdTY0ICpwdCA9IHNwLT5zcHQ7CisKKwlpZiAoc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUgPT0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyArK2kpIHsKKwkJaWYgKHB0W2ldID09IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCisJCQlzZXRfc2hhZG93X3B0ZSgmcHRbaV0sIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwl9Cit9CisKIHN0cnVjdCBwYWdlICpndmFfdG9fcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTExMTAsMjAgKzEzODgsMTE2IEBACiAJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpCiAJCXJldHVybiBOVUxMOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXBhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCiAJcmV0dXJuIHBhZ2U7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3Vuc3luY19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJdW5zaWduZWQgaW5kZXg7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbjsKKworCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKHNwLT5nZm4pOworCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CisJLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgeworCQlpZiAocy0+Z2ZuICE9IHNwLT5nZm4gfHwgcy0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnJvbGUud29yZCAhPSBzcC0+cm9sZS53b3JkKQorCQkJcmV0dXJuIDE7CisJfQorCWt2bV9tbXVfbWFya19wYXJlbnRzX3Vuc3luYyh2Y3B1LCBzcCk7CisJKyt2Y3B1LT5rdm0tPnN0YXQubW11X3Vuc3luYzsKKwlzcC0+dW5zeW5jID0gMTsKKwltbXVfY29udmVydF9ub3RyYXAoc3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tdV9uZWVkX3dyaXRlX3Byb3RlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sCisJCQkJICBib29sIGNhbl91bnN5bmMpCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93OworCisJc2hhZG93ID0ga3ZtX21tdV9sb29rdXBfcGFnZSh2Y3B1LT5rdm0sIGdmbik7CisJaWYgKHNoYWRvdykgeworCQlpZiAoc2hhZG93LT5yb2xlLmxldmVsICE9IFBUX1BBR0VfVEFCTEVfTEVWRUwpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHNoYWRvdy0+dW5zeW5jKQorCQkJcmV0dXJuIDA7CisJCWlmIChjYW5fdW5zeW5jICYmIG9vc19zaGFkb3cpCisJCQlyZXR1cm4ga3ZtX3Vuc3luY19wYWdlKHZjcHUsIHNoYWRvdyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc2hhZG93X3B0ZSwKKwkJICAgIHVuc2lnbmVkIHB0ZV9hY2Nlc3MsIGludCB1c2VyX2ZhdWx0LAorCQkgICAgaW50IHdyaXRlX2ZhdWx0LCBpbnQgZGlydHksIGludCBsYXJnZXBhZ2UsCisJCSAgICBnZm5fdCBnZm4sIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSwKKwkJICAgIGJvb2wgY2FuX3Vuc3luYykKK3sKKwl1NjQgc3B0ZTsKKwlpbnQgcmV0ID0gMDsKKwkvKgorCSAqIFdlIGRvbid0IHNldCB0aGUgYWNjZXNzZWQgYml0LCBzaW5jZSB3ZSBzb21ldGltZXMgd2FudCB0byBzZWUKKwkgKiB3aGV0aGVyIHRoZSBndWVzdCBhY3R1YWxseSB1c2VkIHRoZSBwdGUgKGluIG9yZGVyIHRvIGRldGVjdAorCSAqIGRlbWFuZCBwYWdpbmcpLgorCSAqLworCXNwdGUgPSBzaGFkb3dfYmFzZV9wcmVzZW50X3B0ZSB8IHNoYWRvd19kaXJ0eV9tYXNrOworCWlmICghc3BlY3VsYXRpdmUpCisJCXNwdGUgfD0gc2hhZG93X2FjY2Vzc2VkX21hc2s7CisJaWYgKCFkaXJ0eSkKKwkJcHRlX2FjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJaWYgKHB0ZV9hY2Nlc3MgJiBBQ0NfRVhFQ19NQVNLKQorCQlzcHRlIHw9IHNoYWRvd194X21hc2s7CisJZWxzZQorCQlzcHRlIHw9IHNoYWRvd19ueF9tYXNrOworCWlmIChwdGVfYWNjZXNzICYgQUNDX1VTRVJfTUFTSykKKwkJc3B0ZSB8PSBzaGFkb3dfdXNlcl9tYXNrOworCWlmIChsYXJnZXBhZ2UpCisJCXNwdGUgfD0gUFRfUEFHRV9TSVpFX01BU0s7CisKKwlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAoKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKKwkgICAgfHwgKHdyaXRlX2ZhdWx0ICYmICFpc193cml0ZV9wcm90ZWN0aW9uKHZjcHUpICYmICF1c2VyX2ZhdWx0KSkgeworCisJCWlmIChsYXJnZXBhZ2UgJiYgaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBnZm4pKSB7CisJCQlyZXQgPSAxOworCQkJc3B0ZSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOworCQkJZ290byBzZXRfcHRlOworCQl9CisKKwkJc3B0ZSB8PSBQVF9XUklUQUJMRV9NQVNLOworCisJCWlmIChtbXVfbmVlZF93cml0ZV9wcm90ZWN0KHZjcHUsIGdmbiwgY2FuX3Vuc3luYykpIHsKKwkJCXBncHJpbnRrKCIlczogZm91bmQgc2hhZG93IHBhZ2UgZm9yICVseCwgbWFya2luZyByb1xuIiwKKwkJCQkgX19mdW5jX18sIGdmbik7CisJCQlyZXQgPSAxOworCQkJcHRlX2FjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJCQlpZiAoaXNfd3JpdGVibGVfcHRlKHNwdGUpKQorCQkJCXNwdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7CisJCX0KKwl9CisKKwlpZiAocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQorCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOworCitzZXRfcHRlOgorCXNldF9zaGFkb3dfcHRlKHNoYWRvd19wdGUsIHNwdGUpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIG1tdV9zZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc2hhZG93X3B0ZSwKIAkJCSB1bnNpZ25lZCBwdF9hY2Nlc3MsIHVuc2lnbmVkIHB0ZV9hY2Nlc3MsCiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LAogCQkJIGludCAqcHR3cml0ZSwgaW50IGxhcmdlcGFnZSwgZ2ZuX3QgZ2ZuLAogCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKIHsKLQl1NjQgc3B0ZTsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwogCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNoYWRvd19wdGUpOwogCkBAIC0xMTU0LDU5ICsxNTI4LDE5IEBACiAJCQkJd2FzX3JtYXBwZWQgPSAxOwogCQl9CiAJfQotCi0JLyoKLQkgKiBXZSBkb24ndCBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgc2luY2Ugd2Ugc29tZXRpbWVzIHdhbnQgdG8gc2VlCi0JICogd2hldGhlciB0aGUgZ3Vlc3QgYWN0dWFsbHkgdXNlZCB0aGUgcHRlIChpbiBvcmRlciB0byBkZXRlY3QKLQkgKiBkZW1hbmQgcGFnaW5nKS4KLQkgKi8KLQlzcHRlID0gc2hhZG93X2Jhc2VfcHJlc2VudF9wdGUgfCBzaGFkb3dfZGlydHlfbWFzazsKLQlpZiAoIXNwZWN1bGF0aXZlKQotCQlwdGVfYWNjZXNzIHw9IFBUX0FDQ0VTU0VEX01BU0s7Ci0JaWYgKCFkaXJ0eSkKLQkJcHRlX2FjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7Ci0JaWYgKHB0ZV9hY2Nlc3MgJiBBQ0NfRVhFQ19NQVNLKQotCQlzcHRlIHw9IHNoYWRvd194X21hc2s7Ci0JZWxzZQotCQlzcHRlIHw9IHNoYWRvd19ueF9tYXNrOwotCWlmIChwdGVfYWNjZXNzICYgQUNDX1VTRVJfTUFTSykKLQkJc3B0ZSB8PSBzaGFkb3dfdXNlcl9tYXNrOwotCWlmIChsYXJnZXBhZ2UpCi0JCXNwdGUgfD0gUFRfUEFHRV9TSVpFX01BU0s7Ci0KLQlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKLQkgICAgfHwgKHdyaXRlX2ZhdWx0ICYmICFpc193cml0ZV9wcm90ZWN0aW9uKHZjcHUpICYmICF1c2VyX2ZhdWx0KSkgewotCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3c7Ci0KLQkJc3B0ZSB8PSBQVF9XUklUQUJMRV9NQVNLOwotCi0JCXNoYWRvdyA9IGt2bV9tbXVfbG9va3VwX3BhZ2UodmNwdS0+a3ZtLCBnZm4pOwotCQlpZiAoc2hhZG93IHx8Ci0JCSAgIChsYXJnZXBhZ2UgJiYgaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBnZm4pKSkgewotCQkJcGdwcmludGsoIiVzOiBmb3VuZCBzaGFkb3cgcGFnZSBmb3IgJWx4LCBtYXJraW5nIHJvXG4iLAotCQkJCSBfX2Z1bmNfXywgZ2ZuKTsKLQkJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZShzcHRlKSkgewotCQkJCXNwdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7Ci0JCQkJa3ZtX3g4Nl9vcHMtPnRsYl9mbHVzaCh2Y3B1KTsKLQkJCX0KLQkJCWlmICh3cml0ZV9mYXVsdCkKLQkJCQkqcHR3cml0ZSA9IDE7Ci0JCX0KKwlpZiAoc2V0X3NwdGUodmNwdSwgc2hhZG93X3B0ZSwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCisJCSAgICAgIGRpcnR5LCBsYXJnZXBhZ2UsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKKwkJaWYgKHdyaXRlX2ZhdWx0KQorCQkJKnB0d3JpdGUgPSAxOworCQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOwogCX0KIAotCWlmIChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCi0JCW1hcmtfcGFnZV9kaXJ0eSh2Y3B1LT5rdm0sIGdmbik7Ci0KLQlwZ3ByaW50aygiJXM6IHNldHRpbmcgc3B0ZSAlbGx4XG4iLCBfX2Z1bmNfXywgc3B0ZSk7CisJcGdwcmludGsoIiVzOiBzZXR0aW5nIHNwdGUgJWxseFxuIiwgX19mdW5jX18sICpzaGFkb3dfcHRlKTsKIAlwZ3ByaW50aygiaW5zdGFudGlhdGluZyAlcyBQVEUgKCVzKSBhdCAlbGQgKCVsbHgpIGFkZHIgJXBcbiIsCi0JCSAoc3B0ZSZQVF9QQUdFX1NJWkVfTUFTSyk/ICIyTUIiIDogIjRrQiIsCi0JCSAoc3B0ZSZQVF9XUklUQUJMRV9NQVNLKT8iUlciOiJSIiwgZ2ZuLCBzcHRlLCBzaGFkb3dfcHRlKTsKLQlzZXRfc2hhZG93X3B0ZShzaGFkb3dfcHRlLCBzcHRlKTsKLQlpZiAoIXdhc19ybWFwcGVkICYmIChzcHRlICYgUFRfUEFHRV9TSVpFX01BU0spCi0JICAgICYmIChzcHRlICYgUFRfUFJFU0VOVF9NQVNLKSkKKwkJIGlzX2xhcmdlX3B0ZSgqc2hhZG93X3B0ZSk/ICIyTUIiIDogIjRrQiIsCisJCSBpc19wcmVzZW50X3B0ZSgqc2hhZG93X3B0ZSk/IlJXIjoiUiIsIGdmbiwKKwkJICpzaGFkb3dfcHRlLCBzaGFkb3dfcHRlKTsKKwlpZiAoIXdhc19ybWFwcGVkICYmIGlzX2xhcmdlX3B0ZSgqc2hhZG93X3B0ZSkpCiAJCSsrdmNwdS0+a3ZtLT5zdGF0LmxwYWdlczsKIAogCXBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHZjcHUtPmt2bSwgc2hhZG93X3B0ZSwgZ2ZuKTsKQEAgLTEyMzAsNTQgKzE1NjQsNjcgQEAKIHsKIH0KIAotc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCi0JCQkgICBpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbiwKLQkJCSAgIGludCBsZXZlbCkKK3N0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgeworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOworCXBmbl90IHBmbjsKKwlpbnQgd3JpdGU7CisJaW50IGxhcmdlcGFnZTsKKwlpbnQgcHRfd3JpdGU7Cit9OworCitzdGF0aWMgaW50IGRpcmVjdF9tYXBfZW50cnkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3dhbGssCisJCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgIHU2NCBhZGRyLCB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCiB7Ci0JaHBhX3QgdGFibGVfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOwotCWludCBwdF93cml0ZSA9IDA7CisJc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayAqd2FsayA9CisJCWNvbnRhaW5lcl9vZihfd2Fsaywgc3RydWN0IGRpcmVjdF9zaGFkb3dfd2Fsaywgd2Fsa2VyKTsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwlnZm5fdCBwc2V1ZG9fZ2ZuOworCWdmbl90IGdmbiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKIAotCWZvciAoOyA7IGxldmVsLS0pIHsKLQkJdTMyIGluZGV4ID0gUFQ2NF9JTkRFWCh2LCBsZXZlbCk7Ci0JCXU2NCAqdGFibGU7Ci0KLQkJQVNTRVJUKFZBTElEX1BBR0UodGFibGVfYWRkcikpOwotCQl0YWJsZSA9IF9fdmEodGFibGVfYWRkcik7Ci0KLQkJaWYgKGxldmVsID09IDEpIHsKLQkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCAmdGFibGVbaW5kZXhdLCBBQ0NfQUxMLCBBQ0NfQUxMLAotCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwgMCwgZ2ZuLCBwZm4sIGZhbHNlKTsKLQkJCXJldHVybiBwdF93cml0ZTsKLQkJfQotCi0JCWlmIChsYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gMikgewotCQkJbW11X3NldF9zcHRlKHZjcHUsICZ0YWJsZVtpbmRleF0sIEFDQ19BTEwsIEFDQ19BTEwsCi0JCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLCAxLCBnZm4sIHBmbiwgZmFsc2UpOwotCQkJcmV0dXJuIHB0X3dyaXRlOwotCQl9Ci0KLQkJaWYgKHRhYmxlW2luZGV4XSA9PSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSkgewotCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqbmV3X3RhYmxlOwotCQkJZ2ZuX3QgcHNldWRvX2dmbjsKLQotCQkJcHNldWRvX2dmbiA9ICh2ICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spCi0JCQkJPj4gUEFHRV9TSElGVDsKLQkJCW5ld190YWJsZSA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwKLQkJCQkJCSAgICAgdiwgbGV2ZWwgLSAxLAotCQkJCQkJICAgICAxLCBBQ0NfQUxMLCAmdGFibGVbaW5kZXhdKTsKLQkJCWlmICghbmV3X3RhYmxlKSB7Ci0JCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7Ci0JCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0KLQkJCXNldF9zaGFkb3dfcHRlKCZ0YWJsZVtpbmRleF0sCi0JCQkJICAgICAgIF9fcGEobmV3X3RhYmxlLT5zcHQpCi0JCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSwotCQkJCSAgICAgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKLQkJfQotCQl0YWJsZV9hZGRyID0gdGFibGVbaW5kZXhdICYgUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCSAgICB8fCAod2Fsay0+bGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBBQ0NfQUxMLCBBQ0NfQUxMLAorCQkJICAgICAwLCB3YWxrLT53cml0ZSwgMSwgJndhbGstPnB0X3dyaXRlLAorCQkJICAgICB3YWxrLT5sYXJnZXBhZ2UsIGdmbiwgd2Fsay0+cGZuLCBmYWxzZSk7CisJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKKwkJcmV0dXJuIDE7CiAJfQorCisJaWYgKCpzcHRlcCA9PSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSkgeworCQlwc2V1ZG9fZ2ZuID0gKGFkZHIgJiBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKKwkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sIChndmFfdClhZGRyLCBsZXZlbCAtIDEsCisJCQkJICAgICAgMSwgQUNDX0FMTCwgc3B0ZXApOworCQlpZiAoIXNwKSB7CisJCQlwZ3ByaW50aygibm9ucGFnaW5nX21hcDogRU5PTUVNXG4iKTsKKwkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbih3YWxrLT5wZm4pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwKKwkJCSAgICAgICBfX3BhKHNwLT5zcHQpCisJCQkgICAgICAgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9XUklUQUJMRV9NQVNLCisJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGlyZWN0X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHYsIGludCB3cml0ZSwKKwkJCWludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwgcGZuX3QgcGZuKQoreworCWludCByOworCXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgd2Fsa2VyID0geworCQkud2Fsa2VyID0geyAuZW50cnkgPSBkaXJlY3RfbWFwX2VudHJ5LCB9LAorCQkucGZuID0gcGZuLAorCQkubGFyZ2VwYWdlID0gbGFyZ2VwYWdlLAorCQkud3JpdGUgPSB3cml0ZSwKKwkJLnB0X3dyaXRlID0gMCwKKwl9OworCisJciA9IHdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBnZm4gPDwgUEFHRV9TSElGVCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2Fsa2VyLnB0X3dyaXRlOwogfQogCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKQEAgLTEyODcsMTYgKzE2MzQsMTQgQEAKIAlwZm5fdCBwZm47CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKIAkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKIAkJbGFyZ2VwYWdlID0gMTsKIAl9CiAKIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwotCS8qIGltcGxpY2l0IG1iKCksIHdlJ2xsIHJlYWQgYmVmb3JlIFBUIGxvY2sgaXMgdW5sb2NrZWQgKi8KKwlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCS8qIG1taW8gKi8KIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpIHsKQEAgLTEzMDgsOCArMTY1Myw3IEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxhcmdlcGFnZSwgZ2ZuLCBwZm4sCi0JCQkgUFQzMkVfUk9PVF9MRVZFTCk7CisJciA9IF9fZGlyZWN0X21hcCh2Y3B1LCB2LCB3cml0ZSwgbGFyZ2VwYWdlLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAKQEAgLTE0MDUsNiArMTc0OSwzNyBAQAogCXZjcHUtPmFyY2gubW11LnJvb3RfaHBhID0gX19wYSh2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdCk7CiB9CiAKK3N0YXRpYyB2b2lkIG1tdV9zeW5jX3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKworCWlmICghVkFMSURfUEFHRSh2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSkpCisJCXJldHVybjsKKwlpZiAodmNwdS0+YXJjaC5tbXUuc2hhZG93X3Jvb3RfbGV2ZWwgPT0gUFQ2NF9ST09UX0xFVkVMKSB7CisJCWhwYV90IHJvb3QgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKKwkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJbW11X3N5bmNfY2hpbGRyZW4odmNwdSwgc3ApOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJaHBhX3Qgcm9vdCA9IHZjcHUtPmFyY2gubW11LnBhZV9yb290W2ldOworCisJCWlmIChyb290KSB7CisJCQlyb290ICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCQlzcCA9IHBhZ2VfaGVhZGVyKHJvb3QpOworCQkJbW11X3N5bmNfY2hpbGRyZW4odmNwdSwgc3ApOworCQl9CisJfQorfQorCit2b2lkIGt2bV9tbXVfc3luY19yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwltbXVfc3luY19yb290cyh2Y3B1KTsKKwlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Cit9CisKIHN0YXRpYyBncGFfdCBub25wYWdpbmdfZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyKQogewogCXJldHVybiB2YWRkcjsKQEAgLTE0NDYsMTUgKzE4MjEsMTMgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGlzX2xhcmdlcGFnZV9iYWNrZWQodmNwdSwgZ2ZuICYgfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpKSkgewogCQlnZm4gJj0gfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpOwogCQlsYXJnZXBhZ2UgPSAxOwogCX0KIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwotCS8qIGltcGxpY2l0IG1iKCksIHdlJ2xsIHJlYWQgYmVmb3JlIFBUIGxvY2sgaXMgdW5sb2NrZWQgKi8KKwlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpIHsKIAkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJCXJldHVybiAxOwpAQCAtMTQ2NCw3ICsxODM3LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgZ3BhLCBlcnJvcl9jb2RlICYgUEZFUlJfV1JJVEVfTUFTSywKLQkJCSBsYXJnZXBhZ2UsIGdmbiwgcGZuLCBrdm1feDg2X29wcy0+Z2V0X3RkcF9sZXZlbCgpKTsKKwkJCSBsYXJnZXBhZ2UsIGdmbiwgcGZuKTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAKIAlyZXR1cm4gcjsKQEAgLTE0ODksNiArMTg2Miw4IEBACiAJY29udGV4dC0+Z3ZhX3RvX2dwYSA9IG5vbnBhZ2luZ19ndmFfdG9fZ3BhOwogCWNvbnRleHQtPmZyZWUgPSBub25wYWdpbmdfZnJlZTsKIAljb250ZXh0LT5wcmVmZXRjaF9wYWdlID0gbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gbm9ucGFnaW5nX3N5bmNfcGFnZTsKKwljb250ZXh0LT5pbnZscGcgPSBub25wYWdpbmdfaW52bHBnOwogCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSAwOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0gUFQzMkVfUk9PVF9MRVZFTDsKIAljb250ZXh0LT5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKQEAgLTE1MzYsNiArMTkxMSw4IEBACiAJY29udGV4dC0+cGFnZV9mYXVsdCA9IHBhZ2luZzY0X3BhZ2VfZmF1bHQ7CiAJY29udGV4dC0+Z3ZhX3RvX2dwYSA9IHBhZ2luZzY0X2d2YV90b19ncGE7CiAJY29udGV4dC0+cHJlZmV0Y2hfcGFnZSA9IHBhZ2luZzY0X3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gcGFnaW5nNjRfc3luY19wYWdlOworCWNvbnRleHQtPmludmxwZyA9IHBhZ2luZzY0X2ludmxwZzsKIAljb250ZXh0LT5mcmVlID0gcGFnaW5nX2ZyZWU7CiAJY29udGV4dC0+cm9vdF9sZXZlbCA9IGxldmVsOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0gbGV2ZWw7CkBAIC0xNTU3LDYgKzE5MzQsOCBAQAogCWNvbnRleHQtPmd2YV90b19ncGEgPSBwYWdpbmczMl9ndmFfdG9fZ3BhOwogCWNvbnRleHQtPmZyZWUgPSBwYWdpbmdfZnJlZTsKIAljb250ZXh0LT5wcmVmZXRjaF9wYWdlID0gcGFnaW5nMzJfcHJlZmV0Y2hfcGFnZTsKKwljb250ZXh0LT5zeW5jX3BhZ2UgPSBwYWdpbmczMl9zeW5jX3BhZ2U7CisJY29udGV4dC0+aW52bHBnID0gcGFnaW5nMzJfaW52bHBnOwogCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSBQVDMyX1JPT1RfTEVWRUw7CiAJY29udGV4dC0+c2hhZG93X3Jvb3RfbGV2ZWwgPSBQVDMyRV9ST09UX0xFVkVMOwogCWNvbnRleHQtPnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOwpAQCAtMTU3Niw2ICsxOTU1LDggQEAKIAljb250ZXh0LT5wYWdlX2ZhdWx0ID0gdGRwX3BhZ2VfZmF1bHQ7CiAJY29udGV4dC0+ZnJlZSA9IG5vbnBhZ2luZ19mcmVlOwogCWNvbnRleHQtPnByZWZldGNoX3BhZ2UgPSBub25wYWdpbmdfcHJlZmV0Y2hfcGFnZTsKKwljb250ZXh0LT5zeW5jX3BhZ2UgPSBub25wYWdpbmdfc3luY19wYWdlOworCWNvbnRleHQtPmludmxwZyA9IG5vbnBhZ2luZ19pbnZscGc7CiAJY29udGV4dC0+c2hhZG93X3Jvb3RfbGV2ZWwgPSBrdm1feDg2X29wcy0+Z2V0X3RkcF9sZXZlbCgpOwogCWNvbnRleHQtPnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOwogCkBAIC0xNjQ3LDYgKzIwMjgsNyBAQAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJbW11X2FsbG9jX3Jvb3RzKHZjcHUpOworCW1tdV9zeW5jX3Jvb3RzKHZjcHUpOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAlrdm1feDg2X29wcy0+c2V0X2NyMyh2Y3B1LCB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSk7CiAJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CkBAIC0xNzY3LDE1ICsyMTQ5LDEzIEBACiAJCXJldHVybjsKIAlnZm4gPSAoZ3B0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGlzX2xhcmdlX3B0ZShncHRlKSAmJiBpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbikpIHsKIAkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKIAkJdmNwdS0+YXJjaC51cGRhdGVfcHRlLmxhcmdlcGFnZSA9IDE7CiAJfQogCXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5tbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwotCS8qIGltcGxpY2l0IG1iKCksIHdlJ2xsIHJlYWQgYmVmb3JlIFBUIGxvY2sgaXMgdW5sb2NrZWQgKi8KKwlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgewogCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKQEAgLTE4MzcsNyArMjIxNyw3IEBACiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7Ci0JCWlmIChzcC0+Z2ZuICE9IGdmbiB8fCBzcC0+cm9sZS5tZXRhcGh5c2ljYWwpCisJCWlmIChzcC0+Z2ZuICE9IGdmbiB8fCBzcC0+cm9sZS5tZXRhcGh5c2ljYWwgfHwgc3AtPnJvbGUuaW52YWxpZCkKIAkJCWNvbnRpbnVlOwogCQlwdGVfc2l6ZSA9IHNwLT5yb2xlLmdsZXZlbHMgPT0gUFQzMl9ST09UX0xFVkVMID8gNCA6IDg7CiAJCW1pc2FsaWduZWQgPSAob2Zmc2V0IF4gKG9mZnNldCArIGJ5dGVzIC0gMSkpICYgfihwdGVfc2l6ZSAtIDEpOwpAQCAtMTg1NSw3ICsyMjM1LDggQEAKIAkJCSAqLwogCQkJcGdwcmludGsoIm1pc2FsaWduZWQ6IGdwYSAlbGx4IGJ5dGVzICVkIHJvbGUgJXhcbiIsCiAJCQkJIGdwYSwgYnl0ZXMsIHNwLT5yb2xlLndvcmQpOwotCQkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJCWlmIChrdm1fbW11X3phcF9wYWdlKHZjcHUtPmt2bSwgc3ApKQorCQkJCW4gPSBidWNrZXQtPmZpcnN0OwogCQkJKyt2Y3B1LT5rdm0tPnN0YXQubW11X2Zsb29kZWQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTk2OSw2ICsyMzUwLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fbW11X3BhZ2VfZmF1bHQpOwogCit2b2lkIGt2bV9tbXVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQoreworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CisJdmNwdS0+YXJjaC5tbXUuaW52bHBnKHZjcHUsIGd2YSk7CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOworCSsrdmNwdS0+c3RhdC5pbnZscGc7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fbW11X2ludmxwZyk7CisKIHZvaWQga3ZtX2VuYWJsZV90ZHAodm9pZCkKIHsKIAl0ZHBfZW5hYmxlZCA9IHRydWU7CkBAIC0yMDU1LDYgKzI0NDYsNyBAQAogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCisJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCAma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspIHsKIAkJaW50IGk7CiAJCXU2NCAqcHQ7CkBAIC0yMDY4LDYgKzI0NjAsOCBAQAogCQkJaWYgKHB0W2ldICYgUFRfV1JJVEFCTEVfTUFTSykKIAkJCQlwdFtpXSAmPSB+UFRfV1JJVEFCTEVfTUFTSzsKIAl9CisJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CisJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwogfQogCiB2b2lkIGt2bV9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pCkBAIC0yMDc2LDcgKzI0NzAsOSBAQAogCiAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcywgbGluaykKLQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKKwkJaWYgKGt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCkpCisJCQlub2RlID0gY29udGFpbmVyX29mKGt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLm5leHQsCisJCQkJCSAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlLCBsaW5rKTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiAKIAlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKQEAgLTIyOTEsMTggKzI2ODcsMTggQEAKIAkJICBncGFfdCBhZGRyLCB1bnNpZ25lZCBsb25nICpyZXQpCiB7CiAJaW50IHI7Ci0Jc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIGJ1ZmZlcjsKKwlzdHJ1Y3Qga3ZtX3B2X21tdV9vcF9idWZmZXIgKmJ1ZmZlciA9ICZ2Y3B1LT5hcmNoLm1tdV9vcF9idWZmZXI7CiAKLQlidWZmZXIucHRyID0gYnVmZmVyLmJ1ZjsKLQlidWZmZXIubGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNpemVvZiBidWZmZXIuYnVmKTsKLQlidWZmZXIucHJvY2Vzc2VkID0gMDsKKwlidWZmZXItPnB0ciA9IGJ1ZmZlci0+YnVmOworCWJ1ZmZlci0+bGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgYnl0ZXMsIHNpemVvZiBidWZmZXItPmJ1Zik7CisJYnVmZmVyLT5wcm9jZXNzZWQgPSAwOwogCi0JciA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgYWRkciwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbik7CisJciA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgYWRkciwgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQl3aGlsZSAoYnVmZmVyLmxlbikgewotCQlyID0ga3ZtX3B2X21tdV9vcF9vbmUodmNwdSwgJmJ1ZmZlcik7CisJd2hpbGUgKGJ1ZmZlci0+bGVuKSB7CisJCXIgPSBrdm1fcHZfbW11X29wX29uZSh2Y3B1LCBidWZmZXIpOwogCQlpZiAociA8IDApCiAJCQlnb3RvIG91dDsKIAkJaWYgKHIgPT0gMCkKQEAgLTIzMTEsNyArMjcwNyw3IEBACiAKIAlyID0gMTsKIG91dDoKLQkqcmV0ID0gYnVmZmVyLnByb2Nlc3NlZDsKKwkqcmV0ID0gYnVmZmVyLT5wcm9jZXNzZWQ7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggNGE4MTRiZi4uNjEzZWM5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI1LDExICsyNSwxMSBAQAogI2lmIFBUVFlQRSA9PSA2NAogCSNkZWZpbmUgcHRfZWxlbWVudF90IHU2NAogCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjY0CisJI2RlZmluZSBzaGFkb3dfd2Fsa2VyIHNoYWRvd193YWxrZXI2NAogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyM2NF8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUNjRfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSwogCSNkZWZpbmUgUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCi0JI2RlZmluZSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9NQVNLKGxldmVsKSBQVDY0X0xFVkVMX01BU0sobGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9CSVRTIFBUNjRfTEVWRUxfQklUUwogCSNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC00MiwxMSArNDIsMTEgQEAKICNlbGlmIFBUVFlQRSA9PSAzMgogCSNkZWZpbmUgcHRfZWxlbWVudF90IHUzMgogCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjMyCisJI2RlZmluZSBzaGFkb3dfd2Fsa2VyIHNoYWRvd193YWxrZXIzMgogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyMzMl8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUMzJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDMyX0RJUl9CQVNFX0FERFJfTUFTSwogCSNkZWZpbmUgUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUMzJfSU5ERVgoYWRkciwgbGV2ZWwpCi0JI2RlZmluZSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9NQVNLKGxldmVsKSBQVDMyX0xFVkVMX01BU0sobGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9CSVRTIFBUMzJfTEVWRUxfQklUUwogCSNkZWZpbmUgUFRfTUFYX0ZVTExfTEVWRUxTIDIKQEAgLTczLDYgKzczLDE3IEBACiAJdTMyIGVycm9yX2NvZGU7CiB9OwogCitzdHJ1Y3Qgc2hhZG93X3dhbGtlciB7CisJc3RydWN0IGt2bV9zaGFkb3dfd2FsayB3YWxrZXI7CisJc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyOworCWludCB1c2VyX2ZhdWx0OworCWludCB3cml0ZV9mYXVsdDsKKwlpbnQgbGFyZ2VwYWdlOworCWludCAqcHR3cml0ZTsKKwlwZm5fdCBwZm47CisJdTY0ICpzcHRlcDsKK307CisKIHN0YXRpYyBnZm5fdCBncHRlX3RvX2dmbihwdF9lbGVtZW50X3QgZ3B0ZSkKIHsKIAlyZXR1cm4gKGdwdGUgJiBQVF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKQEAgLTkxLDE0ICsxMDIsMTAgQEAKIAlwdF9lbGVtZW50X3QgKnRhYmxlOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXBhZ2UgPSBnZm5fdG9fcGFnZShrdm0sIHRhYmxlX2dmbik7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXRhYmxlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCiAJcmV0ID0gQ01QWENIRygmdGFibGVbaW5kZXhdLCBvcmlnX3B0ZSwgbmV3X3B0ZSk7Ci0KIAlrdW5tYXBfYXRvbWljKHRhYmxlLCBLTV9VU0VSMCk7CiAKIAlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHBhZ2UpOwpAQCAtMjc0LDg2ICsyODEsODkgQEAKIC8qCiAgKiBGZXRjaCBhIHNoYWRvdyBwdGUgZm9yIGEgc3BlY2lmaWMgbGV2ZWwgaW4gdGhlIHBhZ2luZyBoaWVyYXJjaHkuCiAgKi8KK3N0YXRpYyBpbnQgRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl9zdywKKwkJCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwKKwkJCQkgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQoreworCXN0cnVjdCBzaGFkb3dfd2Fsa2VyICpzdyA9CisJCWNvbnRhaW5lcl9vZihfc3csIHN0cnVjdCBzaGFkb3dfd2Fsa2VyLCB3YWxrZXIpOworCXN0cnVjdCBndWVzdF93YWxrZXIgKmd3ID0gc3ctPmd1ZXN0X3dhbGtlcjsKKwl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvd19wYWdlOworCXU2NCBzcHRlOworCWludCBtZXRhcGh5c2ljYWw7CisJZ2ZuX3QgdGFibGVfZ2ZuOworCWludCByOworCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKKworCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCisJICAgIHx8IChzdy0+bGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBhY2Nlc3MsIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAorCQkJICAgICBzdy0+dXNlcl9mYXVsdCwgc3ctPndyaXRlX2ZhdWx0LAorCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAorCQkJICAgICBzdy0+cHR3cml0ZSwgc3ctPmxhcmdlcGFnZSwgZ3ctPmdmbiwgc3ctPnBmbiwKKwkJCSAgICAgZmFsc2UpOworCQlzdy0+c3B0ZXAgPSBzcHRlcDsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApICYmICFpc19sYXJnZV9wdGUoKnNwdGVwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpIHsKKwkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CisJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOworCX0KKworCWlmIChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYgZ3ctPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgeworCQltZXRhcGh5c2ljYWwgPSAxOworCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKKwkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOworCX0gZWxzZSB7CisJCW1ldGFwaHlzaWNhbCA9IDA7CisJCXRhYmxlX2dmbiA9IGd3LT50YWJsZV9nZm5bbGV2ZWwgLSAyXTsKKwl9CisJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgKGd2YV90KWFkZHIsIGxldmVsLTEsCisJCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgYWNjZXNzLCBzcHRlcCk7CisJaWYgKCFtZXRhcGh5c2ljYWwpIHsKKwkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIGd3LT5wdGVfZ3BhW2xldmVsIC0gMl0sCisJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKKwkJaWYgKHIgfHwgY3Vycl9wdGUgIT0gZ3ctPnB0ZXNbbGV2ZWwgLSAyXSkgeworCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHN3LT5wZm4pOworCQkJc3ctPnNwdGVwID0gTlVMTDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJc3B0ZSA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCkgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCisJCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKKwkqc3B0ZXAgPSBzcHRlOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdTY0ICpGTkFNRShmZXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAotCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKndhbGtlciwKKwkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndWVzdF93YWxrZXIsCiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGxhcmdlcGFnZSwKIAkJCSBpbnQgKnB0d3JpdGUsIHBmbl90IHBmbikKIHsKLQlocGFfdCBzaGFkb3dfYWRkcjsKLQlpbnQgbGV2ZWw7Ci0JdTY0ICpzaGFkb3dfZW50OwotCXVuc2lnbmVkIGFjY2VzcyA9IHdhbGtlci0+cHRfYWNjZXNzOworCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpLCB9LAorCQkuZ3Vlc3Rfd2Fsa2VyID0gZ3Vlc3Rfd2Fsa2VyLAorCQkudXNlcl9mYXVsdCA9IHVzZXJfZmF1bHQsCisJCS53cml0ZV9mYXVsdCA9IHdyaXRlX2ZhdWx0LAorCQkubGFyZ2VwYWdlID0gbGFyZ2VwYWdlLAorCQkucHR3cml0ZSA9IHB0d3JpdGUsCisJCS5wZm4gPSBwZm4sCisJfTsKIAotCWlmICghaXNfcHJlc2VudF9wdGUod2Fsa2VyLT5wdGVzW3dhbGtlci0+bGV2ZWwgLSAxXSkpCisJaWYgKCFpc19wcmVzZW50X3B0ZShndWVzdF93YWxrZXItPnB0ZXNbZ3Vlc3Rfd2Fsa2VyLT5sZXZlbCAtIDFdKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzaGFkb3dfYWRkciA9IHZjcHUtPmFyY2gubW11LnJvb3RfaHBhOwotCWxldmVsID0gdmNwdS0+YXJjaC5tbXUuc2hhZG93X3Jvb3RfbGV2ZWw7Ci0JaWYgKGxldmVsID09IFBUMzJFX1JPT1RfTEVWRUwpIHsKLQkJc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFsoYWRkciA+PiAzMCkgJiAzXTsKLQkJc2hhZG93X2FkZHIgJj0gUFQ2NF9CQVNFX0FERFJfTUFTSzsKLQkJLS1sZXZlbDsKLQl9CisJd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGFkZHIpOwogCi0JZm9yICg7IDsgbGV2ZWwtLSkgewotCQl1MzIgaW5kZXggPSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpOwotCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKLQkJdTY0IHNoYWRvd19wdGU7Ci0JCWludCBtZXRhcGh5c2ljYWw7Ci0JCWdmbl90IHRhYmxlX2dmbjsKLQotCQlzaGFkb3dfZW50ID0gKCh1NjQgKilfX3ZhKHNoYWRvd19hZGRyKSkgKyBpbmRleDsKLQkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwpCi0JCQlicmVhazsKLQotCQlpZiAobGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkKLQkJCWJyZWFrOwotCi0JCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNoYWRvd19lbnQpCi0JCSAgICAmJiAhaXNfbGFyZ2VfcHRlKCpzaGFkb3dfZW50KSkgewotCQkJc2hhZG93X2FkZHIgPSAqc2hhZG93X2VudCAmIFBUNjRfQkFTRV9BRERSX01BU0s7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChpc19sYXJnZV9wdGUoKnNoYWRvd19lbnQpKQotCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzaGFkb3dfZW50KTsKLQotCQlpZiAobGV2ZWwgLSAxID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkJICAgICYmIHdhbGtlci0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7Ci0JCQltZXRhcGh5c2ljYWwgPSAxOwotCQkJaWYgKCFpc19kaXJ0eV9wdGUod2Fsa2VyLT5wdGVzW2xldmVsIC0gMV0pKQotCQkJCWFjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7Ci0JCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbih3YWxrZXItPnB0ZXNbbGV2ZWwgLSAxXSk7Ci0JCX0gZWxzZSB7Ci0JCQltZXRhcGh5c2ljYWwgPSAwOwotCQkJdGFibGVfZ2ZuID0gd2Fsa2VyLT50YWJsZV9nZm5bbGV2ZWwgLSAyXTsKLQkJfQotCQlzaGFkb3dfcGFnZSA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgdGFibGVfZ2ZuLCBhZGRyLCBsZXZlbC0xLAotCQkJCQkgICAgICAgbWV0YXBoeXNpY2FsLCBhY2Nlc3MsCi0JCQkJCSAgICAgICBzaGFkb3dfZW50KTsKLQkJaWYgKCFtZXRhcGh5c2ljYWwpIHsKLQkJCWludCByOwotCQkJcHRfZWxlbWVudF90IGN1cnJfcHRlOwotCQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sCi0JCQkJCQkgIHdhbGtlci0+cHRlX2dwYVtsZXZlbCAtIDJdLAotCQkJCQkJICAmY3Vycl9wdGUsIHNpemVvZihjdXJyX3B0ZSkpOwotCQkJaWYgKHIgfHwgY3Vycl9wdGUgIT0gd2Fsa2VyLT5wdGVzW2xldmVsIC0gMl0pIHsKLQkJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJfQotCQlzaGFkb3dfYWRkciA9IF9fcGEoc2hhZG93X3BhZ2UtPnNwdCk7Ci0JCXNoYWRvd19wdGUgPSBzaGFkb3dfYWRkciB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0sKLQkJCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKLQkJc2V0X3NoYWRvd19wdGUoc2hhZG93X2VudCwgc2hhZG93X3B0ZSk7Ci0JfQotCi0JbW11X3NldF9zcHRlKHZjcHUsIHNoYWRvd19lbnQsIGFjY2Vzcywgd2Fsa2VyLT5wdGVfYWNjZXNzICYgYWNjZXNzLAotCQkgICAgIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAotCQkgICAgIHdhbGtlci0+cHRlc1t3YWxrZXItPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKLQkJICAgICBwdHdyaXRlLCBsYXJnZXBhZ2UsIHdhbGtlci0+Z2ZuLCBwZm4sIGZhbHNlKTsKLQotCXJldHVybiBzaGFkb3dfZW50OworCXJldHVybiB3YWxrZXIuc3B0ZXA7CiB9CiAKIC8qCkBAIC00MDcsNyArNDE3LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmICh3YWxrZXIubGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CiAJCWdmbl90IGxhcmdlX2dmbjsKIAkJbGFyZ2VfZ2ZuID0gd2Fsa2VyLmdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKQEAgLTQxNyw5ICs0MjYsOCBAQAogCQl9CiAJfQogCW1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7Ci0JLyogaW1wbGljaXQgbWIoKSwgd2UnbGwgcmVhZCBiZWZvcmUgUFQgbG9jayBpcyB1bmxvY2tlZCAqLworCXNtcF9ybWIoKTsKIAlwZm4gPSBnZm5fdG9fcGZuKHZjcHUtPmt2bSwgd2Fsa2VyLmdmbik7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCS8qIG1taW8gKi8KIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpIHsKQEAgLTQ1Myw2ICs0NjEsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBGTkFNRShzaGFkb3dfaW52bHBnX2VudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfc3csCisJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwKKwkJCQkgICAgICB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCit7CisKKwlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgeworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpCisJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBGTkFNRShpbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQoreworCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSksIH0sCisJfTsKKworCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBndmEpOworfQorCiBzdGF0aWMgZ3BhX3QgRk5BTUUoZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKIHsKIAlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyIHdhbGtlcjsKQEAgLTQ5OSwxMiArNTMyLDY2IEBACiAJfQogfQogCisvKgorICogVXNpbmcgdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIHNwLT5nZm5zIGlzIHNhZmUgYmVjYXVzZToKKyAqIC0gVGhlIHNwdGUgaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdHJ1Y3QgcGFnZSwgc28gdGhlIHBmbiBmb3IgYSBnaXZlbiBnZm4KKyAqICAgY2FuJ3QgY2hhbmdlIHVubGVzcyBhbGwgc3B0ZXMgcG9pbnRpbmcgdG8gaXQgYXJlIG51a2VkIGZpcnN0LgorICogLSBBbGlhcyBjaGFuZ2VzIHphcCB0aGUgZW50aXJlIHNoYWRvdyBjYWNoZS4KKyAqLworc3RhdGljIGludCBGTkFNRShzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJaW50IGksIG9mZnNldCwgbnJfcHJlc2VudDsKKworCW9mZnNldCA9IG5yX3ByZXNlbnQgPSAwOworCisJaWYgKFBUVFlQRSA9PSAzMikKKwkJb2Zmc2V0ID0gc3AtPnJvbGUucXVhZHJhbnQgPDwgUFQ2NF9MRVZFTF9CSVRTOworCisJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyBpKyspIHsKKwkJdW5zaWduZWQgcHRlX2FjY2VzczsKKwkJcHRfZWxlbWVudF90IGdwdGU7CisJCWdwYV90IHB0ZV9ncGE7CisJCWdmbl90IGdmbiA9IHNwLT5nZm5zW2ldOworCisJCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKHNwLT5zcHRbaV0pKQorCQkJY29udGludWU7CisKKwkJcHRlX2dwYSA9IGdmbl90b19ncGEoc3AtPmdmbik7CisJCXB0ZV9ncGEgKz0gKGkrb2Zmc2V0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOworCisJCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCAmZ3B0ZSwKKwkJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gZ2ZuIHx8ICFpc19wcmVzZW50X3B0ZShncHRlKSB8fAorCQkgICAgIShncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKKwkJCXU2NCBub25wcmVzZW50OworCisJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sICZzcC0+c3B0W2ldKTsKKwkJCWlmIChpc19wcmVzZW50X3B0ZShncHRlKSkKKwkJCQlub25wcmVzZW50ID0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGU7CisJCQllbHNlCisJCQkJbm9ucHJlc2VudCA9IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGU7CisJCQlzZXRfc2hhZG93X3B0ZSgmc3AtPnNwdFtpXSwgbm9ucHJlc2VudCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5yX3ByZXNlbnQrKzsKKwkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKKwkJc2V0X3NwdGUodmNwdSwgJnNwLT5zcHRbaV0sIHB0ZV9hY2Nlc3MsIDAsIDAsCisJCQkgaXNfZGlydHlfcHRlKGdwdGUpLCAwLCBnZm4sCisJCQkgc3B0ZV90b19wZm4oc3AtPnNwdFtpXSksIHRydWUsIGZhbHNlKTsKKwl9CisKKwlyZXR1cm4gIW5yX3ByZXNlbnQ7Cit9CisKICN1bmRlZiBwdF9lbGVtZW50X3QKICN1bmRlZiBndWVzdF93YWxrZXIKKyN1bmRlZiBzaGFkb3dfd2Fsa2VyCiAjdW5kZWYgRk5BTUUKICN1bmRlZiBQVF9CQVNFX0FERFJfTUFTSwogI3VuZGVmIFBUX0lOREVYCi0jdW5kZWYgU0hBRE9XX1BUX0lOREVYCiAjdW5kZWYgUFRfTEVWRUxfTUFTSwogI3VuZGVmIFBUX0RJUl9CQVNFX0FERFJfTUFTSwogI3VuZGVmIFBUX0xFVkVMX0JJVFMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA4MjMzYjg2Li45YzRjZTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAia3ZtX3N2bS5oIgogI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgIm1tdS5oIgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM1LDEwICszNiw2IEBACiAjZGVmaW5lIElPUE1fQUxMT0NfT1JERVIgMgogI2RlZmluZSBNU1JQTV9BTExPQ19PUkRFUiAxCiAKLSNkZWZpbmUgREJfVkVDVE9SIDEKLSNkZWZpbmUgVURfVkVDVE9SIDYKLSNkZWZpbmUgR1BfVkVDVE9SIDEzCi0KICNkZWZpbmUgRFI3X0dEX01BU0sgKDEgPDwgMTMpCiAjZGVmaW5lIERSNl9CRF9NQVNLICgxIDw8IDEzKQogCkBAIC00Nyw3ICs0NCw3IEBACiAKICNkZWZpbmUgU1ZNX0ZFQVRVUkVfTlBUICAoMSA8PCAwKQogI2RlZmluZSBTVk1fRkVBVFVSRV9MQlJWICgxIDw8IDEpCi0jZGVmaW5lIFNWTV9ERUFUVVJFX1NWTUwgKDEgPDwgMikKKyNkZWZpbmUgU1ZNX0ZFQVRVUkVfU1ZNTCAoMSA8PCAyKQogCiAjZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH4oMHgzZlVMTCkpCiAKQEAgLTIzNiwxMyArMjMzLDExIEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTk9QXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHN2bS0+bmV4dF9yaXAgLSBzdm0tPnZtY2ItPnNhdmUucmlwID4gTUFYX0lOU1RfU0laRSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaXAgMHglbGx4IG5leHQgMHglbGx4XG4iLAotCQkgICAgICAgX19mdW5jX18sCi0JCSAgICAgICBzdm0tPnZtY2ItPnNhdmUucmlwLAotCQkgICAgICAgc3ZtLT5uZXh0X3JpcCk7CisJaWYgKHN2bS0+bmV4dF9yaXAgLSBrdm1fcmlwX3JlYWQodmNwdSkgPiBNQVhfSU5TVF9TSVpFKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpcCAweCVseCBuZXh0IDB4JWxseFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBrdm1fcmlwX3JlYWQodmNwdSksIHN2bS0+bmV4dF9yaXApOwogCi0JdmNwdS0+YXJjaC5yaXAgPSBzdm0tPnZtY2ItPnNhdmUucmlwID0gc3ZtLT5uZXh0X3JpcDsKKwlrdm1fcmlwX3dyaXRlKHZjcHUsIHN2bS0+bmV4dF9yaXApOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJj0gflNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0s7CiAKIAl2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9IDE7CkBAIC01MzAsNiArNTI1LDcgQEAKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfQ1BVSUQpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WRCkgfAogCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9ITFQpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkxQR0EpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU9JT19QUk9UKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX01TUl9QUk9UKSB8CkBAIC01ODEsNiArNTc3LDcgQEAKIAlzYXZlLT5kcjcgPSAweDQwMDsKIAlzYXZlLT5yZmxhZ3MgPSAyOwogCXNhdmUtPnJpcCA9IDB4MDAwMGZmZjA7CisJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHNhdmUtPnJpcDsKIAogCS8qCiAJICogY3IwIHZhbCBvbiBjcHUgaW5pdCBzaG91bGQgYmUgMHg2MDAwMDAxMCwgd2UgZW5hYmxlIGNwdQpAQCAtNTkzLDcgKzU5MCw4IEBACiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCS8qIFNldHVwIFZNQ0IgZm9yIE5lc3RlZCBQYWdpbmcgKi8KIAkJY29udHJvbC0+bmVzdGVkX2N0bCA9IDE7Ci0JCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1RBU0tfU1dJVENIKTsKKwkJY29udHJvbC0+aW50ZXJjZXB0ICY9IH4oKDFVTEwgPDwgSU5URVJDRVBUX1RBU0tfU1dJVENIKSB8CisJCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9JTlZMUEcpKTsKIAkJY29udHJvbC0+aW50ZXJjZXB0X2V4Y2VwdGlvbnMgJj0gfigxIDw8IFBGX1ZFQ1RPUik7CiAJCWNvbnRyb2wtPmludGVyY2VwdF9jcl9yZWFkICY9IH4oSU5URVJDRVBUX0NSMF9NQVNLfAogCQkJCQkJSU5URVJDRVBUX0NSM19NQVNLKTsKQEAgLTYxNSwxMCArNjEzLDEyIEBACiAJaW5pdF92bWNiKHN2bSk7CiAKIAlpZiAodmNwdS0+dmNwdV9pZCAhPSAwKSB7Ci0JCXN2bS0+dm1jYi0+c2F2ZS5yaXAgPSAwOworCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDApOwogCQlzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSA9IHN2bS0+dmNwdS5hcmNoLnNpcGlfdmVjdG9yIDw8IDEyOwogCQlzdm0tPnZtY2ItPnNhdmUuY3Muc2VsZWN0b3IgPSBzdm0tPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCA4OwogCX0KKwl2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwgPSB+MDsKKwl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSB+MDsKIAogCXJldHVybiAwOwogfQpAQCAtNzIxLDIzICs3MjEsNiBAQAogCXJkdHNjbGwodmNwdS0+YXJjaC5ob3N0X3RzYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKLQl2Y3B1LT5hcmNoLnJpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN2bV9kZWNhY2hlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwotCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0Jc3ZtLT52bWNiLT5zYXZlLnJzcCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXTsKLQlzdm0tPnZtY2ItPnNhdmUucmlwID0gdmNwdS0+YXJjaC5yaXA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN2bV9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLnJmbGFnczsKQEAgLTEwNDAsNyArMTAyMyw3IEBACiAJaWYgKG5wdF9lbmFibGVkKQogCQlzdm1fZmx1c2hfdGxiKCZzdm0tPnZjcHUpOwogCi0JaWYgKGV2ZW50X2luamVjdGlvbikKKwlpZiAoIW5wdF9lbmFibGVkICYmIGV2ZW50X2luamVjdGlvbikKIAkJa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MpOwogCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSk7CiB9CkBAIC0xMTM5LDE0ICsxMTIyLDE0IEBACiAKIHN0YXRpYyBpbnQgaGFsdF9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewotCXN2bS0+bmV4dF9yaXAgPSBzdm0tPnZtY2ItPnNhdmUucmlwICsgMTsKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMTsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCXJldHVybiBrdm1fZW11bGF0ZV9oYWx0KCZzdm0tPnZjcHUpOwogfQogCiBzdGF0aWMgaW50IHZtbWNhbGxfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDM7CisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAlrdm1fZW11bGF0ZV9oeXBlcmNhbGwoJnN2bS0+dmNwdSk7CiAJcmV0dXJuIDE7CkBAIC0xMTc4LDExICsxMTYxLDE4IEBACiAKIHN0YXRpYyBpbnQgY3B1aWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDI7CiAJa3ZtX2VtdWxhdGVfY3B1aWQoJnN2bS0+dmNwdSk7CiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgaW52bHBnX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSwga3ZtX3J1biwgMCwgMCwgMCkgIT0gRU1VTEFURV9ET05FKQorCQlwcl91bmltcGwoJnN2bS0+dmNwdSwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBlbXVsYXRlX29uX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKQEAgLTEyNzMsOSArMTI2Myw5IEBACiAJCUtWTVRSQUNFXzNEKE1TUl9SRUFELCAmc3ZtLT52Y3B1LCBlY3gsICh1MzIpZGF0YSwKIAkJCSAgICAodTMyKShkYXRhID4+IDMyKSwgaGFuZGxlcik7CiAKLQkJc3ZtLT52bWNiLT5zYXZlLnJheCA9IGRhdGEgJiAweGZmZmZmZmZmOworCQlzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gZGF0YSAmIDB4ZmZmZmZmZmY7CiAJCXN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBkYXRhID4+IDMyOwotCQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CisJCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAyOwogCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCX0KIAlyZXR1cm4gMTsKQEAgLTEzNTksMTMgKzEzNDksMTMgQEAKIHN0YXRpYyBpbnQgd3Jtc3JfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1MzIgZWN4ID0gc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKLQl1NjQgZGF0YSA9IChzdm0tPnZtY2ItPnNhdmUucmF4ICYgLTF1KQorCXU2NCBkYXRhID0gKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gJiAtMXUpCiAJCXwgKCh1NjQpKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKIAogCUtWTVRSQUNFXzNEKE1TUl9XUklURSwgJnN2bS0+dmNwdSwgZWN4LCAodTMyKWRhdGEsICh1MzIpKGRhdGEgPj4gMzIpLAogCQkgICAgaGFuZGxlcik7CiAKLQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDI7CiAJaWYgKHN2bV9zZXRfbXNyKCZzdm0tPnZjcHUsIGVjeCwgZGF0YSkpCiAJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7CiAJZWxzZQpAQCAtMTQzNiw3ICsxNDI2LDcgQEAKIAlbU1ZNX0VYSVRfQ1BVSURdCQkJPSBjcHVpZF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lOVkRdICAgICAgICAgICAgICAgICAgICAgICAgID0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0hMVF0JCQkJPSBoYWx0X2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfSU5WTFBHXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0lOVkxQR10JCQk9IGludmxwZ19pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lOVkxQR0FdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfSU9JT10gCQkgIAk9IGlvX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfTVNSXQkJCQk9IG1zcl9pbnRlcmNlcHRpb24sCkBAIC0xNTM4LDYgKzE1MjgsNyBAQAogCiAJS1ZNVFJBQ0VfMUQoSU5KX1ZJUlEsICZzdm0tPnZjcHUsICh1MzIpaXJxLCBoYW5kbGVyKTsKIAorCSsrc3ZtLT52Y3B1LnN0YXQuaXJxX2luamVjdGlvbnM7CiAJY29udHJvbCA9ICZzdm0tPnZtY2ItPmNvbnRyb2w7CiAJY29udHJvbC0+aW50X3ZlY3RvciA9IGlycTsKIAljb250cm9sLT5pbnRfY3RsICY9IH5WX0lOVFJfUFJJT19NQVNLOwpAQCAtMTcxNiw2ICsxNzA3LDEyIEBACiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgfD0gY3I4ICYgVl9UUFJfTUFTSzsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgUiAiciIKKyNlbHNlCisjZGVmaW5lIFIgImUiCisjZW5kaWYKKwogc3RhdGljIHZvaWQgc3ZtX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC0xNzIzLDYgKzE3MjAsMTAgQEAKIAl1MTYgZ3Nfc2VsZWN0b3I7CiAJdTE2IGxkdF9zZWxlY3RvcjsKIAorCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07CisJc3ZtLT52bWNiLT5zYXZlLnJzcCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXTsKKwlzdm0tPnZtY2ItPnNhdmUucmlwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdOworCiAJcHJlX3N2bV9ydW4oc3ZtKTsKIAogCXN5bmNfbGFwaWNfdG9fY3I4KHZjcHUpOwpAQCAtMTc1MCwxOSArMTc1MSwxNCBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWFzbSB2b2xhdGlsZSAoCisJCSJwdXNoICUlIlIiYnA7IFxuXHQiCisJCSJtb3YgJWNbcmJ4XSglW3N2bV0pLCAlJSJSImJ4IFxuXHQiCisJCSJtb3YgJWNbcmN4XSglW3N2bV0pLCAlJSJSImN4IFxuXHQiCisJCSJtb3YgJWNbcmR4XSglW3N2bV0pLCAlJSJSImR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglW3N2bV0pLCAlJSJSInNpIFxuXHQiCisJCSJtb3YgJWNbcmRpXSglW3N2bV0pLCAlJSJSImRpIFxuXHQiCisJCSJtb3YgJWNbcmJwXSglW3N2bV0pLCAlJSJSImJwIFxuXHQiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQkicHVzaCAlJXJicDsgXG5cdCIKLSNlbHNlCi0JCSJwdXNoICUlZWJwOyBcblx0IgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJtb3YgJWNbcmJ4XSglW3N2bV0pLCAlJXJieCBcblx0IgotCQkibW92ICVjW3JjeF0oJVtzdm1dKSwgJSVyY3ggXG5cdCIKLQkJIm1vdiAlY1tyZHhdKCVbc3ZtXSksICUlcmR4IFxuXHQiCi0JCSJtb3YgJWNbcnNpXSglW3N2bV0pLCAlJXJzaSBcblx0IgotCQkibW92ICVjW3JkaV0oJVtzdm1dKSwgJSVyZGkgXG5cdCIKLQkJIm1vdiAlY1tyYnBdKCVbc3ZtXSksICUlcmJwIFxuXHQiCiAJCSJtb3YgJWNbcjhdKCVbc3ZtXSksICAlJXI4ICBcblx0IgogCQkibW92ICVjW3I5XSglW3N2bV0pLCAgJSVyOSAgXG5cdCIKIAkJIm1vdiAlY1tyMTBdKCVbc3ZtXSksICUlcjEwIFxuXHQiCkBAIC0xNzcxLDQxICsxNzY3LDI0IEBACiAJCSJtb3YgJWNbcjEzXSglW3N2bV0pLCAlJXIxMyBcblx0IgogCQkibW92ICVjW3IxNF0oJVtzdm1dKSwgJSVyMTQgXG5cdCIKIAkJIm1vdiAlY1tyMTVdKCVbc3ZtXSksICUlcjE1IFxuXHQiCi0jZWxzZQotCQkibW92ICVjW3JieF0oJVtzdm1dKSwgJSVlYnggXG5cdCIKLQkJIm1vdiAlY1tyY3hdKCVbc3ZtXSksICUlZWN4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglW3N2bV0pLCAlJWVkeCBcblx0IgotCQkibW92ICVjW3JzaV0oJVtzdm1dKSwgJSVlc2kgXG5cdCIKLQkJIm1vdiAlY1tyZGldKCVbc3ZtXSksICUlZWRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglW3N2bV0pLCAlJWVicCBcblx0IgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCS8qIEVudGVyIGd1ZXN0IG1vZGUgKi8KLQkJInB1c2ggJSVyYXggXG5cdCIKLQkJIm1vdiAlY1t2bWNiXSglW3N2bV0pLCAlJXJheCBcblx0IgorCQkicHVzaCAlJSJSImF4IFxuXHQiCisJCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSUiUiJheCBcblx0IgogCQlfX2V4KFNWTV9WTUxPQUQpICJcblx0IgogCQlfX2V4KFNWTV9WTVJVTikgIlxuXHQiCiAJCV9fZXgoU1ZNX1ZNU0FWRSkgIlxuXHQiCi0JCSJwb3AgJSVyYXggXG5cdCIKLSNlbHNlCi0JCS8qIEVudGVyIGd1ZXN0IG1vZGUgKi8KLQkJInB1c2ggJSVlYXggXG5cdCIKLQkJIm1vdiAlY1t2bWNiXSglW3N2bV0pLCAlJWVheCBcblx0IgotCQlfX2V4KFNWTV9WTUxPQUQpICJcblx0IgotCQlfX2V4KFNWTV9WTVJVTikgIlxuXHQiCi0JCV9fZXgoU1ZNX1ZNU0FWRSkgIlxuXHQiCi0JCSJwb3AgJSVlYXggXG5cdCIKLSNlbmRpZgorCQkicG9wICUlIlIiYXggXG5cdCIKIAogCQkvKiBTYXZlIGd1ZXN0IHJlZ2lzdGVycywgbG9hZCBob3N0IHJlZ2lzdGVycyAqLworCQkibW92ICUlIlIiYngsICVjW3JieF0oJVtzdm1dKSBcblx0IgorCQkibW92ICUlIlIiY3gsICVjW3JjeF0oJVtzdm1dKSBcblx0IgorCQkibW92ICUlIlIiZHgsICVjW3JkeF0oJVtzdm1dKSBcblx0IgorCQkibW92ICUlIlIic2ksICVjW3JzaV0oJVtzdm1dKSBcblx0IgorCQkibW92ICUlIlIiZGksICVjW3JkaV0oJVtzdm1dKSBcblx0IgorCQkibW92ICUlIlIiYnAsICVjW3JicF0oJVtzdm1dKSBcblx0IgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJIm1vdiAlJXJieCwgJWNbcmJ4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVyY3gsICVjW3JjeF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmR4LCAlY1tyZHhdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJXJzaSwgJWNbcnNpXSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVyZGksICVjW3JkaV0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmJwLCAlY1tyYnBdKCVbc3ZtXSkgXG5cdCIKIAkJIm1vdiAlJXI4LCAgJWNbcjhdKCVbc3ZtXSkgXG5cdCIKIAkJIm1vdiAlJXI5LCAgJWNbcjldKCVbc3ZtXSkgXG5cdCIKIAkJIm1vdiAlJXIxMCwgJWNbcjEwXSglW3N2bV0pIFxuXHQiCkBAIC0xODE0LDE4ICsxNzkzLDggQEAKIAkJIm1vdiAlJXIxMywgJWNbcjEzXSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyMTQsICVjW3IxNF0oJVtzdm1dKSBcblx0IgogCQkibW92ICUlcjE1LCAlY1tyMTVdKCVbc3ZtXSkgXG5cdCIKLQotCQkicG9wICAlJXJicDsgXG5cdCIKLSNlbHNlCi0JCSJtb3YgJSVlYngsICVjW3JieF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlZWN4LCAlY1tyY3hdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVkeCwgJWNbcmR4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVlc2ksICVjW3JzaV0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlZWRpLCAlY1tyZGldKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVicCwgJWNbcmJwXSglW3N2bV0pIFxuXHQiCi0KLQkJInBvcCAgJSVlYnA7IFxuXHQiCiAjZW5kaWYKKwkJInBvcCAlJSJSImJwIgogCQk6CiAJCTogW3N2bV0iYSIoc3ZtKSwKIAkJICBbdm1jYl0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2bWNiX3BhKSksCkBAIC0xODQ2LDExICsxODE1LDkgQEAKIAkJICBbcjE1XSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9zdm0sIHZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SMTVdKSkKICNlbmRpZgogCQk6ICJjYyIsICJtZW1vcnkiCisJCSwgUiJieCIsIFIiY3giLCBSImR4IiwgUiJzaSIsIFIiZGkiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQksICJyYngiLCAicmN4IiwgInJkeCIsICJyc2kiLCAicmRpIgogCQksICJyOCIsICJyOSIsICJyMTAiLCAicjExIiAsICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiCi0jZWxzZQotCQksICJlYngiLCAiZWN4IiwgImVkeCIgLCAiZXNpIiwgImVkaSIKICNlbmRpZgogCQkpOwogCkBAIC0xODU4LDYgKzE4MjUsOSBAQAogCQlsb2FkX2RiX3JlZ3Moc3ZtLT5ob3N0X2RiX3JlZ3MpOwogCiAJdmNwdS0+YXJjaC5jcjIgPSBzdm0tPnZtY2ItPnNhdmUuY3IyOworCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7CisJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKKwl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzdm0tPnZtY2ItPnNhdmUucmlwOwogCiAJd3JpdGVfZHI2KHN2bS0+aG9zdF9kcjYpOwogCXdyaXRlX2RyNyhzdm0tPmhvc3RfZHI3KTsKQEAgLTE4NzksNiArMTg0OSw4IEBACiAJc3ZtLT5uZXh0X3JpcCA9IDA7CiB9CiAKKyN1bmRlZiBSCisKIHN0YXRpYyB2b2lkIHN2bV9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByb290KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwpAQCAtMTk3Nyw4ICsxOTQ5LDYgQEAKIAkuc2V0X2dkdCA9IHN2bV9zZXRfZ2R0LAogCS5nZXRfZHIgPSBzdm1fZ2V0X2RyLAogCS5zZXRfZHIgPSBzdm1fc2V0X2RyLAotCS5jYWNoZV9yZWdzID0gc3ZtX2NhY2hlX3JlZ3MsCi0JLmRlY2FjaGVfcmVncyA9IHN2bV9kZWNhY2hlX3JlZ3MsCiAJLmdldF9yZmxhZ3MgPSBzdm1fZ2V0X3JmbGFncywKIAkuc2V0X3JmbGFncyA9IHN2bV9zZXRfcmZsYWdzLAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggNzA0MWNjNS4uMjY0M2I0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKKyNpbmNsdWRlICJ4ODYuaCIKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CkBAIC00Nyw2ICs0OSw5IEBACiBzdGF0aWMgaW50IGVuYWJsZV9lcHQgPSAxOwogbW9kdWxlX3BhcmFtKGVuYWJsZV9lcHQsIGJvb2wsIDApOwogCitzdGF0aWMgaW50IGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSA9IDA7Cittb2R1bGVfcGFyYW0oZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlLCBib29sLCAwKTsKKwogc3RydWN0IHZtY3MgewogCXUzMiByZXZpc2lvbl9pZDsKIAl1MzIgYWJvcnQ7CkBAIC01Niw2ICs2MSw3IEBACiBzdHJ1Y3QgdmNwdV92bXggewogCXN0cnVjdCBrdm1fdmNwdSAgICAgICB2Y3B1OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICBsb2NhbF92Y3B1c19saW5rOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBob3N0X3JzcDsKIAlpbnQgICAgICAgICAgICAgICAgICAgbGF1bmNoZWQ7CiAJdTggICAgICAgICAgICAgICAgICAgIGZhaWw7CiAJdTMyICAgICAgICAgICAgICAgICAgIGlkdF92ZWN0b3JpbmdfaW5mbzsKQEAgLTgzLDYgKzg5LDcgQEAKIAkJfSBpcnE7CiAJfSBybW9kZTsKIAlpbnQgdnBpZDsKKwlib29sIGVtdWxhdGlvbl9yZXF1aXJlZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZjcHVfdm14ICp0b192bXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDY4LDcgKzQ3NSw3IEBACiAJaWYgKCF2Y3B1LT5mcHVfYWN0aXZlKQogCQllYiB8PSAxdSA8PCBOTV9WRUNUT1I7CiAJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWViIHw9IDF1IDw8IDE7CisJCWViIHw9IDF1IDw8IERCX1ZFQ1RPUjsKIAlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpCiAJCWViID0gfjA7CiAJaWYgKHZtX25lZWRfZXB0KCkpCkBAIC03MTUsOSArNzIyLDkgQEAKIAl1bnNpZ25lZCBsb25nIHJpcDsKIAl1MzIgaW50ZXJydXB0aWJpbGl0eTsKIAotCXJpcCA9IHZtY3NfcmVhZGwoR1VFU1RfUklQKTsKKwlyaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CiAJcmlwICs9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOKTsKLQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHJpcCk7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCByaXApOwogCiAJLyoKIAkgKiBXZSBlbXVsYXRlZCBhbiBpbnN0cnVjdGlvbiwgc28gdGVtcG9yYXJ5IGludGVycnVwdCBibG9ja2luZwpAQCAtNzMzLDE5ICs3NDAsMzUgQEAKIHN0YXRpYyB2b2lkIHZteF9xdWV1ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwKIAkJCQlib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKKwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKworCWlmIChoYXNfZXJyb3JfY29kZSkKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFLCBlcnJvcl9jb2RlKTsKKworCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgeworCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKKwkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gbnI7CisJCXZteC0+cm1vZGUuaXJxLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKKwkJaWYgKG5yID09IEJQX1ZFQ1RPUikKKwkJCXZteC0+cm1vZGUuaXJxLnJpcCsrOworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAorCQkJICAgICBuciB8IElOVFJfVFlQRV9TT0ZUX0lOVFIKKwkJCSAgICAgfCAoaGFzX2Vycm9yX2NvZGUgPyBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0sgOiAwKQorCQkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CisJCXJldHVybjsKKwl9CisKIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAogCQkgICAgIG5yIHwgSU5UUl9UWVBFX0VYQ0VQVElPTgogCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKIAkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKLQlpZiAoaGFzX2Vycm9yX2NvZGUpCi0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyb3JfY29kZSk7CiB9CiAKIHN0YXRpYyBib29sIHZteF9leGNlcHRpb25faW5qZWN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCi0JcmV0dXJuICEodm14LT5pZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLKTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC05NDcsMjQgKzk3MCwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBTeW5jIHRoZSByc3AgYW5kIHJpcCByZWdpc3RlcnMgaW50byB0aGUgdmNwdSBzdHJ1Y3R1cmUuICBUaGlzIGFsbG93cwotICogcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2VkIGJ5IGluZGV4aW5nIHZjcHUtPmFyY2gucmVncy4KLSAqLwotc3RhdGljIHZvaWQgdmNwdV9sb2FkX3JzcF9yaXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgdm14X2NhY2hlX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpCiB7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gdm1jc19yZWFkbChHVUVTVF9SU1ApOwotCXZjcHUtPmFyY2gucmlwID0gdm1jc19yZWFkbChHVUVTVF9SSVApOwotfQotCi0vKgotICogU3luY3MgcnNwIGFuZCByaXAgYmFjayBpbnRvIHRoZSB2bWNzLiAgU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwb3NzaWJsZQotICogbW9kaWZpY2F0aW9uLgotICovCi1zdGF0aWMgdm9pZCB2Y3B1X3B1dF9yc3BfcmlwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQl2bWNzX3dyaXRlbChHVUVTVF9SU1AsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSk7Ci0Jdm1jc193cml0ZWwoR1VFU1RfUklQLCB2Y3B1LT5hcmNoLnJpcCk7CisJX19zZXRfYml0KHJlZywgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgVkNQVV9SRUdTX1JTUDoKKwkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gdm1jc19yZWFkbChHVUVTVF9SU1ApOworCQlicmVhazsKKwljYXNlIFZDUFVfUkVHU19SSVA6CisJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUklQKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKQEAgLTEwMDcsMTcgKzEwMjUsOSBAQAogCiBzdGF0aWMgaW50IHZteF9nZXRfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MzIgaWR0dl9pbmZvX2ZpZWxkOwotCi0JaWR0dl9pbmZvX2ZpZWxkID0gdm14LT5pZHRfdmVjdG9yaW5nX2luZm87Ci0JaWYgKGlkdHZfaW5mb19maWVsZCAmIElOVFJfSU5GT19WQUxJRF9NQVNLKSB7Ci0JCWlmIChpc19leHRlcm5hbF9pbnRlcnJ1cHQoaWR0dl9pbmZvX2ZpZWxkKSkKLQkJCXJldHVybiBpZHR2X2luZm9fZmllbGQgJiBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSzsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInBlbmRpbmcgZXhjZXB0aW9uOiBub3QgaGFuZGxlZCB5ZXRcbiIpOwotCX0KLQlyZXR1cm4gLTE7CisJaWYgKCF2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yOwogfQogCiBzdGF0aWMgX19pbml0IGludCBjcHVfaGFzX2t2bV9zdXBwb3J0KHZvaWQpCkBAIC0xMDMxLDkgKzEwNDEsOSBAQAogCXU2NCBtc3I7CiAKIAlyZG1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBtc3IpOwotCXJldHVybiAobXNyICYgKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQkgICAgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQotCSAgICA9PSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEOworCXJldHVybiAobXNyICYgKEZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAorCQkgICAgICAgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQorCSAgICA9PSBGRUFUVVJFX0NPTlRST0xfTE9DS0VEOwogCS8qIGxvY2tlZCBidXQgbm90IGVuYWJsZWQgKi8KIH0KIApAQCAtMTA0NSwxNCArMTA1NSwxNCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUodmNwdXNfb25fY3B1LCBjcHUpKTsKIAlyZG1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBvbGQpOwotCWlmICgob2xkICYgKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQkgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQotCSAgICAhPSAoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8Ci0JCU1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKKwlpZiAoKG9sZCAmIChGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJICAgIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKKwkgICAgIT0gKEZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAorCQlGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCkpCiAJCS8qIGVuYWJsZSBhbmQgbG9jayAqLwogCQl3cm1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBvbGQgfAotCQkgICAgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8Ci0JCSAgICAgICBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCk7CisJCSAgICAgICBGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJICAgICAgIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKTsKIAl3cml0ZV9jcjQocmVhZF9jcjQoKSB8IFg4Nl9DUjRfVk1YRSk7IC8qIEZJWE1FOiBub3QgY3B1IGhvdHBsdWcgc2FmZSAqLwogCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVhPTl9SQVgKIAkJICAgICAgOiA6ICJhIigmcGh5c19hZGRyKSwgIm0iKHBoeXNfYWRkcikKQEAgLTExMjAsNyArMTEzMCw4IEBACiAJICAgICAgQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HIHwKIAkgICAgICBDUFVfQkFTRURfVVNFX0lPX0JJVE1BUFMgfAogCSAgICAgIENQVV9CQVNFRF9NT1ZfRFJfRVhJVElORyB8Ci0JICAgICAgQ1BVX0JBU0VEX1VTRV9UU0NfT0ZGU0VUSU5HOworCSAgICAgIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVElORyB8CisJICAgICAgQ1BVX0JBU0VEX0lOVkxQR19FWElUSU5HOwogCW9wdCA9IENQVV9CQVNFRF9UUFJfU0hBRE9XIHwKIAkgICAgICBDUFVfQkFTRURfVVNFX01TUl9CSVRNQVBTIHwKIAkgICAgICBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTOwpAQCAtMTE0OSw5ICsxMTYwLDExIEBACiAJCV9jcHVfYmFzZWRfZXhlY19jb250cm9sICY9IH5DUFVfQkFTRURfVFBSX1NIQURPVzsKICNlbmRpZgogCWlmIChfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgJiBTRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUKSB7Ci0JCS8qIENSMyBhY2Nlc3NlcyBkb24ndCBuZWVkIHRvIGNhdXNlIFZNIEV4aXRzIHdoZW4gRVBUIGVuYWJsZWQgKi8KKwkJLyogQ1IzIGFjY2Vzc2VzIGFuZCBpbnZscGcgZG9uJ3QgbmVlZCB0byBjYXVzZSBWTSBFeGl0cyB3aGVuIEVQVAorCQkgICBlbmFibGVkICovCiAJCW1pbiAmPSB+KENQVV9CQVNFRF9DUjNfTE9BRF9FWElUSU5HIHwKLQkJCSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcpOworCQkJIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORyB8CisJCQkgQ1BVX0JBU0VEX0lOVkxQR19FWElUSU5HKTsKIAkJaWYgKGFkanVzdF92bXhfY29udHJvbHMobWluLCBvcHQsIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUywKIAkJCQkJJl9jcHVfYmFzZWRfZXhlY19jb250cm9sKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTEyODgsNyArMTMwMSw5IEBACiBzdGF0aWMgdm9pZCBlbnRlcl9wbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAorCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMTsKIAl2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSA9IDA7CiAKIAl2bWNzX3dyaXRlbChHVUVTVF9UUl9CQVNFLCB2Y3B1LT5hcmNoLnJtb2RlLnRyLmJhc2UpOwpAQCAtMTMwNSw2ICsxMzIwLDkgQEAKIAogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwogCisJaWYgKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKKwkJcmV0dXJuOworCiAJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0VTLCAmdmNwdS0+YXJjaC5ybW9kZS5lcyk7CiAJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0RTLCAmdmNwdS0+YXJjaC5ybW9kZS5kcyk7CiAJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+YXJjaC5ybW9kZS5ncyk7CkBAIC0xMzQ1LDcgKzEzNjMsOSBAQAogc3RhdGljIHZvaWQgZW50ZXJfcm1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDE7CiAJdmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUgPSAxOwogCiAJdmNwdS0+YXJjaC5ybW9kZS50ci5iYXNlID0gdm1jc19yZWFkbChHVUVTVF9UUl9CQVNFKTsKQEAgLTEzNjcsNiArMTM4Nyw5IEBACiAJdm1jc193cml0ZWwoR1VFU1RfQ1I0LCB2bWNzX3JlYWRsKEdVRVNUX0NSNCkgfCBYODZfQ1I0X1ZNRSk7CiAJdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAodmNwdSk7CiAKKwlpZiAoZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKQorCQlnb3RvIGNvbnRpbnVlX3Jtb2RlOworCiAJdm1jc193cml0ZTE2KEdVRVNUX1NTX1NFTEVDVE9SLCB2bWNzX3JlYWRsKEdVRVNUX1NTX0JBU0UpID4+IDQpOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9TU19MSU1JVCwgMHhmZmZmKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfU1NfQVJfQllURVMsIDB4ZjMpOwpAQCAtMTM4Miw2ICsxNDA1LDcgQEAKIAlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19HUywgJnZjcHUtPmFyY2gucm1vZGUuZ3MpOwogCWZpeF9ybW9kZV9zZWcoVkNQVV9TUkVHX0ZTLCAmdmNwdS0+YXJjaC5ybW9kZS5mcyk7CiAKK2NvbnRpbnVlX3Jtb2RlOgogCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKIAlpbml0X3Jtb2RlKHZjcHUtPmt2bSk7CiB9CkBAIC0xNzE1LDYgKzE3MzksMTg2IEBACiAJdm1jc193cml0ZWwoR1VFU1RfR0RUUl9CQVNFLCBkdC0+YmFzZSk7CiB9CiAKK3N0YXRpYyBib29sIHJtb2RlX3NlZ21lbnRfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQoreworCXN0cnVjdCBrdm1fc2VnbWVudCB2YXI7CisJdTMyIGFyOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZ2YXIsIHNlZyk7CisJYXIgPSB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKCZ2YXIpOworCisJaWYgKHZhci5iYXNlICE9ICh2YXIuc2VsZWN0b3IgPDwgNCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAodmFyLmxpbWl0ICE9IDB4ZmZmZikKKwkJcmV0dXJuIGZhbHNlOworCWlmIChhciAhPSAweGYzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29kZV9zZWdtZW50X3ZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgY3M7CisJdW5zaWduZWQgaW50IGNzX3JwbDsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CisJY3NfcnBsID0gY3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKKworCWlmICh+Y3MudHlwZSAmIChBUl9UWVBFX0NPREVfTUFTS3xBUl9UWVBFX0FDQ0VTU0VTX01BU0spKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFjcy5zKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCEofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9XUklURUFCTEVfTUFTSykpKSB7CisJCWlmIChjcy5kcGwgPiBjc19ycGwpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChjcy50eXBlICYgQVJfVFlQRV9DT0RFX01BU0spIHsKKwkJaWYgKGNzLmRwbCAhPSBjc19ycGwpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmICghY3MucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVE9ETzogQWRkIFJlc2VydmVkIGZpZWxkIGNoZWNrLCB0aGlzJ2xsIHJlcXVpcmUgYSBuZXcgbWVtYmVyIGluIHRoZSBrdm1fc2VnbWVudF9maWVsZCBzdHJ1Y3R1cmUgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc3RhY2tfc2VnbWVudF92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IHNzOworCXVuc2lnbmVkIGludCBzc19ycGw7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOworCXNzX3JwbCA9IHNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CisKKwlpZiAoKHNzLnR5cGUgIT0gMykgfHwgKHNzLnR5cGUgIT0gNykpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXNzLnMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3MuZHBsICE9IHNzX3JwbCkgLyogRFBMICE9IFJQTCAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzcy5wcmVzZW50KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZGF0YV9zZWdtZW50X3ZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgdmFyOworCXVuc2lnbmVkIGludCBycGw7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJnZhciwgc2VnKTsKKwlycGwgPSB2YXIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKKworCWlmICghdmFyLnMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXZhci5wcmVzZW50KQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKH52YXIudHlwZSAmIChBUl9UWVBFX0NPREVfTUFTS3xBUl9UWVBFX1dSSVRFQUJMRV9NQVNLKSkgeworCQlpZiAodmFyLmRwbCA8IHJwbCkgLyogRFBMIDwgUlBMICovCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogVE9ETzogQWRkIG90aGVyIG1lbWJlcnMgdG8ga3ZtX3NlZ21lbnRfZmllbGQgdG8gYWxsb3cgY2hlY2tpbmcgZm9yIG90aGVyIGFjY2VzcworCSAqIHJpZ2h0cyBmbGFncworCSAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB0cl92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IHRyOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZ0ciwgVkNQVV9TUkVHX1RSKTsKKworCWlmICh0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKCh0ci50eXBlICE9IDMpIHx8ICh0ci50eXBlICE9IDExKSkgLyogVE9ETzogQ2hlY2sgaWYgZ3Vlc3QgaXMgaW4gSUEzMmUgbW9kZSAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKCF0ci5wcmVzZW50KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbGR0cl92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IGxkdHI7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmxkdHIsIFZDUFVfU1JFR19MRFRSKTsKKworCWlmIChsZHRyLnNlbGVjdG9yICYgU0VMRUNUT1JfVElfTUFTSykJLyogVEkgPSAxICovCisJCXJldHVybiBmYWxzZTsKKwlpZiAobGR0ci50eXBlICE9IDIpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoIWxkdHIucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNzX3NzX3JwbF9jaGVjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IGNzLCBzczsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CisJdm14X2dldF9zZWdtZW50KHZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKworCXJldHVybiAoKGNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0spID09CisJCSAoc3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSykpOworfQorCisvKgorICogQ2hlY2sgaWYgZ3Vlc3Qgc3RhdGUgaXMgdmFsaWQuIFJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2UgaWYKKyAqIG5vdC4KKyAqIFdlIGFzc3VtZSB0aGF0IHJlZ2lzdGVycyBhcmUgYWx3YXlzIHVzYWJsZQorICovCitzdGF0aWMgYm9vbCBndWVzdF9zdGF0ZV92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJLyogcmVhbCBtb2RlIGd1ZXN0IHN0YXRlIGNoZWNrcyAqLworCWlmICghKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIHsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19DUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfU1MpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0RTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19FUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfRlMpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0dTKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCS8qIHByb3RlY3RlZCBtb2RlIGd1ZXN0IHN0YXRlIGNoZWNrcyAqLworCQlpZiAoIWNzX3NzX3JwbF9jaGVjayh2Y3B1KSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFjb2RlX3NlZ21lbnRfdmFsaWQodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghc3RhY2tfc2VnbWVudF92YWxpZCh2Y3B1KSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFkYXRhX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0RTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFkYXRhX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0VTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFkYXRhX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0ZTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFkYXRhX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0dTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCF0cl92YWxpZCh2Y3B1KSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFsZHRyX3ZhbGlkKHZjcHUpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwkvKiBUT0RPOgorCSAqIC0gQWRkIGNoZWNrcyBvbiBSSVAKKwkgKiAtIEFkZCBjaGVja3Mgb24gUkZMQUdTCisJICovCisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCBpbml0X3Jtb2RlX3RzcyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJZ2ZuX3QgZm4gPSBybW9kZV90c3NfYmFzZShrdm0pID4+IFBBR0VfU0hJRlQ7CkBAIC0xNzI2LDcgKzE5MzAsOCBAQAogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAJZGF0YSA9IFRTU19CQVNFX1NJWkUgKyBUU1NfUkVESVJFQ1RJT05fU0laRTsKLQlyID0ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBmbisrLCAmZGF0YSwgMHg2Niwgc2l6ZW9mKHUxNikpOworCXIgPSBrdm1fd3JpdGVfZ3Vlc3RfcGFnZShrdm0sIGZuKyssICZkYXRhLAorCQkJVFNTX0lPUEJfQkFTRV9PRkZTRVQsIHNpemVvZih1MTYpKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCXIgPSBrdm1fY2xlYXJfZ3Vlc3RfcGFnZShrdm0sIGZuKyssIDAsIFBBR0VfU0laRSk7CkBAIC0xNzg5LDcgKzE5OTQsNyBAQAogCXZtY3Nfd3JpdGUxNihzZi0+c2VsZWN0b3IsIDApOwogCXZtY3Nfd3JpdGVsKHNmLT5iYXNlLCAwKTsKIAl2bWNzX3dyaXRlMzIoc2YtPmxpbWl0LCAweGZmZmYpOwotCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIDB4OTMpOworCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIDB4ZjMpOwogfQogCiBzdGF0aWMgaW50IGFsbG9jX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtKQpAQCAtMTgwOCw5ICsyMDEzLDcgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJa3ZtLT5hcmNoLmFwaWNfYWNjZXNzX3BhZ2UgPSBnZm5fdG9fcGFnZShrdm0sIDB4ZmVlMDApOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiBvdXQ6CiAJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CkBAIC0xODMyLDEwICsyMDM1LDggQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9wYWdldGFibGUgPSBnZm5fdG9fcGFnZShrdm0sCiAJCQlWTVhfRVBUX0lERU5USVRZX1BBR0VUQUJMRV9BRERSID4+IFBBR0VfU0hJRlQpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiBvdXQ6CiAJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CkBAIC0xOTE3LDcgKzIxMTgsOCBAQAogCX0KIAlpZiAoIXZtX25lZWRfZXB0KCkpCiAJCWV4ZWNfY29udHJvbCB8PSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcgfAotCQkJCUNQVV9CQVNFRF9DUjNfTE9BRF9FWElUSU5HOworCQkJCUNQVV9CQVNFRF9DUjNfTE9BRF9FWElUSU5HICB8CisJCQkJQ1BVX0JBU0VEX0lOVkxQR19FWElUSU5HOwogCXZtY3Nfd3JpdGUzMihDUFVfQkFTRURfVk1fRVhFQ19DT05UUk9MLCBleGVjX2NvbnRyb2wpOwogCiAJaWYgKGNwdV9oYXNfc2Vjb25kYXJ5X2V4ZWNfY3RybHMoKSkgewpAQCAtMjAxOSw2ICsyMjIxLDcgQEAKIAl1NjQgbXNyOwogCWludCByZXQ7CiAKKwl2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwgPSB+KCgxIDw8IFZDUFVfUkVHU19SSVApIHwgKDEgPDwgVkNQVV9SRUdTX1JTUCkpOwogCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlpZiAoIWluaXRfcm1vZGUodm14LT52Y3B1Lmt2bSkpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTIwMzYsNiArMjIzOSw3IEBACiAKIAlmeF9pbml0KCZ2bXgtPnZjcHUpOwogCisJc2VnX3NldHVwKFZDUFVfU1JFR19DUyk7CiAJLyoKIAkgKiBHVUVTVF9DU19CQVNFIHNob3VsZCByZWFsbHkgYmUgMHhmZmZmMDAwMCwgYnV0IFZUIHZtODYgbW9kZQogCSAqIGluc2lzdHMgb24gaGF2aW5nIEdVRVNUX0NTX0JBU0UgPT0gR1VFU1RfQ1NfU0VMRUNUT1IgPDwgNC4gIFNpZ2guCkBAIC0yMDQ3LDggKzIyNTEsNiBAQAogCQl2bWNzX3dyaXRlMTYoR1VFU1RfQ1NfU0VMRUNUT1IsIHZteC0+dmNwdS5hcmNoLnNpcGlfdmVjdG9yIDw8IDgpOwogCQl2bWNzX3dyaXRlbChHVUVTVF9DU19CQVNFLCB2bXgtPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCAxMik7CiAJfQotCXZtY3Nfd3JpdGUzMihHVUVTVF9DU19MSU1JVCwgMHhmZmZmKTsKLQl2bWNzX3dyaXRlMzIoR1VFU1RfQ1NfQVJfQllURVMsIDB4OWIpOwogCiAJc2VnX3NldHVwKFZDUFVfU1JFR19EUyk7CiAJc2VnX3NldHVwKFZDUFVfU1JFR19FUyk7CkBAIC0yMDcyLDEwICsyMjc0LDEwIEBACiAKIAl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIDB4MDIpOwogCWlmICh2bXgtPnZjcHUudmNwdV9pZCA9PSAwKQotCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIDB4ZmZmMCk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgMHhmZmYwKTsKIAllbHNlCi0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgMCk7Ci0Jdm1jc193cml0ZWwoR1VFU1RfUlNQLCAwKTsKKwkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgMCk7CiAKIAkvKiB0b2RvOiBkcjAgPSBkcjEgPSBkcjIgPSBkcjMgPSAwOyBkcjYgPSAweGZmZmYwZmYwICovCiAJdm1jc193cml0ZWwoR1VFU1RfRFI3LCAweDQwMCk7CkBAIC0yMTI1LDYgKzIzMjcsOSBAQAogCiAJcmV0ID0gMDsKIAorCS8qIEhBQ0s6IERvbid0IGVuYWJsZSBlbXVsYXRpb24gb24gZ3Vlc3QgYm9vdC9yZXNldCAqLworCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMDsKKwogb3V0OgogCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTIxMzYsMTQgKzIzNDEsMTUgQEAKIAogCUtWTVRSQUNFXzFEKElOSl9WSVJRLCB2Y3B1LCAodTMyKWlycSwgaGFuZGxlcik7CiAKKwkrK3ZjcHUtPnN0YXQuaXJxX2luamVjdGlvbnM7CiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKSB7CiAJCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSB0cnVlOwogCQl2bXgtPnJtb2RlLmlycS52ZWN0b3IgPSBpcnE7Ci0JCXZteC0+cm1vZGUuaXJxLnJpcCA9IHZtY3NfcmVhZGwoR1VFU1RfUklQKTsKKwkJdm14LT5ybW9kZS5pcnEucmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAogCQkJICAgICBpcnEgfCBJTlRSX1RZUEVfU09GVF9JTlRSIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOwogCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5TVFJVQ1RJT05fTEVOLCAxKTsKLQkJdm1jc193cml0ZWwoR1VFU1RfUklQLCB2bXgtPnJtb2RlLmlycS5yaXAgLSAxKTsKKwkJa3ZtX3JpcF93cml0ZSh2Y3B1LCB2bXgtPnJtb2RlLmlycS5yaXAgLSAxKTsKIAkJcmV0dXJuOwogCX0KIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELApAQCAtMjE1NCw3ICsyMzYwLDYgQEAKIHsKIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAogCQkJSU5UUl9UWVBFX05NSV9JTlRSIHwgSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBOTUlfVkVDVE9SKTsKLQl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gMDsKIH0KIAogc3RhdGljIHZvaWQga3ZtX2RvX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjE2Niw3ICsyMzcxLDcgQEAKIAljbGVhcl9iaXQoYml0X2luZGV4LCAmdmNwdS0+YXJjaC5pcnFfcGVuZGluZ1t3b3JkX2luZGV4XSk7CiAJaWYgKCF2Y3B1LT5hcmNoLmlycV9wZW5kaW5nW3dvcmRfaW5kZXhdKQogCQljbGVhcl9iaXQod29yZF9pbmRleCwgJnZjcHUtPmFyY2guaXJxX3N1bW1hcnkpOwotCXZteF9pbmplY3RfaXJxKHZjcHUsIGlycSk7CisJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBpcnEpOwogfQogCiAKQEAgLTIxODAsMTMgKzIzODUsMTIgQEAKIAkJICh2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pICYgMykgPT0gMCk7CiAKIAlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKLQkgICAgdmNwdS0+YXJjaC5pcnFfc3VtbWFyeSAmJgotCSAgICAhKHZtY3NfcmVhZDMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCkgJiBJTlRSX0lORk9fVkFMSURfTUFTSykpCi0JCS8qCi0JCSAqIElmIGludGVycnVwdHMgZW5hYmxlZCwgYW5kIG5vdCBibG9ja2VkIGJ5IHN0aSBvciBtb3Ygc3MuIEdvb2QuCi0JCSAqLworCSAgICB2Y3B1LT5hcmNoLmlycV9zdW1tYXJ5ICYmICF2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKQogCQlrdm1fZG9faW5qZWN0X2lycSh2Y3B1KTsKIAorCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJiB2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKQorCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2Y3B1LT5hcmNoLmludGVycnVwdC5ucik7CisKIAljcHVfYmFzZWRfdm1fZXhlY19jb250cm9sID0gdm1jc19yZWFkMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCk7CiAJaWYgKCF2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJgogCSAgICAodmNwdS0+YXJjaC5pcnFfc3VtbWFyeSB8fCBrdm1fcnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3cpKQpAQCAtMjIzNyw5ICsyNDQxLDYgQEAKIHN0YXRpYyBpbnQgaGFuZGxlX3Jtb2RlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICBpbnQgdmVjLCB1MzIgZXJyX2NvZGUpCiB7Ci0JaWYgKCF2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KIAkvKgogCSAqIEluc3RydWN0aW9uIHdpdGggYWRkcmVzcyBzaXplIG92ZXJyaWRlIHByZWZpeCBvcGNvZGUgMHg2NwogCSAqIENhdXNlIHRoZSAjU1MgZmF1bHQgd2l0aCAwIGVycm9yIGNvZGUgaW4gVk04NiBtb2RlLgpAQCAtMjI0Nyw2ICsyNDQ4LDI1IEBACiAJaWYgKCgodmVjID09IEdQX1ZFQ1RPUikgfHwgKHZlYyA9PSBTU19WRUNUT1IpKSAmJiBlcnJfY29kZSA9PSAwKQogCQlpZiAoZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBOVUxMLCAwLCAwLCAwKSA9PSBFTVVMQVRFX0RPTkUpCiAJCQlyZXR1cm4gMTsKKwkvKgorCSAqIEZvcndhcmQgYWxsIG90aGVyIGV4Y2VwdGlvbnMgdGhhdCBhcmUgdmFsaWQgaW4gcmVhbCBtb2RlLgorCSAqIEZJWE1FOiBCcmVha3MgZ3Vlc3QgZGVidWdnaW5nIGluIHJlYWwgbW9kZSwgbmVlZHMgdG8gYmUgZml4ZWQgd2l0aAorCSAqICAgICAgICB0aGUgcmVxdWlyZWQgZGVidWdnaW5nIGluZnJhc3RydWN0dXJlIHJld29yay4KKwkgKi8KKwlzd2l0Y2ggKHZlYykgeworCWNhc2UgREVfVkVDVE9SOgorCWNhc2UgREJfVkVDVE9SOgorCWNhc2UgQlBfVkVDVE9SOgorCWNhc2UgT0ZfVkVDVE9SOgorCWNhc2UgQlJfVkVDVE9SOgorCWNhc2UgVURfVkVDVE9SOgorCWNhc2UgREZfVkVDVE9SOgorCWNhc2UgU1NfVkVDVE9SOgorCWNhc2UgR1BfVkVDVE9SOgorCWNhc2UgTUZfVkVDVE9SOgorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlYyk7CisJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI4OCw3ICsyNTA4LDcgQEAKIAl9CiAKIAllcnJvcl9jb2RlID0gMDsKLQlyaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJcmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCWlmIChpbnRyX2luZm8gJiBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0spCiAJCWVycm9yX2NvZGUgPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfRVJST1JfQ09ERSk7CiAJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkgewpAQCAtMjI5OCw3ICsyNTE4LDcgQEAKIAkJY3IyID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwogCQlLVk1UUkFDRV8zRChQQUdFX0ZBVUxULCB2Y3B1LCBlcnJvcl9jb2RlLCAodTMyKWNyMiwKIAkJCSAgICAodTMyKSgodTY0KWNyMiA+PiAzMiksIGhhbmRsZXIpOwotCQlpZiAodmVjdF9pbmZvICYgVkVDVE9SSU5HX0lORk9fVkFMSURfTUFTSykKKwkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcgfHwgdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykKIAkJCWt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydCh2Y3B1LCBjcjIpOwogCQlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGNyMiwgZXJyb3JfY29kZSk7CiAJfQpAQCAtMjM4NiwyNyArMjYwNiwyNSBAQAogCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKIAlzd2l0Y2ggKChleGl0X3F1YWxpZmljYXRpb24gPj4gNCkgJiAzKSB7CiAJY2FzZSAwOiAvKiBtb3YgdG8gY3IgKi8KLQkJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsICh1MzIpdmNwdS0+YXJjaC5yZWdzW3JlZ10sCi0JCQkgICAgKHUzMikoKHU2NCl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA+PiAzMiksIGhhbmRsZXIpOworCQlLVk1UUkFDRV8zRChDUl9XUklURSwgdmNwdSwgKHUzMiljciwKKwkJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyksCisJCQkgICAgKHUzMikoKHU2NClrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpID4+IDMyKSwKKwkJCSAgICBoYW5kbGVyKTsKIAkJc3dpdGNoIChjcikgewogCQljYXNlIDA6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCWt2bV9zZXRfY3IwKHZjcHUsIHZjcHUtPmFyY2gucmVnc1tyZWddKTsKKwkJCWt2bV9zZXRfY3IwKHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDM6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCWt2bV9zZXRfY3IzKHZjcHUsIHZjcHUtPmFyY2gucmVnc1tyZWddKTsKKwkJCWt2bV9zZXRfY3IzKHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDQ6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCWt2bV9zZXRfY3I0KHZjcHUsIHZjcHUtPmFyY2gucmVnc1tyZWddKTsKKwkJCWt2bV9zZXRfY3I0KHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDg6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCWt2bV9zZXRfY3I4KHZjcHUsIHZjcHUtPmFyY2gucmVnc1tyZWddKTsKKwkJCWt2bV9zZXRfY3I4KHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCWlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pKQogCQkJCXJldHVybiAxOwpAQCAtMjQxNSw3ICsyNjMzLDYgQEAKIAkJfTsKIAkJYnJlYWs7CiAJY2FzZSAyOiAvKiBjbHRzICovCi0JCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOwogCQl2bXhfZnB1X2RlYWN0aXZhdGUodmNwdSk7CiAJCXZjcHUtPmFyY2guY3IwICY9IH5YODZfQ1IwX1RTOwogCQl2bWNzX3dyaXRlbChDUjBfUkVBRF9TSEFET1csIHZjcHUtPmFyY2guY3IwKTsKQEAgLTI0MjYsMjEgKzI2NDMsMTcgQEAKIAljYXNlIDE6IC8qbW92IGZyb20gY3IqLwogCQlzd2l0Y2ggKGNyKSB7CiAJCWNhc2UgMzoKLQkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOwotCQkJdmNwdS0+YXJjaC5yZWdzW3JlZ10gPSB2Y3B1LT5hcmNoLmNyMzsKLQkJCXZjcHVfcHV0X3JzcF9yaXAodmNwdSk7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2Y3B1LT5hcmNoLmNyMyk7CiAJCQlLVk1UUkFDRV8zRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLAotCQkJCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tyZWddLAotCQkJCSAgICAodTMyKSgodTY0KXZjcHUtPmFyY2gucmVnc1tyZWddID4+IDMyKSwKKwkJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLAorCQkJCSAgICAodTMyKSgodTY0KWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykgPj4gMzIpLAogCQkJCSAgICBoYW5kbGVyKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA4OgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA9IGt2bV9nZXRfY3I4KHZjcHUpOwotCQkJdmNwdV9wdXRfcnNwX3JpcCh2Y3B1KTsKKwkJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCByZWcsIGt2bV9nZXRfY3I4KHZjcHUpKTsKIAkJCUtWTVRSQUNFXzJEKENSX1JFQUQsIHZjcHUsICh1MzIpY3IsCi0JCQkJICAgICh1MzIpdmNwdS0+YXJjaC5yZWdzW3JlZ10sIGhhbmRsZXIpOworCQkJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyksIGhhbmRsZXIpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC0yNDcyLDcgKzI2ODUsNiBAQAogCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKIAlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmIDc7CiAJcmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA4KSAmIDE1OwotCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOwogCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiAxNikgewogCQkvKiBtb3YgZnJvbSBkciAqLwogCQlzd2l0Y2ggKGRyKSB7CkBAIC0yNDg1LDEyICsyNjk3LDExIEBACiAJCWRlZmF1bHQ6CiAJCQl2YWwgPSAwOwogCQl9Ci0JCXZjcHUtPmFyY2gucmVnc1tyZWddID0gdmFsOworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2YWwpOwogCQlLVk1UUkFDRV8yRChEUl9SRUFELCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJfSBlbHNlIHsKIAkJLyogbW92IHRvIGRyICovCiAJfQotCXZjcHVfcHV0X3JzcF9yaXAodmNwdSk7CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyZXR1cm4gMTsKIH0KQEAgLTI1ODMsNiArMjc5NCwxNSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl1NjQgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkNjQoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKKworCWt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBoYW5kbGVfd2JpbnZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKQEAgLTI2OTUsNiArMjkxNSw0MyBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJaW50IGVycjsKKworCXByZWVtcHRfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJd2hpbGUgKCFndWVzdF9zdGF0ZV92YWxpZCh2Y3B1KSkgeworCQllcnIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGt2bV9ydW4sIDAsIDAsIDApOworCisJCXN3aXRjaCAoZXJyKSB7CisJCQljYXNlIEVNVUxBVEVfRE9ORToKKwkJCQlicmVhazsKKwkJCWNhc2UgRU1VTEFURV9ET19NTUlPOgorCQkJCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUodmNwdSwgIm1taW8iKTsKKwkJCQkvKiBUT0RPOiBIYW5kbGUgTU1JTyAqLworCQkJCXJldHVybjsKKwkJCWRlZmF1bHQ6CisJCQkJa3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZSh2Y3B1LCAiZW11bGF0aW9uIGZhaWx1cmUiKTsKKwkJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJc2NoZWR1bGUoKTsKKwl9CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCisJLyogR3Vlc3Qgc3RhdGUgc2hvdWxkIGJlIHZhbGlkIG5vdywgbm8gbW9yZSBlbXVsYXRpb24gc2hvdWxkIGJlIG5lZWRlZCAqLworCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMDsKK30KKwogLyoKICAqIFRoZSBleGl0IGhhbmRsZXJzIHJldHVybiAxIGlmIHRoZSBleGl0IHdhcyBoYW5kbGVkIGZ1bGx5IGFuZCBndWVzdCBleGVjdXRpb24KICAqIG1heSByZXN1bWUuICBPdGhlcndpc2UgdGhleSBzZXQgdGhlIGt2bV9ydW4gcGFyYW1ldGVyIHRvIGluZGljYXRlIHdoYXQgbmVlZHMKQEAgLTI3MTQsNiArMjk3MSw3IEBACiAJW0VYSVRfUkVBU09OX01TUl9XUklURV0gICAgICAgICAgICAgICA9IGhhbmRsZV93cm1zciwKIAlbRVhJVF9SRUFTT05fUEVORElOR19JTlRFUlJVUFRdICAgICAgID0gaGFuZGxlX2ludGVycnVwdF93aW5kb3csCiAJW0VYSVRfUkVBU09OX0hMVF0gICAgICAgICAgICAgICAgICAgICA9IGhhbmRsZV9oYWx0LAorCVtFWElUX1JFQVNPTl9JTlZMUEddCQkgICAgICA9IGhhbmRsZV9pbnZscGcsCiAJW0VYSVRfUkVBU09OX1ZNQ0FMTF0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV92bWNhbGwsCiAJW0VYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTERdICAgICA9IGhhbmRsZV90cHJfYmVsb3dfdGhyZXNob2xkLAogCVtFWElUX1JFQVNPTl9BUElDX0FDQ0VTU10gICAgICAgICAgICAgPSBoYW5kbGVfYXBpY19hY2Nlc3MsCkBAIC0yNzM1LDggKzI5OTMsOCBAQAogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXUzMiB2ZWN0b3JpbmdfaW5mbyA9IHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvOwogCi0JS1ZNVFJBQ0VfM0QoVk1FWElULCB2Y3B1LCBleGl0X3JlYXNvbiwgKHUzMil2bWNzX3JlYWRsKEdVRVNUX1JJUCksCi0JCSAgICAodTMyKSgodTY0KXZtY3NfcmVhZGwoR1VFU1RfUklQKSA+PiAzMiksIGVudHJ5ZXhpdCk7CisJS1ZNVFJBQ0VfM0QoVk1FWElULCB2Y3B1LCBleGl0X3JlYXNvbiwgKHUzMilrdm1fcmlwX3JlYWQodmNwdSksCisJCSAgICAodTMyKSgodTY0KWt2bV9yaXBfcmVhZCh2Y3B1KSA+PiAzMiksIGVudHJ5ZXhpdCk7CiAKIAkvKiBBY2Nlc3MgQ1IzIGRvbid0IGNhdXNlIFZNRXhpdCBpbiBwYWdpbmcgbW9kZSwgc28gd2UgbmVlZAogCSAqIHRvIHN5bmMgd2l0aCBndWVzdCByZWFsIENSMy4gKi8KQEAgLTI4MjksODggKzMwODcsOTIgQEAKIAkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7CiB9CiAKLXN0YXRpYyB2b2lkIHZteF9pbnRyX2Fzc2lzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCB2bXhfY29tcGxldGVfaW50ZXJydXB0cyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MzIgaWR0dl9pbmZvX2ZpZWxkLCBpbnRyX2luZm9fZmllbGQsIGV4aXRfaW50cl9pbmZvX2ZpZWxkOwotCWludCB2ZWN0b3I7CisJdTMyIGV4aXRfaW50cl9pbmZvOworCXUzMiBpZHRfdmVjdG9yaW5nX2luZm87CisJYm9vbCB1bmJsb2NrX25taTsKKwl1OCB2ZWN0b3I7CisJaW50IHR5cGU7CisJYm9vbCBpZHR2X2luZm9fdmFsaWQ7CisJdTMyIGVycm9yOwogCi0JdXBkYXRlX3Rwcl90aHJlc2hvbGQodmNwdSk7Ci0KLQlpbnRyX2luZm9fZmllbGQgPSB2bWNzX3JlYWQzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQpOwotCWV4aXRfaW50cl9pbmZvX2ZpZWxkID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwotCWlkdHZfaW5mb19maWVsZCA9IHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvOwotCWlmIChpbnRyX2luZm9fZmllbGQgJiBJTlRSX0lORk9fVkFMSURfTUFTSykgewotCQlpZiAoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spIHsKLQkJCS8qIFRPRE86IGZhdWx0IHdoZW4gSURUX1ZlY3RvcmluZyAqLwotCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIkZhdWx0IHdoZW4gSURUX1ZlY3RvcmluZ1xuIik7Ci0JCX0KLQkJZW5hYmxlX2ludHJfd2luZG93KHZjcHUpOwotCQlyZXR1cm47Ci0JfQotCWlmICh1bmxpa2VseShpZHR2X2luZm9fZmllbGQgJiBJTlRSX0lORk9fVkFMSURfTUFTSykpIHsKLQkJaWYgKChpZHR2X2luZm9fZmllbGQgJiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spCi0JCSAgICA9PSBJTlRSX1RZUEVfRVhUX0lOVFIKLQkJICAgICYmIHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKSB7Ci0JCQl1OCB2ZWN0ID0gaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0s7Ci0KLQkJCXZteF9pbmplY3RfaXJxKHZjcHUsIHZlY3QpOwotCQkJZW5hYmxlX2ludHJfd2luZG93KHZjcHUpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJS1ZNVFJBQ0VfMUQoUkVERUxJVkVSX0VWVCwgdmNwdSwgaWR0dl9pbmZvX2ZpZWxkLCBoYW5kbGVyKTsKLQotCQkvKgotCQkgKiBTRE0gMzogMjUuNy4xLjIKLQkJICogQ2xlYXIgYml0ICJibG9jayBieSBOTUkiIGJlZm9yZSBWTSBlbnRyeSBpZiBhIE5NSSBkZWxpdmVyeQotCQkgKiBmYXVsdGVkLgotCQkgKi8KLQkJaWYgKChpZHR2X2luZm9fZmllbGQgJiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spCi0JCSAgICA9PSBJTlRSX1RZUEVfTk1JX0lOVFIgJiYgY3B1X2hhc192aXJ0dWFsX25taXMoKSkKLQkJCXZtY3Nfd3JpdGUzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCi0JCQkJdm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSAmCi0JCQkJfkdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKLQotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpZHR2X2luZm9fZmllbGQKLQkJCQkmIH5JTlRSX0lORk9fUkVTVkRfQklUU19NQVNLKTsKLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwKLQkJCQl2bWNzX3JlYWQzMihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTikpOwotCi0JCWlmICh1bmxpa2VseShpZHR2X2luZm9fZmllbGQgJiBJTlRSX0lORk9fREVMSVZFUl9DT0RFX01BU0spKQotCQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFLAotCQkJCXZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSkpOwotCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7Ci0JCXJldHVybjsKLQl9CisJZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiAJaWYgKGNwdV9oYXNfdmlydHVhbF9ubWlzKCkpIHsKKwkJdW5ibG9ja19ubWkgPSAoZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fVU5CTE9DS19OTUkpICE9IDA7CisJCXZlY3RvciA9IGV4aXRfaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwogCQkvKgogCQkgKiBTRE0gMzogMjUuNy4xLjIKIAkJICogUmUtc2V0IGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgdm1leGl0IGNhdXNlZCBieQogCQkgKiBhIGd1ZXN0IElSRVQgZmF1bHQuCiAJCSAqLwotCQlpZiAoKGV4aXRfaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAmJgotCQkgICAgKGV4aXRfaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLKSAhPSA4KQotCQkJdm1jc193cml0ZTMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKLQkJCQl2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pIHwKLQkJCQlHVUVTVF9JTlRSX1NUQVRFX05NSSk7Ci0JCWVsc2UgaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcpIHsKLQkJCWlmICh2bXhfbm1pX2VuYWJsZWQodmNwdSkpCi0JCQkJdm14X2luamVjdF9ubWkodmNwdSk7CisJCWlmICh1bmJsb2NrX25taSAmJiB2ZWN0b3IgIT0gREZfVkVDVE9SKQorCQkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpOworCX0KKworCWlkdF92ZWN0b3JpbmdfaW5mbyA9IHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvOworCWlkdHZfaW5mb192YWxpZCA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0s7CisJdmVjdG9yID0gaWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0s7CisJdHlwZSA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1RZUEVfTUFTSzsKKwlpZiAodm14LT52Y3B1LmFyY2gubm1pX2luamVjdGVkKSB7CisJCS8qCisJCSAqIFNETSAzOiAyNS43LjEuMgorCQkgKiBDbGVhciBiaXQgImJsb2NrIGJ5IE5NSSIgYmVmb3JlIFZNIGVudHJ5IGlmIGEgTk1JIGRlbGl2ZXJ5CisJCSAqIGZhdWx0ZWQuCisJCSAqLworCQlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmIHR5cGUgPT0gSU5UUl9UWVBFX05NSV9JTlRSKQorCQkJdm1jc19jbGVhcl9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKKwkJCQkJR1VFU1RfSU5UUl9TVEFURV9OTUkpOworCQllbHNlCisJCQl2bXgtPnZjcHUuYXJjaC5ubWlfaW5qZWN0ZWQgPSBmYWxzZTsKKwl9CisJa3ZtX2NsZWFyX2V4Y2VwdGlvbl9xdWV1ZSgmdm14LT52Y3B1KTsKKwlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmIHR5cGUgPT0gSU5UUl9UWVBFX0VYQ0VQVElPTikgeworCQlpZiAoaWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fREVMSVZFUl9DT0RFX01BU0spIHsKKwkJCWVycm9yID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19FUlJPUl9DT0RFKTsKKwkJCWt2bV9xdWV1ZV9leGNlcHRpb25fZSgmdm14LT52Y3B1LCB2ZWN0b3IsIGVycm9yKTsKKwkJfSBlbHNlCisJCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZ2bXgtPnZjcHUsIHZlY3Rvcik7CisJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gMDsKKwl9CisJa3ZtX2NsZWFyX2ludGVycnVwdF9xdWV1ZSgmdm14LT52Y3B1KTsKKwlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmIHR5cGUgPT0gSU5UUl9UWVBFX0VYVF9JTlRSKSB7CisJCWt2bV9xdWV1ZV9pbnRlcnJ1cHQoJnZteC0+dmNwdSwgdmVjdG9yKTsKKwkJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgdm14X2ludHJfYXNzaXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1cGRhdGVfdHByX3RocmVzaG9sZCh2Y3B1KTsKKworCWlmIChjcHVfaGFzX3ZpcnR1YWxfbm1pcygpKSB7CisJCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nICYmICF2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgeworCQkJaWYgKHZteF9ubWlfZW5hYmxlZCh2Y3B1KSkgeworCQkJCXZjcHUtPmFyY2gubm1pX3BlbmRpbmcgPSBmYWxzZTsKKwkJCQl2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJaWYgKHZjcHUtPmFyY2gubm1pX2luamVjdGVkKSB7CisJCQl2bXhfaW5qZWN0X25taSh2Y3B1KTsKIAkJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKIAkJCXJldHVybjsKIAkJfQotCiAJfQotCWlmICgha3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKQotCQlyZXR1cm47Ci0JaWYgKHZteF9pcnFfZW5hYmxlZCh2Y3B1KSkgewotCQl2ZWN0b3IgPSBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSk7Ci0JCXZteF9pbmplY3RfaXJxKHZjcHUsIHZlY3Rvcik7Ci0JCWt2bV90aW1lcl9pbnRyX3Bvc3QodmNwdSwgdmVjdG9yKTsKLQl9IGVsc2UKLQkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7CisJaWYgKCF2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nICYmIGt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkgeworCQlpZiAodm14X2lycV9lbmFibGVkKHZjcHUpKQorCQkJa3ZtX3F1ZXVlX2ludGVycnVwdCh2Y3B1LCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQodmNwdSkpOworCQllbHNlCisJCQllbmFibGVfaXJxX3dpbmRvdyh2Y3B1KTsKKwl9CisJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcpIHsKKwkJdm14X2luamVjdF9pcnEodmNwdSwgdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIpOworCQlrdm1fdGltZXJfaW50cl9wb3N0KHZjcHUsIHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yKTsKKwl9CiB9CiAKIC8qCkBAIC0yOTIyLDkgKzMxODQsOSBAQAogc3RhdGljIHZvaWQgZml4dXBfcm1vZGVfaXJxKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogewogCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSAwOwotCWlmICh2bWNzX3JlYWRsKEdVRVNUX1JJUCkgKyAxICE9IHZteC0+cm1vZGUuaXJxLnJpcCkKKwlpZiAoa3ZtX3JpcF9yZWFkKCZ2bXgtPnZjcHUpICsgMSAhPSB2bXgtPnJtb2RlLmlycS5yaXApCiAJCXJldHVybjsKLQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHZteC0+cm1vZGUuaXJxLnJpcCk7CisJa3ZtX3JpcF93cml0ZSgmdm14LT52Y3B1LCB2bXgtPnJtb2RlLmlycS5yaXApOwogCWlmICh2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0spIHsKIAkJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gJj0gflZFQ1RPUklOR19JTkZPX1RZUEVfTUFTSzsKIAkJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gfD0gSU5UUl9UWVBFX0VYVF9JTlRSOwpAQCAtMjkzNiwxMSArMzE5OCwzMCBAQAogCQl8IHZteC0+cm1vZGUuaXJxLnZlY3RvcjsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgUiAiciIKKyNkZWZpbmUgUSAicSIKKyNlbHNlCisjZGVmaW5lIFIgImUiCisjZGVmaW5lIFEgImwiCisjZW5kaWYKKwogc3RhdGljIHZvaWQgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJdTMyIGludHJfaW5mbzsKIAorCS8qIEhhbmRsZSBpbnZhbGlkIGd1ZXN0IHN0YXRlIGluc3RlYWQgb2YgZW50ZXJpbmcgVk1YICovCisJaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkgeworCQloYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZSh2Y3B1LCBrdm1fcnVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2JpdChWQ1BVX1JFR1NfUlNQLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQorCQl2bWNzX3dyaXRlbChHVUVTVF9SU1AsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSk7CisJaWYgKHRlc3RfYml0KFZDUFVfUkVHU19SSVAsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19kaXJ0eSkpCisJCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdKTsKKwogCS8qCiAJICogTG9hZGluZyBndWVzdCBmcHUgbWF5IGhhdmUgY2xlYXJlZCBob3N0IGNyMC50cwogCSAqLwpAQCAtMjk0OCwyNiArMzIyOSwyNSBAQAogCiAJYXNtKAogCQkvKiBTdG9yZSBob3N0IHJlZ2lzdGVycyAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJInB1c2ggJSVyZHg7IHB1c2ggJSVyYnA7IgotCQkicHVzaCAlJXJjeCBcblx0IgotI2Vsc2UKLQkJInB1c2ggJSVlZHg7IHB1c2ggJSVlYnA7IgotCQkicHVzaCAlJWVjeCBcblx0IgotI2VuZGlmCisJCSJwdXNoICUlIlIiZHg7IHB1c2ggJSUiUiJicDsiCisJCSJwdXNoICUlIlIiY3ggXG5cdCIKKwkJImNtcCAlJSJSInNwLCAlY1tob3N0X3JzcF0oJTApIFxuXHQiCisJCSJqZSAxZiBcblx0IgorCQkibW92ICUlIlIic3AsICVjW2hvc3RfcnNwXSglMCkgXG5cdCIKIAkJX19leChBU01fVk1YX1ZNV1JJVEVfUlNQX1JEWCkgIlxuXHQiCisJCSIxOiBcblx0IgogCQkvKiBDaGVjayBpZiB2bWxhdW5jaCBvZiB2bXJlc3VtZSBpcyBuZWVkZWQgKi8KIAkJImNtcGwgJDAsICVjW2xhdW5jaGVkXSglMCkgXG5cdCIKIAkJLyogTG9hZCBndWVzdCByZWdpc3RlcnMuICBEb24ndCBjbG9iYmVyIGZsYWdzLiAqLworCQkibW92ICVjW2NyMl0oJTApLCAlJSJSImF4IFxuXHQiCisJCSJtb3YgJSUiUiJheCwgJSVjcjIgXG5cdCIKKwkJIm1vdiAlY1tyYXhdKCUwKSwgJSUiUiJheCBcblx0IgorCQkibW92ICVjW3JieF0oJTApLCAlJSJSImJ4IFxuXHQiCisJCSJtb3YgJWNbcmR4XSglMCksICUlIlIiZHggXG5cdCIKKwkJIm1vdiAlY1tyc2ldKCUwKSwgJSUiUiJzaSBcblx0IgorCQkibW92ICVjW3JkaV0oJTApLCAlJSJSImRpIFxuXHQiCisJCSJtb3YgJWNbcmJwXSglMCksICUlIlIiYnAgXG5cdCIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJtb3YgJWNbY3IyXSglMCksICUlcmF4IFxuXHQiCi0JCSJtb3YgJSVyYXgsICUlY3IyIFxuXHQiCi0JCSJtb3YgJWNbcmF4XSglMCksICUlcmF4IFxuXHQiCi0JCSJtb3YgJWNbcmJ4XSglMCksICUlcmJ4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglMCksICUlcmR4IFxuXHQiCi0JCSJtb3YgJWNbcnNpXSglMCksICUlcnNpIFxuXHQiCi0JCSJtb3YgJWNbcmRpXSglMCksICUlcmRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglMCksICUlcmJwIFxuXHQiCiAJCSJtb3YgJWNbcjhdKCUwKSwgICUlcjggIFxuXHQiCiAJCSJtb3YgJWNbcjldKCUwKSwgICUlcjkgIFxuXHQiCiAJCSJtb3YgJWNbcjEwXSglMCksICUlcjEwIFxuXHQiCkBAIC0yOTc2LDE4ICszMjU2LDkgQEAKIAkJIm1vdiAlY1tyMTNdKCUwKSwgJSVyMTMgXG5cdCIKIAkJIm1vdiAlY1tyMTRdKCUwKSwgJSVyMTQgXG5cdCIKIAkJIm1vdiAlY1tyMTVdKCUwKSwgJSVyMTUgXG5cdCIKLQkJIm1vdiAlY1tyY3hdKCUwKSwgJSVyY3ggXG5cdCIgLyoga2lsbHMgJTAgKHJjeCkgKi8KLSNlbHNlCi0JCSJtb3YgJWNbY3IyXSglMCksICUlZWF4IFxuXHQiCi0JCSJtb3YgJSVlYXgsICAgJSVjcjIgXG5cdCIKLQkJIm1vdiAlY1tyYXhdKCUwKSwgJSVlYXggXG5cdCIKLQkJIm1vdiAlY1tyYnhdKCUwKSwgJSVlYnggXG5cdCIKLQkJIm1vdiAlY1tyZHhdKCUwKSwgJSVlZHggXG5cdCIKLQkJIm1vdiAlY1tyc2ldKCUwKSwgJSVlc2kgXG5cdCIKLQkJIm1vdiAlY1tyZGldKCUwKSwgJSVlZGkgXG5cdCIKLQkJIm1vdiAlY1tyYnBdKCUwKSwgJSVlYnAgXG5cdCIKLQkJIm1vdiAlY1tyY3hdKCUwKSwgJSVlY3ggXG5cdCIgLyoga2lsbHMgJTAgKGVjeCkgKi8KICNlbmRpZgorCQkibW92ICVjW3JjeF0oJTApLCAlJSJSImN4IFxuXHQiIC8qIGtpbGxzICUwIChlY3gpICovCisKIAkJLyogRW50ZXIgZ3Vlc3QgbW9kZSAqLwogCQkiam5lIC5MbGF1bmNoZWQgXG5cdCIKIAkJX19leChBU01fVk1YX1ZNTEFVTkNIKSAiXG5cdCIKQEAgLTI5OTUsMTUgKzMyNjYsMTUgQEAKIAkJIi5MbGF1bmNoZWQ6ICIgX19leChBU01fVk1YX1ZNUkVTVU1FKSAiXG5cdCIKIAkJIi5Ma3ZtX3ZteF9yZXR1cm46ICIKIAkJLyogU2F2ZSBndWVzdCByZWdpc3RlcnMsIGxvYWQgaG9zdCByZWdpc3RlcnMsIGtlZXAgZmxhZ3MgKi8KKwkJInhjaGcgJTAsICAgICAoJSUiUiJzcCkgXG5cdCIKKwkJIm1vdiAlJSJSImF4LCAlY1tyYXhdKCUwKSBcblx0IgorCQkibW92ICUlIlIiYngsICVjW3JieF0oJTApIFxuXHQiCisJCSJwdXNoIlEiICglJSJSInNwKTsgcG9wIlEiICVjW3JjeF0oJTApIFxuXHQiCisJCSJtb3YgJSUiUiJkeCwgJWNbcmR4XSglMCkgXG5cdCIKKwkJIm1vdiAlJSJSInNpLCAlY1tyc2ldKCUwKSBcblx0IgorCQkibW92ICUlIlIiZGksICVjW3JkaV0oJTApIFxuXHQiCisJCSJtb3YgJSUiUiJicCwgJWNbcmJwXSglMCkgXG5cdCIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJ4Y2hnICUwLCAgICAgKCUlcnNwKSBcblx0IgotCQkibW92ICUlcmF4LCAlY1tyYXhdKCUwKSBcblx0IgotCQkibW92ICUlcmJ4LCAlY1tyYnhdKCUwKSBcblx0IgotCQkicHVzaHEgKCUlcnNwKTsgcG9wcSAlY1tyY3hdKCUwKSBcblx0IgotCQkibW92ICUlcmR4LCAlY1tyZHhdKCUwKSBcblx0IgotCQkibW92ICUlcnNpLCAlY1tyc2ldKCUwKSBcblx0IgotCQkibW92ICUlcmRpLCAlY1tyZGldKCUwKSBcblx0IgotCQkibW92ICUlcmJwLCAlY1tyYnBdKCUwKSBcblx0IgogCQkibW92ICUlcjgsICAlY1tyOF0oJTApIFxuXHQiCiAJCSJtb3YgJSVyOSwgICVjW3I5XSglMCkgXG5cdCIKIAkJIm1vdiAlJXIxMCwgJWNbcjEwXSglMCkgXG5cdCIKQEAgLTMwMTIsMjggKzMyODMsMTYgQEAKIAkJIm1vdiAlJXIxMywgJWNbcjEzXSglMCkgXG5cdCIKIAkJIm1vdiAlJXIxNCwgJWNbcjE0XSglMCkgXG5cdCIKIAkJIm1vdiAlJXIxNSwgJWNbcjE1XSglMCkgXG5cdCIKLQkJIm1vdiAlJWNyMiwgJSVyYXggICBcblx0IgotCQkibW92ICUlcmF4LCAlY1tjcjJdKCUwKSBcblx0IgotCi0JCSJwb3AgICUlcmJwOyBwb3AgICUlcmJwOyBwb3AgICUlcmR4IFxuXHQiCi0jZWxzZQotCQkieGNoZyAlMCwgKCUlZXNwKSBcblx0IgotCQkibW92ICUlZWF4LCAlY1tyYXhdKCUwKSBcblx0IgotCQkibW92ICUlZWJ4LCAlY1tyYnhdKCUwKSBcblx0IgotCQkicHVzaGwgKCUlZXNwKTsgcG9wbCAlY1tyY3hdKCUwKSBcblx0IgotCQkibW92ICUlZWR4LCAlY1tyZHhdKCUwKSBcblx0IgotCQkibW92ICUlZXNpLCAlY1tyc2ldKCUwKSBcblx0IgotCQkibW92ICUlZWRpLCAlY1tyZGldKCUwKSBcblx0IgotCQkibW92ICUlZWJwLCAlY1tyYnBdKCUwKSBcblx0IgotCQkibW92ICUlY3IyLCAlJWVheCAgXG5cdCIKLQkJIm1vdiAlJWVheCwgJWNbY3IyXSglMCkgXG5cdCIKLQotCQkicG9wICUlZWJwOyBwb3AgJSVlYnA7IHBvcCAlJWVkeCBcblx0IgogI2VuZGlmCisJCSJtb3YgJSVjcjIsICUlIlIiYXggICBcblx0IgorCQkibW92ICUlIlIiYXgsICVjW2NyMl0oJTApIFxuXHQiCisKKwkJInBvcCAgJSUiUiJicDsgcG9wICAlJSJSImJwOyBwb3AgICUlIlIiZHggXG5cdCIKIAkJInNldGJlICVjW2ZhaWxdKCUwKSBcblx0IgogCSAgICAgIDogOiAiYyIodm14KSwgImQiKCh1bnNpZ25lZCBsb25nKUhPU1RfUlNQKSwKIAkJW2xhdW5jaGVkXSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIGxhdW5jaGVkKSksCiAJCVtmYWlsXSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIGZhaWwpKSwKKwkJW2hvc3RfcnNwXSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIGhvc3RfcnNwKSksCiAJCVtyYXhdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0pKSwKIAkJW3JieF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSkpLAogCQlbcmN4XSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdKSksCkBAIC0zMDUzLDE0ICszMzEyLDE1IEBACiAjZW5kaWYKIAkJW2NyMl0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2Y3B1LmFyY2guY3IyKSkKIAkgICAgICA6ICJjYyIsICJtZW1vcnkiCisJCSwgUiJieCIsIFIiZGkiLCBSInNpIgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJLCAicmJ4IiwgInJkaSIsICJyc2kiCiAJCSwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IgotI2Vsc2UKLQkJLCAiZWJ4IiwgImVkaSIsICJyc2kiCiAjZW5kaWYKIAkgICAgICApOwogCisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKKwl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOworCiAJdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCWlmICh2bXgtPnJtb2RlLmlycS5wZW5kaW5nKQogCQlmaXh1cF9ybW9kZV9pcnEodm14KTsKQEAgLTMwODAsOCArMzM0MCwxMyBAQAogCQlLVk1UUkFDRV8wRChOTUksIHZjcHUsIGhhbmRsZXIpOwogCQlhc20oImludCAkMiIpOwogCX0KKworCXZteF9jb21wbGV0ZV9pbnRlcnJ1cHRzKHZteCk7CiB9CiAKKyN1bmRlZiBSCisjdW5kZWYgUQorCiBzdGF0aWMgdm9pZCB2bXhfZnJlZV92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKQEAgLTMyMjQsOCArMzQ4OSw3IEBACiAJLnNldF9pZHQgPSB2bXhfc2V0X2lkdCwKIAkuZ2V0X2dkdCA9IHZteF9nZXRfZ2R0LAogCS5zZXRfZ2R0ID0gdm14X3NldF9nZHQsCi0JLmNhY2hlX3JlZ3MgPSB2Y3B1X2xvYWRfcnNwX3JpcCwKLQkuZGVjYWNoZV9yZWdzID0gdmNwdV9wdXRfcnNwX3JpcCwKKwkuY2FjaGVfcmVnID0gdm14X2NhY2hlX3JlZywKIAkuZ2V0X3JmbGFncyA9IHZteF9nZXRfcmZsYWdzLAogCS5zZXRfcmZsYWdzID0gdm14X3NldF9yZmxhZ3MsCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguaCBiL2FyY2gveDg2L2t2bS92bXguaAppbmRleCAxN2UyNTk5Li4zZTAxMGQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmgKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5oCkBAIC0zMzEsOSArMzMxLDYgQEAKIAogI2RlZmluZSBBUl9SRVNFUlZEX01BU0sgMHhmZmZlMGYwMAogCi0jZGVmaW5lIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgICAgICAgICAweDEKLSNkZWZpbmUgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQgIDB4NAotCiAjZGVmaW5lIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9UCTkKICNkZWZpbmUgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVAkxMAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMGQ2ODJmYy4uNGYwNjc3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNCwxMCArNCwxNCBAQAogICogZGVyaXZlZCBmcm9tIGRyaXZlcnMva3ZtL2t2bV9tYWluLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBRdW1yYW5ldCwgSW5jLgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwOAogICoKICAqIEF1dGhvcnM6CiAgKiAgIEF2aSBLaXZpdHkgICA8YXZpQHF1bXJhbmV0LmNvbT4KICAqICAgWWFuaXYgS2FtYXkgIDx5YW5pdkBxdW1yYW5ldC5jb20+CisgKiAgIEFtaXQgU2hhaCAgICA8YW1pdC5zaGFoQHF1bXJhbmV0LmNvbT4KKyAqICAgQmVuLUFtaSBZYXNzb3VyIDxiZW5hbWlAaWwuaWJtLmNvbT4KICAqCiAgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKICAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCkBAIC0xOSwxNCArMjMsMTggQEAKICNpbmNsdWRlICJtbXUuaCIKICNpbmNsdWRlICJpODI1NC5oIgogI2luY2x1ZGUgInRzcy5oIgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpAQCAtNjEsNiArNjksNyBAQAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpOwogCiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKmt2bV94ODZfb3BzOworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3g4Nl9vcHMpOwogCiBzdHJ1Y3Qga3ZtX3N0YXRzX2RlYnVnZnNfaXRlbSBkZWJ1Z2ZzX2VudHJpZXNbXSA9IHsKIAl7ICJwZl9maXhlZCIsIFZDUFVfU1RBVChwZl9maXhlZCkgfSwKQEAgLTgzLDYgKzkyLDcgQEAKIAl7ICJmcHVfcmVsb2FkIiwgVkNQVV9TVEFUKGZwdV9yZWxvYWQpIH0sCiAJeyAiaW5zbl9lbXVsYXRpb24iLCBWQ1BVX1NUQVQoaW5zbl9lbXVsYXRpb24pIH0sCiAJeyAiaW5zbl9lbXVsYXRpb25fZmFpbCIsIFZDUFVfU1RBVChpbnNuX2VtdWxhdGlvbl9mYWlsKSB9LAorCXsgImlycV9pbmplY3Rpb25zIiwgVkNQVV9TVEFUKGlycV9pbmplY3Rpb25zKSB9LAogCXsgIm1tdV9zaGFkb3dfemFwcGVkIiwgVk1fU1RBVChtbXVfc2hhZG93X3phcHBlZCkgfSwKIAl7ICJtbXVfcHRlX3dyaXRlIiwgVk1fU1RBVChtbXVfcHRlX3dyaXRlKSB9LAogCXsgIm1tdV9wdGVfdXBkYXRlZCIsIFZNX1NUQVQobW11X3B0ZV91cGRhdGVkKSB9LApAQCAtOTAsMTIgKzEwMCwxMiBAQAogCXsgIm1tdV9mbG9vZGVkIiwgVk1fU1RBVChtbXVfZmxvb2RlZCkgfSwKIAl7ICJtbXVfcmVjeWNsZWQiLCBWTV9TVEFUKG1tdV9yZWN5Y2xlZCkgfSwKIAl7ICJtbXVfY2FjaGVfbWlzcyIsIFZNX1NUQVQobW11X2NhY2hlX21pc3MpIH0sCisJeyAibW11X3Vuc3luYyIsIFZNX1NUQVQobW11X3Vuc3luYykgfSwKIAl7ICJyZW1vdGVfdGxiX2ZsdXNoIiwgVk1fU1RBVChyZW1vdGVfdGxiX2ZsdXNoKSB9LAogCXsgImxhcmdlcGFnZXMiLCBWTV9TVEFUKGxwYWdlcykgfSwKIAl7IE5VTEwgfQogfTsKIAotCiB1bnNpZ25lZCBsb25nIHNlZ21lbnRfYmFzZSh1MTYgc2VsZWN0b3IpCiB7CiAJc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgZ2R0OwpAQCAtMzUyLDYgKzM2Miw3IEBACiB2b2lkIGt2bV9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpCiB7CiAJaWYgKGNyMyA9PSB2Y3B1LT5hcmNoLmNyMyAmJiAhcGRwdHJzX2NoYW5nZWQodmNwdSkpIHsKKwkJa3ZtX21tdV9zeW5jX3Jvb3RzKHZjcHUpOwogCQlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKIAkJcmV0dXJuOwogCX0KQEAgLTU2NCw3ICs1NzUsNyBAQAogCWh2X2Nsb2NrLT50c2NfdG9fc3lzdGVtX211bCA9IGRpdl9mcmFjKG5zZWNzLCB0cHMzMik7CiAKIAlwcl9kZWJ1ZygiJXM6IHRzY19raHogJXUsIHRzY19zaGlmdCAlZCwgdHNjX211bCAldVxuIiwKLQkJIF9fRlVOQ1RJT05fXywgdHNjX2toeiwgaHZfY2xvY2stPnRzY19zaGlmdCwKKwkJIF9fZnVuY19fLCB0c2Nfa2h6LCBodl9jbG9jay0+dHNjX3NoaWZ0LAogCQkgaHZfY2xvY2stPnRzY190b19zeXN0ZW1fbXVsKTsKIH0KIApAQCAtNjYyLDYgKzY3MywxOCBAQAogCQlwcl91bmltcGwodmNwdSwgIiVzOiBNU1JfSUEzMl9NQ0dfQ1RMIDB4JWxseCwgbm9wXG4iLAogCQkJX19mdW5jX18sIGRhdGEpOwogCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX0RFQlVHQ1RMTVNSOgorCQlpZiAoIWRhdGEpIHsKKwkJCS8qIFdlIHN1cHBvcnQgdGhlIG5vbi1hY3RpdmF0ZWQgY2FzZSBhbHJlYWR5ICovCisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChkYXRhICYgfihERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTE1TUl9CVEYpKSB7CisJCQkvKiBWYWx1ZXMgb3RoZXIgdGhhbiBMQlIgYW5kIEJURiBhcmUgdmVuZG9yLXNwZWNpZmljLAorCQkJICAgdGh1cyByZXNlcnZlZCBhbmQgc2hvdWxkIHRocm93IGEgI0dQICovCisJCQlyZXR1cm4gMTsKKwkJfQorCQlwcl91bmltcGwodmNwdSwgIiVzOiBNU1JfSUEzMl9ERUJVR0NUTE1TUiAweCVsbHgsIG5vcFxuIiwKKwkJCV9fZnVuY19fLCBkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9XUklURToKIAkJYnJlYWs7CkBAIC02OTIsMTAgKzcxNSw4IEBACiAJCS8qIC4uLmJ1dCBjbGVhbiBpdCBiZWZvcmUgZG9pbmcgdGhlIGFjdHVhbCB3cml0ZSAqLwogCQl2Y3B1LT5hcmNoLnRpbWVfb2Zmc2V0ID0gZGF0YSAmIH4oUEFHRV9NQVNLIHwgMSk7CiAKLQkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQl2Y3B1LT5hcmNoLnRpbWVfcGFnZSA9CiAJCQkJZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBkYXRhID4+IFBBR0VfU0hJRlQpOwotCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCiAJCWlmIChpc19lcnJvcl9wYWdlKHZjcHUtPmFyY2gudGltZV9wYWdlKSkgewogCQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbih2Y3B1LT5hcmNoLnRpbWVfcGFnZSk7CkBAIC03NTIsOCArNzczLDE0IEBACiAJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQys4OgogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMTI6CiAJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysxNjoKKwljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzIwOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfRUJMX0NSX1BPV0VST046CisJY2FzZSBNU1JfSUEzMl9ERUJVR0NUTE1TUjoKKwljYXNlIE1TUl9JQTMyX0xBU1RCUkFOQ0hGUk9NSVA6CisJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUDoKKwljYXNlIE1TUl9JQTMyX0xBU1RJTlRGUk9NSVA6CisJY2FzZSBNU1JfSUEzMl9MQVNUSU5UVE9JUDoKIAkJZGF0YSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTVNSX01UUlJjYXA6CkBAIC05MDEsNiArOTI4LDkgQEAKIAljYXNlIEtWTV9DQVBfUFZfTU1VOgogCQlyID0gIXRkcF9lbmFibGVkOwogCQlicmVhazsKKwljYXNlIEtWTV9DQVBfSU9NTVU6CisJCXIgPSBpbnRlbF9pb21tdV9mb3VuZCgpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gMDsKIAkJYnJlYWs7CkBAIC0xMzAzLDI4ICsxMzMzLDMzIEBACiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByOworCXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgKmxhcGljID0gTlVMTDsKIAogCXN3aXRjaCAoaW9jdGwpIHsKIAljYXNlIEtWTV9HRVRfTEFQSUM6IHsKLQkJc3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYzsKKwkJbGFwaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAKLQkJbWVtc2V0KCZsYXBpYywgMCwgc2l6ZW9mIGxhcGljKTsKLQkJciA9IGt2bV92Y3B1X2lvY3RsX2dldF9sYXBpYyh2Y3B1LCAmbGFwaWMpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFsYXBpYykKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X2xhcGljKHZjcHUsIGxhcGljKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmxhcGljLCBzaXplb2YgbGFwaWMpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGxhcGljLCBzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkpKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fU0VUX0xBUElDOiB7Ci0JCXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7Ci0KLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmbGFwaWMsIGFyZ3AsIHNpemVvZiBsYXBpYykpCisJCWxhcGljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFsYXBpYykKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZjcHVfaW9jdGxfc2V0X2xhcGljKHZjcHUsICZsYXBpYyk7OworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGxhcGljLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdmNwdV9pb2N0bF9zZXRfbGFwaWModmNwdSwgbGFwaWMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTE0MjIsNiArMTQ1Nyw4IEBACiAJCXIgPSAtRUlOVkFMOwogCX0KIG91dDoKKwlpZiAobGFwaWMpCisJCWtmcmVlKGxhcGljKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTYzMCw2ICsxNjY3LDE1IEBACiAJc3RydWN0IGt2bSAqa3ZtID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByID0gLUVJTlZBTDsKKwkvKgorCSAqIFRoaXMgdW5pb24gbWFrZXMgaXQgY29tcGxldGVseSBleHBsaWNpdCB0byBnY2MtMy54CisJICogdGhhdCB0aGVzZSB0d28gdmFyaWFibGVzJyBzdGFjayB1c2FnZSBzaG91bGQgYmUKKwkgKiBjb21iaW5lZCwgbm90IGFkZGVkIHRvZ2V0aGVyLgorCSAqLworCXVuaW9uIHsKKwkJc3RydWN0IGt2bV9waXRfc3RhdGUgcHM7CisJCXN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIGFsaWFzOworCX0gdTsKIAogCXN3aXRjaCAoaW9jdGwpIHsKIAljYXNlIEtWTV9TRVRfVFNTX0FERFI6CkBAIC0xNjYxLDE3ICsxNzA3LDE0IEBACiAJY2FzZSBLVk1fR0VUX05SX01NVV9QQUdFUzoKIAkJciA9IGt2bV92bV9pb2N0bF9nZXRfbnJfbW11X3BhZ2VzKGt2bSk7CiAJCWJyZWFrOwotCWNhc2UgS1ZNX1NFVF9NRU1PUllfQUxJQVM6IHsKLQkJc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgYWxpYXM7Ci0KKwljYXNlIEtWTV9TRVRfTUVNT1JZX0FMSUFTOgogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbGlhcywgYXJncCwgc2l6ZW9mIGFsaWFzKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LmFsaWFzLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpKSkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfYWxpYXMoa3ZtLCAmYWxpYXMpOworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfYWxpYXMoa3ZtLCAmdS5hbGlhcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwotCX0KIAljYXNlIEtWTV9DUkVBVEVfSVJRQ0hJUDoKIAkJciA9IC1FTk9NRU07CiAJCWt2bS0+YXJjaC52cGljID0ga3ZtX2NyZWF0ZV9waWMoa3ZtKTsKQEAgLTE2OTksMTMgKzE3NDIsNyBAQAogCQkJZ290byBvdXQ7CiAJCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CiAJCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCQkJaWYgKGlycV9ldmVudC5pcnEgPCAxNikKLQkJCQlrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwKLQkJCQkJaXJxX2V2ZW50LmlycSwKLQkJCQkJaXJxX2V2ZW50LmxldmVsKTsKLQkJCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywKLQkJCQkJaXJxX2V2ZW50LmlycSwKLQkJCQkJaXJxX2V2ZW50LmxldmVsKTsKKwkJCWt2bV9zZXRfaXJxKGt2bSwgaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAkJCXIgPSAwOwogCQl9CkBAIC0xNzEzLDY1ICsxNzUwLDc3IEBACiAJfQogCWNhc2UgS1ZNX0dFVF9JUlFDSElQOiB7CiAJCS8qIDA6IFBJQyBtYXN0ZXIsIDE6IFBJQyBzbGF2ZSwgMjogSU9BUElDICovCi0JCXN0cnVjdCBrdm1faXJxY2hpcCBjaGlwOworCQlzdHJ1Y3Qga3ZtX2lycWNoaXAgKmNoaXAgPSBrbWFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCi0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmNoaXAsIGFyZ3AsIHNpemVvZiBjaGlwKSkKKwkJciA9IC1FTk9NRU07CisJCWlmICghY2hpcCkKIAkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGNoaXAsIGFyZ3AsIHNpemVvZiAqY2hpcCkpCisJCQlnb3RvIGdldF9pcnFjaGlwX291dDsKIAkJciA9IC1FTlhJTzsKIAkJaWYgKCFpcnFjaGlwX2luX2tlcm5lbChrdm0pKQotCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fdm1faW9jdGxfZ2V0X2lycWNoaXAoa3ZtLCAmY2hpcCk7CisJCQlnb3RvIGdldF9pcnFjaGlwX291dDsKKwkJciA9IGt2bV92bV9pb2N0bF9nZXRfaXJxY2hpcChrdm0sIGNoaXApOworCQlpZiAocikKKwkJCWdvdG8gZ2V0X2lycWNoaXBfb3V0OworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBjaGlwLCBzaXplb2YgKmNoaXApKQorCQkJZ290byBnZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSAwOworCWdldF9pcnFjaGlwX291dDoKKwkJa2ZyZWUoY2hpcCk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7Ci0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZjaGlwLCBzaXplb2YgY2hpcCkpCi0JCQlnb3RvIG91dDsKLQkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfSVJRQ0hJUDogewogCQkvKiAwOiBQSUMgbWFzdGVyLCAxOiBQSUMgc2xhdmUsIDI6IElPQVBJQyAqLwotCQlzdHJ1Y3Qga3ZtX2lycWNoaXAgY2hpcDsKKwkJc3RydWN0IGt2bV9pcnFjaGlwICpjaGlwID0ga21hbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGlwLCBhcmdwLCBzaXplb2YgY2hpcCkpCisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWNoaXApCiAJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihjaGlwLCBhcmdwLCBzaXplb2YgKmNoaXApKQorCQkJZ290byBzZXRfaXJxY2hpcF9vdXQ7CiAJCXIgPSAtRU5YSU87CiAJCWlmICghaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkKLQkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9pcnFjaGlwKGt2bSwgJmNoaXApOworCQkJZ290byBzZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfc2V0X2lycWNoaXAoa3ZtLCBjaGlwKTsKKwkJaWYgKHIpCisJCQlnb3RvIHNldF9pcnFjaGlwX291dDsKKwkJciA9IDA7CisJc2V0X2lycWNoaXBfb3V0OgorCQlrZnJlZShjaGlwKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKLQkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9HRVRfUElUOiB7Ci0JCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwcywgYXJncCwgc2l6ZW9mIHBzKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LnBzLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9waXRfc3RhdGUpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVOWElPOwogCQlpZiAoIWt2bS0+YXJjaC52cGl0KQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fdm1faW9jdGxfZ2V0X3BpdChrdm0sICZwcyk7CisJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X3BpdChrdm0sICZ1LnBzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBzLCBzaXplb2YgcHMpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ1LnBzLCBzaXplb2Yoc3RydWN0IGt2bV9waXRfc3RhdGUpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX1NFVF9QSVQ6IHsKLQkJc3RydWN0IGt2bV9waXRfc3RhdGUgcHM7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnBzLCBhcmdwLCBzaXplb2YgcHMpKQorCQlpZiAoY29weV9mcm9tX3VzZXIoJnUucHMsIGFyZ3AsIHNpemVvZiB1LnBzKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVOWElPOwogCQlpZiAoIWt2bS0+YXJjaC52cGl0KQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fdm1faW9jdGxfc2V0X3BpdChrdm0sICZwcyk7CisJCXIgPSBrdm1fdm1faW9jdGxfc2V0X3BpdChrdm0sICZ1LnBzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0yMDE4LDkgKzIwNjcsNyBAQAogCiAJCXZhbCA9ICoodTY0ICopbmV3OwogCi0JCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOwotCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCiAJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQlzZXRfNjRiaXQoKHU2NCAqKShrYWRkciArIG9mZnNldF9pbl9wYWdlKGdwYSkpLCB2YWwpOwpAQCAtMjA0MCw2ICsyMDg3LDcgQEAKIAogaW50IGVtdWxhdGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkcmVzcykKIHsKKwlrdm1fbW11X2ludmxwZyh2Y3B1LCBhZGRyZXNzKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIApAQCAtMjA4MCw3ICsyMTI4LDcgQEAKIHZvaWQga3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKmNvbnRleHQpCiB7CiAJdTggb3Bjb2Rlc1s0XTsKLQl1bnNpZ25lZCBsb25nIHJpcCA9IHZjcHUtPmFyY2gucmlwOworCXVuc2lnbmVkIGxvbmcgcmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcmlwX2xpbmVhcjsKIAogCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQpAQCAtMjEwMiw2ICsyMTUwLDE0IEBACiAJLmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLAogfTsKIAorc3RhdGljIHZvaWQgY2FjaGVfYWxsX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU1ApOworCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SSVApOworCXZjcHUtPmFyY2gucmVnc19kaXJ0eSA9IH4wOworfQorCiBpbnQgZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQlzdHJ1Y3Qga3ZtX3J1biAqcnVuLAogCQkJdW5zaWduZWQgbG9uZyBjcjIsCkBAIC0yMTExLDggKzIxNjcsMTUgQEAKIAlpbnQgcjsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjOwogCisJa3ZtX2NsZWFyX2V4Y2VwdGlvbl9xdWV1ZSh2Y3B1KTsKIAl2Y3B1LT5hcmNoLm1taW9fZmF1bHRfY3IyID0gY3IyOwotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOworCS8qCisJICogVE9ETzogZml4IHg4Nl9lbXVsYXRlLmMgdG8gdXNlIGd1ZXN0X3JlYWQvd3JpdGVfcmVnaXN0ZXIKKwkgKiBpbnN0ZWFkIG9mIGRpcmVjdCAtPnJlZ3MgYWNjZXNzZXMsIGNhbiBzYXZlIGh1bmRyZWQgY3ljbGVzCisJICogb24gSW50ZWwgZm9yIGluc3RydWN0aW9ucyB0aGF0IGRvbid0IHJlYWQvY2hhbmdlIFJTUCwgZm9yCisJICogZm9yIGV4YW1wbGUuCisJICovCisJY2FjaGVfYWxsX3JlZ3ModmNwdSk7CiAKIAl2Y3B1LT5tbWlvX2lzX3dyaXRlID0gMDsKIAl2Y3B1LT5hcmNoLnBpby5zdHJpbmcgPSAwOwpAQCAtMjE3Miw3ICsyMjM1LDYgQEAKIAkJcmV0dXJuIEVNVUxBVEVfRE9fTU1JTzsKIAl9CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOwogCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyk7CiAKIAlpZiAodmNwdS0+bW1pb19pc193cml0ZSkgewpAQCAtMjIyNSwyMCArMjI4NywxOSBAQAogCXN0cnVjdCBrdm1fcGlvX3JlcXVlc3QgKmlvID0gJnZjcHUtPmFyY2gucGlvOwogCWxvbmcgZGVsdGE7CiAJaW50IHI7Ci0KLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAogCWlmICghaW8tPnN0cmluZykgewotCQlpZiAoaW8tPmluKQotCQkJbWVtY3B5KCZ2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0sIHZjcHUtPmFyY2gucGlvX2RhdGEsCi0JCQkgICAgICAgaW8tPnNpemUpOworCQlpZiAoaW8tPmluKSB7CisJCQl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwkJCW1lbWNweSgmdmFsLCB2Y3B1LT5hcmNoLnBpb19kYXRhLCBpby0+c2l6ZSk7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgdmFsKTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmIChpby0+aW4pIHsKIAkJCXIgPSBwaW9fY29weV9kYXRhKHZjcHUpOwotCQkJaWYgKHIpIHsKLQkJCQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKKwkJCWlmIChyKQogCQkJCXJldHVybiByOwotCQkJfQogCQl9CiAKIAkJZGVsdGEgPSAxOwpAQCAtMjI0OCwxOSArMjMwOSwyNCBAQAogCQkJICogVGhlIHNpemUgb2YgdGhlIHJlZ2lzdGVyIHNob3VsZCByZWFsbHkgZGVwZW5kIG9uCiAJCQkgKiBjdXJyZW50IGFkZHJlc3Mgc2l6ZS4KIAkJCSAqLwotCQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdIC09IGRlbHRhOworCQkJdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJCQl2YWwgLT0gZGVsdGE7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgdmFsKTsKIAkJfQogCQlpZiAoaW8tPmRvd24pCiAJCQlkZWx0YSA9IC1kZWx0YTsKIAkJZGVsdGEgKj0gaW8tPnNpemU7Ci0JCWlmIChpby0+aW4pCi0JCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV0gKz0gZGVsdGE7Ci0JCWVsc2UKLQkJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSArPSBkZWx0YTsKKwkJaWYgKGlvLT5pbikgeworCQkJdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JESSk7CisJCQl2YWwgKz0gZGVsdGE7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JESSwgdmFsKTsKKwkJfSBlbHNlIHsKKwkJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOworCQkJdmFsICs9IGRlbHRhOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHZhbCk7CisJCX0KIAl9CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOwotCiAJaW8tPmNvdW50IC09IGlvLT5jdXJfY291bnQ7CiAJaW8tPmN1cl9jb3VudCA9IDA7CiAKQEAgLTIzMTMsNiArMjM3OSw3IEBACiAJCSAgaW50IHNpemUsIHVuc2lnbmVkIHBvcnQpCiB7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgKnBpb19kZXY7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU87CiAJdmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPSBpbiA/IEtWTV9FWElUX0lPX0lOIDogS1ZNX0VYSVRfSU9fT1VUOwpAQCAtMjMzMyw4ICsyNDAwLDggQEAKIAkJS1ZNVFJBQ0VfMkQoSU9fV1JJVEUsIHZjcHUsIHZjcHUtPnJ1bi0+aW8ucG9ydCwgKHUzMilzaXplLAogCQkJICAgIGhhbmRsZXIpOwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JbWVtY3B5KHZjcHUtPmFyY2gucGlvX2RhdGEsICZ2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0sIDQpOworCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCAmdmFsLCA0KTsKIAogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCkBAIC0yNDkyLDExICsyNTU5LDYgQEAKIAlLVk1UUkFDRV8wRChITFQsIHZjcHUsIGhhbmRsZXIpOwogCWlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pKSB7CiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfSEFMVEVEOwotCQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKLQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSAhPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpCi0JCQlyZXR1cm4gLUVJTlRSOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSExUOwpAQCAtMjUxOSwxMyArMjU4MSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgbnIsIGEwLCBhMSwgYTIsIGEzLCByZXQ7CiAJaW50IHIgPSAxOwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0KLQluciA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXTsKLQlhMCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXTsKLQlhMSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKLQlhMiA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXTsKLQlhMyA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXTsKKwluciA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWEwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCWCk7CisJYTEgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlhMiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpOworCWEzID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JTSSk7CiAKIAlLVk1UUkFDRV8xRChWTU1DQUxMLCB2Y3B1LCAodTMyKW5yLCBoYW5kbGVyKTsKIApAQCAtMjU0OCw4ICsyNjA4LDcgQEAKIAkJcmV0ID0gLUtWTV9FTk9TWVM7CiAJCWJyZWFrOwogCX0KLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSByZXQ7Ci0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgcmV0KTsKIAkrK3ZjcHUtPnN0YXQuaHlwZXJjYWxsczsKIAlyZXR1cm4gcjsKIH0KQEAgLTI1NTksNiArMjYxOCw3IEBACiB7CiAJY2hhciBpbnN0cnVjdGlvblszXTsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAogCiAJLyoKQEAgLTI1NjgsOSArMjYyOCw4IEBACiAJICovCiAJa3ZtX21tdV96YXBfYWxsKHZjcHUtPmt2bSk7CiAKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKIAlrdm1feDg2X29wcy0+cGF0Y2hfaHlwZXJjYWxsKHZjcHUsIGluc3RydWN0aW9uKTsKLQlpZiAoZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQodmNwdS0+YXJjaC5yaXAsIGluc3RydWN0aW9uLCAzLCB2Y3B1KQorCWlmIChlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChyaXAsIGluc3RydWN0aW9uLCAzLCB2Y3B1KQogCSAgICAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXQgPSAtRUZBVUxUOwogCkBAIC0yNzAwLDEzICsyNzU5LDEyIEBACiAJdTMyIGZ1bmN0aW9uLCBpbmRleDsKIAlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZSwgKmJlc3Q7CiAKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKLQlmdW5jdGlvbiA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXTsKLQlpbmRleCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IDA7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gMDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSAwOworCWZ1bmN0aW9uID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJaW5kZXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgMCk7CiAJYmVzdCA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2guY3B1aWRfbmVudDsgKytpKSB7CiAJCWUgPSAmdmNwdS0+YXJjaC5jcHVpZF9lbnRyaWVzW2ldOwpAQCAtMjcyNCwxOCArMjc4MiwxNyBAQAogCQkJCWJlc3QgPSBlOwogCX0KIAlpZiAoYmVzdCkgewotCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBiZXN0LT5lYXg7Ci0JCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IGJlc3QtPmVieDsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gYmVzdC0+ZWN4OwotCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBiZXN0LT5lZHg7CisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCBiZXN0LT5lYXgpOworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgYmVzdC0+ZWJ4KTsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIGJlc3QtPmVjeCk7CisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCBiZXN0LT5lZHgpOwogCX0KLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOwogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCUtWTVRSQUNFXzVEKENQVUlELCB2Y3B1LCBmdW5jdGlvbiwKLQkJICAgICh1MzIpdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdLAotCQkgICAgKHUzMil2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0sCi0JCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSwKLQkJICAgICh1MzIpdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdLCBoYW5kbGVyKTsKKwkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCksCisJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpLAorCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKSwKKwkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCksIGhhbmRsZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2VtdWxhdGVfY3B1aWQpOwogCkBAIC0yNzc2LDkgKzI4MzMsNyBAQAogCWlmICghYXBpYyB8fCAhYXBpYy0+dmFwaWNfYWRkcikKIAkJcmV0dXJuOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXBhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGFwaWMtPnZhcGljX2FkZHIgPj4gUEFHRV9TSElGVCk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfcGFnZSA9IHBhZ2U7CiB9CkBAIC0yNzk2LDI4ICsyODUxLDEwIEBACiAJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCitzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlpbnQgcjsKIAotCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9TSVBJX1JFQ0VJVkVEKSkgewotCQlwcl9kZWJ1ZygidmNwdSAlZCByZWNlaXZlZCBzaXBpIHdpdGggdmVjdG9yICMgJXhcbiIsCi0JCSAgICAgICB2Y3B1LT52Y3B1X2lkLCB2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yKTsKLQkJa3ZtX2xhcGljX3Jlc2V0KHZjcHUpOwotCQlyID0ga3ZtX3g4Nl9vcHMtPnZjcHVfcmVzZXQodmNwdSk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7Ci0JfQotCi0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCXZhcGljX2VudGVyKHZjcHUpOwotCi1wcmVlbXB0ZWQ6Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bV94ODZfb3BzLT5ndWVzdF9kZWJ1Z19wcmUodmNwdSk7Ci0KLWFnYWluOgogCWlmICh2Y3B1LT5yZXF1ZXN0cykKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01NVV9SRUxPQUQsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlrdm1fbW11X3VubG9hZCh2Y3B1KTsKQEAgLTI4MjksNiArMjg2Niw4IEBACiAJaWYgKHZjcHUtPnJlcXVlc3RzKSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NSUdSQVRFX1RJTUVSLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJX19rdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfU1lOQywgJnZjcHUtPnJlcXVlc3RzKSkKKwkJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9SRVBPUlRfVFBSX0FDQ0VTUywKQEAgLTI4NTQsMjEgKzI4OTMsMTUgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAodmNwdS0+cmVxdWVzdHMgfHwgbmVlZF9yZXNjaGVkKCkpIHsKKwlpZiAodmNwdS0+cmVxdWVzdHMgfHwgbmVlZF9yZXNjaGVkKCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlyID0gMTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJciA9IC1FSU5UUjsKLQkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwotCQkrK3ZjcHUtPnN0YXQuc2lnbmFsX2V4aXRzOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCisJCWt2bV94ODZfb3BzLT5ndWVzdF9kZWJ1Z19wcmUodmNwdSk7CiAKIAl2Y3B1LT5ndWVzdF9tb2RlID0gMTsKIAkvKgpAQCAtMjkxNyw4ICsyOTUwLDggQEAKIAkgKiBQcm9maWxlIEtWTSBleGl0IFJJUHM6CiAJICovCiAJaWYgKHVubGlrZWx5KHByb2Zfb24gPT0gS1ZNX1BST0ZJTElORykpIHsKLQkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JCXByb2ZpbGVfaGl0KEtWTV9QUk9GSUxJTkcsICh2b2lkICopdmNwdS0+YXJjaC5yaXApOworCQl1bnNpZ25lZCBsb25nIHJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKKwkJcHJvZmlsZV9oaXQoS1ZNX1BST0ZJTElORywgKHZvaWQgKilyaXApOwogCX0KIAogCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nICYmIGt2bV94ODZfb3BzLT5leGNlcHRpb25faW5qZWN0ZWQodmNwdSkpCkBAIC0yOTI3LDI2ICsyOTYwLDYzIEBACiAJa3ZtX2xhcGljX3N5bmNfZnJvbV92YXBpYyh2Y3B1KTsKIAogCXIgPSBrdm1feDg2X29wcy0+aGFuZGxlX2V4aXQoa3ZtX3J1biwgdmNwdSk7Ci0KLQlpZiAociA+IDApIHsKLQkJaWYgKGRtX3JlcXVlc3RfZm9yX2lycV9pbmplY3Rpb24odmNwdSwga3ZtX3J1bikpIHsKLQkJCXIgPSAtRUlOVFI7Ci0JCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7Ci0JCQkrK3ZjcHUtPnN0YXQucmVxdWVzdF9pcnFfZXhpdHM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJZ290byBhZ2FpbjsKLQl9Ci0KIG91dDoKLQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCWlmIChyID4gMCkgewotCQlrdm1fcmVzY2hlZCh2Y3B1KTsKLQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCQlnb3RvIHByZWVtcHRlZDsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBfX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaW50IHI7CisKKwlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRCkpIHsKKwkJcHJfZGVidWcoInZjcHUgJWQgcmVjZWl2ZWQgc2lwaSB3aXRoIHZlY3RvciAjICV4XG4iLAorCQkJIHZjcHUtPnZjcHVfaWQsIHZjcHUtPmFyY2guc2lwaV92ZWN0b3IpOworCQlrdm1fbGFwaWNfcmVzZXQodmNwdSk7CisJCXIgPSBrdm1feDg2X29wcy0+dmNwdV9yZXNldCh2Y3B1KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKIAl9CiAKKwlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJdmFwaWNfZW50ZXIodmNwdSk7CisKKwlyID0gMTsKKwl3aGlsZSAociA+IDApIHsKKwkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQorCQkJciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSwga3ZtX3J1bik7CisJCWVsc2UgeworCQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOworCQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1VOSEFMVCwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfSEFMVEVEKQorCQkJCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0KKwkJCQkJCQlLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CisJCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSAhPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpCisJCQkJciA9IC1FSU5UUjsKKwkJfQorCisJCWlmIChyID4gMCkgeworCQkJaWYgKGRtX3JlcXVlc3RfZm9yX2lycV9pbmplY3Rpb24odmNwdSwga3ZtX3J1bikpIHsKKwkJCQlyID0gLUVJTlRSOworCQkJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKKwkJCQkrK3ZjcHUtPnN0YXQucmVxdWVzdF9pcnFfZXhpdHM7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyID0gLUVJTlRSOworCQkJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKKwkJCQkrK3ZjcHUtPnN0YXQuc2lnbmFsX2V4aXRzOworCQkJfQorCQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJCQlrdm1fcmVzY2hlZCh2Y3B1KTsKKwkJCQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQl9CisJCX0KKwl9CisKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCXBvc3Rfa3ZtX3J1bl9zYXZlKHZjcHUsIGt2bV9ydW4pOwogCiAJdmFwaWNfZXhpdCh2Y3B1KTsKQEAgLTI5NjYsNiArMzAzNiw3IEBACiAKIAlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRCkpIHsKIAkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7CisJCWNsZWFyX2JpdChLVk1fUkVRX1VOSEFMVCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJciA9IC1FQUdBSU47CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI5OTksMTEgKzMwNzAsOSBAQAogCQl9CiAJfQogI2VuZGlmCi0JaWYgKGt2bV9ydW4tPmV4aXRfcmVhc29uID09IEtWTV9FWElUX0hZUEVSQ0FMTCkgewotCQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0ga3ZtX3J1bi0+aHlwZXJjYWxsLnJldDsKLQkJa3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKLQl9CisJaWYgKGt2bV9ydW4tPmV4aXRfcmVhc29uID09IEtWTV9FWElUX0hZUEVSQ0FMTCkKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsCisJCQkJICAgICBrdm1fcnVuLT5oeXBlcmNhbGwucmV0KTsKIAogCXIgPSBfX3ZjcHVfcnVuKHZjcHUsIGt2bV9ydW4pOwogCkBAIC0zMDE5LDI4ICszMDg4LDI2IEBACiB7CiAJdmNwdV9sb2FkKHZjcHUpOwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0KLQlyZWdzLT5yYXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JcmVncy0+cmJ4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCXJlZ3MtPnJjeCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKLQlyZWdzLT5yZHggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JcmVncy0+cnNpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldOwotCXJlZ3MtPnJkaSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXTsKLQlyZWdzLT5yc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0JcmVncy0+cmJwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdOworCXJlZ3MtPnJheCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCXJlZ3MtPnJieCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCXJlZ3MtPnJjeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCXJlZ3MtPnJkeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpOworCXJlZ3MtPnJzaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOworCXJlZ3MtPnJkaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOworCXJlZ3MtPnJzcCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU1ApOworCXJlZ3MtPnJicCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlApOwogI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZWdzLT5yOCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjhdOwotCXJlZ3MtPnI5ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SOV07Ci0JcmVncy0+cjEwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTBdOwotCXJlZ3MtPnIxMSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjExXTsKLQlyZWdzLT5yMTIgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMl07Ci0JcmVncy0+cjEzID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTNdOwotCXJlZ3MtPnIxNCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjE0XTsKLQlyZWdzLT5yMTUgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNV07CisJcmVncy0+cjggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjgpOworCXJlZ3MtPnI5ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1I5KTsKKwlyZWdzLT5yMTAgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjEwKTsKKwlyZWdzLT5yMTEgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjExKTsKKwlyZWdzLT5yMTIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjEyKTsKKwlyZWdzLT5yMTMgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjEzKTsKKwlyZWdzLT5yMTQgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjE0KTsKKwlyZWdzLT5yMTUgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjE1KTsKICNlbmRpZgogCi0JcmVncy0+cmlwID0gdmNwdS0+YXJjaC5yaXA7CisJcmVncy0+cmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJlZ3MtPnJmbGFncyA9IGt2bV94ODZfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOwogCiAJLyoKQEAgLTMwNTgsMjkgKzMxMjUsMjkgQEAKIHsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSByZWdzLT5yYXg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gcmVncy0+cmJ4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IHJlZ3MtPnJjeDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSByZWdzLT5yZHg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldID0gcmVncy0+cnNpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXSA9IHJlZ3MtPnJkaTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSByZWdzLT5yc3A7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdID0gcmVncy0+cmJwOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCByZWdzLT5yYXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCByZWdzLT5yYngpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCByZWdzLT5yY3gpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCByZWdzLT5yZHgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNJLCByZWdzLT5yc2kpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRJLCByZWdzLT5yZGkpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNQLCByZWdzLT5yc3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJQLCByZWdzLT5yYnApOwogI2lmZGVmIENPTkZJR19YODZfNjQKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1I4XSA9IHJlZ3MtPnI4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjldID0gcmVncy0+cjk7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTBdID0gcmVncy0+cjEwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjExXSA9IHJlZ3MtPnIxMTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMl0gPSByZWdzLT5yMTI7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTNdID0gcmVncy0+cjEzOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjE0XSA9IHJlZ3MtPnIxNDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNV0gPSByZWdzLT5yMTU7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SOCwgcmVncy0+cjgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUjksIHJlZ3MtPnI5KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxMCwgcmVncy0+cjEwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxMSwgcmVncy0+cjExKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxMiwgcmVncy0+cjEyKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxMywgcmVncy0+cjEzKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxNCwgcmVncy0+cjE0KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1IxNSwgcmVncy0+cjE1KTsKKwogI2VuZGlmCiAKLQl2Y3B1LT5hcmNoLnJpcCA9IHJlZ3MtPnJpcDsKKwlrdm1fcmlwX3dyaXRlKHZjcHUsIHJlZ3MtPnJpcCk7CiAJa3ZtX3g4Nl9vcHMtPnNldF9yZmxhZ3ModmNwdSwgcmVncy0+cmZsYWdzKTsKIAotCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CiAKIAl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7CiAKQEAgLTMyOTQsMTEgKzMzNjEsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBrdm1fbG9hZF9yZWFsbW9kZV9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLCBpbnQgc2VnKQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBzZWd2YXIgPSB7CisJCS5iYXNlID0gc2VsZWN0b3IgPDwgNCwKKwkJLmxpbWl0ID0gMHhmZmZmLAorCQkuc2VsZWN0b3IgPSBzZWxlY3RvciwKKwkJLnR5cGUgPSAzLAorCQkucHJlc2VudCA9IDEsCisJCS5kcGwgPSAzLAorCQkuZGIgPSAwLAorCQkucyA9IDEsCisJCS5sID0gMCwKKwkJLmcgPSAwLAorCQkuYXZsID0gMCwKKwkJLnVudXNhYmxlID0gMCwKKwl9OworCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudCh2Y3B1LCAmc2VndmFyLCBzZWcpOworCXJldHVybiAwOworfQorCiBpbnQga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAogCQkJCWludCB0eXBlX2JpdHMsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV9zZWdtZW50IGt2bV9zZWc7CiAKKwlpZiAoISh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKQorCQlyZXR1cm4ga3ZtX2xvYWRfcmVhbG1vZGVfc2VnbWVudCh2Y3B1LCBzZWxlY3Rvciwgc2VnKTsKIAlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JfdG9fa3ZtX2Rlc2N0KHZjcHUsIHNlbGVjdG9yLCAma3ZtX3NlZykpCiAJCXJldHVybiAxOwogCWt2bV9zZWcudHlwZSB8PSB0eXBlX2JpdHM7CkBAIC0zMzE2LDE3ICszNDA1LDE2IEBACiAJCQkJc3RydWN0IHRzc19zZWdtZW50XzMyICp0c3MpCiB7CiAJdHNzLT5jcjMgPSB2Y3B1LT5hcmNoLmNyMzsKLQl0c3MtPmVpcCA9IHZjcHUtPmFyY2gucmlwOworCXRzcy0+ZWlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXRzcy0+ZWZsYWdzID0ga3ZtX3g4Nl9vcHMtPmdldF9yZmxhZ3ModmNwdSk7Ci0JdHNzLT5lYXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JdHNzLT5lY3ggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdHNzLT5lZHggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JdHNzLT5lYnggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07Ci0JdHNzLT5lc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0JdHNzLT5lYnAgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCUF07Ci0JdHNzLT5lc2kgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV07Ci0JdHNzLT5lZGkgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV07Ci0KKwl0c3MtPmVheCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCXRzcy0+ZWN4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJdHNzLT5lZHggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwl0c3MtPmVieCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCXRzcy0+ZXNwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JTUCk7CisJdHNzLT5lYnAgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJQKTsKKwl0c3MtPmVzaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOworCXRzcy0+ZWRpID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JESSk7CiAJdHNzLT5lcyA9IGdldF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIFZDUFVfU1JFR19FUyk7CiAJdHNzLT5jcyA9IGdldF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIFZDUFVfU1JFR19DUyk7CiAJdHNzLT5zcyA9IGdldF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIFZDUFVfU1JFR19TUyk7CkBAIC0zMzQyLDE3ICszNDMwLDE3IEBACiB7CiAJa3ZtX3NldF9jcjModmNwdSwgdHNzLT5jcjMpOwogCi0JdmNwdS0+YXJjaC5yaXAgPSB0c3MtPmVpcDsKKwlrdm1fcmlwX3dyaXRlKHZjcHUsIHRzcy0+ZWlwKTsKIAlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB0c3MtPmVmbGFncyB8IDIpOwogCi0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gdHNzLT5lYXg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gdHNzLT5lY3g7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gdHNzLT5lZHg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gdHNzLT5lYng7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gdHNzLT5lc3A7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdID0gdHNzLT5lYnA7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldID0gdHNzLT5lc2k7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldID0gdHNzLT5lZGk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHRzcy0+ZWF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgdHNzLT5lY3gpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCB0c3MtPmVkeCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIHRzcy0+ZWJ4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgdHNzLT5lc3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJQLCB0c3MtPmVicCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHRzcy0+ZXNpKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JESSwgdHNzLT5lZGkpOwogCiAJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdF9zZWxlY3RvciwgMCwgVkNQVV9TUkVHX0xEVFIpKQogCQlyZXR1cm4gMTsKQEAgLTMzODAsMTYgKzM0NjgsMTYgQEAKIHN0YXRpYyB2b2lkIHNhdmVfc3RhdGVfdG9fdHNzMTYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCXN0cnVjdCB0c3Nfc2VnbWVudF8xNiAqdHNzKQogewotCXRzcy0+aXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwl0c3MtPmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXRzcy0+ZmxhZyA9IGt2bV94ODZfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOwotCXRzcy0+YXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JdHNzLT5jeCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKLQl0c3MtPmR4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCXRzcy0+YnggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07Ci0JdHNzLT5zcCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXTsKLQl0c3MtPmJwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdOwotCXRzcy0+c2kgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV07Ci0JdHNzLT5kaSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXTsKKwl0c3MtPmF4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJdHNzLT5jeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCXRzcy0+ZHggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwl0c3MtPmJ4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCWCk7CisJdHNzLT5zcCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU1ApOworCXRzcy0+YnAgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJQKTsKKwl0c3MtPnNpID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JTSSk7CisJdHNzLT5kaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOwogCiAJdHNzLT5lcyA9IGdldF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIFZDUFVfU1JFR19FUyk7CiAJdHNzLT5jcyA9IGdldF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIFZDUFVfU1JFR19DUyk7CkBAIC0zNDAyLDE2ICszNDkwLDE2IEBACiBzdGF0aWMgaW50IGxvYWRfc3RhdGVfZnJvbV90c3MxNihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJIHN0cnVjdCB0c3Nfc2VnbWVudF8xNiAqdHNzKQogewotCXZjcHUtPmFyY2gucmlwID0gdHNzLT5pcDsKKwlrdm1fcmlwX3dyaXRlKHZjcHUsIHRzcy0+aXApOwogCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHRzcy0+ZmxhZyB8IDIpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHRzcy0+YXg7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gdHNzLT5jeDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSB0c3MtPmR4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHRzcy0+Yng7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gdHNzLT5zcDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCUF0gPSB0c3MtPmJwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHRzcy0+c2k7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldID0gdHNzLT5kaTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgdHNzLT5heCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHRzcy0+Y3gpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCB0c3MtPmR4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgdHNzLT5ieCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIHRzcy0+c3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJQLCB0c3MtPmJwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTSSwgdHNzLT5zaSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SREksIHRzcy0+ZGkpOwogCiAJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdCwgMCwgVkNQVV9TUkVHX0xEVFIpKQogCQlyZXR1cm4gMTsKQEAgLTM1MzQsNyArMzYyMiw2IEBACiAJfQogCiAJa3ZtX3g4Nl9vcHMtPnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7Ci0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CiAKIAlpZiAobnNlZ19kZXNjLnR5cGUgJiA4KQogCQlyZXQgPSBrdm1fdGFza19zd2l0Y2hfMzIodmNwdSwgdHNzX3NlbGVjdG9yLCBvbGRfdHNzX2Jhc2UsCkBAIC0zNTU5LDcgKzM2NDYsNiBAQAogCXRyX3NlZy50eXBlID0gMTE7CiAJa3ZtX3NldF9zZWdtZW50KHZjcHUsICZ0cl9zZWcsIFZDUFVfU1JFR19UUik7CiBvdXQ6Ci0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3Rhc2tfc3dpdGNoKTsKQEAgLTM2MjIsNiArMzcwOCw3IEBACiAJCQlwcl9kZWJ1ZygiU2V0IGJhY2sgcGVuZGluZyBpcnEgJWRcbiIsCiAJCQkJIHBlbmRpbmdfdmVjKTsKIAkJfQorCQlrdm1fcGljX2NsZWFyX2lzcl9hY2sodmNwdS0+a3ZtKTsKIAl9CiAKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5jcywgVkNQVV9TUkVHX0NTKTsKQEAgLTM2MzQsNiArMzcyMSwxMiBAQAogCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnRyLCBWQ1BVX1NSRUdfVFIpOwogCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOwogCisJLyogT2xkZXIgdXNlcnNwYWNlIHdvbid0IHVuaGFsdCB0aGUgdmNwdSBvbiByZXNldC4gKi8KKwlpZiAodmNwdS0+dmNwdV9pZCA9PSAwICYmIGt2bV9yaXBfcmVhZCh2Y3B1KSA9PSAweGZmZjAgJiYKKwkgICAgc3JlZ3MtPmNzLnNlbGVjdG9yID09IDB4ZjAwMCAmJiBzcmVncy0+Y3MuYmFzZSA9PSAweGZmZmYwMDAwICYmCisJICAgICEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKKwkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKKwogCXZjcHVfcHV0KHZjcHUpOwogCiAJcmV0dXJuIDA7CkBAIC0zOTE4LDYgKzQwMTEsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CisJSU5JVF9MSVNUX0hFQUQoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCk7CiAKIAlyZXR1cm4ga3ZtOwogfQpAQCAtMzk1MCw2ICs0MDQ0LDggQEAKIAogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKKwlrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoa3ZtKTsKKwlrdm1fZnJlZV9hbGxfYXNzaWduZWRfZGV2aWNlcyhrdm0pOwogCWt2bV9mcmVlX3BpdChrdm0pOwogCWtmcmVlKGt2bS0+YXJjaC52cGljKTsKIAlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CkBAIC0zOTgxLDcgKzQwNzcsNyBAQAogCQkJdXNlcnNwYWNlX2FkZHIgPSBkb19tbWFwKE5VTEwsIDAsCiAJCQkJCQkgbnBhZ2VzICogUEFHRV9TSVpFLAogCQkJCQkJIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJCQkgTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMsCisJCQkJCQkgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAogCQkJCQkJIDApOwogCQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTRiZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgQVJDSF9YODZfS1ZNX1g4Nl9ICisjZGVmaW5lIEFSQ0hfWDg2X0tWTV9YODZfSAorCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9xdWV1ZV9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpCit7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZyA9IHRydWU7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIgPSB2ZWN0b3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2xlYXJfaW50ZXJydXB0X3F1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nID0gZmFsc2U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwppbmRleCBmMmY5MDQ2Li5lYTA1MTE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBEUFJJTlRGKF9mLCBfYSAuLi4pIHByaW50ZihfZiAsICMjIF9hKQogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCiAjZGVmaW5lIERQUklOVEYoeC4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQ2LDI1ICs0NywyNiBAQAogI2RlZmluZSBJbXBsaWNpdE9wcyAoMTw8MSkJLyogSW1wbGljaXQgaW4gb3Bjb2RlLiBObyBnZW5lcmljIGRlY29kZS4gKi8KICNkZWZpbmUgRHN0UmVnICAgICAgKDI8PDEpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCiAjZGVmaW5lIERzdE1lbSAgICAgICgzPDwxKQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDM8PDEpCisjZGVmaW5lIERzdEFjYyAgICAgICg0PDwxKSAgICAgIC8qIERlc3RpbmF0aW9uIEFjY3VtdWxhdG9yICovCisjZGVmaW5lIERzdE1hc2sgICAgICg3PDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDMpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbXBsaWNpdCAoMDw8MykJLyogU291cmNlIG9wZXJhbmQgaXMgaW1wbGljaXQgaW4gdGhlIG9wY29kZS4gKi8KLSNkZWZpbmUgU3JjUmVnICAgICAgKDE8PDMpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY01lbSAgICAgICgyPDwzKQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtMTYgICAgKDM8PDMpCS8qIE1lbW9yeSBvcGVyYW5kICgxNi1iaXQpLiAqLwotI2RlZmluZSBTcmNNZW0zMiAgICAoNDw8MykJLyogTWVtb3J5IG9wZXJhbmQgKDMyLWJpdCkuICovCi0jZGVmaW5lIFNyY0ltbSAgICAgICg1PDwzKQkvKiBJbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjSW1tQnl0ZSAgKDY8PDMpCS8qIDgtYml0IHNpZ24tZXh0ZW5kZWQgaW1tZWRpYXRlIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY01hc2sgICAgICg3PDwzKQorI2RlZmluZSBTcmNOb25lICAgICAoMDw8NCkJLyogTm8gc291cmNlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY0ltcGxpY2l0ICgwPDw0KQkvKiBTb3VyY2Ugb3BlcmFuZCBpcyBpbXBsaWNpdCBpbiB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWFzayAgICAgKDc8PDQpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDYpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw3KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8NykKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDgpCi0jZGVmaW5lIE1lbUFicyAgICAgICgxPDw5KSAgICAgIC8qIE1lbW9yeSBvcGVyYW5kIGlzIGFic29sdXRlIGRpc3BsYWNlbWVudCAqLwotI2RlZmluZSBTdHJpbmcgICAgICAoMTw8MTApICAgICAvKiBTdHJpbmcgaW5zdHJ1Y3Rpb24gKHJlcCBjYXBhYmxlKSAqLwotI2RlZmluZSBTdGFjayAgICAgICAoMTw8MTEpICAgICAvKiBTdGFjayBpbnN0cnVjdGlvbiAocHVzaC9wb3ApICovCisjZGVmaW5lIE1vdiAgICAgICAgICgxPDw4KQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8OSkKKyNkZWZpbmUgTWVtQWJzICAgICAgKDE8PDEwKSAgICAgIC8qIE1lbW9yeSBvcGVyYW5kIGlzIGFic29sdXRlIGRpc3BsYWNlbWVudCAqLworI2RlZmluZSBTdHJpbmcgICAgICAoMTw8MTIpICAgICAvKiBTdHJpbmcgaW5zdHJ1Y3Rpb24gKHJlcCBjYXBhYmxlKSAqLworI2RlZmluZSBTdGFjayAgICAgICAoMTw8MTMpICAgICAvKiBTdGFjayBpbnN0cnVjdGlvbiAocHVzaC9wb3ApICovCiAjZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwogI2RlZmluZSBHcm91cER1YWwgICAoMTw8MTUpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KICNkZWZpbmUgR3JvdXBNYXNrICAgMHhmZiAgICAgICAgLyogR3JvdXAgbnVtYmVyIHN0b3JlZCBpbiBiaXRzIDA6NyAqLwpAQCAtOTQsNyArOTYsNyBAQAogCS8qIDB4MjAgLSAweDI3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKLQlTcmNJbW1CeXRlLCBTcmNJbW0sIDAsIDAsCisJRHN0QWNjIHwgU3JjSW1tQnl0ZSwgRHN0QWNjIHwgU3JjSW1tLCAwLCAwLAogCS8qIDB4MjggLSAweDJGICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKQEAgLTEwNiw3ICsxMDgsOCBAQAogCS8qIDB4MzggLSAweDNGICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKLQkwLCAwLCAwLCAwLAorCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLAorCTAsIDAsCiAJLyogMHg0MCAtIDB4NDcgKi8KIAlEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywKIAkvKiAweDQ4IC0gMHg0RiAqLwpAQCAtMTUzLDkgKzE1NiwxNiBAQAogCTAsIDAsIEJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywKIAlCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsCiAJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgU3RyaW5nLAotCS8qIDB4QjAgLSAweEJGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhCMCAtIDB4QjcgKi8KKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwkvKiAweEI4IC0gMHhCRiAqLworCURzdFJlZyB8IFNyY0ltbSB8IE1vdiwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAorCURzdFJlZyB8IFNyY0ltbSB8IE1vdiwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAorCURzdFJlZyB8IFNyY0ltbSB8IE1vdiwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAorCURzdFJlZyB8IFNyY0ltbSB8IE1vdiwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAogCS8qIDB4QzAgLSAweEM3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKIAkwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLApAQCAtMTY5LDE3ICsxNzksMjAgQEAKIAkvKiAweEQ4IC0gMHhERiAqLwogCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJLyogMHhFMCAtIDB4RTcgKi8KLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsCisJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCisJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCiAJLyogMHhFOCAtIDB4RUYgKi8KIAlJbXBsaWNpdE9wcyB8IFN0YWNrLCBTcmNJbW0gfCBJbXBsaWNpdE9wcywKIAlJbXBsaWNpdE9wcywgU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzLAotCTAsIDAsIDAsIDAsCisJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCisJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCiAJLyogMHhGMCAtIDB4RjcgKi8KIAkwLCAwLCAwLCAwLAogCUltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywgR3JvdXAgfCBHcm91cDNfQnl0ZSwgR3JvdXAgfCBHcm91cDMsCiAJLyogMHhGOCAtIDB4RkYgKi8KIAlJbXBsaWNpdE9wcywgMCwgSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLAotCTAsIDAsIEdyb3VwIHwgR3JvdXA0LCBHcm91cCB8IEdyb3VwNSwKKwlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXA0LCBHcm91cCB8IEdyb3VwNSwKIH07CiAKIHN0YXRpYyB1MTYgdHdvYnl0ZV90YWJsZVsyNTZdID0gewpAQCAtMjY4LDE1ICsyODEsMTYgQEAKIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKIAkwLCAwLCAwLCAwLAogCVtHcm91cDMqOF0gPQotCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgU3JjSW1tLCAwLAotCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCAwLAorCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsCiAJW0dyb3VwNCo4XSA9CiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCiAJMCwgMCwgMCwgMCwgMCwgMCwKIAlbR3JvdXA1KjhdID0KLQlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgMCwgMCwKLQlTcmNNZW0gfCBNb2RSTSwgMCwgU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKKwlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKKwlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAorCVNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsIFNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsCiAJW0dyb3VwNyo4XSA9CiAJMCwgMCwgTW9kUk0gfCBTcmNNZW0sIE1vZFJNIHwgU3JjTWVtLAogCVNyY05vbmUgfCBNb2RSTSB8IERzdE1lbSB8IE1vdiwgMCwKQEAgLTgzOSw3ICs4NTMsNyBAQAogCS8qIFNoYWRvdyBjb3B5IG9mIHJlZ2lzdGVyIHN0YXRlLiBDb21taXR0ZWQgb24gc3VjY2Vzc2Z1bCBlbXVsYXRpb24uICovCiAKIAltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKLQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CiAJY3R4dC0+Y3NfYmFzZSA9IHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19DUyk7CiAJbWVtY3B5KGMtPnJlZ3MsIGN0eHQtPnZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOwogCkBAIC0xMDQ4LDYgKzEwNjIsMjMgQEAKIAkJfQogCQljLT5kc3QudHlwZSA9IE9QX01FTTsKIAkJYnJlYWs7CisJY2FzZSBEc3RBY2M6CisJCWMtPmRzdC50eXBlID0gT1BfUkVHOworCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlzd2l0Y2ggKGMtPm9wX2J5dGVzKSB7CisJCQljYXNlIDE6CisJCQkJYy0+ZHN0LnZhbCA9ICoodTggKiljLT5kc3QucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWMtPmRzdC52YWwgPSAqKHUxNiAqKWMtPmRzdC5wdHI7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJYy0+ZHN0LnZhbCA9ICoodTMyICopYy0+ZHN0LnB0cjsKKwkJCQlicmVhazsKKwkJfQorCQljLT5kc3Qub3JpZ192YWwgPSBjLT5kc3QudmFsOworCQlicmVhazsKIAl9CiAKIAlpZiAoYy0+cmlwX3JlbGF0aXZlKQpAQCAtMTE1MSw2ICsxMTgyLDE0IEBACiAJY2FzZSAxOgkvKiBkZWMgKi8KIAkJZW11bGF0ZV8xb3AoImRlYyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7CisJY2FzZSAyOiAvKiBjYWxsIG5lYXIgYWJzICovIHsKKwkJbG9uZyBpbnQgb2xkX2VpcDsKKwkJb2xkX2VpcCA9IGMtPmVpcDsKKwkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKKwkJYy0+c3JjLnZhbCA9IG9sZF9laXA7CisJCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJYnJlYWs7CisJfQogCWNhc2UgNDogLyogam1wIGFicyAqLwogCQljLT5laXAgPSBjLT5zcmMudmFsOwogCQlicmVhazsKQEAgLTEyNTEsNiArMTI5MCw4IEBACiAJdTY0IG1zcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgc2F2ZWRfZWlwID0gMDsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKwlpbnQgaW9fZGlyX2luOwogCWludCByYyA9IDA7CiAKIAkvKiBTaGFkb3cgY29weSBvZiByZWdpc3RlciBzdGF0ZS4gQ29tbWl0dGVkIG9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLgpAQCAtMTI2Nyw3ICsxMzA4LDcgQEAKIAlpZiAoYy0+cmVwX3ByZWZpeCAmJiAoYy0+ZCAmIFN0cmluZykpIHsKIAkJLyogQWxsIFJFUCBwcmVmaXhlcyBoYXZlIHRoZSBzYW1lIGZpcnN0IHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLwogCQlpZiAoYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9PSAwKSB7Ci0JCQljdHh0LT52Y3B1LT5hcmNoLnJpcCA9IGMtPmVpcDsKKwkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQkvKiBUaGUgc2Vjb25kIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBvbmx5IGFwcGxpZXMgZm9yIFJFUEUKQEAgLTEyODEsMTcgKzEzMjIsMTcgQEAKIAkJCQkoYy0+YiA9PSAweGFlKSB8fCAoYy0+YiA9PSAweGFmKSkgewogCQkJaWYgKChjLT5yZXBfcHJlZml4ID09IFJFUEVfUFJFRklYKSAmJgogCQkJCSgoY3R4dC0+ZWZsYWdzICYgRUZMR19aRikgPT0gMCkpIHsKLQkJCQkJY3R4dC0+dmNwdS0+YXJjaC5yaXAgPSBjLT5laXA7CisJCQkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAkJCQkJZ290byBkb25lOwogCQkJfQogCQkJaWYgKChjLT5yZXBfcHJlZml4ID09IFJFUE5FX1BSRUZJWCkgJiYKIAkJCQkoKGN0eHQtPmVmbGFncyAmIEVGTEdfWkYpID09IEVGTEdfWkYpKSB7Ci0JCQkJY3R4dC0+dmNwdS0+YXJjaC5yaXAgPSBjLT5laXA7CisJCQkJa3ZtX3JpcF93cml0ZShjdHh0LT52Y3B1LCBjLT5laXApOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQogCQljLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLS07Ci0JCWMtPmVpcCA9IGN0eHQtPnZjcHUtPmFyY2gucmlwOworCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CiAJfQogCiAJaWYgKGMtPnNyYy50eXBlID09IE9QX01FTSkgewpAQCAtMTM1MSwyNyArMTM5MiwxMCBAQAogCSAgICAgIHNiYjoJCS8qIHNiYiAqLwogCQllbXVsYXRlXzJvcF9TcmNWKCJzYmIiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDIwIC4uLiAweDIzOgorCWNhc2UgMHgyMCAuLi4gMHgyNToKIAkgICAgICBhbmQ6CQkvKiBhbmQgKi8KIAkJZW11bGF0ZV8yb3BfU3JjVigiYW5kIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgMHgyNDogICAgICAgICAgICAgIC8qIGFuZCBhbCBpbW04ICovCi0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QucHRyID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JCWMtPmRzdC52YWwgPSAqKHU4ICopYy0+ZHN0LnB0cjsKLQkJYy0+ZHN0LmJ5dGVzID0gMTsKLQkJYy0+ZHN0Lm9yaWdfdmFsID0gYy0+ZHN0LnZhbDsKLQkJZ290byBhbmQ7Ci0JY2FzZSAweDI1OiAgICAgICAgICAgICAgLyogYW5kIGF4IGltbTE2LCBvciBlYXggaW1tMzIgKi8KLQkJYy0+ZHN0LnR5cGUgPSBPUF9SRUc7Ci0JCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQljLT5kc3QucHRyID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JCWlmIChjLT5vcF9ieXRlcyA9PSAyKQotCQkJYy0+ZHN0LnZhbCA9ICoodTE2ICopYy0+ZHN0LnB0cjsKLQkJZWxzZQotCQkJYy0+ZHN0LnZhbCA9ICoodTMyICopYy0+ZHN0LnB0cjsKLQkJYy0+ZHN0Lm9yaWdfdmFsID0gYy0+ZHN0LnZhbDsKLQkJZ290byBhbmQ7CiAJY2FzZSAweDI4IC4uLiAweDJkOgogCSAgICAgIHN1YjoJCS8qIHN1YiAqLwogCQllbXVsYXRlXzJvcF9TcmNWKCJzdWIiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKQEAgLTE2NTksNyArMTY4Myw3IEBACiAJY2FzZSAweGFlIC4uLiAweGFmOgkvKiBzY2FzICovCiAJCURQUklOVEYoIlVyayEgSSBkb24ndCBoYW5kbGUgU0NBUy5cbiIpOwogCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCWNhc2UgMHhiODogLyogbW92IHIsIGltbSAqLworCWNhc2UgMHhiMCAuLi4gMHhiZjogLyogbW92IHIsIGltbSAqLwogCQlnb3RvIG1vdjsKIAljYXNlIDB4YzAgLi4uIDB4YzE6CiAJCWVtdWxhdGVfZ3JwMihjdHh0KTsKQEAgLTE2NzksNiArMTcwMywxNiBAQAogCQljLT5zcmMudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXTsKIAkJZW11bGF0ZV9ncnAyKGN0eHQpOwogCQlicmVhazsKKwljYXNlIDB4ZTQ6IAkvKiBpbmIgKi8KKwljYXNlIDB4ZTU6IAkvKiBpbiAqLworCQlwb3J0ID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwkJaW9fZGlyX2luID0gMTsKKwkJZ290byBkb19pbzsKKwljYXNlIDB4ZTY6IC8qIG91dGIgKi8KKwljYXNlIDB4ZTc6IC8qIG91dCAqLworCQlwb3J0ID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwkJaW9fZGlyX2luID0gMDsKKwkJZ290byBkb19pbzsKIAljYXNlIDB4ZTg6IC8qIGNhbGwgKG5lYXIpICovIHsKIAkJbG9uZyBpbnQgcmVsOwogCQlzd2l0Y2ggKGMtPm9wX2J5dGVzKSB7CkBAIC0xNzI5LDYgKzE3NjMsMjIgQEAKIAkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CisJY2FzZSAweGVjOiAvKiBpbiBhbCxkeCAqLworCWNhc2UgMHhlZDogLyogaW4gKGUvcilheCxkeCAqLworCQlwb3J0ID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKKwkJaW9fZGlyX2luID0gMTsKKwkJZ290byBkb19pbzsKKwljYXNlIDB4ZWU6IC8qIG91dCBhbCxkeCAqLworCWNhc2UgMHhlZjogLyogb3V0IChlL3IpYXgsZHggKi8KKwkJcG9ydCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWlvX2Rpcl9pbiA9IDA7CisJZG9faW86CWlmIChrdm1fZW11bGF0ZV9waW8oY3R4dC0+dmNwdSwgTlVMTCwgaW9fZGlyX2luLAorCQkJCSAgIChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlcywKKwkJCQkgICBwb3J0KSAhPSAwKSB7CisJCQljLT5laXAgPSBzYXZlZF9laXA7CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCXJldHVybiAwOwogCWNhc2UgMHhmNDogICAgICAgICAgICAgIC8qIGhsdCAqLwogCQljdHh0LT52Y3B1LT5hcmNoLmhhbHRfcmVxdWVzdCA9IDE7CiAJCWJyZWFrOwpAQCAtMTc1NCw2ICsxODA0LDE0IEBACiAJCWN0eHQtPmVmbGFncyB8PSBYODZfRUZMQUdTX0lGOwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQlicmVhazsKKwljYXNlIDB4ZmM6IC8qIGNsZCAqLworCQljdHh0LT5lZmxhZ3MgJj0gfkVGTEdfREY7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCWJyZWFrOworCWNhc2UgMHhmZDogLyogc3RkICovCisJCWN0eHQtPmVmbGFncyB8PSBFRkxHX0RGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKIAljYXNlIDB4ZmUgLi4uIDB4ZmY6CS8qIEdycDQvR3JwNSAqLwogCQlyYyA9IGVtdWxhdGVfZ3JwNDUoY3R4dCwgb3BzKTsKIAkJaWYgKHJjICE9IDApCkBAIC0xNzY4LDcgKzE4MjYsNyBAQAogCiAJLyogQ29tbWl0IHNoYWRvdyByZWdpc3RlciBzdGF0ZS4gKi8KIAltZW1jcHkoY3R4dC0+dmNwdS0+YXJjaC5yZWdzLCBjLT5yZWdzLCBzaXplb2YgYy0+cmVncyk7Ci0JY3R4dC0+dmNwdS0+YXJjaC5yaXAgPSBjLT5laXA7CisJa3ZtX3JpcF93cml0ZShjdHh0LT52Y3B1LCBjLT5laXApOwogCiBkb25lOgogCWlmIChyYyA9PSBYODZFTVVMX1VOSEFORExFQUJMRSkgewpAQCAtMTc5Myw3ICsxODUxLDcgQEAKIAkJCQlnb3RvIGRvbmU7CiAKIAkJCS8qIExldCB0aGUgcHJvY2Vzc29yIHJlLWV4ZWN1dGUgdGhlIGZpeGVkIGh5cGVyY2FsbCAqLwotCQkJYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yaXA7CisJCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CiAJCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJCWJyZWFrOwpAQCAtMTg4OSw3ICsxOTQ3LDcgQEAKIAkJcmMgPSBrdm1fc2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCBtc3JfZGF0YSk7CiAJCWlmIChyYykgewogCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJCWMtPmVpcCA9IGN0eHQtPnZjcHUtPmFyY2gucmlwOworCQkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCQl9CiAJCXJjID0gWDg2RU1VTF9DT05USU5VRTsKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwpAQCAtMTg5OSw3ICsxOTU3LDcgQEAKIAkJcmMgPSBrdm1fZ2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCAmbXNyX2RhdGEpOwogCQlpZiAocmMpIHsKIAkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7Ci0JCQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKIAkJfSBlbHNlIHsKIAkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKW1zcl9kYXRhOwogCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSA9IG1zcl9kYXRhID4+IDMyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggM2YyYjg5Ni4uMzFlODczMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC02NDAsMjQgKzY0MCwyMyBAQAogCX0KIAogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qIEl0J3Mgc2FmZSB0byBhbGxvdyBpcnEncyBhZnRlciBjcjIgaGFzIGJlZW4gc2F2ZWQgYW5kIHRoZSB2bWFsbG9jCi0JICAgZmF1bHQgaGFzIGJlZW4gaGFuZGxlZC4gKi8KLQlpZiAocmVncy0+ZmxhZ3MgJiAoWDg2X0VGTEFHU19JRiB8IFg4Nl9WTV9NQVNLKSkKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCiAJLyoKLQkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQsIGhhdmUgbm8gdXNlciBjb250ZXh0IG9yIGFyZSBydW5uaW5nIGluIGFuCi0JICogYXRvbWljIHJlZ2lvbiB0aGVuIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0LgorCSAqIEl0J3Mgc2FmZSB0byBhbGxvdyBpcnEncyBhZnRlciBjcjIgaGFzIGJlZW4gc2F2ZWQgYW5kIHRoZQorCSAqIHZtYWxsb2MgZmF1bHQgaGFzIGJlZW4gaGFuZGxlZC4KKwkgKgorCSAqIFVzZXItbW9kZSByZWdpc3RlcnMgY291bnQgYXMgYSB1c2VyIGFjY2VzcyBldmVuIGZvciBhbnkKKwkgKiBwb3RlbnRpYWwgc3lzdGVtIGZhdWx0IG9yIENQVSBidWdsZXQuCiAJICovCi0JaWYgKGluX2F0b21pYygpIHx8ICFtbSkKLQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KLQlpZiAobGlrZWx5KHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikpCisJaWYgKHVzZXJfbW9kZV92bShyZWdzKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWVycm9yX2NvZGUgfD0gUEZfVVNFUjsKKwl9IGVsc2UgaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmICh1bmxpa2VseShlcnJvcl9jb2RlICYgUEZfUlNWRCkpCiAJCXBndGFibGVfYmFkKGFkZHJlc3MsIHJlZ3MsIGVycm9yX2NvZGUpOworI2VuZGlmCiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcgaW4gYW4KQEAgLTY2NiwxNSArNjY1LDkgQEAKIAlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkgfHwgIW1tKSkKIAkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKIAotCS8qCi0JICogVXNlci1tb2RlIHJlZ2lzdGVycyBjb3VudCBhcyBhIHVzZXIgYWNjZXNzIGV2ZW4gZm9yIGFueQotCSAqIHBvdGVudGlhbCBzeXN0ZW0gZmF1bHQgb3IgQ1BVIGJ1Z2xldC4KLQkgKi8KLQlpZiAodXNlcl9tb2RlX3ZtKHJlZ3MpKQotCQllcnJvcl9jb2RlIHw9IFBGX1VTRVI7CiBhZ2FpbjoKLSNlbmRpZgotCS8qIFdoZW4gcnVubmluZyBpbiB0aGUga2VybmVsIHdlIGV4cGVjdCBmYXVsdHMgdG8gb2NjdXIgb25seSB0bworCS8qCisJICogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCiAJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIGFuCiAJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCkBAIC03MzcsOSArNzMwLDYgQEAKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotc3Vydml2ZToKLSNlbmRpZgogCS8qCiAJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsCiAJICogbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbwpAQCAtODc0LDEyICs4NjQsMTEgQEAKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCWlmIChpc19nbG9iYWxfaW5pdCh0c2spKSB7CiAJCXlpZWxkKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCWdvdG8gc3Vydml2ZTsKLSNlbHNlCisJCS8qCisJCSAqIFJlLWxvb2t1cCB0aGUgdm1hIC0gaW4gdGhlb3J5IHRoZSB2bWEgdHJlZSBtaWdodAorCQkgKiBoYXZlIGNoYW5nZWQ6CisJCSAqLwogCQlnb3RvIGFnYWluOwotI2VuZGlmCiAJfQogCiAJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCmluZGV4IDE2NWM4NzEuLmJjYzA3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYworKysgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKQEAgLTEzNyw2ICsxMzcsNyBAQAogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChrbWFwX2F0b21pY19wZm4pOyAvKiB0ZW1wb3JhcmlseSBpbiB1c2UgYnkgaTkxNSBHRU0gdW50aWwgdm1hcCAqLwogCiBzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZSh2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggZTRjNDNlYy4uYWU3MWUxMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjIwLDYgKzIyMCwxMiBAQAogCQlyZXR1cm4gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcGh5c190b192aXJ0KHBoeXNfYWRkcik7CiAKIAkvKgorCSAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IHNwYW5zIG1vcmUgdGhhbiBhbnkgQkFSIGluIHRoZSBpb21lbSByZXNvdXJjZQorCSAqIHRyZWUuCisJICovCisJV0FSTl9PTihpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHBoeXNfYWRkciwgc2l6ZSkpOworCisJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IGE5ZWM4OWMuLjQwN2Q4NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtNzkyLDYgKzc5Miw4IEBACiAJLyogTXVzdCBhdm9pZCBhbGlhc2luZyBtYXBwaW5ncyBpbiB0aGUgaGlnaG1lbSBjb2RlICovCiAJa21hcF9mbHVzaF91bnVzZWQoKTsKIAorCXZtX3VubWFwX2FsaWFzZXMoKTsKKwogCWNwYS52YWRkciA9IGFkZHI7CiAJY3BhLm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJY3BhLm1hc2tfc2V0ID0gbWFza19zZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggMDAxM2E3Mi4uYjYxNTM0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtODcxLDYgKzg3MSw3IEBACiAJCQkvKiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN0cmF5IG1hcHBpbmdzIG9mCiAJCQkgICB0aGlzIHBhZ2UgKi8KIAkJCWttYXBfZmx1c2hfdW51c2VkKCk7CisJCQl2bV91bm1hcF9hbGlhc2VzKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYWUxNzNmNi4uZDRkNTJmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtODQ2LDYgKzg0Niw3IEBACiAJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGZvciBrbWFwX2ZsdXNoX3VudXNlZCAqLwogCQl4ZW5fbWNfaXNzdWUoMCk7CiAJCWttYXBfZmx1c2hfdW51c2VkKCk7CisJCXZtX3VubWFwX2FsaWFzZXMoKTsKIAkJeGVuX21jX2JhdGNoKCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCAwMDRiYTg2Li5jOWY3Y2RhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jCisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmMKQEAgLTE5OCwxNyArMTk4LDEwIEBACiAvKiBHZXQgdGhlIFRTQyBzcGVlZCBmcm9tIFhlbiAqLwogdW5zaWduZWQgbG9uZyB4ZW5fdHNjX2toeih2b2lkKQogewotCXU2NCB4ZW5fa2h6ID0gMTAwMDAwMFVMTCA8PCAzMjsKLQljb25zdCBzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqaW5mbyA9CisJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQogCQkmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdLnRpbWU7CiAKLQlkb19kaXYoeGVuX2toeiwgaW5mby0+dHNjX3RvX3N5c3RlbV9tdWwpOwotCWlmIChpbmZvLT50c2Nfc2hpZnQgPCAwKQotCQl4ZW5fa2h6IDw8PSAtaW5mby0+dHNjX3NoaWZ0OwotCWVsc2UKLQkJeGVuX2toeiA+Pj0gaW5mby0+dHNjX3NoaWZ0OwotCi0JcmV0dXJuIHhlbl9raHo7CisJcmV0dXJuIHB2Y2xvY2tfdHNjX2toeihpbmZvKTsKIH0KIAogY3ljbGVfdCB4ZW5fY2xvY2tzb3VyY2VfcmVhZCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggMDJlNDE3ZC4uYTIxMzI2MCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC01NSw2ICs1NSw3IEBACiAJZGVmYXVsdCAxMDAKIAogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMmQwNTNiNS4uYzNkZjMwYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0yNTcsNyArMjU3LDYgQEAKIAogCXEtPnJlcXVlc3RfZm4ocSk7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKTsKIAogLyoqCiAgKiBnZW5lcmljX3VucGx1Z19kZXZpY2UgLSBmaXJlIGEgcmVxdWVzdCBxdWV1ZQpAQCAtMzI1LDYgKzMyNCw5IEBACiAKIHN0YXRpYyB2b2lkIGJsa19pbnZva2VfcmVxdWVzdF9mbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKKwlpZiAodW5saWtlbHkoYmxrX3F1ZXVlX3N0b3BwZWQocSkpKQorCQlyZXR1cm47CisKIAkvKgogCSAqIG9uZSBsZXZlbCBvZiByZWN1cnNpb24gaXMgb2sgYW5kIGlzIG11Y2ggZmFzdGVyIHRoYW4ga2lja2luZwogCSAqIHRoZSB1bnBsdWcgaGFuZGxpbmcKQEAgLTM5OSw4ICs0MDEsMTMgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3N5bmNfcXVldWUpOwogCiAvKioKLSAqIGJsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCisgKiBfX2Jsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCiAgKiBAcToJVGhlIHF1ZXVlIHRvIHJ1bgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgU2VlIEBibGtfcnVuX3F1ZXVlLiBUaGlzIHZhcmlhbnQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcXVldWUgbG9jaworICogICAgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCiAgKi8KIHZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNDE4LDYgKzQyNSwxMiBAQAogLyoqCiAgKiBibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6IFRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIEludm9rZSByZXF1ZXN0IGhhbmRsaW5nIG9uIHRoaXMgcXVldWUsIGlmIGl0IGhhcyBwZW5kaW5nIHdvcmsgdG8gZG8uCisgKiAgICBNYXkgYmUgdXNlZCB0byByZXN0YXJ0IHF1ZXVlaW5nIHdoZW4gYSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuIEFsc28KKyAqICAgIFNlZSBAYmxrX3N0YXJ0X3F1ZXVlaW5nLgorICoKICAqLwogdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNTAxLDYgKzUxNCw3IEBACiAJaW5pdF90aW1lcigmcS0+dW5wbHVnX3RpbWVyKTsKIAlzZXR1cF90aW1lcigmcS0+dGltZW91dCwgYmxrX3JxX3RpbWVkX291dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpIHEpOwogCUlOSVRfTElTVF9IRUFEKCZxLT50aW1lb3V0X2xpc3QpOworCUlOSVRfV09SSygmcS0+dW5wbHVnX3dvcmssIGJsa191bnBsdWdfd29yayk7CiAKIAlrb2JqZWN0X2luaXQoJnEtPmtvYmosICZibGtfcXVldWVfa3R5cGUpOwogCkBAIC04ODQsNyArODk4LDggQEAKICAqCiAgKiBUaGlzIGlzIGJhc2ljYWxseSBhIGhlbHBlciB0byByZW1vdmUgdGhlIG5lZWQgdG8ga25vdyB3aGV0aGVyIGEgcXVldWUKICAqIGlzIHBsdWdnZWQgb3Igbm90IGlmIHNvbWVvbmUganVzdCB3YW50cyB0byBpbml0aWF0ZSBkaXNwYXRjaCBvZiByZXF1ZXN0cwotICogZm9yIHRoaXMgcXVldWUuCisgKiBmb3IgdGhpcyBxdWV1ZS4gU2hvdWxkIGJlIHVzZWQgdG8gc3RhcnQgcXVldWVpbmcgb24gYSBkZXZpY2Ugb3V0c2lkZQorICogb2YgLT5yZXF1ZXN0X2ZuKCkgY29udGV4dC4gQWxzbyBzZWUgQGJsa19ydW5fcXVldWUuCiAgKgogICogVGhlIHF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwpAQCAtMTAwMyw4ICsxMDE4LDkgQEAKIH0KIAogLyoqCi0gKiBwYXJ0X3JvdW5kX3N0YXRzKCkJLSBSb3VuZCBvZmYgdGhlIHBlcmZvcm1hbmNlIHN0YXRzIG9uIGEgc3RydWN0Ci0gKiBkaXNrX3N0YXRzLgorICogcGFydF9yb3VuZF9zdGF0cygpIC0gUm91bmQgb2ZmIHRoZSBwZXJmb3JtYW5jZSBzdGF0cyBvbiBhIHN0cnVjdCBkaXNrX3N0YXRzLgorICogQGNwdTogY3B1IG51bWJlciBmb3Igc3RhdHMgYWNjZXNzCisgKiBAcGFydDogdGFyZ2V0IHBhcnRpdGlvbgogICoKICAqIFRoZSBhdmVyYWdlIElPIHF1ZXVlIGxlbmd0aCBhbmQgdXRpbGlzYXRpb24gc3RhdGlzdGljcyBhcmUgbWFpbnRhaW5lZAogICogYnkgb2JzZXJ2aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBxdWV1ZSBsZW5ndGggYW5kIHRoZSBhbW91bnQgb2YKQEAgLTEwNzUsOCArMTA5MSwxNSBAQAogCS8qCiAJICogaW5oZXJpdCBGQUlMRkFTVCBmcm9tIGJpbyAoZm9yIHJlYWQtYWhlYWQsIGFuZCBleHBsaWNpdCBGQUlMRkFTVCkKIAkgKi8KLQlpZiAoYmlvX3J3X2FoZWFkKGJpbykgfHwgYmlvX2ZhaWxmYXN0KGJpbykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlpZiAoYmlvX3J3X2FoZWFkKGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IChSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkJICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7CisJaWYgKGJpb19mYWlsZmFzdF9kZXYoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFVjsKKwlpZiAoYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUOworCWlmIChiaW9fZmFpbGZhc3RfZHJpdmVyKGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9EUklWRVI7CiAKIAkvKgogCSAqIFJFUV9CQVJSSUVSIGltcGxpZXMgbm8gbWVyZ2luZywgYnV0IGxldHMgbWFrZSBpdCBleHBsaWNpdApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA5MDhkM2UxLi44NjgxY2Q2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtNzcsMTIgKzc3LDIwIEBACiAJCQljb250aW51ZTsKIAkJfQogbmV3X3NlZ21lbnQ6CisJCWlmIChucl9waHlzX3NlZ3MgPT0gMSAmJiBzZWdfc2l6ZSA+IHJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplKQorCQkJcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwogCQlucl9waHlzX3NlZ3MrKzsKIAkJYnZwcnYgPSBidjsKIAkJc2VnX3NpemUgPSBidi0+YnZfbGVuOwogCQloaWdocHJ2ID0gaGlnaDsKIAl9CiAKKwlpZiAobnJfcGh5c19zZWdzID09IDEgJiYgc2VnX3NpemUgPiBycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSkKKwkJcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUgPSBzZWdfc2l6ZTsKKwlpZiAoc2VnX3NpemUgPiBycS0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSkKKwkJcnEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUgPSBzZWdfc2l6ZTsKKwogCXJxLT5ucl9waHlzX3NlZ21lbnRzID0gbnJfcGh5c19zZWdzOwogfQogCkBAIC0xMDYsNyArMTE0LDggQEAKIAlpZiAoIXRlc3RfYml0KFFVRVVFX0ZMQUdfQ0xVU1RFUiwgJnEtPnF1ZXVlX2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYmlvLT5iaV9zaXplICsgbnh0LT5iaV9zaXplID4gcS0+bWF4X3NlZ21lbnRfc2l6ZSkKKwlpZiAoYmlvLT5iaV9zZWdfYmFja19zaXplICsgbnh0LT5iaV9zZWdfZnJvbnRfc2l6ZSA+CisJICAgIHEtPm1heF9zZWdtZW50X3NpemUpCiAJCXJldHVybiAwOwogCiAJaWYgKCFiaW9faGFzX2RhdGEoYmlvKSkKQEAgLTMwOSw2ICszMTgsOCBAQAogCQkJCXN0cnVjdCByZXF1ZXN0ICpuZXh0KQogewogCWludCB0b3RhbF9waHlzX3NlZ21lbnRzOworCXVuc2lnbmVkIGludCBzZWdfc2l6ZSA9CisJCXJlcS0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSArIG5leHQtPmJpby0+Ymlfc2VnX2Zyb250X3NpemU7CiAKIAkvKgogCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBlaXRoZXIgb2YgdGhlIHJlcXVlc3RzIGFyZSByZS1xdWV1ZWQKQEAgLTMyNCw4ICszMzUsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAl0b3RhbF9waHlzX3NlZ21lbnRzID0gcmVxLT5ucl9waHlzX3NlZ21lbnRzICsgbmV4dC0+bnJfcGh5c19zZWdtZW50czsKLQlpZiAoYmxrX3BoeXNfY29udGlnX3NlZ21lbnQocSwgcmVxLT5iaW90YWlsLCBuZXh0LT5iaW8pKQorCWlmIChibGtfcGh5c19jb250aWdfc2VnbWVudChxLCByZXEtPmJpb3RhaWwsIG5leHQtPmJpbykpIHsKKwkJaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyA9PSAxKQorCQkJcmVxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisJCWlmIChuZXh0LT5ucl9waHlzX3NlZ21lbnRzID09IDEpCisJCQluZXh0LT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplID0gc2VnX3NpemU7CiAJCXRvdGFsX3BoeXNfc2VnbWVudHMtLTsKKwl9CiAKIAlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHEtPm1heF9waHlzX3NlZ21lbnRzKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggYjIxZGNkYi4uNDEzOTJmYiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTE0MSw4ICsxNDEsNiBAQAogCWlmIChxLT51bnBsdWdfZGVsYXkgPT0gMCkKIAkJcS0+dW5wbHVnX2RlbGF5ID0gMTsKIAotCUlOSVRfV09SSygmcS0+dW5wbHVnX3dvcmssIGJsa191bnBsdWdfd29yayk7Ci0KIAlxLT51bnBsdWdfdGltZXIuZnVuY3Rpb24gPSBibGtfdW5wbHVnX3RpbWVvdXQ7CiAJcS0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGU1YzU3OTcuLmQyZTQ5YWYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCisrKyBiL2Jsb2NrL2Jsay5oCkBAIC0yMCw2ICsyMCw3IEBACiB2b2lkIGJsa19ycV90aW1lZF9vdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgYmxrX2RlbGV0ZV90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKIHZvaWQgYmxrX2FkZF90aW1lcihzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgX19nZW5lcmljX3VucGx1Z19kZXZpY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiAKIC8qCiAgKiBJbnRlcm5hbCBhdG9taWMgZmxhZ3MgZm9yIHJlcXVlc3QgaGFuZGxpbmcKZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggNTZjYjM0My4uMDM0MTEyYiAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTEwMjQsOCArMTAyNCw3IEBACiAJYmNkLT5yZWxlYXNlID0gcmVsZWFzZTsKIAlrcmVmX2luaXQoJmJjZC0+cmVmKTsKIAlkZXYgPSBNS0RFVihic2dfbWFqb3IsIGJjZC0+bWlub3IpOwotCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShic2dfY2xhc3MsIHBhcmVudCwgZGV2LCBOVUxMLAotCQkJCQkgICIlcyIsIGRldm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoYnNnX2NsYXNzLCBwYXJlbnQsIGRldiwgTlVMTCwgIiVzIiwgZGV2bmFtZSk7CiAJaWYgKElTX0VSUihjbGFzc19kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoY2xhc3NfZGV2KTsKIAkJZ290byBwdXRfZGV2OwpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMDQ1MTg5Mi4uNTkxNzNhNiAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KIAkJYmxrX3JlbW92ZV9wbHVnKHEpOwotCQlxLT5yZXF1ZXN0X2ZuKHEpOworCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCWJyZWFrOwogCiAJY2FzZSBFTEVWQVRPUl9JTlNFUlRfU09SVDoKQEAgLTk1MCw3ICs5NTAsNyBAQAogCQkgICAgYmxrX29yZGVyZWRfY3VyX3NlcShxKSA9PSBRVUVVRV9PUkRTRVFfRFJBSU4gJiYKIAkJICAgIGJsa19vcmRlcmVkX3JlcV9zZXEoZmlyc3RfcnEpID4gUVVFVUVfT1JEU0VRX0RSQUlOKSB7CiAJCQlibGtfb3JkZXJlZF9jb21wbGV0ZV9zZXEocSwgUVVFVUVfT1JEU0VRX0RSQUlOLCAwKTsKLQkJCXEtPnJlcXVlc3RfZm4ocSk7CisJCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCX0KIAl9CiB9CkBAIC0xMTA5LDggKzExMDksNyBAQAogCWVsdl9kcmFpbl9lbGV2YXRvcihxKTsKIAogCXdoaWxlIChxLT5ycS5lbHZwcml2KSB7Ci0JCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC0xMTY2LDE1ICsxMTY1LDEwIEBACiAJCQkgIHNpemVfdCBjb3VudCkKIHsKIAljaGFyIGVsZXZhdG9yX25hbWVbRUxWX05BTUVfTUFYXTsKLQlzaXplX3QgbGVuOwogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplOwogCi0JZWxldmF0b3JfbmFtZVtzaXplb2YoZWxldmF0b3JfbmFtZSkgLSAxXSA9ICdcMCc7Ci0Jc3RybmNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkgLSAxKTsKLQlsZW4gPSBzdHJsZW4oZWxldmF0b3JfbmFtZSk7Ci0KLQlpZiAobGVuICYmIGVsZXZhdG9yX25hbWVbbGVuIC0gMV0gPT0gJ1xuJykKLQkJZWxldmF0b3JfbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisJc3RybGNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkpOworCXN0cnN0cmlwKGVsZXZhdG9yX25hbWUpOwogCiAJZSA9IGVsZXZhdG9yX2dldChlbGV2YXRvcl9uYW1lKTsKIAlpZiAoIWUpIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDRjZDM0MzMuLjY0NmUxZDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMzU4LDcgKzM1OCw2IEBACiAvKioKICAqIGJsa19hbGxvY19kZXZ0IC0gYWxsb2NhdGUgYSBkZXZfdCBmb3IgYSBwYXJ0aXRpb24KICAqIEBwYXJ0OiBwYXJ0aXRpb24gdG8gYWxsb2NhdGUgZGV2X3QgZm9yCi0gKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWcKICAqIEBkZXZ0OiBvdXQgcGFyYW1ldGVyIGZvciByZXN1bHRpbmcgZGV2X3QKICAqCiAgKiBBbGxvY2F0ZSBhIGRldl90IGZvciBibG9jayBkZXZpY2UuCkBAIC01MzUsNyArNTM0LDcgQEAKIC8qKgogICogZ2V0X2dlbmRpc2sgLSBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGRldmljZQogICogQGRldnQ6IGRldmljZSB0byBnZXQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGZvcgotICogQHBhcnQ6IHJldHVybmVkIHBhcnRpdGlvbiBpbmRleAorICogQHBhcnRubzogcmV0dXJuZWQgcGFydGl0aW9uIGluZGV4CiAgKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBwYXJ0aXRpb25pbmcKICAqIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIEBkZXZ0LgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwppbmRleCBlODM2MmMxLi5kY2JmMWJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwpAQCAtMTE1LDM0ICsxMTUsMzIgQEAKICAqCShzdGFydCkgZGVwZW5kZW50IG9wZXJhdGlvbnMgb24gdGhlaXIgdGFyZ2V0IGNoYW5uZWwKICAqIEB0eDogdHJhbnNhY3Rpb24gd2l0aCBkZXBlbmRlbmNpZXMKICAqLwotdm9pZAotYXN5bmNfdHhfcnVuX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQordm9pZCBhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0Jc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpuZXh0ID0gdHgtPm5leHQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXAgPSB0eC0+bmV4dDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlcF9uZXh0OwogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAotCWlmICghbmV4dCkKKwlpZiAoIWRlcCkKIAkJcmV0dXJuOwogCi0JdHgtPm5leHQgPSBOVUxMOwotCWNoYW4gPSBuZXh0LT5jaGFuOworCWNoYW4gPSBkZXAtPmNoYW47CiAKIAkvKiBrZWVwIHN1Ym1pdHRpbmcgdXAgdW50aWwgYSBjaGFubmVsIHN3aXRjaCBpcyBkZXRlY3RlZAogCSAqIGluIHRoYXQgY2FzZSB3ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhcyBhIHJlc3VsdCBvZgogCSAqIHByb2Nlc3NpbmcgdGhlIGludGVycnVwdCBmcm9tIGFzeW5jX3R4X2NoYW5uZWxfc3dpdGNoCiAJICovCi0Jd2hpbGUgKG5leHQgJiYgbmV4dC0+Y2hhbiA9PSBjaGFuKSB7Ci0JCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqX25leHQ7CisJZm9yICg7IGRlcDsgZGVwID0gZGVwX25leHQpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXAtPmxvY2spOworCQlkZXAtPnBhcmVudCA9IE5VTEw7CisJCWRlcF9uZXh0ID0gZGVwLT5uZXh0OworCQlpZiAoZGVwX25leHQgJiYgZGVwX25leHQtPmNoYW4gPT0gY2hhbikKKwkJCWRlcC0+bmV4dCA9IE5VTEw7IC8qIC0+bmV4dCB3aWxsIGJlIHN1Ym1pdHRlZCAqLworCQllbHNlCisJCQlkZXBfbmV4dCA9IE5VTEw7IC8qIHN1Ym1pdCBjdXJyZW50IGRlcCBhbmQgdGVybWluYXRlICovCisJCXNwaW5fdW5sb2NrX2JoKCZkZXAtPmxvY2spOwogCi0JCXNwaW5fbG9ja19iaCgmbmV4dC0+bG9jayk7Ci0JCW5leHQtPnBhcmVudCA9IE5VTEw7Ci0JCV9uZXh0ID0gbmV4dC0+bmV4dDsKLQkJaWYgKF9uZXh0ICYmIF9uZXh0LT5jaGFuID09IGNoYW4pCi0JCQluZXh0LT5uZXh0ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfYmgoJm5leHQtPmxvY2spOwotCi0JCW5leHQtPnR4X3N1Ym1pdChuZXh0KTsKLQkJbmV4dCA9IF9uZXh0OworCQlkZXAtPnR4X3N1Ym1pdChkZXApOwogCX0KIAogCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggNTlmMzNmYS4uZDE5YjZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTAxLDQgKzEwMSw2IEBACiBzb3VyY2UgImRyaXZlcnMvdWlvL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy94ZW4vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyIKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDI3MzViZGUuLjQ2Yzg2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtOTksMyArOTksNCBAQAogb2JqLSQoQ09ORklHX1NTQikJCSs9IHNzYi8KIG9iai0kKENPTkZJR19WSVJUSU8pCQkrPSB2aXJ0aW8vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SKQkJKz0gcmVndWxhdG9yLworb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggYjFjNzIzZi4uNzBmN2Y2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NH0sCiAJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKIAkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDEwYTM2NTEuLjdiMDExZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWxhcm1fYXR0ciA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NCwgLm93bmVyID0gVEhJU19NT0RVTEV9LAorCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0fSwKIAkuc2hvdyA9IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93LAogCS5zdG9yZSA9IGFjcGlfYmF0dGVyeV9hbGFybV9zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwppbmRleCBiZjViMDRkLi42MzFlZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaHIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW8pOwotCQlCQ0RfVE9fQklOKHlyKTsKLQkJQkNEX1RPX0JJTihjZW50KTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhyID0gYmNkMmJpbihocik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW8gPSBiY2QyYmluKG1vKTsKKwkJeXIgPSBiY2QyYmluKHlyKTsKKwkJY2VudCA9IGJjZDJiaW4oY2VudCk7CiAJfQogCiAJLyogd2UncmUgdHJ1c3RpbmcgdGhlIEZBRFQgKHNlZSBhYm92ZSkgKi8KQEAgLTIwNCw3ICsyMDQsNyBAQAogewogCXUzMiB2YWwgPSBDTU9TX1JFQUQob2Zmc2V0KTsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHZhbCk7CisJCXZhbCA9IGJjZDJiaW4odmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIHN0YXRpYyB2b2lkIGNtb3NfYmNkX3dyaXRlKHUzMiB2YWwsIGludCBvZmZzZXQsIGludCBydGNfY29udHJvbCkKIHsKIAlpZiAoIShydGNfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCSU5fVE9fQkNEKHZhbCk7CisJCXZhbCA9IGJpbjJiY2QodmFsKTsKIAlDTU9TX1dSSVRFKHZhbCwgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IDkxZGVjNDQuLjI0ZTgwZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCXRhYmxlX2F0dHItPmF0dHIucmVhZCA9IGFjcGlfdGFibGVfc2hvdzsKIAl0YWJsZV9hdHRyLT5hdHRyLmF0dHIubmFtZSA9IHRhYmxlX2F0dHItPm5hbWU7CiAJdGFibGVfYXR0ci0+YXR0ci5hdHRyLm1vZGUgPSAwNDQ0OwotCXRhYmxlX2F0dHItPmF0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vZl9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hdGEvcGF0YV9vZl9wbGF0Zm9ybS5jCmluZGV4IDQwOGRhMzAuLjFmMThhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2ZfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCXJldCA9IG9mX2lycV90b19yZXNvdXJjZShkbiwgMCwgJmlycV9yZXMpOwogCWlmIChyZXQgPT0gTk9fSVJRKQotCQlpcnFfcmVzLnN0YXJ0ID0gaXJxX3Jlcy5lbmQgPSAtMTsKKwkJaXJxX3Jlcy5zdGFydCA9IGlycV9yZXMuZW5kID0gMDsKIAllbHNlCiAJCWlycV9yZXMuZmxhZ3MgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDYzMThmNmIuLmQ4ZThjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCkBAIC01NCw3ICs1NCw3IEBACiAJICBzdWNoIGZpcm13YXJlLCBhbmQgZG8gbm90IHdpc2ggdG8gdXNlIGFuIGluaXRyZC4KIAogCSAgVGhpcyBzaW5nbGUgb3B0aW9uIGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgZmlybXdhcmUgZm9yCi0JICBldmVyeSBkcml2ZXIgd2hpY2ggdXNlZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cworCSAgZXZlcnkgZHJpdmVyIHdoaWNoIHVzZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cwogCSAgZmlybXdhcmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgdG8gYXZvaWQgYSBwcm9saWZlcmF0aW9uCiAJICBvZiAnSW5jbHVkZSBmaXJtd2FyZSBmb3IgeHh4IGRldmljZScgb3B0aW9ucy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IGVmNTIyYWUuLjVhZWUxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTMzMyw5ICszMzMsNyBAQAogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhOwogCi0JaWYgKHN0cmNtcChuYW1lLCBkZXYtPmJ1c19pZCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN5c2ZzX3N0cmVxKG5hbWUsIGRldi0+YnVzX2lkKTsKIH0KIAogLyoqCkBAIC05ODIsNiArOTgwLDU2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfZ2V0X2RldmljZV9rbGlzdCk7CiAKKy8qCisgKiBZZXMsIHRoaXMgZm9yY2FibHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0CisgKiBqdXN0IHdhbnRzIHRvIHNvcnQgdGhlIGtsaXN0LCBub3QgY2hhbmdlIHJlZmVyZW5jZSBjb3VudHMgYW5kCisgKiB0YWtlL2Ryb3AgbG9ja3MgcmFwaWRseSBpbiB0aGUgcHJvY2Vzcy4gIEl0IGRvZXMgYWxsIHRoaXMgd2hpbGUKKyAqIGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBsaXN0LCBzbyBvYmplY3RzIGNhbid0IG90aGVyd2lzZSBiZQorICogYWRkZWQvcmVtb3ZlZCB3aGlsZSB3ZSdyZSBzd2l6emxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChzdHJ1Y3QgZGV2aWNlICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQlpbnQgKCpjb21wYXJlKShjb25zdCBzdHJ1Y3QgZGV2aWNlICphLAorCQkJCQkJCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmIpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlICpiOworCisJbGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHsKKwkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOworCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWlmIChjb21wYXJlKGEsIGIpIDw9IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+a25vZGVfYnVzLm5fbm9kZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworfQorCit2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCSAgIGludCAoKmNvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmEsCisJCQkJCSAgY29uc3Qgc3RydWN0IGRldmljZSAqYikpCit7CisJTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBrbGlzdCAqZGV2aWNlX2tsaXN0OworCisJZGV2aWNlX2tsaXN0ID0gYnVzX2dldF9kZXZpY2Vfa2xpc3QoYnVzKTsKKworCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7CisJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKKwkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChkZXYsICZzb3J0ZWRfZGV2aWNlcywgY29tcGFyZSk7CisJfQorCWxpc3Rfc3BsaWNlKCZzb3J0ZWRfZGV2aWNlcywgJmRldmljZV9rbGlzdC0+a19saXN0KTsKKwlzcGluX3VubG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3NvcnRfYnJlYWR0aGZpcnN0KTsKKwogaW50IF9faW5pdCBidXNlc19pbml0KHZvaWQpCiB7CiAJYnVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJidXMiLCAmYnVzX3VldmVudF9vcHMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggYjk4Y2IxNC4uOGMyY2MyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC01MjMsMTEgKzUyMywxNiBAQAogICogZGV2aWNlX2luaXRpYWxpemUgLSBpbml0IGRldmljZSBzdHJ1Y3R1cmUuCiAgKiBAZGV2OiBkZXZpY2UuCiAgKgotICogVGhpcyBwcmVwYXJlcyB0aGUgZGV2aWNlIGZvciB1c2UgYnkgb3RoZXIgbGF5ZXJzLAotICogaW5jbHVkaW5nIGFkZGluZyBpdCB0byB0aGUgZGV2aWNlIGhpZXJhcmNoeS4KKyAqIFRoaXMgcHJlcGFyZXMgdGhlIGRldmljZSBmb3IgdXNlIGJ5IG90aGVyIGxheWVycyBieSBpbml0aWFsaXppbmcKKyAqIGl0cyBmaWVsZHMuCiAgKiBJdCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBkZXZpY2VfcmVnaXN0ZXIoKSwgaWYgY2FsbGVkIGJ5Ci0gKiB0aGF0LCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQotICogbWF5IHVzZSBAZGV2J3MgZmllbGRzIChlLmcuIHRoZSByZWZjb3VudCkuCisgKiB0aGF0IGZ1bmN0aW9uLCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQorICogbWF5IHVzZSBAZGV2J3MgZmllbGRzLiBJbiBwYXJ0aWN1bGFyLCBnZXRfZGV2aWNlKCkvcHV0X2RldmljZSgpCisgKiBtYXkgYmUgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIG9mIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOiBVc2UgcHV0X2RldmljZSgpIHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZCBvZiBmcmVlaW5nCisgKiBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgY2FsbGVkIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQgZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtODM1LDkgKzg0MCwxMyBAQAogICogVGhpcyBpcyBwYXJ0IDIgb2YgZGV2aWNlX3JlZ2lzdGVyKCksIHRob3VnaCBtYXkgYmUgY2FsbGVkCiAgKiBzZXBhcmF0ZWx5IF9pZmZfIGRldmljZV9pbml0aWFsaXplKCkgaGFzIGJlZW4gY2FsbGVkIHNlcGFyYXRlbHkuCiAgKgotICogVGhpcyBhZGRzIGl0IHRvIHRoZSBrb2JqZWN0IGhpZXJhcmNoeSB2aWEga29iamVjdF9hZGQoKSwgYWRkcyBpdAorICogVGhpcyBhZGRzIEBkZXYgdG8gdGhlIGtvYmplY3QgaGllcmFyY2h5IHZpYSBrb2JqZWN0X2FkZCgpLCBhZGRzIGl0CiAgKiB0byB0aGUgZ2xvYmFsIGFuZCBzaWJsaW5nIGxpc3RzIGZvciB0aGUgZGV2aWNlLCB0aGVuCiAgKiBhZGRzIGl0IHRvIHRoZSBvdGhlciByZWxldmFudCBzdWJzeXN0ZW1zIG9mIHRoZSBkcml2ZXIgbW9kZWwuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB5b3VyCisgKiByZWZlcmVuY2UgaW5zdGVhZC4KICAqLwogaW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTY1LDYgKzk3NCwxMCBAQAogICogSS5lLiB5b3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGUgdHdvIGhlbHBlcnMgc2VwYXJhdGVseSBpZgogICogaGF2ZSBhIGNsZWFybHkgZGVmaW5lZCBuZWVkIHRvIHVzZSBhbmQgcmVmY291bnQgdGhlIGRldmljZQogICogYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBoaWVyYXJjaHkuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB0aGUKKyAqIHJlZmVyZW5jZSBpbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCiAgKi8KIGludCBkZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTI0Myw3ICsxMjU2LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJvcjoKLQlrZnJlZShkZXYpOworCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2NyZWF0ZV92YXJncyk7CkBAIC0xMzE0LDYgKzEzMjcsMTEgQEAKICAqIGRldmljZV9yZW5hbWUgLSByZW5hbWVzIGEgZGV2aWNlCiAgKiBAZGV2OiB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSB0byBiZSByZW5hbWVkCiAgKiBAbmV3X25hbWU6IHRoZSBuZXcgbmFtZSBvZiB0aGUgZGV2aWNlCisgKgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSBtdXR1YWwKKyAqIGV4Y2x1c2lvbiBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgY2FsbHMgb2YgZGV2aWNlX3JlbmFtZQorICogb24gdGhlIHNhbWUgZGV2aWNlIHRvIGVuc3VyZSB0aGF0IG5ld19uYW1lIGlzIHZhbGlkIGFuZAorICogd29uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBkZXZpY2VzLgogICovCiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCAzYWM0NDNiLi4yMGZlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjU3LDYgKzI1Nyw5IEBACiAJICogaXMgYW4gZXJyb3IuCiAJICovCiAKKwlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQorCQlyZXR1cm4gMDsKKwogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJZG93bigmZGV2LT5wYXJlbnQtPnNlbSk7CiAJZG93bigmZGV2LT5zZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCBjOWM5MmIwLi5iN2U1NzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMTY0LDggKzE2NCw3IEBACiAJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIHZhbHVlICglZClcbiIsIF9fZnVuY19fLAotCQkgICAgICAgbG9hZGluZyk7CisJCWRldl9lcnIoZGV2LCAiJXM6IHVuZXhwZWN0ZWQgdmFsdWUgKCVkKVxuIiwgX19mdW5jX18sIGxvYWRpbmcpOwogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgLTE6CiAJCWZ3X2xvYWRfYWJvcnQoZndfcHJpdik7CkBAIC0zMDksNyArMzA4LDcgQEAKIAkqZGV2X3AgPSBOVUxMOwogCiAJaWYgKCFmd19wcml2IHx8ICFmX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2tmcmVlOwogCX0KQEAgLTMyOSw4ICszMjgsNyBAQAogCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3Jfa2ZyZWU7CiAJfQogCSpkZXZfcCA9IGZfZGV2OwpAQCAtMzYzLDE1ICszNjEsMTMgQEAKIAlmd19wcml2LT5mdyA9IGZ3OwogCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZl9kZXYtPmtvYmosICZmd19wcml2LT5hdHRyX2RhdGEpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIAogCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIApAQCAtNDAxLDggKzM5Nyw4IEBACiAKIAkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga3phbGxvYyhzaXplb2YoKmZpcm13YXJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTEsMTUgKzQwNywxNSBAQAogCSAgICAgYnVpbHRpbisrKSB7CiAJCWlmIChzdHJjbXAobmFtZSwgYnVpbHRpbi0+bmFtZSkpCiAJCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZmlybXdhcmU6IHVzaW5nIGJ1aWx0LWluIGZpcm13YXJlICVzXG4iLAotCQkgICAgICAgbmFtZSk7CisJCWRldl9pbmZvKGRldmljZSwgImZpcm13YXJlOiB1c2luZyBidWlsdC1pbiBmaXJtd2FyZSAlc1xuIiwKKwkJCSBuYW1lKTsKIAkJZmlybXdhcmUtPnNpemUgPSBidWlsdGluLT5zaXplOwogCQlmaXJtd2FyZS0+ZGF0YSA9IGJ1aWx0aW4tPmRhdGE7CiAJCXJldHVybiAwOwogCX0KIAogCWlmICh1ZXZlbnQpCi0JCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlOiByZXF1ZXN0aW5nICVzXG4iLCBuYW1lKTsKKwkJZGV2X2luZm8oZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCiAJcmV0dmFsID0gZndfc2V0dXBfZGV2aWNlKGZpcm13YXJlLCAmZl9kZXYsIG5hbWUsIGRldmljZSwgdWV2ZW50KTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGFmMGQxNzUuLjUyNjBlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzI1LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgQ0xBU1NfQVRUUihwcm9iZSwgMDcwMCwgTlVMTCwgbWVtb3J5X3Byb2JlX3N0b3JlKTsKK3N0YXRpYyBDTEFTU19BVFRSKHByb2JlLCBTX0lXVVNSLCBOVUxMLCBtZW1vcnlfcHJvYmVfc3RvcmUpOwogCiBzdGF0aWMgaW50IG1lbW9yeV9wcm9iZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA1MTE2Yjc4Li5mNTIwNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgbm9kZV9jbGFzcyA9IHsKIAkubmFtZSA9ICJub2RlIiwKQEAgLTYxLDM0ICs2Miw1MiBAQAogCXNpX21lbWluZm9fbm9kZSgmaSwgbmlkKTsKIAogCW4gPSBzcHJpbnRmKGJ1ZiwgIlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBNZW1GcmVlOiAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIExvd1RvdGFsOiAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWVtRnJlZTogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBY3RpdmU6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgSW5hY3RpdmU6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFjdGl2ZShhbm9uKTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZShhbm9uKTogJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlKGZpbGUpOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEluYWN0aXZlKGZpbGUpOiAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkgICAgICAgIk5vZGUgJWQgVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCiAjZW5kaWYKLQkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQW5vblBhZ2VzOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQm91bmNlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2tUbXA6ICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgU1JlY2xhaW1hYmxlOiAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBTVW5yZWNsYWltOiAgICU4bHUga0JcbiIsCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJICAgICAgICJOb2RlICVkIEhpZ2hUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTG93VG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIExvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKKwkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgRmlsZVBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrVG1wOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIsCiAJCSAgICAgICBuaWQsIEsoaS50b3RhbHJhbSksCiAJCSAgICAgICBuaWQsIEsoaS5mcmVlcmFtKSwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS5mcmVlcmFtKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9VTkVWSUNUQUJMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQkgICAgICAgbmlkLCBLKGkudG90YWxoaWdoKSwKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKQEAgLTE3Myw2ICsxOTIsOCBAQAogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbWVtaW5mbyk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CisKKwkJc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKG5vZGUpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTIsNiArMjEzLDggQEAKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbnVtYXN0YXQpOwogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CiAKKwlzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShub2RlKTsKKwogCXN5c2Rldl91bnJlZ2lzdGVyKCZub2RlLT5zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDNmOTQwMzkuLmRmY2JmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC00MiwxMCArNDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmIChudW0tLSA9PSAwKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmIG51bS0tID09IDApCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03OCwxMCArNzYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmICghc3RyY21wKHItPm5hbWUsIG5hbWUpKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmICFzdHJjbXAoci0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNTksOSArMjU1LDkgQEAKIAogCQlwID0gci0+cGFyZW50OwogCQlpZiAoIXApIHsKLQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQkJaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9NRU0pCiAJCQkJcCA9ICZpb21lbV9yZXNvdXJjZTsKLQkJCWVsc2UgaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWVsc2UgaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlwID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJfQogCkBAIC0yODIsOSArMjc4LDE0IEBACiAJCXJldHVybiByZXQ7CiAKICBmYWlsZWQ6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlpZiAocGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiAoSU9SRVNPVVJDRV9NRU18SU9SRVNPVVJDRV9JTykpCi0JCQlyZWxlYXNlX3Jlc291cmNlKCZwZGV2LT5yZXNvdXJjZVtpXSk7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKKwkJdW5zaWduZWQgbG9uZyB0eXBlID0gcmVzb3VyY2VfdHlwZShyKTsKKworCQlpZiAodHlwZSA9PSBJT1JFU09VUkNFX01FTSB8fCB0eXBlID09IElPUkVTT1VSQ0VfSU8pCisJCQlyZWxlYXNlX3Jlc291cmNlKHIpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfYWRkKTsKQEAgLTMwNiw3ICszMDcsOSBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKLQkJCWlmIChyLT5mbGFncyAmIChJT1JFU09VUkNFX01FTXxJT1JFU09VUkNFX0lPKSkKKwkJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUocik7CisKKwkJCWlmICh0eXBlID09IElPUkVTT1VSQ0VfTUVNIHx8IHR5cGUgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlyZWxlYXNlX3Jlc291cmNlKHIpOwogCQl9CiAJfQpAQCAtMzkxLDYgKzM5NCw1MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSk7CiAKKy8qKgorICogcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEKKyAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAaWQ6IGluc3RhbmNlIGlkCisgKiBAZGF0YTogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBwbGF0Zm9ybSBkZXZpY2UKKyAqIEBzaXplOiBzaXplIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAorICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQorICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQorICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQorICogZHJvcHBlZC4KKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXR2YWw7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIGlkKTsKKwlpZiAoIXBkZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OworCisJaWYgKHNpemUpIHsKKwkJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gcGRldjsKKworZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOworfQorCiBzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihfZGV2LT5kcml2ZXIpOwpAQCAtODYyLDcgKzkxMiw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKLXN0cnVjdCBwbV9leHRfb3BzIHBsYXRmb3JtX3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG1fZXh0X29wcyBwbGF0Zm9ybV9wbV9vcHMgPSB7CiAJLmJhc2UgPSB7CiAJCS5wcmVwYXJlID0gcGxhdGZvcm1fcG1fcHJlcGFyZSwKIAkJLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAyNzNhOTQ0Li42OTJjMjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJICogdHJhbnNpdGlvbiBpcyBpbiBwcm9ncmVzcyBpbiBvcmRlciB0byBhdm9pZCBsZWF2aW5nIHRoZW0KIAkJICogdW5oYW5kbGVkIGRvd24gdGhlIHJvYWQKIAkJICovCi0JCVdBUk5fT04odHJ1ZSk7CisJCWRldl9XQVJOKGRldiwgIlBhcmVudGxlc3MgZGV2aWNlIHJlZ2lzdGVyZWQgZHVyaW5nIGEgUE0gdHJhbnNhY3Rpb25cbiIpOwogCX0KIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7CkBAIC03NzgsMTAgKzc3OCw3IEBACiAKIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KQogewotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAiLCBmdW5jdGlvbik7Ci0JCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCIlcyByZXR1cm5zICIsIGZuKTsKLQkJcHJpbnRrKCIlZFxuIiwgcmV0KTsKLQl9CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAlcEYgcmV0dXJucyAlZFxuIiwgZnVuY3Rpb24sIGZuLCByZXQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBiODI2NTRlLi5kODc2YWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG1hYywgU19JUlVHTywgYW9lZGlza19zaG93X21hYywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmV0aWYsIFNfSVJVR08sIGFvZWRpc2tfc2hvd19uZXRpZiwgTlVMTCk7CiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTywgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93ID0gYW9lZGlza19zaG93X2Z3dmVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwppbmRleCAxZjU2ZDJjLi4yMDBlZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwpAQCAtMjg0LDkgKzI4NCw5IEBACiAJCXJldHVybiBQVFJfRVJSKGFvZV9jbGFzcyk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYXJkZXZzKTsgKytpKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoYW9lX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsIGNoYXJkZXZzW2ldLm5hbWUpOworCQlkZXZpY2VfY3JlYXRlKGFvZV9jbGFzcywgTlVMTCwKKwkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgY2hhcmRldnNbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGNmNjRkZGYuLjJjZWEyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDE3Miw3ICs0MTcyLDcgQEAKIAlpbnQgaSwgdW5pdCwgZHJpdmU7CiAJaW50IGVyciwgZHI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEZEQzEpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggN2IzMzUxMi4uOTAzNGNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBpZF9hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJwaWQiLCAubW9kZSA9IFNfSVJVR08sIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmF0dHIgPSB7IC5uYW1lID0gInBpZCIsIC5tb2RlID0gU19JUlVHT30sCiAJLnNob3cgPSBwaWRfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCmluZGV4IGQ3MzFjYTQuLjlkZmEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYwpAQCAtNjg2LDkgKzY4Niw4IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBHX1VOSVRTOyB1bml0KyspIHsKIAkJc3RydWN0IHBnICpkZXYgPSAmZGV2aWNlc1t1bml0XTsKIAkJaWYgKGRldi0+cHJlc2VudCkKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwZ19jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicGcldSIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwZ19jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwZyV1IiwgdW5pdCk7CiAJfQogCWVyciA9IDA7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwppbmRleCA2NzNiOGIyLi41YWUyMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKQEAgLTk3OSwxMiArOTc5LDEwIEBACiAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgUFRfVU5JVFM7IHVuaXQrKykKIAkJaWYgKHB0W3VuaXRdLnByZXNlbnQpIHsKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwdF9jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicHQlZCIsIHVuaXQpOwotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHB0X2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksIE5VTEwsCi0JCQkJCSAgICAgICJwdCVkbiIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwdCVkIiwgdW5pdCk7CisJCQlkZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCisJCQkJICAgICAgTlVMTCwgInB0JWRuIiwgdW5pdCk7CiAJCX0KIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCAwZTA3NzE1Li4xOTVjYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMzAyLDkgKzMwMiw4IEBACiBzdGF0aWMgdm9pZCBwa3Rfc3lzZnNfZGV2X25ldyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewogCWlmIChjbGFzc19wa3RjZHZkKSB7Ci0JCXBkLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3NfcGt0Y2R2ZCwgTlVMTCwKLQkJCQkJCXBkLT5wa3RfZGV2LCBOVUxMLAotCQkJCQkJIiVzIiwgcGQtPm5hbWUpOworCQlwZC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShjbGFzc19wa3RjZHZkLCBOVUxMLCBwZC0+cGt0X2RldiwgTlVMTCwKKwkJCQkJIiVzIiwgcGQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKHBkLT5kZXYpKQogCQkJcGQtPmRldiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDNhMjgxZWYuLmY2MGU0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM0OSw4ICszNDksNiBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKLQotCWludCBzZ19zdGF0WzZdOwogfTsKIAogLyoKQEAgLTY4NSw3ICs2ODMsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCXVycS0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbSA8IDUgPyBuX2VsZW0gOiA1XSsrOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1Yl9jbWRfYnVpbGRfcGFja2V0KHNjLCBsdW4sIGNtZCwgdXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggZjFjOGZlYi4uMTczMGQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTI0OSw3ICsyNDksNiBAQAogCXN0cnVjdCBIdkxwRXZlbnQgKmhldjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklPTUFYQkxPQ0tETUFdOwogCWludCBzZ2luZGV4OwotCWludCBzdGF0aW5kZXg7CiAJc3RydWN0IHZpb2Rhc2RfZGV2aWNlICpkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI1OCwxMSArMjU3LDkgQEAKIAlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CiAJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3JlYWQ7Ci0JCXN0YXRpbmRleCA9IDA7CiAJfSBlbHNlIHsKIAkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3dyaXRlOwotCQlzdGF0aW5kZXggPSAxOwogCX0KIAogICAgICAgICBkID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDcwMGZmOTYuLjEyMjI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0xMDQzLDE1ICsxMDQzLDYgQEAKIAkgIG9wZW4gc2VsZWN0cyBvbmUgb2YgdGhlIHRpbWVycyBzdXBwb3J0ZWQgYnkgdGhlIEhQRVQuICBUaGUgdGltZXJzIGFyZQogCSAgbm9uLXBlcmlvZGljIGFuZC9vciBwZXJpb2RpYy4KIAotY29uZmlnIEhQRVRfUlRDX0lSUQotCWJvb2wKLQlkZWZhdWx0IEhQRVRfRU1VTEFURV9SVEMKLQlkZXBlbmRzIG9uIFJUQyAmJiBIUEVUCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGRpc2FibGUgUlRDX0lSUSBpbiBkcml2ZXJzL2NoYXIvcnRjLmMuIEl0Ci0JICBpcyBhc3N1bWVkIHRoZSBwbGF0Zm9ybSBjYWxsZWQgaHBldF9hbGxvYyB3aXRoIHRoZSBSVEMgSVJRIHZhbHVlcyBmb3IKLQkgIHRoZSBIUEVUIHRpbWVycy4KLQogY29uZmlnIEhQRVRfTU1BUAogCWJvb2wgIkFsbG93IG1tYXAgb2YgSFBFVCIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggMzFkY2Q5MS4uZGM4ZDFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTQxNyw2ICs0MTcsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FsaV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggNjAzYTk4Ni4uM2Y5ODI1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC0yMjMsMTIgKzIyMywxNCBAQAogCiAJY3VycmVudF9zaXplID0gQV9TSVpFX0xWTDIoYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplKTsKIAotCS8qIEdldCB0aGUgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBTURfTU1CQVNFLCAmdGVtcCk7Ci0JdGVtcCA9ICh0ZW1wICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSyk7Ci0JYW1kX2lyb25nYXRlX3ByaXZhdGUucmVnaXN0ZXJzID0gKHZvbGF0aWxlIHU4IF9faW9tZW0gKikgaW9yZW1hcCh0ZW1wLCA0MDk2KTsKLQlpZiAoIWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycykKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMpIHsKKwkJLyogR2V0IHRoZSBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBTURfTU1CQVNFLCAmdGVtcCk7CisJCXRlbXAgPSAodGVtcCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spOworCQlhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMgPSAodm9sYXRpbGUgdTggX19pb21lbSAqKSBpb3JlbWFwKHRlbXAsIDQwOTYpOworCQlpZiAoIWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIFdyaXRlIG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgZ2F0dCB0YWJsZSAqLwogCXdyaXRlbChhZ3BfYnJpZGdlLT5nYXR0X2J1c19hZGRyLCBhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMrQU1EX0FUVEJBU0UpOwpAQCAtNDkyLDYgKzQ5NCwyNiBAQAogCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhZ3BfYW1kazdfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWdwX2FtZGs3X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyZXR1cm4gYW1kX2lyb25nYXRlX2RyaXZlci5jb25maWd1cmUoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiAvKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7CiAJewpAQCAtNTI4LDYgKzU1MCwxMCBAQAogCS5pZF90YWJsZQk9IGFncF9hbWRrN19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWRrN19wcm9iZSwKIAkucmVtb3ZlCQk9IGFncF9hbWRrN19yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBhZ3BfYW1kazdfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFncF9hbWRrN19yZXN1bWUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFncF9hbWRrN19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAyODEyZWUyLi41MmY0MzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc3Miw2ICs3NzIsNiBAQAogbW9kdWxlX2V4aXQoYWdwX2FtZDY0X2NsZWFudXApOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgQW5kaSBLbGVlbiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKIG1vZHVsZV9wYXJhbShhZ3BfdHJ5X3Vuc3VwcG9ydGVkLCBib29sLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggYWUyNzkxYi4uZjE1MzdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTU2MSw2ICs1NjEsNiBAQAogbW9kdWxlX2luaXQoYWdwX2F0aV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hdGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggM2EzY2MwMy4uOGM2MTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTM0OSw3ICszNDksNyBAQAogX19zZXR1cCgiYWdwPSIsIGFncF9zZXR1cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBR1AgR0FSVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihBR1BHQVJUX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDA0M2UzNjYuLjljZjZlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtNTQsOCArNTQsNyBAQAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NVFfSEIgfHwgXAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdfSEIgfHwgXAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNX0hCIHx8IFwKLQkJIGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVHTUVfSEIgfHwgXAotCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCKQorCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNRV9IQikKIAogI2RlZmluZSBJU19HMzMgKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzMzX0hCIHx8IFwKIAkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9RMzVfSEIgfHwgXApAQCAtNjMsNyArNjIsOCBAQAogCiAjZGVmaW5lIElTX0c0WCAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0hCIHx8IFwKLQkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEIpCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCKQogCiBleHRlcm4gaW50IGFncF9tZW1vcnlfcmVzZXJ2ZWQ7CiAKQEAgLTIxNCw4ICsyMTQsOCBAQAogCWlmIChhZ3BfYnJpZGdlLT5kcml2ZXItPm5lZWRzX3NjcmF0Y2hfcGFnZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgY3VycmVudF9zaXplLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwkvKiBQQ0kgcG9zdGluZy4gKi8KIAkJfQorCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CS8qIFBDSSBwb3N0aW5nLiAqLwogCX0KIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKIAlyZXR1cm4gMDsKQEAgLTUyNSw4ICs1MjUsMTAgQEAKIAkJc2l6ZSArPSA0OwogCX0gZWxzZSBpZiAoSVNfRzRYKSB7CiAJCS8qIE9uIDQgc2VyaWVzIGhhcmR3YXJlLCBHVFQgc3RvbGVuIGlzIHNlcGFyYXRlIGZyb20gZ3JhcGhpY3MKLQkJICogc3RvbGVuLCBpZ25vcmUgaXQgaW4gc3RvbGVuIGd0dCBlbnRyaWVzIGNvdW50aW5nICovCi0JCXNpemUgPSAwOworCQkgKiBzdG9sZW4sIGlnbm9yZSBpdCBpbiBzdG9sZW4gZ3R0IGVudHJpZXMgY291bnRpbmcuICBIb3dldmVyLAorCQkgKiA0S0Igb2YgdGhlIHN0b2xlbiBtZW1vcnkgZG9lc24ndCBnZXQgbWFwcGVkIHRvIHRoZSBHVFQuCisJCSAqLworCQlzaXplID0gNDsKIAl9IGVsc2UgewogCQkvKiBPbiBwcmV2aW91cyBoYXJkd2FyZSwgdGhlIEdUVCBzaXplIHdhcyBqdXN0IHdoYXQgd2FzCiAJCSAqIHJlcXVpcmVkIHRvIG1hcCB0aGUgYXBlcnR1cmUuCkBAIC03NzMsOCArNzc1LDggQEAKIAlpZiAoYWdwX2JyaWRnZS0+ZHJpdmVyLT5uZWVkc19zY3JhdGNoX3BhZ2UpIHsKIAkJZm9yIChpID0gaW50ZWxfcHJpdmF0ZS5ndHRfZW50cmllczsgaSA8IGN1cnJlbnRfc2l6ZS0+bnVtX2VudHJpZXM7IGkrKykgewogCQkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaSo0KSk7Ci0JCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsJLyogUENJIFBvc3RpbmcuICovCiAJCX0KKwkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoKGktMSkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CiAKIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKQEAgLTk4OSw4ICs5OTEsOCBAQAogCWlmIChhZ3BfYnJpZGdlLT5kcml2ZXItPm5lZWRzX3NjcmF0Y2hfcGFnZSkgewogCQlmb3IgKGkgPSBpbnRlbF9wcml2YXRlLmd0dF9lbnRyaWVzOyBpIDwgY3VycmVudF9zaXplLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9wcml2YXRlLmd0dCtpKTsKLQkJCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2kpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAkJfQorCQlyZWFkbChpbnRlbF9wcml2YXRlLmd0dCtpLTEpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CiAKIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKQEAgLTIzODgsNSArMjM5MCw1IEBACiBtb2R1bGVfaW5pdChhZ3BfaW50ZWxfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfaW50ZWxfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCmluZGV4IGRjNzBkMzcuLjE2YWNlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE52aWRpYSBBR1BHQVJUIHJvdXRpbmVzLgogICogQmFzZWQgdXBvbiBhIDIuNCBhZ3BnYXJ0IGRpZmYgYnkgdGhlIGZvbGtzIGZyb20gTlZJRElBLCBhbmQgaGFja2VkIHVwCi0gKiB0byB3b3JrIGluIDIuNSBieSBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjAxLDEwICsyMDEsMTUgQEAKIHN0YXRpYyBpbnQgbnZpZGlhX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsIGludCB0eXBlKQogewogCWludCBpLCBqOworCWludCBtYXNrX3R5cGU7CiAKLQlpZiAoKHR5cGUgIT0gMCkgfHwgKG1lbS0+dHlwZSAhPSAwKSkKKwltYXNrX3R5cGUgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShtZW0tPmJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwIHx8IHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+CiAJCShudmlkaWFfcHJpdmF0ZS5udW1fYWN0aXZlX2VudHJpZXMgLSBhZ3BfbWVtb3J5X3Jlc2VydmVkL1BBR0VfU0laRSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIwLDEwICsyMjUsMTMgQEAKIAl9CiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksCisJCQltZW0tPm1lbW9yeVtpXSwgbWFza190eXBlKSwKIAkJCWFncF9icmlkZ2UtPmdhdHRfdGFibGUrbnZpZGlhX3ByaXZhdGUucGdfb2Zmc2V0K2opOwotCQlyZWFkbChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK252aWRpYV9wcml2YXRlLnBnX29mZnNldCtqKTsJLyogUENJIFBvc3RpbmcuICovCiAJfQorCisJLyogUENJIFBvc3RpbmcuICovCisJcmVhZGwoYWdwX2JyaWRnZS0+Z2F0dF90YWJsZStudmlkaWFfcHJpdmF0ZS5wZ19vZmZzZXQraiAtIDEpOworCiAJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMyw5ICsyNDEsMTUgQEAKIHsKIAlpbnQgaTsKIAotCWlmICgodHlwZSAhPSAwKSB8fCAobWVtLT50eXBlICE9IDApKQorCWludCBtYXNrX3R5cGU7CisKKwltYXNrX3R5cGUgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShtZW0tPmJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwIHx8IHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChtZW0tPnBhZ2VfY291bnQgKyBwZ19zdGFydCk7IGkrKykKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgYWdwX2JyaWRnZS0+Z2F0dF90YWJsZStudmlkaWFfcHJpdmF0ZS5wZ19vZmZzZXQraSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOWY0ZDQ5ZS4uZDNiZDI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTU5NSw0ICs1OTUsNCBAQAogbW9kdWxlX2V4aXQoYWdwX3ZpYV9jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwppbmRleCBiODk5ZDkxLi4wNTY3NGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYworKysgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCXN0cnVjdCBzdF9yYW1faW8gKnN0X2xvYywgc3RydWN0IG1haWxib3ggKm1haWxib3gpCiB7CiAJdm9pZCBfX2lvbWVtICpmcm9tID0gYXBic1tJbmRleENhcmRdLlJhbUlPICsgUkFNX1RPX1BDOwotCXVuc2lnbmVkIGNoYXIgKnRvID0gKHVuc2lnbmVkIGNoYXIgKikmbWFpbGJveDsKKwl1bnNpZ25lZCBjaGFyICp0byA9ICh1bnNpZ25lZCBjaGFyICopbWFpbGJveDsKICNpZmRlZiBERUJVRwogCWludCBjOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYnNyLmMgYi9kcml2ZXJzL2NoYXIvYnNyLmMKaW5kZXggYjY1MGI0ZS4uNDU2ZjU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Jzci5jCisrKyBiL2RyaXZlcnMvY2hhci9ic3IuYwpAQCAtMjI5LDkgKzIyOSw4IEBACiAJCWlmIChyZXN1bHQpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJY3VyLT5ic3JfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGJzcl9jbGFzcywgTlVMTCwKLQkJCQkJCQljdXItPmJzcl9kZXYsCi0JCQkJCQkJY3VyLCBjdXItPmJzcl9uYW1lKTsKKwkJY3VyLT5ic3JfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShic3JfY2xhc3MsIE5VTEwsIGN1ci0+YnNyX2RldiwKKwkJCQkJCWN1ciwgY3VyLT5ic3JfbmFtZSk7CiAJCWlmICghY3VyLT5ic3JfZGV2aWNlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImRldmljZV9jcmVhdGUgZmFpbGVkIGZvciAlc1xuIiwKIAkJCSAgICAgICBjdXItPmJzcl9uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEyODYuYyBiL2RyaXZlcnMvY2hhci9kczEyODYuYwppbmRleCBmYjU4NDkzOC4uMGE4MjZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCisrKyBiL2RyaXZlcnMvY2hhci9kczEyODYuYwpAQCAtMjEwLDggKzIxMCw4IEBACiAJCWlmIChzZWMgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCW1pbiA9IEJJTjJCQ0QobWluKTsKLQkJbWluID0gQklOMkJDRChocnMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCW1pbiA9IGJpbjJiY2QoaHJzKTsKIAogCQlzcGluX2xvY2soJmRzMTI4Nl9sb2NrKTsKIAkJcnRjX3dyaXRlKGhycywgUlRDX0hPVVJTX0FMQVJNKTsKQEAgLTM1Myw3ICszNTMsNyBAQAogCiAJZHMxMjg2X2dldF90aW1lKCZ0bSk7CiAJaHVuZHJlZHRoID0gcnRjX3JlYWQoUlRDX0hVTkRSRURUSF9TRUNPTkQpOwotCUJDRF9UT19CSU4oaHVuZHJlZHRoKTsKKwlodW5kcmVkdGggPSBiY2QyYmluKGh1bmRyZWR0aCk7CiAKIAlwICs9IHNwcmludGYocCwKIAkgICAgICAgICAgICAgInJ0Y190aW1lXHQ6ICUwMmQ6JTAyZDolMDJkLiUwMmRcbiIKQEAgLTQ0Myw3ICs0NDMsNiBAQAogewogCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB1aXBfd2F0Y2hkb2cgPSBqaWZmaWVzOwogCiAJLyoKIAkgKiByZWFkIFJUQyBvbmNlIGFueSB1cGRhdGUgaW4gcHJvZ3Jlc3MgaXMgZG9uZS4gVGhlIHVwZGF0ZQpAQCAtNDU2LDggKzQ1NSw3IEBACiAJICovCiAKIAlpZiAoZHMxMjg2X2lzX3VwZGF0aW5nKCkgIT0gMCkKLQkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHVpcF93YXRjaGRvZyArIDIqSFovMTAwKSkKLQkJCWJhcnJpZXIoKTsKKwkJbXNsZWVwKDIwKTsKIAogCS8qCiAJICogT25seSB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBmcm9tIHRoZSBSVEMgYXJlIHNldC4gV2UgbGVhdmUKQEAgLTQ3OSwxMiArNDc3LDEyIEBACiAJcnRjX3dyaXRlKHNhdmVfY29udHJvbCwgUlRDX0NNRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxMjg2X2xvY2ssIGZsYWdzKTsKIAotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpAQCAtNTMzLDEyICs1MzEsMTIgQEAKIAlpZiAoeXJzID49IDEwMCkKIAkJeXJzIC09IDEwMDsKIAotCUJJTl9UT19CQ0Qoc2VjKTsKLQlCSU5fVE9fQkNEKG1pbik7Ci0JQklOX1RPX0JDRChocnMpOwotCUJJTl9UT19CQ0QoZGF5KTsKLQlCSU5fVE9fQkNEKG1vbik7Ci0JQklOX1RPX0JDRCh5cnMpOworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzMTI4Nl9sb2NrLCBmbGFncyk7CiAJc2F2ZV9jb250cm9sID0gcnRjX3JlYWQoUlRDX0NNRCk7CkBAIC01NzQsOCArNTcyLDggQEAKIAljbWQgPSBydGNfcmVhZChSVENfQ01EKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkczEyODZfbG9jaywgZmxhZ3MpOwogCi0JQkNEX1RPX0JJTihhbG1fdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihhbG1fdG0tPnRtX2hvdXIpOworCWFsbV90bS0+dG1fbWluID0gYmNkMmJpbihhbG1fdG0tPnRtX21pbik7CisJYWxtX3RtLT50bV9ob3VyID0gYmNkMmJpbihhbG1fdG0tPnRtX2hvdXIpOwogCWFsbV90bS0+dG1fc2VjID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RzMTMwMi5jIGIvZHJpdmVycy9jaGFyL2RzMTMwMi5jCmluZGV4IGM1ZTY3YTYuLjE3MDY5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kczEzMDIuYworKysgYi9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKQEAgLTEzMSwxMiArMTMxLDEyIEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTIxMSwxMiArMjExLDEyIEBACiAJCQllbHNlCiAJCQkJeXJzIC09IDE5MDA7CS8qIFJUQyAoNzAsIDcxLCAuLi4gOTkpICovCiAKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCQkJbG9ja19rZXJuZWwoKTsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kc3A1NmsuYyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwppbmRleCBjYTdjNzJhLi44NTgzMmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzcDU2ay5jCkBAIC01MDgsOCArNTA4LDggQEAKIAkJZXJyID0gUFRSX0VSUihkc3A1NmtfY2xhc3MpOwogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShkc3A1NmtfY2xhc3MsIE5VTEwsIE1LREVWKERTUDU2S19NQUpPUiwgMCksCi0JCQkgICAgICBOVUxMLCAiZHNwNTZrIik7CisJZGV2aWNlX2NyZWF0ZShkc3A1NmtfY2xhc3MsIE5VTEwsIE1LREVWKERTUDU2S19NQUpPUiwgMCksIE5VTEwsCisJCSAgICAgICJkc3A1NmsiKTsKIAogCXByaW50ayhiYW5uZXIpOwogCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggNDk5OGIyNy4uY2YyNDYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0yNDc3LDcgKzI0NzcsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG1zZWMgPT0gLTEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbXNlYyA9IDB4RkZGRjsKKwllbHNlIGlmIChtc2VjID4gMHhGRkZFKQorCQltc2VjID0gMHhGRkZFOworCWVsc2UgaWYgKG1zZWMgPCAxKQorCQltc2VjID0gMTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcGNhX2xvY2ssIGZsYWdzKTsKIAlnbG9iYWx3aW5vbihjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IGVjN2FkZWQuLmJmNzA0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0zNjcsMTMgKzM2NywxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKC0taHAtPmNvdW50ID09IDApIHsKLQkJaWYgKGhwLT5vcHMtPm5vdGlmaWVyX2RlbCkKLQkJCWhwLT5vcHMtPm5vdGlmaWVyX2RlbChocCwgaHAtPmRhdGEpOwotCiAJCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIHR0eSBwb2ludGVyIG5vdy4gKi8KIAkJaHAtPnR0eSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7CiAKKwkJaWYgKGhwLT5vcHMtPm5vdGlmaWVyX2RlbCkKKwkJCWhwLT5vcHMtPm5vdGlmaWVyX2RlbChocCwgaHAtPmRhdGEpOworCiAJCS8qCiAJCSAqIENoYWluIGNhbGxzIGNoYXJzX2luX2J1ZmZlcigpIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmCiAJCSAqIHRoZXJlIGlzIG5vIGJ1ZmZlcmVkIGRhdGEgb3RoZXJ3aXNlIHNsZWVwcyBvbiBhIHdhaXQgcXVldWUKQEAgLTQxNiwxMSArNDE2LDExIEBACiAJaHAtPm5fb3V0YnVmID0gMDsKIAlocC0+dHR5ID0gTlVMTDsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7CisKIAlpZiAoaHAtPm9wcy0+bm90aWZpZXJfZGVsKQogCQkJaHAtPm9wcy0+bm90aWZpZXJfZGVsKGhwLCBocC0+ZGF0YSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgZmxhZ3MpOwotCiAJd2hpbGUodGVtcF9vcGVuX2NvdW50KSB7CiAJCS0tdGVtcF9vcGVuX2NvdW50OwogCQlrcmVmX3B1dCgmaHAtPmtyZWYsIGRlc3Ryb3lfaHZjX3N0cnVjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggNTE3MzhiZC4uZDRlN2RjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE4LDE4ICsxMTgsMjEgQEAKIAogCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAogCQkJCSBwZGV2LT5uYW1lKTsKLQlpZiAobWVtID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVnaW9uOworCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gKHUzMiBfX2ZvcmNlIF9faW9tZW0gKilpb19wMnYocmVzLT5zdGFydCk7CisJcm5nX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghcm5nX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CiAKIAlyZXQgPSBod3JuZ19yZWdpc3Rlcigmb21hcF9ybmdfb3BzKTsKLQlpZiAocmV0KSB7Ci0JCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKLQkJcm5nX2Jhc2UgPSBOVUxMOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3RlcjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJPTUFQIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHZlci4gJTAyeFxuIiwKIAkJb21hcF9ybmdfcmVhZF9yZWcoUk5HX1JFVl9SRUcpKTsKQEAgLTEzOCw2ICsxNDEsMTggQEAKIAlybmdfZGV2ID0gcGRldjsKIAogCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJaW91bm1hcChybmdfYmFzZSk7CisJcm5nX2Jhc2UgPSBOVUxMOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9yZXNvdXJjZShtZW0pOworZXJyX3JlZ2lvbjoKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJY2xrX2Rpc2FibGUocm5nX2ljayk7CisJCWNsa19wdXQocm5nX2ljayk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19leGl0IG9tYXBfcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTQ4LDYgKzE2Myw4IEBACiAKIAlvbWFwX3JuZ193cml0ZV9yZWcoUk5HX01BU0tfUkVHLCAweDApOwogCisJaW91bm1hcChybmdfYmFzZSk7CisKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJY2xrX2Rpc2FibGUocm5nX2ljayk7CiAJCWNsa19wdXQocm5nX2ljayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCmluZGV4IDY3NzQ1NzIuLjcwZTBlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCkBAIC03NDUsMTIgKzc0NSwxMiBAQAogCiAJCXBCID0gaTJCb2FyZFB0clRhYmxlW2ldOwogCQlpZiAocEIgIT0gTlVMTCkgewotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlwMl9jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYoSVAyX0lQTF9NQUpPUiwgNCAqIGkpLAotCQkJCQkgICAgICBOVUxMLCAiaXBsJWQiLCBpKTsKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcDJfY2xhc3MsIE5VTEwsCi0JCQkJCSAgICAgIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpICsgMSksCi0JCQkJCSAgICAgIE5VTEwsICJzdGF0JWQiLCBpKTsKKwkJCWRldmljZV9jcmVhdGUoaXAyX2NsYXNzLCBOVUxMLAorCQkJCSAgICAgIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpKSwKKwkJCQkgICAgICBOVUxMLCAiaXBsJWQiLCBpKTsKKwkJCWRldmljZV9jcmVhdGUoaXAyX2NsYXNzLCBOVUxMLAorCQkJCSAgICAgIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpICsgMSksCisJCQkJICAgICAgTlVMTCwgInN0YXQlZCIsIGkpOwogCiAJCQlmb3IgKGJveCA9IDA7IGJveCA8IEFCU19NQVhfQk9YRVM7IGJveCsrKQogCQkJCWZvciAoaiA9IDA7IGogPCBBQlNfQklHR0VTVF9CT1g7IGorKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKaW5kZXggZWM5ZDA0NC4uMmFiZDg4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAJCWlmICh5cnMgPj0gMTAwKQogCQkJeXJzIC09IDEwMDsKIAotCQlzZWMgPSBCSU4yQkNEKHNlYyk7Ci0JCW1pbiA9IEJJTjJCQ0QobWluKTsKLQkJaHJzID0gQklOMkJDRChocnMpOwotCQlkYXkgPSBCSU4yQkNEKGRheSk7Ci0JCW1vbiA9IEJJTjJCQ0QobW9uKTsKLQkJeXJzID0gQklOMkJDRCh5cnMpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaHJzID0gYmluMmJjZChocnMpOworCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJeXJzID0gYmluMmJjZCh5cnMpOwogCiAJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAkJcnRjLT5jb250cm9sIHw9IE00OFQzNV9SVENfU0VUOwpAQCAtMzExLDEyICszMTEsMTIgQEAKIAlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fbW9uID0gQkNEMkJJTihydGNfdG0tPnRtX21vbik7Ci0JcnRjX3RtLT50bV95ZWFyID0gQkNEMkJJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJLyoKIAkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA2NGUxYzE2Li44MzVhMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtODcxLDcgKzg3MSw3IEBACiAJZW50cnktPmRldiA9IGRldjsKIAogCW11dGV4X2xvY2soJnJlZ19saXN0X211dGV4KTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXBtaV9jbGFzcywgZGV2aWNlLCBkZXYsIE5VTEwsICJpcG1pJWQiLCBpZl9udW0pOworCWRldmljZV9jcmVhdGUoaXBtaV9jbGFzcywgZGV2aWNlLCBkZXYsIE5VTEwsICJpcG1pJWQiLCBpZl9udW0pOwogCWxpc3RfYWRkKCZlbnRyeS0+bGluaywgJnJlZ19saXN0KTsKIAltdXRleF91bmxvY2soJnJlZ19saXN0X211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggOGU4YWZiNi4uMzEyM2JmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTI2OTUsNyArMjY5NSw3IEBACiAJZm9yIChpID0gMDsgOyBpKyspIHsKIAkJaWYgKCFpcG1pX2RlZmF1bHRzW2ldLnBvcnQpCiAJCQlicmVhazsKLSNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisjaWZkZWYgQ09ORklHX1BQQwogCQlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChpcG1pX2RlZmF1bHRzW2ldLnBvcnQpKQogCQkJY29udGludWU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwppbmRleCA1MDVkN2ExLi40NGU1ZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCkBAIC00NjAwLDkgKzQ2MDAsOCBAQAogCiAJaXN0YWxsaW9uX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic3RhbGlvbWVtIik7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlzdGFsbGlvbl9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAotCQkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOworCQlkZXZpY2VfY3JlYXRlKGlzdGFsbGlvbl9jbGFzcywgTlVMTCwgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKKwkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOwogCiAJcmV0dXJuIDA7CiBlcnJfZGVpbml0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCA3YjNhMjEyLi5kZTI2YTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtMTI0OSw3ICsxMjQ5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChrZXljb2RlID4gTlJfS0VZUykKKwlpZiAoa2V5Y29kZSA+PSBOUl9LRVlTKQogCQlpZiAoa2V5Y29kZSA+PSBLRVlfQlJMX0RPVDEgJiYga2V5Y29kZSA8PSBLRVlfQlJMX0RPVDgpCiAJCQlrZXlzeW0gPSBLKEtUX0JSTCwga2V5Y29kZSAtIEtFWV9CUkxfRE9UMSArIDEpOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbHAuYyBiL2RyaXZlcnMvY2hhci9scC5jCmluZGV4IDNmMjcxOWIuLmU0NDRjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9scC5jCisrKyBiL2RyaXZlcnMvY2hhci9scC5jCkBAIC04MTMsOCArODEzLDggQEAKIAlpZiAocmVzZXQpCiAJCWxwX3Jlc2V0KG5yKTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShscF9jbGFzcywgcG9ydC0+ZGV2LCBNS0RFVihMUF9NQUpPUiwgbnIpLCBOVUxMLAotCQkJICAgICAgImxwJWQiLCBucik7CisJZGV2aWNlX2NyZWF0ZShscF9jbGFzcywgcG9ydC0+ZGV2LCBNS0RFVihMUF9NQUpPUiwgbnIpLCBOVUxMLAorCQkgICAgICAibHAlZCIsIG5yKTsKIAogCXByaW50ayhLRVJOX0lORk8gImxwJWQ6IHVzaW5nICVzICglcykuXG4iLCBuciwgcG9ydC0+bmFtZSwgCiAJICAgICAgIChwb3J0LT5pcnEgPT0gUEFSUE9SVF9JUlFfTk9ORSk/InBvbGxpbmciOiJpbnRlcnJ1cHQtZHJpdmVuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjcyYjA4ZS4uNjQzMWY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtOTkyLDkgKzk5Miw5IEBACiAKIAltZW1fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJtZW0iKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZsaXN0KTsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEobWVtX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKE1FTV9NQUpPUiwgZGV2bGlzdFtpXS5taW5vciksCi0JCQkJICAgICAgTlVMTCwgZGV2bGlzdFtpXS5uYW1lKTsKKwkJZGV2aWNlX2NyZWF0ZShtZW1fY2xhc3MsIE5VTEwsCisJCQkgICAgICBNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgZGV2bGlzdFtpXS5uYW1lKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21pc2MuYyBiL2RyaXZlcnMvY2hhci9taXNjLmMKaW5kZXggOTk5YWE3Ny4uYTVlMGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21pc2MuYworKysgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCkBAIC0yMTcsOCArMjE3LDggQEAKIAkJbWlzY19taW5vcnNbbWlzYy0+bWlub3IgPj4gM10gfD0gMSA8PCAobWlzYy0+bWlub3IgJiA3KTsKIAlkZXYgPSBNS0RFVihNSVNDX01BSk9SLCBtaXNjLT5taW5vcik7CiAKLQltaXNjLT50aGlzX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShtaXNjX2NsYXNzLCBtaXNjLT5wYXJlbnQsCi0JCQkJCQkgIGRldiwgTlVMTCwgIiVzIiwgbWlzYy0+bmFtZSk7CisJbWlzYy0+dGhpc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKG1pc2NfY2xhc3MsIG1pc2MtPnBhcmVudCwgZGV2LCBOVUxMLAorCQkJCQkgICIlcyIsIG1pc2MtPm5hbWUpOwogCWlmIChJU19FUlIobWlzYy0+dGhpc19kZXZpY2UpKSB7CiAJCWVyciA9IFBUUl9FUlIobWlzYy0+dGhpc19kZXZpY2UpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tb3hhLmMgYi9kcml2ZXJzL2NoYXIvbW94YS5jCmluZGV4IDVkZjQwMDMuLjEyZDMyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tb3hhLmMKKysrIGIvZHJpdmVycy9jaGFyL21veGEuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCXNpemVfdCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlQWRkciA9IGJyZC0+YmFzZW1lbTsKLQljb25zdCB1MTYgKnVwdHIgPSBwdHI7CisJY29uc3QgX19sZTE2ICp1cHRyID0gcHRyOwogCXNpemVfdCB3bGVuLCBsZW4yLCBqOwogCXVuc2lnbmVkIGxvbmcga2V5LCBsb2FkYnVmLCBsb2FkbGVuLCBjaGVja3N1bSwgY2hlY2tzdW1fb2s7CiAJdW5zaWduZWQgaW50IGksIHJldHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCmluZGV4IGI5MzBkZTUuLjNmN2RhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKQEAgLTQxLDcgKzQxLDggQEAKICNkZWZpbmUgU0lPX0JBU0UyICAgICAgIDB4NEUJLyogYWx0IGNvbW1hbmQtcmVnIHRvIGNoZWNrICovCiAKICNkZWZpbmUgU0lPX1NJRAkJMHgyMAkvKiBTdXBlckkvTyBJRCBSZWdpc3RlciAqLwotI2RlZmluZSBTSU9fU0lEX1ZBTFVFCTB4ZTkJLyogRXhwZWN0ZWQgdmFsdWUgaW4gU3VwZXJJL08gSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0lPX1NJRF9QQzg3MzY1CTB4ZTUJLyogRXhwZWN0ZWQgdmFsdWUgaW4gSUQgUmVnaXN0ZXIgZm9yIFBDODczNjUgKi8KKyNkZWZpbmUgU0lPX1NJRF9QQzg3MzY2CTB4ZTkJLyogRXhwZWN0ZWQgdmFsdWUgaW4gSUQgUmVnaXN0ZXIgZm9yIFBDODczNjYgKi8KIAogI2RlZmluZSBTSU9fQ0YxCQkweDIxCS8qIGNoaXAgY29uZmlnLCBiaXQwIGlzIGNoaXAgZW5hYmxlICovCiAKQEAgLTkxLDEzICs5MiwxNyBAQAogCiBzdGF0aWMgaW50IHBjODczNnhfc3VwZXJpb19wcmVzZW50KHZvaWQpCiB7CisJaW50IGlkOworCiAJLyogdHJ5IHRoZSAyIHBvc3NpYmxlIHZhbHVlcywgcmVhZCBhIGhhcmR3YXJlIHJlZyB0byB2ZXJpZnkgKi8KIAlzdXBlcmlvX2NtZCA9IFNJT19CQVNFMTsKLQlpZiAoc3VwZXJpb19pbmIoU0lPX1NJRCkgPT0gU0lPX1NJRF9WQUxVRSkKKwlpZCA9IHN1cGVyaW9faW5iKFNJT19TSUQpOworCWlmIChpZCA9PSBTSU9fU0lEX1BDODczNjUgfHwgaWQgPT0gU0lPX1NJRF9QQzg3MzY2KQogCQlyZXR1cm4gc3VwZXJpb19jbWQ7CiAKIAlzdXBlcmlvX2NtZCA9IFNJT19CQVNFMjsKLQlpZiAoc3VwZXJpb19pbmIoU0lPX1NJRCkgPT0gU0lPX1NJRF9WQUxVRSkKKwlpZCA9IHN1cGVyaW9faW5iKFNJT19TSUQpOworCWlmIChpZCA9PSBTSU9fU0lEX1BDODczNjUgfHwgaWQgPT0gU0lPX1NJRF9QQzg3MzY2KQogCQlyZXR1cm4gc3VwZXJpb19jbWQ7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDFjNWJmOTk4OS4uZGJiOTEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0xODcxLDcgKzE4NzEsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwgImNtbSVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwgImNtbSVkIiwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCmluZGV4IDJkN2M5MDYuLjRmMDcyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwpAQCAtNjM3LDggKzYzNyw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNteF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLAotCQkJICAgICAgImNteCVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZShjbXhfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwgImNteCVkIiwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wcGRldi5jIGIvZHJpdmVycy9jaGFyL3BwZGV2LmMKaW5kZXggYmVlMzlmZC4uYzg0YzM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BwZGV2LmMKKysrIGIvZHJpdmVycy9jaGFyL3BwZGV2LmMKQEAgLTc2MCw5ICs3NjAsOCBAQAogCiBzdGF0aWMgdm9pZCBwcF9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCiB7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBwZGV2X2NsYXNzLCBwb3J0LT5kZXYsCi0JCQkgICAgICBNS0RFVihQUF9NQUpPUiwgcG9ydC0+bnVtYmVyKSwKLQkJCSAgICAgIE5VTEwsICJwYXJwb3J0JWQiLCBwb3J0LT5udW1iZXIpOworCWRldmljZV9jcmVhdGUocHBkZXZfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoUFBfTUFKT1IsIHBvcnQtPm51bWJlciksCisJCSAgICAgIE5VTEwsICJwYXJwb3J0JWQiLCBwb3J0LT5udW1iZXIpOwogfQogCiBzdGF0aWMgdm9pZCBwcF9kZXRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNmFmNDM1Yi4uYzg3NTJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTIwNSw3ICsxMjA1LDcgQEAKIAlyZXR1cm4gcHJvY19kb3N0cmluZygmZmFrZV90YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiB9CiAKLXN0YXRpYyBpbnQgdXVpZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgdXVpZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAogCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYXcuYyBiL2RyaXZlcnMvY2hhci9yYXcuYwppbmRleCA0N2I4Y2YyLi5lMTM5MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmF3LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jhdy5jCkBAIC0xMzEsOCArMTMxLDggQEAKIHN0YXRpYyB2b2lkIGJpbmRfZGV2aWNlKHN0cnVjdCByYXdfY29uZmlnX3JlcXVlc3QgKnJxKQogewogCWRldmljZV9kZXN0cm95KHJhd19jbGFzcywgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSwKLQkJCSAgICAgIE5VTEwsICJyYXclZCIsIHJxLT5yYXdfbWlub3IpOworCWRldmljZV9jcmVhdGUocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIHJxLT5yYXdfbWlub3IpLCBOVUxMLAorCQkgICAgICAicmF3JWQiLCBycS0+cmF3X21pbm9yKTsKIH0KIAogLyoKQEAgLTI4Myw4ICsyODMsNyBAQAogCQlyZXQgPSBQVFJfRVJSKHJhd19jbGFzcyk7CiAJCWdvdG8gZXJyb3JfcmVnaW9uOwogCX0KLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIDApLCBOVUxMLAotCQkJICAgICAgInJhd2N0bCIpOworCWRldmljZV9jcmVhdGUocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIDApLCBOVUxMLCAicmF3Y3RsIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGI0NzcxMGMuLjMyZGM4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTk2LDcgKzk2LDcgQEAKIHN0YXRpYyBpbnQgcnRjX2lycTsKICNlbmRpZgogCi0jaWZkZWYJQ09ORklHX0hQRVRfUlRDX0lSUQorI2lmZGVmCUNPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAjdW5kZWYJUlRDX0lSUQogI2VuZGlmCiAKQEAgLTUxOCwxNyArNTE4LDE3IEBACiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fAogCQkJCQkJCVJUQ19BTFdBWVNfQkNEKSB7CiAJCQlpZiAoc2VjIDwgNjApCi0JCQkJQklOX1RPX0JDRChzZWMpOworCQkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKIAkJCWVsc2UKIAkJCQlzZWMgPSAweGZmOwogCiAJCQlpZiAobWluIDwgNjApCi0JCQkJQklOX1RPX0JDRChtaW4pOworCQkJCW1pbiA9IGJpbjJiY2QobWluKTsKIAkJCWVsc2UKIAkJCQltaW4gPSAweGZmOwogCiAJCQlpZiAoaHJzIDwgMjQpCi0JCQkJQklOX1RPX0JDRChocnMpOworCQkJCWhycyA9IGJpbjJiY2QoaHJzKTsKIAkJCWVsc2UKIAkJCQlocnMgPSAweGZmOwogCQl9CkBAIC02MTQsMTIgKzYxNCwxMiBAQAogCiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKQogCQkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAkJfQogCiAJCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHllYXIpOyAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7ICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLwogCiAJaWYgKHllYXIgPCAyMCkgewogCQllcG9jaCA9IDIwMDA7CkBAIC0xMzUyLDEzICsxMzUyLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fd2RheSk7CisJCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwkJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCQlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCQlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJCXJ0Y190bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX3RtLT50bV93ZGF5KTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCkBAIC0xMzkyLDkgKzEzOTIsOSBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9zZWMpOwotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX2hvdXIpOworCQlhbG1fdG0tPnRtX3NlYyA9IGJjZDJiaW4oYWxtX3RtLT50bV9zZWMpOworCQlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCQlhbG1fdG0tPnRtX2hvdXIgPSBiY2QyYmluKGFsbV90bS0+dG1faG91cik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCAzY2U2MGRmLi4zMmI3NGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTQ0NCw4ICs0NDQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoc25zY19jbGFzcywgTlVMTCwgZGV2LCBOVUxMLAotCQkJCQkgICAgICAiJXMiLCBkZXZuYW1lKTsKKwkJCWRldmljZV9jcmVhdGUoc25zY19jbGFzcywgTlVMTCwgZGV2LCBOVUxMLAorCQkJCSAgICAgICIlcyIsIGRldm5hbWUpOwogCiAJCQlpYTY0X3NuX2lydHJfaW50cl9lbmFibGUoc2NkLT5zY2RfbmFzaWQsCiAJCQkJCQkgMCAvKmlnbm9yZWQgKi8gLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCA4YjhmMDdhLi45NjNiMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtNDc0Myw4ICs0NzQzLDggQEAKIAlpZiAoSVNfRVJSKHN0YWxsaW9uX2NsYXNzKSkKIAkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGNyZWF0ZSBjbGFzc1xuIik7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHN0YWxsaW9uX2NsYXNzLCBOVUxMLCBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAotCQkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOworCQlkZXZpY2VfY3JlYXRlKHN0YWxsaW9uX2NsYXNzLCBOVUxMLCBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAorCQkJICAgICAgTlVMTCwgInN0YWxpb21lbSVkIiwgaSk7CiAKIAlyZXR1cm4gMDsKIGVycl91bnJ0dHk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3guYyBiL2RyaXZlcnMvY2hhci9zeC5jCmluZGV4IDViOGQ3YTEuLmJhNGU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeC5jCkBAIC0yNTA0LDcgKzI1MDQsNyBAQAogCQlkZWxfdGltZXIoJmJvYXJkLT50aW1lcik7CiAJCWlmIChwZGV2KSB7CiAjaWZkZWYgQ09ORklHX1BDSQotCQkJcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UyKTsKKwkJCWlvdW5tYXAoYm9hcmQtPmJhc2UyKTsKIAkJCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCBJU19DRl9CT0FSRChib2FyZCkgPyAzIDogMik7CiAjZW5kaWYKIAkJfSBlbHNlIHsKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJfQogCWJvYXJkLT5od19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHJlZyk7CiAJYm9hcmQtPmJhc2UyID0KLQlib2FyZC0+YmFzZSA9IHBjaV9pb21hcChwZGV2LCByZWcsIFdJTkRPV19MRU4oYm9hcmQpKTsKKwlib2FyZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShib2FyZC0+aHdfYmFzZSwgV0lORE9XX0xFTihib2FyZCkpOwogCWlmICghYm9hcmQtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9yZWc7CkBAIC0yNzAzLDcgKzI3MDMsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnJfdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UyKTsKKwlpb3VubWFwKGJvYXJkLT5iYXNlMik7CiBlcnJfcmVnOgogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCByZWcpOwogZXJyX2ZsYWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDhmZGZlOWMuLmNlMGQ5ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rYmRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTY3LDcgKzE2OCw3IEBACiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9zaG93X3RpbWVyc19vcCA9IHsKIAkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV9zaG93X3RpbWVycywKIAkuaGVscF9tc2cJPSAic2hvdy1hbGwtdGltZXJzKFEpIiwKLQkuYWN0aW9uX21zZwk9ICJTaG93IFBlbmRpbmcgVGltZXJzIiwKKwkuYWN0aW9uX21zZwk9ICJTaG93IGNsb2NrZXZlbnQgZGV2aWNlcyAmIHBlbmRpbmcgaHJ0aW1lcnMgKG5vIG90aGVycykiLAogfTsKIAogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX21vdW50cm8oaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTMyNiw2ICszMjcsNyBAQAogCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX21vb20sCiAJLmhlbHBfbXNnCT0gIkZ1bGwiLAogCS5hY3Rpb25fbXNnCT0gIk1hbnVhbCBPT00gZXhlY3V0aW9uIiwKKwkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfU0lHTkFMLAogfTsKIAogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX2tpbGwoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTUzMywzICs1MzUsMzIgQEAKIAlyZXR1cm4gX19zeXNycV9zd2FwX2tleV9vcHMoa2V5LCBOVUxMLCBvcF9wKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zeXNycV9rZXkpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qCisgKiB3cml0aW5nICdDJyB0byAvcHJvYy9zeXNycS10cmlnZ2VyIGlzIGxpa2Ugc3lzcnEtQworICovCitzdGF0aWMgc3NpemVfdCB3cml0ZV9zeXNycV90cmlnZ2VyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWlmIChjb3VudCkgeworCQljaGFyIGM7CisKKwkJaWYgKGdldF91c2VyKGMsIGJ1ZikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJX19oYW5kbGVfc3lzcnEoYywgTlVMTCwgMCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMgPSB7CisJLndyaXRlCQk9IHdyaXRlX3N5c3JxX3RyaWdnZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzeXNycV9pbml0KHZvaWQpCit7CisJcHJvY19jcmVhdGUoInN5c3JxLXRyaWdnZXIiLCBTX0lXVVNSLCBOVUxMLCAmcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoc3lzcnFfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDFmZWU3MDMuLjljNDdkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNTI1LDE5ICs1MjUsMTkgQEAKIAl0aW1lb3V0ID0KIAkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKTsKIAlpZiAodGltZW91dCkKLQkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCXRpbWVvdXQgPQogCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYKSkpOwogCWlmICh0aW1lb3V0KQotCQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7CiAJdGltZW91dCA9CiAJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSk7CiAJaWYgKHRpbWVvdXQpCi0JCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAl0aW1lb3V0ID0KIAkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCkpKTsKIAlpZiAodGltZW91dCkKLQkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCiBkdXJhdGlvbjoKIAltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKQEAgLTU1NCwxNSArNTU0LDIyIEBACiAJCXJldHVybjsKIAogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0KLQkgICAgbXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQorCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CiAJCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwogCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CisJLyogVGhlIEJyb2FkY29tIEJDTTAxMDIgY2hpcHNldCBpbiBhIERlbGwgTGF0aXR1ZGUgRDgyMCBnZXRzIHRoZSBhYm92ZQorCSAqIHZhbHVlIHdyb25nIGFuZCBhcHBhcmVudGx5IHJlcG9ydHMgbXNlY3MgcmF0aGVyIHRoYW4gdXNlY3MuIFNvIHdlCisJICogZml4IHVwIHRoZSByZXN1bHRpbmcgdG9vLXNtYWxsIFRQTV9TSE9SVCB2YWx1ZSB0byBtYWtlIHRoaW5ncyB3b3JrLgorCSAqLworCWlmIChjaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA8IChIWi8xMDApKQorCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9IEhaOworCiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dID0KLQkgICAgbXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQorCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CiAJCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwogCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKSk7CiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSA9Ci0JICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQogCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKIAkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFgpKSkpOwogfQpAQCAtMTE1MCw3ICsxMTU3LDcgQEAKICAqIE9uY2UgYWxsIHJlZmVyZW5jZXMgdG8gcGxhdGZvcm0gZGV2aWNlIGFyZSBkb3duIHRvIDAsCiAgKiByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcy4KICAqLwotc3RhdGljIHZvaWQgdHBtX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3ZvaWQgdHBtX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtMTE4MCwxMSArMTE4Nyw4IEBACiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJZGV2bmFtZSA9IGttYWxsb2MoREVWTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAotCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNoaXApOwotCQlrZnJlZShkZXZuYW1lKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOwogCiAJbXV0ZXhfaW5pdCgmY2hpcC0+YnVmZmVyX211dGV4KTsKIAltdXRleF9pbml0KCZjaGlwLT50cG1fbXV0ZXgpOwpAQCAtMTIwMSw4ICsxMjA1LDcgQEAKIAogCWlmIChjaGlwLT5kZXZfbnVtID49IFRQTV9OVU1fREVWSUNFUykgewogCQlkZXZfZXJyKGRldiwgIk5vIGF2YWlsYWJsZSB0cG0gZGV2aWNlIG51bWJlcnNcbiIpOwotCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfSBlbHNlIGlmIChjaGlwLT5kZXZfbnVtID09IDApCiAJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm1pbm9yID0gVFBNX01JTk9SOwogCWVsc2UKQEAgLTEyNDMsNiArMTI0NiwxMSBAQAogCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CiAKIAlyZXR1cm4gY2hpcDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoY2hpcCk7CisJa2ZyZWUoZGV2bmFtZSk7CisJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcmVnaXN0ZXJfaGFyZHdhcmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggNzA1M2Q2My4uNTlmNDcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMjg1MCw3ICsyODUwLDcgQEAKIAllbHNlCiAJCXR0eV9saW5lX25hbWUoZHJpdmVyLCBpbmRleCwgbmFtZSk7CiAKLQlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHR0eV9jbGFzcywgZGV2aWNlLCBkZXYsIE5VTEwsIG5hbWUpOworCXJldHVybiBkZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgZGV2aWNlLCBkZXYsIE5VTEwsIG5hbWUpOwogfQogRVhQT1JUX1NZTUJPTCh0dHlfcmVnaXN0ZXJfZGV2aWNlKTsKIApAQCAtMzAzMiwxMSArMzAzMiwxMiBAQAogCiB2b2lkIHByb2NfY2xlYXJfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3Bpbl9sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIAl0dHkgPSBwLT5zaWduYWwtPnR0eTsKIAlwLT5zaWduYWwtPnR0eSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwppbmRleCBjMmFlNTJkLi40ZjNiM2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCkBAIC00ODEsMTAgKzQ4MSwxMCBAQAogCiB2b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwKLQkJCSAgICAgIE5VTEwsICJ2Y3MldSIsIHR0eS0+aW5kZXggKyAxKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksCi0JCQkgICAgICBOVUxMLCAidmNzYSV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpLCBOVUxMLAorCQkgICAgICAidmNzJXUiLCB0dHktPmluZGV4ICsgMSk7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMTI5KSwgTlVMTCwKKwkJICAgICAgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKIH0KIAogdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC00OTksNyArNDk5LDcgQEAKIAkJcGFuaWMoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIHZjcyBkZXZpY2UiLCBWQ1NfTUFKT1IpOwogCXZjX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidmMiKTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAwKSwgTlVMTCwgInZjcyIpOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAxMjgpLCBOVUxMLCAidmNzYSIpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMCksIE5VTEwsICJ2Y3MiKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIDEyOCksIE5VTEwsICJ2Y3NhIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jIGIvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYwppbmRleCA3YTcwYTQwLi5mZmM5MjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKQEAgLTg4NiwxMCArODg2LDEwIEBACiAJc3RhdGVbaV0uY3VyX3BhcnQgPSAwOwogCWZvciAoaiA9IDA7IGogPCBNQVhfUEFSVElUSU9OUzsgKytqKQogCQlzdGF0ZVtpXS5wYXJ0X3N0YXRfcndpW2pdID0gVklPVF9JRExFOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpKSwKLQkJCSAgICAgIE5VTEwsICJpc2VyaWVzIXZ0JWQiLCBpKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSB8IDB4ODApLAotCQkJICAgICAgTlVMTCwgImlzZXJpZXMhbnZ0JWQiLCBpKTsKKwlkZXZpY2VfY3JlYXRlKHRhcGVfY2xhc3MsIE5VTEwsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkpLCBOVUxMLAorCQkgICAgICAiaXNlcmllcyF2dCVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpIHwgMHg4MCksIE5VTEwsCisJCSAgICAgICJpc2VyaWVzIW52dCVkIiwgaSk7CiAJcHJpbnRrKFZJT1RBUEVfS0VSTl9JTkZPICJ0YXBlIGlzZXJpZXMvdnQlZCBpcyBpU2VyaWVzICIKIAkJCSJyZXNvdXJjZSAlMTAuMTBzIHR5cGUgJTQuNHMsIG1vZGVsICUzLjNzXG4iLAogCQkJaSwgdmlvdGFwZV91bml0aW5mb1tpXS5yc3JjbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggYTBmN2ZmYi4uZDhmODNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTU5LDcgKzU5LDcgQEAKICAqIGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PiwgSnVseSAxOTk4CiAgKgogICogUmVtb3ZlZCBvbGQtc3R5bGUgdGltZXJzLCBpbnRyb2R1Y2VkIGNvbnNvbGVfdGltZXIsIG1hZGUgdGltZXIKLSAqIGRlbGV0aW9uIFNNUC1zYWZlLiAgMTdKdW4wMCwgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogZGVsZXRpb24gU01QLXNhZmUuICAxN0p1bjAwLCBBbmRyZXcgTW9ydG9uCiAgKgogICogUmVtb3ZlZCBjb25zb2xlX2xvY2ssIGVuYWJsZWQgaW50ZXJydXB0cyBhY3Jvc3MgYWxsIGNvbnNvbGUgb3BlcmF0aW9ucwogICogMTMgTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCmluZGV4IDI3OGM5ODUuLmVkMTMyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYworKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKQEAgLTY1Nyw4ICs2NTcsNyBAQAogCQlnb3RvIGZhaWxlZDM7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGljYXBfY2xhc3MsIGRldiwgZGV2dCwgTlVMTCwKLQkJCSAgICAgICIlcyVkIiwgRFJJVkVSX05BTUUsIGlkKTsKKwlkZXZpY2VfY3JlYXRlKGljYXBfY2xhc3MsIGRldiwgZGV2dCwgTlVMTCwgIiVzJWQiLCBEUklWRVJfTkFNRSwgaWQpOwogCXJldHVybiAwOwkJLyogc3VjY2VzcyAqLwogCiAgZmFpbGVkMzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKaW5kZXggNzFkMmFjNC4uYzIwMTcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMKQEAgLTIzNyw5ICsyMzcsMTIgQEAKIAogCWlmIChzdHJpY3Rfc3RydG91bChhcmcsIDE2LCAmYmFzZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChiYXNlID4gVUlOVF9NQVgpCisJCXJldHVybiAtRVJBTkdFOworI2VuZGlmCiAJcHJpbnRrKEtFUk5fSU5GTyAiUE1UTVIgSU9Qb3J0IG92ZXJyaWRlOiAweCUwNHggLT4gMHglMDRseFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGludClwbXRtcl9pb3BvcnQsIGJhc2UpOworCSAgICAgICBwbXRtcl9pb3BvcnQsIGJhc2UpOwogCXBtdG1yX2lvcG9ydCA9IGJhc2U7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGNhL2RjYS1zeXNmcy5jIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKaW5kZXggN2FmNGI0MC4uYmI1MzhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMKQEAgLTE1LDkgKzE1LDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpjZDsKIAlzdGF0aWMgaW50IHJlcV9jb3VudDsKIAotCWNkID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGRjYV9jbGFzcywgZGNhLT5jZCwKLQkJCQkgICBNS0RFVigwLCBzbG90ICsgMSksIE5VTEwsCi0JCQkJICAgInJlcXVlc3RlciVkIiwgcmVxX2NvdW50KyspOworCWNkID0gZGV2aWNlX2NyZWF0ZShkY2FfY2xhc3MsIGRjYS0+Y2QsIE1LREVWKDAsIHNsb3QgKyAxKSwgTlVMTCwKKwkJCSAgICJyZXF1ZXN0ZXIlZCIsIHJlcV9jb3VudCsrKTsKIAlpZiAoSVNfRVJSKGNkKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2QpOwogCXJldHVybiAwOwpAQCAtNDgsOCArNDcsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWNkID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGRjYV9jbGFzcywgZGV2LCBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkgICAiZGNhJWQiLCBkY2EtPmlkKTsKKwljZCA9IGRldmljZV9jcmVhdGUoZGNhX2NsYXNzLCBkZXYsIE1LREVWKDAsIDApLCBOVUxMLCAiZGNhJWQiLCBkY2EtPmlkKTsKIAlpZiAoSVNfRVJSKGNkKSkgewogCQlzcGluX2xvY2soJmRjYV9pZHJfbG9jayk7CiAJCWlkcl9yZW1vdmUoJmRjYV9pZHIsIGRjYS0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggY2QzMDM5MC4uOTA0ZTU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC00OCwxMyArNDgsMTMgQEAKIAkgIGNhbiBiZSBpbnRlZ3JhdGVkIGluIGNoaXBzIHN1Y2ggYXMgdGhlIEF0bWVsIEFUMzJhcDcwMDAuCiAKIGNvbmZpZyBGU0xfRE1BCi0JYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHgvTVBDODN4eCBETUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBQQworCXRyaXN0YXRlICJGcmVlc2NhbGUgRWxvIGFuZCBFbG8gUGx1cyBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKIAlzZWxlY3QgRE1BX0VOR0lORQogCS0tLWhlbHAtLS0KLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIERNQSBlbmdpbmUuIE5vdywgaXQgc3VwcG9ydAotCSAgTVBDODU2MC80MCwgTVBDODU1NSwgTVBDODU0OCBhbmQgTVBDODY0MSBwcm9jZXNzb3JzLgotCSAgVGhlIE1QQzgzNDksIE1QQzgzNjAgaXMgYWxzbyBzdXBwb3J0ZWQuCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBFbG8gYW5kIEVsbyBQbHVzIERNQSBjb250cm9sbGVycy4KKwkgIFRoZSBFbG8gaXMgdGhlIERNQSBjb250cm9sbGVyIG9uIHNvbWUgODJ4eCBhbmQgODN4eCBwYXJ0cywgYW5kIHRoZQorCSAgRWxvIFBsdXMgaXMgdGhlIERNQSBjb250cm9sbGVyIG9uIDg1eHggYW5kIDg2eHggcGFydHMuCiAKIGNvbmZpZyBNVl9YT1IKIAlib29sICJNYXJ2ZWxsIFhPUiBlbmdpbmUgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwppbmRleCBhMDhkMTk3Li5kMWUzODFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKKysrIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCkBAIC0zMjUsNyArMzI1LDEyIEBACiAJc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7CiAJdW5zaWduZWQgaW50CQlpOwogCi0JZHRjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRtYXRlc3RfY2hhbiksIEdGUF9BVE9NSUMpOworCS8qIEhhdmUgd2UgYWxyZWFkeSBiZWVuIHRvbGQgYWJvdXQgdGhpcyBjaGFubmVsPyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHRjLCAmZG1hdGVzdF9jaGFubmVscywgbm9kZSkKKwkJaWYgKGR0Yy0+Y2hhbiA9PSBjaGFuKQorCQkJcmV0dXJuIERNQV9EVVA7CisKKwlkdGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkdGMpIHsKIAkJcHJfd2FybmluZygiZG1hdGVzdDogTm8gbWVtb3J5IGZvciAlc1xuIiwgY2hhbi0+ZGV2LmJ1c19pZCk7CiAJCXJldHVybiBETUFfTkFLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwppbmRleCBjMDA1OWNhLi4wYjk1ZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMzcwLDcgKzM3MCwxMCBAQAogCQkJCQlzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7Ci0JTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIEhhcyB0aGlzIGNoYW5uZWwgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZD8gKi8KKwlpZiAoZnNsX2NoYW4tPmRlc2NfcG9vbCkKKwkJcmV0dXJuIDE7CiAKIAkvKiBXZSBuZWVkIHRoZSBkZXNjcmlwdG9yIHRvIGJlIGFsaWduZWQgdG8gMzJieXRlcwogCSAqIGZvciBtZWV0aW5nIEZTTCBETUEgc3BlY2lmaWNhdGlvbiByZXF1aXJlbWVudC4KQEAgLTQxMCw2ICs0MTMsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiAJZG1hX3Bvb2xfZGVzdHJveShmc2xfY2hhbi0+ZGVzY19wb29sKTsKKworCWZzbF9jaGFuLT5kZXNjX3Bvb2wgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKQEAgLTc4NiwxNTkgKzc5MSwyOSBAQAogCWZzbF9jaGFuX2xkX2NsZWFudXAoZnNsX2NoYW4pOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Qodm9pZCAqcGFyYW0pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfZG1hX2NoYW5fcHJvYmUoc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2LAorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGZlYXR1cmUsIGNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSBwYXJhbTsKLQlpZiAoZnNsX2NoYW4pCi0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBjYWxsYmFjayBpcyBvayFcbiIpOwotfQotCi1zdGF0aWMgaW50IGZzbF9kbWFfc2VsZl90ZXN0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKLQlpbnQgZXJyID0gMDsKLQlkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfc3JjOwotCWRtYV9jb29raWVfdCBjb29raWU7Ci0JdTggKnNyYywgKmRlc3Q7Ci0JaW50IGk7Ci0Jc2l6ZV90IHRlc3Rfc2l6ZTsKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4MSwgKnR4MiwgKnR4MzsKLQotCXRlc3Rfc2l6ZSA9IDQwOTY7Ci0KLQlzcmMgPSBrbWFsbG9jKHRlc3Rfc2l6ZSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghc3JjKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIHRlc3QhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGVzdCA9IHNyYyArIHRlc3Rfc2l6ZTsKLQotCWZvciAoaSA9IDA7IGkgPCB0ZXN0X3NpemU7IGkrKykKLQkJc3JjW2ldID0gKHU4KSBpOwotCi0JY2hhbiA9ICZmc2xfY2hhbi0+Y29tbW9uOwotCi0JaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbiwgTlVMTCkgPCAxKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFRYIDEgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjLCB0ZXN0X3NpemUgLyAyLAotCQkJCSBETUFfVE9fREVWSUNFKTsKLQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIGRlc3QsIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJICBETUFfRlJPTV9ERVZJQ0UpOwotCXR4MSA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDIsIDApOwotCWFzeW5jX3R4X2Fjayh0eDEpOwotCi0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgxKTsKLQlmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwotCW1zbGVlcCgyKTsKLQotCWlmIChmc2xfZG1hX2lzX2NvbXBsZXRlKGNoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IFRpbWUgb3V0IVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JLyogVGVzdCBmcmVlIGFuZCByZS1hbGxvYyBjaGFubmVsIHJlc291cmNlcyAqLwotCWZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhjaGFuKTsKLQotCWlmIChmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGNoYW4sIE5VTEwpIDwgMSkgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCi0JCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgcmVzb3VyY2VzIGZvciBETUFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwotCX0KLQotCS8qIENvbnRpbnVlIHRvIHRlc3QKLQkgKiBUWCAyCi0JICovCi0JZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9GUk9NX0RFVklDRSk7Ci0JdHgyID0gZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gNCwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4Mik7Ci0KLQkvKiBUWCAzICovCi0JZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYyArIHRlc3Rfc2l6ZSAqIDMgLyA0LAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfVE9fREVWSUNFKTsKLQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIGRlc3QgKyB0ZXN0X3NpemUgKiAzIC8gNCwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX0ZST01fREVWSUNFKTsKLQl0eDMgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKLQlhc3luY190eF9hY2sodHgzKTsKLQotCS8qIEludGVycnVwdCB0eCB0ZXN0ICovCi0JdHgxID0gZnNsX2RtYV9wcmVwX2ludGVycnVwdChjaGFuLCAwKTsKLQlhc3luY190eF9hY2sodHgxKTsKLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDEpOwotCi0JLyogVGVzdCBleGNoYW5naW5nIHRoZSBwcmVwYXJlZCB0eCBzb3J0ICovCi0JY29va2llID0gZnNsX2RtYV90eF9zdWJtaXQodHgzKTsKLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDIpOwotCi0JaWYgKGRtYV9oYXNfY2FwKERNQV9JTlRFUlJVUFQsICgoc3RydWN0IGZzbF9kbWFfZGV2aWNlICopCi0JICAgIGRldl9nZXRfZHJ2ZGF0YShmc2xfY2hhbi0+ZGV2LT5wYXJlbnQpKS0+Y29tbW9uLmNhcF9tYXNrKSkgewotCQl0eDMtPmNhbGxiYWNrID0gZnNsX2RtYV9jYWxsYmFja190ZXN0OwotCQl0eDMtPmNhbGxiYWNrX3BhcmFtID0gZnNsX2NoYW47Ci0JfQotCWZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7Ci0JbXNsZWVwKDIpOwotCi0JaWYgKGZzbF9kbWFfaXNfY29tcGxldGUoY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKSAhPSBETUFfU1VDQ0VTUykgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGltZSBvdXQhXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3Jlc291cmNlczsKLQl9Ci0KLQllcnIgPSBtZW1jbXAoc3JjLCBkZXN0LCB0ZXN0X3NpemUpOwotCWlmIChlcnIpIHsKLQkJZm9yIChpID0gMDsgKCooc3JjICsgaSkgPT0gKihkZXN0ICsgaSkpICYmIChpIDwgdGVzdF9zaXplKTsKLQkJCQlpKyspOwotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGVzdCBmYWlsZWQsIGRhdGEgJWQvJWxkIGlzICIKLQkJCQkiZXJyb3IhIHNyYyAweCV4LCBkZXN0IDB4JXhcbiIsCi0JCQkJaSwgKGxvbmcpdGVzdF9zaXplLCAqKHNyYyArIGkpLCAqKGRlc3QgKyBpKSk7Ci0JfQotCi1mcmVlX3Jlc291cmNlczoKLQlmc2xfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoY2hhbik7Ci1vdXQ6Ci0Ja2ZyZWUoc3JjKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9mc2xfZG1hX2NoYW5fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAotCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2OwogCXN0cnVjdCBmc2xfZG1hX2NoYW4gKm5ld19mc2xfY2hhbjsKIAlpbnQgZXJyOwogCi0JZmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPmRldi5wYXJlbnQpOwotCUJVR19PTighZmRldik7Ci0KIAkvKiBhbGxvYyBjaGFubmVsICovCiAJbmV3X2ZzbF9jaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9kbWFfY2hhbiksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2ZzbF9jaGFuKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgorCQlkZXZfZXJyKGZkZXYtPmRldiwgIk5vIGZyZWUgbWVtb3J5IGZvciBhbGxvY2F0aW5nICIKIAkJCQkiZG1hIGNoYW5uZWxzIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIGdldCBkbWEgY2hhbm5lbCByZWdpc3RlciBiYXNlICovCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYtPm5vZGUsIDAsICZuZXdfZnNsX2NoYW4tPnJlZyk7CisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmbmV3X2ZzbF9jaGFuLT5yZWcpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCi0JCQkJZGV2LT5ub2RlLT5mdWxsX25hbWUpOworCQlkZXZfZXJyKGZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0eSAncmVnJ1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOwogCQlnb3RvIGVycl9ub19yZWc7CiAJfQogCi0JbmV3X2ZzbF9jaGFuLT5mZWF0dXJlID0gKih1MzIgKiltYXRjaC0+ZGF0YTsKKwluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSBmZWF0dXJlOwogCiAJaWYgKCFmZGV2LT5mZWF0dXJlKQogCQlmZGV2LT5mZWF0dXJlID0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlOwpAQCAtOTQ4LDEzICs4MjMsMTMgQEAKIAkgKi8KIAlXQVJOX09OKGZkZXYtPmZlYXR1cmUgIT0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlKTsKIAotCW5ld19mc2xfY2hhbi0+ZGV2ID0gJmRldi0+ZGV2OworCW5ld19mc2xfY2hhbi0+ZGV2ID0gJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldjsKIAluZXdfZnNsX2NoYW4tPnJlZ19iYXNlID0gaW9yZW1hcChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCwKIAkJCW5ld19mc2xfY2hhbi0+cmVnLmVuZCAtIG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0ICsgMSk7CiAKIAluZXdfZnNsX2NoYW4tPmlkID0gKChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCAtIDB4MTAwKSAmIDB4ZmZmKSA+PiA3OwogCWlmIChuZXdfZnNsX2NoYW4tPmlkID4gRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZXJlIGlzIG5vICVkIGNoYW5uZWwhXG4iLAorCQlkZXZfZXJyKGZkZXYtPmRldiwgIlRoZXJlIGlzIG5vICVkIGNoYW5uZWwhXG4iLAogCQkJCW5ld19mc2xfY2hhbi0+aWQpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9ub19jaGFuOwpAQCAtOTg4LDI5ICs4NjMsMjMgQEAKIAkJCSZmZGV2LT5jb21tb24uY2hhbm5lbHMpOwogCWZkZXYtPmNvbW1vbi5jaGFuY250Kys7CiAKLQluZXdfZnNsX2NoYW4tPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRldi0+bm9kZSwgMCk7CisJbmV3X2ZzbF9jaGFuLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKIAlpZiAobmV3X2ZzbF9jaGFuLT5pcnEgIT0gTk9fSVJRKSB7CiAJCWVyciA9IHJlcXVlc3RfaXJxKG5ld19mc2xfY2hhbi0+aXJxLAogCQkJCQkmZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJCSJmc2xkbWEtY2hhbm5lbCIsIG5ld19mc2xfY2hhbik7CiAJCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgotCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycik7CisJCQlkZXZfZXJyKGZkZXYtPmRldiwgIkRNQSBjaGFubmVsICVzIHJlcXVlc3RfaXJxIGVycm9yICIKKwkJCQkid2l0aCByZXR1cm4gJWRcbiIsIG5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKIAkJCWdvdG8gZXJyX25vX2lycTsKIAkJfQogCX0KIAotCWVyciA9IGZzbF9kbWFfc2VsZl90ZXN0KG5ld19mc2xfY2hhbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfc2VsZl90ZXN0OwotCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiIyVkICglcyksIGlycSAlZFxuIiwgbmV3X2ZzbF9jaGFuLT5pZCwKLQkJCQltYXRjaC0+Y29tcGF0aWJsZSwgbmV3X2ZzbF9jaGFuLT5pcnEpOworCWRldl9pbmZvKGZkZXYtPmRldiwgIiMlZCAoJXMpLCBpcnEgJWRcbiIsIG5ld19mc2xfY2hhbi0+aWQsCisJCQkJY29tcGF0aWJsZSwgbmV3X2ZzbF9jaGFuLT5pcnEpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9zZWxmX3Rlc3Q6Ci0JZnJlZV9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsIG5ld19mc2xfY2hhbik7CiBlcnJfbm9faXJxOgogCWxpc3RfZGVsKCZuZXdfZnNsX2NoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSk7CiBlcnJfbm9fY2hhbjoKQEAgLTEwMjAsMzggKzg4OSwyMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNvbnN0IHUzMiBtcGM4NTQwX2RtYV9pcF9mZWF0dXJlID0gRlNMX0RNQV9JUF84NVhYIHwgRlNMX0RNQV9CSUdfRU5ESUFOOwotY29uc3QgdTMyIG1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRMRV9FTkRJQU47Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZzbF9kbWFfY2hhbl9pZHNbXSA9IHsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiwKLQkJLmRhdGEgPSAodm9pZCAqKSZtcGM4NTQwX2RtYV9pcF9mZWF0dXJlLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYS1jaGFubmVsIiwKLQkJLmRhdGEgPSAodm9pZCAqKSZtcGM4MzQ5X2RtYV9pcF9mZWF0dXJlLAotCX0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAib2YtZnNsLWRtYS1jaGFubmVsIiwKLQkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2NoYW5faWRzLAotCS5wcm9iZSA9IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IG9mX2ZzbF9kbWFfY2hhbl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBmc2xfZG1hX2NoYW5fcmVtb3ZlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZjaGFuKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIpOworCWZyZWVfaXJxKGZjaGFuLT5pcnEsIGZjaGFuKTsKKwlsaXN0X2RlbCgmZmNoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSk7CisJaW91bm1hcChmY2hhbi0+cmVnX2Jhc2UpOworCWtmcmVlKGZjaGFuKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgb2ZfZnNsX2RtYV9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCiAJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiAKIAlmZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbF9kbWFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmZGV2KSB7CkBAIC0xMDg1LDkgKzkzNiw5IEBACiAJZmRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKIAlmZGV2LT5jb21tb24uZGV2ID0gJmRldi0+ZGV2OwogCi0JaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKLQlpZiAoaXJxICE9IE5PX0lSUSkgewotCQllcnIgPSByZXF1ZXN0X2lycShpcnEsICZmc2xfZG1hX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJZmRldi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwlpZiAoZmRldi0+aXJxICE9IE5PX0lSUSkgeworCQllcnIgPSByZXF1ZXN0X2lycShmZGV2LT5pcnEsICZmc2xfZG1hX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJCSJmc2xkbWEtZGV2aWNlIiwgZmRldik7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGRldmljZSByZXF1ZXN0X2lycSBlcnJvciAiCkBAIC0xMDk3LDcgKzk0OCwyMSBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmKGRldi0+ZGV2KSwgZmRldik7Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKGRldi0+bm9kZSwgb2ZfZnNsX2RtYV9jaGFuX2lkcywgJmRldi0+ZGV2KTsKKworCS8qIFdlIGNhbm5vdCB1c2Ugb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKCkgYmVjYXVzZSB0aGVyZSBpcyBubworCSAqIG9mX3BsYXRmb3JtX2J1c19yZW1vdmUuICBJbnN0ZWFkLCB3ZSBtYW51YWxseSBpbnN0YW50aWF0ZSBldmVyeSBETUEKKwkgKiBjaGFubmVsIG9iamVjdC4KKwkgKi8KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRldi0+bm9kZSwgY2hpbGQpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKSkKKwkJCWZzbF9kbWFfY2hhbl9wcm9iZShmZGV2LCBjaGlsZCwKKwkJCQlGU0xfRE1BX0lQXzg1WFggfCBGU0xfRE1BX0JJR19FTkRJQU4sCisJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIik7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgImZzbCxlbG8tZG1hLWNoYW5uZWwiKSkKKwkJCWZzbF9kbWFfY2hhbl9wcm9iZShmZGV2LCBjaGlsZCwKKwkJCQlGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRMRV9FTkRJQU4sCisJCQkJImZzbCxlbG8tZG1hLWNoYW5uZWwiKTsKKwl9CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZmZGV2LT5jb21tb24pOwogCXJldHVybiAwOwpAQCAtMTEwOSw2ICs5NzQsMzAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG9mX2ZzbF9kbWFfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldikKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJdW5zaWduZWQgaW50IGk7CisKKwlmZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZl9kZXYtPmRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmZkZXYtPmNvbW1vbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRTsgaSsrKQorCQlpZiAoZmRldi0+Y2hhbltpXSkKKwkJCWZzbF9kbWFfY2hhbl9yZW1vdmUoZmRldi0+Y2hhbltpXSk7CisKKwlpZiAoZmRldi0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoZmRldi0+aXJxLCBmZGV2KTsKKworCWlvdW5tYXAoZmRldi0+cmVnX2Jhc2UpOworCisJa2ZyZWUoZmRldik7CisJZGV2X3NldF9kcnZkYXRhKCZvZl9kZXYtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYSIsIH0sCkBAIC0xMTE2LDE1ICsxMDA1LDMyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBvZl9mc2xfZG1hX2RyaXZlciA9IHsKLQkubmFtZSA9ICJvZi1mc2wtZG1hIiwKKwkubmFtZSA9ICJmc2wtZWxvLWRtYSIsCiAJLm1hdGNoX3RhYmxlID0gb2ZfZnNsX2RtYV9pZHMsCiAJLnByb2JlID0gb2ZfZnNsX2RtYV9wcm9iZSwKKwkucmVtb3ZlID0gb2ZfZnNsX2RtYV9yZW1vdmUsCiB9OwogCiBzdGF0aWMgX19pbml0IGludCBvZl9mc2xfZG1hX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7CisJaW50IHJldDsKKworCXByX2luZm8oIkZyZWVzY2FsZSBFbG8gLyBFbG8gUGx1cyBETUEgZHJpdmVyXG4iKTsKKworCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworCWlmIChyZXQpCisJCXByX2VycigiZnNsZG1hOiBmYWlsZWQgdG8gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyXG4iKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2NoYW5faW5pdCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfZnNsX2RtYV9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKK30KKwogc3Vic3lzX2luaXRjYWxsKG9mX2ZzbF9kbWFfaW5pdCk7Cittb2R1bGVfZXhpdChvZl9mc2xfZG1hX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBFbG8gLyBFbG8gUGx1cyBETUEgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuaCBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCmluZGV4IDZmYWYwN2IuLjRmMjFhNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCkBAIC0xMTQsNiArMTE0LDcgQEAKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqY2hhbltGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFXTsKIAl1MzIgZmVhdHVyZTsJCS8qIFRoZSBzYW1lIGFzIERNQSBjaGFubmVscyAqLworCWludCBpcnE7CQkvKiBDaGFubmVsIElSUSAqLwogfTsKIAogLyogRGVmaW5lIG1hY3JvcyBmb3IgZnNsX2RtYV9jaGFuLT5mZWF0dXJlIHByb3BlcnR5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCBiYzhjNmUzLi4xZWY2OGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTk3MSwxMSArOTcxLDkgQEAKIAlzd2l0Y2ggKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCXJldHVybiBpb2F0MV9kbWFfZ2V0X25leHRfZGVzY3JpcHRvcihpb2F0X2NoYW4pOwotCQlicmVhazsKIAljYXNlIElPQVRfVkVSXzJfMDoKIAljYXNlIElPQVRfVkVSXzNfMDoKIAkJcmV0dXJuIGlvYXQyX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCAwZTAyNGZlLi44ODcwNzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJY3Nyb3ctPm5yX3BhZ2VzID0gKHIuZW5kIC0gci5zdGFydCArIDEpID4+IFBBR0VfU0hJRlQ7CiAJCWNzcm93LT5sYXN0X3BhZ2UgPSBjc3Jvdy0+Zmlyc3RfcGFnZSArIGNzcm93LT5ucl9wYWdlcyAtIDE7CiAJCWNzcm93LT5tdHlwZSA9IE1FTV9YRFI7Ci0JCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEOworCQljc3Jvdy0+ZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CiAJCWRldl9kYmcobWNpLT5kZXYsCiAJCQkiSW5pdGlhbGl6ZWQgb24gbm9kZSAlZCwgY2hhbm1hc2s9MHgleCwiCiAJCQkiIGZpcnN0X3BhZ2U9MHglbHgsIG5yX3BhZ2VzPTB4JXhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwppbmRleCA0YTE2YjViLi5mMGQ5YjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKQEAgLTExOSw2ICsxMTksNyBAQAogI2RlZmluZQkJCUZFUlJfTkZfVU5DT1JSRUNUQUJMRQkoRkVSUl9ORl9NMTJFUlIgfCBcCiAJCQkJCQkJRkVSUl9ORl9NMTFFUlIgfCBcCiAJCQkJCQkJRkVSUl9ORl9NMTBFUlIgfCBcCisJCQkJCQkJRkVSUl9ORl9NOUVSUiB8IFwKIAkJCQkJCQlGRVJSX05GX004RVJSIHwgXAogCQkJCQkJCUZFUlJfTkZfTTdFUlIgfCBcCiAJCQkJCQkJRkVSUl9ORl9NNkVSUiB8IFwKQEAgLTMwMSw2ICszMDIsOSBAQAogfTsKICNlbmRpZgogCisvKiBlbmFibGVzIHRoZSByZXBvcnQgb2YgbWlzY2VsbGFuZW91cyBtZXNzYWdlcyBhcyBDRSBlcnJvcnMgLSBkZWZhdWx0IG9mZiAqLworc3RhdGljIGludCBtaXNjX21lc3NhZ2VzOworCiAvKiBFbnVtZXJhdGlvbiBvZiBzdXBwb3J0ZWQgZGV2aWNlcyAqLwogZW51bSBpNTAwMF9jaGlwcyB7CiAJSTUwMDBQID0gMCwKQEAgLTQ2Niw3ICs0NzAsOCBAQAogCQkJCQlzdHJ1Y3QgaTUwMDBfZXJyb3JfaW5mbyAqaW5mbywKIAkJCQkJaW50IGhhbmRsZV9lcnJvcnMpCiB7Ci0JY2hhciBtc2dbRURBQ19NQ19MQUJFTF9MRU4gKyAxICsgOTBdOworCWNoYXIgbXNnW0VEQUNfTUNfTEFCRUxfTEVOICsgMSArIDE2MF07CisJY2hhciAqc3BlY2lmaWMgPSBOVUxMOwogCXUzMiBhbGxFcnJvcnM7CiAJaW50IGJyYW5jaDsKIAlpbnQgY2hhbm5lbDsKQEAgLTQ4MCwxMSArNDg1LDYgQEAKIAlpZiAoIWFsbEVycm9ycykKIAkJcmV0dXJuOwkJLyogaWYgbm8gZXJyb3IsIHJldHVybiBub3cgKi8KIAotCS8qIE9OTFkgT05FIG9mIHRoZSBwb3NzaWJsZSBlcnJvciBiaXRzIHdpbGwgYmUgc2V0LCBhcyBwZXIgdGhlIGRvY3MgKi8KLQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCSJGQVRBTCBFUlJPUlMgRm91bmQhISEgMXN0IEZBVEFMIEVyciBSZWc9IDB4JXhcbiIsCi0JCQlhbGxFcnJvcnMpOwotCiAJYnJhbmNoID0gRVhUUkFDVF9GQkRDSEFOX0lORFgoaW5mby0+ZmVycl9mYXRfZmJkKTsKIAljaGFubmVsID0gYnJhbmNoOwogCkBAIC01MDEsMjggKzUwMSw0MiBAQAogCQlyZHdyID8gIldyaXRlIiA6ICJSZWFkIiwgcmFzLCBjYXMpOwogCiAJLyogT25seSAxIGJpdCB3aWxsIGJlIG9uICovCi0JaWYgKGFsbEVycm9ycyAmIEZFUlJfRkFUX00xRVJSKSB7Ci0JCWk1MDAwX21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJCSJBbGVydCBvbiBub24tcmVkdW5kYW50IHJldHJ5IG9yIGZhc3QgIgotCQkJCSJyZXNldCB0aW1lb3V0XG4iKTsKKwlzd2l0Y2ggKGFsbEVycm9ycykgeworCWNhc2UgRkVSUl9GQVRfTTFFUlI6CisJCXNwZWNpZmljID0gIkFsZXJ0IG9uIG5vbi1yZWR1bmRhbnQgcmV0cnkgb3IgZmFzdCAiCisJCQkJInJlc2V0IHRpbWVvdXQiOworCQlicmVhazsKKwljYXNlIEZFUlJfRkFUX00yRVJSOgorCQlzcGVjaWZpYyA9ICJOb3J0aGJvdW5kIENSQyBlcnJvciBvbiBub24tcmVkdW5kYW50ICIKKwkJCQkicmV0cnkiOworCQlicmVhazsKKwljYXNlIEZFUlJfRkFUX00zRVJSOgorCQl7CisJCXN0YXRpYyBpbnQgZG9uZTsKIAotCX0gZWxzZSBpZiAoYWxsRXJyb3JzICYgRkVSUl9GQVRfTTJFUlIpIHsKLQkJaTUwMDBfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCQkJIk5vcnRoYm91bmQgQ1JDIGVycm9yIG9uIG5vbi1yZWR1bmRhbnQgIgotCQkJCSJyZXRyeVxuIik7CisJCS8qCisJCSAqIFRoaXMgZXJyb3IgaXMgZ2VuZXJhdGVkIHRvIGluZm9ybSB0aGF0IHRoZSBpbnRlbGxpZ2VudAorCQkgKiB0aHJvdHRsaW5nIGlzIGRpc2FibGVkIGFuZCB0aGUgdGVtcGVyYXR1cmUgcGFzc2VkIHRoZQorCQkgKiBzcGVjaWZpZWQgbWlkZGxlIHBvaW50LiBTaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGUgQklPUworCQkgKiBzaG91bGQgdGFrZSBjYXJlIG9mLCB3ZSdsbCB3YXJuIG9ubHkgb25jZSB0byBhdm9pZAorCQkgKiB3b3J0aGxlc3NseSBmbG9vZGluZyB0aGUgbG9nLgorCQkgKi8KKwkJaWYgKGRvbmUpCisJCQlyZXR1cm47CisJCWRvbmUrKzsKIAotCX0gZWxzZSBpZiAoYWxsRXJyb3JzICYgRkVSUl9GQVRfTTNFUlIpIHsKLQkJaTUwMDBfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCQkJIj5UbWlkIFRoZXJtYWwgZXZlbnQgd2l0aCBpbnRlbGxpZ2VudCAiCi0JCQkJInRocm90dGxpbmcgZGlzYWJsZWRcbiIpOworCQlzcGVjaWZpYyA9ICI+VG1pZCBUaGVybWFsIGV2ZW50IHdpdGggaW50ZWxsaWdlbnQgIgorCQkJICAgInRocm90dGxpbmcgZGlzYWJsZWQiOworCQl9CisJCWJyZWFrOwogCX0KIAogCS8qIEZvcm0gb3V0IG1lc3NhZ2UgKi8KIAlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAogCQkgIihCcmFuY2g9JWQgRFJBTS1CYW5rPSVkIFJEV1I9JXMgUkFTPSVkIENBUz0lZCAiCi0JCSAiRkFUQUwgRXJyPTB4JXgpIiwKKwkJICJGQVRBTCBFcnI9MHgleCAoJXMpKSIsCiAJCSBicmFuY2ggPj4gMSwgYmFuaywgcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzLAotCQkgYWxsRXJyb3JzKTsKKwkJIGFsbEVycm9ycywgc3BlY2lmaWMpOwogCiAJLyogQ2FsbCB0aGUgaGVscGVyIHRvIG91dHB1dCBtZXNzYWdlICovCiAJZWRhY19tY19oYW5kbGVfZmJkX3VlKG1jaSwgcmFuaywgY2hhbm5lbCwgY2hhbm5lbCArIDEsIG1zZyk7CkBAIC01MzksNyArNTUzLDggQEAKIAkJCQkJc3RydWN0IGk1MDAwX2Vycm9yX2luZm8gKmluZm8sCiAJCQkJCWludCBoYW5kbGVfZXJyb3JzKQogewotCWNoYXIgbXNnW0VEQUNfTUNfTEFCRUxfTEVOICsgMSArIDkwXTsKKwljaGFyIG1zZ1tFREFDX01DX0xBQkVMX0xFTiArIDEgKyAxNzBdOworCWNoYXIgKnNwZWNpZmljID0gTlVMTDsKIAl1MzIgYWxsRXJyb3JzOwogCXUzMiB1ZV9lcnJvcnM7CiAJdTMyIGNlX2Vycm9yczsKQEAgLTU1NywxMCArNTcyLDYgQEAKIAkJcmV0dXJuOwkJLyogaWYgbm8gZXJyb3IsIHJldHVybiBub3cgKi8KIAogCS8qIE9OTFkgT05FIG9mIHRoZSBwb3NzaWJsZSBlcnJvciBiaXRzIHdpbGwgYmUgc2V0LCBhcyBwZXIgdGhlIGRvY3MgKi8KLQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX1dBUk5JTkcsCi0JCQkiTk9OLUZBVEFMIEVSUk9SUyBGb3VuZCEhISAxc3QgTk9OLUZBVEFMIEVyciAiCi0JCQkiUmVnPSAweCV4XG4iLCBhbGxFcnJvcnMpOwotCiAJdWVfZXJyb3JzID0gYWxsRXJyb3JzICYgRkVSUl9ORl9VTkNPUlJFQ1RBQkxFOwogCWlmICh1ZV9lcnJvcnMpIHsKIAkJZGVidWdmMCgiXHRVbmNvcnJlY3RlZCBiaXRzPSAweCV4XG4iLCB1ZV9lcnJvcnMpOwpAQCAtNTc5LDEyICs1OTAsNDcgQEAKIAkJCXJhbmssIGNoYW5uZWwsIGNoYW5uZWwgKyAxLCBicmFuY2ggPj4gMSwgYmFuaywKIAkJCXJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcyk7CiAKKwkJc3dpdGNoICh1ZV9lcnJvcnMpIHsKKwkJY2FzZSBGRVJSX05GX00xMkVSUjoKKwkJCXNwZWNpZmljID0gIk5vbi1BbGlhc2VkIFVuY29ycmVjdGFibGUgUGF0cm9sIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTExRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBTcGFyZS1Db3B5ICIKKwkJCQkJIkRhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTEwRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBNaXJyb3JlZCBEZW1hbmQgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NOUVSUjoKKwkJCXNwZWNpZmljID0gIk5vbi1BbGlhc2VkIFVuY29ycmVjdGFibGUgTm9uLU1pcnJvcmVkICIKKwkJCQkJIkRlbWFuZCBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX004RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIFBhdHJvbCBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX003RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIFNwYXJlLUNvcHkgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NNkVSUjoKKwkJCXNwZWNpZmljID0gIkFsaWFzZWQgVW5jb3JyZWN0YWJsZSBNaXJyb3JlZCBEZW1hbmQgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NNUVSUjoKKwkJCXNwZWNpZmljID0gIkFsaWFzZWQgVW5jb3JyZWN0YWJsZSBOb24tTWlycm9yZWQgRGVtYW5kICIKKwkJCQkJIkRhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTRFUlI6CisJCQlzcGVjaWZpYyA9ICJVbmNvcnJlY3RhYmxlIERhdGEgRUNDIG9uIFJlcGxheSI7CisJCQlicmVhazsKKwkJfQorCiAJCS8qIEZvcm0gb3V0IG1lc3NhZ2UgKi8KIAkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKIAkJCSAiKEJyYW5jaD0lZCBEUkFNLUJhbms9JWQgUkRXUj0lcyBSQVM9JWQgIgotCQkJICJDQVM9JWQsIFVFIEVycj0weCV4KSIsCisJCQkgIkNBUz0lZCwgVUUgRXJyPTB4JXggKCVzKSkiLAogCQkJIGJyYW5jaCA+PiAxLCBiYW5rLCByZHdyID8gIldyaXRlIiA6ICJSZWFkIiwgcmFzLCBjYXMsCi0JCQkgdWVfZXJyb3JzKTsKKwkJCSB1ZV9lcnJvcnMsIHNwZWNpZmljKTsKIAogCQkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KIAkJZWRhY19tY19oYW5kbGVfZmJkX3VlKG1jaSwgcmFuaywgY2hhbm5lbCwgY2hhbm5lbCArIDEsIG1zZyk7CkBAIC02MTYsNTEgKzY2Miw3NCBAQAogCQkJcmFuaywgY2hhbm5lbCwgYnJhbmNoID4+IDEsIGJhbmssCiAJCQlyZHdyID8gIldyaXRlIiA6ICJSZWFkIiwgcmFzLCBjYXMpOwogCisJCXN3aXRjaCAoY2VfZXJyb3JzKSB7CisJCWNhc2UgRkVSUl9ORl9NMTdFUlI6CisJCQlzcGVjaWZpYyA9ICJDb3JyZWN0YWJsZSBOb24tTWlycm9yZWQgRGVtYW5kIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTE4RVJSOgorCQkJc3BlY2lmaWMgPSAiQ29ycmVjdGFibGUgTWlycm9yZWQgRGVtYW5kIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTE5RVJSOgorCQkJc3BlY2lmaWMgPSAiQ29ycmVjdGFibGUgU3BhcmUtQ29weSBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yMEVSUjoKKwkJCXNwZWNpZmljID0gIkNvcnJlY3RhYmxlIFBhdHJvbCBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJfQorCiAJCS8qIEZvcm0gb3V0IG1lc3NhZ2UgKi8KIAkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKIAkJCSAiKEJyYW5jaD0lZCBEUkFNLUJhbms9JWQgUkRXUj0lcyBSQVM9JWQgIgotCQkJICJDQVM9JWQsIENFIEVycj0weCV4KSIsIGJyYW5jaCA+PiAxLCBiYW5rLAotCQkJIHJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcywgY2VfZXJyb3JzKTsKKwkJCSAiQ0FTPSVkLCBDRSBFcnI9MHgleCAoJXMpKSIsIGJyYW5jaCA+PiAxLCBiYW5rLAorCQkJIHJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcywgY2VfZXJyb3JzLAorCQkJIHNwZWNpZmljKTsKIAogCQkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KIAkJZWRhY19tY19oYW5kbGVfZmJkX2NlKG1jaSwgcmFuaywgY2hhbm5lbCwgbXNnKTsKIAl9CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX1RIRVJNQUw7Ci0JaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsICJcdFRIRVJNQUwgRXJyb3IsIGJpdHM9IDB4JXhcbiIsCi0JCQltaXNjX2Vycm9ycyk7Ci0JfQorCWlmICghbWlzY19tZXNzYWdlcykKKwkJcmV0dXJuOwogCi0JLyogU2VlIGlmIGFueSBvZiB0aGUgdGhlcm1hbCBlcnJvcnMgaGF2ZSBmaXJlZCAqLwotCW1pc2NfZXJyb3JzID0gYWxsRXJyb3JzICYgRkVSUl9ORl9OT05fUkVUUlk7CisJbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiAoRkVSUl9ORl9OT05fUkVUUlkgfCBGRVJSX05GX05PUlRIX0NSQyB8CisJCQkJICAgRkVSUl9ORl9TUERfUFJPVE9DT0wgfCBGRVJSX05GX0RJTU1fU1BBUkUpOwogCWlmIChtaXNjX2Vycm9ycykgewotCQlpNTAwMF9wcmludGsoS0VSTl9XQVJOSU5HLCAiXHROT04tUmV0cnkgIEVycm9ycywgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9CisJCXN3aXRjaCAobWlzY19lcnJvcnMpIHsKKwkJY2FzZSBGRVJSX05GX00xM0VSUjoKKwkJCXNwZWNpZmljID0gIk5vbi1SZXRyeSBvciBSZWR1bmRhbnQgUmV0cnkgRkJEIE1lbW9yeSAiCisJCQkJCSJBbGVydCBvciBSZWR1bmRhbnQgRmFzdCBSZXNldCBUaW1lb3V0IjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTE0RVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLVJldHJ5IG9yIFJlZHVuZGFudCBSZXRyeSBGQkQgIgorCQkJCQkiQ29uZmlndXJhdGlvbiBBbGVydCI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00xNUVSUjoKKwkJCXNwZWNpZmljID0gIk5vbi1SZXRyeSBvciBSZWR1bmRhbnQgUmV0cnkgRkJEICIKKwkJCQkJIk5vcnRoYm91bmQgQ1JDIGVycm9yIG9uIHJlYWQgZGF0YSI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yMUVSUjoKKwkJCXNwZWNpZmljID0gIkZCRCBOb3J0aGJvdW5kIENSQyBlcnJvciBvbiAiCisJCQkJCSJGQkQgU3luYyBTdGF0dXMiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMjJFUlI6CisJCQlzcGVjaWZpYyA9ICJTUEQgcHJvdG9jb2wgZXJyb3IiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMjdFUlI6CisJCQlzcGVjaWZpYyA9ICJESU1NLXNwYXJlIGNvcHkgc3RhcnRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yOEVSUjoKKwkJCXNwZWNpZmljID0gIkRJTU0tc3BhcmUgY29weSBjb21wbGV0ZWQiOworCQkJYnJlYWs7CisJCX0KKwkJYnJhbmNoID0gRVhUUkFDVF9GQkRDSEFOX0lORFgoaW5mby0+ZmVycl9uZl9mYmQpOwogCi0JLyogU2VlIGlmIGFueSBvZiB0aGUgdGhlcm1hbCBlcnJvcnMgaGF2ZSBmaXJlZCAqLwotCW1pc2NfZXJyb3JzID0gYWxsRXJyb3JzICYgRkVSUl9ORl9OT1JUSF9DUkM7Ci0JaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCQkiXHROT1JUSEJPVU5EIENSQyAgRXJyb3IsIGJpdHM9IDB4JXhcbiIsCi0JCQltaXNjX2Vycm9ycyk7Ci0JfQorCQkvKiBGb3JtIG91dCBtZXNzYWdlICovCisJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCisJCQkgIihCcmFuY2g9JWQgRXJyPSUjeCAoJXMpKSIsIGJyYW5jaCA+PiAxLAorCQkJIG1pc2NfZXJyb3JzLCBzcGVjaWZpYyk7CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX1NQRF9QUk9UT0NPTDsKLQlpZiAobWlzY19lcnJvcnMpIHsKLQkJaTUwMDBfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCSJcdFNQRCBQcm90b2NvbCAgRXJyb3IsIGJpdHM9IDB4JXhcbiIsCi0JCQltaXNjX2Vycm9ycyk7Ci0JfQotCi0JLyogU2VlIGlmIGFueSBvZiB0aGUgdGhlcm1hbCBlcnJvcnMgaGF2ZSBmaXJlZCAqLwotCW1pc2NfZXJyb3JzID0gYWxsRXJyb3JzICYgRkVSUl9ORl9ESU1NX1NQQVJFOwotCWlmIChtaXNjX2Vycm9ycykgewotCQlpNTAwMF9wcmludGsoS0VSTl9XQVJOSU5HLCAiXHRESU1NLVNwYXJlICBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKKwkJLyogQ2FsbCB0aGUgaGVscGVyIHRvIG91dHB1dCBtZXNzYWdlICovCisJCWVkYWNfbWNfaGFuZGxlX2ZiZF9jZShtY2ksIDAsIDAsIG1zZyk7CiAJfQogfQogCkBAIC0xNDk3LDMgKzE1NjYsNiBAQAogCiBtb2R1bGVfcGFyYW0oZWRhY19vcF9zdGF0ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZWRhY19vcF9zdGF0ZSwgIkVEQUMgRXJyb3IgUmVwb3J0aW5nIHN0YXRlOiAwPVBvbGwsMT1OTUkiKTsKK21vZHVsZV9wYXJhbShtaXNjX21lc3NhZ2VzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtaXNjX21lc3NhZ2VzLCAiTG9nIG1pc2NlbGxhbmVvdXMgbm9uIGZhdGFsIG1lc3NhZ2VzIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYwppbmRleCBjNTMwNWUzLi41Nzc3NjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCkBAIC0xMTQsNiArMTE0LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmk4MjQ0M2J4Z3hfcGNpOwogCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm1jaV9wZGV2OwkvKiBpbml0IGRldjogaW4gY2FzZSB0aGF0IEFHUCBjb2RlIGhhcworCQkJCQkgKiBhbHJlYWR5IHJlZ2lzdGVyZWQgZHJpdmVyCisJCQkJCSAqLworCitzdGF0aWMgaW50IGk4MjQ0M2J4Z3hfcmVnaXN0ZXJlZCA9IDE7CisKIHN0YXRpYyB2b2lkIGk4MjQ0M2J4Z3hfZWRhY21jX2dldF9lcnJvcl9pbmZvKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAkJCQlzdHJ1Y3QgaTgyNDQzYnhneF9lZGFjbWNfZXJyb3JfaW5mbwogCQkJCSppbmZvKQpAQCAtMzQ1LDEwICszNTEsMTcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGk4MjQ0M2J4Z3hfZWRhY21jX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKKwlpbnQgcmM7CisKIAlkZWJ1Z2YwKCJNQzogIiBfX0ZJTEVfXyAiOiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBkb24ndCBuZWVkIHRvIGNhbGwgcGNpX2RldmljZV9lbmFibGUoKSAqLwotCXJldHVybiBpODI0NDNieGd4X2VkYWNtY19wcm9iZTEocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7CisJcmMgPSBpODI0NDNieGd4X2VkYWNtY19wcm9iZTEocGRldiwgZW50LT5kcml2ZXJfZGF0YSk7CisKKwlpZiAobWNpX3BkZXYgPT0gTlVMTCkKKwkJbWNpX3BkZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGk4MjQ0M2J4Z3hfZWRhY21jX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zODcsMTUgKzQwMCw2MSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpODI0NDNieGd4X2VkYWNtY19pbml0KHZvaWQpCiB7CisJaW50IHBjaV9yYzsKICAgICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgT1BTVEFURSBpcyBzZXQgY29ycmVjdGx5IGZvciBQT0xMIG9yIE5NSSAqLwogICAgICAgIG9wc3RhdGVfaW5pdCgpOwogCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmk4MjQ0M2J4Z3hfZWRhY21jX2RyaXZlcik7CisJcGNpX3JjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaTgyNDQzYnhneF9lZGFjbWNfZHJpdmVyKTsKKwlpZiAocGNpX3JjIDwgMCkKKwkJZ290byBmYWlsMDsKKworCWlmIChtY2lfcGRldiA9PSBOVUxMKSB7CisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9ICZpODI0NDNieGd4X3BjaV90YmxbMF07CisJCWludCBpID0gMDsKKwkJaTgyNDQzYnhneF9yZWdpc3RlcmVkID0gMDsKKworCQl3aGlsZSAobWNpX3BkZXYgPT0gTlVMTCAmJiBpZC0+dmVuZG9yICE9IDApIHsKKwkJCW1jaV9wZGV2ID0gcGNpX2dldF9kZXZpY2UoaWQtPnZlbmRvciwKKwkJCQkJaWQtPmRldmljZSwgTlVMTCk7CisJCQlpKys7CisJCQlpZCA9ICZpODI0NDNieGd4X3BjaV90YmxbaV07CisJCX0KKwkJaWYgKCFtY2lfcGRldikgeworCQkJZGVidWdmMCgiaTgyNDQzYnhneCBwY2lfZ2V0X2RldmljZSBmYWlsXG4iKTsKKwkJCXBjaV9yYyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWwxOworCQl9CisKKwkJcGNpX3JjID0gaTgyNDQzYnhneF9lZGFjbWNfaW5pdF9vbmUobWNpX3BkZXYsIGk4MjQ0M2J4Z3hfcGNpX3RibCk7CisKKwkJaWYgKHBjaV9yYyA8IDApIHsKKwkJCWRlYnVnZjAoImk4MjQ0M2J4Z3ggaW5pdCBmYWlsXG4iKTsKKwkJCXBjaV9yYyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWwxOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWwxOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaTgyNDQzYnhneF9lZGFjbWNfZHJpdmVyKTsKKworZmFpbDA6CisJaWYgKG1jaV9wZGV2ICE9IE5VTEwpCisJCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKKworCXJldHVybiBwY2lfcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpODI0NDNieGd4X2VkYWNtY19leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpODI0NDNieGd4X2VkYWNtY19kcml2ZXIpOworCisJaWYgKCFpODI0NDNieGd4X3JlZ2lzdGVyZWQpCisJCWk4MjQ0M2J4Z3hfZWRhY21jX3JlbW92ZV9vbmUobWNpX3BkZXYpOworCisJaWYgKG1jaV9wZGV2KQorCQlwY2lfZGV2X3B1dChtY2lfcGRldik7CiB9CiAKIG1vZHVsZV9pbml0KGk4MjQ0M2J4Z3hfZWRhY21jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDIyNjVkOWMuLjBjZmNiMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CkBAIC00MCw3ICs0MSw3IEBACiAjZW5kaWYKIAogc3RhdGljIHUzMiBvcmlnX2wyX2Vycl9kaXNhYmxlOwotc3RhdGljIHUzMiBvcmlnX2hpZDE7CitzdGF0aWMgdTMyIG9yaWdfaGlkMVsyXTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiBNQyBTWVNGUyBwYXJ0cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNjQ3LDYgKzY0OCw5IEBACiAJewogCSAuY29tcGF0aWJsZSA9ICJmc2wsODU2OC1sMi1jYWNoZS1jb250cm9sbGVyIiwKIAkgfSwKKwl7CisJIC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWwyLWNhY2hlLWNvbnRyb2xsZXIiLAorCSB9LAogCXt9LAogfTsKIApAQCAtOTEyLDcgKzkxNiw4IEBACiAJCS8qIHJlZ2lzdGVyIGludGVycnVwdHMgKi8KIAkJcGRhdGEtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAkJcmVzID0gZGV2bV9yZXF1ZXN0X2lycSgmb3AtPmRldiwgcGRhdGEtPmlycSwKLQkJCQkgICAgICAgbXBjODV4eF9tY19pc3IsIElSUUZfRElTQUJMRUQsCisJCQkJICAgICAgIG1wYzg1eHhfbWNfaXNyLAorCQkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkJICAgICAgICJbRURBQ10gTUMgZXJyIiwgbWNpKTsKIAkJaWYgKHJlcyA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byByZXF1ZXN0IGlycSAlZCBmb3IgIgpAQCAtOTgwLDYgKzk4NSw5IEBACiAJewogCSAuY29tcGF0aWJsZSA9ICJmc2wsODU2OC1tZW1vcnktY29udHJvbGxlciIsCiAJIH0sCisJeworCSAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciIsCisJIH0sCiAJe30sCiB9OwogCkBAIC05OTUsNiArMTAwMywxNCBAQAogCQkgICB9LAogfTsKIAorCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9tY19jbGVhcl9yZnhlKHZvaWQgKmRhdGEpCit7CisJb3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0gPSBtZnNwcihTUFJOX0hJRDEpOworCW10c3ByKFNQUk5fSElEMSwgKG9yaWdfaGlkMVtzbXBfcHJvY2Vzc29yX2lkKCldICYgfjB4MjAwMDApKTsKK30KKworCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X21jX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzID0gMDsKQEAgLTEwMzAsMTkgKzEwNDYsMjIgQEAKIAkgKiBuZWVkIHRvIGNsZWFyIEhJRDFbUkZYRV0gdG8gZGlzYWJsZSBtYWNoaW5lIGNoZWNrIGludAogCSAqIHNvIHdlIGNhbiBjYXRjaCBpdAogCSAqLwotCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9JTlQpIHsKLQkJb3JpZ19oaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKLQkJbXRzcHIoU1BSTl9ISUQxLCAob3JpZ19oaWQxICYgfjB4MjAwMDApKTsKLQl9CisJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX0lOVCkKKwkJb25fZWFjaF9jcHUobXBjODV4eF9tY19jbGVhcl9yZnhlLCBOVUxMLCAwKTsKIAogCXJldHVybiAwOwogfQogCiBtb2R1bGVfaW5pdChtcGM4NXh4X21jX2luaXQpOwogCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjODV4eF9tY19yZXN0b3JlX2hpZDEodm9pZCAqZGF0YSkKK3sKKwltdHNwcihTUFJOX0hJRDEsIG9yaWdfaGlkMVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IG1wYzg1eHhfbWNfZXhpdCh2b2lkKQogewotCW10c3ByKFNQUk5fSElEMSwgb3JpZ19oaWQxKTsKKwlvbl9lYWNoX2NwdShtcGM4NXh4X21jX3Jlc3RvcmVfaGlkMSwgTlVMTCwgMCk7CiAjaWZkZWYgQ09ORklHX1BDSQogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM4NXh4X3BjaV9lcnJfZHJpdmVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYwppbmRleCBiYmQ3M2E0Li40MThjMThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYwpAQCAtMTg5LDM5ICsxODksMTYgQEAKIAk2MywgNSwgNywgOCwgMTAsIDEzLCAxNiwgMTgsIDIxLCAyNCwgMjYsIDI5LCAzMiwgMzUsIDM3LCA0MAogfTsKIAotc3RydWN0IGJtX2RhdGEgewotCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OwotCXN0cnVjdCB7Ci0JCV9fYmUzMiBhcmc7Ci0JCV9fYmUzMiBkYXRhOwotCX0gbG9jazsKLQl1MzIgb2xkOwotCWludCByY29kZTsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotfTsKLQotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2JtX2xvY2soc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGJtX2RhdGEgKmJtZCA9IGRhdGE7Ci0KLQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUpCi0JCWJtZC0+b2xkID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikgcGF5bG9hZCk7Ci0JYm1kLT5yY29kZSA9IHJjb2RlOwotCWNvbXBsZXRlKCZibWQtPmRvbmUpOwotfQotCiBzdGF0aWMgdm9pZAogZndfY2FyZF9ibV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfY2FyZCwgd29yay53b3JrKTsKIAlzdHJ1Y3QgZndfZGV2aWNlICpyb290X2RldmljZTsKIAlzdHJ1Y3QgZndfbm9kZSAqcm9vdF9ub2RlLCAqbG9jYWxfbm9kZTsKLQlzdHJ1Y3QgYm1fZGF0YSBibWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZTsKKwlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZSwgcmNvZGU7CiAJYm9vbCBkb19yZXNldCA9IGZhbHNlOworCV9fYmUzMiBsb2NrX2RhdGFbMl07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCWxvY2FsX25vZGUgPSBjYXJkLT5sb2NhbF9ub2RlOwpAQCAtMjYzLDMzICsyNDAsMjggQEAKIAkJCWdvdG8gcGlja19tZTsKIAkJfQogCi0JCWJtZC5sb2NrLmFyZyA9IGNwdV90b19iZTMyKDB4M2YpOwotCQlibWQubG9jay5kYXRhID0gY3B1X3RvX2JlMzIobG9jYWxfbm9kZS0+bm9kZV9pZCk7CisJCWxvY2tfZGF0YVswXSA9IGNwdV90b19iZTMyKDB4M2YpOworCQlsb2NrX2RhdGFbMV0gPSBjcHVfdG9fYmUzMihsb2NhbF9ub2RlLT5ub2RlX2lkKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQkJaW5pdF9jb21wbGV0aW9uKCZibWQuZG9uZSk7Ci0JCWZ3X3NlbmRfcmVxdWVzdChjYXJkLCAmYm1kLnQsIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQLAotCQkJCWlybV9pZCwgZ2VuZXJhdGlvbiwKLQkJCQlTQ09ERV8xMDAsIENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JVU19NQU5BR0VSX0lELAotCQkJCSZibWQubG9jaywgc2l6ZW9mKGJtZC5sb2NrKSwKLQkJCQljb21wbGV0ZV9ibV9sb2NrLCAmYm1kKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmYm1kLmRvbmUpOworCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUCwKKwkJCQlpcm1faWQsIGdlbmVyYXRpb24sIFNDT0RFXzEwMCwKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNfTUFOQUdFUl9JRCwKKwkJCQlsb2NrX2RhdGEsIHNpemVvZihsb2NrX2RhdGEpKTsKIAotCQlpZiAoYm1kLnJjb2RlID09IFJDT0RFX0dFTkVSQVRJT04pIHsKLQkJCS8qCi0JCQkgKiBBbm90aGVyIGJ1cyByZXNldCBoYXBwZW5lZC4gSnVzdCByZXR1cm4sCi0JCQkgKiB0aGUgQk0gd29yayBoYXMgYmVlbiByZXNjaGVkdWxlZC4KLQkJCSAqLworCQlpZiAocmNvZGUgPT0gUkNPREVfR0VORVJBVElPTikKKwkJCS8qIEFub3RoZXIgYnVzIHJlc2V0LCBCTSB3b3JrIGhhcyBiZWVuIHJlc2NoZWR1bGVkLiAqLwogCQkJZ290byBvdXQ7Ci0JCX0KIAotCQlpZiAoYm1kLnJjb2RlID09IFJDT0RFX0NPTVBMRVRFICYmIGJtZC5vbGQgIT0gMHgzZikKKwkJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFICYmCisJCSAgICBsb2NrX2RhdGFbMF0gIT0gY3B1X3RvX2JlMzIoMHgzZikpCiAJCQkvKiBTb21lYm9keSBlbHNlIGlzIEJNLCBsZXQgdGhlbSBkbyB0aGUgd29yay4gKi8KIAkJCWdvdG8gb3V0OwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChibWQucmNvZGUgIT0gUkNPREVfQ09NUExFVEUpIHsKKworCQlpZiAocmNvZGUgIT0gUkNPREVfQ09NUExFVEUpIHsKIAkJCS8qCiAJCQkgKiBUaGUgbG9jayByZXF1ZXN0IGZhaWxlZCwgbWF5YmUgdGhlIElSTQogCQkJICogaXNuJ3QgcmVhbGx5IElSTSBjYXBhYmxlIGFmdGVyIGFsbC4gTGV0J3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKaW5kZXggMmU2ZDU4NC4uZWQwMzIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKQEAgLTcyMCw4ICs3MjAsOCBAQAogI2RlZmluZSBHRVRfUEFZTE9BRF9MRU5HVEgodikJKCh2KSAmIDB4ZmZmZikKICNkZWZpbmUgR0VUX0lOVEVSUlVQVCh2KQkoKCh2KSA+PiAxNikgJiAweDAxKQogI2RlZmluZSBHRVRfU0tJUCh2KQkJKCgodikgPj4gMTcpICYgMHgwMSkKLSNkZWZpbmUgR0VUX1RBRyh2KQkJKCgodikgPj4gMTgpICYgMHgwMikKLSNkZWZpbmUgR0VUX1NZKHYpCQkoKCh2KSA+PiAyMCkgJiAweDA0KQorI2RlZmluZSBHRVRfVEFHKHYpCQkoKCh2KSA+PiAxOCkgJiAweDAzKQorI2RlZmluZSBHRVRfU1kodikJCSgoKHYpID4+IDIwKSAmIDB4MGYpCiAjZGVmaW5lIEdFVF9IRUFERVJfTEVOR1RIKHYpCSgoKHYpID4+IDI0KSAmIDB4ZmYpCiAKIHN0YXRpYyBpbnQgaW9jdGxfcXVldWVfaXNvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQpAQCAtOTEzLDcgKzkxMyw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgbG9uZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKaW5kZXggMDg1NWZiNS4uM2ZjY2RkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCkBAIC0zODEsNDYgKzM4MSwyMSBAQAogCV9fQVRUUl9OVUxMLAogfTsKIAotc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhIHsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCWludCByY29kZTsKLQl1MzIgZGF0YTsKLX07Ci0KLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhICpjYWxsYmFja19kYXRhID0gZGF0YTsKLQotCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKLQkJY2FsbGJhY2tfZGF0YS0+ZGF0YSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopcGF5bG9hZCk7Ci0JY2FsbGJhY2tfZGF0YS0+cmNvZGUgPSByY29kZTsKLQljb21wbGV0ZSgmY2FsbGJhY2tfZGF0YS0+ZG9uZSk7Ci19Ci0KIHN0YXRpYyBpbnQKIHJlYWRfcm9tKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgaW50IGdlbmVyYXRpb24sIGludCBpbmRleCwgdTMyICpkYXRhKQogewotCXN0cnVjdCByZWFkX3F1YWRsZXRfY2FsbGJhY2tfZGF0YSBjYWxsYmFja19kYXRhOwotCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OwotCXU2NCBvZmZzZXQ7CisJaW50IHJjb2RlOwogCiAJLyogZGV2aWNlLT5ub2RlX2lkLCBhY2Nlc3NlZCBiZWxvdywgbXVzdCBub3QgYmUgb2xkZXIgdGhhbiBnZW5lcmF0aW9uICovCiAJc21wX3JtYigpOwogCi0JaW5pdF9jb21wbGV0aW9uKCZjYWxsYmFja19kYXRhLmRvbmUpOwotCi0Jb2Zmc2V0ID0gKENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00pICsgaW5kZXggKiA0OwotCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCwKKwlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAogCQkJZGV2aWNlLT5ub2RlX2lkLCBnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKLQkJCW9mZnNldCwgTlVMTCwgNCwgY29tcGxldGVfdHJhbnNhY3Rpb24sICZjYWxsYmFja19kYXRhKTsKKwkJCShDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9DT05GSUdfUk9NKSArIGluZGV4ICogNCwKKwkJCWRhdGEsIDQpOworCWJlMzJfdG9fY3B1cyhkYXRhKTsKIAotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNhbGxiYWNrX2RhdGEuZG9uZSk7Ci0KLQkqZGF0YSA9IGNhbGxiYWNrX2RhdGEuZGF0YTsKLQotCXJldHVybiBjYWxsYmFja19kYXRhLnJjb2RlOworCXJldHVybiByY29kZTsKIH0KIAogI2RlZmluZSBSRUFEX0JJQl9ST01fU0laRQkyNTYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMKaW5kZXggYWFmZjUwZS4uZWYwYjliNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMTgxLDEwICsxODIsMTYgQEAKICNkZWZpbmUgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQJNDAwMDBVCS8qIFRpbWVvdXQgaW4gbXMgKi8KICNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9OVUxMCQkJMHg4MDAwMDAwMAotI2RlZmluZSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSAkweGYwMDAKICNkZWZpbmUgU0JQMl9SRVRSWV9MSU1JVAkJMHhmCQkvKiAxNSByZXRyaWVzICovCiAjZGVmaW5lIFNCUDJfQ1lDTEVfTElNSVQJCSgweGM4IDw8IDEyKQkvKiAyMDAgMTI1dXMgY3ljbGVzICovCiAKKy8qCisgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIHMvZyBzZWdtZW50IHNpemUgb2YgYSBGaXJlV2lyZSBjb250cm9sbGVyIGlzCisgKiB1c3VhbGx5IDB4MTAwMDAsIGJ1dCBTQlAtMiBvbmx5IGFsbG93cyAweGZmZmYuIFNpbmNlIGJ1ZmZlcnMgaGF2ZSB0bworICogYmUgcXVhZGxldC1hbGlnbmVkLCB3ZSBzZXQgdGhlIGxlbmd0aCBsaW1pdCB0byAweGZmZmYgJiB+My4KKyAqLworI2RlZmluZSBTQlAyX01BWF9TRUdfU0laRQkJMHhmZmZjCisKIC8qIFVuaXQgZGlyZWN0b3J5IGtleXMgKi8KICNkZWZpbmUgU0JQMl9DU1JfVU5JVF9DSEFSQUNURVJJU1RJQ1MJMHgzYQogI2RlZmluZSBTQlAyX0NTUl9GSVJNV0FSRV9SRVZJU0lPTgkweDNjCkBAIC02MjEsMjUgKzYyOCwxNSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkJICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZG9uZSkKLXsKLQljb21wbGV0ZShkb25lKTsKLX0KLQogc3RhdGljIHZvaWQgc2JwMl9hZ2VudF9yZXNldChzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKLQlzdGF0aWMgdTMyIHo7CisJX19iZTMyIGQgPSAwOwogCi0JZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJnQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKLQkJCWx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKLQkJCWx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX0FHRU5UX1JFU0VULAotCQkJJnosIHNpemVvZih6KSwgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGUsICZkb25lKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKwlmd19ydW5fdHJhbnNhY3Rpb24oZGV2aWNlLT5jYXJkLCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQkgICBsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkgICBsdS0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9BR0VOVF9SRVNFVCwKKwkJCSAgICZkLCBzaXplb2YoZCkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjUzLDcgKzY1MCw3IEBACiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdDsKLQlzdGF0aWMgdTMyIHo7CisJc3RhdGljIF9fYmUzMiBkOwogCiAJdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHQgPT0gTlVMTCkKQEAgLTY2Miw3ICs2NTksNyBAQAogCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsIHQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKIAkJCWx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKIAkJCWx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX0FHRU5UX1JFU0VULAotCQkJJnosIHNpemVvZih6KSwgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGVfbm9fd2FpdCwgdCk7CisJCQkmZCwgc2l6ZW9mKGQpLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0LCB0KTsKIH0KIAogc3RhdGljIHZvaWQgc2JwMl9zZXRfZ2VuZXJhdGlvbihzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LCBpbnQgZ2VuZXJhdGlvbikKQEAgLTgyMywxMyArODIwLDYgQEAKIAlrcmVmX3B1dCgmdGd0LT5rcmVmLCBzYnAyX3JlbGVhc2VfdGFyZ2V0KTsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3NldF9idXN5X3RpbWVvdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCSAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZG9uZSkKLXsKLQljb21wbGV0ZShkb25lKTsKLX0KLQogLyoKICAqIFdyaXRlIHJldHJhbnNtaXQgcmV0cnkgdmFsdWVzIGludG8gdGhlIEJVU1lfVElNRU9VVCByZWdpc3Rlci4KICAqIC0gVGhlIHNpbmdsZS1waGFzZSByZXRyeSBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgYWxsIFNCUC0yIGRldmljZXMsIGJ1dCB0aGUKQEAgLTg0OSwxNyArODM5LDEyIEBACiBzdGF0aWMgdm9pZCBzYnAyX3NldF9idXN5X3RpbWVvdXQoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7Ci0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7Ci0Jc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7Ci0Jc3RhdGljIF9fYmUzMiBidXN5X3RpbWVvdXQ7CisJX19iZTMyIGQgPSBjcHVfdG9fYmUzMihTQlAyX0NZQ0xFX0xJTUlUIHwgU0JQMl9SRVRSWV9MSU1JVCk7CiAKLQlidXN5X3RpbWVvdXQgPSBjcHVfdG9fYmUzMihTQlAyX0NZQ0xFX0xJTUlUIHwgU0JQMl9SRVRSWV9MSU1JVCk7Ci0KLQlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAotCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTWV9USU1FT1VULCAmYnVzeV90aW1lb3V0LAotCQkJc2l6ZW9mKGJ1c3lfdGltZW91dCksIGNvbXBsZXRlX3NldF9idXN5X3RpbWVvdXQsICZkb25lKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKwlmd19ydW5fdHJhbnNhY3Rpb24oZGV2aWNlLT5jYXJkLCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQkgICBsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkgICBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsCisJCQkgICAmZCwgc2l6ZW9mKGQpKTsKIH0KIAogc3RhdGljIHZvaWQgc2JwMl9yZWNvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTExMjEsNiArMTEwNiwxMCBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCXUzMiBtb2RlbCwgZmlybXdhcmVfcmV2aXNpb247CiAKKwlpZiAoZG1hX2dldF9tYXhfc2VnX3NpemUoZGV2aWNlLT5jYXJkLT5kZXZpY2UpID4gU0JQMl9NQVhfU0VHX1NJWkUpCisJCUJVR19PTihkbWFfc2V0X21heF9zZWdfc2l6ZShkZXZpY2UtPmNhcmQtPmRldmljZSwKKwkJCQkJICAgIFNCUDJfTUFYX1NFR19TSVpFKSk7CisKIAlzaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmc2NzaV9kcml2ZXJfdGVtcGxhdGUsIHNpemVvZigqdGd0KSk7CiAJaWYgKHNob3N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM2OSwxNCArMTM1OCwxMiBAQAogc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwgc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAogCQkgICAgIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlpbnQgc2dfbGVuLCBsLCBpLCBqLCBjb3VudDsKLQlkbWFfYWRkcl90IHNnX2FkZHI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjc2lfc2dsaXN0KG9yYi0+Y21kKTsKKwlpbnQgaSwgbjsKIAotCXNnID0gc2NzaV9zZ2xpc3Qob3JiLT5jbWQpOwotCWNvdW50ID0gZG1hX21hcF9zZyhkZXZpY2UtPmNhcmQtPmRldmljZSwgc2csIHNjc2lfc2dfY291bnQob3JiLT5jbWQpLAotCQkJICAgb3JiLT5jbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQlpZiAoY291bnQgPT0gMCkKKwluID0gZG1hX21hcF9zZyhkZXZpY2UtPmNhcmQtPmRldmljZSwgc2csIHNjc2lfc2dfY291bnQob3JiLT5jbWQpLAorCQkgICAgICAgb3JiLT5jbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwlpZiAobiA9PSAwKQogCQlnb3RvIGZhaWw7CiAKIAkvKgpAQCAtMTM4Niw3ICsxMzczLDcgQEAKIAkgKiBhcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gaVBvZCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgcGFnZQogCSAqIHRhYmxlcy4KIAkgKi8KLQlpZiAoY291bnQgPT0gMSAmJiBzZ19kbWFfbGVuKHNnKSA8IFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RIKSB7CisJaWYgKG4gPT0gMSkgewogCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmhpZ2ggPQogCQkJY3B1X3RvX2JlMzIobHUtPnRndC0+YWRkcmVzc19oaWdoKTsKIAkJb3JiLT5yZXF1ZXN0LmRhdGFfZGVzY3JpcHRvci5sb3cgID0KQEAgLTEzOTYsMjkgKzEzODMsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIENvbnZlcnQgdGhlIHNjYXR0ZXJsaXN0IHRvIGFuIHNicDIgcGFnZSB0YWJsZS4gIElmIGFueQotCSAqIHNjYXR0ZXJsaXN0IGVudHJpZXMgYXJlIHRvbyBiaWcgZm9yIHNicDIsIHdlIHNwbGl0IHRoZW0gYXMgd2UKLQkgKiBnby4gIEV2ZW4gaWYgd2UgYXNrIHRoZSBibG9jayBJL08gbGF5ZXIgdG8gbm90IGdpdmUgdXMgc2cKLQkgKiBlbGVtZW50cyBsYXJnZXIgdGhhbiA2NTUzNSBieXRlcywgc29tZSBJT01NVXMgbWF5IG1lcmdlIHNnIGVsZW1lbnRzCi0JICogZHVyaW5nIERNQSBtYXBwaW5nLCBhbmQgTGludXggY3VycmVudGx5IGRvZXNuJ3QgcHJldmVudCB0aGlzLgotCSAqLwotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgY291bnQ7IGkrKywgc2cgPSBzZ19uZXh0KHNnKSkgewotCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQkJc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJd2hpbGUgKHNnX2xlbikgewotCQkJLyogRklYTUU6IFRoaXMgd29uJ3QgZ2V0IHVzIG91dCBvZiB0aGUgcGluY2guICovCi0JCQlpZiAodW5saWtlbHkoaiA+PSBBUlJBWV9TSVpFKG9yYi0+cGFnZV90YWJsZSkpKSB7Ci0JCQkJZndfZXJyb3IoInBhZ2UgdGFibGUgb3ZlcmZsb3dcbiIpOwotCQkJCWdvdG8gZmFpbF9wYWdlX3RhYmxlOwotCQkJfQotCQkJbCA9IG1pbihzZ19sZW4sIFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RIKTsKLQkJCW9yYi0+cGFnZV90YWJsZVtqXS5sb3cgPSBjcHVfdG9fYmUzMihzZ19hZGRyKTsKLQkJCW9yYi0+cGFnZV90YWJsZVtqXS5oaWdoID0gY3B1X3RvX2JlMzIobCA8PCAxNik7Ci0JCQlzZ19hZGRyICs9IGw7Ci0JCQlzZ19sZW4gLT0gbDsKLQkJCWorKzsKLQkJfQorCWZvcl9lYWNoX3NnKHNnLCBzZywgbiwgaSkgeworCQlvcmItPnBhZ2VfdGFibGVbaV0uaGlnaCA9IGNwdV90b19iZTMyKHNnX2RtYV9sZW4oc2cpIDw8IDE2KTsKKwkJb3JiLT5wYWdlX3RhYmxlW2ldLmxvdyA9IGNwdV90b19iZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJfQogCiAJb3JiLT5wYWdlX3RhYmxlX2J1cyA9CkBAIC0xNDM3LDEzICsxNDA0LDEzIEBACiAJb3JiLT5yZXF1ZXN0LmRhdGFfZGVzY3JpcHRvci5oaWdoID0gY3B1X3RvX2JlMzIobHUtPnRndC0+YWRkcmVzc19oaWdoKTsKIAlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPSBjcHVfdG9fYmUzMihvcmItPnBhZ2VfdGFibGVfYnVzKTsKIAlvcmItPnJlcXVlc3QubWlzYyB8PSBjcHVfdG9fYmUzMihDT01NQU5EX09SQl9QQUdFX1RBQkxFX1BSRVNFTlQgfAotCQkJCQkgQ09NTUFORF9PUkJfREFUQV9TSVpFKGopKTsKKwkJCQkJIENPTU1BTkRfT1JCX0RBVEFfU0laRShuKSk7CiAKIAlyZXR1cm4gMDsKIAogIGZhaWxfcGFnZV90YWJsZToKLQlkbWFfdW5tYXBfc2coZGV2aWNlLT5jYXJkLT5kZXZpY2UsIHNnLCBzY3NpX3NnX2NvdW50KG9yYi0+Y21kKSwKLQkJICAgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWRtYV91bm1hcF9zZyhkZXZpY2UtPmNhcmQtPmRldmljZSwgc2NzaV9zZ2xpc3Qob3JiLT5jbWQpLAorCQkgICAgIHNjc2lfc2dfY291bnQob3JiLT5jbWQpLCBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogIGZhaWw6CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xNDU2LDcgKzE0MjMsNyBAQAogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiOwogCXVuc2lnbmVkIGludCBtYXhfcGF5bG9hZDsKLQlpbnQgcmV0dmFsID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwlpbnQgZ2VuZXJhdGlvbiwgcmV0dmFsID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAogCS8qCiAJICogQmlkaXJlY3Rpb25hbCBjb21tYW5kcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCwgYW5kIHVua25vd24KQEAgLTE1MDAsNiArMTQ2Nyw5IEBACiAJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQogCQlvcmItPnJlcXVlc3QubWlzYyB8PSBjcHVfdG9fYmUzMihDT01NQU5EX09SQl9ESVJFQ1RJT04pOwogCisJZ2VuZXJhdGlvbiA9IGRldmljZS0+Z2VuZXJhdGlvbjsKKwlzbXBfcm1iKCk7ICAgIC8qIHNicDJfbWFwX3NjYXR0ZXJsaXN0IGxvb2tzIGF0IHRndC0+YWRkcmVzc19oaWdoICovCisKIAlpZiAoc2NzaV9zZ19jb3VudChjbWQpICYmIHNicDJfbWFwX3NjYXR0ZXJsaXN0KG9yYiwgZGV2aWNlLCBsdSkgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMTUxMiw3ICsxNDgyLDcgQEAKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYi0+YmFzZS5yZXF1ZXN0X2J1cykpCiAJCWdvdG8gb3V0OwogCi0Jc2JwMl9zZW5kX29yYigmb3JiLT5iYXNlLCBsdSwgbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sCisJc2JwMl9zZW5kX29yYigmb3JiLT5iYXNlLCBsdSwgbHUtPnRndC0+bm9kZV9pZCwgZ2VuZXJhdGlvbiwKIAkJICAgICAgbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfT1JCX1BPSU5URVIpOwogCXJldHZhbCA9IDA7CiAgb3V0OgpAQCAtMTU2NCw2ICsxNTM0LDggQEAKIAlpZiAobHUtPnRndC0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMpCiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxMjggKiAxMDI0IC8gNTEyKTsKIAorCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXYtPnJlcXVlc3RfcXVldWUsIFNCUDJfTUFYX1NFR19TSVpFKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKaW5kZXggZTVkMWEwYi4uMDIyYWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgKi8KIHZvaWQKIGZ3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LAotCQlpbnQgdGNvZGUsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQlpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKIAkJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKIAkJdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwKIAkJZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSkKQEAgLTI3OSwxMyArMjc5LDE0IEBACiAJY2FyZC0+Y3VycmVudF90bGFiZWwgPSAoY2FyZC0+Y3VycmVudF90bGFiZWwgKyAxKSAmIDB4MWY7CiAJY2FyZC0+dGxhYmVsX21hc2sgfD0gKDEgPDwgdGxhYmVsKTsKIAotCXQtPm5vZGVfaWQgPSBub2RlX2lkOworCXQtPm5vZGVfaWQgPSBkZXN0aW5hdGlvbl9pZDsKIAl0LT50bGFiZWwgPSB0bGFiZWw7CiAJdC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKIAl0LT5jYWxsYmFja19kYXRhID0gY2FsbGJhY2tfZGF0YTsKIAotCWZ3X2ZpbGxfcmVxdWVzdCgmdC0+cGFja2V0LCB0Y29kZSwgdC0+dGxhYmVsLCBub2RlX2lkLCBjYXJkLT5ub2RlX2lkLAotCQkJZ2VuZXJhdGlvbiwgc3BlZWQsIG9mZnNldCwgcGF5bG9hZCwgbGVuZ3RoKTsKKwlmd19maWxsX3JlcXVlc3QoJnQtPnBhY2tldCwgdGNvZGUsIHQtPnRsYWJlbCwKKwkJCWRlc3RpbmF0aW9uX2lkLCBjYXJkLT5ub2RlX2lkLCBnZW5lcmF0aW9uLAorCQkJc3BlZWQsIG9mZnNldCwgcGF5bG9hZCwgbGVuZ3RoKTsKIAl0LT5wYWNrZXQuY2FsbGJhY2sgPSB0cmFuc21pdF9jb21wbGV0ZV9jYWxsYmFjazsKIAogCWxpc3RfYWRkX3RhaWwoJnQtPmxpbmssICZjYXJkLT50cmFuc2FjdGlvbl9saXN0KTsKQEAgLTI5Niw2ICsyOTcsNDUgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfc2VuZF9yZXF1ZXN0KTsKIAorc3RydWN0IHRyYW5zYWN0aW9uX2NhbGxiYWNrX2RhdGEgeworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJdm9pZCAqcGF5bG9hZDsKKwlpbnQgcmNvZGU7Cit9OworCitzdGF0aWMgdm9pZCB0cmFuc2FjdGlvbl9jYWxsYmFjayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB0cmFuc2FjdGlvbl9jYWxsYmFja19kYXRhICpkID0gZGF0YTsKKworCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKKwkJbWVtY3B5KGQtPnBheWxvYWQsIHBheWxvYWQsIGxlbmd0aCk7CisJZC0+cmNvZGUgPSByY29kZTsKKwljb21wbGV0ZSgmZC0+ZG9uZSk7Cit9CisKKy8qKgorICogZndfcnVuX3RyYW5zYWN0aW9uIC0gc2VuZCByZXF1ZXN0IGFuZCBzbGVlcCB1bnRpbCB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQKKyAqCisgKiBSZXR1cm5zIHRoZSBSQ09ERS4KKyAqLworaW50IGZ3X3J1bl90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsCisJCWludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCXZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHRyYW5zYWN0aW9uX2NhbGxiYWNrX2RhdGEgZDsKKwlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKKworCWluaXRfY29tcGxldGlvbigmZC5kb25lKTsKKwlkLnBheWxvYWQgPSBkYXRhOworCWZ3X3NlbmRfcmVxdWVzdChjYXJkLCAmdCwgdGNvZGUsIGRlc3RpbmF0aW9uX2lkLCBnZW5lcmF0aW9uLCBzcGVlZCwKKwkJCW9mZnNldCwgZGF0YSwgbGVuZ3RoLCB0cmFuc2FjdGlvbl9jYWxsYmFjaywgJmQpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmQuZG9uZSk7CisKKwlyZXR1cm4gZC5yY29kZTsKK30KK0VYUE9SVF9TWU1CT0woZndfcnVuX3RyYW5zYWN0aW9uKTsKKwogc3RhdGljIERFRklORV9NVVRFWChwaHlfY29uZmlnX211dGV4KTsKIHN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04ocGh5X2NvbmZpZ19kb25lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCmluZGV4IDJhZTFiMGQuLjAyN2Y1OGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCkBAIC00MjYsMTEgKzQyNiwxNCBAQAogCiB2b2lkCiBmd19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwKLQkJaW50IHRjb2RlLCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKLQkJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKKwkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCiAJCWZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogCitpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKKwkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCSAgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKwogaW50IGZ3X2NhbmNlbF90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJCSAgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCA0NTU1NzViLi4zZTUyNmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCkBAIC0xNSw2ICsxNSwxMSBAQAogICovCiBzdGF0aWMgY2hhciBkbWlfZW1wdHlfc3RyaW5nW10gPSAiICAgICAgICAiOwogCisvKgorICogQ2F0Y2ggdG9vIGVhcmx5IGNhbGxzIHRvIGRtaV9jaGVja19zeXN0ZW0oKToKKyAqLworc3RhdGljIGludCBkbWlfaW5pdGlhbGl6ZWQ7CisKIHN0YXRpYyBjb25zdCBjaGFyICogX19pbml0IGRtaV9zdHJpbmdfbm9zYXZlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSwgdTggcykKIHsKIAljb25zdCB1OCAqYnAgPSAoKHU4ICopIGRtKSArIGRtLT5sZW5ndGg7CkBAIC0zNjYsNyArMzcxLDcgQEAKIAogCWlmIChlZmlfZW5hYmxlZCkgewogCQlpZiAoZWZpLnNtYmlvcyA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIGVycm9yOwogCiAJCS8qIFRoaXMgaXMgY2FsbGVkIGFzIGEgY29yZV9pbml0Y2FsbCgpIGJlY2F1c2UgaXQgaXNuJ3QKIAkJICogbmVlZGVkIGR1cmluZyBlYXJseSBib290LiAgVGhpcyBhbHNvIG1lYW5zIHdlIGNhbgpAQCAtMzc0LDEzICszNzksMTMgQEAKIAkJICovCiAJCXAgPSBkbWlfaW9yZW1hcChlZmkuc21iaW9zLCAzMik7CiAJCWlmIChwID09IE5VTEwpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyb3I7CiAKIAkJcmMgPSBkbWlfcHJlc2VudChwICsgMHgxMCk7IC8qIG9mZnNldCBvZiBfRE1JXyBzdHJpbmcgKi8KIAkJZG1pX2lvdW5tYXAocCwgMzIpOwogCQlpZiAoIXJjKSB7CiAJCQlkbWlfYXZhaWxhYmxlID0gMTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCWVsc2UgewpAQCAtMzkxLDE5ICszOTYsMjIgQEAKIAkJICovCiAJCXAgPSBkbWlfaW9yZW1hcCgweEYwMDAwLCAweDEwMDAwKTsKIAkJaWYgKHAgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBlcnJvcjsKIAogCQlmb3IgKHEgPSBwOyBxIDwgcCArIDB4MTAwMDA7IHEgKz0gMTYpIHsKIAkJCXJjID0gZG1pX3ByZXNlbnQocSk7CiAJCQlpZiAoIXJjKSB7CiAJCQkJZG1pX2F2YWlsYWJsZSA9IDE7CiAJCQkJZG1pX2lvdW5tYXAocCwgMHgxMDAwMCk7Ci0JCQkJcmV0dXJuOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAJCWRtaV9pb3VubWFwKHAsIDB4MTAwMDApOwogCX0KLSBvdXQ6CXByaW50ayhLRVJOX0lORk8gIkRNSSBub3QgcHJlc2VudCBvciBpbnZhbGlkLlxuIik7CisgZXJyb3I6CisJcHJpbnRrKEtFUk5fSU5GTyAiRE1JIG5vdCBwcmVzZW50IG9yIGludmFsaWQuXG4iKTsKKyBvdXQ6CisJZG1pX2luaXRpYWxpemVkID0gMTsKIH0KIAogLyoqCkBAIC00MjQsNiArNDMyLDggQEAKIAlpbnQgaSwgY291bnQgPSAwOwogCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkID0gbGlzdDsKIAorCVdBUk4oIWRtaV9pbml0aWFsaXplZCwgS0VSTl9FUlIgImRtaSBjaGVjazogbm90IGluaXRpYWxpemVkIHlldC5cbiIpOworCiAJd2hpbGUgKGQtPmlkZW50KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGQtPm1hdGNoZXMpOyBpKyspIHsKIAkJCWludCBzID0gZC0+bWF0Y2hlc1tpXS5zbG90OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCBiOTFlZjYzLi40MzUzNDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtMzM0LDkgKzMzNCw5IEBACiAvKgogICogIFJvdXRpbmVzIGZvciBwYXJzaW5nIHRoZSBpQkZUIGRhdGEgdG8gYmUgaHVtYW4gcmVhZGFibGUuCiAgKi8KLXNzaXplX3QgaWJmdF9hdHRyX3Nob3dfaW5pdGlhdG9yKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAotCQkJCSAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJCSAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfaW5pdGlhdG9yKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAorCQkJCQlzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWJmdF9pbml0aWF0b3IgKmluaXRpYXRvciA9IGVudHJ5LT5pbml0aWF0b3I7CiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwpAQCAtMzc2LDkgKzM3Niw5IEBACiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIAotc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19uaWMoc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCi0JCQkgICAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGliZnRfYXR0cl9zaG93X25pYyhzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKKwkJCQkgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWJmdF9uaWMgKm5pYyA9IGVudHJ5LT5uaWM7CiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwpAQCAtNDQwLDkgKzQ0MCw5IEBACiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH07CiAKLXNzaXplX3QgaWJmdF9hdHRyX3Nob3dfdGFyZ2V0KHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAotCQkJICAgICAgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBpYmZ0X2F0dHJfc2hvd190YXJnZXQoc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCisJCQkJICAgICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGliZnRfdGd0ICp0Z3QgPSBlbnRyeS0+dGd0OwogCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKQEAgLTczMiw3ICs3MzIsNiBAQAogCiAJYXR0ci0+YXR0ci5uYW1lID0gbmFtZTsKIAlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOwotCWF0dHItPmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAogCWF0dHItPmhkciA9IGhkcjsKIAlhdHRyLT5zaG93ID0gc2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDhkMjk0MDUuLjIyZWRjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjcsMTcgKzY3LDI4IEBACiAgKiB3aGVuIHNldHRpbmcgZGlyZWN0aW9uLCBhbmQgb3RoZXJ3aXNlIGlsbGVnYWwuICBVbnRpbCBib2FyZCBzZXR1cCBjb2RlCiAgKiBhbmQgZHJpdmVycyB1c2UgZXhwbGljaXQgcmVxdWVzdHMgZXZlcnl3aGVyZSAod2hpY2ggd29uJ3QgaGFwcGVuIHdoZW4KICAqIHRob3NlIGNhbGxzIGhhdmUgbm8gdGVldGgpIHdlIGNhbid0IGF2b2lkIGF1dG9yZXF1ZXN0aW5nLiAgVGhpcyBuYWcKLSAqIG1lc3NhZ2Ugc2hvdWxkIG1vdGl2YXRlIHN3aXRjaGluZyB0byBleHBsaWNpdCByZXF1ZXN0cy4uLgorICogbWVzc2FnZSBzaG91bGQgbW90aXZhdGUgc3dpdGNoaW5nIHRvIGV4cGxpY2l0IHJlcXVlc3RzLi4uIHNvIHNob3VsZAorICogdGhlIHdlYWtlciBjbGVhbnVwIGFmdGVyIGZhdWx0cywgY29tcGFyZWQgdG8gZ3Bpb19yZXF1ZXN0KCkuCiAgKi8KLXN0YXRpYyB2b2lkIGdwaW9fZW5zdXJlX3JlcXVlc3RlZChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjKQorc3RhdGljIGludCBncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoc3RydWN0IGdwaW9fZGVzYyAqZGVzYywgdW5zaWduZWQgb2Zmc2V0KQogewogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpID09IDApIHsKLQkJcHJfd2FybmluZygiR1BJTy0lZCBhdXRvcmVxdWVzdGVkXG4iLCAoaW50KShkZXNjIC0gZ3Bpb19kZXNjKSk7CisJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBkZXNjLT5jaGlwOworCQlpbnQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChjaGlwLT5vd25lcikpIHsKKwkJCXByX2VycigiR1BJTy0lZDogbW9kdWxlIGNhbid0IGJlIGdvdHRlbiBcbiIsIGdwaW8pOworCQkJY2xlYXJfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpOworCQkJLyogbG9zZSAqLworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcHJfd2FybmluZygiR1BJTy0lZCBhdXRvcmVxdWVzdGVkXG4iLCBncGlvKTsKIAkJZGVzY19zZXRfbGFiZWwoZGVzYywgIlthdXRvXSIpOwotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRlc2MtPmNoaXAtPm93bmVyKSkKLQkJCXByX2VycigiR1BJTy0lZDogbW9kdWxlIGNhbid0IGJlIGdvdHRlbiBcbiIsCi0JCQkJCShpbnQpKGRlc2MgLSBncGlvX2Rlc2MpKTsKKwkJLyogY2FsbGVyIG11c3QgY2hpcC0+cmVxdWVzdCgpIHcvbyBzcGlubG9jayAqLworCQlpZiAoY2hpcC0+cmVxdWVzdCkKKwkJCXJldHVybiAxOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogY2FsbGVyIGhvbGRzIGdwaW9fbG9jayAqT1IqIGdwaW8gaXMgbWFya2VkIGFzIHJlcXVlc3RlZCAqLwpAQCAtMjM3LDcgKzI0OCw3IEBACiAJaWYgKCF0ZXN0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKSkKIAkJc3RhdHVzID0gLUVJTzsKIAllbHNlCi0JCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGdwaW8pKTsKKwkJc3RhdHVzID0gc3ByaW50ZihidWYsICIlZFxuIiwgISFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKSk7CiAKIAltdXRleF91bmxvY2soJnN5c2ZzX2xvY2spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTIsNiArNzYzLDcgQEAKIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCiB7CiAJc3RydWN0IGdwaW9fZGVzYwkqZGVzYzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCSpjaGlwOwogCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKQEAgLTc2MCwxNCArNzcyLDE1IEBACiAJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKQogCQlnb3RvIGRvbmU7CiAJZGVzYyA9ICZncGlvX2Rlc2NbZ3Bpb107Ci0JaWYgKGRlc2MtPmNoaXAgPT0gTlVMTCkKKwljaGlwID0gZGVzYy0+Y2hpcDsKKwlpZiAoY2hpcCA9PSBOVUxMKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRlc2MtPmNoaXAtPm93bmVyKSkKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNoaXAtPm93bmVyKSkKIAkJZ290byBkb25lOwogCiAJLyogTk9URTogIGdwaW9fcmVxdWVzdCgpIGNhbiBiZSBjYWxsZWQgaW4gZWFybHkgYm9vdCwKLQkgKiBiZWZvcmUgSVJRcyBhcmUgZW5hYmxlZC4KKwkgKiBiZWZvcmUgSVJRcyBhcmUgZW5hYmxlZCwgZm9yIG5vbi1zbGVlcGluZyAoU09DKSBHUElPcy4KIAkgKi8KIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpID09IDApIHsKQEAgLTc3NSw3ICs3ODgsMjAgQEAKIAkJc3RhdHVzID0gMDsKIAl9IGVsc2UgewogCQlzdGF0dXMgPSAtRUJVU1k7Ci0JCW1vZHVsZV9wdXQoZGVzYy0+Y2hpcC0+b3duZXIpOworCQltb2R1bGVfcHV0KGNoaXAtPm93bmVyKTsKKwl9CisKKwlpZiAoY2hpcC0+cmVxdWVzdCkgeworCQkvKiBjaGlwLT5yZXF1ZXN0IG1heSBzbGVlcCAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gY2hpcC0+cmVxdWVzdChjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGVzY19zZXRfbGFiZWwoZGVzYywgTlVMTCk7CisJCQltb2R1bGVfcHV0KGNoaXAtPm93bmVyKTsKKwkJCWNsZWFyX2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKTsKKwkJfQogCX0KIAogZG9uZToKQEAgLTc5MSw2ICs4MTcsOSBAQAogewogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXN0cnVjdCBncGlvX2Rlc2MJKmRlc2M7CisJc3RydWN0IGdwaW9fY2hpcAkqY2hpcDsKKworCW1pZ2h0X3NsZWVwKCk7CiAKIAlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpIHsKIAkJV0FSTl9PTihleHRyYV9jaGVja3MpOwpAQCAtODAyLDkgKzgzMSwxNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOwotCWlmIChkZXNjLT5jaGlwICYmIHRlc3RfYW5kX2NsZWFyX2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKSkgeworCWNoaXAgPSBkZXNjLT5jaGlwOworCWlmIChjaGlwICYmIHRlc3RfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpKSB7CisJCWlmIChjaGlwLT5mcmVlKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyAmJiBjaGlwLT5jYW5fc2xlZXApOworCQkJY2hpcC0+ZnJlZShjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCX0KIAkJZGVzY19zZXRfbGFiZWwoZGVzYywgTlVMTCk7CiAJCW1vZHVsZV9wdXQoZGVzYy0+Y2hpcC0+b3duZXIpOworCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CiAJfSBlbHNlCiAJCVdBUk5fT04oZXh0cmFfY2hlY2tzKTsKIApAQCAtODY5LDcgKzkwNiw5IEBACiAJZ3BpbyAtPSBjaGlwLT5iYXNlOwogCWlmIChncGlvID49IGNoaXAtPm5ncGlvKQogCQlnb3RvIGZhaWw7Ci0JZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKGRlc2MpOworCXN0YXR1cyA9IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChkZXNjLCBncGlvKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOwogCiAJLyogbm93IHdlIGtub3cgdGhlIGdwaW8gaXMgdmFsaWQgYW5kIGNoaXAgd29uJ3QgdmFuaXNoICovCiAKQEAgLTg3Nyw5ICs5MTYsMjIgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyAmJiBjaGlwLT5jYW5fc2xlZXApOwogCisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSBjaGlwLT5yZXF1ZXN0KGNoaXAsIGdwaW8pOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcHJfZGVidWcoIkdQSU8tJWQ6IGNoaXAgcmVxdWVzdCBmYWlsLCAlZFxuIiwKKwkJCQljaGlwLT5iYXNlICsgZ3Bpbywgc3RhdHVzKTsKKwkJCS8qIGFuZCBpdCdzIG5vdCBhdmFpbGFibGUgdG8gYW55b25lIGVsc2UgLi4uCisJCQkgKiBncGlvX3JlcXVlc3QoKSBpcyB0aGUgZnVsbHkgY2xlYW4gc29sdXRpb24uCisJCQkgKi8KKwkJCWdvdG8gbG9zZTsKKwkJfQorCX0KKwogCXN0YXR1cyA9IGNoaXAtPmRpcmVjdGlvbl9pbnB1dChjaGlwLCBncGlvKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCWNsZWFyX2JpdChGTEFHX0lTX09VVCwgJmRlc2MtPmZsYWdzKTsKK2xvc2U6CiAJcmV0dXJuIHN0YXR1czsKIGZhaWw6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CkBAIC05MDcsNyArOTU5LDkgQEAKIAlncGlvIC09IGNoaXAtPmJhc2U7CiAJaWYgKGdwaW8gPj0gY2hpcC0+bmdwaW8pCiAJCWdvdG8gZmFpbDsKLQlncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoZGVzYyk7CisJc3RhdHVzID0gZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKGRlc2MsIGdwaW8pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAkvKiBub3cgd2Uga25vdyB0aGUgZ3BpbyBpcyB2YWxpZCBhbmQgY2hpcCB3b24ndCB2YW5pc2ggKi8KIApAQCAtOTE1LDkgKzk2OSwyMiBAQAogCiAJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CiAKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IGNoaXAtPnJlcXVlc3QoY2hpcCwgZ3Bpbyk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcl9kZWJ1ZygiR1BJTy0lZDogY2hpcCByZXF1ZXN0IGZhaWwsICVkXG4iLAorCQkJCWNoaXAtPmJhc2UgKyBncGlvLCBzdGF0dXMpOworCQkJLyogYW5kIGl0J3Mgbm90IGF2YWlsYWJsZSB0byBhbnlvbmUgZWxzZSAuLi4KKwkJCSAqIGdwaW9fcmVxdWVzdCgpIGlzIHRoZSBmdWxseSBjbGVhbiBzb2x1dGlvbi4KKwkJCSAqLworCQkJZ290byBsb3NlOworCQl9CisJfQorCiAJc3RhdHVzID0gY2hpcC0+ZGlyZWN0aW9uX291dHB1dChjaGlwLCBncGlvLCB2YWx1ZSk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlzZXRfYml0KEZMQUdfSVNfT1VULCAmZGVzYy0+ZmxhZ3MpOworbG9zZToKIAlyZXR1cm4gc3RhdHVzOwogZmFpbDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKQEAgLTEwMDgsNiArMTA3NSwyNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19ncGlvX2NhbnNsZWVwKTsKIAorLyoqCisgKiBfX2dwaW9fdG9faXJxKCkgLSByZXR1cm4gdGhlIElSUSBjb3JyZXNwb25kaW5nIHRvIGEgR1BJTworICogQGdwaW86IGdwaW8gd2hvc2UgSVJRIHdpbGwgYmUgcmV0dXJuZWQgKGFscmVhZHkgcmVxdWVzdGVkKQorICogQ29udGV4dDogYW55CisgKgorICogVGhpcyBpcyB1c2VkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdG8gaW1wbGVtZW50IGdwaW9fdG9faXJxKCkuCisgKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIElSUSBzaWduYWxlZCBieSB0aGlzIChpbnB1dCkgR1BJTywKKyAqIG9yIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCBfX2dwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IGdwaW9fY2hpcAkqY2hpcDsKKworCWNoaXAgPSBncGlvX3RvX2NoaXAoZ3Bpbyk7CisJcmV0dXJuIGNoaXAtPnRvX2lycSA/IGNoaXAtPnRvX2lycShjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSkgOiAtRU5YSU87Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2dwaW9fdG9faXJxKTsKKwogCiAKIC8qIFRoZXJlJ3Mgbm8gdmFsdWUgaW4gbWFraW5nIGl0IGVhc3kgdG8gaW5saW5lIEdQSU8gY2FsbHMgdGhhdCBtYXkgc2xlZXAuCkBAIC0xMDIwLDcgKzExMDUsNyBAQAogCiAJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzKTsKIAljaGlwID0gZ3Bpb190b19jaGlwKGdwaW8pOwotCXJldHVybiBjaGlwLT5nZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpOworCXJldHVybiBjaGlwLT5nZXQgPyBjaGlwLT5nZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMDEuYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKaW5kZXggMzljNzk1YS4uOGIyNGQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21heDczMDEuYworKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCkBAIC0yNTUsMTAgKzI1NSw2IEBACiAJdHMtPmNoaXAuZGV2ID0gJnNwaS0+ZGV2OwogCXRzLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlyZXQgPSBncGlvY2hpcF9hZGQoJnRzLT5jaGlwKTsKLQlpZiAocmV0KQotCQlnb3RvIGV4aXRfZGVzdHJveTsKLQogCS8qCiAJICogdHJpc3RhdGUgYWxsIHBpbnMgaW4gaGFyZHdhcmUgYW5kIGNhY2hlIHRoZQogCSAqIHJlZ2lzdGVyIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgpAQCAtMjY5LDE3ICsyNjUsMTkgQEAKIAkJbWF4NzMwMV93cml0ZShzcGksIDB4MDggKyBpLCAweEFBKTsKIAkJdHMtPnBvcnRfY29uZmlnW2ldID0gMHhBQTsKIAkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewotCQkJaW50IGlkeCA9IHRzLT5jaGlwLmJhc2UgKyAoaSAtIDEpICogNCArIGo7Ci0JCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChpZHgpOworCQkJaW50IG9mZnNldCA9IChpIC0gMSkgKiA0ICsgajsKKwkJCXJldCA9IG1heDczMDFfZGlyZWN0aW9uX2lucHV0KCZ0cy0+Y2hpcCwgb2Zmc2V0KTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBleGl0X3JlbW92ZTsKLQkJCWdwaW9fZnJlZShpZHgpOworCQkJCWdvdG8gZXhpdF9kZXN0cm95OwogCQl9CiAJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0cy0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisKIAlyZXR1cm4gcmV0OwogCi1leGl0X3JlbW92ZToKLQlncGlvY2hpcF9yZW1vdmUoJnRzLT5jaGlwKTsKIGV4aXRfZGVzdHJveToKIAlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKIAltdXRleF9kZXN0cm95KCZ0cy0+bG9jayk7CkBAIC0zMjUsMTMgKzMyMywxNSBAQAogewogCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYXg3MzAxX2RyaXZlcik7CiB9CisvKiByZWdpc3RlciBhZnRlciBzcGkgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChtYXg3MzAxX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWF4NzMwMV9leGl0KHZvaWQpCiB7CiAJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtYXg3MzAxX2RyaXZlcik7CiB9Ci0KLW1vZHVsZV9pbml0KG1heDczMDFfaW5pdCk7CiBtb2R1bGVfZXhpdChtYXg3MzAxX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJKdWVyZ2VuIEJlaXNlcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMyeC5jCmluZGV4IGI1MWM4MTMuLjU1YWU5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMKKysrIGIvZHJpdmVycy9ncGlvL21heDczMnguYwpAQCAtMzcyLDcgKzM3MiwxMCBAQAogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4NzMyeF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQobWF4NzMyeF9pbml0KTsKKy8qIHJlZ2lzdGVyIGFmdGVyIGkyYyBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKG1heDczMnhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXg3MzJ4X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tY3AyM3MwOC5jIGIvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKaW5kZXggOGExYjQwNS4uODljMWQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKKysrIGIvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKQEAgLTQxOSw3ICs0MTksMTAgQEAKIHsKIAlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbWNwMjNzMDhfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KG1jcDIzczA4X2luaXQpOworLyogcmVnaXN0ZXIgYWZ0ZXIgc3BpIHBvc3Rjb3JlIGluaXRjYWxsIGFuZCBiZWZvcmUKKyAqIHN1YnN5cyBpbml0Y2FsbHMgdGhhdCBtYXkgcmVseSBvbiB0aGVzZSBHUElPcworICovCitzdWJzeXNfaW5pdGNhbGwobWNwMjNzMDhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtY3AyM3MwOF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwppbmRleCBjYzg0Njg2Li45Y2VlYjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKQEAgLTI4OSw3ICsyODksMTAgQEAKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnBjYTk1M3hfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KHBjYTk1M3hfaW5pdCk7CisvKiByZWdpc3RlciBhZnRlciBpMmMgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChwY2E5NTN4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGNhOTUzeF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwppbmRleCBmYzljNmFlLi40YmMyMDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKQEAgLTM1MSw3ICszNTEsMTAgQEAKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnBjZjg1N3hfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KHBjZjg1N3hfaW5pdCk7CisvKiByZWdpc3RlciBhZnRlciBpMmMgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChwY2Y4NTd4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGNmODU3eF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDYxMGQ2ZmQuLjkwOTc1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogIwogbWVudWNvbmZpZyBEUk0KIAl0cmlzdGF0ZSAiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIgRFJJIHN1cHBvcnQpIgotCWRlcGVuZHMgb24gKEFHUCB8fCBBR1A9bikgJiYgUENJICYmICFFTVVMQVRFRF9DTVBYQ0hHCisJZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kgJiYgIUVNVUxBVEVEX0NNUFhDSEcgJiYgU0hNRU0KIAloZWxwCiAJICBLZXJuZWwtbGV2ZWwgc3VwcG9ydCBmb3IgdGhlIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkKIAkgIGludHJvZHVjZWQgaW4gWEZyZWU4NiA0LjAuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgbmVlZCB0byBzZWxlY3QKQEAgLTg3LDYgKzg3LDcgQEAKIGNvbmZpZyBEUk1fU0lTCiAJdHJpc3RhdGUgIlNpUyB2aWRlbyBjYXJkcyIKIAlkZXBlbmRzIG9uIERSTSAmJiBBR1AKKwlkZXBlbmRzIG9uIEZCX1NJUyB8fCBGQl9TSVM9bgogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNpUyA2MzAgb3IgY29tcGF0aWJsZSB2aWRlbwogICAgICAgICAgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaXMuIEFHUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGU5ZjlhOTcuLjc0ZGE5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTQsOCArNCw5IEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKLWRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY29udGV4dC5vIGRybV9kbWEubyBkcm1fZHJhd2FibGUubyBcCi0JCWRybV9kcnYubyBkcm1fZm9wcy5vIGRybV9pb2N0bC5vIGRybV9pcnEubyBcCitkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAorCQlkcm1fY29udGV4dC5vIGRybV9kbWEubyBkcm1fZHJhd2FibGUubyBcCisJCWRybV9kcnYubyBkcm1fZm9wcy5vIGRybV9nZW0ubyBkcm1faW9jdGwubyBkcm1faXJxLm8gXAogCQlkcm1fbG9jay5vIGRybV9tZW1vcnkubyBkcm1fcHJvYy5vIGRybV9zdHViLm8gZHJtX3ZtLm8gXAogCQlkcm1fYWdwc3VwcG9ydC5vIGRybV9zY2F0dGVyLm8gYXRpX3BjaWdhcnQubyBkcm1fcGNpLm8gXAogCQlkcm1fc3lzZnMubyBkcm1faGFzaHRhYi5vIGRybV9zbWFuLm8gZHJtX21tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggYWVmYTVhYy4uM2QzM2I4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vYWdwLmg+CiAKICNpZiBfX09TX0hBU19BR1AKIApAQCAtNDUyLDQgKzQ1Myw1MyBAQAogCXJldHVybiBhZ3BfdW5iaW5kX21lbW9yeShoYW5kbGUpOwogfQogCi0jZW5kaWYJCQkJLyogX19PU19IQVNfQUdQICovCisvKioKKyAqIEJpbmRzIGEgY29sbGVjdGlvbiBvZiBwYWdlcyBpbnRvIEFHUCBtZW1vcnkgYXQgdGhlIGdpdmVuIG9mZnNldCwgcmV0dXJuaW5nCisgKiB0aGUgQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGVtLgorICoKKyAqIE5vIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBwYWdlcyBkdXJpbmcgdGhpcyB0aW1lIC0tIGl0IGlzIHVwIHRvIHRoZQorICogY2FsbGVyIHRvIGhhbmRsZSB0aGF0LgorICovCitEUk1fQUdQX01FTSAqCitkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCSAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCSAgIHUzMiB0eXBlKQoreworCURSTV9BR1BfTUVNICptZW07CisJaW50IHJldCwgaTsKKworCURSTV9ERUJVRygiXG4iKTsKKworCW1lbSA9IGRybV9hZ3BfYWxsb2NhdGVfbWVtb3J5KGRldi0+YWdwLT5icmlkZ2UsIG51bV9wYWdlcywKKwkJCQkgICAgICB0eXBlKTsKKwlpZiAobWVtID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlbGQgcGFnZXNcbiIsCisJCQkgIG51bV9wYWdlcyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJbWVtLT5tZW1vcnlbaV0gPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2VzW2ldKSk7CisJbWVtLT5wYWdlX2NvdW50ID0gbnVtX3BhZ2VzOworCisJbWVtLT5pc19mbHVzaGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fYWdwX2JpbmRfbWVtb3J5KG1lbSwgZ3R0X29mZnNldCAvIFBBR0VfU0laRSk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgQUdQIG1lbW9yeTogJWRcbiIsIHJldCk7CisJCWFncF9mcmVlX21lbW9yeShtZW0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorRVhQT1JUX1NZTUJPTChkcm1fYWdwX2JpbmRfcGFnZXMpOworCit2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWFncF9mbHVzaF9jaGlwc2V0KGRldi0+YWdwLT5icmlkZ2UpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYWdwX2NoaXBzZXRfZmx1c2gpOworCisjZW5kaWYgLyogX19PU19IQVNfQUdQICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5OTRhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYwpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVFguLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorc3RhdGljIHZvaWQKK2RybV9jbGZsdXNoX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdWludDhfdCAqcGFnZV92aXJ0dWFsOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCisJCXJldHVybjsKKworCXBhZ2VfdmlydHVhbCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFOyBpICs9IGJvb3RfY3B1X2RhdGEueDg2X2NsZmx1c2hfc2l6ZSkKKwkJY2xmbHVzaChwYWdlX3ZpcnR1YWwgKyBpKTsKKwlrdW5tYXBfYXRvbWljKHBhZ2VfdmlydHVhbCwgS01fVVNFUjApOworfQorI2VuZGlmCisKK3ZvaWQKK2RybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3sKKworI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwlpZiAoY3B1X2hhc19jbGZsdXNoKSB7CisJCXVuc2lnbmVkIGxvbmcgaTsKKworCQltYigpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpCisJCQlkcm1fY2xmbHVzaF9wYWdlKCpwYWdlcysrKTsKKwkJbWIoKTsKKworCQlyZXR1cm47CisJfQorCisJd2JpbnZkKCk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NsZmx1c2hfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggNDUyYzJkOC4uOTZmNDE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0xMTYsNyArMTE2LDEzIEBACiAKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgZHJtX3dhaXRfdmJsYW5rLCAwKSwKIAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVTRVRfQ1RMLCBkcm1fbW9kZXNldF9jdGwsIDApLAorCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfVVBEQVRFX0RSQVcsIGRybV91cGRhdGVfZHJhd2FibGVfaW5mbywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKworCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9DTE9TRSwgZHJtX2dlbV9jbG9zZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0ZMSU5LLCBkcm1fZ2VtX2ZsaW5rX2lvY3RsLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX09QRU4sIGRybV9nZW1fb3Blbl9pb2N0bCwgRFJNX0FVVEgpLAogfTsKIAogI2RlZmluZSBEUk1fQ09SRV9JT0NUTF9DT1VOVAlBUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggODUxYTUzZi4uMGQ0NjYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCXByaXYtPmZpbHAgPSBmaWxwOwotCXByaXYtPnVpZCA9IGN1cnJlbnQtPmV1aWQ7CisJcHJpdi0+dWlkID0gY3VycmVudF9ldWlkKCk7CiAJcHJpdi0+cGlkID0gdGFza19waWRfbnIoY3VycmVudCk7CiAJcHJpdi0+bWlub3IgPSBpZHJfZmluZCgmZHJtX21pbm9yc19pZHIsIG1pbm9yX2lkKTsKIAlwcml2LT5pb2N0bF9jb3VudCA9IDA7CkBAIC0yNTYsNiArMjU2LDkgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5saGVhZCk7CiAKKwlpZiAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pCisJCWRybV9nZW1fb3BlbihkZXYsIHByaXYpOworCiAJaWYgKGRldi0+ZHJpdmVyLT5vcGVuKSB7CiAJCXJldCA9IGRldi0+ZHJpdmVyLT5vcGVuKGRldiwgcHJpdik7CiAJCWlmIChyZXQgPCAwKQpAQCAtNDAwLDYgKzQwMyw5IEBACiAJCWRldi0+ZHJpdmVyLT5yZWNsYWltX2J1ZmZlcnMoZGV2LCBmaWxlX3ByaXYpOwogCX0KIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2KTsKKwogCWRybV9mYXN5bmMoLTEsIGZpbHAsIDApOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5jdHhsaXN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDFhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCkBAIC0wLDAgKzEsNDIxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgImRybVAuaCIKKworLyoqIEBmaWxlIGRybV9nZW0uYworICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIG9mIHRoZSBiYXNlIGlvY3RscyBhbmQgbGlicmFyeSByb3V0aW5lcyBmb3IKKyAqIHRoZSBncmFwaGljcyBtZW1vcnkgbWFuYWdlciBpbXBsZW1lbnRlZCBieSBlYWNoIGRldmljZSBkcml2ZXIuCisgKgorICogQmVjYXVzZSB2YXJpb3VzIGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGluIHRlcm1zIG9mCisgKiBzeW5jaHJvbml6YXRpb24gYW5kIG1pZ3JhdGlvbiBzdHJhdGVnaWVzLCBpbXBsZW1lbnRpbmcgdGhhdCBpcyBsZWZ0IHVwIHRvCisgKiB0aGUgZHJpdmVyLCBhbmQgYWxsIHRoYXQgdGhlIGdlbmVyYWwgQVBJIHByb3ZpZGVzIHNob3VsZCBiZSBnZW5lcmljIC0tCisgKiBhbGxvY2F0aW5nIG9iamVjdHMsIHJlYWRpbmcvd3JpdGluZyBkYXRhIHdpdGggdGhlIGNwdSwgZnJlZWluZyBvYmplY3RzLgorICogRXZlbiB0aGVyZSwgcGxhdGZvcm0tZGVwZW5kZW50IG9wdGltaXphdGlvbnMgZm9yIHJlYWRpbmcvd3JpdGluZyBkYXRhIHdpdGgKKyAqIHRoZSBDUFUgbWVhbiB3ZSdsbCBsaWtlbHkgaG9vayB0aG9zZSBvdXQgdG8gZHJpdmVyLXNwZWNpZmljIGNhbGxzLiAgSG93ZXZlciwKKyAqIHRoZSBEUkkyIGltcGxlbWVudGF0aW9uIHdhbnRzIHRvIGhhdmUgYXQgbGVhc3QgYWxsb2NhdGUvbW1hcCBiZSBnZW5lcmljLgorICoKKyAqIFRoZSBnb2FsIHdhcyB0byBoYXZlIHN3YXAtYmFja2VkIG9iamVjdCBhbGxvY2F0aW9uIG1hbmFnZWQgdGhyb3VnaAorICogc3RydWN0IGZpbGUuICBIb3dldmVyLCBmaWxlIGRlc2NyaXB0b3JzIGFzIGhhbmRsZXMgdG8gYSBzdHJ1Y3QgZmlsZSBoYXZlCisgKiB0d28gbWFqb3IgZmFpbGluZ3M6CisgKiAtIFByb2Nlc3MgbGltaXRzIHByZXZlbnQgbW9yZSB0aGFuIDEwMjQgb3Igc28gYmVpbmcgdXNlZCBhdCBhIHRpbWUgYnkKKyAqICAgZGVmYXVsdC4KKyAqIC0gSW5hYmlsaXR5IHRvIGFsbG9jYXRlIGhpZ2ggZmRzIHdpbGwgYWdncmF2YXRlIHRoZSBYIFNlcnZlcidzIHNlbGVjdCgpCisgKiAgIGhhbmRsaW5nLCBhbmQgbGlrZWx5IHRoYXQgb2YgbWFueSBHTCBjbGllbnQgYXBwbGljYXRpb25zIGFzIHdlbGwuCisgKgorICogVGhpcyBsZWQgdG8gYSBwbGFuIG9mIHVzaW5nIG91ciBvd24gaW50ZWdlciBJRHMgKGNhbGxlZCBoYW5kbGVzLCBmb2xsb3dpbmcKKyAqIERSTSB0ZXJtaW5vbG9neSkgdG8gbWltaWMgZmRzLCBhbmQgaW1wbGVtZW50IHRoZSBmZCBzeXNjYWxscyB3ZSBuZWVkIGFzCisgKiBpb2N0bHMuICBUaGUgb2JqZWN0cyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgaW5jbHVkZSB0aGUgc3RydWN0IGZpbGUgc28KKyAqIHRoYXQgd2UgY2FuIHRyYW5zaXRpb24gdG8gZmRzIGlmIHRoZSByZXF1aXJlZCBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgc2hvd3MKKyAqIHVwIGF0IGEgbGF0ZXIgZGF0ZSwgYW5kIGFzIG91ciBpbnRlcmZhY2Ugd2l0aCBzaG1mcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24uCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBHRU0gZGV2aWNlIGZpZWxkcworICovCisKK2ludAorZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWRyX2luaXQoJmRldi0+b2JqZWN0X25hbWVfaWRyKTsKKwlhdG9taWNfc2V0KCZkZXYtPm9iamVjdF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5vYmplY3RfbWVtb3J5LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPnBpbl9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5waW5fbWVtb3J5LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmd0dF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ndHRfbWVtb3J5LCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBBbGxvY2F0ZSBhIEdFTSBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBzaXplIHdpdGggc2htZnMgYmFja2luZyBzdG9yZQorICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwlCVUdfT04oKHNpemUgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApOworCisJb2JqID0ga2NhbGxvYygxLCBzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCisJb2JqLT5kZXYgPSBkZXY7CisJb2JqLT5maWxwID0gc2htZW1fZmlsZV9zZXR1cCgiZHJtIG1tIG9iamVjdCIsIHNpemUsIDApOworCWlmIChJU19FUlIob2JqLT5maWxwKSkgeworCQlrZnJlZShvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlrcmVmX2luaXQoJm9iai0+cmVmY291bnQpOworCWtyZWZfaW5pdCgmb2JqLT5oYW5kbGVjb3VudCk7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoZGV2LT5kcml2ZXItPmdlbV9pbml0X29iamVjdCAhPSBOVUxMICYmCisJICAgIGRldi0+ZHJpdmVyLT5nZW1faW5pdF9vYmplY3Qob2JqKSAhPSAwKSB7CisJCWZwdXQob2JqLT5maWxwKTsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWF0b21pY19pbmMoJmRldi0+b2JqZWN0X2NvdW50KTsKKwlhdG9taWNfYWRkKG9iai0+c2l6ZSwgJmRldi0+b2JqZWN0X21lbW9yeSk7CisJcmV0dXJuIG9iajsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfYWxsb2MpOworCisvKioKKyAqIFJlbW92ZXMgdGhlIG1hcHBpbmcgZnJvbSBoYW5kbGUgdG8gZmlscCBmb3IgdGhpcyBvYmplY3QuCisgKi8KK3N0YXRpYyBpbnQKK2RybV9nZW1faGFuZGxlX2RlbGV0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCS8qIFRoaXMgaXMgZ3Jvc3MuIFRoZSBpZHIgc3lzdGVtIGRvZXNuJ3QgbGV0IHVzIHRyeSBhIGRlbGV0ZSBhbmQKKwkgKiByZXR1cm4gYW4gZXJyb3IgY29kZS4gIEl0IGp1c3Qgc3Bld3MgaWYgeW91IGZhaWwgYXQgZGVsZXRpbmcuCisJICogU28sIHdlIGhhdmUgdG8gZ3JhYiBhIGxvY2sgYXJvdW5kIGZpbmRpbmcgdGhlIG9iamVjdCBhbmQgdGhlbgorCSAqIGRvaW5nIHRoZSBkZWxldGUgb24gaXQgYW5kIGRyb3BwaW5nIHRoZSByZWZjb3VudCwgb3IgdGhlIHVzZXIKKwkgKiBjb3VsZCByYWNlIHVzIHRvIGRvdWJsZS1kZWNyZW1lbnQgdGhlIHJlZmNvdW50IGFuZCBjYXVzZSBhCisJICogdXNlLWFmdGVyLWZyZWUgbGF0ZXIuICBHaXZlbiB0aGUgZnJlcXVlbmN5IG9mIG91ciBoYW5kbGUgbG9va3VwcywKKwkgKiB3ZSBtYXkgd2FudCB0byB1c2UgaWRhIGZvciBudW1iZXIgYWxsb2NhdGlvbiBhbmQgYSBoYXNoIHRhYmxlCisJICogZm9yIHRoZSBwb2ludGVycywgYW55d2F5LgorCSAqLworCXNwaW5fbG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwkvKiBDaGVjayBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0ICovCisJb2JqID0gaWRyX2ZpbmQoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldiA9IG9iai0+ZGV2OworCisJLyogUmVsZWFzZSByZWZlcmVuY2UgYW5kIGRlY3JlbWVudCByZWZjb3VudC4gKi8KKwlpZHJfcmVtb3ZlKCZmaWxwLT5vYmplY3RfaWRyLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENyZWF0ZSBhIGhhbmRsZSBmb3IgdGhpcyBvYmplY3QuIFRoaXMgYWRkcyBhIGhhbmRsZSByZWZlcmVuY2UKKyAqIHRvIHRoZSBvYmplY3QsIHdoaWNoIGluY2x1ZGVzIGEgcmVndWxhciByZWZlcmVuY2UgY291bnQuIENhbGxlcnMKKyAqIHdpbGwgbGlrZWx5IHdhbnQgdG8gZGVyZWZlcmVuY2UgdGhlIG9iamVjdCBhZnRlcndhcmRzLgorICovCitpbnQKK2RybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICAgaW50ICpoYW5kbGVwKQoreworCWludAlyZXQ7CisKKwkvKgorCSAqIEdldCB0aGUgdXNlci12aXNpYmxlIGhhbmRsZSB1c2luZyBpZHIuCisJICovCithZ2FpbjoKKwkvKiBlbnN1cmUgdGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIHRvIGFsbG9jYXRlIGEgaGFuZGxlICovCisJaWYgKGlkcl9wcmVfZ2V0KCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsIEdGUF9LRVJORUwpID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZG8gdGhlIGFsbG9jYXRpb24gdW5kZXIgb3VyIHNwaW5sb2NrICovCisJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsIG9iaiwgMSwgaGFuZGxlcCk7CisJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIGFnYWluOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShvYmopOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2hhbmRsZV9jcmVhdGUpOworCisvKiogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG5hbWVkIGJ5IHRoZSBoYW5kbGUuICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKKwkJICAgICAgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCXNwaW5fbG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwkvKiBDaGVjayBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0ICovCisJb2JqID0gaWRyX2ZpbmQoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisKKwlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9sb29rdXApOworCisvKioKKyAqIFJlbGVhc2VzIHRoZSBoYW5kbGUgdG8gYW4gbW0gb2JqZWN0LgorICovCitpbnQKK2RybV9nZW1fY2xvc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX2Nsb3NlICphcmdzID0gZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2RlbGV0ZShmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENyZWF0ZSBhIGdsb2JhbCBuYW1lIGZvciBhbiBvYmplY3QsIHJldHVybmluZyB0aGUgbmFtZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG5hbWUgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZTsgd2hlbiB0aGUgb2JqZWN0CisgKiBpcyBmcmVlZCwgdGhlIG5hbWUgZ29lcyBhd2F5LgorICovCitpbnQKK2RybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX2ZsaW5rICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKK2FnYWluOgorCWlmIChpZHJfcHJlX2dldCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIEdGUF9LRVJORUwpID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlmIChvYmotPm5hbWUpIHsKKwkJYXJncy0+bmFtZSA9IG9iai0+bmFtZTsKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIG9iaiwgMSwKKwkJCQkgJm9iai0+bmFtZSk7CisJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIGFnYWluOworCisJaWYgKHJldCAhPSAwKSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBMZWF2ZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGxvb2t1cCBhcm91bmQgYXMgdGhlCisJICogbmFtZSB0YWJsZSBub3cgaG9sZHMgb25lCisJICovCisJYXJncy0+bmFtZSA9ICh1aW50NjRfdCkgb2JqLT5uYW1lOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogT3BlbiBhbiBvYmplY3QgdXNpbmcgdGhlIGdsb2JhbCBuYW1lLCByZXR1cm5pbmcgYSBoYW5kbGUgYW5kIHRoZSBzaXplLgorICoKKyAqIFRoaXMgaGFuZGxlIChvZiBjb3Vyc2UpIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QsIHNvIHRoZSBvYmplY3QKKyAqIHdpbGwgbm90IGdvIGF3YXkgdW50aWwgdGhlIGhhbmRsZSBpcyBkZWxldGVkLgorICovCitpbnQKK2RybV9nZW1fb3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vcGVuICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCWludCBoYW5kbGU7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCW9iaiA9IGlkcl9maW5kKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgKGludCkgYXJncy0+bmFtZSk7CisJaWYgKG9iaikKKwkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXJncy0+aGFuZGxlID0gaGFuZGxlOworCWFyZ3MtPnNpemUgPSBvYmotPnNpemU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgYXQgZGV2aWNlIG9wZW4gdGltZSwgc2V0cyB1cCB0aGUgc3RydWN0dXJlIGZvciBoYW5kbGluZyByZWZjb3VudGluZworICogb2YgbW0gb2JqZWN0cy4KKyAqLwordm9pZAorZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKQoreworCWlkcl9pbml0KCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIpOworCXNwaW5fbG9ja19pbml0KCZmaWxlX3ByaXZhdGUtPnRhYmxlX2xvY2spOworfQorCisvKioKKyAqIENhbGxlZCBhdCBkZXZpY2UgY2xvc2UgdG8gcmVsZWFzZSB0aGUgZmlsZSdzCisgKiBoYW5kbGUgcmVmZXJlbmNlcyBvbiBvYmplY3RzLgorICovCitzdGF0aWMgaW50Citkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZShpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKKworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIGF0IGNsb3NlIHRpbWUgd2hlbiB0aGUgZmlscCBpcyBnb2luZyBhd2F5LgorICoKKyAqIFJlbGVhc2VzIGFueSByZW1haW5pbmcgcmVmZXJlbmNlcyBvbiBvYmplY3RzIGJ5IHRoaXMgZmlscC4KKyAqLwordm9pZAorZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKQoreworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkciwKKwkJICAgICAmZHJtX2dlbV9vYmplY3RfcmVsZWFzZV9oYW5kbGUsIE5VTEwpOworCisJaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGxvc3QuCisgKgorICogRnJlZXMgdGhlIG9iamVjdAorICovCit2b2lkCitkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKSBrcmVmOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCisJaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QgIT0gTlVMTCkKKwkJZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdChvYmopOworCisJZnB1dChvYmotPmZpbHApOworCWF0b21pY19kZWMoJmRldi0+b2JqZWN0X2NvdW50KTsKKwlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+b2JqZWN0X21lbW9yeSk7CisJa2ZyZWUob2JqKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfZnJlZSk7CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IGhhbmRsZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZAorICoKKyAqIFJlbW92ZXMgYW55IG5hbWUgZm9yIHRoZSBvYmplY3QuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUKKyAqIGNhbGxlZCBiZWZvcmUgZHJtX2dlbV9vYmplY3RfZnJlZSBvciB3ZSdsbCBiZSB0b3VjaGluZworICogZnJlZWQgbWVtb3J5CisgKi8KK3ZvaWQKK2RybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gY29udGFpbmVyX29mKGtyZWYsCisJCQkJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCwKKwkJCQkJCSAgaGFuZGxlY291bnQpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCS8qIFJlbW92ZSBhbnkgbmFtZSBmb3IgdGhpcyBvYmplY3QgKi8KKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKG9iai0+bmFtZSkgeworCQlpZHJfcmVtb3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLT5uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJCS8qCisJCSAqIFRoZSBvYmplY3QgbmFtZSBoZWxkIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LCBkcm9wCisJCSAqIHRoYXQgbm93LgorCQkgKi8KKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCA1M2YwZTVhLi40MDkxYjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkgICAgcC0+ZGV2bnVtICE9IFBDSV9TTE9UKGRldi0+cGRldi0+ZGV2Zm4pIHx8IHAtPmZ1bmNudW0gIT0gUENJX0ZVTkMoZGV2LT5wZGV2LT5kZXZmbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcC0+aXJxID0gZGV2LT5pcnE7CisJcC0+aXJxID0gZGV2LT5wZGV2LT5pcnE7CiAKIAlEUk1fREVCVUcoIiVkOiVkOiVkID0+IElSUSAlZFxuIiwgcC0+YnVzbnVtLCBwLT5kZXZudW0sIHAtPmZ1bmNudW0sCiAJCSAgcC0+aXJxKTsKQEAgLTcxLDI1ICs3MSwxMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdmJsYW5rX2Rpc2FibGVfZm4odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCBpOworCisJaWYgKCFkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9jcnRjczsgaSsrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCWlmIChhdG9taWNfcmVhZCgmZGV2LT52YmxhbmtfcmVmY291bnRbaV0pID09IDAgJiYKKwkJICAgIGRldi0+dmJsYW5rX2VuYWJsZWRbaV0pIHsKKwkJCURSTV9ERUJVRygiZGlzYWJsaW5nIHZibGFuayBvbiBjcnRjICVkXG4iLCBpKTsKKwkJCWRldi0+bGFzdF92YmxhbmtbaV0gPQorCQkJCWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBpKTsKKwkJCWRldi0+ZHJpdmVyLT5kaXNhYmxlX3ZibGFuayhkZXYsIGkpOworCQkJZGV2LT52YmxhbmtfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZHJtX3ZibGFua19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogQmFpbCBpZiB0aGUgZHJpdmVyIGRpZG4ndCBjYWxsIGRybV92YmxhbmtfaW5pdCgpICovCisJaWYgKGRldi0+bnVtX2NydGNzID09IDApCisJCXJldHVybjsKKworCWRlbF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lcik7CisKKwl2YmxhbmtfZGlzYWJsZV9mbigodW5zaWduZWQgbG9uZylkZXYpOworCisJZHJtX2ZyZWUoZGV2LT52YmxfcXVldWUsIHNpemVvZigqZGV2LT52YmxfcXVldWUpICogZGV2LT5udW1fY3J0Y3MsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52Ymxfc2lncywgc2l6ZW9mKCpkZXYtPnZibF9zaWdzKSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+X3ZibGFua19jb3VudCwgc2l6ZW9mKCpkZXYtPl92YmxhbmtfY291bnQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfcmVmY291bnQsIHNpemVvZigqZGV2LT52YmxhbmtfcmVmY291bnQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfZW5hYmxlZCwgc2l6ZW9mKCpkZXYtPnZibGFua19lbmFibGVkKSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+bGFzdF92YmxhbmssIHNpemVvZigqZGV2LT5sYXN0X3ZibGFuaykgKiBkZXYtPm51bV9jcnRjcywKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPnZibGFua19pbm1vZGVzZXQsIHNpemVvZigqZGV2LT52YmxhbmtfaW5tb2Rlc2V0KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCisJZGV2LT5udW1fY3J0Y3MgPSAwOworfQorCitpbnQgZHJtX3ZibGFua19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBudW1fY3J0Y3MpCit7CisJaW50IGksIHJldCA9IC1FTk9NRU07CisKKwlzZXR1cF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgdmJsYW5rX2Rpc2FibGVfZm4sCisJCSAgICAodW5zaWduZWQgbG9uZylkZXYpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKKwlhdG9taWNfc2V0KCZkZXYtPnZibF9zaWduYWxfcGVuZGluZywgMCk7CisJZGV2LT5udW1fY3J0Y3MgPSBudW1fY3J0Y3M7CisKKwlkZXYtPnZibF9xdWV1ZSA9IGRybV9hbGxvYyhzaXplb2Yod2FpdF9xdWV1ZV9oZWFkX3QpICogbnVtX2NydGNzLAorCQkJCSAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsX3F1ZXVlKQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsX3NpZ3MgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpICogbnVtX2NydGNzLAorCQkJCSAgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52Ymxfc2lncykKKwkJZ290byBlcnI7CisKKwlkZXYtPl92YmxhbmtfY291bnQgPSBkcm1fYWxsb2Moc2l6ZW9mKGF0b21pY190KSAqIG51bV9jcnRjcywKKwkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPl92YmxhbmtfY291bnQpCisJCWdvdG8gZXJyOworCisJZGV2LT52YmxhbmtfcmVmY291bnQgPSBkcm1fYWxsb2Moc2l6ZW9mKGF0b21pY190KSAqIG51bV9jcnRjcywKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsYW5rX3JlZmNvdW50KQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX2VuYWJsZWQgPSBkcm1fY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKGludCksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibGFua19lbmFibGVkKQorCQlnb3RvIGVycjsKKworCWRldi0+bGFzdF92YmxhbmsgPSBkcm1fY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKHUzMiksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+bGFzdF92YmxhbmspCisJCWdvdG8gZXJyOworCisJZGV2LT52YmxhbmtfaW5tb2Rlc2V0ID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZihpbnQpLAorCQkJCQkgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxhbmtfaW5tb2Rlc2V0KQorCQlnb3RvIGVycjsKKworCS8qIFplcm8gcGVyLWNydGMgdmJsYW5rIHN0dWZmICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmJsX3F1ZXVlW2ldKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3NbaV0pOworCQlhdG9taWNfc2V0KCZkZXYtPl92YmxhbmtfY291bnRbaV0sIDApOworCQlhdG9taWNfc2V0KCZkZXYtPnZibGFua19yZWZjb3VudFtpXSwgMCk7CisJfQorCisJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMDsKKworCXJldHVybiAwOworCitlcnI6CisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19pbml0KTsKKwogLyoqCiAgKiBJbnN0YWxsIElSUSBoYW5kbGVyLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KLSAqIFxwYXJhbSBpcnEgSVJRIG51bWJlci4KICAqCi0gKiBJbml0aWFsaXplcyB0aGUgSVJRIHJlbGF0ZWQgZGF0YSwgYW5kIHNldHVwcyBkcm1fZGV2aWNlOjp2YmxfcXVldWUuIEluc3RhbGxzIHRoZSBoYW5kbGVyLCBjYWxsaW5nIHRoZSBkcml2ZXIKKyAqIEluaXRpYWxpemVzIHRoZSBJUlEgcmVsYXRlZCBkYXRhLiBJbnN0YWxscyB0aGUgaGFuZGxlciwgY2FsbGluZyB0aGUgZHJpdmVyCiAgKiBcYyBkcm1fZHJpdmVyX2lycV9wcmVpbnN0YWxsKCkgYW5kIFxjIGRybV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCkgZnVuY3Rpb25zCiAgKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBpbnN0YWxsYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGRybV9pcnFfaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBzaF9mbGFncyA9IDA7CiAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkZXYtPmlycSA9PSAwKQorCWlmIChkZXYtPnBkZXYtPmlycSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTEwNywxOCArMjE5LDcgQEAKIAlkZXYtPmlycV9lbmFibGVkID0gMTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPmlycSk7Ci0KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9JUlFfVkJMKSkgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZibF9xdWV1ZSk7Ci0KLQkJc3Bpbl9sb2NrX2luaXQoJmRldi0+dmJsX2xvY2spOwotCi0JCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3MyKTsKLQotCQlkZXYtPnZibF9wZW5kaW5nID0gMDsKLQl9CisJRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+cGRldi0+aXJxKTsKIAogCS8qIEJlZm9yZSBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KIAlkZXYtPmRyaXZlci0+aXJxX3ByZWluc3RhbGwoZGV2KTsKQEAgLTEyNyw4ICsyMjgsOSBAQAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0lSUV9TSEFSRUQpKQogCQlzaF9mbGFncyA9IElSUUZfU0hBUkVEOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRldi0+ZHJpdmVyLT5pcnFfaGFuZGxlciwKKwlyZXQgPSByZXF1ZXN0X2lycShkcm1fZGV2X3RvX2lycShkZXYpLCBkZXYtPmRyaXZlci0+aXJxX2hhbmRsZXIsCiAJCQkgIHNoX2ZsYWdzLCBkZXYtPmRldm5hbWUsIGRldik7CisKIAlpZiAocmV0IDwgMCkgewogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWRldi0+aXJxX2VuYWJsZWQgPSAwOwpAQCAtMTM3LDEwICsyMzksMTYgQEAKIAl9CiAKIAkvKiBBZnRlciBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KLQlkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKGRldik7CisJcmV0ID0gZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZGV2LT5pcnFfZW5hYmxlZCA9IDA7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9pcnFfaW5zdGFsbCk7CiAKIC8qKgogICogVW5pbnN0YWxsIHRoZSBJUlEgaGFuZGxlci4KQEAgLTE2NCwxNyArMjcyLDE4IEBACiAJaWYgKCFpcnFfZW5hYmxlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5pcnEpOworCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPnBkZXYtPmlycSk7CiAKIAlkZXYtPmRyaXZlci0+aXJxX3VuaW5zdGFsbChkZXYpOwogCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEoZGV2LT5wZGV2LT5pcnEsIGRldik7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKIAogCWRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYyA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTChkcm1faXJxX3VuaW5zdGFsbCk7CiAKIC8qKgpAQCAtMjAxLDcgKzMxMCw3IEBACiAJCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+aWZfdmVyc2lvbiA8IERSTV9JRl9WRVJTSU9OKDEsIDIpICYmCi0JCSAgICBjdGwtPmlycSAhPSBkZXYtPmlycSkKKwkJICAgIGN0bC0+aXJxICE9IGRldi0+cGRldi0+aXJxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAljYXNlIERSTV9VTklOU1RfSEFORExFUjoKQEAgLTIxNCw2ICszMjMsMTc0IEBACiB9CiAKIC8qKgorICogZHJtX3ZibGFua19jb3VudCAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVyIHZhbHVlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byByZXRyaWV2ZQorICoKKyAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgorICogdmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBsb3N0IGV2ZW50cyBkdWUgdG8KKyAqIG1vZGVzZXR0aW5nIGFjdGl2aXR5LgorICovCit1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfY291bnQpOworCisvKioKKyAqIGRybV91cGRhdGVfdmJsYW5rX2NvdW50IC0gdXBkYXRlIHRoZSBtYXN0ZXIgdmJsYW5rIGNvdW50ZXIKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiBjb3VudGVyIHRvIHVwZGF0ZQorICoKKyAqIENhbGwgYmFjayBpbnRvIHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSB2YmxhbmsgY291bnRlcgorICogKHNwZWNpZmllZCBieSBAY3J0YykuICBEZWFsIHdpdGggd3JhcGFyb3VuZCwgaWYgaXQgb2NjdXJyZWQsIGFuZAorICogdXBkYXRlIHRoZSBsYXN0IHJlYWQgdmFsdWUgc28gd2UgY2FuIGRlYWwgd2l0aCB3cmFwYXJvdW5kIG9uIHRoZSBuZXh0CisgKiBjYWxsIGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBPbmx5IG5lY2Vzc2FyeSB3aGVuIGdvaW5nIGZyb20gb2ZmLT5vbiwgdG8gYWNjb3VudCBmb3IgZnJhbWVzIHdlCisgKiBkaWRuJ3QgZ2V0IGFuIGludGVycnVwdCBmb3IuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgaG9sZCBkZXYtPnZibF9sb2NrIHNpbmNlIHRoaXMgcmVhZHMgJiB3cml0ZXMKKyAqIGRldmljZSB2YmxhbmsgZmllbGRzLgorICovCitzdGF0aWMgdm9pZCBkcm1fdXBkYXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwl1MzIgY3VyX3ZibGFuaywgZGlmZjsKKworCS8qCisJICogSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIHByaW9yIHRvIHRoaXMgY2FsbCwgc28gZGVhbCB3aXRoIGNvdW50ZXIKKwkgKiB3cmFwIGlmIG5lZWRlZC4KKwkgKiBOT1RFISAgSXQncyBwb3NzaWJsZSB3ZSBsb3N0IGEgZnVsbCBkZXYtPm1heF92YmxhbmtfY291bnQgZXZlbnRzCisJICogaGVyZSBpZiB0aGUgcmVnaXN0ZXIgaXMgc21hbGwgb3Igd2UgaGFkIHZibGFuayBpbnRlcnJ1cHRzIG9mZiBmb3IKKwkgKiBhIGxvbmcgdGltZS4KKwkgKi8KKwljdXJfdmJsYW5rID0gZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGNydGMpOworCWRpZmYgPSBjdXJfdmJsYW5rIC0gZGV2LT5sYXN0X3ZibGFua1tjcnRjXTsKKwlpZiAoY3VyX3ZibGFuayA8IGRldi0+bGFzdF92YmxhbmtbY3J0Y10pIHsKKwkJZGlmZiArPSBkZXYtPm1heF92YmxhbmtfY291bnQ7CisKKwkJRFJNX0RFQlVHKCJsYXN0X3ZibGFua1slZF09MHgleCwgY3VyX3ZibGFuaz0weCV4ID0+IGRpZmY9MHgleFxuIiwKKwkJCSAgY3J0YywgZGV2LT5sYXN0X3ZibGFua1tjcnRjXSwgY3VyX3ZibGFuaywgZGlmZik7CisJfQorCisJRFJNX0RFQlVHKCJlbmFibGluZyB2YmxhbmsgaW50ZXJydXB0cyBvbiBjcnRjICVkLCBtaXNzZWQgJWRcbiIsCisJCSAgY3J0YywgZGlmZik7CisKKwlhdG9taWNfYWRkKGRpZmYsICZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworfQorCisvKioKKyAqIGRybV92YmxhbmtfZ2V0IC0gZ2V0IGEgcmVmZXJlbmNlIGNvdW50IG9uIHZibGFuayBldmVudHMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBDUlRDIHRvIG93bgorICoKKyAqIEFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgb24gdmJsYW5rIGV2ZW50cyB0byBhdm9pZCBoYXZpbmcgdGhlbSBkaXNhYmxlZAorICogd2hpbGUgaW4gdXNlLgorICoKKyAqIFJFVFVSTlMKKyAqIFplcm8gb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJLyogR29pbmcgZnJvbSAwLT4xIG1lYW5zIHdlIGhhdmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWdhaW4gKi8KKwlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSA9PSAxICYmCisJICAgICFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5lbmFibGVfdmJsYW5rKGRldiwgY3J0Yyk7CisJCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIG9uIGNydGMgJWQsIHJldDogJWRcbiIsIGNydGMsIHJldCk7CisJCWlmIChyZXQpCisJCQlhdG9taWNfZGVjKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSk7CisJCWVsc2UgeworCQkJZGV2LT52YmxhbmtfZW5hYmxlZFtjcnRjXSA9IDE7CisJCQlkcm1fdXBkYXRlX3ZibGFua19jb3VudChkZXYsIGNydGMpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfZ2V0KTsKKworLyoqCisgKiBkcm1fdmJsYW5rX3B1dCAtIGdpdmUgdXAgb3duZXJzaGlwIG9mIHZibGFuayBldmVudHMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIGdpdmUgdXAKKyAqCisgKiBSZWxlYXNlIG93bmVyc2hpcCBvZiBhIGdpdmVuIHZibGFuayBjb3VudGVyLCB0dXJuaW5nIG9mZiBpbnRlcnJ1cHRzCisgKiBpZiBwb3NzaWJsZS4KKyAqLwordm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwkvKiBMYXN0IHVzZXIgc2NoZWR1bGVzIGludGVycnVwdCBkaXNhYmxlICovCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSkKKwkJbW9kX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyLCBqaWZmaWVzICsgNSpEUk1fSFopOworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX3B1dCk7CisKKy8qKgorICogZHJtX21vZGVzZXRfY3RsIC0gaGFuZGxlIHZibGFuayBldmVudCBjb3VudGVyIGNoYW5nZXMgYWNyb3NzIG1vZGUgc3dpdGNoCisgKiBARFJNX0lPQ1RMX0FSR1M6IHN0YW5kYXJkIGlvY3RsIGFyZ3VtZW50cworICoKKyAqIEFwcGxpY2F0aW9ucyBzaG91bGQgY2FsbCB0aGUgJV9EUk1fUFJFX01PREVTRVQgYW5kICVfRFJNX1BPU1RfTU9ERVNFVAorICogaW9jdGxzIGFyb3VuZCBtb2Rlc2V0dGluZyBzbyB0aGF0IGFueSBsb3N0IHZibGFuayBldmVudHMgYXJlIGFjY291bnRlZCBmb3IuCisgKgorICogR2VuZXJhbGx5IHRoZSBjb3VudGVyIHdpbGwgcmVzZXQgYWNyb3NzIG1vZGUgc2V0cy4gIElmIGludGVycnVwdHMgYXJlCisgKiBlbmFibGVkIGFyb3VuZCB0aGlzIGNhbGwsIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgc2luY2UgdGhlIGNvdW50ZXIKKyAqIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gaW5jcmVtZW50ZWQuCisgKi8KK2ludCBkcm1fbW9kZXNldF9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZXNldF9jdGwgKm1vZGVzZXQgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IGNydGMsIHJldCA9IDA7CisKKwkvKiBJZiBkcm1fdmJsYW5rX2luaXQoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LCBqdXN0IG5vLW9wICovCisJaWYgKCFkZXYtPm51bV9jcnRjcykKKwkJZ290byBvdXQ7CisKKwljcnRjID0gbW9kZXNldC0+Y3J0YzsKKwlpZiAoY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRvIGF2b2lkIGFsbCB0aGUgcHJvYmxlbXMgdGhhdCBtaWdodCBoYXBwZW4gaWYgaW50ZXJydXB0cworCSAqIHdlcmUgZW5hYmxlZC9kaXNhYmxlZCBhcm91bmQgb3IgYmV0d2VlbiB0aGVzZSBjYWxscywgd2UganVzdAorCSAqIGhhdmUgdGhlIGtlcm5lbCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBDUlRDIChqdXN0IG9uY2UgdGhvdWdoCisJICogdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgY291bnQgaWYgbXVsdGlwbGUsIG1pc21hdGNoIGNhbGxzIG9jY3VyKSwKKwkgKiBzbyB0aGF0IGludGVycnVwdHMgcmVtYWluIGVuYWJsZWQgaW4gdGhlIGludGVyaW0uCisJICovCisJc3dpdGNoIChtb2Rlc2V0LT5jbWQpIHsKKwljYXNlIF9EUk1fUFJFX01PREVTRVQ6CisJCWlmICghZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7CisJCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAxOworCQkJZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwkJfQorCQlicmVhazsKKwljYXNlIF9EUk1fUE9TVF9NT0RFU0VUOgorCQlpZiAoZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQkJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKKwkJCWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogV2FpdCBmb3IgVkJMQU5LLgogICoKICAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCkBAIC0yMzIsMTQgKzUwOSwxNCBAQAogICoKICAqIElmIGEgc2lnbmFsIGlzIG5vdCByZXF1ZXN0ZWQsIHRoZW4gY2FsbHMgdmJsYW5rX3dhaXQoKS4KICAqLwotaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK2ludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXVuaW9uIGRybV93YWl0X3ZibGFuayAqdmJsd2FpdCA9IGRhdGE7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwogCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBmbGFncywgc2VxOworCXVuc2lnbmVkIGludCBmbGFncywgc2VxLCBjcnRjOwogCi0JaWYgKCghZGV2LT5pcnEpIHx8ICghZGV2LT5pcnFfZW5hYmxlZCkpCisJaWYgKCghZGV2LT5wZGV2LT5pcnEpIHx8ICghZGV2LT5pcnFfZW5hYmxlZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmCkBAIC0yNTEsMTMgKzUyOCwxNyBAQAogCX0KIAogCWZsYWdzID0gdmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfRkxBR1NfTUFTSzsKKwljcnRjID0gZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPyAxIDogMDsKIAotCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPwotCQkJCSAgICBEUklWRVJfSVJRX1ZCTDIgOiBEUklWRVJfSVJRX1ZCTCkpCisJaWYgKGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2VxID0gYXRvbWljX3JlYWQoKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/ICZkZXYtPnZibF9yZWNlaXZlZDIKLQkJCSAgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhY3F1aXJlIHZibGFuayBjb3VudGVyLCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCiAJc3dpdGNoICh2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19UWVBFU19NQVNLKSB7CiAJY2FzZSBfRFJNX1ZCTEFOS19SRUxBVElWRToKQEAgLTI2Niw3ICs1NDcsOCBAQAogCWNhc2UgX0RSTV9WQkxBTktfQUJTT0xVVEU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKChmbGFncyAmIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpICYmCkBAIC0yNzYsOCArNTU4LDcgQEAKIAogCWlmIChmbGFncyAmIF9EUk1fVkJMQU5LX1NJR05BTCkgewogCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lncyA9IChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkKLQkJCQkgICAgICA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOworCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lncyA9ICZkZXYtPnZibF9zaWdzW2NydGNdOwogCQlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWc7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKQEAgLTI5OCwyMiArNTc5LDI5IEBACiAJCQl9CiAJCX0KIAotCQlpZiAoZGV2LT52YmxfcGVuZGluZyA+PSAxMDApIHsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZykgPj0gMTAwKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBkb25lOwogCQl9CiAKLQkJZGV2LT52YmxfcGVuZGluZysrOwotCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIAotCQlpZiAoIQotCQkgICAgKHZibF9zaWcgPQotCQkgICAgIGRybV9hbGxvYyhzaXplb2Yoc3RydWN0IGRybV92Ymxfc2lnKSwgRFJNX01FTV9EUklWRVIpKSkgewotCQkJcmV0dXJuIC1FTk9NRU07CisJCXZibF9zaWcgPSBkcm1fY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZHJtX3ZibF9zaWcpLAorCQkJCSAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoIXZibF9zaWcpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQltZW1zZXQoKHZvaWQgKil2Ymxfc2lnLCAwLCBzaXplb2YoKnZibF9zaWcpKTsKKwkJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKHN0cnVjdCBkcm1fdmJsX3NpZyksCisJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlhdG9taWNfaW5jKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZyk7CiAKIAkJdmJsX3NpZy0+c2VxdWVuY2UgPSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlOwogCQl2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vID0gdmJsd2FpdC0+cmVxdWVzdC5zaWduYWw7CkBAIC0zMjcsMjAgKzYxNSwyOSBAQAogCiAJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gc2VxOwogCX0gZWxzZSB7Ci0JCWlmIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgewotCQkJaWYgKGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdDIpCi0JCQkJcmV0ID0gZGV2LT5kcml2ZXItPnZibGFua193YWl0MihkZXYsICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKLQkJfSBlbHNlIGlmIChkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQpCi0JCQlyZXQgPQotCQkJICAgIGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdChkZXYsCi0JCQkJCQkgICAgICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKKwkJRFJNX0RFQlVHKCJ3YWl0aW5nIG9uIHZibGFuayBjb3VudCAlZCwgY3J0YyAlZFxuIiwKKwkJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgY3J0Yyk7CisJCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWVbY3J0Y10sIDMgKiBEUk1fSFosCisJCQkgICAgKChkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykKKwkJCSAgICAgIC0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CiAKLQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCQl2Ymx3YWl0LT5yZXBseS50dmFsX3NlYyA9IG5vdy50dl9zZWM7Ci0JCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQlpZiAocmV0ICE9IC1FSU5UUikgeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCisJCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CisJCQlEUk1fREVCVUcoInJldHVybmluZyAlZCB0byBjbGllbnRcbiIsCisJCQkJICB2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUcoInZibGFuayB3YWl0IGludGVycnVwdGVkIGJ5IHNpZ25hbFxuIik7CisJCX0KIAl9CiAKLSAgICAgIGRvbmU6Citkb25lOgorCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ4LDQ0ICs2NDUsNTcgQEAKICAqIFNlbmQgdGhlIFZCTEFOSyBzaWduYWxzLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KKyAqIFxwYXJhbSBjcnRjIENSVEMgd2hlcmUgdGhlIHZibGFuayBldmVudCBvY2N1cnJlZAogICoKICAqIFNlbmRzIGEgc2lnbmFsIGZvciBlYWNoIHRhc2sgaW4gZHJtX2RldmljZTo6dmJsX3NpZ3MgYW5kIGVtcHRpZXMgdGhlIGxpc3QuCiAgKgogICogSWYgYSBzaWduYWwgaXMgbm90IHJlcXVlc3RlZCwgdGhlbiBjYWxscyB2Ymxhbmtfd2FpdCgpLgogICovCi12b2lkIGRybV92Ymxfc2VuZF9zaWduYWxzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnLCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOworCXVuc2lnbmVkIGludCB2Ymxfc2VxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWcsICp0bXA7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzID0gaSA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOwotCQl1bnNpZ25lZCBpbnQgdmJsX3NlcSA9IGF0b21pY19yZWFkKGkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyIDoKLQkJCQkJCSAgICZkZXYtPnZibF9yZWNlaXZlZCk7CisJdmJsX3NpZ3MgPSAmZGV2LT52Ymxfc2lnc1tjcnRjXTsKKwl2Ymxfc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2Ymxfc2lnLCB0bXAsIHZibF9zaWdzLCBoZWFkKSB7Ci0JCQlpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7Ci0JCQkJdmJsX3NpZy0+aW5mby5zaV9jb2RlID0gdmJsX3NlcTsKLQkJCQlzZW5kX3NpZ19pbmZvKHZibF9zaWctPmluZm8uc2lfc2lnbm8sCi0JCQkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmJsX3NpZywgdG1wLCB2Ymxfc2lncywgaGVhZCkgeworCSAgICBpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7CisJCXZibF9zaWctPmluZm8uc2lfY29kZSA9IHZibF9zZXE7CisJCXNlbmRfc2lnX2luZm8odmJsX3NpZy0+aW5mby5zaV9zaWdubywKKwkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKIAotCQkJCWxpc3RfZGVsKCZ2Ymxfc2lnLT5oZWFkKTsKKwkJbGlzdF9kZWwoJnZibF9zaWctPmhlYWQpOwogCi0JCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKCp2Ymxfc2lnKSwKLQkJCQkJIERSTV9NRU1fRFJJVkVSKTsKLQotCQkJCWRldi0+dmJsX3BlbmRpbmctLTsKLQkJCX0KLQkJfQorCQlkcm1fZnJlZSh2Ymxfc2lnLCBzaXplb2YoKnZibF9zaWcpLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJYXRvbWljX2RlYygmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOworCSAgICB9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogfQogCi1FWFBPUlRfU1lNQk9MKGRybV92Ymxfc2VuZF9zaWduYWxzKTsKKy8qKgorICogZHJtX2hhbmRsZV92YmxhbmsgLSBoYW5kbGUgYSB2YmxhbmsgZXZlbnQKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGVyZSB0aGlzIGV2ZW50IG9jY3VycmVkCisgKgorICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bworICogdXBkYXRlIHRoZSB2YmxhbmsgY291bnRlciBhbmQgc2VuZCBhbnkgc2lnbmFscyB0aGF0IG1heSBiZSBwZW5kaW5nLgorICovCit2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOworCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldiwgY3J0Yyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKIAogLyoqCiAgKiBUYXNrbGV0IHdyYXBwZXIgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYwppbmRleCAwMTc3MDEyLi44MDNiYzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogewogCXJldHVybiBkcm1fYWdwX2ZyZWVfbWVtb3J5KGhhbmRsZSkgPyAwIDogLUVJTlZBTDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX2ZyZWVfYWdwKTsKIAogLyoqIFdyYXBwZXIgYXJvdW5kIGFncF9iaW5kX21lbW9yeSgpICovCiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpCkBAIC0xNDUsNiArMTQ2LDcgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV91bmJpbmRfYWdwKTsKIAogI2Vsc2UgIC8qICBfX09TX0hBU19BR1AgICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGRjZmY5ZTkuLjIxN2FkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTE2OSw2ICsxNjksNyBAQAogCiAJcmV0dXJuIGNoaWxkOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fZ2V0X2Jsb2NrKTsKIAogLyoKICAqIFB1dCBhIGJsb2NrLiBNZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBhbmQgLyBvciBuZXh0IGJsb2NrIGlmIHRoZXkgYXJlIGZyZWUuCkBAIC0yMTcsNiArMjE4LDcgQEAKIAkJZHJtX2ZyZWUoY3VyLCBzaXplb2YoKmN1ciksIERSTV9NRU1fTU0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woZHJtX21tX3B1dF9ibG9jayk7CiAKIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3NlYXJjaF9mcmVlKGNvbnN0IHN0cnVjdCBkcm1fbW0gKiBtbSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKQEAgLTI2NSw2ICsyNjcsNyBAQAogCiAJcmV0dXJuIChoZWFkLT5uZXh0LT5uZXh0ID09IGhlYWQpOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fc2VhcmNoX2ZyZWUpOwogCiBpbnQgZHJtX21tX2luaXQoc3RydWN0IGRybV9tbSAqIG1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0yNzMsNyArMjc2LDcgQEAKIAogCXJldHVybiBkcm1fbW1fY3JlYXRlX3RhaWxfbm9kZShtbSwgc3RhcnQsIHNpemUpOwogfQotCitFWFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKIAogdm9pZCBkcm1fbW1fdGFrZWRvd24oc3RydWN0IGRybV9tbSAqIG1tKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCA5M2IxZTA0Li5kNDkwZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtNDksNiArNDksMTAgQEAKIAkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGRybV9idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX25hbWVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNpZiBEUk1fREVCVUdfQ09ERQogc3RhdGljIGludCBkcm1fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CkBAIC02MCwxMyArNjQsMTYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CiAJY29uc3QgY2hhciAqbmFtZTsJLyoqPCBmaWxlIG5hbWUgKi8KIAlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCisJdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KIH0gZHJtX3Byb2NfbGlzdFtdID0gewotCXsibmFtZSIsIGRybV9uYW1lX2luZm99LAotCXsibWVtIiwgZHJtX21lbV9pbmZvfSwKLQl7InZtIiwgZHJtX3ZtX2luZm99LAotCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm99LAotCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvfSwKLQl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvfSwKKwl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKKwl7Im1lbSIsIGRybV9tZW1faW5mbywgMH0sCisJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKKwl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKKwl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCisJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCisJeyJnZW1fbmFtZXMiLCBkcm1fZ2VtX25hbWVfaW5mbywgRFJJVkVSX0dFTX0sCisJeyJnZW1fb2JqZWN0cyIsIGRybV9nZW1fb2JqZWN0X2luZm8sIERSSVZFUl9HRU19LAogI2lmIERSTV9ERUJVR19DT0RFCiAJeyJ2bWEiLCBkcm1fdm1hX2luZm99LAogI2VuZGlmCkBAIC05MCw4ICs5Nyw5IEBACiBpbnQgZHJtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAogCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgcmV0OwogCWNoYXIgbmFtZVs2NF07CiAKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKQEAgLTEwMiwyMyArMTEwLDQyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQl1MzIgZmVhdHVyZXMgPSBkcm1fcHJvY19saXN0W2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKwogCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCiAJCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOwogCQlpZiAoIWVudCkgewogCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKIAkJCQkgIG5hbWUsIGRybV9wcm9jX2xpc3RbaV0ubmFtZSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQkJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOwotCQkJbWlub3ItPmRldl9yb290ID0gTlVMTDsKLQkJCXJldHVybiAtMTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOwogCQl9CiAJCWVudC0+cmVhZF9wcm9jID0gZHJtX3Byb2NfbGlzdFtpXS5mOwogCQllbnQtPmRhdGEgPSBtaW5vcjsKIAl9CiAKKwlpZiAoZGV2LT5kcml2ZXItPnByb2NfaW5pdCkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+cHJvY19pbml0KG1pbm9yKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJEUk06IERyaXZlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkJICAiL3Byb2MvZHJpLlxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKKyBmYWlsOgorCisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAorCQkJCSAgbWlub3ItPmRldl9yb290KTsKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKKwltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTMzLDEyICsxNjAsMTYgQEAKICAqLwogaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCiAJaWYgKCFyb290IHx8ICFtaW5vci0+ZGV2X3Jvb3QpCiAJCXJldHVybiAwOwogCisJaWYgKGRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXApCisJCWRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXAobWlub3IpOworCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOwogCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3ItPmluZGV4KTsKQEAgLTQ4MCw2ICs1MTEsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSB7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpidWY7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZW9mOworfTsKKworc3RhdGljIGludCBkcm1fZ2VtX29uZV9uYW1lX2luZm8oaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7CisJc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgICAqbmlkID0gZGF0YTsKKworCURSTV9JTkZPKCJuYW1lICVkIHNpemUgJWRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKKwlpZiAobmlkLT5lb2YpCisJCXJldHVybiAwOworCisJbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAorCQkJICAgICIlNmQlOWQlOGQlOWRcbiIsCisJCQkgICAgb2JqLT5uYW1lLCBvYmotPnNpemUsCisJCQkgICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkJICAgIGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7CisJaWYgKG5pZC0+bGVuID4gRFJNX1BST0NfTElNSVQpIHsKKwkJbmlkLT5lb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSBuaWQ7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCW5pZC5sZW4gPSBzcHJpbnRmKGJ1ZiwgIiAgbmFtZSAgICAgc2l6ZSBoYW5kbGVzIHJlZmNvdW50XG4iKTsKKwluaWQuYnVmID0gYnVmOworCW5pZC5lb2YgPSAwOworCWlkcl9mb3JfZWFjaCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIGRybV9nZW1fb25lX25hbWVfaW5mbywgJm5pZCk7CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJaWYgKG5pZC5sZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbmlkLmxlbiAtIG9mZnNldDsKK30KKworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfbWVtb3J5KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbm5lZFxuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX2NvdW50KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBndHQgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPmd0dF9tZW1vcnkpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IHRvdGFsXG4iLCBkZXYtPmd0dF90b3RhbCk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKICNpZiBEUk1fREVCVUdfQ09ERQogCiBzdGF0aWMgaW50IGRybV9fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCmluZGV4IGMyZjU4NGYuLjE0MWUzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCkBAIC0xMDcsNyArMTA3LDYgQEAKICNpZmRlZiBfX2FscGhhX18KIAlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOwogI2VuZGlmCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAlpZiAoZHJtX2h0X2NyZWF0ZSgmZGV2LT5tYXBfaGFzaCwgMTIpKSB7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUyLDYgKzE1MSwxNSBAQAogCQlnb3RvIGVycm9yX291dF91bnJlZzsKIAl9CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSB7CisJCXJldGNvZGUgPSBkcm1fZ2VtX2luaXQoZGV2KTsKKwkJaWYgKHJldGNvZGUpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpemUgZ3JhcGhpY3MgZXhlY3V0aW9uICIKKwkJCQkgICJtYW5hZ2VyIChHRU0pXG4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0X3VucmVnOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKICAgICAgIGVycm9yX291dF91bnJlZzoKQEAgLTMxNyw2ICszMjUsNyBAQAogaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yX3ApCiB7CiAJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAqbWlub3JfcDsKKwogCURSTV9ERUJVRygicmVsZWFzZSBzZWNvbmRhcnkgbWlub3IgJWRcbiIsIG1pbm9yLT5pbmRleCk7CiAKIAlpZiAobWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCBhZjIxMWEwLi4xNjExYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIGVycl9vdXRfZmlsZXM6CiAJaWYgKGkgPiAwKQogCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tpXSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBhOWU2MDQ2Li41YmE3OGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMyw3ICszLDEyIEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIGk5MTVfbWVtLm8KK2k5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vIGk5MTVfb3ByZWdpb24ubyBcCisgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAorCSAgaTkxNV9nZW0ubyBcCisJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKKwkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV90aWxpbmcubwogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggODg5NzQzNC4uZGIzNDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC00MCw0MCArNDAsOTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7Ci0JdTMyIGxhc3RfaGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKKwl1MzIgYWN0aGRfcmVnID0gSVNfSTk2NUcoZGV2KSA/IEFDVEhEX0k5NjUgOiBBQ1RIRDsKKwl1MzIgbGFzdF9hY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOworCXUzMiBhY3RoZDsKKwl1MzIgbGFzdF9oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisJCWFjdGhkID0gSTkxNV9SRUFEKGFjdGhkX3JlZyk7CiAJCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CiAJCWlmIChyaW5nLT5zcGFjZSA8IDApCiAJCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKIAkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKQogCQkJaSA9IDA7CisJCWlmIChhY3RoZCAhPSBsYXN0X2FjdGhkKQorCQkJaSA9IDA7CiAKIAkJbGFzdF9oZWFkID0gcmluZy0+aGVhZDsKKwkJbGFzdF9hY3RoZCA9IGFjdGhkOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisKIAl9CiAKIAlyZXR1cm4gLUVCVVNZOwogfQogCisvKioKKyAqIFNldHMgdXAgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlIGZvciBkZXZpY2VzIHRoYXQgbmVlZCBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIGluIHRoZSByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBpOTE1X2luaXRfcGh5c19od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCisJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQorCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOworCisJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgeworCQlEUk1fRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPnZhZGRyOworCWRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+YnVzYWRkcjsKKworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRnJlZXMgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlLCB3aGV0aGVyIGl0J3MgYSBwaHlzaWNhbCBhZGRyZXNzIG9yIGEgdmlydHVhbAorICogYWRkcmVzcyBzZXQgdXAgYnkgdGhlIFggU2VydmVyLgorICovCitzdGF0aWMgdm9pZCBpOTE1X2ZyZWVfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7CisJCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKKwkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOworCX0KKworCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKSB7CisJCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSAwOworCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmh3c19tYXAsIGRldik7CisJfQorCisJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCisJSTkxNV9XUklURShIV1NfUEdBLCAweDFmZmZmMDAwKTsKK30KKwogdm9pZCBpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwogCi0JcmluZy0+aGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKLQlyaW5nLT50YWlsID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX1RBSUwpICYgVEFJTF9BRERSOworCXJpbmctPmhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKwlyaW5nLT50YWlsID0gSTkxNV9SRUFEKFBSQjBfVEFJTCkgJiBUQUlMX0FERFI7CiAJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKIAlpZiAocmluZy0+c3BhY2UgPCAwKQogCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCi0JaWYgKHJpbmctPmhlYWQgPT0gcmluZy0+dGFpbCkKKwlpZiAocmluZy0+aGVhZCA9PSByaW5nLT50YWlsICYmIGRldl9wcml2LT5zYXJlYV9wcml2KQogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9SSU5HX0VNUFRZOwogfQogCkBAIC04NCwyOCArMTQwLDE5IEBACiAJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQogCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgogCSAqLwotCWlmIChkZXYtPmlycSkKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CiAJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7Ci0JCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSAwOwotCQlkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID0gMDsKKwkJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IE5VTEw7CisJCWRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPSBOVUxMOwogCQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IDA7CiAJfQogCi0JaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7Ci0JCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKLQkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOwotCQkvKiBOZWVkIHRvIHJld3JpdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KLQkJSTkxNV9XUklURSgweDAyMDgwLCAweDFmZmZmMDAwKTsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcikgewotCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gMDsKLQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5od3NfbWFwLCBkZXYpOwotCQlJOTE1X1dSSVRFKDB4MjA4MCwgMHgxZmZmZjAwMCk7Ci0JfQorCS8qIENsZWFyIHRoZSBIV1MgdmlydHVhbCBhZGRyZXNzIGF0IHRlYXJkb3duICovCisJaWYgKEk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCWk5MTVfZnJlZV9od3MoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxLDM0ICsxNjgsMzQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2X3ByaXYtPm1taW9fbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPm1taW9fb2Zmc2V0KTsKLQlpZiAoIWRldl9wcml2LT5tbWlvX21hcCkgewotCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7Ci0JCURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIG1taW8gbWFwIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWRldl9wcml2LT5zYXJlYV9wcml2ID0gKGRybV9pOTE1X3NhcmVhX3QgKikKIAkgICAgKCh1OCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAotCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKLQlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKLQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOwotCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOworCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgeworCQlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogIT0gTlVMTCkgeworCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOworCQkJRFJNX0VSUk9SKCJDbGllbnQgdHJpZWQgdG8gaW5pdGlhbGl6ZSByaW5nYnVmZmVyIGluICIKKwkJCQkgICJHRU0gbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCi0JZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOwotCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBkZXZfcHJpdi0+cmluZy5TaXplIC0gMTsKIAotCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKwkJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7CisJCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKIAotCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKLQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgotCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCQlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CisJCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgorCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOwpAQCAtMTU5LDM0ICsyMDYsMTAgQEAKIAlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKIAotCS8qIFdlIGFyZSB1c2luZyBzZXBhcmF0ZSB2YWx1ZXMgYXMgcGxhY2Vob2xkZXJzIGZvciBtZWNoYW5pc21zIGZvcgotCSAqIHByaXZhdGUgYmFja2J1ZmZlci9kZXB0aGJ1ZmZlciB1c2FnZS4KLQkgKi8KLQlkZXZfcHJpdi0+dXNlX21pX2JhdGNoYnVmZmVyX3N0YXJ0ID0gMDsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgLyogOTY1IGRvZXNuJ3Qgc3VwcG9ydCBvbGRlciBtZXRob2QgKi8KLQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IDE7Ci0KIAkvKiBBbGxvdyBoYXJkd2FyZSBiYXRjaGJ1ZmZlcnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgogCSAqLwogCWRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA9IDE7CiAKLQkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCi0JaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7Ci0JCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0KLQkJCWRybV9wY2lfYWxsb2MoZGV2LCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgMHhmZmZmZmZmZik7Ci0KLQkJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewotCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKLQkJZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT5idXNhZGRyOwotCi0JCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JfQotCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMSwxMSArMjI0LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKLQkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKQEAgLTIyMCw5ICsyMzgsOSBAQAogCURSTV9ERUJVRygiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKTsKIAogCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyICE9IDApCi0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CisJCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CiAJZWxzZQotCQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwogCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTM2Nyw5ICszODUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqIGJveGVzLAotCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQoraW50CitpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcywKKwkgICAgICBpbnQgaSwgaW50IERSMSwgaW50IERSNCkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3g7CkBAIC00MTUsMTQgKzQzNCwxNSBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAwOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKQEAgLTQ4Niw3ICs1MDYsNyBAQAogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAoZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCkgeworCQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKSB7CiAJCQlCRUdJTl9MUF9SSU5HKDIpOwogCQkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CkBAIC01MTYsMTUgKzUzNiwxOCBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCisJaWYgKCFkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlEUk1fREVCVUcoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCi0JCSAgX19GVU5DVElPTl9fLAorCQkgIF9fZnVuY19fLAogCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCiAJCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CiAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCUJFR0lOX0xQX1JJTkcoMik7Ci0JT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORyhNSV9GTFVTSCB8IE1JX1JFQURfRkxVU0gpOwogCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwogCkBAIC01NDksOCArNTcyLDggQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAogCUJFR0lOX0xQX1JJTkcoNCk7Ci0JT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7Ci0JT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyg1IDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC01NzAsOSArNTkzLDE1IEBACiBzdGF0aWMgaW50IGk5MTVfZmx1c2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCWludCByZXQ7CiAKLQlyZXR1cm4gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9iYXRjaGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNTkzLDE2ICs2MjIsMTkgQEAKIAlEUk1fREVCVUcoImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGJhdGNoLT5zdGFydCwgYmF0Y2gtPnVzZWQsIGJhdGNoLT5udW1fY2xpcHJlY3RzKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzICYmIERSTV9WRVJJRllBUkVBX1JFQUQoYmF0Y2gtPmNsaXByZWN0cywKIAkJCQkJCSAgICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCiAJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CisJaWYgKHNhcmVhX3ByaXYpCisJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MTksNyArNjUxLDcgQEAKIAlEUk1fREVCVUcoImk5MTUgY21kYnVmZmVyLCBidWYgJXAgc3ogJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGNtZGJ1Zi0+YnVmLCBjbWRidWYtPnN6LCBjbWRidWYtPm51bV9jbGlwcmVjdHMpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoY21kYnVmLT5udW1fY2xpcHJlY3RzICYmCiAJICAgIERSTV9WRVJJRllBUkVBX1JFQUQoY21kYnVmLT5jbGlwcmVjdHMsCkBAIC02MjksMjQgKzY2MSwzMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKKwlpZiAoc2FyZWFfcHJpdikKKwkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk5MTVfZmxpcF9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaW50IHJldDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18pOwogCi0JcmV0dXJuIGk5MTVfZGlzcGF0Y2hfZmxpcChkZXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2ZsaXAoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9nZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjYzLDcgKzcwNCw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgSTkxNV9QQVJBTV9JUlFfQUNUSVZFOgotCQl2YWx1ZSA9IGRldi0+aXJxID8gMSA6IDA7CisJCXZhbHVlID0gZGV2LT5wZGV2LT5pcnEgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1BBUkFNX0FMTE9XX0JBVENIQlVGRkVSOgogCQl2YWx1ZSA9IGRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA/IDEgOiAwOwpAQCAtNjcxLDYgKzcxMiwxMiBAQAogCWNhc2UgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIOgogCQl2YWx1ZSA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9DSElQU0VUX0lEOgorCQl2YWx1ZSA9IGRldi0+cGNpX2RldmljZTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19HRU06CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmtub3duIHBhcmFtZXRlciAlZFxuIiwgcGFyYW0tPnBhcmFtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTcsOCArNzQ0LDYgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1VTRV9NSV9CQVRDSEJVRkZFUl9TVEFSVDoKLQkJaWYgKCFJU19JOTY1RyhkZXYpKQotCQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IHBhcmFtLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1RFWF9MUlVfTE9HX0dSQU5VTEFSSVRZOgogCQlkZXZfcHJpdi0+dGV4X2xydV9sb2dfZ3JhbnVsYXJpdHkgPSBwYXJhbS0+dmFsdWU7CkBAIC03NDksOCArNzk0LDggQEAKIAlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+aHdzX21hcC5oYW5kbGU7CiAKIAltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7Ci0JRFJNX0RFQlVHKCJsb2FkIGh3cyAweDIwODAgd2l0aCBnZnggbWVtIDB4JXhcbiIsCisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlEUk1fREVCVUcoImxvYWQgaHdzIEhXU19QR0Egd2l0aCBnZnggbWVtIDB4JXhcbiIsCiAJCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKIAlEUk1fREVCVUcoImxvYWQgaHdzIGF0ICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCXJldHVybiAwOwpAQCAtNzc2LDE0ICs4MjEsMzggQEAKIAltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTkxNV9wcml2YXRlX3QpKTsKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCWRldl9wcml2LT5kZXYgPSBkZXY7CiAKIAkvKiBBZGQgcmVnaXN0ZXIgbWFwIChuZWVkZWQgZm9yIHN1c3BlbmQvcmVzdW1lKSAqLwogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIAotCXJldCA9IGRybV9hZGRtYXAoZGV2LCBiYXNlLCBzaXplLCBfRFJNX1JFR0lTVEVSUywKLQkJCSBfRFJNX0tFUk5FTCB8IF9EUk1fRFJJVkVSLAotCQkJICZkZXZfcHJpdi0+bW1pb19tYXApOworCWRldl9wcml2LT5yZWdzID0gaW9yZW1hcChiYXNlLCBzaXplKTsKKworCWk5MTVfZ2VtX2xvYWQoZGV2KTsKKworCS8qIEluaXQgSFdTICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7CisJCXJldCA9IGk5MTVfaW5pdF9waHlzX2h3cyhkZXYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0aGUKKwkgKiBpbnRlZ3JhdGVkIGdyYXBoaWNzIGV2ZW4gdGhvdWdoIHRoZSBzdXBwb3J0IGlzbid0IGFjdHVhbGx5IHRoZXJlCisJICogYWNjb3JkaW5nIHRvIHRoZSBwdWJsaXNoZWQgc3BlY3MuICBJdCBkb2Vzbid0IGFwcGVhciB0byBmdW5jdGlvbgorCSAqIGNvcnJlY3RseSBpbiB0ZXN0aW5nIG9uIDk0NUcuCisJICogVGhpcyBtYXkgYmUgYSBzaWRlIGVmZmVjdCBvZiBNU0kgaGF2aW5nIGJlZW4gbWFkZSBhdmFpbGFibGUgZm9yIFBFRworCSAqIGFuZCB0aGUgcmVnaXN0ZXJzIGJlaW5nIGNsb3NlbHkgYXNzb2NpYXRlZC4KKwkgKi8KKwlpZiAoIUlTX0k5NDVHKGRldikgJiYgIUlTX0k5NDVHTShkZXYpKQorCQlpZiAocGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KSkKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBNU0lcbiIpOworCisJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5MSw4ICs4NjAsMTUgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5tbWlvX21hcCkKLQkJZHJtX3JtbWFwKGRldiwgZGV2X3ByaXYtPm1taW9fbWFwKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldi0+cGRldik7CisKKwlpOTE1X2ZyZWVfaHdzKGRldik7CisKKwlpZiAoZGV2X3ByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJaW91bm1hcChkZXZfcHJpdi0+cmVncyk7CisKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k5MTVfcHJpdmF0ZV90KSwKIAkJIERSTV9NRU1fRFJJVkVSKTsKQEAgLTgwMCw2ICs4NzYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXY7CisKKwlEUk1fREVCVUcoIlxuIik7CisJaTkxNV9maWxlX3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqKQorCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworCisJaWYgKCFpOTE1X2ZpbGVfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWxlX3ByaXYtPmRyaXZlcl9wcml2ID0gaTkxNV9maWxlX3ByaXY7CisKKwlpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fc2Vxbm8gPSAwOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MDcsNiArOTAyLDggQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKKwlpOTE1X2dlbV9sYXN0Y2xvc2UoZGV2KTsKKwogCWlmIChkZXZfcHJpdi0+YWdwX2hlYXApCiAJCWk5MTVfbWVtX3Rha2Vkb3duKCYoZGV2X3ByaXYtPmFncF9oZWFwKSk7CiAKQEAgLTgxOSw2ICs5MTYsMTMgQEAKIAlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2LCBkZXZfcHJpdi0+YWdwX2hlYXApOwogfQogCit2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisKKwlkcm1fZnJlZShpOTE1X2ZpbGVfcHJpdiwgc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworfQorCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0lOSVQsIGk5MTVfZG1hX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9GTFVTSCwgaTkxNV9mbHVzaF9pb2N0bCwgRFJNX0FVVEgpLApAQCAtODM2LDcgKzk0MCwyMyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9zZXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9nZXQsIERSTV9BVVRIICksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9WQkxBTktfU1dBUCwgaTkxNV92Ymxhbmtfc3dhcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfSFdTX0FERFIsIGk5MTVfc2V0X3N0YXR1c19wYWdlLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9IV1NfQUREUiwgaTkxNV9zZXRfc3RhdHVzX3BhZ2UsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fSU5JVCwgaTkxNV9nZW1faW5pdF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBpOTE1X2dlbV9leGVjYnVmZmVyLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUElOLCBpOTE1X2dlbV9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1VOUElOLCBpOTE1X2dlbV91bnBpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1RIUk9UVExFLCBpOTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VOVEVSVlQsIGk5MTVfZ2VtX2VudGVydnRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTEVBVkVWVCwgaTkxNV9nZW1fbGVhdmV2dF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9DUkVBVEUsIGk5MTVfZ2VtX2NyZWF0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QV1JJVEUsIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2VtX3NldF90aWxpbmcsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVfZ2VtX2dldF90aWxpbmcsIDApLAogfTsKIAogaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggOTNhZWQxYy4uYTgwZWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0zOCwyMTEgKzM4LDkgQEAKIAlpOTE1X1BDSV9JRFMKIH07CiAKLWVudW0gcGlwZSB7Ci0gICAgUElQRV9BID0gMCwKLSAgICBQSVBFX0IsCi19OwotCi1zdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKLQllbHNlCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJYXJyYXlbaV0gPSBJOTE1X1JFQUQocmVnICsgKGkgPDwgMikpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJSTkxNV9XUklURShyZWcgKyAoaSA8PCAyKSwgYXJyYXlbaV0pOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2luZGV4ZWQodTE2IGluZGV4X3BvcnQsIHUxNiBkYXRhX3BvcnQsIHU4IHJlZykKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0JcmV0dXJuIGluYihkYXRhX3BvcnQpOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2FyKHUxNiBzdDAxLCB1OCByZWcsIHUxNiBwYWxldHRlX2VuYWJsZSkKLXsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihwYWxldHRlX2VuYWJsZSB8IHJlZywgVkdBX0FSX0lOREVYKTsKLQlyZXR1cm4gaW5iKFZHQV9BUl9EQVRBX1JFQUQpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3dyaXRlX2FyKHU4IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCi17Ci0JaW5iKHN0MDEpOwotCW91dGIocGFsZXR0ZV9lbmFibGUgfCByZWcsIFZHQV9BUl9JTkRFWCk7Ci0Jb3V0Yih2YWwsIFZHQV9BUl9EQVRBX1dSSVRFKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV93cml0ZV9pbmRleGVkKHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcsIHU4IHZhbCkKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0Jb3V0Yih2YWwsIGRhdGFfcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfc2F2ZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCWRldl9wcml2LT5zYXZlREFDTUFTSyA9IGluYihWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1JYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBpbmIoVkdBX0RBQ0RBVEEpOwotCi0JLyogTVNSIGJpdHMgKi8KLQlkZXZfcHJpdi0+c2F2ZU1TUiA9IGluYihWR0FfTVNSX1JFQUQpOwotCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOwotCQlzdDAxID0gVkdBX1NUMDFfQ0dBOwotCX0gZWxzZSB7Ci0JCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKLQkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKLQkJc3QwMSA9IFZHQV9TVDAxX01EQTsKLQl9Ci0KLQkvKiBDUlQgY29udHJvbGxlciByZWdzICovCi0JaTkxNV93cml0ZV9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCAweDExLAotCQkJICAgaTkxNV9yZWFkX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKLQkJCSAgICh+MHg4MCkpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KLQkJCWk5MTVfcmVhZF9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCBpKTsKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHVybiBvZmYgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlkZXZfcHJpdi0+c2F2ZUNSWzB4MTFdICY9IH4weDgwOwotCi0JLyogQXR0cmlidXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JaW5iKHN0MDEpOwotCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBpbmIoVkdBX0FSX0lOREVYKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVBUltpXSA9IGk5MTVfcmVhZF9hcihzdDAxLCBpLCAwKTsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihkZXZfcHJpdi0+c2F2ZUFSX0lOREVYLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVHUltpXSA9Ci0JCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpKTsKLQotCWRldl9wcml2LT5zYXZlR1JbMHgxMF0gPQotCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwKTsKLQlkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdID0KLQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7Ci0JZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9Ci0JCWk5MTVfcmVhZF9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgpOwotCi0JLyogU2VxdWVuY2VyIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1JbaV0gPQotCQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfcmVzdG9yZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIE1TUiBiaXRzICovCi0Jb3V0YihkZXZfcHJpdi0+c2F2ZU1TUiwgVkdBX01TUl9XUklURSk7Ci0JaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgewotCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7Ci0JCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7Ci0JCXN0MDEgPSBWR0FfU1QwMV9DR0E7Ci0JfSBlbHNlIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOwotCQlzdDAxID0gVkdBX1NUMDFfTURBOwotCX0KLQotCS8qIFNlcXVlbmNlciByZWdpc3RlcnMsIGRvbid0IHdyaXRlIFNSMDcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSwKLQkJCQkgICBkZXZfcHJpdi0+c2F2ZVNSW2ldKTsKLQotCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KLQkvKiBFbmFibGUgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIGksIGRldl9wcml2LT5zYXZlQ1JbaV0pOwotCi0JLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGksCi0JCQkJICAgZGV2X3ByaXYtPnNhdmVHUltpXSk7Ci0KLQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKLQkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOwotCWk5MTVfd3JpdGVfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDExLAotCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDExXSk7Ci0JaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgsCi0JCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MThdKTsKLQotCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWluYihzdDAxKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJaTkxNV93cml0ZV9hcihzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKLQlpbmIoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KLQlvdXRiKGRldl9wcml2LT5zYXZlQVJfSU5ERVggfCAweDIwLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCW91dGIoZGV2X3ByaXYtPnNhdmVEQUNNQVNLLCBWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1dYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlvdXRiKGRldl9wcml2LT5zYXZlREFDREFUQVtpXSwgVkdBX0RBQ0RBVEEpOwotCi19Ci0KIHN0YXRpYyBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwogCiAJaWYgKCFkZXYgfHwgIWRldl9wcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2OiAlcCwgZGV2X3ByaXY6ICVwXG4iLCBkZXYsIGRldl9wcml2KTsKQEAgLTI1NCwxMjIgKzUyLDEwIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3NhdmVfc3RhdGUoZGV2LT5wZGV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgJmRldl9wcml2LT5zYXZlTEJCKTsKIAotCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCAqLwotCWRldl9wcml2LT5zYXZlRFNQQVJCID0gSTkxNV9SRUFEKERTUEFSQik7CisJaTkxNV9zYXZlX3N0YXRlKGRldik7CiAKLQkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9BX01EID0gSTkxNV9SRUFEKERQTExfQV9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA9IEk5MTVfUkVBRChIVE9UQUxfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQSA9IEk5MTVfUkVBRChIQkxBTktfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19BID0gSTkxNV9SRUFEKEhTWU5DX0EpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQVNJWkUgPSBJOTE1X1JFQUQoRFNQQVNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQVBPUyA9IEk5MTVfUkVBRChEU1BBUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEFCQVNFID0gSTkxNV9SRUFEKERTUEFCQVNFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0gSTkxNV9SRUFEKERTUEFTVVJGKTsKLQkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7Ci0JfQotCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVBU1RBVCk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9CX01EID0gSTkxNV9SRUFEKERQTExfQl9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQiA9IEk5MTVfUkVBRChIVE9UQUxfQik7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQiA9IEk5MTVfUkVBRChIQkxBTktfQik7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19CID0gSTkxNV9SRUFEKEhTWU5DX0IpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BCQ05UUiA9IEk5MTVfUkVBRChEU1BCQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BCU1RSSURFID0gSTkxNV9SRUFEKERTUEJTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQlNJWkUgPSBJOTE1X1JFQUQoRFNQQlNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQlBPUyA9IEk5MTVfUkVBRChEU1BCUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEJCQVNFID0gSTkxNV9SRUFEKERTUEJCQVNFKTsKLQlpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpIHsKLQkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7Ci0JCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOwotCX0KLQlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoSTkxNVJFR19QSVBFQlNUQVQpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKEFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PTiA9IEk5MTVfUkVBRChMVkRTUFBfT04pOwotCWRldl9wcml2LT5zYXZlTFZEU1BQX09GRiA9IEk5MTVfUkVBRChMVkRTUFBfT0ZGKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0NZQ0xFID0gSTkxNV9SRUFEKFBQX0NZQ0xFKTsKLQotCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwotCi0JLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOwotCi0JLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJSVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7Ci0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfRU5BQkxFX1IpOwotCWRldl9wcml2LT5zYXZlSU1SID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX01BU0tfUik7Ci0KLQkvKiBWR0Egc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0EwID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0EwKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0ExID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0ExKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfUE9TVF9ESVYgPSBJOTE1X1JFQUQoVkNMS19QT1NUX0RJVik7Ci0JZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCA9IEk5MTVfUkVBRChWR0FDTlRSTCk7Ci0KLQkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7Ci0JZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EID0gSTkxNV9SRUFEKERTUENMS19HQVRFX0QpOwotCi0JLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7Ci0KLQkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOwotCi0JLyogU2NyYXRjaCBzcGFjZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwICsgKGkgPDwgMikpOwotCQlkZXZfcHJpdi0+c2F2ZVNXRjFbaV0gPSBJOTE1X1JFQUQoU1dGMTAgKyAoaSA8PCAyKSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKLQotCWk5MTVfc2F2ZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewogCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLwpAQCAtMzgyLDE1NSArNjgsMTUgQEAKIAogc3RhdGljIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGk7Ci0KIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKQogCQlyZXR1cm4gLTE7CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOworCWk5MTVfcmVzdG9yZV9zdGF0ZShkZXYpOwogCi0JSTkxNV9XUklURShEU1BBUkIsIGRldl9wcml2LT5zYXZlRFNQQVJCKTsKLQotCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KLQkvKiBQcmltZSB0aGUgY2xvY2sgKi8KLQlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKLQkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOwotCQl1ZGVsYXkoMTUwKTsKLQl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKLQkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQSwgZGV2X3ByaXYtPnNhdmVEUExMX0EpOwotCXVkZWxheSgxNTApOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOwotCXVkZWxheSgxNTApOwotCi0JLyogUmVzdG9yZSBtb2RlICovCi0JSTkxNV9XUklURShIVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSk7Ci0JSTkxNV9XUklURShIQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVIQkxBTktfQSk7Ci0JSTkxNV9XUklURShIU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZUhTWU5DX0EpOwotCUk5MTVfV1JJVEUoVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVlRPVEFMX0EpOwotCUk5MTVfV1JJVEUoVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVkJMQU5LX0EpOwotCUk5MTVfV1JJVEUoVlNZTkNfQSwgZGV2X3ByaXYtPnNhdmVWU1lOQ19BKTsKLQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOwotCi0JLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCi0JSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7Ci0JSTkxNV9XUklURShEU1BBUE9TLCBkZXZfcHJpdi0+c2F2ZURTUEFQT1MpOwotCUk5MTVfV1JJVEUoUElQRUFTUkMsIGRldl9wcml2LT5zYXZlUElQRUFTUkMpOwotCUk5MTVfV1JJVEUoRFNQQUJBU0UsIGRldl9wcml2LT5zYXZlRFNQQUJBU0UpOwotCUk5MTVfV1JJVEUoRFNQQVNUUklERSwgZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlJOTE1X1dSSVRFKERTUEFTVVJGLCBkZXZfcHJpdi0+c2F2ZURTUEFTVVJGKTsKLQkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7Ci0JfQotCi0JSTkxNV9XUklURShQSVBFQUNPTkYsIGRldl9wcml2LT5zYXZlUElQRUFDT05GKTsKLQotCWk5MTVfcmVzdG9yZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQkvKiBFbmFibGUgdGhlIHBsYW5lICovCi0JSTkxNV9XUklURShEU1BBQ05UUiwgZGV2X3ByaXYtPnNhdmVEU1BBQ05UUik7Ci0JSTkxNV9XUklURShEU1BBQkFTRSwgSTkxNV9SRUFEKERTUEFCQVNFKSk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JaWYgKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCi0JCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKLQkJdWRlbGF5KDE1MCk7Ci0JfQotCUk5MTVfV1JJVEUoRlBCMCwgZGV2X3ByaXYtPnNhdmVGUEIwKTsKLQlJOTE1X1dSSVRFKEZQQjEsIGRldl9wcml2LT5zYXZlRlBCMSk7Ci0JLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CKTsKLQl1ZGVsYXkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIFJlc3RvcmUgbW9kZSAqLwotCUk5MTVfV1JJVEUoSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlSFRPVEFMX0IpOwotCUk5MTVfV1JJVEUoSEJMQU5LX0IsIGRldl9wcml2LT5zYXZlSEJMQU5LX0IpOwotCUk5MTVfV1JJVEUoSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVIU1lOQ19CKTsKLQlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKLQlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKLQlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKLQotCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwotCUk5MTVfV1JJVEUoRFNQQlNJWkUsIGRldl9wcml2LT5zYXZlRFNQQlNJWkUpOwotCUk5MTVfV1JJVEUoRFNQQlBPUywgZGV2X3ByaXYtPnNhdmVEU1BCUE9TKTsKLQlJOTE1X1dSSVRFKFBJUEVCU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDKTsKLQlJOTE1X1dSSVRFKERTUEJCQVNFLCBkZXZfcHJpdi0+c2F2ZURTUEJCQVNFKTsKLQlJOTE1X1dSSVRFKERTUEJTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQlNUUklERSk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJSTkxNV9XUklURShEU1BCU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BCU1VSRik7Ci0JCUk5MTVfV1JJVEUoRFNQQlRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYpOwotCX0KLQotCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7Ci0KLQlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOwotCUk5MTVfV1JJVEUoRFNQQkJBU0UsIEk5MTVfUkVBRChEU1BCQkFTRSkpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKLQotCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7Ci0JSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7Ci0JSTkxNV9XUklURShMVkRTUFBfT04sIGRldl9wcml2LT5zYXZlTFZEU1BQX09OKTsKLQlJOTE1X1dSSVRFKExWRFNQUF9PRkYsIGRldl9wcml2LT5zYXZlTFZEU1BQX09GRik7Ci0JSTkxNV9XUklURShQUF9DWUNMRSwgZGV2X3ByaXYtPnNhdmVQUF9DWUNMRSk7Ci0JSTkxNV9XUklURShQUF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wpOwotCi0JLyogRklYTUU6IHJlc3RvcmUgVFYgJiBTRFZPIHN0YXRlICovCi0KLQkvKiBGQkMgaW5mbyAqLwotCUk5MTVfV1JJVEUoRkJDX0NGQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfTExfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MKTsKLQotCS8qIFZHQSBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTAsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTApOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTEsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTEpOwotCUk5MTVfV1JJVEUoVkNMS19QT1NUX0RJViwgZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7Ci0JSTkxNV9XUklURSAoRFNQQ0xLX0dBVEVfRCwgZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EKTsKLQotCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7Ci0KLQkvKiBNZW1vcnkgYXJiaXRyYXRpb24gc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChNSV9BUkJfU1RBVEUsIGRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFIHwgMHhmZmZmMDAwMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlJOTE1X1dSSVRFKFNXRjAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YwW2ldKTsKLQkJSTkxNV9XUklURShTV0YxMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjFbaSs3XSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCUk5MTVfV1JJVEUoU1dGMzAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YyW2ldKTsKLQotCWk5MTVfcmVzdG9yZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MSwxNyArODcsMTkgQEAKIAkgKi8KIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCAvKiBEUklWRVJfVVNFX01UUlIgfCovCi0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwgfAotCSAgICBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0dFTSwKIAkubG9hZCA9IGk5MTVfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IGk5MTVfZHJpdmVyX3VubG9hZCwKKwkub3BlbiA9IGk5MTVfZHJpdmVyX29wZW4sCiAJLmxhc3RjbG9zZSA9IGk5MTVfZHJpdmVyX2xhc3RjbG9zZSwKIAkucHJlY2xvc2UgPSBpOTE1X2RyaXZlcl9wcmVjbG9zZSwKKwkucG9zdGNsb3NlID0gaTkxNV9kcml2ZXJfcG9zdGNsb3NlLAogCS5zdXNwZW5kID0gaTkxNV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpOTE1X3Jlc3VtZSwKIAkuZGV2aWNlX2lzX2FncCA9IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3AsCi0JLnZibGFua193YWl0ID0gaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MiwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpOTE1X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTkxNV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU1OSw2ICsxMDcsMTAgQEAKIAkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAogCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5wcm9jX2luaXQgPSBpOTE1X2dlbV9wcm9jX2luaXQsCisJLnByb2NfY2xlYW51cCA9IGk5MTVfZ2VtX3Byb2NfY2xlYW51cCwKKwkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCisJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAogCS5pb2N0bHMgPSBpOTE1X2lvY3RscywKIAkuZm9wcyA9IHsKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDczMjZkOS4uZWFlNGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zMCw2ICszMCw4IEBACiAjaWZuZGVmIF9JOTE1X0RSVl9IXwogI2RlZmluZSBfSTkxNV9EUlZfSF8KIAorI2luY2x1ZGUgImk5MTVfcmVnLmgiCisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0zNyw3ICszOSwxMiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiaTkxNSIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJJbnRlbCBHcmFwaGljcyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MDExOSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA4MDczMCIKKworZW51bSBwaXBlIHsKKwlQSVBFX0EgPSAwLAorCVBJUEVfQiwKK307CiAKIC8qIEludGVyZmFjZSBoaXN0b3J5OgogICoKQEAgLTUzLDE2ICs2MCwyMyBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCisjZGVmaW5lIFdBVENIX0NPSEVSRU5DWQkwCisjZGVmaW5lIFdBVENIX0JVRgkwCisjZGVmaW5lIFdBVENIX0VYRUMJMAorI2RlZmluZSBXQVRDSF9MUlUJMAorI2RlZmluZSBXQVRDSF9SRUxPQwkwCisjZGVmaW5lIFdBVENIX0lOQUNUSVZFCTAKKyNkZWZpbmUgV0FUQ0hfUFdSSVRFCTAKKwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3JpbmdfYnVmZmVyIHsKIAlpbnQgdGFpbF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgU3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBFbmQ7CiAJdW5zaWduZWQgbG9uZyBTaXplOwogCXU4ICp2aXJ0dWFsX3N0YXJ0OwogCWludCBoZWFkOwogCWludCB0YWlsOwogCWludCBzcGFjZTsKIAlkcm1fbG9jYWxfbWFwX3QgbWFwOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcmluZ19vYmo7CiB9IGRybV9pOTE1X3JpbmdfYnVmZmVyX3Q7CiAKIHN0cnVjdCBtZW1fYmxvY2sgewpAQCAtNzYsMTMgKzkwLDI4IEBACiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfdmJsX3N3YXAgewogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlkcm1fZHJhd2FibGVfdCBkcndfaWQ7Ci0JdW5zaWduZWQgaW50IHBpcGU7CisJdW5zaWduZWQgaW50IHBsYW5lOwogCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIH0gZHJtX2k5MTVfdmJsX3N3YXBfdDsKIAorc3RydWN0IG9wcmVnaW9uX2hlYWRlcjsKK3N0cnVjdCBvcHJlZ2lvbl9hY3BpOworc3RydWN0IG9wcmVnaW9uX3N3c2NpOworc3RydWN0IG9wcmVnaW9uX2FzbGU7CisKK3N0cnVjdCBpbnRlbF9vcHJlZ2lvbiB7CisJc3RydWN0IG9wcmVnaW9uX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCXN0cnVjdCBvcHJlZ2lvbl9zd3NjaSAqc3dzY2k7CisJc3RydWN0IG9wcmVnaW9uX2FzbGUgKmFzbGU7CisJaW50IGVuYWJsZWQ7Cit9OworCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJdm9pZCBfX2lvbWVtICpyZWdzOwogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7Ci0JZHJtX2xvY2FsX21hcF90ICptbWlvX21hcDsKIAogCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCByaW5nOwpAQCAtOTAsMjAgKzExOSwyNSBAQAogCWRybV9kbWFfaGFuZGxlX3QgKnN0YXR1c19wYWdlX2RtYWg7CiAJdm9pZCAqaHdfc3RhdHVzX3BhZ2U7CiAJZG1hX2FkZHJfdCBkbWFfc3RhdHVzX3BhZ2U7Ci0JdW5zaWduZWQgbG9uZyBjb3VudGVyOworCXVpbnQzMl90IGNvdW50ZXI7CiAJdW5zaWduZWQgaW50IHN0YXR1c19nZnhfYWRkcjsKIAlkcm1fbG9jYWxfbWFwX3QgaHdzX21hcDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmh3c19vYmo7CiAKIAl1bnNpZ25lZCBpbnQgY3BwOwogCWludCBiYWNrX29mZnNldDsKIAlpbnQgZnJvbnRfb2Zmc2V0OwogCWludCBjdXJyZW50X3BhZ2U7CiAJaW50IHBhZ2VfZmxpcHBpbmc7Ci0JaW50IHVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydDsKIAogCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgaXJxX2VtaXR0ZWQ7CisJLyoqIFByb3RlY3RzIHVzZXJfaXJxX3JlZmNvdW50IGFuZCBpcnFfbWFza19yZWcgKi8KKwlzcGlubG9ja190IHVzZXJfaXJxX2xvY2s7CisJLyoqIFJlZmNvdW50IGZvciBpOTE1X3VzZXJfaXJxX2dldCgpIHZlcnN1cyBpOTE1X3VzZXJfaXJxX3B1dCgpLiAqLworCWludCB1c2VyX2lycV9yZWZjb3VudDsKKwkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KKwl1MzIgaXJxX21hc2tfcmVnOwogCiAJaW50IHRleF9scnVfbG9nX2dyYW51bGFyaXR5OwogCWludCBhbGxvd19iYXRjaGJ1ZmZlcjsKQEAgLTExNSw2ICsxNDksOCBAQAogCWRybV9pOTE1X3ZibF9zd2FwX3QgdmJsX3N3YXBzOwogCXVuc2lnbmVkIGludCBzd2Fwc19wZW5kaW5nOwogCisJc3RydWN0IGludGVsX29wcmVnaW9uIG9wcmVnaW9uOworCiAJLyogUmVnaXN0ZXIgc3RhdGUgKi8KIAl1OCBzYXZlTEJCOwogCXUzMiBzYXZlRFNQQUNOVFI7CkBAIC0xMzksNyArMTc1LDcgQEAKIAl1MzIgc2F2ZURTUEFTVFJJREU7CiAJdTMyIHNhdmVEU1BBU0laRTsKIAl1MzIgc2F2ZURTUEFQT1M7Ci0JdTMyIHNhdmVEU1BBQkFTRTsKKwl1MzIgc2F2ZURTUEFBRERSOwogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKQEAgLTE2MCwyNCArMTk2LDI0IEBACiAJdTMyIHNhdmVEU1BCU1RSSURFOwogCXUzMiBzYXZlRFNQQlNJWkU7CiAJdTMyIHNhdmVEU1BCUE9TOwotCXUzMiBzYXZlRFNQQkJBU0U7CisJdTMyIHNhdmVEU1BCQUREUjsKIAl1MzIgc2F2ZURTUEJTVVJGOwogCXUzMiBzYXZlRFNQQlRJTEVPRkY7Ci0JdTMyIHNhdmVWQ0xLX0RJVklTT1JfVkdBMDsKLQl1MzIgc2F2ZVZDTEtfRElWSVNPUl9WR0ExOwotCXUzMiBzYXZlVkNMS19QT1NUX0RJVjsKKwl1MzIgc2F2ZVZHQTA7CisJdTMyIHNhdmVWR0ExOworCXUzMiBzYXZlVkdBX1BEOwogCXUzMiBzYXZlVkdBQ05UUkw7CiAJdTMyIHNhdmVBRFBBOwogCXUzMiBzYXZlTFZEUzsKLQl1MzIgc2F2ZUxWRFNQUF9PTjsKLQl1MzIgc2F2ZUxWRFNQUF9PRkY7CisJdTMyIHNhdmVQUF9PTl9ERUxBWVM7CisJdTMyIHNhdmVQUF9PRkZfREVMQVlTOwogCXUzMiBzYXZlRFZPQTsKIAl1MzIgc2F2ZURWT0I7CiAJdTMyIHNhdmVEVk9DOwogCXUzMiBzYXZlUFBfT047CiAJdTMyIHNhdmVQUF9PRkY7CiAJdTMyIHNhdmVQUF9DT05UUk9MOwotCXUzMiBzYXZlUFBfQ1lDTEU7CisJdTMyIHNhdmVQUF9ESVZJU09SOwogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOwpAQCAtMTkwLDcgKzIyNiw3IEBACiAJdTMyIHNhdmVJTVI7CiAJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CiAJdTMyIHNhdmVEX1NUQVRFOwotCXUzMiBzYXZlRFNQQ0xLX0dBVEVfRDsKKwl1MzIgc2F2ZUNHXzJEX0RJUzsKIAl1MzIgc2F2ZU1JX0FSQl9TVEFURTsKIAl1MzIgc2F2ZVNXRjBbMTZdOwogCXUzMiBzYXZlU1dGMVsxNl07CkBAIC0yMDMsOCArMjM5LDE4MCBAQAogCXU4IHNhdmVEQUNNQVNLOwogCXU4IHNhdmVEQUNEQVRBWzI1NiozXTsgLyogMjU2IDMtYnl0ZSBjb2xvcnMgKi8KIAl1OCBzYXZlQ1JbMzddOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CisKKwkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nIGZyb20gdGhlCisJCSAqIHJpbmdidWZmZXIuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBidXQgd2hpY2gKKwkJICogc3RpbGwgaGF2ZSBhIHdyaXRlX2RvbWFpbiB3aGljaCBuZWVkcyB0byBiZSBmbHVzaGVkIGJlZm9yZQorCQkgKiB1bmJpbmRpbmcuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsdXNoaW5nX2xpc3Q7CisKKwkJLyoqCisJCSAqIExSVSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBhbmQKKwkJICogYXJlIHJlYWR5IHRvIHVuYmluZCwgYnV0IGFyZSBzdGlsbCBpbiB0aGUgR1RULgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBvbiB0aGUgYnVmZmVyIHdoaWxlIG9uIHRoaXMgbGlzdCwKKwkJICogYXMgbWVyZWx5IGJlaW5nIEdUVC1ib3VuZCBzaG91bGRuJ3QgcHJldmVudCBpdHMgYmVpbmcKKwkJICogZnJlZWQsIGFuZCB3ZSdsbCBwdWxsIGl0IG9mZiB0aGUgbGlzdCBpbiB0aGUgZnJlZSBwYXRoLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIGJyZWFkY3J1bWJzIGFzc29jaWF0ZWQgd2l0aCBHUFUgcmVxdWVzdHMgY3VycmVudGx5CisJCSAqIG91dHN0YW5kaW5nLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7CisKKwkJLyoqCisJCSAqIFdlIGxlYXZlIHRoZSB1c2VyIElSUSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKwkJICogYnV0IHRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0cyB3aWxsIGZpbmlzaCBhbmQgbmV2ZXIKKwkJICogYmUgcmV0aXJlZCBvbmNlIHRoZSBzeXN0ZW0gZ29lcyBpZGxlLiBTZXQgYSB0aW1lciB0bworCQkgKiBmaXJlIHBlcmlvZGljYWxseSB3aGlsZSB0aGUgcmluZyBpcyBydW5uaW5nLiBXaGVuIGl0CisJCSAqIGZpcmVzLCBnbyByZXRpcmUgcmVxdWVzdHMuCisJCSAqLworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJldGlyZV93b3JrOworCisJCS8qKiBXb3JrIHRhc2sgZm9yIHZibGFuay1yZWxhdGVkIHJpbmcgYWNjZXNzICovCisJCXN0cnVjdCB3b3JrX3N0cnVjdCB2Ymxhbmtfd29yazsKKworCQl1aW50MzJfdCBuZXh0X2dlbV9zZXFubzsKKworCQkvKioKKwkJICogV2FpdGluZyBzZXF1ZW5jZSBudW1iZXIsIGlmIGFueQorCQkgKi8KKwkJdWludDMyX3Qgd2FpdGluZ19nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIExhc3Qgc2VxIHNlZW4gYXQgaXJxIHRpbWUKKwkJICovCisJCXVpbnQzMl90IGlycV9nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIEZsYWcgaWYgdGhlIFggU2VydmVyLCBhbmQgdGh1cyBEUk0sIGlzIG5vdCBjdXJyZW50bHkgaW4KKwkJICogY29udHJvbCBvZiB0aGUgZGV2aWNlLgorCQkgKgorCQkgKiBUaGlzIGlzIHNldCBiZXR3ZWVuIExlYXZlVlQgYW5kIEVudGVyVlQuICBJdCBuZWVkcyB0byBiZQorCQkgKiByZXBsYWNlZCB3aXRoIGEgc2VtYXBob3JlLiAgSXQgYWxzbyBuZWVkcyB0byBiZQorCQkgKiB0cmFuc2l0aW9uZWQgYXdheSBmcm9tIGZvciBrZXJuZWwgbW9kZXNldHRpbmcuCisJCSAqLworCQlpbnQgc3VzcGVuZGVkOworCisJCS8qKgorCQkgKiBGbGFnIGlmIHRoZSBoYXJkd2FyZSBhcHBlYXJzIHRvIGJlIHdlZGdlZC4KKwkJICoKKwkJICogVGhpcyBpcyBzZXQgd2hlbiBhdHRlbXB0cyB0byBpZGxlIHRoZSBkZXZpY2UgdGltZW91dC4KKwkJICogSXQgcHJldmVudHMgY29tbWFuZCBzdWJtaXNzaW9uIGZyb20gb2NjdXJpbmcgYW5kIG1ha2VzCisJCSAqIGV2ZXJ5IHBlbmRpbmcgcmVxdWVzdCBmYWlsCisJCSAqLworCQlpbnQgd2VkZ2VkOworCisJCS8qKiBCaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIFggdGlsaW5nICovCisJCXVpbnQzMl90IGJpdF82X3N3aXp6bGVfeDsKKwkJLyoqIEJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgWSB0aWxpbmcgKi8KKwkJdWludDMyX3QgYml0XzZfc3dpenpsZV95OworCX0gbW07CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAorLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwkvKiogQ3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhpcyBvYmplY3QgaW4gdGhlIEdUVCwgaWYgYW55LiAqLworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZ3R0X3NwYWNlOworCisJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9mbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qKgorCSAqIFRoaXMgaXMgc2V0IGlmIHRoZSBvYmplY3QgaXMgb24gdGhlIGFjdGl2ZSBvciBmbHVzaGluZyBsaXN0cworCSAqIChoYXMgcGVuZGluZyByZW5kZXJpbmcpLCBhbmQgaXMgbm90IHNldCBpZiBpdCdzIG9uIGluYWN0aXZlIChyZWFkeQorCSAqIHRvIGJlIHVuYm91bmQpLgorCSAqLworCWludCBhY3RpdmU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgbGFzdCBib3VuZAorCSAqIHRvIHRoZSBHVFQKKwkgKi8KKwlpbnQgZGlydHk7CisKKwkvKiogQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgZm9yIG91ciBHVFQgYmluZGluZy4gKi8KKwlEUk1fQUdQX01FTSAqYWdwX21lbTsKKworCXN0cnVjdCBwYWdlICoqcGFnZV9saXN0OworCisJLyoqCisJICogQ3VycmVudCBvZmZzZXQgb2YgdGhlIG9iamVjdCBpbiBHVFQgc3BhY2UuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGd0dF9zcGFjZS0+c3RhcnQKKwkgKi8KKwl1aW50MzJfdCBndHRfb2Zmc2V0OworCisJLyoqIEJvb2xlYW4gd2hldGhlciB0aGlzIG9iamVjdCBoYXMgYSB2YWxpZCBndHQgb2Zmc2V0LiAqLworCWludCBndHRfYm91bmQ7CisKKwkvKiogSG93IG1hbnkgdXNlcnMgaGF2ZSBwaW5uZWQgdGhpcyBvYmplY3QgaW4gR1RUIHNwYWNlICovCisJaW50IHBpbl9jb3VudDsKKworCS8qKiBCcmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuICovCisJdWludDMyX3QgbGFzdF9yZW5kZXJpbmdfc2Vxbm87CisKKwkvKiogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdC4gKi8KKwl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKworCS8qKiBBR1AgbWFwcGluZyB0eXBlIChBR1BfVVNFUl9NRU1PUlkgb3IgQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSAqLworCXVpbnQzMl90IGFncF90eXBlOworCisJLyoqCisJICogRmxhZ2dpbmcgb2Ygd2hpY2ggaW5kaXZpZHVhbCBwYWdlcyBhcmUgdmFsaWQgaW4gR0VNX0RPTUFJTl9DUFUgd2hlbgorCSAqIEdFTV9ET01BSU5fQ1BVIGlzIG5vdCBpbiB0aGUgb2JqZWN0J3MgcmVhZCBkb21haW4uCisJICovCisJdWludDhfdCAqcGFnZV9jcHVfdmFsaWQ7Cit9OworCisvKioKKyAqIFJlcXVlc3QgcXVldWUgc3RydWN0dXJlLgorICoKKyAqIFRoZSByZXF1ZXN0IHF1ZXVlIGFsbG93cyB1cyB0byBub3RlIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBoYXZlIGJlZW4gZW1pdHRlZAorICogYW5kIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYWN0aXZlIGJ1ZmZlcnMgdG8gYmUgcmV0aXJlZC4KKyAqCisgKiBCeSBrZWVwaW5nIHRoaXMgbGlzdCwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBkbyBxdWVzdGlvbmFibGUKKyAqIHNlcXVlbmNlLW51bWJlciBjb21wYXJpc29ucyBvbiBidWZmZXIgbGFzdF9yZW5kZXJpbmdfc2Vxbm9zLCBhbmQgYXNzb2NpYXRlCisgKiBhbiBlbWlzc2lvbiB0aW1lIHdpdGggc2Vxbm9zIGZvciB0cmFja2luZyBob3cgZmFyIGFoZWFkIG9mIHRoZSBHUFUgd2UgYXJlLgorICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgeworCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuICovCisJdWludDMyX3Qgc2Vxbm87CisKKwkvKiogVGltZSBhdCB3aGljaCB0aGlzIHJlcXVlc3Qgd2FzIGVtaXR0ZWQsIGluIGppZmZpZXMuICovCisJdW5zaWduZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7CisKKwkvKiogQ2FjaGUgZG9tYWlucyB0aGF0IHdlcmUgZmx1c2hlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QuICovCisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgeworCXN0cnVjdCB7CisJCXVpbnQzMl90IGxhc3RfZ2VtX3NlcW5vOworCQl1aW50MzJfdCBsYXN0X2dlbV90aHJvdHRsZV9zZXFubzsKKwl9IG1tOworfTsKKwogZXh0ZXJuIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rsc1tdOwogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKIApAQCAtMjEyLDMxICs0MjAsNDIgQEAKIGV4dGVybiB2b2lkIGk5MTVfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KTsKIAogLyogaTkxNV9pcnEuYyAqLwogZXh0ZXJuIGludCBpOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV91c2VyX2lycV9wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci1leHRlcm4gaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB2b2lkIGk5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBpOTE1X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3BpcGVfc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgaTkxNV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGk5MTVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiBpOTE1X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spOwogCiAvKiBpOTE1X21lbS5jICovCiBleHRlcm4gaW50IGk5MTVfbWVtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0yNTAsMTEgKzQ2OSw5OSBAQAogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fdGFrZWRvd24oc3RydWN0IG1lbV9ibG9jayAqKmhlYXApOwogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOworLyogaTkxNV9nZW0uYyAqLworaW50IGk5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV91bnBpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZW50ZXJ2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2xlYXZldnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X2dlbV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitpbnQgaTkxNV9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgaTkxNV9nZW1fb2JqZWN0X3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdWludDMyX3QgYWxpZ25tZW50KTsKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgaTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordWludDMyX3QgaTkxNV9nZXRfZ2VtX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCi0jZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURShyZWcsdmFsKSAgICAgRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCi0jZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJRFJNX1JFQUQxNihkZXZfcHJpdi0+bW1pb19tYXAsIChyZWcpKQotI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLHZhbCkJRFJNX1dSSVRFMTYoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCisvKiBpOTE1X2dlbV90aWxpbmcuYyAqLwordm9pZCBpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9nZW1fZGVidWcuYyAqLwordm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKKwkJCSAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspOworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkIGk5MTVfdmVyaWZ5X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNlbHNlCisjZGVmaW5lIGk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgZmlsZSwgbGluZSkKKyNlbmRpZgordm9pZCBpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgaGFuZGxlKTsKK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKK3ZvaWQgaTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSk7CisKKy8qIGk5MTVfc3VzcGVuZC5jICovCitleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKiBpOTE1X3N1c3BlbmQuYyAqLworZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9vcHJlZ2lvbi5jICovCitleHRlcm4gaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9vcHJlZ2lvbl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fZW5hYmxlX2FzbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qKgorICogTG9jayB0ZXN0IGZvciB3aGVuIGl0J3MganVzdCBmb3Igc3luY2hyb25pemF0aW9uIG9mIHJpbmcgYWNjZXNzLgorICoKKyAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCB3aGVuIEdFTSBpcyBpbml0aWFsaXplZCBhcyBub2JvZHkgZWxzZQorICogaGFzIGFjY2VzcyB0byB0aGUgcmluZy4KKyAqLworI2RlZmluZSBSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdikgZG8gewkJCVwKKwlpZiAoKChkcm1faTkxNV9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlKS0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSBcCisJCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJOTE1X1JFQUQocmVnKSAgICAgICAgICByZWFkbChkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFKHJlZywgdmFsKSAgICAgd3JpdGVsKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9SRUFEMTYocmVnKQlyZWFkdyhkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLCB2YWwpCXdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfUkVBRDgocmVnKQkJcmVhZGIoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTgocmVnLCB2YWwpCXdyaXRlYih2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCiAKICNkZWZpbmUgSTkxNV9WRVJCT1NFIDAKIApAQCAtMjg0LDgxNiArNTkxLDI5IEBACiAJaWYgKEk5MTVfVkVSQk9TRSkgRFJNX0RFQlVHKCJBRFZBTkNFX0xQX1JJTkcgJXhcbiIsIG91dHJpbmcpOwlcCiAJZGV2X3ByaXYtPnJpbmcudGFpbCA9IG91dHJpbmc7CQkJCQlcCiAJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gb3V0Y291bnQgKiA0OwkJCQlcCi0JSTkxNV9XUklURShMUF9SSU5HICsgUklOR19UQUlMLCBvdXRyaW5nKTsJCQlcCisJSTkxNV9XUklURShQUkIwX1RBSUwsIG91dHJpbmcpOwkJCVwKIH0gd2hpbGUoMCkKIAotZXh0ZXJuIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7Ci0KLS8qIEV4dGVuZGVkIGNvbmZpZyBzcGFjZSAqLwotI2RlZmluZSBMQkIgMHhmNAotCi0vKiBWR0Egc3R1ZmYgKi8KLQotI2RlZmluZSBWR0FfU1QwMV9NREEgMHgzYmEKLSNkZWZpbmUgVkdBX1NUMDFfQ0dBIDB4M2RhCi0KLSNkZWZpbmUgVkdBX01TUl9XUklURSAweDNjMgotI2RlZmluZSBWR0FfTVNSX1JFQUQgMHgzY2MKLSNkZWZpbmUgICBWR0FfTVNSX01FTV9FTiAoMTw8MSkKLSNkZWZpbmUgICBWR0FfTVNSX0NHQV9NT0RFICgxPDwwKQotCi0jZGVmaW5lIFZHQV9TUl9JTkRFWCAweDNjNAotI2RlZmluZSBWR0FfU1JfREFUQSAweDNjNQotCi0jZGVmaW5lIFZHQV9BUl9JTkRFWCAweDNjMAotI2RlZmluZSAgIFZHQV9BUl9WSURfRU4gKDE8PDUpCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1dSSVRFIDB4M2MwCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1JFQUQgMHgzYzEKLQotI2RlZmluZSBWR0FfR1JfSU5ERVggMHgzY2UKLSNkZWZpbmUgVkdBX0dSX0RBVEEgMHgzY2YKLS8qIEdSMDUgKi8KLSNkZWZpbmUgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9TSElGVCAzCi0jZGVmaW5lICAgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9QTEFORSAxCi0vKiBHUjA2ICovCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX01BU0sgMHhjCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX1NISUZUIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0FGRkZGIDAKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0JGRkZGIDEKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0I3RkZGIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0JGRkZGIDMKLQotI2RlZmluZSBWR0FfREFDTUFTSyAweDNjNgotI2RlZmluZSBWR0FfREFDUlggMHgzYzcKLSNkZWZpbmUgVkdBX0RBQ1dYIDB4M2M4Ci0jZGVmaW5lIFZHQV9EQUNEQVRBIDB4M2M5Ci0KLSNkZWZpbmUgVkdBX0NSX0lOREVYX01EQSAweDNiNAotI2RlZmluZSBWR0FfQ1JfREFUQV9NREEgMHgzYjUKLSNkZWZpbmUgVkdBX0NSX0lOREVYX0NHQSAweDNkNAotI2RlZmluZSBWR0FfQ1JfREFUQV9DR0EgMHgzZDUKLQotI2RlZmluZSBHRlhfT1BfVVNFUl9JTlRFUlJVUFQJCSgoMDw8MjkpfCgyPDwyMykpCi0jZGVmaW5lIEdGWF9PUF9CUkVBS1BPSU5UX0lOVEVSUlVQVAkoKDA8PDI5KXwoMTw8MjMpKQotI2RlZmluZSBDTURfUkVQT1JUX0hFQUQJCQkoNzw8MjMpCi0jZGVmaW5lIENNRF9TVE9SRV9EV09SRF9JRFgJCSgoMHgyMTw8MjMpIHwgMHgxKQotI2RlZmluZSBDTURfT1BfQkFUQ0hfQlVGRkVSICAoKDB4MDw8MjkpfCgweDMwPDwyMyl8MHgxKQotCi0jZGVmaW5lIElOU1RfUEFSU0VSX0NMSUVOVCAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5TVF9PUF9GTFVTSCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBJTlNUX0ZMVVNIX01BUF9DQUNIRSAweDAwMDAwMDAxCi0KLSNkZWZpbmUgQkIxX1NUQVJUX0FERFJfTUFTSyAgICh+MHg3KQotI2RlZmluZSBCQjFfUFJPVEVDVEVEICAgICAgICAgKDE8PDApCi0jZGVmaW5lIEJCMV9VTlBST1RFQ1RFRCAgICAgICAoMDw8MCkKLSNkZWZpbmUgQkIyX0VORF9BRERSX01BU0sgICAgICh+MHg3KQotCi0vKiBGcmFtZWJ1ZmZlciBjb21wcmVzc2lvbiAqLwotI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCi0jZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLwotI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAotI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKLSNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKLSNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCi0jZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCi0jZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKLSNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAotI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCi0jZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQotI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKLSNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgotCi0jZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKLSNkZWZpbmUgRkJDX0xMX1BBRAkJKDMyKQotCi0vKiBJbnRlcnJ1cHQgYml0czoKLSAqLwotI2RlZmluZSBVU0VSX0lOVF9GTEFHICAgICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotI2RlZmluZSBIV0JfT09NX0ZMQUcgICAgICgxPDwxMykgLyogYmlubmVyIG91dCBvZiBtZW1vcnkgKi8KLQotI2RlZmluZSBJOTE1UkVHX0hXU1RBTQkJMHgwMjA5OAotI2RlZmluZSBJOTE1UkVHX0lOVF9JREVOVElUWV9SCTB4MDIwYTQKLSNkZWZpbmUgSTkxNVJFR19JTlRfTUFTS19SCTB4MDIwYTgKLSNkZWZpbmUgSTkxNVJFR19JTlRfRU5BQkxFX1IJMHgwMjBhMAotCi0jZGVmaW5lIEk5MTVSRUdfUElQRUFTVEFUCTB4NzAwMjQKLSNkZWZpbmUgSTkxNVJFR19QSVBFQlNUQVQJMHg3MTAyNAotCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTcpCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0NMRUFSCQkoMVVMPDwxKQotCi0jZGVmaW5lIFNSWF9JTkRFWAkJMHgzYzQKLSNkZWZpbmUgU1JYX0RBVEEJCTB4M2M1Ci0jZGVmaW5lIFNSMDEJCQkxCi0jZGVmaW5lIFNSMDFfU0NSRUVOX09GRgkJKDE8PDUpCi0KLSNkZWZpbmUgUFBDUgkJCTB4NjEyMDQKLSNkZWZpbmUgUFBDUl9PTgkJCSgxPDwwKQotCi0jZGVmaW5lIERWT0IJCQkweDYxMTQwCi0jZGVmaW5lIERWT0JfT04JCQkoMTw8MzEpCi0jZGVmaW5lIERWT0MJCQkweDYxMTYwCi0jZGVmaW5lIERWT0NfT04JCQkoMTw8MzEpCi0jZGVmaW5lIExWRFMJCQkweDYxMTgwCi0jZGVmaW5lIExWRFNfT04JCQkoMTw8MzEpCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EUE1TX01BU0sJCSh+KDM8PDEwKSkKLSNkZWZpbmUgQURQQV9EUE1TX09OCQkoMDw8MTApCi0jZGVmaW5lIEFEUEFfRFBNU19TVVNQRU5ECSgxPDwxMCkKLSNkZWZpbmUgQURQQV9EUE1TX1NUQU5EQlkJKDI8PDEwKQotI2RlZmluZSBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCi0KLSNkZWZpbmUgTk9QSUQgICAgICAgICAgICAgICAgICAgMHgyMDk0Ci0jZGVmaW5lIExQX1JJTkcJCQkweDIwMzAKLSNkZWZpbmUgSFBfUklORwkJCTB4MjA0MAotLyogVGhlIGJpbm5lciBoYXMgaXRzIG93biByaW5nIGJ1ZmZlcjoKLSAqLwotI2RlZmluZSBIV0JfUklORwkJMHgyNDAwCi0KLSNkZWZpbmUgUklOR19UQUlMCQkweDAwCi0jZGVmaW5lIFRBSUxfQUREUgkJMHgwMDFGRkZGOAotI2RlZmluZSBSSU5HX0hFQUQJCTB4MDQKLSNkZWZpbmUgSEVBRF9XUkFQX0NPVU5UCQkweEZGRTAwMDAwCi0jZGVmaW5lIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKLSNkZWZpbmUgSEVBRF9BRERSCQkweDAwMUZGRkZDCi0jZGVmaW5lIFJJTkdfU1RBUlQJCTB4MDgKLSNkZWZpbmUgU1RBUlRfQUREUgkJMHgweEZGRkZGMDAwCi0jZGVmaW5lIFJJTkdfTEVOCQkweDBDCi0jZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKLSNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2Ci0jZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgotI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKLSNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCi0jZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCi0KLS8qIEluc3RydWN0aW9uIHBhcnNlciBlcnJvciByZWc6Ci0gKi8KLSNkZWZpbmUgSVBFSVIJCQkweDIwODgKLQotLyogU2NyYXRjaCBwYWQgZGVidWcgMCByZWc6Ci0gKi8KLSNkZWZpbmUgU0NQRDAJCQkweDIwOWMKLQotLyogRXJyb3Igc3RhdHVzIHJlZzoKLSAqLwotI2RlZmluZSBFU1IJCQkweDIwYjgKLQotLyogU2Vjb25kYXJ5IERNQSBmZXRjaCBhZGRyZXNzIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBETUFfRkFERF9TCQkweDIwZDQKLQotLyogTWVtb3J5IEludGVyZmFjZSBBcmJpdHJhdGlvbiBTdGF0ZQotICovCi0jZGVmaW5lIE1JX0FSQl9TVEFURQkJMHgyMGU0Ci0KLS8qIENhY2hlIG1vZGUgMCByZWcuCi0gKiAgLSBNYW5pcHVsYXRpbmcgcmVuZGVyIGNhY2hlIGJlaGF2aW91ciBpcyBjZW50cmFsCi0gKiAgICB0byB0aGUgY29uY2VwdCBvZiB6b25lIHJlbmRlcmluZywgdHVuaW5nIHRoaXMgcmVnIGNhbiBoZWxwIGF2b2lkCi0gKiAgICB1bm5lY2Vzc2FyeSByZW5kZXIgY2FjaGUgcmVhZHMgYW5kIGV2ZW4gd3JpdGVzIChmb3Igei9zdGVuY2lsKQotICogICAgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc2NlbmUuCisvKioKKyAqIFJlYWRzIGEgZHdvcmQgb3V0IG9mIHRoZSBzdGF0dXMgcGFnZSwgd2hpY2ggaXMgd3JpdHRlbiB0byBmcm9tIHRoZSBjb21tYW5kCisgKiBxdWV1ZSBieSBhdXRvbWF0aWMgdXBkYXRlcywgTUlfUkVQT1JUX0hFQUQsIE1JX1NUT1JFX0RBVEFfSU5ERVgsIG9yCisgKiBNSV9TVE9SRV9EQVRBX0lNTS4KICAqCi0gKiAtIFRvIGNoYW5nZSBhIGJpdCwgd3JpdGUgdG8gdGhpcyByZWcgd2l0aCBhIG1hc2sgYml0IHNldCBhbmQgdGhlCi0gKiBiaXQgb2YgaW50ZXJlc3QgZWl0aGVyIHNldCBvciBjbGVhcmVkLiAgRUc6IChCSVQ8PDE2KSB8IEJJVCB0byBzZXQuCisgKiBUaGUgZm9sbG93aW5nIGR3b3JkcyBoYXZlIGEgcmVzZXJ2ZWQgbWVhbmluZzoKKyAqIDB4MDA6IElTUiBjb3B5LCB1cGRhdGVkIHdoZW4gYW4gSVNSIGJpdCBub3Qgc2V0IGluIHRoZSBIV1NUQU0gY2hhbmdlcy4KKyAqIDB4MDQ6IHJpbmcgMCBoZWFkIHBvaW50ZXIKKyAqIDB4MDU6IHJpbmcgMSBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MDY6IHJpbmcgMiBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MTAtMHgxYjogQ29udGV4dCBzdGF0dXMgRFdvcmRzIChHTTQ1KQorICogMHgxZjogTGFzdCB3cml0dGVuIHN0YXR1cyBvZmZzZXQuIChHTTQ1KQorICoKKyAqIFRoZSBhcmVhIGZyb20gZHdvcmQgMHgyMCB0byAweDNmZiBpcyBhdmFpbGFibGUgZm9yIGRyaXZlciB1c2FnZS4KICAqLwotI2RlZmluZSBDYWNoZV9Nb2RlXzAJCTB4MjEyMAotI2RlZmluZSBDQUNIRV9NT0RFXzAJCTB4MjEyMAotI2RlZmluZSBDTTBfTUFTS19TSElGVCAgICAgICAgICAxNgotI2RlZmluZSBDTTBfSVpfT1BUX0RJU0FCTEUgICAgICAoMTw8NikKLSNkZWZpbmUgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCi0jZGVmaW5lIENNMF9ERVBUSF9FVklDVF9ESVNBQkxFICgxPDw0KQotI2RlZmluZSBDTTBfQ09MT1JfRVZJQ1RfRElTQUJMRSAoMTw8MykKLSNkZWZpbmUgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCi0jZGVmaW5lIENNMF9SQ19PUF9GTFVTSF9ESVNBQkxFICgxPDwwKQotCi0KLS8qIEdyYXBoaWNzIGZsdXNoIGNvbnRyb2wuICBBIENQVSB3cml0ZSBmbHVzaGVzIHRoZSBHV0Igb2YgYWxsIHdyaXRlcy4KLSAqIFRoZSBkYXRhIGlzIGRpc2NhcmRlZC4KLSAqLwotI2RlZmluZSBHRlhfRkxTSF9DTlRMCQkweDIxNzAKLQotLyogQmlubmVyIGNvbnRyb2wuICBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmluIHBvaW50ZXIgbGlzdDoKLSAqLwotI2RlZmluZSBCSU5DVEwJCQkweDI0MjAKLSNkZWZpbmUgQkNfTUFTSwkJCSgxIDw8IDkpCi0KLS8qIEJpbm5lZCBzY2VuZSBpbmZvLgotICovCi0jZGVmaW5lIEJJTlNDRU5FCQkweDI0MjgKLSNkZWZpbmUgQlNfT1BfTE9BRAkJKDEgPDwgOCkKLSNkZWZpbmUgQlNfTUFTSwkJCSgxIDw8IDIyKQotCi0vKiBCaW4gY29tbWFuZCBwYXJzZXIgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEJDUEQJCQkweDI0ODAKLQotLyogQmluIG1lbW9yeSBjb250cm9sIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCTUNECQkJMHgyNDg0Ci0KLS8qIEJpbiBkYXRhIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCRENECQkJMHgyNDg4Ci0KLS8qIEJpbm5lciBwb2ludGVyIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCUENECQkJMHgyNDhjCi0KLS8qIEJpbm5lciBzY3JhdGNoIHBhZCBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQklOU0tQRAkJCTB4MjRmMAotCi0vKiBIV0Igc2NyYXRjaCBwYWQgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEhXQlNLUEQJCQkweDI0ZjQKLQotLyogQmlubmVyIG1lbW9yeSBwb29sIHJlZzoKLSAqLwotI2RlZmluZSBCTVBfQlVGRkVSCQkweDI0MzAKLSNkZWZpbmUgQk1QX1BBR0VfU0laRV80SwkoMCA8PCAxMCkKLSNkZWZpbmUgQk1QX0JVRkZFUl9TSVpFX1NISUZUCTEKLSNkZWZpbmUgQk1QX0VOQUJMRQkJKDEgPDwgMCkKLQotLyogR2V0L3B1dCBtZW1vcnkgZnJvbSB0aGUgYmlubmVyIG1lbW9yeSBwb29sOgotICovCi0jZGVmaW5lIEJNUF9HRVQJCQkweDI0MzgKLSNkZWZpbmUgQk1QX1BVVAkJCTB4MjQ0MAotI2RlZmluZSBCTVBfT0ZGU0VUX1NISUZUCTUKLQotLyogM0Qgc3RhdGUgcGFja2V0czoKLSAqLwotI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SICAgICAgICAgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCi0jZGVmaW5lIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCi0jZGVmaW5lIFNDX0VOQUJMRV9NQVNLICAgICAgICAgICgweDE8PDApCi0jZGVmaW5lIFNDX0VOQUJMRSAgICAgICAgICAgICAgICgweDE8PDApCi0KLSNkZWZpbmUgR0ZYX09QX0xPQURfSU5ESVJFQ1QgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4Nzw8MTYpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCi0jZGVmaW5lIFNDSV9ZTUlOX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNSU5fTUFTSyAgICAgICgweGZmZmY8PDApCi0jZGVmaW5lIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNQVhfTUFTSyAgICAgICgweGZmZmY8PDApCi0KLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKLSNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCi0jZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQotI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCi0KLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSAoKDB4NzkwMDw8MTYpfDB4MikKLQotI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQJKDE8PDExKQotCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJKCgweDMwPDwyMyl8MSkKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCSgweDMxPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX0VORAkoMHhBPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1ICgxPDw4KQotCi0jZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgICgoMHgzPDwyMykpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0JfRkxJUCAgICAgICgxPDw2KQotI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCi0KLSNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wgICgoMHgxMjw8MjMpKQotCi0jZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCi0jZGVmaW5lIEFTWU5DX0ZMSVAgICAgICAgICAgICAgICAgKDE8PDIyKQotI2RlZmluZSBESVNQTEFZX1BMQU5FX0EgICAgICAgICAgICgwPDwyMCkKLSNkZWZpbmUgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCi0KLS8qIERpc3BsYXkgcmVncyAqLwotI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCi0jZGVmaW5lIERTUEJDTlRSICAgICAgICAgICAgICAgIDB4NzExODAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sgICAgICAgICAgICAgICAgICgxPDwyNCkKLQotLyogRGVmaW5lIHRoZSByZWdpb24gb2YgaW50ZXJlc3QgZm9yIHRoZSBiaW5uZXI6Ci0gKi8KLSNkZWZpbmUgQ01EX09QX0JJTl9DT05UUk9MCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODQ8PDE2KXw0KQotCi0jZGVmaW5lIENNRF9PUF9ERVNUQlVGRkVSX0lORk8JICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4ZTw8MTYpfDEpCi0KLSNkZWZpbmUgQ01EX01JX0ZMVVNIICAgICAgICAgKDB4MDQgPDwgMjMpCi0jZGVmaW5lIE1JX05PX1dSSVRFX0ZMVVNIICAgICgxIDw8IDIpCi0jZGVmaW5lIE1JX1JFQURfRkxVU0ggICAgICAgICgxIDw8IDApCi0jZGVmaW5lIE1JX0VYRV9GTFVTSCAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIE1JX0VORF9TQ0VORSAgICAgICAgICgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLwotI2RlZmluZSBNSV9TQ0VORV9DT1VOVCAgICAgICAoMSA8PCAzKSAvKiBqdXN0IGluY3JlbWVudCBzY2VuZSBjb3VudCAqLwotCi0jZGVmaW5lIEJSRUFEQ1JVTUJfQklUUyAzMQotI2RlZmluZSBCUkVBRENSVU1CX01BU0sgKCgxVSA8PCBCUkVBRENSVU1CX0JJVFMpIC0gMSkKLQotI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs1XSkKICNkZWZpbmUgUkVBRF9IV1NQKGRldl9wcml2LCByZWcpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVtyZWddKQorI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpIFJFQURfSFdTUChkZXZfcHJpdiwgNSkKKyNkZWZpbmUgSTkxNV9HRU1fSFdTX0lOREVYCQkweDIwCiAKLSNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKLSNkZWZpbmUgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9TSElGVAkJKDE3KQotCi0jZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MAotLyoqCi0gKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKLSAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCi0gKgotICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgotICovCi0jZGVmaW5lIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFTSwkJKDB4N2ZmZiA8PCAxNykKLSNkZWZpbmUgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQotLyoqCi0gKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCi0gKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgotICoKLSAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCi0gKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KLSAqLwotI2RlZmluZSBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCi0jZGVmaW5lIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJCSgweGZmZmYpCi0KLSNkZWZpbmUgSTkxNV9HQ0ZHQwkJCTB4ZjAKLSNkZWZpbmUgSTkxNV9MT1dfRlJFUVVFTkNZX0VOQUJMRQkJKDEgPDwgNykKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCQkoMCA8PCA0KQotI2RlZmluZSBJOTE1X0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkJKDQgPDwgNCkKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLX01BU0sJCQkoNyA8PCA0KQotCi0jZGVmaW5lIEk4NTVfSFBMTENDCQkJMHhjMAotI2RlZmluZSBJODU1X0NMT0NLX0NPTlRST0xfTUFTSwkJCSgzIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTMzXzIwMAkJCSgwIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzIwMAkJCSgxIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzEzMwkJCSgyIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTY2XzI1MAkJCSgzIDw8IDApCi0KLS8qIHAzMTcsIDMxOQotICovCi0jZGVmaW5lIFZDTEsyX1ZDT19NICAgICAgICAweDYwMDggLyogdHJlYXQgYXMgMTYgYml0PyAoaW5jbHVkZXMgbXNicykgKi8KLSNkZWZpbmUgVkNMSzJfVkNPX04gICAgICAgIDB4NjAwYQotI2RlZmluZSBWQ0xLMl9WQ09fRElWX1NFTCAgMHg2MDEyCi0KLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTAgICAweDYwMDAKLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTEgICAweDYwMDQKLSNkZWZpbmUgVkNMS19QT1NUX0RJVgkgICAgMHg2MDEwCi0vKiogU2VsZWN0cyBhIHBvc3QgZGl2aXNvciBvZiA0IGluc3RlYWQgb2YgMi4gKi8KLSMgZGVmaW5lIFZHQTFfUERfUDJfRElWXzQJKDEgPDwgMTUpCi0vKiogT3ZlcnJpZGVzIHRoZSBwMiBwb3N0IGRpdmlzb3IgZmllbGQgKi8KLSMgZGVmaW5lIFZHQTFfUERfUDFfRElWXzIJKDEgPDwgMTMpCi0jIGRlZmluZSBWR0ExX1BEX1AxX1NISUZUCTgKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0ExX1BEX1AxX01BU0sJKDB4MWYgPDwgOCkKLS8qKiBTZWxlY3RzIGEgcG9zdCBkaXZpc29yIG9mIDQgaW5zdGVhZCBvZiAyLiAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMl9ESVZfNAkoMSA8PCA3KQotLyoqIE92ZXJyaWRlcyB0aGUgcDIgcG9zdCBkaXZpc29yIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCi0jIGRlZmluZSBWR0EwX1BEX1AxX1NISUZUCTAKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX01BU0sJKDB4MWYgPDwgMCkKLQotLyogUENJIEQgc3RhdGUgY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBEX1NUQVRFCQkweDYxMDQKLSNkZWZpbmUgRFNQQ0xLX0dBVEVfRAkweDYyMDAKLQotLyogSTgzMCBDUlRDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCi0jZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKLSNkZWZpbmUgSFNZTkNfQQkJMHg2MDAwOAotI2RlZmluZSBWVE9UQUxfQQkweDYwMDBjCi0jZGVmaW5lIFZCTEFOS19BCTB4NjAwMTAKLSNkZWZpbmUgVlNZTkNfQQkJMHg2MDAxNAotI2RlZmluZSBQSVBFQVNSQwkweDYwMDFjCi0jZGVmaW5lIEJDTFJQQVRfQQkweDYwMDIwCi0jZGVmaW5lIFZTWU5DU0hJRlRfQQkweDYwMDI4Ci0KLSNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAotI2RlZmluZSBIQkxBTktfQgkweDYxMDA0Ci0jZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKLSNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYwotI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCi0jZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKLSNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYwotI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAotI2RlZmluZSBWU1lOQ1NISUZUX0IJMHg2MTAyOAotCi0jZGVmaW5lIFBQX1NUQVRVUwkweDYxMjAwCi0jIGRlZmluZSBQUF9PTgkJCQkJKDEgPDwgMzEpCi0vKioKLSAqIEluZGljYXRlcyB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhbmVsIGFyZSBvbjoKLSAqCi0gKiAtIFBMTCBlbmFibGVkCi0gKiAtIHBpcGUgZW5hYmxlZAotICogLSBMVkRTL0RWT0IvRFZPQyBvbgotICovCi0jIGRlZmluZSBQUF9SRUFEWQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX05PTkUJCQkoMCA8PCAyOCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX09OCQkJCSgxIDw8IDI4KQotIyBkZWZpbmUgUFBfU0VRVUVOQ0VfT0ZGCQkJKDIgPDwgMjgpCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9NQVNLCQkJMHgzMDAwMDAwMAotI2RlZmluZSBQUF9DT05UUk9MCTB4NjEyMDQKLSMgZGVmaW5lIFBPV0VSX1RBUkdFVF9PTgkJCSgxIDw8IDApCi0KLSNkZWZpbmUgTFZEU1BQX09OICAgICAgIDB4NjEyMDgKLSNkZWZpbmUgTFZEU1BQX09GRiAgICAgIDB4NjEyMGMKLSNkZWZpbmUgUFBfQ1lDTEUgICAgICAgIDB4NjEyMTAKLQotI2RlZmluZSBQRklUX0NPTlRST0wJMHg2MTIzMAotIyBkZWZpbmUgUEZJVF9FTkFCTEUJCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBQRklUX1BJUEVfTUFTSwkJCQkoMyA8PCAyOSkKLSMgZGVmaW5lIFBGSVRfUElQRV9TSElGVAkJCTI5Ci0jIGRlZmluZSBWRVJUX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgMTApCi0jIGRlZmluZSBWRVJUX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfTUFTSwkJCSgzIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9BVVRPX1NDQUxFCQkJKDEgPDwgOSkKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgNikKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfTUFTSwkJCSgzIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9BVVRPX1NDQUxFCQkJKDEgPDwgNSkKLSMgZGVmaW5lIFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRQkJKDEgPDwgMykKLQotI2RlZmluZSBQRklUX1BHTV9SQVRJT1MJMHg2MTIzNAotIyBkZWZpbmUgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCi0jIGRlZmluZSBQRklUX0hPUklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCi0KLSNkZWZpbmUgUEZJVF9BVVRPX1JBVElPUwkweDYxMjM4Ci0KLQotI2RlZmluZSBEUExMX0EJCTB4MDYwMTQKLSNkZWZpbmUgRFBMTF9CCQkweDA2MDE4Ci0jIGRlZmluZSBEUExMX1ZDT19FTkFCTEUJCQkoMSA8PCAzMSkKLSMgZGVmaW5lIERQTExfRFZPX0hJR0hfU1BFRUQJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIERQTExfU1lOQ0xPQ0tfRU5BQkxFCQkJKDEgPDwgMjkpCi0jIGRlZmluZSBEUExMX1ZHQV9NT0RFX0RJUwkJCSgxIDw8IDI4KQotIyBkZWZpbmUgRFBMTEJfTU9ERV9EQUNfU0VSSUFMCQkJKDEgPDwgMjYpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX01PREVfTFZEUwkJCSgyIDw8IDI2KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX01PREVfTUFTSwkJCQkoMyA8PCAyNikKLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTAJKDAgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNQkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0CQkoMCA8PCAyNCkgLyogaTkxNSAqLwotIyBkZWZpbmUgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNwkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfUDJfQ0xPQ0tfRElWX01BU0sJCQkweDAzMDAwMDAwIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkJMHgwMGZmMDAwMCAvKiBpOTE1ICovCi0vKioKLSAqICBUaGUgaTgzMCBnZW5lcmF0aW9uLCBpbiBEQUMvc2VyaWFsIG1vZGUsIGRlZmluZXMgcDEgYXMgdHdvIHBsdXMgdGhpcwotICogYml0ZmllbGQsIG9yIGp1c3QgMiBpZiBQTExfUDFfRElWSURFX0JZX1RXTyBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwCTB4MDAxZjAwMDAKLS8qKgotICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KLSAqIHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KLSAqLwotIyBkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzBfTFZEUwkweDAwM2YwMDAwCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCQkxNgotIyBkZWZpbmUgUExMX1AyX0RJVklERV9CWV80CQkJKDEgPDwgMjMpIC8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLwotIyBkZWZpbmUgUExMX1AxX0RJVklERV9CWV9UV08JCQkoMSA8PCAyMSkgLyogaTgzMCAqLwotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9EUkVGQ0xLCQkJKDAgPDwgMTMpCi0jIGRlZmluZSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5BCQkJKDEgPDwgMTMpIC8qIGk4MzAgKi8KLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCQkoMiA8PCAxMykgLyogU0RWTyBUVkNMS0lOICovCi0jIGRlZmluZSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOCSgzIDw8IDEzKQotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9NQVNLCQkJKDMgPDwgMTMpCi0jIGRlZmluZSBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVAkJOQotLyoKLSAqIFBhcmFsbGVsIHRvIFNlcmlhbCBMb2FkIFB1bHNlIHBoYXNlIHNlbGVjdGlvbi4KLSAqIFNlbGVjdHMgdGhlIHBoYXNlIGZvciB0aGUgMTBYIERQTEwgY2xvY2sgZm9yIHRoZSBQQ0llCi0gKiBkaWdpdGFsIGRpc3BsYXkgcG9ydC4gVGhlIHJhbmdlIGlzIDQgdG8gMTM7IDEwIG9yIG1vcmUKLSAqIGlzIGp1c3QgYSBmbGlwIGRlbGF5LiBUaGUgZGVmYXVsdCBpcyA2Ci0gKi8KLSMgZGVmaW5lIFBMTF9MT0FEX1BVTFNFX1BIQVNFX01BU0sJCSgweGYgPDwgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQpCi0jIGRlZmluZSBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCi0KLS8qKgotICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jIGRlZmluZSBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKLSMgZGVmaW5lIFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUwkJNAotIyBkZWZpbmUgU0RWT19NVUxUSVBMSUVSX1NISUZUX1ZHQQkJMAotCi0vKiogQGRlZmdyb3VwIERQTExfTUQKLSAqIEB7Ci0gKi8KLS8qKiBQaXBlIEEgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0FfTUQJCTB4MDYwMWMKLS8qKiBQaXBlIEIgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0JfTUQJCTB4MDYwMjAKLS8qKgotICogVURJIHBpeGVsIGRpdmlkZXIsIGNvbnRyb2xsaW5nIGhvdyBtYW55IHBpeGVscyBhcmUgc3R1ZmZlZCBpbnRvIGEgcGFja2V0LgotICoKLSAqIFZhbHVlIGlzIHBpeGVscyBtaW51cyAxLiAgTXVzdCBiZSBzZXQgdG8gMSBwaXhlbCBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLCQkweDNmMDAwMDAwCi0jIGRlZmluZSBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAotLyoqIFVESSBwaXhlbCBkaXZpZGVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLLiAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfU0hJRlQJCTE2Ci0vKioKLSAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cwotICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQotICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKLSAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKLSAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCi0gKgotICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKLSAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCi0gKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKLSAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgotICoKLSAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAotICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLCQkweDAwMDAzZjAwCi0jIGRlZmluZSBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUCQk4Ci0vKiogU0RWTy9VREkgcGl4ZWwgbXVsdGlwbGllciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSy4KLSAqIFRoaXMgYmVzdCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgKDMpIG9yIHRoZSBDUlQgd29uJ3Qgd29yay4gTm8sCi0gKiBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMuLi4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCi0jIGRlZmluZSBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9TSElGVAkwCi0vKiogQH0gKi8KLQotI2RlZmluZSBEUExMX1RFU1QJCTB4NjA2YwotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8xCQkJKDAgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX1NEVk9fRElWXzIJCQkoMSA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfNAkJCSgyIDw8IDIyKQotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCQkoMyA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfTl9CWVBBU1MJCQkoMSA8PCAxOSkKLSMgZGVmaW5lIERQTExCX1RFU1RfTV9CWVBBU1MJCQkoMSA8PCAxOCkKLSMgZGVmaW5lIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDE2KQotIyBkZWZpbmUgRFBMTEFfVEVTVF9OX0JZUEFTUwkJCSgxIDw8IDMpCi0jIGRlZmluZSBEUExMQV9URVNUX01fQllQQVNTCQkJKDEgPDwgMikKLSMgZGVmaW5lIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDApCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EQUNfRU5BQkxFCQkoMTw8MzEpCi0jZGVmaW5lIEFEUEFfREFDX0RJU0FCTEUJMAotI2RlZmluZSBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQotI2RlZmluZSBBRFBBX1BJUEVfQV9TRUxFQ1QJMAotI2RlZmluZSBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQotI2RlZmluZSBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCi0jZGVmaW5lIEFEUEFfU0VUU19IVlBPTEFSSVRZCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDExKQotI2RlZmluZSBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDEwKQotI2RlZmluZSBBRFBBX0hTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfSElHSAkoMTw8NCkKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfTE9XCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfSElHSAkoMTw8MykKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKLQotI2RlZmluZSBGUEEwCQkweDA2MDQwCi0jZGVmaW5lIEZQQTEJCTB4MDYwNDQKLSNkZWZpbmUgRlBCMAkJMHgwNjA0OAotI2RlZmluZSBGUEIxCQkweDA2MDRjCi0jIGRlZmluZSBGUF9OX0RJVl9NQVNLCQkJCTB4MDAzZjAwMDAKLSMgZGVmaW5lIEZQX05fRElWX1NISUZUCQkJCTE2Ci0jIGRlZmluZSBGUF9NMV9ESVZfTUFTSwkJCQkweDAwMDAzZjAwCi0jIGRlZmluZSBGUF9NMV9ESVZfU0hJRlQJCQk4Ci0jIGRlZmluZSBGUF9NMl9ESVZfTUFTSwkJCQkweDAwMDAwMDNmCi0jIGRlZmluZSBGUF9NMl9ESVZfU0hJRlQJCQkwCi0KLQotI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKLSMgZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCi0jIGRlZmluZSBTRFZPQ19IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI1KQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCi0jIGRlZmluZSBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QJCSgxIDw8IDMpCi0KLSNkZWZpbmUgUE9SVF9IT1RQTFVHX1NUQVQJMHg2MTExNAotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDExKQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SCQkoMyA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FCQkoMCA8PCA4KQotIyBkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA3KQotIyBkZWZpbmUgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQotCi0jZGVmaW5lIFNEVk9CCQkJMHg2MTE0MAotI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKLSNkZWZpbmUgU0RWT19FTkFCTEUJCQkJKDEgPDwgMzEpCi0jZGVmaW5lIFNEVk9fUElQRV9CX1NFTEVDVAkJCSgxIDw8IDMwKQotI2RlZmluZSBTRFZPX1NUQUxMX1NFTEVDVAkJCSgxIDw8IDI5KQotI2RlZmluZSBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJCQkoMSA8PCAyNikKLS8qKgotICogOTE1Ry9HTSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogUHJvZ3JhbW1lZCB2YWx1ZSBpcyBtdWx0aXBsaWVyIC0gMSwgdXAgdG8gNXguCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCQkJKDcgPDwgMjMpCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfTUFTSwkJCSgxNSA8PCAxOSkKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfREVGQVVMVAkJKDYgPDwgMTkpCi0jZGVmaW5lIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkJKDEgPDwgMTgpCi0jZGVmaW5lIFNEVk9DX0dBTkdfTU9ERQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgU0RWT19CT1JERVJfRU5BQkxFCQkJKDEgPDwgNykKLSNkZWZpbmUgU0RWT0JfUENJRV9DT05DVVJSRU5DWQkJCSgxIDw8IDMpCi0jZGVmaW5lIFNEVk9fREVURUNURUQJCQkJKDEgPDwgMikKLS8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLwotI2RlZmluZSBTRFZPQl9QUkVTRVJWRV9NQVNLCQkJKCgxIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgxIDw8IDE0KSkKLSNkZWZpbmUgU0RWT0NfUFJFU0VSVkVfTUFTSwkJCSgxIDw8IDE3KQotCi0vKiogQGRlZmdyb3VwIExWRFMKLSAqIEB7Ci0gKi8KLS8qKgotICogVGhpcyByZWdpc3RlciBjb250cm9scyB0aGUgTFZEUyBvdXRwdXQgZW5hYmxlLCBwaXBlIHNlbGVjdGlvbiwgYW5kIGRhdGEKLSAqIGZvcm1hdCBzZWxlY3Rpb24uCi0gKgotICogQWxsIG9mIHRoZSBjbG9jay9kYXRhIHBhaXJzIGFyZSBmb3JjZSBwb3dlcmVkIGRvd24gYnkgcG93ZXIgc2VxdWVuY2luZy4KLSAqLwotI2RlZmluZSBMVkRTCQkJMHg2MTE4MAotLyoqCi0gKiBFbmFibGVzIHRoZSBMVkRTIHBvcnQuICBUaGlzIGJpdCBtdXN0IGJlIHNldCBiZWZvcmUgRFBMTHMgYXJlIGVuYWJsZWQsIGFzCi0gKiB0aGUgRFBMTCBzZW1hbnRpY3MgY2hhbmdlIHdoZW4gdGhlIExWRFMgaXMgYXNzaWduZWQgdG8gdGhhdCBwaXBlLgotICovCi0jIGRlZmluZSBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKLS8qKiBTZWxlY3RzIHBpcGUgQiBmb3IgTFZEUyBkYXRhLiAgTXVzdCBiZSBzZXQgb24gcHJlLTk2NS4gKi8KLSMgZGVmaW5lIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKLQotLyoqCi0gKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKLSAqIHBpeGVsLgotICovCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9NQVNLCSgzIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9ET1dOCSgwIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQotLyoqCi0gKiBDb250cm9scyB0aGUgQTMgZGF0YSBwYWlyLCB3aGljaCBjb250YWlucyB0aGUgYWRkaXRpb25hbCBMU0JzIGZvciAyNCBiaXQKLSAqIG1vZGUuICBPbmx5IGVuYWJsZWQgaWYgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAgYWxzbyBpbmRpY2F0ZXMgaXQgc2hvdWxkIGJlCi0gKiBvbi4KLSAqLwotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9VUAkJKDMgPDwgNikKLS8qKgotICogQ29udHJvbHMgdGhlIENMS0IgcGFpci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdoZW4gTFZEU19CMEIzX1BPV0VSX1VQCi0gKiBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9NQVNLCQkoMyA8PCA0KQotIyBkZWZpbmUgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCi0jIGRlZmluZSBMVkRTX0NMS0JfUE9XRVJfVVAJCSgzIDw8IDQpCi0KLS8qKgotICogQ29udHJvbHMgdGhlIEIwLUIzIGRhdGEgcGFpcnMuICBUaGlzIG11c3QgYmUgc2V0IHRvIG1hdGNoIHRoZSBEUExMIHAyCi0gKiBzZXR0aW5nIGZvciB3aGV0aGVyIHdlIGFyZSBpbiBkdWFsLWNoYW5uZWwgbW9kZS4gIFRoZSBCMyBwYWlyIHdpbGwKLSAqIGFkZGl0aW9uYWxseSBvbmx5IGJlIHBvd2VyZWQgdXAgd2hlbiBMVkRTX0EzX1BPV0VSX1VQIGlzIHNldC4KLSAqLwotIyBkZWZpbmUgTFZEU19CMEIzX1BPV0VSX01BU0sJCSgzIDw8IDIpCi0jIGRlZmluZSBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKLSMgZGVmaW5lIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKLQotI2RlZmluZSBQSVBFQUNPTkYgMHg3MDAwOAotI2RlZmluZSBQSVBFQUNPTkZfRU5BQkxFCSgxPDwzMSkKLSNkZWZpbmUgUElQRUFDT05GX0RJU0FCTEUJMAotI2RlZmluZSBQSVBFQUNPTkZfRE9VQkxFX1dJREUJKDE8PDMwKQotI2RlZmluZSBJOTY1X1BJUEVDT05GX0FDVElWRQkoMTw8MzApCi0jZGVmaW5lIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCi0jZGVmaW5lIFBJUEVBQ09ORl9QSVBFX1VOTE9DS0VEIDAKLSNkZWZpbmUgUElQRUFDT05GX1BJUEVfTE9DS0VECSgxPDwyNSkKLSNkZWZpbmUgUElQRUFDT05GX1BBTEVUVEUJMAotI2RlZmluZSBQSVBFQUNPTkZfR0FNTUEJCSgxPDwyNCkKLSNkZWZpbmUgUElQRUNPTkZfRk9SQ0VfQk9SREVSCSgxPDwyNSkKLSNkZWZpbmUgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9XX0ZJRUxEX0lORElDQVRJT04JKDYgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQotCi0jZGVmaW5lIERTUEFSQgkgIDB4NzAwMzAKLSNkZWZpbmUgRFNQQVJCX0NTVEFSVF9NQVNLCSgweDdmIDw8IDcpCi0jZGVmaW5lIERTUEFSQl9DU1RBUlRfU0hJRlQJNwotI2RlZmluZSBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCQkgCi0jZGVmaW5lIERTUEFSQl9CU1RBUlRfU0hJRlQJMAotCi0jZGVmaW5lIFBJUEVCQ09ORiAweDcxMDA4Ci0jZGVmaW5lIFBJUEVCQ09ORl9FTkFCTEUJKDE8PDMxKQotI2RlZmluZSBQSVBFQkNPTkZfRElTQUJMRQkwCi0jZGVmaW5lIFBJUEVCQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCi0jZGVmaW5lIFBJUEVCQ09ORl9ESVNBQkxFCTAKLSNkZWZpbmUgUElQRUJDT05GX0dBTU1BCQkoMTw8MjQpCi0jZGVmaW5lIFBJUEVCQ09ORl9QQUxFVFRFCTAKLQotI2RlZmluZSBQSVBFQkdDTUFYUkVECQkweDcxMDEwCi0jZGVmaW5lIFBJUEVCR0NNQVhHUkVFTgkJMHg3MTAxNAotI2RlZmluZSBQSVBFQkdDTUFYQkxVRQkJMHg3MTAxOAotI2RlZmluZSBQSVBFQlNUQVQJCTB4NzEwMjQKLSNkZWZpbmUgUElQRUJGUkFNRUhJR0gJCTB4NzEwNDAKLSNkZWZpbmUgUElQRUJGUkFNRVBJWEVMCQkweDcxMDQ0Ci0KLSNkZWZpbmUgRFNQQUNOVFIJCTB4NzAxODAKLSNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKLSNkZWZpbmUgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfRElTQUJMRQkJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0VOQUJMRQkJCSgxPDwzMCkKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0RJU0FCTEUJCQkwCi0jZGVmaW5lIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV84QlBQCQkJCSgweDI8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzE2QlBQCQkJCSgweDU8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFAJCQkJKDB4Nzw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkJKDE8PDI1KQotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCQkoMTw8MjQpCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9BCQkJMAotI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKLSNkZWZpbmUgRElTUFBMQU5FX1NSQ19LRVlfRU5BQkxFCQkoMTw8MjIpCi0jZGVmaW5lIERJU1BQTEFORV9TUkNfS0VZX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQotI2RlZmluZSBESVNQUExBTkVfTk9fTElORV9ET1VCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkJMAotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX1BPTEFSSVRZX1NFQ09ORAkoMTw8MTgpCi0vKiBwbGFuZSBCIG9ubHkgKi8KLSNkZWZpbmUgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0VOQUJMRQkJKDE8PDE1KQotI2RlZmluZSBESVNQUExBTkVfQUxQSEFfVFJBTlNfRElTQUJMRQkJMAotI2RlZmluZSBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVlBCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkJKDEpCi0KLSNkZWZpbmUgRFNQQUJBU0UJCTB4NzAxODQKLSNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAotCi0jZGVmaW5lIERTUEJCQVNFCQkweDcxMTg0Ci0jZGVmaW5lIERTUEJBRERSCQlEU1BCQkFTRQotI2RlZmluZSBEU1BCU1RSSURFCQkweDcxMTg4Ci0KLSNkZWZpbmUgRFNQQUtFWVZBTAkJMHg3MDE5NAotI2RlZmluZSBEU1BBS0VZTUFTSwkJMHg3MDE5OAotCi0jZGVmaW5lIERTUEFQT1MJCQkweDcwMThDIC8qIHJlc2VydmVkICovCi0jZGVmaW5lIERTUEFTSVpFCQkweDcwMTkwCi0jZGVmaW5lIERTUEJQT1MJCQkweDcxMThDCi0jZGVmaW5lIERTUEJTSVpFCQkweDcxMTkwCi0KLSNkZWZpbmUgRFNQQVNVUkYJCTB4NzAxOUMKLSNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQKLQotI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QwotI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAotCi0jZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCi0jIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCi0KLS8qCi0gKiBTb21lIEJJT1Mgc2NyYXRjaCBhcmVhIHJlZ2lzdGVycy4gIFRoZSA4NDUgKGFuZCA4MzA/KSBzdG9yZSB0aGUgYW1vdW50Ci0gKiBvZiB2aWRlbyBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBCSU9TIGluIFNXRjEuCi0gKi8KLQotI2RlZmluZSBTV0YwCQkJMHg3MTQxMAotCi0vKgotICogODU1IHNjcmF0Y2ggcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNXRjEwCQkJMHg3MDQxMAotCi0jZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAotCi0vKgotICogT3ZlcmxheSByZWdpc3RlcnMuICBUaGVzZSBhcmUgb3ZlcmxheSByZWdpc3RlcnMgYWNjZXNzZWQgdmlhIE1NSU8uCi0gKiBUaG9zZSBsb2FkZWQgdmlhIHRoZSBvdmVybGF5IHJlZ2lzdGVyIHBhZ2UgYXJlIGRlZmluZWQgaW4gaTgzMF92aWRlby5jLgotICovCi0jZGVmaW5lIE9WQURECQkJMHgzMDAwMAotCi0jZGVmaW5lIERPVlNUQQkJCTB4MzAwMDgKLSNkZWZpbmUgT0NfQlVGCQkJKDB4Mzw8MjApCi0KLSNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAotI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0Ci0jZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKLSNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYwotI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCi0jZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKLS8qCi0gKiBQYWxldHRlIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIFBBTEVUVEVfQQkJMHgwYTAwMAotI2RlZmluZSBQQUxFVFRFX0IJCTB4MGE4MDAKK2V4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwogCiAjZGVmaW5lIElTX0k4MzAoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQogI2RlZmluZSBJU184NDVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKQEAgLTExMTksNyArNjM5LDcgQEAKIAogI2RlZmluZSBJU19JOTY1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyKQogCi0jZGVmaW5lIElTX0lHRF9HTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIpCisjZGVmaW5lIElTX0dNNDUoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQogCiAjZGVmaW5lIElTX0c0WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwgXAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCkBAIC0xMTMzLDkgKzY1Myw5IEBACiAJCSAgICAgIElTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikpCiAKICNkZWZpbmUgSVNfTU9CSUxFKGRldikgKElTX0k4MzAoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgXAotCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpCisJCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpCiAKLSNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfSUdEX0dNKGRldikgfHwgSVNfRzRYKGRldikpCisjZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBJU19HNFgoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjNzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTAsMCArMSwyNTU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgdWludDY0X3Qgb2Zmc2V0LAorCQkJCSB1aW50NjRfdCBzaXplLAorCQkJCSB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQKK2k5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCAqYXJncyA9IGRhdGE7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoYXJncy0+Z3R0X3N0YXJ0ID49IGFyZ3MtPmd0dF9lbmQgfHwKKwkgICAgKGFyZ3MtPmd0dF9zdGFydCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCB8fAorCSAgICAoYXJncy0+Z3R0X2VuZCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIGFyZ3MtPmd0dF9zdGFydCwKKwkgICAgYXJncy0+Z3R0X2VuZCAtIGFyZ3MtPmd0dF9zdGFydCk7CisKKwlkZXYtPmd0dF90b3RhbCA9ICh1aW50MzJfdCkgKGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIGl0LgorICovCitpbnQKK2k5MTVfZ2VtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGhhbmRsZSwgcmV0OworCisJYXJncy0+c2l6ZSA9IHJvdW5kdXAoYXJncy0+c2l6ZSwgUEFHRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCBhcmdzLT5zaXplKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXJncy0+aGFuZGxlID0gaGFuZGxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVhZHMgZGF0YSBmcm9tIHRoZSBvYmplY3QgcmVmZXJlbmNlZCBieSBoYW5kbGUuCisgKgorICogT24gZXJyb3IsIHRoZSBjb250ZW50cyBvZiAqZGF0YSBhcmUgdW5kZWZpbmVkLgorICovCitpbnQKK2k5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXNzaXplX3QgcmVhZDsKKwlsb2ZmX3Qgb2Zmc2V0OworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEJvdW5kcyBjaGVjayBzb3VyY2UuCisJICoKKwkgKiBYWFg6IFRoaXMgY291bGQgdXNlIHJldmlldyBmb3Igb3ZlcmZsb3cgaXNzdWVzLi4uCisJICovCisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CisJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUsCisJCQkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJcmVhZCA9IHZmc19yZWFkKG9iai0+ZmlscCwgKGNoYXIgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5kYXRhX3B0ciwKKwkJCWFyZ3MtPnNpemUsICZvZmZzZXQpOworCWlmIChyZWFkICE9IGFyZ3MtPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmIChyZWFkIDwgMCkKKwkJCXJldHVybiByZWFkOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2d0dF9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldDsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWNoYXIgX19pb21lbSAqdmFkZHI7CisJY2hhciAqdmFkZHJfYXRvbWljOworCWludCBpLCBvLCBsOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOworCisJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfZGF0YSwgcmVtYWluKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgMCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gaTkxNV9nZW1fc2V0X2RvbWFpbihvYmosIGZpbGVfcHJpdiwKKwkJCQkgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBpID0gcGFnZSBudW1iZXIKKwkJICogbyA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBsID0gYnl0ZXMgdG8gY29weQorCQkgKi8KKwkJaSA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCQlvID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJbCA9IHJlbWFpbjsKKwkJaWYgKChvICsgbCkgPiBQQUdFX1NJWkUpCisJCQlsID0gUEFHRV9TSVpFIC0gbzsKKworCQlwZm4gPSAoZGV2LT5hZ3AtPmJhc2UgPj4gUEFHRV9TSElGVCkgKyBpOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBsb3cgcGVyZm9ybWFuY2Ugb2YgaW91bm1hcAorCQkgKiAoYXBwcm94aW1hdGUgMTAlIGNwdSBjb3N0IG9uIG5vcm1hbCAzRCB3b3JrbG9hZHMpLgorCQkgKiBrbWFwX2F0b21pYyBvbiBISUdITUVNIGtlcm5lbHMgaGFwcGVucyB0byBsZXQgdXMgbWFwIGNhcmQKKwkJICogbWVtb3J5IHdpdGhvdXQgdGFraW5nIElQSXMuICBXaGVuIHRoZSB2bWFwIHJld29yayBsYW5kcworCQkgKiB3ZSBzaG91bGQgYmUgYWJsZSB0byBkdW1wIHRoaXMgaGFjay4KKwkJICovCisJCXZhZGRyX2F0b21pYyA9IGttYXBfYXRvbWljX3BmbihwZm4sIEtNX1VTRVIwKTsKKyNpZiBXQVRDSF9QV1JJVEUKKwkJRFJNX0lORk8oInB3cml0ZSBpICVkIG8gJWQgbCAlZCBwZm4gJWxkIHZhZGRyICVwXG4iLAorCQkJIGksIG8sIGwsIHBmbiwgdmFkZHJfYXRvbWljKTsKKyNlbmRpZgorCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHJfYXRvbWljICsgbywKKwkJCQkJCQkgICAgICB1c2VyX2RhdGEsIGwpOworCQlrdW5tYXBfYXRvbWljKHZhZGRyX2F0b21pYywgS01fVVNFUjApOworCisJCWlmICh1bndyaXR0ZW4pCisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KKwkJeworCQkJdmFkZHIgPSBpb3JlbWFwX3djKHBmbiA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUpOworI2lmIFdBVENIX1BXUklURQorCQkJRFJNX0lORk8oInB3cml0ZSBzbG93IGkgJWQgbyAlZCBsICVkICIKKwkJCQkgInBmbiAlbGQgdmFkZHIgJXBcbiIsCisJCQkJIGksIG8sIGwsIHBmbiwgdmFkZHIpOworI2VuZGlmCisJCQlpZiAodmFkZHIgPT0gTlVMTCkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciArIG8sIHVzZXJfZGF0YSwgbCk7CisjaWYgV0FUQ0hfUFdSSVRFCisJCQlEUk1fSU5GTygidW53cml0dGVuICVsZFxuIiwgdW53cml0dGVuKTsKKyNlbmRpZgorCQkJaW91bm1hcCh2YWRkcik7CisJCQlpZiAodW53cml0dGVuKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCX0KKworCQlyZW1haW4gLT0gbDsKKwkJdXNlcl9kYXRhICs9IGw7CisJCW9mZnNldCArPSBsOworCX0KKyNpZiBXQVRDSF9QV1JJVEUgJiYgMQorCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqLCBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplLCBfX2Z1bmNfXywgfjApOworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisjZW5kaWYKKworZmFpbDoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWludCByZXQ7CisJbG9mZl90IG9mZnNldDsKKwlzc2l6ZV90IHdyaXR0ZW47CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9zZXRfZG9tYWluKG9iaiwgZmlsZV9wcml2LAorCQkJCSAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwl3cml0dGVuID0gdmZzX3dyaXRlKG9iai0+ZmlscCwKKwkJCSAgICAoY2hhciBfX3VzZXIgKikodWludHB0cl90KSBhcmdzLT5kYXRhX3B0ciwKKwkJCSAgICBhcmdzLT5zaXplLCAmb2Zmc2V0KTsKKwlpZiAod3JpdHRlbiAhPSBhcmdzLT5zaXplKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAod3JpdHRlbiA8IDApCisJCQlyZXR1cm4gd3JpdHRlbjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBXcml0ZXMgZGF0YSB0byB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgorICoKKyAqIE9uIGVycm9yLCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0aGF0IHdlcmUgdG8gYmUgbW9kaWZpZWQgYXJlIHVuZGVmaW5lZC4KKyAqLworaW50CitpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogQm91bmRzIGNoZWNrIGRlc3RpbmF0aW9uLgorCSAqCisJICogWFhYOiBUaGlzIGNvdWxkIHVzZSByZXZpZXcgZm9yIG92ZXJmbG93IGlzc3Vlcy4uLgorCSAqLworCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAorCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGNhbiBvbmx5IGRvIHRoZSBHVFQgcHdyaXRlIG9uIHVudGlsZWQgYnVmZmVycywgYXMgb3RoZXJ3aXNlCisJICogaXQgd291bGQgZW5kIHVwIGdvaW5nIHRocm91Z2ggdGhlIGZlbmNlZCBhY2Nlc3MsIGFuZCB3ZSdsbCBnZXQKKwkgKiBkaWZmZXJlbnQgZGV0aWxpbmcgYmVoYXZpb3IgYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqIHByZWFkL3B3cml0ZSBjdXJyZW50bHkgYXJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgQ1BVCisJICogcGVyc3BlY3RpdmUsIHJlcXVpcmluZyBtYW51YWwgZGV0aWxpbmcgYnkgdGhlIGNsaWVudC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKKwkgICAgZGV2LT5ndHRfdG90YWwgIT0gMCkKKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKworI2lmIFdBVENIX1BXUklURQorCWlmIChyZXQpCisJCURSTV9JTkZPKCJwd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworI2VuZGlmCisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB1c2VyIHNwYWNlIHByZXBhcmVzIHRvIHVzZSBhbiBvYmplY3QKKyAqLworaW50CitpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCJzZXRfZG9tYWluX2lvY3RsICVwKCVkKSwgJTA4eCAlMDh4XG4iLAorCQkgb2JqLCBvYmotPnNpemUsIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKKyNlbmRpZgorCXJldCA9IGk5MTVfZ2VtX3NldF9kb21haW4ob2JqLCBmaWxlX3ByaXYsCisJCQkJICBhcmdzLT5yZWFkX2RvbWFpbnMsIGFyZ3MtPndyaXRlX2RvbWFpbik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHVzZXIgc3BhY2UgaGFzIGRvbmUgd3JpdGVzIHRvIHRoaXMgYnVmZmVyCisgKi8KK2ludAoraTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUJBREY7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiBzd19maW5pc2ggJWQgKCVwICVkKVxuIiwKKwkJIF9fZnVuY19fLCBhcmdzLT5oYW5kbGUsIG9iaiwgb2JqLT5zaXplKTsKKyNlbmRpZgorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIFBpbm5lZCBidWZmZXJzIG1heSBiZSBzY2Fub3V0LCBzbyBmbHVzaCB0aGUgY2FjaGUgKi8KKwlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgJiYgb2JqX3ByaXYtPnBpbl9jb3VudCkgeworCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwl9CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIE1hcHMgdGhlIGNvbnRlbnRzIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIGl0IGlzIG1hcHBlZAorICogaW50by4KKyAqCisgKiBXaGlsZSB0aGUgbWFwcGluZyBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCwgaXQgZG9lc24ndAorICogaW1wbHkgYSByZWYgb24gdGhlIG9iamVjdCBpdHNlbGYuCisgKi8KK2ludAoraTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWxvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWFkZHIgPSBkb19tbWFwKG9iai0+ZmlscCwgMCwgYXJncy0+c2l6ZSwKKwkJICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisJCSAgICAgICBhcmdzLT5vZmZzZXQpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChJU19FUlIoKHZvaWQgKilhZGRyKSkKKwkJcmV0dXJuIGFkZHI7CisKKwlhcmdzLT5hZGRyX3B0ciA9ICh1aW50NjRfdCkgYWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2VfY291bnQgPSBvYmotPnNpemUgLyBQQUdFX1NJWkU7CisJaW50IGk7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspCisJCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0W2ldICE9IE5VTEwpIHsKKwkJCWlmIChvYmpfcHJpdi0+ZGlydHkpCisJCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCX0KKwlvYmpfcHJpdi0+ZGlydHkgPSAwOworCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfbGlzdCwKKwkJIHBhZ2VfY291bnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCSBEUk1fTUVNX0RSSVZFUik7CisJb2JqX3ByaXYtPnBhZ2VfbGlzdCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0LiAqLworCWlmICghb2JqX3ByaXYtPmFjdGl2ZSkgeworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CisJfQorCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworfQorCisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKQorCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+bGlzdCk7CisJZWxzZQorCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisKKwlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgeworCQlvYmpfcHJpdi0+YWN0aXZlID0gMDsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgc2VxdWVuY2UgbnVtYmVyLCBlbWl0dGluZyBhIHdyaXRlIG9mIGl0IHRvIHRoZSBzdGF0dXMgcGFnZQorICogcGx1cyBhbiBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgdHJpZ2dlciBpOTE1X3VzZXJfaW50ZXJydXB0X2hhbmRsZXIuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJ1Y3RfbG9jayBoZWxkLgorICoKKyAqIFJldHVybmVkIHNlcXVlbmNlIG51bWJlcnMgYXJlIG5vbnplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCXVpbnQzMl90IHNlcW5vOworCWludCB3YXNfZW1wdHk7CisJUklOR19MT0NBTFM7CisKKwlyZXF1ZXN0ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHcmFiIHRoZSBzZXFubyB3ZSdyZSBnb2luZyB0byBtYWtlIHRoaXMgcmVxdWVzdCBiZSwgYW5kIGJ1bXAgdGhlCisJICogbmV4dCAoc2tpcHBpbmcgMCBzbyBpdCBjYW4gYmUgdGhlIHJlc2VydmVkIG5vLXNlcW5vIHZhbHVlKS4KKwkgKi8KKwlzZXFubyA9IGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubzsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8rKzsKKwlpZiAoZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vID09IDApCisJCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubysrOworCisJQkVHSU5fTFBfUklORyg0KTsKKwlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJT1VUX1JJTkcoSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKKwlPVVRfUklORyhzZXFubyk7CisKKwlPVVRfUklORyhNSV9VU0VSX0lOVEVSUlVQVCk7CisJQURWQU5DRV9MUF9SSU5HKCk7CisKKwlEUk1fREVCVUcoIiVkXG4iLCBzZXFubyk7CisKKwlyZXF1ZXN0LT5zZXFubyA9IHNlcW5vOworCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7CisJcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyA9IGZsdXNoX2RvbWFpbnM7CisJd2FzX2VtcHR5ID0gbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCisJaWYgKHdhc19lbXB0eSAmJiAhZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssIEhaKTsKKwlyZXR1cm4gc2Vxbm87Cit9CisKKy8qKgorICogQ29tbWFuZCBleGVjdXRpb24gYmFycmllcgorICoKKyAqIEVuc3VyZXMgdGhhdCBhbGwgY29tbWFuZHMgaW4gdGhlIHJpbmcgYXJlIGZpbmlzaGVkCisgKiBiZWZvcmUgc2lnbmFsbGluZyB0aGUgQ1BVCisgKi8KK3N0YXRpYyB1aW50MzJfdAoraTkxNV9yZXRpcmVfY29tbWFuZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSAwOworCVJJTkdfTE9DQUxTOworCisJLyogVGhlIHNhbXBsZXIgYWx3YXlzIGdldHMgZmx1c2hlZCBvbiBpOTY1IChzaWdoKSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlmbHVzaF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoY21kKTsKKwlPVVRfUklORygwKTsgLyogbm9vcCAqLworCUFEVkFOQ0VfTFBfUklORygpOworCXJldHVybiBmbHVzaF9kb21haW5zOworfQorCisvKioKKyAqIE1vdmVzIGJ1ZmZlcnMgYXNzb2NpYXRlZCBvbmx5IHdpdGggdGhlIGdpdmVuIGFjdGl2ZSBzZXFubyBmcm9tIHRoZSBhY3RpdmUKKyAqIHRvIGluYWN0aXZlIGxpc3QsIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBNb3ZlIGFueSBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdCB0aGF0IGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZAorCSAqIGJ5IHRoZSByaW5nYnVmZmVyIHRvIHRoZSBmbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKKwkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCQkgICAgbGlzdCk7CisJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJLyogSWYgdGhlIHNlcW5vIGJlaW5nIHJldGlyZWQgZG9lc24ndCBtYXRjaCB0aGUgb2xkZXN0IGluIHRoZQorCQkgKiBsaXN0LCB0aGVuIHRoZSBvbGRlc3QgaW4gdGhlIGxpc3QgbXVzdCBzdGlsbCBiZSBuZXdlciB0aGFuCisJCSAqIHRoaXMgc2Vxbm8uCisJCSAqLworCQlpZiAob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vICE9IHJlcXVlc3QtPnNlcW5vKQorCQkJcmV0dXJuOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IHJldGlyZSAlZCBtb3ZlcyB0byBpbmFjdGl2ZSBsaXN0ICVwXG4iLAorCQkJIF9fZnVuY19fLCByZXF1ZXN0LT5zZXFubywgb2JqKTsKKyNlbmRpZgorCisJCWlmIChvYmotPndyaXRlX2RvbWFpbiAhPSAwKSB7CisJCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsCisJCQkJICAgICAgICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOworCQl9CisJfQorCisJaWYgKHJlcXVlc3QtPmZsdXNoX2RvbWFpbnMgIT0gMCkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0OworCisJCS8qIENsZWFyIHRoZSB3cml0ZSBkb21haW4gYW5kIGFjdGl2aXR5IGZyb20gYW55IGJ1ZmZlcnMKKwkJICogdGhhdCBhcmUganVzdCB3YWl0aW5nIGZvciBhIGZsdXNoIG1hdGNoaW5nIHRoZSBvbmUgcmV0aXJlZC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKKwkJCQkJICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiByZXF1ZXN0LT5mbHVzaF9kb21haW5zKSB7CisJCQkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCQl9CisJCX0KKworCX0KK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfc2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVpbnQzMl90IHNlcTIpCit7CisJcmV0dXJuIChpbnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKK30KKwordWludDMyX3QKK2k5MTVfZ2V0X2dlbV9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0dXJuIFJFQURfSFdTUChkZXZfcHJpdiwgSTkxNV9HRU1fSFdTX0lOREVYKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgcmVxdWVzdCBsaXN0IGFzIHNlcXVlbmNlIG51bWJlcnMgYXJlIHBhc3NlZC4KKyAqLwordm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc2Vxbm87CisKKwlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJCXVpbnQzMl90IHJldGlyaW5nX3NlcW5vOworCisJCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCSAgIGxpc3QpOworCQlyZXRpcmluZ19zZXFubyA9IHJlcXVlc3QtPnNlcW5vOworCisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgcmV0aXJpbmdfc2Vxbm8pIHx8CisJCSAgICBkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CisJCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdChkZXYsIHJlcXVlc3QpOworCisJCQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7CisJCQlkcm1fZnJlZShyZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorfQorCit2b2lkCitpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBkcm1faTkxNV9wcml2YXRlX3QsCisJCQkJbW0ucmV0aXJlX3dvcmsud29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5tbS5zdXNwZW5kZWQgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCisvKioKKyAqIFdhaXRzIGZvciBhIHNlcXVlbmNlIG51bWJlciB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKKyAqIHJlcXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50LgorICovCitzdGF0aWMgaW50CitpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBzZXFubykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTihzZXFubyA9PSAwKTsKKworCWlmICghaTkxNV9zZXFub19wYXNzZWQoaTkxNV9nZXRfZ2VtX3NlcW5vKGRldiksIHNlcW5vKSkgeworCQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKKwkJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldl9wcml2LT5pcnFfcXVldWUsCisJCQkJCSAgICAgICBpOTE1X3NlcW5vX3Bhc3NlZChpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSwKKwkJCQkJCQkJIHNlcW5vKSB8fAorCQkJCQkgICAgICAgZGV2X3ByaXYtPm1tLndlZGdlZCk7CisJCWk5MTVfdXNlcl9pcnFfcHV0KGRldik7CisJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisJfQorCWlmIChkZXZfcHJpdi0+bW0ud2VkZ2VkKQorCQlyZXQgPSAtRUlPOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQorCQlEUk1fRVJST1IoIiVzIHJldHVybnMgJWQgKGF3YWl0aW5nICVkIGF0ICVkKVxuIiwKKwkJCSAgX19mdW5jX18sIHJldCwgc2Vxbm8sIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKworCS8qIERpcmVjdGx5IGRpc3BhdGNoIHJlcXVlc3QgcmV0aXJpbmcuICBXaGlsZSB3ZSBoYXZlIHRoZSB3b3JrIHF1ZXVlCisJICogdG8gaGFuZGxlIHRoaXMsIHRoZSB3YWl0ZXIgb24gYSByZXF1ZXN0IG9mdGVuIHdhbnRzIGFuIGFzc29jaWF0ZWQKKwkgKiBidWZmZXIgdG8gaGF2ZSBtYWRlIGl0IHRvIHRoZSBpbmFjdGl2ZSBsaXN0LCBhbmQgd2Ugd291bGQgbmVlZAorCSAqIGEgc2VwYXJhdGUgd2FpdCBxdWV1ZSB0byBoYW5kbGUgdGhhdC4KKwkgKi8KKwlpZiAocmV0ID09IDApCisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgIHVpbnQzMl90IGludmFsaWRhdGVfZG9tYWlucywKKwkgICAgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQ7CisJUklOR19MT0NBTFM7CisKKyNpZiBXQVRDSF9FWEVDCisJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlICUwOHggZmx1c2ggJTA4eFxuIiwgX19mdW5jX18sCisJCSAgaW52YWxpZGF0ZV9kb21haW5zLCBmbHVzaF9kb21haW5zKTsKKyNlbmRpZgorCisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKworCWlmICgoaW52YWxpZGF0ZV9kb21haW5zIHwgZmx1c2hfZG9tYWlucykgJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkJICAgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgeworCQkvKgorCQkgKiByZWFkL3dyaXRlIGNhY2hlczoKKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBpcyBhbHdheXMgaW52YWxpZGF0ZWQsIGJ1dCBpcworCQkgKiBvbmx5IGZsdXNoZWQgaWYgTUlfTk9fV1JJVEVfRkxVU0ggaXMgdW5zZXQuICBPbiA5NjUsIGl0IGlzCisJCSAqIGFsc28gZmx1c2hlZCBhdCAyZCB2ZXJzdXMgM2QgcGlwZWxpbmUgc3dpdGNoZXMuCisJCSAqCisJCSAqIHJlYWQtb25seSBjYWNoZXM6CisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSIGlzIGZsdXNoZWQgb24gcHJlLTk2NSBpZgorCQkgKiBNSV9SRUFEX0ZMVVNIIGlzIHNldCwgYW5kIGlzIGFsd2F5cyBmbHVzaGVkIG9uIDk2NS4KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQgbWF5IG5vdCBleGlzdD8KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24gOTY1LCBpcworCQkgKiBpbnZhbGlkYXRlZCB3aGVuIE1JX0VYRV9GTFVTSCBpcyBzZXQuCisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJCSAqIGludmFsaWRhdGVkIHdpdGggZXZlcnkgTUlfRkxVU0guCisJCSAqCisJCSAqIFRMQnM6CisJCSAqCisJCSAqIE9uIDk2NSwgVExCcyBhc3NvY2lhdGVkIHdpdGggSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQKKwkJICogYW5kIEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0IFBURSB3cml0ZSBhbmQKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBhbmQgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIKKwkJICogYXJlIGZsdXNoZWQgYXQgYW55IE1JX0ZMVVNILgorCQkgKi8KKworCQljbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCQlpZiAoKGludmFsaWRhdGVfZG9tYWluc3xmbHVzaF9kb21haW5zKSAmCisJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSKQorCQkJY21kICY9IH5NSV9OT19XUklURV9GTFVTSDsKKwkJaWYgKCFJU19JOTY1RyhkZXYpKSB7CisJCQkvKgorCQkJICogT24gdGhlIDk2NSwgdGhlIHNhbXBsZXIgY2FjaGUgYWx3YXlzIGdldHMgZmx1c2hlZAorCQkJICogYW5kIHRoaXMgYml0IGlzIHJlc2VydmVkLgorCQkJICovCisJCQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIpCisJCQkJY21kIHw9IE1JX1JFQURfRkxVU0g7CisJCX0KKwkJaWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTikKKwkJCWNtZCB8PSBNSV9FWEVfRkxVU0g7CisKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogcXVldWUgZmx1c2ggJTA4eCB0byByaW5nXG4iLCBfX2Z1bmNfXywgY21kKTsKKyNlbmRpZgorCQlCRUdJTl9MUF9SSU5HKDIpOworCQlPVVRfUklORyhjbWQpOworCQlPVVRfUklORygwKTsgLyogbm9vcCAqLworCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwl9Cit9CisKKy8qKgorICogRW5zdXJlcyB0aGF0IGFsbCByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCBoYXMgY29tcGxldGVkIGFuZCB0aGUgb2JqZWN0IGlzCisgKiBzYWZlIHRvIHVuYmluZCBmcm9tIHRoZSBHVFQgb3IgYWNjZXNzIGZyb20gdGhlIENQVS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgd3JpdGVzIHF1ZXVlZCB0byB0aGUgYnVmZmVyLCBmbHVzaCBhbmQKKwkgKiBjcmVhdGUgYSBuZXcgc2Vxbm8gdG8gd2FpdCBmb3IuCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXVpbnQzMl90IHdyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IGZsdXNoaW5nIG9iamVjdCAlcCBmcm9tIHdyaXRlIGRvbWFpbiAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywgb2JqLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwgMCwgd3JpdGVfZG9tYWluKTsKKworCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqKTsKKwkJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsCisJCQkJCQkJCSAgd3JpdGVfZG9tYWluKTsKKwkJQlVHX09OKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9PSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBmbHVzaCBtb3ZlcyB0byBleGVjIGxpc3QgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJfQorCisJLyogSWYgdGhlcmUgaXMgcmVuZGVyaW5nIHF1ZXVlZCBvbiB0aGUgYnVmZmVyIGJlaW5nIGV2aWN0ZWQsIHdhaXQgZm9yCisJICogaXQuCisJICovCisJaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKKyNpZiBXQVRDSF9CVUYKKwkJRFJNX0lORk8oIiVzOiBvYmplY3QgJXAgd2FpdCBmb3Igc2Vxbm8gJTA4eFxuIiwKKwkJCSAgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKyNlbmRpZgorCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVW5iaW5kcyBhbiBvYmplY3QgZnJvbSB0aGUgR1RUIGFwZXJ0dXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQgPSAwOworCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiVkICVwXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG9iaik7CisJRFJNX0lORk8oImd0dF9zcGFjZSAlcFxuIiwgb2JqX3ByaXYtPmd0dF9zcGFjZSk7CisjZW5kaWYKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJBdHRlbXB0aW5nIHRvIHVuYmluZCBwaW5uZWQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2FpdCBmb3IgYW55IHJlbmRlcmluZyB0byBjb21wbGV0ZQorCSAqLworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJ3YWl0X3JlbmRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE1vdmUgdGhlIG9iamVjdCB0byB0aGUgQ1BVIGRvbWFpbiB0byBlbnN1cmUgdGhhdAorCSAqIGFueSBwb3NzaWJsZSBDUFUgd3JpdGVzIHdoaWxlIGl0J3Mgbm90IGluIHRoZSBHVFQKKwkgKiBhcmUgZmx1c2hlZCB3aGVuIHdlIGdvIHRvIHJlbWFwIGl0LiBUaGlzIHdpbGwKKwkgKiBhbHNvIGVuc3VyZSB0aGF0IGFsbCBwZW5kaW5nIEdQVSB3cml0ZXMgYXJlIGZpbmlzaGVkCisJICogYmVmb3JlIHdlIHVuYmluZC4KKwkgKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosIEk5MTVfR0VNX0RPTUFJTl9DUFUsCisJCQkJCSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2V0X2RvbWFpbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvYmpfcHJpdi0+YWdwX21lbSAhPSBOVUxMKSB7CisJCWRybV91bmJpbmRfYWdwKG9ial9wcml2LT5hZ3BfbWVtKTsKKwkJZHJtX2ZyZWVfYWdwKG9ial9wcml2LT5hZ3BfbWVtLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOworCQlvYmpfcHJpdi0+YWdwX21lbSA9IE5VTEw7CisJfQorCisJQlVHX09OKG9ial9wcml2LT5hY3RpdmUpOworCisJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSkgeworCQlhdG9taWNfZGVjKCZkZXYtPmd0dF9jb3VudCk7CisJCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5ndHRfbWVtb3J5KTsKKworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIExSVSBsaXN0IGlmIHByZXNlbnQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+bGlzdCkpCisJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCS8qIElmIHRoZXJlJ3MgYW4gaW5hY3RpdmUgYnVmZmVyIGF2YWlsYWJsZSBub3csIGdyYWIgaXQKKwkJICogYW5kIGJlIGRvbmUuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSkgeworCQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJCSAgICBsaXN0KTsKKwkJCW9iaiA9IG9ial9wcml2LT5vYmo7CisJCQlCVUdfT04ob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJCURSTV9JTkZPKCIlczogZXZpY3RpbmcgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJCQlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CisKKwkJCS8qIFdhaXQgb24gdGhlIHJlbmRlcmluZyBhbmQgdW5iaW5kIHRoZSBidWZmZXIuICovCisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBnZXQgYW55dGhpbmcsIGJ1dCB0aGUgcmluZyBpcyBzdGlsbCBwcm9jZXNzaW5nCisJCSAqIHRoaW5ncywgd2FpdCBmb3Igb25lIG9mIHRob3NlIHRoaW5ncyB0byBmaW5pc2ggYW5kIGhvcGVmdWxseQorCQkgKiBsZWF2ZSB1cyBhIGJ1ZmZlciB0byBldmljdC4KKwkJICovCisJCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKworCQkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCQkgICBsaXN0KTsKKworCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCByZXF1ZXN0LT5zZXFubyk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCisJCQkvKiBpZiB3YWl0aW5nIGNhdXNlZCBhbiBvYmplY3QgdG8gYmVjb21lIGluYWN0aXZlLAorCQkJICogdGhlbiBsb29wIGFyb3VuZCBhbmQgd2FpdCBmb3IgaXQuIE90aGVyd2lzZSwgd2UKKwkJCSAqIGFzc3VtZSB0aGF0IHdhaXRpbmcgZnJlZWQgYW5kIHVuYm91bmQgc29tZXRoaW5nLAorCQkJICogc28gdGhlcmUgc2hvdWxkIG5vdyBiZSBzb21lIHNwYWNlIGluIHRoZSBHVFQKKwkJCSAqLworCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBoYXZlIGFueXRoaW5nIG9uIHRoZSByZXF1ZXN0IGxpc3QgYnV0IHRoZXJlCisJCSAqIGFyZSBidWZmZXJzIGF3YWl0aW5nIGEgZmx1c2gsIGVtaXQgb25lIGFuZCB0cnkgYWdhaW4uCisJCSAqIFdoZW4gd2Ugd2FpdCBvbiBpdCwgdGhvc2UgYnVmZmVycyB3YWl0aW5nIGZvciB0aGF0IGZsdXNoCisJCSAqIHdpbGwgZ2V0IG1vdmVkIHRvIGluYWN0aXZlLgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpIHsKKwkJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCQkgICAgbGlzdCk7CisJCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpOTE1X2dlbV9mbHVzaChkZXYsCisJCQkJICAgICAgIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmotPndyaXRlX2RvbWFpbik7CisJCQlpOTE1X2FkZF9yZXF1ZXN0KGRldiwgb2JqLT53cml0ZV9kb21haW4pOworCisJCQlvYmogPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlEUk1fRVJST1IoImluYWN0aXZlIGVtcHR5ICVkIHJlcXVlc3QgZW1wdHkgJWQgIgorCQkJICAiZmx1c2hpbmcgZW1wdHkgJWRcbiIsCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCksCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJCS8qIElmIHdlIGRpZG4ndCBkbyBhbnkgb2YgdGhlIGFib3ZlLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZQorCQkgKiBhbmQgd2UganVzdCBjYW4ndCBmaXQgaXQgaW4uCisJCSAqLworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZV9jb3VudCwgaTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3QgZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCisJICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxlYXNlIHRoZW0uCisJICovCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlCVUdfT04ob2JqX3ByaXYtPnBhZ2VfbGlzdCAhPSBOVUxMKTsKKwlvYmpfcHJpdi0+cGFnZV9saXN0ID0gZHJtX2NhbGxvYyhwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhbGVkIHRvIGFsbG9jYXRlIHBhZ2UgbGlzdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlub2RlID0gb2JqLT5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIGksIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJRFJNX0VSUk9SKCJyZWFkX21hcHBpbmdfcGFnZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW9ial9wcml2LT5wYWdlX2xpc3RbaV0gPSBwYWdlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGaW5kcyBmcmVlIHNwYWNlIGluIHRoZSBHVFQgYXBlcnR1cmUgYW5kIGJpbmRzIHRoZSBvYmplY3QgdGhlcmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgYWxpZ25tZW50KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZnJlZV9zcGFjZTsKKwlpbnQgcGFnZV9jb3VudCwgcmV0OworCisJaWYgKGFsaWdubWVudCA9PSAwKQorCQlhbGlnbm1lbnQgPSBQQUdFX1NJWkU7CisJaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGFsaWdubWVudCByZXF1ZXN0ZWQgJXVcbiIsIGFsaWdubWVudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworIHNlYXJjaF9mcmVlOgorCWZyZWVfc3BhY2UgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsCisJCQkJCW9iai0+c2l6ZSwgYWxpZ25tZW50LCAwKTsKKwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKSB7CisJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBkcm1fbW1fZ2V0X2Jsb2NrKGZyZWVfc3BhY2UsIG9iai0+c2l6ZSwKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQpOworCQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSAhPSBOVUxMKSB7CisJCQlvYmpfcHJpdi0+Z3R0X3NwYWNlLT5wcml2YXRlID0gb2JqOworCQkJb2JqX3ByaXYtPmd0dF9vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X3NwYWNlLT5zdGFydDsKKwkJfQorCX0KKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCS8qIElmIHRoZSBndHQgaXMgZW1wdHkgYW5kIHdlJ3JlIHN0aWxsIGhhdmluZyB0cm91YmxlCisJCSAqIGZpdHRpbmcgb3VyIG9iamVjdCBpbiwgd2UncmUgb3V0IG9mIG1lbW9yeS4KKwkJICovCisjaWYgV0FUQ0hfTFJVCisJCURSTV9JTkZPKCIlczogR1RUIGZ1bGwsIGV2aWN0aW5nIHNvbWV0aGluZ1xuIiwgX19mdW5jX18pOworI2VuZGlmCisJCWlmIChsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkgJiYKKwkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSkgeworCQkJRFJNX0VSUk9SKCJHVFQgZnVsbCwgYnV0IExSVSBsaXN0IGVtcHR5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZXZpY3QgYSBidWZmZXIgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWdvdG8gc2VhcmNoX2ZyZWU7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIkJpbmRpbmcgb2JqZWN0IG9mIHNpemUgJWQgYXQgMHglMDh4XG4iLAorCQkgb2JqLT5zaXplLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisjZW5kaWYKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCWlmIChyZXQpIHsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwkvKiBDcmVhdGUgYW4gQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgcG9pbnRpbmcgYXQgb3VyIHBhZ2VzLCBhbmQgYmluZCBpdAorCSAqIGludG8gdGhlIEdUVC4KKwkgKi8KKwlvYmpfcHJpdi0+YWdwX21lbSA9IGRybV9hZ3BfYmluZF9wYWdlcyhkZXYsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkJCQkgICAgICAgcGFnZV9jb3VudCwKKwkJCQkJICAgICAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPmFncF90eXBlKTsKKwlpZiAob2JqX3ByaXYtPmFncF9tZW0gPT0gTlVMTCkgeworCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhdG9taWNfaW5jKCZkZXYtPmd0dF9jb3VudCk7CisJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPmd0dF9tZW1vcnkpOworCisJLyogQXNzZXJ0IHRoYXQgdGhlIG9iamVjdCBpcyBub3QgY3VycmVudGx5IGluIGFueSBHUFUgZG9tYWluLiBBcyBpdAorCSAqIHdhc24ndCBpbiB0aGUgR1RULCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHdheSBpdCBjb3VsZCBoYXZlIGJlZW4gaW4KKwkgKiBhIEdQVSBjYWNoZQorCSAqLworCUJVR19PTihvYmotPnJlYWRfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVXxJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisJQlVHX09OKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitpOTE1X2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhZ2UgbGlzdCBzZXQgdXAsIHRoZW4gd2UncmUgbm90IHBpbm5lZAorCSAqIHRvIEdQVSwgYW5kIHdlIGNhbiBpZ25vcmUgdGhlIGNhY2hlIGZsdXNoIGJlY2F1c2UgaXQnbGwgaGFwcGVuCisJICogYWdhaW4gYXQgYmluZCB0aW1lLgorCSAqLworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIG5leHQgZG9tYWluIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4gVGhpcworICogbWF5IG5vdCBhY3R1YWxseSBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgZmx1c2hpbmcvaW52YWxpZGluZyB0aG91Z2gsCisgKiBhcyB0aGF0IG1heSB3YW50IHRvIGJlIGJhdGNoZWQgd2l0aCBvdGhlciBzZXRfZG9tYWluIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGlzICh3ZSBob3BlKSB0aGUgb25seSByZWFsbHkgdHJpY2t5IHBhcnQgb2YgZ2VtLiBUaGUgZ29hbAorICogaXMgZmFpcmx5IHNpbXBsZSAtLSB0cmFjayB3aGljaCBjYWNoZXMgaG9sZCBiaXRzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBtYWtlIHN1cmUgdGhleSByZW1haW4gY29oZXJlbnQuIEEgZmV3IGNvbmNyZXRlIGV4YW1wbGVzIG1heQorICogaGVscCB0byBleHBsYWluIGhvdyBpdCB3b3Jrcy4gRm9yIHNob3J0aGFuZCwgd2UgdXNlIHRoZSBub3RhdGlvbgorICogKHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKSwgZS5nLiAoQ1BVLCBDUFUpIHRvIGluZGljYXRlIHRoZQorICogYSBwYWlyIG9mIHJlYWQgYW5kIHdyaXRlIGRvbWFpbiBtYXNrcy4KKyAqCisgKiBDYXNlIDE6IHRoZSBiYXRjaCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBNYXBwZWQgdG8gR1RUCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJNS4gVW5tYXBwZWQgZnJvbSBHVFQKKyAqCTYuIEZyZWVkCisgKgorICoJTGV0J3MgdGFrZSB0aGVzZSBhIHN0ZXAgYXQgYSB0aW1lCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJUGFnZXMgYWxsb2NhdGVkIGZyb20gdGhlIGtlcm5lbCBtYXkgc3RpbGwgaGF2ZQorICoJCWNhY2hlIGNvbnRlbnRzLCBzbyB3ZSBzZXQgdGhlbSB0byAoQ1BVLCBDUFUpIGFsd2F5cy4KKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVICh1c2luZyBwd3JpdGUpCisgKgkJVGhlIHB3cml0ZSBmdW5jdGlvbiBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkgYW5kCisgKgkJdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgKGFzIG5vdGhpbmcgY2hhbmdlcykKKyAqCTMuIE1hcHBlZCBieSBHVFQKKyAqCQlUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdAorICoJCWN1cnJlbnRseSBpbiBhbnkgR1BVLWJhc2VkIHJlYWQgb3Igd3JpdGUgZG9tYWlucworICoJNC4gUmVhZCBieSBHUFUKKyAqCQlpOTE1X2dlbV9leGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKENPTU1BTkQsIDApLgorICoJCUFzIHdyaXRlX2RvbWFpbiBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIGFkZHMgaW4gdGhlCisgKgkJY3VycmVudCByZWFkIGRvbWFpbnMgKENQVStDT01NQU5ELCAwKS4KKyAqCQlmbHVzaF9kb21haW5zIGlzIHNldCB0byBDUFUuCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGlzIHNldCB0byBDT01NQU5ECisgKgkJY2xmbHVzaCBpcyBydW4gdG8gZ2V0IGRhdGEgb3V0IG9mIHRoZSBDUFUgY2FjaGVzCisgKgkJdGhlbiBpOTE1X2Rldl9zZXRfZG9tYWluIGNhbGxzIGk5MTVfZ2VtX2ZsdXNoIHRvCisgKgkJZW1pdCBhbiBNSV9GTFVTSCBhbmQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQgY2FsbHMgc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBhbmQgaW52YWxpZGF0ZV9kb21haW5zIGVuZCB1cCBib3RoIHplcm8KKyAqCQlzbyBubyBmbHVzaGluZy9pbnZhbGlkYXRpbmcgaGFwcGVucworICoJNi4gRnJlZWQKKyAqCQl5YXksIGRvbmUKKyAqCisgKiBDYXNlIDI6IFRoZSBzaGFyZWQgcmVuZGVyIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJMy4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoJNC4gc2V0X2RvbWFpbiB0byAoQ1BVLENQVSkKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCTYuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlTYW1lIGFzIGxhc3QgZXhhbXBsZSwgKENQVSwgQ1BVKQorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJCU5vdGhpbmcgY2hhbmdlcyAoYXNzZXJ0aW9ucyBmaW5kIHRoYXQgaXQgaXMgbm90IGluIHRoZSBHUFUpCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgkJZXhlY2J1ZmZlciBjYWxscyBzZXRfZG9tYWluIChSRU5ERVIsIFJFTkRFUikKKyAqCQlmbHVzaF9kb21haW5zIGdldHMgQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGdldHMgR1BVCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIHNldF9kb21haW4gKENQVSwgQ1BVKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQl3YWl0X3JlbmRlcmluZyAob2JqKSB0byBtYWtlIHN1cmUgYWxsIGRyYXdpbmcgaXMgY29tcGxldGUuCisgKgkJVGhpcyB3aWxsIGluY2x1ZGUgYW4gTUlfRkxVU0ggdG8gZ2V0IHRoZSBkYXRhIGZyb20gR1BVCisgKgkJdG8gbWVtb3J5CisgKgkJY2xmbHVzaCAob2JqKSB0byBpbnZhbGlkYXRlIHRoZSBDUFUgY2FjaGUKKyAqCQlBbm90aGVyIE1JX0ZMVVNIIGluIGk5MTVfZ2VtX2ZsdXNoIChlbGltaW5hdGUgdGhpcyBzb21laG93PykKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCQljYWNoZSBsaW5lcyBhcmUgbG9hZGVkIGFuZCBkaXJ0aWVkCisgKgk2LiBSZWFkIHdyaXR0ZW4gYnkgR1BVCisgKgkJU2FtZSBhcyBsYXN0IEdQVSBhY2Nlc3MKKyAqCisgKiBDYXNlIDM6IFRoZSBjb25zdGFudCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJNC4gVXBkYXRlZCAod3JpdHRlbikgYnkgQ1BVIGFnYWluCisgKgk1LiBSZWFkIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCShDUFUsIENQVSkKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkJKENQVSwgQ1BVKQorICoJMy4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCQkoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyA9IDAgKG5vIHByZXZpb3VzIHdyaXRlIGRvbWFpbikKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwIChubyBuZXcgcmVhZCBkb21haW5zKQorICoJNS4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UJCSpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXVpbnQzMl90CQkJaW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwl1aW50MzJfdAkJCWZsdXNoX2RvbWFpbnMgPSAwOworCWludAkJCQlyZXQ7CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6IG9iamVjdCAlcCByZWFkICUwOHggLT4gJTA4eCB3cml0ZSAlMDh4IC0+ICUwOHhcbiIsCisJCSBfX2Z1bmNfXywgb2JqLAorCQkgb2JqLT5yZWFkX2RvbWFpbnMsIHJlYWRfZG9tYWlucywKKwkJIG9iai0+d3JpdGVfZG9tYWluLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJLyoKKwkgKiBJZiB0aGUgb2JqZWN0IGlzbid0IG1vdmluZyB0byBhIG5ldyB3cml0ZSBkb21haW4sCisJICogbGV0IHRoZSBvYmplY3Qgc3RheSBpbiBtdWx0aXBsZSByZWFkIGRvbWFpbnMKKwkgKi8KKwlpZiAod3JpdGVfZG9tYWluID09IDApCisJCXJlYWRfZG9tYWlucyB8PSBvYmotPnJlYWRfZG9tYWluczsKKwllbHNlCisJCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwkvKgorCSAqIEZsdXNoIHRoZSBjdXJyZW50IHdyaXRlIGRvbWFpbiBpZgorCSAqIHRoZSBuZXcgcmVhZCBkb21haW5zIGRvbid0IG1hdGNoLiBJbnZhbGlkYXRlCisJICogYW55IHJlYWQgZG9tYWlucyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgb2xkCisJICogd3JpdGUgZG9tYWluCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYmIG9iai0+d3JpdGVfZG9tYWluICE9IHJlYWRfZG9tYWlucykgeworCQlmbHVzaF9kb21haW5zIHw9IG9iai0+d3JpdGVfZG9tYWluOworCQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+d3JpdGVfZG9tYWluOworCX0KKwkvKgorCSAqIEludmFsaWRhdGUgYW55IHJlYWQgY2FjaGVzIHdoaWNoIG1heSBoYXZlCisJICogc3RhbGUgZGF0YS4gVGhhdCBpcywgYW55IG5ldyByZWFkIGRvbWFpbnMuCisJICovCisJaW52YWxpZGF0ZV9kb21haW5zIHw9IHJlYWRfZG9tYWlucyAmIH5vYmotPnJlYWRfZG9tYWluczsKKwlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IENQVSBkb21haW4gZmx1c2ggJTA4eCBpbnZhbGlkYXRlICUwOHhcbiIsCisJCQkgX19mdW5jX18sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyk7CisjZW5kaWYKKwkJLyoKKwkJICogSWYgd2UncmUgaW52YWxpZGluZyB0aGUgQ1BVIGNhY2hlIGFuZCBmbHVzaGluZyBhIEdQVSBjYWNoZSwKKwkJICogdGhlbiBwYXVzZSBmb3IgcmVuZGVyaW5nIHNvIHRoYXQgdGhlIEdQVSBjYWNoZXMgd2lsbCBiZQorCQkgKiBmbHVzaGVkIGJlZm9yZSB0aGUgY3B1IGNhY2hlIGlzIGludmFsaWRhdGVkCisJCSAqLworCQlpZiAoKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpICYmCisJCSAgICAoZmx1c2hfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSkgeworCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwl9CisKKwlpZiAoKHdyaXRlX2RvbWFpbiB8IGZsdXNoX2RvbWFpbnMpICE9IDApCisJCW9iai0+d3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluOworCisJLyogSWYgd2UncmUgaW52YWxpZGF0aW5nIHRoZSBDUFUgZG9tYWluLCBjbGVhciB0aGUgcGVyLXBhZ2UgQ1BVCisJICogZG9tYWluIGxpc3QgYXMgd2VsbC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkICE9IE5VTEwgJiYKKwkgICAgKHdyaXRlX2RvbWFpbiAhPSAwIHx8CisJICAgICByZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSkgeworCQlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZCA9IE5VTEw7CisJfQorCW9iai0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCisJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOworCWRldi0+Zmx1c2hfZG9tYWlucyB8PSBmbHVzaF9kb21haW5zOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCIlczogcmVhZCAlMDh4IHdyaXRlICUwOHggaW52YWxpZGF0ZSAlMDh4IGZsdXNoICUwOHhcbiIsCisJCSBfX2Z1bmNfXywKKwkJIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLCBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU2V0IHRoZSByZWFkL3dyaXRlIGRvbWFpbiBvbiBhIHJhbmdlIG9mIHRoZSBvYmplY3QuCisgKgorICogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIENQVSByZWFkcywgb3RoZXJ3aXNlIGRyb3BzIHRvIG5vcm1hbAorICogaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oKS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkgdWludDY0X3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0LCBpOworCisJaWYgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVhZF9kb21haW5zICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKKwkgICAgd3JpdGVfZG9tYWluICE9IDApCisJCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosCisJCQkJCQkgIHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKTsKKworCS8qIFdhaXQgb24gYW55IEdQVSByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCB0byBiZSBmbHVzaGVkLiAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwpIHsKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gZHJtX2NhbGxvYygxLCBvYmotPnNpemUgLyBQQUdFX1NJWkUsCisJCQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJfQorCisJLyogRmx1c2ggdGhlIGNhY2hlIG9uIGFueSBwYWdlcyB0aGF0IGFyZSBzdGlsbCBpbnZhbGlkIGZyb20gdGhlIENQVSdzCisJICogcGVyc3BlY3RpdmUuCisJICovCisJZm9yIChpID0gb2Zmc2V0IC8gUEFHRV9TSVpFOyBpIDw9IChvZmZzZXQgKyBzaXplIC0gMSkgLyBQQUdFX1NJWkU7IGkrKykgeworCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQorCQkJY29udGludWU7CisKKwkJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCArIGksIDEpOworCisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogT25jZSBhbGwgb2YgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIHNldCBpbiB0aGUgcHJvcGVyIGRvbWFpbiwKKyAqIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBmbHVzaCBhbmQgaW52YWxpZGF0ZSBvcGVyYXRpb25zLgorICoKKyAqIFJldHVybnMgdGhlIHdyaXRlIGRvbWFpbnMgZmx1c2hlZCwgZm9yIHVzZSBpbiBmbHVzaCB0cmFja2luZy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2dlbV9kZXZfc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSBkZXYtPmZsdXNoX2RvbWFpbnM7CisKKwkvKgorCSAqIE5vdyB0aGF0IGFsbCB0aGUgYnVmZmVycyBhcmUgc3luY2VkIHRvIHRoZSBwcm9wZXIgZG9tYWlucywKKwkgKiBmbHVzaCBhbmQgaW52YWxpZGF0ZSB0aGUgY29sbGVjdGVkIGRvbWFpbnMKKwkgKi8KKwlpZiAoZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfCBkZXYtPmZsdXNoX2RvbWFpbnMpIHsKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogaW52YWxpZGF0ZV9kb21haW5zICUwOHggZmx1c2hfZG9tYWlucyAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywKKwkJCSBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCSAgICAgICBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSAgICAgICBkZXYtPmZsdXNoX2RvbWFpbnMpOworCQlkZXYtPmludmFsaWRhdGVfZG9tYWlucyA9IDA7CisJCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7CisJfQorCisJcmV0dXJuIGZsdXNoX2RvbWFpbnM7Cit9CisKKy8qKgorICogUGluIGFuIG9iamVjdCB0byB0aGUgR1RUIGFuZCBldmFsdWF0ZSB0aGUgcmVsb2NhdGlvbnMgbGFuZGluZyBpbiBpdC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnJlbG9jczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCBpLCByZXQ7CisJdWludDMyX3QgbGFzdF9yZWxvY19vZmZzZXQgPSAtMTsKKwl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2UgPSBOVUxMOworCisJLyogQ2hvb3NlIHRoZSBHVFQgb2Zmc2V0IGZvciBvdXIgYnVmZmVyIGFuZCBwdXQgaXQgdGhlcmUuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosICh1aW50MzJfdCkgZW50cnktPmFsaWdubWVudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWVudHJ5LT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCXJlbG9jcyA9IChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCSAodWludHB0cl90KSBlbnRyeS0+cmVsb2NzX3B0cjsKKwkvKiBBcHBseSB0aGUgcmVsb2NhdGlvbnMsIHVzaW5nIHRoZSBHVFQgYXBlcnR1cmUgdG8gYXZvaWQgY2FjaGUKKwkgKiBmbHVzaGluZyByZXF1aXJlbWVudHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqdGFyZ2V0X29ial9wcml2OworCQl1aW50MzJfdCByZWxvY192YWwsIHJlbG9jX29mZnNldDsKKwkJdWludDMyX3QgX19pb21lbSAqcmVsb2NfZW50cnk7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJnJlbG9jLCByZWxvY3MgKyBpLCBzaXplb2YocmVsb2MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl0YXJnZXRfb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKG9iai0+ZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJaWYgKHRhcmdldF9vYmogPT0gTlVMTCkgeworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVCQURGOworCQl9CisJCXRhcmdldF9vYmpfcHJpdiA9IHRhcmdldF9vYmotPmRyaXZlcl9wcml2YXRlOworCisJCS8qIFRoZSB0YXJnZXQgYnVmZmVyIHNob3VsZCBoYXZlIGFwcGVhcmVkIGJlZm9yZSB1cyBpbiB0aGUKKwkJICogZXhlY19vYmplY3QgbGlzdCwgc28gaXQgc2hvdWxkIGhhdmUgYSBHVFQgc3BhY2UgYm91bmQgYnkgbm93LgorCQkgKi8KKwkJaWYgKHRhcmdldF9vYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiTm8gR1RUIHNwYWNlIGZvdW5kIGZvciBvYmplY3QgJWRcbiIsCisJCQkJICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZWxvYy5vZmZzZXQgPiBvYmotPnNpemUgLSA0KSB7CisJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwgKGludCkgb2JqLT5zaXplKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmVsb2Mub2Zmc2V0ICYgMykgeworCQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZDogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCk7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmVsb2Mud3JpdGVfZG9tYWluICYmIHRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluICYmCisJCSAgICByZWxvYy53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pIHsKKwkJCURSTV9FUlJPUigiV3JpdGUgZG9tYWluIGNvbmZsaWN0OiAiCisJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgorCQkJCSAgIm5ldyAlMDh4IG9sZCAlMDh4XG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJCSAgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJCSAgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKyNpZiBXQVRDSF9SRUxPQworCQlEUk1fSU5GTygiJXM6IG9iaiAlcCBvZmZzZXQgJTA4eCB0YXJnZXQgJWQgIgorCQkJICJyZWFkICUwOHggd3JpdGUgJTA4eCBndHQgJTA4eCAiCisJCQkgInByZXN1bWVkICUwOHggZGVsdGEgJTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywKKwkJCSBvYmosCisJCQkgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJIChpbnQpIHJlbG9jLnRhcmdldF9oYW5kbGUsCisJCQkgKGludCkgcmVsb2MucmVhZF9kb21haW5zLAorCQkJIChpbnQpIHJlbG9jLndyaXRlX2RvbWFpbiwKKwkJCSAoaW50KSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgKGludCkgcmVsb2MucHJlc3VtZWRfb2Zmc2V0LAorCQkJIHJlbG9jLmRlbHRhKTsKKyNlbmRpZgorCisJCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLnJlYWRfZG9tYWluczsKKwkJdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gfD0gcmVsb2Mud3JpdGVfZG9tYWluOworCisJCS8qIElmIHRoZSByZWxvY2F0aW9uIGFscmVhZHkgaGFzIHRoZSByaWdodCB2YWx1ZSBpbiBpdCwgbm8KKwkJICogbW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUuCisJCSAqLworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ID09IHJlbG9jLnByZXN1bWVkX29mZnNldCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vdyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFjdHVhbGx5IHdyaXRlIHNvbWUgZGF0YSBpbiwKKwkJICogbWFrZSBzdXJlIHRoYXQgYW55IHJlbmRlcmluZyB1c2luZyB0aGlzIGJ1ZmZlcidzIGNvbnRlbnRzCisJCSAqIGlzIGNvbXBsZXRlZC4KKwkJICovCisJCWk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCisJCS8qIEFzIHdlJ3JlIHdyaXRpbmcgdGhyb3VnaCB0aGUgZ3R0LCBmbHVzaAorCQkgKiBhbnkgQ1BVIHdyaXRlcyBiZWZvcmUgd2Ugd3JpdGUgdGhlIHJlbG9jYXRpb25zCisJCSAqLworCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisJCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCX0KKworCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0bworCQkgKiBwZXJmb3JtLgorCQkgKi8KKwkJcmVsb2Nfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5vZmZzZXQ7CisJCWlmIChyZWxvY19wYWdlID09IE5VTEwgfHwKKwkJICAgIChsYXN0X3JlbG9jX29mZnNldCAmIH4oUEFHRV9TSVpFIC0gMSkpICE9CisJCSAgICAocmVsb2Nfb2Zmc2V0ICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKKwkJCWlmIChyZWxvY19wYWdlICE9IE5VTEwpCisJCQkJaW91bm1hcChyZWxvY19wYWdlKTsKKworCQkJcmVsb2NfcGFnZSA9IGlvcmVtYXBfd2MoZGV2LT5hZ3AtPmJhc2UgKworCQkJCQkJKHJlbG9jX29mZnNldCAmCisJCQkJCQkgfihQQUdFX1NJWkUgLSAxKSksCisJCQkJCQlQQUdFX1NJWkUpOworCQkJbGFzdF9yZWxvY19vZmZzZXQgPSByZWxvY19vZmZzZXQ7CisJCQlpZiAocmVsb2NfcGFnZSA9PSBOVUxMKSB7CisJCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKworCQlyZWxvY19lbnRyeSA9ICh1aW50MzJfdCBfX2lvbWVtICopKHJlbG9jX3BhZ2UgKworCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7CisJCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLmRlbHRhOworCisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCJBcHBsaWVkIHJlbG9jYXRpb246ICVwQDB4JTA4eCAlMDh4IC0+ICUwOHhcbiIsCisJCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2Mub2Zmc2V0LAorCQkJICByZWFkbChyZWxvY19lbnRyeSksIHJlbG9jX3ZhbCk7CisjZW5kaWYKKwkJd3JpdGVsKHJlbG9jX3ZhbCwgcmVsb2NfZW50cnkpOworCisJCS8qIFdyaXRlIHRoZSB1cGRhdGVkIHByZXN1bWVkIG9mZnNldCBmb3IgdGhpcyBlbnRyeSBiYWNrIG91dAorCQkgKiB0byB0aGUgdXNlci4KKwkJICovCisJCXJlbG9jLnByZXN1bWVkX29mZnNldCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldDsKKwkJcmV0ID0gY29weV90b191c2VyKHJlbG9jcyArIGksICZyZWxvYywgc2l6ZW9mKHJlbG9jKSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwl9CisKKwlpZiAocmVsb2NfcGFnZSAhPSBOVUxMKQorCQlpb3VubWFwKHJlbG9jX3BhZ2UpOworCisjaWYgV0FUQ0hfQlVGCisJaWYgKDApCisJCWk5MTVfZ2VtX2R1bXBfb2JqZWN0KG9iaiwgMTI4LCBfX2Z1bmNfXywgfjApOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKiBEaXNwYXRjaCBhIGJhdGNoYnVmZmVyIHRvIHRoZSByaW5nCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKKwkJCSAgICAgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMgPSAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCisJCQkJCSAgICAgKHVpbnRwdHJfdCkgZXhlYy0+Y2xpcHJlY3RzX3B0cjsKKwlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7CisJaW50IGkgPSAwLCBjb3VudDsKKwl1aW50MzJfdAlleGVjX3N0YXJ0LCBleGVjX2xlbjsKKwlSSU5HX0xPQ0FMUzsKKworCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OworCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CisKKwlpZiAoKGV4ZWNfc3RhcnQgfCBleGVjX2xlbikgJiAweDcpIHsKKwkJRFJNX0VSUk9SKCJhbGlnbm1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWV4ZWNfc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY291bnQgPSBuYm94ID8gbmJveCA6IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoaSA8IG5ib3gpIHsKKwkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQkJCQlleGVjLT5EUjEsIGV4ZWMtPkRSNCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkgeworCQkJQkVHSU5fTFBfUklORyg0KTsKKwkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUik7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0ICsgZXhlY19sZW4gLSA0KTsKKwkJCU9VVF9SSU5HKDApOworCQkJQURWQU5DRV9MUF9SSU5HKCk7CisJCX0gZWxzZSB7CisJCQlCRUdJTl9MUF9SSU5HKDIpOworCQkJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfAorCQkJCQkgKDIgPDwgNikgfAorCQkJCQkgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0KTsKKwkJCX0gZWxzZSB7CisJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwKKwkJCQkJICgyIDw8IDYpKTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQl9CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfQorCX0KKworCS8qIFhYWCBicmVhZGNydW1iICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFRocm90dGxlIG91ciByZW5kZXJpbmcgYnkgd2FpdGluZyB1bnRpbCB0aGUgcmluZyBoYXMgY29tcGxldGVkIG91ciByZXF1ZXN0cworICogZW1pdHRlZCBvdmVyIDIwIG1zZWMgYWdvLgorICoKKyAqIFRoaXMgc2hvdWxkIGdldCB1cyByZWFzb25hYmxlIHBhcmFsbGVsaXNtIGJldHdlZW4gQ1BVIGFuZCBHUFUgYnV0IGFsc28KKyAqIHJlbGF0aXZlbHkgbG93IGxhdGVuY3kgd2hlbiBibG9ja2luZyBvbiBhIHBhcnRpY3VsYXIgcmVxdWVzdCB0byBmaW5pc2guCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCWludCByZXQgPSAwOworCXVpbnQzMl90IHNlcW5vOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXNlcW5vID0gaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9CisJCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubzsKKwlpZiAoc2Vxbm8pCisJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludAoraTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZXhlY19saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmplY3RfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CisJaW50IHJldCwgaSwgcGlubmVkID0gMDsKKwl1aW50NjRfdCBleGVjX29mZnNldDsKKwl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWluczsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAorCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7CisjZW5kaWYKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7CisJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2VybGFuZCAqLworCWV4ZWNfbGlzdCA9IGRybV9jYWxsb2Moc2l6ZW9mKCpleGVjX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQsCisJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCW9iamVjdF9saXN0ID0gZHJtX2NhbGxvYyhzaXplb2YoKm9iamVjdF9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGV4ZWNfbGlzdCA9PSBOVUxMIHx8IG9iamVjdF9saXN0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBvciBvYmplY3QgbGlzdCAiCisJCQkgICJmb3IgJWQgYnVmZmVyc1xuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjX2xpc3QsCisJCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCWdvdG8gcHJlX211dGV4X2VycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgeworCQlEUk1fRVJST1IoIkV4ZWNidWYgd2hpbGUgd2VkZ2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKSB7CisJCURSTV9FUlJPUigiRXhlY2J1ZiB3aGlsZSBWVC1zd2l0Y2hlZC5cbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBaZXJvIHRoZSBnbG9hYmwgZmx1c2gvaW52YWxpZGF0ZSBmbGFncy4gVGhlc2UKKwkgKiB3aWxsIGJlIG1vZGlmaWVkIGFzIGVhY2ggb2JqZWN0IGlzIGJvdW5kIHRvIHRoZQorCSAqIGd0dAorCSAqLworCWRldi0+aW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwlkZXYtPmZsdXNoX2RvbWFpbnMgPSAwOworCisJLyogTG9vayB1cCBvYmplY3QgaGFuZGxlcyBhbmQgcGVyZm9ybSB0aGUgcmVsb2NhdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJb2JqZWN0X2xpc3RbaV0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICAgICAgZXhlY19saXN0W2ldLmhhbmRsZSk7CisJCWlmIChvYmplY3RfbGlzdFtpXSA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxuIiwKKwkJCQkgICBleGVjX2xpc3RbaV0uaGFuZGxlLCBpKTsKKwkJCXJldCA9IC1FQkFERjsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfcmVhZF9kb21haW5zID0gMDsKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUob2JqZWN0X2xpc3RbaV0sCisJCQkJCQkgICAgICAgZmlsZV9wcml2LAorCQkJCQkJICAgICAgICZleGVjX2xpc3RbaV0pOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIm9iamVjdCBiaW5kIGFuZCByZWxvY2F0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwaW5uZWQgPSBpICsgMTsKKwl9CisKKwkvKiBTZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1BTkQgKi8KKwliYXRjaF9vYmogPSBvYmplY3RfbGlzdFthcmdzLT5idWZmZXJfY291bnQtMV07CisJYmF0Y2hfb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworCWJhdGNoX29iai0+cGVuZGluZ193cml0ZV9kb21haW4gPSAwOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQkJLyogV2UgZXZpY3RlZCB0aGUgYnVmZmVyIGluIHRoZSBwcm9jZXNzIG9mIHZhbGlkYXRpbmcKKwkJCSAqIG91ciBzZXQgb2YgYnVmZmVycyBpbi4gIFdlIGNvdWxkIHRyeSB0byByZWNvdmVyIGJ5CisJCQkgKiBraWNraW5nIHRoZW0gZXZlcnl0aGluZyBvdXQgYW5kIHRyeWluZyBhZ2FpbiBmcm9tCisJCQkgKiB0aGUgc3RhcnQuCisJCQkgKi8KKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIG1ha2Ugc3VyZSBhbGwgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgaGF2ZSBwYXNzZWQgKi8KKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4ob2JqLAorCQkJCQkJIG9iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMsCisJCQkJCQkgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBGbHVzaC9pbnZhbGlkYXRlIGNhY2hlcyBhbmQgY2hpcHNldCBidWZmZXIgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9nZW1fZGV2X3NldF9kb21haW4oZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworI2lmIFdBVENIX0NPSEVSRU5DWQorCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KG9iamVjdF9saXN0W2ldLAorCQkJCQkJZXhlY19saXN0W2ldLmhhbmRsZSk7CisJfQorI2VuZGlmCisKKwlleGVjX29mZnNldCA9IGV4ZWNfbGlzdFthcmdzLT5idWZmZXJfY291bnQgLSAxXS5vZmZzZXQ7CisKKyNpZiBXQVRDSF9FWEVDCisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqZWN0X2xpc3RbYXJncy0+YnVmZmVyX2NvdW50IC0gMV0sCisJCQkgICAgICBhcmdzLT5iYXRjaF9sZW4sCisJCQkgICAgICBfX2Z1bmNfXywKKwkJCSAgICAgIH4wKTsKKyNlbmRpZgorCisJKHZvaWQpaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJLyogRXhlYyB0aGUgYmF0Y2hidWZmZXIgKi8KKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgYXJncywgZXhlY19vZmZzZXQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJkaXNwYXRjaCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGNvbW1hbmRzIGluIHRoZSBiYXRjaCBidWZmZXIgYXJlCisJICogZmluaXNoZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgZmlyZXMKKwkgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9yZXRpcmVfY29tbWFuZHMoZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qCisJICogR2V0IGEgc2Vxbm8gcmVwcmVzZW50aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIHdoaWNoIHdlIGNhbiB3YWl0IG9uLiAgV2Ugd291bGQgbGlrZSB0byBtaXRpZ2F0ZSB0aGVzZSBpbnRlcnJ1cHRzLAorCSAqIGxpa2VseSBieSBvbmx5IGNyZWF0aW5nIHNlcW5vcyBvY2Nhc2lvbmFsbHkgKHNvIHRoYXQgd2UgaGF2ZQorCSAqICpzb21lKiBpbnRlcnJ1cHRzIHJlcHJlc2VudGluZyBjb21wbGV0aW9uIG9mIGJ1ZmZlcnMgdGhhdCB3ZSBjYW4KKwkgKiB3YWl0IG9uIHdoZW4gdHJ5aW5nIHRvIGNsZWFyIHVwIGd0dCBzcGFjZSkuCisJICovCisJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisJQlVHX09OKHNlcW5vID09IDApOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubyA9IHNlcW5vOworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9iamVjdF9saXN0W2ldOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmopOworCQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBzZXFubzsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBtb3ZlIHRvIGV4ZWMgbGlzdCAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwl9CisjaWYgV0FUQ0hfTFJVCisJaTkxNV9kdW1wX2xydShkZXYsIF9fZnVuY19fKTsKKyNlbmRpZgorCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJICAgZXhlY19saXN0LAorCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCisJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCSAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKK2VycjoKKwlpZiAob2JqZWN0X2xpc3QgIT0gTlVMTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGlubmVkOyBpKyspCisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqZWN0X2xpc3RbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iamVjdF9saXN0W2ldKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKK3ByZV9tdXRleF9lcnI6CisJZHJtX2ZyZWUob2JqZWN0X2xpc3QsIHNpemVvZigqb2JqZWN0X2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGV4ZWNfbGlzdCwgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIGFsaWdubWVudCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsdXJlIHRvIGJpbmQ6ICVkIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJb2JqX3ByaXYtPnBpbl9jb3VudCsrOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBub3QgYWN0aXZlIGFuZCBub3QgcGVuZGluZyBhIGZsdXNoLAorCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBpbmFjdGl2ZSBsaXN0CisJICovCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMSkgeworCQlhdG9taWNfaW5jKCZkZXYtPnBpbl9jb3VudCk7CisJCWF0b21pY19hZGQob2JqLT5zaXplLCAmZGV2LT5waW5fbWVtb3J5KTsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCAmJgorCQkgICAgIWxpc3RfZW1wdHkoJm9ial9wcml2LT5saXN0KSkKKwkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlvYmpfcHJpdi0+cGluX2NvdW50LS07CisJQlVHX09OKG9ial9wcml2LT5waW5fY291bnQgPCAwKTsKKwlCVUdfT04ob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKTsKKworCS8qIElmIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIHBpbm5lZCwgYW5kIGlzCisJICogbmVpdGhlciBhY3RpdmUgbm9yIGJlaW5nIGZsdXNoZWQsIHRoZW4gc3RpY2sgaXQgb24KKwkgKiB0aGUgaW5hY3RpdmUgbGlzdAorCSAqLworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ID09IDApIHsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCkKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKwkJYXRvbWljX2RlYygmZGV2LT5waW5fY291bnQpOworCQlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+cGluX21lbW9yeSk7CisJfQorCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKK30KKworaW50CitpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fcGluX2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFhYWCAtIGZsdXNoIHRoZSBDUFUgY2FjaGVzIGZvciBwaW5uZWQgb2JqZWN0cworCSAqIGFzIHRoZSBYIHNlcnZlciBkb2Vzbid0IG1hbmFnZSBkb21haW5zIHlldAorCSAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwl9CisJYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3VucGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fdW5waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworaW50CitpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV9idXN5X2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJYXJncy0+YnVzeSA9IG9ial9wcml2LT5hY3RpdmU7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKyAgICByZXR1cm4gaTkxNV9nZW1fcmluZ190aHJvdHRsZShkZXYsIGZpbGVfcHJpdik7Cit9CisKK2ludCBpOTE1X2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlvYmpfcHJpdiA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpvYmpfcHJpdiksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFdlJ3ZlIGp1c3QgYWxsb2NhdGVkIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCwKKwkgKiBzbyB0aGV5J3ZlIGp1c3QgYmVlbiB3cml0dGVuIGJ5IHRoZSBDUFUgd2l0aAorCSAqIHplcm9zLiBUaGV5J2xsIG5lZWQgdG8gYmUgY2xmbHVzaGVkIGJlZm9yZSB3ZQorCSAqIHVzZSB0aGVtIHdpdGggdGhlIEdQVS4KKwkgKi8KKwlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCisJb2JqX3ByaXYtPmFncF90eXBlID0gQUdQX1VTRVJfTUVNT1JZOworCisJb2JqLT5kcml2ZXJfcHJpdmF0ZSA9IG9ial9wcml2OworCW9ial9wcml2LT5vYmogPSBvYmo7CisJSU5JVF9MSVNUX0hFQUQoJm9ial9wcml2LT5saXN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJd2hpbGUgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKworCWk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKworCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCwgMSwgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKG9iai0+ZHJpdmVyX3ByaXZhdGUsIDEsIERSTV9NRU1fRFJJVkVSKTsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlpbnQgcmV0OworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZmx1c2hfZG9tYWlucyA9IGk5MTVfZ2VtX2Rldl9zZXRfZG9tYWluKG9iai0+ZGV2KTsKKworCWlmIChmbHVzaF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKQorCQkodm9pZCkgaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBVbmJpbmRzIGFsbCBvYmplY3RzIHRoYXQgYXJlIG9uIHRoZSBnaXZlbiBidWZmZXIgbGlzdC4gKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V2aWN0X2Zyb21fbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLAorCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCSAgICBsaXN0KTsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIlBpbm5lZCBvYmplY3QgaW4gdW5iaW5kIGxpc3RcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkVycm9yIHVuYmluZGluZyBvYmplY3QgaW4gTGVhdmVWVDogJWRcbiIsCisJCQkJICByZXQpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHNlcW5vLCBjdXJfc2Vxbm8sIGxhc3Rfc2Vxbm87CisJaW50IHN0dWNrLCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCB8fCBkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYWNrISAgRG9uJ3QgbGV0IGFueWJvZHkgZG8gZXhlY2J1ZiB3aGlsZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjaGlwLgorCSAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGlzIHdpdGggYSBzZW1hcGhvcmUsIG9yIHNvbWV0aGluZy4KKwkgKi8KKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMTsKKworCS8qIENhbmNlbCB0aGUgcmV0aXJlIHdvcmsgaGFuZGxlciwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGlmIHJ1bm5pbmcKKwkgKi8KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisKKwkvKiBGbHVzaCB0aGUgR1BVIGFsb25nIHdpdGggYWxsIG5vbi1DUFUgd3JpdGUgZG9tYWlucworCSAqLworCWk5MTVfZ2VtX2ZsdXNoKGRldiwgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpLAorCQkgICAgICAgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQlJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisKKwlpZiAoc2Vxbm8gPT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gc2Vxbm87CisJbGFzdF9zZXFubyA9IDA7CisJc3R1Y2sgPSAwOworCWZvciAoOzspIHsKKwkJY3VyX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChjdXJfc2Vxbm8sIHNlcW5vKSkKKwkJCWJyZWFrOworCQlpZiAobGFzdF9zZXFubyA9PSBjdXJfc2Vxbm8pIHsKKwkJCWlmIChzdHVjaysrID4gMTAwKSB7CisJCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSB3ZWRnZWRcbiIpOworCQkJCWRldl9wcml2LT5tbS53ZWRnZWQgPSAxOworCQkJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW1zbGVlcCgxMCk7CisJCWxhc3Rfc2Vxbm8gPSBjdXJfc2Vxbm87CisJfQorCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKworCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQorCSAqIHdhaXRlZCBmb3IgYSBzZXF1ZW5jZSBoaWdoZXIgdGhhbiBhbnkgcGVuZGluZyBleGVjYnVmZmVyCisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisKKwkvKiBSZXF1ZXN0IHNob3VsZCBub3cgYmUgZW1wdHkgYXMgd2UndmUgYWxzbyB3YWl0ZWQKKwkgKiBmb3IgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgbGlzdAorCSAqLworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJLyogTW92ZSBhbGwgYnVmZmVycyBvdXQgb2YgdGhlIEdUVC4gKi8KKwlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2xpc3QoZGV2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faW5pdF9od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKworCS8qIElmIHdlIG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgc3RhdHVzIHBhZ2UsIGl0J3MgYWxyZWFkeQorCSAqIGluaXRpYWxpemVkIGF0IGRyaXZlciBsb2FkIHRpbWUuCisJICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgNDA5Nik7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHN0YXR1cyBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDQwOTYpOworCWlmIChyZXQgIT0gMCkgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBzdGF0dXMgcGFnZS5cbiIpOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5od3Nfb2JqID0gb2JqOworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlJOTE1X1JFQUQoSFdTX1BHQSk7IC8qIHBvc3RpbmcgcmVhZCAqLworCURSTV9ERUJVRygiaHdzIG9mZnNldDogMHglMDh4XG4iLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKwl1MzIgaGVhZDsKKworCXJldCA9IGk5MTVfZ2VtX2luaXRfaHdzKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCAxMjggKiAxMDI0KTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmluZ2J1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5Nik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHVwIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIHJpbmcuICovCisJZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IG9iai0+c2l6ZTsKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBvYmotPnNpemUgLSAxOworCisJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBvYmotPnNpemU7CisJZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOworCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcF93YygmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHJpbmdidWZmZXIuXG4iKTsKKwkJbWVtc2V0KCZkZXZfcHJpdi0+cmluZywgMCwgc2l6ZW9mKGRldl9wcml2LT5yaW5nKSk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9IG9iajsKKwlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZTsKKworCS8qIFN0b3AgdGhlIHJpbmcgaWYgaXQncyBydW5uaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9DVEwsIDApOworCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCAwKTsKKwlJOTE1X1dSSVRFKFBSQjBfSEVBRCwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSByaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9TVEFSVCwgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOworCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKworCS8qIEc0NSByaW5nIGluaXRpYWxpemF0aW9uIGZhaWxzIHRvIHJlc2V0IGhlYWQgdG8gemVybyAqLworCWlmIChoZWFkICE9IDApIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGhlYWQgbm90IHJlc2V0IHRvIHplcm8gIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCUk5MTVfV1JJVEUoUFJCMF9IRUFELCAwKTsKKworCQlEUk1fRVJST1IoIlJpbmcgaGVhZCBmb3JjZWQgdG8gemVybyAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBSQjBfQ1RMLAorCQkgICAoKG9iai0+c2l6ZSAtIDQwOTYpICYgUklOR19OUl9QQUdFUykgfAorCQkgICBSSU5HX05PX1JFUE9SVCB8CisJCSAgIFJJTkdfVkFMSUQpOworCisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCisJLyogSWYgdGhlIGhlYWQgaXMgc3RpbGwgbm90IHplcm8sIHRoZSByaW5nIGlzIGRlYWQgKi8KKwlpZiAoaGVhZCAhPSAwKSB7CisJCURSTV9FUlJPUigiUmluZyBpbml0aWFsaXphdGlvbiBmYWlsZWQgIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFVwZGF0ZSBvdXIgY2FjaGUgb2YgdGhlIHJpbmcgc3RhdGUgKi8KKwlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZGV2X3ByaXYtPnJpbmcucmluZ19vYmopOworCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gTlVMTDsKKwltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKworCWlmIChkZXZfcHJpdi0+aHdzX29iaiAhPSBOVUxMKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmh3c19vYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJa3VubWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJZGV2X3ByaXYtPmh3c19vYmogPSBOVUxMOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gTlVMTDsKKworCQkvKiBXcml0ZSBoaWdoIGFkZHJlc3MgaW50byBIV1NfUEdBIHdoZW4gZGlzYWJsaW5nLiAqLworCQlJOTE1X1dSSVRFKEhXU19QR0EsIDB4MWZmZmYwMDApOworCX0KK30KKworaW50CitpOTE1X2dlbV9lbnRlcnZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpIHsKKwkJRFJNX0VSUk9SKCJSZWVuYWJsaW5nIHdlZGdlZCBoYXJkd2FyZSwgZ29vZCBsdWNrXG4iKTsKKwkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDA7CisJfQorCisJcmV0ID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKTsKKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9pcnFfaW5zdGFsbChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fbGVhdmV2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAoraTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBpZGxlIGhhcmR3YXJlOiAlZFxuIiwgcmV0KTsKK30KKwordm9pZAoraTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAorCQkJICBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKTsKKwlJTklUX1dPUksoJmRldl9wcml2LT5tbS52Ymxhbmtfd29yaywKKwkJICBpOTE1X2dlbV92Ymxhbmtfd29ya19oYW5kbGVyKTsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gPSAxOworCisJaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkCitpOTE1X3ZlcmlmeV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9ial9wcml2LT5waW5fY291bnQgfHwgb2JqX3ByaXYtPmFjdGl2ZSB8fAorCQkgICAgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwKKwkJCQkJICAgSTkxNV9HRU1fRE9NQUlOX0dUVCkpKQorCQkJRFJNX0VSUk9SKCJpbmFjdGl2ZSAlcCAocCAlZCBhICVkIHcgJXgpICAlczolZFxuIiwKKwkJCQkgIG9iaiwKKwkJCQkgIG9ial9wcml2LT5waW5fY291bnQsIG9ial9wcml2LT5hY3RpdmUsCisJCQkJICBvYmotPndyaXRlX2RvbWFpbiwgZmlsZSwgbGluZSk7CisJfQorfQorI2VuZGlmIC8qIFdBVENIX0lOQUNUSVZFICovCisKKworI2lmIFdBVENIX0JVRiB8IFdBVENIX0VYRUMgfCBXQVRDSF9QV1JJVEUKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9kdW1wX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsCisJCSAgIHVpbnQzMl90IGJpYXMsIHVpbnQzMl90IG1hcmspCit7CisJdWludDMyX3QgKm1lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlpbnQgaTsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSA0KQorCQlEUk1fSU5GTygiJTA4eDogJTA4eCVzXG4iLAorCQkJICAoaW50KSAoYmlhcyArIGkpLCBtZW1baSAvIDRdLAorCQkJICAoYmlhcyArIGkgPT0gbWFyaykgPyAiICoqKioqKioqIiA6ICIiKTsKKwlrdW5tYXBfYXRvbWljKG1lbSwgS01fVVNFUjApOworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisKKwlEUk1fSU5GTygiJXM6IG9iamVjdCBhdCBvZmZzZXQgJTA4eFxuIiwgd2hlcmUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgKGxlbiArIFBBR0VfU0laRS0xKSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBwYWdlX2xlbiwgY2h1bmssIGNodW5rX2xlbjsKKworCQlwYWdlX2xlbiA9IGxlbiAtIHBhZ2UgKiBQQUdFX1NJWkU7CisJCWlmIChwYWdlX2xlbiA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuID0gUEFHRV9TSVpFOworCisJCWZvciAoY2h1bmsgPSAwOyBjaHVuayA8IHBhZ2VfbGVuOyBjaHVuayArPSAxMjgpIHsKKwkJCWNodW5rX2xlbiA9IHBhZ2VfbGVuIC0gY2h1bms7CisJCQlpZiAoY2h1bmtfbGVuID4gMTI4KQorCQkJCWNodW5rX2xlbiA9IDEyODsKKwkJCWk5MTVfZ2VtX2R1bXBfcGFnZShvYmpfcHJpdi0+cGFnZV9saXN0W3BhZ2VdLAorCQkJCQkgICBjaHVuaywgY2h1bmsgKyBjaHVua19sZW4sCisJCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgcGFnZSAqIFBBR0VfU0laRSwKKwkJCQkJICAgbWFyayk7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmIFdBVENIX0xSVQordm9pZAoraTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QJCSpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QJKm9ial9wcml2OworCisJRFJNX0lORk8oImFjdGl2ZSBsaXN0ICVzIHtcbiIsIHdoZXJlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fSU5GTygiICAgICVwOiAlMDh4XG4iLCBvYmpfcHJpdiwKKwkJCSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCX0KKwlEUk1fSU5GTygifVxuIik7CisJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKKwkJCSAgICBsaXN0KQorCXsKKwkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCisJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwl9CisJRFJNX0lORk8oIn1cbiIpOworCURSTV9JTkZPKCJpbmFjdGl2ZSAlcyB7XG4iLCB3aGVyZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LCBsaXN0KSB7CisJCURSTV9JTkZPKCIgICAgJXA6ICUwOHhcbiIsIG9ial9wcml2LAorCQkJIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJfQorCURSTV9JTkZPKCJ9XG4iKTsKK30KKyNlbmRpZgorCisKKyNpZiBXQVRDSF9DT0hFUkVOQ1kKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3koc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisJdWludDMyX3QgKmd0dF9tYXBwaW5nOworCXVpbnQzMl90ICpiYWNraW5nX21hcCA9IE5VTEw7CisJaW50IGJhZF9jb3VudCA9IDA7CisKKwlEUk1fSU5GTygiJXM6IGNoZWNraW5nIGNvaGVyZW5jeSBvZiBvYmplY3QgJXBAMHglMDh4ICglZCwgJWRrYik6XG4iLAorCQkgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmd0dF9vZmZzZXQsIGhhbmRsZSwKKwkJIG9iai0+c2l6ZSAvIDEwMjQpOworCisJZ3R0X21hcHBpbmcgPSBpb3JlbWFwKGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgICAgICBvYmotPnNpemUpOworCWlmIChndHRfbWFwcGluZyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBHVFQgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBpOworCisJCWJhY2tpbmdfbWFwID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtwYWdlXSwgS01fVVNFUjApOworCisJCWlmIChiYWNraW5nX21hcCA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBtYXAgYmFja2luZyBwYWdlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIDQ7IGkrKykgeworCQkJdWludDMyX3QgY3B1dmFsID0gYmFja2luZ19tYXBbaV07CisJCQl1aW50MzJfdCBndHR2YWwgPSByZWFkbChndHRfbWFwcGluZyArCisJCQkJCQlwYWdlICogMTAyNCArIGkpOworCisJCQlpZiAoY3B1dmFsICE9IGd0dHZhbCkgeworCQkJCURSTV9JTkZPKCJpbmNvaGVyZW50IENQVSB2cyBHUFUgYXQgMHglMDh4OiAiCisJCQkJCSAiMHglMDh4IHZzIDB4JTA4eFxuIiwKKwkJCQkJIChpbnQpKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgICAgIHBhZ2UgKiBQQUdFX1NJWkUgKyBpICogNCksCisJCQkJCSBjcHV2YWwsIGd0dHZhbCk7CisJCQkJaWYgKGJhZF9jb3VudCsrID49IDgpIHsKKwkJCQkJRFJNX0lORk8oIi4uLlxuIik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCQlrdW5tYXBfYXRvbWljKGJhY2tpbmdfbWFwLCBLTV9VU0VSMCk7CisJCWJhY2tpbmdfbWFwID0gTlVMTDsKKwl9CisKKyBvdXQ6CisJaWYgKGJhY2tpbmdfbWFwICE9IE5VTEwpCisJCWt1bm1hcF9hdG9taWMoYmFja2luZ19tYXAsIEtNX1VTRVIwKTsKKwlpb3VubWFwKGd0dF9tYXBwaW5nKTsKKworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBEaXJlY3RseSBmbHVzaCB0aGUgb2JqZWN0LCBzaW5jZSB3ZSBqdXN0IGxvYWRlZCB2YWx1ZXMgd2l0aCB0aGUgQ1BVCisJICogZnJvbSB0aGUgYmFja2luZyBwYWdlcyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXN0dXJiIHRoZSBjYWNoZQorCSAqIG1hbmFnZW1lbnQgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gb2JzZXJ2ZS4KKwkgKi8KKworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ0MTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCJBY3RpdmU6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkZsdXNoaW5nOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkluYWN0aXZlOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiUmVxdWVzdDpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fUFJPQ19QUklOVCgiICAgICVkIEAgJWQgJTA4eFxuIiwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkgICAgICAgKGludCkgKGppZmZpZXMgLSBnZW1fcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzKSwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyk7CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3NlcW5vX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLCBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgJWRcbiIsIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbiAtIG9mZnNldDsKK30KKworCitzdGF0aWMgaW50IGk5MTVfaW50ZXJydXB0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUVSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUlSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBtYXNrOiAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSU1SKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUFTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdHMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCSAgICAgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICAgICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CisJLyoqIGZpbGUgbmFtZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJLyoqIHByb2MgY2FsbGJhY2sqLworCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworfSBpOTE1X2dlbV9wcm9jX2xpc3RbXSA9IHsKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX2FjdGl2ZV9pbmZvfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fZmx1c2hpbmdfaW5mb30sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX2luYWN0aXZlX2luZm99LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAorCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCit9OworCisjZGVmaW5lIEk5MTVfR0VNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX3Byb2NfbGlzdCkKKworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKKwkJCQkJU19JRlJFRyB8IFNfSVJVR08sIG1pbm9yLT5kZXZfcm9vdCk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLy4uLi8lc1xuIiwKKwkJCQkgIGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lKTsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsCisJCQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZW50LT5yZWFkX3Byb2MgPSBpOTE1X2dlbV9wcm9jX2xpc3RbaV0uZjsKKwkJZW50LT5kYXRhID0gbWlub3I7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQgaTsKKworCWlmICghbWlub3ItPmRldl9yb290KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9HRU1fUFJPQ19FTlRSSUVTOyBpKyspCisJCXJlbW92ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI4NWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKy8qKiBAZmlsZSBpOTE1X2dlbV90aWxpbmcuYworICoKKyAqIFN1cHBvcnQgZm9yIG1hbmFnaW5nIHRpbGluZyBzdGF0ZSBvZiBidWZmZXIgb2JqZWN0cy4KKyAqCisgKiBUaGUgaWRlYSBiZWhpbmQgdGlsaW5nIGlzIHRvIGluY3JlYXNlIGNhY2hlIGhpdCByYXRlcyBieSByZWFycmFuZ2luZworICogcGl4ZWwgZGF0YSBzbyB0aGF0IGEgZ3JvdXAgb2YgcGl4ZWwgYWNjZXNzZXMgYXJlIGluIHRoZSBzYW1lIGNhY2hlbGluZS4KKyAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZyb20gZG9pbmcgdGhpcyBvbiB0aGUgYmFjay9kZXB0aCBidWZmZXIgYXJlIG9uCisgKiB0aGUgb3JkZXIgb2YgMzAlLgorICoKKyAqIEludGVsIGFyY2hpdGVjdHVyZXMgbWFrZSB0aGlzIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQsIHRob3VnaCwgYnkKKyAqIGFkanVzdG1lbnRzIG1hZGUgdG8gYWRkcmVzc2luZyBvZiBkYXRhIHdoZW4gdGhlIG1lbW9yeSBpcyBpbiBpbnRlcmxlYXZlZAorICogbW9kZSAobWF0Y2hlZCBwYWlycyBvZiBESU1NUykgdG8gaW1wcm92ZSBtZW1vcnkgYmFuZHdpZHRoLgorICogRm9yIGludGVybGVhdmVkIG1lbW9yeSwgdGhlIENQVSBzZW5kcyBldmVyeSBzZXF1ZW50aWFsIDY0IGJ5dGVzCisgKiB0byBhbiBhbHRlcm5hdGUgbWVtb3J5IGNoYW5uZWwgc28gaXQgY2FuIGdldCB0aGUgYmFuZHdpZHRoIGZyb20gYm90aC4KKyAqCisgKiBUaGUgR1BVIGFsc28gcmVhcnJhbmdlcyBpdHMgYWNjZXNzZXMgZm9yIGluY3JlYXNlZCBiYW5kd2lkdGggdG8gaW50ZXJsZWF2ZWQKKyAqIG1lbW9yeSwgYW5kIGl0IG1hdGNoZXMgd2hhdCB0aGUgQ1BVIGRvZXMgZm9yIG5vbi10aWxlZC4gIEhvd2V2ZXIsIHdoZW4gdGlsZWQKKyAqIGl0IGRvZXMgaXQgYSBsaXR0bGUgZGlmZmVyZW50bHksIHNpbmNlIG9uZSB3YWxrcyBhZGRyZXNzZXMgbm90IGp1c3QgaW4gdGhlCisgKiBYIGRpcmVjdGlvbiBidXQgYWxzbyBZLiAgU28sIGFsb25nIHdpdGggYWx0ZXJuYXRpbmcgY2hhbm5lbHMgd2hlbiBiaXQKKyAqIDYgb2YgdGhlIGFkZHJlc3MgZmxpcHMsIGl0IGFsc28gYWx0ZXJuYXRlcyB3aGVuIG90aGVyIGJpdHMgZmxpcCAtLSAgQml0cyA5CisgKiAoZXZlcnkgNTEyIGJ5dGVzLCBhbiBYIHRpbGUgc2NhbmxpbmUpIGFuZCAxMCAoZXZlcnkgdHdvIFggdGlsZSBzY2FubGluZXMpCisgKiBhcmUgY29tbW9uIHRvIGJvdGggdGhlIDkxNSBhbmQgOTY1LWNsYXNzIGhhcmR3YXJlLgorICoKKyAqIFRoZSBDUFUgYWxzbyBzb21ldGltZXMgWE9ScyBpbiBoaWdoZXIgYml0cyBhcyB3ZWxsLCB0byBpbXByb3ZlCisgKiBiYW5kd2lkdGggZG9pbmcgc3RyaWRlZCBhY2Nlc3MgbGlrZSB3ZSBkbyBzbyBmcmVxdWVudGx5IGluIGdyYXBoaWNzLiAgVGhpcworICogaXMgY2FsbGVkICJDaGFubmVsIFhPUiBSYW5kb21pemF0aW9uIiBpbiB0aGUgTUNIIGRvY3VtZW50YXRpb24uICBUaGUgcmVzdWx0CisgKiBpcyB0aGF0IHRoZSBDUFUgaXMgWE9SaW5nIGluIGVpdGhlciBiaXQgMTEgb3IgYml0IDE3IHRvIGJpdCA2IG9mIGl0cyBhZGRyZXNzCisgKiBkZWNvZGUuCisgKgorICogQWxsIG9mIHRoaXMgYml0IDYgWE9SaW5nIGhhcyBhbiBlZmZlY3Qgb24gb3VyIG1lbW9yeSBtYW5hZ2VtZW50LAorICogYXMgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgM2QgZHJpdmVyIGNhbiBjb3JyZWN0bHkgYWRkcmVzcyBvYmplY3QKKyAqIGNvbnRlbnRzLgorICoKKyAqIElmIHdlIGRvbid0IGhhdmUgaW50ZXJsZWF2ZWQgbWVtb3J5LCBhbGwgdGlsaW5nIGlzIHNhZmUgYW5kIG5vIHN3aXp6bGluZyBpcworICogcmVxdWlyZWQuCisgKgorICogV2hlbiBiaXQgMTcgaXMgWE9SZWQgaW4sIHdlIHNpbXBseSByZWZ1c2UgdG8gdGlsZSBhdCBhbGwuICBCaXQKKyAqIDE3IGlzIG5vdCBqdXN0IGEgcGFnZSBvZmZzZXQsIHNvIGFzIHdlIHBhZ2UgYW4gb2JqZXQgb3V0IGFuZCBiYWNrIGluLAorICogaW5kaXZpZHVhbCBwYWdlcyBpbiBpdCB3aWxsIGhhdmUgZGlmZmVyZW50IGJpdCAxNyBhZGRyZXNzZXMsIHJlc3VsdGluZyBpbgorICogZWFjaCA2NCBieXRlcyBiZWluZyBzd2FwcGVkIHdpdGggaXRzIG5laWdoYm9yIQorICoKKyAqIE90aGVyd2lzZSwgaWYgaW50ZXJsZWF2ZWQsIHdlIGhhdmUgdG8gdGVsbCB0aGUgM2QgZHJpdmVyIHdoYXQgdGhlIGFkZHJlc3MKKyAqIHN3aXp6bGluZyBpdCBuZWVkcyB0byBkbyBpcywgc2luY2UgaXQncyB3cml0aW5nIHdpdGggdGhlIENQVSB0byB0aGUgcGFnZXMKKyAqIChiaXQgNiBhbmQgcG90ZW50aWFsbHkgYml0IDExIFhPUmVkIGluKSwgYW5kIHRoZSBHUFUgaXMgcmVhZGluZyBmcm9tIHRoZQorICogcGFnZXMgKGJpdCA2LCA5LCBhbmQgMTAgWE9SZWQgaW4pLCByZXN1bHRpbmcgaW4gYSBjdW11bGF0aXZlIGJpdCBzd2l6emxpbmcKKyAqIHJlcXVpcmVkIGJ5IHRoZSBDUFUgb2YgWE9SaW5nIGluIGJpdCA2LCA5LCAxMCwgYW5kIHBvdGVudGlhbGx5IDExLCBpbiBvcmRlcgorICogdG8gbWF0Y2ggd2hhdCB0aGUgR1BVIGV4cGVjdHMuCisgKi8KKworLyoqCisgKiBEZXRlY3RzIGJpdCA2IHN3aXp6bGluZyBvZiBhZGRyZXNzIGxvb2t1cCBiZXR3ZWVuIElHRCBhY2Nlc3MgYW5kIENQVQorICogYWNjZXNzIHRocm91Z2ggbWFpbiBtZW1vcnkuCisgKi8KK3ZvaWQKK2k5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJdWludDMyX3Qgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisKKwlpZiAoIUlTX0k5WFgoZGV2KSkgeworCQkvKiBBcyBmYXIgYXMgd2Uga25vdywgdGhlIDg2NSBkb2Vzbid0IGhhdmUgdGhlc2UgYml0IDYKKwkJICogc3dpenpsaW5nIGlzc3Vlcy4KKwkJICovCisJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwl9IGVsc2UgaWYgKCghSVNfSTk2NUcoZGV2KSAmJiAhSVNfRzMzKGRldikpIHx8IElTX0k5NjVHTShkZXYpIHx8CisJCSAgIElTX0dNNDUoZGV2KSkgeworCQl1aW50MzJfdCBkY2M7CisKKwkJLyogT24gOTE1LTk0NSBhbmQgR005NjUsIGNoYW5uZWwgaW50ZXJsZWF2ZSBieSB0aGUgQ1BVIGlzCisJCSAqIGRldGVybWluZWQgYnkgRENDLiAgVGhlIENQVSB3aWxsIGFsdGVybmF0ZSBiYXNlZCBvbiBiaXQgNgorCQkgKiBpbiBpbnRlcmxlYXZlZCBtb2RlLCBhbmQgdGhlIEdQVSB3aWxsIHRoZW4gYWxzbyBhbHRlcm5hdGUKKwkJICogb24gYml0IDYsIDksIGFuZCAxMCBmb3IgWCwgYnV0IHRoZSBDUFUgbWF5IGFsc28gb3B0aW9uYWxseQorCQkgKiBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDE3IChYT1Igbm90IGRpc2FibGVkIGFuZCBYT1IKKwkJICogYml0ID09IDE3KS4KKwkJICovCisJCWRjYyA9IEk5MTVfUkVBRChEQ0MpOworCQlzd2l0Y2ggKGRjYyAmIERDQ19BRERSRVNTSU5HX01PREVfTUFTSykgeworCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUw6CisJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfQVNZTU1FVFJJQzoKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9JTlRFUkxFQVZFRDoKKwkJCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8CisJCQkgICAgZGNjICYgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUpIHsKKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKKwkJCX0gZWxzZSBpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKSB7CisJCQkJLyogR005NjUgb25seSBkb2VzIGJpdCAxMS1iYXNlZCBjaGFubmVsCisJCQkJICogcmFuZG9taXphdGlvbgorCQkJCSAqLworCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExOworCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzExOworCQkJfSBlbHNlIHsKKwkJCQkvKiBCaXQgMTcgb3IgcGVyaGFwcyBvdGhlciBzd2l6emxpbmcgKi8KKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChkY2MgPT0gMHhmZmZmZmZmZikgeworCQkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIGZyb20gTUNIQkFSLiAgIgorCQkJCSAgIkRpc2FibGluZyB0aWxpbmcuXG4iKTsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCX0KKwl9IGVsc2UgeworCQkvKiBUaGUgOTY1LCBHMzMsIGFuZCBuZXdlciwgaGF2ZSBhIHZlcnkgZmxleGlibGUgbWVtb3J5CisJCSAqIGNvbmZpZ3VyYXRpb24uICBJdCB3aWxsIGVuYWJsZSBkdWFsLWNoYW5uZWwgbW9kZQorCQkgKiAoaW50ZXJsZWF2aW5nKSBvbiBhcyBtdWNoIG1lbW9yeSBhcyBpdCBjYW4sIGFuZCB0aGUgR1BVCisJCSAqIHdpbGwgYWRkaXRpb25hbGx5IHNvbWV0aW1lcyBlbmFibGUgZGlmZmVyZW50IGJpdCA2CisJCSAqIHN3aXp6bGluZyBmb3IgdGlsZWQgb2JqZWN0cyBmcm9tIHRoZSBDUFUuCisJCSAqCisJCSAqIEhlcmUncyB3aGF0IEkgZm91bmQgb24gdGhlIEc5NjU6CisJCSAqICAgIHNsb3QgZmlsbCAgICAgICAgIG1lbW9yeSBzaXplICBzd2l6emxpbmcKKwkJICogMEEgICAwQiAgIDFBICAgMUIgICAgMS1jaCAgIDItY2gKKwkJICogNTEyICAwICAgIDAgICAgMCAgICAgNTEyICAgIDAgICAgIE8KKwkJICogNTEyICAwICAgIDUxMiAgMCAgICAgMTYgICAgIDEwMDggIFgKKwkJICogNTEyICAwICAgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMCAgICA1MTIgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMTAyNCAxMDI0IDEwMjQgMCAgICAgMjA0OCAgIDEwMjQgIE8KKwkJICoKKwkJICogV2UgY291bGQgcHJvYmFibHkgZGV0ZWN0IHRoaXMgYmFzZWQgb24gZWl0aGVyIHRoZSBEUkIKKwkJICogbWF0Y2hpbmcsIHdoaWNoIHdhcyB0aGUgY2FzZSBmb3IgdGhlIHN3aXp6bGluZyByZXF1aXJlZCBpbgorCQkgKiB0aGUgdGFibGUgYWJvdmUsIG9yIGZyb20gdGhlIDEtY2ggdmFsdWUgYmVpbmcgbGVzcyB0aGFuCisJCSAqIHRoZSBtaW5pbXVtIHNpemUgb2YgYSByYW5rLgorCQkgKi8KKwkJaWYgKEk5MTVfUkVBRDE2KEMwRFJCMykgIT0gSTkxNV9SRUFEMTYoQzFEUkIzKSkgeworCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7CisJCX0KKwl9CisKKwlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ID0gc3dpenpsZV94OworCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3kgPSBzd2l6emxlX3k7Cit9CisKKy8qKgorICogU2V0cyB0aGUgdGlsaW5nIG1vZGUgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIHJlcXVpcmVkIHN3aXp6bGluZyBvZgorICogYml0IDYgb2YgYWRkcmVzc2VzIGluIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKSB7CisJCW9ial9wcml2LT50aWxpbmdfbW9kZSA9IEk5MTVfVElMSU5HX05PTkU7CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCX0gZWxzZSB7CisJCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19YKQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeDsKKwkJZWxzZQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeTsKKwkJLyogSWYgd2UgY2FuJ3QgaGFuZGxlIHRoZSBzd2l6emxpbmcsIG1ha2UgaXQgdW50aWxlZC4gKi8KKwkJaWYgKGFyZ3MtPnN3aXp6bGVfbW9kZSA9PSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTikgeworCQkJYXJncy0+dGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19OT05FOworCQkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCX0KKwl9CisJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbGluZyBtb2RlIGFuZCByZXF1aXJlZCBiaXQgNiBzd2l6emxpbmcgZm9yIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqX3ByaXYtPnRpbGluZ19tb2RlOworCXN3aXRjaCAob2JqX3ByaXYtPnRpbGluZ19tb2RlKSB7CisJY2FzZSBJOTE1X1RJTElOR19YOgorCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3k7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5rbm93biB0aWxpbmcgbW9kZVxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBkZjAzNjExLi5iYWFlNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMxLDEyICszMSw5MiBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAotI2RlZmluZSBVU0VSX0lOVF9GTEFHICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotCiAjZGVmaW5lIE1BWF9OT1BJRCAoKHUzMil+MCkKIAorLyoqIFRoZXNlIGFyZSB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfVVNFUl9JTlRFUlJVUFQgfAkJXAorCQkJCSAgICBJOTE1X0FTTEVfSU5URVJSVVBUIHwJCVwKKwkJCQkgICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQgfCBcCisJCQkJICAgIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUKQorCit2b2lkCitpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCit7CisJaWYgKChkZXZfcHJpdi0+aXJxX21hc2tfcmVnICYgbWFzaykgIT0gMCkgeworCQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5tYXNrOworCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJCSh2b2lkKSBJOTE1X1JFQUQoSU1SKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraTkxNV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlpZiAoKGRldl9wcml2LT5pcnFfbWFza19yZWcgJiBtYXNrKSAhPSBtYXNrKSB7CisJCWRldl9wcml2LT5pcnFfbWFza19yZWcgfD0gbWFzazsKKwkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkodm9pZCkgSTkxNV9SRUFEKElNUik7CisJfQorfQorCisvKioKKyAqIGk5MTVfZ2V0X3BpcGUgLSByZXR1cm4gdGhlIHRoZSBwaXBlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHBsYW5lCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGxhbmU6IHBsYW5lIHRvIGxvb2sgZm9yCisgKgorICogVGhlIEludGVsIE1lc2EgJiAyRCBkcml2ZXJzIGNhbGwgdGhlIHZibGFuayByb3V0aW5lcyB3aXRoIGEgcGxhbmUgbnVtYmVyCisgKiByYXRoZXIgdGhhbiBhIHBpcGUgbnVtYmVyLCBzaW5jZSB0aGV5IG1heSBub3QgYWx3YXlzIGJlIGVxdWFsLiAgVGhpcyByb3V0aW5lCisgKiBtYXBzIHRoZSBnaXZlbiBAcGxhbmUgYmFjayB0byBhIHBpcGUgbnVtYmVyLgorICovCitzdGF0aWMgaW50CitpOTE1X2dldF9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkc3BjbnRyOworCisJZHNwY250ciA9IHBsYW5lID8gSTkxNV9SRUFEKERTUEJDTlRSKSA6IEk5MTVfUkVBRChEU1BBQ05UUik7CisKKwlyZXR1cm4gZHNwY250ciAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLID8gMSA6IDA7Cit9CisKKy8qKgorICogaTkxNV9nZXRfcGxhbmUgLSByZXR1cm4gdGhlIHRoZSBwbGFuZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBwaXBlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGlwZTogcGlwZSB0byBsb29rIGZvcgorICoKKyAqIFRoZSBJbnRlbCBNZXNhICYgMkQgZHJpdmVycyBjYWxsIHRoZSB2Ymxhbmsgcm91dGluZXMgd2l0aCBhIHBsYW5lIG51bWJlcgorICogcmF0aGVyIHRoYW4gYSBwbGFuZSBudW1iZXIsIHNpbmNlIHRoZXkgbWF5IG5vdCBhbHdheXMgYmUgZXF1YWwuICBUaGlzIHJvdXRpbmUKKyAqIG1hcHMgdGhlIGdpdmVuIEBwaXBlIGJhY2sgdG8gYSBwbGFuZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2V0X3BsYW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWlmIChpOTE1X2dldF9waXBlKGRldiwgMCkgPT0gcGlwZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaTkxNV9waXBlX2VuYWJsZWQgLSBjaGVjayBpZiBhIHBpcGUgaXMgZW5hYmxlZAorICogQGRldjogRFJNIGRldmljZQorICogQHBpcGU6IHBpcGUgdG8gY2hlY2sKKyAqCisgKiBSZWFkaW5nIGNlcnRhaW4gcmVnaXN0ZXJzIHdoZW4gdGhlIHBpcGUgaXMgZGlzYWJsZWQgY2FuIGhhbmcgdGhlIGNoaXAuCisgKiBVc2UgdGhpcyByb3V0aW5lIHRvIG1ha2Ugc3VyZSB0aGUgUExMIGlzIHJ1bm5pbmcgYW5kIHRoZSBwaXBlIGlzIGFjdGl2ZQorICogYmVmb3JlIHJlYWRpbmcgc3VjaCByZWdpc3RlcnMgaWYgdW5zdXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcGlwZWNvbmYgPSBwaXBlID8gUElQRUJDT05GIDogUElQRUFDT05GOworCisJaWYgKEk5MTVfUkVBRChwaXBlY29uZikgJiBQSVBFQUNPTkZfRU5BQkxFKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIEVtaXQgYmxpdHMgZm9yIHNjaGVkdWxlZCBidWZmZXIgc3dhcHMuCiAgKgpAQCAtNDgsOCArMTI4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXAsIGhpdHMsICpoaXQ7CiAJaW50IG5oaXRzLCBucmVjdHMsIHNsaWNlWzJdLCB1cHBlclsyXSwgbG93ZXJbMl0sIGk7Ci0JdW5zaWduZWQgY291bnRlclsyXSA9IHsgYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSwKLQkJCQlhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQyKSB9OworCXVuc2lnbmVkIGNvdW50ZXJbMl07CiAJc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvICpkcnc7CiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXUzMiBjcHAgPSBkZXZfcHJpdi0+Y3BwOwpAQCAtNzEsNiArMTUwLDkgQEAKIAkJc3JjX3BpdGNoID4+PSAyOwogCX0KIAorCWNvdW50ZXJbMF0gPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgMCk7CisJY291bnRlclsxXSA9IGRybV92YmxhbmtfY291bnQoZGV2LCAxKTsKKwogCURSTV9ERUJVRygiXG4iKTsKIAogCUlOSVRfTElTVF9IRUFEKCZoaXRzKTsKQEAgLTgzLDEyICsxNjUsMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7CiAJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwID0KIAkJCWxpc3RfZW50cnkobGlzdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisJCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHZibF9zd2FwLT5wbGFuZSk7CiAKLQkJaWYgKChjb3VudGVyW3ZibF9zd2FwLT5waXBlXSAtIHZibF9zd2FwLT5zZXF1ZW5jZSkgPiAoMTw8MjMpKQorCQlpZiAoKGNvdW50ZXJbcGlwZV0gLSB2Ymxfc3dhcC0+c2VxdWVuY2UpID4gKDE8PDIzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZGVsKGxpc3QpOwogCQlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZy0tOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCiAJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJCXNwaW5fbG9jaygmZGV2LT5kcndfbG9jayk7CkBAIC0xODEsNyArMjY1LDcgQEAKIAkJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnN3YXBfaGl0ID0KIAkJCQlsaXN0X2VudHJ5KGhpdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CiAJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdDsKLQkJCWludCBudW1fcmVjdHMsIHBpcGU7CisJCQlpbnQgbnVtX3JlY3RzLCBwbGFuZTsKIAkJCXVuc2lnbmVkIHNob3J0IHRvcCwgYm90dG9tOwogCiAJCQlkcncgPSBkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2hpdC0+ZHJ3X2lkKTsKQEAgLTE5MCw5ICsyNzQsOSBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlyZWN0ID0gZHJ3LT5yZWN0czsKLQkJCXBpcGUgPSBzd2FwX2hpdC0+cGlwZTsKLQkJCXRvcCA9IHVwcGVyW3BpcGVdOwotCQkJYm90dG9tID0gbG93ZXJbcGlwZV07CisJCQlwbGFuZSA9IHN3YXBfaGl0LT5wbGFuZTsKKwkJCXRvcCA9IHVwcGVyW3BsYW5lXTsKKwkJCWJvdHRvbSA9IGxvd2VyW3BsYW5lXTsKIAogCQkJZm9yIChudW1fcmVjdHMgPSBkcnctPm51bV9yZWN0czsgbnVtX3JlY3RzLS07IHJlY3QrKykgewogCQkJCWludCB5MSA9IG1heChyZWN0LT55MSwgdG9wKTsKQEAgLTIyOSw2MSArMzEzLDEzOSBAQAogCX0KIH0KIAordTMyIGk5MTVfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaGlnaF9mcmFtZTsKKwl1bnNpZ25lZCBsb25nIGxvd19mcmFtZTsKKwl1MzIgaGlnaDEsIGhpZ2gyLCBsb3csIGNvdW50OworCWludCBwaXBlOworCisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJaGlnaF9mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FSElHSCA6IFBJUEVBRlJBTUVISUdIOworCWxvd19mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FUElYRUwgOiBQSVBFQUZSQU1FUElYRUw7CisKKwlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpIHsKKwkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gZ2V0IHZibGFuayBjb3VudCBmb3IgZGlzYWJsZWQgcGlwZSAlZFxuIiwgcGlwZSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSGlnaCAmIGxvdyByZWdpc3RlciBmaWVsZHMgYXJlbid0IHN5bmNocm9uaXplZCwgc28gbWFrZSBzdXJlCisJICogd2UgZ2V0IGEgbG93IHZhbHVlIHRoYXQncyBzdGFibGUgYWNyb3NzIHR3byByZWFkcyBvZiB0aGUgaGlnaAorCSAqIHJlZ2lzdGVyLgorCSAqLworCWRvIHsKKwkJaGlnaDEgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJCWxvdyA9ICAoKEk5MTVfUkVBRChsb3dfZnJhbWUpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKwkJCVBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKwkJaGlnaDIgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworCisJY291bnQgPSAoaGlnaDEgPDwgOCkgfCBsb3c7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQltbS52Ymxhbmtfd29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X3ZibGFua190YXNrbGV0KGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiB0ZW1wOworCXUzMiBpaXI7CiAJdTMyIHBpcGVhX3N0YXRzLCBwaXBlYl9zdGF0czsKKwlpbnQgdmJsYW5rID0gMDsKIAotCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUFTVEFUKTsKLQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVCU1RBVCk7CisJYXRvbWljX2luYygmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCk7CiAKLQl0ZW1wID0gSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCB+MCk7CisJaWlyID0gSTkxNV9SRUFEKElJUik7CiAKLQl0ZW1wICY9IChVU0VSX0lOVF9GTEFHIHwgVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpOwotCi0JRFJNX0RFQlVHKCIlcyBmbGFnPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcCk7Ci0KLQlpZiAodGVtcCA9PSAwKQorCWlmIChpaXIgPT0gMCkgeworCQlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkgeworCQkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCQl9CiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7Ci0JKHZvaWQpIEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCURSTV9SRUFETUVNT1JZQkFSUklFUigpOworCS8qCisJICogQ2xlYXIgdGhlIFBJUEUoQXxCKVNUQVQgcmVncyBiZWZvcmUgdGhlIElJUiBvdGhlcndpc2UKKwkgKiB3ZSBtYXkgZ2V0IGV4dHJhIGludGVycnVwdHMuCisJICovCisJaWYgKGlpciAmIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKSB7CisJCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVBU1RBVCk7CisJCWlmICghKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpKQorCQkJcGlwZWFfc3RhdHMgJj0gfihQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkJIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOworCQllbHNlIGlmIChwaXBlYV9zdGF0cyAmIChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTfAorCQkJCQlQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKSkgeworCQkJdmJsYW5rKys7CisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIGk5MTVfZ2V0X3BsYW5lKGRldiwgMCkpOworCQl9CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CisJCUk5MTVfV1JJVEUoUElQRUFTVEFULCBwaXBlYV9zdGF0cyk7CisJfQorCWlmIChpaXIgJiBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCkgeworCQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCQkvKiBBY2sgdGhlIGV2ZW50ICovCisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CiAKLQlpZiAodGVtcCAmIFVTRVJfSU5UX0ZMQUcpCisJCS8qIFRoZSB2YmxhbmsgaW50ZXJydXB0IGdldHMgZW5hYmxlZCBldmVuIGlmIHdlIGRpZG4ndCBhc2sgZm9yCisJCSAgIGl0LCBzbyBtYWtlIHN1cmUgaXQncyBzaHV0IGRvd24gYWdhaW4gKi8KKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCisJCQlwaXBlYl9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGViX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgaTkxNV9nZXRfcGxhbmUoZGV2LCAxKSk7CisJCX0KKworCQlpZiAocGlwZWJfc3RhdHMgJiBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKQorCQkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CisJfQorCisJSTkxNV9XUklURShJSVIsIGlpcik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkodm9pZCkgSTkxNV9SRUFEKElJUik7IC8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKworCWlmIChpaXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKSB7CisJCWRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCX0KIAotCWlmICh0ZW1wICYgKFZTWU5DX1BJUEVBX0ZMQUcgfCBWU1lOQ19QSVBFQl9GTEFHKSkgewotCQlpbnQgdmJsYW5rX3BpcGUgPSBkZXZfcHJpdi0+dmJsYW5rX3BpcGU7CisJaWYgKGlpciAmIEk5MTVfQVNMRV9JTlRFUlJVUFQpCisJCW9wcmVnaW9uX2FzbGVfaW50cihkZXYpOwogCi0JCWlmICgodmJsYW5rX3BpcGUgJgotCQkgICAgIChEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCi0JCSAgICA9PSAoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCQlpZiAodGVtcCAmIFZTWU5DX1BJUEVBX0ZMQUcpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQkJaWYgKHRlbXAgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKCh0ZW1wICYgVlNZTkNfUElQRUFfRkxBRykgJiYKLQkJCSAgICAodmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9BKSkgfHwKLQkJCSAgICgodGVtcCAmIFZTWU5DX1BJUEVCX0ZMQUcpICYmCi0JCQkgICAgKHZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpKQotCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCi0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKLQotCQlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKQorCWlmICh2YmxhbmsgJiYgZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKSB7CisJCWlmIChkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKQogCQkJZHJtX2xvY2tlZF90YXNrbGV0KGRldiwgaTkxNV92YmxhbmtfdGFza2xldCk7Ci0JCUk5MTVfV1JJVEUoSTkxNVJFR19QSVBFQVNUQVQsCi0JCQlwaXBlYV9zdGF0c3xJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFfAotCQkJSTkxNV9WQkxBTktfQ0xFQVIpOwotCQlJOTE1X1dSSVRFKEk5MTVSRUdfUElQRUJTVEFULAotCQkJcGlwZWJfc3RhdHN8STkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRXwKLQkJCUk5MTVfVkJMQU5LX0NMRUFSKTsKKwkJZWxzZQorCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPm1tLnZibGFua193b3JrKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yOTgsMjMgKzQ2MCw0NSBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAxOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlPVVRfUklORygwKTsKLQlPVVRfUklORyhHRlhfT1BfVVNFUl9JTlRFUlJVUFQpOworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCXJldHVybiBkZXZfcHJpdi0+Y291bnRlcjsKIH0KIAordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoKytkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPT0gMSkpCisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKK30KKwordm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlCVUdfT04oZGV2LT5pcnFfZW5hYmxlZCAmJiBkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPD0gMCk7CisJaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKC0tZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID09IDApKQorCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworfQorCiBzdGF0aWMgaW50IGk5MTVfd2FpdF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBpcnFfbnIpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTMyMyw1NSArNTA3LDM0IEBACiAJRFJNX0RFQlVHKCJpcnFfbnI9JWQgYnJlYWRjcnVtYj0lZFxuIiwgaXJxX25yLAogCQkgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikpOwogCi0JaWYgKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKQorCWlmIChSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucikgeworCQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCQl9CiAJCXJldHVybiAwOworCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCisJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKIAlEUk1fV0FJVF9PTihyZXQsIGRldl9wcml2LT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCiAJCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7CisJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKIAogCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCURSTV9FUlJPUigiRUJVU1kgLS0gcmVjOiAlZCBlbWl0dGVkOiAlZFxuIiwKIAkJCSAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSwgKGludClkZXZfcHJpdi0+Y291bnRlcik7CiAJfQogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSwKLQkJCQkgICAgICBhdG9taWNfdCAqY291bnRlcikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoY291bnRlcikpCi0JCQktICpzZXF1ZW5jZSkgPD0gKDE8PDIzKSkpOwotCi0JKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLWludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCAmZGV2LT52YmxfcmVjZWl2ZWQpOwotfQotCi1pbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZDIpOwotfQotCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgogICovCiBpbnQgaTkxNV9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzgxLDE0ICs1NDQsMTUgQEAKIAlkcm1faTkxNV9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmVzdWx0ID0gaTkxNV9lbWl0X2lycShkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKERSTV9DT1BZX1RPX1VTRVIoZW1pdC0+aXJxX3NlcSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKSB7CiAJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKQEAgLTQxNCwxOCArNTc4LDc0IEBACiAJcmV0dXJuIGk5MTVfd2FpdF9pcnEoZGV2LCBpcnF3YWl0LT5pcnFfc2VxKTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9lbmFibGVfaW50ZXJydXB0IChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmUpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MTYgZmxhZzsKKwlpbnQgcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJdTMyCXBpcGVzdGF0X3JlZyA9IDA7CisJdTMyCXBpcGVzdGF0OwogCi0JZmxhZyA9IDA7Ci0JaWYgKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpCi0JCWZsYWcgfD0gVlNZTkNfUElQRUFfRkxBRzsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikKLQkJZmxhZyB8PSBWU1lOQ19QSVBFQl9GTEFHOworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQlNUQVQ7CisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IHBpcGUgJWRcbiIsCisJCQkgIHBpcGUpOworCQlicmVhazsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIFVTRVJfSU5UX0ZMQUcgfCBmbGFnKTsKKwlpZiAocGlwZXN0YXRfcmVnKSB7CisJCXBpcGVzdGF0ID0gSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJcGlwZXN0YXQgfD0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJZWxzZQorCQkJcGlwZXN0YXQgfD0gUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJcGlwZXN0YXQgfD0gKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfAorCQkJICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKTsKKwkJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKKwl1MzIJcGlwZXN0YXRfcmVnID0gMDsKKwl1MzIJcGlwZXN0YXQ7CisKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVBU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVCU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGRpc2FibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBwaXBlICVkXG4iLAorCQkJICBwaXBlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBpcGVzdGF0X3JlZykgeworCQlwaXBlc3RhdCA9IEk5MTVfUkVBRChwaXBlc3RhdF9yZWcpOworCQlwaXBlc3RhdCAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJICAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCS8qIENsZWFyIGFueSBzdGFsZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXBpcGVzdGF0IHw9IChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTIHwKKwkJCSAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyk7CisJCUk5MTVfV1JJVEUocGlwZXN0YXRfcmVnLCBwaXBlc3RhdCk7CisJfQogfQogCiAvKiBTZXQgdGhlIHZibGFuayBtb25pdG9yIHBpcGUKQEAgLTQzNCwyMiArNjU0LDEyIEBACiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCAqcGlwZSA9IGRhdGE7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGlwZS0+cGlwZSAmIH4oRFJNX0k5MTVfVkJMQU5LX1BJUEVfQXxEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIGludmFsaWQgcGlwZSAweCV4XG4iLCBwaXBlLT5waXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2X3ByaXYtPnZibGFua19waXBlID0gcGlwZS0+cGlwZTsKLQotCWk5MTVfZW5hYmxlX2ludGVycnVwdCAoZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NTgsMTkgKzY2OCwxMyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19waXBlX3QgKnBpcGUgPSBkYXRhOwotCXUxNiBmbGFnOwogCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZmxhZyA9IEk5MTVfUkVBRChJOTE1UkVHX0lOVF9FTkFCTEVfUik7Ci0JcGlwZS0+cGlwZSA9IDA7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQV9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJcGlwZS0+cGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9COwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODQsMTEgKzY4OCwxMiBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19zd2FwX3QgKnN3YXAgPSBkYXRhOwogCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwOwotCXVuc2lnbmVkIGludCBwaXBlLCBzZXF0eXBlLCBjdXJzZXE7CisJdW5zaWduZWQgaW50IHBpcGUsIHNlcXR5cGUsIGN1cnNlcSwgcGxhbmU7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWludCByZXQ7CiAKLQlpZiAoIWRldl9wcml2KSB7CisJaWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKIAkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MDQsNyArNzA5LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcGlwZSA9IChzd2FwLT5zZXF0eXBlICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/IDEgOiAwOworCXBsYW5lID0gKHN3YXAtPnNlcXR5cGUgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8gMSA6IDA7CisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CiAKIAlzZXF0eXBlID0gc3dhcC0+c2VxdHlwZSAmIChfRFJNX1ZCTEFOS19SRUxBVElWRSB8IF9EUk1fVkJMQU5LX0FCU09MVVRFKTsKIApAQCAtNTIzLDcgKzcyOSwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOwogCi0JY3Vyc2VxID0gYXRvbWljX3JlYWQocGlwZSA/ICZkZXYtPnZibF9yZWNlaXZlZDIgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCS8qCisJICogV2UgdGFrZSB0aGUgcmVmIGhlcmUgYW5kIHB1dCBpdCB3aGVuIHRoZSBzd2FwIGFjdHVhbGx5IGNvbXBsZXRlcworCSAqIGluIHRoZSB0YXNrbGV0LgorCSAqLworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgcGlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljdXJzZXEgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSk7CiAKIAlpZiAoc2VxdHlwZSA9PSBfRFJNX1ZCTEFOS19SRUxBVElWRSkKIAkJc3dhcC0+c2VxdWVuY2UgKz0gY3Vyc2VxOwpAQCAtNTMzLDYgKzc0Niw3IEBACiAJCQlzd2FwLT5zZXF1ZW5jZSA9IGN1cnNlcSArIDE7CiAJCX0gZWxzZSB7CiAJCQlEUk1fREVCVUcoIk1pc3NlZCB0YXJnZXQgc2VxdWVuY2VcbiIpOworCQkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNTQzLDcgKzc1Nyw3IEBACiAJCXZibF9zd2FwID0gbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKIAogCQlpZiAodmJsX3N3YXAtPmRyd19pZCA9PSBzd2FwLT5kcmF3YWJsZSAmJgotCQkgICAgdmJsX3N3YXAtPnBpcGUgPT0gcGlwZSAmJgorCQkgICAgdmJsX3N3YXAtPnBsYW5lID09IHBsYW5lICYmCiAJCSAgICB2Ymxfc3dhcC0+c2VxdWVuY2UgPT0gc3dhcC0+c2VxdWVuY2UpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7CiAJCQlEUk1fREVCVUcoIkFscmVhZHkgc2NoZWR1bGVkXG4iKTsKQEAgLTU1NSw2ICs3NjksNyBAQAogCiAJaWYgKGRldl9wcml2LT5zd2Fwc19wZW5kaW5nID49IDEwMCkgewogCQlEUk1fREVCVUcoIlRvbyBtYW55IHN3YXBzIHF1ZXVlZFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NjIsMTMgKzc3NywxNCBAQAogCiAJaWYgKCF2Ymxfc3dhcCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gcXVldWUgc3dhcFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCURSTV9ERUJVRygiXG4iKTsKIAogCXZibF9zd2FwLT5kcndfaWQgPSBzd2FwLT5kcmF3YWJsZTsKLQl2Ymxfc3dhcC0+cGlwZSA9IHBpcGU7CisJdmJsX3N3YXAtPnBsYW5lID0gcGxhbmU7CiAJdmJsX3N3YXAtPnNlcXVlbmNlID0gc3dhcC0+c2VxdWVuY2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKQEAgLTU4NywzNyArODAzLDYzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0hXU1RBTSwgMHhmZmZlKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfTUFTS19SLCAweDApOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgMHgwKTsKKwlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKKwlJOTE1X1dSSVRFKElNUiwgMHhmZmZmZmZmZik7CisJSTkxNV9XUklURShJRVIsIDB4MCk7CiB9CiAKLXZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldCwgbnVtX3BpcGVzID0gMjsKIAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52Ymxfc3dhcHMuaGVhZCk7CiAJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPSAwOwogCi0JaWYgKCFkZXZfcHJpdi0+dmJsYW5rX3BpcGUpCi0JCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaTkxNV9lbmFibGVfaW50ZXJydXB0KGRldik7CisJLyogU2V0IGluaXRpYWwgdW5tYXNrZWQgSVJRcyB0byBqdXN0IHRoZSBzZWxlY3RlZCB2YmxhbmsgcGlwZXMuICovCisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyA9IH4wOworCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgbnVtX3BpcGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X3ByaXYtPnZibGFua19waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUOworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gfkk5MTVfRElTUExBWV9QSVBFX0JfVkJMQU5LX0lOVEVSUlVQVDsKKworCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KKworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0s7CisKKwlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJSTkxNV9XUklURShJRVIsIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9NQVNLKTsKKwkodm9pZCkgSTkxNV9SRUFEKElFUik7CisKKwlvcHJlZ2lvbl9lbmFibGVfYXNsZShkZXYpOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTE2IHRlbXA7CisJdTMyIHRlbXA7CiAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19IV1NUQU0sIDB4ZmZmZik7Ci0JSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX01BU0tfUiwgMHhmZmZmKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIDB4MCk7CisJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAotCXRlbXAgPSBJOTE1X1JFQUQxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7CisJSTkxNV9XUklURShIV1NUQU0sIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKKwlJOTE1X1dSSVRFKElFUiwgMHgwKTsKKworCXRlbXAgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgdGVtcCk7CisJdGVtcCA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCUk5MTVfV1JJVEUoUElQRUJTVEFULCB0ZW1wKTsKKwl0ZW1wID0gSTkxNV9SRUFEKElJUik7CisJSTkxNV9XUklURShJSVIsIHRlbXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODdhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiA8aG9uZy5saXVAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCA8bWpnQHJlZGhhdC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OLUlORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKyNkZWZpbmUgUENJX0FTTEUgMHhlNAorI2RlZmluZSBQQ0lfTEJQQyAweGY0CisjZGVmaW5lIFBDSV9BU0xTIDB4ZmMKKworI2RlZmluZSBPUFJFR0lPTl9TWiAgICAgICAgICAgICg4KjEwMjQpCisjZGVmaW5lIE9QUkVHSU9OX0hFQURFUl9PRkZTRVQgMAorI2RlZmluZSBPUFJFR0lPTl9BQ1BJX09GRlNFVCAgIDB4MTAwCisjZGVmaW5lIE9QUkVHSU9OX1NXU0NJX09GRlNFVCAgMHgyMDAKKyNkZWZpbmUgT1BSRUdJT05fQVNMRV9PRkZTRVQgICAweDMwMAorI2RlZmluZSBPUFJFR0lPTl9WQlRfT0ZGU0VUICAgIDB4MTAwMAorCisjZGVmaW5lIE9QUkVHSU9OX1NJR05BVFVSRSAiSW50ZWxHcmFwaGljc01lbSIKKyNkZWZpbmUgTUJPWF9BQ1BJICAgICAgKDE8PDApCisjZGVmaW5lIE1CT1hfU1dTQ0kgICAgICgxPDwxKQorI2RlZmluZSBNQk9YX0FTTEUgICAgICAoMTw8MikKKworc3RydWN0IG9wcmVnaW9uX2hlYWRlciB7CisgICAgICAgdTggc2lnbmF0dXJlWzE2XTsKKyAgICAgICB1MzIgc2l6ZTsKKyAgICAgICB1MzIgb3ByZWdpb25fdmVyOworICAgICAgIHU4IGJpb3NfdmVyWzMyXTsKKyAgICAgICB1OCB2Ymlvc192ZXJbMTZdOworICAgICAgIHU4IGRyaXZlcl92ZXJbMTZdOworICAgICAgIHUzMiBtYm94ZXM7CisgICAgICAgdTggcmVzZXJ2ZWRbMTY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzE6IHB1YmxpYyBBQ1BJIG1ldGhvZHMgKi8KK3N0cnVjdCBvcHJlZ2lvbl9hY3BpIHsKKyAgICAgICB1MzIgZHJkeTsgICAgICAgLyogZHJpdmVyIHJlYWRpbmVzcyAqLworICAgICAgIHUzMiBjc3RzOyAgICAgICAvKiBub3RpZmljYXRpb24gc3RhdHVzICovCisgICAgICAgdTMyIGNldnQ7ICAgICAgIC8qIGN1cnJlbnQgZXZlbnQgKi8KKyAgICAgICB1OCByc3ZkMVsyMF07CisgICAgICAgdTMyIGRpZGxbOF07ICAgIC8qIHN1cHBvcnRlZCBkaXNwbGF5IGRldmljZXMgSUQgbGlzdCAqLworICAgICAgIHUzMiBjcGRsWzhdOyAgICAvKiBjdXJyZW50bHkgcHJlc2VudGVkIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBjYWRsWzhdOyAgICAvKiBjdXJyZW50bHkgYWN0aXZlIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBuYWRsWzhdOyAgICAvKiBuZXh0IGFjdGl2ZSBkZXZpY2VzIGxpc3QgKi8KKyAgICAgICB1MzIgYXNscDsgICAgICAgLyogQVNMIHNsZWVwIHRpbWUtb3V0ICovCisgICAgICAgdTMyIHRpZHg7ICAgICAgIC8qIHRvZ2dsZSB0YWJsZSBpbmRleCAqLworICAgICAgIHUzMiBjaHBkOyAgICAgICAvKiBjdXJyZW50IGhvdHBsdWcgZW5hYmxlIGluZGljYXRvciAqLworICAgICAgIHUzMiBjbGlkOyAgICAgICAvKiBjdXJyZW50IGxpZCBzdGF0ZSovCisgICAgICAgdTMyIGNkY2s7ICAgICAgIC8qIGN1cnJlbnQgZG9ja2luZyBzdGF0ZSAqLworICAgICAgIHUzMiBzeHN3OyAgICAgICAvKiBTeCBzdGF0ZSByZXN1bWUgKi8KKyAgICAgICB1MzIgZXZ0czsgICAgICAgLyogQVNMIHN1cHBvcnRlZCBldmVudHMgKi8KKyAgICAgICB1MzIgY25vdDsgICAgICAgLyogY3VycmVudCBPUyBub3RpZmljYXRpb24gKi8KKyAgICAgICB1MzIgbnJkeTsgICAgICAgLyogZHJpdmVyIHN0YXR1cyAqLworICAgICAgIHU4IHJzdmQyWzYwXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzI6IFNXU0NJICovCitzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgeworICAgICAgIHUzMiBzY2ljOyAgICAgICAvKiBTV1NDSSBjb21tYW5kfHN0YXR1c3xkYXRhICovCisgICAgICAgdTMyIHBhcm07ICAgICAgIC8qIGNvbW1hbmQgcGFyYW1ldGVycyAqLworICAgICAgIHUzMiBkc2xwOyAgICAgICAvKiBkcml2ZXIgc2xlZXAgdGltZS1vdXQgKi8KKyAgICAgICB1OCByc3ZkWzI0NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBPcFJlZ2lvbiBtYWlsYm94ICMzOiBBU0xFICovCitzdHJ1Y3Qgb3ByZWdpb25fYXNsZSB7CisgICAgICAgdTMyIGFyZHk7ICAgICAgIC8qIGRyaXZlciByZWFkaW5lc3MgKi8KKyAgICAgICB1MzIgYXNsYzsgICAgICAgLyogQVNMRSBpbnRlcnJ1cHQgY29tbWFuZCAqLworICAgICAgIHUzMiB0Y2hlOyAgICAgICAvKiB0ZWNobm9sb2d5IGVuYWJsZWQgaW5kaWNhdG9yICovCisgICAgICAgdTMyIGFsc2k7ICAgICAgIC8qIGN1cnJlbnQgQUxTIGlsbHVtaW5hbmNlIHJlYWRpbmcgKi8KKyAgICAgICB1MzIgYmNscDsgICAgICAgLyogYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisgICAgICAgdTMyIHBmaXQ7ICAgICAgIC8qIHBhbmVsIGZpdHRpbmcgc3RhdGUgKi8KKyAgICAgICB1MzIgY2JsdjsgICAgICAgLyogY3VycmVudCBicmlnaHRuZXNzIGxldmVsICovCisgICAgICAgdTE2IGJjbG1bMjBdOyAgIC8qIGJhY2tsaWdodCBsZXZlbCBkdXR5IGN5Y2xlIG1hcHBpbmcgdGFibGUgKi8KKyAgICAgICB1MzIgY3BmbTsgICAgICAgLyogY3VycmVudCBwYW5lbCBmaXR0aW5nIG1vZGUgKi8KKyAgICAgICB1MzIgZXBmbTsgICAgICAgLyogZW5hYmxlZCBwYW5lbCBmaXR0aW5nIG1vZGVzICovCisgICAgICAgdTggcGx1dFs3NF07ICAgIC8qIHBhbmVsIExVVCBhbmQgaWRlbnRpZmllciAqLworICAgICAgIHUzMiBwZm1iOyAgICAgICAvKiBQV00gZnJlcSBhbmQgbWluIGJyaWdodG5lc3MgKi8KKyAgICAgICB1OCByc3ZkWzEwMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBBU0xFIGlycSByZXF1ZXN0IGJpdHMgKi8KKyNkZWZpbmUgQVNMRV9TRVRfQUxTX0lMTFVNICAgICAoMSA8PCAwKQorI2RlZmluZSBBU0xFX1NFVF9CQUNLTElHSFQgICAgICgxIDw8IDEpCisjZGVmaW5lIEFTTEVfU0VUX1BGSVQgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQVNMRV9TRVRfUFdNX0ZSRVEgICAgICAoMSA8PCAzKQorI2RlZmluZSBBU0xFX1JFUV9NU0sgICAgICAgICAgIDB4ZgorCisvKiByZXNwb25zZSBiaXRzIG9mIEFTTEUgaXJxIHJlcXVlc3QgKi8KKyNkZWZpbmUgQVNMRV9BTFNfSUxMVU1fRkFJTCAgICAoMjw8MTApCisjZGVmaW5lIEFTTEVfQkFDS0xJR0hUX0ZBSUwgICAgKDI8PDEyKQorI2RlZmluZSBBU0xFX1BGSVRfRkFJTCAgICAgICAgICgyPDwxNCkKKyNkZWZpbmUgQVNMRV9QV01fRlJFUV9GQUlMICAgICAoMjw8MTYpCisKKy8qIEFTTEUgYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisjZGVmaW5lIEFTTEVfQkNMUF9WQUxJRCAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfQkNMUF9NU0sgICAgICAgICAgKH4oMTw8MzEpKQorCisvKiBBU0xFIHBhbmVsIGZpdHRpbmcgcmVxdWVzdCAqLworI2RlZmluZSBBU0xFX1BGSVRfVkFMSUQgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfUEZJVF9DRU5URVIgKDE8PDApCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX1RFWFQgKDE8PDEpCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX0dGWCAoMTw8MikKKworLyogUFdNIGZyZXF1ZW5jeSBhbmQgbWluaW11bSBicmlnaHRuZXNzICovCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX01BU0sgKDB4ZmYpCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX1ZBTElEICgxPDw4KQorI2RlZmluZSBBU0xFX1BGTUJfUFdNX01BU0sgKDB4N2ZmZmZlMDApCisjZGVmaW5lIEFTTEVfUEZNQl9QV01fVkFMSUQgKDE8PDMxKQorCisjZGVmaW5lIEFTTEVfQ0JMVl9WQUxJRCAgICAgICAgICgxPDwzMSkKKworc3RhdGljIHUzMiBhc2xlX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGJjbHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBibGNfcHdtX2N0bCwgYmxjX3B3bV9jdGwyOworCisJaWYgKCEoYmNscCAmIEFTTEVfQkNMUF9WQUxJRCkpCisJCXJldHVybiBBU0xFX0JBQ0tMSUdIVF9GQUlMOworCisJYmNscCAmPSBBU0xFX0JDTFBfTVNLOworCWlmIChiY2xwIDwgMCB8fCBiY2xwID4gMjU1KQorCQlyZXR1cm4gQVNMRV9CQUNLTElHSFRfRkFJTDsKKworCWJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlibGNfcHdtX2N0bCAmPSB+QkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSzsKKwlibGNfcHdtX2N0bDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKworCWlmIChibGNfcHdtX2N0bDIgJiBCTE1fQ09NQklOQVRJT05fTU9ERSkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBDSV9MQlBDLCBiY2xwKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGJsY19wd21fY3RsIHwgKChiY2xwICogMHgxMDEpLTEpKTsKKworCWFzbGUtPmNibHYgPSAoYmNscCoweDY0KS8weGZmIHwgQVNMRV9DQkxWX1ZBTElEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfYWxzX2lsbHVtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBhbHNpKQoreworCS8qIGFsc2kgaXMgdGhlIGN1cnJlbnQgQUxTIHJlYWRpbmcgaW4gbHV4LiAwIGluZGljYXRlcyBiZWxvdyBzZW5zb3IKKwkgICByYW5nZSwgMHhmZmZmIGluZGljYXRlcyBhYm92ZSBzZW5zb3IgcmFuZ2UuIDEtMHhmZmZlIGFyZSB2YWxpZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGFzbGVfc2V0X3B3bV9mcmVxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwZm1iKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKHBmbWIgJiBBU0xFX1BGTUJfUFdNX1ZBTElEKSB7CisJCXUzMiBibGNfcHdtX2N0bCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCXUzMiBwd20gPSBwZm1iICYgQVNMRV9QRk1CX1BXTV9NQVNLOworCQlibGNfcHdtX2N0bCAmPSBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCQlwd20gPSBwd20gPj4gOTsKKwkJLyogRklYTUUgLSB3aGF0IGRvIHdlIGRvIHdpdGggdGhlIFBXTT8gKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfcGZpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcGZpdCkKK3sKKwkvKiBQYW5lbCBmaXR0aW5nIGlzIGN1cnJlbnRseSBjb250cm9sbGVkIGJ5IHRoZSBYIGNvZGUsIHNvIHRoaXMgaXMgYQorCSAgIG5vb3AgdW50aWwgbW9kZXNldHRpbmcgc3VwcG9ydCB3b3JrcyBmdWxseSAqLworCWlmICghKHBmaXQgJiBBU0xFX1BGSVRfVkFMSUQpKQorCQlyZXR1cm4gQVNMRV9QRklUX0ZBSUw7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBhc2xlX3N0YXQgPSAwOworCXUzMiBhc2xlX3JlcTsKKworCWlmICghYXNsZSkKKwkJcmV0dXJuOworCisJYXNsZV9yZXEgPSBhc2xlLT5hc2xjICYgQVNMRV9SRVFfTVNLOworCisJaWYgKCFhc2xlX3JlcSkgeworCQlEUk1fREVCVUcoIm5vbiBhc2xlIHNldCByZXF1ZXN0Pz9cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFzbGVfcmVxICYgQVNMRV9TRVRfQUxTX0lMTFVNKQorCQlhc2xlX3N0YXQgfD0gYXNsZV9zZXRfYWxzX2lsbHVtKGRldiwgYXNsZS0+YWxzaSk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9CQUNLTElHSFQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9iYWNrbGlnaHQoZGV2LCBhc2xlLT5iY2xwKTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX1BGSVQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9wZml0KGRldiwgYXNsZS0+cGZpdCk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9QV01fRlJFUSkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X3B3bV9mcmVxKGRldiwgYXNsZS0+cGZtYik7CisKKwlhc2xlLT5hc2xjID0gYXNsZV9zdGF0OworfQorCisjZGVmaW5lIEFTTEVfQUxTX0VOICAgICgxPDwwKQorI2RlZmluZSBBU0xFX0JMQ19FTiAgICAoMTw8MSkKKyNkZWZpbmUgQVNMRV9QRklUX0VOICAgKDE8PDIpCisjZGVmaW5lIEFTTEVfUEZNQl9FTiAgICgxPDwzKQorCit2b2lkIG9wcmVnaW9uX2VuYWJsZV9hc2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCisJaWYgKGFzbGUpIHsKKwkJdTMyIHBpcGViX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJCWlmIChJU19NT0JJTEUoZGV2KSkgeworCQkJLyogTWFueSBkZXZpY2VzIHRyaWdnZXIgZXZlbnRzIHdpdGggYSB3cml0ZSB0byB0aGUKKwkJCSAgIGxlZ2FjeSBiYWNrbGlnaHQgY29udHJvbGxlciwgc28gd2UgbmVlZCB0byBlbnN1cmUKKwkJCSAgIHRoYXQgaXQncyBhYmxlIHRvIGdlbmVyYXRlIGludGVycnVwdHMgKi8KKwkJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyB8PQorCQkJCSAgIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOworCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0FTTEVfSU5URVJSVVBUIHwKKwkJCQkJSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQl9IGVsc2UKKwkJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9BU0xFX0lOVEVSUlVQVCk7CisKKwkJYXNsZS0+dGNoZSA9IEFTTEVfQUxTX0VOIHwgQVNMRV9CTENfRU4gfCBBU0xFX1BGSVRfRU4gfAorCQkJQVNMRV9QRk1CX0VOOworCQlhc2xlLT5hcmR5ID0gMTsKKwl9Cit9CisKKyNkZWZpbmUgQUNQSV9FVl9ESVNQTEFZX1NXSVRDSCAoMTw8MCkKKyNkZWZpbmUgQUNQSV9FVl9MSUQgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9FVl9ET0NLICAgICAgICAgICAoMTw8MikKKworc3RhdGljIHN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqc3lzdGVtX29wcmVnaW9uOworCitpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgb25seSB2aWRlbyBldmVudHMgcmVsZXZhbnQgdG8gb3ByZWdpb24gYXJlIDB4ODAuIFRoZXNlIGluZGljYXRlCisJICAgZWl0aGVyIGEgZG9ja2luZyBldmVudCwgbGlkIHN3aXRjaCBvciBkaXNwbGF5IHN3aXRjaCByZXF1ZXN0LiBJbgorCSAgIExpbnV4LCB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgZG9jaywgYnV0dG9uIGFuZCB2aWRlbyBkcml2ZXJzLgorCSAgIFdlIG1pZ2h0IHdhbnQgdG8gZml4IHRoZSB2aWRlbyBkcml2ZXIgdG8gYmUgb3ByZWdpb24tYXdhcmUgaW4KKwkgICBmdXR1cmUsIGJ1dCByaWdodCBub3cgd2UganVzdCBpbmRpY2F0ZSB0byB0aGUgZmlybXdhcmUgdGhhdCB0aGUKKwkgICByZXF1ZXN0IGhhcyBiZWVuIGhhbmRsZWQgKi8KKworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCisJaWYgKCFzeXN0ZW1fb3ByZWdpb24pCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWFjcGkgPSBzeXN0ZW1fb3ByZWdpb24tPmFjcGk7CisJYWNwaS0+Y3N0cyA9IDA7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGludGVsX29wcmVnaW9uX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQsCit9OworCitpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisJdm9pZCAqYmFzZTsKKwl1MzIgYXNscywgbWJveGVzOworCWludCBlcnIgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX0FTTFMsICZhc2xzKTsKKwlEUk1fREVCVUcoImdyYXBoaWMgb3ByZWdpb24gcGh5c2ljYWwgYWRkcjogMHgleFxuIiwgYXNscyk7CisJaWYgKGFzbHMgPT0gMCkgeworCQlEUk1fREVCVUcoIkFDUEkgT3BSZWdpb24gbm90IHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWJhc2UgPSBpb3JlbWFwKGFzbHMsIE9QUkVHSU9OX1NaKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJb3ByZWdpb24tPmhlYWRlciA9IGJhc2U7CisJaWYgKG1lbWNtcChvcHJlZ2lvbi0+aGVhZGVyLT5zaWduYXR1cmUsIE9QUkVHSU9OX1NJR05BVFVSRSwgMTYpKSB7CisJCURSTV9ERUJVRygib3ByZWdpb24gc2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCW1ib3hlcyA9IG9wcmVnaW9uLT5oZWFkZXItPm1ib3hlczsKKwlpZiAobWJveGVzICYgTUJPWF9BQ1BJKSB7CisJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBzdXBwb3J0ZWRcbiIpOworCQlvcHJlZ2lvbi0+YWNwaSA9IGJhc2UgKyBPUFJFR0lPTl9BQ1BJX09GRlNFVDsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIlB1YmxpYyBBQ1BJIG1ldGhvZHMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBlcnJfb3V0OworCX0KKwlvcHJlZ2lvbi0+ZW5hYmxlZCA9IDE7CisKKwlpZiAobWJveGVzICYgTUJPWF9TV1NDSSkgeworCQlEUk1fREVCVUcoIlNXU0NJIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5zd3NjaSA9IGJhc2UgKyBPUFJFR0lPTl9TV1NDSV9PRkZTRVQ7CisJfQorCWlmIChtYm94ZXMgJiBNQk9YX0FTTEUpIHsKKwkJRFJNX0RFQlVHKCJBU0xFIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5hc2xlID0gYmFzZSArIE9QUkVHSU9OX0FTTEVfT0ZGU0VUOworCX0KKworCS8qIE5vdGlmeSBCSU9TIHdlIGFyZSByZWFkeSB0byBoYW5kbGUgQUNQSSB2aWRlbyBleHQgbm90aWZzLgorCSAqIFJpZ2h0IG5vdywgYWxsIHRoZSBldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIEFDUEkgdmlkZW8gbW9kdWxlLgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGVtLiAqLworCW9wcmVnaW9uLT5hY3BpLT5jc3RzID0gMDsKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDE7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBvcHJlZ2lvbjsKKwlyZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRlbF9vcHJlZ2lvbl9ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlpb3VubWFwKG9wcmVnaW9uLT5oZWFkZXIpOworCW9wcmVnaW9uLT5oZWFkZXIgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgaW50ZWxfb3ByZWdpb25fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisKKwlpZiAoIW9wcmVnaW9uLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDA7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBOVUxMOworCXVucmVnaXN0ZXJfYWNwaV9ub3RpZmllcigmaW50ZWxfb3ByZWdpb25fbm90aWZpZXIpOworCisJLyoganVzdCBjbGVhciBhbGwgb3ByZWdpb24gbWVtb3J5IHBvaW50ZXJzIG5vdyAqLworCWlvdW5tYXAob3ByZWdpb24tPmhlYWRlcik7CisJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7CisJb3ByZWdpb24tPmFjcGkgPSBOVUxMOworCW9wcmVnaW9uLT5zd3NjaSA9IE5VTEw7CisJb3ByZWdpb24tPmFzbGUgPSBOVUxMOworCisJb3ByZWdpb24tPmVuYWJsZWQgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyZDlmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTAsMCArMSwxNDE3IEBACisvKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0k5MTVfUkVHX0hfCisjZGVmaW5lIF9JOTE1X1JFR19IXworCisvKgorICogVGhlIEJyaWRnZSBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIGhhcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGZiIGFwZXJ0dXJlIHNpemUgYW5kIHRoZSBhbW91bnQgb2YgcHJlLXJlc2VydmVkIG1lbW9yeS4KKyAqLworI2RlZmluZSBJTlRFTF9HTUNIX0NUUkwJCTB4NTIKKyNkZWZpbmUgSU5URUxfR01DSF9FTkFCTEVECTB4NAorI2RlZmluZSBJTlRFTF9HTUNIX01FTV9NQVNLCTB4MQorI2RlZmluZSBJTlRFTF9HTUNIX01FTV82NE0JMHgxCisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzEyOE0JMAorCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19ESVNBQkxFRAkoMHgwIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU0JKDB4MSA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNCSgweDIgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TQkoMHgzIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNCSgweDQgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8zMk0JKDB4NSA8PCA0KQorCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzQ4TQkoMHg2IDw8IDQpCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TQkoMHg3IDw8IDQpCisKKy8qIFBDSSBjb25maWcgc3BhY2UgKi8KKworI2RlZmluZSBIUExMQ0MJMHhjMCAvKiA4NTUgb25seSAqLworI2RlZmluZSAgIEdDX0NMT0NLX0NPTlRST0xfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xMzNfMjAwCQkoMCA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8yMDAJCSgxIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzEzMwkJKDIgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xNjZfMjUwCQkoMyA8PCAwKQorI2RlZmluZSBHQ0ZHQwkweGYwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIEdDX0xPV19GUkVRVUVOQ1lfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkoNCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgTEJCCTB4ZjQKKworLyogVkdBIHN0dWZmICovCisKKyNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCisjZGVmaW5lIFZHQV9TVDAxX0NHQSAweDNkYQorCisjZGVmaW5lIFZHQV9NU1JfV1JJVEUgMHgzYzIKKyNkZWZpbmUgVkdBX01TUl9SRUFEIDB4M2NjCisjZGVmaW5lICAgVkdBX01TUl9NRU1fRU4gKDE8PDEpCisjZGVmaW5lICAgVkdBX01TUl9DR0FfTU9ERSAoMTw8MCkKKworI2RlZmluZSBWR0FfU1JfSU5ERVggMHgzYzQKKyNkZWZpbmUgVkdBX1NSX0RBVEEgMHgzYzUKKworI2RlZmluZSBWR0FfQVJfSU5ERVggMHgzYzAKKyNkZWZpbmUgICBWR0FfQVJfVklEX0VOICgxPDw1KQorI2RlZmluZSBWR0FfQVJfREFUQV9XUklURSAweDNjMAorI2RlZmluZSBWR0FfQVJfREFUQV9SRUFEIDB4M2MxCisKKyNkZWZpbmUgVkdBX0dSX0lOREVYIDB4M2NlCisjZGVmaW5lIFZHQV9HUl9EQVRBIDB4M2NmCisvKiBHUjA1ICovCisjZGVmaW5lICAgVkdBX0dSX01FTV9SRUFEX01PREVfU0hJRlQgMworI2RlZmluZSAgICAgVkdBX0dSX01FTV9SRUFEX01PREVfUExBTkUgMQorLyogR1IwNiAqLworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9NQVNLIDB4YworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9TSElGVCAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9BRkZGRiAwCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9CRkZGRiAxCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CN0ZGRiAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CRkZGRiAzCisKKyNkZWZpbmUgVkdBX0RBQ01BU0sgMHgzYzYKKyNkZWZpbmUgVkdBX0RBQ1JYIDB4M2M3CisjZGVmaW5lIFZHQV9EQUNXWCAweDNjOAorI2RlZmluZSBWR0FfREFDREFUQSAweDNjOQorCisjZGVmaW5lIFZHQV9DUl9JTkRFWF9NREEgMHgzYjQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfTURBIDB4M2I1CisjZGVmaW5lIFZHQV9DUl9JTkRFWF9DR0EgMHgzZDQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfQ0dBIDB4M2Q1CisKKy8qCisgKiBNZW1vcnkgaW50ZXJmYWNlIGluc3RydWN0aW9ucyB1c2VkIGJ5IHRoZSBrZXJuZWwKKyAqLworI2RlZmluZSBNSV9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKChvcGNvZGUpIDw8IDIzKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUlfTk9PUAkJCU1JX0lOU1RSKDAsIDApCisjZGVmaW5lIE1JX1VTRVJfSU5URVJSVVBUCU1JX0lOU1RSKDB4MDIsIDApCisjZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgIE1JX0lOU1RSKDB4MDMsIDApCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQl9GTElQICAgICAgKDE8PDYpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCisjZGVmaW5lIE1JX0ZMVVNICQlNSV9JTlNUUigweDA0LCAwKQorI2RlZmluZSAgIE1JX1JFQURfRkxVU0gJCSgxIDw8IDApCisjZGVmaW5lICAgTUlfRVhFX0ZMVVNICQkoMSA8PCAxKQorI2RlZmluZSAgIE1JX05PX1dSSVRFX0ZMVVNICSgxIDw8IDIpCisjZGVmaW5lICAgTUlfU0NFTkVfQ09VTlQJKDEgPDwgMykgLyoganVzdCBpbmNyZW1lbnQgc2NlbmUgY291bnQgKi8KKyNkZWZpbmUgICBNSV9FTkRfU0NFTkUJCSgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLworI2RlZmluZSBNSV9CQVRDSF9CVUZGRVJfRU5ECU1JX0lOU1RSKDB4MGEsIDApCisjZGVmaW5lIE1JX1JFUE9SVF9IRUFECQlNSV9JTlNUUigweDA3LCAwKQorI2RlZmluZSBNSV9MT0FEX1NDQU5fTElORVNfSU5DTCBNSV9JTlNUUigweDEyLCAwKQorI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTU0JTUlfSU5TVFIoMHgyMCwgMSkKKyNkZWZpbmUgICBNSV9NRU1fVklSVFVBTAkoMSA8PCAyMikgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lOREVYCU1JX0lOU1RSKDB4MjEsIDEpCisjZGVmaW5lICAgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQgMgorI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTQlNSV9JTlNUUigweDIyLCAxKQorI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCU1JX0lOU1RSKDB4MzAsIDEpCisjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKKyNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgKDE8PDgpCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVAlNSV9JTlNUUigweDMxLCAwKQorCisvKgorICogM0QgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAorICovCisjZGVmaW5lIEdGWF9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKDB4MyA8PCAyOSkgfCAoKG9wY29kZSkgPDwgMjQpIHwgKGZsYWdzKSkKKworI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUiAgICAgICAgICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQorI2RlZmluZSAgIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCisjZGVmaW5lICAgU0NfRU5BQkxFX01BU0sgICAgICAgICAgKDB4MTw8MCkKKyNkZWZpbmUgICBTQ19FTkFCTEUgICAgICAgICAgICAgICAoMHgxPDwwKQorI2RlZmluZSBHRlhfT1BfTE9BRF9JTkRJUkVDVCAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg3PDwxNikpCisjZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCisjZGVmaW5lICAgU0NJX1lNSU5fTUFTSyAgICAgICgweGZmZmY8PDE2KQorI2RlZmluZSAgIFNDSV9YTUlOX01BU0sgICAgICAoMHhmZmZmPDwwKQorI2RlZmluZSAgIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKKyNkZWZpbmUgICBTQ0lfWE1BWF9NQVNLICAgICAgKDB4ZmZmZjw8MCkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKKyNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCisjZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9JTkZPCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4OGU8PDE2KXwxKQorI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCisjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgICgoMHg3OTAwPDwxNil8MHgyKQorI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQorI2RlZmluZSBYWV9NT05PX1NSQ19DT1BZX0lNTV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIyKXw1KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKKyNkZWZpbmUgICBCTFRfREVQVEhfOAkJCSgwPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMTZfNTY1CQkoMTw8MjQpCisjZGVmaW5lICAgQkxUX0RFUFRIXzE2XzE1NTUJCSgyPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMzIJCQkoMzw8MjQpCisjZGVmaW5lICAgQkxUX1JPUF9HWENPUFkJCSgweGNjPDwxNikKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVECSgxPDwxMSkgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCisjZGVmaW5lICAgQVNZTkNfRkxJUCAgICAgICAgICAgICAgICAoMTw8MjIpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9BICAgICAgICAgICAoMDw8MjApCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCisKKy8qCisgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncworICovCisKKyNkZWZpbmUgUFJCMF9UQUlMCTB4MDIwMzAKKyNkZWZpbmUgUFJCMF9IRUFECTB4MDIwMzQKKyNkZWZpbmUgUFJCMF9TVEFSVAkweDAyMDM4CisjZGVmaW5lIFBSQjBfQ1RMCTB4MDIwM2MKKyNkZWZpbmUgICBUQUlMX0FERFIJCTB4MDAxRkZGRjgKKyNkZWZpbmUgICBIRUFEX1dSQVBfQ09VTlQJMHhGRkUwMDAwMAorI2RlZmluZSAgIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKKyNkZWZpbmUgICBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgICBSSU5HX05SX1BBR0VTCQkweDAwMUZGMDAwCisjZGVmaW5lICAgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lICAgUklOR19SRVBPUlRfNjRLCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgICBSSU5HX05PX1JFUE9SVAkweDAwMDAwMDAwCisjZGVmaW5lICAgUklOR19WQUxJRF9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBSSU5HX1ZBTElECQkweDAwMDAwMDAxCisjZGVmaW5lICAgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisjZGVmaW5lIFBSQjFfVEFJTAkweDAyMDQwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0hFQUQJMHgwMjA0NCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgUFJCMV9TVEFSVAkweDAyMDQ4IC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0NUTAkweDAyMDRjIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBBQ1RIRF9JOTY1CTB4MDIwNzQKKyNkZWZpbmUgSFdTX1BHQQkJMHgwMjA4MAorI2RlZmluZSBIV1NfQUREUkVTU19NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgSFdTX1NUQVJUX0FERFJFU1NfU0hJRlQJNAorI2RlZmluZSBJUEVJUgkJMHgwMjA4OAorI2RlZmluZSBOT1BJRAkJMHgwMjA5NAorI2RlZmluZSBIV1NUQU0JCTB4MDIwOTgKKyNkZWZpbmUgU0NQRDAJCTB4MDIwOWMgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIElFUgkJMHgwMjBhMAorI2RlZmluZSBJSVIJCTB4MDIwYTQKKyNkZWZpbmUgSU1SCQkweDAyMGE4CisjZGVmaW5lIElTUgkJMHgwMjBhYworI2RlZmluZSAgIEk5MTVfUElQRV9DT05UUk9MX05PVElGWV9JTlRFUlJVUFQJCSgxPDwxOCkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQJCQkoMTw8MTcpCisjZGVmaW5lICAgSTkxNV9SRU5ERVJfQ09NTUFORF9QQVJTRVJfRVJST1JfSU5URVJSVVBUCSgxPDwxNSkKKyNkZWZpbmUgICBJOTE1X0dNQ0hfVEhFUk1BTF9TRU5TT1JfRVZFTlRfSU5URVJSVVBUCSgxPDwxNCkKKyNkZWZpbmUgICBJOTE1X0hXQl9PT01fSU5URVJSVVBUCQkJKDE8PDEzKQorI2RlZmluZSAgIEk5MTVfU1lOQ19TVEFUVVNfSU5URVJSVVBUCQkJKDE8PDEyKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9BX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDExKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9CX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDEwKQorI2RlZmluZSAgIEk5MTVfT1ZFUkxBWV9QTEFORV9GTElQX1BFTkRJTkdfSU5URVJSVVBUCSgxPDw5KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9DX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDgpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUCQkoMTw8NykKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDYpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQl9WQkxBTktfSU5URVJSVVBUCQkoMTw8NSkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDQpCisjZGVmaW5lICAgSTkxNV9ERUJVR19JTlRFUlJVUFQJCQkJKDE8PDIpCisjZGVmaW5lICAgSTkxNV9VU0VSX0lOVEVSUlVQVAkJCQkoMTw8MSkKKyNkZWZpbmUgICBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDwwKQorI2RlZmluZSBFSVIJCTB4MDIwYjAKKyNkZWZpbmUgRU1SCQkweDAyMGI0CisjZGVmaW5lIEVTUgkJMHgwMjBiOAorI2RlZmluZSBJTlNUUE0JICAgICAgICAweDAyMGMwCisjZGVmaW5lIEFDVEhECSAgICAgICAgMHgwMjBjOAorI2RlZmluZSBGV19CTEMJCTB4MDIwZDgKKyNkZWZpbmUgRldfQkxDX1NFTEYJMHgwMjBlMCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgTUlfQVJCX1NUQVRFCTB4MDIwZTQgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIENBQ0hFX01PREVfMAkweDAyMTIwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIENNMF9NQVNLX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lICAgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCisjZGVmaW5lICAgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCisjZGVmaW5lICAgQ00wX0RFUFRIX0VWSUNUX0RJU0FCTEUgKDE8PDQpCisjZGVmaW5lICAgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCisjZGVmaW5lICAgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCisjZGVmaW5lICAgQ00wX1JDX09QX0ZMVVNIX0RJU0FCTEUgKDE8PDApCisjZGVmaW5lIEdGWF9GTFNIX0NOVEwJMHgwMjE3MCAvKiA5MTUrIG9ubHkgKi8KKworLyoKKyAqIEZyYW1lYnVmZmVyIGNvbXByZXNzaW9uICg5MTUrIG9ubHkpCisgKi8KKworI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCisjZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLworI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAorI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKKyNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKKyNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCisjZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCisjZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKKyNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAorI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCisjZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQorI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKKyNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKKyNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgorCisjZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKKworLyoKKyAqIEdQSU8gcmVncworICovCisjZGVmaW5lIEdQSU9BCQkJMHg1MDEwCisjZGVmaW5lIEdQSU9CCQkJMHg1MDE0CisjZGVmaW5lIEdQSU9DCQkJMHg1MDE4CisjZGVmaW5lIEdQSU9ECQkJMHg1MDFjCisjZGVmaW5lIEdQSU9FCQkJMHg1MDIwCisjZGVmaW5lIEdQSU9GCQkJMHg1MDI0CisjZGVmaW5lIEdQSU9HCQkJMHg1MDI4CisjZGVmaW5lIEdQSU9ICQkJMHg1MDJjCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9NQVNLCQkoMSA8PCAwKQorIyBkZWZpbmUgR1BJT19DTE9DS19ESVJfSU4JCSgwIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9PVVQJCSgxIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9NQVNLCQkoMSA8PCAyKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfT1VUCQkoMSA8PCAzKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfSU4JCSgxIDw8IDQpCisjIGRlZmluZSBHUElPX0NMT0NLX1BVTExVUF9ESVNBQkxFCSgxIDw8IDUpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX01BU0sJCSgxIDw8IDgpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX0lOCQkoMCA8PCA5KQorIyBkZWZpbmUgR1BJT19EQVRBX0RJUl9PVVQJCSgxIDw8IDkpCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX01BU0sJCSgxIDw8IDEwKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9PVVQJCSgxIDw8IDExKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9JTgkJKDEgPDwgMTIpCisjIGRlZmluZSBHUElPX0RBVEFfUFVMTFVQX0RJU0FCTEUJKDEgPDwgMTMpCisKKy8qCisgKiBDbG9jayBjb250cm9sICYgcG93ZXIgbWFuYWdlbWVudAorICovCisKKyNkZWZpbmUgVkdBMAkweDYwMDAKKyNkZWZpbmUgVkdBMQkweDYwMDQKKyNkZWZpbmUgVkdBX1BECTB4NjAxMAorI2RlZmluZSAgIFZHQTBfUERfUDJfRElWXzQJKDEgPDwgNykKKyNkZWZpbmUgICBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCisjZGVmaW5lICAgVkdBMF9QRF9QMV9TSElGVAkwCisjZGVmaW5lICAgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCisjZGVmaW5lICAgVkdBMV9QRF9QMl9ESVZfNAkoMSA8PCAxNSkKKyNkZWZpbmUgICBWR0ExX1BEX1AxX0RJVl8yCSgxIDw8IDEzKQorI2RlZmluZSAgIFZHQTFfUERfUDFfU0hJRlQJOAorI2RlZmluZSAgIFZHQTFfUERfUDFfTUFTSwkoMHgxZiA8PCA4KQorI2RlZmluZSBEUExMX0EJMHgwNjAxNAorI2RlZmluZSBEUExMX0IJMHgwNjAxOAorI2RlZmluZSAgIERQTExfVkNPX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgRFBMTF9EVk9fSElHSF9TUEVFRAkJKDEgPDwgMzApCisjZGVmaW5lICAgRFBMTF9TWU5DTE9DS19FTkFCTEUJCSgxIDw8IDI5KQorI2RlZmluZSAgIERQTExfVkdBX01PREVfRElTCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEUExMQl9NT0RFX0RBQ19TRVJJQUwJCSgxIDw8IDI2KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTU9ERV9MVkRTCQkoMiA8PCAyNikgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExfTU9ERV9NQVNLCQkoMyA8PCAyNikKKyNkZWZpbmUgICBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwICgwIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81ICgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQJKDAgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83CSgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9QMl9DTE9DS19ESVZfTUFTSwkweDAzMDAwMDAwIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJMHgwMGZmMDAwMCAvKiBpOTE1ICovCisKKyNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQorI2RlZmluZSBJOTE1X0dNQlVTX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDI3KQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI1KQorI2RlZmluZSBJOTE1X0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKKyNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDIzKQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKKyNkZWZpbmUgSTkxNV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjEpCisjZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KQkvKiA5NjUgb3IgbGF0ZXIgKi8KKyNkZWZpbmUgSTkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEzKQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEyKQorI2RlZmluZSBJOTE1X0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCisjZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lIEk5MTVfRFBTVF9FVkVOVF9TVEFUVVMJCQkoMVVMPDw3KQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw1KQorI2RlZmluZSBJOTE1X0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpCS8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxKQorI2RlZmluZSBJOTE1X09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisKKyNkZWZpbmUgU1JYX0lOREVYCQkweDNjNAorI2RlZmluZSBTUlhfREFUQQkJMHgzYzUKKyNkZWZpbmUgU1IwMQkJCTEKKyNkZWZpbmUgU1IwMV9TQ1JFRU5fT0ZGCQkoMTw8NSkKKworI2RlZmluZSBQUENSCQkJMHg2MTIwNAorI2RlZmluZSBQUENSX09OCQkJKDE8PDApCisKKyNkZWZpbmUgRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgRFZPQl9PTgkJCSgxPDwzMSkKKyNkZWZpbmUgRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgRFZPQ19PTgkJCSgxPDwzMSkKKyNkZWZpbmUgTFZEUwkJCTB4NjExODAKKyNkZWZpbmUgTFZEU19PTgkJCSgxPDwzMSkKKworI2RlZmluZSBBRFBBCQkJMHg2MTEwMAorI2RlZmluZSBBRFBBX0RQTVNfTUFTSwkJKH4oMzw8MTApKQorI2RlZmluZSBBRFBBX0RQTVNfT04JCSgwPDwxMCkKKyNkZWZpbmUgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSBBRFBBX0RQTVNfU1RBTkRCWQkoMjw8MTApCisjZGVmaW5lIEFEUEFfRFBNU19PRkYJCSgzPDwxMCkKKworI2RlZmluZSBSSU5HX1RBSUwJCTB4MDAKKyNkZWZpbmUgVEFJTF9BRERSCQkweDAwMUZGRkY4CisjZGVmaW5lIFJJTkdfSEVBRAkJMHgwNAorI2RlZmluZSBIRUFEX1dSQVBfQ09VTlQJCTB4RkZFMDAwMDAKKyNkZWZpbmUgSEVBRF9XUkFQX09ORQkJMHgwMDIwMDAwMAorI2RlZmluZSBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgUklOR19TVEFSVAkJMHgwOAorI2RlZmluZSBTVEFSVF9BRERSCQkweEZGRkZGMDAwCisjZGVmaW5lIFJJTkdfTEVOCQkweDBDCisjZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKKyNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgorI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisKKy8qIFNjcmF0Y2ggcGFkIGRlYnVnIDAgcmVnOgorICovCisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzAJMHgwMDFmMDAwMAorLyoKKyAqIFRoZSBpODMwIGdlbmVyYXRpb24sIGluIExWRFMgbW9kZSwgZGVmaW5lcyBQMSBhcyB0aGUgYml0IG51bWJlciBzZXQgd2l0aGluCisgKiB0aGlzIGZpZWxkIChvbmx5IG9uZSBiaXQgbWF5IGJlIHNldCkuCisgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCTE2CisvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KKyNkZWZpbmUgICBQTExfUDJfRElWSURFX0JZXzQJCSgxIDw8IDIzKQorI2RlZmluZSAgIFBMTF9QMV9ESVZJREVfQllfVFdPCQkoMSA8PCAyMSkgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJKDAgPDwgMTMpCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9UVkNMS0lOQQkoMSA8PCAxMykgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCSgyIDw8IDEzKSAvKiBTRFZPIFRWQ0xLSU4gKi8KKyNkZWZpbmUgICBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOICgzIDw8IDEzKQorI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfTUFTSwkJKDMgPDwgMTMpCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQJCTkKKy8qCisgKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBzZWxlY3Rpb24uCisgKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZvciB0aGUgUENJZQorICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEzOyAxMCBvciBtb3JlCisgKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgorICovCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfTUFTSwkJKDB4ZiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCkKKyNkZWZpbmUgICBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCisvKgorICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCisgKi8KKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVMJCTQKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfVkdBCQkwCisjZGVmaW5lIERQTExfQV9NRCAweDA2MDFjIC8qIDk2NSsgb25seSAqLworLyoKKyAqIFVESSBwaXhlbCBkaXZpZGVyLCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4KKyAqCisgKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwgZm9yIFNEVk8uCisgKi8KKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX01BU0sJCTB4M2YwMDAwMDAKKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAorLyogVURJIHBpeGVsIGRpdmlkZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9ESVZJREVSX01BU0suICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIERQTExfTURfVkdBX1VESV9ESVZJREVSX1NISUZUCQkxNgorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCisgKgorICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cworICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQorICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKKyAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKKyAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCisgKgorICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKKyAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCisgKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKKyAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgorICoKKyAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAorICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KKyAqLworI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwkJMHgwMDAwM2YwMAorI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQJCTgKKy8qCisgKiBTRFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLLgorICogVGhpcyBiZXN0IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAoMykgb3IgdGhlIENSVCB3b24ndCB3b3JrLiBObywKKyAqIEkgZG9uJ3QgZW50aXJlbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcy4uLgorICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfU0hJRlQJMAorI2RlZmluZSBEUExMX0JfTUQgMHgwNjAyMCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRlBBMAkweDA2MDQwCisjZGVmaW5lIEZQQTEJMHgwNjA0NAorI2RlZmluZSBGUEIwCTB4MDYwNDgKKyNkZWZpbmUgRlBCMQkweDA2MDRjCisjZGVmaW5lICAgRlBfTl9ESVZfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIEZQX05fRElWX1NISUZUCQkxNgorI2RlZmluZSAgIEZQX00xX0RJVl9NQVNLCTB4MDAwMDNmMDAKKyNkZWZpbmUgICBGUF9NMV9ESVZfU0hJRlQJCSA4CisjZGVmaW5lICAgRlBfTTJfRElWX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSAgIEZQX00yX0RJVl9TSElGVAkJIDAKKyNkZWZpbmUgRFBMTF9URVNUCTB4NjA2YworI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfMQkJKDAgPDwgMjIpCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQkoMSA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzQJCSgyIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfTUFTSwkoMyA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX05fQllQQVNTCQkoMSA8PCAxOSkKKyNkZWZpbmUgICBEUExMQl9URVNUX01fQllQQVNTCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBEUExMQl9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDE2KQorI2RlZmluZSAgIERQTExBX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDMpCisjZGVmaW5lICAgRFBMTEFfVEVTVF9NX0JZUEFTUwkJKDEgPDwgMikKKyNkZWZpbmUgICBEUExMQV9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIERfU1RBVEUJCTB4NjEwNAorI2RlZmluZSBDR18yRF9ESVMJMHg2MjAwCisjZGVmaW5lIENHXzNEX0RJUwkweDYyMDQKKworLyoKKyAqIFBhbGV0dGUgcmVncworICovCisKKyNkZWZpbmUgUEFMRVRURV9BCQkweDBhMDAwCisjZGVmaW5lIFBBTEVUVEVfQgkJMHgwYTgwMAorCisvKiBNQ0ggTU1JTyBzcGFjZSAqLworCisvKgorICogTUNIQkFSIG1pcnJvci4KKyAqCisgKiBUaGlzIG1pcnJvcnMgdGhlIE1DSEJBUiBNTUlPIHNwYWNlIHdob3NlIGxvY2F0aW9uIGlzIGRldGVybWluZWQgYnkKKyAqIGRldmljZSAwIGZ1bmN0aW9uIDAncyBwY2kgY29uZmlnIHJlZ2lzdGVyIDB4NDQgb3IgMHg0OCBhbmQgbWF0Y2hlcyBpdCBpbgorICogZXZlcnkgd2F5LiAgSXQgaXMgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgQ1AgcmVnaXN0ZXIgcmVhZCBpbnN0cnVjdGlvbnMuCisgKgorICovCisjZGVmaW5lIE1DSEJBUl9NSVJST1JfQkFTRQkweDEwMDAwCisKKy8qKiA5MTUtOTQ1IGFuZCBHTTk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGFjY2VzcyAqLworI2RlZmluZSBEQ0MJCQkweDEwMjAwCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUwJCSgwIDw8IDApCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0FTWU1NRVRSSUMJKDEgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQJKDIgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9NQVNLCQkJKDMgPDwgMCkKKyNkZWZpbmUgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUJCQkJKDEgPDwgMTApCisKKy8qKiA5NjUgTUNIIHJlZ2lzdGVyIGNvbnRyb2xsaW5nIERSQU0gY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEMwRFJCMwkJCTB4MTAyMDYKKyNkZWZpbmUgQzFEUkIzCQkJMHgxMDYwNgorCisvKgorICogT3ZlcmxheSByZWdzCisgKi8KKworI2RlZmluZSBPVkFERAkJCTB4MzAwMDAKKyNkZWZpbmUgRE9WU1RBCQkJMHgzMDAwOAorI2RlZmluZSBPQ19CVUYJCQkoMHgzPDwyMCkKKyNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAorI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0CisjZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKKyNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYworI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCisjZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKKworLyoKKyAqIERpc3BsYXkgZW5naW5lIHJlZ3MKKyAqLworCisvKiBQaXBlIEEgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0EJMHg2MDAwMAorI2RlZmluZSBIQkxBTktfQQkweDYwMDA0CisjZGVmaW5lIEhTWU5DX0EJCTB4NjAwMDgKKyNkZWZpbmUgVlRPVEFMX0EJMHg2MDAwYworI2RlZmluZSBWQkxBTktfQQkweDYwMDEwCisjZGVmaW5lIFZTWU5DX0EJCTB4NjAwMTQKKyNkZWZpbmUgUElQRUFTUkMJMHg2MDAxYworI2RlZmluZSBCQ0xSUEFUX0EJMHg2MDAyMAorCisvKiBQaXBlIEIgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAorI2RlZmluZSBIQkxBTktfQgkweDYxMDA0CisjZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKKyNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYworI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCisjZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKKyNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYworI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAorCisvKiBWR0EgcG9ydCBjb250cm9sICovCisjZGVmaW5lIEFEUEEJCQkweDYxMTAwCisjZGVmaW5lICAgQURQQV9EQUNfRU5BQkxFCSgxPDwzMSkKKyNkZWZpbmUgICBBRFBBX0RBQ19ESVNBQkxFCTAKKyNkZWZpbmUgICBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfUElQRV9BX1NFTEVDVAkwCisjZGVmaW5lICAgQURQQV9QSVBFX0JfU0VMRUNUCSgxPDwzMCkKKyNkZWZpbmUgICBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCisjZGVmaW5lICAgQURQQV9TRVRTX0hWUE9MQVJJVFkJMAorI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFIDAKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0NOVExfRElTQUJMRSAoMTw8MTApCisjZGVmaW5lICAgQURQQV9IU1lOQ19DTlRMX0VOQUJMRSAwCisjZGVmaW5lICAgQURQQV9WU1lOQ19BQ1RJVkVfSElHSCAoMTw8NCkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0FDVElWRV9MT1cJMAorI2RlZmluZSAgIEFEUEFfSFNZTkNfQUNUSVZFX0hJR0ggKDE8PDMpCisjZGVmaW5lICAgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKKyNkZWZpbmUgICBBRFBBX0RQTVNfTUFTSwkofigzPDwxMCkpCisjZGVmaW5lICAgQURQQV9EUE1TX09OCQkoMDw8MTApCisjZGVmaW5lICAgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSAgIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKKyNkZWZpbmUgICBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCisKKy8qIEhvdHBsdWcgY29udHJvbCAoOTQ1KyBvbmx5KSAqLworI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKKyNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQorI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjUpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVAkJKDEgPDwgMykKKworI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMTEpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLCQkoMyA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfQ09MT1IJCSgzIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfTk9ORQkJKDAgPDwgOCkKKyNkZWZpbmUgICBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDcpCisjZGVmaW5lICAgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQorCisvKiBTRFZPIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBTRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgU0RWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgU0RWT19FTkFCTEUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFNEVk9fUElQRV9CX1NFTEVDVAkoMSA8PCAzMCkKKyNkZWZpbmUgICBTRFZPX1NUQUxMX1NFTEVDVAkoMSA8PCAyOSkKKyNkZWZpbmUgICBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJKDEgPDwgMjYpCisvKioKKyAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBsaWVyLgorICoKKyAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4LgorICoKKyAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKKyAqLworI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCSg3IDw8IDIzKQorI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9NQVNLCSgxNSA8PCAxOSkKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9ERUZBVUxUCSg2IDw8IDE5KQorI2RlZmluZSAgIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkoMSA8PCAxOCkKKyNkZWZpbmUgICBTRFZPQ19HQU5HX01PREUJCSgxIDw8IDE2KQorI2RlZmluZSAgIFNEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBTRFZPQl9QQ0lFX0NPTkNVUlJFTkNZCSgxIDw8IDMpCisjZGVmaW5lICAgU0RWT19ERVRFQ1RFRAkJCSgxIDw8IDIpCisvKiBCaXRzIHRvIGJlIHByZXNlcnZlZCB3aGVuIHdyaXRpbmcgKi8KKyNkZWZpbmUgICBTRFZPQl9QUkVTRVJWRV9NQVNLICgoMSA8PCAxNykgfCAoMSA8PCAxNikgfCAoMSA8PCAxNCkgfCAoMSA8PCAyNikpCisjZGVmaW5lICAgU0RWT0NfUFJFU0VSVkVfTUFTSyAoKDEgPDwgMTcpIHwgKDEgPDwgMjYpKQorCisvKiBEVk8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIERWT0EJCQkweDYxMTIwCisjZGVmaW5lIERWT0IJCQkweDYxMTQwCisjZGVmaW5lIERWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgRFZPX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSAgIERWT19QSVBFX0JfU0VMRUNUCQkoMSA8PCAzMCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9VTlVTRUQJCSgwIDw8IDI4KQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9UVgkJKDIgPDwgMjgpCisjZGVmaW5lICAgRFZPX1BJUEVfU1RBTExfTUFTSwkJKDMgPDwgMjgpCisjZGVmaW5lICAgRFZPX1VTRV9WR0FfU1lOQwkJKDEgPDwgMTUpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfSTc0MAkJKDAgPDwgMTQpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfRlAJCSgxIDw8IDE0KQorI2RlZmluZSAgIERWT19WU1lOQ19ESVNBQkxFCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBEVk9fSFNZTkNfRElTQUJMRQkJKDEgPDwgMTApCisjZGVmaW5lICAgRFZPX1ZTWU5DX1RSSVNUQVRFCQkoMSA8PCA5KQorI2RlZmluZSAgIERWT19IU1lOQ19UUklTVEFURQkJKDEgPDwgOCkKKyNkZWZpbmUgICBEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9HQlJHCQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX1JHR0IJCSgwIDw8IDYpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfR0JSR19FUlJBVEEJKDAgPDwgNikKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9SR0dCX0VSUkFUQQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19WU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgNCkKKyNkZWZpbmUgICBEVk9fSFNZTkNfQUNUSVZFX0hJR0gJCSgxIDw8IDMpCisjZGVmaW5lICAgRFZPX0JMQU5LX0FDVElWRV9ISUdICQkoMSA8PCAyKQorI2RlZmluZSAgIERWT19PVVRQVVRfQ1NUQVRFX1BJWEVMUwkoMSA8PCAxKQkvKiBTREcgb25seSAqLworI2RlZmluZSAgIERWT19PVVRQVVRfU09VUkNFX1NJWkVfUElYRUxTCSgxIDw8IDApCS8qIFNERyBvbmx5ICovCisjZGVmaW5lICAgRFZPX1BSRVNFUlZFX01BU0sJCSgweDc8PDI0KQorI2RlZmluZSBEVk9BX1NSQ0RJTQkJMHg2MTEyNAorI2RlZmluZSBEVk9CX1NSQ0RJTQkJMHg2MTE0NAorI2RlZmluZSBEVk9DX1NSQ0RJTQkJMHg2MTE2NAorI2RlZmluZSAgIERWT19TUkNESU1fSE9SSVpPTlRBTF9TSElGVAkxMgorI2RlZmluZSAgIERWT19TUkNESU1fVkVSVElDQUxfU0hJRlQJMAorCisvKiBMVkRTIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBMVkRTCQkJMHg2MTE4MAorLyoKKyAqIEVuYWJsZXMgdGhlIExWRFMgcG9ydC4gIFRoaXMgYml0IG11c3QgYmUgc2V0IGJlZm9yZSBEUExMcyBhcmUgZW5hYmxlZCwgYXMKKyAqIHRoZSBEUExMIHNlbWFudGljcyBjaGFuZ2Ugd2hlbiB0aGUgTFZEUyBpcyBhc3NpZ25lZCB0byB0aGF0IHBpcGUuCisgKi8KKyNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKKy8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLworI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qCisgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKKyAqIHBpeGVsLgorICovCisjZGVmaW5lICAgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQorI2RlZmluZSAgIExWRFNfQTBBMl9DTEtBX1BPV0VSX0RPV04JKDAgPDwgOCkKKyNkZWZpbmUgICBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQorLyoKKyAqIENvbnRyb2xzIHRoZSBBMyBkYXRhIHBhaXIsIHdoaWNoIGNvbnRhaW5zIHRoZSBhZGRpdGlvbmFsIExTQnMgZm9yIDI0IGJpdAorICogbW9kZS4gIE9ubHkgZW5hYmxlZCBpZiBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUCBhbHNvIGluZGljYXRlcyBpdCBzaG91bGQgYmUKKyAqIG9uLgorICovCisjZGVmaW5lICAgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQorI2RlZmluZSAgIExWRFNfQTNfUE9XRVJfRE9XTgkJKDAgPDwgNikKKyNkZWZpbmUgICBMVkRTX0EzX1BPV0VSX1VQCQkoMyA8PCA2KQorLyoKKyAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAorICogaXMgc2V0LgorICovCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX01BU0sJCSgzIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX1VQCQkoMyA8PCA0KQorLyoKKyAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgorICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBhcmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCisgKiBhZGRpdGlvbmFsbHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfTUFTSwkJKDMgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8IDIpCisKKy8qIFBhbmVsIHBvd2VyIHNlcXVlbmNpbmcgKi8KKyNkZWZpbmUgUFBfU1RBVFVTCTB4NjEyMDAKKyNkZWZpbmUgICBQUF9PTgkJKDEgPDwgMzEpCisvKgorICogSW5kaWNhdGVzIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFuZWwgYXJlIG9uOgorICoKKyAqIC0gUExMIGVuYWJsZWQKKyAqIC0gcGlwZSBlbmFibGVkCisgKiAtIExWRFMvRFZPQi9EVk9DIG9uCisgKi8KKyNkZWZpbmUgICBQUF9SRUFEWQkJKDEgPDwgMzApCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTk9ORQkoMCA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PTgkoMSA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PRkYJKDIgPDwgMjgpCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTUFTSwkweDMwMDAwMDAwCisjZGVmaW5lIFBQX0NPTlRST0wJMHg2MTIwNAorI2RlZmluZSAgIFBPV0VSX1RBUkdFVF9PTgkoMSA8PCAwKQorI2RlZmluZSBQUF9PTl9ERUxBWVMJMHg2MTIwOAorI2RlZmluZSBQUF9PRkZfREVMQVlTCTB4NjEyMGMKKyNkZWZpbmUgUFBfRElWSVNPUgkweDYxMjEwCisKKy8qIFBhbmVsIGZpdHRpbmcgKi8KKyNkZWZpbmUgUEZJVF9DT05UUk9MCTB4NjEyMzAKKyNkZWZpbmUgICBQRklUX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgUEZJVF9QSVBFX01BU0sJKDMgPDwgMjkpCisjZGVmaW5lICAgUEZJVF9QSVBFX1NISUZUCTI5CisjZGVmaW5lICAgVkVSVF9JTlRFUlBfRElTQUJMRQkoMCA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9CSUxJTkVBUgkoMSA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9NQVNLCSgzIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfQVVUT19TQ0FMRQkoMSA8PCA5KQorI2RlZmluZSAgIEhPUklaX0lOVEVSUF9ESVNBQkxFCSgwIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX0JJTElORUFSCSgxIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX01BU0sJKDMgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9BVVRPX1NDQUxFCSgxIDw8IDUpCisjZGVmaW5lICAgUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFICgxIDw8IDMpCisjZGVmaW5lIFBGSVRfUEdNX1JBVElPUwkweDYxMjM0CisjZGVmaW5lICAgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCisjZGVmaW5lICAgUEZJVF9IT1JJWl9TQ0FMRV9NQVNLCQkJMHgwMDAwZmZmMAorI2RlZmluZSBQRklUX0FVVE9fUkFUSU9TIDB4NjEyMzgKKworLyogQmFja2xpZ2h0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKKyNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUCQkoMTcpCisjZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgICBCTE1fQ09NQklOQVRJT05fTU9ERSAoMSA8PCAzMCkKKy8qCisgKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKKyAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCisgKgorICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgorICovCisjZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLCQkoMHg3ZmZmIDw8IDE3KQorI2RlZmluZSAgIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKKy8qCisgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCisgKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgorICoKKyAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCisgKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KKyAqLworI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX1NISUZUCQkoMCkKKyNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQorCisvKiBUViBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZfQ1RMCQkJMHg2ODAwMAorLyoqIEVuYWJsZXMgdGhlIFRWIGVuY29kZXIgKi8KKyMgZGVmaW5lIFRWX0VOQ19FTkFCTEUJCQkoMSA8PCAzMSkKKy8qKiBTb3VyY2VzIHRoZSBUViBlbmNvZGVyIGlucHV0IGZyb20gcGlwZSBCIGluc3RlYWQgb2YgQS4gKi8KKyMgZGVmaW5lIFRWX0VOQ19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyoqIE91dHB1dHMgY29tcG9zaXRlIHZpZGVvIChEQUMgQSBvbmx5KSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9DT01QT1NJVEUJKDAgPDwgMjgpCisvKiogT3V0cHV0cyBTVmlkZW8gdmlkZW8gKERBQyBCL0MpICovCisjIGRlZmluZSBUVl9FTkNfT1VUUFVUX1NWSURFTwkJKDEgPDwgMjgpCisvKiogT3V0cHV0cyBDb21wb25lbnQgdmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfQ09NUE9ORU5UCSgyIDw8IDI4KQorLyoqIE91dHB1dHMgQ29tcG9zaXRlIGFuZCBTVmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfU1ZJREVPX0NPTVBPU0lURQkoMyA8PCAyOCkKKyMgZGVmaW5lIFRWX1RSSUxFVkVMX1NZTkMJCSgxIDw8IDIxKQorLyoqIEVuYWJsZXMgc2xvdyBzeW5jIGdlbmVyYXRpb24gKDk0NUdNIG9ubHkpICovCisjIGRlZmluZSBUVl9TTE9XX1NZTkMJCQkoMSA8PCAyMCkKKy8qKiBTZWxlY3RzIDR4IG92ZXJzYW1wbGluZyBmb3IgNDgwaSBhbmQgNTc2cCAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV80WAkJKDAgPDwgMTgpCisvKiogU2VsZWN0cyAyeCBvdmVyc2FtcGxpbmcgZm9yIDcyMHAgYW5kIDEwODBpICovCisjIGRlZmluZSBUVl9PVkVSU0FNUExFXzJYCQkoMSA8PCAxOCkKKy8qKiBTZWxlY3RzIG5vIG92ZXJzYW1wbGluZyBmb3IgMTA4MHAgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfTk9ORQkJKDIgPDwgMTgpCisvKiogU2VsZWN0cyA4eCBvdmVyc2FtcGxpbmcgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfOFgJCSgzIDw8IDE4KQorLyoqIFNlbGVjdHMgcHJvZ3Jlc3NpdmUgbW9kZSByYXRoZXIgdGhhbiBpbnRlcmxhY2VkICovCisjIGRlZmluZSBUVl9QUk9HUkVTU0lWRQkJCSgxIDw8IDE3KQorLyoqIFNldHMgdGhlIGNvbG9yYnVyc3QgdG8gUEFMIG1vZGUuICBSZXF1aXJlZCBmb3Igbm9uLU0gUEFMIG1vZGVzLiAqLworIyBkZWZpbmUgVFZfUEFMX0JVUlNUCQkJKDEgPDwgMTYpCisvKiogRmllbGQgZm9yIHNldHRpbmcgZGVsYXkgb2YgWSBjb21wYXJlZCB0byBDICovCisjIGRlZmluZSBUVl9ZQ19TS0VXX01BU0sJCSg3IDw8IDEyKQorLyoqIEVuYWJsZXMgYSBmaXggZm9yIDQ4MHAvNTc2cCBzdGFuZGFyZCBkZWZpbml0aW9uIG1vZGVzIG9uIHRoZSA5MTVHTSBvbmx5ICovCisjIGRlZmluZSBUVl9FTkNfU0RQX0ZJWAkJCSgxIDw8IDExKQorLyoqCisgKiBFbmFibGVzIGEgZml4IGZvciB0aGUgOTE1R00gb25seS4KKyAqCisgKiBOb3Qgc3VyZSB3aGF0IGl0IGRvZXMuCisgKi8KKyMgZGVmaW5lIFRWX0VOQ19DMF9GSVgJCQkoMSA8PCAxMCkKKy8qKiBCaXRzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgc29mdHdhcmUgKi8KKyMgZGVmaW5lIFRWX0NUTF9TQVZFCQkJKCgzIDw8IDgpIHwgKDMgPDwgNikpCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX01BU0sJCSgzIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyBhbGwgZmVhdHVyZXMgZW5hYmxlZCAqLworIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9FTkFCTEVECQkoMCA8PCA0KQorLyoqIFJlYWQtb25seSBzdGF0ZSB0aGF0IHJlcG9ydHMgdGhhdCBNYWNyb3Zpc2lvbiBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZSovCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX05PX01BQ1JPVklTSU9OCSgxIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyB0aGF0IFRWLW91dCBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZS4gKi8KKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfRElTQUJMRUQJCSgyIDw8IDQpCisvKiogTm9ybWFsIG9wZXJhdGlvbiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX05PUk1BTAkJKDAgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAxIC0gY29tYm8gcGF0dGVybiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMQkJKDEgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAyIC0gZnVsbCBzY3JlZW4gdmVydGljYWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzIJCSgyIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gMyAtIGZ1bGwgc2NyZWVuIGhvcml6b250YWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzMJCSgzIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gNCAtIHJhbmRvbSBub2lzZSAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fNAkJKDQgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiA1IC0gbGluZWFyIGNvbG9yIHJhbXBzICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl81CQkoNSA8PCAwKQorLyoqCisgKiBUaGlzIHRlc3QgbW9kZSBmb3JjZXMgdGhlIERBQ3MgdG8gNTAlIG9mIGZ1bGwgb3V0cHV0LgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbG9hZCBkZXRlY3Rpb24gaW4gY29tYmluYXRpb24gd2l0aCBUVkRBQ19TRU5TRV9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9NT05JVE9SX0RFVEVDVAkoNyA8PCAwKQorIyBkZWZpbmUgVFZfVEVTVF9NT0RFX01BU0sJCSg3IDw8IDApCisKKyNkZWZpbmUgVFZfREFDCQkJMHg2ODAwNAorLyoqCisgKiBSZXBvcnRzIHRoYXQgREFDIHN0YXRlIGNoYW5nZSBsb2dpYyBoYXMgcmVwb3J0ZWQgY2hhbmdlIChSTykuCisgKgorICogVGhpcyBnZXRzIGNsZWFyZWQgd2hlbiBUVl9EQUNfU1RBVEVfRU4gaXMgY2xlYXJlZAorKi8KKyMgZGVmaW5lIFRWREFDX1NUQVRFX0NIRwkJKDEgPDwgMzEpCisjIGRlZmluZSBUVkRBQ19TRU5TRV9NQVNLCQkoNyA8PCAyOCkKKy8qKiBSZXBvcnRzIHRoYXQgREFDIEEgdm9sdGFnZSBpcyBhYm92ZSB0aGUgZGV0ZWN0IHRocmVzaG9sZCAqLworIyBkZWZpbmUgVFZEQUNfQV9TRU5TRQkJCSgxIDw8IDMwKQorLyoqIFJlcG9ydHMgdGhhdCBEQUMgQiB2b2x0YWdlIGlzIGFib3ZlIHRoZSBkZXRlY3QgdGhyZXNob2xkICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFCQkJKDEgPDwgMjkpCisvKiogUmVwb3J0cyB0aGF0IERBQyBDIHZvbHRhZ2UgaXMgYWJvdmUgdGhlIGRldGVjdCB0aHJlc2hvbGQgKi8KKyMgZGVmaW5lIFRWREFDX0NfU0VOU0UJCQkoMSA8PCAyOCkKKy8qKgorICogRW5hYmxlcyBEQUMgc3RhdGUgZGV0ZWN0aW9uIGxvZ2ljLCBmb3IgbG9hZC1iYXNlZCBUViBkZXRlY3Rpb24uCisgKgorICogVGhlIFBMTCBvZiB0aGUgY2hvc2VuIHBpcGUgKGluIFRWX0NUTCkgbXVzdCBiZSBydW5uaW5nLCBhbmQgdGhlIGVuY29kZXIgc2V0CisgKiB0byBvZmYsIGZvciBsb2FkIGRldGVjdGlvbiB0byB3b3JrLgorICovCisjIGRlZmluZSBUVkRBQ19TVEFURV9DSEdfRU4JCSgxIDw8IDI3KQorLyoqIFNldHMgdGhlIERBQyBBIHNlbnNlIHZhbHVlIHRvIGhpZ2ggKi8KKyMgZGVmaW5lIFRWREFDX0FfU0VOU0VfQ1RMCQkoMSA8PCAyNikKKy8qKiBTZXRzIHRoZSBEQUMgQiBzZW5zZSB2YWx1ZSB0byBoaWdoICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFX0NUTAkJKDEgPDwgMjUpCisvKiogU2V0cyB0aGUgREFDIEMgc2Vuc2UgdmFsdWUgdG8gaGlnaCAqLworIyBkZWZpbmUgVFZEQUNfQ19TRU5TRV9DVEwJCSgxIDw8IDI0KQorLyoqIE92ZXJyaWRlcyB0aGUgRU5DX0VOQUJMRSBhbmQgREFDIHZvbHRhZ2UgbGV2ZWxzICovCisjIGRlZmluZSBEQUNfQ1RMX09WRVJSSURFCQkoMSA8PCA3KQorLyoqIFNldHMgdGhlIHNsZXcgcmF0ZS4gIE11c3QgYmUgcHJlc2VydmVkIGluIHNvZnR3YXJlICovCisjIGRlZmluZSBFTkNfVFZEQUNfU0xFV19GQVNUCQkoMSA8PCA2KQorIyBkZWZpbmUgREFDX0FfMV8zX1YJCQkoMCA8PCA0KQorIyBkZWZpbmUgREFDX0FfMV8xX1YJCQkoMSA8PCA0KQorIyBkZWZpbmUgREFDX0FfMF83X1YJCQkoMiA8PCA0KQorIyBkZWZpbmUgREFDX0FfT0ZGCQkJKDMgPDwgNCkKKyMgZGVmaW5lIERBQ19CXzFfM19WCQkJKDAgPDwgMikKKyMgZGVmaW5lIERBQ19CXzFfMV9WCQkJKDEgPDwgMikKKyMgZGVmaW5lIERBQ19CXzBfN19WCQkJKDIgPDwgMikKKyMgZGVmaW5lIERBQ19CX09GRgkJCSgzIDw8IDIpCisjIGRlZmluZSBEQUNfQ18xXzNfVgkJCSgwIDw8IDApCisjIGRlZmluZSBEQUNfQ18xXzFfVgkJCSgxIDw8IDApCisjIGRlZmluZSBEQUNfQ18wXzdfVgkJCSgyIDw8IDApCisjIGRlZmluZSBEQUNfQ19PRkYJCQkoMyA8PCAwKQorCisvKioKKyAqIENTQyBjb2VmZmljaWVudHMgYXJlIHN0b3JlZCBpbiBhIGZsb2F0aW5nIHBvaW50IGZvcm1hdCB3aXRoIDkgYml0cyBvZgorICogbWFudGlzc2EgYW5kIDIgb3IgMyBiaXRzIG9mIGV4cG9uZW50LiAgVGhlIGV4cG9uZW50IGlzIHJlcHJlc2VudGVkIGFzIDIqKi1uLAorICogd2hlcmUgMi1iaXQgZXhwb25lbnRzIGFyZSB1bnNpZ25lZCBuLCBhbmQgMy1iaXQgZXhwb25lbnRzIGFyZSBzaWduZWQgbiB3aXRoCisgKiAtMSAoMHgzKSBiZWluZyB0aGUgb25seSBsZWdhbCBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworI2RlZmluZSBUVl9DU0NfWQkJMHg2ODAxMAorIyBkZWZpbmUgVFZfUllfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX1JZX1NISUZUCQkJMTYKKyMgZGVmaW5lIFRWX0dZX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9HWV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfWTIJCTB4NjgwMTQKKyMgZGVmaW5lIFRWX0JZX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9CWV9TSElGVAkJCTE2CisvKioKKyAqIFkgYXR0ZW51YXRpb24gZm9yIGNvbXBvbmVudCB2aWRlby4KKyAqCisgKiBTdG9yZWQgaW4gMS45IGZpeGVkIHBvaW50LgorICovCisjIGRlZmluZSBUVl9BWV9NQVNLCQkJMHgwMDAwMDNmZgorIyBkZWZpbmUgVFZfQVlfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UJCTB4NjgwMTgKKyMgZGVmaW5lIFRWX1JVX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9SVV9TSElGVAkJCTE2CisjIGRlZmluZSBUVl9HVV9NQVNLCQkJMHgwMDAwMDdmZgorIyBkZWZpbmUgVFZfR1VfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UyCQkweDY4MDFjCisjIGRlZmluZSBUVl9CVV9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfQlVfU0hJRlQJCQkxNgorLyoqCisgKiBVIGF0dGVudWF0aW9uIGZvciBjb21wb25lbnQgdmlkZW8uCisgKgorICogU3RvcmVkIGluIDEuOSBmaXhlZCBwb2ludC4KKyAqLworIyBkZWZpbmUgVFZfQVVfTUFTSwkJCTB4MDAwMDAzZmYKKyMgZGVmaW5lIFRWX0FVX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WCQkweDY4MDIwCisjIGRlZmluZSBUVl9SVl9NQVNLCQkJMHgwZmZmMDAwMAorIyBkZWZpbmUgVFZfUlZfU0hJRlQJCQkxNgorIyBkZWZpbmUgVFZfR1ZfTUFTSwkJCTB4MDAwMDA3ZmYKKyMgZGVmaW5lIFRWX0dWX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WMgkJMHg2ODAyNAorIyBkZWZpbmUgVFZfQlZfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX0JWX1NISUZUCQkJMTYKKy8qKgorICogViBhdHRlbnVhdGlvbiBmb3IgY29tcG9uZW50IHZpZGVvLgorICoKKyAqIFN0b3JlZCBpbiAxLjkgZml4ZWQgcG9pbnQuCisgKi8KKyMgZGVmaW5lIFRWX0FWX01BU0sJCQkweDAwMDAwN2ZmCisjIGRlZmluZSBUVl9BVl9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DTFJfS05PQlMJCTB4NjgwMjgKKy8qKiAycy1jb21wbGVtZW50IGJyaWdodG5lc3MgYWRqdXN0bWVudCAqLworIyBkZWZpbmUgVFZfQlJJR0hUTkVTU19NQVNLCQkweGZmMDAwMDAwCisjIGRlZmluZSBUVl9CUklHSFRORVNTX1NISUZUCQkyNAorLyoqIENvbnRyYXN0IGFkanVzdG1lbnQsIGFzIGEgMi42IHVuc2lnbmVkIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLworIyBkZWZpbmUgVFZfQ09OVFJBU1RfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQ09OVFJBU1RfU0hJRlQJCTE2CisvKiogU2F0dXJhdGlvbiBhZGp1c3RtZW50LCBhcyBhIDIuNiB1bnNpZ25lZCBmbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyMgZGVmaW5lIFRWX1NBVFVSQVRJT05fTUFTSwkJMHgwMDAwZmYwMAorIyBkZWZpbmUgVFZfU0FUVVJBVElPTl9TSElGVAkJOAorLyoqIEh1ZSBhZGp1c3RtZW50LCBhcyBhbiBpbnRlZ2VyIHBoYXNlIGFuZ2xlIGluIGRlZ3JlZXMgKi8KKyMgZGVmaW5lIFRWX0hVRV9NQVNLCQkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfSFVFX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NMUl9MRVZFTAkJMHg2ODAyYworLyoqIENvbnRyb2xzIHRoZSBEQUMgbGV2ZWwgZm9yIGJsYWNrICovCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9NQVNLCQkweDAxZmYwMDAwCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9TSElGVAkJMTYKKy8qKiBDb250cm9scyB0aGUgREFDIGxldmVsIGZvciBibGFua2luZyAqLworIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfTUFTSwkJMHgwMDAwMDFmZgorIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfU0hJRlQJCTAKKworI2RlZmluZSBUVl9IX0NUTF8xCQkweDY4MDMwCisvKiogTnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgaHN5bmMuICovCisjIGRlZmluZSBUVl9IU1lOQ19FTkRfTUFTSwkJMHgxZmZmMDAwMAorIyBkZWZpbmUgVFZfSFNZTkNfRU5EX1NISUZUCQkxNgorLyoqIFRvdGFsIG51bWJlciBvZiBwaXhlbHMgbWludXMgb25lIGluIHRoZSBsaW5lIChkaXNwbGF5IGFuZCBibGFua2luZykuICovCisjIGRlZmluZSBUVl9IVE9UQUxfTUFTSwkJCTB4MDAwMDFmZmYKKyMgZGVmaW5lIFRWX0hUT1RBTF9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfQ1RMXzIJCTB4NjgwMzQKKy8qKiBFbmFibGVzIHRoZSBjb2xvcmJ1cnN0IChuZWVkZWQgZm9yIG5vbi1jb21wb25lbnQgY29sb3IpICovCisjIGRlZmluZSBUVl9CVVJTVF9FTkEJCQkoMSA8PCAzMSkKKy8qKiBPZmZzZXQgb2YgdGhlIGNvbG9yYnVyc3QgZnJvbSB0aGUgc3RhcnQgb2YgaHN5bmMsIGluIHBpeGVscyBtaW51cyBvbmUuICovCisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfTUFTSwkJMHgxZmZmMDAwMAorLyoqIExlbmd0aCBvZiB0aGUgY29sb3JidXJzdCAqLworIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9NQVNLCQkweDAwMDFmZmYKKworI2RlZmluZSBUVl9IX0NUTF8zCQkweDY4MDM4CisvKiogRW5kIG9mIGhibGFuaywgbWVhc3VyZWQgaW4gcGl4ZWxzIG1pbnVzIG9uZSBmcm9tIHN0YXJ0IG9mIGhzeW5jICovCisjIGRlZmluZSBUVl9IQkxBTktfRU5EX1NISUZUCQkxNgorIyBkZWZpbmUgVFZfSEJMQU5LX0VORF9NQVNLCQkweDFmZmYwMDAwCisvKiogU3RhcnQgb2YgaGJsYW5rLCBtZWFzdXJlZCBpbiBwaXhlbHMgbWludXMgb25lIGZyb20gc3RhcnQgb2YgaHN5bmMgKi8KKyMgZGVmaW5lIFRWX0hCTEFOS19TVEFSVF9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJMQU5LX1NUQVJUX01BU0sJCTB4MDAwMWZmZgorCisjZGVmaW5lIFRWX1ZfQ1RMXzEJCTB4NjgwM2MKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX05CUl9FTkRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9OQlJfRU5EX01BU0sJCTB4MDdmZjAwMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMV9TSElGVAkJOAorIyBkZWZpbmUgVFZfVklfRU5EX0YxX01BU0sJCTB4MDAwMDNmMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMl9TSElGVAkJMAorIyBkZWZpbmUgVFZfVklfRU5EX0YyX01BU0sJCTB4MDAwMDAwM2YKKworI2RlZmluZSBUVl9WX0NUTF8yCQkweDY4MDQwCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WU1lOQ19MRU5fTUFTSwkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfVlNZTkNfTEVOX1NISUZUCQkxNgorLyoqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9NQVNLCQkweDAwMDA3ZjAwCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9TSElGVAk4CisvKioKKyAqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9NQVNLCQkweDAwMDAwMDdmCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9TSElGVAkwCisKKyNkZWZpbmUgVFZfVl9DVExfMwkJMHg2ODA0NAorLyoqIEVuYWJsZXMgZ2VuZXJhdGlvbiBvZiB0aGUgZXF1YWxpemF0aW9uIHNpZ25hbCAqLworIyBkZWZpbmUgVFZfRVFVQUxfRU5BCQkJKDEgPDwgMzEpCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WRVFfTEVOX01BU0sJCTB4MDA3ZjAwMDAKKyMgZGVmaW5lIFRWX1ZFUV9MRU5fU0hJRlQJCTE2CisvKiogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfTUFTSwkJMHgwMDA3ZjAwCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfU0hJRlQJCTgKKy8qKgorICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfTUFTSwkJMHgwMDAwMDdmCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF80CQkweDY4MDQ4CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMV9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YxX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfVl9DVExfNQkJMHg2ODA0YworLyoqCisgKiBPZmZzZXQgdG8gc3RhcnQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHZlcnRpY2FsIHN0YXJ0LgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfTUFTSwkweDAwM2YwMDAwCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfU0hJRlQJMTYKKy8qKgorICogT2Zmc2V0IHRvIHRoZSBlbmQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBzdGFydCBvZiBOQlIuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjJfTUFTSwkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMl9TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzYJCTB4NjgwNTAKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YzX01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF83CQkweDY4MDU0CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GNF9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0Y0X1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzEJCTB4NjgwNjAKKy8qKiBUdXJucyBvbiB0aGUgZmlyc3Qgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NfRERBMV9FTgkJCSgxIDw8IDMxKQorLyoqIFR1cm5zIG9uIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ19EREEyX0VOCQkJKDEgPDwgMzApCisvKiogVHVybnMgb24gdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDX0REQTNfRU4JCQkoMSA8PCAyOSkKKy8qKiBTZXRzIHRoZSBzdWJjYXJyaWVyIEREQSB0byByZXNldCBmcmVxdWVuY3kgZXZlcnkgb3RoZXIgZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzIJCSgwIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBmb3VydGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzQJCSgxIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBlaWdodGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzgJCSgyIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIG5ldmVyIHJlc2V0IHRoZSBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX05FVkVSCQkoMyA8PCAyNCkKKy8qKiBTZXRzIHRoZSBwZWFrIGFtcGxpdHVkZSBvZiB0aGUgY29sb3JidXJzdC4qLworIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVtZW50IG9mIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTFfSU5DX01BU0sJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX1NDRERBMV9JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMgkJMHg2ODA2NAorLyoqIFNldHMgdGhlIHJvbGxvdmVyIGZvciB0aGUgc2Vjb25kIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSBzZWNvbmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEyX0lOQ19NQVNLCQkweDAwMDA3ZmZmCisjIGRlZmluZSBUVl9TQ0REQTJfSU5DX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzMJCTB4NjgwNjgKKy8qKiBTZXRzIHRoZSByb2xsb3ZlciBmb3IgdGhlIHRoaXJkIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSB0aGlyZCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTNfSU5DX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1NDRERBM19JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9XSU5fUE9TCQkweDY4MDcwCisvKiogWCBjb29yZGluYXRlIG9mIHRoZSBkaXNwbGF5IGZyb20gdGhlIHN0YXJ0IG9mIGhvcml6b250YWwgYWN0aXZlICovCisjIGRlZmluZSBUVl9YUE9TX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YUE9TX1NISUZUCQkJMTYKKy8qKiBZIGNvb3JkaW5hdGUgb2YgdGhlIGRpc3BsYXkgZnJvbSB0aGUgc3RhcnQgb2YgdmVydGljYWwgYWN0aXZlIChOQlIpICovCisjIGRlZmluZSBUVl9ZUE9TX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9ZUE9TX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX1dJTl9TSVpFCQkweDY4MDc0CisvKiogSG9yaXpvbnRhbCBzaXplIG9mIHRoZSBkaXNwbGF5IHdpbmRvdywgbWVhc3VyZWQgaW4gcGl4ZWxzKi8KKyMgZGVmaW5lIFRWX1hTSVpFX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YU0laRV9TSElGVAkJCTE2CisvKioKKyAqIFZlcnRpY2FsIHNpemUgb2YgdGhlIGRpc3BsYXkgd2luZG93LCBtZWFzdXJlZCBpbiBwaXhlbHMuCisgKgorICogTXVzdCBiZSBldmVuIGZvciBpbnRlcmxhY2VkIG1vZGVzLgorICovCisjIGRlZmluZSBUVl9ZU0laRV9NQVNLCQkJMHgwMDAwMGZmZgorIyBkZWZpbmUgVFZfWVNJWkVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8xCQkweDY4MDgwCisvKioKKyAqIEVuYWJsZXMgYXV0b21hdGljIHNjYWxpbmcgY2FsY3VsYXRpb24uCisgKgorICogSWYgc2V0LCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBpZ25vcmVkLCBhbmQgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGNhbgorICogYmUgcmVhZCBiYWNrIGZyb20gdGhlIHJlZ2lzdGVyLgorICovCisjIGRlZmluZSBUVl9BVVRPX1NDQUxFCQkJKDEgPDwgMzEpCisvKioKKyAqIERpc2FibGVzIHRoZSB2ZXJ0aWNhbCBmaWx0ZXIuCisgKgorICogVGhpcyBpcyByZXF1aXJlZCBvbiBtb2RlcyBtb3JlIHRoYW4gMTAyNCBwaXhlbHMgd2lkZSAqLworIyBkZWZpbmUgVFZfVl9GSUxURVJfQllQQVNTCQkoMSA8PCAyOSkKKy8qKiBFbmFibGVzIGFkYXB0aXZlIHZlcnRpY2FsIGZpbHRlcmluZyAqLworIyBkZWZpbmUgVFZfVkFEQVBUCQkJKDEgPDwgMjgpCisjIGRlZmluZSBUVl9WQURBUFRfTU9ERV9NQVNLCQkoMyA8PCAyNikKKy8qKiBTZWxlY3RzIHRoZSBsZWFzdCBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTEVBU1QJCSgwIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vZGVyYXRlbHkgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PREVSQVRFCSgxIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vc3QgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PU1QJCSgzIDw8IDI2KQorLyoqCisgKiBTZXRzIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IgZGl2aWRlZAorICogYnkgdGhlIG92ZXJzYW1wbGluZyByYXRlLiAgVFZfSFNDQUxFIHNob3VsZCBiZSBsZXNzIHRoYW4gMSwgYW5kIHNldCB0bzoKKyAqCisgKiAoc3JjIHdpZHRoIC0gMSkgLyAoKG92ZXJzYW1wbGUgKiBkZXN0IHdpZHRoKSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX01BU0sJCTB4MDAwMDNmZmYKKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8yCQkweDY4MDg0CisvKioKKyAqIFNldHMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgMy4xNSBmaXhlZC1wb2ludCB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3Rvci4KKyAqCisgKiBUVl9WU0NBTEUgc2hvdWxkIGJlIChzcmMgaGVpZ2h0IC0gMSkgLyAoKGludGVybGFjZSAqIGRlc3QgaGVpZ2h0KSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFxzYSBUVl9WU0NBTEVfSU5UX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzMJCTB4NjgwODgKKy8qKgorICogU2V0cyB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRWX1ZTQ0FMRSBzaG91bGQgYmUgKHNyYyBoZWlnaHQgLSAxKSAvICgxLzQgKiAoZGVzdCBoZWlnaHQgLSAxKSkKKyAqCisgKiBGb3IgcHJvZ3Jlc3NpdmUgbW9kZXMsIFRWX1ZTQ0FMRV9JUF9JTlQgc2hvdWxkIGJlIHNldCB0byB6ZXJvZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIEZvciBwcm9ncmVzc2l2ZSBtb2RlcywgVFZfVlNDQUxFX0lQX0lOVCBzaG91bGQgYmUgc2V0IHRvIHplcm9lcy4KKyAqCisgKiBcc2EgVFZfVlNDQUxFX0lQX0lOVF9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfQ09OVFJPTAkJMHg2ODA5MAorIyBkZWZpbmUgVFZfQ0NfRU5BQkxFCQkJKDEgPDwgMzEpCisvKioKKyAqIFNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZW5kIHRoZSBDQyBkYXRhIGluLgorICoKKyAqIENDIGRhdGEgaXMgdXN1YWxseSBzZW50IGluIGZpZWxkIDAuCisgKi8KKyMgZGVmaW5lIFRWX0NDX0ZJRF9NQVNLCQkJKDEgPDwgMjcpCisjIGRlZmluZSBUVl9DQ19GSURfU0hJRlQJCTI3CisvKiogU2V0cyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgQ0MgZGF0YS4gIFVzdWFsbHkgMTM1LiAqLworIyBkZWZpbmUgVFZfQ0NfSE9GRl9NQVNLCQkweDAzZmYwMDAwCisjIGRlZmluZSBUVl9DQ19IT0ZGX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBDQyBkYXRhLiAgVXN1YWxseSAyMSAqLworIyBkZWZpbmUgVFZfQ0NfTElORV9NQVNLCQkweDAwMDAwMDNmCisjIGRlZmluZSBUVl9DQ19MSU5FX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfREFUQQkJMHg2ODA5NAorIyBkZWZpbmUgVFZfQ0NfUkRZCQkJKDEgPDwgMzEpCisvKiogU2Vjb25kIHdvcmQgb2YgQ0MgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gKi8KKyMgZGVmaW5lIFRWX0NDX0RBVEFfMl9NQVNLCQkweDAwN2YwMDAwCisjIGRlZmluZSBUVl9DQ19EQVRBXzJfU0hJRlQJCTE2CisvKiogRmlyc3Qgd29yZCBvZiBDQyBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkLiAqLworIyBkZWZpbmUgVFZfQ0NfREFUQV8xX01BU0sJCTB4MDAwMDAwN2YKKyMgZGVmaW5lIFRWX0NDX0RBVEFfMV9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfTFVNQV8wCQkweDY4MTAwCisjZGVmaW5lIFRWX0hfTFVNQV81OQkJMHg2ODFlYworI2RlZmluZSBUVl9IX0NIUk9NQV8wCQkweDY4MjAwCisjZGVmaW5lIFRWX0hfQ0hST01BXzU5CQkweDY4MmVjCisjZGVmaW5lIFRWX1ZfTFVNQV8wCQkweDY4MzAwCisjZGVmaW5lIFRWX1ZfTFVNQV80MgkJMHg2ODNhOAorI2RlZmluZSBUVl9WX0NIUk9NQV8wCQkweDY4NDAwCisjZGVmaW5lIFRWX1ZfQ0hST01BXzQyCQkweDY4NGE4CisKKy8qIERpc3BsYXkgJiBjdXJzb3IgY29udHJvbCAqLworCisvKiBQaXBlIEEgKi8KKyNkZWZpbmUgUElQRUFEU0wJCTB4NzAwMDAKKyNkZWZpbmUgUElQRUFDT05GCQkweDcwMDA4CisjZGVmaW5lICAgUElQRUFDT05GX0VOQUJMRQkoMTw8MzEpCisjZGVmaW5lICAgUElQRUFDT05GX0RJU0FCTEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCisjZGVmaW5lICAgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJKDE8PDMwKQorI2RlZmluZSAgIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCisjZGVmaW5lICAgUElQRUFDT05GX1BJUEVfVU5MT0NLRUQgMAorI2RlZmluZSAgIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkoMTw8MjUpCisjZGVmaW5lICAgUElQRUFDT05GX1BBTEVUVEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9HQU1NQQkJKDE8PDI0KQorI2RlZmluZSAgIFBJUEVDT05GX0ZPUkNFX0JPUkRFUgkoMTw8MjUpCisjZGVmaW5lICAgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCisjZGVmaW5lICAgUElQRUNPTkZfSU5URVJMQUNFX1dfRklFTERfSU5ESUNBVElPTgkoNiA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKKyNkZWZpbmUgUElQRUFTVEFUCQkweDcwMDI0CisjZGVmaW5lICAgUElQRV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfRU5BQkxFCQkJKDFVTDw8MjkpCisjZGVmaW5lICAgUElQRV9DUkNfRE9ORV9FTkFCTEUJCQkoMVVMPDwyOCkKKyNkZWZpbmUgICBQSVBFX0dNQlVTX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjcpCisjZGVmaW5lICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI2KQorI2RlZmluZSAgIFBJUEVfVlNZTkNfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjUpCisjZGVmaW5lICAgUElQRV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9FTkFCTEUJKDFVTDw8MjQpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjMpCisjZGVmaW5lICAgUElQRV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjIpCisjZGVmaW5lICAgUElQRV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMCkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwxOCkgLyogcHJlLTk2NSAqLworI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTgpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDE3KQorI2RlZmluZSAgIFBJUEVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDwxMykKKyNkZWZpbmUgICBQSVBFX0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MTIpCisjZGVmaW5lICAgUElQRV9HTUJVU19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxMSkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTApCisjZGVmaW5lICAgUElQRV9WU1lOQ19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw5KQorI2RlZmluZSAgIFBJUEVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX1NUQVRVUwkJKDFVTDw8NykKKyNkZWZpbmUgICBQSVBFX0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSAgIFBJUEVfT0REX0ZJRUxEX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8NSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIHByZS05NjUgKi8KKyNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCisjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorCisjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX1NISUZUCTcKKyNkZWZpbmUgICBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCisjZGVmaW5lICAgRFNQQVJCX0JTVEFSVF9TSElGVAkwCisvKgorICogVGhlIHR3byBwaXBlIGZyYW1lIGNvdW50ZXIgcmVnaXN0ZXJzIGFyZSBub3Qgc3luY2hyb25pemVkLCBzbworICogcmVhZGluZyBhIHN0YWJsZSB2YWx1ZSBpcyBzb21ld2hhdCB0cmlja3kuIFRoZSBmb2xsb3dpbmcgY29kZQorICogc2hvdWxkIHdvcms6CisgKgorICogIGRvIHsKKyAqICAgIGhpZ2gxID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVDsKKyAqICAgIGxvdzEgPSAgKChJTlJFRyhQSVBFQUZSQU1FUElYRUwpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKyAqICAgIGhpZ2gyID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisgKiAgfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworICogIGZyYW1lID0gKGhpZ2gxIDw8IDgpIHwgbG93MTsKKyAqLworI2RlZmluZSBQSVBFQUZSQU1FSElHSCAgICAgICAgICAweDcwMDQwCisjZGVmaW5lICAgUElQRV9GUkFNRV9ISUdIX01BU0sgICAgMHgwMDAwZmZmZgorI2RlZmluZSAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCAgIDAKKyNkZWZpbmUgUElQRUFGUkFNRVBJWEVMICAgICAgICAgMHg3MDA0NAorI2RlZmluZSAgIFBJUEVfRlJBTUVfTE9XX01BU0sgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgICBQSVBFX0ZSQU1FX0xPV19TSElGVCAgICAyNAorI2RlZmluZSAgIFBJUEVfUElYRUxfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKKyNkZWZpbmUgICBQSVBFX1BJWEVMX1NISUZUICAgICAgICAwCisKKy8qIEN1cnNvciBBICYgQiByZWdzICovCisjZGVmaW5lIENVUkFDTlRSCQkweDcwMDgwCisjZGVmaW5lICAgQ1VSU09SX01PREVfRElTQUJMRSAgIDB4MDAKKyNkZWZpbmUgICBDVVJTT1JfTU9ERV82NF8zMkJfQVggMHgwNworI2RlZmluZSAgIENVUlNPUl9NT0RFXzY0X0FSR0JfQVggKCgxIDw8IDUpIHwgQ1VSU09SX01PREVfNjRfMzJCX0FYKQorI2RlZmluZSAgIE1DVVJTT1JfR0FNTUFfRU5BQkxFICAoMSA8PCAyNikKKyNkZWZpbmUgQ1VSQUJBU0UJCTB4NzAwODQKKyNkZWZpbmUgQ1VSQVBPUwkJCTB4NzAwODgKKyNkZWZpbmUgICBDVVJTT1JfUE9TX01BU0sgICAgICAgMHgwMDdGRgorI2RlZmluZSAgIENVUlNPUl9QT1NfU0lHTiAgICAgICAweDgwMDAKKyNkZWZpbmUgICBDVVJTT1JfWF9TSElGVCAgICAgICAgMAorI2RlZmluZSAgIENVUlNPUl9ZX1NISUZUICAgICAgICAxNgorI2RlZmluZSBDVVJCQ05UUgkJMHg3MDBjMAorI2RlZmluZSBDVVJCQkFTRQkJMHg3MDBjNAorI2RlZmluZSBDVVJCUE9TCQkJMHg3MDBjOAorCisvKiBEaXNwbGF5IEEgY29udHJvbCAqLworI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9ESVNBQkxFCQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9HQU1NQV9FTkFCTEUJCSgxPDwzMCkKKyNkZWZpbmUgICBESVNQUExBTkVfR0FNTUFfRElTQUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FXzhCUFAJCQkoMHgyPDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTZCUFAJCQkoMHg1PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8zMkJQUAkJCSgweDc8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkoMTw8MjUpCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9FTkFCTEUJCSgxPDwyMikKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQorI2RlZmluZSAgIERJU1BQTEFORV9OT19MSU5FX0RPVUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfRklSU1QJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfU0VDT05ECSgxPDwxOCkKKyNkZWZpbmUgRFNQQUFERFIJCTB4NzAxODQKKyNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAorI2RlZmluZSBEU1BBUE9TCQkJMHg3MDE4QyAvKiByZXNlcnZlZCAqLworI2RlZmluZSBEU1BBU0laRQkJMHg3MDE5MAorI2RlZmluZSBEU1BBU1VSRgkJMHg3MDE5QyAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQgLyogOTY1KyBvbmx5ICovCisKKy8qIFZCSU9TIGZsYWdzICovCisjZGVmaW5lIFNXRjAwCQkJMHg3MTQxMAorI2RlZmluZSBTV0YwMQkJCTB4NzE0MTQKKyNkZWZpbmUgU1dGMDIJCQkweDcxNDE4CisjZGVmaW5lIFNXRjAzCQkJMHg3MTQxYworI2RlZmluZSBTV0YwNAkJCTB4NzE0MjAKKyNkZWZpbmUgU1dGMDUJCQkweDcxNDI0CisjZGVmaW5lIFNXRjA2CQkJMHg3MTQyOAorI2RlZmluZSBTV0YxMAkJCTB4NzA0MTAKKyNkZWZpbmUgU1dGMTEJCQkweDcwNDE0CisjZGVmaW5lIFNXRjE0CQkJMHg3MTQyMAorI2RlZmluZSBTV0YzMAkJCTB4NzI0MTQKKyNkZWZpbmUgU1dGMzEJCQkweDcyNDE4CisjZGVmaW5lIFNXRjMyCQkJMHg3MjQxYworCisvKiBQaXBlIEIgKi8KKyNkZWZpbmUgUElQRUJEU0wJCTB4NzEwMDAKKyNkZWZpbmUgUElQRUJDT05GCQkweDcxMDA4CisjZGVmaW5lIFBJUEVCU1RBVAkJMHg3MTAyNAorI2RlZmluZSBQSVBFQkZSQU1FSElHSAkJMHg3MTA0MAorI2RlZmluZSBQSVBFQkZSQU1FUElYRUwJCTB4NzEwNDQKKworLyogRGlzcGxheSBCIGNvbnRyb2wgKi8KKyNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKKyNkZWZpbmUgICBESVNQUExBTkVfQUxQSEFfVFJBTlNfRU5BQkxFCQkoMTw8MTUpCisjZGVmaW5lICAgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkoMSkKKyNkZWZpbmUgRFNQQkFERFIJCTB4NzExODQKKyNkZWZpbmUgRFNQQlNUUklERQkJMHg3MTE4OAorI2RlZmluZSBEU1BCUE9TCQkJMHg3MTE4QworI2RlZmluZSBEU1BCU0laRQkJMHg3MTE5MAorI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QworI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAorCisvKiBWQklPUyByZWdzICovCisjZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCisjIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCisjIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKKyMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCisKKyNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICoKKyAqIENvcHlyaWdodCAyMDA4IChjKSBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChwaXBlID09IFBJUEVfQSkKKwkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9BKSAmIERQTExfVkNPX0VOQUJMRSk7CisJZWxzZQorCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0IpICYgRFBMTF9WQ09fRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9zYXZlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCWFycmF5W2ldID0gSTkxNV9SRUFEKHJlZyArIChpIDw8IDIpKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCUk5MTVfV1JJVEUocmVnICsgKGkgPDwgMiksIGFycmF5W2ldKTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9pbmRleGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoZGF0YV9wb3J0KTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9hcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgc3QwMSwgdTggcmVnLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoVkdBX0FSX0RBVEFfUkVBRCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTE2IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJSTkxNV9XUklURTgoVkdBX0FSX0RBVEFfV1JJVEUsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfaW5kZXhlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgaW5kZXhfcG9ydCwgdTE2IGRhdGFfcG9ydCwgdTggcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJSTkxNV9XUklURTgoZGF0YV9wb3J0LCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NhdmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBWR0EgY29sb3IgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKwlkZXZfcHJpdi0+c2F2ZURBQ01BU0sgPSBJOTE1X1JFQUQ4KFZHQV9EQUNNQVNLKTsKKwkvKiBEQUNDUlggYXV0b21hdGljYWxseSBpbmNyZW1lbnRzIGR1cmluZyByZWFkICovCisJSTkxNV9XUklURTgoVkdBX0RBQ1JYLCAwKTsKKwkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBJOTE1X1JFQUQ4KFZHQV9EQUNEQVRBKTsKKworCS8qIE1TUiBiaXRzICovCisJZGV2X3ByaXYtPnNhdmVNU1IgPSBJOTE1X1JFQUQ4KFZHQV9NU1JfUkVBRCk7CisJaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7CisJCXN0MDEgPSBWR0FfU1QwMV9DR0E7CisJfSBlbHNlIHsKKwkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOworCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOworCQlzdDAxID0gVkdBX1NUMDFfTURBOworCX0KKworCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwKKwkJCSAgIGk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKKwkJCSAgICh+MHg4MCkpOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIGkpOworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCB0dXJuIG9mZiBDUiBncm91cCAwIHdyaXRlcyAqLworCWRldl9wcml2LT5zYXZlQ1JbMHgxMV0gJj0gfjB4ODA7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOworCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBJOTE1X1JFQUQ4KFZHQV9BUl9JTkRFWCk7CisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWRldl9wcml2LT5zYXZlQVJbaV0gPSBpOTE1X3JlYWRfYXIoZGV2LCBzdDAxLCBpLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCUk5MTVfV1JJVEU4KFZHQV9BUl9JTkRFWCwgZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVHUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGkpOworCisJZGV2X3ByaXYtPnNhdmVHUlsweDEwXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDExXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxOCk7CisKKwkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVTUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGkpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBNU1IgYml0cyAqLworCUk5MTVfV1JJVEU4KFZHQV9NU1JfV1JJVEUsIGRldl9wcml2LT5zYXZlTVNSKTsKKwlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKKwkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKKwl9IGVsc2UgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7CisJCXN0MDEgPSBWR0FfU1QwMV9NREE7CisJfQorCisJLyogU2VxdWVuY2VyIHJlZ2lzdGVycywgZG9uJ3Qgd3JpdGUgU1IwNyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGksCisJCQkJICAgZGV2X3ByaXYtPnNhdmVTUltpXSk7CisKKwkvKiBDUlQgY29udHJvbGxlciByZWdzICovCisJLyogRW5hYmxlIENSIGdyb3VwIDAgd3JpdGVzICovCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgaSwgZGV2X3ByaXYtPnNhdmVDUltpXSk7CisKKwkvKiBHcmFwaGljcyBjb250cm9sbGVyIHJlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpLAorCQkJCSAgIGRldl9wcml2LT5zYXZlR1JbaV0pOworCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKKwkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTEsCisJCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdKTsKKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4LAorCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDE4XSk7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWk5MTVfd3JpdGVfYXIoZGV2LCBzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBkZXZfcHJpdi0+c2F2ZUFSX0lOREVYIHwgMHgyMCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLworCUk5MTVfV1JJVEU4KFZHQV9EQUNNQVNLLCBkZXZfcHJpdi0+c2F2ZURBQ01BU0spOworCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KKwlJOTE1X1dSSVRFOChWR0FfREFDV1gsIDApOworCS8qIFJlYWQgMyBieXRlcyBvZiBjb2xvciBkYXRhIGZyb20gZWFjaCBpbmRleCAqLworCWZvciAoaSA9IDA7IGkgPCAyNTYgKiAzOyBpKyspCisJCUk5MTVfV1JJVEU4KFZHQV9EQUNEQVRBLCBkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0pOworCit9CisKK2ludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsICZkZXZfcHJpdi0+c2F2ZUxCQik7CisKKwkvKiBEaXNwbGF5IGFyYml0cmF0aW9uIGNvbnRyb2wgKi8KKwlkZXZfcHJpdi0+c2F2ZURTUEFSQiA9IEk5MTVfUkVBRChEU1BBUkIpOworCisJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLworCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7CisJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOworCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKKwlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOworCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQSA9IEk5MTVfUkVBRChIU1lOQ19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKKwlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7CisJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWRldl9wcml2LT5zYXZlRFNQQUNOVFIgPSBJOTE1X1JFQUQoRFNQQUNOVFIpOworCWRldl9wcml2LT5zYXZlRFNQQVNUUklERSA9IEk5MTVfUkVBRChEU1BBU1RSSURFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFTSVpFID0gSTkxNV9SRUFEKERTUEFTSVpFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFQT1MgPSBJOTE1X1JFQUQoRFNQQVBPUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BBQUREUiA9IEk5MTVfUkVBRChEU1BBQUREUik7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IEk5MTVfUkVBRChEU1BBU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQVRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNUQVQgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKworCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KKwlkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORiA9IEk5MTVfUkVBRChQSVBFQkNPTkYpOworCWRldl9wcml2LT5zYXZlUElQRUJTUkMgPSBJOTE1X1JFQUQoUElQRUJTUkMpOworCWRldl9wcml2LT5zYXZlRlBCMCA9IEk5MTVfUkVBRChGUEIwKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQgPSBJOTE1X1JFQUQoRFBMTF9CX01EKTsKKwlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CID0gSTkxNV9SRUFEKEhUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZUhCTEFOS19CID0gSTkxNV9SRUFEKEhCTEFOS19CKTsKKwlkZXZfcHJpdi0+c2F2ZUhTWU5DX0IgPSBJOTE1X1JFQUQoSFNZTkNfQik7CisJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQiA9IEk5MTVfUkVBRChWVE9UQUxfQik7CisJZGV2X3ByaXYtPnNhdmVWQkxBTktfQiA9IEk5MTVfUkVBRChWQkxBTktfQik7CisJZGV2X3ByaXYtPnNhdmVWU1lOQ19CID0gSTkxNV9SRUFEKFZTWU5DX0IpOworCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCU0laRSA9IEk5MTVfUkVBRChEU1BCU0laRSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCUE9TID0gSTkxNV9SRUFEKERTUEJQT1MpOworCWRldl9wcml2LT5zYXZlRFNQQkFERFIgPSBJOTE1X1JFQUQoRFNQQkFERFIpOworCWlmIChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKworCS8qIENSVCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUFBfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVMVkRTID0gSTkxNV9SRUFEKExWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCWRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MID0gSTkxNV9SRUFEKFBGSVRfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQUF9PTl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT05fREVMQVlTKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBQX0RJVklTT1IpOworCisJLyogRklYTUU6IHNhdmUgVFYgJiBTRFZPIHN0YXRlICovCisKKwkvKiBGQkMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0xMX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MMik7CisJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUlJUiA9IEk5MTVfUkVBRChJSVIpOworCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKElFUik7CisJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKworCS8qIFZHQSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlVkdBMCA9IEk5MTVfUkVBRChWR0EwKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQTEgPSBJOTE1X1JFQUQoVkdBMSk7CisJZGV2X3ByaXYtPnNhdmVWR0FfUEQgPSBJOTE1X1JFQUQoVkdBX1BEKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlRF9TVEFURSA9IEk5MTVfUkVBRChEX1NUQVRFKTsKKwlkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyA9IEk5MTVfUkVBRChDR18yRF9ESVMpOworCisJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CisKKwkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOworCisJLyogU2NyYXRjaCBzcGFjZSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwMCArIChpIDw8IDIpKTsKKwkJZGV2X3ByaXYtPnNhdmVTV0YxW2ldID0gSTkxNV9SRUFEKFNXRjEwICsgKGkgPDwgMikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZVNXRjJbaV0gPSBJOTE1X1JFQUQoU1dGMzAgKyAoaSA8PCAyKSk7CisKKwlpOTE1X3NhdmVfdmdhKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsIGRldl9wcml2LT5zYXZlTEJCKTsKKworCUk5MTVfV1JJVEUoRFNQQVJCLCBkZXZfcHJpdi0+c2F2ZURTUEFSQik7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJLyogUHJpbWUgdGhlIGNsb2NrICovCisJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKKwkJRFJNX1VERUxBWSgxNTApOworCX0KKwlJOTE1X1dSSVRFKEZQQTAsIGRldl9wcml2LT5zYXZlRlBBMCk7CisJSTkxNV9XUklURShGUEExLCBkZXZfcHJpdi0+c2F2ZUZQQTEpOworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSk7CisJRFJNX1VERUxBWSgxNTApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIFJlc3RvcmUgbW9kZSAqLworCUk5MTVfV1JJVEUoSFRPVEFMX0EsIGRldl9wcml2LT5zYXZlSFRPVEFMX0EpOworCUk5MTVfV1JJVEUoSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlSEJMQU5LX0EpOworCUk5MTVfV1JJVEUoSFNZTkNfQSwgZGV2X3ByaXYtPnNhdmVIU1lOQ19BKTsKKwlJOTE1X1dSSVRFKFZUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BKTsKKwlJOTE1X1dSSVRFKFZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19BKTsKKwlJOTE1X1dSSVRFKFZTWU5DX0EsIGRldl9wcml2LT5zYXZlVlNZTkNfQSk7CisJSTkxNV9XUklURShCQ0xSUEFUX0EsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9BKTsKKworCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLworCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOworCUk5MTVfV1JJVEUoRFNQQVBPUywgZGV2X3ByaXYtPnNhdmVEU1BBUE9TKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDKTsKKwlJOTE1X1dSSVRFKERTUEFBRERSLCBkZXZfcHJpdi0+c2F2ZURTUEFBRERSKTsKKwlJOTE1X1dSSVRFKERTUEFTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQVNUUklERSk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BBU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BBU1VSRik7CisJCUk5MTVfV1JJVEUoRFNQQVRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYpOworCX0KKworCUk5MTVfV1JJVEUoUElQRUFDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVBQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCUk5MTVfV1JJVEUoRFNQQUNOVFIsIGRldl9wcml2LT5zYXZlRFNQQUNOVFIpOworCUk5MTVfV1JJVEUoRFNQQUFERFIsIEk5MTVfUkVBRChEU1BBQUREUikpOworCisJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLworCWlmIChkZXZfcHJpdi0+c2F2ZURQTExfQiAmIERQTExfVkNPX0VOQUJMRSkgeworCQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IgJgorCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CisJCURSTV9VREVMQVkoMTUwKTsKKwl9CisJSTkxNV9XUklURShGUEIwLCBkZXZfcHJpdi0+c2F2ZUZQQjApOworCUk5MTVfV1JJVEUoRlBCMSwgZGV2X3ByaXYtPnNhdmVGUEIxKTsKKwkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KKwlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCURSTV9VREVMQVkoMTUwKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKKwlEUk1fVURFTEFZKDE1MCk7CisKKwkvKiBSZXN0b3JlIG1vZGUgKi8KKwlJOTE1X1dSSVRFKEhUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CKTsKKwlJOTE1X1dSSVRFKEhCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZUhCTEFOS19CKTsKKwlJOTE1X1dSSVRFKEhTWU5DX0IsIGRldl9wcml2LT5zYXZlSFNZTkNfQik7CisJSTkxNV9XUklURShWVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQik7CisJSTkxNV9XUklURShWQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQik7CisJSTkxNV9XUklURShWU1lOQ19CLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0IpOworCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwkvKiBSZXN0b3JlIHBsYW5lIGluZm8gKi8KKwlJOTE1X1dSSVRFKERTUEJTSVpFLCBkZXZfcHJpdi0+c2F2ZURTUEJTSVpFKTsKKwlJOTE1X1dSSVRFKERTUEJQT1MsIGRldl9wcml2LT5zYXZlRFNQQlBPUyk7CisJSTkxNV9XUklURShQSVBFQlNSQywgZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyk7CisJSTkxNV9XUklURShEU1BCQUREUiwgZGV2X3ByaXYtPnNhdmVEU1BCQUREUik7CisJSTkxNV9XUklURShEU1BCU1RSSURFLCBkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUpOworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoRFNQQlNVUkYsIGRldl9wcml2LT5zYXZlRFNQQlNVUkYpOworCQlJOTE1X1dSSVRFKERTUEJUSUxFT0ZGLCBkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBJUEVCQ09ORiwgZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYpOworCisJaTkxNV9yZXN0b3JlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOworCS8qIEVuYWJsZSB0aGUgcGxhbmUgKi8KKwlJOTE1X1dSSVRFKERTUEJDTlRSLCBkZXZfcHJpdi0+c2F2ZURTUEJDTlRSKTsKKwlJOTE1X1dSSVRFKERTUEJBRERSLCBJOTE1X1JFQUQoRFNQQkFERFIpKTsKKworCS8qIENSVCBzdGF0ZSAqLworCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJSTkxNV9XUklURShMVkRTLCBkZXZfcHJpdi0+c2F2ZUxWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CisKKwlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOworCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOworCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKKwlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisKKwkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KKworCS8qIEZCQyBpbmZvICovCisJSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCisJLyogVkdBIHN0YXRlICovCisJSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJSTkxNV9XUklURShWR0EwLCBkZXZfcHJpdi0+c2F2ZVZHQTApOworCUk5MTVfV1JJVEUoVkdBMSwgZGV2X3ByaXYtPnNhdmVWR0ExKTsKKwlJOTE1X1dSSVRFKFZHQV9QRCwgZGV2X3ByaXYtPnNhdmVWR0FfUEQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7CisJSTkxNV9XUklURSAoQ0dfMkRfRElTLCBkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOworCisJLyogTWVtb3J5IGFyYml0cmF0aW9uIHN0YXRlICovCisJSTkxNV9XUklURSAoTUlfQVJCX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSB8IDB4ZmZmZjAwMDApOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJSTkxNV9XUklURShTV0YwMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjBbaV0pOworCQlJOTE1X1dSSVRFKFNXRjEwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMVtpKzddKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJSTkxNV9XUklURShTV0YzMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjJbaV0pOworCisJaTkxNV9yZXN0b3JlX3ZnYShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggNTU3MjkzOS4uOTdlZTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTQ1LDE1ICs0NSwxNiBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9tZ2FfYnVmX3ByaXZfdCksCiAJLmxvYWQgPSBtZ2FfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IG1nYV9kcml2ZXJfdW5sb2FkLAogCS5sYXN0Y2xvc2UgPSBtZ2FfZHJpdmVyX2xhc3RjbG9zZSwKIAkuZG1hX3F1aWVzY2VudCA9IG1nYV9kcml2ZXJfZG1hX3F1aWVzY2VudCwKIAkuZGV2aWNlX2lzX2FncCA9IG1nYV9kcml2ZXJfZGV2aWNlX2lzX2FncCwKLQkudmJsYW5rX3dhaXQgPSBtZ2FfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBtZ2FfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gbWdhX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbWdhX2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNjQsMjAgKzY1LDIwIEBACiAJLmlvY3RscyA9IG1nYV9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IG1nYV9kbWFfYnVmZmVycywKIAkuZm9wcyA9IHsKLQkJIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgLm9wZW4gPSBkcm1fb3BlbiwKLQkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCi0JCSAubW1hcCA9IGRybV9tbWFwLAotCQkgLnBvbGwgPSBkcm1fcG9sbCwKLQkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9wZW4gPSBkcm1fb3BlbiwKKwkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkubW1hcCA9IGRybV9tbWFwLAorCQkucG9sbCA9IGRybV9wb2xsLAorCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCSAuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IG1nYV9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkJIH0sCisJfSwKIAkucGNpX2RyaXZlciA9IHsKLQkJIC5uYW1lID0gRFJJVkVSX05BTUUsCi0JCSAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKaW5kZXggZjZlYmQyNC4uODgyNTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKQEAgLTEyMCw2ICsxMjAsNyBAQAogCXUzMiBjbGVhcl9jbWQ7CiAJdTMyIG1hY2Nlc3M7CiAKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHZibGFua3MgcmVjZWl2ZWQuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7CiAJYXRvbWljX3QgbGFzdF9mZW5jZV9yZXRpcmVkOwogCXUzMiBuZXh0X2ZlbmNlX3RvX3Bvc3Q7CkBAIC0xODEsMTEgKzE4MiwxNCBAQAogZXh0ZXJuIGludCBtZ2Ffd2FycF9pbml0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogCiAJCQkJLyogbWdhX2lycS5jICovCitleHRlcm4gaW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2ZlbmNlX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgbWdhX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwppbmRleCA5MzAyY2I4Li5iYWI0MmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIG1nYV9pcnEuYyAtLSBJUlEgaGFuZGxpbmcgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KLSAqCisgKi8KKy8qCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVuZ3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUKQEAgLTM1LDYgKzM2LDE4IEBACiAjaW5jbHVkZSAibWdhX2RybS5oIgogI2luY2x1ZGUgIm1nYV9kcnYuaCIKIAordTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KKwkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoY3J0YyAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7Cit9CisKKwogaXJxcmV0dXJuX3QgbWdhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CkBAIC00Nyw5ICs2MCw4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBNR0FfVkxJTkVQRU4pIHsKIAkJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIE1HQV9WTElORUlDTFIpOwotCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtNTgsNiArNzAsNyBAQAogCQljb25zdCB1MzIgcHJpbV9zdGFydCA9IE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUyk7CiAJCWNvbnN0IHUzMiBwcmltX2VuZCA9IE1HQV9SRUFEKE1HQV9QUklNRU5EKTsKIAorCiAJCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0FfU09GVFJBUElDTFIpOwogCiAJCS8qIEluIGFkZGl0aW9uIHRvIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQtcGVuZGluZyBiaXQsIHdlCkBAIC03MiwyOCArODUsMzkgQEAKIAkJaGFuZGxlZCA9IDE7CiAJfQogCi0JaWYgKGhhbmRsZWQpIHsKKwlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLWludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCSAgY3J0Yyk7CisJCXJldHVybiAwOworCX0KKworCU1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZGlzYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkgIGNydGMpOworCX0KKworCS8qIERvICpOT1QqIGRpc2FibGUgdGhlIHZlcnRpY2FsIHJlZnJlc2ggaW50ZXJydXB0LiAgTUdBIGRvZXNuJ3QgaGF2ZQorCSAqIGEgbmljZSBoYXJkd2FyZSBjb3VudGVyIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgcmVmcmVzaGVzIHdoZW4KKwkgKiB0aGUgaW50ZXJydXB0IGlzIGRpc2FibGVkLCBhbmQgdGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgdGhlIHJlZnJlc2gKKwkgKiByYXRlIHRvIGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZS4KIAkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OworCS8qIE1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsgKi8KIH0KIAogaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKQEAgLTEyNSwxNCArMTQ5LDIyIEBACiAJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIH4wKTsKIH0KIAotdm9pZCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOwogCi0JLyogVHVybiBvbiB2ZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHQgYW5kIHNvZnQgdHJhcCBpbnRlcnJ1cHQuICovCi0JTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOworCS8qIFR1cm4gb24gc29mdCB0cmFwIGludGVycnVwdC4gIFZlcnRpY2FsIGJsYW5rIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKwkgKiBpbiBtZ2FfZW5hYmxlX3ZibGFuay4KKwkgKi8KKwlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1NPRlRSQVBFTik7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKaW5kZXggZDNmOGFhZC4uYjcxMGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCiAJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKIAljYXNlIE1HQV9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBNR0FfUEFSQU1fQ0FSRF9UWVBFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5jaGlwc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKaW5kZXggNjEwOGU3NS4uMzI2NWQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCkBAIC00MywxMiArNDMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX1BDSV9ETUEgfCBEUklWRVJfU0cgfAotCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8Ci0JICAgIERSSVZFUl9JUlFfVkJMLAorCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCwKIAkuZGV2X3ByaXZfc2l6ZSA9IHNpemVvZihkcm1fcjEyOF9idWZfcHJpdl90KSwKIAkucHJlY2xvc2UgPSByMTI4X2RyaXZlcl9wcmVjbG9zZSwKIAkubGFzdGNsb3NlID0gcjEyOF9kcml2ZXJfbGFzdGNsb3NlLAotCS52Ymxhbmtfd2FpdCA9IHIxMjhfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByMTI4X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHIxMjhfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSByMTI4X2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNTksMjEgKzYwLDIwIEBACiAJLmlvY3RscyA9IHIxMjhfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSByMTI4X2NjZV9idWZmZXJzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSByMTI4X2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJfSwKLQogCS5wY2lfZHJpdmVyID0gewotCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApAQCAtODcsNiArODcsNyBAQAogc3RhdGljIGludCBfX2luaXQgcjEyOF9pbml0KHZvaWQpCiB7CiAJZHJpdmVyLm51bV9pb2N0bHMgPSByMTI4X21heF9pb2N0bDsKKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKaW5kZXggMDExMTA1ZS4uNTg5OGIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqICAgIEtldmluIEUuIE1hcnRpbiA8bWFydGluQHZhbGludXguY29tPgogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxkYWVuemVybUBzdHVkZW50LmV0aHouY2g+CiAgKi8KIAogI2lmbmRlZiBfX1IxMjhfRFJWX0hfXwpAQCAtOTcsNiArOTcsOCBAQAogCXUzMiBjcnRjX29mZnNldDsKIAl1MzIgY3J0Y19vZmZzZXRfY250bDsKIAorCWF0b21pY190IHZibF9yZWNlaXZlZDsKKwogCXUzMiBjb2xvcl9mbXQ7CiAJdW5zaWduZWQgaW50IGZyb250X29mZnNldDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfcGl0Y2g7CkBAIC0xNDksMTEgKzE1MSwxMiBAQAogZXh0ZXJuIGludCByMTI4X2RvX2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIGV4dGVybiBpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiAKLWV4dGVybiBpbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotCitleHRlcm4gaW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByMTI4X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgcjEyOF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHIxMjhfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCmluZGV4IGM3NmZkY2EuLmQ3MzQ5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYwpAQCAtMzUsNiArMzUsMTYgQEAKICNpbmNsdWRlICJyMTI4X2RybS5oIgogI2luY2x1ZGUgInIxMjhfZHJ2LmgiCiAKK3UzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwljb25zdCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKK30KKwogaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKikgYXJnOwpAQCAtNDYsMzAgKzU2LDM4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBSMTI4X0NSVENfVkJMQU5LX0lOVCkgewogCQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9TVEFUVVMsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0FLKTsKLQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IHIxMjhfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCisJaWYgKGNydGMgIT0gMCkgeworCQlEUk1fRVJST1IoIiVzOiAgYmFkIGNydGMgJWRcbiIsIF9fZnVuY19fLCBjcnRjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiAwOworfQorCit2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJaWYgKGNydGMgIT0gMCkKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CisKKwkvKgorCSAqIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVyIGludGVycnVwdCBkaXNhYmxlIGJ5IHVzaW5nIHRoZSB2YmxhbmsKKwkgKiBjb3VudGVyIHJlZ2lzdGVyIChpZiBhdmFpbGFibGUpCisJICoKKwkgKiBSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLAorCSAqICAgICAgICAgICAgUjEyOF9SRUFEKFIxMjhfR0VOX0lOVF9DTlRMKSAmIH5SMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CiAJICovCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTgyLDEyICsxMDAsOSBAQAogCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwogfQogCi12b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yMTI4X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCi0JLyogVHVybiBvbiBWQkwgaW50ZXJydXB0ICovCi0JUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCmluZGV4IDUxYTlhZmMuLmY3YTViNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKQEAgLTE2MjksNyArMTYyOSw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgUjEyOF9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAyNDhhYjRhLi41OWEyMTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTcxLDcgKzcxLDggQEAKIAogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CiAJZWxzZQogCQlyZXR1cm4gUlM0ODBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CkBAIC04Miw3ICs4Myw4IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwotCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCXJldHVybiBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzY5MF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKQEAgLTk0LDcgKzk2LDggQEAKIHsKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKLQllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKQEAgLTEwNiw3ICsxMDksOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7Ci0JZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwpAQCAtMTIyLDE1ICsxMjYsMTcgQEAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KSB7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOwogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7Ci0JCVJBREVPTl9XUklURShSUzQ4MF9BR1BfQkFTRV8yLCAwKTsKKwkJUkFERU9OX1dSSVRFKFJTNDgwX0FHUF9CQVNFXzIsIGFncF9iYXNlX2hpKTsKIAl9IGVsc2UgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1IyMDApCkBAIC0zNDcsNiArMzUzLDcgQEAKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjM1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYzNTApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzgwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQwMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0ODApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIzMDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNTYsNiArMzYzLDcgQEAKIAkJCQkgICAgIFIzMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKIAkJfQogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMykgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY0MTApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFI0MDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNjQsOCArMzcyLDkgQEAKIAkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAogCQkJCSAgICAgUjQyMF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwIE1pY3JvY29kZVxuIik7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwL1JTNzQwIE1pY3JvY29kZVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMV0pOwpAQCAtNjI2LDggKzYzNSw2IEBACiAJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKICNlbmRpZgogCi0JLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KLQlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKIAogCS8qIEluaXRpYWxpemUgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgcG9pbnRlci4gIFRoaXMgd2lsbCBjYXVzZQogCSAqIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHZhbHVlcyB0byBiZSB3cml0dGVuIG91dCB0byBtZW1vcnkKQEAgLTY0Niw4ICs2NTMsMTggQEAKIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAogCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCS8qIHJzNDAwLCByczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNDAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoISgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM4MCkgfHwKKwkJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I0MjMpKSkgeworCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCisJCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lID0gZGV2X3ByaXYtPnNjcmF0Y2hbMF0gPSAwOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9GUkFNRV9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsKQEAgLTY3NCw2ICs2OTEsOSBAQAogewogCXUzMiB0bXA7CiAKKwkvKiBTdGFydCB3aXRoIGFzc3VtaW5nIHRoYXQgd3JpdGViYWNrIGRvZXNuJ3Qgd29yayAqLworCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOworCiAJLyogV3JpdGViYWNrIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGV2ZXJ5d2hlcmUsIHRlc3QgaXQgaGVyZSBhbmQgcG9zc2libHkKIAkgKiBlbmFibGUgaXQgaWYgaXQgYXBwZWFycyB0byB3b3JrCiAJICovCkBAIC03MTksNyArNzM5LDggQEAKIAkJCSAgZGV2X3ByaXYtPmdhcnRfc2l6ZSk7CiAKIAkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzQ4MF9NQ19NSVNDX0NOVEwpOwotCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQkJSUdQX1dSSVRFX01DSU5EKFJTNDgwX01DX01JU0NfQ05UTCwgKFJTNDgwX0dBUlRfSU5ERVhfUkVHX0VOIHwKIAkJCQkJCQkgICAgIFJTNjkwX0JMT0NLX0dGWF9EM19FTikpOwogCQllbHNlCkBAIC04MTIsNiArODMzLDcgQEAKIAl1MzIgdG1wOwogCiAJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkgfHwKIAkgICAgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19JR1BHQVJUKSkgewogCQlyYWRlb25fc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKIAkJcmV0dXJuOwpAQCAtMTI4Niw3ICsxMzA4LDcgQEAKIAlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKIAogCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX1NXX0lOVF9FTkFCTEUsIDEpOwogCiAJRFJNX0RFQlVHKCJyYWRlb25fZG9fcmVzdW1lX2NwKCkgY29tcGxldGVcbiIpOwogCkBAIC0xNzA4LDYgKzE3MzAsNyBAQAogCWNhc2UgQ0hJUF9SMzAwOgogCWNhc2UgQ0hJUF9SMzUwOgogCWNhc2UgQ0hJUF9SNDIwOgorCWNhc2UgQ0hJUF9SNDIzOgogCWNhc2UgQ0hJUF9SVjQxMDoKIAljYXNlIENISVBfUlY1MTU6CiAJY2FzZSBDSElQX1I1MjA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDYzN2JkN2YuLjcxYWY3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC01Miw2ICs1MiwyOCBAQAogCQkgICAgICAgICJyMzAwIikpOwogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogUmVzdG9yZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXJhZGVvbl9QQ0lfSURTCiB9OwpAQCAtNTksOCArODEsNyBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwgfCBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yYWRlb25fYnVmX3ByaXZfdCksCiAJLmxvYWQgPSByYWRlb25fZHJpdmVyX2xvYWQsCiAJLmZpcnN0b3BlbiA9IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuLApAQCAtNjksOCArOTAsMTEgQEAKIAkucG9zdGNsb3NlID0gcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2UsCiAJLmxhc3RjbG9zZSA9IHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlLAogCS51bmxvYWQgPSByYWRlb25fZHJpdmVyX3VubG9hZCwKLQkudmJsYW5rX3dhaXQgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0LAotCS52Ymxhbmtfd2FpdDIgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MiwKKwkuc3VzcGVuZCA9IHJhZGVvbl9zdXNwZW5kLAorCS5yZXN1bWUgPSByYWRlb25fcmVzdW1lLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAogCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggMDk5MzgxNi4uNGRiYjgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTEyMiw5ICsxMjIsMTIgQEAKIAlDSElQX1JWMzUwLAogCUNISVBfUlYzODAsCiAJQ0hJUF9SNDIwLAorCUNISVBfUjQyMywKIAlDSElQX1JWNDEwLAorCUNISVBfUlM0MDAsCiAJQ0hJUF9SUzQ4MCwKIAlDSElQX1JTNjkwLAorCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKIAlDSElQX1I1MjAsCiAJQ0hJUF9SVjUzMCwKQEAgLTM3OCwxNyArMzgxLDE3IEBACiAJCQkgICAgICAgc3RydWN0IG1lbV9ibG9jayAqaGVhcCk7CiAKIAkJCQkvKiByYWRlb25faXJxLmMgKi8KK2V4dGVybiB2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCByYWRlb25faXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCByYWRlb25faXJxX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZG9fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdDIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByYWRlb25fZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByYWRlb25fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTM5NywxOSArNDAwLDIyIEBACiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqIGZpbHApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKiBmaWxwX3ByaXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBsb25nIHJhZGVvbl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiByMzAwX2NtZGJ1Zi5jICovCiBleHRlcm4gdm9pZCByMzAwX2luaXRfcmVnX2ZsYWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IHIzMDBfZG9fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorZXh0ZXJuIGludCByMzAwX2RvX2NwX2NtZGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICogY21kYnVmKTsKKwkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpOwogCiAvKiBGbGFncyBmb3Igc3RhdHMuYm94ZXMKICAqLwpAQCAtNDM0LDggKzQ0MCwzMSBAQAogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMV9FTkFCTEUJCSgxIDw8IDI5KQogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMl9FTkFCTEUJCSgxIDw8IDMwKQogCisvKgorICogUENJRSByYWRlb25zIChydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4KQorICogZG9uJ3QgaGF2ZSBhbiBleHBsaWNpdCBidXMgbWFzdGVyaW5nIGRpc2FibGUgYml0LiAgSXQncyBoYW5kbGVkCisgKiBieSB0aGUgUENJIEQtc3RhdGVzLiAgUE1JX0JNX0RJUyBkaXNhYmxlcyBELXN0YXRlIGJ1cyBtYXN0ZXIKKyAqIGhhbmRsaW5nLCBub3QgYnVzIG1hc3RlcmluZyBpdHNlbGYuCisgKi8KICNkZWZpbmUgUkFERU9OX0JVU19DTlRMCQkJMHgwMDMwCisvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCiAjCWRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMJCSgxIDw8IDYpCisvKiByczQwMCwgcnM2OTAvcnM3NDAgKi8KKyMJZGVmaW5lIFJTNDAwX0JVU19NQVNURVJfRElTCQkoMSA8PCAxNCkKKyMJZGVmaW5lIFJTNDAwX01TSV9SRUFSTQkJICAgICAgICAoMSA8PCAyMCkKKy8qIHNlZSBSUzQ4MF9NU0lfUkVBUk0gaW4gQUlDX0NOVEwgZm9yIHJzNDgwICovCisKKyNkZWZpbmUgUkFERU9OX0JVU19DTlRMMQkJMHgwMDM0CisjCWRlZmluZSBSQURFT05fUE1JX0JNX0RJUwkJKDEgPDwgMikKKyMJZGVmaW5lIFJBREVPTl9QTUlfSU5UX0RJUwkJKDEgPDwgMykKKworI2RlZmluZSBSVjM3MF9CVVNfQ05UTAkJCTB4MDA0YworIwlkZWZpbmUgUlYzNzBfUE1JX0JNX0RJUwkJICAgICAgICAoMSA8PCA1KQorIwlkZWZpbmUgUlYzNzBfUE1JX0lOVF9ESVMJCSgxIDw8IDYpCisKKyNkZWZpbmUgUkFERU9OX01TSV9SRUFSTV9FTgkJMHgwMTYwCisvKiBydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4ICovCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JCSgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0NMT0NLX0NOVExfREFUQQkJMHgwMDBjCiAjCWRlZmluZSBSQURFT05fUExMX1dSX0VOCQkJKDEgPDwgNykKQEAgLTYyMyw2ICs2NTIsNyBAQAogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9URVNUCQkoMSA8PCAyNSkKICMJZGVmaW5lIFJBREVPTl9TV19JTlRfVEVTVF9BQ0sJCSgxIDw8IDI1KQogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9GSVJFCQkoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI1MDBfRElTUExBWV9JTlRfU1RBVFVTICAgICAgICAgICgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0hPU1RfUEFUSF9DTlRMCQkweDAxMzAKICMJZGVmaW5lIFJBREVPTl9IRFBfU09GVF9SRVNFVAkJKDEgPDwgMjYpCkBAIC05MDcsNiArOTM3LDcgQEAKIAogI2RlZmluZSBSQURFT05fQUlDX0NOVEwJCQkweDAxZDAKICMJZGVmaW5lIFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTgkoMSA8PCAwKQorIwlkZWZpbmUgUlM0ODBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBSQURFT05fQUlDX1NUQVQJCQkweDAxZDQKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19MT19BRERSCQkweDAxZGMKQEAgLTExMTYsNiArMTE0Nyw5IEBACiAKICNkZWZpbmUgUjIwMF9WQVBfUFZTX0NOVExfMSAgICAgICAgICAgICAgIDB4MjJEMAogCisjZGVmaW5lIFJBREVPTl9DUlRDX0NSTlRfRlJBTUUgMHgwMjE0CisjZGVmaW5lIFJBREVPTl9DUlRDMl9DUk5UX0ZSQU1FIDB4MDMxNAorCiAjZGVmaW5lIFI1MDBfRDFDUlRDX1NUQVRVUyAweDYwOWMKICNkZWZpbmUgUjUwMF9EMkNSVENfU1RBVFVTIDB4Njg5YwogI2RlZmluZSBSNTAwX0NSVENfVl9CTEFOSyAoMTw8MCkKQEAgLTEyMDAsNyArMTIzNCw4IEBACiAKICNkZWZpbmUgSUdQX1dSSVRFX01DSU5EKGFkZHIsIHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgICAgICAgXAorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCVJTNDgwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKaW5kZXggZWU0MGQxOS4uNTA3OWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKQEAgLTI3LDcgKzI3LDcgQEAKICAqCiAgKiBBdXRob3JzOgogICogICAgS2VpdGggV2hpdHdlbGwgPGtlaXRoQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKQEAgLTM1LDEyICszNSwxMjggQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgogCi1zdGF0aWMgX19pbmxpbmVfXyB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCQkJICAgICAgdTMyIG1hc2spCit2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCiB7Ci0JdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpICYgbWFzazsKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHN0YXRlKQorCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgfD0gbWFzazsKKwllbHNlCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyAmPSB+bWFzazsKKworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOworfQorCitzdGF0aWMgdm9pZCByNTAwX3ZibF9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChzdGF0ZSkKKwkJZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnIHw9IG1hc2s7CisJZWxzZQorCQlkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcgJj0gfm1hc2s7CisKKwlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIGRldl9wcml2LT5yNTAwX2Rpc3BfaXJxX3JlZyk7Cit9CisKK2ludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDJNT0RFX0lOVF9NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmFkZW9uX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDFNT0RFX0lOVF9NQVNLLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMk1PREVfSU5UX01BU0ssIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgKnI1MDBfZGlzcF9pbnQpCit7CisJdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpOworCXUzMiBpcnFfbWFzayA9IFJBREVPTl9TV19JTlRfVEVTVDsKKworCSpyNTAwX2Rpc3BfaW50ID0gMDsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLworCisJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKKwkJCS8qIGlmIGEgZGlzcGxheSBpbnRlcnJ1cHQgKi8KKwkJCXUzMiBkaXNwX2lycTsKKworCQkJZGlzcF9pcnEgPSBSQURFT05fUkVBRChSNTAwX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisKKwkJCSpyNTAwX2Rpc3BfaW50ID0gZGlzcF9pcnE7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDFNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDJNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCX0KKwkJaXJxX21hc2sgfD0gUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVM7CisJfSBlbHNlCisJCWlycV9tYXNrIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUIHwgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOworCisJaXJxcyAmPQlpcnFfbWFzazsKKwogCWlmIChpcnFzKQogCQlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfU1RBVFVTLCBpcnFzKTsKKwogCXJldHVybiBpcnFzOwogfQogCkBAIC02OCw0NCArMTg0LDMzIEBACiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHN0YXQ7CisJdTMyIHI1MDBfZGlzcF9pbnQ7CiAKIAkvKiBPbmx5IGNvbnNpZGVyIHRoZSBiaXRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gLSBvdGhlcnMgY291bGQgYmUgdXNlZAogCSAqIG91dHNpZGUgdGhlIERSTQogCSAqLwotCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfAotCQkJCQkJICBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCB8Ci0JCQkJCQkgIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkpOworCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJnI1MDBfZGlzcF9pbnQpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJc3RhdCAmPSBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWc7CiAKIAkvKiBTVyBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdCAmIFJBREVPTl9TV19JTlRfVEVTVCkgeworCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKQogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKLQl9CiAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCi0JaWYgKHN0YXQgJiAoUkFERU9OX0NSVENfVkJMQU5LX1NUQVR8UkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSkgewotCQlpbnQgdmJsYW5rX2NydGMgPSBkZXZfcHJpdi0+dmJsYW5rX2NydGM7Ci0KLQkJaWYgKCh2YmxhbmtfY3J0YyAmCi0JCSAgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSA9PQotCQkgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSB7Ci0JCQlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKChzdGF0ICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAodmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkpIHx8Ci0JCQkgICAoKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAgKHZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSkKLQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOworCQlpZiAocjUwMF9kaXNwX2ludCAmIFI1MDBfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTE0NCw1NCArMjQ5LDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCQl1bnNpZ25lZCBpbnQgKnNlcXVlbmNlLCBpbnQgY3J0YykKK3UzMiByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9Ci0JICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOwotCWludCBhY2sgPSAwOwotCWF0b21pY190ICpjb3VudGVyOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY3J0YyA9PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkgewotCQljb3VudGVyID0gJmRldi0+dmJsX3JlY2VpdmVkOwotCQlhY2sgfD0gUkFERU9OX0NSVENfVkJMQU5LX1NUQVQ7Ci0JfSBlbHNlIGlmIChjcnRjID09IERSTV9SQURFT05fVkJMQU5LX0NSVEMyKSB7Ci0JCWNvdW50ZXIgPSAmZGV2LT52YmxfcmVjZWl2ZWQyOwotCQlhY2sgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOwotCX0gZWxzZQorCWlmIChjcnRjIDwgMCB8fCBjcnRjID4gMSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCBhY2spOwotCi0JZGV2X3ByaXYtPnN0YXRzLmJveGVzIHw9IFJBREVPTl9CT1hfV0FJVF9JRExFOwotCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KLQkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKGNvdW50ZXIpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKLXsKLQlyZXR1cm4gcmFkZW9uX2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSk7Ci19Ci0KLWludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsIERSTV9SQURFT05fVkJMQU5LX0NSVEMyKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJZWxzZQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDJDUlRDX0ZSQU1FX0NPVU5UKTsKKwl9IGVsc2UgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFJBREVPTl9DUlRDX0NSTlRfRlJBTUUpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUpOworCX0KIH0KIAogLyogTmVlZHMgdGhlIGxvY2sgYXMgaXQgdG91Y2hlcyB0aGUgcmluZy4KQEAgLTIzNCw0NiArMzE2LDQxIEBACiAJcmV0dXJuIHJhZGVvbl93YWl0X2lycShkZXYsIGlycXdhaXQtPmlycV9zZXEpOwogfQogCi12b2lkIHJhZGVvbl9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgPSBSQURFT05fU1dfSU5UX0VOQUJMRTsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEpCi0JCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyB8PSBSQURFT05fQ1JUQ19WQkxBTktfTUFTSzsKLQotCWlmIChkZXZfcHJpdi0+dmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikKLQkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnIHw9IFJBREVPTl9DUlRDMl9WQkxBTktfTUFTSzsKLQotCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwotCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDE7Ci19Ci0KIC8qIGRybV9kbWEuaCBob29rcwogKi8KIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZHVtbXk7CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiAKIAkvKiBDbGVhciBiaXRzIGlmIHRoZXkncmUgYWxyZWFkeSBoaWdoICovCi0JcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIChSQURFT05fU1dfSU5UX1RFU1RfQUNLIHwKLQkJCQkJICAgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQgfAotCQkJCQkgICBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpKTsKKwlyYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJmR1bW15KTsKIH0KIAotdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+c3dpX2VtaXR0ZWQsIDApOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPnN3aV9xdWV1ZSk7CiAKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXYtPm1heF92YmxhbmtfY291bnQgPSAweDAwMWZmZmZmOworCisJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0yODUsNiArMzYyLDggQEAKIAogCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDA7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiB9CkBAIC0yOTMsMTggKzM3Miw4IEBACiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBmbGFnOwotCXUzMiB2YWx1ZTsKIAotCWZsYWcgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9DTlRMKTsKLQl2YWx1ZSA9IDA7Ci0KLQlpZiAoZmxhZyAmIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMTsKLQotCWlmIChmbGFnICYgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMjsKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGRldl9wcml2LT52YmxhbmtfY3J0YzsKIH0KIAogaW50IHJhZGVvbl92YmxhbmtfY3J0Y19zZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50NjRfdCB2YWx1ZSkKQEAgLTMxNSw2ICszODQsNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGV2X3ByaXYtPnZibGFua19jcnRjID0gKHVuc2lnbmVkIGludCl2YWx1ZTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggMTFjMTQ2Yi4uNWQ3MTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0yOTk3LDcgKzI5OTcsNyBAQAogCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDIpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9CQVNFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKaW5kZXggYjM4Nzg3Ny4uYWYyMjExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIEFHUF9UWVBFIDEKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKIC8qIGZiIG1hbmFnZW1lbnQgdmlhIGZiIGRldmljZSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCAwCkBAIC01Nyw3ICs1Nyw3IEBACiAJaWYgKHJlcS5zaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCWVsc2UKLQkJcmV0dXJuICh2b2lkICopfnJlcS5vZmZzZXQ7CisJCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKX5yZXEub2Zmc2V0OwogfQogCiBzdGF0aWMgdm9pZCBzaXNfc21hbl9tbV9mcmVlKHZvaWQgKnByaXZhdGUsIHZvaWQgKnJlZikKQEAgLTc1LDEyICs3NSwxMiBAQAogCXJldHVybiB+KCh1bnNpZ25lZCBsb25nKXJlZik7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19GQl9TSVMgKi8KKyNlbHNlIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogI2RlZmluZSBTSVNfTU1fQUxJR05fU0hJRlQgNAogI2RlZmluZSBTSVNfTU1fQUxJR05fTUFTSyAoICgxIDw8IFNJU19NTV9BTElHTl9TSElGVCkgLSAxKQogCi0jZW5kaWYgLyogQ09ORklHX0ZCX1NJUyAqLworI2VuZGlmIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogc3RhdGljIGludCBzaXNfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTg5LDcgKzg5LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1NJU19NT0RVTEUpCiAJewogCQlzdHJ1Y3QgZHJtX3NtYW5fbW0gc21hbl9tbTsKIAkJc21hbl9tbS5wcml2YXRlID0gKHZvaWQgKikweEZGRkZGRkZGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCA4MGMwMWNkLi4wOTkzYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtNDAsMTEgKzQwLDEzIEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0lSUSB8Ci0JICAgIERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9JUlFfU0hBUkVELAogCS5sb2FkID0gdmlhX2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSB2aWFfZHJpdmVyX3VubG9hZCwKIAkuY29udGV4dF9kdG9yID0gdmlhX2ZpbmFsX2NvbnRleHQsCi0JLnZibGFua193YWl0ID0gdmlhX2RyaXZlcl92Ymxhbmtfd2FpdCwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gdmlhX2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHZpYV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHZpYV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU5LDE3ICs2MSwxNyBAQAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAogCS5pb2N0bHMgPSB2aWFfaW9jdGxzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCX0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCSAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCmluZGV4IDJkYWFlODEuLmNhZmNiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCkBAIC03NSw2ICs3NSw3IEBACiAJc3RydWN0IHRpbWV2YWwgbGFzdF92Ymxhbms7CiAJaW50IGxhc3RfdmJsYW5rX3ZhbGlkOwogCXVuc2lnbmVkIHVzZWNfcGVyX3ZibGFuazsKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7CiAJZHJtX3ZpYV9zdGF0ZV90IGhjX3N0YXRlOwogCWNoYXIgcGNpX2J1ZltWSUFfUENJX0JVRl9TSVpFXTsKIAljb25zdCB1aW50MzJfdCAqZmlyZV9vZmZzZXRzW1ZJQV9GSVJFX0JVRl9TSVpFXTsKQEAgLTEzMCwyMSArMTMxLDI0IEBACiBleHRlcm4gaW50IHZpYV9maW5hbF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgY29udGV4dCk7CiAKIGV4dGVybiBpbnQgdmlhX2RvX2NsZWFudXBfbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHZpYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCB2aWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIAogZXh0ZXJuIGludCB2aWFfZG1hX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKIGV4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCk7CitleHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCB2aWFfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gdm9pZCB2aWFfZG1hYmxpdF9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmdpbmUsIGludCBmcm9tX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCmluZGV4IGM2YmI5NzguLjY2NWQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIFZJQV9SRUdfSU5URVJSVVBUICAgICAgIDB4MjAwCiAKIC8qIFZJQV9SRUdfSU5URVJSVVBUICovCi0jZGVmaW5lIFZJQV9JUlFfR0xPQkFMICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBWSUFfSVJRX0dMT0JBTAkgICgxIDw8IDMxKQogI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19FTkFCTEUgICAoMSA8PCAxOSkKICNkZWZpbmUgVklBX0lSUV9WQkxBTktfUEVORElORyAgKDEgPDwgMykKICNkZWZpbmUgVklBX0lSUV9IUVYwX0VOQUJMRSAgICAgKDEgPDwgMTEpCkBAIC02OCwxNiArNjgsMTUgQEAKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV9wcm9fZ3JvdXBfYV9pcnFzW10gPSB7CiAJe1ZJQV9JUlFfSFFWMF9FTkFCTEUsIFZJQV9JUlFfSFFWMF9QRU5ESU5HLCAweDAwMDAwM0QwLCAweDAwMDA4MDEwLAotCSAweDAwMDAwMDAwfSwKKwkgMHgwMDAwMDAwMCB9LAogCXtWSUFfSVJRX0hRVjFfRU5BQkxFLCBWSUFfSVJRX0hRVjFfUEVORElORywgMHgwMDAwMTNEMCwgMHgwMDAwODAxMCwKLQkgMHgwMDAwMDAwMH0sCisJIDB4MDAwMDAwMDAgfSwKIAl7VklBX0lSUV9ETUEwX1REX0VOQUJMRSwgVklBX0lSUV9ETUEwX1REX1BFTkRJTkcsIFZJQV9QQ0lfRE1BX0NTUjAsCiAJIFZJQV9ETUFfQ1NSX1RBIHwgVklBX0RNQV9DU1JfVEQsIDB4MDAwMDAwMDh9LAogCXtWSUFfSVJRX0RNQTFfVERfRU5BQkxFLCBWSUFfSVJRX0RNQTFfVERfUEVORElORywgVklBX1BDSV9ETUFfQ1NSMSwKIAkgVklBX0RNQV9DU1JfVEEgfCBWSUFfRE1BX0NTUl9URCwgMHgwMDAwMDAwOH0sCiB9Owotc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0KLSAgICBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBpbnQgdmlhX251bV9wcm9fZ3JvdXBfYSA9IEFSUkFZX1NJWkUodmlhX3Byb19ncm91cF9hX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3Byb19ncm91cF9hW10gPSB7MCwgMSwgLTEsIDIsIC0xLCAzfTsKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV91bmljaHJvbWVfaXJxc1tdID0gewpAQCAtODYsMTQgKzg1LDI0IEBACiAJe1ZJQV9JUlFfRE1BMV9URF9FTkFCTEUsIFZJQV9JUlFfRE1BMV9URF9QRU5ESU5HLCBWSUFfUENJX0RNQV9DU1IxLAogCSBWSUFfRE1BX0NTUl9UQSB8IFZJQV9ETUFfQ1NSX1RELCAweDAwMDAwMDA4fQogfTsKLXN0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBzaXplb2YodmlhX3VuaWNocm9tZV9pcnFzKSAvIHNpemVvZihtYXNrYXJyYXlfdCk7CitzdGF0aWMgaW50IHZpYV9udW1fdW5pY2hyb21lID0gQVJSQVlfU0laRSh2aWFfdW5pY2hyb21lX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3VuaWNocm9tZVtdID0gey0xLCAtMSwgLTEsIDAsIC0xLCAxfTsKIAorCiBzdGF0aWMgdW5zaWduZWQgdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csIHN0cnVjdCB0aW1ldmFsICp0aGVuKQogewogCXJldHVybiAobm93LT50dl91c2VjID49IHRoZW4tPnR2X3VzZWMpID8KLQkgICAgbm93LT50dl91c2VjIC0gdGhlbi0+dHZfdXNlYyA6Ci0JICAgIDEwMDAwMDAgLSAodGhlbi0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYyk7CisJCW5vdy0+dHZfdXNlYyAtIHRoZW4tPnR2X3VzZWMgOgorCQkxMDAwMDAwIC0gKHRoZW4tPnR2X3VzZWMgLSBub3ctPnR2X3VzZWMpOworfQorCit1MzIgdmlhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKIH0KIAogaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCkBAIC0xMDgsMjMgKzExNywyMiBAQAogCiAJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOwogCWlmIChzdGF0dXMgJiBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HKSB7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJaWYgKCEoYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCkgJiAweDBGKSkgewogCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJfdmJsYW5rKTsKIAkJCWlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKIAkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0KLQkJCQkgICAgdGltZV9kaWZmKCZjdXJfdmJsYW5rLAotCQkJCQkgICAgICAmZGV2X3ByaXYtPmxhc3RfdmJsYW5rKSA+PiA0OworCQkJCQl0aW1lX2RpZmYoJmN1cl92YmxhbmssCisJCQkJCQkgICZkZXZfcHJpdi0+bGFzdF92YmxhbmspID4+IDQ7CiAJCQl9CiAJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmsgPSBjdXJfdmJsYW5rOwogCQkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rX3ZhbGlkID0gMTsKIAkJfQotCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKKwkJaWYgKCEoYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKIAkJCURSTV9ERUJVRygiVVMgcGVyIHZibGFuayBpczogJXVcbiIsCiAJCQkJICBkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rKTsKIAkJfQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtMTQ1LDYgKzE1Myw3IEBACiAJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCiAJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMpOwogCisKIAlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCWVsc2UKQEAgLTE2MywzMSArMTcyLDM0IEBACiAJfQogfQogCi1pbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKK2ludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2aWFkcnZfYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdik7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYgVklBX0lSUV9WQkxBTktfRU5BQkxFKTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCi0JICovCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSB8IDB4MzApOwogCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKSAtCi0JCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CisJcmV0dXJuIDA7Cit9CiAKLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCXJldHVybiByZXQ7Cit2b2lkIHZpYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSAmIH4weDMwKTsKKworCWlmIChjcnRjICE9IDApCisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzksNiArMjUxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qCiAgKiBkcm1fZG1hLmggaG9va3MKICAqLwpAQCAtMjkyLDIzICszMDUsMjUgQEAKIAl9CiB9CiAKLXZvaWQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdHVzOwogCi0JRFJNX0RFQlVHKCJcbiIpOwotCWlmIChkZXZfcHJpdikgewotCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7Ci0JCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKLQkJCSAgfCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKTsKKwlEUk1fREVCVUcoInZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsXG4iKTsKKwlpZiAoIWRldl9wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisJZHJtX3ZibGFua19pbml0KGRldiwgMSk7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKKwkJICB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spOwogCi0JCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKLQkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CisJLyogU29tZSBtYWdpYywgb2ggZm9yIHNvbWUgZGF0YSBzaGVldHMgISAqLworCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKKwlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKIAotCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0zMzksOSArMzU0LDYgQEAKIAlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOwogCWludCBmb3JjZV9zZXF1ZW5jZTsKIAotCWlmICghZGV2LT5pcnEpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGlycXdhaXQtPnJlcXVlc3QuaXJxID49IGRldl9wcml2LT5udW1faXJxcykgewogCQlEUk1fRVJST1IoIlRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLAogCQkJICBpcnF3YWl0LT5yZXF1ZXN0LmlycSk7CkBAIC0zNTIsNyArMzY0LDggQEAKIAogCXN3aXRjaCAoaXJxd2FpdC0+cmVxdWVzdC50eXBlICYgflZJQV9JUlFfRkxBR1NfTUFTSykgewogCWNhc2UgVklBX0lSUV9SRUxBVElWRToKLQkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKKwkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPQorCQkJYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCk7CiAJCWlycXdhaXQtPnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7CiAJY2FzZSBWSUFfSVJRX0FCU09MVVRFOgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCmluZGV4IGU2NDA5NDkuLmY2OTRjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwpAQCAtOTMsOCArOTMsNyBAQAogCS8qIExhc3QgY29udGV4dCwgcGVyZm9ybSBjbGVhbnVwICovCiAJaWYgKGRldi0+Y3R4X2NvdW50ID09IDEgJiYgZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlEUk1fREVCVUcoIkxhc3QgQ29udGV4dFxuIik7Ci0JCWlmIChkZXYtPmlycSkKLQkJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAJCXZpYV9jbGVhbnVwX2Z1dGV4KGRldl9wcml2KTsKIAkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggZGE2NDEwOC4uZjU5OTlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0xNywyNSArMTcsNiBAQAogCXRyaXN0YXRlICJHZW5lcmljIEhJRCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSU5QVVQKIAlkZWZhdWx0IHkKLSAgICAgICAgc2VsZWN0IEhJRF9BNFRFQ0ggaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfQVBQTEUgaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfQkVMS0lOIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX0JSSUdIVCBpZiAhRU1CRURERUQKLSAgICAgICAgc2VsZWN0IEhJRF9DSEVSUlkgaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfQ0hJQ09OWSBpZiAhRU1CRURERUQKLSAgICAgICAgc2VsZWN0IEhJRF9DWVBSRVNTIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX0RFTEwgaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfRVpLRVkgaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfR1lSQVRJT04gaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfTE9HSVRFQ0ggaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfTUlDUk9TT0ZUIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX01PTlRFUkVZIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX1BBTlRIRVJMT1JEIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX1BFVEFMWU5YIGlmICFFTUJFRERFRAotICAgICAgICBzZWxlY3QgSElEX1NBTVNVTkcgaWYgIUVNQkVEREVECi0gICAgICAgIHNlbGVjdCBISURfU09OWSBpZiAhRU1CRURERUQKLSAgICAgICAgc2VsZWN0IEhJRF9TVU5QTFVTIGlmICFFTUJFRERFRAotCiAJLS0taGVscC0tLQogCSAgQSBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpIGlzIGEgdHlwZSBvZiBjb21wdXRlciBkZXZpY2UgdGhhdAogCSAgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggYW5kIHRha2VzIGlucHV0IGZyb20gaHVtYW5zLiBUaGUgdGVybSAiSElEIgpAQCAtMTAyLDg5ICs4Myw4NiBAQAogCUlmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBISURfQTRURUNICi0JdHJpc3RhdGUgIkE0IHRlY2giCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIkE0IHRlY2giIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEE0IHRlY2ggWDUgYW5kIFdPUC0zNSAvIFRydXN0IDQ1MEwgbWljZS4KIAogY29uZmlnIEhJRF9BUFBMRQotCXRyaXN0YXRlICJBcHBsZSIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiQXBwbGUiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiAoVVNCX0hJRCB8fCBCVF9ISURQKQorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBzb21lIEFwcGxlIGRldmljZXMgd2hpY2ggbGVzcyBvciBtb3JlIGJyZWFrCiAJSElEIHNwZWNpZmljYXRpb24uCiAKLQlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBzcGVjaWFsIGtleXMgKEZuLCBOdW1sb2NrKSBvbgotCUFwcGxlIGlCb29rcywgUG93ZXJCb29rcywgTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgYWx1bWludW0gVVNCCi0Ja2V5Ym9hcmRzLgotCi0JSWYgdW5zdXJlLCBzYXkgTS4KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGtleWJvYXJkcyBvZglBcHBsZSBpQm9va3MsIFBvd2VyQm9va3MsCisJTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgQXBwbGUgQWx1bWludW0uCiAKIGNvbmZpZyBISURfQkVMS0lOCi0JdHJpc3RhdGUgIkJlbGtpbiIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiQmVsa2luIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBCZWxraW4gRmxpcCBLVk0gYW5kIFdpcmVsZXNzIGtleWJvYXJkLgogCiBjb25maWcgSElEX0JSSUdIVAotCXRyaXN0YXRlICJCcmlnaHQiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIkJyaWdodCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgQnJpZ2h0IEFCTlQtMiBrZXlib2FyZC4KIAogY29uZmlnIEhJRF9DSEVSUlkKLQl0cmlzdGF0ZSAiQ2hlcnJ5IgotCWRlZmF1bHQgbQorCXRyaXN0YXRlICJDaGVycnkiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIENoZXJyeSBDeW1vdGlvbi4KKwlTdXBwb3J0IGZvciBDaGVycnkgQ3ltb3Rpb24ga2V5Ym9hcmQuCiAKIGNvbmZpZyBISURfQ0hJQ09OWQotCXRyaXN0YXRlICJDaGljb255IgotCWRlZmF1bHQgbQorCXRyaXN0YXRlICJDaGljb255IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBDaGljb255IFRhY3RpY2FsIHBhZC4KIAogY29uZmlnIEhJRF9DWVBSRVNTCi0JdHJpc3RhdGUgIkN5cHJlc3MiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIkN5cHJlc3MiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIEN5cHJlc3MgbW91c2UgYW5kIGJhcmNvZGVzLgorCVN1cHBvcnQgZm9yIGN5cHJlc3MgbW91c2UgYW5kIGJhcmNvZGUgcmVhZGVycy4KIAogY29uZmlnIEhJRF9ERUxMCi0JdHJpc3RhdGUgIkRlbGwiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIkRlbGwiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIERlbGwgVzc2NTguCisJU3VwcG9ydCBmb3IgcXVpcmt5IERlbGwgSElEIGhhcmR3YXJlIHRoYXQgcmVxdWlyZQorCXNwZWNpYWwgTEVEIGhhbmRsaW5nIChXNzY1OCBhbmQgU0s4MTE1IG1vZGVscykKIAogY29uZmlnIEhJRF9FWktFWQotCXRyaXN0YXRlICJFemtleSIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiRXprZXkiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIEV6a2V5IG1vdXNlIGFuZCBiYXJjb2Rlcy4KKwlTdXBwb3J0IGZvciBFemtleSBCVEMgODE5MyBrZXlib2FyZC4KIAogY29uZmlnIEhJRF9HWVJBVElPTgotCXRyaXN0YXRlICJHeXJhdGlvbiIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiR3lyYXRpb24iIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIEd5cmF0aW9uIHJlbW90ZS4KKwlTdXBwb3J0IGZvciBHeXJhdGlvbiByZW1vdGUgY29udHJvbC4KIAogY29uZmlnIEhJRF9MT0dJVEVDSAotCXRyaXN0YXRlICJMb2dpdGVjaCIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiTG9naXRlY2giIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIHNvbWUgTG9naXRlY2ggZGV2aWNlcyB3aGljaCBicmVha3MgbGVzcyBvciBtb3JlCi0JSElEIHNwZWNpZmljYXRpb24uCisJU3VwcG9ydCBmb3IgTG9naXRlY2ggZGV2aWNlcyB0aGF0IGFyZSBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkLgogCiBjb25maWcgTE9HSVRFQ0hfRkYKIAlib29sICJMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayIKQEAgLTIxMSwyOCArMTg5LDI2IEBACiAJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgogCiBjb25maWcgSElEX01JQ1JPU09GVAotCXRyaXN0YXRlICJNaWNyb3NvZnQiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIk1pY3Jvc29mdCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3Igc29tZSBNaWNyb3NvZnQgZGV2aWNlcyB3aGljaCBicmVha3MgbGVzcyBvciBtb3JlCi0JSElEIHNwZWNpZmljYXRpb24uCisJU3VwcG9ydCBmb3IgTWljcm9zb2Z0IGRldmljZXMgdGhhdCBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIEhJRCBzdGFuZGFyZC4KIAogY29uZmlnIEhJRF9NT05URVJFWQotCXRyaXN0YXRlICJNb250ZXJleSIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiTW9udGVyZXkiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIE1vbnRlcmV5IEdlbml1cyBLQjI5RS4KIAogY29uZmlnIEhJRF9QQU5USEVSTE9SRAotCXRyaXN0YXRlICJQYW50aGVybG9yZCBkZXZpY2VzIHN1cHBvcnQiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIlBhbnRoZXJsb3JkIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgUGFudGhlckxvcmQvR3JlZW5Bc2lhIGJhc2VkIGRldmljZSBzdXBwb3J0LgogCi0KIGNvbmZpZyBQQU5USEVSTE9SRF9GRgogCWJvb2wgIlBhbnRoZXJsb3JkIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBISURfUEFOVEhFUkxPUkQKQEAgLTI0MiwzMiArMjE4LDMyIEBACiAJICBvciBhZGFwdGVyIGFuZCB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KIAogY29uZmlnIEhJRF9QRVRBTFlOWAotCXRyaXN0YXRlICJQZXRhbHlueCIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiUGV0YWx5bngiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIFBldGFseW54IE1heHRlciByZW1vdGUuCisJU3VwcG9ydCBmb3IgUGV0YWx5bnggTWF4dGVyIHJlbW90ZSBjb250cm9sLgogCiBjb25maWcgSElEX1NBTVNVTkcKLQl0cmlzdGF0ZSAiU2Ftc3VuZyIKLQlkZWZhdWx0IG0KKwl0cmlzdGF0ZSAiU2Ftc3VuZyIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3IgU2Ftc3VuZyBJUiByZW1vdGUuCisJU3VwcG9ydCBmb3IgU2Ftc3VuZyBJbmZyYVJlZCByZW1vdGUgY29udHJvbC4KIAogY29uZmlnIEhJRF9TT05ZCi0JdHJpc3RhdGUgIlNvbnkiCi0JZGVmYXVsdCBtCisJdHJpc3RhdGUgIlNvbnkiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFNvbnkgUFMzIGNvbnRyb2xsZXIuCiAKIGNvbmZpZyBISURfU1VOUExVUwotCXRyaXN0YXRlICJTdW5wbHVzIgotCWRlZmF1bHQgbQorCXRyaXN0YXRlICJTdW5wbHVzIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciBTdW5wbHVzIFdEZXNrdG9wIGlucHV0IGRldmljZS4KKwlTdXBwb3J0IGZvciBTdW5wbHVzIHdpcmVsZXNzIGRlc2t0b3AuCiAKIGNvbmZpZyBUSFJVU1RNQVNURVJfRkYKIAl0cmlzdGF0ZSAiVGhydXN0TWFzdGVyIGRldmljZXMgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDhhN2Q5ZGIuLjcyMWEzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTUxOCw2ICsxNTE4LDggQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDA0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDApIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggYWFkOWVkMS4uZDlhMWJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMzU0LDYgKzM1NCw4IEBACiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBICTB4MTVjMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QJMHgwMDM4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDIJMHgwMDM2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDMJMHgwMDM0CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU4JCTB4MDQzMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRQkweGNkYWIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggNDk3ZTBkMS4uYWYzZWRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTMyNiw5ICszMjYsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShoaWRyYXdfY2xhc3MsIE5VTEwsCi0JCQkJCSBNS0RFVihoaWRyYXdfbWFqb3IsIG1pbm9yKSwgTlVMTCwKLQkJCQkJICIlcyVkIiwgImhpZHJhdyIsIG1pbm9yKTsKKwlkZXYtPmRldiA9IGRldmljZV9jcmVhdGUoaGlkcmF3X2NsYXNzLCBOVUxMLCBNS0RFVihoaWRyYXdfbWFqb3IsIG1pbm9yKSwKKwkJCQkgTlVMTCwgIiVzJWQiLCAiaGlkcmF3IiwgbWlub3IpOwogCiAJaWYgKElTX0VSUihkZXYtPmRldikpIHsKIAkJc3Bpbl9sb2NrKCZtaW5vcnNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IDFkM2I4YTMuLjcwNWE0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7Ci0JCQl3YXJuKCJvdXRwdXQgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCk7CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKLQkJCXdhcm4oImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkIik7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJjb250cm9sIHF1ZXVlaW5nIGZhaWxlZFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0ucmF3X3JlcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWJhY2MwYS4uNmRlMWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTEwLDExICs1MTAsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MCwKLQkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIE1heGltIE1BWDY2NTcsCi0JICBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxIHNlbnNvciBjaGlwcy4KLQotCSAgVGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEgc2Vuc29yIGNoaXAgaXMgYWxzbyBzdXBwb3J0ZWQsIGJ1dCBvbmx5Ci0JICBpZiBmb3VuZCBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIGFuZCBNYXhpbQorCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQKKwkgIE1BWDY2ODEgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwppbmRleCA3ZmUyNDQxLi5mZjdkZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwpAQCAtMjc5LDcgKzI3OSw2IEBACiAJdTggZmFuX21pbls4XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2Rpdls4XTsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAlzdHJ1Y3QgcHdtX2RhdGEgcHdtMTsJLyogUHdtIGNvbnRyb2wgdmFsdWVzICovCi0JaW50IHZpZDsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAl1OCB2cm07CQkJLyogVlJNIHZlcnNpb24gKi8KIAl1OCBhbmFsb2dfb3V0OwkJLyogUmVnaXN0ZXIgdmFsdWUgKERBQykgKi8KIAlsb25nIGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJHUElPIGNvbmZpZyBpczoiKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU8gY29uZmlnIGlzOlxuIik7CiAJZm9yIChpID0gMDtpIDw9IDc7KytpKSB7CiAJCWlmIChkYXRhLT5jb25maWcyICYgKDEgPDwgaSkpIHsKIAkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXHQlc0dQJXMlZFxuIiwKQEAgLTY5Nyw4ICs2OTYsNiBAQAogCQlkYXRhLT5sYXN0X2NvbmZpZyA9IGppZmZpZXM7CiAJfTsgLyogbGFzdF9jb25maWcgKi8KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKLQlkYXRhLT52aWQgPSAoZGF0YS0+Z3BpbyA+PiAxMSkgJiAweDFmOwogCWRhdGEtPnZhbGlkID0gMTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKQEAgLTEyMTUsNyArMTIxMiwxMCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gYWRtMTAyNl91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQgJiAweDNmLCBkYXRhLT52cm0pKTsKKwlpbnQgdmlkID0gKGRhdGEtPmdwaW8gPj4gMTEpICYgMHgxZjsKKworCWRldl9kYmcoZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKHZpZCwgZGF0YS0+dnJtKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7CiAKQEAgLTE2ODEsMTcgKzE2ODEsMTYgQEAKIAkJCWtpbmQgPSBhZG0xMDI2OwogCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gQURNMTAyNl9DT01QQU5ZX0FOQUxPR19ERVYKIAkJCSYmICh2ZXJzdGVwICYgMHhmMCkgPT0gQURNMTAyNl9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIjogVW5yZWNvZ25pemVkIHN0ZXBwaW5nICIKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCBzdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gRGVmYXVsdGluZyB0byBBRE0xMDI2LlxuIiwgdmVyc3RlcCk7CiAJCQlraW5kID0gYWRtMTAyNjsKIAkJfSBlbHNlIGlmICgodmVyc3RlcCAmIDB4ZjApID09IEFETTEwMjZfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICI6IEZvdW5kIHZlcnNpb24vc3RlcHBpbmcgIgorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRm91bmQgdmVyc2lvbi9zdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gQXNzdW1pbmcgZ2VuZXJpYyBBRE0xMDI2LlxuIiwKIAkJCQl2ZXJzdGVwKTsKIAkJCWtpbmQgPSBhbnlfY2hpcDsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIjogQXV0b2RldGVjdGlvbiAiCi0JCQkJImZhaWxlZFxuIik7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCQkvKiBOb3QgYW4gQURNMTAyNiAuLi4gKi8KIAkJCWlmIChraW5kID09IDApIHsgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwogCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgQURNMTAyNiBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBiYTg0Y2E1Li4zNjcxODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAl1MTYgdmFsOwotCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAgfHwgZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMAorCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAKKwkgICAgfHwgKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdICYgMHhDMCkgPT0gMAogCSAgICB8fCBkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDI1NSkgewogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOwotCWlmIChkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwKQorCWlmICgoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gJiAweEMwKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmYmVmYTgyLi42YzlhY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTk5LDQwICs5OSwzMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGlycXNfdG9fY2xlYXI7CisKIAltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAotCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJaXJxc190b19jbGVhciA9IGFtc19pbmZvLndvcmtlcl9pcnFzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfRlJFRUZBTEwpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CiAKLQkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9GUkVFRkFMTCkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBmcmVlZmFsbCBkZXRlY3RlZCFcbiIpOwotCi0JCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKLQotCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9GUkVFRkFMTCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJfQotCi0JCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfU0hPQ0spIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50ayhLRVJOX0lORk8gImFtczogc2hvY2sgZGV0ZWN0ZWQhXG4iKTsKLQotCQkJYW1zX2luZm8ud29ya2VyX2lycXMgJj0gfkFNU19JUlFfU0hPQ0s7Ci0KLQkJCS8qIHdlIG11c3QgY2FsbCB0aGlzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJYW1zX2luZm8uY2xlYXJfaXJxKEFNU19JUlFfU0hPQ0spOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKIAl9CiAKKwlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX1NIT0NLKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX1NIT0NLOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisKKwlhbXNfaW5mby5jbGVhcl9pcnEoaXJxc190b19jbGVhcik7CisKIAltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwogfQogCkBAIC0yMjMsMzQgKzIxNSwyOCBAQAogCiB2b2lkIGFtc19leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCWFtc19pbnB1dF9leGl0KCk7CiAKLQlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewotCQkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCi0JCWFtc19pbnB1dF9leGl0KCk7CisJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JCWFtc19pbmZvLmV4aXQoKTsKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7CiAKLQkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgotCQkgKgotCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKLQkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KLQkJICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCSAqCisJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CisJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKKwkvKiBSZW1vdmUgZGV2aWNlICovCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKIAotCQkvKiBSZW1vdmUgZGV2aWNlICovCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKGFtc19pbmZvLm9mX2Rldik7Ci0KLQkJLyogUmVtb3ZlIGhhbmRsZXIgKi8KLQkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX3Nob2NrX2NsaWVudCk7Ci0JCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGhhbmRsZXIgKi8KKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDk1Nzc2MDUzLi4yY2JmOGE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwpAQCAtNjAsMjYgKzYwLDM0IEBACiAJQU1TX0NNRF9TVEFSVCwKIH07CiAKLXN0YXRpYyBpbnQgYW1zX2kyY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgYW1zX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGFtc19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYW1zX2lkW10gPSB7CisJeyAiYW1zIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbXNfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW1zX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgICA9ICJhbXMiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2F0dGFjaCwKLQkuZGV0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2RldGFjaCwKKwkucHJvYmUgICAgICAgICAgPSBhbXNfaTJjX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IGFtc19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSAgICAgICA9IGFtc19pZCwKIH07CiAKIHN0YXRpYyBzMzIgYW1zX2kyY19yZWFkKHU4IHJlZykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBhbXNfaTJjX3dyaXRlKHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJmFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGFtc19pMmNfY21kKGVudW0gYW1zX2kyY19jbWQgY21kKQpAQCAtMTUyLDkgKzE2MCw5IEBACiAJKnogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEFaKTsKIH0KIAotc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFtc19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBidXM7CiAJaW50IHZtYWosIHZtaW47CiAJaW50IHJlc3VsdDsKIApAQCAtMTYyLDE3ICsxNzAsNyBAQAogCWlmICh1bmxpa2VseShhbXNfaW5mby5oYXNfZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoc3RybmNtcChhZGFwdGVyLT5uYW1lLCAidW5pLW4iLCA1KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlidXMgPSBzaW1wbGVfc3RydG91bChhZGFwdGVyLT5uYW1lICsgNiwgTlVMTCwgMTApOwotCWlmIChidXMgIT0gYW1zX2luZm8uaTJjX2J1cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkZHIgPSBhbXNfaW5mby5pMmNfYWRkcmVzczsKLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkYXB0ZXIgPSBhZGFwdGVyOwotCWFtc19pbmZvLmkyY19jbGllbnQuZHJpdmVyID0gJmFtc19pMmNfZHJpdmVyOwotCXN0cmNweShhbXNfaW5mby5pMmNfY2xpZW50Lm5hbWUsICJBcHBsZSBNb3Rpb24gU2Vuc29yIik7CisJYW1zX2luZm8uaTJjX2NsaWVudCA9IGNsaWVudDsKIAogCWlmIChhbXNfaTJjX2NtZChBTVNfQ01EX1JFU0VUKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IEZhaWxlZCB0byByZXNldCB0aGUgZGV2aWNlXG4iKTsKQEAgLTIzNyw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFtc19pMmNfZGV0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTI2MSwxMSArMjU5LDcgQEAKIAogaW50IF9faW5pdCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQljaGFyICp0bXBfYnVzOwogCWludCByZXN1bHQ7Ci0JY29uc3QgdTMyICpwcm9wOwotCi0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CiAKIAkvKiBTZXQgaW1wbGVtZW50YXRpb24gc3R1ZmYgKi8KIAlhbXNfaW5mby5vZl9ub2RlID0gbnA7CkBAIC0yNzUsMjUgKzI2OSw3IEBACiAJYW1zX2luZm8uY2xlYXJfaXJxID0gYW1zX2kyY19jbGVhcl9pcnE7CiAJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19JMkM7CiAKLQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdG1wX2J1cyA9IHN0cnN0cihhbXNfaW5mby5vZl9ub2RlLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKLQlpZiAodG1wX2J1cykKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOwotCWVsc2UKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKLQlhbXNfaW5mby5pMmNfYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKLQogCXJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZhbXNfaTJjX2RyaXZlcik7CiAKLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCmluZGV4IDdiODFlMGMyLi44YTcxMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYwpAQCAtMjAsMTMgKzIwLDE1IEBACiAjaW5jbHVkZSAiYW1zLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgam95c3RpY2s7Ci1tb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGpveXN0aWNrLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moam95c3RpY2ssICJFbmFibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZSBvbiBtb2R1bGUgbG9hZCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGludmVydDsKLW1vZHVsZV9wYXJhbShpbnZlcnQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJJbnZlcnQgaW5wdXQgZGF0YSBvbiBYIGFuZCBZIGF4aXMiKTsKIAorc3RhdGljIERFRklORV9NVVRFWChhbXNfaW5wdXRfbXV0ZXgpOworCiBzdGF0aWMgdm9pZCBhbXNfaWRldl9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRldi0+aW5wdXQ7CkBAIC01MCwxMyArNTIsMTEgQEAKIH0KIAogLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KLXN0YXRpYyB2b2lkIGFtc19pbnB1dF9lbmFibGUodm9pZCkKK3N0YXRpYyBpbnQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXM4IHgsIHksIHo7Ci0KLQlpZiAoYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCWludCBlcnJvcjsKIAogCWFtc19zZW5zb3JzKCZ4LCAmeSwgJnopOwogCWFtc19pbmZvLnhjYWxpYiA9IHg7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlhbXNfaW5mby5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOwogCWlmICghYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWFtc19pbmZvLmlkZXYtPnBvbGwgPSBhbXNfaWRldl9wb2xsOwogCWFtc19pbmZvLmlkZXYtPnBvbGxfaW50ZXJ2YWwgPSAyNTsKQEAgLTg0LDE0ICs4NCwxOCBAQAogCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwogCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKIAotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpKSB7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpOworCWlmIChlcnJvcikgewogCQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldik7CiAJCWFtc19pbmZvLmlkZXYgPSBOVUxMOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAl9CisKKwlqb3lzdGljayA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGFtc19pbnB1dF9kaXNhYmxlKHZvaWQpCiB7CiAJaWYgKGFtc19pbmZvLmlkZXYpIHsKQEAgLTk5LDYgKzEwMyw4IEBACiAJCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShhbXNfaW5mby5pZGV2KTsKIAkJYW1zX2luZm8uaWRldiA9IE5VTEw7CiAJfQorCisJam95c3RpY2sgPSAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBhbXNfaW5wdXRfc2hvd19qb3lzdGljayhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTAsMzkgKzExNiw0MiBAQAogc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmpveXN0aWNrKSAhPSAxKQorCXVuc2lnbmVkIGxvbmcgZW5hYmxlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZW5hYmxlKSB8fCBlbmFibGUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlpZiAoam95c3RpY2spCi0JCWFtc19pbnB1dF9lbmFibGUoKTsKLQllbHNlCi0JCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJaWYgKGVuYWJsZSAhPSBqb3lzdGljaykgeworCQlpZiAoZW5hYmxlKQorCQkJZXJyb3IgPSBhbXNfaW5wdXRfZW5hYmxlKCk7CisJCWVsc2UKKwkJCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBjb3VudDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGpveXN0aWNrLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlhbXNfaW5wdXRfc2hvd19qb3lzdGljaywgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKTsKIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIGludCBhbXNfaW5wdXRfaW5pdCh2b2lkKQogewotCWludCByZXN1bHQ7Ci0KLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwotCi0JaWYgKCFyZXN1bHQgJiYgam95c3RpY2spCisJaWYgKGpveXN0aWNrKQogCQlhbXNfaW5wdXRfZW5hYmxlKCk7Ci0JcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwogfQogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogdm9pZCBhbXNfaW5wdXRfZXhpdCh2b2lkKQogewotCWFtc19pbnB1dF9kaXNhYmxlKCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2pveXN0aWNrKTsKKworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CisJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggOTQ2M2U5Ny4uZmIxOGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJY29uc3QgdTMyICpwcm9wOwogCWludCByZXN1bHQ7CiAKLQltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLwogCWFtc19pbmZvLm9mX25vZGUgPSBucDsKIAlhbXNfaW5mby5leGl0ID0gYW1zX3BtdV9leGl0OwpAQCAtMTYxLDEwICsxNTksOSBAQAogCiAJLyogR2V0IFBNVSBjb21tYW5kLCBzaG91bGQgYmUgMHg0ZSwgYnV0IHdlIGNhbiBuZXZlciBrbm93ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWFtc19wbXVfY21kID0gKCgqcHJvcCkgPj4gOCkgJiAweGZmOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0xNzUsNyArMTcyLDcgQEAKIAogCXJlc3VsdCA9IGFtc19zZW5zb3JfYXR0YWNoKCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLwogCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9MT1dfTElNSVQsIDB4MTUpOwpAQCAtMTk4LDEwICsxOTUsNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGb3VuZCBQTVUgYmFzZWQgbW90aW9uIHNlbnNvclxuIik7CiAKLQlyZXN1bHQgPSAwOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAppbmRleCBhNjIyMWU1Li41ZWQzODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKIGVudW0gYW1zX2lycSB7CiAJQU1TX0lSUV9GUkVFRkFMTCA9IDB4MDEsCkBAIC00Niw5ICs0Niw3IEBACiAKICNpZmRlZiBDT05GSUdfU0VOU09SU19BTVNfSTJDCiAJLyogSTJDIHByb3BlcnRpZXMgKi8KLQlpbnQgaTJjX2J1czsKLQlpbnQgaTJjX2FkZHJlc3M7Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKICNlbmRpZgogCiAJLyogSm95c3RpY2sgZW11bGF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggYjA2YjhlMC4uYmMwMTFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtNDksNiArNDksOSBAQAogCiAjZGVmaW5lIEFQUExFU01DX01BWF9EQVRBX0xFTkdUSCAzMgogCisjZGVmaW5lIEFQUExFU01DX01JTl9XQUlUCTB4MDA0MAorI2RlZmluZSBBUFBMRVNNQ19NQVhfV0FJVAkweDgwMDAKKwogI2RlZmluZSBBUFBMRVNNQ19TVEFUVVNfTUFTSwkweDBmCiAjZGVmaW5lIEFQUExFU01DX1JFQURfQ01ECTB4MTAKICNkZWZpbmUgQVBQTEVTTUNfV1JJVEVfQ01ECTB4MTEKQEAgLTU3LDggKzYwLDggQEAKIAogI2RlZmluZSBLRVlfQ09VTlRfS0VZCQkiI0tFWSIgLyogci1vIHVpMzIgKi8KIAotI2RlZmluZSBMSUdIVF9TRU5TT1JfTEVGVF9LRVkJIkFMVjAiIC8qIHItbyB7YWx2ICg2IGJ5dGVzKSAqLwotI2RlZmluZSBMSUdIVF9TRU5TT1JfUklHSFRfS0VZCSJBTFYxIiAvKiByLW8ge2FsdiAoNiBieXRlcykgKi8KKyNkZWZpbmUgTElHSFRfU0VOU09SX0xFRlRfS0VZCSJBTFYwIiAvKiByLW8ge2FsdiAoNi0xMCBieXRlcykgKi8KKyNkZWZpbmUgTElHSFRfU0VOU09SX1JJR0hUX0tFWQkiQUxWMSIgLyogci1vIHthbHYgKDYtMTAgYnl0ZXMpICovCiAjZGVmaW5lIEJBQ0tMSUdIVF9LRVkJCSJMS1NCIiAvKiB3LW8ge2xrYiAoMiBieXRlcykgKi8KIAogI2RlZmluZSBDTEFNU0hFTExfS0VZCQkiTVNMRCIgLyogci1vIHVpOCAodW51c2VkKSAqLwpAQCAtMTA0LDYgKzEwNywxNSBAQAogLyogU2V0IDY6IE1hY2Jvb2szIHNldCAqLwogCXsgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRNMFAiLCAiVE4wUCIsICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsCiAJICAiVGgwUyIsICJUaDFIIiwgTlVMTCB9LAorLyogU2V0IDc6IE1hY2Jvb2sgQWlyICovCisJeyAiVEIwVCIsICJUQjFTIiwgIlRCMVQiLCAiVEIyUyIsICJUQjJUIiwgIlRDMEQiLCAiVEMwUCIsICJUQ0ZQIiwKKwkgICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsICJUcDBQIiwgIlRwRlAiLCAiVHMwUCIsICJUczBTIiwgTlVMTCB9LAorLyogU2V0IDg6IE1hY2Jvb2sgUHJvIDQsMSAoUGVucnluKSAqLworCXsgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRHMEQiLCAiVEcwSCIsICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsCisJICAiVGgxSCIsICJUaDJIIiwgIlRtMFAiLCAiVHMwUCIsIE5VTEwgfSwKKy8qIFNldCA5OiBNYWNib29rIFBybyAzLDEgKFNhbnRhIFJvc2EpICovCisJeyAiVEFMUCIsICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJURzBEIiwgIlRHMEgiLCAiVFRGMCIsICJUVzBQIiwKKwkgICJUaDBIIiwgIlRoMUgiLCAiVGgySCIsICJUbTBQIiwgIlRzMFAiLCBOVUxMIH0sCiB9OwogCiAvKiBMaXN0IG9mIGtleXMgdXNlZCB0byByZWFkL3dyaXRlIGZhbiBzcGVlZHMgKi8KQEAgLTE2MywyNSArMTc1LDI1IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFwcGxlc21jX2xlZF93cTsKIAogLyoKLSAqIF9fd2FpdF9zdGF0dXMgLSBXYWl0IHVwIHRvIDJtcyBmb3IgdGhlIHN0YXR1cyBwb3J0IHRvIGdldCBhIGNlcnRhaW4gdmFsdWUKKyAqIF9fd2FpdF9zdGF0dXMgLSBXYWl0IHVwIHRvIDMybXMgZm9yIHRoZSBzdGF0dXMgcG9ydCB0byBnZXQgYSBjZXJ0YWluIHZhbHVlCiAgKiAobWFza2VkIHdpdGggMHgwZiksIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdAogICogaG9sZCBhcHBsZXNtY19sb2NrLgogICovCiBzdGF0aWMgaW50IF9fd2FpdF9zdGF0dXModTggdmFsKQogewotCXVuc2lnbmVkIGludCBpOworCWludCB1czsKIAogCXZhbCA9IHZhbCAmIEFQUExFU01DX1NUQVRVU19NQVNLOwogCi0JZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJZm9yICh1cyA9IEFQUExFU01DX01JTl9XQUlUOyB1cyA8IEFQUExFU01DX01BWF9XQUlUOyB1cyA8PD0gMSkgeworCQl1ZGVsYXkodXMpOwogCQlpZiAoKGluYihBUFBMRVNNQ19DTURfUE9SVCkgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSykgPT0gdmFsKSB7CiAJCQlpZiAoZGVidWcpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJCSJXYWl0ZWQgJWQgdXMgZm9yIHN0YXR1cyAleFxuIiwKLQkJCQkJCWkqMTAsIHZhbCk7CisJCQkJCSJXYWl0ZWQgJWQgdXMgZm9yIHN0YXR1cyAleFxuIiwKKwkJCQkJMiAqIHVzIC0gQVBQTEVTTUNfTUlOX1dBSVQsIHZhbCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl1ZGVsYXkoMTApOwogCX0KIAogCXByaW50ayhLRVJOX1dBUk5JTkcgImFwcGxlc21jOiB3YWl0IHN0YXR1cyBmYWlsZWQ6ICV4ICE9ICV4XG4iLApAQCAtMTkxLDYgKzIwMywyNSBAQAogfQogCiAvKgorICogc3BlY2lhbCB0cmVhdG1lbnQgb2YgY29tbWFuZCBwb3J0IC0gb24gbmV3ZXIgbWFjYm9va3MsIGl0IHNlZW1zIG5lY2Vzc2FyeQorICogdG8gcmVzZW5kIHRoZSBjb21tYW5kIGJ5dGUgYmVmb3JlIHBvbGxpbmcgdGhlIHN0YXR1cyBhZ2Fpbi4gQ2FsbGVycyBtdXN0CisgKiBob2xkIGFwcGxlc21jX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgc2VuZF9jb21tYW5kKHU4IGNtZCkKK3sKKwlpbnQgdXM7CisJZm9yICh1cyA9IEFQUExFU01DX01JTl9XQUlUOyB1cyA8IEFQUExFU01DX01BWF9XQUlUOyB1cyA8PD0gMSkgeworCQlvdXRiKGNtZCwgQVBQTEVTTUNfQ01EX1BPUlQpOworCQl1ZGVsYXkodXMpOworCQlpZiAoKGluYihBUFBMRVNNQ19DTURfUE9SVCkgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSykgPT0gMHgwYykKKwkJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogY29tbWFuZCBmYWlsZWQ6ICV4IC0+ICV4XG4iLAorCQljbWQsIGluYihBUFBMRVNNQ19DTURfUE9SVCkpOworCXJldHVybiAtRUlPOworfQorCisvKgogICogYXBwbGVzbWNfcmVhZF9rZXkgLSByZWFkcyBsZW4gYnl0ZXMgZnJvbSBhIGdpdmVuIGtleSwgYW5kIHB1dCB0aGVtIGluIGJ1ZmZlci4KICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS4gQ2FsbGVycyBtdXN0CiAgKiBob2xkIGFwcGxlc21jX2xvY2suCkBAIC0yMDUsOCArMjM2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb3V0YihBUFBMRVNNQ19SRUFEX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfUkVBRF9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTI0OSw4ICsyNzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvdXRiKEFQUExFU01DX1dSSVRFX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfV1JJVEVfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0yODQsOCArMzEzLDcgQEAKIAlyZWFka2V5WzJdID0gaW5kZXggPj4gODsKIAlyZWFka2V5WzNdID0gaW5kZXg7CiAKLQlvdXRiKEFQUExFU01DX0dFVF9LRVlfQllfSU5ERVhfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19HRVRfS0VZX0JZX0lOREVYX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMzE1LDggKzM0Myw3IEBACiB7CiAJaW50IGk7CiAKLQlvdXRiKEFQUExFU01DX0dFVF9LRVlfVFlQRV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX0dFVF9LRVlfVFlQRV9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTMyNSw3ICszNTIsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJfQogCi0Jb3V0Yig1LCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCW91dGIoNiwgQVBQTEVTTUNfREFUQV9QT1JUKTsKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJaWYgKF9fd2FpdF9zdGF0dXMoMHgwNSkpCkBAIC01MjcsMTcgKzU1NCwyNyBAQAogc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfbGlnaHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQogeworCXN0YXRpYyBpbnQgZGF0YV9sZW5ndGg7CiAJaW50IHJldDsKIAl1OCBsZWZ0ID0gMCwgcmlnaHQgPSAwOwotCXU4IGJ1ZmZlcls2XTsKKwl1OCBidWZmZXJbMTBdLCBxdWVyeVs2XTsKIAogCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOwogCi0JcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX0xFRlRfS0VZLCBidWZmZXIsIDYpOworCWlmICghZGF0YV9sZW5ndGgpIHsKKwkJcmV0ID0gYXBwbGVzbWNfZ2V0X2tleV90eXBlKExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgcXVlcnkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWRhdGFfbGVuZ3RoID0gY2xhbXBfdmFsKHF1ZXJ5WzBdLCAwLCAxMCk7CisJCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiBsaWdodCBzZW5zb3IgZGF0YSBsZW5ndGggc2V0IHRvICIKKwkJCSIlZFxuIiwgZGF0YV9sZW5ndGgpOworCX0KKworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgYnVmZmVyLCBkYXRhX2xlbmd0aCk7CiAJbGVmdCA9IGJ1ZmZlclsyXTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKLQlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfUklHSFRfS0VZLCBidWZmZXIsIDYpOworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9SSUdIVF9LRVksIGJ1ZmZlciwgZGF0YV9sZW5ndGgpOwogCXJpZ2h0ID0gYnVmZmVyWzJdOwogCiBvdXQ6CkBAIC0xMjMzLDM5ICsxMjcwLDU3IEBACiAJeyAuYWNjZWxlcm9tZXRlciA9IDAsIC5saWdodCA9IDAsIC50ZW1wZXJhdHVyZV9zZXQgPSA1IH0sCiAvKiBNYWNCb29rMzogYWNjZWxlcm9tZXRlciBhbmQgdGVtcGVyYXR1cmUgc2V0IDYgKi8KIAl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDYgfSwKKy8qIE1hY0Jvb2sgQWlyOiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA3ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA3IH0sCisvKiBNYWNCb29rIFBybyA0OiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA4ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA4IH0sCisvKiBNYWNCb29rIFBybyAzOiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA5ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA5IH0sCiB9OwogCiAvKiBOb3RlIHRoYXQgRE1JX01BVENIKC4uLiwiTWFjQm9vayIpIHdpbGwgbWF0Y2ggIk1hY0Jvb2tQcm8xLDEiLgogICogU28gd2UgbmVlZCB0byBwdXQgIkFwcGxlIE1hY0Jvb2sgUHJvIiBiZWZvcmUgIkFwcGxlIE1hY0Jvb2siLiAqLwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGRtaV9zeXN0ZW1faWQgYXBwbGVzbWNfd2hpdGVsaXN0W10gPSB7CisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIEFpciIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va0FpciIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs3XX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyA0IiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNCIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs4XX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyAzIiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvMyIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs5XX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2tQcm8iKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzBdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzBdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgKHYyKSIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2syIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVsxXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVsxXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rICh2MykiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMyIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbNl19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbNl19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2siKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY21pbmkiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNtaW5pIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVszXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVszXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNQcm8yIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjUHJvMiIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbNF19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbNF19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgaU1hYyIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsImlNYWMiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzVdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzVdfSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi5jIGIvZHJpdmVycy9od21vbi9od21vbi5jCmluZGV4IDczMjFhODguLjA3NmE1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKQEAgLTU1LDggKzU1LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCWlkID0gaWQgJiBNQVhfSURfTUFTSzsKLQlod2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShod21vbl9jbGFzcywgZGV2LCBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkgICAgICBIV01PTl9JRF9GT1JNQVQsIGlkKTsKKwlod2RldiA9IGRldmljZV9jcmVhdGUoaHdtb25fY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsCisJCQkgICAgICBIV01PTl9JRF9GT1JNQVQsIGlkKTsKIAogCWlmIChJU19FUlIoaHdkZXYpKSB7CiAJCXNwaW5fbG9jaygmaWRyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1hZW0uYyBiL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKaW5kZXggMGY3MGRjMi4uN2IwZWQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1hZW0uYworKysgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCkBAIC0xMTE4LDMgKzExMTgsMTAgQEAKIAogbW9kdWxlX2luaXQoYWVtX2luaXQpOwogbW9kdWxlX2V4aXQoYWVtX2V4aXQpOworCitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzMzUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM1NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM3NTUtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk0zODUwTTIveDM5NTBNMi0qIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2libXBleC5jIGIvZHJpdmVycy9od21vbi9pYm1wZXguYwppbmRleCA0ZTliMTljLi41MzdkOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2libXBleC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKQEAgLTYwOCwzICs2MDgsOSBAQAogCiBtb2R1bGVfaW5pdChpYm1wZXhfaW5pdCk7CiBtb2R1bGVfZXhpdChpYm1wZXhfZXhpdCk7CisKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDMzNTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzU1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM2NTUtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14Mzc1NS0qIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGQ3OTNjYzAuLmI3NGM5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAlpZiAocmVnICYgKDEgPDwgbnIpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIzXG4iKTsgIC8qIHRoZXJtYWwgZGlvZGUgKi8KIAlpZiAocmVnICYgKDggPDwgbnIpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIyXG4iKTsgIC8qIHRoZXJtaXN0b3IgKi8KKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiNFxuIik7ICAvKiB0aGVybWlzdG9yICovCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7ICAgICAgLyogZGlzYWJsZWQgKi8KIH0KIHN0YXRpYyBzc2l6ZV90IHNldF9zZW5zb3Ioc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTQ5MywxMCArNDkzLDE1IEBACiAKIAlkYXRhLT5zZW5zb3IgJj0gfigxIDw8IG5yKTsKIAlkYXRhLT5zZW5zb3IgJj0gfig4IDw8IG5yKTsKLQkvKiAzID0gdGhlcm1hbCBkaW9kZTsgMiA9IHRoZXJtaXN0b3I7IDAgPSBkaXNhYmxlZCAqLworCWlmICh2YWwgPT0gMikgewkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQlkZXZfd2FybihkZXYsICJTZW5zb3IgdHlwZSAyIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgNCAiCisJCQkgImluc3RlYWRcbiIpOworCQl2YWwgPSA0OworCX0KKwkvKiAzID0gdGhlcm1hbCBkaW9kZTsgNCA9IHRoZXJtaXN0b3I7IDAgPSBkaXNhYmxlZCAqLwogCWlmICh2YWwgPT0gMykKIAkgICAgZGF0YS0+c2Vuc29yIHw9IDEgPDwgbnI7Ci0JZWxzZSBpZiAodmFsID09IDIpCisJZWxzZSBpZiAodmFsID09IDQpCiAJICAgIGRhdGEtPnNlbnNvciB8PSA4IDw8IG5yOwogCWVsc2UgaWYgKHZhbCAhPSAwKSB7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc4LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwppbmRleCBlZDc4NTlmLi5iNWUzYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzguYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwpAQCAtMTE0LDI1ICsxMTQsMTYgQEAKIAogI2RlZmluZSBESVZfRlJPTV9SRUcodmFsKSAoMSA8PCAodmFsKSkKIAotLyogVGhlcmUgYXJlIHNvbWUgY29tcGxpY2F0aW9ucyBpbiBhIG1vZHVsZSBsaWtlIHRoaXMuIEZpcnN0IG9mZiwgTE03OCBjaGlwcwotICAgbWF5IGJlIGJvdGggcHJlc2VudCBvbiB0aGUgU01CdXMgYW5kIHRoZSBJU0EgYnVzLCBhbmQgd2UgaGF2ZSB0byBoYW5kbGUKLSAgIHRob3NlIGNhc2VzIHNlcGFyYXRlbHkgYXQgc29tZSBwbGFjZXMuIFNlY29uZCwgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbAotICAgTE03OCBjaGlwcyBhdmFpbGFibGUgKHdlbGwsIGFjdHVhbGx5LCB0aGF0IGlzIHByb2JhYmx5IG5ldmVyIGRvbmU7IGJ1dAotICAgaXQgaXMgYSBjbGVhbiBpbGx1c3RyYXRpb24gb2YgaG93IHRvIGhhbmRsZSBhIGNhc2UgbGlrZSB0aGF0KS4gRmluYWxseSwKLSAgIGEgc3BlY2lmaWMgY2hpcCBtYXkgYmUgYXR0YWNoZWQgdG8gKmJvdGgqIElTQSBhbmQgU01CdXMsIGFuZCB3ZSB3b3VsZAotICAgbm90IGxpa2UgdG8gZGV0ZWN0IGl0IGRvdWJsZS4gRm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIHRoZSBMTTc4IGF0Ci0gICBsZWFzdCwgYSByZWdpc3RlciB0ZWxscyB1cyB3aGF0IFNNQnVzIGFkZHJlc3Mgd2UgYXJlIG9uLCBzbyB0aGF0IGhlbHBzCi0gICBhIGJpdCAtIGV4Y2VwdCBpZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIFNNQnVzLiBHcm9hbi4gTm8gc29sdXRpb24KLSAgIGZvciB0aGlzIHlldC4gKi8KLQotLyogRm9yIElTQSBjaGlwcywgd2UgYWJ1c2UgdGhlIGkyY19jbGllbnQgYWRkciBhbmQgbmFtZSBmaWVsZHMuIFdlIGFsc28gdXNlCi0gICB0aGUgZHJpdmVyIGZpZWxkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBJMkMgYW5kIElTQSBjaGlwcy4gKi8KIHN0cnVjdCBsbTc4X2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAllbnVtIGNoaXBzIHR5cGU7CiAKKwkvKiBGb3IgSVNBIGRldmljZSBvbmx5ICovCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaXNhX2FkZHI7CisKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCkBAIC0xNTEsOSArMTQyLDExIEBACiB9OwogCiAKLXN0YXRpYyBpbnQgbG03OF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBsbTc4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7Ci1zdGF0aWMgaW50IGxtNzhfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkJICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsbTc4X2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKQEAgLTE2NCwxMiArMTU3LDIzIEBACiBzdGF0aWMgdm9pZCBsbTc4X2luaXRfZGV2aWNlKHN0cnVjdCBsbTc4X2RhdGEgKmRhdGEpOwogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTc4X2kyY19pZFtdID0geworCXsgImxtNzgiLCBsbTc4IH0sCisJeyAibG03OSIsIGxtNzkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG03OF9pMmNfaWQpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG03OF9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsbTc4IiwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IGxtNzhfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBsbTc4X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IGxtNzhfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gbG03OF9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGxtNzhfaTJjX2lkLAorCS5kZXRlY3QJCT0gbG03OF9pMmNfZGV0ZWN0LAorCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbG03OF9pc2FfZHJpdmVyID0gewpAQCAtNDU0LDE3ICs0NTgsNiBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA0KTsKIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKLSAgICAgKiBsbTc4X2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaAotICAgICAgIGF2YWlsYWJsZSBhZGFwdGVyCi0gICAgICogd2hlbiBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkIChhbmQgbG03OF9kcml2ZXIgaXMgc3RpbGwgcHJlc2VudCkgKi8KLXN0YXRpYyBpbnQgbG03OF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtNzhfZGV0ZWN0KTsKLX0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzhfYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyLmF0dHIsCkBAIC01MjcsNTQgKzUyMCw3NyBAQAogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5jbGllbnQubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwotc3RhdGljIGludCBsbTc4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKKy8qIFJldHVybnMgMSBpZiB0aGUgSTJDIGNoaXAgYXBwZWFycyB0byBiZSBhbiBhbGlhcyBvZiB0aGUgSVNBIGNoaXAgKi8KK3N0YXRpYyBpbnQgbG03OF9hbGlhc19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY2hpcGlkKQogewotCWludCBpLCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7Ci0Jc3RydWN0IGxtNzhfZGF0YSAqZGF0YTsKLQljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOworCXN0cnVjdCBsbTc4X2RhdGEgKmlzYTsKKwlpbnQgaTsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIEVSUk9SMTsKKwlpZiAoIXBkZXYpCS8qIE5vIElTQSBjaGlwICovCisJCXJldHVybiAwOworCWlzYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0kyQ19BRERSKSAhPSBjbGllbnQtPmFkZHIpCisJCXJldHVybiAwOwkvKiBBZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggKi8KKwlpZiAoKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0NISVBJRCkgJiAweGZlKSAhPSAoY2hpcGlkICYgMHhmZSkpCisJCXJldHVybiAwOwkvKiBDaGlwIHR5cGUgZG9lc24ndCBtYXRjaCAqLworCisJLyogV2UgY29tcGFyZSBhbGwgdGhlIGxpbWl0IHJlZ2lzdGVycywgdGhlIGNvbmZpZyByZWdpc3RlciBhbmQgdGhlCisJICogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMHgyYjsgaSA8PSAweDNkOyBpKyspIHsKKwkJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOworCX0KKwlpZiAobG03OF9yZWFkX3ZhbHVlKGlzYSwgTE03OF9SRUdfQ09ORklHKSAhPQorCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DT05GSUcpKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAweDQzOyBpIDw9IDB4NDY7IGkrKykgeworCQlpZiAobG03OF9yZWFkX3ZhbHVlKGlzYSwgaSkgIT0KKwkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpKQorCQkJcmV0dXJuIDA7CiAJfQogCi0JLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKLQkgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KLQkgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBsbTc4X3tyZWFkLHdyaXRlfV92YWx1ZS4gKi8KKwlyZXR1cm4gMTsKK30KIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG03OF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1IxOwotCX0KK3N0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkJICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCWludCBpOworCXN0cnVjdCBsbTc4X2RhdGEgKmlzYSA9IHBkZXYgPyBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSA6IE5VTEw7CisJY29uc3QgY2hhciAqY2xpZW50X25hbWU7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWludCBhZGRyZXNzID0gY2xpZW50LT5hZGRyOwogCi0JbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwotCW5ld19jbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCW5ld19jbGllbnQtPmRyaXZlciA9ICZsbTc4X2RyaXZlcjsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KKwkvKiBXZSBibG9jayB1cGRhdGVzIG9mIHRoZSBJU0EgZGV2aWNlIHRvIG1pbmltaXplIHRoZSByaXNrIG9mCisJICAgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgTE03OCBjaGlwIHRocm91Z2ggZGlmZmVyZW50CisJICAgaW50ZXJmYWNlcy4gKi8KKwlpZiAoaXNhKQorCQltdXRleF9sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwogCWlmIChraW5kIDwgMCkgewotCQlpZiAobG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NPTkZJRykgJiAweDgwKSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7Ci0JCX0KLQkJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19JMkNfQUREUikgIT0KLQkJICAgIGFkZHJlc3MpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKLQkJfQorCQlpZiAoKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNNzhfUkVHX0NPTkZJRykgJiAweDgwKQorCQkgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfSTJDX0FERFIpCisJCSAgICAhPSBhZGRyZXNzKQorCQkJZ290byBlcnJfbm9kZXY7CisKKwkJLyogRXhwbGljaXRseSBwcmV2ZW50IHRoZSBtaXNkZXRlY3Rpb24gb2YgV2luYm9uZCBjaGlwcyAqLworCQlpID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHg0Zik7CisJCWlmIChpID09IDB4YTMgfHwgaSA9PSAweDVjKQorCQkJZ290byBlcnJfbm9kZXY7CiAJfQogCiAJLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuICovCiAJaWYgKGtpbmQgPD0gMCkgewotCQlpID0gbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NISVBJRCk7CisJCWkgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DSElQSUQpOwogCQlpZiAoaSA9PSAweDAwIHx8IGkgPT0gMHgyMAkvKiBMTTc4ICovCiAJCSB8fCBpID09IDB4NDApCQkJLyogTE03OC1KICovCiAJCQlraW5kID0gbG03ODsKQEAgLTU4NiwzMyArNjAyLDU5IEBACiAJCQkJCSJwYXJhbWV0ZXIgZm9yIHVua25vd24gY2hpcCBhdCAiCiAJCQkJCSJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJCQkJaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGFkZHJlc3MpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CisJCX0KKworCQlpZiAobG03OF9hbGlhc19kZXRlY3QoY2xpZW50LCBpKSkgeworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV2aWNlIGF0IDB4JTAyeCBhcHBlYXJzIHRvICIKKwkJCQkiYmUgdGhlIHNhbWUgYXMgSVNBIGRldmljZVxuIiwgYWRkcmVzcyk7CisJCQlnb3RvIGVycl9ub2RldjsKIAkJfQogCX0KIAotCWlmIChraW5kID09IGxtNzgpIHsKLQkJY2xpZW50X25hbWUgPSAibG03OCI7Ci0JfSBlbHNlIGlmIChraW5kID09IGxtNzkpIHsKKwlpZiAoaXNhKQorCQltdXRleF91bmxvY2soJmlzYS0+dXBkYXRlX2xvY2spOworCisJc3dpdGNoIChraW5kKSB7CisJY2FzZSBsbTc5OgogCQljbGllbnRfbmFtZSA9ICJsbTc5IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2xpZW50X25hbWUgPSAibG03OCI7CiAJfQorCXN0cmxjcHkoaW5mby0+dHlwZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCi0JLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwotCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwotCWRhdGEtPnR5cGUgPSBraW5kOworCXJldHVybiAwOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQotCQlnb3RvIEVSUk9SMjsKKyBlcnJfbm9kZXY6CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBsbTc4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGxtNzhfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTc4X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KIAlsbTc4X2luaXRfZGV2aWNlKGRhdGEpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKSkpCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7CisJaWYgKGVycikKIAkJZ290byBFUlJPUjM7CiAKLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKIAkJZ290byBFUlJPUjQ7CkBAIC02MjEsMjYgKzY2MywxOCBAQAogCXJldHVybiAwOwogCiBFUlJPUjQ6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOwogRVJST1IzOgotCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwotRVJST1IyOgogCWtmcmVlKGRhdGEpOwotRVJST1IxOgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbG03OF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGxtNzhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKLQotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCXJldHVybiBlcnI7Ci0KIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwpAQCAtNjUxLDExICs2ODUsMTAgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAogCS8qIFJlc2VydmUgdGhlIElTQSByZWdpb24gKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXMtPnN0YXJ0LCBMTTc4X0VYVEVOVCwgImxtNzgiKSkgeworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIExNNzhfQUREUl9SRUdfT0ZGU0VULCAyLCAibG03OCIpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0OwogCX0KQEAgLTY2NSwxOCArNjk4LDE2IEBACiAJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JZGF0YS0+Y2xpZW50LmFkZHIgPSByZXMtPnN0YXJ0OwotCWkyY19zZXRfY2xpZW50ZGF0YSgmZGF0YS0+Y2xpZW50LCBkYXRhKTsKKwlkYXRhLT5pc2FfYWRkciA9IHJlcy0+c3RhcnQ7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKIAlpZiAobG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NISVBJRCkgJiAweDgwKSB7CiAJCWRhdGEtPnR5cGUgPSBsbTc5OwotCQluYW1lID0gImxtNzkiOworCQlkYXRhLT5uYW1lID0gImxtNzkiOwogCX0gZWxzZSB7CiAJCWRhdGEtPnR5cGUgPSBsbTc4OwotCQluYW1lID0gImxtNzgiOworCQlkYXRhLT5uYW1lID0gImxtNzgiOwogCX0KLQlzdHJsY3B5KGRhdGEtPmNsaWVudC5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIExNNzggY2hpcCAqLwogCWxtNzhfaW5pdF9kZXZpY2UoZGF0YSk7CkBAIC02OTksNyArNzMwLDcgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwogCWtmcmVlKGRhdGEpOwogIGV4aXRfcmVsZWFzZV9yZWdpb246Ci0JcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgTE03OF9FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBMTTc4X0FERFJfUkVHX09GRlNFVCwgMik7CiAgZXhpdDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzA3LDEzICs3MzgsMTYgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOwogCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIsIExNNzhfRVhURU5UKTsKIAlrZnJlZShkYXRhKTsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgTE03OF9BRERSX1JFR19PRkZTRVQsIDIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyNCwxMyArNzU4LDEzIEBACiAgICB3b3VsZCBzbG93IGRvd24gdGhlIExNNzggYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gICovCiBzdGF0aWMgaW50IGxtNzhfcmVhZF92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAotCWlmICghY2xpZW50LT5kcml2ZXIpIHsgLyogSVNBIGRldmljZSAqLworCWlmICghY2xpZW50KSB7IC8qIElTQSBkZXZpY2UgKi8KIAkJaW50IHJlczsKIAkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKLQkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnLCBkYXRhLT5pc2FfYWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwkJcmVzID0gaW5iX3AoZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0RBVEFfUkVHX09GRlNFVCk7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfSBlbHNlCkBAIC03NDYsMTIgKzc4MCwxMiBAQAogICAgbm93aGVyZSBlbHNlIGJlIG5lY2Vzc2FyeSEgKi8KIHN0YXRpYyBpbnQgbG03OF93cml0ZV92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KKwlpZiAoIWNsaWVudCkgeyAvKiBJU0EgZGV2aWNlICovCiAJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCQlvdXRiX3AocmVnLCBjbGllbnQtPmFkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7Ci0JCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnLCBkYXRhLT5pc2FfYWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHZhbHVlLCBkYXRhLT5pc2FfYWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCkBAIC04MzcsOCArODcxLDE3IEBACiB7CiAJaW50IHZhbCwgc2F2ZSwgZm91bmQgPSAwOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCBMTTc4X0VYVEVOVCwgImxtNzgiKSkKKwkvKiBXZSBoYXZlIHRvIHJlcXVlc3QgdGhlIHJlZ2lvbiBpbiB0d28gcGFydHMgYmVjYXVzZSBzb21lCisJICAgYm9hcmRzIGRlY2xhcmUgYmFzZSs0IHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIDQsICJsbTc4IikpIHsKKwkJcHJfZGVidWcoImxtNzg6IEZhaWxlZCB0byByZXF1ZXN0IGxvdyBwYXJ0IG9mIHJlZ2lvblxuIik7CiAJCXJldHVybiAwOworCX0KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MgKyA0LCA0LCAibG03OCIpKSB7CisJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBoaWdoIHBhcnQgb2YgcmVnaW9uXG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgNCk7CisJCXJldHVybiAwOworCX0KIAogI2RlZmluZSBSRUFMTFlfU0xPV19JTwogCS8qIFdlIG5lZWQgdGhlIHRpbWVvdXRzIGZvciBhdCBsZWFzdCBzb21lIExNNzgtbGlrZQpAQCAtOTAxLDcgKzk0NCw4IEBACiAJCQl2YWwgJiAweDgwID8gIkxNNzkiIDogIkxNNzgiLCAoaW50KWFkZHJlc3MpOwogCiAgcmVsZWFzZToKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCBMTTc4X0VYVEVOVCk7CisJcmVsZWFzZV9yZWdpb24oYWRkcmVzcyArIDQsIDQpOworCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtOTQ5LDE0ICs5OTMsMTIgQEAKIHsKIAlpbnQgcmVzOwogCi0JcmVzID0gaTJjX2FkZF9kcml2ZXIoJmxtNzhfZHJpdmVyKTsKLQlpZiAocmVzKQotCQlnb3RvIGV4aXQ7Ci0KKwkvKiBXZSByZWdpc3RlciB0aGUgSVNBIGRldmljZSBmaXJzdCwgc28gdGhhdCB3ZSBjYW4gc2tpcCB0aGUKKwkgKiByZWdpc3RyYXRpb24gb2YgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgc2FtZSBkZXZpY2UuICovCiAJaWYgKGxtNzhfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgewogCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7CiAJCWlmIChyZXMpCi0JCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKwkJCWdvdG8gZXhpdDsKIAogCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KIAkJcmVzID0gbG03OF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CkBAIC05NjQsMTIgKzEwMDYsMTYgQEAKIAkJCWdvdG8gZXhpdF91bnJlZ19pc2FfZHJpdmVyOwogCX0KIAorCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZsbTc4X2RyaXZlcik7CisJaWYgKHJlcykKKwkJZ290byBleGl0X3VucmVnX2lzYV9kZXZpY2U7CisKIAlyZXR1cm4gMDsKIAorIGV4aXRfdW5yZWdfaXNhX2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKICBleGl0X3VucmVnX2lzYV9kcml2ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7Ci0gZXhpdF91bnJlZ19pMmNfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZsbTc4X2RyaXZlcik7CiAgZXhpdDoKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCAxMmQ0NDZmLi4zZmYwMjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtNSw2ICs1LDcgQEAKICAgICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgIFBoaWxpcCBQb2tvcm55IDxwcG9rb3JueUBwZW5ndWluY29tcHV0aW5nLmNvbT4KICAgICBDb3B5cmlnaHQgKGMpIDIwMDMgICAgICAgIE1hcmdpdCBTY2h1YmVydC1XaGlsZSA8bWFyZ2l0c3dAdC1vbmxpbmUuZGU+CiAgICAgQ29weXJpZ2h0IChjKSAyMDA0ICAgICAgICBKdXN0aW4gVGhpZXNzZW4gPGp0aGllc3NlbkBwZW5ndWluY29tcHV0aW5nLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgQ2hpcCBkZXRhaWxzIGF0CSAgICAgIDxodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9kcy9MTS9MTTg1LnBkZj4KIApAQCAtMTczLDQwICsxNzQsMzkgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChyYW5nZSA+PSBsbTg1X3JhbmdlX21hcFsxNV0pCi0JCXJldHVybiAxNTsKLQogCS8qIEZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggKi8KLQlmb3IgKGkgPSAxNDsgaSA+PSAwOyAtLWkpIHsKLQkJaWYgKHJhbmdlID49IGxtODVfcmFuZ2VfbWFwW2ldKSB7Ci0JCQlpZiAoKGxtODVfcmFuZ2VfbWFwW2kgKyAxXSAtIHJhbmdlKSA8Ci0JCQkJCShyYW5nZSAtIGxtODVfcmFuZ2VfbWFwW2ldKSkKLQkJCQlyZXR1cm4gaSArIDE7Ci0JCQlyZXR1cm4gaTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCAxNTsgKytpKSB7CisJCWlmIChyYW5nZSA8PSAobG04NV9yYW5nZV9tYXBbaV0gKyBsbTg1X3JhbmdlX21hcFtpICsgMV0pIC8gMikKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBpOwogfQogI2RlZmluZSBSQU5HRV9GUk9NX1JFRyh2YWwpCWxtODVfcmFuZ2VfbWFwWyh2YWwpICYgMHgwZl0KIAogLyogVGhlc2UgYXJlIHRoZSBQV00gZnJlcXVlbmN5IGVuY29kaW5ncyAqLwotc3RhdGljIGNvbnN0IGludCBsbTg1X2ZyZXFfbWFwW10gPSB7IC8qIC4xIEh6ICovCi0JMTAwLCAxNTAsIDIzMCwgMzAwLCAzODAsIDQ3MCwgNjIwLCA5NDAKK3N0YXRpYyBjb25zdCBpbnQgbG04NV9mcmVxX21hcFs4XSA9IHsgLyogMSBIeiAqLworCTEwLCAxNSwgMjMsIDMwLCAzOCwgNDcsIDYxLCA5NAorfTsKK3N0YXRpYyBjb25zdCBpbnQgYWRtMTAyN19mcmVxX21hcFs4XSA9IHsgLyogMSBIeiAqLworCTExLCAxNSwgMjIsIDI5LCAzNSwgNDQsIDU5LCA4OAogfTsKIAotc3RhdGljIGludCBGUkVRX1RPX1JFRyhpbnQgZnJlcSkKK3N0YXRpYyBpbnQgRlJFUV9UT19SRUcoY29uc3QgaW50ICptYXAsIGludCBmcmVxKQogewogCWludCBpOwogCi0JaWYgKGZyZXEgPj0gbG04NV9mcmVxX21hcFs3XSkKLQkJcmV0dXJuIDc7CisJLyogRmluZCB0aGUgY2xvc2VzdCBtYXRjaCAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCi0JCWlmIChmcmVxIDw9IGxtODVfZnJlcV9tYXBbaV0pCisJCWlmIChmcmVxIDw9IChtYXBbaV0gKyBtYXBbaSArIDFdKSAvIDIpCiAJCQlicmVhazsKIAlyZXR1cm4gaTsKIH0KLSNkZWZpbmUgRlJFUV9GUk9NX1JFRyh2YWwpCWxtODVfZnJlcV9tYXBbKHZhbCkgJiAweDA3XQorCitzdGF0aWMgaW50IEZSRVFfRlJPTV9SRUcoY29uc3QgaW50ICptYXAsIHU4IHJlZykKK3sKKwlyZXR1cm4gbWFwW3JlZyAmIDB4MDddOworfQogCiAvKiBTaW5jZSB3ZSBjYW4ndCB1c2Ugc3RyaW5ncywgSSdtIGFidXNpbmcgdGhlc2UgbnVtYmVycwogICogICB0byBzdGFuZCBpbiBmb3IgdGhlIGZvbGxvd2luZyBtZWFuaW5nczoKQEAgLTI3NSw3ICsyNzUsNiBAQAogCiBzdHJ1Y3QgbG04NV9hdXRvZmFuIHsKIAl1OCBjb25maWc7CS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggZnJlcTsJLyogUFdNIGZyZXF1ZW5jeSwgZW5jb2RlZCAqLwogCXU4IG1pbl9wd207CS8qIE1pbmltdW0gUFdNIHZhbHVlLCBlbmNvZGVkICovCiAJdTggbWluX29mZjsJLyogTWluIFBXTSBvciBPRkYgYmVsb3cgImxpbWl0IiwgZmxhZyAqLwogfTsKQEAgLTI4Myw4ICsyODIsOCBAQAogLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IGxtODVfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwljb25zdCBpbnQgKmZyZXFfbWFwOwogCWVudW0gY2hpcHMgdHlwZTsKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKQEAgLTMwMSw2ICszMDAsNyBAQAogCXUxNiBmYW5bNF07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwogCXUxNiBmYW5fbWluWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBwd21bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IHB3bV9mcmVxWzNdOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcgKi8KIAl1OCB0ZW1wX2V4dFszXTsJCS8qIERlY29kZWQgdmFsdWVzICovCiAJdTggaW5fZXh0WzhdOwkJLyogRGVjb2RlZCB2YWx1ZXMgKi8KIAl1OCB2aWQ7CQkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KQEAgLTMxMCwyMiArMzEwLDQwIEBACiAJc3RydWN0IGxtODVfem9uZSB6b25lWzNdOwogfTsKIAotc3RhdGljIGludCBsbTg1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsCi0JCQlpbnQga2luZCk7Ci1zdGF0aWMgaW50IGxtODVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgbG04NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCisJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOworc3RhdGljIGludCBsbTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGxtODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgaW50IGxtODVfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOwogc3RhdGljIHZvaWQgbG04NV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIGludCB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IGxtODVfZGF0YSAqbG04NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtODVfaWRbXSA9IHsKKwl7ICJhZG0xMDI3IiwgYWRtMTAyNyB9LAorCXsgImFkdDc0NjMiLCBhZHQ3NDYzIH0sCisJeyAibG04NSIsIGFueV9jaGlwIH0sCisJeyAibG04NWIiLCBsbTg1YiB9LAorCXsgImxtODVjIiwgbG04NWMgfSwKKwl7ICJlbWM2ZDEwMCIsIGVtYzZkMTAwIH0sCisJeyAiZW1jNmQxMDEiLCBlbWM2ZDEwMCB9LAorCXsgImVtYzZkMTAyIiwgZW1jNmQxMDIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG04NV9pZCk7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTg1X2RyaXZlciA9IHsKKwkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lICAgPSAibG04NSIsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBsbTg1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ICA9IGxtODVfZGV0YWNoX2NsaWVudCwKKwkucHJvYmUJCT0gbG04NV9wcm9iZSwKKwkucmVtb3ZlCQk9IGxtODVfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGxtODVfaWQsCisJLmRldGVjdAkJPSBsbTg1X2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIApAQCAtNTI4LDExICs1NDYsMzkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGxtODVfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGUkVRX0ZST01fUkVHKGRhdGEtPmZyZXFfbWFwLAorCQkJCQkJICBkYXRhLT5wd21fZnJlcVtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV9mcmVxW25yXSA9IEZSRVFfVE9fUkVHKGRhdGEtPmZyZXFfbWFwLCB2YWwpOworCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKKwkJKGRhdGEtPnpvbmVbbnJdLnJhbmdlIDw8IDQpCisJCXwgZGF0YS0+cHdtX2ZyZXFbbnJdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKICNkZWZpbmUgc2hvd19wd21fcmVnKG9mZnNldCkJCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0LCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKIAkJc2hvd19wd20sIHNldF9wd20sIG9mZnNldCAtIDEpOwkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwJXAotCQlzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCBvZmZzZXQgLSAxKQorCQlzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCBvZmZzZXQgLSAxKTsJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19mcmVxLCBTX0lSVUdPIHwgU19JV1VTUiwJXAorCQlzaG93X3B3bV9mcmVxLCBzZXRfcHdtX2ZyZXEsIG9mZnNldCAtIDEpCiAKIHNob3dfcHdtX3JlZygxKTsKIHNob3dfcHdtX3JlZygyKTsKQEAgLTc2MSwzMSArODA3LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2F1dG9fcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGxtODVfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGUkVRX0ZST01fUkVHKGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEpKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9hdXRvX3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgPSBGUkVRX1RPX1JFRyh2YWwpOwotCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKLQkJKGRhdGEtPnpvbmVbbnJdLnJhbmdlIDw8IDQpCi0JCXwgZGF0YS0+YXV0b2Zhbltucl0uZnJlcSk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCiAjZGVmaW5lIHB3bV9hdXRvKG9mZnNldCkJCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfYXV0b19jaGFubmVscywJCQlcCiAJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX2NoYW5uZWxzLAkJXApAQCAtNzk1LDEwICs4MTYsNyBAQAogCQlzZXRfcHdtX2F1dG9fcHdtX21pbiwgb2Zmc2V0IC0gMSk7CQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2F1dG9fcHdtX21pbmN0bCwJCVwKIAkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtX2F1dG9fcHdtX21pbmN0bCwJCVwKLQkJc2V0X3B3bV9hdXRvX3B3bV9taW5jdGwsIG9mZnNldCAtIDEpOwkJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19hdXRvX3B3bV9mcmVxLAkJCVwKLQkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtX2F1dG9fcHdtX2ZyZXEsCQlcCi0JCXNldF9wd21fYXV0b19wd21fZnJlcSwgb2Zmc2V0IC0gMSk7CisJCXNldF9wd21fYXV0b19wd21fbWluY3RsLCBvZmZzZXQgLSAxKQogCiBwd21fYXV0bygxKTsKIHB3bV9hdXRvKDIpOwpAQCAtODY3LDcgKzg4NSw3IEBACiAJCVRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZVtucl0ubGltaXQpKTsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCiAJCSgoZGF0YS0+em9uZVtucl0ucmFuZ2UgJiAweDBmKSA8PCA0KQotCQl8IChkYXRhLT5hdXRvZmFuW25yXS5mcmVxICYgMHgwNykpOworCQl8IChkYXRhLT5wd21fZnJlcVtucl0gJiAweDA3KSk7CiAKIC8qIFVwZGF0ZSB0ZW1wX2F1dG9faHlzdCBhbmQgdGVtcF9hdXRvX29mZiAqLwogCWRhdGEtPnpvbmVbbnJdLmh5c3QgPSBIWVNUX1RPX1JFRyhURU1QX0ZST01fUkVHKApAQCAtOTEwLDcgKzkyOCw3IEBACiAJCXZhbCAtIG1pbik7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fUkFOR0UobnIpLAogCQkoKGRhdGEtPnpvbmVbbnJdLnJhbmdlICYgMHgwZikgPDwgNCkKLQkJfCAoZGF0YS0+YXV0b2Zhbltucl0uZnJlcSAmIDB4MDcpKTsKKwkJfCAoZGF0YS0+cHdtX2ZyZXFbbnJdICYgMHgwNykpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTk1NywxMyArOTc1LDYgQEAKIHRlbXBfYXV0bygyKTsKIHRlbXBfYXV0bygzKTsKIAotc3RhdGljIGludCBsbTg1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbG04NV9kZXRlY3QpOwotfQotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04NV9hdHRyaWJ1dGVzW10gPSB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCkBAIC05ODQsNiArOTk1LDkgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZnJlcS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2ZyZXEuZGV2X2F0dHIuYXR0ciwKIAogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKQEAgLTEwMjYsOSArMTA0MCw2IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX2ZyZXEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wd21fZnJlcS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3B3bV9mcmVxLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2F1dG9fdGVtcF9vZmYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fdGVtcF9vZmYuZGV2X2F0dHIuYXR0ciwKQEAgLTExMDMsMTA5ICsxMTE0LDc0IEBACiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkRldmljZSBpcyBub3QgcmVhZHlcbiIpOwogfQogCi1zdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsCi0JCWludCBraW5kKQorLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewotCWludCBjb21wYW55LCB2ZXJzdGVwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YTsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJaW50IGFkZHJlc3MgPSBjbGllbnQtPmFkZHI7CiAJY29uc3QgY2hhciAqdHlwZV9uYW1lOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCS8qIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBkbyBieXRlIEkvTyAqLwotCQlnb3RvIEVSUk9SMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKLQkgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KLQkgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBsbTg1X3tyZWFkLHdyaXRlfV92YWx1ZS4gKi8KKwkvKiBJZiBhdXRvLWRldGVjdGluZywgZGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUgKi8KKwlpZiAoa2luZCA8IDApIHsKKwkJaW50IGNvbXBhbnkgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19DT01QQU5ZKTsKKwkJaW50IHZlcnN0ZXAgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19WRVJTVEVQKTsKIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG04NV9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1IwOwotCX0KKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW5nIGRldmljZSBhdCAweCUwMnggd2l0aCAiCisJCQkiQ09NUEFOWTogMHglMDJ4IGFuZCBWRVJTVEVQOiAweCUwMnhcbiIsCisJCQlhZGRyZXNzLCBjb21wYW55LCB2ZXJzdGVwKTsKIAotCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmxtODVfZHJpdmVyOworCQkvKiBBbGwgc3VwcG9ydGVkIGNoaXBzIGhhdmUgdGhlIHZlcnNpb24gaW4gY29tbW9uICovCisJCWlmICgodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgIT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkOiAiCisJCQkJInVuc3VwcG9ydGVkIHZlcnNpb25cbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJa2luZCA9IGFueV9jaGlwOwogCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KLQotCWNvbXBhbnkgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19DT01QQU5ZKTsKLQl2ZXJzdGVwID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVkVSU1RFUCk7Ci0KLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3RpbmcgZGV2aWNlIGF0ICVkLDB4JTAyeCB3aXRoIgotCQkiIENPTVBBTlk6IDB4JTAyeCBhbmQgVkVSU1RFUDogMHglMDJ4XG4iLAotCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIsCi0JCWNvbXBhbnksIHZlcnN0ZXApOwotCi0JLyogSWYgYXV0by1kZXRlY3RpbmcsIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwotCWlmIChraW5kIDw9IDApIHsKLQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiQXV0b2RldGVjdGluZyBkZXZpY2UgYXQgJWQsMHglMDJ4IC4uLlxuIiwKLQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKLQkJaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9MTTg1QykgewotCQkJa2luZCA9IGxtODVjOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9MTTg1QikgewotCQkJa2luZCA9IGxtODViOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCB2ZXJzaW9uL3N0ZXBwaW5nIDB4JTAyeCIKLQkJCQkiIERlZmF1bHRpbmcgdG8gTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYKLQkJICAgICYmIHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0FETTEwMjcpIHsKLQkJCWtpbmQgPSBhZG0xMDI3OwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYKLQkJICAgICYmICh2ZXJzdGVwID09IExNODVfVkVSU1RFUF9BRFQ3NDYzCi0JCQkgfHwgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfQURUNzQ2M0MpKSB7Ci0JCQlraW5kID0gYWR0NzQ2MzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCB2ZXJzaW9uL3N0ZXBwaW5nIDB4JTAyeCIKLQkJCQkiIERlZmF1bHRpbmcgdG8gR2VuZXJpYyBMTTg1LlxuIiwgdmVyc3RlcCk7Ci0JCQlraW5kID0gYW55X2NoaXA7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgKHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAwX0EwCi0JCQkgfHwgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTEpKSB7Ci0JCQkvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCB0ZWxsIGEgJzEwMCBmcm9tIGEgJzEwMQotCQkJICogZnJvbSB0aGUgcmVnaXN0ZXJzLiAgU2luY2UgYSAnMTAxIGlzIGEgJzEwMAotCQkJICogaW4gYSBwYWNrYWdlIHdpdGggZmV3ZXIgcGlucyBhbmQgdGhlcmVmb3JlIG5vCi0JCQkgKiAzLjNWLCAxLjVWIG9yIDEuOFYgaW5wdXRzLCBwZXJoYXBzIGlmIHRob3NlCi0JCQkgKiBpbnB1dHMgcmVhZCAwLCB0aGVuIGl0J3MgYSAnMTAxLgotCQkJICovCi0JCQlraW5kID0gZW1jNmQxMDA7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfRU1DNkQxMDIpIHsKLQkJCWtpbmQgPSBlbWM2ZDEwMjsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9TTVNDCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgImxtODU6IERldGVjdGVkIFNNU0MgY2hpcFxuIik7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJsbTg1OiBVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkgICAgIiBEZWZhdWx0aW5nIHRvIEdlbmVyaWMgTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGtpbmQgPT0gYW55X2NoaXAKLQkJICAgICYmICh2ZXJzdGVwICYgTE04NV9WRVJTVEVQX1ZNQVNLKSA9PSBMTTg1X1ZFUlNURVBfR0VORVJJQykgewotCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiR2VuZXJpYyBMTTg1IFZlcnNpb24gNiBkZXRlY3RlZFxuIik7Ci0JCQkvKiBMZWF2ZSBraW5kIGFzICJhbnlfY2hpcCIgKi8KLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkXG4iKTsKLQkJCS8qIE5vdCBhbiBMTTg1Li4uICovCi0JCQlpZiAoa2luZCA9PSBhbnlfY2hpcCkgeyAgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwotCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgTE04NSBWZXJzaW9uIDYgbm90IgotCQkJCQkiIGZvdW5kIGF0ICVkLDB4JTAyeC4gVHJ5IGZvcmNlX2xtODVjLlxuIiwKLQkJCQkJaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGFkZHJlc3MpOworCQkvKiBOb3csIHJlZmluZSB0aGUgZGV0ZWN0aW9uICovCisJCWlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTCkgeworCQkJc3dpdGNoICh2ZXJzdGVwKSB7CisJCQljYXNlIExNODVfVkVSU1RFUF9MTTg1QzoKKwkJCQlraW5kID0gbG04NWM7CisJCQkJYnJlYWs7CisJCQljYXNlIExNODVfVkVSU1RFUF9MTTg1QjoKKwkJCQlraW5kID0gbG04NWI7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSAwOwotCQkJZ290byBFUlJPUjE7CisJCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfQU5BTE9HX0RFVikgeworCQkJc3dpdGNoICh2ZXJzdGVwKSB7CisJCQljYXNlIExNODVfVkVSU1RFUF9BRE0xMDI3OgorCQkJCWtpbmQgPSBhZG0xMDI3OworCQkJCWJyZWFrOworCQkJY2FzZSBMTTg1X1ZFUlNURVBfQURUNzQ2MzoKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0FEVDc0NjNDOgorCQkJCWtpbmQgPSBhZHQ3NDYzOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTA6CisJCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwMF9BMToKKwkJCQkvKiBOb3RlOiB3ZSBjYW4ndCB0ZWxsIGEgJzEwMCBmcm9tIGEgJzEwMSAqLworCQkJCWtpbmQgPSBlbWM2ZDEwMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAyOgorCQkJCWtpbmQgPSBlbWM2ZDEwMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkOiAiCisJCQkJInVua25vd24gdmVuZG9yXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JLyogRmlsbCBpbiB0aGUgY2hpcCBzcGVjaWZpYyBkcml2ZXIgdmFsdWVzICovCiAJc3dpdGNoIChraW5kKSB7CiAJY2FzZSBsbTg1YjoKIAkJdHlwZV9uYW1lID0gImxtODViIjsKQEAgLTEyMjgsMTYgKzEyMDQsMzYgQEAKIAlkZWZhdWx0OgogCQl0eXBlX25hbWUgPSAibG04NSI7CiAJfQotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCB0eXBlX25hbWUsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaW5mby0+dHlwZSwgdHlwZV9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCi0JZGF0YS0+dHlwZSA9IGtpbmQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG04NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTg1X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKLQkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIEVSUk9SMTsKKwkvKiBGaWxsIGluIHRoZSBjaGlwIHNwZWNpZmljIGRyaXZlciB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKwljYXNlIGFkbTEwMjc6CisJY2FzZSBhZHQ3NDYzOgorCWNhc2UgZW1jNmQxMDA6CisJY2FzZSBlbWM2ZDEwMjoKKwkJZGF0YS0+ZnJlcV9tYXAgPSBhZG0xMDI3X2ZyZXFfbWFwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhLT5mcmVxX21hcCA9IGxtODVfZnJlcV9tYXA7CisJfQogCiAJLyogU2V0IHRoZSBWUk0gdmVyc2lvbiAqLwogCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKQEAgLTEyNDgsNDUgKzEyNDQsNDIgQEAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXApOwogCWlmIChlcnIpCi0JCWdvdG8gRVJST1IyOworCQlnb3RvIGVycl9rZnJlZTsKIAogCS8qIFRoZSBBRFQ3NDYzIGhhcyBhbiBvcHRpb25hbCBWUk0gMTAgbW9kZSB3aGVyZSBwaW4gMjEgaXMgdXNlZAogCSAgIGFzIGEgc2l4dGggZGlnaXRhbCBWSUQgaW5wdXQgcmF0aGVyIHRoYW4gYW4gYW5hbG9nIGlucHV0LiAqLwogCWRhdGEtPnZpZCA9IGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX1ZJRCk7Ci0JaWYgKCEoa2luZCA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkpCisJaWYgKCEoZGF0YS0+dHlwZSA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkpCiAJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAogCQkJCQkmbG04NV9ncm91cF9pbjQpKSkKLQkJCWdvdG8gRVJST1IzOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCiAJLyogVGhlIEVNQzZEMTAwIGhhcyAzIGFkZGl0aW9uYWwgdm9sdGFnZSBpbnB1dHMgKi8KLQlpZiAoa2luZCA9PSBlbWM2ZDEwMCkKKwlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCiAJCQkJCSZsbTg1X2dyb3VwX2luNTY3KSkpCi0JCQlnb3RvIEVSUk9SMzsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAogCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gRVJST1IzOworCQlnb3RvIGVycl9yZW1vdmVfZmlsZXM7CiAJfQogCiAJcmV0dXJuIDA7CiAKIAkvKiBFcnJvciBvdXQgYW5kIGNsZWFudXAgY29kZSAqLwotIEVSUk9SMzoKKyBlcnJfcmVtb3ZlX2ZpbGVzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW40KTsKLQlpZiAoa2luZCA9PSBlbWM2ZDEwMCkKKwlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjU2Nyk7Ci0gRVJST1IyOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0gRVJST1IxOgorIGVycl9rZnJlZToKIAlrZnJlZShkYXRhKTsKLSBFUlJPUjA6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsbTg1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgbG04NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKQEAgLTEyOTQsNyArMTI4Nyw2IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjQpOwogCWlmIChkYXRhLT50eXBlID09IGVtYzZkMTAwKQogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwX2luNTY3KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQpAQCAtMTQ4MSw3ICsxNDczLDcgQEAKIAkJCWRhdGEtPmF1dG9mYW5baV0uY29uZmlnID0KIAkJCSAgICBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX0NPTkZJRyhpKSk7CiAJCQl2YWwgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKGkpKTsKLQkJCWRhdGEtPmF1dG9mYW5baV0uZnJlcSA9IHZhbCAmIDB4MDc7CisJCQlkYXRhLT5wd21fZnJlcVtpXSA9IHZhbCAmIDB4MDc7CiAJCQlkYXRhLT56b25lW2ldLnJhbmdlID0gdmFsID4+IDQ7CiAJCQlkYXRhLT5hdXRvZmFuW2ldLm1pbl9wd20gPQogCQkJICAgIGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fTUlOUFdNKGkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggMjE5NzBmMC4uMmU0YTNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTIxLDExICsyMSwxMCBAQAogICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg3Lmh0bWwKICAqCiAgKiBTb21lIGZ1bmN0aW9ucyBzaGFyZSBwaW5zLCBzbyBub3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lCi0gKiB0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhhdAotICogdGhlIEJJT1MgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIEluIHRoYXQgcmVzcGVjdCwgaXQgIGRpZmZlcnMgZnJvbQotICogdGhlIG9yaWdpbmFsIGRyaXZlciAoZnJvbSBsbV9zZW5zb3JzIGZvciBMaW51eCAyLjQpLCB3aGljaCB3b3VsZCBmb3JjZSB0aGUKLSAqIExNODcgdG8gYW4gYXJiaXRyYXJ5LCBjb21waWxlLXRpbWUgY2hvc2VuIG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbAotICogY2hpcHNldCB3aXJpbmcuCisgKiB0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIG5vcm1hbGx5CisgKiBhc3N1bWVzIHRoYXQgZmlybXdhcmUgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIFdoZXJlIHRoaXMgaXMgbm90CisgKiB0aGUgY2FzZSwgcGxhdGZvcm0gY29kZSBtdXN0IHNldCB0aGUgSTJDIGNsaWVudCdzIHBsYXRmb3JtX2RhdGEgdG8gcG9pbnQKKyAqIHRvIGEgdTggdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2hhbm5lbCByZWdpc3Rlci4KICAqIEZvciByZWZlcmVuY2UsIGhlcmUgaXMgdGhlIGxpc3Qgb2YgZXhjbHVzaXZlIGZ1bmN0aW9uczoKICAqICAtIGluMCtpbjUgKGRlZmF1bHQpIG9yIHRlbXAzCiAgKiAgLSBmYW4xIChkZWZhdWx0KSBvciBpbjYKQEAgLTE5OSw2ICsxOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBJbiBqaWZmaWVzICovCiAKIAl1OCBjaGFubmVsOwkJLyogcmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBjb25maWc7CQkvKiBvcmlnaW5hbCByZWdpc3RlciB2YWx1ZSAqLwogCiAJdTggaW5bOF07CQkvKiByZWdpc3RlciB2YWx1ZSAqLwogCXU4IGluX21heFs4XTsJCS8qIHJlZ2lzdGVyIHZhbHVlICovCkBAIC04MzIsNiArODMyLDcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG04N19ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXBfb3B0KTsKIGV4aXRfZnJlZToKKwlsbTg3X3dyaXRlX3ZhbHVlKG5ld19jbGllbnQsIExNODdfUkVHX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKIAlrZnJlZShkYXRhKTsKIGV4aXQ6CiAJcmV0dXJuIGVycjsKQEAgLTg0MCwxMiArODQxLDE3IEBACiBzdGF0aWMgdm9pZCBsbTg3X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGxtODdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXU4IGNvbmZpZzsKIAotCWRhdGEtPmNoYW5uZWwgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DSEFOTkVMX01PREUpOworCWlmIChjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWRhdGEtPmNoYW5uZWwgPSAqKHU4ICopY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJbG04N193cml0ZV92YWx1ZShjbGllbnQsCisJCQkJIExNODdfUkVHX0NIQU5ORUxfTU9ERSwgZGF0YS0+Y2hhbm5lbCk7CisJfSBlbHNlIHsKKwkJZGF0YS0+Y2hhbm5lbCA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NIQU5ORUxfTU9ERSk7CisJfQorCWRhdGEtPmNvbmZpZyA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NPTkZJRykgJiAweDZGOwogCi0JY29uZmlnID0gbG04N19yZWFkX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHKTsKLQlpZiAoIShjb25maWcgJiAweDAxKSkgeworCWlmICghKGRhdGEtPmNvbmZpZyAmIDB4MDEpKSB7CiAJCWludCBpOwogCiAJCS8qIExpbWl0cyBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFmdGVyIHBvd2VyLXVwICovCkBAIC04NjcsMTEgKzg3MywxMSBAQAogCQkJbG04N193cml0ZV92YWx1ZShjbGllbnQsIExNODdfUkVHX0lOX01BWCgwKSwgMHhGRik7CiAJCX0KIAl9Ci0JaWYgKChjb25maWcgJiAweDgxKSAhPSAweDAxKSB7Ci0JCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KKworCS8qIE1ha2Ugc3VyZSBTdGFydCBpcyBzZXQgYW5kIElOVCNfQ2xlYXIgaXMgY2xlYXIgKi8KKwlpZiAoKGRhdGEtPmNvbmZpZyAmIDB4MDkpICE9IDB4MDEpCiAJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcsCi0JCQkJIChjb25maWcgJiAweEY3KSB8IDB4MDEpOwotCX0KKwkJCQkgKGRhdGEtPmNvbmZpZyAmIDB4NzcpIHwgMHgwMSk7CiB9CiAKIHN0YXRpYyBpbnQgbG04N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTg4Miw2ICs4ODgsNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXBfb3B0KTsKIAorCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGMyNGZlMzYuLjNlZGVlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC0xLDE0ICsxLDEyIEBACiAvKgogICogbG05MC5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKICAqICAgICAgICAgIG1vbml0b3JpbmcKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAqCiAgKiBCYXNlZCBvbiB0aGUgbG04MyBkcml2ZXIuIFRoZSBMTTkwIGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbAogICogU2VtaWNvbmR1Y3Rvci4gSXQgcmVwb3J0cyB1cCB0byB0d28gdGVtcGVyYXR1cmVzIChpdHMgb3duIHBsdXMgdXAgdG8KICAqIG9uZSBleHRlcm5hbCBvbmUpIHdpdGggYSAwLjEyNSBkZWcgcmVzb2x1dGlvbiAoMSBkZWcgZm9yIGxvY2FsCi0gKiB0ZW1wZXJhdHVyZSkgYW5kIGEgMy00IGRlZyBhY2N1cmFjeS4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZQotICogb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNOTAuaHRtbAorICogdGVtcGVyYXR1cmUpIGFuZCBhIDMtNCBkZWcgYWNjdXJhY3kuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTE04OSBhbmQgTE05OSwgdHdvIG90aGVyIHNlbnNvciBjaGlwcwogICogbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9yLiBCb3RoIGhhdmUgYW4gaW5jcmVhc2VkIHJlbW90ZQpAQCAtMTYsNDggKzE0LDM4IEBACiAgKiBhZGRpdGlvbmFsbHkgc2hpZnRzIHJlbW90ZSB0ZW1wZXJhdHVyZXMgKG1lYXN1cmVkIGFuZCBsaW1pdHMpIGJ5IDE2CiAgKiBkZWdyZWVzLCB3aGljaCBhbGxvd3MgZm9yIGhpZ2hlciB0ZW1wZXJhdHVyZXMgbWVhc3VyZW1lbnQuIFRoZQogICogZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIGl0IHNpbmNlIGl0IGNhbiBiZSBkb25lIGVhc2lseSBpbiB1c2VyLXNwYWNlLgotICogQ29tcGxldGUgZGF0YXNoZWV0cyBjYW4gYmUgb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODkuaHRtbAotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTk5Lmh0bWwKICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJvdGggY2hpcHMuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTE04NiwgYW5vdGhlciBzZW5zb3IgY2hpcCBtYWRlIGJ5CiAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yLiBJdCBpcyBleGFjdGx5IHNpbWlsYXIgdG8gdGhlIExNOTAgZXhjZXB0IGl0CiAgKiBoYXMgYSBoaWdoZXIgYWNjdXJhY3kuCi0gKiBDb21wbGV0ZSBkYXRhc2hlZXQgY2FuIGJlIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg2Lmh0bWwKICAqCiAgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRE0xMDMyLCBhIHNlbnNvciBjaGlwIG1hZGUgYnkgQW5hbG9nCiAgKiBEZXZpY2VzLiBUaGF0IGNoaXAgaXMgc2ltaWxhciB0byB0aGUgTE05MCwgd2l0aCBhIGZldyBkaWZmZXJlbmNlcwotICogdGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUKLSAqIG9idGFpbmVkIGZyb20gQW5hbG9nJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFETTEwMzIsMDAuaHRtbAotICogQW1vbmcgb3RoZXJzLCBpdCBoYXMgYSBoaWdoZXIgYWNjdXJhY3kgdGhhbiB0aGUgTE05MCwgbXVjaCBsaWtlIHRoZQotICogTE04NiBkb2VzLgorICogdGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIuIEFtb25nIG90aGVycywgaXQgaGFzIGEgaGlnaGVyCisgKiBhY2N1cmFjeSB0aGFuIHRoZSBMTTkwLCBtdWNoIGxpa2UgdGhlIExNODYgZG9lcy4KICAqCiAgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNQVg2NjU3LCBNQVg2NjU4IGFuZCBNQVg2NjU5IHNlbnNvcgotICogY2hpcHMgbWFkZSBieSBNYXhpbS4gVGhlc2UgY2hpcHMgYXJlIHNpbWlsYXIgdG8gdGhlIExNODYuIENvbXBsZXRlCi0gKiBkYXRhc2hlZXQgY2FuIGJlIG9idGFpbmVkIGF0IE1heGltJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzI1NzgKKyAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGNoaXBzIGFyZSBzaW1pbGFyIHRvIHRoZSBMTTg2LgogICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdGhyZWUKICAqIHZhcmlhbnRzLiBUaGUgZXh0cmEgYWRkcmVzcyBhbmQgZmVhdHVyZXMgb2YgdGhlIE1BWDY2NTkgYXJlIG5vdAogICogc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGVzZSBjaGlwcyBsYWNrIHRoZSByZW1vdGUgdGVtcGVyYXR1cmUKICAqIG9mZnNldCBmZWF0dXJlLgogICoKKyAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2NDYsIE1BWDY2NDcgYW5kIE1BWDY2NDkgY2hpcHMKKyAqIG1hZGUgYnkgTWF4aW0uICBUaGVzZSBhcmUgYWdhaW4gc2ltaWxhciB0byB0aGUgTE04NiwgYnV0IHRoZXkgdXNlCisgKiB1bnNpZ25lZCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYW5kIGNhbiByZXBvcnQgdGVtcGVyYXR1cmVzIGZyb20gMCB0bworICogMTQ1IGRlZ3JlZXMuCisgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY4MCBhbmQgTUFYNjY4MSwgdHdvIG90aGVyIHNlbnNvcgogICogY2hpcHMgbWFkZSBieSBNYXhpbS4gVGhlc2UgYXJlIHF1aXRlIHNpbWlsYXIgdG8gdGhlIG90aGVyIE1heGltCi0gKiBjaGlwcy4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBhdDoKLSAqICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzMzNzAKLSAqIFRoZSBNQVg2NjgwIGFuZCBNQVg2NjgxIG9ubHkgZGlmZmVyIGluIHRoZSBwaW5vdXQgc28gdGhleSBjYW4gYmUKLSAqIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCisgKiBjaGlwcy4gVGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEgb25seSBkaWZmZXIgaW4gdGhlIHBpbm91dCBzbyB0aGV5IGNhbgorICogYmUgdHJlYXRlZCBpZGVudGljYWxseS4KICAqCi0gKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRFQ3NDYxIGNoaXAgZnJvbSBBbmFsb2cgRGV2aWNlcyBidXQKLSAqIG9ubHkgaW4gaXRzICJjb21wYXRhYmlsaXR5IG1vZGUiLiBJZiBhbiBBRFQ3NDYxIGNoaXAgaXMgZm91bmQgYnV0Ci0gKiBpcyBjb25maWd1cmVkIGluIG5vbi1jb21wYXRpYmxlIG1vZGUgKHdoZXJlIGl0cyB0ZW1wZXJhdHVyZQotICogcmVnaXN0ZXIgdmFsdWVzIGFyZSBkZWNvZGVkIGRpZmZlcmVudGx5KSBpdCBpcyBpZ25vcmVkIGJ5IHRoaXMKLSAqIGRyaXZlci4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIEFuYWxvZydzIHdlYnNpdGUKLSAqIGF0OgotICogICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURUNzQ2MSwwMC5odG1sCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRFQ3NDYxIGNoaXAgZnJvbSBBbmFsb2cgRGV2aWNlcy4KKyAqIEl0J3Mgc3VwcG9ydGVkIGluIGJvdGggY29tcGF0aWJpbGl0eSBhbmQgZXh0ZW5kZWQgbW9kZS4gSXQgaXMgbW9zdGx5CisgKiBjb21wYXRpYmxlIHdpdGggTE05MCBleGNlcHQgZm9yIGEgZGF0YSBmb3JtYXQgZGlmZmVyZW5jZSBmb3IgdGhlCisgKiB0ZW1wZXJhdHVyZSB2YWx1ZSByZWdpc3RlcnMuCiAgKgogICogU2luY2UgdGhlIExNOTAgd2FzIHRoZSBmaXJzdCBjaGlwc2V0IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgbW9zdAogICogY29tbWVudHMgd2lsbCByZWZlciB0byB0aGlzIGNoaXBzZXQsIGJ1dCBhcmUgYWN0dWFsbHkgZ2VuZXJhbCBhbmQKQEAgLTkzLDkgKzgxLDEwIEBACiAgKiBBZGRyZXNzZXMgdG8gc2NhbgogICogQWRkcmVzcyBpcyBmdWxseSBkZWZpbmVkIGludGVybmFsbHkgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIGV4Y2VwdCBmb3IKICAqIE1BWDY2NTksIE1BWDY2ODAgYW5kIE1BWDY2ODEuCi0gKiBMTTg2LCBMTTg5LCBMTTkwLCBMTTk5LCBBRE0xMDMyLCBBRE0xMDMyLTEsIEFEVDc0NjEsIE1BWDY2NTcgYW5kIE1BWDY2NTgKLSAqIGhhdmUgYWRkcmVzcyAweDRjLgotICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIExNODktMSwgYW5kIExNOTktMSBoYXZlIGFkZHJlc3MgMHg0ZC4KKyAqIExNODYsIExNODksIExNOTAsIExNOTksIEFETTEwMzIsIEFETTEwMzItMSwgQURUNzQ2MSwgTUFYNjY0OSwgTUFYNjY1NworICogYW5kIE1BWDY2NTggaGF2ZSBhZGRyZXNzIDB4NGMuCisgKiBBRE0xMDMyLTIsIEFEVDc0NjEtMiwgTE04OS0xLCBMTTk5LTEgYW5kIE1BWDY2NDYgaGF2ZSBhZGRyZXNzIDB4NGQuCisgKiBNQVg2NjQ3IGhhcyBhZGRyZXNzIDB4NGUuCiAgKiBNQVg2NjU5IGNhbiBoYXZlIGFkZHJlc3MgMHg0YywgMHg0ZCBvciAweDRlICh1bnN1cHBvcnRlZCkuCiAgKiBNQVg2NjgwIGFuZCBNQVg2NjgxIGNhbiBoYXZlIGFkZHJlc3MgMHgxOCwgMHgxOSwgMHgxYSwgMHgyOSwgMHgyYSwgMHgyYiwKICAqIDB4NGMsIDB4NGQgb3IgMHg0ZS4KQEAgLTEwOCw3ICs5Nyw4IEBACiAgKiBJbnNtb2QgcGFyYW1ldGVycwogICovCiAKLUkyQ19DTElFTlRfSU5TTU9EXzcobG05MCwgYWRtMTAzMiwgbG05OSwgbG04NiwgbWF4NjY1NywgYWR0NzQ2MSwgbWF4NjY4MCk7CitJMkNfQ0xJRU5UX0lOU01PRF84KGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODAsCisJCSAgICBtYXg2NjQ2KTsKIAogLyoKICAqIFRoZSBMTTkwIHJlZ2lzdGVycwpAQCAtMTQ5LDM5ICsxMzksMTQgQEAKICNkZWZpbmUgTE05MF9SRUdfUl9UQ1JJVF9IWVNUCQkweDIxCiAjZGVmaW5lIExNOTBfUkVHX1dfVENSSVRfSFlTVAkJMHgyMQogCisvKiBNQVg2NjQ2LzY2NDcvNjY0OS82NjU3LzY2NTgvNjY1OSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBNQVg2NjU3X1JFR19SX0xPQ0FMX1RFTVBMCTB4MTEKKwogLyoKLSAqIENvbnZlcnNpb25zIGFuZCB2YXJpb3VzIG1hY3JvcwotICogRm9yIGxvY2FsIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBjcml0aWNhbCBsaW1pdHMgYW5kIHRoZSBoeXN0ZXJlc2lzCi0gKiB2YWx1ZSwgdGhlIExNOTAgdXNlcyBzaWduZWQgOC1iaXQgdmFsdWVzIHdpdGggTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cy4KLSAqIEZvciByZW1vdGUgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGl0IHVzZXMgc2lnbmVkIDExLWJpdCB2YWx1ZXMgd2l0aAotICogTFNCID0gMC4xMjUgZGVncmVlIENlbHNpdXMsIGxlZnQtanVzdGlmaWVkIGluIDE2LWJpdCByZWdpc3RlcnMuCisgKiBEZXZpY2UgZmxhZ3MKICAqLwotCi0jZGVmaW5lIFRFTVAxX0ZST01fUkVHKHZhbCkJKCh2YWwpICogMTAwMCkKLSNkZWZpbmUgVEVNUDFfVE9fUkVHKHZhbCkJKCh2YWwpIDw9IC0xMjgwMDAgPyAtMTI4IDogXAotCQkJCSAodmFsKSA+PSAxMjcwMDAgPyAxMjcgOiBcCi0JCQkJICh2YWwpIDwgMCA/ICgodmFsKSAtIDUwMCkgLyAxMDAwIDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLSNkZWZpbmUgVEVNUDJfRlJPTV9SRUcodmFsKQkoKHZhbCkgLyAzMiAqIDEyNSkKLSNkZWZpbmUgVEVNUDJfVE9fUkVHKHZhbCkJKCh2YWwpIDw9IC0xMjgwMDAgPyAweDgwMDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzg3NSA/IDB4N0ZFMCA6IFwKLQkJCQkgKHZhbCkgPCAwID8gKCh2YWwpIC0gNjIpIC8gMTI1ICogMzIgOiBcCi0JCQkJICgodmFsKSArIDYyKSAvIDEyNSAqIDMyKQotI2RlZmluZSBIWVNUX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAwID8gMCA6ICh2YWwpID49IDMwNTAwID8gMzEgOiBcCi0JCQkJICgodmFsKSArIDUwMCkgLyAxMDAwKQotCi0vKiAKLSAqIEFEVDc0NjEgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMTTkwIGV4Y2VwdCB0aGF0IGF0dGVtcHRzIHRvIHdyaXRlCi0gKiB2YWx1ZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgcmFuZ2UgMCA8IHRlbXAgPCAxMjcgYXJlIHRyZWF0ZWQgYXMKLSAqIHRoZSBib3VuZGFyeSB2YWx1ZS4gCi0gKi8KLQotI2RlZmluZSBURU1QMV9UT19SRUdfQURUNzQ2MSh2YWwpICgodmFsKSA8PSAwID8gMCA6IFwKLQkJCQkgKHZhbCkgPj0gMTI3MDAwID8gMTI3IDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLSNkZWZpbmUgVEVNUDJfVE9fUkVHX0FEVDc0NjEodmFsKSAoKHZhbCkgPD0gMCA/IDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzc1MCA/IDB4N0ZDMCA6IFwKLQkJCQkgKCh2YWwpICsgMTI1KSAvIDI1MCAqIDY0KQorI2RlZmluZSBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQJCTB4MDEJLyogQURUNzQ2MSBleHRlbmRlZCBtb2RlICovCiAKIC8qCiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KQEAgLTIwNiw2ICsxNzEsOSBAQAogCXsgImxtODYiLCBsbTg2IH0sCiAJeyAibG04OSIsIGxtOTkgfSwKIAl7ICJsbTk5IiwgbG05OSB9LAkvKiBNaXNzaW5nIHRlbXBlcmF0dXJlIG9mZnNldCAqLworCXsgIm1heDY2NDYiLCBtYXg2NjQ2IH0sCisJeyAibWF4NjY0NyIsIG1heDY2NDYgfSwKKwl7ICJtYXg2NjQ5IiwgbWF4NjY0NiB9LAogCXsgIm1heDY2NTciLCBtYXg2NjU3IH0sCiAJeyAibWF4NjY1OCIsIG1heDY2NTcgfSwKIAl7ICJtYXg2NjU5IiwgbWF4NjY1NyB9LApAQCAtMjM3LDIyICsyMDUsMTUwIEBACiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAJaW50IGtpbmQ7CisJaW50IGZsYWdzOwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwotCXM4IHRlbXA4WzVdOwkvKiAwOiBsb2NhbCBpbnB1dAotCQkJICAgMTogbG9jYWwgbG93IGxpbWl0Ci0JCQkgICAyOiBsb2NhbCBoaWdoIGxpbWl0Ci0JCQkgICAzOiBsb2NhbCBjcml0aWNhbCBsaW1pdAotCQkJICAgNDogcmVtb3RlIGNyaXRpY2FsIGxpbWl0ICovCi0JczE2IHRlbXAxMVs0XTsJLyogMDogcmVtb3RlIGlucHV0CisJczggdGVtcDhbNF07CS8qIDA6IGxvY2FsIGxvdyBsaW1pdAorCQkJICAgMTogbG9jYWwgaGlnaCBsaW1pdAorCQkJICAgMjogbG9jYWwgY3JpdGljYWwgbGltaXQKKwkJCSAgIDM6IHJlbW90ZSBjcml0aWNhbCBsaW1pdCAqLworCXMxNiB0ZW1wMTFbNV07CS8qIDA6IHJlbW90ZSBpbnB1dAogCQkJICAgMTogcmVtb3RlIGxvdyBsaW1pdAogCQkJICAgMjogcmVtb3RlIGhpZ2ggbGltaXQKLQkJCSAgIDM6IHJlbW90ZSBvZmZzZXQgKGV4Y2VwdCBtYXg2NjU3KSAqLworCQkJICAgMzogcmVtb3RlIG9mZnNldCAoZXhjZXB0IG1heDY2NDYgYW5kIG1heDY2NTcpCisJCQkgICA0OiBsb2NhbCBpbnB1dCAqLwogCXU4IHRlbXBfaHlzdDsKIAl1OCBhbGFybXM7IC8qIGJpdHZlY3RvciAqLwogfTsKIAogLyoKKyAqIENvbnZlcnNpb25zCisgKiBGb3IgbG9jYWwgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGNyaXRpY2FsIGxpbWl0cyBhbmQgdGhlIGh5c3RlcmVzaXMKKyAqIHZhbHVlLCB0aGUgTE05MCB1c2VzIHNpZ25lZCA4LWJpdCB2YWx1ZXMgd2l0aCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzLgorICogRm9yIHJlbW90ZSB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cywgaXQgdXNlcyBzaWduZWQgMTEtYml0IHZhbHVlcyB3aXRoCisgKiBMU0IgPSAwLjEyNSBkZWdyZWUgQ2Vsc2l1cywgbGVmdC1qdXN0aWZpZWQgaW4gMTYtYml0IHJlZ2lzdGVycy4gIFNvbWUKKyAqIE1heGltIGNoaXBzIHVzZSB1bnNpZ25lZCB2YWx1ZXMuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3M4KHM4IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMTAwMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3U4KHU4IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMTAwMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3MxNihzMTYgdmFsKQoreworCXJldHVybiB2YWwgLyAzMiAqIDEyNTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3UxNih1MTYgdmFsKQoreworCXJldHVybiB2YWwgLyAzMiAqIDEyNTsKK30KKworc3RhdGljIHM4IHRlbXBfdG9fczgobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAtMTI4MDAwKQorCQlyZXR1cm4gLTEyODsKKwlpZiAodmFsID49IDEyNzAwMCkKKwkJcmV0dXJuIDEyNzsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuICh2YWwgLSA1MDApIC8gMTAwMDsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCitzdGF0aWMgdTggdGVtcF90b191OChsb25nIHZhbCkKK3sKKwlpZiAodmFsIDw9IDApCisJCXJldHVybiAwOworCWlmICh2YWwgPj0gMjU1MDAwKQorCQlyZXR1cm4gMjU1OworCXJldHVybiAodmFsICsgNTAwKSAvIDEwMDA7Cit9CisKK3N0YXRpYyBzMTYgdGVtcF90b19zMTYobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAtMTI4MDAwKQorCQlyZXR1cm4gMHg4MDAwOworCWlmICh2YWwgPj0gMTI3ODc1KQorCQlyZXR1cm4gMHg3RkUwOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gKHZhbCAtIDYyKSAvIDEyNSAqIDMyOworCXJldHVybiAodmFsICsgNjIpIC8gMTI1ICogMzI7Cit9CisKK3N0YXRpYyB1OCBoeXN0X3RvX3JlZyhsb25nIHZhbCkKK3sKKwlpZiAodmFsIDw9IDApCisJCXJldHVybiAwOworCWlmICh2YWwgPj0gMzA1MDApCisJCXJldHVybiAzMTsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCisvKgorICogQURUNzQ2MSBpbiBjb21wYXRpYmlsaXR5IG1vZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMTTkwIGV4Y2VwdCB0aGF0CisgKiBhdHRlbXB0cyB0byB3cml0ZSB2YWx1ZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgcmFuZ2UgMCA8IHRlbXAgPCAxMjcgYXJlCisgKiB0cmVhdGVkIGFzIHRoZSBib3VuZGFyeSB2YWx1ZS4KKyAqCisgKiBBRFQ3NDYxIGluICJleHRlbmRlZCBtb2RlIiBvcGVyYXRpb24gdXNlcyB1bnNpZ25lZCBpbnRlZ2VycyBvZmZzZXQgYnkKKyAqIDY0IChlLmcuLCAwIC0+IC02NCBkZWdDKS4gIFRoZSByYW5nZSBpcyByZXN0cmljdGVkIHRvIC02NC4uMTkxIGRlZ0MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91OF9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIHU4IHZhbCkKK3sKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQpCisJCXJldHVybiAodmFsIC0gNjQpICogMTAwMDsKKwllbHNlCisJCXJldHVybiB0ZW1wX2Zyb21fczgodmFsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3UxNl9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIHUxNiB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKQorCQlyZXR1cm4gKHZhbCAtIDB4NDAwMCkgLyA2NCAqIDI1MDsKKwllbHNlCisJCXJldHVybiB0ZW1wX2Zyb21fczE2KHZhbCk7Cit9CisKK3N0YXRpYyB1OCB0ZW1wX3RvX3U4X2FkdDc0NjEoc3RydWN0IGxtOTBfZGF0YSAqZGF0YSwgbG9uZyB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKSB7CisJCWlmICh2YWwgPD0gLTY0MDAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTkxMDAwKQorCQkJcmV0dXJuIDB4RkY7CisJCXJldHVybiAodmFsICsgNTAwICsgNjQwMDApIC8gMTAwMDsKKwl9IGVsc2UgeworCQlpZiAodmFsIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHZhbCA+PSAxMjcwMDApCisJCQlyZXR1cm4gMTI3OworCQlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworCX0KK30KKworc3RhdGljIHUxNiB0ZW1wX3RvX3UxNl9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIGxvbmcgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkgeworCQlpZiAodmFsIDw9IC02NDAwMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDE5MTc1MCkKKwkJCXJldHVybiAweEZGQzA7CisJCXJldHVybiAodmFsICsgNjQwMDAgKyAxMjUpIC8gMjUwICogNjQ7CisJfSBlbHNlIHsKKwkJaWYgKHZhbCA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTI3NzUwKQorCQkJcmV0dXJuIDB4N0ZDMDsKKwkJcmV0dXJuICh2YWwgKyAxMjUpIC8gMjUwICogNjQ7CisJfQorfQorCisvKgogICogU3lzZnMgc3R1ZmYKICAqLwogCkBAIC0yNjEsNyArMzU3LDE2IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBsbTkwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdTgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0yODIsMTAgKzM4NywxMiBAQAogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCi0JCWRhdGEtPnRlbXA4W25yXSA9IFRFTVAxX1RPX1JFR19BRFQ3NDYxKHZhbCk7CisJCWRhdGEtPnRlbXA4W25yXSA9IHRlbXBfdG9fdThfYWR0NzQ2MShkYXRhLCB2YWwpOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY0NikKKwkJZGF0YS0+dGVtcDhbbnJdID0gdGVtcF90b191OCh2YWwpOwogCWVsc2UKLQkJZGF0YS0+dGVtcDhbbnJdID0gVEVNUDFfVE9fUkVHKHZhbCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1tuciAtIDFdLCBkYXRhLT50ZW1wOFtucl0pOworCQlkYXRhLT50ZW1wOFtucl0gPSB0ZW1wX3RvX3M4KHZhbCk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1tucl0sIGRhdGEtPnRlbXA4W25yXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjk1LDcgKzQwMiwxNiBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAyX0ZST01fUkVHKGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pKTsKKwlpbnQgdGVtcDsKKworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdTE2X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSk7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQl0ZW1wID0gdGVtcF9mcm9tX3UxNihkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczE2KGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcDExKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0zMTgsMTMgKzQzNCwyMCBAQAogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCi0JCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMl9UT19SRUdfQURUNzQ2MSh2YWwpOworCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b191MTZfYWR0NzQ2MShkYXRhLCB2YWwpOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY1NyB8fCBkYXRhLT5raW5kID09IG1heDY2ODApCisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3M4KHZhbCkgPDwgODsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3U4KHZhbCkgPDwgODsKIAllbHNlCi0JCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMl9UT19SRUcodmFsKTsKKwkJZGF0YS0+dGVtcDExW25yXSA9IHRlbXBfdG9fczE2KHZhbCk7CisKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMl0sCiAJCQkJICBkYXRhLT50ZW1wMTFbbnJdID4+IDgpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyICsgMV0sCi0JCQkJICBkYXRhLT50ZW1wMTFbbnJdICYgMHhmZik7CisJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkgICAgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2KQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLAorCQkJCQkgIGRhdGEtPnRlbXAxMVtucl0gJiAweGZmKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0zMzQsOCArNDU3LDE0IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBsbTkwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKQotCQkgICAgICAgLSBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKKwlpbnQgdGVtcDsKKworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdThfYWR0NzQ2MShkYXRhLCBkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pOworCWVsc2UKKwkJdGVtcCA9IHRlbXBfZnJvbV9zOChkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAgLSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcF9oeXN0KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1waHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKQEAgLTM0Nyw5ICs0NzYsOSBAQAogCWxvbmcgaHlzdDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQloeXN0ID0gVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbM10pIC0gdmFsOworCWh5c3QgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbMl0pIC0gdmFsOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX1RDUklUX0hZU1QsCi0JCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7CisJCQkJICBoeXN0X3RvX3JlZyhoeXN0KSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzcxLDIzICs1MDAsMjMgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKIH0KIAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgNCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAxKTsKKwlzZXRfdGVtcDgsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDIpOworCXNldF90ZW1wOCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDMpOworCXNldF90ZW1wOCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgNCk7CisJc2V0X3RlbXA4LCAzKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1waHlzdCwKLQlzZXRfdGVtcGh5c3QsIDMpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcGh5c3QsIE5VTEwsIDQpOworCXNldF90ZW1waHlzdCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JUlVHTywgc2hvd190ZW1waHlzdCwgTlVMTCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX29mZnNldCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDMpOwogCkBAIC01NjgsNyArNjk3LDcgQEAKIAkJCQlraW5kID0gYWRtMTAzMjsKIAkJCX0gZWxzZQogCQkJaWYgKGNoaXBfaWQgPT0gMHg1MSAvKiBBRFQ3NDYxICovCi0JCQkgJiYgKHJlZ19jb25maWcxICYgMHgxRikgPT0gMHgwMCAvKiBjaGVjayBjb21wYXQgbW9kZSAqLworCQkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKIAkJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwQSkgewogCQkJCWtpbmQgPSBhZHQ3NDYxOwogCQkJfQpAQCAtNTk5LDEzICs3MjgsMjMgQEAKIAkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDAzKSA9PSAweDAwCiAJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MDcpIHsKIAkJCSAJa2luZCA9IG1heDY2ODA7CisJCQl9IGVsc2UKKwkJCS8qIFRoZSBjaGlwX2lkIHJlZ2lzdGVyIG9mIHRoZSBNQVg2NjQ2LzY2NDcvNjY0OQorCQkJICogaG9sZHMgdGhlIHJldmlzaW9uIG9mIHRoZSBjaGlwLgorCQkJICogVGhlIGxvd2VzdCA2IGJpdHMgb2YgdGhlIGNvbmZpZzEgcmVnaXN0ZXIgYXJlCisJCQkgKiB1bnVzZWQgYW5kIHNob3VsZCByZXR1cm4gemVybyB3aGVuIHJlYWQuCisJCQkgKi8KKwkJCWlmIChjaGlwX2lkID09IDB4NTkKKwkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDNmKSA9PSAweDAwCisJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MDcpIHsKKwkJCQlraW5kID0gbWF4NjY0NjsKIAkJCX0KIAkJfQogCiAJCWlmIChraW5kIDw9IDApIHsgLyogaWRlbnRpZmljYXRpb24gZmFpbGVkICovCi0JCQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LAotCQkJICAgICJVbnN1cHBvcnRlZCBjaGlwIChtYW5faWQ9MHglMDJYLCAiCi0JCQkgICAgImNoaXBfaWQ9MHglMDJYKS5cbiIsIG1hbl9pZCwgY2hpcF9pZCk7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsCisJCQkJIlVuc3VwcG9ydGVkIGNoaXAgYXQgMHglMDJ4IChtYW5faWQ9MHglMDJYLCAiCisJCQkJImNoaXBfaWQ9MHglMDJYKVxuIiwgYWRkcmVzcywgbWFuX2lkLCBjaGlwX2lkKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNjI5LDYgKzc2OCw4IEBACiAJCW5hbWUgPSAibWF4NjY4MCI7CiAJfSBlbHNlIGlmIChraW5kID09IGFkdDc0NjEpIHsKIAkJbmFtZSA9ICJhZHQ3NDYxIjsKKwl9IGVsc2UgaWYgKGtpbmQgPT0gbWF4NjY0NikgeworCQluYW1lID0gIm1heDY2NDYiOwogCX0KIAlzdHJsY3B5KGluZm8tPnR5cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCkBAIC02NjgsNyArODA5LDcgQEAKIAkJCQkJICAgICAgJmRldl9hdHRyX3BlYykpKQogCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9Ci0JaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NykgeworCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2KSB7CiAJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCiAJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CkBAIC03MDcsNiArODQ4LDEyIEBACiAJfQogCWNvbmZpZ19vcmlnID0gY29uZmlnOwogCisJLyogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0ICovCisJaWYgKGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkgeworCQlpZiAoY29uZmlnICYgMHgwNCkKKwkJCWRhdGEtPmZsYWdzIHw9IExNOTBfRkxBR19BRFQ3NDYxX0VYVDsKKwl9CisKIAkvKgogCSAqIFB1dCBNQVg2NjgwL01BWDg4ODEgaW50byBleHRlbmRlZCByZXNvbHV0aW9uIChiaXQgMHgxMCwKIAkgKiAwLjEyNSBkZWdyZWUgcmVzb2x1dGlvbikgYW5kIHJhbmdlICgweDA4LCBleHRlbmQgcmFuZ2UKQEAgLTcyOCw3ICs4NzUsNyBAQAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG05MF9ncm91cCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3BlYyk7Ci0JaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NykKKwlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7CiAKQEAgLTczNiw2ICs4ODMsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBsbTkwX3JlYWQxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdoLCB1OCByZWdsLCB1MTYgKnZhbHVlKQoreworCWludCBlcnI7CisJdTggb2xkaCwgbmV3aCwgbDsKKworCS8qCisJICogVGhlcmUgaXMgYSB0cmljayBoZXJlLiBXZSBoYXZlIHRvIHJlYWQgdHdvIHJlZ2lzdGVycyB0byBoYXZlIHRoZQorCSAqIHNlbnNvciB0ZW1wZXJhdHVyZSwgYnV0IHdlIGhhdmUgdG8gYmV3YXJlIGEgY29udmVyc2lvbiBjb3VsZCBvY2N1cgorCSAqIGluYmV0d2VlbiB0aGUgcmVhZGluZ3MuIFRoZSBkYXRhc2hlZXQgc2F5cyB3ZSBzaG91bGQgZWl0aGVyIHVzZQorCSAqIHRoZSBvbmUtc2hvdCBjb252ZXJzaW9uIHJlZ2lzdGVyLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGRvCisJICogKGRpc2FibGVzIGhhcmR3YXJlIG1vbml0b3JpbmcpIG9yIG1vbml0b3IgdGhlIGJ1c3kgYml0LCB3aGljaCBpcworCSAqIGltcG9zc2libGUgKHdlIGNhbid0IHJlYWQgdGhlIHZhbHVlcyBhbmQgbW9uaXRvciB0aGF0IGJpdCBhdCB0aGUKKwkgKiBleGFjdCBzYW1lIHRpbWUpLiBTbyB0aGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvIHJlYWQgdGhlIGhpZ2gKKwkgKiBieXRlIG9uY2UsIHRoZW4gdGhlIGxvdyBieXRlLCB0aGVuIHRoZSBoaWdoIGJ5dGUgYWdhaW4uIElmIHRoZSBuZXcKKwkgKiBoaWdoIGJ5dGUgbWF0Y2hlcyB0aGUgb2xkIG9uZSwgdGhlbiB3ZSBoYXZlIGEgdmFsaWQgcmVhZGluZy4gRWxzZQorCSAqIHdlIGhhdmUgdG8gcmVhZCB0aGUgbG93IGJ5dGUgYWdhaW4sIGFuZCBub3cgd2UgYmVsaWV2ZSB3ZSBoYXZlIGEKKwkgKiBjb3JyZWN0IHJlYWRpbmcuCisJICovCisJaWYgKChlcnIgPSBsbTkwX3JlYWRfcmVnKGNsaWVudCwgcmVnaCwgJm9sZGgpKQorCSB8fCAoZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2wsICZsKSkKKwkgfHwgKGVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdoLCAmbmV3aCkpKQorCQlyZXR1cm4gZXJyOworCWlmIChvbGRoICE9IG5ld2gpIHsKKwkJZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2wsICZsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCSp2YWx1ZSA9IChuZXdoIDw8IDgpIHwgbDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGxtOTBfZGF0YSAqbG05MF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpAQCAtNzQ0LDQ5ICs5MjMsNTAgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewotCQl1OCBvbGRoLCBuZXdoLCBsOworCQl1OCBoLCBsOwogCiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiVXBkYXRpbmcgbG05MCBkYXRhLlxuIik7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsICZkYXRhLT50ZW1wOFswXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0xPVywgJmRhdGEtPnRlbXA4WzFdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfSElHSCwgJmRhdGEtPnRlbXA4WzJdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfQ1JJVCwgJmRhdGEtPnRlbXA4WzNdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0NSSVQsICZkYXRhLT50ZW1wOFs0XSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0xPVywgJmRhdGEtPnRlbXA4WzBdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfSElHSCwgJmRhdGEtPnRlbXA4WzFdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfQ1JJVCwgJmRhdGEtPnRlbXA4WzJdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0NSSVQsICZkYXRhLT50ZW1wOFszXSk7CiAJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1RDUklUX0hZU1QsICZkYXRhLT50ZW1wX2h5c3QpOwogCi0JCS8qCi0JCSAqIFRoZXJlIGlzIGEgdHJpY2sgaGVyZS4gV2UgaGF2ZSB0byByZWFkIHR3byByZWdpc3RlcnMgdG8KLQkJICogaGF2ZSB0aGUgcmVtb3RlIHNlbnNvciB0ZW1wZXJhdHVyZSwgYnV0IHdlIGhhdmUgdG8gYmV3YXJlCi0JCSAqIGEgY29udmVyc2lvbiBjb3VsZCBvY2N1ciBpbmJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUKLQkJICogZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UgdGhlIG9uZS1zaG90Ci0JCSAqIGNvbnZlcnNpb24gcmVnaXN0ZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gZG8gKGRpc2FibGVzCi0JCSAqIGhhcmR3YXJlIG1vbml0b3JpbmcpIG9yIG1vbml0b3IgdGhlIGJ1c3kgYml0LCB3aGljaCBpcwotCQkgKiBpbXBvc3NpYmxlICh3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZXMgYW5kIG1vbml0b3IgdGhhdCBiaXQKLQkJICogYXQgdGhlIGV4YWN0IHNhbWUgdGltZSkuIFNvIHRoZSBzb2x1dGlvbiB1c2VkIGhlcmUgaXMgdG8KLQkJICogcmVhZCB0aGUgaGlnaCBieXRlIG9uY2UsIHRoZW4gdGhlIGxvdyBieXRlLCB0aGVuIHRoZSBoaWdoCi0JCSAqIGJ5dGUgYWdhaW4uIElmIHRoZSBuZXcgaGlnaCBieXRlIG1hdGNoZXMgdGhlIG9sZCBvbmUsCi0JCSAqIHRoZW4gd2UgaGF2ZSBhIHZhbGlkIHJlYWRpbmcuIEVsc2Ugd2UgaGF2ZSB0byByZWFkIHRoZSBsb3cKLQkJICogYnl0ZSBhZ2FpbiwgYW5kIG5vdyB3ZSBiZWxpZXZlIHdlIGhhdmUgYSBjb3JyZWN0IHJlYWRpbmcuCi0JCSAqLwotCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILCAmb2xkaCkgPT0gMAotCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBMLCAmbCkgPT0gMAotCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILCAmbmV3aCkgPT0gMAotCQkgJiYgKG5ld2ggPT0gb2xkaAotCQkgIHx8IGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QTCwgJmwpID09IDApKQotCQkJZGF0YS0+dGVtcDExWzBdID0gKG5ld2ggPDwgOCkgfCBsOworCQlpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjU3IHx8IGRhdGEtPmtpbmQgPT0gbWF4NjY0NikgeworCQkJbG05MF9yZWFkMTYoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCisJCQkJICAgIE1BWDY2NTdfUkVHX1JfTE9DQUxfVEVNUEwsCisJCQkJICAgICZkYXRhLT50ZW1wMTFbNF0pOworCQl9IGVsc2UgeworCQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCisJCQkJCSAgJmgpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzRdID0gaCA8PCA4OworCQl9CisJCWxtOTBfcmVhZDE2KGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEgsCisJCQkgICAgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEwsICZkYXRhLT50ZW1wMTFbMF0pOwogCi0JCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XSCwgJm5ld2gpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9MT1dMLCAmbCkgPT0gMCkKLQkJCWRhdGEtPnRlbXAxMVsxXSA9IChuZXdoIDw8IDgpIHwgbDsKLQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdISCwgJm5ld2gpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdITCwgJmwpID09IDApCi0JCQlkYXRhLT50ZW1wMTFbMl0gPSAobmV3aCA8PCA4KSB8IGw7Ci0JCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpIHsKKwkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9MT1dILCAmaCkgPT0gMCkgeworCQkJZGF0YS0+dGVtcDExWzFdID0gaCA8PCA4OworCQkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkJCSAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYKKwkJCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XTCwKKwkJCQkJICAmbCkgPT0gMCkKKwkJCQlkYXRhLT50ZW1wMTFbMV0gfD0gbDsKKwkJfQorCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0hJR0hILCAmaCkgPT0gMCkgeworCQkJZGF0YS0+dGVtcDExWzJdID0gaCA8PCA4OworCQkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkJCSAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYKKwkJCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEwsCisJCQkJCSAgJmwpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzJdIHw9IGw7CisJCX0KKworCQlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikgewogCQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9PRkZTSCwKLQkJCQkJICAmbmV3aCkgPT0gMAorCQkJCQkgICZoKSA9PSAwCiAJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX09GRlNMLAogCQkJCQkgICZsKSA9PSAwKQotCQkJCWRhdGEtPnRlbXAxMVszXSA9IChuZXdoIDw8IDgpIHwgbDsKKwkJCQlkYXRhLT50ZW1wMTFbM10gPSAoaCA8PCA4KSB8IGw7CiAJCX0KIAkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfU1RBVFVTLCAmZGF0YS0+YWxhcm1zKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwppbmRleCAxYWIxY2FjLi43ODk3NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDE2MTkuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwpAQCAtNjksMTEgKzY5LDE4IEBACiAjZGVmaW5lIE1BWDE2MTlfUkVHX1dfVENSSVRfSFlTVAkweDEzCiAKIC8qCi0gKiBDb252ZXJzaW9ucyBhbmQgdmFyaW91cyBtYWNyb3MKKyAqIENvbnZlcnNpb25zCiAgKi8KIAotI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJKCh2YWwgJiAweDgwID8gdmFsLTB4MTAwIDogdmFsKSAqIDEwMDApCi0jZGVmaW5lIFRFTVBfVE9fUkVHKHZhbCkJKCh2YWwgPCAwID8gdmFsKzB4MTAwKjEwMDAgOiB2YWwpIC8gMTAwMCkKK3N0YXRpYyBpbnQgdGVtcF9mcm9tX3JlZyhpbnQgdmFsKQoreworCXJldHVybiAodmFsICYgMHg4MCA/IHZhbC0weDEwMCA6IHZhbCkgKiAxMDAwOworfQorCitzdGF0aWMgaW50IHRlbXBfdG9fcmVnKGludCB2YWwpCit7CisJcmV0dXJuICh2YWwgPCAwID8gdmFsKzB4MTAwKjEwMDAgOiB2YWwpIC8gMTAwMDsKK30KIAogLyoKICAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgpAQCAtMTM1LDcgKzE0Miw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCiB7IFwKIAlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gbWF4MTYxOV91cGRhdGVfZGV2aWNlKGRldik7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT52YWx1ZSkpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXBfZnJvbV9yZWcoZGF0YS0+dmFsdWUpKTsgXAogfQogc2hvd190ZW1wKHRlbXBfaW5wdXQxKTsKIHNob3dfdGVtcCh0ZW1wX2lucHV0Mik7CkBAIC0xNTMsNyArMTYwLDcgQEAKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCi0JZGF0YS0+dmFsdWUgPSBURU1QX1RPX1JFRyh2YWwpOyBcCisJZGF0YS0+dmFsdWUgPSB0ZW1wX3RvX3JlZyh2YWwpOyBcCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlyZXR1cm4gY291bnQ7IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKaW5kZXggOWI0NjJiYi4uNWZiZmEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKKysrIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKQEAgLTc1LDcgKzc1LDggQEAKICNkZWZpbmUgRlNDTQkweDA5CS8qIExvZ2ljYWwgZGV2aWNlOiBmYW5zICovCiAjZGVmaW5lIFZMTQkweDBkCS8qIExvZ2ljYWwgZGV2aWNlOiB2b2x0YWdlcyAqLwogI2RlZmluZSBUTVMJMHgwZQkvKiBMb2dpY2FsIGRldmljZTogdGVtcGVyYXR1cmVzICovCi1zdGF0aWMgY29uc3QgdTggbG9nZGV2WzNdID0geyBGU0NNLCBWTE0sIFRNUyB9OworI2RlZmluZSBMRE5JX01BWCAzCitzdGF0aWMgY29uc3QgdTggbG9nZGV2W0xETklfTUFYXSA9IHsgRlNDTSwgVkxNLCBUTVMgfTsKIAogI2RlZmluZSBMRF9GQU4JCTAKICNkZWZpbmUgTERfSU4JCTEKQEAgLTQ4OSwxMSArNDkwLDY2IEBACiAJU0VOU09SX0FUVFIoaW4xMF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc2V0X2luX21heCwgMTApLAogfTsKIAorLyogKHRlbXAgJiB2aW4pIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVyIGFsYXJtIGJpdHMgKHBkZiBzZWMuMTEuNS4xMikgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fTUlOCTB4MDIJLyogbWluIGxpbWl0IGNyb3NzZWQgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fTUFYCTB4MDQJLyogbWF4IGxpbWl0IGV4Y2VlZGVkICovCisjZGVmaW5lIFRFTVBfQUxNX0NSSVQJMHgwOAkvKiB0ZW1wIGNyaXQgZXhjZWVkZWQgKHRlbXAgb25seSkgKi8KKworLyogc2hvd19pbl9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCBzdGF0dXMKKyAgIHJlZ2lzdGVyIChzZWMgMTEuNS4xMiksIG5vdCB0aGUgdmluIGV2ZW50IHN0YXR1cyByZWdpc3RlcnMgKHNlYworICAgMTEuNS4yKSB0aGF0IChsZWdhY3kpIHNob3dfaW5fYWxhcm0oKSByZXNkcyAodmlhIGRhdGEtPmluX2FsYXJtcykgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19pbl9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NSU4pKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUFYKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5fbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIoaW4wX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihpbjJfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4zX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUihpbjVfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW42X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUihpbjhfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIoaW45X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKGluMTBfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMTApLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5fbWF4X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIoaW4wX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihpbjJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4zX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUihpbjVfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW42X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUihpbjhfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIoaW45X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKGluMTBfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMTApLAorfTsKKwogI2RlZmluZSBWSU5fVU5JVF9BVFRSUyhYKSBcCiAJJmluX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmaW5fc3RhdHVzW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmaW5fbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmaW5fbWF4W1hdLmRldl9hdHRyLmF0dHIKKwkmaW5fbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmaW5fbWluX2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmaW5fbWF4X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIKIAogc3RhdGljIHNzaXplX3Qgc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNjU4LDEyICs3MTQsNjggQEAKIAkJICAgIHNob3dfdGhlcm1fY3JpdCwgc2V0X3RoZXJtX2NyaXQsIDIrMTEpLAogfTsKIAorLyogc2hvd190aGVybV9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCB2b2x0YWdlCisgICBzdGF0dXMgcmVnaXN0ZXIgKHNlYyAxMS41LjEyKSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX21pbl9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NSU4pKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGhlcm1fbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIENIQU5fQUxNX01BWCkpOworfQorc3RhdGljIHNzaXplX3Qgc2hvd190aGVybV9jcml0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIFRFTVBfQUxNX0NSSVQpKTsKK30KKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9taW5fYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21pbl9hbGFybSwgTlVMTCwgMCsxMSksCisJU0VOU09SX0FUVFIodGVtcDVfbWluX2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9taW5fYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21pbl9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWluX2FsYXJtLCBOVUxMLCAyKzExKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXA0X21heF9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWF4X2FsYXJtLCBOVUxMLCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9tYXhfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21heF9hbGFybSwgTlVMTCwgMSsxMSksCisJU0VOU09SX0FUVFIodGVtcDZfbWF4X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9tYXhfYWxhcm0sIE5VTEwsIDIrMTEpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGhlcm1fY3JpdF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDArMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA1X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDIrMTEpLAorfTsKKwogI2RlZmluZSBUSEVSTV9VTklUX0FUVFJTKFgpIFwKIAkmdGhlcm1faW5wdXRbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9taW5bWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9tYXhbWF0uZGV2X2F0dHIuYXR0ciwJXAotCSZ0aGVybV9jcml0W1hdLmRldl9hdHRyLmF0dHIKKwkmdGhlcm1fY3JpdFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJnRoZXJtX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRoZXJtX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRoZXJtX2NyaXRfYWxhcm1bWF0uZGV2X2F0dHIuYXR0cgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBjODczNnhfdGhlcm1fYXR0cl9hcnJheVtdID0gewogCVRIRVJNX1VOSVRfQVRUUlMoMCksCkBAIC03OTAsMTIgKzkwMiw3NiBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc190ZW1wLCBTX0lSVUdPLCBzaG93X3RlbXBfYWxhcm1zLCBOVUxMKTsKIAorLyogc2hvd190ZW1wX21pbi9tYXhfYWxhcm0oKSByZWFkcyBkYXRhIGZyb20gdGhlIHBlci1jaGFubmVsIHN0YXR1cworICAgcmVnaXN0ZXIgKHNlYyAxMi4zLjcpLCBub3QgdGhlIHRlbXAgZXZlbnQgc3RhdHVzIHJlZ2lzdGVycyAoc2VjCisgICAxMi4zLjIpIHRoYXQgc2hvd190ZW1wX2FsYXJtKCkgcmVhZHMgKHZpYSBkYXRhLT50ZW1wX2FsYXJtcykgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21pbl9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT50ZW1wX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NQVgpKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9jcml0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT50ZW1wX3N0YXR1c1tucl0gJiBURU1QX0FMTV9DUklUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9taW5fYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9taW5fYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21pbl9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluX2FsYXJtLCBOVUxMLCAyKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRlbXBfbWF4X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4X2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9tYXhfYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX21heF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21heF9hbGFybSwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2NyaXRfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdF9hbGFybSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX2NyaXRfYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9jcml0X2FsYXJtLCBOVUxMLCAyKSwKK307CisKKyNkZWZpbmUgVEVNUF9GQVVMVAkweDQwCS8qIG9wZW4gZGlvZGUgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9mYXVsdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgVEVNUF9GQVVMVCkpOworfQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2ZhdWx0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMiksCit9OworCiAjZGVmaW5lIFRFTVBfVU5JVF9BVFRSUyhYKSBcCiAJJnRlbXBfaW5wdXRbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0ZW1wX3N0YXR1c1tYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJnRlbXBfbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGVtcF9tYXhbWF0uZGV2X2F0dHIuYXR0ciwJXAotCSZ0ZW1wX2NyaXRbWF0uZGV2X2F0dHIuYXR0cgorCSZ0ZW1wX2NyaXRbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0ZW1wX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfbWF4X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsIFwKKwkmdGVtcF9jcml0X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsIFwKKwkmdGVtcF9mYXVsdFtYXS5kZXZfYXR0ci5hdHRyCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogcGM4NzM2eF90ZW1wX2F0dHJfYXJyYXlbXSA9IHsKIAlURU1QX1VOSVRfQVRUUlMoMCksCkBAIC04MDksOCArOTg1LDggQEAKIAkuYXR0cnMgPSBwYzg3MzZ4X3RlbXBfYXR0cl9hcnJheSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CkBAIC05NTUsNyArMTEzMSw3IEBACiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBMRE5JX01BWDsgaSsrKSB7CiAJCWlmICgoKGRhdGEtPmFkZHJlc3NbaV0gPSBleHRyYV9pc2FbaV0pKQogCQkgJiYgIXJlcXVlc3RfcmVnaW9uKGV4dHJhX2lzYVtpXSwgUEM4NzM2MF9FWFRFTlQsCiAJCSAJCSAgICBwYzg3MzYwX2RyaXZlci5kcml2ZXIubmFtZSkpIHsKQEAgLTEwMzEsNyArMTIwNywxNSBAQAogCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmdGVtcF9jcml0W2ldLmRldl9hdHRyKSkKIAkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCQkJJnRlbXBfc3RhdHVzW2ldLmRldl9hdHRyKSkpCisJCQkJCSZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX21pbl9hbGFybVtpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX21heF9hbGFybVtpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX2NyaXRfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9mYXVsdFtpXS5kZXZfYXR0cikpKQogCQkJCWdvdG8gRVJST1IzOwogCQl9CiAJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FsYXJtc190ZW1wKSkpCkBAIC0xMTMxLDYgKzEzMTUsMTYgQEAKIAltdXRleF91bmxvY2soJihkYXRhLT5sb2NrKSk7CiB9CiAKKy8qICh0ZW1wICYgdmluKSBjaGFubmVsIGNvbnZlcnNpb24gc3RhdHVzIHJlZ2lzdGVyIGZsYWdzIChwZGYgc2VjLjExLjUuMTIpICovCisjZGVmaW5lIENIQU5fQ05WUlRECTB4ODAJLyogbmV3IGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgQ0hBTl9FTkEJMHgwMQkvKiBlbmFibGVkIGNoYW5uZWwgKHRlbXAgb3IgdmluKSAqLworI2RlZmluZSBDSEFOX0FMTV9FTkEJMHgxMAkvKiBwcm9wYWdhdGUgdG8gYWxhcm1zLXJlZyA/PyAoY2hrIHZhbCEpICovCisjZGVmaW5lIENIQU5fUkVBRFkJKENIQU5fRU5BfENIQU5fQ05WUlREKSAvKiBzYW1wbGUgcmVhZHkgbWFzayAqLworCisjZGVmaW5lIFRFTVBfT1RTX09FCTB4MjAJLyogT1RTIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgVklOX1JXMUNfTUFTSwkoQ0hBTl9SRUFEWXxDSEFOX0FMTV9NQVh8Q0hBTl9BTE1fTUlOKSAgIC8qIDB4ODcgKi8KKyNkZWZpbmUgVEVNUF9SVzFDX01BU0sJKFZJTl9SVzFDX01BU0t8VEVNUF9BTE1fQ1JJVHxURU1QX0ZBVUxUKSAvKiAweENGICovCisKIHN0YXRpYyB2b2lkIHBjODczNjBfaW5pdF9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQlpbnQgdXNlX3RoZXJtaXN0b3JzKQogewpAQCAtMTE1MiwxMSArMTM0NiwxMiBAQAogCiAJbnIgPSBkYXRhLT5pbm5yIDwgMTEgPyBkYXRhLT5pbm5yIDogMTE7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAorCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmlvcyBpbiVkIHN0YXR1czoweCUwMnhcbiIsIGksIHJlZyk7CiAJCWlmIChpbml0ID49IGluaXRfaW5baV0pIHsKIAkJCS8qIEZvcmNpYmx5IGVuYWJsZSB2b2x0YWdlIGNoYW5uZWwgKi8KLQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKLQkJCQkJCSBQQzg3MzY1X1JFR19JTl9TVEFUVVMpOwotCQkJaWYgKCEocmVnICYgMHgwMSkpIHsKKwkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJImVuYWJsaW5nIGluJWRcbiIsIGkpOwogCQkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGksCkBAIC0xMTY4LDE5ICsxMzYzLDI0IEBACiAKIAkvKiBXZSBjYW4ndCBibGluZGx5IHRydXN0IHRoZSBTdXBlci1JL08gc3BhY2UgY29uZmlndXJhdGlvbiBiaXQsCiAJICAgbW9zdCBCSU9TIHdvbid0IHNldCBpdCBwcm9wZXJseSAqLworCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGhlcm1pc3RvcnM6JWRcbiIsIHVzZV90aGVybWlzdG9ycyk7CiAJZm9yIChpID0gMTE7IGkgPCBkYXRhLT5pbm5yOyBpKyspIHsKIAkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQl1c2VfdGhlcm1pc3RvcnMgPSB1c2VfdGhlcm1pc3RvcnMgfHwgKHJlZyAmIDB4MDEpOworCQl1c2VfdGhlcm1pc3RvcnMgPSB1c2VfdGhlcm1pc3RvcnMgfHwgKHJlZyAmIENIQU5fRU5BKTsKKwkJLyogdGhlcm1pc3RvcnMgYXJlIHRlbXBbNC02XSwgbWVhc3VyZWQgb24gdmluWzExLTE0XSAqLworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAlZF9zdGF0dXM6MHglMDJ4XG4iLCBpLTcsIHJlZyk7CiAJfQorCWRldl9kYmcoJnBkZXYtPmRldiwgInVzaW5nIHRoZXJtaXN0b3JzOiVkXG4iLCB1c2VfdGhlcm1pc3RvcnMpOwogCiAJaSA9IHVzZV90aGVybWlzdG9ycyA/IDIgOiAwOwogCWZvciAoOyBpIDwgZGF0YS0+dGVtcG5yOyBpKyspIHsKKwkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCisJCQkJCSBQQzg3MzY1X1JFR19URU1QX1NUQVRVUyk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGVtcCVkX3N0YXR1czoweCUwMnhcbiIsIGkrMSwgcmVnKTsKIAkJaWYgKGluaXQgPj0gaW5pdF90ZW1wW2ldKSB7CiAJCQkvKiBGb3JjaWJseSBlbmFibGUgdGVtcGVyYXR1cmUgY2hhbm5lbCAqLwotCQkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCi0JCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQkJaWYgKCEocmVnICYgMHgwMSkpIHsKKwkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJImVuYWJsaW5nIHRlbXAlZFxuIiwgaSsxKTsKIAkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCkBAIC0xMTk3LDcgKzEzOTcsNyBAQAogCQkJCSAgIGRpb2RlcyAqLwogCQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLAogCQkJCSAgICAgIChpLTExKS8yLCBQQzg3MzY1X1JFR19URU1QX1NUQVRVUyk7Ci0JCQkJaWYgKHJlZyAmIDB4MDEpIHsKKwkJCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiU2tpcHBpbmcgIgogCQkJCQkJInRlbXAlZCwgcGluIGFscmVhZHkgaW4gdXNlICIKIAkJCQkJCSJieSB0ZW1wJWRcbiIsIGktNywgKGktMTEpLzIpOwpAQCAtMTIwNyw3ICsxNDA3LDcgQEAKIAkJCQkvKiBGb3JjaWJseSBlbmFibGUgdGhlcm1pc3RvciBjaGFubmVsICovCiAJCQkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkJCSBQQzg3MzY1X1JFR19JTl9TVEFUVVMpOwotCQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQkJaWYgKCEocmVnICYgQ0hBTl9FTkEpKSB7CiAJCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJCSJlbmFibGluZyB0ZW1wJWRcbiIsIGktNyk7CiAJCQkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGksCkBAIC0xMjIxLDcgKzE0MjEsOCBAQAogCWlmIChkYXRhLT5pbm5yKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgTk9fQkFOSywKIAkJCQkJIFBDODczNjVfUkVHX0lOX0NPTkZJRyk7Ci0JCWlmIChyZWcgJiAweDAxKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdmluLWNmZzoweCUwMnhcbiIsIHJlZyk7CisJCWlmIChyZWcgJiBDSEFOX0VOQSkgewogCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRm9yY2libHkgIgogCQkJCSJlbmFibGluZyBtb25pdG9yaW5nIChWTE0pXG4iKTsKIAkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIE5PX0JBTkssCkBAIC0xMjMzLDcgKzE0MzQsOCBAQAogCWlmIChkYXRhLT50ZW1wbnIpIHsKIAkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIE5PX0JBTkssCiAJCQkJCSBQQzg3MzY1X1JFR19URU1QX0NPTkZJRyk7Ci0JCWlmIChyZWcgJiAweDAxKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGVtcC1jZmc6MHglMDJ4XG4iLCByZWcpOworCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5IGVuYWJsaW5nICIKIAkJCQkibW9uaXRvcmluZyAoVE1TKVxuIik7CiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIE5PX0JBTkssCkBAIC0xMzM2LDExICsxNTM4LDExIEBACiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkgICAgUEM4NzM2NV9SRUdfSU5fU1RBVFVTLAogCQkJCQkgICAgZGF0YS0+aW5fc3RhdHVzW2ldKTsKLQkJCWlmICgoZGF0YS0+aW5fc3RhdHVzW2ldICYgMHg4MSkgPT0gMHg4MSkgeworCQkJaWYgKChkYXRhLT5pbl9zdGF0dXNbaV0gJiBDSEFOX1JFQURZKSA9PSBDSEFOX1JFQURZKSB7CiAJCQkJZGF0YS0+aW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sCiAJCQkJCSAgICAgIGksIFBDODczNjVfUkVHX0lOKTsKIAkJCX0KLQkJCWlmIChkYXRhLT5pbl9zdGF0dXNbaV0gJiAweDAxKSB7CisJCQlpZiAoZGF0YS0+aW5fc3RhdHVzW2ldICYgQ0hBTl9FTkEpIHsKIAkJCQlkYXRhLT5pbl9taW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCSAgTERfSU4sIGksCiAJCQkJCQkgIFBDODczNjVfUkVHX0lOX01JTik7CkBAIC0xMzczLDEyICsxNTc1LDEyIEBACiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCiAJCQkJCSAgICBQQzg3MzY1X1JFR19URU1QX1NUQVRVUywKIAkJCQkJICAgIGRhdGEtPnRlbXBfc3RhdHVzW2ldKTsKLQkJCWlmICgoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiAweDgxKSA9PSAweDgxKSB7CisJCQlpZiAoKGRhdGEtPnRlbXBfc3RhdHVzW2ldICYgQ0hBTl9SRUFEWSkgPT0gQ0hBTl9SRUFEWSkgewogCQkJCWRhdGEtPnRlbXBbaV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCUxEX1RFTVAsIGksCiAJCQkJCQlQQzg3MzY1X1JFR19URU1QKTsKIAkJCX0KLQkJCWlmIChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIDB4MDEpIHsKKwkJCWlmIChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIENIQU5fRU5BKSB7CiAJCQkJZGF0YS0+dGVtcF9taW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCSAgICBMRF9URU1QLCBpLAogCQkJCQkJICAgIFBDODczNjVfUkVHX1RFTVBfTUlOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKaW5kZXggZjk0MmVjZC4uZDRkMWI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKQEAgLTQsNyArNCw3IEBACiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwMSAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBNYXJrIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+Ci0gICAgQ29weXJpZ2h0IChjKSAyMDA3ICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IC0gMjAwOCAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCwyNSArMzgsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAibG03NS5oIgogCi0vKiBJU0EgZGV2aWNlLCBpZiBmb3VuZCAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisjaWZkZWYgQ09ORklHX0lTQQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJsbTc1LmgiCiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLAogCQkJCQkJMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcyA9IDB4MjkwOwotCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfNCh3ODM3ODFkLCB3ODM3ODJkLCB3ODM3ODNzLCBhczk5MTI3Zik7CiBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlX3N1YmNsaWVudHMsICJMaXN0IG9mIHN1YmNsaWVudCBhZGRyZXNzZXM6ICIKQEAgLTE3OCw5ICsxNzcsOSBAQAogI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJCSgodmFsKSAqIDEwMDApCiAKICNkZWZpbmUgQkVFUF9NQVNLX0ZST01fUkVHKHZhbCx0eXBlKQkoKHR5cGUpID09IGFzOTkxMjdmID8gXAotCQkJCQkgKHZhbCkgXiAweDdmZmYgOiAodmFsKSkKKwkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmN2ZmZikKICNkZWZpbmUgQkVFUF9NQVNLX1RPX1JFRyh2YWwsdHlwZSkJKCh0eXBlKSA9PSBhczk5MTI3ZiA/IFwKLQkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmZmZmZikKKwkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmN2ZmZikKIAogI2RlZmluZSBESVZfRlJPTV9SRUcodmFsKQkJKDEgPDwgKHZhbCkpCiAKQEAgLTE5OSwyNSArMTk4LDE2IEBACiAJcmV0dXJuIGk7CiB9CiAKLS8qIFRoZXJlIGFyZSBzb21lIGNvbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGUgbGlrZSB0aGlzLiBGaXJzdCBvZmYsIFc4Mzc4MUQgY2hpcHMKLSAgIG1heSBiZSBib3RoIHByZXNlbnQgb24gdGhlIFNNQnVzIGFuZCB0aGUgSVNBIGJ1cywgYW5kIHdlIGhhdmUgdG8gaGFuZGxlCi0gICB0aG9zZSBjYXNlcyBzZXBhcmF0ZWx5IGF0IHNvbWUgcGxhY2VzLiBTZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwKLSAgIFc4Mzc4MUQgY2hpcHMgYXZhaWxhYmxlICh3ZWxsLCBhY3R1YWxseSwgdGhhdCBpcyBwcm9iYWJseSBuZXZlciBkb25lOyBidXQKLSAgIGl0IGlzIGEgY2xlYW4gaWxsdXN0cmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgYSBjYXNlIGxpa2UgdGhhdCkuIEZpbmFsbHksCi0gICBhIHNwZWNpZmljIGNoaXAgbWF5IGJlIGF0dGFjaGVkIHRvICpib3RoKiBJU0EgYW5kIFNNQnVzLCBhbmQgd2Ugd291bGQKLSAgIG5vdCBsaWtlIHRvIGRldGVjdCBpdCBkb3VibGUuIEZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiB0aGUgVzgzNzgxRCBhdAotICAgbGVhc3QsIGEgcmVnaXN0ZXIgdGVsbHMgdXMgd2hhdCBTTUJ1cyBhZGRyZXNzIHdlIGFyZSBvbiwgc28gdGhhdCBoZWxwcwotICAgYSBiaXQgLSBleGNlcHQgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBTTUJ1cy4gR3JvYW4uIE5vIHNvbHV0aW9uCi0gICBmb3IgdGhpcyB5ZXQuICovCi0KLS8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQotICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgdzgzNzgxZF9kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCisJLyogRm9yIElTQSBkZXZpY2Ugb25seSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlzYV9hZGRyOworCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwpAQCAtMjQwLDcgKzIzMCw2IEBACiAJdTggdmlkOwkJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwogCXUzMiBhbGFybXM7CQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIAl1MzIgYmVlcF9tYXNrOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCi0JdTggYmVlcF9lbmFibGU7CQkvKiBCb29sZWFuICovCiAJdTggcHdtWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBwd20yX2VuYWJsZTsJCS8qIEJvb2xlYW4gKi8KIAl1MTYgc2Vuc1szXTsJCS8qIDc4MkQvNzgzUyBvbmx5LgpAQCAtMjQ5LDM2ICsyMzgsMTQgQEAKIAl1OCB2cm07CiB9OwogCi1zdGF0aWMgaW50IHc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgdzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwotc3RhdGljIGludCB3ODM3ODFkX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHc4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotc3RhdGljIGludCBfX2RldmV4aXQgdzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfZGF0YV9pZl9pc2Eodm9pZCk7CitzdGF0aWMgaW50IHc4Mzc4MWRfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCk7CiAKIHN0YXRpYyBpbnQgdzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpOwogc3RhdGljIGludCB3ODM3ODFkX3dyaXRlX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB3ODM3ODFkX2luaXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3ODM3ODFkX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3ODM3ODFkIiwKLQl9LAotCS5hdHRhY2hfYWRhcHRlciA9IHc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSB3ODM3ODFkX2RldGFjaF9jbGllbnQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3ODM3ODFkX2lzYV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gInc4Mzc4MWQiLAotCX0sCi0JLnByb2JlID0gdzgzNzgxZF9pc2FfcHJvYmUsCi0JLnJlbW92ZSA9IHc4Mzc4MWRfaXNhX3JlbW92ZSwKLX07Ci0KLQogLyogZm9sbG93aW5nIGFyZSB0aGUgc3lzZnMgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAjZGVmaW5lIHNob3dfaW5fcmVnKHJlZykgXAogc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIFwKQEAgLTUxMywxMSArNDgwLDYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsCiAJCSAgICAgICAobG9uZylCRUVQX01BU0tfRlJPTV9SRUcoZGF0YS0+YmVlcF9tYXNrLCBkYXRhLT50eXBlKSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzaG93X2JlZXBfZW5hYmxlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHc4Mzc4MWRfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgKGxvbmcpZGF0YS0+YmVlcF9lbmFibGUpOwotfQogCiBzdGF0aWMgc3NpemVfdAogc3RvcmVfYmVlcF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01MjksMTIgKzQ5MSwxMiBAQAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmJlZXBfbWFzayA9IEJFRVBfTUFTS19UT19SRUcodmFsLCBkYXRhLT50eXBlKTsKKwlkYXRhLT5iZWVwX21hc2sgJj0gMHg4MDAwOyAvKiBwcmVzZXJ2ZSBiZWVwIGVuYWJsZSAqLworCWRhdGEtPmJlZXBfbWFzayB8PSBCRUVQX01BU0tfVE9fUkVHKHZhbCwgZGF0YS0+dHlwZSk7CiAJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMxLAogCQkJICAgIGRhdGEtPmJlZXBfbWFzayAmIDB4ZmYpOwogCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMiwKLQkJCSAgICAoKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4N2YpCi0JCQkgICAgfCBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3KTsKKwkJCSAgICAoZGF0YS0+YmVlcF9tYXNrID4+IDgpICYgMHhmZik7CiAJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNzgxZCAmJiBkYXRhLT50eXBlICE9IGFzOTkxMjdmKSB7CiAJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMywKIAkJCQkgICAgKChkYXRhLT5iZWVwX21hc2spID4+IDE2KSAmIDB4ZmYpOwpAQCAtNTQ0LDMxICs1MDYsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXN0b3JlX2JlZXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1MzIgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0JaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5iZWVwX2VuYWJsZSA9IHZhbDsKLQl2YWwgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMikgJiAweDdmOwotCXZhbCB8PSBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3OwotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMiwgdmFsKTsKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQogc3RhdGljIERFVklDRV9BVFRSKGJlZXBfbWFzaywgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfYmVlcF9tYXNrLCBzdG9yZV9iZWVwX21hc2spOwotc3RhdGljIERFVklDRV9BVFRSKGJlZXBfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJc2hvd19iZWVwX2VuYWJsZSwgc3RvcmVfYmVlcF9lbmFibGUpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtNjYzLDYgKzYwMiw4IEBACiAJCQlzaG93X2JlZXAsIHN0b3JlX2JlZXAsIDUpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19iZWVwLCBTX0lSVUdPLAogCQkJc2hvd190ZW1wM19iZWVwLCBzdG9yZV9iZWVwLCAxMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGJlZXBfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfYmVlcCwgc3RvcmVfYmVlcCwgMTUpOwogCiBzdGF0aWMgc3NpemVfdAogc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBjaGFyICpidWYpCkBAIC04NjYsNDUgKzgwNywxOSBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM190eXBlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X3NlbnNvciwgc3RvcmVfc2Vuc29yLCAyKTsKIAotLyogSTJDIGRldmljZXMgZ2V0IHRoaXMgbmFtZSBhdHRyaWJ1dGUgYXV0b21hdGljYWxseSwgYnV0IGZvciBJU0EgZGV2aWNlcwotICAgd2UgbXVzdCBjcmVhdGUgaXQgYnkgb3Vyc2VsdmVzLiAqLwotc3RhdGljIHNzaXplX3QKLXNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5jbGllbnQubmFtZSk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKLSAgICAgKiB3ODM3ODFkX2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaAotICAgICAgIGF2YWlsYWJsZSBhZGFwdGVyCi0gICAgICogd2hlbiBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkIChhbmQgdzgzNzgxZF9kcml2ZXIgaXMgc3RpbGwgcHJlc2VudCkgKi8KLXN0YXRpYyBpbnQKLXc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB3ODM3ODFkX2RldGVjdCk7Ci19Ci0KIC8qIEFzc3VtZXMgdGhhdCBhZGFwdGVyIGlzIG9mIEkyQywgbm90IElTQSB2YXJpZXR5LgogICogT1RIRVJXSVNFIERPTidUIENBTEwgVEhJUwogICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kLAotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCkKK3c4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpCiB7CiAJaW50IGksIHZhbDEgPSAwLCBpZDsKIAlpbnQgZXJyOwotCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7CisJaW50IGFkZHJlc3MgPSBuZXdfY2xpZW50LT5hZGRyOworCXVuc2lnbmVkIHNob3J0IHNjX2FkZHJbMl07CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKG5ld19jbGllbnQpOwotCi0JZGF0YS0+bG03NVswXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEoZGF0YS0+bG03NVswXSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBFUlJPUl9TQ18wOwotCX0KKwllbnVtIGNoaXBzIGtpbmQgPSBkYXRhLT50eXBlOwogCiAJaWQgPSBpMmNfYWRhcHRlcl9pZChhZGFwdGVyKTsKIApAQCAtOTIyLDU1ICs4MzcsMzUgQEAKIAkJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JMkNfU1VCQUREUiwKIAkJCQkoZm9yY2Vfc3ViY2xpZW50c1syXSAmIDB4MDcpIHwKIAkJCQkoKGZvcmNlX3N1YmNsaWVudHNbM10gJiAweDA3KSA8PCA0KSk7Ci0JCWRhdGEtPmxtNzVbMF0tPmFkZHIgPSBmb3JjZV9zdWJjbGllbnRzWzJdOworCQlzY19hZGRyWzBdID0gZm9yY2Vfc3ViY2xpZW50c1syXTsKIAl9IGVsc2UgewogCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19TVUJBRERSKTsKLQkJZGF0YS0+bG03NVswXS0+YWRkciA9IDB4NDggKyAodmFsMSAmIDB4MDcpOworCQlzY19hZGRyWzBdID0gMHg0OCArICh2YWwxICYgMHgwNyk7CiAJfQogCiAJaWYgKGtpbmQgIT0gdzgzNzgzcykgewotCQlkYXRhLT5sbTc1WzFdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCEoZGF0YS0+bG03NVsxXSkpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIEVSUk9SX1NDXzE7Ci0JCX0KLQogCQlpZiAoZm9yY2Vfc3ViY2xpZW50c1swXSA9PSBpZCAmJgogCQkgICAgZm9yY2Vfc3ViY2xpZW50c1sxXSA9PSBhZGRyZXNzKSB7Ci0JCQlkYXRhLT5sbTc1WzFdLT5hZGRyID0gZm9yY2Vfc3ViY2xpZW50c1szXTsKKwkJCXNjX2FkZHJbMV0gPSBmb3JjZV9zdWJjbGllbnRzWzNdOwogCQl9IGVsc2UgewotCQkJZGF0YS0+bG03NVsxXS0+YWRkciA9IDB4NDggKyAoKHZhbDEgPj4gNCkgJiAweDA3KTsKKwkJCXNjX2FkZHJbMV0gPSAweDQ4ICsgKCh2YWwxID4+IDQpICYgMHgwNyk7CiAJCX0KLQkJaWYgKGRhdGEtPmxtNzVbMF0tPmFkZHIgPT0gZGF0YS0+bG03NVsxXS0+YWRkcikgeworCQlpZiAoc2NfYWRkclswXSA9PSBzY19hZGRyWzFdKSB7CiAJCQlkZXZfZXJyKCZuZXdfY2xpZW50LT5kZXYsCiAJCQkgICAgICAgIkR1cGxpY2F0ZSBhZGRyZXNzZXMgMHgleCBmb3Igc3ViY2xpZW50cy5cbiIsCi0JCQkgICAgICAgZGF0YS0+bG03NVswXS0+YWRkcik7CisJCQkgICAgICAgc2NfYWRkclswXSk7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIEVSUk9SX1NDXzI7CiAJCX0KIAl9CiAKLQlpZiAoa2luZCA9PSB3ODM3ODFkKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODFkIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSB3ODM3ODJkKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODJkIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSB3ODM3ODNzKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODNzIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSBhczk5MTI3ZikKLQkJY2xpZW50X25hbWUgPSAiYXM5OTEyN2Ygc3ViY2xpZW50IjsKLQogCWZvciAoaSA9IDA7IGkgPD0gMTsgaSsrKSB7Ci0JCS8qIHN0b3JlIGFsbCBkYXRhIGluIHc4Mzc4MWQgKi8KLQkJaTJjX3NldF9jbGllbnRkYXRhKGRhdGEtPmxtNzVbaV0sIE5VTEwpOwotCQlkYXRhLT5sbTc1W2ldLT5hZGFwdGVyID0gYWRhcHRlcjsKLQkJZGF0YS0+bG03NVtpXS0+ZHJpdmVyID0gJnc4Mzc4MWRfZHJpdmVyOwotCQlkYXRhLT5sbTc1W2ldLT5mbGFncyA9IDA7Ci0JCXN0cmxjcHkoZGF0YS0+bG03NVtpXS0+bmFtZSwgY2xpZW50X25hbWUsCi0JCQlJMkNfTkFNRV9TSVpFKTsKLQkJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChkYXRhLT5sbTc1W2ldKSkpIHsKKwkJZGF0YS0+bG03NVtpXSA9IGkyY19uZXdfZHVtbXkoYWRhcHRlciwgc2NfYWRkcltpXSk7CisJCWlmICghZGF0YS0+bG03NVtpXSkgewogCQkJZGV2X2VycigmbmV3X2NsaWVudC0+ZGV2LCAiU3ViY2xpZW50ICVkICIKIAkJCQkicmVnaXN0cmF0aW9uIGF0IGFkZHJlc3MgMHgleCAiCi0JCQkJImZhaWxlZC5cbiIsIGksIGRhdGEtPmxtNzVbaV0tPmFkZHIpOworCQkJCSJmYWlsZWQuXG4iLCBpLCBzY19hZGRyW2ldKTsKKwkJCWVyciA9IC1FTk9NRU07CiAJCQlpZiAoaSA9PSAxKQogCQkJCWdvdG8gRVJST1JfU0NfMzsKIAkJCWdvdG8gRVJST1JfU0NfMjsKQEAgLTk4MywxMiArODc4LDkgQEAKIAogLyogVW5kbyBpbml0cyBpbiBjYXNlIG9mIGVycm9ycyAqLwogRVJST1JfU0NfMzoKLQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzBdKTsKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVswXSk7CiBFUlJPUl9TQ18yOgotCWtmcmVlKGRhdGEtPmxtNzVbMV0pOwogRVJST1JfU0NfMToKLQlrZnJlZShkYXRhLT5sbTc1WzBdKTsKLUVSUk9SX1NDXzA6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAyOSw3ICs5MjEsNyBAQAogCSZkZXZfYXR0cl92cm0uYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCiAJJmRldl9hdHRyX2JlZXBfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9iZWVwX2VuYWJsZS5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYmVlcF9lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNzgxZF9ncm91cCA9IHsKQEAgLTExNTEsOTYgKzEwNDMsNzQgQEAKIAkJfQogCX0KIAotCWlmIChpc19pc2EpIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwogc3RhdGljIGludAotdzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit3ODM3ODFkX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCWludCB2YWwxID0gMCwgdmFsMjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOwotCWludCBlcnI7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqaXNhID0gdzgzNzgxZF9kYXRhX2lmX2lzYSgpOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKIAljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOwogCWVudW0gdmVuZG9yIHsgd2luYm9uZCwgYXN1cyB9IHZlbmRpZDsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIEVSUk9SMTsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgdzgzNzgxZF97cmVhZCx3cml0ZX1fdmFsdWUuICovCi0KLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc4MWRfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMTsKLQl9Ci0KLQljbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZ3ODM3ODFkX2RyaXZlcjsKLQlkZXYgPSAmY2xpZW50LT5kZXY7Ci0KLQkvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiAqLworCS8qIFdlIGJsb2NrIHVwZGF0ZXMgb2YgdGhlIElTQSBkZXZpY2UgdG8gbWluaW1pemUgdGhlIHJpc2sgb2YKKwkgICBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgc2FtZSBXODM3ODFEIGNoaXAgdGhyb3VnaCBkaWZmZXJlbnQKKwkgICBpbnRlcmZhY2VzLiAqLworCWlmIChpc2EpCisJCW11dGV4X2xvY2soJmlzYS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGhlIHc4Mzc4P2QgbWF5IGJlIHN0dWNrIGluIHNvbWUgb3RoZXIgYmFuayB0aGFuIGJhbmsgMC4gVGhpcyBtYXkKIAkgICBtYWtlIHJlYWRpbmcgb3RoZXIgaW5mb3JtYXRpb24gaW1wb3NzaWJsZS4gU3BlY2lmeSBhIGZvcmNlPS4uLiBvcgogCSAgIGZvcmNlXyo9Li4uIHBhcmFtZXRlciwgYW5kIHRoZSBXaW5ib25kIHdpbGwgYmUgcmVzZXQgdG8gdGhlIHJpZ2h0CiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgeworCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhCisJCSAgICAoY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgY2hpcCAiCiAJCQkJImZhaWxlZCBhdCBzdGVwIDNcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KLQkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LKTsKLQkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspOworCQl2YWwyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCS8qIENoZWNrIGZvciBXaW5ib25kIG9yIEFzdXMgSUQgaWYgaW4gYmFuayAwICovCiAJCWlmICgoISh2YWwxICYgMHgwNykpICYmCiAJCSAgICAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgIT0gMHhhMykgJiYgKHZhbDIgIT0gMHhjMykpCiAJCSAgICAgfHwgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgIT0gMHg1YykgJiYgKHZhbDIgIT0gMHgxMikpKSkgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgY2hpcCAiCiAJCQkJImZhaWxlZCBhdCBzdGVwIDRcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAkJLyogSWYgV2luYm9uZCBTTUJ1cywgY2hlY2sgYWRkcmVzcyBhdCAweDQ4LgogCQkgICBBc3VzIGRvZXNuJ3Qgc3VwcG9ydCwgZXhjZXB0IGZvciBhczk5MTI3ZiByZXYuMiAqLwogCQlpZiAoKCEodmFsMSAmIDB4ODApICYmICh2YWwyID09IDB4YTMpKSB8fAogCQkgICAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgPT0gMHg1YykpKSB7Ci0JCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlCi0JCQkgICAgKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7CisJCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhCisJCQkgICAgKGNsaWVudCwgVzgzNzgxRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKIAkJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3Rpb24gb2YgdzgzNzgxZCAiCiAJCQkJCSJjaGlwIGZhaWxlZCBhdCBzdGVwIDVcbiIpOwotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjI7CisJCQkJZ290byBlcnJfbm9kZXY7CiAJCQl9CiAJCX0KIAl9CiAKIAkvKiBXZSBoYXZlIGVpdGhlciBoYWQgYSBmb3JjZSBwYXJhbWV0ZXIsIG9yIHdlIGhhdmUgYWxyZWFkeSBkZXRlY3RlZCB0aGUKIAkgICBXaW5ib25kLiBQdXQgaXQgbm93IGludG8gYmFuayAwIGFuZCBWZW5kb3IgSUQgSGlnaCBCeXRlICovCi0JdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSykKLQkJCSAgICAgJiAweDc4KSB8IDB4ODApOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLAorCQkoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSykKKwkJICYgMHg3OCkgfCAweDgwKTsKIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKIAkJLyogZ2V0IHZlbmRvciBJRCAqLwotCQl2YWwyID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0NISVBNQU4pOworCQl2YWwyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCWlmICh2YWwyID09IDB4NWMpCiAJCQl2ZW5kaWQgPSB3aW5ib25kOwogCQllbHNlIGlmICh2YWwyID09IDB4MTIpCkBAIC0xMjQ4LDExICsxMTE4LDEwIEBACiAJCWVsc2UgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAidzgzNzgxZCBjaGlwIHZlbmRvciBpcyAiCiAJCQkJIm5laXRoZXIgV2luYm9uZCBub3IgQXN1c1xuIik7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7CisJCQlnb3RvIGVycl9ub2RldjsKIAkJfQogCi0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJCXZhbDEgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19XQ0hJUElEKTsKIAkJaWYgKCh2YWwxID09IDB4MTAgfHwgdmFsMSA9PSAweDExKSAmJiB2ZW5kaWQgPT0gd2luYm9uZCkKIAkJCWtpbmQgPSB3ODM3ODFkOwogCQllbHNlIGlmICh2YWwxID09IDB4MzAgJiYgdmVuZGlkID09IHdpbmJvbmQpCkBAIC0xMjY2LDExICsxMTM1LDIwIEBACiAJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIklnbm9yaW5nICdmb3JjZScgIgogCQkJCQkgInBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKIAkJCQkJICJhZGRyZXNzIDB4JTAyeFxuIiwgYWRkcmVzcyk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBFUlJPUjI7CisJCQlnb3RvIGVycl9ub2RldjsKKwkJfQorCisJCWlmICgoa2luZCA9PSB3ODM3ODFkIHx8IGtpbmQgPT0gdzgzNzgyZCkKKwkJICYmIHc4Mzc4MWRfYWxpYXNfZGV0ZWN0KGNsaWVudCwgdmFsMSkpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldmljZSBhdCAweCUwMnggYXBwZWFycyB0byAiCisJCQkJImJlIHRoZSBzYW1lIGFzIElTQSBkZXZpY2VcbiIsIGFkZHJlc3MpOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAl9CiAKKwlpZiAoaXNhKQorCQltdXRleF91bmxvY2soJmlzYS0+dXBkYXRlX2xvY2spOworCiAJaWYgKGtpbmQgPT0gdzgzNzgxZCkgewogCQljbGllbnRfbmFtZSA9ICJ3ODM3ODFkIjsKIAl9IGVsc2UgaWYgKGtpbmQgPT0gdzgzNzgyZCkgewpAQCAtMTI4MSwyNCArMTE1OSw0NiBAQAogCQljbGllbnRfbmFtZSA9ICJhczk5MTI3ZiI7CiAJfQogCi0JLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7Ci0JZGF0YS0+dHlwZSA9IGtpbmQ7CisJc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKLQkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJZ290byBFUlJPUjI7CisJcmV0dXJuIDA7CisKKyBlcnJfbm9kZXY6CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludAordzgzNzgxZF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gRVJST1IxOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OwogCiAJLyogYXR0YWNoIHNlY29uZGFyeSBpMmMgbG03NS1saWtlIGNsaWVudHMgKi8KLQlpZiAoKGVyciA9IHc4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoYWRhcHRlciwgYWRkcmVzcywKLQkJCWtpbmQsIGNsaWVudCkpKQorCWVyciA9IHc4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoY2xpZW50KTsKKwlpZiAoZXJyKQogCQlnb3RvIEVSUk9SMzsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KIAl3ODM3ODFkX2luaXRfZGV2aWNlKGRldik7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKGRldiwga2luZCwgMCk7CisJZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoZGV2LCBkYXRhLT50eXBlLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIEVSUk9SNDsKIApAQCAtMTMxNCwyNjQgKzEyMTQsMTEzIEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKIAotCWlmIChkYXRhLT5sbTc1WzFdKSB7Ci0JCWkyY19kZXRhY2hfY2xpZW50KGRhdGEtPmxtNzVbMV0pOwotCQlrZnJlZShkYXRhLT5sbTc1WzFdKTsKLQl9Ci0JaWYgKGRhdGEtPmxtNzVbMF0pIHsKLQkJaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVswXSk7Ci0JCWtmcmVlKGRhdGEtPmxtNzVbMF0pOwotCX0KKwlpZiAoZGF0YS0+bG03NVswXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOworCWlmIChkYXRhLT5sbTc1WzFdKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVsxXSk7CiBFUlJPUjM6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLUVSUk9SMjoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIEVSUk9SMToKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50Ci13ODM3ODFkX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3c4Mzc4MWRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKSB7Ci0JCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JfQotCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCS8qIG1haW4gY2xpZW50ICovCi0JaWYgKGRhdGEpCi0JCWtmcmVlKGRhdGEpOwotCi0JLyogc3ViY2xpZW50ICovCi0JZWxzZQotCQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci13ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCBlcnIsIHJlZzsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyLAotCQkJICAgICJ3ODM3ODFkIikpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOwotCX0KLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5jbGllbnQuYWRkciA9IHJlcy0+c3RhcnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZkYXRhLT5jbGllbnQsIGRhdGEpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwotCi0JcmVnID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOwotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSAweDMwOgotCQlkYXRhLT50eXBlID0gdzgzNzgyZDsKLQkJbmFtZSA9ICJ3ODM3ODJkIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGF0YS0+dHlwZSA9IHc4Mzc4MWQ7Ci0JCW5hbWUgPSAidzgzNzgxZCI7Ci0JfQotCXN0cmxjcHkoZGF0YS0+Y2xpZW50Lm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVzgzNzgxRCBjaGlwICovCi0JdzgzNzgxZF9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoJnBkZXYtPmRldiwgZGF0YS0+dHlwZSwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwotCX0KLQotCXJldHVybiAwOwotCi0gZXhpdF9yZW1vdmVfZmlsZXM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlrZnJlZShkYXRhKTsKLSBleGl0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7Ci0gZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdAotdzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT5jbGllbnQuYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CisKKwlpZiAoZGF0YS0+bG03NVswXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOworCWlmIChkYXRhLT5sbTc1WzFdKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVsxXSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBUaGUgU01CdXMgbG9ja3MgaXRzZWxmLCB1c3VhbGx5LCBidXQgbm90aGluZyBtYXkgYWNjZXNzIHRoZSBXaW5ib25kIGJldHdlZW4KLSAgIGJhbmsgc3dpdGNoZXMuIElTQSBhY2Nlc3MgbXVzdCBhbHdheXMgYmUgbG9ja2VkIGV4cGxpY2l0bHkhCi0gICBXZSBpZ25vcmUgdGhlIFc4Mzc4MUQgQlVTWSBmbGFnIGF0IHRoaXMgbW9tZW50IC0gaXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MsCi0gICB3b3VsZCBzbG93IGRvd24gdGhlIFc4Mzc4MUQgYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4KLSAgIFRoZXJlIGFyZSBzb21lIHVnbHkgdHlwZWNhc3RzIGhlcmUsIGJ1dCB0aGUgZ29vZCBuZXdzIGlzIC0gdGhleSBzaG91bGQKLSAgIG5vd2hlcmUgZWxzZSBiZSBuZWNlc3NhcnkhICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX3JlYWRfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZykKK3c4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpbnQgcmVzLCB3b3JkX3NpemVkLCBiYW5rOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IHJlcywgYmFuazsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2w7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCi0JCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQotCQkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUwKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTMpCi0JCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOwotCQlpZiAocmVnICYgMHhmZjAwKSB7Ci0JCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCQlvdXRiX3AocmVnID4+IDgsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQl9Ci0JCW91dGJfcChyZWcgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCXJlcyA9IGluYl9wKGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJaWYgKHdvcmRfc2l6ZWQpIHsKLQkJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCXJlcyA9Ci0JCQkgICAgKHJlcyA8PCA4KSArIGluYl9wKGNsaWVudC0+YWRkciArCi0JCQkJCSAgICAgICBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQorCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKKwlpZiAoYmFuayA+IDIpCisJCS8qIHN3aXRjaCBiYW5rcyAqLworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJCQkJICBiYW5rKTsKKwlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7CisJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYpOwogCX0gZWxzZSB7Ci0JCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKLQkJaWYgKGJhbmsgPiAyKQotCQkJLyogc3dpdGNoIGJhbmtzICovCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCQkJCSAgYmFuayk7Ci0JCWlmIChiYW5rID09IDAgfHwgYmFuayA+IDIpIHsKLQkJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYpOwotCQl9IGVsc2UgewotCQkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLwotCQkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKLQkJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCi0JCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKLQkJCWNhc2UgMHg1MDoJLyogVEVNUCAqLwotCQkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDApKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCi0JCQkJcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsLCAxKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MzoJLyogSFlTVCAqLwotCQkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDIpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1NToJLyogT1ZFUiAqLwotCQkJZGVmYXVsdDoKLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAzKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KKwkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKKwkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KKwkJc3dpdGNoIChyZWcgJiAweGZmKSB7CisJCWNhc2UgMHg1MDoJLyogVEVNUCAqLworCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMCkpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCisJCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2wsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzoJLyogSFlTVCAqLworCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMikpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1NToJLyogT1ZFUiAqLworCQlkZWZhdWx0OgorCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMykpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGJhbmsgPiAyKQotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOwogCX0KLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCWlmIChiYW5rID4gMikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOworCiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludAotdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit3ODM3ODFkX3dyaXRlX3ZhbHVlX2kyYyhzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaW50IHdvcmRfc2l6ZWQsIGJhbms7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgYmFuazsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2w7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCi0JCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQotCQkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKHJlZyA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AocmVnICYgMHhmZiwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlpZiAod29yZF9zaXplZCkgewotCQkJb3V0Yl9wKHZhbHVlID4+IDgsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKChyZWcgJiAweGZmKSArIDEsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQl9Ci0JCW91dGJfcCh2YWx1ZSAmIDB4ZmYsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQorCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKKwlpZiAoYmFuayA+IDIpCisJCS8qIHN3aXRjaCBiYW5rcyAqLworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJCQkJICBiYW5rKTsKKwlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmLAorCQkJCQkgIHZhbHVlICYgMHhmZik7CiAJfSBlbHNlIHsKLQkJYmFuayA9IChyZWcgPj4gOCkgJiAweDBmOwotCQlpZiAoYmFuayA+IDIpCi0JCQkvKiBzd2l0Y2ggYmFua3MgKi8KLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLAotCQkJCQkJICBiYW5rKTsKLQkJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgewotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYsCi0JCQkJCQkgIHZhbHVlICYgMHhmZik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBzd2l0Y2ggdG8gc3ViY2xpZW50ICovCi0JCQljbCA9IGRhdGEtPmxtNzVbYmFuayAtIDFdOwotCQkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KLQkJCXN3aXRjaCAocmVnICYgMHhmZikgewotCQkJY2FzZSAweDUyOgkvKiBDT05GSUcgKi8KLQkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsLCAxLCB2YWx1ZSAmIDB4ZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDUzOgkvKiBIWVNUICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMiwgc3dhYjE2KHZhbHVlKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KLQkJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAzLCBzd2FiMTYodmFsdWUpKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLworCQljbCA9IGRhdGEtPmxtNzVbYmFuayAtIDFdOworCQkvKiBjb252ZXJ0IGZyb20gSVNBIHRvIExNNzUgSTJDIGFkZHJlc3NlcyAqLworCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKKwkJY2FzZSAweDUyOgkvKiBDT05GSUcgKi8KKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2wsIDEsIHZhbHVlICYgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSAweDUzOgkvKiBIWVNUICovCisJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAyLCBzd2FiMTYodmFsdWUpKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KKwkJCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2wsIDMsIHN3YWIxNih2YWx1ZSkpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGJhbmsgPiAyKQotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOwogCX0KLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCWlmIChiYW5rID4gMikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzgsNyArMTQyNyw3IEBACiBzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE3NzUsOCArMTUyNCw3IEBACiAJCQkJCQlXODM3ODFEX1JFR19BTEFSTTIpIDw8IDgpOwogCQl9CiAJCWkgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMik7Ci0JCWRhdGEtPmJlZXBfZW5hYmxlID0gaSA+PiA3OwotCQlkYXRhLT5iZWVwX21hc2sgPSAoKGkgJiAweDdmKSA8PCA4KSArCisJCWRhdGEtPmJlZXBfbWFzayA9IChpIDw8IDgpICsKIAkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMxKTsKIAkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MWQpICYmIChkYXRhLT50eXBlICE9IGFzOTkxMjdmKSkgewogCQkJZGF0YS0+YmVlcF9tYXNrIHw9CkBAIC0xNzkyLDYgKzE1NDAsMjc1IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3ODM3ODFkX2lkc1tdID0geworCXsgInc4Mzc4MWQiLCB3ODM3ODFkLCB9LAorCXsgInc4Mzc4MmQiLCB3ODM3ODJkLCB9LAorCXsgInc4Mzc4M3MiLCB3ODM3ODNzLCB9LAorCXsgImFzOTkxMjdmIiwgYXM5OTEyN2YgfSwKKwl7IC8qIExJU1QgRU5EICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdzgzNzgxZF9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdzgzNzgxZF9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3ODM3ODFkIiwKKwl9LAorCS5wcm9iZQkJPSB3ODM3ODFkX3Byb2JlLAorCS5yZW1vdmUJCT0gdzgzNzgxZF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gdzgzNzgxZF9pZHMsCisJLmRldGVjdAkJPSB3ODM3ODFkX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CisKKy8qCisgKiBJU0EgcmVsYXRlZCBjb2RlCisgKi8KKyNpZmRlZiBDT05GSUdfSVNBCisKKy8qIElTQSBkZXZpY2UsIGlmIGZvdW5kICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlzYV9hZGRyZXNzID0gMHgyOTA7CisKKy8qIEkyQyBkZXZpY2VzIGdldCB0aGlzIG5hbWUgYXR0cmlidXRlIGF1dG9tYXRpY2FsbHksIGJ1dCBmb3IgSVNBIGRldmljZXMKKyAgIHdlIG11c3QgY3JlYXRlIGl0IGJ5IG91cnNlbHZlcy4gKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfZGF0YV9pZl9pc2Eodm9pZCkKK3sKKwlyZXR1cm4gcGRldiA/IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpIDogTlVMTDsKK30KKworLyogUmV0dXJucyAxIGlmIHRoZSBJMkMgY2hpcCBhcHBlYXJzIHRvIGJlIGFuIGFsaWFzIG9mIHRoZSBJU0EgY2hpcCAqLworc3RhdGljIGludCB3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqaXNhOworCWludCBpOworCisJaWYgKCFwZGV2KQkvKiBObyBJU0EgY2hpcCAqLworCQlyZXR1cm4gMDsKKworCWlzYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBjbGllbnQtPmFkZHIpCisJCXJldHVybiAwOwkvKiBBZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggKi8KKwlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlKGlzYSwgVzgzNzgxRF9SRUdfV0NISVBJRCkgIT0gY2hpcGlkKQorCQlyZXR1cm4gMDsJLyogQ2hpcCB0eXBlIGRvZXNuJ3QgbWF0Y2ggKi8KKworCS8qIFdlIGNvbXBhcmUgYWxsIHRoZSBsaW1pdCByZWdpc3RlcnMsIHRoZSBjb25maWcgcmVnaXN0ZXIgYW5kIHRoZQorCSAqIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MmI7IGkgPD0gMHgzZDsgaSsrKSB7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX0NPTkZJRykgIT0KKwkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ09ORklHKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMHg0MzsgaSA8PSAweDQ2OyBpKyspIHsKKwkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3ODM3ODFkX3JlYWRfdmFsdWVfaXNhKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJaW50IHdvcmRfc2l6ZWQsIHJlczsKKworCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQorCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQorCSAgICAmJiAoKChyZWcgJiAweDAwZmYpID09IDB4NTApCisJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDUzKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZyA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcChyZWcgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwlyZXMgPSBpbmJfcChkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAod29yZF9zaXplZCkgeworCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlyZXMgPQorCQkgICAgKHJlcyA8PCA4KSArIGluYl9wKGRhdGEtPmlzYV9hZGRyICsKKwkJCQkgICAgICAgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCgwLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3c4Mzc4MWRfd3JpdGVfdmFsdWVfaXNhKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSkKK3sKKwlpbnQgd29yZF9zaXplZDsKKworCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQorCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQorCSAgICAmJiAoKChyZWcgJiAweDAwZmYpID09IDB4NTMpCisJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7CisJaWYgKHJlZyAmIDB4ZmYwMCkgeworCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnID4+IDgsCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJb3V0Yl9wKHJlZyAmIDB4ZmYsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCWlmICh3b3JkX3NpemVkKSB7CisJCW91dGJfcCh2YWx1ZSA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcCh2YWx1ZSAmIDB4ZmYsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKDAsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KK30KKworLyogVGhlIFNNQnVzIGxvY2tzIGl0c2VsZiwgdXN1YWxseSwgYnV0IG5vdGhpbmcgbWF5IGFjY2VzcyB0aGUgV2luYm9uZCBiZXR3ZWVuCisgICBiYW5rIHN3aXRjaGVzLiBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5IQorICAgV2UgaWdub3JlIHRoZSBXODM3ODFEIEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAorICAgd291bGQgc2xvdyBkb3duIHRoZSBXODM3ODFEIGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCisgICBUaGVyZSBhcmUgc29tZSB1Z2x5IHR5cGVjYXN0cyBoZXJlLCBidXQgdGhlIGdvb2QgbmV3cyBpcyAtIHRoZXkgc2hvdWxkCisgICBub3doZXJlIGVsc2UgYmUgbmVjZXNzYXJ5ISAqLworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJaWYgKGNsaWVudCkKKwkJcmVzID0gdzgzNzgxZF9yZWFkX3ZhbHVlX2kyYyhkYXRhLCByZWcpOworCWVsc2UKKwkJcmVzID0gdzgzNzgxZF9yZWFkX3ZhbHVlX2lzYShkYXRhLCByZWcpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAordzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWlmIChjbGllbnQpCisJCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaTJjKGRhdGEsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJdzgzNzgxZF93cml0ZV92YWx1ZV9pc2EoZGF0YSwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3c4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVyciwgcmVnOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyLAorCQkJICAgICJ3ODM3ODFkIikpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOworCX0KKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5pc2FfYWRkciA9IHJlcy0+c3RhcnQ7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZWcgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDB4MzA6CisJCWRhdGEtPnR5cGUgPSB3ODM3ODJkOworCQlkYXRhLT5uYW1lID0gInc4Mzc4MmQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhLT50eXBlID0gdzgzNzgxZDsKKwkJZGF0YS0+bmFtZSA9ICJ3ODM3ODFkIjsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBXODM3ODFEIGNoaXAgKi8KKwl3ODM3ODFkX2luaXRfZGV2aWNlKCZwZGV2LT5kZXYpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwllcnIgPSB3ODM3ODFkX2NyZWF0ZV9maWxlcygmcGRldi0+ZGV2LCBkYXRhLT50eXBlLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCisJcmV0dXJuIDA7CisKKyBleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWtmcmVlKGRhdGEpOworIGV4aXRfcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyKTsKKyBleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0Cit3ODM3ODFkX2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzgzNzgxZF9pc2FfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJ3ODM3ODFkIiwKKwl9LAorCS5wcm9iZSA9IHc4Mzc4MWRfaXNhX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3ODM3ODFkX2lzYV9yZW1vdmUpLAorfTsKKwogLyogcmV0dXJuIDEgaWYgYSBzdXBwb3J0ZWQgY2hpcCBpcyBmb3VuZCwgMCBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQgX19pbml0CiB3ODM3ODFkX2lzYV9mb3VuZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzKQpAQCAtMTkyOCwxOCArMTk0NSwxNCBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAotc2Vuc29yc193ODM3ODFkX2luaXQodm9pZCkKK3c4Mzc4MWRfaXNhX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7Ci0JaWYgKHJlcykKLQkJZ290byBleGl0OwotCiAJaWYgKHc4Mzc4MWRfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgewogCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7CiAJCWlmIChyZXMpCi0JCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKwkJCWdvdG8gZXhpdDsKIAogCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KIAkJcmVzID0gdzgzNzgxZF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CkBAIC0xOTQ5LDEwICsxOTYyLDg2IEBACiAKIAlyZXR1cm4gMDsKIAotIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjoKK2V4aXRfdW5yZWdfaXNhX2RyaXZlcjoKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKLSBleGl0X3VucmVnX2kyY19kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKK2V4aXQ6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKHZvaWQpCit7CisJaWYgKHBkZXYpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOworCX0KK30KKyNlbHNlIC8qICFDT05GSUdfSVNBICovCisKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoZGF0YSwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAordzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJdzgzNzgxZF93cml0ZV92YWx1ZV9pMmMoZGF0YSwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdAordzgzNzgxZF9pc2FfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKHZvaWQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0lTQSAqLworCitzdGF0aWMgaW50IF9faW5pdAorc2Vuc29yc193ODM3ODFkX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJLyogV2UgcmVnaXN0ZXIgdGhlIElTQSBkZXZpY2UgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIHNraXAgdGhlCisJICogcmVnaXN0cmF0aW9uIG9mIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIHNhbWUgZGV2aWNlLiAqLworCXJlcyA9IHc4Mzc4MWRfaXNhX3JlZ2lzdGVyKCk7CisJaWYgKHJlcykKKwkJZ290byBleGl0OworCisJcmVzID0gaTJjX2FkZF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKKwlpZiAocmVzKQorCQlnb3RvIGV4aXRfdW5yZWdfaXNhOworCisJcmV0dXJuIDA7CisKKyBleGl0X3VucmVnX2lzYToKKwl3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKCk7CiAgZXhpdDoKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk2MCwxMCArMjA0OSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHNlbnNvcnNfdzgzNzgxZF9leGl0KHZvaWQpCiB7Ci0JaWYgKHBkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOwotCX0KKwl3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKCk7CiAJaTJjX2RlbF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwppbmRleCBkZTIxMTQyLi41NzY4ZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwpAQCAtMjMsNyArMjMsNyBAQAogICAgIFN1cHBvcnRzIGZvbGxvd2luZyBjaGlwczoKIAogICAgIENoaXAJI3ZpbgkjZmFuaW4JI3B3bQkjdGVtcAl3Y2hpcGlkCXZlbmRpZAlpMmMJSVNBCi0gICAgdzgzNzkxZAkxMAk1CTMJMwkweDcxCTB4NWNhMwl5ZXMJbm8KKyAgICB3ODM3OTFkCTEwCTUJNQkzCTB4NzEJMHg1Y2EzCXllcwlubwogCiAgICAgVGhlIHc4Mzc5MWQgY2hpcCBhcHBlYXJzIHRvIGJlIHBhcnQgd2F5IGJldHdlZW4gdGhlIDgzNzgxZCBhbmQgdGhlCiAgICAgODM3OTJkLiBUaHVzLCB0aGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGJvdGggdGhlIHc4Mzc5MmQuYyBhbmQKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgTlVNQkVSX09GX1ZJTgkJMTAKICNkZWZpbmUgTlVNQkVSX09GX0ZBTklOCQk1CiAjZGVmaW5lIE5VTUJFUl9PRl9URU1QSU4JMworI2RlZmluZSBOVU1CRVJfT0ZfUFdNCQk1CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCAweDJmLApAQCAtMTE2LDYgKzExNywyNSBAQAogCTB4QkQsCQkJLyogRkFOIDUgQ291bnQgTG93IExpbWl0IGluIERhdGFTaGVldCAqLwogfTsKIAorc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1BXTVtOVU1CRVJfT0ZfUFdNXSA9IHsKKwkweDgxLAkJCS8qIFBXTSAxIGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHg4MywJCQkvKiBQV00gMiBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4OTQsCQkJLyogUFdNIDMgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KKwkweEEwLAkJCS8qIFBXTSA0IGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHhBMSwJCQkvKiBQV00gNSBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUWzNdID0geworCTB4ODUsCQkJLyogUFdNIDEgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciB0ZW1wIDEgKi8KKwkweDg2LAkJCS8qIFBXTSAyIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgdGVtcCAyICovCisJMHg5NiwJCQkvKiBQV00gMyB0YXJnZXQgdGVtcGVyYXR1cmUgZm9yIHRlbXAgMyAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1RFTVBfVE9MWzJdID0geworCTB4ODcsCQkJLyogUFdNIDEvMiB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KKwkweDk3LAkJCS8qIFBXTSAzIHRlbXBlcmF0dXJlIHRvbGVyYW5jZSAqLworfTsKKwogc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX0ZBTl9DRkdbMl0gPSB7CiAJMHg4NCwJCQkvKiBGQU4gMS8yIGNvbmZpZ3VyYXRpb24gKi8KIAkweDk1LAkJCS8qIEZBTiAzIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTE2MCw2ICsxODAsNyBAQAogCTB4QTMsCQkJLyogQkVFUCBDb250cm9sIFJlZ2lzdGVyIDMgKi8KIH07CiAKKyNkZWZpbmUgVzgzNzkxRF9SRUdfR1BJTwkJMHgxNQogI2RlZmluZSBXODM3OTFEX1JFR19DT05GSUcJCTB4NDAKICNkZWZpbmUgVzgzNzkxRF9SRUdfVklEX0ZBTkRJVgkJMHg0NwogI2RlZmluZSBXODM3OTFEX1JFR19ESURfVklENAkJMHg0OQpAQCAtMjI0LDYgKzI0NSwxNSBAQAogCQkJCSAodmFsKSA8IDAgPyAoKHZhbCkgLSAyNTApIC8gNTAwICogMTI4IDogXAogCQkJCSAoKHZhbCkgKyAyNTApIC8gNTAwICogMTI4KQogCisvKiBmb3IgdGhlcm1hbCBjcnVpc2UgdGFyZ2V0IHRlbXAsIDctYml0cywgTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cyAqLworI2RlZmluZSBUQVJHRVRfVEVNUF9UT19SRUcodmFsKQkJKCh2YWwpIDwgMCA/IDAgOiBcCisJCQkJCSh2YWwpID49IDEyNzAwMCA/IDEyNyA6IFwKKwkJCQkJKCh2YWwpICsgNTAwKSAvIDEwMDApCisKKy8qIGZvciB0aGVybWFsIGNydWlzZSB0ZW1wIHRvbGVyYW5jZSwgNC1iaXRzLCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzICovCisjZGVmaW5lIFRPTF9URU1QX1RPX1JFRyh2YWwpCQkoKHZhbCkgPCAwID8gMCA6IFwKKwkJCQkJKHZhbCkgPj0gMTUwMDAgPyAxNSA6IFwKKwkJCQkJKCh2YWwpICsgNTAwKSAvIDEwMDApCiAKICNkZWZpbmUgQkVFUF9NQVNLX1RPX1JFRyh2YWwpCQkoKHZhbCkgJiAweGZmZmZmZikKICNkZWZpbmUgQkVFUF9NQVNLX0ZST01fUkVHKHZhbCkJCSgodmFsKSAmIDB4ZmZmZmZmKQpAQCAtMjc1LDYgKzMwNSwxNCBAQAogCQkJCSAgIHR3byBzZW5zb3JzIHdpdGggdGhyZWUgdmFsdWVzCiAJCQkJICAgKGN1ciwgb3ZlciwgaHlzdCkgICovCiAKKwkvKiBQV01zICovCisJdTggcHdtWzVdOwkJLyogcHdtIGR1dHkgY3ljbGUgKi8KKwl1OCBwd21fZW5hYmxlWzNdOwkvKiBwd20gZW5hYmxlIHN0YXR1cyBmb3IgZmFuIDEtMworCQkJCQkoZmFuIDQtNSBvbmx5IHN1cHBvcnQgbWFudWFsIG1vZGUpICovCisKKwl1OCB0ZW1wX3RhcmdldFszXTsJLyogcHdtIDEtMyB0YXJnZXQgdGVtcGVyYXR1cmUgKi8KKwl1OCB0ZW1wX3RvbGVyYW5jZVszXTsJLyogcHdtIDEtMyB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KKwogCS8qIE1pc2MgKi8KIAl1MzIgYWxhcm1zOwkJLyogcmVhbHRpbWUgc3RhdHVzIHJlZ2lzdGVyIGVuY29kaW5nLGNvbWJpbmVkICovCiAJdTggYmVlcF9lbmFibGU7CQkvKiBHbG9iYWwgYmVlcCBlbmFibGUgKi8KQEAgLTY1Miw2ICs2OTAsMjE3IEBACiAJU0VOU09SX0FUVFIoZmFuNV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMjIpLAogfTsKIAorLyogcmVhZC93cml0ZSBQV01zICovCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnB3bVtucl0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bVtucl0gPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgMjU1KTsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfUFdNW25yXSwgZGF0YS0+cHdtW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9wd21bXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDApLAorCVNFTlNPUl9BVFRSKHB3bTIsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgMSksCisJU0VOU09SX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAyKSwKKwlTRU5TT1JfQVRUUihwd200LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDMpLAorCVNFTlNPUl9BVFRSKHB3bTUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgNCksCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bWVuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnB3bV9lbmFibGVbbnJdICsgMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3B3bWVuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1OCByZWdfY2ZnX3RtcDsKKwl1OCByZWdfaWR4ID0gMDsKKwl1OCB2YWxfc2hpZnQgPSAwOworCXU4IGtlZXBfbWFzayA9IDA7CisKKwlpbnQgcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisKKwlpZiAocmV0IHx8IHZhbCA8IDEgfHwgdmFsID4gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cHdtX2VuYWJsZVtucl0gPSB2YWwgLSAxOworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSAyOworCQlrZWVwX21hc2sgPSAweGYzOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSA0OworCQlrZWVwX21hc2sgPSAweGNmOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ19pZHggPSAxOworCQl2YWxfc2hpZnQgPSAyOworCQlrZWVwX21hc2sgPSAweGYzOworCQlicmVhazsKKwl9CisKKwlyZWdfY2ZnX3RtcCA9IHc4Mzc5MWRfcmVhZChjbGllbnQsIFc4Mzc5MURfUkVHX0ZBTl9DRkdbcmVnX2lkeF0pOworCXJlZ19jZmdfdG1wID0gKHJlZ19jZmdfdG1wICYga2VlcF9tYXNrKSB8CisJCQkJCWRhdGEtPnB3bV9lbmFibGVbbnJdIDw8IHZhbF9zaGlmdDsKKworCXc4Mzc5MWRfd3JpdGUoY2xpZW50LCBXODM3OTFEX1JFR19GQU5fQ0ZHW3JlZ19pZHhdLCByZWdfY2ZnX3RtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9wd21lbmFibGVbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAxKSwKKwlTRU5TT1JfQVRUUihwd20zX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAyKSwKK307CisKKy8qIEZvciBTbWFydCBGYW4gSSAvIFRoZXJtYWwgQ3J1aXNlICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX3RhcmdldFtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggdGFyZ2V0X21hc2s7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfdGFyZ2V0W25yXSA9IFRBUkdFVF9URU1QX1RPX1JFRyh2YWwpOworCXRhcmdldF9tYXNrID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQlXODM3OTFEX1JFR19URU1QX1RBUkdFVFtucl0pICYgMHg4MDsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbbnJdLAorCQkJCWRhdGEtPnRlbXBfdGFyZ2V0W25yXSB8IHRhcmdldF9tYXNrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfdGFyZ2V0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90YXJnZXQsIHN0b3JlX3RlbXBfdGFyZ2V0LCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl90YXJnZXQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RhcmdldCwgc3RvcmVfdGVtcF90YXJnZXQsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdGFyZ2V0LCBzdG9yZV90ZW1wX3RhcmdldCwgMiksCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX3RvbGVyYW5jZVtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF90b2xlcmFuY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggdGFyZ2V0X21hc2s7CisJdTggcmVnX2lkeCA9IDA7CisJdTggdmFsX3NoaWZ0ID0gMDsKKwl1OCBrZWVwX21hc2sgPSAwOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSAwOworCQlrZWVwX21hc2sgPSAweGYwOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSA0OworCQlrZWVwX21hc2sgPSAweDBmOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ19pZHggPSAxOworCQl2YWxfc2hpZnQgPSAwOworCQlrZWVwX21hc2sgPSAweGYwOworCQlicmVhazsKKwl9CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdID0gVE9MX1RFTVBfVE9fUkVHKHZhbCk7CisJdGFyZ2V0X21hc2sgPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJVzgzNzkxRF9SRUdfVEVNUF9UT0xbcmVnX2lkeF0pICYga2VlcF9tYXNrOworCXc4Mzc5MWRfd3JpdGUoY2xpZW50LCBXODM3OTFEX1JFR19URU1QX1RPTFtyZWdfaWR4XSwKKwkJCShkYXRhLT50ZW1wX3RvbGVyYW5jZVtucl0gPDwgdmFsX3NoaWZ0KSB8IHRhcmdldF9tYXNrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfdG9sZXJhbmNlW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfdG9sZXJhbmNlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90b2xlcmFuY2UsIHN0b3JlX3RlbXBfdG9sZXJhbmNlLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl90b2xlcmFuY2UsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RvbGVyYW5jZSwgc3RvcmVfdGVtcF90b2xlcmFuY2UsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdG9sZXJhbmNlLCBzdG9yZV90ZW1wX3RvbGVyYW5jZSwgMiksCit9OworCiAvKiByZWFkL3dyaXRlIHRoZSB0ZW1wZXJhdHVyZTEsIGluY2x1ZGVzIG1lYXN1cmVkIHZhbHVlIGFuZCBsaW1pdHMgKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKIAkJCQljaGFyICpidWYpCkBAIC05MDgsOCArMTE1Nyw2IEBACiAJRkFOX1VOSVRfQVRUUlMoMCksCiAJRkFOX1VOSVRfQVRUUlMoMSksCiAJRkFOX1VOSVRfQVRUUlMoMiksCi0JRkFOX1VOSVRfQVRUUlMoMyksCi0JRkFOX1VOSVRfQVRUUlMoNCksCiAJVEVNUF9VTklUX0FUVFJTKDApLAogCVRFTVBfVU5JVF9BVFRSUygxKSwKIAlURU1QX1VOSVRfQVRUUlMoMiksCkBAIC05MTgsNiArMTE2NSwxOCBAQAogCSZzZGFfYmVlcF9jdHJsWzFdLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZzZGFfcHdtWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bMV0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bVsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtZW5hYmxlWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21lbmFibGVbMV0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bWVuYWJsZVsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90YXJnZXRbMF0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdGFyZ2V0WzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RhcmdldFsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90b2xlcmFuY2VbMF0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdG9sZXJhbmNlWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RvbGVyYW5jZVsyXS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTkyNSw2ICsxMTg0LDIwIEBACiAJLmF0dHJzID0gdzgzNzkxZF9hdHRyaWJ1dGVzLAogfTsKIAorLyogU2VwYXJhdGUgZ3JvdXAgb2YgYXR0cmlidXRlcyBmb3IgZmFuL3B3bSA0LTUuIFRoZWlyIHBpbnMgY2FuIGFsc28gYmUKKyAgIGluIHVzZSBmb3IgR1BJTyBpbiB3aGljaCBjYXNlIHRoZWlyIHN5c2ZzLWludGVyZmFjZSBzaG91bGQgbm90IGJlIG1hZGUKKyAgIGF2YWlsYWJsZSAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnc4Mzc5MWRfYXR0cmlidXRlc19mYW5wd200NVtdID0geworCUZBTl9VTklUX0FUVFJTKDMpLAorCUZBTl9VTklUX0FUVFJTKDQpLAorCSZzZGFfcHdtWzNdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bNF0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3ODM3OTFkX2dyb3VwX2ZhbnB3bTQ1ID0geworCS5hdHRycyA9IHc4Mzc5MWRfYXR0cmlidXRlc19mYW5wd200NSwKK307CiAKIHN0YXRpYyBpbnQgdzgzNzkxZF9kZXRlY3Rfc3ViY2xpZW50cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewpAQCAtMTA1Niw2ICsxMzI5LDcgQEAKIAlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlpbnQgaSwgZXJyOworCXU4IGhhc19mYW5wd200NTsKIAogI2lmZGVmIERFQlVHCiAJaW50IHZhbDE7CkBAIC0xMDkwLDE1ICsxMzY0LDI3IEBACiAJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3OTFkX2dyb3VwKSkpCiAJCWdvdG8gZXJyb3IzOwogCisJLyogQ2hlY2sgaWYgcGlucyBvZiBmYW4vcHdtIDQtNSBhcmUgaW4gdXNlIGFzIEdQSU8gKi8KKwloYXNfZmFucHdtNDUgPSB3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19HUElPKSAmIDB4MTA7CisJaWYgKGhhc19mYW5wd200NSkgeworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCSAmdzgzNzkxZF9ncm91cF9mYW5wd200NSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yNDsKKwl9CisKIAkvKiBFdmVyeXRoaW5nIGlzIHJlYWR5LCBub3cgcmVnaXN0ZXIgdGhlIHdvcmtpbmcgZGV2aWNlICovCiAJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gZXJyb3I1OwogCX0KIAogCXJldHVybiAwOwogCitlcnJvcjU6CisJaWYgKGhhc19mYW5wd200NSkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cF9mYW5wd200NSk7CiBlcnJvcjQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cCk7CiBlcnJvcjM6CkBAIC0xMjM2LDYgKzE1MjIsMzYgQEAKIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJCWRhdGEtPmZhbl9kaXZbaV0gfD0gKHZiYXRfcmVnID4+ICgzICsgaSkpICYgMHgwNDsKIAorCQkvKiBVcGRhdGUgUFdNIGR1dHkgY3ljbGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9QV007IGkrKykgeworCQkJZGF0YS0+cHdtW2ldID0gIHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJCQlXODM3OTFEX1JFR19QV01baV0pOworCQl9CisKKwkJLyogVXBkYXRlIFBXTSBlbmFibGUgc3RhdHVzICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXJlZ19hcnJheV90bXBbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQkJVzgzNzkxRF9SRUdfRkFOX0NGR1tpXSk7CisJCX0KKwkJZGF0YS0+cHdtX2VuYWJsZVswXSA9IChyZWdfYXJyYXlfdG1wWzBdID4+IDIpICYgMHgwMzsKKwkJZGF0YS0+cHdtX2VuYWJsZVsxXSA9IChyZWdfYXJyYXlfdG1wWzBdID4+IDQpICYgMHgwMzsKKwkJZGF0YS0+cHdtX2VuYWJsZVsyXSA9IChyZWdfYXJyYXlfdG1wWzFdID4+IDIpICYgMHgwMzsKKworCQkvKiBVcGRhdGUgUFdNIHRhcmdldCB0ZW1wZXJhdHVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlkYXRhLT50ZW1wX3RhcmdldFtpXSA9IHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbaV0pICYgMHg3ZjsKKwkJfQorCisJCS8qIFVwZGF0ZSBQV00gdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXJlZ19hcnJheV90bXBbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQlXODM3OTFEX1JFR19URU1QX1RPTFtpXSk7CisJCX0KKwkJZGF0YS0+dGVtcF90b2xlcmFuY2VbMF0gPSByZWdfYXJyYXlfdG1wWzBdICYgMHgwZjsKKwkJZGF0YS0+dGVtcF90b2xlcmFuY2VbMV0gPSAocmVnX2FycmF5X3RtcFswXSA+PiA0KSAmIDB4MGY7CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzJdID0gcmVnX2FycmF5X3RtcFsxXSAmIDB4MGY7CisKIAkJLyogVXBkYXRlIHRoZSBmaXJzdCB0ZW1wZXJhdHVyZSBzZW5zb3IgKi8KIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQkJZGF0YS0+dGVtcDFbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggMjc0NDNmMC4uYTlhNDVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zMTIsNyArMzEyLDYgQEAKIAkubmFtZSA9ICJNUEMgYWRhcHRlciIsCiAJLmlkID0gSTJDX0hXX01QQzEwNywKIAkuYWxnbyA9ICZtcGNfYWxnbywKLQkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BELAogCS50aW1lb3V0ID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggZTdlYjdiZi4uNjA4MDM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTU4OSwxMSArNTg5LDE2IEBACiAKIAlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJZGV2LT5pcnEgPSBpcnEtPnN0YXJ0OwotCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwlkZXYtPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOworCWlmICghZGV2LT5iYXNlKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJaWYgKChyID0gb21hcF9pMmNfZ2V0X2Nsb2NrcyhkZXYpKSAhPSAwKQotCQlnb3RvIGVycl9mcmVlX21lbTsKKwkJZ290byBlcnJfaW91bm1hcDsKIAogCW9tYXBfaTJjX3VuaWRsZShkZXYpOwogCkBAIC02NDAsNiArNjQ1LDggQEAKIAlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKIAlvbWFwX2kyY19pZGxlKGRldik7CiAJb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChkZXYtPmJhc2UpOwogZXJyX2ZyZWVfbWVtOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRldik7CkBAIC02NjEsNiArNjY4LDcgQEAKIAlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+YWRhcHRlcik7CiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7CiAJb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOworCWlvdW5tYXAoZGV2LT5iYXNlKTsKIAlrZnJlZShkZXYpOwogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCmluZGV4IGY4MGRmOWEuLjllYjc2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCWRldl9pbmZvKGRldiwgImkvbyBiYXNlICUjMDhseC4gaXJxICVkXG4iLCBiYXNlLCBpcnEpOwogCi0jaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorI2lmZGVmIENPTkZJR19QUEMKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChiYXNlKSkgewogCQlkZXZfZXJyKGRldiwgIkkvTyBhZGRyZXNzICUjMDhseCBpcyBub3QgYXZhaWxhYmxlXG4iLCBiYXNlKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKaW5kZXggMGU3YjFjNi4uNjBjYTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwpAQCAtMjU5LDYgKzI1OSwzNSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIlBvd2VyTWFjIGkyYyBidXMgJXMgcmVnaXN0ZXJlZFxuIiwgbmFtZSk7CisKKwlpZiAoIXN0cm5jbXAoYmFzZW5hbWUsICJ1bmktbiIsIDUpKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJCWNvbnN0IHUzMiAqcHJvcDsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisKKwkJLyogSW5zdGFudGlhdGUgSTJDIG1vdGlvbiBzZW5zb3IgaWYgcHJlc2VudCAqLworCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJhY2NlbGVyb21ldGVyIik7CisJCWlmIChucCAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIkFBUEwsYWNjZWxlcm9tZXRlcl8xIikgJiYKKwkJICAgIChwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCkpKSB7CisJCQlpbnQgaTJjX2J1czsKKwkJCWNvbnN0IGNoYXIgKnRtcF9idXM7CisKKwkJCS8qIGxvb2sgZm9yIGJ1cyBlaXRoZXIgdXNpbmcgInJlZyIgb3IgYnkgcGF0aCAqLworCQkJdG1wX2J1cyA9IHN0cnN0cihucC0+ZnVsbF9uYW1lLCAiL2kyYy1idXNAIik7CisJCQlpZiAodG1wX2J1cykKKwkJCQlpMmNfYnVzID0gKih0bXBfYnVzICsgOSkgLSAnMCc7CisJCQllbHNlCisJCQkJaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKKworCQkJaWYgKHBtYWNfaTJjX2dldF9jaGFubmVsKGJ1cykgPT0gaTJjX2J1cykgeworCQkJCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCQkJCWluZm8uYWRkciA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKKwkJCQlzdHJsY3B5KGluZm8udHlwZSwgImFtcyIsIEkyQ19OQU1FX1NJWkUpOworCQkJCWkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwkJCX0KKwkJfQorCX0KKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKaW5kZXggYTk1Y2I5NC4uMTczNTY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCkBAIC0xNzIsNCArMTcyLDE1IEBACiAJICBhbmQgb3RoZXIgZmVhdHVyZXMgdGhhdCBhcmUgb2Z0ZW4gdXNlZCBpbiBwb3J0YWJsZSBkZXZpY2VzIGxpa2UKIAkgIGNlbGwgcGhvbmVzIGFuZCBQREFzLgogCitjb25maWcgTUNVX01QQzgzNDlFTUlUWAorCXRyaXN0YXRlICJNUEM4MzQ5RS1tSVRYIE1DVSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMgJiYgUFBDXzgzeHgKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc29mdCBwb3dlci1vZmYgZnVuY3Rpb25hbGl0eSBvbiB0aGUgRnJlZXNjYWxlCisJICBib2FyZHMgd2l0aCB0aGUgTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIE1DVSBjaGlwcy4gVGhpcyBkcml2ZXIgd2lsbAorCSAgYWxzbyByZWdpc3RlciBNQ1UgR1BJT3Mgd2l0aCB0aGUgZ2VuZXJpYyBHUElPIEFQSSwgc28geW91J2xsIGFibGUKKwkgIHRvIHVzZSBNQ1UgcGlucyBhcyBHUElPcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQppbmRleCAzOWUzZTY5Li5jYTUyMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX1RQUzY1MDEwKQkJKz0gdHBzNjUwMTAubwogb2JqLSQoQ09ORklHX01FTkVMQVVTKQkJKz0gbWVuZWxhdXMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCitvYmotJChDT05GSUdfTUNVX01QQzgzNDlFTUlUWCkJKz0gbWN1X21wYzgzNDllbWl0eC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYwppbmRleCAyYTRhY2IyLi5kNDc3NTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jCkBAIC00NjAsNyArNDYwLDYgQEAKIAkgKi8KIAlhdDI0LT5iaW4uYXR0ci5uYW1lID0gImVlcHJvbSI7CiAJYXQyNC0+YmluLmF0dHIubW9kZSA9IGNoaXAuZmxhZ3MgJiBBVDI0X0ZMQUdfSVJVR08gPyBTX0lSVUdPIDogU19JUlVTUjsKLQlhdDI0LT5iaW4uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCWF0MjQtPmJpbi5yZWFkID0gYXQyNF9iaW5fcmVhZDsKIAlhdDI0LT5iaW4uc2l6ZSA9IGNoaXAuYnl0ZV9sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKaW5kZXggMjNiZTRkNC4uZjNlZTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKQEAgLTE5MCw3ICsxOTAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJlZXByb20iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNjgyX0VFUFJPTV9TSVpFLAogCS5yZWFkID0gZHMxNjgyX2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvbWN1X21wYzgzNDllbWl0eC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvbWN1X21wYzgzNDllbWl0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTliY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9tY3VfbXBjODM0OWVtaXR4LmMKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50IGFuZCBHUElPIGV4cGFuZGVyIGRyaXZlciBmb3IgTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIE1DVQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworLyoKKyAqIEkgZG9uJ3QgaGF2ZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIE1DVSBmaXJtd2FyZSwgSSBmb3VuZCB0aGlzIHJlZ2lzdGVyCisgKiBhbmQgYml0cyBwb3NpdGlvbnMgYnkgdGhlIHRyaWFsJmVycm9yIG1ldGhvZC4KKyAqLworI2RlZmluZSBNQ1VfUkVHX0NUUkwJMHgyMAorI2RlZmluZSBNQ1VfQ1RSTF9QT0ZGCTB4NDAKKworI2RlZmluZSBNQ1VfTlVNX0dQSU8JMgorCitzdHJ1Y3QgbWN1IHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKKwl1OCByZWdfY3RybDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWN1ICpnbG9iX21jdTsKKworc3RhdGljIHZvaWQgbWN1X3Bvd2VyX29mZih2b2lkKQoreworCXN0cnVjdCBtY3UgKm1jdSA9IGdsb2JfbWN1OworCisJcHJfaW5mbygiU2VuZGluZyBwb3dlci1vZmYgcmVxdWVzdCB0byB0aGUgTUNVLi4uXG4iKTsKKwltdXRleF9sb2NrKCZtY3UtPmxvY2spOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZ2xvYl9tY3UtPmNsaWVudCwgTUNVX1JFR19DVFJMLAorCQkJCSAgbWN1LT5yZWdfY3RybCB8IE1DVV9DVFJMX1BPRkYpOworCW11dGV4X3VubG9jaygmbWN1LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWN1X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IHRvX29mX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IG1jdSAqbWN1ID0gY29udGFpbmVyX29mKG9mX2djLCBzdHJ1Y3QgbWN1LCBvZl9nYyk7CisJdTggYml0ID0gMSA8PCAoNCArIGdwaW8pOworCisJbXV0ZXhfbG9jaygmbWN1LT5sb2NrKTsKKwlpZiAodmFsKQorCQltY3UtPnJlZ19jdHJsICY9IH5iaXQ7CisJZWxzZQorCQltY3UtPnJlZ19jdHJsIHw9IGJpdDsKKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEobWN1LT5jbGllbnQsIE1DVV9SRUdfQ1RSTCwgbWN1LT5yZWdfY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZtY3UtPmxvY2spOworfQorCitzdGF0aWMgaW50IG1jdV9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCW1jdV9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY3VfZ3Bpb2NoaXBfYWRkKHN0cnVjdCBtY3UgKm1jdSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gJm1jdS0+b2ZfZ2M7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSAmb2ZfZ2MtPmdjOworCWludCByZXQ7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbWN1LW1wYzgzNDllbWl0eCIpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJZ2MtPm93bmVyID0gVEhJU19NT0RVTEU7CisJZ2MtPmxhYmVsID0gbnAtPmZ1bGxfbmFtZTsKKwlnYy0+Y2FuX3NsZWVwID0gMTsKKwlnYy0+bmdwaW8gPSBNQ1VfTlVNX0dQSU87CisJZ2MtPmJhc2UgPSAtMTsKKwlnYy0+c2V0ID0gbWN1X2dwaW9fc2V0OworCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbWN1X2dwaW9fZGlyX291dDsKKwlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CisJb2ZfZ2MtPnhsYXRlID0gb2ZfZ3Bpb19zaW1wbGVfeGxhdGU7CisKKwlucC0+ZGF0YSA9IG9mX2djOworCW1jdS0+bnAgPSBucDsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBsb3NlIHRoZSBub2RlLCBpdHMgLT5kYXRhIGFuZCAtPmZ1bGxfbmFtZS4uLgorCSAqIFNvLCBpZiBzdWNjZWVkZWQsIHdlIGRvbid0IHB1dCB0aGUgbm9kZSBoZXJlLgorCSAqLworCXJldCA9IGdwaW9jaGlwX2FkZChnYyk7CisJaWYgKHJldCkKKwkJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWN1X2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3QgbWN1ICptY3UpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmbWN1LT5vZl9nYy5nYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlvZl9ub2RlX3B1dChtY3UtPm5wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtY3VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1jdSAqbWN1OworCWludCByZXQ7CisKKwltY3UgPSBremFsbG9jKHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY3UpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmbWN1LT5sb2NrKTsKKwltY3UtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtY3UpOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG1jdS0+Y2xpZW50LCBNQ1VfUkVHX0NUUkwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKwltY3UtPnJlZ19jdHJsID0gcmV0OworCisJcmV0ID0gbWN1X2dwaW9jaGlwX2FkZChtY3UpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJLyogWFhYOiB0aGlzIGlzIHBvdGVudGlhbGx5IHJhY3ksIGJ1dCB0aGVyZSBpcyBubyBsb2NrIGZvciBwcGNfbWQgKi8KKwlpZiAoIXBwY19tZC5wb3dlcl9vZmYpIHsKKwkJZ2xvYl9tY3UgPSBtY3U7CisJCXBwY19tZC5wb3dlcl9vZmYgPSBtY3VfcG93ZXJfb2ZmOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJ3aWxsIHByb3ZpZGUgcG93ZXItb2ZmIHNlcnZpY2VcbiIpOworCX0KKworCXJldHVybiAwOworZXJyOgorCWtmcmVlKG1jdSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWN1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtY3UgKm1jdSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQ7CisKKwlpZiAoZ2xvYl9tY3UgPT0gbWN1KSB7CisJCXBwY19tZC5wb3dlcl9vZmYgPSBOVUxMOworCQlnbG9iX21jdSA9IE5VTEw7CisJfQorCisJcmV0ID0gbWN1X2dwaW9jaGlwX3JlbW92ZShtY3UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUobWN1KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1jdV9pZHNbXSA9IHsKKwl7ICJtY3UtbXBjODM0OWVtaXR4IiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWN1X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtY3VfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1jdS1tcGM4MzQ5ZW1pdHgiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1jdV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobWN1X3JlbW92ZSksCisJLmlkX3RhYmxlID0gbWN1X2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtY3VfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1jdV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jdV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1jdV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWN1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyIE1hbmFnZW1lbnQgYW5kIEdQSU8gZXhwYW5kZXIgZHJpdmVyIGZvciAiCisJCSAgICJNUEM4MzQ5RS1tSVRYLWNvbXBhdGlibGUgTUNVIik7CitNT0RVTEVfQVVUSE9SKCJBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCmluZGV4IDE3NjEyNmQuLjRiMzY0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYwpAQCAtODMyLDUyICs4MzIsNTIgQEAKIAogc3RhdGljIHZvaWQgbWVuZWxhdXNfdG9fdGltZShjaGFyICpyZWdzLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCiB7Ci0JdC0+dG1fc2VjID0gQkNEMkJJTihyZWdzWzBdKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbMV0pOworCXQtPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1swXSk7CisJdC0+dG1fbWluID0gYmNkMmJpbihyZWdzWzFdKTsKIAlpZiAodGhlX21lbmVsYXVzLT5ydGNfY29udHJvbCAmIFJUQ19DVFJMX01PREUxMikgewotCQl0LT50bV9ob3VyID0gQkNEMkJJTihyZWdzWzJdICYgMHgxZikgLSAxOworCQl0LT50bV9ob3VyID0gYmNkMmJpbihyZWdzWzJdICYgMHgxZikgLSAxOwogCQlpZiAocmVnc1syXSAmIFJUQ19IUl9QTSkKIAkJCXQtPnRtX2hvdXIgKz0gMTI7CiAJfSBlbHNlCi0JCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3NbMl0gJiAweDNmKTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihyZWdzWzNdKTsKLQl0LT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbNF0pIC0gMTsKLQl0LT50bV95ZWFyID0gQkNEMkJJTihyZWdzWzVdKSArIDEwMDsKKwkJdC0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1syXSAmIDB4M2YpOworCXQtPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbM10pOworCXQtPnRtX21vbiA9IGJjZDJiaW4ocmVnc1s0XSkgLSAxOworCXQtPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbNV0pICsgMTAwOwogfQogCiBzdGF0aWMgaW50IHRpbWVfdG9fbWVuZWxhdXMoc3RydWN0IHJ0Y190aW1lICp0LCBpbnQgcmVnbnVtKQogewogCWludAlob3VyLCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fc2VjKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX3NlYykpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fbWluKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21pbikpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKIAlpZiAodGhlX21lbmVsYXVzLT5ydGNfY29udHJvbCAmIFJUQ19DVFJMX01PREUxMikgewogCQlob3VyID0gdC0+dG1faG91ciArIDE7CiAJCWlmIChob3VyID4gMTIpCi0JCQlob3VyID0gUlRDX0hSX1BNIHwgQklOMkJDRChob3VyIC0gMTIpOworCQkJaG91ciA9IFJUQ19IUl9QTSB8IGJpbjJiY2QoaG91ciAtIDEyKTsKIAkJZWxzZQotCQkJaG91ciA9IEJJTjJCQ0QoaG91cik7CisJCQlob3VyID0gYmluMmJjZChob3VyKTsKIAl9IGVsc2UKLQkJaG91ciA9IEJJTjJCQ0QodC0+dG1faG91cik7CisJCWhvdXIgPSBiaW4yYmNkKHQtPnRtX2hvdXIpOwogCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgaG91cik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9tZGF5KSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21kYXkpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX21vbiArIDEpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1fbW9uICsgMSkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1feWVhciAtIDEwMCkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV95ZWFyIC0gMTAwKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIApAQCAtOTE0LDcgKzkxNCw3IEBACiAJfQogCiAJbWVuZWxhdXNfdG9fdGltZShyZWdzLCB0KTsKLQl0LT50bV93ZGF5ID0gQkNEMkJJTihyZWdzWzZdKTsKKwl0LT50bV93ZGF5ID0gYmNkMmJpbihyZWdzWzZdKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTI3LDcgKzkyNyw3IEBACiAJc3RhdHVzID0gdGltZV90b19tZW5lbGF1cyh0LCBNRU5FTEFVU19SVENfU0VDKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcoTUVORUxBVVNfUlRDX1dLREFZLCBCSU4yQkNEKHQtPnRtX3dkYXkpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcoTUVORUxBVVNfUlRDX1dLREFZLCBiaW4yYmNkKHQtPnRtX3dkYXkpKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZ0aGVfbWVuZWxhdXMtPmNsaWVudC0+ZGV2LCAicnRjIHdyaXRlIHJlZyAlMDJ4ICIKIAkJCQkiZXJyICVkXG4iLCBNRU5FTEFVU19SVENfV0tEQVksIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKaW5kZXggMzA3ZDk3Ni4uYzE3MTk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWRldi5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwpAQCAtNTIxLDkgKzUyMSw5IEBACiAJCXJldHVybiBQVFJfRVJSKGkyY19kZXYpOwogCiAJLyogcmVnaXN0ZXIgdGhpcyBpMmMgZGV2aWNlIHdpdGggdGhlIGRyaXZlciBjb3JlICovCi0JaTJjX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGkyY19kZXZfY2xhc3MsICZhZGFwLT5kZXYsCi0JCQkJCSAgICAgTUtERVYoSTJDX01BSk9SLCBhZGFwLT5uciksCi0JCQkJCSAgICAgTlVMTCwgImkyYy0lZCIsIGFkYXAtPm5yKTsKKwlpMmNfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGkyY19kZXZfY2xhc3MsICZhZGFwLT5kZXYsCisJCQkJICAgICBNS0RFVihJMkNfTUFKT1IsIGFkYXAtPm5yKSwgTlVMTCwKKwkJCQkgICAgICJpMmMtJWQiLCBhZGFwLT5ucik7CiAJaWYgKElTX0VSUihpMmNfZGV2LT5kZXYpKSB7CiAJCXJlcyA9IFBUUl9FUlIoaTJjX2Rldi0+ZGV2KTsKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDZjNmRkMmYuLmE4MjBjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAogIyBTZWxlY3QgSEFWRV9JREUgaWYgSURFIGlzIHN1cHBvcnRlZAogY29uZmlnIEhBVkVfSURFCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogbWVudWNvbmZpZyBJREUKIAl0cmlzdGF0ZSAiQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydCIKQEAgLTg0LDIxICs4NCw0MCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgQkxLX0RFVl9JREVESVNLCi0JdHJpc3RhdGUgIkluY2x1ZGUgSURFL0FUQS0yIERJU0sgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBUaGlzIHdpbGwgaW5jbHVkZSBlbmhhbmNlZCBzdXBwb3J0IGZvciBNRk0vUkxML0lERSBoYXJkIGRpc2tzLiAgSWYKLQkgIHlvdSBoYXZlIGEgTUZNL1JMTC9JREUgZGlzaywgYW5kIHRoZXJlIGlzIG5vIHNwZWNpYWwgcmVhc29uIHRvIHVzZQotCSAgdGhlIG9sZCBoYXJkIGRpc2sgZHJpdmVyIGluc3RlYWQsIHNheSBZLiAgSWYgeW91IGhhdmUgYW4gU0NTSS1vbmx5Ci0JICBzeXN0ZW0sIHlvdSBjYW4gc2F5IE4gaGVyZS4KK2NvbmZpZyBJREVfR0QKKwl0cmlzdGF0ZSAiZ2VuZXJpYyBBVEEvQVRBUEkgZGlzayBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEFUQS9BVEFQSSBkaXNrcyAoaW5jbHVkaW5nIEFUQVBJIGZsb3BweSBkcml2ZXMpLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZGlzay4KLQkgIERvIG5vdCBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIGlmIHlvdXIgcm9vdCBmaWxlIHN5c3RlbQotCSAgKHRoZSBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGlzIGxvY2F0ZWQgb24gdGhlIElERSBkaXNrLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLWdkX21vZC4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElERV9HRF9BVEEKKwlib29sICJBVEEgZGlzayBzdXBwb3J0IgorCWRlcGVuZHMgb24gSURFX0dECisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyB3aWxsIGluY2x1ZGUgc3VwcG9ydCBmb3IgQVRBIGhhcmQgZGlza3MuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBJREVfR0RfQVRBUEkKKwlib29sICJBVEFQSSBmbG9wcHkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElERV9HRAorCXNlbGVjdCBJREVfQVRBUEkKKwloZWxwCisJICBUaGlzIHdpbGwgaW5jbHVkZSBzdXBwb3J0IGZvciBBVEFQSSBmbG9wcHkgZHJpdmVzCisJICAoaS5lLiBJb21lZ2EgWklQIG9yIE1LRSBMUy0xMjApLgorCisJICBGb3IgaW5mb3JtYXRpb24gYWJvdXQganVtcGVyIHNldHRpbmdzIGFuZCB0aGUgcXVlc3Rpb24KKwkgIG9mIHdoZW4gYSBaSVAgZHJpdmUgdXNlcyBhIHBhcnRpdGlvbiB0YWJsZSwgc2VlCisJICA8aHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvbGludXgvemlwL3ppcC0xLmh0bWw+LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQkxLX0RFVl9JREVDUwogCXRyaXN0YXRlICJQQ01DSUEgSURFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ01DSUEKQEAgLTE2MywyOSArMTgyLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS10YXBlLgogCi1jb25maWcgQkxLX0RFVl9JREVGTE9QUFkKLQl0cmlzdGF0ZSAiSW5jbHVkZSBJREUvQVRBUEkgRkxPUFBZIHN1cHBvcnQiCi0Jc2VsZWN0IElERV9BVEFQSQotCS0tLWhlbHAtLS0KLQkgIElmIHlvdSBoYXZlIGFuIElERSBmbG9wcHkgZHJpdmUgd2hpY2ggdXNlcyB0aGUgQVRBUEkgcHJvdG9jb2wsCi0JICBhbnN3ZXIgWS4gIEFUQVBJIGlzIGEgbmV3ZXIgcHJvdG9jb2wgdXNlZCBieSBJREUgQ0QtUk9NL3RhcGUvZmxvcHB5Ci0JICBkcml2ZXMsIHNpbWlsYXIgdG8gdGhlIFNDU0kgcHJvdG9jb2wuCi0KLQkgIFRoZSBMUy0xMjAgYW5kIHRoZSBJREUvQVRBUEkgSW9tZWdhIFpJUCBkcml2ZSBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkKLQkgIHRoaXMgZHJpdmVyLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQganVtcGVyIHNldHRpbmdzIGFuZCB0aGUgcXVlc3Rpb24KLQkgIG9mIHdoZW4gYSBaSVAgZHJpdmUgdXNlcyBhIHBhcnRpdGlvbiB0YWJsZSwgc2VlCi0JICA8aHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvbGludXgvemlwL3ppcC0xLmh0bWw+LgotCSAgKEFUQVBJIFBELUNEL0NEUiBkcml2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI7IHN1cHBvcnQKLQkgIGZvciBQRC1DRC9DRFIgZHJpdmVzIGlzIGF2YWlsYWJsZSBpZiB5b3UgYW5zd2VyIFkgdG8KLQkgICJTQ1NJIGVtdWxhdGlvbiBzdXBwb3J0IiwgYmVsb3cpLgotCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEZMT1BQWSBkcml2ZSB3aWxsIGJlIGlkZW50aWZpZWQgYWxvbmcgd2l0aAotCSAgb3RoZXIgSURFIGRldmljZXMsIGFzICJoZGIiIG9yICJoZGMiLCBvciBzb21ldGhpbmcgc2ltaWxhciAoY2hlY2sKLQkgIHRoZSBib290IG1lc3NhZ2VzIHdpdGggZG1lc2cpLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZmxvcHB5LgotCiBjb25maWcgQkxLX0RFVl9JREVTQ1NJCiAJdHJpc3RhdGUgIlNDU0kgZW11bGF0aW9uIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gU0NTSQpAQCAtMzMyLDcgKzMyOCw3IEBACiAjIFRPRE86IHNwbGl0IGl0IG9uIHBlciBob3N0IGRyaXZlciBjb25maWcgb3B0aW9ucyAob3IgbW9kdWxlIHBhcmFtZXRlcnMpCiBjb25maWcgQkxLX0RFVl9PRkZCT0FSRAogCWJvb2wgIkJvb3Qgb2ZmLWJvYXJkIGNoaXBzZXRzIGZpcnN0IHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gQkxLX0RFVl9JREVQQ0kgJiYgKEJMS19ERVZfQUVDNjJYWCB8fCBCTEtfREVWX0dFTkVSSUMgfHwgQkxLX0RFVl9IUFQzNFggfHwgQkxLX0RFVl9IUFQzNjYgfHwgQkxLX0RFVl9QREMyMDJYWF9ORVcgfHwgQkxLX0RFVl9QREMyMDJYWF9PTEQgfHwgQkxLX0RFVl9UQzg2QzAwMSkKKwlkZXBlbmRzIG9uIEJMS19ERVZfSURFUENJICYmIChCTEtfREVWX0FFQzYyWFggfHwgQkxLX0RFVl9HRU5FUklDIHx8IEJMS19ERVZfSFBUMzY2IHx8IEJMS19ERVZfUERDMjAyWFhfTkVXIHx8IEJMS19ERVZfUERDMjAyWFhfT0xEIHx8IEJMS19ERVZfVEM4NkMwMDEpCiAJaGVscAogCSAgTm9ybWFsbHksIElERSBjb250cm9sbGVycyBidWlsdCBpbnRvIHRoZSBtb3RoZXJib2FyZCAob24tYm9hcmQKIAkgIGNvbnRyb2xsZXJzKSBhcmUgYXNzaWduZWQgdG8gaWRlMCBhbmQgaWRlMSB3aGlsZSB0aG9zZSBvbiBhZGQtaW4gUENJCkBAIC00ODIsMjggKzQ3OCw2IEBACiAKIAkgIEl0IGlzIHNhZmUgdG8gc2F5IFkgdG8gdGhpcyBxdWVzdGlvbi4KIAotY29uZmlnIEJMS19ERVZfSFBUMzRYCi0JdHJpc3RhdGUgIkhQVDM0WCBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBCUk9LRU4KLQlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyB1cCB0byA0IG1vcmUgRUlERSBkZXZpY2VzIHNoYXJpbmcgYSBzaW5nbGUKLQkgIGludGVycnVwdC4gVGhlIEhQVDM0MyBjaGlwc2V0IGluIGl0cyBjdXJyZW50IGZvcm0gaXMgYSBub24tYm9vdGFibGUKLQkgIGNvbnRyb2xsZXI7IHRoZSBIUFQzNDUvSFBUMzYzIGNoaXBzZXQgaXMgYSBib290YWJsZSAobmVlZHMgQklPUyBGSVgpCi0JICBQQ0kgVURNQSBjb250cm9sbGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgZHluYW1pYyB0dW5pbmcgb2YgdGhlCi0JICBjaGlwc2V0IGR1cmluZyB0aGUgaWRlLXByb2JlIGF0IGJvb3QgdGltZS4gSXQgaXMgcmVwb3J0ZWQgdG8gc3VwcG9ydAotCSAgRFZEIElJIGRyaXZlcywgYnkgdGhlIG1hbnVmYWN0dXJlci4KLQotY29uZmlnIEhQVDM0WF9BVVRPRE1BCi0JYm9vbCAiSFBUMzRYIEFVVE9ETUEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSFBUMzRYICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgaXMgYSBkYW5nZXJvdXMgdGhpbmcgdG8gYXR0ZW1wdCBjdXJyZW50bHkhIFBsZWFzZSByZWFkIHRoZQotCSAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiA8ZmlsZTpkcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmM+LiAgSWYgeW91IHNheSBZCi0JICBoZXJlLCB0aGVuIHNheSBZIHRvICJVc2UgRE1BIGJ5IGRlZmF1bHQgd2hlbiBhdmFpbGFibGUiIGFzIHdlbGwuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBCTEtfREVWX0hQVDM2NgogCXRyaXN0YXRlICJIUFQzNlgvMzdYIGNoaXBzZXQgc3VwcG9ydCIKIAlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCmluZGV4IGNlYWY3NzkuLjA5M2QzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCkBAIC0zNywxOCArMzcsMjUgQEAKIG9iai0kKENPTkZJR19JREVfR0VORVJJQykJCSs9IGlkZS1nZW5lcmljLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERVBOUCkJCSs9IGlkZS1wbnAubwogCi1pZGUtZGlza19tb2QteSArPSBpZGUtZGlzay5vIGlkZS1kaXNrX2lvY3RsLm8KK2lkZS1nZF9tb2QteSArPSBpZGUtZ2QubwogaWRlLWNkX21vZC15ICs9IGlkZS1jZC5vIGlkZS1jZF9pb2N0bC5vIGlkZS1jZF92ZXJib3NlLm8KLWlkZS1mbG9wcHlfbW9kLXkgKz0gaWRlLWZsb3BweS5vIGlkZS1mbG9wcHlfaW9jdGwubwogCitpZmVxICgkKENPTkZJR19JREVfR0RfQVRBKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWRpc2subyBpZGUtZGlza19pb2N0bC5vCiBpZmVxICgkKENPTkZJR19JREVfUFJPQ19GUyksIHkpCi0JaWRlLWRpc2tfbW9kLXkgKz0gaWRlLWRpc2tfcHJvYy5vCi0JaWRlLWZsb3BweV9tb2QteSArPSBpZGUtZmxvcHB5X3Byb2MubworCWlkZS1nZF9tb2QteSArPSBpZGUtZGlza19wcm9jLm8KK2VuZGlmCiBlbmRpZgogCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVESVNLKQkJKz0gaWRlLWRpc2tfbW9kLm8KK2lmZXEgKCQoQ09ORklHX0lERV9HRF9BVEFQSSksIHkpCisJaWRlLWdkX21vZC15ICs9IGlkZS1mbG9wcHkubyBpZGUtZmxvcHB5X2lvY3RsLm8KK2lmZXEgKCQoQ09ORklHX0lERV9QUk9DX0ZTKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWZsb3BweV9wcm9jLm8KK2VuZGlmCitlbmRpZgorCitvYmotJChDT05GSUdfSURFX0dEKQkJCSs9IGlkZS1nZF9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFQ0QpCQkrPSBpZGUtY2RfbW9kLm8KLW9iai0kKENPTkZJR19CTEtfREVWX0lERUZMT1BQWSkJCSs9IGlkZS1mbG9wcHlfbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERVRBUEUpCQkrPSBpZGUtdGFwZS5vCiAKIGlmZXEgKCQoQ09ORklHX0JMS19ERVZfSURFQ1MpLCB5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwppbmRleCAyZTMwNTcxLi40ZTU4YjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiB7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTk9fRE9PUkxPQ0spCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWlkZV9pbml0X3BjKCZwYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDMzMDhiMWMuLjEzMjY1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC05OSw3ICs5OSw3IEBACiAvKiBNYXJrIHRoYXQgd2UndmUgc2VlbiBhIG1lZGlhIGNoYW5nZSBhbmQgaW52YWxpZGF0ZSBvdXIgaW50ZXJuYWwgYnVmZmVycy4gKi8KIHN0YXRpYyB2b2lkIGNkcm9tX3Nhd19tZWRpYV9jaGFuZ2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1RPQ19WQUxJRDsKIH0KIApAQCAtMzQwLDggKzM0MCw4IEBACiAJfQogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiJXM6IHN0YXQ6IDB4JXgsIGdvb2Rfc3RhdDogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0LAotCQkgICAgICBnb29kX3N0YXQsIHJxLT5jbWRfdHlwZSwgZXJyKTsKKwkJICAgICAgInJxLT5jbWRbMF06IDB4JXgsIHJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgc3RhdCwgZ29vZF9zdGF0LCBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsIGVycik7CiAKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7CiAJCS8qCkBAIC04NDMsMTMgKzg0MywxMCBAQAogCXJxLT5xLT5wcmVwX3JxX2ZuKHJxLT5xLCBycSk7CiB9CiAKLS8qCi0gKiBBbGwgb3RoZXIgcGFja2V0IGNvbW1hbmRzLgotICovCiBzdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleFxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0pOwogCiAJLyoKIAkgKiBTb21lIG9mIHRoZSB0cmFpbGluZyByZXF1ZXN0IHNlbnNlIGZpZWxkcyBhcmUgb3B0aW9uYWwsCkBAIC04NzYsNyArODczLDcgQEAKIAlpZiAoIXNlbnNlKQogCQlzZW5zZSA9ICZsb2NhbF9zZW5zZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgY21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgogCQkgICAgICAidGltZW91dDogJWQsIGNtZF9mbGFnczogMHgleFxuIiwgX19mdW5jX18sIGNtZFswXSwgd3JpdGUsCiAJCSAgICAgIHRpbWVvdXQsIGNtZF9mbGFncyk7CiAKQEAgLTExNzcsOCArMTE3NCw5IEBACiAJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQogCQlxdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSkgPj4gU0VDVE9SX0JJVFM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCB3cml0ZTogMHgleCwgc2Vjc19wZXJfZnJhbWU6ICV1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgd3JpdGUsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgorCQkgICAgICAic2Vjc19wZXJfZnJhbWU6ICV1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKIAogCWlmICh3cml0ZSkgewogCQkvKiBkaXNrIGhhcyBiZWNvbWUgd3JpdGUgcHJvdGVjdGVkICovCkBAIC0xMjIxLDcgKzEyMTksOCBAQAogc3RhdGljIHZvaWQgY2Ryb21fZG9fYmxvY2tfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kX3R5cGU6IDB4JXhcbiIsIF9fZnVuY19fLAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsICIKKwkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleFxuIiwgX19mdW5jX18sIHJxLT5jbWRbMF0sCiAJCSAgICAgIHJxLT5jbWRfdHlwZSk7CiAKIAlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQpAQCAtMTI1Nyw5ICsxMjU2LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBjZHJvbSBkcml2ZXIgcmVxdWVzdCByb3V0aW5lLgotICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJCQlzZWN0b3JfdCBibG9jaykKIHsKQEAgLTEyNjcsOCArMTI2MywxMCBAQAogCWlkZV9oYW5kbGVyX3QgKmZuOwogCWludCB4ZmVybGVuOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZF90eXBlOiAweCV4LCBibG9jazogJWxsdVxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRfdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgorCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4LCBibG9jazogJWxsdVxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CiAKIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfU0VFS0lORykgewpAQCAtMTQxMiw2ICsxNDEwLDEwIEBACiAKIAkqY2FwYWNpdHkgPSAxICsgYmUzMl90b19jcHUoY2FwYnVmLmxiYSk7CiAJKnNlY3RvcnNfcGVyX2ZyYW1lID0gYmxvY2tsZW4gPj4gU0VDVE9SX0JJVFM7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHVcbiIsCisJCSAgICAgIF9fZnVuY19fLCAqY2FwYWNpdHksICpzZWN0b3JzX3Blcl9mcmFtZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY0Myw2ICsxNjQ1LDkgQEAKIAkJbWF4c3BlZWQgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDhdKTsKIAl9CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY3Vyc3BlZWQ6ICV1LCBtYXhzcGVlZDogJXVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBjdXJzcGVlZCwgbWF4c3BlZWQpOworCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIAljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CiB9CkBAIC0xNzMyLDcgKzE3MzcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICgoYnVmWzggKyA2XSAmIDB4MDEpID09IDApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAlpZiAoYnVmWzggKyA2XSAmIDB4MDgpCiAJCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX05PX0VKRUNUOwogCWlmIChidWZbOCArIDNdICYgMHgwMSkKQEAgLTE3NzcsNyArMTc4Miw3IEBACiAJaWYgKChjZGktPm1hc2sgJiBDRENfRFZEX1IpID09IDAgfHwgKGNkaS0+bWFzayAmIENEQ19EVkRfUkFNKSA9PSAwKQogCQlwcmludGsoS0VSTl9DT05UICIgRFZEJXMlcyIsCiAJCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1IpID8gIiIgOiAiLVIiLAotCQkJCSAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID8gIiIgOiAiLVJBTSIpOworCQkJCSAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID8gIiIgOiAiL1JBTSIpOwogCiAJaWYgKChjZGktPm1hc2sgJiBDRENfQ0RfUikgPT0gMCB8fCAoY2RpLT5tYXNrICYgQ0RDX0NEX1JXKSA9PSAwKQogCQlwcmludGsoS0VSTl9DT05UICIgQ0QlcyVzIiwKQEAgLTE5MDgsNiArMTkxMywxNiBAQAogCUlERV9QUk9DX0RFVlNFVChkc2Nfb3ZlcmxhcCwgMCwgMSksCiAJeyAwIH0sCiB9OworCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX2NkX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZWNkX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfY2RfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlY2Rfc2V0dGluZ3M7Cit9CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjZF9saXN0X2VudHJ5IGlkZV9jZF9xdWlya3NfbGlzdFtdID0gewpAQCAtMTk4Niw4ICsyMDAxLDggQEAKIAlpZiAoIWRyaXZlLT5xdWV1ZS0+dW5wbHVnX2RlbGF5KQogCQlkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSA9IDE7CiAKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgPSBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCB8IElERV9BRkxBR19OT19FSkVDVCB8Ci0JCSAgICAgICBpZGVfY2RfZmxhZ3MoaWQpOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CisJZHJpdmUtPmF0YXBpX2ZsYWdzID0gSURFX0FGTEFHX05PX0VKRUNUIHwgaWRlX2NkX2ZsYWdzKGlkKTsKIAogCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1ZFUlRPU18zMDBfU1NEKSAmJgogCSAgICBmd19yZXZbNF0gPT0gJzEnICYmIGZ3X3Jldls2XSA8PSAnMicpCkBAIC0yMDY5LDggKzIwODQsOCBAQAogCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRlY2RfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlY2Rfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfY2RfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX2NkX3Byb2NfZGV2c2V0cywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwppbmRleCA3NDIzMWI0Li5kZjNkZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwpAQCAtODYsOCArODYsOCBAQAogCiAJaWYgKHNsb3RfbnIgPT0gQ0RTTF9DVVJSRU5UKSB7CiAJCSh2b2lkKSBjZHJvbV9jaGVja19zdGF0dXMoZHJpdmUsIE5VTEwpOwotCQlyZXR2YWwgPSAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX01FRElBX0NIQU5HRUQpID8gMSA6IDA7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX01FRElBX0NIQU5HRUQ7CisJCXJldHZhbCA9IChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQpID8gMSA6IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCQlyZXR1cm4gcmV0dmFsOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCXNlbnNlID0gJm15X3NlbnNlOwogCiAJLyogSWYgdGhlIGRyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLCBqdXN0IHByZXRlbmQuICovCi0JaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19OT19ET09STE9DSykgeworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkgewogCQlzdGF0ID0gMDsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkgICAgKHNlbnNlLT5hc2MgPT0gMHgyNCB8fCBzZW5zZS0+YXNjID09IDB4MjApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3IgbG9ja2luZyBub3Qgc3VwcG9ydGVkXG4iLAogCQkJZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAJCXN0YXQgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggMzg1M2JkZS4uMjIzNzUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0xNCw5ICsxNCw2IEBACiAgKiBUaGlzIGlzIHRoZSBJREUvQVRBIGRpc2sgZHJpdmVyLCBhcyBldm9sdmVkIGZyb20gaGQuYyBhbmQgaWRlLmMuCiAgKi8KIAotI2RlZmluZSBJREVESVNLX1ZFUlNJT04JIjEuMTgiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzksNDYgKzM2LDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQotI2Vsc2UKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCi0jZW5kaWYKLQogI2luY2x1ZGUgImlkZS1kaXNrLmgiCiAKLXN0YXRpYyBERUZJTkVfTVVURVgoaWRlZGlza19yZWZfbXV0ZXgpOwotCi0jZGVmaW5lIHRvX2lkZV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV9kaXNrX29iaiwga3JlZikKLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKLQotc3RhdGljIHN0cnVjdCBpZGVfZGlza19vYmogKmlkZV9kaXNrX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLQlpZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlpZiAoaWRrcCkgewotCQlpZiAoaWRlX2RldmljZV9nZXQoaWRrcC0+ZHJpdmUpKQotCQkJaWRrcCA9IE5VTEw7Ci0JCWVsc2UKLQkJCWtyZWZfZ2V0KCZpZGtwLT5rcmVmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci0JcmV0dXJuIGlka3A7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3B1dChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwKQotewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JbXV0ZXhfbG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotCWtyZWZfcHV0KCZpZGtwLT5rcmVmLCBpZGVfZGlza19yZWxlYXNlKTsKLQlpZGVfZGV2aWNlX3B1dChkcml2ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci19Ci0KIHN0YXRpYyBjb25zdCB1OCBpZGVfcndfY21kc1tdID0gewogCUFUQV9DTURfUkVBRF9NVUxUSSwKIAlBVEFfQ01EX1dSSVRFX01VTFRJLApAQCAtMzc0LDcgKzMzMyw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpbml0X2lkZWRpc2tfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBpZGVfZGlza19nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IGxiYTsKQEAgLTQwMywxMSArMzYyLDI4IEBACiAJCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoaWQpKQogCQkJaWRlZGlza19jaGVja19ocGEoZHJpdmUpOwogCX0KLX0KIAotc2VjdG9yX3QgaWRlX2Rpc2tfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiBkcml2ZS0+Y2FwYWNpdHk2NDsKKwkvKiBsaW1pdCBkcml2ZSBjYXBhY2l0eSB0byAxMzdHQiBpZiBMQkE0OCBjYW5ub3QgYmUgdXNlZCAqLworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCAmJgorCSAgICBkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggLSBmdWxsIGNhcGFjaXR5ICIKKwkJICAgICAgICIlbGx1IHNlY3RvcnMgKCVsbHUgTUIpXG4iLAorCQkgICAgICAgZHJpdmUtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpZHJpdmUtPmNhcGFjaXR5NjQsCisJCSAgICAgICBzZWN0b3JzX3RvX01CKGRyaXZlLT5jYXBhY2l0eTY0KSk7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gMVVMTCA8PCAyODsKKwl9CisKKwlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpKSB7CisJCWlmIChkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdXNlIExCQTQ4IERNQSAtIFBJTyBtb2RlIgorCQkJCQkgIiB3aWxsIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBzZWN0b3JzICIKKwkJCQkJICI+ICV1XG4iLCBkcml2ZS0+bmFtZSwgMSA8PCAyOCk7CisJCX0gZWxzZQorCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0xCQTQ4OworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTUwOCw3ICs0ODQsNyBAQAogCQkgKiB0aW1lIHdlIGhhdmUgdHJpbW1lZCB0aGUgZHJpdmUgY2FwYWNpdHkgaWYgTEJBNDggaXMKIAkJICogbm90IGF2YWlsYWJsZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlY2hlY2sgdGhhdC4KIAkJICovCi0JCWNhcGFjaXR5ID0gaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpOworCQljYXBhY2l0eSA9IGlkZV9nZF9jYXBhY2l0eShkcml2ZSk7CiAJCWJhcnJpZXIgPSBhdGFfaWRfZmx1c2hfZW5hYmxlZChpZCkgJiYKIAkJCShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PRkxVU0gpID09IDAgJiYKIAkJCSgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCB8fApAQCAtNjE2LDcgKzU5MiwxMiBAQAogCiBpZGVfZXh0X2RldnNldF9yd19zeW5jKG5vd2Vyciwgbm93ZXJyKTsKIAotc3RhdGljIHZvaWQgaWRlZGlza19zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGlkZV9kaXNrX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtNjUyLDMzICs2MzMsMTMgQEAKIAkJCSBkcml2ZS0+cXVldWUtPm1heF9zZWN0b3JzIC8gMik7CiAKIAkvKiBjYWxjdWxhdGUgZHJpdmUgY2FwYWNpdHksIGFuZCBzZWxlY3QgTEJBIGlmIHBvc3NpYmxlICovCi0JaW5pdF9pZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKLQotCS8qIGxpbWl0IGRyaXZlIGNhcGFjaXR5IHRvIDEzN0dCIGlmIExCQTQ4IGNhbm5vdCBiZSB1c2VkICovCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA9PSAwICYmCi0JICAgIGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IHVzZSBMQkE0OCAtIGZ1bGwgY2FwYWNpdHkgIgotCQkgICAgICAgIiVsbHUgc2VjdG9ycyAoJWxsdSBNQilcbiIsCi0JCSAgICAgICBkcml2ZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylkcml2ZS0+Y2FwYWNpdHk2NCwKLQkJICAgICAgIHNlY3RvcnNfdG9fTUIoZHJpdmUtPmNhcGFjaXR5NjQpKTsKLQkJZHJpdmUtPmNhcGFjaXR5NjQgPSAxVUxMIDw8IDI4OwotCX0KLQotCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmCi0JICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSkgewotCQlpZiAoZHJpdmUtPmNhcGFjaXR5NjQgPiAxVUxMIDw8IDI4KSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHVzZSBMQkE0OCBETUEgLSBQSU8gbW9kZSIKLQkJCQkJICIgd2lsbCBiZSB1c2VkIGZvciBhY2Nlc3Npbmcgc2VjdG9ycyAiCi0JCQkJCSAiPiAldVxuIiwgZHJpdmUtPm5hbWUsIDEgPDwgMjgpOwotCQl9IGVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19MQkE0ODsKLQl9CisJaWRlX2Rpc2tfZ2V0X2NhcGFjaXR5KGRyaXZlKTsKIAogCS8qCiAJICogaWYgcG9zc2libGUsIGdpdmUgZmRpc2sgYWNjZXNzIHRvIG1vcmUgb2YgdGhlIGRyaXZlLAogCSAqIGJ5IGNvcnJlY3RpbmcgYmlvc19jeWxzOgogCSAqLwotCWNhcGFjaXR5ID0gaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpOworCWNhcGFjaXR5ID0gaWRlX2dkX2NhcGFjaXR5KGRyaXZlKTsKIAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19GT1JDRURfR0VPTSkgPT0gMCkgewogCQlpZiAoYXRhX2lkX2xiYTQ4X2VuYWJsZWQoZHJpdmUtPmlkKSkgewpAQCAtNzE4LDkgKzY3OSwxNyBAQAogCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19XQ0FDSEU7CiAKIAlzZXRfd2NhY2hlKGRyaXZlLCAxKTsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpID09IDAgJiYKKwkgICAgKGRyaXZlLT5oZWFkID09IDAgfHwgZHJpdmUtPmhlYWQgPiAxNikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBnZW9tZXRyeTogJWQgcGh5c2ljYWwgaGVhZHM/XG4iLAorCQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5oZWFkKTsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKKwl9IGVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQVRUQUNIOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfY2FjaGVmbHVzaF9wKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX2ZsdXNoKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZiAoYXRhX2lkX2ZsdXNoX2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwIHx8CiAJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1dDQUNIRSkgPT0gMCkKQEAgLTczMCwyNjcgKzY5OSw0MCBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlczogd2NhY2hlIGZsdXNoIGZhaWxlZCFcbiIsIGRyaXZlLT5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfaW5pdF9tZWRpYShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOwotCi0JaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7Ci0KLQlkZWxfZ2VuZGlzayhnKTsKLQotCWlkZV9jYWNoZWZsdXNoX3AoZHJpdmUpOwotCi0JaWRlX2Rpc2tfcHV0KGlka3ApOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSB0b19pZGVfZGlzayhrcmVmKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcHV0X2Rpc2soZyk7Ci0Ja2ZyZWUoaWRrcCk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlX2Rpc2tfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKTsKLQotLyoKLSAqIE9uIEhQQSBkcml2ZXMgdGhlIGNhcGFjaXR5IG5lZWRzIHRvIGJlCi0gKiByZWluaXRpbGl6ZWQgb24gcmVzdW1lIG90aGVyd2lzZSB0aGUgZGlzawotICogY2FuIG5vdCBiZSB1c2VkIGFuZCBhIGhhcmQgcmVzZXQgaXMgcmVxdWlyZWQKLSAqLwotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVzdW1lKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZiAoYXRhX2lkX2hwYV9lbmFibGVkKGRyaXZlLT5pZCkpCi0JCWluaXRfaWRlZGlza19jYXBhY2l0eShkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kZXZpY2Vfc2h1dGRvd24oaWRlX2RyaXZlX3QgKmRyaXZlKQotewotI2lmZGVmCUNPTkZJR19BTFBIQQotCS8qIE9uIEFscGhhLCBoYWx0KDgpIGRvZXNuJ3QgYWN0dWFsbHkgdHVybiB0aGUgbWFjaGluZSBvZmYsCi0JICAgaXQgcHV0cyB5b3UgaW50byB0aGUgc29ydCBvZiBmaXJtd2FyZSBtb25pdG9yLiBUeXBpY2FsbHksCi0JICAgaXQncyB1c2VkIHRvIGJvb3QgYW5vdGhlciBrZXJuZWwgaW1hZ2UsIHNvIGl0J3Mgbm90IG11Y2gKLQkgICBkaWZmZXJlbnQgZnJvbSByZWJvb3QoOCkuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0bwotCSAgIHNwaW4gZG93biB0aGUgZGlzayBpbiB0aGlzIGNhc2UsIGVzcGVjaWFsbHkgc2luY2UgQWxwaGEKLQkgICBmaXJtd2FyZSBkb2Vzbid0IGhhbmRsZSBkaXNrcyBpbiBzdGFuZGJ5IG1vZGUgcHJvcGVybHkuCi0JICAgT24gdGhlIG90aGVyIGhhbmQsIGl0J3MgcmVhc29uYWJseSBzYWZlIHRvIHR1cm4gdGhlIHBvd2VyCi0JICAgb2ZmIHdoZW4gdGhlIHNodXRkb3duIHByb2Nlc3MgcmVhY2hlcyB0aGUgZmlybXdhcmUgcHJvbXB0LAotCSAgIGFzIHRoZSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0YWtlcyByYXRoZXIgbG9uZyB0aW1lIC0KLQkgICBhdCBsZWFzdCAxMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IKLQkgICB0aGUgZGlzayB0byBleHBpcmUgaXRzIHdyaXRlIGNhY2hlLiAqLwotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikgewotI2Vsc2UKLQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUKSB7Ci0jZW5kaWYKLQkJaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTaHV0ZG93bjogJXNcbiIsIGRyaXZlLT5uYW1lKTsKLQotCWRyaXZlLT5nZW5kZXYuYnVzLT5zdXNwZW5kKCZkcml2ZS0+Z2VuZGV2LCBQTVNHX1NVU1BFTkQpOwotfQotCi1zdGF0aWMgaWRlX2RyaXZlcl90IGlkZWRpc2tfZHJpdmVyID0gewotCS5nZW5fZHJpdmVyID0gewotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCQk9ICJpZGUtZGlzayIsCi0JCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKLQl9LAotCS5wcm9iZQkJCT0gaWRlX2Rpc2tfcHJvYmUsCi0JLnJlbW92ZQkJCT0gaWRlX2Rpc2tfcmVtb3ZlLAotCS5yZXN1bWUJCQk9IGlkZV9kaXNrX3Jlc3VtZSwKLQkuc2h1dGRvd24JCT0gaWRlX2RldmljZV9zaHV0ZG93biwKLQkudmVyc2lvbgkJPSBJREVESVNLX1ZFUlNJT04sCi0JLmRvX3JlcXVlc3QJCT0gaWRlX2RvX3J3X2Rpc2ssCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZV9lbmRfcmVxdWVzdCwKLQkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVfZGlza19wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVfZGlza19zZXR0aW5ncywKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpZGVkaXNrX3NldF9kb29ybG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbikKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCisJCQkJIGludCBvbikKIHsKIAlpZGVfdGFza190IHRhc2s7CisJaW50IHJldDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkKKwkJcmV0dXJuIDA7CiAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CiAJdGFzay50Zi5jb21tYW5kID0gb24gPyBBVEFfQ01EX01FRElBX0xPQ0sgOiBBVEFfQ01EX01FRElBX1VOTE9DSzsKIAl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCXJldCA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisKKwlpZiAocmV0KQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlkZWRpc2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7Ci0KLQlpZGtwID0gaWRlX2Rpc2tfZ2V0KGRpc2spOwotCWlmIChpZGtwID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87Ci0KLQlkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JaWRrcC0+b3BlbmVycysrOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCQkvKgotCQkgKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGZyb20gZG9vcl9sb2NrLAotCQkgKiBzaW5jZSB0aGUgb3BlbigpIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCwKLQkJICogYW5kIHRoZSBkb29yX2xvY2sgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LgotCQkgKi8KLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSAmJgotCQkgICAgaWRlZGlza19zZXRfZG9vcmxvY2soZHJpdmUsIDEpKQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKLQkJaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSAmJgotCQkgICAgaWRlZGlza19zZXRfZG9vcmxvY2soZHJpdmUsIDApKQotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwotCX0KLQotCWlka3AtPm9wZW5lcnMtLTsKLQotCWlkZV9kaXNrX3B1dChpZGtwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGJkZXYtPmJkX2Rpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7Ci0JZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKLQlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQotCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19BVFRBQ0gpIHsKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogaWYgcmVtb3ZhYmxlLCBhbHdheXMgYXNzdW1lIGl0IHdhcyBjaGFuZ2VkICovCi0JcmV0dXJuICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKTsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2Rpc2tfY2FwYWNpdHkoaWRrcC0+ZHJpdmUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVkaXNrX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkJPSBpZGVkaXNrX29wZW4sCi0JLnJlbGVhc2UJCT0gaWRlZGlza19yZWxlYXNlLAotCS5pb2N0bAkJCT0gaWRlX2Rpc2tfaW9jdGwsCi0JLmdldGdlbwkJCT0gaWRlZGlza19nZXRnZW8sCi0JLm1lZGlhX2NoYW5nZWQJCT0gaWRlZGlza19tZWRpYV9jaGFuZ2VkLAotCS5yZXZhbGlkYXRlX2Rpc2sJPSBpZGVkaXNrX3JldmFsaWRhdGVfZGlzaworY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhX2Rpc2tfb3BzID0geworCS5jaGVjawkJPSBpZGVfZGlza19jaGVjaywKKwkuZ2V0X2NhcGFjaXR5CT0gaWRlX2Rpc2tfZ2V0X2NhcGFjaXR5LAorCS5zZXR1cAkJPSBpZGVfZGlza19zZXR1cCwKKwkuZmx1c2gJCT0gaWRlX2Rpc2tfZmx1c2gsCisJLmluaXRfbWVkaWEJPSBpZGVfZGlza19pbml0X21lZGlhLAorCS5zZXRfZG9vcmxvY2sJPSBpZGVfZGlza19zZXRfZG9vcmxvY2ssCisJLmRvX3JlcXVlc3QJPSBpZGVfZG9fcndfZGlzaywKKwkuZW5kX3JlcXVlc3QJPSBpZGVfZW5kX3JlcXVlc3QsCisJLmlvY3RsCQk9IGlkZV9kaXNrX2lvY3RsLAogfTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJBVEEgRElTSyBEcml2ZXIiKTsKLQotc3RhdGljIGludCBpZGVfZGlza19wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKLQlzdHJ1Y3QgZ2VuZGlzayAqZzsKLQotCS8qIHN0cnN0cigiZm9vIiwgIiIpIGlzIG5vbi1OVUxMICovCi0JaWYgKCFzdHJzdHIoImlkZS1kaXNrIiwgZHJpdmUtPmRyaXZlcl9yZXEpKQotCQlnb3RvIGZhaWxlZDsKLQotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCWdvdG8gZmFpbGVkOwotCi0JaWRrcCA9IGt6YWxsb2Moc2l6ZW9mKCppZGtwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZGtwKQotCQlnb3RvIGZhaWxlZDsKLQotCWcgPSBhbGxvY19kaXNrX25vZGUoSURFX0RJU0tfTUlOT1JTLCBod2lmX3RvX25vZGUoZHJpdmUtPmh3aWYpKTsKLQlpZiAoIWcpCi0JCWdvdG8gb3V0X2ZyZWVfaWRrcDsKLQotCWlkZV9pbml0X2Rpc2soZywgZHJpdmUpOwotCi0Ja3JlZl9pbml0KCZpZGtwLT5rcmVmKTsKLQotCWlka3AtPmRyaXZlID0gZHJpdmU7Ci0JaWRrcC0+ZHJpdmVyID0gJmlkZWRpc2tfZHJpdmVyOwotCWlka3AtPmRpc2sgPSBnOwotCi0JZy0+cHJpdmF0ZV9kYXRhID0gJmlka3AtPmRyaXZlcjsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGlka3A7Ci0KLQlpZGVkaXNrX3NldHVwKGRyaXZlKTsKLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSA9PSAwICYmCi0JICAgIChkcml2ZS0+aGVhZCA9PSAwIHx8IGRyaXZlLT5oZWFkID4gMTYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IElOVkFMSUQgR0VPTUVUUlk6ICVkIFBIWVNJQ0FMIEhFQURTP1xuIiwKLQkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aGVhZCk7Ci0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19BVFRBQ0g7Ci0JfSBlbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0FUVEFDSDsKLQotCWctPm1pbm9ycyA9IElERV9ESVNLX01JTk9SUzsKLQlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKLQlnLT5mbGFncyB8PSBHRU5IRF9GTF9FWFRfREVWVDsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpCi0JCWctPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOwotCXNldF9jYXBhY2l0eShnLCBpZGVfZGlza19jYXBhY2l0eShkcml2ZSkpOwotCWctPmZvcHMgPSAmaWRlZGlza19vcHM7Ci0JYWRkX2Rpc2soZyk7Ci0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlX2lka3A6Ci0Ja2ZyZWUoaWRrcCk7Ci1mYWlsZWQ6Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpZGVkaXNrX2V4aXQodm9pZCkKLXsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaWRlZGlza19kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlkZWRpc2tfaW5pdCh2b2lkKQotewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZWRpc2tfZHJpdmVyLmdlbl9kcml2ZXIpOwotfQotCi1NT0RVTEVfQUxJQVMoImlkZToqbS1kaXNrKiIpOwotTU9EVUxFX0FMSUFTKCJpZGUtZGlzayIpOwotbW9kdWxlX2luaXQoaWRlZGlza19pbml0KTsKLW1vZHVsZV9leGl0KGlkZWRpc2tfZXhpdCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5oIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suaAppbmRleCBhODJmYTQzLi5iMjM0YjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmgKQEAgLTEsMTkgKzEsMTEgQEAKICNpZm5kZWYgX19JREVfRElTS19ICiAjZGVmaW5lIF9fSURFX0RJU0tfSAogCi1zdHJ1Y3QgaWRlX2Rpc2tfb2JqIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmU7Ci0JaWRlX2RyaXZlcl90CSpkcml2ZXI7Ci0Jc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJa3JlZjsKLQl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCi19OworI2luY2x1ZGUgImlkZS1nZC5oIgogCi0jZGVmaW5lIGlkZV9kaXNrX2coZGlzaykgXAotCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGlkZV9kaXNrX29iaiwgZHJpdmVyKQotCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEEKIC8qIGlkZS1kaXNrLmMgKi8KLXNlY3Rvcl90IGlkZV9kaXNrX2NhcGFjaXR5KGlkZV9kcml2ZV90ICopOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YV9kaXNrX29wczsKIGlkZV9kZWNsX2RldnNldChhZGRyZXNzKTsKIGlkZV9kZWNsX2RldnNldChtdWx0Y291bnQpOwogaWRlX2RlY2xfZGV2c2V0KG5vd2Vycik7CkBAIC0yMSwxMiArMTMsMTcgQEAKIGlkZV9kZWNsX2RldnNldChhY291c3RpYyk7CiAKIC8qIGlkZS1kaXNrX2lvY3RsLmMgKi8KLWludCBpZGVfZGlza19pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2ludCBpZGVfZGlza19pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkgICB1bnNpZ25lZCBsb25nKTsKIAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogLyogaWRlLWRpc2tfcHJvYy5jICovCiBleHRlcm4gaWRlX3Byb2NfZW50cnlfdCBpZGVfZGlza19wcm9jW107CiBleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZGlza19zZXR0aW5nc1tdOwogI2VuZGlmCisjZWxzZQorI2RlZmluZSBpZGVfZGlza19wcm9jCQlOVUxMCisjZGVmaW5lIGlkZV9kaXNrX3NldHRpbmdzCU5VTEwKKyNlbmRpZgogCiAjZW5kaWYgLyogX19JREVfRElTS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYwppbmRleCBhNmNmMWEwMy4uYTQ5Njk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCkBAIC0xMywxMiArMTMsMTAgQEAKIHsgMCB9CiB9OwogCi1pbnQgaWRlX2Rpc2tfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitpbnQgaWRlX2Rpc2tfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coYmRldi0+YmRfZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CiAJaW50IGVycjsKIAogCWVyciA9IGlkZV9zZXR0aW5nX2lvY3RsKGRyaXZlLCBiZGV2LCBjbWQsIGFyZywgaWRlX2Rpc2tfaW9jdGxfc2V0dGluZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCmluZGV4IDQ3MjQ5NzYuLjExNDZmNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlpZGVfZHJpdmVfdCpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7CiAJaW50IGxlbjsKIAotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlX2Rpc2tfY2FwYWNpdHkoZHJpdmUpKTsKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOwogCiAJUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCmluZGV4IDA5MDM3ODIuLmNhYzQzMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQl4Y291bnQgPSBiY291bnQgJiAweGZmZmY7CiAJCQlpZiAoaXNfdHJtMjkwKQogCQkJCXhjb3VudCA9ICgoeGNvdW50ID4+IDIpIC0gMSkgPDwgMTY7Ci0JCQlpZiAoeGNvdW50ID09IDB4MDAwMCkgeworCQkJZWxzZSBpZiAoeGNvdW50ID09IDB4MDAwMCkgewogCQkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKQogCQkJCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKIAkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKDB4ODAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggY2YwYWEyNS4uYWViMWFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMTUsMTIgKzE1LDYgQEAKICAqIERvY3VtZW50YXRpb24vaWRlL0NoYW5nZUxvZy5pZGUtZmxvcHB5LjE5OTYtMjAwMgogICovCiAKLSNkZWZpbmUgRFJWX05BTUUgImlkZS1mbG9wcHkiCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KLSNkZWZpbmUgSURFRkxPUFBZX1ZFUlNJT04gIjEuMDAiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDksMTkgKzQzLDYgQEAKIAogI2luY2x1ZGUgImlkZS1mbG9wcHkuaCIKIAotLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlYnVnX21hc2s7Ci1tb2R1bGVfcGFyYW0oZGVidWdfbWFzaywgdWxvbmcsIDA2NDQpOwotCi0vKiBkZWZpbmUgdG8gc2VlIGRlYnVnIGluZm8gKi8KLSNkZWZpbmUgSURFRkxPUFBZX0RFQlVHX0xPRwkwCi0KLSNpZiBJREVGTE9QUFlfREVCVUdfTE9HCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncykKLSNlbHNlCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KIC8qCiAgKiBBZnRlciBlYWNoIGZhaWxlZCBwYWNrZXQgY29tbWFuZCB3ZSBpc3N1ZSBhIHJlcXVlc3Qgc2Vuc2UgY29tbWFuZCBhbmQgcmV0cnkKICAqIHRoZSBwYWNrZXQgY29tbWFuZCBJREVGTE9QUFlfTUFYX1BDX1JFVFJJRVMgdGltZXMuCkBAIC04Myw0MyArNjQsMTMgQEAKIC8qIEVycm9yIGNvZGUgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KICNkZWZpbmUJSURFRkxPUFBZX0VSUk9SX0dFTkVSQUwJCTEwMQogCi1zdGF0aWMgREVGSU5FX01VVEVYKGlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY2xlYW51cF9vYmooc3RydWN0IGtyZWYgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmlkZV9mbG9wcHlfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCWZsb3BweSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZmxvcHB5X29iaik7Ci0JaWYgKGZsb3BweSkgewotCQlpZiAoaWRlX2RldmljZV9nZXQoZmxvcHB5LT5kcml2ZSkpCi0JCQlmbG9wcHkgPSBOVUxMOwotCQllbHNlCi0JCQlrcmVmX2dldCgmZmxvcHB5LT5rcmVmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlyZXR1cm4gZmxvcHB5OwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3B1dChzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSkKLXsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JbXV0ZXhfbG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7Ci0Ja3JlZl9wdXQoJmZsb3BweS0+a3JlZiwgaWRlZmxvcHB5X2NsZWFudXBfb2JqKTsKLQlpZGVfZGV2aWNlX3B1dChkcml2ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLX0KLQogLyoKICAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKICAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpZGVmbG9wcHlfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBuc2VjcykKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJaW50IGVycm9yOwogCkBAIC0xNjEsMTIgKzExMiwxMiBAQAogCXN0cnVjdCBiaW8gKmJpbyA9IHJxLT5iaW87CiAKIAl3aGlsZSAoKGJpbyA9IHJxLT5iaW8pICE9IE5VTEwpCi0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIDApOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CiAKQEAgLTIwMCwxMCArMTUxLDEwIEBACiAJCQkgICAgICAgIkFib3J0aW5nIHJlcXVlc3QhXG4iKTsKIAl9CiAKLQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3Ioc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5LAogCQkJCSAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAkvKiBzdXByZXNzIGVycm9yIG1lc3NhZ2VzIHJlc3VsdGluZyBmcm9tIE1lZGl1bSBub3QgcHJlc2VudCAqLwpAQCAtMjIyLDcgKzE3Myw3IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBOVUxMICYmCiAJICAgIHBjLT5jWzBdICE9IEdQQ01EX1JFUVVFU1RfU0VOU0UpCkBAIC0yODYsNyArMjM3LDcgQEAKIAkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZWN0b3IpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWludCBibG9jayA9IHNlY3RvciAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBibG9ja3MgPSBycS0+bnJfc2VjdG9ycyAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBjbWQgPSBycV9kYXRhX2RpcihycSk7CkBAIC0zMTAsNyArMjYxLDcgQEAKIAlwYy0+ZmxhZ3MgfD0gUENfRkxBR19ETUFfT0s7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9ibG9ja3BjX2NtZChpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9ibG9ja3BjX2NtZChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHksCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2luaXRfcGMocGMpOwpAQCAtMzI5LDEzICsyODAsMTIgQEAKIAlwYy0+cmVxX3hmZXIgPSBwYy0+YnVmX3NpemUgPSBycS0+ZGF0YV9sZW47CiB9CiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrX3MpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9mbG9wcHlfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSAgICAgc3RydWN0IHJlcXVlc3QgKnJxLCBzZWN0b3JfdCBibG9jaykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwotCXVuc2lnbmVkIGxvbmcgYmxvY2sgPSAodW5zaWduZWQgbG9uZylibG9ja19zOwogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKIAkJICAgICAgImVycm9yczogJWRcbiIsCkBAIC0zNTMsNyArMzAzLDcgQEAKIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEkvTyBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOwogCi0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKQEAgLTM2MSwxMSArMzExLDExIEBACiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByL3cgcnEgc2l6ZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7Ci0JCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJcGMgPSAmZmxvcHB5LT5xdWV1ZWRfcGM7Ci0JCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGRyaXZlLCBwYywgcnEsIGJsb2NrKTsKKwkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwogCX0gZWxzZSBpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+YnVmZmVyOwogCX0gZWxzZSBpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CkBAIC0zNzMsNyArMzIzLDcgQEAKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJ1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0zOTQsNyArMzQ0LDcgQEAKICAqLwogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4ICpwYWdlOwpAQCAtNDEwLDExICszNjAsMTEgQEAKIAl9CiAKIAlpZiAocGMuYnVmWzNdICYgMHg4MCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV1A7CiAJZWxzZQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1dQOwogCi0Jc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSk7CisJc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkpOwogCiAJcGFnZSA9ICZwYy5idWZbOF07CiAKQEAgLTQ0NSw3ICszOTUsOSBAQAogCQkJZHJpdmUtPm5hbWUsIGxiYV9jYXBhY2l0eSwgY2FwYWNpdHkpOwogCQlmbG9wcHktPmJsb2NrcyA9IGZsb3BweS0+YmxvY2tfc2l6ZSA/CiAJCQljYXBhY2l0eSAvIGZsb3BweS0+YmxvY2tfc2l6ZSA6IDA7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3RvcjsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU1LDcgKzQwNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4ICpjYXBfZGVzYzsKQEAgLTQ2Niw3ICs0MTgsNyBAQAogCWRyaXZlLT5iaW9zX2hlYWQgPSBkcml2ZS0+Ymlvc19zZWN0ID0gMDsKIAlmbG9wcHktPmJsb2NrcyA9IDA7CiAJZmxvcHB5LT5ic19mYWN0b3IgPSAxOwotCXNldF9jYXBhY2l0eShmbG9wcHktPmRpc2ssIDApOworCWRyaXZlLT5jYXBhY2l0eTY0ID0gMDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKCZwYyk7CiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBkaXNrLCAmcGMpKSB7CkBAIC01MjMsNiArNDc1LDggQEAKIAkJCQkJICAgICAgICJub24gNTEyIGJ5dGVzIGJsb2NrIHNpemUgbm90ICIKIAkJCQkJICAgICAgICJmdWxseSBzdXBwb3J0ZWRcbiIsCiAJCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQkJZHJpdmUtPmNhcGFjaXR5NjQgPQorCQkJCQlmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwogCQkJCXJjID0gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTQ3LDIxICs1MDEsMTIgQEAKIAlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpCiAJCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoZHJpdmUpOwogCi0Jc2V0X2NhcGFjaXR5KGRpc2ssIGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3IpOwotCiAJcmV0dXJuIHJjOwogfQogCi1zZWN0b3JfdCBpZGVfZmxvcHB5X2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwotCi0JcmV0dXJuIGNhcGFjaXR5OwotfQotCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSkKLXsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAogCWRyaXZlLT5wY19jYWxsYmFjawkgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwpAQCAtNTkyLDI1MiArNTM3LDQyIEBACiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19DTElLX0RSSVZFOwogCQkvKiBJT01FR0EgQ2xpayEgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IGxvY2svdW5sb2NrIGNvbW1hbmRzICovCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAl9CiAKIAkodm9pZCkgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpOwogCiAJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBmbG9wcHktPmRyaXZlcik7CisKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfZmx1c2goaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBnZW5kaXNrICpnID0gZmxvcHB5LT5kaXNrOwotCi0JaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKLQotCWRlbF9nZW5kaXNrKGcpOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NsZWFudXBfb2JqKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2luaXRfbWVkaWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IHRvX2lkZV9kcnYoa3JlZiwgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBmbG9wcHktPmRpc2s7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcHV0X2Rpc2soZyk7Ci0Ja2ZyZWUoZmxvcHB5KTsKLX0KLQotc3RhdGljIGludCBpZGVfZmxvcHB5X3Byb2JlKGlkZV9kcml2ZV90ICopOwotCi1zdGF0aWMgaWRlX2RyaXZlcl90IGlkZWZsb3BweV9kcml2ZXIgPSB7Ci0JLmdlbl9kcml2ZXIgPSB7Ci0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJCT0gImlkZS1mbG9wcHkiLAotCQkuYnVzCQk9ICZpZGVfYnVzX3R5cGUsCi0JfSwKLQkucHJvYmUJCQk9IGlkZV9mbG9wcHlfcHJvYmUsCi0JLnJlbW92ZQkJCT0gaWRlX2Zsb3BweV9yZW1vdmUsCi0JLnZlcnNpb24JCT0gSURFRkxPUFBZX1ZFUlNJT04sCi0JLmRvX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZWZsb3BweV9lbmRfcmVxdWVzdCwKLQkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVfZmxvcHB5X3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZV9mbG9wcHlfc2V0dGluZ3MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5OwotCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgcmV0ID0gMDsKIAotCWZsb3BweSA9IGlkZV9mbG9wcHlfZ2V0KGRpc2spOwotCWlmICghZmxvcHB5KQotCQlyZXR1cm4gLUVOWElPOworCWlmIChpZGVfZG9fdGVzdF91bml0X3JlYWR5KGRyaXZlLCBkaXNrKSkKKwkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwogCi0JZHJpdmUgPSBmbG9wcHktPmRyaXZlOworCXJldCA9IGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGRyaXZlKTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCXNldF9jYXBhY2l0eShkaXNrLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKIAotCWZsb3BweS0+b3BlbmVycysrOwotCi0JaWYgKGZsb3BweS0+b3BlbmVycyA9PSAxKSB7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKLQkJLyogSnVzdCBpbiBjYXNlICovCi0KLQkJaWYgKGlkZV9kb190ZXN0X3VuaXRfcmVhZHkoZHJpdmUsIGRpc2spKQotCQkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwotCi0JCWlmIChpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShkcml2ZSkKLQkJICAgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkgPT0gMAotCQkgICAgLyoKLQkJICAgICAqIEFsbG93IE9fTkRFTEFZIHRvIG9wZW4gYSBkcml2ZSB3aXRob3V0IGEgZGlzaywgb3Igd2l0aCBhbgotCQkgICAgICogdW5yZWFkYWJsZSBkaXNrLCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvcm1hdCBjYXBhY2l0eQotCQkgICAgICogb2YgdGhlIGRyaXZlIG9yIGJlZ2luIHRoZSBmb3JtYXQgLSBTYW0KLQkJICAgICAqLwotCQkgICAgKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXRfcHV0X2Zsb3BweTsKLQkJfQotCi0JCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSAmJiAoZmlscC0+Zl9tb2RlICYgMikpIHsKLQkJCXJldCA9IC1FUk9GUzsKLQkJCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JCX0KLQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQ7Ci0JCWlkZV9zZXRfbWVkaWFfbG9jayhkcml2ZSwgZGlzaywgMSk7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCX0gZWxzZSBpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JfQotCXJldHVybiAwOwotCi1vdXRfcHV0X2Zsb3BweToKLQlmbG9wcHktPm9wZW5lcnMtLTsKLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9mbG9wcHlfb2JqKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoZmxvcHB5LT5vcGVuZXJzID09IDEpIHsKLQkJaWRlX3NldF9tZWRpYV9sb2NrKGRyaXZlLCBkaXNrLCAwKTsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwotCX0KLQotCWZsb3BweS0+b3BlbmVycy0tOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywKLQkJCQkJCSAgICAgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQlnZW8tPmhlYWRzID0gZHJpdmUtPmJpb3NfaGVhZDsKLQlnZW8tPnNlY3RvcnMgPSBkcml2ZS0+Ymlvc19zZWN0OwotCWdlby0+Y3lsaW5kZXJzID0gKHUxNilkcml2ZS0+Ymlvc19jeWw7IC8qIHRydW5jYXRlICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Zsb3BweV9vYmopOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0JaW50IHJldDsKLQotCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19BVFRBQ0gpIHsKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldCA9ICEhKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19NRURJQV9DSEFOR0VEKTsKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19NRURJQV9DSEFOR0VEOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZmxvcHB5X29iaik7Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9mbG9wcHlfY2FwYWNpdHkoZmxvcHB5LT5kcml2ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWZsb3BweV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJCT0gaWRlZmxvcHB5X29wZW4sCi0JLnJlbGVhc2UJCT0gaWRlZmxvcHB5X3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBpZGVfZmxvcHB5X2lvY3RsLAotCS5nZXRnZW8JCQk9IGlkZWZsb3BweV9nZXRnZW8sCi0JLm1lZGlhX2NoYW5nZWQJCT0gaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQsCi0JLnJldmFsaWRhdGVfZGlzawk9IGlkZWZsb3BweV9yZXZhbGlkYXRlX2Rpc2sKK2NvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YXBpX2Rpc2tfb3BzID0geworCS5jaGVjawkJPSBpZGVfY2hlY2tfYXRhcGlfZGV2aWNlLAorCS5nZXRfY2FwYWNpdHkJPSBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eSwKKwkuc2V0dXAJCT0gaWRlX2Zsb3BweV9zZXR1cCwKKwkuZmx1c2gJCT0gaWRlX2Zsb3BweV9mbHVzaCwKKwkuaW5pdF9tZWRpYQk9IGlkZV9mbG9wcHlfaW5pdF9tZWRpYSwKKwkuc2V0X2Rvb3Jsb2NrCT0gaWRlX3NldF9tZWRpYV9sb2NrLAorCS5kb19yZXF1ZXN0CT0gaWRlX2Zsb3BweV9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAk9IGlkZV9mbG9wcHlfZW5kX3JlcXVlc3QsCisJLmlvY3RsCQk9IGlkZV9mbG9wcHlfaW9jdGwsCiB9OwotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5OwotCXN0cnVjdCBnZW5kaXNrICpnOwotCi0JaWYgKCFzdHJzdHIoImlkZS1mbG9wcHkiLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZmxvcHB5KQotCQlnb3RvIGZhaWxlZDsKLQotCWlmICghaWRlX2NoZWNrX2F0YXBpX2RldmljZShkcml2ZSwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiAiCi0JCSAgICAgICBEUlZfTkFNRSAiXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQlmbG9wcHkgPSBremFsbG9jKHNpemVvZihpZGVmbG9wcHlfZmxvcHB5X3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZsb3BweSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQ2FuJ3QgYWxsb2NhdGUgYSBmbG9wcHkgc3RydWN0dXJlXG4iLAotCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KLQlnID0gYWxsb2NfZGlzaygxIDw8IFBBUlROX0JJVFMpOwotCWlmICghZykKLQkJZ290byBvdXRfZnJlZV9mbG9wcHk7Ci0KLQlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKLQotCWtyZWZfaW5pdCgmZmxvcHB5LT5rcmVmKTsKLQotCWZsb3BweS0+ZHJpdmUgPSBkcml2ZTsKLQlmbG9wcHktPmRyaXZlciA9ICZpZGVmbG9wcHlfZHJpdmVyOwotCWZsb3BweS0+ZGlzayA9IGc7Ci0KLQlnLT5wcml2YXRlX2RhdGEgPSAmZmxvcHB5LT5kcml2ZXI7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBmbG9wcHk7Ci0KLQlkcml2ZS0+ZGVidWdfbWFzayA9IGRlYnVnX21hc2s7Ci0KLQlpZGVmbG9wcHlfc2V0dXAoZHJpdmUsIGZsb3BweSk7Ci0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQVRUQUNIOwotCi0JZy0+bWlub3JzID0gMSA8PCBQQVJUTl9CSVRTOwotCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkKLQkJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7Ci0JZy0+Zm9wcyA9ICZpZGVmbG9wcHlfb3BzOwotCWFkZF9kaXNrKGcpOwotCXJldHVybiAwOwotCi1vdXRfZnJlZV9mbG9wcHk6Ci0Ja2ZyZWUoZmxvcHB5KTsKLWZhaWxlZDoKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlkZWZsb3BweV9leGl0KHZvaWQpCi17Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlkZWZsb3BweV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRyaXZlciAiIElERUZMT1BQWV9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BTElBUygiaWRlOiptLWZsb3BweSoiKTsKLU1PRFVMRV9BTElBUygiaWRlLWZsb3BweSIpOwotbW9kdWxlX2luaXQoaWRlZmxvcHB5X2luaXQpOwotbW9kdWxlX2V4aXQoaWRlZmxvcHB5X2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBVEFQSSBGTE9QUFkgRHJpdmVyIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaCBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaAppbmRleCAxN2NmODY1Li5jMTcxMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oCkBAIC0xLDM3ICsxLDkgQEAKICNpZm5kZWYgX19JREVfRkxPUFBZX0gKICNkZWZpbmUgX19JREVfRkxPUFBZX0gKIAotLyoKLSAqIE1vc3Qgb2Ygb3VyIGdsb2JhbCBkYXRhIHdoaWNoIHdlIG5lZWQgdG8gc2F2ZSBldmVuIGFzIHdlIGxlYXZlIHRoZSBkcml2ZXIKLSAqIGR1ZSB0byBhbiBpbnRlcnJ1cHQgb3IgYSB0aW1lciBldmVudCBpcyBzdG9yZWQgaW4gYSB2YXJpYWJsZSBvZiB0eXBlCi0gKiBpZGVmbG9wcHlfZmxvcHB5X3QsIGRlZmluZWQgYmVsb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGlkZV9mbG9wcHlfb2JqIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmU7Ci0JaWRlX2RyaXZlcl90CSpkcml2ZXI7Ci0Jc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJa3JlZjsKLQl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisjaW5jbHVkZSAiaWRlLWdkLmgiCiAKLQkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKLQkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKLQotCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KLQl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKLQotCWludCBwcm9ncmVzc19pbmRpY2F0aW9uOwotCi0JLyogRGV2aWNlIGluZm9ybWF0aW9uICovCi0JLyogQ3VycmVudCBmb3JtYXQgKi8KLQlpbnQgYmxvY2tzLCBibG9ja19zaXplLCBic19mYWN0b3I7Ci0JLyogTGFzdCBmb3JtYXQgY2FwYWNpdHkgZGVzY3JpcHRvciAqLwotCXU4IGNhcF9kZXNjWzhdOwotCS8qIENvcHkgb2YgdGhlIGZsZXhpYmxlIGRpc2sgcGFnZSAqLwotCXU4IGZsZXhpYmxlX2Rpc2tfcGFnZVszMl07Ci19IGlkZWZsb3BweV9mbG9wcHlfdDsKLQorI2lmZGVmIENPTkZJR19JREVfR0RfQVRBUEkKIC8qCiAgKiBQYWdlcyBvZiB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuCiAgKiBTZWUgU0ZGLTgwNzBpIHNwZWMuCkBAIC00NiwxNyArMTgsMjIgQEAKICNkZWZpbmUgSURFRkxPUFBZX0lPQ1RMX0ZPUk1BVF9HRVRfUFJPR1JFU1MJMHg0NjAzCiAKIC8qIGlkZS1mbG9wcHkuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YXBpX2Rpc2tfb3BzOwogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9tb2RlX3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHU4KTsKIHZvaWQgaWRlX2Zsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqKTsKLXNlY3Rvcl90IGlkZV9mbG9wcHlfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CiAKIC8qIGlkZS1mbG9wcHlfaW9jdGwuYyAqLwotaW50IGlkZV9mbG9wcHlfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK2ludCBpZGVfZmxvcHB5X2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgdW5zaWduZWQgbG9uZyk7CiAKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIC8qIGlkZS1mbG9wcHlfcHJvYy5jICovCiBleHRlcm4gaWRlX3Byb2NfZW50cnlfdCBpZGVfZmxvcHB5X3Byb2NbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9mbG9wcHlfc2V0dGluZ3NbXTsKICNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgaWRlX2Zsb3BweV9wcm9jCQlOVUxMCisjZGVmaW5lIGlkZV9mbG9wcHlfc2V0dGluZ3MJTlVMTAorI2VuZGlmCiAKICNlbmRpZiAvKl9fSURFX0ZMT1BQWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKaW5kZXggYTNhN2EwOC4uNDA5ZTRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2Zvcm1hdF9jYXBhY2l0aWVzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IF9fdXNlciAqYXJnKQogewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4IGhlYWRlcl9sZW4sIGRlc2NfY250OwogCWludCBpLCBibG9ja3MsIGxlbmd0aCwgdV9hcnJheV9zaXplLCB1X2luZGV4OwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfc2ZycF9iaXQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCiAJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfU1JGUDsKQEAgLTEzMiwxNyArMTMyLDE3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9mb3JtYXRfdW5pdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgYmxvY2tzLCBsZW5ndGgsIGZsYWdzLCBlcnIgPSAwOwogCiAJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpIHsKIAkJLyogRG9uJ3QgZm9ybWF0IGlmIHNvbWVvbmUgaXMgdXNpbmcgdGhlIGRpc2sgKi8KLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAogCS8qCiAJICogU2VuZCBBVEFQSV9GT1JNQVRfVU5JVCB0byB0aGUgZHJpdmUuCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogb3V0OgogCWlmIChlcnIpCi0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTAsNyArMTkwLDcgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mb3JtYXRfcHJvZ3Jlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IHByb2dyZXNzX2luZGljYXRpb24gPSAweDEwMDAwOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9sb2NrZG9vcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgY21kKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlpbnQgcHJldmVudCA9IChhcmcgJiYgY21kICE9IENEUk9NRUpFQ1QpID8gMSA6IDA7CiAKQEAgLTI2MCwxMyArMjYwLDEwIEBACiAJfQogfQogCi1pbnQgaWRlX2Zsb3BweV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoraW50IGlkZV9mbG9wcHlfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLAotCQkJCQkJICAgICBpZGVfZmxvcHB5X29iaik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCmluZGV4IDc2ZjBjNmMuLjNlYzc2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCkBAIC05LDcgKzksNyBAQAogCWlkZV9kcml2ZV90KmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQgbGVuOwogCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZmxvcHB5X2NhcGFjaXR5KGRyaXZlKSk7CisJbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKIAlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDg5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtMCwwICsxLDM5OCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQorI2Vsc2UKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCisjZW5kaWYKKworI2luY2x1ZGUgImlkZS1kaXNrLmgiCisjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgorCisjZGVmaW5lIElERV9HRF9WRVJTSU9OCSIxLjE4IgorCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKK21vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoaWRlX2Rpc2tfcmVmX211dGV4KTsKKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKKworc3RhdGljIHN0cnVjdCBpZGVfZGlza19vYmogKmlkZV9kaXNrX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gTlVMTDsKKworCW11dGV4X2xvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOworCWlmIChpZGtwKSB7CisJCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCisJCQlpZGtwID0gTlVMTDsKKwkJZWxzZQorCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOworCX0KKwltdXRleF91bmxvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJcmV0dXJuIGlka3A7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3B1dChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwKQoreworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlrcmVmX3B1dCgmaWRrcC0+a3JlZiwgaWRlX2Rpc2tfcmVsZWFzZSk7CisJaWRlX2RldmljZV9wdXQoZHJpdmUpOworCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKK30KKworc2VjdG9yX3QgaWRlX2dkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gZHJpdmUtPmNhcGFjaXR5NjQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICopOworCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpZGtwLT5kcml2ZXIpOworCisJZGVsX2dlbmRpc2soZyk7CisKKwlkcml2ZS0+ZGlza19vcHMtPmZsdXNoKGRyaXZlKTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gdG9faWRlX2RydihrcmVmLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWRyaXZlLT5kaXNrX29wcyA9IE5VTEw7CisJZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXB1dF9kaXNrKGcpOworCWtmcmVlKGlka3ApOworfQorCisvKgorICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKKyAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCisgKiBjYW4gbm90IGJlIHVzZWQgYW5kIGEgaGFyZCByZXNldCBpcyByZXF1aXJlZAorICovCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVzdW1lKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZiAoYXRhX2lkX2hwYV9lbmFibGVkKGRyaXZlLT5pZCkpCisJCSh2b2lkKWRyaXZlLT5kaXNrX29wcy0+Z2V0X2NhcGFjaXR5KGRyaXZlKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2dkX3NodXRkb3duKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKyNpZmRlZglDT05GSUdfQUxQSEEKKwkvKiBPbiBBbHBoYSwgaGFsdCg4KSBkb2Vzbid0IGFjdHVhbGx5IHR1cm4gdGhlIG1hY2hpbmUgb2ZmLAorCSAgIGl0IHB1dHMgeW91IGludG8gdGhlIHNvcnQgb2YgZmlybXdhcmUgbW9uaXRvci4gVHlwaWNhbGx5LAorCSAgIGl0J3MgdXNlZCB0byBib290IGFub3RoZXIga2VybmVsIGltYWdlLCBzbyBpdCdzIG5vdCBtdWNoCisJICAgZGlmZmVyZW50IGZyb20gcmVib290KDgpLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8KKwkgICBzcGluIGRvd24gdGhlIGRpc2sgaW4gdGhpcyBjYXNlLCBlc3BlY2lhbGx5IHNpbmNlIEFscGhhCisJICAgZmlybXdhcmUgZG9lc24ndCBoYW5kbGUgZGlza3MgaW4gc3RhbmRieSBtb2RlIHByb3Blcmx5LgorCSAgIE9uIHRoZSBvdGhlciBoYW5kLCBpdCdzIHJlYXNvbmFibHkgc2FmZSB0byB0dXJuIHRoZSBwb3dlcgorCSAgIG9mZiB3aGVuIHRoZSBzaHV0ZG93biBwcm9jZXNzIHJlYWNoZXMgdGhlIGZpcm13YXJlIHByb21wdCwKKwkgICBhcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcmF0aGVyIGxvbmcgdGltZSAtCisJICAgYXQgbGVhc3QgMTAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yCisJICAgdGhlIGRpc2sgdG8gZXhwaXJlIGl0cyB3cml0ZSBjYWNoZS4gKi8KKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpIHsKKyNlbHNlCisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCkgeworI2VuZGlmCisJCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7CisKKwlkcml2ZS0+Z2VuZGV2LmJ1cy0+c3VzcGVuZCgmZHJpdmUtPmdlbmRldiwgUE1TR19TVVNQRU5EKTsKK30KKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9kaXNrX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfcHJvYyA6IGlkZV9mbG9wcHlfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV9kaXNrX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfc2V0dGluZ3MKKwkJCQkJICA6IGlkZV9mbG9wcHlfc2V0dGluZ3M7Cit9CisjZW5kaWYKKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZ2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5kb19yZXF1ZXN0KGRyaXZlLCBycSwgc2VjdG9yKTsKK30KKworc3RhdGljIGludCBpZGVfZ2RfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpCit7CisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCBucnNlY3MpOworfQorCitzdGF0aWMgaWRlX2RyaXZlcl90IGlkZV9nZF9kcml2ZXIgPSB7CisJLmdlbl9kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImlkZS1nZCIsCisJCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKKwl9LAorCS5wcm9iZQkJCT0gaWRlX2dkX3Byb2JlLAorCS5yZW1vdmUJCQk9IGlkZV9nZF9yZW1vdmUsCisJLnJlc3VtZQkJCT0gaWRlX2dkX3Jlc3VtZSwKKwkuc2h1dGRvd24JCT0gaWRlX2dkX3NodXRkb3duLAorCS52ZXJzaW9uCQk9IElERV9HRF9WRVJTSU9OLAorCS5kb19yZXF1ZXN0CQk9IGlkZV9nZF9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAkJPSBpZGVfZ2RfZW5kX3JlcXVlc3QsCisJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKKwkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBpZGVfZ2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKKwlpZGVfZHJpdmVfdCAqZHJpdmU7CisJaW50IHJldCA9IDA7CisKKwlpZGtwID0gaWRlX2Rpc2tfZ2V0KGRpc2spOworCWlmIChpZGtwID09IE5VTEwpCisJCXJldHVybiAtRU5YSU87CisKKwlkcml2ZSA9IGlka3AtPmRyaXZlOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZGtwLT5vcGVuZXJzKys7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJLyogSnVzdCBpbiBjYXNlICovCisKKwkJcmV0ID0gZHJpdmUtPmRpc2tfb3BzLT5pbml0X21lZGlhKGRyaXZlLCBkaXNrKTsKKworCQkvKgorCQkgKiBBbGxvdyBPX05ERUxBWSB0byBvcGVuIGEgZHJpdmUgd2l0aG91dCBhIGRpc2ssIG9yIHdpdGggYW4KKwkJICogdW5yZWFkYWJsZSBkaXNrLCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvcm1hdCBjYXBhY2l0eQorCQkgKiBvZiB0aGUgZHJpdmUgb3IgYmVnaW4gdGhlIGZvcm1hdCAtIFNhbQorCQkgKi8KKwkJaWYgKHJldCAmJiAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSA9PSAwKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXRfcHV0X2lka3A7CisJCX0KKworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV1ApICYmIChmaWxwLT5mX21vZGUgJiAyKSkgeworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXRfcHV0X2lka3A7CisJCX0KKworCQkvKgorCQkgKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGZyb20gZG9vcl9sb2NrLAorCQkgKiBzaW5jZSB0aGUgb3BlbigpIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCwKKwkJICogYW5kIHRoZSBkb29yX2xvY2sgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LgorCQkgKi8KKwkJZHJpdmUtPmRpc2tfb3BzLT5zZXRfZG9vcmxvY2soZHJpdmUsIGRpc2ssIDEpOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOworCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwl9IGVsc2UgaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfcHV0X2lka3A7CisJfQorCXJldHVybiAwOworCitvdXRfcHV0X2lka3A6CisJaWRrcC0+b3BlbmVycy0tOworCWlkZV9kaXNrX3B1dChpZGtwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlkZV9nZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpZGtwLT5vcGVuZXJzID09IDEpCisJCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7CisJCWRyaXZlLT5kaXNrX29wcy0+c2V0X2Rvb3Jsb2NrKGRyaXZlLCBkaXNrLCAwKTsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwl9CisKKwlpZGtwLT5vcGVuZXJzLS07CisKKwlpZGVfZGlza19wdXQoaWRrcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWdlby0+aGVhZHMgPSBkcml2ZS0+Ymlvc19oZWFkOworCWdlby0+c2VjdG9ycyA9IGRyaXZlLT5iaW9zX3NlY3Q7CisJZ2VvLT5jeWxpbmRlcnMgPSAodTE2KWRyaXZlLT5iaW9zX2N5bDsgLyogdHJ1bmNhdGUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisJaW50IHJldDsKKworCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19BVFRBQ0gpIHsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19NRURJQV9DSEFOR0VEKTsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9nZF9jYXBhY2l0eShpZGtwLT5kcml2ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+aW9jdGwoZHJpdmUsIGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlX2dkX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQkJPSBpZGVfZ2Rfb3BlbiwKKwkucmVsZWFzZQkJPSBpZGVfZ2RfcmVsZWFzZSwKKwkuaW9jdGwJCQk9IGlkZV9nZF9pb2N0bCwKKwkuZ2V0Z2VvCQkJPSBpZGVfZ2RfZ2V0Z2VvLAorCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZV9nZF9tZWRpYV9jaGFuZ2VkLAorCS5yZXZhbGlkYXRlX2Rpc2sJPSBpZGVfZ2RfcmV2YWxpZGF0ZV9kaXNrCit9OworCitzdGF0aWMgaW50IGlkZV9nZF9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyAqZGlza19vcHMgPSBOVUxMOworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7CisJc3RydWN0IGdlbmRpc2sgKmc7CisKKwkvKiBzdHJzdHIoImZvbyIsICIiKSBpcyBub24tTlVMTCAqLworCWlmICghc3Ryc3RyKCJpZGUtZ2QiLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCisJCWdvdG8gZmFpbGVkOworCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEEKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlkaXNrX29wcyA9ICZpZGVfYXRhX2Rpc2tfb3BzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEFQSQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkKKwkJZGlza19vcHMgPSAmaWRlX2F0YXBpX2Rpc2tfb3BzOworI2VuZGlmCisJaWYgKGRpc2tfb3BzID09IE5VTEwpCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGRpc2tfb3BzLT5jaGVjayhkcml2ZSwgRFJWX05BTUUpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXJcbiIsCisJCQlkcml2ZS0+bmFtZSk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlka3AgPSBremFsbG9jKHNpemVvZigqaWRrcCksIEdGUF9LRVJORUwpOworCWlmICghaWRrcCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2FuJ3QgYWxsb2NhdGUgYSBkaXNrIHN0cnVjdHVyZVxuIiwKKwkJCWRyaXZlLT5uYW1lKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZyA9IGFsbG9jX2Rpc2tfbm9kZShJREVfRElTS19NSU5PUlMsIGh3aWZfdG9fbm9kZShkcml2ZS0+aHdpZikpOworCWlmICghZykKKwkJZ290byBvdXRfZnJlZV9pZGtwOworCisJaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7CisKKwlrcmVmX2luaXQoJmlka3AtPmtyZWYpOworCisJaWRrcC0+ZHJpdmUgPSBkcml2ZTsKKwlpZGtwLT5kcml2ZXIgPSAmaWRlX2dkX2RyaXZlcjsKKwlpZGtwLT5kaXNrID0gZzsKKworCWctPnByaXZhdGVfZGF0YSA9ICZpZGtwLT5kcml2ZXI7CisKKwlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBpZGtwOworCWRyaXZlLT5kZWJ1Z19tYXNrID0gZGVidWdfbWFzazsKKwlkcml2ZS0+ZGlza19vcHMgPSBkaXNrX29wczsKKworCWRpc2tfb3BzLT5zZXR1cChkcml2ZSk7CisKKwlzZXRfY2FwYWNpdHkoZywgaWRlX2dkX2NhcGFjaXR5KGRyaXZlKSk7CisKKwlnLT5taW5vcnMgPSBJREVfRElTS19NSU5PUlM7CisJZy0+ZHJpdmVyZnNfZGV2ID0gJmRyaXZlLT5nZW5kZXY7CisJZy0+ZmxhZ3MgfD0gR0VOSERfRkxfRVhUX0RFVlQ7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKQorCQlnLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKKwlnLT5mb3BzID0gJmlkZV9nZF9vcHM7CisJYWRkX2Rpc2soZyk7CisJcmV0dXJuIDA7CisKK291dF9mcmVlX2lka3A6CisJa2ZyZWUoaWRrcCk7CitmYWlsZWQ6CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlkZV9nZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRyaXZlciAiIElERV9HRF9WRVJTSU9OICJcbiIpOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZV9nZF9kcml2ZXIuZ2VuX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpZGVfZ2RfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZpZGVfZ2RfZHJpdmVyLmdlbl9kcml2ZXIpOworfQorCitNT0RVTEVfQUxJQVMoImlkZToqbS1kaXNrKiIpOworTU9EVUxFX0FMSUFTKCJpZGUtZGlzayIpOworTU9EVUxFX0FMSUFTKCJpZGU6Km0tZmxvcHB5KiIpOworTU9EVUxFX0FMSUFTKCJpZGUtZmxvcHB5Iik7Cittb2R1bGVfaW5pdChpZGVfZ2RfaW5pdCk7Cittb2R1bGVfZXhpdChpZGVfZ2RfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImdlbmVyaWMgQVRBL0FUQVBJIGRpc2sgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2QxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fSURFX0dEX0gKKyNkZWZpbmUgX19JREVfR0RfSAorCisjZGVmaW5lIERSVl9OQU1FICJpZGUtZ2QiCisjZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCisKKy8qIGRlZmluZSB0byBzZWUgZGVidWcgaW5mbyAqLworI2RlZmluZSBJREVfR0RfREVCVUdfTE9HCTAKKworI2lmIElERV9HRF9ERUJVR19MT0cKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RydWN0IGlkZV9kaXNrX29iaiB7CisJaWRlX2RyaXZlX3QJKmRyaXZlOworCWlkZV9kcml2ZXJfdAkqZHJpdmVyOworCXN0cnVjdCBnZW5kaXNrCSpkaXNrOworCXN0cnVjdCBrcmVmCWtyZWY7CisJdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLworCisJLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CisJLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCisJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CisKKwkvKiBMYXN0IGVycm9yIGluZm9ybWF0aW9uICovCisJdTggc2Vuc2Vfa2V5LCBhc2MsIGFzY3E7CisKKwlpbnQgcHJvZ3Jlc3NfaW5kaWNhdGlvbjsKKworCS8qIERldmljZSBpbmZvcm1hdGlvbiAqLworCS8qIEN1cnJlbnQgZm9ybWF0ICovCisJaW50IGJsb2NrcywgYmxvY2tfc2l6ZSwgYnNfZmFjdG9yOworCS8qIExhc3QgZm9ybWF0IGNhcGFjaXR5IGRlc2NyaXB0b3IgKi8KKwl1OCBjYXBfZGVzY1s4XTsKKwkvKiBDb3B5IG9mIHRoZSBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KKwl1OCBmbGV4aWJsZV9kaXNrX3BhZ2VbMzJdOworfTsKKworc2VjdG9yX3QgaWRlX2dkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICopOworCisjZW5kaWYgLyogX19JREVfR0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCA3N2M2ZWFlLi43MTYyZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtMTQ5Myw4ICsxNDkzLDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwogCWh3Z3JvdXAtPnJxID0gTlVMTDsKLQlfX2Vsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDEpOwotCV9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKGRyaXZlLT5xdWV1ZSk7CisJX19lbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKKwlibGtfc3RhcnRfcXVldWVpbmcoZHJpdmUtPnF1ZXVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBiNzYyZGViLi5iYjdhMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTc1NSw3ICs3NTUsNyBAQAogCSAKIAl1ZGVsYXkoMSk7CiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJU0VMRUNUX01BU0soZHJpdmUsIDEpOwogCXVkZWxheSgxKTsKIAl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggZjI3YmFhNS4uMTY0OWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTIwOCw2ICsyMDgsNyBAQAogCQlkcml2ZS0+cmVhZHlfc3RhdCA9IDA7CiAJCWlmIChhdGFfaWRfY2RiX2ludHIoaWQpKQogCQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19EUlFfSU5URVJSVVBUOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ET09STE9DS0lORzsKIAkJLyogd2UgZG9uJ3QgZG8gaGVhZCB1bmxvYWRpbmcgb24gQVRBUEkgZGV2aWNlcyAqLwogCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTkxPQUQ7CiAJCXJldHVybjsKQEAgLTY1Nyw4ICs2NTgsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlod2lmLT5wb3J0ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlkZV9wb3J0X2NsYXNzLCAmaHdpZi0+Z2VuZGV2LAotCQkJCQkgICAgICBNS0RFVigwLCAwKSwgaHdpZiwgaHdpZi0+bmFtZSk7CisJaHdpZi0+cG9ydGRldiA9IGRldmljZV9jcmVhdGUoaWRlX3BvcnRfY2xhc3MsICZod2lmLT5nZW5kZXYsCisJCQkJICAgICAgTUtERVYoMCwgMCksIGh3aWYsIGh3aWYtPm5hbWUpOwogCWlmIChJU19FUlIoaHdpZi0+cG9ydGRldikpIHsKIAkJcmV0ID0gUFRSX0VSUihod2lmLT5wb3J0ZGV2KTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmh3aWYtPmdlbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCBiMjY5MjY0Li5jMzFkMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTU2NywxMCArNTY3LDEwIEBACiB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKQogewogCW11dGV4X2xvY2soJmlkZV9zZXR0aW5nX210eCk7Ci0JZHJpdmUtPnNldHRpbmdzID0gZHJpdmVyLT5zZXR0aW5nczsKKwlkcml2ZS0+c2V0dGluZ3MgPSBkcml2ZXItPnByb2NfZGV2c2V0cyhkcml2ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwogCi0JaWRlX2FkZF9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvYywgZHJpdmUpOworCWlkZV9hZGRfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2NfZW50cmllcyhkcml2ZSksIGRyaXZlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtNTkxLDcgKzU5MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2MpOworCWlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2NfZW50cmllcyhkcml2ZSkpOwogCiAJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDI1YWM2MGYuLmIyYjJlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMjEwOCw3ICsyMTA4LDcgQEAKIAogCS8qIGRldmljZSBsYWNrcyBsb2NraW5nIHN1cHBvcnQgYWNjb3JkaW5nIHRvIGNhcGFiaWxpdGllcyBwYWdlICovCiAJaWYgKChjYXBzWzZdICYgMSkgPT0gMCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19OT19ET09STE9DSzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCiAJaWYgKGNhcHNbN10gJiAweDAyKQogCQl0YXBlLT5ibGtfc2l6ZSA9IDUxMjsKQEAgLTIyOTgsNiArMjI5OCwxNiBAQAogCXsgIm5hbWUiLAlTX0lGUkVHfFNfSVJVR08sCXByb2NfaWRldGFwZV9yZWFkX25hbWUsCU5VTEwgfSwKIAl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQogfTsKKworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV90YXBlX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZXRhcGVfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV90YXBlX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZXRhcGVfc2V0dGluZ3M7Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBpZGVfdGFwZV9wcm9iZShpZGVfZHJpdmVfdCAqKTsKQEAgLTIzMTUsOCArMjMyNSw4IEBACiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXRhcGVfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRldGFwZV9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGV0YXBlX3NldHRpbmdzLAorCS5wcm9jX2VudHJpZXMJCT0gaWRlX3RhcGVfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX3RhcGVfcHJvY19kZXZzZXRzLAogI2VuZGlmCiB9OwogCkBAIC0yNDIwLDEyICsyNDMwLDExIEBACiAKIAlpZGV0YXBlX3NldHVwKGRyaXZlLCB0YXBlLCBtaW5vcik7CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWRldGFwZV9zeXNmc19jbGFzcywgJmRyaXZlLT5nZW5kZXYsCi0JCQkgICAgICBNS0RFVihJREVUQVBFX01BSk9SLCBtaW5vciksIE5VTEwsCi0JCQkgICAgICAiJXMiLCB0YXBlLT5uYW1lKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWRldGFwZV9zeXNmc19jbGFzcywgJmRyaXZlLT5nZW5kZXYsCi0JCQkgICAgICBNS0RFVihJREVUQVBFX01BSk9SLCBtaW5vciArIDEyOCksIE5VTEwsCi0JCQkgICAgICAibiVzIiwgdGFwZS0+bmFtZSk7CisJZGV2aWNlX2NyZWF0ZShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKKwkJICAgICAgTUtERVYoSURFVEFQRV9NQUpPUiwgbWlub3IpLCBOVUxMLCAiJXMiLCB0YXBlLT5uYW1lKTsKKwlkZXZpY2VfY3JlYXRlKGlkZXRhcGVfc3lzZnNfY2xhc3MsICZkcml2ZS0+Z2VuZGV2LAorCQkgICAgICBNS0RFVihJREVUQVBFX01BSk9SLCBtaW5vciArIDEyOCksIE5VTEwsCisJCSAgICAgICJuJXMiLCB0YXBlLT5uYW1lKTsKIAogCWctPmZvcHMgPSAmaWRldGFwZV9ibG9ja19vcHM7CiAJaWRlX3JlZ2lzdGVyX3JlZ2lvbihnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQppbmRleCAwMmU2ZWU3Li5hYjQ0YTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw2IEBACiBvYmotJChDT05GSUdfQkxLX0RFVl9TQzEyMDApCQkrPSBzYzEyMDAubwogb2JqLSQoQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMpCQkrPSBjeTgyYzY5My5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9ERUxLSU4pCQkrPSBkZWxraW5fY2Iubwotb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzRYKQkJKz0gaHB0MzR4Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX0hQVDM2NikJCSs9IGhwdDM2Ni5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMTMpCQkrPSBpdDgyMTMubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSVQ4MjFYKQkJKz0gaXQ4MjF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCA4Njg5YTcwLi44ZjFiMmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC00NiwxMCArNDYsMjcgQEAKIAkucXVpcmtwcm9jCQk9IGlkZV91bmRlY29kZWRfc2xhdmUsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpbnQgaTsKKworCW91dGIoMHgwMiwgYmFzZSArIDB4MWUpOwkvKiBzZXQgbklFTiB0byBibG9jayBpbnRlcnJ1cHRzICovCisJaW5iKGJhc2UgKyAweDE3KTsJCS8qIHJlYWQgc3RhdHVzIHRvIGNsZWFyIGludGVycnVwdHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2V0dXApOyArK2kpIHsKKwkJaWYgKHNldHVwW2ldKQorCQkJb3V0YihzZXR1cFtpXSwgYmFzZSArIGkpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZGVsa2luX2NiX3BvcnRfaW5mbyA9IHsKIAkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAogCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaW5pdF9jaGlwc2V0CQk9IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTcsNyArNzQsNyBAQAogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JaW50IGksIHJjOworCWludCByYzsKIAlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC03MiwxMiArODksOCBAQAogCQlyZXR1cm4gcmM7CiAJfQogCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQlvdXRiKDB4MDIsIGJhc2UgKyAweDFlKTsJLyogc2V0IG5JRU4gdG8gYmxvY2sgaW50ZXJydXB0cyAqLwotCWluYihiYXNlICsgMHgxNyk7CQkvKiByZWFkIHN0YXR1cyB0byBjbGVhciBpbnRlcnJ1cHRzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzZXR1cCk7ICsraSkgewotCQlpZiAoc2V0dXBbaV0pCi0JCQlvdXRiKHNldHVwW2ldLCBiYXNlICsgaSk7Ci0JfQorCisJZGVsa2luX2NiX2luaXRfY2hpcHNldChkZXYpOwogCiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgYmFzZSArIDB4MTAsIGJhc2UgKyAweDFlKTsKQEAgLTExMCw2ICsxMjMsNDAgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBkZWxraW5fY2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcGNpX3NhdmVfc3RhdGUoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWxraW5fY2JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCXBjaV9zZXRfbWFzdGVyKGRldik7CisKKwlpZiAoaG9zdC0+aW5pdF9jaGlwc2V0KQorCQlob3N0LT5pbml0X2NoaXBzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZGVsa2luX2NiX3N1c3BlbmQgTlVMTAorI2RlZmluZSBkZWxraW5fY2JfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGVsa2luX2NiX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTQ1LCAweGYwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgMHgxMTQ1LCAweGYwMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtMTIyLDYgKzE2OSw4IEBACiAJLmlkX3RhYmxlCT0gZGVsa2luX2NiX3BjaV90YmwsCiAJLnByb2JlCQk9IGRlbGtpbl9jYl9wcm9iZSwKIAkucmVtb3ZlCQk9IGRlbGtpbl9jYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBkZWxraW5fY2Jfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGRlbGtpbl9jYl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkZWxraW5fY2JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjFhM2FhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYworKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCi0gKgotICogMDA6MTIuMCBVbmtub3duIG1hc3Mgc3RvcmFnZSBjb250cm9sbGVyOgotICogVHJpb25lcyBUZWNobm9sb2dpZXMsIEluYy4KLSAqIFVua25vd24gZGV2aWNlIDAwMDMgKHJldiAwMSkKLSAqCi0gKiBoZGU6IFVETUEgMiAoMHgwMDAwIDB4MDAwMikgKDB4MDAwMCAweDAwMTApCi0gKiBoZGY6IFVETUEgMiAoMHgwMDAyIDB4MDAxMikgKDB4MDAxMCAweDAwMzApCi0gKiBoZGU6IERNQSAyICAoMHgwMDAwIDB4MDAwMikgKDB4MDAwMCAweDAwMTApCi0gKiBoZGY6IERNQSAyICAoMHgwMDAyIDB4MDAxMikgKDB4MDAxMCAweDAwMzApCi0gKiBoZGc6IERNQSAxICAoMHgwMDEyIDB4MDA1MikgKDB4MDAzMCAweDAwNzApCi0gKiBoZGg6IERNQSAxICAoMHgwMDUyIDB4MDI1MikgKDB4MDA3MCAweDAwZjApCi0gKgotICogaWRlLXBjaS5jIHJlZmVyZW5jZQotICoKLSAqIFNpbmNlIHRoZXJlIGFyZSB0d28gY2FyZHMgdGhhdCByZXBvcnQgYWxtb3N0IGlkZW50aWNhbGx5LAotICogdGhlIG9ubHkgZGlzY2VybmFibGUgZGlmZmVyZW5jZSBpcyB0aGUgdmFsdWVzIHJlcG9ydGVkIGluIHBjaWNtZC4KLSAqIEJvb3RpbmctQklPUyBjYXJkIG9yIEhQVDM2MyA6OiBwY2ljbWQgPT0gMHgwNwotICogTm9uLWJvb3RhYmxlIGNhcmQgb3IgSFBUMzQzIDo6IHBjaWNtZCA9PSAweDA1Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotCi0jZGVmaW5lIERSVl9OQU1FICJocHQzNHgiCi0KLSNkZWZpbmUgSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8JCTAKLQotc3RhdGljIHZvaWQgaHB0MzR4X3NldF9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoZHJpdmUtPmh3aWYtPmRldik7Ci0JdTMyIHJlZzE9IDAsIHRtcDEgPSAwLCByZWcyID0gMCwgdG1wMiA9IDA7Ci0JdTgJCQloaV9zcGVlZCwgbG9fc3BlZWQ7Ci0KLQloaV9zcGVlZCA9IHNwZWVkID4+IDQ7Ci0JbG9fc3BlZWQgPSBzcGVlZCAmIDB4MGY7Ci0KLQlpZiAoaGlfc3BlZWQgJiA3KSB7Ci0JCWhpX3NwZWVkID0gKGhpX3NwZWVkICYgNCkgPyAweDAxIDogMHgxMDsKLQl9IGVsc2UgewotCQlsb19zcGVlZCA8PD0gNTsKLQkJbG9fc3BlZWQgPj49IDU7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgJnJlZzEpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICZyZWcyKTsKLQl0bXAxID0gKChsb19zcGVlZCA8PCAoMypkcml2ZS0+ZG4pKSB8IChyZWcxICYgfig3IDw8ICgzKmRyaXZlLT5kbikpKSk7Ci0JdG1wMiA9ICgoaGlfc3BlZWQgPDwgZHJpdmUtPmRuKSB8IChyZWcyICYgfigweDExIDw8IGRyaXZlLT5kbikpKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgdG1wMSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsIHRtcDIpOwotCi0jaWYgSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8KLQlwcmludGsoIiVzOiAlcyBkcml2ZSVkICgweCUwNHggMHglMDR4KSAoMHglMDR4IDB4JTA0eCkiIFwKLQkJIiAoMHglMDJ4IDB4JTAyeClcbiIsCi0JCWRyaXZlLT5uYW1lLCBpZGVfeGZlcl92ZXJib3NlKHNwZWVkKSwKLQkJZHJpdmUtPmRuLCByZWcxLCB0bXAxLCByZWcyLCB0bXAyLAotCQloaV9zcGVlZCwgbG9fc3BlZWQpOwotI2VuZGlmIC8qIEhQVDM0M19ERUJVR19EUklWRV9JTkZPICovCi19Ci0KLXN0YXRpYyB2b2lkIGhwdDM0eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCi17Ci0JaHB0MzR4X3NldF9tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKLX0KLQotLyoKLSAqIElmIHRoZSBCSU9TIGRvZXMgbm90IHNldCB0aGUgSU8gYmFzZSBhZGRhcmVzcyB0byBYWDAwLCAzNDMgd2lsbCBmYWlsLgotICovCi0jZGVmaW5lCUhQVDM0WF9QQ0lfSU5JVF9SRUcJCTB4ODAKLQotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaHB0MzR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgaHB0MzR4SW9CYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7Ci0JdW5zaWduZWQgbG9uZyBocHRfYWRkcls0XSA9IHsgMHgyMCwgMHgzNCwgMHgyOCwgMHgzYyB9OwotCXVuc2lnbmVkIGxvbmcgaHB0X2FkZHJfbGVuWzRdID0geyA3LCAzLCA3LCAzIH07Ci0JdTE2IGNtZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgSFBUMzRYX1BDSV9JTklUX1JFRywgMHgwMCk7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlpZiAoY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhGMCk7Ci0JZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHgyMCk7Ci0KLQkvKgotCSAqIFNpbmNlIDIwLTIzIGNhbiBiZSBhc3NpZ25lZCBhbmQgYXJlIFIvVywgd2UgY29ycmVjdCB0aGVtLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQgJiB+UENJX0NPTU1BTkRfSU8pOwotCWZvcihpPTA7IGk8NDsgaSsrKSB7Ci0JCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAoaHB0MzR4SW9CYXNlICsgaHB0X2FkZHJbaV0pOwotCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyBocHRfYWRkcl9sZW5baV07Ci0JCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKLQkJCQkoUENJX0JBU0VfQUREUkVTU18wICsgKGkgKiA0KSksCi0JCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCk7Ci0JfQotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIGRldi0+aXJxOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBocHQzNHhfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9fbW9kZQkJPSBocHQzNHhfc2V0X3Bpb19tb2RlLAotCS5zZXRfZG1hX21vZGUJCT0gaHB0MzR4X3NldF9tb2RlLAotfTsKLQotI2RlZmluZSBJREVfSEZMQUdTX0hQVDM0WCBcCi0JKElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBcCi0JIElERV9IRkxBR19OT19EU0MgfCBcCi0JIElERV9IRkxBR19OT19BVVRPRE1BKQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaHB0MzR4X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IC8qIDA6IEhQVDM0MyAqLwotCQkubmFtZQkJPSBEUlZfTkFNRSwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNHgsCi0JCS5wb3J0X29wcwk9ICZocHQzNHhfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19IUFQzNFggfCBJREVfSEZMQUdfTk9OX0JPT1RBQkxFLAotCQkucGlvX21hc2sJPSBBVEFfUElPNSwKLQl9LAotCXsgLyogMTogSFBUMzQ1ICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKLQkJLnBvcnRfb3BzCT0gJmhwdDM0eF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDM0WCB8IElERV9IRkxBR19PRkZfQk9BUkQsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotI2lmZGVmIENPTkZJR19IUFQzNFhfQVVUT0RNQQotCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTIsCi0JCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKLSNlbmRpZgotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM0eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQ7Ci0JdTE2IHBjaWNtZCA9IDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmcGNpY21kKTsKLQotCWQgPSAmaHB0MzR4X2NoaXBzZXRzWyhwY2ljbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpID8gMSA6IDBdOwotCi0JcmV0dXJuIGlkZV9wY2lfaW5pdF9vbmUoZGV2LCBkLCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDM0eF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM0MyksIDAgfSwKLQl7IDAsIH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwdDM0eF9wY2lfdGJsKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhwdDM0eF9wY2lfZHJpdmVyID0gewotCS5uYW1lCQk9ICJIUFQzNHhfSURFIiwKLQkuaWRfdGFibGUJPSBocHQzNHhfcGNpX3RibCwKLQkucHJvYmUJCT0gaHB0MzR4X2luaXRfb25lLAotCS5yZW1vdmUJCT0gaWRlX3BjaV9yZW1vdmUsCi0JLnN1c3BlbmQJPSBpZGVfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBpZGVfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhwdDM0eF9pZGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHB0MzR4X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaHB0MzR4X2lkZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZocHQzNHhfcGNpX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGhwdDM0eF9pZGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChocHQzNHhfaWRlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbmRyZSBIZWRyaWNrIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBIaWdocG9pbnQgMzR4IElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCmluZGV4IDljZjE3MWMuLmE3OTA5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKQEAgLTMsNyArMyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEJICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgSW5jCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA4CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGFua3MgdG8gSGlnaFBvaW50IFRlY2hub2xvZ2llcyBmb3IgdGhlaXIgYXNzaXN0YW5jZSwgYW5kIGhhcmR3YXJlLgogICogU3BlY2lhbCBUaGFua3MgdG8gSm9uIEJ1cmNobW9yZSBpbiBTYW5EaWVnbyBmb3IgdGhlIGRlZXAgcG9ja2V0cywgaGlzCkBAIC03NDgsMjYgKzc0OCwyNCBAQAogCXN0cnVjdCBwY2lfZGV2CSpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CiAKLQlpZiAoZHJpdmUtPnF1aXJrX2xpc3QpIHsKLQkJaWYgKGluZm8tPmNoaXBfdHlwZSA+PSBIUFQzNzApIHsKLQkJCXU4IHNjcjEgPSAwOworCWlmIChkcml2ZS0+cXVpcmtfbGlzdCA9PSAwKQorCQlyZXR1cm47CiAKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOwotCQkJaWYgKCgoc2NyMSAmIDB4MTApID4+IDQpICE9IG1hc2spIHsKLQkJCQlpZiAobWFzaykKLQkJCQkJc2NyMSB8PSAgMHgxMDsKLQkJCQllbHNlCi0JCQkJCXNjcjEgJj0gfjB4MTA7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSk7Ci0JCQl9Ci0JCX0gZWxzZSB7CisJaWYgKGluZm8tPmNoaXBfdHlwZSA+PSBIUFQzNzApIHsKKwkJdTggc2NyMSA9IDA7CisKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7CisJCWlmICgoKHNjcjEgJiAweDEwKSA+PiA0KSAhPSBtYXNrKSB7CiAJCQlpZiAobWFzaykKLQkJCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOworCQkJCXNjcjEgfD0gIDB4MTA7CiAJCQllbHNlCi0JCQkJZW5hYmxlX2lycSAoaHdpZi0+aXJxKTsKKwkJCQlzY3IxICY9IH4weDEwOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSk7CiAJCX0KLQl9IGVsc2UKLQkJb3V0YihBVEFfREVWQ1RMX09CUyB8IChtYXNrID8gMiA6IDApLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJfSBlbHNlIGlmIChtYXNrKQorCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOworCWVsc2UKKwkJZW5hYmxlX2lycShod2lmLT5pcnEpOwogfQogCiAvKgpAQCAtMTI4OSw3ICsxMjg3LDYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbyhod2lmLT5kZXYpOwogCWludCBzZXJpYWxpemUJCT0gSFBUX1NFUklBTElaRV9JTzsKIAl1OCAgY2hpcF90eXBlCQk9IGluZm8tPmNoaXBfdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jIGIvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKaW5kZXggOWNlMWQ4MC4uNDlmMTYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKQEAgLTYxNyw3ICs2MTcsNiBAQAogCXVuc2lnbmVkIGxvbmcgaW50bWFza19wb3J0OwogCXVuc2lnbmVkIGxvbmcgbW9kZV9wb3J0OwogCXVuc2lnbmVkIGxvbmcgZWNtb2RlX3BvcnQ7Ci0JdW5zaWduZWQgbG9uZyBkbWFfc3RhdHVzX3BvcnQ7CiAJdTMyIHJlZyA9IDA7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHM7CiAJaW50IHJjOwpAQCAtNjM3LDcgKzYzNiw2IEBACiAJaW50bWFza19wb3J0ID0gZG1hX2Jhc2UgKyAweDAxMDsKIAltb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4MDI0OwogCWVjbW9kZV9wb3J0ID0gY3RsX2Jhc2UgKyAweGYwMDsKLQlkbWFfc3RhdHVzX3BvcnQgPSBkbWFfYmFzZSArIDB4MDA0OwogCiAJLyogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiAqLwogCXJlZyA9IDA7CkBAIC04NDMsOCArODQxLDYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zY2MoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7Ci0KIAkvKiBQVEVSQUREICovCiAJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIDB4MDE4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggZGQ2MzQ1NC4uOGFmOWIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC0xMDEsMTggKzEwMSw4IEBACiAJZm9yIChpID0gMDsgaSA8PSA3OyBpKyspCiAJCWh3LT5pb19wb3J0c19hcnJheVtpXSA9IHJlZyArIGkgKiA0OwogCi0JaWYgKGN0cmxfcG9ydCkKLQkJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RybF9wb3J0OwotCi0JaWYgKGlycV9wb3J0KQotCQlody0+aW9fcG9ydHMuaXJxX2FkZHIgPSBpcnFfcG9ydDsKLX0KLQotc3RhdGljIHZvaWQKLXNnaWlvYzRfbWFza3Byb2MoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IG1hc2spCi17Ci0Jd3JpdGViKEFUQV9ERVZDVExfT0JTIHwgKG1hc2sgPyAyIDogMCksCi0JICAgICAgICh2b2lkIF9faW9tZW0gKilkcml2ZS0+aHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0cmxfcG9ydDsKKwlody0+aW9fcG9ydHMuaXJxX2FkZHIgPSBpcnFfcG9ydDsKIH0KIAogc3RhdGljIGludApAQCAtMzEwLDE2ICszMDAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcjsKIAl1OCByZWcgPSAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiAKLQlpZiAoKHBvcnQgJiAweEZGRikgPT0gMHgxMUMpIHsJLyogU3RhdHVzIHJlZ2lzdGVyIG9mIElPQzQgKi8KLQkJaWYgKCEocmVnICYgQVRBX0JVU1kpKSB7IC8qIE5vdCBidXN5Li4uIGNoZWNrIGZvciBpbnRlcnJ1cHQgKi8KLQkJCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBwb3J0IC0gMHgxMTA7Ci0JCQl1bnNpZ25lZCBpbnQgaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwlpZiAoIShyZWcgJiBBVEFfQlVTWSkpIHsJLyogTm90IGJ1c3kuLi4gY2hlY2sgZm9yIGludGVycnVwdCAqLworCQl1bnNpZ25lZCBsb25nIG90aGVyX2lyID0gcG9ydCAtIDB4MTEwOworCQl1bnNpZ25lZCBpbnQgaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKIAotCQkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLwotCQkJaWYgKGludHJfcmVnICYgMHgwMykgewotCQkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKLQkJCQlpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwotCQkJfQorCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCisJCWlmIChpbnRyX3JlZyAmIDB4MDMpIHsKKwkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwkJCWludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CiAJCX0KIAl9CiAKQEAgLTMzMiwxMyArMzIwLDkgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSArIElPQzRfRE1BX09GRlNFVDsKLQl2b2lkIF9faW9tZW0gKnZpcnRfZG1hX2Jhc2U7CiAJaW50IG51bV9wb3J0cyA9IHNpemVvZiAoaW9jNF9kbWFfcmVnc190KTsKIAl2b2lkICpwYWQ7CiAKLQlpZiAoZG1hX2Jhc2UgPT0gMCkKLQkJcmV0dXJuIC0xOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiICAgICVzOiBNTUlPLURNQVxuIiwgaHdpZi0+bmFtZSk7CiAKIAlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpID09IE5VTEwpIHsKQEAgLTM0OCwxNCArMzMyLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXZpcnRfZG1hX2Jhc2UgPSBpb3JlbWFwKGRtYV9iYXNlLCBudW1fcG9ydHMpOwotCWlmICh2aXJ0X2RtYV9iYXNlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyglcykgLS0gRVJST1I6IHVuYWJsZSB0byBtYXAgYWRkcmVzc2VzICIKLQkJICAgICAgICIweCVseCB0byAweCVseFxuIiwgX19mdW5jX18sIGh3aWYtPm5hbWUsCi0JCSAgICAgICBkbWFfYmFzZSwgZG1hX2Jhc2UgKyBudW1fcG9ydHMgLSAxKTsKLQkJZ290byBkbWFfcmVtYXBfZmFpbHVyZTsKLQl9Ci0JaHdpZi0+ZG1hX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgdmlydF9kbWFfYmFzZTsKKwlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmlvX3BvcnRzLmlycV9hZGRyICsKKwkJCSBJT0M0X0RNQV9PRkZTRVQ7CiAKIAlod2lmLT5zZ19tYXhfbmVudHMgPSBJT0M0X1BSRF9FTlRSSUVTOwogCkBAIC0zNzksOSArMzU3LDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogY2hhbmdpbmcgZnJvbSBETUEgdG8gUElPIG1vZGUiLCBod2lmLT5uYW1lKTsKIAogZG1hX3BjaV9hbGxvY19mYWlsdXJlOgotCWlvdW5tYXAodmlydF9kbWFfYmFzZSk7Ci0KLWRtYV9yZW1hcF9mYWlsdXJlOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihkbWFfYmFzZSwgbnVtX3BvcnRzKTsKIAogCXJldHVybiAtMTsKQEAgLTU2Myw4ICs1MzgsNiBAQAogCS5zZXRfZG1hX21vZGUJCT0gc2dpaW9jNF9zZXRfZG1hX21vZGUsCiAJLyogcmVzZXQgRE1BIGVuZ2luZSwgY2xlYXIgSVJRcyAqLwogCS5yZXNldHByb2MJCT0gc2dpaW9jNF9yZXNldHByb2MsCi0JLyogbWFzayBvbi9vZmYgTklFTiByZWdpc3RlciAqLwotCS5tYXNrcHJvYwkJPSBzZ2lpb2M0X21hc2twcm9jLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZ2lpb2M0X2RtYV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCmluZGV4IDlmOTUzMzcuLjVlMzhhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCkBAIC04NCw3ICs4NCw3IEBACiAKIAogI2RlZmluZSBxdWFkc190b19ieXRlcyhfcSkgKChfcSkgKiBzaXplb2YodTMyKSkKLSNkZWZpbmUgYnl0ZXNfdG9fcXVhZHMoX2IpICgoKF9iKSArIHNpemVvZih1MzIpIC0gMSkgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgYnl0ZXNfdG9fcXVhZHMoX2IpIERJVl9ST1VORF9VUChfYiwgc2l6ZW9mKHUzMikpCiAKIHN0YXRpYyB2b2lkIGZyZWVfa2V5dmFsKHN0cnVjdCBjc3IxMjEyX2tleXZhbCAqa3YpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCBiNmViMmNmLi4yZjgzNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTkxOCw3ICs5MTgsNyBAQAogCQkvKiBkZWZhdWx0IFNZVCBvZmZzZXQgaXMgMyBjeWNsZXMgKi8KIAkJaW5pdC0+c3l0X29mZnNldCA9IDM7CiAKLQlpZiAoIChpbml0LT5jaGFubmVsID4gNjMpIHx8IChpbml0LT5jaGFubmVsIDwgMCkgKQorCWlmIChpbml0LT5jaGFubmVsID4gNjMpCiAJCWluaXQtPmNoYW5uZWwgPSA2MzsKIAogCWNoYW5fbWFzayA9ICh1NjQpMSA8PCBpbml0LT5jaGFubmVsOwpAQCAtMjI5NiwxMCArMjI5NiwxMCBAQAogCiAJb2hjaSA9IChzdHJ1Y3QgdGlfb2hjaSAqKWhvc3QtPmhvc3RkYXRhOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwKLQkJCQkgICAgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYgKyAoaWQ8PDIpKSwgTlVMTCwKLQkJCSAgICAgICJkdjEzOTQtJWQiLCBpZCk7CisJZGV2aWNlX2NyZWF0ZShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAorCQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwKKwkJCSAgICBJRUVFMTM5NF9NSU5PUl9CTE9DS19EVjEzOTQgKiAxNiArIChpZDw8MikpLAorCQkgICAgICBOVUxMLCAiZHYxMzk0LSVkIiwgaWQpOwogCiAJZHYxMzk0X2luaXQob2hjaSwgRFYxMzk0X05UU0MsIE1PREVfUkVDRUlWRSk7CiAJZHYxMzk0X2luaXQob2hjaSwgRFYxMzk0X05UU0MsIE1PREVfVFJBTlNNSVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCBiMTY2YjM1Li4yMDEyODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAKIAkJaGRyLT5mZi5kZ2wgPSBkZ2w7CiAJCWFkal9tYXhfcGF5bG9hZCA9IG1heF9wYXlsb2FkIC0gaGRyX3R5cGVfbGVuW0VUSDEzOTRfSERSX0xGX0ZGXTsKIAl9Ci0JcmV0dXJuIChkZ19zaXplICsgYWRqX21heF9wYXlsb2FkIC0gMSkgLyBhZGpfbWF4X3BheWxvYWQ7CisJcmV0dXJuIERJVl9ST1VORF9VUChkZ19zaXplLCBhZGpfbWF4X3BheWxvYWQpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV0aGVyMTM5NF9lbmNhcHN1bGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwppbmRleCAxNjI0MGE3Li4yMzc2YjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwpAQCAtMTU0LDkgKzE1NCw2IEBACiAKIHN0YXRpYyBpbnQgbm9kZW1ncl9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOwogc3RhdGljIGludCBub2RlbWdyX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7Ci1zdGF0aWMgdm9pZCBub2RlbWdyX3Jlc3VtZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpOwotc3RhdGljIHZvaWQgbm9kZW1ncl9yZW1vdmVfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKTsKLXN0YXRpYyBzdHJ1Y3Qgbm9kZV9lbnRyeSAqZmluZF9lbnRyeV9ieV9ndWlkKHU2NCBndWlkKTsKIAogc3RydWN0IGJ1c190eXBlIGllZWUxMzk0X2J1c190eXBlID0gewogCS5uYW1lCQk9ICJpZWVlMTM5NCIsCkBAIC0zODUsMjcgKzM4Miw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoaWdub3JlX2RyaXZlciwgU19JV1VTUiB8IFNfSVJVR08sIGZ3X2dldF9pZ25vcmVfZHJpdmVyLCBmd19zZXRfaWdub3JlX2RyaXZlcik7CiAKIAotc3RhdGljIHNzaXplX3QgZndfc2V0X2Rlc3Ryb3lfbm9kZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXU2NCBndWlkID0gKHU2NClzaW1wbGVfc3RydG91bGwoYnVmLCBOVUxMLCAxNik7Ci0KLQluZSA9IGZpbmRfZW50cnlfYnlfZ3VpZChndWlkKTsKLQotCWlmIChuZSA9PSBOVUxMIHx8ICFuZS0+aW5fbGltYm8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm9kZW1ncl9yZW1vdmVfbmUobmUpOwotCi0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIHNzaXplX3QgZndfZ2V0X2Rlc3Ryb3lfbm9kZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIllvdSBjYW4gZGVzdHJveSBpbl9saW1ibyBub2RlcyBieSB3cml0aW5nIHRoZWlyIEdVSUQgdG8gdGhpcyBmaWxlXG4iKTsKLX0KLXN0YXRpYyBCVVNfQVRUUihkZXN0cm95X25vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBmd19nZXRfZGVzdHJveV9ub2RlLCBmd19zZXRfZGVzdHJveV9ub2RlKTsKLQotCiBzdGF0aWMgc3NpemVfdCBmd19zZXRfcmVzY2FuKHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCkKIHsKQEAgLTQ0Miw3ICs0MTgsNiBAQAogCiAKIHN0cnVjdCBidXNfYXR0cmlidXRlICpjb25zdCBmd19idXNfYXR0cnNbXSA9IHsKLQkmYnVzX2F0dHJfZGVzdHJveV9ub2RlLAogCSZidXNfYXR0cl9yZXNjYW4sCiAJJmJ1c19hdHRyX2lnbm9yZV9kcml2ZXJzLAogCU5VTEwKQEAgLTczNCwxMCArNzA5LDEwIEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgobm9kZW1ncl9zZXJpYWxpemVfcmVtb3ZlX3Vkcyk7CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1hdGNoX25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IChzdHJ1Y3Qgbm9kZV9lbnRyeSAqKWRhdGE7CisJc3RydWN0IG5vZGVfZW50cnkgKm5lID0gZGF0YTsKIAogCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CiAJcmV0dXJuIHVkLT5uZSA9PSBuZTsKQEAgLTc1NCw4ICs3MjksNyBAQAogCSAqLwogCW11dGV4X2xvY2soJm5vZGVtZ3Jfc2VyaWFsaXplX3JlbW92ZV91ZHMpOwogCWZvciAoOzspIHsKLQkJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJCQlfX21hdGNoX25lKTsKKwkJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLCBtYXRjaF9uZSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CkBAIC03ODUsNyArNzU5LDcgQEAKIAlwdXRfZGV2aWNlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgX19ub2RlbWdyX3JlbW92ZV9ob3N0X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHJlbW92ZV9ob3N0X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKGRldi0+YnVzID09ICZpZWVlMTM5NF9idXNfdHlwZSkKIAkJbm9kZW1ncl9yZW1vdmVfbmUoY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksCkBAIC03OTUsNyArNzY5LDcgQEAKIAogc3RhdGljIHZvaWQgbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotCVdBUk5fT04oZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgX19ub2RlbWdyX3JlbW92ZV9ob3N0X2RldikpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIHJlbW92ZV9ob3N0X2Rldik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+a29iaiwgImlybV9pZCIpOwogCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosICJidXNtZ3JfaWQiKTsKIAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiaG9zdF9pZCIpOwpAQCAtODMwLDExICs4MDQsMTAgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IG5vZGVfZW50cnkgKm5vZGVtZ3JfY3JlYXRlX25vZGUob2N0bGV0X3QgZ3VpZCwgc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsCi0JCQkJCSAgICAgIHN0cnVjdCBob3N0X2luZm8gKmhpLCBub2RlaWRfdCBub2RlaWQsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uKQorc3RhdGljIHN0cnVjdCBub2RlX2VudHJ5ICpub2RlbWdyX2NyZWF0ZV9ub2RlKG9jdGxldF90IGd1aWQsCisJCQkJc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCisJCQkJbm9kZWlkX3Qgbm9kZWlkLCB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKIHsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwogCiAJbmUgPSBremFsbG9jKHNpemVvZigqbmUpLCBHRlBfS0VSTkVMKTsKQEAgLTg4OCwxMCArODYxLDEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZV9ndWlkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWF0Y2hfbmVfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXU2NCAqZ3VpZCA9ICh1NjQgKilkYXRhOworCXU2NCAqZ3VpZCA9IGRhdGE7CiAKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7CiAJcmV0dXJuIG5lLT5ndWlkID09ICpndWlkOwpAQCAtOTAyLDggKzg3NSw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKIAotCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmZ3VpZCwKLQkJCQlfX21hdGNoX25lX2d1aWQpOworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmZ3VpZCwgbWF0Y2hfbmVfZ3VpZCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCW5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIG5vZGVfZGV2KTsKQEAgLTkxMiwyMSArODg0LDIxIEBACiAJcmV0dXJuIG5lOwogfQogCi1zdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtIHsKK3N0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyIHsKIAlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0OwogCW5vZGVpZF90IG5vZGVpZDsKIH07CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZV9ub2RlaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtYXRjaF9uZV9ub2RlaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWludCBmb3VuZCA9IDA7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW0gKnBhcmFtID0gKHN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW0gKilkYXRhOworCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyICpwID0gZGF0YTsKIAogCWlmICghZGV2KQogCQlnb3RvIHJldDsKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7Ci0JaWYgKG5lLT5ob3N0ID09IHBhcmFtLT5ob3N0ICYmIG5lLT5ub2RlaWQgPT0gcGFyYW0tPm5vZGVpZCkKKwlpZiAobmUtPmhvc3QgPT0gcC0+aG9zdCAmJiBuZS0+bm9kZWlkID09IHAtPm5vZGVpZCkKIAkJZm91bmQgPSAxOwogcmV0OgogCXJldHVybiBmb3VuZDsKQEAgLTkzNywxMyArOTA5LDEyIEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKLQlzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtIHBhcmFtOworCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyIHA7CiAKLQlwYXJhbS5ob3N0ID0gaG9zdDsKLQlwYXJhbS5ub2RlaWQgPSBub2RlaWQ7CisJcC5ob3N0ID0gaG9zdDsKKwlwLm5vZGVpZCA9IG5vZGVpZDsKIAotCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmcGFyYW0sCi0JCQkJX19tYXRjaF9uZV9ub2RlaWQpOworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmcCwgbWF0Y2hfbmVfbm9kZWlkKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwpAQCAtOTkwLDcgKzk2MSw3IEBACiAgKiBpbW1lZGlhdGUgdW5pdCBkaXJlY3RvcmllcyBsb29raW5nIGZvciBzb2Z0d2FyZV9pZCBhbmQKICAqIHNvZnR3YXJlX3ZlcnNpb24gZW50cmllcywgaW4gb3JkZXIgdG8gZ2V0IGRyaXZlciBhdXRvbG9hZGluZyB3b3JraW5nLiAqLwogc3RhdGljIHN0cnVjdCB1bml0X2RpcmVjdG9yeSAqbm9kZW1ncl9wcm9jZXNzX3VuaXRfZGlyZWN0b3J5Ci0JKHN0cnVjdCBob3N0X2luZm8gKmhpLCBzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUsIHN0cnVjdCBjc3IxMjEyX2tleXZhbCAqdWRfa3YsCisJKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgc3RydWN0IGNzcjEyMTJfa2V5dmFsICp1ZF9rdiwKIAkgdW5zaWduZWQgaW50ICppZCwgc3RydWN0IHVuaXRfZGlyZWN0b3J5ICpwYXJlbnQpCiB7CiAJc3RydWN0IHVuaXRfZGlyZWN0b3J5ICp1ZDsKQEAgLTEwODMsNyArMTA1NCw3IEBACiAJCQkJCW5vZGVtZ3JfcmVnaXN0ZXJfZGV2aWNlKG5lLCB1ZCwgJm5lLT5kZXZpY2UpOwogCQkJCQogCQkJCS8qIHByb2Nlc3MgdGhlIGNoaWxkIHVuaXQgKi8KLQkJCQl1ZF9jaGlsZCA9IG5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeShoaSwgbmUsIGt2LCBpZCwgdWQpOworCQkJCXVkX2NoaWxkID0gbm9kZW1ncl9wcm9jZXNzX3VuaXRfZGlyZWN0b3J5KG5lLCBrdiwgaWQsIHVkKTsKIAogCQkJCWlmICh1ZF9jaGlsZCA9PSBOVUxMKQogCQkJCQlicmVhazsKQEAgLTExMzcsNyArMTEwOCw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9jZXNzX3Jvb3RfZGlyZWN0b3J5KHN0cnVjdCBob3N0X2luZm8gKmhpLCBzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCitzdGF0aWMgdm9pZCBub2RlbWdyX3Byb2Nlc3Nfcm9vdF9kaXJlY3Rvcnkoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewogCXVuc2lnbmVkIGludCB1ZF9pZCA9IDA7CiAJc3RydWN0IGNzcjEyMTJfZGVudHJ5ICpkZW50cnk7CkBAIC0xMTU3LDcgKzExMjgsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDU1IxMjEyX0tWX0lEX1VOSVQ6Ci0JCQlub2RlbWdyX3Byb2Nlc3NfdW5pdF9kaXJlY3RvcnkoaGksIG5lLCBrdiwgJnVkX2lkLCBOVUxMKTsKKwkJCW5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeShuZSwga3YsICZ1ZF9pZCwgTlVMTCk7CiAJCQlicmVhazsKIAogCQljYXNlIENTUjEyMTJfS1ZfSURfREVTQ1JJUFRPUjoKQEAgLTEyNzMsOCArMTI0NCw3IEBACiAgKiB0aGUgdG8gdGFrZSB3aGF0ZXZlciBhY3Rpb25zIHJlcXVpcmVkLgogICovCiBzdGF0aWMgdm9pZCBub2RlbWdyX3VwZGF0ZV9ub2RlKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsCi0JCQkJc3RydWN0IGhvc3RfaW5mbyAqaGksIG5vZGVpZF90IG5vZGVpZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKKwkJCQlub2RlaWRfdCBub2RlaWQsIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uKQogewogCWlmIChuZS0+bm9kZWlkICE9IG5vZGVpZCkgewogCQlIUFNCX0RFQlVHKCJOb2RlIGNoYW5nZWQ6ICIgTk9ERV9CVVNfRk1UICIgLT4gIiBOT0RFX0JVU19GTVQsCkBAIC0xMzA1LDE5ICsxMjc1LDIzIEBACiAJCWNzcjEyMTJfZGVzdHJveV9jc3IoY3NyKTsKIAl9CiAKLQlpZiAobmUtPmluX2xpbWJvKQotCQlub2RlbWdyX3Jlc3VtZV9uZShuZSk7Ci0KIAkvKiBNYXJrIHRoZSBub2RlIGN1cnJlbnQgKi8KIAluZS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisKKwlpZiAobmUtPmluX2xpbWJvKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmbmUtPmRldmljZSwgJmRldl9hdHRyX25lX2luX2xpbWJvKTsKKwkJbmUtPmluX2xpbWJvID0gZmFsc2U7CisKKwkJSFBTQl9ERUJVRygiTm9kZSByZWFjdGl2YXRlZDogIgorCQkJICAgIklEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKKwkJCSAgIE5PREVfQlVTX0FSR1MobmUtPmhvc3QsIG5lLT5ub2RlaWQpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZS0+Z3VpZCk7CisJfQogfQogCi0KLQotc3RhdGljIHZvaWQgbm9kZW1ncl9ub2RlX3NjYW5fb25lKHN0cnVjdCBob3N0X2luZm8gKmhpLAorc3RhdGljIHZvaWQgbm9kZW1ncl9ub2RlX3NjYW5fb25lKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCiAJCQkJICBub2RlaWRfdCBub2RlaWQsIGludCBnZW5lcmF0aW9uKQogewotCXN0cnVjdCBocHNiX2hvc3QgKmhvc3QgPSBoaS0+aG9zdDsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7CiAJb2N0bGV0X3QgZ3VpZDsKIAlzdHJ1Y3QgY3NyMTIxMl9jc3IgKmNzcjsKQEAgLTEzNzMsMTYgKzEzNDcsMTUgQEAKIAl9CiAKIAlpZiAoIW5lKQotCQlub2RlbWdyX2NyZWF0ZV9ub2RlKGd1aWQsIGNzciwgaGksIG5vZGVpZCwgZ2VuZXJhdGlvbik7CisJCW5vZGVtZ3JfY3JlYXRlX25vZGUoZ3VpZCwgY3NyLCBob3N0LCBub2RlaWQsIGdlbmVyYXRpb24pOwogCWVsc2UKLQkJbm9kZW1ncl91cGRhdGVfbm9kZShuZSwgY3NyLCBoaSwgbm9kZWlkLCBnZW5lcmF0aW9uKTsKKwkJbm9kZW1ncl91cGRhdGVfbm9kZShuZSwgY3NyLCBub2RlaWQsIGdlbmVyYXRpb24pOwogfQogCiAKLXN0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuKHN0cnVjdCBob3N0X2luZm8gKmhpLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBnZW5lcmF0aW9uKQogewogCWludCBjb3VudDsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CiAJc3RydWN0IHNlbGZpZCAqc2lkID0gKHN0cnVjdCBzZWxmaWQgKilob3N0LT50b3BvbG9neV9tYXA7CiAJbm9kZWlkX3Qgbm9kZWlkID0gTE9DQUxfQlVTOwogCkBAIC0xMzk1LDg5ICsxMzY4LDI2IEBACiAJCQlub2RlaWQrKzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW5vZGVtZ3Jfbm9kZV9zY2FuX29uZShoaSwgbm9kZWlkKyssIGdlbmVyYXRpb24pOworCQlub2RlbWdyX25vZGVfc2Nhbl9vbmUoaG9zdCwgbm9kZWlkKyssIGdlbmVyYXRpb24pOwogCX0KIH0KIAotc3RhdGljIGludCBfX25vZGVtZ3JfZHJpdmVyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbm9kZW1ncl9wYXVzZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCiB7Ci0Jc3RydWN0IHVuaXRfZGlyZWN0b3J5ICp1ZDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IChzdHJ1Y3Qgbm9kZV9lbnRyeSAqKWRhdGE7Ci0JaW50IGVycm9yOwotCi0JdWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIHVuaXRfZGV2KTsKLQlpZiAodWQtPm5lID09IG5lKSB7Ci0JCWRydiA9IGdldF9kcml2ZXIodWQtPmRldmljZS5kcml2ZXIpOwotCQlpZiAoZHJ2KSB7Ci0JCQllcnJvciA9IDE7IC8qIHJlbGVhc2UgaWYgc3VzcGVuZCBpcyBub3QgaW1wbGVtZW50ZWQgKi8KLQkJCWlmIChkcnYtPnN1c3BlbmQpIHsKLQkJCQlkb3duKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQkJZXJyb3IgPSBkcnYtPnN1c3BlbmQoJnVkLT5kZXZpY2UsIFBNU0dfU1VTUEVORCk7Ci0JCQkJdXAoJnVkLT5kZXZpY2Uuc2VtKTsKLQkJCX0KLQkJCWlmIChlcnJvcikKLQkJCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJnVkLT5kZXZpY2UpOwotCQkJcHV0X2RyaXZlcihkcnYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19ub2RlbWdyX2RyaXZlcl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKLQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSAoc3RydWN0IG5vZGVfZW50cnkgKilkYXRhOwotCi0JdWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIHVuaXRfZGV2KTsKLQlpZiAodWQtPm5lID09IG5lKSB7Ci0JCWRydiA9IGdldF9kcml2ZXIodWQtPmRldmljZS5kcml2ZXIpOwotCQlpZiAoZHJ2KSB7Ci0JCQlpZiAoZHJ2LT5yZXN1bWUpIHsKLQkJCQlkb3duKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQkJZHJ2LT5yZXN1bWUoJnVkLT5kZXZpY2UpOwotCQkJCXVwKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQl9Ci0JCQlwdXRfZHJpdmVyKGRydik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbm9kZW1ncl9zdXNwZW5kX25lKHN0cnVjdCBub2RlX2VudHJ5ICpuZSkKLXsKLQlIUFNCX0RFQlVHKCJOb2RlIHN1c3BlbmRlZDogSUQ6QlVTWyIgTk9ERV9CVVNfRk1UICJdICBHVUlEWyUwMTZMeF0iLAorCUhQU0JfREVCVUcoIk5vZGUgcGF1c2VkOiBJRDpCVVNbIiBOT0RFX0JVU19GTVQgIl0gIEdVSURbJTAxNkx4XSIsCiAJCSAgIE5PREVfQlVTX0FSR1MobmUtPmhvc3QsIG5lLT5ub2RlaWQpLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5lLT5ndWlkKTsKIAotCW5lLT5pbl9saW1ibyA9IDE7CisJbmUtPmluX2xpbWJvID0gdHJ1ZTsKIAlXQVJOX09OKGRldmljZV9jcmVhdGVfZmlsZSgmbmUtPmRldmljZSwgJmRldl9hdHRyX25lX2luX2xpbWJvKSk7Ci0KLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJICAgICAgX19ub2RlbWdyX2RyaXZlcl9zdXNwZW5kKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBub2RlbWdyX3Jlc3VtZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCi17Ci0JbmUtPmluX2xpbWJvID0gMDsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5lLT5kZXZpY2UsICZkZXZfYXR0cl9uZV9pbl9saW1ibyk7Ci0KLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJICAgICAgX19ub2RlbWdyX2RyaXZlcl9yZXN1bWUpOwotCUhQU0JfREVCVUcoIk5vZGUgcmVzdW1lZDogSUQ6QlVTWyIgTk9ERV9CVVNfRk1UICJdICBHVUlEWyUwMTZMeF0iLAotCQkgICBOT0RFX0JVU19BUkdTKG5lLT5ob3N0LCBuZS0+bm9kZWlkKSwgKHVuc2lnbmVkIGxvbmcgbG9uZyluZS0+Z3VpZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19ub2RlbWdyX3VwZGF0ZV9wZHJ2KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdXBkYXRlX3BkcnYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKnBkcnY7Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lID0gKHN0cnVjdCBub2RlX2VudHJ5ICopZGF0YTsKKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSBkYXRhOwogCWludCBlcnJvcjsKIAogCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CkBAIC0xNTAzLDExICsxNDEzLDkgQEAKIAogc3RhdGljIHZvaWQgbm9kZW1ncl91cGRhdGVfcGRydihzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCiB7Ci0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKLQkJCSAgICAgIF9fbm9kZW1ncl91cGRhdGVfcGRydik7CisJY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwgdXBkYXRlX3BkcnYpOwogfQogCi0KIC8qIFdyaXRlIHRoZSBCUk9BRENBU1RfQ0hBTk5FTCBhcyBwZXIgSUVFRTEzOTRhIDguMy4yLjMuMTEgYW5kIDguNC4yLjMuICBUaGlzCiAgKiBzZWVtcyBsaWtlIGFuIG9wdGlvbmFsIHNlcnZpY2UgYnV0IGluIHRoZSBlbmQgaXQgaXMgcHJhY3RpY2FsbHkgbWFuZGF0b3J5CiAgKiBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZXNlIGNsYXVzZXMuCkBAIC0xNTM1LDExICsxNDQzLDEyIEBACiB9CiAKIAotc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9iZV9uZShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgc3RydWN0IG5vZGVfZW50cnkgKm5lLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyB2b2lkIG5vZGVtZ3JfcHJvYmVfbmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgc3RydWN0IG5vZGVfZW50cnkgKm5lLAorCQkJICAgICBpbnQgZ2VuZXJhdGlvbikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlpZiAobmUtPmhvc3QgIT0gaGktPmhvc3QgfHwgbmUtPmluX2xpbWJvKQorCWlmIChuZS0+aG9zdCAhPSBob3N0IHx8IG5lLT5pbl9saW1ibykKIAkJcmV0dXJuOwogCiAJZGV2ID0gZ2V0X2RldmljZSgmbmUtPmRldmljZSk7CkBAIC0xNTU0LDQwICsxNDYzLDQwIEBACiAJICogZG93biB0byB0aGUgZHJpdmVycy4gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgZGVhZCBub2RlIGFuZCB3ZQogCSAqIHN1c3BlbmQgaXQuICovCiAJaWYgKG5lLT5uZWVkc19wcm9iZSkKLQkJbm9kZW1ncl9wcm9jZXNzX3Jvb3RfZGlyZWN0b3J5KGhpLCBuZSk7CisJCW5vZGVtZ3JfcHJvY2Vzc19yb290X2RpcmVjdG9yeShuZSk7CiAJZWxzZSBpZiAobmUtPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbikKIAkJbm9kZW1ncl91cGRhdGVfcGRydihuZSk7CiAJZWxzZQotCQlub2RlbWdyX3N1c3BlbmRfbmUobmUpOworCQlub2RlbWdyX3BhdXNlX25lKG5lKTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KIAotc3RydWN0IHByb2JlX3BhcmFtIHsKLQlzdHJ1Y3QgaG9zdF9pbmZvICpoaTsKK3N0cnVjdCBub2RlX3Byb2JlX3BhcmFtZXRlciB7CisJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKIAlpbnQgZ2VuZXJhdGlvbjsKIAlib29sIHByb2JlX25vdzsKIH07CiAKIHN0YXRpYyBpbnQgbm9kZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHByb2JlX3BhcmFtICpwID0gZGF0YTsKKwlzdHJ1Y3Qgbm9kZV9wcm9iZV9wYXJhbWV0ZXIgKnAgPSBkYXRhOwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKIAotCWlmIChwLT5nZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24ocC0+aGktPmhvc3QpKQorCWlmIChwLT5nZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24ocC0+aG9zdCkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwogCWlmIChuZS0+bmVlZHNfcHJvYmUgPT0gcC0+cHJvYmVfbm93KQotCQlub2RlbWdyX3Byb2JlX25lKHAtPmhpLCBuZSwgcC0+Z2VuZXJhdGlvbik7CisJCW5vZGVtZ3JfcHJvYmVfbmUocC0+aG9zdCwgbmUsIHAtPmdlbmVyYXRpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBub2RlbWdyX25vZGVfcHJvYmUoc3RydWN0IGhvc3RfaW5mbyAqaGksIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCBub2RlbWdyX25vZGVfcHJvYmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IGdlbmVyYXRpb24pCiB7Ci0Jc3RydWN0IHByb2JlX3BhcmFtIHA7CisJc3RydWN0IG5vZGVfcHJvYmVfcGFyYW1ldGVyIHA7CiAKLQlwLmhpID0gaGk7CisJcC5ob3N0ID0gaG9zdDsKIAlwLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOwogCS8qCiAJICogRG8gc29tZSBwcm9jZXNzaW5nIG9mIHRoZSBub2RlcyB3ZSd2ZSBwcm9iZWQuIFRoaXMgcHVsbHMgdGhlbQpAQCAtMTYwNCwxMSArMTUxMywxMSBAQAogCSAqLwogCXAucHJvYmVfbm93ID0gZmFsc2U7CiAJaWYgKGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnAsIG5vZGVfcHJvYmUpICE9IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlwLnByb2JlX25vdyA9IHRydWU7CiAJaWYgKGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnAsIG5vZGVfcHJvYmUpICE9IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBOb3cgbGV0J3MgdGVsbCB0aGUgYnVzIHRvIHJlc2NhbiBvdXIgZGV2aWNlcy4gVGhpcyBtYXkgc2VlbQogCSAqIGxpa2Ugb3ZlcmhlYWQsIGJ1dCB0aGUgZHJpdmVyLW1vZGVsIGNvcmUgd2lsbCBvbmx5IHNjYW4gYQpAQCAtMTYyMCw2ICsxNTI5LDI3IEBACiAJICovCiAJaWYgKGJ1c19yZXNjYW5fZGV2aWNlcygmaWVlZTEzOTRfYnVzX3R5cGUpICE9IDApCiAJCUhQU0JfREVCVUcoImJ1c19yZXNjYW5fZGV2aWNlcyBoYWQgYW4gZXJyb3IiKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9ub2Rlc19pbl9saW1ibyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5vZGVfZW50cnkgKm5lOworCisJaWYgKGRldi0+YnVzICE9ICZpZWVlMTM5NF9idXNfdHlwZSkKKwkJcmV0dXJuIDA7CisKKwluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBkZXZpY2UpOworCWlmIChuZS0+aW5fbGltYm8pCisJCW5vZGVtZ3JfcmVtb3ZlX25lKG5lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBub2RlbWdyX3JlbW92ZV9ub2Rlc19pbl9saW1ibyhzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQoreworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmaG9zdC0+ZGV2aWNlLCBOVUxMLCByZW1vdmVfbm9kZXNfaW5fbGltYm8pOwogfQogCiBzdGF0aWMgaW50IG5vZGVtZ3Jfc2VuZF9yZXN1bWVfcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpCkBAIC0xNzMwLDEwICsxNjYwLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBub2RlbWdyX2hvc3RfdGhyZWFkKHZvaWQgKl9faGkpCitzdGF0aWMgaW50IG5vZGVtZ3JfaG9zdF90aHJlYWQodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaG9zdF9pbmZvICpoaSA9IChzdHJ1Y3QgaG9zdF9pbmZvICopX19oaTsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CisJc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGRhdGE7CiAJdW5zaWduZWQgaW50IGcsIGdlbmVyYXRpb24gPSAwOwogCWludCBpLCByZXNldF9jeWNsZXMgPSAwOwogCkBAIC0xNzg3LDM2ICsxNzE2LDQ4IEBACiAJCSAqIGVudHJpZXMuIFRoaXMgZG9lcyBub3QgZG8gdGhlIHN5c2ZzIHN0dWZmLCBzaW5jZSB0aGF0CiAJCSAqIHdvdWxkIHRyaWdnZXIgdWV2ZW50cyBhbmQgc3VjaCwgd2hpY2ggaXMgYSBiYWQgaWRlYSBhdAogCQkgKiB0aGlzIHBvaW50LiAqLwotCQlub2RlbWdyX25vZGVfc2NhbihoaSwgZ2VuZXJhdGlvbik7CisJCW5vZGVtZ3Jfbm9kZV9zY2FuKGhvc3QsIGdlbmVyYXRpb24pOwogCiAJCS8qIFRoaXMgYWN0dWFsbHkgZG9lcyB0aGUgZnVsbCBwcm9iZSwgd2l0aCBzeXNmcwogCQkgKiByZWdpc3RyYXRpb24uICovCi0JCW5vZGVtZ3Jfbm9kZV9wcm9iZShoaSwgZ2VuZXJhdGlvbik7CisJCWlmICghbm9kZW1ncl9ub2RlX3Byb2JlKGhvc3QsIGdlbmVyYXRpb24pKQorCQkJY29udGludWU7CiAKIAkJLyogVXBkYXRlIHNvbWUgb2Ygb3VyIHN5c2ZzIHN5bWxpbmtzICovCiAJCW5vZGVtZ3JfdXBkYXRlX2hvc3RfZGV2X2xpbmtzKGhvc3QpOworCisJCS8qIFNsZWVwIDMgc2Vjb25kcyAqLworCQlmb3IgKGkgPSAzMDAwLzIwMDsgaTsgaS0tKSB7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQlnb3RvIGV4aXQ7CisKKwkJCWlmIChnZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24oaG9zdCkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBnb25lLCB1bmxlc3MgYSBidXMgcmVzZXQgaGFwcGVuZWQgKi8KKwkJaWYgKCFpKQorCQkJbm9kZW1ncl9yZW1vdmVfbm9kZXNfaW5fbGltYm8oaG9zdCk7CiAJfQogZXhpdDoKIAlIUFNCX1ZFUkJPU0UoIk5vZGVNZ3I6IEV4aXRpbmcgdGhyZWFkIik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBob3N0X2l0ZXJfcGFyYW0geworc3RydWN0IHBlcl9ob3N0X3BhcmFtZXRlciB7CiAJdm9pZCAqZGF0YTsKIAlpbnQgKCpjYikoc3RydWN0IGhwc2JfaG9zdCAqLCB2b2lkICopOwogfTsKIAotc3RhdGljIGludCBfX25vZGVtZ3JfZm9yX2VhY2hfaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHBlcl9ob3N0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0OwotCXN0cnVjdCBob3N0X2l0ZXJfcGFyYW0gKmhpcCA9IChzdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtICopZGF0YTsKLQlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBwZXJfaG9zdF9wYXJhbWV0ZXIgKnAgPSBkYXRhOwogCiAJaG9zdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBocHNiX2hvc3QsIGhvc3RfZGV2KTsKLQllcnJvciA9IGhpcC0+Y2IoaG9zdCwgaGlwLT5kYXRhKTsKLQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcC0+Y2IoaG9zdCwgcC0+ZGF0YSk7CiB9CisKIC8qKgogICogbm9kZW1ncl9mb3JfZWFjaF9ob3N0IC0gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIElFRUUgMTM5NCBob3N0CiAgKiBAZGF0YTogYW4gYWRkcmVzcyB0byBzdXBwbHkgdG8gdGhlIGNhbGxiYWNrCkBAIC0xODMxLDE1ICsxNzcyLDExIEBACiAgKi8KIGludCBub2RlbWdyX2Zvcl9lYWNoX2hvc3Qodm9pZCAqZGF0YSwgaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKSkKIHsKLQlzdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtIGhpcDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IHBlcl9ob3N0X3BhcmFtZXRlciBwOwogCi0JaGlwLmNiID0gY2I7Ci0JaGlwLmRhdGEgPSBkYXRhOwotCWVycm9yID0gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZocHNiX2hvc3RfY2xhc3MsIE5VTEwsICZoaXAsCi0JCQkJICAgICAgX19ub2RlbWdyX2Zvcl9lYWNoX2hvc3QpOwotCi0JcmV0dXJuIGVycm9yOworCXAuY2IgPSBjYjsKKwlwLmRhdGEgPSBkYXRhOworCXJldHVybiBjbGFzc19mb3JfZWFjaF9kZXZpY2UoJmhwc2JfaG9zdF9jbGFzcywgTlVMTCwgJnAsIHBlcl9ob3N0KTsKIH0KIAogLyogVGhlIGZvbGxvd2luZyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zIHVzZSBhIHN0cnVjdCBub2RlX2VudHJ5CkBAIC0xODkzLDcgKzE4MzAsNyBAQAogCQlyZXR1cm47CiAJfQogCWhpLT5ob3N0ID0gaG9zdDsKLQloaS0+dGhyZWFkID0ga3RocmVhZF9ydW4obm9kZW1ncl9ob3N0X3RocmVhZCwgaGksICJrbm9kZW1ncmRfJWQiLAorCWhpLT50aHJlYWQgPSBrdGhyZWFkX3J1bihub2RlbWdyX2hvc3RfdGhyZWFkLCBob3N0LCAia25vZGVtZ3JkXyVkIiwKIAkJCQkgaG9zdC0+aWQpOwogCWlmIChJU19FUlIoaGktPnRocmVhZCkpIHsKIAkJSFBTQl9FUlIoIk5vZGVNZ3I6IGNhbm5vdCBzdGFydCB0aHJlYWQgZm9yIGhvc3QgJWQiLCBob3N0LT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaCBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCmluZGV4IDZlYjI2NDYuLjRmMjg3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlIG5vZGVfZGV2OwogCiAJLyogTWVhbnMgdGhpcyBub2RlIGlzIG5vdCBhdHRhY2hlZCBhbnltb3JlICovCi0JaW50IGluX2xpbWJvOworCWJvb2wgaW5fbGltYm87CiAKIAlzdHJ1Y3QgY3NyMTIxMl9jc3IgKmNzcjsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaAppbmRleCBhMDZhYWFkLi43YTIyNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC1wcml2YXRlLmgKQEAgLTIyLDYgKzIyLDcgQEAKIHN0cnVjdCBmaWxlX2luZm8gewogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7CiAgICAgICAgIGVudW0geyBvcGVuZWQsIGluaXRpYWxpemVkLCBjb25uZWN0ZWQgfSBzdGF0ZTsKICAgICAgICAgdW5zaWduZWQgaW50IHByb3RvY29sX3ZlcnNpb247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggNmZhOWU0YS4uOWYxOWFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0yMjY3LDYgKzIyNjgsOCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOworCiAJc3dpdGNoIChmaS0+c3RhdGUpIHsKIAljYXNlIG9wZW5lZDoKIAkJcmV0dmFsID0gc3RhdGVfb3BlbmVkKGZpLCByZXEpOwpAQCAtMjI4MSw2ICsyMjg0LDggQEAKIAkJYnJlYWs7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOworCiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKIAl9IGVsc2UgewpAQCAtMjU0MSwxMDkgKzI1NDYsMTIwIEBACiBzdGF0aWMgaW50IHJhdzEzOTRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmZpLT5zdGF0ZV9tdXRleCk7CiAKIAlpZiAoZmktPmlzb19zdGF0ZSA9PSBSQVcxMzk0X0lTT19JTkFDVElWRSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlyZXQgPSBkbWFfcmVnaW9uX21tYXAoJmZpLT5pc29faGFuZGxlLT5kYXRhX2J1ZiwgZmlsZSwgdm1hKTsKIAotCXJldHVybiBkbWFfcmVnaW9uX21tYXAoJmZpLT5pc29faGFuZGxlLT5kYXRhX2J1ZiwgZmlsZSwgdm1hKTsKKwltdXRleF91bmxvY2soJmZpLT5zdGF0ZV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyByYXcxMzk0X2lvY3RsX2luYWN0aXZlKHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHZvaWQgX191c2VyICphcmdwKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9JTklUOgorCQlyZXR1cm4gcmF3MTM5NF9pc29feG1pdF9pbml0KGZpLCBhcmdwKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0lOSVQ6CisJCXJldHVybiByYXcxMzk0X2lzb19yZWN2X2luaXQoZmksIGFyZ3ApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bF9yZWN2KHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1NUQVJUOnsKKwkJCWludCBhcmdzWzNdOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3NbMF0sIGFyZ3AsIHNpemVvZihhcmdzKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zdGFydChmaS0+aXNvX2hhbmRsZSwKKwkJCQkJCSAgIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOworCQl9CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6CisJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0xJU1RFTl9DSEFOTkVMOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwgYXJnKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1VOTElTVEVOX0NIQU5ORUw6CisJCXJldHVybiBocHNiX2lzb19yZWN2X3VubGlzdGVuX2NoYW5uZWwoZmktPmlzb19oYW5kbGUsIGFyZyk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9TRVRfQ0hBTk5FTF9NQVNLOnsKKwkJCXU2NCBtYXNrOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIGFyZ3AsIHNpemVvZihtYXNrKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zZXRfY2hhbm5lbF9tYXNrKGZpLT5pc29faGFuZGxlLAorCQkJCQkJCSAgICAgIG1hc2spOworCQl9CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX2dldF9zdGF0dXMoZmksIGFyZ3ApOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUEFDS0VUUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfcGFja2V0cyhmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9SRUxFQVNFX1BBQ0tFVFM6CisJCXJldHVybiBocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhmaS0+aXNvX2hhbmRsZSwgYXJnKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0ZMVVNIOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9mbHVzaChmaS0+aXNvX2hhbmRsZSk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046CisJCXJhdzEzOTRfaXNvX3NodXRkb3duKGZpKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6CisJCXF1ZXVlX3Jhd2lzb19ldmVudChmaSk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bF94bWl0KHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHZvaWQgX191c2VyICphcmdwKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9TVEFSVDp7CisJCQlpbnQgYXJnc1syXTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIGhwc2JfaXNvX3htaXRfc3RhcnQoZmktPmlzb19oYW5kbGUsCisJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdKTsKKwkJfQorCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfU1lOQzoKKwkJcmV0dXJuIGhwc2JfaXNvX3htaXRfc3luYyhmaS0+aXNvX2hhbmRsZSk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6CisJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19HRVRfU1RBVFVTOgorCQlyZXR1cm4gcmF3MTM5NF9pc29fZ2V0X3N0YXR1cyhmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9QQUNLRVRTOgorCQlyZXR1cm4gcmF3MTM5NF9pc29fc2VuZF9wYWNrZXRzKGZpLCBhcmdwKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19TSFVURE9XTjoKKwkJcmF3MTM5NF9pc29fc2h1dGRvd24oZmkpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19RVUVVRV9BQ1RJVklUWToKKwkJcXVldWVfcmF3aXNvX2V2ZW50KGZpKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQogCiAvKiBpb2N0bCBpcyBvbmx5IHVzZWQgZm9yIHJhd2lzbyBvcGVyYXRpb25zICovCi1zdGF0aWMgbG9uZyBkb19yYXcxMzk0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0KLQlzd2l0Y2ggKGZpLT5pc29fc3RhdGUpIHsKLQljYXNlIFJBVzEzOTRfSVNPX0lOQUNUSVZFOgotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX0lOSVQ6Ci0JCQlyZXR1cm4gcmF3MTM5NF9pc29feG1pdF9pbml0KGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9JTklUOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfaW5pdChmaSwgYXJncCk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFJBVzEzOTRfSVNPX1JFQ1Y6Ci0JCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfU1RBUlQ6ewotCQkJCS8qIGNvcHkgYXJncyBmcm9tIHVzZXItc3BhY2UgKi8KLQkJCQlpbnQgYXJnc1szXTsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zdGFydChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdLAotCQkJCQkJCSAgIGFyZ3NbMl0pOwotCQkJfQotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1JFQ1ZfU1RPUDoKLQkJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfTElTVEVOX0NIQU5ORUw6Ci0JCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICAgYXJnKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9VTkxJU1RFTl9DSEFOTkVMOgotCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfdW5saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICAgICBhcmcpOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1NFVF9DSEFOTkVMX01BU0s6ewotCQkJCS8qIGNvcHkgdGhlIHU2NCBmcm9tIHVzZXItc3BhY2UgKi8KLQkJCQl1NjQgbWFzazsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIGFyZ3AsIHNpemVvZihtYXNrKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCXJldHVybiBocHNiX2lzb19yZWN2X3NldF9jaGFubmVsX21hc2soZmktPgotCQkJCQkJCQkgICAgICBpc29faGFuZGxlLAotCQkJCQkJCQkgICAgICBtYXNrKTsKLQkJCX0KLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKLQkJCXJldHVybiByYXcxMzk0X2lzb19nZXRfc3RhdHVzKGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9QQUNLRVRTOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfcGFja2V0cyhmaSwgYXJncCk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUkVMRUFTRV9QQUNLRVRTOgotCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfcmVsZWFzZV9wYWNrZXRzKGZpLT5pc29faGFuZGxlLAotCQkJCQkJCSAgICAgYXJnKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9GTFVTSDoKLQkJCXJldHVybiBocHNiX2lzb19yZWN2X2ZsdXNoKGZpLT5pc29faGFuZGxlKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046Ci0JCQlyYXcxMzk0X2lzb19zaHV0ZG93bihmaSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCQlxdWV1ZV9yYXdpc29fZXZlbnQoZmkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSQVcxMzk0X0lTT19YTUlUOgotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1NUQVJUOnsKLQkJCQkvKiBjb3B5IHR3byBpbnRzIGZyb20gdXNlci1zcGFjZSAqLwotCQkJCWludCBhcmdzWzJdOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCSAgICAoJmFyZ3NbMF0sIGFyZ3AsIHNpemVvZihhcmdzKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCXJldHVybiBocHNiX2lzb194bWl0X3N0YXJ0KGZpLT5pc29faGFuZGxlLAotCQkJCQkJCSAgIGFyZ3NbMF0sIGFyZ3NbMV0pOwotCQkJfQotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1NZTkM6Ci0JCQlyZXR1cm4gaHBzYl9pc29feG1pdF9zeW5jKGZpLT5pc29faGFuZGxlKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6Ci0JCQlocHNiX2lzb19zdG9wKGZpLT5pc29faGFuZGxlKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19HRVRfU1RBVFVTOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX2dldF9zdGF0dXMoZmksIGFyZ3ApOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1BBQ0tFVFM6Ci0JCQlyZXR1cm4gcmF3MTM5NF9pc29fc2VuZF9wYWNrZXRzKGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046Ci0JCQlyYXcxMzk0X2lzb19zaHV0ZG93bihmaSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCQlxdWV1ZV9yYXdpc29fZXZlbnQoZmkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWxvbmcgcmV0OwogCiAJLyogc3RhdGUtaW5kZXBlbmRlbnQgY29tbWFuZHMgKi8KIAlzd2l0Y2goY21kKSB7CkBAIC0yNjUzLDE2ICsyNjY5LDI1IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAtRUlOVkFMOwotfQorCW11dGV4X2xvY2soJmZpLT5zdGF0ZV9tdXRleCk7CiAKLXN0YXRpYyBsb25nIHJhdzEzOTRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JbG9uZyByZXQ7Ci0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBkb19yYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJc3dpdGNoIChmaS0+aXNvX3N0YXRlKSB7CisJY2FzZSBSQVcxMzk0X0lTT19JTkFDVElWRToKKwkJcmV0ID0gcmF3MTM5NF9pb2N0bF9pbmFjdGl2ZShmaSwgY21kLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBSQVcxMzk0X0lTT19SRUNWOgorCQlyZXQgPSByYXcxMzk0X2lvY3RsX3JlY3YoZmksIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBSQVcxMzk0X0lTT19YTUlUOgorCQlyZXQgPSByYXcxMzk0X2lvY3RsX3htaXQoZmksIGNtZCwgYXJncCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZmktPnN0YXRlX211dGV4KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MDAsNyArMjcyNSw3IEBACiAJICAgICFjb3B5X2Zyb21fdXNlcigmaW5mb3MzMiwgJmFyZy0+aW5mb3MsIHNpemVvZiBpbmZvczMyKSkgewogCQlpbmZvcyA9IGNvbXBhdF9wdHIoaW5mb3MzMik7CiAJCWlmICghY29weV90b191c2VyKCZkc3QtPmluZm9zLCAmaW5mb3MsIHNpemVvZiBpbmZvcykpCi0JCQllcnIgPSBkb19yYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpZHN0KTsKKwkJCWVyciA9IHJhdzEzOTRfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZylkc3QpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtMjcyNCw3ICsyNzQ5LDYgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlsb25nIGVycjsKIAotCWxvY2tfa2VybmVsKCk7CiAJc3dpdGNoIChjbWQpIHsKIAkvKiBUaGVzZSByZXF1ZXN0cyBoYXZlIHNhbWUgZm9ybWF0IGFzIGxvbmcgYXMgJ2ludCcgaGFzIHNhbWUgc2l6ZS4gKi8KIAljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0lOSVQ6CkBAIC0yNzQxLDcgKzI3NjUsNyBAQAogCWNhc2UgUkFXMTM5NF9JT0NfSVNPX0dFVF9TVEFUVVM6CiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046CiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCWVyciA9IGRvX3JhdzEzOTRfaW9jdGwoZmlsZSwgY21kLCBhcmcpOworCQllcnIgPSByYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJLyogVGhlc2UgcmVxdWVzdCBoYXZlIGRpZmZlcmVudCBmb3JtYXQuICovCiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9QQUNLRVRTMzI6CkBAIC0yNzU3LDcgKzI3ODEsNiBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI3OTEsNiArMjgxNCw3IEBACiAJZmktPm5vdGlmaWNhdGlvbiA9ICh1OCkgUkFXMTM5NF9OT1RJRllfT047CS8qIGJ1c3Jlc2V0IG5vdGlmaWNhdGlvbiAqLwogCiAJSU5JVF9MSVNUX0hFQUQoJmZpLT5saXN0KTsKKwltdXRleF9pbml0KCZmaS0+c3RhdGVfbXV0ZXgpOwogCWZpLT5zdGF0ZSA9IG9wZW5lZDsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9wZW5kaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9jb21wbGV0ZSk7CkBAIC0zMDEwLDEwICszMDM0LDEwIEBACiAJaHBzYl9yZWdpc3Rlcl9oaWdobGV2ZWwoJnJhdzEzOTRfaGlnaGxldmVsKTsKIAogCWlmIChJU19FUlIKLQkgICAgKGRldmljZV9jcmVhdGVfZHJ2ZGF0YSgKLQkgICAgICBocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAotCSAgICAgIE1LREVWKElFRUUxMzk0X01BSk9SLCBJRUVFMTM5NF9NSU5PUl9CTE9DS19SQVcxMzk0ICogMTYpLAotCSAgICAgIE5VTEwsIFJBVzEzOTRfREVWSUNFX05BTUUpKSkgeworCSAgICAoZGV2aWNlX2NyZWF0ZShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAorCQkJICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsCisJCQkJIElFRUUxMzk0X01JTk9SX0JMT0NLX1JBVzEzOTQgKiAxNiksCisJCQkgICBOVUxMLCBSQVcxMzk0X0RFVklDRV9OQU1FKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBvdXRfdW5yZWc7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCAxZDZhZDM0Li5jNTJmNmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtNTI2LDI2ICs1MjYsNDEgQEAKIAogc3RhdGljIGludCBzYnAydXRpbF9jcmVhdGVfY29tbWFuZF9vcmJfcG9vbChzdHJ1Y3Qgc2JwMl9sdSAqbHUpCiB7Ci0Jc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpID0gbHUtPmhpOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGx1LT5oaS0+aG9zdC0+ZGV2aWNlLnBhcmVudDsKIAlpbnQgaSwgb3JicyA9IHNicDJfc2VyaWFsaXplX2lvID8gMiA6IFNCUDJfTUFYX0NNRFM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3JiczsgaSsrKSB7CiAJCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjbWQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJY21kLT5jb21tYW5kX29yYl9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJCSZjbWQtPmNvbW1hbmRfb3JiLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCQljbWQtPnNnZV9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCwKLQkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJCURNQV9UT19ERVZJQ0UpOworCQkJZ290byBmYWlsZWRfYWxsb2M7CisKKwkJY21kLT5jb21tYW5kX29yYl9kbWEgPQorCQkgICAgZG1hX21hcF9zaW5nbGUoZG1hZGV2LCAmY21kLT5jb21tYW5kX29yYiwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAorCQkJCSAgIERNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSkpCisJCQlnb3RvIGZhaWxlZF9vcmI7CisKKwkJY21kLT5zZ2VfZG1hID0KKwkJICAgIGRtYV9tYXBfc2luZ2xlKGRtYWRldiwgJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCwKKwkJCQkgICBzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKKwkJCQkgICBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYWRldiwgY21kLT5zZ2VfZG1hKSkKKwkJCWdvdG8gZmFpbGVkX3NnZTsKKwogCQlJTklUX0xJU1RfSEVBRCgmY21kLT5saXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmY21kLT5saXN0LCAmbHUtPmNtZF9vcmJfY29tcGxldGVkKTsKIAl9CiAJcmV0dXJuIDA7CisKK2ZhaWxlZF9zZ2U6CisJZG1hX3VubWFwX3NpbmdsZShkbWFkZXYsIGNtZC0+Y29tbWFuZF9vcmJfZG1hLAorCQkJIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOworZmFpbGVkX29yYjoKKwlrZnJlZShjbWQpOworZmFpbGVkX2FsbG9jOgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBzYnAydXRpbF9yZW1vdmVfY29tbWFuZF9vcmJfcG9vbChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCkBAIC02NDEsMjQgKzY1NiwxMSBAQAogc3RhdGljIHZvaWQgc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCiAJCQkJCSAgICBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZCkKIHsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gbHUtPnVkLT5uZS0+aG9zdDsKLQotCWlmIChjbWQtPmNtZF9kbWEpIHsKLQkJaWYgKGNtZC0+ZG1hX3R5cGUgPT0gQ01EX0RNQV9TSU5HTEUpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+Y21kX2RtYSwKLQkJCQkJIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7Ci0JCWVsc2UgaWYgKGNtZC0+ZG1hX3R5cGUgPT0gQ01EX0RNQV9QQUdFKQotCQkJZG1hX3VubWFwX3BhZ2UoaG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5jbWRfZG1hLAotCQkJCSAgICAgICBjbWQtPmRtYV9zaXplLCBjbWQtPmRtYV9kaXIpOwotCQkvKiBYWFg6IENoZWNrIGZvciBDTURfRE1BX05PTkUgYnVnICovCi0JCWNtZC0+ZG1hX3R5cGUgPSBDTURfRE1BX05PTkU7Ci0JCWNtZC0+Y21kX2RtYSA9IDA7Ci0JfQotCWlmIChjbWQtPnNnZV9idWZmZXIpIHsKLQkJZG1hX3VubWFwX3NnKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2J1ZmZlciwKLQkJCSAgICAgY21kLT5kbWFfc2l6ZSwgY21kLT5kbWFfZGlyKTsKLQkJY21kLT5zZ2VfYnVmZmVyID0gTlVMTDsKLQl9CisJaWYgKHNjc2lfc2dfY291bnQoY21kLT5DdXJyZW50X1NDcG50KSkKKwkJZG1hX3VubWFwX3NnKGx1LT51ZC0+bmUtPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkgICAgIHNjc2lfc2dsaXN0KGNtZC0+Q3VycmVudF9TQ3BudCksCisJCQkgICAgIHNjc2lfc2dfY291bnQoY21kLT5DdXJyZW50X1NDcG50KSwKKwkJCSAgICAgY21kLT5DdXJyZW50X1NDcG50LT5zY19kYXRhX2RpcmVjdGlvbik7CiAJbGlzdF9tb3ZlX3RhaWwoJmNtZC0+bGlzdCwgJmx1LT5jbWRfb3JiX2NvbXBsZXRlZCk7CiB9CiAKQEAgLTgyMyw2ICs4MjUsMTAgQEAKICNlbmRpZgogCX0KIAorCWlmIChkbWFfZ2V0X21heF9zZWdfc2l6ZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCkgPiBTQlAyX01BWF9TRUdfU0laRSkKKwkJQlVHX09OKGRtYV9zZXRfbWF4X3NlZ19zaXplKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAorCQkJCQkgICAgU0JQMl9NQVhfU0VHX1NJWkUpKTsKKwogCS8qIFByZXZlbnQgdW5sb2FkaW5nIG9mIHRoZSAxMzk0IGhvc3QgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGhpLT5ob3N0LT5kcml2ZXItPm93bmVyKSkgewogCQlTQlAyX0VSUigiZmFpbGVkIHRvIGdldCBhIHJlZmVyZW5jZSBvbiAxMzk0IGhvc3QgZHJpdmVyIik7CkBAIC0xNDk0LDg0ICsxNTAwLDY1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNicDJfcHJlcF9jb21tYW5kX29yYl9zZyhzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiLAotCQkJCSAgICAgc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpLAotCQkJCSAgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgc2NzaV91c2Vfc2csCi0JCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgICAgdTMyIG9yYl9kaXJlY3Rpb24sCi0JCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyKQorc3RhdGljIGludCBzYnAyX3ByZXBfY29tbWFuZF9vcmJfc2coc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKKwkJCQkgICAgc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpLAorCQkJCSAgICBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNnX2NvdW50LAorCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICB1MzIgb3JiX2RpcmVjdGlvbiwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcikKIHsKLQljbWQtPmRtYV9kaXIgPSBkbWFfZGlyOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGhpLT5ob3N0LT5kZXZpY2UucGFyZW50OworCXN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlICpwdDsKKwlpbnQgaSwgbjsKKworCW4gPSBkbWFfbWFwX3NnKGRtYWRldiwgc2csIHNnX2NvdW50LCBkbWFfZGlyKTsKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2hpID0gT1JCX1NFVF9OT0RFX0lEKGhpLT5ob3N0LT5ub2RlX2lkKTsKIAlvcmItPm1pc2MgfD0gT1JCX1NFVF9ESVJFQ1RJT04ob3JiX2RpcmVjdGlvbik7CiAKIAkvKiBzcGVjaWFsIGNhc2UgaWYgb25seSBvbmUgZWxlbWVudCAoYW5kIGxlc3MgdGhhbiA2NEtCIGluIHNpemUpICovCi0JaWYgKHNjc2lfdXNlX3NnID09IDEgJiYgc2ctPmxlbmd0aCA8PSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCkgewotCi0JCWNtZC0+ZG1hX3NpemUgPSBzZy0+bGVuZ3RoOwotCQljbWQtPmRtYV90eXBlID0gQ01EX0RNQV9QQUdFOwotCQljbWQtPmNtZF9kbWEgPSBkbWFfbWFwX3BhZ2UoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCSAgICBzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwKLQkJCQkJICAgIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7Ci0KLQkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSBjbWQtPmNtZF9kbWE7Ci0JCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RBVEFfU0laRShjbWQtPmRtYV9zaXplKTsKLQorCWlmIChuID09IDEpIHsKKwkJb3JiLT5taXNjIHw9IE9SQl9TRVRfREFUQV9TSVpFKHNnX2RtYV9sZW4oc2cpKTsKKwkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IHNicDJfdW5yZXN0cmljdGVkX3BhZ2VfdGFibGUgKnNnX2VsZW1lbnQgPQotCQkJCQkJJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudFswXTsKLQkJdTMyIHNnX2NvdW50LCBzZ19sZW47Ci0JCWRtYV9hZGRyX3Qgc2dfYWRkcjsKLQkJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgc2csCi0JCQkJCSAgc2NzaV91c2Vfc2csIGRtYV9kaXIpOworCQlwdCA9ICZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbMF07CiAKLQkJY21kLT5kbWFfc2l6ZSA9IHNjc2lfdXNlX3NnOwotCQljbWQtPnNnZV9idWZmZXIgPSBzZzsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZG1hZGV2LCBjbWQtPnNnZV9kbWEsCisJCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKIAotCQkvKiB1c2UgcGFnZSB0YWJsZXMgKHMvZykgKi8KLQkJb3JiLT5taXNjIHw9IE9SQl9TRVRfUEFHRV9UQUJMRV9QUkVTRU5UKDB4MSk7Ci0JCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2xvID0gY21kLT5zZ2VfZG1hOwotCi0JCS8qIGxvb3AgdGhyb3VnaCBhbmQgZmlsbCBvdXQgb3VyIFNCUC0yIHBhZ2UgdGFibGVzCi0JCSAqIChhbmQgc3BsaXQgdXAgYW55dGhpbmcgdG9vIGxhcmdlKSAqLwotCQlmb3IgKGkgPSAwLCBzZ19jb3VudCA9IDA7IGkgPCBjb3VudDsgaSsrLCBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQkJCXNnX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQkJc2dfZWxlbWVudFtzZ19jb3VudF0uc2VnbWVudF9iYXNlX2xvID0gc2dfYWRkcjsKLQkJCQlpZiAoc2dfbGVuID4gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKLQkJCQkJc2dfZWxlbWVudFtzZ19jb3VudF0ubGVuZ3RoX3NlZ21lbnRfYmFzZV9oaSA9Ci0JCQkJCQlQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0xFTkdUSChTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCk7Ci0JCQkJCXNnX2FkZHIgKz0gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEg7Ci0JCQkJCXNnX2xlbiAtPSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSDsKLQkJCQl9IGVsc2UgewotCQkJCQlzZ19lbGVtZW50W3NnX2NvdW50XS5sZW5ndGhfc2VnbWVudF9iYXNlX2hpID0KLQkJCQkJCVBBR0VfVEFCTEVfU0VUX1NFR01FTlRfTEVOR1RIKHNnX2xlbik7Ci0JCQkJCXNnX2xlbiA9IDA7Ci0JCQkJfQotCQkJCXNnX2NvdW50Kys7Ci0JCQl9CisJCWZvcl9lYWNoX3NnKHNnLCBzZywgbiwgaSkgeworCQkJcHRbaV0uaGlnaCA9IGNwdV90b19iZTMyKHNnX2RtYV9sZW4oc2cpIDw8IDE2KTsKKwkJCXB0W2ldLmxvdyA9IGNwdV90b19iZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJCX0KIAotCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9EQVRBX1NJWkUoc2dfY291bnQpOworCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9QQUdFX1RBQkxFX1BSRVNFTlQoMHgxKSB8CisJCQkgICAgIE9SQl9TRVRfREFUQV9TSVpFKG4pOworCQlvcmItPmRhdGFfZGVzY3JpcHRvcl9sbyA9IGNtZC0+c2dlX2RtYTsKIAotCQlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoc2dfZWxlbWVudCwKLQkJCQkoc2l6ZW9mKHN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlKSkgKgotCQkJCXNnX2NvdW50KTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZG1hZGV2LCBjbWQtPnNnZV9kbWEsCisJCQkJCSAgIHNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAorCQkJCQkgICBETUFfVE9fREVWSUNFKTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNicDJfY3JlYXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX2x1ICpsdSwKLQkJCQkgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCi0JCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQorc3RhdGljIGludCBzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihzdHJ1Y3Qgc2JwMl9sdSAqbHUsCisJCQkJICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCisJCQkJICAgc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7Ci0Jc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpID0gbHUtPmhpOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGx1LT5oaS0+aG9zdC0+ZGV2aWNlLnBhcmVudDsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiID0gJmNtZC0+Y29tbWFuZF9vcmI7Ci0JdTMyIG9yYl9kaXJlY3Rpb247CiAJdW5zaWduZWQgaW50IHNjc2lfcmVxdWVzdF9idWZmbGVuID0gc2NzaV9idWZmbGVuKFNDcG50KTsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyID0gU0NwbnQtPnNjX2RhdGFfZGlyZWN0aW9uOworCXUzMiBvcmJfZGlyZWN0aW9uOworCWludCByZXQ7CiAKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkbWFkZXYsIGNtZC0+Y29tbWFuZF9vcmJfZG1hLAorCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOwogCS8qCiAJICogU2V0LXVwIG91ciBjb21tYW5kIE9SQi4KIAkgKgpAQCAtMTYwMiwxNSArMTU4OSwyMSBAQAogCQlvcmItPmRhdGFfZGVzY3JpcHRvcl9oaSA9IDB4MDsKIAkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSAweDA7CiAJCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RJUkVDVElPTigxKTsKLQl9IGVsc2UKLQkJc2JwMl9wcmVwX2NvbW1hbmRfb3JiX3NnKG9yYiwgaGksIGNtZCwgc2NzaV9zZ19jb3VudChTQ3BudCksCi0JCQkJCSBzY3NpX3NnbGlzdChTQ3BudCksCi0JCQkJCSBvcmJfZGlyZWN0aW9uLCBkbWFfZGlyKTsKLQorCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IHNicDJfcHJlcF9jb21tYW5kX29yYl9zZyhvcmIsIGx1LT5oaSwgY21kLAorCQkJCQkgICAgICAgc2NzaV9zZ19jb3VudChTQ3BudCksCisJCQkJCSAgICAgICBzY3NpX3NnbGlzdChTQ3BudCksCisJCQkJCSAgICAgICBvcmJfZGlyZWN0aW9uLCBkbWFfZGlyKTsKKwl9CiAJc2JwMnV0aWxfY3B1X3RvX2JlMzJfYnVmZmVyKG9yYiwgc2l6ZW9mKCpvcmIpKTsKIAogCW1lbXNldChvcmItPmNkYiwgMCwgc2l6ZW9mKG9yYi0+Y2RiKSk7CiAJbWVtY3B5KG9yYi0+Y2RiLCBTQ3BudC0+Y21uZCwgU0NwbnQtPmNtZF9sZW4pOworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNicDJfbGlua19vcmJfY29tbWFuZChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCkBAIC0xNjI0LDE0ICsxNjE3LDYgQEAKIAlzaXplX3QgbGVuZ3RoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkgICBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAotCQkJCSAgIERNQV9UT19ERVZJQ0UpOwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCi0JCQkJICAgc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJICAgRE1BX1RPX0RFVklDRSk7Ci0KIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmV2aW91cyBvcmJzIHRvIHVzZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZsdS0+Y21kX29yYl9sb2NrLCBmbGFncyk7CiAJbGFzdF9vcmIgPSBsdS0+bGFzdF9vcmI7CkBAIC0xNjk5LDkgKzE2ODQsMTAgQEAKIAlpZiAoIWNtZCkKIAkJcmV0dXJuIC1FSU87CiAKLQlzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihsdSwgY21kLCBTQ3BudCk7Ci0Jc2JwMl9saW5rX29yYl9jb21tYW5kKGx1LCBjbWQpOworCWlmIChzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihsdSwgY21kLCBTQ3BudCkpCisJCXJldHVybiAtRU5PTUVNOwogCisJc2JwMl9saW5rX29yYl9jb21tYW5kKGx1LCBjbWQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzg5LDEzICsxNzc1LDYgQEAKIAllbHNlCiAJCWNtZCA9IHNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3Jfb3JiKGx1LCBzYi0+T1JCX29mZnNldF9sbyk7CiAJaWYgKGNtZCkgewotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5zZ2VfZG1hLAotCQkJCQlzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKLQkJCQkJRE1BX1RPX0RFVklDRSk7CiAJCS8qIEdyYWIgU0NTSSBjb21tYW5kIHBvaW50ZXJzIGFuZCBjaGVjayBzdGF0dXMuICovCiAJCS8qCiAJCSAqIEZJWE1FOiBJZiB0aGUgc3JjIGZpZWxkIGluIHRoZSBzdGF0dXMgaXMgMSwgdGhlIE9SQiBETUEgbXVzdApAQCAtMTkxMiw3ICsxODkxLDYgQEAKIAogc3RhdGljIHZvaWQgc2JwMnNjc2lfY29tcGxldGVfYWxsX2NvbW1hbmRzKHN0cnVjdCBzYnAyX2x1ICpsdSwgdTMyIHN0YXR1cykKIHsKLQlzdHJ1Y3Qgc2JwMl9md2hvc3RfaW5mbyAqaGkgPSBsdS0+aGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGg7CiAJc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5MjEsMTMgKzE4OTksNiBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbHUtPmNtZF9vcmJfaW51c2UpKSB7CiAJCWxoID0gbHUtPmNtZF9vcmJfaW51c2UubmV4dDsKIAkJY21kID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvLCBsaXN0KTsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJICAgICAgICBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCi0JCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKIAkJc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChsdSwgY21kKTsKIAkJaWYgKGNtZC0+Q3VycmVudF9TQ3BudCkgewogCQkJY21kLT5DdXJyZW50X1NDcG50LT5yZXN1bHQgPSBzdGF0dXMgPDwgMTY7CkBAIC0yMDMzLDYgKzIwMDQsOCBAQAogCQlzZGV2LT5zdGFydF9zdG9wX3B3cl9jb25kID0gMTsKIAlpZiAobHUtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TKQogCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CisKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBTQlAyX01BWF9TRUdfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNDksNyArMjAyMiw2IEBACiBzdGF0aWMgaW50IHNicDJzY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCXN0cnVjdCBzYnAyX2x1ICpsdSA9IChzdHJ1Y3Qgc2JwMl9sdSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwotCXN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSA9IGx1LT5oaTsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMDYzLDE0ICsyMDM1LDYgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmx1LT5jbWRfb3JiX2xvY2ssIGZsYWdzKTsKIAkJY21kID0gc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9TQ3BudChsdSwgU0NwbnQpOwogCQlpZiAoY21kKSB7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCWNtZC0+c2dlX2RtYSwKLQkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChsdSwgY21kKTsKIAkJCWlmIChjbWQtPkN1cnJlbnRfU0NwbnQpIHsKIAkJCQljbWQtPkN1cnJlbnRfU0NwbnQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKaW5kZXggODc1NDI4Yi4uYzUwMzZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKQEAgLTEzOSwxMyArMTM5LDEwIEBACiAJdTMyIHN0YXR1c19maWZvX2xvOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0JBU0VfSEkodikJKCh2KSAmIDB4ZmZmZikKLSNkZWZpbmUgUEFHRV9UQUJMRV9TRVRfU0VHTUVOVF9MRU5HVEgodikJKCgodikgJiAweGZmZmYpIDw8IDE2KQotCiBzdHJ1Y3Qgc2JwMl91bnJlc3RyaWN0ZWRfcGFnZV90YWJsZSB7Ci0JdTMyIGxlbmd0aF9zZWdtZW50X2Jhc2VfaGk7Ci0JdTMyIHNlZ21lbnRfYmFzZV9sbzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX19iZTMyIGhpZ2g7CisJX19iZTMyIGxvdzsKK307CiAKICNkZWZpbmUgUkVTUF9TVEFUVVNfUkVRVUVTVF9DT01QTEVURQkJMHgwCiAjZGVmaW5lIFJFU1BfU1RBVFVTX1RSQU5TUE9SVF9GQUlMVVJFCQkweDEKQEAgLTIxNiwxNSArMjEzLDE4IEBACiAjZGVmaW5lIFNCUDJfVU5JVF9TUEVDX0lEX0VOVFJZCQkJMHgwMDAwNjA5ZQogI2RlZmluZSBTQlAyX1NXX1ZFUlNJT05fRU5UUlkJCQkweDAwMDEwNDgzCiAKKy8qCisgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIHMvZyBzZWdtZW50IHNpemUgb2YgYSBGaXJlV2lyZSBjb250cm9sbGVyIGlzCisgKiB1c3VhbGx5IDB4MTAwMDAsIGJ1dCBTQlAtMiBvbmx5IGFsbG93cyAweGZmZmYuIFNpbmNlIGJ1ZmZlcnMgaGF2ZSB0bworICogYmUgcXVhZGxldC1hbGlnbmVkLCB3ZSBzZXQgdGhlIGxlbmd0aCBsaW1pdCB0byAweGZmZmYgJiB+My4KKyAqLworI2RlZmluZSBTQlAyX01BWF9TRUdfU0laRQkJCTB4ZmZmYwogCiAvKgotICogU0NTSSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICovCi0KLSNkZWZpbmUgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgJCTB4ZjAwMAotLyogVGhlcmUgaXMgbm8gcmVhbCBsaW1pdGF0aW9uIG9mIHRoZSBxdWV1ZSBkZXB0aCAoaS5lLiBsZW5ndGggb2YgdGhlIGxpbmtlZAorICogVGhlcmUgaXMgbm8gcmVhbCBsaW1pdGF0aW9uIG9mIHRoZSBxdWV1ZSBkZXB0aCAoaS5lLiBsZW5ndGggb2YgdGhlIGxpbmtlZAogICogbGlzdCBvZiBjb21tYW5kIE9SQnMpIGF0IHRoZSB0YXJnZXQuIFRoZSBjaG9zZW4gZGVwdGggaXMgbWVyZWx5IGFuCi0gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIHNicDIgZHJpdmVyLiAqLworICogaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBzYnAyIGRyaXZlci4KKyAqLwogI2RlZmluZSBTQlAyX01BWF9DTURTCQkJCTgKIAogI2RlZmluZSBTQlAyX1NDU0lfU1RBVFVTX0dPT0QJCQkweDAKQEAgLTI0MCwxMiArMjQwLDYgQEAKICAqIFJlcHJlc2VudGF0aW9ucyBvZiBjb21tYW5kcyBhbmQgZGV2aWNlcwogICovCiAKLWVudW0gc2JwMl9kbWFfdHlwZXMgewotCUNNRF9ETUFfTk9ORSwKLQlDTURfRE1BX1BBR0UsCi0JQ01EX0RNQV9TSU5HTEUKLX07Ci0KIC8qIFBlciBTQ1NJIGNvbW1hbmQgKi8KIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjU4LDExICsyNTIsNiBAQAogCXN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlCiAJCXNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbU0dfQUxMXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAJZG1hX2FkZHJfdCBzZ2VfZG1hOwotCXZvaWQgKnNnZV9idWZmZXI7Ci0JZG1hX2FkZHJfdCBjbWRfZG1hOwotCWVudW0gc2JwMl9kbWFfdHlwZXMgZG1hX3R5cGU7Ci0JdW5zaWduZWQgbG9uZyBkbWFfc2l6ZTsKLQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyOwogfTsKIAogLyogUGVyIEZpcmVXaXJlIGhvc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IDI1ZGI2ZTYuLjY3OWE5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtODkzLDcgKzg5Myw3IEBACiAJCWlmICh1bmxpa2VseShkID09IE5VTEwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKHVubGlrZWx5KCh2LmJ1ZmZlcjwwKSB8fCAodi5idWZmZXI+PWQtPm51bV9kZXNjIC0gMSkpKSB7CisJCWlmICh1bmxpa2VseSh2LmJ1ZmZlciA+PSBkLT5udW1fZGVzYyAtIDEpKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NTksNyArOTU5LDcgQEAKIAkJaWYgKHVubGlrZWx5KGQgPT0gTlVMTCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAodW5saWtlbHkoKHYuYnVmZmVyPDApIHx8ICh2LmJ1ZmZlcj5kLT5udW1fZGVzYyAtIDEpKSkgeworCQlpZiAodW5saWtlbHkodi5idWZmZXIgPiBkLT5udW1fZGVzYyAtIDEpKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogCQlkID0gZmluZF9jdHgoJmN0eC0+Y29udGV4dF9saXN0LCBPSENJX0lTT19UUkFOU01JVCwgdi5jaGFubmVsKTsKIAkJaWYgKGQgPT0gTlVMTCkgcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKCh2LmJ1ZmZlcjwwKSB8fCAodi5idWZmZXI+PWQtPm51bV9kZXNjIC0gMSkpIHsKKwkJaWYgKHYuYnVmZmVyID49IGQtPm51bV9kZXNjIC0gMSkgewogCQkJUFJJTlQoS0VSTl9FUlIsIG9oY2ktPmhvc3QtPmlkLAogCQkJICAgICAgIkJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2UiLHYuYnVmZmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAkJZCA9IGZpbmRfY3R4KCZjdHgtPmNvbnRleHRfbGlzdCwgT0hDSV9JU09fVFJBTlNNSVQsIHYuY2hhbm5lbCk7CiAJCWlmIChkID09IE5VTEwpIHJldHVybiAtRUZBVUxUOwogCi0JCWlmICgodi5idWZmZXI8MCkgfHwgKHYuYnVmZmVyPj1kLT5udW1fZGVzYy0xKSkgeworCQlpZiAodi5idWZmZXIgPj0gZC0+bnVtX2Rlc2MgLSAxKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzQxLDkgKzEzNDEsOCBAQAogCWhwc2Jfc2V0X2hvc3RpbmZvX2tleSgmdmlkZW8xMzk0X2hpZ2hsZXZlbCwgaG9zdCwgb2hjaS0+aG9zdC0+aWQpOwogCiAJbWlub3IgPSBJRUVFMTM5NF9NSU5PUl9CTE9DS19WSURFTzEzOTQgKiAxNiArIG9oY2ktPmhvc3QtPmlkOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsIG1pbm9yKSwgTlVMTCwKLQkJCSAgICAgICIlcy0lZCIsIFZJREVPMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQpOworCWRldmljZV9jcmVhdGUoaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwgTUtERVYoSUVFRTEzOTRfTUFKT1IsIG1pbm9yKSwKKwkJICAgICAgTlVMTCwgIiVzLSVkIiwgVklERU8xMzk0X0RSSVZFUl9OQU1FLCBvaGNpLT5ob3N0LT5pZCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggM2NhYjBjZS4uZjFlODJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogI2RlZmluZSBDTV9DT1VOVEVSX0FUVFIoX25hbWUsIF9pbmRleCkgXAogc3RydWN0IGNtX2NvdW50ZXJfYXR0cmlidXRlIGNtXyMjX25hbWUjI19jb3VudGVyX2F0dHIgPSB7IFwKLQkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCwgLm93bmVyID0gVEhJU19NT0RVTEUgfSwgXAorCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0IH0sIFwKIAkuaW5kZXggPSBfaW5kZXggXAogfQogCkBAIC0zNjkxLDkgKzM2OTEsOSBAQAogCWNtX2Rldi0+aWJfZGV2aWNlID0gaWJfZGV2aWNlOwogCWNtX2dldF9hY2tfZGVsYXkoY21fZGV2KTsKIAotCWNtX2Rldi0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKCZjbV9jbGFzcywgJmliX2RldmljZS0+ZGV2LAotCQkJCQkgICAgICAgTUtERVYoMCwgMCksIE5VTEwsCi0JCQkJCSAgICAgICAiJXMiLCBpYl9kZXZpY2UtPm5hbWUpOworCWNtX2Rldi0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZSgmY21fY2xhc3MsICZpYl9kZXZpY2UtPmRldiwKKwkJCQkgICAgICAgTUtERVYoMCwgMCksIE5VTEwsCisJCQkJICAgICAgICIlcyIsIGliX2RldmljZS0+bmFtZSk7CiAJaWYgKCFjbV9kZXYtPmRldmljZSkgewogCQlrZnJlZShjbV9kZXYpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCAyNjhhMmQyLi44YzQ2ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTEwMTYsOSArMTAxNiw5IEBACiAJaWYgKGNkZXZfYWRkKHBvcnQtPmNkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSwgMSkpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgIHBvcnQtPmNkZXYtPmRldiwgcG9ydCwKLQkJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CisJcG9ydC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICBwb3J0LT5jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwogCkBAIC0xMDM2LDkgKzEwMzYsOSBAQAogCWlmIChjZGV2X2FkZChwb3J0LT5zbV9jZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCiAJCWdvdG8gZXJyX3NtX2NkZXY7CiAKLQlwb3J0LT5zbV9kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgICAgIHBvcnQtPnNtX2NkZXYtPmRldiwgcG9ydCwKLQkJCQkJICAgICAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAgICAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5zbV9kZXYpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBhZWVlODU2Li5kODVhZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTc2NCwxMiArNzY0LDkgQEAKIAlpZiAoY2Rldl9hZGQodXZlcmJzX2Rldi0+Y2RldiwgSUJfVVZFUkJTX0JBU0VfREVWICsgdXZlcmJzX2Rldi0+ZGV2bnVtLCAxKSkKIAkJZ290byBlcnJfY2RldjsKIAotCXV2ZXJic19kZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1dmVyYnNfY2xhc3MsCi0JCQkJCQlkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCQl1dmVyYnNfZGV2LT5jZGV2LT5kZXYsCi0JCQkJCQl1dmVyYnNfZGV2LAotCQkJCQkJInV2ZXJicyVkIiwKLQkJCQkJCXV2ZXJic19kZXYtPmRldm51bSk7CisJdXZlcmJzX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1dmVyYnNfY2xhc3MsIGRldmljZS0+ZG1hX2RldmljZSwKKwkJCQkJdXZlcmJzX2Rldi0+Y2Rldi0+ZGV2LCB1dmVyYnNfZGV2LAorCQkJCQkidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOwogCWlmIChJU19FUlIodXZlcmJzX2Rldi0+ZGV2KSkKIAkJZ290byBlcnJfY2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCA1NmMwZWRhLi4xYWYxZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAKIAkJZ290byBlcnJfY2RldjsKIAl9CiAKLQlkZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXBhdGhfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwgbmFtZSk7CisJZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShpcGF0aF9jbGFzcywgTlVMTCwgZGV2LCBOVUxMLCBuYW1lKTsKIAogCWlmIChJU19FUlIoZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwppbmRleCA1YTFjZjI1Li4xZTViNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKQEAgLTM3OCw2ICszNzgsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CiAKKwlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKIAlpc2NzaV9ob3N0X3JlbW92ZShzaG9zdCk7CiAJaXNjc2lfaG9zdF9mcmVlKHNob3N0KTsKIH0KQEAgLTU5Nyw3ICs1OTgsNyBAQAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gSVNDU0lfTUFYX0NNRF9QRVJfTFVOLAogCS5laF9hYm9ydF9oYW5kbGVyICAgICAgID0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCi0JLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IGlzY3NpX2VoX2hvc3RfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCiAJLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZSAgICAgICAgICAgICAgPSAiaXNjc2lfaXNlciIsCiAJLnRoaXNfaWQgICAgICAgICAgICAgICAgPSAtMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAwNzhlNGVlLi4yODgwZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0yMzEsNiArMjMxLDcgQEAKIGVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSB7CiAJR0FNRVBPUlRfUkVHSVNURVJfUE9SVCwKIAlHQU1FUE9SVF9SRUdJU1RFUl9EUklWRVIsCisJR0FNRVBPUlRfQVRUQUNIX0RSSVZFUiwKIH07CiAKIHN0cnVjdCBnYW1lcG9ydF9ldmVudCB7CkBAIC0yNDUsMTEgKzI0NiwxMiBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGdhbWVwb3J0X3dhaXQpOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2FtZXBvcnRfdGFzazsKIAotc3RhdGljIHZvaWQgZ2FtZXBvcnRfcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCSAgICAgIGVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSBldmVudF90eXBlKQorc3RhdGljIGludCBnYW1lcG9ydF9xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCWVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSBldmVudF90eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CiAKQEAgLTI2OCwyNCArMjcwLDM0IEBACiAJCX0KIAl9CiAKLQlpZiAoKGV2ZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdhbWVwb3J0X2V2ZW50KSwgR0ZQX0FUT01JQykpKSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJnYW1lcG9ydDogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLCBldmVudF90eXBlKTsKLQkJCWtmcmVlKGV2ZW50KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZXZlbnQtPnR5cGUgPSBldmVudF90eXBlOwotCQlldmVudC0+b2JqZWN0ID0gb2JqZWN0OwotCQlldmVudC0+b3duZXIgPSBvd25lcjsKLQotCQlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpOwotCQl3YWtlX3VwKCZnYW1lcG9ydF93YWl0KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVwb3J0OiBOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CisJZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2ZW50KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdhbWVwb3J0OiBOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwKKwkJCWV2ZW50X3R5cGUpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZ2FtZXBvcnQ6IENhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKKwkJCWV2ZW50X3R5cGUpOworCQlrZnJlZShldmVudCk7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWV2ZW50LT50eXBlID0gZXZlbnRfdHlwZTsKKwlldmVudC0+b2JqZWN0ID0gb2JqZWN0OworCWV2ZW50LT5vd25lciA9IG93bmVyOworCisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZnYW1lcG9ydF9ldmVudF9saXN0KTsKKwl3YWtlX3VwKCZnYW1lcG9ydF93YWl0KTsKKwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9mcmVlX2V2ZW50KHN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZXZlbnQpCkBAIC0zNzgsOSArMzkwLDEwIEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgYWxsIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBzdWJtaXR0ZWQgZm9yIGEgZ2l2ZW4gZ2FtZXBvcnQgcG9ydC4KKyAqIFJlbW92ZSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgYSBnaXZlbiBvYmplY3QsCisgKiBiZSBpdCBhIGdhbWVwb3J0IHBvcnQgb3IgYSBkcml2ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGdhbWVwb3J0X3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQorc3RhdGljIHZvaWQgZ2FtZXBvcnRfcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHZvaWQgKm9iamVjdCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwpAQCAtMzkwLDcgKzQwMyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpIHsKIAkJZXZlbnQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7Ci0JCWlmIChldmVudC0+b2JqZWN0ID09IGdhbWVwb3J0KSB7CisJCWlmIChldmVudC0+b2JqZWN0ID09IG9iamVjdCkgewogCQkJbGlzdF9kZWxfaW5pdChub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZXZlbnQpOwogCQl9CkBAIC03MDUsMTAgKzcxOCw0MCBAQAogCQkJZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOwogfQogCi12b2lkIF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCitpbnQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQljb25zdCBjaGFyICptb2RfbmFtZSkKIHsKKwlpbnQgZXJyb3I7CisKIAlkcnYtPmRyaXZlci5idXMgPSAmZ2FtZXBvcnRfYnVzOwotCWdhbWVwb3J0X3F1ZXVlX2V2ZW50KGRydiwgb3duZXIsIEdBTUVQT1JUX1JFR0lTVEVSX0RSSVZFUik7CisJZHJ2LT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwlkcnYtPmRyaXZlci5tb2RfbmFtZSA9IG1vZF9uYW1lOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGF1dG9tYXRpYyBiaW5kaW5nIGJlY2F1c2UgcHJvYmluZworCSAqIHRha2VzIGxvbmcgdGltZSBhbmQgd2UgYXJlIGJldHRlciBvZmYgZG9pbmcgaXQgaW4ga2dhbWVwb3J0ZAorCSAqLworCWRydi0+aWdub3JlID0gMTsKKworCWVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdhbWVwb3J0OiBkcml2ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKgorCSAqIFJlc2V0IGlnbm9yZSBmbGFnIGFuZCBsZXQga2dhbWVwb3J0ZCBiaW5kIHRoZSBkcml2ZXIgdG8gZnJlZSBwb3J0cworCSAqLworCWRydi0+aWdub3JlID0gMDsKKwllcnJvciA9IGdhbWVwb3J0X3F1ZXVlX2V2ZW50KGRydiwgTlVMTCwgR0FNRVBPUlRfQVRUQUNIX0RSSVZFUik7CisJaWYgKGVycm9yKSB7CisJCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpCkBAIC03MTYsNyArNzU5LDkgQEAKIAlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0OwogCiAJbXV0ZXhfbG9jaygmZ2FtZXBvcnRfbXV0ZXgpOworCiAJZHJ2LT5pZ25vcmUgPSAxOwkvKiBzbyBnYW1lcG9ydF9maW5kX2RyaXZlciBpZ25vcmVzIGl0ICovCisJZ2FtZXBvcnRfcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKGRydik7CiAKIHN0YXJ0X292ZXI6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShnYW1lcG9ydCwgJmdhbWVwb3J0X2xpc3QsIG5vZGUpIHsKQEAgLTcyOSw2ICs3NzQsNyBAQAogCX0KIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisKIAltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKaW5kZXggOTI0OThkNC4uNjQ4OWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCkBAIC00MTQsOCArNDE0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYTNkX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmEzZF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmEzZF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYTNkX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCmluZGV4IGQxY2E4YTEuLjg5YzRjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYwpAQCAtNTcyLDggKzU3Miw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFkaV9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhZGlfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhZGlfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFkaV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYwppbmRleCA3MDhjNWFlLi4zNTZiM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKQEAgLTc2MSw5ICs3NjEsNyBAQAogc3RhdGljIGludCBfX2luaXQgYW5hbG9nX2luaXQodm9pZCkKIHsKIAlhbmFsb2dfcGFyc2Vfb3B0aW9ucygpOwotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmYW5hbG9nX2Rydik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhbmFsb2dfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFuYWxvZ19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKaW5kZXggNjM5Yjk3NS4uMzQ5N2I4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYwpAQCAtMjYzLDggKzI2Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNvYnJhX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmNvYnJhX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmY29icmFfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvYnJhX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKaW5kZXggY2I2ZWVmMS4uNjdjMjA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKQEAgLTM3NSw4ICszNzUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZjJrX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdmMmtfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZnZjJrX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZjJrX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKaW5kZXggNjg0ZTA3Yy4uZmM1NTg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKQEAgLTQyNiw4ICs0MjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBncmlwX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZncmlwX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncmlwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcF9tcC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKaW5kZXggODI3OTQ4MS4uMmQ0N2JhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKQEAgLTY4OSw4ICs2ODksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBncmlwX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZncmlwX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncmlwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCmluZGV4IDI1ZWMzZmEuLjQwNThkNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYwpAQCAtMjgzLDggKzI4Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGd1aWxsZW1vdF9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZndWlsbGVtb3RfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZndWlsbGVtb3RfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGd1aWxsZW1vdF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtZmYuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCmluZGV4IDc4MzliN2IuLjBkZTlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCkBAIC0xOTcsMTMgKzE5NywxNiBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhbiBjb25kaXRpb24KICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwKKwkJCQkgICBzdHJ1Y3QgZmZfZWZmZWN0ICpuZXcpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAobmV3LT50eXBlICE9IEZGX1NQUklORyAmJiBuZXctPnR5cGUgIT0gRkZfRlJJQ1RJT04pIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfY29uZGl0aW9uX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjIsMTAgKzIyNSwxMyBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhIG1hZ25pdHVkZQogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfbWFnbml0dWRlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlpZiAoZWZmZWN0LT50eXBlICE9IEZGX0NPTlNUQU5UKSB7Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzYsNyArMjQyLDggQEAKICAqIEFuYWx5c2UgdGhlIGNoYW5nZXMgaW4gYW4gZWZmZWN0LCBhbmQgdGVsbCBpZiB3ZSBuZWVkIHRvIHNlbmQgYW4gZW52ZWxvcGUKICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSwgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CiAJY2FzZSBGRl9DT05TVEFOVDoKQEAgLTI1Niw3ICsyNjMsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2NiwxMCArMjc0LDEyIEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGEgcGVyaW9kaWMKICAqIHBhcmFtZXRlciBlZmZlY3QKICAqLwotc3RhdGljIGludCBuZWVkX3BlcmlvZF9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9wZXJpb2RfbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLCBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJc3RydWN0IGZmX2VmZmVjdCAqbmV3KQogewogCWlmIChuZXctPnR5cGUgIT0gRkZfUEVSSU9ESUMpIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfcGVyaW9kX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAob2xkLT51LnBlcmlvZGljLnBlcmlvZCAhPSBuZXctPnUucGVyaW9kaWMucGVyaW9kCkBAIC0zNTUsNyArMzY1LDcgQEAKIAlpbnQgcGFyYW0yX2VyciA9IDE7CiAJaW50IGNvcmVfZXJyID0gMDsKIAotCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMV9lcnIgPSBtYWtlX3BlcmlvZF9tb2RpZmllcihpZm9yY2UsIG1vZDFfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5wZXJpb2RpYy5tYWduaXR1ZGUsIGVmZmVjdC0+dS5wZXJpb2RpYy5vZmZzZXQsCkBAIC0zNjUsNyArMzc1LDcgQEAKIAkJc2V0X2JpdChGRl9NT0QxX0lTX1VTRUQsIGNvcmVfZWZmZWN0LT5mbGFncyk7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9lbnZlbG9wZV9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMl9lcnIgPSBtYWtlX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgbW9kMl9jaHVuaywKIAkJCW9sZCAhPU5VTEwsCiAJCQllZmZlY3QtPnUucGVyaW9kaWMuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQyNSw3ICs0MzUsNyBAQAogCWludCBwYXJhbTJfZXJyID0gMTsKIAlpbnQgY29yZV9lcnIgPSAwOwogCi0JaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0xX2VyciA9IG1ha2VfbWFnbml0dWRlX21vZGlmaWVyKGlmb3JjZSwgbW9kMV9jaHVuaywKIAkJCW9sZCAhPSBOVUxMLAogCQkJZWZmZWN0LT51LmNvbnN0YW50LmxldmVsKTsKQEAgLTQzNCw3ICs0NDQsNyBAQAogCQlzZXRfYml0KEZGX01PRDFfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0yX2VyciA9IG1ha2VfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QyX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uc3RhbnQuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQ4Nyw3ICs0OTcsNyBAQAogCQlkZWZhdWx0OiByZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW1fZXJyID0gbWFrZV9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBtb2QxX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uZGl0aW9uWzBdLnJpZ2h0X3NhdHVyYXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCA2MWVlNmUzLi5iYWFiZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTIxOCw3ICsyMTgsOSBAQAogCQkvKiBDaGVjazogbm8gZWZmZWN0cyBzaG91bGQgYmUgcHJlc2VudCBpbiBtZW1vcnkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGRldi0+ZmYtPm1heF9lZmZlY3RzOyBpKyspIHsKIAkJCWlmICh0ZXN0X2JpdChGRl9DT1JFX0lTX1VTRUQsIGlmb3JjZS0+Y29yZV9lZmZlY3RzW2ldLmZsYWdzKSkgewotCQkJCXdhcm4oImlmb3JjZV9yZWxlYXNlOiBEZXZpY2Ugc3RpbGwgb3ducyBlZmZlY3RzIik7CisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkiJXM6IERldmljZSBzdGlsbCBvd25zIGVmZmVjdHNcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzM1LDI2ICszMzcsMjYgQEAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk0iKSkKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTSIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBNXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiUCIpKQogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgUCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBQXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiQiIpKQogCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gKGlmb3JjZS0+ZWRhdGFbMl0gPDwgOCkgfCBpZm9yY2UtPmVkYXRhWzFdOwogCWVsc2UKLQkJd2FybigiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IEIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgQlxuIik7CiAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk4iKSkKIAkJZmZfZWZmZWN0cyA9IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTiIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBOXG4iKTsKIAogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN0b3JlIG1vcmUgZWZmZWN0cyB0aGFuIHRoZSBkcml2ZXIgY2FuIHJlYWxseSBoYW5kbGUgKi8KIAlpZiAoZmZfZWZmZWN0cyA+IElGT1JDRV9FRkZFQ1RTX01BWCkgewotCQl3YXJuKCJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpIiwKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpXG4iLAogCQkgICAgICAgSUZPUkNFX0VGRkVDVFNfTUFYLCBmZl9lZmZlY3RzKTsKIAkJZmZfZWZmZWN0cyA9IElGT1JDRV9FRkZFQ1RTX01BWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYwppbmRleCAwMTViNTBhLi5hMTdiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKQEAgLTY1LDcgKzY1LDggQEAKIAogCiAJaWYgKENJUkNfU1BBQ0UoaGVhZCwgdGFpbCwgWE1JVF9TSVpFKSA8IG4rMikgewotCQl3YXJuKCJub3QgZW5vdWdoIHNwYWNlIGluIHhtaXQgYnVmZmVyIHRvIHNlbmQgbmV3IHBhY2tldCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAibm90IGVub3VnaCBzcGFjZSBpbiB4bWl0IGJ1ZmZlciB0byBzZW5kIG5ldyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZm9yY2UtPnhtaXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3YXJuKCJ1bnVzZWQgZWZmZWN0ICUwNHggdXBkYXRlZCAhISEiLCBhZGRyKTsKKwlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVudXNlZCBlZmZlY3QgJTA0eCB1cGRhdGVkICEhIVxuIiwgYWRkcik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTksNyArMTYwLDggQEAKIAlzdGF0aWMgaW50IGJlaW5nX3VzZWQgPSAwOwogCiAJaWYgKGJlaW5nX3VzZWQpCi0JCXdhcm4oInJlLWVudHJhbnQgY2FsbCB0byBpZm9yY2VfcHJvY2VzcyAlZCIsIGJlaW5nX3VzZWQpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAicmUtZW50cmFudCBjYWxsIHRvIGlmb3JjZV9wcm9jZXNzICVkXG4iLCBiZWluZ191c2VkKTsKIAliZWluZ191c2VkKys7CiAKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDg1MWNjNDA4Li5mODMxODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlpZiAoIChuPXVzYl9zdWJtaXRfdXJiKGlmb3JjZS0+b3V0LCBHRlBfQVRPTUlDKSkgKSB7CiAJCWNsZWFyX2JpdChJRk9SQ0VfWE1JVF9SVU5OSU5HLCBpZm9yY2UtPnhtaXRfZmxhZ3MpOwotCQl3YXJuKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcbiIsIG4pOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxuIiwgbik7CiAJfQogCiAJLyogVGhlIElGT1JDRV9YTUlUX1JVTk5JTkcgYml0IGlzIG5vdCBjbGVhcmVkIGhlcmUuIFRoYXQncyBpbnRlbmRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwppbmRleCA4YzMyOTBiLi4yNDc4Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCkBAIC0zMTcsOCArMzE3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW50ZXJhY3RfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmaW50ZXJhY3RfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZpbnRlcmFjdF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJhY3RfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9qb3lkdW1wLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYwppbmRleCAyYTFiODJjLi5jZDg5NGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYwpAQCAtMTYxLDggKzE2MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGpveWR1bXBfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmam95ZHVtcF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmpveWR1bXBfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGpveWR1bXBfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCA3YjQ4NjVmLi5jYTEzYTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtODE4LDggKzgxOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN3X2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnN3X2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmc3dfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN3X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdG1kYy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKaW5kZXggNjBjMzdiYy4uZDZjNjA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKQEAgLTQzOCw4ICs0MzgsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0bWRjX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnRtZGNfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZ0bWRjX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0bWRjX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggNjc5MWJlOC4uYjg2OGI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTQ1NSwxMCArNDU1LDEwIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCX0KIH0KIApAQCAtOTExLDcgKzkxMSw3IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggYjFjZTEwZi4uMjIwMTZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtODM0LDEwICs4MzQsMTAgQEAKIH0KIAogLyoKLSAqIE1vc3Qgc3BlY2lhbCBrZXlzIChGbitGPykgb24gRGVsbCBMYXRpdHVkZXMgZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UKKyAqIE1vc3Qgc3BlY2lhbCBrZXlzIChGbitGPykgb24gRGVsbCBsYXB0b3BzIGRvIG5vdCBnZW5lcmF0ZSByZWxlYXNlCiAgKiBldmVudHMgc28gd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGF0a2JkX2xhdGl0dWRlX2tleW1hcF9maXh1cChzdHJ1Y3QgYXRrYmQgKmF0a2JkKQorc3RhdGljIHZvaWQgYXRrYmRfZGVsbF9sYXB0b3Bfa2V5bWFwX2ZpeHVwKHN0cnVjdCBhdGtiZCAqYXRrYmQpCiB7CiAJY29uc3QgdW5zaWduZWQgaW50IGZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKIAkJMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4ZiwgMHg5MywKQEAgLTEyMDcsMTUgKzEyMDcsMTMgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9leHRyYSwgb2xkX3NldDsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+ZXh0cmEgIT0gdmFsdWUpIHsKQEAgLTEyNjQsMTIgKzEyNjIsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9zY3JvbGw7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNjcm9sbCAhPSB2YWx1ZSkgewpAQCAtMTMxMCwxNSArMTMwNiwxMyBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgb2xkX3NldCwgb2xkX2V4dHJhOwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8ICh2YWx1ZSAhPSAyICYmIHZhbHVlICE9IDMpKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8ICh2YWx1ZSAhPSAyICYmIHZhbHVlICE9IDMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c2V0ICE9IHZhbHVlKSB7CkBAIC0xMzYxLDE1ICsxMzU1LDEzIEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBvbGRfc29mdHJlcGVhdCwgb2xkX3NvZnRyYXc7CiAKIAlpZiAoIWF0a2JkLT53cml0ZSkKIAkJcmV0dXJuIC1FSU87CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNvZnRyZXBlYXQgIT0gdmFsdWUpIHsKQEAgLTE0MTMsMTIgKzE0MDUsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9zb2Z0cmF3OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0a2JkLT5zb2Z0cmF3ICE9IHZhbHVlKSB7CkBAIC0xNDYxLDEzICsxNDUxLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhdGtiZF9kbWlfcXVpcmtfdGFibGVbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLmlkZW50ID0gIkRlbGwgTGF0aXR1ZGUgc2VyaWVzIiwKKwkJLmlkZW50ID0gIkRlbGwgTGFwdG9wIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGF0aXR1ZGUiKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLCAvKiBQb3J0YWJsZSAqLwogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9maXh1cCwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfbGF0aXR1ZGVfa2V5bWFwX2ZpeHVwLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9kZWxsX2xhcHRvcF9rZXltYXBfZml4dXAsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCAyMTMzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKaW5kZXggZTM0OGNmYy4uMTkyODQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKQEAgLTgsNyArOCw3IEBACiAgKgogICoKICAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgpAQCAtODEsNiArODEsOSBAQAogCXVuc2lnbmVkIHNob3J0ICprZXljb2RlOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXVuc2lnbmVkIGludCBrZXl1cF90ZXN0X2ppZmZpZXM7CisJdW5zaWduZWQgc2hvcnQga3BhZF9tc2VsOworCXVuc2lnbmVkIHNob3J0IGtwYWRfcHJlc2NhbGU7CisJdW5zaWduZWQgc2hvcnQga3BhZF9jdGw7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBiZmluX2twYWRfZmluZF9rZXkoc3RydWN0IGJmNTR4X2twYWQgKmJmNTR4X2twYWQsCkBAIC0zNjAsNiArMzYzLDEwIEBACiB7CiAJc3RydWN0IGJmNTR4X2twYWQgKmJmNTR4X2twYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWJmNTR4X2twYWQtPmtwYWRfbXNlbCA9IGJmaW5fcmVhZF9LUEFEX01TRUwoKTsKKwliZjU0eF9rcGFkLT5rcGFkX3ByZXNjYWxlID0gYmZpbl9yZWFkX0tQQURfUFJFU0NBTEUoKTsKKwliZjU0eF9rcGFkLT5rcGFkX2N0bCA9IGJmaW5fcmVhZF9LUEFEX0NUTCgpOworCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQogCQllbmFibGVfaXJxX3dha2UoYmY1NHhfa3BhZC0+aXJxKTsKIApAQCAtMzcwLDYgKzM3NywxMCBAQAogewogCXN0cnVjdCBiZjU0eF9rcGFkICpiZjU0eF9rcGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwliZmluX3dyaXRlX0tQQURfTVNFTChiZjU0eF9rcGFkLT5rcGFkX21zZWwpOworCWJmaW5fd3JpdGVfS1BBRF9QUkVTQ0FMRShiZjU0eF9rcGFkLT5rcGFkX3ByZXNjYWxlKTsKKwliZmluX3dyaXRlX0tQQURfQ1RMKGJmNTR4X2twYWQtPmtwYWRfY3RsKTsKKwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShiZjU0eF9rcGFkLT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCBlYzk2YjM2Li4wNWYzZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTM2LDkgKzM2LDEwIEBACiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgZGF0YVswXTsKIH07CiAKLXN0YXRpYyB2b2lkIGdwaW9fa2V5c19yZXBvcnRfZXZlbnQoc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiwKLQkJCQkgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19yZXBvcnRfZXZlbnQoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhKQogeworCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSBiZGF0YS0+YnV0dG9uOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gYmRhdGEtPmlucHV0OwogCXVuc2lnbmVkIGludCB0eXBlID0gYnV0dG9uLT50eXBlID86IEVWX0tFWTsKIAlpbnQgc3RhdGUgPSAoZ3Bpb19nZXRfdmFsdWUoYnV0dG9uLT5ncGlvKSA/IDEgOiAwKSBeIGJ1dHRvbi0+YWN0aXZlX2xvdzsKIApAQCAtNTAsMzQgKzUxLDIzIEBACiB7CiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmRhdGEgPSAoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKilfZGF0YTsKIAotCWdwaW9fa2V5c19yZXBvcnRfZXZlbnQoZGF0YS0+YnV0dG9uLCBkYXRhLT5pbnB1dCk7CisJZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChkYXRhKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGdwaW9fa2V5c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBncGlvX2tleXNfZHJ2ZGF0YSAqZGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaTsKKwlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9IGJkYXRhLT5idXR0b247CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5idXR0b25zOyBpKyspIHsKLQkJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9ICZwZGF0YS0+YnV0dG9uc1tpXTsKKwlCVUdfT04oaXJxICE9IGdwaW9fdG9faXJxKGJ1dHRvbi0+Z3BpbykpOwogCi0JCWlmIChpcnEgPT0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKSkgewotCQkJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gJmRkYXRhLT5kYXRhW2ldOworCWlmIChidXR0b24tPmRlYm91bmNlX2ludGVydmFsKQorCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKKwllbHNlCisJCWdwaW9fa2V5c19yZXBvcnRfZXZlbnQoYmRhdGEpOwogCi0JCQlpZiAoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkKLQkJCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCQkJICBqaWZmaWVzICsKLQkJCQkJICBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKLQkJCWVsc2UKLQkJCQlncGlvX2tleXNfcmVwb3J0X2V2ZW50KGJ1dHRvbiwgYmRhdGEtPmlucHV0KTsKLQotCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQl9Ci0JfQotCi0JcmV0dXJuIElSUV9OT05FOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZ3Bpb19rZXlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNTEsNyArMTQxLDcgQEAKIAkJCQkgICAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8CiAJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCSAgICBidXR0b24tPmRlc2MgPyBidXR0b24tPmRlc2MgOiAiZ3Bpb19rZXlzIiwKLQkJCQkgICAgcGRldik7CisJCQkJICAgIGJkYXRhKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlwcl9lcnIoImdwaW8ta2V5czogVW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCiAJCQkJaXJxLCBlcnJvcik7CkBAIC0xNzgsNyArMTY4LDcgQEAKIAogIGZhaWwyOgogCXdoaWxlICgtLWkgPj0gMCkgewotCQlmcmVlX2lycShncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKSwgcGRldik7CisJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCAmZGRhdGEtPmRhdGFbaV0pOwogCQlpZiAocGRhdGEtPmJ1dHRvbnNbaV0uZGVib3VuY2VfaW50ZXJ2YWwpCiAJCQlkZWxfdGltZXJfc3luYygmZGRhdGEtPmRhdGFbaV0udGltZXIpOwogCQlncGlvX2ZyZWUocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CkBAIC0yMDMsNyArMTkzLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bmJ1dHRvbnM7IGkrKykgewogCQlpbnQgaXJxID0gZ3Bpb190b19pcnEocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7Ci0JCWZyZWVfaXJxKGlycSwgcGRldik7CisJCWZyZWVfaXJxKGlycSwgJmRkYXRhLT5kYXRhW2ldKTsKIAkJaWYgKHBkYXRhLT5idXR0b25zW2ldLmRlYm91bmNlX2ludGVydmFsKQogCQkJZGVsX3RpbWVyX3N5bmMoJmRkYXRhLT5kYXRhW2ldLnRpbWVyKTsKIAkJZ3Bpb19mcmVlKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCmluZGV4IGRjZWE4N2EuLjY5ZTY3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZGVib3VuY2U7CiB9OwogCi1ERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoa3BfdGFza2xldCwgb21hcF9rcF90YXNrbGV0LCAwKTsKK3N0YXRpYyBERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoa3BfdGFza2xldCwgb21hcF9rcF90YXNrbGV0LCAwKTsKIAogc3RhdGljIGludCAqa2V5bWFwOwogc3RhdGljIHVuc2lnbmVkIGludCAqcm93X2dwaW9zOwpAQCAtNzIsMTIgKzcyLDkgQEAKIHN0YXRpYyB2b2lkIHNldF9jb2xfZ3Bpb192YWwoc3RydWN0IG9tYXBfa3AgKm9tYXBfa3AsIHU4IHZhbHVlKQogewogCWludCBjb2w7Ci0JZm9yIChjb2wgPSAwOyBjb2wgPCBvbWFwX2twLT5jb2xzOyBjb2wrKykgewotCQlpZiAodmFsdWUgJiAoMSA8PCBjb2wpKQotCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGNvbF9ncGlvc1tjb2xdLCAxKTsKLQkJZWxzZQotCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGNvbF9ncGlvc1tjb2xdLCAwKTsKLQl9CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IG9tYXBfa3AtPmNvbHM7IGNvbCsrKQorCQlncGlvX3NldF92YWx1ZShjb2xfZ3Bpb3NbY29sXSwgdmFsdWUgJiAoMSA8PCBjb2wpKTsKIH0KIAogc3RhdGljIHU4IGdldF9yb3dfZ3Bpb192YWwoc3RydWN0IG9tYXBfa3AgKm9tYXBfa3ApCkBAIC04Niw3ICs4Myw3IEBACiAJdTggdmFsdWUgPSAwOwogCiAJZm9yIChyb3cgPSAwOyByb3cgPCBvbWFwX2twLT5yb3dzOyByb3crKykgewotCQlpZiAob21hcF9nZXRfZ3Bpb19kYXRhaW4ocm93X2dwaW9zW3Jvd10pKQorCQlpZiAoZ3Bpb19nZXRfdmFsdWUocm93X2dwaW9zW3Jvd10pKQogCQkJdmFsdWUgfD0gKDEgPDwgcm93KTsKIAl9CiAJcmV0dXJuIHZhbHVlOwpAQCAtMzMzLDIzICszMzAsMjMgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJLyogQ29sczogb3V0cHV0cyAqLwogCQlmb3IgKGNvbF9pZHggPSAwOyBjb2xfaWR4IDwgb21hcF9rcC0+Y29sczsgY29sX2lkeCsrKSB7Ci0JCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oY29sX2dwaW9zW2NvbF9pZHhdKSA8IDApIHsKKwkJCWlmIChncGlvX3JlcXVlc3QoY29sX2dwaW9zW2NvbF9pZHhdLCAib21hcF9rcF9jb2wiKSA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IgogCQkJCSAgICAgICAiR1BJTyVkIGZvciBrZXlwYWRcbiIsCiAJCQkJICAgICAgIGNvbF9ncGlvc1tjb2xfaWR4XSk7CiAJCQkJZ290byBlcnIxOwogCQkJfQotCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oY29sX2dwaW9zW2NvbF9pZHhdLCAwKTsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjb2xfZ3Bpb3NbY29sX2lkeF0sIDApOwogCQl9CiAJCS8qIFJvd3M6IGlucHV0cyAqLwogCQlmb3IgKHJvd19pZHggPSAwOyByb3dfaWR4IDwgb21hcF9rcC0+cm93czsgcm93X2lkeCsrKSB7Ci0JCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8ocm93X2dwaW9zW3Jvd19pZHhdKSA8IDApIHsKKwkJCWlmIChncGlvX3JlcXVlc3Qocm93X2dwaW9zW3Jvd19pZHhdLCAib21hcF9rcF9yb3ciKSA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IgogCQkJCSAgICAgICAiR1BJTyVkIGZvciBrZXlwYWRcbiIsCiAJCQkJICAgICAgIHJvd19ncGlvc1tyb3dfaWR4XSk7CiAJCQkJZ290byBlcnIyOwogCQkJfQotCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24ocm93X2dwaW9zW3Jvd19pZHhdLCAxKTsKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KHJvd19ncGlvc1tyb3dfaWR4XSk7CiAJCX0KIAl9IGVsc2UgewogCQljb2xfaWR4ID0gMDsKQEAgLTQxOCwxMCArNDE1LDEwIEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGUpOwogZXJyMjoKIAlmb3IgKGkgPSByb3dfaWR4IC0gMTsgaSA+PTA7IGktLSkKLQkJb21hcF9mcmVlX2dwaW8ocm93X2dwaW9zW2ldKTsKKwkJZ3Bpb19mcmVlKHJvd19ncGlvc1tpXSk7CiBlcnIxOgogCWZvciAoaSA9IGNvbF9pZHggLSAxOyBpID49MDsgaS0tKQotCQlvbWFwX2ZyZWVfZ3Bpbyhjb2xfZ3Bpb3NbaV0pOworCQlncGlvX2ZyZWUoY29sX2dwaW9zW2ldKTsKIAogCWtmcmVlKG9tYXBfa3ApOwogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC00MzgsOSArNDM1LDkgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5jb2xzOyBpKyspCi0JCQlvbWFwX2ZyZWVfZ3Bpbyhjb2xfZ3Bpb3NbaV0pOworCQkJZ3Bpb19mcmVlKGNvbF9ncGlvc1tpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5yb3dzOyBpKyspIHsKLQkJCW9tYXBfZnJlZV9ncGlvKHJvd19ncGlvc1tpXSk7CisJCQlncGlvX2ZyZWUocm93X2dwaW9zW2ldKTsKIAkJCWZyZWVfaXJxKE9NQVBfR1BJT19JUlEocm93X2dwaW9zW2ldKSwgMCk7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCBlOTliNzg4Li4xOTkwNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMTgwLDYgKzE4MCwxOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgeWVhbGluay4KIAorY29uZmlnIElOUFVUX0NNMTA5CisJdHJpc3RhdGUgIkMtTWVkaWEgQ00xMDkgVVNCIEkvTyBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJc2VsZWN0IFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGtleWJvYXJkIGFuZCBidXp6ZXIgZnVuY3Rpb25zIG9mIHRoZQorCSAgQy1NZWRpYSBDTTEwOSB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljCisJICB1c2Igc291bmQgZHJpdmVyLCBzbyB5b3UgbWlnaHQgd2FudCB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBjbTEwOS4KKwogY29uZmlnIElOUFVUX1VJTlBVVAogCXRyaXN0YXRlICJVc2VyIGxldmVsIGRyaXZlciBzdXBwb3J0IgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQppbmRleCBmNDgwMDliLi5kN2RiMmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUpCSs9IGtleXNwYW5fcmVtb3RlLm8KIG9iai0kKENPTkZJR19JTlBVVF9QT1dFUk1BVEUpCQkrPSBwb3dlcm1hdGUubwogb2JqLSQoQ09ORklHX0lOUFVUX1lFQUxJTkspCQkrPSB5ZWFsaW5rLm8KK29iai0kKENPTkZJR19JTlBVVF9DTTEwOSkJCSs9IGNtMTA5Lm8KIG9iai0kKENPTkZJR19IUF9TRENfUlRDKQkJKz0gaHBfc2RjX3J0Yy5vCiBvYmotJChDT05GSUdfSU5QVVRfVUlOUFVUKQkJKz0gdWlucHV0Lm8KIG9iai0kKENPTkZJR19JTlBVVF9BUEFORUwpCQkrPSBhcGFuZWwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKaW5kZXggZGViZmMxYS4uZTI5MGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCkBAIC0yODUsNyArMjg1LDYgQEAKIH07CiAKIC8qIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcAkJKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9vcGVuCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOwogc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9jbG9zZQkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9zZW5kcGFja2V0CShzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CkBAIC0zMDcsMTUgKzMwNiwxNiBAQAogLyoKICAqCWF0aV9yZW1vdGVfZHVtcF9pbnB1dAogICovCi1zdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2R1bXAodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAoKGxlbiA9PSAxKSAmJiAoZGF0YVswXSAhPSAodW5zaWduZWQgY2hhcikweGZmKSAmJiAoZGF0YVswXSAhPSAweDAwKSkKLQkJd2FybigiV2VpcmQgYnl0ZSAweCUwMngiLCBkYXRhWzBdKTsKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQgYnl0ZSAweCUwMnhcbiIsIGRhdGFbMF0pOwogCWVsc2UgaWYgKGxlbiA9PSA0KQotCQl3YXJuKCJXZWlyZCBrZXkgJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGtleSAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCWVsc2UKLQkJd2FybigiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLiIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGRhdGEsIGxlbj0lZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi5cbiIsCiAJCSAgICAgbGVuLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBACiAJLyogRGVhbCB3aXRoIHN0cmFuZ2UgbG9va2luZyBpbnB1dHMgKi8KIAlpZiAoICh1cmItPmFjdHVhbF9sZW5ndGggIT0gNCkgfHwgKGRhdGFbMF0gIT0gMHgxNCkgfHwKIAkJKChkYXRhWzNdICYgMHgwZikgIT0gMHgwMCkgKSB7Ci0JCWF0aV9yZW1vdGVfZHVtcChkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlhdGlfcmVtb3RlX2R1bXAoJnVyYi0+ZGV2LT5kZXYsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCWF0aV9yZW1vdGUgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCWlmICghYXRpX3JlbW90ZSkgewotCQl3YXJuKCIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOworCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC04MzQsOSArODM0LDExIEBACiAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKIAlpZiAocmVzdWx0KQotCQllcnIoInVzYl9yZWdpc3RlciBlcnJvciAjJWRcbiIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKIAllbHNlCi0JCWluZm8oIlJlZ2lzdGVyZWQgVVNCIGRyaXZlciAiIERSSVZFUl9ERVNDICIgdi4gIiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlMi5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKaW5kZXggYTdmYWJhZi4uM2M5OTg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogYXRpX3JlbW90ZTIgLSBBVEkvUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQZXRlciBTdG9rZXMgPGxpbnV4QGRhZGVvcy5mcmVlc2VydmUuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFBldGVyIFN0b2tlcyA8bGludXhAZGFkZW9zLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogCiAjZGVmaW5lIERSSVZFUl9ERVNDICAgICJBVEkvUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGRyaXZlciIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMyIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKQEAgLTI3LDcgKzI3LDcgQEAKICAqIEEgcmVtb3RlJ3MgImNoYW5uZWwiIG1heSBiZSBhbHRlcmVkIGJ5IHByZXNzaW5nIGFuZCBob2xkaW5nIHRoZSAiUEMiIGJ1dHRvbiBmb3IKICAqIGFwcHJveGltYXRlbHkgMyBzZWNvbmRzLCBhZnRlciB3aGljaCB0aGUgYnV0dG9uIHdpbGwgc2xvd2x5IGZsYXNoIHRoZSBjb3VudCBvZiB0aGUKICAqIGN1cnJlbnRseSBjb25maWd1cmVkICJjaGFubmVsIiwgdXNpbmcgdGhlIG51bWVyaWMga2V5cGFkIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQKLSAqIDE2IGFuZCB0aGVuIHRoZSAiUEMiIGJ1dHRvbiBhZ2FpbiwgdGhlIGJ1dHRvbiB3aWxsIHNsb3dseSBmbGFzaCB0aGUgY291bnQgb2YgdGhlCisgKiAxNiBhbmQgdGhlbiBwcmVzcyB0aGUgIlBDIiBidXR0b24gYWdhaW4sIHRoZSBidXR0b24gd2lsbCBzbG93bHkgZmxhc2ggdGhlIGNvdW50IG9mIHRoZQogICogbmV3bHkgY29uZmlndXJlZCAiY2hhbm5lbCIuCiAgKi8KIApAQCAtNDUsOSArNDUsMjUgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRpX3JlbW90ZTJfaWRfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgaHdfY29kZTsKLQlpbnQga2V5X2NvZGU7CitzdGF0aWMgREVGSU5FX01VVEVYKGF0aV9yZW1vdGUyX211dGV4KTsKKworZW51bSB7CisJQVRJX1JFTU9URTJfT1BFTkVEID0gMHgxLAorCUFUSV9SRU1PVEUyX1NVU1BFTkRFRCA9IDB4MiwKK307CisKK2VudW0geworCUFUSV9SRU1PVEUyX0FVWDEsCisJQVRJX1JFTU9URTJfQVVYMiwKKwlBVElfUkVNT1RFMl9BVVgzLAorCUFUSV9SRU1PVEUyX0FVWDQsCisJQVRJX1JFTU9URTJfUEMsCisJQVRJX1JFTU9URTJfTU9ERVMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1OCAgaHdfY29kZTsKKwl1MTYga2V5Y29kZTsKIH0gYXRpX3JlbW90ZTJfa2V5X3RhYmxlW10gPSB7CiAJeyAweDAwLCBLRVlfMCB9LAogCXsgMHgwMSwgS0VZXzEgfSwKQEAgLTczLDYgKzg5LDcgQEAKIAl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKIAl7IDB4MzgsIEtFWV9EVkQgfSwKIAl7IDB4MzksIEtFWV9UViB9LAorCXsgMHgzZiwgS0VZX1BST0cxIH0sIC8qIEFVWDEtQVVYNCBhbmQgUEMgKi8KIAl7IDB4NTQsIEtFWV9NRU5VIH0sCiAJeyAweDU4LCBLRVlfVVAgfSwKIAl7IDB4NTksIEtFWV9ET1dOIH0sCkBAIC05MSwxNSArMTA4LDkgQEAKIAl7IDB4YTksIEJUTl9MRUZUIH0sCiAJeyAweGFhLCBCVE5fUklHSFQgfSwKIAl7IDB4YmUsIEtFWV9RVUVTVElPTiB9LAotCXsgMHhkNSwgS0VZX0ZST05UIH0sCiAJeyAweGQwLCBLRVlfRURJVCB9LAorCXsgMHhkNSwgS0VZX0ZST05UIH0sCiAJeyAweGY5LCBLRVlfSU5GTyB9LAotCXsgKDB4MDAgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzEgfSwKLQl7ICgweDAxIDw8IDgpIHwgMHgzZiwgS0VZX1BST0cyIH0sCi0JeyAoMHgwMiA8PCA4KSB8IDB4M2YsIEtFWV9QUk9HMyB9LAotCXsgKDB4MDMgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzQgfSwKLQl7ICgweDA0IDw8IDgpIHwgMHgzZiwgS0VZX1BDIH0sCi0JeyAwLCBLRVlfUkVTRVJWRUQgfQogfTsKIAogc3RydWN0IGF0aV9yZW1vdGUyIHsKQEAgLTExNyw0NiArMTI4LDEwNiBAQAogCiAJY2hhciBuYW1lWzY0XTsKIAljaGFyIHBoeXNbNjRdOworCisJLyogRWFjaCBtb2RlIChBVVgxLUFVWDQgYW5kIFBDKSBjYW4gaGF2ZSBhbiBpbmRlcGVuZGVudCBrZXltYXAuICovCisJdTE2IGtleWNvZGVbQVRJX1JFTU9URTJfTU9ERVNdW0FSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKV07CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiBzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBhdGlfcmVtb3RlMl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRpX3JlbW90ZTJfZHJpdmVyID0gewogCS5uYW1lICAgICAgID0gImF0aV9yZW1vdGUyIiwKIAkucHJvYmUgICAgICA9IGF0aV9yZW1vdGUyX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gYXRpX3JlbW90ZTJfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgICA9IGF0aV9yZW1vdGUyX2lkX3RhYmxlLAorCS5zdXNwZW5kICAgID0gYXRpX3JlbW90ZTJfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aV9yZW1vdGUyX3Jlc3VtZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAotc3RhdGljIGludCBhdGlfcmVtb3RlMl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3N1Ym1pdF91cmJzKHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQogewotCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CiAJaW50IHI7CiAKIAlyID0gdXNiX3N1Ym1pdF91cmIoYXIyLT51cmJbMF0sIEdGUF9LRVJORUwpOwogCWlmIChyKSB7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAotCQkJIiVzOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJCSIlcygpOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXIgPSB1c2Jfc3VibWl0X3VyYihhcjItPnVyYlsxXSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKIAkJZGV2X2VycigmYXIyLT5pbnRmWzFdLT5kZXYsCi0JCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOworCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfa2lsbF91cmJzKHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQoreworCXVzYl9raWxsX3VyYihhcjItPnVyYlsxXSk7CisJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKwlpbnQgcjsKKworCWRldl9kYmcoJmFyMi0+aW50ZlswXS0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhcjItPmludGZbMF0pOworCWlmIChyKSB7CisJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAorCQkJIiVzKCk6IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoIShhcjItPmZsYWdzICYgQVRJX1JFTU9URTJfU1VTUEVOREVEKSkgeworCQlyID0gYXRpX3JlbW90ZTJfc3VibWl0X3VyYnMoYXIyKTsKKwkJaWYgKHIpCisJCQlnb3RvIGZhaWwyOworCX0KKworCWFyMi0+ZmxhZ3MgfD0gQVRJX1JFTU9URTJfT1BFTkVEOworCisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYXIyLT5pbnRmWzBdKTsKKworCXJldHVybiAwOworCisgZmFpbDI6CisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFyMi0+aW50ZlswXSk7CisgZmFpbDE6CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKIAotCXVzYl9raWxsX3VyYihhcjItPnVyYlswXSk7Ci0JdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzFdKTsKKwlkZXZfZGJnKCZhcjItPmludGZbMF0tPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCWlmICghKGFyMi0+ZmxhZ3MgJiBBVElfUkVNT1RFMl9TVVNQRU5ERUQpKQorCQlhdGlfcmVtb3RlMl9raWxsX3VyYnMoYXIyKTsKKworCWFyMi0+ZmxhZ3MgJj0gfkFUSV9SRU1PVEUyX09QRU5FRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9pbnB1dF9tb3VzZShzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMikKQEAgLTE3Miw3ICsyNDMsNyBAQAogCiAJbW9kZSA9IGRhdGFbMF0gJiAweDBGOwogCi0JaWYgKG1vZGUgPiA0KSB7CisJaWYgKG1vZGUgPiBBVElfUkVNT1RFMl9QQykgewogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKIAkJCSJVbmtub3duIG1vZGUgYnl0ZSAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsCiAJCQlkYXRhWzNdLCBkYXRhWzJdLCBkYXRhWzFdLCBkYXRhWzBdKTsKQEAgLTE5MSw3ICsyNjIsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmtleV9jb2RlICE9IEtFWV9SRVNFUlZFRDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0aV9yZW1vdGUyX2tleV90YWJsZSk7IGkrKykKIAkJaWYgKGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5od19jb2RlID09IGh3X2NvZGUpCiAJCQlyZXR1cm4gaTsKIApAQCAtMjExLDcgKzI4Miw3IEBACiAKIAltb2RlID0gZGF0YVswXSAmIDB4MEY7CiAKLQlpZiAobW9kZSA+IDQpIHsKKwlpZiAobW9kZSA+IEFUSV9SRU1PVEUyX1BDKSB7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAogCQkJIlVua25vd24gbW9kZSBieXRlICglMDJ4ICUwMnggJTAyeCAlMDJ4KVxuIiwKIAkJCWRhdGFbM10sIGRhdGFbMl0sIGRhdGFbMV0sIGRhdGFbMF0pOwpAQCAtMjE5LDEwICsyOTAsNiBAQAogCX0KIAogCWh3X2NvZGUgPSBkYXRhWzJdOwotCS8qCi0JICogTW9kZSBrZXlzIChBVVgxLUFVWDQsIFBDKSBhbGwgZ2VuZXJhdGUgdGhlIHNhbWUgY29kZSBieXRlLgotCSAqIFVzZSB0aGUgbW9kZSBieXRlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIHdhcyBwcmVzc2VkLgotCSAqLwogCWlmIChod19jb2RlID09IDB4M2YpIHsKIAkJLyoKIAkJICogRm9yIHNvbWUgaW5jb21wcmVoZW5zaWJsZSByZWFzb24gdGhlIG1vdXNlIHBhZCBnZW5lcmF0ZXMKQEAgLTIzNiw4ICszMDMsNiBAQAogCiAJCWlmIChkYXRhWzFdID09IDApCiAJCQlhcjItPm1vZGUgPSBtb2RlOwotCi0JCWh3X2NvZGUgfD0gbW9kZSA8PCA4OwogCX0KIAogCWlmICghKCgxIDw8IG1vZGUpICYgbW9kZV9tYXNrKSkKQEAgLTI2MCw4ICszMjUsOCBAQAogCWNhc2UgMjoJLyogcmVwZWF0ICovCiAKIAkJLyogTm8gcmVwZWF0IGZvciBtb3VzZSBidXR0b25zLiAqLwotCQlpZiAoYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2luZGV4XS5rZXlfY29kZSA9PSBCVE5fTEVGVCB8fAotCQkgICAgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2luZGV4XS5rZXlfY29kZSA9PSBCVE5fUklHSFQpCisJCWlmIChhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdID09IEJUTl9MRUZUIHx8CisJCSAgICBhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdID09IEJUTl9SSUdIVCkKIAkJCXJldHVybjsKIAogCQlpZiAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgYXIyLT5qaWZmaWVzKSkKQEAgLTI3Niw3ICszNDEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5wdXRfZXZlbnQoaWRldiwgRVZfS0VZLCBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaW5kZXhdLmtleV9jb2RlLCBkYXRhWzFdKTsKKwlpbnB1dF9ldmVudChpZGV2LCBFVl9LRVksIGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0sIGRhdGFbMV0pOwogCWlucHV0X3N5bmMoaWRldik7CiB9CiAKQEAgLTI4Nyw2ICszNTIsNyBAQAogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoKKwkJdXNiX21hcmtfbGFzdF9idXN5KGFyMi0+dWRldik7CiAJCWF0aV9yZW1vdGUyX2lucHV0X21vdXNlKGFyMik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0VOVDoKQEAgLTI5Nyw2ICszNjMsNyBAQAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CisJCXVzYl9tYXJrX2xhc3RfYnVzeShhcjItPnVkZXYpOwogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKIAkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJfQpAQCAtMzE0LDYgKzM4MSw3IEBACiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgorCQl1c2JfbWFya19sYXN0X2J1c3koYXIyLT51ZGV2KTsKIAkJYXRpX3JlbW90ZTJfaW5wdXRfa2V5KGFyMik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0VOVDoKQEAgLTMyNCw2ICszOTIsNyBAQAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CisJCXVzYl9tYXJrX2xhc3RfYnVzeShhcjItPnVkZXYpOwogCQlkZXZfZXJyKCZhcjItPmludGZbMV0tPmRldiwKIAkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJfQpAQCAtMzM0LDEwICs0MDMsNjAgQEAKIAkJCSIlcygpOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKIH0KIAorc3RhdGljIGludCBhdGlfcmVtb3RlMl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsCisJCQkJICBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCBpbmRleCwgbW9kZTsKKworCW1vZGUgPSBzY2FuY29kZSA+PiA4OworCWlmIChtb2RlID4gQVRJX1JFTU9URTJfUEMgfHwgISgoMSA8PCBtb2RlKSAmIG1vZGVfbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBhdGlfcmVtb3RlMl9sb29rdXAoc2NhbmNvZGUgJiAweEZGKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSprZXljb2RlID0gYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKwlpbnQgaW5kZXgsIG1vZGUsIG9sZF9rZXljb2RlOworCisJbW9kZSA9IHNjYW5jb2RlID4+IDg7CisJaWYgKG1vZGUgPiBBVElfUkVNT1RFMl9QQyB8fCAhKCgxIDw8IG1vZGUpICYgbW9kZV9tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmRleCA9IGF0aV9yZW1vdGUyX2xvb2t1cChzY2FuY29kZSAmIDB4RkYpOworCWlmIChpbmRleCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGtleWNvZGUgPCBLRVlfUkVTRVJWRUQgfHwga2V5Y29kZSA+IEtFWV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJb2xkX2tleWNvZGUgPSBhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdOworCWFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPSBrZXljb2RlOworCXNldF9iaXQoa2V5Y29kZSwgaWRldi0+a2V5Yml0KTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBBVElfUkVNT1RFMl9NT0RFUzsgbW9kZSsrKSB7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKTsgaW5kZXgrKykgeworCQkJaWYgKGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPT0gb2xkX2tleWNvZGUpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwljbGVhcl9iaXQob2xkX2tleWNvZGUsIGlkZXYtPmtleWJpdCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGlfcmVtb3RlMl9pbnB1dF9pbml0KHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7Ci0JaW50IGksIHJldHZhbDsKKwlpbnQgaW5kZXgsIG1vZGUsIHJldHZhbDsKIAogCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlkZXYpCkBAIC0zNTAsOCArNDY5LDI2IEBACiAJaWRldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKIAkJQklUX01BU0soQlROX1JJR0hUKTsKIAlpZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7Ci0JZm9yIChpID0gMDsgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmtleV9jb2RlICE9IEtFWV9SRVNFUlZFRDsgaSsrKQotCQlzZXRfYml0KGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5rZXlfY29kZSwgaWRldi0+a2V5Yml0KTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBBVElfUkVNT1RFMl9NT0RFUzsgbW9kZSsrKSB7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKTsgaW5kZXgrKykgeworCQkJYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSA9IGF0aV9yZW1vdGUyX2tleV90YWJsZVtpbmRleF0ua2V5Y29kZTsKKwkJCXNldF9iaXQoYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSwgaWRldi0+a2V5Yml0KTsKKwkJfQorCX0KKworCS8qIEFVWDEtQVVYNCBhbmQgUEMgZ2VuZXJhdGUgdGhlIHNhbWUgc2NhbmNvZGUuICovCisJaW5kZXggPSBhdGlfcmVtb3RlMl9sb29rdXAoMHgzZik7CisJYXIyLT5rZXljb2RlW0FUSV9SRU1PVEUyX0FVWDFdW2luZGV4XSA9IEtFWV9QUk9HMTsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfQVVYMl1baW5kZXhdID0gS0VZX1BST0cyOworCWFyMi0+a2V5Y29kZVtBVElfUkVNT1RFMl9BVVgzXVtpbmRleF0gPSBLRVlfUFJPRzM7CisJYXIyLT5rZXljb2RlW0FUSV9SRU1PVEUyX0FVWDRdW2luZGV4XSA9IEtFWV9QUk9HNDsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfUENdW2luZGV4XSA9IEtFWV9QQzsKKwlzZXRfYml0KEtFWV9QUk9HMSwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HMiwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HMywgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HNCwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QQywgaWRldi0+a2V5Yml0KTsKIAogCWlkZXYtPnJlcFtSRVBfREVMQVldICA9IDI1MDsKIAlpZGV2LT5yZXBbUkVQX1BFUklPRF0gPSAzMzsKQEAgLTM1OSw2ICs0OTYsOSBAQAogCWlkZXYtPm9wZW4gPSBhdGlfcmVtb3RlMl9vcGVuOwogCWlkZXYtPmNsb3NlID0gYXRpX3JlbW90ZTJfY2xvc2U7CiAKKwlpZGV2LT5nZXRrZXljb2RlID0gYXRpX3JlbW90ZTJfZ2V0a2V5Y29kZTsKKwlpZGV2LT5zZXRrZXljb2RlID0gYXRpX3JlbW90ZTJfc2V0a2V5Y29kZTsKKwogCWlkZXYtPm5hbWUgPSBhcjItPm5hbWU7CiAJaWRldi0+cGh5cyA9IGFyMi0+cGh5czsKIApAQCAtNDkwLDYgKzYzMCw4IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgYXIyKTsKIAorCWludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CisKIAlyZXR1cm4gMDsKIAogIGZhaWwyOgpAQCAtNTIyLDYgKzY2NCw1NyBAQAogCWtmcmVlKGFyMik7CiB9CiAKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCXJldHVybiAwOworCisJYXIyID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoYXIyLT5mbGFncyAmIEFUSV9SRU1PVEUyX09QRU5FRCkKKwkJYXRpX3JlbW90ZTJfa2lsbF91cmJzKGFyMik7CisKKwlhcjItPmZsYWdzIHw9IEFUSV9SRU1PVEUyX1NVU1BFTkRFRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjI7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlpbnQgciA9IDA7CisKKwlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCXJldHVybiAwOworCisJYXIyID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoYXIyLT5mbGFncyAmIEFUSV9SRU1PVEUyX09QRU5FRCkKKwkJciA9IGF0aV9yZW1vdGUyX3N1Ym1pdF91cmJzKGFyMik7CisKKwlpZiAoIXIpCisJCWFyMi0+ZmxhZ3MgJj0gfkFUSV9SRU1PVEUyX1NVU1BFTkRFRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOworCisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGF0aV9yZW1vdGUyX2luaXQodm9pZCkKIHsKIAlpbnQgcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlMTYwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jCkBAIC0wLDAgKzEsODgyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgVm9JUCBVU0IgcGhvbmVzIHdpdGggQ00xMDkgY2hpcHNldHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOCBBbGZyZWQgRS4gSGVnZ2VzdGFkIDxhZWhAZGIub3JnPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKy8qCisgKiAgIFRlc3RlZCBkZXZpY2VzOgorICoJLSBLb211bmlrYXRlIEtJUDEwMDAKKyAqCS0gR2VuaXVzIEctdGFsaworICoJLSBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMQorICoJLSAuLi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgeWVhbGluay5jIGRyaXZlcgorICoKKyAqIFRoYW5rcyB0bzoKKyAqICAgLSBBdXRob3JzIG9mIHllYWxpbmsuYworICogICAtIFRob21hcyBSZWl0bWF5cgorICogICAtIE9saXZlciBOZXVrdW0gZm9yIGdvb2QgcmV2aWV3IGNvbW1lbnRzIGFuZCBjb2RlCisgKiAgIC0gU2hhdW4gSmFja21hbiA8c2phY2ttYW5AZ21haWwuY29tPiBmb3IgR2VuaXVzIEctdGFsayBrZXltYXAKKyAqICAgLSBEbWl0cnkgVG9yb2tob3YgZm9yIHZhbHVhYmxlIGlucHV0IGFuZCByZXZpZXcKKyAqCisgKiBUb2RvOgorICogICAtIFJlYWQvd3JpdGUgRUVQUk9NCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyMDA4MDgwNSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIkFsZnJlZCBFLiBIZWdnZXN0YWQiCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJDTTEwOSBwaG9uZSBkcml2ZXIiCisKK3N0YXRpYyBjaGFyICpwaG9uZSA9ICJraXAxMDAwIjsKK21vZHVsZV9wYXJhbShwaG9uZSwgY2hhcnAsIFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwaG9uZSwgIlBob25lIG5hbWUge2tpcDEwMDAsIGd0YWxrLCB1c2JwaDAxfSIpOworCitlbnVtIHsKKwkvKiBISUQgUmVnaXN0ZXJzICovCisJSElEX0lSMCA9IDB4MDAsIC8qIFJlY29yZC9QbGF5YmFjay1tdXRlIGJ1dHRvbiwgVm9sdW1lIHVwL2Rvd24gICovCisJSElEX0lSMSA9IDB4MDEsIC8qIEdQSSwgZ2VuZXJpYyByZWdpc3RlcnMgb3IgRUVQUk9NX0RBVEEwICAgICAgICovCisJSElEX0lSMiA9IDB4MDIsIC8qIEdlbmVyaWMgcmVnaXN0ZXJzIG9yIEVFUFJPTV9EQVRBMSAgICAgICAgICAgICovCisJSElEX0lSMyA9IDB4MDMsIC8qIEdlbmVyaWMgcmVnaXN0ZXJzIG9yIEVFUFJPTV9DVFJMICAgICAgICAgICAgICovCisJSElEX09SMCA9IDB4MDAsIC8qIE1hcHBpbmcgY29udHJvbCwgYnV6emVyLCBTUERJRiAob2Zmc2V0IDB4MDQpICovCisJSElEX09SMSA9IDB4MDEsIC8qIEdQTyAtIEdlbmVyYWwgUHVycG9zZSBPdXRwdXQgICAgICAgICAgICAgICAgICovCisJSElEX09SMiA9IDB4MDIsIC8qIFNldCBHUElPIHRvIGlucHV0L291dHB1dCBtb2RlICAgICAgICAgICAgICAgICovCisJSElEX09SMyA9IDB4MDMsIC8qIFNQRElGIHN0YXR1cyBjaGFubmVsIG9yIEVFUFJPTV9DVFJMICAgICAgICAgICovCisKKwkvKiBISURfSVIwICovCisJUkVDT1JEX01VVEUgICA9IDEgPDwgMywKKwlQTEFZQkFDS19NVVRFID0gMSA8PCAyLAorCVZPTFVNRV9ET1dOICAgPSAxIDw8IDEsCisJVk9MVU1FX1VQICAgICA9IDEgPDwgMCwKKworCS8qIEhJRF9PUjAgKi8KKwkvKiBiaXRzIDctNgorCSAgIDA6IEhJRF9PUjEtMiBhcmUgdXNlZCBmb3IgR1BPOyBISURfT1IwLCAzIGFyZSB1c2VkIGZvciBidXp6ZXIKKwkgICAgICBhbmQgU1BESUYKKwkgICAxOiBISURfT1IwLTMgYXJlIHVzZWQgYXMgZ2VuZXJpYyBISUQgcmVnaXN0ZXJzCisJICAgMjogVmFsdWVzIHdyaXR0ZW4gdG8gSElEX09SMC0zIGFyZSBhbHNvIG1hcHBlZCB0byBNQ1VfQ1RSTCwKKwkgICAgICBFRVBST01fREFUQTAtMSwgRUVQUk9NX0NUUkwgKHNlZSBOb3RlKQorCSAgIDM6IFJlc2VydmVkCisJICovCisJSElEX09SX0dQT19CVVpfU1BESUYgICA9IDAgPDwgNiwKKwlISURfT1JfR0VORVJJQ19ISURfUkVHID0gMSA8PCA2LAorCUhJRF9PUl9NQVBfTUNVX0VFUFJPTSAgPSAyIDw8IDYsCisKKwlCVVpaRVJfT04gPSAxIDw8IDUsCisKKwkvKiB1cCB0byAyNTYgbm9ybWFsIGtleXMsIHVwIHRvIDE2IHNwZWNpYWwga2V5cyAqLworCUtFWU1BUF9TSVpFID0gMjU2ICsgMTYsCit9OworCisvKiBDTTEwOSBwcm90b2NvbCBwYWNrZXQgKi8KK3N0cnVjdCBjbTEwOV9jdGxfcGFja2V0IHsKKwl1OCBieXRlWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0geyBVU0JfUEtUX0xFTiA9IHNpemVvZihzdHJ1Y3QgY20xMDlfY3RsX3BhY2tldCkgfTsKKworLyogQ00xMDkgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RydWN0IGNtMTA5X2RldiB7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsJIC8qIGlucHV0IGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OyAvKiB1c2IgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwkvKiBpcnEgaW5wdXQgY2hhbm5lbCAqLworCXN0cnVjdCBjbTEwOV9jdGxfcGFja2V0ICppcnFfZGF0YTsKKwlkbWFfYWRkcl90IGlycV9kbWE7CisJc3RydWN0IHVyYiAqdXJiX2lycTsKKworCS8qIGNvbnRyb2wgb3V0cHV0IGNoYW5uZWwgKi8KKwlzdHJ1Y3QgY20xMDlfY3RsX3BhY2tldCAqY3RsX2RhdGE7CisJZG1hX2FkZHJfdCBjdGxfZG1hOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0bF9yZXE7CisJZG1hX2FkZHJfdCBjdGxfcmVxX2RtYTsKKwlzdHJ1Y3QgdXJiICp1cmJfY3RsOworCS8qCisJICogVGhlIDMgYml0ZmllbGRzIGJlbG93IGFyZSBwcm90ZWN0ZWQgYnkgY3RsX3N1Ym1pdF9sb2NrLgorCSAqIFRoZXkgaGF2ZSB0byBiZSBzZXBhcmF0ZSBzaW5jZSB0aGV5IGFyZSBhY2Nlc3NlZCBmcm9tIElSUQorCSAqIGNvbnRleHQuCisJICovCisJdW5zaWduZWQgaXJxX3VyYl9wZW5kaW5nOjE7CS8qIGlycV91cmIgaXMgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgY3RsX3VyYl9wZW5kaW5nOjE7CS8qIGN0bF91cmIgaXMgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgYnV6emVyX3BlbmRpbmc6MTsJLyogbmVlZCB0byBpc3N1ZSBidXp6IGNvbW1hbmQgKi8KKwlzcGlubG9ja190IGN0bF9zdWJtaXRfbG9jazsKKworCXVuc2lnbmVkIGNoYXIgYnV6emVyX3N0YXRlOwkvKiBvbi9vZmYgKi8KKworCS8qIGZsYWdzICovCisJdW5zaWduZWQgb3BlbjoxOworCXVuc2lnbmVkIHJlc2V0dGluZzoxOworCXVuc2lnbmVkIHNodXRkb3duOjE7CisKKwkvKiBUaGlzIG11dGV4IHByb3RlY3RzIHdyaXRlcyB0byB0aGUgYWJvdmUgZmxhZ3MgKi8KKwlzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CisKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbS0VZTUFQX1NJWkVdOworCisJY2hhciBwaHlzWzY0XTsJCS8qIHBoeXNpY2FsIGRldmljZSBwYXRoICovCisJaW50IGtleV9jb2RlOwkJLyogbGFzdCByZXBvcnRlZCBrZXkgKi8KKwlpbnQga2V5Yml0OwkJLyogMD1uZXcgc2NhbiAgMSwyLDQsOD1zY2FuIGNvbHVtbnMgICovCisJdTggZ3BpOwkJCS8qIENhY2hlZCB2YWx1ZSBvZiBHUEkgKGhpZ2ggbmliYmxlKSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ00xMDkga2V5IGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BlY2lhbF9rZXltYXAoaW50IGNvZGUpCit7CisJaWYgKGNvZGUgPiAweGZmKSB7CisJCXN3aXRjaCAoY29kZSAtIDB4ZmYpIHsKKwkJY2FzZSBSRUNPUkRfTVVURToJcmV0dXJuIEtFWV9NVVRFOworCQljYXNlIFBMQVlCQUNLX01VVEU6CXJldHVybiBLRVlfTVVURTsKKwkJY2FzZSBWT0xVTUVfRE9XTjoJcmV0dXJuIEtFWV9WT0xVTUVET1dOOworCQljYXNlIFZPTFVNRV9VUDoJCXJldHVybiBLRVlfVk9MVU1FVVA7CisJCX0KKwl9CisJcmV0dXJuIEtFWV9SRVNFUlZFRDsKK30KKworLyogTWFwIGRldmljZSBidXR0b25zIHRvIGludGVybmFsIGtleSBldmVudHMuCisgKgorICogVGhlICJ1cCIgYW5kICJkb3duIiBrZXlzLCBhcmUgc3ltYm9saXNlZCBieSBhcnJvd3Mgb24gdGhlIGJ1dHRvbi4KKyAqIFRoZSAicGlja3VwIiBhbmQgImhhbmd1cCIga2V5cyBhcmUgc3ltYm9saXNlZCBieSBhIGdyZWVuIGFuZCByZWQgcGhvbmUKKyAqIG9uIHRoZSBidXR0b24uCisKKyBLb211bmlrYXRlIEtJUDEwMDAgS2V5Ym9hcmQgTWF0cml4CisKKyAgICAgLT4gLS0gMSAtLSAyIC0tIDMgIC0tPiBHUEkgcGluIDQgKDB4MTApCisgICAgICB8ICAgIHwgICAgfCAgICB8CisgICAgIDwtIC0tIDQgLS0gNSAtLSA2ICAtLT4gR1BJIHBpbiA1ICgweDIwKQorICAgICAgfCAgICB8ICAgIHwgICAgfAorICAgICBFTkQgLSA3IC0tIDggLS0gOSAgLS0+IEdQSSBwaW4gNiAoMHg0MCkKKyAgICAgIHwgICAgfCAgICB8ICAgIHwKKyAgICAgT0sgLS0gKiAtLSAwIC0tICMgIC0tPiBHUEkgcGluIDcgKDB4ODApCisgICAgICB8ICAgIHwgICAgfCAgICB8CisKKyAgICAgL3xcICAvfFwgIC98XCAgL3xcCisgICAgICB8ICAgIHwgICAgfCAgICB8CitHUE8KK3BpbjogIDMgICAgMiAgICAxICAgIDAKKyAgICAgMHg4ICAweDQgIDB4MiAgMHgxCisKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleW1hcF9raXAxMDAwKGludCBzY2FuY29kZSkKK3sKKwlzd2l0Y2ggKHNjYW5jb2RlKSB7CQkJCS8qIHBob25lIGtleTogICAqLworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzA7CQkvKiAgIDAgICAgICAgICAgKi8KKwljYXNlIDB4MTQ6IHJldHVybiBLRVlfTlVNRVJJQ18xOwkJLyogICAxICAgICAgICAgICovCisJY2FzZSAweDEyOiByZXR1cm4gS0VZX05VTUVSSUNfMjsJCS8qICAgMiAgICAgICAgICAqLworCWNhc2UgMHgxMTogcmV0dXJuIEtFWV9OVU1FUklDXzM7CQkvKiAgIDMgICAgICAgICAgKi8KKwljYXNlIDB4MjQ6IHJldHVybiBLRVlfTlVNRVJJQ180OwkJLyogICA0ICAgICAgICAgICovCisJY2FzZSAweDIyOiByZXR1cm4gS0VZX05VTUVSSUNfNTsJCS8qICAgNSAgICAgICAgICAqLworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzY7CQkvKiAgIDYgICAgICAgICAgKi8KKwljYXNlIDB4NDQ6IHJldHVybiBLRVlfTlVNRVJJQ183OwkJLyogICA3ICAgICAgICAgICovCisJY2FzZSAweDQyOiByZXR1cm4gS0VZX05VTUVSSUNfODsJCS8qICAgOCAgICAgICAgICAqLworCWNhc2UgMHg0MTogcmV0dXJuIEtFWV9OVU1FUklDXzk7CQkvKiAgIDkgICAgICAgICAgKi8KKwljYXNlIDB4ODE6IHJldHVybiBLRVlfTlVNRVJJQ19QT1VORDsJCS8qICAgIyAgICAgICAgICAqLworCWNhc2UgMHg4NDogcmV0dXJuIEtFWV9OVU1FUklDX1NUQVI7CQkvKiAgICogICAgICAgICAgKi8KKwljYXNlIDB4ODg6IHJldHVybiBLRVlfRU5URVI7CQkJLyogICBwaWNrdXAgICAgICovCisJY2FzZSAweDQ4OiByZXR1cm4gS0VZX0VTQzsJCQkvKiAgIGhhbmd1cCAgICAgKi8KKwljYXNlIDB4Mjg6IHJldHVybiBLRVlfTEVGVDsJCQkvKiAgIElOICAgICAgICAgKi8KKwljYXNlIDB4MTg6IHJldHVybiBLRVlfUklHSFQ7CQkJLyogICBPVVQgICAgICAgICovCisJZGVmYXVsdDogICByZXR1cm4gc3BlY2lhbF9rZXltYXAoc2NhbmNvZGUpOworCX0KK30KKworLyoKKyAgQ29udHJpYnV0ZWQgYnkgU2hhdW4gSmFja21hbiA8c2phY2ttYW5AZ21haWwuY29tPgorCisgIEdlbml1cyBHLVRhbGsga2V5Ym9hcmQgbWF0cml4CisgICAgIDAgMSAyIDMKKyAgNDogMCA0IDggVGFsaworICA1OiAxIDUgOSBFbmQKKyAgNjogMiA2ICMgVXAKKyAgNzogMyA3ICogRG93bgorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBrZXltYXBfZ3RhbGsoaW50IHNjYW5jb2RlKQoreworCXN3aXRjaCAoc2NhbmNvZGUpIHsKKwljYXNlIDB4MTE6IHJldHVybiBLRVlfTlVNRVJJQ18wOworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzE7CisJY2FzZSAweDQxOiByZXR1cm4gS0VZX05VTUVSSUNfMjsKKwljYXNlIDB4ODE6IHJldHVybiBLRVlfTlVNRVJJQ18zOworCWNhc2UgMHgxMjogcmV0dXJuIEtFWV9OVU1FUklDXzQ7CisJY2FzZSAweDIyOiByZXR1cm4gS0VZX05VTUVSSUNfNTsKKwljYXNlIDB4NDI6IHJldHVybiBLRVlfTlVNRVJJQ182OworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzc7CisJY2FzZSAweDE0OiByZXR1cm4gS0VZX05VTUVSSUNfODsKKwljYXNlIDB4MjQ6IHJldHVybiBLRVlfTlVNRVJJQ185OworCWNhc2UgMHg0NDogcmV0dXJuIEtFWV9OVU1FUklDX1BPVU5EOwkvKiAjICovCisJY2FzZSAweDg0OiByZXR1cm4gS0VZX05VTUVSSUNfU1RBUjsJLyogKiAqLworCWNhc2UgMHgxODogcmV0dXJuIEtFWV9FTlRFUjsJCS8qIFRhbGsgKGdyZWVuIGhhbmRzZXQpICovCisJY2FzZSAweDI4OiByZXR1cm4gS0VZX0VTQzsJCS8qIEVuZCAocmVkIGhhbmRzZXQpICovCisJY2FzZSAweDQ4OiByZXR1cm4gS0VZX1VQOwkJLyogTWVudSB1cCAocm9ja2VyIHN3aXRjaCkgKi8KKwljYXNlIDB4ODg6IHJldHVybiBLRVlfRE9XTjsJCS8qIE1lbnUgZG93biAocm9ja2VyIHN3aXRjaCkgKi8KKwlkZWZhdWx0OiAgIHJldHVybiBzcGVjaWFsX2tleW1hcChzY2FuY29kZSk7CisJfQorfQorCisvKgorICogS2V5bWFwIGZvciBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMQorICogaHR0cDovL3d3dy5hbGxpZWR0ZWxlc2lzLWNvcmVnYS5jb20vMi8xMzQ0LzE0MzcvMTM2MC9jaHByZC5odG1sCisgKgorICogQ29udHJpYnV0ZWQgYnkganVseUBuYXQuYmcKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleW1hcF91c2JwaDAxKGludCBzY2FuY29kZSkKK3sKKwlzd2l0Y2ggKHNjYW5jb2RlKSB7CisJY2FzZSAweDExOiByZXR1cm4gS0VZX05VTUVSSUNfMDsJCS8qICAgMCAgICAgICAgICAqLworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzE7CQkvKiAgIDEgICAgICAgICAgKi8KKwljYXNlIDB4NDE6IHJldHVybiBLRVlfTlVNRVJJQ18yOwkJLyogICAyICAgICAgICAgICovCisJY2FzZSAweDgxOiByZXR1cm4gS0VZX05VTUVSSUNfMzsJCS8qICAgMyAgICAgICAgICAqLworCWNhc2UgMHgxMjogcmV0dXJuIEtFWV9OVU1FUklDXzQ7CQkvKiAgIDQgICAgICAgICAgKi8KKwljYXNlIDB4MjI6IHJldHVybiBLRVlfTlVNRVJJQ181OwkJLyogICA1ICAgICAgICAgICovCisJY2FzZSAweDQyOiByZXR1cm4gS0VZX05VTUVSSUNfNjsJCS8qICAgNiAgICAgICAgICAqLworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzc7CQkvKiAgIDcgICAgICAgICAgKi8KKwljYXNlIDB4MTQ6IHJldHVybiBLRVlfTlVNRVJJQ184OwkJLyogICA4ICAgICAgICAgICovCisJY2FzZSAweDI0OiByZXR1cm4gS0VZX05VTUVSSUNfOTsJCS8qICAgOSAgICAgICAgICAqLworCWNhc2UgMHg0NDogcmV0dXJuIEtFWV9OVU1FUklDX1BPVU5EOwkJLyogICAjICAgICAgICAgICovCisJY2FzZSAweDg0OiByZXR1cm4gS0VZX05VTUVSSUNfU1RBUjsJCS8qICAgKiAgICAgICAgICAqLworCWNhc2UgMHgxODogcmV0dXJuIEtFWV9FTlRFUjsJCQkvKiAgIHBpY2t1cCAgICAgKi8KKwljYXNlIDB4Mjg6IHJldHVybiBLRVlfRVNDOwkJCS8qICAgaGFuZ3VwICAgICAqLworCWNhc2UgMHg0ODogcmV0dXJuIEtFWV9MRUZUOwkJCS8qICAgSU4gICAgICAgICAqLworCWNhc2UgMHg4ODogcmV0dXJuIEtFWV9SSUdIVDsJCQkvKiAgIE9VVCAgICAgICAgKi8KKwlkZWZhdWx0OiAgIHJldHVybiBzcGVjaWFsX2tleW1hcChzY2FuY29kZSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKCprZXltYXApKGludCkgPSBrZXltYXBfa2lwMTAwMDsKKworLyoKKyAqIENvbXBsZXRlcyBhIHJlcXVlc3QgYnkgY29udmVydGluZyB0aGUgZGF0YSBpbnRvIGV2ZW50cyBmb3IgdGhlCisgKiBpbnB1dCBzdWJzeXN0ZW0uCisgKi8KK3N0YXRpYyB2b2lkIHJlcG9ydF9rZXkoc3RydWN0IGNtMTA5X2RldiAqZGV2LCBpbnQga2V5KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSBkZXYtPmlkZXY7CisKKwlpZiAoZGV2LT5rZXlfY29kZSA+PSAwKSB7CisJCS8qIG9sZCBrZXkgdXAgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBkZXYtPmtleV9jb2RlLCAwKTsKKwl9CisKKwlkZXYtPmtleV9jb2RlID0ga2V5OworCWlmIChrZXkgPj0gMCkgeworCQkvKiBuZXcgdmFsaWQga2V5ICovCisJCWlucHV0X3JlcG9ydF9rZXkoaWRldiwga2V5LCAxKTsKKwl9CisKKwlpbnB1dF9zeW5jKGlkZXYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDTTEwOSB1c2IgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKHN0cnVjdCBjbTEwOV9kZXYgKmRldikKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoZGV2LT5idXp6ZXJfc3RhdGUpCisJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gfD0gQlVaWkVSX09OOworCWVsc2UKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSAmPSB+QlVaWkVSX09OOworCisJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYl9jdGwsIEdGUF9BVE9NSUMpOworCWlmIChlcnJvcikKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgKHVyYl9jdGwpIGZhaWxlZCAlZCIsIF9fZnVuY19fLCBlcnJvcik7Cit9CisKKy8qCisgKiBJUlEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBjbTEwOV91cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSB1cmItPmNvbnRleHQ7CisJY29uc3QgaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCWludCBlcnJvcjsKKworCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICIjIyMgVVJCIElSUTogWzB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeF0ga2V5Yml0PTB4JTAyeFxuIiwKKwkgICAgIGRldi0+aXJxX2RhdGEtPmJ5dGVbMF0sCisJICAgICBkZXYtPmlycV9kYXRhLT5ieXRlWzFdLAorCSAgICAgZGV2LT5pcnFfZGF0YS0+Ynl0ZVsyXSwKKwkgICAgIGRldi0+aXJxX2RhdGEtPmJ5dGVbM10sCisJICAgICBkZXYtPmtleWJpdCk7CisKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsKKwkJZXJyKCIlczogdXJiIHN0YXR1cyAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KKworCS8qIFNwZWNpYWwga2V5cyAqLworCWlmIChkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjBdICYgMHgwZikgeworCQljb25zdCBpbnQgY29kZSA9IChkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjBdICYgMHgwZik7CisJCXJlcG9ydF9rZXkoZGV2LCBkZXYtPmtleW1hcFsweGZmICsgY29kZV0pOworCX0KKworCS8qIFNjYW4ga2V5IGNvbHVtbiAqLworCWlmIChkZXYtPmtleWJpdCA9PSAweGYpIHsKKworCQkvKiBBbnkgY2hhbmdlcyA/ICovCisJCWlmICgoZGV2LT5ncGkgJiAweGYwKSA9PSAoZGV2LT5pcnFfZGF0YS0+Ynl0ZVtISURfSVIxXSAmIDB4ZjApKQorCQkJZ290byBvdXQ7CisKKwkJZGV2LT5ncGkgPSBkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjFdICYgMHhmMDsKKwkJZGV2LT5rZXliaXQgPSAweDE7CisJfSBlbHNlIHsKKwkJcmVwb3J0X2tleShkZXYsIGRldi0+a2V5bWFwW2Rldi0+aXJxX2RhdGEtPmJ5dGVbSElEX0lSMV1dKTsKKworCQlkZXYtPmtleWJpdCA8PD0gMTsKKwkJaWYgKGRldi0+a2V5Yml0ID4gMHg4KQorCQkJZGV2LT5rZXliaXQgPSAweGY7CisJfQorCisgb3V0OgorCisJc3Bpbl9sb2NrKCZkZXYtPmN0bF9zdWJtaXRfbG9jayk7CisKKwlkZXYtPmlycV91cmJfcGVuZGluZyA9IDA7CisKKwlpZiAobGlrZWx5KCFkZXYtPnNodXRkb3duKSkgeworCisJCWlmIChkZXYtPmJ1enplcl9zdGF0ZSkKKwkJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gfD0gQlVaWkVSX09OOworCQllbHNlCisJCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdICY9IH5CVVpaRVJfT047CisKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IxXSA9IGRldi0+a2V5Yml0OworCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjJdID0gZGV2LT5rZXliaXQ7CisKKwkJZGV2LT5idXp6ZXJfcGVuZGluZyA9IDA7CisJCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMTsKKworCQllcnJvciA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dXJiX2N0bCwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnJvcikKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiICh1cmJfY3RsKSBmYWlsZWQgJWQiLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CisJfQorCisJc3Bpbl91bmxvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXJiLT5jb250ZXh0OworCWNvbnN0IGludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiIyMjIFVSQiBDVEw6IFsweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhdXG4iLAorCSAgICAgZGV2LT5jdGxfZGF0YS0+Ynl0ZVswXSwKKwkgICAgIGRldi0+Y3RsX2RhdGEtPmJ5dGVbMV0sCisJICAgICBkZXYtPmN0bF9kYXRhLT5ieXRlWzJdLAorCSAgICAgZGV2LT5jdGxfZGF0YS0+Ynl0ZVszXSk7CisKKwlpZiAoc3RhdHVzKQorCQllcnIoIiVzOiB1cmIgc3RhdHVzICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwlzcGluX2xvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKKworCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMDsKKworCWlmIChsaWtlbHkoIWRldi0+c2h1dGRvd24pKSB7CisKKwkJaWYgKGRldi0+YnV6emVyX3BlbmRpbmcpIHsKKwkJCWRldi0+YnV6emVyX3BlbmRpbmcgPSAwOworCQkJZGV2LT5jdGxfdXJiX3BlbmRpbmcgPSAxOworCQkJY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKGRldik7CisJCX0gZWxzZSBpZiAobGlrZWx5KCFkZXYtPmlycV91cmJfcGVuZGluZykpIHsKKwkJCS8qIGFzayBmb3Iga2V5IGRhdGEgKi8KKwkJCWRldi0+aXJxX3VyYl9wZW5kaW5nID0gMTsKKwkJCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJfaXJxLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnJvcikKKwkJCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiAodXJiX2lycSkgZmFpbGVkICVkIiwKKwkJCQkJX19mdW5jX18sIGVycm9yKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkZXYtPmN0bF9zdWJtaXRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3RvZ2dsZV9idXp6ZXJfYXN5bmMoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jdGxfc3VibWl0X2xvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmN0bF91cmJfcGVuZGluZykgeworCQkvKiBVUkIgY29tcGxldGlvbiB3aWxsIHJlc3VibWl0ICovCisJCWRldi0+YnV6emVyX3BlbmRpbmcgPSAxOworCX0gZWxzZSB7CisJCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMTsKKwkJY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKGRldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jdGxfc3VibWl0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfdG9nZ2xlX2J1enplcl9zeW5jKHN0cnVjdCBjbTEwOV9kZXYgKmRldiwgaW50IG9uKQoreworCWludCBlcnJvcjsKKworCWlmIChvbikKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSB8PSBCVVpaRVJfT047CisJZWxzZQorCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdICY9IH5CVVpaRVJfT047CisKKwllcnJvciA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJZGV2LT5jdGxfcmVxLT5iUmVxdWVzdCwKKwkJCQlkZXYtPmN0bF9yZXEtPmJSZXF1ZXN0VHlwZSwKKwkJCQlsZTE2X3RvX2NwdShkZXYtPmN0bF9yZXEtPndWYWx1ZSksCisJCQkJbGUxNl90b19jcHUoZGV2LT5jdGxfcmVxLT53SW5kZXgpLAorCQkJCWRldi0+Y3RsX2RhdGEsCisJCQkJVVNCX1BLVF9MRU4sIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gRUlOVFIpCisJCWVycigiJXM6IHVzYl9jb250cm9sX21zZygpIGZhaWxlZCAlZCIsIF9fZnVuY19fLCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3N0b3BfdHJhZmZpYyhzdHJ1Y3QgY20xMDlfZGV2ICpkZXYpCit7CisJZGV2LT5zaHV0ZG93biA9IDE7CisJLyoKKwkgKiBNYWtlIHN1cmUgb3RoZXIgQ1BVcyBzZWUgdGhpcworCSAqLworCXNtcF93bWIoKTsKKworCXVzYl9raWxsX3VyYihkZXYtPnVyYl9jdGwpOworCXVzYl9raWxsX3VyYihkZXYtPnVyYl9pcnEpOworCisJY20xMDlfdG9nZ2xlX2J1enplcl9zeW5jKGRldiwgMCk7CisKKwlkZXYtPnNodXRkb3duID0gMDsKKwlzbXBfd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCWlmIChkZXYtPm9wZW4pIHsKKwkJLyoKKwkJICogUmVzdG9yZSBidXp6ZXIgc3RhdGUuCisJCSAqIFRoaXMgd2lsbCBhbHNvIGtpY2sgcmVndWxhciBVUkIgc3VibWlzc2lvbgorCQkgKi8KKwkJY20xMDlfdG9nZ2xlX2J1enplcl9hc3luYyhkZXYpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5wdXQgZXZlbnQgaW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY20xMDlfaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCBlcnJvcjsKKworCWVycm9yID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CisJaWYgKGVycm9yIDwgMCkgeworCQllcnIoIiVzIC0gY2Fubm90IGF1dG9yZXN1bWUsIHJlc3VsdCAlZCIsCisJCSAgICBfX2Z1bmNfXywgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwlkZXYtPmJ1enplcl9zdGF0ZSA9IDA7CisJZGV2LT5rZXlfY29kZSA9IC0xOwkvKiBubyBrZXlzIHByZXNzZWQgKi8KKwlkZXYtPmtleWJpdCA9IDB4ZjsKKworCS8qIGlzc3VlIElOSVQgKi8KKwlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdID0gSElEX09SX0dQT19CVVpfU1BESUY7CisJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IxXSA9IGRldi0+a2V5Yml0OworCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMl0gPSBkZXYtPmtleWJpdDsKKwlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjNdID0gMHgwMDsKKworCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJfY3RsLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiICh1cmJfY3RsKSBmYWlsZWQgJWQiLCBfX2Z1bmNfXywgZXJyb3IpOworCWVsc2UKKwkJZGV2LT5vcGVuID0gMTsKKworCW11dGV4X3VubG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwlpZiAoZXJyb3IpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwkvKgorCSAqIE9uY2Ugd2UgYXJlIGhlcmUgZXZlbnQgZGVsaXZlcnkgaXMgc3RvcHBlZCBzbyB3ZQorCSAqIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgc29tZW9uZSBzdGFydGluZyBidXp6ZXIKKwkgKiBhZ2FpbgorCSAqLworCWNtMTA5X3N0b3BfdHJhZmZpYyhkZXYpOworCWRldi0+b3BlbiA9IDA7CisKKwltdXRleF91bmxvY2soJmRldi0+cG1fbXV0ZXgpOworCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfaW5wdXRfZXYoc3RydWN0IGlucHV0X2RldiAqaWRldiwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisKKwlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwKKwkJImlucHV0X2V2OiB0eXBlPSV1IGNvZGU9JXUgdmFsdWU9JWRcbiIsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCWlmICh0eXBlICE9IEVWX1NORCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFNORF9UT05FOgorCWNhc2UgU05EX0JFTEw6CisJCWRldi0+YnV6emVyX3N0YXRlID0gISF2YWx1ZTsKKwkJaWYgKCFkZXYtPnJlc2V0dGluZykKKwkJCWNtMTA5X3RvZ2dsZV9idXp6ZXJfYXN5bmMoZGV2KTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGludXggaW50ZXJmYWNlIGFuZCB1c2IgaW5pdGlhbGlzYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGRyaXZlcl9pbmZvIHsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBpbmZvX2NtMTA5ID0geworCS5uYW1lID0gIkNNMTA5IFVTQiBkcml2ZXIiLAorfTsKKworZW51bSB7CisJVkVORE9SX0lEICAgICAgICA9IDB4MGQ4YywgLyogQy1NZWRpYSBFbGVjdHJvbmljcyAqLworCVBST0RVQ1RfSURfQ00xMDkgPSAweDAwMGUsIC8qIENNMTA5IGRlZmluZXMgcmFuZ2UgMHgwMDA4IC0gMHgwMDBmICovCit9OworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY20xMDlfdXNiX3RhYmxlW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yID0gVkVORE9SX0lELAorCQkuaWRQcm9kdWN0ID0gUFJPRFVDVF9JRF9DTTEwOSwKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19ISUQsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAwLAorCQkuYkludGVyZmFjZVByb3RvY29sID0gMCwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSAmaW5mb19jbTEwOQorCX0sCisJLyogeW91IGNhbiBhZGQgbW9yZSBkZXZpY2VzIGhlcmUgd2l0aCBwcm9kdWN0IElEIDB4MDAwOCAtIDB4MDAwZiAqLworCXsgfQorfTsKKworc3RhdGljIHZvaWQgY20xMDlfdXNiX2NsZWFudXAoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCWlmIChkZXYtPmN0bF9yZXEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIHNpemVvZigqKGRldi0+Y3RsX3JlcSkpLAorCQkJCWRldi0+Y3RsX3JlcSwgZGV2LT5jdGxfcmVxX2RtYSk7CisJaWYgKGRldi0+Y3RsX2RhdGEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCWRldi0+Y3RsX2RhdGEsIGRldi0+Y3RsX2RtYSk7CisJaWYgKGRldi0+aXJxX2RhdGEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCWRldi0+aXJxX2RhdGEsIGRldi0+aXJxX2RtYSk7CisKKwl1c2JfZnJlZV91cmIoZGV2LT51cmJfaXJxKTsJLyogcGFyYW1ldGVyIHZhbGlkYXRpb24gaW4gY29yZS91cmIgKi8KKwl1c2JfZnJlZV91cmIoZGV2LT51cmJfY3RsKTsJLyogcGFyYW1ldGVyIHZhbGlkYXRpb24gaW4gY29yZS91cmIgKi8KKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYtPmlkZXYpOworCWNtMTA5X3VzYl9jbGVhbnVwKGRldik7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8gKm5mbyA9IChzdHJ1Y3QgZHJpdmVyX2luZm8gKilpZC0+ZHJpdmVyX2luZm87CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IE5VTEw7CisJaW50IHJldCwgcGlwZSwgaTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnBtX211dGV4KTsKKworCWRldi0+dWRldiA9IHVkZXY7CisJZGV2LT5pbnRmID0gaW50ZjsKKworCWRldi0+aWRldiA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXRfZGV2KQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKiBhbGxvY2F0ZSB1c2IgYnVmZmVycyAqLworCWRldi0+aXJxX2RhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCQkgR0ZQX0tFUk5FTCwgJmRldi0+aXJxX2RtYSk7CisJaWYgKCFkZXYtPmlycV9kYXRhKQorCQlnb3RvIGVycl9vdXQ7CisKKwlkZXYtPmN0bF9kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBVU0JfUEtUX0xFTiwKKwkJCQkJIEdGUF9LRVJORUwsICZkZXYtPmN0bF9kbWEpOworCWlmICghZGV2LT5jdGxfZGF0YSkKKwkJZ290byBlcnJfb3V0OworCisJZGV2LT5jdGxfcmVxID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBzaXplb2YoKihkZXYtPmN0bF9yZXEpKSwKKwkJCQkJR0ZQX0tFUk5FTCwgJmRldi0+Y3RsX3JlcV9kbWEpOworCWlmICghZGV2LT5jdGxfcmVxKQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKiBhbGxvY2F0ZSB1cmIgc3RydWN0dXJlcyAqLworCWRldi0+dXJiX2lycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnVyYl9pcnEpCisJCWdvdG8gZXJyX291dDsKKworCWRldi0+dXJiX2N0bCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnVyYl9jdGwpCisJCWdvdG8gZXJyX291dDsKKworCS8qIGdldCBhIGhhbmRsZSB0byB0aGUgaW50ZXJydXB0IGRhdGEgcGlwZSAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJcmV0ID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJaWYgKHJldCAhPSBVU0JfUEtUX0xFTikKKwkJZXJyKCJpbnZhbGlkIHBheWxvYWQgc2l6ZSAlZCwgZXhwZWN0ZWQgJWQiLCByZXQsIFVTQl9QS1RfTEVOKTsKKworCS8qIGluaXRpYWxpc2UgaXJxIHVyYiAqLworCXVzYl9maWxsX2ludF91cmIoZGV2LT51cmJfaXJxLCB1ZGV2LCBwaXBlLCBkZXYtPmlycV9kYXRhLAorCQkJIFVTQl9QS1RfTEVOLAorCQkJIGNtMTA5X3VyYl9pcnFfY2FsbGJhY2ssIGRldiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJZGV2LT51cmJfaXJxLT50cmFuc2Zlcl9kbWEgPSBkZXYtPmlycV9kbWE7CisJZGV2LT51cmJfaXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlkZXYtPnVyYl9pcnEtPmRldiA9IHVkZXY7CisKKwkvKiBpbml0aWFsaXNlIGN0bCB1cmIgKi8KKwlkZXYtPmN0bF9yZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8CisJCQkJCVVTQl9ESVJfT1VUOworCWRldi0+Y3RsX3JlcS0+YlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOworCWRldi0+Y3RsX3JlcS0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMHgyMDApOworCWRldi0+Y3RsX3JlcS0+d0luZGV4ID0gY3B1X3RvX2xlMTYoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCWRldi0+Y3RsX3JlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2KFVTQl9QS1RfTEVOKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGRldi0+dXJiX2N0bCwgdWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAodm9pZCAqKWRldi0+Y3RsX3JlcSwgZGV2LT5jdGxfZGF0YSwgVVNCX1BLVF9MRU4sCisJCQkgICAgIGNtMTA5X3VyYl9jdGxfY2FsbGJhY2ssIGRldik7CisJZGV2LT51cmJfY3RsLT5zZXR1cF9kbWEgPSBkZXYtPmN0bF9yZXFfZG1hOworCWRldi0+dXJiX2N0bC0+dHJhbnNmZXJfZG1hID0gZGV2LT5jdGxfZG1hOworCWRldi0+dXJiX2N0bC0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1NFVFVQX0RNQV9NQVAgfAorCQkJCQlVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlkZXYtPnVyYl9jdGwtPmRldiA9IHVkZXY7CisKKwkvKiBmaW5kIG91dCB0aGUgcGh5c2ljYWwgYnVzIGxvY2F0aW9uICovCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBkZXYtPnBoeXMsIHNpemVvZihkZXYtPnBoeXMpKTsKKwlzdHJsY2F0KGRldi0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoZGV2LT5waHlzKSk7CisKKwkvKiByZWdpc3RlciBzZXR0aW5ncyBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWlucHV0X2Rldi0+bmFtZSA9IG5mby0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSBkZXYtPnBoeXM7CisJdXNiX3RvX2lucHV0X2lkKHVkZXYsICZpbnB1dF9kZXYtPmlkKTsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmaW50Zi0+ZGV2OworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBkZXYpOworCWlucHV0X2Rldi0+b3BlbiA9IGNtMTA5X2lucHV0X29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IGNtMTA5X2lucHV0X2Nsb3NlOworCWlucHV0X2Rldi0+ZXZlbnQgPSBjbTEwOV9pbnB1dF9ldjsKKworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGRldi0+a2V5bWFwOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShkZXYtPmtleW1hcCk7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1NORCk7CisJaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVRfTUFTSyhTTkRfQkVMTCkgfCBCSVRfTUFTSyhTTkRfVE9ORSk7CisKKwkvKiByZWdpc3RlciBhdmFpbGFibGUga2V5IGV2ZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBLRVlNQVBfU0laRTsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IGsgPSBrZXltYXAoaSk7CisJCWRldi0+a2V5bWFwW2ldID0gazsKKwkJX19zZXRfYml0KGssIGlucHV0X2Rldi0+a2V5Yml0KTsKKwl9CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShkZXYtPmlkZXYpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfb3V0OworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCisJcmV0dXJuIDA7CisKKyBlcnJfb3V0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJY20xMDlfdXNiX2NsZWFudXAoZGV2KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiY20xMDk6IHVzYl9zdXNwZW5kIChldmVudD0lZClcbiIsIG1lc3NhZ2UuZXZlbnQpOworCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisJY20xMDlfc3RvcF90cmFmZmljKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjbTEwOTogdXNiX3Jlc3VtZVxuIik7CisKKwltdXRleF9sb2NrKCZkZXYtPnBtX211dGV4KTsKKwljbTEwOV9yZXN0b3JlX3N0YXRlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCW11dGV4X2xvY2soJmRldi0+cG1fbXV0ZXgpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgaW5wdXQgZXZlbnRzIGRvbid0IHRyeSB0byB0b2dnbGUgYnV6emVyCisJICogd2hpbGUgd2UgYXJlIHJlc2V0dGluZworCSAqLworCWRldi0+cmVzZXR0aW5nID0gMTsKKwlzbXBfd21iKCk7CisKKwljbTEwOV9zdG9wX3RyYWZmaWMoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkZXYtPnJlc2V0dGluZyA9IDA7CisJc21wX3dtYigpOworCisJY20xMDlfcmVzdG9yZV9zdGF0ZShkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY20xMDlfZHJpdmVyID0geworCS5uYW1lCQk9ICJjbTEwOSIsCisJLnByb2JlCQk9IGNtMTA5X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGNtMTA5X3VzYl9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gY20xMDlfdXNiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBjbTEwOV91c2JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUJPSBjbTEwOV91c2JfcmVzdW1lLAorCS5wcmVfcmVzZXQJPSBjbTEwOV91c2JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0CT0gY20xMDlfdXNiX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlCT0gY20xMDlfdXNiX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbTEwOV9zZWxlY3Rfa2V5bWFwKHZvaWQpCit7CisJLyogTG9hZCB0aGUgcGhvbmUga2V5bWFwICovCisJaWYgKCFzdHJjYXNlY21wKHBob25lLCAia2lwMTAwMCIpKSB7CisJCWtleW1hcCA9IGtleW1hcF9raXAxMDAwOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJCSJLZXltYXAgZm9yIEtvbXVuaWthdGUgS0lQMTAwMCBwaG9uZSBsb2FkZWRcbiIpOworCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAocGhvbmUsICJndGFsayIpKSB7CisJCWtleW1hcCA9IGtleW1hcF9ndGFsazsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiS2V5bWFwIGZvciBHZW5pdXMgRy10YWxrIHBob25lIGxvYWRlZFxuIik7CisJfSBlbHNlIGlmICghc3RyY2FzZWNtcChwaG9uZSwgInVzYnBoMDEiKSkgeworCQlrZXltYXAgPSBrZXltYXBfdXNicGgwMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiS2V5bWFwIGZvciBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMSBwaG9uZSBsb2FkZWRcbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiVW5zdXBwb3J0ZWQgcGhvbmU6ICVzXG4iLCBwaG9uZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjbTEwOV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGNtMTA5X3NlbGVjdF9rZXltYXAoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gdXNiX3JlZ2lzdGVyKCZjbTEwOV9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJRFJJVkVSX0RFU0MgIjogIiBEUklWRVJfVkVSU0lPTiAiIChDKSAiIERSSVZFUl9BVVRIT1IgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNtMTA5X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY20xMDlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY20xMDlfaW5pdCk7Cittb2R1bGVfZXhpdChjbTEwOV9leGl0KTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNtMTA5X3VzYl90YWJsZSk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL21hcF90b183c2VnbWVudC5oIGIvZHJpdmVycy9pbnB1dC9taXNjL21hcF90b183c2VnbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDI0MDk0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvbWFwX3RvXzdzZWdtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvdXNiL2lucHV0L21hcF90b183c2VnbWVudC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IEhlbmsgVmVyZ29uZXQgPEhlbmsuVmVyZ29uZXRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2lmbmRlZiBNQVBfVE9fN1NFR01FTlRfSAotI2RlZmluZSBNQVBfVE9fN1NFR01FTlRfSAotCi0vKiBUaGlzIGZpbGUgcHJvdmlkZXMgdHJhbnNsYXRpb24gcHJpbWl0aXZlcyBhbmQgdGFibGVzIGZvciB0aGUgY29udmVyc2lvbgotICogb2YgKEFTQ0lJKSBjaGFyYWN0ZXJzIHRvIGEgNy1zZWdtZW50cyBub3RhdGlvbi4KLSAqCi0gKiBUaGUgNyBzZWdtZW50J3Mgd2lraXBlZGlhIG5vdGF0aW9uIGJlbG93IGlzIHVzZWQgYXMgc3RhbmRhcmQuCi0gKiBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2V2ZW5fc2VnbWVudF9kaXNwbGF5Ci0gKgotICogTm90YXRpb246CSstYS0rCi0gKgkJZiAgIGIKLSAqCQkrLWctKwotICoJCWUgICBjCi0gKgkJKy1kLSsKLSAqCi0gKiBVc2FnZToKLSAqCi0gKiAgIFJlZ2lzdGVyIGEgbWFwIHZhcmlhYmxlLCBhbmQgZmlsbCBpdCB3aXRoIGEgY2hhcmFjdGVyIHNldDoKLSAqIAlzdGF0aWMgU0VHN19ERUZBVUxUX01BUChtYXBfc2VnNyk7Ci0gKgotICoKLSAqICAgVGhlbiB1c2UgZm9yIGNvbnZlcnNpb246Ci0gKglzZWc3ID0gbWFwX3RvX3NlZzcoJm1hcF9zZWc3LCBzb21lX2NoYXIpOwotICoJLi4uCi0gKgotICogSW4gZGV2aWNlIGRyaXZlcnMgaXQgaXMgcmVjb21tZW5kZWQsIGlmIHJlcXVpcmVkLCB0byBtYWtlIHRoZSBjaGFyIG1hcAotICogYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSB1c2luZyB0aGUgZm9sbG93aW5nIHNjaGVtZToKLSAqCi0gKiBzdGF0aWMgc3NpemVfdCBzaG93X21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgewotICoJbWVtY3B5KGJ1ZiwgJm1hcF9zZWc3LCBzaXplb2YobWFwX3NlZzcpKTsKLSAqCXJldHVybiBzaXplb2YobWFwX3NlZzcpOwotICogfQotICogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY250KSB7Ci0gKglpZihjbnQgIT0gc2l6ZW9mKG1hcF9zZWc3KSkKLSAqCQlyZXR1cm4gLUVJTlZBTDsKLSAqCW1lbWNweSgmbWFwX3NlZzcsIGJ1ZiwgY250KTsKLSAqCXJldHVybiBjbnQ7Ci0gKiB9Ci0gKiBzdGF0aWMgREVWSUNFX0FUVFIobWFwX3NlZzcsIFBFUk1TX1JXLCBzaG93X21hcCwgc3RvcmVfbWFwKTsKLSAqCi0gKiBIaXN0b3J5OgotICogMjAwNS0wNS0zMQlSRkMgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotCi0jZGVmaW5lIEJJVF9TRUc3X0EJCTAKLSNkZWZpbmUgQklUX1NFRzdfQgkJMQotI2RlZmluZSBCSVRfU0VHN19DCQkyCi0jZGVmaW5lIEJJVF9TRUc3X0QJCTMKLSNkZWZpbmUgQklUX1NFRzdfRQkJNAotI2RlZmluZSBCSVRfU0VHN19GCQk1Ci0jZGVmaW5lIEJJVF9TRUc3X0cJCTYKLSNkZWZpbmUgQklUX1NFRzdfUkVTRVJWRUQJNwotCi1zdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCB7Ci0JdW5zaWduZWQgY2hhcgl0YWJsZVsxMjhdOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgbWFwX3RvX3NlZzcoc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgKm1hcCwgaW50IGMpCi17Ci0JcmV0dXJuIGMgPj0gMCAmJiBjIDwgc2l6ZW9mKG1hcC0+dGFibGUpID8gbWFwLT50YWJsZVtjXSA6IC1FSU5WQUw7Ci19Ci0KLSNkZWZpbmUgU0VHN19DT05WRVJTSU9OX01BUChfbmFtZSwgX21hcCkJXAotCXN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwIF9uYW1lID0geyAudGFibGUgPSB7IF9tYXAgfSB9Ci0KLS8qCi0gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSBmYWNpbGl0eSB0aGF0IGFsbG93cyB1c2VyIHNwYWNlIHRvIHJlZGVmaW5lCi0gKiBjdXN0b20gY2hhcmFjdGVyIHNldHMgZm9yIExDRCBkZXZpY2VzLiBQbGVhc2UgdXNlIGEgc3lzZnMgaW50ZXJmYWNlCi0gKiBhcyBkZXNjcmliZWQgYWJvdmUuCi0gKi8KLSNkZWZpbmUgTUFQX1RPX1NFRzdfU1lTRlNfRklMRQkibWFwX3NlZzciCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIF9TRUc3KGwsYSxiLGMsZCxlLGYsZykJXAotICAgICAgKAlhPDxCSVRfU0VHN19BIHwJYjw8QklUX1NFRzdfQiB8CWM8PEJJVF9TRUc3X0MgfAlkPDxCSVRfU0VHN19EIHwJXAotCWU8PEJJVF9TRUc3X0UgfAlmPDxCSVRfU0VHN19GIHwJZzw8QklUX1NFRzdfRyApCi0KLSNkZWZpbmUgX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCi0JMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0KLSNkZWZpbmUgX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCchJywwLDAsMCwwLDEsMSwwKSwgX1NFRzcoJyInLDAsMSwwLDAsMCwxLDApLCBfU0VHNygnIycsMCwxLDEsMCwxLDEsMCksXAotIF9TRUc3KCckJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJyUnLDAsMCwxLDAsMCwxLDApLCBfU0VHNygnJicsMSwwLDEsMSwxLDEsMSksXAotIF9TRUc3KCdcJycsMCwwLDAsMCwwLDEsMCksX1NFRzcoJygnLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnKScsMSwxLDEsMSwwLDAsMCksXAotIF9TRUc3KCcqJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJysnLDAsMSwxLDAsMCwwLDEpLCBfU0VHNygnLCcsMCwwLDAsMCwxLDAsMCksXAotIF9TRUc3KCctJywwLDAsMCwwLDAsMCwxKSwgX1NFRzcoJy4nLDAsMCwwLDAsMSwwLDApLCBfU0VHNygnLycsMCwxLDAsMCwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKLSBfU0VHNygnMCcsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCcxJywwLDEsMSwwLDAsMCwwKSwgX1NFRzcoJzInLDEsMSwwLDEsMSwwLDEpLFwKLSBfU0VHNygnMycsMSwxLDEsMSwwLDAsMSksIF9TRUc3KCc0JywwLDEsMSwwLDAsMSwxKSwgX1NFRzcoJzUnLDEsMCwxLDEsMCwxLDEpLFwKLSBfU0VHNygnNicsMSwwLDEsMSwxLDEsMSksIF9TRUc3KCc3JywxLDEsMSwwLDAsMCwwKSwgX1NFRzcoJzgnLDEsMSwxLDEsMSwxLDEpLFwKLSBfU0VHNygnOScsMSwxLDEsMSwwLDEsMSksCi0KLSNkZWZpbmUgX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCc6JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJzsnLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnPCcsMSwwLDAsMCwwLDEsMSksXAotIF9TRUc3KCc9JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJz4nLDEsMSwwLDAsMCwwLDEpLCBfU0VHNygnPycsMSwxLDEsMCwwLDEsMCksXAotIF9TRUc3KCdAJywxLDEsMCwxLDEsMSwxKSwKLQotI2RlZmluZSBfTUFQXzY1XzkwX0FTQ0lJX1NFRzdfQUxQSEFfVVBQUglcCi0gX1NFRzcoJ0EnLDEsMSwxLDAsMSwxLDEpLCBfU0VHNygnQicsMSwxLDEsMSwxLDEsMSksIF9TRUc3KCdDJywxLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ0QnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnRScsMSwwLDAsMSwxLDEsMSksIF9TRUc3KCdGJywxLDAsMCwwLDEsMSwxKSxcCi0gX1NFRzcoJ0cnLDEsMSwxLDEsMCwxLDEpLCBfU0VHNygnSCcsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCdJJywwLDEsMSwwLDAsMCwwKSxcCi0gX1NFRzcoJ0onLDAsMSwxLDEsMCwwLDApLCBfU0VHNygnSycsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCdMJywwLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ00nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnTicsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCdPJywxLDEsMSwxLDEsMSwwKSxcCi0gX1NFRzcoJ1AnLDEsMSwwLDAsMSwxLDEpLCBfU0VHNygnUScsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCdSJywxLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ1MnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnVCcsMCwwLDAsMSwxLDEsMSksIF9TRUc3KCdVJywwLDEsMSwxLDEsMSwwKSxcCi0gX1NFRzcoJ1YnLDAsMSwxLDEsMSwxLDApLCBfU0VHNygnVycsMCwxLDEsMSwxLDEsMSksIF9TRUc3KCdYJywwLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ1knLDAsMSwxLDAsMCwxLDEpLCBfU0VHNygnWicsMSwxLDAsMSwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCdbJywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJ1xcJywwLDAsMSwwLDAsMSwxKSxfU0VHNygnXScsMSwxLDEsMSwwLDAsMCksXAotIF9TRUc3KCdeJywxLDEsMCwwLDAsMSwwKSwgX1NFRzcoJ18nLDAsMCwwLDEsMCwwLDApLCBfU0VHNygnYCcsMCwxLDAsMCwwLDAsMCksCi0KLSNkZWZpbmUgX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0gX1NFRzcoJ0EnLDEsMSwxLDAsMSwxLDEpLCBfU0VHNygnYicsMCwwLDEsMSwxLDEsMSksIF9TRUc3KCdjJywwLDAsMCwxLDEsMCwxKSxcCi0gX1NFRzcoJ2QnLDAsMSwxLDEsMSwwLDEpLCBfU0VHNygnRScsMSwwLDAsMSwxLDEsMSksIF9TRUc3KCdGJywxLDAsMCwwLDEsMSwxKSxcCi0gX1NFRzcoJ0cnLDEsMSwxLDEsMCwxLDEpLCBfU0VHNygnaCcsMCwwLDEsMCwxLDEsMSksIF9TRUc3KCdpJywwLDAsMSwwLDAsMCwwKSxcCi0gX1NFRzcoJ2onLDAsMCwxLDEsMCwwLDApLCBfU0VHNygnaycsMCwwLDEsMCwxLDEsMSksIF9TRUc3KCdMJywwLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ00nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnbicsMCwwLDEsMCwxLDAsMSksIF9TRUc3KCdvJywwLDAsMSwxLDEsMCwxKSxcCi0gX1NFRzcoJ1AnLDEsMSwwLDAsMSwxLDEpLCBfU0VHNygncScsMSwxLDEsMCwwLDEsMSksIF9TRUc3KCdyJywwLDAsMCwwLDEsMCwxKSxcCi0gX1NFRzcoJ1MnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnVCcsMCwwLDAsMSwxLDEsMSksIF9TRUc3KCd1JywwLDAsMSwxLDEsMCwwKSxcCi0gX1NFRzcoJ3YnLDAsMCwxLDEsMSwwLDApLCBfU0VHNygnVycsMCwxLDEsMSwxLDEsMSksIF9TRUc3KCdYJywwLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ3knLDAsMSwxLDEsMCwxLDEpLCBfU0VHNygnWicsMSwxLDAsMSwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0gX1NFRzcoJ3snLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnfCcsMCwwLDAsMCwxLDEsMCksIF9TRUc3KCd9JywxLDEsMSwxLDAsMCwwKSxcCi0gX1NFRzcoJ34nLDEsMCwwLDAsMCwwLDApLAotCi0vKiBNYXBzICovCi0KLS8qIFRoaXMgc2V0IHRyaWVzIHRvIG1hcCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgdmlzaWJsZSBjaGFyYWN0ZXJpc3RpY3MKLSAqIG9mIHRoZSBBU0NJSSBzeW1ib2wsIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGxldHRlcnMgbWF5IGRpZmZlciBpbgotICogcHJlc2VudGF0aW9uIG9uIHRoZSBkaXNwbGF5LgotICovCi0jZGVmaW5lIE1BUF9BU0NJSTdTRUdfQUxQSEFOVU0JCQlcCi0JX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCi0JX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCi0JX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfNjVfOTBfQVNDSUlfU0VHN19BTFBIQV9VUFBSCVwKLQlfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0JX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCi0KLS8qIFRoaXMgc2V0IHRyaWVzIHRvIG1hcCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgc3ltYm9saWMgY2hhcmFjdGVyaXN0aWNzCi0gKiBvZiB0aGUgQVNDSUkgY2hhcmFjdGVyIGZvciBtYXhpbXVtIGRpc2NyaW1pbmF0aW9uLgotICogRm9yIG5vdyB0aGlzIG1lYW5zIGFsbCBhbHBoYSBjaGFycyBhcmUgaW4gbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMuCi0gKiAoVGhpcyBmb3IgZXhhbXBsZSBmYWNpbGl0YXRlcyB0aGUgdXNlIG9mIGhleCBudW1iZXJzIHdpdGggdXBwZXJjYXNlIGlucHV0LikKLSAqLwotI2RlZmluZSBNQVBfQVNDSUk3U0VHX0FMUEhBTlVNX0xDCQkJXAotCV9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAotCV9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAotCV9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKLQlfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0JX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCi0KLSNkZWZpbmUgU0VHN19ERUZBVUxUX01BUChfbmFtZSkJCVwKLQlTRUc3X0NPTlZFUlNJT05fTUFQKF9uYW1lLE1BUF9BU0NJSTdTRUdfQUxQSEFOVU0pCi0KLSNlbmRpZgkvKiBNQVBfVE9fN1NFR01FTlRfSCAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggZmUyNjhiZS4uN2M4OTU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMjc3LDYgKzI3NywxNiBAQAogCXsgS0VfRU5ELCAgMCB9CiB9OwogCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfZnNfYW1pbG9fcHJvX3YzNTA1W10gX19pbml0ZGF0YSA9IHsKKwl7IEtFX0tFWSwgICAgICAgMHgwMSwge0tFWV9IRUxQfSB9LCAgICAgICAgICAvKiBGbitGMSAqLworCXsgS0VfS0VZLCAgICAgICAweDA2LCB7S0VZX0RJU1BMQVlUT0dHTEV9IH0sIC8qIEZuK0Y0ICovCisJeyBLRV9CTFVFVE9PVEgsIDB4MzAgfSwgICAgICAgICAgICAgICAgICAgICAgLyogRm4rRjEwICovCisJeyBLRV9LRVksICAgICAgIDB4MzEsIHtLRVlfTUFJTH0gfSwgICAgICAgICAgLyogbWFpbCBidXR0b24gKi8KKwl7IEtFX0tFWSwgICAgICAgMHgzNiwge0tFWV9XV1d9IH0sICAgICAgICAgICAvKiB3d3cgYnV0dG9uICovCisJeyBLRV9XSUZJLCAgICAgIDB4NzggfSwgICAgICAgICAgICAgICAgICAgICAgLyogc2F0ZWxpdGUgZGlzaCBidXR0b24gKi8KKwl7IEtFX0VORCwgICAgICAgMCB9Cit9OworCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfZnVqaXRzdV9uMzUxMFtdIF9faW5pdGRhdGEgPSB7CiAJeyBLRV9LRVksIDB4MTEsIHtLRVlfUFJPRzF9IH0sCiAJeyBLRV9LRVksIDB4MTIsIHtLRVlfUFJPRzJ9IH0sCkBAIC02MTgsNiArNjI4LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFBybyBFZGl0aW9uIFYzNTA1IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gUHJvIEVkaXRpb24gVjM1MDUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MzUwNQorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBNNzQwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwppbmRleCBmYWNlZmQzLi45M2EyMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKQEAgLTUyLDggKzUyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21hcF90b183c2VnbWVudC5oPgogCi0jaW5jbHVkZSAibWFwX3RvXzdzZWdtZW50LmgiCiAjaW5jbHVkZSAieWVhbGluay5oIgogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ5bGQtMjAwNTEyMzAiCkBAIC05OTksNyArOTk5LDggQEAKIHsKIAlpbnQgcmV0ID0gdXNiX3JlZ2lzdGVyKCZ5ZWFsaW5rX2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKQotCQlpbmZvKERSSVZFUl9ERVNDICI6IiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCBmOTk2NTQ2Li5mNDg4YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC05Niw2ICs5NiwxNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU9VU0VfUFMyX09MUEMKKwlib29sICJPTFBDIFBTLzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIgorCWRlcGVuZHMgb24gTU9VU0VfUFMyICYmIE9MUEMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIE9MUEMgWE8tMSBsYXB0b3AgKHdpdGggYnVpbHQtaW4KKwkgIFBTLzIgdG91Y2hwYWQvdGFibGV0IGRldmljZSkuICBUaGUgbWFudWZhY3R1cmVyIGNhbGxzIHRoZQorCSAgdG91Y2hwYWQgYW4gSEdQSy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE1PVVNFX1NFUklBTAogCXRyaXN0YXRlICJTZXJpYWwgbW91c2UiCiAJc2VsZWN0IFNFUklPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQppbmRleCBkNGQyMDI1Li44ZTZlNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKQEAgLTIxLDYgKzIxLDcgQEAKIHBzbW91c2Utb2JqcyA6PSBwc21vdXNlLWJhc2UubyBzeW5hcHRpY3MubwogCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9BTFBTKQkrPSBhbHBzLm8KK3BzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX09MUEMpCSs9IGhncGsubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQKQkrPSBsb2dpcHMycHAubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfTElGRUJPT0spCSs9IGxpZmVib29rLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQpCSs9IHRyYWNrcG9pbnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwppbmRleCAzODVlMzJiLi5jYmVkZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwpAQCAtNTQsNiArNTQsNyBAQAogCXsgeyAweDIwLCAweDAyLCAweDBlIH0sCTB4ZjgsIDB4ZjgsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sIC8qIFhYWCAqLwogCXsgeyAweDIyLCAweDAyLCAweDBhIH0sCTB4ZjgsIDB4ZjgsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sCiAJeyB7IDB4MjIsIDB4MDIsIDB4MTQgfSwgMHhmZiwgMHhmZiwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwgLyogRGVsbCBMYXRpdHVkZSBENjAwICovCisJeyB7IDB4NjIsIDB4MDIsIDB4MTQgfSwgMHhjZiwgMHhjZiwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwgLyogRGVsbCBMYXRpdHVkZSBFNjUwMCAqLwogCXsgeyAweDczLCAweDAyLCAweDUwIH0sIDB4Y2YsIDB4Y2YsIEFMUFNfRldfQktfMSB9IC8qIERlbGwgVm9zdHJvIDE0MDAgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKaW5kZXggMWY0MWFlOS4uMDc5ODE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKQEAgLTEzNiwxMiArMTM2LDI4IEBACiAjZGVmaW5lIEFUUF9HRVlTRVJfTU9ERV9SRVFVRVNUX0lOREVYCQkwCiAjZGVmaW5lIEFUUF9HRVlTRVJfTU9ERV9WRU5ET1JfVkFMVUUJCTB4MDQKIAorLyoqCisgKiBlbnVtIGF0cF9zdGF0dXNfYml0cyAtIHN0YXR1cyBiaXQgbWVhbmluZ3MKKyAqCisgKiBUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSBtZWFuaW5nIG9mIHRoZSBzdGF0dXMgYml0cy4KKyAqIChvbmx5IEdleXNlciAzLzQpCisgKgorICogQEFUUF9TVEFUVVNfQlVUVE9OOiBUaGUgYnV0dG9uIHdhcyBwcmVzc2VkCisgKiBAQVRQX1NUQVRVU19CQVNFX1VQREFURTogVXBkYXRlIG9mIHRoZSBiYXNlIHZhbHVlcyAodW50b3VjaGVkIHBhZCkKKyAqIEBBVFBfU1RBVFVTX0ZST01fUkVTRVQ6IFJlc2V0IHByZXZpb3VzbHkgcGVyZm9ybWVkCisgKi8KK2VudW0gYXRwX3N0YXR1c19iaXRzIHsKKwlBVFBfU1RBVFVTX0JVVFRPTgk9IEJJVCgwKSwKKwlBVFBfU1RBVFVTX0JBU0VfVVBEQVRFCT0gQklUKDIpLAorCUFUUF9TVEFUVVNfRlJPTV9SRVNFVAk9IEJJVCg0KSwKK307CisKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgYXRwIHsKIAljaGFyCQkJcGh5c1s2NF07CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkvKiB1c2IgZGV2aWNlICovCiAJc3RydWN0IHVyYgkJKnVyYjsJCS8qIHVzYiByZXF1ZXN0IGJsb2NrICovCi0Jc2lnbmVkIGNoYXIJCSpkYXRhOwkJLyogdHJhbnNmZXJyZWQgZGF0YSAqLworCXU4CQkJKmRhdGE7CQkvKiB0cmFuc2ZlcnJlZCBkYXRhICovCiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CQkvKiBpbnB1dCBkZXYgKi8KIAllbnVtIGF0cF90b3VjaHBhZF90eXBlCXR5cGU7CQkvKiB0eXBlIG9mIHRvdWNocGFkICovCiAJYm9vbAkJCW9wZW47CkBAIC0yNTEsOCArMjY3LDYgQEAKIAlpbnQgcmV0dmFsOwogCiAJZHByaW50aygiYXBwbGV0b3VjaDogcHV0dGluZyBhcHBsZXRvdWNoIHRvIHNsZWVwIChyZWluaXQpXG4iKTsKLQlkZXYtPmlkbGVjb3VudCA9IDA7Ci0KIAlhdHBfZ2V5c2VyX2luaXQodWRldik7CiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0FUT01JQyk7CkBAIC0zMjcsMTEgKzM0MSwxNCBAQAogCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX1RSSVBMRVRBUCwgZmluZ2VycyA+IDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdHBfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQorLyogQ2hlY2sgVVJCIHN0YXR1cyBhbmQgZm9yIGNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcGFja2FnZSAqLworCisjZGVmaW5lIEFUUF9VUkJfU1RBVFVTX1NVQ0NFU1MJCTAKKyNkZWZpbmUgQVRQX1VSQl9TVEFUVVNfRVJST1IJCTEKKyNkZWZpbmUgQVRQX1VSQl9TVEFUVVNfRVJST1JfRkFUQUwJMgorCitzdGF0aWMgaW50IGF0cF9zdGF0dXNfY2hlY2soc3RydWN0IHVyYiAqdXJiKQogewotCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7Ci0JaW50IHJldHZhbCwgaSwgajsKLQlpbnQga2V5OwogCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKQEAgLTM1MSwxMSArMzY4LDEyIEBACiAJCS8qIFRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiYXRwX2NvbXBsZXRlOiB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAogCQkgICAgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CisJCXJldHVybiBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTDsKKwogCWRlZmF1bHQ6CiAJCWRiZygiYXRwX2NvbXBsZXRlOiBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKIAkJICAgIHVyYi0+c3RhdHVzKTsKLQkJZ290byBleGl0OworCQlyZXR1cm4gQVRQX1VSQl9TVEFUVVNfRVJST1I7CiAJfQogCiAJLyogZHJvcCBpbmNvbXBsZXRlIGRhdGFzZXRzICovCkBAIC0zNjMsMzAgKzM4MSwzMyBAQAogCQlkcHJpbnRrKCJhcHBsZXRvdWNoOiBpbmNvbXBsZXRlIGRhdGEgcGFja2FnZSIKIAkJCSIgKGZpcnN0IGJ5dGU6ICVkLCBsZW5ndGg6ICVkKS5cbiIsCiAJCQlkZXYtPmRhdGFbMF0sIGRldi0+dXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJZ290byBleGl0OworCQlyZXR1cm4gQVRQX1VSQl9TVEFUVVNfRVJST1I7CiAJfQogCisJcmV0dXJuIEFUUF9VUkJfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBVU0IgaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucworICovCisKKy8qIEludGVycnVwdCBmdW5jdGlvbiBmb3Igb2xkZXIgdG91Y2hwYWRzOiBGT1VOVEFJTi9HRVlTRVIxL0dFWVNFUjIgKi8KKworc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlX2dleXNlcl8xXzIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7CisJaW50IHJldHZhbCwgaSwgajsKKwlpbnQga2V5OworCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzID0gYXRwX3N0YXR1c19jaGVjayh1cmIpOworCisJaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTCkKKwkJcmV0dXJuOworCWVsc2UgaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUikKKwkJZ290byBleGl0OworCiAJLyogcmVvcmRlciB0aGUgc2Vuc29ycyB2YWx1ZXMgKi8KLQlpZiAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIzIHx8IGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSNCkgewotCQltZW1zZXQoZGV2LT54eV9jdXIsIDAsIHNpemVvZihkZXYtPnh5X2N1cikpOwotCi0JCS8qCi0JCSAqIFRoZSB2YWx1ZXMgYXJlIGxhaWQgb3V0IGxpa2UgdGhpczoKLQkJICogLSwgWTEsIFkyLCAtLCBZMywgWTQsIC0sIC4uLiwgLSwgWDEsIFgyLCAtLCBYMywgWDQsIC4uLgotCQkgKiAnLScgaXMgYW4gdW51c2VkIHZhbHVlLgotCQkgKi8KLQotCQkvKiByZWFkIFggdmFsdWVzICovCi0JCWZvciAoaSA9IDAsIGogPSAxOTsgaSA8IDIwOyBpICs9IDIsIGogKz0gMykgewotCQkJZGV2LT54eV9jdXJbaV0gPSBkZXYtPmRhdGFbaiArIDFdOwotCQkJZGV2LT54eV9jdXJbaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKLQkJfQotCQkvKiByZWFkIFkgdmFsdWVzICovCi0JCWZvciAoaSA9IDAsIGogPSAxOyBpIDwgOTsgaSArPSAyLCBqICs9IDMpIHsKLQkJCWRldi0+eHlfY3VyW0FUUF9YU0VOU09SUyArIGldID0gZGV2LT5kYXRhW2ogKyAxXTsKLQkJCWRldi0+eHlfY3VyW0FUUF9YU0VOU09SUyArIGkgKyAxXSA9IGRldi0+ZGF0YVtqICsgMl07Ci0JCX0KLQl9IGVsc2UgaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikgeworCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpIHsKIAkJbWVtc2V0KGRldi0+eHlfY3VyLCAwLCBzaXplb2YoZGV2LT54eV9jdXIpKTsKIAogCQkvKgpAQCAtNDI3LDM0ICs0NDgsNDAgQEAKIAkJLyogZmlyc3Qgc2FtcGxlICovCiAJCWRldi0+dmFsaWQgPSB0cnVlOwogCQlkZXYtPnhfb2xkID0gZGV2LT55X29sZCA9IC0xOworCisJCS8qIFN0b3JlIGZpcnN0IHNhbXBsZSAqLwogCQltZW1jcHkoZGV2LT54eV9vbGQsIGRldi0+eHlfY3VyLCBzaXplb2YoZGV2LT54eV9vbGQpKTsKIAotCQlpZiAoZGV2LT5zaXplX2RldGVjdF9kb25lIHx8Ci0JCSAgICBkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjMpIC8qIE5vIDE3IiBNYWNib29rcyAoeWV0KSAqLworCQkvKiBQZXJmb3JtIHNpemUgZGV0ZWN0aW9uLCBpZiBub3QgZG9uZSBhbHJlYWR5ICovCisJCWlmICghZGV2LT5zaXplX2RldGVjdF9kb25lKSB7CisKKwkJCS8qIDE3IiBQb3dlcmJvb2tzIGhhdmUgZXh0cmEgWCBzZW5zb3JzICovCisJCQlmb3IgKGkgPSAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIyID8gMTUgOiAxNik7CisJCQkgICAgIGkgPCBBVFBfWFNFTlNPUlM7IGkrKykgeworCQkJCWlmICghZGV2LT54eV9jdXJbaV0pCisJCQkJCWNvbnRpbnVlOworCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiYXBwbGV0b3VjaDogMTdcIiBtb2RlbCBkZXRlY3RlZC5cbiIpOworCisJCQkJaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikKKwkJCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgKDIwIC0gMSkgKgorCQkJCQkJCSAgICAgQVRQX1hGQUNUIC0gMSwKKwkJCQkJCQkgICAgIEFUUF9GVVpaLCAwKTsKKwkJCQllbHNlCisJCQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldi0+aW5wdXQsIEFCU19YLAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgICgyNiAtIDEpICoKKwkJCQkJCQkgICAgIEFUUF9YRkFDVCAtIDEsCisJCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWRldi0+c2l6ZV9kZXRlY3RfZG9uZSA9IDE7CiAJCQlnb3RvIGV4aXQ7Ci0KLQkJLyogMTciIFBvd2VyYm9va3MgaGF2ZSBleHRyYSBYIHNlbnNvcnMgKi8KLQkJZm9yIChpID0gKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMiA/IDE1IDogMTYpOwotCQkgICAgIGkgPCBBVFBfWFNFTlNPUlM7IGkrKykgewotCQkJaWYgKCFkZXYtPnh5X2N1cltpXSkKLQkJCQljb250aW51ZTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYXBwbGV0b3VjaDogMTdcIiBtb2RlbCBkZXRlY3RlZC5cbiIpOwotCQkJaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYtPmlucHV0LCBBQlNfWCwgMCwKLQkJCQkJCSAgICAgKDIwIC0gMSkgKgotCQkJCQkJICAgICBBVFBfWEZBQ1QgLSAxLAotCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7Ci0JCQllbHNlCi0JCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsIDAsCi0JCQkJCQkgICAgIChBVFBfWFNFTlNPUlMgLSAxKSAqCi0JCQkJCQkgICAgIEFUUF9YRkFDVCAtIDEsCi0JCQkJCQkgICAgIEFUUF9GVVpaLCAwKTsKLQkJCWJyZWFrOwogCQl9Ci0KLQkJZGV2LT5zaXplX2RldGVjdF9kb25lID0gMTsKLQkJZ290byBleGl0OwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBVFBfWFNFTlNPUlMgKyBBVFBfWVNFTlNPUlM7IGkrKykgewpAQCAtNDc1LDcgKzUwMiwxMTggQEAKIAkJCSAgICAgIEFUUF9YRkFDVCwgJnhfeiwgJnhfZik7CiAJeSA9IGF0cF9jYWxjdWxhdGVfYWJzKGRldi0+eHlfYWNjICsgQVRQX1hTRU5TT1JTLCBBVFBfWVNFTlNPUlMsCiAJCQkgICAgICBBVFBfWUZBQ1QsICZ5X3osICZ5X2YpOwotCWtleSA9IGRldi0+ZGF0YVtkZXYtPmRhdGFsZW4gLSAxXSAmIDE7CisJa2V5ID0gZGV2LT5kYXRhW2Rldi0+ZGF0YWxlbiAtIDFdICYgQVRQX1NUQVRVU19CVVRUT047CisKKwlpZiAoeCAmJiB5KSB7CisJCWlmIChkZXYtPnhfb2xkICE9IC0xKSB7CisJCQl4ID0gKGRldi0+eF9vbGQgKiAzICsgeCkgPj4gMjsKKwkJCXkgPSAoZGV2LT55X29sZCAqIDMgKyB5KSA+PiAyOworCQkJZGV2LT54X29sZCA9IHg7CisJCQlkZXYtPnlfb2xkID0geTsKKworCQkJaWYgKGRlYnVnID4gMSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiYXBwbGV0b3VjaDogIgorCQkJCQkiWDogJTNkIFk6ICUzZCBYejogJTNkIFl6OiAlM2RcbiIsCisJCQkJCXgsIHksIHhfeiwgeV96KTsKKworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldi0+aW5wdXQsIEFCU19ZLCB5KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LT5pbnB1dCwgQUJTX1BSRVNTVVJFLAorCQkJCQkgbWluKEFUUF9QUkVTU1VSRSwgeF96ICsgeV96KSk7CisJCQlhdHBfcmVwb3J0X2ZpbmdlcnMoZGV2LT5pbnB1dCwgbWF4KHhfZiwgeV9mKSk7CisJCX0KKwkJZGV2LT54X29sZCA9IHg7CisJCWRldi0+eV9vbGQgPSB5OworCisJfSBlbHNlIGlmICgheCAmJiAheSkgeworCisJCWRldi0+eF9vbGQgPSBkZXYtPnlfb2xkID0gLTE7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LT5pbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0LCBBQlNfUFJFU1NVUkUsIDApOworCQlhdHBfcmVwb3J0X2ZpbmdlcnMoZGV2LT5pbnB1dCwgMCk7CisKKwkJLyogcmVzZXQgdGhlIGFjY3VtdWxhdG9yIG9uIHJlbGVhc2UgKi8KKwkJbWVtc2V0KGRldi0+eHlfYWNjLCAwLCBzaXplb2YoZGV2LT54eV9hY2MpKTsKKwl9CisKKwlpbnB1dF9yZXBvcnRfa2V5KGRldi0+aW5wdXQsIEJUTl9MRUZULCBrZXkpOworCWlucHV0X3N5bmMoZGV2LT5pbnB1dCk7CisKKyBleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoImF0cF9jb21wbGV0ZTogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgIHJldHZhbCk7Cit9CisKKy8qIEludGVycnVwdCBmdW5jdGlvbiBmb3Igb2xkZXIgdG91Y2hwYWRzOiBHRVlTRVIzL0dFWVNFUjQgKi8KKworc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlX2dleXNlcl8zXzQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7CisJaW50IHJldHZhbCwgaSwgajsKKwlpbnQga2V5OworCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzID0gYXRwX3N0YXR1c19jaGVjayh1cmIpOworCisJaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTCkKKwkJcmV0dXJuOworCWVsc2UgaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUikKKwkJZ290byBleGl0OworCisJLyogUmVvcmRlciB0aGUgc2Vuc29ycyB2YWx1ZXM6CisJICoKKwkgKiBUaGUgdmFsdWVzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXM6CisJICogLSwgWTEsIFkyLCAtLCBZMywgWTQsIC0sIC4uLiwgLSwgWDEsIFgyLCAtLCBYMywgWDQsIC4uLgorCSAqICctJyBpcyBhbiB1bnVzZWQgdmFsdWUuCisJICovCisKKwkvKiByZWFkIFggdmFsdWVzICovCisJZm9yIChpID0gMCwgaiA9IDE5OyBpIDwgMjA7IGkgKz0gMiwgaiArPSAzKSB7CisJCWRldi0+eHlfY3VyW2ldID0gZGV2LT5kYXRhW2ogKyAxXTsKKwkJZGV2LT54eV9jdXJbaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKKwl9CisJLyogcmVhZCBZIHZhbHVlcyAqLworCWZvciAoaSA9IDAsIGogPSAxOyBpIDwgOTsgaSArPSAyLCBqICs9IDMpIHsKKwkJZGV2LT54eV9jdXJbQVRQX1hTRU5TT1JTICsgaV0gPSBkZXYtPmRhdGFbaiArIDFdOworCQlkZXYtPnh5X2N1cltBVFBfWFNFTlNPUlMgKyBpICsgMV0gPSBkZXYtPmRhdGFbaiArIDJdOworCX0KKworCWRiZ19kdW1wKCJzYW1wbGUiLCBkZXYtPnh5X2N1cik7CisKKwkvKiBKdXN0IHVwZGF0ZSB0aGUgYmFzZSB2YWx1ZXMgKGkuZS4gdG91Y2hwYWQgaW4gdW50b3VjaGVkIHN0YXRlKSAqLworCWlmIChkZXYtPmRhdGFbZGV2LT5kYXRhbGVuIC0gMV0gJiBBVFBfU1RBVFVTX0JBU0VfVVBEQVRFKSB7CisKKwkJZHByaW50ayhLRVJOX0RFQlVHICJhcHBsZXRvdWNoOiB1cGRhdGVkIGJhc2UgdmFsdWVzXG4iKTsKKworCQltZW1jcHkoZGV2LT54eV9vbGQsIGRldi0+eHlfY3VyLCBzaXplb2YoZGV2LT54eV9vbGQpKTsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBVFBfWFNFTlNPUlMgKyBBVFBfWVNFTlNPUlM7IGkrKykgeworCQkvKiBjYWxjdWxhdGUgdGhlIGNoYW5nZSAqLworCQlkZXYtPnh5X2FjY1tpXSA9IGRldi0+eHlfY3VyW2ldIC0gZGV2LT54eV9vbGRbaV07CisKKwkJLyogdGhpcyBpcyBhIHJvdW5kLXJvYmluIHZhbHVlLCBzbyBjb3VwbGUgd2l0aCB0aGF0ICovCisJCWlmIChkZXYtPnh5X2FjY1tpXSA+IDEyNykKKwkJCWRldi0+eHlfYWNjW2ldIC09IDI1NjsKKworCQlpZiAoZGV2LT54eV9hY2NbaV0gPCAtMTI3KQorCQkJZGV2LT54eV9hY2NbaV0gKz0gMjU2OworCisJCS8qIHByZXZlbnQgZG93biBkcmlmdGluZyAqLworCQlpZiAoZGV2LT54eV9hY2NbaV0gPCAwKQorCQkJZGV2LT54eV9hY2NbaV0gPSAwOworCX0KKworCWRiZ19kdW1wKCJhY2N1bXVsYXRvciIsIGRldi0+eHlfYWNjKTsKKworCXggPSBhdHBfY2FsY3VsYXRlX2FicyhkZXYtPnh5X2FjYywgQVRQX1hTRU5TT1JTLAorCQkJICAgICAgQVRQX1hGQUNULCAmeF96LCAmeF9mKTsKKwl5ID0gYXRwX2NhbGN1bGF0ZV9hYnMoZGV2LT54eV9hY2MgKyBBVFBfWFNFTlNPUlMsIEFUUF9ZU0VOU09SUywKKwkJCSAgICAgIEFUUF9ZRkFDVCwgJnlfeiwgJnlfZik7CisJa2V5ID0gZGV2LT5kYXRhW2Rldi0+ZGF0YWxlbiAtIDFdICYgQVRQX1NUQVRVU19CVVRUT047CiAKIAlpZiAoeCAmJiB5KSB7CiAJCWlmIChkZXYtPnhfb2xkICE9IC0xKSB7CkBAIC01MTQsMjggKzY1MiwyNyBAQAogCWlucHV0X3N5bmMoZGV2LT5pbnB1dCk7CiAKIAkvKgotCSAqIE1hbnkgR2V5c2VycyB3aWxsIGNvbnRpbnVlIHRvIHNlbmQgcGFja2V0cyBjb250aW51YWxseSBhZnRlcgorCSAqIEdleXNlcnMgMy80IHdpbGwgY29udGludWUgdG8gc2VuZCBwYWNrZXRzIGNvbnRpbnVhbGx5IGFmdGVyCiAJICogdGhlIGZpcnN0IHRvdWNoIHVubGVzcyByZWluaXRpYWxpc2VkLiBEbyBzbyBpZiBpdCdzIGJlZW4KIAkgKiBpZGxlIGZvciBhIHdoaWxlIGluIG9yZGVyIHRvIGF2b2lkIHdha2luZyB0aGUga2VybmVsIHVwCi0JICogc2V2ZXJhbCBodW5kcmVkIHRpbWVzIGEgc2Vjb25kLiBSZS1pbml0aWFsaXphdGlvbiBkb2VzIG5vdAotCSAqIHdvcmsgb24gRm91bnRhaW4gdG91Y2hwYWRzLgorCSAqIHNldmVyYWwgaHVuZHJlZCB0aW1lcyBhIHNlY29uZC4KIAkgKi8KLQlpZiAoZGV2LT50eXBlICE9IEFUUF9GT1VOVEFJTikgewotCQkvKgotCQkgKiBCdXR0b24gbXVzdCBub3QgYmUgcHJlc3NlZCB3aGVuIGVudGVyaW5nIHN1c3BlbmQsCi0JCSAqIG90aGVyd2lzZSB3ZSB3aWxsIG5ldmVyIHJlbGVhc2UgdGhlIGJ1dHRvbi4KLQkJICovCi0JCWlmICgheCAmJiAheSAmJiAha2V5KSB7Ci0JCQlkZXYtPmlkbGVjb3VudCsrOwotCQkJaWYgKGRldi0+aWRsZWNvdW50ID09IDEwKSB7Ci0JCQkJZGV2LT52YWxpZCA9IGZhbHNlOwotCQkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7Ci0JCQkJLyogRG9uJ3QgcmVzdWJtaXQgdXJiIGhlcmUsIHdhaXQgZm9yIHJlaW5pdCAqLwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlCisKKwkvKgorCSAqIEJ1dHRvbiBtdXN0IG5vdCBiZSBwcmVzc2VkIHdoZW4gZW50ZXJpbmcgc3VzcGVuZCwKKwkgKiBvdGhlcndpc2Ugd2Ugd2lsbCBuZXZlciByZWxlYXNlIHRoZSBidXR0b24uCisJICovCisJaWYgKCF4ICYmICF5ICYmICFrZXkpIHsKKwkJZGV2LT5pZGxlY291bnQrKzsKKwkJaWYgKGRldi0+aWRsZWNvdW50ID09IDEwKSB7CisJCQlkZXYtPnhfb2xkID0gZGV2LT55X29sZCA9IC0xOwogCQkJZGV2LT5pZGxlY291bnQgPSAwOwotCX0KKwkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7CisJCQkvKiBEb24ndCByZXN1Ym1pdCB1cmIgaGVyZSwgd2FpdCBmb3IgcmVpbml0ICovCisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UKKwkJZGV2LT5pZGxlY291bnQgPSAwOwogCiAgZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0FUT01JQyk7CkBAIC02MzIsOSArNzY5LDE5IEBACiAJaWYgKCFkZXYtPmRhdGEpCiAJCWdvdG8gZXJyX2ZyZWVfdXJiOwogCi0JdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwgdWRldiwKLQkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBpbnRfaW5fZW5kcG9pbnRBZGRyKSwKLQkJCSBkZXYtPmRhdGEsIGRldi0+ZGF0YWxlbiwgYXRwX2NvbXBsZXRlLCBkZXYsIDEpOworCS8qIFNlbGVjdCB0aGUgVVNCIGNvbXBsZXRlIChjYWxsYmFjaykgZnVuY3Rpb24gKi8KKwlpZiAoZGV2LT50eXBlID09IEFUUF9GT1VOVEFJTiB8fAorCSAgICBkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjEgfHwKKwkgICAgZGV2LT50eXBlID09IEFUUF9HRVlTRVIyKQorCQl1c2JfZmlsbF9pbnRfdXJiKGRldi0+dXJiLCB1ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBpbnRfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCQkgZGV2LT5kYXRhLCBkZXYtPmRhdGFsZW4sCisJCQkJIGF0cF9jb21wbGV0ZV9nZXlzZXJfMV8yLCBkZXYsIDEpOworCWVsc2UKKwkJdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwgdWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUodWRldiwgaW50X2luX2VuZHBvaW50QWRkciksCisJCQkJIGRldi0+ZGF0YSwgZGV2LT5kYXRhbGVuLAorCQkJCSBhdHBfY29tcGxldGVfZ2V5c2VyXzNfNCwgZGV2LCAxKTsKIAogCWVycm9yID0gYXRwX2hhbmRsZV9nZXlzZXIoZGV2KTsKIAlpZiAoZXJyb3IpCkBAIC03NTEsOCArODk4LDYgQEAKIAlzdHJ1Y3QgYXRwICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIAogCXVzYl9raWxsX3VyYihkZXYtPnVyYik7Ci0JZGV2LT52YWxpZCA9IGZhbHNlOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyZDM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogT0xQQyBIR1BLIChYTy0xKSB0b3VjaHBhZCBQUy8yIG1vdXNlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IE9uZSBMYXB0b3AgUGVyIENoaWxkCisgKiBBdXRob3JzOgorICogICBaZXBoYW5pYWggRS4gSHVsbAorICogICBBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAZGViaWFuLm9yZz4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBwYXJ0bHkgYmFzZWQgb24gdGhlIEFMUFMgZHJpdmVyLCB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTmVpbCBCcm93biA8bmVpbGJAY3NlLnVuc3cuZWR1LmF1PgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgUGV0ZXIgT3N0ZXJsdW5kIDxwZXRlcm8yQHRlbGlhLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRoZSBzcGVjIGZyb20gQUxQUyBpcyBhdmFpbGFibGUgZnJvbQorICogPGh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vVG91Y2hfUGFkL1RhYmxldD4uICBJdCByZWZlcnMgdG8gdGhpcworICogZGV2aWNlIGFzIEhHUEsgKEh5YnJpZCBHUywgUFQsIGFuZCBLZXltYXRyaXgpLgorICoKKyAqIFRoZSBlYXJsaWVzdCB2ZXJzaW9ucyBvZiB0aGUgZGV2aWNlIGhhZCBzaW11bHRhbmVvdXMgcmVwb3J0aW5nOyB0aGF0CisgKiB3YXMgcmVtb3ZlZC4gIEFmdGVyIHRoYXQsIHRoZSBkZXZpY2UgdXNlZCB0aGUgQWR2YW5jZWQgTW9kZSBHUy9QVCBzdHJlYW1pbmcKKyAqIHN0dWZmLiAgVGhhdCB0dXJuZWQgb3V0IHRvIGJlIHRvbyBidWdneSB0byBzdXBwb3J0LCBzbyB3ZSd2ZSBmaW5hbGx5CisgKiBzd2l0Y2hlZCB0byBNb3VzZSBNb2RlICh3aGljaCB1dGlsaXplcyBvbmx5IHRoZSBjZW50ZXIgMS8zIG9mIHRoZSB0b3VjaHBhZCkuCisgKi8KKworI2RlZmluZSBERUJVRworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9saWJwczIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9vbHBjLmg+CisKKyNpbmNsdWRlICJwc21vdXNlLmgiCisjaW5jbHVkZSAiaGdway5oIgorCitzdGF0aWMgaW50IHRwZGVidWc7Cittb2R1bGVfcGFyYW0odHBkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHBkZWJ1ZywgImVuYWJsZSBkZWJ1Z2dpbmcsIGR1bXBpbmcgcGFja2V0cyB0byBLRVJOX0RFQlVHLiIpOworCitzdGF0aWMgaW50IHJlY2FsaWJfZGVsdGEgPSAxMDA7Cittb2R1bGVfcGFyYW0ocmVjYWxpYl9kZWx0YSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVjYWxpYl9kZWx0YSwKKwkicGFja2V0cyBjb250YWluaW5nIGEgZGVsdGEgdGhpcyBsYXJnZSB3aWxsIGNhdXNlIGEgcmVjYWxpYnJhdGlvbi4iKTsKKworLyoKKyAqIFdoZW4gdGhlIHRvdWNocGFkIGdldHMgdWx0cmEtc2Vuc2l0aXZlLCBvbmUgY2FuIGtlZXAgdGhlaXIgZmluZ2VyIDEvMiIKKyAqIGFib3ZlIHRoZSBwYWQgYW5kIHN0aWxsIGhhdmUgaXQgc2VuZCBwYWNrZXRzLiAgVGhpcyBjYXVzZXMgYSBqdW1wIGN1cnNvcgorICogd2hlbiBvbmUgcGxhY2VzIHRoZWlyIGZpbmdlciBvbiB0aGUgcGFkLiAgV2UgY2FuIHByb2JhYmx5IGRldGVjdCB0aGUKKyAqIGp1bXAgYXMgd2Ugc2VlIGEgbGFyZ2UgZGVsdGFzICg+PSAxMDBweCkuICBJbiBtb3VzZSBtb2RlLCBJJ3ZlIGJlZW4KKyAqIHVuYWJsZSB0byBldmVuIGNvbWUgY2xvc2UgdG8gMTAwcHggZGVsdGFzIGR1cmluZyBub3JtYWwgdXNhZ2UsIHNvIEkgdGhpbmsKKyAqIHRoaXMgdGhyZXNob2xkIGlzIHNhZmUuICBJZiBhIGxhcmdlIGRlbHRhIG9jY3VycywgdHJpZ2dlciBhIHJlY2FsaWJyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGhncGtfanVtcHlfaGFjayhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHgsIGludCB5KQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJaWYgKGFicyh4KSA+IHJlY2FsaWJfZGVsdGEgfHwgYWJzKHkpID4gcmVjYWxpYl9kZWx0YSkgeworCQloZ3BrX2Vycihwc21vdXNlLCAiPiVkcHgganVtcCBkZXRlY3RlZCAoJWQsJWQpXG4iLAorCQkJCXJlY2FsaWJfZGVsdGEsIHgsIHkpOworCQkvKiBNeSBjYXIgZ2V0cyBmb3J0eSByb2RzIHRvIHRoZSBob2dzaGVhZCBhbmQgdGhhdCdzIHRoZQorCQkgKiB3YXkgSSBsaWtlcyBpdCEgKi8KKwkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCX0KK30KKworLyoKKyAqIFdlIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGJ1ZyBvY2N1cnMuICBUaGUgdG91Y2hwYWQKKyAqIHdpbGwgcmFuZG9tbHkgc3RhcnQgc3Bld2luZyBwYWNrZXRzIHdpdGhvdXQgYW55dGhpbmcgdG91Y2hpbmcgdGhlCisgKiBwYWQuICBUaGlzIHdvdWxkbid0IG5lY2Vzc2FyaWx5IGJlIGJhZCwgYnV0IGl0J3MgaW5kaWNhdGl2ZSBvZiBhCisgKiBzZXZlcmVseSBtaXNjYWxpYnJhdGVkIHBhZDsgYXR0ZW1wdGluZyB0byB1c2UgdGhlIHRvdWNocGFkIHdoaWxlIGl0J3MKKyAqIHNwZXdpbmcgbWVhbnMgdGhlIGN1cnNvciB3aWxsIGp1bXAgYWxsIG92ZXIgdGhlIHBsYWNlLCBhbmQgYWN0ICJkcnVuayIuCisgKgorICogVGhlIHBhY2tldHMgdGhhdCBhcmUgc3Bld2VkIHRlbmQgdG8gYWxsIGhhdmUgZGVsdGFzIGJldHdlZW4gLTIgYW5kIDIsIGFuZAorICogdGhlIGN1cnNvciB3aWxsIG1vdmUgYXJvdW5kIHdpdGhvdXQgcmVhbGx5IGdvaW5nIHZlcnkgZmFyLiAgSXQgd2lsbAorICogdGVuZCB0byBlbmQgdXAgaW4gdGhlIHNhbWUgbG9jYXRpb247IGlmIHdlIHRhbGx5IHVwIHRoZSBjaGFuZ2VzIG92ZXIKKyAqIDEwMCBwYWNrZXRzLCB3ZSBlbmQgdXAgdy8gYSBmaW5hbCBkZWx0YSBvZiBjbG9zZSB0byAwLiAgVGhpcyBoYXBwZW5zCisgKiBwcmV0dHkgcmVndWxhcmx5IHdoZW4gdGhlIHRvdWNocGFkIGlzIHNwZXdpbmcsIGFuZCBpcyBwcmV0dHkgaGFyZCB0bworICogbWFudWFsbHkgdHJpZ2dlciAoYXQgbGVhc3QgZm9yICpteSogZmluZ2VycykuICBTbywgaXQgbWFrZXMgYSBwZXJmZWN0CisgKiBzY2hlbWUgZm9yIGRldGVjdGluZyBzcGV3cy4KKyAqLworc3RhdGljIHZvaWQgaGdwa19zcGV3aW5nX2hhY2soc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkgICAgICBpbnQgbCwgaW50IHIsIGludCB4LCBpbnQgeSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCS8qIGlnbm9yZSBidXR0b24gcHJlc3MgcGFja2V0czsgbWFueSBpbiBhIHJvdyBjb3VsZCB0cmlnZ2VyCisJICogYSBmYWxzZS1wb3NpdGl2ZSEgKi8KKwlpZiAobCB8fCByKQorCQlyZXR1cm47CisKKwlwcml2LT54X3RhbGx5ICs9IHg7CisJcHJpdi0+eV90YWxseSArPSB5OworCisJaWYgKCsrcHJpdi0+Y291bnQgPiAxMDApIHsKKwkJaWYgKGFicyhwcml2LT54X3RhbGx5KSA8IDMgJiYgYWJzKHByaXYtPnlfdGFsbHkpIDwgMykgeworCQkJaGdwa19kYmcocHNtb3VzZSwgInBhY2tldCBzcGV3IGRldGVjdGVkICglZCwlZClcbiIsCisJCQkJIHByaXYtPnhfdGFsbHksIHByaXYtPnlfdGFsbHkpOworCQkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwkJfQorCQkvKiByZXNldCBldmVyeSAxMDAgcGFja2V0cyAqLworCQlwcml2LT5jb3VudCA9IDA7CisJCXByaXYtPnhfdGFsbHkgPSAwOworCQlwcml2LT55X3RhbGx5ID0gMDsKKwl9Cit9CisKKy8qCisgKiBIR1BLIE1vdXNlIE1vZGUgZm9ybWF0IChzdGFuZGFyZCBtb3VzZSBmb3JtYXQsIHNhbnMgbWlkZGxlIGJ1dHRvbikKKyAqCisgKiBieXRlIDA6CXktb3Zlcgl4LW92ZXIJeS1uZWcJeC1uZWcJMQkwCXN3cglzd2wKKyAqIGJ5dGUgMToJeDcJeDYJeDUJeDQJeDMJeDIJeDEJeDAKKyAqIGJ5dGUgMjoJeTcJeTYJeTUJeTQJeTMJeTIJeTEJeTAKKyAqCisgKiBzd3Ivc3dsIGFyZSB0aGUgbGVmdC9yaWdodCBidXR0b25zLgorICogeC1uZWcveS1uZWcgYXJlIHRoZSB4IGFuZCB5IGRlbHRhIG5lZ2F0aXZlIGJpdHMKKyAqIHgtb3Zlci95LW92ZXIgYXJlIHRoZSB4IGFuZCB5IG92ZXJmbG93IGJpdHMKKyAqLworc3RhdGljIGludCBoZ3BrX3ZhbGlkYXRlX2J5dGUodW5zaWduZWQgY2hhciAqcGFja2V0KQoreworCXJldHVybiAocGFja2V0WzBdICYgMHgwQykgPT0gMHgwODsKK30KKworc3RhdGljIHZvaWQgaGdwa19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CisJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OworCWludCB4LCB5LCBsZWZ0LCByaWdodDsKKworCWxlZnQgPSBwYWNrZXRbMF0gJiAxOworCXJpZ2h0ID0gKHBhY2tldFswXSA+PiAxKSAmIDE7CisKKwl4ID0gcGFja2V0WzFdIC0gKChwYWNrZXRbMF0gPDwgNCkgJiAweDEwMCk7CisJeSA9ICgocGFja2V0WzBdIDw8IDMpICYgMHgxMDApIC0gcGFja2V0WzJdOworCisJaGdwa19qdW1weV9oYWNrKHBzbW91c2UsIHgsIHkpOworCWhncGtfc3Bld2luZ19oYWNrKHBzbW91c2UsIGxlZnQsIHJpZ2h0LCB4LCB5KTsKKworCWlmICh0cGRlYnVnKQorCQloZ3BrX2RiZyhwc21vdXNlLCAibD0lZCByPSVkIHg9JWQgeT0lZFxuIiwgbGVmdCwgcmlnaHQsIHgsIHkpOworCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBsZWZ0KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCByaWdodCk7CisKKwlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIHgpOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgeSk7CisKKwlpbnB1dF9zeW5jKGRldik7Cit9CisKK3N0YXRpYyBwc21vdXNlX3JldF90IGhncGtfcHJvY2Vzc19ieXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJaWYgKGhncGtfdmFsaWRhdGVfYnl0ZShwc21vdXNlLT5wYWNrZXQpKSB7CisJCWhncGtfZGJnKHBzbW91c2UsICIlczogKCVkKSAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCQlfX2Z1bmNfXywgcHNtb3VzZS0+cGt0Y250LCBwc21vdXNlLT5wYWNrZXRbMF0sCisJCQkJcHNtb3VzZS0+cGFja2V0WzFdLCBwc21vdXNlLT5wYWNrZXRbMl0pOworCQlyZXR1cm4gUFNNT1VTRV9CQURfREFUQTsKKwl9CisKKwlpZiAocHNtb3VzZS0+cGt0Y250ID49IHBzbW91c2UtPnBrdHNpemUpIHsKKwkJaGdwa19wcm9jZXNzX3BhY2tldChwc21vdXNlKTsKKwkJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CisJfQorCisJaWYgKHByaXYtPnJlY2FsaWJfd2luZG93KSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBwcml2LT5yZWNhbGliX3dpbmRvdykpIHsKKwkJCS8qCisJCQkgKiB1Z2gsIGdvdCBhIHBhY2tldCBpbnNpZGUgb3VyIHJlY2FsaWJyYXRpb24KKwkJCSAqIHdpbmRvdywgc2NoZWR1bGUgYW5vdGhlciByZWNhbGlicmF0aW9uLgorCQkJICovCisJCQloZ3BrX2RiZyhwc21vdXNlLAorCQkJCSAicGFja2V0IGluc2lkZSBjYWxpYnJhdGlvbiB3aW5kb3csICIKKwkJCQkgInF1ZXVlaW5nIGFub3RoZXIgcmVjYWxpYnJhdGlvblxuIik7CisJCQlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnByaXYtPnJlY2FsaWJfd3EsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCQl9CisJCXByaXYtPnJlY2FsaWJfd2luZG93ID0gMDsKKwl9CisKKwlyZXR1cm4gUFNNT1VTRV9HT09EX0RBVEE7Cit9CisKK3N0YXRpYyBpbnQgaGdwa19mb3JjZV9yZWNhbGlicmF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJLyogQy1zZXJpZXMgdG91Y2hwYWRzIGFkZGVkIHRoZSByZWNhbGlicmF0ZSBjb21tYW5kICovCisJaWYgKHBzbW91c2UtPm1vZGVsIDwgSEdQS19NT0RFTF9DKQorCQlyZXR1cm4gMDsKKworCS8qIHdlIGRvbid0IHdhbnQgdG8gcmFjZSB3aXRoIHRoZSBpcnEgaGFuZGxlciwgbm9yIHdpdGggcmVzeW5jcyAqLworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSU5JVElBTElaSU5HKTsKKworCS8qIHN0YXJ0IGJ5IHJlc2V0dGluZyB0aGUgZGV2aWNlICovCisJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKworCS8qIHNlbmQgdGhlIHJlY2FsaWJyYXRlIHJlcXVlc3QgKi8KKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZjUpIHx8CisJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlNikgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJLyogYWNjb3JkaW5nIHRvIEFMUFMsIDE1MG1TIGlzIHJlcXVpcmVkIGZvciByZWNhbGlicmF0aW9uICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBYWFg6IElmIGEgZmluZ2VyIGlzIGRvd24gZHVyaW5nIHRoaXMgZGVsYXksIHJlY2FsaWJyYXRpb24gd2lsbAorCSAqIGRldGVjdCBjYXBhY2l0YW5jZSBpbmNvcnJlY3RseS4gIFRoaXMgaXMgYSBoYXJkd2FyZSBidWcsIGFuZAorCSAqIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkZWFsIHdpdGggaXQuICBUaGUgMnMgd2luZG93IHN0dWZmCisJICogKGJlbG93KSBpcyBvdXIgYmVzdCBvcHRpb24gZm9yIG5vdy4KKwkgKi8KKworCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSkpCisJCXJldHVybiAtMTsKKworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQUNUSVZBVEVEKTsKKworCS8qIEFmdGVyIHdlIHJlY2FsaWJyYXRlLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBwYWNrZXRzIGZvciAycy4gIElmCisJICogd2UgZG8sIGl0J3MgbGlrZWx5IHRoYXQgc29tZW9uZSdzIGZpbmdlciB3YXMgb24gdGhlIHRvdWNocGFkLgorCSAqIElmIHNvbWVvbmUncyBmaW5nZXIgKndhcyogb24gdGhlIHRvdWNocGFkLCBpdCdzIHByb2JhYmx5CisJICogbWlzY2FsaWJyYXRlZC4gIFNvLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW5vdGhlciByZWNhbGlicmF0aW9uCisJICovCisJcHJpdi0+cmVjYWxpYl93aW5kb3cgPSBqaWZmaWVzICsgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMga2lsbHMgcG93ZXIgdG8gdGhlIHRvdWNocGFkOyBhY2NvcmRpbmcgdG8gQUxQUywgY3VycmVudCBjb25zdW1wdGlvbgorICogZ29lcyBkb3duIHRvIDUwdUEgYWZ0ZXIgcnVubmluZyB0aGlzLiAgVG8gdHVybiBwb3dlciBiYWNrIG9uLCB3ZSBkcml2ZQorICogTVMtREFUIGxvdy4KKyAqLworc3RhdGljIGludCBoZ3BrX3RvZ2dsZV9wb3dlcihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCWludCB0aW1lbzsKKworCS8qIEFkZGVkIG9uIEQtc2VyaWVzIHRvdWNocGFkcyAqLworCWlmIChwc21vdXNlLT5tb2RlbCA8IEhHUEtfTU9ERUxfRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW5hYmxlKSB7CisJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSU5JVElBTElaSU5HKTsKKworCQkvKgorCQkgKiBTZW5kaW5nIGEgYnl0ZSB3aWxsIGRyaXZlIE1TLURBVCBsb3c7IHRoaXMgd2lsbCB3YWtlIHVwCisJCSAqIHRoZSBjb250cm9sbGVyLiAgT25jZSB3ZSBnZXQgYW4gQUNLIGJhY2sgZnJvbSBpdCwgaXQKKwkJICogbWVhbnMgd2UgY2FuIGNvbnRpbnVlIHdpdGggdGhlIHRvdWNocGFkIHJlLWluaXQuICBBTFBTCisJCSAqIHRlbGxzIHVzIHRoYXQgMXMgc2hvdWxkIGJlIGxvbmcgZW5vdWdoLCBzbyBzZXQgdGhhdCBhcworCQkgKiB0aGUgdXBwZXIgYm91bmQuCisJCSAqLworCQlmb3IgKHRpbWVvID0gMjA7IHRpbWVvID4gMDsgdGltZW8tLSkgeworCQkJaWYgKCFwczJfc2VuZGJ5dGUoJnBzbW91c2UtPnBzMmRldiwKKwkJCQkJUFNNT1VTRV9DTURfRElTQUJMRSwgMjApKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDUwKTsKKwkJfQorCisJCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisKKwkJLyogc2hvdWxkIGJlIGFsbCBzZXQsIGVuYWJsZSB0aGUgdG91Y2hwYWQgKi8KKwkJcHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRU5BQkxFKTsKKwkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9BQ1RJVkFURUQpOworCisJfSBlbHNlIHsKKwkJaGdwa19kYmcocHNtb3VzZSwgIlBvd2VyaW5nIG9mZiB0b3VjaHBhZC5cbiIpOworCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CisKKwkJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYykgfHwKKwkJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYykgfHwKKwkJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYSkpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIHByb2JhYmx5IHdvbid0IHNlZSBhbiBBQ0ssIHRoZSB0b3VjaHBhZCB3aWxsIGJlIG9mZiAqLworCQlwczJfc2VuZGJ5dGUoJnBzbW91c2UtPnBzMmRldiwgMHhlYywgMjApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhncGtfcG9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwkvKiBXZSBjYW4ndCBwb2xsLCBzbyBhbHdheXMgcmV0dXJuIGZhaWx1cmUuICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGhncGtfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCS8qIER1cmluZyBzdXNwZW5kL3Jlc3VtZSB0aGUgcHMyIHJhaWxzIHJlbWFpbiBwb3dlcmVkLiAgV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGRvIGEgcmVzZXQgYmVjYXVzZSBpdCdzIGZsdXNoIGRhdGEgb3V0IG9mIGJ1ZmZlcnM7IGhvd2V2ZXIsCisJICogZWFybGllciBwcm90b3R5cGVzIChCMSkgaGFkIHNvbWUgYnJva2VubmVzcyB0aGF0IHJlcXVpcmVkIGEgcmVzZXQuICovCisJaWYgKG9scGNfYm9hcmRfYXRfbGVhc3Qob2xwY19ib2FyZCgweGIyKSkpCisJCWlmIChwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPQorCQkJCVBNX0VWRU5UX09OKQorCQkJcmV0dXJuIDA7CisKKwlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfc2hvd19wb3dlcmVkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cG93ZXJlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfc2V0X3Bvd2VyZWQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAoZXJyIHx8IHZhbHVlID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsdWUgIT0gcHJpdi0+cG93ZXJlZCkgeworCQkvKgorCQkgKiBoZ3BrX3RvZ2dsZV9wb3dlciB3aWxsIGRlYWwgdy8gc3RhdGUgc28KKwkJICogd2UncmUgbm90IHJhY2luZyB3LyBpcnEKKwkJICovCisJCWVyciA9IGhncGtfdG9nZ2xlX3Bvd2VyKHBzbW91c2UsIHZhbHVlKTsKKwkJaWYgKCFlcnIpCisJCQlwcml2LT5wb3dlcmVkID0gdmFsdWU7CisJfQorCisJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OworfQorCitfX1BTTU9VU0VfREVGSU5FX0FUVFIocG93ZXJlZCwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCSAgICAgIGhncGtfc2hvd19wb3dlcmVkLCBoZ3BrX3NldF9wb3dlcmVkLCAwKTsKKworc3RhdGljIHZvaWQgaGdwa19kaXNjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSAgICZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7CisJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgaGdwa19yZWNhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaGdwa19kYXRhLCByZWNhbGliX3dxKTsKKwlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSA9IHByaXYtPnBzbW91c2U7CisKKwloZ3BrX2RiZyhwc21vdXNlLCAicmVjYWxpYnJhdGluZyB0b3VjaHBhZC4uXG4iKTsKKworCWlmIChoZ3BrX2ZvcmNlX3JlY2FsaWJyYXRlKHBzbW91c2UpKQorCQloZ3BrX2Vycihwc21vdXNlLCAicmVjYWxpYnJhdGlvbiBmYWlsZWQhXG4iKTsKK30KKworc3RhdGljIGludCBoZ3BrX3JlZ2lzdGVyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKKwlpbnQgZXJyOworCisJLyogdW5zZXQgdGhlIHRoaW5ncyB0aGF0IHBzbW91c2UtYmFzZSBzZXRzIHdoaWNoIHdlIGRvbid0IGhhdmUgKi8KKwlfX2NsZWFyX2JpdChCVE5fTUlERExFLCBkZXYtPmtleWJpdCk7CisKKwkvKiBzZXQgdGhlIHRoaW5ncyB3ZSBkbyBoYXZlICovCisJX19zZXRfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCk7CisKKwlfX3NldF9iaXQoUkVMX1gsIGRldi0+cmVsYml0KTsKKwlfX3NldF9iaXQoUkVMX1ksIGRldi0+cmVsYml0KTsKKworCV9fc2V0X2JpdChCVE5fTEVGVCwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fUklHSFQsIGRldi0+a2V5Yml0KTsKKworCS8qIHJlZ2lzdGVyIGhhbmRsZXJzICovCisJcHNtb3VzZS0+cHJvdG9jb2xfaGFuZGxlciA9IGhncGtfcHJvY2Vzc19ieXRlOworCXBzbW91c2UtPnBvbGwgPSBoZ3BrX3BvbGw7CisJcHNtb3VzZS0+ZGlzY29ubmVjdCA9IGhncGtfZGlzY29ubmVjdDsKKwlwc21vdXNlLT5yZWNvbm5lY3QgPSBoZ3BrX3JlY29ubmVjdDsKKwlwc21vdXNlLT5wa3RzaXplID0gMzsKKworCS8qIERpc2FibGUgdGhlIGlkbGUgcmVzeW5jLiAqLworCXBzbW91c2UtPnJlc3luY190aW1lID0gMDsKKwkvKiBSZXNldCBhZnRlciBhIGxvdCBvZiBiYWQgYnl0ZXMuICovCisJcHNtb3VzZS0+cmVzZXRhZnRlciA9IDEwMjQ7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJCSAmcHNtb3VzZV9hdHRyX3Bvd2VyZWQuZGF0dHIpOworCWlmIChlcnIpCisJCWhncGtfZXJyKHBzbW91c2UsICJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZVxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhncGtfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJZ290byBhbGxvY19mYWlsOworCisJcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXY7CisJcHJpdi0+cHNtb3VzZSA9IHBzbW91c2U7CisJcHJpdi0+cG93ZXJlZCA9IDE7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJlY2FsaWJfd3EsIGhncGtfcmVjYWxpYl93b3JrKTsKKworCWVyciA9IHBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJaWYgKGVycikKKwkJZ290byBpbml0X2ZhaWw7CisKKwllcnIgPSBoZ3BrX3JlZ2lzdGVyKHBzbW91c2UpOworCWlmIChlcnIpCisJCWdvdG8gaW5pdF9mYWlsOworCisJcmV0dXJuIDA7CisKK2luaXRfZmFpbDoKKwlrZnJlZShwcml2KTsKK2FsbG9jX2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGVudW0gaGdwa19tb2RlbF90IGhncGtfZ2V0X21vZGVsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKKworCS8qIEU3LCBFNywgRTcsIEU5IGdldHMgdXMgYSAzIGJ5dGUgaWRlbnRpZmllciAqLworCWlmIChwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJTkZPKSkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwloZ3BrX2RiZyhwc21vdXNlLCAiSUQ6ICUwMnggJTAyeCAlMDJ4IiwgcGFyYW1bMF0sIHBhcmFtWzFdLCBwYXJhbVsyXSk7CisKKwkvKiBIR1BLIHNpZ25hdHVyZTogMHg2NywgMHgwMCwgMHg8bW9kZWw+ICovCisJaWYgKHBhcmFtWzBdICE9IDB4NjcgfHwgcGFyYW1bMV0gIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwloZ3BrX2luZm8ocHNtb3VzZSwgIk9MUEMgdG91Y2hwYWQgcmV2aXNpb24gMHgleFxuIiwgcGFyYW1bMl0pOworCisJcmV0dXJuIHBhcmFtWzJdOworfQorCitpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3sKKwlpbnQgdmVyc2lvbjsKKworCXZlcnNpb24gPSBoZ3BrX2dldF9tb2RlbChwc21vdXNlKTsKKwlpZiAodmVyc2lvbiA8IDApCisJCXJldHVybiB2ZXJzaW9uOworCisJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CisJCXBzbW91c2UtPnZlbmRvciA9ICJBTFBTIjsKKwkJcHNtb3VzZS0+bmFtZSA9ICJIR1BLIjsKKwkJcHNtb3VzZS0+bW9kZWwgPSB2ZXJzaW9uOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIyYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIE9MUEMgSEdQSyAoWE8tMSkgdG91Y2hwYWQgUFMvMiBtb3VzZSBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9IR1BLX0gKKyNkZWZpbmUgX0hHUEtfSAorCitlbnVtIGhncGtfbW9kZWxfdCB7CisJSEdQS19NT0RFTF9QUkVBID0gMHgwYSwJLyogcHJlLUIxcyAqLworCUhHUEtfTU9ERUxfQSA9IDB4MTQsCS8qIGZvdW5kIG9uIEIxcywgUFQgZGlzYWJsZWQgaW4gaGFyZHdhcmUgKi8KKwlIR1BLX01PREVMX0IgPSAweDI4LAkvKiBCMnMsIGhhcyBjYXBhY2l0YW5jZSBpc3N1ZXMgKi8KKwlIR1BLX01PREVMX0MgPSAweDNjLAorCUhHUEtfTU9ERUxfRCA9IDB4NTAsCS8qIEMxLCBtYXNzIHByb2R1Y3Rpb24gKi8KK307CisKK3N0cnVjdCBoZ3BrX2RhdGEgeworCXN0cnVjdCBwc21vdXNlICpwc21vdXNlOworCWludCBwb3dlcmVkOworCWludCBjb3VudCwgeF90YWxseSwgeV90YWxseTsJLyogaGFyZHdhcmUgd29ya2Fyb3VuZCBzdHVmZiAqLworCXVuc2lnbmVkIGxvbmcgcmVjYWxpYl93aW5kb3c7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZWNhbGliX3dxOworfTsKKworI2RlZmluZSBoZ3BrX2RiZyhwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfZGJnKCYocHNtb3VzZSktPnBzMmRldi5zZXJpby0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgaGdwa19lcnIocHNtb3VzZSwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X2VycigmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfaW5mbyhwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfaW5mbygmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfd2Fybihwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfd2FybigmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfbm90aWNlKHBzbW91c2UsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9ub3RpY2UoJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9PTFBDCitpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoreworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSBpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXJldHVybiAtRU5PREVWOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggMGM1NjYwZC4uMzkwZjFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0xNTcsMTAgKzE1Nyw4IEBACiBzdGF0aWMgc3NpemVfdCBwczJwcF9hdHRyX3NldF9zbWFydHNjcm9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHBzbW91c2UsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGY1YTZiZTEuLjEyNmU5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInN5bmFwdGljcy5oIgogI2luY2x1ZGUgImxvZ2lwczJwcC5oIgogI2luY2x1ZGUgImFscHMuaCIKKyNpbmNsdWRlICJoZ3BrLmgiCiAjaW5jbHVkZSAibGlmZWJvb2suaCIKICNpbmNsdWRlICJ0cmFja3BvaW50LmgiCiAjaW5jbHVkZSAidG91Y2hraXRfcHMyLmgiCkBAIC0yMDEsNiArMjAyLDEyIEBACiAJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CiB9CiAKK3ZvaWQgcHNtb3VzZV9xdWV1ZV93b3JrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLAorCQl1bnNpZ25lZCBsb25nIGRlbGF5KQoreworCXF1ZXVlX2RlbGF5ZWRfd29yayhrcHNtb3VzZWRfd3EsIHdvcmssIGRlbGF5KTsKK30KKwogLyoKICAqIF9fcHNtb3VzZV9zZXRfc3RhdGUoKSBzZXRzIG5ldyBwc21vdXNlIHN0YXRlIGFuZCByZXNldHMgYWxsIGZsYWdzLgogICovCkBAIC0yMjAsNyArMjI3LDcgQEAKICAqIGlzIG5vdCBhIGNvbmNlcm4uCiAgKi8KIAotc3RhdGljIHZvaWQgcHNtb3VzZV9zZXRfc3RhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGVudW0gcHNtb3VzZV9zdGF0ZSBuZXdfc3RhdGUpCit2b2lkIHBzbW91c2Vfc2V0X3N0YXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBlbnVtIHBzbW91c2Vfc3RhdGUgbmV3X3N0YXRlKQogewogCXNlcmlvX3BhdXNlX3J4KHBzbW91c2UtPnBzMmRldi5zZXJpbyk7CiAJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBuZXdfc3RhdGUpOwpAQCAtMzA1LDcgKzMxMiw3IEBACiAJCSAgICAgICBwc21vdXNlLT5uYW1lLCBwc21vdXNlLT5waHlzLCBwc21vdXNlLT5wa3RjbnQpOwogCQlwc21vdXNlLT5iYWRieXRlID0gcHNtb3VzZS0+cGFja2V0WzBdOwogCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfUkVTWU5DSU5HKTsKLQkJcXVldWVfd29yayhrcHNtb3VzZWRfd3EsICZwc21vdXNlLT5yZXN5bmNfd29yayk7CisJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmssIDApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM0Miw3ICszNDksNyBAQAogCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHBzbW91c2UtPmxhc3QgKyBwc21vdXNlLT5yZXN5bmNfdGltZSAqIEhaKSkgewogCQlwc21vdXNlLT5iYWRieXRlID0gcHNtb3VzZS0+cGFja2V0WzBdOwogCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfUkVTWU5DSU5HKTsKLQkJcXVldWVfd29yayhrcHNtb3VzZWRfd3EsICZwc21vdXNlLT5yZXN5bmNfd29yayk7CisJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmssIDApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYzMCw4ICs2MzcsMjAgQEAKIAkJfQogCX0KIAotCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVgpIHsKKy8qCisgKiBUcnkgT0xQQyBIR1BLIHRvdWNocGFkLgorICovCisJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCAmJgorCQkJaGdwa19kZXRlY3QocHNtb3VzZSwgc2V0X3Byb3BlcnRpZXMpID09IDApIHsKKwkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBoZ3BrX2luaXQocHNtb3VzZSkgPT0gMCkKKwkJCXJldHVybiBQU01PVVNFX0hHUEs7CisvKgorICogSW5pdCBmYWlsZWQsIHRyeSBiYXNpYyByZWxhdGl2ZSBwcm90b2NvbHMKKyAqLworCQltYXhfcHJvdG8gPSBQU01PVVNFX0lNRVg7CisJfQogCisJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgewogCQlpZiAoZ2VuaXVzX2RldGVjdChwc21vdXNlLCBzZXRfcHJvcGVydGllcykgPT0gMCkKIAkJCXJldHVybiBQU01PVVNFX0dFTlBTOwogCkBAIC03NjIsNiArNzgxLDE0IEBACiAJCS5kZXRlY3QJCT0gdG91Y2hraXRfcHMyX2RldGVjdCwKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9PTFBDCisJeworCQkudHlwZQkJPSBQU01PVVNFX0hHUEssCisJCS5uYW1lCQk9ICJPTFBDIEhHUEsiLAorCQkuYWxpYXMJCT0gImhncGsiLAorCQkuZGV0ZWN0CQk9IGhncGtfZGV0ZWN0LAorCX0sCisjZW5kaWYKIAl7CiAJCS50eXBlCQk9IFBTTU9VU0VfQ09SVFJPTiwKIAkJLm5hbWUJCT0gIkNvcnRyb25QUy8yIiwKQEAgLTkzNSw3ICs5NjIsNyBAQAogc3RhdGljIHZvaWQgcHNtb3VzZV9yZXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBwc21vdXNlICpwYXJlbnQgPSBOVUxMLCAqcHNtb3VzZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHNtb3VzZSwgcmVzeW5jX3dvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzbW91c2UsIHJlc3luY193b3JrLndvcmspOwogCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwc21vdXNlLT5wczJkZXYuc2VyaW87CiAJcHNtb3VzZV9yZXRfdCByYyA9IFBTTU9VU0VfR09PRF9EQVRBOwogCWludCBmYWlsZWQgPSAwLCBlbmFibGVkID0gMDsKQEAgLTExOTQsNyArMTIyMSw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAKIAlwczJfaW5pdCgmcHNtb3VzZS0+cHMyZGV2LCBzZXJpbyk7Ci0JSU5JVF9XT1JLKCZwc21vdXNlLT5yZXN5bmNfd29yaywgcHNtb3VzZV9yZXN5bmMpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwc21vdXNlLT5yZXN5bmNfd29yaywgcHNtb3VzZV9yZXN5bmMpOwogCXBzbW91c2UtPmRldiA9IGlucHV0X2RldjsKIAlzbnByaW50Zihwc21vdXNlLT5waHlzLCBzaXplb2YocHNtb3VzZS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CiAKQEAgLTEzOTUsMjUgKzE0MjIsMjkgQEAKIAogCXBzbW91c2UgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9JR05PUkUpIHsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KKwlpZiAoYXR0ci0+cHJvdGVjdCkgeworCQlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9JR05PUkUpIHsKKwkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAotCWlmIChzZXJpby0+cGFyZW50ICYmIHNlcmlvLT5pZC50eXBlID09IFNFUklPX1BTX1BTVEhSVSkgewotCQlwYXJlbnQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpby0+cGFyZW50KTsKLQkJcHNtb3VzZV9kZWFjdGl2YXRlKHBhcmVudCk7Ci0JfQorCQlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKKwkJCXBhcmVudCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvLT5wYXJlbnQpOworCQkJcHNtb3VzZV9kZWFjdGl2YXRlKHBhcmVudCk7CisJCX0KIAotCXBzbW91c2VfZGVhY3RpdmF0ZShwc21vdXNlKTsKKwkJcHNtb3VzZV9kZWFjdGl2YXRlKHBzbW91c2UpOworCX0KIAogCXJldHZhbCA9IGF0dHItPnNldChwc21vdXNlLCBhdHRyLT5kYXRhLCBidWYsIGNvdW50KTsKIAotCWlmIChyZXR2YWwgIT0gLUVOT0RFVikKLQkJcHNtb3VzZV9hY3RpdmF0ZShwc21vdXNlKTsKKwlpZiAoYXR0ci0+cHJvdGVjdCkgeworCQlpZiAocmV0dmFsICE9IC1FTk9ERVYpCisJCQlwc21vdXNlX2FjdGl2YXRlKHBzbW91c2UpOwogCi0JaWYgKHBhcmVudCkKLQkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOworCQlpZiAocGFyZW50KQorCQkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOworCX0KIAogIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZwc21vdXNlX211dGV4KTsKQEAgLTE0MzMsMTAgKzE0NjQsOCBAQAogewogCXVuc2lnbmVkIGludCAqZmllbGQgPSAodW5zaWduZWQgaW50ICopKChjaGFyICopcHNtb3VzZSArIChzaXplX3Qpb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCh1bnNpZ25lZCBpbnQpdmFsdWUgIT0gdmFsdWUpCkBAIC0xNTQ5LDEwICsxNTc4LDggQEAKIHN0YXRpYyBzc2l6ZV90IHBzbW91c2VfYXR0cl9zZXRfcmF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0KQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzbW91c2UtPnNldF9yYXRlKHBzbW91c2UsIHZhbHVlKTsKQEAgLTE1NjIsMTAgKzE1ODksOCBAQAogc3RhdGljIHNzaXplX3QgcHNtb3VzZV9hdHRyX3NldF9yZXNvbHV0aW9uKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHNtb3VzZS0+c2V0X3Jlc29sdXRpb24ocHNtb3VzZSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaAppbmRleCAxMzE3YmRkLi44YjYwOGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaApAQCAtMzksNyArMzksNyBAQAogCXZvaWQgKnByaXZhdGU7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCXN0cnVjdCBwczJkZXYgcHMyZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXN5bmNfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJlc3luY193b3JrOwogCWNoYXIgKnZlbmRvcjsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgcGFja2V0WzhdOwpAQCAtODksMjAgKzg5LDI0IEBACiAJUFNNT1VTRV9UUkFDS1BPSU5ULAogCVBTTU9VU0VfVE9VQ0hLSVRfUFMyLAogCVBTTU9VU0VfQ09SVFJPTiwKKwlQU01PVVNFX0hHUEssCiAJUFNNT1VTRV9BVVRPCQkvKiBUaGlzIG9uZSBzaG91bGQgYWx3YXlzIGJlIGxhc3QgKi8KIH07CiAKK3ZvaWQgcHNtb3VzZV9xdWV1ZV93b3JrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLAorCQl1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGludCBwc21vdXNlX3NsaWNlZF9jb21tYW5kKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB1bnNpZ25lZCBjaGFyIGNvbW1hbmQpOwogaW50IHBzbW91c2VfcmVzZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwordm9pZCBwc21vdXNlX3NldF9zdGF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgZW51bSBwc21vdXNlX3N0YXRlIG5ld19zdGF0ZSk7CiB2b2lkIHBzbW91c2Vfc2V0X3Jlc29sdXRpb24oc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHVuc2lnbmVkIGludCByZXNvbHV0aW9uKTsKIAotCiBzdHJ1Y3QgcHNtb3VzZV9hdHRyaWJ1dGUgewogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRhdHRyOwogCXZvaWQgKmRhdGE7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpOwogCXNzaXplX3QgKCpzZXQpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworCWludCBwcm90ZWN0OwogfTsKICNkZWZpbmUgdG9fcHNtb3VzZV9hdHRyKGEpCWNvbnRhaW5lcl9vZigoYSksIHN0cnVjdCBwc21vdXNlX2F0dHJpYnV0ZSwgZGF0dHIpCiAKQEAgLTExMSw3ICsxMTUsNyBAQAogc3NpemVfdCBwc21vdXNlX2F0dHJfc2V0X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIAotI2RlZmluZSBQU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0KQkJCVwKKyNkZWZpbmUgX19QU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCBfcHJvdGVjdCkJXAogc3RhdGljIHNzaXplX3QgX3Nob3coc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqZGF0YSwgY2hhciAqKTsJCQlcCiBzdGF0aWMgc3NpemVfdCBfc2V0KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsJXAogc3RhdGljIHN0cnVjdCBwc21vdXNlX2F0dHJpYnV0ZSBwc21vdXNlX2F0dHJfIyNfbmFtZSA9IHsJCQlcCkBAIC0xMjYsNiArMTMwLDEwIEBACiAJLmRhdGEJPSBfZGF0YSwJCQkJCQkJXAogCS5zaG93CT0gX3Nob3csCQkJCQkJCVwKIAkuc2V0CT0gX3NldCwJCQkJCQkJCVwKKwkucHJvdGVjdCA9IF9wcm90ZWN0LAkJCQkJCQlcCiB9CiAKKyNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCkJXAorCQlfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIDEpCisKICNlbmRpZiAvKiBfUFNNT1VTRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IDI2Yjg0NWYuLmU2OGM4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC04OSwxMCArODksOCBAQAogCXN0cnVjdCB0cmFja3BvaW50X2F0dHJfZGF0YSAqYXR0ciA9IGRhdGE7CiAJdW5zaWduZWQgY2hhciAqZmllbGQgPSAodW5zaWduZWQgY2hhciAqKSgoY2hhciAqKXRwICsgYXR0ci0+ZmllbGRfb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAyNTUpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAyNTUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJKmZpZWxkID0gdmFsdWU7CkBAIC0xMTcsMTAgKzExNSw4IEBACiAJc3RydWN0IHRyYWNrcG9pbnRfYXR0cl9kYXRhICphdHRyID0gZGF0YTsKIAl1bnNpZ25lZCBjaGFyICpmaWVsZCA9ICh1bnNpZ25lZCBjaGFyICopKChjaGFyICopdHAgKyBhdHRyLT5maWVsZF9vZmZzZXQpOwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdHRyLT5pbnZlcnRlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaAppbmRleCBmNDUxYzczLi44NDdmNGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCkBAIC02Nyw3ICs2Nyw3IEBACiAgKiBPbiBzb21lIHBsYXRmb3JtcyB0b3VjaGluZyB0aGUgaTgwNDIgZGF0YSByZWdpc3RlciByZWdpb24gY2FuIGRvIHJlYWxseQogICogYmFkIHRoaW5ncy4gQmVjYXVzZSBvZiB0aGlzIHRoZSByZWdpb24gaXMgYWx3YXlzIHJlc2VydmVkIG9uIHN1Y2ggYm94ZXMuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEk4MDQyX0RBVEFfUkVHKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IDVhYWZlMjQuLmEzMjFhZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtMzIyLDYgKzMyMiwxMyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMzRBUzYiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIklCTSAyNjU2IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJQk0iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiMjY1NiIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwppbmRleCBjOTM5N2M4Li40NzA3NzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKQEAgLTM3Myw2ICszNzMsMTIgQEAKIAkJLmlkCT0gU0VSSU9fQU5ZLAogCQkuZXh0cmEJPSBTRVJJT19BTlksCiAJfSwKKwl7CisJCS50eXBlCT0gU0VSSU9fODA0Ml9YTCwKKwkJLnByb3RvCT0gU0VSSU9fQU5ZLAorCQkuaWQJPSBTRVJJT19BTlksCisJCS5leHRyYQk9IFNFUklPX0FOWSwKKwl9LAogCXsgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCmluZGV4IDU3MGUwZTguLjY3MGM2MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jCkBAIC0yODAsNyArMjgwLDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYWNlY2FkX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKaW5kZXggOGYwMzdhMS4uN2QwMDVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKQEAgLTEyMDIsMTYgKzEyMDIsMjIgQEAKIHN0b3JlX3RhYmxldFh0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB4OworCWxvbmcgeDsKIAotCWlmIChzdHJjbXAoYnVmLCAiZGlzYWJsZSIpID09IDApIHsKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmeCkpIHsKKwkJc2l6ZV90IGxlbiA9IGJ1Zltjb3VudCAtIDFdID09ICdcbicgPyBjb3VudCAtIDEgOiBjb3VudDsKKworCQlpZiAoc3RybmNtcChidWYsICJkaXNhYmxlIiwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCWFpcHRlay0+bmV3U2V0dGluZy54VGlsdCA9IEFJUFRFS19USUxUX0RJU0FCTEU7CiAJfSBlbHNlIHsKLQkJeCA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQkJaWYgKHggPj0gQUlQVEVLX1RJTFRfTUlOICYmIHggPD0gQUlQVEVLX1RJTFRfTUFYKSB7Ci0JCQlhaXB0ZWstPm5ld1NldHRpbmcueFRpbHQgPSB4OwotCQl9CisJCWlmICh4IDwgQUlQVEVLX1RJTFRfTUlOIHx8IHggPiBBSVBURUtfVElMVF9NQVgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlhaXB0ZWstPm5ld1NldHRpbmcueFRpbHQgPSB4OwogCX0KKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTIzOCwxNiArMTI0NCwyMiBAQAogc3RvcmVfdGFibGV0WXRpbHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHk7CisJbG9uZyB5OwogCi0JaWYgKHN0cmNtcChidWYsICJkaXNhYmxlIikgPT0gMCkgeworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ5KSkgeworCQlzaXplX3QgbGVuID0gYnVmW2NvdW50IC0gMV0gPT0gJ1xuJyA/IGNvdW50IC0gMSA6IGNvdW50OworCisJCWlmIChzdHJuY21wKGJ1ZiwgImRpc2FibGUiLCBsZW4pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJYWlwdGVrLT5uZXdTZXR0aW5nLnlUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKIAl9IGVsc2UgewotCQl5ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCQlpZiAoeSA+PSBBSVBURUtfVElMVF9NSU4gJiYgeSA8PSBBSVBURUtfVElMVF9NQVgpIHsKLQkJCWFpcHRlay0+bmV3U2V0dGluZy55VGlsdCA9IHk7Ci0JCX0KKwkJaWYgKHkgPCBBSVBURUtfVElMVF9NSU4gfHwgeSA+IEFJUFRFS19USUxUX01BWCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWFpcHRlay0+bmV3U2V0dGluZy55VGlsdCA9IHk7CiAJfQorCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMjY5LDggKzEyODEsMTIgQEAKIHN0b3JlX3RhYmxldEppdHRlckRlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgajsKIAotCWFpcHRlay0+bmV3U2V0dGluZy5qaXR0ZXJEZWxheSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmaikpCisJCXJldHVybiAtRUlOVkFMOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLmppdHRlckRlbGF5ID0gKGludClqOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTI5NCw4ICsxMzEwLDEyIEBACiBzdG9yZV90YWJsZXRQcm9ncmFtbWFibGVEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIGQ7CiAKLQlhaXB0ZWstPm5ld1NldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFpcHRlay0+bmV3U2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IChpbnQpZDsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE1NDEsOCArMTU2MSwxMSBAQAogc3RvcmVfdGFibGV0V2hlZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyB3OwogCi0JYWlwdGVrLT5uZXdTZXR0aW5nLndoZWVsID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ3KSkgcmV0dXJuIC1FSU5WQUw7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcud2hlZWwgPSAoaW50KXc7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNjgzLDIwICsxNzA2LDIxIEBACiAJYWlwdGVrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFpcHRlayksIEdGUF9LRVJORUwpOwogCWlucHV0ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFhaXB0ZWsgfHwgIWlucHV0ZGV2KSB7Ci0JCXdhcm4oImFpcHRlazogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBvciBpbnB1dCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBvciBpbnB1dCBkZXZpY2VcbiIpOwogCQlnb3RvIGZhaWwxOwogICAgICAgICB9CiAKIAlhaXB0ZWstPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYmRldiwgQUlQVEVLX1BBQ0tFVF9MRU5HVEgsCiAJCQkJCUdGUF9BVE9NSUMsICZhaXB0ZWstPmRhdGFfZG1hKTsKICAgICAgICAgaWYgKCFhaXB0ZWstPmRhdGEpIHsKLQkJd2FybigiYWlwdGVrOiBjYW5ub3QgYWxsb2NhdGUgdXNiIGJ1ZmZlciIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVzYiBidWZmZXJcbiIpOwogCQlnb3RvIGZhaWwxOwogCX0KIAogCWFpcHRlay0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFpcHRlay0+dXJiKSB7Ci0JICAgICAgICB3YXJuKCJhaXB0ZWs6IGNhbm5vdCBhbGxvY2F0ZSB1cmIiKTsKKwkgICAgICAgIGRldl93YXJuKCZpbnRmLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgdXJiXG4iKTsKIAkJZ290byBmYWlsMjsKIAl9CiAKQEAgLTE4MjAsOCArMTg0NCw5IEBACiAJCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IHNwZWVkc1tpXTsKIAkJKHZvaWQpYWlwdGVrX3Byb2dyYW1fdGFibGV0KGFpcHRlayk7CiAJCWlmIChhaXB0ZWstPmlucHV0ZGV2LT5hYnNtYXhbQUJTX1hdID4gMCkgewotCQkJaW5mbygiaW5wdXQ6IEFpcHRlayB1c2luZyAlZCBtcyBwcm9ncmFtbWluZyBzcGVlZFxuIiwKLQkJCSAgICAgYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5KTsKKwkJCWRldl9pbmZvKCZpbnRmLT5kZXYsCisJCQkJICJBaXB0ZWsgdXNpbmcgJWQgbXMgcHJvZ3JhbW1pbmcgc3BlZWRcbiIsCisJCQkJIGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE4MjksNyArMTg1NCw4IEBACiAJLyogTXVycGh5IHNheXMgdGhhdCBzb21lIGRheSBzb21lb25lIHdpbGwgaGF2ZSBhIHRhYmxldCB0aGF0IGZhaWxzIHRoZQogCSAgIGFib3ZlIHRlc3QuIFRoYXQncyB5b3UsIEZyZWRlcmljIFJvZHJpZ28gKi8KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWVkcykpIHsKLQkJaW5mbygiaW5wdXQ6IEFpcHRlayB0cmllZCBhbGwgc3BlZWRzLCBubyBzYW5lIHJlc3BvbnNlIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsCisJCQkgIkFpcHRlayB0cmllZCBhbGwgc3BlZWRzLCBubyBzYW5lIHJlc3BvbnNlXG4iKTsKIAkJZ290byBmYWlsMjsKIAl9CiAKQEAgLTE4NDEsNyArMTg2Nyw4IEBACiAJICovCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmFpcHRla19hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChlcnIpIHsKLQkJd2FybigiYWlwdGVrOiBjYW5ub3QgY3JlYXRlIHN5c2ZzIGdyb3VwIGVycjogJWQiLCBlcnIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBzeXNmcyBncm91cCBlcnI6ICVkXG4iLAorCQkJIGVycik7CiAJCWdvdG8gZmFpbDM7CiAgICAgICAgIH0KIApAQCAtMTg0OSw3ICsxODc2LDggQEAKIAkgKi8KIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYWlwdGVrLT5pbnB1dGRldik7CiAJaWYgKGVycikgewotCQl3YXJuKCJhaXB0ZWs6IGlucHV0X3JlZ2lzdGVyX2RldmljZSByZXR1cm5lZCBlcnI6ICVkIiwgZXJyKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSAiaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIHJldHVybmVkIGVycjogJWRcbiIsIGVycik7CiAJCWdvdG8gZmFpbDQ7CiAgICAgICAgIH0KIAlyZXR1cm4gMDsKQEAgLTE4OTksOCArMTkyNyw5IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYWlwdGVrX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjogIiBEUklWRVJfQVVUSE9SKTsKLQkJaW5mbyhEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0FVVEhPUiAiXG4iKTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwppbmRleCA3ZGYwMjI4Li41NTI0ZTAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwpAQCAtMiw3ICsyLDcgQEAKIAogR1RDTyBkaWdpdGl6ZXIgVVNCIGRyaXZlcgogCi1Vc2UgdGhlIGVycigpLCBkYmcoKSBhbmQgaW5mbygpIG1hY3JvcyBmcm9tIHVzYi5oIGZvciBzeXN0ZW0gbG9nZ2luZworVXNlIHRoZSBlcnIoKSBhbmQgZGJnKCkgbWFjcm9zIGZyb20gdXNiLmggZm9yIHN5c3RlbSBsb2dnaW5nCiAKIFRPIENIRUNLOiAgSXMgcHJlc3N1cmUgZG9uZSByaWdodCBvbiByZXBvcnQgNT8KIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAkJa2ZyZWUoZ3Rjbyk7CiAJfQogCi0JaW5mbygiZ3RjbyBkcml2ZXIgZGlzY29ubmVjdGVkIik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiZ3RjbyBkcml2ZXIgZGlzY29ubmVjdGVkXG4iKTsKIH0KIAogLyogICBTVEFOREFSRCBNT0RVTEUgTE9BRCBST1VUSU5FUyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCmluZGV4IGQ4OTExMmYuLjY2ODJiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwpAQCAtMjE1LDcgKzIxNSw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrYnRhYl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IDVmYmM0NjMuLjA5ZTIyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0zODUsNyArMzg1LDggQEAKIAl3YWNvbV9kcml2ZXIuaWRfdGFibGUgPSBnZXRfZGV2aWNlX3RhYmxlKCk7CiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggNmUxZThjNi4uODMxN2ZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VQ0IxNDAwCiAJdHJpc3RhdGUgIlBoaWxpcHMgVUNCMTQwMCB0b3VjaHNjcmVlbiIKLQlzZWxlY3QgQUM5N19CVVMKKwlkZXBlbmRzIG9uIEFDOTdfQlVTCiAJZGVwZW5kcyBvbiBVQ0IxNDAwX0NPUkUKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgVUNCMTQwMCB0b3VjaHNjcmVlbiBpbnRlcmZhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDg1ODNjNzYuLmI5YjdmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC02OSw2ICs2OSwxNyBAQAogCWludAlpZ25vcmU7CiB9OwogCisvKgorICogV2UgYWxsb2NhdGUgdGhpcyBzZXBhcmF0ZWx5IHRvIGF2b2lkIGNhY2hlIGxpbmUgc2hhcmluZyBpc3N1ZXMgd2hlbgorICogZHJpdmVyIGlzIHVzZWQgd2l0aCBETUEtYmFzZWQgU1BJIGNvbnRyb2xsZXJzIChsaWtlIGF0bWVsX3NwaSkgb24KKyAqIHN5c3RlbXMgd2hlcmUgbWFpbiBtZW1vcnkgaXMgbm90IERNQS1jb2hlcmVudCAobW9zdCBub24teDg2IGJvYXJkcykuCisgKi8KK3N0cnVjdCBhZHM3ODQ2X3BhY2tldCB7CisJdTgJCQlyZWFkX3gsIHJlYWRfeSwgcmVhZF96MSwgcmVhZF96MiwgcHdyZG93bjsKKwl1MTYJCQlkdW1teTsJCS8qIGZvciB0aGUgcHdyZG93biByZWFkICovCisJc3RydWN0IHRzX2V2ZW50CQl0YzsKK307CisKIHN0cnVjdCBhZHM3ODQ2IHsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dDsKIAljaGFyCQkJcGh5c1szMl07CkBAIC04Niw5ICs5Nyw3IEBACiAJdTE2CQkJeF9wbGF0ZV9vaG1zOwogCXUxNgkJCXByZXNzdXJlX21heDsKIAotCXU4CQkJcmVhZF94LCByZWFkX3ksIHJlYWRfejEsIHJlYWRfejIsIHB3cmRvd247Ci0JdTE2CQkJZHVtbXk7CQkvKiBmb3IgdGhlIHB3cmRvd24gcmVhZCAqLwotCXN0cnVjdCB0c19ldmVudAkJdGM7CisJc3RydWN0IGFkczc4NDZfcGFja2V0CSpwYWNrZXQ7CiAKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbMThdOwogCXN0cnVjdCBzcGlfbWVzc2FnZQltc2dbNV07CkBAIC00NjMsMTAgKzQ3MiwxMSBAQAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFkczc4NDYgKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY2hhciAqZW5kcDsKLQlpbnQgaTsKKwlsb25nIGk7CiAKLQlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMTApOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmaSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrX2lycSgmdHMtPmxvY2spOwogCiAJaWYgKGkpCkBAIC01MTIsMTYgKzUyMiwxNyBAQAogc3RhdGljIHZvaWQgYWRzNzg0Nl9yeCh2b2lkICphZHMpCiB7CiAJc3RydWN0IGFkczc4NDYJCSp0cyA9IGFkczsKKwlzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQJKnBhY2tldCA9IHRzLT5wYWNrZXQ7CiAJdW5zaWduZWQJCVJ0OwogCXUxNgkJCXgsIHksIHoxLCB6MjsKIAogCS8qIGFkczc4NDZfcnhfdmFsKCkgZGlkIGluLXBsYWNlIGNvbnZlcnNpb24gKGluY2x1ZGluZyBieXRlc3dhcCkgZnJvbQogCSAqIG9uLXRoZS13aXJlIGZvcm1hdCBhcyBwYXJ0IG9mIGRlYm91bmNpbmcgdG8gZ2V0IHN0YWJsZSByZWFkaW5ncy4KIAkgKi8KLQl4ID0gdHMtPnRjLng7Ci0JeSA9IHRzLT50Yy55OwotCXoxID0gdHMtPnRjLnoxOwotCXoyID0gdHMtPnRjLnoyOworCXggPSBwYWNrZXQtPnRjLng7CisJeSA9IHBhY2tldC0+dGMueTsKKwl6MSA9IHBhY2tldC0+dGMuejE7CisJejIgPSBwYWNrZXQtPnRjLnoyOwogCiAJLyogcmFuZ2UgZmlsdGVyaW5nICovCiAJaWYgKHggPT0gTUFYXzEyQklUKQpAQCAtNTQ1LDEwICs1NTYsMTAgQEAKIAkgKiB0aGUgbWF4aW11bS4gRG9uJ3QgcmVwb3J0IGl0IHRvIHVzZXIgc3BhY2UsIHJlcGVhdCBhdCBsZWFzdAogCSAqIG9uY2UgbW9yZSB0aGUgbWVhc3VyZW1lbnQKIAkgKi8KLQlpZiAodHMtPnRjLmlnbm9yZSB8fCBSdCA+IHRzLT5wcmVzc3VyZV9tYXgpIHsKKwlpZiAocGFja2V0LT50Yy5pZ25vcmUgfHwgUnQgPiB0cy0+cHJlc3N1cmVfbWF4KSB7CiAjaWZkZWYgVkVSQk9TRQogCQlwcl9kZWJ1ZygiJXM6IGlnbm9yZWQgJWQgcHJlc3N1cmUgJWRcbiIsCi0JCQl0cy0+c3BpLT5kZXYuYnVzX2lkLCB0cy0+dGMuaWdub3JlLCBSdCk7CisJCQl0cy0+c3BpLT5kZXYuYnVzX2lkLCBwYWNrZXQtPnRjLmlnbm9yZSwgUnQpOwogI2VuZGlmCiAJCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfUEVSSU9EKSwKIAkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOwpAQCAtNjQxLDYgKzY1Miw3IEBACiBzdGF0aWMgdm9pZCBhZHM3ODQ2X3J4X3ZhbCh2b2lkICphZHMpCiB7CiAJc3RydWN0IGFkczc4NDYgKnRzID0gYWRzOworCXN0cnVjdCBhZHM3ODQ2X3BhY2tldCAqcGFja2V0ID0gdHMtPnBhY2tldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm07CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqdDsKIAlpbnQgdmFsOwpAQCAtNjYwLDcgKzY3Miw3IEBACiAJY2FzZSBBRFM3ODQ2X0ZJTFRFUl9SRVBFQVQ6CiAJCWJyZWFrOwogCWNhc2UgQURTNzg0Nl9GSUxURVJfSUdOT1JFOgotCQl0cy0+dGMuaWdub3JlID0gMTsKKwkJcGFja2V0LT50Yy5pZ25vcmUgPSAxOwogCQkvKiBMYXN0IG1lc3NhZ2Ugd2lsbCBjb250YWluIGFkczc4NDZfcngoKSBhcyB0aGUKIAkJICogY29tcGxldGlvbiBmdW5jdGlvbi4KIAkJICovCkBAIC02NjgsNyArNjgwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBBRFM3ODQ2X0ZJTFRFUl9PSzoKIAkJKih1MTYgKil0LT5yeF9idWYgPSB2YWw7Ci0JCXRzLT50Yy5pZ25vcmUgPSAwOworCQlwYWNrZXQtPnRjLmlnbm9yZSA9IDA7CiAJCW0gPSAmdHMtPm1zZ1srK3RzLT5tc2dfaWR4XTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTc3Myw3ICs3ODUsNiBAQAogCS8qIHdlIGtub3cgdGhlIGNoaXAncyBpbiBsb3dwb3dlciBtb2RlIHNpbmNlIHdlIGFsd2F5cwogCSAqIGxlYXZlIGl0IHRoYXQgd2F5IGFmdGVyIGV2ZXJ5IHJlcXVlc3QKIAkgKi8KLQogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRzLT5sb2NrIGhlbGQgKi8KQEAgLTg0OSw2ICs4NjAsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgYWRzNzg0Nl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZHM3ODQ2CQkJKnRzOworCXN0cnVjdCBhZHM3ODQ2X3BhY2tldAkJKnBhY2tldDsKIAlzdHJ1Y3QgaW5wdXRfZGV2CQkqaW5wdXRfZGV2OwogCXN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJCSptOwpAQCAtODg0LDE0ICs4OTYsMTYgQEAKIAkJcmV0dXJuIGVycjsKIAogCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkczc4NDYpLCBHRlBfS0VSTkVMKTsKKwlwYWNrZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXRzIHx8ICFpbnB1dF9kZXYpIHsKKwlpZiAoIXRzIHx8ICFwYWNrZXQgfHwgIWlucHV0X2RldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB0cyk7CiAKKwl0cy0+cGFja2V0ID0gcGFja2V0OwogCXRzLT5zcGkgPSBzcGk7CiAJdHMtPmlucHV0ID0gaW5wdXRfZGV2OwogCXRzLT52cmVmX212ID0gcGRhdGEtPnZyZWZfbXY7CkBAIC05NjMsMTMgKzk3NywxMyBAQAogCXNwaV9tZXNzYWdlX2luaXQobSk7CiAKIAkvKiB5LSBzdGlsbCBvbjsgdHVybiBvbiBvbmx5IHkrIChhbmQgQURDKSAqLwotCXRzLT5yZWFkX3kgPSBSRUFEX1kodnJlZik7Ci0JeC0+dHhfYnVmID0gJnRzLT5yZWFkX3k7CisJcGFja2V0LT5yZWFkX3kgPSBSRUFEX1kodnJlZik7CisJeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF95OwogCXgtPmxlbiA9IDE7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7Ci0JeC0+cnhfYnVmID0gJnRzLT50Yy55OworCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnk7CiAJeC0+bGVuID0gMjsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtOTgxLDEyICs5OTUsMTIgQEAKIAkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCXgrKzsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3k7CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeTsKIAkJeC0+bGVuID0gMTsKIAkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAkJeCsrOwotCQl4LT5yeF9idWYgPSAmdHMtPnRjLnk7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnk7CiAJCXgtPmxlbiA9IDI7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCX0KQEAgLTk5OSwxMyArMTAxMywxMyBAQAogCiAJLyogdHVybiB5LSBvZmYsIHgrIG9uLCB0aGVuIGxlYXZlIGluIGxvd3Bvd2VyICovCiAJeCsrOwotCXRzLT5yZWFkX3ggPSBSRUFEX1godnJlZik7Ci0JeC0+dHhfYnVmID0gJnRzLT5yZWFkX3g7CisJcGFja2V0LT5yZWFkX3ggPSBSRUFEX1godnJlZik7CisJeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF94OwogCXgtPmxlbiA9IDE7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7Ci0JeC0+cnhfYnVmID0gJnRzLT50Yy54OworCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLng7CiAJeC0+bGVuID0gMjsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTAxNCwxMiArMTAyOCwxMiBAQAogCQl4LT5kZWxheV91c2VjcyA9IHBkYXRhLT5zZXR0bGVfZGVsYXlfdXNlY3M7CiAKIAkJeCsrOwotCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfeDsKKwkJeC0+dHhfYnVmID0gJnBhY2tldC0+cmVhZF94OwogCQl4LT5sZW4gPSAxOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueDsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMueDsKIAkJeC0+bGVuID0gMjsKIAkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAJfQpAQCAtMTAzMywxMyArMTA0NywxMyBAQAogCQlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJCXgrKzsKLQkJdHMtPnJlYWRfejEgPSBSRUFEX1oxKHZyZWYpOwotCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejE7CisJCXBhY2tldC0+cmVhZF96MSA9IFJFQURfWjEodnJlZik7CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfejE7CiAJCXgtPmxlbiA9IDE7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCXgrKzsKLQkJeC0+cnhfYnVmID0gJnRzLT50Yy56MTsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejE7CiAJCXgtPmxlbiA9IDI7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCkBAIC0xMDQ4LDEyICsxMDYyLDEyIEBACiAJCQl4LT5kZWxheV91c2VjcyA9IHBkYXRhLT5zZXR0bGVfZGVsYXlfdXNlY3M7CiAKIAkJCXgrKzsKLQkJCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MTsKKwkJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfejE7CiAJCQl4LT5sZW4gPSAxOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAkJCXgrKzsKLQkJCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejE7CisJCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy56MTsKIAkJCXgtPmxlbiA9IDI7CiAJCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAkJfQpAQCAtMTA2NSwxMyArMTA3OSwxMyBAQAogCQlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJCXgrKzsKLQkJdHMtPnJlYWRfejIgPSBSRUFEX1oyKHZyZWYpOwotCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejI7CisJCXBhY2tldC0+cmVhZF96MiA9IFJFQURfWjIodnJlZik7CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfejI7CiAJCXgtPmxlbiA9IDE7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCXgrKzsKLQkJeC0+cnhfYnVmID0gJnRzLT50Yy56MjsKKwkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejI7CiAJCXgtPmxlbiA9IDI7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCkBAIC0xMDgwLDEyICsxMDk0LDEyIEBACiAJCQl4LT5kZWxheV91c2VjcyA9IHBkYXRhLT5zZXR0bGVfZGVsYXlfdXNlY3M7CiAKIAkJCXgrKzsKLQkJCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF96MjsKKwkJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfejI7CiAJCQl4LT5sZW4gPSAxOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAkJCXgrKzsKLQkJCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejI7CisJCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy56MjsKIAkJCXgtPmxlbiA9IDI7CiAJCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAkJfQpAQCAtMTA5OSwxMyArMTExMywxMyBAQAogCXNwaV9tZXNzYWdlX2luaXQobSk7CiAKIAl4Kys7Ci0JdHMtPnB3cmRvd24gPSBQV1JET1dOOwotCXgtPnR4X2J1ZiA9ICZ0cy0+cHdyZG93bjsKKwlwYWNrZXQtPnB3cmRvd24gPSBQV1JET1dOOworCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnB3cmRvd247CiAJeC0+bGVuID0gMTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCXgrKzsKLQl4LT5yeF9idWYgPSAmdHMtPmR1bW15OworCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPmR1bW15OwogCXgtPmxlbiA9IDI7CiAJQ1NfQ0hBTkdFKCp4KTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKQEAgLTExNTgsNiArMTE3Miw3IEBACiAJCXRzLT5maWx0ZXJfY2xlYW51cCh0cy0+ZmlsdGVyX2RhdGEpOwogIGVycl9mcmVlX21lbToKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKHBhY2tldCk7CiAJa2ZyZWUodHMpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMTgzLDYgKzExOTgsNyBAQAogCWlmICh0cy0+ZmlsdGVyX2NsZWFudXApCiAJCXRzLT5maWx0ZXJfY2xlYW51cCh0cy0+ZmlsdGVyX2RhdGEpOwogCisJa2ZyZWUodHMtPnBhY2tldCk7CiAJa2ZyZWUodHMpOwogCiAJZGV2X2RiZygmc3BpLT5kZXYsICJ1bnJlZ2lzdGVyZWQgdG91Y2hzY3JlZW5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKaW5kZXggZWVlMTI2Yi4uYTg5YTZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCkBAIC05MSw2ICs5MSw5IEBACiAJY2hhcgkJCXBoeXNbMzJdOwogCXN0cnVjdCBjbGsJCSpjbGs7CiAJaW50CQkJaXJxOworCXVuc2lnbmVkIGludAkJcHJldl9hYnN4OworCXVuc2lnbmVkIGludAkJcHJldl9hYnN5OworCXVuc2lnbmVkIGNoYXIJCWJ1ZmZlcmVkbWVhc3VyZTsKIH07CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0JCSp0c2NfYmFzZTsKQEAgLTEwMCwxMCArMTAzLDkgQEAKIAogc3RhdGljIGlycXJldHVybl90IGF0bWVsX3RzYWRjY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2KQogewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9ICgoc3RydWN0IGF0bWVsX3RzYWRjYyAqKWRldiktPmlucHV0OworCXN0cnVjdCBhdG1lbF90c2FkY2MJKnRzX2RldiA9IChzdHJ1Y3QgYXRtZWxfdHNhZGNjICopZGV2OworCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldiA9IHRzX2Rldi0+aW5wdXQ7CiAKLQl1bnNpZ25lZCBpbnQgYWJzeDsKLQl1bnNpZ25lZCBpbnQgYWJzeTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCByZWc7CiAKQEAgLTEyMSw2ICsxMjMsNyBAQAogCQlhdG1lbF90c2FkY2Nfd3JpdGUoQVRNRUxfVFNBRENDX0lFUiwgQVRNRUxfVFNBRENDX1BFTkNOVCk7CiAKIAkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgMCk7CisJCXRzX2Rldi0+YnVmZmVyZWRtZWFzdXJlID0gMDsKIAkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwogCiAJfSBlbHNlIGlmIChzdGF0dXMgJiBBVE1FTF9UU0FEQ0NfUEVOQ05UKSB7CkBAIC0xMzgsMTYgKzE0MSwyMyBAQAogCX0gZWxzZSBpZiAoc3RhdHVzICYgQVRNRUxfVFNBRENDX0VPQygzKSkgewogCQkvKiBDb252ZXJzaW9uIGZpbmlzaGVkICovCiAKLQkJYWJzeCA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIzKSA8PCAxMDsKLQkJYWJzeCAvPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMik7CisJCWlmICh0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSkgeworCQkJLyogTGFzdCBtZWFzdXJlbWVudCBpcyBhbHdheXMgZGlzY2FyZGVkLCBzaW5jZSBpdCBjYW4KKwkJCSAqIGJlIGVycm9uZW91cy4KKwkJCSAqIEFsd2F5cyByZXBvcnQgcHJldmlvdXMgbWVhc3VyZW1lbnQgKi8KKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWCwgdHNfZGV2LT5wcmV2X2Fic3gpOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19ZLCB0c19kZXYtPnByZXZfYWJzeSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKKwkJfSBlbHNlCisJCQl0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSA9IDE7CiAKLQkJYWJzeSA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIxKSA8PCAxMDsKLQkJYWJzeSAvPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMCk7CisJCS8qIE5vdyBtYWtlIG5ldyBtZWFzdXJlbWVudCAqLworCQl0c19kZXYtPnByZXZfYWJzeCA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIzKSA8PCAxMDsKKwkJdHNfZGV2LT5wcmV2X2Fic3ggLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjIpOwogCi0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWCwgYWJzeCk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgYWJzeSk7Ci0JCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDEpOwotCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisJCXRzX2Rldi0+cHJldl9hYnN5ID0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjEpIDw8IDEwOworCQl0c19kZXYtPnByZXZfYWJzeSAvPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMCk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMjIzLDYgKzIzMyw3IEBACiAJfQogCiAJdHNfZGV2LT5pbnB1dCA9IGlucHV0X2RldjsKKwl0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSA9IDA7CiAKIAlzbnByaW50Zih0c19kZXYtPnBoeXMsIHNpemVvZih0c19kZXYtPnBoeXMpLAogCQkgIiVzL2lucHV0MCIsIHBkZXYtPmRldi5idXNfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCmluZGV4IGMzOGQ0ZTAuLmE4OTcwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogI2RlZmluZSBNT0ROQU1FICJocDY4MF90c19pbnB1dCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYwppbmRleCAzN2E1NTVmLi5iYTY0ODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYwpAQCAtMyw4ICszLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgIFdvbGZzb24gV005N3h4IEFDOTcgQ29kZWNzLgogICoKICAqIENvcHlyaWdodCAyMDA0LCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqIFBhcnRzIENvcHlyaWdodCA6IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CiAgKiAgICAgICAgICAgICAgICAgICBBbmRyZXcgWmFib2xvdG55IDx6YXBAaG9tZWxpbmsucnU+CiAgKgpAQCAtMjk2LDYgKzI5NSw2IEBACiBtb2R1bGVfZXhpdChtYWluc3RvbmVfd205N3h4X2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIndtOTd4eCBjb250aW51b3VzIHRvdWNoIGRyaXZlciBmb3IgbWFpbnN0b25lIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYwppbmRleCAzNzJlZmJjLi42YjViZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMKQEAgLTIsOCArMiw3IEBACiAgKiB3bTk3MDUuYyAgLS0gIENvZGVjIGRyaXZlciBmb3IgV29sZnNvbiBXTTk3MDUgQUM5NyBDb2RlYy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICogICAgICAgICAgICAgICAgICAgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KQEAgLTM0Nyw2ICszNDYsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwod205NzA1X2NvZGVjKTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3MDUgVG91Y2ggU2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKaW5kZXggYzhiYjFlNy4uNzQ5MGIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzEyLmMgIC0tICBDb2RlYyBkcml2ZXIgZm9yIFdvbGZzb24gV005NzEyIEFDOTcgQ29kZWNzLgogICoKICAqIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqIFBhcnRzIENvcHlyaWdodCA6IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CiAgKiAgICAgICAgICAgICAgICAgICBBbmRyZXcgWmFib2xvdG55IDx6YXBAaG9tZWxpbmsucnU+CiAgKiAgICAgICAgICAgICAgICAgICBSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPgpAQCAtNDYyLDYgKzQ2MSw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh3bTk3MTJfY29kZWMpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldNOTcxMiBUb3VjaCBTY3JlZW4gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYwppbmRleCA3ODFlZTgzLi4yMzhiNTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMKQEAgLTIsOCArMiw3IEBACiAgKiB3bTk3MTMuYyAgLS0gIENvZGVjIHRvdWNoIGRyaXZlciBmb3IgV29sZnNvbiBXTTk3MTMgQUM5NyBDb2RlYy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICogICAgICAgICAgICAgICAgICAgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KQEAgLTQ3Niw2ICs0NzUsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwod205NzEzX2NvZGVjKTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3MTMgVG91Y2ggU2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCmluZGV4IGQ1ODlhYjAuLmQxNWFhMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKQEAgLTMsOCArMyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgYW5kIFdNOTcxMyBBQzk3IENvZGVjcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICogICAgICAgICAgICAgICAgICAgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KQEAgLTgyNCw2ICs4MjMsNiBAQAogbW9kdWxlX2V4aXQod205N3h4X2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldNOTd4eCBDb3JlIC0gVG91Y2ggU2NyZWVuIC8gQVVYIEFEQyAvIEdQSU8gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggNzk4ZDdmMy4uMWI1YmY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMTU1Myw4ICsxNTUzLDcgQEAKIAkJcmV0dXJuIFBUUl9FUlIoY2FwaV9jbGFzcyk7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNhcGlfY2xhc3MsIE5VTEwsIE1LREVWKGNhcGlfbWFqb3IsIDApLCBOVUxMLAotCQkJICAgICAgImNhcGkiKTsKKwlkZXZpY2VfY3JlYXRlKGNhcGlfY2xhc3MsIE5VTEwsIE1LREVWKGNhcGlfbWFqb3IsIDApLCBOVUxMLCAiY2FwaSIpOwogCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAJaWYgKGNhcGluY190dHlfaW5pdCgpIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCBlM2U0MDQyLi5jN2ZmMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIGNvbmZpZyBMRURTX1RSSUdHRVJfSURFX0RJU0sKIAlib29sICJMRUQgSURFIERpc2sgVHJpZ2dlciIKLQlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMgJiYgQkxLX0RFVl9JREVESVNLCisJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTICYmIElERV9HRF9BVEEKIAloZWxwCiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGNvbnRyb2xsZWQgYnkgSURFIGRpc2sgYWN0aXZpdHkuCiAJICBJZiB1bnN1cmUsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IDU1OWE0MDguLmVlNzRlZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKQEAgLTEwMyw4ICsxMDMsOCBAQAogewogCWludCByYzsKIAotCWxlZF9jZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobGVkc19jbGFzcywgcGFyZW50LCAwLCBsZWRfY2RldiwKLQkJCQkJICAgICAgIiVzIiwgbGVkX2NkZXYtPm5hbWUpOworCWxlZF9jZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGxlZHNfY2xhc3MsIHBhcmVudCwgMCwgbGVkX2NkZXYsCisJCQkJICAgICAgIiVzIiwgbGVkX2NkZXYtPm5hbWUpOwogCWlmIChJU19FUlIobGVkX2NkZXYtPmRldikpCiAJCXJldHVybiBQVFJfRVJSKGxlZF9jZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYwppbmRleCA4NDRkNTk3Li5lOGZiMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAKIHN0YXRpYyB2b2lkIGhwNnh4bGVkX2dyZWVuX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwppbmRleCBjYWU1MjQ4Li4yMzc0MWNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKQEAgLTg2Miw4ICs4NjIsNyBAQAogCWFkYl9kZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJhZGIiKTsKIAlpZiAoSVNfRVJSKGFkYl9kZXZfY2xhc3MpKQogCQlyZXR1cm47Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGFkYl9kZXZfY2xhc3MsIE5VTEwsIE1LREVWKEFEQl9NQUpPUiwgMCksIE5VTEwsCi0JCQkgICAgICAiYWRiIik7CisJZGV2aWNlX2NyZWF0ZShhZGJfZGV2X2NsYXNzLCBOVUxMLCBNS0RFVihBREJfTUFKT1IsIDApLCBOVUxMLCAiYWRiIik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFkYl9wZmRldik7CiAJcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhZGJfcGZkcnYsIGFkYl9kdW1teV9wcm9iZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggMTAzMzA0Yy4uOWJmMzQ2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTg0OSw3ICs4NDksNyBAQAogCWRtX2Jpb19yZWNvcmQoJm1waW8tPmRldGFpbHMsIGJpbyk7CiAKIAltYXBfY29udGV4dC0+cHRyID0gbXBpbzsKLQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVCk7CisJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAlyID0gbWFwX2lvKG0sIGJpbywgbXBpbywgMCk7CiAJaWYgKHIgPCAwIHx8IHIgPT0gRE1fTUFQSU9fUkVRVUVVRSkKIAkJbWVtcG9vbF9mcmVlKG1waW8sIG0tPm1waW9fcG9vbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCAyNjg1NDdkLi5mMjZjMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTI4Nyw2ICsyODcsOCBAQAogCWludCBpOwogCiAJY29uZl90ICpjb25mID0ga21hbGxvYyhzaXplb2YoKmNvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpPTA7IGk8TW9kZXM7IGkrKykgewogCQlhdG9taWNfc2V0KCZjb25mLT5jb3VudGVyc1tpXSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2xpbmVhci5jIGIvZHJpdmVycy9tZC9saW5lYXIuYwppbmRleCBiOWNiZWU2OC4uMTkwMTQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNiwxNiArMTYsOCBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9saW5lYXIuaD4KIAotI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotI2RlZmluZSBNRF9EUklWRVIKLSNkZWZpbmUgTURfUEVSU09OQUxJVFkKLQogLyoKICAqIGZpbmQgd2hpY2ggZGV2aWNlIGhvbGRzIGEgcGFydGljdWxhciBvZmZzZXQgCiAgKi8KQEAgLTMzLDE2ICsyNSwxNSBAQAogewogCWRldl9pbmZvX3QgKmhhc2g7CiAJbGluZWFyX2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCXNlY3Rvcl90IGJsb2NrID0gc2VjdG9yID4+IDE7CiAKIAkvKgogCSAqIHNlY3Rvcl9kaXYoYSxiKSByZXR1cm5zIHRoZSByZW1haW5lciBhbmQgc2V0cyBhIHRvIGEvYgogCSAqLwotCWJsb2NrID4+PSBjb25mLT5wcmVzaGlmdDsKLQkodm9pZClzZWN0b3JfZGl2KGJsb2NrLCBjb25mLT5oYXNoX3NwYWNpbmcpOwotCWhhc2ggPSBjb25mLT5oYXNoX3RhYmxlW2Jsb2NrXTsKKwlzZWN0b3IgPj49IGNvbmYtPnNlY3Rvcl9zaGlmdDsKKwkodm9pZClzZWN0b3JfZGl2KHNlY3RvciwgY29uZi0+c3BhY2luZyk7CisJaGFzaCA9IGNvbmYtPmhhc2hfdGFibGVbc2VjdG9yXTsKIAotCXdoaWxlICgoc2VjdG9yPj4xKSA+PSAoaGFzaC0+c2l6ZSArIGhhc2gtPm9mZnNldCkpCisJd2hpbGUgKHNlY3RvciA+PSBoYXNoLT5udW1fc2VjdG9ycyArIGhhc2gtPnN0YXJ0X3NlY3RvcikKIAkJaGFzaCsrOwogCXJldHVybiBoYXNoOwogfQpAQCAtNjUsNyArNTYsNyBAQAogCXNlY3Rvcl90IHNlY3RvciA9IGJ2bS0+Ymlfc2VjdG9yICsgZ2V0X3N0YXJ0X3NlY3QoYnZtLT5iaV9iZGV2KTsKIAogCWRldjAgPSB3aGljaF9kZXYobWRkZXYsIHNlY3Rvcik7Ci0JbWF4c2VjdG9ycyA9IChkZXYwLT5zaXplIDw8IDEpIC0gKHNlY3RvciAtIChkZXYwLT5vZmZzZXQ8PDEpKTsKKwltYXhzZWN0b3JzID0gZGV2MC0+bnVtX3NlY3RvcnMgLSAoc2VjdG9yIC0gZGV2MC0+c3RhcnRfc2VjdG9yKTsKIAogCWlmIChtYXhzZWN0b3JzIDwgYmlvX3NlY3RvcnMpCiAJCW1heHNlY3RvcnMgPSAwOwpAQCAtMTEyLDggKzEwMyw4IEBACiAJZGV2X2luZm9fdCAqKnRhYmxlOwogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IGksIG5iX3pvbmUsIGNudDsKLQlzZWN0b3JfdCBtaW5fc3BhY2luZzsKLQlzZWN0b3JfdCBjdXJyX29mZnNldDsKKwlzZWN0b3JfdCBtaW5fc2VjdG9yczsKKwlzZWN0b3JfdCBjdXJyX3NlY3RvcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKIAljb25mID0ga3phbGxvYyAoc2l6ZW9mICgqY29uZikgKyByYWlkX2Rpc2tzKnNpemVvZihkZXZfaW5mb190KSwKQEAgLTE0NSw3ICsxMzYsNyBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlkaXNrLT5zaXplID0gcmRldi0+c2l6ZTsKKwkJZGlzay0+bnVtX3NlY3RvcnMgPSByZGV2LT5zaXplICogMjsKIAkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zaXplICogMjsKIAogCQljbnQrKzsKQEAgLTE1NSwzNCArMTQ2LDM0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1pbl9zcGFjaW5nID0gY29uZi0+YXJyYXlfc2VjdG9ycyAvIDI7Ci0Jc2VjdG9yX2RpdihtaW5fc3BhY2luZywgUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgZGV2X2luZm8gKikpOworCW1pbl9zZWN0b3JzID0gY29uZi0+YXJyYXlfc2VjdG9yczsKKwlzZWN0b3JfZGl2KG1pbl9zZWN0b3JzLCBQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBkZXZfaW5mbyAqKSk7CiAKLQkvKiBtaW5fc3BhY2luZyBpcyB0aGUgbWluaW11bSBzcGFjaW5nIHRoYXQgd2lsbCBmaXQgdGhlIGhhc2gKKwkvKiBtaW5fc2VjdG9ycyBpcyB0aGUgbWluaW11bSBzcGFjaW5nIHRoYXQgd2lsbCBmaXQgdGhlIGhhc2gKIAkgKiB0YWJsZSBpbiBvbmUgUEFHRS4gIFRoaXMgbWF5IGJlIG11Y2ggc21hbGxlciB0aGFuIG5lZWRlZC4KIAkgKiBXZSBmaW5kIHRoZSBzbWFsbGVzdCBub24tdGVybWluYWwgc2V0IG9mIGNvbnNlY3V0aXZlIGRldmljZXMKLQkgKiB0aGF0IGlzIGxhcmdlciB0aGFuIG1pbl9zcGFjaW5nIGFzIHVzZSB0aGUgc2l6ZSBvZiB0aGF0IGFzCisJICogdGhhdCBpcyBsYXJnZXIgdGhhbiBtaW5fc2VjdG9ycyBhbmQgdXNlIHRoZSBzaXplIG9mIHRoYXQgYXMKIAkgKiB0aGUgYWN0dWFsIHNwYWNpbmcKIAkgKi8KLQljb25mLT5oYXNoX3NwYWNpbmcgPSBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKKwljb25mLT5zcGFjaW5nID0gY29uZi0+YXJyYXlfc2VjdG9yczsKIAlmb3IgKGk9MDsgaSA8IGNudC0xIDsgaSsrKSB7Ci0JCXNlY3Rvcl90IHN6ID0gMDsKKwkJc2VjdG9yX3QgdG1wID0gMDsKIAkJaW50IGo7Ci0JCWZvciAoaiA9IGk7IGogPCBjbnQgLSAxICYmIHN6IDwgbWluX3NwYWNpbmc7IGorKykKLQkJCXN6ICs9IGNvbmYtPmRpc2tzW2pdLnNpemU7Ci0JCWlmIChzeiA+PSBtaW5fc3BhY2luZyAmJiBzeiA8IGNvbmYtPmhhc2hfc3BhY2luZykKLQkJCWNvbmYtPmhhc2hfc3BhY2luZyA9IHN6OworCQlmb3IgKGogPSBpOyBqIDwgY250IC0gMSAmJiB0bXAgPCBtaW5fc2VjdG9yczsgaisrKQorCQkJdG1wICs9IGNvbmYtPmRpc2tzW2pdLm51bV9zZWN0b3JzOworCQlpZiAodG1wID49IG1pbl9zZWN0b3JzICYmIHRtcCA8IGNvbmYtPnNwYWNpbmcpCisJCQljb25mLT5zcGFjaW5nID0gdG1wOwogCX0KIAotCS8qIGhhc2hfc3BhY2luZyBtYXkgYmUgdG9vIGxhcmdlIGZvciBzZWN0b3JfZGl2IHRvIHdvcmsgd2l0aCwKKwkvKiBzcGFjaW5nIG1heSBiZSB0b28gbGFyZ2UgZm9yIHNlY3Rvcl9kaXYgdG8gd29yayB3aXRoLAogCSAqIHNvIHdlIG1pZ2h0IG5lZWQgdG8gcHJlLXNoaWZ0CiAJICovCi0JY29uZi0+cHJlc2hpZnQgPSAwOworCWNvbmYtPnNlY3Rvcl9zaGlmdCA9IDA7CiAJaWYgKHNpemVvZihzZWN0b3JfdCkgPiBzaXplb2YodTMyKSkgewotCQlzZWN0b3JfdCBzcGFjZSA9IGNvbmYtPmhhc2hfc3BhY2luZzsKKwkJc2VjdG9yX3Qgc3BhY2UgPSBjb25mLT5zcGFjaW5nOwogCQl3aGlsZSAoc3BhY2UgPiAoc2VjdG9yX3QpKH4odTMyKTApKSB7CiAJCQlzcGFjZSA+Pj0gMTsKLQkJCWNvbmYtPnByZXNoaWZ0Kys7CisJCQljb25mLT5zZWN0b3Jfc2hpZnQrKzsKIAkJfQogCX0KIAkvKgpAQCAtMTk0LDkgKzE4NSw5IEBACiAJCXVuc2lnbmVkIHJvdW5kOwogCQl1bnNpZ25lZCBsb25nIGJhc2U7CiAKLQkJc3ogPSBjb25mLT5hcnJheV9zZWN0b3JzID4+IChjb25mLT5wcmVzaGlmdCArIDEpOworCQlzeiA9IGNvbmYtPmFycmF5X3NlY3RvcnMgPj4gY29uZi0+c2VjdG9yX3NoaWZ0OwogCQlzeiArPSAxOyAvKiBmb3JjZSByb3VuZC11cCAqLwotCQliYXNlID0gY29uZi0+aGFzaF9zcGFjaW5nID4+IGNvbmYtPnByZXNoaWZ0OworCQliYXNlID0gY29uZi0+c3BhY2luZyA+PiBjb25mLT5zZWN0b3Jfc2hpZnQ7CiAJCXJvdW5kID0gc2VjdG9yX2RpdihzeiwgYmFzZSk7CiAJCW5iX3pvbmUgPSBzeiArIChyb3VuZCA/IDEgOiAwKTsKIAl9CkBAIC0yMTEsMzIgKzIwMiwzMSBAQAogCSAqIEhlcmUgd2UgZ2VuZXJhdGUgdGhlIGxpbmVhciBoYXNoIHRhYmxlCiAJICogRmlyc3QgY2FsY3VsYXRlIHRoZSBkZXZpY2Ugb2Zmc2V0cy4KIAkgKi8KLQljb25mLT5kaXNrc1swXS5vZmZzZXQgPSAwOworCWNvbmYtPmRpc2tzWzBdLnN0YXJ0X3NlY3RvciA9IDA7CiAJZm9yIChpID0gMTsgaSA8IHJhaWRfZGlza3M7IGkrKykKLQkJY29uZi0+ZGlza3NbaV0ub2Zmc2V0ID0KLQkJCWNvbmYtPmRpc2tzW2ktMV0ub2Zmc2V0ICsKLQkJCWNvbmYtPmRpc2tzW2ktMV0uc2l6ZTsKKwkJY29uZi0+ZGlza3NbaV0uc3RhcnRfc2VjdG9yID0KKwkJCWNvbmYtPmRpc2tzW2ktMV0uc3RhcnRfc2VjdG9yICsKKwkJCWNvbmYtPmRpc2tzW2ktMV0ubnVtX3NlY3RvcnM7CiAKIAl0YWJsZSA9IGNvbmYtPmhhc2hfdGFibGU7Ci0JY3Vycl9vZmZzZXQgPSAwOwogCWkgPSAwOwotCWZvciAoY3Vycl9vZmZzZXQgPSAwOwotCSAgICAgY3Vycl9vZmZzZXQgPCBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKLQkgICAgIGN1cnJfb2Zmc2V0ICs9IGNvbmYtPmhhc2hfc3BhY2luZykgeworCWZvciAoY3Vycl9zZWN0b3IgPSAwOworCSAgICAgY3Vycl9zZWN0b3IgPCBjb25mLT5hcnJheV9zZWN0b3JzOworCSAgICAgY3Vycl9zZWN0b3IgKz0gY29uZi0+c3BhY2luZykgewogCiAJCXdoaWxlIChpIDwgcmFpZF9kaXNrcy0xICYmCi0JCSAgICAgICBjdXJyX29mZnNldCA+PSBjb25mLT5kaXNrc1tpKzFdLm9mZnNldCkKKwkJICAgICAgIGN1cnJfc2VjdG9yID49IGNvbmYtPmRpc2tzW2krMV0uc3RhcnRfc2VjdG9yKQogCQkJaSsrOwogCiAJCSp0YWJsZSArKyA9IGNvbmYtPmRpc2tzICsgaTsKIAl9CiAKLQlpZiAoY29uZi0+cHJlc2hpZnQpIHsKLQkJY29uZi0+aGFzaF9zcGFjaW5nID4+PSBjb25mLT5wcmVzaGlmdDsKLQkJLyogcm91bmQgaGFzaF9zcGFjaW5nIHVwIHNvIHRoYXQgd2hlbiB3ZSBkaXZpZGUgYnkgaXQsCisJaWYgKGNvbmYtPnNlY3Rvcl9zaGlmdCkgeworCQljb25mLT5zcGFjaW5nID4+PSBjb25mLT5zZWN0b3Jfc2hpZnQ7CisJCS8qIHJvdW5kIHNwYWNpbmcgdXAgc28gdGhhdCB3aGVuIHdlIGRpdmlkZSBieSBpdCwKIAkJICogd2UgZXJyIG9uIHRoZSBzaWRlIG9mICJ0b28tbG93Iiwgd2hpY2ggaXMgc2FmZXN0LgogCQkgKi8KLQkJY29uZi0+aGFzaF9zcGFjaW5nKys7CisJCWNvbmYtPnNwYWNpbmcrKzsKIAl9CiAKIAlCVUdfT04odGFibGUgLSBjb25mLT5oYXNoX3RhYmxlID4gbmJfem9uZSk7CkBAIC0zMTcsNyArMzA3LDYgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKIAlkZXZfaW5mb190ICp0bXBfZGV2OwotCXNlY3Rvcl90IGJsb2NrOwogCWludCBjcHU7CiAKIAlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKQEAgLTMzMiwyOSArMzIxLDMzIEBACiAJcGFydF9zdGF0X3VubG9jaygpOwogCiAJdG1wX2RldiA9IHdoaWNoX2RldihtZGRldiwgYmlvLT5iaV9zZWN0b3IpOwotCWJsb2NrID0gYmlvLT5iaV9zZWN0b3IgPj4gMTsKICAgICAKLQlpZiAodW5saWtlbHkoYmxvY2sgPj0gKHRtcF9kZXYtPnNpemUgKyB0bXBfZGV2LT5vZmZzZXQpCi0JCSAgICAgfHwgYmxvY2sgPCB0bXBfZGV2LT5vZmZzZXQpKSB7CisJaWYgKHVubGlrZWx5KGJpby0+Ymlfc2VjdG9yID49ICh0bXBfZGV2LT5udW1fc2VjdG9ycyArCisJCQkJCXRtcF9kZXYtPnN0YXJ0X3NlY3RvcikKKwkJICAgICB8fCAoYmlvLT5iaV9zZWN0b3IgPAorCQkJIHRtcF9kZXYtPnN0YXJ0X3NlY3RvcikpKSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlwcmludGsoImxpbmVhcl9tYWtlX3JlcXVlc3Q6IEJsb2NrICVsbHUgb3V0IG9mIGJvdW5kcyBvbiAiCi0JCQkiZGV2ICVzIHNpemUgJWxsdSBvZmZzZXQgJWxsdVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssCisJCXByaW50aygibGluZWFyX21ha2VfcmVxdWVzdDogU2VjdG9yICVsbHUgb3V0IG9mIGJvdW5kcyBvbiAiCisJCQkiZGV2ICVzOiAlbGx1IHNlY3RvcnMsIG9mZnNldCAlbGx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliaW8tPmJpX3NlY3RvciwKIAkJCWJkZXZuYW1lKHRtcF9kZXYtPnJkZXYtPmJkZXYsIGIpLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXBfZGV2LT5zaXplLAotCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2Rldi0+b2Zmc2V0KTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2Rldi0+bnVtX3NlY3RvcnMsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXRtcF9kZXYtPnN0YXJ0X3NlY3Rvcik7CiAJCWJpb19pb19lcnJvcihiaW8pOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHVubGlrZWx5KGJpby0+Ymlfc2VjdG9yICsgKGJpby0+Ymlfc2l6ZSA+PiA5KSA+Ci0JCSAgICAgKHRtcF9kZXYtPm9mZnNldCArIHRtcF9kZXYtPnNpemUpPDwxKSkgeworCQkgICAgIHRtcF9kZXYtPnN0YXJ0X3NlY3RvciArIHRtcF9kZXYtPm51bV9zZWN0b3JzKSkgewogCQkvKiBUaGlzIGJpbyBjcm9zc2VzIGEgZGV2aWNlIGJvdW5kYXJ5LCBzbyB3ZSBoYXZlIHRvCiAJCSAqIHNwbGl0IGl0LgogCQkgKi8KIAkJc3RydWN0IGJpb19wYWlyICpicDsKKwogCQlicCA9IGJpb19zcGxpdChiaW8sCi0JCQkgICAgICAgKCh0bXBfZGV2LT5vZmZzZXQgKyB0bXBfZGV2LT5zaXplKTw8MSkgLSBiaW8tPmJpX3NlY3Rvcik7CisJCQkgICAgICAgdG1wX2Rldi0+c3RhcnRfc2VjdG9yICsgdG1wX2Rldi0+bnVtX3NlY3RvcnMKKwkJCSAgICAgICAtIGJpby0+Ymlfc2VjdG9yKTsKKwogCQlpZiAobGluZWFyX21ha2VfcmVxdWVzdChxLCAmYnAtPmJpbzEpKQogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoJmJwLT5iaW8xKTsKIAkJaWYgKGxpbmVhcl9tYWtlX3JlcXVlc3QocSwgJmJwLT5iaW8yKSkKQEAgLTM2NCw3ICszNTcsOCBAQAogCX0KIAkJICAgIAogCWJpby0+YmlfYmRldiA9IHRtcF9kZXYtPnJkZXYtPmJkZXY7Ci0JYmlvLT5iaV9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvciAtICh0bXBfZGV2LT5vZmZzZXQgPDwgMSkgKyB0bXBfZGV2LT5yZGV2LT5kYXRhX29mZnNldDsKKwliaW8tPmJpX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yIC0gdG1wX2Rldi0+c3RhcnRfc2VjdG9yCisJCSsgdG1wX2Rldi0+cmRldi0+ZGF0YV9vZmZzZXQ7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTM3MiwyOSArMzY2LDYgQEAKIHN0YXRpYyB2b2lkIGxpbmVhcl9zdGF0dXMgKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldikKIHsKIAotI3VuZGVmIE1EX0RFQlVHCi0jaWZkZWYgTURfREVCVUcKLQlpbnQgajsKLQlsaW5lYXJfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0Jc2VjdG9yX3QgcyA9IDA7Ci0gIAotCXNlcV9wcmludGYoc2VxLCAiICAgICAgIik7Ci0JZm9yIChqID0gMDsgaiA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBqKyspCi0JewotCQljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JCXMgKz0gY29uZi0+c21hbGxlc3Rfc2l6ZTsKLQkJc2VxX3ByaW50ZihzZXEsICJbJXMiLAotCQkJICAgYmRldm5hbWUoY29uZi0+aGFzaF90YWJsZVtqXVswXS5yZGV2LT5iZGV2LGIpKTsKLQotCQl3aGlsZSAocyA+IGNvbmYtPmhhc2hfdGFibGVbal1bMF0ub2Zmc2V0ICsKLQkJICAgICAgICAgICBjb25mLT5oYXNoX3RhYmxlW2pdWzBdLnNpemUpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIi8lc10gIiwKLQkJCQkgICBiZGV2bmFtZShjb25mLT5oYXNoX3RhYmxlW2pdWzFdLnJkZXYtPmJkZXYsYikpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKHNlcSwgIl0gIik7Ci0JfQotCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKLSNlbmRpZgogCXNlcV9wcmludGYoc2VxLCAiICVkayByb3VuZGluZyIsIG1kZGV2LT5jaHVua19zaXplLzEwMjQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMGEzYTRiZC4uYWFhM2Q0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzIsMzEgKzMyLDIxIEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIGZvciBpbnZhbGlkYXRlX2JkZXYgKi8KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLQotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotI2RlZmluZSBNRF9EUklWRVIKIAogLyogNjMgcGFydGl0aW9ucyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFqb3IgbnVtYmVyIChtZHApICovCiAjZGVmaW5lIE1kcE1pbm9yU2hpZnQgNgpAQCAtNjYsNyArNTYsNyBAQAogCiAKICNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgdm9pZCBhdXRvc3RhcnRfYXJyYXlzIChpbnQgcGFydCk7CitzdGF0aWMgdm9pZCBhdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTsKICNlbmRpZgogCiBzdGF0aWMgTElTVF9IRUFEKHBlcnNfbGlzdCk7CkBAIC0yMTIsNyArMjAyLDcgQEAKIAkJKQogCiAKLXN0YXRpYyBpbnQgbWRfZmFpbF9yZXF1ZXN0IChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGludCBtZF9mYWlsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAliaW9faW9fZXJyb3IoYmlvKTsKIAlyZXR1cm4gMDsKQEAgLTIxMDYsOCArMjA5Niw2IEBACiAKIAlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMTAsICZzaXplKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChzaXplIDwgbXlfbWRkZXYtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChteV9tZGRldi0+cGVycyAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCkgewogCQlpZiAobXlfbWRkZXYtPnBlcnNpc3RlbnQpIHsKIAkJCXNpemUgPSBzdXBlcl90eXBlc1tteV9tZGRldi0+bWFqb3JfdmVyc2lvbl0uCkBAIC0yMTE4LDkgKzIxMDYsOSBAQAogCQkJc2l6ZSA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDEwKTsKIAkJCXNpemUgLT0gcmRldi0+ZGF0YV9vZmZzZXQvMjsKIAkJfQotCQlpZiAoc2l6ZSA8IG15X21kZGV2LT5zaXplKQotCQkJcmV0dXJuIC1FSU5WQUw7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAl9CisJaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAogCXJkZXYtPnNpemUgPSBzaXplOwogCWlmIChzaXplID4gb2xkc2l6ZSAmJiBteV9tZGRldi0+ZXh0ZXJuYWwpIHsKQEAgLTI0MDYsMTIgKzIzOTQsMTEgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIG1zZWM7CiAJY2hhciBidWZbMzBdOwotCWNoYXIgKmU7CisKIAkvKiByZW1vdmUgYSBwZXJpb2QsIGFuZCBjb3VudCBkaWdpdHMgYWZ0ZXIgaXQgKi8KIAlpZiAobGVuID49IHNpemVvZihidWYpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJsY3B5KGJ1ZiwgY2J1ZiwgbGVuKTsKLQlidWZbbGVuXSA9IDA7CisJc3RybGNweShidWYsIGNidWYsIHNpemVvZihidWYpKTsKIAlmb3IgKGk9MDsgaTxsZW47IGkrKykgewogCQlpZiAoZG90KSB7CiAJCQlpZiAoaXNkaWdpdChidWZbaV0pKSB7CkBAIC0yNDI0LDggKzI0MTEsNyBAQAogCQkJYnVmW2ldID0gMDsKIAkJfQogCX0KLQltc2VjID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZSwgMTApOwotCWlmIChlID09IGJ1ZiB8fCAoKmUgJiYgKmUgIT0gJ1xuJykpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtc2VjKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCW1zZWMgPSAobXNlYyAqIDEwMDApIC8gc2NhbGU7CiAJaWYgKG1zZWMgPT0gMCkKQEAgLTI3MjcsOSArMjcxMyw5IEBACiAJCWJyZWFrOwogCWNhc2UgcmVhZF9hdXRvOgogCQlpZiAobWRkZXYtPnBlcnMpIHsKLQkJCWlmIChtZGRldi0+cm8gIT0gMSkKKwkJCWlmIChtZGRldi0+cm8gPT0gMCkKIAkJCQllcnIgPSBkb19tZF9zdG9wKG1kZGV2LCAxLCAwKTsKLQkJCWVsc2UKKwkJCWVsc2UgaWYgKG1kZGV2LT5ybyA9PSAxKQogCQkJCWVyciA9IHJlc3RhcnRfYXJyYXkobWRkZXYpOwogCQkJaWYgKGVyciA9PSAwKSB7CiAJCQkJbWRkZXYtPnJvID0gMjsKQEAgLTI5NDUsNyArMjkzMSwxMyBAQAogewogCWludCBtYWpvciwgbWlub3I7CiAJY2hhciAqZTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCisJLyogQ2hhbmdpbmcgdGhlIGRldGFpbHMgb2YgJ2V4dGVybmFsJyBtZXRhZGF0YSBpcworCSAqIGFsd2F5cyBwZXJtaXR0ZWQuICBPdGhlcndpc2UgdGhlcmUgbXVzdCBiZQorCSAqIG5vIGRldmljZXMgYXR0YWNoZWQgdG8gdGhlIGFycmF5LgorCSAqLworCWlmIChtZGRldi0+ZXh0ZXJuYWwgJiYgc3RybmNtcChidWYsICJleHRlcm5hbDoiLCA5KSA9PSAwKQorCQk7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoY21kX21hdGNoKGJ1ZiwgIm5vbmUiKSkgewpAQCAtMzUyNywxNyArMzUxOSwxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyoKLQkJICogY2h1bmstc2l6ZSBoYXMgdG8gYmUgYSBwb3dlciBvZiAyIGFuZCBtdWx0aXBsZXMgb2YgUEFHRV9TSVpFCisJCSAqIGNodW5rLXNpemUgaGFzIHRvIGJlIGEgcG93ZXIgb2YgMgogCQkgKi8KIAkJaWYgKCAoMSA8PCBmZnoofmNodW5rX3NpemUpKSAhPSBjaHVua19zaXplKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImNodW5rX3NpemUgb2YgJWQgbm90IHZhbGlkXG4iLCBjaHVua19zaXplKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChjaHVua19zaXplIDwgUEFHRV9TSVpFKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRvbyBzbWFsbCBjaHVua19zaXplOiAlZCA8ICVsZFxuIiwKLQkJCQljaHVua19zaXplLCBQQUdFX1NJWkUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAogCQkvKiBkZXZpY2VzIG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2Ygb25lIGNodW5rICovCiAJCXJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikgewpAQCAtMzU1NSwxMiArMzU0MiwxMCBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAobWRkZXYtPmxldmVsICE9IExFVkVMX05PTkUpCiAJCXJlcXVlc3RfbW9kdWxlKCJtZC1sZXZlbC0lZCIsIG1kZGV2LT5sZXZlbCk7CiAJZWxzZSBpZiAobWRkZXYtPmNsZXZlbFswXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm1kLSVzIiwgbWRkZXYtPmNsZXZlbCk7Ci0jZW5kaWYKIAogCS8qCiAJICogRHJvcCBhbGwgY29udGFpbmVyIGRldmljZSBidWZmZXJzLCBmcm9tIG5vdyBvbgpAQCAtMzk3MSwxMCArMzk1NiwxMCBAQAogCX0KIAlwcmludGsoIlxuIik7CiAKLQllcnIgPSBkb19tZF9ydW4gKG1kZGV2KTsKKwllcnIgPSBkb19tZF9ydW4obWRkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6IGRvX21kX3J1bigpIHJldHVybmVkICVkXG4iLCBlcnIpOwotCQlkb19tZF9zdG9wIChtZGRldiwgMCwgMCk7CisJCWRvX21kX3N0b3AobWRkZXYsIDAsIDApOwogCX0KIH0KIApAQCAtNDMzMyw3ICs0MzE4LDcgQEAKIAogCWlmICghKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfRkFVTFRZKSkpIHsKIAkJaW50IGVycjsKLQkJcmRldiA9IG1kX2ltcG9ydF9kZXZpY2UgKGRldiwgLTEsIDApOworCQlyZGV2ID0gbWRfaW1wb3J0X2RldmljZShkZXYsIC0xLCAwKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCQkibWQ6IGVycm9yLCBtZF9pbXBvcnRfZGV2aWNlKCkgcmV0dXJuZWQgJWxkXG4iLApAQCAtNDQxNSw3ICs0NDAwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmRldiA9IG1kX2ltcG9ydF9kZXZpY2UgKGRldiwgLTEsIDApOworCXJkZXYgPSBtZF9pbXBvcnRfZGV2aWNlKGRldiwgLTEsIDApOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSJtZDogZXJyb3IsIG1kX2ltcG9ydF9kZXZpY2UoKSByZXR1cm5lZCAlbGRcbiIsCkBAIC00OTM0LDExICs0OTE5LDExIEBACiAJCQlnb3RvIGRvbmVfdW5sb2NrOwogCiAJCWNhc2UgU1RPUF9BUlJBWToKLQkJCWVyciA9IGRvX21kX3N0b3AgKG1kZGV2LCAwLCAxKTsKKwkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDAsIDEpOwogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFNUT1BfQVJSQVlfUk86Ci0JCQllcnIgPSBkb19tZF9zdG9wIChtZGRldiwgMSwgMSk7CisJCQllcnIgPSBkb19tZF9zdG9wKG1kZGV2LCAxLCAxKTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAl9CkBAIC00OTg3LDcgKzQ5NzIsNyBAQAogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFJVTl9BUlJBWToKLQkJCWVyciA9IGRvX21kX3J1biAobWRkZXYpOworCQkJZXJyID0gZG9fbWRfcnVuKG1kZGV2KTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAkJY2FzZSBTRVRfQklUTUFQX0ZJTEU6CkBAIC01NDI1LDExICs1NDEwLDExIEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgIiBzdXBlciBub24tcGVyc2lzdGVudCIpOwogCiAJCWlmIChtZGRldi0+cGVycykgewotCQkJbWRkZXYtPnBlcnMtPnN0YXR1cyAoc2VxLCBtZGRldik7CisJCQltZGRldi0+cGVycy0+c3RhdHVzKHNlcSwgbWRkZXYpOwogCSAJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKIAkJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7CiAJCQkJaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA+IDIpIHsKLQkJCQkJc3RhdHVzX3Jlc3luYyAoc2VxLCBtZGRldik7CisJCQkJCXN0YXR1c19yZXN5bmMoc2VxLCBtZGRldik7CiAJCQkJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKIAkJCQl9IGVsc2UgaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAxIHx8IG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAyKQogCQkJCQlzZXFfcHJpbnRmKHNlcSwgIlx0cmVzeW5jPURFTEFZRURcbiAgICAgICIpOwpAQCAtNjI2MCw3ICs2MjQ1LDcgQEAKIAkJCQkgKiBhcHBlYXJzIHRvIHN0aWxsIGJlIGluIHVzZS4gIEhlbmNlCiAJCQkJICogdGhlICcxMDAnLgogCQkJCSAqLwotCQkJCWRvX21kX3N0b3AgKG1kZGV2LCAxLCAxMDApOworCQkJCWRvX21kX3N0b3AobWRkZXYsIDEsIDEwMCk7CiAJCQkJbWRkZXZfdW5sb2NrKG1kZGV2KTsKIAkJCX0KIAkJLyoKQEAgLTYzMDQsNyArNjI4OSw3IEBACiAJcmFpZF90YWJsZV9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUocmFpZF9yb290X3RhYmxlKTsKIAogCW1kX2dlbmluaXQoKTsKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDhiYjg3OTQuLmQ0YWM0N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTksMTYgKzE5LDcgQEAKICAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL211bHRpcGF0aC5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jZGVmaW5lIE1BSk9SX05SIE1EX01BSk9SCi0jZGVmaW5lIE1EX0RSSVZFUgotI2RlZmluZSBNRF9QRVJTT05BTElUWQogCiAjZGVmaW5lIE1BWF9XT1JLX1BFUl9ESVNLIDEyOAogCkBAIC0xNzYsNyArMTY3LDcgQEAKIAltcF9iaC0+YmlvID0gKmJpbzsKIAltcF9iaC0+YmlvLmJpX3NlY3RvciArPSBtdWx0aXBhdGgtPnJkZXYtPmRhdGFfb2Zmc2V0OwogCW1wX2JoLT5iaW8uYmlfYmRldiA9IG11bHRpcGF0aC0+cmRldi0+YmRldjsKLQltcF9iaC0+YmlvLmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVCk7CisJbXBfYmgtPmJpby5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAltcF9iaC0+YmlvLmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAltcF9iaC0+YmlvLmJpX3ByaXZhdGUgPSBtcF9iaDsKIAlnZW5lcmljX21ha2VfcmVxdWVzdCgmbXBfYmgtPmJpbyk7CkBAIC00MDIsNyArMzkzLDcgQEAKIAkJCSpiaW8gPSAqKG1wX2JoLT5tYXN0ZXJfYmlvKTsKIAkJCWJpby0+Ymlfc2VjdG9yICs9IGNvbmYtPm11bHRpcGF0aHNbbXBfYmgtPnBhdGhdLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bXVsdGlwYXRoc1ttcF9iaC0+cGF0aF0ucmRldi0+YmRldjsKLQkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCk7CiAJCQliaW8tPmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAkJCWJpby0+YmlfcHJpdmF0ZSA9IG1wX2JoOwogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA1MzUwOGE4Li44YWM2NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0xOCwxMyArMTgsOCBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQwLmg+CiAKLSNkZWZpbmUgTUFKT1JfTlIgTURfTUFKT1IKLSNkZWZpbmUgTURfRFJJVkVSCi0jZGVmaW5lIE1EX1BFUlNPTkFMSVRZCi0KIHN0YXRpYyB2b2lkIHJhaWQwX3VucGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBiOTc2NDQyLi45Yzc4OGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggOGJkYzliZi4uZGE1MTI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CiAKQEAgLTIwMjgsOCArMjAyOSw5IEBACiAJaW50IG5jLCBmYywgZm87CiAJc2VjdG9yX3Qgc3RyaWRlLCBzaXplOwogCi0JaWYgKG1kZGV2LT5jaHVua19zaXplID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMTA6IG5vbi16ZXJvIGNodW5rIHNpemUgcmVxdWlyZWQuXG4iKTsKKwlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMTA6IGNodW5rIHNpemUgbXVzdCBiZSAiCisJCSAgICAgICAiYXQgbGVhc3QgUEFHRV9TSVpFKCVsZCkuXG4iLCBQQUdFX1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBhZTE2Nzk0Li5hMzZhNzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC00MywxMiArNDMsNyBAQAogICogbWlzcyBhbnkgYml0cy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgInJhaWQ2LmgiCiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgpAQCAtMjc1LDcgKzI3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrIChzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CitzdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CiAKIHN0YXRpYyB2b2lkIGluaXRfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHNlY3Rvcl90IHNlY3RvciwgaW50IHBkX2lkeCwgaW50IGRpc2tzKQogewpAQCAtMTE1MSw3ICsxMTQ2LDcgQEAKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0IChzdHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKQorc3RhdGljIHZvaWQgcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmksIGludCBlcnJvcikKIHsKICAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IGJpLT5iaV9wcml2YXRlOwogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CkBAIC0xMTgzLDcgKzExNzgsNyBAQAogCiBzdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKTsKIAkKLXN0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrIChzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSkKK3N0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKQogewogCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAKQEAgLTEyMjEsMTAgKzEyMTYsMTAgQEAKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCX0KIAkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7Ci0JCXByaW50ayAoS0VSTl9BTEVSVAotCQkJInJhaWQ1OiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuXG4iCi0JCQkicmFpZDU6IE9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXMuXG4iLAotCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwgY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCk7CisJCXByaW50ayhLRVJOX0FMRVJUCisJCSAgICAgICAicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS5cbiIKKwkJICAgICAgICJyYWlkNTogT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlcy5cbiIsCisJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKIAl9CiB9CiAKQEAgLTEzMjAsOCArMTMxNSw4IEBACiAJCQkqZGRfaWR4ID0gKCpwZF9pZHggKyAyICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsgKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCQljb25mLT5hbGdvcml0aG0pOworCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKKwkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEzOTYsOCArMTM5MSw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayAoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCQlwcmludGsoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAorCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTQwNSw3ICsxNDAwLDcgQEAKIAljaHVua19udW1iZXIgPSBzdHJpcGUgKiBkYXRhX2Rpc2tzICsgaTsKIAlyX3NlY3RvciA9IChzZWN0b3JfdCljaHVua19udW1iZXIgKiBzZWN0b3JzX3Blcl9jaHVuayArIGNodW5rX29mZnNldDsKIAotCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IgKHJfc2VjdG9yLCByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLCAmZHVtbXkxLCAmZHVtbXkyLCBjb25mKTsKKwljaGVjayA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKHJfc2VjdG9yLCByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLCAmZHVtbXkxLCAmZHVtbXkyLCBjb25mKTsKIAlpZiAoY2hlY2sgIT0gc2gtPnNlY3RvciB8fCBkdW1teTEgIT0gZGRfaWR4IHx8IGR1bW15MiAhPSBzaC0+cGRfaWR4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29tcHV0ZV9ibG9ja25yOiBtYXAgbm90IGNvcnJlY3RcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTQwMTIsNiArNDAwNywxMyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkNTogY2h1bmtfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0ICIKKwkJICAgICAgICJQQUdFX1NJWkUgYnV0ICVkIDwgJWxkXG4iLAorCQkgICAgICAgbWRkZXYtPmNodW5rX3NpemUsIFBBR0VfU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHsKIAkJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gY29udGludWUgdGhlIHJlc2hhcGUuCiAJCSAqIEN1cnJlbnRseSBvbmx5IGRpc2tzIGNhbiBjaGFuZ2UsIGl0IG11c3QKQEAgLTQyODksNyArNDI5MSw3IEBACiB9CiAKICNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgcHJpbnRfc2ggKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgcHJpbnRfc2goc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJaW50IGk7CiAKQEAgLTQzMDUsNyArNDMwNyw3IEBACiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludGFsbCAoc3RydWN0IHNlcV9maWxlICpzZXEsIHJhaWQ1X2NvbmZfdCAqY29uZikKK3N0YXRpYyB2b2lkIHByaW50YWxsKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCByYWlkNV9jb25mX3QgKmNvbmYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG47CkBAIC00MzIzLDcgKzQzMjUsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHN0YXR1cyAoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KQorc3RhdGljIHZvaWQgc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNi5oIGIvZHJpdmVycy9tZC9yYWlkNi5oCmluZGV4IDMxY2JlZTcuLjk4ZGNkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDYuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ2LmgKQEAgLTE4LDE1ICsxOCw2IEBACiAvKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCiAjZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDUuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwppbmRleCAyMjc2NDJiLi5hODg3ODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwpAQCAtMzQ4MSw3ICszNDgxLDkgQEAKIAkJCQkJfQogCQkJCQljdHJsVmFsID0gMDsKIAkJCQkJZm9yIChrID0gMDsgayA8IHN0YXRlLT5NWExfQ3RybFtpXS5zaXplOyBrKyspCi0JCQkJCQljdHJsVmFsICs9IHN0YXRlLT5NWExfQ3RybFtpXS52YWxba10gKiAoMSA8PCBrKTsKKwkJCQkJCWN0cmxWYWwgKz0gc3RhdGUtPgorCQkJCQkJCU1YTF9DdHJsW2ldLnZhbFtrXSAqCisJCQkJCQkJKDEgPDwgayk7CiAJCQkJfSBlbHNlCiAJCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTM1ODEsNyArMzU4Myw3IEBACiAKIHN0YXRpYyB1MzIgTVhMX0NlaWxpbmcodTMyIHZhbHVlLCB1MzIgcmVzb2x1dGlvbikKIHsKLQlyZXR1cm4gKHZhbHVlL3Jlc29sdXRpb24gKyAodmFsdWUgJSByZXNvbHV0aW9uID4gMCA/IDEgOiAwKSk7CisJcmV0dXJuIHZhbHVlIC8gcmVzb2x1dGlvbiArICh2YWx1ZSAlIHJlc29sdXRpb24gPiAwID8gMSA6IDApOwogfQogCiAvKiBSZXRyaWV2ZSB0aGUgSW5pdGlhbHphdGlvbiBSZWdpc3RlcnMgKi8KQEAgLTM5MTAsNyArMzkxMiwxMCBAQAogCiBzdGF0aWMgaW50IG14bDUwMDVzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CisJc3RydWN0IG14bDUwMDVzX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCXN0YXRlLT5jdXJyZW50X21vZGUgPSBNWExfUUFNOwogCXJldHVybiBteGw1MDA1c19yZWNvbmZpZ3VyZShmZSwgTVhMX1FBTSwgTVhMNTAwNVNfQkFORFdJRFRIXzZNSFopOwogfQogCkBAIC00MDkyLDcgKzQwOTcsNiBAQAogCXN0YXRlLT5mcm9udGVuZCA9IGZlOwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+Y3VycmVudF9tb2RlID0gTVhMX1FBTTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1YTDUwMDVTOiBBdHRhY2hlZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJY29uZmlnLT5pMmNfYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKaW5kZXggMmExYWFjMS4uZmIzZjNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYwpAQCAtNDkzLDYgKzQ5Myw3IEBACiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMzoKKwljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzM6CiAJY2FzZSBUVU5FUl9MR19OVFNDX1RBUEU6CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDM6CiAJY2FzZSBUVU5FUl9UQ0xfTUYwMkdJUF81TjoKQEAgLTc2Nyw2ICs3NjgsNyBAQAogCiAJc3dpdGNoIChwcml2LT50eXBlKSB7CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzM6CisJY2FzZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszOgogCQlpZiAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoID09IEJBTkRXSURUSF84X01IWiAmJgogCQkgICAgcGFyYW1zLT5mcmVxdWVuY3kgPj0gMTU4ODcwMDAwKQogCQkJYnVmWzNdIHw9IDB4MDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IDA0OTYxYTEuLjdjMGJjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC05NDYsNyArOTQ2LDcgQEAKIAl9LAogfTsKIAotLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FKFgpX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzW10gPSB7CiAJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDg2LCAweDUxLCB9LApAQCAtOTg0LDYgKzk4NCwyNyBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKKwkJLmhhc190ZGE5ODg3ID0gMSwKKwkJLnBvcnQxX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9hY3RpdmUgPSAxLAorCQkucG9ydDJfZm1faGlnaF9zZW5zaXRpdml0eSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKKwkJLnBvcnQxX3NldF9mb3JfZm1fbW9ubyA9IDEsCisJCS5yYWRpb19pZiA9IDEsCisJCS5mbV9nYWluX25vcm1hbCA9IDEsCisJfSwKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX0RJR0lUQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfZHZiX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX2R2Yl9yYW5nZXMpLAorCQkuaWZmcmVxID0gMTYgKiAzNi4xMjUsIC8qTUh6Ki8KKwl9LAorfTsKIAogLyogLS0tLS0tIFRVTkVSX0xHX1REVlNfSDA2WEYgLSBMRyBJTk5PVEVLIC8gSU5GSU5FT04gQVRTQyAtLS0tLSAqLwogCkBAIC0xNjYzLDYgKzE2ODQsMTYgQEAKIAkJLnBhcmFtcyA9IHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsX21mMDJnaXBfNW5fcGFyYW1zKSwKIAl9LAorCVtUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lciIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXMpLAorCQkubWluID0gMTYgKiAgNTAuODcsCisJCS5tYXggPSAxNiAqIDg1OC4wMCwKKwkJLnN0ZXBzaXplID0gMTY2NjY3LAorCQkuaW5pdGRhdGEgPSB0dWE2MDN4X2FnYzExMiwKKwkJLnNsZWVwZGF0YSA9ICh1OFtdKXsgNCwgMHg5YywgMHg2MCwgMHg4NSwgMHg1NCB9LAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKaW5kZXggZjljMmJiOS4uZTEyZDEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIERFRklORV9NVVRFWCh4YzUwMDBfbGlzdF9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0KTsKIAotI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgPj0gbGV2ZWwpIFwKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgInhjNTAwMCIsICMjIGFyZykKIAogI2RlZmluZSBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLXhjNTAwMC0xLjEuZnciCkBAIC0xMzgsMTEgKzEzOCwxMSBAQAogICAgaW1tZWRpYXRlbHkgdGhlIGxlbmd0aCBvZiB0aGUgZm9sbG93aW5nIHRyYW5zYWN0aW9uLgogCiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IFhDX1RWX1NUQU5EQVJEIHsKIAljaGFyICpOYW1lOwogCXUxNiBBdWRpb01vZGU7CiAJdTE2IFZpZGVvTW9kZTsKLX0gWENfVFZfU1RBTkRBUkQ7Cit9OwogCiAvKiBUdW5lciBzdGFuZGFyZHMgKi8KICNkZWZpbmUgTU5fTlRTQ19QQUxfQlRTQwkwCkBAIC0xNjksNyArMTY5LDcgQEAKICNkZWZpbmUgRk1fUmFkaW9fSU5QVVQyIAkyMQogI2RlZmluZSBGTV9SYWRpb19JTlBVVDEgCTIyCiAKLXN0YXRpYyBYQ19UVl9TVEFOREFSRCBYQzUwMDBfU3RhbmRhcmRbTUFYX1RWX1NUQU5EQVJEXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgWENfVFZfU1RBTkRBUkQgWEM1MDAwX1N0YW5kYXJkW01BWF9UVl9TVEFOREFSRF0gPSB7CiAJeyJNL04tTlRTQy9QQUwtQlRTQyIsIDB4MDQwMCwgMHg4MDIwfSwKIAl7Ik0vTi1OVFNDL1BBTC1BMiIsICAgMHgwNjAwLCAweDgwMjB9LAogCXsiTS9OLU5UU0MvUEFMLUVJQUoiLCAweDA0NDAsIDB4ODAyMH0sCkBAIC0xODMsNyArMTgzLDcgQEAKIAl7IkQvSy1QQUwtTklDQU0iLCAgICAgMHgwRTgwLCAweDgwMDl9LAogCXsiRC9LLVBBTC1NT05PIiwgICAgICAweDE0NzgsIDB4ODAwOX0sCiAJeyJEL0stU0VDQU0tQTIgREsxIiwgIDB4MTIwMCwgMHg4MDA5fSwKLQl7IkQvSy1TRUNBTS1BMiBML0RLMyIsMHgwRTAwLCAweDgwMDl9LAorCXsiRC9LLVNFQ0FNLUEyIEwvREszIiwgMHgwRTAwLCAweDgwMDl9LAogCXsiRC9LLVNFQ0FNLUEyIE1PTk8iLCAweDE0NzgsIDB4ODAwOX0sCiAJeyJMLVNFQ0FNLU5JQ0FNIiwgICAgIDB4OEU4MiwgMHgwMDA5fSwKIAl7IkwnLVNFQ0FNLU5JQ0FNIiwgICAgMHg4RTgyLCAweDQwMDl9LApAQCAtMzA3LDkgKzMwNywxMCBAQAogCXVuc2lnbmVkIGludCBsZW4sIHBvcywgaW5kZXg7CiAJdTggYnVmW1hDX01BWF9JMkNfV1JJVEVfTEVOR1RIXTsKIAotCWluZGV4PTA7Ci0Jd2hpbGUgKChpMmNfc2VxdWVuY2VbaW5kZXhdIT0weEZGKSB8fCAoaTJjX3NlcXVlbmNlW2luZGV4KzFdIT0weEZGKSkgewotCQlsZW4gPSBpMmNfc2VxdWVuY2VbaW5kZXhdKiAyNTYgKyBpMmNfc2VxdWVuY2VbaW5kZXgrMV07CisJaW5kZXggPSAwOworCXdoaWxlICgoaTJjX3NlcXVlbmNlW2luZGV4XSAhPSAweEZGKSB8fAorCQkoaTJjX3NlcXVlbmNlW2luZGV4ICsgMV0gIT0gMHhGRikpIHsKKwkJbGVuID0gaTJjX3NlcXVlbmNlW2luZGV4XSAqIDI1NiArIGkyY19zZXF1ZW5jZVtpbmRleCsxXTsKIAkJaWYgKGxlbiA9PSAweDAwMDApIHsKIAkJCS8qIFJFU0VUIGNvbW1hbmQgKi8KIAkJCXJlc3VsdCA9IHhjX3Jlc2V0KGZlKTsKQEAgLTMyOSwxNSArMzMwLDE3IEBACiAJCQlidWZbMV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyAxXTsKIAkJCXBvcyA9IDI7CiAJCQl3aGlsZSAocG9zIDwgbGVuKSB7Ci0JCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKSB7Ci0JCQkJCW5ieXRlc190b19zZW5kID0gWENfTUFYX0kyQ19XUklURV9MRU5HVEg7Ci0JCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGxlbiAtIHBvcykgPiBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSCAtIDIpCisJCQkJCW5ieXRlc190b19zZW5kID0KKwkJCQkJCVhDX01BWF9JMkNfV1JJVEVfTEVOR1RIOworCQkJCWVsc2UKIAkJCQkJbmJ5dGVzX3RvX3NlbmQgPSAobGVuIC0gcG9zICsgMik7CisJCQkJZm9yIChpID0gMjsgaSA8IG5ieXRlc190b19zZW5kOyBpKyspIHsKKwkJCQkJYnVmW2ldID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgcG9zICsKKwkJCQkJCWkgLSAyXTsKIAkJCQl9Ci0JCQkJZm9yIChpPTI7IGk8bmJ5dGVzX3RvX3NlbmQ7IGkrKykgewotCQkJCQlidWZbaV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyBwb3MgKyBpIC0gMl07Ci0JCQkJfQotCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLCBuYnl0ZXNfdG9fc2VuZCk7CisJCQkJcmVzdWx0ID0geGNfc2VuZF9pMmNfZGF0YShwcml2LCBidWYsCisJCQkJCW5ieXRlc190b19zZW5kKTsKIAogCQkJCWlmIChyZXN1bHQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpCiAJCQkJCXJldHVybiByZXN1bHQ7CkBAIC0zODYsOCArMzg5LDcgQEAKIAlkcHJpbnRrKDEsICIlcyglZCkgU291cmNlID0gJXNcbiIsIF9fZnVuY19fLCByZl9tb2RlLAogCQlyZl9tb2RlID09IFhDX1JGX01PREVfQUlSID8gIkFOVEVOTkEiIDogIkNBQkxFIik7CiAKLQlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKQotCXsKKwlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKSB7CiAJCXJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOwogCQlwcmludGsoS0VSTl9FUlIKIAkJCSIlcygpLCBJbnZhbGlkIG1vZGUsIGRlZmF1bHRpbmcgdG8gQ0FCTEUiLApAQCAtNTYwLDEzICs1NjIsMTMgQEAKIAkJLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKIAogCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsICZtc2csIDEpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLChpbnQpbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLCAoaW50KWxlbik7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHhjNTAwMF9md3VwbG9hZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtNTc2LDcgKzU3OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAieGM1MDAwOiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwKIAkJWEM1MDAwX0RFRkFVTFRfRklSTVdBUkUpOwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFLCAmcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmRldik7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkmcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgInhjNTAwMDogVXBsb2FkIGZhaWxlZC4gKGZpbGUgbm90IGZvdW5kPylcbiIpOwogCQlyZXQgPSBYQ19SRVNVTFRfUkVTRVRfRkFJTFVSRTsKQEAgLTU5Miw3ICs1OTUsNyBAQAogCQlyZXQgPSBYQ19SRVNVTFRfUkVTRVRfRkFJTFVSRTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICJ4YzUwMDA6IGZpcm13YXJlIHVwbG9hZFxuIik7Ci0JCXJldCA9IHhjX2xvYWRfaTJjX3NlcXVlbmNlKGZlLCAgZnctPmRhdGEgKTsKKwkJcmV0ID0geGNfbG9hZF9pMmNfc2VxdWVuY2UoZmUsICBmdy0+ZGF0YSk7CiAJfQogCiBvdXQ6CkBAIC02NTEsNyArNjU0LDcgQEAKIAogCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChIeilcbiIsIF9fZnVuY19fLCBwYXJhbXMtPmZyZXF1ZW5jeSk7CiAKLQlzd2l0Y2gocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJc3dpdGNoIChwYXJhbXMtPnUudnNiLm1vZHVsYXRpb24pIHsKIAljYXNlIFZTQl84OgogCWNhc2UgVlNCXzE2OgogCQlkcHJpbnRrKDEsICIlcygpIFZTQiBtb2R1bGF0aW9uXG4iLCBfX2Z1bmNfXyk7CkBAIC03NDgsNDIgKzc1MSw0MiBAQAogCS8qIEZJWCBNRTogU29tZSB2aWRlbyBzdGFuZGFyZHMgbWF5IGhhdmUgc2V2ZXJhbCBwb3NzaWJsZSBhdWRpbwogCQkgICBzdGFuZGFyZHMuIFdlIHNpbXBseSBkZWZhdWx0IHRvIG9uZSBvZiB0aGVtIGhlcmUuCiAJICovCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7CiAJCS8qIGRlZmF1bHQgdG8gQlRTQyBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IE1OX05UU0NfUEFMX0JUU0M7CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CiAJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBCR19QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfSSkgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gSV9QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CiAJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBES19QQUxfTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fREspIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9ESykgewogCQkvKiBkZWZhdWx0IHRvIEEyIERLMSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IERLX1NFQ0FNX0EyREsxOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gTF9TRUNBTV9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0xDKSB7CiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gTENfU0VDQU1fTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KQEAgLTc5MSw3ICs3OTQsNyBAQAogdHVuZV9jaGFubmVsOgogCXJldCA9IHhjX1NldFNpZ25hbFNvdXJjZShwcml2LCBwcml2LT5yZl9tb2RlKTsKIAlpZiAocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7Ci0JcHJpbnRrKEtFUk5fRVJSCisJCXByaW50ayhLRVJOX0VSUgogCQkJInhjNTAwMDogeGNfU2V0U2lnbmFsU291cmNlKCVkKSBmYWlsZWRcbiIsCiAJCQlwcml2LT5yZl9tb2RlKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CkBAIC04NjMsNyArODY2LDcgQEAKIAkgKiBJMkMgdHJhbnNhY3Rpb25zIHVudGlsIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlLiAgVGhpcyB3YXkgd2UKIAkgKiBkb24ndCBoYXZlIHRvIHJlbHkgb24gY2xvY2sgc3RyZXRjaGluZyB3b3JraW5nLgogCSAqLwotCXhjX3dhaXQoIDEwMCApOworCXhjX3dhaXQoMTAwKTsKIAogCS8qIERlZmF1bHQgdG8gIkNBQkxFIiBtb2RlICovCiAJcmV0IHw9IHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX1NJR05BTFNPVVJDRSwgWENfUkZfTU9ERV9DQUJMRSk7CkBAIC04ODUsMTUgKzg4OCwxMyBAQAogCSAqLwogCiAJcmV0ID0geGNfc2h1dGRvd24ocHJpdik7Ci0JaWYocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7CisJaWYgKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJ4YzUwMDA6ICVzKCkgdW5hYmxlIHRvIHNodXRkb3duIHR1bmVyXG4iLAogCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlCiAJCXJldHVybiBYQ19SRVNVTFRfU1VDQ0VTUzsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgeGM1MDAwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC05ODksNyArOTkwLDcgQEAKIAlpZiAoeGM1MDAwX3JlYWRyZWcocHJpdiwgWFJFR19QUk9EVUNUX0lELCAmaWQpICE9IDApCiAJCWdvdG8gZmFpbDsKIAotCXN3aXRjaChpZCkgeworCXN3aXRjaCAoaWQpIHsKIAljYXNlIFhDX1BST0RVQ1RfSURfRldfTE9BREVEOgogCQlwcmludGsoS0VSTl9JTkZPCiAJCQkieGM1MDAwOiBTdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaAppbmRleCBjZjFhNTU4Li5mNGMxNDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oCkBAIC00NSwxNyArNDUsMTcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMCkgfHwgXAogICAgIChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCQkJCQkgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAkJCQkJCSBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAKKyNlbmRpZgogCi0jZW5kaWYgLy8gX19YQzUwMDBfSF9fCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwppbmRleCBmNzMyMTQ0Li4xNGU2MjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCkBAIC01OTUsNiArNTk1LDE4IEBACiAJZG0xMTA1ZHZiX2RtYV91bm1hcChkbTExMDVkdmIpOwogfQogCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUXzEsCisJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9zZXRfc3ltYm9sX3JhdGUsCit9OworCiBzdGF0aWMgc3RydWN0IHN0djAyODhfY29uZmlnIGVhcmRhX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCiAJLm1pbl9kZWxheV9tcyA9IDEwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggZjE3MGU4Mi4uNTY4OWQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIHN0YXRpYyBpbnQgZHZiX2ZvcmNlX2F1dG9faW52ZXJzaW9uOwogc3RhdGljIGludCBkdmJfb3ZlcnJpZGVfdHVuZV9kZWxheTsKIHN0YXRpYyBpbnQgZHZiX3Bvd2VyZG93bl9vbl9zbGVlcCA9IDE7CitzdGF0aWMgaW50IGR2Yl9tZmVfd2FpdF90aW1lID0gNTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGZyb250ZW5kX2RlYnVnLCBkdmJfZnJvbnRlbmRfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZyb250ZW5kX2RlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgY29yZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKQEAgLTU4LDYgKzU5LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHZiX292ZXJyaWRlX3R1bmVfZGVsYXksICIwOiBub3JtYWwgKGRlZmF1bHQpLCA+MCA9PiBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgbG9jayBhZnRlciBhIHR1bmUgYXR0ZW1wdCIpOwogbW9kdWxlX3BhcmFtKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsICIwOiBkbyBub3QgcG93ZXIgZG93biwgMTogdHVybiBMTkIgdm9sdGFnZSBvZmYgb24gc2xlZXAgKGRlZmF1bHQpIik7Cittb2R1bGVfcGFyYW0oZHZiX21mZV93YWl0X3RpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGR2Yl9tZmVfd2FpdF90aW1lLCAiV2FpdCB1cCB0byA8bWZlX3dhaXRfdGltZT4gc2Vjb25kcyBvbiBvcGVuKCkgZm9yIG11bHRpLWZyb250ZW5kIHRvIGJlY29tZSBhdmFpbGFibGUgKGRlZmF1bHQ6NSBzZWNvbmRzKSIpOwogCiAjZGVmaW5lIGRwcmludGsgaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykgcHJpbnRrCiAKQEAgLTIxMiw4ICsyMTUsOSBAQAogCiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlkcHJpbnRrICgiRFZCOiBpbml0aWFsaXNpbmcgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKKwlkcHJpbnRrICgiRFZCOiBpbml0aWFsaXNpbmcgYWRhcHRlciAlaSBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQkgZmUtPmR2Yi0+bnVtLAorCQkgZmUtPmlkLAogCQkgZmUtPm9wcy5pbmZvLm5hbWUpOwogCiAJaWYgKGZlLT5vcHMuaW5pdCkKQEAgLTY4Niw3ICs2OTAsNyBAQAogCW1iKCk7CiAKIAlmZV90aHJlYWQgPSBrdGhyZWFkX3J1bihkdmJfZnJvbnRlbmRfdGhyZWFkLCBmZSwKLQkJImtkdmItZmUtJWkiLCBmZS0+ZHZiLT5udW0pOworCQkia2R2Yi1hZC0laS1mZS0laSIsIGZlLT5kdmItPm51bSxmZS0+aWQpOwogCWlmIChJU19FUlIoZmVfdGhyZWFkKSkgewogCQlyZXQgPSBQVFJfRVJSKGZlX3RocmVhZCk7CiAJCXByaW50aygiZHZiX2Zyb250ZW5kX3N0YXJ0OiBmYWlsZWQgdG8gc3RhcnQga3RocmVhZCAoJWQpXG4iLCByZXQpOwpAQCAtNzEwLDggKzcxNCw4IEBACiAJCSpmcmVxX21heCA9IG1pbihmZS0+b3BzLmluZm8uZnJlcXVlbmN5X21heCwgZmUtPm9wcy50dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWF4KTsKIAogCWlmICgqZnJlcV9taW4gPT0gMCB8fCAqZnJlcV9tYXggPT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBmcmVxdWVuY3kgbGltaXRzIHVuZGVmaW5lZCAtIGZpeCB0aGUgZHJpdmVyXG4iLAotCQkgICAgICAgZmUtPmR2Yi0+bnVtKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICV1IGZyZXF1ZW5jeSBsaW1pdHMgdW5kZWZpbmVkIC0gZml4IHRoZSBkcml2ZXJcbiIsCisJCSAgICAgICBmZS0+ZHZiLT5udW0sZmUtPmlkKTsKIH0KIAogc3RhdGljIGludCBkdmJfZnJvbnRlbmRfY2hlY2tfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKQEAgLTcyNCw4ICs3MjgsOCBAQAogCWR2Yl9mcm9udGVuZF9nZXRfZnJlcXVlbnlfbGltaXRzKGZlLCAmZnJlcV9taW4sICZmcmVxX21heCk7CiAJaWYgKChmcmVxX21pbiAmJiBwYXJtcy0+ZnJlcXVlbmN5IDwgZnJlcV9taW4pIHx8CiAJICAgIChmcmVxX21heCAmJiBwYXJtcy0+ZnJlcXVlbmN5ID4gZnJlcV9tYXgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgZnJlcXVlbmN5ICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJICAgICAgIGZlLT5kdmItPm51bSwgcGFybXMtPmZyZXF1ZW5jeSwgZnJlcV9taW4sIGZyZXFfbWF4KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIGZyZXF1ZW5jeSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCisJCSAgICAgICBmZS0+ZHZiLT5udW0sIGZlLT5pZCwgcGFybXMtPmZyZXF1ZW5jeSwgZnJlcV9taW4sIGZyZXFfbWF4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03MzUsOCArNzM5LDggQEAKIAkJICAgICBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlIDwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbikgfHwKIAkJICAgIChmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4ICYmCiAJCSAgICAgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSA+IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlLAogCQkJICAgICAgIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4sIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTc0Niw4ICs3NTAsOCBAQAogCQkgICAgIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSA8IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pIHx8CiAJCSAgICAoZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCAmJgogCQkgICAgIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSA+IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKLQkJCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAlaSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCisJCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBmZS0+aWQsIHBhcm1zLT51LnFhbS5zeW1ib2xfcmF0ZSwKIAkJCSAgICAgICBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluLCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC04OTksMzAgKzkwMywzMCBAQAogCWludCBpOwogCiAJaWYgKHR2cC0+Y21kIDw9IDAgfHwgdHZwLT5jbWQgPiBEVFZfTUFYX0NPTU1BTkQpIHsKLQkJcHJpbnRrKCIlczogdHZwLmNtZCA9IDB4JTA4eCAodW5kZWZpbmVkL3Vua25vd24vaW52YWxpZClcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0dnAuY21kID0gMHglMDh4IHVuZGVmaW5lZFxuIiwKIAkJCV9fZnVuY19fLCB0dnAtPmNtZCk7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoIiVzKCkgdHZwLmNtZCAgICA9IDB4JTA4eCAoJXMpXG4iCi0JCSxfX0ZVTkNUSU9OX18KKwlkcHJpbnRrKCIlcygpIHR2cC5jbWQgICAgPSAweCUwOHggKCVzKVxuIgorCQksX19mdW5jX18KIAkJLHR2cC0+Y21kCiAJCSxkdHZfY21kc1sgdHZwLT5jbWQgXS5uYW1lKTsKIAogCWlmKGR0dl9jbWRzWyB0dnAtPmNtZCBdLmJ1ZmZlcikgewogCi0JCXByaW50aygiJXMoKSB0dnAudS5idWZmZXIubGVuID0gMHglMDJ4XG4iCi0JCQksX19GVU5DVElPTl9fCisJCWRwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmxlbiA9IDB4JTAyeFxuIgorCQkJLF9fZnVuY19fCiAJCQksdHZwLT51LmJ1ZmZlci5sZW4pOwogCiAJCWZvcihpID0gMDsgaSA8IHR2cC0+dS5idWZmZXIubGVuOyBpKyspCi0JCQlwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmRhdGFbMHglMDJ4XSA9IDB4JTAyeFxuIgotCQkJCSxfX0ZVTkNUSU9OX18KKwkJCWRwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmRhdGFbMHglMDJ4XSA9IDB4JTAyeFxuIgorCQkJCSxfX2Z1bmNfXwogCQkJCSxpCiAJCQkJLHR2cC0+dS5idWZmZXIuZGF0YVtpXSk7CiAKIAl9IGVsc2UKLQkJcHJpbnRrKCIlcygpIHR2cC51LmRhdGEgPSAweCUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdHZwLT51LmRhdGEpOworCQlkcHJpbnRrKCIlcygpIHR2cC51LmRhdGEgPSAweCUwOHhcbiIsIF9fZnVuY19fLCB0dnAtPnUuZGF0YSk7CiB9CiAKIGludCBpc19sZWdhY3lfZGVsaXZlcnlfc3lzdGVtKGZlX2RlbGl2ZXJ5X3N5c3RlbV90IHMpCkBAIC05NDIsOCArOTQ2LDYgQEAKIHsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCWMtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAljLT5pbnZlcnNpb24gPSBwLT5pbnZlcnNpb247CiAKQEAgLTk5OCwyNyArMTAwMCwyNSBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCXAtPmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CiAKIAlzd2l0Y2ggKGZlLT5vcHMuaW5mby50eXBlKSB7CiAJY2FzZSBGRV9RUFNLOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFQU0sgcmVxXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIFByZXBhcmluZyBRUFNLIHJlcVxuIiwgX19mdW5jX18pOwogCQlwLT51LnFwc2suc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xcHNrLmZlY19pbm5lciA9IGMtPmZlY19pbm5lcjsKIAkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlM7CiAJCWJyZWFrOwogCWNhc2UgRkVfUUFNOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFBTSByZXFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFBTSByZXFcbiIsIF9fZnVuY19fKTsKIAkJcC0+dS5xYW0uc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKIAkJcC0+dS5xYW0uZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOwogCQlwLT51LnFhbS5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKIAkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQkNfQU5ORVhfQUM7CiAJCWJyZWFrOwogCWNhc2UgRkVfT0ZETToKLQkJcHJpbnRrKCIlcygpIFByZXBhcmluZyBPRkRNIHJlcVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgT0ZETSByZXFcbiIsIF9fZnVuY19fKTsKIAkJaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA2MDAwMDAwKQogCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKIAkJZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDcwMDAwMDApCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCVDsKIAkJYnJlYWs7CiAJY2FzZSBGRV9BVFNDOgotCQlwcmludGsoIiVzKCkgUHJlcGFyaW5nIFZTQiByZXFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFZTQiByZXFcbiIsIF9fZnVuY19fKTsKIAkJcC0+dS52c2IubW9kdWxhdGlvbiA9IGMtPm1vZHVsYXRpb247CiAJCWlmICgoYy0+bW9kdWxhdGlvbiA9PSBWU0JfOCkgfHwgKGMtPm1vZHVsYXRpb24gPT0gVlNCXzE2KSkKIAkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19BVFNDOwpAQCAtMTA1NSwxNCArMTA1NSwxMyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCXAtPmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CiAKIAlzd2l0Y2goYy0+bW9kdWxhdGlvbikgewogCWNhc2UgUFNLXzg6CiAJY2FzZSBBUFNLXzE2OgorCWNhc2UgQVBTS18zMjoKIAljYXNlIFFQU0s6CiAJCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOwogCQlwLT51LnFwc2suZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOwpAQCAtMTA4OSwxOSArMTA4OCwxNyBAQAogewogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCi0JcHJpbnRrKCIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJLyogRm9yIGxlZ2FjeSBkZWxpdmVyeSBzeXN0ZW1zIHdlIGRvbid0IG5lZWQgdGhlIGRlbGl2ZXJ5X3N5c3RlbSB0bwogCSAqIGJlIHNwZWNpZmllZCwgYnV0IHdlIHBvcHVsYXRlIHRoZSBvbGRlciBzdHJ1Y3R1cmVzIGZyb20gdGhlIGNhY2hlCiAJICogc28gd2UgY2FuIGNhbGwgc2V0X2Zyb250ZW5kIG9uIG9sZGVyIGRyaXZlcnMuCiAJICovCiAJaWYoaXNfbGVnYWN5X2RlbGl2ZXJ5X3N5c3RlbShjLT5kZWxpdmVyeV9zeXN0ZW0pKSB7CiAKLQkJcHJpbnRrKCIlcygpIGxlZ2FjeSwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGMtPm1vZHVsYXRpb24pOworCQlkcHJpbnRrKCIlcygpIGxlZ2FjeSwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CiAJCWR0dl9wcm9wZXJ0eV9sZWdhY3lfcGFyYW1zX3N5bmMoZmUpOwogCiAJfSBlbHNlIHsKLQkJcHJpbnRrKCIlcygpIGFkdiwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGMtPm1vZHVsYXRpb24pOworCQlkcHJpbnRrKCIlcygpIGFkdiwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CiAKIAkJLyogRm9yIGFkdmFuY2VkIGRlbGl2ZXJ5IHN5c3RlbXMgLyBtb2R1bGF0aW9uIHR5cGVzIC4uLgogCQkgKiB3ZSBzZWVkIHRoZSBsZWNhY3kgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgc3RydWN0dXJlCkBAIC0xMTIzLDggKzExMjAsNiBAQAogewogCWludCByID0gMDsKIAotCXByaW50aygiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKLQogCWR0dl9wcm9wZXJ0eV9kdW1wKHR2cCk7CiAKIAkvKiBBbGxvdyB0aGUgZnJvbnRlbmQgdG8gdmFsaWRhdGUgaW5jb21pbmcgcHJvcGVydGllcyAqLwpAQCAtMTE5OCw3ICsxMTkzLDYgQEAKIHsKIAlpbnQgciA9IDA7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKLQlwcmludGsoIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJZHR2X3Byb3BlcnR5X2R1bXAodHZwKTsKIAogCS8qIEFsbG93IHRoZSBmcm9udGVuZCB0byB2YWxpZGF0ZSBpbmNvbWluZyBwcm9wZXJ0aWVzICovCkBAIC0xMjEzLDcgKzEyMDcsNyBAQAogCQkvKiBSZXNldCBhIGNhY2hlIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGZyb250ZW5kIGhlcmUuIFRoaXMgZG9lcwogCQkgKiBub3QgZWZmZWN0IGhhcmR3YXJlLgogCQkgKi8KLQkJcHJpbnRrKCIlcygpIEZsdXNoaW5nIHByb3BlcnR5IGNhY2hlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIEZsdXNoaW5nIHByb3BlcnR5IGNhY2hlXG4iLCBfX2Z1bmNfXyk7CiAJCW1lbXNldCgmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZSwgMCwgc2l6ZW9mKHN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcykpOwogCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID0gdHZwLT5jbWQ7CiAJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX1VOREVGSU5FRDsKQEAgLTEyMjQsNyArMTIxOCw3IEBACiAJCSAqIGlvY3RsLgogCQkgKi8KIAkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOwotCQlwcmludGsoIiVzKCkgRmluYWxpc2VkIHByb3BlcnR5IGNhY2hlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlcygpIEZpbmFsaXNlZCBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOwogCQlkdHZfcHJvcGVydHlfY2FjaGVfc3VibWl0KGZlKTsKIAogCQlyIHw9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9GUk9OVEVORCwKQEAgLTEzMzUsMTIgKzEzMjksMTAgQEAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYoY21kID09IEZFX1NFVF9QUk9QRVJUWSkgewotCQlwcmludGsoIiVzKCkgRkVfU0VUX1BST1BFUlRZXG4iLCBfX0ZVTkNUSU9OX18pOwotCiAJCXR2cHMgPSAoc3RydWN0IGR0dl9wcm9wZXJ0aWVzIF9fdXNlciAqKXBhcmc7CiAKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMubnVtID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdHZwcy0+bnVtKTsKLQkJcHJpbnRrKCIlcygpIHByb3BlcnRpZXMucHJvcHMgPSAlcFxuIiwgX19GVU5DVElPTl9fLCB0dnBzLT5wcm9wcyk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19mdW5jX18sIHR2cHMtPm51bSk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX2Z1bmNfXywgdHZwcy0+cHJvcHMpOwogCiAJCS8qIFB1dCBhbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGNhbgogCQkgKiBiZSBzZW50IGF0IG9uY2UgKi8KQEAgLTEzNjQsMTggKzEzNTYsMTYgQEAKIAkJCWVyciB8PSAodHZwICsgaSktPnJlc3VsdDsKIAkJfQogCi0JCWlmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPT0gRFRWX1RVTkUpIHsKLQkJCXByaW50aygiJXMoKSBQcm9wZXJ0eSBjYWNoZSBpcyBmdWxsLCB0dW5pbmdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCX0KKwkJaWYoZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9PSBEVFZfVFVORSkKKwkJCWRwcmludGsoIiVzKCkgUHJvcGVydHkgY2FjaGUgaXMgZnVsbCwgdHVuaW5nXG4iLCBfX2Z1bmNfXyk7CiAKIAl9IGVsc2UKIAlpZihjbWQgPT0gRkVfR0VUX1BST1BFUlRZKSB7Ci0JCXByaW50aygiJXMoKSBGRV9HRVRfUFJPUEVSVFlcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkJdHZwcyA9IChzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgX191c2VyICopcGFyZzsKIAotCQlwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19GVU5DVElPTl9fLCB0dnBzLT5udW0pOwotCQlwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHR2cHMtPnByb3BzKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLm51bSA9ICVkXG4iLCBfX2Z1bmNfXywgdHZwcy0+bnVtKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLnByb3BzID0gJXBcbiIsIF9fZnVuY19fLCB0dnBzLT5wcm9wcyk7CiAKIAkJLyogUHV0IGFuIGFyYml0cmFyeSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgY2FuCiAJCSAqIGJlIHNlbnQgYXQgb25jZSAqLwpAQCAtMTcwNCwxMyArMTY5NCw1MyBAQAogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkdmJkZXYtPnByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmZS0+ZHZiOwogCWludCByZXQ7CiAKIAlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKIAorCWlmIChhZGFwdGVyLT5tZmVfc2hhcmVkKSB7CisJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisKKwkJaWYgKGFkYXB0ZXItPm1mZV9kdmJkZXYgPT0gTlVMTCkKKwkJCWFkYXB0ZXItPm1mZV9kdmJkZXYgPSBkdmJkZXY7CisKKwkJZWxzZSBpZiAoYWRhcHRlci0+bWZlX2R2YmRldiAhPSBkdmJkZXYpIHsKKwkJCXN0cnVjdCBkdmJfZGV2aWNlCisJCQkJKm1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCisJCQkJKm1mZSA9IG1mZWRldi0+cHJpdjsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZQorCQkJCSptZmVwcml2ID0gbWZlLT5mcm9udGVuZF9wcml2OworCQkJaW50IG1mZXJldHJ5ID0gKGR2Yl9tZmVfd2FpdF90aW1lIDw8IDEpOworCisJCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQl3aGlsZSAobWZlcmV0cnktLSAmJiAobWZlZGV2LT51c2VycyAhPSAtMSB8fAorCQkJCQltZmVwcml2LT50aHJlYWQgIT0gTlVMTCkpIHsKKwkJCQlpZihtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKSB7CisJCQkJCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisKKwkJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQlpZihhZGFwdGVyLT5tZmVfZHZiZGV2ICE9IGR2YmRldikgeworCQkJCW1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQkJbWZlID0gbWZlZGV2LT5wcml2OworCQkJCW1mZXByaXYgPSBtZmUtPmZyb250ZW5kX3ByaXY7CisJCQkJaWYgKG1mZWRldi0+dXNlcnMgIT0gLTEgfHwKKwkJCQkJCW1mZXByaXYtPnRocmVhZCAhPSBOVUxMKSB7CisJCQkJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQl9CisJCQkJYWRhcHRlci0+bWZlX2R2YmRldiA9IGR2YmRldjsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChkdmJkZXYtPnVzZXJzID09IC0xICYmIGZlLT5vcHMudHNfYnVzX2N0cmwpIHsKIAkJaWYgKChyZXQgPSBmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAxKSkgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyMDsKIAl9CiAKIAlpZiAoKHJldCA9IGR2Yl9nZW5lcmljX29wZW4gKGlub2RlLCBmaWxlKSkgPCAwKQpAQCAtMTczMCw2ICsxNzYwLDggQEAKIAkJZmVwcml2LT5ldmVudHMuZXZlbnRyID0gZmVwcml2LT5ldmVudHMuZXZlbnR3ID0gMDsKIAl9CiAKKwlpZiAoYWRhcHRlci0+bWZlX3NoYXJlZCkKKwkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOwogCXJldHVybiByZXQ7CiAKIGVycjI6CkBAIC0xNzM3LDYgKzE3NjksOSBAQAogZXJyMToKIAlpZiAoZHZiZGV2LT51c2VycyA9PSAtMSAmJiBmZS0+b3BzLnRzX2J1c19jdHJsKQogCQlmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAwKTsKK2VycjA6CisJaWYgKGFkYXB0ZXItPm1mZV9zaGFyZWQpCisJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODA2LDggKzE4NDEsOSBAQAogCWZlLT5kdmIgPSBkdmI7CiAJZmVwcml2LT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOwogCi0JcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAorCXByaW50ayAoIkRWQjogcmVnaXN0ZXJpbmcgYWRhcHRlciAlaSBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQlmZS0+ZHZiLT5udW0sCisJCWZlLT5pZCwKIAkJZmUtPm9wcy5pbmZvLm5hbWUpOwogCiAJZHZiX3JlZ2lzdGVyX2RldmljZSAoZmUtPmR2YiwgJmZlcHJpdi0+ZHZiZGV2LCAmZHZiZGV2X3RlbXBsYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAppbmRleCAzMDU1MzAxLi5kYjRhNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaApAQCAtMjIyLDYgKzIyMiw3IEBACiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzIGR0dl9wcm9wZXJ0eV9jYWNoZTsKICNkZWZpbmUgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiAwCiAJaW50ICgqY2FsbGJhY2spKHZvaWQgKmFkYXB0ZXJfcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IGFyZyk7CisJaW50IGlkOwogfTsKIAogZXh0ZXJuIGludCBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyICpkdmIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCmluZGV4IGU3MTMyNzcuLmExMTM3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCi0JY2xzZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGR2Yl9jbGFzcywgYWRhcC0+ZGV2aWNlLAorCWNsc2RldiA9IGRldmljZV9jcmVhdGUoZHZiX2NsYXNzLCBhZGFwLT5kZXZpY2UsCiAJCQkgICAgICAgTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGFkYXAtPm51bSwgdHlwZSwgaWQpKSwKIAkJCSAgICAgICBOVUxMLCAiZHZiJWQuJXMlZCIsIGFkYXAtPm51bSwgZG5hbWVzW3R5cGVdLCBpZCk7CiAJaWYgKElTX0VSUihjbHNkZXYpKSB7CkBAIC0zMjYsNiArMzI2LDkgQEAKIAlhZGFwLT5uYW1lID0gbmFtZTsKIAlhZGFwLT5tb2R1bGUgPSBtb2R1bGU7CiAJYWRhcC0+ZGV2aWNlID0gZGV2aWNlOworCWFkYXAtPm1mZV9zaGFyZWQgPSAwOworCWFkYXAtPm1mZV9kdmJkZXYgPSBOVUxMOworCW11dGV4X2luaXQgKCZhZGFwLT5tZmVfbG9jayk7CiAKIAlsaXN0X2FkZF90YWlsICgmYWRhcC0+bGlzdF9oZWFkLCAmZHZiX2FkYXB0ZXJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggODlkMTJkYy4uNTc0ZTMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTYyLDYgKzYyLDEwIEBACiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCisJaW50IG1mZV9zaGFyZWQ7CQkJLyogaW5kaWNhdGVzIG11dHVhbGx5IGV4Y2x1c2l2ZSBmcm9udGVuZHMgKi8KKwlzdHJ1Y3QgZHZiX2RldmljZSAqbWZlX2R2YmRldjsJLyogZnJvbnRlbmQgZGV2aWNlIGluIHVzZSAqLworCXN0cnVjdCBtdXRleCBtZmVfbG9jazsJCS8qIGFjY2VzcyBsb2NrIGZvciB0aHJlYWQgY3JlYXRpb24gKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggY2E1M2RmNi4uNjI4NmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC00MjIsNiArNDIyLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjk5X0xPQ0tPVVRQVVRfMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHcyMTA0X2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCiAJLm1wZ19jbGtfcG9zX3BvbCA9IDB4MDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwppbmRleCA5NDMwZTAzLi41ZDFhYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKQEAgLTM0LDEzICszNCwxMiBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImN4MjI3MDIuaCIKIAotCiBzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSB7CiAKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKIAogCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKQEAgLTQ5LDEwICs0OCwxMyBAQAogfTsKIAogc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOworCiAjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKIAogLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGluaXRpYWxpc2UgdGhlIGRlbW9kICovCi1zdGF0aWMgdTggaW5pdF90YWIgW10gPSB7CitzdGF0aWMgdTggaW5pdF90YWJbXSA9IHsKIAkweDAwLCAweDAwLCAvKiBTdG9wIGFxdWlzaXRpb24gKi8KIAkweDBCLCAweDA2LAogCTB4MDksIDB4MDEsCkBAIC04MCw2NSArODIsNjcgQEAKIAkweGZkLCAweDAwLAogfTsKIAotc3RhdGljIGludCBjeDIyNzAyX3dyaXRlcmVnIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKK3N0YXRpYyBpbnQgY3gyMjcwMl93cml0ZXJlZyhzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnLCBkYXRhIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKIAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKIAogCWlmIChyZXQgIT0gMSkKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTAyeCwgcmV0ID09ICVpKVxuIiwKIAkJCV9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CiAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIHU4IGN4MjI3MDJfcmVhZHJlZyAoc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlLCB1OCByZWcpCitzdGF0aWMgdTggY3gyMjcwMl9yZWFkcmVnKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwIH07CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0gewotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAotCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDEgfSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLCAubGVuID0gMSB9IH07CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKIAogCWlmIChyZXQgIT0gMikKLQkJcHJpbnRrKCIlczogcmVhZHJlZyBlcnJvciAocmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlYWRyZWcgZXJyb3IgKHJldCA9PSAlaSlcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldHVybiBiMVswXTsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3NldF9pbnZlcnNpb24gKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgaW50IGludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyMjcwMl9zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgaW50IGludmVyc2lvbikKIHsKIAl1OCB2YWw7CiAKIAlzd2l0Y2ggKGludmVyc2lvbikgewotCi0JCWNhc2UgSU5WRVJTSU9OX0FVVE86Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkJY2FzZSBJTlZFUlNJT05fT046Ci0JCQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBDKTsKLQkJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwQywgdmFsIHwgMHgwMSk7Ci0KLQkJY2FzZSBJTlZFUlNJT05fT0ZGOgotCQkJdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7Ci0JCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEMsIHZhbCAmIDB4ZmUpOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQorCWNhc2UgSU5WRVJTSU9OX0FVVE86CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwljYXNlIElOVkVSU0lPTl9PTjoKKwkJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIHZhbCB8IDB4MDEpOworCWNhc2UgSU5WRVJTSU9OX09GRjoKKwkJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIHZhbCAmIDB4ZmUpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogfQogCiAvKiBSZXRyaWV2ZSB0aGUgZGVtb2Qgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHBzIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX2dldF90cHMoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLAorCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpwKQogewogCXU4IHZhbDsKIApAQCAtMTQ2LDE4MCArMTUwLDI4MSBAQAogCWlmICghKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQSkgJiAweDIwKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDAxKTsKLQlzd2l0Y2goICh2YWwmMHgxOCk+PjMpIHsKLQkJY2FzZSAwOiBwLT5jb25zdGVsbGF0aW9uID0gICBRUFNLOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDEpOworCXN3aXRjaCAoKHZhbCAmIDB4MTgpID4+IDMpIHsKKwljYXNlIDA6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRUFNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CiAJfQotCXN3aXRjaCggdmFsJjB4MDcgKSB7Ci0JCWNhc2UgMDogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7IGJyZWFrOwotCQljYXNlIDE6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8xOyBicmVhazsKLQkJY2FzZSAyOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMjsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzQ7IGJyZWFrOworCXN3aXRjaCAodmFsICYgMHgwNykgeworCWNhc2UgMDoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzQ7CisJCWJyZWFrOwogCX0KIAogCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMik7Ci0Jc3dpdGNoKCAodmFsJjB4MzgpPj4zICkgewotCQljYXNlIDA6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7IGJyZWFrOwotCQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOwotCQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7IGJyZWFrOwotCQljYXNlIDM6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7IGJyZWFrOwotCQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwMik7CisJc3dpdGNoICgodmFsICYgMHgzOCkgPj4gMykgeworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKIAl9Ci0Jc3dpdGNoKCB2YWwmMHgwNyApIHsKLQkJY2FzZSAwOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OyBicmVhazsKLQkJY2FzZSAzOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OyBicmVhazsKLQkJY2FzZSA0OiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCi0KLQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDAzKTsKLQlzd2l0Y2goICh2YWwmMHgwYyk+PjIgKSB7Ci0JCWNhc2UgMDogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOyBicmVhazsKLQkJY2FzZSAxOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7IGJyZWFrOwotCQljYXNlIDI6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDMpOworCXN3aXRjaCAoKHZhbCAmIDB4MGMpID4+IDIpIHsKKwljYXNlIDA6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzQ7CisJCWJyZWFrOwogCX0KLQlzd2l0Y2goIHZhbCYweDAzICkgewotCQljYXNlIDA6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7IGJyZWFrOwotCQljYXNlIDE6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCXN3aXRjaCAodmFsICYgMHgwMykgeworCWNhc2UgMDoKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IGN4MjI3MDJfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlkcHJpbnRrICgiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCWlmIChlbmFibGUpCi0JCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSAmIDB4ZmUpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwRCwKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgJiAweGZlKTsKIAllbHNlCi0JCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSB8IDEpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwRCwKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgfCAxKTsKIH0KIAogLyogVGFsayB0byB0aGUgZGVtb2QsIHNldCB0aGUgRkVDLCBHVUFSRCwgUUFNIHNldHRpbmdzIGV0YyAqLwotc3RhdGljIGludCBjeDIyNzAyX3NldF90cHMgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjI3MDJfc2V0X3RwcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJdTggdmFsOwotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKIAkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcCk7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCX0KIAogCS8qIHNldCBpbnZlcnNpb24gKi8KLQljeDIyNzAyX3NldF9pbnZlcnNpb24gKHN0YXRlLCBwLT5pbnZlcnNpb24pOworCWN4MjI3MDJfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKIAogCS8qIHNldCBiYW5kd2lkdGggKi8KLQlzd2l0Y2gocC0+dS5vZmRtLmJhbmR3aWR0aCkgeworCXN3aXRjaCAocC0+dS5vZmRtLmJhbmR3aWR0aCkgewogCWNhc2UgQkFORFdJRFRIXzZfTUhaOgotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgyMCApOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MjApOwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF83X01IWjoKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MTAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfOF9NSFo6Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJjB4Y2YgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCWN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGJhbmR3aWR0aFxuIixfX2Z1bmNfXyk7CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGJhbmR3aWR0aFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQotCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsgLy90ZW1wIGhhY2sgYXMgbWFudWFsIG5vdCB3b3JraW5nCisJcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ19BVVRPOyAvKiB0ZW1wIGhhY2sgYXMgbWFudWFsIG5vdCB3b3JraW5nICovCiAKIAkvKiB1c2UgYXV0byBjb25maWd1cmF0aW9uPyAqLwotCWlmKChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uPT1ISUVSQVJDSFlfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb249PVFBTV9BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQPT1GRUNfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUD09RkVDX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbD09R1VBUkRfSU5URVJWQUxfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlPT1UUkFOU01JU1NJT05fTU9ERV9BVVRPKSApIHsKKwlpZiAoKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID09IFFBTV9BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQID09IEZFQ19BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0xQID09IEZFQ19BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPT0gR1VBUkRfSU5URVJWQUxfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8pKSB7CiAKIAkJLyogVFBTIFNvdXJjZSAtIHVzZSBoYXJkd2FyZSBkcml2ZW4gdmFsdWVzICovCiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIDB4MTApOwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA3LCAweDkpOwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAweEMxKTsKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMgKTsKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKQorCQkJJiAweGZjKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7IC8qIEJlZ2luIGFxdWlzaXRpb24gKi8KLQkJZHByaW50aygiJXM6IEF1dG9kZXRlY3RpbmdcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBtYW51YWxseSBwcm9ncmFtbWVkIHZhbHVlcyAqLwotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbikgewotCQljYXNlICAgUVBTSzogdmFsID0gKHZhbCYweGU3KTsgYnJlYWs7Ci0JCWNhc2UgUUFNXzE2OiB2YWwgPSAodmFsJjB4ZTcpfDB4MDg7IGJyZWFrOwotCQljYXNlIFFBTV82NDogdmFsID0gKHZhbCYweGU3KXwweDEwOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb25zdGVsbGF0aW9uXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXZhbCA9IDA7CisJc3dpdGNoIChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbikgeworCWNhc2UgUVBTSzoKKwkJdmFsID0gKHZhbCAmIDB4ZTcpOworCQlicmVhazsKKwljYXNlIFFBTV8xNjoKKwkJdmFsID0gKHZhbCAmIDB4ZTcpIHwgMHgwODsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCXZhbCA9ICh2YWwgJiAweGU3KSB8IDB4MTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvbnN0ZWxsYXRpb25cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uKSB7Ci0JCWNhc2UgSElFUkFSQ0hZX05PTkU6IHZhbCA9ICh2YWwmMHhmOCk7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV8xOiB2YWwgPSAodmFsJjB4ZjgpfDE7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV8yOiB2YWwgPSAodmFsJjB4ZjgpfDI7IGJyZWFrOwotCQljYXNlICAgIEhJRVJBUkNIWV80OiB2YWwgPSAodmFsJjB4ZjgpfDM7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGhpZXJhcmNoeVxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKKwljYXNlIEhJRVJBUkNIWV9OT05FOgorCQl2YWwgPSAodmFsICYgMHhmOCk7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzE6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDE7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzI6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDI7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzQ6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGhpZXJhcmNoeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MDYsIHZhbCk7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNiwgdmFsKTsKIAotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uY29kZV9yYXRlX0hQKSB7Ci0JCWNhc2UgRkVDX05PTkU6Ci0JCWNhc2UgRkVDXzFfMjogdmFsID0gKHZhbCYweGM3KTsgYnJlYWs7Ci0JCWNhc2UgRkVDXzJfMzogdmFsID0gKHZhbCYweGM3KXwweDA4OyBicmVhazsKLQkJY2FzZSBGRUNfM180OiB2YWwgPSAodmFsJjB4YzcpfDB4MTA7IGJyZWFrOwotCQljYXNlIEZFQ181XzY6IHZhbCA9ICh2YWwmMHhjNyl8MHgxODsgYnJlYWs7Ci0JCWNhc2UgRkVDXzdfODogdmFsID0gKHZhbCYweGM3KXwweDIwOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb2RlX3JhdGVfSFBcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJdmFsID0gMDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5jb2RlX3JhdGVfSFApIHsKKwljYXNlIEZFQ19OT05FOgorCWNhc2UgRkVDXzFfMjoKKwkJdmFsID0gKHZhbCAmIDB4YzcpOworCQlicmVhazsKKwljYXNlIEZFQ18yXzM6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDE4OworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9IUFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFApIHsKLQkJY2FzZSBGRUNfTk9ORToKLQkJY2FzZSBGRUNfMV8yOiB2YWwgPSAodmFsJjB4ZjgpOyBicmVhazsKLQkJY2FzZSBGRUNfMl8zOiB2YWwgPSAodmFsJjB4ZjgpfDE7IGJyZWFrOwotCQljYXNlIEZFQ18zXzQ6IHZhbCA9ICh2YWwmMHhmOCl8MjsgYnJlYWs7Ci0JCWNhc2UgRkVDXzVfNjogdmFsID0gKHZhbCYweGY4KXwzOyBicmVhazsKLQkJY2FzZSBGRUNfN184OiB2YWwgPSAodmFsJjB4ZjgpfDQ7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9MUFxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFApIHsKKwljYXNlIEZFQ19OT05FOgorCWNhc2UgRkVDXzFfMjoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpOworCQlicmVhazsKKwljYXNlIEZFQ18yXzM6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDE7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMjsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAzOworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9MUFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MDcsIHZhbCk7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNywgdmFsKTsKIAotCXZhbD0wOwotCXN3aXRjaChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwpIHsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOiB2YWwgPSAodmFsJjB4ZjMpOyBicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OiB2YWwgPSAodmFsJjB4ZjMpfDB4MDQ7IGJyZWFrOwotCQljYXNlICBHVUFSRF9JTlRFUlZBTF8xXzg6IHZhbCA9ICh2YWwmMHhmMyl8MHgwODsgYnJlYWs7Ci0JCWNhc2UgIEdVQVJEX0lOVEVSVkFMXzFfNDogdmFsID0gKHZhbCYweGYzKXwweDBjOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBndWFyZF9pbnRlcnZhbFxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAwOworCXN3aXRjaCAocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsKSB7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOgorCQl2YWwgPSAodmFsICYgMHhmMyk7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8xNjoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpIHwgMHgwNDsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6CisJCXZhbCA9ICh2YWwgJiAweGYzKSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgorCQl2YWwgPSAodmFsICYgMHhmMykgfCAweDBjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBndWFyZF9pbnRlcnZhbFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOiB2YWwgPSAodmFsJjB4ZmMpOyBicmVhazsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzogdmFsID0gKHZhbCYweGZjKXwxOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCB0cmFuc21pc3Npb25fbW9kZVxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgeworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCXZhbCA9ICh2YWwgJiAweGZjKTsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoKKwkJdmFsID0gKHZhbCAmIDB4ZmMpIHwgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgdHJhbnNtaXNzaW9uX21vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIHZhbCk7Ci0JY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikgJiAweGZjKSB8IDB4MDIgKTsKLQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCApOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsCisJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpICYgMHhmYykgfCAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7CiAKIAkvKiBCZWdpbiBjaGFubmVsIGFxdWlzaXRpb24gKi8KIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAxKTsKQEAgLTMyOSwxMDkgKzQzNCwxMTEgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IGN4MjI3MDJfaW5pdCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjI3MDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDAwLCAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAyKTsKIAogCW1zbGVlcCgxMCk7CiAKLQlmb3IgKGk9MDsgaTxzaXplb2YoaW5pdF90YWIpOyBpKz0yKQotCQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgaW5pdF90YWJbaV0sIGluaXRfdGFiW2krMV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSArPSAyKQorCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCBpbml0X3RhYltpXSwgaW5pdF90YWJbaSArIDFdKTsKIAotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweGY4LCAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPDwgMSkgJiAweDAyKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweGY4LCAoc3RhdGUtPmNvbmZpZy0+b3V0cHV0X21vZGUgPDwgMSkKKwkJJiAweDAyKTsKIAogCWN4MjI3MDJfaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHJlZzBBOwogCXU4IHJlZzIzOwogCiAJKnN0YXR1cyA9IDA7CiAKLQlyZWcwQSA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEEpOwotCXJlZzIzID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgyMyk7CisJcmVnMEEgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEEpOworCXJlZzIzID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDIzKTsKIAotCWRwcmludGsgKCIlczogc3RhdHVzIGRlbW9kPTB4JTAyeCBhZ2M9MHglMDJ4XG4iCi0JCSxfX2Z1bmNfXyxyZWcwQSxyZWcyMyk7CisJZHByaW50aygiJXM6IHN0YXR1cyBkZW1vZD0weCUwMnggYWdjPTB4JTAyeFxuIgorCQksIF9fZnVuY19fLCByZWcwQSwgcmVnMjMpOwogCi0JaWYocmVnMEEgJiAweDEwKSB7CisJaWYgKHJlZzBBICYgMHgxMCkgewogCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOwogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwogCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOwogCX0KIAotCWlmKHJlZzBBICYgMHgyMCkKKwlpZiAocmVnMEEgJiAweDIwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOwogCi0JaWYocmVnMjMgPCAweGYwKQorCWlmIChyZWcyMyA8IDB4ZjApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCWlmKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4RTQpICYgMHgwMikgeworCWlmIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4RTQpICYgMHgwMikgewogCQkvKiBSZWFsdGltZSBzdGF0aXN0aWNzICovCi0JCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3Ci0JCQl8IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKSYweDdGKTsKKwkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKSAmIDB4N0YpOwogCX0gZWxzZSB7CiAJCS8qIEF2ZXJhZ3RpbmUgc3RhdGlzdGljcyAqLwotCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKTsKKwkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJdTE2IHJzX2JlciA9IDA7Ci0JcnNfYmVyID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgyMyk7CisJcnNfYmVyID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDIzKTsKIAkqc2lnbmFsX3N0cmVuZ3RoID0gKHJzX2JlciA8PCA4KSB8IHJzX2JlcjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXUxNiByc19iZXI9MDsKLQlpZihjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKKwl1MTYgcnNfYmVyID0gMDsKKwlpZiAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKIAkJLyogUmVhbHRpbWUgc3RhdGlzdGljcyAqLwotCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3Ci0JCQl8IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKSYgMHg3Rik7CisJCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNworCQkJfCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKSAmIDB4N0YpOwogCX0gZWxzZSB7CiAJCS8qIEF2ZXJhZ2luZSBzdGF0aXN0aWNzICovCi0JCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDgKLQkJCXwgY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERik7CisJCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgOAorCQkJfCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpOwogCX0KIAkqc25yID0gfnJzX2JlcjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiB1Y2Jsb2NrcykKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJdTggX3VjYmxvY2tzOwogCiAJLyogUlMgVW5jb3JyZWN0YWJsZSBQYWNrZXQgQ291bnQgdGhlbiByZXNldCAqLwotCV91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4RTMpOworCV91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhFMyk7CiAJaWYgKHN0YXRlLT5wcmV2VUNCbG9ja3MgPCBfdWNibG9ja3MpCiAJCSp1Y2Jsb2NrcyA9IChfdWNibG9ja3MgLSBzdGF0ZS0+cHJldlVDQmxvY2tzKTsKIAllbHNlCkBAIC00NDEsMzQgKzU0OCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjI3MDJfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXU4IHJlZzBDID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7CisJdTggcmVnMEMgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpOwogCiAJcC0+aW52ZXJzaW9uID0gcmVnMEMgJiAweDEgPyBJTlZFUlNJT05fT04gOiBJTlZFUlNJT05fT0ZGOwotCXJldHVybiBjeDIyNzAyX2dldF90cHMgKHN0YXRlLCAmcC0+dS5vZmRtKTsKKwlyZXR1cm4gY3gyMjcwMl9nZXRfdHBzKHN0YXRlLCAmcC0+dS5vZmRtKTsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCitzdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQogewogCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGN4MjI3MDJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIGN4MjI3MDJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlrZnJlZShzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDIyNzAyX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBOVUxMOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDIyNzAyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC00ODUsNyArNTk0LDggQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDIyNzAyX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyMjcwMl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKQEAgLTQ5Myw2ICs2MDMsNyBAQAogCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyMjcwMl9hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyMjcwMl9vcHMgPSB7CiAKQEAgLTUyNSwxMSArNjM2LDYgQEAKIAkucmVhZF91Y2Jsb2NrcyA9IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcywKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbmV4YW50IENYMjI3MDIgRFZCLVQgRGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKGN4MjI3MDJfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCmluZGV4IGIxZTQ2NWMuLmYxNTRlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaApAQCAtMzAsOCArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBjeDIyNzAyX2NvbmZpZwoteworc3RydWN0IGN4MjI3MDJfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKQEAgLTQxLDE2ICs0MCwxOSBAQAogCXU4IG91dHB1dF9tb2RlOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDJfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyX01PRFVMRSkgXAorCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDIyNzAyX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjI3MDJfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyMjcwMgorI2VuZGlmCiAKLSNlbmRpZiAvLyBDWDIyNzAyX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKaW5kZXggZGViMzZmNC4uYjE0NGIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC00MSwxMCArNDEsMTQgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDI0MTE2LmgiCiAKLXN0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7CisKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCiAJZG8geyBcCi0JCWlmIChkZWJ1ZykgcHJpbnRrICgiY3gyNDExNjogIiBhcmdzKTsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6ICIgYXJncyk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLWN4MjQxMTYuZnciCkBAIC02OCwxMyArNzIsMjAgQEAKICNkZWZpbmUgQ1gyNDExNl9SRUdfVUNCOCAgICAoMHhjYSkKICNkZWZpbmUgQ1gyNDExNl9SRUdfQ0xLRElWICAoMHhmMykKICNkZWZpbmUgQ1gyNDExNl9SRUdfUkFURURJViAoMHhmOSkKLSNkZWZpbmUgQ1gyNDExNl9SRUdfRkVDU1RBVFVTICgweDljKSAgICAvKiBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgRkVDICh0dW5lZCkgMT0xLzIgMj0yLzMgZXRjICovCisKKy8qIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBGRUMgKHR1bmVkKSAxPTEvMiAyPTIvMyBldGMgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfRkVDU1RBVFVTICgweDljKQogCiAvKiBGRUNTVEFUVVMgYml0cyAqLwotI2RlZmluZSBDWDI0MTE2X0ZFQ19GRUNNQVNLICAgKDB4MWYpICAgIC8qIG1hc2sgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBmZWMgKHR1bmVkKSAqLwotI2RlZmluZSBDWDI0MTE2X0ZFQ19EVkJTICAgICAgKDB4MjApICAgIC8qIFNlbGVjdCBEVkItUyBkZW1vZHVsYXRvciwgZWxzZSBEVkItUzIgKi8KKy8qIG1hc2sgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBmZWMgKHR1bmVkKSAqLworI2RlZmluZSBDWDI0MTE2X0ZFQ19GRUNNQVNLICAgKDB4MWYpCisKKy8qIFNlbGVjdCBEVkItUyBkZW1vZHVsYXRvciwgZWxzZSBEVkItUzIgKi8KKyNkZWZpbmUgQ1gyNDExNl9GRUNfRFZCUyAgICAgICgweDIwKQogI2RlZmluZSBDWDI0MTE2X0ZFQ19VTktOT1dOICAgKDB4NDApICAgIC8qIFVua25vd24vdW51c2VkICovCi0jZGVmaW5lIENYMjQxMTZfRkVDX1BJTE9UICAgICAoMHg4MCkgICAgLyogUGlsb3QgbW9kZSByZXF1ZXN0ZWQgd2hlbiB0dW5pbmcgZWxzZSBhbHdheXMgcmVzZXQgd2hlbiB0dW5lZCAqLworCisvKiBQaWxvdCBtb2RlIHJlcXVlc3RlZCB3aGVuIHR1bmluZyBlbHNlIGFsd2F5cyByZXNldCB3aGVuIHR1bmVkICovCisjZGVmaW5lIENYMjQxMTZfRkVDX1BJTE9UICAgICAoMHg4MCkKIAogLyogYXJnIGJ1ZmZlciBzaXplICovCiAjZGVmaW5lIENYMjQxMTZfQVJHTEVOICgweDFlKQpAQCAtMTE2LDEyICsxMjcsMTcgQEAKIAogLyogRGlTRXFDIHRvbmUgYnVyc3QgKi8KIHN0YXRpYyBpbnQgdG9uZWJ1cnN0ID0gMTsKK21vZHVsZV9wYXJhbSh0b25lYnVyc3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRvbmVidXJzdCwgIkRpU0VxQyB0b25lYnVyc3QgMD1PRkYsIDE9VE9ORSBDQUNIRSwgIlwKKwkiMj1NRVNTQUdFIENBQ0hFIChkZWZhdWx0OjEpIik7CiAKIC8qIFNOUiBtZWFzdXJlbWVudHMgKi8KLXN0YXRpYyBpbnQgZXNub19zbnIgPSAwOworc3RhdGljIGludCBlc25vX3NucjsKK21vZHVsZV9wYXJhbShlc25vX3NuciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTTlIgcmV0dXJuIHVuaXRzLCAwPVBFUkNFTlRBR0UgMC0xMDAsICJcCisJIjE9RVNOTyhkYiAqIDEwKSAoZGVmYXVsdDowKSIpOwogCi1lbnVtIGNtZHMKLXsKK2VudW0gY21kcyB7CiAJQ01EX1NFVF9WQ08gICAgID0gMHgxMCwKIAlDTURfVFVORVJFUVVFU1QgPSAweDExLAogCUNNRF9NUEVHQ09ORklHICA9IDB4MTMsCkBAIC0xMzgsOCArMTU0LDcgQEAKIH07CiAKIC8qIFRoZSBEZW1vZC9UdW5lciBjYW4ndCBlYXNpbHkgcHJvdmlkZSB0aGVzZSwgd2UgY2FjaGUgdGhlbSAqLwotc3RydWN0IGN4MjQxMTZfdHVuaW5nCi17CitzdHJ1Y3QgY3gyNDExNl90dW5pbmcgewogCXUzMiBmcmVxdWVuY3k7CiAJdTMyIHN5bWJvbF9yYXRlOwogCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbjsKQEAgLTE1OCwxNiArMTczLDE0IEBACiB9OwogCiAvKiBCYXNpYyBjb21tYW5kcyB0aGF0IGFyZSBzZW50IHRvIHRoZSBmaXJtd2FyZSAqLwotc3RydWN0IGN4MjQxMTZfY21kCi17CitzdHJ1Y3QgY3gyNDExNl9jbWQgewogCXU4IGxlbjsKIAl1OCBhcmdzW0NYMjQxMTZfQVJHTEVOXTsKIH07CiAKLXN0cnVjdCBjeDI0MTE2X3N0YXRlCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7Ci0JY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnKiBjb25maWc7CitzdHJ1Y3QgY3gyNDExNl9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC0xNzksMTkgKzE5MiwyMCBAQAogCXN0cnVjdCBjeDI0MTE2X2NtZCBkc2VjX2NtZDsKIH07CiAKLXN0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUsIGludCByZWcsIGludCBkYXRhKQorc3RhdGljIGludCBjeDI0MTE2X3dyaXRlcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCiB7CiAJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OwogCWludCBlcnI7CiAKLQlpZiAoZGVidWc+MSkKKwlpZiAoZGVidWcgPiAxKQogCQlwcmludGsoImN4MjQxMTY6ICVzOiB3cml0ZSByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCi0JCQkJCQlfX2Z1bmNfXyxyZWcsIGRhdGEpOworCQkJX19mdW5jX18sIHJlZywgZGF0YSk7CiAKLQlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCWVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAoZXJyICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKIAkJCSAiIHZhbHVlID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCBlcnIsIHJlZywgZGF0YSk7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KQEAgLTIwMCw3ICsyMTQsOCBAQAogfQogCiAvKiBCdWxrIGJ5dGUgd3JpdGVzIHRvIGEgc2luZ2xlIEkyQyBhZGRyZXNzLCBmb3IgMzJrIGZpcm13YXJlIGxvYWQgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZ04oc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBpbnQgcmVnLCB1OCAqZGF0YSwgdTE2IGxlbikKK3N0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZ04oc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCBpbnQgcmVnLAorCQkJICAgICBjb25zdCB1OCAqZGF0YSwgdTE2IGxlbikKIHsKIAlpbnQgcmV0ID0gLUVSRU1PVEVJTzsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CkBAIC0yMjEsMTIgKzIzNiwxMyBAQAogCW1zZy5idWYgPSBidWY7CiAJbXNnLmxlbiA9IGxlbiArIDE7CiAKLQlpZiAoZGVidWc+MSkKLQkJcHJpbnRrKCJjeDI0MTE2OiAlczogIHdyaXRlIHJlZ04gMHglMDJ4LCBsZW4gPSAlZFxuIiwKLQkJCQkJCV9fZnVuY19fLHJlZywgbGVuKTsKKwlpZiAoZGVidWcgPiAxKQorCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlczogIHdyaXRlIHJlZ04gMHglMDJ4LCBsZW4gPSAlZFxuIiwKKwkJCV9fZnVuY19fLCByZWcsIGxlbik7CiAKLQlpZiAoKHJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgewotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMnhcbiIsCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMnhcbiIsCiAJCQkgX19mdW5jX18sIHJldCwgcmVnKTsKIAkJcmV0ID0gLUVSRU1PVEVJTzsKIAl9CkBAIC0yMzcsMzAgKzI1MywzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9yZWFkcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRyZWcoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKIAl1OCBiMFtdID0geyByZWcgfTsKIAl1OCBiMVtdID0geyAwIH07CiAJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCi0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gYjEsIC5sZW4gPSAxIH0KIAl9OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CiAKIAlpZiAocmV0ICE9IDIpIHsKLQkJcHJpbnRrKCIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwgX19mdW5jX18sIHJlZywgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwKKwkJCV9fZnVuY19fLCByZWcsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRlYnVnPjEpCi0JCXByaW50aygiY3gyNDExNjogcmVhZCByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIscmVnLCBiMVswXSk7CisJaWYgKGRlYnVnID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogcmVhZCByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCisJCQlyZWcsIGIxWzBdKTsKIAogCXJldHVybiBiMVswXTsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogewogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGludmVyc2lvbik7CiAKQEAgLTMwOCwxMCArMzI5LDEwIEBACiAgKiBFZy4oMi8zKSBzemFwICJab25lIEhvcnJvciIKICAqCiAgKiBtYXNrL3ZhbCA9IDB4MDQsIDB4MjAKLSAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwOTggfCB1bmMgMDAwMDAwMDAgfCBGRV9IQVNfTE9DSworICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDA5OCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKICAqCiAgKiBtYXNrL3ZhbCA9IDB4MDQsIDB4MzAKLSAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwMDAgfCB1bmMgMDAwMDAwMDAgfCBGRV9IQVNfTE9DSworICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDAwMCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKICAqCiAgKiBBZnRlciB0dW5pbmcgRkVDU1RBVFVTIGNvbnRhaW5zIGFjdHVhbCBGRUMKICAqIGluIHVzZSBudW1iZXJlZCAxIHRocm91Z2ggdG8gOCBmb3IgMS8yIC4uIDIvMyBldGMKQEAgLTM4OSwxOCArNDEwLDE2IEBACiAgICovCiB9OwogCi1zdGF0aWMgaW50IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUsCitzdGF0aWMgaW50IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCiAJZmVfbW9kdWxhdGlvbl90IG0sIGZlX2NvZGVfcmF0ZV90IGYpCiB7CiAJaW50IGksIHJldCA9IC1FT1BOT1RTVVBQOwogCiAJZHByaW50aygiJXMoMHglMDJ4LDB4JTAyeClcbiIsIF9fZnVuY19fLCBtLCBmKTsKIAotCWZvcihpPTAgOyBpIDwgc2l6ZW9mKENYMjQxMTZfTU9ERkVDX01PREVTKSAvIHNpemVvZihzdHJ1Y3QgY3gyNDExNl9tb2RmZWMpIDsgaSsrKQotCXsKLQkJaWYoIChtID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLm1vZHVsYXRpb24pICYmCi0JCQkoZiA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5mZWMpICkKLQkJCXsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShDWDI0MTE2X01PREZFQ19NT0RFUyk7IGkrKykgeworCQlpZiAoKG0gPT0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbaV0ubW9kdWxhdGlvbikgJiYKKwkJCShmID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLmZlYykpIHsKIAkJCQlyZXQgPSBpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNDA5LDcgKzQyOCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF9mZWMoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCBmZV9tb2R1bGF0aW9uX3QgbW9kLCBmZV9jb2RlX3JhdGVfdCBmZWMpCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCisJZmVfbW9kdWxhdGlvbl90IG1vZCwgZmVfY29kZV9yYXRlX3QgZmVjKQogewogCWludCByZXQgPSAwOwogCkBAIC00MTcsNyArNDM3LDcgQEAKIAogCXJldCA9IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdGF0ZSwgbW9kLCBmZWMpOwogCi0JaWYocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCXN0YXRlLT5kbnh0LmZlYyA9IGZlYzsKQEAgLTQyOSw3ICs0NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlLCB1MzIgcmF0ZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsIHUzMiByYXRlKQogewogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIHJhdGUpOwogCkBAIC00NDYsNDIgKzQ2Niw0OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworc3RhdGljIGludCBjeDI0MTE2X2xvYWRfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQgPSAwOwogCi0JZHByaW50aygiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgPiAwKQotCXsKKwlpZiAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweDIwKSA+IDApIHsKIAogCQlpZiAoc3RhdGUtPnNraXBfZndfbG9hZCkKIAkJCXJldHVybiAwOwogCiAJCS8qIExvYWQgZmlybXdhcmUgKi8KLQkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KLQkJcHJpbnRrKCIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsIF9fZnVuY19fLCBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUpOwotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFLCAmc3RhdGUtPmkyYy0+ZGV2KTsKLQkJcHJpbnRrKCIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iLCBfX2Z1bmNfXyk7CisJCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgbG9hZGVkICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwKKwkJCV9fZnVuY19fLCBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUpOworCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJJnN0YXRlLT5pMmMtPmRldik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQoMikuLi5cbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiJXM6IE5vIGZpcm13YXJlIHVwbG9hZGVkICh0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIsIF9fZnVuY19fKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIGZpcm13YXJlIHVwbG9hZGVkICIKKwkJCQkiKHRpbWVvdXQgb3IgZmlsZSBub3QgZm91bmQ/KVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWN1cnNlIGJhY2sgdGhyb3VnaCBoZXJlIGR1cmluZyBsb2FkaW5nICovCisJCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWN1cnNlIGJhY2sgdGhyb3VnaCBoZXJlCisJCSAqIGR1cmluZyBsb2FkaW5nICovCiAJCXN0YXRlLT5za2lwX2Z3X2xvYWQgPSAxOwogCiAJCXJldCA9IGN4MjQxMTZfbG9hZF9maXJtd2FyZShmZSwgZncpOwogCQlpZiAocmV0KQotCQkJcHJpbnRrKCIlczogV3JpdGluZyBmaXJtd2FyZSB0byBkZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0aW5nIGZpcm13YXJlIHRvIGRldmljZSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOwogCiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JCXByaW50aygiJXM6IEZpcm13YXJlIHVwbG9hZCAlc1xuIiwgX19mdW5jX18sIHJldCA9PSAwID8gImNvbXBsZXRlIiA6ICJmYWlsZWQiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpcm13YXJlIHVwbG9hZCAlc1xuIiwgX19mdW5jX18sCisJCQlyZXQgPT0gMCA/ICJjb21wbGV0ZSIgOiAiZmFpbGVkIik7CiAKIAkJLyogRW5zdXJlIGZpcm13YXJlIGlzIGFsd2F5cyBsb2FkZWQgaWYgcmVxdWlyZWQgKi8KIAkJc3RhdGUtPnNraXBfZndfbG9hZCA9IDA7CkBAIC00OTAsOCArNTE3LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogVGFrZSBhIGJhc2ljIGZpcm13YXJlIGNvbW1hbmQgc3RydWN0dXJlLCBmb3JtYXQgaXQgYW5kIGZvcndhcmQgaXQgZm9yIHByb2Nlc3NpbmcgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9jbWRfZXhlY3V0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGN4MjQxMTZfY21kICpjbWQpCisvKiBUYWtlIGEgYmFzaWMgZmlybXdhcmUgY29tbWFuZCBzdHJ1Y3R1cmUsIGZvcm1hdCBpdAorICogYW5kIGZvcndhcmQgaXQgZm9yIHByb2Nlc3NpbmcKKyAqLworc3RhdGljIGludCBjeDI0MTE2X2NtZF9leGVjdXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgY3gyNDExNl9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaSwgcmV0OwpAQCAtNDk5LDQ5ICs1MjgsNDkgQEAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBMb2FkIHRoZSBmaXJtd2FyZSBpZiByZXF1aXJlZCAqLwotCWlmICggKHJldCA9IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoZmUpKSAhPSAwKQotCXsKLQkJcHJpbnRrKCIlcygpOiBVbmFibGUgaW5pdGlhbGlzZSB0aGUgZmlybXdhcmVcbiIsIF9fZnVuY19fKTsKKwlyZXQgPSBjeDI0MTE2X2Zpcm13YXJlX29uZGVtYW5kKGZlKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBVbmFibGUgaW5pdGlhbGlzZSB0aGUgZmlybXdhcmVcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogV3JpdGUgdGhlIGNvbW1hbmQgKi8KLQlmb3IoaSA9IDA7IGkgPCBjbWQtPmxlbiA7IGkrKykKLQl7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+bGVuIDsgaSsrKSB7CiAJCWRwcmludGsoIiVzOiAweCUwMnggPT0gMHglMDJ4XG4iLCBfX2Z1bmNfXywgaSwgY21kLT5hcmdzW2ldKTsKIAkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgaSwgY21kLT5hcmdzW2ldKTsKIAl9CiAKIAkvKiBTdGFydCBleGVjdXRpb24gYW5kIHdhaXQgZm9yIGNtZCB0byB0ZXJtaW5hdGUgKi8KIAljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFLCAweDAxKTsKLQl3aGlsZSggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFKSApCi0JeworCXdoaWxlIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0VYRUNVVEUpKSB7CiAJCW1zbGVlcCgxMCk7Ci0JCWlmKGkrKyA+IDY0KQotCQl7Ci0JCQkvKiBBdm9pZCBsb29waW5nIGZvcmV2ZXIgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm8gcmVzcG9uZCAqLwotCQkJcHJpbnRrKCIlcygpIEZpcm13YXJlIG5vdCByZXNwb25kaW5nXG4iLCBfX2Z1bmNfXyk7CisJCWlmIChpKysgPiA2NCkgeworCQkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIGlmIHRoZSBmaXJtd2FyZSBkb2VzCisJCQkJbm90IHJlc3BvbmQgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCkgRmlybXdhcmUgbm90IHJlc3BvbmRpbmdcbiIsCisJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3N0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgaSwgcmV0OwogCXVuc2lnbmVkIGNoYXIgdmVyc1s0XTsKIAogCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JZHByaW50aygiRmlybXdhcmUgaXMgJXp1IGJ5dGVzICglMDJ4ICUwMnggLi4gJTAyeCAlMDJ4KVxuIgotCQkJLGZ3LT5zaXplCi0JCQksZnctPmRhdGFbMF0KLQkJCSxmdy0+ZGF0YVsxXQotCQkJLGZ3LT5kYXRhWyBmdy0+c2l6ZS0yIF0KLQkJCSxmdy0+ZGF0YVsgZnctPnNpemUtMSBdCi0JCQkpOworCWRwcmludGsoIkZpcm13YXJlIGlzICV6dSBieXRlcyAoJTAyeCAlMDJ4IC4uICUwMnggJTAyeClcbiIsCisJCQlmdy0+c2l6ZSwKKwkJCWZ3LT5kYXRhWzBdLAorCQkJZnctPmRhdGFbMV0sCisJCQlmdy0+ZGF0YVtmdy0+c2l6ZS0yXSwKKwkJCWZ3LT5kYXRhW2Z3LT5zaXplLTFdKTsKIAogCS8qIFRvZ2dsZSA4OHggU1JTVCBwaW4gdG8gcmVzZXQgZGVtb2QgKi8KIAlpZiAoc3RhdGUtPmNvbmZpZy0+cmVzZXRfZGV2aWNlKQpAQCAtNTg3LDcgKzYxNiw3IEBACiAJY21kLmFyZ3NbMHgwN10gPSAweDlkOwogCWNtZC5hcmdzWzB4MDhdID0gMHhmYzsKIAljbWQuYXJnc1sweDA5XSA9IDB4MDY7Ci0JY21kLmxlbj0gMHgwYTsKKwljbWQubGVuID0gMHgwYTsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC01OTgsNyArNjI3LDcgQEAKIAljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUklOSVQ7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwogCWNtZC5hcmdzWzB4MDJdID0gMHgwMDsKLQljbWQubGVuPSAweDAzOworCWNtZC5sZW4gPSAweDAzOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTYxNSwzNiArNjQ0LDM4IEBACiAJZWxzZQogCQljbWQuYXJnc1sweDA0XSA9IDB4MDI7CiAJY21kLmFyZ3NbMHgwNV0gPSAweDAwOwotCWNtZC5sZW49IDB4MDY7CisJY21kLmxlbiA9IDB4MDY7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogRmlybXdhcmUgQ01EIDM1OiBHZXQgZmlybXdhcmUgdmVyc2lvbiAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX1VQREZXVkVSUzsKLQljbWQubGVuPSAweDAyOwotCWZvcihpPTA7IGk8NDsgaSsrKSB7CisJY21kLmxlbiA9IDB4MDI7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQljbWQuYXJnc1sweDAxXSA9IGk7CiAJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gcmV0OwotCQl2ZXJzW2ldPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX01BSUxCT1gpOworCQl2ZXJzW2ldID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19NQUlMQk9YKTsKIAl9Ci0JcHJpbnRrKCIlczogRlcgdmVyc2lvbiAlaS4laS4laS4laVxuIiwgX19mdW5jX18sCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHZlcnNpb24gJWkuJWkuJWkuJWlcbiIsIF9fZnVuY19fLAogCQl2ZXJzWzBdLCB2ZXJzWzFdLCB2ZXJzWzJdLCB2ZXJzWzNdKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJLyogVGhlIGlzbDY0MjEgbW9kdWxlIHdpbGwgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZm9wcy4gKi8KLQlkcHJpbnRrKCIlcygpIFRoaXMgc2hvdWxkIG5ldmVyIGFwcGVhciBpZiB0aGUgaXNsNjQyMSBtb2R1bGUgaXMgbG9hZGVkIGNvcnJlY3RseVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlICIKKwkJImlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC02NjYsMjIgKzY5NywyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCSpiZXIgPSAgKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjI0KSA8PCAyNCApIHwKLQkJKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjE2KSA8PCAxNiApIHwKLQkJKCBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjggKSA8PCA4ICApIHwKLQkJICBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjAgKTsKKwkqYmVyID0gIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjI0KSA8PCAyNCkgfAorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIxNikgPDwgMTYpIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQkVSOCkgIDw8IDgpICB8CisJCSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjApOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFRPRE8gRGV0ZXJtaW5lIGZ1bmN0aW9uIGFuZCBzY2FsZSBhcHByb3ByaWF0ZWx5ICovCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CkBAIC02OTIsMzkgKzcyNCw0MyBAQAogCiAJLyogRmlybXdhcmUgQ01EIDE5OiBHZXQgQUdDICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfR0VUQUdDOwotCWNtZC5sZW49IDB4MDE7CisJY21kLmxlbiA9IDB4MDE7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0Jc2lnX3JlYWRpbmcgPSAoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykgJiBDWDI0MTE2X1NJR05BTF9NQVNLICkgfAotCQkoIGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU0lHTkFMKSA8PCA2ICk7Ci0JKnNpZ25hbF9zdHJlbmd0aD0gMCAtIHNpZ19yZWFkaW5nOworCXNpZ19yZWFkaW5nID0KKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwKKwkJCUNYMjQxMTZfUkVHX1NTVEFUVVMpICYgQ1gyNDExNl9TSUdOQUxfTUFTSykgfAorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TSUdOQUwpIDw8IDYpOworCSpzaWduYWxfc3RyZW5ndGggPSAwIC0gc2lnX3JlYWRpbmc7CiAKLQlkcHJpbnRrKCIlczogcmF3IC8gY29va2VkID0gMHglMDR4IC8gMHglMDR4XG4iLCBfX2Z1bmNfXywgc2lnX3JlYWRpbmcsICpzaWduYWxfc3RyZW5ndGgpOworCWRwcmludGsoIiVzOiByYXcgLyBjb29rZWQgPSAweCUwNHggLyAweCUwNHhcbiIsCisJCV9fZnVuY19fLCBzaWdfcmVhZGluZywgKnNpZ25hbF9zdHJlbmd0aCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogU05SICgwLi4xMDApJSA9IChzaWcgJiAweGYwKSAqIDEwICsgKHNpZyAmIDB4MGYpICogMTAgLyAxNiAqLwotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX3BjdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfcGN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCBzbnJfcmVhZGluZzsKIAlzdGF0aWMgY29uc3QgdTMyIHNucl90YWJbXSA9IHsgLyogMTAgeCBUYWJsZSAocm91bmRlZCB1cCkgKi8KLQkJMHgwMDAwMCwweDAxOTlBLDB4MDMzMzMsMHgwNGNjRCwweDA2NjY3LAotCQkJMHgwODAwMCwweDA5OTlBLDB4MGIzMzMsMHgwY2NjRCwweDBlNjY3LAotCQkweDEwMDAwLDB4MTE5OUEsMHgxMzMzMywweDE0Y2NELDB4MTY2NjcsMHgxODAwMCB9OworCQkweDAwMDAwLCAweDAxOTlBLCAweDAzMzMzLCAweDA0Y2NELCAweDA2NjY3LAorCQkweDA4MDAwLCAweDA5OTlBLCAweDBiMzMzLCAweDBjY2NELCAweDBlNjY3LAorCQkweDEwMDAwLCAweDExOTlBLCAweDEzMzMzLCAweDE0Y2NELCAweDE2NjY3LAorCQkweDE4MDAwIH07CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzbnJfcmVhZGluZyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUVVBTElUWTApOwogCi0JaWYoc25yX3JlYWRpbmcgPj0gMHhhMCAvKiAxMDAlICovKQorCWlmIChzbnJfcmVhZGluZyA+PSAweGEwIC8qIDEwMCUgKi8pCiAJCSpzbnIgPSAweGZmZmY7CiAJZWxzZQotCQkqc25yID0gc25yX3RhYiBbICggc25yX3JlYWRpbmcgJiAweGYwICkgICA+PiA0IF0gKwotCQkJKCBzbnJfdGFiIFsgKCBzbnJfcmVhZGluZyAmIDB4MGYgKSBdID4+IDQgKTsKKwkJKnNuciA9IHNucl90YWJbKHNucl9yZWFkaW5nICYgMHhmMCkgPj4gNF0gKworCQkJKHNucl90YWJbKHNucl9yZWFkaW5nICYgMHgwZildID4+IDQpOwogCiAJZHByaW50aygiJXM6IHJhdyAvIGNvb2tlZCA9IDB4JTAyeCAvIDB4JTA0eFxuIiwgX19mdW5jX18sCiAJCXNucl9yZWFkaW5nLCAqc25yKTsKQEAgLTczNiw3ICs3NzIsNyBAQAogICogRVNOTywgZnJvbSAwLT4zMGRiICh2YWx1ZXMgMC0+MzAwKS4gV2UgcHJvdmlkZSB0aGlzIHZhbHVlIGJ5CiAgKiBkZWZhdWx0LgogICovCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfZXNubyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfZXNubyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKQEAgLTc1MCw3ICs3ODYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlpZiAoZXNub19zbnIgPT0gMSkKIAkJcmV0dXJuIGN4MjQxMTZfcmVhZF9zbnJfZXNubyhmZSwgc25yKTsKQEAgLTc1OCwyNyArNzk0LDI3IEBACiAJCXJldHVybiBjeDI0MTE2X3JlYWRfc25yX3BjdChmZSwgc25yKTsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCSp1Y2Jsb2NrcyA9ICggY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0I4KSA8PCA4ICkgfAorCSp1Y2Jsb2NrcyA9IChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1VDQjgpIDw8IDgpIHwKIAkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0IwKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBPdmVyd3JpdGUgdGhlIGN1cnJlbnQgdHVuaW5nIHBhcmFtcywgd2UgYXJlIGFib3V0IHRvIHR1bmUgKi8KLXN0YXRpYyB2b2lkIGN4MjQxMTZfY2xvbmVfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyNDExNl9jbG9uZV9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJbWVtY3B5KCZzdGF0ZS0+ZGN1ciwgJnN0YXRlLT5kbnh0LCBzaXplb2Yoc3RhdGUtPmRjdXIpKTsKIH0KIAogLyogV2FpdCBmb3IgTE5CICovCi1zdGF0aWMgaW50IGN4MjQxMTZfd2FpdF9mb3JfbG5iKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDI0MTE2X3dhaXRfZm9yX2xuYihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKQEAgLTc4Nyw3ICs4MjMsNyBAQAogCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FTVEFUVVMpKTsKIAogCS8qIFdhaXQgZm9yIHVwIHRvIDMwMCBtcyAqLwotCWZvcihpID0gMDsgaSA8IDMwIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDMwIDsgaSsrKSB7CiAJCWlmIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FTVEFUVVMpICYgMHgyMCkKIAkJCXJldHVybiAwOwogCQltc2xlZXAoMTApOwpAQCAtNzk4LDIwICs4MzQsMjEgQEAKIAlyZXR1cm4gLUVUSU1FRE9VVDsgLyogLUVCVVNZID8gKi8KIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwogCWludCByZXQ7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCB0b25lKTsKLQlpZiAoICh0b25lICE9IFNFQ19UT05FX09OKSAmJiAodG9uZSAhPSBTRUNfVE9ORV9PRkYpICkgewotCQlwcmludGsoIiVzOiBJbnZhbGlkLCB0b25lPSVkXG4iLCBfX2Z1bmNfXywgdG9uZSk7CisJaWYgKCh0b25lICE9IFNFQ19UT05FX09OKSAmJiAodG9uZSAhPSBTRUNfVE9ORV9PRkYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQsIHRvbmU9JWRcbiIsIF9fZnVuY19fLCB0b25lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCiAJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIE1pbiBkZWxheSB0aW1lIGFmdGVyIERpU0VxQyBzZW5kICovCkBAIC04MjAsNyArODU3LDcgQEAKIAkvKiBUaGlzIGlzIGFsd2F5cyBkb25lIGJlZm9yZSB0aGUgdG9uZSBpcyBzZXQgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORVBSRTsKIAljbWQuYXJnc1sweDAxXSA9IDB4MDA7Ci0JY21kLmxlbj0gMHgwMjsKKwljbWQubGVuID0gMHgwMjsKIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC04MzYsMTEgKzg3MywxMSBAQAogCQljbWQuYXJnc1sweDAzXSA9IDB4MDE7CiAJCWJyZWFrOwogCWNhc2UgU0VDX1RPTkVfT0ZGOgotCQlkcHJpbnRrKCIlczogc2V0dGluZyB0b25lIG9mZlxuIixfX2Z1bmNfXyk7CisJCWRwcmludGsoIiVzOiBzZXR0aW5nIHRvbmUgb2ZmXG4iLCBfX2Z1bmNfXyk7CiAJCWNtZC5hcmdzWzB4MDNdID0gMHgwMDsKIAkJYnJlYWs7CiAJfQotCWNtZC5sZW49IDB4MDQ7CisJY21kLmxlbiA9IDB4MDQ7CiAKIAkvKiBNaW4gZGVsYXkgdGltZSBiZWZvcmUgRGlTRXFDIHNlbmQgKi8KIAltc2xlZXAoMTUpOyAvKiBYWFggZGV0ZXJtaW5lIGlzIEZXIGRvZXMgdGhpcywgc2VlIHNlbmRfZGlzZXFjL2J1cnN0ICovCkBAIC04NDksNyArODg2LDcgQEAKIH0KIAogLyogSW5pdGlhbGlzZSBEaVNFcUMgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwpAQCAtODY0LDcgKzkwMSw3IEBACiAJY21kLmFyZ3NbMHgwNV0gPSAweDI4OwogCWNtZC5hcmdzWzB4MDZdID0gKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDB4MDAgOiAweDAxOwogCWNtZC5hcmdzWzB4MDddID0gMHgwMTsKLQljbWQubGVuPSAweDA4OworCWNtZC5sZW4gPSAweDA4OwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTg3OCwzNiArOTE1LDM4IEBACiAJLyogVW5rbm93biAqLwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzJfMl0gPSAweDAyOwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzNfMF0gPSAweDAwOwotCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzRfMF0gPSAweDAwOyAvKiBDb250aW51YXRpb24gZmxhZz8gKi8KKwkvKiBDb250aW51YXRpb24gZmxhZz8gKi8KKwlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19BUkc0XzBdID0gMHgwMDsKIAogCS8qIERpU0VxQyBtZXNzYWdlIGxlbmd0aCAqLwogCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPSAweDAwOwogCiAJLyogQ29tbWFuZCBsZW5ndGggKi8KLQlzdGF0ZS0+ZHNlY19jbWQubGVuPSBDWDI0MTE2X0RJU0VRQ19NU0dPRlM7CisJc3RhdGUtPmRzZWNfY21kLmxlbiA9IENYMjQxMTZfRElTRVFDX01TR09GUzsKIAogCXJldHVybiAwOwogfQogCiAvKiBTZW5kIERpU0VxQyBtZXNzYWdlIHdpdGggZGVyaXZlZCBidXJzdCAoaGFjaykgfHwgcHJldmlvdXMgYnVyc3QgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCitzdGF0aWMgaW50IGN4MjQxMTZfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGksIHJldDsKIAogCS8qIER1bXAgRGlTRXFDIG1lc3NhZ2UgKi8KIAlpZiAoZGVidWcpIHsKLQkJcHJpbnRrKCJjeDI0MTE2OiAlcygiLCBfX2Z1bmNfXyk7Ci0JCWZvcihpID0gMCA7IGkgPCBkLT5tc2dfbGVuIDspIHsKLQkJCXByaW50aygiMHglMDJ4IiwgZC0+bXNnW2ldKTsKLQkJCWlmKCsraSA8IGQtPm1zZ19sZW4pCi0JCQkJcHJpbnRrKCIsICIpOwotCQkJfQorCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlcygiLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDAgOyBpIDwgZC0+bXNnX2xlbiA7KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIweCUwMngiLCBkLT5tc2dbaV0pOworCQkJaWYgKCsraSA8IGQtPm1zZ19sZW4pCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCAiKTsKKwkJfQogCQlwcmludGsoIikgdG9uZWJ1cnN0PSVkXG4iLCB0b25lYnVyc3QpOwogCX0KIAogCS8qIFZhbGlkYXRlIGxlbmd0aCAqLwotCWlmKGQtPm1zZ19sZW4gPiAoQ1gyNDExNl9BUkdMRU4gLSBDWDI0MTE2X0RJU0VRQ19NU0dPRlMpKQorCWlmIChkLT5tc2dfbGVuID4gKENYMjQxMTZfQVJHTEVOIC0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEaVNFcUMgbWVzc2FnZSAqLwpAQCAtOTE4LDE4ICs5NTcsMTkgQEAKIAlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dID0gZC0+bXNnX2xlbjsKIAogCS8qIENvbW1hbmQgbGVuZ3RoICovCi0Jc3RhdGUtPmRzZWNfY21kLmxlbj0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICsgc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXTsKKwlzdGF0ZS0+ZHNlY19jbWQubGVuID0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICsKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXTsKIAogCS8qIERpU0VxQyB0b25lYnVyc3QgKi8KLQlpZih0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfTUVTR0NBQ0hFKQorCWlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfTUVTR0NBQ0hFKQogCQkvKiBNZXNzYWdlIGlzIGNhY2hlZCAqLwogCQlyZXR1cm4gMDsKIAotCWVsc2UgaWYodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpCisJZWxzZSBpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpCiAJCS8qIE1lc3NhZ2UgaXMgc2VudCB3aXRob3V0IGJ1cnN0ICovCiAJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IDA7CiAKLQllbHNlIGlmKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FQ0FDSEUpIHsKKwllbHNlIGlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORUNBQ0hFKSB7CiAJCS8qCiAJCSAqIE1lc3NhZ2UgaXMgc2VudCB3aXRoIGRlcml2ZWQgZWxzZSBjYWNoZWQgYnVyc3QKIAkJICoKQEAgLTk0OCwxNSArOTg4LDE3IEBACiAJCSAqICAgICAgICAgICAgICBZID0gVk9MVEFHRSAgICAgICAgICAgICAoMD0xM1YsIDE9MThWKQogCQkgKiAgICAgICAgICAgICAgWiA9IEJBTkQgICAgICAgICAgICAgICAgKDA9TE9XLCAxPUhJR0goMjJLKSkKIAkJICovCi0JCWlmKGQtPm1zZ19sZW4gPj0gNCAmJiBkLT5tc2dbMl0gPT0gMHgzOCkKLQkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9ICgoZC0+bXNnWzNdICYgNCkgPj4gMik7Ci0JCWlmKGRlYnVnKQotCQkJZHByaW50aygiJXMgYnVyc3Q9JWRcbiIsIF9fZnVuY19fLCBzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0pOworCQlpZiAoZC0+bXNnX2xlbiA+PSA0ICYmIGQtPm1zZ1syXSA9PSAweDM4KQorCQkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCQkoKGQtPm1zZ1szXSAmIDQpID4+IDIpOworCQlpZiAoZGVidWcpCisJCQlkcHJpbnRrKCIlcyBidXJzdD0lZFxuIiwgX19mdW5jX18sCisJCQkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdKTsKIAl9CiAKIAkvKiBXYWl0IGZvciBMTkIgcmVhZHkgKi8KIAlyZXQgPSBjeDI0MTE2X3dhaXRfZm9yX2xuYihmZSk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogV2FpdCBmb3Igdm9sdGFnZS9taW4gcmVwZWF0IGRlbGF5ICovCkBAIC05NjQsNyArMTAwNiw3IEBACiAKIAkvKiBDb21tYW5kICovCiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJnN0YXRlLT5kc2VjX2NtZCk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCS8qCiAJICogV2FpdCBmb3Igc2VuZApAQCAtOTc2LDI5ICsxMDE4LDMzIEBACiAJICogIDEyLjVtcyBidXJzdCAgICAgICAgKwogCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICAgKFhYWCBkZXRlcm1pbmUgaWYgRlcgZG9lcyB0aGlzLCBzZWUgc2V0X3RvbmUpCiAJICovCi0JbXNsZWVwKCAoc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA8PCA0KSArICgodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpID8gMzAgOiA2MCkgKTsKKwltc2xlZXAoKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKworCQkoKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDMwIDogNjApKTsKIAogCXJldHVybiAwOwogfQogCiAvKiBTZW5kIERpU0VxQyBidXJzdCAqLwotc3RhdGljIGludCBjeDI0MTE2X2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3N0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXMoJWQpIHRvbmVidXJzdD0lZFxuIixfX2Z1bmNfXywgYnVyc3QsIHRvbmVidXJzdCk7CisJZHByaW50aygiJXMoJWQpIHRvbmVidXJzdD0lZFxuIiwgX19mdW5jX18sIGJ1cnN0LCB0b25lYnVyc3QpOwogCiAJLyogRGlTRXFDIGJ1cnN0ICovCiAJaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0EpCi0JCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IENYMjQxMTZfRElTRVFDX01JTklfQTsKLQllbHNlIGlmKGJ1cnN0ID09IFNFQ19NSU5JX0IpCi0JCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9IENYMjQxMTZfRElTRVFDX01JTklfQjsKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCUNYMjQxMTZfRElTRVFDX01JTklfQTsKKwllbHNlIGlmIChidXJzdCA9PSBTRUNfTUlOSV9CKQorCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPQorCQkJQ1gyNDExNl9ESVNFUUNfTUlOSV9COwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEaVNFcUMgdG9uZWJ1cnN0ICovCi0JaWYodG9uZWJ1cnN0ICE9IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKKwlpZiAodG9uZWJ1cnN0ICE9IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKIAkJLyogQnVyc3QgaXMgY2FjaGVkICovCiAJCXJldHVybiAwOwogCkBAIC0xMDA2LDcgKzEwNTIsNyBAQAogCiAJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCiAJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLwpAQCAtMTAxNCw3ICsxMDYwLDcgQEAKIAogCS8qIENvbW1hbmQgKi8KIAlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmc3RhdGUtPmRzZWNfY21kKTsKLQlpZihyZXQgIT0gMCkKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKgpAQCAtMTAyNywzNCArMTA3MywzMiBAQAogCSAqICAxMi41bXMgYnVyc3QgICAgICAgICsKIAkgKiA+MTVtcyBkZWxheSAgICAgICAgICAgIChYWFggZGV0ZXJtaW5lIGlmIEZXIGRvZXMgdGhpcywgc2VlIHNldF90b25lKQogCSAqLwotCW1zbGVlcCggKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKyA2MCApOworCW1zbGVlcCgoc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA8PCA0KSArIDYwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjeDI0MTE2X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDI0MTE2X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JZHByaW50aygiJXNcbiIsX19mdW5jX18pOworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDExNl9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBjeDI0MTE2X3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXNcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBrbWFsbG9jXG4iKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJZ290byBlcnJvcjE7Ci0JfQogCiAJLyogc2V0dXAgdGhlIHN0YXRlICovCiAJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpKTsKQEAgLTEwNjMsMzIgKzExMDcsMzYgQEAKIAlzdGF0ZS0+aTJjID0gaTJjOwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHByZXNlbnQgKi8KLQlyZXQgPSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweEZGKSA8PCA4KSB8IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRSk7CisJcmV0ID0gKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRikgPDwgOCkgfAorCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4RkUpOwogCWlmIChyZXQgIT0gMHgwNTAxKSB7Ci0JCXByaW50aygiSW52YWxpZCBwcm9iZSwgcHJvYmFibHkgbm90IGEgQ1gyNDExNiBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJJbnZhbGlkIHByb2JlLCBwcm9iYWJseSBub3QgYSBDWDI0MTE2IGRldmljZVxuIik7CiAJCWdvdG8gZXJyb3IyOwogCX0KIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDI0MTE2X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDExNl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKIGVycm9yMjoga2ZyZWUoc3RhdGUpOwogZXJyb3IxOiByZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyNDExNl9hdHRhY2gpOworCiAvKgogICogSW5pdGlhbGlzZSBvciB3YWtlIHVwIGRldmljZQogICoKICAqIFBvd2VyIGNvbmZpZyB3aWxsIHJlc2V0IGFuZCBsb2FkIGluaXRpYWwgZmlybXdhcmUgaWYgcmVxdWlyZWQKICAqLwotc3RhdGljIGludCBjeDI0MTE2X2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMTZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogUG93ZXIgb24gKi8KIAljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUwLCAwKTsKQEAgLTEwOTgsOSArMTE0Niw5IEBACiAJLyogRmlybXdhcmUgQ01EIDM2OiBQb3dlciBjb25maWcgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUlNMRUVQOwogCWNtZC5hcmdzWzB4MDFdID0gMDsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCWlmKHJldCAhPSAwKQorCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiBjeDI0MTE2X2Rpc2VxY19pbml0KGZlKTsKQEAgLTExMDksMjAgKzExNTcsMjAgQEAKIC8qCiAgKiBQdXQgZGV2aWNlIHRvIHNsZWVwCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDExNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDExNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOwogCWludCByZXQ7CiAKLQlkcHJpbnRrKCIlcygpXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJtd2FyZSBDTUQgMzY6IFBvd2VyIGNvbmZpZyAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX1RVTkVSU0xFRVA7CiAJY21kLmFyZ3NbMHgwMV0gPSAxOwotCWNtZC5sZW49IDB4MDI7CisJY21kLmxlbiA9IDB4MDI7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7Ci0JaWYocmV0ICE9IDApCisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogUG93ZXIgb2ZmIChTaHV0ZG93biBjbG9ja3MpICovCkBAIC0xMTMzLDEzICsxMTgxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkqIHR2cCkKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQogewogCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5KiB0dnApCitzdGF0aWMgaW50IGN4MjQxMTZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKIHsKIAlkcHJpbnRrKCIlcyguLilcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKQEAgLTExNDgsNyArMTE5OCw4IEBACiAvKiBkdmItY29yZSB0b2xkIHVzIHRvIHR1bmUsIHRoZSB0diBwcm9wZXJ0eSBjYWNoZSB3aWxsIGJlIGNvbXBsZXRlLAogICogaXQncyBzYWZlIGZvciBpcyB0byBwdWxsIHZhbHVlcyBhbmQgdXNlIHRoZW0gZm9yIHR1bmluZyBwdXJwb3Nlcy4KICAqLwotc3RhdGljIGludCBjeDI0MTE2X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTE2X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CkBAIC0xMTU2LDk2ICsxMjA3LDEwMiBAQAogCWZlX3N0YXR1c190IHR1bmVyc3RhdDsKIAlpbnQgaSwgc3RhdHVzLCByZXQsIHJldHVuZTsKIAotCWRwcmludGsoIiVzKClcbiIsX19mdW5jX18pOworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaChjLT5kZWxpdmVyeV9zeXN0ZW0pIHsKLQkJY2FzZSBTWVNfRFZCUzoKLQkJCWRwcmludGsoIiVzOiBEVkItUyBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsX19mdW5jX18pOworCXN3aXRjaCAoYy0+ZGVsaXZlcnlfc3lzdGVtKSB7CisJY2FzZSBTWVNfRFZCUzoKKwkJZHByaW50aygiJXM6IERWQi1TIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZFxuIiwgX19mdW5jX18pOwogCi0JCQkvKiBPbmx5IFFQU0sgaXMgc3VwcG9ydGVkIGZvciBEVkItUyAqLwotCQkJaWYoYy0+bW9kdWxhdGlvbiAhPSBRUFNLKSB7Ci0JCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKLQkJCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOwotCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCX0KKwkJLyogT25seSBRUFNLIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KIAotCQkJLyogUGlsb3QgZG9lc24ndCBleGlzdCBpbiBEVkItUywgdHVybiBiaXQgb2ZmICovCisJCS8qIFBpbG90IGRvZXNuJ3QgZXhpc3QgaW4gRFZCLVMsIHR1cm4gYml0IG9mZiAqLworCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKKwkJcmV0dW5lID0gMTsKKworCQkvKiBEVkItUyBvbmx5IHN1cHBvcnRzIDAuMzUgKi8KKwkJaWYgKGMtPnJvbGxvZmYgIT0gUk9MTE9GRl8zNSkgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHJvbGxvZmYgc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+cm9sbG9mZik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKwkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDM1OworCQlicmVhazsKKworCWNhc2UgU1lTX0RWQlMyOgorCQlkcHJpbnRrKCIlczogRFZCLVMyIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZFxuIiwgX19mdW5jX18pOworCisJCS8qCisJCSAqIE5CQyA4UFNLL1FQU0sgd2l0aCBEVkItUyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TMiwKKwkJICogYnV0IG5vdCBoYXJkd2FyZSBhdXRvIGRldGVjdGlvbgorCQkgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUFNLXzggJiYgYy0+bW9kdWxhdGlvbiAhPSBRUFNLKSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCisJCXN3aXRjaCAoYy0+cGlsb3QpIHsKKwkJY2FzZSBQSUxPVF9BVVRPOgkvKiBOb3Qgc3VwcG9ydGVkIGJ1dCBlbXVsYXRlZCAqLworCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gKGMtPm1vZHVsYXRpb24gPT0gUVBTSykKKwkJCQk/IENYMjQxMTZfUElMT1RfT0ZGIDogQ1gyNDExNl9QSUxPVF9PTjsKKwkJCXJldHVuZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBQSUxPVF9PRkY6CiAJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKLQkJCXJldHVuZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBQSUxPVF9PTjoKKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT047CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBwaWxvdCBtb2RlIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPnBpbG90KTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQogCi0JCQkvKiBEVkItUyBvbmx5IHN1cHBvcnRzIDAuMzUgKi8KLQkJCWlmKGMtPnJvbGxvZmYgIT0gUk9MTE9GRl8zNSkgewotCQkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCByb2xsb2ZmIHNlbGVjdGVkICglZClcbiIsCi0JCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9CisJCXN3aXRjaCAoYy0+cm9sbG9mZikgeworCQljYXNlIFJPTExPRkZfMjA6CisJCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMjA7CisJCQlicmVhazsKKwkJY2FzZSBST0xMT0ZGXzI1OgorCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDI1OworCQkJYnJlYWs7CisJCWNhc2UgUk9MTE9GRl8zNToKIAkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAzNTsKIAkJCWJyZWFrOwotCi0JCWNhc2UgU1lTX0RWQlMyOgotCQkJZHByaW50aygiJXM6IERWQi1TMiBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsX19mdW5jX18pOwotCi0JCQkvKgotCQkJICogTkJDIDhQU0svUVBTSyB3aXRoIERWQi1TIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMyLAotCQkJICogYnV0IG5vdCBoYXJkd2FyZSBhdXRvIGRldGVjdGlvbgotCQkJICovCi0JCQlpZihjLT5tb2R1bGF0aW9uICE9IFBTS184ICYmIGMtPm1vZHVsYXRpb24gIT0gUVBTSykgewotCQkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCi0JCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKLQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0KLQkJCXN3aXRjaChjLT5waWxvdCkgewotCQkJCWNhc2UgUElMT1RfQVVUTzoJLyogTm90IHN1cHBvcnRlZCBidXQgZW11bGF0ZWQgKi8KLQkJCQkJcmV0dW5lID0gMjsJLyogRmFsbC10aHJvdWdoICovCi0JCQkJY2FzZSBQSUxPVF9PRkY6Ci0JCQkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT0ZGOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFBJTE9UX09OOgotCQkJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09OOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcGlsb3QgbW9kZSBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQkJX19mdW5jX18sIGMtPnBpbG90KTsKLQkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJfQotCi0JCQlzd2l0Y2goYy0+cm9sbG9mZikgewotCQkJCWNhc2UgUk9MTE9GRl8yMDoKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMjA7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl8yNToKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMjU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl8zNToKLQkJCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWw9IENYMjQxMTZfUk9MTE9GRl8wMzU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUk9MTE9GRl9BVVRPOgkvKiBSb2xsb2ZmIG11c3QgYmUgZXhwbGljaXQgKi8KLQkJCQlkZWZhdWx0OgotCQkJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAotCQkJCQkJX19mdW5jX18sIGMtPnJvbGxvZmYpOwotCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQl9Ci0JCQlicmVhazsKLQorCQljYXNlIFJPTExPRkZfQVVUTzoJLyogUm9sbG9mZiBtdXN0IGJlIGV4cGxpY2l0ICovCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCi0JCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjLT5kZWxpdmVyeV9zeXN0ZW0pOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCXN0YXRlLT5kbnh0Lm1vZHVsYXRpb24gPSBjLT5tb2R1bGF0aW9uOwogCXN0YXRlLT5kbnh0LmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+ZG54dC5waWxvdCA9IGMtPnBpbG90OwogCXN0YXRlLT5kbnh0LnJvbGxvZmYgPSBjLT5yb2xsb2ZmOwogCi0JaWYgKChyZXQgPSBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RhdGUsIGMtPmludmVyc2lvbikpICE9ICAwKQorCXJldCA9IGN4MjQxMTZfc2V0X2ludmVyc2lvbihzdGF0ZSwgYy0+aW52ZXJzaW9uKTsKKwlpZiAocmV0ICE9ICAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogRkVDX05PTkUvQVVUTyBmb3IgRFZCLVMyIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGRldGVjdGVkIGhlcmUgKi8KLQlpZiAoKHJldCA9IGN4MjQxMTZfc2V0X2ZlYyhzdGF0ZSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKSkgIT0gIDApCisJcmV0ID0gY3gyNDExNl9zZXRfZmVjKHN0YXRlLCBjLT5tb2R1bGF0aW9uLCBjLT5mZWNfaW5uZXIpOworCWlmIChyZXQgIT0gIDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIGMtPnN5bWJvbF9yYXRlKSkgIT0gIDApCisJcmV0ID0gY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdGF0ZSwgYy0+c3ltYm9sX3JhdGUpOworCWlmIChyZXQgIT0gIDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBkaXNjYXJkIHRoZSAnY3VycmVudCcgdHVuaW5nIHBhcmFtZXRlcnMgYW5kIHByZXBhcmUgdG8gdHVuZSAqLwpAQCAtMTI3MSw3ICsxMzI4LDcgQEAKIAkvKiBTZXQvUmVzZXQgQi9XICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfQkFORFdJRFRIOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMTsKLQljbWQubGVuPSAweDAyOworCWNtZC5sZW4gPSAweDAyOwogCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEzMTksNyArMTM3Niw3IEBACiAJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1JBVEVESVYsIDB4MDApOwogCX0KIAotCWNtZC5sZW49IDB4MTM7CisJY21kLmxlbiA9IDB4MTM7CiAKIAkvKiBXZSBuZWVkIHRvIHN1cHBvcnQgcGlsb3QgYW5kIG5vbi1waWxvdCB0dW5pbmcgaW4gdGhlCiAJICogZHJpdmVyIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBiZWNhdXNlCkBAIC0xMzI3LDEyICsxMzg0LDEzIEBACiAJICovCiAJZG8gewogCQkvKiBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJc3RhdHVzID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TU1RBVFVTKSAmIENYMjQxMTZfU0lHTkFMX01BU0s7CisJCXN0YXR1cyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykKKwkJCSYgQ1gyNDExNl9TSUdOQUxfTUFTSzsKIAkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUywgc3RhdHVzKTsKIAogCQkvKiBUdW5lICovCiAJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCQlpZiggcmV0ICE9IDAgKQorCQlpZiAocmV0ICE9IDApCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTM0MSwyOCArMTM5OSwyNyBAQAogCQkgKiBJZiB3ZSBhcmUgYWJsZSB0byB0dW5lIHRoZW4gZ2VuZXJhbGx5IGl0IG9jY3VycyB3aXRoaW4gMTAwbXMuCiAJCSAqIElmIGl0IHRha2VzIGxvbmdlciwgdHJ5IGEgZGlmZmVyZW50IHRvbmVidXJzdCBzZXR0aW5nLgogCQkgKi8KLQkJZm9yKGkgPSAwOyBpIDwgNTAgOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDUwIDsgaSsrKSB7CiAJCQljeDI0MTE2X3JlYWRfc3RhdHVzKGZlLCAmdHVuZXJzdGF0KTsKIAkJCXN0YXR1cyA9IHR1bmVyc3RhdCAmIChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpOwotCQkJaWYoc3RhdHVzID09IChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpKSB7Ci0JCQkJZHByaW50aygiJXM6IFR1bmVkXG4iLF9fZnVuY19fKTsKKwkJCWlmIChzdGF0dXMgPT0gKEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfU1lOQykpIHsKKwkJCQlkcHJpbnRrKCIlczogVHVuZWRcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIHR1bmVkOwogCQkJfQogCQkJbXNsZWVwKDEwKTsKIAkJfQogCi0JCWRwcmludGsoIiVzOiBOb3QgdHVuZWRcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogTm90IHR1bmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAkJLyogVG9nZ2xlIHBpbG90IGJpdCB3aGVuIGluIGF1dG8tcGlsb3QgKi8KLQkJaWYoc3RhdGUtPmRjdXIucGlsb3QgPT0gUElMT1RfQVVUTykKKwkJaWYgKHN0YXRlLT5kY3VyLnBpbG90ID09IFBJTE9UX0FVVE8pCiAJCQljbWQuYXJnc1sweDA3XSBePSBDWDI0MTE2X1BJTE9UX09OOwotCX0KLQl3aGlsZSgtLXJldHVuZSk7CisJfSB3aGlsZSAoLS1yZXR1bmUpOwogCiB0dW5lZDogIC8qIFNldC9SZXNldCBCL1cgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9CQU5EV0lEVEg7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwotCWNtZC5sZW49IDB4MDI7CisJY21kLmxlbiA9IDB4MDI7CiAJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTQwNywxNyArMTQ2NCw3IEBACiAJLnNldF9mcm9udGVuZCA9IGN4MjQxMTZfc2V0X2Zyb250ZW5kLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKLQotbW9kdWxlX3BhcmFtKHRvbmVidXJzdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModG9uZWJ1cnN0LCAiRGlTRXFDIHRvbmVidXJzdCAwPU9GRiwgMT1UT05FIENBQ0hFLCAyPU1FU1NBR0UgQ0FDSEUgKGRlZmF1bHQ6MSkiKTsKLQotbW9kdWxlX3BhcmFtKGVzbm9fc25yLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNOUiByZXR1cm4gdW5pdHMsIDA9UEVSQ0VOVEFHRSAwLTEwMCwgMT1FU05PKGRiICogMTApIChkZWZhdWx0OjApIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiRFZCIEZyb250ZW5kIG1vZHVsZSBmb3IgQ29uZXhhbnQgY3gyNDExNi9jeDI0MTE4IGhhcmR3YXJlIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKGN4MjQxMTZfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5oCmluZGV4IDhkYmNlYzIuLjRjYjNkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaApAQCAtMjMsMzEgKzIzLDMyIEBACiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotc3RydWN0IGN4MjQxMTZfY29uZmlnCi17CitzdHJ1Y3QgY3gyNDExNl9jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIAogCS8qIE5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCi0JaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIAogCS8qIE5lZWQgdG8gcmVzZXQgZGV2aWNlIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nICovCi0JaW50ICgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CisJaW50ICgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAKIAkvKiBOZWVkIHRvIHNldCBNUEVHIHBhcmFtZXRlcnMgKi8KIAl1OCBtcGdfY2xrX3Bvc19wb2w6MHgwMjsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExNikgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTZfTU9EVUxFKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDExNl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDExNl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnKiBjb25maWcsCi0JCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9DWDI0MTE2CisjZW5kaWYKIAogI2VuZGlmIC8qIENYMjQxMTZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggNzE1NjE1Ny4uMWE4YzM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCkBAIC0zMyw3ICszMywxMyBAQAogI2RlZmluZSBYVEFMIDEwMTExMDAwCiAKIHN0YXRpYyBpbnQgZm9yY2VfYmFuZDsKK21vZHVsZV9wYXJhbShmb3JjZV9iYW5kLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9iYW5kLCAiRm9yY2UgYSBzcGVjaWZpYyBiYW5kIHNlbGVjdCAiXAorCSIoMS05LCBkZWZhdWx0Om9mZikuIik7CisKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOwogCiAjZGVmaW5lIGluZm8oYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9JTkZPICJDWDI0MTIzOiAiIGFyZ3MpOyB9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoYXJncy4uLikgIGRvIHsgcHJpbnRrKEtFUk5fRVJSICAiQ1gyNDEyMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKQEAgLTQ2LDEwICs1Miw5IEBACiAJCX0gXAogCX0gd2hpbGUgKDApCiAKLXN0cnVjdCBjeDI0MTIzX3N0YXRlCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7Ci0JY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWc7CitzdHJ1Y3QgY3gyNDEyM19zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC03MCw4ICs3NSw3IEBACiB9OwogCiAvKiBWYXJpb3VzIHR1bmVyIGRlZmF1bHRzIG5lZWQgdG8gYmUgZXN0YWJsaXNoZWQgZm9yIGEgZ2l2ZW4gc3ltYm9sIHJhdGUgU3BzICovCi1zdGF0aWMgc3RydWN0Ci17CitzdGF0aWMgc3RydWN0IGN4MjQxMjNfQUdDX3ZhbCB7CiAJdTMyIHN5bWJvbHJhdGVfbG93OwogCXUzMiBzeW1ib2xyYXRlX2hpZ2g7CiAJdTMyIFZDQXByb2dkYXRhOwpAQCAtMTA5LDggKzExMyw3IEBACiAgKiBmaXhtZTogVGhlIGJvdW5kcyBvbiB0aGUgYmFuZHMgZG8gbm90IG1hdGNoIHRoZSBkb2MgaW4gcmVhbCBsaWZlLgogICogZml4bWU6IFNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gbW92ZWQsIG90aGVyIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC4KICAqLwotc3RhdGljIHN0cnVjdAoteworc3RhdGljIHN0cnVjdCBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsIHsKIAl1MzIgZnJlcV9sb3c7CiAJdTMyIGZyZXFfaGlnaDsKIAl1MzIgVkNPZGl2aWRlcjsKQEAgLTI0OSw3ICsyNTIsOCBAQAogCiAJLyogcHJpbnRrKEtFUk5fREVCVUcgIndyKCUwMngpOiAlMDJ4ICUwMnhcbiIsIGkyY19hZGRyLCByZWcsIGRhdGEpOyAqLwogCi0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwllcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKGVyciAhPSAxKSB7CiAJCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yKGVyciA9PSAlaSwgcmVnID09IDB4JTAyeCwiCiAJCQkgIiBkYXRhID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCBlcnIsIHJlZywgZGF0YSk7CiAJCXJldHVybiBlcnI7CkBAIC0yODQsNyArMjg4LDggQEAKICNkZWZpbmUgY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgcmVnLCB2YWwpIFwKIAljeDI0MTIzX2kyY193cml0ZXJlZyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgcmVnLCB2YWwpCiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDI0MTIzX3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKIHsKIAl1OCBub21fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDBlKTsKIAl1OCBhdXRvX3JlZyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxMCk7CkBAIC0zMTEsNyArMzE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2dldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCAqaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDI0MTIzX2dldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90ICppbnZlcnNpb24pCiB7CiAJdTggdmFsOwogCkBAIC0zMjgsMTggKzMzNCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX2NvZGVfcmF0ZV90IGZlYykKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQogewogCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpICYgfjB4MDc7CiAKLQlpZiAoIChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSApCisJaWYgKChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSkKIAkJZmVjID0gRkVDX0FVVE87CiAKIAkvKiBTZXQgdGhlIHNvZnQgZGVjaXNpb24gdGhyZXNob2xkICovCi0JaWYoZmVjID09IEZFQ18xXzIpCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgfCAweDAxKTsKKwlpZiAoZmVjID09IEZFQ18xXzIpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsCisJCQljeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpIHwgMHgwMSk7CiAJZWxzZQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpICYgfjB4MDEpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSAmIH4weDAxKTsKIAogCXN3aXRjaCAoZmVjKSB7CiAJY2FzZSBGRUNfMV8yOgpAQCAtMzg4LDExICszOTYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQorc3RhdGljIGludCBjeDI0MTIzX2dldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLCBmZV9jb2RlX3JhdGVfdCAqZmVjKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBjeDI0MTIzX3JlYWRyZWcgKHN0YXRlLCAweDFiKTsKKwlyZXQgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWIpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXJldCA9IHJldCAmIDB4MDc7CkBAIC00MzMsMTYgKzQ0MSwxNiBAQAogewogCXUzMiBleHAsIG5lYXJlc3QgPSAwOwogCXUzMiBkaXYgPSBhIC8gYjsKLQlpZihhICUgYiA+PSBiIC8gMikgKytkaXY7Ci0JaWYoZGl2IDwgKDEgPDwgMzEpKQotCXsKLQkJZm9yKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQorCWlmIChhICUgYiA+PSBiIC8gMikKKwkJKytkaXY7CisJaWYgKGRpdiA8ICgxIDw8IDMxKSkgeworCQlmb3IgKGV4cCA9IDE7IGRpdiA+IGV4cDsgbmVhcmVzdCsrKQogCQkJZXhwICs9IGV4cDsKIAl9CiAJcmV0dXJuIG5lYXJlc3Q7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIHUzMiBzcmF0ZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsIHUzMiBzcmF0ZSkKIHsKIAl1MzIgdG1wLCBzYW1wbGVfcmF0ZSwgcmF0aW8sIHNhbXBsZV9nYWluOwogCXU4IHBsbF9tdWx0OwpAQCAtNDk4LDkgKzUwNiw5IEBACiAKIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAxLCBwbGxfbXVsdCAqIDYpOwogCi0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gIDgpICYgMHhmZiApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIChyYXRpbyAgICAgICkgJiAweGZmICk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOCwgKHJhdGlvID4+IDE2KSAmIDB4M2YpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDksIChyYXRpbyA+PiA4KSAmIDB4ZmYpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MGEsIHJhdGlvICYgMHhmZik7CiAKIAkvKiBhbHNvIHNldCB0aGUgZGVtb2R1bGF0b3Igc2FtcGxlIGdhaW4gKi8KIAlzYW1wbGVfZ2FpbiA9IGN4MjQxMjNfaW50X2xvZzIoc2FtcGxlX3JhdGUsIHNyYXRlKTsKQEAgLTUxNCwxMCArNTIyLDEyIEBACiB9CiAKIC8qCi0gKiBCYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5IGFuZCBzeW1ib2xyYXRlLCB0aGUgdHVuZXIgQUdDIGhhcyB0byBiZSBjb25maWd1cmVkCi0gKiBhbmQgdGhlIGNvcnJlY3QgYmFuZCBzZWxlY3RlZC4gQ2FsY3VsYXRlIHRob3NlIHZhbHVlcworICogQmFzZWQgb24gdGhlIHJlcXVpcmVkIGZyZXF1ZW5jeSBhbmQgc3ltYm9scmF0ZSwgdGhlIHR1bmVyIEFHQyBoYXMKKyAqIHRvIGJlIGNvbmZpZ3VyZWQgYW5kIHRoZSBjb3JyZWN0IGJhbmQgc2VsZWN0ZWQuCisgKiBDYWxjdWxhdGUgdGhvc2UgdmFsdWVzLgogICovCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX2NhbGN1bGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF9jYWxjdWxhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXUzMiBuZGl2ID0gMCwgYWRpdiA9IDAsIHZjb19kaXYgPSAwOwpAQCAtNTI1LDYgKzUzNSw4IEBACiAJaW50IHB1bXAgPSAyOwogCWludCBiYW5kID0gMDsKIAlpbnQgbnVtX2JhbmRzID0gQVJSQVlfU0laRShjeDI0MTIzX2JhbmRzZWxlY3RfdmFscyk7CisJc3RydWN0IGN4MjQxMjNfYmFuZHNlbGVjdF92YWwgKmJzdiA9IE5VTEw7CisJc3RydWN0IGN4MjQxMjNfQUdDX3ZhbCAqYWdjdiA9IE5VTEw7CiAKIAkvKiBEZWZhdWx0cyBmb3IgbG93IGZyZXEsIGxvdyByYXRlICovCiAJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbMF0uVkNBcHJvZ2RhdGE7CkBAIC01MzIsNTggKzU0NCw2NSBAQAogCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbMF0ucHJvZ2RhdGE7CiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLlZDT2RpdmlkZXI7CiAKLQkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZCBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX0FHQ192YWxzKTsgaSsrKQotCXsKLQkJaWYgKChjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfbG93IDw9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgJiYKLQkJICAgIChjeDI0MTIzX0FHQ192YWxzW2ldLnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICkgewotCQkJc3RhdGUtPlZDQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uVkNBcHJvZ2RhdGE7Ci0JCQlzdGF0ZS0+VkdBYXJnID0gY3gyNDEyM19BR0NfdmFsc1tpXS5WR0Fwcm9nZGF0YTsKLQkJCXN0YXRlLT5GSUxUdW5lID0gY3gyNDEyM19BR0NfdmFsc1tpXS5GSUxUdW5lOworCS8qIEZvciB0aGUgZ2l2ZW4gc3ltYm9sIHJhdGUsIGRldGVybWluZSB0aGUgVkNBLCBWR0EgYW5kCisJICogRklMVFVORSBwcm9ncmFtbWluZyBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19BR0NfdmFscyk7IGkrKykgeworCQlhZ2N2ID0gJmN4MjQxMjNfQUdDX3ZhbHNbaV07CisJCWlmICgoYWdjdi0+c3ltYm9scmF0ZV9sb3cgPD0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSAmJgorCQkgICAgKGFnY3YtPnN5bWJvbHJhdGVfaGlnaCA+PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpKSB7CisJCQlzdGF0ZS0+VkNBYXJnID0gYWdjdi0+VkNBcHJvZ2RhdGE7CisJCQlzdGF0ZS0+VkdBYXJnID0gYWdjdi0+VkdBcHJvZ2RhdGE7CisJCQlzdGF0ZS0+RklMVHVuZSA9IGFnY3YtPkZJTFR1bmU7CiAJCX0KIAl9CiAKIAkvKiBkZXRlcm1pbmUgdGhlIGJhbmQgdG8gdXNlICovCi0JaWYoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fYmFuZHM7IGkrKykKLQkJewotCQkJaWYgKChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2xvdyA8PSBwLT5mcmVxdWVuY3kpICYmCi0JCQkgICAgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldLmZyZXFfaGlnaCA+PSBwLT5mcmVxdWVuY3kpICkKKwlpZiAoZm9yY2VfYmFuZCA8IDEgfHwgZm9yY2VfYmFuZCA+IG51bV9iYW5kcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRzOyBpKyspIHsKKwkJCWJzdiA9ICZjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXTsKKwkJCWlmICgoYnN2LT5mcmVxX2xvdyA8PSBwLT5mcmVxdWVuY3kpICYmCisJCQkJKGJzdi0+ZnJlcV9oaWdoID49IHAtPmZyZXF1ZW5jeSkpCiAJCQkJYmFuZCA9IGk7CiAJCX0KLQl9Ci0JZWxzZQorCX0gZWxzZQogCQliYW5kID0gZm9yY2VfYmFuZCAtIDE7CiAKIAlzdGF0ZS0+YmFuZHNlbGVjdGFyZyA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLnByb2dkYXRhOwogCXZjb19kaXYgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5WQ09kaXZpZGVyOwogCiAJLyogZGV0ZXJtaW5lIHRoZSBjaGFyZ2UgcHVtcCBjdXJyZW50ICovCi0JaWYgKCBwLT5mcmVxdWVuY3kgPCAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9sb3cgKyBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2hpZ2gpLzIgKQorCWlmIChwLT5mcmVxdWVuY3kgPCAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9sb3cgKworCQljeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2hpZ2gpIC8gMikKIAkJcHVtcCA9IDB4MDE7CiAJZWxzZQogCQlwdW1wID0gMHgwMjsKIAogCS8qIERldGVybWluZSB0aGUgTi9BIGRpdmlkZXJzIGZvciB0aGUgcmVxdWVzdGVkIGxiYW5kIGZyZXEgKGluIGtIeikuICovCi0JLyogTm90ZTogdGhlIHJlZmVyZW5jZSBkaXZpZGVyIFI9MTAsIGZyZXF1ZW5jeSBpcyBpbiBLSHosIFhUQUwgaXMgaW4gSHogKi8KLQluZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLyAoMiAqIFhUQUwgLyAxMDAwKSkgLyAzMikgJiAweDFmZjsKLQlhZGl2ID0gKCAoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLyAoMiAqIFhUQUwgLyAxMDAwKSkgJSAzMikgJiAweDFmOworCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LAorCSAqIFhUQUwgaXMgaW4gSHogKi8KKwluZGl2ID0gKCgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvCisJCSgyICogWFRBTCAvIDEwMDApKSAvIDMyKSAmIDB4MWZmOworCWFkaXYgPSAoKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8KKwkJKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKIAogCWlmIChhZGl2ID09IDAgJiYgbmRpdiA+IDApCiAJCW5kaXYtLTsKIAotCS8qIGNvbnRyb2wgYml0cyAxMSwgcmVmZGl2IDExLCBjaGFyZ2UgcHVtcCBwb2xhcml0eSAxLCBjaGFyZ2UgcHVtcCBjdXJyZW50LCBuZGl2LCBhZGl2ICovCi0Jc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8IChwdW1wIDw8IDE0KSB8IChuZGl2IDw8IDUpIHwgYWRpdjsKKwkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwKKwkgKiBjaGFyZ2UgcHVtcCBjdXJyZW50LCBuZGl2LCBhZGl2ICovCisJc3RhdGUtPnBsbGFyZyA9ICgzIDw8IDE5KSB8ICgzIDw8IDE3KSB8ICgxIDw8IDE2KSB8CisJCShwdW1wIDw8IDE0KSB8IChuZGl2IDw8IDUpIHwgYWRpdjsKIAogCXJldHVybiAwOwogfQogCiAvKgogICogVHVuZXIgZGF0YSBpcyAyMSBiaXRzIGxvbmcsIG11c3QgYmUgbGVmdC1hbGlnbmVkIGluIGRhdGEuCi0gKiBUdW5lciBjeDI0MTA5IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2Ugb24gdGhlIGRlbW9kIGNoaXAuCisgKiBUdW5lciBjeDI0MTA5IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2UKKyAqIG9uIHRoZSBkZW1vZCBjaGlwLgogICovCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX3dyaXRlcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAsIHUzMiBkYXRhKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAsIHUzMiBkYXRhKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKQEAgLTYxMCw3ICs2MjksNyBAQAogCiAJLyogc2VuZCBhbm90aGVyIDggYnl0ZXMsIHdhaXQgZm9yIHRoZSBzZW5kIHRvIGJlIGNvbXBsZXRlZCAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg0MCk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGE+PjgpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhID4+IDgpICYgMHhmZik7CiAJd2hpbGUgKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHg0MCkgPT0gMCkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCAiXApAQCAtNjIwLDkgKzYzOSwxMCBAQAogCQltc2xlZXAoMTApOwogCX0KIAotCS8qIHNlbmQgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGlzIGJ5dGUsIHBhZGRlZCB3aXRoIDMgTEJCLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KKwkvKiBzZW5kIHRoZSBsb3dlciA1IGJpdHMgb2YgdGhpcyBieXRlLCBwYWRkZWQgd2l0aCAzIExCQiwKKwkgKiB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhKSAmIDB4ZmYgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSkgJiAweGZmKTsKIAl3aGlsZSAoKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgJiAweDgwKSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogIGRlbW9kdWxhdG9yIGlzIG5vdCByZXNwb25kaW5nLCIgXApAQCAtNjM5LDcgKzY1OSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTIzX3BsbF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWw7CkBAIC02OTAsNyArNzExLDcgQEAKIAlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMywgcik7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IGN4MjQxMjNfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBpOwpAQCAtNjk5LDE5ICs3MjAsMjIgQEAKIAogCS8qIENvbmZpZ3VyZSB0aGUgZGVtb2QgdG8gYSBnb29kIHNldCBvZiBkZWZhdWx0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMjNfcmVnZGF0YSk7IGkrKykKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywgY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOworCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCBjeDI0MTIzX3JlZ2RhdGFbaV0ucmVnLAorCQkJY3gyNDEyM19yZWdkYXRhW2ldLmRhdGEpOwogCiAJLyogU2V0IHRoZSBMTkIgcG9sYXJpdHkgKi8KLQlpZihzdGF0ZS0+Y29uZmlnLT5sbmJfcG9sYXJpdHkpCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MzIsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzMikgfCAweDAyKTsKKwlpZiAoc3RhdGUtPmNvbmZpZy0+bG5iX3BvbGFyaXR5KQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDMyLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDMyKSB8IDB4MDIpOwogCiAJaWYgKHN0YXRlLT5jb25maWctPmRvbnRfdXNlX3BsbCkKLQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOworCQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBjeDI0MTIzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWw7CkBAIC03NDAsNyArNzY0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOwogCXdoaWxlICghKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSkgJiAweDQwKSkgewotCQlpZih0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQllcnIoIiVzOiBkaXNlcWMgcXVldWUgbm90IHJlYWR5LCAiIFwKIAkJCQkiY29tbWFuZCBtYXkgYmUgbG9zdC5cbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwpAQCAtNzQ5LDcgKzc3Myw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCitzdGF0aWMgaW50IGN4MjQxMjNfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaSwgdmFsLCB0b25lOwpAQCAtNzcxLDIwICs3OTYsMjEgQEAKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyQyArIGksIGNtZC0+bXNnW2ldKTsKIAogCXZhbCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyOSk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgKCh2YWwgJiAweDkwKSB8IDB4NDApIHwgKChjbWQtPm1zZ19sZW4tMykgJiAzKSk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgKCh2YWwgJiAweDkwKSB8IDB4NDApIHwKKwkJKChjbWQtPm1zZ19sZW4tMykgJiAzKSk7CiAKIAkvKiB3YWl0IGZvciBkaXNlcWMgbWVzc2FnZSB0byBmaW5pc2ggc2VuZGluZyAqLwogCWN4MjQxMjNfd2FpdF9mb3JfZGlzZXFjKHN0YXRlKTsKIAogCS8qIHJlc3RhcnQgY29udGludW91cyB0b25lIGlmIGVuYWJsZWQgKi8KLQlpZiAodG9uZSAmIDB4MTApIHsKKwlpZiAodG9uZSAmIDB4MTApCiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHRvbmUgJiB+MHg0MCk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCitzdGF0aWMgaW50IGN4MjQxMjNfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHZhbCwgdG9uZTsKQEAgLTgxNCwxMyArODQwLDEzIEBACiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyYSwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDJhKSAmIDB4ZmIpOwogCiAJLyogcmVzdGFydCBjb250aW51b3VzIHRvbmUgaWYgZW5hYmxlZCAqLwotCWlmICh0b25lICYgMHgxMCkgeworCWlmICh0b25lICYgMHgxMCkKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdG9uZSAmIH4weDQwKTsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBjeDI0MTIzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBzeW5jID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDE0KTsKQEAgLTg1Myw4ICs4NzksOSBAQAogfQogCiAvKgotICogQ29uZmlndXJlZCB0byByZXR1cm4gdGhlIG1lYXN1cmVtZW50IG9mIGVycm9ycyBpbiBibG9ja3MsIGJlY2F1c2Ugbm8gVUNCTE9DS1MgdmFsdWUKLSAqIGlzIGF2YWlsYWJsZSwgc28gdGhpcyB2YWx1ZSBkb3VibGVzIHVwIHRvIHNhdGlzZnkgYm90aCBtZWFzdXJlbWVudHMKKyAqIENvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBtZWFzdXJlbWVudCBvZiBlcnJvcnMgaW4gYmxvY2tzLAorICogYmVjYXVzZSBubyBVQ0JMT0NLUyB2YWx1ZSBpcyBhdmFpbGFibGUsIHNvIHRoaXMgdmFsdWUgZG91YmxlcyB1cAorICogdG8gc2F0aXNmeSBib3RoIG1lYXN1cmVtZW50cy4KICAqLwogc3RhdGljIGludCBjeDI0MTIzX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKQEAgLTg3Niw3ICs5MDMsOCBAQAogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JKnNpZ25hbF9zdHJlbmd0aCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzYikgPDwgODsgLyogbGFyZ2VyID0gYmV0dGVyICovCisJLyogbGFyZ2VyID0gYmV0dGVyICovCisJKnNpZ25hbF9zdHJlbmd0aCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzYikgPDwgODsKIAogCWRwcmludGsoIlNpZ25hbCBzdHJlbmd0aCA9ICVkXG4iLCAqc2lnbmFsX3N0cmVuZ3RoKTsKIApAQCAtOTA3LDcgKzkzNSw3IEBACiAJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCiAJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOwogCi0Jc3RhdGUtPmN1cnJlbnRmcmVxPXAtPmZyZXF1ZW5jeTsKKwlzdGF0ZS0+Y3VycmVudGZyZXEgPSBwLT5mcmVxdWVuY3k7CiAJc3RhdGUtPmN1cnJlbnRzeW1ib2xyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOwogCiAJY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOwpAQCAtOTMyLDcgKzk2MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCkBAIC05NTIsNyArOTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtOTc3LDggKzEwMDYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLAorc3RhdGljIGludCBjeDI0MTIzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKIAkJCXVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLAogCQkJdW5zaWduZWQgaW50ICpkZWxheSwKIAkJCWZlX3N0YXR1c190ICpzdGF0dXMpCkBAIC05OTcsMTIgKzEwMjYsMTIgQEAKIAogc3RhdGljIGludCBjeDI0MTIzX2dldF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiAxOyAvL0ZFX0FMR09fSFcKKwlyZXR1cm4gMTsgLyogRkVfQUxHT19IVyAqLwogfQogCi1zdGF0aWMgdm9pZCBjeDI0MTIzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDI0MTIzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiXG4iKTsKIAlpMmNfZGVsX2FkYXB0ZXIoJnN0YXRlLT50dW5lcl9pMmNfYWRhcHRlcik7CiAJa2ZyZWUoc3RhdGUpOwpAQCAtMTAxMyw3ICsxMDQyLDcgQEAKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKIAkvKiB0aGlzIHJlcGVhdGVyIGNsb3NlcyBhZnRlciB0aGUgZmlyc3Qgc3RvcCAqLwotICAgIGN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMSk7CisJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAxKTsKIAlyZXR1cm4gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgbnVtKTsKIH0KIApAQCAtMTAzNyw4ICsxMDY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMjNfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcqIGNvbmZpZywKLQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZywKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0KIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMjNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTEwNTcsMjAgKzEwODYsMjUgQEAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KIAlzdGF0ZS0+ZGVtb2RfcmV2ID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDAwKTsKIAlzd2l0Y2ggKHN0YXRlLT5kZW1vZF9yZXYpIHsKLQljYXNlIDB4ZTE6IGluZm8oImRldGVjdGVkIENYMjQxMjNDXG4iKTsgYnJlYWs7Ci0JY2FzZSAweGQxOiBpbmZvKCJkZXRlY3RlZCBDWDI0MTIzXG4iKTsgYnJlYWs7CisJY2FzZSAweGUxOgorCQlpbmZvKCJkZXRlY3RlZCBDWDI0MTIzQ1xuIik7CisJCWJyZWFrOworCWNhc2UgMHhkMToKKwkJaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM1xuIik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVycigid3JvbmcgZGVtb2QgcmV2aXNpb246ICV4XG4iLCBzdGF0ZS0+ZGVtb2RfcmV2KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDEyM19vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMjNfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCi0gICAgLyogY3JlYXRlIHR1bmVyIGkyYyBhZGFwdGVyICovCi0gICAgaWYgKGNvbmZpZy0+ZG9udF91c2VfcGxsKQotCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMCk7CisJLyogY3JlYXRlIHR1bmVyIGkyYyBhZGFwdGVyICovCisJaWYgKGNvbmZpZy0+ZG9udF91c2VfcGxsKQorCQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOwogCiAJc3RybGNweShzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIubmFtZSwgIkNYMjQxMjMgdHVuZXIgSTJDIGJ1cyIsCiAJCXNpemVvZihzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIubmFtZSkpOwpAQCAtMTA3OSw3ICsxMTEzLDcgQEAKIAlzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIuYWxnb19kYXRhID0gTlVMTDsKIAlpMmNfc2V0X2FkYXBkYXRhKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIsIHN0YXRlKTsKIAlpZiAoaTJjX2FkZF9hZGFwdGVyKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIpIDwgMCkgewotCWVycigidHVuZXIgaTJjIGJ1cyBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOworCQllcnIoInR1bmVyIGkyYyBidXMgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTEwOTAsNiArMTEyNCw3IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woY3gyNDEyM19hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDEyM19vcHMgPSB7CiAKQEAgLTExMjYsMTUgKzExNjEsOCBAQAogCS5nZXRfZnJvbnRlbmRfYWxnbyA9IGN4MjQxMjNfZ2V0X2FsZ28sCiB9OwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOwotCi1tb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgKDEtOSwgZGVmYXVsdDpvZmYpLiIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50ICIgXAogCSJDWDI0MTIzL0NYMjQxMDkvQ1gyNDExMyBoYXJkd2FyZSIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotRVhQT1JUX1NZTUJPTChjeDI0MTIzX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaAppbmRleCBjYzZiNDExLi41MWFlODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKQEAgLTIzLDEzICsyMywxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBjeDI0MTIzX2NvbmZpZwoteworc3RydWN0IGN4MjQxMjNfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKIAkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLwotCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiAKIAkvKiAwID0gTE5CIHZvbHRhZ2Ugbm9ybWFsLCAxID0gTE5CIHZvbHRhZ2UgaW52ZXJ0ZWQgKi8KIAlpbnQgbG5iX3BvbGFyaXR5OwpAQCAtMzksNyArMzgsOCBAQAogCXZvaWQgKCphZ2NfY2FsbGJhY2spIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyM19NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKIGV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmN4MjQxMjNfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CkBAIC01Niw2ICs1Niw2IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9DWDI0MTIzCisjZW5kaWYKIAogI2VuZGlmIC8qIENYMjQxMjNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKaW5kZXggNzUwMGExYy4uY2Y0ZDg5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogc3RydWN0IHM1aDE0MDlfc3RhdGUgewogCi0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAKIAkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0JY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWc7CisJY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC00OCw2ICs0OCw5IEBACiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7CisKICNkZWZpbmUgZHByaW50awlpZiAoZGVidWcpIHByaW50awogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gaW5pdGlhbGlzZSB0aGUgZGVtb2QsIHRoaXMgd2lsbCBzZXQgVlNCIGJ5IGRlZmF1bHQgKi8KQEAgLTI5OSwxMCArMzAyLDEwIEBACiB9OwogCiAvKiA4IGJpdCByZWdpc3RlcnMsIDE2IGJpdCB2YWx1ZXMgKi8KLXN0YXRpYyBpbnQgczVoMTQwOV93cml0ZXJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTE2IGRhdGEpCitzdGF0aWMgaW50IHM1aDE0MDlfd3JpdGVyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHUxNiBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJICAgICAgIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzIH07CkBAIC0zMTAsMTkgKzMxMywxOSBAQAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKIAogCWlmIChyZXQgIT0gMSkKLQkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwNHgsICIKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwNHgsICIKIAkJICAgICAgICJyZXQgPT0gJWkpXG4iLCBfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOwogCiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1MTYgczVoMTQwOV9yZWFkcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIHUxNiBzNWgxNDA5X3JlYWRyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnIH07Ci0JdTggYjEgW10gPSB7IDAsIDAgfTsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwLCAwIH07CiAKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAogCQkgIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELApAQCAtMzM1LDkgKzMzOCw5IEBACiAJcmV0dXJuIChiMVswXSA8PCA4KSB8IGIxWzFdOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc29mdHJlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X3NvZnRyZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIApAQCAtMzQ5LDExICszNTIsMTEgQEAKIH0KIAogI2RlZmluZSBTNUgxNDA5X1ZTQl9JRl9GUkVRIDUzODAKLSNkZWZpbmUgUzVIMTQwOV9RQU1fSUZfRlJFUSBzdGF0ZS0+Y29uZmlnLT5xYW1faWYKKyNkZWZpbmUgUzVIMTQwOV9RQU1fSUZfRlJFUSAoc3RhdGUtPmNvbmZpZy0+cWFtX2lmKQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X2lmX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBLSHopCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2lmX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBLSHopCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZCBLSHopXG4iLCBfX2Z1bmNfXywgS0h6KTsKIApAQCAtMzc2LDI2ICszNzksMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NldF9zcGVjdHJhbGludmVyc2lvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGludmVydGVkKQorc3RhdGljIGludCBzNWgxNDA5X3NldF9zcGVjdHJhbGludmVyc2lvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGludmVydGVkKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgaW52ZXJ0ZWQpOwogCi0JaWYoaW52ZXJ0ZWQgPT0gMSkKKwlpZiAoaW52ZXJ0ZWQgPT0gMSkKIAkJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4MWIsIDB4MTEwMSk7IC8qIEludmVydGVkICovCiAJZWxzZQogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHgxYiwgMHgwMTEwKTsgLyogTm9ybWFsICovCiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9lbmFibGVfbW9kdWxhdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9lbmFibGVfbW9kdWxhdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgICAgIGZlX21vZHVsYXRpb25fdCBtKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoMHglMDh4KVxuIiwgX19mdW5jX18sIG0pOwogCi0Jc3dpdGNoKG0pIHsKKwlzd2l0Y2ggKG0pIHsKIAljYXNlIFZTQl84OgogCQlkcHJpbnRrKCIlcygpIFZTQl84XG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0ZS0+aWZfZnJlcSAhPSBTNUgxNDA5X1ZTQl9JRl9GUkVRKQpAQCAtNDIyLDkgKzQyNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDA5X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCkBAIC00MzQsOSArNDM3LDkgQEAKIAkJcmV0dXJuIHM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4ZjMsIDApOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOwogCkBAIC00NDgsMTggKzQ1MSwxOCBAQAogCQkJczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGUzKSAmIDB4ZmVmZik7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKIAlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhmMiwgZW5hYmxlKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC00ODMsNyArNDg2LDcgQEAKIAkJcmVnICY9IDB4ZmY7CiAKIAkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5NiwgMHgwMGMpOwotCQlpZiAoKHJlZyA8IDB4MzgpIHx8IChyZWcgPiAweDY4KSApIHsKKwkJaWYgKChyZWcgPCAweDM4KSB8fCAocmVnID4gMHg2OCkpIHsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OTMsIDB4MzMzMik7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDllLCAweDJjMzcpOwogCQl9IGVsc2UgewpAQCAtNTE0LDcgKzUxNyw3IEBACiAKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OTYsIDB4MjApOwogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhhZCwKLQkJCQkoICgocmVnMSAmIDB4ZjAwMCkgPj4gNCkgfCAocmVnMiAmIDB4ZjBmZikpICk7CisJCQkJKCgocmVnMSAmIDB4ZjAwMCkgPj4gNCkgfCAocmVnMiAmIDB4ZjBmZikpKTsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4YWIsCiAJCQkJczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGFiKSAmIDB4ZWZmZSk7CiAJCX0KQEAgLTUyOSwxMCArNTMyLDEwIEBACiB9CiAKIC8qIFRhbGsgdG8gdGhlIGRlbW9kLCBzZXQgdGhlIEZFQywgR1VBUkQsIFFBTSBzZXR0aW5ncyBldGMgKi8KLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfZnJvbnRlbmQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoZnJlcXVlbmN5PSVkKVxuIiwgX19mdW5jX18sIHAtPmZyZXF1ZW5jeSk7CiAKQEAgLTU0Niw5ICs1NDksMTEgQEAKIAltc2xlZXAoMTAwKTsKIAogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCiAJLyogT3B0aW1pemUgdGhlIGRlbW9kIGZvciBRQU0gKi8KQEAgLTU5MiwxNyArNTk3LDE3IEBACiAKIC8qIFJlc2V0IHRoZSBkZW1vZCBoYXJkd2FyZSBhbmQgcmVzZXQgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwogICAgdG8gYSBkZWZhdWx0IHN0YXRlLiAqLwotc3RhdGljIGludCBzNWgxNDA5X2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBzNWgxNDA5X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJaW50IGk7CiAKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzNWgxNDA5X3NsZWVwKGZlLCAwKTsKIAlzNWgxNDA5X3JlZ2lzdGVyX3Jlc2V0KGZlKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykKIAkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgaW5pdF90YWJbaV0ucmVnLCBpbml0X3RhYltpXS5kYXRhKTsKIAogCS8qIFRoZSBkYXRhc2hlZXQgc2F5cyB0aGF0IGFmdGVyIGluaXRpYWxpc2F0aW9uLCBWU0IgaXMgZGVmYXVsdCAqLwpAQCAtNjI3LDkgKzYzMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MTYgcmVnOwogCXUzMiB0dW5lcl9zdGF0dXMgPSAwOwogCkBAIC02MzcsMTIgKzY0MiwxMiBAQAogCiAJLyogR2V0IHRoZSBkZW1vZHVsYXRvciBzdGF0dXMgKi8KIAlyZWcgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZjEpOwotCWlmKHJlZyAmIDB4MTAwMCkKKwlpZiAocmVnICYgMHgxMDAwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwotCWlmKHJlZyAmIDB4ODAwMCkKKwlpZiAocmVnICYgMHg4MDAwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLIHwgRkVfSEFTX1NZTkM7CiAKLQlzd2l0Y2goc3RhdGUtPmNvbmZpZy0+c3RhdHVzX21vZGUpIHsKKwlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnN0YXR1c19tb2RlKSB7CiAJY2FzZSBTNUgxNDA5X0RFTU9ETE9DS0lORzoKIAkJaWYgKCpzdGF0dXMgJiBGRV9IQVNfVklURVJCSSkKIAkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU0lHTkFMOwpAQCAtNjY4LDEyICs2NzMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3FhbTI1Nl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfcWFtMjU2X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUocWFtMjU2X3Nucl90YWIpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxYW0yNTZfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA8IHFhbTI1Nl9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHFhbTI1Nl9zbnJfdGFiW2ldLmRhdGE7CiAJCQlyZXQgPSAwOwpAQCAtNjgzLDEyICs2ODgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIsIHUxNiB2KQorc3RhdGljIGludCBzNWgxNDA5X3FhbTY0X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUocWFtNjRfc25yX3RhYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFhbTY0X3Nucl90YWIpOyBpKyspIHsKIAkJaWYgKHYgPCBxYW02NF9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHFhbTY0X3Nucl90YWJbaV0uZGF0YTsKIAkJCXJldCA9IDA7CkBAIC02OTgsMTIgKzcwMywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV92c2JfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIsIHUxNiB2KQorc3RhdGljIGludCBzNWgxNDA5X3ZzYl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNuciwgdTE2IHYpCiB7CiAJaW50IGksIHJldCA9IC1FSU5WQUw7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHZzYl9zbnJfdGFiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnNiX3Nucl90YWIpOyBpKyspIHsKIAkJaWYgKHYgPiB2c2Jfc25yX3RhYltpXS52YWwpIHsKIAkJCSpzbnIgPSB2c2Jfc25yX3RhYltpXS5kYXRhOwogCQkJcmV0ID0gMDsKQEAgLTcxNCwxMyArNzE5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTE2IHJlZzsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2goc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgewogCWNhc2UgUUFNXzY0OgogCQlyZWcgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZjApICYgMHhmZjsKIAkJcmV0dXJuIHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihmZSwgc25yLCByZWcpOwpAQCAtNzM3LDMwICs3NDIsMzAgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCQl1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJdTE2ICpzaWduYWxfc3RyZW5ndGgpCiB7CiAJcmV0dXJuIHM1aDE0MDlfcmVhZF9zbnIoZmUsIHNpZ25hbF9zdHJlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAkqdWNibG9ja3MgPSBzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4YjUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiBiZXIpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogewogCXJldHVybiBzNWgxNDA5X3JlYWRfdWNibG9ja3MoZmUsIGJlcik7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXAtPmZyZXF1ZW5jeSA9IHN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeTsKIAlwLT51LnZzYi5tb2R1bGF0aW9uID0gc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbjsKQEAgLTc2OCwyNSArNzczLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKIHsKIAl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzNWgxNDA5X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBzNWgxNDA5X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgczVoMTQwOV9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBOVUxMOworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IE5VTEw7CiAJdTE2IHJlZzsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC04MjUsNiArODMwLDcgQEAKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHM1aDE0MDlfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHM1aDE0MDlfb3BzID0gewogCkBAIC04NTAsMTQgKzg1NiwxMCBAQAogCS5yZWxlYXNlICAgICAgICAgICAgICA9IHM1aDE0MDlfcmVsZWFzZSwKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1ZyBtZXNzYWdlcyIpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzVIMTQwOSBRQU0tQi9BVFNDIERlbW9kdWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotRVhQT1JUX1NZTUJPTChzNWgxNDA5X2F0dGFjaCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaAppbmRleCBkMWExZDJlLi4wNzBkOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmgKQEAgLTI0LDggKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgczVoMTQwOV9jb25maWcKLXsKK3N0cnVjdCBzNWgxNDA5X2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCkBAIC02MCwxMiArNTksMTQgQEAKIAl1MTYgbXBlZ190aW1pbmc7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDlfTU9EVUxFKSBcCisJJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDA5X2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZywKLQkJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnM1aDE0MDlfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKaW5kZXggMmRhMWEzNy4uMmZlYmZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIAl1OCBhZGRyLCB1OCByZWcsIHUxNiBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgPj4gOCwgIGRhdGEgJiAweGZmIH07CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMyB9OwogCkBAIC0zNTksMTAgKzM1OSwxMCBAQAogc3RhdGljIHUxNiBzNWgxNDExX3JlYWRyZWcoc3RydWN0IHM1aDE0MTFfc3RhdGUgKnN0YXRlLCB1OCBhZGRyLCB1OCByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnIH07Ci0JdTggYjEgW10gPSB7IDAsIDAgfTsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwLCAwIH07CiAKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCiAJCXsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMiB9IH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDQ4LmMKaW5kZXggMDRlN2YxYy4uMmE4YmJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDQ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDQ4LmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogc3RhdGljIGludCB0ZGExMDA0OF93cml0ZXJlZyhzdHJ1Y3QgdGRhMTAwNDhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CiAJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKQEAgLTIxMyw5ICsyMTMsOSBAQAogc3RhdGljIHU4IHRkYTEwMDQ4X3JlYWRyZWcoc3RydWN0IHRkYTEwMDQ4X3N0YXRlICpzdGF0ZSwgdTggcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyB9OwotCXU4IGIxIFtdID0geyAwIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0geworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCQkuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLApAQCAtMzkzLDQzICszOTMsODkgQEAKIAogCXZhbCA9IHRkYTEwMDQ4X3JlYWRyZWcoc3RhdGUsIFREQTEwMDQ4X09VVF9DT05GMik7CiAJc3dpdGNoICgodmFsICYgMHg2MCkgPj4gNSkgewotCWNhc2UgMDogcC0+Y29uc3RlbGxhdGlvbiA9ICAgUVBTSzsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OyBicmVhazsKLQljYXNlIDI6IHAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFQU0s7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OworCQlicmVhazsKIAl9CiAJc3dpdGNoICgodmFsICYgMHgxOCkgPj4gMykgewotCWNhc2UgMDogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7IGJyZWFrOwotCWNhc2UgMTogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzE7IGJyZWFrOwotCWNhc2UgMjogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzI7IGJyZWFrOwotCWNhc2UgMzogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzQ7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzQ7CisJCWJyZWFrOwogCX0KIAlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKLQljYXNlIDA6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7IGJyZWFrOwotCWNhc2UgMTogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzJfMzsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OyBicmVhazsKLQljYXNlIDM6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7IGJyZWFrOwotCWNhc2UgNDogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzdfODsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7CisJCWJyZWFrOwogCX0KIAogCXZhbCA9IHRkYTEwMDQ4X3JlYWRyZWcoc3RhdGUsIFREQTEwMDQ4X09VVF9DT05GMyk7CiAJc3dpdGNoICh2YWwgJiAweDA3KSB7Ci0JY2FzZSAwOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOyBicmVhazsKLQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7IGJyZWFrOwotCWNhc2UgMjogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OyBicmVhazsKLQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OworCQlicmVhazsKIAl9CiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjEpOwogCXN3aXRjaCAoKHZhbCAmIDB4MGMpID4+IDIpIHsKLQljYXNlIDA6IHAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7IGJyZWFrOwotCWNhc2UgMjogcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV84OyBicmVhazsKLQljYXNlIDM6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfNDsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7CisJCWJyZWFrOwogCX0KIAlzd2l0Y2ggKHZhbCAmIDB4MDIpIHsKLQljYXNlIDA6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7IGJyZWFrOwotCWNhc2UgMTogcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsgYnJlYWs7CisJY2FzZSAwOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oCmluZGV4IGQyODc2ZDIuLjA3ZjNmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpZm5kZWYgWjAxOTRBCiAjZGVmaW5lIFowMTk0QQogCi1zdGF0aWMgaW50IHNoYXJwX3owMTk0YV9fc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorc3RhdGljIGludCBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCiB7CiAJdTggYWNsayA9IDA7CkBAIC00MCw3ICs0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBzaGFycF96MDE5NGFfX2luaXR0YWJbXSA9IHsKK3N0YXRpYyB1OCBzaGFycF96MDE5NGFfaW5pdHRhYltdID0gewogCTB4MDEsIDB4MTUsCiAJMHgwMiwgMHgwMCwKIAkweDAzLCAweDAwLApAQCAtODIsMTYgKzgyLDQgQEAKIAkweGZmLCAweGZmCiB9OwogCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX19pbml0dGFiLAotCS5tY2xrID0gODgwMDAwMDBVTCwKLQkuaW52ZXJ0ID0gMSwKLQkuc2tpcF9yZWluaXQgPSAwLAotCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZSwKLX07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCA5ZGEyNjBmLi42ZjliNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNDIsNiArNDIsMTAgQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUxMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MjApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU4MCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1OTApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCBjN2M3NzBjLi5hYTFmZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTIsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggZTUxZDcwNy4uMDRjZDdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJICBjb21wdXRlcidzIFVTQiBwb3J0LgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1zaWxhYnMuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tc2k0NzB4LgogCiBjb25maWcgVVNCX01SODAwCiAJdHJpc3RhdGUgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIHJhZGlvIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCmluZGV4IDY2NzgzZmYuLjc4ZjU2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCWlmIChkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKT09LTEpCi0JCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsICJTZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2MSwxMiArMzYxLDE0IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpIHsKIAkJCWlmIChkc2JyMTAwX3N0b3AocmFkaW8pID09IC0xKSB7Ci0JCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbykgPT0gLTEpIHsKLQkJCQl3YXJuKCJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHkiKTsKKwkJCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJCQkgIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseVxuIik7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJfQpAQCAtNDE2LDcgKzQxOCw4IEBACiAJcmFkaW8tPm11dGVkID0gMTsKIAogCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKTwwKSB7Ci0JCXdhcm4oIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHkiKTsKKwkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCSAiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseVxuIik7CiAJCXJhZGlvLT51c2VycyA9IDA7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FSU87CkBAIC01MDEsNyArNTA0LDcgQEAKIAlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOKkZSRVFfTVVMOwogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQl3YXJuKCJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCmluZGV4IGY2Y2VkY2QuLjU5MjBjZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogICoJCS0gaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgc3VwcG9ydAogICoJCS0gYWZjIGluZGljYXRpb24KICAqCQktIG1vcmUgc2FmZXR5IGNoZWNrcywgbGV0IHNpNDcweF9nZXRfZnJlcSByZXR1cm4gZXJybm8KKyAqCQktIHZpZGlvYyBiZWhhdmlvciBjb3JyZWN0ZWQgYWNjb3JkaW5nIHRvIHY0bDIgc3BlYwogICoKICAqIFRvRG86CiAgKiAtIGFkZCBmaXJtd2FyZSBkb3dubG9hZC91cGRhdGUgc3VwcG9ydApAQCAtMTQxLDkgKzE0Miw5IEBACiAvKiBVU0IgRGV2aWNlIElEIExpc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaTQ3MHhfdXNiX2RyaXZlcl9pZF90YWJsZVtdID0gewogCS8qIFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbiAqLwotCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsCVVTQl9DTEFTU19ISUQsIDAsIDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwYzQsIDB4ODE4YSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKIAkvKiBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LAlVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwNmUxLCAweGExNTUsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7IH0KIH07CkBAIC0xNTcsNyArMTU4LDcgQEAKIAogLyogUmFkaW8gTnIgKi8KIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJSYWRpbyBOciIpOwogCiAvKiBTcGFjaW5nIChrSHopICovCkBAIC0xNjUsNDIgKzE2Niw0MiBAQAogLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KIC8qIDI6ICA1MCBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzcGFjZSA9IDI7Ci1tb2R1bGVfcGFyYW0oc3BhY2UsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiU3BhY2luZzogMD0yMDBrSHogMT0xMDBrSHogKjI9NTBrSHoqIik7Cittb2R1bGVfcGFyYW0oc3BhY2UsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwYWNlLCAiU3BhY2luZzogMD0yMDBrSHogMT0xMDBrSHogKjI9NTBrSHoqIik7CiAKIC8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCiAvKiAwOiA4Ny41IC0gMTA4IE1IeiAoVVNBLCBFdXJvcGUpKi8KIC8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCiAvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmFuZCA9IDE7Ci1tb2R1bGVfcGFyYW0oYmFuZCwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJCYW5kOiAwPTg3LjUuLjEwOE1IeiAqMT03Ni4uMTA4TUh6KiAyPTc2Li45ME1IeiIpOworbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGJhbmQsICJCYW5kOiAwPTg3LjUuLjEwOE1IeiAqMT03Ni4uMTA4TUh6KiAyPTc2Li45ME1IeiIpOwogCiAvKiBEZS1lbXBoYXNpcyAqLwogLyogMDogNzUgdXMgKFVTQSkgKi8KIC8qIDE6IDUwIHVzIChFdXJvcGUsIEF1c3RyYWxpYSwgSmFwYW4pICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGUgPSAxOwotbW9kdWxlX3BhcmFtKGRlLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIkRlLWVtcGhhc2lzOiAwPTc1dXMgKjE9NTB1cyoiKTsKK21vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGUsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7CiAKIC8qIFVTQiB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHVzYl90aW1lb3V0ID0gNTAwOwotbW9kdWxlX3BhcmFtKHVzYl90aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzYl90aW1lb3V0LCAiVVNCIHRpbWVvdXQgKG1zKTogKjUwMCoiKTsKIAogLyogVHVuZSB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHR1bmVfdGltZW91dCA9IDMwMDA7Ci1tb2R1bGVfcGFyYW0odHVuZV90aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbSh0dW5lX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0dW5lX3RpbWVvdXQsICJUdW5lIHRpbWVvdXQ6ICozMDAwKiIpOwogCiAvKiBTZWVrIHRpbWVvdXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2Vla190aW1lb3V0ID0gNTAwMDsKLW1vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHNlZWtfdGltZW91dCwgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNlZWtfdGltZW91dCwgIlNlZWsgdGltZW91dDogKjUwMDAqIik7CiAKIC8qIFJEUyBidWZmZXIgYmxvY2tzICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7Ci1tb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJkc19idWYsICJSRFMgYnVmZmVyIGVudHJpZXM6ICoxMDAqIik7CiAKIC8qIFJEUyBtYXhpbXVtIGJsb2NrIGVycm9ycyAqLwpAQCAtMjA5LDcgKzIxMCw3IEBACiAvKiAxIG1lYW5zIDEtMiAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICh1c2VkIGJ5IG9yaWdpbmFsIFVTQlJhZGlvLmV4ZSkgKi8KIC8qIDIgbWVhbnMgMy01ICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKi8KIC8qIDMgbWVhbnMgICA2KyBlcnJvcnMgb3IgZXJyb3JzIGluIGNoZWNrd29yZCwgY29ycmVjdGlvbiBub3QgcG9zc2libGUgKi8KLW1vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgdXNob3J0LCAwKTsKK21vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3Jkc19lcnJvcnMsICJSRFMgbWF4aW11bSBibG9jayBlcnJvcnM6ICoxKiIpOwogCiAvKiBSRFMgcG9sbCBmcmVxdWVuY3kgKi8KQEAgLTIxOCw3ICsyMTksNyBAQAogLyogNTAgaXMgdXNlZCBieSByYWRpby1jYWRldCAqLwogLyogNzUgc2hvdWxkIGJlIG9rYXkgKi8KIC8qIDgwIGlzIHRoZSB1c3VhbCBSRFMgcmVjZWl2ZSBpbnRlcnZhbCAqLwotbW9kdWxlX3BhcmFtKHJkc19wb2xsX3RpbWUsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19wb2xsX3RpbWUsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfcG9sbF90aW1lLCAiUkRTIHBvbGwgdGltZSAobXMpOiAqNDAqIik7CiAKIApAQCAtNjY3LDIzICs2NjgsMjkgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwotCXN3aXRjaCAoc3BhY2UpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewogCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMCA6IHNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMSA6IHNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDE6CisJCXNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiAgNTAga0h6ICovCi0JZGVmYXVsdDogc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKGJhbmQpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMCA6IGJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotCWNhc2UgMiA6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogcmVhZCBjaGFubmVsICovCkBAIC03MDYsMjMgKzcxMywyOSBAQAogCXVuc2lnbmVkIHNob3J0IGNoYW47CiAKIAkvKiBTcGFjaW5nIChrSHopICovCi0Jc3dpdGNoIChzcGFjZSkgeworCXN3aXRjaCAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gJiBTWVNDT05GSUcyX1NQQUNFKSA+PiA0KSB7CiAJLyogMDogMjAwIGtIeiAoVVNBLCBBdXN0cmFsaWEpICovCi0JY2FzZSAwIDogc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMDoKKwkJc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCi0JY2FzZSAxIDogc3BhY2luZyA9IDAuMTAwICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMToKKwkJc3BhY2luZyA9IDAuMTAwICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDI6ICA1MCBrSHogKi8KLQlkZWZhdWx0OiBzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7CisJZGVmYXVsdDoKKwkJc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOwogCX07CiAKIAkvKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwotCXN3aXRjaCAoYmFuZCkgeworCXN3aXRjaCAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gJiBTWVNDT05GSUcyX0JBTkQpID4+IDYpIHsKIAkvKiAwOiA4Ny41IC0gMTA4IE1IeiAoVVNBLCBFdXJvcGUpICovCi0JY2FzZSAwIDogYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMDoKKwkJYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCi0JZGVmYXVsdDogYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCi0JY2FzZSAyIDogYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMjoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwogCX07CiAKIAkvKiBDaGFuID0gWyBGcmVxIChNaHopIC0gQm90dG9tIG9mIEJhbmQgKE1IeikgXSAvIFNwYWNpbmcgKGtIeikgKi8KQEAgLTExNjQsNyArMTE3Nyw2IEBACiAgKiBzaTQ3MHhfdjRsMl9xdWVyeWN0cmwgLSBxdWVyeSBjb250cm9sCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgc2k0NzB4X3Y0bDJfcXVlcnljdHJsW10gPSB7Ci0vKiBISU5UOiB0aGUgZGlzYWJsZWQgY29udHJvbHMgYXJlIG9ubHkgaGVyZSB0byBzYXRpZnkga3JhZGlvIGFuZCBzdWNoIGFwcHMgKi8KIAl7CiAJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xMTc1LDE4ICsxMTg3LDYgQEAKIAkJLmRlZmF1bHRfdmFsdWUJPSAxNSwKIAl9LAogCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCX0sCi0JewogCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fTVVURSwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAkJLm5hbWUJCT0gIk11dGUiLApAQCAtMTE5NSwxMCArMTE5NSw2IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gMSwKIAl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0xPVURORVNTLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKIH07CiAKIApAQCAtMTIyMCw1NiArMTIxNiwzNCBAQAogCiAKIC8qCi0gKiBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQgLSBnZXQgaW5wdXQKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXVuc2lnbmVkIGludCAqaSkKLXsKLQkqaSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2lucHV0IC0gc2V0IGlucHV0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoaSAhPSAwKQotCQlyZXR2YWwgPSAtRUlOVkFMOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNldCBpbnB1dCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCiAgKiBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zCiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JdW5zaWduZWQgY2hhciBpOworCXVuc2lnbmVkIGNoYXIgaSA9IDA7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKCFxYy0+aWQpCisJLyogYWJvcnQgaWYgcWMtPmlkIGlzIGJlbG93IFY0TDJfQ0lEX0JBU0UgKi8KKwlpZiAocWMtPmlkIDwgVjRMMl9DSURfQkFTRSkKIAkJZ290byBkb25lOwogCisJLyogc2VhcmNoIHZpZGVvIGNvbnRyb2wgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaTQ3MHhfdjRsMl9xdWVyeWN0cmwpOyBpKyspIHsKIAkJaWYgKHFjLT5pZCA9PSBzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0uaWQpIHsKIAkJCW1lbWNweShxYywgJihzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR2YWwgPSAwOworCQkJcmV0dmFsID0gMDsgLyogZm91bmQgKi8KIAkJCWJyZWFrOwogCQl9CiAJfQogCisJLyogZGlzYWJsZSB1bnN1cHBvcnRlZCBiYXNlIGNvbnRyb2xzICovCisJLyogdG8gc2F0aXNmeSBrcmFkaW8gYW5kIHN1Y2ggYXBwcyAqLworCWlmICgocmV0dmFsID09IC1FSU5WQUwpICYmIChxYy0+aWQgPCBWNEwyX0NJRF9MQVNUUDEpKSB7CisJCXFjLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCQlyZXR2YWwgPSAwOworCX0KKwogZG9uZToKIAlpZiAocmV0dmFsIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQpAQCAtMTM2MCw0NCArMTMzNCwxMyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoYXVkaW8tPmluZGV4ICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQorCS8qIGRyaXZlciBjb25zdGFudHMgKi8KKwlhdWRpby0+aW5kZXggPSAwOwogCXN0cmNweShhdWRpby0+bmFtZSwgIlJhZGlvIik7CiAJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJYXVkaW8tPm1vZGUgPSAwOwogCi1kb25lOgotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBnZXQgYXVkaW8gZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2F1ZGlvIC0gc2V0IGF1ZGlvIGF0dHJpYnV0ZXMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoYXVkaW8tPmluZGV4ICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2V0IGF1ZGlvIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTQxNSw3ICsxMzU4LDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAodHVuZXItPmluZGV4ICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE0MjQsOCArMTM2NywxMyBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGRvbmU7CiAKKwkvKiBkcml2ZXIgY29uc3RhbnRzICovCiAJc3RyY3B5KHR1bmVyLT5uYW1lLCAiRk0iKTsKLQlzd2l0Y2ggKGJhbmQpIHsKKwl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CisKKwkvKiByYW5nZSBsaW1pdHMgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlLCBkZWZhdWx0KSAqLwogCWRlZmF1bHQ6CiAJCXR1bmVyLT5yYW5nZWxvdyAgPSAgODcuNSAqIEZSRVFfTVVMOwpAQCAtMTQ0MiwxNCArMTM5MCwxOCBAQAogCQl0dW5lci0+cmFuZ2VoaWdoID0gIDkwICAgKiBGUkVRX01VTDsKIAkJYnJlYWs7CiAJfTsKLQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAKLQkvKiBTdGVyZW8gaW5kaWNhdG9yID09IFN0ZXJlbyAoaW5zdGVhZCBvZiBNb25vKSAqLworCS8qIHN0ZXJlbyBpbmRpY2F0b3IgPT0gc3RlcmVvIChpbnN0ZWFkIG9mIG1vbm8pICovCiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVCkgPT0gMSkKLQkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJZWxzZQorCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJiBQT1dFUkNGR19NT05PKSA9PSAxKQogCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCWVsc2UKKwkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCiAJLyogbWluIGlzIHdvcnN0LCBtYXggaXMgYmVzdDsgc2lnbmFsOjAuLjB4ZmZmZjsgcnNzaTogMC4uMHhmZiAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSkKQEAgLTE0NzQsMjMgKzE0MjYsMjggQEAKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyKQogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKIAkvKiBzYWZldHkgY2hlY2tzICovCiAJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKKwlpZiAodHVuZXItPmluZGV4ICE9IDApCisJCWdvdG8gZG9uZTsKKworCS8qIG1vbm8vc3RlcmVvIHNlbGVjdG9yICovCisJc3dpdGNoICh0dW5lci0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX01PTk87ICAvKiBmb3JjZSBtb25vICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX01PTk87IC8qIHRyeSBzdGVyZW8gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJZ290byBkb25lOwogCX0KIAotCWlmICh0dW5lci0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTykKLQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KLQllbHNlCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19NT05POyAvKiB0cnkgc3RlcmVvICovCi0KIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CiAKIGRvbmU6CkBAIC0xNTE1LDExICsxNDcyLDEyIEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChmcmVxLT50dW5lciAhPSAwKSAmJiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChmcmVxLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlyZXR2YWwgPSBzaTQ3MHhfZ2V0X2ZyZXEocmFkaW8sICZmcmVxLT5mcmVxdWVuY3kpOwogCiBkb25lOgpAQCAtMTU0NCw3ICsxNTAyLDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKGZyZXEtPnR1bmVyICE9IDApICYmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKGZyZXEtPnR1bmVyICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE1NzMsNyArMTUzMSw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChzZWVrLT50dW5lciAhPSAwKSAmJiAoc2Vlay0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChzZWVrLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNTg4LDE1ICsxNTQ2LDE2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorCisvKgorICogc2k0NzB4X2lvY3RsX29wcyAtIHZpZGVvIGRldmljZSBpb2N0bCBvcGVyYXRpb25zCisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzB4X2lvY3RsX29wcyA9IHsKIAkudmlkaW9jX3F1ZXJ5Y2FwCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2dfaW5wdXQJCT0gc2k0NzB4X3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dAkJPSBzaTQ3MHhfdmlkaW9jX3NfaW5wdXQsCiAJLnZpZGlvY19xdWVyeWN0cmwJPSBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX2dfY3RybAkJPSBzaTQ3MHhfdmlkaW9jX2dfY3RybCwKIAkudmlkaW9jX3NfY3RybAkJPSBzaTQ3MHhfdmlkaW9jX3NfY3RybCwKIAkudmlkaW9jX2dfYXVkaW8JCT0gc2k0NzB4X3ZpZGlvY19nX2F1ZGlvLAotCS52aWRpb2Nfc19hdWRpbwkJPSBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8sCiAJLnZpZGlvY19nX3R1bmVyCQk9IHNpNDcweF92aWRpb2NfZ190dW5lciwKIAkudmlkaW9jX3NfdHVuZXIJCT0gc2k0NzB4X3ZpZGlvY19zX3R1bmVyLAogCS52aWRpb2NfZ19mcmVxdWVuY3kJPSBzaTQ3MHhfdmlkaW9jX2dfZnJlcXVlbmN5LApAQCAtMTYwNCwxNCArMTU2MywxNSBAQAogCS52aWRpb2Nfc19od19mcmVxX3NlZWsJPSBzaTQ3MHhfdmlkaW9jX3NfaHdfZnJlcV9zZWVrLAogfTsKIAorCiAvKgotICogc2k0NzB4X3ZpZGRldl90YW1wbGVzIC0gdmlkZW8gZGV2aWNlIGludGVyZmFjZQorICogc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSAtIHZpZGVvIGRldmljZSBpbnRlcmZhY2UKICAqLwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSA9IHsKIAkuZm9wcwkJCT0gJnNpNDcweF9mb3BzLAotCS5pb2N0bF9vcHMgCQk9ICZzaTQ3MHhfaW9jdGxfb3BzLAogCS5uYW1lCQkJPSBEUklWRVJfTkFNRSwKIAkucmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzCQk9ICZzaTQ3MHhfaW9jdGxfb3BzLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCmluZGV4IGY3OTRmMmQuLmUwZWI0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCkBAIC0yOSw0MyArMjksMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURWNzE3MCB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWF4aW0gWWV2dHl1c2hraW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHgpICh4KS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYWR2NzE3MCB7CkBAIC04MCwyMSArNjEsMTIgQEAKIAlpbnQgc2F0OwogfTsKIAotI2RlZmluZSAgIEkyQ19BRFY3MTcwICAgICAgICAweGQ0Ci0jZGVmaW5lICAgSTJDX0FEVjcxNzEgICAgICAgIDB4NTQKLQotc3RhdGljIGNoYXIgYWR2NzE3MF9uYW1lW10gPSAiYWR2NzE3MCI7Ci1zdGF0aWMgY2hhciBhZHY3MTcxX25hbWVbXSA9ICJhZHY3MTcxIjsKLQogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAicGFzc190aHJvdWdoIiwgInBsYXlfYmFjayIgfTsKIHN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hZHY3MTcwX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMTAyLDE3ICs3NCwxMyBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hZHY3MTcwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzBfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgYWR2NzE3MF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMzMsMzMgKzEwMSwyNSBAQAogCQkJCSAgICBlbmNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gYWR2NzE3MF93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gYWR2NzE3MF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CiAJfQotCiAJcmV0dXJuIHJldDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8vIE91dHB1dCBmaWx0ZXI6ICBTLVZpZGVvICBDb21wb3NpdGUKLQotI2RlZmluZSBNUjA1MCAgICAgICAweDExCS8vMHgwOQotI2RlZmluZSBNUjA2MCAgICAgICAweDE0CS8vMHgwYwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjZGVmaW5lIFRSME1PREUgICAgIDB4NGMKICNkZWZpbmUgVFIwUlNUCSAgICAweDgwCkBAIC0xNjcsNyArMTI3LDYgQEAKICNkZWZpbmUgVFIxQ0FQVAkgICAgMHgwMAogI2RlZmluZSBUUjFQTEFZCSAgICAweDAwCiAKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9OVFNDW10gPSB7CiAJMHgwMCwgMHgxMCwJCS8vIE1SMAogCTB4MDEsIDB4MjAsCQkvLyBNUjEKQEAgLTIyNywxNSArMTg2LDExIEBACiB9OwogCiAKLXN0YXRpYyBpbnQKLWFkdjcxNzBfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICogICAgICAgICAgICAgYXJnKQorc3RhdGljIGludCBhZHY3MTcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAjaWYgMAogCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KQEAgLTI1NCwxOCArMjA5LDE2IEBACiAJCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQzsKIAkJY2FwLT5pbnB1dHMgPSAyOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9OT1JNOgogCXsKIAkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlc19jb21tYW5kOiBzZXQgbm9ybSAlZCIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsIGlhcmcpOwogCiAJCXN3aXRjaCAoaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfTlRTQywKIAkJCQkJICAgIHNpemVvZihpbml0X05UU0MpKTsKQEAgLTI4NSwxNiArMjM4LDEzIEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGlsbGVnYWwgbm9ybTogJWRcbiIsCi0JCQkgICAgICAgSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogc3dpdGNoZWQgdG8gJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlub3Jtc1tpYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBub3Jtc1tpYXJnXSk7CiAJCWVuY29kZXItPm5vcm0gPSBpYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC0zMDQsMTkgKzI1NCwxNyBAQAogCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKIAkJICppYXJnID0gMjogY29sb3IgYmFyICovCiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlc19jb21tYW5kOiBzZXQgaW5wdXQgZnJvbSAlc1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCBmcm9tICVzXG4iLAogCQkJaWFyZyA9PSAwID8gImRlY29kZXIiIDogIlpSMzYwNjAiKTsKIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgyMCk7CiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwOCwgVFIxQ0FQVCk7CS8qIFRSMSAqLwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MGUpOwkvLyBFbmFibGUgZ2VubG9jawogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgMToKQEAgLTMyNSwyMCArMjczLDE3IEBACiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwOCk7CiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7CisJCQkvKiB1ZGVsYXkoMTApOyAqLwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIGlucHV0OiAlZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogc3dpdGNoZWQgdG8gJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlpbnB1dHNbaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW2lhcmddKTsKIAkJZW5jb2Rlci0+aW5wdXQgPSBpYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6CiAJewpAQCAtMzQ4LDE2ICsyOTMsMTYgQEAKIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjgsMTQ5ICszMTMsNjcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX0FEVjcxNzAgPj4gMSwgKEkyQ19BRFY3MTcwID4+IDEpICsgMSwKLQlJMkNfQURWNzE3MSA+PiAxLCAoSTJDX0FEVjcxNzEgPj4gMSkgKyAxLAorc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwkweGQ0ID4+IDEsIDB4ZDYgPj4gMSwJLyogYWR2NzE3MCBJRHMgKi8KKwkweDU0ID4+IDEsIDB4NTYgPj4gMSwJLyogYWR2NzE3MSBJRHMgKi8KIAlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9hZHY3MTcwOwotCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgYWR2NzE3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGFkdjcxNzAgKmVuY29kZXI7Ci0JY2hhciAqZG5hbWU7Ci0KLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3MC5jOiBkZXRlY3RpbmcgYWR2NzE3MCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOworCWludCBpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfYWR2NzE3MDsKLQlpZiAoKGNsaWVudC0+YWRkciA9PSBJMkNfQURWNzE3MCA+PiAxKSB8fAotCSAgICAoY2xpZW50LT5hZGRyID09IChJMkNfQURWNzE3MCA+PiAxKSArIDEpKSB7Ci0JCWRuYW1lID0gYWR2NzE3MF9uYW1lOwotCX0gZWxzZSBpZiAoKGNsaWVudC0+YWRkciA9PSBJMkNfQURWNzE3MSA+PiAxKSB8fAotCQkgICAoY2xpZW50LT5hZGRyID09IChJMkNfQURWNzE3MSA+PiAxKSArIDEpKSB7Ci0JCWRuYW1lID0gYWR2NzE3MV9uYW1lOwotCX0gZWxzZSB7Ci0JCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSEhISAqLwotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCBkbmFtZSwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzApLCBHRlBfS0VSTkVMKTsKLQlpZiAoZW5jb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZW5jb2Rlci0+aW5wdXQgPSAwOwogCWVuY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShlbmNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJaSA9IGFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsIHNpemVvZihpbml0X05UU0MpKTsKIAlpZiAoaSA+PSAwKSB7CiAJCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7CiAJCWkgPSBhZHY3MTcwX3JlYWQoY2xpZW50LCAweDEyKTsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzX2F0dGFjaDogcmV2LiAlZCBhdCAweCUwMnhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpICYgMSwgY2xpZW50LT5hZGRyIDw8IDEpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IGVycm9yIDB4JXhcbiIsCi0JCSAgICAgICBJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzBfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYWR2NzE3MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3MC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYWR2NzE3MF9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotYWR2NzE3MF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzAgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWR2NzE3MCIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBhZHY3MTcwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYWR2NzE3MF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYWR2NzE3MF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxNzBfaWRbXSA9IHsKKwl7ICJhZHY3MTcwIiwgMCB9LAorCXsgImFkdjcxNzEiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdjcxNzBfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYWR2NzE3MF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTcwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1hZHY3MTcwX2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3MCk7Ci19Ci0KLW1vZHVsZV9pbml0KGFkdjcxNzBfaW5pdCk7Ci1tb2R1bGVfZXhpdChhZHY3MTcwX2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImFkdjcxNzAiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAorCS5jb21tYW5kID0gYWR2NzE3MF9jb21tYW5kLAorCS5wcm9iZSA9IGFkdjcxNzBfcHJvYmUsCisJLnJlbW92ZSA9IGFkdjcxNzBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFkdjcxNzBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwppbmRleCA4ZWUwN2E2Li42MDA4ZTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwpAQCAtMjUsNDMgKzI1LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYWR2NzE3NSB7CkBAIC03NywzMyArNTgsMjMgQEAKICNkZWZpbmUgICBJMkNfQURWNzE3NSAgICAgICAgMHhkNAogI2RlZmluZSAgIEkyQ19BRFY3MTc2ICAgICAgICAweDU0CiAKLXN0YXRpYyBjaGFyIGFkdjcxNzVfbmFtZVtdID0gImFkdjcxNzUiOwotc3RhdGljIGNoYXIgYWR2NzE3Nl9uYW1lW10gPSAiYWR2NzE3NiI7Ci0KIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siLCAiY29sb3JfYmFyIiB9Owogc3RhdGljIGNoYXIgKm5vcm1zW10gPSB7ICJQQUwiLCAiTlRTQyIsICJTRUNBTS0+UEFMIChtYXkgbm90IHdvcmshKSIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWFkdjcxNzVfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3NV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTc1X3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IGFkdjcxNzVfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTIzLDE4ICs5NCwxNyBAQAogCQkJCXJlZysrOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTE0MywxMyArMTEzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLXNldF9zdWJjYXJyaWVyX2ZyZXEgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgaW50ICAgICAgICAgICAgICAgIHBhc3NfdGhyb3VnaCkKK3N0YXRpYyB2b2lkIHNldF9zdWJjYXJyaWVyX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhc3NfdGhyb3VnaCkKIHsKIAkvKiBmb3Igc29tZSByZWFzb24gcGFzc190aHJvdWdoIE5UU0MgbmVlZHMKIAkgKiBhIGRpZmZlcmVudCBzdWItY2FycmllciBmcmVxIHRvIHJlbWFpbiBzdGFibGUuICovCi0JaWYocGFzc190aHJvdWdoKQorCWlmIChwYXNzX3Rocm91Z2gpCiAJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAyLCAweDAwKTsKIAllbHNlCiAJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAyLCAweDU1KTsKQEAgLTE2MCwxMiArMTI4LDEyIEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vLyBPdXRwdXQgZmlsdGVyOiAgUy1WaWRlbyAgQ29tcG9zaXRlCisvKiBPdXRwdXQgZmlsdGVyOiAgUy1WaWRlbyAgQ29tcG9zaXRlICovCiAKLSNkZWZpbmUgTVIwNTAgICAgICAgMHgxMQkvLzB4MDkKLSNkZWZpbmUgTVIwNjAgICAgICAgMHgxNAkvLzB4MGMKKyNkZWZpbmUgTVIwNTAgICAgICAgMHgxMQkvKiAweDA5ICovCisjZGVmaW5lIE1SMDYwICAgICAgIDB4MTQJLyogMHgwYyAqLwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBUUjBNT0RFICAgICAweDQ2CiAjZGVmaW5lIFRSMFJTVAkgICAgMHg4MApAQCAtMjE2LDE1ICsxODQsMTEgQEAKIAkweDA2LCAweDFhLAkJLyogc3ViYy4gcGhhc2UgKi8KIH07CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzVfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBhZHY3MTc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwogCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCkBAIC0yNDIsMTUgKzIwNiwxNCBAQAogCQkJICAgICBWSURFT19FTkNPREVSX1NFQ0FNOyAvKiB3ZWxsLCBoYWNreSAqLwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKIAogCQlzd2l0Y2ggKGlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7CkBAIC0yODQsMTYgKzI0NywxMyBAQAogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogaWxsZWdhbCBub3JtOiAlZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgbm9ybTogJWRcbiIsIGlhcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJbm9ybXNbaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwogCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzA0LDcgKzI2NCw2IEBACiAJCSAqaWFyZyA9IDI6IGNvbG9yIGJhciAqLwogCiAJCXN3aXRjaCAoaWFyZykgewotCiAJCWNhc2UgMDoKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKIApAQCAtMzMxLDcgKzI5MCw3IEBACiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7CisJCQkvKiB1ZGVsYXkoMTApOyAqLwogCQkJYnJlYWs7CiAKIAkJY2FzZSAyOgpAQCAtMzQzLDM5ICszMDIsMzUgQEAKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKKwkJCS8qIHVkZWxheSgxMCk7ICovCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGlsbGVnYWwgaW5wdXQ6ICVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIGlhcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvICVzXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJaW5wdXRzW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7CiAJCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7CisJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM5MCwxNDUgKzM0NSw2NyBAQAogICogR2VuZXJpYyBpMmMgcHJvYmUKICAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKICAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9Ci0gICAgeyBJMkNfQURWNzE3NSA+PiAxLCAoSTJDX0FEVjcxNzUgPj4gMSkgKyAxLAorc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwlJMkNfQURWNzE3NSA+PiAxLCAoSTJDX0FEVjcxNzUgPj4gMSkgKyAxLAogCUkyQ19BRFY3MTc2ID4+IDEsIChJMkNfQURWNzE3NiA+PiAxKSArIDEsCiAJSTJDX0NMSUVOVF9FTkQKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYWR2NzE3NTsKLQotc3RhdGljIGludAotYWR2NzE3NV9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGFkdjcxNzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyOwotCWNoYXIgKmRuYW1lOwotCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzUuYzogZGV0ZWN0aW5nIGFkdjcxNzUgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2FkdjcxNzU7Ci0JaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzUgPj4gMSkgfHwKLQkgICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzUgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzVfbmFtZTsKLQl9IGVsc2UgaWYgKChjbGllbnQtPmFkZHIgPT0gSTJDX0FEVjcxNzYgPj4gMSkgfHwKLQkJICAgKGNsaWVudC0+YWRkciA9PSAoSTJDX0FEVjcxNzYgPj4gMSkgKyAxKSkgewotCQlkbmFtZSA9IGFkdjcxNzZfbmFtZTsKLQl9IGVsc2UgewotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUhISEgKi8KLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgZG5hbWUsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHY3MTc1KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJZW5jb2Rlci0+aW5wdXQgPSAwOwogCWVuY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShlbmNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJaSA9IGFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJaWYgKGkgPj0gMCkgewogCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwogCQlpID0gYWR2NzE3NV9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IHJldi4gJWQgYXQgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkgJiAxLCBjbGllbnQtPmFkZHIgPDwgMSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CiAJfQotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgZXJyb3IgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0KLQorCWlmIChpIDwgMCkKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWR2NzE3NV9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBhZHY3MTc1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJhZHY3MTc1LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZhZHY3MTc1X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1hZHY3MTc1X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZW5jb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYWR2NzE3NSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhZHY3MTc1IiwJLyogbmFtZSAqLwotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKLQotCS5hdHRhY2hfYWRhcHRlciA9IGFkdjcxNzVfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBhZHY3MTc1X2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBhZHY3MTc1X2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR2NzE3NV9pZFtdID0geworCXsgImFkdjcxNzUiLCAwIH0sCisJeyAiYWR2NzE3NiIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWR2NzE3NV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1hZHY3MTc1X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX2FkdjcxNzUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWFkdjcxNzVfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTc1KTsKLX0KLQotbW9kdWxlX2luaXQoYWR2NzE3NV9pbml0KTsKLW1vZHVsZV9leGl0KGFkdjcxNzVfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYWR2NzE3NSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJLmNvbW1hbmQgPSBhZHY3MTc1X2NvbW1hbmQsCisJLnByb2JlID0gYWR2NzE3NV9wcm9iZSwKKwkucmVtb3ZlID0gYWR2NzE3NV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYWR2NzE3NV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCmluZGV4IDVmMDdhOGEuLmQ2MDEyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCkBAIC05MCw2ICs5MCw3IEBACiAJY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjUwMDogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gKi8KIAkJYnJlYWs7CkBAIC0xODUsNyArMTg2LDcgQEAKIH0KIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RydWN0IHVzYl9kZXZpY2VfaWQgYXUwODI4X3VzYl9pZF90YWJsZSBbXSA9IHsKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMDApLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyNDApLApAQCAtMTk4LDYgKzE5OSw4IEBACiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxYiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZSksCisJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzI4MCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwppbmRleCBkODU2ZGU5Li41NzY1ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKQEAgLTkxLDcgKzkxLDggQEAKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dXNiZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShkZXYtPnVzYmRldiwgMCksCiAJCQkJcmVxdWVzdCwKLQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCQlVU0JfUkVDSVBfREVWSUNFLAogCQkJCXZhbHVlLCBpbmRleCwKIAkJCQljcCwgc2l6ZSwgMTAwMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwppbmRleCBmMGZjZGI0Li5hODgyY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCkBAIC0xNzMsNyArMTczLDggQEAKIAkJcHVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCQl1c2JfZmlsbF9idWxrX3VyYihwdXJiLAogCQkJCSAgZGV2LT51c2JkZXYsCi0JCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51c2JkZXYsIF9BVTA4MjhfQlVMS1BJUEUpLAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dXNiZGV2LAorCQkJCQlfQVUwODI4X0JVTEtQSVBFKSwKIAkJCQkgIHB1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgIFVSQl9CVUZTSVpFLAogCQkJCSAgdXJiX2NvbXBsZXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggZGRkMmE3OS4uYTA3YjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtMjksNDQgKzI5LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTgxOSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBidDgxOSB7CkBAIC05NywxNCArNzgsOSBAQAogCXs4NTggLSAyNCwgMjAsIDUyNSAtIDIsIDEsIDB4MDBmOCwgMHgwMDAwfSwKIH07CiAKLSNkZWZpbmUgICBJMkNfQlQ4MTkgICAgICAgIDB4OGEKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODE5X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTExMiwyNCArODgsMTUgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4MTlfc2V0Yml0IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIGJpdCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcmV0dXJuIGJ0ODE5X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJICAgKGRlY29kZXItPgotCQkJICAgIHJlZ1tyZWddICYgfigxIDw8IGJpdCkpIHwKLQkJCSAgICAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOworCQkoZGVjb2Rlci0+cmVnW3JlZ10gJiB+KDEgPDwgYml0KSkgfCAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgaW50Ci1idDgxOV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IGJ0ODE5X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xNTAsMTAgKzExNyw5IEBACiAJCQkJICAgIGRlY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNjksMjAgKzEzNSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDgxOV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODE5X2luaXQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJ0ODE5X2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXRbXSA9IHsKLQkJLy8weDFmLCAweDAwLCAgICAgLyogUmVzZXQgKi8KKwkJLyoweDFmLCAweDAwLCovICAgICAvKiBSZXNldCAqLwogCQkweDAxLCAweDU5LAkvKiAweDAxIGlucHV0IGZvcm1hdCAqLwogCQkweDAyLCAweDAwLAkvKiAweDAyIHRlbXBvcmFsIGRlY2ltYXRpb24gKi8KIAkJMHgwMywgMHgxMiwJLyogMHgwMyBDcm9wcGluZyBtc2IgKi8KQEAgLTIxOCwxMiArMTgxLDEwIEBACiAJc3RydWN0IHRpbWluZyAqdGltaW5nID0gJnRpbWluZ19kYXRhW2RlY29kZXItPm5vcm1dOwogCiAJaW5pdFsweDAzICogMiAtIDFdID0KLQkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8ICgoKHRpbWluZy0+Ci0JCQkJCQkgICAgICAgdmFjdGl2ZSA+PiA4KSAmCi0JCQkJCQkgICAgICAweDAzKSA8PCA0KSB8Ci0JICAgICgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfCAoKHRpbWluZy0+Ci0JCQkJCQkgICAgICBoYWN0aXZlID4+IDgpICYKLQkJCQkJCSAgICAgMHgwMyk7CisJICAgICgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfAorCSAgICAoKCh0aW1pbmctPnZhY3RpdmUgPj4gOCkgJiAweDAzKSA8PCA0KSB8CisJICAgICgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfAorCSAgICAoKHRpbWluZy0+aGFjdGl2ZSA+PiA4KSAmIDB4MDMpOwogCWluaXRbMHgwNCAqIDIgLSAxXSA9IHRpbWluZy0+dmRlbGF5ICYgMHhmZjsKIAlpbml0WzB4MDUgKiAyIC0gMV0gPSB0aW1pbmctPnZhY3RpdmUgJiAweGZmOwogCWluaXRbMHgwNiAqIDIgLSAxXSA9IHRpbWluZy0+aGRlbGF5ICYgMHhmZjsKQEAgLTIzOCwyNyArMTk5LDIyIEBACiAKIAkvKiBpbml0ICovCiAJcmV0dXJuIGJ0ODE5X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50Ci1idDgxOV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCSAgICAgICB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBidDgxOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCWludCB0ZW1wOwogCiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoIWRlY29kZXItPmluaXRpYWxpemVkKSB7CS8vIEZpcnN0IGNhbGwgdG8gYnQ4MTlfaW5pdCBjb3VsZCBiZQotCQlidDgxOV9pbml0KGNsaWVudCk7CS8vIHdpdGhvdXQgI0ZSU1QgPSAwCisJaWYgKCFkZWNvZGVyLT5pbml0aWFsaXplZCkgewkvKiBGaXJzdCBjYWxsIHRvIGJ0ODE5X2luaXQgY291bGQgYmUgKi8KKwkJYnQ4MTlfaW5pdChjbGllbnQpOwkvKiB3aXRob3V0ICNGUlNUID0gMCAqLwogCQlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDE7CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCiAJCWJ0ODE5X2luaXQoY2xpZW50KTsKQEAgLTI3NCw4ICsyMzAsOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gODsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTI4NSw5ICsyNDEsOSBAQAogCiAJCXN0YXR1cyA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDAwKTsKIAkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAweDgwKSkgeworCQlpZiAoKHN0YXR1cyAmIDB4ODApKQogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KKwogCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKQEAgLTI5NywyOCArMjUzLDI1IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MTApKSB7CisJCQlpZiAoKHN0YXR1cyAmIDB4MTApKQogCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIAkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQkqaWFyZyA9IHJlczsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGdldCBzdGF0dXMgJXhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkqaWFyZyk7Ci0JfQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgc3RhdHVzICV4XG4iLCAqaWFyZyk7CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAkJc3RydWN0IHRpbWluZyAqdGltaW5nID0gTlVMTDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHNldCBub3JtICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAleFxuIiwgKmlhcmcpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CkBAIC0zMjcsNyArMjgwLDcgQEAKIAkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDApOwogCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDY4KTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg1ZCk7Ci0JCQkvL2J0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAxKTsKKwkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAxKTsgKi8KIAkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX05UU0NdOwogCQkJYnJlYWs7CiAJCWNhc2UgVklERU9fTU9ERV9QQUw6CkBAIC0zMzYsNyArMjg5LDcgQEAKIAkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDEpOwogCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDdmKTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg3Mik7Ci0JCQkvL2J0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAwKTsKKwkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAwKTsgKi8KIAkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX1BBTF07CiAJCQlicmVhazsKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86CkBAIC0zNDQsMTAgKzI5Nyw3IEBACiAJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAxLCAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB1bnN1cHBvcnRlZCBub3JtICVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVuc3VwcG9ydGVkIG5vcm0gJXhcbiIsICppYXJnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTM2NiwxOSArMzE2LDE3IEBACiAJCX0KIAogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc2V0IGlucHV0ICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJXhcbiIsICppYXJnKTsKIAotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgeworCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAKIAkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7CiAJCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwpAQCAtMzkxLDUyICszMzksNDIgQEAKIAkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAxLCAwKTsKIAkJCX0KIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgb3V0cHV0ICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICV4XG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKKwkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICV4XG4iLCAqaWFyZyk7CiAKIAkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKIAkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQotCQkJaWYgKGRlY29kZXItPmVuYWJsZSkgewotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsIDApOwotCQkJfSBlbHNlIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDE2LCA3LCAxKTsKLQkJCX0KKwkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsICFlbmFibGUpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwogCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzOiBzZXQgcGljdHVyZSBicmlnaHRuZXNzICVkIGNvbnRyYXN0ICVkIGNvbG91ciAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwKLQkJCXBpYy0+Y29sb3VyKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInNldCBwaWN0dXJlIGJyaWdodG5lc3MgJWQgY29udHJhc3QgJWQgY29sb3VyICVkXG4iLAorCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91cik7CiAKIAogCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewpAQCAtNDc0LDggKzQxMiw4IEBACiAJCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGYsCiAJCQkJICAgIDEyOCAtIChkZWNvZGVyLT5odWUgPj4gOCkpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4Niw1NSArNDI0LDQ0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19CVDgxOSA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OGEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDgxOTsKLQotc3RhdGljIGludAotYnQ4MTlfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGJ0ODE5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGksIGlkOworCWludCBpLCB2ZXI7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYnQ4MTk6IGRldGVjdGluZyBidDgxOSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOworCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9idDgxOTsKKwl2ZXIgPSBidDgxOV9yZWFkKGNsaWVudCwgMHgxNyk7CisJc3dpdGNoICh2ZXIgJiAweGYwKSB7CisJY2FzZSAweDcwOgorCQluYW1lID0gImJ0ODE5YSI7CisJCWJyZWFrOworCWNhc2UgMHg2MDoKKwkJbmFtZSA9ICJidDgxN2EiOworCQlicmVhazsKKwljYXNlIDB4MjA6CisJCW5hbWUgPSAiYnQ4MTVhIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInVua25vd24gY2hpcCB2ZXJzaW9uIDB4JTAyeFxuIiwgdmVyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4MTkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC01NDUsOTcgKzQ3MiwzMyBAQAogCWRlY29kZXItPmluaXRpYWxpemVkID0gMDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCWlkID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MTcpOwotCXN3aXRjaCAoaWQgJiAweGYwKSB7Ci0JY2FzZSAweDcwOgotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJidDgxOWEiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQlicmVhazsKLQljYXNlIDB4NjA6Ci0JCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODE3YSIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMDoKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiYnQ4MTVhIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSJidDgxOTogdW5rbm93biBjaGlwIHZlcnNpb24gMHgleCAodmVyIDB4JXgpXG4iLAotCQkJaWQgJiAweGYwLCBpZCAmIDB4MGYpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBidDgxOV9pbml0KGNsaWVudCk7Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAweCV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGlkICYgMHgwZiwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYnQ4MTlfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYnQ4MTlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYnQ4MTlfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ0ODE5X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODE5ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJ0ODE5IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4MTlfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBidDgxOV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDgxOV9pZFtdID0geworCXsgImJ0ODE5YSIsIDAgfSwKKwl7ICJidDgxN2EiLCAwIH0sCisJeyAiYnQ4MTVhIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDgxOV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1idDgxOV9pbml0X21vZHVsZSAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWJ0ODE5X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1tb2R1bGVfaW5pdChidDgxOV9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChidDgxOV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJidDgxOSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAorCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKKwkucHJvYmUgPSBidDgxOV9wcm9iZSwKKwkucmVtb3ZlID0gYnQ4MTlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJ0ODE5X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwppbmRleCBhYjJjZTRkLi40MjEzODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCkBAIC0yOSw0MyArMjksMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NTZBIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBCVDg1Nl9SRUdfT0ZGU0VUCTB4REEKQEAgLTc4LDE0ICs1OSw5IEBACiAJaW50IGVuYWJsZTsKIH07CiAKLSNkZWZpbmUgICBJMkNfQlQ4NTYgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODU2X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTkzLDQ2ICs2OSwzNiBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDg1Nl9zZXRiaXQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgYml0LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlyZXR1cm4gYnQ4NTZfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkgICAoZW5jb2Rlci0+Ci0JCQkgICAgcmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKLQkJCSAgICAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOworCQkoZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKKwkJCQkodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgdm9pZAotYnQ4NTZfZHVtcCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGJ0ODU2X2R1bXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlciBkdW1wOiIsIEkyQ19OQU1FKGNsaWVudCkpOworCXY0bF9pbmZvKGNsaWVudCwgInJlZ2lzdGVyIGR1bXA6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgQlQ4NTZfTlJfUkVHOyBpICs9IDIpCi0JCXByaW50aygiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOwotCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQKLWJ0ODU2X2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JICAgICAgIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IGJ0ODU2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJZHByaW50aygxLCBLRVJOX0lORk8gImJ0ODU2OiBpbml0XG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdFxuIik7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYSwgMCk7CiAJCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CkBAIC0xNDIsNyArMTA4LDYgQEAKIAkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNCwgMSk7CiAKIAkJc3dpdGNoIChlbmNvZGVyLT5ub3JtKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKIAkJCWJyZWFrOwpAQCAtMTYzLDI2ICsxMjgsMjMgQEAKIAl7CiAJCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGdldCBjYXBhYmlsaXRpZXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0VOQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDIHwKIAkJCSAgICAgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgbm9ybSAlZFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKIAkJCWJyZWFrOwpAQCAtMTk1LDI3ICsxNTcsMjMgQEAKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7CiAJCWlmIChkZWJ1ZyAhPSAwKQogCQkJYnQ4NTZfZHVtcChjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHNldCBpbnB1dCAlZFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogV2Ugb25seSBoYXZlIHZpZGVvIGJ1cy4KIAkJICogaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gYnQ4MTkKIAkJICogaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLwotCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKIAkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwpAQCAtMjM0LDI3ICsxOTIsMjQgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCiAJCWlmIChkZWJ1ZyAhPSAwKQogCQkJYnQ4NTZfZHVtcChjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgb3V0cHV0ICVkXG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKKwkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewpAQCAtMjYyLDEwICsyMTcsOSBAQAogCiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgZW5jb2Rlci0+ZW5hYmxlKTsKLQl9CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjc2LDY0ICsyMzAsMjkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19CVDg1NiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODU2OwotCi1zdGF0aWMgaW50Ci1idDg1Nl9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgYnQ4NTZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBidDg1NiAqZW5jb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJidDg1Ni5jOiBkZXRlY3RpbmcgYnQ4NTYgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2J0ODU2OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODU2Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODU2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWVuY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShlbmNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRjLCAweDE4KTsKIAlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwogCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CkBAIC0zNTksNjUgKzI3OCwyNiBAQAogCiAJaWYgKGRlYnVnICE9IDApCiAJCWJ0ODU2X2R1bXAoY2xpZW50KTsKLQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IGF0IGFkZHJlc3MgMHgleFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODU2X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGJ0ODU2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJidDg1Ni5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYnQ4NTZfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ0ODU2X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODU2ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJ0ODU2IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0JUODU2LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4NTZfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBidDg1Nl9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYnQ4NTZfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg1Nl9pZFtdID0geworCXsgImJ0ODU2IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDg1Nl9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1idDg1Nl9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg1Nik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotYnQ4NTZfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9idDg1Nik7Ci19Ci0KLW1vZHVsZV9pbml0KGJ0ODU2X2luaXQpOwotbW9kdWxlX2V4aXQoYnQ4NTZfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYnQ4NTYiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDg1NiwKKwkuY29tbWFuZCA9IGJ0ODU2X2NvbW1hbmQsCisJLnByb2JlID0gYnQ4NTZfcHJvYmUsCisJLnJlbW92ZSA9IGJ0ODU2X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBidDg1Nl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKaW5kZXggOTZiNDE1NS4uNTk2ZjllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtMjksNDIgKzI5LDI4IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKK01PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTg2NiB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lCUJUODY2X0RFVk5BTUUJImJ0ODY2IgotI2RlZmluZSBJMkNfQlQ4NjYJMHg4OAotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgREVCVUcoeCkJCS8qIERlYnVnIGRyaXZlciAqLworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnQ4NjYgewotCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7Ci0JaW50IGFkZHI7Ci0JdW5zaWduZWQgY2hhciByZWdbMjU2XTsKKwl1OCByZWdbMjU2XTsKIAogCWludCBub3JtOwogCWludCBlbmFibGU7CkBAIC03NCwyMCArNjAsNDUgQEAKIAlpbnQgc2F0OwogfTsKIAotc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgYnQ4NjYgKmRldiwKLQkJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKTsKLQotc3RhdGljIGludCBidDg2Nl9kb19jb21tYW5kKHN0cnVjdCBidDg2NiAqZW5jb2RlciwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggc3ViYWRkciwgdTggZGF0YSkKIHsKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCBidWZmZXJbMl07CisJaW50IGVycjsKKworCWJ1ZmZlclswXSA9IHN1YmFkZHI7CisJYnVmZmVyWzFdID0gZGF0YTsKKworCWVuY29kZXItPnJlZ1tzdWJhZGRyXSA9IGRhdGE7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0ZSAweCUwMnggPSAweCUwMnhcbiIsIHN1YmFkZHIsIGRhdGEpOworCisJZm9yIChlcnIgPSAwOyBlcnIgPCAzOykgeworCQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCAyKSA9PSAyKQorCQkJYnJlYWs7CisJCWVycisrOworCQl2NGxfd2FybihjbGllbnQsICJlcnJvciAjJWQgd3JpdGluZyB0byAweCUwMnhcbiIsCisJCQkJZXJyLCBzdWJhZGRyKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfQorCWlmIChlcnIgPT0gMykgeworCQl2NGxfd2FybihjbGllbnQsICJnaXZpbmcgdXBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJREVCVUcocHJpbnRrCi0JCSAgICAgIChLRVJOX0lORk8gIiVzOiBnZXQgY2FwYWJpbGl0aWVzXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwogCiAJCWNhcC0+ZmxhZ3MKIAkJCT0gVklERU9fRU5DT0RFUl9QQUwKQEAgLTk1LDE4ICsxMDYsMTYgQEAKIAkJCXwgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IG5vcm0gJWRcbiIsCi0JCQkgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgKmlhcmcpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlicmVhazsKIApAQCAtMTE1LDExICsxMjQsMTAgQEAKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMTU1LDcgKzE2Myw3IEBACiAJCXU4IHZhbDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0KSAvIDI7IGkgKz0gMikKLQkJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIGluaXRbaV0sIGluaXRbaSsxXSk7CisJCQlidDg2Nl93cml0ZShjbGllbnQsIGluaXRbaV0sIGluaXRbaSsxXSk7CiAKIAkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwogCkBAIC0xNjQsMTcgKzE3MiwxNiBAQAogCQllbHNlCiAJCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KIAotCQlidDg2Nl93cml0ZShlbmNvZGVyLCAweGRjLCB2YWwpOworCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7CiAKIAkJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOwogCQlpZiAoKmlhcmcgPT0gMikKIAkJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KIAkJZWxzZQogCQkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCi0JCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4Y2MsIHZhbCk7CisJCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhjYywgdmFsKTsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IGlucHV0ICVkXG4iLAotCQkJICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsICppYXJnKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAlZFxuIiwgKmlhcmcpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKIAkJY2FzZSAwOgpAQCAtMTgzLDQ4ICsxOTAsNDQgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQorCQlicmVhazsKIAl9Ci0JYnJlYWs7CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlERUJVRyhwcmludGsoS0VSTl9JTkZPICIlczogc2V0IG91dHB1dCAlZFxuIiwKLQkJCSAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCAqaWFyZykpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KIAkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQotCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7CiAKLQkJREVCVUcocHJpbnRrCi0JCSAgICAgIChLRVJOX0lORk8gIiVzOiBlbmFibGUgb3V0cHV0ICVkXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCBlbmNvZGVyLT5lbmFibGUpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAlZFxuIiwgZW5jb2Rlci0+ZW5hYmxlKTsKKwkJYnJlYWs7CiAJfQotCWJyZWFrOwogCiAJY2FzZSA0NzExOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQlfX3U4IHZhbDsKIAotCQlwcmludGsoImJ0ODY2OiBzcXVhcmUgPSAlZFxuIiwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzcXVhcmUgJWRcbiIsICppYXJnKTsKIAogCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CiAJCWlmICgqaWFyZykKIAkJCXZhbCB8PSAxOyAvKiBTUVVBUkUgKi8KIAkJZWxzZQogCQkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCi0JCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisJCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhkYywgdmFsKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzUsMTQxICsyMzgsNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIsCi0JCQl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKLQlpbnQgZXJyOworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0JYnVmZmVyWzBdID0gc3ViYWRkcjsKLQlidWZmZXJbMV0gPSBkYXRhOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLQllbmNvZGVyLT5yZWdbc3ViYWRkcl0gPSBkYXRhOwotCi0JREVCVUcocHJpbnRrCi0JICAgICAgKCIlczogd3JpdGUgMHglMDJYID0gMHglMDJYXG4iLAotCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsIHN1YmFkZHIsIGRhdGEpKTsKLQotCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKLQkJaWYgKGkyY19tYXN0ZXJfc2VuZChlbmNvZGVyLT5pMmMsIGJ1ZmZlciwgMikgPT0gMikKLQkJCWJyZWFrOwotCQllcnIrKzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkvTyBlcnJvciAjJWQgIgotCQkgICAgICAgIih3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwKLQkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgZXJyLCBlbmNvZGVyLT5hZGRyLCBzdWJhZGRyKTsKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci0JfQotCWlmIChlcnIgPT0gMykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZ2l2aW5nIHVwXG4iLAotCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJ0ODY2X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBidDg2Nl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGJ0ODY2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotCi0KLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdCT0ge0kyQ19CVDg2Nj4+MSwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IHByb2JlWzJdCQk9IHtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXQkJPSB7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0Jbm9ybWFsX2kyYywKLQlwcm9iZSwKLQlpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDg2NiA9IHsKLQkuZHJpdmVyLm5hbWUgPSBCVDg2Nl9ERVZOQU1FLAotCS5pZCA9IEkyQ19EUklWRVJJRF9CVDg2NiwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBidDg2Nl9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQgPSBidDg2Nl9kZXRhY2gsCi0JLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBidDg2Nl9jbGllbnRfdG1wbCA9Ci17Ci0JLm5hbWUgPSAiKG5pbCkiLAotCS5hZGRyID0gMCwKLQkuYWRhcHRlciA9IE5VTEwsCi0JLmRyaXZlciA9ICZpMmNfZHJpdmVyX2J0ODY2LAotfTsKLQotc3RhdGljIGludCBidDg2Nl9mb3VuZF9wcm9jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50IGJ0ODY2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGJ0ODY2ICplbmNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAmYnQ4NjZfY2xpZW50X3RtcGwsIHNpemVvZigqY2xpZW50KSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKCplbmNvZGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVuY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQlzcHJpbnRmKGNsaWVudC0+bmFtZSwgIiVzLSUwMngiLCBCVDg2Nl9ERVZOQU1FLCBhZGFwdGVyLT5pZCk7Ci0KLQllbmNvZGVyLT5pMmMgPSBjbGllbnQ7Ci0JZW5jb2Rlci0+YWRkciA9IGFkZHI7Ci0JLy9lbmNvZGVyLT5lbmNvZGVyX3R5cGUgPSBFTkNPREVSX1RZUEVfVU5LTk9XTjsKLQotCS8qIGluaXRpYWxpemUgKi8KLQotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDg2Nl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBidDg2Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpZiAoYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBidDg2Nl9mb3VuZF9wcm9jKTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJ0ODY2X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIGludCBidDg2Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXJldHVybiBidDg2Nl9kb19jb21tYW5kKGVuY29kZXIsIGNtZCwgYXJnKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg2Nl9pZFtdID0geworCXsgImJ0ODY2IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDg2Nl9pZCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGJ0ODY2X2luaXQodm9pZCkKLXsKLQlpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg2Nik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidDg2Nl9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOwotfQotCi1tb2R1bGVfaW5pdChidDg2Nl9pbml0KTsKLW1vZHVsZV9leGl0KGJ0ODY2X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImJ0ODY2IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kLAorCS5wcm9iZSA9IGJ0ODY2X3Byb2JlLAorCS5yZW1vdmUgPSBidDg2Nl9yZW1vdmUsCisJLmxlZ2FjeV9wcm9iZSA9IGJ0ODY2X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBidDg2Nl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IGMzMjVlOTIuLjE3OThiNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC0zOSwxMCArMzksNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiY3BpYS5oIgogCiBzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCmluZGV4IGZhOGJlMDcuLmE0YjE3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvZHZiL3ZpZGVvLmg+CiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCAyY2RhMTVmLi5kYWM1Y2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTM5LDE2ICszOSwxNiBAQAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTIsCiAJCQkudm11eCAgID0gMSwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMywKIAkJCS52bXV4ICAgPSAyLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEU0LAogCQkJLnZtdXggICA9IDMsCi0JCX19LAorCQl9IH0sCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxODAwbHAiLApAQCAtNTcsMTkgKzU3LDE5IEBACiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0RFQlVHLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAxLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX19LAorCQl9IH0sCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMF0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTgwMCIsCkBAIC04NCwyMCArODQsMjAgQEAKIAkJCQkJQ1gyNTg0MF9WSU41X0NIMiB8CiAJCQkJCUNYMjU4NDBfVklOMl9DSDEsCiAJCQkuZ3BpbzAgID0gMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPQlDWDI1ODQwX1ZJTjdfQ0gzIHwKIAkJCQkJQ1gyNTg0MF9WSU40X0NIMiB8CiAJCQkJCUNYMjU4NDBfVklONl9DSDEsCiAJCQkuZ3BpbzAgID0gMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9CUNYMjU4NDBfVklON19DSDMgfAogCQkJCQlDWDI1ODQwX1ZJTjRfQ0gyIHwKIAkJCQkJQ1gyNTg0MF9WSU44X0NIMSB8CiAJCQkJCUNYMjU4NDBfU1ZJREVPX09OLAogCQkJLmdwaW8wICA9IDAsCi0JCX19LAorCQl9IH0sCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MF0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTI1MCIsCkBAIC0xMDYsMTkgKzEwNiwxOSBAQAogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9ERUJVRywKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMSwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0VYUF0gPSB7CiAJCS5uYW1lCQk9ICJEVmlDTyBGdXNpb25IRFRWNSBFeHByZXNzIiwKQEAgLTE2OSw0MyArMTY5LDQzIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDM0MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX1VOS05PV04sCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NjAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzgwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3ODAxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc4MDksCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzkxMSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkNTAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4Nzc5MCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBRLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4Nzc5NywKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBRLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzcxMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzE3LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMCwKQEAgLTIyNSwxMSArMjI1LDExIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDgwMTAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZDYxOCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZGI3OCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUCwKQEAgLTI0NywyMyArMjQ3LDI1IEBACiAKIAlpZiAoMCA9PSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgogCSAgICAwID09IGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7Ci0JCXByaW50aygiJXM6IFlvdXIgYm9hcmQgaGFzIG5vIHZhbGlkIFBDSWUgU3Vic3lzdGVtIElEIGFuZCB0aHVzIGNhbid0XG4iCi0JCSAgICAgICAiJXM6IGJlIGF1dG9kZXRlY3RlZC4gIFBsZWFzZSBwYXNzIGNhcmQ9PG4+IGluc21vZCBvcHRpb24gdG9cbiIKLQkJICAgICAgICIlczogd29ya2Fyb3VuZCB0aGF0LiAgUmVkaXJlY3QgY29tcGxhaW50cyB0byB0aGUgdmVuZG9yIG9mXG4iCi0JCSAgICAgICAiJXM6IHRoZSBUViBjYXJkLiAgQmVzdCByZWdhcmRzLFxuIgorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiJXM6IEJvYXJkIGhhcyBubyB2YWxpZCBQQ0llIFN1YnN5c3RlbSBJRCBhbmQgY2FuJ3RcbiIKKwkJICAgICAgICIlczogYmUgYXV0b2RldGVjdGVkLiBQYXNzIGNhcmQ9PG4+IGluc21vZCBvcHRpb25cbiIKKwkJICAgICAgICIlczogdG8gd29ya2Fyb3VuZCB0aGF0LiBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZVxuIgorCQkgICAgICAgIiVzOiB2ZW5kb3Igb2YgdGhlIFRWIGNhcmQuICBCZXN0IHJlZ2FyZHMsXG4iCiAJCSAgICAgICAiJXM6ICAgICAgICAgLS0gdHV4XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOwogCX0gZWxzZSB7Ci0JCXByaW50aygiJXM6IFlvdXIgYm9hcmQgaXNuJ3Qga25vd24gKHlldCkgdG8gdGhlIGRyaXZlci4gIFlvdSBjYW5cbiIKLQkJICAgICAgICIlczogdHJ5IHRvIHBpY2sgb25lIG9mIHRoZSBleGlzdGluZyBjYXJkIGNvbmZpZ3MgdmlhXG4iCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlczogWW91ciBib2FyZCBpc24ndCBrbm93biAoeWV0KSB0byB0aGUgZHJpdmVyLlxuIgorCQkgICAgICAgIiVzOiBUcnkgdG8gcGljayBvbmUgb2YgdGhlIGV4aXN0aW5nIGNhcmQgY29uZmlncyB2aWFcbiIKIAkJICAgICAgICIlczogY2FyZD08bj4gaW5zbW9kIG9wdGlvbi4gIFVwZGF0aW5nIHRvIHRoZSBsYXRlc3RcbiIKIAkJICAgICAgICIlczogdmVyc2lvbiBtaWdodCBoZWxwIGFzIHdlbGwuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lKTsKIAl9Ci0JcHJpbnRrKCIlczogSGVyZSBpcyBhIGxpc3Qgb2YgdmFsaWQgY2hvaWNlcyBmb3IgdGhlIGNhcmQ9PG4+IGluc21vZCBvcHRpb246XG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCiAJICAgICAgIGRldi0+bmFtZSk7CiAJZm9yIChpID0gMDsgaSA8IGN4MjM4ODVfYmNvdW50OyBpKyspCi0JCXByaW50aygiJXM6ICAgIGNhcmQ9JWQgLT4gJXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBpLCBjeDIzODg1X2JvYXJkc1tpXS5uYW1lKTsKIH0KIApAQCAtMjcxLDExICsyNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKLQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgJnR2LCBlZXByb21fZGF0YSk7CisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsICZ0diwKKwkJZWVwcm9tX2RhdGEpOwogCiAJLyogTWFrZSBzdXJlIHdlIHN1cHBvcnQgdGhlIGJvYXJkIG1vZGVsICovCi0Jc3dpdGNoICh0di5tb2RlbCkKLQl7CisJc3dpdGNoICh0di5tb2RlbCkgewogCWNhc2UgNzEwMDk6CiAJCS8qIFdpblRWLUhWUjEyMDAgKFBDSWUsIFJldGFpbCwgZnVsbCBoZWlnaHQpCiAJCSAqIERWQi1UIGFuZCBiYXNpYyBhbmFsb2cgKi8KQEAgLTMwMywyMSArMzA1LDUxIEBACiAJY2FzZSA3MTk5OToKIAkJLyogV2luVFYtSFZSMTIwMCAoUENJZSwgT0VNLCBmdWxsIGhlaWdodCkKIAkJICogRFZCLVQgYW5kIGJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzY2MDE6IC8qIFdpblRWLUhWUjE4MDBscCAoUENJZSwgUmV0YWlsLCBObyBJUiwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc3MDAxOiAvKiBXaW5UVi1IVlIxNTAwIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzcwMTE6IC8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzA0MTogLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzcwNTE6IC8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIFJldGFpbCwgTm8gSVIsIEFUU0MvUUFNIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc4MDExOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBSZXRhaWwsIDMuNW1tIGluLCBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODUwMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NTIxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg1MzE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODYzMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBObyBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3OTAwMTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzkxMDE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5NTYxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTU3MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzk2NzE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc2NjAxOgorCQkvKiBXaW5UVi1IVlIxODAwbHAgKFBDSWUsIFJldGFpbCwgTm8gSVIsIER1YWwKKwkJCWNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzcwMDE6CisJCS8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQworCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzcwMTE6CisJCS8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQworCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzcwNDE6CisJCS8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MvUUFNCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzA1MToKKwkJLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQy9RQU0KKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc4MDExOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBSZXRhaWwsIDMuNW1tIGluLCBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MDE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MjE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MzE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg2MzE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgTm8gSVIsIE5vIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc5MDAxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBmdWxsIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzkxMDE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGhhbGYgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTU2MToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NTcxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBmdWxsIGhlaWdodCwKKwkJIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk2NzE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCiAJY2FzZSA4MDAxOToKIAkJLyogV2luVFYtSFZSMTQwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIElSLAogCQkgKiBEVkItVCBhbmQgQmFzaWMgYW5hbG9nICovCkBAIC0zMjksNyArMzYxLDggQEAKIAkJICogRFZCLVQgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogd2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLCBkZXYtPm5hbWUsIHR2Lm1vZGVsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKKwkJCWRldi0+bmFtZSwgdHYubW9kZWwpOwogCQlicmVhazsKIAl9CiAKQEAgLTM1Miw3ICszODUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2goZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKQEAgLTM4Myw3ICs0MTYsNyBAQAogCiB2b2lkIGN4MjM4ODVfZ3Bpb19zZXR1cChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKLQlzd2l0Y2goZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAkJLyogR1BJTy0wIGN4MjQyMjcgZGVtb2R1bGF0b3IgcmVzZXQgKi8KIAkJY3hfc2V0KEdQMF9JTywgMHgwMDAxMDAwMSk7IC8qIEJyaW5nIHRoZSBwYXJ0IG91dCBvZiByZXNldCAqLwpAQCAtNjE3LDEwICs2NTAsMyBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCBiZWIzZTYxLi44ZjZmYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC0zNywxMiArMzcsMTIgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZyxpbnQsMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYXJkW10gID0ge1swIC4uLiAoQ1gyMzg4NV9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OwogbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsICBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJjYXJkIHR5cGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZCwgImNhcmQgdHlwZSIpOwogCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKIAlkbyB7IGlmIChkZWJ1ZyA+PSBsZXZlbClcCkBAIC0zNjQsMTMgKzM2NCwxMiBAQAogCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CiAJfQotCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpCiAJCWRlbF90aW1lcigmcS0+dGltZW91dCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQl9CiAJaWYgKGJjICE9IDEpCi0JCXByaW50aygiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgYmMpOwogfQogCkBAIC0zODEsOCArMzgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaSwgbGluZXM7CiAJdTMyIGNkdDsKIAotCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKQotCXsKKwlpZiAoY2gtPmNtZHNfc3RhcnQgPT0gMCkgewogCQlkcHJpbnRrKDEsICIlcygpIEVyYXNpbmcgY2hhbm5lbCBbJXNdXG4iLCBfX2Z1bmNfXywKIAkJCWNoLT5uYW1lKTsKIAkJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCAwKTsKQEAgLTQxOCwxNSArNDE2LDE1IEBACiAKIAkvKiB3cml0ZSBDTURTICovCiAJaWYgKGNoLT5qdW1wb25seSkKLQkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgMCwgOCk7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgOCk7CiAJZWxzZQotCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArICAwLCByaXNjKTsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCByaXNjKTsKIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArICA0LCAwKTsgLyogNjQgYml0cyA2My0zMiAqLwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDgsIGNkdCk7CiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxMiwgKGxpbmVzKjE2KSA+PiAzKTsKIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDE2LCBjaC0+Y3RybF9zdGFydCk7CiAJaWYgKGNoLT5qdW1wb25seSkKLQkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgMHg4MDAwMDAwMCB8ICg2NCA+PiAyKSApOworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCAweDgwMDAwMDAwIHwgKDY0ID4+IDIpKTsKIAllbHNlCiAJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDY0ID4+IDIpOwogCWZvciAoaSA9IDI0OyBpIDwgODA7IGkgKz0gNCkKQEAgLTQzNiw5ICs0MzQsOSBAQAogCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgY2gtPmZpZm9fc3RhcnQpOwogCWN4X3dyaXRlKGNoLT5wdHIyX3JlZywgY2R0KTsKIAljeF93cml0ZShjaC0+Y250Ml9yZWcsIChsaW5lcyoxNikgPj4gMyk7Ci0JY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0xKTsKKwljeF93cml0ZShjaC0+Y250MV9yZWcsIChicGwgPj4gMykgLSAxKTsKIAotCWRwcmludGsoMiwiW2JyaWRnZSAlZF0gc3JhbSBzZXR1cCAlczogYnBsPSVkIGxpbmVzPSVkXG4iLAorCWRwcmludGsoMiwgIlticmlkZ2UgJWRdIHNyYW0gc2V0dXAgJXM6IGJwbD0lZCBsaW5lcz0lZFxuIiwKIAkJZGV2LT5icmlkZ2UsCiAJCWNoLT5uYW1lLAogCQlicGwsCkBAIC00NjksNDMgKzQ2Nyw0MyBAQAogCXUzMiByaXNjOwogCXVuc2lnbmVkIGludCBpLCBqLCBuOwogCi0JcHJpbnRrKCIlczogJXMgLSBkbWEgY2hhbm5lbCBzdGF0dXMgZHVtcFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgLSBkbWEgY2hhbm5lbCBzdGF0dXMgZHVtcFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjaC0+bmFtZSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFtZSk7IGkrKykKLQkJcHJpbnRrKCIlczogICBjbWRzOiAlLTE1czogMHglMDh4XG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBjbWRzOiAlLTE1czogMHglMDh4XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBuYW1lW2ldLAogCQkgICAgICAgY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDQqaSkpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlyaXNjID0gY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDQgKiAoaSArIDE0KSk7Ci0JCXByaW50aygiJXM6ICAgcmlzYyVkOiAiLCBkZXYtPm5hbWUsIGkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICByaXNjJWQ6ICIsIGRldi0+bmFtZSwgaSk7CiAJCWN4MjM4ODVfcmlzY19kZWNvZGUocmlzYyk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCAoNjQgPj4gMik7IGkgKz0gbikgewogCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiBpKTsKIAkJLyogTm8gY29uc2lkZXJhdGlvbiBmb3IgYml0cyA2My0zMiAqLwogCi0JCXByaW50aygiJXM6ICAgKDB4JTA4eCkgaXEgJXg6ICIsIGRldi0+bmFtZSwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgKDB4JTA4eCkgaXEgJXg6ICIsIGRldi0+bmFtZSwKIAkJICAgICAgIGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGksIGkpOwogCQluID0gY3gyMzg4NV9yaXNjX2RlY29kZShyaXNjKTsKIAkJZm9yIChqID0gMTsgaiA8IG47IGorKykgewogCQkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogKGkgKyBqKSk7Ci0JCQlwcmludGsoIiVzOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgaStqLCByaXNjLCBqKTsKIAkJfQogCX0KIAotCXByaW50aygiJXM6IGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaWZvOiAweCUwOHggLT4gMHgleFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQrY2gtPmZpZm9fc2l6ZSk7Ci0JcHJpbnRrKCIlczogY3RybDogMHglMDh4IC0+IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGN0cmw6IDB4JTA4eCAtPiAweCV4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGNoLT5jdHJsX3N0YXJ0LCBjaC0+Y3RybF9zdGFydCArIDYqMTYpOwotCXByaW50aygiJXM6ICAgcHRyMV9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBwdHIxX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPnB0cjFfcmVnKSk7Ci0JcHJpbnRrKCIlczogICBwdHIyX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+cHRyMl9yZWcpKTsKLQlwcmludGsoIiVzOiAgIGNudDFfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5jbnQxX3JlZykpOwotCXByaW50aygiJXM6ICAgY250Ml9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBjbnQyX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPmNudDJfcmVnKSk7CiB9CiAKQEAgLTUxNSwxMyArNTEzLDEzIEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAJdW5zaWduZWQgaW50IGksIGosIG47CiAKLQlwcmludGsoIiVzOiByaXNjIGRpc2FzbTogJXAgW2RtYT0weCUwOGx4XVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmlzYyBkaXNhc206ICVwIFtkbWE9MHglMDhseF1cbiIsCiAJICAgICAgIGRldi0+bmFtZSwgcmlzYy0+Y3B1LCAodW5zaWduZWQgbG9uZylyaXNjLT5kbWEpOwogCWZvciAoaSA9IDA7IGkgPCAocmlzYy0+c2l6ZSA+PiAyKTsgaSArPSBuKSB7Ci0JCXByaW50aygiJXM6ICAgJTA0ZDogIiwgZGV2LT5uYW1lLCBpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgJTA0ZDogIiwgZGV2LT5uYW1lLCBpKTsKIAkJbiA9IGN4MjM4ODVfcmlzY19kZWNvZGUobGUzMl90b19jcHUocmlzYy0+Y3B1W2ldKSk7CiAJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspCi0JCQlwcmludGsoIiVzOiAgICUwNGQ6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICUwNGQ6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGkgKyBqLCByaXNjLT5jcHVbaSArIGpdLCBqKTsKIAkJaWYgKHJpc2MtPmNwdVtpXSA9PSBjcHVfdG9fbGUzMihSSVNDX0pVTVApKQogCQkJYnJlYWs7CkBAIC02MDAsNyArNTk4LDcgQEAKIAkgKiB3aGVuIERNQSBiZWdpbnMgaWYgUkRSX1RMQ1RMMCBiaXQ0IGlzIG5vdCBjbGVhcmVkLiBJdCBkb2VzIG5vdAogCSAqIG9jY3VyIG9uIHRoZSBjeDIzODg3IGJyaWRnZS4KIAkgKi8KLQlpZihkZXYtPmJyaWRnZSA9PSBDWDIzODg1X0JSSURHRV84ODUpCisJaWYgKGRldi0+YnJpZGdlID09IENYMjM4ODVfQlJJREdFXzg4NSkKIAkJY3hfY2xlYXIoUkRSX1RMQ1RMMCwgMSA8PCA0KTsKIAogCXJldHVybiAwOwpAQCAtNjA4LDEzICs2MDYsMTMgQEAKIAogc3RhdGljIGludCBnZXRfcmVzb3VyY2VzKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewotCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLDApLAotCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksMCksCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApLAogCQkJICAgICAgIGRldi0+bmFtZSkpCiAJCXJldHVybiAwOwogCiAJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IE1NSU8gbWVtb3J5IEAgMHglbGx4XG4iLAotCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLDApKTsKKwkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCkpOwogCiAJcmV0dXJuIC1FQlVTWTsKIH0KQEAgLTYyMyw3ICs2MjEsOCBAQAogaW50IGN4MjM4ODVfcmlzY19zdG9wcGVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCiAJCQkJdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CiAKLXN0YXRpYyBpbnQgY3gyMzg4NV9pbml0X3RzcG9ydChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0LCBpbnQgcG9ydG5vKQorc3RhdGljIGludCBjeDIzODg1X2luaXRfdHNwb3J0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCwgaW50IHBvcnRubykKIHsKIAlkcHJpbnRrKDEsICIlcyhwb3J0bm89JWQpXG4iLCBfX2Z1bmNfXywgcG9ydG5vKTsKIApAQCAtNjQzLDcgKzY0MiwxOCBAQAogCXBvcnQtPm1wZWdxLnRpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBvcnQ7CiAJaW5pdF90aW1lcigmcG9ydC0+bXBlZ3EudGltZW91dCk7CiAKLQlzd2l0Y2gocG9ydG5vKSB7CisJbXV0ZXhfaW5pdCgmcG9ydC0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5mcm9udGVuZHMuZmVsaXN0KTsKKwlwb3J0LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gMDsKKworCS8qIFRoaXMgc2hvdWxkIGJlIGhhcmRjb2RlZCBhbGxvdyBhIHNpbmdsZSBmcm9udGVuZAorCSAqIGF0dGFjaG1lbnQgdG8gdGhpcyB0c3BvcnQsIGtlZXBpbmcgdGhlIC1kdmIuYworCSAqIGNvZGUgY2xlYW4gYW5kIHNhZmUuCisJICovCisJaWYgKCFwb3J0LT5udW1fZnJvbnRlbmRzKQorCQlwb3J0LT5udW1fZnJvbnRlbmRzID0gMTsKKworCXN3aXRjaCAocG9ydG5vKSB7CiAJY2FzZSAxOgogCQlwb3J0LT5yZWdfZ3BjbnQgICAgICAgICAgPSBWSURfQl9HUENOVDsKIAkJcG9ydC0+cmVnX2dwY250X2N0bCAgICAgID0gVklEX0JfR1BDTlRfQ1RMOwpAQCAtNzQ0LDEzICs3NTQsMTMgQEAKIAltdXRleF91bmxvY2soJmRldmxpc3QpOwogCiAJLyogQ29uZmlndXJlIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KLQlpZihkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg4MCkgeworCWlmIChkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg4MCkgewogCQlkZXYtPmJyaWRnZSA9IENYMjM4ODVfQlJJREdFXzg4NzsKIAkJLyogQXBwbHkgYSBzZW5zaWJsZSBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBQQ0llIGJyaWRnZSAqLwogCQlkZXYtPmNsa19mcmVxID0gMjUwMDAwMDA7CiAJCWRldi0+c3JhbV9jaGFubmVscyA9IGN4MjM4ODdfc3JhbV9jaGFubmVsczsKIAl9IGVsc2UKLQlpZihkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg1MikgeworCWlmIChkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg1MikgewogCQlkZXYtPmJyaWRnZSA9IENYMjM4ODVfQlJJREdFXzg4NTsKIAkJLyogQXBwbHkgYSBzZW5zaWJsZSBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBQQ0llIGJyaWRnZSAqLwogCQlkZXYtPmNsa19mcmVxID0gMjgwMDAwMDA7CkBAIC04MzEsOCArODQxLDggQEAKIAl9CiAKIAkvKiBQQ0llIHN0dWZmICovCi0JZGV2LT5sbW1pbyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLDApLAotCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLDApKTsKKwlkZXYtPmxtbWlvID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CiAKIAlkZXYtPmJtbWlvID0gKHU4IF9faW9tZW0gKilkZXYtPmxtbWlvOwogCkBAIC04NjIsNyArODcyLDcgQEAKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKIAljeDIzODg1X2NhcmRfc2V0dXAoZGV2KTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMgKCZkZXYtPmkyY19idXNbMF0sIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwogCWN4MjM4ODVfaXJfaW5pdChkZXYpOwogCiAJaWYgKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRhID09IENYMjM4ODVfQU5BTE9HX1ZJREVPKSB7CkBAIC05MDgsOCArOTE4LDggQEAKIAogc3RhdGljIHZvaWQgY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKLQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLDApLAotCQkJICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwwKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CiAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cmVmY291bnQpKQogCQlyZXR1cm47CkBAIC05MzYsNyArOTQ2LDcgQEAKIAlpb3VubWFwKGRldi0+bG1taW8pOwogfQogCi1zdGF0aWMgX19sZTMyKiBjeDIzODg1X3Jpc2NfZmllbGQoX19sZTMyICpycCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCitzdGF0aWMgX19sZTMyICpjeDIzODg1X3Jpc2NfZmllbGQoX19sZTMyICpycCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHN5bmNfbGluZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnBsLCB1bnNpZ25lZCBpbnQgcGFkZGluZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGluZXMpCkBAIC05NTcsMzEgKzk2NywzMSBAQAogCQl9CiAJCWlmIChicGwgPD0gc2dfZG1hX2xlbihzZyktb2Zmc2V0KSB7CiAJCQkvKiBmaXRzIGludG8gY3VycmVudCBjaHVuayAqLwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfFJJU0NfRU9MfGJwbCk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwotCQkJb2Zmc2V0Kz1icGw7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHxSSVNDX0VPTHxicGwpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCisJCQlvZmZzZXQgKz0gYnBsOwogCQl9IGVsc2UgewogCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXQgKi8KIAkJCXRvZG8gPSBicGw7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHwKIAkJCQkJICAgIChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCXRvZG8gLT0gKHNnX2RtYV9sZW4oc2cpLW9mZnNldCk7CiAJCQlvZmZzZXQgPSAwOwogCQkJc2crKzsKIAkJCXdoaWxlICh0b2RvID4gc2dfZG1hX2xlbihzZykpIHsKLQkJCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8CiAJCQkJCQkgICAgc2dfZG1hX2xlbihzZykpOwotCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKLQkJCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQkJdG9kbyAtPSBzZ19kbWFfbGVuKHNnKTsKIAkJCQlzZysrOwogCQkJfQotCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfRU9MfHRvZG8pOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19FT0x8dG9kbyk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCQkJb2Zmc2V0ICs9IHRvZG87CiAJCX0KIAkJb2Zmc2V0ICs9IHBhZGRpbmc7CkBAIC0xMDEwLDkgKzEwMjAsMTEgQEAKIAkgICBjYW4gY2F1c2UgbmV4dCBicGwgdG8gc3RhcnQgY2xvc2UgdG8gYSBwYWdlIGJvcmRlci4gIEZpcnN0IERNQQogCSAgIHJlZ2lvbiBtYXkgYmUgc21hbGxlciB0aGFuIFBBR0VfU0laRSAqLwogCS8qIHdyaXRlIGFuZCBqdW1wIG5lZWQgYW5kIGV4dHJhIGR3b3JkICovCi0JaW5zdHJ1Y3Rpb25zICA9IGZpZWxkcyAqICgxICsgKChicGwgKyBwYWRkaW5nKSAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzKTsKKwlpbnN0cnVjdGlvbnMgID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpCisJCS8gUEFHRV9TSVpFICsgbGluZXMpOwogCWluc3RydWN0aW9ucyArPSAyOwotCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjEyKSkgPCAwKQorCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgaW5zdHJ1Y3Rpb25zKjEyKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLwpAQCAtMTAyNiw3ICsxMDM4LDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YgKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQ4LDcgKzEwNjAsOCBAQAogCWluc3RydWN0aW9ucyAgPSAxICsgKGJwbCAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzOwogCWluc3RydWN0aW9ucyArPSAxOwogCi0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2kscmlzYyxpbnN0cnVjdGlvbnMqMTIpKSA8IDApCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCBpbnN0cnVjdGlvbnMqMTIpOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCkBAIC0xMDU3LDcgKzEwNzAsNyBAQAogCiAJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCiAJcmlzYy0+am1wID0gcnA7Ci0JQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZiAoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKKwlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNjcsNyArMTA4MCw4IEBACiAJX19sZTMyICpycDsKIAlpbnQgcmM7CiAKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgNCoxNikpIDwgMCkKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIDQqMTYpOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCkBAIC0xMTYxLDIyICsxMTc1LDIzIEBACiAKIAkvKiBzZXR1cCBmaWZvICsgZm9ybWF0ICovCiAJY3gyMzg4NV9zcmFtX2NoYW5uZWxfc2V0dXAoZGV2LAotCQkJCSAgICZkZXYtPnNyYW1fY2hhbm5lbHNbIHBvcnQtPnNyYW1fY2hubyBdLAorCQkJCSAgICZkZXYtPnNyYW1fY2hhbm5lbHNbcG9ydC0+c3JhbV9jaG5vXSwKIAkJCQkgICBwb3J0LT50c19wYWNrZXRfc2l6ZSwgYnVmLT5yaXNjLmRtYSk7Ci0JaWYoZGVidWcgPiA1KSB7Ci0JCWN4MjM4ODVfc3JhbV9jaGFubmVsX2R1bXAoZGV2LCAmZGV2LT5zcmFtX2NoYW5uZWxzWyBwb3J0LT5zcmFtX2Nobm8gXSApOworCWlmIChkZWJ1ZyA+IDUpIHsKKwkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsCisJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW3BvcnQtPnNyYW1fY2hub10pOwogCQljeDIzODg1X3Jpc2NfZGlzYXNtKHBvcnQsICZidWYtPnJpc2MpOwogCX0KIAogCS8qIHdyaXRlIFRTIGxlbmd0aCB0byBjaGlwICovCiAJY3hfd3JpdGUocG9ydC0+cmVnX2xuZ3RoLCBidWYtPnZiLndpZHRoKTsKIAotCWlmICggKCEoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgJiBDWDIzODg1X01QRUdfRFZCKSkgJiYKLQkJKCEoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMgJiBDWDIzODg1X01QRUdfRFZCKSkgKSB7Ci0JCXByaW50ayggIiVzKCkgRmFpbGVkLiBVbnN1cHBvcnRlZCB2YWx1ZSBpbiAucG9ydGIvYyAoMHglMDh4KS8oMHglMDh4KVxuIiwKKwlpZiAoKCEoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgJiBDWDIzODg1X01QRUdfRFZCKSkgJiYKKwkJKCEoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMgJiBDWDIzODg1X01QRUdfRFZCKSkpIHsKKwkJcHJpbnRrKCIlcygpIFVuc3VwcG9ydGVkIC5wb3J0Yi9jICgweCUwOHgpLygweCUwOHgpXG4iLAogCQkJX19mdW5jX18sCiAJCQljeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiwKLQkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjICk7CisJCQljeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTE4Niw3ICsxMjAxLDcgQEAKIAl1ZGVsYXkoMTAwKTsKIAogCS8qIElmIHRoZSBwb3J0IHN1cHBvcnRzIFNSQyBTRUxFQ1QsIGNvbmZpZ3VyZSBpdCAqLwotCWlmKHBvcnQtPnJlZ19zcmNfc2VsKQorCWlmIChwb3J0LT5yZWdfc3JjX3NlbCkKIAkJY3hfd3JpdGUocG9ydC0+cmVnX3NyY19zZWwsIHBvcnQtPnNyY19zZWxfdmFsKTsKIAogCWN4X3dyaXRlKHBvcnQtPnJlZ19od19zb3BfY3RybCwgcG9ydC0+aHdfc29wX2N0cmxfdmFsKTsKQEAgLTExOTUsNyArMTIxMCw3IEBACiAJY3hfd3JpdGUocG9ydC0+cmVnX2dlbl9jdHJsLCBwb3J0LT5nZW5fY3RybF92YWwpOwogCXVkZWxheSgxMDApOwogCi0JLy8gTk9URTogdGhpcyBpcyAyIChyZXNlcnZlZCkgZm9yIHBvcnRiLCBkb2VzIGl0IG1hdHRlcj8KKwkvKiBOT1RFOiB0aGlzIGlzIDIgKHJlc2VydmVkKSBmb3IgcG9ydGIsIGRvZXMgaXQgbWF0dGVyPyAqLwogCS8qIHJlc2V0IGNvdW50ZXIgdG8gemVybyAqLwogCWN4X3dyaXRlKHBvcnQtPnJlZ19ncGNudF9jdGwsIDMpOwogCXEtPmNvdW50ID0gMTsKQEAgLTEyMjksMTEgKzEyNDQsMTEgQEAKIAkJY3hfd3JpdGUoQUxUX1BJTl9PVVRfU0VMLCAweDEwMTAwMDQ1KTsKIAl9CiAKLQlzd2l0Y2goZGV2LT5icmlkZ2UpIHsKKwlzd2l0Y2ggKGRldi0+YnJpZGdlKSB7CiAJY2FzZSBDWDIzODg1X0JSSURHRV84ODU6CiAJY2FzZSBDWDIzODg1X0JSSURHRV84ODc6CiAJCS8qIGVuYWJsZSBpcnFzICovCi0JCWRwcmludGsoMSwgIiVzKCkgZW5hYmxpbmcgVFMgaW50J3MgYW5kIERNQVxuIiwgX19mdW5jX18gKTsKKwkJZHByaW50aygxLCAiJXMoKSBlbmFibGluZyBUUyBpbnQncyBhbmQgRE1BXG4iLCBfX2Z1bmNfXyk7CiAJCWN4X3NldChwb3J0LT5yZWdfdHNfaW50X21zaywgIHBvcnQtPnRzX2ludF9tc2tfdmFsKTsKIAkJY3hfc2V0KHBvcnQtPnJlZ19kbWFfY3RsLCBwb3J0LT5kbWFfY3RsX3ZhbCk7CiAJCWN4X3NldChQQ0lfSU5UX01TSywgZGV2LT5wY2lfaXJxbWFzayB8IHBvcnQtPnBjaV9pcnFtYXNrKTsKQEAgLTEyOTIsOCArMTMwNyw3IEBACiAJc3RydWN0IGN4MjM4ODVfYnVmZmVyICpidWY7CiAKIAlkcHJpbnRrKDUsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpCi0JeworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CiAJCXN0cnVjdCBjeDIzODg1X2J1ZmZlciAqcHJldjsKIAkJcHJldiA9IE5VTEw7CiAKQEAgLTEzMTEsNyArMTMyNSw3IEBACiAJCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJCQlidWYtPmNvdW50ICAgID0gcS0+Y291bnQrKzsKIAkJCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwotCQkJCWRwcmludGsoNSwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIGZpcnN0IGFjdGl2ZVxuIiwKKwkJCQlkcHJpbnRrKDUsICJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBmL2FjdGl2ZVxuIiwKIAkJCQkJYnVmLCBidWYtPnZiLmkpOwogCiAJCQl9IGVsc2UgaWYgKHByZXYtPnZiLndpZHRoICA9PSBidWYtPnZiLndpZHRoICAmJgpAQCAtMTMyMiw4ICsxMzM2LDkgQEAKIAkJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwogCQkJCWJ1Zi0+Y291bnQgICAgPSBxLT5jb3VudCsrOwogCQkJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7Ci0JCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsgLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KLQkJCQlkcHJpbnRrKDUsIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIG1vdmUgdG8gYWN0aXZlXG4iLAorCQkJCS8qIDY0IGJpdCBiaXRzIDYzLTMyICovCisJCQkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsKKwkJCQlkcHJpbnRrKDUsICJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBtL2FjdGl2ZVxuIiwKIAkJCQkJYnVmLCBidWYtPnZiLmkpOwogCQkJfSBlbHNlIHsKIAkJCQlyZXR1cm4gMDsKQEAgLTEzNjIsNyArMTM3Nyw4IEBACiAJCWJ1Zi0+dmIuc2l6ZSAgID0gc2l6ZTsKIAkJYnVmLT52Yi5maWVsZCAgPSBmaWVsZCAvKlY0TDJfRklFTERfVE9QKi87CiAKLQkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKSkpCisJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKTsKKwkJaWYgKDAgIT0gcmMpCiAJCQlnb3RvIGZhaWw7CiAJCWN4MjM4ODVfcmlzY19kYXRhYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAogCQkJCQl2aWRlb2J1Zl90b19kbWEoJmJ1Zi0+dmIpLT5zZ2xpc3QsCkBAIC0xMzg4LDcgKzE0MDQsNyBAQAogCWJ1Zi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCiAJaWYgKGxpc3RfZW1wdHkoJmN4ODhxLT5hY3RpdmUpKSB7Ci0JCWRwcmludGsoIDEsICJxdWV1ZSBpcyBlbXB0eSAtIGZpcnN0IGFjdGl2ZVxuIiApOworCQlkcHJpbnRrKDEsICJxdWV1ZSBpcyBlbXB0eSAtIGZpcnN0IGFjdGl2ZVxuIik7CiAJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZjeDg4cS0+YWN0aXZlKTsKIAkJY3gyMzg4NV9zdGFydF9kbWEocG9ydCwgY3g4OHEsIGJ1Zik7CiAJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CkBAIC0xMzk3LDcgKzE0MTMsNyBAQAogCQlkcHJpbnRrKDEsICJbJXAvJWRdICVzIC0gZmlyc3QgYWN0aXZlXG4iLAogCQkJYnVmLCBidWYtPnZiLmksIF9fZnVuY19fKTsKIAl9IGVsc2UgewotCQlkcHJpbnRrKCAxLCAicXVldWUgaXMgbm90IGVtcHR5IC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiApOworCQlkcHJpbnRrKDEsICJxdWV1ZSBpcyBub3QgZW1wdHkgLSBhcHBlbmQgdG8gYWN0aXZlXG4iKTsKIAkJcHJldiA9IGxpc3RfZW50cnkoY3g4OHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3gyMzg4NV9idWZmZXIsCiAJCQkJICB2Yi5xdWV1ZSk7CiAJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZjeDg4cS0+YWN0aXZlKTsKQEAgLTE0MDUsNyArMTQyMSw3IEBACiAJCWJ1Zi0+Y291bnQgICAgPSBjeDg4cS0+Y291bnQrKzsKIAkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKIAkJcHJldi0+cmlzYy5qbXBbMl0gPSBjcHVfdG9fbGUzMigwKTsgLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KLQkJZHByaW50ayggMSwgIlslcC8lZF0gJXMgLSBhcHBlbmQgdG8gYWN0aXZlXG4iLAorCQlkcHJpbnRrKDEsICJbJXAvJWRdICVzIC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiwKIAkJCSBidWYsIGJ1Zi0+dmIuaSwgX19mdW5jX18pOwogCX0KIH0KQEAgLTE0MzEsNyArMTQ0Nyw3IEBACiAJCQlidWYsIGJ1Zi0+dmIuaSwgcmVhc29uLCAodW5zaWduZWQgbG9uZylidWYtPnJpc2MuZG1hKTsKIAl9CiAJaWYgKHJlc3RhcnQpIHsKLQkJZHByaW50aygxLCAicmVzdGFydGluZyBxdWV1ZVxuIiApOworCQlkcHJpbnRrKDEsICJyZXN0YXJ0aW5nIHF1ZXVlXG4iKTsKIAkJY3gyMzg4NV9yZXN0YXJ0X3F1ZXVlKHBvcnQsIHEpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOwpAQCAtMTQ1MywxMCArMTQ2OSwxMSBAQAogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKilkYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCi0JZHByaW50aygxLCAiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaWYgKGRlYnVnID4gNSkKLQkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbIHBvcnQtPnNyYW1fY2hubyBdKTsKKwkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsCisJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW3BvcnQtPnNyYW1fY2hub10pOwogCiAJY3gyMzg4NV9zdG9wX2RtYShwb3J0KTsKIAlkb19jYW5jZWxfYnVmZmVycyhwb3J0LCAidGltZW91dCIsIDEpOwpAQCAtMTUzMiwxNiArMTU0OSwyMyBAQAogCWlmICgoc3RhdHVzICYgVklEX0JDX01TS19PUENfRVJSKSB8fAogCQkoc3RhdHVzICYgVklEX0JDX01TS19CQURfUEtUKSB8fAogCQkoc3RhdHVzICYgVklEX0JDX01TS19TWU5DKSB8fAotCQkoc3RhdHVzICYgVklEX0JDX01TS19PRikpCi0JeworCQkoc3RhdHVzICYgVklEX0JDX01TS19PRikpIHsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19PUENfRVJSKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09QQ19FUlIgMHglMDh4KVxuIiwgVklEX0JDX01TS19PUENfRVJSKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PUENfRVJSIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19PUENfRVJSKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19CQURfUEtUKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX0JBRF9QS1QgMHglMDh4KVxuIiwgVklEX0JDX01TS19CQURfUEtUKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19CQURfUEtUIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19CQURfUEtUKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19TWU5DKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX1NZTkMgICAgMHglMDh4KVxuIiwgVklEX0JDX01TS19TWU5DKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19TWU5DICAgIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19TWU5DKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19PRikKLQkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PRiAgICAgIDB4JTA4eClcbiIsIFZJRF9CQ19NU0tfT0YpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09GICAgICAgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX09GKTsKIAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtcGVnIHJpc2Mgb3AgY29kZSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIApAQCAtMTU5NSw3ICsxNjE5LDcgQEAKIAl0czJfc3RhdHVzID0gY3hfcmVhZChWSURfQ19JTlRfU1RBVCk7CiAJdHMyX21hc2sgPSBjeF9yZWFkKFZJRF9DX0lOVF9NU0spOwogCi0JaWYgKCAocGNpX3N0YXR1cyA9PSAwKSAmJiAodHMyX3N0YXR1cyA9PSAwKSAmJiAodHMxX3N0YXR1cyA9PSAwKSApCisJaWYgKChwY2lfc3RhdHVzID09IDApICYmICh0czJfc3RhdHVzID09IDApICYmICh0czFfc3RhdHVzID09IDApKQogCQlnb3RvIG91dDsKIAogCXZpZGFfY291bnQgPSBjeF9yZWFkKFZJRF9BX0dQQ05UKTsKQEAgLTE2MTAsMzggKzE2MzQsNTYgQEAKIAlkcHJpbnRrKDcsICJ0czJfc3RhdHVzOiAweCUwOHggIHRzMl9tYXNrOiAweCUwOHggY291bnQ6IDB4JXhcbiIsCiAJCXRzMl9zdGF0dXMsIHRzMl9tYXNrLCB0czJfY291bnQpOwogCi0JaWYgKCAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1dSKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1JEKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FQQl9ETUEpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKSApCi0JeworCWlmICgocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9SRCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9DKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQSkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9JTlQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKSkgewogCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1JJU0NfUkQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfUklTQ19SRCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19XUiAgIDB4JTA4eClcbiIsIFBDSV9NU0tfUklTQ19XUik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19XUiAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19SSVNDX1dSKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfUkQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfUkQgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQUxfUkQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1JEICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQUxfUkQpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9XUikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9XUiAgICAgMHglMDh4KVxuIiwgUENJX01TS19BTF9XUik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfV1IgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BTF9XUik7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FQQl9ETUEpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVBCX0RNQSAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQVBCX0RNQSk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVBCX0RNQSAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BUEJfRE1BKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0MgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfVklEX0MpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9DICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfVklEX0MpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQiAgICAgMHglMDh4KVxuIiwgUENJX01TS19WSURfQik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0IgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19WSURfQik7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9BICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1ZJRF9BKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQSAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1ZJRF9BKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfSU5UICAgMHglMDh4KVxuIiwgUENJX01TS19BVURfSU5UKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfSU5UICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FVRF9JTlQpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9FWFQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FVRF9FWFQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9FWFQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQVVEX0VYVCk7CiAKIAl9CiAKQEAgLTE3NTMsMTMgKzE3OTUsMTMgQEAKIAkJLmRldmljZSAgICAgICA9IDB4ODg1MiwKIAkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAotCX0seworCX0sIHsKIAkJLyogQ1gyMzg4NyBSZXYgMiAqLwogCQkudmVuZG9yICAgICAgID0gMHgxNGYxLAogCQkuZGV2aWNlICAgICAgID0gMHg4ODgwLAogCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCi0JfSx7CisJfSwgewogCQkvKiAtLS0gZW5kIG9mIGxpc3QgLS0tICovCiAJfQogfTsKQEAgLTE3OTcsOSArMTgzOSwzIEBACiBtb2R1bGVfZXhpdChjeDIzODg1X2ZpbmkpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMjRiZDE4My4uZTFhYWMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTc4LDE5ICs3OCwxOSBAQAogCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBxLT5wcml2X2RhdGE7Ci0JcmV0dXJuIGN4MjM4ODVfYnVmX3ByZXBhcmUocSwgcG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciopdmIsIGZpZWxkKTsKKwlyZXR1cm4gY3gyMzg4NV9idWZfcHJlcGFyZShxLCBwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyICopdmIsIGZpZWxkKTsKIH0KIAogc3RhdGljIHZvaWQgZHZiX2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IHEtPnByaXZfZGF0YTsKLQljeDIzODg1X2J1Zl9xdWV1ZShwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyKil2Yik7CisJY3gyMzg4NV9idWZfcXVldWUocG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciAqKXZiKTsKIH0KIAogc3RhdGljIHZvaWQgZHZiX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQljeDIzODg1X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIqKXZiKTsKKwljeDIzODg1X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKil2Yik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGR2Yl9xb3BzID0gewpAQCAtMzEyLDE5ICszMTIsMjUgQEAKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSBOVUxMOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZwb3J0LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwotCXBvcnQtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOworCWZlMC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CiAKIAkvKiBpbml0IGZyb250ZW5kICovCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9nZW5lcmljX2NvbmZpZywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkgICAmaGF1cHBhdWdlX2dlbmVyaWNfdHVuZXJjb25maWcsIDApOwogCQl9CkBAIC0zMzMsMjcgKzMzOSwyNyBAQAogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKIAkJc3dpdGNoIChhbHRfdHVuZXIpIHsKIAkJY2FzZSAxOgotCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0KKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0KIAkJCQlkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAmaGF1cHBhdWdlX2V6cWFtX2NvbmZpZywKIAkJCQkJICAgJmkyY19idXMtPmkyY19hZGFwKTsKLQkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsIDB4NDIsCiAJCQkJCSAgICZ0ZGE4Mjl4X25vX3Byb2JlKTsKLQkJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJICAgMHg2MCwgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKIAkJCQkJICAgJmhhdXBwYXVnZV90ZGExODI3MV9jb25maWcpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMDoKIAkJZGVmYXVsdDoKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9CiAJCQkJZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX2NvbmZpZywKIAkJCQkJICAgJmkyY19idXMtPmkyY19hZGFwKTsKLQkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKLQkJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzYxLDQyICszNjcsNDIgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE4MDBscF9jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0VYUDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkJJmZ1c2lvbmhkdHZfNV9leHByZXNzLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX0xHX1REVlNfSDA2WEYpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE1MDBxX2NvbmZpZywKIAkJCQkJCSZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkgICAmaGF1cHBhdWdlX2h2cjE1MDBxX3R1bmVyY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1sxXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9odnIxNTAwX2NvbmZpZywKIAkJCQkJCSZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmaTJjX2J1cy0+aTJjX2FkYXAsCkBAIC00MDksNyArNDE1LDcgQEAKIAkJCX07CiAKIAkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLAotCQkJCQlwb3J0LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KQEAgLTQxNywyNCArNDIzLDI0IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTcwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAogCQkJJmhhdXBwYXVnZV9odnIxMjAwX2NvbmZpZywKIAkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwgMHg0MiwKIAkJCQkmdGRhODI5eF9ub19wcm9iZSk7Ci0JCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCTB4NjAsICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCiAJCQkJJmhhdXBwYXVnZV9odnIxMjAwX3R1bmVyX2NvbmZpZyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsCiAJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkweDEyLCAmaGF1cHBhdWdlX2h2cjE0MDBfZGliNzAwMF9jb25maWcpOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLApAQCAtNDQ0LDEyICs0NTAsMTMgQEAKIAkJCQkuZm5hbWUgICA9IFhDMzAyOExfREVGQVVMVF9GSVJNV0FSRSwKIAkJCQkubWF4X2xlbiA9IDY0LAogCQkJCS5kZW1vZCAgID0gNTAwMCwKLQkJCQkvKiBUaGlzIGlzIHRydWUgZm9yIGFsbCBkZW1vZHMgd2l0aCB2MzYgZmlybXdhcmU/ICovCisJCQkJLyogVGhpcyBpcyB0cnVlIGZvciBhbGwgZGVtb2RzIHdpdGgKKwkJCQkJdjM2IGZpcm13YXJlPyAqLwogCQkJCS50eXBlICAgID0gWEMyMDI4X0QyNjMzLAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCXBvcnQtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQpAQCAtNDU3LDI1ICs0NjQsMjUgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciAtIDFdOwogCi0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZkdmljb19zNWgxNDA5X2NvbmZpZywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCA9PSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAogCQkJCQkJCSZkdmljb19zNWgxNDExX2NvbmZpZywKIAkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkgICAmZHZpY29feGM1MDAwX3R1bmVyY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFA6IHsKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbcG9ydC0+bnIgLSAxXTsKIAotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl94YzMwMjgsCiAJCQkJCSAgICAgICAmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgICAqZmU7CiAJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZwkgIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmkyY19idXMtPmkyY19hZGFwLApAQCAtNDg3LDcgKzQ5NCw3IEBACiAJCQkJLmRlbW9kICAgICAgID0gWEMzMDI4X0ZFX1pBUkxJTks0NTYsCiAJCQl9OwogCi0JCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKQEAgLTQ5NywxMCArNTA0LDEwIEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CiAKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAogCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgICAgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcJICBjZmcgPSB7CiAJCQkJLmkyY19hZGFwICA9ICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCkBAIC01MTIsNzMgKzUxOSwxMDggQEAKIAkJCQkuZGVtb2QgICAgICAgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NiwKIAkJCX07CiAKLQkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJJmNmZyk7CiAJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCAiCisJCQkiIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlicmVhazsKIAl9Ci0JaWYgKE5VTEwgPT0gcG9ydC0+ZHZiLmZyb250ZW5kKSB7Ci0JCXByaW50aygiJXM6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwlpZiAoTlVMTCA9PSBmZTAtPmR2Yi5mcm9udGVuZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCQlkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwotCXBvcnQtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBjeDIzODg1X3R1bmVyX2NhbGxiYWNrOworCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhpMmNfYnVzLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKLQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KQotCQlwb3J0LT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkocG9ydC0+ZHZiLmZyb250ZW5kKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCisJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KGZlMC0+ZHZiLmZyb250ZW5kKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZwb3J0LT5kdmIsIFRISVNfTU9EVUxFLCBwb3J0LAotCQkJCSAgICAgJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIpOworCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBwb3J0LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CisKIH0KIAogaW50IGN4MjM4ODVfZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKKworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAKLQlkcHJpbnRrKDEsICIlc1xuIiwgX19mdW5jX18pOwotCWRwcmludGsoMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCi0JCWRldi0+Ym9hcmQsCi0JCWRldi0+bmFtZSwKLQkJZGV2LT5wY2lfYnVzLAotCQlkZXYtPnBjaV9zbG90KTsKKwkvKiBIZXJlIHdlIG5lZWQgdG8gYWxsb2NhdGUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGZyb250ZW5kcywKKwkgKiBhcyByZWZsZWN0ZWQgaW4gdGhlIGNhcmRzIHN0cnVjdC4gVGhlIHJlYWxpdHkgaXMgdGhhdCBjdXJycmVudGx5CisJICogbm8gY3gyMzg4NSBib2FyZHMgc3VwcG9ydCB0aGlzIC0geWV0LiBCdXQsIGlmIHdlIGRvbid0IG1vZGlmeSB0aGlzCisJICogY29kZSB0aGVuIHRoZSBzZWNvbmQgZnJvbnRlbmQgd291bGQgbmV2ZXIgYmUgYWxsb2NhdGVkIChsYXRlcikKKwkgKiBhbmQgZmFpbCB3aXRoIGVycm9yIGJlZm9yZSB0aGUgYXR0YWNoIGluIGR2Yl9yZWdpc3RlcigpLgorCSAqIFdpdGhvdXQgdGhlc2UgY2hhbmdlcyB3ZSByaXNrIGFuIE9PUFMgbGF0ZXIuIFRoZSBjaGFuZ2VzIGhlcmUKKwkgKiBhcmUgZm9yIHNhZmV0eSwgYW5kIHNob3VsZCBwcm92aWRlIGEgZ29vZCBmb3VuZGF0aW9uIGZvciB0aGUKKwkgKiBmdXR1cmUgYWRkaXRpb24gb2YgYW55IG11bHRpLWZyb250ZW5kIGN4MjM4ODUgYmFzZWQgYm9hcmRzLgorCSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgYWxsb2NhdGluZyAlZCBmcm9udGVuZChzKVxuIiwgX19mdW5jX18sCisJCXBvcnQtPm51bV9mcm9udGVuZHMpOwogCi0JZXJyID0gLUVOT0RFVjsKKwlmb3IgKGkgPSAxOyBpIDw9IHBvcnQtPm51bV9mcm9udGVuZHM7IGkrKykgeworCQlpZiAodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKAorCQkJJnBvcnQtPmZyb250ZW5kcywgaSkgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAotCS8qIGR2YiBzdHVmZiAqLwotCXByaW50aygiJXM6IGN4MjM4ODUgYmFzZWQgZHZiIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmcG9ydC0+ZHZiLmR2YnEsICZkdmJfcW9wcywgJmRldi0+cGNpLT5kZXYsICZwb3J0LT5zbG9jaywKKwkJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCBpKTsKKwkJaWYgKCFmZTApCisJCQllcnIgPSAtRUlOVkFMOworCisJCWRwcmludGsoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJCWRwcmludGsoMSwgIiAtPnByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCisJCQlkZXYtPmJvYXJkLAorCQkJZGV2LT5uYW1lLAorCQkJZGV2LT5wY2lfYnVzLAorCQkJZGV2LT5wY2lfc2xvdCk7CisKKwkJZXJyID0gLUVOT0RFVjsKKworCQkvKiBkdmIgc3R1ZmYgKi8KKwkJLyogV2UgaGF2ZSB0byBpbml0IHRoZSBxdWV1ZSBmb3IgZWFjaCBmcm9udGVuZCBvbiBhIHBvcnQuICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjeDIzODg1IGJhc2VkIGR2YiBjYXJkXG4iLCBkZXYtPm5hbWUpOworCQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmZTAtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCisJCQkgICAgJmRldi0+cGNpLT5kZXYsICZwb3J0LT5zbG9jaywKIAkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfRklFTERfVE9QLAogCQkJICAgIHNpemVvZihzdHJ1Y3QgY3gyMzg4NV9idWZmZXIpLCBwb3J0KTsKKwl9CiAJZXJyID0gZHZiX3JlZ2lzdGVyKHBvcnQpOwogCWlmIChlcnIgIT0gMCkKLQkJcHJpbnRrKCIlcygpIGR2Yl9yZWdpc3RlciBmYWlsZWQgZXJyID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZHZiX3JlZ2lzdGVyIGZhaWxlZCBlcnIgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogaW50IGN4MjM4ODVfZHZiX3VucmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewotCS8qIGR2YiAqLwotCWlmKHBvcnQtPmR2Yi5mcm9udGVuZCkKLQkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJnBvcnQtPmR2Yik7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogRklYTUU6IGluIGFuIGVycm9yIGNvbmRpdGlvbiB3aGVyZSB0aGUgd2UgaGF2ZQorCSAqIGFuIGV4cGVjdGVkIG51bWJlciBvZiBmcm9udGVuZHMgKGF0dGFjaCBwcm9ibGVtKQorCSAqIHRoZW4gdGhpcyBtaWdodCBub3QgY2xlYW4gdXAgY29ycmVjdGx5LCBpZiAxCisJICogaXMgaW52YWxpZC4KKwkgKiBUaGlzIGNvbW1lbnQgb25seSBhcHBsaWVzIHRvIGZ1dHVyZSBib2FyZHMgSUYgdGhleQorCSAqIGltcGxlbWVudCBNRkUgc3VwcG9ydC4KKwkgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZwb3J0LT5mcm9udGVuZHMsIDEpOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKaW5kZXggZjk4ZTQ3Ni4uYmI3ZjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkJcHJpbnRrKCIgPlxuIik7CiAJfQogCi0JZm9yIChjbnQgPSAxOyBjbnQgPCBtc2ctPmxlbjsgY250KysgKSB7CisJZm9yIChjbnQgPSAxOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKIAkJLyogZm9sbG93aW5nIGJ5dGVzICovCiAJCXdkYXRhID0gbXNnLT5idWZbY250XTsKIAkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpOwpAQCAtMTUxLDkgKzE1MSw5IEBACiAJCWlmIChyZXR2YWwgPT0gMCkKIAkJCWdvdG8gZWlvOwogCQlpZiAoaTJjX2RlYnVnKSB7Ci0JCQlwcmludGsoIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CisJCQlkcHJpbnRrKDEsICIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOwogCQkJaWYgKCEoY3RybCAmIEkyQ19OT1NUT1ApKQotCQkJCXByaW50aygiID5cbiIpOworCQkJCWRwcmludGsoMSwgIiA+XG4iKTsKIAkJfQogCX0KIAlyZXR1cm4gbXNnLT5sZW47CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR2YWwgPSAtRUlPOwogIGVycjoKIAlpZiAoaTJjX2RlYnVnKQotCQlwcmludGsoIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE5NCwxMiArMTk0LDEyIEBACiAKIAlpZiAoaTJjX2RlYnVnKSB7CiAJCWlmIChqb2luZWQpCi0JCQlwcmludGsoIiBSIik7CisJCQlkcHJpbnRrKDEsICIgUiIpOwogCQllbHNlCi0JCQlwcmludGsoIiA8UiAlMDJ4IiwgKG1zZy0+YWRkciA8PCAxKSArIDEpOworCQkJZHByaW50aygxLCAiIDxSICUwMngiLCAobXNnLT5hZGRyIDw8IDEpICsgMSk7CiAJfQogCi0JZm9yKGNudCA9IDA7IGNudCA8IG1zZy0+bGVuOyBjbnQrKykgeworCWZvciAoY250ID0gMDsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CiAKIAkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpIHwgMTsKIApAQCAtMjE2LDkgKzIxNiw5IEBACiAJCQlnb3RvIGVpbzsKIAkJbXNnLT5idWZbY250XSA9IGN4X3JlYWQoYnVzLT5yZWdfcmRhdGEpICYgMHhmZjsKIAkJaWYgKGkyY19kZWJ1ZykgewotCQkJcHJpbnRrKCIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOworCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKIAkJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKLQkJCQlwcmludGsoIiA+XG4iKTsKKwkJCQlkcHJpbnRrKDEsICIgPlxuIik7CiAJCX0KIAl9CiAJcmV0dXJuIG1zZy0+bGVuOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJcmV0dmFsID0gLUVJTzsKICBlcnI6CiAJaWYgKGkyY19kZWJ1ZykKLQkJcHJpbnRrKCIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zNTMsMTcgKzM1MywxNyBAQAogfTsKIAogc3RhdGljIGNoYXIgKmkyY19kZXZzWzEyOF0gPSB7Ci0JWzB4MTAgPj4gMV0gICA9ICJ0ZGExMDA0OCIsCi0JWzB4MTIgPj4gMV0gICA9ICJkaWI3MDAwcGMiLAotCVsgMHgxYyA+PiAxIF0gPSAibGdkdDMzMDMiLAotCVsgMHg4NiA+PiAxIF0gPSAidGRhOTg4NyIsCi0JWyAweDMyID4+IDEgXSA9ICJjeDI0MjI3IiwKLQlbIDB4ODggPj4gMSBdID0gImN4MjU4MzciLAotCVsgMHg4NCA+PiAxIF0gPSAidGRhODI5NSIsCi0JWyAweGEwID4+IDEgXSA9ICJlZXByb20iLAotCVsgMHhjMCA+PiAxIF0gPSAidHVuZXIvbXQyMTMxL3RkYTgyNzUiLAorCVsweDEwID4+IDFdID0gInRkYTEwMDQ4IiwKKwlbMHgxMiA+PiAxXSA9ICJkaWI3MDAwcGMiLAorCVsweDFjID4+IDFdID0gImxnZHQzMzAzIiwKKwlbMHg4NiA+PiAxXSA9ICJ0ZGE5ODg3IiwKKwlbMHgzMiA+PiAxXSA9ICJjeDI0MjI3IiwKKwlbMHg4OCA+PiAxXSA9ICJjeDI1ODM3IiwKKwlbMHg4NCA+PiAxXSA9ICJ0ZGE4Mjk1IiwKKwlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGMwID4+IDFdID0gInR1bmVyL210MjEzMS90ZGE4Mjc1IiwKIAlbMHhjMiA+PiAxXSA9ICJ0dW5lci9tdDIxMzEvdGRhODI3NS94YzUwMDAveGMzMDI4IiwKLQlbMHhjOCA+PiAxXSAgID0gInR1bmVyL3hjMzAyOEwiLAorCVsweGM4ID4+IDFdID0gInR1bmVyL3hjMzAyOEwiLAogfTsKIAogc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oY2hhciAqbmFtZSwgc3RydWN0IGkyY19jbGllbnQgKmMpCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJcmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgJmJ1ZiwgMCk7CiAJCWlmIChyYyA8IDApCiAJCQljb250aW51ZTsKLQkJcHJpbnRrKCIlczogaTJjIHNjYW46IGZvdW5kIGRldmljZSBAIDB4JXggIFslc11cbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleCAgWyVzXVxuIiwKIAkJICAgICAgIG5hbWUsIGkgPDwgMSwgaTJjX2RldnNbaV0gPyBpMmNfZGV2c1tpXSA6ICI/Pz8iKTsKIAl9CiB9CkBAIC00MDgsMTEgKzQwOCwxMiBAQAogCWJ1cy0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ1cy0+aTJjX2FkYXA7CiAKIAlpZiAoMCA9PSBidXMtPmkyY19yYykgewotCQlwcmludGsoIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyZWRcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7CisJCWRwcmludGsoMSwgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyZWRcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7CiAJCWlmIChpMmNfc2NhbikKIAkJCWRvX2kyY19zY2FuKGRldi0+bmFtZSwgJmJ1cy0+aTJjX2NsaWVudCk7CiAJfSBlbHNlCi0JCXByaW50aygiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXIgRkFJTEVEXG4iLCBkZXYtPm5hbWUsIGJ1cy0+bnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaTJjIGJ1cyAlZCByZWdpc3RlciBGQUlMRURcbiIsCisJCQlkZXYtPm5hbWUsIGJ1cy0+bnIpOwogCiAJcmV0dXJuIGJ1cy0+aTJjX3JjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKaW5kZXggZjc1ZWQxYy4uYWIzMTEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCkBAIC0yODUsMTEgKzI4NSwxMCBAQAogCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CiAJfQotCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpCiAJCWRlbF90aW1lcigmcS0+dGltZW91dCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7Ci0JfQogCWlmIChiYyAhPSAxKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKIAkJCV9fZnVuY19fLCBiYyk7CkBAIC0zNzksMTIgKzM3OCwxMiBAQAogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgY3gyMzg4NV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0JcmV0dXJuIChmaC0+cmVzb3VyY2VzICYgYml0KTsKKwlyZXR1cm4gZmgtPnJlc291cmNlcyAmIGJpdDsKIH0KIAogc3RhdGljIGludCByZXNfbG9ja2VkKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgYml0KQogewotCXJldHVybiAoZGV2LT5yZXNvdXJjZXMgJiBiaXQpOworCXJldHVybiBkZXYtPnJlc291cmNlcyAmIGJpdDsKIH0KIAogc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCBjeDIzODg1X2ZoICpmaCwKQEAgLTg4NywxNCArODg2LDE2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFZJREVPIENUUkwgSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IGN4MjM4ODVfZ2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3N0YXRpYyBpbnQgY3gyMzg4NV9nZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJZHByaW50aygxLCAiJXMoKSBjYWxsaW5nIGN4MjU4NDAoVklESU9DX0dfQ1RSTClcbiIsIF9fZnVuY19fKTsKIAljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0dfQ1RSTCwgY3RsKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIzODg1X3NldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCitzdGF0aWMgaW50IGN4MjM4ODVfc2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19TX0NUUkwpIgogCQkiIChkaXNhYmxlZCAtIG5vIGFjdGlvbilcbiIsIF9fZnVuY19fKTsKQEAgLTEwNzMsMjkgKzEwNzQsMjkgQEAKIAlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfcmVxYnVmcyhnZXRfcXVldWUoZmgpLCBwKSk7CisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgcCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfcXVlcnlidWYoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3FidWYoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwKKwkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggYmE0ZTBhYS4uMWQ1M2Y1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNkZWZpbmUgQ1gyMzg4NV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwwLDEpCisjZGVmaW5lIENYMjM4ODVfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCiAKICNkZWZpbmUgVU5TRVQgKC0xVSkKIApAQCAtMjI1LDcgKzIyNSw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbnI7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgc3JhbV9jaG5vOwogCi0Jc3RydWN0IHZpZGVvYnVmX2R2YiAgICAgICAgZHZiOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIGZyb250ZW5kczsKIAogCS8qIGRtYSBxdWV1ZXMgKi8KIAlzdHJ1Y3QgY3gyMzg4NV9kbWFxdWV1ZSAgICBtcGVncTsKQEAgLTI2Miw2ICsyNjIsOSBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zZWxfdmFsOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIHZsZF9taXNjX3ZhbDsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBod19zb3BfY3RybF92YWw7CisKKwkvKiBBbGxvdyBhIHNpbmdsZSB0c3BvcnQgdG8gaGF2ZSBtdWx0aXBsZSBmcm9udGVuZHMgKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICBudW1fZnJvbnRlbmRzOwogfTsKIAogc3RydWN0IGN4MjM4ODVfZGV2IHsKQEAgLTM2NywxNCArMzcwLDE0IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIGN4X3JlYWQocmVnKSAgICAgICAgICAgICByZWFkbChkZXYtPmxtbWlvICsgKChyZWcpPj4yKSkKLSNkZWZpbmUgY3hfd3JpdGUocmVnLHZhbHVlKSAgICAgIHdyaXRlbCgodmFsdWUpLCBkZXYtPmxtbWlvICsgKChyZWcpPj4yKSkKKyNkZWZpbmUgY3hfd3JpdGUocmVnLCB2YWx1ZSkgICAgIHdyaXRlbCgodmFsdWUpLCBkZXYtPmxtbWlvICsgKChyZWcpPj4yKSkKIAotI2RlZmluZSBjeF9hbmRvcihyZWcsbWFzayx2YWx1ZSkgXAorI2RlZmluZSBjeF9hbmRvcihyZWcsIG1hc2ssIHZhbHVlKSBcCiAgIHdyaXRlbCgocmVhZGwoZGV2LT5sbW1pbysoKHJlZyk+PjIpKSAmIH4obWFzaykpIHxcCiAgICgodmFsdWUpICYgKG1hc2spKSwgZGV2LT5sbW1pbysoKHJlZyk+PjIpKQogCi0jZGVmaW5lIGN4X3NldChyZWcsYml0KSAgICAgICAgICBjeF9hbmRvcigocmVnKSwoYml0KSwoYml0KSkKLSNkZWZpbmUgY3hfY2xlYXIocmVnLGJpdCkgICAgICAgIGN4X2FuZG9yKChyZWcpLChiaXQpLDApCisjZGVmaW5lIGN4X3NldChyZWcsIGJpdCkgICAgICAgICAgY3hfYW5kb3IoKHJlZyksIChiaXQpLCAoYml0KSkKKyNkZWZpbmUgY3hfY2xlYXIocmVnLCBiaXQpICAgICAgICBjeF9hbmRvcigocmVnKSwgKGJpdCksIDApCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDIzODg1LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDExLDcgKzQxNCw4IEBACiBleHRlcm4gc3RydWN0IGN4MjM4ODVfc3ViaWQgY3gyMzg4NV9zdWJpZHNbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50OwogCi1leHRlcm4gaW50IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOworZXh0ZXJuIGludCBjeDIzODg1X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsCisJaW50IGNvbW1hbmQsIGludCBhcmcpOwogZXh0ZXJuIHZvaWQgY3gyMzg4NV9jYXJkX2xpc3Qoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpOwogZXh0ZXJuIGludCAgY3gyMzg4NV9pcl9pbml0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIGN4MjM4ODVfZ3Bpb19zZXR1cChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CkBAIC00NzksMTEgKzQ4MywzIEBACiB7CiAJcmV0dXJuIChub3JtICYgKFY0TDJfU1REX01OICYgflY0TDJfU1REX1BBTF9OYykpID8gNzU0IDogOTIyOwogfQotCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCA1ZGEwNGU4MS4uZmJjMjI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xMjcwLDI3ICsxMjcwLDQwIEBACiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMF0gPSB7Ci0JCS8qIEZJWE1FOiBBZGQgZHZiICYgcmFkaW8gc3VwcG9ydCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjMwMDAgVHJpTW9kZSBBbmFsb2cvRFZCLVMvRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IFY0TDJfSURFTlRfV004Nzc1LAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweDg0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAorCQl9LAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCQkubnVtX2Zyb250ZW5kcwk9IDIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9OT1JXT09EX01JQ1JPXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk5vcndvb2QgTWljcm8gVFYgVHVuZXIiLApAQCAtMTM1NiwyMyArMTM2OSwyNyBAQAogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiAxOiBUViBBdWRpbyAvIEZNIE1vbm8gKi8KIAkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXgJPSAxLAogCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogMjogTGluZS1JbiAqLwogCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4CT0gMiwKIAkJCS5ncGlvMAk9IDB4ZWY4OCwKKwkJCS8qIDI6IExpbmUtSW4gKi8KIAkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfX0sCi0JCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLwogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCiAJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAogCQl9LAogCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKQEAgLTE3MTYsNiArMTczMyw3IEBACiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmF1ZGlvX2NoaXAgICAgID0gVjRMMl9JREVOVF9XTTg3NzUsCiAJCS8qCiAJCSAqIEdQSU8wIChXSU5UVjIwMDApCiAJCSAqCkBAIC0xNzI5LDcgKzE3NDcsNyBAQAogCQkgKiBCSVQgIFZBTFVFICAgRlVOQ1RJT04gR1B7eH1fSU8KIAkJICogMCAgICAxICAgICAgIEk6PwogCQkgKiAxICAgIDEgICAgICAgSTo/Ci0JCSAqIDIgICAgMSAgICAgICBPOkRWQi1UIERFTU9EIEVOQUJMRSBMT1cvQU5BTE9HIERFTU9EIEVOQUJMRSBISUdICisJCSAqIDIgICAgMSAgICAgICBPOk1QRUcgUE9SVCAwPURWQi1UIDE9RFZCLVMKIAkJICogMyAgICAxICAgICAgIEk6PwogCQkgKiA0ICAgIDEgICAgICAgSTo/CiAJCSAqIDUgICAgMSAgICAgICBJOj8KQEAgLTE3NDUsMjIgKzE3NjMsNDEgQEAKIAkJICogZCAgICAwICAgICAgIEkKIAkJICogZSAgICAxICAgICAgIE8KIAkJICogZiAgICAxICAgICAgIE8KKwkJICoKKwkJICogV004Nzc1IEFEQworCQkgKgorCQkgKiAxOiBUViBBdWRpbyAvIEZNIE1vbm8KKwkJICogMjogTGluZS1JbgorCQkgKiAzOiBMaW5lLUluIEV4cGFuc2lvbgorCQkgKiA0OiBGTSBTdGVyZW8KIAkJICovCiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGM0YmYsCisJCQkvKiAxOiBUViBBdWRpbyAvIEZNIE1vbm8gKi8KKwkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSwgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHhjNGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LCB7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4YzRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfSB9LAotCQkvKiBmaXhtZTogQWRkIHJhZGlvIHN1cHBvcnQgKi8KKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweGM0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKKwkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwkJLm51bV9mcm9udGVuZHMJPSAyLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwKExpdGUpIERWQi1TL1MyIiwKQEAgLTI2NjIsMTAgKzI2OTksMTMgQEAKIAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKIAkJLyogSW5pdCBHUElPICovCiAJCWN4X3dyaXRlKE1PX0dQMF9JTywgY29yZS0+Ym9hcmQuaW5wdXRbMF0uZ3BpbzApOwogCQl1ZGVsYXkoMTAwMCk7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCXVkZWxheSg1MCk7CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOyAvKiA3MDIgb3V0IG9mIHJlc2V0ICovCisJCXVkZWxheSgxMDAwKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMzAwNCwxMCArMzA0NCwxNCBAQAogCiAJbWVtY3B5KCZjb3JlLT5ib2FyZCwgJmN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkbnJdLCBzaXplb2YoY29yZS0+Ym9hcmQpKTsKIAotCWluZm9fcHJpbnRrKGNvcmUsICJzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXVxuIiwKKwlpZiAoIWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMpCisJCWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM9MTsKKworCWluZm9fcHJpbnRrKGNvcmUsICJzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXSwgZnJvbnRlbmQocyk6ICVkXG4iLAogCQlwY2ktPnN1YnN5c3RlbV92ZW5kb3IsIHBjaS0+c3Vic3lzdGVtX2RldmljZSwgY29yZS0+Ym9hcmQubmFtZSwKIAkJY29yZS0+Ym9hcmRuciwgY2FyZFtjb3JlLT5ucl0gPT0gY29yZS0+Ym9hcmRuciA/Ci0JCSJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiKTsKKwkJImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIsCisJCWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMpOwogCiAJaWYgKHR1bmVyW2NvcmUtPm5yXSAhPSBVTlNFVCkKIAkJY29yZS0+Ym9hcmQudHVuZXJfdHlwZSA9IHR1bmVyW2NvcmUtPm5yXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCBkNjU2ZmVjLi42MDcwNWIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtNTQ5LDcgKzU0OSw4IEBACiAJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7CiAJfQogCWlmIChiYyAhPSAxKQotCQlwcmludGsoIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIixfX2Z1bmNfXyxiYyk7CisJCWRwcmludGsoMiwgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKKwkJCV9fZnVuY19fLCBiYyk7CiB9CiAKIHZvaWQgY3g4OF9zaHV0ZG93bihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCAzNDRlZDI2Li42OTY4YWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMTE2LDEzICsxMTYsMjMgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OwogCXN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYgPSBOVUxMOwogCWludCByZXQgPSAwOworCWludCBmZV9pZDsKKworCWZlX2lkID0gdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCBmZSk7CisJaWYgKCFmZV9pZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTm8gZnJvbnRlbmQgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJZHJ2ID0gY3g4ODAyX2dldF9kcml2ZXIoZGV2LCBDWDg4X01QRUdfRFZCKTsKIAlpZiAoZHJ2KSB7Ci0JCWlmIChhY3F1aXJlKQorCQlpZiAoYWNxdWlyZSl7CisJCQlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSBmZV9pZDsKIAkJCXJldCA9IGRydi0+cmVxdWVzdF9hY3F1aXJlKGRydik7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXJldCA9IGRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisJCQlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOworCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTM5Niw3ICs0MDYsNyBAQAogCQkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDA2MDYwKTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQ19WT0xUQUdFX09GRjoKLQkJCXByaW50aygiTE5CIFZvbHRhZ2UgU0VDX1ZPTFRBR0Vfb2ZmXG4iKTsKKwkJICAgCXByaW50aygiTE5CIFZvbHRhZ2UgU0VDX1ZPTFRBR0Vfb2ZmXG4iKTsKIAkJCWJyZWFrOwogCX0KIApAQCAtNDgzLDYgKzQ5Myw3IEBACiBzdGF0aWMgaW50IGF0dGFjaF94YzMwMjgodTggYWRkciwgc3RydWN0IGN4ODgwMl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAgPSBOVUxMOwogCXN0cnVjdCB4YzIwMjhfY3RybCBjdGw7CiAJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkuaTJjX2FkYXAgID0gJmRldi0+Y29yZS0+aTJjX2FkYXAsCkBAIC00OTAsNyArNTAxLDEyIEBACiAJCS5jdHJsICAgICAgPSAmY3RsLAogCX07CiAKLQlpZiAoIWRldi0+ZHZiLmZyb250ZW5kKSB7CisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogZHZiIGZyb250ZW5kIG5vdCBhdHRhY2hlZC4gIgogCQkJCSJDYW4ndCBhdHRhY2ggeGMzMDI4XG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKQEAgLTUwNCwxMCArNTIwLDEzIEBACiAJICovCiAJY3g4OF9zZXR1cF94YzMwMjgoZGV2LT5jb3JlLCAmY3RsKTsKIAotCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAlpZiAoIWZlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogeGMzMDI4IGF0dGFjaCBmYWlsZWRcbiIsCiAJCSAgICAgICBkZXYtPmNvcmUtPm5hbWUpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZmUwLT5kdmIuZnJvbnRlbmQpOworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTMyLDggKzU1MSwxMCBAQAogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKIAkvKiBSZXNldCB0aGUgcGFydCAqLworCS8qIFB1dCB0aGUgY3gyNDExNiBpbnRvIHJlc2V0ICovCiAJY3hfd3JpdGUoTU9fU1JTVF9JTywgMCk7CiAJbXNsZWVwKDEwKTsKKwkvKiBUYWtlIHRoZSBjeDI0MTE2IG91dCBvZiByZXNldCAqLwogCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOwogCW1zbGVlcCgxMCk7CiAKQEAgLTU1NCwxNCArNTc1LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgdGV2aWlfdHVuZXJfc2hhcnBfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9faW5pdHRhYiwKKwkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IDEsCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAogCS5taW5fZGVsYXlfbXMgPSAxMDAsCi0JLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9fc2V0X3N5bWJvbF9yYXRlLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlLAogCS5zZXRfdHNfcGFyYW1zID0gY3gyNDExNl9zZXRfdHNfcGFyYW0sCiB9OwogCkBAIC01NzQsMTkgKzU5NSwyNSBAQAogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4ODgwMl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMCwgKmZlMSA9IE5VTEw7CisJaW50IG1mZV9zaGFyZWQgPSAwOyAvKiBidXMgbm90IHNoYXJlZCBieSBkZWZhdWx0ICovCiAKLQkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KLQlkZXYtPmR2Yi5uYW1lID0gY29yZS0+bmFtZTsKLQlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7CisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBpbml0IGZyb250ZW5kICovCisJLyogbXVsdGktZnJvbnRlbmQgZ2F0ZSBjb250cm9sIGlzIHVuZGVmaW5lZCBvciBkZWZhdWx0cyB0byBmZTAgKi8KKwlkZXYtPmZyb250ZW5kcy5nYXRlID0gMDsKKworCS8qIGluaXQgZnJvbnRlbmQocykgKi8KIAlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCiAJCQkJCSAgICAgICAmY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgJmNvcmUtPmkyY19hZGFwLAogCQkJCQlEVkJfUExMX1RIT01TT05fRFRUNzU5WCkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC01OTYsMTEgKzYyMywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyOgogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNjEwLDMzICs2MzcsNjcgQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cl9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwkJLyogRFZCLVMgaW5pdCAqLworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCQkgICAgICAgJmhhdXBwYXVnZV9ub3Zhc19jb25maWcsCisJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmICghZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItUyBMTkIgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1TIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl9CisJCS8qIERWQi1UIGluaXQgKi8KKwkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOworCQlpZiAoZmUxKSB7CisJCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKKwkJCW1mZV9zaGFyZWQgPSAxOworCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOworCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAorCQkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4NjEsCisJCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKSB7CisJCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgbWlzYyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGNhbid0IGZpbmQgZnJvbnRlbmQgMi5cbiIsIF9fZnVuY19fKTsKKwkJfQorCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QTFVTOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsIE5VTEwsIERWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIFpMMTAzNTMgcmVwbGFjZXMgTVQzNTIgb24gbGF0ZXIgY2FyZHMgKi8KLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl9wbHVzX3YxXzEsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsIE5VTEwsIERWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtNjQ0LDMxICs3MDUsMzEgQEAKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMOgogCQkvKiBUaGUgdGluIGJveCBzYXlzIERFRTE2MDEsIGJ1dCBpdCBzZWVtcyB0byBiZSBEVFQ3NTc5CiAJCSAqIGNvbXBhdGlibGUsIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgTVQzNTIgQUdDIGdhaW4uICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl9kdWFsLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQlicmVhazsKIAkJfQogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsIE5VTEwsIERWQl9QTExfTEdfWjIwMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTY3NiwxMSArNzM3LDExIEBACiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgogCWNhc2UgQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkbnR2X2xpdmVfZHZidF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsIE5VTEwsIERWQl9QTExfVU5LTk9XTl8xKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtNjg4LDEwICs3NDksMTAgQEAKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NCkgfHwgKGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogCQkvKiBNVDM1MiBpcyBvbiBhIHNlY29uZGFyeSBJMkMgYnVzIG1hZGUgZnJvbSBzb21lIEdQSU8gbGluZXMgKi8KLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmRudHZfbGl2ZV9kdmJ0X3Byb19jb25maWcsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+dnAzMDU0LT5hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzAyLDIyICs3NjMsMjIgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9IWUJSSUQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfaHlicmlkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfVEhPTVNPTl9GRTY2MDApKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BSTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl94YzMwMjgsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCA9PSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZkdmljb19mdXNpb25oZHR2X210MzUyX3hjMzAyOCwKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7CiAJCS8qCkBAIC03MjUsMTYgKzc4NiwxNiBAQAogCQkgKiBXZSBtdXN0IG5vdCBwZXJtaXQgZ2F0ZV9jdHJsIHRvIGJlIHBlcmZvcm1lZCwgb3IKIAkJICogdGhlIHhjMzAyOCBjYW5ub3QgY29tbXVuaWNhdGUgb24gdGhlIGJ1cy4KIAkJICovCi0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CiAJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzUxLDExICs4MTIsMTEgQEAKIAogCQkvKiBTZWxlY3QgUkYgY29ubmVjdG9yIGNhbGxiYWNrICovCiAJCWZ1c2lvbmhkdHZfM19nb2xkLnBsbF9yZl9zZXQgPSBsZ2R0MzMweF9wbGxfcmZfc2V0OwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC03NjksMTEgKzgzMCwxMSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgOSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzg3LDE1ICs4NDgsMTUgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDEpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzVfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfTEdfVERWU19IMDZYRikpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7Ci0JCQlpZiAoIWR2Yl9hdHRhY2godGRhOTg4N19hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NDMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC04MDgsMjUgKzg2OSwyNSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgMSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJnBjaGR0dl9oZDU1MDAsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJCVRVTkVSX0xHX1REVlNfSDA2WEYpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDQzKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmF0aV9oZHR2d29uZGVyLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9QSElMSVBTX1RVVjEyMzZEKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTgzNCw0OSArODk1LDQ5IEBACiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmFzX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKIAkJCQkJICAgICAgICZrd29ybGRfZHZic18xMDBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBrd29ybGRfZHZic18xMDBfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0ga3dvcmxkX2R2YnNfMTAwX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmZ2VuaWF0ZWNoX2R2YnNfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaW5uYWNsZV9wY3R2X2hkXzgwMGlfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLAogCQkJCQkmcGlubmFjbGVfcGN0dl9oZF84MDBpX3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmZHZpY29faGR0djVfcGNpX25hbm9fY29uZmlnLAogCQkJCQkJJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmY29yZS0+aTJjX2FkYXAsCkBAIC04ODksMTcgKzk1MCwxNyBAQAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCWRldi0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CiAJCWJyZWFrOwogCSBjYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmN4ODhfcGlubmFjbGVfaHlicmlkX3BjdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gTlVMTDsKIAkJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC05MDcsODUgKzk2OCwxMTggQEAKIAkgY2FzZSBDWDg4X0JPQVJEX0dFTklBVEVDSF9YODAwMF9NVDoKIAkJZGV2LT50c19nZW5fY250cmwgPSAweDAwOwogCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmN4ODhfZ2VuaWF0ZWNoX3g4MDAwX210LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJYnJlYWs7CiAJIGNhc2UgQ1g4OF9CT0FSRF9LV09STERfQVRTQ18xMjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAgICAgJmt3b3JsZF9hdHNjXzEyMF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHY3X2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJJmR2aWNvX2Z1c2lvbmhkdHY3X3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6Ci0JCS8qIFN1cHBvcnQgZm9yIERWQi1TIG9ubHksIG5vdCBEVkItVCBzdXBwb3J0ICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJLyogRFZCLVMvUzIgSW5pdCAqLworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCiAJCQkmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAogCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItUyBMTkIgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1TIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl9CisJCS8qIERWQi1UIEluaXQgKi8KKwkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOworCQlpZiAoZmUxKSB7CisJCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKKwkJCW1mZV9zaGFyZWQgPSAxOworCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOworCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHg2MSwKKwkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKKwkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKIAkJCQkweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0MjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAogCQkJCQkJJnRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZywKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCBEVkJfUExMX09QRVJBMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAogCQl9IGVsc2UgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyODhfYXR0YWNoLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyODhfYXR0YWNoLAogCQkJCQkJCSAgICAmdGV2aWlfdHVuZXJfZWFyZGFfY29uZmlnLAogCQkJCQkJCSAgICAmY29yZS0+aTJjX2FkYXApOwotCQkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQkJCWlmICghZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQkJaWYgKCFkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCkpCiAJCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwogCiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0NjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAogCQkJCQkgICAgICAgJnRldmlpX3M0NjBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9PTUlDT01fU1M0X1BDSToKIAljYXNlIENYODhfQk9BUkRfVEJTXzg5MjA6CiAJY2FzZSBDWDg4X0JPQVJEX1BST0ZfNzMwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05OTMsMjkgKzEwODcsMzIgQEAKIAkJICAgICAgIGNvcmUtPm5hbWUpOwogCQlicmVhazsKIAl9Ci0JaWYgKE5VTEwgPT0gZGV2LT5kdmIuZnJvbnRlbmQpIHsKKworICAgICAgICBpZiAoIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB8fCAoZmUxICYmIE5VTEwgPT0gZmUxLT5kdmIuZnJvbnRlbmQpICkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlcy8yOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwotCWRldi0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3g4OF90dW5lcl9jYWxsYmFjazsKIAogCS8qIEVuc3VyZSBhbGwgZnJvbnRlbmRzIG5lZ290aWF0ZSBidXMgYWNjZXNzICovCi0JZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOworCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKKwlpZiAoZmUxKQorCQlmZTEtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCi0JcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmZGV2LT5kdmIsIFRISVNfTU9EVUxFLCBkZXYsCi0JCQkJICAgICAmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgbWZlX3NoYXJlZCk7CiAKIGZyb250ZW5kX2RldGFjaDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJZHZiX2Zyb250ZW5kX2RldGFjaChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDM5LDYgKzExMzYsMzggQEAKIAkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsKIAkJdWRlbGF5KDEwMDApOwogCQlicmVhazsKKworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CisJCWlmKGNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9PSAxKSB7CisJCQkvKiBEVkItUy9TMiBFbmFibGVkICovCisKKwkJCS8qIFRvZ2dsZSByZXNldCBvbiBjeDIyNzAyIGxlYXZpbmcgaTJjIGFjdGl2ZSAqLworCQkJY3hfd3JpdGUoTU9fR1AwX0lPLCAoY29yZS0+Ym9hcmQuaW5wdXRbMF0uZ3BpbzAgJiAweDAwMDBmZjAwKSB8IDB4MDAwMDAwODApOworCQkJdWRlbGF5KDEwMDApOworCQkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsKKwkJCXVkZWxheSg1MCk7CisJCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogY3gyMjcwMiBvdXQgb2YgcmVzZXQgKi8KKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwMDQpOyAvKiB0cmktc3RhdGUgdGhlIGN4MjI3MDIgcGlucyAqLworCQkJdWRlbGF5KDEwMDApOworCisJCQljeF93cml0ZShNT19TUlNUX0lPLCAxKTsgLyogVGFrZSB0aGUgY3gyNDExNi9jeDI0MTIzIG91dCBvZiByZXNldCAqLworCQkJY29yZS0+ZHZiZGV2LT50c19nZW5fY250cmwgPSAweDAyOyAvKiBQYXJhbGxlbCBJTyAqLworCQl9IGVsc2UKKwkJaWYgKGNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9PSAyKSB7CisJCQkvKiBEVkItVCBFbmFibGVkICovCisKKwkJCS8qIFB1dCB0aGUgY3gyNDExNi9jeDI0MTIzIGludG8gcmVzZXQgKi8KKwkJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDApOworCisJCQkvKiBjeDIyNzAyIG91dCBvZiByZXNldCBhbmQgZW5hYmxlIGl0ICovCisJCQljeF9zZXQoTU9fR1AwX0lPLCAgIDB4MDAwMDAwODApOworCQkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsKKwkJCWNvcmUtPmR2YmRldi0+dHNfZ2VuX2NudHJsID0gMHgwYzsgLyogU2VyaWFsIElPICovCisJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTEwNTYsNiArMTE4NSw5IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgogCQkvKiBEbyBOb3RoaW5nLCBsZWF2ZSB0aGUgY3gyMjcwMiBvbiB0aGUgYnVzLiAqLwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTEwNjYsNyArMTE5OCw4IEBACiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZHJ2LT5jb3JlLT5kdmJkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOwogCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJZHByaW50ayggMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCkBAIC0xMDg2LDE4ICsxMjE5LDI4IEBACiAKIAkvKiBkdmIgc3R1ZmYgKi8KIAlwcmludGsoS0VSTl9JTkZPICIlcy8yOiBjeDIzODh4IGJhc2VkIERWQi9BVFNDIGNhcmRcbiIsIGNvcmUtPm5hbWUpOwotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmRldi0+ZHZiLmR2YnEsICZkdmJfcW9wcywKKwlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgeworCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzLCBpKTsKKwkJaWYgKCFmZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBnZXQgZnJvbnRlbmQoJWQpXG4iLCBfX2Z1bmNfXywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmZS0+ZHZiLmR2YnEsICZkdmJfcW9wcywKIAkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJICAgIFY0TDJfRklFTERfVE9QLAogCQkJICAgIHNpemVvZihzdHJ1Y3QgY3g4OF9idWZmZXIpLAogCQkJICAgIGRldik7CisJCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLworCQlmZS0+ZHZiLm5hbWUgPSBkZXYtPmNvcmUtPm5hbWU7CisJfQogCWVyciA9IGR2Yl9yZWdpc3RlcihkZXYpOwogCWlmIChlcnIgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBkdmJfcmVnaXN0ZXIgZmFpbGVkIChlcnIgPSAlZClcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lLCBlcnIpOwotCi0gZmFpbF9jb3JlOgorZmFpbF9jb3JlOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExMDUsOSArMTI0OCw3IEBACiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGRydi0+Y29yZS0+ZHZiZGV2OwogCi0JLyogZHZiICovCi0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOworCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMpOwogCiAJdnAzMDU0X2kyY19yZW1vdmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCA4ZTc0ZDY0Li4wMWRlMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMTE2LDE4ICsxMTYsMjUgQEAKIAogdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmID0gJmNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlID0gTlVMTDsKIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCiAJCXJldHVybjsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCi0JaWYgKCAoY29yZS0+ZHZiZGV2KSAmJiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQpICkgewotCQlpZiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQkJY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLCAxKTsKKwlpZiAoY29yZS0+ZHZiZGV2ICYmIGYpIHsKKwkJaWYoZi0+Z2F0ZSA8PSAxKSAvKiB1bmRlZmluZWQgb3IgZmUwICovCisJCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgMSk7CisJCWVsc2UKKwkJCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChmLCBmLT5nYXRlKTsKKworCQlpZiAoZmUgJiYgZmUtPmR2Yi5mcm9udGVuZCAmJiBmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLT5kdmIuZnJvbnRlbmQsIDEpOwogCiAJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CiAKLQkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMCk7CisJCWlmIChmZSAmJiBmZS0+ZHZiLmZyb250ZW5kICYmIGZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoZmUtPmR2Yi5mcm9udGVuZCwgMCk7CiAJfSBlbHNlCiAjZW5kaWYKIAkJaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCBhNmIwNjFjLi42ZGY1Y2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC03NjgsNyArNzY4LDggQEAKIHsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2OwogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlOwotCWludCBlcnI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZGVtb2Q7CisJaW50IGVycixpOwogCiAJLyogZ2VuZXJhbCBzZXR1cCAqLwogCWNvcmUgPSBjeDg4X2NvcmVfZ2V0KHBjaV9kZXYpOwpAQCAtNzgxLDYgKzc4MiwxMSBAQAogCWlmICghY29yZS0+Ym9hcmQubXBlZykKIAkJZ290byBmYWlsX2NvcmU7CiAKKwlpZiAoIWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIC5udW1fZnJvbnRlbmRzIHNob3VsZCBiZSBub24temVybywgZXJyID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlnb3RvIGZhaWxfY29yZTsKKwl9CisKIAllcnIgPSAtRU5PTUVNOwogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGRldikKQEAgLTc5NSw2ICs4MDEsMjAgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kcnZsaXN0KTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJmN4ODgwMl9kZXZsaXN0KTsKIAorCW11dGV4X2luaXQoJmRldi0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZyb250ZW5kcy5mZWxpc3QpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nICVkIGZyb250ZW5kKHMpXG4iLCBfX2Z1bmNfXywgY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcyk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgeworCQlkZW1vZCA9IHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIGkpOworCQlpZihkZW1vZCA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGFsbG9jXG4iLCBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2ZyZWU7CisJCX0KKwl9CisKIAkvKiBNYWludGFpbiBhIHJlZmVyZW5jZSBzbyBjeDg4LXZpZGVvIGNhbiBxdWVyeSB0aGUgODgwMiBkZXZpY2UuICovCiAJY29yZS0+ZHZiZGV2ID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggM2ExOTc3Zi4uN2RkNTA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtNzY3LDYgKzc2NywxNCBAQAogCWNhc2UgV1dfRk06CiAJCXNldF9hdWRpb19zdGFuZGFyZF9GTShjb3JlLCByYWRpb19kZWVtcGhhc2lzKTsKIAkJYnJlYWs7CisJY2FzZSBXV19JMlNBREM6CisJCXNldF9hdWRpb19zdGFydChjb3JlLCAweDAxKTsKKwkJLyogU2xhdmUvUGhpbGlwcy9BdXRvYmF1ZCAqLworCQljeF93cml0ZShBVURfSTJTSU5QVVRDTlRMLCAwKTsKKwkJLyogU3dpdGNoIHRvICJJMlMgQURDIG1vZGUiICovCisJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDEpOworCQlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIEVOX0kyU0lOX0VOQUJMRSk7CisJCWJyZWFrOwogCWNhc2UgV1dfTk9ORToKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzLzA6IHVua25vd24gdHYgYXVkaW8gbW9kZSBbJWRdXG4iLApAQCAtODk1LDYgKzkwMyw5IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKwljYXNlIFdXX0kyU0FEQzoKKwkJLyogRE8gTk9USElORyAqLworCQlicmVhazsKIAl9CiAKIAlpZiAoVU5TRVQgIT0gY3RsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBiZTQ1OTU1Li4zOTA0YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTQyNiwyNCArNDI2LDcgQEAKIAogCS8qIGlmIHRoZXJlIGFyZSBhdWRpb3JvdXRlcyBkZWZpbmVkLCB3ZSBoYXZlIGFuIGV4dGVybmFsCiAJICAgQURDIHRvIGRlYWwgd2l0aCBhdWRpbyAqLwotCiAJaWYgKElOUFVUKGlucHV0KS5hdWRpb3JvdXRlKSB7Ci0KLQkJLyogY3gyMzg4J3MgQy1BREMgaXMgY29ubmVjdGVkIHRvIHRoZSB0dW5lciBvbmx5LgotCQkgICBXaGVuIHVzZWQgd2l0aCBTLVZpZGVvLCB0aGF0IEFEQyBpcyBidXN5IGRlYWxpbmcgd2l0aAotCQkgICBjaHJvbWEsIHNvIGFuIGV4dGVybmFsIG11c3QgYmUgdXNlZCBmb3IgYmFzZWJhbmQgYXVkaW8gKi8KLQotCQlpZiAoSU5QVVQoaW5wdXQpLnR5cGUgIT0gQ1g4OF9WTVVYX1RFTEVWSVNJT04gJiYKLQkJCUlOUFVUKGlucHV0KS50eXBlICE9IENYODhfUkFESU8pIHsKLQkJCS8qICJBREMgbW9kZSIgKi8KLQkJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDEpOwotCQkJY3hfc2V0KEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3JtYWwgbW9kZSAqLwotCQkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MCk7Ci0JCQljeF9jbGVhcihBVURfQ1RMLCBFTl9JMlNJTl9FTkFCTEUpOwotCQl9Ci0KIAkJLyogVGhlIHdtODc3NSBtb2R1bGUgaGFzIHRoZSAiMiIgcm91dGUgaGFyZHdpcmVkIGludG8KIAkJICAgdGhlIGluaXRpYWxpemF0aW9uLiBTb21lIGJvYXJkcyBtYXkgdXNlIGRpZmZlcmVudAogCQkgICByb3V0ZXMgZm9yIGRpZmZlcmVudCBpbnB1dHMuIEhWUi0xMzAwIHN1cmVseSBkb2VzICovCkBAIC00NTQsOSArNDM3LDE5IEBACiAJCQlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS5hdWRpb3JvdXRlOwogCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCiAJCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7Ci0KIAkJfQotCisJCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KKwkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKKwkJICAgY2hyb21hLCBzbyBhbiBleHRlcm5hbCBtdXN0IGJlIHVzZWQgZm9yIGJhc2ViYW5kIGF1ZGlvICovCisJCWlmIChJTlBVVChpbnB1dCkudHlwZSAhPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiApIHsKKwkJCS8qICJJMlMgQURDIG1vZGUiICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfSTJTQURDOworCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vcm1hbCBtb2RlICovCisJCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgwKTsKKwkJCWN4X2NsZWFyKEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTgzMiw5ICs4MjUsMjQgQEAKIAkJY3hfd3JpdGUoTU9fR1AwX0lPLCBjb3JlLT5ib2FyZC5yYWRpby5ncGlvMCk7CiAJCWN4X3dyaXRlKE1PX0dQMV9JTywgY29yZS0+Ym9hcmQucmFkaW8uZ3BpbzEpOwogCQljeF93cml0ZShNT19HUDJfSU8sIGNvcmUtPmJvYXJkLnJhZGlvLmdwaW8yKTsKLQkJY29yZS0+dHZhdWRpbyA9IFdXX0ZNOwotCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOwotCQljeDg4X3NldF9zdGVyZW8oY29yZSxWNEwyX1RVTkVSX01PREVfU1RFUkVPLDEpOworCQlpZiAoY29yZS0+Ym9hcmQucmFkaW8uYXVkaW9yb3V0ZSkgeworCQkJaWYoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCAmJgorCQkJCWNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9XTTg3NzUpIHsKKwkJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJCQkJcm91dGUuaW5wdXQgPSBjb3JlLT5ib2FyZC5yYWRpby5hdWRpb3JvdXRlOworCQkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLAorCQkJCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwkJCX0KKwkJCS8qICJJMlMgQURDIG1vZGUiICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfSTJTQURDOworCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZNIE1vZGUgKi8KKwkJCWNvcmUtPnR2YXVkaW8gPSBXV19GTTsKKwkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CisJCQljeDg4X3NldF9zdGVyZW8oY29yZSxWNEwyX1RVTkVSX01PREVfU1RFUkVPLDEpOworCQl9CiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLEFVRENfU0VUX1JBRElPLE5VTEwpOwogCX0KIAl1bmxvY2tfa2VybmVsKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBkYmYwMWI4Li43NjIwN2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWVudW0gY3g4OF9pdHlwZSB0eXBlOwogCXUzMiAgICAgICAgICAgICBncGlvMCwgZ3BpbzEsIGdwaW8yLCBncGlvMzsKIAl1bnNpZ25lZCBpbnQgICAgdm11eDoyOwotCXVuc2lnbmVkIGludCAgICBhdWRpb3JvdXRlOjI7CisJdW5zaWduZWQgaW50ICAgIGF1ZGlvcm91dGU6NDsKIH07CiAKIHN0cnVjdCBjeDg4X2JvYXJkIHsKQEAgLTI2MSw2ICsyNjEsNyBAQAogCXN0cnVjdCBjeDg4X2lucHV0ICAgICAgIHJhZGlvOwogCWVudW0gY3g4OF9ib2FyZF90eXBlICAgIG1wZWc7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgYXVkaW9fY2hpcDsKKwlpbnQJCQludW1fZnJvbnRlbmRzOwogfTsKIAogc3RydWN0IGN4ODhfc3ViaWQgewpAQCAtMzU2LDYgKzM1Nyw3IEBACiAJc3RydWN0IGN4ODgwMl9kZXYgICAgICAgICAgKmR2YmRldjsKIAllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICAgICBhY3RpdmVfdHlwZV9pZDsKIAlpbnQJCQkgICBhY3RpdmVfcmVmOworCWludAkJCSAgIGFjdGl2ZV9mZV9pZDsKIH07CiAKIHN0cnVjdCBjeDg4MDBfZGV2OwpAQCAtNDkwLDcgKzQ5Miw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkJfTU9EVUxFKQogCS8qIGZvciBkdmIgb25seSAqLwotCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyBmcm9udGVuZHM7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSB8fCBcCkBAIC02MjgsNiArNjMwLDcgQEAKICNkZWZpbmUgV1dfRUlBSgkJIDcKICNkZWZpbmUgV1dfSTJTUFQJIDgKICNkZWZpbmUgV1dfRk0JCSA5CisjZGVmaW5lIFdXX0kyU0FEQwkgMTAKIAogdm9pZCBjeDg4X3NldF90dmF1ZGlvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOwogdm9pZCBjeDg4X25ld3N0YXRpb24oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCAzYWE1MzhhLi4yOTg4MTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQl3YXJuKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBjb3JydXB0ZWQgcGFja2V0IHN0YXR1czogJWQiLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQkJCWRldl93YXJuKCZwdXJiLT5kZXYtPmRldiwgImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZFxuIiwgcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJaWYgKGRzdCAhPSBwdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQkJZXJyKCJkc3QhPXB1cmItPmFjdHVhbF9sZW5ndGg6JWQhPSVkIiwgZHN0LCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CkBAIC0yODksNyArMjg5LDcgQEAKIAl9CiAKIAlpZiggcmV0ID09IC1FUElQRSApIHsKLQkJd2FybigiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uIik7CisJCWRldl93YXJuKCZzLT51c2JkZXYtPmRldiwgIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLlxuIik7CiAJCWlmKHVzYl9jbGVhcl9oYWx0KHMtPnVzYmRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSkpCiAJCQllcnIoInJlcXVlc3QgZmFpbGVkIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGMyMWFmMzEuLmU0OGZiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgImdzcGNhIgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDAzLDcgKzQwNCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlQREVCVUcoRF9TVFJFQU0sICJraWxsIHRyYW5zZmVyIik7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9OVVJCUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVVJCUzsgaSsrKSB7CiAJCXVyYiA9IGdzcGNhX2Rldi0+dXJiW2ldOwogCQlpZiAodXJiID09IE5VTEwpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA0Nzc5ZGQwLi4xZDlkYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBHU1BDQVYyX0gKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oCmluZGV4IGM3ODZkN2QuLjFhMzdhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMjUsMzMgKzI1LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jdW5kZWYgUERFQlVHCi0jdW5kZWYgaW5mbwotI3VuZGVmIGVycgotCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgXAotCWZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgXAotCWZvcm1hdCAiXG4iICwgIyMgYXJnKQotCi0vKiBEZWJ1ZyBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIERCR19JTklUIDB4MQotI2RlZmluZSBEQkdfUFJPQkUgMHgyCi0jZGVmaW5lIERCR19WNEwyIDB4NAotI2RlZmluZSBEQkdfVFJBQ0UgMHg4Ci0jZGVmaW5lIERCR19EQVRBIDB4MTAKLSNkZWZpbmUgREJHX1Y0TDJfQ0lEIDB4MjAKLSNkZWZpbmUgREJHX0dTUENBIDB4NDAKLQotI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAobTU2MDJfZGVidWcgJiBsZXZlbCkgICAgIFwKLQkJCWluZm8oIlslczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXyAsIFwKLQkJCSMjIGFyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAjZGVmaW5lIE01NjAyX1hCX1NFTlNPUl9UWVBFIDB4MDAKICNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX0NUUkwgMHgwMQogI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0ggMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwppbmRleCAxOWQ1ZTM1Li5mZDZjZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKLS8qCisgLyoKICAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0yNiw3ICsyNiw2IEBACiBpbnQgZm9yY2Vfc2Vuc29yOwogaW50IGR1bXBfYnJpZGdlOwogaW50IGR1bXBfc2Vuc29yOwotdW5zaWduZWQgaW50IG01NjAyX2RlYnVnOwogCiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtNTYwMl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQwMiwgMHg1NjAyKX0sCkBAIC00OCw3ICs0Nyw3IEBACiAJCQkgICAgICAxLCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOwogCSppMmNfZGF0YSA9IGJ1ZlswXTsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIGJyaWRnZSByZWdpc3RlciAweCV4IGNvbnRhaW5pbmcgMHgleCIsCisJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggY29udGFpbmluZyAweCV4IiwKIAkgICAgICAgYWRkcmVzcywgKmkyY19kYXRhKTsKIAogCS8qIHVzYl9jb250cm9sX21zZyguLi4pIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IHVwb24gc3VjY2VzcywKQEAgLTYzLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwogCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJXcml0aW5nIGJyaWRnZSByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKIAkgICAgICAgYWRkcmVzcywgaTJjX2RhdGEpOwogCiAJbWVtY3B5KGJ1ZiwgYnJpZGdlX3VyYl9za2VsZXRvbiwKQEAgLTkxLDcgKzkwLDggQEAKIAkJbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIGksICZ2YWwpOwogCQlpbmZvKCJBTGkgbTU2MDIgYWRkcmVzcyAweCV4IGNvbnRhaW5zIDB4JXgiLCBpLCB2YWwpOwogCX0KLQlpbmZvKCJXYXJuaW5nOiBUaGUgY2FtZXJhIHByb2JhYmx5IHdvbid0IHdvcmsgdW50aWwgaXQncyBwb3dlciBjeWNsZWQiKTsKKwlpbmZvKCJXYXJuaW5nOiBUaGUgQUxpIG01NjAyIHdlYmNhbSBwcm9iYWJseSB3b24ndCB3b3JrICIKKwkJInVudGlsIGl0J3MgcG93ZXIgY3ljbGVkIik7CiB9CiAKIHN0YXRpYyBpbnQgbTU2MDJfcHJvYmVfc2Vuc29yKHN0cnVjdCBzZCAqc2QpCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVFJBQ0UsICJJbml0aWFsaXppbmcgQUxpIG01NjAyIHdlYmNhbSIpOworCVBERUJVRyhEX0NPTkYsICJJbml0aWFsaXppbmcgQUxpIG01NjAyIHdlYmNhbSIpOwogCS8qIFJ1biB0aGUgaW5pdCBzZXF1ZW5jZSAqLwogCWVyciA9IHNkLT5zZW5zb3ItPmluaXQoc2QpOwogCkBAIC0xNDYsMTYgKzE0NiwxOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisJaW50IGVycjsKIAogCS8qIFNlbmQgc3RhcnQgY29tbWFuZCB0byB0aGUgY2FtZXJhICovCiAJY29uc3QgdTggYnVmZmVyWzRdID0gezB4MTMsIDB4ZjksIDB4MGYsIDB4MDF9OwogCW1lbWNweShidWYsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCTB4MDQsIDB4NDAsIDB4MTksIDB4MDAwMCwgYnVmLAotCQkJNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwgMHgwMDAwLCBidWYsCisJCQkgICAgICA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOwogCi0JUERFQlVHKERCR19WNEwyLCAiVHJhbnNmZXIgc3RhcnRlZCIpOwotCXJldHVybiAwOworCVBERUJVRyhEX1NUUkVBTSwgIlRyYW5zZmVyIHN0YXJ0ZWQiKTsKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAogc3RhdGljIHZvaWQgbTU2MDJfdXJiX2NvbXBsZXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE2NSwxNCArMTY3LDE0IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJaWYgKGxlbiA8IDYpIHsKLQkJUERFQlVHKERCR19EQVRBLCAiUGFja2V0IGlzIGxlc3MgdGhhbiA2IGJ5dGVzIik7CisJCVBERUJVRyhEX1BBQ0ssICJQYWNrZXQgaXMgbGVzcyB0aGFuIDYgYnl0ZXMiKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEZyYW1lIGRlbGltaXRlcjogZmYgeHggeHggeHggZmYgZmYgKi8KIAlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbNF0gPT0gMHhmZiAmJiBkYXRhWzVdID09IDB4ZmYgJiYKIAkgICAgZGF0YVsyXSAhPSBzZC0+ZnJhbWVfaWQpIHsKLQkJUERFQlVHKERCR19EQVRBLCAiRnJhbWUgZGVsaW1pdGVyIGRldGVjdGVkIik7CisJCVBERUJVRyhEX0ZSQU0sICJGcmFtZSBkZWxpbWl0ZXIgZGV0ZWN0ZWQiKTsKIAkJc2QtPmZyYW1lX2lkID0gZGF0YVsyXTsKIAogCQkvKiBSZW1vdmUgdGhlIGV4dHJhIGZsdWZmIGFwcGVuZGVkIG9uIGVhY2ggaGVhZGVyICovCkBAIC0xODcsNyArMTg5LDcgQEAKIAkJLyogQ3JlYXRlIGEgbmV3IGZyYW1lICovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CiAKLQkJUERFQlVHKERCR19WNEwyLCAiU3RhcnRpbmcgbmV3IGZyYW1lICVkIiwKKwkJUERFQlVHKERfRlJBTSwgIlN0YXJ0aW5nIG5ldyBmcmFtZSAlZCIsCiAJCSAgICAgICBzZC0+ZnJhbWVfY291bnQpOwogCiAJfSBlbHNlIHsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCQlsZW4gLT0gNDsKIAogCQlpZiAoY3VyX2ZyYW1lX2xlbiArIGxlbiA8PSBmcmFtZS0+djRsMl9idWYubGVuZ3RoKSB7Ci0JCQlQREVCVUcoREJHX0RBVEEsICJDb250aW51aW5nIGZyYW1lICVkIGNvcHlpbmcgJWQgYnl0ZXMiLAorCQkJUERFQlVHKERfRlJBTSwgIkNvbnRpbnVpbmcgZnJhbWUgJWQgY29weWluZyAlZCBieXRlcyIsCiAJCQkgICAgICAgc2QtPmZyYW1lX2NvdW50LCBsZW4pOwogCiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLApAQCAtMjM0LDggKzIzNiw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX0dTUENBLCAibTU2MDJfY29uZmlndXJlIHN0YXJ0Iik7Ci0KIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJY2FtLT5lcGFkZHIgPSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSAmc2RfZGVzYzsKQEAgLTI0OCwxMSArMjQ4LDEwIEBACiAJaWYgKGVycikKIAkJZ290byBmYWlsOwogCi0JUERFQlVHKERCR19HU1BDQSwgIm01NjAyX2NvbmZpZ3VyZSBlbmQiKTsKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlQREVCVUcoREJHX0dTUENBLCAibTU2MDJfY29uZmlndXJlIGZhaWxlZCIpOworCVBERUJVRyhEX0VSUiwgIkFMaSBtNTYwMiB3ZWJjYW0gZmFpbGVkIik7CiAJY2FtLT5jYW1fbW9kZSA9IE5VTEw7CiAJY2FtLT5ubW9kZXMgPSAwOwogCkBAIC0yODIsMTMgKzI4MSwxMyBAQAogewogCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLTE7Ci0JUERFQlVHKERfUFJPQkUsICJtNTYwMiBtb2R1bGUgcmVnaXN0ZXJlZCIpOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQogc3RhdGljIHZvaWQgX19leGl0IG1vZF9tNTYwMl9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7Ci0JUERFQlVHKERfUFJPQkUsICJtNTYwMiBtb2R1bGUgZGVyZWdpc3RlcmVkIik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKIH0KIAogbW9kdWxlX2luaXQobW9kX201NjAyX2luaXQpOwpAQCAtMjk3LDkgKzI5Niw2IEBACiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgbTU2MDJfZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInRvZ2dsZXMgZGVidWcgb24vb2ZmIik7Ci0KIG1vZHVsZV9wYXJhbShmb3JjZV9zZW5zb3IsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9zZW5zb3IsCiAJCSJmb3JjZSBkZXRlY3Rpb24gb2Ygc2Vuc29yLCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCmluZGV4IDU2NmQ0OTIuLmZiNzAwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMDcsNyArMTA3LDcgQEAKIAllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCiAJCQkJICBkYXRhLCAyKTsKIAkqdmFsID0gZGF0YVswXSAmIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQAogCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOwogCiAJLyogU2V0IHRoZSBjb3JyZWN0IHBhZ2UgbWFwICovCiAJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfUEFHRV9NQVAsIGRhdGEsIDIpOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLAogCQkJCSAgZGF0YSwgMik7CiAJKnZhbCA9IGRhdGFbMF0gJiBNVDlNMTExX1JNQl9NSVJST1JfQ09MUzsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMTU2LDcgKzE1Niw3IEBACiAJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOwogCiAJLyogU2V0IHRoZSBjb3JyZWN0IHBhZ2UgbWFwICovCiAJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfUEFHRV9NQVAsIGRhdGEsIDIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJICAgICAgKCh0bXAgJiAoMSA8PCAgOCkpICogMikgfAogCSAgICAgICAodG1wICYgMHg3Zik7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCWRhdGFbMV0gPSAodG1wICYgMHhmZjAwKSA+PiA4OwogCWRhdGFbMF0gPSAodG1wICYgMHhmZik7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKKwlQREVCVUcoRF9WNEwyLCAidG1wPSVkLCBkYXRhWzFdPSVkLCBkYXRhWzBdPSVkIiwgdG1wLAogCSAgICAgICBkYXRhWzFdLCBkYXRhWzBdKTsKIAogCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLApAQCAtMjU3LDcgKzI1Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbiAmJiAhZXJyOyBpKyspIHsKIAkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CiAKLQkJUERFQlVHKERCR19UUkFDRSwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKIAkJICAgICAgICIweCV4IGNvbnRhaW5zIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiBvdXQ6CkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaAppbmRleCA3OWE1ZDg4Li4zMTUyMDlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgbXQ5bTExMSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTgyLDcgKzgyLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IG10OW0xMTFfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBzZCAqc2QpOwpAQCAtMTUyLDggKzE1MSw4IEBACiAJCQkuZGVmYXVsdF92YWx1ZSAgPSBERUZBVUxUX0dBSU4sCiAJCQkuZmxhZ3MgICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKIAkJfSwKLQkJLnNldCA9IG10OW0xMTFfc2V0X2hmbGlwLAotCQkuZ2V0ID0gbXQ5bTExMV9nZXRfaGZsaXAKKwkJLnNldCA9IG10OW0xMTFfc2V0X2dhaW4sCisJCS5nZXQgPSBtdDltMTExX2dldF9nYWluCiAJfQogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCmluZGV4IDMxYzU4OTYuLjgzN2M3ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgb3Y5NjUwIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtNDAsNyArNDAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKIAotCQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgogCQkJCSIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwogCX0KIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTcyLDcgKzcyLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApAQCAtMTk5LDcgKzE5OSw3IEBACiAJCWdvdG8gb3V0OwogCSp2YWwgfD0gKGkyY19kYXRhICYgMHgzZikgPDwgMTA7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCBleHBvc3VyZSB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsCiAJICAgICAgIHZhbCAmIDB4ZmZmZik7CiAKIAkvKiBUaGUgNiBNU0JzICovCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CiAJKnZhbCB8PSBpMmNfZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCkBAIC0yODAsNyArMjgwLDcgQEAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9SRUQsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IGkyY19kYXRhOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yOTEsNyArMjkxLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IHJlZCBnYWluIHRvICVkIiwKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwKIAkJCSAgICAgdmFsICYgMHhmZik7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CkBAIC0zMDksNyArMzA5LDcgQEAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0zMjAsNyArMzIwLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBibHVlIGdhaW4gdG8gJWQiLAogCSAgICAgICB2YWwgJiAweGZmKTsKIAogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKQEAgLTM0MCw3ICszNDAsNyBAQAogCQkqdmFsID0gKChpMmNfZGF0YSAmIE9WOTY1MF9IRkxJUCkgPj4gNSkgPyAwIDogMTsKIAllbHNlCiAJCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDU7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTM1MSw3ICszNTEsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zNzksNyArMzc5LDcgQEAKIAkJKnZhbCA9ICgoaTJjX2RhdGEgJiAweDEwKSA+PiA0KSA/IDAgOiAxOwogCWVsc2UKIAkJKnZhbCA9IChpMmNfZGF0YSAmIDB4MTApID4+IDQ7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMzkwLDcgKzM5MCw3IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOwogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNDIwLDcgKzQyMCw3IEBACiAKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTQzMSw3ICs0MzEsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCAmIDB4M2ZmKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwgJiAweDNmZik7CiAKIAkvKiBSZWFkIHRoZSBPVjk2NTBfVlJFRiByZWdpc3RlciBmaXJzdCB0byBhdm9pZAogCQljb3JydXB0aW5nIHRoZSBWUkVGIGhpZ2ggYW5kIGxvdyBiaXRzICovCkBAIC00NjEsNyArNDYxLDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BV0JfRU4pID4+IDE7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CiAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgYXV0byB3aGl0ZSBiYWxhbmNlIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gd2hpdGUgYmFsYW5jZSB0byAlZCIsIHZhbCk7CiAJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC00OTEsNyArNDkxLDcgQEAKIAogCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BR0NfRU4pID4+IDI7Ci0JUERFQlVHKERCR19WNEwyX0NJRCwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBhdXRvIGdhaW4gY29udHJvbCAlZCIsICp2YWwpOwogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC01MDIsNyArNTAyLDcgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKIAllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCmluZGV4IDJmMjljYjAuLjA2NTYzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBvdjk2NTAgc2Vuc29yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMjEsNyArMTIxLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IG92OTY1MF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKIGludCBvdjk2NTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCmluZGV4IDA4YzAxNWJkLi5kMTdhYzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgcG8xMDMwIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChjKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChjKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtODIsNyArODIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKIAotCQlQREVCVUcoREJHX1RSQUNFLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgogCQkJCSIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwogCX0KIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTExMiw3ICsxMTIsNyBAQAogCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKIAkJcFszXSA9IGkyY19kYXRhW2ldOwogCQlwICs9IDQ7Ci0JCVBERUJVRyhEQkdfVFJBQ0UsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCiAJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CiAJfQogCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsIHw9IGkyY19kYXRhOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIkV4cG9zdXJlIHJlYWQgYXMgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiRXhwb3N1cmUgcmVhZCBhcyAlZCIsICp2YWwpOwogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMTk2LDEwICsxOTYsMTAgQEAKIAl1OCBpMmNfZGF0YTsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkIiwgdmFsICYgMHhmZmZmKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkIiwgdmFsICYgMHhmZmZmKTsKIAogCWkyY19kYXRhID0gKCh2YWwgJiAweGZmMDApID4+IDgpOwotCVBERUJVRyhEQkdfVjRMMiwgIlNldCBleHBvc3VyZSB0byBoaWdoIGJ5dGUgdG8gMHgleCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byBoaWdoIGJ5dGUgdG8gMHgleCIsCiAJICAgICAgIGkyY19kYXRhKTsKIAogCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19ILApAQCAtMjA4LDcgKzIwOCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaTJjX2RhdGEgPSAodmFsICYgMHhmZik7Ci0JUERFQlVHKERCR19WNEwyLCAiU2V0IGV4cG9zdXJlIHRvIGxvdyBieXRlIHRvIDB4JXgiLAorCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gbG93IGJ5dGUgdG8gMHgleCIsCiAJICAgICAgIGkyY19kYXRhKTsKIAllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfTSwKIAkJCQkgICZpMmNfZGF0YSwgMSk7CkBAIC0yMjYsNyArMjI2LDcxIEBACiAJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCiAJCQkJICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IGkyY19kYXRhOwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGdsb2JhbCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2xvYmFsIGdhaW4gJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICZpMmNfZGF0YSwgMSk7CisKKwkqdmFsID0gKGkyY19kYXRhID4+IDcpICYgMHgwMSA7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBoZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCBoZmxpcCAlZCIsIHZhbCk7CisKKwlpMmNfZGF0YSA9ICh2YWwgJiAweDAxKSA8PCA3OworCisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCisJCQkJICZpMmNfZGF0YSwgMSk7CisKKwkqdmFsID0gKGkyY19kYXRhID4+IDYpICYgMHgwMTsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZmbGlwICVkIiwgdmFsKTsKKworCWkyY19kYXRhID0gKHZhbCAmIDB4MDEpIDw8IDY7CisKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjM4LDcgKzMwMiw3IEBACiAJaW50IGVycjsKIAogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKLQlQREVCVUcoREJHX1Y0TDIsICJTZXQgZ2xvYmFsIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CisJUERFQlVHKERfVjRMMiwgIlNldCBnbG9iYWwgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKIAllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwpAQCAtMjUzLDcgKzMxNyw3IEBACiAJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX1JFRF9HQUlOLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHJlZCBnYWluICVkIiwgKnZhbCk7CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CiAKQEAgLTI2NCw3ICszMjgsNyBAQAogCWludCBlcnI7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7Ci0JUERFQlVHKERCR19WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwgaTJjX2RhdGEpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgcmVkIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CiAJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKIAkJCQkgICZpMmNfZGF0YSwgMSk7CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0yNzksNyArMzQzLDcgQEAKIAllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKIAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMjkwLDcgKzM1NCw3IEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7Ci0JUERFQlVHKERCR19WNEwyLCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKIAllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwKIAkJCQkgICZpMmNfZGF0YSwgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCmluZGV4IDY4ZjM0YzkuLmEwYjc1ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaApAQCAtMSw4ICsxLDcgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIHRoZSBwbzEwMzAgc2Vuc29yLgotICogVGhpcyBpcyBwcm9iYWJseSBhIHBpeGVsIHBsdXMgc2Vuc29yIGJ1dCB3ZSBoYXZlbid0IGlkZW50aWZpZWQgaXQgeWV0CiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KICAqCkBAIC0xMDksMTAgKzEwOCwxMyBAQAogI2RlZmluZSBQTzEwMzBfUkVHX1lDT05UUkFTVAkJMHg3NAogI2RlZmluZSBQTzEwMzBfUkVHX1lTQVRVUkFUSU9OCQkweDc1CiAKKyNkZWZpbmUgUE8xMDMwX0hGTElQCQkJKDEgPDwgNykKKyNkZWZpbmUgUE8xMDMwX1ZGTElQCQkJKDEgPDwgNikKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFBPMTAzMF9HTE9CQUxfR0FJTl9ERUZBVUxUCTB4MTIKLSNkZWZpbmUgUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQJCTB4ZjBmZgorI2RlZmluZSBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVAkJMHgwMDg1CiAjZGVmaW5lIFBPMTAzMF9CTFVFX0dBSU5fREVGQVVMVCAJMHg0MAogI2RlZmluZSBQTzEwMzBfUkVEX0dBSU5fREVGQVVMVCAJMHg0MAogCkBAIC0xMjEsNyArMTIzLDYgQEAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CiBleHRlcm4gaW50IGR1bXBfc2Vuc29yOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtNTYwMl9kZWJ1ZzsKIAogaW50IHBvMTAzMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKIGludCBwbzEwMzBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKQEAgLTE0Miw2ICsxNDMsMTAgQEAKIGludCBwbzEwMzBfc2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIGludCBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogaW50IHBvMTAzMF9zZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHBvMTAzMF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogCiBzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBwbzEwMzAgPSB7CiAJLm5hbWUgPSAiUE8xMDMwIiwKQEAgLTE1Miw3ICsxNTcsNyBAQAogCS5pbml0ID0gcG8xMDMwX2luaXQsCiAJLnBvd2VyX2Rvd24gPSBwbzEwMzBfcG93ZXJfZG93biwKIAotCS5uY3RybHMgPSA0LAorCS5uY3RybHMgPSA2LAogCS5jdHJscyA9IHsKIAl7CiAJCXsKQEAgLTE2MCw3ICsxNjUsNyBAQAogCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZSAJCT0gImdhaW4iLAogCQkJLm1pbmltdW0gCT0gMHgwMCwKLQkJCS5tYXhpbXVtIAk9IDB4ZmYsCisJCQkubWF4aW11bSAJPSAweDRmLAogCQkJLnN0ZXAgCQk9IDB4MSwKIAkJCS5kZWZhdWx0X3ZhbHVlIAk9IFBPMTAzMF9HTE9CQUxfR0FJTl9ERUZBVUxULAogCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCkBAIC0xNzMsNyArMTc4LDcgQEAKIAkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkJLm5hbWUgCQk9ICJleHBvc3VyZSIsCiAJCQkubWluaW11bSAJPSAweDAwLAotCQkJLm1heGltdW0gCT0gMHhmZmZmLAorCQkJLm1heGltdW0gCT0gMHgwMmZmLAogCQkJLnN0ZXAgCQk9IDB4MSwKIAkJCS5kZWZhdWx0X3ZhbHVlIAk9IFBPMTAzMF9FWFBPU1VSRV9ERUZBVUxULAogCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCkBAIC0yMDYsOCArMjExLDMzIEBACiAJCX0sCiAJCS5zZXQgPSBwbzEwMzBfc2V0X2JsdWVfYmFsYW5jZSwKIAkJLmdldCA9IHBvMTAzMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMCwKKwkJfSwKKwkJLnNldCA9IHBvMTAzMF9zZXRfaGZsaXAsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X2hmbGlwCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gInZlcnRpY2FsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAsCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gcG8xMDMwX2dldF92ZmxpcAogCX0KIAl9LAorCiAJLm5tb2RlcyA9IDEsCiAJLm1vZGVzID0gewogCXsKQEAgLTM4MSw3ICs0MTEsNyBAQAogCiAJLyogU2V0IHRoZSB5IHdpbmRvdyB0byAxICovCiAJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dZX0gsIDB4MDB9LAotCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWF9MLCAweDAxfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1lfTCwgMHgwMX0sCiAKIAl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1dJRFRIX0gsIDB4MDJ9LAogCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XV0lEVEhfTCwgMHg4N30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCA2ODIwMjU2Li4xNGIxZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgczVrNGFhIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtMTE3LDcgKzExNyw3IEBACiAJZm9yIChpID0gMDsgKGkgPCBsZW4pICYgIWVycjsgaSsrKSB7CiAJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOwogCi0JCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCiAJCQkJICAiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiBvdXQ6CkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CiAJCXBbM10gPSBpMmNfZGF0YVtpXTsKIAkJcCArPSA0OwotCQlQREVCVUcoREJHX1RSQUNFLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAogCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwogCX0KIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAJKnZhbCA9IGRhdGEgPDwgODsKIAllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9MTywgJmRhdGEsIDEpOwogCSp2YWwgfD0gZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CkBAIC0yNTksNyArMjU5LDcgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgZXhwb3N1cmUgdG8gJWQiLCB2YWwpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLCB2YWwpOwogCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAkqdmFsID0gKGRhdGEgJiBTNUs0QUFfUk1fVl9GTElQKSA+PiA3OwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKIG91dDoKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JUERFQlVHKERCR19WNEwyX0NJRCwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOwogCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTM0MSw3ICszNDEsNyBAQAogCiAJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAkqdmFsID0gKGRhdGEgJiBTNUs0QUFfUk1fSF9GTElQKSA+PiA2OwotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogb3V0OgogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBACiAJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOwogCWludCBlcnI7CiAKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsCisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLAogCSAgICAgICB2YWwpOwogCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQpAQCAtMzk3LDcgKzM5Nyw3IEBACiAKIAllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKIAkqdmFsID0gZGF0YTsKLQlQREVCVUcoREJHX1Y0TDJfQ0lELCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCiBvdXQ6CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC00MDksNyArNDA5LDcgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCVBERUJVRyhEQkdfVjRMMl9DSUQsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCBnYWluIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaAppbmRleCBiYjdmN2UzLi5lYWVmNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgczVrNGFhIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtNjMsNyArNjMsNiBAQAogLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKIGV4dGVybiBpbnQgZHVtcF9zZW5zb3I7Ci1leHRlcm4gdW5zaWduZWQgaW50IG01NjAyX2RlYnVnOwogCiBpbnQgczVrNGFhX3Byb2JlKHN0cnVjdCBzZCAqc2QpOwogaW50IHM1azRhYV9pbml0KHN0cnVjdCBzZCAqc2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKaW5kZXggYjRiMzNjMi4uODk4OGE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgdGhlIHM1azgzYSBzZW5zb3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKQEAgLTEwMSw3ICsxMDEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW4gJiYgIWxlbjsgaSsrKSB7CiAJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOwogCi0JCVBERUJVRyhEQkdfVFJBQ0UsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCiAJCQkJICAiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKIAl9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKIAkJcFszXSA9IGkyY19kYXRhW2ldOwogCQlwICs9IDQ7Ci0JCVBERUJVRyhEQkdfVFJBQ0UsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCiAJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaAppbmRleCA4MzM3MDhlLi5lZTNlZTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRHJpdmVyIGZvciB0aGUgczVrODNhIHNlbnNvcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHJlbgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgogICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgogICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CiAgKgpAQCAtNDEsOCArNDEsNiBAQAogLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKIGV4dGVybiBpbnQgZHVtcF9zZW5zb3I7Ci1leHRlcm4gdW5zaWduZWQgaW50IG01NjAyX2RlYnVnOwotCiAKIGludCBzNWs4M2FfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgczVrODNhX2luaXQoc3RydWN0IHNkICpzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaAppbmRleCA5MzBmY2FhLi42MGM5YTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogVVNCIERyaXZlciBmb3IgQUxpIG01NjAyIGJhc2VkIHdlYmNhbXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KICAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KICAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggYjU2MWY3Yy4uZWFjMjQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogCV9fdTggc2Vuc29yOwogI2RlZmluZSBTRU5TT1JfVEFTNTEzMEEgMAotI2RlZmluZSBTRU5TT1JfT1RIRVIgMQorI2RlZmluZSBTRU5TT1JfT002ODAyIDEKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTE4OCw3ICsxODgsNyBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAxLAorCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldHdoaXRlYmFsYW5jZSwKIAkgLmdldCA9IHNkX2dldHdoaXRlYmFsYW5jZQpAQCAtMjYxLDYgKzI2MSw1OSBAQAogCQkucHJpdiA9IDB9LAogfTsKIAorLyogc2Vuc29yIHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHsKKwljb25zdCBfX3U4IGRhdGExWzIwXTsKKwljb25zdCBfX3U4IGRhdGEyWzE4XTsKKwljb25zdCBfX3U4IGRhdGEzWzE4XTsKKwljb25zdCBfX3U4IGRhdGE0WzRdOworCWNvbnN0IF9fdTggZGF0YTVbNl07CisJY29uc3QgX191OCBzdHJlYW1bNF07Cit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKKyAgICB7CQkJCS8qIFRBUzUxMzBBICovCisJLmRhdGExID0KKwkJezB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsCisJCSAweGQ0LCAweGJiLCAweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAorCQkgMHhkOCwgMHhjOCwgMHhkOSwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsCisJCSAweGU0LCAweGE4LCAweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAorCQkgMHhlOCwgMHhlMH0sCisJLmRhdGEzID0KKwkJezB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsCisJCSAweGNiLCAweGE4LCAweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAorCQkgMHhjZiwgMHhlMH0sCisJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KKwkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAorCS5kYXRhNSA9CisJCXsweDBjLCAweDAzLCAweGFiLCAweDEwLCAweDgxLCAweDIwfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAorICAgIH0sCisgICAgewkJCQkvKiBPTTY4MDIgKi8KKwkuZGF0YTEgPQorCQl7MHhkMCwgMHhjMiwgMHhkMSwgMHgyOCwgMHhkMiwgMHgwZiwgMHhkMywgMHgyMiwKKwkJIDB4ZDQsIDB4Y2QsIDB4ZDUsIDB4MjcsIDB4ZDYsIDB4MmMsIDB4ZDcsIDB4MDYsCisJCSAweGQ4LCAweGIzLCAweGQ5LCAweGZjfSwKKwkuZGF0YTIgPQorCQl7MHhlMCwgMHg4MCwgMHhlMSwgMHhmZiwgMHhlMiwgMHhmZiwgMHhlMywgMHg4MCwKKwkJIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4ZmYsIDB4ZTYsIDB4ODAsIDB4ZTcsIDB4ZmYsCisJCSAweGU4LCAweGZmfSwKKwkuZGF0YTMgPQorCQl7MHhjNywgMHg4MCwgMHhjOCwgMHhmZiwgMHhjOSwgMHhmZiwgMHhjYSwgMHg4MCwKKwkJIDB4Y2IsIDB4ZmYsIDB4Y2MsIDB4ZmYsIDB4Y2QsIDB4ODAsIDB4Y2UsIDB4ZmYsCisJCSAweGNmLCAweGZmfSwKKwkuZGF0YTQgPQkvKkZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCisJCXsweDY2LCAweGNhLCAweGE4LCAweGYwIH0sCisJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCisJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAorICAgIH0KK307CisKICNkZWZpbmUgTUFYX0VGRkVDVFMgNwogLyogZWFzaWx5IGRvbmUgYnkgc29mdCwgdGhpcyB0YWJsZSBjb3VsZCBiZSByZW1vdmVkLAogICogaSBrZWVwIGl0IGhlcmUganVzdCBpbiBjYXNlICovCkBAIC0zNjUsNiArNDE4LDggQEAKIAl7fSwKIH07CiAKK3N0YXRpYyBfX3U4IHNlbnNvcl9yZXNldFtdID0gezB4NjEsIDB4NjgsIDB4NjIsIDB4ZmYsIDB4NjAsIDB4MDd9OworCiAvKiByZWFkIDEgYnl0ZSAqLwogc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgIF9fdTE2IGluZGV4KQpAQCAtMzg1LDEyICs0NDAsMTIgQEAKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJMCwKLQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LAogCQkJTlVMTCwgMCwgNTAwKTsKIH0KIAotc3RhdGljIHZvaWQgaTJjX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBjb25zdCBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbikKIHsKIAlpZiAobGVuIDw9IFVTQl9CVUZfU1opIHsKQEAgLTM5OCw3ICs0NTMsNyBAQAogCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCQkwLAotCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJCTB4MDEsIDAsCiAJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7CiAJfSBlbHNlIHsKQEAgLTQwOSwxNCArNDY0LDE1IEBACiAJCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJCTAsCi0JCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkJMHgwMSwgMCwKIAkJCQl0bXBidWYsIGxlbiwgNTAwKTsKIAkJa2ZyZWUodG1wYnVmKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG90aGVyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKKy8qIFJlcG9ydGVkIGFzIE9NNjgwMiovCitzdGF0aWMgdm9pZCBvbTY4MDJfc2Vuc29yX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBpOwogCWNvbnN0IF9fdTggKnA7CkBAIC00MzYsMTkgKzQ5MiwzMiBAQAogCQkweDkwLCAweDI0LAogCQkweDkxLCAweGIyLAogCQkweDgyLCAweDMyLAotCQkweGZkLCAweDAwLAotCQkweGZkLCAweDAxLAogCQkweGZkLCAweDQxLAogCQkweDAwCQkJLyogdGFibGUgZW5kICovCiAJfTsKIAorCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7CisJbXNsZWVwKDUpOworCWkgPSA0OworCXdoaWxlICgtLWkgPCAwKSB7CisJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CisJCWlmICghKGJ5dGUgJiAweDAxKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisJYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwlpZiAoYnl0ZSAhPSAweDE3KSB7CisJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgYnl0ZSk7CisJCS8qIGNvbnRpbnVlPyAqLworCX0KKwogCXAgPSBzZW5zb3JfaW5pdDsKIAl3aGlsZSAoKnAgIT0gMCkgewogCQl2YWxbMV0gPSAqcCsrOwogCQl2YWxbM10gPSAqcCsrOwogCQlpZiAoKnAgPT0gMCkKIAkJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKLQkJaTJjX3coZ3NwY2FfZGV2LCB2YWwsIHNpemVvZiB2YWwpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB2YWwsIHNpemVvZiB2YWwpOwogCQlpID0gNDsKIAkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQltc2xlZXAoMTUpOwpAQCAtNDU3LDcgKzUyNiw4IEBACiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0JCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CisJbXNsZWVwKDE1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KQEAgLTQ4NSwxMiArNTU1LDc1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKKwlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsKKworCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKKwlpZiAoYnJpZ2h0bmVzcyA8IDcpIHsKKwkJc2V0NlsxXSA9IDB4MjY7CisJCXNldDZbM10gPSAweDcwIC0gYnJpZ2h0bmVzcyAqIDB4MTA7CisJfSBlbHNlIHsKKwkJc2V0NlszXSA9IDB4MDAgKyAoKGJyaWdodG5lc3MgLSA3KSAqIDB4MTApOworCX0KKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNldDYsIHNpemVvZiBzZXQ2KTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgY29udHJhc3QgPSBzZC0+Y29udHJhc3Q7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJaWYgKGNvbnRyYXN0IDwgNykKKwkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gY29udHJhc3QgKiAweDIwMDsKKwllbHNlCisJCXJlZ190b193cml0ZSA9IDB4MDBhOSArIChjb250cmFzdCAtIDcpICogMHgyMDA7CisKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTE2IHJlZ190b193cml0ZTsKKworCXJlZ190b193cml0ZSA9IDB4ODBiYiArIHNkLT5jb2xvcnMgKiAweDEwMDsJLyogd2FzIDB4YzAgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlQREVCVUcoRF9DT05GLCAiR2FtbWE6ICVkIiwgc2QtPmdhbW1hKTsKLQlpMmNfdyhnc3BjYV9kZXYsIGdhbW1hX3RhYmxlW3NkLT5nYW1tYV0sIHNpemVvZiBnYW1tYV90YWJsZVswXSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKK30KKworc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQorCQl7MHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOH07CisKKwlpZiAoc2QtPndoaXRlYmFsYW5jZSkKKwkJd2hpdGVfYmFsYW5jZVs3XSA9IDB4M2M7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCB3aGl0ZV9iYWxhbmNlLCBzaXplb2Ygd2hpdGVfYmFsYW5jZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTE2IHJlZ190b193cml0ZTsKKworCXJlZ190b193cml0ZSA9IDB4MGFhNiArIDB4MTAwMCAqIHNkLT5zaGFycG5lc3M7CisKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwpAQCAtNTExLDggKzY0NCw2IEBACiAJCQl7MHgwOCwgMHgwMywgMHgwOSwgMHgwMywgMHgxMiwgMHgwNH07CiAJc3RhdGljIGNvbnN0IF9fdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldFtdID0KLQkJCXsgMHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwNyB9OwogCXN0YXRpYyBjb25zdCBfX3U4IG4zW10gPQogCQkJezB4NjEsIDB4NjgsIDB4NjUsIDB4MGEsIDB4NjAsIDB4MDR9OwogCXN0YXRpYyBjb25zdCBfX3U4IG40W10gPQpAQCAtNTI1LDUxICs2NTYsMjkgQEAKIAkJIDB4NjUsIDB4MGEsIDB4YmIsIDB4ODYsIDB4YWYsIDB4NTgsIDB4YjAsIDB4NjgsCiAJCSAweDg3LCAweDQwLCAweDg5LCAweDJiLCAweDhkLCAweGZmLCAweDgzLCAweDQwLAogCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NiwgMHhhZiwgMHg0Nn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDRbXSA9IHsKLQkJMHhlMCwgMHg2MCwgMHhlMSwgMHhhOCwgMHhlMiwgMHhlMCwgMHhlMywgMHg2MCwgMHhlNCwgMHhhOCwKLQkJMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKLQkJMHhlOCwgMHhlMAotCX07Ci0JLyogb2pvIHB1ZWRlIHNlciAweGU2IGVuIHZleiBkZSAweGU5ICovCi0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDJbXSA9IHsKLQkJMHhkMCwgMHhiYiwgMHhkMSwgMHgyOCwgMHhkMiwgMHgxMCwgMHhkMywgMHgxMCwgMHhkNCwgMHhiYiwKLQkJMHhkNSwgMHgyOCwgMHhkNiwgMHgxZSwgMHhkNywgMHgyNywKLQkJMHhkOCwgMHhjOCwgMHhkOSwgMHhmYwotCX07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbWlzc2luZ1tdID0KLQkJeyAweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4IH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDNbXSA9IHsKLQkJMHhjNywgMHg2MCwgMHhjOCwgMHhhOCwgMHhjOSwgMHhlMCwgMHhjYSwgMHg2MCwgMHhjYiwgMHhhOCwKLQkJMHhjYywgMHhlMCwgMHhjZCwgMHg2MCwgMHhjZSwgMHhhOCwKLQkJMHhjZiwgMHhlMAotCX07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDVbXSA9Ci0JCQl7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsJLyogYnJpZ2h0ICovCi0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDdbNF0gPQotCQkJeyAweDY2LCAweGNhLCAweGE4LCAweGY4IH07CS8qIDUwLzYwIEh6ICovCiAJc3RhdGljIGNvbnN0IF9fdTggbnNldDlbNF0gPQogCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CiAJc3RhdGljIGNvbnN0IF9fdTggbnNldDhbNl0gPQogCQkJeyAweGE4LCAweGYwLCAweGM2LCAweDg4LCAweGMwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDEwWzZdID0KLQkJCXsgMHgwYywgMHgwMywgMHhhYiwgMHgxMCwgMHg4MSwgMHgyMCB9OwogCiAJYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNik7CiAJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKIAlpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDA3KSB7Ci0JCVBERUJVRyhEX0NPTkYsICJvdGhlciBzZW5zb3IiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVEhFUjsKKwkJUERFQlVHKERfQ09ORiwgInNlbnNvciBvbTY4MDIiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9PTTY4MDI7CisJfSBlbHNlIGlmIChieXRlID09IDB4MDggJiYgdGVzdF9ieXRlID09IDB4MDEpIHsKKwkJUERFQlVHKERfQ09ORiwgInNlbnNvciB0YXM1MTMwYSIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOwogCX0gZWxzZSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3IgJTAyeCAlMDJ4IiwgYnl0ZSwgdGVzdF9ieXRlKTsKKwkJUERFQlVHKERfQ09ORiwgInVua25vd24gc2Vuc29yICUwMnggJTAyeCIsIGJ5dGUsIHRlc3RfYnl0ZSk7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CiAJfQogCi0JaTJjX3coZ3NwY2FfZGV2LCBuMSwgc2l6ZW9mIG4xKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMSwgc2l6ZW9mIG4xKTsKIAl0ZXN0X2J5dGUgPSAwOwogCWkgPSA1OwogCXdoaWxlICgtLWkgPj0gMCkgewotCQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQsIHNpemVvZiBuc2V0KTsKLQkJbXNsZWVwKDUpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfcmVzZXQsIHNpemVvZiBzZW5zb3JfcmVzZXQpOwogCQl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2Myk7CiAJCW1zbGVlcCgxMDApOwogCQlpZiAodGVzdF9ieXRlID09IDB4MTcpCkBAIC01ODAsNyArNjg5LDcgQEAKIC8qCQlyZXR1cm4gLUVJTzsgKi8KIC8qZml4bWU6IHRlc3QgLSBjb250aW51ZSAqLwogCX0KLQlpMmNfdyhnc3BjYV9kZXYsIG4yLCBzaXplb2YgbjIpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4yLCBzaXplb2YgbjIpOwogCiAJaSA9IDA7CiAJd2hpbGUgKHJlYWRfaW5kZXhzW2ldICE9IDB4MDApIHsKQEAgLTU5MCw1OCArNjk5LDUyIEBACiAJCWkrKzsKIAl9CiAKLQlpMmNfdyhnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOwotCWkyY193KGdzcGNhX2RldiwgbjQsIHNpemVvZiBuNCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjMsIHNpemVvZiBuMyk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjQsIHNpemVvZiBuNCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwODApOwogCXJlZ193KGdzcGNhX2RldiwgMHgyYzgwKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQyLCBzaXplb2YgbnNldDIpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDMsIHNpemVvZiBuc2V0Myk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0NCwgc2l6ZW9mIG5zZXQ0KTsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOworCiAJcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwogCXJlZ193KGdzcGNhX2RldiwgMHgzODgwKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MzM4ZSk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0NSwgc2l6ZW9mIG5zZXQ1KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDBhOSk7CisKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRnYW1tYShnc3BjYV9kZXYpOwotCXJlZ193KGdzcGNhX2RldiwgMHg4NmJiKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4NGFhNik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CiAKLQlpMmNfdyhnc3BjYV9kZXYsIG1pc3NpbmcsIHNpemVvZiBtaXNzaW5nKTsKLQotCXJlZ193KGdzcGNhX2RldiwgMHgyMDg3KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4Nyk7CS8qIHRpZWQgdG8gd2hpdGUgYmFsYW5jZT8gKi8KIAlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4OCk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDIwODkpOwogCi0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0Nywgc2l6ZW9mIG5zZXQ3KTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQxMCwgc2l6ZW9mIG5zZXQxMCk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0LAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDgsIHNpemVvZiBuc2V0OCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CiAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4Mjg4MCk7Ci0JaTJjX3coZ3NwY2FfZGV2LCBuc2V0Miwgc2l6ZW9mIG5zZXQyKTsKLQlpMmNfdyhnc3BjYV9kZXYsIG5zZXQzLCBzaXplb2YgbnNldDMpOwotCWkyY193KGdzcGNhX2RldiwgbnNldDQsIHNpemVvZiBuc2V0NCk7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdW5zaWduZWQgaW50IGJyaWdodG5lc3M7Ci0JX191OCBzZXQ2WzRdID0geyAweDhmLCAweDI2LCAweGMzLCAweDAwIH07Ci0KLQlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7Ci0JaWYgKGJyaWdodG5lc3MgPCA3KSB7Ci0JCXNldDZbM10gPSAweDcwIC0gYnJpZ2h0bmVzcyAqIDB4MTA7Ci0JfSBlbHNlIHsKLQkJc2V0NlsxXSA9IDB4MjQ7Ci0JCXNldDZbM10gPSAweDAwICsgKChicmlnaHRuZXNzIC0gNykgKiAweDEwKTsKLQl9Ci0KLQlpMmNfdyhnc3BjYV9kZXYsIHNldDYsIHNpemVvZiBzZXQ2KTsKLX0KLQogc3RhdGljIHZvaWQgc2V0ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjUxLDE0ICs3NTQsMTUgQEAKIAlpZiAoc2QtPm1pcnJvcikKIAkJZmxpcGNtZFszXSA9IDB4MDE7CiAKLQlpMmNfdyhnc3BjYV9kZXYsIGZsaXBjbWQsIHNpemVvZiBmbGlwY21kKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBmbGlwY21kLCBzaXplb2YgZmxpcGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGVmZmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaTJjX3coZ3NwY2FfZGV2LCBlZmZlY3RzX3RhYmxlW3NkLT5lZmZlY3RdLCBzaXplb2YgZWZmZWN0c190YWJsZVswXSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZWZmZWN0c190YWJsZVtzZC0+ZWZmZWN0XSwKKwkJCQlzaXplb2YgZWZmZWN0c190YWJsZVswXSk7CiAJaWYgKHNkLT5lZmZlY3QgPT0gMSB8fCBzZC0+ZWZmZWN0ID09IDUpIHsKIAkJUERFQlVHKERfQ09ORiwKIAkJICAgICAgICJUaGlzIGVmZmVjdCBoYXZlIGJlZW4gZGlzYWJsZWQgZm9yIHdlYmNhbSBcInNhZmV0eVwiIik7CkBAIC02NzEsMTkgKzc3NSw2IEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHhmYWE2KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQotCSAgICB7IDB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4MzggfTsKLQotCWlmIChzZC0+d2hpdGViYWxhbmNlID09IDEpCi0JCXdoaXRlX2JhbGFuY2VbN10gPSAweDNjOwotCi0JaTJjX3coZ3NwY2FfZGV2LCB3aGl0ZV9iYWxhbmNlLCBzaXplb2Ygd2hpdGVfYmFsYW5jZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjkyLDUyICs3ODMsNDYgQEAKIAlpZiAoc2QtPmZyZXEgPT0gMikJLyogNjBoeiAqLwogCQlmcmVxWzFdID0gMHgwMDsKIAotCWkyY193KGdzcGNhX2RldiwgZnJlcSwgc2l6ZW9mIGZyZXEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGZyZXEsIHNpemVvZiBmcmVxKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorLyogSXMgdGhpcyByZWFsbHkgbmVlZGVkPworICogaSBhZGRlZCBzb21lIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciB0ZXN0IHdpdGggc29tZSB1c2VycyAqLworc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1bnNpZ25lZCBpbnQgY29udHJhc3QgPSBzZC0+Y29udHJhc3Q7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwxW10gPQorCQl7MHg2NywgMHgwNSwgMHg2OCwgMHg4MSwgMHg2OSwgMHg4MCwgMHg2YSwgMHg4MiwKKwkJIDB4NmIsIDB4NjgsIDB4NmMsIDB4NjksIDB4NzIsIDB4ZDksIDB4NzMsIDB4MzQsCisJCSAweDc0LCAweDMyLCAweDc1LCAweDkyLCAweDc2LCAweDAwLCAweDA5LCAweDAxLAorCQkgMHg2MCwgMHgxNH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDJbXSA9CisJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAorCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDNbXSA9CisJCXsweDg3LCAweDNmLCAweDg4LCAweDIwLCAweDg5LCAweDJkfTsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsNFtdID0KKwkJezB4YTYsIDB4MGEsIDB4ZWEsIDB4Y2YsIDB4YmUsIDB4MjYsIDB4YjEsIDB4NWYsCisJCSAweGExLCAweGIxLCAweGRhLCAweDZiLCAweGRiLCAweDk4LCAweGRmLCAweDBjLAorCQkgMHhjMiwgMHg4MCwgMHhjMywgMHgxMH07CiAKLQlpZiAoY29udHJhc3QgPCA3KQotCQlyZWdfdG9fd3JpdGUgPSAweDhlYTkgLSAoMHgyMDAgKiBjb250cmFzdCk7Ci0JZWxzZQotCQlyZWdfdG9fd3JpdGUgPSAoMHgwMGE5ICsgKChjb250cmFzdCAtIDcpICogMHgyMDApKTsKLQotCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOwotCi0JcmVnX3RvX3dyaXRlID0gMHhjMGJiICsgc2QtPmNvbG9ycyAqIDB4MTAwOwotCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOwotCi0JcmVnX3RvX3dyaXRlID0gMHgwYWE2ICsgMHgxMDAwICogc2QtPnNoYXJwbmVzczsKLQotCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfVEFTNTEzMEEpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDIsIHNpemVvZiBwb2xsMik7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwzLCBzaXplb2YgcG9sbDMpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsNCwgc2l6ZW9mIHBvbGw0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgbW9kZTsKLQlzdGF0aWMgY29uc3QgX191OCB0MVtdID0geyAweDY2LCAweDAwLCAweGE4LCAweGU4IH07CiAJX191OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07CiAJc3RhdGljIGNvbnN0IF9fdTggdDNbXSA9CiAJCXsgMHhiMywgMHgwNywgMHhiNCwgMHgwMCwgMHhiNSwgMHg4OCwgMHhiNiwgMHgwMiwgMHhiNywgMHgwNiwKIAkJICAweGI4LCAweDAwLCAweGI5LCAweGU3LCAweGJhLCAweDAxIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggdDRbXSA9IHsgMHgwYiwgMHgwNCwgMHgwYSwgMHg0MCB9OwogCiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS4gcHJpdjsKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTc2MCwyNSArODQ1LDI5IEBACiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBBKSB7CiAJCWkgPSAwOwogCQl3aGlsZSAodGFzNTEzMGFfc2Vuc29yX2luaXRbaV1bMF0gIT0gMCkgewotCQkJaTJjX3coZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKKwkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0W2ldLAogCQkJCQkgc2l6ZW9mIHRhczUxMzBhX3NlbnNvcl9pbml0WzBdKTsKIAkJCWkrKzsKIAkJfQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CiAJCS8qIGp1c3QgaW4gY2FzZSBhbmQgdG8ga2VlcCBzeW5jIHdpdGggbG9ncyAoZm9yIG1pbmUpICovCi0JCWkyY193KGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sCisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLAogCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CiAJfSBlbHNlIHsKLQkJb3RoZXJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKKwkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CiAJfQotCS8qIGp1c3QgaW4gY2FzZSBhbmQgdG8ga2VlcCBzeW5jIHdpdGggbG9ncyAgKGZvciBtaW5lKSAqLwotCWkyY193KGdzcGNhX2RldiwgdDEsIHNpemVvZiB0MSk7Ci0JaTJjX3coZ3NwY2FfZGV2LCB0Miwgc2l6ZW9mIHQyKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTIpOwotCWkyY193KGdzcGNhX2RldiwgdDMsIHNpemVvZiB0Myk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgdDIsIHNpemVvZiB0Mik7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgdDMsIHNpemVvZiB0Myk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTMpOwotCWkyY193KGdzcGNhX2RldiwgdDQsIHNpemVvZiB0NCk7CisJbXNsZWVwKDE1KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKKwlwb2xsX3NlbnNvcihnc3BjYV9kZXYpOworCiAJLyogcmVzdGFydCBvbiBlYWNoIHN0YXJ0LCBqdXN0IGluIGNhc2UsIHNvbWV0aW1lcyByZWdzIGdvZXMgd3JvbmcKIAkgKiB3aGVuIHVzaW5nIGNvbnRyb2xzIGZyb20gYXBwICovCiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwpAQCAtNzg3LDYgKzg3NiwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSk7CisJbXNsZWVwKDIwKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKKwltc2xlZXAoMjApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMzA5KTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0xMDM2LDYgKzExMzgsNyBAQAogCS5jb25maWcgPSBzZF9jb25maWcsCiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCBiYzI5NDM2Li4zNzMzYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvZHZiL3ZpZGVvLmg+CiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggYjc0NTdmYy4uMWM0MDRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtNjAwLDEzICs2MDAsMTQgQEAKIAlzaW5jZSB3ZSBtYXkgZ2V0IGhlcmUgYmVmb3JlIHRoZSBzdHJlYW0gaGFzIGJlZW4gZnVsbHkgc2V0LXVwICovCiAJaWYgKG1vZGUgPT0gT1VUX1lVViAmJiBzLT5xX2Z1bGwubGVuZ3RoID09IDAgJiYgaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewogCQl3aGlsZSAoY291bnQgPj0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewotCQkJaWYgKCFpdnR2X3l1dl91ZG1hX3N0cmVhbV9mcmFtZSAoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1ZikpIHsKLQkJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7Ci0JCQkJdXNlcl9idWYgKz0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKLQkJCQljb3VudCAtPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXJjID0gaXZ0dl95dXZfdWRtYV9zdHJlYW1fZnJhbWUoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1Zik7CisKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCisJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7CisJCQl1c2VyX2J1ZiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOworCQkJY291bnQgLT0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKIAkJfQogCQlpZiAoY291bnQgPT0gMCkgewogCQkJSVZUVl9ERUJVR19ISV9GSUxFKCJXcm90ZSAlZCBieXRlcyB0byAlcyAoJWQpXG4iLCBieXRlc193cml0dGVuLCBzLT5uYW1lLCBzLT5xX2Z1bGwuYnl0ZXN1c2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDg2OTY1MjcuLjIwOGZiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtNTA5LDcgKzUwOSw2IEBACiBzdGF0aWMgaW50IGl2dHZfdHJ5X2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlzMzIgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlzMzIgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CiAJaW50IGZpZWxkID0gZm10LT5mbXQucGl4LmZpZWxkOwpAQCAtNTE3LDcgKzUxNiwyMiBAQAogCiAJdyA9IG1pbih3LCA3MjApOwogCXcgPSBtYXgodywgMik7Ci0JaCA9IG1pbihoLCBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwKTsKKwkvKiBXaHkgY2FuIHRoZSBoZWlnaHQgYmUgNTc2IGV2ZW4gd2hlbiB0aGUgb3V0cHV0IGlzIE5UU0M/CisKKwkgICBJbnRlcm5hbGx5IHRoZSBidWZmZXJzIG9mIHRoZSBQVlIzNTAgYXJlIGFsd2F5cyBzZXQgdG8gNzIweDU3Ni4gVGhlCisJICAgZGVjb2RlZCB2aWRlbyBmcmFtZSB3aWxsIGFsd2F5cyBiZSBwbGFjZWQgaW4gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZgorCSAgIHRoaXMgYnVmZmVyLiBGb3IgYW55IHZpZGVvIHdoaWNoIGlzIG5vdCA3MjB4NTc2LCB0aGUgYnVmZmVyIHdpbGwKKwkgICB0aGVuIGJlIGNyb3BwZWQgdG8gcmVtb3ZlIHRoZSB1bnVzZWQgcmlnaHQgYW5kIGxvd2VyIGFyZWFzLCB3aXRoCisJICAgdGhlIHJlbWFpbmluZyBpbWFnZSBiZWluZyBzY2FsZWQgYnkgdGhlIGhhcmR3YXJlIHRvIGZpdCB0aGUgZGlzcGxheQorCSAgIGFyZWEuIFRoZSB2aWRlbyBjYW4gYmUgc2NhbGVkIGJvdGggdXAgYW5kIGRvd24sIHNvIGEgNzIweDQ4MCB2aWRlbworCSAgIGNhbiBiZSBkaXNwbGF5ZWQgZnVsbC1zY3JlZW4gb24gUEFMIGFuZCBhIDcyMHg1NzYgdmlkZW8gY2FuIGJlCisJICAgZGlzcGxheWVkIHdpdGhvdXQgY3JvcHBpbmcgb24gTlRTQy4KKworCSAgIE5vdGUgdGhhdCB0aGUgc2NhbGluZyBvbmx5IG9jY3VycyBvbiB0aGUgdmlkZW8gc3RyZWFtLCB0aGUgb3NkCisJICAgcmVzb2x1dGlvbiBpcyBsb2NrZWQgdG8gdGhlIGJyb2FkY2FzdCBzdGFuZGFyZCBhbmQgbm90IHNjYWxlZC4KKworCSAgIFRoYW5rcyB0byBJYW4gQXJtc3Ryb25nIGZvciB0aGlzIGV4cGxhbmF0aW9uLiAqLworCWggPSBtaW4oaCwgNTc2KTsKIAloID0gbWF4KGgsIDIpOwogCWlmIChpZC0+dHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYpCiAJCWZtdC0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKaW5kZXggMmZkNGI0YS4uYmFlMmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCkBAIC0zMywyNyArMzMsMjAgQEAKICAqIFYxLjEgR2VyYXJkIHYuZC4gSG9yc3QgIEFkZGVkIHNvbWUgZGVidWdvdXRwdXQsIHJlc2V0IHRoZSB2aWRlby1zdGFuZGFyZAogICovCiAKLSNpZm5kZWYgX19LRVJORUxfXwotI2RlZmluZSBfX0tFUk5FTF9fCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlICJrczAxMjcuaCIKLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlICJrczAxMjcuaCIKIAotI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50awotCi0vKiBpMmMgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK01PRFVMRV9ERVNDUklQVElPTigiS1MwMTI3IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJSeWFuIERyYWtlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgS1NfVFlQRV9VTktOT1dOCTAKICNkZWZpbmUgS1NfVFlQRV8wMTIyUwkxCkBAIC0yMDQsOCArMTk3LDYgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdW5zaWduZWQgY2hhcglhZGRyOwogCWludAkJZm9ybWF0X3dpZHRoOwogCWludAkJZm9ybWF0X2hlaWdodDsKIAlpbnQJCWNhcF93aWR0aDsKQEAgLTIyMCwxNiArMjExLDE4IEBACiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBvdXRwdXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHU4IHJlZ19kZWZhdWx0c1s2NF07CiAKLQotCiBzdGF0aWMgdm9pZCBpbml0X3JlZ19kZWZhdWx0cyh2b2lkKQogeworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOwogCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisJaW5pdGlhbGl6ZWQgPSAxOworCiAJdGFibGVbS1NfQ01EQV0gICAgID0gMHgyYzsgIC8qIFZTRT0wLCBDQ0lSIDYwMSwgYXV0b2RldGVjdCBzdGFuZGFyZCAqLwogCXRhYmxlW0tTX0NNREJdICAgICA9IDB4MTI7ICAvKiBWQUxJR049MCwgQUdDIGNvbnRyb2wgYW5kIGlucHV0ICovCiAJdGFibGVbS1NfQ01EQ10gICAgID0gMHgwMDsgIC8qIFRlc3Qgb3B0aW9ucyAqLwpAQCAtMzA4LDUwICszMDEsNTMgQEAKICAqIEFuIGV4cGxhbmF0aW9uIGZyb20ga2F5b3JrQG1haWwudXRleGFzLmVkdToKICAqCiAgKiBEdXJpbmcgSTJDIHJlYWRzLCB0aGUgS1MwMTI3IG9ubHkgc2FtcGxlcyBmb3IgYSBzdG9wIGNvbmRpdGlvbgotICogZHVyaW5nIHRoZSBwbGFjZSB3aGVyZSB0aGUgYWNrbm9sZWRnZSBiaXQgc2hvdWxkIGJlLiBBbnkgc3RhbmRhcmQKKyAqIGR1cmluZyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGFja25vd2xlZGdlIGJpdCBzaG91bGQgYmUuIEFueSBzdGFuZGFyZAogICogSTJDIGltcGxlbWVudGF0aW9uIChjb3JyZWN0bHkpIHRocm93cyBpbiBhbm90aGVyIGNsb2NrIHRyYW5zaXRpb24KICAqIGF0IHRoZSA5dGggYml0LCBhbmQgdGhlIEtTMDEyNyB3aWxsIG5vdCByZWNvZ25pemUgdGhlIHN0b3AgY29uZGl0aW9uCiAgKiBhbmQgd2lsbCBjb250aW51ZSB0byBjbG9jayBvdXQgZGF0YS4KICAqCiAgKiBTbyB3ZSBoYXZlIHRvIGRvIHRoZSByZWFkIG91cnNlbGYuICBCaWcgZGVhbC4KLQkgICB3b3JrYXJvdW5kIGluIGkyYy1hbGdvLWJpdAorICoJICAgd29ya2Fyb3VuZCBpbiBpMmMtYWxnby1iaXQKICAqLwogCiAKLXN0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnKQorc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmMgPSBrcy0+Y2xpZW50OwogCWNoYXIgdmFsID0gMDsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXtjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZ30sCi0JCXtjLT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWx9fTsKKwkJeyBjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZyB9LAorCQl7IGMtPmFkZHIsIEkyQ19NX1JEIHwgSTJDX01fTk9fUkRfQUNLLCBzaXplb2YodmFsKSwgJnZhbCB9CisJfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwogCWlmIChyZXQgIT0gQVJSQVlfU0laRShtc2dzKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInJlYWQgZXJyb3JcbiIpOwogCiAJcmV0dXJuIHZhbDsKIH0KIAogCi1zdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHZvaWQga3MwMTI3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcsIHU4IHZhbCkKIHsKLQljaGFyIG1zZ1tdID0ge3JlZywgdmFsfTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChrcy0+Y2xpZW50LCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAid3JpdGUgZXJyb3JcbiIpOwogCiAJa3MtPnJlZ3NbcmVnXSA9IHZhbDsKIH0KIAogCiAvKiBnZW5lcmljIGJpdC10d2lkZGxpbmcgKi8KLXN0YXRpYyB2b2lkIGtzMDEyN19hbmRfb3Ioc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCXU4IHZhbCA9IGtzLT5yZWdzW3JlZ107CiAJdmFsID0gKHZhbCAmIGFuZF92KSB8IG9yX3Y7Ci0Ja3MwMTI3X3dyaXRlKGtzLCByZWcsIHZhbCk7CisJa3MwMTI3X3dyaXRlKGNsaWVudCwgcmVnLCB2YWwpOwogfQogCiAKQEAgLTM1OSw3MyArMzU1LDY5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGtzMDEyNyoga3MpCitzdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOworCWludCBpOwogCiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKLQlkcHJpbnRrKCJrczAxMjc6IHJlc2V0XG4iKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAotCWZvcihpID0gMTsgaSA8IDMzOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCi0JZm9yKGkgPSAzNTsgaSA8IDQwOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAotCWZvcihpID0gNDE7IGkgPCA1NjsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKLQlmb3IoaSA9IDU4OyBpIDwgNjQ7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCiAKLQlpZiAoKGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKKwlpZiAoKGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpICYgMHg4MCkgPT0gMCkgewogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyMlM7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTIycyBGb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjJzIGZvdW5kXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaChrczAxMjdfcmVhZChrcywgS1NfQ01ERSkgJiAweDBmKSB7Ci0KKwlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKIAkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3IGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyNyBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSA5OgogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyN0I7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyN0IgUmV2aXNpb24gQSBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygia3MwMTI3OiB1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInVua25vd24gcmV2aXNpb25cbiIpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWludAkJKmlhcmcgPSAoaW50Kilhcmc7Ci0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlpbnQJCSppYXJnID0gKGludCAqKWFyZzsKIAlpbnQJCXN0YXR1czsKIAogCWlmICgha3MpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgREVDT0RFUl9JTklUOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9JTklUXG4iKTsKLQkJa3MwMTI3X3Jlc2V0KGtzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIkRFQ09ERVJfSU5JVFxuIik7CisJCWtzMDEyN19yZXNldChjKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgpAQCAtNDM2LDE2MSArNDI4LDE2MCBAQAogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUICVkOiAiCi0JCQkJIkNvbXBvc2l0ZVxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwogCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKIAkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CiAJCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOwogCQkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CiAJCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CiAJCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKIAkJCS8qIGNocm9tYSB0cmFwLCBIWUJXUj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAgIDB4MDAsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0xVTUEsICAgMHgwMCwKIAkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CiAJCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwogCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CiAKIAkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOwogCi0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzE6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzM6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQgJWQ6ICIKLQkJCQkiUy1WaWRlb1xuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKIAkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CiAJCQkvKiBWU0U9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwogCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKIAkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwogCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDApOwogCQkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAweDAwLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwogCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAogCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUMsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAxNTogIgotCQkJCSJZVVY2NTZcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgMTU6IFlVVjY1NlxuIik7CiAJCQlpZiAoa3MtPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8CiAJCQkgICAga3MtPm5vcm0gPT0gS1NfU1REX1BBTF9NKQogCQkJCS8qIGZvcmNlIDYwIEh6ICovCi0JCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKKwkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CiAJCQllbHNlCiAJCQkJLyogZm9yY2UgNTAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOworCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KIAkJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKCppYXJnIHwgMHg0MCkpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKIAkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCiAJCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CiAJCQkvKiBkaWdpdGFsIGlucHV0LCBTWU5ESVIgPSAwIElOUFNMPTAxIENMS0RJUj0wIEVBVj0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOwogCQkJLyogZGlzYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwogCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfVkVSVElDXSYweGYwKTsKIAogCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01CLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19DSFJPTUJdJjB4ZjApOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NPTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0JSVCwgMHgwMCwgMzIpOwkvKiBzcGVjOiAzNCAqLwogCQkJCS8qIHNwZWM6IDIyOSAoZTUpICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfSFVFLCAweDAwLCAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfU0FULCAweDAwLCAweGU4KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfSFVFLCAweDAwLCAwKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVUdBSU4sIDB4MDAsIDIzOCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CiAKIAkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQ6ICIKLQkJCQkiVW5rbm93biBpbnB1dCAlZFxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwogCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoa3MsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwkJa3MwMTI3X3dyaXRlKGMsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAkJc3dpdGNoKCppYXJnKSB7CiAJCWNhc2UgS1NfT1VUUFVUX1lVVjY1NkU6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfT1VUUFVUOiAiCi0JCQkJIk9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCiAJCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9PVVRQVVQ6ICIKLQkJCQkiT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9FWFZcbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLy9zYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uCisJY2FzZSBERUNPREVSX1NFVF9OT1JNOiAvKiBzYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uICovCiAJCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KLQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAogCQlrcy0+bm9ybSA9ICppYXJnOwotCQlzd2l0Y2goKmlhcmcpCi0JCXsKKwkJc3dpdGNoICgqaWFyZykgewogCQkvKiB0aGlzIGlzIHVudGVzdGVkICEhICovCiAJCS8qIEl0IGp1c3QgZGV0ZWN0cyBQQUxfTi9OVFNDX00gKG5vIHNwZWNpYWwgZnJlcXVlbmNpZXMpICovCiAJCS8qIEFuZCB5b3UgaGF2ZSB0byBzZXQgdGhlIHN0YW5kYXJkIGEgc2Vjb25kIHRpbWUgYWZ0ZXJ3YXJkcyAqLwogCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IEFVVE9cbiIpOwogCiAJCQkvKiBUaGUgY2hpcCBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgKi8KIAkJCS8qIGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpZWxkIHJhdGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwogCQkJLyogVGhpcyBpcyB3cm9uZyBmb3IgUEFMICEgQXMgSSBzYWlkLCAqLwogCQkJLyogeW91IG5lZWQgdG8gc2V0IHRoZSBzdGFuZGFyZCBvbmNlIGFnYWluICEhICovCiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKQEAgLTU5OCw4NCArNTg5LDg2IEBACiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBOVFNDX01cbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IE5UU0NfTVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9OVFNDX046Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJOVFNDX04gKGZpeG1lKVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiS1MwMTI3X1NFVF9OT1JNOiBOVFNDX04gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9QQUxfTToKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBLUzAxMjdfU0VUX1NUQU5EQVJEOiAiCi0JCQkJIlBBTF9NIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIktTMDEyN19TRVRfTk9STTogUEFMX00gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJTRUNBTVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJLUzAxMjdfU0VUX05PUk06IFNFQ0FNXG4iKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAogCQkJLyogc2V0IHRvIHNlY2FtIGF1dG9kZXRlY3Rpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKIAogCQkJLyogZGlkIGl0IGF1dG9kZXRlY3Q/ICovCi0JCQlpZiAoa3MwMTI3X3JlYWQoa3MsIEtTX0RFTU9EKSAmIDB4NDApCisJCQlpZiAoa3MwMTI3X3JlYWQoYywgS1NfREVNT0QpICYgMHg0MCkKIAkJCQlicmVhazsKIAogCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwZik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06ICIKLQkJCQkiVW5rbm93biBub3JtICVkXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBVbmtub3duIG5vcm0gJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfUElDVFVSRSAiCi0JCQkibm90IHlldCBzdXBwb3J0ZWQgKGZpeG1lKVxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DT05UUkFTVDogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8KLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1BJWENMS19NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVkdBSU46Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6CisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ09OVFJBU1Q6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hVRTogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFPyAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQ19NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQzogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9QSVhDTEtfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9HQU1NQV9NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZTQUxJR05fTU9ERTogKi8KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTY4NCwzNCArNjc3LDMyIEBACiAJCWlhcmcgPSBhcmc7CiAJCWVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKIAkJaWYgKGVuYWJsZSkgewotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kICIKLQkJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvbiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uXG4iKTsKIAkJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CiAJCQkvKiBPYmV5IHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgIgotCQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZlxuIik7CiAJCQkvKiBWaWRlbyBvdXRwdXQgcGlucyBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4Y2YsIDB4MDApOwogCQkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDgwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hFSUdIVDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRToKKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLwogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX0dFVF9TVEFUVVNcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKIAkJKmlhcmcgPSAwOwotCQlzdGF0dXMgPSBrczAxMjdfcmVhZChrcywgS1NfU1RBVCk7CisJCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwogCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCiAJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwogCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCkBAIC03MjIsMTI0ICs3MTMsODEgQEAKIAkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfTlRTQyk7CiAJCWJyZWFrOwogCi0JLy9DYXRjaCBhbnkgdW5rbm93biBjb21tYW5kCisJLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCB1bmtub3duOiAlMDRYXG4iLCBjbWQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93bjogMHglMDh4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotCi0KLXN0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci0KLQotCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfS1MwMTI3X0FERE9OPj4xLAotCQkJCSAgICAgICBJMkNfS1MwMTI3X09OQk9BUkQ+PjEsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9iZVsyXSA9CXtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXSA9IAl7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCW5vcm1hbF9pMmMsCi0JcHJvYmUsCi0JaWdub3JlLAorI2RlZmluZSBJMkNfS1MwMTI3X0FERE9OICAgMHhEOAorI2RlZmluZSBJMkNfS1MwMTI3X09OQk9BUkQgMHhEQQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCUkyQ19LUzAxMjdfQURET04gPj4gMSwKKwlJMkNfS1MwMTI3X09OQk9BUkQgPj4gMSwKKwlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfa3MwMTI3ID0gewotCS5kcml2ZXIubmFtZSA9ICJrczAxMjciLAotCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCi0JLmF0dGFjaF9hZGFwdGVyID0ga3MwMTI3X3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IGtzMDEyN19kZXRhY2gsCi0JLmNvbW1hbmQgICAgICAgID0ga3MwMTI3X2NvbW1hbmQKLX07CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGtzMDEyN19jbGllbnRfdG1wbCA9Ci17Ci0JLm5hbWUgPSAiKGtzMDEyNyB1bnNldCkiLAotCS5hZGRyID0gMCwKLQkuYWRhcHRlciA9IE5VTEwsCi0JLmRyaXZlciA9ICZpMmNfZHJpdmVyX2tzMDEyNywKLX07Ci0KLXN0YXRpYyBpbnQga3MwMTI3X2ZvdW5kX3Byb2Moc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBrczAxMjcgKmtzOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAma3MwMTI3X2NsaWVudF90bXBsLCBzaXplb2YoKmNsaWVudCkpOworCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CiAKIAlrcyA9IGt6YWxsb2Moc2l6ZW9mKCprcyksIEdGUF9LRVJORUwpOwotCWlmIChrcyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGtzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGtzKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0Jc3ByaW50ZihjbGllbnQtPm5hbWUsICJrczAxMjctJTAyeCIsIGFkYXB0ZXItPmlkKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwogCi0Ja3MtPmNsaWVudCA9IGNsaWVudDsKLQlrcy0+YWRkciA9IGFkZHI7CiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKIAkvKiBwb3dlciB1cCAqLwotCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyk7CisJaW5pdF9yZWdfZGVmYXVsdHMoKTsKKwlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KLQlrczAxMjdfcmVzZXQoa3MpOwotCXByaW50ayhLRVJOX0lORk8gImtzMDEyNzogYXR0YWNoOiAlcyB2aWRlbyBkZWNvZGVyXG4iLAotCSAgICAgICBrcy0+YWRkcj09KEkyQ19LUzAxMjdfQURET04+PjEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIpOwotCi0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlrczAxMjdfcmVzZXQoYyk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBrczAxMjdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3KQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGtzMDEyN19mb3VuZF9wcm9jKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAotc3RhdGljIGludCBrczAxMjdfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlrczAxMjdfd3JpdGUoYywgS1NfT0ZNVEEsIDB4MjApOyAvKiB0cmlzdGF0ZSAqLworCWtzMDEyN193cml0ZShjLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KIAotCWtzMDEyN193cml0ZShrcywgS1NfT0ZNVEEsIDB4MjApOyAvKnRyaXN0YXRlKi8KLQlrczAxMjdfd3JpdGUoa3MsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShrcyk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQotCWRwcmludGsoImtzMDEyNzogZGV0YWNoXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBrczAxMjdfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQga3MwMTI3X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGtzMDEyN19jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2tzMDEyNyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CisJeyAia3MwMTI3IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBrczAxMjdfaWQpOwogCi0KLW1vZHVsZV9pbml0KGtzMDEyN19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChrczAxMjdfY2xlYW51cF9tb2R1bGUpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImtzMDEyNyIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKKwkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAorCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKKwkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKKwkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBrczAxMjdfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IDkzNWQ3M2QuLjIxMGYxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTEwOTgsOSArMTA5OCwxMCBAQAogCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMik7CiAJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKIAl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7Ci0JCXdhcm4oInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspXG4iKTsKIAl9IGVsc2UgewotCQllcnIoImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LCAiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZVxuIik7CiAJfQogfQogCkBAIC0xMTE1LDE0ICsxMTE2LDE2IEBACiAJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKSB7CiAJCXJldCA9IHJlZ19yKG92LCBSNTF4X1NZU19TTkFQKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiRXJyb3IgY2hlY2tpbmcgc25zcHNob3Qgc3RhdHVzICglZCkiLCByZXQpOworCQkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LAorCQkJCSJFcnJvciBjaGVja2luZyBzbnNwc2hvdCBzdGF0dXMgKCVkKVxuIiwgcmV0KTsKIAkJfSBlbHNlIGlmIChyZXQgJiAweDA4KSB7CiAJCQlzdGF0dXMgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQl3YXJuKCJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKVxuIik7CiAJfSBlbHNlIHsKLQkJZXJyKCJjaGVjayBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCWRldl9lcnIoJm92LT5kZXYtPmRldiwgImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGVcbiIpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC01MjE3LDcgKzUyMjAsOCBAQAogCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkKIAkJcmVnX3cob3YsIDB4MTEsIDB4MDApOwogCWVsc2UKLQkJd2FybigiU0FBNzExMUEgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBPVjUxOC9PVjUxOCsiKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAiU0FBNzExMUEgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBPVjUxOC9PVjUxOCtcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDU2LDcgKzU0NjAsOCBAQAogCSAqIHJlcXVpcmVkLiBPVjUxOCBoYXMgbm8gdW5jb21wcmVzc2VkIG1vZGUsIHRvIHNhdmUgUkFNLiAqLwogCWlmICghZHVtcHBpeCAmJiAhb3YtPmNvbXByZXNzKSB7CiAJCW92LT5jb21wcmVzcyA9IDE7Ci0JCXdhcm4oIkNvbXByZXNzaW9uIHJlcXVpcmVkIHdpdGggT1Y1MTguLi5lbmFibGluZyIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmdcbiIpOwogCX0KIAogCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwppbmRleCA0YWE4MmIzLi5hZGYyYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwpAQCAtMzEsMzYgKzMxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTEwIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJQYXVsaW5lIE1pZGRlbGluayIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBTQUE3MTEwX01BWF9JTlBVVAk5CS8qIDYgQ1ZCUywgMyBTVkhTICovCiAjZGVmaW5lIFNBQTcxMTBfTUFYX09VVFBVVAkwCS8qIGl0cyBhIGRlY29kZXIgb25seSAqLwogCi0jZGVmaW5lCUkyQ19TQUE3MTEwCQkweDlDCS8qIG9yIDB4OUUgKi8KLQogI2RlZmluZSBTQUE3MTEwX05SX1JFRwkJMHgzNQogCiBzdHJ1Y3Qgc2FhNzExMCB7CkBAIC04MSwxMCArNjksNyBAQAogLyogSTJDIHN1cHBvcnQgZnVuY3Rpb25zCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTkyLDEwICs3Nyw3IEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWcgPSAqZGF0YTsJCS8qIGZpcnN0IHJlZ2lzdGVyIHRvIHdyaXRlIHRvICovCkBAIC0xMTUsOCArOTcsOCBAQAogCQltZW1jcHkoZGVjb2Rlci0+cmVnICsgcmVnLCBkYXRhICsgMSwgbGVuIC0gMSk7CiAJfSBlbHNlIHsKIAkJZm9yICgrK2RhdGEsIC0tbGVuOyBsZW47IGxlbi0tKSB7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTBfd3JpdGUoY2xpZW50LCByZWcrKywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTI0LDggKzEwNiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CkBAIC0xMzgsOSArMTE5LDcgQEAKICNkZWZpbmUgRlJFU1BfMDZIX1NWSURFTyAweDgzCS8vMHhDMAogCiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfc2VsbXV4IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQlpbnQgICAgICAgICAgICAgICAgY2hhbikKK3N0YXRpYyBpbnQgc2FhNzExMF9zZWxtdXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNoYW4pCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZXNbOV1bOF0gPSB7CiAJCS8qIG1vZGUgMCAqLwpAQCAtMTk3LDggKzE3Niw3IEBACiAJLyogMHgzMCAqLyAweDQ0LCAweDcxLCAweDAyLCAweDhDLCAweDAyCiB9OwogCi1zdGF0aWMgaW50Ci1kZXRlcm1pbmVfbm9ybSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwpAQCAtMjEyLDI5ICsxOTAsMjMgQEAKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKIAlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKIAlpZiAoc3RhdHVzICYgMHg0MCkgewotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChubyBzaWduYWwpXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gZGVjb2Rlci0+bm9ybTsJLy8gbm8gY2hhbmdlCiAJfQogCWlmICgoc3RhdHVzICYgMykgPT0gMCkgewogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHg4Myk7CiAJCWlmIChzdGF0dXMgJiAweDIwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CiAJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg4MSk7CiAJCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOwogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFBBTC9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CiAJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDlBKTsKIAkJcmV0dXJuIFZJREVPX01PREVfUEFMOwogCX0KIAkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MDYsMHgwMyk7CiAJaWYgKHN0YXR1cyAmIDB4MjApIHsJLyogNjBIeiAqLwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKE5UU0MpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7CkBAIC0yNTQsMTMgKzIyNiwxMSBAQAogCiAJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7CiAJaWYgKChzdGF0dXMgJiAweDAzKSA9PSAweDAxKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7CiAJCXJldHVybiBWSURFT19NT0RFX1NFQ0FNOwogCX0KLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggKFBBTClcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCXN0YXR1cyk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFMKVxuIiwgc3RhdHVzKTsKIAlyZXR1cm4gVklERU9fTU9ERV9QQUw7CiB9CiAKQEAgLTI4Niw4ICsyNTYsOCBAQAogCQkgICAgVklERU9fREVDT0RFUl9TRUNBTSB8IFZJREVPX0RFQ09ERVJfQVVUTzsKIAkJZGMtPmlucHV0cyA9IFNBQTcxMTBfTUFYX0lOUFVUOwogCQlkYy0+b3V0cHV0cyA9IFNBQTcxMTBfTUFYX09VVFBVVDsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTI5NSw4ICsyNjUsOCBAQAogCQlpbnQgcmVzID0gMDsKIAogCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMsIGRlY29kZXItPm5vcm0pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCisJCQkgICAgICAgc3RhdHVzLCBkZWNvZGVyLT5ub3JtKTsKIAkJaWYgKCEoc3RhdHVzICYgMHg0MCkpCiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKIAkJaWYgKHN0YXR1cyAmIDB4MDMpCkBAIC0zMTQsOCArMjg0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCSooaW50ICopIGFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAkJdiA9ICooaW50ICopIGFyZzsKQEAgLTMyOCwzNCArMjk4LDI0IEBACiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDgxKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIE5UU0NcbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIFBBTFxuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gUEFMXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKIAkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IHN3aXRjaGVkIHRvIFNFQ0FNXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBTRUNBTVxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IFRWIHN0YW5kYXJkIGRldGVjdGlvbi4uLlxuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gQVVUT1xuIik7CiAJCQkJZGVjb2Rlci0+bm9ybSA9IGRldGVybWluZV9ub3JtKGNsaWVudCk7CiAJCQkJKihpbnQgKikgYXJnID0gZGVjb2Rlci0+bm9ybTsKIAkJCQlicmVhazsKQEAgLTM2OCwxNSArMzI4LDEyIEBACiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAkJdiA9ICooaW50ICopIGFyZzsKIAkJaWYgKHYgPCAwIHx8IHYgPiBTQUE3MTEwX01BWF9JTlBVVCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTyAiJXM6IGlucHV0PSVkIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgdik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCB2KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSB2KSB7CiAJCQlzYWE3MTEwX3NlbG11eChjbGllbnQsIHYpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzd2l0Y2hlZCB0byBpbnB1dD0lZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCB2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCB2KTsKIAkJfQogCQlicmVhazsKIApAQCAtMzkyLDggKzM0OSw3IEBACiAJCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gdikgewogCQkJZGVjb2Rlci0+ZW5hYmxlID0gdjsKIAkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBFLCB2ID8gMHgxOCA6IDB4ODApOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBZVVYgJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkJdiA/ICJvbiIgOiAib2ZmIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJZVVYgJXNcbiIsIHYgPyAib24iIDogIm9mZiIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC00MjMsMjMgKzM3OSwyMyBAQAogCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MDcsCiAJCQkJICAgICAgKGRlY29kZXItPmh1ZSA+PiA4KSAtIDEyOCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgorCQlpZiAoIWRlYnVnKQorCQkJYnJlYWs7CiAJCWZvciAodiA9IDA7IHYgPCBTQUE3MTEwX05SX1JFRzsgdiArPSAxNikgewogCQkJaW50IGo7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiAlMDJ4OiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkJdik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4OiIsIHYpOwogCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIHYgKyBqIDwgU0FBNzExMF9OUl9SRUc7IGorKykKLQkJCQlkcHJpbnRrKDEsICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOwotCQkJZHByaW50aygxLCAiXG4iKTsKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICJ1bmtub3duIHNhYTcxMTBfY29tbWFuZD8/KCVkKVxuIiwKLQkJCWNtZCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVua25vd24gY29tbWFuZCAlMDh4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTEsNTUgKzQwNywyOCBAQAogICogR2VuZXJpYyBpMmMgcHJvYmUKICAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKICAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfU0FBNzExMCA+PiAxLAotCShJMkNfU0FBNzExMCA+PiAxKSArIDEsCi0JSTJDX0NMSUVOVF9FTkQKLX07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OWMgPj4gMSwgMHg5ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTEwOwotCi1zdGF0aWMgaW50Ci1zYWE3MTEwX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzExMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXI7CiAJaW50IHJ2OwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTAuYzogZGV0ZWN0aW5nIHNhYTcxMTAgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5Ci0JICAgIChhZGFwdGVyLAotCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExMDsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTEwIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlY29kZXIpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoIWRlY29kZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC01MTAsMTggKzQzOSwxMCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRlY29kZXItPndxKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCXJ2ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAocnYpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBydjsKLQl9Ci0KIAlydiA9IHNhYTcxMTBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwotCWlmIChydiA8IDApCi0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBydik7Ci0JZWxzZSB7CisJaWYgKHJ2IDwgMCkgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOworCX0gZWxzZSB7CiAJCWludCB2ZXIsIHN0YXR1czsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MjEsIDB4MTApOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwZSwgMHgxOCk7CkBAIC01MzAsMTAgKzQ1MSw4IEBACiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA2KTsKIAkJLy9tZGVsYXkoMTUwKTsKIAkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogU0FBNzExMEEgdmVyc2lvbiAleCBhdCAweCUwMngsIHN0YXR1cz0weCUwMnhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCB2ZXIsIGNsaWVudC0+YWRkciA8PCAxLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJICAgICAgIHZlciwgc3RhdHVzKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKQEAgLTU0Nyw1OCArNDY2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExMF9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExMF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTAgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExMCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExMF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTEwX2lkW10gPSB7CisJeyAic2FhNzExMCIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzExMF9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTEwX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMTBfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTEwKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExMF9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMTBfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzExMCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCisJLmNvbW1hbmQgPSBzYWE3MTEwX2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzExMF9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzExMF9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzExMF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCmluZGV4IDk2YzNkNDMuLmE0NzM4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCkBAIC0yOCw0MyArMjgsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTExIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBTQUE3MTExX05SX1JFRwkJMHgxOApAQCAtNzcsMTQgKzU4LDkgQEAKIAlpbnQgZW5hYmxlOwogfTsKIAotI2RlZmluZSAgIEkyQ19TQUE3MTExICAgICAgICAweDQ4Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTExX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTExX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtOTIsOCArNjgsNyBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMTAzLDEwICs3OCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTExX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyNywxOCArOTksMTcgQEAKIAkJCQkgICAgZGVjb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTQ3LDE2ICsxMTgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTExX2luaXRfZGVjb2RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQorc3RhdGljIGludCBzYWE3MTExX2luaXRfZGVjb2RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQogewogCXJldHVybiBzYWE3MTExX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTFfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KQEAgLTIwMywyOCArMTcxLDIzIEBACiAJMHgxNywgMHgwMCwJCS8qIDE3IC0gVkJJICovCiB9OwogCi1zdGF0aWMgaW50Ci1zYWE3MTExX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgc2FhNzExMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSAwOgogCQlicmVhazsKIAljYXNlIERFQ09ERVJfSU5JVDoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQgPSBhcmc7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOworCiAJCWlmIChOVUxMICE9IGluaXQpCiAJCQlyZXR1cm4gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCBpbml0KTsKLQkJZWxzZSB7Ci0JCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQkJCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQkJCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JCQlyZXR1cm4gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKLQkJfQorCQl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7CisJCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7CisJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwogCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgpAQCAtMjM0LDE1ICsxOTcsMTUgQEAKIAkJZm9yIChpID0gMDsgaSA8IFNBQTcxMTFfTlJfUkVHOyBpICs9IDE2KSB7CiAJCQlpbnQgajsKIAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgaSArIGogPCBTQUE3MTExX05SX1JFRzsgKytqKSB7Ci0JCQkJcHJpbnRrKCIgJTAyeCIsCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAogCQkJCSAgICAgICBzYWE3MTExX3JlYWQoY2xpZW50LCBpICsgaikpOwogCQkJfQotCQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewpAQCAtMjU1LDggKzIxOCw4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSA4OwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtMjY1LDggKzIyOCw3IEBACiAJCWludCByZXM7CiAKIAkJc3RhdHVzID0gc2FhNzExMV9yZWFkKGNsaWVudCwgMHgxZik7Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXMgc3RhdHVzOiAweCUwMnhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKIAkJcmVzID0gMDsKIAkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CkBAIC0yOTQsOCArMjU2LDggQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKIAkJfQogCQkqaWFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfR1BJTzoKIAl7CkBAIC0zNjIsOCArMzI0LDggQEAKIAogCQl9CiAJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzg3LDggKzM0OSw4IEBACiAJCQkJCQkJICAgICAzKSA/IDB4ODAgOgogCQkJCQkJCSAgICAwKSk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKQEAgLTM5OCw4ICszNjAsOCBAQAogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTQzOSw4ICs0MDEsOCBAQAogCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOwogCQkJfQogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewpAQCAtNDU0LDggKzQxNiw4IEBACiAJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBjLCBwaWMtPmNvbG91ciA+PiA5KTsKIAkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwogCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZCwgKHBpYy0+aHVlIC0gMzI3NjgpID4+IDgpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NjYsNDggKzQyOCwyMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxMTEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTExOwotCi1zdGF0aWMgaW50Ci1zYWE3MTExX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzExMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXI7CiAJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMS5jOiBkZXRlY3Rpbmcgc2FhNzExMSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExMTsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTExIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGVjb2RlciA9PSBOVUxMKSB7CkBAIC01MTksODIgKzQ1NiwzNyBAQAogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoaSkgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIGk7Ci0JfQotCiAJdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwogCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7CiAJaSA9IHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CiAJaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaCBlcnJvcjogaW5pdCBzdGF0dXMgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIGkpOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTFfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICV4XG4iLAorCQkJc2FhNzExMV9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCk7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExMV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExMV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTEgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExMSIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxMTFfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE3MTExX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBzYWE3MTExX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzExMV9pZFtdID0geworCXsgInNhYTcxMTFfb2xkIiwgMCB9LAkvKiAic2FhNzExMSIgbWFwcyB0byB0aGUgc2FhNzExNSBkcml2ZXIgKi8KKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzExMV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTExX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxMTFfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTExKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzExMV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxMTFfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzExMSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAorCS5jb21tYW5kID0gc2FhNzExMV9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxMTFfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxMTFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxMTFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwppbmRleCBlNzkwNzU1Li43Y2E3MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNEggdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxMTQgewpAQCAtODEsOSArNjIsNiBAQAogCWludCBwbGF5YmFjazsKIH07CiAKLSNkZWZpbmUgICBJMkNfU0FBNzExNCAgICAgICAgMHg0MgotI2RlZmluZSAgIEkyQ19TQUE3MTE0QSAgICAgICAweDQwCi0KICNkZWZpbmUgICBJMkNfREVMQVkgICAxMAogCiAKQEAgLTEyOSwxOCArMTA3LDEyIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTE0X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTE0X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzExNF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTE0X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xNjAsMTggKzEzMiwxNyBAQAogCQkJCXJlZysrOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTE4MCw5ICsxNTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYWE3MTE0X3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CkBAIC00NTIsMTUgKzQyMSwxMSBAQAogCTB4ZWYsIDB4MDAKIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTRfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTE0X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxMTQgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCS8vZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB3cml0aW5nIGluaXRcbiIsIEkyQ19OQU1FKGNsaWVudCkpOwogCQkvL3NhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwpAQCAtNDcwLDI3ICs0MzUsMjggQEAKIAl7CiAJCWludCBpOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogZGVjb2RlciBkdW1wXG4iLCBJMkNfTkFNRShjbGllbnQpKTsKKwkJaWYgKCFkZWJ1ZykKKwkJCWJyZWFrOworCQl2NGxfaW5mbyhjbGllbnQsICJkZWNvZGVyIGR1bXBcbiIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgewogCQkJaW50IGo7CiAKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJTAzeCIsIEkyQ19OQU1FKGNsaWVudCksIGkpOworCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwogCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKLQkJCQlwcmludGsoIiAlMDJ4IiwKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCiAJCQkJICAgICAgIHNhYTcxMTRfcmVhZChjbGllbnQsIGkgKyBqKSk7CiAJCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIGdldCBjYXBhYmlsaXRpZXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKQEAgLTQ5OCw4ICs0NjQsOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gODsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKQEAgLTUwOSw4ICs0NzUsNyBAQAogCiAJCXN0YXR1cyA9IHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXMgc3RhdHVzOiAweCUwMnhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKIAkJcmVzID0gMDsKIAkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CkBAIC01MzgsOCArNTAzLDggQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKIAkJfQogCQkqaWFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CkBAIC01NDcsMTIgKzUxMiwxMSBAQAogCiAJCXNob3J0IGludCBob2ZmID0gMCwgdm9mZiA9IDAsIHcgPSAwLCBoID0gMDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBub3JtICIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKLQkJc3dpdGNoICgqaWFyZykgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybVxuIik7CiAKKwkJc3dpdGNoICgqaWFyZykgewogCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWRwcmludGsoMSwgIk5UU0NcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiTlRTQ1xuIik7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KIAkJCSAgICBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9CkBAIC01NzEsNyArNTM1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlkcHJpbnRrKDEsICJQQUxcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiUEFMXG4iKTsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQogCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVDsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQpAQCAtNTkwLDkgKzU1NCw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCAiIFVua25vd24gdmlkZW8gbW9kZSEhIVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJVbmtub3duIHZpZGVvIG1vZGVcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCiAKQEAgLTY0NCwyMiArNjA3LDIwIEBACiAJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uCiAKIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBpbnB1dCAoJWQpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgKCVkKVxuIiwgKmlhcmcpOwogCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IG5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksCisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dFxuIiwKIAkJCQkqaWFyZyA+PSA2ID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIpOwogCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKIApAQCAtNjkwLDMwICs2NTEsMjkgQEAKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBlLAogCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0pOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyIHNldCBvdXRwdXRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dFxuIik7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBkZWNvZGVyICVzIG91dHB1dFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXMgb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwogCiAJCWRlY29kZXItPnBsYXliYWNrID0gIWVuYWJsZTsKIApAQCAtNzU0LDE4ICs3MTQsMTYgQEAKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsKIAogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwogCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsCi0JCQlwaWMtPmNvbG91ciwgcGljLT5odWUpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkiZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCisJCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7CiAKIAkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKIAkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KQEAgLTc4OSw4ICs3NDcsOCBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGQsCiAJCQkJICAgICAgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDEsNTggKzc1OSwzMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9Ci0gICAgeyBJMkNfU0FBNzExNCA+PiAxLCBJMkNfU0FBNzExNEEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDIgPj4gMSwgMHg0MCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTQ7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTRfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTE0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGksIGVyclszMF07CiAJc2hvcnQgaW50IGhvZmYgPSBTQUFfNzExNF9OVFNDX0hPRkZTRVQ7CiAJc2hvcnQgaW50IHZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7CiAJc2hvcnQgaW50IHcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwogCXNob3J0IGludCBoID0gU0FBXzcxMTRfTlRTQ19IRUlHSFQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTE0LmM6IGRldGVjdGluZyBzYWE3MTE0IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTE0OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTQiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExNCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZGVjb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAlkZWNvZGVyLT5pbnB1dCA9IC0xOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC05MzcsOCArODY3LDcgQEAKIAlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldIHw9IDE7CS8vIGNvbWJmaWx0ZXIgb24KIAogCi0JZHByaW50aygxLCBLRVJOX0RFQlVHICIlc19hdHRhY2g6IHN0YXJ0aW5nIGRlY29kZXIgaW5pdFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhcnRpbmcgaW5pdFxuIik7CiAKIAllcnJbMF0gPQogCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MjAgPDwgMSksCkBAIC05NjIsMjggKzg5MSwyMyBAQAogCiAJZm9yIChpID0gMDsgaSA8PSA1OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCi0JZHByaW50aygxLAotCQlLRVJOX0RFQlVHCi0JCSIlc19hdHRhY2g6IHBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKIAogCWVycls2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgogCWVycls3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCkBAIC05OTEsMTkgKzkxNSwxNSBAQAogCiAJZm9yIChpID0gNjsgaSA8PSA4OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiBwZXJmb3JtaW5nIHRoZSByZXN0IG9mIGluaXRcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCkpOwotCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyB0aGUgcmVzdCBvZiBpbml0XG4iKTsKIAogCWVycls5XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAxLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMSldKTsKIAllcnJbMTBdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDAzIDw8IDEpLCAoMHgxZSArIDEgLSAweDAzKSA8PCAxKTsJLy8gYmlnIHNlcQpAQCAtMTAzOSwzNyArOTU5LDMyIEBACiAKIAlmb3IgKGkgPSA5OyBpIDw9IDE4OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKIAogCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKIAogCWZvciAoaSA9IDB4MTE7IGkgPD0gMHgxMzsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2F0dGFjaDogc2V0dGluZyB2aWRlbyBpbnB1dFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0dGluZyB2aWRlbyBpbnB1dFxuIik7CiAKIAllcnJbMTldID0KIAkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDIsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwpAQCAtMTA4MCwyMCArOTk1LDE1IEBACiAKIAlmb3IgKGkgPSAxOTsgaSA8PSAyMTsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCi0JZHByaW50aygxLAotCQlLRVJOX0RFQlVHCi0JCSIlc19hdHRhY2g6IHBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKIAogCWVyclsyMl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgogCWVyclsyM10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCkBAIC0xMTAyLDEzICsxMDEyLDExIEBACiAKIAlmb3IgKGkgPSAyMjsgaSA8PSAyNDsgaSsrKSB7CiAJCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXNfYXR0YWNoOiBpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgZXJyW2ldKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAorCQkJCWksIGVycltpXSk7CiAJCQlrZnJlZShkZWNvZGVyKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCkBAIC0xMTE2LDEwMSArMTAyNCw0NSBAQAogCWVyclsyNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNywgaW5pdFtSRUdfQUREUigweDA3KV0pOwogCWVyclsyN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgxMCwgaW5pdFtSRUdfQUREUigweDEwKV0pOwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCisJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCiAJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpKTsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcG93ZXIgc2F2ZSBjb250cm9sOiAweCUwMngsIHNjYWxlciBzdGF0dXM6IDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4OCksCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkicG93ZXIgc2F2ZSBjb250cm9sOiAweCUwMngsIHNjYWxlciBzdGF0dXM6IDB4JTAyeFxuIiwKKwkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4OCksCiAJCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4OGYpKTsKIAogCiAJZm9yIChpID0gMHg5NDsgaSA8IDB4OTY7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAkvL2kgPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQlpID0gMDsKLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoIGVycm9yOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICV4IGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTRfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc2FhNzExNF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExNC5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzExNF9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzExNF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTQgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzExNCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExNF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTRfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTRfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTE0X2lkW10gPSB7CisJeyAic2FhNzExNF9vbGQiLCAwIH0sCS8qICJzYWE3MTE0IiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLworCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTE0X2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTRfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExNF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTQpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTE0X2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExNF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTE0IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKKwkuY29tbWFuZCA9IHNhYTcxMTRfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTE0X3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTE0X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE3MTE0X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggZDBlODNmZS4uY2MwMmZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqIE5vdGU6IHRoZSBzYWE3MTI2IGlzIGlkZW50aWNhbCB0byB0aGUgc2FhNzEyNywgYW5kIHRoZSBzYWE3MTI4IGlzCiAgKiBpZGVudGljYWwgdG8gdGhlIHNhYTcxMjksIGV4Y2VwdCB0aGF0IHRoZSBzYWE3MTI2IGFuZCBzYWE3MTI4IGhhdmUKICAqIG1hY3JvdmlzaW9uIGFudGktdGFwaW5nIHN1cHBvcnQuIFRoaXMgZHJpdmVyIHdpbGwgYWxtb3N0IGNlcnRhaW5seQotICogd29yayBmaW5kIGZvciB0aG9zZSBjaGlwcywgZXhjZXB0IG9mIGNvdXJzZSBmb3IgdGhlIG1pc3NpbmcgYW50aS10YXBpbmcKKyAqIHdvcmsgZmluZSBmb3IgdGhvc2UgY2hpcHMsIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHRoZSBtaXNzaW5nIGFudGktdGFwaW5nCiAgKiBzdXBwb3J0LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDg3YzEwOTguLjhjNDYxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC01MzUsMTEgKzUzNSwxNiBAQAogCQkJCXN0cnVjdCB0ZGExMDA0eF9jb25maWcgKmNkZWNfY29uZiwKIAkJCQlzdHJ1Y3QgdGRhODI3eF9jb25maWcgKnR1bmVyX2NvbmYpCiB7Ci0JZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwgY2RlY19jb25mLCAmZGV2LT5pMmNfYWRhcCk7Ci0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKworCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsIGNkZWNfY29uZiwgJmRldi0+aTJjX2FkYXApOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewogCQlpZiAoY2RlY19jb25mLT5pMmNfZ2F0ZSkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKLQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gdGRhODI5MF9pMmNfZ2F0ZV9jdHJsOworCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkgICAgICAgY2RlY19jb25mLT50dW5lcl9hZGRyZXNzLAogCQkJICAgICAgICZkZXYtPmkyY19hZGFwLCB0dW5lcl9jb25mKSkKIAkJCXJldHVybiAwOwpAQCAtOTQ0LDEyICs5NDksMzAgQEAKIHsKIAlpbnQgcmV0OwogCWludCBhdHRhY2hfeGMzMDI4ID0gMDsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIG11bHRpLWZyb250ZW5kICovCisJbXV0ZXhfaW5pdCgmZGV2LT5mcm9udGVuZHMubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnJvbnRlbmRzLmZlbGlzdCk7CisJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgYWxsb2NhdGluZyAxIGZyb250ZW5kXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGFsbG9jXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCiAJZGV2LT50cy5ucl9idWZzICAgID0gMzI7CiAJZGV2LT50cy5ucl9wYWNrZXRzID0gMzIqNDsKLQlkZXYtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOwotCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmRldi0+ZHZiLmR2YnEsICZzYWE3MTM0X3RzX3FvcHMsCisJZmUwLT5kdmIubmFtZSA9IGRldi0+bmFtZTsKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmZTAtPmR2Yi5kdmJxLCAmc2FhNzEzNF90c19xb3BzLAogCQkJICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKIAkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkgICAgVjRMMl9GSUVMRF9BTFRFUk5BVEUsCkBAIC05NTksNDcgKzk4Miw0NyBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV8zMDBJX0RWQlRfUEFMOgogCQlkcHJpbnRrKCJwaW5uYWNsZSAzMDBpIGR2YiBzZXR1cFxuIik7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZwaW5uYWNsZV8zMDBpLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmcGlubmFjbGVfMzAwaSwKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gbXQzNTJfcGlubmFjbGVfdHVuZXJfc2V0X3BhcmFtczsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gbXQzNTJfcGlubmFjbGVfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCQlkcHJpbnRrKCJhdmVydHYgNzc3IGR2YiBzZXR1cFxuIik7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZhdmVybWVkaWFfNzc3LAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYXZlcm1lZGlhXzc3NywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19URDEzMTYpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2RDoKIAkJZHByaW50aygiQXZlck1lZGlhIEExNkQgZHZiIHNldHVwXG4iKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmbWVkaW9uX2NhcmRidXMsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCBtZWRpb25fY2FyZGJ1cy50dW5lcl9hZGRyZXNzLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfVE9VR0g6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGhpbGlwc190dTEyMTZfNjBfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3R1MTIxNl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0OworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3R1MTIxNl9pbml0OworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJURFVPOgpAQCAtMTAxMCwyNCArMTAzMywyNCBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19FVVJPUEE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaGlsaXBzX2V1cm9wYV9jb25maWcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfc2xlZXA7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkZXYtPm9yaWdpbmFsX2RlbW9kX3NsZWVwID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV9kZW1vZF9zbGVlcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9pbml0OworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX2V1cm9wYV90dW5lcl9zbGVlcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGhpbGlwc190dTEyMTZfNjFfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3R1MTIxNl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0OworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3R1MTIxNl9pbml0OworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfRFZCVF8yMTA6CkBAIC0xMDY2LDE0ICsxMDg5LDE0IEBACiAJCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCX0gZWxzZSB7ICAJCS8qIHNhdGVsbGl0ZSAqLwotCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsICZkZXYtPmkyY19hZGFwKTsKLQkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MywKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjMsCiAJCQkJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgewogCQkJCQl3cHJpbnRrKCIlczogTGlmZXZpZXcgVHJpbywgTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQkJCX0KLQkJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsICZkZXYtPmkyY19hZGFwLAorCQkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmRldi0+aTJjX2FkYXAsCiAJCQkJCQkJCQkJMHgwOCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCQl3cHJpbnRrKCIlczogTGlmZXZpZXcgVHJpbywgTm8gSVNMNjQyMSBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTA4MywxMSArMTEwNiwxMSBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0RVT19DQVJEQlVTX1BUVjMzMToKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9IWUJSSURfQ0FSREJVUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKIAkJCQkJICAgICAgICZhZHNfdGVjaF9kdW9fY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgIGFkc190ZWNoX2R1b19jb25maWcudHVuZXJfYWRkcmVzcywgJmRldi0+aTJjX2FkYXAsCiAJCQkJCQkJCSZhZHNfZHVvX2NmZykgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIm5vIHRkYTgyN3ggdHVuZXIgZm91bmQgYXQgYWRkcjogJTAyeFxuIiwKQEAgLTExMDgsMTUgKzExMzEsMTUgQEAKIAkJCQkJCSAmdGRhODI3eF9jZmdfMCkgPCAwKQogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJfSBlbHNlIHsgICAgICAgIC8qIHNhdGVsbGl0ZSAqLwotCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCiAJCQkJCQkJJmZseWR2YnMsICZkZXYtPmkyY19hZGFwKTsKLQkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gZGV2LT5kdmIuZnJvbnRlbmQ7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGZlMC0+ZHZiLmZyb250ZW5kOwogCQkJCXU4IGRldl9pZCA9IGRldi0+ZWVkYXRhWzJdOwogCQkJCXU4IGRhdGEgPSAweGM0OwogCQkJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IDB4MDgsIC5mbGFncyA9IDAsIC5sZW4gPSAxfTsKIAotCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCQkweDYwLCAmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgewogCQkJCQl3cHJpbnRrKCIlczogTWVkaW9uIFF1YWRybywgbm8gdGRhODI2eCAiCiAJCQkJCQkiZm91bmQgIVxuIiwgX19mdW5jX18pOwpAQCAtMTE1MCwzMSArMTE3MywzMSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAmYXZlcnR2aGRhMTgwLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZhdmVydHZoZGExODAsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKIAkJCQkgICBOVUxMLCBEVkJfUExMX1RESFUyKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX0hEVFZfUENJOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAma3dvcmxkYXRzYzExMCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAma3dvcmxkYXRzYzExMCwKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9QSElMSVBTX1RVVjEyMzZEKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAogCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyB0ZGE4MjZ4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCX0KLQkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDB4MDgsIDAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gSVNMNjQyMSBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CkBAIC0xMTgyLDI1ICsxMjA1LDI1IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmbWVkaW9uX2NhcmRidXMsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CiAKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCBtZWRpb25fY2FyZGJ1cy50dW5lcl9hZGRyZXNzLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJJnBoaWxpcHNfZXVyb3BhX2NvbmZpZywKIAkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQToKQEAgLTEyMzksMTUgKzEyNjIsMTUgQEAKIAkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfU05BS0U6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAogCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyB0ZGE4MjZ4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCX0KLQkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZkZXYtPmkyY19hZGFwLCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIGxuYnAyMSBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CkBAIC0xMjY5LDI0ICsxMjkyLDI0IEBACiAJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMCk7CiAJCW1zbGVlcCgxMCk7CiAJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNSwgMSk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CiAJCWF0dGFjaF94YzMwMjggPSAxOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0X0JSSURHRV8yOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAogCQkJCQkJJnNkMTg3OF80bSwgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKLQkJCWlmIChkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJCWlmIChkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkgICZkZXYtPmkyY19hZGFwLCBEVkJfUExMX1BISUxJUFNfU0QxODc4X1REQTgyNjEpID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTUQ3MTM0IERWQi1TLCBubyBTRDE4NzggIgogCQkJCQkiZm91bmQgIVxuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCX0KIAkJCS8qIHdlIG5lZWQgdG8gb3BlbiB0aGUgaTJjIGdhdGUgKHdlIGtub3cgaXQgZXhpc3RzKSAqLwotCQkJZmUgPSBkZXYtPmR2Yi5mcm9udGVuZDsKKwkJCWZlID0gZmUwLT5kdmIuZnJvbnRlbmQ7CiAJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQwNV9hdHRhY2gsIGZlLAogCQkJCQkmZGV2LT5pMmNfYWRhcCwgMHgwOCwgMCwgMCkgPT0gTlVMTCkgewpAQCAtMTMwNSw3ICsxMzI4LDcgQEAKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAwKTsKIAkJbXNsZWVwKDEwKTsKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAxKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CkBAIC0xMzE2LDE3ICsxMzM5LDE3IEBACiAJCQkJCQkJJnRkYTgyN3hfY2ZnXzIpIDwgMCkKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCX0gZWxzZSB7ICAJCS8qIHNhdGVsbGl0ZSAqLwotCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCiAJCQkJCQkmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOwotCQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwKLQkJCQkJCWRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgewogCQkJCQl3cHJpbnRrKCIlczogQXN1cyBUaWdlciAzaW4xLCBubyAiCiAJCQkJCQkidGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQkJCX0KLQkJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJCSZkZXYtPmkyY19hZGFwLCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXdwcmludGsoIiVzOiBBc3VzIFRpZ2VyIDNpbjEsIG5vIGxuYnAyMSIKIAkJCQkJCSIgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMzUyLDEwICsxMzc1LDEwIEBACiAJCQkuaTJjX2FkZHIgID0gMHg2MSwKIAkJfTsKIAotCQlpZiAoIWRldi0+ZHZiLmZyb250ZW5kKQorCQlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKQogCQkJcmV0dXJuIC0xOwogCi0JCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCWlmICghZmUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogeGMzMDI4IGF0dGFjaCBmYWlsZWRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTEzNjMsNDAgKzEzODYsNDcgQEAKIAkJfQogCX0KIAotCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CisJaWYgKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy9kdmI6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KLQlkZXYtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrOworCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nIGVsc2UgKi8KLQlyZXQgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoJmRldi0+ZHZiLCBUSElTX01PRFVMRSwgZGV2LCAmZGV2LT5wY2ktPmRldiwKLQkJCQkgICAgYWRhcHRlcl9ucik7CisJcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBkZXYsCisJCSZkZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX25yLCAwKTsKIAogCS8qIHRoaXMgc2VxdWVuY2UgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIHRkYTEwMDR4IGxvYWQgaXRzIGZpcm13YXJlCiAJICogYW5kIHRvIGVudGVyIGFuYWxvZyBtb2RlIG9mIGh5YnJpZCBib2FyZHMKIAkgKi8KIAlpZiAoIXJldCkgewotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pbml0KQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pbml0KGRldi0+ZHZiLmZyb250ZW5kKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXApCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKGRldi0+ZHZiLmZyb250ZW5kKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAoZGV2LT5kdmIuZnJvbnRlbmQpOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pbml0KQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pbml0KGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXApCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAoZmUwLT5kdmIuZnJvbnRlbmQpOwogCX0KIAlyZXR1cm4gcmV0OwogCiBkZXR0YWNoX2Zyb250ZW5kOgotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJZHZiX2Zyb250ZW5kX2RldGFjaChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JZGV2LT5kdmIuZnJvbnRlbmQgPSBOVUxMOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJZmUwLT5kdmIuZnJvbnRlbmQgPSBOVUxMOwogCiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGR2Yl9maW5pKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogRklYTUU6IEkgc3VzcGVjdCB0aGF0IHRoaXMgY29kZSBpcyBib2d1cywgc2luY2UgdGhlIGVudHJ5IGZvcgogCSAgIFBpbm5hY2xlIDMwMEkgRFZCLVQgUEFMIGFscmVhZHkgZGVmaW5lcyB0aGUgcHJvcGVyIGluaXQgdG8gYWxsb3cKIAkgICB0aGUgZGV0ZWN0aW9uIG9mIG10MjAzMiAoVERBOTg4N19QT1JUMl9JTkFDVElWRSkKQEAgLTE0MTYsNyArMTQ0Niw3IEBACiAJCQl1OCBkYXRhID0gMHg4MDsKIAkJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IDB4MDgsIC5idWYgPSAmZGF0YSwgLmZsYWdzID0gMCwgLmxlbiA9IDF9OwogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7Ci0JCQlmZSA9IGRldi0+ZHZiLmZyb250ZW5kOworCQkJZmUgPSBmZTAtPmR2Yi5mcm9udGVuZDsKIAkJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKIAkJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCQkJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CkBAIC0xNDI0LDggKzE0NTQsOCBAQAogCQkJfQogCQl9CiAJfQotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA0OTFhYjFmLi4yNDA5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTU4MSw3ICs1ODEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCX01PRFVMRSkKIAkvKiBTQUE3MTM0X01QRUdfRFZCIG9ubHkgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCWludCAoKm9yaWdpbmFsX2RlbW9kX3NsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCmluZGV4IDAyZmRhNGUuLjZkZWJiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCkBAIC0yNSw0MyArMjUsMjUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxODUgewpAQCAtNzUsMzIgKzU3LDI0IEBACiAJaW50IHNhdDsKIH07CiAKLSNkZWZpbmUgICBJMkNfU0FBNzE4NSAgICAgICAgMHg4OAotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzE4NV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGlubGluZSBpbnQgc2FhNzE4NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiU0FBNzE4NTogJTAyeCBzZXQgdG8gJTAyeFxuIiwgcmVnLCB2YWx1ZSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJTAyeCBzZXQgdG8gJTAyeFxuIiwgcmVnLCB2YWx1ZSk7CiAJZW5jb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTg1X3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxODVfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEyMSwxOCArOTUsMTcgQEAKIAkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxODVfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxODVfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMjQwLDE1ICsyMTMsMTEgQEAKIAkweDY2LCAweDIxLAkJLyogRlNDMyAqLwogfTsKIAotc3RhdGljIGludAotc2FhNzE4NV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxODVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAogCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKQEAgLTI2NCw3ICsyMzMsNiBAQAogCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7CiAJCQlicmVhazsKIAkJfQotCiAJCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CkBAIC0yNzYsOCArMjQ0LDggQEAKIAkJICAgIFZJREVPX0VOQ09ERVJfU0VDQU0gfCBWSURFT19FTkNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gMTsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CkBAIC0yODYsNyArMjU0LDYgQEAKIAkJLy9zYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7CkBAIC0zMDAsMTEgKzI2NywxMCBAQAogCQljYXNlIFZJREVPX01PREVfU0VDQU06CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAJCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtMzE0LDcgKzI4MCw2IEBACiAJCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLwogCiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIDA6CiAJCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCiAJCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKQEAgLTMzMiwyMSArMjk3LDE5IEBACiAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7CisJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTM1Niw4ICszMTksOCBAQAogCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKIAkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGJmKSB8CiAJCQkgICAgICAoZW5jb2Rlci0+ZW5hYmxlID8gMHgwMCA6IDB4NDApKTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY4LDEzOCArMzMxLDY1IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfU0FBNzE4NSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxODU7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxODVfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlcjsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTg1LmM6IGRldGVjdGluZyBzYWE3MTg1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTg1OwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxODUiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE4NSksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCWlmIChpID49IDApIHsKLQkJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCXNpemVvZihpbml0X250c2MpKTsKLQl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzX2F0dGFjaDogY2hpcCB2ZXJzaW9uICVkIGF0IGFkZHJlc3MgMHgleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHNhYTcxODVfcmVhZChjbGllbnQpID4+IDUsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCisJaWYgKGkgPj0gMCkKKwkJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgJWRcbiIsIGkpOworCWVsc2UKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gMHgleFxuIiwKKwkJCQlzYWE3MTg1X3JlYWQoY2xpZW50KSA+PiA1KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTg1LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTg1X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTg1X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLwogCS8vc2FhNzE4NV93cml0ZShjbGllbnQsIDB4M2EsIChlbmNvZGVyLT5yZWdbMHgzYV0pIHwgMHg4MCk7IC8qIFNXOiBjb2xvciBiYXIgKi8KIAogCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzE4NSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTg1IiwJLyogbmFtZSAqLwotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTg1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzE4NV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzE4NV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxODVfaWRbXSA9IHsKKwl7ICJzYWE3MTg1IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTg1X2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxODVfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzE4NSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzE4NV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxODUpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTg1X2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzE4NV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTg1IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCisJLmNvbW1hbmQgPSBzYWE3MTg1X2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzE4NV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzE4NV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzE4NV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggNzY4MzgwOS4uMjQwNzYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNDAsMzkgKzQwLDM5IEBACiAKIC8qIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHNoNzcyMiAvIHNoNzcyMyAqLwogCi0jZGVmaW5lIENBUFNSICAweDAwCi0jZGVmaW5lIENBUENSICAweDA0Ci0jZGVmaW5lIENBTUNSICAweDA4Ci0jZGVmaW5lIENNQ1lSICAweDBjCi0jZGVmaW5lIENBTU9SICAweDEwCi0jZGVmaW5lIENBUFdSICAweDE0Ci0jZGVmaW5lIENBSUZSICAweDE4Ci0jZGVmaW5lIENTVENSICAweDIwIC8qIG5vdCBvbiBzaDc3MjMgKi8KLSNkZWZpbmUgQ1NFQ1IgIDB4MjQgLyogbm90IG9uIHNoNzcyMyAqLwotI2RlZmluZSBDUkNOVFIgMHgyOAotI2RlZmluZSBDUkNNUFIgMHgyYwotI2RlZmluZSBDRkxDUiAgMHgzMAotI2RlZmluZSBDRlNaUiAgMHgzNAotI2RlZmluZSBDRFdEUiAgMHgzOAotI2RlZmluZSBDREFZUiAgMHgzYwotI2RlZmluZSBDREFDUiAgMHg0MAotI2RlZmluZSBDREJZUiAgMHg0NAotI2RlZmluZSBDREJDUiAgMHg0OAotI2RlZmluZSBDQkRTUiAgMHg0YwotI2RlZmluZSBDRldDUiAgMHg1YwotI2RlZmluZSBDTEZDUiAgMHg2MAotI2RlZmluZSBDRE9DUiAgMHg2NAotI2RlZmluZSBDRERDUiAgMHg2OAotI2RlZmluZSBDRERBUiAgMHg2YwotI2RlZmluZSBDRUlFUiAgMHg3MAotI2RlZmluZSBDRVRDUiAgMHg3NAotI2RlZmluZSBDU1RTUiAgMHg3YwotI2RlZmluZSBDU1JUUiAgMHg4MAotI2RlZmluZSBDRFNTUiAgMHg4NAotI2RlZmluZSBDREFZUjIgMHg5MAotI2RlZmluZSBDREFDUjIgMHg5NAotI2RlZmluZSBDREJZUjIgMHg5OAotI2RlZmluZSBDREJDUjIgMHg5YworI2RlZmluZSBDQVBTUiAgMHgwMCAvKiBDYXB0dXJlIHN0YXJ0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUENSICAweDA0IC8qIENhcHR1cmUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDQU1DUiAgMHgwOCAvKiBDYXB0dXJlIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ1lSICAweDBjIC8qIENhcHR1cmUgaW50ZXJmYWNlIGN5Y2xlICByZWdpc3RlciAqLworI2RlZmluZSBDQU1PUiAgMHgxMCAvKiBDYXB0dXJlIGludGVyZmFjZSBvZmZzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FQV1IgIDB4MTQgLyogQ2FwdHVyZSBpbnRlcmZhY2Ugd2lkdGggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FJRlIgIDB4MTggLyogQ2FwdHVyZSBpbnRlcmZhY2UgaW5wdXQgZm9ybWF0IHJlZ2lzdGVyICovCisjZGVmaW5lIENTVENSICAweDIwIC8qIENhbWVyYSBzdHJvYmUgY29udHJvbCByZWdpc3RlciAoPD0gc2g3NzIyKSAqLworI2RlZmluZSBDU0VDUiAgMHgyNCAvKiBDYW1lcmEgc3Ryb2JlIGVtaXNzaW9uIGNvdW50IHJlZ2lzdGVyICg8PSBzaDc3MjIpICovCisjZGVmaW5lIENSQ05UUiAweDI4IC8qIENFVSByZWdpc3RlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENSQ01QUiAweDJjIC8qIENFVSByZWdpc3RlciBmb3JjaWJsZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENGTENSICAweDMwIC8qIENhcHR1cmUgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0ZTWlIgIDB4MzQgLyogQ2FwdHVyZSBmaWx0ZXIgc2l6ZSBjbGlwIHJlZ2lzdGVyICovCisjZGVmaW5lIENEV0RSICAweDM4IC8qIENhcHR1cmUgZGVzdGluYXRpb24gd2lkdGggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBWVIgIDB4M2MgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgWSByZWdpc3RlciAqLworI2RlZmluZSBDREFDUiAgMHg0MCAvKiBDYXB0dXJlIGRhdGEgYWRkcmVzcyBDIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQllSICAweDQ0IC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBZIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQkNSICAweDQ4IC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBDIHJlZ2lzdGVyICovCisjZGVmaW5lIENCRFNSICAweDRjIC8qIENhcHR1cmUgYnVuZGxlIGRlc3RpbmF0aW9uIHNpemUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0ZXQ1IgIDB4NWMgLyogRmlyZXdhbGwgb3BlcmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0xGQ1IgIDB4NjAgLyogQ2FwdHVyZSBsb3ctcGFzcyBmaWx0ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDRE9DUiAgMHg2NCAvKiBDYXB0dXJlIGRhdGEgb3V0cHV0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0REQ1IgIDB4NjggLyogQ2FwdHVyZSBkYXRhIGNvbXBsZXhpdHkgbGV2ZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0REQVIgIDB4NmMgLyogQ2FwdHVyZSBkYXRhIGNvbXBsZXhpdHkgbGV2ZWwgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBDRUlFUiAgMHg3MCAvKiBDYXB0dXJlIGV2ZW50IGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VUQ1IgIDB4NzQgLyogQ2FwdHVyZSBldmVudCBmbGFnIGNsZWFyIHJlZ2lzdGVyICovCisjZGVmaW5lIENTVFNSICAweDdjIC8qIENhcHR1cmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIENTUlRSICAweDgwIC8qIENhcHR1cmUgc29mdHdhcmUgcmVzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RTU1IgIDB4ODQgLyogQ2FwdHVyZSBkYXRhIHNpemUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBWVIyIDB4OTAgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgWSByZWdpc3RlciAyICovCisjZGVmaW5lIENEQUNSMiAweDk0IC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIEMgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREJZUjIgMHg5OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAyICovCisjZGVmaW5lIENEQkNSMiAweDljIC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KIAogc3RhdGljIERFRklORV9NVVRFWChjYW1lcmFfbG9jayk7CiAKQEAgLTE2NSw2ICsxNjUsNyBAQAogCWNldV93cml0ZShwY2RldiwgQ0VUQ1IsIDB4MDMxN2YzMTMgXiAweDEwKTsKIAogCWlmIChwY2Rldi0+YWN0aXZlKSB7CisJCXBjZGV2LT5hY3RpdmUtPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwogCQljZXVfd3JpdGUocGNkZXYsIENEQVlSLCB2aWRlb2J1Zl90b19kbWFfY29udGlnKHBjZGV2LT5hY3RpdmUpKTsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMHgxKTsgLyogc3RhcnQgY2FwdHVyZSAqLwogCX0KQEAgLTIzNiw3ICsyMzcsNyBAQAogCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJXpkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAotCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmcGNkZXYtPmNhcHR1cmUpOwogCkBAIC0zMjMsMTIgKzMyNCwyNCBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihpY2QgIT0gcGNkZXYtPmljZCk7CiAKIAkvKiBkaXNhYmxlIGNhcHR1cmUsIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCWNldV93cml0ZShwY2RldiwgQ0VJRVIsIDApOwogCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDEgPDwgMTYpOyAvKiByZXNldCAqLworCisJLyogbWFrZSBzdXJlIGFjdGl2ZSBidWZmZXIgaXMgY2FuY2VsZWQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocGNkZXYtPmFjdGl2ZSkgeworCQlsaXN0X2RlbCgmcGNkZXYtPmFjdGl2ZS0+cXVldWUpOworCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQl3YWtlX3VwX2FsbCgmcGNkZXYtPmFjdGl2ZS0+ZG9uZSk7CisJCXBjZGV2LT5hY3RpdmUgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworCiAJaWNkLT5vcHMtPnJlbGVhc2UoaWNkKTsKIAogCWRldl9pbmZvKCZpY2QtPmRldiwKQEAgLTM5MSw3ICs0MDQsMjAgQEAKIAljZXVfd3JpdGUocGNkZXYsIENGTENSLCAwKTsgLyogZGF0YSBmZXRjaCBtb2RlIC0gbm8gc2NhbGluZyAqLwogCWNldV93cml0ZShwY2RldiwgQ0ZTWlIsIChpY2QtPmhlaWdodCA8PCAxNikgfCBjZnN6cl93aWR0aCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDTEZDUiwgMCk7IC8qIGRhdGEgZmV0Y2ggbW9kZSAtIG5vIGxvd3Bhc3MgZmlsdGVyICovCi0JY2V1X3dyaXRlKHBjZGV2LCBDRE9DUiwgMHgwMDAwMDAxNik7CisKKwkvKiBBIGZldyB3b3JkcyBhYm91dCBieXRlIG9yZGVyIChvYnNlcnZlZCBpbiBCaWcgRW5kaWFuIG1vZGUpCisJICoKKwkgKiBJbiBkYXRhIGZldGNoIG1vZGUgYnl0ZXMgYXJlIHJlY2VpdmVkIGluIGNodW5rcyBvZiA4IGJ5dGVzLgorCSAqIEQwLCBEMSwgRDIsIEQzLCBENCwgRDUsIEQ2LCBENyAoRDAgcmVjZWl2ZWQgZmlyc3QpCisJICoKKwkgKiBUaGUgZGF0YSBpcyBob3dldmVyIGJ5IGRlZmF1bHQgd3JpdHRlbiB0byBtZW1vcnkgaW4gcmV2ZXJzZSBvcmRlcjoKKwkgKiBENywgRDYsIEQ1LCBENCwgRDMsIEQyLCBEMSwgRDAgKEQ3IHdyaXR0ZW4gdG8gbG93ZXN0IGJ5dGUpCisJICoKKwkgKiBUaGUgbG93ZXN0IHRocmVlIGJpdHMgb2YgQ0RPQ1IgYWxsb3dzIHVzIHRvIGRvIHN3YXBwaW5nLAorCSAqIHVzaW5nIDcgd2Ugc3dhcCB0aGUgZGF0YSBieXRlcyB0byBtYXRjaCB0aGUgaW5jb21pbmcgb3JkZXI6CisJICogRDAsIEQxLCBEMiwgRDMsIEQ0LCBENSwgRDYsIEQ3CisJICovCisJY2V1X3dyaXRlKHBjZGV2LCBDRE9DUiwgMHgwMDAwMDAxNyk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENEV0RSLCBjZHdkcl93aWR0aCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDRldDUiwgMCk7IC8qIGtlZXAgImRhdGFmZXRjaCBmaXJld2FsbCIgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggMWFkYzI1Ny4uYmI3YTlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0KLXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gewotCWludCBpZmFjZTsKLQljaGFyICpmb3JtYXRfbmFtZTsKLQl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKLQl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKLQlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7Ci19OworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KIAogc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiB7CiAJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbzsKQEAgLTQ0LDExICszNiwyMSBAQAogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1faW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCisJaWYgKHAtPnBvd2VyKQorCQlwLT5wb3dlcigxKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCisJaWYgKHAtPnBvd2VyKQorCQlwLT5wb3dlcigwKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IGRiNjliYzUuLmVkYWVhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTU2MCw3ICs1NTksNyBAQAogCiAJCXVyYiA9IGRldi0+aXNvYnVmc1tpXS51cmI7CiAJCWlmICh1cmIpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmZGV2LT51cmJzX3VzZWQpKQorCQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnVyYnNfdXNlZCkgJiYgaXNfcHJlc2VudChkZXYpKQogCQkJCXVzYl9raWxsX3VyYih1cmIpOwogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCX0KQEAgLTY4OSwxOCArNjg4LDE0IEBACiB7CiAJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IGZwLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoZGV2LT5vd25lciAhPSBmcCkgewotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwotCQlyZXR1cm4gMDsKKwlpZiAoZGV2LT5vd25lciA9PSBmcCkgeworCQlzdGtfc3RvcF9zdHJlYW0oZGV2KTsKKwkJc3RrX2ZyZWVfYnVmZmVycyhkZXYpOworCQlkZXYtPm93bmVyID0gTlVMTDsKIAl9CiAKLQlzdGtfc3RvcF9zdHJlYW0oZGV2KTsKLQotCXN0a19mcmVlX2J1ZmZlcnMoZGV2KTsKLQotCWRldi0+b3duZXIgPSBOVUxMOwotCi0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKKwlpZihpc19wcmVzZW50KGRldikpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxNCw5ICs3MDksNiBAQAogCXN0cnVjdCBzdGtfc2lvX2J1ZmZlciAqc2J1ZjsKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCWlmIChkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87Ci0KIAlpZiAoIWlzX3ByZXNlbnQoZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGRldi0+b3duZXIgJiYgZGV2LT5vd25lciAhPSBmcCkKQEAgLTc3Myw5ICs3NjUsNiBAQAogewogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXBvbGxfd2FpdChmcCwgJmRldi0+d2FpdF9mcmFtZSwgd2FpdCk7CiAKIAlpZiAoIWlzX3ByZXNlbnQoZGV2KSkKQEAgLTE0MzYsNyArMTQyNSw3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfZnJhbWUpOwogCXN0a19yZW1vdmVfc3lzZnNfZmlsZXMoJmRldi0+dmRldik7CiAKLQlTVEtfSU5GTygiU3ludGVrIFVTQjIuMCBDYW1lcmEgcmVsZWFzZSByZXNvdXJjZXMiCisJU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzICIKIAkJInZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5taW5vcik7CiAKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKaW5kZXggMDg0YTg1Yi4uOWY2NzM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKQEAgLTEyMiw3ICsxMjIsNiBAQAogCiAjZGVmaW5lIHZkZXZfdG9fY2FtZXJhKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc3RrX2NhbWVyYSwgdmRldikKIAotdm9pZCBzdGtfY2FtZXJhX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqKTsKIGludCBzdGtfY2FtZXJhX3dyaXRlX3JlZyhzdHJ1Y3Qgc3RrX2NhbWVyYSAqLCB1MTYsIHU4KTsKIGludCBzdGtfY2FtZXJhX3JlYWRfcmVnKHN0cnVjdCBzdGtfY2FtZXJhICosIHUxNiwgaW50ICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggYmNjMzJmYS4uM2IwYjg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJUQ0wgTTI1MjNfM0RCSF9FIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJUQ0wgTTI1MjNfM0RJSF9FIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJUQ0wgTUZQRTA1XzJfVSJ9LAotCXsgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAkiUGhpbGlwcyBGTUQxMjE2TUVYIn0sCisJeyBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszLAkiUGhpbGlwcyBGTUQxMjE2TUVYIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJQaGlsaXBzIEZSSDIwMzZCIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJQYW5hc29uaWMgRU5HRjc1XzAxR0YifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIk1heExpbmVhciBNWEw1MDA1In0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKaW5kZXggZTk4NmMyOC4uZGEyN2E1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYwpAQCAtMjI5LDcgKzIyOSw4IEBACiAKIAljYW0tPmlucHV0ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dF9kZXYpIHsKLQkJd2FybigiTm90IGVub3VnaCBtZW1vcnkgZm9yIGNhbWVyYSdzIGlucHV0IGRldmljZVxuIik7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGNhbWVyYSdzIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI0Myw4ICsyNDQsOSBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJaWYgKGVycm9yKSB7Ci0JCXdhcm4oIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCi0JCSAgICAgZXJyb3IpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCisJCQkgZXJyb3IpOwogCQlpbnB1dF9mcmVlX2RldmljZShjYW0tPmlucHV0KTsKIAkJY2FtLT5pbnB1dCA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKaW5kZXggMDVjNjFiNS4uNDQ1OWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCkBAIC05Myw3ICs5Myw3IEBACiAKIAljYW0tPmlucHV0ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dF9kZXYpIHsKLQkJd2FybigiaW5zdWZmaWNpZW50IG1lbSBmb3IgY2FtIGlucHV0IGRldmljZSIpOworCQlkZXZfd2FybigmZGV2LT5kZXYsICJpbnN1ZmZpY2llbnQgbWVtIGZvciBjYW0gaW5wdXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA3LDggKzEwNyw5IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjYW0tPmlucHV0KTsKIAlpZiAoZXJyb3IpIHsKLQkJd2FybigiRmFpbGVkIHRvIHJlZ2lzdGVyIGNhbWVyYSdzIGlucHV0IGRldmljZSwgZXJyOiAlZFxuIiwKLQkJICAgICBlcnJvcik7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNhbWVyYSdzIGlucHV0IGRldmljZSwgZXJyOiAlZFxuIiwKKwkJCSBlcnJvcik7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGNhbS0+aW5wdXQpOwogCQljYW0tPmlucHV0ID0gTlVMTDsKIAl9CkBAIC01ODcsOCArNTg4LDkgQEAKIAkJCWRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKIAogCQlpZiAoc3QgPCAwKSB7Ci0JCQl3YXJuKCJEYXRhIGVycm9yOiBwYWNrZXQ9JWQuIGxlbj0lZC4gc3RhdHVzPSVkLiIsCi0JCQkgICAgICBpLCBuLCBzdCk7CisJCQlkZXZfd2FybigmdXZkLT5kZXYtPmRldiwKKwkJCQkgIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuXG4iLAorCQkJCSBpLCBuLCBzdCk7CiAJCQl1dmQtPnN0YXRzLmlzb19lcnJfY291bnQrKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02OTksNyArNzAxLDcgQEAKIAogCXJldCA9IHFjbV9jYW1lcmFfb2ZmKHV2ZCk7CiAJaWYgKHJldCkKLQkJd2FybigiY291bGRuJ3QgdHVybiB0aGUgY2FtIG9mZi4iKTsKKwkJZGV2X3dhcm4oJnV2ZC0+ZGV2LT5kZXYsICJjb3VsZG4ndCB0dXJuIHRoZSBjYW0gb2ZmLlxuIik7CiAKIAl1dmQtPnN0cmVhbWluZyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCmluZGV4IGIyNmI1NjMuLjllNGY1MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpAQCAtNDUsMTAgKzQ1LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInVzYnZpc2lvbi5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvcmVfZGVidWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IGUxMGIyNTYuLjc3YWViMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC02OSwxMCArNjksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAidXNidmlzaW9uLmgiCiAjaW5jbHVkZSAidXNidmlzaW9uLWNhcmRzLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCA3OTkzN2QxLi45MjhjYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC0zNiwxMCArMzYsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCAyMGMzYmU4Li44NDY3NjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC02MCwxMCArNjAsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkJpbGwgRGlya3MsIEp1c3RpbiBTY2hvZW1hbiwgR2VyZCBLbm9yciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKaW5kZXggYjU2Y2ZmYy4uOTE3Mjc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAltdXRleF9sb2NrKCZkdmItPmxvY2spOwogCWR2Yi0+bmZlZWRzLS07CiAJaWYgKDAgPT0gZHZiLT5uZmVlZHMgICYmICBOVUxMICE9IGR2Yi0+dGhyZWFkKSB7Ci0JCS8vIEZJWE1FOiBjeDg4MDJfY2FuY2VsX2J1ZmZlcnMoZGV2KTsKIAkJZXJyID0ga3RocmVhZF9zdG9wKGR2Yi0+dGhyZWFkKTsKIAkJZHZiLT50aHJlYWQgPSBOVUxMOwogCX0KQEAgLTEzNCwzMCArMTMzLDM4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiLAorc3RhdGljIGludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYWRhcHRlcihzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZmUsCiAJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAogCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkgIHNob3J0ICphZGFwdGVyX25yKQorCQkJICBjaGFyICphZGFwdGVyX25hbWUsCisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCkKIHsKIAlpbnQgcmVzdWx0OwogCi0JbXV0ZXhfaW5pdCgmZHZiLT5sb2NrKTsKKwltdXRleF9pbml0KCZmZS0+bG9jayk7CiAKIAkvKiByZWdpc3RlciBhZGFwdGVyICovCi0JcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlciwgZHZiLT5uYW1lLCBtb2R1bGUsIGRldmljZSwKLQkJCQkgICAgICBhZGFwdGVyX25yKTsKKwlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZmUtPmFkYXB0ZXIsIGFkYXB0ZXJfbmFtZSwgbW9kdWxlLAorCQlkZXZpY2UsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfcmVnaXN0ZXJfYWRhcHRlciBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAotCQkgICAgICAgZHZiLT5uYW1lLCByZXN1bHQpOwotCQlnb3RvIGZhaWxfYWRhcHRlcjsKKwkJICAgICAgIGFkYXB0ZXJfbmFtZSwgcmVzdWx0KTsKIAl9Ci0JZHZiLT5hZGFwdGVyLnByaXYgPSBhZGFwdGVyX3ByaXY7CisJZmUtPmFkYXB0ZXIucHJpdiA9IGFkYXB0ZXJfcHJpdjsKKwlmZS0+YWRhcHRlci5tZmVfc2hhcmVkID0gbWZlX3NoYXJlZDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIpCit7CisJaW50IHJlc3VsdDsKIAogCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCi0JcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkdmItPmFkYXB0ZXIsIGR2Yi0+ZnJvbnRlbmQpOworCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwdGVyLCBkdmItPmZyb250ZW5kKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHZiX3JlZ2lzdGVyX2Zyb250ZW5kIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCiAJCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7CkBAIC0xODMsNyArMTkwLDggQEAKIAlkdmItPmRteGRldi5maWx0ZXJudW0gICAgPSAyNTY7CiAJZHZiLT5kbXhkZXYuZGVtdXggICAgICAgID0gJmR2Yi0+ZGVtdXguZG14OwogCWR2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7Ci0JcmVzdWx0ID0gZHZiX2RteGRldl9pbml0KCZkdmItPmRteGRldiwgJmR2Yi0+YWRhcHRlcik7CisJcmVzdWx0ID0gZHZiX2RteGRldl9pbml0KCZkdmItPmRteGRldiwgYWRhcHRlcik7CisKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHZiX2RteGRldl9pbml0IGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCiAJCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7CkBAIC0yMTQsNyArMjIyLDExIEBACiAJfQogCiAJLyogcmVnaXN0ZXIgbmV0d29yayBhZGFwdGVyICovCi0JZHZiX25ldF9pbml0KCZkdmItPmFkYXB0ZXIsICZkdmItPm5ldCwgJmR2Yi0+ZGVtdXguZG14KTsKKwlkdmJfbmV0X2luaXQoYWRhcHRlciwgJmR2Yi0+bmV0LCAmZHZiLT5kZW11eC5kbXgpOworCWlmIChkdmItPm5ldC5kdmJkZXYgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfZmVfY29ubjsKKwl9CiAJcmV0dXJuIDA7CiAKIGZhaWxfZmVfY29ubjoKQEAgLTIyOSwzMCArMjQxLDE1MSBAQAogCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOwogZmFpbF9mcm9udGVuZDoKIAlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZnJvbnRlbmQpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7Ci1mYWlsX2FkYXB0ZXI6CisJZHZiLT5mcm9udGVuZCA9IE5VTEw7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YikKLXsKLQlkdmJfbmV0X3JlbGVhc2UoJmR2Yi0+bmV0KTsKLQlkdmItPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9tZW0pOwotCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX2h3KTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmR2Yi0+ZG14ZGV2KTsKLQlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOwotCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOwotCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKLX0KLQotRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcik7Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBjb21waWxlLWNvbW1hbmQ6ICJtYWtlIERWQj0xIgotICogRW5kOgotICovCisvKiBSZWdpc3RlciBhIHNpbmdsZSBhZGFwdGVyIGFuZCBvbmUgb3IgbW9yZSBmcm9udGVuZHMgKi8KK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAorCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCisJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKKwkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICBzaG9ydCAqYWRhcHRlcl9uciwKKwkJCSAgaW50IG1mZV9zaGFyZWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CisJaW50IHJlczsKKworCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChmLCAxKTsKKwlpZiAoIWZlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYWRhcHRlciB3aGljaCBoYXMgbm8gZnJvbnRlbmRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQnJpbmcgdXAgdGhlIGFkYXB0ZXIgKi8KKwlyZXMgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYWRhcHRlcihmLCBtb2R1bGUsIGFkYXB0ZXJfcHJpdiwgZGV2aWNlLAorCQlmZS0+ZHZiLm5hbWUsIGFkYXB0ZXJfbnIsIG1mZV9zaGFyZWQpOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsIHJlcyk7CisJCXJldHVybiByZXM7CisJfQorCisJLyogQXR0YWNoIGFsbCBvZiB0aGUgZnJvbnRlbmRzIHRvIHRoZSBhZGFwdGVyICovCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHEsICZmLT5mZWxpc3QpIHsKKwkJZmUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQsIGZlbGlzdCk7CisJCXJlcyA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZi0+YWRhcHRlciwgJmZlLT5kdmIpOworCQlpZiAocmVzIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9mcm9udGVuZCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAorCQkJCWZlLT5kdmIubmFtZSwgcmVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisJcmV0dXJuIDA7CisKK2VycjoKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyhmKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKTsKKwordm9pZCB2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJaWYgKGZlLT5kdmIubmV0LmR2YmRldikgeworCQkJZHZiX25ldF9yZWxlYXNlKCZmZS0+ZHZiLm5ldCk7CisJCQlmZS0+ZHZiLmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZlLT5kdmIuZGVtdXguZG14LAorCQkJCSZmZS0+ZHZiLmZlX21lbSk7CisJCQlmZS0+ZHZiLmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZlLT5kdmIuZGVtdXguZG14LAorCQkJCSZmZS0+ZHZiLmZlX2h3KTsKKwkJCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmUtPmR2Yi5kbXhkZXYpOworCQkJZHZiX2RteF9yZWxlYXNlKCZmZS0+ZHZiLmRlbXV4KTsKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZlLT5kdmIuZnJvbnRlbmQpOworCQl9CisJCWlmIChmZS0+ZHZiLmZyb250ZW5kKQorCQkJLyogYWx3YXlzIGFsbG9jYXRlZCwgbWF5IGhhdmUgYmVlbiByZXNldCAqLworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChmZS0+ZHZiLmZyb250ZW5kKTsKKwkJbGlzdF9kZWwobGlzdCk7CisJCWtmcmVlKGZlKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmYtPmFkYXB0ZXIpOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICp2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKAorCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLCBpbnQgaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUsICpyZXQgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJaWYgKGZlLT5pZCA9PSBpZCkgeworCQkJcmV0ID0gZmU7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKTsKKworaW50IHZpZGVvYnVmX2R2Yl9maW5kX2Zyb250ZW5kKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAorCXN0cnVjdCBkdmJfZnJvbnRlbmQgKnApCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnE7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUgPSBOVUxMOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJaWYgKGZlLT5kdmIuZnJvbnRlbmQgPT0gcCkgeworCQkJcmV0ID0gZmUtPmlkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICp2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQoCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKworCWZlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCksIEdGUF9LRVJORUwpOworCWlmIChmZSA9PSBOVUxMKQorCQlnb3RvIGZhaWxfYWxsb2M7CisKKwlmZS0+aWQgPSBpZDsKKwltdXRleF9pbml0KCZmZS0+ZHZiLmxvY2spOworCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZmUtPmZlbGlzdCwgJmYtPmZlbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworZmFpbF9hbGxvYzoKKwlyZXR1cm4gZmU7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IDhlYzU3ZGYuLjFlZmM1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC0zMCwxMCArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQotI2lmZGVmIENPTkZJR19LTU9ECiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1zZ2kuaD4KQEAgLTQ2MzQsNyArNDYzMSw3IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkgJiYgZGVmaW5lZChNT0RVTEUpCisjaWZkZWYgTU9EVUxFCiAJcmVxdWVzdF9tb2R1bGUoInNhYTcxOTEiKTsKIAlyZXF1ZXN0X21vZHVsZSgiaW5keWNhbSIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDY1YzhhZjEuLjdkN2U1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0xMjgsMTIgKzEyOCw1NiBAQAogCWludCAgIGRlcHRoOwogfTsKIAotc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXQgPSB7Ci0JLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAotCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAotCS5kZXB0aCAgICA9IDE2LAorc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NjUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NjUsIC8qIGdnZ2JiYmJiIHJycnJyZ2dnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTY1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgLyogcnJycnJnZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NTUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsIC8qIGdnZ2JiYmJiIGFycnJycmdnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTU1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgLyogYXJycnJyZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgdml2aV9mbXQgKmdldF9mb3JtYXQoc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXZpX2ZtdCAqZm10OworCXVuc2lnbmVkIGludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGsrKykgeworCQlmbXQgPSAmZm9ybWF0c1trXTsKKwkJaWYgKGZtdC0+Zm91cmNjID09IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoayA9PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmZm9ybWF0c1trXTsKK30KKwogc3RydWN0IHNnX3RvX2FkZHIgewogCWludCBwb3M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTE5MCw2ICsyMzQsNyBAQAogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZiX3ZpZHE7CiAKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGJhcnNbOF1bM107CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNCwxMyArMjc5LDEwNyBAQAogI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1CiAjZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAogCi1zdGF0aWMgdm9pZCBnZW5fbGluZShjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCitzdGF0aWMgdm9pZCBnZW5fdHdvcGl4KHN0cnVjdCB2aXZpX2ZoICpmaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY29sb3Jwb3MpCit7CisJdW5zaWduZWQgY2hhciByX3ksIGdfdSwgYl92OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGNvbG9yOworCisJcl95ID0gZmgtPmJhcnNbY29sb3Jwb3NdWzBdOyAvKiBSIG9yIHByZWNhbGN1bGF0ZWQgWSAqLworCWdfdSA9IGZoLT5iYXJzW2NvbG9ycG9zXVsxXTsgLyogRyBvciBwcmVjYWxjdWxhdGVkIFUgKi8KKwliX3YgPSBmaC0+YmFyc1tjb2xvcnBvc11bMl07IC8qIEIgb3IgcHJlY2FsY3VsYXRlZCBWICovCisKKwlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7CisJCXAgPSBidWYgKyBjb2xvcjsKKworCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gcl95OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCSpwID0gZ191OworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCSpwID0gYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSByX3k7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJKnAgPSBnX3U7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJKnAgPSBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMykgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDMpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMikgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDIpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2VuX2xpbmUoc3RydWN0IHZpdmlfZmggKmZoLCBjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCiAJCWludCBobWF4LCBpbnQgbGluZSwgaW50IGNvdW50LCBjaGFyICp0aW1lc3RyKQogewotCWludCAgdywgaSwgaiwgeTsKKwlpbnQgIHcsIGksIGo7CiAJaW50IHBvcyA9IGluaXBvczsKLQljaGFyICpwLCAqczsKLQl1OCAgIGNociwgciwgZywgYiwgY29sb3I7CisJY2hhciAqczsKKwl1OCBjaHI7CiAKIAkvKiBXZSB3aWxsIGp1c3QgZHVwbGljYXRlIHRoZSBzZWNvbmQgcGl4ZWwgYXQgdGhlIHBhY2tldCAqLwogCXdtYXggLz0gMjsKQEAgLTI0OCwyNyArMzg3LDkgQEAKIAkvKiBHZW5lcmF0ZSBhIHN0YW5kYXJkIGNvbG9yIGJhciBwYXR0ZXJuICovCiAJZm9yICh3ID0gMDsgdyA8IHdtYXg7IHcrKykgewogCQlpbnQgY29sb3Jwb3MgPSAoKHcgKyBjb3VudCkgKiA4Lyh3bWF4ICsgMSkpICUgODsKLQkJciA9IGJhcnNbY29sb3Jwb3NdWzBdOwotCQlnID0gYmFyc1tjb2xvcnBvc11bMV07Ci0JCWIgPSBiYXJzW2NvbG9ycG9zXVsyXTsKIAotCQlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7Ci0JCQlwID0gYmFzZXAgKyBwb3M7Ci0KLQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMjoKLQkJCQkqcCA9IFRPX1kociwgZywgYik7CS8qIEx1bWEgKi8KLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQkqcCA9IFRPX1UociwgZywgYik7CS8qIENiICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJKnAgPSBUT19WKHIsIGcsIGIpOwkvKiBDciAqLwotCQkJCWJyZWFrOwotCQkJfQotCQkJcG9zKys7Ci0JCX0KKwkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIGNvbG9ycG9zKTsKKwkJcG9zICs9IDQ7IC8qIG9ubHkgMTYgYnBwIHN1cHBvcnRlZCBmb3Igbm93ICovCiAJfQogCiAJLyogQ2hlY2tzIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGltZXN0YW1wICovCkBAIC0yODMsMzggKzQwNCwxMiBAQAogCQlmb3IgKHMgPSB0aW1lc3RyOyAqczsgcysrKSB7CiAJCQljaHIgPSByb204eDE2X2JpdHNbKCpzLTB4MzApKjE2K2xpbmUtVFNUQU1QX01JTl9ZXTsKIAkJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKSB7Ci0JCQkJCS8qIEZvbnQgY29sb3IqLwotCQkJCQlyID0gMDsKLQkJCQkJZyA9IDE5ODsKLQkJCQkJYiA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogQmFja2dyb3VuZCBjb2xvciAqLwotCQkJCQlyID0gYmFyc1tCTEFDS11bMF07Ci0JCQkJCWcgPSBiYXJzW0JMQUNLXVsxXTsKLQkJCQkJYiA9IGJhcnNbQkxBQ0tdWzJdOwotCQkJCX0KLQogCQkJCXBvcyA9IGluaXBvcyArIGogKiAyOwotCQkJCWZvciAoY29sb3IgPSAwOyBjb2xvciA8IDQ7IGNvbG9yKyspIHsKLQkJCQkJcCA9IGJhc2VwICsgcG9zOwotCi0JCQkJCXkgPSBUT19ZKHIsIGcsIGIpOwotCi0JCQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCQkJY2FzZSAwOgotCQkJCQljYXNlIDI6Ci0JCQkJCQkqcCA9IFRPX1kociwgZywgYik7IC8qIEx1bWEgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDE6Ci0JCQkJCQkqcCA9IFRPX1UociwgZywgYik7IC8qIENiICovCi0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAzOgotCQkJCQkJKnAgPSBUT19WKHIsIGcsIGIpOyAvKiBDciAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJcG9zKys7Ci0JCQkJfQorCQkJCS8qIERyYXcgd2hpdGUgZm9udCBvbiBibGFjayBiYWNrZ3JvdW5kICovCisJCQkJaWYgKGNociAmIDEgPDwgKDcgLSBpKSkKKwkJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIFdISVRFKTsKKwkJCQllbHNlCisJCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBCTEFDSyk7CiAJCQkJaisrOwogCQkJfQogCQl9CkBAIC0zMjQsOCArNDE5LDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZGV2ICpkZXYsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgdml2aV9maWxsYnVmZihzdHJ1Y3Qgdml2aV9maCAqZmgsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQogeworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaCAsIHBvcyA9IDA7CiAJaW50IGhtYXggID0gYnVmLT52Yi5oZWlnaHQ7CiAJaW50IHdtYXggID0gYnVmLT52Yi53aWR0aDsKQEAgLTM0MSw3ICs0MzcsNyBAQAogCQlyZXR1cm47CiAKIAlmb3IgKGggPSAwOyBoIDwgaG1heDsgaCsrKSB7Ci0JCWdlbl9saW5lKHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKKwkJZ2VuX2xpbmUoZmgsIHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKIAkJCSBkZXYtPnRpbWVzdHIpOwogCQltZW1jcHkodmJ1ZiArIHBvcywgdG1wYnVmLCB3bWF4ICogMik7CiAJCXBvcyArPSB3bWF4KjI7CkBAIC00MTAsNyArNTA2LDcgQEAKIAlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwogCiAJLyogRmlsbCBidWZmZXIgKi8KLQl2aXZpX2ZpbGxidWZmKGRldiwgYnVmKTsKKwl2aXZpX2ZpbGxidWZmKGZoLCBidWYpOwogCWRwcmludGsoZGV2LCAxLCAiZmlsbGVkIGJ1ZmZlciAlcFxuIiwgYnVmKTsKIAogCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CkBAIC02MzYsMTEgKzczMiwxNSBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7Ci0JaWYgKGYtPmluZGV4ID4gMCkKKwlzdHJ1Y3Qgdml2aV9mbXQgKmZtdDsKKworCWlmIChmLT5pbmRleCA+PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdC5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdC5mb3VyY2M7CisJZm10ID0gJmZvcm1hdHNbZi0+aW5kZXhdOworCisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm10LT5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZtdC0+Zm91cmNjOwogCXJldHVybiAwOwogfQogCkBAIC02NzAsMTMgKzc3MCwxMiBAQAogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAl1bnNpZ25lZCBpbnQgbWF4dywgbWF4aDsKIAotCWlmIChmb3JtYXQuZm91cmNjICE9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpIHsKLQkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuICIKLQkJCSJEcml2ZXIgYWNjZXB0cyBvbmx5IDB4JTA4eFxuIiwKLQkJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQsIGZvcm1hdC5mb3VyY2MpOworCWZtdCA9IGdldF9mb3JtYXQoZik7CisJaWYgKCFmbXQpIHsKKwkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuXG4iLAorCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlmbXQgPSAmZm9ybWF0OwogCiAJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwogCkBAIC03MTQsNiArODEzLDggQEAKIHsKIAlzdHJ1Y3Qgdml2aV9maCAgKmZoID0gcHJpdjsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisJdW5zaWduZWQgY2hhciByLCBnLCBiOworCWludCBrLCBpc195dXY7CiAKIAlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CiAJaWYgKHJldCA8IDApCkBAIC03MjcsMTIgKzgyOCw0OSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmaC0+Zm10ICAgICAgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgICAgICAgPSBnZXRfZm9ybWF0KGYpOwogCWZoLT53aWR0aCAgICAgICAgID0gZi0+Zm10LnBpeC53aWR0aDsKIAlmaC0+aGVpZ2h0ICAgICAgICA9IGYtPmZtdC5waXguaGVpZ2h0OwogCWZoLT52Yl92aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKIAlmaC0+dHlwZSAgICAgICAgICA9IGYtPnR5cGU7CiAKKwkvKiBwcmVjYWxjdWxhdGUgY29sb3IgYmFyIHZhbHVlcyB0byBzcGVlZCB1cCByZW5kZXJpbmcgKi8KKwlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCXIgPSBiYXJzW2tdWzBdOworCQlnID0gYmFyc1trXVsxXTsKKwkJYiA9IGJhcnNba11bMl07CisJCWlzX3l1diA9IDA7CisKKwkJc3dpdGNoIChmaC0+Zm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwkJCWlzX3l1diA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjVYOgorCQkJciA+Pj0gMzsKKwkJCWcgPj49IDI7CisJCQliID4+PSAzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKKwkJCXIgPj49IDM7CisJCQlnID4+PSAzOworCQkJYiA+Pj0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGlzX3l1dikgeworCQkJZmgtPmJhcnNba11bMF0gPSBUT19ZKHIsIGcsIGIpOwkvKiBMdW1hICovCisJCQlmaC0+YmFyc1trXVsxXSA9IFRPX1UociwgZywgYik7CS8qIENiICovCisJCQlmaC0+YmFyc1trXVsyXSA9IFRPX1YociwgZywgYik7CS8qIENyICovCisJCX0gZWxzZSB7CisJCQlmaC0+YmFyc1trXVswXSA9IHI7CisJCQlmaC0+YmFyc1trXVsxXSA9IGc7CisJCQlmaC0+YmFyc1trXVsyXSA9IGI7CisJCX0KKwl9CisKIAlyZXQgPSAwOwogb3V0OgogCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CkBAIC04ODYsOCArMTAyNCw2IEBACiAJRmlsZSBvcGVyYXRpb25zIGZvciB0aGUgZGV2aWNlCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIGxpbmVfYnVmX3NpemUobm9ybSkgKG5vcm1fbWF4dyhub3JtKSooZm9ybWF0LmRlcHRoKzcpLzgpCi0KIHN0YXRpYyBpbnQgdml2aV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC05MzYsNyArMTA3Miw3IEBACiAJZmgtPmRldiAgICAgID0gZGV2OwogCiAJZmgtPnR5cGUgICAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWZoLT5mbXQgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgID0gJmZvcm1hdHNbMF07CiAJZmgtPndpZHRoICAgID0gNjQwOwogCWZoLT5oZWlnaHQgICA9IDQ4MDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwppbmRleCA0NWJlOWVjLi42N2FhMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwpAQCAtMjIsMzIgKzIyLDIxIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCi0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogCi0jZGVmaW5lIEkyQ19WUFgzMjIwICAgICAgICAweDg2Ci0jZGVmaW5lIFZQWDMyMjBfREVCVUcJS0VSTl9ERUJVRyAidnB4MzIyMDogIgorTU9EVUxFX0RFU0NSSVBUSU9OKCJ2cHgzMjIwYS92cHgzMjE2Yi92cHgzMjE0YyB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTGF1cmVudCBQaW5jaGFydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBWUFhfVElNRU9VVF9DT1VOVCAgMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY3LDEwICs1Niw4IEBACiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJpbnRlcm5hbCIsICJjb21wb3NpdGUiLCAic3ZpZGVvIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXZweDMyMjBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKKworc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTc4LDE1ICs2NSwxMiBAQAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci12cHgzMjIwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfZnBfc3RhdHVzIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwpAQCAtMTA2LDE0ICs5MCwxMSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9mcF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICB1OCAgICAgICAgICAgICAgICAgZnBhZGRyLAotCQkgIHUxNiAgICAgICAgICAgICAgICBkYXRhKQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGZwYWRkciwgdTE2IGRhdGEpCiB7CiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFdSIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI3LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTIyLDIyICsxMDMsMjAgQEAKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgZGF0YSB0byB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjgsIHN3YWIxNihkYXRhKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2Ci12cHgzMjIwX2ZwX3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1MTYgICAgICAgICAgICAgICAgZnBhZGRyKQorc3RhdGljIHUxNiB2cHgzMjIwX2ZwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGZwYWRkcikKIHsKIAlzMTYgZGF0YTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBSRCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNiwgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0NywyNSArMTI2LDIyIEBACiAJLyogUmVhZCB0aGUgMTYtYml0IGRhdGEgZnJvbSB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlkYXRhID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMHgyOCk7CiAJaWYgKGRhdGEgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBzd2FiMTYoZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IC0xOwogCiAJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCWlmICgocmV0ID0KLQkJICAgICB2cHgzMjIwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKSkgPCAwKQorCQlyZXQgPSB2cHgzMjIwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAkJbGVuIC09IDI7CiAJfQpAQCAtMTczLDEwICsxNDksOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfd3JpdGVfZnBfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCB1MTYgICAgICAgICAqZGF0YSwKLQkJCXVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHZweDMyMjBfd3JpdGVfZnBfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3QgdTE2ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKQEAgLTI4NSwyNSArMjU5LDIwIEBACiAJMHg0YiwgMHgyOTgsCQkvKiBQTEwgZ2FpbiAqLwogfTsKIAotc3RhdGljIHZvaWQKLXZweDMyMjBfZHVtcF9pMmMgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCB2cHgzMjIwX2R1bXBfaTJjKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IGxlbiA9IHNpemVvZihpbml0X2NvbW1vbik7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluaXRfY29tbW9uOwogCiAJd2hpbGUgKGxlbiA+IDEpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRyAidnB4MzIxNmIgaTJjIHJlZyAweCUwMnggZGF0YSAweCUwMnhcbiIsCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImkyYyByZWcgMHglMDJ4IGRhdGEgMHglMDJ4XG4iLAogCQkJKmRhdGEsIHZweDMyMjBfcmVhZChjbGllbnQsICpkYXRhKSk7CiAJCWRhdGEgKz0gMjsKIAkJbGVuIC09IDI7CiAJfQogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2NvbW1hbmQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgdnB4MzIyMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTMxNSw3ICsyODQsNiBAQAogCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwKIAkJCQkgICAgICAgc2l6ZW9mKGluaXRfZnApID4+IDEpOwogCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKQEAgLTMzNCwyMSArMzAyLDIwIEBACiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwogCQkJYnJlYWs7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9EVU1QOgogCXsKIAkJdnB4MzIyMF9kdW1wX2kyYyhjbGllbnQpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewogCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFU1xuIik7CiAKIAkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKIAkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKQEAgLTM1NywyMCArMzI0LDE4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSAzOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewogCQlpbnQgcmVzID0gMCwgc3RhdHVzOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogREVDT0RFUl9HRVRfU1RBVFVTXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX1NUQVRVU1xuIik7CiAKIAkJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHgwZjMpOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzOiAweCUwNHhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTA0eFxuIiwgc3RhdHVzKTsKIAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7CkBAIC0zNzksNyArMzQ0LDYgQEAKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EIHwgREVDT0RFUl9TVEFUVVNfQ09MT1I7CiAKIAkJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgewotCiAJCQljYXNlIDB4MDA6CiAJCQljYXNlIDB4MTA6CiAJCQljYXNlIDB4MTQ6CkBAIC00MDAsOCArMzY0LDggQEAKIAkJfQogCiAJCSooaW50ICopIGFyZyA9IHJlczsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfTk9STToKIAl7CkBAIC00MTMsNTAgKzM3Nyw0MyBAQAogCQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KIAkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfU0VUX05PUk0gJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfU0VUX05PUk0gJWRcbiIsICppYXJnKTsKIAkJc3dpdGNoICgqaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKIAkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1BBTDoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gUEFMXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfc2VjYW0sCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gU0VDQU1cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9BVVRPOgogCQkJLyogRklYTUUgVGhpcyBpcyBvbmx5IHByZWxpbWluYXJ5IHN1cHBvcnQgKi8KIAkJCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIDB4MjA7CiAJCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgMHgwMGMwIHwgZGF0YSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gQXV0b1xuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gQVVUT1xuIik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CiAKIAkJLyogQW5kIGhlcmUgd2Ugc2V0IHRoZSBiYWNrZWQgdXAgdmlkZW8gaW5wdXQgYWdhaW4gKi8KIAkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOwogCQl1ZGVsYXkoMTApOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC00NzUsOCArNDMyLDcgQEAKIAkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IGlucHV0IHN3aXRjaGVkIHRvICVzXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaW5wdXRzWyppYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbKmlhcmddKTsKIAogCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHgzMywgaW5wdXRbKmlhcmddWzBdKTsKIApAQCAtNDg4LDggKzQ0NCw4IEBACiAJCQkJIGRhdGEgfCAoaW5wdXRbKmlhcmddWzFdIDw8IDUpIHwgMHgwMDEwKTsKIAogCQl1ZGVsYXkoMTApOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewpAQCAtNDk5LDE5ICs0NTUsMTggQEAKIAkJaWYgKCppYXJnICE9IDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBERUNPREVSX0VOQUJMRV9PVVRQVVQgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwgKmlhcmcpOwogCiAJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGYyLCAoKmlhcmcgPyAweDFiIDogMHgwMCkpOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgogCXsKQEAgLTU0Miw4ICs0OTcsOCBAQAogCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4MWMsCiAJCQkJCSAoKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA2KSAmIDB4RkZGKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NTIsOCArNTA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9pbml0X2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXZweDMyMjBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKQEAgLTU2NywxMTUgKzUyMSwyNiBAQAogICogQ2xpZW50IG1hbmFnZW1lbnQgY29kZQogICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19WUFgzMjIwID4+IDEsIChJMkNfVlBYMzIyMCA+PiAxKSArIDQsCi0JSTJDX0NMSUVOVF9FTkQKLX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg2ID4+IDEsIDB4OGUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdnB4MzIyMF9pMmNfZHJpdmVyOwotCi1zdGF0aWMgaW50Ci12cHgzMjIwX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHZweDMyMjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXZweDMyMjBfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlcjsKLQotCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXNcbiIsIF9fZnVuY19fKTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwl1OCB2ZXI7CisJdTE2IHBuOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKLQkgICAgKGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCi0JCXJldHVybiAwOwotCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJnZweDMyMjBfaTJjX2RyaXZlcjsKLQotCS8qIENoZWNrIGZvciBtYW51ZmFjdHVyZSBJRCBhbmQgcGFydCBudW1iZXIgKi8KLQlpZiAoa2luZCA8IDApIHsKLQkJdTggaWQ7Ci0JCXUxNiBwbjsKLQotCQlpZCA9IHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDApOwotCQlpZiAoaWQgIT0gMHhlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSJ2cHgzMjIwX2F0dGFjaDogV3JvbmcgbWFudWZhY3R1cmVyIElEICgweCUwMngpXG4iLAotCQkJCWlkKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCXBuID0gKHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDIpIDw8IDgpICsKLQkJICAgIHZweDMyMjBfcmVhZChjbGllbnQsIDB4MDEpOwotCQlzd2l0Y2ggKHBuKSB7Ci0JCWNhc2UgMHg0NjgwOgotCQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAidnB4MzIyMGEiLAotCQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQyNjA6Ci0JCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJ2cHgzMjE2YiIsCi0JCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDI4MDoKLQkJCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInZweDMyMTRjIiwKLQkJCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBXcm9uZyBwYXJ0IG51bWJlciAoMHglMDR4KVxuIiwKLQkJCQlfX2Z1bmNfXywgcG4pOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiZm9yY2VkIHZweDMyeHgiLAotCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cHgzMjIwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC02ODUsNjMgKzU1MCw1MiBAQAogCWRlY29kZXItPnNhdCA9IDMyNzY4OwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gZXJyOworCXZlciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDApOworCXBuID0gKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDIpIDw8IDgpICsKKwkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMSk7CisJaWYgKHZlciA9PSAweGVjKSB7CisJCXN3aXRjaCAocG4pIHsKKwkJY2FzZSAweDQ2ODA6CisJCQluYW1lID0gInZweDMyMjBhIjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI2MDoKKwkJCW5hbWUgPSAidnB4MzIxNmIiOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MjgwOgorCQkJbmFtZSA9ICJ2cHgzMjE0YyI7CisJCQlicmVhazsKKwkJfQogCX0KLQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogdnB4MzJ4eCBjbGllbnQgZm91bmQgYXQgYWRkcmVzcyAweCUwMnhcbiIsCi0JCUkyQ19OQU1FKGNsaWVudCksIGNsaWVudC0+YWRkciA8PCAxKTsKKwlpZiAobmFtZSkKKwkJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwllbHNlCisJCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgKCUwMng6JTA0eCkgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQl2ZXIsIHBuLCBjbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCXZweDMyMjBfaW5pdF9jbGllbnQoY2xpZW50KTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHZweDMyMjBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmdnB4MzIyMF9kZXRlY3RfY2xpZW50KTsKLQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBpMmNfcHJvYmUgcmV0dXJuZWQgJWRcbiIsCi0JCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGNvZGUKLSAqLwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdnB4MzIyMF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInZweDMyMjAiLAotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQotCS5hdHRhY2hfYWRhcHRlciA9IHZweDMyMjBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSB2cHgzMjIwX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdnB4MzIyMF9pZFtdID0geworCXsgInZweDMyMjBhIiwgMCB9LAorCXsgInZweDMyMTZiIiwgMCB9LAorCXsgInZweDMyMTRjIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB2cHgzMjIwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXZweDMyMjBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnZweDMyMjBfaTJjX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotdnB4MzIyMF9jbGVhbnVwICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZ2cHgzMjIwX2kyY19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh2cHgzMjIwX2luaXQpOwotbW9kdWxlX2V4aXQodnB4MzIyMF9jbGVhbnVwKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJ2cHgzMjIwYS92cHgzMjE2Yi92cHgzMjE0YyB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiTGF1cmVudCBQaW5jaGFydCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInZweDMyMjAiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCS5jb21tYW5kID0gdnB4MzIyMF9jb21tYW5kLAorCS5wcm9iZSA9IHZweDMyMjBfcHJvYmUsCisJLnJlbW92ZSA9IHZweDMyMjBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHZweDMyMjBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCAxMWVkZjc5Li5kY2Q0NWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMTExLDcgKzExMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFyYW1fbnZbMjRdOyAvKiBudW1iZXIgb2YgdmFsdWVzIHBlciBwYXJhbWV0ZXIgKi8KIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIG1vZHVsZV9wYXJhbShvdm1vZF9sb2FkLCBib29sLCAwNjQ0KTsKICNlbmRpZgogbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIG1vZHVsZV9wYXJhbShzcGVjaWZpY19kZWJ1ZywgYm9vbCwgMDY0NCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIE1PRFVMRV9QQVJNX0RFU0Mob3Ztb2RfbG9hZCwKIAkJICJcbjwwfDE+IEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZy4iCiAJCSAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwppbmRleCAzMjgyYmU3Li5mYTVmMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtODE3LDYgKzgxNyw3IEBACiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOworCXpyLT5pMmNfYWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7CiAJenItPmkyY19hZGFwdGVyLmlkID0gSTJDX0hXX0JfWlIzNjA2NzsKIAl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlcjsKIAl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwppbmRleCAyNWRlNzYzLi5kYjExYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKQEAgLTI5OTYsNyArMjk5Niw2IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygzLCAidW5zdXBwb3J0ZWRcbiIpOwogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwppbmRleCA2ZTI5MWJmLi41MjYzOTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwpAQCAtMTA0NCw3ICsxMDQ0LDYgQEAKIAogCQlzX2F0dHItPmRldl9hdHRyLmF0dHIubmFtZSA9IHNfYXR0ci0+bmFtZTsKIAkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwotCQlzX2F0dHItPmRldl9hdHRyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAkJc19hdHRyLT5kZXZfYXR0ci5zaG93ID0gbXNwcm9fYmxvY2tfYXR0cl9zaG93KHNfYXR0ci0+aWQpOwogCiAJCWlmICghcmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL01ha2VmaWxlIGIvZHJpdmVycy9tZXNzYWdlL2kyby9NYWtlZmlsZQppbmRleCAyYzJlMzlhLi5iMDk4MmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAjIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2Ugc2hvdWxkIGJlIGJ1aWx0IGNvbmRpdGlvbmFsbHkuCiAjCiAKLWkyb19jb3JlLXkJCSs9IGlvcC5vIGRyaXZlci5vIGRldmljZS5vIGRlYnVnLm8gcGNpLm8gZXhlYy1vc20ubworaTJvX2NvcmUteQkJKz0gaW9wLm8gZHJpdmVyLm8gZGV2aWNlLm8gZGVidWcubyBwY2kubyBleGVjLW9zbS5vIG1lbW9yeS5vCiBpMm9fYnVzLXkJCSs9IGJ1cy1vc20ubwogaTJvX2NvbmZpZy15CQkrPSBjb25maWctb3NtLm8KIG9iai0kKENPTkZJR19JMk8pCSs9IGkyb19jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCmluZGV4IDg3NzRjNjcuLjU0YzJlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIAlyZXMudmlydCA9IE5VTEw7CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZyZXMsIHJlc2xlbiwgR0ZQX0tFUk5FTCkpCisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmcmVzLCByZXNsZW4pKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1zZyA9IGkyb19tc2dfZ2V0X3dhaXQoYywgSTJPX1RJTUVPVVRfTUVTU0FHRV9HRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDZjYmNjMjEuLjU2ZmFlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTM4OCw4ICszODgsOCBAQAogCiAJZGV2ID0gJmMtPnBkZXYtPmRldjsKIAotCWlmIChpMm9fZG1hX3JlYWxsb2MKLQkgICAgKGRldiwgJmMtPmRsY3QsIGxlMzJfdG9fY3B1KHNiLT5leHBlY3RlZF9sY3Rfc2l6ZSksIEdGUF9LRVJORUwpKQorCWlmIChpMm9fZG1hX3JlYWxsb2MoZGV2LCAmYy0+ZGxjdCwKKwkJCQkJbGUzMl90b19jcHUoc2ItPmV4cGVjdGVkX2xjdF9zaXplKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbXNnID0gaTJvX21zZ19nZXRfd2FpdChjLCBJMk9fVElNRU9VVF9NRVNTQUdFX0dFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IDQyMzhkZTkuLmEzZmFiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlpZiAoSVNfRVJSKG1zZykpCiAJCXJldHVybiBQVFJfRVJSKG1zZyk7CiAKLQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCAmYnVmZmVyLCBmcmFnc2l6ZSwgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCAmYnVmZmVyLCBmcmFnc2l6ZSkpIHsKIAkJaTJvX21zZ19ub3AoYywgbXNnKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzM5LDcgKzMzOSw3IEBACiAJaWYgKElTX0VSUihtc2cpKQogCQlyZXR1cm4gUFRSX0VSUihtc2cpOwogCi0JaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUpKSB7CiAJCWkyb19tc2dfbm9wKGMsIG1zZyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTYzNCw5ICs2MzQsNyBAQAogCQkJc2dfc2l6ZSA9IHNnW2ldLmZsYWdfY291bnQgJiAweGZmZmZmZjsKIAkJCXAgPSAmKHNnX2xpc3Rbc2dfaW5kZXhdKTsKIAkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRyYW5zZmVyICovCi0JCQlpZiAoaTJvX2RtYV9hbGxvYwotCQkJICAgICgmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplLAotCQkJICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpKSB7CisJCQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogQ291bGQgbm90IGFsbG9jYXRlIFNHIGJ1ZmZlciAtIHNpemUgPSAlZCBidWZmZXIgbnVtYmVyICVkIG9mICVkXG4iLAogCQkJCSAgICAgICBjLT5uYW1lLCBzZ19zaXplLCBpLCBzZ19jb3VudCk7CkBAIC03ODAsMTIgKzc3OCwxMSBAQAogCXUzMiBzaXplID0gMDsKIAl1MzIgcmVwbHlfc2l6ZSA9IDA7CiAJdTMyIHJjb2RlID0gMDsKLQl2b2lkICpzZ19saXN0W1NHX1RBQkxFU0laRV07CisJc3RydWN0IGkyb19kbWEgc2dfbGlzdFtTR19UQUJMRVNJWkVdOwogCXUzMiBzZ19vZmZzZXQgPSAwOwogCXUzMiBzZ19jb3VudCA9IDA7CiAJaW50IHNnX2luZGV4ID0gMDsKIAl1MzIgaSA9IDA7Ci0Jdm9pZCAqcCA9IE5VTEw7CiAJaTJvX3N0YXR1c19ibG9jayAqc2I7CiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CiAJdW5zaWduZWQgaW50IGlvcDsKQEAgLTg0Miw2ICs4MzksNyBAQAogCW1lbXNldChzZ19saXN0LCAwLCBzaXplb2Yoc2dfbGlzdFswXSkgKiBTR19UQUJMRVNJWkUpOwogCWlmIChzZ19vZmZzZXQpIHsKIAkJc3RydWN0IHNnX3NpbXBsZV9lbGVtZW50ICpzZzsKKwkJc3RydWN0IGkyb19kbWEgKnA7CiAKIAkJaWYgKHNnX29mZnNldCAqIDQgPj0gc2l6ZSkgewogCQkJcmNvZGUgPSAtRUZBVUxUOwpAQCAtODcxLDIyICs4NjksMjIgQEAKIAkJCQlnb3RvIHNnX2xpc3RfY2xlYW51cDsKIAkJCX0KIAkJCXNnX3NpemUgPSBzZ1tpXS5mbGFnX2NvdW50ICYgMHhmZmZmZmY7CisJCQlwID0gJihzZ19saXN0W3NnX2luZGV4XSk7CisJCQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplKSkgewogCQkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdHJhbnNmZXIgKi8KLQkJCXAgPSBrbWFsbG9jKHNnX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgU0cgYnVmZmVyIC0gc2l6ZSA9ICVkIGJ1ZmZlciBudW1iZXIgJWQgb2YgJWRcbiIsCiAJCQkJICAgICAgIGMtPm5hbWUsIHNnX3NpemUsIGksIHNnX2NvdW50KTsKIAkJCQlyY29kZSA9IC1FTk9NRU07CiAJCQkJZ290byBzZ19saXN0X2NsZWFudXA7CiAJCQl9Ci0JCQlzZ19saXN0W3NnX2luZGV4KytdID0gcDsJLy8gc2dsaXN0IGluZGV4ZWQgd2l0aCBpbnB1dCBmcmFtZSwgbm90IG91ciBpbnRlcm5hbCBmcmFtZS4KKwkJCXNnX2luZGV4Kys7CiAJCQkvKiBDb3B5IGluIHRoZSB1c2VyJ3MgU0cgYnVmZmVyIGlmIG5lY2Vzc2FyeSAqLwogCQkJaWYgKHNnW2ldLgogCQkJICAgIGZsYWdfY291bnQgJiAweDA0MDAwMDAwIC8qSTJPX1NHTF9GTEFHU19ESVIgKi8gKSB7CiAJCQkJLy8gVE9ETyA2NGJpdCBmaXgKIAkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKHAsICh2b2lkIF9fdXNlciAqKXNnW2ldLmFkZHJfYnVzLAorCQkJCSAgICAocC0+dmlydCwgKHZvaWQgX191c2VyICopc2dbaV0uYWRkcl9idXMsCiAJCQkJICAgICBzZ19zaXplKSkgewogCQkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCQkgICAgICAgIiVzOiBDb3VsZCBub3QgY29weSBTRyBidWYgJWQgRlJPTSB1c2VyXG4iLApAQCAtODk1LDggKzg5Myw3IEBACiAJCQkJCWdvdG8gc2dfbGlzdF9jbGVhbnVwOwogCQkJCX0KIAkJCX0KLQkJCS8vVE9ETyA2NGJpdCBmaXgKLQkJCXNnW2ldLmFkZHJfYnVzID0gdmlydF90b19idXMocCk7CisJCQlzZ1tpXS5hZGRyX2J1cyA9IHAtPnBoeXM7CiAJCX0KIAl9CiAKQEAgLTkwOCw3ICs5MDUsNyBAQAogCX0KIAogCWlmIChzZ19vZmZzZXQpIHsKLQkJdTMyIHJtc2dbMTI4XTsKKwkJdTMyIHJtc2dbSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFXTsKIAkJLyogQ29weSBiYWNrIHRoZSBTY2F0dGVyIEdhdGhlciBidWZmZXJzIGJhY2sgdG8gdXNlciBzcGFjZSAqLwogCQl1MzIgajsKIAkJLy8gVE9ETyA2NGJpdCBmaXgKQEAgLTk0MiwxMSArOTM5LDExIEBACiAJCQkJc2dfc2l6ZSA9IHNnW2pdLmZsYWdfY291bnQgJiAweGZmZmZmZjsKIAkJCQkvLyBUT0RPIDY0Yml0IGZpeAogCQkJCWlmIChjb3B5X3RvX3VzZXIKLQkJCQkgICAgKCh2b2lkIF9fdXNlciAqKXNnW2pdLmFkZHJfYnVzLCBzZ19saXN0W2pdLAorCQkJCSAgICAoKHZvaWQgX191c2VyICopc2dbal0uYWRkcl9idXMsIHNnX2xpc3Rbal0udmlydCwKIAkJCQkgICAgIHNnX3NpemUpKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICIlczogQ291bGQgbm90IGNvcHkgJXAgVE8gdXNlciAleFxuIiwKLQkJCQkJICAgICAgIGMtPm5hbWUsIHNnX2xpc3Rbal0sCisJCQkJCSAgICAgICBjLT5uYW1lLCBzZ19saXN0W2pdLnZpcnQsCiAJCQkJCSAgICAgICBzZ1tqXS5hZGRyX2J1cyk7CiAJCQkJCXJjb2RlID0gLUVGQVVMVDsKIAkJCQkJZ290byBzZ19saXN0X2NsZWFudXA7CkBAIC05NzMsNyArOTcwLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2dfaW5kZXg7IGkrKykKLQkJa2ZyZWUoc2dfbGlzdFtpXSk7CisJCWkyb19kbWFfZnJlZSgmYy0+cGRldi0+ZGV2LCAmc2dfbGlzdFtpXSk7CiAKIGNsZWFudXA6CiAJa2ZyZWUocmVwbHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKaW5kZXggZGE3MTVlMS4uYmUyYjU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogCiAJCXNpemUgPSBocnQtPm51bV9lbnRyaWVzICogaHJ0LT5lbnRyeV9sZW4gPDwgMjsKIAkJaWYgKHNpemUgPiBjLT5ocnQubGVuKSB7Ci0JCQlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmhydCwgc2l6ZSwgR0ZQX0tFUk5FTCkpCisJCQlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmhydCwgc2l6ZSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQllbHNlCiAJCQkJaHJ0ID0gYy0+aHJ0LnZpcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL21lbW9yeS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNjOTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9tZW1vcnkuYwpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqCUZ1bmN0aW9ucyB0byBoYW5kbGUgSTJPIG1lbW9yeQorICoKKyAqCVB1bGxlZCBmcm9tIHRoZSBpbmxpbmVzIGluIGkybyBoZWFkZXJzIGFuZCB1bmlubGluZWQKKyAqCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICoJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICoJb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiY29yZS5oIgorCisvKiBQcm90ZWN0cyBvdXIgMzIvNjRiaXQgbWFzayBzd2l0Y2hpbmcgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgobWVtX2xvY2spOworCisvKioKKyAqCWkyb19zZ190YWJsZXNpemUgLSBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgU0dMCisgKglAYzogSTJPIGNvbnRyb2xsZXIgZm9yIHdoaWNoIHRoZSBjYWxjdWxhdGlvbiBzaG91bGQgYmUgZG9uZQorICoJQGJvZHlfc2l6ZTogbWF4aW11bSBib2R5IHNpemUgdXNlZCBmb3IgbWVzc2FnZSBpbiAzMi1iaXQgd29yZHMuCisgKgorICoJUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBTRyBlbGVtZW50cyBpbiBhIFNHIGxpc3QuCisgKi8KK3UxNiBpMm9fc2dfdGFibGVzaXplKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTE2IGJvZHlfc2l6ZSkKK3sKKwlpMm9fc3RhdHVzX2Jsb2NrICpzYiA9IGMtPnN0YXR1c19ibG9jay52aXJ0OworCXUxNiBzZ19jb3VudCA9CisJICAgIChzYi0+aW5ib3VuZF9mcmFtZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBpMm9fbWVzc2FnZSkgLyA0KSAtCisJICAgIGJvZHlfc2l6ZTsKKworCWlmIChjLT5wYWVfc3VwcG9ydCkgeworCQkvKgorCQkgKiBmb3IgNjQtYml0IGEgU0cgYXR0cmlidXRlIGVsZW1lbnQgbXVzdCBiZSBhZGRlZCBhbmQgZWFjaAorCQkgKiBTRyBlbGVtZW50IG5lZWRzIDEyIGJ5dGVzIGluc3RlYWQgb2YgOC4KKwkJICovCisJCXNnX2NvdW50IC09IDI7CisJCXNnX2NvdW50IC89IDM7CisJfSBlbHNlCisJCXNnX2NvdW50IC89IDI7CisKKwlpZiAoYy0+c2hvcnRfcmVxICYmIChzZ19jb3VudCA+IDgpKQorCQlzZ19jb3VudCA9IDg7CisKKwlyZXR1cm4gc2dfY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fc2dfdGFibGVzaXplKTsKKworCisvKioKKyAqCWkyb19kbWFfbWFwX3NpbmdsZSAtIE1hcCBwb2ludGVyIHRvIGNvbnRyb2xsZXIgYW5kIGZpbGwgaW4gSTJPIG1lc3NhZ2UuCisgKglAYzogSTJPIGNvbnRyb2xsZXIKKyAqCUBwdHI6IHBvaW50ZXIgdG8gdGhlIGRhdGEgd2hpY2ggc2hvdWxkIGJlIG1hcHBlZAorICoJQHNpemU6IHNpemUgb2YgZGF0YSBpbiBieXRlcworICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQorICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCisgKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbworICoJZG1hX21hcF9zaW5nbGUoKS4gVGhlIHBvaW50ZXIgc2dfcHRyIHdpbGwgb25seSBiZSBzZXQgdG8gdGhlIGVuZCBvZiB0aGUKKyAqCVNHIGxpc3QgaWYgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICoJUmV0dXJucyBETUEgYWRkcmVzcyB3aGljaCBtdXN0IGJlIGNoZWNrZWQgZm9yIGZhaWx1cmVzIHVzaW5nCisgKglkbWFfbWFwcGluZ19lcnJvcigpLgorICovCitkbWFfYWRkcl90IGkyb19kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHZvaWQgKnB0ciwKKwkJCQkJICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICAgdTMyICoqIHNnX3B0cikKK3sKKwl1MzIgc2dfZmxhZ3M7CisJdTMyICptcHRyID0gKnNnX3B0cjsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHhkNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHhkMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7CisJaWYgKCFkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKyNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0CisJCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpIHsKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOworCQl9CisjZW5kaWYKKworCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzaXplKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KGRtYV9hZGRyKSk7CisjaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAorCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KQorCQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfaGlnaChkbWFfYWRkcikpOworI2VuZGlmCisJCSpzZ19wdHIgPSBtcHRyOworCX0KKwlyZXR1cm4gZG1hX2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fZG1hX21hcF9zaW5nbGUpOworCisvKioKKyAqCWkyb19kbWFfbWFwX3NnIC0gTWFwIGEgU0cgTGlzdCB0byBjb250cm9sbGVyIGFuZCBmaWxsIGluIEkyTyBtZXNzYWdlLgorICoJQGM6IEkyTyBjb250cm9sbGVyCisgKglAc2c6IFNHIGxpc3QgdG8gYmUgbWFwcGVkCisgKglAc2dfY291bnQ6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgU0cgbGlzdAorICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQorICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCisgKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbworICoJZG1hX21hcF9zZygpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZSBTRworICoJbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqCisgKglSZXR1cm5zIDAgb24gZmFpbHVyZSBvciAxIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBpMm9fZG1hX21hcF9zZyhzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgIGludCBzZ19jb3VudCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLCB1MzIgKiogc2dfcHRyKQoreworCXUzMiBzZ19mbGFnczsKKwl1MzIgKm1wdHIgPSAqc2dfcHRyOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHgxNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHgxMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJc2dfY291bnQgPSBkbWFfbWFwX3NnKCZjLT5wZGV2LT5kZXYsIHNnLCBzZ19jb3VudCwgZGlyZWN0aW9uKTsKKwlpZiAoIXNnX2NvdW50KQorCQlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKFBBR0VfU0laRSk7CisJfQorI2VuZGlmCisKKwl3aGlsZSAoc2dfY291bnQtLSA+IDApIHsKKwkJaWYgKCFzZ19jb3VudCkKKwkJCXNnX2ZsYWdzIHw9IDB4QzAwMDAwMDA7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMihzZ19mbGFncyB8IHNnX2RtYV9sZW4oc2cpKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KHNnX2RtYV9hZGRyZXNzKHNnKSkpOworI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKKwkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goc2dfZG1hX2FkZHJlc3Moc2cpKSk7CisjZW5kaWYKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisJKnNnX3B0ciA9IG1wdHI7CisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfbWFwX3NnKTsKKworLyoqCisgKglpMm9fZG1hX2FsbG9jIC0gQWxsb2NhdGUgRE1BIG1lbW9yeQorICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgorICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIHNob3VsZCBnZXQgdGhlIERNQSBidWZmZXIKKyAqCUBsZW46IGxlbmd0aCBvZiB0aGUgbmV3IERNQSBtZW1vcnkKKyAqCisgKglBbGxvY2F0ZSBhIGNvaGVyZW50IERNQSBtZW1vcnkgYW5kIHdyaXRlIHRoZSBwb2ludGVycyBpbnRvIGFkZHIuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBmYWlsdXJlLgorICovCitpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWludCBkbWFfNjQgPSAwOworCisJbXV0ZXhfbG9jaygmbWVtX2xvY2spOworCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgKHBkZXYtPmRtYV9tYXNrID09IERNQV82NEJJVF9NQVNLKSkgeworCQlkbWFfNjQgPSAxOworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJCW11dGV4X3VubG9jaygmbWVtX2xvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlhZGRyLT52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgbGVuLCAmYWRkci0+cGh5cywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGRtYV82NCkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJvOiB1bmFibGUgdG8gc2V0IDY0LWJpdCBETUEiKTsKKwltdXRleF91bmxvY2soJm1lbV9sb2NrKTsKKworCWlmICghYWRkci0+dmlydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoYWRkci0+dmlydCwgMCwgbGVuKTsKKwlhZGRyLT5sZW4gPSBsZW47CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfYWxsb2MpOworCisKKy8qKgorICoJaTJvX2RtYV9mcmVlIC0gRnJlZSBETUEgbWVtb3J5CisgKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCisgKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIERNQSBidWZmZXIKKyAqCisgKglGcmVlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgc2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhZGRyIHRvIE5VTEwuCisgKi8KK3ZvaWQgaTJvX2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIpCit7CisJaWYgKGFkZHItPnZpcnQpIHsKKwkJaWYgKGFkZHItPnBoeXMpCisJCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGFkZHItPmxlbiwgYWRkci0+dmlydCwKKwkJCQkJICBhZGRyLT5waHlzKTsKKwkJZWxzZQorCQkJa2ZyZWUoYWRkci0+dmlydCk7CisJCWFkZHItPnZpcnQgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfZnJlZSk7CisKKworLyoqCisgKglpMm9fZG1hX3JlYWxsb2MgLSBSZWFsbG9jIERNQSBtZW1vcnkKKyAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKKyAqCUBhZGRyOiBwb2ludGVyIHRvIGEgaTJvX2RtYSBzdHJ1Y3QgRE1BIGJ1ZmZlcgorICoJQGxlbjogbmV3IGxlbmd0aCBvZiBtZW1vcnkKKyAqCisgKglJZiB0aGVyZSB3YXMgc29tZXRoaW5nIGFsbG9jYXRlZCBpbiB0aGUgYWRkciwgZnJlZSBpdCBmaXJzdC4gSWYgbGVuID4gMAorICoJdGhhbiB0cnkgdG8gYWxsb2NhdGUgaXQgYW5kIHdyaXRlIHRoZSBhZGRyZXNzZXMgYmFjayB0byB0aGUgYWRkcgorICoJc3RydWN0dXJlLiBJZiBsZW4gPT0gMCBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBOVUxMLgorICoKKyAqCVJldHVybnMgdGhlIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpMm9fZG1hX3JlYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwgc2l6ZV90IGxlbikKK3sKKwlpMm9fZG1hX2ZyZWUoZGV2LCBhZGRyKTsKKworCWlmIChsZW4pCisJCXJldHVybiBpMm9fZG1hX2FsbG9jKGRldiwgYWRkciwgbGVuKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX2RtYV9yZWFsbG9jKTsKKworLyoKKyAqCWkyb19wb29sX2FsbG9jIC0gQWxsb2NhdGUgYW4gc2xhYiBjYWNoZSBhbmQgbWVtcG9vbAorICoJQG1lbXBvb2w6IHBvaW50ZXIgdG8gc3RydWN0IGkyb19wb29sIHRvIHdyaXRlIGRhdGEgaW50by4KKyAqCUBuYW1lOiBuYW1lIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgY2FjaGUKKyAqCUBzaXplOiBzaXplIG9mIGVhY2ggb2JqZWN0CisgKglAbWluX25yOiBtaW5pbXVtIG51bWJlciBvZiBvYmplY3RzCisgKgorICoJRmlyc3QgYWxsb2NhdGVzIGEgc2xhYiBjYWNoZSB3aXRoIG5hbWUgYW5kIHNpemUuIFRoZW4gYWxsb2NhdGVzIGEKKyAqCW1lbXBvb2wgd2hpY2ggdXNlcyB0aGUgc2xhYiBjYWNoZSBmb3IgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4KKyAqCisgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpMm9fcG9vbF9hbGxvYyhzdHJ1Y3QgaTJvX3Bvb2wgKnBvb2wsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgbWluX25yKQoreworCXBvb2wtPm5hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghcG9vbC0+bmFtZSkKKwkJZ290byBleGl0OworCXN0cmNweShwb29sLT5uYW1lLCBuYW1lKTsKKworCXBvb2wtPnNsYWIgPQorCSAgICBrbWVtX2NhY2hlX2NyZWF0ZShwb29sLT5uYW1lLCBzaXplLCAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghcG9vbC0+c2xhYikKKwkJZ290byBmcmVlX25hbWU7CisKKwlwb29sLT5tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKG1pbl9uciwgcG9vbC0+c2xhYik7CisJaWYgKCFwb29sLT5tZW1wb29sKQorCQlnb3RvIGZyZWVfc2xhYjsKKworCXJldHVybiAwOworCitmcmVlX3NsYWI6CisJa21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNsYWIpOworCitmcmVlX25hbWU6CisJa2ZyZWUocG9vbC0+bmFtZSk7CisKK2V4aXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fcG9vbF9hbGxvYyk7CisKKy8qCisgKglpMm9fcG9vbF9mcmVlIC0gRnJlZSBzbGFiIGNhY2hlIGFuZCBtZW1wb29sIGFnYWluCisgKglAbWVtcG9vbDogcG9pbnRlciB0byBzdHJ1Y3QgaTJvX3Bvb2wgd2hpY2ggc2hvdWxkIGJlIGZyZWVkCisgKgorICoJTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHJldHVybiBhbGwgb2JqZWN0cyB0byB0aGUgbWVtcG9vbCBhZ2FpbiBiZWZvcmUKKyAqCWNhbGxpbmcgaTJvX3Bvb2xfZnJlZSgpLgorICovCit2b2lkIGkyb19wb29sX2ZyZWUoc3RydWN0IGkyb19wb29sICpwb29sKQoreworCW1lbXBvb2xfZGVzdHJveShwb29sLT5tZW1wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9vbC0+c2xhYik7CisJa2ZyZWUocG9vbC0+bmFtZSk7Cit9OworRVhQT1JUX1NZTUJPTF9HUEwoaTJvX3Bvb2xfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYwppbmRleCA2ODVhODk1Li42MTBlZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKQEAgLTE4NiwzMSArMTg2LDI5IEBACiAJCX0KIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXMsIDgsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+c3RhdHVzLCA4KSkgewogCQlpMm9fcGNpX2ZyZWUoYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmhydCwgc2l6ZW9mKGkyb19ocnQpLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmhydCwgc2l6ZW9mKGkyb19ocnQpKSkgewogCQlpMm9fcGNpX2ZyZWUoYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmRsY3QsIDgxOTIsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+ZGxjdCwgODE5MikpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXNfYmxvY2ssIHNpemVvZihpMm9fc3RhdHVzX2Jsb2NrKSwKLQkJCSAgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXNfYmxvY2ssIHNpemVvZihpMm9fc3RhdHVzX2Jsb2NrKSkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYwotCSAgICAoZGV2LCAmYy0+b3V0X3F1ZXVlLAotCSAgICAgSTJPX01BWF9PVVRCT1VORF9NU0dfRlJBTUVTICogSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFICoKLQkgICAgIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPm91dF9xdWV1ZSwKKwkJSTJPX01BWF9PVVRCT1VORF9NU0dfRlJBTUVTICogSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFICoKKwkJCQlzaXplb2YodTMyKSkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA1ZWZmOGFkLi41YTc5ZDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTUyLDYgKzUyLDggQEAKIAogY29uZmlnIFVDQjE0MDBfQ09SRQogCXRyaXN0YXRlICJQaGlsaXBzIFVDQjE0MDAgQ29yZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBQzk3X0JVUworCWRlcGVuZHMgb24gR1BJT0xJQgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBVQ0IxNDAwIGNvcmUgZnVuY3Rpb25zLgogCSAgVGhlIFVDQjE0MDAgaXMgYW4gQUM5NyBhdWRpbyBjb2RlYy4KQEAgLTU5LDYgKzYxLDIwIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1Y2IxNDAwX2NvcmUuCiAKK2NvbmZpZyBUV0w0MDMwX0NPUkUKKwlib29sICJUZXhhcyBJbnN0cnVtZW50cyBUV0w0MDMwL1RQUzY1OXgwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkM9eSAmJiBHRU5FUklDX0hBUkRJUlFTICYmIChBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMpCisJaGVscAorCSAgU2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIFRXTDQwMzAgZmFtaWx5IGNoaXAgb24geW91ciBib2FyZC4KKwkgIFRoaXMgY29yZSBkcml2ZXIgcHJvdmlkZXMgcmVnaXN0ZXIgYWNjZXNzIGFuZCBJUlEgaGFuZGxpbmcKKwkgIGZhY2lsaXRpZXMsIGFuZCByZWdpc3RlcnMgZGV2aWNlcyBmb3IgdGhlIHZhcmlvdXMgZnVuY3Rpb25zCisJICBzbyB0aGF0IGZ1bmN0aW9uLXNwZWNpZmljIGRyaXZlcnMgY2FuIGJpbmQgdG8gdGhlbS4KKworCSAgVGhlc2UgbXVsdGktZnVuY3Rpb24gY2hpcHMgYXJlIGZvdW5kIG9uIG1hbnkgT01BUDIgYW5kIE9NQVAzCisJICBib2FyZHMsIHByb3ZpZGluZyBwb3dlciBtYW5hZ2VtZW50LCBSVEMsIEdQSU8sIGtleXBhZCwgYQorCSAgaGlnaCBzcGVlZCBVU0IgT1RHIHRyYW5zY2VpdmVyLCBhbiBhdWRpbyBjb2RlYyAob24gbW9zdAorCSAgdmVyc2lvbnMpIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzLgorCiBjb25maWcgTUZEX1RNSU8KIAlib29sCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDc1OWIxZmUuLjY4ZTIzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw4IEBACiBvYmotJChDT05GSUdfTUZEX1dNODM1MCkJKz0gd204MzUwLm8KIG9iai0kKENPTkZJR19NRkRfV004MzUwX0kyQykJKz0gd204MzUwLWkyYy5vCiAKK29iai0kKENPTkZJR19UV0w0MDMwX0NPUkUpCSs9IHR3bDQwMzAtY29yZS5vCisKIG9iai0kKENPTkZJR19NRkRfQ09SRSkJCSs9IG1mZC1jb3JlLm8KIAogb2JqLSQoQ09ORklHX01DUCkJCSs9IG1jcC1jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTAzeC5jIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3MzI2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2RhOTAzeC5jCkBAIC0wLDAgKzEsNTYzIEBACisvKgorICogQmFzZSBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RhOTAzeC5oPgorCisjZGVmaW5lIERBOTAzMF9DSElQX0lECQkweDAwCisjZGVmaW5lIERBOTAzMF9FVkVOVF9BCQkweDAxCisjZGVmaW5lIERBOTAzMF9FVkVOVF9CCQkweDAyCisjZGVmaW5lIERBOTAzMF9FVkVOVF9DCQkweDAzCisjZGVmaW5lIERBOTAzMF9TVEFUVVMJCTB4MDQKKyNkZWZpbmUgREE5MDMwX0lSUV9NQVNLX0EJMHgwNQorI2RlZmluZSBEQTkwMzBfSVJRX01BU0tfQgkweDA2CisjZGVmaW5lIERBOTAzMF9JUlFfTUFTS19DCTB4MDcKKyNkZWZpbmUgREE5MDMwX1NZU19DVFJMX0EJMHgwOAorI2RlZmluZSBEQTkwMzBfU1lTX0NUUkxfQgkweDA5CisjZGVmaW5lIERBOTAzMF9GQVVMVF9MT0cJMHgwYQorCisjZGVmaW5lIERBOTAzNF9DSElQX0lECQkweDAwCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BCQkweDAxCisjZGVmaW5lIERBOTAzNF9FVkVOVF9CCQkweDAyCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DCQkweDAzCisjZGVmaW5lIERBOTAzNF9FVkVOVF9ECQkweDA0CisjZGVmaW5lIERBOTAzNF9TVEFUVVNfQQkJMHgwNQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0IJCTB4MDYKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0EJMHgwNworI2RlZmluZSBEQTkwMzRfSVJRX01BU0tfQgkweDA4CisjZGVmaW5lIERBOTAzNF9JUlFfTUFTS19DCTB4MDkKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0QJMHgwYQorI2RlZmluZSBEQTkwMzRfU1lTX0NUUkxfQQkweDBiCisjZGVmaW5lIERBOTAzNF9TWVNfQ1RSTF9CCTB4MGMKKyNkZWZpbmUgREE5MDM0X0ZBVUxUX0xPRwkweDBkCisKK3N0cnVjdCBkYTkwM3hfY2hpcDsKKworc3RydWN0IGRhOTAzeF9jaGlwX29wcyB7CisJaW50CSgqaW5pdF9jaGlwKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKik7CisJaW50CSgqdW5tYXNrX2V2ZW50cykoc3RydWN0IGRhOTAzeF9jaGlwICosIHVuc2lnbmVkIGludCBldmVudHMpOworCWludAkoKm1hc2tfZXZlbnRzKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisJaW50CSgqcmVhZF9ldmVudHMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgKmV2ZW50cyk7CisJaW50CSgqcmVhZF9zdGF0dXMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgKnN0YXR1cyk7Cit9OworCitzdHJ1Y3QgZGE5MDN4X2NoaXAgeworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgZGE5MDN4X2NoaXBfb3BzCSpvcHM7CisKKwlpbnQJCQl0eXBlOworCXVpbnQzMl90CQlldmVudHNfbWFzazsKKworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJaXJxX3dvcms7CisKKwlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcl9saXN0OworfTsKKworc3RhdGljIGlubGluZSBpbnQgX19kYTkwM3hfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCWludCByZWcsIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIGF0IDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqdmFsID0gKHVpbnQ4X3QpcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF9yZWFkcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLAorCQkJCSBpbnQgbGVuLCB1aW50OF90ICp2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgcmVhZGluZyBmcm9tIDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGE5MDN4X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIGludCByZWcsIHVpbnQ4X3QgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHdyaXRpbmcgMHglMDJ4IHRvIDB4JTAyeFxuIiwKKwkJCQl2YWwsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF93cml0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywKKwkJCQkgIGludCBsZW4sIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgd3JpdGluZ3MgdG8gMHglMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRhOTAzeF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNoaXAtPm9wcy0+dW5tYXNrX2V2ZW50cyhjaGlwLCBldmVudHMpOworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY2hpcC0+bm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKTsKKworaW50IGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2hpcC0+b3BzLT5tYXNrX2V2ZW50cyhjaGlwLCBldmVudHMpOworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZjaGlwLT5ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfdW5yZWdpc3Rlcl9ub3RpZmllcik7CisKK2ludCBkYTkwM3hfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCkKK3sKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGUodG9faTJjX2NsaWVudChkZXYpLCByZWcsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfd3JpdGUpOworCitpbnQgZGE5MDN4X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90ICp2YWwpCit7CisJcmV0dXJuIF9fZGE5MDN4X3JlYWQodG9faTJjX2NsaWVudChkZXYpLCByZWcsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfcmVhZCk7CisKK2ludCBkYTkwM3hfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKChyZWdfdmFsICYgYml0X21hc2spID09IDApIHsKKwkJcmVnX3ZhbCB8PSBiaXRfbWFzazsKKwkJcmV0ID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfc2V0X2JpdHMpOworCitpbnQgZGE5MDN4X2Nscl9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldCA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChyZWdfdmFsICYgYml0X21hc2spIHsKKwkJcmVnX3ZhbCAmPSB+Yml0X21hc2s7CisJCXJldCA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X2Nscl9iaXRzKTsKKworaW50IGRhOTAzeF91cGRhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCwgdWludDhfdCBtYXNrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKChyZWdfdmFsICYgbWFzaykgIT0gdmFsKSB7CisJCXJlZ192YWwgPSAocmVnX3ZhbCAmIH5tYXNrKSB8IHZhbDsKKwkJcmV0ID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfdXBkYXRlKTsKKworaW50IGRhOTAzeF9xdWVyeV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2JpdHMpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisKKwljaGlwLT5vcHMtPnJlYWRfc3RhdHVzKGNoaXAsICZzdGF0dXMpOworCXJldHVybiAoKHN0YXR1cyAmIHNiaXRzKSA9PSBzYml0cyk7Cit9CitFWFBPUlRfU1lNQk9MKGRhOTAzeF9xdWVyeV9zdGF0dXMpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwMzBfaW5pdF9jaGlwKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCkKK3sKKwl1aW50OF90IGNoaXBfaWQ7CisJaW50IGVycjsKKworCWVyciA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCBEQTkwMzBfQ0hJUF9JRCwgJmNoaXBfaWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzMF9TWVNfQ1RSTF9BLCAweEU4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZGV2X2luZm8oY2hpcC0+ZGV2LCAiREE5MDMwIChDSElQIElEOiAweCUwMngpIGRldGVjdGVkXG4iLCBjaGlwX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzBfdW5tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzNdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDMwX0lSUV9NQVNLX0EsIDMsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzNdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDMwX0lSUV9NQVNLX0EsIDMsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9yZWFkX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqZXZlbnRzKQoreworCXVpbnQ4X3QgdlszXSA9IHswLCAwLCAwfTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19kYTkwM3hfcmVhZHMoY2hpcC0+Y2xpZW50LCBEQTkwMzBfRVZFTlRfQSwgMywgdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqZXZlbnRzID0gKHZbMl0gPDwgMTYpIHwgKHZbMV0gPDwgOCkgfCB2WzBdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQoreworCXJldHVybiBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgREE5MDMwX1NUQVRVUywgKHVpbnQ4X3QgKilzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGRhOTAzNF9pbml0X2NoaXAoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwKQoreworCXVpbnQ4X3QgY2hpcF9pZDsKKwlpbnQgZXJyOworCisJZXJyID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIERBOTAzNF9DSElQX0lELCAmY2hpcF9pZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgREE5MDM0X1NZU19DVFJMX0EsIDB4RTgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBhdm9pZCBTUkFNIHBvd2VyIG9mZiBkdXJpbmcgc2xlZXAqLworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHgxMCwgMHgwNyk7CisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDExLCAweGZmKTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MTIsIDB4ZmYpOworCisJLyogRW5hYmxlIHRoZSBPTktFWSBwb3dlciBkb3duIGZ1bmN0aW9uYWxpdHkgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzNF9TWVNfQ1RSTF9CLCAweDIwKTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzNF9TWVNfQ1RSTF9BLCAweDYwKTsKKworCS8qIHdvcmthcm91bmQgdG8gbWFrZSBMRURzIHdvcmsgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4OTAsIDB4MDEpOworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHhCMCwgMHgwOCk7CisKKwkvKiBtYWtlIEFEVFYxIGFuZCBTRFRWMSBlZmZlY3RpdmUgKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MjAsIDB4MDApOworCisJZGV2X2luZm8oY2hpcC0+ZGV2LCAiREE5MDM0IChDSElQIElEOiAweCUwMngpIGRldGVjdGVkXG4iLCBjaGlwX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzRfdW5tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzRdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgJj0gfmV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisJdlszXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAyNCkgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzNF9JUlFfTUFTS19BLCA0LCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzRfbWFza19ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXVpbnQ4X3Qgdls0XTsKKworCWNoaXAtPmV2ZW50c19tYXNrIHw9IGV2ZW50czsKKworCXZbMF0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgJiAweGZmKTsKKwl2WzFdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDgpICYgMHhmZjsKKwl2WzJdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDE2KSAmIDB4ZmY7CisJdlszXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAyNCkgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzNF9JUlFfTUFTS19BLCA0LCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzRfcmVhZF9ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKmV2ZW50cykKK3sKKwl1aW50OF90IHZbNF0gPSB7MCwgMCwgMCwgMH07CisJaW50IHJldDsKKworCXJldCA9IF9fZGE5MDN4X3JlYWRzKGNoaXAtPmNsaWVudCwgREE5MDM0X0VWRU5UX0EsIDQsIHYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKmV2ZW50cyA9ICh2WzNdIDw8IDI0KSB8ICh2WzJdIDw8IDE2KSB8ICh2WzFdIDw8IDgpIHwgdlswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzRfcmVhZF9zdGF0dXMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKnN0YXR1cykKK3sKKwl1aW50OF90IHZbMl0gPSB7MCwgMH07CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkcyhjaGlwLT5jbGllbnQsIERBOTAzNF9TVEFUVVNfQSwgMiwgdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSpzdGF0dXMgPSAodlsxXSA8PCA4KSB8IHZbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhOTAzeF9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkYTkwM3hfY2hpcCwgaXJxX3dvcmspOworCXVuc2lnbmVkIGludCBldmVudHMgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGNoaXAtPm9wcy0+cmVhZF9ldmVudHMoY2hpcCwgJmV2ZW50cykpCisJCQlicmVhazsKKworCQlldmVudHMgJj0gfmNoaXAtPmV2ZW50c19tYXNrOworCQlpZiAoZXZlbnRzID09IDApCisJCQlicmVhazsKKworCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKAorCQkJCSZjaGlwLT5ub3RpZmllcl9saXN0LCBldmVudHMsIE5VTEwpOworCX0KKwllbmFibGVfaXJxKGNoaXAtPmNsaWVudC0+aXJxKTsKK30KKworc3RhdGljIGludCBkYTkwM3hfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkYXRhOworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJKHZvaWQpc2NoZWR1bGVfd29yaygmY2hpcC0+aXJxX3dvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGRhOTAzeF9jaGlwX29wcyBkYTkwM3hfb3BzW10gPSB7CisJWzBdID0geworCQkuaW5pdF9jaGlwCT0gZGE5MDMwX2luaXRfY2hpcCwKKwkJLnVubWFza19ldmVudHMJPSBkYTkwMzBfdW5tYXNrX2V2ZW50cywKKwkJLm1hc2tfZXZlbnRzCT0gZGE5MDMwX21hc2tfZXZlbnRzLAorCQkucmVhZF9ldmVudHMJPSBkYTkwMzBfcmVhZF9ldmVudHMsCisJCS5yZWFkX3N0YXR1cwk9IGRhOTAzMF9yZWFkX3N0YXR1cywKKwl9LAorCVsxXSA9IHsKKwkJLmluaXRfY2hpcAk9IGRhOTAzNF9pbml0X2NoaXAsCisJCS51bm1hc2tfZXZlbnRzCT0gZGE5MDM0X3VubWFza19ldmVudHMsCisJCS5tYXNrX2V2ZW50cwk9IGRhOTAzNF9tYXNrX2V2ZW50cywKKwkJLnJlYWRfZXZlbnRzCT0gZGE5MDM0X3JlYWRfZXZlbnRzLAorCQkucmVhZF9zdGF0dXMJPSBkYTkwMzRfcmVhZF9zdGF0dXMsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGRhOTAzeF9pZF90YWJsZVtdID0geworCXsgImRhOTAzMCIsIDAgfSwKKwl7ICJkYTkwMzQiLCAxIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkYTkwM3hfaWRfdGFibGUpOworCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBfX3JlbW92ZV9zdWJkZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp1bnVzZWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYTkwM3hfcmVtb3ZlX3N1YmRldnMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwKQoreworCXJldHVybiBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoY2hpcC0+ZGV2LCBOVUxMLCBfX3JlbW92ZV9zdWJkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfYWRkX3N1YmRldnMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLAorCQkJCQlzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBkYTkwM3hfc3ViZGV2X2luZm8gKnN1YmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3ViZGV2czsgaSsrKSB7CisJCXN1YmRldiA9ICZwZGF0YS0+c3ViZGV2c1tpXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHN1YmRldi0+bmFtZSwgc3ViZGV2LT5pZCk7CisKKwkJcGRldi0+ZGV2LnBhcmVudCA9IGNoaXAtPmRldjsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBzdWJkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWRhOTAzeF9yZW1vdmVfc3ViZGV2cyhjaGlwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXA7CisJdW5zaWduZWQgaW50IHRtcDsKKwlpbnQgcmV0OworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYTkwM3hfY2hpcCksIEdGUF9LRVJORUwpOworCWlmIChjaGlwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hpcC0+Y2xpZW50ID0gY2xpZW50OworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwljaGlwLT5vcHMgPSAmZGE5MDN4X29wc1tpZC0+ZHJpdmVyX2RhdGFdOworCisJbXV0ZXhfaW5pdCgmY2hpcC0+bG9jayk7CisJSU5JVF9XT1JLKCZjaGlwLT5pcnFfd29yaywgZGE5MDN4X2lycV93b3JrKTsKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJmNoaXAtPm5vdGlmaWVyX2xpc3QpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CisKKwlyZXQgPSBjaGlwLT5vcHMtPmluaXRfY2hpcChjaGlwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2NoaXA7CisKKwkvKiBtYXNrIGFuZCBjbGVhciBhbGwgSVJRcyAqLworCWNoaXAtPmV2ZW50c19tYXNrID0gMHhmZmZmZmZmZjsKKwljaGlwLT5vcHMtPm1hc2tfZXZlbnRzKGNoaXAsIGNoaXAtPmV2ZW50c19tYXNrKTsKKwljaGlwLT5vcHMtPnJlYWRfZXZlbnRzKGNoaXAsICZ0bXApOworCisJcmV0ID0gcmVxdWVzdF9pcnEoY2xpZW50LT5pcnEsIGRhOTAzeF9pcnFfaGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCSJkYTkwM3giLCBjaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJCWNsaWVudC0+aXJxKTsKKwkJZ290byBvdXRfZnJlZV9jaGlwOworCX0KKworCXJldCA9IGRhOTAzeF9hZGRfc3ViZGV2cyhjaGlwLCBwZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwKTsKK291dF9mcmVlX2NoaXA6CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGE5MDN4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGE5MDN4X3JlbW92ZV9zdWJkZXZzKGNoaXApOworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZGE5MDN4X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkYTkwM3giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBkYTkwM3hfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkYTkwM3hfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBkYTkwM3hfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZGE5MDN4X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChkYTkwM3hfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTkwM3hfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZkYTkwM3hfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhOTAzeF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUlDIERyaXZlciBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDM0Iik7CitNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iCisJICAgICAgIk1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCmluZGV4IDZiZTQzMTcuLjUwZGZmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCkBAIC0yODksNyArMjg5LDcgQEAKIAllaS0+YmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CiAJaWYgKCFlaS0+YmFzZV9hZGRyKQogCQlnb3RvIGZhaWw7Ci0JcHJfZGVidWcoIkVHUElPIHBoeXM9JTA4eCB2aXJ0PSVwXG4iLCByZXMtPnN0YXJ0LCBlaS0+YmFzZV9hZGRyKTsKKwlwcl9kZWJ1ZygiRUdQSU8gcGh5cz0lMDh4IHZpcnQ9JXBcbiIsICh1MzIpcmVzLT5zdGFydCwgZWktPmJhc2VfYWRkcik7CiAKIAlpZiAoKHBkYXRhLT5idXNfd2lkdGggIT0gMTYpICYmIChwZGF0YS0+YnVzX3dpZHRoICE9IDMyKSkKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWZkLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKaW5kZXggOWM5YzEyNi4uNmMwZDFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWZkLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAJCQkgIHN0cnVjdCByZXNvdXJjZSAqbWVtX2Jhc2UsCiAJCQkgIGludCBpcnFfYmFzZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzW2NlbGwtPm51bV9yZXNvdXJjZXNdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJaW50IHI7CkBAIC0yOSwxNCArMjksMTcgQEAKIAlpZiAoIXBkZXYpCiAJCWdvdG8gZmFpbF9hbGxvYzsKIAorCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpICogY2VsbC0+bnVtX3Jlc291cmNlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCWdvdG8gZmFpbF9kZXZpY2U7CisKIAlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsCiAJCQljZWxsLT5wbGF0Zm9ybV9kYXRhLCBjZWxsLT5kYXRhX3NpemUpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9kZXZpY2U7CisJCWdvdG8gZmFpbF9yZXM7CiAKLQltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CiAJZm9yIChyID0gMDsgciA8IGNlbGwtPm51bV9yZXNvdXJjZXM7IHIrKykgewogCQlyZXNbcl0ubmFtZSA9IGNlbGwtPnJlc291cmNlc1tyXS5uYW1lOwogCQlyZXNbcl0uZmxhZ3MgPSBjZWxsLT5yZXNvdXJjZXNbcl0uZmxhZ3M7CkBAIC02NCwxMSArNjcsMTUgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX2RldmljZTsKKwkJZ290byBmYWlsX3JlczsKKworCWtmcmVlKHJlcyk7CiAKIAlyZXR1cm4gMDsKIAogLyoJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsgKi8KK2ZhaWxfcmVzOgorCWtmcmVlKHJlcyk7CiBmYWlsX2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZmFpbF9hbGxvYzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NtNTAxLmMgYi9kcml2ZXJzL21mZC9zbTUwMS5jCmluZGV4IDdhZWJhZDQuLjIyMGU0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NtNTAxLmMKKysrIGIvZHJpdmVycy9tZmQvc201MDEuYwpAQCAtNjIzLDggKzYyMyw4IEBACiAKIAlzbTUwMV9zeW5jX3JlZ3Moc20pOwogCi0JZGV2X2luZm8oc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAotCQkgZ2F0ZSwgY2xvY2ssIG1vZGUpOworCWRldl9kYmcoc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAorCQlnYXRlLCBjbG9jaywgbW9kZSk7CiAKIAlzbTUwMV9tZGVsYXkoc20sIDE2KTsKIAltdXRleF91bmxvY2soJnNtLT5jbG9ja19sb2NrKTsKQEAgLTc0Miw3ICs3NDIsNyBAQAogCWludCByZXQ7CiAKIAlmb3IgKHB0ciA9IDA7IHB0ciA8IHBkZXYtPm51bV9yZXNvdXJjZXM7IHB0cisrKSB7Ci0JCXByaW50aygiJXNbJWRdIGZsYWdzICUwOGx4OiAlMDhsbHguLiUwOGxseFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzWyVkXSBmbGFncyAlMDhseDogJTA4bGx4Li4lMDhsbHhcbiIsCiAJCSAgICAgICBwZGV2LT5uYW1lLCBwdHIsCiAJCSAgICAgICBwZGV2LT5yZXNvdXJjZVtwdHJdLmZsYWdzLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVtwdHJdLnN0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDQ5YTBmZmYuLjlmNzAyNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90N2w2NnhiLmMKKysrIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC01Niw2ICs1OCw4IEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCXN0cnVjdCByZXNvdXJjZQkJcnNjcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrNDhtOworCXN0cnVjdCBjbGsJCSpjbGszMms7CiAJaW50CQkJaXJxOwogCWludAkJCWlycV9iYXNlOwogfTsKQEAgLTY1LDEzICs2OSwxMSBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbW1jKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgICAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CiAKLQlpZiAocGRhdGEtPmVuYWJsZV9jbGszMmspCi0JCXBkYXRhLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIApAQCAtODcsNyArODksNiBAQAogc3RhdGljIGludCB0N2w2NnhiX21tY19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICAgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBkZXZfY3RsOwpAQCAtMTAwLDggKzEwMSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0N2w2NnhiLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocGRhdGEtPmRpc2FibGVfY2xrMzJrKQotCQlwZGF0YS0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTgsMTggKzI1OCwyMiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB0N2w2NnhiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKKwljbGtfZGlzYWJsZSh0N2w2NnhiLT5jbGs0OG0pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdDdsNjZ4Yl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtMzA5LDYgKzMxMywxOSBAQAogCiAJdDdsNjZ4Yi0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAKKwl0N2w2NnhiLT5jbGszMmsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkNMS19DSzMySyIpOworCWlmIChJU19FUlIodDdsNjZ4Yi0+Y2xrMzJrKSkgeworCQlyZXQgPSBQVFJfRVJSKHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazMya19nZXQ7CisJfQorCisJdDdsNjZ4Yi0+Y2xrNDhtID0gY2xrX2dldCgmZGV2LT5kZXYsICJDTEtfQ0s0OE0iKTsKKwlpZiAoSVNfRVJSKHQ3bDY2eGItPmNsazQ4bSkpIHsKKwkJcmV0ID0gUFRSX0VSUih0N2w2NnhiLT5jbGs0OG0pOworCQljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CisJCWdvdG8gZXJyX2NsazQ4bV9nZXQ7CisJfQorCiAJcnNjciA9ICZ0N2w2NnhiLT5yc2NyOwogCXJzY3ItPm5hbWUgPSAidDdsNjZ4Yi1jb3JlIjsKIAlyc2NyLT5zdGFydCA9IGlvbWVtLT5zdGFydDsKQEAgLTMyNSw2ICszNDIsOCBAQAogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAorCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwogCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQogCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKQEAgLTM1OSw5ICszNzgsMTMgQEAKIAlpb3VubWFwKHQ3bDY2eGItPnNjcik7CiBlcnJfaW9yZW1hcDoKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKLWVycl9ub2lycToKIGVycl9yZXF1ZXN0X3NjcjoKIAlrZnJlZSh0N2w2NnhiKTsKKwljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7CitlcnJfY2xrNDhtX2dldDoKKwljbGtfcHV0KHQ3bDY2eGItPmNsazMyayk7CitlcnJfY2xrMzJrX2dldDoKK2Vycl9ub2lycToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzIsNyArMzk1LDggQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcGRhdGEtPmRpc2FibGUoZGV2KTsKLQorCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CisJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwogCXQ3bDY2eGJfZGV0YWNoX2lycShkZXYpOwogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKIAlyZWxlYXNlX3Jlc291cmNlKCZ0N2w2NnhiLT5yc2NyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCmluZGV4IGEyMmIyMWEuLjQzMjIyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKKysrIGIvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtMjQsMTggKzI1LDIyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHRjNjM4N3hiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnN1c3BlbmQpCiAJCXBkYXRhLT5zdXNwZW5kKGRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwljbGtfZW5hYmxlKGNsazMyayk7CiAJaWYgKHBkYXRhICYmIHBkYXRhLT5yZXN1bWUpCiAJCXBkYXRhLT5yZXN1bWUoZGV2KTsKIApAQCAtNTEsMTAgKzU2LDkgQEAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfbW1jX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmVuYWJsZV9jbGszMmspCi0JCXRjNjM4N3hiLT5lbmFibGVfY2xrMzJrKGRldik7CisJY2xrX2VuYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MiwxMCArNjYsOSBAQAogc3RhdGljIGludCB0YzYzODd4Yl9tbWNfZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ICAgICAgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqdGM2Mzg3eGIgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAodGM2Mzg3eGItPmRpc2FibGVfY2xrMzJrKQotCQl0YzYzODd4Yi0+ZGlzYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDIsMTQgKzEwNSwxNCBAQAogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOworCXN0cnVjdCBjbGsgKmNsazMyazsKIAlpbnQgaXJxLCByZXQ7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWlvbWVtKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3Jlc291cmNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwpAQCAtMTE4LDggKzEyMSwxNSBAQAogCWVsc2UKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAKLQlpZiAoZGF0YSAmJiBkYXRhLT5lbmFibGUpCi0JCWRhdGEtPmVuYWJsZShkZXYpOworCWNsazMyayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQ0xLX0NLMzJLIik7CisJaWYgKElTX0VSUihjbGszMmspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrMzJrKTsKKwkJZ290byBlcnJfcmVzb3VyY2U7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgY2xrMzJrKTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+ZW5hYmxlKQorCQlwZGF0YS0+ZW5hYmxlKGRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM4N3hiIGluaXRpYWxpc2VkXG4iKTsKIApAQCAtMTM0LDE4ICsxNDQsMTkgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwljbGtfcHV0KGNsazMyayk7CiBlcnJfcmVzb3VyY2U6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0YzYzODd4Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGszMmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRhdGEgJiYgZGF0YS0+ZGlzYWJsZSkKLQkJZGF0YS0+ZGlzYWJsZShkZXYpOwotCi0JLyogRklYTUUgLSBmcmVlIHRoZSByZXNvdXJjZXMhICovCisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CisJY2xrX2Rpc2FibGUoY2xrMzJrKTsKKwljbGtfcHV0KGNsazMyayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggZTRjMWM3OC4uZjg1NmU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0xMTMsNiArMTEzLDggQEAKIGVudW0gewogCVRDNjM5M1hCX0NFTExfTkFORCwKIAlUQzYzOTNYQl9DRUxMX01NQywKKwlUQzYzOTNYQl9DRUxMX09IQ0ksCisJVEM2MzkzWEJfQ0VMTF9GQiwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTcwLDYgKzE3MiwxNzYgQEAKIAl9LAogfTsKIAorY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgzMDAwLAorCQkuZW5kCT0gMHgzMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMzAwLAorCQkuZW5kCT0gMHgwM2ZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMTAwMDAsCisJCS5lbmQJPSAweDAxN2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MDE4MDAwLAorCQkuZW5kCT0gMHgwMWZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5lbmQJPSBJUlFfVEM2MzkzX09IQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIF9fZGV2aW5pdGRhdGEgdGM2MzkzeGJfZmJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUwMDAsCisJCS5lbmQJPSAweDUxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDA1MDAsCisJCS5lbmQJPSAweDA1ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDEwMDAwMCwKKwkJLmVuZAk9IDB4MWZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RDNjM5M19GQiwKKwkJLmVuZAk9IElSUV9UQzYzOTNfRkIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgaW50IHRjNjM5M3hiX29oY2lfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyIHw9IFNDUl9DQ1JfVVNCQ0s7CisJdG1pb19pb3dyaXRlMTYoY2NyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisKKwlmZXIgPSB0bWlvX2lvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWZlciB8PSBTQ1JfRkVSX1VTQkVOOworCXRtaW9faW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCXU4IGZlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJZmVyID0gdG1pb19pb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlmZXIgJj0gflNDUl9GRVJfVVNCRU47CisJdG1pb19pb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9VU0JDSzsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9NQ0xLX01BU0s7CisJY2NyIHw9IFNDUl9DQ1JfTUNMS180ODsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9mYl9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgY2NyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwljY3IgPSB0bWlvX2lvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwljY3IgJj0gflNDUl9DQ1JfTUNMS19NQVNLOworCWNjciB8PSBTQ1JfQ0NSX01DTEtfT0ZGOworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGM2MzkzeGJfbGNkX3NldF9wb3dlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwgYm9vbCBvbikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlmZXIgPSBpb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpZiAob24pCisJCWZlciB8PSBTQ1JfRkVSX1NMQ0RFTjsKKwllbHNlCisJCWZlciAmPSB+U0NSX0ZFUl9TTENERU47CisJaW93cml0ZTgoZmVyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9zZXRfcG93ZXIpOworCitpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZmItPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWlvd3JpdGUxNihtb2RlLT5waXhjbG9jaywgdGM2MzkzeGItPnNjciArIFNDUl9QTEwxQ1IgKyAwKTsKKwlpb3dyaXRlMTYobW9kZS0+cGl4Y2xvY2sgPj4gMTYsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMUNSICsgMik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRjNjM5M3hiX2xjZF9tb2RlKTsKKwogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBfX2RldmluaXRkYXRhIHRjNjM5M3hiX2NlbGxzW10gPSB7CiAJW1RDNjM5M1hCX0NFTExfTkFORF0gPSB7CiAJCS5uYW1lID0gInRtaW8tbmFuZCIsCkBAIC0xODIsNiArMzU0LDI0IEBACiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0YzYzOTN4Yl9tbWNfcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRjNjM5M3hiX21tY19yZXNvdXJjZXMsCiAJfSwKKwlbVEM2MzkzWEJfQ0VMTF9PSENJXSA9IHsKKwkJLm5hbWUgPSAidG1pby1vaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzLAorCQkuZW5hYmxlID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCQkucmVzdW1lID0gdGM2MzkzeGJfb2hjaV9lbmFibGUsCisJCS5kaXNhYmxlID0gdGM2MzkzeGJfb2hjaV9kaXNhYmxlLAorCX0sCisJW1RDNjM5M1hCX0NFTExfRkJdID0geworCQkubmFtZSA9ICJ0bWlvLWZiIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX2ZiX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0YzYzOTN4Yl9mYl9yZXNvdXJjZXMsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9mYl9lbmFibGUsCisJCS5zdXNwZW5kID0gdGM2MzkzeGJfZmJfZGlzYWJsZSwKKwkJLnJlc3VtZSA9IHRjNjM5M3hiX2ZiX2VuYWJsZSwKKwkJLmRpc2FibGUgPSB0YzYzOTN4Yl9mYl9kaXNhYmxlLAorCX0sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM2OSw0MSArNTU5LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHRjNjM5M3hiX2h3X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaTsKLQotCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciwJdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOwotCWlvd3JpdGUxNih0Y3BkLT5zY3JfcGxsMmNyLAkJdGM2MzkzeGItPnNjciArIFNDUl9QTEwyQ1IpOwotCWlvd3JpdGUxNih0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKLQlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAotCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKLQkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKLQlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOwotCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKLQlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0sCi0JCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSwKLQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRE9FQ1IoaSkpOwotCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncGlfYmNyW2ldLAotCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0YzYzOTN4Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGI7CiAJc3RydWN0IHJlc291cmNlICppb21lbSwgKnJzY3I7CiAJaW50IHJldCwgdGVtcDsKLQlpbnQgaTsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaW9tZW0pCkBAIC00NTgsMjEgKzYxOSwxNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2VuYWJsZTsKIAotCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0gPQotCQkJKHRjcGQtPnNjcl9ncG9fZHNyID4+ICg4ICogaSkpICYgMHhmZjsKLQkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldID0KLQkJCSh0Y3BkLT5zY3JfZ3BvX2RvZWNyID4+ICg4ICogaSkpICYgMHhmZjsKLQl9Ci0KLQl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IgPSBTQ1JfQ0NSX1VOSzEgfAotCQkJCQlTQ1JfQ0NSX0hDTEtfNDg7Ci0KLQlyZXQgPSB0YzYzOTN4Yl9od19pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfaHdfaW5pdDsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7CisJaW93cml0ZTE2KFNDUl9DQ1JfVU5LMSB8IFNDUl9DQ1JfSENMS180OCwKKwkJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAorCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKKwkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKKwlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3NoaWJhIHRjNjM5M3hiIHJldmlzaW9uICVkIGF0IDB4JTA4bHgsIGlycSAlZFxuIiwKIAkJCXRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX1JFVklEKSwKQEAgLTQ4OCwxNiArNjQ0LDMzIEBACiAKIAl0YzYzOTN4Yl9hdHRhY2hfaXJxKGRldik7CiAKKwlpZiAodGNwZC0+c2V0dXApIHsKKwkJcmV0ID0gdGNwZC0+c2V0dXAoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3NldHVwOworCX0KKwogCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF0uZHJpdmVyX2RhdGEgPSB0Y3BkLT5uYW5kX2RhdGE7CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5wbGF0Zm9ybV9kYXRhID0KIAkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTkFORF07CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5kYXRhX3NpemUgPQogCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXSk7CisKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10ucGxhdGZvcm1fZGF0YSA9CiAJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ107CiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9NTUNdLmRhdGFfc2l6ZSA9CiAJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10pOwogCisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5wbGF0Zm9ybV9kYXRhID0KKwkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfT0hDSV07CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXSk7CisKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kcml2ZXJfZGF0YSA9IHRjcGQtPmZiX2RhdGE7CisJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0ucGxhdGZvcm1fZGF0YSA9CisJCSZ0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5kYXRhX3NpemUgPQorCQlzaXplb2YodGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9GQl0pOwogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgZGV2LT5pZCwKIAkJCXRjNjM5M3hiX2NlbGxzLCBBUlJBWV9TSVpFKHRjNjM5M3hiX2NlbGxzKSwKQEAgLTUwNiwxMiArNjc5LDE1IEBACiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCisJaWYgKHRjcGQtPnRlYXJkb3duKQorCQl0Y3BkLT50ZWFyZG93bihkZXYpOworCitlcnJfc2V0dXA6CiAJdGM2MzkzeGJfZGV0YWNoX2lycShkZXYpOwogCiBlcnJfZ3Bpb19hZGQ6CiAJaWYgKHRjNjM5M3hiLT5ncGlvLmJhc2UgIT0gLTEpCiAJCXRlbXAgPSBncGlvY2hpcF9yZW1vdmUoJnRjNjM5M3hiLT5ncGlvKTsKLWVycl9od19pbml0OgogCXRjcGQtPmRpc2FibGUoZGV2KTsKIGVycl9jbGtfZW5hYmxlOgogCWNsa19kaXNhYmxlKHRjNjM5M3hiLT5jbGspOwpAQCAtNTM1LDYgKzcxMSwxMCBAQAogCWludCByZXQ7CiAKIAltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKworCWlmICh0Y3BkLT50ZWFyZG93bikKKwkJdGNwZC0+dGVhcmRvd24oZGV2KTsKKwogCXRjNjM5M3hiX2RldGFjaF9pcnEoZGV2KTsKIAogCWlmICh0YzYzOTN4Yi0+Z3Bpby5iYXNlICE9IC0xKSB7CkBAIC01ODUsMTUgKzc2NSwzNyBAQAogCXN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhICp0Y3BkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdGM2MzkzeGIgKnRjNjM5M3hiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OworCWludCBpOwogCiAJY2xrX2VuYWJsZSh0YzYzOTN4Yi0+Y2xrKTsKIAogCXJldCA9IHRjcGQtPnJlc3VtZShkZXYpOwotCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiB0YzYzOTN4Yl9od19pbml0KGRldik7CisJaWYgKCF0Y3BkLT5yZXN1bWVfcmVzdG9yZSkKKwkJcmV0dXJuIDA7CisKKwlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5mZXIsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX3BsbDJjciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMkNSKTsKKwlpb3dyaXRlMTYodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuY2NyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJaW93cml0ZTE2KFNDUl9NQ1JfUkRZX09QRU5EUkFJTiB8IFNDUl9NQ1JfUkRZX1VOSyB8IFNDUl9NQ1JfUkRZX0VOIHwKKwkJICBTQ1JfTUNSX0lOVF9PUEVORFJBSU4gfCBTQ1JfTUNSX0lOVF9VTksgfCBTQ1JfTUNSX0lOVF9FTiB8CisJCSAgQklUKDE1KSwJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX01DUik7CisJaW93cml0ZTE2KHRjcGQtPnNjcl9ncGVyLAkJdGM2MzkzeGItPnNjciArIFNDUl9HUEVSKTsKKwlpb3dyaXRlOCgwLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lSUik7CisJaW93cml0ZTgoMHhiZiwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JTVIpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZHNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19EU1IoaSkpOworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZG9lY3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RPRUNSKGkpKTsKKwkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BpX2JjcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUElfQkNSKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIHRjNjM5M3hiX3N1c3BlbmQgTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlhMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTAsMCArMSwxMTkzIEBACisvKgorICogdHdsNDAzMF9jb3JlLmMgLSBkcml2ZXIgZm9yIFRXTDQwMzAvVFBTNjU5eDAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIE1vZGlmaWNhdGlvbnMgdG8gZGVmZXIgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGEga2VybmVsIHRocmVhZDoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIENvZGUgY2xlYW51cCBhbmQgbW9kaWZpY2F0aW9ucyB0byBJUlEgaGFuZGxlci4KKyAqIGJ5IHN5ZWQga2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworCisvKgorICogVGhlIFRXTDQwMzAgIlRyaXRvbiAyIiBpcyBvbmUgb2YgYSBmYW1pbHkgb2YgYSBtdWx0aS1mdW5jdGlvbiAiUG93ZXIKKyAqIE1hbmFnZW1lbnQgYW5kIFN5c3RlbSBDb21wYW5pb24gRGV2aWNlIiBjaGlwcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvcgorICogdXNlIGluIE9NQVAyIGFuZCBPTUFQIDMgYmFzZWQgc3lzdGVtcy4gIEl0cyBjb250cm9sIGludGVyZmFjZXMgdXNlIEkyQywKKyAqIG9mdGVuIGF0IGFyb3VuZCAzIE1iaXQvc2VjLCBpbmNsdWRpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZy4KKyAqCisgKiBUaGlzIGRyaXZlciBjb3JlIHByb3ZpZGVzIGdlbmlycSBzdXBwb3J0IGZvciB0aGUgaW50ZXJydXB0cyBlbWl0dGVkLAorICogYnkgdGhlIHZhcmlvdXMgbW9kdWxlcywgYW5kIGV4cG9ydHMgcmVnaXN0ZXIgYWNjZXNzIHByaW1pdGl2ZXMuCisgKgorICogRklYTUUgdGhpcyBkcml2ZXIgY3VycmVudGx5IHJlcXVpcmVzIHVzZSBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IGxpbmUKKyAqIChhbmQgYXNzb2NpYXRlZCByZWdpc3RlcnMpLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCQkidHdsNDAzMCIKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUlkpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19iY2koKQkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19iY2koKQkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfa2V5cGFkKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19HUElPX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfZ3BpbygpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfZ3BpbygpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfTUFEQykgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19tYWRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19tYWRjKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzBfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3J0YygpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfVVNCX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc191c2IoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX3VzYigpCWZhbHNlCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2lycShpbnQgaXJxKQoreworI2lmZGVmIENPTkZJR19BUk0KKwkvKiBBUk0gcmVxdWlyZXMgYW4gZXh0cmEgc3RlcCB0byBjbGVhciBJUlFfTk9SRVFVRVNULCB3aGljaCBpdAorCSAqIHNldHMgb24gYmVoYWxmIG9mIGV2ZXJ5IGlycV9jaGlwLiAgQWxzbyBzZXRzIElSUV9OT1BST0JFLgorCSAqLworCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJLyogc2FtZSBlZmZlY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyAqLworCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCit9CisKKy8qIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIgb24gVFdMNDAzMCBSZWdpc3RlcnMgKi8KKworLyogUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBSRUdfUElIX0lTUl9QMQkJCSgweDEpCisjZGVmaW5lIFJFR19QSUhfSVNSX1AyCQkJKDB4MikKKyNkZWZpbmUgUkVHX1BJSF9TSVIJCQkoMHgzKQorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoQkVHSU4pICovCisKKy8qIExhc3QgLSBmb3IgaW5kZXggbWF4Ki8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTEFTVAkJVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcKKworI2RlZmluZSBUV0w0MDMwX05VTV9TTEFWRVMJCTQKKworCisvKiBCYXNlIEFkZHJlc3MgZGVmbnMgZm9yIHR3bDQwMzBfbWFwW10gKi8KKworLyogc3ViY2hpcC9zbGF2ZSAwIC0gVVNCIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9VU0IJCTB4MDAwMAorCisvKiBzdWJjaGlwL3NsYXZlIDEgLSBBVUQgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0FVRElPX1ZPSUNFCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfR1BJTwkJMHgwMDk4CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRCUgkJMHgwMDg1CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QSUgJCTB4MDA4MAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfVEVTVAkJMHgwMDRDCisKKy8qIHN1YmNoaXAvc2xhdmUgMiAtIEFVWCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5URVJSVVBUUwkweDAwQjkKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0xFRAkJMHgwMEVFCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9NQURDCQkweDAwMDAKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BSU5fQ0hBUkdFCTB4MDA3NAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFJFQ0hBUkdFCTB4MDBBQQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNMAkJMHgwMEY4CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00xCQkweDAwRkIKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTUEJCTB4MDBFRgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQgkJMHgwMEYxCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9LRVlQQUQJCTB4MDBEMgorCisvKiBzdWJjaGlwL3NsYXZlIDMgLSBQT1dFUiBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQkFDS1VQCQkweDAwMTQKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVAkJMHgwMDJFCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIJMHgwMDM2CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUgkweDAwNUIKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1JUQwkJMHgwMDFDCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRwkweDAwMDAKKworLyogVHJpdG9uIENvcmUgaW50ZXJuYWwgaW5mb3JtYXRpb24gKEVORCkgKi8KKworCisvKiBGZXcgcG93ZXIgdmFsdWVzICovCisjZGVmaW5lIFJfQ0ZHX0JPT1QJCQkweDA1CisjZGVmaW5lIFJfUFJPVEVDVF9LRVkJCQkweDBFCisKKy8qIGFjY2VzcyBjb250cm9sIHZhbHVlcyBmb3IgUl9QUk9URUNUX0tFWSAqLworI2RlZmluZSBLRVlfVU5MT0NLMQkJCTB4Y2UKKyNkZWZpbmUgS0VZX1VOTE9DSzIJCQkweGVjCisjZGVmaW5lIEtFWV9MT0NLCQkJMHgwMAorCisvKiBzb21lIGZpZWxkcyBpbiBSX0NGR19CT09UICovCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMTlwMl9NSFoJCSgxIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMjZfTUhaCQkoMiA8PCAwKQorI2RlZmluZSBIRkNMS19GUkVRXzM4cDRfTUhaCQkoMyA8PCAwKQorI2RlZmluZSBISUdIX1BFUkZfU1EJCQkoMSA8PCAzKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIC0gVFdMIG1vZHVsZSBJTVIvSVNSIHJlZ3MgdG8gbWFzay9jbGVhciBhdCBpbml0CisgKiBAbW9kX25vOiBUV0w0MDMwIG1vZHVsZSBudW1iZXIgKGUuZy4sIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKiBAc2loX2N0cmw6IGFkZHJlc3Mgb2YgbW9kdWxlIFNJSF9DVFJMIHJlZ2lzdGVyCisgKiBAcmVnX2NudDogbnVtYmVyIG9mIElNUi9JU1IgcmVncworICogQGltcnM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgVFdMIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciBpbmRpY2VzCisgKiBAaXNyczogcG9pbnRlciB0byBhcnJheSBvZiBUV0wgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNlcworICoKKyAqIFRpZXMgdG9nZXRoZXIgVFdMNDAzMCBtb2R1bGVzIGFuZCBsaXN0cyBvZiBJTVIvSVNSIHJlZ2lzdGVycyB0byBtYXNrL2NsZWFyCisgKiBkdXJpbmcgdHdsX2luaXRfaXJxKCkuCisgKi8KK3N0cnVjdCB0d2w0MDMwX21vZF9pcmVncyB7CisJY29uc3QgdTggbW9kX25vOworCWNvbnN0IHU4IHNpaF9jdHJsOworCWNvbnN0IHU4IHJlZ19jbnQ7CisJY29uc3QgdTggKmltcnM7CisJY29uc3QgdTggKmlzcnM7Cit9OworCisvKiBUV0w0MDMwIElOVCBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRfaW1yX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVF9QV1JfSU1SMSwKKwlUV0w0MDMwX0lOVF9QV1JfSU1SMiwKK307CisKKy8qIFRXTDQwMzAgSU5UIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50X2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9JTlRfUFdSX0lTUjEsCisJVFdMNDAzMF9JTlRfUFdSX0lTUjIsCit9OworCisvKiBUV0w0MDMwIElOVEVSUlVQVFMgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50ZXJydXB0c19pbXJfcmVnc1tdID0geworCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUIsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQiwKK307CisKKy8qIFRXTDQwMzAgSU5URVJSVVBUUyBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2ludGVycnVwdHNfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUEsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIsCit9OworCisvKiBUV0w0MDMwIE1BREMgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfbWFkY19pbXJfcmVnc1tdID0geworCVRXTDQwMzBfTUFEQ19JTVIxLAorCVRXTDQwMzBfTUFEQ19JTVIyLAorfTsKKworLyogVFdMNDAzMCBNQURDIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfbWFkY19pc3JfcmVnc1tdID0geworCVRXTDQwMzBfTUFEQ19JU1IxLAorCVRXTDQwMzBfTUFEQ19JU1IyLAorfTsKKworLyogVFdMNDAzMCBrZXlwYWQgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxLAorCVRXTDQwMzBfS0VZUEFEX0tFWVBfSU1SMiwKK307CisKKy8qIFRXTDQwMzAga2V5cGFkIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfa2V5cGFkX2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxLAorCVRXTDQwMzBfS0VZUEFEX0tFWVBfSVNSMiwKK307CisKKy8qIFRXTDQwMzAgR1BJTyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9ncGlvX2ltcl9yZWdzW10gPSB7CisJUkVHX0dQSU9fSU1SMUEsCisJUkVHX0dQSU9fSU1SMUIsCisJUkVHX0dQSU9fSU1SMkEsCisJUkVHX0dQSU9fSU1SMkIsCisJUkVHX0dQSU9fSU1SM0EsCisJUkVHX0dQSU9fSU1SM0IsCit9OworCisvKiBUV0w0MDMwIEdQSU8gbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9ncGlvX2lzcl9yZWdzW10gPSB7CisJUkVHX0dQSU9fSVNSMUEsCisJUkVHX0dQSU9fSVNSMUIsCisJUkVHX0dQSU9fSVNSMkEsCisJUkVHX0dQSU9fSVNSMkIsCisJUkVHX0dQSU9fSVNSM0EsCisJUkVHX0dQSU9fSVNSM0IsCit9OworCisvKiBUV0w0MDMwIG1vZHVsZXMgdGhhdCBoYXZlIElNUi9JU1IgcmVnaXN0ZXJzIHRoYXQgbXVzdCBiZSBtYXNrZWQvY2xlYXJlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0d2w0MDMwX21vZF9pcmVncyBfX2luaXRjb25zdCB0d2w0MDMwX21vZF9yZWdzW10gPSB7CisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9JTlQsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfSU5UX1BXUl9TSUhfQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX2ludF9pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2ludF9pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfaW50X2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTLAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX2ludGVycnVwdHNfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9pbnRlcnJ1cHRzX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9pbnRlcnJ1cHRzX2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9NQURDLAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX01BRENfU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9tYWRjX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfbWFkY19pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfbWFkY19pc3JfcmVncywKKwl9LAorCXsKKwkJLm1vZF9ubwkgID0gVFdMNDAzMF9NT0RVTEVfS0VZUEFELAorCQkuc2loX2N0cmwgPSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfa2V5cGFkX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9rZXlwYWRfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0dQSU8sCisJCS5zaWhfY3RybCA9IFJFR19HUElPX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZ3Bpb19pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2dwaW9faW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2dwaW9faXNyX3JlZ3MsCisJfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGlzIGRyaXZlciBhY3RpdmUsIGJvdW5kIHRvIGEgY2hpcD8gKi8KK3N0YXRpYyBib29sIGludXNlOworCisvKiBTdHJ1Y3R1cmUgZm9yIGVhY2ggVFdMNDAzMCBTbGF2ZSAqLworc3RydWN0IHR3bDQwMzBfY2xpZW50IHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXU4IGFkZHJlc3M7CisKKwkvKiBtYXggbnVtYiBvZiBpMmNfbXNnIHJlcXVpcmVkIGlzIGZvciByZWFkID0yICovCisJc3RydWN0IGkyY19tc2cgeGZlcl9tc2dbMl07CisKKwkvKiBUbyBsb2NrIGFjY2VzcyB0byB4ZmVyX21zZyAqLworCXN0cnVjdCBtdXRleCB4ZmVyX2xvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY2xpZW50IHR3bDQwMzBfbW9kdWxlc1tUV0w0MDMwX05VTV9TTEFWRVNdOworCisKKy8qIG1hcHBpbmcgdGhlIG1vZHVsZSBpZCB0byBzbGF2ZSBpZCBhbmQgYmFzZSBhZGRyZXNzICovCitzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgeworCXVuc2lnbmVkIGNoYXIgc2lkOwkvKiBTbGF2ZSBJRCAqLworCXVuc2lnbmVkIGNoYXIgYmFzZTsJLyogYmFzZSBhZGRyZXNzICovCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBtYXBwaW5nIHR3bDQwMzBfbWFwW1RXTDQwMzBfTU9EVUxFX0xBU1QgKyAxXSA9IHsKKwkvKgorCSAqIE5PVEU6ICBkb24ndCBjaGFuZ2UgdGhpcyB0YWJsZSB3aXRob3V0IHVwZGF0aW5nIHRoZQorCSAqIDxsaW51eC9pMmMvdHdsNDAzMC5oPiBkZWZpbmVzIGZvciBUV0w0MDMwX01PRFVMRV8qCisJICogc28gdGhleSBjb250aW51ZSB0byBtYXRjaCB0aGUgb3JkZXIgaW4gdGhpcyB0YWJsZS4KKwkgKi8KKworCXsgMCwgVFdMNDAzMF9CQVNFQUREX1VTQiB9LAorCisJeyAxLCBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UgfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9HUElPIH0sCisJeyAxLCBUV0w0MDMwX0JBU0VBRERfSU5UQlIgfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9QSUggfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9URVNUIH0sCisKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9LRVlQQUQgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9NQURDIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfSU5URVJSVVBUUyB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX0xFRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BSU5fQ0hBUkdFIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFJFQ0hBUkdFIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTTEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01BIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNQiB9LAorCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfQkFDS1VQIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfSU5UIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fTUFTVEVSIH0sCisJeyAzLCBUV0w0MDMwX0JBU0VBRERfUE1fUkVDRUlWRVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9SVEMgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9TRUNVUkVEX1JFRyB9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRXTDQwMzAgZG9lc24ndCBoYXZlIFBJSCBtYXNrLCBoZW5jZSBkdW1teSBmdW5jdGlvbiBmb3IgbWFzaworICogYW5kIHVubWFzayBvZiB0aGUgKGVpZ2h0KSBpbnRlcnJ1cHRzIHJlcG9ydGVkIGF0IHRoYXQgbGV2ZWwgLi4uCisgKiBtYXNraW5nIGlzIG9ubHkgYXZhaWxhYmxlIGZyb20gU0lIIChzZWNvbmRhcnkpIG1vZHVsZXMuCisgKi8KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfYWNraXJxKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB2b2lkIHR3bDQwMzBfaTJjX2Rpc2FibGVpbnQodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfZW5hYmxlaW50KHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdHdsNDAzMF9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJ0d2w0MDMwIiwKKwkuYWNrCT0gdHdsNDAzMF9pMmNfYWNraXJxLAorCS5tYXNrCT0gdHdsNDAzMF9pMmNfZGlzYWJsZWludCwKKwkudW5tYXNrCT0gdHdsNDAzMF9pMmNfZW5hYmxlaW50LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgRnVuY3Rpb25zICovCisKKy8qKgorICogdHdsNDAzMF9pMmNfd3JpdGUgLSBXcml0ZXMgYSBuIGJpdCByZWdpc3RlciBpbiBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IGFuIGFycmF5IG9mIG51bV9ieXRlcysxIGNvbnRhaW5pbmcgZGF0YSB0byB3cml0ZQorICogQHJlZzogcmVnaXN0ZXIgYWRkcmVzcyAoanVzdCBvZmZzZXQgd2lsbCBkbykKKyAqIEBudW1fYnl0ZXM6IG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlcgorICoKKyAqIElNUE9SVEFOVDogZm9yICd2YWx1ZScgcGFyYW1ldGVyOiBBbGxvY2F0ZSB2YWx1ZSBudW1fYnl0ZXMrMSBhbmQKKyAqIHZhbGlkIGRhdGEgc3RhcnRzIGF0IE9mZnNldCAxLgorICoKKyAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gLSAwIGlzIHN1Y2Nlc3MKKyAqLworaW50IHR3bDQwMzBfaTJjX3dyaXRlKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0OworCWludCBzaWQ7CisJc3RydWN0IHR3bDQwMzBfY2xpZW50ICp0d2w7CisJc3RydWN0IGkyY19tc2cgKm1zZzsKKworCWlmICh1bmxpa2VseShtb2Rfbm8gPiBUV0w0MDMwX01PRFVMRV9MQVNUKSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG1vZHVsZSBudW1iZXIgJWRcbiIsIERSSVZFUl9OQU1FLCBtb2Rfbm8pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlzaWQgPSB0d2w0MDMwX21hcFttb2Rfbm9dLnNpZDsKKwl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW3NpZF07CisKKwlpZiAodW5saWtlbHkoIWludXNlKSkgeworCQlwcl9lcnIoIiVzOiBjbGllbnQgJWQgaXMgbm90IGluaXRpYWxpemVkXG4iLCBEUklWRVJfTkFNRSwgc2lkKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJbXV0ZXhfbG9jaygmdHdsLT54ZmVyX2xvY2spOworCS8qCisJICogW01TRzFdOiBmaWxsIHRoZSByZWdpc3RlciBhZGRyZXNzIGRhdGEKKwkgKiBmaWxsIHRoZSBkYXRhIFR4IGJ1ZmZlcgorCSAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzBdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmxlbiA9IG51bV9ieXRlcyArIDE7CisJbXNnLT5mbGFncyA9IDA7CisJbXNnLT5idWYgPSB2YWx1ZTsKKwkvKiBvdmVyIHdyaXRlIHRoZSBmaXJzdCBieXRlIG9mIGJ1ZmZlciB3aXRoIHRoZSByZWdpc3RlciBhZGRyZXNzICovCisJKnZhbHVlID0gdHdsNDAzMF9tYXBbbW9kX25vXS5iYXNlICsgcmVnOworCXJldCA9IGkyY190cmFuc2Zlcih0d2wtPmNsaWVudC0+YWRhcHRlciwgdHdsLT54ZmVyX21zZywgMSk7CisJbXV0ZXhfdW5sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisKKwkvKiBpMmNUcmFuc2ZlciByZXR1cm5zIG51bSBtZXNzYWdlcy50cmFuc2xhdGUgaXQgcGxzLi4gKi8KKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfd3JpdGUpOworCisvKioKKyAqIHR3bDQwMzBfaTJjX3JlYWQgLSBSZWFkcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzIGNvbnRhaW5pbmcgZGF0YSB0byBiZSByZWFkCisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gbnVtX2J5dGVzIGlzIHN1Y2Nlc3MgZWxzZSBmYWlsdXJlLgorICovCitpbnQgdHdsNDAzMF9pMmNfcmVhZCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1OCBudW1fYnl0ZXMpCit7CisJaW50IHJldDsKKwl1OCB2YWw7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnOworCisJaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKKworCWlmICh1bmxpa2VseSghaW51c2UpKSB7CisJCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisJLyogW01TRzFdIGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YSAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzBdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5mbGFncyA9IDA7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisJdmFsID0gdHdsNDAzMF9tYXBbbW9kX25vXS5iYXNlICsgcmVnOworCW1zZy0+YnVmID0gJnZhbDsKKwkvKiBbTVNHMl0gZmlsbCB0aGUgZGF0YSByeCBidWZmZXIgKi8KKwltc2cgPSAmdHdsLT54ZmVyX21zZ1sxXTsKKwltc2ctPmFkZHIgPSB0d2wtPmFkZHJlc3M7CisJbXNnLT5mbGFncyA9IEkyQ19NX1JEOwkvKiBSZWFkIHRoZSByZWdpc3RlciB2YWx1ZSAqLworCW1zZy0+bGVuID0gbnVtX2J5dGVzOwkvKiBvbmx5IG4gYnl0ZXMgKi8KKwltc2ctPmJ1ZiA9IHZhbHVlOworCXJldCA9IGkyY190cmFuc2Zlcih0d2wtPmNsaWVudC0+YWRhcHRlciwgdHdsLT54ZmVyX21zZywgMik7CisJbXV0ZXhfdW5sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisKKwkvKiBpMmNUcmFuc2ZlciByZXR1cm5zIG51bSBtZXNzYWdlcy50cmFuc2xhdGUgaXQgcGxzLi4gKi8KKwlpZiAocmV0ID49IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZCk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfd3JpdGVfdTggLSBXcml0ZXMgYSA4IGJpdCByZWdpc3RlciBpbiBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIDggYml0CisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICoKKyAqIFJldHVybnMgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWx1ZSwgdTggcmVnKQoreworCisJLyogMiBieXRlcyBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSBvZmZzZXQgMCBpcyB1c2VkIGJ5IGkyY193cml0ZSAqLworCXU4IHRlbXBfYnVmZmVyWzJdID0geyAwIH07CisJLyogb2Zmc2V0IDEgY29udGFpbnMgdGhlIGRhdGEgKi8KKwl0ZW1wX2J1ZmZlclsxXSA9IHZhbHVlOworCXJldHVybiB0d2w0MDMwX2kyY193cml0ZShtb2Rfbm8sIHRlbXBfYnVmZmVyLCByZWcsIDEpOworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZV91OCk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfcmVhZF91OCAtIFJlYWRzIGEgOCBiaXQgcmVnaXN0ZXIgZnJvbSBUV0w0MDMwCisgKiBAbW9kX25vOiBtb2R1bGUgbnVtYmVyCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSByZWFkIDggYml0CisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICoKKyAqIFJldHVybnMgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnKQoreworCXJldHVybiB0d2w0MDMwX2kyY19yZWFkKG1vZF9ubywgdmFsdWUsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3JlYWRfdTgpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdW5zaWduZWQgdHdsNDAzMF9pcnFfYmFzZTsKKworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGlycV9ldmVudDsKKworLyoKKyAqIFRoaXMgdGhyZWFkIHByb2Nlc3NlcyBpbnRlcnJ1cHRzIHJlcG9ydGVkIGJ5IHRoZSBQcmltYXJ5IEludGVycnVwdCBIYW5kbGVyLgorICovCitzdGF0aWMgaW50IHR3bDQwMzBfaXJxX3RocmVhZCh2b2lkICpkYXRhKQoreworCWxvbmcgaXJxID0gKGxvbmcpZGF0YTsKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RhdGljIHVuc2lnbmVkIGkyY19lcnJvcnM7CisJY29uc3Qgc3RhdGljIHVuc2lnbmVkIG1heF9pMmNfZXJyb3JzID0gMTAwOworCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgcmV0OworCQlpbnQgbW9kdWxlX2lycTsKKwkJdTggcGloX2lzcjsKKworCQkvKiBXYWl0IGZvciBJUlEsIHRoZW4gcmVhZCBQSUggaXJxIHN0YXR1cyAoYWxzbyBibG9ja2luZykgKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZpcnFfZXZlbnQpOworCisJCXJldCA9IHR3bDQwMzBfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfUElILCAmcGloX2lzciwKKwkJCQkJICBSRUdfUElIX0lTUl9QMSk7CisJCWlmIChyZXQpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiBJMkMgZXJyb3IgJWQgcmVhZGluZyBQSUggSVNSXG4iLAorCQkJCQlEUklWRVJfTkFNRSwgcmV0KTsKKwkJCWlmICgrK2kyY19lcnJvcnMgPj0gbWF4X2kyY19lcnJvcnMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk1heGltdW0gSTJDIGVycm9yIGNvdW50IgorCQkJCQkJIiBleGNlZWRlZC4gIFRlcm1pbmF0aW5nICVzLlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbXBsZXRlKCZpcnFfZXZlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB0aGVzZSBoYW5kbGVycyBkZWFsIHdpdGggdGhlIHJlbGV2YW50IFNJSCBpcnEgc3RhdHVzICovCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWZvciAobW9kdWxlX2lycSA9IHR3bDQwMzBfaXJxX2Jhc2U7CisJCQkJcGloX2lzcjsKKwkJCQlwaWhfaXNyID4+PSAxLCBtb2R1bGVfaXJxKyspIHsKKwkJCWlmIChwaWhfaXNyICYgMHgxKSB7CisJCQkJaXJxX2Rlc2NfdCAqZCA9IGlycV9kZXNjICsgbW9kdWxlX2lycTsKKworCQkJCWQtPmhhbmRsZV9pcnEobW9kdWxlX2lycSwgZCk7CisJCQl9CisJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogZG9fdHdsNDAzMF9pcnEoKSBpcyB0aGUgZGVzYy0+aGFuZGxlIG1ldGhvZCBmb3IgdGhlIHR3bDQwMzAgaW50ZXJydXB0LgorICogVGhpcyBpcyBhIGNoYWluZWQgaW50ZXJydXB0LCBzbyB0aGVyZSBpcyBubyBkZXNjLT5hY3Rpb24gbWV0aG9kIGZvciBpdC4KKyAqIE5vdyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbiB0aGUgdHdsNDAzMCB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIG1vZHVsZSBpcyBnZW5lcmF0aW5nIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdC4gIEhvd2V2ZXIsIHdlIGNhbid0IGRvIGkyYworICogdHJhbnNhY3Rpb25zIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBtdXN0IGRlZmVyIHRoYXQgd29yayB0byBhIGtlcm5lbAorICogdGhyZWFkLiAgQWxsIHdlIGRvIGhlcmUgaXMgYWNrbm93bGVkZ2UgYW5kIG1hc2sgdGhlIGludGVycnVwdCBhbmQgd2FrZXVwCisgKiB0aGUga2VybmVsIHRocmVhZC4KKyAqLworc3RhdGljIHZvaWQgZG9fdHdsNDAzMF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxX2Rlc2NfdCAqZGVzYykKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBFYXJsaWVyIHRoaXMgd2FzIGRlc2MtPnRyaWdnZXJlZCA9IDE7CisJICovCisJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKworCS8qCisJICogQWNrbm93bGVkZ2UsIGNsZWFyIF9BTkRfIGRpc2FibGUgdGhlIGludGVycnVwdC4KKwkgKi8KKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCWlmICghZGVzYy0+ZGVwdGgpIHsKKwkJa3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisKKwkJY29tcGxldGUoJmlycV9ldmVudCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICogX19pbml0IHN0YXJ0X3R3bDQwMzBfaXJxX3RocmVhZChsb25nIGlycSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKworCWluaXRfY29tcGxldGlvbigmaXJxX2V2ZW50KTsKKwl0aHJlYWQgPSBrdGhyZWFkX3J1bih0d2w0MDMwX2lycV90aHJlYWQsICh2b2lkICopaXJxLCAidHdsNDAzMC1pcnEiKTsKKwlpZiAoIXRocmVhZCkKKwkJcHJfZXJyKCIlczogY291bGQgbm90IGNyZWF0ZSB0d2w0MDMwIGlycSAlbGQgdGhyZWFkIVxuIiwKKwkJICAgICAgIERSSVZFUl9OQU1FLCBpcnEpOworCisJcmV0dXJuIHRocmVhZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBhZGRfY2hpbGRyZW4oc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IE5VTEw7CisJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSBOVUxMOworCWludAkJCXN0YXR1cyA9IDA7CisKKwlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbM107CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9iY2kiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBiY2kgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+YmNpLAorCQkJCQlzaXplb2YoKnBkYXRhLT5iY2kpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBiY2kgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZSByID0geworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX0NIR19QUkVTLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgYmNpIGRldiwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX2dwaW8oKSAmJiBwZGF0YS0+Z3BpbykgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzFdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfZ3BpbyIsIC0xKTsKKwkJaWYgKCFwZGV2KSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIGdwaW8gZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQkvKiBtb3JlIGRyaXZlciBtb2RlbCBpbml0ICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJLyogZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOyAqLworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPmdwaW8sCisJCQkJCXNpemVvZigqcGRhdGEtPmdwaW8pKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBncGlvIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJLyogR1BJTyBtb2R1bGUgSVJRICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlCXIgPSB7CisJCQkJLnN0YXJ0ID0gcGRhdGEtPmlycV9iYXNlICsgMCwKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIGdwaW8gZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfa2V5cGFkKCkgJiYgcGRhdGEtPmtleXBhZCkgeworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX2tleXBhZCIsIC0xKTsKKwkJaWYgKHBkZXYpIHsKKwkJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMl07CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPmtleXBhZCwKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+a2V5cGFkKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQga2V5cGFkIGRhdGEsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCQkiY2FuJ3QgY3JlYXRlIGtleXBhZCBkZXYsICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2Mga2V5cGFkIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfbWFkYygpICYmIHBkYXRhLT5tYWRjKSB7CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfbWFkYyIsIC0xKTsKKwkJaWYgKHBkZXYpIHsKKwkJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMl07CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPm1hZGMsCisJCQkJCXNpemVvZigqcGRhdGEtPm1hZGMpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIG1hZGMgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCQkiY2FuJ3QgY3JlYXRlIG1hZGMgZGV2LCAlZFxuIiwKKwkJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIG1hZGMgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19ydGMoKSkgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzNdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfcnRjIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgcnRjIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJfQorCisJCS8qCisJCSAqIFJFVklTSVQgcGxhdGZvcm1fZGF0YSBoZXJlIGN1cnJlbnRseSBtaWdodCB1c2Ugb2YKKwkJICogIm1zZWN1cmUiIGxpbmUgLi4uIGJ1dCBmb3Igbm93IHdlIGp1c3QgZXhwZWN0IGJvYXJkCisJCSAqIHNldHVwIHRvIHRlbGwgdGhlIGNoaXAgIndlIGFyZSBzZWN1cmUiIGF0IGFsbCB0aW1lcy4KKwkJICogRXZlbnR1YWxseSwgTGludXggbWlnaHQgYmVjb21lIG1vcmUgYXdhcmUgb2Ygc3VjaAorCQkgKiBIVyBzZWN1cml0eSBjb25jZXJucywgYW5kICJsZWFzdCBwcml2aWxlZ2UiLgorCQkgKi8KKworCQkvKiBSVEMgbW9kdWxlIElSUSAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZQlyID0geworCQkJCS8qIFJFVklTSVQgZG9uJ3QgaGFyZC13aXJlIHRoaXMgc3R1ZmYgKi8KKwkJCQkuc3RhcnQgPSBUV0w0MDMwX1BXUklSUV9SVEMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSBydGMgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfdXNiKCkgJiYgcGRhdGEtPnVzYikgeworCQl0d2wgPSAmdHdsNDAzMF9tb2R1bGVzWzBdOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfdXNiIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgdXNiIGRldlxuIiwgRFJJVkVSX05BTUUpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEtPnVzYiwKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+dXNiKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCB1c2IgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXN0cnVjdCByZXNvdXJjZSByID0geworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX1VTQl9QUkVTLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgdXNiIGRldiwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCX0KKwl9CisKK2VycjoKKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoImZhaWxlZCB0byBhZGQgdHdsNDAzMCdzIGNoaWxkcmVuIChzdGF0dXMgJWQpXG4iLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgaW5pdGlhbGl6ZSB0aGUgb24tY2hpcCBjbG9jayBmcmFtZXdvcmssCisgKiBsZXR0aW5nIGl0IGdlbmVyYXRlIHRoZSByaWdodCBmcmVxdWVuY2llcyBmb3IgVVNCLCBNQURDLCBhbmQKKyAqIG90aGVyIHB1cnBvc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgcHJvdGVjdF9wbV9tYXN0ZXIodm9pZCkKK3sKKwlpbnQgZSA9IDA7CisKKwllID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfTE9DSywKKwkJCVJfUFJPVEVDVF9LRVkpOworCXJldHVybiBlOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgdW5wcm90ZWN0X3BtX21hc3Rlcih2b2lkKQoreworCWludCBlID0gMDsKKworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfVU5MT0NLMSwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBLRVlfVU5MT0NLMiwKKwkJCVJfUFJPVEVDVF9LRVkpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY2xvY2tzX2luaXQodm9pZCkKK3sKKwlpbnQgZSA9IDA7CisJc3RydWN0IGNsayAqb3NjOworCXUzMiByYXRlOworCXU4IGN0cmwgPSBIRkNMS19GUkVRXzI2X01IWjsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQlvc2MgPSBjbGtfZ2V0KE5VTEwsICJvc2NfY2siKTsKKwllbHNlCisJCW9zYyA9IGNsa19nZXQoTlVMTCwgIm9zY19zeXNfY2siKTsKKyNlbHNlCisJLyogUkVWSVNJVCBmb3Igbm9uLU9NQVAgc3lzdGVtcywgcGFzcyB0aGUgY2xvY2sgcmF0ZSBmcm9tCisJICogYm9hcmQgaW5pdCBjb2RlLCB1c2luZyBwbGF0Zm9ybV9kYXRhLgorCSAqLworCW9zYyA9IEVSUl9QVFIoLUVJTyk7CisjZW5kaWYKKwlpZiAoSVNfRVJSKG9zYykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgdHdsNDAzMCBpbnRlcm5hbCBjbG9jayBpbml0IGFuZCAiCisJCQkJInVzaW5nIGJvb3Rsb2FkZXIgdmFsdWUgKHVua25vd24gb3NjIHJhdGUpXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUob3NjKTsKKwljbGtfcHV0KG9zYyk7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDE5MjAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8xOXAyX01IWjsKKwkJYnJlYWs7CisJY2FzZSAyNjAwMDAwMDoKKwkJY3RybCA9IEhGQ0xLX0ZSRVFfMjZfTUhaOworCQlicmVhazsKKwljYXNlIDM4NDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8zOHA0X01IWjsKKwkJYnJlYWs7CisJfQorCisJY3RybCB8PSBISUdIX1BFUkZfU1E7CisJZSB8PSB1bnByb3RlY3RfcG1fbWFzdGVyKCk7CisJLyogZWZmZWN0LT5NQURDK1VTQiBjayBlbiAqLworCWUgfD0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBjdHJsLCBSX0NGR19CT09UKTsKKwllIHw9IHByb3RlY3RfcG1fbWFzdGVyKCk7CisKKwlpZiAoZSA8IDApCisJCXByX2VycigiJXM6IGNsb2NrIGluaXQgZXJyIFslZF1cbiIsIERSSVZFUl9OQU1FLCBlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB0d2w0MDMwX2kyY19jbGVhcl9pc3IgLSBjbGVhciBUV0w0MDMwIFNJSCBJU1IgcmVncyB2aWEgcmVhZCArIHdyaXRlCisgKiBAbW9kX25vOiBUV0w0MDMwIG1vZHVsZSBudW1iZXIKKyAqIEByZWc6IHJlZ2lzdGVyIGluZGV4IHRvIGNsZWFyCisgKiBAY29yOiB2YWx1ZSBvZiB0aGUgPG1vZHVsZT5fU0lIX0NUUkwuQ09SIGJpdCAoMSBvciAwKQorICoKKyAqIEVpdGhlciByZWFkcyAoY29yID09IDEpIG9yIHdyaXRlcyAoY29yID09IDApIHRvIGEgVFdMNDAzMCBpbnRlcnJ1cHQKKyAqIHN0YXR1cyByZWdpc3RlciB0byBlbnN1cmUgdGhhdCBhbnkgcHJpb3IgaW50ZXJydXB0cyBhcmUgY2xlYXJlZC4KKyAqIFJldHVybnMgdGhlIHN0YXR1cyBmcm9tIHRoZSBJMkMgcmVhZCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfaTJjX2NsZWFyX2lzcih1OCBtb2Rfbm8sIHU4IHJlZywgdTggY29yKQoreworCXU4IHRtcDsKKworCXJldHVybiAoY29yKSA/IHR3bDQwMzBfaTJjX3JlYWRfdTgobW9kX25vLCAmdG1wLCByZWcpIDoKKwkJdHdsNDAzMF9pMmNfd3JpdGVfdTgobW9kX25vLCAweGZmLCByZWcpOworfQorCisvKioKKyAqIHR3bDQwMzBfcmVhZF9jb3JfYml0IC0gYXJlIFRXTCBtb2R1bGUgSVNScyBjbGVhcmVkIGJ5IHJlYWRzIG9yIHdyaXRlcz8KKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlcgorICogQHJlZzogcmVnaXN0ZXIgaW5kZXggdG8gY2xlYXIKKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIFRXTDQwMzAgU0lIIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIChJU1JzKSBmb3IKKyAqIHRoZSBzcGVjaWZpZWQgVFdMIG1vZHVsZSBhcmUgY2xlYXJlZCBieSByZWFkcywgb3IgMCBpZiBjbGVhcmVkIGJ5CisgKiB3cml0ZXMuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9yZWFkX2Nvcl9iaXQodTggbW9kX25vLCB1OCByZWcpCit7CisJdTggdG1wID0gMDsKKworCVdBUk5fT04odHdsNDAzMF9pMmNfcmVhZF91OChtb2Rfbm8sICZ0bXAsIHJlZykgPCAwKTsKKworCXRtcCAmPSBUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLOworCXRtcCA+Pj0gX19mZnMoVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSyk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKioKKyAqIHR3bDQwMzBfbWFza19jbGVhcl9pbnRycyAtIG1hc2sgYW5kIGNsZWFyIGFsbCBUV0w0MDMwIGludGVycnVwdHMKKyAqIEB0OiBwb2ludGVyIHRvIHR3bDQwMzBfbW9kX2lyZWdzIGFycmF5CisgKiBAdF9zejogQVJSQVlfU0laRSh0KSAoc3RhcnRpbmcgYXQgMSkKKyAqCisgKiBNYXNrIGFsbCBUV0w0MDMwIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAoSU1ScykgYW5kIGNsZWFyIGFsbAorICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKElTUnMpLiAgTm8gcmV0dXJuIHZhbHVlLCBidXQgd2lsbCBXQVJOIGlmCisgKiBhbnkgSTJDIG9wZXJhdGlvbnMgZmFpbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHR3bDQwMzBfbWFza19jbGVhcl9pbnRycyhjb25zdCBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgKnQsCisJCQkJCSAgICBjb25zdCB1OCB0X3N6KQoreworCWludCBpLCBqOworCisJLyoKKwkgKiBOLkIuIC0gZnVydGhlciBlZmZpY2llbmN5IGlzIHBvc3NpYmxlIGhlcmUuICBFaWdodCBJMkMKKwkgKiBvcGVyYXRpb25zIG9uIEJDSSBhbmQgR1BJTyBtb2R1bGVzIGFyZSBhdm9pZGFibGUgaWYgSTJDCisJICogYnVyc3QgcmVhZC93cml0ZSB0cmFuc2FjdGlvbnMgd2VyZSBpbXBsZW1lbnRlZC4gIFdvdWxkCisJICogcHJvYmFibHkgc2F2ZSBhYm91dCAxbXMgb2YgYm9vdCB0aW1lIGFuZCBhIHNtYWxsIGFtb3VudCBvZgorCSAqIHBvd2VyLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0X3N6OyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIHRtciA9IHRbaV07CisJCWludCBjb3I7CisKKwkJLyogQXJlIElTUnMgY2xlYXJlZCBieSByZWFkcyBvciB3cml0ZXM/ICovCisJCWNvciA9IHR3bDQwMzBfcmVhZF9jb3JfYml0KHRtci5tb2Rfbm8sIHRtci5zaWhfY3RybCk7CisKKwkJZm9yIChqID0gMDsgaiA8IHRtci5yZWdfY250OyBqKyspIHsKKworCQkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IHRoZSBUV0w0MDMwICovCisJCQlXQVJOX09OKHR3bDQwMzBfaTJjX3dyaXRlX3U4KHRtci5tb2Rfbm8sIDB4ZmYsCisJCQkJCQkgICAgIHRtci5pbXJzW2pdKSA8IDApOworCisJCQkvKiBDbGVhciBUV0w0MDMwIElTUnMgKi8KKwkJCVdBUk5fT04odHdsNDAzMF9pMmNfY2xlYXJfaXNyKHRtci5tb2Rfbm8sCisJCQkJCQkgICAgICB0bXIuaXNyc1tqXSwgY29yKSA8IDApOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHR3bF9pbml0X2lycShpbnQgaXJxX251bSwgdW5zaWduZWQgaXJxX2Jhc2UsIHVuc2lnbmVkIGlycV9lbmQpCit7CisJaW50CWk7CisKKwkvKgorCSAqIE1hc2sgYW5kIGNsZWFyIGFsbCBUV0w0MDMwIGludGVycnVwdHMgc2luY2UgaW5pdGlhbGx5IHdlIGRvCisJICogbm90IGhhdmUgYW55IFRXTDQwMzAgbW9kdWxlIGludGVycnVwdCBoYW5kbGVycyBwcmVzZW50CisJICovCisJdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzKHR3bDQwMzBfbW9kX3JlZ3MsCisJCQkJIEFSUkFZX1NJWkUodHdsNDAzMF9tb2RfcmVncykpOworCisJdHdsNDAzMF9pcnFfYmFzZSA9IGlycV9iYXNlOworCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciBmb3IgZWFjaCBvZiB0aGUgUElIIG1vZHVsZXMgKi8KKwlmb3IgKGkgPSBpcnFfYmFzZTsgaSA8IGlycV9lbmQ7IGkrKykgeworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnR3bDQwMzBfaXJxX2NoaXAsCisJCQkJaGFuZGxlX3NpbXBsZV9pcnEpOworCQlhY3RpdmF0ZV9pcnEoaSk7CisJfQorCisJLyogaW5zdGFsbCBhbiBpcnEgaGFuZGxlciB0byBkZW11bHRpcGxleCB0aGUgVFdMNDAzMCBpbnRlcnJ1cHQgKi8KKwlzZXRfaXJxX2RhdGEoaXJxX251bSwgc3RhcnRfdHdsNDAzMF9pcnFfdGhyZWFkKGlycV9udW0pKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnFfbnVtLCBkb190d2w0MDMwX2lycSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdHdsNDAzMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1bnNpZ25lZCBpOworCisJLyogRklYTUUgdW5kbyB0d2xfaW5pdF9pcnEoKSAqLworCWlmICh0d2w0MDMwX2lycV9iYXNlKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2FuJ3QgeWV0IGNsZWFuIHVwIElSUXM/XG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKKworCQlpZiAodHdsLT5jbGllbnQgJiYgdHdsLT5jbGllbnQgIT0gY2xpZW50KQorCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHR3bC0+Y2xpZW50KTsKKwkJdHdsNDAzMF9tb2R1bGVzW2ldLmNsaWVudCA9IE5VTEw7CisJfQorCWludXNlID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKKy8qIE5PVEU6ICB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgdHdsNDAzMC90cHM2NTl4MCBjaGlwICovCitzdGF0aWMgaW50Cit0d2w0MDMwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQJCQkJc3RhdHVzOworCXVuc2lnbmVkCQkJaTsKKwlzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpID09IDApIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJjYW4ndCB0YWxrIEkyQz9cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoaW51c2UgfHwgdHdsNDAzMF9pcnFfYmFzZSkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRyaXZlciBpcyBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRXTDQwMzBfTlVNX1NMQVZFUzsgaSsrKSB7CisJCXN0cnVjdCB0d2w0MDMwX2NsaWVudAkqdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tpXTsKKworCQl0d2wtPmFkZHJlc3MgPSBjbGllbnQtPmFkZHIgKyBpOworCQlpZiAoaSA9PSAwKQorCQkJdHdsLT5jbGllbnQgPSBjbGllbnQ7CisJCWVsc2UgeworCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQkJdHdsLT5hZGRyZXNzKTsKKwkJCWlmICghdHdsLT5jbGllbnQpIHsKKwkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlzdHJsY3B5KHR3bC0+Y2xpZW50LT5uYW1lLCBpZC0+bmFtZSwKKwkJCQkJc2l6ZW9mKHR3bC0+Y2xpZW50LT5uYW1lKSk7CisJCX0KKwkJbXV0ZXhfaW5pdCgmdHdsLT54ZmVyX2xvY2spOworCX0KKwlpbnVzZSA9IHRydWU7CisKKwkvKiBzZXR1cCBjbG9jayBmcmFtZXdvcmsgKi8KKwljbG9ja3NfaW5pdCgpOworCisJLyogTWF5YmUgaW5pdCB0aGUgVDIgSW50ZXJydXB0IHN1YnN5c3RlbSAqLworCWlmIChjbGllbnQtPmlycQorCQkJJiYgcGRhdGEtPmlycV9iYXNlCisJCQkmJiBwZGF0YS0+aXJxX2VuZCA+IHBkYXRhLT5pcnFfYmFzZSkgeworCQl0d2xfaW5pdF9pcnEoY2xpZW50LT5pcnEsIHBkYXRhLT5pcnFfYmFzZSwgcGRhdGEtPmlycV9lbmQpOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJJUlEgJWQgY2hhaW5zIElSUXMgJWQuLiVkXG4iLAorCQkJCWNsaWVudC0+aXJxLCBwZGF0YS0+aXJxX2Jhc2UsIHBkYXRhLT5pcnFfZW5kIC0gMSk7CisJfQorCisJc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhKTsKK2ZhaWw6CisJaWYgKHN0YXR1cyA8IDApCisJCXR3bDQwMzBfcmVtb3ZlKGNsaWVudCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHR3bDQwMzBfaWRzW10gPSB7CisJeyAidHdsNDAzMCIsIDAgfSwJLyogIlRyaXRvbiAyIiAqLworCXsgInRwczY1OTUwIiwgMCB9LAkvKiBjYXRhbG9nIHZlcnNpb24gb2YgdHdsNDAzMCAqLworCXsgInRwczY1OTMwIiwgMCB9LAkvKiBmZXdlciBMRE9zIGFuZCBEQUNzOyBubyBjaGFyZ2VyICovCisJeyAidHBzNjU5MjAiLCAwIH0sCS8qIGZld2VyIExET3M7IG5vIGNvZGVjIG9yIGNoYXJnZXIgKi8KKwl7ICJ0d2w1MDMwIiwgMCB9LAkvKiBUMiB1cGRhdGVkICovCisJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0d2w0MDMwX2lkcyk7CisKKy8qIE9uZSBDbGllbnQgRHJpdmVyICwgNCBDbGllbnRzICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHdsNDAzMF9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gdHdsNDAzMF9pZHMsCisJLnByb2JlCQk9IHR3bDQwMzBfcHJvYmUsCisJLnJlbW92ZQkJPSB0d2w0MDMwX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHdsNDAzMF9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHR3bDQwMzBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2w0MDMwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmdHdsNDAzMF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHdsNDAzMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDIENvcmUgaW50ZXJmYWNlIGZvciBUV0w0MDMwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwppbmRleCAyNWE3YTVkLi5iZjg3ZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAKIAltdXRleF9pbml0KCZ3bTgzNTAtPmlycV9tdXRleCk7CiAJSU5JVF9XT1JLKCZ3bTgzNTAtPmlycV93b3JrLCB3bTgzNTBfaXJxX3dvcmtlcik7Ci0JaWYgKGlycSAhPSBOT19JUlEpIHsKKwlpZiAoaXJxKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgd204MzUwX2lycSwgMCwKIAkJCQkgICJ3bTgzNTAiLCB3bTgzNTApOwogCQlpZiAocmV0ICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggYTcyNmYzYi4uZWZkM2FhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIAogY29uZmlnIEFUTUVMX1BXTQogCXRyaXN0YXRlICJBdG1lbCBBVDMyL0FUOTEgUFdNIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKKwlkZXBlbmRzIG9uIEFWUjMyIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9BVDkxU0FNOVJMIHx8IEFSQ0hfQVQ5MUNBUDkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGRldmljZSBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIFBXTSBjaGFubmVscwogCSAgb24gY2VydGFpbiBBdG1lbCBwcmNvZXNzb3JzLiAgUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBpcyB1c2VkIGZvcgpAQCAtNDA5LDYgKzQwOSw3IEBACiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVwZW5kcyBvbiBIV01PTgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBSRktJTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRm4tRngga2V5cyBvbiBFZWUgUEMgbGFwdG9wcy4KIAkgIEl0IGFsc28gYWRkcyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggY2FtZXJhL3dsYW4gb24vb2ZmLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hwLXdtaS5jIGIvZHJpdmVycy9taXNjL2hwLXdtaS5jCmluZGV4IDZkNDA3YzIuLjRiN2MyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocC13bWkuYworKysgYi9kcml2ZXJzL21pc2MvaHAtd21pLmMKQEAgLTgyLDYgKzgyLDcgQEAKIAl7S0VfS0VZLCAweDAzLCBLRVlfQlJJR0hUTkVTU0RPV059LAogCXtLRV9LRVksIDB4MjBlNiwgS0VZX1BST0cxfSwKIAl7S0VfS0VZLCAweDIxNDIsIEtFWV9NRURJQX0sCisJe0tFX0tFWSwgMHgyMTNiLCBLRVlfSU5GT30sCiAJe0tFX0tFWSwgMHgyMzFiLCBLRVlfSEVMUH0sCiAJe0tFX0VORCwgMH0KIH07CkBAIC0zMDksNyArMzEwLDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotdm9pZCBocF93bWlfbm90aWZ5KHUzMiB2YWx1ZSwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyB2b2lkIGhwX3dtaV9ub3RpZnkodTMyIHZhbHVlLCB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBhY3BpX2J1ZmZlciByZXNwb25zZSA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3BoYW50b20uYyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKaW5kZXggZGFmNTg1Ni4uYWJkZWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3BoYW50b20uYworKysgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCkBAIC0zOTksOSArMzk5LDkgQEAKIAkJZ290byBlcnJfaXJxOwogCX0KIAotCWlmIChJU19FUlIoZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBoYW50b21fY2xhc3MsICZwZGV2LT5kZXYsCi0JCQkJCSBNS0RFVihwaGFudG9tX21ham9yLCBtaW5vciksCi0JCQkJCSBOVUxMLCAicGhhbnRvbSV1IiwgbWlub3IpKSkKKwlpZiAoSVNfRVJSKGRldmljZV9jcmVhdGUocGhhbnRvbV9jbGFzcywgJnBkZXYtPmRldiwKKwkJCQkgTUtERVYocGhhbnRvbV9tYWpvciwgbWlub3IpLCBOVUxMLAorCQkJCSAicGhhbnRvbSV1IiwgbWlub3IpKSkKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgY3JlYXRlIGRldmljZVxuIik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgcGh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1LmgKaW5kZXggNDBkZjdjYi4uZjkzZjAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1LmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1LmgKQEAgLTMwLDkgKzMwLDkgQEAKIC8qCiAgKiBTaXplIHVzZWQgdG8gbWFwIEdSVSBHU2VnCiAgKi8KLSNpZiBkZWZpbmVkIENPTkZJR19JQTY0CisjaWYgZGVmaW5lZChDT05GSUdfSUE2NCkKICNkZWZpbmUgR1JVX0dTRUdfUEFHRVNJWkUJKDI1NiAqIDEwMjRVTCkKLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogI2RlZmluZSBHUlVfR1NFR19QQUdFU0laRQkoMjU2ICogMTAyNFVMKQkJLyogWlpaIDJNQiA/Pz8gKi8KICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaAppbmRleCAwZGMzNjIyLi40ODc2MmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZ1bmN0aW9ucwogICovCiAKLSNpZiBkZWZpbmVkIENPTkZJR19JQTY0CisjaWYgZGVmaW5lZChDT05GSUdfSUE2NCkKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWlhNjRfZmMocCkKQEAgLTM2LDcgKzM2LDcgQEAKIAkJCWJhcnJpZXIoKTsJCQkJCVwKIAkJCSooKHZvbGF0aWxlIGludCAqKShwKSkgPSB2OyAvKiBmb3JjZSBzdC5yZWwgKi8JXAogCQl9IHdoaWxlICgwKQotI2VsaWYgZGVmaW5lZCBDT05GSUdfWDg2XzY0CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCiAjZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWNsZmx1c2gocCkKICNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsdikJCQkJCVwKIAkJZG8gewkJCQkJCQlcCkBAIC0yOTksNiArMjk5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncnVfc3RhcnRfaW5zdHJ1Y3Rpb24oc3RydWN0IGdydV9pbnN0cnVjdGlvbiAqaW5zLCBpbnQgb3AzMikKIHsKIAlncnVfb3JkZXJlZF9zdG9yZV9pbnQoaW5zLCBvcDMyKTsKKwlncnVfZmx1c2hfY2FjaGUoaW5zKTsKIH0KIAogCkBAIC02MDQsOCArNjA1LDkgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGdydV9jaGVja19zdGF0dXModm9pZCAqY2IpCiB7CiAJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX3N0YXR1cyAqY2JzID0gKHZvaWQgKiljYjsKLQlpbnQgcmV0ID0gY2JzLT5pc3RhdHVzOworCWludCByZXQ7CiAKKwlyZXQgPSBjYnMtPmlzdGF0dXM7CiAJaWYgKHJldCA9PSBDQlNfQ0FMTF9PUykKIAkJcmV0ID0gZ3J1X2NoZWNrX3N0YXR1c19wcm9jKGNiKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjE3LDcgKzYxOSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBncnVfd2FpdCh2b2lkICpjYikKIHsKIAlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfc3RhdHVzICpjYnMgPSAodm9pZCAqKWNiOwotCWludCByZXQgPSBjYnMtPmlzdGF0dXM7OworCWludCByZXQgPSBjYnMtPmlzdGF0dXM7CiAKIAlpZiAocmV0ICE9IENCU19JRExFKQogCQlyZXQgPSBncnVfd2FpdF9wcm9jKGNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCmluZGV4IDNkMzMwMTUuLjhjMzg5ZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKQEAgLTIxNCwxMiArMjE0LDE0IEBACiB9CiAKIC8qCi0gKgogICogYXRvbWljX3B0ZV9sb29rdXAKICAqCiAgKiBDb252ZXJ0IGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBhZGRyZXNzCiAgKiBPbmx5IHN1cHBvcnRzIEludGVsIGxhcmdlIHBhZ2VzICgyTUIgb25seSkgb24geDg2XzY0LgogICoJWlpaIC0gaHVnZXBhZ2Ugc3VwcG9ydCBpcyBpbmNvbXBsZXRlCisgKgorICogTk9URTogbW1hcF9zZW0gaXMgYWxyZWFkeSBoZWxkIG9uIGVudHJ5IHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMKKyAqIGd1YXJhbnRlZXMgZXhpc3RlbmNlIG9mIHRoZSBwYWdlIHRhYmxlcy4KICAqLwogc3RhdGljIGludCBhdG9taWNfcHRlX2xvb2t1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2YWRkciwKIAlpbnQgd3JpdGUsIHVuc2lnbmVkIGxvbmcgKnBhZGRyLCBpbnQgKnBhZ2VzaGlmdCkKQEAgLTIyOSw5ICsyMzEsNiBAQAogCXB1ZF90ICpwdWRwOwogCXB0ZV90IHB0ZTsKIAotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJCS8qIFpaWiBkZWJ1ZyAqLwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCB2YWRkcik7CiAJaWYgKHVubGlrZWx5KHBnZF9ub25lKCpwZ2RwKSkpCiAJCWdvdG8gZXJyOwpAQCAtMjUwLDggKzI0OSw2IEBACiAjZW5kaWYKIAkJcHRlID0gKnB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhZGRyKTsKIAotCWxvY2FsX2lycV9lbmFibGUoKTsKLQogCWlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlKSB8fAogCQkgICAgICh3cml0ZSAmJiAoIXB0ZV93cml0ZShwdGUpIHx8ICFwdGVfZGlydHkocHRlKSkpKSkKIAkJcmV0dXJuIDE7CkBAIC0zMjQsNiArMzIxLDcgQEAKIAkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYwogCSAqIGNvbnRleHQuCiAJICovCisJcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KIAlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcGFnZXNoaWZ0KTsKIAlpZiAocmV0KSB7CiAJCWlmICghY2IpCkBAIC01NDMsNiArNTQxLDcgQEAKIAkJdWNibnVtID0gZ2V0X2NiX251bWJlcigodm9pZCAqKWV4Y2RldC5jYik7CiAJCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAkJY2JlID0gZ2V0X2NiZV9ieV9pbmRleChndHMtPnRzX2dydSwgY2JybnVtKTsKKwkJcHJlZmV0Y2h3KGNiZSk7CQkvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAJCWV4Y2RldC5vcGMgPSBjYmUtPm9wY2NweTsKIAkJZXhjZGV0LmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAkJZXhjZGV0LmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGQ2MWNlZTcuLjVjMDI3YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZtYS0+dm1fc3RhcnQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSB8fAotCQkJdm1hLT52bV9lbmQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSkKKwkgICAgCQkJdm1hLT52bV9lbmQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2bWEtPnZtX2ZsYWdzIHw9CkBAIC0zOTgsNiArMzk4LDEyIEBACiAJaXJxID0gZ2V0X2Jhc2VfaXJxKCk7CiAJZm9yIChjaGlwID0gMDsgY2hpcCA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGNoaXArKykgewogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEgKyBjaGlwLCBncnVfaW50ciwgMCwgaWQsIE5VTEwpOworCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZXMgYmVjYXVzZQorCQkgKiBpbnRlcnJ1cHRzIGFyZSBub3QgcmVxdWlyZWQgJiBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCAqLworCQlpZiAocmV0KSB7CisJCQlwcmludGsoIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOworCQkJcmV0ID0gMDsKKwkJfQogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCiAJCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCmluZGV4IGQxNjAzMWQuLmI2MzAxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKQEAgLTkxLDEyICs5MSw3IEBACiAjZGVmaW5lIEdTRUdQT0ZGKGgpIAkJKChoKSAmIChHUlVfU0laRSAtIDEpKQogCiAvKiBDb252ZXJ0IGFuIGFyYml0cmFyeSBoYW5kbGUgYWRkcmVzcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBHUlUgc2VnbWVudCAqLwotI2lmbmRlZiBfX1BMVUdJTl9fCiAjZGVmaW5lIEdSVUJBU0UoaCkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaCkgJiB+KEdSVV9TSVpFIC0gMSkpKQotI2Vsc2UKLWV4dGVybiB2b2lkICpnbXVfZ3J1YmFzZSh2b2lkICpoKTsKLSNkZWZpbmUgR1JVQkFTRShoKQkJZ211X2dydWJhc2UoaCkKLSNlbmRpZgogCiAvKiBHZW5lcmFsIGFkZHJlc3NpbmcgbWFjcm9zLiAqLwogc3RhdGljIGlubGluZSB2b2lkICpnZXRfZ3NlZ19iYXNlX2FkZHJlc3Modm9pZCAqYmFzZSwgaW50IGN0eG51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKaW5kZXggZGZkNDlhZi4uODgwYzU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKQEAgLTEyMiw2ICsxMjIsNyBAQAogCXN0cnVjdCBncnVfY29udHJvbF9ibG9ja19leHRlbmRlZCAqY2JlOwogCiAJY2JlID0gZ2V0X2NiZShHUlVCQVNFKGNiKSwgZ2V0X2NiX251bWJlcihjYikpOworCXByZWZldGNodyhjYmUpOyAgICAgICAgIC8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAlleGNkZXQtPm9wYyA9IGNiZS0+b3BjY3B5OwogCWV4Y2RldC0+ZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCWV4Y2RldC0+ZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC00NjYsNyArNDY3LDcgQEAKIAlTVEFUKG1lc3Ffc2VuZCk7CiAJQlVHX09OKGJ5dGVzIDwgc2l6ZW9mKGludCkgfHwgYnl0ZXMgPiAyICogR1JVX0NBQ0hFX0xJTkVfQllURVMpOwogCi0JY2xpbmVzID0gKGJ5dGVzICsgR1JVX0NBQ0hFX0xJTkVfQllURVMgLSAxKSAvIEdSVV9DQUNIRV9MSU5FX0JZVEVTOworCWNsaW5lcyA9IERJVl9ST1VORF9VUChieXRlcywgR1JVX0NBQ0hFX0xJTkVfQllURVMpOwogCWlmIChncnVfZ2V0X2NwdV9yZXNvdXJjZXMoYnl0ZXMsICZjYiwgJmRzcikpCiAJCXJldHVybiBNUUVfQlVHX05PX1JFU09VUkNFUzsKIAltZW1jcHkoZHNyLCBtZXNnLCBieXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKaW5kZXggMGVlYjhkZC4uZTExZTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYwpAQCAtNDMyLDcgKzQzMiwyMiBAQAogCXJldHVybiBHUlVfSEFORExFX0JZVEVTOwogfQogCi0vKiByZXdyaXRlIGluIGFzc2VtYmx5ICYgdXNlIGxvdHMgb2YgcHJlZmV0Y2ggKi8KK3N0YXRpYyB2b2lkIGdydV9wcmVmZXRjaF9jb250ZXh0KHZvaWQgKmdzZWcsIHZvaWQgKmNiLCB2b2lkICpjYmUsIHVuc2lnbmVkIGxvbmcgY2JybWFwLAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQoreworCWludCBpLCBzY3I7CisKKwlwcmVmZXRjaF9kYXRhKGdzZWcgKyBHUlVfRFNfQkFTRSwgbGVuZ3RoIC8gR1JVX0NBQ0hFX0xJTkVfQllURVMsCisJCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKKworCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKKwkJcHJlZmV0Y2hfZGF0YShjYiwgMSwgR1JVX0NBQ0hFX0xJTkVfQllURVMpOworCQlwcmVmZXRjaF9kYXRhKGNiZSArIGkgKiBHUlVfSEFORExFX1NUUklERSwgMSwKKwkJCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKKwkJY2IgKz0gR1JVX0hBTkRMRV9TVFJJREU7CisJfQorfQorCiBzdGF0aWMgdm9pZCBncnVfbG9hZF9jb250ZXh0X2RhdGEodm9pZCAqc2F2ZSwgdm9pZCAqZ3J1YmFzZSwgaW50IGN0eG51bSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY2JybWFwLCB1bnNpZ25lZCBsb25nIGRzcm1hcCkKIHsKQEAgLTQ0MSwyMCArNDU2LDExIEBACiAJaW50IGksIHNjcjsKIAogCWdzZWcgPSBncnViYXNlICsgY3R4bnVtICogR1JVX0dTRUdfU1RSSURFOwotCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKLQlwcmVmZXRjaF9kYXRhKGdzZWcgKyBHUlVfRFNfQkFTRSwgbGVuZ3RoIC8gR1JVX0NBQ0hFX0xJTkVfQllURVMsCi0JCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKLQogCWNiID0gZ3NlZyArIEdSVV9DQl9CQVNFOwogCWNiZSA9IGdydWJhc2UgKyBHUlVfQ0JFX0JBU0U7Ci0JZm9yX2VhY2hfY2JyX2luX2FsbG9jYXRpb25fbWFwKGksICZjYnJtYXAsIHNjcikgewotCQlwcmVmZXRjaF9kYXRhKGNiLCAxLCBHUlVfQ0FDSEVfTElORV9CWVRFUyk7Ci0JCXByZWZldGNoX2RhdGEoY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFLCAxLAotCQkJICAgICAgR1JVX0NBQ0hFX0xJTkVfQllURVMpOwotCQljYiArPSBHUlVfSEFORExFX1NUUklERTsKLQl9CisJbGVuZ3RoID0gaHdlaWdodDY0KGRzcm1hcCkgKiBHUlVfRFNSX0FVX0JZVEVTOworCWdydV9wcmVmZXRjaF9jb250ZXh0KGdzZWcsIGNiLCBjYmUsIGNicm1hcCwgbGVuZ3RoKTsKIAotCWNiID0gZ3NlZyArIEdSVV9DQl9CQVNFOwogCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKIAkJc2F2ZSArPSBncnVfY29weV9oYW5kbGUoY2IsIHNhdmUpOwogCQlzYXZlICs9IGdydV9jb3B5X2hhbmRsZShjYmUgKyBpICogR1JVX0hBTkRMRV9TVFJJREUsIHNhdmUpOwpAQCAtNDcyLDE1ICs0NzgsMTYgQEAKIAlpbnQgaSwgc2NyOwogCiAJZ3NlZyA9IGdydWJhc2UgKyBjdHhudW0gKiBHUlVfR1NFR19TVFJJREU7Ci0KIAljYiA9IGdzZWcgKyBHUlVfQ0JfQkFTRTsKIAljYmUgPSBncnViYXNlICsgR1JVX0NCRV9CQVNFOworCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKKwlncnVfcHJlZmV0Y2hfY29udGV4dChnc2VnLCBjYiwgY2JlLCBjYnJtYXAsIGxlbmd0aCk7CisKIAlmb3JfZWFjaF9jYnJfaW5fYWxsb2NhdGlvbl9tYXAoaSwgJmNicm1hcCwgc2NyKSB7CiAJCXNhdmUgKz0gZ3J1X2NvcHlfaGFuZGxlKHNhdmUsIGNiKTsKIAkJc2F2ZSArPSBncnVfY29weV9oYW5kbGUoc2F2ZSwgY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFKTsKIAkJY2IgKz0gR1JVX0hBTkRMRV9TVFJJREU7CiAJfQotCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKIAltZW1jcHkoc2F2ZSwgZ3NlZyArIEdSVV9EU19CQVNFLCBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggNDA2OTg5ZS4uN2E3MmU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMTMyLDYgKzEzMiw3IEBACiAKIAlibGtfcXVldWVfcHJlcF9ycShtcS0+cXVldWUsIG1tY19wcmVwX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9vcmRlcmVkKG1xLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIG1xLT5xdWV1ZSk7CiAKICNpZmRlZiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRQogCWlmIChob3N0LT5tYXhfaHdfc2VncyA9PSAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IGMxNjAyODguLjFiOWZjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiB9OwogCi12b2lkIG1tY19vbWFwX2ZjbGtfb2ZmZGVsYXkoc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QpCitzdGF0aWMgdm9pZCBtbWNfb21hcF9mY2xrX29mZmRlbGF5KHN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90KQogewogCXVuc2lnbmVkIGxvbmcgdGlja19uczsKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAJfQogfQogCi12b2lkIG1tY19vbWFwX2ZjbGtfZW5hYmxlKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgbW1jX29tYXBfZmNsa19lbmFibGUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTQ1NSw3ICsxNDU1LDkgQEAKIAogCWhvc3QtPmlycSA9IGlycTsKIAlob3N0LT5waHlzX2Jhc2UgPSBob3N0LT5tZW1fcmVzLT5zdGFydDsKLQlob3N0LT52aXJ0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoaG9zdC0+cGh5c19iYXNlKTsKKwlob3N0LT52aXJ0X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+dmlydF9iYXNlKQorCQlnb3RvIGVycl9pb3JlbWFwOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfaWNrIik7CkBAIC0xNTEwLDYgKzE1MTIsOCBAQAogCQljbGtfcHV0KGhvc3QtPmljbGspOwogCX0KIGVycl9mcmVlX21tY19ob3N0OgorCWlvdW5tYXAoaG9zdC0+dmlydF9iYXNlKTsKK2Vycl9pb3JlbWFwOgogCWtmcmVlKGhvc3QpOwogZXJyX2ZyZWVfbWVtX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CkBAIC0xNTM2LDYgKzE1NDAsNyBAQAogCWlmIChob3N0LT5mY2xrICYmICFJU19FUlIoaG9zdC0+ZmNsaykpCiAJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAKKwlpb3VubWFwKGhvc3QtPnZpcnRfYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJICAgcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggYWUxNmQ4NC4uM2IyMDg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBtYWludGVjaCBHbWJILCBUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+CiAgKgorICogQ3VycmVudCBkcml2ZXIgbWFpbnRhaW5lZCBieSBCZW4gRG9va3MgYW5kIFNpbXRlYyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCAoQykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTEzLDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC0zOSw5ICs0Myw5IEBACiAJZGJnX2NvbmYgID0gKDEgPDwgOCksCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9lcnIgICA9IGRiZ19lcnIgfCBkYmdfZmFpbDsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2VyciAgID0gZGJnX2ZhaWw7CiBzdGF0aWMgY29uc3QgaW50IGRiZ21hcF9pbmZvICA9IGRiZ19pbmZvIHwgZGJnX2NvbmY7Ci1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9kZWJ1ZyA9IGRiZ19kZWJ1ZzsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2RlYnVnID0gZGJnX2VyciB8IGRiZ19kZWJ1ZzsKIAogI2RlZmluZSBkYmcoaG9zdCwgY2hhbm5lbHMsIGFyZ3MuLi4pCQkgIFwKIAlkbyB7CQkJCQkgIFwKQEAgLTE4OSw3ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZGF0YV9idWZmZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LAotCQkJCSAgdTMyICp3b3JkcywgdTMyICoqcG9pbnRlcikKKwkJCQkgIHUzMiAqYnl0ZXMsIHUzMiAqKnBvaW50ZXIpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApAQCAtMjA2LDcgKzIxMCw3IEBACiAJfQogCXNnID0gJmhvc3QtPm1ycS0+ZGF0YS0+c2dbaG9zdC0+cGlvX3NncHRyXTsKIAotCSp3b3JkcyA9IHNnLT5sZW5ndGggPj4gMjsKKwkqYnl0ZXMgPSBzZy0+bGVuZ3RoOwogCSpwb2ludGVyID0gc2dfdmlydChzZyk7CiAKIAlob3N0LT5waW9fc2dwdHIrKzsKQEAgLTIyMiw3ICsyMjYsNyBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gZmlmb3N0YXQgPj4gMjsKKwlyZXR1cm4gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGZpZm9fZnJlZShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCkBAIC0yMzAsMTMgKzIzNCwxNSBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gKDYzIC0gZmlmb3N0YXQpID4+IDI7CisJcmV0dXJuIDYzIC0gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3Bpb19yZWFkKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmVzOwogCXUzMiBmaWZvOworCXUzMiAqcHRyOworCXUzMiBmaWZvX3dvcmRzOwogCXZvaWQgX19pb21lbSAqZnJvbV9wdHI7CiAKIAkvKiB3cml0ZSByZWFsIHByZXNjYWxlciB0byBob3N0LCBpdCBtaWdodCBiZSBzZXQgc2xvdyB0byBmaXggKi8KQEAgLTI0NSw4ICsyNTEsOCBAQAogCWZyb21fcHRyID0gaG9zdC0+YmFzZSArIGhvc3QtPnNkaWRhdGE7CiAKIAl3aGlsZSAoKGZpZm8gPSBmaWZvX2NvdW50KGhvc3QpKSkgewotCQlpZiAoIWhvc3QtPnBpb193b3JkcykgewotCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fd29yZHMsCisJCWlmICghaG9zdC0+cGlvX2J5dGVzKSB7CisJCQlyZXMgPSBnZXRfZGF0YV9idWZmZXIoaG9zdCwgJmhvc3QtPnBpb19ieXRlcywKIAkJCQkJICAgICAgJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWhvc3QtPnBpb19hY3RpdmUgPSBYRkVSX05PTkU7CkBAIC0yNTksMjYgKzI2NSw0NyBAQAogCiAJCQlkYmcoaG9zdCwgZGJnX3BpbywKIAkJCSAgICAicGlvX3JlYWQoKTogbmV3IHRhcmdldDogWyVpXUBbJXBdXG4iLAotCQkJICAgIGhvc3QtPnBpb193b3JkcywgaG9zdC0+cGlvX3B0cik7CisJCQkgICAgaG9zdC0+cGlvX2J5dGVzLCBob3N0LT5waW9fcHRyKTsKIAkJfQogCiAJCWRiZyhob3N0LCBkYmdfcGlvLAogCQkgICAgInBpb19yZWFkKCk6IGZpZm86WyUwMmldIGJ1ZmZlcjpbJTAzaV0gZGNudDpbJTA4WF1cbiIsCi0JCSAgICBmaWZvLCBob3N0LT5waW9fd29yZHMsCisJCSAgICBmaWZvLCBob3N0LT5waW9fYnl0ZXMsCiAJCSAgICByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKSk7CiAKLQkJaWYgKGZpZm8gPiBob3N0LT5waW9fd29yZHMpCi0JCQlmaWZvID0gaG9zdC0+cGlvX3dvcmRzOworCQkvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIHdlIGNhbgorCQkgKiByZWFkIGEgd29yZCBhbmQgZ2V0IDEgdG8gMyBieXRlcy4gIElmIHdlIGluIHRoZQorCQkgKiBtaWRkbGUgb2YgdGhlIGJsb2NrLCB3ZSBoYXZlIHRvIHJlYWQgZnVsbCB3b3JkcywKKwkJICogb3RoZXJ3aXNlIHdlIHdpbGwgd3JpdGUgZ2FyYmFnZSwgc28gcm91bmQgZG93biB0bworCQkgKiBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAotCQl3aGlsZSAoZmlmby0tKQotCQkJKihob3N0LT5waW9fcHRyKyspID0gcmVhZGwoZnJvbV9wdHIpOworCQlmaWZvX3dvcmRzID0gZmlmbyA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOworCQl3aGlsZSAoZmlmb193b3Jkcy0tKQorCQkJKnB0cisrID0gcmVhZGwoZnJvbV9wdHIpOworCQlob3N0LT5waW9fcHRyID0gcHRyOworCisJCWlmIChmaWZvICYgMykgeworCQkJdTMyIG4gPSBmaWZvICYgMzsKKwkJCXUzMiBkYXRhID0gcmVhZGwoZnJvbV9wdHIpOworCQkJdTggKnAgPSAodTggKilob3N0LT5waW9fcHRyOworCisJCQl3aGlsZSAobi0tKSB7CisJCQkJKnArKyA9IGRhdGE7CisJCQkJZGF0YSA+Pj0gODsKKwkJCX0KKwkJfQogCX0KIAotCWlmICghaG9zdC0+cGlvX3dvcmRzKSB7Ci0JCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLCAmaG9zdC0+cGlvX3B0cik7CisJaWYgKCFob3N0LT5waW9fYnl0ZXMpIHsKKwkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsICZob3N0LT5waW9fcHRyKTsKIAkJaWYgKHJlcykgewogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb19yZWFkKCk6IGNvbXBsZXRlIChubyBtb3JlIGJ1ZmZlcnMpLlxuIik7CkBAIC0yOTgsMTIgKzMyNSwxMyBAQAogCXZvaWQgX19pb21lbSAqdG9fcHRyOwogCWludCByZXM7CiAJdTMyIGZpZm87CisJdTMyICpwdHI7CiAKIAl0b19wdHIgPSBob3N0LT5iYXNlICsgaG9zdC0+c2RpZGF0YTsKIAogCXdoaWxlICgoZmlmbyA9IGZpZm9fZnJlZShob3N0KSkpIHsKLQkJaWYgKCFob3N0LT5waW9fd29yZHMpIHsKLQkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLAorCQlpZiAoIWhvc3QtPnBpb19ieXRlcykgeworCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsCiAJCQkJCQkJJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWRiZyhob3N0LCBkYmdfcGlvLApAQCAtMzE1LDE4ICszNDMsMjcgQEAKIAogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb193cml0ZSgpOiBuZXcgc291cmNlOiBbJWldQFslcF1cbiIsCi0JCQkgICAgaG9zdC0+cGlvX3dvcmRzLCBob3N0LT5waW9fcHRyKTsKKwkJCSAgICBob3N0LT5waW9fYnl0ZXMsIGhvc3QtPnBpb19wdHIpOwogCiAJCX0KIAotCQlpZiAoZmlmbyA+IGhvc3QtPnBpb193b3JkcykKLQkJCWZpZm8gPSBob3N0LT5waW9fd29yZHM7CisJCS8qIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBibG9jaywgd2UgaGF2ZSB0bworCQkgKiB3cml0ZSBleGFjdGx5IHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgd2UKKwkJICogaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmxvY2ssIHdlIGhhdmUgdG8gd3JpdGUgZnVsbAorCQkgKiB3b3Jkcywgc28gcm91bmQgZG93biB0byBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAorCQlmaWZvID0gKGZpZm8gKyAzKSA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOwogCQl3aGlsZSAoZmlmby0tKQotCQkJd3JpdGVsKCooaG9zdC0+cGlvX3B0cisrKSwgdG9fcHRyKTsKKwkJCXdyaXRlbCgqcHRyKyssIHRvX3B0cik7CisJCWhvc3QtPnBpb19wdHIgPSBwdHI7CiAJfQogCiAJZW5hYmxlX2ltYXNrKGhvc3QsIFMzQzI0MTBfU0RJSU1TS19UWEZJRk9IQUxGKTsKQEAgLTM0OSw5ICszODYsOSBAQAogCQljbGVhcl9pbWFzayhob3N0KTsKIAkJaWYgKGhvc3QtPnBpb19hY3RpdmUgIT0gWEZFUl9OT05FKSB7CiAJCQlkYmcoaG9zdCwgZGJnX2VyciwgInVuZmluaXNoZWQgJXMgIgotCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb193b3JkczpbJXVdXG4iLAorCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb19ieXRlczpbJXVdXG4iLAogCQkJICAgIChob3N0LT5waW9fYWN0aXZlID09IFhGRVJfUkVBRCkgPyAicmVhZCIgOiAid3JpdGUiLAotCQkJICAgIGhvc3QtPnBpb19jb3VudCwgaG9zdC0+cGlvX3dvcmRzKTsKKwkJCSAgICBob3N0LT5waW9fY291bnQsIGhvc3QtPnBpb19ieXRlcyk7CiAKIAkJCWlmIChob3N0LT5tcnEtPmRhdGEpCiAJCQkJaG9zdC0+bXJxLT5kYXRhLT5lcnJvciA9IC1FSU5WQUw7CkBAIC04MTIsMTEgKzg0OSwxMCBAQAogCQkvKiBXZSBjYW5ub3QgZGVhbCB3aXRoIHVuYWxpZ25lZCBibG9ja3Mgd2l0aCBtb3JlIHRoYW4KIAkJICogb25lIGJsb2NrIGJlaW5nIHRyYW5zZmVyZWQuICovCiAKLQkJaWYgKGRhdGEtPmJsb2NrcyA+IDEpCisJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CisJCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgZG8gbm9uLXdvcmQgc2l6ZWQgYmxvY2sgdHJhbnNmZXJzIChibGtzeiAlZClcbiIsIF9fZnVuY19fLCBkYXRhLT5ibGtzeik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBObyBzdXBwb3J0IHlldCBmb3Igbm9uLXdvcmQgYmxvY2sgdHJhbnNmZXJzLiAqLwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCXdoaWxlIChyZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKSAmCkBAIC04OTYsNyArOTMyLDcgQEAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIAogCWhvc3QtPnBpb19zZ3B0ciA9IDA7Ci0JaG9zdC0+cGlvX3dvcmRzID0gMDsKKwlob3N0LT5waW9fYnl0ZXMgPSAwOwogCWhvc3QtPnBpb19jb3VudCA9IDA7CiAJaG9zdC0+cGlvX2FjdGl2ZSA9IHJ3ID8gWEZFUl9XUklURSA6IFhGRVJfUkVBRDsKIApAQCAtMTAzMywxMCArMTA2OSwzMyBAQAogCQlzM2NtY2lfc2VuZF9yZXF1ZXN0KG1tYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9zZXRfY2xrKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwl1MzIgbWNpX3BzYzsKKworCS8qIFNldCBjbG9jayAqLworCWZvciAobWNpX3BzYyA9IDA7IG1jaV9wc2MgPCAyNTU7IG1jaV9wc2MrKykgeworCQlob3N0LT5yZWFsX3JhdGUgPSBob3N0LT5jbGtfcmF0ZSAvIChob3N0LT5jbGtfZGl2KihtY2lfcHNjKzEpKTsKKworCQlpZiAoaG9zdC0+cmVhbF9yYXRlIDw9IGlvcy0+Y2xvY2spCisJCQlicmVhazsKKwl9CisKKwlpZiAobWNpX3BzYyA+IDI1NSkKKwkJbWNpX3BzYyA9IDI1NTsKKworCWhvc3QtPnByZXNjYWxlciA9IG1jaV9wc2M7CisJd3JpdGVsKGhvc3QtPnByZXNjYWxlciwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJUFJFKTsKKworCS8qIElmIHJlcXVlc3RlZCBjbG9jayBpcyAwLCByZWFsX3JhdGUgd2lsbCBiZSAwLCB0b28gKi8KKwlpZiAoaW9zLT5jbG9jayA9PSAwKQorCQlob3N0LT5yZWFsX3JhdGUgPSAwOworfQorCiBzdGF0aWMgdm9pZCBzM2NtY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXUzMiBtY2lfcHNjLCBtY2lfY29uOworCXUzMiBtY2lfY29uOwogCiAJLyogU2V0IHRoZSBwb3dlciBzdGF0ZSAqLwogCkBAIC0xMDc0LDIzICsxMTMzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogU2V0IGNsb2NrICovCi0JZm9yIChtY2lfcHNjID0gMDsgbWNpX3BzYyA8IDI1NTsgbWNpX3BzYysrKSB7Ci0JCWhvc3QtPnJlYWxfcmF0ZSA9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYqKG1jaV9wc2MrMSkpOwotCi0JCWlmIChob3N0LT5yZWFsX3JhdGUgPD0gaW9zLT5jbG9jaykKLQkJCWJyZWFrOwotCX0KLQotCWlmIChtY2lfcHNjID4gMjU1KQotCQltY2lfcHNjID0gMjU1OwotCi0JaG9zdC0+cHJlc2NhbGVyID0gbWNpX3BzYzsKLQl3cml0ZWwoaG9zdC0+cHJlc2NhbGVyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElQUkUpOwotCi0JLyogSWYgcmVxdWVzdGVkIGNsb2NrIGlzIDAsIHJlYWxfcmF0ZSB3aWxsIGJlIDAsIHRvbyAqLwotCWlmIChpb3MtPmNsb2NrID09IDApCi0JCWhvc3QtPnJlYWxfcmF0ZSA9IDA7CisJczNjbWNpX3NldF9jbGsoaG9zdCwgaW9zKTsKIAogCS8qIFNldCBDTE9DS19FTkFCTEUgKi8KIAlpZiAoaW9zLT5jbG9jaykKQEAgLTExNDgsNiArMTE5MSw2MSBAQAogCSAqIGNoZWNrcy4gQW55IHplcm8gZmllbGRzIHRvIGVuc3VyZSByZWFvbmFibGUgZGVmYXVsdHMgYXJlIHBpY2tlZC4gKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKworc3RhdGljIGludCBzM2NtY2lfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJdW5zaWduZWQgbG9uZyBuZXdjbGs7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhvc3QgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBzM2NtY2lfaG9zdCwgZnJlcV90cmFuc2l0aW9uKTsKKwluZXdjbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKKwltbWMgPSBob3N0LT5tbWM7CisKKwlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAmJiBuZXdjbGsgPiBob3N0LT5jbGtfcmF0ZSkgfHwKKwkgICAgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgbmV3Y2xrIDwgaG9zdC0+Y2xrX3JhdGUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKworCQlob3N0LT5jbGtfcmF0ZSA9IG5ld2NsazsKKworCQlpZiAobW1jLT5pb3MucG93ZXJfbW9kZSAhPSBNTUNfUE9XRVJfT0ZGICYmCisJCSAgICBtbWMtPmlvcy5jbG9jayAhPSAwKQorCQkJczNjbWNpX3NldF9jbGsoaG9zdCwgJm1tYy0+aW9zKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjbWNpX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWhvc3QtPmZyZXFfdHJhbnNpdGlvbi5ub3RpZmllcl9jYWxsID0gczNjbWNpX2NwdWZyZXFfdHJhbnNpdGlvbjsKKworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJCSBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzM2NtY2lfY3B1ZnJlcV9yZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlzMjQ0MCkKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CkBAIC0xMjk4LDEwICsxMzk2LDE2IEBACiAJICAgIChob3N0LT5pczI0NDA/IjI0NDAiOiIiKSwKIAkgICAgaG9zdC0+YmFzZSwgaG9zdC0+aXJxLCBob3N0LT5pcnFfY2QsIGhvc3QtPmRtYSk7CiAKKwlyZXQgPSBzM2NtY2lfY3B1ZnJlcV9yZWdpc3Rlcihob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxXG4iKTsKKwkJZ290byBmcmVlX2RtYWJ1ZjsKKwl9CisKIAlyZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgbW1jIGhvc3QuXG4iKTsKLQkJZ290byBmcmVlX2RtYWJ1ZjsKKwkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKQEAgLTEzMDksNiArMTQxMyw5IEBACiAKIAlyZXR1cm4gMDsKIAorIGZyZWVfY3B1ZnJlcToKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOworCiAgZnJlZV9kbWFidWY6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIApAQCAtMTM0Miw2ICsxNDQ5LDcgQEAKIAlpZiAoaG9zdC0+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CiAKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOwogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiB9CkBAIC0xNDU1LDcgKzE1NjMsNyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIE1NQy9TRCBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4sIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMi1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC1zZGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCmluZGV4IDM3ZDljNjAuLmNhMWJhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaApAQCAtNTEsNyArNTEsNyBAQAogCWludAkJCWRtYV9jb21wbGV0ZTsKIAogCXUzMgkJCXBpb19zZ3B0cjsKLQl1MzIJCQlwaW9fd29yZHM7CisJdTMyCQkJcGlvX2J5dGVzOwogCXUzMgkJCXBpb19jb3VudDsKIAl1MzIJCQkqcGlvX3B0cjsKICNkZWZpbmUgWEZFUl9OT05FIDAKQEAgLTY3LDQgKzY3LDggQEAKIAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOworI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggMTRmMTFmOC4uYTkwZDUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC0xNzIsNiArMTcyLDExIEBACiAJICBtZW1vcnkgY2hpcHMsIGFuZCBhbHNvIHVzZSBpb2N0bCgpIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dAogCSAgdGhlIGRldmljZSwgb3IgdG8gZXJhc2UgcGFydHMgb2YgaXQuCiAKK2NvbmZpZyBIQVZFX01URF9PVFAKKwlib29sCisJaGVscAorCSAgRW5hYmxlIGFjY2VzcyB0byBPVFAgcmVnaW9ucyB1c2luZyBNVERfQ0hBUi4KKwogY29uZmlnIE1URF9CTEtERVZTCiAJdHJpc3RhdGUgIkNvbW1vbiBpbnRlcmZhY2UgdG8gYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJyIKIAlkZXBlbmRzIG9uIEJMT0NLCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCA0NzlkMzJiLi45NDA4MDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiBjb25maWcgTVREX0NGSQogCXRyaXN0YXRlICJEZXRlY3QgZmxhc2ggY2hpcHMgYnkgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBwcm9iZSIKIAlzZWxlY3QgTVREX0dFTl9QUk9CRQorCXNlbGVjdCBNVERfQ0ZJX1VUSUwKIAloZWxwCiAJICBUaGUgQ29tbW9uIEZsYXNoIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uIHdhcyBkZXZlbG9wZWQgYnkgSW50ZWwsCiAJICBBTUQgYW5kIG90aGVyIGZsYXNoIG1hbnVmYWN0dXJlcyB0aGF0IHByb3ZpZGVzIGEgdW5pdmVyc2FsIG1ldGhvZApAQCAtMTU0LDYgKzE1NSw3IEBACiBjb25maWcgTVREX09UUAogCWJvb2wgIlByb3RlY3Rpb24gUmVnaXN0ZXJzIGFrYSBvbmUtdGltZSBwcm9ncmFtbWFibGUgKE9UUCkgYml0cyIKIAlkZXBlbmRzIG9uIE1URF9DRklfQURWX09QVElPTlMKKwlzZWxlY3QgSEFWRV9NVERfT1RQCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcgYW5kIGxvY2tpbmcgc28gY2FsbGVkCkBAIC0xODcsNyArMTg5LDcgQEAKIAkgIFN0cmF0YUZsYXNoIGFuZCBvdGhlciBwYXJ0cy4KIAogY29uZmlnIE1URF9DRklfQU1EU1RECi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFNRC9GdWppdHN1IGZsYXNoIGNoaXBzIgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBTUQvRnVqaXRzdS9TcGFuc2lvbiBmbGFzaCBjaGlwcyIKIAlkZXBlbmRzIG9uIE1URF9HRU5fUFJPQkUKIAlzZWxlY3QgTVREX0NGSV9VVElMCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCA1ZjFiNDcyLi5jOTNhOGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtNDc4LDYgKzQ3OCwyOCBAQAogCQllbHNlCiAJCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAyMDAwMDAwOwogCisJCWlmIChjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9CisJCQkJMTw8KGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lX21heCA9IDUwMDAwICogODsKKworCQlpZiAoY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KQorCQkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZV9tYXggPQorCQkJCTE8PChjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCArCisJCQkJICAgIGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0TWF4KTsKKworCQlpZiAoY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cCAmJgorCQkgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPQorCQkJCTEwMDA8PChjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwICsKKwkJCQkgICAgICAgY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dE1heCk7CisJCWVsc2UKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZV9tYXggPSAyMDAwMDAwICogODsKKwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC03MDMsNiArNzI1LDEwIEBACiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgSFo7CiAKKwkvKiBQcmV2ZW50IHNldHRpbmcgc3RhdGUgRkxfU1lOQ0lORyBmb3IgY2hpcCBpbiBzdXNwZW5kZWQgc3RhdGUuICovCisJaWYgKG1vZGUgPT0gRkxfU1lOQ0lORyAmJiBjaGlwLT5vbGRzdGF0ZSAhPSBGTF9SRUFEWSkKKwkJZ290byBzbGVlcDsKKwogCXN3aXRjaCAoY2hpcC0+c3RhdGUpIHsKIAogCWNhc2UgRkxfU1RBVFVTOgpAQCAtODA4LDggKzgzNCw5IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKICByZXRyeToKLQlpZiAoY2hpcC0+cHJpdiAmJiAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORwotCQkJICAgfHwgbW9kZSA9PSBGTF9PVFBfV1JJVEUgfHwgbW9kZSA9PSBGTF9TSFVURE9XTikpIHsKKwlpZiAoY2hpcC0+cHJpdiAmJgorCSAgICAobW9kZSA9PSBGTF9XUklUSU5HIHx8IG1vZGUgPT0gRkxfRVJBU0lORyB8fCBtb2RlID09IEZMX09UUF9XUklURQorCSAgICB8fCBtb2RlID09IEZMX1NIVVRET1dOKSAmJiBjaGlwLT5zdGF0ZSAhPSBGTF9TWU5DSU5HKSB7CiAJCS8qCiAJCSAqIE9LLiBXZSBoYXZlIHBvc3NpYmlsaXR5IGZvciBjb250ZW50aW9uIG9uIHRoZSB3cml0ZS9lcmFzZQogCQkgKiBvcGVyYXRpb25zIHdoaWNoIGFyZSBnbG9iYWwgdG8gdGhlIHJlYWwgY2hpcCBhbmQgbm90IHBlcgpAQCAtODU5LDYgKzg4NiwxNCBAQAogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlzcGluX2xvY2soJnNoYXJlZC0+bG9jayk7CisKKwkJCS8qIFdlIHNob3VsZCBub3Qgb3duIGNoaXAgaWYgaXQgaXMgYWxyZWFkeQorCQkJICogaW4gRkxfU1lOQ0lORyBzdGF0ZS4gUHV0IGNvbnRlbmRlciBhbmQgcmV0cnkuICovCisJCQlpZiAoY2hpcC0+c3RhdGUgPT0gRkxfU1lOQ0lORykgeworCQkJCXB1dF9jaGlwKG1hcCwgY29udGVuZGVyLCBjb250ZW5kZXItPnN0YXJ0KTsKKwkJCQlzcGluX3VubG9jayhjb250ZW5kZXItPm11dGV4KTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQogCQkJc3Bpbl91bmxvY2soY29udGVuZGVyLT5tdXRleCk7CiAJCX0KIApAQCAtMTAxMiw3ICsxMDQ3LDcgQEAKIAogc3RhdGljIGludCBfX3hpcHJhbSB4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQkJdW5zaWduZWQgbG9uZyBhZHIsIHVuc2lnbmVkIGludCBjaGlwX29wX3RpbWUgKQorCQl1bnNpZ25lZCBsb25nIGFkciwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwpAQCAtMTAyMSw3ICsxMDU2LDcgQEAKIAlmbHN0YXRlX3Qgb2xkc3RhdGUsIG5ld3N0YXRlOwogCiAgICAgICAgCXN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7Ci0JdXNlYyA9IGNoaXBfb3BfdGltZSAqIDg7CisJdXNlYyA9IGNoaXBfb3BfdGltZV9tYXg7CiAJaWYgKHVzZWMgPT0gMCkKIAkJdXNlYyA9IDUwMDAwMDsKIAlkb25lID0gMDsKQEAgLTExMzEsOCArMTE2Niw4IEBACiAjZGVmaW5lIFhJUF9JTlZBTF9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgXAogCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkKIAotI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsIGludmFsX2FkciwgaW52YWxfbGVuLCB1c2VjKSBcCi0JeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWMpCisjZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHVzZWMsIHVzZWNfbWF4KSBcCisJeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWNfbWF4KQogCiAjZWxzZQogCkBAIC0xMTQ0LDcgKzExNzksNyBAQAogc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKIAkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKLQkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSkKKwkJdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZV9tYXgpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CkBAIC0xMTU2LDggKzExOTEsNyBAQAogCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCi0JLyogc2V0IG91ciB0aW1lb3V0IHRvIDggdGltZXMgdGhlIGV4cGVjdGVkIGRlbGF5ICovCi0JdGltZW8gPSBjaGlwX29wX3RpbWUgKiA4OworCXRpbWVvID0gY2hpcF9vcF90aW1lX21heDsKIAlpZiAoIXRpbWVvKQogCQl0aW1lbyA9IDUwMDAwMDsKIAlyZXNldF90aW1lbyA9IHRpbWVvOwpAQCAtMTIxNyw4ICsxMjUxLDggQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpIFwKLQlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5KTsKKyNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXksIHVkZWxheV9tYXgpIFwKKwlJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgdWRlbGF5LCB1ZGVsYXlfbWF4KTsKIAogCiBzdGF0aWMgaW50IGRvX3BvaW50X29uZWNoaXAgKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCBsb2ZmX3QgYWRyLCBzaXplX3QgbGVuKQpAQCAtMTQ1Miw3ICsxNDg2LDggQEAKIAogCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAogCQkJCSAgIGFkciwgbWFwX2Jhbmt3aWR0aChtYXApLAotCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZSk7CisJCQkJICAgY2hpcC0+d29yZF93cml0ZV90aW1lLAorCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKQEAgLTE2MjMsNyArMTY1OCw3IEBACiAKIAljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkdfVE9fQlVGRkVSOwogCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7Ci0JcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCwgMCk7CiAJaWYgKHJldCkgewogCQkvKiBBcmdoLiBOb3QgcmVhZHkgZm9yIHdyaXRlIHRvIGJ1ZmZlciAqLwogCQltYXBfd29yZCBYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKQEAgLTE2NDAsNyArMTY3NSw3IEBACiAKIAkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUgKi8KIAl3b3JkX2dhcCA9ICgtYWRyICYgKG1hcF9iYW5rd2lkdGgobWFwKS0xKSk7Ci0Jd29yZHMgPSAobGVuIC0gd29yZF9nYXAgKyBtYXBfYmFua3dpZHRoKG1hcCkgLSAxKSAvIG1hcF9iYW5rd2lkdGgobWFwKTsKKwl3b3JkcyA9IERJVl9ST1VORF9VUChsZW4gLSB3b3JkX2dhcCwgbWFwX2Jhbmt3aWR0aChtYXApKTsKIAlpZiAoIXdvcmRfZ2FwKSB7CiAJCXdvcmRzLS07CiAJfSBlbHNlIHsKQEAgLTE2OTIsNyArMTcyNyw4IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsCiAJCQkJICAgaW5pdGlhbF9hZHIsIGluaXRpYWxfbGVuLAotCQkJCSAgIGNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZSwKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CkBAIC0xODI3LDcgKzE4NjMsOCBAQAogCiAJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCiAJCQkJICAgYWRyLCBsZW4sCi0JCQkJICAgY2hpcC0+ZXJhc2VfdGltZSk7CisJCQkJICAgY2hpcC0+ZXJhc2VfdGltZSwKKwkJCQkgICBjaGlwLT5lcmFzZV90aW1lX21heCk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpAQCAtMjAwNiw3ICsyMDQzLDcgQEAKIAkgKi8KIAl1ZGVsYXkgPSAoIWV4dHAgfHwgIShleHRwLT5GZWF0dXJlU3VwcG9ydCAmICgxIDw8IDUpKSkgPyAxMDAwMDAwL0haIDogMDsKIAotCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KTsKKwlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSwgdWRlbGF5ICogMTAwKTsKIAlpZiAocmV0KSB7CiAJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGE5NzJjYzYuLjNlNmY1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0xMyw2ICsxMyw4IEBACiAgKiBYSVAgc3VwcG9ydCBob29rcyBieSBWaXRhbHkgV29vbCAoYmFzZWQgb24gY29kZSBmb3IgSW50ZWwgZmxhc2gKICAqIGJ5IE5pY29sYXMgUGl0cmUpCiAgKgorICogMjUvMDkvMjAwOCBDaHJpc3RvcGhlciBNb29yZTogVG9wQm90dG9tIGZpeHVwIGZvciBtYW55IE1hY3Jvbml4IHdpdGggQ0ZJIFYxLjAKKyAqCiAgKiBPY2Nhc2lvbmFsbHkgbWFpbnRhaW5lZCBieSBUaGF5bmUgSGFyYmF1Z2ggdGhhcmJhdWdoIGF0IGxueGkgZG90IGNvbQogICoKICAqIFRoaXMgY29kZSBpcyBHUEwKQEAgLTQzLDYgKzQ1LDcgQEAKIAogI2RlZmluZSBNQU5VRkFDVFVSRVJfQU1ECTB4MDAwMQogI2RlZmluZSBNQU5VRkFDVFVSRVJfQVRNRUwJMHgwMDFGCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9NQUNST05JWAkweDAwQzIKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NTVAkweDAwQkYKICNkZWZpbmUgU1NUNDlMRjAwNEIJICAgICAgICAweDAwNjAKICNkZWZpbmUgU1NUNDlMRjA0MEIJICAgICAgICAweDAwNTAKQEAgLTE0NCwxMiArMTQ3LDQ0IEBACiAKIAlpZiAoKChtYWpvciA8PCA4KSB8IG1pbm9yKSA8IDB4MzEzMSkgewogCQkvKiBDRkkgdmVyc2lvbiAxLjAgPT4gZG9uJ3QgdHJ1c3QgYm9vdGxvYyAqLworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkiJXM6IEpFREVDIFZlbmRvciBJRCBpcyAweCUwMlggRGV2aWNlIElEIGlzIDB4JTAyWFxuIiwKKwkJCW1hcC0+bmFtZSwgY2ZpLT5tZnIsIGNmaS0+aWQpOworCisJCS8qIEFGQUlDUyBhbGwgMjlMVjQwMCB3aXRoIGEgYm90dG9tIGJvb3QgYmxvY2sgaGF2ZSBhIGRldmljZSBJRAorCQkgKiBvZiAweDIyQkEgaW4gMTYtYml0IG1vZGUgYW5kIDB4QkEgaW4gOC1iaXQgbW9kZS4KKwkJICogVGhlc2Ugd2VyZSBiYWRseSBkZXRlY3RlZCBhcyB0aGV5IGhhdmUgdGhlIDB4ODAgYml0IHNldAorCQkgKiBzbyB0cmVhdCB0aGVtIGFzIGEgc3BlY2lhbCBjYXNlLgorCQkgKi8KKwkJaWYgKCgoY2ZpLT5pZCA9PSAweEJBKSB8fCAoY2ZpLT5pZCA9PSAweDIyQkEpKSAmJgorCisJCQkvKiBNYWNyb25peCBhZGRlZCBDRkkgdG8gdGhlaXIgMm5kIGdlbmVyYXRpb24KKwkJCSAqIE1YMjlMVjQwMEMgQi9UIGJ1dCBBRkFJQ1Mgbm8gb3RoZXIgMjlMVjQwMCAoQU1ELAorCQkJICogRnVqaXRzdSwgU3BhbnNpb24sIEVPTiwgRVNJIGFuZCBvbGRlciBNYWNyb25peCkKKwkJCSAqIGhhcyBDRkkuCisJCQkgKgorCQkJICogVGhlcmVmb3JlIGFsc28gY2hlY2sgdGhlIG1hbnVmYWN0dXJlci4KKwkJCSAqIFRoaXMgcmVkdWNlcyB0aGUgcmlzayBvZiBmYWxzZSBkZXRlY3Rpb24gZHVlIHRvCisJCQkgKiB0aGUgOC1iaXQgZGV2aWNlIElELgorCQkJICovCisJCQkoY2ZpLT5tZnIgPT0gTUFOVUZBQ1RVUkVSX01BQ1JPTklYKSkgeworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKKwkJCQkiJXM6IE1hY3Jvbml4IE1YMjlMVjQwMEMgd2l0aCBib3R0b20gYm9vdCBibG9jayIKKwkJCQkiIGRldGVjdGVkXG4iLCBtYXAtPm5hbWUpOworCQkJZXh0cC0+VG9wQm90dG9tID0gMjsJLyogYm90dG9tIGJvb3QgKi8KKwkJfSBlbHNlCiAJCWlmIChjZmktPmlkICYgMHg4MCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEpFREVDIERldmljZSBJRCBpcyAweCUwMlguIEFzc3VtaW5nIGJyb2tlbiBDRkkgdGFibGUuXG4iLCBtYXAtPm5hbWUsIGNmaS0+aWQpOwogCQkJZXh0cC0+VG9wQm90dG9tID0gMzsJLyogdG9wIGJvb3QgKi8KIAkJfSBlbHNlIHsKIAkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CS8qIGJvdHRvbSBib290ICovCiAJCX0KKworCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJIiVzOiBBTUQgQ0ZJIFBSSSBWJWMuJWMgaGFzIG5vIGJvb3QgYmxvY2sgZmllbGQ7IgorCQkJIiBkZWR1Y2VkICVzIGZyb20gRGV2aWNlIElEXG4iLCBtYXAtPm5hbWUsIG1ham9yLCBtaW5vciwKKwkJCWV4dHAtPlRvcEJvdHRvbSA9PSAyID8gImJvdHRvbSIgOiAidG9wIik7CiAJfQogfQogI2VuZGlmCkBAIC0xNzgsMTAgKzIxMywxOCBAQAogCWlmIChhdG1lbF9wcmkuRmVhdHVyZXMgJiAweDAyKQogCQlleHRwLT5FcmFzZVN1c3BlbmQgPSAyOwogCi0JaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQotCQlleHRwLT5Ub3BCb3R0b20gPSAyOwotCWVsc2UKLQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwkvKiBTb21lIGNoaXBzIGdvdCBpdCBiYWNrd2FyZHMuLi4gKi8KKwlpZiAoY2ZpLT5pZCA9PSBBVDQ5QlY2NDE2KSB7CisJCWlmIChhdG1lbF9wcmkuQm90dG9tQm9vdCkKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDM7CisJCWVsc2UKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CisJfSBlbHNlIHsKKwkJaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQorCQkJZXh0cC0+VG9wQm90dG9tID0gMjsKKwkJZWxzZQorCQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwl9CiAKIAkvKiBidXJzdCB3cml0ZSBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KIAljZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCA9IDA7CkBAIC0yNDMsNiArMjg2LDcgQEAKIAl7IENGSV9NRlJfQVRNRUwsIENGSV9JRF9BTlksIGZpeHVwX2NvbnZlcnRfYXRtZWxfcHJpLCBOVUxMIH0sCiAjaWZkZWYgQU1EX0JPT1RMT0NfQlVHCiAJeyBDRklfTUZSX0FNRCwgQ0ZJX0lEX0FOWSwgZml4dXBfYW1kX2Jvb3RibG9jaywgTlVMTCB9LAorCXsgTUFOVUZBQ1RVUkVSX01BQ1JPTklYLCBDRklfSURfQU5ZLCBmaXh1cF9hbWRfYm9vdGJsb2NrLCBOVUxMIH0sCiAjZW5kaWYKIAl7IENGSV9NRlJfQU1ELCAweDAwNTAsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKIAl7IENGSV9NRlJfQU1ELCAweDAwNTMsIGZpeHVwX3VzZV9zZWNzaSwgTlVMTCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKaW5kZXggYzQxOGU5Mi4uZTYzZTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKQEAgLTQ0LDE3ICs0NCwxNCBAQAogCiAjZGVmaW5lIHhpcF9lbmFibGUoYmFzZSwgbWFwLCBjZmkpIFwKIGRvIHsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsJCVwKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOyBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHhpcF9kaXNhYmxlX3FyeShiYXNlLCBtYXAsIGNmaSkgXAogZG8geyBcCiAJeGlwX2Rpc2FibGUoKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7IFwKIH0gd2hpbGUgKDApCiAKICNlbHNlCkBAIC03MCwzMiArNjcsNiBAQAogICAgaW46IGludGVybGVhdmUsdHlwZSxtb2RlCiAgICByZXQ6IHRhYmxlIGluZGV4LCA8MCBmb3IgZXJyb3IKICAqLwotc3RhdGljIGludCBfX3hpcHJhbSBxcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKLQkJCQlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKLXsKLQlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLy8gc2NhbGUgZmFjdG9yCi0JbWFwX3dvcmQgdmFsWzNdOwotCW1hcF93b3JkIHFyeVszXTsKLQotCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7Ci0JcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKLQlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOwotCi0JdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOwotCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKLQl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7Ci0KLQlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQotCQlyZXR1cm4gMDsKLQotCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsgCS8vICJRUlkiIGZvdW5kCi19CiAKIHN0YXRpYyBpbnQgX194aXByYW0gY2ZpX3Byb2JlX2NoaXAoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCiAJCQkJICAgdW5zaWduZWQgbG9uZyAqY2hpcF9tYXAsIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQpAQCAtMTE2LDExICs4Nyw3IEBACiAJfQogCiAJeGlwX2Rpc2FibGUoKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQotCWlmICghcXJ5X3ByZXNlbnQobWFwLGJhc2UsY2ZpKSkgeworCWlmICghY2ZpX3FyeV9tb2RlX29uKGJhc2UsIG1hcCwgY2ZpKSkgewogCQl4aXBfZW5hYmxlKGJhc2UsIG1hcCwgY2ZpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQxLDE0ICsxMDgsMTMgQEAKICAJCXN0YXJ0ID0gaSA8PCBjZmktPmNoaXBzaGlmdDsKIAkJLyogVGhpcyBjaGlwIHNob3VsZCBiZSBpbiByZWFkIG1vZGUgaWYgaXQncyBvbmUKIAkJICAgd2UndmUgYWxyZWFkeSB0b3VjaGVkLiAqLwotCQlpZiAocXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKIAkJCS8qIEVlcC4gVGhpcyBjaGlwIGFsc28gaGFkIHRoZSBRUlkgbWFya2VyLgogCQkJICogSXMgaXQgYW4gYWxpYXMgZm9yIHRoZSBuZXcgb25lPyAqLwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihzdGFydCwgbWFwLCBjZmkpOwogCiAJCQkvKiBJZiB0aGUgUVJZIG1hcmtlciBnb2VzIGF3YXksIGl0J3MgYW4gYWxpYXMgKi8KLQkJCWlmICghcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgeworCQkJaWYgKCFjZmlfcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgewogCQkJCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3VuZCBhbiBhbGlhcyBhdCAweCV4IGZvciB0aGUgY2hpcCBhdCAweCVseFxuIiwKIAkJCQkgICAgICAgbWFwLT5uYW1lLCBiYXNlLCBzdGFydCk7CkBAIC0xNTgsMTAgKzEyNCw5IEBACiAJCQkgKiB1bmZvcnR1bmF0ZS4gU3RpY2sgdGhlIG5ldyBjaGlwIGluIHJlYWQgbW9kZQogCQkJICogdG9vIGFuZCBpZiBpdCdzIHRoZSBzYW1lLCBhc3N1bWUgaXQncyBhbiBhbGlhcy4gKi8KIAkJCS8qIEZJWE1FOiBVc2Ugb3RoZXIgbW9kZXMgdG8gZG8gYSBwcm9wZXIgY2hlY2sgKi8KLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBzdGFydCwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCQkJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAKLQkJCWlmIChxcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpIHsKKwkJCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKSB7CiAJCQkJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvdW5kIGFuIGFsaWFzIGF0IDB4JXggZm9yIHRoZSBjaGlwIGF0IDB4JWx4XG4iLAogCQkJCSAgICAgICBtYXAtPm5hbWUsIGJhc2UsIHN0YXJ0KTsKQEAgLTE3Niw4ICsxNDEsNyBAQAogCWNmaS0+bnVtY2hpcHMrKzsKIAogCS8qIFB1dCBpdCBiYWNrIGludG8gUmVhZCBNb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlZCB4JWQgZGV2aWNlcyBhdCAweCV4IGluICVkLWJpdCBiYW5rXG4iLApAQCAtMjM3LDkgKzIwMSw3IEBACiAJCQkgIGNmaV9yZWFkX3F1ZXJ5KG1hcCwgYmFzZSArIDB4ZiAqIG9mc19mYWN0b3IpOwogCiAJLyogUHV0IGl0IGJhY2sgaW50byBSZWFkIE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQkvKiAuLi4gZXZlbiBpZiBpdCdzIGFuIEludGVsIGNoaXAgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCiAJLyogRG8gYW55IG5lY2Vzc2FyeSBieXRlc3dhcHBpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCmluZGV4IDBlZTQ1NzAuLjM0ZDQwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwpAQCAtMjQsNiArMjQsNjYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCitpbnQgX194aXByYW0gY2ZpX3FyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwlpbnQgb3NmID0gY2ZpLT5pbnRlcmxlYXZlICogY2ZpLT5kZXZpY2VfdHlwZTsJLyogc2NhbGUgZmFjdG9yICovCisJbWFwX3dvcmQgdmFsWzNdOworCW1hcF93b3JkIHFyeVszXTsKKworCXFyeVswXSA9IGNmaV9idWlsZF9jbWQoJ1EnLCBtYXAsIGNmaSk7CisJcXJ5WzFdID0gY2ZpX2J1aWxkX2NtZCgnUicsIG1hcCwgY2ZpKTsKKwlxcnlbMl0gPSBjZmlfYnVpbGRfY21kKCdZJywgbWFwLCBjZmkpOworCisJdmFsWzBdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTApOworCXZhbFsxXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDExKTsKKwl2YWxbMl0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMik7CisKKwlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzBdLCB2YWxbMF0pKQorCQlyZXR1cm4gMDsKKworCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMV0sIHZhbFsxXSkpCisJCXJldHVybiAwOworCisJaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsyXSwgdmFsWzJdKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsgCS8qICJRUlkiIGZvdW5kICovCit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X3ByZXNlbnQpOworCitpbnQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29uKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CisJLyogUVJZIG5vdCBmb3VuZCBwcm9iYWJseSB3ZSBkZWFsIHdpdGggc29tZSBvZGQgQ0ZJIGNoaXBzICovCisJLyogU29tZSByZXZpc2lvbnMgb2Ygc29tZSBvbGQgSW50ZWwgY2hpcHM/ICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpCisJCXJldHVybiAxOworCS8qIFNUIE0yOURXIGNoaXBzICovCisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQorCQlyZXR1cm4gMTsKKwkvKiBRUlkgbm90IGZvdW5kICovCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb24pOworCit2b2lkIF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vZmYodWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCit7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfcXJ5X21vZGVfb2ZmKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqCiBfX3hpcHJhbSBjZmlfcmVhZF9wcmkoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTE2IGFkciwgX191MTYgc2l6ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKQEAgLTQ4LDggKzEwOCw3IEBACiAjZW5kaWYKIAogCS8qIFN3aXRjaCBpdCBpbnRvIFF1ZXJ5IE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQorCWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSk7CiAJLyogUmVhZCBpbiB0aGUgRXh0ZW5kZWQgUXVlcnkgVGFibGUgKi8KIAlmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKIAkJKCh1bnNpZ25lZCBjaGFyICopZXh0cClbaV0gPQpAQCAtNTcsOCArMTE2LDcgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgaXQgcmV0dXJucyB0byByZWFkIG1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4ZjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4ZmYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAogI2lmZGVmIENPTkZJR19NVERfWElQCiAJKHZvaWQpIG1hcF9yZWFkKG1hcCwgYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCmluZGV4IGYwNjE4ODUuLmUyZGM5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJbWF4X2NoaXBzID0gMTsKIAl9CiAKLQltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogKCAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkcgKTsKKwltYXBzaXplID0gc2l6ZW9mKGxvbmcpICogRElWX1JPVU5EX1VQKG1heF9jaGlwcywgQklUU19QRVJfTE9ORyk7CiAJY2hpcF9tYXAgPSBremFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcF9tYXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBDRkkgY2hpcCBtYXBcbiIsIG1hcC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jIGIvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYwppbmRleCA3MWJjMDdmLi41MGEzNDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKQEAgLTcsNiArNyw3IEBACiAgKgogICogbXRkcGFydHM9PG10ZGRlZj5bOzxtdGRkZWZdCiAgKiA8bXRkZGVmPiAgOj0gPG10ZC1pZD46PHBhcnRkZWY+Wyw8cGFydGRlZj5dCisgKiAgICAgICAgICAgICAgd2hlcmUgPG10ZC1pZD4gaXMgdGhlIG5hbWUgZnJvbSB0aGUgImNhdCAvcHJvYy9tdGQiIGNvbW1hbmQKICAqIDxwYXJ0ZGVmPiA6PSA8c2l6ZT5bQG9mZnNldF1bPG5hbWU+XVtyb11bbGtdCiAgKiA8bXRkLWlkPiAgOj0gdW5pcXVlIG5hbWUgdXNlZCBpbiBtYXBwaW5nIGRyaXZlci9kZXZpY2UgKG10ZC0+bmFtZSkKICAqIDxzaXplPiAgICA6PSBzdGFuZGFyZCBsaW51eCBtZW1zaXplIE9SICItIiB0byBkZW5vdGUgYWxsIHJlbWFpbmluZyBzcGFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDljNjEzZjAuLjZmZGUwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTU5LDYgKzU5LDI3IEBACiAJICBTb21ldGltZXMgRGF0YUZsYXNoIGNoaXBzIGFyZSBwYWNrYWdlZCBpbnNpZGUgTU1DLWZvcm1hdAogCSAgY2FyZHM7IGF0IHRoaXMgd3JpdGluZywgdGhlIE1NQyBzdGFjayB3b24ndCBoYW5kbGUgdGhvc2UuCiAKK2NvbmZpZyBNVERfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQorCWJvb2wgIlZlcmlmeSBEYXRhRmxhc2ggcGFnZSB3cml0ZXMiCisJZGVwZW5kcyBvbiBNVERfREFUQUZMQVNICisJaGVscAorCSAgVGhpcyBhZGRzIGFuIGV4dHJhIGNoZWNrIHdoZW4gZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBmbGFzaC4KKwkgIEl0IG1heSBoZWxwIGlmIHlvdSBhcmUgdmVyaWZ5aW5nIGNoaXAgc2V0dXAgKHRpbWluZ3MgZXRjKSBvbgorCSAgeW91ciBib2FyZC4gIFRoZXJlIGlzIGEgcmFyZSBwb3NzaWJpbGl0eSB0aGF0IGV2ZW4gdGhvdWdoIHRoZQorCSAgZGV2aWNlIHRoaW5rcyB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGEgYml0IGNvdWxkIGhhdmUgYmVlbgorCSAgZmxpcHBlZCBhY2NpZGVudGFsbHkgZHVlIHRvIGRldmljZSB3ZWFyIG9yIHNvbWV0aGluZyBlbHNlLgorCitjb25maWcgTVREX0RBVEFGTEFTSF9PVFAKKwlib29sICJEYXRhRmxhc2ggT1RQIHN1cHBvcnQgKFNlY3VyaXR5IFJlZ2lzdGVyKSIKKwlkZXBlbmRzIG9uIE1URF9EQVRBRkxBU0gKKwlzZWxlY3QgSEFWRV9NVERfT1RQCisJaGVscAorCSAgTmV3ZXIgRGF0YUZsYXNoIGNoaXBzIChyZXZpc2lvbnMgQyBhbmQgRCkgc3VwcG9ydCAxMjggYnl0ZXMgb2YKKwkgIG9uZS10aW1lLXByb2dyYW1tYWJsZSAoT1RQKSBkYXRhLiAgVGhlIGZpcnN0IGhhbGYgbWF5IGJlIHdyaXR0ZW4KKwkgIChvbmNlKSB3aXRoIHVwIHRvIDY0IGJ5dGVzIG9mIGRhdGEsIHN1Y2ggYXMgYSBzZXJpYWwgbnVtYmVyIG9yCisJICBvdGhlciBrZXkgcHJvZHVjdCBkYXRhLiAgVGhlIHNlY29uZCBoYWxmIGlzIHByb2dyYW1tZWQgd2l0aCBhCisJICB1bmlxdWUtdG8tZWFjaC1jaGlwIGJpdCBwYXR0ZXJuIGF0IHRoZSBmYWN0b3J5LgorCiBjb25maWcgTVREX00yNVA4MAogCXRyaXN0YXRlICJTdXBwb3J0IG1vc3QgU1BJIEZsYXNoIGNoaXBzIChBVDI2REYsIE0yNVAsIFcyNVgsIC4uLikiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggYjM1YzMzMy4uNzZhNzY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lCU9QQ09ERV9QUAkJMHgwMgkvKiBQYWdlIHByb2dyYW0gKHVwIHRvIDI1NiBieXRlcykgKi8KICNkZWZpbmUJT1BDT0RFX0JFXzRLIAkJMHgyMAkvKiBFcmFzZSA0S2lCIGJsb2NrICovCiAjZGVmaW5lCU9QQ09ERV9CRV8zMksJCTB4NTIJLyogRXJhc2UgMzJLaUIgYmxvY2sgKi8KKyNkZWZpbmUJT1BDT0RFX0JFCQkweGM3CS8qIEVyYXNlIHdob2xlIGZsYXNoIGJsb2NrICovCiAjZGVmaW5lCU9QQ09ERV9TRQkJMHhkOAkvKiBTZWN0b3IgZXJhc2UgKHVzdWFsbHkgNjRLaUIpICovCiAjZGVmaW5lCU9QQ09ERV9SRElECQkweDlmCS8qIFJlYWQgSkVERUMgSUQgKi8KIApAQCAtMTYxLDYgKzE2MiwzMSBAQAogCXJldHVybiAxOwogfQogCisvKgorICogRXJhc2UgdGhlIHdob2xlIGZsYXNoIG1lbW9yeQorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBub24temVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZXJhc2VfYmxvY2soc3RydWN0IG0yNXAgKmZsYXNoKQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogJXMgJWRLaUJcbiIsCisJCQlmbGFzaC0+c3BpLT5kZXYuYnVzX2lkLCBfX2Z1bmNfXywKKwkJCWZsYXNoLT5tdGQuc2l6ZSAvIDEwMjQpOworCisJLyogV2FpdCB1bnRpbCBmaW5pc2hlZCBwcmV2aW91cyB3cml0ZSBjb21tYW5kLiAqLworCWlmICh3YWl0X3RpbGxfcmVhZHkoZmxhc2gpKQorCQlyZXR1cm4gMTsKKworCS8qIFNlbmQgd3JpdGUgZW5hYmxlLCB0aGVuIGVyYXNlIGNvbW1hbmRzLiAqLworCXdyaXRlX2VuYWJsZShmbGFzaCk7CisKKwkvKiBTZXQgdXAgY29tbWFuZCBidWZmZXIuICovCisJZmxhc2gtPmNvbW1hbmRbMF0gPSBPUENPREVfQkU7CisKKwlzcGlfd3JpdGUoZmxhc2gtPnNwaSwgZmxhc2gtPmNvbW1hbmQsIDEpOworCisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBFcmFzZSBvbmUgc2VjdG9yIG9mIGZsYXNoIG1lbW9yeSBhdCBvZmZzZXQgYGBvZmZzZXQnJyB3aGljaCBpcyBhbnkKQEAgLTIyOSwxNSArMjU1LDIxIEBACiAJICovCiAKIAkvKiBub3cgZXJhc2UgdGhvc2Ugc2VjdG9ycyAqLwotCXdoaWxlIChsZW4pIHsKLQkJaWYgKGVyYXNlX3NlY3RvcihmbGFzaCwgYWRkcikpIHsKLQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJaWYgKGxlbiA9PSBmbGFzaC0+bXRkLnNpemUgJiYgZXJhc2VfYmxvY2soZmxhc2gpKSB7CisJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CisJCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQl3aGlsZSAobGVuKSB7CisJCQlpZiAoZXJhc2Vfc2VjdG9yKGZsYXNoLCBhZGRyKSkgeworCQkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CisJCQkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CiAKLQkJYWRkciArPSBtdGQtPmVyYXNlc2l6ZTsKLQkJbGVuIC09IG10ZC0+ZXJhc2VzaXplOworCQkJYWRkciArPSBtdGQtPmVyYXNlc2l6ZTsKKwkJCWxlbiAtPSBtdGQtPmVyYXNlc2l6ZTsKKwkJfQogCX0KIAogCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOwpAQCAtNDM3LDYgKzQ2OSw3IEBACiAJICogdGhlbiBhIHR3byBieXRlIGRldmljZSBpZC4KIAkgKi8KIAl1MzIJCWplZGVjX2lkOworCXUxNiAgICAgICAgICAgICBleHRfaWQ7CiAKIAkvKiBUaGUgc2l6ZSBsaXN0ZWQgaGVyZSBpcyB3aGF0IHdvcmtzIHdpdGggT1BDT0RFX1NFLCB3aGljaCBpc24ndAogCSAqIG5lY2Vzc2FyaWx5IGNhbGxlZCBhICJzZWN0b3IiIGJ5IHRoZSB2ZW5kb3IuCkBAIC00NTYsNzIgKzQ4OSw3NSBAQAogc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvIF9fZGV2aW5pdGRhdGEgbTI1cF9kYXRhIFtdID0gewogCiAJLyogQXRtZWwgLS0gc29tZSBhcmUgKGNvbmZ1c2luZ2x5KSBtYXJrZXRlZCBhcyAiRGF0YUZsYXNoIiAqLwotCXsgImF0MjVmczAxMCIsICAweDFmNjYwMSwgMzIgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAotCXsgImF0MjVmczA0MCIsICAweDFmNjYwNCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgImF0MjVmczAxMCIsICAweDFmNjYwMSwgMCwgMzIgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAorCXsgImF0MjVmczA0MCIsICAweDFmNjYwNCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAogCi0JeyAiYXQyNWRmMDQxYSIsIDB4MWY0NDAxLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNWRmNjQxIiwgIDB4MWY0ODAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZGYwNDFhIiwgMHgxZjQ0MDEsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZGY2NDEiLCAgMHgxZjQ4MDAsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAogCi0JeyAiYXQyNmYwMDQiLCAgIDB4MWYwNDAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNmRmMDgxYSIsIDB4MWY0NTAxLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAotCXsgImF0MjZkZjE2MWEiLCAweDFmNDYwMSwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKLQl7ICJhdDI2ZGYzMjEiLCAgMHgxZjQ3MDEsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmYwMDQiLCAgIDB4MWYwNDAwLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmRmMDgxYSIsIDB4MWY0NTAxLCAwLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAorCXsgImF0MjZkZjE2MWEiLCAweDFmNDYwMSwgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKKwl7ICJhdDI2ZGYzMjEiLCAgMHgxZjQ3MDEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCiAKIAkvKiBTcGFuc2lvbiAtLSBzaW5nbGUgKGxhcmdlKSBzZWN0b3Igc2l6ZSBvbmx5LCBhdCBsZWFzdAogCSAqIGZvciB0aGUgY2hpcHMgbGlzdGVkIGhlcmUgKHdpdGhvdXQgYm9vdCBzZWN0b3JzKS4KIAkgKi8KLQl7ICJzMjVzbDAwNGEiLCAweDAxMDIxMiwgNjQgKiAxMDI0LCA4LCB9LAotCXsgInMyNXNsMDA4YSIsIDB4MDEwMjEzLCA2NCAqIDEwMjQsIDE2LCB9LAotCXsgInMyNXNsMDE2YSIsIDB4MDEwMjE0LCA2NCAqIDEwMjQsIDMyLCB9LAotCXsgInMyNXNsMDMyYSIsIDB4MDEwMjE1LCA2NCAqIDEwMjQsIDY0LCB9LAotCXsgInMyNXNsMDY0YSIsIDB4MDEwMjE2LCA2NCAqIDEwMjQsIDEyOCwgfSwKKwl7ICJzMjVzbDAwNGEiLCAweDAxMDIxMiwgMCwgNjQgKiAxMDI0LCA4LCB9LAorCXsgInMyNXNsMDA4YSIsIDB4MDEwMjEzLCAwLCA2NCAqIDEwMjQsIDE2LCB9LAorCXsgInMyNXNsMDE2YSIsIDB4MDEwMjE0LCAwLCA2NCAqIDEwMjQsIDMyLCB9LAorCXsgInMyNXNsMDMyYSIsIDB4MDEwMjE1LCAwLCA2NCAqIDEwMjQsIDY0LCB9LAorCXsgInMyNXNsMDY0YSIsIDB4MDEwMjE2LCAwLCA2NCAqIDEwMjQsIDEyOCwgfSwKKyAgICAgICAgeyAiczI1c2wxMjgwMCIsIDB4MDEyMDE4LCAweDAzMDAsIDI1NiAqIDEwMjQsIDY0LCB9LAorCXsgInMyNXNsMTI4MDEiLCAweDAxMjAxOCwgMHgwMzAxLCA2NCAqIDEwMjQsIDI1NiwgfSwKIAogCS8qIFNTVCAtLSBsYXJnZSBlcmFzZSBzaXplcyBhcmUgIm92ZXJsYXlzIiwgInNlY3RvcnMiIGFyZSA0SyAqLwotCXsgInNzdDI1dmYwNDBiIiwgMHhiZjI1OGQsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXZmMDgwYiIsIDB4YmYyNThlLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAotCXsgInNzdDI1dmYwMTZiIiwgMHhiZjI1NDEsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV2ZjAzMmIiLCAweGJmMjU0YSwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDQwYiIsIDB4YmYyNThkLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV2ZjA4MGIiLCAweGJmMjU4ZSwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDE2YiIsIDB4YmYyNTQxLCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwMzJiIiwgMHhiZjI1NGEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCiAKIAkvKiBTVCBNaWNyb2VsZWN0cm9uaWNzIC0tIG5ld2VyIHByb2R1Y3Rpb24gbWF5IGhhdmUgZmVhdHVyZSB1cGRhdGVzICovCi0JeyAibTI1cDA1IiwgIDB4MjAyMDEwLCAgMzIgKiAxMDI0LCAyLCB9LAotCXsgIm0yNXAxMCIsICAweDIwMjAxMSwgIDMyICogMTAyNCwgNCwgfSwKLQl7ICJtMjVwMjAiLCAgMHgyMDIwMTIsICA2NCAqIDEwMjQsIDQsIH0sCi0JeyAibTI1cDQwIiwgIDB4MjAyMDEzLCAgNjQgKiAxMDI0LCA4LCB9LAotCXsgIm0yNXA4MCIsICAgICAgICAgMCwgIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAibTI1cDE2IiwgIDB4MjAyMDE1LCAgNjQgKiAxMDI0LCAzMiwgfSwKLQl7ICJtMjVwMzIiLCAgMHgyMDIwMTYsICA2NCAqIDEwMjQsIDY0LCB9LAotCXsgIm0yNXA2NCIsICAweDIwMjAxNywgIDY0ICogMTAyNCwgMTI4LCB9LAotCXsgIm0yNXAxMjgiLCAweDIwMjAxOCwgMjU2ICogMTAyNCwgNjQsIH0sCisJeyAibTI1cDA1IiwgIDB4MjAyMDEwLCAgMCwgMzIgKiAxMDI0LCAyLCB9LAorCXsgIm0yNXAxMCIsICAweDIwMjAxMSwgIDAsIDMyICogMTAyNCwgNCwgfSwKKwl7ICJtMjVwMjAiLCAgMHgyMDIwMTIsICAwLCA2NCAqIDEwMjQsIDQsIH0sCisJeyAibTI1cDQwIiwgIDB4MjAyMDEzLCAgMCwgNjQgKiAxMDI0LCA4LCB9LAorCXsgIm0yNXA4MCIsICAgICAgICAgMCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAibTI1cDE2IiwgIDB4MjAyMDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgfSwKKwl7ICJtMjVwMzIiLCAgMHgyMDIwMTYsICAwLCA2NCAqIDEwMjQsIDY0LCB9LAorCXsgIm0yNXA2NCIsICAweDIwMjAxNywgIDAsIDY0ICogMTAyNCwgMTI4LCB9LAorCXsgIm0yNXAxMjgiLCAweDIwMjAxOCwgMCwgMjU2ICogMTAyNCwgNjQsIH0sCiAKLQl7ICJtNDVwZTgwIiwgMHgyMDQwMTQsICA2NCAqIDEwMjQsIDE2LCB9LAotCXsgIm00NXBlMTYiLCAweDIwNDAxNSwgIDY0ICogMTAyNCwgMzIsIH0sCisJeyAibTQ1cGU4MCIsIDB4MjA0MDE0LCAgMCwgNjQgKiAxMDI0LCAxNiwgfSwKKwl7ICJtNDVwZTE2IiwgMHgyMDQwMTUsICAwLCA2NCAqIDEwMjQsIDMyLCB9LAogCi0JeyAibTI1cGU4MCIsIDB4MjA4MDE0LCAgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtMjVwZTE2IiwgMHgyMDgwMTUsICA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgIm0yNXBlODAiLCAweDIwODAxNCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAibTI1cGUxNiIsIDB4MjA4MDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKIAogCS8qIFdpbmJvbmQgLS0gdzI1eCAiYmxvY2tzIiBhcmUgNjRLLCAic2VjdG9ycyIgYXJlIDRLaUIgKi8KLQl7ICJ3MjV4MTAiLCAweGVmMzAxMSwgNjQgKiAxMDI0LCAyLCBTRUNUXzRLLCB9LAotCXsgIncyNXgyMCIsIDB4ZWYzMDEyLCA2NCAqIDEwMjQsIDQsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDQwIiwgMHhlZjMwMTMsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKLQl7ICJ3MjV4ODAiLCAweGVmMzAxNCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MTYiLCAweGVmMzAxNSwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MzIiLCAweGVmMzAxNiwgNjQgKiAxMDI0LCA2NCwgU0VDVF80SywgfSwKLQl7ICJ3MjV4NjQiLCAweGVmMzAxNywgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCisJeyAidzI1eDEwIiwgMHhlZjMwMTEsIDAsIDY0ICogMTAyNCwgMiwgU0VDVF80SywgfSwKKwl7ICJ3MjV4MjAiLCAweGVmMzAxMiwgMCwgNjQgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAorCXsgIncyNXg0MCIsIDB4ZWYzMDEzLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAidzI1eDgwIiwgMHhlZjMwMTQsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCisJeyAidzI1eDE2IiwgMHhlZjMwMTUsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCisJeyAidzI1eDMyIiwgMHhlZjMwMTYsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCisJeyAidzI1eDY0IiwgMHhlZjMwMTcsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBmbGFzaF9pbmZvICpfX2RldmluaXQgamVkZWNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQJCQl0bXA7CiAJdTgJCQljb2RlID0gT1BDT0RFX1JESUQ7Ci0JdTgJCQlpZFszXTsKKwl1OAkJCWlkWzVdOwogCXUzMgkJCWplZGVjOworCXUxNiAgICAgICAgICAgICAgICAgICAgIGV4dF9qZWRlYzsKIAlzdHJ1Y3QgZmxhc2hfaW5mbwkqaW5mbzsKIAogCS8qIEpFREVDIGFsc28gZGVmaW5lcyBhbiBvcHRpb25hbCAiZXh0ZW5kZWQgZGV2aWNlIGluZm9ybWF0aW9uIgogCSAqIHN0cmluZyBmb3IgYWZ0ZXIgdmVuZG9yLXNwZWNpZmljIGRhdGEsIGFmdGVyIHRoZSB0aHJlZSBieXRlcwogCSAqIHdlIHVzZSBoZXJlLiAgU3VwcG9ydGluZyBzb21lIGNoaXBzIG1pZ2h0IHJlcXVpcmUgdXNpbmcgaXQuCiAJICovCi0JdG1wID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZjb2RlLCAxLCBpZCwgMyk7CisJdG1wID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZjb2RlLCAxLCBpZCwgNSk7CiAJaWYgKHRtcCA8IDApIHsKIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBlcnJvciAlZCByZWFkaW5nIEpFREVDIElEXG4iLAogCQkJc3BpLT5kZXYuYnVzX2lkLCB0bXApOwpAQCAtNTMzLDEwICs1NjksMTQgQEAKIAlqZWRlYyA9IGplZGVjIDw8IDg7CiAJamVkZWMgfD0gaWRbMl07CiAKKwlleHRfamVkZWMgPSBpZFszXSA8PCA4IHwgaWRbNF07CisKIAlmb3IgKHRtcCA9IDAsIGluZm8gPSBtMjVwX2RhdGE7CiAJCQl0bXAgPCBBUlJBWV9TSVpFKG0yNXBfZGF0YSk7CiAJCQl0bXArKywgaW5mbysrKSB7CiAJCWlmIChpbmZvLT5qZWRlY19pZCA9PSBqZWRlYykKKwkJCWlmIChleHRfamVkZWMgIT0gMCAmJiBpbmZvLT5leHRfaWQgIT0gZXh0X2plZGVjKQorCQkJCWNvbnRpbnVlOwogCQkJcmV0dXJuIGluZm87CiAJfQogCWRldl9lcnIoJnNwaS0+ZGV2LCAidW5yZWNvZ25pemVkIEpFREVDIGlkICUwNnhcbiIsIGplZGVjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKaW5kZXggOGJkMGRlYS4uNmRkOWFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKQEAgLTMwLDEyICszMCwxMCBAQAogICogZG9lc24ndCAoeWV0KSB1c2UgdGhlc2UgZm9yIGFueSBraW5kIG9mIGkvbyBvdmVybGFwIG9yIHByZWZldGNoaW5nLgogICoKICAqIFNvbWV0aW1lcyBEYXRhRmxhc2ggaXMgcGFja2FnZWQgaW4gTU1DLWZvcm1hdCBjYXJkcywgYWx0aG91Z2ggdGhlCi0gKiBNTUMgc3RhY2sgY2FuJ3QgdXNlIFNQSSAoeWV0KSwgb3IgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTUMgYW5kIERhdGFGbGFzaAorICogTU1DIHN0YWNrIGNhbid0ICh5ZXQ/KSBkaXN0aW5ndWlzaCBiZXR3ZWVuIE1NQyBhbmQgRGF0YUZsYXNoCiAgKiBwcm90b2NvbHMgZHVyaW5nIGVudW1lcmF0aW9uLgogICovCiAKLSNkZWZpbmUgQ09ORklHX0RBVEFGTEFTSF9XUklURV9WRVJJRlkKLQogLyogcmVhZHMgY2FuIGJ5cGFzcyB0aGUgYnVmZmVycyAqLwogI2RlZmluZSBPUF9SRUFEX0NPTlRJTlVPVVMJMHhFOAogI2RlZmluZSBPUF9SRUFEX1BBR0UJCTB4RDIKQEAgLTgwLDcgKzc4LDggQEAKICAqLwogI2RlZmluZSBPUF9SRUFEX0lECQkweDlGCiAjZGVmaW5lIE9QX1JFQURfU0VDVVJJVFkJMHg3NwotI2RlZmluZSBPUF9XUklURV9TRUNVUklUWQkweDlBCS8qIE9UUCBiaXRzICovCisjZGVmaW5lIE9QX1dSSVRFX1NFQ1VSSVRZX1JFVkMJMHg5QQorI2RlZmluZSBPUF9XUklURV9TRUNVUklUWQkweDlCCS8qIHJldmlzaW9uIEQgKi8KIAogCiBzdHJ1Y3QgZGF0YWZsYXNoIHsKQEAgLTQwMiw3ICs0MDEsNyBAQAogCQkodm9pZCkgZGF0YWZsYXNoX3dhaXRyZWFkeShwcml2LT5zcGkpOwogCiAKLSNpZmRlZglDT05GSUdfREFUQUZMQVNIX1dSSVRFX1ZFUklGWQorI2lmZGVmIENPTkZJR19NVERfREFUQUZMQVNIX1ZFUklGWV9XUklURQogCiAJCS8qICgzKSBDb21wYXJlIHRvIEJ1ZmZlcjEgKi8KIAkJYWRkciA9IHBhZ2VhZGRyIDw8IHByaXYtPnBhZ2Vfb2Zmc2V0OwpAQCAtNDMxLDcgKzQzMCw3IEBACiAJCX0gZWxzZQogCQkJc3RhdHVzID0gMDsKIAotI2VuZGlmCS8qIENPTkZJR19EQVRBRkxBU0hfV1JJVEVfVkVSSUZZICovCisjZW5kaWYJLyogQ09ORklHX01URF9EQVRBRkxBU0hfVkVSSUZZX1dSSVRFICovCiAKIAkJcmVtYWluaW5nID0gcmVtYWluaW5nIC0gd3JpdGVsZW47CiAJCXBhZ2VhZGRyKys7CkBAIC00NTEsMTYgKzQ1MCwxOTIgQEAKIAogLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLwogCisjaWZkZWYgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQCisKK3N0YXRpYyBpbnQgZGF0YWZsYXNoX2dldF9vdHBfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJc3RydWN0IG90cF9pbmZvICppbmZvLCBzaXplX3QgbGVuKQoreworCS8qIFJlcG9ydCBib3RoIGJsb2NrcyBhcyBpZGVudGljYWw6ICBieXRlcyAwLi42NCwgbG9ja2VkLgorCSAqIFVubGVzcyB0aGUgdXNlciBibG9jayBjaGFuZ2VkIGZyb20gYWxsLW9uZXMsIHdlIGNhbid0CisJICogdGVsbCB3aGV0aGVyIGl0J3Mgc3RpbGwgd3JpdGFibGU7IHNvIHdlIGFzc3VtZSBpdCBpc24ndC4KKwkgKi8KKwlpbmZvLT5zdGFydCA9IDA7CisJaW5mby0+bGVuZ3RoID0gNjQ7CisJaW5mby0+bG9ja2VkID0gMTsKKwlyZXR1cm4gc2l6ZW9mKCppbmZvKTsKK30KKworc3RhdGljIHNzaXplX3Qgb3RwX3JlYWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgYmFzZSwKKwkJdWludDhfdCAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZQltOworCXNpemVfdAkJCWw7CisJdWludDhfdAkJCSpzY3JhdGNoOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJdDsKKwlpbnQJCQlzdGF0dXM7CisKKwlpZiAob2ZmID4gNjQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChvZmYgKyBsZW4pID4gNjQpCisJCWxlbiA9IDY0IC0gb2ZmOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIGxlbjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbCA9IDQgKyBiYXNlICsgb2ZmICsgbGVuOworCXNjcmF0Y2ggPSBremFsbG9jKGwsIEdGUF9LRVJORUwpOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBPVVQ6IE9QX1JFQURfU0VDVVJJVFksIDMgZG9uJ3QtY2FyZSBieXRlcywgemVyb2VzCisJICogSU46ICBpZ25vcmUgNCBieXRlcywgZGF0YSBieXRlcyAwLi5OIChtYXggMTI3KQorCSAqLworCXNjcmF0Y2hbMF0gPSBPUF9SRUFEX1NFQ1VSSVRZOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7CisJdC50eF9idWYgPSBzY3JhdGNoOworCXQucnhfYnVmID0gc2NyYXRjaDsKKwl0LmxlbiA9IGw7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCWRhdGFmbGFzaF93YWl0cmVhZHkoc3BpKTsKKworCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm0pOworCWlmIChzdGF0dXMgPj0gMCkgeworCQltZW1jcHkoYnVmLCBzY3JhdGNoICsgNCArIGJhc2UgKyBvZmYsIGxlbik7CisJCXN0YXR1cyA9IGxlbjsKKwl9CisKKwlrZnJlZShzY3JhdGNoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRhdGFmbGFzaF9yZWFkX2ZhY3Rfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQlsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiA2NCBieXRlcywgZnJvbSAwLi42MyAuLi4gc3RhcnQgYXQgNjQgb24tY2hpcCAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCXN0YXR1cyA9IG90cF9yZWFkKHByaXYtPnNwaSwgNjQsIGJ1ZiwgZnJvbSwgbGVuKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJKnJldGxlbiA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXRhZmxhc2hfcmVhZF91c2VyX290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJaW50CQkJc3RhdHVzOworCisJLyogNjQgYnl0ZXMsIGZyb20gMC4uNjMgLi4uIHN0YXJ0IGF0IDAgb24tY2hpcCAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCXN0YXR1cyA9IG90cF9yZWFkKHByaXYtPnNwaSwgMCwgYnVmLCBmcm9tLCBsZW4pOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwkqcmV0bGVuID0gc3RhdHVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFmbGFzaF93cml0ZV91c2VyX290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKKwljb25zdCBzaXplX3QJCWwgPSA0ICsgNjQ7CisJdWludDhfdAkJCSpzY3JhdGNoOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJdDsKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKGxlbiA+IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFN0cmljdGx5IHNwZWFraW5nLCB3ZSAqY291bGQqIHRydW5jYXRlIHRoZSB3cml0ZSAuLi4gYnV0CisJICogbGV0J3Mgbm90IGRvIHRoYXQgZm9yIHRoZSBvbmx5IHdyaXRlIHRoYXQncyBldmVyIHBvc3NpYmxlLgorCSAqLworCWlmICgoZnJvbSArIGxlbikgPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBPVVQ6IE9QX1dSSVRFX1NFQ1VSSVRZLCAzIHplcm9lcywgNjQgZGF0YS1vci16ZXJvIGJ5dGVzCisJICogSU46ICBpZ25vcmUgYWxsCisJICovCisJc2NyYXRjaCA9IGt6YWxsb2MobCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY3JhdGNoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzY3JhdGNoWzBdID0gT1BfV1JJVEVfU0VDVVJJVFk7CisJbWVtY3B5KHNjcmF0Y2ggKyA0ICsgZnJvbSwgYnVmLCBsZW4pOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKKwl0LnR4X2J1ZiA9IHNjcmF0Y2g7CisJdC5sZW4gPSBsOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisKKwkvKiBXcml0ZSB0aGUgT1RQIGJpdHMsIGlmIHRoZXkndmUgbm90IHlldCBiZWVuIHdyaXR0ZW4uCisJICogVGhpcyBtb2RpZmllcyBTUkFNIGJ1ZmZlcjEuCisJICovCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisJZGF0YWZsYXNoX3dhaXRyZWFkeShwcml2LT5zcGkpOworCXN0YXR1cyA9IHNwaV9zeW5jKHByaXYtPnNwaSwgJm0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlrZnJlZShzY3JhdGNoKTsKKworCWlmIChzdGF0dXMgPj0gMCkgeworCQlzdGF0dXMgPSAwOworCQkqcmV0bGVuID0gbGVuOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY2hhciAqb3RwX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqZGV2aWNlLCBjaGFyIHJldmlzaW9uKQoreworCWRldmljZS0+Z2V0X2ZhY3RfcHJvdF9pbmZvID0gZGF0YWZsYXNoX2dldF9vdHBfaW5mbzsKKwlkZXZpY2UtPnJlYWRfZmFjdF9wcm90X3JlZyA9IGRhdGFmbGFzaF9yZWFkX2ZhY3Rfb3RwOworCWRldmljZS0+Z2V0X3VzZXJfcHJvdF9pbmZvID0gZGF0YWZsYXNoX2dldF9vdHBfaW5mbzsKKwlkZXZpY2UtPnJlYWRfdXNlcl9wcm90X3JlZyA9IGRhdGFmbGFzaF9yZWFkX3VzZXJfb3RwOworCisJLyogcmV2IGMgcGFydHMgKGF0NDVkYjMyMWMgYW5kIGF0NDVkYjEyODEgb25seSEpIHVzZSBhCisJICogZGlmZmVyZW50IHdyaXRlIHByb2NlZHVyZTsgbm90ICh5ZXQ/KSBpbXBsZW1lbnRlZC4KKwkgKi8KKwlpZiAocmV2aXNpb24gPiAnYycpCisJCWRldmljZS0+d3JpdGVfdXNlcl9wcm90X3JlZyA9IGRhdGFmbGFzaF93cml0ZV91c2VyX290cDsKKworCXJldHVybiAiLCBPVFAiOworfQorCisjZWxzZQorCitzdGF0aWMgY2hhciAqb3RwX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqZGV2aWNlLCBjaGFyIHJldmlzaW9uKQoreworCXJldHVybiAiIChPVFApIjsKK30KKworI2VuZGlmCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKwogLyoKICAqIFJlZ2lzdGVyIERhdGFGbGFzaCBkZXZpY2Ugd2l0aCBNVEQgc3Vic3lzdGVtLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotYWRkX2RhdGFmbGFzaChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjaGFyICpuYW1lLAotCQlpbnQgbnJfcGFnZXMsIGludCBwYWdlc2l6ZSwgaW50IHBhZ2VvZmZzZXQpCithZGRfZGF0YWZsYXNoX290cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjaGFyICpuYW1lLAorCQlpbnQgbnJfcGFnZXMsIGludCBwYWdlc2l6ZSwgaW50IHBhZ2VvZmZzZXQsIGNoYXIgcmV2aXNpb24pCiB7CiAJc3RydWN0IGRhdGFmbGFzaAkJKnByaXY7CiAJc3RydWN0IG10ZF9pbmZvCQkJKmRldmljZTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWNoYXIJCQkJKm90cF90YWcgPSAiIjsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KQpAQCAtNDg5LDggKzY2NCwxMiBAQAogCWRldmljZS0+d3JpdGUgPSBkYXRhZmxhc2hfd3JpdGU7CiAJZGV2aWNlLT5wcml2ID0gcHJpdjsKIAotCWRldl9pbmZvKCZzcGktPmRldiwgIiVzICglZCBLQnl0ZXMpIHBhZ2VzaXplICVkIGJ5dGVzXG4iLAotCQkJbmFtZSwgRElWX1JPVU5EX1VQKGRldmljZS0+c2l6ZSwgMTAyNCksIHBhZ2VzaXplKTsKKwlpZiAocmV2aXNpb24gPj0gJ2MnKQorCQlvdHBfdGFnID0gb3RwX3NldHVwKGRldmljZSwgcmV2aXNpb24pOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJXMgKCVkIEtCeXRlcykgcGFnZXNpemUgJWQgYnl0ZXMlc1xuIiwKKwkJCW5hbWUsIERJVl9ST1VORF9VUChkZXZpY2UtPnNpemUsIDEwMjQpLAorCQkJcGFnZXNpemUsIG90cF90YWcpOwogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHByaXYpOwogCiAJaWYgKG10ZF9oYXNfcGFydGl0aW9ucygpKSB7CkBAIC01MTksNiArNjk4LDE0IEBACiAJcmV0dXJuIGFkZF9tdGRfZGV2aWNlKGRldmljZSkgPT0gMSA/IC1FTk9ERVYgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX2RldmluaXQKK2FkZF9kYXRhZmxhc2goc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY2hhciAqbmFtZSwKKwkJaW50IG5yX3BhZ2VzLCBpbnQgcGFnZXNpemUsIGludCBwYWdlb2Zmc2V0KQoreworCXJldHVybiBhZGRfZGF0YWZsYXNoX290cChzcGksIG5hbWUsIG5yX3BhZ2VzLCBwYWdlc2l6ZSwKKwkJCXBhZ2VvZmZzZXQsIDApOworfQorCiBzdHJ1Y3QgZmxhc2hfaW5mbyB7CiAJY2hhcgkJKm5hbWU7CiAKQEAgLTY2NCwxMyArODUxLDE2IEBACiAJICogVHJ5IHRvIGRldGVjdCBkYXRhZmxhc2ggYnkgSkVERUMgSUQuCiAJICogSWYgaXQgc3VjY2VlZHMgd2Uga25vdyB3ZSBoYXZlIGVpdGhlciBhIEMgb3IgRCBwYXJ0LgogCSAqIEQgd2lsbCBzdXBwb3J0IHBvd2VyIG9mIDIgcGFnZXNpemUgb3B0aW9uLgorCSAqIEJvdGggc3VwcG9ydCB0aGUgc2VjdXJpdHkgcmVnaXN0ZXIsIHRob3VnaCB3aXRoIGRpZmZlcmVudAorCSAqIHdyaXRlIHByb2NlZHVyZXMuCiAJICovCiAJaW5mbyA9IGplZGVjX3Byb2JlKHNwaSk7CiAJaWYgKElTX0VSUihpbmZvKSkKIAkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CiAJaWYgKGluZm8gIT0gTlVMTCkKLQkJcmV0dXJuIGFkZF9kYXRhZmxhc2goc3BpLCBpbmZvLT5uYW1lLCBpbmZvLT5ucl9wYWdlcywKLQkJCQkgaW5mby0+cGFnZXNpemUsIGluZm8tPnBhZ2VvZmZzZXQpOworCQlyZXR1cm4gYWRkX2RhdGFmbGFzaF9vdHAoc3BpLCBpbmZvLT5uYW1lLCBpbmZvLT5ucl9wYWdlcywKKwkJCQlpbmZvLT5wYWdlc2l6ZSwgaW5mby0+cGFnZW9mZnNldCwKKwkJCQkoaW5mby0+ZmxhZ3MgJiBTVVBfUE9XMlBTKSA/ICdkJyA6ICdjJyk7CiAKIAkvKgogCSAqIE9sZGVyIGNoaXBzIHN1cHBvcnQgb25seSBsZWdhY3kgY29tbWFuZHMsIGlkZW50aWZpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKaW5kZXggYzRmOWQzMy4uNTBjZTEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKQEAgLTM4OCw2ICszODgsMTAgQEAKIAkJaWYgKHRoaXNFVU4gPT0gdGFyZ2V0RVVOKQogCQkJYnJlYWs7CiAKKwkJLyogVW5saW5rIHRoZSBsYXN0IGJsb2NrIGZyb20gdGhlIGNoYWluLiAqLworCQlpbmZ0bC0+UFV0YWJsZVtwcmV2RVVOXSA9IEJMT0NLX05JTDsKKworCQkvKiBOb3cgdHJ5IHRvIGVyYXNlIGl0LiAqLwogCQlpZiAoSU5GVExfZm9ybWF0YmxvY2soaW5mdGwsIHRoaXNFVU4pIDwgMCkgewogCQkJLyoKIAkJCSAqIENvdWxkIG5vdCBlcmFzZSA6IG1hcmsgYmxvY2sgYXMgcmVzZXJ2ZWQuCkBAIC0zOTYsNyArNDAwLDYgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIENvcnJlY3RseSBlcmFzZWQgOiBtYXJrIGl0IGFzIGZyZWUgKi8KIAkJCWluZnRsLT5QVXRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfRlJFRTsKLQkJCWluZnRsLT5QVXRhYmxlW3ByZXZFVU5dID0gQkxPQ0tfTklMOwogCQkJaW5mdGwtPm51bWZyZWVFVU5zKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggZGY4ZTAwYi4uNWVhMTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtMzMyLDMwICszMzIsNiBAQAogCSAgTWFwcGluZyBmb3IgdGhlIEZsYWdhIGRpZ2l0YWwgbW9kdWxlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIGlnbm9yZQogCSAgdGhpcyBzZXR0aW5nLgogCi1jb25maWcgTVREX1dBTE5VVAotCXRyaXN0YXRlICJGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIElCTSA0MDVHUCBXYWxudXQiCi0JZGVwZW5kcyBvbiBNVERfSkVERUNQUk9CRSAmJiBXQUxOVVQgJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSUJNIDQwNUdQCi0JICBXYWxudXQgYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UgdG8KLQkgIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0KLWNvbmZpZyBNVERfRUJPTlkKLQl0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlcyBtYXBwZWQgb24gSUJNIDQ0MEdQIEVib255IgotCWRlcGVuZHMgb24gTVREX0pFREVDUFJPQkUgJiYgRUJPTlkgJiYgIVBQQ19NRVJHRQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSUJNIDQ0MEdQCi0JICBFYm9ueSBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZSB0bwotCSAgdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KLQotY29uZmlnIE1URF9PQ09URUEKLQl0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlcyBtYXBwZWQgb24gSUJNIDQ0MEdYIE9jb3RlYSIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgT0NPVEVBICYmICFQUENfTUVSR0UKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTSA0NDBHWAotCSAgT2NvdGVhIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIHRvCi0JICB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCiBjb25maWcgTVREX1JFRFdPT0QKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZXMgbWFwcGVkIG9uIElCTSBSZWR3b29kIgogCWRlcGVuZHMgb24gTVREX0NGSSAmJiAoIFJFRFdPT0RfNCB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82ICkKQEAgLTQ1OCwxMyArNDM0LDYgQEAKIAkgIFBob3RvTWF4IERpZ2l0YWwgUGljdHVyZSBGcmFtZS4KIAkgIElmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UsIHNheSAnWScuCiAKLWNvbmZpZyBNVERfTk9SX1RPVE8KLQl0cmlzdGF0ZSAiTk9SIEZsYXNoIGRldmljZSBvbiBUT1RPIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIE9NQVBfVE9UTwotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBhY2Nlc3MgdG8gdGhlIE5PUiBmbGFzaCBvbiB0aGUgVGV4YXMgSW5zdHJ1bWVudHMKLQkgIFRPVE8gYm9hcmQuCi0KIGNvbmZpZyBNVERfSDcyMFgKIAl0cmlzdGF0ZSAiSHluaXggZXZhbHVhdGlvbiBib2FyZCBtYXBwaW5ncyIKIAlkZXBlbmRzIG9uIE1URF9DRkkgJiYgKCBBUkNIX0g3MjAxIHx8IEFSQ0hfSDcyMDIgKQpAQCAtNTIyLDcgKzQ5MSw3IEBACiAKIGNvbmZpZyBNVERfVUNMSU5VWAogCXRyaXN0YXRlICJHZW5lcmljIHVDbGludXggUkFNL1JPTSBmaWxlc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNVERfUEFSVElUSU9OUyAmJiAhTU1VCisJZGVwZW5kcyBvbiBNVERfUEFSVElUSU9OUyAmJiBNVERfUkFNICYmICFNTVUKIAloZWxwCiAJICBNYXAgZHJpdmVyIHRvIHN1cHBvcnQgaW1hZ2UgYmFzZWQgZmlsZXN5c3RlbXMgZm9yIHVDbGludXguCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDZjZGE2ZGYuLjZkOWJhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTAsMTIgKzUwLDggQEAKIG9iai0kKENPTkZJR19NVERfVUNMSU5VWCkJKz0gdWNsaW51eC5vCiBvYmotJChDT05GSUdfTVREX05FVHRlbCkJKz0gbmV0dGVsLm8KIG9iai0kKENPTkZJR19NVERfU0NCMl9GTEFTSCkJKz0gc2NiMl9mbGFzaC5vCi1vYmotJChDT05GSUdfTVREX0VCT05ZKQkJKz0gZWJvbnkubwotb2JqLSQoQ09ORklHX01URF9PQ09URUEpCSs9IG9jb3RlYS5vCi1vYmotJChDT05GSUdfTVREX1dBTE5VVCkgICAgICAgICs9IHdhbG51dC5vCiBvYmotJChDT05GSUdfTVREX0g3MjBYKQkJKz0gaDcyMHgtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TQkM4MjQwKQkrPSBzYmM4MjQwLm8KLW9iai0kKENPTkZJR19NVERfTk9SX1RPVE8pCSs9IG9tYXAtdG90by1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0lYUDRYWCkJKz0gaXhwNHh4Lm8KIG9iai0kKENPTkZJR19NVERfSVhQMjAwMCkJKz0gaXhwMjAwMC5vCiBvYmotJChDT05GSUdfTVREX1dSU0JDODI2MCkJKz0gd3Jfc2JjODJ4eF9mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMgYi9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MmI3YzcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBFYm9ueSB1c2VyIGZsYXNoCi0gKgotICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9lYm9ueS5oPgotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBlYm9ueV9zbWFsbF9tYXAgPSB7Ci0JLm5hbWUgPQkJIkVib255IHNtYWxsIGZsYXNoIiwKLQkuc2l6ZSA9CQlFQk9OWV9TTUFMTF9GTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBlYm9ueV9sYXJnZV9tYXAgPSB7Ci0JLm5hbWUgPQkJIkVib255IGxhcmdlIGZsYXNoIiwKLQkuc2l6ZSA9CQlFQk9OWV9MQVJHRV9GTEFTSF9TSVpFLAotCS5iYW5rd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVib255X3NtYWxsX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAiT3BlbkJJT1MiLAotCQkub2Zmc2V0ID0gMHgwLAotCQkuc2l6ZSA9ICAgMHg4MDAwMCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWJvbnlfbGFyZ2VfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJmcyIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9ICAgMHgzODAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lID0gICAiZmlybXdhcmUiLAotCQkub2Zmc2V0ID0gMHgzODAwMDAsCi0JCS5zaXplID0gICAweDgwMDAwLAotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF9lYm9ueSh2b2lkKQotewotCXU4IGZwZ2EwX3JlZzsKLQl1OCBfX2lvbWVtICpmcGdhMF9hZHI7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNtYWxsX2ZsYXNoX2Jhc2UsIGxhcmdlX2ZsYXNoX2Jhc2U7Ci0KLQlmcGdhMF9hZHIgPSBpb3JlbWFwNjQoRUJPTllfRlBHQV9BRERSLCAxNik7Ci0JaWYgKCFmcGdhMF9hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYTBfcmVnID0gcmVhZGIoZnBnYTBfYWRyKTsKLQlpb3VubWFwKGZwZ2EwX2Fkcik7Ci0KLQlpZiAoRUJPTllfQk9PVF9TTUFMTF9GTEFTSChmcGdhMF9yZWcpICYmCi0JCQkhRUJPTllfRkxBU0hfU0VMKGZwZ2EwX3JlZykpCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9ISUdIMjsKLQllbHNlIGlmIChFQk9OWV9CT09UX1NNQUxMX0ZMQVNIKGZwZ2EwX3JlZykgJiYKLQkJCUVCT05ZX0ZMQVNIX1NFTChmcGdhMF9yZWcpKQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfSElHSDE7Ci0JZWxzZSBpZiAoIUVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJIUVCT05ZX0ZMQVNIX1NFTChmcGdhMF9yZWcpKQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfTE9XMjsKLQllbHNlCi0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBFQk9OWV9TTUFMTF9GTEFTSF9MT1cxOwotCi0JaWYgKEVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJIUVCT05ZX09OQlJEX0ZMQVNIX0VOKGZwZ2EwX3JlZykpCi0JCWxhcmdlX2ZsYXNoX2Jhc2UgPSBFQk9OWV9MQVJHRV9GTEFTSF9MT1c7Ci0JZWxzZQotCQlsYXJnZV9mbGFzaF9iYXNlID0gRUJPTllfTEFSR0VfRkxBU0hfSElHSDsKLQotCWVib255X3NtYWxsX21hcC5waHlzID0gc21hbGxfZmxhc2hfYmFzZTsKLQllYm9ueV9zbWFsbF9tYXAudmlydCA9IGlvcmVtYXA2NChzbWFsbF9mbGFzaF9iYXNlLAotCQkJCQkgZWJvbnlfc21hbGxfbWFwLnNpemUpOwotCi0JaWYgKCFlYm9ueV9zbWFsbF9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZlYm9ueV9zbWFsbF9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmVib255X3NtYWxsX21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIGVib255X3NtYWxsX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUoZWJvbnlfc21hbGxfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQllYm9ueV9sYXJnZV9tYXAucGh5cyA9IGxhcmdlX2ZsYXNoX2Jhc2U7Ci0JZWJvbnlfbGFyZ2VfbWFwLnZpcnQgPSBpb3JlbWFwNjQobGFyZ2VfZmxhc2hfYmFzZSwKLQkJCQkJIGVib255X2xhcmdlX21hcC5zaXplKTsKLQotCWlmICghZWJvbnlfbGFyZ2VfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJmVib255X2xhcmdlX21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmZWJvbnlfbGFyZ2VfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgZWJvbnlfbGFyZ2VfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShlYm9ueV9sYXJnZV9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwotCQlpb3VubWFwKGVib255X2xhcmdlX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfZWJvbnkodm9pZCkKLXsKLQlpZiAoZmxhc2gpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoKTsKLQkJbWFwX2Rlc3Ryb3koZmxhc2gpOwotCX0KLQotCWlmIChlYm9ueV9zbWFsbF9tYXAudmlydCkgewotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJZWJvbnlfc21hbGxfbWFwLnZpcnQgPSBOVUxMOwotCX0KLQotCWlmIChlYm9ueV9sYXJnZV9tYXAudmlydCkgewotCQlpb3VubWFwKGVib255X2xhcmdlX21hcC52aXJ0KTsKLQkJZWJvbnlfbGFyZ2VfbWFwLnZpcnQgPSBOVUxMOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF9lYm9ueSk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX2Vib255KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgSUJNIDQ0MEdQIEVib255IGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MjJlYWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogTWFwcGluZyBmb3IgT2NvdGVhIHVzZXIgZmxhc2gKLSAqCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L29jb3RlYS5oPgotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBvY290ZWFfc21hbGxfbWFwID0gewotCS5uYW1lID0JCSJPY290ZWEgc21hbGwgZmxhc2giLAotCS5zaXplID0JCU9DT1RFQV9TTUFMTF9GTEFTSF9TSVpFLAotCS5idXN3aWR0aCA9CTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIG9jb3RlYV9sYXJnZV9tYXAgPSB7Ci0JLm5hbWUgPQkJIk9jb3RlYSBsYXJnZSBmbGFzaCIsCi0JLnNpemUgPQkJT0NPVEVBX0xBUkdFX0ZMQVNIX1NJWkUsCi0JLmJ1c3dpZHRoID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvY290ZWFfc21hbGxfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJwaWJzIiwKLQkJLm9mZnNldCA9IDB4MCwKLQkJLnNpemUgPSAgIDB4MTAwMDAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvY290ZWFfbGFyZ2VfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJmcyIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9ICAgMHgzMDAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lID0gICAiZmlybXdhcmUiLAotCQkub2Zmc2V0ID0gMHgzMDAwMDAsCi0JCS5zaXplID0gICAweDEwMDAwMCwKLQl9Ci19OwotCi1pbnQgX19pbml0IGluaXRfb2NvdGVhKHZvaWQpCi17Ci0JdTggZnBnYTBfcmVnOwotCXU4ICpmcGdhMF9hZHI7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNtYWxsX2ZsYXNoX2Jhc2UsIGxhcmdlX2ZsYXNoX2Jhc2U7Ci0KLQlmcGdhMF9hZHIgPSBpb3JlbWFwNjQoT0NPVEVBX0ZQR0FfQUREUiwgMTYpOwotCWlmICghZnBnYTBfYWRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwZ2EwX3JlZyA9IHJlYWRiKCh1bnNpZ25lZCBsb25nKWZwZ2EwX2Fkcik7Ci0JaW91bm1hcChmcGdhMF9hZHIpOwotCi0JaWYgKE9DT1RFQV9CT09UX0xBUkdFX0ZMQVNIKGZwZ2EwX3JlZykpIHsKLQkJc21hbGxfZmxhc2hfYmFzZSA9IE9DT1RFQV9TTUFMTF9GTEFTSF9ISUdIOwotCQlsYXJnZV9mbGFzaF9iYXNlID0gT0NPVEVBX0xBUkdFX0ZMQVNIX0xPVzsKLQl9Ci0JZWxzZSB7Ci0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBPQ09URUFfU01BTExfRkxBU0hfTE9XOwotCQlsYXJnZV9mbGFzaF9iYXNlID0gT0NPVEVBX0xBUkdFX0ZMQVNIX0hJR0g7Ci0JfQotCi0Jb2NvdGVhX3NtYWxsX21hcC5waHlzID0gc21hbGxfZmxhc2hfYmFzZTsKLQlvY290ZWFfc21hbGxfbWFwLnZpcnQgPSBpb3JlbWFwNjQoc21hbGxfZmxhc2hfYmFzZSwKLQkJCQkJIG9jb3RlYV9zbWFsbF9tYXAuc2l6ZSk7Ci0KLQlpZiAoIW9jb3RlYV9zbWFsbF9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZvY290ZWFfc21hbGxfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJm9jb3RlYV9zbWFsbF9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBvY290ZWFfc21hbGxfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRShvY290ZWFfc21hbGxfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKG9jb3RlYV9zbWFsbF9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0Jb2NvdGVhX2xhcmdlX21hcC5waHlzID0gbGFyZ2VfZmxhc2hfYmFzZTsKLQlvY290ZWFfbGFyZ2VfbWFwLnZpcnQgPSBpb3JlbWFwNjQobGFyZ2VfZmxhc2hfYmFzZSwKLQkJCQkJIG9jb3RlYV9sYXJnZV9tYXAuc2l6ZSk7Ci0KLQlpZiAoIW9jb3RlYV9sYXJnZV9tYXAudmlydCkgewotCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKLQkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJm9jb3RlYV9sYXJnZV9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZvY290ZWFfbGFyZ2VfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgb2NvdGVhX2xhcmdlX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUob2NvdGVhX2xhcmdlX3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlpb3VubWFwKG9jb3RlYV9sYXJnZV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX29jb3RlYSh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKG9jb3RlYV9zbWFsbF9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopb2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKLQkJb2NvdGVhX3NtYWxsX21hcC52aXJ0ID0gMDsKLQl9Ci0KLQlpZiAob2NvdGVhX2xhcmdlX21hcC52aXJ0KSB7Ci0JCWlvdW5tYXAoKHZvaWQgKilvY290ZWFfbGFyZ2VfbWFwLnZpcnQpOwotCQlvY290ZWFfbGFyZ2VfbWFwLnZpcnQgPSAwOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF9vY290ZWEpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9vY290ZWEpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDQwR1ggT2NvdGVhIGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNjBlYmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogTk9SIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gVEkgVG90byBib2FyZAotICoKLSAqIGp6aGFuZ0B0aS5jb20gKEMpIDIwMDMgVGV4YXMgSW5zdHJ1bWVudHMuCi0gKgotICogIChDKSAyMDAyIE1vbnRWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0KLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUAotI2Vycm9yIFRoaXMgaXMgZm9yIE9NQVAgYXJjaGl0ZWN0dXJlIG9ubHkKLSNlbmRpZgotCi0vL3RoZXNlIGxpbmVzIG5lZWQgYmUgbW92ZWQgdG8gYSBoYXJkd2FyZSBoZWFkZXIgZmlsZQotI2RlZmluZSBPTUFQX1RPVE9fRkxBU0hfQkFTRSAweGQ4MDAwMDAwCi0jZGVmaW5lIE9NQVBfVE9UT19GTEFTSF9TSVpFIDB4ODAwMDAKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBvbWFwX3RvdG9fbWFwX2ZsYXNoID0gewotCS5uYW1lID0JCSJPTUFQIFRvdG8gZmxhc2giLAotCS5iYW5rd2lkdGggPQkyLAotCS52aXJ0ID0JCSh2b2lkIF9faW9tZW0gKilPTUFQX1RPVE9fRkxBU0hfQkFTRSwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRvdG9fZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPQkJIkJvb3RMb2FkZXIiLAotCQkuc2l6ZSA9CQkweDAwMDQwMDAwLCAgICAgLyogaG9wZWZ1bGx5IHUtYm9vdCB3aWxsIHN0YXkgMTI4ayArIDEyOCovCi0JCS5vZmZzZXQgPQkwLAotCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7Ci0JCS5uYW1lID0JCSJSZXNlcnZlZFNwYWNlIiwKLQkJLnNpemUgPQkJMHgwMDAzMDAwMCwKLQkJLm9mZnNldCA9CU1URFBBUlRfT0ZTX0FQUEVORCwKLQkJLy9tYXNrX2ZsYWdzOglNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwgewotCQkubmFtZSA9CQkiRW52QXJlYSIsICAgICAgLyogYm90dG9tIDY0S2lCIGZvciBlbnYgdmFycyAqLwotCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAotCQkub2Zmc2V0ID0JTVREUEFSVF9PRlNfQVBQRU5ELAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRzOwotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZmxhc2ggKHZvaWQpCi17Ci0KLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5iX3BhcnRzID0gMDsKLQlpbnQgcGFyc2VkX25yX3BhcnRzID0gMDsKLQljb25zdCBjaGFyICpwYXJ0X3R5cGU7Ci0KLQkvKgotCSAqIFN0YXRpYyBwYXJ0aXRpb24gZGVmaW5pdGlvbiBzZWxlY3Rpb24KLQkgKi8KLQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKLQotIAlwYXJ0cyA9IHRvdG9fZmxhc2hfcGFydGl0aW9uczsKLQluYl9wYXJ0cyA9IEFSUkFZX1NJWkUodG90b19mbGFzaF9wYXJ0aXRpb25zKTsKLQlvbWFwX3RvdG9fbWFwX2ZsYXNoLnNpemUgPSBPTUFQX1RPVE9fRkxBU0hfU0laRTsKLQlvbWFwX3RvdG9fbWFwX2ZsYXNoLnBoeXMgPSB2aXJ0X3RvX3BoeXMoT01BUF9UT1RPX0ZMQVNIX0JBU0UpOwotCi0Jc2ltcGxlX21hcF9pbml0KCZvbWFwX3RvdG9fbWFwX2ZsYXNoKTsKLQkvKgotCSAqIE5vdyBsZXQncyBwcm9iZSBmb3IgdGhlIGFjdHVhbCBmbGFzaC4gIERvIGl0IGhlcmUgc2luY2UKLQkgKiBzcGVjaWZpYyBtYWNoaW5lIHNldHRpbmdzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgYWJvdmUuCi0JICovCi0JcHJpbnRrKEtFUk5fTk9USUNFICJPTUFQIHRvdG8gZmxhc2g6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwKLQkJb21hcF90b3RvX21hcF9mbGFzaC5iYW5rd2lkdGgqOCk7Ci0JZmxhc2hfbXRkID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZvbWFwX3RvdG9fbWFwX2ZsYXNoKTsKLQlpZiAoIWZsYXNoX210ZCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotIAlpZiAocGFyc2VkX25yX3BhcnRzID4gMCkgewotCQlwYXJ0cyA9IHBhcnNlZF9wYXJ0czsKLQkJbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHM7Ci0JfQotCi0JaWYgKG5iX3BhcnRzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJPTUFQIHRvdG8gZmxhc2g6IG5vIHBhcnRpdGlvbiBpbmZvIGF2YWlsYWJsZSwiCi0JCQkicmVnaXN0ZXJpbmcgd2hvbGUgZmxhc2ggYXQgb25jZVxuIik7Ci0JCWlmIChhZGRfbXRkX2RldmljZShmbGFzaF9tdGQpKXsKLSAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgIH0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLAotCQkJcGFydF90eXBlKTsKLQkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQsIHBhcnRzLCBuYl9wYXJ0cyk7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IG9tYXBfdG90b19tdGRfaW5pdCh2b2lkKQotewotCWludCBzdGF0dXM7Ci0KLSAJaWYgKHN0YXR1cyA9IGluaXRfZmxhc2goKSkgewotCQlwcmludGsoS0VSTl9FUlIgIk9NQVAgVG90byBGbGFzaDogdW5hYmxlIHRvIGluaXQgbWFwIGZvciB0b3RvIGZsYXNoXG4iKTsKLQl9Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQgIF9fZXhpdCBvbWFwX3RvdG9fbXRkX2NsZWFudXAodm9pZCkKLXsKLQlpZiAoZmxhc2hfbXRkKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQpOwotCQltYXBfZGVzdHJveShmbGFzaF9tdGQpOwotCQlrZnJlZShwYXJzZWRfcGFydHMpOwotCX0KLX0KLQotbW9kdWxlX2luaXQob21hcF90b3RvX210ZF9pbml0KTsKLW1vZHVsZV9leGl0KG9tYXBfdG90b19tdGRfY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkppYW4gWmhhbmciKTsKLU1PRFVMRV9ERVNDUklQVElPTigiT01BUCBUb3RvIGJvYXJkIG1hcCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCmluZGV4IDVjNmEyNWMuLjQ4ZjRjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY2kuYwpAQCAtMjAzLDE1ICsyMDMsOCBAQAogCQkgKiBub3QgZW5hYmxlZCwgc2hvdWxkIHdlIGJlIGFsbG9jYXRpbmcgYSBuZXcgcmVzb3VyY2UgZm9yIGl0CiAJCSAqIG9yIHNpbXBseSBlbmFibGluZyBpdD8KIAkJICovCi0JCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIFBDSV9ST01fUkVTT1VSQ0UpICYKLQkJCQkgICAgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkgewotCQkgICAgIAl1MzIgdmFsOwotCQkJcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgUENJX1JPTV9SRVNPVVJDRSkgfD0gSU9SRVNPVVJDRV9ST01fRU5BQkxFOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCAmdmFsKTsKLQkJCXZhbCB8PSBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgdmFsKTsKLQkJCXByaW50aygiJXM6IGVuYWJsaW5nIGV4cGFuc2lvbiBST01cbiIsIHBjaV9uYW1lKGRldikpOwotCQl9CisJCXBjaV9lbmFibGVfcm9tKGRldik7CisJCXByaW50aygiJXM6IGVuYWJsaW5nIGV4cGFuc2lvbiBST01cbiIsIHBjaV9uYW1lKGRldikpOwogCX0KIAogCWlmICghbGVuIHx8ICFiYXNlKQpAQCAtMjMyLDE4ICsyMjUsMTMgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9kYzIxMjg1X2V4aXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1hcF9wY2lfaW5mbyAqbWFwKQogewotCXUzMiB2YWw7Ci0KIAlpZiAobWFwLT5iYXNlKQogCQlpb3VubWFwKG1hcC0+YmFzZSk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gdW5kbyB0aGUgUENJIEJBUjIvUENJIFJPTSBCQVIgYWRkcmVzcyBhbHRlcmF0aW9uLgogCSAqLwotCXBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIFBDSV9ST01fUkVTT1VSQ0UpICY9IH5JT1JFU09VUkNFX1JPTV9FTkFCTEU7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCAmdmFsKTsKLQl2YWwgJj0gflBDSV9ST01fQUREUkVTU19FTkFCTEU7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgdmFsKTsKKwlwY2lfZGlzYWJsZV9yb20oZGV2KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggNDlhY2Q0MS4uNWZjZmVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTIzMCw4ICsyMzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX01URF9PRl9QQVJUUwogCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucygmZGV2LT5kZXYsIGluZm8tPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAsICZpbmZvLT5wYXJ0cyk7CisJCWVyciA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKCZkZXYtPmRldiwgZHAsICZpbmZvLT5wYXJ0cyk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jIGIvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MzQ3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBXYWxudXQgZmxhc2gKLSAqICh1c2VkIGVib255LmMgYXMgYSAiZnJhbWV3b3JrIikKLSAqCi0gKiBIZWlra2kgTGluZGhvbG0gPGhvbGluZGhvQGluZnJhZGVhZC5vcmc+Ci0gKgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC93YWxudXQuaD4KLQotLyogdGhlc2Ugc2hvdWxkIGJlIGluIHBsYXRmb3Jtcy80eHgvd2FsbnV0LmggPyAqLwotI2RlZmluZSBXQUxOVVRfRkxBU0hfT05CRF9OKHgpCQkoeCAmIDB4MDIpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9TUkFNX1NFTCh4KQkoeCAmIDB4MDEpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9MT1cJCTB4RkZGMDAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX0hJR0gJCTB4RkZGODAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX1NJWkUJCTB4ODAwMDAKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gd2FsbnV0X21hcCA9IHsKLQkubmFtZSA9CQkiV2FsbnV0IGZsYXNoIiwKLQkuc2l6ZSA9CQlXQUxOVVRfRkxBU0hfU0laRSwKLQkuYmFua3dpZHRoID0JMSwKLX07Ci0KLS8qIEFjdHVhbGx5LCBPcGVuQklPUyBpcyB0aGUgbGFzdCAxMjggS2lCIG9mIHRoZSBmbGFzaCAtIGJldHRlcgotICogcGFydGl0aW9uaW5nIGNvdWxkIGJlIG1hZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB3YWxudXRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJPcGVuQklPUyIsCi0JCS5vZmZzZXQgPSAweDAsCi0JCS5zaXplID0gICBXQUxOVVRfRkxBU0hfU0laRSwKLQkJLyoubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsICovIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF93YWxudXQodm9pZCkKLXsKLQl1OCBmcGdhX2JyZHMxOwotCXZvaWQgKmZwZ2FfYnJkczFfYWRyOwotCXZvaWQgKmZwZ2Ffc3RhdHVzX2FkcjsKLQl1bnNpZ25lZCBsb25nIGZsYXNoX2Jhc2U7Ci0KLQkvKiB0aGlzIHNob3VsZCBhbHJlYWR5IGJlIG1hcHBlZCAocGxhdGZvcm0vNHh4L3dhbG51dC5jKSAqLwotCWZwZ2Ffc3RhdHVzX2FkciA9IGlvcmVtYXAoV0FMTlVUX0ZQR0FfQkFTRSwgOCk7Ci0JaWYgKCFmcGdhX3N0YXR1c19hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYV9icmRzMV9hZHIgPSBmcGdhX3N0YXR1c19hZHIrNTsKLQlmcGdhX2JyZHMxID0gcmVhZGIoZnBnYV9icmRzMV9hZHIpOwotCS8qIGlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsgKi8KLQotCWlmIChXQUxOVVRfRkxBU0hfT05CRF9OKGZwZ2FfYnJkczEpKSB7Ci0JCXByaW50aygiVGhlIG9uLWJvYXJkIGZsYXNoIGlzIGRpc2FibGVkIChVNzkgc3cgNSkhIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChXQUxOVVRfRkxBU0hfU1JBTV9TRUwoZnBnYV9icmRzMSkpCi0JCWZsYXNoX2Jhc2UgPSBXQUxOVVRfRkxBU0hfTE9XOwotCWVsc2UKLQkJZmxhc2hfYmFzZSA9IFdBTE5VVF9GTEFTSF9ISUdIOwotCi0Jd2FsbnV0X21hcC5waHlzID0gZmxhc2hfYmFzZTsKLQl3YWxudXRfbWFwLnZpcnQgPQotCQkodm9pZCBfX2lvbWVtICopaW9yZW1hcChmbGFzaF9iYXNlLCB3YWxudXRfbWFwLnNpemUpOwotCi0JaWYgKCF3YWxudXRfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaC5cbiIpOwotCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmd2FsbnV0X21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmd2FsbnV0X21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIHdhbG51dF9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKHdhbG51dF9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3dhbG51dCh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKHdhbG51dF9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopd2FsbnV0X21hcC52aXJ0KTsKLQkJd2FsbnV0X21hcC52aXJ0ID0gMDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfd2FsbnV0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfd2FsbnV0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSGVpa2tpIExpbmRob2xtIDxob2xpbmRob0BpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDA1R1AgV2FsbnV0IGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IGUwMGQ0MjQuLjk2Mzg0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTI2LDEzICsyNiwxMSBAQAogCWlmICghbXRkKQogCQlyZXR1cm47CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEobXRkX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMiksCi0JCQkgICAgICBOVUxMLCAibXRkJWQiLCBtdGQtPmluZGV4KTsKKwlkZXZpY2VfY3JlYXRlKG10ZF9jbGFzcywgTlVMTCwgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMiksCisJCSAgICAgIE5VTEwsICJtdGQlZCIsIG10ZC0+aW5kZXgpOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10ZF9jbGFzcywgTlVMTCwKLQkJCSAgICAgIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIrMSksCi0JCQkgICAgICBOVUxMLCAibXRkJWRybyIsIG10ZC0+aW5kZXgpOworCWRldmljZV9jcmVhdGUobXRkX2NsYXNzLCBOVUxMLCBNS0RFVihNVERfQ0hBUl9NQUpPUiwgbXRkLT5pbmRleCoyKzEpLAorCQkgICAgICBOVUxMLCAibXRkJWRybyIsIG10ZC0+aW5kZXgpOwogfQogCiBzdGF0aWMgdm9pZCBtdGRfbm90aWZ5X3JlbW92ZShzdHJ1Y3QgbXRkX2luZm8qIG10ZCkKQEAgLTM1MCw3ICszNDgsNyBAQAogCXdha2VfdXAoKHdhaXRfcXVldWVfaGVhZF90ICopaW5zdHItPnByaXYpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQorI2lmZGVmIENPTkZJR19IQVZFX01URF9PVFAKIHN0YXRpYyBpbnQgb3RwX3NlbGVjdF9maWxlbW9kZShzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwpAQCAtNjY3LDcgKzY2NSw3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKKyNpZmRlZiBDT05GSUdfSEFWRV9NVERfT1RQCiAJY2FzZSBPVFBTRUxFQ1Q6CiAJewogCQlpbnQgbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggMjk3MmE1ZS4uNzg5ODQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIG1ha2UgYSBsb2NhbCBjb3B5IG9mIGluc3RyIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgY2FsbGVyJ3Mgc3RydWN0ICovCiAJZXJhc2UgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGVyYXNlX2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQkJLyogc2FuaXR5IGNoZWNrOiBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlCiAJCQkgKiBibG9jayBhbGlnbm1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhYm92ZSAqLwogCQkJQlVHX09OKGVyciA9PSAtRUlOVkFMKTsKLQkJCWlmIChlcmFzZS0+ZmFpbF9hZGRyICE9IDB4ZmZmZmZmZmYpCisJCQlpZiAoZXJhc2UtPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQkJaW5zdHItPmZhaWxfYWRkciA9IGVyYXNlLT5mYWlsX2FkZHIgKyBvZmZzZXQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkb29wcy5jIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCmluZGV4IDVhNjgwZTEuLmFlYmIzYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYworKysgYi9kcml2ZXJzL210ZC9tdGRvb3BzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAKKyNkZWZpbmUgTVRET09QU19LRVJOTVNHX01BR0lDIDB4NWQwMDVkMDAKICNkZWZpbmUgT09QU19QQUdFX1NJWkUgNDA5NgogCiBzdGF0aWMgc3RydWN0IG10ZG9vcHNfY29udGV4dCB7CkBAIC05OSw3ICsxMDAsNyBAQAogCWludCByZXQ7CiAKIAljeHQtPm5leHRwYWdlKys7Ci0JaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJaWYgKGN4dC0+bmV4dHBhZ2UgPj0gY3h0LT5vb3BzX3BhZ2VzKQogCQljeHQtPm5leHRwYWdlID0gMDsKIAljeHQtPm5leHRjb3VudCsrOwogCWlmIChjeHQtPm5leHRjb3VudCA9PSAweGZmZmZmZmZmKQpAQCAtMTQxLDcgKzE0Miw3IEBACiAJbW9kID0gKGN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSkgJSBtdGQtPmVyYXNlc2l6ZTsKIAlpZiAobW9kICE9IDApIHsKIAkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAoKG10ZC0+ZXJhc2VzaXplIC0gbW9kKSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCX0KIApAQCAtMTU4LDcgKzE1OSw3IEBACiAJCQkJY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKIAkJaSsrOwogCQljeHQtPm5leHRwYWdlID0gY3h0LT5uZXh0cGFnZSArIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQlpZiAoaSA9PSAoY3h0LT5vb3BzX3BhZ2VzIC8gKG10ZC0+ZXJhc2VzaXplIC8gT09QU19QQUdFX1NJWkUpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBBbGwgYmxvY2tzIGJhZCFcbiIpOwpAQCAtMjI0LDQwICsyMjUsNDAgQEAKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwogCWludCByZXQsIHBhZ2UsIG1heHBvcyA9IDA7Ci0JdTMyIGNvdW50LCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CisJdTMyIGNvdW50WzJdLCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CiAJc2l6ZV90IHJldGxlbjsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBjeHQtPm9vcHNfcGFnZXM7IHBhZ2UrKykgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBwYWdlICogT09QU19QQUdFX1NJWkUsIDQsICZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50KTsKLQkJaWYgKChyZXRsZW4gIT0gNCkgfHwgKChyZXQgPCAwKSAmJiAocmV0ICE9IC1FVUNMRUFOKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogUmVhZCBmYWlsdXJlIGF0ICVkICgldGQgb2YgNCByZWFkKSIKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCA4LCAmcmV0bGVuLCAodV9jaGFyICopICZjb3VudFswXSk7CisJCWlmICgocmV0bGVuICE9IDgpIHx8ICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRVVDTEVBTikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDggcmVhZCkiCiAJCQkJIiwgZXJyICVkLlxuIiwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCByZXRsZW4sIHJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChjb3VudCA9PSAweGZmZmZmZmZmKQorCQlpZiAoY291bnRbMV0gIT0gTVRET09QU19LRVJOTVNHX01BR0lDKQorCQkJY29udGludWU7CisJCWlmIChjb3VudFswXSA9PSAweGZmZmZmZmZmKQogCQkJY29udGludWU7CiAJCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7Ci0JCQltYXhjb3VudCA9IGNvdW50OworCQkJbWF4Y291bnQgPSBjb3VudFswXTsKIAkJCW1heHBvcyA9IHBhZ2U7Ci0JCX0gZWxzZSBpZiAoKGNvdW50IDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCX0gZWxzZSBpZiAoKGNvdW50WzBdIDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPCAweGMwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdIDwgMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPiAweGMwMDAwMDAwKQorCQl9IGVsc2UgaWYgKChjb3VudFswXSA+IG1heGNvdW50KSAmJiAoY291bnRbMF0gPiAweGMwMDAwMDAwKQogCQkJCQkmJiAobWF4Y291bnQgPiAweDgwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwogCQl9CiAJfQogCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7CiAJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQljeHQtPm5leHRjb3VudCA9IDE7Ci0JCWN4dC0+cmVhZHkgPSAxOwotCQlwcmludGsoS0VSTl9ERUJVRyAibXRkb29wczogUmVhZHkgJWQsICVkIChmaXJzdCBpbml0KVxuIiwKLQkJCQljeHQtPm5leHRwYWdlLCBjeHQtPm5leHRjb3VudCk7CisJCXNjaGVkdWxlX3dvcmsoJmN4dC0+d29ya19lcmFzZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM1OCw4ICszNTksOSBAQAogCiAJaWYgKGN4dC0+d3JpdGVjb3VudCA9PSAwKSB7CiAJCXUzMiAqc3RhbXAgPSBjeHQtPm9vcHNfYnVmOwotCQkqc3RhbXAgPSBjeHQtPm5leHRjb3VudDsKLQkJY3h0LT53cml0ZWNvdW50ID0gNDsKKwkJKnN0YW1wKysgPSBjeHQtPm5leHRjb3VudDsKKwkJKnN0YW1wID0gTVRET09QU19LRVJOTVNHX01BR0lDOworCQljeHQtPndyaXRlY291bnQgPSA4OwogCX0KIAogCWlmICgoY291bnQgKyBjeHQtPndyaXRlY291bnQpID4gT09QU19QQUdFX1NJWkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggZWRiOTBiNS4uMzcyODkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJaW5zdHItPmFkZHIgKz0gcGFydC0+b2Zmc2V0OwogCXJldCA9IHBhcnQtPm1hc3Rlci0+ZXJhc2UocGFydC0+bWFzdGVyLCBpbnN0cik7CiAJaWYgKHJldCkgewotCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSAweGZmZmZmZmZmKQorCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQlpbnN0ci0+ZmFpbF9hZGRyIC09IHBhcnQtPm9mZnNldDsKIAkJaW5zdHItPmFkZHIgLT0gcGFydC0+b2Zmc2V0OwogCX0KQEAgLTIyNiw3ICsyMjYsNyBAQAogCWlmIChpbnN0ci0+bXRkLT5lcmFzZSA9PSBwYXJ0X2VyYXNlKSB7CiAJCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQoaW5zdHItPm10ZCk7CiAKLQkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gMHhmZmZmZmZmZikKKwkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKIAl9CkBAIC01NjQsMTAgKzU2NCw4IEBACiAKIAlmb3IgKCA7IHJldCA8PSAwICYmICp0eXBlczsgdHlwZXMrKykgewogCQlwYXJzZXIgPSBnZXRfcGFydGl0aW9uX3BhcnNlcigqdHlwZXMpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJCWlmICghcGFyc2VyICYmICFyZXF1ZXN0X21vZHVsZSgiJXMiLCAqdHlwZXMpKQogCQkJCXBhcnNlciA9IGdldF9wYXJ0aXRpb25fcGFyc2VyKCp0eXBlcyk7Ci0jZW5kaWYKIAkJaWYgKCFwYXJzZXIpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXMgcGFydGl0aW9uIHBhcnNpbmcgbm90IGF2YWlsYWJsZVxuIiwKIAkJCSAgICAgICAqdHlwZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IDQxZjM2MWMuLjFjMmU5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTU2LDYgKzU2LDEyIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBpUEFRIGgxOTAwIGZsYXNoLgogCitjb25maWcgTVREX05BTkRfR1BJTworCXRyaXN0YXRlICJHUElPIE5BTkQgRmxhc2ggZHJpdmVyIgorCWRlcGVuZHMgb24gR0VORVJJQ19HUElPICYmIEFSTQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBhIEdQSU8gYmFzZWQgTkFORCBmbGFzaCBkcml2ZXIuCisKIGNvbmZpZyBNVERfTkFORF9TUElBCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFNQSUEgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1A3MjBUCkBAIC02OCwxMiArNzQsNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gQW1zdHJhZCBFMyAoRGVsdGEpLgogCi1jb25maWcgTVREX05BTkRfVE9UTwotCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUT1RPIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIEJST0tFTgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgVG90byBwbGF0Zm9ybS4KLQogY29uZmlnIE1URF9OQU5EX1RTNzI1MAogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUUy03MjUwIGJvYXJkIgogCWRlcGVuZHMgb24gTUFDSF9UUzcyWFgKQEAgLTE2MywxMyArMTYzLDYgQEAKIAkgIGluY29ycmVjdCBFQ0MgZ2VuZXJhdGlvbiwgYW5kIGlmIHVzaW5nIHRoZXNlLCB0aGUgZGVmYXVsdCBvZgogCSAgc29mdHdhcmUgRUNDIGlzIHByZWZlcmFibGUuCiAKLWNvbmZpZyBNVERfTkFORF9OREZDCi0JdHJpc3RhdGUgIk5ERkMgTmFuRCBGbGFzaCBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gNHh4ICYmICFQUENfTUVSR0UKLQlzZWxlY3QgTVREX05BTkRfRUNDX1NNQwotCWhlbHAKLQkgTkRGQyBOYW5kIEZsYXNoIENvbnRyb2xsZXJzIGFyZSBpbnRlZ3JhdGVkIGluIElCTS9BTUNDJ3MgNHh4IFNvQ3MKLQogY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAogCWJvb2wgIlMzQzI0MTAgTkFORCBJRExFIGNsb2NrIHN0b3AiCiAJZGVwZW5kcyBvbiBNVERfTkFORF9TM0MyNDEwCkBAIC0zNDAsNiArMzMzLDEzIEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uCiAJICBQWEEzeHggcHJvY2Vzc29ycwogCitjb25maWcgTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KKwlib29sICJVc2UgYnVpbHRpbiBkZWZpbml0aW9ucyBmb3Igc29tZSBOQU5EIGNoaXBzIChkZXByZWNhdGVkKSIKKwlkZXBlbmRzIG9uIE1URF9OQU5EX1BYQTN4eAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBidWlsdGluIGRlZmluaXRpb25zIGZvciBzb21lIE5BTkQgY2hpcHMuIFRoaXMKKwkgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YS4KKwogY29uZmlnIE1URF9OQU5EX0NNX1gyNzAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBDTS1YMjcwIG1vZHVsZXMiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNQUNIX0FSTUNPUkUKQEAgLTQwMCwxMCArNDAwLDI0IEBACiAKIGNvbmZpZyBNVERfTkFORF9GU0xfVVBNCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gRnJlZXNjYWxlIFVQTSIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIE9GX0dQSU8gJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQogCXNlbGVjdCBGU0xfTEJDCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIEZsYXNoIGNoaXBzIHdpcmVkIG9udG8gRnJlZXNjYWxlIFBvd2VyUEMKIAkgIHByb2Nlc3NvciBsb2NhbGJ1cyB3aXRoIFVzZXItUHJvZ3JhbW1hYmxlIE1hY2hpbmUgc3VwcG9ydC4KIAorY29uZmlnIE1URF9OQU5EX01YQworCXRyaXN0YXRlICJNWEMgTkFORCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NWDIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUKKwkgIE1YQyBwcm9jZXNzb3JzLgorCitjb25maWcgTVREX05BTkRfU0hfRkxDVEwKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSCAmJiBDUFVfU1VCVFlQRV9TSDc3MjMKKwloZWxwCisJICBTZXZlcmFsIFJlbmVzYXMgU3VwZXJIIENQVSBoYXMgRkxDVEwuIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydAorCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzIzLgorCiBlbmRpZiAjIE1URF9OQU5ECmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCBiNzg2YzVkLi5iNjYxNTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTgsNyArOCw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQ0FGRSkJCSs9IGNhZmVfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfU1BJQSkJCSs9IHNwaWEubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KLW9iai0kKENPTkZJR19NVERfTkFORF9UT1RPKQkJKz0gdG90by5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVVUQ1BVMTIpCQkrPSBhdXRjcHUxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRURCNzMxMikJCSs9IGVkYjczMTIubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FVMTU1MCkJCSs9IGF1MTU1MG5kLm8KQEAgLTI0LDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9DUzU1M1gpCQkrPSBjczU1M3hfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfTkRGQykJCSs9IG5kZmMubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FUTUVMKQkJKz0gYXRtZWxfbmFuZC5vCitvYmotJChDT05GSUdfTVREX05BTkRfR1BJTykJCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0NNX1gyNzApCQkrPSBjbXgyNzBfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQkFTTEVSX0VYQ0lURSkJKz0gZXhjaXRlX25hbmRmbGFzaC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUFhBM3h4KQkJKz0gcHhhM3h4X25hbmQubwpAQCAtMzQsNSArMzQsNyBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX09SSU9OKQkJKz0gb3Jpb25fbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRlNMX0VMQkMpCQkrPSBmc2xfZWxiY19uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9GU0xfVVBNKQkJKz0gZnNsX3VwbS5vCitvYmotJChDT05GSUdfTVREX05BTkRfU0hfRkxDVEwpCQkrPSBzaF9mbGN0bC5vCitvYmotJChDT05GSUdfTVREX05BTkRfTVhDKQkJKz0gbXhjX25hbmQubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKaW5kZXggMjU3OTM3Yy4uOTYyMzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAlhbFswXS5wb3J0ID0gQUxBVURBX1BPUlRfWEQ7CiAJYWxbMV0ucG9ydCA9IEFMQVVEQV9QT1JUX1NNOwogCi0JaW5mbygiYWxhdWRhIHByb2JlZCIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBwcm9iZWRcbiIpOwogCWFsYXVkYV9jaGVja19tZWRpYShhbCk7CiAJYWxhdWRhX2NoZWNrX21lZGlhKGFsKzEpOwogCkBAIC03MTYsNyArNzE2LDcgQEAKIAlpZiAoYWwpCiAJCWtyZWZfcHV0KCZhbC0+a3JlZiwgYWxhdWRhX2RlbGV0ZSk7CiAKLQlpbmZvKCJhbGF1ZGEgZ29uZSIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBnb25lIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKaW5kZXggMjZkNDI5OC4uNzgyOTk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogc3RhdGljIGludCBhbXNfZGVsdGFfbmFuZF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpOworCXJldHVybiBncGlvX2dldF92YWx1ZShBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQik7CiB9CiAKIC8qCkBAIC0xODUsNyArMTg1LDcgQEAKIAl0aGlzLT5yZWFkX2J1ZiA9IGFtc19kZWx0YV9yZWFkX2J1ZjsKIAl0aGlzLT52ZXJpZnlfYnVmID0gYW1zX2RlbHRhX3ZlcmlmeV9idWY7CiAJdGhpcy0+Y21kX2N0cmwgPSBhbXNfZGVsdGFfaHdjb250cm9sOwotCWlmICghb21hcF9yZXF1ZXN0X2dwaW8oQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpKSB7CisJaWYgKGdwaW9fcmVxdWVzdChBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQiwgIm5hbmRfcmR5IikgPT0gMCkgewogCQl0aGlzLT5kZXZfcmVhZHkgPSBhbXNfZGVsdGFfbmFuZF9yZWFkeTsKIAl9IGVsc2UgewogCQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCAzMzg3ZTBkLi5jOThjMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMTc0LDQ4ICsxNzQsNiBAQAogfQogCiAvKgotICogd3JpdGUgb29iIGZvciBzbWFsbCBwYWdlcwotICovCi1zdGF0aWMgaW50IGF0bWVsX25hbmRfd3JpdGVfb29iXzUxMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCi17Ci0JaW50IGNodW5rID0gY2hpcC0+ZWNjLmJ5dGVzICsgY2hpcC0+ZWNjLnByZXBhZCArIGNoaXAtPmVjYy5wb3N0cGFkOwotCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemUsIGxlbmd0aCA9IG10ZC0+b29ic2l6ZTsKLQlpbnQgbGVuLCBwb3MsIHN0YXR1cyA9IDA7Ci0JY29uc3QgdWludDhfdCAqYnVmcG9pID0gY2hpcC0+b29iX3BvaTsKLQotCXBvcyA9IGVjY3NpemUgKyBjaHVuazsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgcG9zLCBwYWdlKTsKLQlsZW4gPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOwotCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuKTsKLQlidWZwb2kgKz0gbGVuOwotCWxlbmd0aCAtPSBsZW47Ci0JaWYgKGxlbmd0aCA+IDApCi0JCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKLQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOwotCi0JcmV0dXJuIHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwgPyAtRUlPIDogMDsKLQotfQotCi0vKgotICogcmVhZCBvb2IgZm9yIHNtYWxsIHBhZ2VzCi0gKi8KLXN0YXRpYyBpbnQgYXRtZWxfbmFuZF9yZWFkX29vYl81MTIoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCWludCBwYWdlLCBpbnQgc25kY21kKQotewotCWlmIChzbmRjbWQpIHsKLQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDAsIHBhZ2UpOwotCQlzbmRjbWQgPSAwOwotCX0KLQljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Ci0JcmV0dXJuIHNuZGNtZDsKLX0KLQotLyoKICAqIENhbGN1bGF0ZSBIVyBFQ0MKICAqCiAgKiBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgYSB3cml0ZQpAQCAtMjM1LDE0ICsxOTMsMTQgQEAKIAkvKiBnZXQgdGhlIGZpcnN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgUFIpOwogCi0JZWNjX2NvZGVbZWNjcG9zWzBdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzFdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzBdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVsxXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJLyogZ2V0IHRoZSBsYXN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgTlBSKSAmIEFUTUVMX0VDQ19OUEFSSVRZOwogCi0JZWNjX2NvZGVbZWNjcG9zWzJdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzNdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzJdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVszXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzYsMTQgKzQzNCwxMiBAQAogCQkJcmVzID0gLUVJTzsKIAkJCWdvdG8gZXJyX2VjY19pb3JlbWFwOwogCQl9Ci0JCW5hbmRfY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwkJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOwogCQluYW5kX2NoaXAtPmVjYy5jYWxjdWxhdGUgPSBhdG1lbF9uYW5kX2NhbGN1bGF0ZTsKIAkJbmFuZF9jaGlwLT5lY2MuY29ycmVjdCA9IGF0bWVsX25hbmRfY29ycmVjdDsKIAkJbmFuZF9jaGlwLT5lY2MuaHdjdGwgPSBhdG1lbF9uYW5kX2h3Y3RsOwogCQluYW5kX2NoaXAtPmVjYy5yZWFkX3BhZ2UgPSBhdG1lbF9uYW5kX3JlYWRfcGFnZTsKIAkJbmFuZF9jaGlwLT5lY2MuYnl0ZXMgPSA0OwotCQluYW5kX2NoaXAtPmVjYy5wcmVwYWQgPSAwOwotCQluYW5kX2NoaXAtPmVjYy5wb3N0cGFkID0gMDsKIAl9CiAKIAluYW5kX2NoaXAtPmNoaXBfZGVsYXkgPSAyMDsJCS8qIDIwdXMgY29tbWFuZCBkZWxheSB0aW1lICovCkBAIC01MTQsNyArNDcwLDcgQEAKIAkJZ290byBlcnJfc2Nhbl9pZGVudDsKIAl9CiAKLQlpZiAobmFuZF9jaGlwLT5lY2MubW9kZSA9PSBOQU5EX0VDQ19IV19TWU5EUk9NRSkgeworCWlmIChuYW5kX2NoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXKSB7CiAJCS8qIEVDQyBpcyBjYWxjdWxhdGVkIGZvciB0aGUgd2hvbGUgcGFnZSAoMSBzdGVwKSAqLwogCQluYW5kX2NoaXAtPmVjYy5zaXplID0gbXRkLT53cml0ZXNpemU7CiAKQEAgLTUyMiw4ICs0NzgsNiBAQAogCQlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7CiAJCWNhc2UgNTEyOgogCQkJbmFuZF9jaGlwLT5lY2MubGF5b3V0ID0gJmF0bWVsX29vYmluZm9fc21hbGw7Ci0JCQluYW5kX2NoaXAtPmVjYy5yZWFkX29vYiA9IGF0bWVsX25hbmRfcmVhZF9vb2JfNTEyOwotCQkJbmFuZF9jaGlwLT5lY2Mud3JpdGVfb29iID0gYXRtZWxfbmFuZF93cml0ZV9vb2JfNTEyOwogCQkJZWNjX3dyaXRlbChob3N0LT5lY2MsIE1SLCBBVE1FTF9FQ0NfUEFHRVNJWkVfNTI4KTsKIAkJCWJyZWFrOwogCQljYXNlIDEwMjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKaW5kZXggMzM3MGE4MC4uOWYxYjQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwpAQCAtMjg5LDggKzI4OSwxMCBAQAogCWludCBpOwogCXVpbnQ2NF90IHZhbDsKIAorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWludCBtdGRfcGFydHNfbmIgPSAwOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHMgPSBOVUxMOworI2VuZGlmCiAKIAkvKiBJZiB0aGUgQ1BVIGlzbid0IGEgR2VvZGUgR1ggb3IgTFgsIGFib3J0ICovCiAJaWYgKCFpc19nZW9kZSgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwppbmRleCA5OGFkM2NlLi40YWE1YmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwpAQCAtOTE4LDggKzkxOCw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX09GX1BBUlRTCiAJaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHByaXYtPmRldiwgJnByaXYtPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgJnBhcnRzKTsKKwkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMocHJpdi0+ZGV2LCBub2RlLCAmcGFydHMpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX3VwbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKaW5kZXggMWViZmQ4Ny4uMDI0ZTNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMzYsOCArMzcsNiBAQAogCXVpbnQ4X3QgdXBtX2NtZF9vZmZzZXQ7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCWludCBybmJfZ3BpbzsKLQljb25zdCB1aW50MzJfdCAqd2FpdF9wYXR0ZXJuOwotCWNvbnN0IHVpbnQzMl90ICp3YWl0X3dyaXRlOwogCWludCBjaGlwX2RlbGF5OwogfTsKIApAQCAtNjEsMTAgKzYwLDExIEBACiAJaWYgKGZ1bi0+cm5iX2dwaW8gPj0gMCkgewogCQl3aGlsZSAoLS1jbnQgJiYgIWZ1bl9jaGlwX3JlYWR5KCZmdW4tPm10ZCkpCiAJCQljcHVfcmVsYXgoKTsKKwkJaWYgKCFjbnQpCisJCQlkZXZfZXJyKGZ1bi0+ZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgUk5CXG4iKTsKKwl9IGVsc2UgeworCQluZGVsYXkoMTAwKTsKIAl9Ci0KLQlpZiAoIWNudCkKLQkJZGV2X2VycihmdW4tPmRldiwgInRpcmVkIHdhaXRpbmcgZm9yIFJOQlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1bl9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCkBAIC04OSw4ICs4OSw3IEBACiAKIAlmc2xfdXBtX3J1bl9wYXR0ZXJuKCZmdW4tPnVwbSwgZnVuLT5pb19iYXNlLCBjbWQpOwogCi0JaWYgKGZ1bi0+d2FpdF9wYXR0ZXJuKQotCQlmdW5fd2FpdF9ybmIoZnVuKTsKKwlmdW5fd2FpdF9ybmIoZnVuKTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgZnVuX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKQEAgLTExNiwxNCArMTE1LDE2IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJb3V0XzgoZnVuLT5jaGlwLklPX0FERFJfVywgYnVmW2ldKTsKLQkJaWYgKGZ1bi0+d2FpdF93cml0ZSkKLQkJCWZ1bl93YWl0X3JuYihmdW4pOworCQlmdW5fd2FpdF9ybmIoZnVuKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZ1bl9jaGlwX2luaXQoc3RydWN0IGZzbF91cG1fbmFuZCAqZnVuKQorc3RhdGljIGludCBfX2RldmluaXQgZnVuX2NoaXBfaW5pdChzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4sCisJCQkJICAgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICp1cG1fbnAsCisJCQkJICAgY29uc3Qgc3RydWN0IHJlc291cmNlICppb19yZXMpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZsYXNoX25wOwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwsIH07CiAjZW5kaWYKQEAgLTE0MywxOCArMTQ0LDM3IEBACiAJZnVuLT5tdGQucHJpdiA9ICZmdW4tPmNoaXA7CiAJZnVuLT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKIAorCWZsYXNoX25wID0gb2ZfZ2V0X25leHRfY2hpbGQodXBtX25wLCBOVUxMKTsKKwlpZiAoIWZsYXNoX25wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZ1bi0+bXRkLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiV4LiVzIiwgaW9fcmVzLT5zdGFydCwKKwkJCQkgIGZsYXNoX25wLT5uYW1lKTsKKwlpZiAoIWZ1bi0+bXRkLm5hbWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCiAJcmV0ID0gbmFuZF9zY2FuKCZmdW4tPm10ZCwgMSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWZ1bi0+bXRkLm5hbWUgPSBmdW4tPmRldi0+YnVzX2lkOworCQlnb3RvIGVycjsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXJldCA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgcGFydF90eXBlcywgJmZ1bi0+cGFydHMsIDApOwotCWlmIChyZXQgPiAwKQotCQlyZXR1cm4gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKworI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKGZ1bi0+ZGV2LCAmZnVuLT5tdGQsCisJCQkJCSAgICAgIGZsYXNoX25wLCAmZnVuLT5wYXJ0cyk7CiAjZW5kaWYKLQlyZXR1cm4gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKwllbHNlCisjZW5kaWYKKwkJcmV0ID0gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKK2VycjoKKwlvZl9ub2RlX3B1dChmbGFzaF9ucCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZnVuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LApAQCAtMjExLDYgKzIzMSwxMiBAQAogCQlnb3RvIGVycjI7CiAJfQogCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImNoaXAtZGVsYXkiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZnVuLT5jaGlwX2RlbGF5ID0gKnByb3A7CisJZWxzZQorCQlmdW4tPmNoaXBfZGVsYXkgPSA1MDsKKwogCWZ1bi0+aW9fYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZvZmRldi0+ZGV2LCBpb19yZXMuc3RhcnQsCiAJCQkJCSAgaW9fcmVzLmVuZCAtIGlvX3Jlcy5zdGFydCArIDEpOwogCWlmICghZnVuLT5pb19iYXNlKSB7CkBAIC0yMjAsMTcgKzI0Niw4IEBACiAKIAlmdW4tPmRldiA9ICZvZmRldi0+ZGV2OwogCWZ1bi0+bGFzdF9jdHJsID0gTkFORF9DTEU7Ci0JZnVuLT53YWl0X3BhdHRlcm4gPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJmc2wsd2FpdC1wYXR0ZXJuIiwKLQkJCQkJICAgIE5VTEwpOwotCWZ1bi0+d2FpdF93cml0ZSA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCx3YWl0LXdyaXRlIiwgTlVMTCk7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiY2hpcC1kZWxheSIsIE5VTEwpOwotCWlmIChwcm9wKQotCQlmdW4tPmNoaXBfZGVsYXkgPSAqcHJvcDsKLQllbHNlCi0JCWZ1bi0+Y2hpcF9kZWxheSA9IDUwOwotCi0JcmV0ID0gZnVuX2NoaXBfaW5pdChmdW4pOworCXJldCA9IGZ1bl9jaGlwX2luaXQoZnVuLCBvZmRldi0+bm9kZSwgJmlvX3Jlcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnIyOwogCkBAIC0yNTEsNiArMjY4LDcgQEAKIAlzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4gPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwogCiAJbmFuZF9yZWxlYXNlKCZmdW4tPm10ZCk7CisJa2ZyZWUoZnVuLT5tdGQubmFtZSk7CiAKIAlpZiAoZnVuLT5ybmJfZ3BpbyA+PSAwKQogCQlncGlvX2ZyZWUoZnVuLT5ybmJfZ3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYyBiL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCisgKgorICogVXBkYXRlZCwgYW5kIGNvbnZlcnRlZCB0byBnZW5lcmljIEdQSU8gYmFzZWQgZHJpdmVyIGJ5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBXcml0dGVuIGJ5IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgQmFzZWQgb24gMi40IHZlcnNpb24gYnkgTWFyayBXaGl0dGFrZXIKKyAqCisgKiDCqSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIERldmljZSBkcml2ZXIgZm9yIE5BTkQgY29ubmVjdGVkIHZpYSBHUElPCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC1ncGlvLmg+CisKK3N0cnVjdCBncGlvbXRkIHsKKwl2b2lkIF9faW9tZW0JCSppb19zeW5jOworCXN0cnVjdCBtdGRfaW5mbwkJbXRkX2luZm87CisJc3RydWN0IG5hbmRfY2hpcAluYW5kX2NoaXA7CisJc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSBwbGF0OworfTsKKworI2RlZmluZSBncGlvX25hbmRfZ2V0cHJpdih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGdwaW9tdGQsIG10ZF9pbmZvKQorCisKKyNpZmRlZiBDT05GSUdfQVJNCisvKiBncGlvX25hbmRfZG9zeW5jKCkKKyAqCisgKiBNYWtlIHN1cmUgdGhlIEdQSU8gc3RhdGUgY2hhbmdlcyBvY2N1ciBpbi1vcmRlciB3aXRoIHdyaXRlcyB0byBOQU5ECisgKiBtZW1vcnkgcmVnaW9uLgorICogTmVlZGVkIG9uIFBYQSBkdWUgdG8gYnVzLXJlb3JkZXJpbmcgd2l0aGluIHRoZSBTb0MgaXRzZWxmIChzZWUgc2VjdGlvbiBvbgorICogSS9PIG9yZGVyaW5nIGluIFBYQSBtYW51YWwgKHNlY3Rpb24gMi4zLCBwMzUpCisgKi8KK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9kb3N5bmMoc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoZ3Bpb210ZC0+aW9fc3luYykgeworCQkvKgorCQkgKiBMaW51eCBtZW1vcnkgYmFycmllcnMgZG9uJ3QgY2F0ZXIgZm9yIHdoYXQncyByZXF1aXJlZCBoZXJlLgorCQkgKiBXaGF0J3MgcmVxdWlyZWQgaXMgd2hhdCdzIGhlcmUgLSBhIHJlYWQgZnJvbSBhIHNlcGFyYXRlCisJCSAqIHJlZ2lvbiB3aXRoIGEgZGVwZW5kZW5jeSBvbiB0aGF0IHJlYWQuCisJCSAqLworCQl0bXAgPSByZWFkbChncGlvbXRkLT5pb19zeW5jKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3YgJTEsICUwXG4iIDogIj1yIiAodG1wKSA6ICJyIiAodG1wKSk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX25hbmRfZG9zeW5jKHN0cnVjdCBncGlvbXRkICpncGlvbXRkKSB7fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBncGlvX25hbmRfZ2V0cHJpdihtdGQpOworCisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlLCAhKGN0cmwgJiBOQU5EX05DRSkpOworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAhIShjdHJsICYgTkFORF9DTEUpKTsKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSwgISEoY3RybCAmIE5BTkRfQUxFKSk7CisJCWdwaW9fbmFuZF9kb3N5bmMoZ3Bpb210ZCk7CisJfQorCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJd3JpdGViKGNtZCwgZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfVyk7CisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd3JpdGVzYih0aGlzLT5JT19BRERSX1csIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlyZWFkc2IodGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyIHJlYWQsICpwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJlYWQgPSByZWFkYih0aGlzLT5JT19BRERSX1IpOworCQlpZiAocmVhZCAhPSBwW2ldKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGVyciBhdCAlZCAocmVhZCAlMDR4IHZzICUwNHgpXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpLCByZWFkLCBwW2ldKTsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylidWYsIDIpKSB7CisJCXdyaXRlc3codGhpcy0+SU9fQUREUl9XLCBidWYsIGxlbj4+MSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBwdHIrKykKKwkJCXdyaXRldygqcHRyLCB0aGlzLT5JT19BRERSX1cpOworCX0KK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWJ1ZiwgMikpIHsKKwkJcmVhZHN3KHRoaXMtPklPX0FERFJfUiwgYnVmLCBsZW4+PjEpOworCX0gZWxzZSB7CisJCWludCBpOworCQl1bnNpZ25lZCBzaG9ydCAqcHRyID0gKHVuc2lnbmVkIHNob3J0ICopYnVmOworCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMiwgcHRyKyspCisJCQkqcHRyID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIHNob3J0IHJlYWQsICpwID0gKHVuc2lnbmVkIHNob3J0ICopIGJ1ZjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsZW4gPj49IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmVhZCA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CisJCWlmIChyZWFkICE9IHBbaV0pIHsKKwkJCXByX2RlYnVnKCIlczogZXJyIGF0ICVkIChyZWFkICUwNHggdnMgJTA0eClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGksIHJlYWQsIHBbaV0pOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX2RldnJlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gZ3Bpb19uYW5kX2dldHByaXYobXRkKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCW5hbmRfcmVsZWFzZSgmZ3Bpb210ZC0+bXRkX2luZm8pOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlvdW5tYXAoZ3Bpb210ZC0+aW9fc3luYyk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlvdW5tYXAoZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfUik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsIDEpOworCisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbndwKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKwlrZnJlZShncGlvbXRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZXF1ZXN0X2FuZF9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc2l6ZV90IHNpemUsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyKQoreworCXZvaWQgX19pb21lbSAqcHRyOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgbmFtZSkpIHsKKwkJKmVyciA9IC1FQlVTWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXB0cikgeworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCSplcnIgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJc3RydWN0IHJlc291cmNlICpyZXMwLCAqcmVzMTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlczAgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdwaW9tdGQgPSBremFsbG9jKHNpemVvZigqZ3Bpb210ZCksIEdGUF9LRVJORUwpOworCWlmIChncGlvbXRkID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIE5BTkQgTVREXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdGhpcyA9ICZncGlvbXRkLT5uYW5kX2NoaXA7CisJdGhpcy0+SU9fQUREUl9SID0gcmVxdWVzdF9hbmRfcmVtYXAocmVzMCwgMiwgIk5BTkQiLCAmcmV0KTsKKwlpZiAoIXRoaXMtPklPX0FERFJfUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBtYXAgTkFORFxuIik7CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmIChyZXMxKSB7CisJCWdwaW9tdGQtPmlvX3N5bmMgPSByZXF1ZXN0X2FuZF9yZW1hcChyZXMxLCA0LCAiTkFORCBzeW5jIiwgJnJldCk7CisJCWlmICghZ3Bpb210ZC0+aW9fc3luYykgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gbWFwIHN5bmMgTkFORFxuIik7CisJCQlnb3RvIGVycl9zeW5jOworCQl9CisJfQorCisJbWVtY3B5KCZncGlvbXRkLT5wbGF0LCBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBzaXplb2YoZ3Bpb210ZC0+cGxhdCkpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsICJOQU5EIE5DRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX25jZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgMSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsICJOQU5EIE5XUCIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfbndwOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMSk7CisJfQorCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fYWxlLCAiTkFORCBBTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAiTkFORCBDTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fcmR5LCAiTkFORCBSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZHk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKworCXRoaXMtPklPX0FERFJfVyAgPSB0aGlzLT5JT19BRERSX1I7CisJdGhpcy0+ZWNjLm1vZGUgICA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+b3B0aW9ucyAgICA9IGdwaW9tdGQtPnBsYXQub3B0aW9uczsKKwl0aGlzLT5jaGlwX2RlbGF5ID0gZ3Bpb210ZC0+cGxhdC5jaGlwX2RlbGF5OworCisJLyogaW5zdGFsbCBvdXIgcm91dGluZXMgKi8KKwl0aGlzLT5jbWRfY3RybCAgID0gZ3Bpb19uYW5kX2NtZF9jdHJsOworCXRoaXMtPmRldl9yZWFkeSAgPSBncGlvX25hbmRfZGV2cmVhZHk7CisKKwlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKKwkJdGhpcy0+cmVhZF9idWYgICA9IGdwaW9fbmFuZF9yZWFkYnVmMTY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWYxNjsKKwkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGdwaW9fbmFuZF92ZXJpZnlidWYxNjsKKwl9IGVsc2UgeworCQl0aGlzLT5yZWFkX2J1ZiAgID0gZ3Bpb19uYW5kX3JlYWRidWY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWY7CisJCXRoaXMtPnZlcmlmeV9idWYgPSBncGlvX25hbmRfdmVyaWZ5YnVmOworCX0KKworCS8qIHNldCB0aGUgbXRkIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5hbmQgZHJpdmVyICovCisJZ3Bpb210ZC0+bXRkX2luZm8ucHJpdiA9IHRoaXM7CisJZ3Bpb210ZC0+bXRkX2luZm8ub3duZXIgPSBUSElTX01PRFVMRTsKKworCWlmIChuYW5kX3NjYW4oJmdwaW9tdGQtPm10ZF9pbmZvLCAxKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIG5hbmQgY2hpcHMgZm91bmQ/XG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl93cDsKKwl9CisKKwlpZiAoZ3Bpb210ZC0+cGxhdC5hZGp1c3RfcGFydHMpCisJCWdwaW9tdGQtPnBsYXQuYWRqdXN0X3BhcnRzKCZncGlvbXRkLT5wbGF0LAorCQkJCQkgICBncGlvbXRkLT5tdGRfaW5mby5zaXplKTsKKworCWFkZF9tdGRfcGFydGl0aW9ucygmZ3Bpb210ZC0+bXRkX2luZm8sIGdwaW9tdGQtPnBsYXQucGFydHMsCisJCQkgICBncGlvbXRkLT5wbGF0Lm51bV9wYXJ0cyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBncGlvbXRkKTsKKworCXJldHVybiAwOworCitlcnJfd3A6CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKK2Vycl9yZHk6CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworZXJyX2NsZToKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSk7CitlcnJfYWxlOgorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3ApKQorCQlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCk7CitlcnJfbndwOgorCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlKTsKK2Vycl9uY2U6CisJaW91bm1hcChncGlvbXRkLT5pb19zeW5jKTsKKwlpZiAocmVzMSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOworZXJyX3N5bmM6CisJaW91bm1hcChncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9SKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMC0+c3RhcnQsIHJlczAtPmVuZCAtIHJlczAtPnN0YXJ0ICsgMSk7CitlcnJfbWFwOgorCWtmcmVlKGdwaW9tdGQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGdwaW9fbmFuZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGdwaW9fbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImdwaW8tbmFuZCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdwaW9fbmFuZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiR1BJTyBOQU5EIGRyaXZlciwgwqkgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ3Bpb19uYW5kX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBncGlvX25hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZncGlvX25hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3Bpb19uYW5kX2luaXQpOworbW9kdWxlX2V4aXQoZ3Bpb19uYW5kX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdQSU8gTkFORCBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZkNGYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibXhjX25hbmQiCisKKy8qIEFkZHJlc3NlcyBmb3IgTkZDIHJlZ2lzdGVycyAqLworI2RlZmluZSBORkNfQlVGX1NJWkUJCTB4RTAwCisjZGVmaW5lIE5GQ19CVUZfQUREUgkJMHhFMDQKKyNkZWZpbmUgTkZDX0ZMQVNIX0FERFIJCTB4RTA2CisjZGVmaW5lIE5GQ19GTEFTSF9DTUQJCTB4RTA4CisjZGVmaW5lIE5GQ19DT05GSUcJCTB4RTBBCisjZGVmaW5lIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVAkweEUwQworI2RlZmluZSBORkNfUlNMVE1BSU5fQVJFQQkweEUwRQorI2RlZmluZSBORkNfUlNMVFNQQVJFX0FSRUEJMHhFMTAKKyNkZWZpbmUgTkZDX1dSUFJPVAkJMHhFMTIKKyNkZWZpbmUgTkZDX1VOTE9DS1NUQVJUX0JMS0FERFIJMHhFMTQKKyNkZWZpbmUgTkZDX1VOTE9DS0VORF9CTEtBRERSCTB4RTE2CisjZGVmaW5lIE5GQ19ORl9XUlBSU1QJCTB4RTE4CisjZGVmaW5lIE5GQ19DT05GSUcxCQkweEUxQQorI2RlZmluZSBORkNfQ09ORklHMgkJMHhFMUMKKworLyogQWRkcmVzc2VzIGZvciBORkMgUkFNIEJVRkZFUiBNYWluIGFyZWEgMCAqLworI2RlZmluZSBNQUlOX0FSRUEwCQkweDAwMAorI2RlZmluZSBNQUlOX0FSRUExCQkweDIwMAorI2RlZmluZSBNQUlOX0FSRUEyCQkweDQwMAorI2RlZmluZSBNQUlOX0FSRUEzCQkweDYwMAorCisvKiBBZGRyZXNzZXMgZm9yIE5GQyBTUEFSRSBCVUZGRVIgU3BhcmUgYXJlYSAwICovCisjZGVmaW5lIFNQQVJFX0FSRUEwCQkweDgwMAorI2RlZmluZSBTUEFSRV9BUkVBMQkJMHg4MTAKKyNkZWZpbmUgU1BBUkVfQVJFQTIJCTB4ODIwCisjZGVmaW5lIFNQQVJFX0FSRUEzCQkweDgzMAorCisvKiBTZXQgSU5UIHRvIDAsIEZDTUQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQ29tbWFuZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0NNRCAgICAgICAgICAgIDB4MQorCisvKiBTZXQgSU5UIHRvIDAsIEZBREQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQWRkcmVzcyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0FERFIgICAgICAgICAgIDB4MgorCisvKiBTZXQgSU5UIHRvIDAsIEZESSB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBJbnB1dCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOUFVUICAgICAgICAgIDB4NAorCisvKiBTZXQgSU5UIHRvIDAsIEZETyB0byAwMDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIERhdGEgT3V0cHV0IG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfT1VUUFVUICAgICAgICAgMHg4CisKKy8qIFNldCBJTlQgdG8gMCwgRkQwIHRvIDAxMCwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgUmVhZCBJRCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lEICAgICAgICAgICAgIDB4MTAKKworLyogU2V0IElOVCB0byAwLCBGRE8gdG8gMTAwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBSZWFkIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX1NUQVRVUyAgICAgICAgIDB4MjAKKworLyogU2V0IElOVCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIgZm9yIFJlYWQKKyAqIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOVCAgICAgICAgICAgIDB4ODAwMAorCisjZGVmaW5lIE5GQ19TUF9FTiAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTkZDX0VDQ19FTiAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBORkNfSU5UX01TSyAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIE5GQ19CSUcgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgTkZDX1JTVCAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBORkNfQ0UgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIE5GQ19PTkVfQ1lDTEUgICAgICAgKDEgPDwgOCkKKworc3RydWN0IG14Y19uYW5kX2hvc3QgeworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJbmFuZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJc3RydWN0IGRldmljZQkJKmRldjsKKworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJaW50CQkJc3BhcmVfb25seTsKKwlpbnQJCQlzdGF0dXNfcmVxdWVzdDsKKwlpbnQJCQlwYWdlc2l6ZV8yazsKKwl1aW50MTZfdAkJY29sX2FkZHI7CisJc3RydWN0IGNsawkJKmNsazsKKwlpbnQJCQljbGtfYWN0OworCWludAkJCWlycTsKKworCXdhaXRfcXVldWVfaGVhZF90CWlycV93YWl0cTsKK307CisKKy8qIERlZmluZSBkZWxheXMgaW4gbWljcm9zZWMgZm9yIE5BTkQgZGV2aWNlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgVFJPUF9VU19ERUxBWSAgIDIwMDAKKy8qIE1hY3JvcyB0byBnZXQgYnl0ZSBhbmQgYml0IHBvc2l0aW9ucyBvZiBFQ0MgKi8KKyNkZWZpbmUgQ09MUE9TKHgpICAoKHgpID4+IDMpCisjZGVmaW5lIEJJVFBPUyh4KSAoKHgpICYgMHhmKQorCisvKiBEZWZpbmUgc2luZ2xlIGJpdCBFcnJvciBwb3NpdGlvbnMgaW4gTWFpbiAmIFNwYXJlIGFyZWEgKi8KKyNkZWZpbmUgTUFJTl9TSU5HTEVCSVRfRVJST1IgMHg0CisjZGVmaW5lIFNQQVJFX1NJTkdMRUJJVF9FUlJPUiAweDEKKworLyogT09CIHBsYWNlbWVudCBibG9jayBmb3IgdXNlIHdpdGggaGFyZHdhcmUgZWNjIGdlbmVyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfOCA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA1fSwgezExLCA1fSwgfQorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA2fSwgezEyLCA0fSwgfQorfTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworI2VuZGlmCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteGNfbmZjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CisKKwl1aW50MTZfdCB0bXA7CisKKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCB8PSBORkNfSU5UX01TSzsgLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd2FrZV91cCgmaG9zdC0+aXJxX3dhaXRxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgTkFOREZDIHRvIHdhaXQgZm9yIHRoZSBiYXNpYyBvcGVyYXRpb24gdG8KKyAqIGNvbXBsZXRlIGJ5IGNoZWNraW5nIHRoZSBJTlQgYml0IG9mIGNvbmZpZzIgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHdhaXRfb3BfZG9uZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgaW50IG1heF9yZXRyaWVzLAorCQkJCXVpbnQxNl90IHBhcmFtLCBpbnQgdXNlaXJxKQoreworCXVpbnQzMl90IHRtcDsKKworCWlmICh1c2VpcnEpIHsKKwkJaWYgKChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgPT0gMCkgeworCisJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQkJdG1wICAmPSB+TkZDX0lOVF9NU0s7CS8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKwkJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwkJCXdhaXRfZXZlbnQoaG9zdC0+aXJxX3dhaXRxLAorCQkJCXJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKTsKKworCQkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKG1heF9yZXRyaWVzLS0gPiAwKSB7CisJCQlpZiAocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKSAmIE5GQ19JTlQpIHsKKwkJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgxKTsKKwkJfQorCQlpZiAobWF4X3JldHJpZXMgPD0gMCkKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlcyglZCk6IElOVCBub3Qgc2V0XG4iLAorCQkJICAgICAgX19mdW5jX18sIHBhcmFtKTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZSBzcGVjaWZpZWQgY29tbWFuZCB0byB0aGUgTkFORCBkZXZpY2UgYW5kCisgKiB3YWl0cyBmb3IgY29tcGxldGlvbi4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfY21kKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBjbWQsIGludCB1c2VpcnEpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfY21kKGhvc3QsIDB4JXgsICVkKVxuIiwgY21kLCB1c2VpcnEpOworCisJd3JpdGV3KGNtZCwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9DTUQpOworCXdyaXRldyhORkNfQ01ELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGNtZCwgdXNlaXJxKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhZGRyZXNzIChvciBwYXJ0aWFsIGFkZHJlc3MpIHRvIHRoZQorICogTkFORCBkZXZpY2UuIFRoZSBhZGRyZXNzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzb3VyY2UvZGVzdGluYXRpb24gZm9yCisgKiBhIE5BTkQgY29tbWFuZC4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfYWRkcihzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgdWludDE2X3QgYWRkciwgaW50IGlzbGFzdCkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9hZGRyKGhvc3QsIDB4JXggJWQpXG4iLCBhZGRyLCBpc2xhc3QpOworCisJd3JpdGV3KGFkZHIsIGhvc3QtPnJlZ3MgKyBORkNfRkxBU0hfQUREUik7CisJd3JpdGV3KE5GQ19BRERSLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGFkZHIsIGlzbGFzdCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBpbml0YXRlIHRoZSB0cmFuc2ZlcgorICogb2YgZGF0YSBjdXJyZW50bHkgaW4gdGhlIE5BTkRGQyBSQU0gYnVmZmVyIHRvIHRoZSBOQU5EIGRldmljZS4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfcHJvZ19wYWdlKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50OF90IGJ1Zl9pZCwKKwkJCWludCBzcGFyZV9vbmx5KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX3Byb2dfcGFnZSAoJWQpXG4iLCBzcGFyZV9vbmx5KTsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKworCS8qIENvbmZpZ3VyZSBzcGFyZSBvciBwYWdlK3NwYXJlIGFjY2VzcyAqLworCWlmICghaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJdWludDE2X3QgY29uZmlnMSA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCWlmIChzcGFyZV9vbmx5KQorCQkJY29uZmlnMSB8PSBORkNfU1BfRU47CisJCWVsc2UKKwkJCWNvbmZpZzEgJj0gfihORkNfU1BfRU4pOworCQl3cml0ZXcoY29uZmlnMSwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwl3cml0ZXcoTkZDX0lOUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0cyBOQU5ERkMgdG8gaW5pdGF0ZWQgdGhlIHRyYW5zZmVyIG9mIGRhdGEgZnJvbSB0aGUKKyAqIE5BTkQgZGV2aWNlIGludG8gaW4gdGhlIE5BTkRGQyByYW0gYnVmZmVyLiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAorCQlpbnQgc3BhcmVfb25seSkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9yZWFkX3BhZ2UgKCVkKVxuIiwgc3BhcmVfb25seSk7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgcGFnZSByZWFkL3dyaXRlICovCisJd3JpdGV3KGJ1Zl9pZCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBDb25maWd1cmUgc3BhcmUgb3IgcGFnZStzcGFyZSBhY2Nlc3MgKi8KKwlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCXVpbnQzMl90IGNvbmZpZzEgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQlpZiAoc3BhcmVfb25seSkKKwkJCWNvbmZpZzEgfD0gTkZDX1NQX0VOOworCQllbHNlCisJCQljb25maWcxICY9IH5ORkNfU1BfRU47CisJCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCXdyaXRldyhORkNfT1VUUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0IHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlIE5BTkQgZGV2aWNlIElELiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaG9zdC0+bmFuZDsKKwl1aW50MTZfdCB0bXA7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgZGV2aWNlIElEIG91dHB1dCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBJRCBpbnRvIG1haW4gYnVmZmVyICovCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgJj0gfk5GQ19TUF9FTjsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd3JpdGV3KE5GQ19JRCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKworCS8qIFdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLworCXdhaXRfb3BfZG9uZShob3N0LCBUUk9QX1VTX0RFTEFZLCAwLCB0cnVlKTsKKworCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQl2b2lkIF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJCS8qIGNvbXByZXNzIHRoZSBJRCBpbmZvICovCisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDIpLCBtYWluX2J1ZiArIDEpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyA0KSwgbWFpbl9idWYgKyAyKTsKKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgNiksIG1haW5fYnVmICsgMyk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDgpLCBtYWluX2J1ZiArIDQpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyAxMCksIG1haW5fYnVmICsgNSk7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlCisgKiBOQU5EIGRldmljZSBzdGF0dXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzLiAqLworc3RhdGljIHVpbnQxNl90IGdldF9kZXZfc3RhdHVzKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMTsKKwl1aW50MzJfdCBzdG9yZTsKKwl1aW50MTZfdCByZXQsIHRtcDsKKwkvKiBJc3N1ZSBzdGF0dXMgcmVxdWVzdCB0byBOQU5EIGRldmljZSAqLworCisJLyogc3RvcmUgdGhlIG1haW4gYXJlYTEgZmlyc3Qgd29yZCwgbGF0ZXIgZG8gcmVjb3ZlcnkgKi8KKwlzdG9yZSA9IHJlYWRsKG1haW5fYnVmKTsKKwkvKiBOQU5ERkMgYnVmZmVyIDEgaXMgdXNlZCBmb3IgZGV2aWNlIHN0YXR1cyB0byBwcmV2ZW50CisJICogY29ycnVwdGlvbiBvZiByZWFkL3dyaXRlIGJ1ZmZlciBvbiBzdGF0dXMgcmVxdWVzdHMuICovCisJd3JpdGV3KDEsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBzdGF0dXMgaW50byBtYWluIGJ1ZmZlciAqLworCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJdG1wICY9IH5ORkNfU1BfRU47CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCXdyaXRldyhORkNfU1RBVFVTLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCisJLyogU3RhdHVzIGlzIHBsYWNlZCBpbiBmaXJzdCB3b3JkIG9mIG1haW4gYnVmZmVyICovCisJLyogZ2V0IHN0YXR1cywgdGhlbiByZWNvdmVyeSBhcmVhIDEgZGF0YSAqLworCXJldCA9IHJlYWR3KG1haW5fYnVmKTsKKwl3cml0ZWwoc3RvcmUsIG1haW5fYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb25zIGlzIHVzZWQgYnkgdXBwZXIgbGF5ZXIgdG8gY2hlY2tzIGlmIGRldmljZSBpcyByZWFkeSAqLworc3RhdGljIGludCBteGNfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJLyoKKwkgKiBORkMgaGFuZGxlcyBSL0IgaW50ZXJuYWxseS4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uCisJICogYWx3YXlzIHJldHVybnMgc3RhdHVzIGFzIHJlYWR5LgorCSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBteGNfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCS8qCisJICogSWYgSFcgRUNDIGlzIGVuYWJsZWQsIHdlIHR1cm4gaXQgb24gZHVyaW5nIGluaXQuIFRoZXJlIGlzCisJICogbm8gbmVlZCB0byBlbmFibGUgYWdhaW4gaGVyZS4KKwkgKi8KK30KKworc3RhdGljIGludCBteGNfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkJCSB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworCS8qCisJICogMS1CaXQgZXJyb3JzIGFyZSBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZCBpbiBIVy4gIE5vIG5lZWQgZm9yCisJICogYWRkaXRpb25hbCBjb3JyZWN0aW9uLiAgMi1CaXQgZXJyb3JzIGNhbm5vdCBiZSBjb3JyZWN0ZWQgYnkKKwkgKiBIVyBFQ0MsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIGZhaWx1cmUKKwkgKi8KKwl1aW50MTZfdCBlY2Nfc3RhdHVzID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVCk7CisKKwlpZiAoKChlY2Nfc3RhdHVzICYgMHgzKSA9PSAyKSB8fCAoKGVjY19zdGF0dXMgPj4gMikgPT0gMikpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIk1YQ19OQU5EOiBIV0VDQyB1bmNvcnJlY3RhYmxlIDItYml0IEVDQyBlcnJvclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteGNfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJCQkgIHVfY2hhciAqZWNjX2NvZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1X2NoYXIgbXhjX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50OF90IHJldCA9IDA7CisJdWludDE2X3QgY29sLCByZF93b3JkOworCXVpbnQxNl90IF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJdWludDE2X3QgX19pb21lbSAqc3BhcmVfYnVmID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwOworCisJLyogQ2hlY2sgZm9yIHN0YXR1cyByZXF1ZXN0ICovCisJaWYgKGhvc3QtPnN0YXR1c19yZXF1ZXN0KQorCQlyZXR1cm4gZ2V0X2Rldl9zdGF0dXMoaG9zdCkgJiAweEZGOworCisJLyogR2V0IGNvbHVtbiBmb3IgMTYtYml0IGFjY2VzcyAqLworCWNvbCA9IGhvc3QtPmNvbF9hZGRyID4+IDE7CisKKwkvKiBJZiB3ZSBhcmUgYWNjZXNzaW5nIHRoZSBzcGFyZSByZWdpb24gKi8KKwlpZiAoaG9zdC0+c3BhcmVfb25seSkKKwkJcmRfd29yZCA9IHJlYWR3KCZzcGFyZV9idWZbY29sXSk7CisJZWxzZQorCQlyZF93b3JkID0gcmVhZHcoJm1haW5fYnVmW2NvbF0pOworCisJLyogUGljayB1cHBlci9sb3dlciBieXRlIG9mIHdvcmQgZnJvbSBSQU0gYnVmZmVyICovCisJaWYgKGhvc3QtPmNvbF9hZGRyICYgMHgxKQorCQlyZXQgPSAocmRfd29yZCA+PiA4KSAmIDB4RkY7CisJZWxzZQorCQlyZXQgPSByZF93b3JkICYgMHhGRjsKKworCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyKys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDE2X3QgbXhjX25hbmRfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50MTZfdCBjb2wsIHJkX3dvcmQsIHJldDsKKwl1aW50MTZfdCBfX2lvbWVtICpwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfcmVhZF93b3JkKGNvbCA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIpOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJcCA9IChob3N0LT5yZWdzICsgTUFJTl9BUkVBMCkgKyAoY29sID4+IDEpOworCWVsc2UKKwkJcCA9IChob3N0LT5yZWdzICsgU1BBUkVfQVJFQTApICsgKChjb2wgLSBtdGQtPndyaXRlc2l6ZSkgPj4gMSk7CisKKwlpZiAoY29sICYgMSkgeworCQlyZF93b3JkID0gcmVhZHcocCk7CisJCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhmZjsKKwkJcmRfd29yZCA9IHJlYWR3KCZwWzFdKTsKKwkJcmV0IHw9IChyZF93b3JkIDw8IDgpICYgMHhmZjAwOworCisJfSBlbHNlCisJCXJldCA9IHJlYWR3KHApOworCisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2wgKyAyOworCisJcmV0dXJuIHJldDsKK30KKworLyogV3JpdGUgZGF0YSBvZiBsZW5ndGggbGVuIHRvIGJ1ZmZlciBidWYuIFRoZSBkYXRhIHRvIGJlCisgKiB3cml0dGVuIG9uIE5BTkQgRmxhc2ggaXMgZmlyc3QgY29waWVkIHRvIFJBTWJ1ZmZlci4gQWZ0ZXIgdGhlIERhdGEgSW5wdXQKKyAqIE9wZXJhdGlvbiBieSB0aGUgTkZDLCB0aGUgZGF0YSBpcyB3cml0dGVuIHRvIE5BTkQgRmxhc2ggKi8KK3N0YXRpYyB2b2lkIG14Y19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJaW50IG4sIGNvbCwgaSA9IDA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF93cml0ZV9idWYoY29sID0gJWQsIGxlbiA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIsCisJICAgICAgbGVuKTsKKworCWNvbCA9IGhvc3QtPmNvbF9hZGRyOworCisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSAtIGNvbDsKKwluID0gbWluKGxlbiwgbik7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICIlczolZDogY29sID0gJWQsIG4gPSAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBjb2wsIG4pOworCisJd2hpbGUgKG4pIHsKKwkJdm9pZCBfX2lvbWVtICpwOworCisJCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJCXAgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMCArIChjb2wgJiB+Myk7CisJCWVsc2UKKwkJCXAgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTAgLQorCQkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczolZDogcCA9ICVwXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgX19MSU5FX18sIHApOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGEgPSAwOworCisJCQlpZiAoY29sICYgMyB8fCBuIDwgNCkKKwkJCQlkYXRhID0gcmVhZGwocCk7CisKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmZmZmZmMDApIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAwKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmMDBmZikgfAorCQkJCQkgICAgKGJ1ZltpKytdIDw8IDgpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMjoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmMDBmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMTYpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMzoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweDAwZmZmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKworCQkJd3JpdGVsKGRhdGEsIHApOworCQl9IGVsc2UgeworCQkJaW50IG0gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKworCQkJaWYgKGNvbCA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQltICs9IG10ZC0+b29ic2l6ZTsKKworCQkJbSA9IG1pbihuLCBtKSAmIH4zOworCisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCQkJICAgICAgIiVzOiVkOiBuID0gJWQsIG0gPSAlZCwgaSA9ICVkLCBjb2wgPSAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCAgX19MSU5FX18sIG4sIG0sIGksIGNvbCk7CisKKwkJCW1lbWNweShwLCAmYnVmW2ldLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworfQorCisvKiBSZWFkIHRoZSBkYXRhIGJ1ZmZlciBmcm9tIHRoZSBOQU5EIEZsYXNoLiBUbyByZWFkIHRoZSBkYXRhIGZyb20gTkFORAorICogRmxhc2ggZmlyc3QgdGhlIGRhdGEgb3V0cHV0IGN5Y2xlIGlzIGluaXRpYXRlZCBieSB0aGUgTkZDLCB3aGljaCBjb3BpZXMKKyAqIHRoZSBkYXRhIHRvIFJBTWJ1ZmZlci4gVGhpcyBkYXRhIG9mIGxlbmd0aCBsZW4gaXMgdGhlbiBjb3BpZWQgdG8gYnVmZmVyIGJ1Zi4KKyAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgbiwgY29sLCBpID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX3JlYWRfYnVmKGNvbCA9ICVkLCBsZW4gPSAlZClcbiIsIGhvc3QtPmNvbF9hZGRyLCBsZW4pOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sOworCW4gPSBtaW4obGVuLCBuKTsKKworCXdoaWxlIChuKSB7CisJCXZvaWQgX19pb21lbSAqcDsKKworCQlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUpCisJCQlwID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTAgKyAoY29sICYgfjMpOworCQllbHNlCisJCQlwID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwIC0KKwkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGE7CisKKwkJCWRhdGEgPSByZWFkbChwKTsKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gOCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAyOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhID4+IDE2KTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDM6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBtID0gbXRkLT53cml0ZXNpemUgLSBjb2w7CisKKwkJCWlmIChjb2wgPj0gbXRkLT53cml0ZXNpemUpCisJCQkJbSArPSBtdGQtPm9vYnNpemU7CisKKwkJCW0gPSBtaW4obiwgbSkgJiB+MzsKKwkJCW1lbWNweSgmYnVmW2ldLCBwLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworCit9CisKKy8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHZlcmlmeSB0aGUgZGF0YSBpbiBOQU5EIEZsYXNoCisgKiB3aXRoIHRoZSBkYXRhIGluIHRoZSBidWYuICovCitzdGF0aWMgaW50IG14Y19uYW5kX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB1cHBlciBsYXllciBmb3Igc2VsZWN0IGFuZAorICogZGVzZWxlY3Qgb2YgdGhlIE5BTkQgY2hpcCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworI2lmZGVmIENPTkZJR19NVERfTkFORF9NWENfRk9SQ0VfQ0UKKwlpZiAoY2hpcCA+IDApIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIkVSUk9SOiAgSWxsZWdhbCBjaGlwIHNlbGVjdCAoY2hpcCA9ICVkKVxuIiwgY2hpcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hpcCA9PSAtMSkgeworCQl3cml0ZXcocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKSAmIH5ORkNfQ0UsCisJCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpIHwgTkZDX0NFLAorCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKyNlbmRpZgorCisJc3dpdGNoIChjaGlwKSB7CisJY2FzZSAtMToKKwkJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJCWlmIChob3N0LT5jbGtfYWN0KSB7CisJCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQkJaG9zdC0+Y2xrX2FjdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCQlpZiAoIWhvc3QtPmNsa19hY3QpIHsKKwkJCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwkJCWhvc3QtPmNsa19hY3QgPSAxOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBVc2VkIGJ5IHRoZSB1cHBlciBsYXllciB0byB3cml0ZSBjb21tYW5kIHRvIE5BTkQgRmxhc2ggZm9yCisgKiBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0byBiZSBjYXJyaWVkIG91dCBvbiBOQU5EIEZsYXNoICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLAorCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCWludCB1c2VpcnEgPSB0cnVlOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfY29tbWFuZCAoY21kID0gMHgleCwgY29sID0gMHgleCwgcGFnZSA9IDB4JXgpXG4iLAorCSAgICAgIGNvbW1hbmQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKKworCS8qIFJlc2V0IGNvbW1hbmQgc3RhdGUgaW5mb3JtYXRpb24gKi8KKwlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IGZhbHNlOworCisJLyogQ29tbWFuZCBwcmUtcHJvY2Vzc2luZyBzdGVwICovCisJc3dpdGNoIChjb21tYW5kKSB7CisKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwkJaG9zdC0+Y29sX2FkZHIgPSAwOworCQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW47CisJCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKwkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7CisJCXVzZWlycSA9IGZhbHNlOworCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQljb21tYW5kID0gTkFORF9DTURfUkVBRDA7IC8qIG9ubHkgUkVBRDAgaXMgdmFsaWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKgorCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKKwkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCisJCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVworCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCisJCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgorCQkJICovCisJCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCisJCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAorCQkJCQkJcGFnZV9hZGRyKTsKKworCQkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW4gLSBtdGQtPndyaXRlc2l6ZTsKKwkJCWhvc3QtPnNwYXJlX29ubHkgPSB0cnVlOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHNwYXJlIHJlZ2lvbiAqLworCQkJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykKKwkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFET09CLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCQlob3N0LT5zcGFyZV9vbmx5ID0gZmFsc2U7CisJCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKworCQkJLyogU2V0IHByb2dyYW0gcG9pbnRlciB0byBwYWdlIHN0YXJ0ICovCisJCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQorCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQUQwLCBmYWxzZSk7CisJCX0KKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQkvKiBkYXRhIGluIDQgYXJlYXMgZGF0YXMgKi8KKwkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3Byb2dfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CisJCXVzZWlycSA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gKi8KKwlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB1c2VpcnEpOworCisJLyogV3JpdGUgb3V0IGNvbHVtbiBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY29sdW1uICE9IC0xKSB7CisJCS8qCisJCSAqIE1YQyBOQU5ERkMgY2FuIG9ubHkgcGVyZm9ybSBmdWxsIHBhZ2Urc3BhcmUgb3IKKwkJICogc3BhcmUtb25seSByZWFkL3dyaXRlLiAgV2hlbiB0aGUgdXBwZXIgbGF5ZXJzCisJCSAqIGxheWVycyBwZXJmb3JtIGEgcmVhZC93cml0ZSBidWYgb3BlcmF0aW9uLAorCQkgKiB3ZSB3aWxsIHVzZWQgdGhlIHNhdmVkIGNvbHVtbiBhZHJlc3MgdG8gaW5kZXggaW50bworCQkgKiB0aGUgZnVsbCBwYWdlLgorCQkgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIDAsIHBhZ2VfYWRkciA9PSAtMSk7CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCS8qIGFub3RoZXIgY29sIGFkZHIgY3ljbGUgZm9yIDJrIHBhZ2UgKi8KKwkJCXNlbmRfYWRkcihob3N0LCAwLCBmYWxzZSk7CisJfQorCisJLyogV3JpdGUgb3V0IHBhZ2UgYWRkcmVzcywgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHBhZ2VfYWRkciAhPSAtMSkgeworCQkvKiBwYWRkcl8wIC0gcF9hZGRyXzcgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgJiAweGZmKSwgZmFsc2UpOworCisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweEZGLCBmYWxzZSk7CisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMDApCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBoaWdoZXIgZGVuc2l0eSBkZXZpY2VzICovCisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMCkgeworCQkJCS8qIHBhZGRyXzggLSBwYWRkcl8xNSAqLworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgZmFsc2UpOworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYsIHRydWUpOworCQkJfSBlbHNlCisJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCB0cnVlKTsKKwkJfQorCX0KKworCS8qIENvbW1hbmQgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKworCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCWNhc2UgTkFORF9DTURfUkVBRDA6CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJLyogc2VuZCByZWFkIGNvbmZpcm0gY29tbWFuZCAqLworCQkJc2VuZF9jbWQoaG9zdCwgTkFORF9DTURfUkVBRFNUQVJULCB0cnVlKTsKKwkJCS8qIHJlYWQgZm9yIGVhY2ggQVJFQSAqLworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAxLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDIsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMywgaG9zdC0+c3BhcmVfb25seSk7CisJCX0gZWxzZQorCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCXNlbmRfcmVhZF9pZChob3N0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfRVJBU0UyOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y25kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1aW50MTZfdCB0bXA7CisJaW50IGVyciA9IDAsIG5yX3BhcnRzID0gMDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLworCWhvc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhjX25hbmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCS8qIHN0cnVjdHVyZXMgbXVzdCBiZSBsaW5rZWQgKi8KKwl0aGlzID0gJmhvc3QtPm5hbmQ7CisJbXRkID0gJmhvc3QtPm10ZDsKKwltdGQtPnByaXYgPSB0aGlzOworCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIDUwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSA1OworCisJdGhpcy0+cHJpdiA9IGhvc3Q7CisJdGhpcy0+ZGV2X3JlYWR5ID0gbXhjX25hbmRfZGV2X3JlYWR5OworCXRoaXMtPmNtZGZ1bmMgPSBteGNfbmFuZF9jb21tYW5kOworCXRoaXMtPnNlbGVjdF9jaGlwID0gbXhjX25hbmRfc2VsZWN0X2NoaXA7CisJdGhpcy0+cmVhZF9ieXRlID0gbXhjX25hbmRfcmVhZF9ieXRlOworCXRoaXMtPnJlYWRfd29yZCA9IG14Y19uYW5kX3JlYWRfd29yZDsKKwl0aGlzLT53cml0ZV9idWYgPSBteGNfbmFuZF93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBteGNfbmFuZF9yZWFkX2J1ZjsKKwl0aGlzLT52ZXJpZnlfYnVmID0gbXhjX25hbmRfdmVyaWZ5X2J1ZjsKKworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mY19jbGsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpCisJCWdvdG8gZWNsazsKKworCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwlob3N0LT5jbGtfYWN0ID0gMTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcmVzOworCX0KKworCWhvc3QtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+cmVncykgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVyZXM7CisJfQorCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgfD0gTkZDX0lOVF9NU0s7CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPmlycV93YWl0cSk7CisKKwlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBteGNfbmZjX2lycSwgMCwgIm14Y19uZCIsIGhvc3QpOworCWlmIChlcnIpCisJCWdvdG8gZWlycTsKKworCWlmIChwZGF0YS0+aHdfZWNjKSB7CisJCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBteGNfbmFuZF9jYWxjdWxhdGVfZWNjOworCQl0aGlzLT5lY2MuaHdjdGwgPSBteGNfbmFuZF9lbmFibGVfaHdlY2M7CisJCXRoaXMtPmVjYy5jb3JyZWN0ID0gbXhjX25hbmRfY29ycmVjdF9kYXRhOworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQl0bXAgfD0gTkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9IGVsc2UgeworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCXRtcCAmPSB+TkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwkvKiBSZXNldCBOQU5EICovCisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCisJLyogcHJlc2V0IG9wZXJhdGlvbiAqLworCS8qIFVubG9jayB0aGUgaW50ZXJuYWwgUkFNIEJ1ZmZlciAqLworCXdyaXRldygweDIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHKTsKKworCS8qIEJsb2NrcyB0byBiZSB1bmxvY2tlZCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfVU5MT0NLU1RBUlRfQkxLQUREUik7CisJd3JpdGV3KDB4NDAwMCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tFTkRfQkxLQUREUik7CisKKwkvKiBVbmxvY2sgQmxvY2sgQ29tbWFuZCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZSAqLworCXdyaXRldygweDQsIGhvc3QtPnJlZ3MgKyBORkNfV1JQUk9UKTsKKworCS8qIE5BTkQgYnVzIHdpZHRoIGRldGVybWluZXMgYWNjZXNzIGZ1bnRpb25zIHVzZWQgYnkgdXBwZXIgbGF5ZXIgKi8KKwlpZiAocGRhdGEtPndpZHRoID09IDIpIHsKKwkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzE2OworCX0KKworCWhvc3QtPnBhZ2VzaXplXzJrID0gMDsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obXRkLCAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiTVhDX05EOiBVbmFibGUgdG8gZmluZCBhbnkgTkFORCBkZXZpY2UuXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVzY2FuOworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJbnJfcGFydHMgPQorCSAgICBwYXJzZV9tdGRfcGFydGl0aW9ucyhtdGQsIHBhcnRfcHJvYmVzLCAmaG9zdC0+cGFydHMsIDApOworCWlmIChucl9wYXJ0cyA+IDApCisJCWFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIGhvc3QtPnBhcnRzLCBucl9wYXJ0cyk7CisJZWxzZQorI2VuZGlmCisJeworCQlwcl9pbmZvKCJSZWdpc3RlcmluZyAlcyBhcyB3aG9sZSBkZXZpY2VcbiIsIG10ZC0+bmFtZSk7CisJCWFkZF9tdGRfZGV2aWNlKG10ZCk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlyZXR1cm4gMDsKKworZXNjYW46CisJZnJlZV9pcnEoaG9zdC0+aXJxLCBOVUxMKTsKK2VpcnE6CisJaW91bm1hcChob3N0LT5yZWdzKTsKK2VyZXM6CisJY2xrX3B1dChob3N0LT5jbGspOworZWNsazoKKwlrZnJlZShob3N0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Y25kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfcHV0KGhvc3QtPmNsayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCW5hbmRfcmVsZWFzZSgmaG9zdC0+bXRkKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIE5VTEwpOworCWlvdW5tYXAoaG9zdC0+cmVncyk7CisJa2ZyZWUoaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBteGNuZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNWENfTkQgOiBOQU5EIHN1c3BlbmRcbiIpOworCWlmIChpbmZvKQorCQlyZXQgPSBpbmZvLT5zdXNwZW5kKGluZm8pOworCisJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJY2xrX2Rpc2FibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14Y25kX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgcmVzdW1lXG4iKTsKKwkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCWNsa19lbmFibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlpZiAoaW5mbykKKwkJaW5mby0+cmVzdW1lKGluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKKyMgZGVmaW5lIG14Y25kX3N1c3BlbmQgICBOVUxMCisjIGRlZmluZSBteGNuZF9yZXN1bWUgICAgTlVMTAorI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgfSwKKwkucmVtb3ZlID0gX19leGl0X3AobXhjbmRfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IG14Y25kX3N1c3BlbmQsCisJLnJlc3VtZSA9IG14Y25kX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19uZF9pbml0KHZvaWQpCit7CisJLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgc3RydWN0dXJlLiAqLworCXByX2luZm8oIk1YQyBNVEQgbmFuZCBEcml2ZXJcbiIpOworCWlmIChwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm14Y25kX2RyaXZlciwgbXhjbmRfcHJvYmUpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIGZvciBteGNuZF9kcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteGNfbmRfY2xlYW51cCh2b2lkKQoreworCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXhjX25kX2luaXQpOworbW9kdWxlX2V4aXQobXhjX25kX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNWEMgTkFORCBNVEQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCBkMTEyOWJhLi4wYTljOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTgwMSw5ICs4MDEsOSBAQAogICogbmFuZF9yZWFkX3N1YnBhZ2UgLSBbUkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHN1Yi1wYWdlIHJlYWQgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQotICogQGRhdGFvZnMJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQotICogQHJlYWRsZW4JZGF0YSBsZW5ndGgKLSAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBkYXRhX29mZnM6CW9mZnNldCBvZiByZXF1ZXN0ZWQgZGF0YSB3aXRoaW4gdGhlIHBhZ2UKKyAqIEByZWFkbGVuOglkYXRhIGxlbmd0aAorICogQGJ1ZnBvaToJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9zdWJwYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50MzJfdCBkYXRhX29mZnMsIHVpbnQzMl90IHJlYWRsZW4sIHVpbnQ4X3QgKmJ1ZnBvaSkKIHsKQEAgLTIwNDIsNyArMjA0Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9FUkFTSU5HKTsKQEAgLTIzMTgsNiArMjMxOCwxMiBAQAogCS8qIFNlbGVjdCB0aGUgZGV2aWNlICovCiAJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAwKTsKIAorCS8qCisJICogUmVzZXQgdGhlIGNoaXAsIHJlcXVpcmVkIGJ5IHNvbWUgY2hpcHMgKGUuZy4gTWljcm9uIE1UMjlGeEd4eHh4eCkKKwkgKiBhZnRlciBwb3dlci11cAorCSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKKwogCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCkBAIC0yNDg4LDYgKzI0OTQsOCBAQAogCS8qIENoZWNrIGZvciBhIGNoaXAgYXJyYXkgKi8KIAlmb3IgKGkgPSAxOyBpIDwgbWF4Y2hpcHM7IGkrKykgewogCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGkpOworCQkvKiBTZWUgY29tbWVudCBpbiBuYW5kX2dldF9mbGFzaF90eXBlIGZvciByZXNldCAqLworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CiAJCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKIAkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwppbmRleCA5MThhODA2Li44NjgxNDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCkBAIC0xLDEzICsxLDE4IEBACiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFuIEVDQyBhbGdvcml0aG0gZnJvbSBUb3NoaWJhIHRoYXQgZGV0ZWN0cyBhbmQKLSAqIGNvcnJlY3RzIDEgYml0IGVycm9ycyBpbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFsZ29yaXRobSB0aGF0IGRldGVjdHMgYW5kIGNvcnJlY3RzIDEgYml0CisgKiBlcnJvcnMgaW4gYSAyNTYgYnl0ZSBibG9jayBvZiBkYXRhLgogICoKICAqIGRyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQotICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGliYSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCisgKiAgICAgICAgICAgICAgICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgRUNDIGltcGxlbWVudGF0aW9uIHdoaWNoIHdhcyB3cml0dGVuIGJ5OgorICogICBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqICAgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUpCisgKgorICogSW5mb3JtYXRpb24gb24gaG93IHRoaXMgYWxnb3JpdGhtIHdvcmtzIGFuZCBob3cgaXQgd2FzIGRldmVsb3BlZAorICogY2FuIGJlIGZvdW5kIGluIERvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dAogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIzLDE3NCArMjgsNDc1IEBACiAgKiB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCiAgKgotICogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZQotICogbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGVzZSBmaWxlcywgb3IgeW91IGNvbXBpbGUgdGhlc2UKLSAqIGZpbGVzIGFuZCBsaW5rIHRoZW0gd2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGVzZQotICogZmlsZXMsIHRoZXNlIGZpbGVzIGRvIG5vdCBieSB0aGVtc2VsdmVzIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZQotICogY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvcgotICogdGhlc2UgZmlsZXMgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24KLSAqIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAqLwogCisvKgorICogVGhlIFNUQU5EQUxPTkUgbWFjcm8gaXMgdXNlZnVsIHdoZW4gcnVubmluZyB0aGUgY29kZSBvdXRzaWRlIHRoZSBrZXJuZWwKKyAqIGUuZy4gd2hlbiBydW5uaW5nIHRoZSBjb2RlIGluIGEgdGVzdGJlZCBvciBhIGJlbmNobWFyayBwcm9ncmFtLgorICogV2hlbiBTVEFOREFMT05FIGlzIHVzZWQsIHRoZSBtb2R1bGUgcmVsYXRlZCBtYWNyb3MgYXJlIGNvbW1lbnRlZCBvdXQKKyAqIGFzIHdlbGwgYXMgdGhlIGxpbnV4IGluY2x1ZGUgZmlsZXMuCisgKiBJbnN0ZWFkIGEgcHJpdmF0ZSBkZWZpbml0aW9uIG9mIG10ZF9pbmZvIGlzIGdpdmVuIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyCisgKiAodGhlIGNvZGUgZG9lcyBub3QgdXNlIG10ZF9pbmZvLCBzbyB0aGUgY29kZSBkb2VzIG5vdCBjYXJlKQorICovCisjaWZuZGVmIFNUQU5EQUxPTkUKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CitzdHJ1Y3QgbXRkX2luZm87CisjZGVmaW5lIEVYUE9SVF9TWU1CT0woeCkgIC8qIHggKi8KKworI2RlZmluZSBNT0RVTEVfTElDRU5TRSh4KQkvKiB4ICovCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoeCkJLyogeCAqLworI2RlZmluZSBNT0RVTEVfREVTQ1JJUFRJT04oeCkJLyogeCAqLworCisjZGVmaW5lIHByaW50ayBwcmludGYKKyNkZWZpbmUgS0VSTl9FUlIJCSIiCisjZW5kaWYKIAogLyoKLSAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKKyAqIGludnBhcml0eSBpcyBhIDI1NiBieXRlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhlIG9kZCBwYXJpdHkKKyAqIGZvciBlYWNoIGJ5dGUuIFNvIGlmIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUgaXMgZXZlbiwKKyAqIHRoZSBhcnJheSBlbGVtZW50IGlzIDEsIGFuZCB3aGVuIHRoZSBudW1iZXIgb2YgYml0cyBpcyBvZGQKKyAqIHRoZSBhcnJheSBlbGVlbW50IGlzIDAuCiAgKi8KLXN0YXRpYyBjb25zdCB1X2NoYXIgbmFuZF9lY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKK3N0YXRpYyBjb25zdCBjaGFyIGludnBhcml0eVsyNTZdID0geworCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEKK307CisKKy8qCisgKiBiaXRzcGVyYnl0ZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUKKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nIGFuZCByZXBhaXJpbmcgcGFyaXR5CisgKiAoYSBwcmVjYWxjdWxhdGVkIHZhbHVlIHNsaWdodGx5IGltcHJvdmVzIHBlcmZvcm1hbmNlKQorICovCitzdGF0aWMgY29uc3QgY2hhciBiaXRzcGVyYnl0ZVsyNTZdID0geworCTAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgsCit9OworCisvKgorICogYWRkcmVzc2JpdHMgaXMgYSBsb29rdXAgdGFibGUgdG8gZmlsdGVyIG91dCB0aGUgYml0cyBmcm9tIHRoZSB4b3ItZWQKKyAqIGVjYyBkYXRhIHRoYXQgaWRlbnRpZnkgdGhlIGZhdWx0eSBsb2NhdGlvbi4KKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciByZXBhaXJpbmcgcGFyaXR5CisgKiBzZWUgdGhlIGNvbW1lbnRzIGluIG5hbmRfY29ycmVjdF9kYXRhIGZvciBtb3JlIGRldGFpbHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgYWRkcmVzc2JpdHNbMjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBhLCAweDBiLCAweDBiLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDBjLCAweDBjLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYKIH07CiAKIC8qKgotICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKKyAqIG5hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMtYnl0ZSBFQ0MgZm9yIDI1Ni81MTItYnl0ZQorICoJCQkgYmxvY2sKICAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKLSAqIEBkYXQ6CXJhdyBkYXRhCi0gKiBAZWNjX2NvZGU6CWJ1ZmZlciBmb3IgRUNDCisgKiBAYnVmOglpbnB1dCBidWZmZXIgd2l0aCByYXcgZGF0YQorICogQGNvZGU6CW91dHB1dCBidWZmZXIgd2l0aCBFQ0MKICAqLwotaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCi0JCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQoraW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqY29kZSkKIHsKLQl1aW50OF90IGlkeCwgcmVnMSwgcmVnMiwgcmVnMywgdG1wMSwgdG1wMjsKIAlpbnQgaTsKKwljb25zdCB1aW50MzJfdCAqYnAgPSAodWludDMyX3QgKilidWY7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKKwl1aW50MzJfdCBjdXI7CQkvKiBjdXJyZW50IHZhbHVlIGluIGJ1ZmZlciAqLworCS8qIHJwMC4ucnAxNS4ucnAxNyBhcmUgdGhlIHZhcmlvdXMgYWNjdW11bGF0ZWQgcGFyaXRpZXMgKHBlciBieXRlKSAqLworCXVpbnQzMl90IHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworCXVpbnQzMl90IHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1LCBycDE2OworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHJwMTcpOwkvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJdWludDMyX3QgcGFyOwkJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciBhbGwgZGF0YSAqLworCXVpbnQzMl90IHRtcHBhcjsJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbjsKKwkJCQkgICBmb3IgcnAxMiwgcnAxNCBhbmQgcnAxNiBhdCB0aGUgZW5kIG9mIHRoZQorCQkJCSAgIGxvb3AgKi8KIAotCS8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCi0JcmVnMSA9IHJlZzIgPSByZWczID0gMDsKKwlwYXIgPSAwOworCXJwNCA9IDA7CisJcnA2ID0gMDsKKwlycDggPSAwOworCXJwMTAgPSAwOworCXJwMTIgPSAwOworCXJwMTQgPSAwOworCXJwMTYgPSAwOwogCi0JLyogQnVpbGQgdXAgY29sdW1uIHBhcml0eSAqLwotCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCS8qIEdldCBDUDAgLSBDUDUgZnJvbSB0YWJsZSAqLwotCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlWypkYXQrK107Ci0JCXJlZzEgXj0gKGlkeCAmIDB4M2YpOworCS8qCisJICogVGhlIGxvb3AgaXMgdW5yb2xsZWQgYSBudW1iZXIgb2YgdGltZXM7CisJICogVGhpcyBhdm9pZHMgaWYgc3RhdGVtZW50cyB0byBkZWNpZGUgb24gd2hpY2ggcnAgdmFsdWUgdG8gdXBkYXRlCisJICogQWxzbyB3ZSBwcm9jZXNzIHRoZSBkYXRhIGJ5IGxvbmd3b3Jkcy4KKwkgKiBOb3RlOiBwYXNzaW5nIHVuYWxpZ25lZCBkYXRhIG1pZ2h0IGdpdmUgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYnVmZmVycyBhcmUgYWxpZ25lZC4KKwkgKiB0bXBwYXIgaXMgdGhlIGN1bXVsYXRpdmUgc3VtIG9mIHRoaXMgaXRlcmF0aW9uLgorCSAqIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgcnAxMiwgcnAxNCwgcnAxNiBhbmQgcGFyCisJICogYWxzbyB1c2VkIGFzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHJwNiwgcnA4IGFuZCBycDEwCisJICovCisJZm9yIChpID0gMDsgaSA8IGVjY3NpemVfbXVsdCA8PCAyOyBpKyspIHsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciA9IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNiBePSB0bXBwYXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA4IF49IHRtcHBhcjsKIAotCQkvKiBBbGwgYml0IFhPUiA9IDEgPyAqLwotCQlpZiAoaWR4ICYgMHg0MCkgewotCQkJcmVnMyBePSAodWludDhfdCkgaTsKLQkJCXJlZzIgXj0gfigodWludDhfdCkgaSk7Ci0JCX0KKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwMTAgXj0gdG1wcGFyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDggXj0gY3VyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCisJCXBhciBePSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MSkgPT0gMCkKKwkJCXJwMTIgXj0gdG1wcGFyOworCQlpZiAoKGkgJiAweDIpID09IDApCisJCQlycDE0IF49IHRtcHBhcjsKKwkJaWYgKGVjY3NpemVfbXVsdCA9PSAyICYmIChpICYgMHg0KSA9PSAwKQorCQkJcnAxNiBePSB0bXBwYXI7CiAJfQogCi0JLyogQ3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5ICovCi0JdG1wMSAgPSAocmVnMyAmIDB4ODApID4+IDA7IC8qIEI3IC0+IEI3ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4ODApID4+IDE7IC8qIEI3IC0+IEI2ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4NDApID4+IDE7IC8qIEI2IC0+IEI1ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4NDApID4+IDI7IC8qIEI2IC0+IEI0ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MjApID4+IDI7IC8qIEI1IC0+IEIzICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MjApID4+IDM7IC8qIEI1IC0+IEIyICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MTApID4+IDM7IC8qIEI0IC0+IEIxICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MTApID4+IDQ7IC8qIEI0IC0+IEIwICovCisJLyoKKwkgKiBoYW5kbGUgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgbG9uZ3dvcmQgb3BlcmF0aW9ucworCSAqIHdlJ2xsIGJyaW5nIHJwNC4ucnAxNC4ucnAxNiBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5CisJICogc2hpZnRpbmcgYW5kIHhvcmluZyBmaXJzdCBmb2xkIHRoZSB1cHBlciBhbmQgbG93ZXIgMTYgYml0cywKKwkgKiB0aGVuIHRoZSB1cHBlciBhbmQgbG93ZXIgOCBiaXRzLgorCSAqLworCXJwNCBePSAocnA0ID4+IDE2KTsKKwlycDQgXj0gKHJwNCA+PiA4KTsKKwlycDQgJj0gMHhmZjsKKwlycDYgXj0gKHJwNiA+PiAxNik7CisJcnA2IF49IChycDYgPj4gOCk7CisJcnA2ICY9IDB4ZmY7CisJcnA4IF49IChycDggPj4gMTYpOworCXJwOCBePSAocnA4ID4+IDgpOworCXJwOCAmPSAweGZmOworCXJwMTAgXj0gKHJwMTAgPj4gMTYpOworCXJwMTAgXj0gKHJwMTAgPj4gOCk7CisJcnAxMCAmPSAweGZmOworCXJwMTIgXj0gKHJwMTIgPj4gMTYpOworCXJwMTIgXj0gKHJwMTIgPj4gOCk7CisJcnAxMiAmPSAweGZmOworCXJwMTQgXj0gKHJwMTQgPj4gMTYpOworCXJwMTQgXj0gKHJwMTQgPj4gOCk7CisJcnAxNCAmPSAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikgeworCQlycDE2IF49IChycDE2ID4+IDE2KTsKKwkJcnAxNiBePSAocnAxNiA+PiA4KTsKKwkJcnAxNiAmPSAweGZmOworCX0KIAotCXRtcDIgID0gKHJlZzMgJiAweDA4KSA8PCA0OyAvKiBCMyAtPiBCNyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA4KSA8PCAzOyAvKiBCMyAtPiBCNiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDA0KSA8PCAzOyAvKiBCMiAtPiBCNSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA0KSA8PCAyOyAvKiBCMiAtPiBCNCAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAyKSA8PCAyOyAvKiBCMSAtPiBCMyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAyKSA8PCAxOyAvKiBCMSAtPiBCMiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAxKSA8PCAxOyAvKiBCMCAtPiBCMSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAxKSA8PCAwOyAvKiBCNyAtPiBCMCAqLwotCi0JLyogQ2FsY3VsYXRlIGZpbmFsIEVDQyBjb2RlICovCi0jaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQllY2NfY29kZVswXSA9IH50bXAyOwotCWVjY19jb2RlWzFdID0gfnRtcDE7CisJLyoKKwkgKiB3ZSBhbHNvIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSByb3cgcGFyaXR5IGZvciBycDAuLnJwMworCSAqIFRoaXMgaXMgcHJlc2VudCBpbiBwYXIsIGJlY2F1c2UgcGFyIGlzIG5vdworCSAqIHJwMyBycDMgcnAyIHJwMiBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMiBycDIgcnAzIHJwMyBpbiBiaWcgZW5kaWFuCisJICogYXMgd2VsbCBhcworCSAqIHJwMSBycDAgcnAxIHJwMCBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMCBycDEgcnAwIHJwMSBpbiBiaWcgZW5kaWFuCisJICogRmlyc3QgY2FsY3VsYXRlIHJwMiBhbmQgcnAzCisJICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAyID0gKHBhciA+PiAxNik7CisJcnAyIF49IChycDIgPj4gOCk7CisJcnAyICY9IDB4ZmY7CisJcnAzID0gcGFyICYgMHhmZmZmOworCXJwMyBePSAocnAzID4+IDgpOworCXJwMyAmPSAweGZmOwogI2Vsc2UKLQllY2NfY29kZVswXSA9IH50bXAxOwotCWVjY19jb2RlWzFdID0gfnRtcDI7CisJcnAzID0gKHBhciA+PiAxNik7CisJcnAzIF49IChycDMgPj4gOCk7CisJcnAzICY9IDB4ZmY7CisJcnAyID0gcGFyICYgMHhmZmZmOworCXJwMiBePSAocnAyID4+IDgpOworCXJwMiAmPSAweGZmOwogI2VuZGlmCi0JZWNjX2NvZGVbMl0gPSAoKH5yZWcxKSA8PCAyKSB8IDB4MDM7CiAKKwkvKiByZWR1Y2UgcGFyIHRvIDE2IGJpdHMgdGhlbiBjYWxjdWxhdGUgcnAxIGFuZCBycDAgKi8KKwlwYXIgXj0gKHBhciA+PiAxNik7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAwID0gKHBhciA+PiA4KSAmIDB4ZmY7CisJcnAxID0gKHBhciAmIDB4ZmYpOworI2Vsc2UKKwlycDEgPSAocGFyID4+IDgpICYgMHhmZjsKKwlycDAgPSAocGFyICYgMHhmZik7CisjZW5kaWYKKworCS8qIGZpbmFsbHkgcmVkdWNlIHBhciB0byA4IGJpdHMgKi8KKwlwYXIgXj0gKHBhciA+PiA4KTsKKwlwYXIgJj0gMHhmZjsKKworCS8qCisJICogYW5kIGNhbGN1bGF0ZSBycDUuLnJwMTUuLnJwMTcKKwkgKiBub3RlIHRoYXQgcGFyID0gcnA0IF4gcnA1IGFuZCBkdWUgdG8gdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5CisJICogb2YgdGhlIF4gb3BlcmF0b3Igd2UgY2FuIHNheToKKwkgKiBycDUgPSAocGFyIF4gcnA0KTsKKwkgKiBUaGUgJiAweGZmIHNlZW1zIHN1cGVyZmx1b3VzLCBidXQgYmVuY2htYXJraW5nIGxlYXJuZWQgdGhhdAorCSAqIGxlYXZpbmcgaXQgb3V0IGdpdmVzIHNsaWdodGx5IHdvcnNlIHJlc3VsdHMuIE5vIGlkZWEgd2h5LCBwcm9iYWJseQorCSAqIGl0IGhhcyB0byBkbyB3aXRoIHRoZSB3YXkgdGhlIHBpcGVsaW5lIGluIHBlbnRpdW0gaXMgb3JnYW5pemVkLgorCSAqLworCXJwNSA9IChwYXIgXiBycDQpICYgMHhmZjsKKwlycDcgPSAocGFyIF4gcnA2KSAmIDB4ZmY7CisJcnA5ID0gKHBhciBeIHJwOCkgJiAweGZmOworCXJwMTEgPSAocGFyIF4gcnAxMCkgJiAweGZmOworCXJwMTMgPSAocGFyIF4gcnAxMikgJiAweGZmOworCXJwMTUgPSAocGFyIF4gcnAxNCkgJiAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikKKwkJcnAxNyA9IChwYXIgXiBycDE2KSAmIDB4ZmY7CisKKwkvKgorCSAqIEZpbmFsbHkgY2FsY3VsYXRlIHRoZSBlY2MgYml0cy4KKwkgKiBBZ2FpbiBoZXJlIGl0IG1pZ2h0IHNlZW0gdGhhdCB0aGVyZSBhcmUgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucworCSAqIHBvc3NpYmxlLCBidXQgYmVuY2htYXJrcyBzaG93ZWQgdGhhdCBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgZGV2ZWxvcGVkCisJICogdGhlIGNvZGUgYmVsb3cgaXMgdGhlIGZhc3Rlc3QKKwkgKi8KKyNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQworCWNvZGVbMF0gPQorCSAgICAoaW52cGFyaXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwNl0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwM10gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5W3JwMF0pOworCWNvZGVbMV0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8IDcpIHwKKwkgICAgKGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnAxM10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJdIDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwOV0gPDwgMSkgIHwKKwkgICAgKGludnBhcml0eVtycDhdKTsKKyNlbHNlCisJY29kZVsxXSA9CisJICAgIChpbnZwYXJpdHlbcnA3XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnA2XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnA1XSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnA0XSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAzXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAyXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnAxXSA8PCAxKSB8CisJICAgIChpbnZwYXJpdHlbcnAwXSk7CisJY29kZVswXSA9CisJICAgIChpbnZwYXJpdHlbcnAxNV0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwMTRdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDEzXSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMl0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwMTFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDEwXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnA5XSA8PCAxKSAgfAorCSAgICAoaW52cGFyaXR5W3JwOF0pOworI2VuZGlmCisJaWYgKGVjY3NpemVfbXVsdCA9PSAxKQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIDM7CisJZWxzZQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIChpbnZwYXJpdHlbcnAxN10gPDwgMSkgfAorCQkgICAgKGludnBhcml0eVtycDE2XSA8PCAwKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKIAotc3RhdGljIGlubGluZSBpbnQgY291bnRiaXRzKHVpbnQzMl90IGJ5dGUpCi17Ci0JaW50IHJlcyA9IDA7Ci0KLQlmb3IgKDtieXRlOyBieXRlID4+PSAxKQotCQlyZXMgKz0gYnl0ZSAmIDB4MDE7Ci0JcmV0dXJuIHJlczsKLX0KLQogLyoqCiAgKiBuYW5kX2NvcnJlY3RfZGF0YSAtIFtOQU5EIEludGVyZmFjZV0gRGV0ZWN0IGFuZCBjb3JyZWN0IGJpdCBlcnJvcihzKQogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQotICogQGRhdDoJcmF3IGRhdGEgcmVhZCBmcm9tIHRoZSBjaGlwCisgKiBAYnVmOglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKICAqIEByZWFkX2VjYzoJRUNDIGZyb20gdGhlIGNoaXAKICAqIEBjYWxjX2VjYzoJdGhlIEVDQyBjYWxjdWxhdGVkIGZyb20gcmF3IGRhdGEKICAqCi0gKiBEZXRlY3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxvY2sKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYvNTEyIGJ5dGUgYmxvY2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK2ludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAqY2FsY19lY2MpCiB7Ci0JdWludDhfdCBzMCwgczEsIHMyOworCXVuc2lnbmVkIGNoYXIgYjAsIGIxLCBiMjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfYWRkciwgYml0X2FkZHI7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKIAorCS8qCisJICogYjAgdG8gYjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQorCSAqIHdlIG1pZ2h0IG5lZWQgdGhlIHhvciByZXN1bHQgIG1vcmUgdGhhbiBvbmNlLAorCSAqIHNvIGtlZXAgdGhlbSBpbiBhIGxvY2FsIHZhcgorCSovCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQlzMCA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJYjEgPSByZWFkX2VjY1sxXSBeIGNhbGNfZWNjWzFdOwogI2Vsc2UKLQlzMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CisJYjEgPSByZWFkX2VjY1swXSBeIGNhbGNfZWNjWzBdOwogI2VuZGlmCi0JaWYgKChzMCB8IHMxIHwgczIpID09IDApCi0JCXJldHVybiAwOworCWIyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2VjY1syXTsKIAotCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KLQlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0JICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgotCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKwkvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdGZhdWx0cyAqLwogCi0JCXVpbnQzMl90IGJ5dGVvZmZzLCBiaXRudW07CisJLyogcmVwZWF0ZWQgaWYgc3RhdGVtZW50cyBhcmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdGhhbiBzd2l0Y2ggLi4uICovCisJLyogb3JkZXJlZCBpbiBvcmRlciBvZiBsaWtlbGlob29kICovCiAKLQkJYnl0ZW9mZnMgPSAoczEgPDwgMCkgJiAweDgwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMSkgJiAweDQwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMikgJiAweDIwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMykgJiAweDEwOworCWlmICgoYjAgfCBiMSB8IGIyKSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbm8gZXJyb3IgKi8KIAotCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOwotCi0JCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7Ci0JCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOwotCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKLQotCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7Ci0KKwlpZiAoKCgoYjAgXiAoYjAgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKCgoYjEgXiAoYjEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKChlY2NzaXplX211bHQgPT0gMSAmJiAoKGIyIF4gKGIyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHx8CisJICAgICAoZWNjc2l6ZV9tdWx0ID09IDIgJiYgKChiMiBeIChiMiA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSkpIHsKKwkvKiBzaW5nbGUgYml0IGVycm9yICovCisJCS8qCisJCSAqIHJwMTcvcnAxNS8xMy8xMS85LzcvNS8zLzEgaW5kaWNhdGUgd2hpY2ggYnl0ZSBpcyB0aGUgZmF1bHR5CisJCSAqIGJ5dGUsIGNwIDUvMy8xIGluZGljYXRlIHRoZSBmYXVsdHkgYml0LgorCQkgKiBBIGxvb2t1cCB0YWJsZSAoY2FsbGVkIGFkZHJlc3NiaXRzKSBpcyB1c2VkIHRvIGZpbHRlcgorCQkgKiB0aGUgYml0cyBmcm9tIHRoZSBieXRlIHRoZXkgYXJlIGluLgorCQkgKiBBIG1hcmdpbmFsIG9wdGltaXNhdGlvbiBpcyBwb3NzaWJsZSBieSBoYXZpbmcgdGhyZWUKKwkJICogZGlmZmVyZW50IGxvb2t1cCB0YWJsZXMuCisJCSAqIE9uZSBhcyB3ZSBoYXZlIG5vdyAoZm9yIGIwKSwgb25lIGZvciBiMgorCQkgKiAodGhhdCB3b3VsZCBhdm9pZCB0aGUgPj4gMSksIGFuZCBvbmUgZm9yIGIxICh3aXRoIGFsbCB2YWx1ZXMKKwkJICogPDwgNCkuIEhvd2V2ZXIgaXQgd2FzIGZlbHQgdGhhdCBpbnRyb2R1Y2luZyB0d28gbW9yZSB0YWJsZXMKKwkJICogaGFyZGx5IGp1c3RpZnkgdGhlIGdhaW4uCisJCSAqCisJCSAqIFRoZSBiMiBzaGlmdCBpcyB0aGVyZSB0byBnZXQgcmlkIG9mIHRoZSBsb3dlc3QgdHdvIGJpdHMuCisJCSAqIFdlIGNvdWxkIGFsc28gZG8gYWRkcmVzc2JpdHNbYjJdID4+IDEgYnV0IGZvciB0aGUKKwkJICogcGVyZm9ybWFjZSBpdCBkb2VzIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlCisJCSAqLworCQlpZiAoZWNjc2l6ZV9tdWx0ID09IDEpCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjFdIDw8IDQpICsgYWRkcmVzc2JpdHNbYjBdOworCQllbHNlCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjIgJiAweDNdIDw8IDgpICsKKwkJCQkgICAgKGFkZHJlc3NiaXRzW2IxXSA8PCA0KSArIGFkZHJlc3NiaXRzW2IwXTsKKwkJYml0X2FkZHIgPSBhZGRyZXNzYml0c1tiMiA+PiAyXTsKKwkJLyogZmxpcCB0aGUgYml0ICovCisJCWJ1ZltieXRlX2FkZHJdIF49ICgxIDw8IGJpdF9hZGRyKTsKIAkJcmV0dXJuIDE7CisKIAl9CisJLyogY291bnQgbnIgb2YgYml0czsgdXNlIHRhYmxlIGxvb2t1cCwgZmFzdGVyIHRoYW4gY2FsY3VsYXRpbmcgaXQgKi8KKwlpZiAoKGJpdHNwZXJieXRlW2IwXSArIGJpdHNwZXJieXRlW2IxXSArIGJpdHNwZXJieXRlW2IyXSkgPT0gMSkKKwkJcmV0dXJuIDE7CS8qIGVycm9yIGluIGVjYyBkYXRhOyBubyBhY3Rpb24gbmVlZGVkICovCiAKLQlpZihjb3VudGJpdHMoczAgfCAoKHVpbnQzMl90KXMxIDw8IDgpIHwgKCh1aW50MzJfdClzMiA8PDE2KSkgPT0gMSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gLUVCQURNU0c7CisJcHJpbnRrKEtFUk5fRVJSICJ1bmNvcnJlY3RhYmxlIGVycm9yIDogIik7CisJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTChuYW5kX2NvcnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBFQ0Mgc3VwcG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwppbmRleCA1NTZlODEzLi5hZTdjNTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAvKiBEZWZhdWx0IHNpbXVsYXRvciBwYXJhbWV0ZXJzIHZhbHVlcyAqLwogI2lmICFkZWZpbmVkKENPTkZJR19OQU5EU0lNX0ZJUlNUX0lEX0JZVEUpICB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggYTY0YWQxNS4uYzBmYTljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMTE1LDU1ICsxMTUsMTEgQEAKIAlTVEFURV9QSU9fV1JJVElORywKIH07CiAKLXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgewotCXVuc2lnbmVkIGludAl0Q0g7ICAvKiBFbmFibGUgc2lnbmFsIGhvbGQgdGltZSAqLwotCXVuc2lnbmVkIGludAl0Q1M7ICAvKiBFbmFibGUgc2lnbmFsIHNldHVwIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFdIOyAgLyogTkRfbldFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFdQOyAgLyogTkRfbldFIHB1bHNlIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFJIOyAgLyogTkRfblJFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFJQOyAgLyogTkRfblJFIHB1bHNlIHdpZHRoICovCi0JdW5zaWduZWQgaW50CXRSOyAgIC8qIE5EX25XRSBoaWdoIHRvIE5EX25SRSBsb3cgZm9yIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdFdIUjsgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3Igc3RhdHVzIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdEFSOyAgLyogTkRfQUxFIGxvdyB0byBORF9uUkUgbG93IGRlbGF5ICovCi19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0IHsKLQl1aW50MTZfdAlyZWFkMTsKLQl1aW50MTZfdAlyZWFkMjsKLQl1aW50MTZfdAlwcm9ncmFtOwotCXVpbnQxNl90CXJlYWRfc3RhdHVzOwotCXVpbnQxNl90CXJlYWRfaWQ7Ci0JdWludDE2X3QJZXJhc2U7Ci0JdWludDE2X3QJcmVzZXQ7Ci0JdWludDE2X3QJbG9jazsKLQl1aW50MTZfdAl1bmxvY2s7Ci0JdWludDE2X3QJbG9ja19zdGF0dXM7Ci19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggewotCXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnRpbWluZzsgLyogTkFORCBGbGFzaCB0aW1pbmcgKi8KLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQ7Ci0KLQl1aW50MzJfdCBwYWdlX3Blcl9ibG9jazsvKiBQYWdlcyBwZXIgYmxvY2sgKFBHX1BFUl9CTEspICovCi0JdWludDMyX3QgcGFnZV9zaXplOwkvKiBQYWdlIHNpemUgaW4gYnl0ZXMgKFBBR0VfU1opICovCi0JdWludDMyX3QgZmxhc2hfd2lkdGg7CS8qIFdpZHRoIG9mIEZsYXNoIG1lbW9yeSAoRFdJRFRIX00pICovCi0JdWludDMyX3QgZGZjX3dpZHRoOwkvKiBXaWR0aCBvZiBmbGFzaCBjb250cm9sbGVyKERXSURUSF9DKSAqLwotCXVpbnQzMl90IG51bV9ibG9ja3M7CS8qIE51bWJlciBvZiBwaHlzaWNhbCBibG9ja3MgaW4gRmxhc2ggKi8KLQl1aW50MzJfdCBjaGlwX2lkOwotCi0JLyogTk9URTogdGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCwgZG8gbm90IGRlZmluZSAqLwotCXNpemVfdAkJb29iX3NpemU7Ci0Jc2l6ZV90CQlyZWFkX2lkX2J5dGVzOwotCi0JdW5zaWduZWQgaW50CWNvbF9hZGRyX2N5Y2xlczsKLQl1bnNpZ25lZCBpbnQJcm93X2FkZHJfY3ljbGVzOwotfTsKLQogc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gewogCXN0cnVjdCBuYW5kX2NoaXAJbmFuZF9jaGlwOwogCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkgKnBkZXY7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbzsKIAogCXN0cnVjdCBjbGsJCSpjbGs7CiAJdm9pZCBfX2lvbWVtCQkqbW1pb19iYXNlOwpAQCAtMjAyLDEyICsxNTgsMjAgQEAKIAl1aW50MzJfdAkJbmRjYjA7CiAJdWludDMyX3QJCW5kY2IxOwogCXVpbnQzMl90CQluZGNiMjsKKworCS8qIGNhbGN1bGF0ZWQgZnJvbSBweGEzeHhfbmFuZF9mbGFzaCBkYXRhICovCisJc2l6ZV90CQlvb2Jfc2l6ZTsKKwlzaXplX3QJCXJlYWRfaWRfYnl0ZXM7CisKKwl1bnNpZ25lZCBpbnQJY29sX2FkZHJfY3ljbGVzOworCXVuc2lnbmVkIGludAlyb3dfYWRkcl9jeWNsZXM7CiB9OwogCiBzdGF0aWMgaW50IHVzZV9kbWEgPSAxOwogbW9kdWxlX3BhcmFtKHVzZV9kbWEsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiZW5hYmxlIERNQSBmb3IgZGF0YSB0cmFuc2ZlcmluZyB0by9mcm9tIE5BTkQgSFciKTsKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTgogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgc21hbGxwYWdlX2NtZHNldCA9IHsKIAkucmVhZDEJCT0gMHgwMDAwLAogCS5yZWFkMgkJPSAweDAwNTAsCkBAIC0yOTEsMTEgKzI1NSwzNSBAQAogCS5jaGlwX2lkCT0gMHhiMTJjLAogfTsKIAorc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgc3RtMkdiWDE2X3RpbWluZyA9IHsKKwkudENIID0gMTAsCisJLnRDUyA9IDM1LAorCS50V0ggPSAxNSwKKwkudFdQID0gMjUsCisJLnRSSCA9IDE1LAorCS50UlAgPSAyNSwKKwkudFIgPSAyNTAwMCwKKwkudFdIUiA9IDYwLAorCS50QVIgPSAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggc3RtMkdiWDE2ID0geworCS50aW1pbmcgPSAmc3RtMkdiWDE2X3RpbWluZywKKwkucGFnZV9wZXJfYmxvY2sgPSA2NCwKKwkucGFnZV9zaXplID0gMjA0OCwKKwkuZmxhc2hfd2lkdGggPSAxNiwKKwkuZGZjX3dpZHRoID0gMTYsCisJLm51bV9ibG9ja3MgPSAyMDQ4LAorCS5jaGlwX2lkID0gMHhiYTIwLAorfTsKKwogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqYnVpbHRpbl9mbGFzaF90eXBlc1tdID0gewogCSZzYW1zdW5nNTEyTWJYMTYsCiAJJm1pY3JvbjFHYlg4LAogCSZtaWNyb24xR2JYMTYsCisJJnN0bTJHYlgxNiwKIH07CisjZW5kaWYgLyogQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOICovCiAKICNkZWZpbmUgTkRUUjBfdENIKGMpCShtaW4oKGMpLCA3KSA8PCAxOSkKICNkZWZpbmUgTkRUUjBfdENTKGMpCShtaW4oKGMpLCA3KSA8PCAxNikKQEAgLTMxMiw3ICszMDAsNyBAQAogI2RlZmluZSBuczJjeWNsZShucywgY2xrKQkoaW50KSgoKG5zKSAqIChjbGsgLyAxMDAwMDAwKSAvIDEwMDApICsgMSkKIAogc3RhdGljIHZvaWQgcHhhM3h4X25hbmRfc2V0X3RpbWluZyhzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgcHhhM3h4X25hbmRfdGltaW5nICp0KQorCQkJCSAgIGNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnQpCiB7CiAJdW5zaWduZWQgbG9uZyBuYW5kX2NsayA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwogCXVpbnQzMl90IG5kdHIwLCBuZHRyMTsKQEAgLTM1NCw4ICszNDIsOCBAQAogc3RhdGljIGludCBwcmVwYXJlX3JlYWRfcHJvZ19jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCiAJCQl1aW50MTZfdCBjbWQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAKIAkvKiBjYWxjdWxhdGUgZGF0YSBzaXplICovCiAJc3dpdGNoIChmLT5wYWdlX3NpemUpIHsKQEAgLTM3MywxNCArMzYxLDE0IEBACiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CiAJaW5mby0+bmRjYjIgPSAwOwotCWluZm8tPm5kY2IwIHw9IE5EQ0IwX0FERFJfQ1lDKGYtPnJvd19hZGRyX2N5Y2xlcyArIGYtPmNvbF9hZGRyX2N5Y2xlcyk7CisJaW5mby0+bmRjYjAgfD0gTkRDQjBfQUREUl9DWUMoaW5mby0+cm93X2FkZHJfY3ljbGVzICsgaW5mby0+Y29sX2FkZHJfY3ljbGVzKTsKIAotCWlmIChmLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgeworCWlmIChpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgewogCQkvKiBsYXJnZSBibG9jaywgMiBjeWNsZXMgZm9yIGNvbHVtbiBhZGRyZXNzCiAJCSAqIHJvdyBhZGRyZXNzIHN0YXJ0cyBmcm9tIDNyZCBjeWNsZQogCQkgKi8KIAkJaW5mby0+bmRjYjEgfD0gKHBhZ2VfYWRkciA8PCAxNikgfCAoY29sdW1uICYgMHhmZmZmKTsKLQkJaWYgKGYtPnJvd19hZGRyX2N5Y2xlcyA9PSAzKQorCQlpZiAoaW5mby0+cm93X2FkZHJfY3ljbGVzID09IDMpCiAJCQlpbmZvLT5uZGNiMiA9IChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZjsKIAl9IGVsc2UKIAkJLyogc21hbGwgYmxvY2ssIDEgY3ljbGVzIGZvciBjb2x1bW4gYWRkcmVzcwpAQCAtNDA2LDcgKzM5NCw3IEBACiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9vdGhlcl9jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sIHVpbnQxNl90IGNtZCkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBpbmZvLT5mbGFzaF9pbmZvLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gaW5mby0+Zmxhc2hfaW5mby0+Y21kc2V0OwogCiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CkBAIC02NDEsOCArNjI5LDggQEAKIAkJCQlpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewogCXN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvID0gbXRkLT5wcml2OwotCXN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OwogCWludCByZXQ7CiAKIAlpbmZvLT51c2VfZG1hID0gKHVzZV9kbWEpID8gMSA6IDA7CkBAIC03MjAsNyArNzA4LDcgQEAKIAkJaW5mby0+dXNlX2RtYSA9IDA7CS8qIGZvcmNlIFBJTyByZWFkICovCiAJCWluZm8tPmJ1Zl9zdGFydCA9IDA7CiAJCWluZm8tPmJ1Zl9jb3VudCA9IChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkgPwotCQkJCWZsYXNoX2luZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOworCQkJCWluZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOwogCiAJCWlmIChwcmVwYXJlX290aGVyX2NtZChpbmZvLCAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQpID8KIAkJCQljbWRzZXQtPnJlYWRfaWQgOiBjbWRzZXQtPnJlYWRfc3RhdHVzKSkKQEAgLTg2MSw4ICs4NDksOCBAQAogCiBzdGF0aWMgaW50IF9fcmVhZGlkKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLCB1aW50MzJfdCAqaWQpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAJdWludDMyX3QgbmRjcjsKIAl1aW50OF90ICBpZF9idWZmWzhdOwogCkBAIC04OTEsNyArODc5LDcgQEAKIH0KIAogc3RhdGljIGludCBweGEzeHhfbmFuZF9jb25maWdfZmxhc2goc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZikKKwkJCQkgICAgY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBpbmZvLT5wZGV2OwogCXN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtOTA0LDI1ICs4OTIsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjYWxjdWxhdGUgZmxhc2ggaW5mb3JtYXRpb24gKi8KLQlmLT5vb2Jfc2l6ZSA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA2NCA6IDE2OwotCWYtPnJlYWRfaWRfYnl0ZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNCA6IDI7CisJaW5mby0+b29iX3NpemUgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNjQgOiAxNjsKKwlpbmZvLT5yZWFkX2lkX2J5dGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDQgOiAyOwogCiAJLyogY2FsY3VsYXRlIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24gKi8KLQlmLT5jb2xfYWRkcl9jeWNsZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gMiA6IDE7CisJaW5mby0+Y29sX2FkZHJfY3ljbGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDIgOiAxOwogCiAJaWYgKGYtPm51bV9ibG9ja3MgKiBmLT5wYWdlX3Blcl9ibG9jayA+IDY1NTM2KQotCQlmLT5yb3dfYWRkcl9jeWNsZXMgPSAzOworCQlpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPSAzOwogCWVsc2UKLQkJZi0+cm93X2FkZHJfY3ljbGVzID0gMjsKKwkJaW5mby0+cm93X2FkZHJfY3ljbGVzID0gMjsKIAogCW5kY3IgfD0gKHBkYXRhLT5lbmFibGVfYXJiaXRlcikgPyBORENSX05EX0FSQl9FTiA6IDA7Ci0JbmRjciB8PSAoZi0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CisJbmRjciB8PSAoaW5mby0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CiAJbmRjciB8PSAoZi0+cGFnZV9wZXJfYmxvY2sgPT0gNjQpID8gTkRDUl9QR19QRVJfQkxLIDogMDsKIAluZGNyIHw9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyBORENSX1BBR0VfU1ogOiAwOwogCW5kY3IgfD0gKGYtPmZsYXNoX3dpZHRoID09IDE2KSA/IE5EQ1JfRFdJRFRIX00gOiAwOwogCW5kY3IgfD0gKGYtPmRmY193aWR0aCA9PSAxNikgPyBORENSX0RXSURUSF9DIDogMDsKIAotCW5kY3IgfD0gTkRDUl9SRF9JRF9DTlQoZi0+cmVhZF9pZF9ieXRlcyk7CisJbmRjciB8PSBORENSX1JEX0lEX0NOVChpbmZvLT5yZWFkX2lkX2J5dGVzKTsKIAluZGNyIHw9IE5EQ1JfU1BBUkVfRU47IC8qIGVuYWJsZSBzcGFyZSBieSBkZWZhdWx0ICovCiAKIAlpbmZvLT5yZWdfbmRjciA9IG5kY3I7CkBAIC05MzIsMTIgKzkyMCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmOwotCXVpbnQzMl90IGlkOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZjsKKwl1aW50MzJfdCBpZCA9IC0xOwogCWludCBpOwogCisJZm9yIChpID0gMDsgaTxwZGF0YS0+bnVtX2ZsYXNoOyArK2kpIHsKKwkJZiA9IHBkYXRhLT5mbGFzaCArIGk7CisKKwkJaWYgKHB4YTN4eF9uYW5kX2NvbmZpZ19mbGFzaChpbmZvLCBmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChfX3JlYWRpZChpbmZvLCAmaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkID09IGYtPmNoaXBfaWQpCisJCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWlsdGluX2ZsYXNoX3R5cGVzKTsgaSsrKSB7CiAKIAkJZiA9IGJ1aWx0aW5fZmxhc2hfdHlwZXNbaV07CkBAIC05NTEsNyArOTU0LDExIEBACiAJCWlmIChpZCA9PSBmLT5jaGlwX2lkKQogCQkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAKKwlkZXZfd2FybigmaW5mby0+cGRldi0+ZGV2LAorCQkgImZhaWxlZCB0byBkZXRlY3QgY29uZmlndXJlZCBuYW5kIGZsYXNoOyBmb3VuZCAlMDR4IGluc3RlYWQgb2ZcbiIsCisJCSBpZCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTEwMTQsNyArMTAyMSw3IEBACiBzdGF0aWMgdm9pZCBweGEzeHhfbmFuZF9pbml0X210ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCQkgc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaW5mby0+bmFuZF9jaGlwOwogCiAJdGhpcy0+b3B0aW9ucyA9IChmLT5mbGFzaF93aWR0aCA9PSAxNikgPyBOQU5EX0JVU1dJRFRIXzE2OiAwOwpAQCAtMTEzNSw3ICsxMTQyLDcgQEAKIAkJZ290byBmYWlsX2ZyZWVfYnVmOwogCX0KIAotCXJldCA9IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChpbmZvKTsKKwlyZXQgPSBweGEzeHhfbmFuZF9kZXRlY3RfZmxhc2goaW5mbywgcGRhdGEpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRldGVjdCBmbGFzaFxuIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxYWNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIFN1cGVySCBGTENUTCBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IMKpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9zaF9mbGN0bC5oPgorCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDl9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDEyLAorCQkuIGxlbmd0aCA9IDR9IH0sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl82NCA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3fSwKKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSA2MCwKKwkJLiBsZW5ndGggPSA0fSB9LAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19zbWFsbHBhZ2UgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKKwkub2ZmcyA9IDExLAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuLAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19sYXJnZXBhZ2UgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNTgsCisJLmxlbiA9IDIsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4sCit9OworCitzdGF0aWMgdm9pZCBlbXB0eV9maWZvKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGVsKDB4MDAwYzAwMDAsIEZMSU5URE1BQ1IoZmxjdGwpKTsJLyogRklGTyBDbGVhciAqLworCXdyaXRlbCgweDAwMDAwMDAwLCBGTElOVERNQUNSKGZsY3RsKSk7CS8qIENsZWFyIEVycm9yIGZsYWdzICovCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3RyYW5zbGF0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGViKFRSU1RSVCwgRkxUUkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfY29tcGxldGlvbihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlpZiAocmVhZGIoRkxUUkNSKGZsY3RsKSkgJiBUUkVORCkgeworCQkJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXdyaXRlYigweDAsIEZMVFJDUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWRkcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJdWludDMyX3QgYWRkciA9IDA7CisKKwlpZiAoY29sdW1uID09IC0xKSB7CisJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLworCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCWFkZHIgPSBjb2x1bW4gJiAweDBGRkY7CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCAxNjsKKwkJCWFkZHIgfD0gKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSA8PCAyNDsKKwkJCS8qIGJpZyB0aGFuIDEyOE1CICovCisJCQlpZiAoZmxjdGwtPnJ3X0FEUkNOVCA9PSBBRFJDTlQyX0UpIHsKKwkJCQl1aW50MzJfdCAJYWRkcjI7CisJCQkJYWRkcjIgPSAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmY7CisJCQkJd3JpdGVsKGFkZHIyLCBGTEFEUjIoZmxjdGwpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSBjb2x1bW47CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCA4OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpIDw8IDE2OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSA8PCAyNDsKKwkJfQorCX0KKwl3cml0ZWwoYWRkciwgRkxBRFIoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9yZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQl1aW50MzJfdCB2YWw7CisJCS8qIGNoZWNrIEZJRk8gKi8KKwkJdmFsID0gcmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNjsKKwkJaWYgKHZhbCAmIDB4RkYpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgbGVuLCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRklGTyAqLworCQlsZW4gPSAocmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNikgJiAweEZGOworCQlpZiAobGVuID49IDQpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgaW50IHdhaXRfcmVjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCWludCBjaGVja2VkWzRdOworCXZvaWQgX19pb21lbSAqZWNjX3JlZ1s0XTsKKwlpbnQgaTsKKwl1aW50MzJfdCBkYXRhLCBzaXplOworCisJbWVtc2V0KGNoZWNrZWQsIDAsIHNpemVvZihjaGVja2VkKSk7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXNpemUgPSByZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDI0OworCQlpZiAoc2l6ZSAmIDB4RkYpCisJCQlyZXR1cm4gMDsJLyogc3VjY2VzcyAqLworCisJCWlmIChyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NGQSkKKwkJCXJldHVybiAxOwkvKiBjYW4ndCBjb3JyZWN0ICovCisKKwkJdWRlbGF5KDEpOworCQlpZiAoIShyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NFTkQpKQorCQkJY29udGludWU7CisKKwkJLyogc3RhcnQgZXJyb3IgY29ycmVjdGlvbiAqLworCQllY2NfcmVnWzBdID0gRkw0RUNDUkVTVUxUMChmbGN0bCk7CisJCWVjY19yZWdbMV0gPSBGTDRFQ0NSRVNVTFQxKGZsY3RsKTsKKwkJZWNjX3JlZ1syXSA9IEZMNEVDQ1JFU1VMVDIoZmxjdGwpOworCQllY2NfcmVnWzNdID0gRkw0RUNDUkVTVUxUMyhmbGN0bCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YSA9IHJlYWRsKGVjY19yZWdbaV0pOworCQkJaWYgKGRhdGEgIT0gSU5JVF9GTDRFQ0NSRVNVTFRfVkFMICYmICFjaGVja2VkW2ldKSB7CisJCQkJdWludDhfdCBvcmc7CisJCQkJaW50IGluZGV4OworCisJCQkJaW5kZXggPSBkYXRhID4+IDE2OworCQkJCW9yZyA9IGZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdOworCQkJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdID0gb3JnIF4gKGRhdGEgJiAweEZGKTsKKwkJCQljaGVja2VkW2ldID0gMTsKKwkJCX0KKwkJfQorCisJCXdyaXRlbCgwLCBGTDRFQ0NDUihmbGN0bCkpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9yZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2VjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCXVpbnQzMl90IGxlbjsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRkxFQ0ZJRk8gKi8KKwkJbGVuID0gKHJlYWRsKEZMRFRDTlRSKGZsY3RsKSkgPj4gMjQpICYgMHhGRjsKKwkJaWYgKGxlbiA+PSA0KQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMSk7CisJfQorCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2RhdGFyZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKworCWRhdGEgPSByZWFkbChGTERBVEFSKGZsY3RsKSk7CisJKmJ1ZiA9IGxlMzJfdG9fY3B1KGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHJsZW4sIGludCBvZmZzZXQpCit7CisJaW50IGksIGxlbl80YWxpZ247CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxEVEZJRk8oZmxjdGwpOworCisJbGVuXzRhbGlnbiA9IChybGVuICsgMykgLyA0OworCisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3JmaWZvX3JlYWR5KGZsY3RsKTsKKwkJYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJYnVmW2ldID0gYmUzMl90b19jcHUoYnVmW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9lY2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdWludDhfdCAqYnVmZikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nICplY2NfYnVmID0gKHVuc2lnbmVkIGxvbmcgKilidWZmOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxFQ0ZJRk8oZmxjdGwpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAod2FpdF9yZWNmaWZvX3JlYWR5KGZsY3RsKSkKKwkJCXJldHVybiAxOworCQllY2NfYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJZWNjX2J1ZltpXSA9IGJlMzJfdG9fY3B1KGVjY19idWZbaV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9maWZvcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBybGVuLCBpbnQgb2Zmc2V0KQoreworCWludCBpLCBsZW5fNGFsaWduOworCXVuc2lnbmVkIGxvbmcgKmRhdGEgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTERURklGTyhmbGN0bCk7CisKKwlsZW5fNGFsaWduID0gKHJsZW4gKyAzKSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3dmaWZvX3JlYWR5KGZsY3RsKTsKKwkJd3JpdGVsKGNwdV90b19iZTMyKGRhdGFbaV0pLCBmaWZvX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NtZF9yZWdzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50MzJfdCBjbWQsIHVpbnQzMl90IGZsY21jZHJfdmFsKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKwl1aW50MzJfdCBmbGNtZGNyX3ZhbCwgYWRkcl9sZW5fYnl0ZXMgPSAwOworCisJLyogU2V0IFNOQU5EIGJpdCBpZiBwYWdlIHNpemUgaXMgMjA0OGJ5dGUgKi8KKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJZmxjbW5jcl92YWwgfD0gU05BTkRfRTsKKwllbHNlCisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCisJLyogZGVmYXVsdCBGTENNRENSIHZhbCAqLworCWZsY21kY3JfdmFsID0gRE9DTUQxX0UgfCBET0FEUl9FOworCisJLyogU2V0IGZvciBGTENNRENSICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+ZXJhc2VfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWFkZHJfbGVuX2J5dGVzID0gZmxjdGwtPnJ3X0FEUkNOVDsKKwkJZmxjbWRjcl92YWwgfD0gQ0RTUkNfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLworCQlmbGNtZGNyX3ZhbCAmPSB+RE9BRFJfRTsJLyogT05MWSBleGVjdXRlIDFzdCBjbWQgKi8KKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCQlhZGRyX2xlbl9ieXRlcyA9IEFEUkNOVF8xOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlmbGNtbmNyX3ZhbCAmPSB+U05BTkRfRTsKKwkJZmxjbWRjcl92YWwgJj0gfihET0FEUl9FIHwgRE9TUl9FKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IGFkZHJlc3MgYnl0ZXMgcGFyYW1ldGVyICovCisJZmxjbWRjcl92YWwgfD0gYWRkcl9sZW5fYnl0ZXM7CisKKwkvKiBOb3cgYWN0dWFsbHkgd3JpdGUgKi8KKwl3cml0ZWwoZmxjbW5jcl92YWwsIEZMQ01OQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWRjcl92YWwsIEZMQ01EQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWNkcl92YWwsIEZMQ01DRFIoZmxjdGwpKTsKK30KKworc3RhdGljIGludCBmbGN0bF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWlmIChmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W2ldKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmbGN0bF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworfQorCitzdGF0aWMgdm9pZCBleGVjbWRfcmVhZF9wYWdlX3NlY3RvcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpCisJCXBhZ2Vfc2VjdG9ycyA9IDQ7CisJZWxzZQorCQlwYWdlX3NlY3RvcnMgPSAxOworCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCwKKwkJIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1JFQUQwLAorCQkoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpIHwgTkFORF9DTURfUkVBRDApOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWludCByZXQ7CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXdyaXRlbChyZWFkbChGTENNRENSKGZsY3RsKSkgfCAxLCBGTENNRENSKGZsY3RsKSk7CisJCXdyaXRlbChwYWdlX2FkZHIgPDwgMiB8IHNlY3RvciwgRkxBRFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgNTEyLCA1MTIgKiBzZWN0b3IpOworCisJCXJldCA9IHJlYWRfZWNmaWZvcmVnKGZsY3RsLAorCQkJJmZsY3RsLT5kb25lX2J1ZmZbbXRkLT53cml0ZXNpemUgKyAxNiAqIHNlY3Rvcl0pOworCisJCWlmIChyZXQpCisJCQlmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W3NlY3Rvcl0gPSAxOworCisJCXdyaXRlbCgweDAsIEZMNEVDQ0NSKGZsY3RsKSk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+KEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCksCisJCQlGTENNTkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisKKwlzZXRfY21kX3JlZ3MobXRkLCBOQU5EX0NNRF9SRUFEMCwKKwkJKE5BTkRfQ01EX1JFQURTVEFSVCA8PCA4KSB8IE5BTkRfQ01EX1JFQUQwKTsKKworCWVtcHR5X2ZpZm8oZmxjdGwpOworCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCWludCBpOworCQkvKiBJbiBjYXNlIHRoYXQgdGhlIHBhZ2Ugc2l6ZSBpcyAyayAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTYgKiAzOyBpKyspCisJCQlmbGN0bC0+ZG9uZV9idWZmW2ldID0gMHhGRjsKKworCQlzZXRfYWRkcihtdGQsIDMgKiA1MjggKyA1MTIsIHBhZ2VfYWRkcik7CisJCXdyaXRlbCgxNiwgRkxEVENOVFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgMTYsIDE2ICogMyk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfSBlbHNlIHsKKwkJLyogSW4gY2FzZSB0aGF0IHRoZSBwYWdlIHNpemUgaXMgNTEyYiAqLworCQlzZXRfYWRkcihtdGQsIDUxMiwgcGFnZV9hZGRyKTsKKwkJd3JpdGVsKDE2LCBGTERUQ05UUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCAxNiwgMCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3Ioc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpLCBwYWdlX2FkZHIgPSBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyOworCWludCBzZWN0b3IsIHBhZ2Vfc2VjdG9yczsKKworCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQlwYWdlX3NlY3RvcnMgPSA0OworCWVsc2UKKwkJcGFnZV9zZWN0b3JzID0gMTsKKworCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgfCBBQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQl3cml0ZWwocmVhZGwoRkxDTURDUihmbGN0bCkpIHwgMSwgRkxDTURDUihmbGN0bCkpOworCQl3cml0ZWwocGFnZV9hZGRyIDw8IDIgfCBzZWN0b3IsIEZMQURSKGZsY3RsKSk7CisKKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCA1MTIsIDUxMiAqIHNlY3Rvcik7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJd2FpdF93ZWNmaWZvX3JlYWR5KGZsY3RsKTsgLyogd2FpdCBmb3Igd3JpdGUgcmVhZHkgKi8KKwkJCXdyaXRlbCgweEZGRkZGRkZGLCBGTEVDRklGTyhmbGN0bCkpOworCQl9CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH5BQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY21kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHBhZ2VfYWRkciA9IGZsY3RsLT5zZXFpbl9wYWdlX2FkZHI7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJc2VjdG9yID0gMzsKKwkJcGFnZV9zZWN0b3JzID0gNDsKKwl9IGVsc2UgeworCQlzZWN0b3IgPSAwOworCQlwYWdlX3NlY3RvcnMgPSAxOworCX0KKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yICg7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXNldF9hZGRyKG10ZCwgc2VjdG9yICogNTI4ICsgNTEyLCBwYWdlX2FkZHIpOworCQl3cml0ZWwoMTYsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIDE2LCAxNiAqIHNlY3Rvcik7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbGN0bF9jbWRmdW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IHJlYWRfY21kID0gMDsKKworCWZsY3RsLT5yZWFkX2J5dGVzID0gMDsKKwlpZiAoY29tbWFuZCAhPSBOQU5EX0NNRF9QQUdFUFJPRykKKwkJZmxjdGwtPmluZGV4ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgTkFORF9DTURfUkVBRDE6CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogcmVhZCBwYWdlIHdpdGggaHdlY2MgKi8KKwkJCWV4ZWNtZF9yZWFkX3BhZ2Vfc2VjdG9yKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkKKwkJCQl8IGNvbW1hbmQpOworCQllbHNlCisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKworCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKKwkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKKwkJZ290byByZWFkX25vcm1hbF9leGl0OworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiByZWFkIHBhZ2Ugd2l0aCBod2VjYyAqLworCQkJZXhlY21kX3JlYWRfb29iKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpCisJCQkJfCBOQU5EX0NNRF9SRUFEMCk7CisJCQlzZXRfYWRkcihtdGQsIG10ZC0+d3JpdGVzaXplLCBwYWdlX2FkZHIpOworCQl9IGVsc2UgeworCQkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisJCX0KKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPm9vYnNpemU7CisJCWdvdG8gcmVhZF9ub3JtYWxfZXhpdDsKKworCWNhc2UgTkFORF9DTURfUkVBRElEOgorCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgMCwgMCk7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSA0OworCQl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7IC8qIHNldCByZWFkIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2RhdGFyZWcoZmxjdGwsIDApOwkvKiByZWFkIGFuZCBlbmQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwKKwkJCShjb21tYW5kIDw8IDgpIHwgTkFORF9DTURfRVJBU0UxKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIpOworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJaWYgKCFmbGN0bC0+cGFnZV9zaXplKSB7CisJCQkvKiBvdXRwdXQgcmVhZCBjb21tYW5kICovCisJCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOworCQkJCXJlYWRfY21kID0gTkFORF9DTURfUkVBRE9PQjsKKwkJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CisJCQkJcmVhZF9jbWQgPSBOQU5EX0NNRF9SRUFEMDsKKwkJCX0gZWxzZSB7CisJCQkJY29sdW1uIC09IDI1NjsKKwkJCQlyZWFkX2NtZCA9IE5BTkRfQ01EX1JFQUQxOworCQkJfQorCQl9CisJCWZsY3RsLT5zZXFpbl9jb2x1bW4gPSBjb2x1bW47CisJCWZsY3RsLT5zZXFpbl9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWZsY3RsLT5zZXFpbl9yZWFkX2NtZCA9IHJlYWRfY21kOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoIWZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1NFUUlOLAorCQkJCQlmbGN0bC0+c2VxaW5fcmVhZF9jbWQpOworCQkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCQkJd3JpdGVsKDAsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCAwIHNpemUgKi8KKwkJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCX0KKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogd3JpdGUgcGFnZSB3aXRoIGh3ZWNjICovCisJCQlpZiAoZmxjdGwtPnNlcWluX2NvbHVtbiA9PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQlleGVjbWRfd3JpdGVfb29iKG10ZCk7CisJCQllbHNlIGlmICghZmxjdGwtPnNlcWluX2NvbHVtbikKKwkJCQlleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3IobXRkKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYWRkcmVzcyAhP1xuIik7CisJCQlicmVhazsKKwkJfQorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoY29tbWFuZCA8PCA4KSB8IE5BTkRfQ01EX1NFUUlOKTsKKwkJc2V0X2FkZHIobXRkLCBmbGN0bC0+c2VxaW5fY29sdW1uLCBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyKTsKKwkJd3JpdGVsKGZsY3RsLT5pbmRleCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHdyaXRlIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCBmbGN0bC0+aW5kZXgsIDApOworCQl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCisJCWZsY3RsLT5yZWFkX2J5dGVzID0gMTsKKwkJd3JpdGVsKGZsY3RsLT5yZWFkX2J5dGVzLCBGTERUQ05UUihmbGN0bCkpOyAvKiBzZXQgcmVhZCBzaXplICovCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9kYXRhcmVnKGZsY3RsLCAwKTsgLyogcmVhZCBhbmQgZW5kICovCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgLTEsIC0xKTsKKworCQl3cml0ZWwoMCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IDAgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKworcmVhZF9ub3JtYWxfZXhpdDoKKwl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKwlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJcmVhZF9maWZvcmVnKGZsY3RsLCBmbGN0bC0+cmVhZF9ieXRlcywgMCk7CisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcG5yKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKworCXN3aXRjaCAoY2hpcG5yKSB7CisJY2FzZSAtMToKKwkJZmxjbW5jcl92YWwgJj0gfkNFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwljYXNlIDA6CisJCWZsY21uY3JfdmFsIHw9IENFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgaSwgaW5kZXggPSBmbGN0bC0+aW5kZXg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXggKyBpXSA9IGJ1ZltpXTsKKwlmbGN0bC0+aW5kZXggKz0gbGVuOworfQorCitzdGF0aWMgdWludDhfdCBmbGN0bF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKwl1aW50OF90IGRhdGE7CisKKwlkYXRhID0gZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisJZmxjdGwtPmluZGV4Kys7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IGZsY3RsX3JlYWRfYnl0ZShtdGQpOworfQorCitzdGF0aWMgaW50IGZsY3RsX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IGZsY3RsX3JlYWRfYnl0ZShtdGQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlZ2lzdGVyX2luaXQoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJd3JpdGVsKHZhbCwgRkxDTU5DUihmbGN0bCkpOworfQorCitzdGF0aWMgaW50IGZsY3RsX2NoaXBfaW5pdF90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJmZsY3RsLT5jaGlwOworCisJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQlmbGN0bC0+cGFnZV9zaXplID0gMDsKKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkgeworCQkJLyogYmlnIHRoYW4gMzJNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF80OworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8zOworCQl9IGVsc2UgaWYgKGNoaXAtPmNoaXBzaXplID4gKDIgPDwgMTYpKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhLQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8zOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8yOworCQl9IGVsc2UgeworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8yOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8xOworCQl9CisJfSBlbHNlIHsKKwkJZmxjdGwtPnBhZ2Vfc2l6ZSA9IDE7CisJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgxMjggPDwgMjApKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVDJfRTsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMzsKKwkJfSBlbHNlIGlmIChjaGlwLT5jaGlwc2l6ZSA+ICg4IDw8IDE2KSkgeworCQkJLyogYmlnIHRoYW4gNTEyS0IgKi8KKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfNDsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMjsKKwkJfSBlbHNlIHsKKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfMzsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMTsKKwkJfQorCX0KKworCWlmIChmbGN0bC0+aHdlY2MpIHsKKwkJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZmbGN0bF80c2VjY19vb2JfMTY7CisJCQljaGlwLT5iYWRibG9ja19wYXR0ZXJuID0gJmZsY3RsXzRzZWNjX3NtYWxscGFnZTsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmZmxjdGxfNHNlY2Nfb29iXzY0OworCQkJY2hpcC0+YmFkYmxvY2tfcGF0dGVybiA9ICZmbGN0bF80c2VjY19sYXJnZXBhZ2U7CisJCX0KKworCQljaGlwLT5lY2Muc2l6ZSA9IDUxMjsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMTA7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBmbGN0bF9yZWFkX3BhZ2VfaHdlY2M7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gZmxjdGxfd3JpdGVfcGFnZV9od2VjYzsKKwkJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKworCQkvKiA0IHN5bWJvbHMgRUNDIGVuYWJsZWQgKi8KKwkJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IF80RUNDRU4gfCBFQ0NQT1MyIHwgRUNDUE9TXzAyLAorCQkJCUZMQ01OQ1IoZmxjdGwpKTsKKwl9IGVsc2UgeworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bDsKKwlzdHJ1Y3QgbXRkX2luZm8gKmZsY3RsX210ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOworCXN0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZsY3RsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX2ZsY3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGN0bCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Ugbm90IGZvdW5kLlxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlmbGN0bC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZsY3RsKTsKKwlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKKwluYW5kID0gJmZsY3RsLT5jaGlwOworCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPmh3ZWNjID0gcGRhdGEtPmhhc19od2VjYzsKKworCWZsY3RsX3JlZ2lzdGVyX2luaXQoZmxjdGwsIHBkYXRhLT5mbGNtbmNyX3ZhbCk7CisKKwluYW5kLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwkvKiAyMCB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKwluYW5kLT5jaGlwX2RlbGF5ID0gMjA7CisKKwluYW5kLT5yZWFkX2J5dGUgPSBmbGN0bF9yZWFkX2J5dGU7CisJbmFuZC0+d3JpdGVfYnVmID0gZmxjdGxfd3JpdGVfYnVmOworCW5hbmQtPnJlYWRfYnVmID0gZmxjdGxfcmVhZF9idWY7CisJbmFuZC0+dmVyaWZ5X2J1ZiA9IGZsY3RsX3ZlcmlmeV9idWY7CisJbmFuZC0+c2VsZWN0X2NoaXAgPSBmbGN0bF9zZWxlY3RfY2hpcDsKKwluYW5kLT5jbWRmdW5jID0gZmxjdGxfY21kZnVuYzsKKworCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZmxjdGxfY2hpcF9pbml0X3RhaWwoZmxjdGxfbXRkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG5hbmRfc2Nhbl90YWlsKGZsY3RsX210ZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlhZGRfbXRkX3BhcnRpdGlvbnMoZmxjdGxfbXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKGZsY3RsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwluYW5kX3JlbGVhc2UoJmZsY3RsLT5tdGQpOworCWtmcmVlKGZsY3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbGN0bF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGZsY3RsX3Byb2JlLAorCS5yZW1vdmUJCT0gZmxjdGxfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNoX2ZsY3RsIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX25hbmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZsY3RsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmbGN0bF9uYW5kX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZmxjdGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZmxjdGxfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KGZsY3RsX25hbmRfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIllvc2hpaGlybyBTaGltb2RhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBGTENUTCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2hfZmxjdGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdG90by5jIGIvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjQ5MmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL210ZC9uYW5kL3RvdG8uYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL2F1dGNwdTEyLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRob21hcyBHbGVpeG5lciA8dGd4bEBsaW51dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIE92ZXJ2aWV3OgotICogICBUaGlzIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQotICogICBUSSBmaWRvIGJvYXJkLiBJdCBzdXBwb3J0cyAzMk1pQiBhbmQgNjRNaUIgY2FyZHMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90b3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtb21hcDE1MTAvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLSNkZWZpbmUgQ09ORklHX05BTkRfV09SS0FST1VORCAxCi0KLS8qCi0gKiBNVEQgc3RydWN0dXJlIGZvciBUT1RPIGJvYXJkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnRvdG9fbXRkID0gTlVMTDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90b19pb19iYXNlID0gT01BUF9GTEFTSF8xX0JBU0U7Ci0KLS8qCi0gKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzY0TVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZQk9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gZGV2Ym9hcmQgZXh0cmEgcGFydGl0aW9uIDQiLAotCSAgLm9mZnNldCA9CTMyICogU1pfMU0sCi0JICAuc2l6ZSA9CTMyICogU1pfMU0gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzMyTVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZSA9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLX07Ci0KLSNkZWZpbmUgTlVNX1BBUlRJVElPTlMzMk0gMwotI2RlZmluZSBOVU1fUEFSVElUSU9OUzY0TSA0Ci0KLS8qCi0gKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwotICoKLSAqCWN0cmw6Ci0gKglOQU5EX05DRTogYml0IDAgLT4gYml0IDE0ICgweDQwMDApCi0gKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEyICgweDEwMDApCi0gKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEgICgweDAwMDIpCi0gKi8KLXN0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAotCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKLQotCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgewotCQl1bnNpZ25lZCBsb25nIGJpdHM7Ci0KLQkJLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLwotCQl1ZGVsYXkoMSk7Ci0KLQkJYml0cyA9ICh+Y3RybCAmIE5BTkRfTkNFKSA8PCAxNDsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxMjsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA+PiAxOwotCi0jd2FybmluZyBXaWxkIGd1ZXNzIGFzIGdwaW9zZXRvdXQoKSBpcyBub3doZXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgLSB0Z2x4Ci0JCWdwaW9zZXRvdXQoMHg1MDAyLCBiaXRzKTsKLQotI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQKLQkJLyogInNvbWUiIGRldiBib2FyZHMgYnVzdGVkLCBibHVlIHdpcmVkIHRvIHJ0czIgOiggKi8KLQkJcnRzMnNldG91dCgyLCAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxKTsKLSNlbmRpZgotCQkvKiBhbGxvdyB0aW1lIHRvIGVuc3VyZSBncGlvIHN0YXRlIHRvIG92ZXIgdGFrZSBtZW1vcnkgd3JpdGUgKi8KLQkJdWRlbGF5KDEpOwotCX0KLQotCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKLQkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKLX0KLQotLyoKLSAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQotICovCi1zdGF0aWMgaW50IF9faW5pdCB0b3RvX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCWludCBlcnIgPSAwOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JdG90b19tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRvdG9fbXRkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSB0b3RvIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZ0b3RvX210ZFsxXSk7Ci0KLQkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQodG90b19tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKLQotCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCi0JdG90b19tdGQtPnByaXYgPSB0aGlzOwotCXRvdG9fbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLwotCXRoaXMtPklPX0FERFJfUiA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5JT19BRERSX1cgPSB0b3RvX2lvX2Jhc2U7Ci0JdGhpcy0+Y21kX2N0cmwgPSB0b3RvX2h3Y29udHJvbDsKLQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwotCS8qIDI1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwotCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKLQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0KLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuKHRvdG9fbXRkLCAxKSkgewotCQllcnIgPSAtRU5YSU87Ci0JCWdvdG8gb3V0X210ZDsKLQl9Ci0KLQkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaCAodG90b19tdGQtPnNpemUpIHsKLQljYXNlIFNaXzY0TToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzY0TSwgTlVNX1BBUlRJVElPTlM2NE0pOwotCQlicmVhazsKLQljYXNlIFNaXzMyTToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOwotCQlicmVhazsKLQlkZWZhdWx0OnsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0KLQotCWdwaW9yZXNlcnZlKE5BTkRfTUFTSyk7CS8qIGNsYWltIG91ciBncGlvcyAqLwotCWFyY2hmbGFzaHdwKDAsIDApOwkvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCi0KLQlnb3RvIG91dDsKLQotIG91dF9tdGQ6Ci0Ja2ZyZWUodG90b19tdGQpOwotIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1tb2R1bGVfaW5pdCh0b3RvX2luaXQpOwotCi0vKgotICogQ2xlYW4gdXAgcm91dGluZQotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgdG90b19jbGVhbnVwKHZvaWQpCi17Ci0JLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlKHRvdG9fbXRkKTsKLQotCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUodG90b19tdGQpOwotCi0JLyogc3RvcCBmbGFzaCB3cml0ZXMgKi8KLQlhcmNoZmxhc2h3cCgwLCAxKTsKLQotCS8qIHJlbGVhc2UgZ3Bpb3MgdG8gc3lzdGVtICovCi0JZ3Bpb3JlbGVhc2UoTkFORF9NQVNLKTsKLX0KLQotbW9kdWxlX2V4aXQodG90b19jbGVhbnVwKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGxheWVyIGZvciBOQU5EIGZsYXNoIG9uIHRvdG8gYm9hcmQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29mcGFydC5jIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKaW5kZXggNGY4MGMyZi4uOWU0NWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiBpbnQgX19kZXZpbml0IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKaW5kZXggY2I0MWNiYy4uNzlmYTc5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwpAQCAtMjcsOCArMjcsMTYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCitjb25maWcgTVREX09ORU5BTkRfT01BUDIKKwl0cmlzdGF0ZSAiT25lTkFORCBvbiBPTUFQMi9PTUFQMyBzdXBwb3J0IgorCWRlcGVuZHMgb24gTVREX09ORU5BTkQgJiYgKEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMykKKwloZWxwCisJICBTdXBwb3J0IGZvciBhIE9uZU5BTkQgZmxhc2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhbiBPTUFQMi9PTUFQMyBDUFUKKwkgIHZpYSB0aGUgR1BNQyBtZW1vcnkgY29udHJvbGxlci4KKwogY29uZmlnIE1URF9PTkVOQU5EX09UUAogCWJvb2wgIk9uZU5BTkQgT1RQIFN1cHBvcnQiCisJc2VsZWN0IEhBVkVfTVREX09UUAogCWhlbHAKIAkgIE9uZSBCbG9jayBvZiB0aGUgTkFORCBGbGFzaCBBcnJheSBtZW1vcnkgaXMgcmVzZXJ2ZWQgYXMKIAkgIGEgT25lLVRpbWUgUHJvZ3JhbW1hYmxlIEJsb2NrIG1lbW9yeSBhcmVhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKaW5kZXggNGQyZWFjZi4uNjRiNmNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogCiAjIEJvYXJkIHNwZWNpZmljLgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMpCSs9IGdlbmVyaWMubworb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQkJKz0gb21hcDIubwogCiAjIFNpbXVsYXRvcgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX1NJTSkJCSs9IG9uZW5hbmRfc2ltLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC0wLDAgKzEsODAyIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYworICoKKyAqICBPbmVOQU5EIGRyaXZlciBmb3IgT01BUDIgLyBPTUFQMworICoKKyAqICBDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIEF1dGhvcjogSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4gYW5kIEp1aGEgWXJqw7Zsw6QKKyAqICBJUlEgYW5kIERNQSBzdXBwb3J0IHdyaXR0ZW4gYnkgVGltbyBUZXJhcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb25lbmFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJvbWFwMi1vbmVuYW5kIgorCisjZGVmaW5lIE9ORU5BTkRfSU9fU0laRQkJU1pfMTI4SworI2RlZmluZSBPTkVOQU5EX0JVRlJBTV9TSVpFCSgxMDI0ICogNSkKKworc3RydWN0IG9tYXAyX29uZW5hbmQgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IGdwbWNfY3M7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisJaW50IGdwaW9faXJxOworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgb25lbmFuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBpcnFfZG9uZTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkbWFfZG9uZTsKKwlpbnQgZG1hX2NoYW5uZWw7CisJaW50IGZyZXE7CisJaW50ICgqc2V0dXApKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGZyZXEpOworfTsKKworc3RhdGljIHZvaWQgb21hcDJfb25lbmFuZF9kbWFfY2IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGRhdGE7CisKKwljb21wbGV0ZSgmYy0+ZG1hX2RvbmUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2lkOworCisJY29tcGxldGUoJmMtPmlycV9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZHcoYy0+b25lbmFuZC5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgdW5zaWduZWQgc2hvcnQgdmFsdWUsCisJCQkgICAgIGludCByZWcpCit7CisJd3JpdGV3KHZhbHVlLCBjLT5vbmVuYW5kLmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2VycihjaGFyICptc2csIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGN0cmwsIHVuc2lnbmVkIGludCBpbnRyKQoreworCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAlcyEgc3RhdGUgJWQgY3RybCAweCUwNHggaW50ciAweCUwNHhcbiIsCisJICAgICAgIG1zZywgc3RhdGUsIGN0cmwsIGludHIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dhcm4oY2hhciAqbXNnLCBpbnQgc3RhdGUsIHVuc2lnbmVkIGludCBjdHJsLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaW50cikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJvbmVuYW5kX3dhaXQ6ICVzISBzdGF0ZSAlZCBjdHJsIDB4JTA0eCAiCisJICAgICAgICJpbnRyIDB4JTA0eFxuIiwgbXNnLCBzdGF0ZSwgY3RybCwgaW50cik7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfb25lbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwl1bnNpZ25lZCBpbnQgaW50ciA9IDA7CisJdW5zaWduZWQgaW50IGN0cmw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBzeXNjZmc7CisKKwlpZiAoc3RhdGUgPT0gRkxfUkVTRVRJTkcpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJCXVkZWxheSgxKTsKKwkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJaWYgKGludHIgJiBPTkVOQU5EX0lOVF9NQVNURVIpCisJCQkJYnJlYWs7CisJCX0KKwkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKKwkJCXdhaXRfZXJyKCJjb250cm9sbGVyIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCEoaW50ciAmIE9ORU5BTkRfSU5UX1JFU0VUKSkgeworCQkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhdGUgIT0gRkxfUkVBRElORykgeworCQlpbnQgcmVzdWx0OworCisJCS8qIFR1cm4gaW50ZXJydXB0cyBvbiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCWlmICghKHN5c2NmZyAmIE9ORU5BTkRfU1lTX0NGRzFfSU9CRSkpIHsKKwkJCXN5c2NmZyB8PSBPTkVOQU5EX1NZU19DRkcxX0lPQkU7CisJCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQkJLyogQWRkIGEgZGVsYXkgdG8gbGV0IEdQSU8gc2V0dGxlICovCisJCQkJc3lzY2ZnID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1lTX0NGRzEpOworCQl9CisKKwkJSU5JVF9DT01QTEVUSU9OKGMtPmlycV9kb25lKTsKKwkJaWYgKGMtPmdwaW9faXJxKSB7CisJCQlyZXN1bHQgPSBvbWFwX2dldF9ncGlvX2RhdGFpbihjLT5ncGlvX2lycSk7CisJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpbnRyID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKwkJCQl3YWl0X2VycigiZ3BpbyBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXN1bHQgPSAwOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWludCByZXRyeV9jbnQgPSAwOworcmV0cnk6CisJCQlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmMtPmlycV9kb25lLAorCQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCS8qIFRpbWVvdXQgYWZ0ZXIgMjBtcyAqLworCQkJCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisJCQkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfT05HTykgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIHN0aWxsIGdvaW5nCisJCQkJCSAqIHNvIGdpdmUgaXQgc29tZSBtb3JlIHRpbWUuCisJCQkJCSAqLworCQkJCQlyZXRyeV9jbnQgKz0gMTsKKwkJCQkJaWYgKHJldHJ5X2NudCA8IDMpCisJCQkJCQlnb3RvIHJldHJ5OworCQkJCQlpbnRyID0gcmVhZF9yZWcoYywKKwkJCQkJCQlPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCQl3YWl0X2VycigidGltZW91dCIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmICgoaW50ciAmIE9ORU5BTkRfSU5UX01BU1RFUikgPT0gMCkKKwkJCQkJd2FpdF93YXJuKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaW50IHJldHJ5X2NudCA9IDA7CisKKwkJLyogVHVybiBpbnRlcnJ1cHRzIG9mZiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCXN5c2NmZyAmPSB+T05FTkFORF9TWVNfQ0ZHMV9JT0JFOworCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmIChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZW91dCBhZnRlciAyMG1zICovCisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9PTkdPKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgc3RpbGwgZ29pbmcKKwkJCQkJICogc28gZ2l2ZSBpdCBzb21lIG1vcmUgdGltZS4KKwkJCQkJICovCisJCQkJCXJldHJ5X2NudCArPSAxOworCQkJCQlpZiAocmV0cnlfY250IDwgMykgeworCQkJCQkJdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJCSAgbXNlY3NfdG9famlmZmllcygyMCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisKKwlpZiAoaW50ciAmIE9ORU5BTkRfSU5UX1JFQUQpIHsKKwkJaW50IGVjYyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOworCisJCWlmIChlY2MpIHsKKwkJCXVuc2lnbmVkIGludCBhZGRyMSwgYWRkcjg7CisKKwkJCWFkZHIxID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCQkJYWRkcjggPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTOCk7CisJCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gIgorCQkJCSAgICAgICAiMHglMDR4LCBhZGRyMSAlI3gsIGFkZHI4ICUjeFxuIiwKKwkJCQkgICAgICAgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQkJCXJldHVybiAtRUJBRE1TRzsKKwkJCX0gZWxzZSBpZiAoZWNjICYgT05FTkFORF9FQ0NfMUJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm9uZW5hbmRfd2FpdDogY29ycmVjdGFibGUgIgorCQkJCSAgICAgICAiRUNDIGVycm9yID0gMHglMDR4LCBhZGRyMSAlI3gsICIKKwkJCQkgICAgICAgImFkZHI4ICUjeFxuIiwgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBGTF9SRUFESU5HKSB7CisJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9FUlJPUikgeworCQl3YWl0X2VycigiY29udHJvbGxlciBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKKwkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAiCisJCQkJCSJEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGN0cmwgJiAweEZFOUYpCisJCXdhaXRfd2FybigidW5leHBlY3RlZCBjb250cm9sbGVyIHN0YXR1cyIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoT05FTkFORF9DVVJSRU5UX0JVRkZFUlJBTSh0aGlzKSkgeworCQlpZiAoYXJlYSA9PSBPTkVOQU5EX0RBVEFSQU0pCisJCQlyZXR1cm4gbXRkLT53cml0ZXNpemU7CisJCWlmIChhcmVhID09IE9ORU5BTkRfU1BBUkVSQU0pCisJCQlyZXR1cm4gbXRkLT5vb2JzaXplOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChNVUxUSV9PTUFQMikKKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXNpemVfdCB4dHJhOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwlpZiAoYnVmID49IGhpZ2hfbWVtb3J5KSB7CisJCXN0cnVjdCBwYWdlICpwMTsKKworCQlpZiAoKChzaXplX3QpYnVmICYgUEFHRV9NQVNLKSAhPQorCQkgICAgKChzaXplX3QpKGJ1ZiArIGNvdW50IC0gMSkgJiBQQUdFX01BU0spKQorCQkJZ290byBvdXRfY29weTsKKwkJcDEgPSB2bWFsbG9jX3RvX3BhZ2UoYnVmKTsKKwkJaWYgKCFwMSkKKwkJCWdvdG8gb3V0X2NvcHk7CisJCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwMSkgKyAoKHNpemVfdClidWYgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwl4dHJhID0gY291bnQgJiAzOworCWlmICh4dHJhKSB7CisJCWNvdW50IC09IHh0cmE7CisJCW1lbWNweShidWYgKyBjb3VudCwgdGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0ICsgY291bnQsIHh0cmEpOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmICghKmRvbmUpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCXJldHVybiAwOworCitvdXRfY29weToKKwltZW1jcHkoYnVmLCB0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwkvKiBwYW5pY193cml0ZSgpIG1heSBiZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAqLworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJZ290byBvdXRfY29weTsKKworCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKKwkJc3RydWN0IHBhZ2UgKnAxOworCisJCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9CisJCSAgICAoKHNpemVfdCkoYnVmICsgY291bnQgLSAxKSAmIFBBR0VfTUFTSykpCisJCQlnb3RvIG91dF9jb3B5OworCQlwMSA9IHZtYWxsb2NfdG9fcGFnZShidWYpOworCQlpZiAoIXAxKQorCQkJZ290byBvdXRfY29weTsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCX0KKworCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWYsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfZHN0ID0gYy0+cGh5c19iYXNlICsgYnJhbV9vZmZzZXQ7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QpKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAoISpkb25lKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iKTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2NvcHk6CisJbWVtY3B5KHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCwgYnVmLCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK2ludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCSBzaXplX3QgY291bnQpOworCitpbnQgb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCSAgaW50IG9mZnNldCwgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAyKQorCitzdGF0aWMgaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKworCWJyYW1fb2Zmc2V0ID0gb21hcDJfb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSkgKyBhcmVhICsgb2Zmc2V0OworCS8qIERNQSBpcyBub3QgdXNlZC4gIFJldmlzaXQgUE0gcmVxdWlyZW1lbnRzIGJlZm9yZSBlbmFibGluZyBpdC4gKi8KKwlpZiAoMSB8fCAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB8fAorCSAgICAoKHZvaWQgKikgYnVmZmVyID49ICh2b2lkICopIGhpZ2hfbWVtb3J5KSB8fCAoYnJhbV9vZmZzZXQgJiAzKSB8fAorCSAgICAoKCh1bnNpZ25lZCBpbnQpIGJ1ZmZlcikgJiAzKSB8fCAoY291bnQgPCAxMDI0KSB8fCAoY291bnQgJiAzKSkgeworCQltZW1jcHkoYnVmZmVyLCAoX19mb3JjZSB2b2lkICopKHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCksCisJCSAgICAgICBjb3VudCk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCAvIDQsIDEsIDAsIDAsIDApOworCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQlkbWFfc3JjLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCSBkbWFfZHN0LCAwLCAwKTsKKworCUlOSVRfQ09NUExFVElPTihjLT5kbWFfZG9uZSk7CisJb21hcF9zdGFydF9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmMtPmRtYV9kb25lKTsKKworCWRtYV91bm1hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCwgY291bnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwkvKiBETUEgaXMgbm90IHVzZWQuICBSZXZpc2l0IFBNIHJlcXVpcmVtZW50cyBiZWZvcmUgZW5hYmxpbmcgaXQuICovCisJaWYgKDEgfHwgKGMtPmRtYV9jaGFubmVsIDwgMCkgfHwKKwkgICAgKCh2b2lkICopIGJ1ZmZlciA+PSAodm9pZCAqKSBoaWdoX21lbW9yeSkgfHwgKGJyYW1fb2Zmc2V0ICYgMykgfHwKKwkgICAgKCgodW5zaWduZWQgaW50KSBidWZmZXIpICYgMykgfHwgKGNvdW50IDwgMTAyNCkgfHwgKGNvdW50ICYgMykpIHsKKwkJbWVtY3B5KChfX2ZvcmNlIHZvaWQgKikodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0KSwgYnVmZmVyLAorCQkgICAgICAgY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgKHZvaWQgKikgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJZG1hX2RzdCA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKKwkJCQkgICAgIGNvdW50IC8gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJIHNpemVfdCBjb3VudCk7CisKK2ludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpOworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfb25lbmFuZF9kcml2ZXI7CisKK3N0YXRpYyBpbnQgX19hZGp1c3RfdGltaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKworCWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCUJVR19PTihjLT5zZXR1cCA9PSBOVUxMKTsKKworCS8qIERNQSBpcyBub3QgaW4gdXNlIHNvIHRoaXMgaXMgYWxsIHRoYXQgaXMgbmVlZGVkICovCisJLyogUmV2aXNpdCBmb3IgT01BUDMhICovCisJcmV0ID0gYy0+c2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBvbWFwMl9vbmVuYW5kX3JlcGhhc2Uodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmb21hcDJfb25lbmFuZF9kcml2ZXIuZHJpdmVyLCBOVUxMLAorCQkJCSAgICAgIE5VTEwsIF9fYWRqdXN0X3RpbWluZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKiBXaXRoIGNlcnRhaW4gY29udGVudCBpbiB0aGUgYnVmZmVyIFJBTSwgdGhlIE9NQVAgYm9vdCBST00gY29kZQorCSAqIGNhbiByZWNvZ25pemUgdGhlIGZsYXNoIGNoaXAgaW5jb3JyZWN0bHkuIFplcm8gaXQgb3V0IGJlZm9yZQorCSAqIHNvZnQgcmVzZXQuCisJICovCisJbWVtc2V0KChfX2ZvcmNlIHZvaWQgKiljLT5vbmVuYW5kLmJhc2UsIDAsIE9ORU5BTkRfQlVGUkFNX1NJWkUpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMl9vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKwlpbnQgcjsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwMl9vbmVuYW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfY29tcGxldGlvbigmYy0+aXJxX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCWMtPmdwbWNfY3MgPSBwZGF0YS0+Y3M7CisJYy0+Z3Bpb19pcnEgPSBwZGF0YS0+Z3Bpb19pcnE7CisJYy0+ZG1hX2NoYW5uZWwgPSBwZGF0YS0+ZG1hX2NoYW5uZWw7CisJaWYgKGMtPmRtYV9jaGFubmVsIDwgMCkgeworCQkvKiBpZiAtMSwgZG9uJ3QgdXNlIERNQSAqLworCQljLT5ncGlvX2lycSA9IDA7CisJfQorCisJciA9IGdwbWNfY3NfcmVxdWVzdChjLT5ncG1jX2NzLCBPTkVOQU5EX0lPX1NJWkUsICZjLT5waHlzX2Jhc2UpOworCWlmIChyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSwKKwkJCSAgICAgICBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXNlcnZlIG1lbW9yeSByZWdpb24gYXQgMHglMDhseCwgIgorCQkJInNpemU6IDB4JXhcbiIsCWMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9jczsKKwl9CisJYy0+b25lbmFuZC5iYXNlID0gaW9yZW1hcChjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSk7CisJaWYgKGMtPm9uZW5hbmQuYmFzZSA9PSBOVUxMKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJaWYgKHBkYXRhLT5vbmVuYW5kX3NldHVwICE9IE5VTEwpIHsKKwkJciA9IHBkYXRhLT5vbmVuYW5kX3NldHVwKGMtPm9uZW5hbmQuYmFzZSwgYy0+ZnJlcSk7CisJCWlmIChyIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiT25lbmFuZCBwbGF0Zm9ybSBzZXR1cCBmYWlsZWQ6ICIKKwkJCQkiJWRcbiIsIHIpOworCQkJZ290byBlcnJfaW91bm1hcDsKKwkJfQorCQljLT5zZXR1cCA9IHBkYXRhLT5vbmVuYW5kX3NldHVwOworCX0KKworCWlmIChjLT5ncGlvX2lycSkgeworCQlpZiAoKHIgPSBvbWFwX3JlcXVlc3RfZ3BpbyhjLT5ncGlvX2lycSkpIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3IgIgorCQkJCSJPbmVOQU5EXG4iLCBjLT5ncGlvX2lycSk7CisJCQlnb3RvIGVycl9pb3VubWFwOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihjLT5ncGlvX2lycSwgMSk7CisKKwlpZiAoKHIgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwKKwkJCSAgICAgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICAgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsIGMpKSA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfZ3BpbzsKKwl9CisKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPj0gMCkgeworCQlyID0gb21hcF9yZXF1ZXN0X2RtYSgwLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAorCQkJCSAgICAgb21hcDJfb25lbmFuZF9kbWFfY2IsICh2b2lkICopIGMsCisJCQkJICAgICAmYy0+ZG1hX2NoYW5uZWwpOworCQlpZiAociA9PSAwKSB7CisJCQlvbWFwX3NldF9kbWFfd3JpdGVfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCU9NQVBfRE1BX1dSSVRFX05PTl9QT1NURUQpOworCQkJb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJICAgIE9NQVBfRE1BX0RBVEFfQlVSU1RfOCk7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCSAgICAgT01BUF9ETUFfREFUQV9CVVJTVF84KTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGZvciBPbmVOQU5ELCAiCisJCQkJICJ1c2luZyBQSU8gaW5zdGVhZFxuIik7CisJCQljLT5kbWFfY2hhbm5lbCA9IC0xOworCQl9CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpemluZyBvbiBDUyVkLCBwaHlzIGJhc2UgMHglMDhseCwgdmlydHVhbCAiCisJCSAiYmFzZSAlcFxuIiwgYy0+Z3BtY19jcywgYy0+cGh5c19iYXNlLAorCQkgYy0+b25lbmFuZC5iYXNlKTsKKworCWMtPnBkZXYgPSBwZGV2OworCWMtPm10ZC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwljLT5tdGQucHJpdiA9ICZjLT5vbmVuYW5kOworCWMtPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOworCisJaWYgKGMtPmRtYV9jaGFubmVsID49IDApIHsKKwkJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9ICZjLT5vbmVuYW5kOworCisJCXRoaXMtPndhaXQgPSBvbWFwMl9vbmVuYW5kX3dhaXQ7CisJCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQkJdGhpcy0+cmVhZF9idWZmZXJyYW0gPSBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtOworCQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtID0gb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW07CisJCX0gZWxzZSB7CisJCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbSA9IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW07CisJCQl0aGlzLT53cml0ZV9idWZmZXJyYW0gPSBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbTsKKwkJfQorCX0KKworCWlmICgociA9IG9uZW5hbmRfc2NhbigmYy0+bXRkLCAxKSkgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX2RtYTsKKworCXN3aXRjaCAoKGMtPm9uZW5hbmQudmVyc2lvbl9pZCA+PiA0KSAmIDB4ZikgeworCWNhc2UgMDoKKwkJYy0+ZnJlcSA9IDQwOworCQlicmVhazsKKwljYXNlIDE6CisJCWMtPmZyZXEgPSA1NDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljLT5mcmVxID0gNjY7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYy0+ZnJlcSA9IDgzOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAocGRhdGEtPnBhcnRzICE9IE5VTEwpCisJCXIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoJmMtPm10ZCwgcGRhdGEtPnBhcnRzLAorCQkJCSAgICAgICBwZGF0YS0+bnJfcGFydHMpOworCWVsc2UKKyNlbmRpZgorCQlyID0gYWRkX210ZF9kZXZpY2UoJmMtPm10ZCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX29uZW5hbmQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjKTsKKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9vbmVuYW5kOgorCW9uZW5hbmRfcmVsZWFzZSgmYy0+bXRkKTsKK2Vycl9yZWxlYXNlX2RtYToKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgIT0gLTEpCisJCW9tYXBfZnJlZV9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCWlmIChjLT5ncGlvX2lycSkKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworZXJyX3JlbGVhc2VfZ3BpbzoKKwlpZiAoYy0+Z3Bpb19pcnEpCisJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKK2Vycl9mcmVlX2NzOgorCWdwbWNfY3NfZnJlZShjLT5ncG1jX2NzKTsKK2Vycl9rZnJlZToKKwlrZnJlZShjKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJQlVHX09OKGMgPT0gTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAoYy0+cGFydHMpCisJCWRlbF9tdGRfcGFydGl0aW9ucygmYy0+bXRkKTsKKwllbHNlCisJCWRlbF9tdGRfZGV2aWNlKCZjLT5tdGQpOworI2Vsc2UKKwlkZWxfbXRkX2RldmljZSgmYy0+bXRkKTsKKyNlbmRpZgorCisJb25lbmFuZF9yZWxlYXNlKCZjLT5tdGQpOworCWlmIChjLT5kbWFfY2hhbm5lbCAhPSAtMSkKKwkJb21hcF9mcmVlX2RtYShjLT5kbWFfY2hhbm5lbCk7CisJb21hcDJfb25lbmFuZF9zaHV0ZG93bihwZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZiAoYy0+Z3Bpb19pcnEpIHsKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworCQlvbWFwX2ZyZWVfZ3BpbyhjLT5ncGlvX2lycSk7CisJfQorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworCWtmcmVlKGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAyX29uZW5hbmRfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwMl9vbmVuYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcDJfb25lbmFuZF9yZW1vdmUsCisJLnNodXRkb3duCT0gb21hcDJfb25lbmFuZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9vbmVuYW5kX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EIGRyaXZlciBpbml0aWFsaXppbmdcbiIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAyX29uZW5hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAyX29uZW5hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMl9vbmVuYW5kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAyX29uZW5hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMl9vbmVuYW5kX2V4aXQpOworCitNT0RVTEVfQUxJQVMoRFJJVkVSX05BTUUpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2x1ZSBsYXllciBmb3IgT25lTkFORCBmbGFzaCBvbiBPTUFQMiAvIE9NQVAzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCA5MjZjZjNhLi45MGVkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9FUkFTSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NzZmRjLmMgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCmluZGV4IGE1ZjNkNjAuLjMzYTVkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NzZmRjLmMKKysrIGIvZHJpdmVycy9tdGQvc3NmZGMuYwpAQCAtMzIxLDggKzMyMSw3IEBACiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKIAkJIlNTRkRDX1JPOiBjaXNfYmxvY2s9JWQsZXJhc2Vfc2l6ZT0lZCxtYXBfbGVuPSVkLG5fem9uZXM9JWRcbiIsCiAJCXNzZmRjLT5jaXNfYmxvY2ssIHNzZmRjLT5lcmFzZV9zaXplLCBzc2ZkYy0+bWFwX2xlbiwKLQkJKHNzZmRjLT5tYXBfbGVuICsgTUFYX1BIWVNfQkxLX1BFUl9aT05FIC0gMSkgLwotCQlNQVhfUEhZU19CTEtfUEVSX1pPTkUpOworCQlESVZfUk9VTkRfVVAoc3NmZGMtPm1hcF9sZW4sIE1BWF9QSFlTX0JMS19QRVJfWk9ORSkpOwogCiAJLyogU2V0IGdlb21ldHJ5ICovCiAJc3NmZGMtPmhlYWRzID0gMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jIGIvZHJpdmVycy9tdGQvdWJpL2NkZXYuYwppbmRleCAwM2M3NTliLi5iMzBhMGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMKQEAgLTEwNCwxMiArMTA0LDkgQEAKIAlzdHJ1Y3QgdWJpX3ZvbHVtZV9kZXNjICpkZXNjOwogCWludCB2b2xfaWQgPSBpbWlub3IoaW5vZGUpIC0gMSwgbW9kZSwgdWJpX251bTsKIAotCWxvY2tfa2VybmVsKCk7CiAJdWJpX251bSA9IHViaV9tYWpvcjJudW0oaW1ham9yKGlub2RlKSk7Ci0JaWYgKHViaV9udW0gPCAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwlpZiAodWJpX251bSA8IDApCiAJCXJldHVybiB1YmlfbnVtOwotCX0KIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJbW9kZSA9IFVCSV9SRUFEV1JJVEU7CkBAIC0xMTksNyArMTE2LDYgQEAKIAlkYmdfZ2VuKCJvcGVuIHZvbHVtZSAlZCwgbW9kZSAlZCIsIHZvbF9pZCwgbW9kZSk7CiAKIAlkZXNjID0gdWJpX29wZW5fdm9sdW1lKHViaV9udW0sIHZvbF9pZCwgbW9kZSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCWlmIChJU19FUlIoZGVzYykpCiAJCXJldHVybiBQVFJfRVJSKGRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCA5NjdiYjQ0Li40ZjJkYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCQlwbnVtLCB2b2xfaWQsIGxudW0sIGVjLCBzcW51bSwgYml0ZmxpcHMpOwogCiAJc3YgPSBhZGRfdm9sdW1lKHNpLCB2b2xfaWQsIHBudW0sIHZpZF9oZHIpOwotCWlmIChJU19FUlIoc3YpIDwgMCkKKwlpZiAoSVNfRVJSKHN2KSkKIAkJcmV0dXJuIFBUUl9FUlIoc3YpOwogCiAJaWYgKHNpLT5tYXhfc3FudW0gPCBzcW51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMgYi9kcml2ZXJzL210ZC91YmkvdnRibC5jCmluZGV4IDIxN2QwZTEuLjMzM2M4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYwpAQCAtMjQ0LDggKzI0NCw4IEBACiAJCX0KIAogCQlpZiAocmVzZXJ2ZWRfcGVicyA+IHViaS0+Z29vZF9wZWJfY291bnQpIHsKLQkJCWRiZ19lcnIoInRvbyBsYXJnZSByZXNlcnZlZF9wZWJzLCBnb29kIFBFQnMgJWQiLAotCQkJCXViaS0+Z29vZF9wZWJfY291bnQpOworCQkJZGJnX2VycigidG9vIGxhcmdlIHJlc2VydmVkX3BlYnMgJWQsIGdvb2QgUEVCcyAlZCIsCisJCQkJcmVzZXJ2ZWRfcGVicywgdWJpLT5nb29kX3BlYl9jb3VudCk7CiAJCQllcnIgPSA5OwogCQkJZ290byBiYWQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IGI5ZDA5N2MuLjNhN2JjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtNDAsNyArNDAsNyBAQAogCQl2MS4xNCAxMC8xNS85NyBBdm9pZGVkIHdhaXRpbmcuLmRpc2NhcmQgbWVzc2FnZSBmb3IgZmFzdCBtYWNoaW5lcyAtZGpiCiAJCXYxLjE1IDEvMzEvOTggRmFzdGVyIHJlY292ZXJ5IGZvciBUeCBlcnJvcnMuIC1kamIKIAkJdjEuMTYgMi8zLzk4IERpZmZlcmVudCBJRCBwb3J0IGhhbmRsaW5nIHRvIGF2b2lkIHNvdW5kIGNhcmRzLiAtZGpiCi0JCXYxLjE4IDEyTWFyMjAwMSBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisJCXYxLjE4IDEyTWFyMjAwMSBBbmRyZXcgTW9ydG9uCiAJCQktIEF2b2lkIGJvZ3VzIGRldGVjdCBvZiAzYzU5MCdzIChBbmRyemVqIEtyenlzenRvZm93aWN6KQogCQkJLSBSZXZpZXdlZCBhZ2FpbnN0IDEuMTggZnJvbSBzY3lsZC5jb20KIAkJdjEuMThhIDE3Tm92MjAwMSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAxZDhhZjMzLi5hZDMwMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI0MTAsNyArMjQxMCw2IEBACiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCkBAIC0yNDI2LDYgKzI0MjUsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl4Z2JlLgogCitjb25maWcgSVhHQkVfRENBCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gSVhHQkUgJiYgRENBICYmICEoSVhHQkU9eSAmJiBEQ0E9bSkKKwogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTI0NjIsNyArMjQ2Niw2IEBACiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTXlyaWNvbSBNeXJpLTEwRyBEdWFsIFByb3RvY29sIGludGVyZmFjZSBpbgogCSAgRXRoZXJuZXQgbW9kZS4gSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLApAQCAtMjQ3NCw2ICsyNDc3LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBteXJpMTBnZS4KIAorY29uZmlnIE1ZUkkxMEdFX0RDQQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1ZUkkxMEdFICYmIERDQSAmJiAhKE1ZUkkxMEdFPXkgJiYgRENBPW0pCisKIGNvbmZpZyBORVRYRU5fTklDCiAJdHJpc3RhdGUgIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQyIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCBhMjhkZTgxLi43MTA3NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMzYsOCArMzYsNyBAQAogCiAgIEFsYW4gQ294ICAgICAgICAgIDogUmVtb3ZlZCAxLjIgc3VwcG9ydCwgYWRkZWQgMi4xIGV4dHJhIGNvdW50ZXJzLgogCi0gIEFuZHJldyBNb3J0b24gICAgIDogYW5kcmV3bUB1b3cuZWR1LmF1Ci0gICAgICAgICAgICAgICAgICAgIDogS2VybmVsIDIuMy40OAorICBBbmRyZXcgTW9ydG9uICAgICA6IEtlcm5lbCAyLjMuNDgKICAgICAgICAgICAgICAgICAgICAgOiBIYW5kbGUga21hbGxvYygpIGZhaWx1cmVzCiAgICAgICAgICAgICAgICAgICAgIDogT3RoZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBmaXhlcwogICAgICAgICAgICAgICAgICAgICA6IEFkZCBTTVAgbG9ja3MKQEAgLTQ5LDcgKzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgOiBGaXhlZCBhbiBvdXQtb2YtbWVtIGJ1ZyBpbiBkbWFfcngoKQogICAgICAgICAgICAgICAgICAgICA6IFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjMuOTktcHJlMQorICBBbmRyZXcgTW9ydG9uICAgICA6IEtlcm5lbCAyLjMuOTktcHJlMQogICAgICAgICAgICAgICAgICAgICA6IFVzZSBza2JfcmVzZXJ2ZSB0byBsb25nd29yZCBhbGlnbiBJUCBoZWFkZXIgKHR3byBwbGFjZXMpCiAgICAgICAgICAgICAgICAgICAgIDogUmVtb3ZlIGEgZGVsYXkgbG9vcCBmcm9tIGRtYV9yeCgpCiAgICAgICAgICAgICAgICAgICAgIDogUmVwbGFjZSAnMTAwJyB3aXRoIEhaCkBAIC01NywxMSArNTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgOiBBZGRlZCAnY3M4OXgwX2RtYT1OJyBrZXJuZWwgYm9vdCBvcHRpb24KICAgICAgICAgICAgICAgICAgICAgOiBDb3JyZWN0bHkgaW5pdGlhbGlzZSBscC0+bG9jayBpbiBub24tbW9kdWxlIGNvbXBpbGUKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjMuOTktcHJlNC0xCisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuMy45OS1wcmU0LTEKICAgICAgICAgICAgICAgICAgICAgOiBNT0RfSU5DL0RFQyByYWNlIGZpeCAoc2VlCiAgICAgICAgICAgICAgICAgICAgIDogaHR0cDovL3d3dy51d3NnLmluZGlhbmEuZWR1L2h5cGVybWFpbC9saW51eC9rZXJuZWwvMDAwMy4zLzE1MzIuaHRtbCkKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjQuMC10ZXN0Ny1wcmUyCisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuNC4wLXRlc3Q3LXByZTIKICAgICAgICAgICAgICAgICAgICAgOiBFbmhhbmNlZCBFRVBST00gc3VwcG9ydCB0byBjb3ZlciBtb3JlIGRldmljZXMsCiAgICAgICAgICAgICAgICAgICAgIDogICBhYnN0cmFjdGVkIElSUSBtYXBwaW5nIHRvIHN1cHBvcnQgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgYXJjaAogICAgICAgICAgICAgICAgICAgICA6ICAgKEphc29uIEd1bnRob3JwZSA8amdnQHVhbGJlcnRhLmNhPikKQEAgLTE1Niw3ICsxNTUsNyBAQAogI2luY2x1ZGUgImNzODl4MC5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9Ci0iY3M4OXgwLmM6IHYyLjQuMy1wcmUxIFJ1c3NlbGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT5cbiI7CisiY3M4OXgwLmM6IHYyLjQuMy1wcmUxIFJ1c3NlbGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b25cbiI7CiAKICNkZWZpbmUgRFJWX05BTUUgImNzODl4MCIKIApAQCAtMTg3Nyw3ICsxODc2LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2RtYSAsICIoaWdub3JlZCkiKTsKICNlbmRpZgogCi1NT0RVTEVfQVVUSE9SKCJNaWtlIENydXNlLCBSdXNzd2xsIE5lbHNvbiA8bmVsc29uQGNyeW53ci5jb20+LCBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+Iik7CitNT0RVTEVfQVVUSE9SKCJNaWtlIENydXNlLCBSdXNzd2xsIE5lbHNvbiA8bmVsc29uQGNyeW53ci5jb20+LCBBbmRyZXcgTW9ydG9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL0tjb25maWcKaW5kZXggYmNlYzczMi4uNzhhMTYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9LY29uZmlnCkBAIC02MiwzICs2MiwxNSBAQAogY29uZmlnIElCTV9ORVdfRU1BQ19FTUFDNAogCWJvb2wKIAlkZWZhdWx0IG4KKworY29uZmlnIElCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBJQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBJQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIKKwlib29sCisJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggNThkZmQzMi4uZWZjZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMjAyLDEzICsyMDIsMTUgQEAKIHsKIAlyZXR1cm4gIHBoeV9tb2RlID09IFBIWV9NT0RFX0dNSUkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfUkdNSUkgfHwKKwkJcGh5X21vZGUgPT0gUEhZX01PREVfU0dNSUkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfVEJJIHx8CiAJCXBoeV9tb2RlID09IFBIWV9NT0RFX1JUQkk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcGh5X2dwY3MoaW50IHBoeV9tb2RlKQogewotCXJldHVybiAgcGh5X21vZGUgPT0gUEhZX01PREVfVEJJIHx8CisJcmV0dXJuICBwaHlfbW9kZSA9PSBQSFlfTU9ERV9TR01JSSB8fAorCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9UQkkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfUlRCSTsKIH0KIApAQCAtNTYyLDggKzU2NCw5IEBACiAJc3dpdGNoIChkZXYtPnBoeS5zcGVlZCkgewogCWNhc2UgU1BFRURfMTAwMDoKIAkJaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpIHsKLQkJCW1yMSB8PSBFTUFDX01SMV9NRl8xMDAwR1BDUyB8Ci0JCQkJRU1BQ19NUjFfTUZfSVBQQShkZXYtPnBoeS5hZGRyZXNzKTsKKwkJCW1yMSB8PSBFTUFDX01SMV9NRl8xMDAwR1BDUyB8IEVNQUNfTVIxX01GX0lQUEEoCisJCQkJKGRldi0+cGh5LmdwY3NfYWRkcmVzcyAhPSAweGZmZmZmZmZmKSA/CisJCQkJIGRldi0+cGh5LmdwY3NfYWRkcmVzcyA6IGRldi0+cGh5LmFkZHJlc3MpOwogCiAJCQkvKiBQdXQgc29tZSBhcmJpdHJhcnkgT1VJLCBNYW51ZiAmIFJldiBJRHMgc28gd2UgY2FuCiAJCQkgKiBpZGVudGlmeSB0aGlzIEdQQ1MgUEhZIGxhdGVyLgpAQCAtNjc1LDggKzY3OCwxMiBAQAogCW91dF9iZTMyKCZwLT5pc2VyLCAgcik7CiAKIAkvKiBXZSBuZWVkIHRvIHRha2UgR1BDUyBQSFkgb3V0IG9mIGlzb2xhdGUgbW9kZSBhZnRlciBFTUFDIHJlc2V0ICovCi0JaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpCi0JCWVtYWNfbWlpX3Jlc2V0X3BoeSgmZGV2LT5waHkpOworCWlmIChlbWFjX3BoeV9ncGNzKGRldi0+cGh5Lm1vZGUpKSB7CisJCWlmIChkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gMHhmZmZmZmZmZikKKwkJCWVtYWNfbWlpX3Jlc2V0X2dwY3MoJmRldi0+cGh5KTsKKwkJZWxzZQorCQkJZW1hY19taWlfcmVzZXRfcGh5KCZkZXYtPnBoeSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsNyArODg4LDkgQEAKIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAotCXJlcyA9IF9fZW1hY19tZGlvX3JlYWQoZGV2LT5tZGlvX2luc3RhbmNlID8gZGV2LT5tZGlvX2luc3RhbmNlIDogZGV2LAorCXJlcyA9IF9fZW1hY19tZGlvX3JlYWQoKGRldi0+bWRpb19pbnN0YW5jZSAmJgorCQkJCWRldi0+cGh5LmdwY3NfYWRkcmVzcyAhPSBpZCkgPworCQkJCWRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKIAkJCSAgICAgICAodTgpIGlkLCAodTgpIHJlZyk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTg5MCw3ICs4OTksOSBAQAogewogCXN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCV9fZW1hY19tZGlvX3dyaXRlKGRldi0+bWRpb19pbnN0YW5jZSA/IGRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKKwlfX2VtYWNfbWRpb193cml0ZSgoZGV2LT5tZGlvX2luc3RhbmNlICYmCisJCQkgICBkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gaWQpID8KKwkJCSAgIGRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKIAkJCSAgKHU4KSBpZCwgKHU4KSByZWcsICh1MTYpIHZhbCk7CiB9CiAKQEAgLTIzODIsNyArMjM5MywxMSBAQAogCQkgKiBYWFggSSBwcm9iYWJseSBzaG91bGQgbW92ZSB0aGVzZSBzZXR0aW5ncyB0byB0aGUgZGV2IHRyZWUKIAkJICovCiAJCWRldi0+cGh5LmFkZHJlc3MgPSAtMTsKLQkJZGV2LT5waHkuZmVhdHVyZXMgPSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9NSUk7CisJCWRldi0+cGh5LmZlYXR1cmVzID0gU1VQUE9SVEVEX01JSTsKKwkJaWYgKGVtYWNfcGh5X3N1cHBvcnRzX2dpZ2UoZGV2LT5waHlfbW9kZSkpCisJCQlkZXYtPnBoeS5mZWF0dXJlcyB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCWVsc2UKKwkJCWRldi0+cGh5LmZlYXR1cmVzIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwogCQlkZXYtPnBoeS5wYXVzZSA9IDE7CiAKIAkJcmV0dXJuIDA7CkBAIC0yNDIxLDcgKzI0MzYsOSBAQAogCQkgKiBOb3RlIHRoYXQgdGhlIGJ1c3lfcGh5X21hcCBpcyBjdXJyZW50bHkgZ2xvYmFsCiAJCSAqIHdoaWxlIGl0IHNob3VsZCBwcm9iYWJseSBiZSBwZXItQVNJQy4uLgogCQkgKi8KLQkJZGV2LT5waHkuYWRkcmVzcyA9IGRldi0+Y2VsbF9pbmRleDsKKwkJZGV2LT5waHkuZ3Bjc19hZGRyZXNzID0gZGV2LT5ncGNzX2FkZHJlc3M7CisJCWlmIChkZXYtPnBoeS5ncGNzX2FkZHJlc3MgPT0gMHhmZmZmZmZmZikKKwkJCWRldi0+cGh5LmFkZHJlc3MgPSBkZXYtPmNlbGxfaW5kZXg7CiAJfQogCiAJZW1hY19jb25maWd1cmUoZGV2KTsKQEAgLTI1MzEsNiArMjU0OCw4IEBACiAJCWRldi0+cGh5X2FkZHJlc3MgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAicGh5LW1hcCIsICZkZXYtPnBoeV9tYXAsIDApKQogCQlkZXYtPnBoeV9tYXAgPSAweGZmZmZmZmZmOworCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiZ3Bjcy1hZGRyZXNzIiwgJmRldi0+Z3Bjc19hZGRyZXNzLCAwKSkKKwkJZGV2LT5ncGNzX2FkZHJlc3MgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLT5wYXJlbnQsICJjbG9jay1mcmVxdWVuY3kiLCAmZGV2LT5vcGJfYnVzX2ZyZXEsIDEpKQogCQlyZXR1cm4gLUVOWElPOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAidGFoLWRldmljZSIsICZkZXYtPnRhaF9waCwgMCkpCkBAIC0yNTg1LDYgKzI2MDQsOCBAQAogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBlcCIpIHx8CiAJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQ0MGdyIikpCiAJCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYOworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00MDVleiIpKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBFTUFDX0ZUUl9OT19GTE9XX0NPTlRST0xfNDB4OwogCX0KIAogCS8qIEZpeHVwIHNvbWUgZmVhdHVyZSBiaXRzIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHJlZSAqLwpAQCAtMjg0Miw2ICsyODYzLDkgQEAKIAkgICAgICAgbmRldi0+ZGV2X2FkZHJbMF0sIG5kZXYtPmRldl9hZGRyWzFdLCBuZGV2LT5kZXZfYWRkclsyXSwKIAkgICAgICAgbmRldi0+ZGV2X2FkZHJbM10sIG5kZXYtPmRldl9hZGRyWzRdLCBuZGV2LT5kZXZfYWRkcls1XSk7CiAKKwlpZiAoZGV2LT5waHlfbW9kZSA9PSBQSFlfTU9ERV9TR01JSSkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogaW4gU0dNSUkgbW9kZVxuIiwgbmRldi0+bmFtZSk7CisKIAlpZiAoZGV2LT5waHkuYWRkcmVzcyA+PSAwKQogCQlwcmludGsoIiVzOiBmb3VuZCAlcyBQSFkgKDB4JTAyeClcbiIsIG5kZXYtPm5hbWUsCiAJCSAgICAgICBkZXYtPnBoeS5kZWYtPm5hbWUsIGRldi0+cGh5LmFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5oCmluZGV4IDVjYTcwZTUuLjE4ZDU2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmgKQEAgLTE5MCw2ICsxOTAsOSBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsJCWxpbmtfd29yazsKIAlpbnQJCQkJbGlua19wb2xsaW5nOwogCisJLyogR1BDUyBQSFkgaW5mb3MgKi8KKwl1MzIJCQkJZ3Bjc19hZGRyZXNzOworCiAJLyogU2hhcmVkIE1ESU8gaWYgYW55ICovCiAJdTMyCQkJCW1kaW9fcGg7CiAJc3RydWN0IG9mX2RldmljZQkJKm1kaW9fZGV2OwpAQCAtMzQ1LDYgKzM0OCw5IEBACiAjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSQogCSAgICBFTUFDX0ZUUl9IQVNfUkdNSUkJfAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwKKwkgICAgRU1BQ19GVFJfTk9fRkxPV19DT05UUk9MXzQweCB8CisjZW5kaWYKIAlFTUFDX0ZUUl80NjBFWF9QSFlfQ0xLX0ZJWCB8CiAJRU1BQ19GVFJfNDQwRVBfUEhZX0NMS19GSVgsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwppbmRleCAxMGMyNjdiLi4xODM5ZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CiAKIHN0YXRpYyBpbnQgbWFsX2NvdW50OwogCkBAIC0yNzksNiArMjgwLDEwIEBACiAJbWFsX3NjaGVkdWxlX3BvbGwobWFsKTsKIAlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhFT0JJU1IsIHIpOwogCisJaWYgKG1hbF9oYXNfZmVhdHVyZShtYWwsIE1BTF9GVFJfQ0xFQVJfSUNJTlRTVEFUKSkKKwkJbXRkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCwKKwkJCQkobWZkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCkgfCBJQ0lOVFNUQVRfSUNUWCkpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yOTMsNiArMjk4LDEwIEBACiAJbWFsX3NjaGVkdWxlX3BvbGwobWFsKTsKIAlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhFT0JJU1IsIHIpOwogCisJaWYgKG1hbF9oYXNfZmVhdHVyZShtYWwsIE1BTF9GVFJfQ0xFQVJfSUNJTlRTVEFUKSkKKwkJbXRkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCwKKwkJCQkobWZkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCkgfCBJQ0lOVFNUQVRfSUNSWCkpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0zMzYsNiArMzQ1LDI1IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCit7CisJc3RydWN0IG1hbF9pbnN0YW5jZSAqbWFsID0gZGV2X2luc3RhbmNlOworCXUzMiBlc3IgPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfRVNSKTsKKworCWlmIChlc3IgJiBNQUxfRVNSX0VWQikgeworCQkvKiBkZXNjcmlwdG9yIGVycm9yICovCisJCWlmIChlc3IgJiBNQUxfRVNSX0RFKSB7CisJCQlpZiAoZXNyICYgTUFMX0VTUl9DSURUKQorCQkJCXJldHVybiBtYWxfcnhkZShpcnEsIGRldl9pbnN0YW5jZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIG1hbF90eGRlKGlycSwgZGV2X2luc3RhbmNlKTsKKwkJfSBlbHNlIHsgLyogU0VSUiAqLworCQkJcmV0dXJuIG1hbF9zZXJyKGlycSwgZGV2X2luc3RhbmNlKTsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHZvaWQgbWFsX3BvbGxfZGlzYWJsZShzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwsIHN0cnVjdCBtYWxfY29tbWFjICpjb21tYWMpCiB7CiAJLyogU3BpbmxvY2stdHlwZSBzZW1hbnRpY3M6IG9ubHkgb25lIGNhbGxlciBkaXNhYmxlIHBvbGwgYXQgYSB0aW1lICovCkBAIC00OTMsNiArNTIxLDggQEAKIAl1bnNpZ25lZCBpbnQgZGNyX2Jhc2U7CiAJY29uc3QgdTMyICpwcm9wOwogCXUzMiBjZmc7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpcnFfaGFuZGxlcl90IGhkbHJfc2VyciwgaGRscl90eGRlLCBoZGxyX3J4ZGU7CiAKIAltYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFsX2luc3RhbmNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYWwpIHsKQEAgLTU0MiwxMSArNTcyLDIxIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUob2ZkZXYtPm5vZGUsICJpYm0sbWNtYWwtNDA1ZXoiKSkKKwkJbWFsLT5mZWF0dXJlcyB8PSAoTUFMX0ZUUl9DTEVBUl9JQ0lOVFNUQVQgfAorCQkJCU1BTF9GVFJfQ09NTU9OX0VSUl9JTlQpOworCiAJbWFsLT50eGVvYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMCk7CiAJbWFsLT5yeGVvYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMSk7CiAJbWFsLT5zZXJyX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5ub2RlLCAyKTsKLQltYWwtPnR4ZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDMpOwotCW1hbC0+cnhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgNCk7CisKKwlpZiAobWFsX2hhc19mZWF0dXJlKG1hbCwgTUFMX0ZUUl9DT01NT05fRVJSX0lOVCkpIHsKKwkJbWFsLT50eGRlX2lycSA9IG1hbC0+cnhkZV9pcnEgPSBtYWwtPnNlcnJfaXJxOworCX0gZWxzZSB7CisJCW1hbC0+dHhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMyk7CisJCW1hbC0+cnhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgNCk7CisJfQorCiAJaWYgKG1hbC0+dHhlb2JfaXJxID09IE5PX0lSUSB8fCBtYWwtPnJ4ZW9iX2lycSA9PSBOT19JUlEgfHwKIAkgICAgbWFsLT5zZXJyX2lycSA9PSBOT19JUlEgfHwgbWFsLT50eGRlX2lycSA9PSBOT19JUlEgfHwKIAkgICAgbWFsLT5yeGRlX2lycSA9PSBOT19JUlEpIHsKQEAgLTYwOCwxNiArNjQ4LDI2IEBACiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IpICoKIAkJCSAgICAgbWFsX3J4X2JkX29mZnNldChtYWwsIGkpKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+c2Vycl9pcnEsIG1hbF9zZXJyLCAwLCAiTUFMIFNFUlIiLCBtYWwpOworCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NPTU1PTl9FUlJfSU5UKSkgeworCQlpcnFmbGFncyA9IElSUUZfU0hBUkVEOworCQloZGxyX3NlcnIgPSBoZGxyX3R4ZGUgPSBoZGxyX3J4ZGUgPSBtYWxfaW50OworCX0gZWxzZSB7CisJCWlycWZsYWdzID0gMDsKKwkJaGRscl9zZXJyID0gbWFsX3NlcnI7CisJCWhkbHJfdHhkZSA9IG1hbF90eGRlOworCQloZGxyX3J4ZGUgPSBtYWxfcnhkZTsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShtYWwtPnNlcnJfaXJxLCBoZGxyX3NlcnIsIGlycWZsYWdzLCAiTUFMIFNFUlIiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDI7Ci0JZXJyID0gcmVxdWVzdF9pcnEobWFsLT50eGRlX2lycSwgbWFsX3R4ZGUsIDAsICJNQUwgVFggREUiLCBtYWwpOworCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+dHhkZV9pcnEsIGhkbHJfdHhkZSwgaXJxZmxhZ3MsICJNQUwgVFggREUiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDM7CiAJZXJyID0gcmVxdWVzdF9pcnEobWFsLT50eGVvYl9pcnEsIG1hbF90eGVvYiwgMCwgIk1BTCBUWCBFT0IiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDQ7Ci0JZXJyID0gcmVxdWVzdF9pcnEobWFsLT5yeGRlX2lycSwgbWFsX3J4ZGUsIDAsICJNQUwgUlggREUiLCBtYWwpOworCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+cnhkZV9pcnEsIGhkbHJfcnhkZSwgaXJxZmxhZ3MsICJNQUwgUlggREUiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDU7CiAJZXJyID0gcmVxdWVzdF9pcnEobWFsLT5yeGVvYl9pcnEsIG1hbF9yeGVvYiwgMCwgIk1BTCBSWCBFT0IiLCBtYWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmggYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaAppbmRleCA3MTdkYzM4Li4yZjBhODczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaApAQCAtMjEzLDYgKzIxMyw4IEBACiAJc3RydWN0IG9mX2RldmljZQkqb2ZkZXY7CiAJaW50CQkJaW5kZXg7CiAJc3BpbmxvY2tfdAkJbG9jazsKKworCXVuc2lnbmVkIGludCBmZWF0dXJlczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGdldF9tYWxfZGNybihzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwsIGludCByZWcpCkBAIC0yMjUsNiArMjI3LDM4IEBACiAJZGNyX3dyaXRlKG1hbC0+ZGNyX2hvc3QsIHJlZywgdmFsKTsKIH0KIAorLyogRmVhdHVyZXMgb2YgdmFyaW91cyBNQUwgaW1wbGVtZW50YXRpb25zICovCisKKy8qIFNldCBpZiB5b3UgaGF2ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBhbmQgeW91IGhhdmUgdG8gY2xlYXIgdGhlIFNEUgorICogcmVnaXN0ZXIgZm9yIFRYRU9CIGFuZCBSWEVPQiBpbnRlcnJ1cHRzIHRvIHdvcmsKKyAqLworI2RlZmluZSBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVAkweDAwMDAwMDAxCisKKy8qIFNldCBpZiB5b3VyIE1BTCBoYXMgU0VSUiwgVFhERSwgYW5kIFJYREUgT1InZCBpbnRvIGEgc2luZ2xlIFVJQworICogaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgTUFMX0ZUUl9DT01NT05fRVJSX0lOVAkweDAwMDAwMDAyCisKK2VudW0geworCU1BTF9GVFJTX0FMV0FZUyA9IDAsCisKKwlNQUxfRlRSU19QT1NTSUJMRSA9CisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVAorCQlNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCB8CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSCisJCU1BTF9GVFJfQ09NTU9OX0VSUl9JTlQgfAorI2VuZGlmCisJCTAsCit9OworCitzdGF0aWMgaW5saW5lIGludCBtYWxfaGFzX2ZlYXR1cmUoc3RydWN0IG1hbF9pbnN0YW5jZSAqZGV2LAorCQl1bnNpZ25lZCBsb25nIGZlYXR1cmUpCit7CisJcmV0dXJuIChNQUxfRlRSU19BTFdBWVMgJiBmZWF0dXJlKSB8fAorCQkoTUFMX0ZUUlNfUE9TU0lCTEUgJiBkZXYtPmZlYXR1cmVzICYgZmVhdHVyZSk7Cit9CisKIC8qIFJlZ2lzdGVyIE1BTCBkZXZpY2VzICovCiBpbnQgbWFsX2luaXQodm9pZCk7CiB2b2lkIG1hbF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYwppbmRleCA5MTY0YWJiLi5jNDBjZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYwpAQCAtMzgsNiArMzgsMTYgQEAKIAlwaHktPm1kaW9fd3JpdGUocGh5LT5kZXYsIHBoeS0+YWRkcmVzcywgcmVnLCB2YWwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBncGNzX3BoeV9yZWFkKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCByZWcpCit7CisJcmV0dXJuIHBoeS0+bWRpb19yZWFkKHBoeS0+ZGV2LCBwaHktPmdwY3NfYWRkcmVzcywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwY3NfcGh5X3dyaXRlKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCByZWcsIGludCB2YWwpCit7CisJcGh5LT5tZGlvX3dyaXRlKHBoeS0+ZGV2LCBwaHktPmdwY3NfYWRkcmVzcywgcmVnLCB2YWwpOworfQorCiBpbnQgZW1hY19taWlfcmVzZXRfcGh5KHN0cnVjdCBtaWlfcGh5ICpwaHkpCiB7CiAJaW50IHZhbDsKQEAgLTYyLDYgKzcyLDM3IEBACiAJcmV0dXJuIGxpbWl0IDw9IDA7CiB9CiAKK2ludCBlbWFjX21paV9yZXNldF9ncGNzKHN0cnVjdCBtaWlfcGh5ICpwaHkpCit7CisJaW50IHZhbDsKKwlpbnQgbGltaXQgPSAxMDAwMDsKKworCXZhbCA9IGdwY3NfcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7CisJdmFsICY9IH4oQk1DUl9JU09MQVRFIHwgQk1DUl9BTkVOQUJMRSk7CisJdmFsIHw9IEJNQ1JfUkVTRVQ7CisJZ3Bjc19waHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgdmFsKTsKKworCXVkZWxheSgzMDApOworCisJd2hpbGUgKGxpbWl0LS0pIHsKKwkJdmFsID0gZ3Bjc19waHlfcmVhZChwaHksIE1JSV9CTUNSKTsKKwkJaWYgKHZhbCA+PSAwICYmICh2YWwgJiBCTUNSX1JFU0VUKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCWlmICgodmFsICYgQk1DUl9JU09MQVRFKSAmJiBsaW1pdCA+IDApCisJCWdwY3NfcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIHZhbCAmIH5CTUNSX0lTT0xBVEUpOworCisJaWYgKGxpbWl0ID4gMCAmJiBwaHktPm1vZGUgPT0gUEhZX01PREVfU0dNSUkpIHsKKwkJLyogQ29uZmlndXJlIEdQQ1MgaW50ZXJmYWNlIHRvIHJlY29tbWVuZGVkIHNldHRpbmcgZm9yIFNHTUlJICovCisJCWdwY3NfcGh5X3dyaXRlKHBoeSwgMHgwNCwgMHg4MTIwKTsgLyogQXN5bVBhdXNlLCBGRFggKi8KKwkJZ3Bjc19waHlfd3JpdGUocGh5LCAweDA3LCAweDI4MDEpOyAvKiBtc2dfcGcsIHRvZ2dsZSAqLworCQlncGNzX3BoeV93cml0ZShwaHksIDB4MDAsIDB4MDE0MCk7IC8qIDFHYnBzLCBGRFggICAgICovCisJfQorCisJcmV0dXJuIGxpbWl0IDw9IDA7Cit9CisKIHN0YXRpYyBpbnQgZ2VubWlpX3NldHVwX2FuZWcoc3RydWN0IG1paV9waHkgKnBoeSwgdTMyIGFkdmVydGlzZSkKIHsKIAlpbnQgY3RsLCBhZHY7CkBAIC0zMzIsNiArMzczLDMzIEBACiAJcmV0dXJuICAwOwogfQogCitzdGF0aWMgaW50IG04OGUxMTEyX2luaXQoc3RydWN0IG1paV9waHkgKnBoeSkKK3sKKwkvKgorCSAqIE1hcnZlbGwgODhFMTExMiBQSFkgbmVlZHMgdG8gaGF2ZSB0aGUgU0dNSUkgTUFDCisJICogaW50ZXJhY2UgKHBhZ2UgMikgcHJvcGVybHkgY29uZmlndXJlZCB0bworCSAqIGNvbW11bmljYXRlIHdpdGggdGhlIDQ2MEVYL0dUIEdQQ1MgaW50ZXJmYWNlLgorCSAqLworCisJdTE2IHJlZ19zaG9ydDsKKworCXByX2RlYnVnKCIlczogTWFydmVsbCA4OEUxMTEyIEV0aGVybmV0XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBTZXQgYWNjZXNzIHRvIFBhZ2UgMiAqLworCXBoeV93cml0ZShwaHksIDB4MTYsIDB4MDAwMik7CisKKwlwaHlfd3JpdGUocGh5LCAweDAwLCAweDAwNDApOyAvKiAxR2JwcyAqLworCXJlZ19zaG9ydCA9ICh1MTYpKHBoeV9yZWFkKHBoeSwgMHgxYSkpOworCXJlZ19zaG9ydCB8PSAweDgwMDA7IC8qIGJ5cGFzcyBBdXRvLU5lZ290aWF0aW9uICovCisJcGh5X3dyaXRlKHBoeSwgMHgxYSwgcmVnX3Nob3J0KTsKKwllbWFjX21paV9yZXNldF9waHkocGh5KTsgLyogcmVzZXQgTUFDIGludGVyZmFjZSAqLworCisJLyogUmVzZXQgYWNjZXNzIHRvIFBhZ2UgMCAqLworCXBoeV93cml0ZShwaHksIDB4MTYsIDB4MDAwMCk7CisKKwlyZXR1cm4gIDA7Cit9CisKIHN0YXRpYyBpbnQgZXQxMDExY19pbml0KHN0cnVjdCBtaWlfcGh5ICpwaHkpCiB7CiAJdTE2IHJlZ19zaG9ydDsKQEAgLTM4NCwxMSArNDUyLDI3IEBACiAJLm9wcwkJPSAmbTg4ZTExMTFfcGh5X29wcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgbTg4ZTExMTJfcGh5X29wcyA9IHsKKwkuaW5pdAkJPSBtODhlMTExMl9pbml0LAorCS5zZXR1cF9hbmVnCT0gZ2VubWlpX3NldHVwX2FuZWcsCisJLnNldHVwX2ZvcmNlZAk9IGdlbm1paV9zZXR1cF9mb3JjZWQsCisJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCisJLnJlYWRfbGluawk9IGdlbm1paV9yZWFkX2xpbmsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgbTg4ZTExMTJfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDE0MTBDOTAsCisJLnBoeV9pZF9tYXNrCT0gMHgwZmZmZmZmMCwKKwkubmFtZQkJPSAiTWFydmVsbCA4OEUxMTEyIEV0aGVybmV0IiwKKwkub3BzCQk9ICZtODhlMTExMl9waHlfb3BzLAorfTsKKwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X2RlZiAqbWlpX3BoeV90YWJsZVtdID0gewogCSZldDEwMTFjX3BoeV9kZWYsCiAJJmNpczgyMDFfcGh5X2RlZiwKIAkmYmNtNTI0OF9waHlfZGVmLAogCSZtODhlMTExMV9waHlfZGVmLAorCSZtODhlMTExMl9waHlfZGVmLAogCSZnZW5taWlfcGh5X2RlZiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmggYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaAppbmRleCAxYjY1YzgxLi41ZDJiZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaApAQCAtNTcsNiArNTcsNyBAQAogCQkJCSAgIG9yIGRldGVybWluZWQgYXV0b21hdGljYWx5ICovCiAJaW50IGFkZHJlc3M7CQkvKiBQSFkgYWRkcmVzcyAqLwogCWludCBtb2RlOwkJLyogUEhZIG1vZGUgKi8KKwlpbnQgZ3Bjc19hZGRyZXNzOwkvKiBHUENTIFBIWSBhZGRyZXNzICovCiAKIAkvKiAxOiBhdXRvbmVnIGVuYWJsZWQsIDA6IGRpc2FibGVkICovCiAJaW50IGF1dG9uZWc7CkBAIC04MSw1ICs4Miw2IEBACiAgKi8KIGludCBlbWFjX21paV9waHlfcHJvYmUoc3RydWN0IG1paV9waHkgKnBoeSwgaW50IGFkZHJlc3MpOwogaW50IGVtYWNfbWlpX3Jlc2V0X3BoeShzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKK2ludCBlbWFjX21paV9yZXNldF9ncGNzKHN0cnVjdCBtaWlfcGh5ICpwaHkpOwogCiAjZW5kaWYgLyogX19JQk1fTkVXRU1BQ19QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IDczZmU4M2IuLmUxNDI5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTU0MCw3ICs1NDAsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZuZXQtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggOGMyNTdhNS4uMjQ4MmQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC04MDEsNyArODAxLDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4gS1MtOTU5IGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuIEtTLTk1OSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggZDAxYTI4NS4uMWUwZGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC03MDUsNyArNzA1LDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRGF6emxlIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RhenpsZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwppbmRleCAzNjAzMDI0Li4yYTk5MzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwpAQCAtNjcsOSArNjcsNyBAQAogCWNvbnN0IHN0cnVjdCBkb25nbGVfZHJpdmVyICpkcnYgPSBOVUxMOwogCWludCBlcnIgPSAtRUlOVkFMOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlyZXF1ZXN0X21vZHVsZSgiaXJkYS1kb25nbGUtJWQiLCB0eXBlKTsKLSNlbmRpZgogCiAJaWYgKGRldi0+ZG9uZ2xlX2RydiAhPSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDA1MTk2MzcuLjM1NzU4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTUwNiw3ICs1MDYsNyBAQAogCQkJZ290byBmb3VuZDsKIAl9CiAKLQl3YXJuKCIlczogaW52YWxpZCBzcGVlZCAlZCIsIHN0aXItPm5ldGRldi0+bmFtZSwgc3BlZWQpOworCWRldl93YXJuKCZzdGlyLT5uZXRkZXYtPmRldiwgImludmFsaWQgc3BlZWQgJWRcbiIsIHNwZWVkKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAogIGZvdW5kOgpAQCAtNTk4LDggKzU5OCw4IEBACiAJCWVyciA9IHJlYWRfcmVnKHN0aXIsIFJFR19GSUZPQ1RMLCBzdGlyLT5maWZvX3N0YXR1cywgCiAJCQkJICAgRklGT19SRUdTX1NJWkUpOwogCQlpZiAodW5saWtlbHkoZXJyICE9IEZJRk9fUkVHU19TSVpFKSkgewotCQkJd2FybigiJXM6IEZJRk8gcmVnaXN0ZXIgcmVhZCBlcnJvcjogJWQiLCAKLQkJCSAgICAgc3Rpci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LAorCQkJCSAiRklGTyByZWdpc3RlciByZWFkIGVycm9yOiAlZFxuIiwgZXJyKTsKIAogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtNzgzLDggKzc4Myw5IEBACiAKIAkJCWlmICh1bmxpa2VseShyZWNlaXZlX3N0YXJ0KHN0aXIpKSkgewogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCWluZm8oIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkIiwKLQkJCQkJICAgICBzdGlyLT5uZXRkZXYtPm5hbWUpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkXG4iLAorCQkJCQkJIHN0aXItPm5ldGRldi0+bmFtZSk7CiAJCQkJc3Rpci0+cmVjZWl2aW5nID0gMDsKIAkJCQltc2xlZXAoMTApOwogCQkJCWNvbnRpbnVlOwpAQCAtODM2LDggKzgzNyw4IEBACiAKIAkvKiBpbiBjYXNlIG9mIGVycm9yLCB0aGUga2VybmVsIHRocmVhZCB3aWxsIHJlc3RhcnQgdXMgKi8KIAlpZiAoZXJyKSB7Ci0JCXdhcm4oIiVzOiB1c2IgcmVjZWl2ZSBzdWJtaXQgZXJyb3I6ICVkIiwKLQkJCXN0aXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LCAidXNiIHJlY2VpdmUgc3VibWl0IGVycm9yOiAlZFxuIiwKKwkJCSBlcnIpOwogCQlzdGlyLT5yZWNlaXZpbmcgPSAwOwogCQl3YWtlX3VwX3Byb2Nlc3Moc3Rpci0+dGhyZWFkKTsKIAl9CkBAIC0xMDczLDcgKzEwNzQsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBlcnJfb3V0MjsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgU2lnbWFUZWwgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBTaWdtYVRlbCBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzdGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggMjE5OGI3Ny4uZTExNmQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJICAgICAgKiBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZywgd2hpY2ggaXMgZGlmZmVyZW50CiAJCSAgICAgICogZm9yIERDRSBhbmQgUlNTIG1vZGVzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KIAlpbnQgY3B1OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggY2ExN2FmNC4uNzU0OGZiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTgwLDcgKzgwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXhnYmVfcGNpX3RibCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnApOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkY2Ffbm90aWZpZXIgPSB7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR1cm4gKHRvdGFsX3BhY2tldHMgPyB0cnVlIDogZmFsc2UpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyB2b2lkIGl4Z2JlX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewpAQCAtMzgzLDcgKzM4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRENBIG9yIENPTkZJR19EQ0FfTU9EVUxFICovCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC05NDcsNyArOTQ3LDcgQEAKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eF9yaW5nKTsKICNlbmRpZgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewogCQlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTIxNTUsNyArMjE1NSw3IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmYWRhcHRlci0+cGRldi0+ZGV2KTsKQEAgLTIxNjcsNyArMjE2Nyw3IEBACiAJaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwogCWl4Z2JlX2NsZWFuX2FsbF9yeF9yaW5ncyhhZGFwdGVyKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJLyogc2luY2Ugd2UgcmVzZXQgdGhlIGhhcmR3YXJlIERDQSBzZXR0aW5ncyB3ZXJlIGNsZWFyZWQgKi8KIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJmFkYXB0ZXItPnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwpAQCAtMjE5Myw3ICsyMTkzLDcgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwogCWludCB0eF9jbGVhbmVkLCB3b3JrX2RvbmUgPSAwOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZyk7CkBAIC0zOTIyLDcgKzM5MjIsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQkvKiBhbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZApAQCAtMzk3Miw3ICszOTcyLDcgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOwpAQCAtNDEwNSwxMCArNDEwNSwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBpeGdiZV9kcml2ZXJfbmFtZSwgaXhnYmVfY29weXJpZ2h0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJZGNhX3JlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKLQogI2VuZGlmCisKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MTIzLDEzICs0MTIzLDEzIEBACiAgKiovCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhnYmVfZXhpdF9tb2R1bGUodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXhnYmVfZHJpdmVyKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiBzdGF0aWMgaW50IGl4Z2JlX25vdGlmeV9kY2Eoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwKQogewpAQCAtNDE0MCw3ICs0MTQwLDcgQEAKIAogCXJldHVybiByZXRfdmFsID8gTk9USUZZX0JBRCA6IE5PVElGWV9ET05FOwogfQotI2VuZGlmIC8qIENPTkZJR19EQ0Egb3IgQ09ORklHX0RDQV9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCiAKIG1vZHVsZV9leGl0KGl4Z2JlX2V4aXRfbW9kdWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNmRjZTkwMS4uYTlhZWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKIAlpbnQgd2F0Y2hkb2dfdHhfcmVxOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgY2FjaGVkX2RjYV90YWc7CiAJaW50IGNwdTsKIAlfX2JlMzIgX19pb21lbSAqZGNhX3RhZzsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBtc2lfZW5hYmxlZDsKIAlpbnQgbXNpeF9lbmFibGVkOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X3ZlY3RvcnM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWludCBkY2FfZW5hYmxlZDsKICNlbmRpZgogCXUzMiBsaW5rX3N0YXRlOwpAQCAtOTAyLDcgKzkwMiw3IEBACiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKIAlpbnQgaSwgc3RhdHVzOwogCXNpemVfdCBieXRlczsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJdW5zaWduZWQgbG9uZyBkY2FfdGFnX29mZjsKICNlbmRpZgogCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCX0KIAlwdXRfYmUzMihodG9ubChtZ3AtPmludHJfY29hbF9kZWxheSksIG1ncC0+aW50cl9jb2FsX2RlbGF5X3B0cik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9EQ0FfT0ZGU0VULCAmY21kLCAwKTsKIAlkY2FfdGFnX29mZiA9IGNtZC5kYXRhMDsKIAlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIHN0YXRpYyB2b2lkCiBteXJpMTBnZV93cml0ZV9kY2Eoc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzcywgaW50IGNwdSwgaW50IHRhZykKIHsKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNzLT5tZ3AtPmRldjsKIAlpbnQgd29ya19kb25lOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWlmIChzcy0+bWdwLT5kY2FfZW5hYmxlZCkKIAkJbXlyaTEwZ2VfdXBkYXRlX2RjYShzcyk7CiAjZW5kaWYKQEAgLTE3MzYsNyArMTczNiw3IEBACiAJInR4X2JvdW5kYXJ5IiwgIldDIiwgImlycSIsICJNU0kiLCAiTVNJWCIsCiAJInJlYWRfZG1hX2J3X01CcyIsICJ3cml0ZV9kbWFfYndfTUJzIiwgInJlYWRfd3JpdGVfZG1hX2J3X01CcyIsCiAJInNlcmlhbF9udW1iZXIiLCAid2F0Y2hkb2dfcmVzZXRzIiwKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJImRjYV9jYXBhYmxlX2Zpcm13YXJlIiwgImRjYV9kZXZpY2VfcHJlc2VudCIsCiAjZW5kaWYKIAkibGlua19jaGFuZ2VzIiwgImxpbmtfdXAiLCAiZHJvcHBlZF9saW5rX292ZXJmbG93IiwKQEAgLTE4MTUsNyArMTgxNSw3IEBACiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfd3JpdGVfZG1hOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zZXJpYWxfbnVtYmVyOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53YXRjaGRvZ19yZXNldHM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpKG1ncC0+c3NbMF0uZGNhX3RhZyAhPSBOVUxMKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPmRjYV9lbmFibGVkKTsKICNlbmRpZgpAQCAtMzg0NCw3ICszODQ0LDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHJlc2V0XG4iKTsKIAkJZ290byBhYm9ydF93aXRoX3NsaWNlczsKIAl9Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCW15cmkxMGdlX3NldHVwX2RjYShtZ3ApOwogI2VuZGlmCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1ncCk7CkBAIC0zOTQ4LDcgKzM5NDgsNyBAQAogCW5ldGRldiA9IG1ncC0+ZGV2OwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJbXlyaTEwZ2VfdGVhcmRvd25fZGNhKG1ncCk7CiAjZW5kaWYKIAlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMCk7CkBAIC0zOTkzLDcgKzM5OTMsNyBAQAogI2VuZGlmCiB9OwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogc3RhdGljIGludAogbXlyaTEwZ2Vfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwKQogewpAQCAtNDAyNCw3ICs0MDI0LDcgQEAKIAkJICAgICAgIG15cmkxMGdlX2RyaXZlci5uYW1lLCBteXJpMTBnZV9yc3NfaGFzaCk7CiAJCW15cmkxMGdlX3Jzc19oYXNoID0gTVhHRUZXX1JTU19IQVNIX1RZUEVfU1JDX1BPUlQ7CiAJfQotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZteXJpMTBnZV9kY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJaWYgKG15cmkxMGdlX21heF9zbGljZXMgPiBNWVJJMTBHRV9NQVhfU0xJQ0VTKQpAQCAtNDAzNyw3ICs0MDM3LDcgQEAKIAogc3RhdGljIF9fZXhpdCB2b2lkIG15cmkxMGdlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmbXlyaTEwZ2VfZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKaW5kZXggZThmNTVkOC4uOWI4Zjc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBjb25maWcgUENNQ0lBX0lCTVRSCiAJdHJpc3RhdGUgIklCTSBQQ01DSUEgdG9rZW5yaW5nIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElCTVRSIT15ICYmIFRSICYmICE2NEJJVAorCWRlcGVuZHMgb24gSUJNVFIhPXkgJiYgVFIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIHRoaXMgdHlwZSBvZiBUb2tlbiBSaW5nIFBDTUNJQQogCSAgY2FyZCB0byB5b3VyIGNvbXB1dGVyLiBZb3UgdGhlbiBhbHNvIG5lZWQgdG8gc2F5IFkgdG8gIlRva2VuIFJpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IGYxMWU5MDAuLmUxMWIwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMzA5LDExICszMDksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7CiAKLXN0YXRpYyBpbnQgcGh5X2NvbXBhcmVfaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXJldHVybiBzdHJjbXAoKGNoYXIgKilkYXRhLCBkZXYtPmJ1c19pZCkgPyAwIDogMTsKLX0KLQogLyoqCiAgKiBwaHlfYXR0YWNoIC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBwYXJ0aWN1bGFyIFBIWSBkZXZpY2UKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMzM3LDggKzMzMiw3IEBACiAKIAkvKiBTZWFyY2ggdGhlIGxpc3Qgb2YgUEhZIGRldmljZXMgb24gdGhlIG1kaW8gYnVzIGZvciB0aGUKIAkgKiBQSFkgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWUgKi8KLQlkID0gYnVzX2ZpbmRfZGV2aWNlKGJ1cywgTlVMTCwgKHZvaWQgKilidXNfaWQsIHBoeV9jb21wYXJlX2lkKTsKLQorCWQgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1c19pZCk7CiAJaWYgKGQpIHsKIAkJcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggMGNhMGZjYi4uN2U4NTdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC04NjYsOCArODY2LDggQEAKIAkJCWVyciA9IFBUUl9FUlIocHBwX2NsYXNzKTsKIAkJCWdvdG8gb3V0X2NocmRldjsKIAkJfQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLAotCQkJCSAgICAgIE5VTEwsICJwcHAiKTsKKwkJZGV2aWNlX2NyZWF0ZShwcHBfY2xhc3MsIE5VTEwsIE1LREVWKFBQUF9NQUpPUiwgMCksIE5VTEwsCisJCQkgICAgICAicHBwIik7CiAJfQogCiBvdXQ6CkBAIC0yMTI3LDEzICsyMTI3LDkgQEAKIAkgICAgfHwgY2NwX29wdGlvblsxXSA8IDIgfHwgY2NwX29wdGlvblsxXSA+IGRhdGEubGVuZ3RoKQogCQlnb3RvIG91dDsKIAotCWNwID0gZmluZF9jb21wcmVzc29yKGNjcF9vcHRpb25bMF0pOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaWYgKCFjcCkgewotCQlyZXF1ZXN0X21vZHVsZSgicHBwLWNvbXByZXNzLSVkIiwgY2NwX29wdGlvblswXSk7Ci0JCWNwID0gZmluZF9jb21wcmVzc29yKGNjcF9vcHRpb25bMF0pOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfS01PRCAqLworCWNwID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoCisJCWZpbmRfY29tcHJlc3NvcihjY3Bfb3B0aW9uWzBdKSwKKwkJInBwcC1jb21wcmVzcy0lZCIsIGNjcF9vcHRpb25bMF0pOwogCWlmICghY3ApCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBveC5jIGIvZHJpdmVycy9uZXQvcHBwb3guYwppbmRleCBjNjg5OGMxLi4wM2FlY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBveC5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKQEAgLTExNSwxMyArMTE1LDggQEAKIAkJZ290byBvdXQ7CiAKIAlyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7Ci0jaWZkZWYgQ09ORklHX0tNT0QKLQlpZiAoIXBwcG94X3Byb3Rvc1twcm90b2NvbF0pIHsKLQkJY2hhciBidWZmZXJbMzJdOwotCQlzcHJpbnRmKGJ1ZmZlciwgInBwcG94LXByb3RvLSVkIiwgcHJvdG9jb2wpOwotCQlyZXF1ZXN0X21vZHVsZShidWZmZXIpOwotCX0KLSNlbmRpZgorCWlmICghcHBwb3hfcHJvdG9zW3Byb3RvY29sXSkKKwkJcmVxdWVzdF9tb2R1bGUoInBwcG94LXByb3RvLSVkIiwgcHJvdG9jb2wpOwogCWlmICghcHBwb3hfcHJvdG9zW3Byb3RvY29sXSB8fAogCSAgICAhdHJ5X21vZHVsZV9nZXQocHBwb3hfcHJvdG9zW3Byb3RvY29sXS0+b3duZXIpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggYjM5ZDFjYy4uYTI0YmI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTEyMDUsMTEgKzEyMDUsMTIgQEAKIAkJZGV2bm8gPSAwOwogCiAJbmRldi0+ZG1hID0gLTE7Ci0JbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAobmRldi0+aXJxIDwgMCkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CisJbmRldi0+aXJxID0gcmV0OwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IDIyYzE3YmIuLjQ2NmE4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0Jd2FybigiVHJhbnNtaXQgdGltZWQgb3V0LiIpOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlRyYW5zbWl0IHRpbWVkIG91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGNhdGMtPnR4X3VyYik7CiB9CiAKQEAgLTg0Nyw3ICs4NDcsOCBAQAogCQkJZGJnKCI2NGsgTWVtb3J5XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd2FybigiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmsiKTsKKwkJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkJICJDb3VsZG4ndCBkZXRlY3QgbWVtb3J5IHNpemUsIGFzc3VtaW5nIDMya1xuIik7CiAJCWNhc2UgMHg4NzY1NDMyMToKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA0KTsKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAxNik7CkBAIC05NTMsNyArOTU0LDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjYXRjX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCBkNjgyOWRiLi5mZGJmM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAogCWlmKChyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnR4X3VyYiwgR0ZQX0FUT01JQykpKQogCXsKLQkJd2Fybigia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWQiLCByZXMpOworCQlkZXZfd2FybigmbmV0LT5kZXYsICJrYXdldGggZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKIHNraXA6CiAJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAKQEAgLTkyNCw3ICs5MjQsNyBAQAogewogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOwogCi0Jd2FybigiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLiIsIG5ldC0+bmFtZSk7CisJZGV2X3dhcm4oJm5ldC0+ZGV2LCAiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLlxuIiwgbmV0LT5uYW1lKTsKIAlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xMDE2LDEwICsxMDE2LDEwIEBACiAJICovCiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPj4gOCkgewotCQlpbmZvKCJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS4iKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIkZpcm13YXJlIHByZXNlbnQgaW4gZGV2aWNlLlxuIik7CiAJfSBlbHNlIHsKIAkJLyogRG93bmxvYWQgdGhlIGZpcm13YXJlICovCi0JCWluZm8oIkRvd25sb2FkaW5nIGZpcm13YXJlLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJEb3dubG9hZGluZyBmaXJtd2FyZS4uLlxuIik7CiAJCWthd2V0aC0+ZmlybXdhcmVfYnVmID0gKF9fdTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKIAkJCQkJCSAgICAgICJrYXdldGgvbmV3X2NvZGUuYmluIiwKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCX0KIAogCQkvKiBEZXZpY2Ugd2lsbCBub3cgZGlzYXBwZWFyIGZvciBhIG1vbWVudC4uLiAgKi8KLQkJaW5mbygiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGaXJtd2FyZSBsb2FkZWQuICBJJ2xsIGJlIGJhY2suLi5cbiIpOwogZXJyX2Z3OgogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2F3ZXRoLT5maXJtd2FyZV9idWYpOwogCQlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtMTA3NSwxMCArMTA3NSwxMCBAQAogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAl9CiAKLQlpbmZvKCJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7Ci0JaW5mbygiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKLQlpbmZvKCJNVFU6ICVkIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOwotCWluZm8oIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCWRldl9pbmZvKCZpbnRmLT5kZXYsICJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4XG4iLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24uc3RhdGlzdGljc19tYXNrKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXhcbiIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5tYXhfbXVsdGljYXN0X2ZpbHRlcnMgJiAoKDEgPDwgMTUpIC0gMSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJNVFU6ICVkXG4iLCBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCiAJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzBdLAogCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsxXSwKIAkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMl0sCkBAIC0xMTc0LDcgKzExNzQsOCBAQAogCQlnb3RvIGVycl9pbnRmZGF0YTsKIAl9CiAKLQlpbmZvKCJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXMiLCBrYXdldGgtPm5ldC0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImthd2V0aCBpbnRlcmZhY2UgY3JlYXRlZCBhdCAlc1xuIiwKKwkJIGthd2V0aC0+bmV0LT5uYW1lKTsKIAogCWRiZygiS2F3ZXRoIHByb2JlIHJldHVybmluZy4iKTsKIApAQCAtMTIwNSwxMSArMTIwNiwxMSBAQAogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQlpbmZvKCJVbnJlZ2lzdGVyaW5nIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVucmVnaXN0ZXJpbmdcbiIpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoIWthd2V0aCkgewotCQl3YXJuKCJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCiAJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoYXdkLndxaCwgYXdkLmRvbmUsIHRpbWVvdXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gdGltZW91dAotICAgICAgICAgICAgICAgIHdhcm4oInVzYl9jb250cm9sL2J1bGtfbXNnOiB0aW1lb3V0Iik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dFxuIik7CiAgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKHVyYik7ICAvLyByZW1vdmUgdXJiIHNhZmVseQogICAgICAgICAgICAgICAgIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGRmNTZhNTEuLjYxMzM0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJY2FzZSAtRU5PRU5UOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiY3RybCB1cmIgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJfQogCWRldiA9IHVyYi0+Y29udGV4dDsKIAljbGVhcl9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOwpAQCAtNDQxLDEwICs0NDEsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJCXJldHVybjsJLyogdGhlIHVyYiBpcyBpbiB1bmxpbmsgc3RhdGUgKi8KIAljYXNlIC1FVElNRToKLQkJd2FybigibWF5IGJlIHJlc2V0IGlzIG5lZWRlZD8uLiIpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li5cbiIpOwogCQlnb3RvIGdvb247CiAJZGVmYXVsdDoKLQkJd2FybigiUnggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIlJ4IHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGdvb247CiAJfQogCkBAIC01MzgsNyArNTM4LDggQEAKIAlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldi0+bmV0ZGV2KSkKIAkJcmV0dXJuOwogCWlmICh1cmItPnN0YXR1cykKLQkJaW5mbygiJXM6IFR4IHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IFR4IHN0YXR1cyAlZFxuIiwKKwkJCSBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOwogCWRldi0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7CiB9CkBAIC01NjEsNyArNTYyLDggQEAKIAkJcmV0dXJuOwogCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwogCWRlZmF1bHQ6Ci0JCWluZm8oIiVzOiBpbnRyIHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IGludHIgc3RhdHVzICVkXG4iLAorCQkJIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCkBAIC02NjUsNyArNjY3LDcgQEAKIAl1OCBjciwgdGNyLCByY3IsIG1zcjsKIAogCWlmICghcnRsODE1MF9yZXNldChkZXYpKSB7Ci0JCXdhcm4oIiVzIC0gZGV2aWNlIHJlc2V0IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl93YXJuKCZkZXYtPnVkZXYtPmRldiwgImRldmljZSByZXNldCBmYWlsZWRcbiIpOwogCX0KIAkvKiBSQ1IgYml0Nz0xIGF0dGFjaCBSeCBpbmZvIGF0IHRoZSBlbmQ7ICA9MCBIVyBDUkMgKHdoaWNoIGlzIGJyb2tlbikgKi8KIAlyY3IgPSAweDllOwpAQCAtNjk5LDcgKzcwMSw3IEBACiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jd2FybigiJXM6IFR4IHRpbWVvdXQuIiwgbmV0ZGV2LT5uYW1lKTsKKwlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJUeCB0aW1lb3V0LlxuIik7CiAJdXNiX3VubGlua191cmIoZGV2LT50eF91cmIpOwogCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CkBAIC03MTAsMTIgKzcxMiwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOwotCQlpbmZvKCIlczogcHJvbWlzY3VvdXMgbW9kZSIsIG5ldGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIiVzOiBwcm9taXNjdW91cyBtb2RlXG4iLCBuZXRkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAobmV0ZGV2LT5tY19jb3VudCB8fAogCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOwotCQlpbmZvKCIlczogYWxsbXVsdGkgc2V0IiwgbmV0ZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiJXM6IGFsbG11bHRpIHNldFxuIiwgbmV0ZGV2LT5uYW1lKTsKIAl9IGVsc2UgewogCQkvKiB+UlhfTVVMVElDQVNULCB+UlhfUFJPTUlTQ1VPVVMgKi8KIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4MDBmYyk7CkBAIC03NDAsNyArNzQyLDcgQEAKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CiAJCWVsc2UgewotCQkJd2FybigiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKKwkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJfQpAQCAtNzgzLDcgKzc4NSw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChyZXMgPT0gLUVOT0RFVikKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwotCQl3YXJuKCIlczogcnhfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJyeF91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRyX3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIDMpLApAQCAtNzkyLDcgKzc5NCw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7Ci0JCXdhcm4oIiVzOiBpbnRyX3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiaW50cl91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXVzYl9raWxsX3VyYihkZXYtPnJ4X3VyYik7CiAJCXJldHVybiByZXM7CiAJfQpAQCAtOTQ3LDcgKzk0OSw3IEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzOiBydGw4MTUwIGlzIGRldGVjdGVkXG4iLCBuZXRkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk4NCw3ICs5ODYsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfcnRsODE1MF9pbml0KHZvaWQpCiB7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnRsODE1MF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBmMTQwNTE1Li43Zjk3ZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTM4OCw4ICszODgsOCBAQAogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBucl9jYXJkczsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY29zYV9jbGFzcywgTlVMTCwgTUtERVYoY29zYV9tYWpvciwgaSksCi0JCQkJICAgICAgTlVMTCwgImNvc2ElZCIsIGkpOworCQlkZXZpY2VfY3JlYXRlKGNvc2FfY2xhc3MsIE5VTEwsIE1LREVWKGNvc2FfbWFqb3IsIGkpLCBOVUxMLAorCQkJICAgICAgImNvc2ElZCIsIGkpOwogCWVyciA9IDA7CiAJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwppbmRleCBmODA2NDBmLi5kN2JiNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCkBAIC0xMjIsNyArMTIyLDYgQEAKICAgICAgKiBNb3N0IGZ1bmN0aW9ucyBtZXNzIHdpdGggdGhlIHN0cnVjdHVyZQogICAgICAqIERpc2FibGUgaW50ZXJydXB0cyB3aGlsZSB3ZSBkbyB0aGUgcG9sbGluZwogICAgICAqLwotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgIHN3aXRjaCAoY21kKSB7CiAgICAgICAgIC8qCkBAIC0xNTIsNiArMTUxLDcgQEAKIAkJYnJlYWs7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX21lZGlhLT5zZXRfc3RhdHVzIChzYywgJmN0bCk7CiAKICAgICAgICAgaWYoY3RsLmNyY19sZW5ndGggIT0gc2MtPmljdGwuY3JjX2xlbmd0aCkgewpAQCAtMTYxLDYgKzE2MSw3IEBACiAJICAgIGVsc2UKIAkJc2MtPlR4RGVzY3JpcHRDb250cm9sSW5pdCAmPSB+TE1DX1RERVNfQUREX0NSQ19ESVNBQkxFOwogICAgICAgICB9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAKICAgICAgICAgcmV0ID0gMDsKICAgICAgICAgYnJlYWs7CkBAIC0xODcsMTUgKzE4OCwxOCBAQAogCQlicmVhazsJCQkJLyogbm8gY2hhbmdlICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKwkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgbG1jX3Byb3RvX2Nsb3NlKHNjKTsKIAogICAgICAgICAgICAgc2MtPmlmX3R5cGUgPSBuZXdfdHlwZTsKICAgICAgICAgICAgIGxtY19wcm90b19hdHRhY2goc2MpOwogCSAgICByZXQgPSBsbWNfcHJvdG9fb3BlbihzYyk7CisJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICBicmVhazsKIAl9CiAKICAgICBjYXNlIExNQ0lPQ0dFVFhJTkZPOiAvKmZvbGQwMSovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX3hpbmZvLk1hZ2ljMCA9IDB4QkVFRkNBRkU7CiAKICAgICAgICAgc2MtPmxtY194aW5mby5QY2lDYXJkVHlwZSA9IHNjLT5sbWNfY2FyZHR5cGU7CkBAIC0yMDgsNiArMjEyLDcgQEAKICAgICAgICAgc2MtPmxtY194aW5mby5NYXhGcmFtZVNpemUgPSBMTUNfUEtUX0JVRl9TWjsKICAgICAgICAgc2MtPmxtY194aW5mby5saW5rX3N0YXR1cyA9IHNjLT5sbWNfbWVkaWEtPmdldF9saW5rX3N0YXR1cyAoc2MpOwogICAgICAgICBzYy0+bG1jX3hpbmZvLm1paV9yZWcxNiA9IGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICBzYy0+bG1jX3hpbmZvLk1hZ2ljMSA9IDB4REVBREJFRUY7CiAKQEAgLTIyMCw2ICsyMjUsNyBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTE1DSU9DR0VUTE1DU1RBVFM6CisJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgaWYgKHNjLT5sbWNfY2FyZHR5cGUgPT0gTE1DX0NBUkRUWVBFX1QxKSB7CiAJCSAgICBsbWNfbWlpX3dyaXRlcmVnKHNjLCAwLCAxNywgVDFGUkFNRVJfRkVSUl9MU0IpOwogCQkgICAgc2MtPmV4dHJhX3N0YXRzLmZyYW1pbmdCaXRFcnJvckNvdW50ICs9CkBAIC0yNDMsNiArMjQ5LDcgQEAKIAkJICAgIHNjLT5leHRyYV9zdGF0cy5zZXZlcmVseUVycm9yZWRGcmFtZUNvdW50ICs9CiAJCQkgICAgcmVnVmFsICYgVDFGUkFNRVJfU0VGX01BU0s7CiAJICAgIH0KKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIGlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfZGF0YSwgJnNjLT5sbWNfZGV2aWNlLT5zdGF0cywKIAkJCSAgICAgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cykpIHx8CiAJCWNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhICsgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cyksCkBAIC0yNTgsMTIgKzI2NSwxNCBAQAogCQkgICAgYnJlYWs7CiAJICAgIH0KIAorCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIG1lbXNldCgmc2MtPmxtY19kZXZpY2UtPnN0YXRzLCAwLCBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSk7CiAJICAgIG1lbXNldCgmc2MtPmV4dHJhX3N0YXRzLCAwLCBzaXplb2Yoc2MtPmV4dHJhX3N0YXRzKSk7CiAJICAgIHNjLT5leHRyYV9zdGF0cy5jaGVjayA9IFNUQVRDSEVDSzsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLnZlcnNpb25fc2l6ZSA9IChEUklWRVJfVkVSU0lPTiA8PCAxNikgKwogCQkgICAgc2l6ZW9mKHNjLT5sbWNfZGV2aWNlLT5zdGF0cykgKyBzaXplb2Yoc2MtPmV4dHJhX3N0YXRzKTsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLmxtY19jYXJkdHlwZSA9IHNjLT5sbWNfY2FyZHR5cGU7CisJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICByZXQgPSAwOwogCSAgICBicmVhazsKIApAQCAtMjgyLDggKzI5MSwxMCBAQAogCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBzYy0+bG1jX21lZGlhLT5zZXRfY2lyY3VpdF90eXBlKHNjLCBjdGwuY2lyY3VpdF90eXBlKTsKICAgICAgICAgc2MtPmljdGwuY2lyY3VpdF90eXBlID0gY3RsLmNpcmN1aXRfdHlwZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcmV0ID0gMDsKIAogICAgICAgICBicmVhazsKQEAgLTI5NCwxMiArMzA1LDE0IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAvKiBSZXNldCBkcml2ZXIgYW5kIGJyaW5nIGJhY2sgdG8gY3VycmVudCBzdGF0ZSAqLwogICAgICAgICBwcmludGsgKCIgUkVHMTYgYmVmb3JlIHJlc2V0ICslMDR4XG4iLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOwogICAgICAgICBsbWNfcnVubmluZ19yZXNldCAoZGV2KTsKICAgICAgICAgcHJpbnRrICgiIFJFRzE2IGFmdGVyIHJlc2V0ICslMDR4XG4iLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOwogCiAgICAgICAgIExNQ19FVkVOVF9MT0coTE1DX0VWRU5UX0ZPUkNFRFJFU0VULCBMTUNfQ1NSX1JFQUQgKHNjLCBjc3Jfc3RhdHVzKSwgbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICByZXQgPSAwOwogICAgICAgICBicmVhazsKQEAgLTMzOCwxNCArMzUxLDE1IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmeGMsIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgbG1jX3hpbGlueF9jb250cm9sKSkpIHsKKwkgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZ4YywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBsbWNfeGlsaW54X2NvbnRyb2wpKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKLQl9CisJICAgIH0KICAgICAgICAgICAgIHN3aXRjaCh4Yy5jb21tYW5kKXsKICAgICAgICAgICAgIGNhc2UgbG1jX3hpbGlueF9yZXNldDogLypmb2xkMDIqLwogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdTE2IG1paTsKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbWlpID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC00MDQsNiArNDE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbWNfbGVkX29mZihzYywgTE1DX0RTM19MRUQyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKIApAQCAtNDE2LDYgKzQzMSw3IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1MTYgbWlpOwogICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCA9IDUwMDAwMDsKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbWlpID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC00NTEsMTMgKzQ2NywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIChMTUNfQ1NSX1JFQUQoc2MsIGNzcl9ncCkgJiBMTUNfR0VQX0lOSVQpID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lb3V0LS0gPiAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOwogCiAKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogc3RvcCBkcml2aW5nIFhpbGlueC1yZWxhdGVkIHNpZ25hbHMKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIGxtY19ncGlvX21raW5wdXQoc2MsIDB4ZmYpOworCQkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMHgwOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ5Myw2ICs1MTAsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHByaW50aygiJXM6IFN0YXJ0aW5nIGxvYWQgb2YgZGF0YSBMZW46ICVkIGF0IDB4JXAgPT0gMHglcFxuIiwgZGV2LT5uYW1lLCB4Yy5sZW4sIHhjLmRhdGEsIGRhdGEpOwogCisJCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIGxtY19ncGlvX21raW5wdXQoc2MsIDB4ZmYpOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC01NDUsNyArNTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoTE1DX0NTUl9SRUFEKHNjLCBjc3JfZ3ApICYgTE1DX0dFUF9JTklUKSA9PSAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZW91dC0tID4gMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcmVsYXgoKTsKIAogICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdhaXRlZCAlZCBmb3IgdGhlIFhpbGlueCB0byBjbGVhciBpdCdzIG1lbW9yeVxuIiwgZGV2LT5uYW1lLCA1MDAwMDAtdGltZW91dCk7CiAKQEAgLTU4OCw2ICs2MDYsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgIHNjLT5sbWNfbWlpcmVnMTYgJj0gfkxNQ19NSUkxNl9GSUZPX1JFU0VUOwogICAgICAgICAgICAgICAgICAgICBsbWNfbWlpX3dyaXRlcmVnKHNjLCAwLCAxNiwgc2MtPmxtY19taWlyZWcxNik7CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICAgICAgICAgICAgICBrZnJlZShkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC02MTEsOCArNjMwLDYgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7IC8qZm9sZDAxKi8KLQogICAgIGxtY190cmFjZShkZXYsICJsbWNfaW9jdGwgb3V0Iik7CiAKICAgICByZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDc0NzI2OTkuLmYwNWY1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTE2NDAsNiArMTY0MCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXRoOWtfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wcyA9IHsKIAkudHggCQkgICAgPSBhdGg5a190eCwKIAkuc3RhcnQgCQkgICAgPSBhdGg5a19zdGFydCwKQEAgLTE2NjQsNyArMTY2OSw4IEBACiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbiAgICAgPSBOVUxMLAotCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24KKwkuYW1wZHVfYWN0aW9uICAgICAgID0gYXRoOWtfYW1wZHVfYWN0aW9uLAorCS5zZXRfZnJhZ190aHJlc2hvbGQgPSBhdGg5a19ub19mcmFnbWVudGF0aW9uLAogfTsKIAogc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggZjYwMDNlNy4uNTE1NWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtODMzLDEyICs4MzMsMTIgQEAKIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JCS8qIDVYMDAgd2FudHMgaW4gQ2Vsc2l1cyAqLworCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6CisJCS8qIDVYMDAgYW5kIDUzNTAgd2FudHMgaW4gQ2Vsc2l1cyAqLwogCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKIAkJYnJlYWs7CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzUwOgotCQkvKiA1WDUwIHdhbnRzIGluIEtlbHZpbiAqLworCQkvKiA1MTUwIHdhbnRzIGluIEtlbHZpbiAqLwogCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPQogCQkJCUNFTFNJVVNfVE9fS0VMVklOKENUX0tJTExfVEhSRVNIT0xEKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCmluZGV4IDkzOTQ0ZGUuLmUyYTU4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCkBAIC0yNDIyLDcgKzI0MjIsNyBAQAogCQkJdm9pZCAqcHJpdl9zdGEpCiB7CiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHByaXZfcjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBwcml2X3I7CiAKIAlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOwogCWtmcmVlKGxxX3N0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IGE5MTJmYjYuLjI5NzY5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC04MjMsNyArODIzLDkgQEAKIGludCBsYnNfc2V0X2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCBjaGFubmVsKQogewogCXN0cnVjdCBjbWRfZHNfODAyXzExX3JmX2NoYW5uZWwgY21kOworI2lmZGVmIERFQlVHCiAJdTggb2xkX2NoYW5uZWwgPSBwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbDsKKyNlbmRpZgogCWludCByZXQgPSAwOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCBjOWU0YTQzLi4xYTAxOWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTUzMywxMSArNTMzLDExIEBACiAJCWRhdGEgPSBody0+cHJpdjsKIAkJZGF0YS0+aHcgPSBodzsKIAotCQlkYXRhLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaHdzaW1fY2xhc3MsIE5VTEwsIDAsIGh3LAotCQkJCQkJImh3c2ltJWQiLCBpKTsKKwkJZGF0YS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShod3NpbV9jbGFzcywgTlVMTCwgMCwgaHcsCisJCQkJCSAgImh3c2ltJWQiLCBpKTsKIAkJaWYgKElTX0VSUihkYXRhLT5kZXYpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICJtYWM4MDIxMV9od3NpbTogZGV2aWNlX2NyZWF0ZV9kcnZkYXRhICIKKwkJCSAgICAgICAibWFjODAyMTFfaHdzaW06IGRldmljZV9jcmVhdGUgIgogCQkJICAgICAgICJmYWlsZWQgKCVsZClcbiIsIFBUUl9FUlIoZGF0YS0+ZGV2KSk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsZWRfZHJ2ZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCBlNTg1Njg0Li42ZmNmMmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC0zNzgsNiArMzc4LDcgQEAKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKQEAgLTM4Nyw3ICszODgsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKQEAgLTM5OSw3ICs0MDAsNyBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCX0KIAotCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IDE5OTRhYTEuLjExN2M3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTQ3OSw3ICs0NzksNiBAQAogCXByaW50ayhLRVJOX0VSUiAicDU0OiBlZXByb20gcGFyc2UgZmFpbGVkIVxuIik7CiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDE5MTJmNWUuLjc1ZDc0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIwMCl9LAkvKiBOZXRnZWFyIFdHMTIxICovCiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMTApfSwJLyogTmV0Z2VhciBXRzEyMSB0aGUgc2Vjb25kID8gKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIyMCl9LAkvKiBOZXRnZWFyIFdHMTExICovCisJe1VTQl9ERVZJQ0UoMHgwOWFhLCAweDEwMDApfSwJLyogU3Bpbm5ha2VyIFByb3RvIGJvYXJkICovCiAJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwJLyogTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyMyl9LAkvKiBTaHV0dGxlIFBOMTUsIEFpcnZhc3QgV00xNjhnLCBJT0dlYXIgR1dVNTEzICovCiAJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzQpfSwJLyogTGlua3N5cyBXVVNCNTRHIE9FTSAqLwpAQCAtNjMsOCArNjQsOCBAQAogCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sICAgLyogTWVkaW9uIE1ENDA5MDAgKi8KIAl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAwOCl9LAkvKiBTYWdlbSBYRzcwM0EgKi8KIAl7VVNCX0RFVklDRSgweDBkOGUsIDB4Mzc2Mil9LAkvKiBETGluayBEV0wtRzEyMCBDb2hpYmEgKi8KLQl7VVNCX0RFVklDRSgweDA5YWEsIDB4MTAwMCl9LAkvKiBTcGlubmFrZXIgUHJvdG8gYm9hcmQgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyNSl9LAkvKiBJT0dlYXIgR1dVNTEzIChHVzM4ODdJSyBjaGlwKSAqLworCXtVU0JfREVWSUNFKDB4MTI2MCwgMHhlZTIyKX0sCS8qIFNNQyAyODYyVy1HIHZlcnNpb24gMiAqLwogCXtVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDBhKX0sCS8qIExpbmtzeXMgV1VTQjU0RyB2ZXIgMiAqLwogCXtVU0JfREVWSUNFKDB4MTNCMSwgMHgwMDBDKX0sCS8qIExpbmtzeXMgV1VTQjU0QUcgKi8KIAl7VVNCX0RFVklDRSgweDE0MzUsIDB4MDQyNyl9LAkvKiBJbnZlbnRlbCBVUjA1NEcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMTY3NmFjNC4uNDUxZDQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwogCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQl1bnNpZ25lZCBpbnQgaXZfbGVuOworCXVuc2lnbmVkIGludCBpdl9sZW4gPSAwOwogCiAJaWYgKHVubGlrZWx5KHJ0MngwMHF1ZXVlX2Z1bGwocXVldWUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTUsNiArMzk1LDkgQEAKIAllbnRyeS0+c2tiID0gc2tiOwogCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCAmdHhkZXNjKTsKIAorCWlmIChJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5ICE9IE5VTEwpCisJCWl2X2xlbiA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC5od19rZXktPml2X2xlbjsKKwogCS8qCiAJICogQWxsIGluZm9ybWF0aW9uIGlzIHJldHJlaXZlZCBmcm9tIHRoZSBza2ItPmNiIGFycmF5LAogCSAqIG5vdyB3ZSBzaG91bGQgY2xhaW0gb3duZXJzaGlwIG9mIHRoZSBkcml2ZXIgcGFydCBvZiB0aGF0CkBAIC00MTAsOSArNDEzLDcgQEAKIAkgKiB0aGUgZnJhbWUgc28gd2UgY2FuIHByb3ZpZGUgaXQgdG8gdGhlIGRyaXZlciBzZXBlcmF0ZWx5LgogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSAmJgotCQkoSUVFRTgwMjExX1NLQl9DQihza2IpLT5jb250cm9sLmh3X2tleSAhPSBOVUxMKSkgewotCQlpdl9sZW4gPSBJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5LT5pdl9sZW47CisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKIAkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsIGl2X2xlbik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYwppbmRleCBlOTkwMjYxLi40MzFlM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKQEAgLTMzLDEwICszMywxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDgxODdfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCS8qIEFzdXMgKi8KIAl7VVNCX0RFVklDRSgweDBiMDUsIDB4MTcxZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MGQsIDB4NzA1ZSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJLyogUmVhbHRlayAqLwogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg5KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTgpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAogCS8qIE5ldGdlYXIgKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NjEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NmEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IGIwYzcxYzMuLjg1Mjc4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtNDI2LDEwICs0MjYsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCiAJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKIAlpZiAoZXJyKQpAQCAtNDM5LDcgKzQ0MCw3IEBACiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CiAKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggM2MzZGQ0MC4uYzY5NDhkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTIzOSwxMSArMjM5LDE0IEBACiAJICovCiAJYmF0Y2hfdGFyZ2V0ID0gbnAtPnJ4X3RhcmdldCAtIChyZXFfcHJvZCAtIG5wLT5yeC5yc3BfY29ucyk7CiAJZm9yIChpID0gc2tiX3F1ZXVlX2xlbigmbnAtPnJ4X2JhdGNoKTsgaSA8IGJhdGNoX3RhcmdldDsgaSsrKSB7Ci0JCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFJYX0NPUFlfVEhSRVNIT0xELAorCQlza2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBSWF9DT1BZX1RIUkVTSE9MRCArIE5FVF9JUF9BTElHTiwKIAkJCQkJIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwogCQlpZiAodW5saWtlbHkoIXNrYikpCiAJCQlnb3RvIG5vX3NrYjsKIAorCQkvKiBBbGlnbiBpcCBoZWFkZXIgdG8gYSAxNiBieXRlcyBib3VuZGFyeSAqLworCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCWlmICghcGFnZSkgewogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC00NzEsNyArNDc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YSk7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKLQlmcmFncyArPSAob2Zmc2V0ICsgbGVuICsgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkU7CisJZnJhZ3MgKz0gRElWX1JPVU5EX1VQKG9mZnNldCArIGxlbiwgUEFHRV9TSVpFKTsKIAlpZiAodW5saWtlbHkoZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTICsgMSkpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgInhlbm5ldDogc2tiIHJpZGVzIHRoZSByb2NrZXQ6ICVkIGZyYWdzXG4iLAogCQkgICAgICAgZnJhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jIGIvZHJpdmVycy9udWJ1cy9udWJ1cy5jCmluZGV4IDJmMDQ3ZTUuLmY1Zjc1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnVidXMvbnVidXMuYworKysgYi9kcml2ZXJzL251YnVzL251YnVzLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXsKIAkJd2hpbGUobm90X3VzZWZ1bChwLG1hcCkpCiAJCQlwKys7Ci0JCQlwKys7CisJCXArKzsKIAkJbGVuLS07CiAJfQogCSpwdHIgPSBwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCBhZDhhYzFhLi43Yzc5ZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJY2hhciAqbW9kYWxpYXM7CiB9Owogc3RhdGljIHN0cnVjdCBvZl9tb2RhbGlhc190YWJsZSBvZl9tb2RhbGlhc190YWJsZVtdID0gewotCS8qIEVtcHR5IGZvciBub3c7IGFkZCBlbnRyaWVzIGFzIG5lZWRlZCAqLworCXsgImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgIm1jdS1tcGM4MzQ5ZW1pdHgiIH0sCiB9OwogCiAvKioKQEAgLTQyMCwxMyArNDIwLDEyIEBACiAgKiBAbGVuOglMZW5ndGggb2YgbW9kYWxpYXMgdmFsdWUKICAqCiAgKiBCYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBhdGlibGUgcHJvcGVydHksIHRoaXMgcm91dGluZSB3aWxsIGRldGVybWluZQotICogYW4gYXBwcm9wcmlhdGUgbW9kYWxpYXMgdmFsdWUgZm9yIGEgcGFydGljdWxhciBkZXZpY2UgdHJlZSBub2RlLiAgVGhyZWUKLSAqIHNlcGFyYXRlIG1ldGhvZHMgYXJlIHVzZWQgdG8gZGVyaXZlIGEgbW9kYWxpYXMgdmFsdWUuCisgKiBhbiBhcHByb3ByaWF0ZSBtb2RhbGlhcyB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSB0cmVlIG5vZGUuICBUd28KKyAqIHNlcGFyYXRlIG1ldGhvZHMgYXJlIGF0dGVtcHRlZCB0byBkZXJpdmUgYSBtb2RhbGlhcyB2YWx1ZS4KICAqCiAgKiBGaXJzdCBtZXRob2QgaXMgdG8gbG9va3VwIHRoZSBjb21wYXRpYmxlIHZhbHVlIGluIG9mX21vZGFsaWFzX3RhYmxlLgotICogU2Vjb25kIGlzIHRvIGxvb2sgZm9yIGEgImxpbnV4LDxtb2RhbGlhcz4iIGVudHJ5IGluIHRoZSBjb21wYXRpYmxlIGxpc3QKLSAqIGFuZCB1c2VkIHRoYXQgZm9yIG1vZGFsaWFzLiAgVGhpcmQgaXMgdG8gc3RyaXAgb2ZmIHRoZSBtYW51ZmFjdHVyZXIKLSAqIHByZWZpeCBmcm9tIHRoZSBmaXJzdCBjb21wYXRpYmxlIGVudHJ5IGFuZCB1c2UgdGhlIHJlbWFpbmRlciBhcyBtb2RhbGlhcworICogU2Vjb25kIGlzIHRvIHN0cmlwIG9mZiB0aGUgbWFudWZhY3R1cmVyIHByZWZpeCBmcm9tIHRoZSBmaXJzdAorICogY29tcGF0aWJsZSBlbnRyeSBhbmQgdXNlIHRoZSByZW1haW5kZXIgYXMgbW9kYWxpYXMKICAqCiAgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKICAqLwpAQCAtNDQ5LDIxICs0NDgsNyBAQAogCWlmICghY29tcGF0aWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiAyLiBzZWFyY2ggZm9yIGxpbnV4LDxtb2RhbGlhcz4gZW50cnkgKi8KLQlwID0gY29tcGF0aWJsZTsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmICghc3RybmNtcChwLCAibGludXgsIiwgNikpIHsKLQkJCXAgKz0gNjsKLQkJCXN0cmxjcHkobW9kYWxpYXMsIHAsIGxlbik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWkgPSBzdHJsZW4ocCkgKyAxOwotCQlwICs9IGk7Ci0JCWNwbGVuIC09IGk7Ci0JfQotCi0JLyogMy4gdGFrZSBmaXJzdCBjb21wYXRpYmxlIGVudHJ5IGFuZCBzdHJpcCBtYW51ZmFjdHVyZXIgKi8KKwkvKiAyLiB0YWtlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHN0cmlwIG1hbnVmYWN0dXJlciAqLwogCXAgPSBzdHJjaHIoY29tcGF0aWJsZSwgJywnKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDczLDMgKzQ1OCwxMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX21vZGFsaWFzX25vZGUpOwogCisvKioKKyAqIG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyAtIEZpbmQgYSBub2RlIHBvaW50ZWQgYnkgcGhhbmRsZSBpbiBhIGxpc3QKKyAqIEBucDoJCXBvaW50ZXIgdG8gYSBkZXZpY2UgdHJlZSBub2RlIGNvbnRhaW5pbmcgYSBsaXN0CisgKiBAbGlzdF9uYW1lOglwcm9wZXJ0eSBuYW1lIHRoYXQgY29udGFpbnMgYSBsaXN0CisgKiBAY2VsbHNfbmFtZToJcHJvcGVydHkgbmFtZSB0aGF0IHNwZWNpZmllcyBwaGFuZGxlcycgYXJndW1lbnRzIGNvdW50CisgKiBAaW5kZXg6CWluZGV4IG9mIGEgcGhhbmRsZSB0byBwYXJzZSBvdXQKKyAqIEBvdXRfbm9kZToJcG9pbnRlciB0byBkZXZpY2Vfbm9kZSBzdHJ1Y3QgcG9pbnRlciAod2lsbCBiZSBmaWxsZWQpCisgKiBAb3V0X2FyZ3M6CXBvaW50ZXIgdG8gYXJndW1lbnRzIHBvaW50ZXIgKHdpbGwgYmUgZmlsbGVkKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvIHBhcnNlIGxpc3RzIG9mIHBoYW5kbGVzIGFuZCB0aGVpciBhcmd1bWVudHMuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZmlsbHMgb3V0X25vZGUgYW5kIG91dF9hcmdzLCBvbiBlcnJvciByZXR1cm5zCisgKiBhcHByb3ByaWF0ZSBlcnJubyB2YWx1ZS4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqIHBoYW5kbGUxOiBub2RlMSB7CisgKiAJI2xpc3QtY2VsbHMgPSA8Mj47CisgKiB9CisgKgorICogcGhhbmRsZTI6IG5vZGUyIHsKKyAqIAkjbGlzdC1jZWxscyA9IDwxPjsKKyAqIH0KKyAqCisgKiBub2RlMyB7CisgKiAJbGlzdCA9IDwmcGhhbmRsZTEgMSAyICZwaGFuZGxlMiAzPjsKKyAqIH0KKyAqCisgKiBUbyBnZXQgYSBkZXZpY2Vfbm9kZSBvZiB0aGUgYG5vZGUyJyBub2RlIHlvdSBtYXkgY2FsbCB0aGlzOgorICogb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKG5vZGUzLCAibGlzdCIsICIjbGlzdC1jZWxscyIsIDIsICZub2RlMiwgJmFyZ3MpOworICovCitpbnQgb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKmxpc3RfbmFtZSwKKwkJCQljb25zdCBjaGFyICpjZWxsc19uYW1lLCBpbnQgaW5kZXgsCisJCQkJc3RydWN0IGRldmljZV9ub2RlICoqb3V0X25vZGUsCisJCQkJY29uc3Qgdm9pZCAqKm91dF9hcmdzKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWNvbnN0IHUzMiAqbGlzdDsKKwljb25zdCB1MzIgKmxpc3RfZW5kOworCWludCBzaXplOworCWludCBjdXJfaW5kZXggPSAwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IE5VTEw7CisJY29uc3Qgdm9pZCAqYXJnczsKKworCWxpc3QgPSBvZl9nZXRfcHJvcGVydHkobnAsIGxpc3RfbmFtZSwgJnNpemUpOworCWlmICghbGlzdCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycjA7CisJfQorCWxpc3RfZW5kID0gbGlzdCArIHNpemUgLyBzaXplb2YoKmxpc3QpOworCisJd2hpbGUgKGxpc3QgPCBsaXN0X2VuZCkgeworCQljb25zdCB1MzIgKmNlbGxzOworCQljb25zdCBwaGFuZGxlICpwaGFuZGxlOworCisJCXBoYW5kbGUgPSBsaXN0OworCQlhcmdzID0gbGlzdCArIDE7CisKKwkJLyogb25lIGNlbGwgaG9sZSBpbiB0aGUgbGlzdCA9IDw+OyAqLworCQlpZiAoISpwaGFuZGxlKSB7CisJCQlsaXN0Kys7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoYW5kbGUpOworCQlpZiAoIW5vZGUpIHsKKwkJCXByX2RlYnVnKCIlczogY291bGQgbm90IGZpbmQgcGhhbmRsZVxuIiwKKwkJCQkgbnAtPmZ1bGxfbmFtZSk7CisJCQlnb3RvIGVycjA7CisJCX0KKworCQljZWxscyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCBjZWxsc19uYW1lLCAmc2l6ZSk7CisJCWlmICghY2VsbHMgfHwgc2l6ZSAhPSBzaXplb2YoKmNlbGxzKSkgeworCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZ2V0ICVzIGZvciAlc1xuIiwKKwkJCQkgbnAtPmZ1bGxfbmFtZSwgY2VsbHNfbmFtZSwgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCisJCS8qIE5leHQgcGhhbmRsZSBpcyBhdCBvZmZzZXQgb2Ygb25lIHBoYW5kbGUgY2VsbCArICNjZWxscyAqLworCQlsaXN0ICs9IDEgKyAqY2VsbHM7CisJCWlmIChsaXN0ID4gbGlzdF9lbmQpIHsKKwkJCXByX2RlYnVnKCIlczogaW5zdWZmaWNpZW50IGFyZ3VtZW50cyBsZW5ndGhcbiIsCisJCQkJIG5wLT5mdWxsX25hbWUpOworCQkJZ290byBlcnIxOworCQl9CituZXh0OgorCQlpZiAoY3VyX2luZGV4ID09IGluZGV4KQorCQkJYnJlYWs7CisKKwkJb2Zfbm9kZV9wdXQobm9kZSk7CisJCW5vZGUgPSBOVUxMOworCQljdXJfaW5kZXgrKzsKKwl9CisKKwlpZiAoIW5vZGUpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnIwOworCX0KKworCSpvdXRfbm9kZSA9IG5vZGU7CisJKm91dF9hcmdzID0gYXJnczsKKworCXJldHVybiAwOworZXJyMToKKwlvZl9ub2RlX3B1dChub2RlKTsKK2VycjA6CisJcHJfZGVidWcoIiVzIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZ3Bpby5jIGIvZHJpdmVycy9vZi9ncGlvLmMKaW5kZXggMWM5Y2FiOC4uN2NkNzMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9ncGlvLmMKKysrIGIvZHJpdmVycy9vZi9ncGlvLmMKQEAgLTI4LDc4ICsyOCwzNSBAQAogICovCiBpbnQgb2ZfZ2V0X2dwaW8oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4KQogewotCWludCByZXQgPSAtRUlOVkFMOworCWludCByZXQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpnYzsKIAlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IE5VTEw7CiAJaW50IHNpemU7Ci0JY29uc3QgdTMyICpncGlvczsKLQl1MzIgbnJfY2VsbHM7Ci0JaW50IGk7CiAJY29uc3Qgdm9pZCAqZ3Bpb19zcGVjOwogCWNvbnN0IHUzMiAqZ3Bpb19jZWxsczsKLQlpbnQgZ3Bpb19pbmRleCA9IDA7CiAKLQlncGlvcyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImdwaW9zIiwgJnNpemUpOwotCWlmICghZ3Bpb3MpIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlyZXQgPSBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3MobnAsICJncGlvcyIsICIjZ3Bpby1jZWxscyIsIGluZGV4LAorCQkJCQkgICZnYywgJmdwaW9fc3BlYyk7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygiJXM6IGNhbid0IHBhcnNlIGdwaW9zIHByb3BlcnR5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyMDsKIAl9Ci0JbnJfY2VsbHMgPSBzaXplIC8gc2l6ZW9mKHUzMik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfY2VsbHM7IGdwaW9faW5kZXgrKykgewotCQljb25zdCBwaGFuZGxlICpncGlvX3BoYW5kbGU7Ci0KLQkJZ3Bpb19waGFuZGxlID0gZ3Bpb3MgKyBpOwotCQlncGlvX3NwZWMgPSBncGlvX3BoYW5kbGUgKyAxOwotCi0JCS8qIG9uZSBjZWxsIGhvbGUgaW4gdGhlIGdwaW9zID0gPD47ICovCi0JCWlmICghKmdwaW9fcGhhbmRsZSkgewotCQkJaWYgKGdwaW9faW5kZXggPT0gaW5kZXgpCi0JCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCQlpKys7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWdjID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKmdwaW9fcGhhbmRsZSk7Ci0JCWlmICghZ2MpIHsKLQkJCXByX2RlYnVnKCIlczogY291bGQgbm90IGZpbmQgcGhhbmRsZSBmb3IgZ3Bpb3NcbiIsCi0JCQkJIG5wLT5mdWxsX25hbWUpOwotCQkJZ290byBlcnIwOwotCQl9Ci0KLQkJb2ZfZ2MgPSBnYy0+ZGF0YTsKLQkJaWYgKCFvZl9nYykgewotCQkJcHJfZGVidWcoIiVzOiBncGlvIGNvbnRyb2xsZXIgJXMgaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjE7Ci0JCX0KLQotCQlncGlvX2NlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KGdjLCAiI2dwaW8tY2VsbHMiLCAmc2l6ZSk7Ci0JCWlmICghZ3Bpb19jZWxscyB8fCBzaXplICE9IHNpemVvZigqZ3Bpb19jZWxscykgfHwKLQkJCQkqZ3Bpb19jZWxscyAhPSBvZl9nYy0+Z3Bpb19jZWxscykgewotCQkJcHJfZGVidWcoIiVzOiB3cm9uZyAjZ3Bpby1jZWxscyBmb3IgJXNcbiIsCi0JCQkJIG5wLT5mdWxsX25hbWUsIGdjLT5mdWxsX25hbWUpOwotCQkJZ290byBlcnIxOwotCQl9Ci0KLQkJLyogTmV4dCBwaGFuZGxlIGlzIGF0IHBoYW5kbGUgY2VsbHMgKyAjZ3Bpby1jZWxscyAqLwotCQlpICs9IHNpemVvZigqZ3Bpb19waGFuZGxlKSAvIHNpemVvZih1MzIpICsgKmdwaW9fY2VsbHM7Ci0JCWlmIChpID49IG5yX2NlbGxzICsgMSkgewotCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgZ3Bpby1zcGVjIGxlbmd0aFxuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjE7Ci0JCX0KLQotCQlpZiAoZ3Bpb19pbmRleCA9PSBpbmRleCkKLQkJCWJyZWFrOwotCi0JCW9mX2djID0gTlVMTDsKLQkJb2Zfbm9kZV9wdXQoZ2MpOwotCX0KLQorCW9mX2djID0gZ2MtPmRhdGE7CiAJaWYgKCFvZl9nYykgewotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIGVycjA7CisJCXByX2RlYnVnKCIlczogZ3BpbyBjb250cm9sbGVyICVzIGlzbid0IHJlZ2lzdGVyZWRcbiIsCisJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlncGlvX2NlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KGdjLCAiI2dwaW8tY2VsbHMiLCAmc2l6ZSk7CisJaWYgKCFncGlvX2NlbGxzIHx8IHNpemUgIT0gc2l6ZW9mKCpncGlvX2NlbGxzKSB8fAorCQkJKmdwaW9fY2VsbHMgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKKwkJcHJfZGVidWcoIiVzOiB3cm9uZyAjZ3Bpby1jZWxscyBmb3IgJXNcbiIsCisJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyMTsKIAl9CiAKIAlyZXQgPSBvZl9nYy0+eGxhdGUob2ZfZ2MsIG5wLCBncGlvX3NwZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZyBiL2RyaXZlcnMvcGFycG9ydC9DaGFuZ2VMb2cKaW5kZXggZGI3MTdjMS4uODU2NWJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZworKysgYi9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nCkBAIC0zMTEsNyArMzExLDcgQEAKIAkqIGllZWUxMjg0X29wcy5jIChwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlKTogUmVzZXQgbkF1dG9GZAogCW9uIHRpbWVvdXQuICBNYXRjaGVzIDIuMi54IGJlaGF2aW91ci4KIAotMjAwMS0wMy0wMiAgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorMjAwMS0wMy0wMiAgQW5kcmV3IE1vcnRvbgogCiAJKiBwYXJwb3J0X3BjLmMgKHJlZ2lzdGVyZWRfcGFycG9ydCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCiAJKHBhcnBvcnRfcGNfZmluZF9wb3J0cyk6IFNldCBpdCB3aGVuIHdlIHJlZ2lzdGVyIFBDSSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYyBiL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCmluZGV4IGU5NzA1OTQuLmFjMmE4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBwYXJwb3J0X2llZWUxMjg0LmMsdiAxLjQgMTk5Ny8xMC8xOSAyMTozNzoyMSBwaGlsaXAgRXhwICQKKy8qCiAgKiBJRUVFLTEyODQgaW1wbGVtZW50YXRpb24gZm9yIHBhcnBvcnQuCiAgKgogICogQXV0aG9yczogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wcm9iZS5jIGIvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKaW5kZXggY2Q1NjViYi4uMGY2NTUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IHBhcnBvcnRfcHJvYmUuYyx2IDEuMSAxOTk5LzA3LzAzIDA4OjU2OjE3IGRhdmVtIEV4cCAkCisvKgogICogUGFyYWxsZWwgcG9ydCBkZXZpY2UgcHJvYmluZyBjb2RlCiAgKgogICogQXV0aG9yczogICAgQ2Fyc3RlbiBHcm9zcywgY2Fyc3RlbkBzb2wud29obmhlaW0udW5pLXVsbS5kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwppbmRleCBhOGE2MmJiLi4wZWJjYTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogcGFycG9ydF9zaGFyZS5jLHYgMS4xNSAxOTk4LzAxLzExIDEyOjA2OjE3IHBoaWxpcCBFeHAgJAorLyoKICAqIFBhcmFsbGVsLXBvcnQgcmVzb3VyY2UgbWFuYWdlciBjb2RlLgogICogCiAgKiBBdXRob3JzOiBEYXZpZCBDYW1wYmVsbCA8Y2FtcGJlbGxAdGlyaWFuLmNoZS5jdXJ0aW4uZWR1LmF1PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IGJkMmMwMTYuLmU4NDJlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgImlvdmEuaCIKLSNpbmNsdWRlICJpbnRlbC1pb21tdS5oIgogCiAjdW5kZWYgUFJFRklYCiAjZGVmaW5lIFBSRUZJWCAiRE1BUjoiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKaW5kZXggODQ2N2QwMi4uN2QyNzYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJaW91bm1hcCAoaW9fbWVtKTsKIAlkZWJ1ZyAoInJldHVybmVkIGViZGEgc2VnbWVudDogJXhcbiIsIGViZGFfc2VnKTsKIAkKLQlpb19tZW0gPSBpb3JlbWFwIChlYmRhX3NlZzw8NCwgNjUwMDApOworCWlvX21lbSA9IGlvcmVtYXAoZWJkYV9zZWc8PDQsIDEwMjQpOwogCWlmICghaW9fbWVtICkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV4dF9vZmZzZXQgPSAweDE4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYwppbmRleCA5YjcxNGVhLi41MDg4NDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCkBAIC0xNDcsOSArMTQ3LDUgQEAKIAlsaXN0X2FkZCgmc2xvdC0+cnBhcGhwX3Nsb3RfbGlzdCwgJnJwYXBocF9zbG90X2hlYWQpOwogCWluZm8oIlNsb3QgWyVzXSByZWdpc3RlcmVkXG4iLCBzbG90LT5uYW1lKTsKIAlyZXR1cm4gMDsKLQotc3lzZnNfZmFpbDoKLQlwY2lfaHBfZGVyZWdpc3RlcihwaHBfc2xvdCk7Ci0JcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggMzg5ZmRkNi4uOGI1MWUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlICJpb3ZhLmgiCi0jaW5jbHVkZSAiaW50ZWwtaW9tbXUuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4gLyogZm9yY2VfaW9tbXUgaW4gdGhpcyBoZWFkZXIgaW4geDg2LTY0Ki8KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgpAQCAtMTU2LDcgKzE1Niw3IEBACiAJcmV0dXJuIGlvbW11X2ttZW1fY2FjaGVfYWxsb2MoaW9tbXVfZG9tYWluX2NhY2hlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZG9tYWluX21lbSh2b2lkICp2YWRkcikKK3N0YXRpYyB2b2lkIGZyZWVfZG9tYWluX21lbSh2b2lkICp2YWRkcikKIHsKIAlrbWVtX2NhY2hlX2ZyZWUoaW9tbXVfZG9tYWluX2NhY2hlLCB2YWRkcik7CiB9CkBAIC01NjMsNyArNTYzLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKIAotCS8qIGZsdXNoIGNvbnRleHQgZW50cnkgd2lsbCBpbXBsaWN0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCisJLyogZmx1c2ggY29udGV4dCBlbnRyeSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1Niw3ICs2NTYsNyBAQAogCWlmIChETUFfVExCX0lBSUcodmFsKSAhPSBETUFfVExCX0lJUkcodHlwZSkpCiAJCXByX2RlYnVnKCJJT01NVTogdGxiIGZsdXNoIHJlcXVlc3QgJUx4LCBhY3R1YWwgJUx4XG4iLAogCQkJRE1BX1RMQl9JSVJHKHR5cGUpLCBETUFfVExCX0lBSUcodmFsKSk7Ci0JLyogZmx1c2ggY29udGV4dCBlbnRyeSB3aWxsIGltcGxpY3RseSBmbHVzaCB3cml0ZSBidWZmZXIgKi8KKwkvKiBmbHVzaCBpb3RsYiBlbnRyeSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDEsNyArMTM0MSw3IEBACiAgKiBmaW5kX2RvbWFpbgogICogTm90ZTogd2UgdXNlIHN0cnVjdCBwY2lfZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpbmZvCiAgKi8KLXN0cnVjdCBkbWFyX2RvbWFpbiAqCitzdGF0aWMgc3RydWN0IGRtYXJfZG9tYWluICoKIGZpbmRfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CkBAIC0yMzE4LDMgKzIzMTgsMTExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCit7CisJdTY0IGVuZDsKKworCS8qIERvbWFpbiAwIGlzIHJlc2VydmVkLCBzbyBkb250IHByb2Nlc3MgaXQgKi8KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuOworCisJZW5kID0gRE9NQUlOX01BWF9BRERSKGRvbWFpbi0+Z2F3KTsKKwllbmQgPSBlbmQgJiAoflBBR0VfTUFTS180Syk7CisKKwkvKiBjbGVhciBwdGVzICovCisJZG1hX3B0ZV9jbGVhcl9yYW5nZShkb21haW4sIDAsIGVuZCk7CisKKwkvKiBmcmVlIHBhZ2UgdGFibGVzICovCisJZG1hX3B0ZV9mcmVlX3BhZ2V0YWJsZShkb21haW4sIDAsIGVuZCk7CisKKwlpb21tdV9mcmVlX2RvbWFpbihkb21haW4pOworCWZyZWVfZG9tYWluX21lbShkb21haW4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQpOworCitzdHJ1Y3QgZG1hcl9kb21haW4gKmludGVsX2lvbW11X2RvbWFpbl9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKKworCWRyaGQgPSBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQocGRldik7CisJaWYgKCFkcmhkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBkcmhkID09IE5VTExcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpb21tdSA9IGRyaGQtPmlvbW11OworCWlmICghaW9tbXUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBpb21tdSA9PSBOVUxMXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRvbWFpbiA9IGlvbW11X2FsbG9jX2RvbWFpbihpb21tdSk7CisJaWYgKCFkb21haW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBkb21haW4gPT0gTlVMTFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoZG9tYWluX2luaXQoZG9tYWluLCBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJpbnRlbF9pb21tdV9kb21haW5fYWxsb2M6IGRvbWFpbl9pbml0KCkgZmFpbGVkXG4iKTsKKwkJaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBkb21haW47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9kb21haW5fYWxsb2MpOworCitpbnQgaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKAorCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcmM7CisJcmMgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKGRvbWFpbiwgcGRldik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKTsKKworaW50IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZygKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhLAorCXU2NCBocGEsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKK3sKKwlpbnQgcmM7CisJcmMgPSBkb21haW5fcGFnZV9tYXBwaW5nKGRvbWFpbiwgaW92YSwgaHBhLCBzaXplLCBwcm90KTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9wYWdlX21hcHBpbmcpOworCit2b2lkIGludGVsX2lvbW11X2RldGFjaF9kZXYoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU4IGJ1cywgdTggZGV2Zm4pCit7CisJZGV0YWNoX2RvbWFpbl9mb3JfZGV2KGRvbWFpbiwgYnVzLCBkZXZmbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9kZXRhY2hfZGV2KTsKKworc3RydWN0IGRtYXJfZG9tYWluICoKK2ludGVsX2lvbW11X2ZpbmRfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiBmaW5kX2RvbWFpbihwZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2ZpbmRfZG9tYWluKTsKKworaW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpCit7CisJcmV0dXJuIGdfbnVtX29mX2lvbW11czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2ZvdW5kKTsKKwordTY0IGludGVsX2lvbW11X2lvdmFfdG9fcGZuKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1NjQgaW92YSkKK3sKKwlzdHJ1Y3QgZG1hX3B0ZSAqcHRlOworCXU2NCBwZm47CisKKwlwZm4gPSAwOworCXB0ZSA9IGFkZHJfdG9fZG1hX3B0ZShkb21haW4sIGlvdmEpOworCisJaWYgKHB0ZSkKKwkJcGZuID0gZG1hX3B0ZV9hZGRyKCpwdGUpOworCisJcmV0dXJuIHBmbiA+PiBQQUdFX1NISUZUXzRLOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfaW92YV90b19wZm4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaCBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDJjMDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgotICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgotICovCi0KLSNpZm5kZWYgX0lOVEVMX0lPTU1VX0hfCi0jZGVmaW5lIF9JTlRFTF9JT01NVV9IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlICJpb3ZhLmgiCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgImRtYV9yZW1hcHBpbmcuaCIKLQotLyoKLSAqIEludGVsIElPTU1VIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gcGVyIHZlcnNpb24gMS4wIHB1YmxpYyBzcGVjLgotICovCi0KLSNkZWZpbmUJRE1BUl9WRVJfUkVHCTB4MAkvKiBBcmNoIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoaXMgSU9NTVUgKi8KLSNkZWZpbmUJRE1BUl9DQVBfUkVHCTB4OAkvKiBIYXJkd2FyZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lCURNQVJfRUNBUF9SRUcJMHgxMAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lCURNQVJfR0NNRF9SRUcJMHgxOAkvKiBHbG9iYWwgY29tbWFuZCByZWdpc3RlciAqLwotI2RlZmluZQlETUFSX0dTVFNfUkVHCTB4MWMJLyogR2xvYmFsIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZQlETUFSX1JUQUREUl9SRUcJMHgyMAkvKiBSb290IGVudHJ5IHRhYmxlICovCi0jZGVmaW5lCURNQVJfQ0NNRF9SRUcJMHgyOAkvKiBDb250ZXh0IGNvbW1hbmQgcmVnICovCi0jZGVmaW5lCURNQVJfRlNUU19SRUcJMHgzNAkvKiBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9GRUNUTF9SRUcJMHgzOAkvKiBGYXVsdCBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVEQVRBX1JFRwkweDNjCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBkYXRhIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVBRERSX1JFRwkweDQwCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBhZGRyIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVVQUREUl9SRUcgMHg0NAkvKiBVcHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfQUZMT0dfUkVHCTB4NTgJLyogQWR2YW5jZWQgRmF1bHQgY29udHJvbCAqLwotI2RlZmluZQlETUFSX1BNRU5fUkVHCTB4NjQJLyogRW5hYmxlIFByb3RlY3RlZCBNZW1vcnkgUmVnaW9uICovCi0jZGVmaW5lCURNQVJfUExNQkFTRV9SRUcgMHg2OAkvKiBQTVJSIExvdyBhZGRyICovCi0jZGVmaW5lCURNQVJfUExNTElNSVRfUkVHIDB4NmMJLyogUE1SUiBsb3cgbGltaXQgKi8KLSNkZWZpbmUJRE1BUl9QSE1CQVNFX1JFRyAweDcwCS8qIHBtcnIgaGlnaCBiYXNlIGFkZHIgKi8KLSNkZWZpbmUJRE1BUl9QSE1MSU1JVF9SRUcgMHg3OAkvKiBwbXJyIGhpZ2ggbGltaXQgKi8KLSNkZWZpbmUgRE1BUl9JUUhfUkVHCTB4ODAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JUVRfUkVHCTB4ODgJLyogSW52YWxpZGF0aW9uIHF1ZXVlIHRhaWwgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JUUFfUkVHCTB4OTAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGFkZHIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JQ1NfUkVHCTB4OTgJLyogSW52YWxpZGF0aW9uIGNvbXBsZXRlIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBETUFSX0lSVEFfUkVHCTB4YjggICAgLyogSW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBhZGRyIHJlZ2lzdGVyICovCi0KLSNkZWZpbmUgT0ZGU0VUX1NUUklERQkJKDkpCi0vKgotI2RlZmluZSBkbWFyX3JlYWRsKGRtYXIsIHJlZykgcmVhZGwoZG1hciArIHJlZykKLSNkZWZpbmUgZG1hcl9yZWFkcShkbWFyLCByZWcpICh7IFwKLQkJdTMyIGxvLCBoaTsgXAotCQlsbyA9IHJlYWRsKGRtYXIgKyByZWcpOyBcCi0JCWhpID0gcmVhZGwoZG1hciArIHJlZyArIDQpOyBcCi0JCSgoKHU2NCkgaGkpIDw8IDMyKSArIGxvOyB9KQotKi8KLXN0YXRpYyBpbmxpbmUgdTY0IGRtYXJfcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQotewotCXUzMiBsbywgaGk7Ci0JbG8gPSByZWFkbChhZGRyKTsKLQloaSA9IHJlYWRsKGFkZHIgKyA0KTsKLQlyZXR1cm4gKCgodTY0KSBoaSkgPDwgMzIpICsgbG87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFyX3dyaXRlcSh2b2lkIF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCi17Ci0Jd3JpdGVsKCh1MzIpdmFsLCBhZGRyKTsKLQl3cml0ZWwoKHUzMikodmFsID4+IDMyKSwgYWRkciArIDQpOwotfQotCi0jZGVmaW5lIERNQVJfVkVSX01BSk9SKHYpCQkoKCh2KSAmIDB4ZjApID4+IDQpCi0jZGVmaW5lIERNQVJfVkVSX01JTk9SKHYpCQkoKHYpICYgMHgwZikKLQotLyoKLSAqIERlY29kaW5nIENhcGFiaWxpdHkgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBjYXBfcmVhZF9kcmFpbihjKQkoKChjKSA+PiA1NSkgJiAxKQotI2RlZmluZSBjYXBfd3JpdGVfZHJhaW4oYykJKCgoYykgPj4gNTQpICYgMSkKLSNkZWZpbmUgY2FwX21heF9hbWFza192YWwoYykJKCgoYykgPj4gNDgpICYgMHgzZikKLSNkZWZpbmUgY2FwX251bV9mYXVsdF9yZWdzKGMpCSgoKChjKSA+PiA0MCkgJiAweGZmKSArIDEpCi0jZGVmaW5lIGNhcF9wZ3NlbF9pbnYoYykJKCgoYykgPj4gMzkpICYgMSkKLQotI2RlZmluZSBjYXBfc3VwZXJfcGFnZV92YWwoYykJKCgoYykgPj4gMzQpICYgMHhmKQotI2RlZmluZSBjYXBfc3VwZXJfb2Zmc2V0KGMpCSgoKGZpbmRfZmlyc3RfYml0KCZjYXBfc3VwZXJfcGFnZV92YWwoYyksIDQpKSBcCi0JCQkJCSogT0ZGU0VUX1NUUklERSkgKyAyMSkKLQotI2RlZmluZSBjYXBfZmF1bHRfcmVnX29mZnNldChjKQkoKCgoYykgPj4gMjQpICYgMHgzZmYpICogMTYpCi0jZGVmaW5lIGNhcF9tYXhfZmF1bHRfcmVnX29mZnNldChjKSBcCi0JKGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpICsgY2FwX251bV9mYXVsdF9yZWdzKGMpICogMTYpCi0KLSNkZWZpbmUgY2FwX3pscihjKQkJKCgoYykgPj4gMjIpICYgMSkKLSNkZWZpbmUgY2FwX2lzb2NoKGMpCQkoKChjKSA+PiAyMykgJiAxKQotI2RlZmluZSBjYXBfbWdhdyhjKQkJKCgoKGMpID4+IDE2KSAmIDB4M2YpICsgMSkKLSNkZWZpbmUgY2FwX3NhZ2F3KGMpCQkoKChjKSA+PiA4KSAmIDB4MWYpCi0jZGVmaW5lIGNhcF9jYWNoaW5nX21vZGUoYykJKCgoYykgPj4gNykgJiAxKQotI2RlZmluZSBjYXBfcGhtcihjKQkJKCgoYykgPj4gNikgJiAxKQotI2RlZmluZSBjYXBfcGxtcihjKQkJKCgoYykgPj4gNSkgJiAxKQotI2RlZmluZSBjYXBfcndiZihjKQkJKCgoYykgPj4gNCkgJiAxKQotI2RlZmluZSBjYXBfYWZsKGMpCQkoKChjKSA+PiAzKSAmIDEpCi0jZGVmaW5lIGNhcF9uZG9tcyhjKQkJKCgodW5zaWduZWQgbG9uZykxKSA8PCAoNCArIDIgKiAoKGMpICYgMHg3KSkpCi0vKgotICogRXh0ZW5kZWQgQ2FwYWJpbGl0eSBSZWdpc3RlcgotICovCi0KLSNkZWZpbmUgZWNhcF9uaW90bGJfaXVuaXRzKGUpCSgoKChlKSA+PiAyNCkgJiAweGZmKSArIDEpCi0jZGVmaW5lIGVjYXBfaW90bGJfb2Zmc2V0KGUpIAkoKCgoZSkgPj4gOCkgJiAweDNmZikgKiAxNikKLSNkZWZpbmUgZWNhcF9tYXhfaW90bGJfb2Zmc2V0KGUpIFwKLQkoZWNhcF9pb3RsYl9vZmZzZXQoZSkgKyBlY2FwX25pb3RsYl9pdW5pdHMoZSkgKiAxNikKLSNkZWZpbmUgZWNhcF9jb2hlcmVudChlKQkoKGUpICYgMHgxKQotI2RlZmluZSBlY2FwX3FpcyhlKQkJKChlKSAmIDB4MikKLSNkZWZpbmUgZWNhcF9laW1fc3VwcG9ydChlKQkoKGUgPj4gNCkgJiAweDEpCi0jZGVmaW5lIGVjYXBfaXJfc3VwcG9ydChlKQkoKGUgPj4gMykgJiAweDEpCi0jZGVmaW5lIGVjYXBfbWF4X2hhbmRsZV9tYXNrKGUpICgoZSA+PiAyMCkgJiAweGYpCi0KLQotLyogSU9UTEJfUkVHICovCi0jZGVmaW5lIERNQV9UTEJfR0xPQkFMX0ZMVVNIICgoKHU2NCkxKSA8PCA2MCkKLSNkZWZpbmUgRE1BX1RMQl9EU0lfRkxVU0ggKCgodTY0KTIpIDw8IDYwKQotI2RlZmluZSBETUFfVExCX1BTSV9GTFVTSCAoKCh1NjQpMykgPDwgNjApCi0jZGVmaW5lIERNQV9UTEJfSUlSRyh0eXBlKSAoKHR5cGUgPj4gNjApICYgNykKLSNkZWZpbmUgRE1BX1RMQl9JQUlHKHZhbCkgKCgodmFsKSA+PiA1NykgJiA3KQotI2RlZmluZSBETUFfVExCX1JFQURfRFJBSU4gKCgodTY0KTEpIDw8IDQ5KQotI2RlZmluZSBETUFfVExCX1dSSVRFX0RSQUlOICgoKHU2NCkxKSA8PCA0OCkKLSNkZWZpbmUgRE1BX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkKSAmIDB4ZmZmZikpIDw8IDMyKQotI2RlZmluZSBETUFfVExCX0lWVCAoKCh1NjQpMSkgPDwgNjMpCi0jZGVmaW5lIERNQV9UTEJfSUhfTk9OTEVBRiAoKCh1NjQpMSkgPDwgNikKLSNkZWZpbmUgRE1BX1RMQl9NQVhfU0laRSAoMHgzZikKLQotLyogSU5WQUxJRF9ERVNDICovCi0jZGVmaW5lIERNQV9JRF9UTEJfR0xPQkFMX0ZMVVNICSgoKHU2NCkxKSA8PCAzKQotI2RlZmluZSBETUFfSURfVExCX0RTSV9GTFVTSAkoKCh1NjQpMikgPDwgMykKLSNkZWZpbmUgRE1BX0lEX1RMQl9QU0lfRkxVU0gJKCgodTY0KTMpIDw8IDMpCi0jZGVmaW5lIERNQV9JRF9UTEJfUkVBRF9EUkFJTgkoKCh1NjQpMSkgPDwgNykKLSNkZWZpbmUgRE1BX0lEX1RMQl9XUklURV9EUkFJTgkoKCh1NjQpMSkgPDwgNikKLSNkZWZpbmUgRE1BX0lEX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkICYgMHhmZmZmKSA8PCAxNikpKQotI2RlZmluZSBETUFfSURfVExCX0lIX05PTkxFQUYJKCgodTY0KTEpIDw8IDYpCi0jZGVmaW5lIERNQV9JRF9UTEJfQUREUihhZGRyKQkoYWRkcikKLSNkZWZpbmUgRE1BX0lEX1RMQl9BRERSX01BU0sobWFzaykJKG1hc2spCi0KLS8qIFBNRU5fUkVHICovCi0jZGVmaW5lIERNQV9QTUVOX0VQTSAoKCh1MzIpMSk8PDMxKQotI2RlZmluZSBETUFfUE1FTl9QUlMgKCgodTMyKTEpPDwwKQotCi0vKiBHQ01EX1JFRyAqLwotI2RlZmluZSBETUFfR0NNRF9URSAoKCh1MzIpMSkgPDwgMzEpCi0jZGVmaW5lIERNQV9HQ01EX1NSVFAgKCgodTMyKTEpIDw8IDMwKQotI2RlZmluZSBETUFfR0NNRF9TRkwgKCgodTMyKTEpIDw8IDI5KQotI2RlZmluZSBETUFfR0NNRF9FQUZMICgoKHUzMikxKSA8PCAyOCkKLSNkZWZpbmUgRE1BX0dDTURfV0JGICgoKHUzMikxKSA8PCAyNykKLSNkZWZpbmUgRE1BX0dDTURfUUlFICgoKHUzMikxKSA8PCAyNikKLSNkZWZpbmUgRE1BX0dDTURfU0lSVFAgKCgodTMyKTEpIDw8IDI0KQotI2RlZmluZSBETUFfR0NNRF9JUkUgKCgodTMyKSAxKSA8PCAyNSkKLQotLyogR1NUU19SRUcgKi8KLSNkZWZpbmUgRE1BX0dTVFNfVEVTICgoKHUzMikxKSA8PCAzMSkKLSNkZWZpbmUgRE1BX0dTVFNfUlRQUyAoKCh1MzIpMSkgPDwgMzApCi0jZGVmaW5lIERNQV9HU1RTX0ZMUyAoKCh1MzIpMSkgPDwgMjkpCi0jZGVmaW5lIERNQV9HU1RTX0FGTFMgKCgodTMyKTEpIDw8IDI4KQotI2RlZmluZSBETUFfR1NUU19XQkZTICgoKHUzMikxKSA8PCAyNykKLSNkZWZpbmUgRE1BX0dTVFNfUUlFUyAoKCh1MzIpMSkgPDwgMjYpCi0jZGVmaW5lIERNQV9HU1RTX0lSVFBTICgoKHUzMikxKSA8PCAyNCkKLSNkZWZpbmUgRE1BX0dTVFNfSVJFUyAoKCh1MzIpMSkgPDwgMjUpCi0KLS8qIENDTURfUkVHICovCi0jZGVmaW5lIERNQV9DQ01EX0lDQyAoKCh1NjQpMSkgPDwgNjMpCi0jZGVmaW5lIERNQV9DQ01EX0dMT0JBTF9JTlZMICgoKHU2NCkxKSA8PCA2MSkKLSNkZWZpbmUgRE1BX0NDTURfRE9NQUlOX0lOVkwgKCgodTY0KTIpIDw8IDYxKQotI2RlZmluZSBETUFfQ0NNRF9ERVZJQ0VfSU5WTCAoKCh1NjQpMykgPDwgNjEpCi0jZGVmaW5lIERNQV9DQ01EX0ZNKG0pICgoKHU2NCkoKG0pICYgMHgzKSkgPDwgMzIpCi0jZGVmaW5lIERNQV9DQ01EX01BU0tfTk9CSVQgMAotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzFCSVQgMQotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzJCSVQgMgotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzNCSVQgMwotI2RlZmluZSBETUFfQ0NNRF9TSUQocykgKCgodTY0KSgocykgJiAweGZmZmYpKSA8PCAxNikKLSNkZWZpbmUgRE1BX0NDTURfRElEKGQpICgodTY0KSgoZCkgJiAweGZmZmYpKQotCi0vKiBGRUNUTF9SRUcgKi8KLSNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHUzMikxKSA8PCAzMSkKLQotLyogRlNUU19SRUcgKi8KLSNkZWZpbmUgRE1BX0ZTVFNfUFBGICgodTMyKTIpCi0jZGVmaW5lIERNQV9GU1RTX1BGTyAoKHUzMikxKQotI2RlZmluZSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgocykgKCgocykgPj4gOCkgJiAweGZmKQotCi0vKiBGUkNEX1JFRywgMzIgYml0cyBhY2Nlc3MgKi8KLSNkZWZpbmUgRE1BX0ZSQ0RfRiAoKCh1MzIpMSkgPDwgMzEpCi0jZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChkID4+IDMwKSAmIDEpCi0jZGVmaW5lIGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihjKSAoYyAmIDB4ZmYpCi0jZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9pZChjKSAoYyAmIDB4ZmZmZikKLSNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KLQotI2RlZmluZSBETUFSX09QRVJBVElPTl9USU1FT1VUICgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkgLyogMTBzZWMgKi8KLQotI2RlZmluZSBJT01NVV9XQUlUX09QKGlvbW11LCBvZmZzZXQsIG9wLCBjb25kLCBzdHMpIFwKLXtcCi0JY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTtcCi0Jd2hpbGUgKDEpIHtcCi0JCXN0cyA9IG9wIChpb21tdS0+cmVnICsgb2Zmc2V0KTtcCi0JCWlmIChjb25kKVwKLQkJCWJyZWFrO1wKLQkJaWYgKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpXAotCQkJcGFuaWMoIkRNQVIgaGFyZHdhcmUgaXMgbWFsZnVuY3Rpb25pbmdcbiIpO1wKLQkJY3B1X3JlbGF4KCk7XAotCX1cCi19Ci0KLSNkZWZpbmUgUUlfTEVOR1RICTI1NgkvKiBxdWV1ZSBsZW5ndGggKi8KLQotZW51bSB7Ci0JUUlfRlJFRSwKLQlRSV9JTl9VU0UsCi0JUUlfRE9ORQotfTsKLQotI2RlZmluZSBRSV9DQ19UWVBFCQkweDEKLSNkZWZpbmUgUUlfSU9UTEJfVFlQRQkJMHgyCi0jZGVmaW5lIFFJX0RJT1RMQl9UWVBFCQkweDMKLSNkZWZpbmUgUUlfSUVDX1RZUEUJCTB4NAotI2RlZmluZSBRSV9JV0RfVFlQRQkJMHg1Ci0KLSNkZWZpbmUgUUlfSUVDX1NFTEVDVElWRQkoKCh1NjQpMSkgPDwgNCkKLSNkZWZpbmUgUUlfSUVDX0lJREVYKGlkeCkJKCgodTY0KShpZHggJiAweGZmZmYpIDw8IDMyKSkKLSNkZWZpbmUgUUlfSUVDX0lNKG0pCQkoKCh1NjQpKG0gJiAweDFmKSA8PCAyNykpCi0KLSNkZWZpbmUgUUlfSVdEX1NUQVRVU19EQVRBKGQpCSgoKHU2NClkKSA8PCAzMikKLSNkZWZpbmUgUUlfSVdEX1NUQVRVU19XUklURQkoKCh1NjQpMSkgPDwgNSkKLQotc3RydWN0IHFpX2Rlc2MgewotCXU2NCBsb3csIGhpZ2g7Ci19OwotCi1zdHJ1Y3QgcV9pbnZhbCB7Ci0Jc3BpbmxvY2tfdCAgICAgIHFfbG9jazsKLQlzdHJ1Y3QgcWlfZGVzYyAgKmRlc2M7ICAgICAgICAgIC8qIGludmFsaWRhdGlvbiBxdWV1ZSAqLwotCWludCAgICAgICAgICAgICAqZGVzY19zdGF0dXM7ICAgLyogZGVzYyBzdGF0dXMgKi8KLQlpbnQgICAgICAgICAgICAgZnJlZV9oZWFkOyAgICAgIC8qIGZpcnN0IGZyZWUgZW50cnkgKi8KLQlpbnQgICAgICAgICAgICAgZnJlZV90YWlsOyAgICAgIC8qIGxhc3QgZnJlZSBlbnRyeSAqLwotCWludCAgICAgICAgICAgICBmcmVlX2NudDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotLyogMU1CIC0gbWF4aW11bSBwb3NzaWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIHNpemUgKi8KLSNkZWZpbmUgSU5UUl9SRU1BUF9QQUdFX09SREVSCTgKLSNkZWZpbmUgSU5UUl9SRU1BUF9UQUJMRV9SRUdfU0laRQkweGYKLQotI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX0VOVFJJRVMJNjU1MzYKLQotc3RydWN0IGlyX3RhYmxlIHsKLQlzdHJ1Y3QgaXJ0ZSAqYmFzZTsKLX07Ci0jZW5kaWYKLQotc3RydWN0IGludGVsX2lvbW11IHsKLQl2b2lkIF9faW9tZW0JKnJlZzsgLyogUG9pbnRlciB0byBoYXJkd2FyZSByZWdzLCB2aXJ0dWFsIGFkZHIgKi8KLQl1NjQJCWNhcDsKLQl1NjQJCWVjYXA7Ci0JaW50CQlzZWc7Ci0JdTMyCQlnY21kOyAvKiBIb2xkcyBURSwgRUFGTC4gRG9uJ3QgbmVlZCBTUlRQLCBTRkwsIFdCRiAqLwotCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLwotCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KLQotI2lmZGVmIENPTkZJR19ETUFSCi0JdW5zaWduZWQgbG9uZyAJKmRvbWFpbl9pZHM7IC8qIGJpdG1hcCBvZiBkb21haW5zICovCi0Jc3RydWN0IGRtYXJfZG9tYWluICoqZG9tYWluczsgLyogcHRyIHRvIGRvbWFpbnMgKi8KLQlzcGlubG9ja190CWxvY2s7IC8qIHByb3RlY3QgY29udGV4dCwgZG9tYWluIGlkcyAqLwotCXN0cnVjdCByb290X2VudHJ5ICpyb290X2VudHJ5OyAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgY2hhciBuYW1lWzddOyAgICAvKiBEZXZpY2UgTmFtZSAqLwotCXN0cnVjdCBtc2lfbXNnIHNhdmVkX21zZzsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0jZW5kaWYKLQlzdHJ1Y3QgcV9pbnZhbCAgKnFpOyAgICAgICAgICAgIC8qIFF1ZXVlZCBpbnZhbGlkYXRpb24gaW5mbyAqLwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGlyX3RhYmxlICppcl90YWJsZTsJLyogSW50ZXJydXB0IHJlbWFwcGluZyBpbmZvICovCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbW11X2ZsdXNoX2NhY2hlKAotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWlmICghZWNhcF9jb2hlcmVudChpb21tdS0+ZWNhcCkpCi0JCWNsZmx1c2hfY2FjaGVfcmFuZ2UoYWRkciwgc2l6ZSk7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKiBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KLWV4dGVybiBpbnQgYWxsb2NfaW9tbXUoc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkKTsKLWV4dGVybiB2b2lkIGZyZWVfaW9tbXUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7Ci1leHRlcm4gaW50IGRtYXJfZW5hYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwotZXh0ZXJuIHZvaWQgcWlfZ2xvYmFsX2llYyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKLQotZXh0ZXJuIHZvaWQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCBiYjY0MmNjLi43MzhkNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KLSNpbmNsdWRlICJpbnRlbC1pb21tdS5oIgorI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSAiaW50cl9yZW1hcHBpbmcuaCIKIAogc3RhdGljIHN0cnVjdCBpb2FwaWNfc2NvcGUgaXJfaW9hcGljW01BWF9JT19BUElDU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5oIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuaAppbmRleCAwNWYyNjM1Li5jYTQ4ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5oCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAiaW50ZWwtaW9tbXUuaCIKKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogCiBzdHJ1Y3QgaW9hcGljX3Njb3BlIHsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDNlZjRhYzAuLjIyODcxMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTcsNyArNyw3IEBACiAgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgImlvdmEuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CiAKIHZvaWQKIGluaXRfaW92YV9kb21haW4oc3RydWN0IGlvdmFfZG9tYWluICppb3ZhZCwgdW5zaWduZWQgbG9uZyBwZm5fMzJiaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGM5ODg0YmIuLmRiZTlmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xMzU4LDExICsxMzU4LDEwIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgcmVzZXJ2ZSAlcyByZWdpb24gWyUjbGx4LSUjbGx4XVxuIiwKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCByZXNlcnZlICVzIHJlZ2lvbiAlcFJcbiIsCiAJCSBiYXIsCiAJCSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2VuZChwZGV2LCBiYXIpKTsKKwkJICZwZGV2LT5yZXNvdXJjZVtiYXJdKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCAzNjY5OGU1N2IuLmQzZGI4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMzA0LDkgKzMwNCw4IEBACiAJCX0gZWxzZSB7CiAJCQlyZXMtPnN0YXJ0ID0gbDY0OwogCQkJcmVzLT5lbmQgPSBsNjQgKyBzejY0OwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMgcmVnICV4IDY0Yml0IG1taW86IFslbGx4LCAlbGx4XVxuIiwKLQkJCQlwY2lfbmFtZShkZXYpLCBwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzIHJlZyAleCA2NGJpdCBtbWlvOiAlcFJcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgcG9zLCByZXMpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3ogPSBwY2lfc2l6ZShsLCBzeiwgbWFzayk7CkBAIC0zMTYsOSArMzE1LDEwIEBACiAKIAkJcmVzLT5zdGFydCA9IGw7CiAJCXJlcy0+ZW5kID0gbCArIHN6OwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggJXM6IFslbGx4LCAlbGx4XVxuIiwgcGNpX25hbWUoZGV2KSwKLQkJCXBvcywgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/ICJpbyBwb3J0IjoiMzJiaXQgbW1pbyIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggJXM6ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHBvcywKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCI6IjMyYml0IG1taW8iLAorCQkgICAgICAgcmVzKTsKIAl9CiAKICBvdXQ6CkBAIC0zODksOSArMzg5LDggQEAKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgaW8gcG9ydDogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIGlvIHBvcnQ6ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHJlcyk7CiAJfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwpAQCAtNDAzLDkgKzQwMiw4IEBACiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSykgfCBJT1JFU09VUkNFX01FTTsKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgMzJiaXQgbW1pbzogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIDMyYml0IG1taW86ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHJlcyk7CiAJfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwpAQCAtNDQxLDkgKzQzOSw5IEBACiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSykgfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzICVzYml0IG1taW8gcHJlZjogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSA/ICI2NCIgOiAiMzIiLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgJXNiaXQgbW1pbyBwcmVmOiAlcFJcbiIsCisJCSAgICAgICBwY2lfbmFtZShkZXYpLAorCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSA/ICI2NCI6IjMyIiwgcmVzKTsKIAl9CiB9CiAKQEAgLTEyMzcsOCArMTIzNSwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NjYW5fY2hpbGRfYnVzKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfc29ydF9iZl9jbXAoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmEsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpiKQorc3RhdGljIGludCBfX2luaXQgcGNpX3NvcnRfYmZfY21wKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRfYSwgY29uc3Qgc3RydWN0IGRldmljZSAqZF9iKQogeworCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICphID0gdG9fcGNpX2RldihkX2EpOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICpiID0gdG9fcGNpX2RldihkX2IpOworCiAJaWYgICAgICAocGNpX2RvbWFpbl9ucihhLT5idXMpIDwgcGNpX2RvbWFpbl9ucihiLT5idXMpKSByZXR1cm4gLTE7CiAJZWxzZSBpZiAocGNpX2RvbWFpbl9ucihhLT5idXMpID4gcGNpX2RvbWFpbl9ucihiLT5idXMpKSByZXR1cm4gIDE7CiAKQEAgLTEyNTEsNTAgKzEyNTIsNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogWWVzLCB0aGlzIGZvcmNhYmx5IGJyZWFrcyB0aGUga2xpc3QgYWJzdHJhY3Rpb24gdGVtcG9yYXJpbHkuICBJdAotICoganVzdCB3YW50cyB0byBzb3J0IHRoZSBrbGlzdCwgbm90IGNoYW5nZSByZWZlcmVuY2UgY291bnRzIGFuZAotICogdGFrZS9kcm9wIGxvY2tzIHJhcGlkbHkgaW4gdGhlIHByb2Nlc3MuICBJdCBkb2VzIGFsbCB0aGlzIHdoaWxlCi0gKiBob2xkaW5nIHRoZSBsb2NrIGZvciB0aGUgbGlzdCwgc28gb2JqZWN0cyBjYW4ndCBvdGhlcndpc2UgYmUKLSAqIGFkZGVkL3JlbW92ZWQgd2hpbGUgd2UncmUgc3dpenpsaW5nLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX2luc2VydGlvbl9zb3J0X2tsaXN0KHN0cnVjdCBwY2lfZGV2ICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKmI7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgbGlzdCkgewotCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOwotCQliID0gdG9fcGNpX2RldihkZXYpOwotCQlpZiAocGNpX3NvcnRfYmZfY21wKGEsIGIpIDw9IDApIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZhLT5kZXYua25vZGVfYnVzLm5fbm9kZSwgJmItPmRldi5rbm9kZV9idXMubl9ub2RlKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlsaXN0X21vdmVfdGFpbCgmYS0+ZGV2Lmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOwotfQotCiB2b2lkIF9faW5pdCBwY2lfc29ydF9icmVhZHRoZmlyc3Qodm9pZCkKIHsKLQlMSVNUX0hFQUQoc29ydGVkX2RldmljZXMpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IGtsaXN0ICpkZXZpY2Vfa2xpc3Q7Ci0KLQlkZXZpY2Vfa2xpc3QgPSBidXNfZ2V0X2RldmljZV9rbGlzdCgmcGNpX2J1c190eXBlKTsKLQotCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7Ci0JCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7Ci0JCXBkZXYgPSB0b19wY2lfZGV2KGRldik7Ci0JCXBjaV9pbnNlcnRpb25fc29ydF9rbGlzdChwZGV2LCAmc29ydGVkX2RldmljZXMpOwotCX0KLQlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRldmljZV9rbGlzdC0+a19sb2NrKTsKKwlidXNfc29ydF9icmVhZHRoZmlyc3QoJnBjaV9idXNfdHlwZSwgJnBjaV9zb3J0X2JmX2NtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDkyMzZlN2YuLmU4NzJhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0xNTYxLDggKzE1NjEsNyBAQAogCQlpZiAoKGYtPnZlbmRvciA9PSBkZXYtPnZlbmRvciB8fCBmLT52ZW5kb3IgPT0gKHUxNikgUENJX0FOWV9JRCkgJiYKICAJCSAgICAoZi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlIHx8IGYtPmRldmljZSA9PSAodTE2KSBQQ0lfQU5ZX0lEKSkgewogI2lmZGVmIERFQlVHCi0JCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbGxpbmcgIik7Ci0JCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiJXNcbiIsIGYtPmhvb2spOworCQkJZGV2X2RiZygmZGV2LT5kZXYsICJjYWxsaW5nICVwRlxuIiwgZi0+aG9vayk7CiAjZW5kaWYKIAkJCWYtPmhvb2soZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcm9tLmMgYi9kcml2ZXJzL3BjaS9yb20uYwppbmRleCBiZDVjMGUwLi4xZjVmNjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yb20uYworKysgYi9kcml2ZXJzL3BjaS9yb20uYwpAQCAtMjEsNyArMjEsNyBAQAogICogYmV0d2VlbiB0aGUgUk9NIGFuZCBvdGhlciByZXNvdXJjZXMsIHNvIGVuYWJsaW5nIGl0IG1heSBkaXNhYmxlIGFjY2VzcwogICogdG8gTU1JTyByZWdpc3RlcnMgb3Igb3RoZXIgY2FyZCBtZW1vcnkuCiAgKi8KLXN0YXRpYyBpbnQgcGNpX2VuYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCitpbnQgcGNpX2VuYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZSArIFBDSV9ST01fUkVTT1VSQ0U7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIERpc2FibGUgUk9NIGRlY29kaW5nIG9uIGEgUENJIGRldmljZSBieSB0dXJuaW5nIG9mZiB0aGUgbGFzdCBiaXQgaW4gdGhlCiAgKiBST00gQkFSLgogICovCi1zdGF0aWMgdm9pZCBwY2lfZGlzYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit2b2lkIHBjaV9kaXNhYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1MzIgcm9tX2FkZHI7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtPnJvbV9iYXNlX3JlZywgJnJvbV9hZGRyKTsKQEAgLTI2MCwzICsyNjAsNSBAQAogCiBFWFBPUlRfU1lNQk9MKHBjaV9tYXBfcm9tKTsKIEVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3JvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZW5hYmxlX3JvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9yb20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCAzYWJiZmFkLi40NzFhNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMzU2LDEwICszNTYsNyBAQAogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKIAkJCWlmIChvcmRlciA+IDExKSB7CiAJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkIGJhZCBhbGlnbm1lbnQgJWxseDogIgotCQkJCSAgICAgICAiJSMwMTZsbHgtJSMwMTZsbHhcbiIsIGksCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kKTsKKwkJCQkJICIlcFJcbiIsIGksICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sIHIpOwogCQkJCXItPmZsYWdzID0gMDsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTM3OCwxMSArMzc1LDEwIEBACiAJYWxpZ24gPSAwOwogCW1pbl9hbGlnbiA9IDA7CiAJZm9yIChvcmRlciA9IDA7IG9yZGVyIDw9IG1heF9vcmRlcjsgb3JkZXIrKykgewotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduMSA9IDFVTEwgPDwgKG9yZGVyICsgMjApOwotI2Vsc2UKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduMSA9IDFVIDw8IChvcmRlciArIDIwKTsKLSNlbmRpZgorCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24xID0gMTsKKworCQlhbGlnbjEgPDw9IChvcmRlciArIDIwKTsKKwogCQlpZiAoIWFsaWduKQogCQkJbWluX2FsaWduID0gYWxpZ24xOwogCQllbHNlIGlmIChBTElHTihhbGlnbiArIG1pbl9hbGlnbiwgbWluX2FsaWduKSA8IGFsaWduMSkKQEAgLTU0MCwxMSArNTM2LDkgQEAKICAgICAgICAgICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJ1czogJTAyeCBpbmRleCAleCAlczogWyVsbHgsICVsbHhdXG4iLAotCQkJYnVzLT5udW1iZXIsIGksCi0JCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIm1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYnVzOiAlMDJ4IGluZGV4ICV4ICVzOiAlcFJcbiIsCisJCSAgICAgICBidXMtPm51bWJlciwgaSwKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCIgOiAibW1pbyIsIHJlcyk7CiAgICAgICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCAxYTVmYzgzLi5kNGI1YzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtNDksMTAgKzQ5LDggQEAKIAogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGRldiwgJnJlZ2lvbiwgcmVzKTsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzIFslI2xseC0lI2xseF0gYnVzIFslI2xseC0lI2xseF0gIgotCQkiZmxhZ3MgJSNseFxuIiwgcmVzbm8sCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzICVwUiBidXMgWyUjbGx4LSUjbGx4XSAiCisJCSJmbGFncyAlI2x4XG4iLCByZXNubywgcmVzLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24uc3RhcnQsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5lbmQsCiAJCSAodW5zaWduZWQgbG9uZylyZXMtPmZsYWdzKTsKQEAgLTExNCwxMyArMTEyLDExIEBACiAJCWVyciA9IGluc2VydF9yZXNvdXJjZShyb290LCByZXMpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogJXMgb2YgJXMgWyUjbGx4LSUjbGx4XVxuIiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6ICVzIG9mICVzICVwUlxuIiwKIAkJCXJlc291cmNlLAogCQkJcm9vdCA/ICJhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiIgOgogCQkJCSJubyBwYXJlbnQgZm91bmQgZm9yIiwKLQkJCWR0eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCQlkdHlwZSwgcmVzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM5LDkgKzEzNSw4IEBACiAJYWxpZ24gPSByZXNvdXJjZV9hbGlnbm1lbnQocmVzKTsKIAlpZiAoIWFsaWduKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSByZXNvdXJjZSAoYm9ndXMgIgotCQkJImFsaWdubWVudCkgWyUjbGx4LSUjbGx4XSBmbGFncyAlI2x4XG4iLAotCQkJcmVzbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsIHJlcy0+ZmxhZ3MpOworCQkJImFsaWdubWVudCkgJXBSIGZsYWdzICUjbHhcbiIsCisJCQlyZXNubywgcmVzLCByZXMtPmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNjIsMTEgKzE1Nyw4IEBACiAJfQogCiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgIgotCQkJIlslI2xseC0lI2xseF1cbiIsIHJlc25vLAotCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAlcFJcbiIsCisJCQlyZXNubywgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLCByZXMpOwogCX0gZWxzZSB7CiAJCXJlcy0+ZmxhZ3MgJj0gfklPUkVTT1VSQ0VfU1RBUlRBTElHTjsKIAkJaWYgKHJlc25vIDwgUENJX0JSSURHRV9SRVNPVVJDRVMpCkBAIC0yMDIsMTEgKzE5NCw4IEBACiAJfQogCiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgIgotCQkJIlslI2xseC0lI2xseFxuXSIsIHJlc25vLAotCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAlcFJcbiIsCisJCQlyZXNubywgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLCByZXMpOwogCX0gZWxzZSBpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgewogCQlwY2lfdXBkYXRlX3Jlc291cmNlKGRldiwgcmVzLCByZXNubyk7CiAJfQpAQCAtMjM3LDkgKzIyNiw4IEBACiAJCXJfYWxpZ24gPSByZXNvdXJjZV9hbGlnbm1lbnQocik7CiAJCWlmICghcl9hbGlnbikgewogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkOiBib2d1cyBhbGlnbm1lbnQgIgotCQkJCSJbJSNsbHgtJSNsbHhdIGZsYWdzICUjbHhcbiIsCi0JCQkJaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwgci0+ZmxhZ3MpOworCQkJCSIlcFIgZmxhZ3MgJSNseFxuIiwKKwkJCQlpLCByLCByLT5mbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQlmb3IgKGxpc3QgPSBoZWFkOyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CkBAIC0yODcsOSArMjc1LDcgQEAKIAogCQlpZiAoIXItPnBhcmVudCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2Ugbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mICIKLQkJCQkiQkFSICVkIFslI2xseC0lI2xseF0gY29sbGlzaW9uc1xuIiwgaSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSByLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSByLT5lbmQpOworCQkJCSJCQVIgJWQgJXBSIGNvbGxpc2lvbnNcbiIsIGksIHIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCA3NGQxYzkwLi5iNDZjNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtNjQsMTAgKzY0LDExIEBACiBzYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX1NJTVBBRCkJCSs9IHNhMTEwMF9zaW1wYWQubwogCiBweGEyeHhfbHViYm9ja19jcy15CQkJCSs9IHB4YTJ4eF9sdWJib2NrLm8gc2ExMTExX2dlbmVyaWMubworcHhhMnh4X2NtX3gyeHhfY3MteQkJCQkrPSBweGEyeHhfY21feDJ4eC5vIHB4YTJ4eF9jbV94MjU1Lm8gcHhhMnh4X2NtX3gyNzAubwogcHhhMnh4LW9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spCQkrPSBweGEyeHhfbHViYm9ja19jcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkJKz0gcHhhMnh4X21haW5zdG9uZS5vCiBweGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKQkJKz0gcHhhMnh4X3NoYXJwc2wubwotcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0FSTUNPUkUpCQkrPSBweGEyeHhfY21feDJ4eC5vIHB4YTJ4eF9jbV94MjU1Lm8gcHhhMnh4X2NtX3gyNzAubworcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0FSTUNPUkUpCQkrPSBweGEyeHhfY21feDJ4eF9jcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX0FSQ0hfVklQRVIpCQkJKz0gcHhhMnh4X3ZpcGVyLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfVFJJWkVQU19QQ01DSUEpCQkrPSBweGEyeHhfdHJpemVwcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9iYXNlLmggYi9kcml2ZXJzL3BucC9iYXNlLmgKaW5kZXggOWZkN2JiOS4uM2I4YjlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvYmFzZS5oCisrKyBiL2RyaXZlcnMvcG5wL2Jhc2UuaApAQCAtNCw2ICs0LDcgQEAKICAqLwogCiBleHRlcm4gc3BpbmxvY2tfdCBwbnBfbG9jazsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbnBfaW50ZXJmYWNlX2F0dHJzW107CiB2b2lkICpwbnBfYWxsb2MobG9uZyBzaXplKTsKIAogaW50IHBucF9yZWdpc3Rlcl9wcm90b2NvbChzdHJ1Y3QgcG5wX3Byb3RvY29sICpwcm90b2NvbCk7CkBAIC0xNiw3ICsxNyw2IEBACiAKIGludCBwbnBfYWRkX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKIHN0cnVjdCBwbnBfaWQgKnBucF9hZGRfaWQoc3RydWN0IHBucF9kZXYgKmRldiwgY2hhciAqaWQpOwotaW50IHBucF9pbnRlcmZhY2VfYXR0YWNoX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKIAogaW50IHBucF9hZGRfY2FyZChzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQpOwogdm9pZCBwbnBfcmVtb3ZlX2NhcmQoc3RydWN0IHBucF9jYXJkICpjYXJkKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogdm9pZCBkYmdfcG5wX3Nob3dfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNoYXIgKmRlc2MpOwogCiB2b2lkIHBucF9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKLWludCBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Cit1bnNpZ25lZCBsb25nIHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIAogc3RydWN0IHBucF9yZXNvdXJjZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvY29yZS5jIGIvZHJpdmVycy9wbnAvY29yZS5jCmluZGV4IGE0MTE1ODIuLjgxN2ZlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9jb3JlLmMKQEAgLTE1OSwyMSArMTU5LDEzIEBACiAKIGludCBfX3BucF9hZGRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JaW50IHJldDsKLQogCXBucF9maXh1cF9kZXZpY2UoZGV2KTsKIAlkZXYtPnN0YXR1cyA9IFBOUF9SRUFEWTsKIAlzcGluX2xvY2soJnBucF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmdsb2JhbF9saXN0LCAmcG5wX2dsb2JhbCk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5wcm90b2NvbF9saXN0LCAmZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyk7CiAJc3Bpbl91bmxvY2soJnBucF9sb2NrKTsKLQotCXJldCA9IGRldmljZV9yZWdpc3RlcigmZGV2LT5kZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlwbnBfaW50ZXJmYWNlX2F0dGFjaF9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CiB9CiAKIC8qCkBAIC0yMTgsNyArMjEwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcG5wX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJMaW51eCBQbHVnIGFuZCBQbGF5IFN1cHBvcnQgdjAuOTcgKGMpIEFkYW0gQmVsYXlcbiIpOwogCXJldHVybiBidXNfcmVnaXN0ZXIoJnBucF9idXNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2RyaXZlci5jIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKaW5kZXggZDNmODY5ZS4uZTNmN2U4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogCS5yZW1vdmUgID0gcG5wX2RldmljZV9yZW1vdmUsCiAJLnN1c3BlbmQgPSBwbnBfYnVzX3N1c3BlbmQsCiAJLnJlc3VtZSAgPSBwbnBfYnVzX3Jlc3VtZSwKKwkuZGV2X2F0dHJzID0gcG5wX2ludGVyZmFjZV9hdHRycywKIH07CiAKIGludCBwbnBfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwbnBfZHJpdmVyICpkcnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCmluZGV4IGE4NzZlY2YuLjQ3OGE0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCkBAIC0yNDMsOCArMjQzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIob3B0aW9ucywgU19JUlVHTywgcG5wX3Nob3dfb3B0aW9ucywgTlVMTCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzKHN0cnVjdCBkZXZpY2UgKmRtZGV2LAogCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgIGNoYXIgKmJ1ZikKQEAgLTQyMCw5ICs0MTgsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlc291cmNlcywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzLCBwbnBfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKTsKLQogc3RhdGljIHNzaXplX3QgcG5wX3Nob3dfY3VycmVudF9pZHMoc3RydWN0IGRldmljZSAqZG1kZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC00MzcsMjcgKzQzMiwxMSBAQAogCXJldHVybiAoc3RyIC0gYnVmKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGlkLCBTX0lSVUdPLCBwbnBfc2hvd19jdXJyZW50X2lkcywgTlVMTCk7Ci0KLWludCBwbnBfaW50ZXJmYWNlX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldikKLXsKLQlpbnQgcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfb3B0aW9ucyk7Ci0KLQlpZiAocmMpCi0JCWdvdG8gZXJyOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3Jlc291cmNlcyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9vcHQ7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaWQpOwotCWlmIChyYykKLQkJZ290byBlcnJfcmVzOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9yZXM6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3Jlc291cmNlcyk7Ci1lcnJfb3B0OgotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9vcHRpb25zKTsKLWVycjoKLQlyZXR1cm4gcmM7Ci19CitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbnBfaW50ZXJmYWNlX2F0dHJzW10gPSB7CisJX19BVFRSKHJlc291cmNlcywgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzLAorCQkgICBwbnBfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKSwKKwlfX0FUVFIob3B0aW9ucywgU19JUlVHTywgcG5wX3Nob3dfb3B0aW9ucywgTlVMTCksCisJX19BVFRSKGlkLCBTX0lSVUdPLCBwbnBfc2hvd19jdXJyZW50X2lkcywgTlVMTCksCisJX19BVFRSX05VTEwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKaW5kZXggMTAxYTgzNS4uNDY0NTVmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXNhcG5wOiBJU0EgUGx1ZyAmIFBsYXkgc3VwcG9ydCBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisjaWZkZWYgQ09ORklHX1BQQwogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KF9QSURYUikgfHwgY2hlY2tfbGVnYWN5X2lvcG9ydChfUE5QV1JQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKaW5kZXggNjYyZGZjZGQuLjJiZmUxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC01MTksNyArNTE5LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpAQCAtNTc3LDcgKzU3Nyw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcXVpcmtzLmMgYi9kcml2ZXJzL3BucC9xdWlya3MuYwppbmRleCAwYmRmOWI4Li5jMTQ0YmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9xdWlya3MuYworKysgYi9kcml2ZXJzL3BucC9xdWlya3MuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQkJdW5zaWduZWQgaW50IHR5cGU7CisJCQl1bnNpZ25lZCBsb25nIHR5cGU7CiAKIAkJCXR5cGUgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJgogCQkJCQkoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNKTsKQEAgLTMzOCw4ICszMzgsNyBAQAogCQlpZiAoIWNvbXBhcmVfcG5wX2lkKGRldi0+aWQsIGYtPmlkKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIERFQlVHCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IGNhbGxpbmcgIiwgZi0+aWQpOwotCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiJXNcbiIsIGYtPnF1aXJrX2Z1bmN0aW9uKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogY2FsbGluZyAlcEZcbiIsIGYtPmlkLCBmLT5xdWlya19mdW5jdGlvbik7CiAjZW5kaWYKIAkJZi0+cXVpcmtfZnVuY3Rpb24oZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jIGIvZHJpdmVycy9wbnAvcmVzb3VyY2UuYwppbmRleCA0Y2ZlM2ExLi5kYmFlMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKQEAgLTQ2NywxNCArNDY3LDE0IEBACiAjZW5kaWYKIH0KIAotaW50IHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQordW5zaWduZWQgbG9uZyBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlyZXR1cm4gcmVzLT5mbGFncyAmIChJT1JFU09VUkNFX0lPICB8IElPUkVTT1VSQ0VfTUVNIHwKIAkJCSAgICAgSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0RNQSk7CiB9CiAKIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBudW0pCisJCQkJICB1bnNpZ25lZCBsb25nIHR5cGUsIHVuc2lnbmVkIGludCBudW0pCiB7CiAJc3RydWN0IHBucF9yZXNvdXJjZSAqcG5wX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA2M2JiNTc5Li44ZTBjMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBCQVRURVJZX1RPU0EKIAl0cmlzdGF0ZSAiU2hhcnAgU0wtNjAwMCAodG9zYSkgYmF0dGVyeSIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIKKwlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIgJiYgVE9VQ0hTQ1JFRU5fV005N1hYCiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IG9uIHRoZSBTaGFycCBaYXVydXMKIAkgIFNMLTYwMDAgKHRvc2EpIG1vZGVscy4KQEAgLTYyLDQgKzYyLDEwIEBACiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcnkgbWVhc3VyZWQgYnkgV005N3h4IGF1eCBwb3J0LgogCitjb25maWcgQkFUVEVSWV9CUTI3eDAwCisJdHJpc3RhdGUgIkJRMjcyMDAgYmF0dGVyeSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgd2l0aCBCUTI3MjAwKEkyQykgY2hpcC4KKwogZW5kaWYgIyBQT1dFUl9TVVBQTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCmluZGV4IDRlMjAwMjYuLmU4ZjFlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQpAQCAtMjEsNCArMjEsNSBAQAogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfVE9TQSkJKz0gdG9zYV9iYXR0ZXJ5Lm8KLW9iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfQlEyN3gwMCkJKz0gYnEyN3gwMF9iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQlEyN3gwMCBiYXR0ZXJ5IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFdXJvdGVjaCBTLnAuQS4gPGluZm9AZXVyb3RlY2guaXQ+CisgKgorICogQmFzZWQgb24gYSBwcmV2aW91cyB3b3JrIGJ5IENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjAuMCIKKworI2RlZmluZSBCUTI3eDAwX1JFR19URU1QCQkweDA2CisjZGVmaW5lIEJRMjd4MDBfUkVHX1ZPTFQJCTB4MDgKKyNkZWZpbmUgQlEyN3gwMF9SRUdfUlNPQwkJMHgwQiAvKiBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UgKi8KKyNkZWZpbmUgQlEyN3gwMF9SRUdfQUkJCQkweDE0CisjZGVmaW5lIEJRMjd4MDBfUkVHX0ZMQUdTCQkweDBBCisKKy8qIElmIHRoZSBzeXN0ZW0gaGFzIHNldmVyYWwgYmF0dGVyaWVzIHdlIG5lZWQgYSBkaWZmZXJlbnQgbmFtZSBmb3IgZWFjaAorICogb2YgdGhlbS4uLgorICovCitzdGF0aWMgREVGSU5FX0lEUihiYXR0ZXJ5X2lkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmF0dGVyeV9tdXRleCk7CisKK3N0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvOworc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMgeworCWludCAoKnJlYWQpKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpOworfTsKKworc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8geworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCWludAkJCWlkOworCWludAkJCXZvbHRhZ2VfdVY7CisJaW50CQkJY3VycmVudF91QTsKKwlpbnQJCQl0ZW1wX0M7CisJaW50CQkJY2hhcmdlX3Jzb2M7CisJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMJKmJ1czsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdDsKKworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7Cit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorfTsKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBCUTI3eDAwIGRldmljZXMKKyAqLworCitzdGF0aWMgaW50IGJxMjd4MDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKKwkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGktPmJ1cy0+cmVhZChyZWcsIHJ0X3ZhbHVlLCBiX3NpbmdsZSwgZGkpOworCSpydF92YWx1ZSA9IGJlMTZfdG9fY3B1KCpydF92YWx1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbGNpdXMgZGVncmVlcworICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHRlbXAgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1RFTVAsICZ0ZW1wLCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHRlbXBlcmF0dXJlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHRlbXAgPj4gMikgLSAyNzM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgVm9sdGFnZSBpbiBtaWxpdm9sdHMKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2Uoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHZvbHQgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1ZPTFQsICZ2b2x0LCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2b2x0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IGF2ZXJhZ2UgY3VycmVudAorICogTm90ZSB0aGF0IGN1cnJlbnQgY2FuIGJlIG5lZ2F0aXZlIHNpZ25lZCBhcyB3ZWxsCisgKiBPciAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfY3VycmVudChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgY3VyciA9IDA7CisJaW50IGZsYWdzID0gMDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19BSSwgJmN1cnIsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3VycmVudFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgZmxhZ3NcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChmbGFncyAmICgxIDw8IDcpKSAhPSAwKSB7CisJCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQhXG4iKTsKKwkJcmV0dXJuIC1jdXJyOworCX0KKwlyZXR1cm4gY3VycjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYmF0dGVyeSBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3Jzb2Moc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHJzb2MgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1JTT0MsICZyc29jLCAxLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJzb2MgPj4gODsKK30KKworI2RlZmluZSB0b19icTI3eDAwX2RldmljZV9pbmZvKHgpIGNvbnRhaW5lcl9vZigoeCksIFwKKwkJCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbywgYmF0KTsKKworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IHRvX2JxMjd4MDBfZGV2aWNlX2luZm8ocHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2UoZGkpOworCQlpZiAocHNwID09IFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQpCisJCQl2YWwtPmludHZhbCA9IHZhbC0+aW50dmFsIDw9IDAgPyAwIDogMTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfY3VycmVudChkaSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3Jzb2MoZGkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKGRpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJZGktPmJhdC50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwlkaS0+YmF0LnByb3BlcnRpZXMgPSBicTI3eDAwX2JhdHRlcnlfcHJvcHM7CisJZGktPmJhdC5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzKTsKKwlkaS0+YmF0LmdldF9wcm9wZXJ0eSA9IGJxMjd4MDBfYmF0dGVyeV9nZXRfcHJvcGVydHk7CisJZGktPmJhdC5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gTlVMTDsKK30KKworLyoKKyAqIEJRMjcyMDAgc3BlY2lmaWMgY29kZQorICovCisKK3N0YXRpYyBpbnQgYnEyNzIwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkaS0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMl07CisJaW50IGVycjsKKworCWlmICghY2xpZW50LT5hZGFwdGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zZy0+YWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5idWYgPSBkYXRhOworCisJZGF0YVswXSA9IHJlZzsKKwllcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCisJaWYgKGVyciA+PSAwKSB7CisJCWlmICghYl9zaW5nbGUpCisJCQltc2ctPmxlbiA9IDI7CisJCWVsc2UKKwkJCW1zZy0+bGVuID0gMTsKKworCQltc2ctPmZsYWdzID0gSTJDX01fUkQ7CisJCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJCWlmIChlcnIgPj0gMCkgeworCQkJaWYgKCFiX3NpbmdsZSkKKwkJCQkqcnRfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7CisJCQllbHNlCisJCQkJKnJ0X3ZhbHVlID0gZGF0YVswXTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNoYXIgKm5hbWU7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpOworCXN0cnVjdCBicTI3eDAwX2FjY2Vzc19tZXRob2RzICpidXM7CisJaW50IG51bTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgYmF0dGVyeSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBpZHJfcHJlX2dldCgmYmF0dGVyeV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlyZXR2YWwgPSBpZHJfZ2V0X25ldygmYmF0dGVyeV9pZCwgY2xpZW50LCAmbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnEyNzIwMC0lZCIsIG51bSk7CisJaWYgKCFuYW1lKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBuYW1lXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8xOworCX0KKworCWRpID0ga3phbGxvYyhzaXplb2YoKmRpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgaW5mbyBkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8yOworCX0KKwlkaS0+aWQgPSBudW07CisKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgYWNjZXNzIG1ldGhvZCAiCisJCQkJCSJkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8zOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRpKTsKKwlkaS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRpLT5iYXQubmFtZSA9IG5hbWU7CisJYnVzLT5yZWFkID0gJmJxMjcyMDBfcmVhZDsKKwlkaS0+YnVzID0gYnVzOworCWRpLT5jbGllbnQgPSBjbGllbnQ7CisKKwlicTI3eDAwX3Bvd2Vyc3VwcGx5X2luaXQoZGkpOworCisJcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgJmRpLT5iYXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeVxuIik7CisJCWdvdG8gYmF0dF9mYWlsZWRfNDsKKwl9CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJzdXBwb3J0IHZlci4gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CisKK2JhdHRfZmFpbGVkXzQ6CisJa2ZyZWUoYnVzKTsKK2JhdHRfZmFpbGVkXzM6CisJa2ZyZWUoZGkpOworYmF0dF9mYWlsZWRfMjoKKwlrZnJlZShuYW1lKTsKK2JhdHRfZmFpbGVkXzE6CisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CisKKwlrZnJlZShkaS0+YmF0Lm5hbWUpOworCisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgZGktPmlkKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJa2ZyZWUoZGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGUgc3R1ZmYKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnEyNzIwMF9pZFtdID0geworCXsgImJxMjcyMDAiLCAwIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJicTI3MjAwLWJhdHRlcnkiLAorCX0sCisJLnByb2JlID0gYnEyNzIwMF9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJxMjcyMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicTI3eDAwX2JhdHRlcnlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQlEyNzIwMCBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGJxMjd4MDBfYmF0dGVyeV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJxMjd4MDBfYmF0dGVyeV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYnEyN3gwMF9iYXR0ZXJ5X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQlEyN3gwMCBiYXR0ZXJ5IG1vbml0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYwppbmRleCAzMjU3MGFmLi41ZmJjYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMKQEAgLTIwNSw5ICsyMDUsOSBAQAogCQkJCSB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQogewogCWludCByZXQgPSAwOwotCWludDE2X3QgZWNfd29yZDsKKwlfX2JlMTYgZWNfd29yZDsKIAl1aW50OF90IGVjX2J5dGU7Ci0JdWludDY0X3Qgc2VyX2J1ZjsKKwlfX2JlNjQgc2VyX2J1ZjsKIAogCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9TVEFUVVMsIE5VTEwsIDAsICZlY19ieXRlLCAxKTsKIAlpZiAocmV0KQpAQCAtMjU3LDE2ICsyNTcsMTQgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiA5NzYwTCAvIDMyOworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiA5NzYwTCAvIDMyOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgogCQlyZXQgPSBvbHBjX2VjX2NtZChFQ19CQVRfQ1VSUkVOVCwgTlVMTCwgMCwgKHZvaWQgKikmZWNfd29yZCwgMik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogMTU2MjVMIC8gMTIwOworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiAxNTYyNUwgLyAxMjA7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9TT0MsIE5VTEwsIDAsICZlY19ieXRlLCAxKTsKQEAgLTI3OCwyNCArMjc2LDIyIEBACiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9URU1QLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogMTAwIC8gMjU2OworCisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDEwMCAvIDI1NjsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QX0FNQklFTlQ6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0FNQl9URU1QLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiAxMDAgLyAyNTY7CisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDEwMCAvIDI1NjsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfQ09VTlRFUjoKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX0FDUiwgTlVMTCwgMCwgKHZvaWQgKikmZWNfd29yZCwgMik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogNjI1MCAvIDE1OworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiA2MjUwIC8gMTU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU0VSSUFMX05VTUJFUjoKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX1NFUklBTCwgTlVMTCwgMCwgKHZvaWQgKikmc2VyX2J1ZiwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9wZGFfcG93ZXIuYwppbmRleCAwNDcxZWM3Li5kMzBiYjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMKQEAgLTMzNCwxMyArMzM0LDE2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWNfd2FrZXVwX2VuYWJsZWQ7CitzdGF0aWMgaW50IHVzYl93YWtldXBfZW5hYmxlZDsKKwogc3RhdGljIGludCBwZGFfcG93ZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CiAJCWlmIChhY19pcnEpCi0JCQllbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CisJCQlhY193YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CiAJCWlmICh1c2JfaXJxKQotCQkJZW5hYmxlX2lycV93YWtlKHVzYl9pcnEtPnN0YXJ0KTsKKwkJCXVzYl93YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzQ5LDkgKzM1Miw5IEBACiBzdGF0aWMgaW50IHBkYV9wb3dlcl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKLQkJaWYgKHVzYl9pcnEpCisJCWlmICh1c2JfaXJxICYmIHVzYl93YWtldXBfZW5hYmxlZCkKIAkJCWRpc2FibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwotCQlpZiAoYWNfaXJxKQorCQlpZiAoYWNfaXJxICYmIGFjX3dha2V1cF9lbmFibGVkKQogCQkJZGlzYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCBjYjFjY2I0Li41NTIwMDQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwpAQCAtODcsMTIgKzg3LDM2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IF9fcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgcmV0ID0gezAsfTsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChwc3ktPnR5cGUgIT0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWSkgeworCQlpZiAocHN5LT5nZXRfcHJvcGVydHkocHN5LCBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsICZyZXQpKQorCQkJcmV0dXJuIDA7CisJCWlmIChyZXQuaW50dmFsKQorCQkJcmV0dXJuIHJldC5pbnR2YWw7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKHBvd2VyX3N1cHBseV9jbGFzcywgTlVMTCwgTlVMTCwKKwkJCQkgICAgICBfX3Bvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQpOworCisJcmV0dXJuIGVycm9yOworfQorCiBpbnQgcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KQogewogCWludCByYyA9IDA7CiAKLQlwc3ktPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShwb3dlcl9zdXBwbHlfY2xhc3MsIHBhcmVudCwgMCwKLQkJCQkJIHBzeSwgIiVzIiwgcHN5LT5uYW1lKTsKKwlwc3ktPmRldiA9IGRldmljZV9jcmVhdGUocG93ZXJfc3VwcGx5X2NsYXNzLCBwYXJlbnQsIDAsIHBzeSwKKwkJCQkgIiVzIiwgcHN5LT5uYW1lKTsKIAlpZiAoSVNfRVJSKHBzeS0+ZGV2KSkgewogCQlyYyA9IFBUUl9FUlIocHN5LT5kZXYpOwogCQlnb3RvIGRldl9jcmVhdGVfZmFpbGVkOwpAQCAtMTQ4LDYgKzE3Miw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9jaGFuZ2VkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9hbV9pX3N1cHBsaWVkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKaW5kZXggZmUyYWViMS4uMjNhZTg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCkBAIC0zMCw3ICszMCw3IEBACiAKICNkZWZpbmUgUE9XRVJfU1VQUExZX0FUVFIoX25hbWUpCQkJCQlcCiB7CQkJCQkJCQkJXAotCS5hdHRyID0geyAubmFtZSA9ICNfbmFtZSwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LAlcCisJLmF0dHIgPSB7IC5uYW1lID0gI19uYW1lLCAubW9kZSA9IDA0NDQgfSwJXAogCS5zaG93ID0gcG93ZXJfc3VwcGx5X3Nob3dfcHJvcGVydHksCQkJCVwKIAkuc3RvcmUgPSBOVUxMLAkJCQkJCQlcCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCA2ZjJmOTBlLi4wNjg0OGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTkxNSw2ICs5MTUsMjIgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwocHMzYXZfdmlkZW9fbXV0ZSk7CiAKKy8qIG11dGUgYW5hbG9nIG91dHB1dCBvbmx5ICovCitpbnQgcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coaW50IG11dGUpCit7CisJaW50IGksIHJlczsKKworCWZvciAoaSA9IDA7IGkgPCBwczNhdi0+YXZfaHdfY29uZi5udW1fb2ZfYXZtdWx0aTsgaSsrKSB7CisJCXJlcyA9IHBzM2F2X2NtZF9hdl9hdWRpb19tdXRlKDEsCisJCQkmcHMzYXYtPmF2X3BvcnRbaSArIHBzM2F2LT5hdl9od19jb25mLm51bV9vZl9oZG1pXSwKKwkJCW11dGUpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwczNhdl9hdWRpb19tdXRlX2FuYWxvZyk7CisKIGludCBwczNhdl9hdWRpb19tdXRlKGludCBtdXRlKQogewogCXJldHVybiBwczNhdl9zZXRfYXVkaW9fbXV0ZShtdXRlID8gUFMzQVZfQ01EX01VVEVfT04KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2X2NtZC5jIGIvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKaW5kZXggN2Y4ODBjMi4uMTFlYjUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXZfY21kLmMKQEAgLTY2MCw5ICs2NjAsMTAgQEAKIH0KIAogLyogZGVmYXVsdCBjcyB2YWwgKi8KLXN0YXRpYyBjb25zdCB1OCBwczNhdl9tb2RlX2NzX2luZm9bXSA9IHsKK3U4IHBzM2F2X21vZGVfY3NfaW5mb1tdID0gewogCTB4MDAsIDB4MDksIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAKIH07CitFWFBPUlRfU1lNQk9MX0dQTChwczNhdl9tb2RlX2NzX2luZm8pOwogCiAjZGVmaW5lIENTXzQ0CTB4MDAKICNkZWZpbmUgQ1NfNDgJMHgwMgpAQCAtNjc3LDcgKzY3OCw3IEBACiAJCQkgICAgICB1MzIgY2gsIHUzMiBmcywgdTMyIHdvcmRfYml0cywgdTMyIGZvcm1hdCwKIAkJCSAgICAgIHUzMiBzb3VyY2UpCiB7Ci0JaW50IHNwZGlmX3Rocm91Z2gsIHNwZGlmX2JpdHN0cmVhbTsKKwlpbnQgc3BkaWZfdGhyb3VnaDsKIAlpbnQgaTsKIAogCWlmICghKGNoIHwgZnMgfCBmb3JtYXQgfCB3b3JkX2JpdHMgfCBzb3VyY2UpKSB7CkBAIC02ODcsNyArNjg4LDYgQEAKIAkJZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9QQ007CiAJCXNvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU0VSSUFMOwogCX0KLQlzcGRpZl90aHJvdWdoID0gc3BkaWZfYml0c3RyZWFtID0gMDsJLyogWFhYIG5vdCBzdXBwb3J0ZWQgKi8KIAogCS8qIGF1ZGlvIG1vZGUgKi8KIAltZW1zZXQoYXVkaW8sIDAsIHNpemVvZigqYXVkaW8pKTsKQEAgLTc3NywxNiArNzc3LDE3IEBACiAJCWJyZWFrOwogCX0KIAorCS8qIG5vbi1hdWRpbyBiaXQgKi8KKwlzcGRpZl90aHJvdWdoID0gYXVkaW8tPmF1ZGlvX2NzX2luZm9bMF0gJiAweDAyOworCiAJLyogcGFzcyB0aHJvdWdoIHNldHRpbmcgKi8KIAlpZiAoc3BkaWZfdGhyb3VnaCAmJgogCSAgICAoYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMCB8fAotCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMSkpIHsKKwkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX1NQRElGXzEgfHwKKwkgICAgIGF2cG9ydCA9PSBQUzNBVl9DTURfQVZQT1JUX0hETUlfMCB8fAorCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfSERNSV8xKSkgewogCQlhdWRpby0+YXVkaW9fd29yZF9iaXRzID0gUFMzQVZfQ01EX0FVRElPX1dPUkRfQklUU18xNjsKLQkJYXVkaW8tPmF1ZGlvX3NvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU1BESUY7Ci0JCWlmIChzcGRpZl9iaXRzdHJlYW0pIHsKLQkJCWF1ZGlvLT5hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX0JJVFNUUkVBTTsKLQkJCWF1ZGlvLT5hdWRpb19jc19pbmZvWzBdIHw9IENTX0JJVDsKLQkJfQorCQlhdWRpby0+YXVkaW9fZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9CSVRTVFJFQU07CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCBiNTdmYmE1Li5mNjYwZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTIyMCwyMiArMjIwLDIyIEBACiAJICB3aWxsIGJlIGNhbGxlZCBydGMtcGNmODU4My4KIAogY29uZmlnIFJUQ19EUlZfTTQxVDgwCi0JdHJpc3RhdGUgIlNUIE00MVQ4MC84MS84Mi84My84NC84NS84NyIKKwl0cmlzdGF0ZSAiU1QgTTQxVDY1L000MVQ4MC84MS84Mi84My84NC84NS84NyIKIAloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCi0JICBTVCBNNDFUODAgUlRDIGNoaXBzIHNlcmllcy4gQ3VycmVudGx5IGZvbGxvd2luZyBjaGlwcyBhcmUKLQkgIHN1cHBvcnRlZDogTTQxVDgwLCBNNDFUODEsIE00MVQ4MiwgTTQxVDgzLCBNNDFTVDg0LCBNNDFTVDg1Ci0JICBhbmQgTTQxU1Q4Ny4KKwkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgU1QgTTQxVDYwCisJICBhbmQgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBjaGlwcyBhcmUKKwkgIHN1cHBvcnRlZDogTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCisJICBNNDFTVDg1LCBhbmQgTTQxU1Q4Ny4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBydGMtbTQxdDgwLgogCiBjb25maWcgUlRDX0RSVl9NNDFUODBfV0RUCi0JYm9vbCAiU1QgTTQxVDgwIHNlcmllcyBSVEMgd2F0Y2hkb2cgdGltZXIiCisJYm9vbCAiU1QgTTQxVDY1L000MVQ4MCBzZXJpZXMgUlRDIHdhdGNoZG9nIHRpbWVyIgogCWRlcGVuZHMgb24gUlRDX0RSVl9NNDFUODAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCi0JICB3YXRjaGRvZyB0aW1lciBpbiBTVCBNNDFUODAgUlRDIGNoaXBzIHNlcmllcy4KKwkgIHdhdGNoZG9nIHRpbWVyIGluIHRoZSBTVCBNNDFUNjAgYW5kIE00MVQ4MCBSVEMgY2hpcHMgc2VyaWVzLgogCiBjb25maWcgUlRDX0RSVl9UV0w5MjMzMAogCWJvb2xlYW4gIlRJIFRXTDkyMzMwL01lbmVsYXVzIgpAQCAtMzE5LDYgKzMxOSwxNSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBydGMtcnM1YzM0OC4KIAorY29uZmlnIFJUQ19EUlZfRFMzMjM0CisJdHJpc3RhdGUgIk1heGltL0RhbGxhcyBEUzMyMzQiCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgTWF4aW0vRGFsbGFzIERTMzIzNCBTUEkgUlRDIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWRzMzIzNC4KKwogZW5kaWYgIyBTUElfTUFTVEVSCiAKIGNvbW1lbnQgIlBsYXRmb3JtIFJUQyBkcml2ZXJzIgpAQCAtMzUyLDYgKzM2MSwxMSBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgRGFsbGFzIERTMTIxNiBSVEMgY2hpcHMuCiAKK2NvbmZpZyBSVENfRFJWX0RTMTI4NgorCXRyaXN0YXRlICJEYWxsYXMgRFMxMjg2IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgRGFsbGFzIERTMTI4NiBSVEMgY2hpcHMuCisKIGNvbmZpZyBSVENfRFJWX0RTMTMwMgogCXRyaXN0YXRlICJEYWxsYXMgRFMxMzAyIgogCWRlcGVuZHMgb24gU0hfU0VDVVJFRURHRTU0MTAKQEAgLTQwNSw2ICs0MTksMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW00OHQ4Ni4KIAorY29uZmlnIFJUQ19EUlZfTTQ4VDM1CisJdHJpc3RhdGUgIlNUIE00OFQzNSIKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBTVCBNNDhUMzUgUlRDIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLCBpZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgInJ0Yy1tNDh0MzUiLgorCiBjb25maWcgUlRDX0RSVl9NNDhUNTkKIAl0cmlzdGF0ZSAiU1QgTTQ4VDU5L000OFQwOC9NNDhUMDIiCiAJaGVscApAQCAtNTg5LDcgKzYxMiw3IEBACiAKIGNvbmZpZyBSVENfRFJWX1BQQwogICAgICAgIHRyaXN0YXRlICJQb3dlclBDIG1hY2hpbmUgZGVwZW5kZW50IFJUQyBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gUFBDX01FUkdFCisgICAgICAgZGVwZW5kcyBvbiBQUEMKICAgICAgICBoZWxwCiAJIFRoZSBQb3dlclBDIGtlcm5lbCBoYXMgbWFjaGluZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZwogCSB0aGUgUlRDLiBUaGlzIGV4cG9zZXMgdGhhdCBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIGdlbmVyaWMgUlRDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDEwZjQxZjguLmQwNTkyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9CRklOKQkrPSBydGMtYmZpbi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9DTU9TKQkrPSBydGMtY21vcy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEyMTYpCSs9IHJ0Yy1kczEyMTYubworb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjg2KQkrPSBydGMtZHMxMjg2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTMwMikJKz0gcnRjLWRzMTMwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEzMDUpCSs9IHJ0Yy1kczEzMDUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMzA3KQkrPSBydGMtZHMxMzA3Lm8KQEAgLTMxLDExICszMiwxMyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNTUzKQkrPSBydGMtZHMxNTUzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTY3MikJKz0gcnRjLWRzMTY3Mi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzE3NDIpCSs9IHJ0Yy1kczE3NDIubworb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMzMjM0KQkrPSBydGMtZHMzMjM0Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfSVNMMTIwOCkJKz0gcnRjLWlzbDEyMDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQxVDgwKQkrPSBydGMtbTQxdDgwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX000MVQ5NCkJKz0gcnRjLW00MXQ5NC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUMzUpCSs9IHJ0Yy1tNDh0MzUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDU5KQkrPSBydGMtbTQ4dDU5Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQ4NikJKz0gcnRjLW00OHQ4Ni5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9CUTQ4MDIpCSs9IHJ0Yy1icTQ4MDIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKaW5kZXggNGU4ODhjYy4uYjViZjkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCiAjaW5jbHVkZSA8bWFjaC9hdDkxX3J0Yy5oPgogCiAKLSNkZWZpbmUgQVQ5MV9SVENfRlJFUQkJMQogI2RlZmluZSBBVDkxX1JUQ19FUE9DSAkJMTkwMFVMCS8qIGp1c3QgbGlrZSBhcmNoL2FybS9jb21tb24vcnRjdGltZS5jICovCiAKIHN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oYXQ5MV9ydGNfdXBkYXRlZCk7CkBAIC01MywyMSArNTMsMjEgQEAKIAl9IHdoaWxlICgodGltZSAhPSBhdDkxX3N5c19yZWFkKHRpbWVyZWcpKSB8fAogCQkJKGRhdGUgIT0gYXQ5MV9zeXNfcmVhZChjYWxyZWcpKSk7CiAKLQl0bS0+dG1fc2VjICA9IEJDRDJCSU4oKHRpbWUgJiBBVDkxX1JUQ19TRUMpID4+IDApOwotCXRtLT50bV9taW4gID0gQkNEMkJJTigodGltZSAmIEFUOTFfUlRDX01JTikgPj4gOCk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKCh0aW1lICYgQVQ5MV9SVENfSE9VUikgPj4gMTYpOworCXRtLT50bV9zZWMgID0gYmNkMmJpbigodGltZSAmIEFUOTFfUlRDX1NFQykgPj4gMCk7CisJdG0tPnRtX21pbiAgPSBiY2QyYmluKCh0aW1lICYgQVQ5MV9SVENfTUlOKSA+PiA4KTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oKHRpbWUgJiBBVDkxX1JUQ19IT1VSKSA+PiAxNik7CiAKIAkvKgogCSAqIFRoZSBDYWxlbmRhciBBbGFybSByZWdpc3RlciBkb2VzIG5vdCBoYXZlIGEgZmllbGQgZm9yCiAJICogdGhlIHllYXIgLSBzbyB0aGVzZSB3aWxsIHJldHVybiBhbiBpbnZhbGlkIHZhbHVlLiAgV2hlbiBhbgogCSAqIGFsYXJtIGlzIHNldCwgYXQ5MV9hbGFybV95ZWFyIHdpbGxlIHN0b3JlIHRoZSBjdXJyZW50IHllYXIuCiAJICovCi0JdG0tPnRtX3llYXIgID0gQkNEMkJJTihkYXRlICYgQVQ5MV9SVENfQ0VOVCkgKiAxMDA7CS8qIGNlbnR1cnkgKi8KLQl0bS0+dG1feWVhciArPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfWUVBUikgPj4gOCk7CS8qIHllYXIgKi8KKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKGRhdGUgJiBBVDkxX1JUQ19DRU5UKSAqIDEwMDsJLyogY2VudHVyeSAqLworCXRtLT50bV95ZWFyICs9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19ZRUFSKSA+PiA4KTsJLyogeWVhciAqLwogCi0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfREFZKSA+PiAyMSkgLSAxOwkvKiBkYXkgb2YgdGhlIHdlZWsgWzAtNl0sIFN1bmRheT0wICovCi0JdG0tPnRtX21vbiAgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfTU9OVEgpID4+IDE2KSAtIDE7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKChkYXRlICYgQVQ5MV9SVENfREFURSkgPj4gMjQpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX0RBWSkgPj4gMjEpIC0gMTsJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLworCXRtLT50bV9tb24gID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX01PTlRIKSA+PiAxNikgLSAxOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX0RBVEUpID4+IDI0KTsKIH0KIAogLyoKQEAgLTEwNiwxNiArMTA2LDE2IEBACiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BQ0tVUEQpOwogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNUiwKLQkJCSAgQklOMkJDRCh0bS0+dG1fc2VjKSA8PCAwCi0JCQl8IEJJTjJCQ0QodG0tPnRtX21pbikgPDwgOAotCQkJfCBCSU4yQkNEKHRtLT50bV9ob3VyKSA8PCAxNik7CisJCQkgIGJpbjJiY2QodG0tPnRtX3NlYykgPDwgMAorCQkJfCBiaW4yYmNkKHRtLT50bV9taW4pIDw8IDgKKwkJCXwgYmluMmJjZCh0bS0+dG1faG91cikgPDwgMTYpOwogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfQ0FMUiwKLQkJCSAgQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCkJLyogY2VudHVyeSAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSA8PCA4CS8qIHllYXIgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgPDwgMTYJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV93ZGF5ICsgMSkgPDwgMjEJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLwotCQkJfCBCSU4yQkNEKHRtLT50bV9tZGF5KSA8PCAyNCk7CisJCQkgIGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApCS8qIGNlbnR1cnkgKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCkgPDwgOAkvKiB5ZWFyICovCisJCQl8IGJpbjJiY2QodG0tPnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1fd2RheSArIDEpIDw8IDIxCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwkJCXwgYmluMmJjZCh0bS0+dG1fbWRheSkgPDwgMjQpOwogCiAJLyogUmVzdGFydCBUaW1lL0NhbGVuZGFyICovCiAJY3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUlRDX0NSKTsKQEAgLTE2MiwxMyArMTYyLDEzIEBACiAKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIEFUOTFfUlRDX0FMQVJNKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19USU1BTFIsCi0JCSAgQklOMkJDRCh0bS50bV9zZWMpIDw8IDAKLQkJfCBCSU4yQkNEKHRtLnRtX21pbikgPDwgOAotCQl8IEJJTjJCQ0QodG0udG1faG91cikgPDwgMTYKKwkJICBiaW4yYmNkKHRtLnRtX3NlYykgPDwgMAorCQl8IGJpbjJiY2QodG0udG1fbWluKSA8PCA4CisJCXwgYmluMmJjZCh0bS50bV9ob3VyKSA8PCAxNgogCQl8IEFUOTFfUlRDX0hPVVJFTiB8IEFUOTFfUlRDX01JTkVOIHwgQVQ5MV9SVENfU0VDRU4pOwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0NBTEFMUiwKLQkJICBCSU4yQkNEKHRtLnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KLQkJfCBCSU4yQkNEKHRtLnRtX21kYXkpIDw8IDI0CisJCSAgYmluMmJjZCh0bS50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCXwgYmluMmJjZCh0bS50bV9tZGF5KSA8PCAyNAogCQl8IEFUOTFfUlRDX0RBVEVFTiB8IEFUOTFfUlRDX01USEVOKTsKIAogCWlmIChhbHJtLT5lbmFibGVkKSB7CkBAIC0yMjgsOCArMjI4LDYgQEAKIAkJCShpbXIgJiBBVDkxX1JUQ19BQ0tVUEQpID8gInllcyIgOiAibm8iKTsKIAlzZXFfcHJpbnRmKHNlcSwgInBlcmlvZGljX0lSUVx0OiAlc1xuIiwKIAkJCShpbXIgJiBBVDkxX1JUQ19TRUNFVikgPyAieWVzIiA6ICJubyIpOwotCXNlcV9wcmludGYoc2VxLCAicGVyaW9kaWNfZnJlcVx0OiAlbGRcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgQVQ5MV9SVENfRlJFUSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYwppbmRleCAxODlhMDE4Li5kMDBhMjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCkBAIC03MSwxNCArNzEsMTQgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKIAotCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOwotCUJDRF9UT19CSU4odG0tPnRtX3llYXIpOwotCUJDRF9UT19CSU4odG0tPnRtX3dkYXkpOwotCUJDRF9UT19CSU4oY2VudHVyeSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih0bS0+dG1feWVhcik7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHRtLT50bV93ZGF5KTsKKwljZW50dXJ5ID0gYmNkMmJpbihjZW50dXJ5KTsKIAogCXRtLT50bV95ZWFyICs9IChjZW50dXJ5ICogMTAwKTsKIAl0bS0+dG1feWVhciAtPSAxOTAwOwpAQCAtMTA2LDEzICsxMDYsMTMgQEAKIAltaW4gPSB0bS0+dG1fbWluOwogCXNlYyA9IHRtLT50bV9zZWM7CiAKLQlCSU5fVE9fQkNEKHNlYyk7Ci0JQklOX1RPX0JDRChtaW4pOwotCUJJTl9UT19CQ0QoaHJzKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRChtb24pOwotCUJJTl9UT19CQ0QoeXJzKTsKLQlCSU5fVE9fQkNEKGNlbnR1cnkpOworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJeXJzID0gYmluMmJjZCh5cnMpOworCWNlbnR1cnkgPSBiaW4yYmNkKGNlbnR1cnkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNtb3MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKaW5kZXggOTYzYWQwYi4uNTU0OTIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWNtb3MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCkBAIC0xNDMsNiArMTQzLDQzIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZmRlZiBSVENfUE9SVAorCisvKiBNb3N0IG5ld2VyIHg4NiBzeXN0ZW1zIGhhdmUgdHdvIHJlZ2lzdGVyIGJhbmtzLCB0aGUgZmlyc3QgdXNlZAorICogZm9yIFJUQyBhbmQgTlZSQU0gYW5kIHRoZSBzZWNvbmQgb25seSBmb3IgTlZSQU0uICBDYWxsZXIgbXVzdAorICogb3duIHJ0Y19sb2NrIC4uLiBhbmQgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgYWNjZXNzIGR1cmluZyBOTUkuCisgKi8KKyNkZWZpbmUgY2FuX2JhbmsyCXRydWUKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNtb3NfcmVhZF9iYW5rMih1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisJb3V0YihhZGRyLCBSVENfUE9SVCgyKSk7CisJcmV0dXJuIGluYihSVENfUE9SVCgzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbW9zX3dyaXRlX2JhbmsyKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisJb3V0YihhZGRyLCBSVENfUE9SVCgyKSk7CisJb3V0Yih2YWwsIFJUQ19QT1JUKDIpKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBjYW5fYmFuazIJZmFsc2UKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNtb3NfcmVhZF9iYW5rMih1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbW9zX3dyaXRlX2JhbmsyKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBjaGFyIGFkZHIpCit7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGNtb3NfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0KQogewogCS8qIFJFVklTSVQ6ICBpZiB0aGUgY2xvY2sgaGFzIGEgImNlbnR1cnkiIHJlZ2lzdGVyLCB1c2UKQEAgLTIwMywyNiArMjQwLDI2IEBACiAJLyogUkVWSVNJVCB0aGlzIGFzc3VtZXMgUEMgc3R5bGUgdXNhZ2U6ICBhbHdheXMgQkNEICovCiAKIAlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX3NlYykgPCAweDYwKQotCQl0LT50aW1lLnRtX3NlYyA9IEJDRDJCSU4odC0+dGltZS50bV9zZWMpOworCQl0LT50aW1lLnRtX3NlYyA9IGJjZDJiaW4odC0+dGltZS50bV9zZWMpOwogCWVsc2UKIAkJdC0+dGltZS50bV9zZWMgPSAtMTsKIAlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX21pbikgPCAweDYwKQotCQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4odC0+dGltZS50bV9taW4pOworCQl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4odC0+dGltZS50bV9taW4pOwogCWVsc2UKIAkJdC0+dGltZS50bV9taW4gPSAtMTsKIAlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX2hvdXIpIDwgMHgyNCkKLQkJdC0+dGltZS50bV9ob3VyID0gQkNEMkJJTih0LT50aW1lLnRtX2hvdXIpOworCQl0LT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKHQtPnRpbWUudG1faG91cik7CiAJZWxzZQogCQl0LT50aW1lLnRtX2hvdXIgPSAtMTsKIAogCWlmIChjbW9zLT5kYXlfYWxybSkgewogCQlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX21kYXkpIDw9IDB4MzEpCi0JCQl0LT50aW1lLnRtX21kYXkgPSBCQ0QyQklOKHQtPnRpbWUudG1fbWRheSk7CisJCQl0LT50aW1lLnRtX21kYXkgPSBiY2QyYmluKHQtPnRpbWUudG1fbWRheSk7CiAJCWVsc2UKIAkJCXQtPnRpbWUudG1fbWRheSA9IC0xOwogCQlpZiAoY21vcy0+bW9uX2Fscm0pIHsKIAkJCWlmICgoKHVuc2lnbmVkKXQtPnRpbWUudG1fbW9uKSA8PSAweDEyKQotCQkJCXQtPnRpbWUudG1fbW9uID0gQkNEMkJJTih0LT50aW1lLnRtX21vbikgLSAxOworCQkJCXQtPnRpbWUudG1fbW9uID0gYmNkMmJpbih0LT50aW1lLnRtX21vbikgLSAxOwogCQkJZWxzZQogCQkJCXQtPnRpbWUudG1fbW9uID0gLTE7CiAJCX0KQEAgLTI5NCwxOSArMzMxLDE5IEBACiAJLyogV3JpdGluZyAweGZmIG1lYW5zICJkb24ndCBjYXJlIiBvciAibWF0Y2ggYWxsIi4gICovCiAKIAltb24gPSB0LT50aW1lLnRtX21vbiArIDE7Ci0JbW9uID0gKG1vbiA8PSAxMikgPyBCSU4yQkNEKG1vbikgOiAweGZmOworCW1vbiA9IChtb24gPD0gMTIpID8gYmluMmJjZChtb24pIDogMHhmZjsKIAogCW1kYXkgPSB0LT50aW1lLnRtX21kYXk7Ci0JbWRheSA9IChtZGF5ID49IDEgJiYgbWRheSA8PSAzMSkgPyBCSU4yQkNEKG1kYXkpIDogMHhmZjsKKwltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IGJpbjJiY2QobWRheSkgOiAweGZmOwogCiAJaHJzID0gdC0+dGltZS50bV9ob3VyOwotCWhycyA9IChocnMgPCAyNCkgPyBCSU4yQkNEKGhycykgOiAweGZmOworCWhycyA9IChocnMgPCAyNCkgPyBiaW4yYmNkKGhycykgOiAweGZmOwogCiAJbWluID0gdC0+dGltZS50bV9taW47Ci0JbWluID0gKG1pbiA8IDYwKSA/IEJJTjJCQ0QobWluKSA6IDB4ZmY7CisJbWluID0gKG1pbiA8IDYwKSA/IGJpbjJiY2QobWluKSA6IDB4ZmY7CiAKIAlzZWMgPSB0LT50aW1lLnRtX3NlYzsKLQlzZWMgPSAoc2VjIDwgNjApID8gQklOMkJDRChzZWMpIDogMHhmZjsKKwlzZWMgPSAoc2VjIDwgNjApID8gYmluMmJjZChzZWMpIDogMHhmZjsKIAogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtNDkxLDEyICs1MjgsMjEgQEAKIAogCWlmICh1bmxpa2VseShvZmYgPj0gYXR0ci0+c2l6ZSkpCiAJCXJldHVybiAwOworCWlmICh1bmxpa2VseShvZmYgPCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKChvZmYgKyBjb3VudCkgPiBhdHRyLT5zaXplKQogCQljb3VudCA9IGF0dHItPnNpemUgLSBvZmY7CiAKKwlvZmYgKz0gTlZSQU1fT0ZGU0VUOwogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQlmb3IgKHJldHZhbCA9IDAsIG9mZiArPSBOVlJBTV9PRkZTRVQ7IGNvdW50LS07IHJldHZhbCsrLCBvZmYrKykKLQkJKmJ1ZisrID0gQ01PU19SRUFEKG9mZik7CisJZm9yIChyZXR2YWwgPSAwOyBjb3VudDsgY291bnQtLSwgb2ZmKyssIHJldHZhbCsrKSB7CisJCWlmIChvZmYgPCAxMjgpCisJCQkqYnVmKysgPSBDTU9TX1JFQUQob2ZmKTsKKwkJZWxzZSBpZiAoY2FuX2JhbmsyKQorCQkJKmJ1ZisrID0gY21vc19yZWFkX2JhbmsyKG9mZik7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC01MTIsNiArNTU4LDggQEAKIAljbW9zID0gZGV2X2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CiAJaWYgKHVubGlrZWx5KG9mZiA+PSBhdHRyLT5zaXplKSkKIAkJcmV0dXJuIC1FRkJJRzsKKwlpZiAodW5saWtlbHkob2ZmIDwgMCkpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgob2ZmICsgY291bnQpID4gYXR0ci0+c2l6ZSkKIAkJY291bnQgPSBhdHRyLT5zaXplIC0gb2ZmOwogCkBAIC01MjAsMTUgKzU2OCwyMCBAQAogCSAqIGhlcmUuICBJZiB1c2Vyc3BhY2UgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgd2hhdCBmaWVsZHMgb2YKIAkgKiBOVlJBTSB0byB1cGRhdGUsIHVwZGF0aW5nIGNoZWNrc3VtcyBpcyBhbHNvIHBhcnQgb2YgaXRzIGpvYi4KIAkgKi8KKwlvZmYgKz0gTlZSQU1fT0ZGU0VUOwogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQlmb3IgKHJldHZhbCA9IDAsIG9mZiArPSBOVlJBTV9PRkZTRVQ7IGNvdW50LS07IHJldHZhbCsrLCBvZmYrKykgeworCWZvciAocmV0dmFsID0gMDsgY291bnQ7IGNvdW50LS0sIG9mZisrLCByZXR2YWwrKykgewogCQkvKiBkb24ndCB0cmFzaCBSVEMgcmVnaXN0ZXJzICovCiAJCWlmIChvZmYgPT0gY21vcy0+ZGF5X2Fscm0KIAkJCQl8fCBvZmYgPT0gY21vcy0+bW9uX2Fscm0KIAkJCQl8fCBvZmYgPT0gY21vcy0+Y2VudHVyeSkKIAkJCWJ1ZisrOwotCQllbHNlCisJCWVsc2UgaWYgKG9mZiA8IDEyOCkKIAkJCUNNT1NfV1JJVEUoKmJ1ZisrLCBvZmYpOworCQllbHNlIGlmIChjYW5fYmFuazIpCisJCQljbW9zX3dyaXRlX2JhbmsyKCpidWYrKywgb2ZmKTsKKwkJZWxzZQorCQkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCkBAIC01MzksNyArNTkyLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUJPSAibnZyYW0iLAogCQkubW9kZQk9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCiAJLnJlYWQJPSBjbW9zX252cmFtX3JlYWQsCkBAIC02MzEsOCArNjgzLDggQEAKIAogCS8qIEhldXJpc3RpYyB0byBkZWR1Y2UgTlZSQU0gc2l6ZSAuLi4gZG8gd2hhdCB0aGUgbGVnYWN5IE5WUkFNCiAJICogZHJpdmVyIGRpZCwgYnV0IGRvbid0IHJlamVjdCB1bmtub3duIGNvbmZpZ3MuICAgT2xkIGhhcmR3YXJlCi0JICogd29uJ3QgYWRkcmVzcyAxMjggYnl0ZXMsIGFuZCBmb3Igbm93IHdlIGlnbm9yZSB0aGUgd2F5IG5ld2VyCi0JICogY2hpcHMgY2FuIGFkZHJlc3MgMjU2IGJ5dGVzICh1c2luZyB0d28gbW9yZSBpL28gcG9ydHMpLgorCSAqIHdvbid0IGFkZHJlc3MgMTI4IGJ5dGVzLiAgTmV3ZXIgY2hpcHMgaGF2ZSBtdWx0aXBsZSBiYW5rcywKKwkgKiB0aG91Z2ggdGhleSBtYXkgbm90IGJlIGxpc3RlZCBpbiBvbmUgSS9PIHJlc291cmNlLgogCSAqLwogI2lmCWRlZmluZWQoQ09ORklHX0FUQVJJKQogCWFkZHJlc3Nfc3BhY2UgPSA2NDsKQEAgLTY0Miw2ICs2OTQsOCBAQAogI3dhcm5pbmcgQXNzdW1pbmcgMTI4IGJ5dGVzIG9mIFJUQytOVlJBTSBhZGRyZXNzIHNwYWNlLCBub3QgNjQgYnl0ZXMuCiAJYWRkcmVzc19zcGFjZSA9IDEyODsKICNlbmRpZgorCWlmIChjYW5fYmFuazIgJiYgcG9ydHMtPmVuZCA+IChwb3J0cy0+c3RhcnQgKyAxKSkKKwkJYWRkcmVzc19zcGFjZSA9IDI1NjsKIAogCS8qIEZvciBBQ1BJIHN5c3RlbXMgZXh0ZW5zaW9uIGluZm8gY29tZXMgZnJvbSB0aGUgRkFEVC4gIE9uIG90aGVycywKIAkgKiBib2FyZCBzcGVjaWZpYyBzZXR1cCBwcm92aWRlcyBpdCBhcyBhcHByb3ByaWF0ZS4gIFN5c3RlbXMgd2hlcmUKQEAgLTc0MCw3ICs3OTQsNyBAQAogCQlnb3RvIGNsZWFudXAyOwogCX0KIAotCXByX2luZm8oIiVzOiBhbGFybXMgdXAgdG8gb25lICVzJXMlc1xuIiwKKwlwcl9pbmZvKCIlczogYWxhcm1zIHVwIHRvIG9uZSAlcyVzLCAlemQgYnl0ZXMgbnZyYW0sICVzIGlycXNcbiIsCiAJCQljbW9zX3J0Yy5ydGMtPmRldi5idXNfaWQsCiAJCQlpc192YWxpZF9pcnEocnRjX2lycSkKIAkJCQk/ICAoY21vc19ydGMubW9uX2Fscm0KQEAgLTc0OSw2ICs4MDMsNyBAQAogCQkJCQkJPyAibW9udGgiIDogImRheSIpKQogCQkJCTogIm5vIiwKIAkJCWNtb3NfcnRjLmNlbnR1cnkgPyAiLCB5M2siIDogIiIsCisJCQludnJhbS5zaXplLAogCQkJaXNfaHBldF9lbmFibGVkKCkgPyAiLCBocGV0IGlycXMiIDogIiIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggNTJlMjc0My4uMDc5ZTllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtNDMyLDkgKzQzMiwxNSBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLSNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCi0JY2xlYXJfdWllKHJ0Yyk7Ci0jZW5kaWYKKwkvKiBXZSBzaHV0IGRvd24gdGhlIHJlcGVhdGluZyBJUlFzIHRoYXQgdXNlcnNwYWNlIGVuYWJsZWQsCisJICogc2luY2Ugbm90aGluZyBpcyBsaXN0ZW5pbmcgdG8gdGhlbS4KKwkgKiAgLSBVcGRhdGUgKFVJRSkgLi4uIGN1cnJlbnRseSBvbmx5IG1hbmFnZWQgdGhyb3VnaCBpb2N0bHMKKwkgKiAgLSBQZXJpb2RpYyAoUElFKSAuLi4gYWxzbyB1c2VkIHRocm91Z2ggcnRjXyooKSBpbnRlcmZhY2UgY2FsbHMKKwkgKgorCSAqIExlYXZlIHRoZSBhbGFybSBhbG9uZTsgaXQgbWF5IGJlIHNldCB0byB0cmlnZ2VyIGEgc3lzdGVtIHdha2V1cAorCSAqIGxhdGVyLCBvciBiZSB1c2VkIGJ5IGtlcm5lbCBjb2RlLCBhbmQgaXMgYSBvbmUtc2hvdCBldmVudCBhbnl3YXkuCisJICovCisJcnRjX2Rldl9pb2N0bChmaWxlLCBSVENfVUlFX09GRiwgMCk7CiAJcnRjX2lycV9zZXRfc3RhdGUocnRjLCBOVUxMLCAwKTsKIAogCWlmIChydGMtPm9wcy0+cmVsZWFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYwppbmRleCAwYjE3NzcwLi45YTIzNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCkBAIC04NiwxOSArODYsMTkgQEAKIAlkczEyMTZfc3dpdGNoX2RzX3RvX2Nsb2NrKHByaXYtPmlvYWRkcik7CiAJZHMxMjE2X3JlYWQocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzLnNlYyk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVncy5taW4pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3Muc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyZWdzLm1pbik7CiAJaWYgKHJlZ3MuaG91ciAmIERTMTIxNl9IT1VSXzEyMjQpIHsKIAkJLyogQU0vUE0gbW9kZSAqLwotCQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVncy5ob3VyICYgMHgxZik7CisJCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzLmhvdXIgJiAweDFmKTsKIAkJaWYgKHJlZ3MuaG91ciAmIERTMTIxNl9IT1VSX0FNUE0pCiAJCQl0bS0+dG1faG91ciArPSAxMjsKIAl9IGVsc2UKLQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3MuaG91ciAmIDB4M2YpOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVncy5ob3VyICYgMHgzZik7CiAJdG0tPnRtX3dkYXkgPSAocmVncy53ZGF5ICYgNykgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzLm1kYXkgJiAweDNmKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyZWdzLm1vbnRoICYgMHgxZik7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3MueWVhcik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3MubWRheSAmIDB4M2YpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3MubW9udGggJiAweDFmKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocmVncy55ZWFyKTsKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwogCXJldHVybiAwOwpAQCAtMTE0LDE5ICsxMTQsMTkgQEAKIAlkczEyMTZfcmVhZChwcml2LT5pb2FkZHIsICh1OCAqKSZyZWdzKTsKIAogCXJlZ3MudHNlYyA9IDA7IC8qIGNsZWFyIDAuMSBhbmQgMC4wMSBzZWNvbmRzICovCi0JcmVncy5zZWMgPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXJlZ3MubWluID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlyZWdzLnNlYyA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJcmVncy5taW4gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCXJlZ3MuaG91ciAmPSBEUzEyMTZfSE9VUl8xMjI0OwogCWlmIChyZWdzLmhvdXIgJiYgdG0tPnRtX2hvdXIgPiAxMikgewogCQlyZWdzLmhvdXIgfD0gRFMxMjE2X0hPVVJfQU1QTTsKIAkJdG0tPnRtX2hvdXIgLT0gMTI7CiAJfQotCXJlZ3MuaG91ciB8PSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlyZWdzLmhvdXIgfD0gYmluMmJjZCh0bS0+dG1faG91cik7CiAJcmVncy53ZGF5ICY9IH43OwogCXJlZ3Mud2RheSB8PSB0bS0+dG1fd2RheTsKLQlyZWdzLm1kYXkgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzLm1vbnRoID0gQklOMkJDRCh0bS0+dG1fbW9uKTsKLQlyZWdzLnllYXIgPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlyZWdzLm1kYXkgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlyZWdzLm1vbnRoID0gYmluMmJjZCh0bS0+dG1fbW9uKTsKKwlyZWdzLnllYXIgPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAogCWRzMTIxNl9zd2l0Y2hfZHNfdG9fY2xvY2socHJpdi0+aW9hZGRyKTsKIAlkczEyMTZfd3JpdGUocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjYjE2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIERTMTI4NiBSZWFsIFRpbWUgQ2xvY2sgaW50ZXJmYWNlIGZvciBMaW51eAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgQm9nZW5kb2VyZmVyCisgKgorICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IFBhdWwgR29ydG1ha2VyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RzMTI4Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAiCisKK3N0cnVjdCBkczEyODZfcHJpdiB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1MzIgX19pb21lbSAqcnRjcmVnczsKKwlzaXplX3Qgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJhc2VhZGRyOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpbmxpbmUgdTggZHMxMjg2X3J0Y19yZWFkKHN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiwgaW50IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoJnByaXYtPnJ0Y3JlZ3NbcmVnXSkgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHMxMjg2X3J0Y193cml0ZShzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYsIHU4IGRhdGEsIGludCByZWcpCit7CisJX19yYXdfd3JpdGVsKGRhdGEsICZwcml2LT5ydGNyZWdzW3JlZ10pOworfQorCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVgorCitzdGF0aWMgaW50IGRzMTI4Nl9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUlRDX0FJRV9PRkY6CisJCS8qIE1hc2sgYWxhcm0gaW50LiBlbmFiLiBiaXQJKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCQl2YWwgfD0gIFJUQ19URE07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFJUQ19BSUVfT046CisJCS8qIEFsbG93IGFsYXJtIGludGVycnVwdHMuCSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsICY9ICB+UlRDX1RETTsKKwkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgUlRDX1dJRV9PRkY6CisJCS8qIE1hc2sgd2F0Y2hkb2cgaW50LiBlbmFiLiBiaXQJKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCQl2YWwgfD0gUlRDX1dBTTsKKwkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgUlRDX1dJRV9PTjoKKwkJLyogQWxsb3cgd2F0Y2hkb2cgaW50ZXJydXB0cy4JKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCQl2YWwgJj0gflJUQ19XQU07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgZHMxMjg2X2lvY3RsICAgIE5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworc3RhdGljIGludCBkczEyODZfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgbW9udGgsIGNtZCwgYW1vZGU7CisJY29uc3QgY2hhciAqczsKKworCW1vbnRoID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NT05USCk7CisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJvc2NpbGxhdG9yXHQ6ICVzXG4iCisJCSAgICJzcXVhcmVfd2F2ZVx0OiAlc1xuIiwKKwkJICAgKG1vbnRoICYgUlRDX0VPU0MpID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJICAgKG1vbnRoICYgUlRDX0VTUVcpID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7CisKKwlhbW9kZSA9ICgoZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NSU5VVEVTX0FMQVJNKSAmIDB4ODApID4+IDUpIHwKKwkJKChkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0hPVVJTX0FMQVJNKSAmIDB4ODApID4+IDYpIHwKKwkJKChkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0RBWV9BTEFSTSkgJiAweDgwKSA+PiA3KTsKKwlzd2l0Y2ggKGFtb2RlKSB7CisJY2FzZSA3OgorCQlzID0gImVhY2ggbWludXRlIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzID0gIm1pbnV0ZXMgbWF0Y2giOworCQlicmVhazsKKwljYXNlIDE6CisJCXMgPSAiaG91cnMgYW5kIG1pbnV0ZXMgbWF0Y2giOworCQlicmVhazsKKwljYXNlIDA6CisJCXMgPSAiZGF5cywgaG91cnMgYW5kIG1pbnV0ZXMgbWF0Y2giOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzID0gImludmFsaWQiOworCQlicmVhazsKKwl9CisJc2VxX3ByaW50ZihzZXEsICJhbGFybV9tb2RlXHQ6ICVzXG4iLCBzKTsKKworCWNtZCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwlzZXFfcHJpbnRmKHNlcSwKKwkJICAgImFsYXJtX2VuYWJsZVx0OiAlc1xuIgorCQkgICAid2RvZ19hbGFybVx0OiAlc1xuIgorCQkgICAiYWxhcm1fbWFza1x0OiAlc1xuIgorCQkgICAid2RvZ19hbGFybV9tYXNrXHQ6ICVzXG4iCisJCSAgICJpbnRlcnJ1cHRfbW9kZVx0OiAlc1xuIgorCQkgICAiSU5UQl9tb2RlXHQ6ICVzX2FjdGl2ZVxuIgorCQkgICAiaW50ZXJydXB0X3BpbnNcdDogJXNcbiIsCisJCSAgIChjbWQgJiBSVENfVERGKSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgKGNtZCAmIFJUQ19XQUYpID8gInllcyIgOiAibm8iLAorCQkgICAoY21kICYgUlRDX1RETSkgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiLAorCQkgICAoY21kICYgUlRDX1dBTSkgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiLAorCQkgICAoY21kICYgUlRDX1BVX0xWTCkgPyAicHVsc2UiIDogImxldmVsIiwKKwkJICAgKGNtZCAmIFJUQ19JQkhfTE8pID8gImxvdyIgOiAiaGlnaCIsCisJCSAgIChjbWQgJiBSVENfSVBTVykgPyAidW5zd2FwcGVkIiA6ICJzd2FwcGVkIik7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGRzMTI4Nl9wcm9jICAgICBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBkczEyODZfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdWlwX3dhdGNoZG9nID0gamlmZmllczsKKworCS8qCisJICogcmVhZCBSVEMgb25jZSBhbnkgdXBkYXRlIGluIHByb2dyZXNzIGlzIGRvbmUuIFRoZSB1cGRhdGUKKwkgKiBjYW4gdGFrZSBqdXN0IG92ZXIgMm1zLiBXZSB3YWl0IDEwIHRvIDIwbXMuIFRoZXJlIGlzIG5vIG5lZWQgdG8KKwkgKiB0byBwb2xsLXdhaXQgKHVwIHRvIDFzIC0gZWVjY2NoKSBmb3IgdGhlIGZhbGxpbmcgZWRnZSBvZiBSVENfVUlQLgorCSAqIElmIHlvdSBuZWVkIHRvIGtub3cgKmV4YWN0bHkqIHdoZW4gYSBzZWNvbmQgaGFzIHN0YXJ0ZWQsIGVuYWJsZQorCSAqIHBlcmlvZGljIHVwZGF0ZSBjb21wbGV0ZSBpbnRlcnJ1cHRzLCAodmlhIGlvY3RsKSBhbmQgdGhlbgorCSAqIGltbWVkaWF0ZWx5IHJlYWQgL2Rldi9ydGMgd2hpY2ggd2lsbCBibG9jayB1bnRpbCB5b3UgZ2V0IHRoZSBJUlEuCisJICogT25jZSB0aGUgcmVhZCBjbGVhcnMsIHJlYWQgdGhlIFJUQyB0aW1lIChhZ2FpbiB2aWEgaW9jdGwpLiBFYXN5LgorCSAqLworCisJaWYgKGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKSAmIFJUQ19URSkKKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHVpcF93YXRjaGRvZyArIDIqSFovMTAwKSkKKwkJCWJhcnJpZXIoKTsKKworCS8qCisJICogT25seSB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBmcm9tIHRoZSBSVEMgYXJlIHNldC4gV2UgbGVhdmUKKwkgKiB0bV93ZGF5LCB0bV95ZGF5IGFuZCB0bV9pc2RzdCB1bnRvdWNoZWQuIEV2ZW4gdGhvdWdoIHRoZQorCSAqIFJUQyBoYXMgUlRDX0RBWV9PRl9XRUVLLCB3ZSBpZ25vcmUgaXQsIGFzIGl0IGlzIG9ubHkgdXBkYXRlZAorCSAqIGJ5IHRoZSBSVEMgd2hlbiBpbml0aWFsbHkgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzYXZlX2NvbnRyb2wgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCAoc2F2ZV9jb250cm9sfFJUQ19URSksIFJUQ19DTUQpOworCisJdG0tPnRtX3NlYyA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfU0VDT05EUyk7CisJdG0tPnRtX21pbiA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfTUlOVVRFUyk7CisJdG0tPnRtX2hvdXIgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0hPVVJTKSAmIDB4M2Y7CisJdG0tPnRtX21kYXkgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0RBVEUpOworCXRtLT50bV9tb24gPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX01PTlRIKSAmIDB4MWY7CisJdG0tPnRtX3llYXIgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX1lFQVIpOworCisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBzYXZlX2NvbnRyb2wsIFJUQ19DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCisJLyoKKwkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcworCSAqIGFuZCBob3cgdGhleSBhcmUgZGVmaW5lZCBpbiBhIHN0cnVjdCBydGNfdGltZTsKKwkgKi8KKwlpZiAodG0tPnRtX3llYXIgPCA0NSkKKwkJdG0tPnRtX3llYXIgKz0gMzA7CisJdG0tPnRtX3llYXIgKz0gNDA7CisJaWYgKHRtLT50bV95ZWFyIDwgNzApCisJCXRtLT50bV95ZWFyICs9IDEwMDsKKworCXRtLT50bV9tb24tLTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IGRzMTI4Nl9zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBtb24sIGRheSwgaHJzLCBtaW4sIHNlYzsKKwl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbDsKKwl1bnNpZ25lZCBpbnQgeXJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl5cnMgPSB0bS0+dG1feWVhciArIDE5MDA7CisJbW9uID0gdG0tPnRtX21vbiArIDE7ICAgLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJZGF5ID0gdG0tPnRtX21kYXk7CisJaHJzID0gdG0tPnRtX2hvdXI7CisJbWluID0gdG0tPnRtX21pbjsKKwlzZWMgPSB0bS0+dG1fc2VjOworCisJaWYgKHlycyA8IDE5NzApCisJCXJldHVybiAtRUlOVkFMOworCisJeXJzIC09IDE5NDA7CisJaWYgKHlycyA+IDI1NSkgICAgLyogVGhleSBhcmUgdW5zaWduZWQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoeXJzID49IDEwMCkKKwkJeXJzIC09IDEwMDsKKworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJeXJzID0gYmluMmJjZCh5cnMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzYXZlX2NvbnRyb2wgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCAoc2F2ZV9jb250cm9sfFJUQ19URSksIFJUQ19DTUQpOworCisJZHMxMjg2X3J0Y193cml0ZShwcml2LCB5cnMsIFJUQ19ZRUFSKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIG1vbiwgUlRDX01PTlRIKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIGRheSwgUlRDX0RBVEUpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgaHJzLCBSVENfSE9VUlMpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgbWluLCBSVENfTUlOVVRFUyk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBzZWMsIFJUQ19TRUNPTkRTKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIDAsIFJUQ19IVU5EUkVEVEhfU0VDT05EKTsKKworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgc2F2ZV9jb250cm9sLCBSVENfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxMjg2X3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxtKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFRoYXQKKwkgKiBtZWFucyBvbmx5IHRtX3dkYXksIHRtX2hvdXIsIHRtX21pbi4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWFsbS0+dGltZS50bV9taW4gPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX01JTlVURVNfQUxBUk0pICYgMHg3ZjsKKwlhbG0tPnRpbWUudG1faG91ciA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfSE9VUlNfQUxBUk0pICAmIDB4MWY7CisJYWxtLT50aW1lLnRtX3dkYXkgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0RBWV9BTEFSTSkgICAgJiAweDA3OworCWNtZCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlhbG0tPnRpbWUudG1fbWluID0gYmNkMmJpbihhbG0tPnRpbWUudG1fbWluKTsKKwlhbG0tPnRpbWUudG1faG91ciA9IGJjZDJiaW4oYWxtLT50aW1lLnRtX2hvdXIpOworCWFsbS0+dGltZS50bV9zZWMgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTI4Nl9zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxtKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgaHJzLCBtaW4sIHNlYzsKKworCWhycyA9IGFsbS0+dGltZS50bV9ob3VyOworCW1pbiA9IGFsbS0+dGltZS50bV9taW47CisJc2VjID0gYWxtLT50aW1lLnRtX3NlYzsKKworCWlmIChocnMgPj0gMjQpCisJCWhycyA9IDB4ZmY7CisKKwlpZiAobWluID49IDYwKQorCQltaW4gPSAweGZmOworCisJaWYgKHNlYyAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1pbiA9IGJpbjJiY2QobWluKTsKKwlocnMgPSBiaW4yYmNkKGhycyk7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgaHJzLCBSVENfSE9VUlNfQUxBUk0pOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgbWluLCBSVENfTUlOVVRFU19BTEFSTSk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEyODZfb3BzID0geworCS5pb2N0bCAgIAk9IGRzMTI4Nl9pb2N0bCwKKwkucHJvYyAgIAk9IGRzMTI4Nl9wcm9jLAorCS5yZWFkX3RpbWUJPSBkczEyODZfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IGRzMTI4Nl9zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IGRzMTI4Nl9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBkczEyODZfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZHMxMjg2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXY7CisJaW50IHJldCA9IDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzMTI4Nl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPnNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHByaXYtPnNpemUsIHBkZXYtPm5hbWUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYtPmJhc2VhZGRyID0gcmVzLT5zdGFydDsKKwlwcml2LT5ydGNyZWdzID0gaW9yZW1hcChwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJaWYgKCFwcml2LT5ydGNyZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMxMjg2IiwgJnBkZXYtPmRldiwKKwkJCQkgICZkczEyODZfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJldCA9IFBUUl9FUlIocnRjKTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYtPnJ0YyA9IHJ0YzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChwcml2LT5ydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCWlmIChwcml2LT5ydGNyZWdzKQorCQlpb3VubWFwKHByaXYtPnJ0Y3JlZ3MpOworCWlmIChwcml2LT5iYXNlYWRkcikKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmJhc2VhZGRyLCBwcml2LT5zaXplKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkczEyODZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKKwlpb3VubWFwKHByaXYtPnJ0Y3JlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRzMTI4Nl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInJ0Yy1kczEyODYiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBkczEyODZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkczEyODZfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRzMTI4Nl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHMxMjg2X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkczEyODZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkczEyODZfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFMxMjg2IFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLWRzMTI4NiIpOworCittb2R1bGVfaW5pdChkczEyODZfaW5pdCk7Cittb2R1bGVfZXhpdChkczEyODZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKaW5kZXggYjkzOTc4MS4uMTg0NTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZQlSVENfU0NMSwkweDA0MDAKIAogI2lmZGVmIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMAotI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgorI2luY2x1ZGUgPG1hY2gvc25hcGdlYXIuaD4KICNkZWZpbmUgc2V0X2RwKHgpCVNFQ1VSRUVER0VfV1JJVEVfSU9QT1JUKHgsIDB4MWMwMCkKICNkZWZpbmUgZ2V0X2RwKCkJU0VDVVJFRURHRV9SRUFEX0lPUE9SVCgpCiAjZWxzZQpAQCAtMTA3LDEzICsxMDcsMTMgQEAKIAogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CiAKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSk7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01JTikpOwotCXRtLT50bV9ob3VyCT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfSE9VUikpOwotCXRtLT50bV93ZGF5CT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFZKSk7Ci0JdG0tPnRtX21kYXkJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVRFKSk7Ci0JdG0tPnRtX21vbgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01PTikpIC0gMTsKLQl0bS0+dG1feWVhcgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1lFQVIpKTsKKwl0bS0+dG1fc2VjCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSk7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01JTikpOworCXRtLT50bV9ob3VyCT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfSE9VUikpOworCXRtLT50bV93ZGF5CT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFZKSk7CisJdG0tPnRtX21kYXkJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9EQVRFKSk7CisJdG0tPnRtX21vbgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX01PTikpIC0gMTsKKwl0bS0+dG1feWVhcgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1lFQVIpKTsKIAogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogCS8qIFN0b3AgUlRDICovCiAJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpIHwgMHg4MCk7CiAKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgQklOMkJDRCh0bS0+dG1fc2VjKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NSU4sIEJJTjJCQ0QodG0tPnRtX21pbikpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfSE9VUiwgQklOMkJDRCh0bS0+dG1faG91cikpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFZLCBCSU4yQkNEKHRtLT50bV93ZGF5KSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVRFLCBCSU4yQkNEKHRtLT50bV9tZGF5KSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NT04sIEJJTjJCQ0QodG0tPnRtX21vbiArIDEpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1lFQVIsIEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgYmluMmJjZCh0bS0+dG1fc2VjKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NSU4sIGJpbjJiY2QodG0tPnRtX21pbikpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfSE9VUiwgYmluMmJjZCh0bS0+dG1faG91cikpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFZLCBiaW4yYmNkKHRtLT50bV93ZGF5KSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9EQVRFLCBiaW4yYmNkKHRtLT50bV9tZGF5KSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9NT04sIGJpbjJiY2QodG0tPnRtX21vbiArIDEpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1lFQVIsIGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApKTsKIAogCS8qIFN0YXJ0IFJUQyAqLwogCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSAmIH4weDgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwppbmRleCBiOTFkMDJhLi5mYzM3MmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCkBAIC0xMTQsMTAgKzExNCwxMCBAQAogCQkJaG91ciA9IDEyOwogCQkJYmNkICY9IH5EUzEzMDVfSFJfUE07CiAJCX0KLQkJaG91ciArPSBCQ0QyQklOKGJjZCk7CisJCWhvdXIgKz0gYmNkMmJpbihiY2QpOwogCQlyZXR1cm4gaG91ciAtIDE7CiAJfQotCXJldHVybiBCQ0QyQklOKGJjZCk7CisJcmV0dXJuIGJjZDJiaW4oYmNkKTsKIH0KIAogc3RhdGljIHU4IGhvdXIyYmNkKGJvb2wgaHIxMiwgaW50IGhvdXIpCkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogCWlmIChocjEyKSB7CiAJCWhvdXIrKzsKIAkJaWYgKGhvdXIgPD0gMTIpCi0JCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgQklOMkJDRChob3VyKTsKKwkJCXJldHVybiBEUzEzMDVfSFJfMTIgfCBiaW4yYmNkKGhvdXIpOwogCQlob3VyIC09IDEyOwotCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgRFMxMzA1X0hSX1BNIHwgQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IERTMTMwNV9IUl9QTSB8IGJpbjJiY2QoaG91cik7CiAJfQotCXJldHVybiBCSU4yQkNEKGhvdXIpOworCXJldHVybiBiaW4yYmNkKGhvdXIpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjA2LDEzICsyMDYsMTMgQEAKIAkJYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CiAKIAkvKiBEZWNvZGUgdGhlIHJlZ2lzdGVycyAqLwotCXRpbWUtPnRtX3NlYyA9IEJDRDJCSU4oYnVmW0RTMTMwNV9TRUNdKTsKLQl0aW1lLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTUlOXSk7CisJdGltZS0+dG1fc2VjID0gYmNkMmJpbihidWZbRFMxMzA1X1NFQ10pOworCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NSU5dKTsKIAl0aW1lLT50bV9ob3VyID0gYmNkMmhvdXIoYnVmW0RTMTMwNV9IT1VSXSk7CiAJdGltZS0+dG1fd2RheSA9IGJ1ZltEUzEzMDVfV0RBWV0gLSAxOwotCXRpbWUtPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTURBWV0pOwotCXRpbWUtPnRtX21vbiA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NT05dKSAtIDE7Ci0JdGltZS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW0RTMTMwNV9ZRUFSXSkgKyAxMDA7CisJdGltZS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NREFZXSk7CisJdGltZS0+dG1fbW9uID0gYmNkMmJpbihidWZbRFMxMzA1X01PTl0pIC0gMTsKKwl0aW1lLT50bV95ZWFyID0gYmNkMmJpbihidWZbRFMxMzA1X1lFQVJdKSArIDEwMDsKIAogCWRldl92ZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKIAkJImhvdXJzPSVkLCBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0yMzksMTMgKzIzOSwxMyBAQAogCS8qIFdyaXRlIHJlZ2lzdGVycyBzdGFydGluZyBhdCB0aGUgZmlyc3QgdGltZS9kYXRlIGFkZHJlc3MuICovCiAJKmJwKysgPSBEUzEzMDVfV1JJVEUgfCBEUzEzMDVfU0VDOwogCi0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX3NlYyk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX21pbik7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX3NlYyk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX21pbik7CiAJKmJwKysgPSBob3VyMmJjZChkczEzMDUtPmhyMTIsIHRpbWUtPnRtX2hvdXIpOwogCSpicCsrID0gKHRpbWUtPnRtX3dkYXkgPCA3KSA/ICh0aW1lLT50bV93ZGF5ICsgMSkgOiAxOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9tZGF5KTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fbW9uICsgMSk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX3llYXIgLSAxMDApOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9tZGF5KTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fbW9uICsgMSk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX3llYXIgLSAxMDApOwogCiAJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCSJ3cml0ZSIsIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCkBAIC0zMjksOCArMzI5LDggQEAKIAkgKiBmaWxsIGluIHRoZSByZXN0IC4uLiBhbmQgYWxzbyBoYW5kbGUgcm9sbG92ZXIgdG8gdG9tb3Jyb3cgd2hlbgogCSAqIHRoYXQncyBuZWVkZWQuCiAJICovCi0JYWxtLT50aW1lLnRtX3NlYyA9IEJDRDJCSU4oYnVmW0RTMTMwNV9TRUNdKTsKLQlhbG0tPnRpbWUudG1fbWluID0gQkNEMkJJTihidWZbRFMxMzA1X01JTl0pOworCWFsbS0+dGltZS50bV9zZWMgPSBiY2QyYmluKGJ1ZltEUzEzMDVfU0VDXSk7CisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NSU5dKTsKIAlhbG0tPnRpbWUudG1faG91ciA9IGJjZDJob3VyKGJ1ZltEUzEzMDVfSE9VUl0pOwogCWFsbS0+dGltZS50bV9tZGF5ID0gLTE7CiAJYWxtLT50aW1lLnRtX21vbiA9IC0xOwpAQCAtMzg3LDggKzM4Nyw4IEBACiAKIAkvKiB3cml0ZSBhbGFybSAqLwogCWJ1ZlswXSA9IERTMTMwNV9XUklURSB8IERTMTMwNV9BTE0wKERTMTMwNV9TRUMpOwotCWJ1ZlsxICsgRFMxMzA1X1NFQ10gPSBCSU4yQkNEKGFsbS0+dGltZS50bV9zZWMpOwotCWJ1ZlsxICsgRFMxMzA1X01JTl0gPSBCSU4yQkNEKGFsbS0+dGltZS50bV9taW4pOworCWJ1ZlsxICsgRFMxMzA1X1NFQ10gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9zZWMpOworCWJ1ZlsxICsgRFMxMzA1X01JTl0gPSBiaW4yYmNkKGFsbS0+dGltZS50bV9taW4pOwogCWJ1ZlsxICsgRFMxMzA1X0hPVVJdID0gaG91cjJiY2QoZHMxMzA1LT5ocjEyLCBhbG0tPnRpbWUudG1faG91cik7CiAJYnVmWzEgKyBEUzEzMDVfV0RBWV0gPSBEUzEzMDVfQUxNX0RJU0FCTEU7CiAKQEAgLTYwNiw3ICs2MDYsNiBAQAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIG52cmFtID0gewogCS5hdHRyLm5hbWUJPSAibnZyYW0iLAogCS5hdHRyLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkuYXR0ci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGRzMTMwNV9udnJhbV9yZWFkLAogCS53cml0ZQkJPSBkczEzMDVfbnZyYW1fd3JpdGUsCiAJLnNpemUJCT0gRFMxMzA1X05WUkFNX0xFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwppbmRleCBiYmY5N2U2Li4xNjIzMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCkBAIC0yMywxMCArMjMsNiBAQAogICogdG8gaGF2ZSBzZXQgdGhlIGNoaXAgdXAgYXMgYSBjbG9jayAodHVybmluZyBvbiB0aGUgb3NjaWxsYXRvciBhbmQKICAqIHNldHRpbmcgdGhlIGRhdGUgYW5kIHRpbWUpLCBMaW51eCBjYW4gaWdub3JlIHRoZSBub24tY2xvY2sgZmVhdHVyZXMuCiAgKiBUaGF0J3MgYSBuYXR1cmFsIGpvYiBmb3IgYSBmYWN0b3J5IG9yIHJlcGFpciBiZW5jaC4KLSAqCi0gKiBUaGlzIGlzIGN1cnJlbnRseSBhIHNpbXBsZSBuby1hbGFybXMgZHJpdmVyLiAgSWYgeW91ciBib2FyZCBoYXMgdGhlCi0gKiBhbGFybSBpcnEgd2lyZWQgdXAgb24gYSBkczEzMzcgb3IgZHMxMzM5LCBhbmQgeW91IHdhbnQgdG8gdXNlIHRoYXQsCi0gKiB0aGVuIGxvb2sgYXQgdGhlIHJ0Yy1yczVjMzcyIGRyaXZlciBmb3IgY29kZSB0byBzdGVhbC4uLgogICovCiBlbnVtIGRzX3R5cGUgewogCWRzXzEzMDcsCkBAIC02Nyw2ICs2Myw3IEBACiAjCWRlZmluZSBEUzEzMDdfQklUX1JTMAkJMHgwMQogI2RlZmluZSBEUzEzMzdfUkVHX0NPTlRST0wJMHgwZQogIwlkZWZpbmUgRFMxMzM3X0JJVF9uRU9TQwkJMHg4MAorIwlkZWZpbmUgRFMxMzM5X0JJVF9CQlNRSQkJMHgyMAogIwlkZWZpbmUgRFMxMzM3X0JJVF9SUzIJCTB4MTAKICMJZGVmaW5lIERTMTMzN19CSVRfUlMxCQkweDA4CiAjCWRlZmluZSBEUzEzMzdfQklUX0lOVENOCQkweDA0CkBAIC04MywxOSArODAsMjIgQEAKICMJZGVmaW5lIERTMTMzN19CSVRfT1NGCQkweDgwCiAjCWRlZmluZSBEUzEzMzdfQklUX0EySQkJMHgwMgogIwlkZWZpbmUgRFMxMzM3X0JJVF9BMUkJCTB4MDEKKyNkZWZpbmUgRFMxMzM5X1JFR19BTEFSTTFfU0VDUwkweDA3CiAjZGVmaW5lIERTMTMzOV9SRUdfVFJJQ0tMRQkweDEwCiAKIAogCiBzdHJ1Y3QgZHMxMzA3IHsKIAl1OAkJCXJlZ19hZGRyOwotCWJvb2wJCQloYXNfbnZyYW07Ci0JdTgJCQlyZWdzWzhdOworCXU4CQkJcmVnc1sxMV07CiAJZW51bSBkc190eXBlCQl0eXBlOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBIQVNfTlZSQU0JMAkJLyogYml0IDAgPT0gc3lzZnMgZmlsZSBhY3RpdmUgKi8KKyNkZWZpbmUgSEFTX0FMQVJNCTEJCS8qIGJpdCAxID09IGlycSBjbGFpbWVkICovCiAJc3RydWN0IGkyY19tc2cJCW1zZ1syXTsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwotCXN0cnVjdCBpMmNfY2xpZW50CWRldjsKIAlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjOworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAogc3RydWN0IGNoaXBfZGVzYyB7CkBAIC0xMzIsMTIgKzEzMiw3OSBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczEzMDdfaWQpOwogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhlIElSUSBsb2dpYyBpbmNsdWRlcyBhICJyZWFsIiBoYW5kbGVyIHJ1bm5pbmcgaW4gSVJRIGNvbnRleHQganVzdAorICogbG9uZyBlbm91Z2ggdG8gc2NoZWR1bGUgdGhpcyB3b3JrcXVldWUgZW50cnkuICAgV2UgbmVlZCBhIHRhc2sgY29udGV4dAorICogdG8gdGFsayB0byB0aGUgUlRDLCBzaW5jZSBJMkMgSS9PIGNhbGxzIHJlcXVpcmUgdGhhdDsgYW5kIGRpc2FibGUgdGhlCisgKiBJUlEgdW50aWwgd2UgY2xlYXIgaXRzIHN0YXR1cyBvbiB0aGUgY2hpcCwgc28gdGhhdCB0aGlzIGhhbmRsZXIgY2FuCisgKiB3b3JrIHdpdGggYW55IHR5cGUgb2YgdHJpZ2dlcmluZyAobm90IGp1c3QgZmFsbGluZyBlZGdlKS4KKyAqCisgKiBUaGUgZHMxMzM3IGFuZCBkczEzMzkgYm90aCBoYXZlIHR3byBhbGFybXMsIGJ1dCB3ZSBvbmx5IHVzZSB0aGUgZmlyc3QKKyAqIG9uZSAod2l0aCBhICJzZWNvbmRzIiBmaWVsZCkuICBGb3IgZHMxMzM3IHdlIGV4cGVjdCBuSU5UQSBpcyBvdXIgYWxhcm0KKyAqIHNpZ25hbDsgZHMxMzM5IGNoaXBzIGhhdmUgb25seSBvbmUgYWxhcm0gc2lnbmFsLgorICovCitzdGF0aWMgdm9pZCBkczEzMDdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRzMTMwNwkJKmRzMTMwNzsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCXN0cnVjdCBtdXRleAkJKmxvY2s7CisJaW50CQkJc3RhdCwgY29udHJvbDsKKworCWRzMTMwNyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHMxMzA3LCB3b3JrKTsKKwljbGllbnQgPSBkczEzMDctPmNsaWVudDsKKwlsb2NrID0gJmRzMTMwNy0+cnRjLT5vcHNfbG9jazsKKworCW11dGV4X2xvY2sobG9jayk7CisJc3RhdCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfU1RBVFVTKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHN0YXQgJiBEUzEzMzdfQklUX0ExSSkgeworCQlzdGF0ICY9IH5EUzEzMzdfQklUX0ExSTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfU1RBVFVTLCBzdGF0KTsKKworCQljb250cm9sID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKKwkJaWYgKGNvbnRyb2wgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJY29udHJvbCAmPSB+RFMxMzM3X0JJVF9BMUlFOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MLCBjb250cm9sKTsKKworCQkvKiBydGNfdXBkYXRlX2lycSgpIGFzc3VtZXMgdGhhdCBpdCBpcyBjYWxsZWQKKwkJICogZnJvbSBJUlEtZGlzYWJsZWQgY29udGV4dC4KKwkJICovCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCXJ0Y191cGRhdGVfaXJxKGRzMTMwNy0+cnRjLCAxLCBSVENfQUYgfCBSVENfSVJRRik7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9CisKK291dDoKKwlpZiAodGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCisJCWVuYWJsZV9pcnEoY2xpZW50LT5pcnEpOworCW11dGV4X3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRzMTMwN19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSBkZXZfaWQ7CisJc3RydWN0IGRzMTMwNwkJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJc2NoZWR1bGVfd29yaygmZHMxMzA3LT53b3JrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbnQgZHMxMzA3X2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0KQogewogCXN0cnVjdCBkczEzMDcJKmRzMTMwNyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludAkJdG1wOwogCiAJLyogcmVhZCB0aGUgUlRDIGRhdGUgYW5kIHRpbWUgcmVnaXN0ZXJzIGFsbCBhdCBvbmNlICovCisJZHMxMzA3LT5yZWdfYWRkciA9IDA7CiAJZHMxMzA3LT5tc2dbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKIAlkczEzMDctPm1zZ1sxXS5sZW4gPSA3OwogCkBAIC0xNTUsMTcgKzIyMiwxNyBAQAogCQkJZHMxMzA3LT5yZWdzWzRdLCBkczEzMDctPnJlZ3NbNV0sCiAJCQlkczEzMDctPnJlZ3NbNl0pOwogCi0JdC0+dG1fc2VjID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19TRUNTXSAmIDB4N2YpOwotCXQtPnRtX21pbiA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTUlOXSAmIDB4N2YpOworCXQtPnRtX3NlYyA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfU0VDU10gJiAweDdmKTsKKwl0LT50bV9taW4gPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKIAl0bXAgPSBkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19IT1VSXSAmIDB4M2Y7Ci0JdC0+dG1faG91ciA9IEJDRDJCSU4odG1wKTsKLQl0LT50bV93ZGF5ID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19XREFZXSAmIDB4MDcpIC0gMTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOworCXQtPnRtX2hvdXIgPSBiY2QyYmluKHRtcCk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfV0RBWV0gJiAweDA3KSAtIDE7CisJdC0+dG1fbWRheSA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKIAl0bXAgPSBkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NT05USF0gJiAweDFmOwotCXQtPnRtX21vbiA9IEJDRDJCSU4odG1wKSAtIDE7CisJdC0+dG1fbW9uID0gYmNkMmJpbih0bXApIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIERTMTMzN19CSVRfQ0VOVFVSWSAqLwotCXQtPnRtX3llYXIgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1lFQVJdKSArIDEwMDsKKwl0LT50bV95ZWFyID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKIAkJImhvdXJzPSVkLCBtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0xOTEsMTYgKzI1OCwxNiBAQAogCQl0LT50bV9tb24sIHQtPnRtX3llYXIsIHQtPnRtX3dkYXkpOwogCiAJKmJ1ZisrID0gMDsJCS8qIGZpcnN0IHJlZ2lzdGVyIGFkZHIgKi8KLQlidWZbRFMxMzA3X1JFR19TRUNTXSA9IEJJTjJCQ0QodC0+dG1fc2VjKTsKLQlidWZbRFMxMzA3X1JFR19NSU5dID0gQklOMkJDRCh0LT50bV9taW4pOwotCWJ1ZltEUzEzMDdfUkVHX0hPVVJdID0gQklOMkJDRCh0LT50bV9ob3VyKTsKLQlidWZbRFMxMzA3X1JFR19XREFZXSA9IEJJTjJCQ0QodC0+dG1fd2RheSArIDEpOwotCWJ1ZltEUzEzMDdfUkVHX01EQVldID0gQklOMkJDRCh0LT50bV9tZGF5KTsKLQlidWZbRFMxMzA3X1JFR19NT05USF0gPSBCSU4yQkNEKHQtPnRtX21vbiArIDEpOworCWJ1ZltEUzEzMDdfUkVHX1NFQ1NdID0gYmluMmJjZCh0LT50bV9zZWMpOworCWJ1ZltEUzEzMDdfUkVHX01JTl0gPSBiaW4yYmNkKHQtPnRtX21pbik7CisJYnVmW0RTMTMwN19SRUdfSE9VUl0gPSBiaW4yYmNkKHQtPnRtX2hvdXIpOworCWJ1ZltEUzEzMDdfUkVHX1dEQVldID0gYmluMmJjZCh0LT50bV93ZGF5ICsgMSk7CisJYnVmW0RTMTMwN19SRUdfTURBWV0gPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCWJ1ZltEUzEzMDdfUkVHX01PTlRIXSA9IGJpbjJiY2QodC0+dG1fbW9uICsgMSk7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSAqLwogCXRtcCA9IHQtPnRtX3llYXIgLSAxMDA7Ci0JYnVmW0RTMTMwN19SRUdfWUVBUl0gPSBCSU4yQkNEKHRtcCk7CisJYnVmW0RTMTMwN19SRUdfWUVBUl0gPSBiaW4yYmNkKHRtcCk7CiAKIAlzd2l0Y2ggKGRzMTMwNy0+dHlwZSkgewogCWNhc2UgZHNfMTMzNzoKQEAgLTIzMSw5ICsyOTgsMTg2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZHMxMzA3X3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQJCQlyZXQ7CisKKwlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHJlYWQgYWxsIEFMQVJNMSwgQUxBUk0yLCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBhdCBvbmNlICovCisJZHMxMzA3LT5yZWdfYWRkciA9IERTMTMzOV9SRUdfQUxBUk0xX1NFQ1M7CisJZHMxMzA3LT5tc2dbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwlkczEzMDctPm1zZ1sxXS5sZW4gPSA5OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCksCisJCQlkczEzMDctPm1zZywgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJhbGFybSByZWFkIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeFxuIiwKKwkJCSJhbGFybSByZWFkIiwKKwkJCWRzMTMwNy0+cmVnc1swXSwgZHMxMzA3LT5yZWdzWzFdLAorCQkJZHMxMzA3LT5yZWdzWzJdLCBkczEzMDctPnJlZ3NbM10sCisJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKKwkJCWRzMTMwNy0+cmVnc1s2XSwgZHMxMzA3LT5yZWdzWzddLAorCQkJZHMxMzA3LT5yZWdzWzhdKTsKKworCS8qIHJlcG9ydCBhbGFybSB0aW1lIChBTEFSTTEpOyBhc3N1bWUgMjQgaG91ciBhbmQgZGF5LW9mLW1vbnRoIG1vZGVzLAorCSAqIGFuZCB0aGF0IGFsbCBmb3VyIGZpZWxkcyBhcmUgY2hlY2tlZCBtYXRjaGVzCisJICovCisJdC0+dGltZS50bV9zZWMgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1swXSAmIDB4N2YpOworCXQtPnRpbWUudG1fbWluID0gYmNkMmJpbihkczEzMDctPnJlZ3NbMV0gJiAweDdmKTsKKwl0LT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1syXSAmIDB4M2YpOworCXQtPnRpbWUudG1fbWRheSA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzWzNdICYgMHgzZik7CisJdC0+dGltZS50bV9tb24gPSAtMTsKKwl0LT50aW1lLnRtX3llYXIgPSAtMTsKKwl0LT50aW1lLnRtX3dkYXkgPSAtMTsKKwl0LT50aW1lLnRtX3lkYXkgPSAtMTsKKwl0LT50aW1lLnRtX2lzZHN0ID0gLTE7CisKKwkvKiAuLi4gYW5kIHN0YXR1cyAqLworCXQtPmVuYWJsZWQgPSAhIShkczEzMDctPnJlZ3NbN10gJiBEUzEzMzdfQklUX0ExSUUpOworCXQtPnBlbmRpbmcgPSAhIShkczEzMDctPnJlZ3NbOF0gJiBEUzEzMzdfQklUX0ExSSk7CisKKwlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKKwkJImhvdXJzPSVkLCBtZGF5PSVkLCBlbmFibGVkPSVkLCBwZW5kaW5nPSVkXG4iLAorCQkiYWxhcm0gcmVhZCIsIHQtPnRpbWUudG1fc2VjLCB0LT50aW1lLnRtX21pbiwKKwkJdC0+dGltZS50bV9ob3VyLCB0LT50aW1lLnRtX21kYXksCisJCXQtPmVuYWJsZWQsIHQtPnBlbmRpbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxMzA3X3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTMwNwkJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGNoYXIJCSpidWYgPSBkczEzMDctPnJlZ3M7CisJdTgJCQljb250cm9sLCBzdGF0dXM7CisJaW50CQkJcmV0OworCisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKKwkJImhvdXJzPSVkLCBtZGF5PSVkLCBlbmFibGVkPSVkLCBwZW5kaW5nPSVkXG4iLAorCQkiYWxhcm0gc2V0IiwgdC0+dGltZS50bV9zZWMsIHQtPnRpbWUudG1fbWluLAorCQl0LT50aW1lLnRtX2hvdXIsIHQtPnRpbWUudG1fbWRheSwKKwkJdC0+ZW5hYmxlZCwgdC0+cGVuZGluZyk7CisKKwkvKiByZWFkIGN1cnJlbnQgc3RhdHVzIG9mIGJvdGggYWxhcm1zIGFuZCB0aGUgY2hpcCAqLworCWRzMTMwNy0+cmVnX2FkZHIgPSBEUzEzMzlfUkVHX0FMQVJNMV9TRUNTOworCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJZHMxMzA3LT5tc2dbMV0ubGVuID0gOTsKKworCXJldCA9IGkyY190cmFuc2Zlcih0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpLAorCQkJZHMxMzA3LT5tc2csIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKGRldiwgIiVzIGVycm9yICVkXG4iLCAiYWxhcm0gd3JpdGUiLCByZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJY29udHJvbCA9IGRzMTMwNy0+cmVnc1s3XTsKKwlzdGF0dXMgPSBkczEzMDctPnJlZ3NbOF07CisKKwlkZXZfZGJnKGRldiwgIiVzOiAlMDJ4ICUwMnggJTAyeCAlMDJ4LCAlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4XG4iLAorCQkJImFsYXJtIHNldCAob2xkIHN0YXR1cykiLAorCQkJZHMxMzA3LT5yZWdzWzBdLCBkczEzMDctPnJlZ3NbMV0sCisJCQlkczEzMDctPnJlZ3NbMl0sIGRzMTMwNy0+cmVnc1szXSwKKwkJCWRzMTMwNy0+cmVnc1s0XSwgZHMxMzA3LT5yZWdzWzVdLAorCQkJZHMxMzA3LT5yZWdzWzZdLCBjb250cm9sLCBzdGF0dXMpOworCisJLyogc2V0IEFMQVJNMSwgdXNpbmcgMjQgaG91ciBhbmQgZGF5LW9mLW1vbnRoIG1vZGVzICovCisJKmJ1ZisrID0gRFMxMzM5X1JFR19BTEFSTTFfU0VDUzsJLyogZmlyc3QgcmVnaXN0ZXIgYWRkciAqLworCWJ1ZlswXSA9IGJpbjJiY2QodC0+dGltZS50bV9zZWMpOworCWJ1ZlsxXSA9IGJpbjJiY2QodC0+dGltZS50bV9taW4pOworCWJ1ZlsyXSA9IGJpbjJiY2QodC0+dGltZS50bV9ob3VyKTsKKwlidWZbM10gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWRheSk7CisKKwkvKiBzZXQgQUxBUk0yIHRvIG5vbi1nYXJiYWdlICovCisJYnVmWzRdID0gMDsKKwlidWZbNV0gPSAwOworCWJ1Zls2XSA9IDA7CisKKwkvKiBvcHRpb25hbGx5IGVuYWJsZSBBTEFSTTEgKi8KKwlidWZbN10gPSBjb250cm9sICYgfihEUzEzMzdfQklUX0ExSUUgfCBEUzEzMzdfQklUX0EySUUpOworCWlmICh0LT5lbmFibGVkKSB7CisJCWRldl9kYmcoZGV2LCAiYWxhcm0gSVJRIGFybWVkXG4iKTsKKwkJYnVmWzddIHw9IERTMTMzN19CSVRfQTFJRTsJLyogb25seSBBTEFSTTEgaXMgdXNlZCAqLworCX0KKwlidWZbOF0gPSBzdGF0dXMgJiB+KERTMTMzN19CSVRfQTFJIHwgRFMxMzM3X0JJVF9BMkkpOworCisJZHMxMzA3LT5tc2dbMV0uZmxhZ3MgPSAwOworCWRzMTMwNy0+bXNnWzFdLmxlbiA9IDEwOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCksCisJCQkmZHMxMzA3LT5tc2dbMV0sIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IHNldCBhbGFybSB0aW1lXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxMzA3X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQkJcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT0ZGOgorCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9UVFk7CisKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCAmPSB+RFMxMzM3X0JJVF9BMUlFOworCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFJUQ19BSUVfT046CisJCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCisJCQlyZXR1cm4gLUVOT1RUWTsKKworCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKKworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTN4eF9ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBkczEzMDdfZ2V0X3RpbWUsCiAJLnNldF90aW1lCT0gZHMxMzA3X3NldF90aW1lLAorCS5yZWFkX2FsYXJtCT0gZHMxMzA3X3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IGRzMTMwN19zZXRfYWxhcm0sCisJLmlvY3RsCQk9IGRzMTMwN19pb2N0bCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMDcsNyArNTUxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUJPSAibnZyYW0iLAogCQkubW9kZQk9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCiAJLnJlYWQJPSBkczEzMDdfbnZyYW1fcmVhZCwKQEAgLTMyNyw2ICs1NzAsNyBAQAogCWludAkJCXRtcDsKIAljb25zdCBzdHJ1Y3QgY2hpcF9kZXNjCSpjaGlwID0gJmNoaXBzW2lkLT5kcml2ZXJfZGF0YV07CiAJc3RydWN0IGkyY19hZGFwdGVyCSphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlpbnQJCQl3YW50X2lycSA9IGZhbHNlOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLAogCQkJSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKQEAgLTM1Myw2ICs1OTcsMTIgQEAKIAlzd2l0Y2ggKGRzMTMwNy0+dHlwZSkgewogCWNhc2UgZHNfMTMzNzoKIAljYXNlIGRzXzEzMzk6CisJCS8qIGhhcyBJUlE/ICovCisJCWlmIChkczEzMDctPmNsaWVudC0+aXJxID4gMCAmJiBjaGlwLT5hbGFybSkgeworCQkJSU5JVF9XT1JLKCZkczEzMDctPndvcmssIGRzMTMwN193b3JrKTsKKwkJCXdhbnRfaXJxID0gdHJ1ZTsKKwkJfQorCiAJCWRzMTMwNy0+cmVnX2FkZHIgPSBEUzEzMzdfUkVHX0NPTlRST0w7CiAJCWRzMTMwNy0+bXNnWzFdLmxlbiA9IDI7CiAKQEAgLTM2OSw4ICs2MTksMjAgQEAKIAogCQkvKiBvc2NpbGxhdG9yIG9mZj8gIHR1cm4gaXQgb24sIHNvIGNsb2NrIGNhbiB0aWNrLiAqLwogCQlpZiAoZHMxMzA3LT5yZWdzWzBdICYgRFMxMzM3X0JJVF9uRU9TQykKLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wsCi0JCQkJZHMxMzA3LT5yZWdzWzBdICYgfkRTMTMzN19CSVRfbkVPU0MpOworCQkJZHMxMzA3LT5yZWdzWzBdICY9IH5EUzEzMzdfQklUX25FT1NDOworCisJCS8qIFVzaW5nIElSUT8gIERpc2FibGUgdGhlIHNxdWFyZSB3YXZlIGFuZCBib3RoIGFsYXJtcy4KKwkJICogRm9yIGRzMTMzOSwgYmUgc3VyZSBhbGFybXMgY2FuIHRyaWdnZXIgd2hlbiB3ZSdyZQorCQkgKiBydW5uaW5nIG9uIFZiYWNrdXAgKEJCU1FJKTsgd2UgYXNzdW1lIGRzMTMzNyB3aWxsCisJCSAqIGlnbm9yZSB0aGF0IGJpdAorCQkgKi8KKwkJaWYgKHdhbnRfaXJxKSB7CisJCQlkczEzMDctPnJlZ3NbMF0gfD0gRFMxMzM3X0JJVF9JTlRDTiB8IERTMTMzOV9CSVRfQkJTUUk7CisJCQlkczEzMDctPnJlZ3NbMF0gJj0gfihEUzEzMzdfQklUX0EySUUgfCBEUzEzMzdfQklUX0ExSUUpOworCQl9CisKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwKKwkJCQkJCQlkczEzMDctPnJlZ3NbMF0pOwogCiAJCS8qIG9zY2lsbGF0b3IgZmF1bHQ/ICBjbGVhciBmbGFnLCBhbmQgd2FybiAqLwogCQlpZiAoZHMxMzA3LT5yZWdzWzFdICYgRFMxMzM3X0JJVF9PU0YpIHsKQEAgLTQ0NiwxOCArNzA4LDE4IEBACiAJfQogCiAJdG1wID0gZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfU0VDU107Ci0JdG1wID0gQkNEMkJJTih0bXAgJiAweDdmKTsKKwl0bXAgPSBiY2QyYmluKHRtcCAmIDB4N2YpOwogCWlmICh0bXAgPiA2MCkKIAkJZ290byBleGl0X2JhZDsKLQl0bXAgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKKwl0bXAgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01EQVldICYgMHgzZik7CisJdG1wID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAzMSkKIAkJZ290byBleGl0X2JhZDsKIAotCXRtcCA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZik7CisJdG1wID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NT05USF0gJiAweDFmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMTIpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKQEAgLTQ3NiwxNCArNzM4LDE0IEBACiAJCS8qIEJlIHN1cmUgd2UncmUgaW4gMjQgaG91ciBtb2RlLiAgTXVsdGktbWFzdGVyIHN5c3RlbXMKIAkJICogdGFrZSBub3RlLi4uCiAJCSAqLwotCQl0bXAgPSBCQ0QyQklOKHRtcCAmIDB4MWYpOworCQl0bXAgPSBiY2QyYmluKHRtcCAmIDB4MWYpOwogCQlpZiAodG1wID09IDEyKQogCQkJdG1wID0gMDsKIAkJaWYgKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdICYgRFMxMzA3X0JJVF9QTSkKIAkJCXRtcCArPSAxMjsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJRFMxMzA3X1JFR19IT1VSLAotCQkJCUJJTjJCQ0QodG1wKSk7CisJCQkJYmluMmJjZCh0bXApKTsKIAl9CiAKIAlkczEzMDctPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoY2xpZW50LT5uYW1lLCAmY2xpZW50LT5kZXYsCkBAIC00OTUsMTAgKzc1NywyMiBAQAogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKKwlpZiAod2FudF9pcnEpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEoY2xpZW50LT5pcnEsIGRzMTMwN19pcnEsIDAsCisJCQkgIGRzMTMwNy0+cnRjLT5uYW1lLCBjbGllbnQpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkidW5hYmxlIHRvIHJlcXVlc3QgSVJRIVxuIik7CisJCQlnb3RvIGV4aXRfaXJxOworCQl9CisJCXNldF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncyk7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZ290IElSUSAlZFxuIiwgY2xpZW50LT5pcnEpOworCX0KKwogCWlmIChjaGlwLT5udnJhbTU2KSB7CiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmY2xpZW50LT5kZXYua29iaiwgJm52cmFtKTsKIAkJaWYgKGVyciA9PSAwKSB7Ci0JCQlkczEzMDctPmhhc19udnJhbSA9IHRydWU7CisJCQlzZXRfYml0KEhBU19OVlJBTSwgJmRzMTMwNy0+ZmxhZ3MpOwogCQkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiNTYgYnl0ZXMgbnZyYW1cbiIpOwogCQl9CiAJfQpAQCAtNTEyLDcgKzc4Niw5IEBACiAJCQlkczEzMDctPnJlZ3NbMl0sIGRzMTMwNy0+cmVnc1szXSwKIAkJCWRzMTMwNy0+cmVnc1s0XSwgZHMxMzA3LT5yZWdzWzVdLAogCQkJZHMxMzA3LT5yZWdzWzZdKTsKLQorZXhpdF9pcnE6CisJaWYgKGRzMTMwNy0+cnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzA3LT5ydGMpOwogZXhpdF9mcmVlOgogCWtmcmVlKGRzMTMwNyk7CiAJcmV0dXJuIGVycjsKQEAgLTUyMCw5ICs3OTYsMTQgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgZHMxMzA3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBkczEzMDcJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWlmIChkczEzMDctPmhhc19udnJhbSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKSB7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjbGllbnQpOworCQljYW5jZWxfd29ya19zeW5jKCZkczEzMDctPndvcmspOworCX0KKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEFTX05WUkFNLCAmZHMxMzA3LT5mbGFncykpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY2xpZW50LT5kZXYua29iaiwgJm52cmFtKTsKIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihkczEzMDctPnJ0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKaW5kZXggYTE1MDQxOC4uYTViMGZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwpAQCAtNDI5LDEyICs0MjksMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBkczEzNzRfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaWYgKGNsaWVudC0+aXJxID49IDAgJiYgZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGNsaWVudC0+aXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczEzNzRfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaWYgKGNsaWVudC0+aXJxID49IDAgJiYgZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBkczEzNzRfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGRzMTM3NF9yZXN1bWUJTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczEzNzRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInJ0Yy1kczEzNzQiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IGRzMTM3NF9wcm9iZSwKKwkuc3VzcGVuZCA9IGRzMTM3NF9zdXNwZW5kLAorCS5yZXN1bWUgPSBkczEzNzRfcmVzdW1lLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkczEzNzRfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSBkczEzNzRfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCmluZGV4IDBmMGQyN2QuLjI1Y2FhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKQEAgLTE1Myw4ICsxNTMsOCBAQAogCS8qCiAJICogc2V0IHRoZSB3ZG9nIHZhbHVlcyBpbiB0aGUgd2RvZyByZWdpc3RlcnMKIAkgKi8KLQlydGNfd3JpdGUoQklOMkJDRChkZWNpc2Vjb25kcyAlIDEwMCksIERTMTUxMV9XRF9NU0VDKTsKLQlydGNfd3JpdGUoQklOMkJDRChkZWNpc2Vjb25kcyAvIDEwMCksIERTMTUxMV9XRF9TRUMpOworCXJ0Y193cml0ZShiaW4yYmNkKGRlY2lzZWNvbmRzICUgMTAwKSwgRFMxNTExX1dEX01TRUMpOworCXJ0Y193cml0ZShiaW4yYmNkKGRlY2lzZWNvbmRzIC8gMTAwKSwgRFMxNTExX1dEX1NFQyk7CiAJLyoKIAkgKiBzZXQgd2RvZyBlbmFibGUgYW5kIHdkb2cgJ3N0ZWVyaW5nJyBiaXQgdG8gaXNzdWUgYSByZXNldAogCSAqLwpAQCAtMjIwLDEzICsyMjAsMTMgQEAKIAkvKgogCSAqIGVhY2ggcmVnaXN0ZXIgaXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHZhbGlkIGJpdHMKIAkgKi8KLQlzZWMgPSBCSU4yQkNEKHNlYykgJiAweDdmOwotCW1pbiA9IEJJTjJCQ0QobWluKSAmIDB4N2Y7Ci0JaHJzID0gQklOMkJDRChocnMpICYgMHgzZjsKLQlkYXkgPSBCSU4yQkNEKGRheSkgJiAweDNmOwotCW1vbiA9IEJJTjJCQ0QobW9uKSAmIDB4MWY7Ci0JeXJzID0gQklOMkJDRCh5cnMpICYgMHhmZjsKLQljZW4gPSBCSU4yQkNEKGNlbikgJiAweGZmOworCXNlYyA9IGJpbjJiY2Qoc2VjKSAmIDB4N2Y7CisJbWluID0gYmluMmJjZChtaW4pICYgMHg3ZjsKKwlocnMgPSBiaW4yYmNkKGhycykgJiAweDNmOworCWRheSA9IGJpbjJiY2QoZGF5KSAmIDB4M2Y7CisJbW9uID0gYmluMmJjZChtb24pICYgMHgxZjsKKwl5cnMgPSBiaW4yYmNkKHlycykgJiAweGZmOworCWNlbiA9IGJpbjJiY2QoY2VuKSAmIDB4ZmY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHMxNTExX2xvY2ssIGZsYWdzKTsKIAlydGNfZGlzYWJsZV91cGRhdGUoKTsKQEAgLTI2NCwxNCArMjY0LDE0IEBACiAJcnRjX2VuYWJsZV91cGRhdGUoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkczE1MTFfbG9jaywgZmxhZ3MpOwogCi0JcnRjX3RtLT50bV9zZWMgPSBCQ0QyQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlydGNfdG0tPnRtX21pbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9taW4pOwotCXJ0Y190bS0+dG1faG91ciA9IEJDRDJCSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlydGNfdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JcnRjX3RtLT50bV93ZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX3dkYXkpOwotCXJ0Y190bS0+dG1fbW9uID0gQkNEMkJJTihydGNfdG0tPnRtX21vbik7Ci0JcnRjX3RtLT50bV95ZWFyID0gQkNEMkJJTihydGNfdG0tPnRtX3llYXIpOwotCWNlbnR1cnkgPSBCQ0QyQklOKGNlbnR1cnkpICogMTAwOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX3RtLT50bV93ZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKKwljZW50dXJ5ID0gYmNkMmJpbihjZW50dXJ5KSAqIDEwMDsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTMwNCwxNiArMzA0LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSAmIDB4M2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0RBVEUpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9ob3VyIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX2hvdXIpICYgMHgzZiwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91cikgJiAweDNmLAogCSAgICAgICBSVENfQUxBUk1fSE9VUik7CiAJcnRjX3dyaXRlKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pICYgMHg3ZiwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSAmIDB4N2YsCiAJICAgICAgIFJUQ19BTEFSTV9NSU4pOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSAmIDB4N2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX3NlYykgJiAweDdmLAogCSAgICAgICBSVENfQUxBUk1fU0VDKTsKIAlydGNfd3JpdGUocnRjX3JlYWQoUlRDX0NNRCkgfCAocGRhdGEtPmlycWVuID8gUlRDX1RJRSA6IDApLCBSVENfQ01EKTsKIAlydGNfcmVhZChSVENfQ01EMSk7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KQEAgLTM3OSwxOCArMzc5LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSBzdGF0aWMgdm9pZAotZHMxNTExX3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQlpZiAocGRhdGEtPmlycSA+PSAwKSB7Ci0JCXBkYXRhLT5pcnFlbiA9IDA7Ci0JCWRzMTUxMV9ydGNfdXBkYXRlX2FsYXJtKHBkYXRhKTsKLQl9Ci19Ci0KICBzdGF0aWMgaW50CiBkczE1MTFfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC00MjgsNyArNDE2LDYgQEAKIAkuc2V0X3RpbWUJPSBkczE1MTFfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxNTExX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBkczE1MTFfcnRjX3NldF9hbGFybSwKLQkucmVsZWFzZQk9IGRzMTUxMV9ydGNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gZHMxNTExX3J0Y19pb2N0bCwKIH07CiAKQEAgLTQ5NCw3ICs0ODEsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJudnJhbSIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzE1MTFfUkFNX01BWCwKIAkucmVhZCA9IGRzMTUxMV9udnJhbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCmluZGV4IGExOWYxMTQuLmI5NDc1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKQEAgLTc4LDE3ICs3OCwxNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcjsKIAl1OCBjZW50dXJ5OwogCi0JY2VudHVyeSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCWNlbnR1cnkgPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCXdyaXRlYihSVENfV1JJVEUsIHBkYXRhLT5pb2FkZHIgKyBSVENfQ09OVFJPTCk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIHJlZ2lzdGVyICovCiAJd3JpdGViKFJUQ19XUklURSB8IChjZW50dXJ5ICYgUlRDX0NFTlRVUllfTUFTSyksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKQEAgLTExOCwxNCArMTE4LDE0IEBACiAJeWVhciA9IHJlYWRiKGlvYWRkciArIFJUQ19ZRUFSKTsKIAljZW50dXJ5ID0gcmVhZGIoaW9hZGRyICsgUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKIAl3cml0ZWIoMCwgaW9hZGRyICsgUlRDX0NPTlRST0wpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKQEAgLTE0MSwxNiArMTQxLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWIocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWRheSksCiAJICAgICAgIGlvYWRkciArIFJUQ19EQVRFX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91ciksCiAJICAgICAgIGlvYWRkciArIFJUQ19IT1VSU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9taW4pLAogCSAgICAgICBpb2FkZHIgKyBSVENfTUlOVVRFU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX3NlYyA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9zZWMpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpLAogCSAgICAgICBpb2FkZHIgKyBSVENfU0VDT05EU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5pcnFlbiA/IFJUQ19JTlRTX0FFIDogMCwgaW9hZGRyICsgUlRDX0lOVEVSUlVQVFMpOwogCXJlYWRiKGlvYWRkciArIFJUQ19GTEFHUyk7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KQEAgLTIwNywxNyArMjA3LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMTU1M19ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKHBkYXRhLT5pcnEgPj0gMCkgewotCQlwZGF0YS0+aXJxZW4gPSAwOwotCQlkczE1NTNfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGRzMTU1M19ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjU0LDcgKzI0Myw2IEBACiAJLnNldF90aW1lCT0gZHMxNTUzX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTU1M19ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxNTUzX3J0Y19zZXRfYWxhcm0sCi0JLnJlbGVhc2UJPSBkczE1NTNfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGRzMTU1M19ydGNfaW9jdGwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKaW5kZXggNmZhNDU1Ni4uMzQxZDdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwpAQCAtOSwxNyArOSwxMCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjMiCi0KLS8qIEFkZHJlc3NlcyB0byBzY2FuOiBub25lLiBUaGlzIGNoaXAgY2Fubm90IGJlIGRldGVjdGVkLiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EOworI2RlZmluZSBEUlZfVkVSU0lPTiAiMC40IgogCiAvKiBSZWdpc3RlcnMgKi8KIApAQCAtMjksOCArMjIsNyBAQAogCiAjZGVmaW5lIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDCTB4ODAKIAotLyogUHJvdG90eXBlcyAqLwotc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTY3Ml9kcml2ZXI7CiAKIC8qCiAgKiBJbiB0aGUgcm91dGluZXMgdGhhdCBkZWFsIGRpcmVjdGx5IHdpdGggdGhlIGRzMTY3MiBoYXJkd2FyZSwgd2UgdXNlCkBAIC00NCw4ICszNiw4IEBACiAJdW5zaWduZWQgY2hhciBidWZbNF07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KLQkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCA0LCBidWYgfSwJLyogcmVhZCBkYXRlICovCisJCXtjbGllbnQtPmFkZHIsIDAsIDEsICZhZGRyfSwJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJe2NsaWVudC0+YWRkciwgSTJDX01fUkQsIDQsIGJ1Zn0sCS8qIHJlYWQgZGF0ZSAqLwogCX07CiAKIAkvKiByZWFkIGRhdGUgcmVnaXN0ZXJzICovCkBAIC04MCw3ICs3Miw3IEBACiAJYnVmWzJdID0gKHNlY3MgJiAweDAwMDBGRjAwKSA+PiA4OwogCWJ1ZlszXSA9IChzZWNzICYgMHgwMEZGMDAwMCkgPj4gMTY7CiAJYnVmWzRdID0gKHNlY3MgJiAweEZGMDAwMDAwKSA+PiAyNDsKLQlidWZbNV0gPSAwOwkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCisJYnVmWzVdID0gMDsJCS8qIHNldCBjb250cm9sIHJlZyB0byBlbmFibGUgY291bnRpbmcgKi8KIAogCXhmZXIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDYpOwogCWlmICh4ZmVyICE9IDYpIHsKQEAgLTEyNyw4ICsxMTksOCBAQAogCXVuc2lnbmVkIGNoYXIgYWRkciA9IERTMTY3Ml9SRUdfQ09OVFJPTDsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJeyBjbGllbnQtPmFkZHIsIDAsIDEsICZhZGRyIH0sCQkvKiBzZXR1cCByZWFkIHB0ciAqLwotCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDEsIHN0YXR1cyB9LAkvKiByZWFkIGNvbnRyb2wgKi8KKwkJe2NsaWVudC0+YWRkciwgMCwgMSwgJmFkZHJ9LAkvKiBzZXR1cCByZWFkIHB0ciAqLworCQl7Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgMSwgc3RhdHVzfSwJLyogcmVhZCBjb250cm9sICovCiAJfTsKIAogCS8qIHJlYWQgY29udHJvbCByZWdpc3RlciAqLwpAQCAtMTQxLDcgKzEzMyw4IEBACiB9CiAKIC8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19jb250cm9sKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXU4IGNvbnRyb2w7CkBAIC0xNTIsODUgKzE0NSw0NiBAQAogCQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIChjb250cm9sICYgRFMxNjcyX1JFR19DT05UUk9MX0VPU0MpCi0JCQkJCT8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7CisJCSAgICAgICA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoY29udHJvbCwgU19JUlVHTywgc2hvd19jb250cm9sLCBOVUxMKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTY3Ml9ydGNfb3BzID0gewotCS5yZWFkX3RpbWUJPSBkczE2NzJfcnRjX3JlYWRfdGltZSwKLQkuc2V0X3RpbWUJPSBkczE2NzJfcnRjX3NldF90aW1lLAotCS5zZXRfbW1zcwk9IGRzMTY3Ml9ydGNfc2V0X21tc3MsCisJLnJlYWRfdGltZSA9IGRzMTY3Ml9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IGRzMTY3Ml9ydGNfc2V0X3RpbWUsCisJLnNldF9tbXNzID0gZHMxNjcyX3J0Y19zZXRfbW1zcywKIH07CiAKLXN0YXRpYyBpbnQgZHMxNjcyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGRzMTY3Ml9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGRzMTY3Ml9wcm9iZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZHMxNjcyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBlcnI7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0gCWlmIChydGMpCisJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKLQlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQotCQlyZXR1cm4gZXJyOwotCi0Ja2ZyZWUoY2xpZW50KTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMxNjcyX2RyaXZlciA9IHsKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiZHMxNjcyIiwKLQl9LAotCS5pZAkJPSBJMkNfRFJJVkVSSURfRFMxNjcyLAotCS5hdHRhY2hfYWRhcHRlciA9ICZkczE2NzJfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50CT0gJmRzMTY3Ml9kZXRhY2gsCi19OwotCi1zdGF0aWMgaW50IGRzMTY3Ml9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJdTggY29udHJvbDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAKLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCEoY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIEkyQyBjbGllbnQgKi8KLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+ZHJpdmVyID0gJmRzMTY3Ml9kcml2ZXI7Ci0JY2xpZW50LT5hZGFwdGVyCT0gYWRhcHRlcjsKLQotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBkczE2NzJfZHJpdmVyLmRyaXZlci5uYW1lLCBJMkNfTkFNRV9TSVpFKTsKLQotCS8qIEluZm9ybSB0aGUgaTJjIGxheWVyICovCi0JaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJZ290byBleGl0X2tmcmVlOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGRzMTY3Ml9kcml2ZXIuZHJpdmVyLm5hbWUsICZjbGllbnQtPmRldiwKLQkJCQkmZHMxNjcyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwkJCQkgICZkczE2NzJfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCi0JaWYgKElTX0VSUihydGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBleGl0X2RldGFjaDsKLQl9CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKIApAQCAtMjQxLDcgKzE5NSw3IEBACiAKIAlpZiAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQogCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJPc2NpbGxhdG9yIG5vdCBlbmFibGVkLiAiCi0JCQkJCSJTZXQgdGltZSB0byBlbmFibGUuXG4iKTsKKwkJCSAiU2V0IHRpbWUgdG8gZW5hYmxlLlxuIik7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jb250cm9sKTsKQEAgLTI1MCwxOSArMjA0LDE5IEBACiAKIAlyZXR1cm4gMDsKIAotZXhpdF9kZXZyZWc6CisgZXhpdF9kZXZyZWc6CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7Ci0KLWV4aXRfZGV0YWNoOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0KLWV4aXRfa2ZyZWU6Ci0Ja2ZyZWUoY2xpZW50KTsKLQotZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMxNjcyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJydGMtZHMxNjcyIiwKKwkJICAgfSwKKwkucHJvYmUgPSAmZHMxNjcyX3Byb2JlLAorCS5yZW1vdmUgPSAmZHMxNjcyX3JlbW92ZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRzMTY3Ml9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkczE2NzJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwppbmRleCAyNGQzNWVkZS4uOGJjODUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwpAQCAtNjYsMTcgKzY2LDE3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyX3J0YzsKIAl1OCBjZW50dXJ5OwogCi0JY2VudHVyeSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCWNlbnR1cnkgPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCXdyaXRlYihSVENfV1JJVEUsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwogCiAJLyogUlRDX0NFTlRVUlkgYW5kIFJUQ19DT05UUk9MIHNoYXJlIHNhbWUgcmVnaXN0ZXIgKi8KIAl3cml0ZWIoUlRDX1dSSVRFIHwgKGNlbnR1cnkgJiBSVENfQ0VOVFVSWV9NQVNLKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIAl5ZWFyID0gcmVhZGIoaW9hZGRyICsgUlRDX1lFQVIpOwogCWNlbnR1cnkgPSByZWFkYihpb2FkZHIgKyBSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfQ09OVFJPTCk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oc2Vjb25kKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihtaW51dGUpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF5KTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4od2Vlayk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4obW9udGgpIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRtLT50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHllYXIpICsgQkNEMkJJTihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHllYXIpICsgYmNkMmJpbihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJyZXRyaWV2ZWQgZGF0ZS90aW1lIGlzIG5vdCB2YWxpZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDEzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qIGRyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYworICoKKyAqIERyaXZlciBmb3IgRGFsbGFzIFNlbWljb25kdWN0b3IgKERTMzIzNCkgU1BJIFJUQyB3aXRoIEludGVncmF0ZWQgQ3J5c3RhbAorICogYW5kIFNSQU0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1JTU9NYXggV2lyZWxlc3MgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqIDA3LU1heS0yMDA4OiBEZW5uaXMgQWJlcmlsbGEgPGRlbnp6emhvbWVAeWFob28uY29tPgorICoJCS0gQ3JlYXRlZCBiYXNlZCBvbiB0aGUgbWF4NjkwMiBjb2RlLiBPbmx5IGltcGxlbWVudHMgdGhlCisgKgkJICBkYXRlL3RpbWUga2VlcGluZyBmdW5jdGlvbnM7IG5vIFNSQU0geWV0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisKKyNkZWZpbmUgRFMzMjM0X1JFR19TRUNPTkRTCTB4MDAKKyNkZWZpbmUgRFMzMjM0X1JFR19NSU5VVEVTCTB4MDEKKyNkZWZpbmUgRFMzMjM0X1JFR19IT1VSUwkweDAyCisjZGVmaW5lIERTMzIzNF9SRUdfREFZCQkweDAzCisjZGVmaW5lIERTMzIzNF9SRUdfREFURQkJMHgwNAorI2RlZmluZSBEUzMyMzRfUkVHX01PTlRICTB4MDUKKyNkZWZpbmUgRFMzMjM0X1JFR19ZRUFSCQkweDA2CisjZGVmaW5lIERTMzIzNF9SRUdfQ0VOVFVSWQkoMSA8PCA3KSAvKiBCaXQgNyBvZiB0aGUgTW9udGggcmVnaXN0ZXIgKi8KKworI2RlZmluZSBEUzMyMzRfUkVHX0NPTlRST0wJMHgwRQorI2RlZmluZSBEUzMyMzRfUkVHX0NPTlRfU1RBVAkweDBGCisKKyN1bmRlZiBEUzMyMzRfREVCVUcKKworc3RydWN0IGRzMzIzNCB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1OCBidWZbOF07IC8qIEJ1cnN0IHJlYWQ6IGFkZHIgKyA3IHJlZ3MgKi8KKwl1OCB0eF9idWZbMl07CisJdTggcnhfYnVmWzJdOworfTsKKworc3RhdGljIHZvaWQgZHMzMjM0X3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsCisJCQkJdW5zaWduZWQgY2hhciBkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwkvKiBNU0IgbXVzdCBiZSAnMScgdG8gaW5kaWNhdGUgd3JpdGUgKi8KKwlidWZbMF0gPSBhZGRyZXNzIHwgMHg4MDsKKwlidWZbMV0gPSBkYXRhOworCisJc3BpX3dyaXRlKHNwaSwgYnVmLCAyKTsKK30KKworc3RhdGljIGludCBkczMyMzRfZ2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGRzMzIzNCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtZXNzYWdlOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcjsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEJ1aWxkIG91ciBzcGkgbWVzc2FnZSAqLworCXNwaV9tZXNzYWdlX2luaXQoJm1lc3NhZ2UpOworCW1lbXNldCgmeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKKworCS8qIEFkZHJlc3MgKyBkdW1teSB0eCBieXRlICovCisJeGZlci5sZW4gPSAyOworCXhmZXIudHhfYnVmID0gY2hpcC0+dHhfYnVmOworCXhmZXIucnhfYnVmID0gY2hpcC0+cnhfYnVmOworCisJY2hpcC0+dHhfYnVmWzBdID0gYWRkcmVzczsKKwljaGlwLT50eF9idWZbMV0gPSAweGZmOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXIsICZtZXNzYWdlKTsKKworCS8qIGRvIHRoZSBpL28gKi8KKwlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZtZXNzYWdlKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IG1lc3NhZ2Uuc3RhdHVzOworCWVsc2UKKwkJcmV0dXJuIHN0YXR1czsKKworCSpkYXRhID0gY2hpcC0+cnhfYnVmWzFdOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkczMyMzRfZ2V0X2RhdGV0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpkdCkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBkczMyMzQgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbWVzc2FnZTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJaW50IHN0YXR1czsKKworCS8qIGJ1aWxkIHRoZSBtZXNzYWdlICovCisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KCZ4ZmVyLCAwLCBzaXplb2YoeGZlcikpOworCXhmZXIubGVuID0gMSArIDc7CS8qIEFkZHIgKyA3IHJlZ2lzdGVycyAqLworCXhmZXIudHhfYnVmID0gY2hpcC0+YnVmOworCXhmZXIucnhfYnVmID0gY2hpcC0+YnVmOworCWNoaXAtPmJ1ZlswXSA9IDB4MDA7CS8qIFN0YXJ0IGFkZHJlc3MgKi8KKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1lc3NhZ2UpOworCisJLyogZG8gdGhlIGkvbyAqLworCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm1lc3NhZ2UpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gbWVzc2FnZS5zdGF0dXM7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogU2Vjb25kcywgTWludXRlcywgSG91cnMsIERheSwgRGF0ZSwgTW9udGgsIFllYXIgKi8KKwlkdC0+dG1fc2VjCT0gYmNkMmJpbihjaGlwLT5idWZbMV0pOworCWR0LT50bV9taW4JPSBiY2QyYmluKGNoaXAtPmJ1ZlsyXSk7CisJZHQtPnRtX2hvdXIJPSBiY2QyYmluKGNoaXAtPmJ1ZlszXSAmIDB4M2YpOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNF0pIC0gMTsgLyogMCA9IFN1biAqLworCWR0LT50bV9tZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNV0pOworCWR0LT50bV9tb24JPSBiY2QyYmluKGNoaXAtPmJ1Zls2XSAmIDB4MWYpIC0gMTsgLyogMCA9IEphbiAqLworCWR0LT50bV95ZWFyIAk9IGJjZDJiaW4oY2hpcC0+YnVmWzddICYgMHhmZikgKyAxMDA7IC8qIEFzc3VtZSAyMFlZICovCisKKyNpZmRlZiBEUzMyMzRfREVCVUcKKwlkZXZfZGJnKGRldiwgIlxuJXMgOiBSZWFkIFJUQyB2YWx1ZXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgInRtX2hvdXI6ICVpXG4iLCBkdC0+dG1faG91cik7CisJZGV2X2RiZyhkZXYsICJ0bV9taW4gOiAlaVxuIiwgZHQtPnRtX21pbik7CisJZGV2X2RiZyhkZXYsICJ0bV9zZWMgOiAlaVxuIiwgZHQtPnRtX3NlYyk7CisJZGV2X2RiZyhkZXYsICJ0bV93ZGF5OiAlaVxuIiwgZHQtPnRtX3dkYXkpOworCWRldl9kYmcoZGV2LCAidG1fbWRheTogJWlcbiIsIGR0LT50bV9tZGF5KTsKKwlkZXZfZGJnKGRldiwgInRtX21vbiA6ICVpXG4iLCBkdC0+dG1fbW9uKTsKKwlkZXZfZGJnKGRldiwgInRtX3llYXI6ICVpXG4iLCBkdC0+dG1feWVhcik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMzIzNF9zZXRfZGF0ZXRpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKmR0KQoreworI2lmZGVmIERTMzIzNF9ERUJVRworCWRldl9kYmcoZGV2LCAiXG4lcyA6IFNldHRpbmcgUlRDIHZhbHVlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZGV2LCAidG1fc2VjIDogJWlcbiIsIGR0LT50bV9zZWMpOworCWRldl9kYmcoZGV2LCAidG1fbWluIDogJWlcbiIsIGR0LT50bV9taW4pOworCWRldl9kYmcoZGV2LCAidG1faG91cjogJWlcbiIsIGR0LT50bV9ob3VyKTsKKwlkZXZfZGJnKGRldiwgInRtX3dkYXk6ICVpXG4iLCBkdC0+dG1fd2RheSk7CisJZGV2X2RiZyhkZXYsICJ0bV9tZGF5OiAlaVxuIiwgZHQtPnRtX21kYXkpOworCWRldl9kYmcoZGV2LCAidG1fbW9uIDogJWlcbiIsIGR0LT50bV9tb24pOworCWRldl9kYmcoZGV2LCAidG1feWVhcjogJWlcbiIsIGR0LT50bV95ZWFyKTsKKyNlbmRpZgorCisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX1NFQ09ORFMsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19NSU5VVEVTLCBiaW4yYmNkKGR0LT50bV9taW4pKTsKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfSE9VUlMsIGJpbjJiY2QoZHQtPnRtX2hvdXIpICYgMHgzZik7CisKKwkvKiAwID0gU3VuICovCisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX0RBWSwgYmluMmJjZChkdC0+dG1fd2RheSArIDEpKTsKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfREFURSwgYmluMmJjZChkdC0+dG1fbWRheSkpOworCisJLyogMCA9IEphbiAqLworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19NT05USCwgYmluMmJjZChkdC0+dG1fbW9uICsgMSkpOworCisJLyogQXNzdW1lIDIwWVkgYWx0aG91Z2ggd2UganVzdCB3YW50IHRvIG1ha2Ugc3VyZSBub3QgdG8gZ28gbmVnYXRpdmUuICovCisJaWYgKGR0LT50bV95ZWFyID4gMTAwKQorCQlkdC0+dG1feWVhciAtPSAxMDA7CisKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfWUVBUiwgYmluMmJjZChkdC0+dG1feWVhcikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIGRzMzIzNF9nZXRfZGF0ZXRpbWUoZGV2LCB0bSk7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZXR1cm4gZHMzMjM0X3NldF9kYXRldGltZShkZXYsIHRtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMzIzNF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSBkczMyMzRfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IGRzMzIzNF9zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgZHMzMjM0X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKKwlzdHJ1Y3QgZHMzMjM0ICpjaGlwOworCWludCByZXM7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJkczMyMzQiLAorCQkJCSZzcGktPmRldiwgJmRzMzIzNF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJc3BpLT5tb2RlID0gU1BJX01PREVfMzsKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCXNwaV9zZXR1cChzcGkpOworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczMyMzQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaXApIHsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljaGlwLT5ydGMgPSBydGM7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgY2hpcCk7CisKKwlyZXMgPSBkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfU0VDT05EUywgJnRtcCk7CisJaWYgKHJlcykgeworCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBDb250cm9sIHNldHRpbmdzCisJICoKKwkgKiBDT05UUk9MX1JFRworCSAqIEJJVCA3CTYJNQk0CTMJMgkxCTAKKwkgKiAgICAgRU9TQwlCQlNRVwlDT05WCVJTMglSUzEJSU5UQ04JQTJJRQlBMUlFCisJICoKKwkgKiAgICAgMAkwCTAJMQkxCTEJMAkwCisJICoKKwkgKiBDT05UUk9MX1NUQVRfUkVHCisJICogQklUIDcJNgk1CTQJMwkyCTEJMAorCSAqICAgICBPU0YJQkIzMmtIeglDUkFURTEJQ1JBVEUwCUVOMzJrSHoJQlNZCUEyRglBMUYKKwkgKgorCSAqICAgICAxCTAJMAkwCTEJMAkwCTAKKwkgKi8KKwlkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfQ09OVFJPTCwgJnRtcCk7CisJZHMzMjM0X3NldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRST0wsIHRtcCAmIDB4MWMpOworCisJZHMzMjM0X2dldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRfU1RBVCwgJnRtcCk7CisJZHMzMjM0X3NldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRfU1RBVCwgdG1wICYgMHg4OCk7CisKKwkvKiBQcmludCBvdXIgc2V0dGluZ3MgKi8KKwlkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfQ09OVFJPTCwgJnRtcCk7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiQ29udHJvbCBSZWc6IDB4JTAyeFxuIiwgdG1wKTsKKworCWRzMzIzNF9nZXRfcmVnKCZzcGktPmRldiwgRFMzMjM0X1JFR19DT05UX1NUQVQsICZ0bXApOworCWRldl9pbmZvKCZzcGktPmRldiwgIkN0cmwvU3RhdCBSZWc6IDB4JTAyeFxuIiwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBkczMyMzRfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRzMzIzNCAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGNoaXAtPnJ0YzsKKworCWlmIChydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJa2ZyZWUoY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGRzMzIzNF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJID0gImRzMzIzNCIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkgPSBkczMyMzRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRzMzIzNF9yZW1vdmUpLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgZHMzMjM0X2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJEUzMyMzQgU1BJIFJUQyBEcml2ZXJcbiIpOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZkczMyMzRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGRzMzIzNF9pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIGRzMzIzNF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZkczMyMzRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRzMzIzNF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEUzMyMzQgU1BJIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRlbm5pcyBBYmVyaWxsYSA8ZGVuenp6aG9tZUB5YWhvby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKaW5kZXggYWJmZGZjYi4uM2E3YmUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwpAQCAtMTMxLDE3ICsxMzEsMTcgQEAKIAkJCWZtMzEzMC0+cmVnc1sweGNdLCBmbTMxMzAtPnJlZ3NbMHhkXSwKIAkJCWZtMzEzMC0+cmVnc1sweGVdKTsKIAotCXQtPnRtX3NlYyA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU10gJiAweDdmKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01JTlVURVNdICYgMHg3Zik7CisJdC0+dG1fc2VjID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19TRUNPTkRTXSAmIDB4N2YpOworCXQtPnRtX21pbiA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKIAl0bXAgPSBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19IT1VSU10gJiAweDNmOwotCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHRtcCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFZXSAmIDB4MDcpIC0gMTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOworCXQtPnRtX2hvdXIgPSBiY2QyYmluKHRtcCk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFZXSAmIDB4MDcpIC0gMTsKKwl0LT50bV9tZGF5ID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOwogCXRtcCA9IGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01PTlRIU10gJiAweDFmOwotCXQtPnRtX21vbiA9IEJDRDJCSU4odG1wKSAtIDE7CisJdC0+dG1fbW9uID0gYmNkMmJpbih0bXApIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIENGIGJpdCAqLwotCXQtPnRtX3llYXIgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1lFQVJTXSkgKyAxMDA7CisJdC0+dG1feWVhciA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfWUVBUlNdKSArIDEwMDsKIAogCWRldl9kYmcoZGV2LCAiJXMgc2Vjcz0lZCwgbWlucz0lZCwgIgogCQkiaG91cnM9JWQsIG1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTE2NywxNiArMTY3LDE2IEBACiAJCXQtPnRtX21vbiwgdC0+dG1feWVhciwgdC0+dG1fd2RheSk7CiAKIAkvKiBmaXJzdCByZWdpc3RlciBhZGRyICovCi0JYnVmW0ZNMzEzMF9SVENfU0VDT05EU10gPSBCSU4yQkNEKHQtPnRtX3NlYyk7Ci0JYnVmW0ZNMzEzMF9SVENfTUlOVVRFU10gPSBCSU4yQkNEKHQtPnRtX21pbik7Ci0JYnVmW0ZNMzEzMF9SVENfSE9VUlNdID0gQklOMkJDRCh0LT50bV9ob3VyKTsKLQlidWZbRk0zMTMwX1JUQ19EQVldID0gQklOMkJDRCh0LT50bV93ZGF5ICsgMSk7Ci0JYnVmW0ZNMzEzMF9SVENfREFURV0gPSBCSU4yQkNEKHQtPnRtX21kYXkpOwotCWJ1ZltGTTMxMzBfUlRDX01PTlRIU10gPSBCSU4yQkNEKHQtPnRtX21vbiArIDEpOworCWJ1ZltGTTMxMzBfUlRDX1NFQ09ORFNdID0gYmluMmJjZCh0LT50bV9zZWMpOworCWJ1ZltGTTMxMzBfUlRDX01JTlVURVNdID0gYmluMmJjZCh0LT50bV9taW4pOworCWJ1ZltGTTMxMzBfUlRDX0hPVVJTXSA9IGJpbjJiY2QodC0+dG1faG91cik7CisJYnVmW0ZNMzEzMF9SVENfREFZXSA9IGJpbjJiY2QodC0+dG1fd2RheSArIDEpOworCWJ1ZltGTTMxMzBfUlRDX0RBVEVdID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwlidWZbRk0zMTMwX1JUQ19NT05USFNdID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCiAJdG1wID0gdC0+dG1feWVhciAtIDEwMDsKLQlidWZbRk0zMTMwX1JUQ19ZRUFSU10gPSBCSU4yQkNEKHRtcCk7CisJYnVmW0ZNMzEzMF9SVENfWUVBUlNdID0gYmluMmJjZCh0bXApOwogCiAJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKQEAgLTIyMiwxMSArMjIyLDExIEBACiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10pOwogCiAKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdICYgMHg3Rik7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NSU5VVEVTXSAmIDB4N0YpOwotCXRtLT50bV9ob3VyCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0hPVVJTXSAmIDB4M0YpOwotCXRtLT50bV9tZGF5CT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdICYgMHgzRik7Ci0JdG0tPnRtX21vbgk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdICYgMHgxRik7CisJdG0tPnRtX3NlYwk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSAmIDB4N0YpOworCXRtLT50bV9taW4JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gJiAweDdGKTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gJiAweDNGKTsKKwl0bS0+dG1fbWRheQk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSAmIDB4M0YpOworCXRtLT50bV9tb24JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSAmIDB4MUYpOwogCWlmICh0bS0+dG1fbW9uID4gMCkKIAkJdG0tPnRtX21vbiAtPSAxOyAvKiBSVEMgaXMgMS0xMiwgdG1fbW9uIGlzIDAtMTEgKi8KIAlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKQEAgLTI1MiwyMyArMjUyLDIzIEBACiAKIAlpZiAodG0tPnRtX3NlYyAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9zZWMpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAweDgwOwogCiAJaWYgKHRtLT50bV9taW4gIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gPQotCQkJQklOMkJDRCh0bS0+dG1fbWluKSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9taW4pIHwgMHg4MDsKIAogCWlmICh0bS0+dG1faG91ciAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gPQotCQkJQklOMkJDRCh0bS0+dG1faG91cikgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1faG91cikgfCAweDgwOwogCiAJaWYgKHRtLT50bV9tZGF5ICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdID0KLQkJCUJJTjJCQ0QodG0tPnRtX21kYXkpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX21kYXkpIHwgMHg4MDsKIAogCWlmICh0bS0+dG1fbW9uICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10gPQotCQkJQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgfCAweDgwOwogCiAJZGV2X2RiZyhkZXYsICJhbGFybSB3cml0ZSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdLApAQCAtNDE0LDE4ICs0MTQsMTggQEAKIAkvKiBUT0RPICovCiAJLyogVE9ETyBuZWVkIHRvIHNhbml0eSBjaGVjayBhbGFybSAqLwogCXRtcCA9IGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1NFQ09ORFNdOwotCXRtcCA9IEJDRDJCSU4odG1wICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7Ci0JdG1wID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAzMSkKIAkJZ290byBleGl0X2JhZDsKIAotCXRtcCA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWYpOworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWYpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAxMikKIAkJZ290byBleGl0X2JhZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYyBiL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKaW5kZXggYTgxYWRhYi4uMmNkNzdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCkBAIC0yNTksMjYgKzI1OSwyNiBAQAogCQlyZXR1cm4gc3I7CiAJfQogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19TQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfTU5dKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX1NDXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NTl0pOwogCiAJLyogSFIgZmllbGQgaGFzIGEgbW9yZSBjb21wbGV4IGludGVycHJldGF0aW9uICovCiAJewogCQljb25zdCB1OCBfaHIgPSByZWdzW0lTTDEyMDhfUkVHX0hSXTsKIAkJaWYgKF9ociAmIElTTDEyMDhfUkVHX0hSX01JTCkJLyogMjRoIGZvcm1hdCAqLwotCQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKF9ociAmIDB4M2YpOworCQkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKF9ociAmIDB4M2YpOwogCQllbHNlIHsKIAkJCS8qIDEyaCBmb3JtYXQgKi8KLQkJCXRtLT50bV9ob3VyID0gQkNEMkJJTihfaHIgJiAweDFmKTsKKwkJCXRtLT50bV9ob3VyID0gYmNkMmJpbihfaHIgJiAweDFmKTsKIAkJCWlmIChfaHIgJiBJU0wxMjA4X1JFR19IUl9QTSkJLyogUE0gZmxhZyBzZXQgKi8KIAkJCQl0bS0+dG1faG91ciArPSAxMjsKIAkJfQogCX0KIAotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RUXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NT10pIC0gMTsJLyogcnRjIHN0YXJ0cyBhdCAxICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfWVJdKSArIDEwMDsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19EV10pOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0RUXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NT10pIC0gMTsJLyogcnRjIHN0YXJ0cyBhdCAxICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfWVJdKSArIDEwMDsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EV10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDUsMTMgKzMwNSwxMyBAQAogCX0KIAogCS8qIE1TQiBvZiBlYWNoIGFsYXJtIHJlZ2lzdGVyIGlzIGFuIGVuYWJsZSBiaXQgKi8KLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX1NDQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX01OQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19IUkEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfRFRBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4M2YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfU0NBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfTU5BIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0hSQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EVEEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7CiAJdG0tPnRtX21vbiA9Ci0JCUJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NT0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgxZikgLSAxOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RXQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDAzKTsKKwkJYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01PQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDFmKSAtIDE7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFdBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MDMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjgsMTUgKzMyOCwxNSBAQAogCWludCBzcjsKIAl1OCByZWdzW0lTTDEyMDhfUlRDX1NFQ1RJT05fTEVOXSA9IHsgMCwgfTsKIAotCXJlZ3NbSVNMMTIwOF9SRUdfU0NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlyZWdzW0lTTDEyMDhfUkVHX01OXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JcmVnc1tJU0wxMjA4X1JFR19IUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKSB8IElTTDEyMDhfUkVHX0hSX01JTDsKKwlyZWdzW0lTTDEyMDhfUkVHX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJcmVnc1tJU0wxMjA4X1JFR19NTl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCXJlZ3NbSVNMMTIwOF9SRUdfSFJdID0gYmluMmJjZCh0bS0+dG1faG91cikgfCBJU0wxMjA4X1JFR19IUl9NSUw7CiAKLQlyZWdzW0lTTDEyMDhfUkVHX0RUXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCXJlZ3NbSVNMMTIwOF9SRUdfTU9dID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7Ci0JcmVnc1tJU0wxMjA4X1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwlyZWdzW0lTTDEyMDhfUkVHX0RUXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXJlZ3NbSVNMMTIwOF9SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJcmVnc1tJU0wxMjA4X1JFR19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAotCXJlZ3NbSVNMMTIwOF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSAmIDcpOworCXJlZ3NbSVNMMTIwOF9SRUdfRFddID0gYmluMmJjZCh0bS0+dG1fd2RheSAmIDcpOwogCiAJc3IgPSBpc2wxMjA4X2kyY19nZXRfc3IoY2xpZW50KTsKIAlpZiAoc3IgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKaW5kZXggMjRiYzE2OC4uODkzZjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwpAQCAtNTYsMjEgKzU2LDI3IEBACiAjZGVmaW5lIE00MVQ4MF9BTEhPVVJfSFQJKDEgPDwgNikJLyogSFQ6IEhhbHQgVXBkYXRlIEJpdCAqLwogI2RlZmluZSBNNDFUODBfRkxBR1NfQUYJCSgxIDw8IDYpCS8qIEFGOiBBbGFybSBGbGFnIEJpdCAqLwogI2RlZmluZSBNNDFUODBfRkxBR1NfQkFUVF9MT1cJKDEgPDwgNCkJLyogQkw6IEJhdHRlcnkgTG93IEJpdCAqLworI2RlZmluZSBNNDFUODBfV0FUQ0hET0dfUkIyCSgxIDw8IDcpCS8qIFJCOiBXYXRjaGRvZyByZXNvbHV0aW9uICovCisjZGVmaW5lIE00MVQ4MF9XQVRDSERPR19SQjEJKDEgPDwgMSkJLyogUkI6IFdhdGNoZG9nIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgTTQxVDgwX1dBVENIRE9HX1JCMAkoMSA8PCAwKQkvKiBSQjogV2F0Y2hkb2cgcmVzb2x1dGlvbiAqLwogCi0jZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0hUCSgxIDw8IDApCi0jZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0JMCSgxIDw8IDEpCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0hUCSgxIDw8IDApCS8qIEhhbHQgZmVhdHVyZSAqLworI2RlZmluZSBNNDFUODBfRkVBVFVSRV9CTAkoMSA8PCAxKQkvKiBCYXR0ZXJ5IGxvdyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfU1EJKDEgPDwgMikJLyogU3F1YXJld2F2ZSBmZWF0dXJlICovCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1dECSgxIDw8IDMpCS8qIEV4dHJhIHdhdGNoZG9nIHJlc29sdXRpb24gKi8KIAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wNSIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG00MXQ4MF9pZFtdID0gewotCXsgIm00MXQ4MCIsIDAgfSwKLQl7ICJtNDF0ODEiLCBNNDFUODBfRkVBVFVSRV9IVCB9LAotCXsgIm00MXQ4MXMiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCi0JeyAibTQxdDgyIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXQ4MyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKLQl7ICJtNDFzdDg0IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXN0ODUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCi0JeyAibTQxc3Q4NyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKKwl7ICJtNDF0NjUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1dEIH0sCisJeyAibTQxdDgwIiwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKKwl7ICJtNDF0ODEiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1NRfSwKKwl7ICJtNDF0ODFzIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxdDgyIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxdDgzIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxc3Q4NCIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAorCXsgIm00MXN0ODUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIHwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKKwl7ICJtNDFzdDg3IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG00MXQ4MF9pZCk7CkBAIC0xMDQsMTUgKzExMCwxNSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19TRUNdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfTUlOXSAmIDB4N2YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19IT1VSXSAmIDB4M2YpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19EQVldICYgMHgzZik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfU0VDXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX01JTl0gJiAweDdmKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfSE9VUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfREFZXSAmIDB4M2YpOwogCXRtLT50bV93ZGF5ID0gYnVmW000MVQ4MF9SRUdfV0RBWV0gJiAweDA3OwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX01PTl0gJiAweDFmKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfTU9OXSAmIDB4MWYpIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIHRoZSBDZW50dXJ5IEJpdCAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX1lFQVJdKSArIDEwMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU1LDE5ICsxNjEsMTkgQEAKIAkvKiBNZXJnZSB0aW1lLWRhdGEgYW5kIHJlZ2lzdGVyIGZsYWdzIGludG8gYnVmWzAuLjddICovCiAJYnVmW000MVQ4MF9SRUdfU1NFQ10gPSAwOwogCWJ1ZltNNDFUODBfUkVHX1NFQ10gPQotCQlCSU4yQkNEKHRtLT50bV9zZWMpIHwgKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiB+MHg3Zik7CisJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAoYnVmW000MVQ4MF9SRUdfU0VDXSAmIH4weDdmKTsKIAlidWZbTTQxVDgwX1JFR19NSU5dID0KLQkJQklOMkJDRCh0bS0+dG1fbWluKSB8IChidWZbTTQxVDgwX1JFR19NSU5dICYgfjB4N2YpOworCQliaW4yYmNkKHRtLT50bV9taW4pIHwgKGJ1ZltNNDFUODBfUkVHX01JTl0gJiB+MHg3Zik7CiAJYnVmW000MVQ4MF9SRUdfSE9VUl0gPQotCQlCSU4yQkNEKHRtLT50bV9ob3VyKSB8IChidWZbTTQxVDgwX1JFR19IT1VSXSAmIH4weDNmKSA7CisJCWJpbjJiY2QodG0tPnRtX2hvdXIpIHwgKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgfjB4M2YpIDsKIAlidWZbTTQxVDgwX1JFR19XREFZXSA9CiAJCSh0bS0+dG1fd2RheSAmIDB4MDcpIHwgKGJ1ZltNNDFUODBfUkVHX1dEQVldICYgfjB4MDcpOwogCWJ1ZltNNDFUODBfUkVHX0RBWV0gPQotCQlCSU4yQkNEKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOworCQliaW4yYmNkKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOwogCWJ1ZltNNDFUODBfUkVHX01PTl0gPQotCQlCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOworCQliaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOwogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCi0JYnVmW000MVQ4MF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbTTQxVDgwX1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCiAJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpICE9IDEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3cml0ZSBlcnJvclxuIik7CkBAIC0yODIsMTUgKzI4OCwxNSBAQAogCiAJd2J1ZlswXSA9IE00MVQ4MF9SRUdfQUxBUk1fTU9OOyAvKiBvZmZzZXQgaW50byBydGMncyByZWdzICovCiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSB8PSB0LT50aW1lLnRtX3NlYyA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX3NlYykgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fc2VjKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSB8PSB0LT50aW1lLnRtX21pbiA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX21pbikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWluKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gfD0gdC0+dGltZS50bV9ob3VyID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1faG91cikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1faG91cikgOiAweDgwOwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gfD0gdC0+dGltZS50bV9tZGF5ID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOwogCWlmICh0LT50aW1lLnRtX21vbiA+PSAwKQotCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dIHw9IEJJTjJCQ0QodC0+dGltZS50bV9tb24gKyAxKTsKKwkJcmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSB8PSBiaW4yYmNkKHQtPnRpbWUudG1fbW9uICsgMSk7CiAJZWxzZQogCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldIHw9IDB4NDA7CiAKQEAgLTM0MSwxNSArMzQ3LDE1IEBACiAJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJdC0+dGltZS50bV9tb24gPSAtMTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1fc2VjID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CisJCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOworCQl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1faG91ciA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gJiAweDNmKTsKKwkJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDgwKSkKLQkJdC0+dGltZS50bV9tZGF5ID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHgzZik7CisJCXQtPnRpbWUudG1fbWRheSA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDQwKSkKLQkJdC0+dGltZS50bV9tb24gPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gJiAweDFmKSAtIDE7CisJCXQtPnRpbWUudG1fbW9uID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dICYgMHgxZikgLSAxOwogCXQtPnRpbWUudG1feWVhciA9IC0xOwogCXQtPnRpbWUudG1fd2RheSA9IC0xOwogCXQtPnRpbWUudG1feWRheSA9IC0xOwpAQCAtMzg2LDggKzM5MiwxMiBAQAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsOwogCisJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcpOwogCWlmICh2YWwgPCAwKQogCQlyZXR1cm4gLUVJTzsKQEAgLTQwOCw5ICs0MTgsMTMgQEAKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtNDF0ODBfZGF0YSAqY2xpZW50ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBhbG1vbiwgc3F3OwogCWludCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCisJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHZhbCkgewogCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFsKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk5LDYgKzUxMyw4IEBACiAJCQkuYnVmCT0gaTJjX2RhdGEsCiAJCX0sCiAJfTsKKwlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoc2F2ZV9jbGllbnQpOworCiAJaTJjX2RhdGFbMF0gPSAweDA5OwkJLyogd2F0Y2hkb2cgcmVnaXN0ZXIgKi8KIAogCWlmICh3ZHRfbWFyZ2luID4gMzEpCkBAIC01MDksNiArNTI1LDEzIEBACiAJCSAqLwogCQlpMmNfZGF0YVsxXSA9IHdkdF9tYXJnaW48PDIgfCAweDgyOwogCisJLyoKKwkgKiBNNDFUNjUgaGFzIHRocmVlIGJpdHMgZm9yIHdhdGNoZG9nIHJlc29sdXRpb24uICBEb24ndCBzZXQgYml0IDcsIGFzCisJICogdGhhdCB3b3VsZCBiZSBhbiBpbnZhbGlkIHJlc29sdXRpb24uCisJICovCisJaWYgKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfV0QpCisJCWkyY19kYXRhWzFdICY9IH5NNDFUODBfV0FUQ0hET0dfUkIyOworCiAJaTJjX3RyYW5zZmVyKHNhdmVfY2xpZW50LT5hZGFwdGVyLCBtc2dzMSwgMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwppbmRleCA5YjE5NDk5Li5jM2ExOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCkBAIC00MSwxNyArNDEsMTcgQEAKIAkJdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAogCWJ1ZlswXSA9IDB4ODAgfCBNNDFUOTRfUkVHX1NFQ09ORFM7IC8qIHdyaXRlIHRpbWUgKyBkYXRlICovCi0JYnVmW000MVQ5NF9SRUdfU0VDT05EU10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZltNNDFUOTRfUkVHX01JTlVURVNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbTTQxVDk0X1JFR19IT1VSU10gICA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCWJ1ZltNNDFUOTRfUkVHX1dEQVldICAgID0gQklOMkJDRCh0bS0+dG1fd2RheSArIDEpOwotCWJ1ZltNNDFUOTRfUkVHX0RBWV0gICAgID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JYnVmW000MVQ5NF9SRUdfTU9OVEhdICAgPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlidWZbTTQxVDk0X1JFR19TRUNPTkRTXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW000MVQ5NF9SRUdfTUlOVVRFU10gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSAgID0gYmluMmJjZCh0bS0+dG1faG91cik7CisJYnVmW000MVQ5NF9SRUdfV0RBWV0gICAgPSBiaW4yYmNkKHRtLT50bV93ZGF5ICsgMSk7CisJYnVmW000MVQ5NF9SRUdfREFZXSAgICAgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlidWZbTTQxVDk0X1JFR19NT05USF0gICA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJYnVmW000MVQ5NF9SRUdfSE9VUlNdIHw9IE00MVQ5NF9CSVRfQ0VCOwogCWlmICh0bS0+dG1feWVhciA+PSAxMDApCiAJCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSB8PSBNNDFUOTRfQklUX0NCOwotCWJ1ZltNNDFUOTRfUkVHX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJYnVmW000MVQ5NF9SRUdfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAogCXJldHVybiBzcGlfd3JpdGUoc3BpLCBidWYsIDgpOwogfQpAQCAtODIsMTQgKzgyLDE0IEBACiAJCXNwaV93cml0ZShzcGksIGJ1ZiwgMik7CiAJfQogCi0JdG0tPnRtX3NlYyAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19TRUNPTkRTKSk7Ci0JdG0tPnRtX21pbiAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NSU5VVEVTKSk7CisJdG0tPnRtX3NlYyAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19TRUNPTkRTKSk7CisJdG0tPnRtX21pbiAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NSU5VVEVTKSk7CiAJaG91ciA9IHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19IT1VSUyk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIgJiAweDNmKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1dEQVkpKSAtIDE7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19EQVkpKTsKLQl0bS0+dG1fbW9uICA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX01PTlRIKSkgLSAxOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfWUVBUikpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyICYgMHgzZik7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19XREFZKSkgLSAxOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfREFZKSk7CisJdG0tPnRtX21vbiAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NT05USCkpIC0gMTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1lFQVIpKTsKIAlpZiAoKGhvdXIgJiBNNDFUOTRfQklUX0NCKSB8fCAhKGhvdXIgJiBNNDFUOTRfQklUX0NFQikpCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjE5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDM1LmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTR1MtVGhvbXNvbiBNNDhUMzUgVGltZWtlZXBlciBSQU0gY2hpcAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBXcml0dGVuIGJ5IFVsZiBDYXJsc3NvbiAodWxmY0BlbmdyLnNnaS5jb20pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBCb2dlbmRvZXJmZXIKKyAqCisgKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgUGF1bCBHb3J0bWFrZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMCIKKworc3RydWN0IG00OHQzNV9ydGMgeworCXU4CXBhZFsweDdmZjhdOyAgICAvKiBzdGFydHMgYXQgMHg3ZmY4ICovCisJdTgJY29udHJvbDsKKwl1OAlzZWM7CisJdTgJbWluOworCXU4CWhvdXI7CisJdTgJZGF5OworCXU4CWRhdGU7CisJdTgJbW9udGg7CisJdTgJeWVhcjsKK307CisKKyNkZWZpbmUgTTQ4VDM1X1JUQ19TRVQJCTB4ODAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19SRUFECQkweDQwCisKK3N0cnVjdCBtNDh0MzVfcHJpdiB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgbTQ4dDM1X3J0YyBfX2lvbWVtICpyZWc7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW50IG00OHQzNV9yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGNvbnRyb2w7CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCWNvbnRyb2wgPSByZWFkYigmcHJpdi0+cmVnLT5jb250cm9sKTsKKwl3cml0ZWIoY29udHJvbCB8IE00OFQzNV9SVENfUkVBRCwgJnByaXYtPnJlZy0+Y29udHJvbCk7CisJdG0tPnRtX3NlYyA9IHJlYWRiKCZwcml2LT5yZWctPnNlYyk7CisJdG0tPnRtX21pbiA9IHJlYWRiKCZwcml2LT5yZWctPm1pbik7CisJdG0tPnRtX2hvdXIgPSByZWFkYigmcHJpdi0+cmVnLT5ob3VyKTsKKwl0bS0+dG1fbWRheSA9IHJlYWRiKCZwcml2LT5yZWctPmRhdGUpOworCXRtLT50bV9tb24gPSByZWFkYigmcHJpdi0+cmVnLT5tb250aCk7CisJdG0tPnRtX3llYXIgPSByZWFkYigmcHJpdi0+cmVnLT55ZWFyKTsKKwl3cml0ZWIoY29udHJvbCwgJnByaXYtPnJlZy0+Y29udHJvbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCisJLyoKKwkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcworCSAqIGFuZCBob3cgdGhleSBhcmUgZGVmaW5lZCBpbiBhIHN0cnVjdCBydGNfdGltZTsKKwkgKi8KKwl0bS0+dG1feWVhciArPSA3MDsKKwlpZiAodG0tPnRtX3llYXIgPD0gNjkpCisJCXRtLT50bV95ZWFyICs9IDEwMDsKKworCXRtLT50bV9tb24tLTsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBtNDh0MzVfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWM7CisJdW5zaWduZWQgaW50IHlyczsKKwl1OCBjb250cm9sOworCisJeXJzID0gdG0tPnRtX3llYXIgKyAxOTAwOworCW1vbiA9IHRtLT50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCWRheSA9IHRtLT50bV9tZGF5OworCWhycyA9IHRtLT50bV9ob3VyOworCW1pbiA9IHRtLT50bV9taW47CisJc2VjID0gdG0tPnRtX3NlYzsKKworCWlmICh5cnMgPCAxOTcwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXlycyAtPSAxOTcwOworCWlmICh5cnMgPiAyNTUpICAgIC8qIFRoZXkgYXJlIHVuc2lnbmVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHlycyA+IDE2OSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoeXJzID49IDEwMCkKKwkJeXJzIC09IDEwMDsKKworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJeXJzID0gYmluMmJjZCh5cnMpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJY29udHJvbCA9IHJlYWRiKCZwcml2LT5yZWctPmNvbnRyb2wpOworCXdyaXRlYihjb250cm9sIHwgTTQ4VDM1X1JUQ19TRVQsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXdyaXRlYih5cnMsICZwcml2LT5yZWctPnllYXIpOworCXdyaXRlYihtb24sICZwcml2LT5yZWctPm1vbnRoKTsKKwl3cml0ZWIoZGF5LCAmcHJpdi0+cmVnLT5kYXRlKTsKKwl3cml0ZWIoaHJzLCAmcHJpdi0+cmVnLT5ob3VyKTsKKwl3cml0ZWIobWluLCAmcHJpdi0+cmVnLT5taW4pOworCXdyaXRlYihzZWMsICZwcml2LT5yZWctPnNlYyk7CisJd3JpdGViKGNvbnRyb2wsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0MzVfb3BzID0geworCS5yZWFkX3RpbWUJPSBtNDh0MzVfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IG00OHQzNV9zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG00OHQzNV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG00OHQzNV9wcml2ICpwcml2OworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtNDh0MzVfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwkvKgorCSAqIGtsdWRnZTogcmVtb3ZlIHRoZSAjaWZuZGVmIGFmdGVyIGlvYzMgcmVzb3VyY2UKKwkgKiBjb25mbGljdHMgYXJlIHJlc29sdmVkCisJICovCisjaWZuZGVmIENPTkZJR19TR0lfSVAyNworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHByaXYtPnNpemUsIHBkZXYtPm5hbWUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisJcHJpdi0+YmFzZWFkZHIgPSByZXMtPnN0YXJ0OworCXByaXYtPnJlZyA9IGlvcmVtYXAocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWlmICghcHJpdi0+cmVnKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigibTQ4dDM1IiwgJnBkZXYtPmRldiwKKwkJCQkgICZtNDh0MzVfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJldCA9IFBUUl9FUlIocnRjKTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYtPnJ0YyA9IHJ0YzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChwcml2LT5ydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCWlmIChwcml2LT5yZWcpCisJCWlvdW5tYXAocHJpdi0+cmVnKTsKKwlpZiAocHJpdi0+YmFzZWFkZHIpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbTQ4dDM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7CisJaW91bm1hcChwcml2LT5yZWcpOworI2lmbmRlZiBDT05GSUdfU0dJX0lQMjcKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworI2VuZGlmCisJa2ZyZWUocHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG00OHQzNV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInJ0Yy1tNDh0MzUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtNDh0MzVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtNDh0MzVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG00OHQzNV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbTQ4dDM1X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtNDh0MzVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtNDh0MzVfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTTQ4VDM1IFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLW00OHQzNSIpOworCittb2R1bGVfaW5pdChtNDh0MzVfaW5pdCk7Cittb2R1bGVfZXhpdChtNDh0MzVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKaW5kZXggY2U0ZWZmNi4uMDRiNjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAJLyogSXNzdWUgdGhlIFJFQUQgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CiAKLQl0bS0+dG1feWVhcgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKKwl0bS0+dG1feWVhcgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKIAkvKiB0bV9tb24gaXMgMC0xMSAqLwotCXRtLT50bV9tb24JPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKLQl0bS0+dG1fbWRheQk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01EQVkpKTsKKwl0bS0+dG1fbW9uCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7CisJdG0tPnRtX21kYXkJPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9NREFZKSk7CiAKIAl2YWwgPSBNNDhUNTlfUkVBRChNNDhUNTlfV0RBWSk7CiAJaWYgKChwZGF0YS0+dHlwZSA9PSBNNDhUNTlSVENfVFlQRV9NNDhUNTkpICYmCkBAIC04OCwxMCArODgsMTAgQEAKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwkvKiBvbmUgY2VudHVyeSAqLwogCX0KIAotCXRtLT50bV93ZGF5CT0gQkNEMkJJTih2YWwgJiAweDA3KTsKLQl0bS0+dG1faG91cgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0hPVVIpICYgMHgzRik7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01JTikgJiAweDdGKTsKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfU0VDKSAmIDB4N0YpOworCXRtLT50bV93ZGF5CT0gYmNkMmJpbih2YWwgJiAweDA3KTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0hPVVIpICYgMHgzRik7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01JTikgJiAweDdGKTsKKwl0bS0+dG1fc2VjCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfU0VDKSAmIDB4N0YpOwogCiAJLyogQ2xlYXIgdGhlIFJFQUQgYml0ICovCiAJTTQ4VDU5X0NMRUFSX0JJVFMoTTQ4VDU5X0NOVExfUkVBRCwgTTQ4VDU5X0NOVEwpOwpAQCAtMTE5LDE3ICsxMTksMTcgQEAKIAkvKiBJc3N1ZSB0aGUgV1JJVEUgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9XUklURSwgTTQ4VDU5X0NOVEwpOwogCi0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9zZWMpICYgMHg3RiksIE00OFQ1OV9TRUMpOwotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1fbWluKSAmIDB4N0YpLCBNNDhUNTlfTUlOKTsKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX2hvdXIpICYgMHgzRiksIE00OFQ1OV9IT1VSKTsKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX21kYXkpICYgMHgzRiksIE00OFQ1OV9NREFZKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX3NlYykgJiAweDdGKSwgTTQ4VDU5X1NFQyk7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9taW4pICYgMHg3RiksIE00OFQ1OV9NSU4pOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1faG91cikgJiAweDNGKSwgTTQ4VDU5X0hPVVIpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fbWRheSkgJiAweDNGKSwgTTQ4VDU5X01EQVkpOwogCS8qIHRtX21vbiBpcyAwLTExICovCi0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9tb24gKyAxKSAmIDB4MUYpLCBNNDhUNTlfTU9OVEgpOwotCU00OFQ1OV9XUklURShCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDU5X1lFQVIpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgJiAweDFGKSwgTTQ4VDU5X01PTlRIKTsKKwlNNDhUNTlfV1JJVEUoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ1OV9ZRUFSKTsKIAogCWlmIChwZGF0YS0+dHlwZSA9PSBNNDhUNTlSVENfVFlQRV9NNDhUNTkgJiYgKHRtLT50bV95ZWFyIC8gMTAwKSkKIAkJdmFsID0gKE00OFQ1OV9XREFZX0NFQiB8IE00OFQ1OV9XREFZX0NCKTsKLQl2YWwgfD0gKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgMHgwNyk7CisJdmFsIHw9IChiaW4yYmNkKHRtLT50bV93ZGF5KSAmIDB4MDcpOwogCU00OFQ1OV9XUklURSh2YWwsIE00OFQ1OV9XREFZKTsKIAogCS8qIENsZWFyIHRoZSBXUklURSBiaXQgKi8KQEAgLTE1OCwxOCArMTU4LDE4IEBACiAJLyogSXNzdWUgdGhlIFJFQUQgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CiAKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKIAkvKiB0bV9tb24gaXMgMC0xMSAqLwotCXRtLT50bV9tb24gPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7CiAKIAl2YWwgPSBNNDhUNTlfUkVBRChNNDhUNTlfV0RBWSk7CiAJaWYgKCh2YWwgJiBNNDhUNTlfV0RBWV9DRUIpICYmICh2YWwgJiBNNDhUNTlfV0RBWV9DQikpCiAJCXRtLT50bV95ZWFyICs9IDEwMDsJLyogb25lIGNlbnR1cnkgKi8KIAotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fREFURSkpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fSE9VUikpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9NSU4pKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fU0VDKSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9EQVRFKSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9IT1VSKSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX01JTikpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9TRUMpKTsKIAogCS8qIENsZWFyIHRoZSBSRUFEIGJpdCAqLwogCU00OFQ1OV9DTEVBUl9CSVRTKE00OFQ1OV9DTlRMX1JFQUQsIE00OFQ1OV9DTlRMKTsKQEAgLTIwMSwxOCArMjAxLDE4IEBACiAJICogMHhmZiBtZWFucyAiYWx3YXlzIG1hdGNoIgogCSAqLwogCW1kYXkgPSB0bS0+dG1fbWRheTsKLQltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IEJJTjJCQ0QobWRheSkgOiAweGZmOworCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gYmluMmJjZChtZGF5KSA6IDB4ZmY7CiAJaWYgKG1kYXkgPT0gMHhmZikKIAkJbWRheSA9IE00OFQ1OV9SRUFEKE00OFQ1OV9NREFZKTsKIAogCWhvdXIgPSB0bS0+dG1faG91cjsKLQlob3VyID0gKGhvdXIgPCAyNCkgPyBCSU4yQkNEKGhvdXIpIDogMHgwMDsKKwlob3VyID0gKGhvdXIgPCAyNCkgPyBiaW4yYmNkKGhvdXIpIDogMHgwMDsKIAogCW1pbiA9IHRtLT50bV9taW47Ci0JbWluID0gKG1pbiA8IDYwKSA/IEJJTjJCQ0QobWluKSA6IDB4MDA7CisJbWluID0gKG1pbiA8IDYwKSA/IGJpbjJiY2QobWluKSA6IDB4MDA7CiAKIAlzZWMgPSB0bS0+dG1fc2VjOwotCXNlYyA9IChzZWMgPCA2MCkgPyBCSU4yQkNEKHNlYykgOiAweDAwOworCXNlYyA9IChzZWMgPCA2MCkgPyBiaW4yYmNkKHNlYykgOiAweDAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwogCS8qIElzc3VlIHRoZSBXUklURSBjb21tYW5kICovCkBAIC0zNjAsNyArMzYwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5yZWFkID0gbTQ4dDU5X252cmFtX3JlYWQsCiAJLndyaXRlID0gbTQ4dDU5X252cmFtX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCmluZGV4IDNmN2Y5OWEuLjdjMDQ1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKQEAgLTYyLDE0ICs2MiwxNCBAQAogCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpOwogCX0gZWxzZSB7CiAJCS8qIGJjZCBtb2RlICovCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CisJCXRtLT50bV9zZWMJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKKwkJdG0tPnRtX21pbgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOworCQl0bS0+dG1faG91cgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7CisJCXRtLT50bV9tZGF5CT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CiAJCS8qIHRtX21vbiBpcyAwLTExICovCi0JCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKLQkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CisJCXRtLT50bV9tb24JPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKKwkJdG0tPnRtX3llYXIJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7CisJCXRtLT50bV93ZGF5CT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CiAJfQogCiAJLyogY29ycmVjdCB0aGUgaG91ciBpZiB0aGUgY2xvY2sgaXMgaW4gMTJoIG1vZGUgKi8KQEAgLTEwMywxMyArMTAzLDEzIEBACiAJCW9wcy0+d3JpdGVieXRlKHRtLT50bV93ZGF5LCBNNDhUODZfUkVHX0RPVyk7CiAJfSBlbHNlIHsKIAkJLyogYmNkIG1vZGUgKi8KLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fc2VjKSwgTTQ4VDg2X1JFR19TRUMpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9taW4pLCBNNDhUODZfUkVHX01JTik7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBNNDhUODZfUkVHX0hPVVIpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9tZGF5KSwgTTQ4VDg2X1JFR19ET00pOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgTTQ4VDg2X1JFR19NT05USCk7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUODZfUkVHX1lFQVIpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV93ZGF5KSwgTTQ4VDg2X1JFR19ET1cpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CiAJfQogCiAJLyogdXBkYXRlIGVuZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwppbmRleCBkZWQzYzBhLi44MDc4Mjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKQEAgLTE3LDE5ICsxNywxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgIm1heDY5MDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKIC8qCiAgKiByZWdpc3RlciBpbmRpY2VzCiAgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfU0MJCQkwCS8qIHNlY29uZHMJMDAtNTkgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfTU4JCQkxCS8qIG1pbnV0ZXMJMDAtNTkgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfSFIJCQkyCS8qIGhvdXJzCTAwLTIzICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX0RUCQkJMwkvKiBkYXkgb2YgbW9udGgJMDAtMzEgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfTU8JCQk0CS8qIG1vbnRoCTAxLTEyICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX0RXCQkJNQkvKiBkYXkgb2Ygd2VlawkgMS03ICAqLwotI2RlZmluZSBNQVg2OTAwX1JFR19ZUgkJCTYJLyogeWVhcgkJMDAtOTkgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfU0MJCQkwCS8qIHNlY29uZHMgICAgICAwMC01OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTgkJCTEJLyogbWludXRlcyAgICAgIDAwLTU5ICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX0hSCQkJMgkvKiBob3VycyAgICAgICAgMDAtMjMgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfRFQJCQkzCS8qIGRheSBvZiBtb250aCAwMC0zMSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTwkJCTQJLyogbW9udGggICAgICAgIDAxLTEyICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX0RXCQkJNQkvKiBkYXkgb2Ygd2VlayAgIDEtNyAgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfWVIJCQk2CS8qIHllYXIgICAgICAgICAwMC05OSAqLwogI2RlZmluZSBNQVg2OTAwX1JFR19DVAkJCTcJLyogY29udHJvbCAqLwogCQkJCQkJLyogcmVnaXN0ZXIgOCBpcyB1bmRvY3VtZW50ZWQgKi8KICNkZWZpbmUgTUFYNjkwMF9SRUdfQ0VOVFVSWQkJOQkvKiBjZW50dXJ5ICovCkBAIC0zOSw3ICszOCw2IEBACiAKICNkZWZpbmUgTUFYNjkwMF9SRUdfQ1RfV1AJCSgxIDw8IDcpCS8qIFdyaXRlIFByb3RlY3QgKi8KIAotCiAvKgogICogcmVnaXN0ZXIgcmVhZC93cml0ZSBjb21tYW5kcwogICovCkBAIC01MiwxNiArNTAsNyBAQAogCiAjZGVmaW5lIE1BWDY5MDBfSURMRV9USU1FX0FGVEVSX1dSSVRFCTMJLyogc3BlY2lmaWNhdGlvbiBzYXlzIDIuNSBtUyAqLwogCi0jZGVmaW5lIE1BWDY5MDBfSTJDX0FERFIJCTB4YTAKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlNQVg2OTAwX0kyQ19BRERSID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwkJCS8qIGRlZmluZXMgYWRkcl9kYXRhICovCi0KLXN0YXRpYyBpbnQgbWF4NjkwMF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCk7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4NjkwMF9kcml2ZXI7CiAKIHN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfcmVhZF9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpidWYpCiB7CkBAIC02OSwzNiArNTgsMzUgQEAKIAl1OCByZWdfY2VudHVyeV9yZWFkWzFdID0geyBNQVg2OTAwX1JFR19DRU5UVVJZX1JFQUQgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzWzRdID0gewogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IDAsIC8qIHdyaXRlICovCi0JCQkubGVuCT0gc2l6ZW9mKHJlZ19idXJzdF9yZWFkKSwKLQkJCS5idWYJPSByZWdfYnVyc3RfcmVhZAotCQl9LAorCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSAwLAkvKiB3cml0ZSAqLworCQkgLmxlbiA9IHNpemVvZihyZWdfYnVyc3RfcmVhZCksCisJCSAuYnVmID0gcmVnX2J1cnN0X3JlYWR9CisJCSwKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSBJMkNfTV9SRCwKLQkJCS5sZW4JPSBNQVg2OTAwX0JVUlNUX0xFTiwKLQkJCS5idWYJPSBidWYKLQkJfSwKKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gSTJDX01fUkQsCisJCSAubGVuID0gTUFYNjkwMF9CVVJTVF9MRU4sCisJCSAuYnVmID0gYnVmfQorCQksCiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gMCwgLyogd3JpdGUgKi8KLQkJCS5sZW4JPSBzaXplb2YocmVnX2NlbnR1cnlfcmVhZCksCi0JCQkuYnVmCT0gcmVnX2NlbnR1cnlfcmVhZAotCQl9LAorCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSAwLAkvKiB3cml0ZSAqLworCQkgLmxlbiA9IHNpemVvZihyZWdfY2VudHVyeV9yZWFkKSwKKwkJIC5idWYgPSByZWdfY2VudHVyeV9yZWFkfQorCQksCiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gSTJDX01fUkQsCi0JCQkubGVuCT0gc2l6ZW9mKGJ1ZltNQVg2OTAwX1JFR19DRU5UVVJZXSksCi0JCQkuYnVmCT0gJmJ1ZltNQVg2OTAwX1JFR19DRU5UVVJZXQotCQl9CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IEkyQ19NX1JELAorCQkgLmxlbiA9IHNpemVvZihidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0pLAorCQkgLmJ1ZiA9ICZidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0KKwkJIH0KIAl9OwogCWludCByYzsKIAogCXJjID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiAJaWYgKHJjICE9IEFSUkFZX1NJWkUobXNncykpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnaXN0ZXIgcmVhZCBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZ2lzdGVyIHJlYWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwOSwyMCArOTcsMTggQEAKIAl1OCBpMmNfY2VudHVyeV9idWZbMSArIDFdID0geyBNQVg2OTAwX1JFR19DRU5UVVJZX1dSSVRFIH07CiAJc3RydWN0IGkyY19tc2cgY2VudHVyeV9tc2dzWzFdID0gewogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IDAsIC8qIHdyaXRlICovCi0JCQkubGVuCT0gc2l6ZW9mKGkyY19jZW50dXJ5X2J1ZiksCi0JCQkuYnVmCT0gaTJjX2NlbnR1cnlfYnVmCi0JCX0KKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YoaTJjX2NlbnR1cnlfYnVmKSwKKwkJIC5idWYgPSBpMmNfY2VudHVyeV9idWZ9CiAJfTsKIAl1OCBpMmNfYnVyc3RfYnVmW01BWDY5MDBfQlVSU1RfTEVOICsgMV0gPSB7IE1BWDY5MDBfUkVHX0JVUlNUX1dSSVRFIH07CiAJc3RydWN0IGkyY19tc2cgYnVyc3RfbXNnc1sxXSA9IHsKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLwotCQkJLmxlbgk9IHNpemVvZihpMmNfYnVyc3RfYnVmKSwKLQkJCS5idWYJPSBpMmNfYnVyc3RfYnVmCi0JCX0KKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YoaTJjX2J1cnN0X2J1ZiksCisJCSAuYnVmID0gaTJjX2J1cnN0X2J1Zn0KIAl9OwogCWludCByYzsKIApAQCAtMTMzLDEwICsxMTksMTIgQEAKIAkgKiBiaXQgYXMgcGFydCBvZiB0aGUgYnVyc3Qgd3JpdGUuCiAJICovCiAJaTJjX2NlbnR1cnlfYnVmWzFdID0gYnVmW01BWDY5MDBfUkVHX0NFTlRVUlldOworCiAJcmMgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBjZW50dXJ5X21zZ3MsCiAJCQkgIEFSUkFZX1NJWkUoY2VudHVyeV9tc2dzKSk7CiAJaWYgKHJjICE9IEFSUkFZX1NJWkUoY2VudHVyeV9tc2dzKSkKIAkJZ290byB3cml0ZV9mYWlsZWQ7CisKIAltc2xlZXAoTUFYNjkwMF9JRExFX1RJTUVfQUZURVJfV1JJVEUpOwogCiAJbWVtY3B5KCZpMmNfYnVyc3RfYnVmWzFdLCBidWYsIE1BWDY5MDBfQlVSU1RfTEVOKTsKQEAgLTE0OCw0NSArMTM2LDExIEBACiAKIAlyZXR1cm4gMDsKIAotd3JpdGVfZmFpbGVkOgotCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZ2lzdGVyIHdyaXRlIGZhaWxlZFxuIiwKLQkJX19mdW5jX18pOworIHdyaXRlX2ZhaWxlZDoKKwlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWdpc3RlciB3cml0ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBtYXg2OTAwX2kyY192YWxpZGF0ZV9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1OCByZWdzW01BWDY5MDBfUkVHX0xFTl07Ci0JdTggemVyb19tYXNrW10gPSB7Ci0JCTB4ODAsCS8qIHNlY29uZHMgKi8KLQkJMHg4MCwJLyogbWludXRlcyAqLwotCQkweDQwLAkvKiBob3VycyAqLwotCQkweGMwLAkvKiBkYXkgb2YgbW9udGggKi8KLQkJMHhlMCwJLyogbW9udGggKi8KLQkJMHhmOCwJLyogZGF5IG9mIHdlZWsgKi8KLQkJMHgwMCwJLyogeWVhciAqLwotCQkweDdmLAkvKiBjb250cm9sICovCi0JfTsKLQlpbnQgaTsKLQlpbnQgcmM7Ci0JaW50IHJlc2VydmVkOwotCi0JcmVzZXJ2ZWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2OTAwX1JFR19SRVNFUlZFRF9SRUFEKTsKLQlpZiAocmVzZXJ2ZWQgIT0gMHgwNykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyYyA9IG1heDY5MDBfaTJjX3JlYWRfcmVncyhjbGllbnQsIHJlZ3MpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHplcm9fbWFzayk7ICsraSkgewotCQlpZiAocmVnc1tpXSAmIHplcm9fbWFza1tpXSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1heDY5MDBfaTJjX3JlYWRfdGltZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCWludCByYzsKQEAgLTE5NiwxNCArMTUwLDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCi0JCSAgICAgIEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCisJCSAgICAgIGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMSw3ICsxNjUsNyBAQAogc3RhdGljIGludCBtYXg2OTAwX2kyY19jbGVhcl93cml0ZV9wcm90ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IHJjOwotCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSAoY2xpZW50LCBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFLCAwKTsKKwlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFLCAwKTsKIAlpZiAocmMgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGNvbnRyb2wgcmVnaXN0ZXIgd3JpdGUgZmFpbGVkXG4iLAogCQkJX19mdW5jX18pOwpAQCAtMjIwLDggKzE3NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfc2V0X3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQlzdHJ1Y3QgcnRjX3RpbWUgY29uc3QgKnRtKQorc3RhdGljIGludAorbWF4NjkwMF9pMmNfc2V0X3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lIGNvbnN0ICp0bSkKIHsKIAl1OCByZWdzW01BWDY5MDBfUkVHX0xFTl07CiAJaW50IHJjOwpAQCAtMjMwLDE0ICsxODQsMTQgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWdzW01BWDY5MDBfUkVHX1NDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JcmVnc1tNQVg2OTAwX1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXJlZ3NbTUFYNjkwMF9SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JcmVnc1tNQVg2OTAwX1JFR19EVF0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzW01BWDY5MDBfUkVHX01PXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCXJlZ3NbTUFYNjkwMF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JcmVnc1tNQVg2OTAwX1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKLQlyZWdzW01BWDY5MDBfUkVHX0NFTlRVUlldID0gQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVnc1tNQVg2OTAwX1JFR19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlyZWdzW01BWDY5MDBfUkVHX0RXXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCXJlZ3NbTUFYNjkwMF9SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSA9IGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOwogCS8qIHNldCB3cml0ZSBwcm90ZWN0ICovCiAJcmVnc1tNQVg2OTAwX1JFR19DVF0gPSBNQVg2OTAwX1JFR19DVF9XUDsKIApAQCAtMjU4LDg5ICsyMTIsNDkgQEAKIAlyZXR1cm4gbWF4NjkwMF9pMmNfc2V0X3RpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IG1heDY5MDBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBtYXg2OTAwX3Byb2JlKTsKLX0KLQotc3RhdGljIGludCBtYXg2OTAwX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqY29uc3QgcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKLQlyZXR1cm4gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDY5MDBfZHJpdmVyID0gewotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IERSVl9OQU1FLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9NQVg2OTAwLAotCS5hdHRhY2hfYWRhcHRlciA9IG1heDY5MDBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBtYXg2OTAwX2RldGFjaF9jbGllbnQsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWF4NjkwMF9ydGNfb3BzID0gewotCS5yZWFkX3RpbWUJPSBtYXg2OTAwX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gbWF4NjkwMF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfdGltZSA9IG1heDY5MDBfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBtYXg2OTAwX3J0Y19zZXRfdGltZSwKIH07CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQKK21heDY5MDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IE5VTEw7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IE5VTEw7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbG91dDsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxvdXQ7Ci0JfQotCi0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJm1heDY5MDBfZHJpdmVyOwotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBEUlZfTkFNRSwgSTJDX05BTUVfU0laRSk7Ci0KLQlpZiAoa2luZCA8IDApIHsKLQkJcmMgPSBtYXg2OTAwX2kyY192YWxpZGF0ZV9jbGllbnQoY2xpZW50KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gZmFpbG91dDsKLQl9Ci0KLQlyYyA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBmYWlsb3V0OwotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LAotCQkgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIobWF4NjkwMF9kcml2ZXIuZHJpdmVyLm5hbWUsCi0JCQkJICAmY2xpZW50LT5kZXYsCi0JCQkJICAmbWF4NjkwMF9ydGNfb3BzLCBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJjID0gUFRSX0VSUihydGMpOwotCQlnb3RvIGZhaWxvdXRfZGV0YWNoOwotCX0KKwkJCQkgICZjbGllbnQtPmRldiwgJm1heDY5MDBfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKIAlyZXR1cm4gMDsKLQotZmFpbG91dF9kZXRhY2g6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLWZhaWxvdXQ6Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTAwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJydGMtbWF4NjkwMCIsCisJCSAgIH0sCisJLnByb2JlID0gbWF4NjkwMF9wcm9iZSwKKwkucmVtb3ZlID0gbWF4NjkwMF9yZW1vdmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBtYXg2OTAwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDY5MDBfZHJpdmVyKTsKQEAgLTM1Miw2ICsyNjYsNyBAQAogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1heGltIE1BWDY5MDAgUlRDIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYwppbmRleCA3OGIyNTUxLi4yZjY1MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKQEAgLTEyNCwxNSArMTI0LDE1IEBACiAKIAkvKiBUaGUgY2hpcCBzZW5kcyBkYXRhIGluIHRoaXMgb3JkZXI6CiAJICogU2Vjb25kcywgTWludXRlcywgSG91cnMsIERhdGUsIE1vbnRoLCBEYXksIFllYXIgKi8KLQlkdC0+dG1fc2VjCT0gQkNEMkJJTihjaGlwLT5idWZbMV0pOwotCWR0LT50bV9taW4JPSBCQ0QyQklOKGNoaXAtPmJ1ZlsyXSk7Ci0JZHQtPnRtX2hvdXIJPSBCQ0QyQklOKGNoaXAtPmJ1ZlszXSk7Ci0JZHQtPnRtX21kYXkJPSBCQ0QyQklOKGNoaXAtPmJ1Zls0XSk7Ci0JZHQtPnRtX21vbgk9IEJDRDJCSU4oY2hpcC0+YnVmWzVdKSAtIDE7Ci0JZHQtPnRtX3dkYXkJPSBCQ0QyQklOKGNoaXAtPmJ1Zls2XSk7Ci0JZHQtPnRtX3llYXIgPSBCQ0QyQklOKGNoaXAtPmJ1Zls3XSk7CisJZHQtPnRtX3NlYwk9IGJjZDJiaW4oY2hpcC0+YnVmWzFdKTsKKwlkdC0+dG1fbWluCT0gYmNkMmJpbihjaGlwLT5idWZbMl0pOworCWR0LT50bV9ob3VyCT0gYmNkMmJpbihjaGlwLT5idWZbM10pOworCWR0LT50bV9tZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNF0pOworCWR0LT50bV9tb24JPSBiY2QyYmluKGNoaXAtPmJ1Zls1XSkgLSAxOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNl0pOworCWR0LT50bV95ZWFyID0gYmNkMmJpbihjaGlwLT5idWZbN10pOwogCi0JY2VudHVyeSA9IEJDRDJCSU4odG1wKSAqIDEwMDsKKwljZW50dXJ5ID0gYmNkMmJpbih0bXApICogMTAwOwogCiAJZHQtPnRtX3llYXIgKz0gY2VudHVyeTsKIAlkdC0+dG1feWVhciAtPSAxOTAwOwpAQCAtMTY4LDE1ICsxNjgsMTUgQEAKIAkvKiBSZW1vdmUgd3JpdGUgcHJvdGVjdGlvbiAqLwogCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4RiwgMCk7CiAKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAxLCBCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAzLCBCSU4yQkNEKGR0LT50bV9taW4pKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA1LCBCSU4yQkNEKGR0LT50bV9ob3VyKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMSwgYmluMmJjZChkdC0+dG1fc2VjKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMywgYmluMmJjZChkdC0+dG1fbWluKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNSwgYmluMmJjZChkdC0+dG1faG91cikpOwogCi0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNywgQklOMkJDRChkdC0+dG1fbWRheSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDksIEJJTjJCQ0QoZHQtPnRtX21vbisxKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwQiwgQklOMkJDRChkdC0+dG1fd2RheSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEQsIEJJTjJCQ0QoZHQtPnRtX3llYXIlMTAwKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgxMywgQklOMkJDRChkdC0+dG1feWVhci8xMDApKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA3LCBiaW4yYmNkKGR0LT50bV9tZGF5KSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwOSwgYmluMmJjZChkdC0+dG1fbW9uKzEpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBCLCBiaW4yYmNkKGR0LT50bV93ZGF5KSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwRCwgYmluMmJjZChkdC0+dG1feWVhciUxMDApKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDEzLCBiaW4yYmNkKGR0LT50bV95ZWFyLzEwMCkpOwogCiAJLyogQ29tcHVsYWIgdXNlZCBhIGRlbGF5IGhlcmUuIEhvd2V2ZXIsIHRoZSBkYXRhc2hlZXQKIAkgKiBkb2VzIG5vdCBtZW50aW9uIGEgZGVsYXkgYmVpbmcgcmVxdWlyZWQgYW55d2hlcmUuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IDg4NzY2MDVkLi4yY2JlYjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTE4NiwzMCArMTg2LDMwIEBACiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0bS0+dG1fc2VjID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQl0bS0+dG1fbWluID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQl0bS0+dG1faG91ciA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCXRtLT50bV9tZGF5ID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJdG0tPnRtX3NlYyA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCi0JdG0tPnRtX21vbiA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCXRtLT50bV9tb24gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCS8qIGVwb2NoID09IDE5MDAgKi8KIAlpZiAodG0tPnRtX3llYXIgPCAxMDAgfHwgdG0tPnRtX3llYXIgPiAxOTkpCiAJCXJldHVybiAtRUlOVkFMOwotCXRtLT50bV95ZWFyID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7CisJdG0tPnRtX3llYXIgPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBiY2QydG0oc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTih0bS0+dG1fc2VjKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTih0bS0+dG1fbWluKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4odG0tPnRtX2hvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTih0bS0+dG1fbWRheSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4odG0tPnRtX21vbikgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKSAtIDE7CiAJLyogZXBvY2ggPT0gMTkwMCAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih0bS0+dG1feWVhcikgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArIDEwMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwppbmRleCA3NDhhNTAyLi5iNzI1OTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKQEAgLTk3LDEzICs5NywxMyBAQAogCQlidWZbOF0pOwogCiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfU0NdICYgMHg3Rik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX01OXSAmIDB4N0YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfSFJdICYgMHgzRik7IC8qIHJ0YyBociAwLTIzICovCi0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19ETV0gJiAweDNGKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfU0NdICYgMHg3Rik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX01OXSAmIDB4N0YpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfSFJdICYgMHgzRik7IC8qIHJ0YyBociAwLTIzICovCisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19ETV0gJiAweDNGKTsKIAl0bS0+dG1fd2RheSA9IGJ1ZltQQ0Y4NTYzX1JFR19EV10gJiAweDA3OwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19NT10gJiAweDFGKSAtIDE7IC8qIHJ0YyBtbiAxLTEyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19ZUl0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19NT10gJiAweDFGKSAtIDE7IC8qIHJ0YyBtbiAxLTEyICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19ZUl0pOwogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIGFzc3VtZSB3ZSBhcmUgaW4gMTk3MC4uLjIwNjkgKi8KIAkvKiBkZXRlY3QgdGhlIHBvbGFyaXR5IGhldXJpc3RpY2FsbHkuIHNlZSBub3RlIGFib3ZlLiAqLwpAQCAtMTM4LDE3ICsxMzgsMTcgQEAKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKIAkvKiBob3VycywgbWludXRlcyBhbmQgc2Vjb25kcyAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZltQQ0Y4NTYzX1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZltQQ0Y4NTYzX1JFR19IUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlidWZbUENGODU2M19SRUdfU0NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbUENGODU2M19SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbUENGODU2M19SRUdfSFJdID0gYmluMmJjZCh0bS0+dG1faG91cik7CiAKLQlidWZbUENGODU2M19SRUdfRE1dID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJYnVmW1BDRjg1NjNfUkVHX0RNXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCiAJLyogbW9udGgsIDEgLSAxMiAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlidWZbUENGODU2M19SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAkvKiB5ZWFyIGFuZCBjZW50dXJ5ICovCi0JYnVmW1BDRjg1NjNfUkVHX1lSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWJ1ZltQQ0Y4NTYzX1JFR19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAlpZiAocGNmODU2My0+Y19wb2xhcml0eSA/ICh0bS0+dG1feWVhciA+PSAxMDApIDogKHRtLT50bV95ZWFyIDwgMTAwKSkKIAkJYnVmW1BDRjg1NjNfUkVHX01PXSB8PSBQQ0Y4NTYzX01PX0M7CiAKQEAgLTE3OSw1OCArMTc5LDYgQEAKIAl1bnNpZ25lZCBjaGFyIG1heDsKIH07CiAKLXN0YXRpYyBpbnQgcGNmODU2M192YWxpZGF0ZV9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgaTsKLQotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNmODU2M19saW1pdCBwYXR0ZXJuW10gPSB7Ci0JCS8qIHJlZ2lzdGVyLCBtYXNrLCBtaW4sIG1heCAqLwotCQl7IFBDRjg1NjNfUkVHX1NDLAkweDdGLAkwLAk1OQl9LAotCQl7IFBDRjg1NjNfUkVHX01OLAkweDdGLAkwLAk1OQl9LAotCQl7IFBDRjg1NjNfUkVHX0hSLAkweDNGLAkwLAkyMwl9LAotCQl7IFBDRjg1NjNfUkVHX0RNLAkweDNGLAkwLAkzMQl9LAotCQl7IFBDRjg1NjNfUkVHX01PLAkweDFGLAkwLAkxMgl9LAotCX07Ci0KLQkvKiBjaGVjayBsaW1pdHMgKG9ubHkgcmVnaXN0ZXJzIHdpdGggYmNkIHZhbHVlcykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYXR0ZXJuKTsgaSsrKSB7Ci0JCWludCB4ZmVyOwotCQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCQl1bnNpZ25lZCBjaGFyIGJ1ZiA9IHBhdHRlcm5baV0ucmVnOwotCi0JCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYnVmIH0sCi0JCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIDEsICZidWYgfSwKLQkJfTsKLQotCQl4ZmVyID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7Ci0KLQkJaWYgKHhmZXIgIT0gQVJSQVlfU0laRShtc2dzKSkgewotCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkJIiVzOiBjb3VsZCBub3QgcmVhZCByZWdpc3RlciAweCUwMlhcbiIsCi0JCQkJX19mdW5jX18sIHBhdHRlcm5baV0ucmVnKTsKLQotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQl2YWx1ZSA9IEJDRDJCSU4oYnVmICYgcGF0dGVybltpXS5tYXNrKTsKLQotCQlpZiAodmFsdWUgPiBwYXR0ZXJuW2ldLm1heCB8fAotCQkJdmFsdWUgPCBwYXR0ZXJuW2ldLm1pbikgewotCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsCi0JCQkJIiVzOiBwYXR0ZXJuPSVkLCByZWc9JXgsIG1hc2s9MHglMDJ4LCBtaW49JWQsICIKLQkJCQkibWF4PSVkLCB2YWx1ZT0lZCwgcmF3PTB4JTAyWFxuIiwKLQkJCQlfX2Z1bmNfXywgaSwgcGF0dGVybltpXS5yZWcsIHBhdHRlcm5baV0ubWFzaywKLQkJCQlwYXR0ZXJuW2ldLm1pbiwgcGF0dGVybltpXS5tYXgsCi0JCQkJdmFsdWUsIGJ1Zik7Ci0KLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcGNmODU2M19ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlyZXR1cm4gcGNmODU2M19nZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CkBAIC0yNjIsMTIgKzIxMCw2IEBACiAJaWYgKCFwY2Y4NTYzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFZlcmlmeSB0aGUgY2hpcCBpcyByZWFsbHkgYW4gUENGODU2MyAqLwotCWlmIChwY2Y4NTYzX3ZhbGlkYXRlX2NsaWVudChjbGllbnQpIDwgMCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGV4aXRfa2ZyZWU7Ci0JfQotCiAJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCXBjZjg1NjMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGNmODU2M19kcml2ZXIuZHJpdmVyLm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwppbmRleCBkMzg4YzY2Li43ZDMzY2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKQEAgLTc2LDExICs3NiwxMSBAQAogCQlidWZbNF0gJj0gMHgzZjsKIAkJYnVmWzVdICY9IDB4MWY7CiAKLQkJZHQtPnRtX3NlYyA9IEJDRDJCSU4oYnVmWzFdKTsKLQkJZHQtPnRtX21pbiA9IEJDRDJCSU4oYnVmWzJdKTsKLQkJZHQtPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZlszXSk7Ci0JCWR0LT50bV9tZGF5ID0gQkNEMkJJTihidWZbNF0pOwotCQlkdC0+dG1fbW9uID0gQkNEMkJJTihidWZbNV0pIC0gMTsKKwkJZHQtPnRtX3NlYyA9IGJjZDJiaW4oYnVmWzFdKTsKKwkJZHQtPnRtX21pbiA9IGJjZDJiaW4oYnVmWzJdKTsKKwkJZHQtPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZlszXSk7CisJCWR0LT50bV9tZGF5ID0gYmNkMmJpbihidWZbNF0pOworCQlkdC0+dG1fbW9uID0gYmNkMmJpbihidWZbNV0pIC0gMTsKIAl9CiAKIAlyZXR1cm4gcmV0ID09IDIgPyAwIDogLUVJTzsKQEAgLTk0LDE0ICs5NCwxNCBAQAogCWJ1ZlswXSA9IDA7CiAJYnVmWzFdID0gZ2V0X2N0cmwoY2xpZW50KSB8IDB4ODA7CiAJYnVmWzJdID0gMDsKLQlidWZbM10gPSBCSU4yQkNEKGR0LT50bV9zZWMpOwotCWJ1Zls0XSA9IEJJTjJCQ0QoZHQtPnRtX21pbik7Ci0JYnVmWzVdID0gQklOMkJDRChkdC0+dG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZChkdC0+dG1fc2VjKTsKKwlidWZbNF0gPSBiaW4yYmNkKGR0LT50bV9taW4pOworCWJ1Zls1XSA9IGJpbjJiY2QoZHQtPnRtX2hvdXIpOwogCiAJaWYgKGRhdGV0b28pIHsKIAkJbGVuID0gODsKLQkJYnVmWzZdID0gQklOMkJDRChkdC0+dG1fbWRheSkgfCAoZHQtPnRtX3llYXIgPDwgNik7Ci0JCWJ1Zls3XSA9IEJJTjJCQ0QoZHQtPnRtX21vbiArIDEpICB8IChkdC0+dG1fd2RheSA8PCA1KTsKKwkJYnVmWzZdID0gYmluMmJjZChkdC0+dG1fbWRheSkgfCAoZHQtPnRtX3llYXIgPDwgNik7CisJCWJ1Zls3XSA9IGJpbjJiY2QoZHQtPnRtX21vbiArIDEpICB8IChkdC0+dG1fd2RheSA8PCA1KTsKIAl9CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAoY2hhciAqKWJ1ZiwgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMC5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMwLmMKaW5kZXggODQ0OGVlYi4uODI2MTUzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMwLmMKQEAgLTM0LDE1ICszNCw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHBsMDMwX29wZW4oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwbDAzMF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLX0KLQogc3RhdGljIGludCBwbDAzMF9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiAtRU5PSU9DVExDTUQ7CkBAIC0xMDQsOCArOTUsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGwwMzBfb3BzID0gewotCS5vcGVuCQk9IHBsMDMwX29wZW4sCi0JLnJlbGVhc2UJPSBwbDAzMF9yZWxlYXNlLAogCS5pb2N0bAkJPSBwbDAzMF9pb2N0bCwKIAkucmVhZF90aW1lCT0gcGwwMzBfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHBsMDMwX3NldF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCAwOGI0NjEwLi4zMzNlZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtNDUsMTggKzQ1LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcGwwMzFfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JLyoKLQkgKiBXZSByZXF1ZXN0IElSUSBpbiBwbDAzMV9wcm9iZSwgc28gbm90aGluZyB0byBkbyBoZXJlLi4uCi0JICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBsMDMxX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotfQotCiBzdGF0aWMgaW50IHBsMDMxX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMTE4LDggKzEwNiw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwbDAzMV9vcHMgPSB7Ci0JLm9wZW4gPSBwbDAzMV9vcGVuLAotCS5yZWxlYXNlID0gcGwwMzFfcmVsZWFzZSwKIAkuaW9jdGwgPSBwbDAzMV9pb2N0bCwKIAkucmVhZF90aW1lID0gcGwwMzFfcmVhZF90aW1lLAogCS5zZXRfdGltZSA9IHBsMDMxX3NldF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwppbmRleCAzOTU5ODViLi40MjAyOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYwpAQCAtODAsMTMgKzgwLDEzIEBACiAKIAltZW1zZXQoZHQsIDAsIHNpemVvZigqZHQpKTsKIAotCWR0LT50bV9zZWMgPSBCQ0QyQklOKGJ1ZlswXSk7IC8qIFJTRUNDTlQgKi8KLQlkdC0+dG1fbWluID0gQkNEMkJJTihidWZbMV0pOyAvKiBSTUlOQ05UICovCi0JZHQtPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZlsyXSk7IC8qIFJIUkNOVCAqLworCWR0LT50bV9zZWMgPSBiY2QyYmluKGJ1ZlswXSk7IC8qIFJTRUNDTlQgKi8KKwlkdC0+dG1fbWluID0gYmNkMmJpbihidWZbMV0pOyAvKiBSTUlOQ05UICovCisJZHQtPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZlsyXSk7IC8qIFJIUkNOVCAqLwogCi0JZHQtPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZlszXSk7IC8qIFJEQVlDTlQgKi8KLQlkdC0+dG1fbW9uID0gQkNEMkJJTihidWZbNF0pIC0gMTsgLyogUk1PTkNOVCAqLwotCWR0LT50bV95ZWFyID0gQkNEMkJJTihidWZbNV0pICsgMTAwOyAvKiBSWVJDTlQgKi8KKwlkdC0+dG1fbWRheSA9IGJjZDJiaW4oYnVmWzNdKTsgLyogUkRBWUNOVCAqLworCWR0LT50bV9tb24gPSBiY2QyYmluKGJ1Zls0XSkgLSAxOyAvKiBSTU9OQ05UICovCisJZHQtPnRtX3llYXIgPSBiY2QyYmluKGJ1Zls1XSkgKyAxMDA7IC8qIFJZUkNOVCAqLwogCiAJLyogdGhlIHJ0YyBkZXZpY2UgbWF5IGNvbnRhaW4gaWxsZWdhbCB2YWx1ZXMgb24gcG93ZXIgdXAKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIGRhdGEgc2hlZXQuIG1ha2Ugc3VyZSB0aGV5IGFyZSB2YWxpZC4KQEAgLTEwMywxMiArMTAzLDEyIEBACiAJaWYgKHllYXIgPj0gMjEwMCB8fCB5ZWFyIDwgMjAwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB3cml0ZV9yZWcoZGV2LCBSSFJDTlQsIEJJTjJCQ0QoZHQtPnRtX2hvdXIpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTUlOQ05ULCBCSU4yQkNEKGR0LT50bV9taW4pKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSU0VDQ05ULCBCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSREFZQ05ULCBCSU4yQkNEKGR0LT50bV9tZGF5KSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUk1PTkNOVCwgQklOMkJDRChkdC0+dG1fbW9uICsgMSkpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJZUkNOVCwgQklOMkJDRChkdC0+dG1feWVhciAtIDEwMCkpOworCXJldCA9IHdyaXRlX3JlZyhkZXYsIFJIUkNOVCwgYmluMmJjZChkdC0+dG1faG91cikpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJNSU5DTlQsIGJpbjJiY2QoZHQtPnRtX21pbikpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJTRUNDTlQsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJEQVlDTlQsIGJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTU9OQ05ULCBiaW4yYmNkKGR0LT50bV9tb24gKyAxKSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUllSQ05ULCBiaW4yYmNkKGR0LT50bV95ZWFyIC0gMTAwKSk7CiAJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUldLQ05ULCAxIDw8IGR0LT50bV93ZGF5KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYwppbmRleCAxYzE0ZDQ0Li5lNmVhM2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMKQEAgLTIzNSwzMyArMjM1LDMzIEBACiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfU0VDKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9TRUMxMCkgPDwgNCk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTUlOKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NSU4xMCkgPDwgNCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUik7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUjEwKSA8PCA0KTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oZGF0YSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGRhdGEpOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0RBWSk7CiAJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfREFZMTApIDw8IDQpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTU9OKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NT04xMCkgPDwgNCk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oZGF0YSkgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKGRhdGEpIC0gMTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSMTApIDw8IDQpOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oZGF0YSk7CiAKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1dFRUspOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oZGF0YSk7CiAKIAlSUzVDMzEzX0NFRElTQUJMRTsKIAluZGVsYXkoNzAwKTsJCS8qIENFOkwgKi8KQEAgLTI5NCwzMSArMjk0LDMxIEBACiAJCX0KIAl9CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfU0VDLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfU0VDMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9taW4pOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NSU4sIGRhdGEgKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTUlOMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1faG91cik7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0hPVVIsIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9IT1VSMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0RBWSwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0RBWTEwLCAoZGF0YT4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01PTiwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01PTjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9ZRUFSLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfWUVBUjEwLCAoZGF0YSA+PiA0KSk7CiAKLQlkYXRhID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9XRUVLLCBkYXRhKTsKIAogCVJTNUMzMTNfQ0VESVNBQkxFOwkvKiBDRTpIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwppbmRleCA4Mzk0NjI2Li5kZDFlMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTc0LDIwICs3NCwyMCBAQAogCXR4YnVmWzNdID0gMDsJLyogZHVtbXkgKi8KIAl0eGJ1Zls0XSA9IFJTNUMzNDhfQ01EX01XKFJTNUMzNDhfUkVHX1NFQ1MpOyAvKiBjbWQsIHNlYywgLi4uICovCiAJdHhwID0gJnR4YnVmWzVdOwotCXR4cFtSUzVDMzQ4X1JFR19TRUNTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JdHhwW1JTNUMzNDhfUkVHX01JTlNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwl0eHBbUlM1QzM0OF9SRUdfU0VDU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXR4cFtSUzVDMzQ4X1JFR19NSU5TXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJaWYgKHBkYXRhLT5ydGNfMjRoKSB7Ci0JCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKKwkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCX0gZWxzZSB7CiAJCS8qIGhvdXIgMCBpcyBBTTEyLCBub29uIGlzIFBNMTIgKi8KLQkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IEJJTjJCQ0QoKHRtLT50bV9ob3VyICsgMTEpICUgMTIgKyAxKSB8CisJCXR4cFtSUzVDMzQ4X1JFR19IT1VSU10gPSBiaW4yYmNkKCh0bS0+dG1faG91ciArIDExKSAlIDEyICsgMSkgfAogCQkJKHRtLT50bV9ob3VyID49IDEyID8gUlM1QzM0OF9CSVRfUE0gOiAwKTsKIAl9Ci0JdHhwW1JTNUMzNDhfUkVHX1dEQVldID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JdHhwW1JTNUMzNDhfUkVHX0RBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQl0eHBbUlM1QzM0OF9SRUdfTU9OVEhdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgfAorCXR4cFtSUzVDMzQ4X1JFR19XREFZXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCXR4cFtSUzVDMzQ4X1JFR19EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJdHhwW1JTNUMzNDhfUkVHX01PTlRIXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpIHwKIAkJKHRtLT50bV95ZWFyID49IDEwMCA/IFJTNUMzNDhfQklUX1kySyA6IDApOwotCXR4cFtSUzVDMzQ4X1JFR19ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCXR4cFtSUzVDMzQ4X1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCS8qIHdyaXRlIGluIG9uZSB0cmFuc2ZlciB0byBhdm9pZCBkYXRhIGluY29uc2lzdGVuY3kgKi8KIAlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZiksIE5VTEwsIDApOwogCXVkZWxheSg2Mik7CS8qIFRjc3IgNjJ1cyAqLwpAQCAtMTE2LDIwICsxMTYsMjAgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX1NFQ1NdICYgUlM1QzM0OF9TRUNTX01BU0spOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX01JTlNdICYgUlM1QzM0OF9NSU5TX01BU0spOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0hPVVJTX01BU0spOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX1NFQ1NdICYgUlM1QzM0OF9TRUNTX01BU0spOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX01JTlNdICYgUlM1QzM0OF9NSU5TX01BU0spOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0hPVVJTX01BU0spOwogCWlmICghcGRhdGEtPnJ0Y18yNGgpIHsKIAkJdG0tPnRtX2hvdXIgJT0gMTI7CiAJCWlmIChyeGJ1ZltSUzVDMzQ4X1JFR19IT1VSU10gJiBSUzVDMzQ4X0JJVF9QTSkKIAkJCXRtLT50bV9ob3VyICs9IDEyOwogCX0KLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfV0RBWV0gJiBSUzVDMzQ4X1dEQVlfTUFTSyk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX0RBWV0gJiBSUzVDMzQ4X0RBWV9NQVNLKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfV0RBWV0gJiBSUzVDMzQ4X1dEQVlfTUFTSyk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX0RBWV0gJiBSUzVDMzQ4X0RBWV9NQVNLKTsKIAl0bS0+dG1fbW9uID0KLQkJQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X01PTlRIX01BU0spIC0gMTsKKwkJYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X01PTlRIX01BU0spIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19ZRUFSXSkgKworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19ZRUFSXSkgKwogCQkoKHJ4YnVmW1JTNUMzNDhfUkVHX01PTlRIXSAmIFJTNUMzNDhfQklUX1kySykgPyAxMDAgOiAwKTsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggNTZjYWY2Yi4uMmYyYzY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0xLDggKzEsOSBAQAogLyoKLSAqIEFuIEkyQyBkcml2ZXIgZm9yIFJpY29oIFJTNUMzNzIgYW5kIFJWNUMzOFs2N10gUlRDcworICogQW4gSTJDIGRyaXZlciBmb3IgUmljb2ggUlM1QzM3MiwgUjIwMjVTL0QgYW5kIFJWNUMzOFs2N10gUlRDcwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBQYXZlbCBNaXJvbmNoaWsgPHBtaXJvbmNoaWtAb3B0aWZhY2lvLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwNiBUb3dlciBUZWNobm9sb2dpZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQYXVsIE11bmR0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMyw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNiIKIAogCiAvKgpAQCAtNTEsNyArNTIsOCBAQAogIwlkZWZpbmUgUlM1Q19DVFJMMV9DVDQJCSg0IDw8IDApCS8qIDEgSHogbGV2ZWwgaXJxICovCiAjZGVmaW5lIFJTNUNfUkVHX0NUUkwyCQkxNQogIwlkZWZpbmUgUlM1QzM3Ml9DVFJMMl8yNAkJKDEgPDwgNSkKLSMJZGVmaW5lIFJTNUNfQ1RSTDJfWFNUUAkJKDEgPDwgNCkKKyMJZGVmaW5lIFIyMDI1X0NUUkwyX1hTVAkJKDEgPDwgNSkKKyMJZGVmaW5lIFJTNUNfQ1RSTDJfWFNUUAkJKDEgPDwgNCkJLyogb25seSBpZiAhUjIwMjVTL0QgKi8KICMJZGVmaW5lIFJTNUNfQ1RSTDJfQ1RGRwkJKDEgPDwgMikKICMJZGVmaW5lIFJTNUNfQ1RSTDJfQUFGRwkJKDEgPDwgMSkJLyogb3IgV0FGRyAqLwogIwlkZWZpbmUgUlM1Q19DVFJMMl9CQUZHCQkoMSA8PCAwKQkvKiBvciBEQUZHICovCkBAIC02Myw2ICs2NSw3IEBACiAKIGVudW0gcnRjX3R5cGUgewogCXJ0Y191bmRlZiA9IDAsCisJcnRjX3IyMDI1c2QsCiAJcnRjX3JzNWMzNzJhLAogCXJ0Y19yczVjMzcyYiwKIAlydGNfcnY1YzM4NiwKQEAgLTcwLDYgKzczLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCByczVjMzcyX2lkW10gPSB7CisJeyAicjIwMjVzZCIsIHJ0Y19yMjAyNXNkIH0sCiAJeyAicnM1YzM3MmEiLCBydGNfcnM1YzM3MmEgfSwKIAl7ICJyczVjMzcyYiIsIHJ0Y19yczVjMzcyYiB9LAogCXsgInJ2NWMzODYiLCBydGNfcnY1YzM4NiB9LApAQCAtODksNiArOTMsNyBAQAogCWVudW0gcnRjX3R5cGUJCXR5cGU7CiAJdW5zaWduZWQJCXRpbWUyNDoxOwogCXVuc2lnbmVkCQloYXNfaXJxOjE7CisJdW5zaWduZWQJCXNtYnVzOjE7CiAJY2hhcgkJCWJ1ZlsxN107CiAJY2hhcgkJCSpyZWdzOwogfTsKQEAgLTEwNiwxMCArMTExLDI1IEBACiAJICoKIAkgKiBUaGUgZmlyc3QgbWV0aG9kIGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBpb3AzeHggYWRhcHRlciBkcml2ZXIsIG9uIGF0CiAJICogbGVhc3QgODAyMTkgY2hpcHM7IHRoaXMgd29ya3MgYXJvdW5kIHRoYXQgYnVnLgorCSAqCisJICogVGhlIHRoaXJkIG1ldGhvZCBvbiB0aGUgb3RoZXIgaGFuZCBkb2Vzbid0IHdvcmsgZm9yIHRoZSBTTUJ1cy1vbmx5CisJICogY29uZmlndXJhdGlvbnMsIHNvIHdlIHVzZSB0aGUgdGhlIGZpcnN0IG1ldGhvZCB0aGVyZSwgc3RyaXBwaW5nIG9mZgorCSAqIHRoZSBleHRyYSByZWdpc3RlciBpbiB0aGUgcHJvY2Vzcy4KIAkgKi8KLQlpZiAoKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpKSAhPSAxKSB7Ci0JCWRldl93YXJuKCZjbGllbnQtPmRldiwgImNhbid0IHJlYWQgcmVnaXN0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJaWYgKHJzNWMtPnNtYnVzKSB7CisJCWludCBhZGRyID0gUlM1Q19BRERSKFJTNUMzNzJfUkVHX1NFQ1MpOworCQlpbnQgc2l6ZSA9IHNpemVvZihyczVjLT5idWYpIC0gMTsKKworCQlpZiAoaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBhZGRyLCBzaXplLAorCQkJCQkJICByczVjLT5idWYgKyAxKSAhPSBzaXplKSB7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJjYW4ndCByZWFkIHJlZ2lzdGVyc1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMSkpICE9IDEpIHsKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImNhbid0IHJlYWQgcmVnaXN0ZXJzXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsCkBAIC0xMjgsOSArMTQ4LDkgQEAKIAl1bnNpZ25lZAlob3VyOwogCiAJaWYgKHJzNWMtPnRpbWUyNCkKLQkJcmV0dXJuIEJDRDJCSU4ocmVnICYgMHgzZik7CisJCXJldHVybiBiY2QyYmluKHJlZyAmIDB4M2YpOwogCi0JaG91ciA9IEJDRDJCSU4ocmVnICYgMHgxZik7CisJaG91ciA9IGJjZDJiaW4ocmVnICYgMHgxZik7CiAJaWYgKGhvdXIgPT0gMTIpCiAJCWhvdXIgPSAwOwogCWlmIChyZWcgJiAweDIwKQpAQCAtMTQxLDE1ICsxNjEsMTUgQEAKIHN0YXRpYyB1bnNpZ25lZCByczVjX2hyMnJlZyhzdHJ1Y3QgcnM1YzM3MiAqcnM1YywgdW5zaWduZWQgaG91cikKIHsKIAlpZiAocnM1Yy0+dGltZTI0KQotCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoaG91cik7CiAKIAlpZiAoaG91ciA+IDEyKQotCQlyZXR1cm4gMHgyMCB8IEJJTjJCQ0QoaG91ciAtIDEyKTsKKwkJcmV0dXJuIDB4MjAgfCBiaW4yYmNkKGhvdXIgLSAxMik7CiAJaWYgKGhvdXIgPT0gMTIpCi0JCXJldHVybiAweDIwIHwgQklOMkJDRCgxMik7CisJCXJldHVybiAweDIwIHwgYmluMmJjZCgxMik7CiAJaWYgKGhvdXIgPT0gMCkKLQkJcmV0dXJuIEJJTjJCQ0QoMTIpOwotCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZCgxMik7CisJcmV0dXJuIGJpbjJiY2QoaG91cik7CiB9CiAKIHN0YXRpYyBpbnQgcnM1YzM3Ml9nZXRfZGF0ZXRpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTE2MCwxOCArMTgwLDE4IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NSU5TXSAmIDB4N2YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfU0VDU10gJiAweDdmKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01JTlNdICYgMHg3Zik7CiAJdG0tPnRtX2hvdXIgPSByczVjX3JlZzJocihyczVjLCByczVjLT5yZWdzW1JTNUMzNzJfUkVHX0hPVVJTXSk7CiAKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19XREFZXSAmIDB4MDcpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX0RBWV0gJiAweDNmKTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19XREFZXSAmIDB4MDcpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX0RBWV0gJiAweDNmKTsKIAogCS8qIHRtLT50bV9tb24gaXMgemVyby1iYXNlZCAqLwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOwogCiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTE4Nyw2ICsyMDcsNyBAQAogewogCXN0cnVjdCByczVjMzcyCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgY2hhcglidWZbOF07CisJaW50CQlhZGRyOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTk0LDE2ICsyMTUsMTYgQEAKIAkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JYnVmWzBdID0gUlM1Q19BRERSKFJTNUMzNzJfUkVHX1NFQ1MpOwotCWJ1ZlsxXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmWzJdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbM10gPSByczVjX2hyMnJlZyhyczVjLCB0bS0+dG1faG91cik7Ci0JYnVmWzRdID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JYnVmWzVdID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JYnVmWzZdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7Ci0JYnVmWzddID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7CisJYWRkciAgID0gUlM1Q19BRERSKFJTNUMzNzJfUkVHX1NFQ1MpOworCWJ1ZlswXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmWzFdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbMl0gPSByczVjX2hyMnJlZyhyczVjLCB0bS0+dG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZCh0bS0+dG1fd2RheSk7CisJYnVmWzRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJYnVmWzVdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJYnVmWzZdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CiAKLQlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgOCkpICE9IDgpIHsKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgYWRkciwgc2l6ZW9mKGJ1ZiksIGJ1ZikgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHdyaXRlIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTI2NiwxNiArMjg3LDE2IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgcnM1YzM3MgkJKnJzNWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1bnNpZ25lZCBjaGFyCQlidWZbMl07Ci0JaW50CQkJc3RhdHVzOworCXVuc2lnbmVkIGNoYXIJCWJ1ZjsKKwlpbnQJCQlzdGF0dXMsIGFkZHI7CiAKLQlidWZbMV0gPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKKwlidWYgPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUlRDX1VJRV9PRkY6CiAJY2FzZSBSVENfVUlFX09OOgogCQkvKiBzb21lIDMyN2EgbW9kZXMgdXNlIGEgZGlmZmVyZW50IElSUSBwaW4gZm9yIDFIeiBpcnFzICovCiAJCWlmIChyczVjLT50eXBlID09IHJ0Y19yczVjMzcyYQotCQkJCSYmIChidWZbMV0gJiBSUzVDMzcyQV9DVFJMMV9TTDEpKQorCQkJCSYmIChidWYgJiBSUzVDMzcyQV9DVFJMMV9TTDEpKQogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAljYXNlIFJUQ19BSUVfT0ZGOgogCWNhc2UgUlRDX0FJRV9PTjoKQEAgLTI5MywyOCArMzE0LDMwIEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKLQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCWJ1ZlsxXSAmPSB+UlM1Q19DVFJMMV9BQUxFOworCQlidWYgJj0gflJTNUNfQ1RSTDFfQUFMRTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLwotCQlidWZbMV0gfD0gUlM1Q19DVFJMMV9BQUxFOworCQlidWYgfD0gUlM1Q19DVFJMMV9BQUxFOwogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgkvKiB1cGRhdGUgb2ZmICovCi0JCWJ1ZlsxXSAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOworCQlidWYgJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09OOgkvKiB1cGRhdGUgb24gKi8KLQkJYnVmWzFdICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7Ci0JCWJ1ZlsxXSB8PSBSUzVDX0NUUkwxX0NUNDsKKwkJYnVmICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7CisJCWJ1ZiB8PSBSUzVDX0NUUkwxX0NUNDsKIAkJYnJlYWs7CiAJfQotCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSkgIT0gMikgeworCisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWYpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgdXBkYXRlIGFsYXJtXG4iLAogCQkJcnM1Yy0+cnRjLT5uYW1lKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9IGVsc2UKLQkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07CisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmOworCiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzQ0LDcgKzM2Nyw3IEBACiAKIAkvKiByZXBvcnQgYWxhcm0gdGltZSAqLwogCXQtPnRpbWUudG1fc2VjID0gMDsKLQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX01JTl0gJiAweDdmKTsKKwl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX01JTl0gJiAweDdmKTsKIAl0LT50aW1lLnRtX2hvdXIgPSByczVjX3JlZzJocihyczVjLCByczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfSE9VUlNdKTsKIAl0LT50aW1lLnRtX21kYXkgPSAtMTsKIAl0LT50aW1lLnRtX21vbiA9IC0xOwpAQCAtMzY0LDggKzM4Nyw4IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgcnM1YzM3MgkJKnJzNWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQJCQlzdGF0dXM7Ci0JdW5zaWduZWQgY2hhcgkJYnVmWzRdOworCWludAkJCXN0YXR1cywgYWRkciwgaTsKKwl1bnNpZ25lZCBjaGFyCQlidWZbM107CiAKIAkvKiBvbmx5IGhhbmRsZSB1cCB0byAyNCBob3VycyBpbiB0aGUgZnV0dXJlLCBsaWtlIFJUQ19BTE1fU0VUICovCiAJaWYgKHQtPnRpbWUudG1fbWRheSAhPSAtMQpAQCAtMzgwLDMzICs0MDMsMzYgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIAlpZiAocnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiBSUzVDX0NUUkwxX0FBTEUpIHsKLQkJYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKLQkJYnVmWzFdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiB+UlM1Q19DVFJMMV9BQUxFOwotCQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSAhPSAyKSB7CisJCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCQlidWZbMF0gPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSAmIH5SUzVDX0NUUkwxX0FBTEU7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmWzBdKSA8IDApIHsKIAkJCXByX2RlYnVnKCIlczogY2FuJ3QgZGlzYWJsZSBhbGFybVxuIiwgcnM1Yy0+cnRjLT5uYW1lKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOworCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlswXTsKIAl9CiAKIAkvKiBzZXQgYWxhcm0gKi8KLQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQUxBUk1fQV9NSU4pOwotCWJ1ZlsxXSA9IEJJTjJCQ0QodC0+dGltZS50bV9taW4pOwotCWJ1ZlsyXSA9IHJzNWNfaHIycmVnKHJzNWMsIHQtPnRpbWUudG1faG91cik7Ci0JYnVmWzNdID0gMHg3ZjsJLyogYW55L2FsbCBkYXlzICovCi0JaWYgKChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDQpKSAhPSA0KSB7Ci0JCXByX2RlYnVnKCIlczogY2FuJ3Qgc2V0IGFsYXJtIHRpbWVcbiIsIHJzNWMtPnJ0Yy0+bmFtZSk7Ci0JCXJldHVybiAtRUlPOworCWJ1ZlswXSA9IGJpbjJiY2QodC0+dGltZS50bV9taW4pOworCWJ1ZlsxXSA9IHJzNWNfaHIycmVnKHJzNWMsIHQtPnRpbWUudG1faG91cik7CisJYnVmWzJdID0gMHg3ZjsJLyogYW55L2FsbCBkYXlzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0FMQVJNX0FfTUlOICsgaSk7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmW2ldKSA8IDApIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3Qgc2V0IGFsYXJtIHRpbWVcbiIsIHJzNWMtPnJ0Yy0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCX0KIAogCS8qIC4uLiBhbmQgbWF5YmUgZW5hYmxlIGl0cyBpcnEgKi8KIAlpZiAodC0+ZW5hYmxlZCkgewotCQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOwotCQlidWZbMV0gPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSB8IFJTNUNfQ1RSTDFfQUFMRTsKLQkJaWYgKChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpKSAhPSAyKQorCQlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwkJYnVmWzBdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gfCBSUzVDX0NUUkwxX0FBTEU7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmWzBdKSA8IDApCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgZW5hYmxlIGFsYXJtXG4iLAogCQkJCXJzNWMtPnJ0Yy0+bmFtZSk7Ci0JCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOworCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlswXTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUwMywxOCArNTI5LDgxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciByczVjMzcyX2RyaXZlcjsKIAorc3RhdGljIGludCByczVjX29zY2lsbGF0b3Jfc2V0dXAoc3RydWN0IHJzNWMzNzIgKnJzNWMzNzIpCit7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJaW50IGFkZHIsIGksIHJldCA9IDA7CisKKwlpZiAocnM1YzM3Mi0+dHlwZSA9PSBydGNfcjIwMjVzZCkgeworCQlpZiAoIShyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFIyMDI1X0NUUkwyX1hTVCkpCisJCQlyZXR1cm4gcmV0OworCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmPSB+UjIwMjVfQ1RSTDJfWFNUOworCX0gZWxzZSB7CisJCWlmICghKHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICYgUlM1Q19DVFJMMl9YU1RQKSkKKwkJCXJldHVybiByZXQ7CisJCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICY9IH5SUzVDX0NUUkwyX1hTVFA7CisJfQorCisJYWRkciAgID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwlidWZbMF0gPSByczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKKwlidWZbMV0gPSByczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXTsKKworCS8qIHVzZSAyNGhyIG1vZGUgKi8KKwlzd2l0Y2ggKHJzNWMzNzItPnR5cGUpIHsKKwljYXNlIHJ0Y19yczVjMzcyYToKKwljYXNlIHJ0Y19yczVjMzcyYjoKKwkJYnVmWzFdIHw9IFJTNUMzNzJfQ1RSTDJfMjQ7CisJCXJzNWMzNzItPnRpbWUyNCA9IDE7CisJCWJyZWFrOworCWNhc2UgcnRjX3IyMDI1c2Q6CisJY2FzZSBydGNfcnY1YzM4NjoKKwljYXNlIHJ0Y19ydjVjMzg3YToKKwkJYnVmWzBdIHw9IFJWNUMzODdfQ1RSTDFfMjQ7CisJCXJzNWMzNzItPnRpbWUyNCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGltcG9zc2libGUgKi8KKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKwkJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSArIGkpOworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHJzNWMzNzItPmNsaWVudCwgYWRkciwgYnVmW2ldKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlswXTsKKwlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSA9IGJ1ZlsxXTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJzNWMzNzJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CisJaW50IHNtYnVzX21vZGUgPSAwOwogCXN0cnVjdCByczVjMzcyICpyczVjMzcyOwogCXN0cnVjdCBydGNfdGltZSB0bTsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDIHwKKwkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykpIHsKKwkJLyoKKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbWFzdGVyIG1vZGUgYWRhcHRlciwgdHJ5IGJyZWFraW5nCisJCSAqIGl0IGRvd24gaW4gdG8gdGhlIGJhcmVzdCBvZiBjYXBhYmlsaXRpZXMuCisJCSAqLworCQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8CisJCQkJSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKKwkJCXNtYnVzX21vZGUgPSAxOworCQllbHNlIHsKKwkJCS8qIFN0aWxsIG5vIGdvb2QsIGdpdmUgdXAgKi8KKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGV4aXQ7CisJCX0KIAl9CiAKIAlpZiAoIShyczVjMzcyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJzNWMzNzIpLCBHRlBfS0VSTkVMKSkpIHsKQEAgLTUyOCw2ICs2MTcsNyBAQAogCiAJLyogd2UgcmVhZCByZWdpc3RlcnMgMHgwZiB0aGVuIDB4MDAtMHgwZjsgc2tpcCB0aGUgZmlyc3Qgb25lICovCiAJcnM1YzM3Mi0+cmVncyA9ICZyczVjMzcyLT5idWZbMV07CisJcnM1YzM3Mi0+c21idXMgPSBzbWJ1c19tb2RlOwogCiAJZXJyID0gcnM1Y19nZXRfcmVncyhyczVjMzcyKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTU0Myw2ICs2MzMsNyBAQAogCQlpZiAocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJiBSUzVDMzcyX0NUUkwyXzI0KQogCQkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKIAkJYnJlYWs7CisJY2FzZSBydGNfcjIwMjVzZDoKIAljYXNlIHJ0Y19ydjVjMzg2OgogCWNhc2UgcnRjX3J2NWMzODdhOgogCQlpZiAocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiBSVjVDMzg3X0NUUkwxXzI0KQpAQCAtNTU4LDM5ICs2NDksMTQgQEAKIAogCS8qIGlmIHRoZSBvc2NpbGxhdG9yIGxvc3QgcG93ZXIgYW5kIG5vIG90aGVyIHNvZnR3YXJlIChsaWtlCiAJICogdGhlIGJvb3Rsb2FkZXIpIHNldCBpdCB1cCwgZG8gaXQgaGVyZS4KKwkgKgorCSAqIFRoZSBSMjAyNVMvRCBkb2VzIHRoaXMgYSBsaXR0bGUgZGlmZmVyZW50bHkgdGhhbiB0aGUgb3RoZXIKKwkgKiBwYXJ0cywgc28gd2Ugc3BlY2lhbCBjYXNlIHRoYXQuLgogCSAqLwotCWlmIChyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFJTNUNfQ1RSTDJfWFNUUCkgewotCQl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKLQotCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmPSB+UlM1Q19DVFJMMl9YU1RQOwotCi0JCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7Ci0JCWJ1ZlsxXSA9IHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOwotCQlidWZbMl0gPSByczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXTsKLQotCQkvKiB1c2UgMjRociBtb2RlICovCi0JCXN3aXRjaCAocnM1YzM3Mi0+dHlwZSkgewotCQljYXNlIHJ0Y19yczVjMzcyYToKLQkJY2FzZSBydGNfcnM1YzM3MmI6Ci0JCQlidWZbMl0gfD0gUlM1QzM3Ml9DVFJMMl8yNDsKLQkJCXJzNWMzNzItPnRpbWUyNCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBydGNfcnY1YzM4NjoKLQkJY2FzZSBydGNfcnY1YzM4N2E6Ci0JCQlidWZbMV0gfD0gUlY1QzM4N19DVFJMMV8yNDsKLQkJCXJzNWMzNzItPnRpbWUyNCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIGltcG9zc2libGUgKi8KLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpKSAhPSAzKSB7Ci0JCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInNldHVwIGVycm9yXG4iKTsKLQkJCWdvdG8gZXhpdF9rZnJlZTsKLQkJfQotCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlsxXTsKLQkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gPSBidWZbMl07CisJZXJyID0gcnM1Y19vc2NpbGxhdG9yX3NldHVwKHJzNWMzNzIpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInNldHVwIGVycm9yXG4iKTsKKwkJZ290byBleGl0X2tmcmVlOwogCX0KIAogCWlmIChyczVjMzcyX2dldF9kYXRldGltZShjbGllbnQsICZ0bSkgPCAwKQpAQCAtNTk4LDYgKzY2NCw3IEBACiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlcyBmb3VuZCwgJXMsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIiwKIAkJCSh7IGNoYXIgKnM7IHN3aXRjaCAocnM1YzM3Mi0+dHlwZSkgeworCQkJY2FzZSBydGNfcjIwMjVzZDoJcyA9ICJyMjAyNXNkIjsgYnJlYWs7CiAJCQljYXNlIHJ0Y19yczVjMzcyYToJcyA9ICJyczVjMzcyYSI7IGJyZWFrOwogCQkJY2FzZSBydGNfcnM1YzM3MmI6CXMgPSAicnM1YzM3MmIiOyBicmVhazsKIAkJCWNhc2UgcnRjX3J2NWMzODY6CXMgPSAicnY1YzM4NiI7IGJyZWFrOwpAQCAtNjY3LDcgKzczNCw4IEBACiAKIE1PRFVMRV9BVVRIT1IoCiAJCSJQYXZlbCBNaXJvbmNoaWsgPHBtaXJvbmNoaWtAb3B0aWZhY2lvLm5ldD4sICIKLQkJIkFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PiIpOworCQkiQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+LCAiCisJCSJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWNvaCBSUzVDMzcyIFJUQyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCmluZGV4IGE2ZmExZjIuLmRlZjRkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIHN0YXRpYyBjaGFyIHMzNTM5MGFfaHIycmVnKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBpbnQgaG91cikKIHsKIAlpZiAoczM1MzkwYS0+dHdlbnR5Zm91cmhvdXIpCi0JCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZChob3VyKTsKIAogCWlmIChob3VyIDwgMTIpCi0JCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZChob3VyKTsKIAotCXJldHVybiAweDQwIHwgQklOMkJDRChob3VyIC0gMTIpOworCXJldHVybiAweDQwIHwgYmluMmJjZChob3VyIC0gMTIpOwogfQogCiBzdGF0aWMgaW50IHMzNTM5MGFfcmVnMmhyKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBjaGFyIHJlZykKQEAgLTExNyw5ICsxMTcsOSBAQAogCXVuc2lnbmVkIGhvdXI7CiAKIAlpZiAoczM1MzkwYS0+dHdlbnR5Zm91cmhvdXIpCi0JCXJldHVybiBCQ0QyQklOKHJlZyAmIDB4M2YpOworCQlyZXR1cm4gYmNkMmJpbihyZWcgJiAweDNmKTsKIAotCWhvdXIgPSBCQ0QyQklOKHJlZyAmIDB4M2YpOworCWhvdXIgPSBiY2QyYmluKHJlZyAmIDB4M2YpOwogCWlmIChyZWcgJiAweDQwKQogCQlob3VyICs9IDEyOwogCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCQl0bS0+dG1fbWluLCB0bS0+dG1faG91ciwgdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLAogCQl0bS0+dG1fd2RheSk7CiAKLQlidWZbUzM1MzkwQV9CWVRFX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7Ci0JYnVmW1MzNTM5MEFfQllURV9NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlidWZbUzM1MzkwQV9CWVRFX0RBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlidWZbUzM1MzkwQV9CWVRFX1dEQVldID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJYnVmW1MzNTM5MEFfQllURV9ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOworCWJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW1MzNTM5MEFfQllURV9EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJYnVmW1MzNTM5MEFfQllURV9XREFZXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOwogCWJ1ZltTMzUzOTBBX0JZVEVfSE9VUlNdID0gczM1MzkwYV9ocjJyZWcoczM1MzkwYSwgdG0tPnRtX2hvdXIpOwotCWJ1ZltTMzUzOTBBX0JZVEVfTUlOU10gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZltTMzUzOTBBX0JZVEVfU0VDU10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOworCWJ1ZltTMzUzOTBBX0JZVEVfTUlOU10gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltTMzUzOTBBX0JZVEVfU0VDU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOwogCiAJLyogVGhpcyBjaGlwIGV4cGVjdHMgdGhlIGJpdHMgb2YgZWFjaCBieXRlIHRvIGJlIGluIHJldmVyc2Ugb3JkZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQpAQCAtMTY4LDEzICsxNjgsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNzsgKytpKQogCQlidWZbaV0gPSBiaXRyZXY4KGJ1ZltpXSk7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX1NFQ1NdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX01JTlNdKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX1NFQ1NdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX01JTlNdKTsKIAl0bS0+dG1faG91ciA9IHMzNTM5MGFfcmVnMmhyKHMzNTM5MGEsIGJ1ZltTMzUzOTBBX0JZVEVfSE9VUlNdKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9XREFZXSk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfREFZXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9NT05USF0pIC0gMTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0pOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX0RBWV0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsIG1kYXk9JWQsICIKIAkJIm1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwgX19mdW5jX18sIHRtLT50bV9zZWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggZTdkMTliNi4uOTEwYmM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtMTM0LDEyICsxMzQsMTIgQEAKIAkJIHJ0Y190bS0+dG1feWVhciwgcnRjX3RtLT50bV9tb24sIHJ0Y190bS0+dG1fbWRheSwKIAkJIHJ0Y190bS0+dG1faG91ciwgcnRjX3RtLT50bV9taW4sIHJ0Y190bS0+dG1fc2VjKTsKIAotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9zZWMpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOworCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJcnRjX3RtLT50bV9taW4gPSBiY2QyYmluKHJ0Y190bS0+dG1fbWluKTsKKwlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCXJ0Y190bS0+dG1fbW9uID0gYmNkMmJpbihydGNfdG0tPnRtX21vbik7CisJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOwogCiAJcnRjX3RtLT50bV95ZWFyICs9IDEwMDsKIAlydGNfdG0tPnRtX21vbiAtPSAxOwpAQCAtMTYzLDEyICsxNjMsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksICBiYXNlICsgUzNDMjQxMF9SVENTRUMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCAgYmFzZSArIFMzQzI0MTBfUlRDTUlOKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX1JUQ0hPVVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgYmFzZSArIFMzQzI0MTBfUlRDREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBiYXNlICsgUzNDMjQxMF9SVENNT04pOwotCXdyaXRlYihCSU4yQkNEKHllYXIpLCBiYXNlICsgUzNDMjQxMF9SVENZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ1NFQyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksICBiYXNlICsgUzNDMjQxMF9SVENNSU4pOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgYmFzZSArIFMzQzI0MTBfUlRDSE9VUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBiYXNlICsgUzNDMjQxMF9SVENEQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGJhc2UgKyBTM0MyNDEwX1JUQ01PTik7CisJd3JpdGViKGJpbjJiY2QoeWVhciksIGJhc2UgKyBTM0MyNDEwX1JUQ1lFQVIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTksMzQgKzE5OSwzNCBAQAogCS8qIGRlY29kZSB0aGUgYWxhcm0gZW5hYmxlIGZpZWxkICovCiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fU0VDRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9zZWMpOworCQlhbG1fdG0tPnRtX3NlYyA9IGJjZDJiaW4oYWxtX3RtLT50bV9zZWMpOwogCWVsc2UKIAkJYWxtX3RtLT50bV9zZWMgPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01JTkVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKKwkJYWxtX3RtLT50bV9taW4gPSBiY2QyYmluKGFsbV90bS0+dG1fbWluKTsKIAllbHNlCiAJCWFsbV90bS0+dG1fbWluID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9IT1VSRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwkJYWxtX3RtLT50bV9ob3VyID0gYmNkMmJpbihhbG1fdG0tPnRtX2hvdXIpOwogCWVsc2UKIAkJYWxtX3RtLT50bV9ob3VyID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9EQVlFTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21kYXkpOworCQlhbG1fdG0tPnRtX21kYXkgPSBiY2QyYmluKGFsbV90bS0+dG1fbWRheSk7CiAJZWxzZQogCQlhbG1fdG0tPnRtX21kYXkgPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01PTkVOKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9tb24pOworCQlhbG1fdG0tPnRtX21vbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9tb24pOwogCQlhbG1fdG0tPnRtX21vbiAtPSAxOwogCX0gZWxzZSB7CiAJCWFsbV90bS0+dG1fbW9uID0gMHhmZjsKIAl9CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fWUVBUkVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1feWVhcik7CisJCWFsbV90bS0+dG1feWVhciA9IGJjZDJiaW4oYWxtX3RtLT50bV95ZWFyKTsKIAllbHNlCiAJCWFsbV90bS0+dG1feWVhciA9IDB4ZmZmZjsKIApAQCAtMjUwLDE3ICsyNTAsMTcgQEAKIAogCWlmICh0bS0+dG1fc2VjIDwgNjAgJiYgdG0tPnRtX3NlYyA+PSAwKSB7CiAJCWFscm1fZW4gfD0gUzNDMjQxMF9SVENBTE1fU0VDRU47Ci0JCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCBiYXNlICsgUzNDMjQxMF9BTE1TRUMpOworCQl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgYmFzZSArIFMzQzI0MTBfQUxNU0VDKTsKIAl9CiAKIAlpZiAodG0tPnRtX21pbiA8IDYwICYmIHRtLT50bV9taW4gPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX01JTkVOOwotCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgYmFzZSArIFMzQzI0MTBfQUxNTUlOKTsKKwkJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGJhc2UgKyBTM0MyNDEwX0FMTU1JTik7CiAJfQogCiAJaWYgKHRtLT50bV9ob3VyIDwgMjQgJiYgdG0tPnRtX2hvdXIgPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX0hPVVJFTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9BTE1IT1VSKTsKKwkJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9BTE1IT1VSKTsKIAl9CiAKIAlwcl9kZWJ1Zygic2V0dGluZyBTM0MyNDEwX1JUQ0FMTSB0byAlMDh4XG4iLCBhbHJtX2VuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggMWY4OGU5ZS4uYWFmOWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTI1NywxMiArMjU3LDYgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzaF9ydGNfc2V0cGllKGRldiwgMCk7Ci0Jc2hfcnRjX3NldGFpZShkZXYsIDApOwotfQotCiBzdGF0aWMgaW50IHNoX3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0zMzAsMjMgKzMyNCwyMyBAQAogCiAJCXNlYzEyOCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFI2NENOVCk7CiAKLQkJdG0tPnRtX3NlYwk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUlNFQ0NOVCkpOwotCQl0bS0+dG1fbWluCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKSk7Ci0JCXRtLT50bV9ob3VyCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpKTsKLQkJdG0tPnRtX3dkYXkJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCkpOwotCQl0bS0+dG1fbWRheQk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkRBWUNOVCkpOwotCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKSkgLSAxOworCQl0bS0+dG1fc2VjCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKSk7CisJCXRtLT50bV9taW4JPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpKTsKKwkJdG0tPnRtX2hvdXIJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCkpOworCQl0bS0+dG1fd2RheQk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUldLQ05UKSk7CisJCXRtLT50bV9tZGF5CT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKSk7CisJCXRtLT50bV9tb24JPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpKSAtIDE7CiAKIAkJaWYgKHJ0Yy0+Y2FwYWJpbGl0aWVzICYgUlRDX0NBUF80X0RJR0lUX1lFQVIpIHsKIAkJCXlyICA9IHJlYWR3KHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7Ci0JCQl5cjEwMCA9IEJDRDJCSU4oeXIgPj4gOCk7CisJCQl5cjEwMCA9IGJjZDJiaW4oeXIgPj4gOCk7CiAJCQl5ciAmPSAweGZmOwogCQl9IGVsc2UgewogCQkJeXIgID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUllSQ05UKTsKLQkJCXlyMTAwID0gQkNEMkJJTigoeXIgPT0gMHg5OSkgPyAweDE5IDogMHgyMCk7CisJCQl5cjEwMCA9IGJjZDJiaW4oKHlyID09IDB4OTkpID8gMHgxOSA6IDB4MjApOwogCQl9CiAKLQkJdG0tPnRtX3llYXIgPSAoeXIxMDAgKiAxMDAgKyBCQ0QyQklOKHlyKSkgLSAxOTAwOworCQl0bS0+dG1feWVhciA9ICh5cjEwMCAqIDEwMCArIGJjZDJiaW4oeXIpKSAtIDE5MDA7CiAKIAkJc2VjMiA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFI2NENOVCk7CiAJCWNmX2JpdCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpICYgUkNSMV9DRjsKQEAgLTM4OCwyMCArMzgyLDIwIEBACiAJdG1wICY9IH5SQ1IyX1NUQVJUOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjIpOwogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksICBydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgIHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgcnRjLT5yZWdiYXNlICsgUkhSQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSksIHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpLCAgcnRjLT5yZWdiYXNlICsgUlNFQ0NOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksICBydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpLCBydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgcnRjLT5yZWdiYXNlICsgUkRBWUNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKTsKIAogCWlmIChydGMtPmNhcGFiaWxpdGllcyAmIFJUQ19DQVBfNF9ESUdJVF9ZRUFSKSB7Ci0JCXllYXIgPSAoQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCkgPDwgOCkgfAotCQkJQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJCXllYXIgPSAoYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCkgPDwgOCkgfAorCQkJYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJCXdyaXRldyh5ZWFyLCBydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwogCX0gZWxzZSB7CiAJCXllYXIgPSB0bS0+dG1feWVhciAlIDEwMDsKLQkJd3JpdGViKEJJTjJCQ0QoeWVhciksIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CisJCXdyaXRlYihiaW4yYmNkKHllYXIpLCBydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwogCX0KIAogCS8qIFN0YXJ0IFJUQyAqLwpAQCAtNDIzLDcgKzQxNyw3IEBACiAJYnl0ZSA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOwogCWlmIChieXRlICYgQVJfRU5CKSB7CiAJCWJ5dGUgJj0gfkFSX0VOQjsJLyogc3RyaXAgdGhlIGVuYWJsZSBiaXQgKi8KLQkJdmFsdWUgPSBCQ0QyQklOKGJ5dGUpOworCQl2YWx1ZSA9IGJjZDJiaW4oYnl0ZSk7CiAJfQogCiAJcmV0dXJuIHZhbHVlOwpAQCAtNDYxLDcgKzQ1NSw3IEBACiAJaWYgKHZhbHVlIDwgMCkKIAkJd3JpdGViKDAsIHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOwogCWVsc2UKLQkJd3JpdGViKEJJTjJCQ0QodmFsdWUpIHwgQVJfRU5CLCAgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7CisJCXdyaXRlYihiaW4yYmNkKHZhbHVlKSB8IEFSX0VOQiwgIHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOwogfQogCiBzdGF0aWMgaW50IHNoX3J0Y19jaGVja19hbGFybShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtNTU5LDcgKzU1Myw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBzaF9ydGNfb3BzID0gewotCS5yZWxlYXNlCT0gc2hfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHNoX3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gc2hfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBzaF9ydGNfc2V0X3RpbWUsCkBAIC01NzUsNyArNTY4LDcgQEAKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IHRtcDsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKKwlpbnQgcmV0OwogCiAJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghcnRjKSkKQEAgLTU4NCwyNiArNTc3LDMzIEBACiAJc3Bpbl9sb2NrX2luaXQoJnJ0Yy0+bG9jayk7CiAKIAkvKiBnZXQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLwotCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAodW5saWtlbHkocnRjLT5wZXJpb2RpY19pcnEgPCAwKSkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgcGVyaW9kXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KKwlydGMtPnBlcmlvZGljX2lycSA9IHJldDsKIAotCXJ0Yy0+Y2FycnlfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAodW5saWtlbHkocnRjLT5jYXJyeV9pcnEgPCAwKSkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgY2FycnlcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQorCXJ0Yy0+Y2FycnlfaXJxID0gcmV0OwogCi0JcnRjLT5hbGFybV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwotCWlmICh1bmxpa2VseShydGMtPmFsYXJtX2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBhbGFybVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CisJcnRjLT5hbGFybV9pcnEgPSByZXQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJTyByZXNvdXJjZVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCmluZGV4IDMxZDNjOGMuLmY0Y2Q0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCkBAIC04MiwxNCArODIsMTQgQEAKIAlmbGFncyA9IHJlYWRiKHBkYXRhLT5pb2FkZHIgKyBSVENfRkxBR1MpOwogCXdyaXRlYihmbGFncyB8IFJUQ19XUklURSwgcGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKLQl3cml0ZWIoQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKIAogCXdyaXRlYihmbGFncyAmIH5SVENfV1JJVEUsIHBkYXRhLT5pb2FkZHIgKyBSVENfRkxBR1MpOwogCXJldHVybiAwOwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKIAl5ZWFyID0gcmVhZGIoaW9hZGRyICsgUlRDX1lFQVIpOwogCWNlbnR1cnkgPSByZWFkYihpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CiAJd3JpdGViKGZsYWdzICYgflJUQ19SRUFELCBpb2FkZHIgKyBSVENfRkxBR1MpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKQEAgLTE0OCwxNiArMTQ4LDE2IEBACiAJd3JpdGViKGZsYWdzIHwgUlRDX1dSSVRFLCBpb2FkZHIgKyBSVENfRkxBR1MpOwogCiAJd3JpdGViKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpLAogCSAgICAgICBpb2FkZHIgKyBSVENfREFURV9BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX2hvdXIgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1faG91ciksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpLAogCSAgICAgICBpb2FkZHIgKyBSVENfSE9VUlNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX01JTlVURVNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fc2VjKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+aXJxZW4gPyBSVENfSU5UU19BSUUgOiAwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7CiAJcmVhZGIoaW9hZGRyICsgUlRDX0ZMQUdTKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLwpAQCAtMjE1LDE3ICsyMTUsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHZvaWQgc3RrMTd0YThfcnRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWlmIChwZGF0YS0+aXJxID49IDApIHsKLQkJcGRhdGEtPmlycWVuID0gMDsKLQkJc3RrMTd0YThfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JfQotfQotCiBzdGF0aWMgaW50IHN0azE3dGE4X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNTQsNyArMjQzLDYgQEAKIAkuc2V0X3RpbWUJPSBzdGsxN3RhOF9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBzdGsxN3RhOF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gc3RrMTd0YThfcnRjX3NldF9hbGFybSwKLQkucmVsZWFzZQk9IHN0azE3dGE4X3J0Y19yZWxlYXNlLAogCS5pb2N0bAkJPSBzdGsxN3RhOF9ydGNfaW9jdGwsCiB9OwogCkBAIC0yOTIsNyArMjgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gUlRDX09GRlNFVCwKIAkucmVhZCA9IHN0azE3dGE4X252cmFtX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCmluZGV4IDEwMDI1ZDguLjE0ZDRmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCkBAIC05MiwxOSArOTIsMTkgQEAKIAogCS8qIC4uLmFuZCB0aGVuIHJlYWQgY29uc3RhbnQgdmFsdWVzLiAqLwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUyk7Ci0JZHQtPnRtX3NlYwk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fc2VjCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUyk7Ci0JZHQtPnRtX21pbgk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fbWluCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMpOwotCWR0LT50bV9ob3VyCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9ob3VyCT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZKTsKLQlkdC0+dG1fbWRheQk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fbWRheQk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRIKTsKLQlkdC0+dG1fbW9uICAgID0gQkNEMkJJTih0bXApIC0gMTsKKwlkdC0+dG1fbW9uICAgID0gYmNkMmJpbih0bXApIC0gMTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZKTsKLQlkdC0+dG1fd2RheQk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1fd2RheQk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1lFQVIpOwotCWR0LT50bV95ZWFyID0gQkNEMkJJTih0bXApKzEwMDsKKwlkdC0+dG1feWVhciA9IGJjZDJiaW4odG1wKSsxMDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiXG4lcyA6IFJlYWQgUlRDIHZhbHVlc1xuIixfX2Z1bmNfXyk7CkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogI2VuZGlmCiAKIAkvKiBXcml0ZSBhbGwgdGhlIHZhbHVlcyB0byByYW0uLi4gKi8KLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMsIAlCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01JTlVURVMsIAlCSU4yQkNEKGR0LT50bV9taW4pKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX0hPVVJTLCAJQklOMkJDRChkdC0+dG1faG91cikpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZLAlCSU4yQkNEKGR0LT50bV9tZGF5KSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USCwgICAgIEJJTjJCQ0QoZHQtPnRtX21vbiArIDEpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZLCAJQklOMkJDRChkdC0+dG1fd2RheSkpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfWUVBUiwgCUJJTjJCQ0QoZHQtPnRtX3llYXIgJSAxMDApKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMsIAliaW4yYmNkKGR0LT50bV9zZWMpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01JTlVURVMsIAliaW4yYmNkKGR0LT50bV9taW4pKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX0hPVVJTLCAJYmluMmJjZChkdC0+dG1faG91cikpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEhfREFZLAliaW4yYmNkKGR0LT50bV9tZGF5KSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USCwgICAgIGJpbjJiY2QoZHQtPnRtX21vbiArIDEpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1dFRUtfREFZLCAJYmluMmJjZChkdC0+dG1fd2RheSkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfWUVBUiwgCWJpbjJiY2QoZHQtPnRtX3llYXIgJSAxMDApKTsKIAogCS8qIC4uLmFuZCBzZXQgdGhlIGNsb2NrLiAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfQ01EX1JBTTJDTE9DSywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDdkY2ZiYTEuLjMxMGMxMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykKIAkJCWJ1ZltpXSAmPSAweDdGOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW0NDUl9TRUNdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbQ0NSX01JTl0pOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbQ0NSX0hPVVJdICYgMHgzRik7IC8qIGhyIGlzIDAtMjMgKi8KLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW0NDUl9NREFZXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW0NDUl9NT05USF0pIC0gMTsgLyogbW9uIGlzIDAtMTEgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW0NDUl9ZRUFSXSkKLQkJCSsgKEJDRDJCSU4oYnVmW0NDUl9ZMktdKSAqIDEwMCkgLSAxOTAwOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltDQ1JfU0VDXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW0NDUl9NSU5dKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW0NDUl9IT1VSXSAmIDB4M0YpOyAvKiBociBpcyAwLTIzICovCisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltDQ1JfTURBWV0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltDQ1JfTU9OVEhdKSAtIDE7IC8qIG1vbiBpcyAwLTExICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltDQ1JfWUVBUl0pCisJCQkrIChiY2QyYmluKGJ1ZltDQ1JfWTJLXSkgKiAxMDApIC0gMTkwMDsKIAl0bS0+dG1fd2RheSA9IGJ1ZltDQ1JfV0RBWV07CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgpAQCAtMTc0LDExICsxNzQsMTEgQEAKIAkJX19mdW5jX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyKTsKIAotCWJ1ZltDQ1JfU0VDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmW0NDUl9NSU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlidWZbQ0NSX1NFQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZltDQ1JfTUlOXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAKIAkvKiBzZXQgaG91ciBhbmQgMjRociBiaXQgKi8KLQlidWZbQ0NSX0hPVVJdID0gQklOMkJDRCh0bS0+dG1faG91cikgfCBYMTIwNV9IUl9NSUw7CisJYnVmW0NDUl9IT1VSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpIHwgWDEyMDVfSFJfTUlMOwogCiAJLyogc2hvdWxkIHdlIGFsc28gc2V0IHRoZSBkYXRlPyAqLwogCWlmIChkYXRldG9vKSB7CkBAIC0xODcsMTUgKzE4NywxNSBAQAogCQkJX19mdW5jX18sCiAJCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCQlidWZbQ0NSX01EQVldID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJCWJ1ZltDQ1JfTURBWV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAogCQkvKiBtb250aCwgMSAtIDEyICovCi0JCWJ1ZltDQ1JfTU9OVEhdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJCWJ1ZltDQ1JfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAkJLyogeWVhciwgc2luY2UgdGhlIHJ0YyBlcG9jaCovCi0JCWJ1ZltDQ1JfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwkJYnVmW0NDUl9ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCQlidWZbQ0NSX1dEQVldID0gdG0tPnRtX3dkYXkgJiAweDA3OwotCQlidWZbQ0NSX1kyS10gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC8gMTAwKTsKKwkJYnVmW0NDUl9ZMktdID0gYmluMmJjZCh0bS0+dG1feWVhciAvIDEwMCk7CiAJfQogCiAJLyogSWYgd3JpdGluZyBhbGFybSByZWdpc3RlcnMsIHNldCBjb21wYXJlIGJpdHMgb24gcmVnaXN0ZXJzIDAtNCAqLwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCXZhbHVlID0gQkNEMkJJTihyZWcgJiBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5tYXNrKTsKKwkJdmFsdWUgPSBiY2QyYmluKHJlZyAmIHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1hc2spOwogCiAJCWlmICh2YWx1ZSA+IHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1heCB8fAogCQkJdmFsdWUgPCBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5taW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCA4NWZjYjQzLi43ODQ0NDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC01NDQsNyArNTQ0LDcgQEAKIAl9CiAJY3FyLT5yZXRyaWVzID0gRElBR19NQVhfUkVUUklFUzsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7Ci0JaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDQ5ZjlkMjIuLjJlNjBkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTE3MDAsNyArMTcwMCw3IEBACiAJCQlyZWNpZCsrOwogCQl9CiAJfQotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OwogCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IDkzZDliNjQuLjdkNDQyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCXJlY2lkKys7CiAJCX0KIAl9Ci0JaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCmluZGV4IDE3OTJiMmMuLjBiMTVjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKQEAgLTExNjgsMTkgKzExNjgsMTcgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcnAtPmNsdHR5ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNsYXNzMzI3MCwgJnJwLT5jZGV2LT5kZXYsCi0JCQkJCSAgICAgTUtERVYoSUJNX1RUWTMyNzBfTUFKT1IsIHJwLT5taW5vciksCi0JCQkJCSAgICAgTlVMTCwKLQkJCQkJICAgICAidHR5JXMiLCBkZXZfbmFtZSgmcnAtPmNkZXYtPmRldikpOworCXJwLT5jbHR0eWRldiA9IGRldmljZV9jcmVhdGUoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKKwkJCQkgICAgIE1LREVWKElCTV9UVFkzMjcwX01BSk9SLCBycC0+bWlub3IpLCBOVUxMLAorCQkJCSAgICAgInR0eSVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKIAlpZiAoSVNfRVJSKHJwLT5jbHR0eWRldikpIHsKIAkJcmMgPSBQVFJfRVJSKHJwLT5jbHR0eWRldik7CiAJCWdvdG8gb3V0X3R0eWRldjsKIAl9CiAKLQlycC0+Y2x0dWJkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKLQkJCQkJICAgICBNS0RFVihJQk1fRlMzMjcwX01BSk9SLCBycC0+bWlub3IpLAotCQkJCQkgICAgIE5VTEwsCi0JCQkJCSAgICAgInR1YiVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKKwlycC0+Y2x0dWJkZXYgPSBkZXZpY2VfY3JlYXRlKGNsYXNzMzI3MCwgJnJwLT5jZGV2LT5kZXYsCisJCQkJICAgICBNS0RFVihJQk1fRlMzMjcwX01BSk9SLCBycC0+bWlub3IpLCBOVUxMLAorCQkJCSAgICAgInR1YiVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKIAlpZiAoIUlTX0VSUihycC0+Y2x0dWJkZXYpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCmluZGV4IDEyYzJhNWEuLmRkYzkxNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCkBAIC02OSw5ICs2OSw5IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfd2l0aF9jZGV2OwogCi0JdGNkLT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgZGV2aWNlLAotCQkJCQkJICB0Y2QtPmNoYXJfZGV2aWNlLT5kZXYsCi0JCQkJCQkgIE5VTEwsICIlcyIsIHRjZC0+ZGV2aWNlX25hbWUpOworCXRjZC0+Y2xhc3NfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBkZXZpY2UsCisJCQkJCSAgdGNkLT5jaGFyX2RldmljZS0+ZGV2LCBOVUxMLAorCQkJCQkgICIlcyIsIHRjZC0+ZGV2aWNlX25hbWUpOwogCXJjID0gSVNfRVJSKHRjZC0+Y2xhc3NfZGV2aWNlKSA/IFBUUl9FUlIodGNkLT5jbGFzc19kZXZpY2UpIDogMDsKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF93aXRoX2NkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwppbmRleCA0MjE3M2NjLi4yNDc2MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMKQEAgLTc0NywxMCArNzQ3LDEwIEBACiAJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCXJldHVybiByZXQ7CiAJfQotCXByaXYtPmNsYXNzX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2bWxvZ3Jkcl9jbGFzcywgZGV2LAotCQkJCQkJICAgTUtERVYodm1sb2dyZHJfbWFqb3IsCi0JCQkJCQkJIHByaXYtPm1pbm9yX251bSksCi0JCQkJCQkgICBwcml2LCAiJXMiLCBkZXZfbmFtZShkZXYpKTsKKwlwcml2LT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKHZtbG9ncmRyX2NsYXNzLCBkZXYsCisJCQkJCSAgIE1LREVWKHZtbG9ncmRyX21ham9yLAorCQkJCQkJIHByaXYtPm1pbm9yX251bSksCisJCQkJCSAgIHByaXYsICIlcyIsIGRldl9uYW1lKGRldikpOwogCWlmIChJU19FUlIocHJpdi0+Y2xhc3NfZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKHByaXYtPmNsYXNzX2RldmljZSk7CiAJCXByaXYtPmNsYXNzX2RldmljZT1OVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCmluZGV4IDZmZGZhNWQuLjkwMjBlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKQEAgLTg5Niw5ICs4OTYsOCBAQAogCQlnb3RvIGZhaWxfZnJlZV9jZGV2OwogCX0KIAotCXVyZC0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZtdXJfY2xhc3MsIE5VTEwsCi0JCQkJCSAgICB1cmQtPmNoYXJfZGV2aWNlLT5kZXYsIE5VTEwsCi0JCQkJCSAgICAiJXMiLCBub2RlX2lkKTsKKwl1cmQtPmRldmljZSA9IGRldmljZV9jcmVhdGUodm11cl9jbGFzcywgTlVMTCwgdXJkLT5jaGFyX2RldmljZS0+ZGV2LAorCQkJCSAgICBOVUxMLCAiJXMiLCBub2RlX2lkKTsKIAlpZiAoSVNfRVJSKHVyZC0+ZGV2aWNlKSkgewogCQlyYyA9IFBUUl9FUlIodXJkLT5kZXZpY2UpOwogCQlUUkFDRSgidXJfc2V0X29ubGluZTogZGV2aWNlX2NyZWF0ZSByYz0lZFxuIiwgcmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCmluZGV4IGNiZTQ3MDQuLjE5ZjVkNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAKIGRvbmU6CiAJaWYgKHJjKSB7Ci0JCWN0Y21fcHJfaW5mbygiY3RjbXBjCSAgIDogICVzKCkgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQljdGNtX3ByX2luZm8oImN0Y21wYwkgICA6ICAlcygpIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlwcml2LT54aWQtPnhpZDJfZmxhZzIgPSAweDQwOwogCQlncnAtPnNhdmVkX3hpZDItPnhpZDJfZmxhZzIgPSAweDQwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDhhMTMwNzEuLjljZTRjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNTgzLDYgKzU4Myw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nICAgICBpc3N1ZWQ7ICAgICAgICAgLyogcmVxdWVzdCBzZW50IHRpbWUgKFNUQ0spICovCiAJc3RydWN0IHpmY3BfdW5pdCAgICAgICAqdW5pdDsKIAl2b2lkCQkJKCpoYW5kbGVyKShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworCXUxNgkJCXFkaW9fb3V0Yl91c2FnZTsvKiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZSAqLworCXUxNgkJCXFkaW9faW5iX3VzYWdlOwkvKiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlICovCiB9OwogCiAvKiBkcml2ZXIgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggNzM5MzU2YS4uNWFlMWQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTc3Nyw2ICs3NzgsNyBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKIAorCXJlcS0+cWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnJlcV9xLT5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKIAlpZiAoemZjcF9xZGlvX3NlbmQocmVxKSkgewogCQkvKiBRdWV1ZXMgYXJlIGRvd24uLi4uLiAqLwpAQCAtMjA4Miw2ICsyMDg0LDM2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW5pdC0+bGF0ZW5jaWVzLmxvY2ssIGZsYWdzKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCitzdGF0aWMgdm9pZCB6ZmNwX2ZzZl90cmFjZV9sYXRlbmN5KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IGZzZl9xdWFsX2xhdGVuY3lfaW5mbyAqbGF0X2luZjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7CisJc3RydWN0IHJlcXVlc3QgKnJlcSA9IHNjc2lfY21uZC0+cmVxdWVzdDsKKwlzdHJ1Y3QgemZjcF9ibGtfZHJ2X2RhdGEgdHJhY2U7CisJaW50IHRpY2tzID0gZnNmX3JlcS0+YWRhcHRlci0+dGltZXJfdGlja3M7CisKKwl0cmFjZS5mbGFncyA9IDA7CisJdHJhY2UubWFnaWMgPSBaRkNQX0JMS19EUlZfREFUQV9NQUdJQzsKKwlpZiAoZnNmX3JlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpIHsKKwkJdHJhY2UuZmxhZ3MgfD0gWkZDUF9CTEtfTEFUX1ZBTElEOworCQlsYXRfaW5mID0gJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLmxhdGVuY3lfaW5mbzsKKwkJdHJhY2UuY2hhbm5lbF9sYXQgPSBsYXRfaW5mLT5jaGFubmVsX2xhdCAqIHRpY2tzOworCQl0cmFjZS5mYWJyaWNfbGF0ID0gbGF0X2luZi0+ZmFicmljX2xhdCAqIHRpY2tzOworCX0KKwlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQorCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7CisJdHJhY2UuaW5iX3VzYWdlID0gZnNmX3JlcS0+cWRpb19pbmJfdXNhZ2U7CisJdHJhY2Uub3V0Yl91c2FnZSA9IGZzZl9yZXEtPnFkaW9fb3V0Yl91c2FnZTsKKworCWJsa19hZGRfZHJpdmVyX2RhdGEocmVxLT5xLCByZXEsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHpmY3BfZnNmX3RyYWNlX2xhdGVuY3koc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NwbnQgPSByZXEtPmRhdGE7CkBAIC0yMTE0LDYgKzIxNDYsOCBAQAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBKQogCQl6ZmNwX2ZzZl9yZXFfbGF0ZW5jeShyZXEpOwogCisJemZjcF9mc2ZfdHJhY2VfbGF0ZW5jeShyZXEpOworCiAJaWYgKHVubGlrZWx5KGZjcF9yc3BfaXUtPnZhbGlkaXR5LmJpdHMuZmNwX3JzcF9sZW5fdmFsaWQpKSB7CiAJCWlmIChmY3BfcnNwX2luZm9bM10gPT0gUlNQX0NPREVfR09PRCkKIAkJCXNldF9ob3N0X2J5dGUoc2NwbnQsIERJRF9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAppbmRleCBmZDNhODg3Li5mYTJhMzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKQEAgLTQzOSw0ICs0MzksMTYgQEAKIAl1OCBsb2dbRlNGX1FUQ0JfTE9HX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB6ZmNwX2Jsa19kcnZfZGF0YSB7CisjZGVmaW5lIFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDCQkJMHgxCisJdTMyIG1hZ2ljOworI2RlZmluZSBaRkNQX0JMS19MQVRfVkFMSUQJCQkweDEKKyNkZWZpbmUgWkZDUF9CTEtfUkVRX0VSUk9SCQkJMHgyCisJdTE2IGZsYWdzOworCXU4IGluYl91c2FnZTsKKwl1OCBvdXRiX3VzYWdlOworCXU2NCBjaGFubmVsX2xhdDsKKwl1NjQgZmFicmljX2xhdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZW5kaWYJCQkJLyogRlNGX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggM2UwNTA4MC4uNjY0NzUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAogCWZzZl9yZXEtPnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKKwlmc2ZfcmVxLT5xZGlvX2luYl91c2FnZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXNwX3EuY291bnQpOwogCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCmluZGV4IDY5ZjgzNDYuLjU4NzdmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKQEAgLTE4OSw3ICsxODksNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9yZWFkIiwKIAkJLm1vZGUgPSBTX0lSVVNSICwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEwMzIsCiAJLnJlYWQgPSBhcmNtc3Jfc3lzZnNfaW9wX21lc3NhZ2VfcmVhZCwKQEAgLTE5OSw3ICsxOTgsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV93cml0ZSIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEwMzIsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3dyaXRlLApAQCAtMjA5LDcgKzIwNyw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm11X2NsZWFyIiwKIAkJLm1vZGUgPSBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gMSwKIAkud3JpdGUgPSBhcmNtc3Jfc3lzZnNfaW9wX21lc3NhZ2VfY2xlYXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IDNjMjU3ZmUuLjg4ZWNmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC05MTQsOSArOTE0LDkgQEAKIAljaC0+bWlub3IgPSBtaW5vcjsKIAlzcHJpbnRmKGNoLT5uYW1lLCJjaCVkIixjaC0+bWlub3IpOwogCi0JY2xhc3NfZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNoX3N5c2ZzX2NsYXNzLCBkZXYsCi0JCQkJCSAgTUtERVYoU0NTSV9DSEFOR0VSX01BSk9SLCBjaC0+bWlub3IpLAotCQkJCQkgIGNoLCAicyVzIiwgY2gtPm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoY2hfc3lzZnNfY2xhc3MsIGRldiwKKwkJCQkgIE1LREVWKFNDU0lfQ0hBTkdFUl9NQUpPUiwgY2gtPm1pbm9yKSwgY2gsCisJCQkJICAicyVzIiwgY2gtPm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaCVkOiBkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIiwKIAkJICAgICAgIGNoLT5taW5vcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggOTc4NWQ3My4uNDAwM2RlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMTM2NCw3ICsxMzY0LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGJ5dGVfdGFibGVbXT17CiAiRElEX09LIiwgIkRJRF9OT19DT05ORUNUIiwgIkRJRF9CVVNfQlVTWSIsICJESURfVElNRV9PVVQiLCAiRElEX0JBRF9UQVJHRVQiLAogIkRJRF9BQk9SVCIsICJESURfUEFSSVRZIiwgIkRJRF9FUlJPUiIsICJESURfUkVTRVQiLCAiRElEX0JBRF9JTlRSIiwKLSJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSJ9OworIkRJRF9QQVNTVEhST1VHSCIsICJESURfU09GVF9FUlJPUiIsICJESURfSU1NX1JFVFJZIiwgIkRJRF9SRVFVRVVFIiwKKyJESURfVFJBTlNQT1JUX0RJU1JVUFRFRCIsICJESURfVFJBTlNQT1JUX0ZBSUxGQVNUIiB9OwogI2RlZmluZSBOVU1fSE9TVEJZVEVfU1RSUyBBUlJBWV9TSVpFKGhvc3RieXRlX3RhYmxlKQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyaXZlcmJ5dGVfdGFibGVbXT17CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggNzA4ZTQ3NS4uZTM1NmI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtMTA5LDcgKzEwOSw4IEBACiAJfQogCiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1QgfCBSRVFfTk9NRVJHRTsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJxLT5yZXRyaWVzID0gQUxVQV9GQUlMT1ZFUl9SRVRSSUVTOwogCXJxLT50aW1lb3V0ID0gQUxVQV9GQUlMT1ZFUl9USU1FT1VUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCmluZGV4IDhmNDU1NzAuLjBlNTcyZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCkBAIC0zMDMsNyArMzAzLDggQEAKIAogCXJxLT5jbWRbNF0gPSBsZW47CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlycS0+dGltZW91dCA9IENMQVJJSU9OX1RJTUVPVVQ7CiAJcnEtPnJldHJpZXMgPSBDTEFSSUlPTl9SRVRSSUVTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwppbmRleCA1ZTkzYzg4Li45YWVjNGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCQlyZXR1cm4gU0NTSV9ESF9SRVNfVEVNUF9VTkFWQUlMOwogCiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKFRFU1RfVU5JVF9SRUFEWSk7CiAJcmVxLT5jbWRbMF0gPSBURVNUX1VOSVRfUkVBRFk7CiAJcmVxLT50aW1lb3V0ID0gSFBfU1dfVElNRU9VVDsKQEAgLTIwNCw3ICsyMDUsOCBAQAogCQlyZXR1cm4gU0NTSV9ESF9SRVNfVEVNUF9VTkFWQUlMOwogCiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKFNUQVJUX1NUT1ApOwogCXJlcS0+Y21kWzBdID0gU1RBUlRfU1RPUDsKIAlyZXEtPmNtZFs0XSA9IDE7CS8qIFN0YXJ0IHNwaW4gY3ljbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCA1MGJmOTVmLi5hNDNjM2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC0yMjYsNyArMjI2LDggQEAKIAl9CiAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVCB8IFJFUV9OT01FUkdFOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcnEtPnJldHJpZXMgPSBSREFDX1JFVFJJRVM7CiAJcnEtPnRpbWVvdXQgPSBSREFDX1RJTUVPVVQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDFmZTA5MDEuLjhhYmE0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJCXBIYmEtPmluaXRpYWxpemVkID0gVFJVRTsKIAkJcEhiYS0+c3RhdGUgJj0gfkRQVElfU1RBVEVfUkVTRVQ7CiAJCWlmIChhZHB0X3N5c2ZzX2NsYXNzKSB7Ci0JCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYWRwdF9zeXNmc19jbGFzcywKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldmljZV9jcmVhdGUoYWRwdF9zeXNmc19jbGFzcywKIAkJCQlOVUxMLCBNS0RFVihEUFRJX0kyT19NQUpPUiwgcEhiYS0+dW5pdCksIE5VTEwsCiAJCQkJImRwdGklZCIsIHBIYmEtPnVuaXQpOwogCQkJaWYgKElTX0VSUihkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggNGUwYjdjOC4uNzY1MDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtMjAzMSw4ICsyMDMxLDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlCiAJCWlibXZmY19pc3N1ZV9mY19ob3N0X2xpcChzaG9zdCk7Ci0KLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIAlMRUFWRTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCA3NDBiYWQ0Li5hZmM5NmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtMzQzLDYgKzM0MywxMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVzY3NpX3Byb2NbXSA9IHsKKwl7ICJjYXBhY2l0eSIsIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAorCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Cit9OworCiAjZGVmaW5lIGlkZV9zY3NpX2RldnNldF9nZXQobmFtZSwgZmllbGQpIFwKIHN0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKIHsgXApAQCAtMzc4LDYgKzM4MywxNiBAQAogCUlERV9QUk9DX0RFVlNFVCh0cmFuc2Zvcm0sIDAsCSAzKSwKIAl7IDAgfSwKIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfc2NzaV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfc2NzaV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3NldHRpbmdzOworfQogI2VuZGlmCiAKIC8qCkBAIC00MTksMTMgKzQzNCw2IEBACiAKIHN0YXRpYyBpbnQgaWRlX3Njc2lfcHJvYmUoaWRlX2RyaXZlX3QgKik7CiAKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpZGVfcHJvY19lbnRyeV90IGlkZXNjc2lfcHJvY1tdID0gewotCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCi0JeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KLX07Ci0jZW5kaWYKLQogc3RhdGljIGlkZV9kcml2ZXJfdCBpZGVzY3NpX2RyaXZlciA9IHsKIAkuZ2VuX2RyaXZlciA9IHsKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNDM5LDggKzQ0Nyw4IEBACiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXNjc2lfZW5kX3JlcXVlc3QsCiAJLmVycm9yICAgICAgICAgICAgICAgICAgPSBpZGVzY3NpX2F0YXBpX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVzY3NpX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZXNjc2lfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfc2NzaV9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfc2NzaV9wcm9jX2RldnNldHMsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCAyYTJmMDA5Li5lZDZjNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC01MjMsMjIgKzUyMywyMCBAQAogfQogCiAvKioKLSAqIGlzY3NpX2RhdGFfcnNwIC0gU0NTSSBEYXRhLUluIFJlc3BvbnNlIHByb2Nlc3NpbmcKKyAqIGlzY3NpX2RhdGFfaW4gLSBTQ1NJIERhdGEtSW4gUmVzcG9uc2UgcHJvY2Vzc2luZwogICogQGNvbm46IGlzY3NpIGNvbm5lY3Rpb24KICAqIEB0YXNrOiBzY3NpIGNvbW1hbmQgdGFzawogICoqLwogc3RhdGljIGludAotaXNjc2lfZGF0YV9yc3Aoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoraXNjc2lfZGF0YV9pbihzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCiB7CiAJc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX3RjcF90YXNrICp0Y3BfdGFzayA9IHRhc2stPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2RhdGFfcnNwICpyaGRyID0gKHN0cnVjdCBpc2NzaV9kYXRhX3JzcCAqKXRjcF9jb25uLT5pbi5oZHI7Ci0Jc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwotCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gdGFzay0+c2M7CiAJaW50IGRhdGFzbiA9IGJlMzJfdG9fY3B1KHJoZHItPmRhdGFzbik7Ci0JdW5zaWduZWQgdG90YWxfaW5fbGVuZ3RoID0gc2NzaV9pbihzYyktPmxlbmd0aDsKKwl1bnNpZ25lZCB0b3RhbF9pbl9sZW5ndGggPSBzY3NpX2luKHRhc2stPnNjKS0+bGVuZ3RoOwogCi0JaXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sIChzdHJ1Y3QgaXNjc2lfbm9waW4qKXJoZHIpOworCWlzY3NpX3VwZGF0ZV9jbWRzbihjb25uLT5zZXNzaW9uLCAoc3RydWN0IGlzY3NpX25vcGluKilyaGRyKTsKIAlpZiAodGNwX2Nvbm4tPmluLmRhdGFsZW4gPT0gMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTU1OCwyMyArNTU2LDYgQEAKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBX09GRlNFVDsKIAl9CiAKLQlpZiAocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0RBVEFfU1RBVFVTKSB7Ci0JCXNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHJoZHItPmNtZF9zdGF0dXM7Ci0JCWNvbm4tPmV4cF9zdGF0c24gPSBiZTMyX3RvX2NwdShyaGRyLT5zdGF0c24pICsgMTsKLQkJaWYgKHJoZHItPmZsYWdzICYgKElTQ1NJX0ZMQUdfREFUQV9VTkRFUkZMT1cgfAotCQkgICAgICAgICAgICAgICAgICAgSVNDU0lfRkxBR19EQVRBX09WRVJGTE9XKSkgewotCQkJaW50IHJlc19jb3VudCA9IGJlMzJfdG9fY3B1KHJoZHItPnJlc2lkdWFsX2NvdW50KTsKLQotCQkJaWYgKHJlc19jb3VudCA+IDAgJiYKLQkJCSAgICAocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVyB8fAotCQkJICAgICByZXNfY291bnQgPD0gdG90YWxfaW5fbGVuZ3RoKSkKLQkJCQlzY3NpX2luKHNjKS0+cmVzaWQgPSByZXNfY291bnQ7Ci0JCQllbHNlCi0JCQkJc2MtPnJlc3VsdCA9IChESURfQkFEX1RBUkdFVCA8PCAxNikgfAotCQkJCQlyaGRyLT5jbWRfc3RhdHVzOwotCQl9Ci0JfQotCiAJY29ubi0+ZGF0YWluX3BkdXNfY250Kys7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzQsNyArNzU1LDcgQEAKIAkJaWYgKCF0YXNrKQogCQkJcmMgPSBJU0NTSV9FUlJfQkFEX0lUVDsKIAkJZWxzZQotCQkJcmMgPSBpc2NzaV9kYXRhX3JzcChjb25uLCB0YXNrKTsKKwkJCXJjID0gaXNjc2lfZGF0YV9pbihjb25uLCB0YXNrKTsKIAkJaWYgKHJjKSB7CiAJCQlzcGluX3VubG9jaygmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJCQlicmVhazsKQEAgLTk5OCw3ICs5NzksNyBAQAogCiBlcnJvcjoKIAlkZWJ1Z190Y3AoIkVycm9yIHJlY2VpdmluZyBQRFUsIGVycm5vPSVkXG4iLCByYyk7Ci0JaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CisJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIHJjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTExNyw4ICsxMDk4LDEwIEBACiAKIAl3aGlsZSAoMSkgewogCQlyYyA9IGlzY3NpX3RjcF94bWl0X3NlZ21lbnQodGNwX2Nvbm4sIHNlZ21lbnQpOwotCQlpZiAocmMgPCAwKQorCQlpZiAocmMgPCAwKSB7CisJCQlyYyA9IElTQ1NJX0VSUl9YTUlUX0ZBSUxFRDsKIAkJCWdvdG8gZXJyb3I7CisJCX0KIAkJaWYgKHJjID09IDApCiAJCQlicmVhazsKIApAQCAtMTEyNyw3ICsxMTEwLDcgQEAKIAkJaWYgKHNlZ21lbnQtPnRvdGFsX2NvcGllZCA+PSBzZWdtZW50LT50b3RhbF9zaXplKSB7CiAJCQlpZiAoc2VnbWVudC0+ZG9uZSAhPSBOVUxMKSB7CiAJCQkJcmMgPSBzZWdtZW50LT5kb25lKHRjcF9jb25uLCBzZWdtZW50KTsKLQkJCQlpZiAocmMgPCAwKQorCQkJCWlmIChyYyAhPSAwKQogCQkJCQlnb3RvIGVycm9yOwogCQkJfQogCQl9CkBAIC0xMTQyLDggKzExMjUsOCBAQAogCS8qIFRyYW5zbWl0IGVycm9yLiBXZSBjb3VsZCBpbml0aWF0ZSBlcnJvciByZWNvdmVyeQogCSAqIGhlcmUuICovCiAJZGVidWdfdGNwKCJFcnJvciBzZW5kaW5nIFBEVSwgZXJybm89JWRcbiIsIHJjKTsKLQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKLQlyZXR1cm4gcmM7CisJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIHJjKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogLyoqCkBAIC0xOTA0LDYgKzE4ODcsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CiAKIAlpc2NzaV9yMnRwb29sX2ZyZWUoY2xzX3Nlc3Npb24tPmRkX2RhdGEpOworCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOwogCiAJaXNjc2lfaG9zdF9yZW1vdmUoc2hvc3QpOwogCWlzY3NpX2hvc3RfZnJlZShzaG9zdCk7CkBAIC0xOTI3LDcgKzE5MTEsNyBAQAogCS5jbWRfcGVyX2x1bgkJPSBJU0NTSV9ERUZfQ01EX1BFUl9MVU4sCiAJLmVoX2Fib3J0X2hhbmRsZXIgICAgICAgPSBpc2NzaV9laF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXI9IGlzY3NpX2VoX2RldmljZV9yZXNldCwKLQkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCT0gaXNjc2lfZWhfaG9zdF9yZXNldCwKKwkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXI9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKIAkudXNlX2NsdXN0ZXJpbmcgICAgICAgICA9IERJU0FCTEVfQ0xVU1RFUklORywKIAkuc2xhdmVfY29uZmlndXJlICAgICAgICA9IGlzY3NpX3RjcF9zbGF2ZV9jb25maWd1cmUsCiAJLnByb2NfbmFtZQkJPSAiaXNjc2lfdGNwIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggZGE3YjY3ZC4uODAxYzdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTQwNCwxMSArNDA0LDYgQEAKIAkJY29ubi0+c2Vzc2lvbi0+cXVldWVkX2NtZHNuLS07CiAJZWxzZQogCQljb25uLT5zZXNzaW9uLT50dC0+Y2xlYW51cF90YXNrKGNvbm4sIHRhc2spOwotCS8qCi0JICogQ2hlY2sgaWYgY2xlYW51cF90YXNrIGRyb3BwZWQgdGhlIGxvY2sgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlZCwKLQkgKi8KLQlpZiAoIXRhc2stPnNjKQotCQlyZXR1cm47CiAKIAlzYy0+cmVzdWx0ID0gZXJyOwogCWlmICghc2NzaV9iaWRpX2NtbmQoc2MpKQpAQCAtNjMzLDYgKzYyOCw0MCBAQAogCV9faXNjc2lfcHV0X3Rhc2sodGFzayk7CiB9CiAKKy8qKgorICogaXNjc2lfZGF0YV9pbl9yc3AgLSBTQ1NJIERhdGEtSW4gUmVzcG9uc2UgcHJvY2Vzc2luZworICogQGNvbm46IGlzY3NpIGNvbm5lY3Rpb24KKyAqIEBoZHI6ICBpc2NzaSBwZHUKKyAqIEB0YXNrOiBzY3NpIGNvbW1hbmQgdGFzaworICoqLworc3RhdGljIHZvaWQKK2lzY3NpX2RhdGFfaW5fcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCisJCSAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGlzY3NpX2RhdGFfcnNwICpyaGRyID0gKHN0cnVjdCBpc2NzaV9kYXRhX3JzcCAqKWhkcjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOworCisJaWYgKCEocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0RBVEFfU1RBVFVTKSkKKwkJcmV0dXJuOworCisJc2MtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgcmhkci0+Y21kX3N0YXR1czsKKwljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUocmhkci0+c3RhdHNuKSArIDE7CisJaWYgKHJoZHItPmZsYWdzICYgKElTQ1NJX0ZMQUdfREFUQV9VTkRFUkZMT1cgfAorCSAgICAgICAgICAgICAgICAgICBJU0NTSV9GTEFHX0RBVEFfT1ZFUkZMT1cpKSB7CisJCWludCByZXNfY291bnQgPSBiZTMyX3RvX2NwdShyaGRyLT5yZXNpZHVhbF9jb3VudCk7CisKKwkJaWYgKHJlc19jb3VudCA+IDAgJiYKKwkJICAgIChyaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX09WRVJGTE9XIHx8CisJCSAgICAgcmVzX2NvdW50IDw9IHNjc2lfaW4oc2MpLT5sZW5ndGgpKQorCQkJc2NzaV9pbihzYyktPnJlc2lkID0gcmVzX2NvdW50OworCQllbHNlCisJCQlzYy0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KSB8IHJoZHItPmNtZF9zdGF0dXM7CisJfQorCisJY29ubi0+c2NzaXJzcF9wZHVzX2NudCsrOworCV9faXNjc2lfcHV0X3Rhc2sodGFzayk7Cit9CisKIHN0YXRpYyB2b2lkIGlzY3NpX3RtZl9yc3Aoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3QgaXNjc2lfdG1fcnNwICp0bWYgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKWhkcjsKQEAgLTgxOCwxMiArODQ3LDcgQEAKIAkJaXNjc2lfc2NzaV9jbWRfcnNwKGNvbm4sIGhkciwgdGFzaywgZGF0YSwgZGF0YWxlbik7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfU0NTSV9EQVRBX0lOOgotCQlpZiAoaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfREFUQV9TVEFUVVMpIHsKLQkJCWNvbm4tPnNjc2lyc3BfcGR1c19jbnQrKzsKLQkJCWlzY3NpX3VwZGF0ZV9jbWRzbihzZXNzaW9uLAotCQkJCQkgICAoc3RydWN0IGlzY3NpX25vcGluKikgaGRyKTsKLQkJCV9faXNjc2lfcHV0X3Rhc2sodGFzayk7Ci0JCX0KKwkJaXNjc2lfZGF0YV9pbl9yc3AoY29ubiwgaGRyLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9MT0dPVVRfUlNQOgogCQlpc2NzaV91cGRhdGVfY21kc24oc2Vzc2lvbiwgKHN0cnVjdCBpc2NzaV9ub3BpbiopaGRyKTsKQEAgLTk1NCw2ICs5NzgsMzggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2l0dF90b19jdGFzayk7CiAKK3ZvaWQgaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCQkgICBlbnVtIGlzY3NpX2VyciBlcnIpCit7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJY29ubiA9IHNlc3Npb24tPmxlYWRjb25uOworCWlmIChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUgfHwgIWNvbm4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZGV2ID0gZ2V0X2RldmljZSgmY29ubi0+Y2xzX2Nvbm4tPmRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCWlmICghZGV2KQorCSAgICAgICAgcmV0dXJuOworCS8qCisJICogaWYgdGhlIGhvc3QgaXMgYmVpbmcgcmVtb3ZlZCBieXBhc3MgdGhlIGNvbm5lY3Rpb24KKwkgKiByZWNvdmVyeSBpbml0aWFsaXphdGlvbiBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBraWxsCisJICogdGhlIHNlc3Npb24uCisJICovCisJaWYgKGVyciA9PSBJU0NTSV9FUlJfSU5WQUxJRF9IT1NUKQorCQlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGNvbm4tPmNsc19jb25uLCBlcnIpOworCWVsc2UKKwkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIGVycik7CisJcHV0X2RldmljZShkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKTsKKwogdm9pZCBpc2NzaV9jb25uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycikKIHsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CkBAIC05NjgsOSArMTAyNCwxMCBAQAogCWlmIChjb25uLT5zdG9wX3N0YWdlID09IDApCiAJCXNlc3Npb24tPnN0YXRlID0gSVNDU0lfU1RBVEVfRkFJTEVEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwogCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF9yeCk7Ci0JaXNjc2lfY29ubl9lcnJvcihjb25uLT5jbHNfY29ubiwgZXJyKTsKKwlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGNvbm4tPmNsc19jb25uLCBlcnIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29ubl9mYWlsdXJlKTsKIApAQCAtMTE5NCwxNSArMTI1MSwxMyBAQAogCQlzd2l0Y2ggKHNlc3Npb24tPnN0YXRlKSB7CiAJCWNhc2UgSVNDU0lfU1RBVEVfSU5fUkVDT1ZFUlk6CiAJCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fSU5fUkVDT1ZFUlk7Ci0JCQlzYy0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJCWJyZWFrOworCQkJZ290byByZWplY3Q7CiAJCWNhc2UgSVNDU0lfU1RBVEVfTE9HR0lOR19PVVQ6CiAJCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fTE9HR0lOR19PVVQ7Ci0JCQlzYy0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJCWJyZWFrOworCQkJZ290byByZWplY3Q7CiAJCWNhc2UgSVNDU0lfU1RBVEVfUkVDT1ZFUllfRkFJTEVEOgogCQkJcmVhc29uID0gRkFJTFVSRV9TRVNTSU9OX1JFQ09WRVJZX1RJTUVPVVQ7Ci0JCQlzYy0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCQlzYy0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9GQUlMRkFTVCA8PCAxNjsKIAkJCWJyZWFrOwogCQljYXNlIElTQ1NJX1NUQVRFX1RFUk1JTkFURToKIAkJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9URVJNSU5BVEU7CkBAIC0xMjY3LDcgKzEzMjIsNyBAQAogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAlkZWJ1Z19zY3NpKCJjbWQgMHgleCByZWplY3RlZCAoJWQpXG4iLCBzYy0+Y21uZFswXSwgcmVhc29uKTsKIAlzcGluX2xvY2soaG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOwogCiBmYXVsdDoKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CkBAIC0xMzA3LDcgKzEzNjIsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCk7CiAKLWludCBpc2NzaV9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQoraW50IGlzY3NpX2VoX3RhcmdldF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYykKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uOwpAQCAtMTMyMSw3ICsxMzc2LDcgQEAKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCWlmIChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUpIHsKIGZhaWxlZDoKLQkJZGVidWdfc2NzaSgiZmFpbGluZyBob3N0IHJlc2V0OiBzZXNzaW9uIHRlcm1pbmF0ZWQgIgorCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIHRhcmdldCByZXNldDogc2Vzc2lvbiB0ZXJtaW5hdGVkICIKIAkJCSAgICJbQ0lEICVkIGFnZSAlZF1cbiIsIGNvbm4tPmlkLCBzZXNzaW9uLT5hZ2UpOwogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwpAQCAtMTMzNiw3ICsxMzkxLDcgQEAKIAkgKi8KIAlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAotCWRlYnVnX3Njc2koImlzY3NpX2VoX2hvc3RfcmVzZXQgd2FpdCBmb3IgcmVsb2dpblxuIik7CisJZGVidWdfc2NzaSgiaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0IHdhaXQgZm9yIHJlbG9naW5cbiIpOwogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjb25uLT5laHdhaXQsCiAJCQkJIHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSB8fAogCQkJCSBzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9MT0dHRURfSU4gfHwKQEAgLTEzNDgsMTQgKzE0MDMsMTQgQEAKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCWlmIChzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9MT0dHRURfSU4pCiAJCWlzY3NpX3Nlc3Npb25fcHJpbnRrKEtFUk5fSU5GTywgc2Vzc2lvbiwKLQkJCQkgICAgICJob3N0IHJlc2V0IHN1Y2NlZWRlZFxuIik7CisJCQkJICAgICAidGFyZ2V0IHJlc2V0IHN1Y2NlZWRlZFxuIik7CiAJZWxzZQogCQlnb3RvIGZhaWxlZDsKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CiAJcmV0dXJuIFNVQ0NFU1M7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9laF9ob3N0X3Jlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2VoX3RhcmdldF9yZXNldCk7CiAKIHN0YXRpYyB2b2lkIGlzY3NpX3RtZl90aW1lZG91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0xNzY5LDEwICsxODI0LDEwIEBACiAKIAlpc2NzaV9zdXNwZW5kX3R4KGNvbm4pOwogCi0Jc3Bpbl9sb2NrKCZzZXNzaW9uLT5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCWZhaWxfYWxsX2NvbW1hbmRzKGNvbm4sIHNjLT5kZXZpY2UtPmx1biwgRElEX0VSUk9SKTsKIAljb25uLT50bWZfc3RhdGUgPSBUTUZfSU5JVElBTDsKLQlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCiAJaXNjc2lfc3RhcnRfdHgoY29ubik7CiAJZ290byBkb25lOwpAQCAtMTg3OCw2ICsxOTMzLDcgQEAKIAkJCQkgICBpbnQgZGRfZGF0YV9zaXplLCB1aW50MTZfdCBxZGVwdGgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0OwogCiAJc2hvc3QgPSBzY3NpX2hvc3RfYWxsb2Moc2h0LCBzaXplb2Yoc3RydWN0IGlzY3NpX2hvc3QpICsgZGRfZGF0YV9zaXplKTsKIAlpZiAoIXNob3N0KQpAQCAtMTg5MiwyMiArMTk0OCw0MyBAQAogCQlxZGVwdGggPSBJU0NTSV9ERUZfQ01EX1BFUl9MVU47CiAJfQogCXNob3N0LT5jbWRfcGVyX2x1biA9IHFkZXB0aDsKKworCWlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJc3Bpbl9sb2NrX2luaXQoJmlob3N0LT5sb2NrKTsKKwlpaG9zdC0+c3RhdGUgPSBJU0NTSV9IT1NUX1NFVFVQOworCWlob3N0LT5udW1fc2Vzc2lvbnMgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlob3N0LT5zZXNzaW9uX3JlbW92YWxfd3EpOwogCXJldHVybiBzaG9zdDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2hvc3RfYWxsb2MpOwogCitzdGF0aWMgdm9pZCBpc2NzaV9ub3RpZnlfaG9zdF9yZW1vdmVkKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24pCit7CisJaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKGNsc19zZXNzaW9uLCBJU0NTSV9FUlJfSU5WQUxJRF9IT1NUKTsKK30KKwogLyoqCiAgKiBpc2NzaV9ob3N0X3JlbW92ZSAtIHJlbW92ZSBob3N0IGFuZCBzZXNzaW9ucwogICogQHNob3N0OiBzY3NpIGhvc3QKICAqCi0gKiBUaGlzIHdpbGwgYWxzbyByZW1vdmUgYW55IHNlc3Npb25zIGF0dGFjaGVkIHRvIHRoZSBob3N0LCBidXQgaWYgdXNlcnNwYWNlCi0gKiBpcyBtYW5hZ2luZyB0aGUgc2Vzc2lvbiBhdCB0aGUgc2FtZSB0aW1lIHRoaXMgd2lsbCBicmVhay4gVE9ETzogYWRkCi0gKiByZWZjb3VudGluZyB0byB0aGUgbmV0bGluayBpc2NzaSBpbnRlcmZhY2Ugc28gYSBybW1vZCBvciBob3N0IGhvdCB1bnBsdWcKLSAqIGRvZXMgbm90IHJlbW92ZSB0aGUgbWVtb3J5IGZyb20gdW5kZXIgdXMuCisgKiBJZiB0aGVyZSBhcmUgYW55IHNlc3Npb25zIGxlZnQsIHRoaXMgd2lsbCBpbml0aWF0ZSB0aGUgcmVtb3ZhbCBhbmQgd2FpdAorICogZm9yIHRoZSBjb21wbGV0aW9uLgogICovCiB2b2lkIGlzY3NpX2hvc3RfcmVtb3ZlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewotCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihzaG9zdCwgaXNjc2lfc2Vzc2lvbl90ZWFyZG93bik7CisJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCWlob3N0LT5zdGF0ZSA9IElTQ1NJX0hPU1RfUkVNT1ZFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHNob3N0LCBpc2NzaV9ub3RpZnlfaG9zdF9yZW1vdmVkKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaWhvc3QtPnNlc3Npb25fcmVtb3ZhbF93cSwKKwkJCQkgaWhvc3QtPm51bV9zZXNzaW9ucyA9PSAwKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisKIAlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2hvc3RfcmVtb3ZlKTsKQEAgLTE5MjMsNiArMjAwMCwyNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfaG9zdF9mcmVlKTsKIAorc3RhdGljIHZvaWQgaXNjc2lfaG9zdF9kZWNfc2Vzc2lvbl9jbnQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNob3N0ID0gc2NzaV9ob3N0X2dldChzaG9zdCk7CisJaWYgKCFzaG9zdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgc3RhdGUuIENhbm5vdCBub3RpZnkgaG9zdCByZW1vdmFsICIKKwkJICAgICAgIm9mIHNlc3Npb24gdGVhcmRvd24gZXZlbnQgYmVjYXVzZSBob3N0IGFscmVhZHkgIgorCQkgICAgICAicmVtb3ZlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisJaWhvc3QtPm51bV9zZXNzaW9ucy0tOworCWlmIChpaG9zdC0+bnVtX3Nlc3Npb25zID09IDApCisJCXdha2VfdXAoJmlob3N0LT5zZXNzaW9uX3JlbW92YWxfd3EpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisJc2NzaV9ob3N0X3B1dChzaG9zdCk7Cit9CisKIC8qKgogICogaXNjc2lfc2Vzc2lvbl9zZXR1cCAtIGNyZWF0ZSBpc2NzaSBjbHMgc2Vzc2lvbiBhbmQgaG9zdCBhbmQgc2Vzc2lvbgogICogQGlzY3NpdDogaXNjc2kgdHJhbnNwb3J0IHRlbXBsYXRlCkBAIC0xOTQzLDkgKzIwNDEsMTkgQEAKIAkJICAgIHVpbnQxNl90IGNtZHNfbWF4LCBpbnQgY21kX3Rhc2tfc2l6ZSwKIAkJICAgIHVpbnQzMl90IGluaXRpYWxfY21kc24sIHVuc2lnbmVkIGludCBpZCkKIHsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwogCWludCBjbWRfaSwgc2NzaV9jbWRzLCB0b3RhbF9jbWRzID0gY21kc19tYXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmIChpaG9zdC0+c3RhdGUgPT0gSVNDU0lfSE9TVF9SRU1PVkVEKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKwlpaG9zdC0+bnVtX3Nlc3Npb25zKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCWlmICghdG90YWxfY21kcykKIAkJdG90YWxfY21kcyA9IElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYOwpAQCAtMTk1OCw3ICsyMDY2LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogaW52YWxpZCBjYW5fcXVldWUgb2YgJWQuIGNhbl9xdWV1ZSAiCiAJCSAgICAgICAibXVzdCBiZSBhIHBvd2VyIG9mIHR3byB0aGF0IGlzIGF0IGxlYXN0ICVkLlxuIiwKIAkJICAgICAgIHRvdGFsX2NtZHMsIElTQ1NJX1RPVEFMX0NNRFNfTUlOKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZGVjX3Nlc3Npb25fY291bnQ7CiAJfQogCiAJaWYgKHRvdGFsX2NtZHMgPiBJU0NTSV9UT1RBTF9DTURTX01BWCkgewpAQCAtMTk4Miw3ICsyMDkwLDcgQEAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX2FsbG9jX3Nlc3Npb24oc2hvc3QsIGlzY3NpdCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3Nlc3Npb24pKTsKIAlpZiAoIWNsc19zZXNzaW9uKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBkZWNfc2Vzc2lvbl9jb3VudDsKIAlzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAJc2Vzc2lvbi0+Y2xzX3Nlc3Npb24gPSBjbHNfc2Vzc2lvbjsKIAlzZXNzaW9uLT5ob3N0ID0gc2hvc3Q7CkBAIC0yMDIxLDYgKzIxMjksNyBAQAogCiAJaWYgKGlzY3NpX2FkZF9zZXNzaW9uKGNsc19zZXNzaW9uLCBpZCkpCiAJCWdvdG8gY2xzX3Nlc3Npb25fZmFpbDsKKwogCXJldHVybiBjbHNfc2Vzc2lvbjsKIAogY2xzX3Nlc3Npb25fZmFpbDoKQEAgLTIwMjksNiArMjEzOCw4IEBACiAJaXNjc2lfcG9vbF9mcmVlKCZzZXNzaW9uLT5jbWRwb29sKTsKIGNtZHBvb2xfYWxsb2NfZmFpbDoKIAlpc2NzaV9mcmVlX3Nlc3Npb24oY2xzX3Nlc3Npb24pOworZGVjX3Nlc3Npb25fY291bnQ6CisJaXNjc2lfaG9zdF9kZWNfc2Vzc2lvbl9jbnQoc2hvc3QpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl9zZXR1cCk7CkBAIC0yMDQ0LDYgKzIxNTUsNyBAQAogewogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAJc3RydWN0IG1vZHVsZSAqb3duZXIgPSBjbHNfc2Vzc2lvbi0+dHJhbnNwb3J0LT5vd25lcjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNlc3Npb24tPmhvc3Q7CiAKIAlpc2NzaV9wb29sX2ZyZWUoJnNlc3Npb24tPmNtZHBvb2wpOwogCkBAIC0yMDU2LDYgKzIxNjgsNyBAQAogCWtmcmVlKHNlc3Npb24tPmlmYWNlbmFtZSk7CiAKIAlpc2NzaV9kZXN0cm95X3Nlc3Npb24oY2xzX3Nlc3Npb24pOworCWlzY3NpX2hvc3RfZGVjX3Nlc3Npb25fY250KHNob3N0KTsKIAltb2R1bGVfcHV0KG93bmVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fdGVhcmRvd24pOwpAQCAtMjMzNSw4ICsyNDQ4LDEwIEBACiAJICogZmx1c2ggcXVldWVzLgogCSAqLwogCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JZmFpbF9hbGxfY29tbWFuZHMoY29ubiwgLTEsCi0JCQlTVE9QX0NPTk5fUkVDT1ZFUiA/IERJRF9CVVNfQlVTWSA6IERJRF9FUlJPUik7CisJaWYgKGZsYWcgPT0gU1RPUF9DT05OX1JFQ09WRVIpCisJCWZhaWxfYWxsX2NvbW1hbmRzKGNvbm4sIC0xLCBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCk7CisJZWxzZQorCQlmYWlsX2FsbF9jb21tYW5kcyhjb25uLCAtMSwgRElEX0VSUk9SKTsKIAlmbHVzaF9jb250cm9sX3F1ZXVlcyhzZXNzaW9uLCBjb25uKTsKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5laF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggZTBlMDE4ZC4uNjBhOWU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMzQsNyArMzQsMTQgQEAKICNkZWZpbmUgTFBGQ19JT0NCX0xJU1RfQ05UCTIyNTAJLyogbGlzdCBvZiBJT0NCcyBmb3IgZmFzdC1wYXRoIHVzYWdlLiAqLwogI2RlZmluZSBMUEZDX1FfUkFNUF9VUF9JTlRFUlZBTCAxMjAgICAgIC8qIGx1biBxX2RlcHRoIHJhbXAgdXAgaW50ZXJ2YWwgKi8KICNkZWZpbmUgTFBGQ19WTkFNRV9MRU4JCTEwMAkvKiB2cG9ydCBzeW1ib2xpYyBuYW1lIGxlbmd0aCAqLworI2RlZmluZSBMUEZDX1RHVFFfSU5URVJWQUwJNDAwMDAJLyogTWluIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGd0CisJCQkJCSAgIHF1ZXVlIGRlcHRoIGNoYW5nZSBpbiBtaWxsaXNlY3MgKi8KKyNkZWZpbmUgTFBGQ19UR1RRX1JBTVBVUF9QQ0VOVAk1CS8qIFRhcmdldCBxdWV1ZSByYW1wdXAgaW4gcGVyY2VudGFnZSAqLworI2RlZmluZSBMUEZDX01JTl9UR1RfUURFUFRICTEwMAorI2RlZmluZSBMUEZDX01BWF9UR1RfUURFUFRICTB4RkZGRgogCisjZGVmaW5lICBMUEZDX01BWF9CVUNLRVRfQ09VTlQgMjAJLyogTWF4aW11bSBuby4gb2YgYnVja2V0cyBmb3Igc3RhdCBkYXRhCisJCQkJCSAgIGNvbGxlY3Rpb24uICovCiAvKgogICogRm9sbG93aW5nIHRpbWUgaW50ZXJ2YWxzIGFyZSB1c2VkIG9mIGFkanVzdGluZyBTQ1NJIGRldmljZQogICogcXVldWUgZGVwdGhzIHdoZW4gdGhlcmUgYXJlIGRyaXZlciByZXNvdXJjZSBlcnJvciBvciBGaXJtd2FyZQpAQCAtNDksNiArNTYsOSBAQAogI2RlZmluZSBMUEZDX0hCX01CT1hfSU5URVJWQUwgICA1CS8qIEhlYXJ0IGJlYXQgaW50ZXJ2YWwgaW4gc2Vjb25kcy4gKi8KICNkZWZpbmUgTFBGQ19IQl9NQk9YX1RJTUVPVVQgICAgMzAJLyogSGVhcnQgYmVhdCB0aW1lb3V0ICBpbiBzZWNvbmRzLiAqLwogCisvKiBFcnJvciBBdHRlbnRpb24gZXZlbnQgcG9sbGluZyBpbnRlcnZhbCAqLworI2RlZmluZSBMUEZDX0VSQVRUX1BPTExfSU5URVJWQUwJNSAvKiBFQVRUIHBvbGwgaW50ZXJ2YWwgaW4gc2Vjb25kcyAqLworCiAvKiBEZWZpbmUgbWFjcm9zIGZvciA2NCBiaXQgc3VwcG9ydCAqLwogI2RlZmluZSBwdXRQYWRkckxvdyhhZGRyKSAgICAoKHVpbnQzMl90KSAoMHhmZmZmZmZmZiAmICh1NjQpKGFkZHIpKSkKICNkZWZpbmUgcHV0UGFkZHJIaWdoKGFkZHIpICAgKCh1aW50MzJfdCkgKDB4ZmZmZmZmZmYgJiAoKCh1NjQpKGFkZHIpKT4+MzIpKSkKQEAgLTYwLDYgKzcwLDkgQEAKIAogI2RlZmluZSBNQVhfSEJBRVZUCTMyCiAKKy8qIE51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIHRoZSBkcml2ZXIgdXNlcyAqLworI2RlZmluZSBMUEZDX01TSVhfVkVDVE9SUwkyCisKIC8qIGxwZmMgd2FpdCBldmVudCBkYXRhIHJlYWR5IGZsYWcgKi8KICNkZWZpbmUgTFBGQ19EQVRBX1JFQURZCQkoMTw8MCkKIApAQCAtMzU3LDYgKzM3MCw3IEBACiAJdWludDMyX3QgY2ZnX2xvZ192ZXJib3NlOwogCXVpbnQzMl90IGNmZ19tYXhfbHVuczsKIAl1aW50MzJfdCBjZmdfZW5hYmxlX2RhX2lkOworCXVpbnQzMl90IGNmZ19tYXhfc2NzaWNtcGxfdGltZTsKIAogCXVpbnQzMl90IGRldl9sb3NzX3Rtb19jaGFuZ2VkOwogCkBAIC0zNjksNiArMzgzLDggQEAKIAlzdHJ1Y3QgbHBmY19kZWJ1Z2ZzX3RyYyAqZGlzY190cmM7CiAJYXRvbWljX3QgZGlzY190cmNfY250OwogI2VuZGlmCisJdWludDhfdCBzdGF0X2RhdGFfZW5hYmxlZDsKKwl1aW50OF90IHN0YXRfZGF0YV9ibG9ja2VkOwogfTsKIAogc3RydWN0IGhicV9zIHsKQEAgLTQwNywxMCArNDIzLDExIEBACiAJc3RydWN0IGxwZmNfc2xpIHNsaTsKIAl1aW50MzJfdCBzbGlfcmV2OwkJLyogU0xJMiBvciBTTEkzICovCiAJdWludDMyX3Qgc2xpM19vcHRpb25zOwkJLyogTWFzayBvZiBlbmFibGVkIFNMSTMgb3B0aW9ucyAqLwotI2RlZmluZSBMUEZDX1NMSTNfRU5BQkxFRAkgMHgwMQotI2RlZmluZSBMUEZDX1NMSTNfSEJRX0VOQUJMRUQJIDB4MDIKLSNkZWZpbmUgTFBGQ19TTEkzX05QSVZfRU5BQkxFRAkgMHgwNAotI2RlZmluZSBMUEZDX1NMSTNfVlBPUlRfVEVBUkRPV04gMHgwOAorI2RlZmluZSBMUEZDX1NMSTNfSEJRX0VOQUJMRUQJCTB4MDEKKyNkZWZpbmUgTFBGQ19TTEkzX05QSVZfRU5BQkxFRAkJMHgwMgorI2RlZmluZSBMUEZDX1NMSTNfVlBPUlRfVEVBUkRPV04JMHgwNAorI2RlZmluZSBMUEZDX1NMSTNfQ1JQX0VOQUJMRUQJCTB4MDgKKyNkZWZpbmUgTFBGQ19TTEkzX0lOQl9FTkFCTEVECQkweDEwCiAJdWludDMyX3QgaW9jYl9jbWRfc2l6ZTsKIAl1aW50MzJfdCBpb2NiX3JzcF9zaXplOwogCkBAIC00MjIsMTAgKzQzOSwyMCBAQAogI2RlZmluZSBMU19OUElWX0ZBQl9TVVBQT1JURUQgMHgyCS8qIEZhYnJpYyBzdXBwb3J0cyBOUElWICovCiAjZGVmaW5lIExTX0lHTk9SRV9FUkFUVCAgICAgICAweDQJLyogaW50ciBoYW5kbGVyIHNob3VsZCBpZ25vcmUgRVJBVFQgKi8KIAotCXN0cnVjdCBscGZjX3NsaTJfc2xpbSAqc2xpbTJwOwotCXN0cnVjdCBscGZjX2RtYWJ1ZiBoYnFzbGltcDsKKwl1aW50MzJfdCBoYmFfZmxhZzsJLyogaGJhIGdlbmVyaWMgZmxhZ3MgKi8KKyNkZWZpbmUgSEJBX0VSQVRUX0hBTkRMRUQJMHgxIC8qIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBlcmF0dCBoYW5kbGVkICovCiAKLQlkbWFfYWRkcl90IHNsaW0ycF9tYXBwaW5nOworCXN0cnVjdCBscGZjX2RtYWJ1ZiBzbGltMnA7CisKKwlNQUlMQk9YX3QgKm1ib3g7CisJdWludDMyX3QgKmluYl9oYV9jb3B5OworCXVpbnQzMl90ICppbmJfY291bnRlcjsKKwl1aW50MzJfdCBpbmJfbGFzdF9jb3VudGVyOworCXVpbnQzMl90IGhhX2NvcHk7CisJc3RydWN0IF9QQ0IgKnBjYjsKKwlzdHJ1Y3QgX0lPQ0IgKklPQ0JzOworCisJc3RydWN0IGxwZmNfZG1hYnVmIGhicXNsaW1wOwogCiAJdWludDE2X3QgcGNpX2NmZ192YWx1ZTsKIApAQCAtNDkyLDcgKzUxOSw3IEBACiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3b3JrX3dhaXRxOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAgICp3b3JrZXJfdGhyZWFkOwotCWxvbmcgZGF0YV9mbGFnczsKKwl1bnNpZ25lZCBsb25nIGRhdGFfZmxhZ3M7CiAKIAl1aW50MzJfdCBoYnFfaW5fdXNlOwkJLyogSEJRcyBpbiB1c2UgZmxhZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaGJxYnVmX2luX2xpc3Q7ICAvKiBpbi1mbHkgaGJxIGJ1ZmZlciBsaXN0ICovCkBAIC01MTQsNiArNTQxLDcgQEAKIAl2b2lkIF9faW9tZW0gKkhDcmVnYWRkcjsJLyogdmlydHVhbCBhZGRyZXNzIGZvciBob3N0IGN0bCByZWcgKi8KIAogCXN0cnVjdCBscGZjX2hncCBfX2lvbWVtICpob3N0X2dwOyAvKiBIb3N0IHNpZGUgZ2V0L3B1dCBwb2ludGVycyAqLworCXN0cnVjdCBscGZjX3BncCAgICpwb3J0X2dwOwogCXVpbnQzMl90IF9faW9tZW0gICpoYnFfcHV0OyAgICAgLyogQWRkcmVzcyBpbiBTTElNIHRvIEhCUSBwdXQgcHRycyAqLwogCXVpbnQzMl90ICAgICAgICAgICpoYnFfZ2V0OyAgICAgLyogSG9zdCBtZW0gYWRkcmVzcyBvZiBIQlEgZ2V0IHB0cnMgKi8KIApAQCAtNTM2LDYgKzU2NCw3IEBACiAJdWludDhfdCBzb2Z0X3d3bl9lbmFibGU7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBmY3BfcG9sbF90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBlcmF0dF9wb2xsOwogCiAJLyoKIAkgKiBzdGF0ICBjb3VudGVycwpAQCAtNTY1LDcgKzU5NCw3IEBACiAKIAlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzIGxpbmtfc3RhdHM7CiAJZW51bSBpbnRyX3R5cGVfdCBpbnRyX3R5cGU7Ci0Jc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzWzFdOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tMUEZDX01TSVhfVkVDVE9SU107CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRfbGlzdDsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqcHBvcnQ7CS8qIHBoeXNpY2FsIGxwZmNfdnBvcnQgcG9pbnRlciAqLwpAQCAtNjA1LDYgKzYzNCw3IEBACiAJdW5zaWduZWQgbG9uZyBsYXN0X2NvbXBsZXRpb25fdGltZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBoYl90bW9mdW5jOwogCXVpbnQ4X3QgaGJfb3V0c3RhbmRpbmc7CisJZW51bSBoYmFfdGVtcF9zdGF0ZSBvdmVyX3RlbXBfc3RhdGU7CiAJLyogbmRscCByZWZlcmVuY2UgbWFuYWdlbWVudCAqLwogCXNwaW5sb2NrX3QgbmRscF9sb2NrOwogCS8qCkBAIC02MTMsNyArNjQzLDE5IEBACiAJICovCiAjZGVmaW5lIFFVRV9CVUZUQUdfQklUICAoMTw8MzEpCiAJdWludDMyX3QgYnVmZmVyX3RhZ19jb3VudDsKLQllbnVtIGhiYV90ZW1wX3N0YXRlIG92ZXJfdGVtcF9zdGF0ZTsKKwlpbnQgd2FpdF80X21sb19tYWludF9mbGc7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF80X21sb19tX3E7CisJLyogZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbGF0ZW5jeSBkYXRhIGNvbGxlY3Rpb24gKi8KKyNkZWZpbmUgTFBGQ19OT19CVUNLRVQJICAgMAorI2RlZmluZSBMUEZDX0xJTkVBUl9CVUNLRVQgMQorI2RlZmluZSBMUEZDX1BPV0VSMl9CVUNLRVQgMgorCXVpbnQ4X3QgIGJ1Y2tldF90eXBlOworCXVpbnQzMl90IGJ1Y2tldF9iYXNlOworCXVpbnQzMl90IGJ1Y2tldF9zdGVwOworCisvKiBNYXhpbXVtIG51bWJlciBvZiBldmVudHMgdGhhdCBjYW4gYmUgb3V0c3RhbmRpbmcgYXQgYW55IHRpbWUqLworI2RlZmluZSBMUEZDX01BWF9FVlRfQ09VTlQgNTEyCisJYXRvbWljX3QgZmFzdF9ldmVudF9jb3VudDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IFNjc2lfSG9zdCAqCkBAIC02NTAsMTUgKzY5MiwyNSBAQAogCXJldHVybjsKIH0KIAotI2RlZmluZSBGQ19SRUdfRFVNUF9FVkVOVAkJMHgxMAkvKiBSZWdpc3RlciBmb3IgRHVtcCBldmVudHMgKi8KLSNkZWZpbmUgRkNfUkVHX1RFTVBFUkFUVVJFX0VWRU5UCTB4MjAgICAgLyogUmVnaXN0ZXIgZm9yIHRlbXBlcmF0dXJlCi0JCQkJCQkgICBldmVudCAqLworc3RhdGljIGlubGluZSB2b2lkCitscGZjX3NsaV9yZWFkX2hzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwkvKgorCSAqIFRoZXJlIHdhcyBhIGxpbmsvYm9hcmQgZXJyb3IuIFJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciB0byByZXRyaWV2ZQorCSAqIHRoZSBlcnJvciBldmVudCBhbmQgcHJvY2VzcyBpdC4KKwkgKi8KKwlwaGJhLT5zbGkuc2xpc3RhdC5lcnJfYXR0bl9ldmVudCsrOwogCi1zdHJ1Y3QgdGVtcF9ldmVudCB7Ci0JdWludDMyX3QgZXZlbnRfdHlwZTsKLQl1aW50MzJfdCBldmVudF9jb2RlOwotCXVpbnQzMl90IGRhdGE7Ci19OwotI2RlZmluZSBMUEZDX0NSSVRfVEVNUAkJMHgxCi0jZGVmaW5lIExQRkNfVEhSRVNIT0xEX1RFTVAJMHgyCi0jZGVmaW5lIExQRkNfTk9STUFMX1RFTVAJMHgzCisJLyogU2F2ZSBzdGF0dXMgaW5mbyAqLworCXBoYmEtPndvcmtfaHMgPSByZWFkbChwaGJhLT5IU3JlZ2FkZHIpOworCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gcmVhZGwocGhiYS0+TUJzbGltYWRkciArIDB4YTgpOworCXBoYmEtPndvcmtfc3RhdHVzWzFdID0gcmVhZGwocGhiYS0+TUJzbGltYWRkciArIDB4YWMpOworCisJLyogQ2xlYXIgY2hpcCBIb3N0IEF0dGVudGlvbiBlcnJvciBiaXQgKi8KKwl3cml0ZWwoSEFfRVJBVFQsIHBoYmEtPkhBcmVnYWRkcik7CisJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwlwaGJhLT5wcG9ydC0+c3RvcHBlZCA9IDE7CisKKwlyZXR1cm47Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKaW5kZXggMzdiZmEwYi4uYWEzZDYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC00OSw2ICs1MCwyMSBAQAogI2RlZmluZSBMUEZDX0xJTktfU1BFRURfQklUTUFQIDB4MDAwMDAxMTcKICNkZWZpbmUgTFBGQ19MSU5LX1NQRUVEX1NUUklORyAiMCwgMSwgMiwgNCwgOCIKIAorLyoqCisgKiBscGZjX2plZGVjX3RvX2FzY2lpOiBIZXggdG8gYXNjaWkgY29udmVydG9yIGFjY29yZGluZyB0byBKRURFQyBydWxlcy4KKyAqIEBpbmNyOiBpbnRlZ2VyIHRvIGNvbnZlcnQuCisgKiBAaGR3OiBhc2NpaSBzdHJpbmcgaG9sZGluZyBjb252ZXJ0ZWQgaW50ZWdlciBwbHVzIGEgc3RyaW5nIHRlcm1pbmF0b3IuCisgKgorICogRGVzY3JpcHRpb246CisgKiBKRURFQyBKb2ludCBFbGVjdHJvbiBEZXZpY2UgRW5naW5lZXJpbmcgQ291bmNpbC4KKyAqIENvbnZlcnQgYSAzMiBiaXQgaW50ZWdlciBjb21wb3NlZCBvZiA4IG5pYmJsZXMgaW50byBhbiA4IGJ5dGUgYXNjaWkKKyAqIGNoYXJhY3RlciBzdHJpbmcuIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkIHdpdGggYSBOVUxMIGluIGJ5dGUgOS4KKyAqIEhleCAwLTkgYmVjb21lcyBhc2NpaSAnMCcgdG8gJzknLgorICogSGV4IGEtZiBiZWNvbWVzIGFzY2lpICc9JyB0byAnQicgY2FwaXRhbCBCLgorICoKKyAqIE5vdGVzOgorICogQ29kZWQgZm9yIDMyIGJpdCBpbnRlZ2VycyBvbmx5LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfamVkZWNfdG9fYXNjaWkoaW50IGluY3IsIGNoYXIgaGR3W10pCiB7CkBAIC02NSw2ICs4MSwxNCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2RydnJfdmVyc2lvbl9zaG93OiBSZXR1cm4gdGhlIEVtdWxleCBkcml2ZXIgc3RyaW5nIHdpdGggdmVyc2lvbiBudW1iZXIuCisgKiBAZGV2OiBjbGFzcyB1bnVzZWQgdmFyaWFibGUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIG1vZHVsZSBkZXNjcmlwdGlvbiB0ZXh0LgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2RydnJfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgICBjaGFyICpidWYpCkBAIC03Miw2ICs5NiwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgTFBGQ19NT0RVTEVfREVTQyAiXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX2luZm9fc2hvdzogUmV0dXJuIHNvbWUgcGNpIGluZm8gYWJvdXQgdGhlIGhvc3QgaW4gYXNjaWkuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBmb3JtYXR0ZWQgdGV4dCBmcm9tIGxwZmNfaW5mbygpLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2luZm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCSAgICAgICBjaGFyICpidWYpCkBAIC04MSw2ICsxMTMsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixscGZjX2luZm8oaG9zdCkpOwogfQogCisvKioKKyAqIGxwZmNfc2VyaWFsbnVtX3Nob3c6IFJldHVybiB0aGUgaGJhIHNlcmlhbCBudW1iZXIgaW4gYXNjaWkuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBmb3JtYXR0ZWQgdGV4dCBzZXJpYWwgbnVtYmVyLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NlcmlhbG51bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC05Miw2ICsxMzIsMTggQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5TZXJpYWxOdW1iZXIpOwogfQogCisvKioKKyAqIGxwZmNfdGVtcF9zZW5zb3Jfc2hvdzogUmV0dXJuIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IgbGV2ZWwuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBmb3JtYXR0ZWQgc3VwcG9ydCBsZXZlbC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJldHVybnMgYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yIGxldmVsIGN1cnJlbnRseQorICogc3VwcG9ydGVkLCB6ZXJvIG9yIG9uZSBpbiBhc2NpaS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY190ZW1wX3NlbnNvcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKQEAgLTEwMiw2ICsxNTQsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIixwaGJhLT50ZW1wX3NlbnNvcl9zdXBwb3J0KTsKIH0KIAorLyoqCisgKiBscGZjX21vZGVsZGVzY19zaG93OiBSZXR1cm4gdGhlIG1vZGVsIGRlc2NyaXB0aW9uIG9mIHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzY3NpIHZwZCBtb2RlbCBkZXNjcmlwdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19tb2RlbGRlc2Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtMTEzLDYgKzE3MywxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPk1vZGVsRGVzYyk7CiB9CiAKKy8qKgorICogbHBmY19tb2RlbG5hbWVfc2hvdzogUmV0dXJuIHRoZSBtb2RlbCBuYW1lIG9mIHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzY3NpIHZwZCBtb2RlbCBuYW1lLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX21vZGVsbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC0xMjQsNiArMTkyLDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+TW9kZWxOYW1lKTsKIH0KIAorLyoqCisgKiBscGZjX3Byb2dyYW10eXBlX3Nob3c6IFJldHVybiB0aGUgcHJvZ3JhbSB0eXBlIG9mIHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzY3NpIHZwZCBwcm9ncmFtIHR5cGUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfcHJvZ3JhbXR5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCkBAIC0xMzUsNiArMjExLDMzIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+UHJvZ3JhbVR5cGUpOwogfQogCisvKioKKyAqIGxwZmNfbWxvbWdtdF9zaG93OiBSZXR1cm4gdGhlIE1lbmxvIE1haW50ZW5hbmNlIHNsaSBmbGFnLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgTWVubG8gTWFpbnRlbmFuY2Ugc2xpIGZsYWcuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfbWxvbWdtdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKXNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX01FTkxPX01BSU5UKSk7Cit9CisKKy8qKgorICogbHBmY192cG9ydG51bV9zaG93OiBSZXR1cm4gdGhlIHBvcnQgbnVtYmVyIGluIGFzY2lpIG9mIHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHNjc2kgdnBkIHByb2dyYW0gdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY192cG9ydG51bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgIGNoYXIgKmJ1ZikKQEAgLTE0Niw2ICsyNDksMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5Qb3J0KTsKIH0KIAorLyoqCisgKiBscGZjX2Z3cmV2X3Nob3c6IFJldHVybiB0aGUgZmlybXdhcmUgcmV2IHJ1bm5pbmcgaW4gdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHNjc2kgdnBkIHByb2dyYW0gdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19md3Jldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTE1OSw2ICsyNzAsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcywgc2xpLSVkXG4iLCBmd3JldiwgcGhiYS0+c2xpX3Jldik7CiB9CiAKKy8qKgorICogbHBmY19oZHdfc2hvdzogUmV0dXJuIHRoZSBqZWRlYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc2NzaSB2cGQgcHJvZ3JhbSB0eXBlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2hkd19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTE3MSw2ICsyOTAsMTUgQEAKIAlscGZjX2plZGVjX3RvX2FzY2lpKHZwLT5yZXYuYml1UmV2LCBoZHcpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBoZHcpOwogfQorCisvKioKKyAqIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3c6IFJldHVybiB0aGUgYWRhcHRlciBST00gRkNvZGUgdmVyc2lvbi4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIFJPTSBhbmQgRkNvZGUgYXNjaWkgc3RyaW5ncy4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19vcHRpb25fcm9tX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjaGFyICpidWYpCkBAIC0xODEsNiArMzA5LDE4IEBACiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcGhiYS0+T3B0aW9uUk9NVmVyc2lvbik7CiB9CisKKy8qKgorICogbHBmY19zdGF0ZV9zaG93OiBSZXR1cm4gdGhlIGxpbmsgc3RhdGUgb2YgdGhlIHBvcnQuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRleHQgZGVzY3JpYmluZyB0aGUgc3RhdGUgb2YgdGhlIGxpbmsuCisgKgorICogTm90ZXM6CisgKiBUaGUgc3dpdGNoIHN0YXRlbWVudCBoYXMgbm8gZGVmYXVsdCBzbyB6ZXJvIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbGlua19zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgY2hhciAqYnVmKQpAQCAtMjMyLDggKzM3MiwxMCBAQAogCQkJCQkiVW5rbm93blxuIik7CiAJCQlicmVhazsKIAkJfQotCi0JCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CisJCWlmIChwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX01FTkxPX01BSU5UKQorCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFLWxlbiwKKwkJCQkJIiAgIE1lbmxvIE1haW50IE1vZGVcbiIpOworCQllbHNlIGlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CiAJCQlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19QVUJMSUNfTE9PUCkKIAkJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUtbGVuLAogCQkJCQkJIiAgIFB1YmxpYyBMb29wXG4iKTsKQEAgLTI1Myw2ICszOTUsMTggQEAKIAlyZXR1cm4gbGVuOwogfQogCisvKioKKyAqIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdzogUmV0dXJuIHN1bSBvZiBtYXBwZWQgYW5kIHVubWFwcGVkIHZwb3J0cy4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzdW0gb2YgZmMgbWFwcGVkIGFuZCB1bm1hcHBlZC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJldHVybnMgdGhlIGFzY2lpIHRleHQgbnVtYmVyIG9mIHRoZSBzdW0gb2YgdGhlIGZjIG1hcHBlZCBhbmQgdW5tYXBwZWQKKyAqIHZwb3J0IGNvdW50cy4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19udW1fZGlzY292ZXJlZF9wb3J0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMjY0LDcgKzQxOCwyMCBAQAogCQkJdnBvcnQtPmZjX21hcF9jbnQgKyB2cG9ydC0+ZmNfdW5tYXBfY250KTsKIH0KIAotCisvKioKKyAqIGxwZmNfaXNzdWVfbGlwOiBNaXNub21lciwgbmFtZSBjYXJyaWVkIG92ZXIgZnJvbSBsb25nIGFnby4KKyAqIEBzaG9zdDogU2NzaV9Ib3N0IHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBCcmluZyB0aGUgbGluayBkb3duIGdyYWNlZnVsbHkgdGhlbiByZS1pbml0IHRoZSBsaW5rLiBUaGUgZmlybXdhcmUgd2lsbAorICogcmUtaW5pdCB0aGUgZmliZXIgY2hhbm5lbCBpbnRlcmZhY2UgYXMgcmVxdWlyZWQuIERvZXMgbm90IGlzc3VlIGEgTElQLgorICoKKyAqIFJldHVybnM6CisgKiAtRVBFUk0gcG9ydCBvZmZsaW5lIG9yIG1hbmFnZW1lbnQgY29tbWFuZHMgYXJlIGJlaW5nIGJsb2NrZWQKKyAqIC1FTk9NRU0gY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG1haWxib3ggY29tbWFuZAorICogLUVJTyBlcnJvciBzZW5kaW5nIHRoZSBtYWlsYm94IGNvbW1hbmQKKyAqIHplcm8gZm9yIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfbGlwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMzA2LDYgKzQ3MywyMSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZG9fb2ZmbGluZTogSXNzdWVzIGEgbWFpbGJveCBjb21tYW5kIHRvIGJyaW5nIHRoZSBsaW5rIGRvd24uCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqIEB0eXBlOiBMUEZDX0VWVF9PRkZMSU5FLCBMUEZDX0VWVF9XQVJNX1NUQVJULCBMUEZDX0VWVF9LSUxMLgorICoKKyAqIE5vdGVzOgorICogQXNzdW1lcyBhbnkgZXJyb3IgZnJvbSBscGZjX2RvX29mZmxpbmUoKSB3aWxsIGJlIG5lZ2F0aXZlLgorICogQ2FuIHdhaXQgdXAgdG8gNSBzZWNvbmRzIGZvciB0aGUgcG9ydCByaW5nIGJ1ZmZlcnMgY291bnQKKyAqIHRvIHJlYWNoIHplcm8sIHByaW50cyBhIHdhcm5pbmcgaWYgaXQgaXMgbm90IHplcm8gYW5kIGNvbnRpbnVlcy4KKyAqIGxwZmNfd29ya3FfcG9zdF9ldmVudCgpIHJldHVybnMgYSBub24temVybyByZXR1cm4gY29jZSBpZiBjYWxsIGZhaWxzLgorICoKKyAqIFJldHVybnM6CisgKiAtRUlPIGVycm9yIHBvc3RpbmcgdGhlIGV2ZW50CisgKiB6ZXJvIGZvciBzdWNjZXNzCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RvX29mZmxpbmUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCB0eXBlKQogewpAQCAtMzUzLDYgKzUzNSwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2VsZWN0aXZlX3Jlc2V0OiBPZmZsaW5lIHRoZW4gb25saW5lcyB0aGUgcG9ydC4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdGhlIHBvcnQgaXMgY29uZmlndXJlZCB0byBhbGxvdyBhIHJlc2V0IHRoZW4gdGhlIGhiYSBpcyBicm91Z2h0CisgKiBvZmZsaW5lIHRoZW4gb25saW5lLgorICoKKyAqIE5vdGVzOgorICogQXNzdW1lcyBhbnkgZXJyb3IgZnJvbSBscGZjX2RvX29mZmxpbmUoKSB3aWxsIGJlIG5lZ2F0aXZlLgorICoKKyAqIFJldHVybnM6CisgKiBscGZjX2RvX29mZmxpbmUoKSByZXR1cm4gY29kZSBpZiBub3QgemVybworICogLUVJTyByZXNldCBub3QgY29uZmlndXJlZCBvciBlcnJvciBwb3N0aW5nIHRoZSBldmVudAorICogemVybyBmb3Igc3VjY2VzcworICoqLwogc3RhdGljIGludAogbHBmY19zZWxlY3RpdmVfcmVzZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzc4LDYgKzU3NiwyNyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfcmVzZXQ6IFNlbGVjdGl2ZWx5IHJlc2V0cyBhbiBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWluaW5nIHRoZSBzdHJpbmcgInNlbGVjdGl2ZSIuCisgKiBAY291bnQ6IHVudXNlZCB2YXJpYWJsZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHRoZSBidWYgY29udGFpbnMgdGhlIHN0cmluZyAic2VsZWN0aXZlIiB0aGVuIGxwZmNfc2VsZWN0aXZlX3Jlc2V0KCkKKyAqIGlzIGNhbGxlZCB0byBwZXJmb3JtIHRoZSByZXNldC4KKyAqCisgKiBOb3RlczoKKyAqIEFzc3VtZXMgYW55IGVycm9yIGZyb20gbHBmY19zZWxlY3RpdmVfcmVzZXQoKSB3aWxsIGJlIG5lZ2F0aXZlLgorICogSWYgbHBmY19zZWxlY3RpdmVfcmVzZXQoKSByZXR1cm5zIHplcm8gdGhlbiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqIGlzIHJldHVybmVkIHdoaWNoIGluZGljYXRlcyBzdWNjY2VzcworICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIGlmIHRoZSBidWZmZXIgZG9lcyBub3QgY29udGFpbiB0aGUgc3RyaW5nICJzZWxlY3RpdmUiCisgKiBsZW5ndGggb2YgYnVmIGlmIGxwZmMtc2VsZWN0aXZlX3Jlc2V0KCkgaWYgdGhlIGNhbGwgc3VjY2VlZHMKKyAqIHJldHVybiB2YWx1ZSBvZiBscGZjX3NlbGVjdGl2ZV9yZXNldCgpIGlmIHRoZSBjYWxsIGZhaWxzCisqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2lzc3VlX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTM5Nyw2ICs2MTYsMTQgQEAKIAkJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoqCisgKiBscGZjX25wb3J0X2V2dF9jbnRfc2hvdzogUmV0dXJuIHRoZSBudW1iZXIgb2YgbnBvcnQgZXZlbnRzLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGFzY2lpIG51bWJlciBvZiBucG9ydCBldmVudHMuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbnBvcnRfZXZ0X2NudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQljaGFyICpidWYpCkBAIC00MDgsNiArNjM1LDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHBoYmEtPm5wb3J0X2V2ZW50X2NudCk7CiB9CiAKKy8qKgorICogbHBmY19ib2FyZF9tb2RlX3Nob3c6IFJldHVybiB0aGUgc3RhdGUgb2YgdGhlIGJvYXJkLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2JvYXJkX21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNoYXIgKmJ1ZikKQEAgLTQyOSw2ICs2NjQsMTkgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgc3RhdGUpOwogfQogCisvKioKKyAqIGxwZmNfYm9hcmRfbW9kZV9zdG9yZTogUHV0cyB0aGUgaGJhIGluIG9ubGluZSwgb2ZmbGluZSwgd2FybSBvciBlcnJvciBzdGF0ZS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbmluZyBvbmUgb2YgdGhlIHN0cmluZ3MgIm9ubGluZSIsICJvZmZsaW5lIiwgIndhcm0iIG9yICJlcnJvciIuCisgKiBAY291bnQ6IHVudXNlZCB2YXJpYWJsZS4KKyAqCisgKiBSZXR1cm5zOgorICogLUVBQ0NFUyBpZiBlbmFibGUgaGJhIHJlc2V0IG5vdCBlbmFibGVkCisgKiAtRUlOVkFMIGlmIHRoZSBidWZmZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHN0cmluZyAoc2VlIGFib3ZlKQorICogLUVJTyBpZiBscGZjX3dvcmtxX3Bvc3RfZXZlbnQoKSBvciBscGZjX2RvX29mZmxpbmUoKSBmYWlscworICogYnVmIGxlbmd0aCBncmVhdGVyIHRoYW4gemVybyBpbmRpY2F0ZXMgc3VjY2VzcworICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfYm9hcmRfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTQ2Miw2ICs3MTAsMjQgQEAKIAkJcmV0dXJuIC1FSU87CiB9CiAKKy8qKgorICogbHBmY19nZXRfaGJhX2luZm86IFJldHVybiB2YXJpb3VzIGJpdHMgb2YgaW5mb3JtYXRvbiBhYm91dCB0aGUgYWRhcHRlci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBteHJpIG1heCB4cmkgY291bnQuCisgKiBAYXhyaSBhdmFpbGFibGUgeHJpIGNvdW50LgorICogQG1ycGkgbWF4IHJwaSBjb3VudC4KKyAqIEBhcnBpIGF2YWlsYWJsZSBycGkgY291bnQuCisgKiBAbXZwaSBtYXggdnBpIGNvdW50LgorICogQGF2cGkgYXZhaWxhYmxlIHZwaSBjb3VudC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIGFuIGludGVnZXIgcG9pbnRlciBmb3IgYW4gY291bnQgaXMgbm90IG51bGwgdGhlbiB0aGUgdmFsdWUgZm9yIHRoZQorICogY291bnQgaXMgcmV0dXJuZWQuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gb24gZXJyb3IKKyAqIG9uZSBmb3Igc3VjY2VzcworICoqLwogc3RhdGljIGludAogbHBmY19nZXRfaGJhX2luZm8oc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkgIHVpbnQzMl90ICpteHJpLCB1aW50MzJfdCAqYXhyaSwKQEAgLTUyNCw2ICs3OTAsMjAgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX21heF9ycGlfc2hvdzogUmV0dXJuIG1heGltdW0gcnBpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIG1heGltdW0gcnBpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG1ycGkgY291bnQuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbWF4X3JwaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgY2hhciAqYnVmKQpAQCAtNTM4LDYgKzgxOCwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfdXNlZF9ycGlfc2hvdzogUmV0dXJuIG1heGltdW0gcnBpIG1pbnVzIGF2YWlsYWJsZSBycGkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5pbmcgdGhlIHVzZWQgcnBpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG1ycGkgYW5kIGFycGkgY291bnRzLgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3VzZWRfcnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgY2hhciAqYnVmKQpAQCAtNTUyLDYgKzg0NiwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfbWF4X3hyaV9zaG93OiBSZXR1cm4gbWF4aW11bSB4cmkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgbWF4aW11bSB4cmkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXJwaSBjb3VudC4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19tYXhfeHJpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICBjaGFyICpidWYpCkBAIC01NjYsNiArODc0LDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY191c2VkX3hyaV9zaG93OiBSZXR1cm4gbWF4aW11bSB4cGkgbWludXMgdGhlIGF2YWlsYWJsZSB4cGkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgdXNlZCB4cmkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXhyaSBhbmQgYXhyaSBjb3VudHMuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfdXNlZF94cmlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICBjaGFyICpidWYpCkBAIC01ODAsNiArOTAyLDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY19tYXhfdnBpX3Nob3c6IFJldHVybiBtYXhpbXVtIHZwaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBtYXhpbXVtIHZwaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBtdnBpIGNvdW50LgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX21heF92cGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgIGNoYXIgKmJ1ZikKQEAgLTU5NCw2ICs5MzAsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX3VzZWRfdnBpX3Nob3c6IFJldHVybiBtYXhpbXVtIHZwaSBtaW51cyB0aGUgYXZhaWxhYmxlIHZwaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSB1c2VkIHZwaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBtdnBpIGFuZCBhdnBpIGNvdW50cy4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY191c2VkX3ZwaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgIGNoYXIgKmJ1ZikKQEAgLTYwOCw2ICs5NTgsMTkgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX25waXZfaW5mb19zaG93OiBSZXR1cm4gdGV4dCBhYm91dCBOUElWIHN1cHBvcnQgZm9yIHRoZSBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiB0ZXh0IHRoYXQgbXVzdCBiZSBpbnRlcnByZXRlZCB0byBkZXRlcm1pbmUgaWYgbnBpdiBpcyBzdXBwb3J0ZWQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBCdWZmZXIgd2lsbCBjb250YWluIHRleHQgaW5kaWNhdGluZyBucGl2IGlzIG5vdCBzdXBwb2VydGVkIG9uIHRoZSBwb3J0LAorICogdGhlIHBvcnQgaXMgYW4gTlBJViBwaHlzaWNhbCBwb3J0LCBvciBpdCBpcyBhbiBucGl2IHZpcnR1YWwgcG9ydCB3aXRoCisgKiB0aGUgaWQgb2YgdGhlIHZwb3J0LgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX25waXZfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC02MjMsNiArOTg2LDE3IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiTlBJViBWaXJ0dWFsIChWUEkgJWQpXG4iLCB2cG9ydC0+dnBpKTsKIH0KIAorLyoqCisgKiBscGZjX3BvbGxfc2hvdzogUmV0dXJuIHRleHQgYWJvdXQgcG9sbCBzdXBwb3J0IGZvciB0aGUgYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBjZmdfcG9sbCBpbiBoZXguCisgKgorICogTm90ZXM6CisgKiBjZmdfcG9sbCBzaG91bGQgYmUgYSBscGZjX3BvbGxpbmdfZmxhZ3MgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19wb2xsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICAgICAgY2hhciAqYnVmKQpAQCAtNjM0LDYgKzEwMDgsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsIHBoYmEtPmNmZ19wb2xsKTsKIH0KIAorLyoqCisgKiBscGZjX3BvbGxfc3RvcmU6IFNldCB0aGUgdmFsdWUgb2YgY2ZnX3BvbGwgZm9yIHRoZSBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbmUgb3IgbW9yZSBscGZjX3BvbGxpbmdfZmxhZ3MgdmFsdWVzLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBOb3RlczoKKyAqIGJ1ZiBjb250ZW50cyBjb252ZXJ0ZWQgdG8gaW50ZWdlciBhbmQgY2hlY2tlZCBmb3IgYSB2YWxpZCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGNvbm5vdCBiZSBjb252ZXJ0ZWQgb3IgaXMgb3V0IG9mIHJhbmdlCisgKiBsZW5ndGggb2YgdGhlIGJ1ZiBvbiBzdWNjZXNzCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19wb2xsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNjkyLDYgKzEwODAsMjAgQEAKIAlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKKy8qKgorICogbHBmY19wYXJhbV9zaG93OiBSZXR1cm4gYSBjZmcgYXR0cmlidXRlIHZhbHVlIGluIGRlY2ltYWwuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc2hvdy4KKyAqCisgKiBscGZjXyMjYXR0ciMjX3Nob3c6IFJldHVybiB0aGUgZGVjaW1hbCB2YWx1ZSBvZiBhbiBhZGFwdGVycyBjZmdfeHh4IGZpZWxkLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zaG93KGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC03MDYsNiArMTEwOCwyMCBAQAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XAogfQogCisvKioKKyAqIGxwZmNfcGFyYW1faGV4X3Nob3c6IFJldHVybiBhIGNmZyBhdHRyaWJ1dGUgdmFsdWUgaW4gaGV4LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3Nob3cKKyAqCisgKiBscGZjXyMjYXR0ciMjX3Nob3c6IFJldHVybiB0aGUgaGV4IHZhbHVlIG9mIGFuIGFkYXB0ZXJzIGNmZ194eHggZmllbGQuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGhleGlkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9oZXhfc2hvdyhhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtNzIwLDYgKzExMzYsMjUgQEAKIAkJCXBoYmEtPmNmZ18jI2F0dHIpO1wKIH0KIAorLyoqCisgKiBscGZjX3BhcmFtX2luaXQ6IEludGlhbGl6ZXMgYSBjZmcgYXR0cmlidXRlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX2luaXQuIFRoZSBtYWNybyBhbHNvCisgKiB0YWtlcyBhIGRlZmF1bHQgYXJndW1lbnQsIGEgbWluaW11bSBhbmQgbWF4aW11bSBhcmd1bWVudC4KKyAqCisgKiBscGZjXyMjYXR0ciMjX2luaXQ6IEluaXRpYWxpemVzIGFuIGF0dHJpYnV0ZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRoZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAdmFsOiBpbnRlZ2VyIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBWYWxpZGF0ZXMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyB0aGVuIHNldHMgdGhlIGFkYXB0ZXIgY29uZmlnIGZpZWxkCisgKiBhY2NvcmRpbmdseSwgb3IgdXNlcyB0aGUgZGVmYXVsdCBpZiBvdXQgb2YgcmFuZ2UgYW5kIHByaW50cyBhbiBlcnJvciBtZXNzYWdlLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgaWYgZGVmYXVsdCB1c2VkCisgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1faW5pdChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCiBscGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKSBcCkBAIC03MzUsNiArMTE3MCwyNiBAQAogCXJldHVybiAtRUlOVkFMO1wKIH0KIAorLyoqCisgKiBscGZjX3BhcmFtX3NldDogU2V0IGEgY2ZnIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zZXQKKyAqCisgKiBscGZjXyMjYXR0ciMjX3NldDogU2V0cyBhbiBhdHRyaWJ1dGUgdmFsdWUuCisgKiBAcGhiYTogcG9pbnRlciB0aGUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHZhbDogaW50ZWdlciBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBWYWxpZGF0ZXMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyB0aGVuIHNldHMgdGhlCisgKiBhZGFwdGVyIGNvbmZpZyBmaWVsZCBpZiBpbiB0aGUgdmFsaWQgcmFuZ2UuIHByaW50cyBlcnJvciBtZXNzYWdlCisgKiBhbmQgZG9lcyBub3Qgc2V0IHRoZSBwYXJhbWV0ZXIgaWYgaW52YWxpZC4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBvbiBzdWNjZXNzCisgKiAtRUlOVkFMIGlmIHZhbCBpcyBpbnZhbGlkCisgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKIGxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXApAQCAtNzQ5LDYgKzEyMDQsMjcgQEAKIAlyZXR1cm4gLUVJTlZBTDtcCiB9CiAKKy8qKgorICogbHBmY19wYXJhbV9zdG9yZTogU2V0IGEgdnBvcnQgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3N0b3JlLgorICoKKyAqIGxwZmNfIyNhdHRyIyNfc3RvcmU6IFNldCBhbiBzdHRyaWJ1dGUgdmFsdWUuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gYXNjaWkuCisgKiBAY291bnQ6IG5vdCB1c2VkLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ29udmVydCB0aGUgYXNjaWkgdGV4dCBudW1iZXIgdG8gYW4gaW50ZWdlciwgdGhlbgorICogdXNlIHRoZSBscGZjXyMjYXR0ciMjX3NldCBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIGlmIHZhbCBpcyBpbnZhbGlkIG9yIGxwZmNfIyNhdHRyIyNfc2V0KCkgZmFpbHMKKyAqIGxlbmd0aCBvZiBidWZmZXIgdXBvbiBzdWNjZXNzLgorICoqLwogI2RlZmluZSBscGZjX3BhcmFtX3N0b3JlKGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtNzY4LDYgKzEyNDQsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7XAogfQogCisvKioKKyAqIGxwZmNfdnBvcnRfcGFyYW1fc2hvdzogUmV0dXJuIGRlY2ltYWwgZm9ybWF0dGVkIGNmZyBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc2hvdworICoKKyAqIGxwZmNfIyNhdHRyIyNfc2hvdzogcHJpbnRzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gZGVjaW1hbC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBsZW5ndGggb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zaG93KGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC03ODAsNiArMTI3MCwyMSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2cG9ydC0+Y2ZnXyMjYXR0cik7XAogfQogCisvKioKKyAqIGxwZmNfdnBvcnRfcGFyYW1faGV4X3Nob3c6IFJldHVybiBoZXggZm9ybWF0dGVkIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuCisgKiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcyBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZQorICogbHBmY19oYmFfcXVldWVfZGVwdGhfc2hvdworICoKKyAqIGxwZmNfIyNhdHRyIyNfc2hvdzogcHJpbnRzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gaGV4aWRlY2ltYWwuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGhleGlkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IGxlbmd0aCBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC03OTIsNiArMTI5NywyNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgdnBvcnQtPmNmZ18jI2F0dHIpO1wKIH0KIAorLyoqCisgKiBscGZjX3Zwb3J0X3BhcmFtX2luaXQ6IEluaXRpYWxpemUgYSB2cG9ydCBjZmcgYXR0cmlidXRlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX2luaXQuIFRoZSBtYWNybyBhbHNvCisgKiB0YWtlcyBhIGRlZmF1bHQgYXJndW1lbnQsIGEgbWluaW11bSBhbmQgbWF4aW11bSBhcmd1bWVudC4KKyAqCisgKiBscGZjXyMjYXR0ciMjX2luaXQ6IHZhbGlkYXRlcyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIHRoZW4gc2V0cyB0aGUKKyAqIGFkYXB0ZXIgY29uZmlnIGZpZWxkIGFjY29yZGluZ2x5LCBvciB1c2VzIHRoZSBkZWZhdWx0IGlmIG91dCBvZiByYW5nZQorICogYW5kIHByaW50cyBhbiBlcnJvciBtZXNzYWdlLgorICogQHBoYmE6IHBvaW50ZXIgdGhlIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEB2YWw6IGludGVnZXIgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgaWYgZGVmYXVsdCB1c2VkCisgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1faW5pdChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCiBscGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCkBAIC04MDEsMTIgKzEzMjQsMjkgQEAKIAkJcmV0dXJuIDA7XAogCX1cCiAJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULCBcCi0JCQkgIjA0NDkgbHBmY18iI2F0dHIiIGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IHRvICVkLCAiXAorCQkJICIwNDIzIGxwZmNfIiNhdHRyIiBhdHRyaWJ1dGUgY2Fubm90IGJlIHNldCB0byAlZCwgIlwKIAkJCSAiYWxsb3dlZCByYW5nZSBpcyBbIiNtaW52YWwiLCAiI21heHZhbCJdXG4iLCB2YWwpOyBcCiAJdnBvcnQtPmNmZ18jI2F0dHIgPSBkZWZhdWx0O1wKIAlyZXR1cm4gLUVJTlZBTDtcCiB9CiAKKy8qKgorICogbHBmY192cG9ydF9wYXJhbV9zZXQ6IFNldCBhIHZwb3J0IGNmZyBhdHRyaWJ1dGUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc2V0CisgKgorICogbHBmY18jI2F0dHIjI19zZXQ6IHZhbGlkYXRlcyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIHRoZW4gc2V0cyB0aGUKKyAqIGFkYXB0ZXIgY29uZmlnIGZpZWxkIGlmIGluIHRoZSB2YWxpZCByYW5nZS4gcHJpbnRzIGVycm9yIG1lc3NhZ2UKKyAqIGFuZCBkb2VzIG5vdCBzZXQgdGhlIHBhcmFtZXRlciBpZiBpbnZhbGlkLgorICogQHBoYmE6IHBvaW50ZXIgdGhlIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEB2YWw6CWludGVnZXIgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgaWYgdmFsIGlzIGludmFsaWQKKyAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAogbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCkBAIC04MTYsMTEgKzEzNTYsMjggQEAKIAkJcmV0dXJuIDA7XAogCX1cCiAJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULCBcCi0JCQkgIjA0NTAgbHBmY18iI2F0dHIiIGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IHRvICVkLCAiXAorCQkJICIwNDI0IGxwZmNfIiNhdHRyIiBhdHRyaWJ1dGUgY2Fubm90IGJlIHNldCB0byAlZCwgIlwKIAkJCSAiYWxsb3dlZCByYW5nZSBpcyBbIiNtaW52YWwiLCAiI21heHZhbCJdXG4iLCB2YWwpOyBcCiAJcmV0dXJuIC1FSU5WQUw7XAogfQogCisvKioKKyAqIGxwZmNfdnBvcnRfcGFyYW1fc3RvcmU6IFNldCBhIHZwb3J0IGF0dHJpYnV0ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aAorICogZXhwYW5kcyBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zdG9yZQorICoKKyAqIGxwZmNfIyNhdHRyIyNfc3RvcmU6IGNvbnZlcnQgdGhlIGFzY2lpIHRleHQgbnVtYmVyIHRvIGFuIGludGVnZXIsIHRoZW4KKyAqIHVzZSB0aGUgbHBmY18jI2F0dHIjI19zZXQgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZS4KKyAqIEBjZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBidWY6CWNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gZGVjaW1hbC4KKyAqIEBjb3VudDogbm90IHVzZWQuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdmFsIGlzIGludmFsaWQgb3IgbHBmY18jI2F0dHIjI19zZXQoKSBmYWlscworICogbGVuZ3RoIG9mIGJ1ZmZlciB1cG9uIHN1Y2Nlc3MuCisgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc3RvcmUoYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC05NDEsNiArMTQ5OCw3IEBACiAJCSAgIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAogCQkgICBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1lbmxvX21nbXRfbW9kZSwgU19JUlVHTywgbHBmY19tbG9tZ210X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG5wb3J0X2V2dF9jbnQsIFNfSVJVR08sIGxwZmNfbnBvcnRfZXZ0X2NudF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjX2RydnJfdmVyc2lvbiwgU19JUlVHTywgbHBmY19kcnZyX3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCkBAIC05NTgsNiArMTUxNiwxNyBAQAogCiBzdGF0aWMgY2hhciAqbHBmY19zb2Z0X3d3bl9rZXkgPSAiQzk5RzcxU0w4MDMyQSI7CiAKKy8qKgorICogbHBmY19zb2Z0X3d3bl9lbmFibGVfc3RvcmU6IEFsbG93cyBzZXR0aW5nIG9mIHRoZSB3d24gaWYgdGhlIGtleSBpcyB2YWxpZC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbmluZyB0aGUgc3RyaW5nIGxwZmNfc29mdF93d25fa2V5LgorICogQGNvdW50OiBtdXN0IGJlIHNpemUgb2YgbHBmY19zb2Z0X3d3bl9rZXkuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGxwZmNfc29mdF93d25fa2V5CisgKiBsZW5ndGggb2YgYnVmIGluZGljYXRlcyBzdWNjZXNzCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zb2Z0X3d3bl9lbmFibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtOTk0LDYgKzE1NjMsMTQgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjX3NvZnRfd3duX2VuYWJsZSwgU19JV1VTUiwgTlVMTCwKIAkJICAgbHBmY19zb2Z0X3d3bl9lbmFibGVfc3RvcmUpOwogCisvKioKKyAqIGxwZmNfc29mdF93d3BuX3Nob3c6IFJldHVybiB0aGUgY2ZnIHNvZnQgd3cgcG9ydCBuYW1lIG9mIHRoZSBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHd3cG4gaW4gaGV4aWRlY2ltYWwuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc29mdF93d3BuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTEwMDYsNyArMTU4MywxOSBAQAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaGJhLT5jZmdfc29mdF93d3BuKTsKIH0KIAotCisvKioKKyAqIGxwZmNfc29mdF93d3BuX3N0b3JlOiBTZXQgdGhlIHd3IHBvcnQgbmFtZSBvZiB0aGUgYWRhcHRlci4KKyAqIEBkZXYgY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWlucyB0aGUgd3dwbiBpbiBoZXhpZGVjaW1hbC4KKyAqIEBjb3VudDogbnVtYmVyIG9mIHd3cG4gYnl0ZXMgaW4gYnVmCisgKgorICogUmV0dXJuczoKKyAqIC1FQUNDRVMgaGJhIHJlc2V0IG5vdCBlbmFibGVkLCBhZGFwdGVyIG92ZXIgdGVtcAorICogLUVJTlZBTCBzb2Z0IHd3biBub3QgZW5hYmxlZCwgY291bnQgaXMgaW52YWxpZCwgaW52YWxpZCB3d3BuIGJ5dGUgaW52YWxpZAorICogLUVJTyBlcnJvciB0YWtpbmcgYWRhcHRlciBvZmZsaW5lIG9yIG9ubGluZQorICogdmFsdWUgb2YgY291bnQgb24gc3VjY2VzcworICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc29mdF93d3BuX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMDgwLDYgKzE2NjksMTQgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjX3NvZnRfd3dwbiwgU19JUlVHTyB8IFNfSVdVU1IsXAogCQkgICBscGZjX3NvZnRfd3dwbl9zaG93LCBscGZjX3NvZnRfd3dwbl9zdG9yZSk7CiAKKy8qKgorICogbHBmY19zb2Z0X3d3bm5fc2hvdzogUmV0dXJuIHRoZSBjZmcgc29mdCB3dyBub2RlIG5hbWUgZm9yIHRoZSBhZGFwdGVyLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHd3bm4gaW4gaGV4aWRlY2ltYWwuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc29mdF93d25uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTEwOTAsNyArMTY4NywxNiBAQAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaGJhLT5jZmdfc29mdF93d25uKTsKIH0KIAotCisvKioKKyAqIGxwZmNfc29mdF93d25uX3N0b3JlOiBzZXRzIHRoZSB3dyBub2RlIG5hbWUgb2YgdGhlIGFkYXB0ZXIuCisgKiBAY2RldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYnVmOiBjb250YWlucyB0aGUgd3cgbm9kZSBuYW1lIGluIGhleGlkZWNpbWFsLgorICogQGNvdW50OiBudW1iZXIgb2Ygd3dubiBieXRlcyBpbiBidWYuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgc29mdCB3d24gbm90IGVuYWJsZWQsIGNvdW50IGlzIGludmFsaWQsIGludmFsaWQgd3dubiBieXRlIGludmFsaWQKKyAqIHZhbHVlIG9mIGNvdW50IG9uIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NvZnRfd3dubl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMTE3OCw2ICsxNzg0LDE1IEBACiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfbm9kZXZfdG1vLAogCQkgIlNlY29uZHMgZHJpdmVyIHdpbGwgaG9sZCBJL08gd2FpdGluZyAiCiAJCSAiZm9yIGEgZGV2aWNlIHRvIGNvbWUgYmFjayIpOworCisvKioKKyAqIGxwZmNfbm9kZXZfdG1vX3Nob3c6IFJldHVybiB0aGUgaGJhIGRldiBsb3NzIHRpbWVvdXQgdmFsdWUuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBkZXYgbG9zcyB0aW1lb3V0IGluIGRlY2ltYWwuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbm9kZXZfdG1vX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTExODksNiArMTgwNCwyMSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAl2cG9ydC0+Y2ZnX2Rldmxvc3NfdG1vKTsKIH0KIAorLyoqCisgKiBscGZjX25vZGV2X3Rtb19pbml0OiBTZXQgdGhlIGhiYSBub2RldiB0aW1lb3V0IHZhbHVlLgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICogQHZhbDogY29udGFpbnMgdGhlIG5vZGV2IHRpbWVvdXQgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB0aGUgZGV2bG9zcyB0bW8gaXMgYWxyZWFkeSBzZXQgdGhlbiBub2RldiB0bW8gaXMgc2V0IHRvIGRldmxvc3MgdG1vLAorICogYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIGFuZCB6ZXJvIGlzIHJldHVybmVkLgorICogRWxzZSBpZiB2YWwgaXMgaW4gcmFuZ2UgdGhlbiBub2RldiB0bW8gYW5kIGRldmxvc3MgdG1vIGFyZSBzZXQgdG8gdmFsLgorICogT3RoZXJ3aXNlIG5vZGV2IHRtbyBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgYWxyZWFkeSBzZXQgb3IgaWYgdmFsIGlzIGluIHJhbmdlCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfbm9kZXZfdG1vX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQogewpAQCAtMTE5Niw3ICsxODI2LDcgQEAKIAkJdnBvcnQtPmNmZ19ub2Rldl90bW8gPSB2cG9ydC0+Y2ZnX2Rldmxvc3NfdG1vOwogCQlpZiAodmFsICE9IExQRkNfREVGX0RFVkxPU1NfVE1PKQogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MDIgSWdub3Jpbmcgbm9kZXZfdG1vIG1vZHVsZSAiCisJCQkJCSAiMDQwNyBJZ25vcmluZyBub2Rldl90bW8gbW9kdWxlICIKIAkJCQkJICJwYXJhbWV0ZXIgYmVjYXVzZSBkZXZsb3NzX3RtbyBpcyAiCiAJCQkJCSAic2V0LlxuIik7CiAJCXJldHVybiAwOwpAQCAtMTIxNSw2ICsxODQ1LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKy8qKgorICogbHBmY191cGRhdGVfcnBvcnRfZGV2bG9zc190bW86IFVwZGF0ZSBkZXYgbG9zcyB0bW8gdmFsdWUuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBVcGRhdGUgYWxsIHRoZSBuZGxwJ3MgZGV2IGxvc3MgdG1vIHdpdGggdGhlIHZwb3J0IGRldmxvc3MgdG1vIHZhbHVlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfdXBkYXRlX3Jwb3J0X2Rldmxvc3NfdG1vKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTEyMjksNiArMTg2NiwyMSBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIH0KIAorLyoqCisgKiBscGZjX25vZGV2X3Rtb19zZXQ6IFNldCB0aGUgdnBvcnQgbm9kZXYgdG1vIGFuZCBkZXZsb3NzIHRtbyB2YWx1ZXMuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAdmFsOiBjb250YWlucyB0aGUgdG1vIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdGhlIGRldmxvc3MgdG1vIGlzIGFscmVhZHkgc2V0IG9yIHRoZSB2cG9ydCBkZXYgbG9zcyB0bW8gaGFzIGNoYW5nZWQKKyAqIHRoZW4gYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIGFuZCB6ZXJvIGlzIHJldHVybmVkLgorICogRWxzZSBpZiB2YWwgaXMgaW4gcmFuZ2UgdGhlbiBub2RldiB0bW8gYW5kIGRldmxvc3MgdG1vIGFyZSBzZXQgdG8gdmFsLgorICogT3RoZXJ3aXNlIG5vZGV2IHRtbyBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgYWxyZWFkeSBzZXQgb3IgaWYgdmFsIGlzIGluIHJhbmdlCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfbm9kZXZfdG1vX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCiB7CkBAIC0xMjY5LDYgKzE5MjEsMjEgQEAKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChkZXZsb3NzX3RtbywgTFBGQ19ERUZfREVWTE9TU19UTU8sCiAJCSAgICAgIExQRkNfTUlOX0RFVkxPU1NfVE1PLCBMUEZDX01BWF9ERVZMT1NTX1RNTykKIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhkZXZsb3NzX3RtbykKKworLyoqCisgKiBscGZjX2Rldmxvc3NfdG1vX3NldDogU2V0cyB2cG9ydCBub2RldiB0bW8sIGRldmxvc3MgdG1vIHZhbHVlcywgY2hhbmdlZCBiaXQuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAdmFsOiBjb250YWlucyB0aGUgdG1vIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBzZXQgdGhlIHZwb3J0IG5vZGV2IHRtbywKKyAqIGRldmxvc3MgdG1vLCBhbHNvIHNldCB0aGUgdnBvcnQgZGV2IGxvc3MgdG1vIGNoYW5nZWQgZmxhZy4KKyAqIEVsc2UgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBpcyBpbiByYW5nZQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Rldmxvc3NfdG1vX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCiB7CkBAIC0xMzY2LDEyICsyMDMzLDI3IEBACiAJCSAiUmVzdHJpY3QgdmlydHVhbCBwb3J0cyBsb2dpbiB0byByZW1vdGUgaW5pdGlhdG9ycy4iKTsKIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhyZXN0cmljdF9sb2dpbik7CiAKKy8qKgorICogbHBmY19yZXN0cmljdF9sb2dpbl9pbml0OiBTZXQgdGhlIHZwb3J0IHJlc3RyaWN0IGxvZ2luIGZsYWcuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAdmFsOiBjb250YWlucyB0aGUgcmVzdHJpY3QgbG9naW4gdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgbm90IGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBsb2cgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBhbmQgc2V0CisgKiB0aGUgdnBvcnQgcmVzdHJpY3QgbG9naW4gdG8gb25lLgorICogSWYgdGhlIHBvcnQgdHlwZSBpcyBwaHlzaWNhbCBjbGVhciB0aGUgcmVzdHJpY3QgbG9naW4gZmxhZyBhbmQgcmV0dXJuLgorICogRWxzZSBzZXQgdGhlIHJlc3RyaWN0IGxvZ2luIGZsYWcgdG8gdmFsLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBpcyBpbiByYW5nZQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3Jlc3RyaWN0X2xvZ2luX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQogewogCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSAiMDQ0OSBscGZjX3Jlc3RyaWN0X2xvZ2luIGF0dHJpYnV0ZSBjYW5ub3QgIgorCQkJCSAiMDQyMiBscGZjX3Jlc3RyaWN0X2xvZ2luIGF0dHJpYnV0ZSBjYW5ub3QgIgogCQkJCSAiYmUgc2V0IHRvICVkLCBhbGxvd2VkIHJhbmdlIGlzIFswLCAxXVxuIiwKIAkJCQkgdmFsKTsKIAkJdnBvcnQtPmNmZ19yZXN0cmljdF9sb2dpbiA9IDE7CkBAIC0xMzg1LDEyICsyMDY3LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19yZXN0cmljdF9sb2dpbl9zZXQ6IFNldCB0aGUgdnBvcnQgcmVzdHJpY3QgbG9naW4gZmxhZy4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEB2YWw6IGNvbnRhaW5zIHRoZSByZXN0cmljdCBsb2dpbiB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBub3QgaW4gYSB2YWxpZCByYW5nZSB0aGVuIGxvZyBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGFuZCBzZXQKKyAqIHRoZSB2cG9ydCByZXN0cmljdCBsb2dpbiB0byBvbmUuCisgKiBJZiB0aGUgcG9ydCB0eXBlIGlzIHBoeXNpY2FsIGFuZCB0aGUgdmFsIGlzIG5vdCB6ZXJvIGxvZyBhIGtlcm5lbAorICogZXJyb3IgbWVzc2FnZSwgY2xlYXIgdGhlIHJlc3RyaWN0IGxvZ2luIGZsYWcgYW5kIHJldHVybiB6ZXJvLgorICogRWxzZSBzZXQgdGhlIHJlc3RyaWN0IGxvZ2luIGZsYWcgdG8gdmFsLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBpcyBpbiByYW5nZQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3Jlc3RyaWN0X2xvZ2luX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCB2YWwpCiB7CiAJaWYgKHZhbCA8IDAgfHwgdmFsID4gMSkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDUwIGxwZmNfcmVzdHJpY3RfbG9naW4gYXR0cmlidXRlIGNhbm5vdCAiCisJCQkJICIwNDI1IGxwZmNfcmVzdHJpY3RfbG9naW4gYXR0cmlidXRlIGNhbm5vdCAiCiAJCQkJICJiZSBzZXQgdG8gJWQsIGFsbG93ZWQgcmFuZ2UgaXMgWzAsIDFdXG4iLAogCQkJCSB2YWwpOwogCQl2cG9ydC0+Y2ZnX3Jlc3RyaWN0X2xvZ2luID0gMTsKQEAgLTE0NDEsNiArMjEzOSwyMyBAQAogIyBTZXQgbG9vcCBtb2RlIGlmIHlvdSB3YW50IHRvIHJ1biBhcyBhbiBOTF9Qb3J0LiBWYWx1ZSByYW5nZSBpcyBbMCwweDZdLgogIyBEZWZhdWx0IHZhbHVlIGlzIDAuCiAqLworCisvKioKKyAqIGxwZmNfdG9wb2xvZ3lfc2V0OiBTZXQgdGhlIGFkYXB0ZXJzIHRvcG9sb2d5IGZpZWxkLgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKiBAdmFsOiB0b3BvbG9neSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gc2V0IHRoZSBhZGFwdGVyJ3MgdG9wb2xvZ3kgZmllbGQgYW5kCisgKiBpc3N1ZSBhIGxpcDsgaWYgdGhlIGxpcCBmYWlscyByZXNldCB0aGUgdG9wb2xvZ3kgdG8gdGhlIG9sZCB2YWx1ZS4KKyAqCisgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGluIHJhbmdlIGxvZyBhIGtlcm5lbCBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gYW4gZXJyb3IuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gaWYgdmFsIGlzIGluIHJhbmdlIGFuZCBsaXAgb2theQorICogbm9uLXplcm8gcmV0dXJuIHZhbHVlIGZyb20gbHBmY19pc3N1ZV9saXAoKQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3RvcG9sb2d5X3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpCiB7CkBAIC0xNDY5LDYgKzIxODQsMzM1IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY190b3BvbG9neSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCWxwZmNfdG9wb2xvZ3lfc2hvdywgbHBmY190b3BvbG9neV9zdG9yZSk7CiAKKworLyoqCisgKiBscGZjX3N0YXRfZGF0YV9jdHJsX3N0b3JlOiB3cml0ZSBjYWxsIGJhY2sgZm9yIGxwZmNfc3RhdF9kYXRhX2N0cmwKKyAqICBzeXNmcyBmaWxlLgorICogQGRldjogUG9pbnRlciB0byBjbGFzcyBkZXZpY2UuCisgKiBAYnVmOiBEYXRhIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXQgY2FsbGVkIHdoZW4gYW4gdXNlciB3cml0ZSB0byB0aGUgbHBmY19zdGF0X2RhdGFfY3RybAorICogc3lzZnMgZmlsZS4gVGhpcyBmdW5jdGlvbiBwYXJzZSB0aGUgY29tbWFuZCB3cml0dGVuIHRvIHRoZSBzeXNmcyBmaWxlCisgKiBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uIFRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIGZvciBjb250cm9sbGluZworICogZHJpdmVyIHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbi4KKyAqIEZvbGxvd2luZyBhcmUgdGhlIGNvbW1hbmQgdGhpcyBmdW5jdGlvbiBoYW5kbGVzLgorICoKKyAqICAgIHNldGJ1Y2tldCA8YnVja2V0X3R5cGU+IDxiYXNlPiA8c3RlcD4KKyAqCQkJICAgICAgID0gU2V0IHRoZSBsYXRlbmN5IGJ1Y2tldHMuCisgKiAgICBkZXN0cm95YnVja2V0ICAgICAgICAgICAgPSBkZXN0cm95IGFsbCB0aGUgYnVja2V0cy4KKyAqICAgIHN0YXJ0ICAgICAgICAgICAgICAgICAgICA9IHN0YXJ0IGRhdGEgY29sbGVjdGlvbgorICogICAgc3RvcCAgICAgICAgICAgICAgICAgICAgID0gc3RvcCBkYXRhIGNvbGxlY3Rpb24KKyAqICAgIHJlc2V0ICAgICAgICAgICAgICAgICAgICA9IHJlc2V0IHRoZSBjb2xsZWN0ZWQgZGF0YQorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfc3RhdF9kYXRhX2N0cmxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisjZGVmaW5lIExQRkNfTUFYX0RBVEFfQ1RSTF9MRU4gMTAyNAorCXN0YXRpYyBjaGFyIGJ1Y2tldF9kYXRhW0xQRkNfTUFYX0RBVEFfQ1RSTF9MRU5dOworCXVuc2lnbmVkIGxvbmcgaTsKKwljaGFyICpzdHJfcHRyLCAqdG9rZW47CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IFNjc2lfSG9zdCAqdl9zaG9zdDsKKwljaGFyICpidWNrZXRfdHlwZV9zdHIsICpiYXNlX3N0ciwgKnN0ZXBfc3RyOworCXVuc2lnbmVkIGxvbmcgYmFzZSwgc3RlcCwgYnVja2V0X3R5cGU7CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAic2V0YnVja2V0Iiwgc3RybGVuKCJzZXRidWNrZXQiKSkpIHsKKwkJaWYgKHN0cmxlbihidWYpID4gTFBGQ19NQVhfREFUQV9DVFJMX0xFTikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN0cmNweShidWNrZXRfZGF0YSwgYnVmKTsKKwkJc3RyX3B0ciA9ICZidWNrZXRfZGF0YVswXTsKKwkJLyogSWdub3JlIHRoaXMgdG9rZW4gLSB0aGlzIGlzIGNvbW1hbmQgdG9rZW4gKi8KKwkJdG9rZW4gPSBzdHJzZXAoJnN0cl9wdHIsICJcdCAiKTsKKwkJaWYgKCF0b2tlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWJ1Y2tldF90eXBlX3N0ciA9IHN0cnNlcCgmc3RyX3B0ciwgIlx0ICIpOworCQlpZiAoIWJ1Y2tldF90eXBlX3N0cikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghc3RybmNtcChidWNrZXRfdHlwZV9zdHIsICJsaW5lYXIiLCBzdHJsZW4oImxpbmVhciIpKSkKKwkJCWJ1Y2tldF90eXBlID0gTFBGQ19MSU5FQVJfQlVDS0VUOworCQllbHNlIGlmICghc3RybmNtcChidWNrZXRfdHlwZV9zdHIsICJwb3dlcjIiLCBzdHJsZW4oInBvd2VyMiIpKSkKKwkJCWJ1Y2tldF90eXBlID0gTFBGQ19QT1dFUjJfQlVDS0VUOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQliYXNlX3N0ciA9IHN0cnNlcCgmc3RyX3B0ciwgIlx0ICIpOworCQlpZiAoIWJhc2Vfc3RyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJhc2UgPSBzaW1wbGVfc3RydG91bChiYXNlX3N0ciwgTlVMTCwgMCk7CisKKwkJc3RlcF9zdHIgPSBzdHJzZXAoJnN0cl9wdHIsICJcdCAiKTsKKwkJaWYgKCFzdGVwX3N0cikKKwkJCXJldHVybiAtRUlOVkFMOworCQlzdGVwID0gc2ltcGxlX3N0cnRvdWwoc3RlcF9zdHIsIE5VTEwsIDApOworCQlpZiAoIXN0ZXApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBCbG9jayB0aGUgZGF0YSBjb2xsZWN0aW9uIGZvciBldmVyeSB2cG9ydCAqLworCQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCQlpZiAodnBvcnRzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJdl9zaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycSh2X3Nob3N0LT5ob3N0X2xvY2spOworCQkJLyogQmxvY2sgYW5kIHJlc2V0IGRhdGEgY29sbGVjdGlvbiAqLworCQkJdnBvcnRzW2ldLT5zdGF0X2RhdGFfYmxvY2tlZCA9IDE7CisJCQlpZiAodnBvcnRzW2ldLT5zdGF0X2RhdGFfZW5hYmxlZCkKKwkJCQlscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YSh2cG9ydHNbaV0pOworCQkJc3Bpbl91bmxvY2tfaXJxKHZfc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKworCQkvKiBTZXQgdGhlIGJ1Y2tldCBhdHRyaWJ1dGVzICovCisJCXBoYmEtPmJ1Y2tldF90eXBlID0gYnVja2V0X3R5cGU7CisJCXBoYmEtPmJ1Y2tldF9iYXNlID0gYmFzZTsKKwkJcGhiYS0+YnVja2V0X3N0ZXAgPSBzdGVwOworCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQl2X3Nob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisKKwkJCS8qIFVuYmxvY2sgZGF0YSBjb2xsZWN0aW9uICovCisJCQlzcGluX2xvY2tfaXJxKHZfc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydHNbaV0tPnN0YXRfZGF0YV9ibG9ja2VkID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycSh2X3Nob3N0LT5ob3N0X2xvY2spOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwl9CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAiZGVzdHJveWJ1Y2tldCIsIHN0cmxlbigiZGVzdHJveWJ1Y2tldCIpKSkgeworCQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCQlpZiAodnBvcnRzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJdl9zaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0c1tpXS0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAxOworCQkJbHBmY19mcmVlX2J1Y2tldCh2cG9ydCk7CisJCQl2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgPSAwOworCQkJdnBvcnRzW2ldLT5zdGF0X2RhdGFfYmxvY2tlZCA9IDA7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwkJcGhiYS0+YnVja2V0X3R5cGUgPSBMUEZDX05PX0JVQ0tFVDsKKwkJcGhiYS0+YnVja2V0X2Jhc2UgPSAwOworCQlwaGJhLT5idWNrZXRfc3RlcCA9IDA7CisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwl9CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAic3RhcnQiLCBzdHJsZW4oInN0YXJ0IikpKSB7CisJCS8qIElmIG5vIGJ1Y2tldHMgY29uZmlndXJlZCByZXR1cm4gZXJyb3IgKi8KKwkJaWYgKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTk9fQlVDS0VUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWlmICh2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXJldHVybiBzdHJsZW4oYnVmKTsKKwkJfQorCQlscGZjX2FsbG9jX2J1Y2tldCh2cG9ydCk7CisJCXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCA9IDE7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKworCWlmICghc3RybmNtcChidWYsICJzdG9wIiwgc3RybGVuKCJzdG9wIikpKSB7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWlmICh2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgPT0gMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJcmV0dXJuIHN0cmxlbihidWYpOworCQl9CisJCWxwZmNfZnJlZV9idWNrZXQodnBvcnQpOworCQl2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgPSAwOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwl9CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAicmVzZXQiLCBzdHJsZW4oInJlc2V0IikpKSB7CisJCWlmICgocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19OT19CVUNLRVQpCisJCQl8fCAhdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkKQorCQkJcmV0dXJuIHN0cmxlbihidWYpOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl2cG9ydC0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAxOworCQlscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YSh2cG9ydCk7CisJCXZwb3J0LT5zdGF0X2RhdGFfYmxvY2tlZCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCisvKioKKyAqIGxwZmNfc3RhdF9kYXRhX2N0cmxfc2hvdzogUmVhZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAqICAgbHBmY19zdGF0X2RhdGFfY3RybCBzeXNmcyBmaWxlLgorICogQGRldjogUG9pbnRlciB0byBjbGFzcyBkZXZpY2Ugb2JqZWN0LgorICogQGJ1ZjogRGF0YSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgcmVhZCBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yCisgKiBscGZjX3N0YXRfZGF0YV9jdHJsIHN5c2ZzIGZpbGUuIFRoaXMgZnVuY3Rpb24gcmVwb3J0IHRoZQorICogY3VycmVudCBzdGF0aXN0aWNhbCBkYXRhIGNvbGxlY3Rpb24gc3RhdGUuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19zdGF0X2RhdGFfY3RybF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCWludCBpbmRleCA9IDA7CisJaW50IGk7CisJY2hhciAqYnVja2V0X3R5cGU7CisJdW5zaWduZWQgbG9uZyBidWNrZXRfdmFsdWU7CisKKwlzd2l0Y2ggKHBoYmEtPmJ1Y2tldF90eXBlKSB7CisJY2FzZSBMUEZDX0xJTkVBUl9CVUNLRVQ6CisJCWJ1Y2tldF90eXBlID0gImxpbmVhciI7CisJCWJyZWFrOworCWNhc2UgTFBGQ19QT1dFUjJfQlVDS0VUOgorCQlidWNrZXRfdHlwZSA9ICJwb3dlcjIiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlidWNrZXRfdHlwZSA9ICJObyBCdWNrZXQiOworCQlicmVhazsKKwl9CisKKwlzcHJpbnRmKCZidWZbaW5kZXhdLCAiU3RhdGlzdGljYWwgRGF0YSBlbmFibGVkIDolZCwgIgorCQkiYmxvY2tlZCA6JWQsIEJ1Y2tldCB0eXBlIDolcywgQnVja2V0IGJhc2UgOiVkLCIKKwkJIiBCdWNrZXQgc3RlcCA6JWRcbkxhdGVuY3kgUmFuZ2VzIDoiLAorCQl2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQsIHZwb3J0LT5zdGF0X2RhdGFfYmxvY2tlZCwKKwkJYnVja2V0X3R5cGUsIHBoYmEtPmJ1Y2tldF9iYXNlLCBwaGJhLT5idWNrZXRfc3RlcCk7CisJaW5kZXggPSBzdHJsZW4oYnVmKTsKKwlpZiAocGhiYS0+YnVja2V0X3R5cGUgIT0gTFBGQ19OT19CVUNLRVQpIHsKKwkJZm9yIChpID0gMDsgaSA8IExQRkNfTUFYX0JVQ0tFVF9DT1VOVDsgaSsrKSB7CisJCQlpZiAocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19MSU5FQVJfQlVDS0VUKQorCQkJCWJ1Y2tldF92YWx1ZSA9IHBoYmEtPmJ1Y2tldF9iYXNlICsKKwkJCQkJcGhiYS0+YnVja2V0X3N0ZXAgKiBpOworCQkJZWxzZQorCQkJCWJ1Y2tldF92YWx1ZSA9IHBoYmEtPmJ1Y2tldF9iYXNlICsKKwkJCQkoMSA8PCBpKSAqIHBoYmEtPmJ1Y2tldF9zdGVwOworCisJCQlpZiAoaW5kZXggKyAxMCA+IFBBR0VfU0laRSkKKwkJCQlicmVhazsKKwkJCXNwcmludGYoJmJ1ZltpbmRleF0sICIlMDhsZCAiLCBidWNrZXRfdmFsdWUpOworCQkJaW5kZXggPSBzdHJsZW4oYnVmKTsKKwkJfQorCX0KKwlzcHJpbnRmKCZidWZbaW5kZXhdLCAiXG4iKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKKy8qCisgKiBTeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgc3RhdGlzdGljYWwgZGF0YSBjb2xsZWN0aW9uLgorICovCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY19zdGF0X2RhdGFfY3RybCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIGxwZmNfc3RhdF9kYXRhX2N0cmxfc2hvdywgbHBmY19zdGF0X2RhdGFfY3RybF9zdG9yZSk7CisKKy8qCisgKiBscGZjX2RydnJfc3RhdF9kYXRhOiBzeXNmcyBhdHRyIHRvIGdldCBkcml2ZXIgc3RhdGlzdGljYWwgZGF0YS4KKyAqLworCisvKgorICogRWFjaCBCdWNrZXQgdGFrZXMgMTEgY2hhcmFjdGVycyBhbmQgMSBuZXcgbGluZSArIDE3IGJ5dGVzIFdXTgorICogZm9yIGVhY2ggdGFyZ2V0LgorICovCisjZGVmaW5lIFNUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQoTlVNX0JVQ0tFVFMpICgoTlVNX0JVQ0tFVFMpICogMTEgKyAxOCkKKyNkZWZpbmUgTUFYX1NUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQgXAorCVNUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQoTFBGQ19NQVhfQlVDS0VUX0NPVU5UKQorCisKKy8qKgorICogc3lzZnNfZHJ2cl9zdGF0X2RhdGFfcmVhZDogUmVhZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbHBmY19kcnZyX3N0YXRfZGF0YQorICogIHN5c2ZzIGF0dHJpYnV0ZS4KKyAqIEBrb2JqOiBQb2ludGVyIHRvIHRoZSBrZXJuZWwgb2JqZWN0CisgKiBAYmluX2F0dHI6IEF0dHJpYnV0ZSBvYmplY3QKKyAqIEBidWZmOiBCdWZmZXIgcG9pbnRlcgorICogQG9mZjogRmlsZSBvZmZzZXQKKyAqIEBjb3VudDogQnVmZmVyIHNpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZWFkIGNhbGwgYmFjayBmdW5jdGlvbiBmb3IgbHBmY19kcnZyX3N0YXRfZGF0YQorICogc3lzZnMgZmlsZS4gVGhpcyBmdW5jdGlvbiBleHBvcnQgdGhlIHN0YXRpc3RpY2FsIGRhdGEgdG8gdXNlcgorICogYXBwbGljYXRpb25zLgorICoqLworc3RhdGljIHNzaXplX3QKK3N5c2ZzX2RydnJfc3RhdF9kYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsCisJCWtvYmopOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCWludCBpID0gMCwgaW5kZXggPSAwOworCXVuc2lnbmVkIGxvbmcgbnBvcnRfaW5kZXg7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCW5wb3J0X2luZGV4ID0gKHVuc2lnbmVkIGxvbmcpb2ZmIC8KKwkJTUFYX1NUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQ7CisKKwlpZiAoIXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCB8fCB2cG9ydC0+c3RhdF9kYXRhX2Jsb2NrZWQKKwkJfHwgKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTk9fQlVDS0VUKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSB8fCAhbmRscC0+bGF0X2RhdGEpCisJCQljb250aW51ZTsKKworCQlpZiAobnBvcnRfaW5kZXggPiAwKSB7CisJCQlucG9ydF9pbmRleC0tOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKGluZGV4ICsgTUFYX1NUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQpCisJCQk+IGNvdW50KQorCQkJYnJlYWs7CisKKwkJaWYgKCFuZGxwLT5sYXRfZGF0YSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFByaW50IHRoZSBXV04gKi8KKwkJc3ByaW50ZigmYnVmW2luZGV4XSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4OiIsCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bMF0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bMV0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bMl0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bM10sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bNF0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bNV0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bNl0sCisJCQluZGxwLT5ubHBfcG9ydG5hbWUudS53d25bN10pOworCisJCWluZGV4ID0gc3RybGVuKGJ1Zik7CisKKwkJZm9yIChpID0gMDsgaSA8IExQRkNfTUFYX0JVQ0tFVF9DT1VOVDsgaSsrKSB7CisJCQlzcHJpbnRmKCZidWZbaW5kZXhdLCAiJTAxMHUsIiwKKwkJCQluZGxwLT5sYXRfZGF0YVtpXS5jbWRfY291bnQpOworCQkJaW5kZXggPSBzdHJsZW4oYnVmKTsKKwkJfQorCQlzcHJpbnRmKCZidWZbaW5kZXhdLCAiXG4iKTsKKwkJaW5kZXggPSBzdHJsZW4oYnVmKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHN5c2ZzX2RydnJfc3RhdF9kYXRhX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImxwZmNfZHJ2cl9zdGF0X2RhdGEiLAorCQkubW9kZSA9IFNfSVJVU1IsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBMUEZDX01BWF9UQVJHRVQgKiBNQVhfU1RBVF9EQVRBX1NJWkVfUEVSX1RBUkdFVCwKKwkucmVhZCA9IHN5c2ZzX2RydnJfc3RhdF9kYXRhX3JlYWQsCisJLndyaXRlID0gTlVMTCwKK307CisKIC8qCiAjIGxwZmNfbGlua19zcGVlZDogTGluayBzcGVlZCBzZWxlY3Rpb24gZm9yIGluaXRpYWxpemluZyB0aGUgRmlicmUgQ2hhbm5lbAogIyBjb25uZWN0aW9uLgpAQCAtMTQ3OSw2ICsyNTIzLDI0IEBACiAjICAgICAgIDggID0gOCBHaWdhYmF1ZAogIyBWYWx1ZSByYW5nZSBpcyBbMCw4XS4gRGVmYXVsdCB2YWx1ZSBpcyAwLgogKi8KKworLyoqCisgKiBscGZjX2xpbmtfc3BlZWRfc2V0OiBTZXQgdGhlIGFkYXB0ZXJzIGxpbmsgc3BlZWQuCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqIEB2YWw6IGxpbmsgc3BlZWQgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgaW4gYSB2YWxpZCByYW5nZSB0aGVuIHNldCB0aGUgYWRhcHRlcidzIGxpbmsgc3BlZWQgZmllbGQgYW5kCisgKiBpc3N1ZSBhIGxpcDsgaWYgdGhlIGxpcCBmYWlscyByZXNldCB0aGUgbGluayBzcGVlZCB0byB0aGUgb2xkIHZhbHVlLgorICoKKyAqIE5vdGVzOgorICogSWYgdGhlIHZhbHVlIGlzIG5vdCBpbiByYW5nZSBsb2cgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGVycm9yLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBpcyBpbiByYW5nZSBhbmQgbGlwIG9rYXkuCisgKiBub24temVybyByZXR1cm4gdmFsdWUgZnJvbSBscGZjX2lzc3VlX2xpcCgpCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfbGlua19zcGVlZF9zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKQogewpAQCAtMTUxMyw2ICsyNTc1LDIzIEBACiBtb2R1bGVfcGFyYW0obHBmY19saW5rX3NwZWVkLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhscGZjX2xpbmtfc3BlZWQsICJTZWxlY3QgbGluayBzcGVlZCIpOwogbHBmY19wYXJhbV9zaG93KGxpbmtfc3BlZWQpCisKKy8qKgorICogbHBmY19saW5rX3NwZWVkX2luaXQ6IFNldCB0aGUgYWRhcHRlcnMgbGluayBzcGVlZC4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICogQHZhbDogbGluayBzcGVlZCB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gc2V0IHRoZSBhZGFwdGVyJ3MgbGluayBzcGVlZCBmaWVsZC4KKyAqCisgKiBOb3RlczoKKyAqIElmIHRoZSB2YWx1ZSBpcyBub3QgaW4gcmFuZ2UgbG9nIGEga2VybmVsIGVycm9yIG1lc3NhZ2UsIGNsZWFyIHRoZSBsaW5rCisgKiBzcGVlZCBhbmQgcmV0dXJuIGFuIGVycm9yLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBzYXZlZC4KKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19saW5rX3NwZWVkX2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKQogewpAQCAtMTUyMiw3ICsyNjAxLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkiMDQ1NCBscGZjX2xpbmtfc3BlZWQgYXR0cmlidXRlIGNhbm5vdCAiCisJCQkiMDQwNSBscGZjX2xpbmtfc3BlZWQgYXR0cmlidXRlIGNhbm5vdCAiCiAJCQkiYmUgc2V0IHRvICVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgIgogCQkJIlsiTFBGQ19MSU5LX1NQRUVEX1NUUklORyJdXG4iLCB2YWwpOwogCXBoYmEtPmNmZ19saW5rX3NwZWVkID0gMDsKQEAgLTE1NDgsNiArMjYyNyw0OCBAQAogCQkgICAiVXNlIEFESVNDIG9uIHJlZGlzY292ZXJ5IHRvIGF1dGhlbnRpY2F0ZSBGQ1AgZGV2aWNlcyIpOwogCiAvKgorIyBscGZjX21heF9zY3NpY21wbF90aW1lOiBVc2Ugc2NzaSBjb21tYW5kIGNvbXBsZXRpb24gdGltZSB0byBjb250cm9sIEkvTyBxdWV1ZQorIyBkZXB0aC4gRGVmYXVsdCB2YWx1ZSBpcyAwLiBXaGVuIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyB6ZXJvIHRoZQorIyBTQ1NJIGNvbW1hbmQgY29tcGxldGlvbiB0aW1lIGlzIG5vdCB1c2VkIGZvciBjb250cm9sbGluZyBJL08gcXVldWUgZGVwdGguIFdoZW4KKyMgdGhlIHBhcmFtZXRlciBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSwgdGhlIEkvTyBxdWV1ZSBkZXB0aCBpcyBjb250cm9sbGVkCisjIHRvIGxpbWl0IHRoZSBJL08gY29tcGxldGlvbiB0aW1lIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuCisjIFRoZSB2YWx1ZSBpcyBzZXQgaW4gbWlsbGlzZWNvbmRzLgorKi8KK3N0YXRpYyBpbnQgbHBmY19tYXhfc2NzaWNtcGxfdGltZTsKK21vZHVsZV9wYXJhbShscGZjX21heF9zY3NpY21wbF90aW1lLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhscGZjX21heF9zY3NpY21wbF90aW1lLAorCSJVc2UgY29tbWFuZCBjb21wbGV0aW9uIHRpbWUgdG8gY29udHJvbCBxdWV1ZSBkZXB0aCIpOworbHBmY192cG9ydF9wYXJhbV9zaG93KG1heF9zY3NpY21wbF90aW1lKTsKK2xwZmNfdnBvcnRfcGFyYW1faW5pdChtYXhfc2NzaWNtcGxfdGltZSwgMCwgMCwgNjAwMDApOworc3RhdGljIGludAorbHBmY19tYXhfc2NzaWNtcGxfdGltZV9zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgKm5leHRfbmRscDsKKworCWlmICh2YWwgPT0gdnBvcnQtPmNmZ19tYXhfc2NzaWNtcGxfdGltZSkKKwkJcmV0dXJuIDA7CisJaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gNjAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2cG9ydC0+Y2ZnX21heF9zY3NpY21wbF90aW1lID0gdmFsOworCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQkJY29udGludWU7CisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9VTlVTRURfTk9ERSkKKwkJCWNvbnRpbnVlOworCQluZGxwLT5jbWRfcWRlcHRoID0gTFBGQ19NQVhfVEdUX1FERVBUSDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXJldHVybiAwOworfQorbHBmY192cG9ydF9wYXJhbV9zdG9yZShtYXhfc2NzaWNtcGxfdGltZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobHBmY19tYXhfc2NzaWNtcGxfdGltZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIGxwZmNfbWF4X3Njc2ljbXBsX3RpbWVfc2hvdywKKwkJICAgbHBmY19tYXhfc2NzaWNtcGxfdGltZV9zdG9yZSk7CisKKy8qCiAjIGxwZmNfYWNrMDogVXNlIEFDSzAsIGluc3RlYWQgb2YgQUNLMSBmb3IgY2xhc3MgMiBhY2tub3dsZWRnZW1lbnQuIFZhbHVlCiAjIHJhbmdlIGlzIFswLDFdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCiAqLwpAQCAtMTYyMywxMiArMjc0NCwxMiBAQAogLyoKICMgbHBmY191c2VfbXNpOiBVc2UgTVNJIChNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMpIGluIHN5c3RlbXMgdGhhdAogIwkJc3VwcG9ydCB0aGlzIGZlYXR1cmUKLSMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQgKGRlZmF1bHQpCisjICAgICAgIDAgID0gTVNJIGRpc2FibGVkCiAjICAgICAgIDEgID0gTVNJIGVuYWJsZWQKLSMJMiAgPSBNU0ktWCBlbmFibGVkCi0jIFZhbHVlIHJhbmdlIGlzIFswLDJdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisjICAgICAgIDIgID0gTVNJLVggZW5hYmxlZCAoZGVmYXVsdCkKKyMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMi4KICovCi1MUEZDX0FUVFJfUih1c2VfbXNpLCAwLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgorTFBGQ19BVFRSX1IodXNlX21zaSwgMiwgMCwgMiwgIlVzZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKDEpIG9yICIKIAkgICAgIk1TSS1YICgyKSwgaWYgcG9zc2libGUiKTsKIAogLyoKQEAgLTE2NjgsNiArMjc4OSw3IEBACiAJJmRldl9hdHRyX29wdGlvbl9yb21fdmVyc2lvbiwKIAkmZGV2X2F0dHJfbGlua19zdGF0ZSwKIAkmZGV2X2F0dHJfbnVtX2Rpc2NvdmVyZWRfcG9ydHMsCisJJmRldl9hdHRyX21lbmxvX21nbXRfbW9kZSwKIAkmZGV2X2F0dHJfbHBmY19kcnZyX3ZlcnNpb24sCiAJJmRldl9hdHRyX2xwZmNfdGVtcF9zZW5zb3IsCiAJJmRldl9hdHRyX2xwZmNfbG9nX3ZlcmJvc2UsCkBAIC0xNzA5LDYgKzI4MzEsOCBAQAogCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9oYmFfcmVzZXQsCiAJJmRldl9hdHRyX2xwZmNfZW5hYmxlX2hiYV9oZWFydGJlYXQsCiAJJmRldl9hdHRyX2xwZmNfc2dfc2VnX2NudCwKKwkmZGV2X2F0dHJfbHBmY19tYXhfc2NzaWNtcGxfdGltZSwKKwkmZGV2X2F0dHJfbHBmY19zdGF0X2RhdGFfY3RybCwKIAlOVUxMLAogfTsKIApAQCAtMTczMSw5ICsyODU1LDI5IEBACiAJJmRldl9hdHRyX25wb3J0X2V2dF9jbnQsCiAJJmRldl9hdHRyX25waXZfaW5mbywKIAkmZGV2X2F0dHJfbHBmY19lbmFibGVfZGFfaWQsCisJJmRldl9hdHRyX2xwZmNfbWF4X3Njc2ljbXBsX3RpbWUsCisJJmRldl9hdHRyX2xwZmNfc3RhdF9kYXRhX2N0cmwsCiAJTlVMTCwKIH07CiAKKy8qKgorICogc3lzZnNfY3RscmVnX3dyaXRlOiBXcml0ZSBtZXRob2QgZm9yIHdyaXRpbmcgdG8gY3RscmVnLgorICogQGtvYmo6IGtlcm5lbCBrb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGtlcm5lbCBjbGFzcyBkZXZpY2UuCisgKiBAYmluX2F0dHI6IGtlcm5lbCBhdHRyaWJ1dGVzIHBhc3NlZCB0byB1cy4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGFkYXB0ZXIgSU9SRUcgc3BhY2UuCisgKiBAb2ZmOiBvZmZzZXQgaW50byBidWZmZXIgdG8gYmVnaW5uaW5nIG9mIGRhdGEuCisgKiBAY291bnQ6IGJ5dGVzIHRvIHRyYW5zZmVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWNjZXNzZWQgdmlhIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3R4eHgvY3RscmVnLgorICogVXNlcyB0aGUgYWRhcHRlciBpbyBjb250cm9sIHJlZ2lzdGVycyB0byBzZW5kIGJ1ZiBjb250ZW50cyB0byB0aGUgYWRhcHRlci4KKyAqCisgKiBSZXR1cm5zOgorICogLUVSQU5HRSBvZmYgYW5kIGNvdW50IGNvbWJvIG91dCBvZiByYW5nZQorICogLUVJTlZBTCBvZmYsIGNvdW50IG9yIGJ1ZmYgYWRkcmVzcyBpbnZhbGlkCisgKiAtRVBFUk0gYWRhcHRlciBpcyBvZmZsaW5lCisgKiB2YWx1ZSBvZiBjb3VudCwgYnVmIGNvbnRlbnRzIHdyaXR0ZW4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBzeXNmc19jdGxyZWdfd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCkBAIC0xNzY2LDYgKzI5MTAsMjMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKKy8qKgorICogc3lzZnNfY3RscmVnX3JlYWQ6IFJlYWQgbWV0aG9kIGZvciByZWFkaW5nIGZyb20gY3RscmVnLgorICogQGtvYmo6IGtlcm5lbCBrb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGtlcm5lbCBjbGFzcyBkZXZpY2UuCisgKiBAYmluX2F0dHI6IGtlcm5lbCBhdHRyaWJ1dGVzIHBhc3NlZCB0byB1cy4KKyAqIEBidWY6IGlmIHN1Y2Nlc2Z1bCBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoZSBhZGFwdGVyIElPUkVHIHNwYWNlLgorICogQG9mZjogb2Zmc2V0IGludG8gYnVmZmVyIHRvIGJlZ2lubmluZyBvZiBkYXRhLgorICogQGNvdW50OiBieXRlcyB0byB0cmFuc2Zlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFjY2Vzc2VkIHZpYSAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0eHh4L2N0bHJlZy4KKyAqIFVzZXMgdGhlIGFkYXB0ZXIgaW8gY29udHJvbCByZWdpc3RlcnMgdG8gcmVhZCBkYXRhIGludG8gYnVmLgorICoKKyAqIFJldHVybnM6CisgKiAtRVJBTkdFIG9mZiBhbmQgY291bnQgY29tYm8gb3V0IG9mIHJhbmdlCisgKiAtRUlOVkFMIG9mZiwgY291bnQgb3IgYnVmZiBhZGRyZXNzIGludmFsaWQKKyAqIHZhbHVlIG9mIGNvdW50LCBidWYgY29udGVudHMgcmVhZAorICoqLwogc3RhdGljIHNzaXplX3QKIHN5c2ZzX2N0bHJlZ19yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCSAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCkBAIC0xODEwLDcgKzI5NzEsMTAgQEAKIAkud3JpdGUgPSBzeXNmc19jdGxyZWdfd3JpdGUsCiB9OwogCi0KKy8qKgorICogc3lzZnNfbWJveF9pZGxlOiBmcmVlcyB0aGUgc3lzZnMgbWFpbGJveC4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyCisgKiovCiBzdGF0aWMgdm9pZAogc3lzZnNfbWJveF9pZGxlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE4MjQsNiArMjk4OCwyNyBAQAogCX0KIH0KIAorLyoqCisgKiBzeXNmc19tYm94X3dyaXRlOiBXcml0ZSBtZXRob2QgZm9yIHdyaXRpbmcgaW5mb3JtYXRpb24gdmlhIG1ib3guCisgKiBAa29iajoga2VybmVsIGtvYmplY3QgdGhhdCBjb250YWlucyB0aGUga2VybmVsIGNsYXNzIGRldmljZS4KKyAqIEBiaW5fYXR0cjoga2VybmVsIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHVzLgorICogQGJ1ZjogY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byBzeXNmcyBtYm94LgorICogQG9mZjogb2Zmc2V0IGludG8gYnVmZmVyIHRvIGJlZ2lubmluZyBvZiBkYXRhLgorICogQGNvdW50OiBieXRlcyB0byB0cmFuc2Zlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFjY2Vzc2VkIHZpYSAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0eHh4L21ib3guCisgKiBVc2VzIHRoZSBzeXNmcyBtYm94IHRvIHNlbmQgYnVmIGNvbnRlbnRzIHRvIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybnM6CisgKiAtRVJBTkdFIG9mZiBhbmQgY291bnQgY29tYm8gb3V0IG9mIHJhbmdlCisgKiAtRUlOVkFMIG9mZiwgY291bnQgb3IgYnVmZiBhZGRyZXNzIGludmFsaWQKKyAqIHplcm8gaWYgY291bnQgaXMgemVybworICogLUVQRVJNIGFkYXB0ZXIgaXMgb2ZmbGluZQorICogLUVOT01FTSBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbWFpbCBib3gKKyAqIC1FQUdBSU4gb2Zmc2V0LCBzdGF0ZSBvciBtYm94IGlzIE5VTEwKKyAqIGNvdW50IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZAorICoqLwogc3RhdGljIHNzaXplX3QKIHN5c2ZzX21ib3hfd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQpAQCAtMTg3OCw2ICszMDYzLDI5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCisvKioKKyAqIHN5c2ZzX21ib3hfcmVhZDogUmVhZCBtZXRob2QgZm9yIHJlYWRpbmcgaW5mb3JtYXRpb24gdmlhIG1ib3guCisgKiBAa29iajoga2VybmVsIGtvYmplY3QgdGhhdCBjb250YWlucyB0aGUga2VybmVsIGNsYXNzIGRldmljZS4KKyAqIEBiaW5fYXR0cjoga2VybmVsIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHVzLgorICogQGJ1ZjogY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgcmVhZCBmcm9tIHN5c2ZzIG1ib3guCisgKiBAb2ZmOiBvZmZzZXQgaW50byBidWZmZXIgdG8gYmVnaW5uaW5nIG9mIGRhdGEuCisgKiBAY291bnQ6IGJ5dGVzIHRvIHRyYW5zZmVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWNjZXNzZWQgdmlhIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3R4eHgvbWJveC4KKyAqIFVzZXMgdGhlIHN5c2ZzIG1ib3ggdG8gcmVjZWl2ZSBkYXRhIGZyb20gdG8gdGhlIGFkYXB0ZXIuCisgKgorICogUmV0dXJuczoKKyAqIC1FUkFOR0Ugb2ZmIGdyZWF0ZXIgdGhhbiBtYWlsYm94IGNvbW1hbmQgc2l6ZQorICogLUVJTlZBTCBvZmYsIGNvdW50IG9yIGJ1ZmYgYWRkcmVzcyBpbnZhbGlkCisgKiB6ZXJvIGlmIG9mZiBhbmQgY291bnQgYXJlIHplcm8KKyAqIC1FQUNDRVMgYWRhcHRlciBvdmVyIHRlbXAKKyAqIC1FUEVSTSBnYXJiYWdlIGNhbiB2YWx1ZSB0byBjYXRjaCBhIG11bHRpdHVkZSBvZiBlcnJvcnMKKyAqIC1FQUdBSU4gbWFuYWdlbWVudCBJTyBub3QgcGVybWl0dGVkLCBzdGF0ZSBvciBvZmYgZXJyb3IKKyAqIC1FVElNRSBtYWlsYm94IHRpbWVvdXQKKyAqIC1FTk9ERVYgbWFpbGJveCBlcnJvcgorICogY291bnQgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkCisgKiovCiBzdGF0aWMgc3NpemVfdAogc3lzZnNfbWJveF9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQpAQCAtMTk1NCw2ICszMTYyLDggQEAKIAkJY2FzZSBNQlhfREVMX0xEX0VOVFJZOgogCQljYXNlIE1CWF9TRVRfVkFSSUFCTEU6CiAJCWNhc2UgTUJYX1dSSVRFX1dXTjoKKwkJY2FzZSBNQlhfUE9SVF9DQVBBQklMSVRJRVM6CisJCWNhc2UgTUJYX1BPUlRfSU9WX0NPTlRST0w6CiAJCQlicmVhazsKIAkJY2FzZSBNQlhfUkVBRF9TUEFSTTY0OgogCQljYXNlIE1CWF9SRUFEX0xBOgpAQCAtMTk3OCwxNyArMzE4OCwxNSBAQAogCQkvKiBJZiBIQkEgZW5jb3VudGVyZWQgYW4gZXJyb3IgYXR0ZW50aW9uLCBhbGxvdyBvbmx5IERVTVAKIAkJICogb3IgUkVTVEFSVCBtYWlsYm94IGNvbW1hbmRzIHVudGlsIHRoZSBIQkEgaXMgcmVzdGFydGVkLgogCQkgKi8KLQkJaWYgKChwaGJhLT5wcG9ydC0+c3RvcHBlZCkgJiYKLQkJCShwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0KLQkJCQlNQlhfRFVNUF9NRU1PUlkgJiYKLQkJCSBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0KLQkJCQlNQlhfUkVTVEFSVCAmJgotCQkJIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPQotCQkJCU1CWF9XUklURV9WUEFSTVMpKSB7Ci0JCQlzeXNmc19tYm94X2lkbGUocGhiYSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQorCQlpZiAocGhiYS0+cHBvcnQtPnN0b3BwZWQgJiYKKwkJICAgIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPSBNQlhfRFVNUF9NRU1PUlkgJiYKKwkJICAgIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVTVEFSVCAmJgorCQkgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9IE1CWF9XUklURV9WUEFSTVMgJiYKKwkJICAgIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPSBNQlhfV1JJVEVfV1dOKQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX01CT1gsCisJCQkJCSIxMjU5IG1ib3g6IElzc3VlZCBtYWlsYm94IGNtZCAiCisJCQkJCSIweCV4IHdoaWxlIGluIHN0b3BwZWQgc3RhdGUuXG4iLAorCQkJCQlwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQpOwogCiAJCXBoYmEtPnN5c2ZzX21ib3gubWJveC0+dnBvcnQgPSB2cG9ydDsKIApAQCAtMjA1OSw2ICszMjY3LDE0IEBACiAJLndyaXRlID0gc3lzZnNfbWJveF93cml0ZSwKIH07CiAKKy8qKgorICogbHBmY19hbGxvY19zeXNmc19hdHRyOiBDcmVhdGVzIHRoZSBjdGxyZWcgYW5kIG1ib3ggZW50cmllcy4KKyAqIEB2cG9ydDogYWRkcmVzcyBvZiBscGZjIHZwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIGVycm9yIHJldHVybiBjb2RlIGZyb20gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCkKKyAqKi8KIGludAogbHBmY19hbGxvY19zeXNmc19hdHRyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTIwNzUsMTggKzMyOTEsMzAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3JlbW92ZV9jdGxyZWdfYXR0cjsKIAorCWVycm9yID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosCisJCQkJICAgICAgJnN5c2ZzX2RydnJfc3RhdF9kYXRhX2F0dHIpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmVtb3ZlX21ib3hfYXR0cjsKKwogCXJldHVybiAwOworb3V0X3JlbW92ZV9tYm94X2F0dHI6CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosICZzeXNmc19tYm94X2F0dHIpOwogb3V0X3JlbW92ZV9jdGxyZWdfYXR0cjoKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwgJnN5c2ZzX2N0bHJlZ19hdHRyKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qKgorICogbHBmY19mcmVlX3N5c2ZzX2F0dHI6IFJlbW92ZXMgdGhlIGN0bHJlZyBhbmQgbWJveCBlbnRyaWVzLgorICogQHZwb3J0OiBhZGRyZXNzIG9mIGxwZmMgdnBvcnQgc3RydWN0dXJlLgorICoqLwogdm9pZAogbHBmY19mcmVlX3N5c2ZzX2F0dHIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKLQorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLAorCQkmc3lzZnNfZHJ2cl9zdGF0X2RhdGFfYXR0cik7CiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosICZzeXNmc19tYm94X2F0dHIpOwogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLCAmc3lzZnNfY3RscmVnX2F0dHIpOwogfQpAQCAtMjA5Niw2ICszMzI0LDEwIEBACiAgKiBEeW5hbWljIEZDIEhvc3QgQXR0cmlidXRlcyBTdXBwb3J0CiAgKi8KIAorLyoqCisgKiBscGZjX2dldF9ob3N0X3BvcnRfaWQ6IENvcHkgdGhlIHZwb3J0IERJRCBpbnRvIHRoZSBzY3NpIGhvc3QgcG9ydCBpZC4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIxMDUsNiArMzMzNywxMCBAQAogCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPSB2cG9ydC0+ZmNfbXlESUQ7CiB9CiAKKy8qKgorICogbHBmY19nZXRfaG9zdF9wb3J0X3R5cGU6IFNldCB0aGUgdmFsdWUgb2YgdGhlIHNjc2kgaG9zdCBwb3J0IHR5cGUuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X3BvcnRfdHlwZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIxMzMsNiArMzM2OSwxMCBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9ob3N0X3BvcnRfc3RhdGU6IFNldCB0aGUgdmFsdWUgb2YgdGhlIHNjc2kgaG9zdCBwb3J0IHN0YXRlLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9wb3J0X3N0YXRlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjE2Nyw2ICszNDA3LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hvc3Rfc3BlZWQ6IFNldCB0aGUgdmFsdWUgb2YgdGhlIHNjc2kgaG9zdCBzcGVlZC4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3Rfc3BlZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMTk5LDYgKzM0NDMsMTAgQEAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiB9CiAKKy8qKgorICogbHBmY19nZXRfaG9zdF9mYWJyaWNfbmFtZTogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2NzaSBob3N0IGZhYnJpYyBuYW1lLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9mYWJyaWNfbmFtZSAoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMjIxLDYgKzM0NjksMTggQEAKIAlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IG5vZGVfbmFtZTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9zdGF0czogUmV0dXJuIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhZGFwdGVyLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKgorICogTm90ZXM6CisgKiBOVUxMIG9uIGVycm9yIGZvciBsaW5rIGRvd24sIG5vIG1ib3ggcG9vbCwgc2xpMiBhY3RpdmUsCisgKiBtYW5hZ2VtZW50IG5vdCBhbGxvd2VkLCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciwgb3IgbWJveCBlcnJvci4KKyAqCisgKiBSZXR1cm5zOgorICogTlVMTCBmb3IgZXJyb3IKKyAqIGFkZHJlc3Mgb2YgdGhlIGFkYXB0ZXIgaG9zdCBzdGF0aXN0aWNzCisgKiovCiBzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqCiBscGZjX2dldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIzMzQsNiArMzU5NCwxMCBAQAogCXJldHVybiBoczsKIH0KIAorLyoqCisgKiBscGZjX3Jlc2V0X3N0YXRzOiBDb3B5IHRoZSBhZGFwdGVyIGxpbmsgc3RhdHMgaW5mb3JtYXRpb24uCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3Jlc2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjQxMSw2ICszNjc1LDE0IEBACiAgKiBhcmUgbm8gc3lzZnMgaGFuZGxlcnMgZm9yIGxpbmtfZG93bl90bW8uCiAgKi8KIAorLyoqCisgKiBscGZjX2dldF9ub2RlX2J5X3RhcmdldDogUmV0dXJuIHRoZSBub2RlbGlzdCBmb3IgYSB0YXJnZXQuCisgKiBAc3RhcmdldDoga2VybmVsIHNjc2kgdGFyZ2V0IHBvaW50ZXIuCisgKgorICogUmV0dXJuczoKKyAqIGFkZHJlc3Mgb2YgdGhlIG5vZGUgbGlzdCBpZiBmb3VuZAorICogTlVMTCB0YXJnZXQgbm90IGZvdW5kCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfbm9kZWxpc3QgKgogbHBmY19nZXRfbm9kZV9ieV90YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewpAQCAtMjQzMiw2ICszNzA0LDEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19nZXRfc3RhcmdldF9wb3J0X2lkOiBTZXQgdGhlIHRhcmdldCBwb3J0IGlkIHRvIHRoZSBuZGxwIERJRCBvciAtMS4KKyAqIEBzdGFyZ2V0OiBrZXJuZWwgc2NzaSB0YXJnZXQgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewpAQCAtMjQ0MCw2ICszNzE2LDEyIEBACiAJZmNfc3RhcmdldF9wb3J0X2lkKHN0YXJnZXQpID0gbmRscCA/IG5kbHAtPm5scF9ESUQgOiAtMTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9zdGFyZ2V0X25vZGVfbmFtZTogU2V0IHRoZSB0YXJnZXQgbm9kZSBuYW1lLgorICogQHN0YXJnZXQ6IGtlcm5lbCBzY3NpIHRhcmdldCBwb2ludGVyLgorICoKKyAqIERlc2NyaXB0aW9uOiBTZXQgdGhlIHRhcmdldCBub2RlIG5hbWUgdG8gdGhlIG5kbHAgbm9kZSBuYW1lIHd3biBvciB6ZXJvLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKQEAgLTI0NDksNiArMzczMSwxMiBAQAogCQluZGxwID8gd3duX3RvX3U2NChuZGxwLT5ubHBfbm9kZW5hbWUudS53d24pIDogMDsKIH0KIAorLyoqCisgKiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfbmFtZTogU2V0IHRoZSB0YXJnZXQgcG9ydCBuYW1lLgorICogQHN0YXJnZXQ6IGtlcm5lbCBzY3NpIHRhcmdldCBwb2ludGVyLgorICoKKyAqIERlc2NyaXB0aW9uOiAgc2V0IHRoZSB0YXJnZXQgcG9ydCBuYW1lIHRvIHRoZSBuZGxwIHBvcnQgbmFtZSB3d24gb3IgemVyby4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CkBAIC0yNDU4LDYgKzM3NDYsMTUgQEAKIAkJbmRscCA/IHd3bl90b191NjQobmRscC0+bmxwX3BvcnRuYW1lLnUud3duKSA6IDA7CiB9CiAKKy8qKgorICogbHBmY19zZXRfcnBvcnRfbG9zc190bW86IFNldCB0aGUgcnBvcnQgZGV2IGxvc3MgdG1vLgorICogQHJwb3J0OiBmYyBycG9ydCBhZGRyZXNzLgorICogQHRpbWVvdXQ6IG5ldyB2YWx1ZSBmb3IgZGV2IGxvc3MgdG1vLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdGltZW91dCBpcyBub24gemVybyBzZXQgdGhlIGRldl9sb3NzX3RtbyB0byB0aW1lb3V0LCBlbHNlIHNldAorICogZGV2X2xvc3NfdG1vIHRvIG9uZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NldF9ycG9ydF9sb3NzX3RtbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCB1aW50MzJfdCB0aW1lb3V0KQogewpAQCAtMjQ2Nyw3ICszNzY0LDE4IEBACiAJCXJwb3J0LT5kZXZfbG9zc190bW8gPSAxOwogfQogCi0KKy8qKgorICogbHBmY19ycG9ydF9zaG93X2Z1bmN0aW9uOiBSZXR1cm4gcnBvcnQgdGFyZ2V0IGluZm9ybWF0aW9uLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCB1c2VzIGZpZWxkIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX3Nob3dfcnBvcnRfCisgKgorICogbHBmY19zaG93X3Jwb3J0XyMjZmllbGQ6IHJldHVybnMgdGhlIGJ5dGVzIGZvcm1hdHRlZCBpbiBidWYKKyAqIEBjZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYW4gZmNfcnBvcnQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHRhcmdldF9maWVsZCBvciB6ZXJvLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KICNkZWZpbmUgbHBmY19ycG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKIGxwZmNfc2hvd19ycG9ydF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKQEAgLTI2MDIsNiArMzkxMCwxMCBAQAogCS52cG9ydF9kaXNhYmxlID0gbHBmY192cG9ydF9kaXNhYmxlLAogfTsKIAorLyoqCisgKiBscGZjX2dldF9jZmdwYXJhbTogVXNlZCBkdXJpbmcgcHJvYmVfb25lIHRvIGluaXQgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKiovCiB2b2lkCiBscGZjX2dldF9jZmdwYXJhbShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNjM3LDYgKzM5NDksMTAgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19nZXRfdnBvcnRfY2ZncGFyYW06IFVzZWQgZHVyaW5nIHBvcnQgY3JlYXRlLCBpbml0IHRoZSB2cG9ydCBzdHJ1Y3R1cmUuCisgKiBAdnBvcnQ6IGxwZmNfdnBvcnQgcG9pbnRlci4KKyAqKi8KIHZvaWQKIGxwZmNfZ2V0X3Zwb3J0X2NmZ3BhcmFtKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTI2NDgsNiArMzk2NCw3IEBACiAJbHBmY19yZXN0cmljdF9sb2dpbl9pbml0KHZwb3J0LCBscGZjX3Jlc3RyaWN0X2xvZ2luKTsKIAlscGZjX2ZjcF9jbGFzc19pbml0KHZwb3J0LCBscGZjX2ZjcF9jbGFzcyk7CiAJbHBmY191c2VfYWRpc2NfaW5pdCh2cG9ydCwgbHBmY191c2VfYWRpc2MpOworCWxwZmNfbWF4X3Njc2ljbXBsX3RpbWVfaW5pdCh2cG9ydCwgbHBmY19tYXhfc2NzaWNtcGxfdGltZSk7CiAJbHBmY19mZG1pX29uX2luaXQodnBvcnQsIGxwZmNfZmRtaV9vbik7CiAJbHBmY19kaXNjb3ZlcnlfdGhyZWFkc19pbml0KHZwb3J0LCBscGZjX2Rpc2NvdmVyeV90aHJlYWRzKTsKIAlscGZjX21heF9sdW5zX2luaXQodnBvcnQsIGxwZmNfbWF4X2x1bnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAppbmRleCAxYjgyNDUyLi4wNDRlZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaApAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi10eXBlZGVmIGludCAoKm5vZGVfZmlsdGVyKShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdm9pZCAqcGFyYW0pOwordHlwZWRlZiBpbnQgKCpub2RlX2ZpbHRlcikoc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgdm9pZCAqKTsKIAogc3RydWN0IGZjX3Jwb3J0Owogdm9pZCBscGZjX2R1bXBfbWVtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QpOwpAQCAtMjYsMTEgKzI2LDExIEBACiB2b2lkIGxwZmNfY29uZmlnX2FzeW5jKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QpOwogCiB2b2lkIGxwZmNfaGVhcnRfYmVhdChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwotaW50IGxwZmNfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsCi0JCSBzdHJ1Y3QgbHBmY19kbWFidWYgKm1wKTsKK2ludCBscGZjX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCBzdHJ1Y3QgbHBmY19kbWFidWYgKik7CiB2b2lkIGxwZmNfY2xlYXJfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKLXZvaWQgbHBmY19pc3N1ZV9jbGVhcl9sYShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCk7Cit2b2lkIGxwZmNfaXNzdWVfY2xlYXJfbGEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX2NvbmZpZ19saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CitpbnQgbHBmY19jb25maWdfbXNpKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiBpbnQgbHBmY19yZWFkX3NwYXJhbShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIGludCk7CiB2b2lkIGxwZmNfcmVhZF9jb25maWcoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19yZWFkX2xua19zdGF0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC00Myw3ICs0Myw3IEBACiB2b2lkIGxwZmNfaW5pdF9saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIAogc3RydWN0IGxwZmNfdnBvcnQgKmxwZmNfZmluZF92cG9ydF9ieV9kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKLXZvaWQgbHBmY19jbGVhbnVwX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgcmVtb3ZlKTsKK3ZvaWQgbHBmY19jbGVhbnVwX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKiwgaW50KTsKIGludCBscGZjX2xpbmtkb3duKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19wb3J0X2xpbmtfZmFpbHVyZShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC0xMzUsNyArMTM1LDcgQEAKIGludCBscGZjX25zX2NtZChzdHJ1Y3QgbHBmY192cG9ydCAqLCBpbnQsIHVpbnQ4X3QsIHVpbnQzMl90KTsKIGludCBscGZjX2ZkbWlfY21kKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIGludCk7CiB2b2lkIGxwZmNfZmRtaV90bW8odW5zaWduZWQgbG9uZyk7Ci12b2lkIGxwZmNfZmRtaV90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KTsKK3ZvaWQgbHBmY19mZG1pX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIAogaW50IGxwZmNfY29uZmlnX3BvcnRfcHJlcChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19jb25maWdfcG9ydF9wb3N0KHN0cnVjdCBscGZjX2hiYSAqKTsKQEAgLTE1NSw2ICsxNTUsOCBAQAogdm9pZCBscGZjX2hhbmRsZV9lcmF0dChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfaGFuZGxlX2xhdHQoc3RydWN0IGxwZmNfaGJhICopOwogaXJxcmV0dXJuX3QgbHBmY19pbnRyX2hhbmRsZXIoaW50LCB2b2lkICopOworaXJxcmV0dXJuX3QgbHBmY19zcF9pbnRyX2hhbmRsZXIoaW50LCB2b2lkICopOworaXJxcmV0dXJuX3QgbHBmY19mcF9pbnRyX2hhbmRsZXIoaW50LCB2b2lkICopOwogCiB2b2lkIGxwZmNfcmVhZF9yZXYoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19jb25maWdfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKiwgaW50LCBMUEZDX01CT1hRX3QgKik7CkBAIC0xNzUsMTEgKzE3NywxMiBAQAogdm9pZCBscGZjX3N0b3BfdnBvcnRfdGltZXJzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCiB2b2lkIGxwZmNfcG9sbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKTsKLXZvaWQgbHBmY19wb2xsX3N0YXJ0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpOwotdm9pZCBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqIGhiYSk7Cit2b2lkIGxwZmNfcG9sbF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfcG9sbF9lcmF0dCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgbHBmY19zbGlfcG9sbF9mY3BfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBzdHJ1Y3QgbHBmY19pb2NicSAqIGxwZmNfc2xpX2dldF9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKik7Ci12b2lkIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKLXVpbnQxNl90IGxwZmNfc2xpX25leHRfaW90YWcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKK3ZvaWQgbHBmY19zbGlfcmVsZWFzZV9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfaW9jYnEgKik7Cit1aW50MTZfdCBscGZjX3NsaV9uZXh0X2lvdGFnKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqKTsKIAogdm9pZCBscGZjX3Jlc2V0X2JhcnJpZXIoc3RydWN0IGxwZmNfaGJhICogcGhiYSk7CiBpbnQgbHBmY19zbGlfYnJkcmVhZHkoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKQEAgLTE4NywxMSArMTkwLDEzIEBACiBpbnQgbHBmY19zbGlfYnJkcmVzZXQoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX2JyZHJlc3RhcnQoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX2hiYV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGlfY29uZmlnX3BvcnQoc3RydWN0IGxwZmNfaGJhICosIGludCk7CiBpbnQgbHBmY19zbGlfaG9zdF9kb3duKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfc2xpX2hiYV9kb3duKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QpOwogaW50IGxwZmNfc2xpX2hhbmRsZV9tYl9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfZmx1c2hfbWJveF9xdWV1ZShzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGlfY2hlY2tfZXJhdHQoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX2hhbmRsZV9zbG93X3JpbmdfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosCiAJCQkJICAgIHN0cnVjdCBscGZjX3NsaV9yaW5nICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19zbGlfZGVmX21ib3hfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtMTk5LDYgKzIwNCw3IEBACiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqLCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpX3BjaW1lbV9iY29weSh2b2lkICosIHZvaWQgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaV9hYm9ydF9pb2NiX3Jpbmcoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICopOwordm9pZCBscGZjX3NsaV9mbHVzaF9mY3BfcmluZ3Moc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKIAkJCSAgICAgc3RydWN0IGxwZmNfZG1hYnVmICopOwogc3RydWN0IGxwZmNfZG1hYnVmICpscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQoc3RydWN0IGxwZmNfaGJhICosCkBAIC0yMjYsMTcgKzIzMiwxMyBAQAogc3RydWN0IGxwZmNfbm9kZWxpc3QgKmxwZmNfZmluZG5vZGVfd3dwbihzdHJ1Y3QgbHBmY192cG9ydCAqLAogCQkJCQkgc3RydWN0IGxwZmNfbmFtZSAqKTsKIAotaW50IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWJveHEsCi0JCQkgICAgIHVpbnQzMl90IHRpbWVvdXQpOworaW50IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKIAotaW50IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAotCQkJICAgICBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqIHByaW5nLAotCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIHBpb2NiLAotCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIHByc3Bpb2NicSwKLQkJCSAgICAgdWludDMyX3QgdGltZW91dCk7Ci12b2lkIGxwZmNfc2xpX2Fib3J0X2ZjcF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICogY21kaW9jYiwKLQkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiByc3Bpb2NiKTsKK2ludCBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCisJCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICosIHN0cnVjdCBscGZjX2lvY2JxICosCisJCQkgICAgIHVpbnQzMl90KTsKK3ZvaWQgbHBmY19zbGlfYWJvcnRfZmNwX2NtcGwoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICosCisJCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICopOwogCiB2b2lkIGxwZmNfc2xpX2ZyZWVfaGJxKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqKTsKIApAQCAtMjY5LDcgKzI3MSw3IEBACiAKIHN0cnVjdCBscGZjX3Zwb3J0ICpscGZjX2NyZWF0ZV9wb3J0KHN0cnVjdCBscGZjX2hiYSAqLCBpbnQsIHN0cnVjdCBkZXZpY2UgKik7CiBpbnQgIGxwZmNfdnBvcnRfZGlzYWJsZShzdHJ1Y3QgZmNfdnBvcnQgKmZjX3Zwb3J0LCBib29sIGRpc2FibGUpOwotdm9pZCBscGZjX21ieF91bnJlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKik7CitpbnQgbHBmY19tYnhfdW5yZWdfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBkZXN0cm95X3BvcnQoc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgbHBmY19nZXRfaW5zdGFuY2Uodm9pZCk7CiB2b2lkIGxwZmNfaG9zdF9hdHRyaWJfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwpAQCAtMjkwLDYgKzI5MiwxMyBAQAogdm9pZCBscGZjX2FkanVzdF9xdWV1ZV9kZXB0aChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcmFtcF9kb3duX3F1ZXVlX2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3JhbXBfdXBfcXVldWVfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfc2NzaV9kZXZfYmxvY2soc3RydWN0IGxwZmNfaGJhICopOworCit2b2lkCitscGZjX3NlbmRfZWxzX2ZhaWx1cmVfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICosCisJCQkJc3RydWN0IGxwZmNfaW9jYnEgKik7CitzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmxwZmNfYWxsb2NfZmFzdF9ldnQoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2ZyZWVfZmFzdF9ldnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqKTsKIAogI2RlZmluZSBTY3NpUmVzdWx0KGhvc3RfY29kZSwgc2NzaV9jb2RlKSAoKChob3N0X2NvZGUpIDw8IDE2KSB8IHNjc2lfY29kZSkKICNkZWZpbmUgSEJBX0VWRU5UX1JTQ04gICAgICAgICAgICAgICAgICAgNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDdmYzc0Y2YuLjI2ZGFlOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC0xMzQsMjUgKzEzNSwyNCBAQAogCQl9CiAJCWxpc3RfZGVsKCZoZWFkKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgbHBmY19pb2NicSAgKm5leHQ7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2JxLCBuZXh0LCAmcGlvY2JxLT5saXN0LCBsaXN0KSB7CisJCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKKwkJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJnBpb2NicS0+bGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jYnEsICZoZWFkLCBsaXN0KSB7CiAJCQlpY21kID0gJmlvY2JxLT5pb2NiOwogCQkJaWYgKGljbWQtPnVscEJkZUNvdW50ID09IDApCi0JCQkJbHBmY19jdF91bnNvbF9idWZmZXIocGhiYSwgcGlvY2JxLCBOVUxMLCAwKTsKKwkJCQlscGZjX2N0X3Vuc29sX2J1ZmZlcihwaGJhLCBpb2NicSwgTlVMTCwgMCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgaWNtZC0+dWxwQmRlQ291bnQ7IGkrKykgewogCQkJCXBhZGRyID0gZ2V0UGFkZHIoaWNtZC0+dW4uY29udDY0W2ldLmFkZHJIaWdoLAogCQkJCQkJIGljbWQtPnVuLmNvbnQ2NFtpXS5hZGRyTG93KTsKIAkJCQltcCA9IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChwaGJhLCBwcmluZywKIAkJCQkJCQkgICAgICBwYWRkcik7CiAJCQkJc2l6ZSA9IGljbWQtPnVuLmNvbnQ2NFtpXS50dXMuZi5iZGVTaXplOwotCQkJCWxwZmNfY3RfdW5zb2xfYnVmZmVyKHBoYmEsIHBpb2NicSwgbXAsIHNpemUpOworCQkJCWxwZmNfY3RfdW5zb2xfYnVmZmVyKHBoYmEsIGlvY2JxLCBtcCwgc2l6ZSk7CiAJCQkJbHBmY19pbl9idWZfZnJlZShwaGJhLCBtcCk7CiAJCQl9Ci0JCQlsaXN0X2RlbCgmaW9jYnEtPmxpc3QpOwotCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NicSk7CiAJCQlscGZjX3Bvc3RfYnVmZmVyKHBoYmEsIHByaW5nLCBpKTsKIAkJfQorCQlsaXN0X2RlbCgmaGVhZCk7CiAJfQogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJZWxzZQogCQkJbGlzdF9hZGRfdGFpbCgmbXAtPmxpc3QsICZtbGlzdC0+bGlzdCk7CiAKLQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVVNFX1JDVjsKKwkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjRJOwogCQkvKiBidWlsZCBidWZmZXIgcHRyIGxpc3QgZm9yIElPQ0IgKi8KIAkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cobXAtPnBoeXMpICk7CiAJCWJwbC0+YWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gobXAtPnBoeXMpICk7CkBAIC0yODMsNyArMjgzLDcgQEAKIAlpY21kLT51bi5nZW5yZXE2NC5iZGwudWxwSW9UYWczMiA9IDA7CiAJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKGJtcC0+cGh5cyk7CiAJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhibXAtPnBoeXMpOwotCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREw7CisJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKIAlpY21kLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSA9IChudW1fZW50cnkgKiBzaXplb2YgKHN0cnVjdCB1bHBfYmRlNjQpKTsKIAogCWlmICh1c3JfZmxnKQpAQCAtODYxLDcgKzg2MSw3IEBACiAKIAkJcmV0cnkrKzsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAotCQkJCSAiMDIxNiBSZXRyeWluZyBOUyBjbWQgJXhcbiIsIGNtZGNvZGUpOworCQkJCSAiMDI1MCBSZXRyeWluZyBOUyBjbWQgJXhcbiIsIGNtZGNvZGUpOwogCQlyYyA9IGxwZmNfbnNfY21kKHZwb3J0LCBjbWRjb2RlLCByZXRyeSwgMCk7CiAJCWlmIChyYyA9PSAwKQogCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCmluZGV4IDA5NGI0N2UuLjc3MTkyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNDYsMTMgKzQ3LDE0IEBACiAjaW5jbHVkZSAibHBmY19kZWJ1Z2ZzLmgiCiAKICNpZmRlZiBDT05GSUdfTFBGQ19ERUJVR19GUwotLyogZGVidWdmcyBpbnRlcmZhY2UKKy8qKgorICogZGVidWdmcyBpbnRlcmZhY2UKICAqCiAgKiBUbyBhY2Nlc3MgdGhpcyBpbnRlcmZhY2UgdGhlIHVzZXIgc2hvdWxkOgogICogIyBta2RpciAvZGVidWcKICAqICMgbW91bnQgLXQgZGVidWdmcyBub25lIC9kZWJ1ZwogICoKLSAqIFRoZSBscGZjIGRlYnVnZnMgZGlyZWN0b3J5IGhpZXJhY2h5IGlzOgorICogVGhlIGxwZmMgZGVidWdmcyBkaXJlY3RvcnkgaGllcmFyY2h5IGlzOgogICogbHBmYy9scGZjWC92cG9ydFkKICAqIHdoZXJlIFggaXMgdGhlIGxwZmMgaGJhIHVuaXF1ZV9pZAogICogd2hlcmUgWSBpcyB0aGUgdnBvcnQgVlBJIG9uIHRoYXQgaGJhCkBAIC02MSwxNCArNjMsMjEgQEAKICAqIGRpc2NvdmVyeV90cmFjZQogICogVGhpcyBpcyBhbiBBQ1NJSSByZWFkYWJsZSBmaWxlIHRoYXQgY29udGFpbnMgYSB0cmFjZSBvZiB0aGUgbGFzdAogICogbHBmY19kZWJ1Z2ZzX21heF9kaXNjX3RyYyBldmVudHMgdGhhdCBoYXBwZW5lZCBvbiBhIHNwZWNpZmljIHZwb3J0LgotICogU2VlIGxwZmNfZGVidWdmcy5oIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZgotICogZGlzY292ZXJ5IGV2ZW50cy4gVG8gZW5hYmxlIHRoZSBkaXNjb3ZlcnkgdHJhY2UsIHRoZSBmb2xsb3dpbmcKLSAqIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgc2V0OgorICogU2VlIGxwZmNfZGVidWdmcy5oIGZvciBkaWZmZXJlbnQgY2F0ZWdvcmllcyBvZiAgZGlzY292ZXJ5IGV2ZW50cy4KKyAqIFRvIGVuYWJsZSB0aGUgZGlzY292ZXJ5IHRyYWNlLCB0aGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgc2V0OgogICogbHBmY19kZWJ1Z2ZzX2VuYWJsZT0xICAgICAgICAgVHVybnMgb24gbHBmYyBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gc3VwcG9ydAogICogbHBmY19kZWJ1Z2ZzX21heF9kaXNjX3RyYz1YICAgV2hlcmUgWCBpcyB0aGUgZXZlbnQgdHJhY2UgZGVwdGggZm9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQUNIIHZwb3J0LiBYIE1VU1QgYWxzbyBiZSBhIHBvd2VyIG9mIDIuCiAgKiBscGZjX2RlYnVnZnNfbWFza19kaXNjX3RyYz1ZICBXaGVyZSBZIGlzIGFuIGV2ZW50IG1hc2sgYXMgZGVmaW5lZCBpbgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBmY19kZWJ1Z2ZzLmggLgorICoKKyAqIHNsb3dfcmluZ190cmFjZQorICogVGhpcyBpcyBhbiBBQ1NJSSByZWFkYWJsZSBmaWxlIHRoYXQgY29udGFpbnMgYSB0cmFjZSBvZiB0aGUgbGFzdAorICogbHBmY19kZWJ1Z2ZzX21heF9zbG93X3JpbmdfdHJjIGV2ZW50cyB0aGF0IGhhcHBlbmVkIG9uIGEgc3BlY2lmaWMgSEJBLgorICogVG8gZW5hYmxlIHRoZSBzbG93IHJpbmcgdHJhY2UsIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQ6CisgKiBscGZjX2RlYnVnZnNfZW5hYmxlPTEgICAgICAgICBUdXJucyBvbiBscGZjIGRlYnVnZnMgZmlsZXN5c3RlbSBzdXBwb3J0CisgKiBscGZjX2RlYnVnZnNfbWF4X3Nsb3dfcmluZ190cmM9WCAgIFdoZXJlIFggaXMgdGhlIGV2ZW50IHRyYWNlIGRlcHRoIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEhCQS4gWCBNVVNUIGFsc28gYmUgYSBwb3dlciBvZiAyLgogICovCiBzdGF0aWMgaW50IGxwZmNfZGVidWdmc19lbmFibGUgPSAxOwogbW9kdWxlX3BhcmFtKGxwZmNfZGVidWdmc19lbmFibGUsIGludCwgMCk7CkBAIC0xMTcsNiArMTI2LDI1IEBACiBzdGF0aWMgYXRvbWljX3QgbHBmY19kZWJ1Z2ZzX3NlcV90cmNfY250ID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBscGZjX2RlYnVnZnNfc3RhcnRfdGltZSA9IDBMOwogCisvKioKKyAqIGxwZmNfZGVidWdmc19kaXNjX3RyY19kYXRhIC0gRHVtcCBkaXNjb3ZlcnkgbG9nZ2luZyB0byBhIGJ1ZmZlci4KKyAqIEB2cG9ydDogVGhlIHZwb3J0IHRvIGdhdGhlciB0aGUgbG9nIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGdhdGhlcnMgdGhlIGxwZmMgZGlzY292ZXJ5IGRlYnVnZnMgZGF0YSBmcm9tIHRoZSBAdnBvcnQgYW5kCisgKiBkdW1wcyBpdCB0byBAYnVmIHVwIHRvIEBzaXplIG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBzdGFydCBhdCB0aGUgbmV4dCBlbnRyeQorICogaW4gdGhlIGxvZyBhbmQgcHJvY2VzcyB0aGUgbG9nIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gVGhlbiBpdCB3aWxsCisgKiBnYXRoZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cgYW5kIHByb2Nlc3MgdW50aWwgdGhlIGN1cnJlbnQgZW50cnkuCisgKgorICogTm90ZXM6CisgKiBEaXNjb3ZlcnkgbG9nZ2luZyB3aWxsIGJlIGRpc2FibGVkIHdoaWxlIHdoaWxlIHRoaXMgcm91dGluZSBkdW1wcyB0aGUgbG9nLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZGlzY190cmNfZGF0YShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0xMjUsNyArMTUzLDYgQEAKIAlzdHJ1Y3QgbHBmY19kZWJ1Z2ZzX3RyYyAqZHRwOwogCWNoYXIgYnVmZmVyW0xQRkNfREVCVUdfVFJDX0VOVFJZX1NJWkVdOwogCi0KIAllbmFibGUgPSBscGZjX2RlYnVnZnNfZW5hYmxlOwogCWxwZmNfZGVidWdmc19lbmFibGUgPSAwOwogCkBAIC0xNTksNiArMTg2LDI1IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyY19kYXRhIC0gRHVtcCBzbG93IHJpbmcgbG9nZ2luZyB0byBhIGJ1ZmZlci4KKyAqIEBwaGJhOiBUaGUgSEJBIHRvIGdhdGhlciB0aGUgbG9nIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGdhdGhlcnMgdGhlIGxwZmMgc2xvdyByaW5nIGRlYnVnZnMgZGF0YSBmcm9tIHRoZSBAcGhiYSBhbmQKKyAqIGR1bXBzIGl0IHRvIEBidWYgdXAgdG8gQHNpemUgbnVtYmVyIG9mIGJ5dGVzLiBJdCB3aWxsIHN0YXJ0IGF0IHRoZSBuZXh0IGVudHJ5CisgKiBpbiB0aGUgbG9nIGFuZCBwcm9jZXNzIHRoZSBsb2cgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBUaGVuIGl0IHdpbGwKKyAqIGdhdGhlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvZyBhbmQgcHJvY2VzcyB1bnRpbCB0aGUgY3VycmVudCBlbnRyeS4KKyAqCisgKiBOb3RlczoKKyAqIFNsb3cgcmluZyBsb2dnaW5nIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgd2hpbGUgdGhpcyByb3V0aW5lIGR1bXBzIHRoZSBsb2cuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjX2RhdGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMjAzLDYgKzI0OSwyNSBAQAogCiBzdGF0aWMgaW50IGxwZmNfZGVidWdmc19sYXN0X2hicSA9IC0xOwogCisvKioKKyAqIGxwZmNfZGVidWdmc19oYnFpbmZvX2RhdGEgLSBEdW1wIGhvc3QgYnVmZmVyIHF1ZXVlIGluZm8gdG8gYSBidWZmZXIuCisgKiBAcGhiYTogVGhlIEhCQSB0byBnYXRoZXIgaG9zdCBidWZmZXIgaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZHVtcHMgdGhlIGhvc3QgYnVmZmVyIHF1ZXVlIGluZm8gZnJvbSB0aGUgQHBoYmEgdG8gQGJ1ZiB1cCB0bworICogQHNpemUgbnVtYmVyIG9mIGJ5dGVzLiBBIGhlYWRlciB0aGF0IGRlc2NyaWJlcyB0aGUgY3VycmVudCBoYnEgc3RhdGUgd2lsbCBiZQorICogZHVtcGVkIHRvIEBidWYgZmlyc3QgYW5kIHRoZW4gaW5mbyBvbiBlYWNoIGhicSBlbnRyeSB3aWxsIGJlIGR1bXBlZCB0byBAYnVmCisgKiB1bnRpbCBAc2l6ZSBieXRlcyBoYXZlIGJlZW4gZHVtcGVkIG9yIGFsbCB0aGUgaGJxIGluZm8gaGFzIGJlZW4gZHVtcGVkLgorICoKKyAqIE5vdGVzOgorICogVGhpcyByb3V0aW5lIHdpbGwgcm90YXRlIHRocm91Z2ggZWFjaCBjb25maWd1cmVkIEhCUSBlYWNoIHRpbWUgY2FsbGVkLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfaGJxaW5mb19kYXRhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTMwMyw2ICszNjgsMjQgQEAKIAogc3RhdGljIGludCBscGZjX2RlYnVnZnNfbGFzdF9oYmFfc2xpbV9vZmY7CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2R1bXBIQkFTbGltX2RhdGEgLSBEdW1wIEhCQSBTTElNIGluZm8gdG8gYSBidWZmZXIuCisgKiBAcGhiYTogVGhlIEhCQSB0byBnYXRoZXIgU0xJTSBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiBIQkEgU0xJTSBmb3IgdGhlIEhCQSBhc3NvY2lhdGVkCisgKiB3aXRoIEBwaGJhIHRvIEBidWYgdXAgdG8gQHNpemUgYnl0ZXMgb2YgZGF0YS4gVGhpcyBpcyB0aGUgcmF3IEhCQSBTTElNIGRhdGEuCisgKgorICogTm90ZXM6CisgKiBUaGlzIHJvdXRpbmUgd2lsbCBvbmx5IGR1bXAgdXAgdG8gMTAyNCBieXRlcyBvZiBkYXRhIGVhY2ggdGltZSBjYWxsZWQgYW5kCisgKiBzaG91bGQgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGR1bXAgdGhlIGVudGlyZSBIQkEgU0xJTS4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2R1bXBIQkFTbGltX2RhdGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMzQyLDYgKzQyNSwyMSBAQAogCXJldHVybiBsZW47CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2R1bXBIb3N0U2xpbV9kYXRhIC0gRHVtcCBob3N0IFNMSU0gaW5mbyB0byBhIGJ1ZmZlci4KKyAqIEBwaGJhOiBUaGUgSEJBIHRvIGdhdGhlciBIb3N0IFNMSU0gaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZHVtcHMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgaG9zdCBTTElNIGZvciB0aGUgaG9zdCBhc3NvY2lhdGVkCisgKiB3aXRoIEBwaGJhIHRvIEBidWYgdXAgdG8gQHNpemUgYnl0ZXMgb2YgZGF0YS4gVGhlIGR1bXAgd2lsbCBjb250YWluIHRoZQorICogTWFpbGJveCwgUENCLCBSaW5ncywgYW5kIFJlZ2lzdGVycyB0aGF0IGFyZSBsb2NhdGVkIGluIGhvc3QgbWVtb3J5LgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZHVtcEhvc3RTbGltX2RhdGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMzU3LDcgKzQ1NSw3IEBACiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKIAlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLCAiU0xJTSBNYWlsYm94XG4iKTsKLQlwdHIgPSAodWludDMyX3QgKilwaGJhLT5zbGltMnA7CisJcHRyID0gKHVpbnQzMl90ICopcGhiYS0+c2xpbTJwLnZpcnQ7CiAJaSA9IHNpemVvZihNQUlMQk9YX3QpOwogCXdoaWxlIChpID4gMCkgewogCQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLApAQCAtMzcwLDcgKzQ2OCw3IEBACiAJfQogCiAJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwgIlNMSU0gUENCXG4iKTsKLQlwdHIgPSAodWludDMyX3QgKikmcGhiYS0+c2xpbTJwLT5wY2I7CisJcHRyID0gKHVpbnQzMl90ICopcGhiYS0+cGNiOwogCWkgPSBzaXplb2YoUENCX3QpOwogCXdoaWxlIChpID4gMCkgewogCQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLApAQCAtMzgyLDQ0ICs0ODAsMTYgQEAKIAkJb2ZmICs9ICg4ICogc2l6ZW9mKHVpbnQzMl90KSk7CiAJfQogCi0JcGdwcCA9IChzdHJ1Y3QgbHBmY19wZ3AgKikmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnQ7Ci0JcHJpbmcgPSAmcHNsaS0+cmluZ1swXTsKLQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLAotCQkiUmluZyAwOiBDTUQgR2V0SW54OiVkIChNYXg6JWQgTmV4dDolZCBMb2NhbDolZCBmbGc6eCV4KSAgIgotCQkiUlNQIFB1dElueDolZCBNYXg6JWRcbiIsCi0JCXBncHAtPmNtZEdldElueCwgcHJpbmctPm51bUNpb2NiLAotCQlwcmluZy0+bmV4dF9jbWRpZHgsIHByaW5nLT5sb2NhbF9nZXRpZHgsIHByaW5nLT5mbGFnLAotCQlwZ3BwLT5yc3BQdXRJbngsIHByaW5nLT5udW1SaW9jYik7Ci0JcGdwcCsrOwotCi0JcHJpbmcgPSAmcHNsaS0+cmluZ1sxXTsKLQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLAotCQkiUmluZyAxOiBDTUQgR2V0SW54OiVkIChNYXg6JWQgTmV4dDolZCBMb2NhbDolZCBmbGc6eCV4KSAgIgotCQkiUlNQIFB1dElueDolZCBNYXg6JWRcbiIsCi0JCXBncHAtPmNtZEdldElueCwgcHJpbmctPm51bUNpb2NiLAotCQlwcmluZy0+bmV4dF9jbWRpZHgsIHByaW5nLT5sb2NhbF9nZXRpZHgsIHByaW5nLT5mbGFnLAotCQlwZ3BwLT5yc3BQdXRJbngsIHByaW5nLT5udW1SaW9jYik7Ci0JcGdwcCsrOwotCi0JcHJpbmcgPSAmcHNsaS0+cmluZ1syXTsKLQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLAotCQkiUmluZyAyOiBDTUQgR2V0SW54OiVkIChNYXg6JWQgTmV4dDolZCBMb2NhbDolZCBmbGc6eCV4KSAgIgotCQkiUlNQIFB1dElueDolZCBNYXg6JWRcbiIsCi0JCXBncHAtPmNtZEdldElueCwgcHJpbmctPm51bUNpb2NiLAotCQlwcmluZy0+bmV4dF9jbWRpZHgsIHByaW5nLT5sb2NhbF9nZXRpZHgsIHByaW5nLT5mbGFnLAotCQlwZ3BwLT5yc3BQdXRJbngsIHByaW5nLT5udW1SaW9jYik7Ci0JcGdwcCsrOwotCi0JcHJpbmcgPSAmcHNsaS0+cmluZ1szXTsKLQlsZW4gKz0gIHNucHJpbnRmKGJ1ZitsZW4sIHNpemUtbGVuLAotCQkiUmluZyAzOiBDTUQgR2V0SW54OiVkIChNYXg6JWQgTmV4dDolZCBMb2NhbDolZCBmbGc6eCV4KSAgIgotCQkiUlNQIFB1dElueDolZCBNYXg6JWRcbiIsCi0JCXBncHAtPmNtZEdldElueCwgcHJpbmctPm51bUNpb2NiLAotCQlwcmluZy0+bmV4dF9jbWRpZHgsIHByaW5nLT5sb2NhbF9nZXRpZHgsIHByaW5nLT5mbGFnLAotCQlwZ3BwLT5yc3BQdXRJbngsIHByaW5nLT5udW1SaW9jYik7Ci0KLQotCXB0ciA9ICh1aW50MzJfdCAqKSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AuaGJxX2dldDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXBncHAgPSAmcGhiYS0+cG9ydF9ncFtpXTsKKwkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKKwkJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKKwkJCQkgIlJpbmcgJWQ6IENNRCBHZXRJbng6JWQgKE1heDolZCBOZXh0OiVkICIKKwkJCQkgIkxvY2FsOiVkIGZsZzp4JXgpICBSU1AgUHV0SW54OiVkIE1heDolZFxuIiwKKwkJCQkgaSwgcGdwcC0+Y21kR2V0SW54LCBwcmluZy0+bnVtQ2lvY2IsCisJCQkJIHByaW5nLT5uZXh0X2NtZGlkeCwgcHJpbmctPmxvY2FsX2dldGlkeCwKKwkJCQkgcHJpbmctPmZsYWcsIHBncHAtPnJzcFB1dElueCwgcHJpbmctPm51bVJpb2NiKTsKKwl9CiAJd29yZDAgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOwogCXdvcmQxID0gcmVhZGwocGhiYS0+Q0FyZWdhZGRyKTsKIAl3b3JkMiA9IHJlYWRsKHBoYmEtPkhTcmVnYWRkcik7CkBAIC00MzAsNiArNTAwLDIxIEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfbm9kZWxpc3RfZGF0YSAtIER1bXAgdGFyZ2V0IG5vZGUgbGlzdCB0byBhIGJ1ZmZlci4KKyAqIEB2cG9ydDogVGhlIHZwb3J0IHRvIGdhdGhlciB0YXJnZXQgbm9kZSBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0aGUgY3VycmVudCB0YXJnZXQgbm9kZSBsaXN0IGFzc29jaWF0ZWQgd2l0aCBAdnBvcnQgdG8KKyAqIEBidWYgdXAgdG8gQHNpemUgYnl0ZXMgb2YgZGF0YS4gRWFjaCBub2RlIGVudHJ5IGluIHRoZSBkdW1wIHdpbGwgY29udGFpbiBhCisgKiBub2RlIHN0YXRlLCBESUQsIFdXUE4sIFdXTk4sIFJQSSwgZmxhZ3MsIHR5cGUsIGFuZCBvdGhlciB1c2VmdWwgZmllbGRzLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfbm9kZWxpc3RfZGF0YShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC01MTMsNyArNTk4LDIyIEBACiB9CiAjZW5kaWYKIAotCisvKioKKyAqIGxwZmNfZGVidWdmc19kaXNjX3RyYyAtIFN0b3JlIGRpc2NvdmVyeSB0cmFjZSBsb2cuCisgKiBAdnBvcnQ6IFRoZSB2cG9ydCB0byBhc3NvY2lhdGUgdGhpcyB0cmFjZSBzdHJpbmcgd2l0aCBmb3IgcmV0cmlldmFsLgorICogQG1hc2s6IExvZyBlbnRyeSBjbGFzc2lmaWNhdGlvbi4KKyAqIEBmbXQ6IEZvcm1hdCBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIHdoZW4gZHVtcGluZyB0aGUgbG9nLgorICogQGRhdGExOiAxc3QgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICogQGRhdGEyOiAybmQgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICogQGRhdGEzOiAzcmQgZGF0YSBwYXJhbWV0ZXIgdG8gYmUgYXBwbGllZCB0byBAZm10LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGRyaXZlciBjb2RlIHRvIGFkZCBhIGRlYnVnZnMgbG9nIGVudHJ5IHRvIHRoZQorICogZGlzY292ZXJ5IHRyYWNlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggQHZwb3J0LiBPbmx5IGVudHJpZXMgd2l0aCBhIEBtYXNrIHRoYXQKKyAqIG1hdGNoIHRoZSBjdXJyZW50IGRlYnVnZnMgZGlzY292ZXJ5IG1hc2sgd2lsbCBiZSBzYXZlZC4gRW50cmllcyB0aGF0IGRvIG5vdAorICogbWF0Y2ggd2lsbCBiZSB0aHJvd24gYXdheS4gQGZtdCwgQGRhdGExLCBAZGF0YTIsIGFuZCBAZGF0YTMgYXJlIHVzZWQgbGlrZQorICogcHJpbnRmIHdoZW4gZGlzcGxheWluZyB0aGUgbG9nLgorICoqLwogaW5saW5lIHZvaWQKIGxwZmNfZGVidWdmc19kaXNjX3RyYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIGludCBtYXNrLCBjaGFyICpmbXQsCiAJdWludDMyX3QgZGF0YTEsIHVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMykKQEAgLTU0Miw2ICs2NDIsMTkgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmMgLSBTdG9yZSBzbG93IHJpbmcgdHJhY2UgbG9nLgorICogQHBoYmE6IFRoZSBwaGJhIHRvIGFzc29jaWF0ZSB0aGlzIHRyYWNlIHN0cmluZyB3aXRoIGZvciByZXRyaWV2YWwuCisgKiBAZm10OiBGb3JtYXQgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCB3aGVuIGR1bXBpbmcgdGhlIGxvZy4KKyAqIEBkYXRhMTogMXN0IGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqIEBkYXRhMjogMm5kIGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqIEBkYXRhMzogM3JkIGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBkcml2ZXIgY29kZSB0byBhZGQgYSBkZWJ1Z2ZzIGxvZyBlbnRyeSB0byB0aGUKKyAqIGRpc2NvdmVyeSB0cmFjZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIEB2cG9ydC4gQGZtdCwgQGRhdGExLCBAZGF0YTIsIGFuZAorICogQGRhdGEzIGFyZSB1c2VkIGxpa2UgcHJpbnRmIHdoZW4gZGlzcGxheWluZyB0aGUgbG9nLgorICoqLwogaW5saW5lIHZvaWQKIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqZm10LAogCXVpbnQzMl90IGRhdGExLCB1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpCkBAIC01NjgsNiArNjgxLDIxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfTFBGQ19ERUJVR19GUworLyoqCisgKiBscGZjX2RlYnVnZnNfZGlzY190cmNfb3BlbiAtIE9wZW4gdGhlIGRpc2NvdmVyeSB0cmFjZSBsb2cuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kaXNjX3RyY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNTg1LDcgKzcxMyw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJc2l6ZSA9ICAobHBmY19kZWJ1Z2ZzX21heF9kaXNjX3RyYyAqIExQRkNfREVCVUdfVFJDX0VOVFJZX1NJWkUpOwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCkBAIC02MDMsNiArNzMxLDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjX29wZW4gLSBPcGVuIHRoZSBTbG93IFJpbmcgdHJhY2UgbG9nLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNjIwLDcgKzc2Myw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJc2l6ZSA9ICAobHBmY19kZWJ1Z2ZzX21heF9zbG93X3JpbmdfdHJjICogTFBGQ19ERUJVR19UUkNfRU5UUllfU0laRSk7CiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAKQEAgLTYzOCw2ICs3ODEsMjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2hicWluZm9fb3BlbiAtIE9wZW4gdGhlIGhicWluZm8gZGVidWdmcyBidWZmZXIuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19oYnFpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC02NDksNyArODA3LDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX0hCUUlORk9fU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZWJ1Zy0+YnVmZmVyKSB7CiAJCWtmcmVlKGRlYnVnKTsKQEAgLTY2NSw2ICs4MjMsMjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2R1bXBIQkFTbGltX29wZW4gLSBPcGVuIHRoZSBEdW1wIEhCQSBTTElNIGRlYnVnZnMgYnVmZmVyLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZHVtcEhCQVNsaW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTY3Niw3ICs4NDksNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCWRlYnVnLT5idWZmZXIgPSBrbWFsbG9jKExQRkNfRFVNUEhCQVNMSU1fU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZWJ1Zy0+YnVmZmVyKSB7CiAJCWtmcmVlKGRlYnVnKTsKQEAgLTY5Miw2ICs4NjUsMjEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2R1bXBIb3N0U2xpbV9vcGVuIC0gT3BlbiB0aGUgRHVtcCBIb3N0IFNMSU0gZGVidWdmcyBidWZmZXIuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gYXR0YWNoIHRoZSBsb2cgb3V0cHV0LgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRlYnVnZnMgb3BlbiBmaWxlIG9wZXJhdGlvbi4gSXQgZ2V0cworICogdGhlIHZwb3J0IGZyb20gdGhlIGlfcHJpdmF0ZSBmaWVsZCBpbiBAaW5vZGUsIGFsbG9jYXRlcyB0aGUgbmVjZXNzYXJ5IGJ1ZmZlcgorICogZm9yIHRoZSBsb2csIGZpbGxzIHRoZSBidWZmZXIgZnJvbSB0aGUgaW4tbWVtb3J5IGxvZyBmb3IgdGhpcyB2cG9ydCwgYW5kIHRoZW4KKyAqIHJldHVybnMgYSBwb2ludGVyIHRvIHRoYXQgbG9nIGluIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgaW4gQGZpbGUuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwuIE9uIGVycm9yIGl0IHdpbGwgcmV0dXJuIGFuIG5lZ2F0aXZlCisgKiBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kdW1wSG9zdFNsaW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTcwMyw3ICs4OTEsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCWRlYnVnLT5idWZmZXIgPSBrbWFsbG9jKExQRkNfRFVNUEhPU1RTTElNX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZGVidWctPmJ1ZmZlcikgewogCQlrZnJlZShkZWJ1Zyk7CkBAIC03MTksNiArOTA3LDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19ub2RlbGlzdF9vcGVuIC0gT3BlbiB0aGUgbm9kZWxpc3QgZGVidWdmcyBmaWxlLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfbm9kZWxpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTczMCw3ICs5MzMsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCWRlYnVnLT5idWZmZXIgPSBrbWFsbG9jKExQRkNfTk9ERUxJU1RfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZWJ1Zy0+YnVmZmVyKSB7CiAJCWtmcmVlKGRlYnVnKTsKQEAgLTc0Niw2ICs5NDksMjMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2xzZWVrIC0gU2VlayB0aHJvdWdoIGEgZGVidWdmcyBmaWxlLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gc2VlayB0aHJvdWdoLgorICogQG9mZjogVGhlIG9mZnNldCB0byBzZWVrIHRvIG9yIHRoZSBhbW91bnQgdG8gc2VlayBieS4KKyAqIEB3aGVuY2U6IEluZGljYXRlcyBob3cgdG8gc2Vlay4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIGxzZWVrIGZpbGUgb3BlcmF0aW9uLiBUaGUKKyAqIEB3aGVuY2UgcGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIEBvZmYgaXMgdGhlIG9mZnNldCB0byBkaXJlY3RseSBzZWVrIHRvLAorICogb3IgaWYgaXQgaXMgYSB2YWx1ZSB0byBzZWVrIGZvcndhcmQgb3IgcmV2ZXJzZSBieS4gVGhpcyBmdW5jdGlvbiBmaWd1cmVzIG91dAorICogd2hhdCB0aGUgbmV3IG9mZnNldCBvZiB0aGUgZGVidWdmcyBmaWxlIHdpbGwgYmUgYW5kIGFzc2lnbnMgdGhhdCB2YWx1ZSB0byB0aGUKKyAqIGZfcG9zIGZpZWxkIG9mIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5ldyBvZmZzZXQgaWYgc3VjY2Vzc2Z1bCBhbmQgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBlcnJvciBpZiB1bmFibGUgdG8gcHJvY2VzcyB0aGUgc2Vlay4KKyAqKi8KIHN0YXRpYyBsb2ZmX3QKIGxwZmNfZGVidWdmc19sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKIHsKQEAgLTc2Nyw2ICs5ODcsMjIgQEAKIAlyZXR1cm4gKHBvcyA8IDAgfHwgcG9zID4gZGVidWctPmxlbikgPyAtRUlOVkFMIDogKGZpbGUtPmZfcG9zID0gcG9zKTsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfcmVhZCAtIFJlYWQgYSBkZWJ1Z2ZzIGZpbGUuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgdG8uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBkYXRhIGZyb20gZnJvbSB0aGUgYnVmZmVyIGluZGljYXRlZCBpbiB0aGUgcHJpdmF0ZV9kYXRhCisgKiBmaWVsZCBvZiBAZmlsZS4gSXQgd2lsbCBzdGFydCByZWFkaW5nIGF0IEBwcG9zIGFuZCBjb3B5IHVwIHRvIEBuYnl0ZXMgb2YKKyAqIGRhdGEgdG8gQGJ1Zi4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdhcyByZWFkICh0aGlzIGNvdWxkIGJlIGxlc3MKKyAqIHRoYW4gQG5ieXRlcyBpZiB0aGUgZW5kIG9mIHRoZSBmaWxlIHdhcyByZWFjaGVkKSBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKQEAgLTc3Niw2ICsxMDEyLDE4IEBACiAJCQkJICAgICAgIGRlYnVnLT5sZW4pOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19yZWxlYXNlIC0gUmVsZWFzZSB0aGUgYnVmZmVyIHVzZWQgdG8gc3RvcmUgZGVidWdmcyBmaWxlIGRhdGEuCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBwb2ludGVyIHRoYXQgY29udGFpbnMgYSB2cG9ydCBwb2ludGVyLiAodW51c2VkKQorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdGhhdCBjb250YWlucyB0aGUgYnVmZmVyIHRvIHJlbGVhc2UuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZnJlZXMgdGhlIGJ1ZmZlciB0aGF0IHdhcyBhbGxvY2F0ZWQgd2hlbiB0aGUgZGVidWdmcyBmaWxlIHdhcworICogb3BlbmVkLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVyby4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtODQ1LDYgKzEwOTMsMTYgQEAKIHN0YXRpYyBhdG9taWNfdCBscGZjX2RlYnVnZnNfaGJhX2NvdW50OwogI2VuZGlmCiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2luaXRpYWxpemUgLSBJbml0aWFsaXplIGRlYnVnZnMgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IFRoZSB2cG9ydCBwb2ludGVyIHRvIGluaXRpYWxpemUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBXaGVuIERlYnVnZnMgaXMgY29uZmlndXJlZCB0aGlzIHJvdXRpbmUgc2V0cyB1cCB0aGUgbHBmYyBkZWJ1Z2ZzIGZpbGUgc3lzdGVtLgorICogSWYgbm90IGFscmVhZHkgY3JlYXRlZCwgdGhpcyByb3V0aW5lIHdpbGwgY3JlYXRlIHRoZSBscGZjIGRpcmVjdG9yeSwgYW5kCisgKiBscGZjWCBkaXJlY3RvcnkgKGZvciB0aGlzIEhCQSksIGFuZCB2cG9ydFggZGlyZWN0b3J5IGZvciB0aGlzIHZwb3J0LiBJdCB3aWxsCisgKiBhbHNvIGNyZWF0ZSBlYWNoIGZpbGUgdXNlZCB0byBhY2Nlc3MgbHBmYyBzcGVjaWZpYyBkZWJ1Z2ZzIGluZm9ybWF0aW9uLgorICoqLwogaW5saW5lIHZvaWQKIGxwZmNfZGVidWdmc19pbml0aWFsaXplKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTg2Miw3ICsxMTIwLDcgQEAKIAkJYXRvbWljX3NldCgmbHBmY19kZWJ1Z2ZzX2hiYV9jb3VudCwgMCk7CiAJCWlmICghbHBmY19kZWJ1Z2ZzX3Jvb3QpIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyByb290XG4iKTsKKwkJCQkJICIwNDA4IENhbm5vdCBjcmVhdGUgZGVidWdmcyByb290XG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAJfQpAQCAtODc2LDcgKzExMzQsNyBAQAogCQkJZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIGxwZmNfZGVidWdmc19yb290KTsKIAkJaWYgKCFwaGJhLT5oYmFfZGVidWdmc19yb290KSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgaGJhXG4iKTsKKwkJCQkJICIwNDEyIENhbm5vdCBjcmVhdGUgZGVidWdmcyBoYmFcbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIAkJYXRvbWljX2luYygmbHBmY19kZWJ1Z2ZzX2hiYV9jb3VudCk7CkBAIC04OTAsNyArMTE0OCw3IEBACiAJCQkJIHBoYmEsICZscGZjX2RlYnVnZnNfb3BfaGJxaW5mbyk7CiAJCWlmICghcGhiYS0+ZGVidWdfaGJxaW5mbykgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyBoYnFpbmZvXG4iKTsKKwkJCQkiMDQxMSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgaGJxaW5mb1xuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCkBAIC05MDIsNyArMTE2MCw3IEBACiAJCQkJIHBoYmEsICZscGZjX2RlYnVnZnNfb3BfZHVtcEhCQVNsaW0pOwogCQlpZiAoIXBoYmEtPmRlYnVnX2R1bXBIQkFTbGltKSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGR1bXBIQkFTbGltXG4iKTsKKwkJCQkiMDQxMyBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZHVtcEhCQVNsaW1cbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIApAQCAtOTE0LDcgKzExNzIsNyBAQAogCQkJCSBwaGJhLCAmbHBmY19kZWJ1Z2ZzX29wX2R1bXBIb3N0U2xpbSk7CiAJCWlmICghcGhiYS0+ZGVidWdfZHVtcEhvc3RTbGltKSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGR1bXBIb3N0U2xpbVxuIik7CisJCQkJIjA0MTQgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGR1bXBIb3N0U2xpbVxuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCkBAIC05NDQsNyArMTIwMiw3IEBACiAJCQkJIHBoYmEsICZscGZjX2RlYnVnZnNfb3Bfc2xvd19yaW5nX3RyYyk7CiAJCWlmICghcGhiYS0+ZGVidWdfc2xvd19yaW5nX3RyYykgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCQkJICIwNDE1IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCiAJCQkJCSAic2xvd19yaW5nX3RyYWNlXG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CkBAIC05NTUsNyArMTIxMyw3IEBACiAJCQkJR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXBoYmEtPnNsb3dfcmluZ190cmMpIHsKIAkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCQkJCSAiMDQxNiBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgogCQkJCQkJICJzbG93X3JpbmcgYnVmZmVyXG4iKTsKIAkJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJCX0KQEAgLTk3Miw3ICsxMjMwLDcgQEAKIAkJCWRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBwaGJhLT5oYmFfZGVidWdmc19yb290KTsKIAkJaWYgKCF2cG9ydC0+dnBvcnRfZGVidWdmc19yb290KSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSAiMDQwOSBDYW50IGNyZWF0ZSBkZWJ1Z2ZzIik7CisJCQkJCSAiMDQxNyBDYW50IGNyZWF0ZSBkZWJ1Z2ZzIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCQlhdG9taWNfaW5jKCZwaGJhLT5kZWJ1Z2ZzX3Zwb3J0X2NvdW50KTsKQEAgLTEwMDEsNyArMTI1OSw3IEBACiAKIAlpZiAoIXZwb3J0LT5kaXNjX3RyYykgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyBkaXNjIHRyYWNlICIKKwkJCQkgIjA0MTggQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpc2MgdHJhY2UgIgogCQkJCSAiYnVmZmVyXG4iKTsKIAkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJfQpAQCAtMTAxNCw3ICsxMjcyLDcgQEAKIAkJCQkgdnBvcnQsICZscGZjX2RlYnVnZnNfb3BfZGlzY190cmMpOwogCWlmICghdnBvcnQtPmRlYnVnX2Rpc2NfdHJjKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCQkgIjA0MTkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKIAkJCQkgImRpc2NvdmVyeV90cmFjZVxuIik7CiAJCWdvdG8gZGVidWdfZmFpbGVkOwogCX0KQEAgLTEwMzMsNyArMTI5MSwxNyBAQAogI2VuZGlmCiB9CiAKLQorLyoqCisgKiBscGZjX2RlYnVnZnNfdGVybWluYXRlIC0gIFRlYXIgZG93biBkZWJ1Z2ZzIGluZnJhc3RydWN0dXJlIGZvciB0aGlzIHZwb3J0LgorICogQHZwb3J0OiBUaGUgdnBvcnQgcG9pbnRlciB0byByZW1vdmUgZnJvbSBkZWJ1Z2ZzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogV2hlbiBEZWJ1Z2ZzIGlzIGNvbmZpZ3VyZWQgdGhpcyByb3V0aW5lIHJlbW92ZXMgZGVidWdmcyBmaWxlIHN5c3RlbSBlbGVtZW50cworICogdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhpcyB2cG9ydC4gSXQgYWxzbyBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkKKyAqIHVzZXJzIGxlZnQgZm9yIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgSEJBIGFuZCBkcml2ZXIuIElmCisgKiB0aGlzIGlzIHRoZSBsYXN0IHVzZXIgb2YgdGhlIEhCQSBkaXJlY3Rvcnkgb3IgZHJpdmVyIGRpcmVjdG9yeSB0aGVuIGl0IHdpbGwKKyAqIHJlbW92ZSB0aG9zZSBmcm9tIHRoZSBkZWJ1Z2ZzIGluZnJhc3RydWN0dXJlIGFzIHdlbGwuCisgKiovCiBpbmxpbmUgdm9pZAogbHBmY19kZWJ1Z2ZzX3Rlcm1pbmF0ZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xMDk2LDUgKzEzNjQsMyBAQAogI2VuZGlmCiAJcmV0dXJuOwogfQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKaW5kZXggMmRiMGI3NC4uZjI5ZTU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAlMUEZDX0VWVF9LSUxMLAogCUxQRkNfRVZUX0VMU19SRVRSWSwKIAlMUEZDX0VWVF9ERVZfTE9TUywKKwlMUEZDX0VWVF9GQVNUUEFUSF9NR01UX0VWVCwKIH07CiAKIC8qIHN0cnVjdHVyZSB1c2VkIHRvIHF1ZXVlIGV2ZW50IHRvIHRoZSBkaXNjb3ZlcnkgdGFza2xldCAqLwpAQCAtNDcsNiArNDgsMjQgQEAKIAllbnVtIGxwZmNfd29ya190eXBlICAgZXZ0OwogfTsKIAorc3RydWN0IGxwZmNfc2NzaV9jaGVja19jb25kaXRpb25fZXZlbnQ7CitzdHJ1Y3QgbHBmY19zY3NpX3ZhcnF1ZXVlZGVwdGhfZXZlbnQ7CitzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlcjsKK3N0cnVjdCBscGZjX2ZhYnJpY19ldmVudF9oZWFkZXI7CitzdHJ1Y3QgbHBmY19mY3ByZGNoa2Vycl9ldmVudDsKKworLyogc3RydWN0dXJlIHVzZWQgZm9yIHNlbmRpbmcgZXZlbnRzIGZyb20gZmFzdCBwYXRoICovCitzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgeworCXN0cnVjdCBscGZjX3dvcmtfZXZ0IHdvcmtfZXZ0OworCXN0cnVjdCBscGZjX3Zwb3J0ICAgICAqdnBvcnQ7CisJdW5pb24geworCQlzdHJ1Y3QgbHBmY19zY3NpX2NoZWNrX2NvbmRpdGlvbl9ldmVudCBjaGVja19jb25kX2V2dDsKKwkJc3RydWN0IGxwZmNfc2NzaV92YXJxdWV1ZWRlcHRoX2V2ZW50IHF1ZXVlX2RlcHRoX2V2dDsKKwkJc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgc2NzaV9ldnQ7CisJCXN0cnVjdCBscGZjX2ZhYnJpY19ldmVudF9oZWFkZXIgZmFicmljX2V2dDsKKwkJc3RydWN0IGxwZmNfZmNwcmRjaGtlcnJfZXZlbnQgcmVhZF9jaGVja19lcnJvcjsKKwl9IHVuOworfTsKIAogc3RydWN0IGxwZmNfbm9kZWxpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQgbmxwX2xpc3RwOwpAQCAtODgsNiArMTA3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBsYXN0X3JhbXBfdXBfdGltZTsgICAgICAgIC8qIGppZmZ5IG9mIGxhc3QgcmFtcCB1cCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9xX2Z1bGxfdGltZTsJCS8qIGppZmZ5IG9mIGxhc3QgcXVldWUgZnVsbCAqLwogCXN0cnVjdCBrcmVmICAgICBrcmVmOworCWF0b21pY190IGNtZF9wZW5kaW5nOworCXVpbnQzMl90IGNtZF9xZGVwdGg7CisJdW5zaWduZWQgbG9uZyBsYXN0X2NoYW5nZV90aW1lOworCXN0cnVjdCBscGZjX3Njc2ljbWRfYmt0ICpsYXRfZGF0YTsJLyogTGF0ZW5jeSBkYXRhICovCiB9OwogCiAvKiBEZWZpbmVzIGZvciBubHBfZmxhZyAodWludDMyKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggZjU0ZTBmNy4uNjMwYmQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNTMsNiArNTQsMjggQEAKIAogc3RhdGljIGludCBscGZjX21heF9lbHNfdHJpZXMgPSAzOwogCisvKioKKyAqIGxwZmNfZWxzX2Noa19sYXR0OiBDaGVjayBob3N0IGxpbmsgYXR0ZW50aW9uIGV2ZW50IGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgaG9zdCBsaW5rCisgKiBhdHRlbnRpb24gZXZlbnQgZHVyaW5nIHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyB3aXRoIHRoZSBAdnBvcnQuIEl0IGlzIGRvbmUKKyAqIGJ5IHJlYWRpbmcgdGhlIEhCQSdzIEhvc3QgQXR0ZW50aW9uIChIQSkgcmVnaXN0ZXIuIElmIHRoZXJlIGlzIGFueSBob3N0CisgKiBsaW5rIGF0dGVudGlvbiBldmVudHMgZHVyaW5nIHRoaXMgQHZwb3J0J3MgZGlzY292ZXJ5IHByb2Nlc3MsIHRoZSBAdnBvcnQKKyAqIHNoYWxsIGJlIG1hcmtlZCBhcyBGQ19BQk9SVF9ESVNDT1ZFUlksIGEgaG9zdCBsaW5rIGF0dGVudGlvbiBjbGVhciBzaGFsbAorICogYmUgaXNzdWVkIGlmIHRoZSBsaW5rIHN0YXRlIGlzIG5vdCBhbHJlYWR5IGluIGhvc3QgbGluayBjbGVhcmVkIHN0YXRlLAorICogYW5kIGEgcmV0dXJuIGNvZGUgc2hhbGwgaW5kaWNhdGUgd2hldGhlciB0aGUgaG9zdCBsaW5rIGF0dGVudGlvbiBldmVudAorICogaGFkIGhhcHBlbmVkLgorICoKKyAqIE5vdGUgdGhhdCwgaWYgZWl0aGVyIHRoZSBob3N0IGxpbmsgaXMgaW4gc3RhdGUgTFBGQ19MSU5LX0RPV04gb3IgQHZwb3J0CisgKiBzdGF0ZSBpbiBMUEZDX1ZQT1JUX1JFQURZLCB0aGUgcmVxdWVzdCBmb3IgY2hlY2tpbmcgaG9zdCBsaW5rIGF0dGVudGlvbgorICogZXZlbnQgd2lsbCBiZSBpZ25vcmVkIGFuZCBhIHJldHVybiBjb2RlIHNoYWxsIGluZGljYXRlIG5vIGhvc3QgbGluaworICogYXR0ZW50aW9uIGV2ZW50IGhhZCBoYXBwZW5lZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIG5vIGhvc3QgbGluayBhdHRlbnRpb24gZXZlbnQgaGFwcGVuZWQKKyAqICAgMSAtIGhvc3QgbGluayBhdHRlbnRpb24gZXZlbnQgaGFwcGVuZWQKKyAqKi8KIGludAogbHBmY19lbHNfY2hrX2xhdHQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtOTIsNiArMTE1LDM0IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19wcmVwX2Vsc19pb2NiOiBBbGxvY2F0ZSBhbmQgcHJlcGFyZSBhIGxwZmMgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZXhwZWN0UnNwOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciByZXNwb25zZSBpcyBleHBlY3RlZC4KKyAqIEBjbWRTaXplOiBzaXplIG9mIHRoZSBFTFMgY29tbWFuZC4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQiB3aGVuIGl0IGZhaWxzLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGlkOiBkZXN0aW5hdGlvbiBpZGVudGlmaWVyLgorICogQGVsc2NtZDogdGhlIEVMUyBjb21tYW5kIGNvZGUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgYSBscGZjLUlPQ0IgZGF0YSBzdHJ1Y3R1cmUgZnJvbQorICogdGhlIGRyaXZlciBscGZjLUlPQ0IgZnJlZS1saXN0IGFuZCBwcmVwYXJlIHRoZSBJT0NCIHdpdGggdGhlIHBhcmFtZXRlcnMKKyAqIHBhc3NlZCBpbnRvIHRoZSByb3V0aW5lIGZvciBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZSB0byBpc3N1ZSBhbiBFeHRlbmRlZAorICogTGluayBTZXJ2aWNlIChFTFMpIGNvbW1hbmRzLiBJdCBpcyBhIGdlbmVyaWMgbHBmYy1JT0NCIGFsbG9jYXRpb24KKyAqIGFuZCBwcmVwYXJhdGlvbiByb3V0aW5lIHRoYXQgaXMgdXNlZCBieSBhbGwgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lCisgKiByb3V0aW5lcyBhbmQgdGhlIEVMUyBjb21tYW5kLXNwZWNpZmljIGZpZWxkcyB3aWxsIGJlIGxhdGVyIHNldCB1cCBieQorICogdGhlIGluZGl2aWR1YWwgZGlzY292ZXJ5IG1hY2hpbmUgcm91dGluZXMgYWZ0ZXIgY2FsbGluZyB0aGlzIHJvdXRpbmUKKyAqIGFsbG9jYXRpbmcgYW5kIHByZXBhcmluZyBhIGdlbmVyaWMgSU9DQiBkYXRhIHN0cnVjdHVyZS4gSXQgZmlsbHMgaW4gdGhlCisgKiBCdWZmZXIgRGVzY3JpcHRvciBFbnRyaWVzIChCREVzKSwgYWxsb2NhdGVzIGJ1ZmZlcnMgZm9yIGJvdGggY29tbWFuZAorICogcGF5bG9hZCBhbmQgcmVzcG9uc2UgcGF5bG9hZCAoaWYgZXhwZWN0ZWQpLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZQorICogbmRscCBpcyBpbmNyZW1lbnRlZCBieSAxIGFuZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZGxwIGlzIHB1dCBpbnRvCisgKiBjb250ZXh0MSBvZiB0aGUgSU9DQiBkYXRhIHN0cnVjdHVyZSBmb3IgdGhpcyBJT0NCIHRvIGhvbGQgdGhlIG5kbHAKKyAqIHJlZmVyZW5jZSBmb3IgdGhlIGNvbW1hbmQncyBjYWxsYmFjayBmdW5jdGlvbiB0byBhY2Nlc3MgbGF0ZXIuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgUG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkL3ByZXBhcmVkIGVscyBpb2NiIGRhdGEgc3RydWN0dXJlCisgKiAgIE5VTEwgLSB3aGVuIGVscyBpb2NiIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vcHJlcGFyYXRpb24gZmFpbGVkCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19wcmVwX2Vsc19pb2NiKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDhfdCBleHBlY3RSc3AsCiAJCSAgIHVpbnQxNl90IGNtZFNpemUsIHVpbnQ4X3QgcmV0cnksCkBAIC0xNTAsNyArMjAxLDcgQEAKIAogCWljbWQtPnVuLmVsc3JlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwYnVmbGlzdC0+cGh5cyk7CiAJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhwYnVmbGlzdC0+cGh5cyk7Ci0JaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JETDsKKwlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OwogCWljbWQtPnVuLmVsc3JlcTY0LnJlbW90ZUlEID0gZGlkOwkvKiBESUQgKi8KIAlpZiAoZXhwZWN0UnNwKSB7CiAJCWljbWQtPnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplID0gKDIgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpOwpAQCAtMTg1LDcgKzIzNiw3IEBACiAJCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHByc3AtPnBoeXMpKTsKIAkJYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwcnNwLT5waHlzKSk7CiAJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IEZDRUxTU0laRTsKLQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVVNFX1JDVjsKKwkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CiAJCWJwbC0+dHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKIAl9CiAKQEAgLTIzMyw2ICsyODQsMjIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2ZhYnJpY19yZWdsb2dpbjogSXNzdWUgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbiBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4gZm9yIGEgQHZwb3J0LiBBbgorICogYWN0aXZlIG5kbHAgbm9kZSB3aXRoIEZhYnJpY19ESUQgbXVzdCBhbHJlYWR5IGV4aXN0IGZvciB0aGlzIEB2cG9ydC4KKyAqIFRoZSByb3V0aW5lIGludm9rZXMgdHdvIG1haWxib3ggY29tbWFuZHMgdG8gY2Fycnkgb3V0IGZhYnJpYyByZWdpc3RyYXRpb24KKyAqIGxvZ2luIHRocm91Z2ggdGhlIEhCQSBmaXJtd2FyZTogdGhlIGZpcnN0IG1haWxib3ggY29tbWFuZCByZXF1ZXN0cyB0aGUKKyAqIEhCQSB0byBwZXJmb3JtIGxpbmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIEB2cG9ydDsgYW5kIHRoZSBzZWNvbmQgbWFpbGJveAorICogY29tbWFuZCByZXF1ZXN0cyB0aGUgSEJBIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luCisgKiB3aXRoIHRoZSBAdnBvcnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbiBmb3IgQHZwb3J0CisgKiAgIC1FTlhJTyAtLSBmYWlsZWQgdG8gaXNzdWUgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbiBmb3IgQHZwb3J0CisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2ZhYnJpY19yZWdsb2dpbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zMTMsNiArMzgwLDI2IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2Zsb2dpX2ZhYnJpYzogQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZmxvZ2kgdG8gYSBmYWJyaWMgcG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBzcDogcG9pbnRlciB0byBzZXJ2aWNlIHBhcmFtZXRlciBkYXRhIHN0cnVjdHVyZS4KKyAqIEBpcnNwOiBwb2ludGVyIHRvIHRoZSBJT0NCIHdpdGhpbiB0aGUgbHBmYyByZXNwb25zZSBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSBscGZjX2NtcGxfZWxzX2Zsb2dpKCkgY29tcGxldGlvbiBjYWxsYmFjaworICogZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21wbGV0aW9uIG9mIGEgRmFicmljIExvZ2luIChGTE9HSSkgaW50byBhIGZhYnJpYworICogcG9ydCBpbiBhIGZhYnJpYyB0b3BvbG9neS4gSXQgcHJvcGVybHkgc2V0cyB1cCB0aGUgcGFyYW1ldGVycyB0byB0aGUgQG5kbHAKKyAqIGZyb20gdGhlIElPQ0IgcmVzcG9uc2UuIEl0IGFsc28gY2hlY2sgdGhlIG5ld2x5IGFzc2lnbmVkIE5fUG9ydCBJRCB0byB0aGUKKyAqIEB2cG9ydCBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGFzc2lnbmVkIE5fUG9ydCBJRC4gSWYgaXQgaXMgZGlmZmVyZW50IGZyb20KKyAqIHRoZSBwcmV2aW91c2x5IGFzc2lnbmVkIERlc3RpbmF0aW9uIElEIChESUQpLCB0aGUgbHBmY191bnJlZ19ycGkoKSByb3V0aW5lCisgKiBpcyBpbnZva2VkIG9uIGFsbCB0aGUgcmVtYWluaW5nIG5vZGVzIHdpdGggdGhlIEB2cG9ydCB0byB1bnJlZ2lzdGVyIHRoZQorICogUmVtb3RlIFBvcnQgSW5kaWNhdG9ycyAoUlBJcykuIEZpbmFsbHksIHRoZSBscGZjX2lzc3VlX2ZhYnJpY19yZWdsb2dpbigpCisgKiBpcyBpbnZva2VkIHRvIHJlZ2lzdGVyIGxvZ2luIHRvIHRoZSBmYWJyaWMuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3MgKGN1cnJlbnRseSwgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19jbXBsX2Vsc19mbG9naV9mYWJyaWMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJCSAgIHN0cnVjdCBzZXJ2X3Bhcm0gKnNwLCBJT0NCX3QgKmlyc3ApCkBAIC0zODcsNyArNDc0LDcgQEAKIAkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgbmV4dF9ucCwKIAkJCQkJJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7Ci0JCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobnApKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKChucC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTlBSX05PREUpIHx8CiAJCQkJICAgIShucC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSkKQEAgLTQxNiw5ICs1MDMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFdlIEZMT0dJZWQgaW50byBhbiBOUG9ydCwgaW5pdGlhdGUgcHQycHQgcHJvdG9jb2wKLSAqLworLyoqCisgKiBscGZjX2NtcGxfZWxzX2Zsb2dpX25wb3J0OiBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmbG9naSB0byBhbiBOX1BvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAc3A6IHBvaW50ZXIgdG8gc2VydmljZSBwYXJhbWV0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIGxwZmNfY21wbF9lbHNfZmxvZ2koKSBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNvbXBsZXRpb24gb2YgYSBGYWJyaWMgTG9naW4gKEZMT0dJKSBpbnRvIGFuIE5fUG9ydAorICogaW4gYSBwb2ludC10by1wb2ludCB0b3BvbG9neS4gRmlyc3QsIHRoZSBAdnBvcnQncyBOX1BvcnQgTmFtZSBpcyBjb21wYXJlZAorICogd2l0aCB0aGUgcmVjZWl2ZWQgTl9Qb3J0IE5hbWU6IGlmIHRoZSBAdnBvcnQncyBOX1BvcnQgTmFtZSBpcyBncmVhdGVyIHRoYW4KKyAqIHRoZSByZWNlaXZlZCBOX1BvcnQgTmFtZSBsZXhpY29ncmFwaGljYWxseSwgdGhpcyBub2RlIHNoYWxsIGFzc2lnbiBsb2NhbAorICogTl9Qb3J0IElEIChQVDJQVF9Mb2NhbElEOiAxKSBhbmQgcmVtb3RlIE5fUG9ydCBJRCAoUFQyUFRfUmVtb3RlSUQ6IDIpIGFuZAorICogd2lsbCBzZW5kIG91dCBQb3J0IExvZ2luIChQTE9HSSkgd2l0aCB0aGUgTl9Qb3J0IElEcyBhc3NpZ25lZC4gT3RoZXJ3aXNlLAorICogdGhpcyBub2RlIHNoYWxsIGp1c3Qgd2FpdCBmb3IgdGhlIHJlbW90ZSBub2RlIHRvIGlzc3VlIFBMT0dJIGFuZCBhc3NpZ24KKyAqIE5fUG9ydCBJRHMuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3MKKyAqICAgLUVOWElPIC0gRmFpbAorICoqLwogc3RhdGljIGludAogbHBmY19jbXBsX2Vsc19mbG9naV9ucG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkJICBzdHJ1Y3Qgc2Vydl9wYXJtICpzcCkKQEAgLTUxNiw2ICs2MjAsMjkgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfZmxvZ2k6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGZsb2dpLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIHRvcC1sZXZlbCBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBpc3N1aW5nCisgKiBhIEZhYnJpYyBMb2dpbiAoRkxPR0kpIGNvbW1hbmQuIElmIHRoZSByZXNwb25zZSBJT0NCIHJlcG9ydGVkIGVycm9yLAorICogdGhlIGxwZmNfZWxzX3JldHJ5KCkgcm91dGluZSBzaGFsbCBiZSBpbnZva2VkIHRvIHJldHJ5IHRoZSBGTE9HSS4gSWYKKyAqIHJldHJ5IGhhcyBiZWVuIG1hZGUgKGVpdGhlciBpbW1lZGlhdGVseSBvciBkZWxheWVkIHdpdGggbHBmY19lbHNfcmV0cnkoKQorICogcmV0dXJuaW5nIDEpLCB0aGUgY29tbWFuZCBJT0NCIHdpbGwgYmUgcmVsZWFzZWQgYW5kIGZ1bmN0aW9uIHJldHVybmVkLgorICogSWYgdGhlIHJldHJ5IGF0dGVtcHQgaGFzIGJlZW4gZ2l2ZW4gdXAgKHBvc3NpYmx5IHJlYWNoIHRoZSBtYXhpbXVtCisgKiBudW1iZXIgb2YgcmV0cmllcyksIG9uZSBhZGRpdGlvbmFsIGRlY3JlbWVudCBvZiBuZGxwIHJlZmVyZW5jZSBzaGFsbCBiZQorICogaW52b2tlZCBiZWZvcmUgZ29pbmcgb3V0IGFmdGVyIHJlbGVhc2luZyB0aGUgY29tbWFuZCBJT0NCLiBUaGlzIHdpbGwKKyAqIGFjdHVhbGx5IHJlbGVhc2UgdGhlIHJlbW90ZSBub2RlIChOb3RlLCBscGZjX2Vsc19mcmVlX2lvY2IoKSB3aWxsIGFsc28KKyAqIGludm9rZSBvbmUgZGVjcmVtZW50IG9mIG5kbHAgcmVmZXJlbmNlIGNvdW50KS4gSWYgbm8gZXJyb3IgcmVwb3J0ZWQgaW4KKyAqIHRoZSBJT0NCIHN0YXR1cywgdGhlIGNvbW1hbmQgUG9ydCBJRCBmaWVsZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyCisgKiB0aGlzIGlzIGEgcG9pbnQtdG8tcG9pbnQgdG9wb2xvZ3kgb3IgYSBmYWJyaWMgdG9wb2xvZ3k6IGlmIHRoZSBQb3J0IElECisgKiBmaWVsZCBpcyBhc3NpZ25lZCwgaXQgaXMgYSBmYWJyaWMgdG9wb2xvZ3k7IG90aGVyd2lzZSwgaXQgaXMgYQorICogcG9pbnQtdG8tcG9pbnQgdG9wb2xvZ3kuIFRoZSByb3V0aW5lIGxwZmNfY21wbF9lbHNfZmxvZ2lfZmFicmljKCkgb3IKKyAqIGxwZmNfY21wbF9lbHNfZmxvZ2lfbnBvcnQoKSBzaGFsbCBiZSBpbnZva2VkIGFjY29yZGluZ2x5IHRvIGhhbmRsZSB0aGUKKyAqIHNwZWNpZmljIHRvcG9sb2d5IGNvbXBsZXRpb24gY29uZGl0aW9ucy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2Zsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTYxOCw2ICs3NDUsMjggQEAKIAlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYik7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfZmxvZ2k6IElzc3VlIGFuIGZsb2dpIGlvY2IgY29tbWFuZCBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgRmFicmljIExvZ2luIChGTE9HSSkgUmVxdWVzdCBFTFMgY29tbWFuZAorICogZm9yIGEgQHZwb3J0LiBUaGUgaW5pdGlhdG9yIHNlcnZpY2UgcGFyYW1ldGVycyBhcmUgcHV0IGludG8gdGhlIHBheWxvYWQKKyAqIG9mIHRoZSBGTE9HSSBSZXF1ZXN0IElPQ0IgYW5kIHRoZSB0b3AtbGV2ZWwgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlcgorICogdG8gbHBmY19jbXBsX2Vsc19mbG9naSgpIHJvdXRpbmUgaXMgcHV0IHRvIHRoZSBJT0NCIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGZpZWxkLiBUaGUgbHBmY19pc3N1ZV9mYWJyaWNfaW9jYiByb3V0aW5lIGlzIGludm9rZWQgdG8gc2VuZAorICogb3V0IEZMT0dJIEVMUyBjb21tYW5kIHdpdGggb25lIG91dHN0YW5kaW5nIGZhYnJpYyBJT0NCIGF0IGEgdGltZS4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEZMT0dJIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGZsb2dpIGlvY2IgZm9yIEB2cG9ydAorICogICAxIC0gZmFpbGVkIHRvIGlzc3VlIGZsb2dpIGlvY2IgZm9yIEB2cG9ydAorICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9lbHNfZmxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJICAgICB1aW50OF90IHJldHJ5KQpAQCAtNjk0LDYgKzg0MywyMCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2Fib3J0X2Zsb2dpOiBBYm9ydCBhbGwgb3V0c3RhbmRpbmcgZmxvZ2kgaW9jYnMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnRzIGFsbCB0aGUgb3V0c3RhbmRpbmcgRmFicmljIExvZ2luIChGTE9HSSkgSU9DQnMKKyAqIHdpdGggYSBAcGhiYS4gVGhpcyByb3V0aW5lIHdhbGtzIGFsbCB0aGUgb3V0c3RhbmRpbmcgSU9DQnMgb24gdGhlIHR4Y21wbHEKKyAqIGxpc3QgYW5kIGlzc3VlcyBhbiBhYm9ydCBJT0NCIGNvbW1vbmQgb24gZWFjaCBvdXRzdGFuZGluZyBJT0NCIHRoYXQKKyAqIGNvbnRhaW5zIGEgYWN0aXZlIEZhYnJpY19ESUQgbmRscC4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdG8gaXNzdWUKKyAqIHRoZSBhYm9ydCBJT0NCIGNvbW1hbmQgb24gYWxsIHRoZSBvdXRzdGFuZGluZyBJT0NCcywgdGh1cyB3aGVuIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMsIGl0IGRvZXMgbm90IGd1YXJhbnRlZSBhbGwgdGhlIElPQ0JzIGFyZSBhY3R1YWxseSBhYm9ydGVkLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNlc3NmdWxseSBpc3N1ZWQgYWJvcnQgaW9jYiBvbiBhbGwgb3V0c3RhbmRpbmcgZmxvZ2lzIChBbHdheXMgMCkKKyAqKi8KIGludAogbHBmY19lbHNfYWJvcnRfZmxvZ2koc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNzI5LDYgKzg5MiwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfaW5pdGlhbF9mbG9naTogSXNzdWUgYW4gaW5pdGlhbCBmYWJyaWMgbG9naW4gZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYW4gaW5pdGlhbCBGYWJyaWMgTG9naW4gKEZMT0dJKSBmb3IgdGhlIEB2cG9ydAorICogc3BlY2lmaWVkLiBJdCBmaXJzdCBzZWFyY2hlcyB0aGUgbmRscCB3aXRoIHRoZSBGYWJyaWNfRElEICgweGZmZmZmZSkgZnJvbQorICogdGhlIEB2cG9ydCdzIG5kbHAgbGlzdC4gSWYgbm8gc3VjaCBuZGxwIGZvdW5kLCBpdCB3aWxsIGNyZWF0ZSBhbiBuZGxwIGFuZAorICogcHV0IGl0IGludG8gdGhlIEB2cG9ydCdzIG5kbHAgbGlzdC4gSWYgYW4gaW5hY3RpdmUgbmRscCBmb3VuZCBvbiB0aGUgbGlzdCwKKyAqIGl0IHdpbGwganVzdCBiZSBlbmFibGVkIGFuZCBtYWRlIGFjdGl2ZS4gVGhlIGxwZmNfaXNzdWVfZWxzX2Zsb2dpKCkgcm91dGluZQorICogaXMgdGhlbiBpbnZva2VkIHdpdGggdGhlIEB2cG9ydCBhbmQgdGhlIG5kbHAgdG8gcGVyZm9ybSB0aGUgRkxPR0kgZm9yIHRoZQorICogQHZwb3J0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBmYWlsZWQgdG8gaXNzdWUgaW5pdGlhbCBmbG9naSBmb3IgQHZwb3J0CisgKiAgIDEgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGluaXRpYWwgZmxvZ2kgZm9yIEB2cG9ydAorICoqLwogaW50CiBscGZjX2luaXRpYWxfZmxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNzY0LDYgKzk0MywyMiBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfaW5pdGlhbF9mZGlzYzogSXNzdWUgYW4gaW5pdGlhbCBmYWJyaWMgZGlzY292ZXJ5IGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGFuIGluaXRpYWwgRmFicmljIERpc2NvdmVyIChGRElTQykgZm9yIHRoZSBAdnBvcnQKKyAqIHNwZWNpZmllZC4gSXQgZmlyc3Qgc2VhcmNoZXMgdGhlIG5kbHAgd2l0aCB0aGUgRmFicmljX0RJRCAoMHhmZmZmZmUpIGZyb20KKyAqIHRoZSBAdnBvcnQncyBuZGxwIGxpc3QuIElmIG5vIHN1Y2ggbmRscCBmb3VuZCwgaXQgd2lsbCBjcmVhdGUgYW4gbmRscCBhbmQKKyAqIHB1dCBpdCBpbnRvIHRoZSBAdnBvcnQncyBuZGxwIGxpc3QuIElmIGFuIGluYWN0aXZlIG5kbHAgZm91bmQgb24gdGhlIGxpc3QsCisgKiBpdCB3aWxsIGp1c3QgYmUgZW5hYmxlZCBhbmQgbWFkZSBhY3RpdmUuIFRoZSBscGZjX2lzc3VlX2Vsc19mZGlzYygpIHJvdXRpbmUKKyAqIGlzIHRoZW4gaW52b2tlZCB3aXRoIHRoZSBAdnBvcnQgYW5kIHRoZSBuZGxwIHRvIHBlcmZvcm0gdGhlIEZESVNDIGZvciB0aGUKKyAqIEB2cG9ydC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gZmFpbGVkIHRvIGlzc3VlIGluaXRpYWwgZmRpc2MgZm9yIEB2cG9ydAorICogICAxIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBpbml0aWFsIGZkaXNjIGZvciBAdnBvcnQKKyAqKi8KIGludAogbHBmY19pbml0aWFsX2ZkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTc5Nyw2ICs5OTIsMTcgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX21vcmVfcGxvZ2k6IENoZWNrIGFuZCBpc3N1ZSByZW1haW5pbmcgcGxvZ2lzIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgcmVtYWluaW5nIFBvcnQgTG9naW5zCisgKiAoUExPR0kpIHRvIGJlIGlzc3VlZCBmb3IgdGhlIEB2cG9ydC4gSWYgc28sIGl0IHdpbGwgaW52b2tlIHRoZSByb3V0aW5lCisgKiBscGZjX2Vsc19kaXNjX3Bsb2dpKCkgdG8gZ28gdGhyb3VnaCB0aGUgTm9kZSBQb3J0IFJlY292ZXJ5IChOUFIpIG5vZGVzCisgKiB0byBpc3N1ZSBFTFMgUExPR0lzIHVwIHRvIHRoZSBjb25maWd1cmVkIGRpc2NvdmVyIHRocmVhZHMgd2l0aCB0aGUKKyAqIEB2cG9ydCAoQHZwb3J0LT5jZmdfZGlzY292ZXJ5X3RocmVhZHMpLiBUaGUgZnVuY3Rpb24gYWxzbyBkZWNyZW1lbnQKKyAqIHRoZSBAdnBvcnQncyBudW1fZGlzY19ub2RlIGJ5IDEgaWYgaXQgaXMgbm90IGFscmVhZHkgMC4KKyAqKi8KIHZvaWQKIGxwZmNfbW9yZV9wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC04MTksNiArMTAyNSwzNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQ6IENvbmZpcm0gcG9sb2dpIHd3cG4gbWF0Y2hlcyBzdG9yZWQgbmRscC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHByc3A6IHBvaW50ZXIgdG8gcmVzcG9uc2UgSU9DQiBwYXlsb2FkLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyBhbmQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFdXUE4gb2YgYW4gTl9Qb3J0LCByZXRyaWV2ZWQKKyAqIGZyb20gYSBQTE9HSSwgbWF0Y2hlcyB0aGUgV1dQTiB0aGF0IGlzIHN0b3JlZCBpbiB0aGUgQG5kbHAgZm9yIHRoYXQgTl9QT3J0LgorICogVGhlIGZvbGxvd2luZyBjYXNlcyBhcmUgY29uc2lkZXJlZCBOX1BvcnQgY29uZmlybWVkOgorICogMSkgVGhlIE5fUG9ydCBpcyBhIEZhYnJpYyBuZGxwOyAyKSBUaGUgQG5kbHAgaXMgb24gdnBvcnQgbGlzdCBhbmQgbWF0Y2hlcworICogdGhlIFdXUE4gb2YgdGhlIE5fUG9ydCBsb2dnZWQgaW50bzsgMykgVGhlIEBuZGxwIGlzIG5vdCBvbiB2cG9ydCBsaXN0IGJ1dAorICogaXQgZG9lcyBub3QgaGF2ZSBXV1BOIGFzc2lnbmVkIGVpdGhlci4gSWYgdGhlIFdXUE4gaXMgY29uZmlybWVkLCB0aGUKKyAqIHBvaW50ZXIgdG8gdGhlIEBuZGxwIHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSBXV1BOIGlzIG5vdCBjb25maXJtZWQ6CisgKiAxKSBpZiB0aGVyZSBpcyBhIG5vZGUgb24gdnBvcnQgbGlzdCBvdGhlciB0aGFuIHRoZSBAbmRscCB3aXRoIHRoZSBzYW1lCisgKiBXV1BOIG9mIHRoZSBOX1BvcnQgUExPR0kgbG9nZ2VkIGludG8sIHRoZSBscGZjX3VucmVnX3JwaSgpIHdpbGwgYmUgaW52b2tlZAorICogb24gdGhhdCBub2RlIHRvIHJlbGVhc2UgdGhlIFJQSSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGU7IDIpIGlmIHRoZXJlIGlzCisgKiBubyBub2RlIGZvdW5kIG9uIHZwb3J0IGxpc3Qgd2l0aCB0aGUgc2FtZSBXV1BOIG9mIHRoZSBOX1BvcnQgUExPR0kgbG9nZ2VkCisgKiBpbnRvLCBhIG5ldyBub2RlIHNoYWxsIGJlIGFsbG9jYXRlZCAob3IgYWN0aXZhdGVkKS4gSW4gZWl0aGVyIGNhc2UsIHRoZQorICogcGFyYW1ldGVycyBvZiB0aGUgQG5kbHAgc2hhbGwgYmUgY29waWVkIHRvIHRoZSBuZXdfbmRscCwgdGhlIEBuZGxwIHNoYWxsCisgKiBiZSByZWxlYXNlZCBhbmQgdGhlIG5ld19uZGxwIHNoYWxsIGJlIHB1dCBvbiB0byB0aGUgdnBvcnQgbm9kZSBsaXN0IGFuZAorICogaXRzIHBvaW50ZXIgcmV0dXJuZWQgYXMgdGhlIGNvbmZpcm1lZCBub2RlLgorICoKKyAqIE5vdGUgdGhhdCBiZWZvcmUgdGhlIEBuZGxwIGdvdCAicmVsZWFzZWQiLCB0aGUga2VlcERJRCBmcm9tIG5vdC1tYXRjaGluZworICogb3IgaW5hY3RpdmUgIm5ld19uZGxwIiBvbiB0aGUgdnBvcnQgbm9kZSBsaXN0IGlzIGFzc2lnbmVkIHRvIHRoZSBubHBfRElECisgKiBvZiB0aGUgQG5kbHAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcmVsZWFzZSBvZiBAbmRscCBpcyBhY3R1YWxseSB0byBwdXQgaXQKKyAqIGludG8gYW4gaW5hY3RpdmUgc3RhdGUgb24gdGhlIHZwb3J0IG5vZGUgbGlzdCBhbmQgdGhlIHZwb3J0IG5vZGUgbGlzdAorICogbWFuYWdlbWVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3cgdHdvIG5vZGUgd2l0aCBhIHNhbWUgRElELgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIHBvaW50ZXIgdG8gdGhlIFBMT0dJIE5fUG9ydCBAbmRscAorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX25vZGVsaXN0ICoKIGxwZmNfcGxvZ2lfY29uZmlybV9ucG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90ICpwcnNwLAogCQkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtOTIyLDYgKzExNTksMTcgQEAKIAlyZXR1cm4gbmV3X25kbHA7CiB9CiAKKy8qKgorICogbHBmY19lbmRfcnNjbjogQ2hlY2sgYW5kIGhhbmRsZSBtb3JlIHJzY24gZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3Mgd2hldGhlciBtb3JlIFJlZ2lzdHJhdGlvbiBTdGF0ZSBDaGFuZ2UKKyAqIE5vdGlmaWNhdGlvbnMgKFJTQ05zKSBjYW1lIGluIHdoaWxlIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZSB3YXMgaW4KKyAqIHRoZSBGQ19SU0NOX01PREUuIElmIHNvLCB0aGUgbHBmY19lbHNfaGFuZGxlX3JzY24oKSByb3V0aW5lIHdpbGwgYmUKKyAqIGludm9rZWQgdG8gaGFuZGxlIHRoZSBhZGRpdGlvbmFsIFJTQ05zIGZvciB0aGUgQHZwb3J0LiBPdGhlcndpc2UsIHRoZQorICogRkNfUlNDTl9NT0RFIGJpdCB3aWxsIGJlIGNsZWFyZWQgd2l0aCB0aGUgQHZwb3J0IHRvIG1hcmsgYXMgdGhlIGVuZCBvZgorICogaGFuZGxpbmcgdGhlIFJTQ05zLgorICoqLwogdm9pZAogbHBmY19lbmRfcnNjbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC05NDMsNiArMTE5MSwyNiBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX3Bsb2dpOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBwbG9naS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBpc3N1aW5nIHRoZSBQb3J0CisgKiBMb2dpbiAoUExPR0kpIGNvbW1hbmQuIEZvciBQTE9HSSBjb21wbGV0aW9uLCB0aGVyZSBtdXN0IGJlIGFuIGFjdGl2ZQorICogbmRscCBvbiB0aGUgdnBvcnQgbm9kZSBsaXN0IHRoYXQgbWF0Y2hlcyB0aGUgcmVtb3RlIG5vZGUgSUQgZnJvbSB0aGUKKyAqIFBMT0dJIHJlcG9uc2UgSU9DQi4gSWYgc3VjaCBuZGxwIGRvZXMgbm90IGV4aXN0LCB0aGUgUExPR0kgaXMgc2ltcGx5CisgKiBpZ25vcmVkIGFuZCBjb21tYW5kIElPQ0IgcmVsZWFzZWQuIFRoZSBQTE9HSSByZXNwb25zZSBJT0NCIHN0YXR1cyBpcworICogY2hlY2tlZCBmb3IgZXJyb3IgY29uZGl0b25zLiBJZiB0aGVyZSBpcyBlcnJvciBzdGF0dXMgcmVwb3J0ZWQsIFBMT0dJCisgKiByZXRyeSBzaGFsbCBiZSBhdHRlbXB0ZWQgYnkgaW52b2tpbmcgdGhlIGxwZmNfZWxzX3JldHJ5KCkgcm91dGluZS4KKyAqIE90aGVyd2lzZSwgdGhlIGxwZmNfcGxvZ2lfY29uZmlybV9ucG9ydCgpIHJvdXRpbmUgc2hhbGwgYmUgaW52b2tlZCBvbgorICogdGhlIG5kbHAgYW5kIHRoZSBOTFBfRVZUX0NNUExfUExPR0kgc3RhdGUgdG8gdGhlIERpc2NvdmVyIFN0YXRlIE1hY2hpbmUKKyAqIChEU00pIGlzIHNldCBmb3IgdGhpcyBQTE9HSSBjb21wbGV0aW9uLiBGaW5hbGx5LCBpdCBjaGVja3Mgd2hldGhlcgorICogdGhlcmUgYXJlIGFkZGl0aW9uYWwgTl9Qb3J0IG5vZGVzIHdpdGggdGhlIHZwb3J0IHRoYXQgbmVlZCB0byBwZXJmb3JtCisgKiBQTE9HSS4gSWYgc28sIHRoZSBscGZjX21vcmVfcGxvZ2koKSByb3V0aW5lIGlzIGludm9rZWQgdG8gaXNzdWUgYWRkaXRpb24KKyAqIFBMT0dJcy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTEwNDgsNiArMTMxNiwyNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19wbG9naTogSXNzdWUgYW4gcGxvZ2kgaW9jYiBjb21tYW5kIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBkaWQ6IGRlc3RpbmF0aW9uIHBvcnQgaWRlbnRpZmllci4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgUG9ydCBMb2dpbiAoUExPR0kpIGNvbW1hbmQgdG8gYSByZW1vdGUgTl9Qb3J0CisgKiAod2l0aCB0aGUgQGRpZCkgZm9yIGEgQHZwb3J0LiBCZWZvcmUgaXNzdWluZyBhIFBMT0dJIHRvIGEgcmVtb3RlIE5fUG9ydCwKKyAqIHRoZSBuZGxwIHdpdGggdGhlIHJlbW90ZSBOX1BvcnQgRElEIG11c3QgZXhpc3Qgb24gdGhlIEB2cG9ydCdzIG5kbHAgbGlzdC4KKyAqIFRoaXMgcm91dGluZSBjb25zdHJ1Y3RzIHRoZSBwcm9wZXIgZmVpbGRzIG9mIHRoZSBQTE9HSSBJT0NCIGFuZCBpbnZva2VzCisgKiB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBvdXQgUExPR0kgRUxTIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBQTE9HSSBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhIHBsb2dpIGZvciBAdnBvcnQKKyAqICAgMSAtIGZhaWxlZCB0byBpc3N1ZSBhIHBsb2dpIGZvciBAdnBvcnQKKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfcGxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCBkaWQsIHVpbnQ4X3QgcmV0cnkpCiB7CkBAIC0xMTA2LDYgKzEzOTUsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX3BybGk6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBybGkuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYSBQcm9jZXNzIExvZ2luCisgKiAoUFJMSSkgRUxTIGNvbW1hbmQuIFRoZSBQUkxJIHJlc3BvbnNlIElPQ0Igc3RhdHVzIGlzIGNoZWNrZWQgZm9yIGVycm9yCisgKiBzdGF0dXMuIElmIHRoZXJlIGlzIGVycm9yIHN0YXR1cyByZXBvcnRlZCwgUFJMSSByZXRyeSBzaGFsbCBiZSBhdHRlbXB0ZWQKKyAqIGJ5IGludm9raW5nIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUuIE90aGVyd2lzZSwgdGhlIHN0YXRlCisgKiBOTFBfRVZUX0NNUExfUFJMSSBpcyBzZW50IHRvIHRoZSBEaXNjb3ZlciBTdGF0ZSBNYWNoaW5lIChEU00pIGZvciB0aGlzCisgKiBuZGxwIHRvIG1hcmsgdGhlIFBSTEkgY29tcGxldGlvbi4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX3BybGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0xMTY0LDYgKzE0NjYsMjcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfcHJsaTogSXNzdWUgYSBwcmxpIGlvY2IgY29tbWFuZCBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgUHJvY2VzcyBMb2dpbiAoUFJMSSkgRUxTIGNvbW1hbmQgZm9yIHRoZQorICogQHZwb3J0LiBUaGUgUFJMSSBzZXJ2aWNlIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBpbiB0aGUgcGF5bG9hZCBvZiB0aGUKKyAqIFBSTEkgUmVxdWVzdCBjb21tYW5kIGFuZCB0aGUgcG9pbnRlciB0byBscGZjX2NtcGxfZWxzX3BybGkoKSByb3V0aW5lCisgKiBpcyBwdXQgdG8gdGhlIElPQ0IgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jIGZpZWxkIGJlZm9yZSBpbnZva2luZyB0aGUKKyAqIHJvdXRpbmUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHRvIHNlbmQgb3V0IFBSTEkgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFBSTEkgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgcHJsaSBpb2NiIGNvbW1hbmQgZm9yIEB2cG9ydAorICogICAxIC0gZmFpbGVkIHRvIGlzc3VlIHBybGkgaW9jYiBjb21tYW5kIGZvciBAdnBvcnQKKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfcHJsaShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkgICAgdWludDhfdCByZXRyeSkKQEAgLTEyMzMsNiArMTU1Niw5MiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfcnNjbl9kaXNjOiBQZXJmb3JtIHJzY24gZGlzY292ZXJ5IGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgUmVnaXN0cmF0aW9uIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24gKFJTQ04pCisgKiBkaXNjb3ZlcnkgZm9yIGEgQHZwb3J0LiBJZiB0aGUgQHZwb3J0J3Mgbm9kZSBwb3J0IHJlY292ZXJ5IGNvdW50IGlzIG5vdAorICogemVybywgaXQgd2lsbCBpbnZva2UgdGhlIGxwZmNfZWxzX2Rpc2NfcGxvZ2koKSB0byBwZXJmb3JtIFBMT0dJIGZvciBhbGwKKyAqIHRoZSBub2RlcyB0aGF0IG5lZWQgcmVjb3ZlcnkuIElmIG5vbmUgb2YgdGhlIFBMT0dJIHdlcmUgbmVlZGVkIHRocm91Z2gKKyAqIHRoZSBscGZjX2Vsc19kaXNjX3Bsb2dpKCkgcm91dGluZSwgdGhlIGxwZmNfZW5kX3JzY24oKSByb3V0aW5lIHNoYWxsIGJlCisgKiBpbnZva2VkIHRvIGNoZWNrIGFuZCBoYW5kbGUgcG9zc2libGUgbW9yZSBSU0NOIGNhbWUgaW4gZHVyaW5nIHRoZSBwZXJpb2QKKyAqIG9mIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgb25lcy4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3JzY25fZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7CisKKwkvKiBSU0NOIGRpc2NvdmVyeSAqLworCS8qIGdvIHRocnUgTlBSIG5vZGVzIGFuZCBpc3N1ZSBFTFMgUExPR0lzICovCisJaWYgKHZwb3J0LT5mY19ucHJfY250KQorCQlpZiAobHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCkpCisJCQlyZXR1cm47CisKKwlscGZjX2VuZF9yc2NuKHZwb3J0KTsKK30KKworLyoqCisgKiBscGZjX2FkaXNjX2RvbmU6IENvbXBsZXRlIHRoZSBhZGlzYyBwaGFzZSBvZiBkaXNjb3ZlcnkuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gbHBmY192cG9ydCBoYmEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBmaW5pc2hlZCBhbGwgQURJU0NzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGZpbmFsIEFESVNDIGlzIGNvbXBsZXRlZCBkdXJpbmcgZGlzY292ZXJ5LgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGNsZWFyaW5nIGxpbmsgYXR0ZW50aW9uIG9yIGlzc3VpbmcgcmVnX3ZwaSBkZXBlbmRpbmcKKyAqIG9uIHdoZXRoZXIgbnBpdiBpcyBlbmFibGVkLiBUaGlzIGZ1bmN0aW9uIGFsc28ga2lja3Mgb2ZmIHRoZSBQTE9HSSBwaGFzZSBvZgorICogZGlzY292ZXJ5LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYWRpc2NfZG9uZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKworCS8qCisJICogRm9yIE5QSVYsIGNtcGxfcmVnX3ZwaSB3aWxsIHNldCBwb3J0X3N0YXRlIHRvIFJFQURZLAorCSAqIGFuZCBjb250aW51ZSBkaXNjb3ZlcnkuCisJICovCisJaWYgKChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSAmJgorCSAgICAhKHZwb3J0LT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSkgeworCQlscGZjX2lzc3VlX3JlZ192cGkocGhiYSwgdnBvcnQpOworCQlyZXR1cm47CisJfQorCS8qCisJKiBGb3IgU0xJMiwgd2UgbmVlZCB0byBzZXQgcG9ydF9zdGF0ZSB0byBSRUFEWQorCSogYW5kIGNvbnRpbnVlIGRpc2NvdmVyeS4KKwkqLworCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfVlBPUlRfUkVBRFkpIHsKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGlzIG5vdGhpbmcgdG8gQURJU0MgKi8KKwkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgPT0gTFBGQ19QSFlTSUNBTF9QT1JUKQorCQkJbHBmY19pc3N1ZV9jbGVhcl9sYShwaGJhLCB2cG9ydCk7CisJCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfQUJPUlRfRElTQ09WRVJZKSkgeworCQkJdnBvcnQtPm51bV9kaXNjX25vZGVzID0gMDsKKwkJCS8qIGdvIHRocnUgTlBSIGxpc3QsIGlzc3VlIEVMUyBQTE9HSXMgKi8KKwkJCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKKwkJCQlscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KTsKKwkJCWlmICghdnBvcnQtPm51bV9kaXNjX25vZGVzKSB7CisJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOworCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKKwkJCQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKKwkJCX0KKwkJfQorCQl2cG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfVlBPUlRfUkVBRFk7CisJfSBlbHNlCisJCWxwZmNfcnNjbl9kaXNjKHZwb3J0KTsKK30KKworLyoqCisgKiBscGZjX21vcmVfYWRpc2M6IElzc3VlIG1vcmUgYWRpc2MgYXMgbmVlZGVkLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlIG5kbHBzIG9uIGEgQHZwb3J0CisgKiBub2RlIGxpc3QgbmVlZCB0byBoYXZlIEFkZHJlc3MgRGlzY292ZXIgKEFESVNDKSBpc3N1ZWQuIElmIHNvLCBpdCB3aWxsCisgKiBpbnZva2UgdGhlIGxwZmNfZWxzX2Rpc2NfYWRpc2MoKSByb3V0aW5lIHRvIGlzc3VlIEFESVNDIG9uIHRoZSBAdnBvcnQncworICogcmVtYWluaW5nIG5vZGVzIHdoaWNoIG5lZWQgdG8gaGF2ZSBBRElTQyBzZW50LgorICoqLwogdm9pZAogbHBmY19tb3JlX2FkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTEyNTIsMjMgKzE2NjEsMjcgQEAKIAkJLyogZ28gdGhydSBOUFIgbm9kZXMgYW5kIGlzc3VlIGFueSByZW1haW5pbmcgRUxTIEFESVNDcyAqLwogCQlzZW50YWRpc2MgPSBscGZjX2Vsc19kaXNjX2FkaXNjKHZwb3J0KTsKIAl9CisJaWYgKCF2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpCisJCWxwZmNfYWRpc2NfZG9uZSh2cG9ydCk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZAotbHBmY19yc2NuX2Rpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQotewotCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwotCi0JLyogUlNDTiBkaXNjb3ZlcnkgKi8KLQkvKiBnbyB0aHJ1IE5QUiBub2RlcyBhbmQgaXNzdWUgRUxTIFBMT0dJcyAqLwotCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKLQkJaWYgKGxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpKQotCQkJcmV0dXJuOwotCi0JbHBmY19lbmRfcnNjbih2cG9ydCk7Ci19Ci0KKy8qKgorICogbHBmY19jbXBsX2Vsc19hZGlzYzogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRpc2MuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBmb3IgaXNzdWluZyB0aGUgQWRkcmVzcyBEaXNjb3ZlcgorICogKEFESVNDKSBjb21tYW5kLiBJdCBmaXJzdCBjaGVja3MgdG8gc2VlIHdoZXRoZXIgbGluayB3ZW50IGRvd24gZHVyaW5nCisgKiB0aGUgZGlzY292ZXJ5IHByb2Nlc3MuIElmIHNvLCB0aGUgbm9kZSB3aWxsIGJlIG1hcmtlZCBhcyBub2RlIHBvcnQKKyAqIHJlY292ZXJ5IGZvciBpc3N1aW5nIGRpc2NvdmVyIElPQ0IgYnkgdGhlIGxpbmsgYXR0ZW50aW9uIGhhbmRsZXIgYW5kCisgKiBleGl0LiBPdGhlcndpc2UsIHRoZSByZXNwb25zZSBzdGF0dXMgaXMgY2hlY2tlZC4gSWYgZXJyb3Igd2FzIHJlcG9ydGVkCisgKiBpbiB0aGUgcmVzcG9uc2Ugc3RhdHVzLCB0aGUgQURJU0MgY29tbWFuZCBzaGFsbCBiZSByZXRyaWVkIGJ5IGludm9raW5nCisgKiB0aGUgbHBmY19lbHNfcmV0cnkoKSByb3V0aW5lLiBPdGhlcndpc2UsIGlmIG5vIGVycm9yIHdhcyByZXBvcnRlZCBpbgorICogdGhlIHJlc3BvbnNlIHN0YXR1cywgdGhlIHN0YXRlIG1hY2hpbmUgaXMgaW52b2tlZCB0byBzZXQgdHJhbnNpdGlvbgorICogd2l0aCByZXNwZWN0IHRvIE5MUF9FVlRfQ01QTF9BRElTQyBldmVudC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2FkaXNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTEzMzMsNTcgKzE3NDYsMzQgQEAKIAkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUodnBvcnQsIG5kbHAsIGNtZGlvY2IsCiAJCQkJCU5MUF9FVlRfQ01QTF9BRElTQyk7CiAKLQlpZiAoZGlzYyAmJiB2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpIHsKLQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBtb3JlIEFESVNDcyB0byBiZSBzZW50ICovCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBtb3JlIEFESVNDcyB0byBiZSBzZW50ICovCisJaWYgKGRpc2MgJiYgdnBvcnQtPm51bV9kaXNjX25vZGVzKQogCQlscGZjX21vcmVfYWRpc2ModnBvcnQpOwotCi0JCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZG9uZSB3aXRoIEFESVNDIGF1dGhlbnRpY2F0aW9uICovCi0JCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgewotCQkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBBRElTQyAqLwotCQkJLyoKLQkJCSAqIEZvciBOUElWLCBjbXBsX3JlZ192cGkgd2lsbCBzZXQgcG9ydF9zdGF0ZSB0byBSRUFEWSwKLQkJCSAqIGFuZCBjb250aW51ZSBkaXNjb3ZlcnkuCi0JCQkgKi8KLQkJCWlmICgocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgJiYKLQkJCSAgICEodnBvcnQtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpKSB7Ci0JCQkJbHBmY19pc3N1ZV9yZWdfdnBpKHBoYmEsIHZwb3J0KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCS8qCi0JCQkgKiBGb3IgU0xJMiwgd2UgbmVlZCB0byBzZXQgcG9ydF9zdGF0ZSB0byBSRUFEWQotCQkJICogYW5kIGNvbnRpbnVlIGRpc2NvdmVyeS4KLQkJCSAqLwotCQkJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19WUE9SVF9SRUFEWSkgewotCQkJCS8qIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBub3RoaW5nIHRvIEFESVNDICovCi0JCQkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgPT0gTFBGQ19QSFlTSUNBTF9QT1JUKQotCQkJCQlscGZjX2lzc3VlX2NsZWFyX2xhKHBoYmEsIHZwb3J0KTsKLQotCQkJCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfQUJPUlRfRElTQ09WRVJZKSkgewotCQkJCQl2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPSAwOwotCQkJCQkvKiBnbyB0aHJ1IE5QUiBsaXN0LCBpc3N1ZSBFTFMgUExPR0lzICovCi0JCQkJCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKLQkJCQkJCWxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpOwotCi0JCQkJCWlmICghdnBvcnQtPm51bV9kaXNjX25vZGVzKSB7Ci0JCQkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCQkJdnBvcnQtPmZjX2ZsYWcgJj0KLQkJCQkJCQl+RkNfTkRJU0NfQUNUSVZFOwotCQkJCQkJc3Bpbl91bmxvY2tfaXJxKAotCQkJCQkJCXNob3N0LT5ob3N0X2xvY2spOwotCQkJCQkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1JFQURZOwotCQkJfSBlbHNlIHsKLQkJCQlscGZjX3JzY25fZGlzYyh2cG9ydCk7Ci0JCQl9Ci0JCX0KLQl9CiBvdXQ6CiAJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGNtZGlvY2IpOwogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19hZGlzYzogSXNzdWUgYW4gYWRkcmVzcyBkaXNjb3ZlciBpb2NiIHRvIGFuIG5vZGUgb24gYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhbiBBZGRyZXNzIERpc2NvdmVyIChBRElTQykgZm9yIGFuIEBuZGxwIG9uIGEKKyAqIEB2cG9ydC4gSXQgcHJlcGFyZXMgdGhlIHBheWxvYWQgb2YgdGhlIEFESVNDIEVMUyBjb21tYW5kLCB1cGRhdGVzIHRoZQorICogYW5kIHN0YXRlcyBvZiB0aGUgbmRscCwgYW5kIGludm9rZXMgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lCisgKiB0byBpc3N1ZSB0aGUgQURJU0MgRUxTIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBRElTQyBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBhZGlzYworICogICAxIC0gZmFpbGVkIHRvIGlzc3VlIGFkaXNjCisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX2FkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCSAgICAgdWludDhfdCByZXRyeSkKQEAgLTE0MzcsNiArMTgyNywxOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfbG9nbzogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbG9nby4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBpc3N1aW5nIHRoZSBFTFMgTG9nb3V0IChMT0dPKQorICogY29tbWFuZC4gSWYgbm8gZXJyb3Igc3RhdHVzIHdhcyByZXBvcnRlZCBmcm9tIHRoZSBMT0dPIHJlc3BvbnNlLCB0aGUKKyAqIHN0YXRlIG1hY2hpbmUgb2YgdGhlIGFzc29jaWF0ZWQgbmRscCBzaGFsbCBiZSBpbnZva2VkIGZvciB0cmFuc2l0aW9uIHdpdGgKKyAqIHJlc3BlY3QgdG8gTkxQX0VWVF9DTVBMX0xPR08gZXZlbnQuIE90aGVyd2lzZSwgaWYgZXJyb3Igc3RhdHVzIHdhcyByZXBvcnRlZCwKKyAqIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUgd2lsbCBiZSBpbnZva2VkIHRvIHJldHJ5IHRoZSBMT0dPIGNvbW1hbmQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19sb2dvKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMTUwMiw2ICsxOTA0LDI2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX2xvZ286IElzc3VlIGEgbG9nbyB0byBhbiBub2RlIG9uIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBjb25zdHJ1Y3RzIGFuZCBpc3N1ZXMgYW4gRUxTIExvZ291dCAoTE9HTykgaW9jYiBjb21tYW5kCisgKiB0byBhIHJlbW90ZSBub2RlLCByZWZlcnJlZCBieSBhbiBAbmRscCBvbiBhIEB2cG9ydC4gSXQgY29uc3RydWN0cyB0aGUKKyAqIHBheWxvYWQgb2YgdGhlIElPQ0IsIHByb3Blcmx5IHNldHMgdXAgdGhlIEBuZGxwIHN0YXRlLCBhbmQgaW52b2tlcyB0aGUKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgb3V0IHRoZSBMT0dPIEVMUyBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgTE9HTyBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBsb2dvCisgKiAgIDEgLSBmYWlsZWQgdG8gaXNzdWUgbG9nbworICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19sb2dvKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCSAgICB1aW50OF90IHJldHJ5KQpAQCAtMTU2Myw2ICsxOTg1LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19jbWQ6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGdlbmVyaWMgZWxzIGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGdlbmVyaWMgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgRUxTIGNvbW1hbmRzLgorICogU3BlY2lmaWNhbGx5LCBpdCBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggZG9lcyBub3QgbmVlZCB0byBwZXJmb3JtCisgKiBhbnkgY29tbWFuZCBzcGVjaWZpYyBvcGVyYXRpb25zLiBJdCBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgRUxTIGNvbW1hbmQKKyAqIGlzc3Vpbmcgcm91dGluZXMgZm9yIHRoZSBFTFMgU3RhdGUgQ2hhbmdlICBSZXF1ZXN0IChTQ1IpLAorICogbHBmY19pc3N1ZV9lbHNfc2NyKCksIGFuZCB0aGUgRUxTIEZpYnJlIENoYW5uZWwgQWRkcmVzcyBSZXNvbHV0aW9uCisgKiBQcm90b2NvbCBSZXNwb25zZSAoRkFSUFIpIHJvdXRpbmUsIGxwZmNfaXNzdWVfZWxzX2ZhcnByKCkuIE90aGVyIHRoYW4KKyAqIGNlcnRhaW4gZGVidWcgbG9nZ2luZ3MsIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gc2ltcGx5IGludm9rZXMgdGhlCisgKiBscGZjX2Vsc19jaGtfbGF0dCgpIHJvdXRpbmUgdG8gY2hlY2sgd2hldGhlciBsaW5rIHdlbnQgZG93biBkdXJpbmcgdGhlCisgKiBkaXNjb3ZlcnkgcHJvY2Vzcy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2NtZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMTU4Nyw2ICsyMDI1LDI4IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX3NjcjogSXNzdWUgYSBzY3IgdG8gYW4gbm9kZSBvbiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBucG9ydGlkOiBOX1BvcnQgaWRlbnRpZmllciB0byB0aGUgcmVtb3RlIG5vZGUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIFN0YXRlIENoYW5nZSBSZXF1ZXN0IChTQ1IpIHRvIGEgZmFicmljIG5vZGUKKyAqIG9uIGEgQHZwb3J0LiBUaGUgcmVtb3RlIG5vZGUgQG5wb3J0aWQgaXMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLiBJdAorICogZmlyc3Qgc2VhcmNoIHRoZSBAdnBvcnQgbm9kZSBsaXN0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIG5kbHAuIElmIG5vIHN1Y2gKKyAqIG5kbHAgaXMgZm91bmQsIGEgbmV3IG5kbHAgc2hhbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyAoU0NSKSBwdXJwb3NlLiBBbgorICogSU9DQiBpcyBhbGxvY2F0ZWQsIHBheWxvYWQgcHJlcGFyZWQsIGFuZCB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpCisgKiByb3V0aW5lIGlzIGludm9rZWQgdG8gc2VuZCB0aGUgU0NSIElPQ0IuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBTQ1IgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgc2NyIGNvbW1hbmQKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBzY3IgY29tbWFuZAorICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19zY3Ioc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCBucG9ydGlkLCB1aW50OF90IHJldHJ5KQogewpAQCAtMTY1OSw2ICsyMTE5LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfZmFycHI6IElzc3VlIGEgZmFycCB0byBhbiBub2RlIG9uIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5wb3J0aWQ6IE5fUG9ydCBpZGVudGlmaWVyIHRvIHRoZSByZW1vdGUgbm9kZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgRmlicmUgQ2hhbm5lbCBBZGRyZXNzIFJlc29sdXRpb24gUmVzcG9uc2UKKyAqIChGQVJQUikgdG8gYSBub2RlIG9uIGEgdnBvcnQuIFRoZSByZW1vdGUgbm9kZSBOX1BvcnQgaWRlbnRpZmllciAoQG5wb3J0aWQpCisgKiBpcyBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uIEl0IGZpcnN0IHNlYXJjaCB0aGUgQHZwb3J0IG5vZGUgbGlzdCB0byBmaW5kCisgKiB0aGUgbWF0Y2hpbmcgbmRscC4gSWYgbm8gc3VjaCBuZGxwIGlzIGZvdW5kLCBhIG5ldyBuZGxwIHNoYWxsIGJlIGNyZWF0ZWQKKyAqIGZvciB0aGlzIChGQVJQUikgcHVycG9zZS4gQW4gSU9DQiBpcyBhbGxvY2F0ZWQsIHBheWxvYWQgcHJlcGFyZWQsIGFuZCB0aGUKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIGlzIGludm9rZWQgdG8gc2VuZCB0aGUgRkFSUFIgRUxTIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBQQVJQUiBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBmYXJwciBjb21tYW5kCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgZmFycHIgY29tbWFuZAorICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9lbHNfZmFycHIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCBucG9ydGlkLCB1aW50OF90IHJldHJ5KQogewpAQCAtMTc0OCw2ICsyMjMwLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vOiBDYW5jZWwgdGhlIHRpbWVyIHdpdGggZGVsYXllZCBpb2NiLWNtZCByZXRyeS4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjYW5jZWxzIHRoZSB0aW1lciB3aXRoIGEgZGVsYXllZCBJT0NCLWNvbW1hbmQgcmV0cnkgZm9yCisgKiBhIEB2cG9ydCdzIEBuZGxwLiBJdCBzdG9wcyB0aGUgdGltZXIgZm9yIHRoZSBkZWxheWVkIGZ1bmN0aW9uIHJldHJpYWwgYW5kCisgKiByZW1vdmVzIHRoZSBFTFMgcmV0cnkgZXZlbnQgaWYgaXQgcHJlc2VudHMuIEluIGFkZGl0aW9uLCBpZiB0aGUKKyAqIE5MUF9OUFJfMkJfRElTQyBiaXQgaXMgc2V0IGluIHRoZSBAbmxwJ3MgbmxwX2ZsYWcgYml0bWFwLCBBRElTQyBJT0NCCisgKiBjb21tYW5kcyBhcmUgc2VudCBmb3IgdGhlIEB2cG9ydCdzIG5vZGVzIHRoYXQgcmVxdWlyZSBpc3N1aW5nIGRpc2NvdmVyeQorICogQURJU0MuCisgKiovCiB2b2lkCiBscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmxwKQogewpAQCAtMTc3NSwyNSArMjI2OSwzNiBAQAogCQkJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19WUE9SVF9SRUFEWSkgewogCQkJCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIEFESVNDcyB0byBiZSBzZW50ICovCiAJCQkJbHBmY19tb3JlX2FkaXNjKHZwb3J0KTsKLQkJCQlpZiAoKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSAmJgotCQkJCSAgICAodnBvcnQtPmZjX25wcl9jbnQpKQotCQkJCQlscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUgUExPR0lzIHRvIGJlIHNlbnQgKi8KIAkJCQlscGZjX21vcmVfcGxvZ2kodnBvcnQpOwotCQkJfQotCQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOwotCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQkJCQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKKwkJCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApIHsKKwkJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKKwkJCQkJbHBmY19lbmRfcnNjbih2cG9ydCk7CisJCQkJfQogCQkJfQogCQl9CiAJfQogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yZXRyeV9kZWxheTogVGltZXIgZnVuY3Rpb24gd2l0aCBhIG5kbHAgZGVsYXllZCBmdW5jdGlvbiB0aW1lci4KKyAqIEBwdHI6IGhvbGRlciBmb3IgdGhlIHBvaW50ZXIgdG8gdGhlIHRpbWVyIGZ1bmN0aW9uIGFzc29jaWF0ZWQgZGF0YSAobmRscCkuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIG5kbHAgZGVsYXllZC1mdW5jdGlvbiB0aW1lciB0byBjaGVjaworICogd2hldGhlciB0aGVyZSBpcyBhbnkgcGVuZGluZyBFTFMgcmV0cnkgZXZlbnQocykgd2l0aCB0aGUgbm9kZS4gSWYgbm90LCBpdAorICogc2ltcGx5IHJldHVybnMuIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIEVMUyBkZWxheWVkIGV2ZW50LCBpdAorICogYWRkcyB0aGUgZGVsYXllZCBldmVudHMgdG8gdGhlIEhCQSB3b3JrIGxpc3QgYW5kIGludm9rZXMgdGhlCisgKiBscGZjX3dvcmtlcl93YWtlX3VwKCkgcm91dGluZSB0byB3YWtlIHVwIHdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyB0aGUKKyAqIGV2ZW50LiBOb3RlIHRoYXQgbHBmY19ubHBfZ2V0KCkgaXMgY2FsbGVkIGJlZm9yZSBwb3N0aW5nIHRoZSBldmVudCB0bworICogdGhlIHdvcmsgbGlzdCB0byBob2xkIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwIHNvIHRoYXQgaXQgZ3VhcmFudGVlcyB0aGUKKyAqIHJlZmVyZW5jZSB0byBuZGxwIHdpbGwgc3RpbGwgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHdvcmtlciB0aHJlYWQgZ2V0cworICogdG8gdGhlIGV2ZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmRscC4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX3JldHJ5X2RlbGF5KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtMTgyMiw2ICsyMzI3LDE1IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JldHJ5X2RlbGF5X2hhbmRsZXI6IFdvcmsgdGhyZWFkIGhhbmRsZXIgZm9yIG5kbHAgZGVsYXllZCBmdW5jdGlvbi4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgd29ya2VyLXRocmVhZCBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIHRoZSBAbmRscCBkZWxheWVkCisgKiBldmVudChzKSwgcG9zdGVkIGJ5IHRoZSBscGZjX2Vsc19yZXRyeV9kZWxheSgpIHJvdXRpbmUuIEl0IHNpbXBseSByZXRyaWV2ZXMKKyAqIHRoZSBsYXN0IEVMUyBjb21tYW5kIGZyb20gdGhlIGFzc29jaWF0ZWQgbmRscCBhbmQgaW52b2tlcyB0aGUgcHJvcGVyIEVMUworICogZnVuY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBkZWxheWVkIEVMUyBjb21tYW5kIHRvIHJldHJ5IHRoZSBjb21tYW5kLgorICoqLwogdm9pZAogbHBmY19lbHNfcmV0cnlfZGVsYXlfaGFuZGxlcihzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKQEAgLTE4ODQsNiArMjM5OCwyNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yZXRyeTogTWFrZSByZXRyeSBkZWNpc2lvbiBvbiBhbiBlbHMgY29tbWFuZCBpb2NiLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWFrZXMgYSByZXRyeSBkZWNpc2lvbiBvbiBhbiBFTFMgY29tbWFuZCBJT0NCLCB3aGljaCBoYXMKKyAqIGZhaWxlZC4gVGhlIGZvbGxvd2luZyBFTFMgSU9DQnMgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIHJldHJ5aW5nIHRoZSBjb21tYW5kCisgKiB3aGVuIHByZXZpb3VzbHkgaXNzdWVkIGNvbW1hbmQgcmVzcG9uc2VkIHdpdGggZXJyb3Igc3RhdHVzOiBGTE9HSSwgUExPR0ksCisgKiBQUkxJLCBBRElTQywgTE9HTywgYW5kIEZESVNDLiBCYXNlZCBvbiB0aGUgRUxTIGNvbW1hbmQgdHlwZSBhbmQgdGhlCisgKiByZXR1cm5lZCBlcnJvciBzdGF0dXMsIGl0IG1ha2VzIHRoZSBkZWNpc2lvbiB3aGV0aGVyIGEgcmV0cnkgc2hhbGwgYmUKKyAqIGlzc3VlZCBmb3IgdGhlIGNvbW1hbmQsIGFuZCB3aGV0aGVyIGEgcmV0cnkgc2hhbGwgYmUgbWFkZSBpbW1lZGlhdGVseSBvcgorICogZGVsYXllZC4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgY29ycmVzcG9uZGluZyBFTFMgY29tbWFuZCBpc3N1aW5nLWZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgdG8gcmV0cnkgdGhlIGNvbW1hbmQuIEluIHRoZSBsYXRlciBjYXNlLCB0aGUgRUxTIGNvbW1hbmQgc2hhbGwKKyAqIGJlIHBvc3RlZCB0byB0aGUgbmRscCBkZWxheWVkIGV2ZW50IGFuZCBkZWxheWVkIGZ1bmN0aW9uIHRpbWVyIHNldCB0byB0aGUKKyAqIG5kbHAgZm9yIHRoZSBkZWxheWVkIGNvbW1hbmQgaXNzdXNpbmcuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIE5vIHJldHJ5IG9mIGVscyBjb21tYW5kIGlzIG1hZGUKKyAqICAgMSAtIEltbWVkaWF0ZSBvciBkZWxheWVkIHJldHJ5IG9mIGVscyBjb21tYW5kIGlzIG1hZGUKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3JldHJ5KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJICAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMjA1MSw3ICsyNTg2LDcgQEAKIAkJCSAgKHN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPT0gTFNFWFBfSU5WQUxJRF9OUE9SVF9JRCkpCiAJCQkgICkgewogCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAotCQkJCQkJICIwMTIzIEZESVNDIEZhaWxlZCAoeCV4KS4gIgorCQkJCQkJICIwMTIyIEZESVNDIEZhaWxlZCAoeCV4KS4gIgogCQkJCQkJICJGYWJyaWMgRGV0ZWN0ZWQgQmFkIFdXTlxuIiwKIAkJCQkJCSBzdGF0LnVuLmxzUmp0RXJyb3IpOwogCQkJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LApAQCAtMjE4MiwxMiArMjcxNywyNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZyZWVfZGF0YTogRnJlZSBscGZjIGRtYSBidWZmZXIgYW5kIGRhdGEgc3RydWN0dXJlIHdpdGggYW4gaW9jYi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGJ1Zl9wdHIxOiBwb2ludGVyIHRvIHRoZSBscGZjIERNQSBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHJlbGVhc2VzIHRoZSBscGZjIERNQSAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIGJ1ZmZlcihzKQorICogYXNzb2NpYXRlZCB3aXRoIGEgY29tbWFuZCBJT0NCIGJhY2sgdG8gdGhlIGxwZmMgRE1BIGJ1ZmZlciBwb29sLiBJdCBmaXJzdAorICogY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlzIGEgbHBmYyBETUEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIHJlc3BvbnNlIG9mIHRoZSBjb21tYW5kIElPQ0IuIElmIHNvLCBpdCB3aWxsIGJlIHJlbGVhc2VkIGJlZm9yZSByZWxlYXNpbmcKKyAqIHRoZSBscGZjIERNQSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBJT0NCIGl0c2VsZi4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHJlbGVhc2VkIGxwZmMgRE1BIGJ1ZmZlciAoY3VycmVudGx5LCBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19mcmVlX2RhdGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWYgKmJ1Zl9wdHIxKQogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYnVmX3B0cjsKIAotCS8qIEZyZWUgdGhlIHJlc3BvbnNlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLiAgKi8KKwkvKiBGcmVlIHRoZSByZXNwb25zZSBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4gKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmJ1Zl9wdHIxLT5saXN0KSkgewogCQlsaXN0X3JlbW92ZV9oZWFkKCZidWZfcHRyMS0+bGlzdCwgYnVmX3B0ciwKIAkJCQkgc3RydWN0IGxwZmNfZG1hYnVmLApAQCAtMjIwMCw2ICsyNzQ5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZnJlZV9icGw6IEZyZWUgbHBmYyBkbWEgYnVmZmVyIGFuZCBkYXRhIHN0cnVjdHVyZSB3aXRoIGJwbC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGJ1Zl9wdHI6IHBvaW50ZXIgdG8gdGhlIGxwZmMgZG1hIGJ1ZmZlciBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVsZWFzZXMgdGhlIGxwZmMgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgYnVmZmVyCisgKiBhc3NvY2lhdGVkIHdpdGggYSBCdWZmZXIgUG9pbnRlciBMaXN0IChCUEwpIGJhY2sgdG8gdGhlIGxwZmMgRE1BIGJ1ZmZlcgorICogcG9vbC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHJlbGVhc2VkIGxwZmMgRE1BIGJ1ZmZlciAoY3VycmVudGx5LCBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19mcmVlX2JwbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2RtYWJ1ZiAqYnVmX3B0cikKIHsKQEAgLTIyMDgsNiArMjc2OSwzMyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZyZWVfaW9jYjogRnJlZSBhIGNvbW1hbmQgaW9jYiBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZWxzaW9jYjogcG9pbnRlciB0byBscGZjIGVscyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGZyZWVzIGEgY29tbWFuZCBJT0NCIGFuZCBpdHMgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFRoZQorICogY29tbWFuZCBJT0NCIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSByZWZlcmVuY2UgdG8gdmFyaW91cyBhc3NvY2lhdGVkCisgKiByZXNvdXJjZXMsIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldCB0byBOVUxMIGlmIHRoZSBhc3NvY2lhdGVkIHJlZmVyZW5jZQorICogbm90IHByZXNlbnQ6CisgKiAgIGNvbnRleHQxIC0gcmVmZXJlbmNlIHRvIG5kbHAKKyAqICAgY29udGV4dDIgLSByZWZlcmVuY2UgdG8gY21kCisgKiAgIGNvbnRleHQyLT5uZXh0IC0gcmVmZXJlbmNlIHRvIHJzcAorICogICBjb250ZXh0MyAtIHJlZmVyZW5jZSB0byBicGwKKyAqCisgKiBJdCBmaXJzdCBwcm9wZXJseSBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgaGVsZCBvbiBuZGxwIGZvciB0aGUKKyAqIElPQ0IgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbi4gSWYgTFBGQ19ERUxBWV9NRU1fRlJFRSBmbGFnIGlzIG5vdAorICogc2V0LCBpdCBpbnZva2VzIHRoZSBscGZjX2Vsc19mcmVlX2RhdGEoKSByb3V0aW5lIHRvIHJlbGVhc2UgdGhlIERpcmVjdAorICogTWVtb3J5IEFjY2VzcyAoRE1BKSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgSU9DQi4gT3RoZXJ3aXNlLCBpdAorICogYWRkcyB0aGUgRE1BIGJ1ZmZlciB0aGUgQHBoYmEgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBkZWxheWVkIHJlbGVhc2UuCisgKiBJZiByZWZlcmVuY2UgdG8gdGhlIEJ1ZmZlciBQb2ludGVyIExpc3QgKEJQTCkgaXMgcHJlc2VudCwgdGhlCisgKiBscGZjX2Vsc19mcmVlX2JwbCgpIHJvdXRpbmUgaXMgaW52b2tlZCB0byByZWxlYXNlIHRoZSBETUEgbWVtb3J5CisgKiBhc3NvY2lhdGVkIHdpdGggQlBMLiBGaW5hbGx5LCB0aGUgbHBmY19zbGlfcmVsZWFzZV9pb2NicSgpIHJvdXRpbmUgaXMKKyAqIGludm9rZWQgdG8gcmVsZWFzZSB0aGUgSU9DQiBkYXRhIHN0cnVjdHVyZSBiYWNrIHRvIEBwaGJhIElPQ0JRIGxpc3QuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3MgKGN1cnJlbnRseSwgYWx3YXlzIHJldHVybiAwKQorICoqLwogaW50CiBscGZjX2Vsc19mcmVlX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqZWxzaW9jYikKIHsKQEAgLTIyNzQsNiArMjg2MiwyMyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfbG9nb19hY2M6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gbG9nbyBhY2MgcmVzcG9uc2UuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgTG9nb3V0IChMT0dPKQorICogQWNjZXB0IChBQ0MpIFJlc3BvbnNlIEVMUyBjb21tYW5kLiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBpbmRpY2F0ZQorICogdGhlIGNvbXBsZXRpb24gb2YgdGhlIExPR08gcHJvY2Vzcy4gSXQgaW52b2tlcyB0aGUgbHBmY19ubHBfbm90X3VzZWQoKSB0bworICogcmVsZWFzZSB0aGUgbmRscCBpZiBpdCBoYXMgdGhlIGxhc3QgcmVmZXJlbmNlIHJlbWFpbmluZyAocmVmZXJlbmNlIGNvdW50CisgKiBpcyAxKS4gSWYgc3VjY2VlZGVkIChtZWFuaW5nIG5kbHAgcmVsZWFzZWQpLCBpdCBzZXRzIHRoZSBJT0NCIGNvbnRleHQxCisgKiBmaWVsZCB0byBOVUxMIHRvIGluZm9ybSB0aGUgZm9sbG93aW5nIGxwZmNfZWxzX2ZyZWVfaW9jYigpIHJvdXRpbmUgbm8KKyAqIG5kbHAgcmVmZXJlbmNlIGNvdW50IG5lZWRzIHRvIGJlIGRlY3JlbWVudGVkLiBPdGhlcndpc2UsIHRoZSBuZGxwCisgKiByZWZlcmVuY2UgdXNlLWNvdW50IHNoYWxsIGJlIGRlY3JlbWVudGVkIGJ5IHRoZSBscGZjX2Vsc19mcmVlX2lvY2IoKQorICogcm91dGluZS4gRmluYWxseSwgdGhlIGxwZmNfZWxzX2ZyZWVfaW9jYigpIGlzIGludm9rZWQgdG8gcmVsZWFzZSB0aGUKKyAqIElPQ0IgZGF0YSBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19sb2dvX2FjYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0yMzExLDYgKzI5MTYsMTkgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19tYnhfY21wbF9kZmx0X3JwaTogQ29tcGxldGlvbiBjYWxsYmsgZnVuYyBmb3IgdW5yZWcgZGZsdCBycGkgbWJveCBjbWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB1bnJlZ2lzdGVyIGRlZmF1bHQKKyAqIFJQSSAoUmVtb3RlIFBvcnQgSW5kZXgpIG1haWxib3ggY29tbWFuZCB0byB0aGUgQHBoYmEuIEl0IHNpbXBseSByZWxlYXNlcworICogdGhlIGFzc29jaWF0ZWQgbHBmYyBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBidWZmZXIgYmFjayB0byB0aGUgcG9vbCBhbmQKKyAqIGRlY3JlbWVudHMgdGhlIG5kbHAgcmVmZXJlbmNlIGNvdW50IGhlbGQgZm9yIHRoaXMgY29tcGxldGlvbiBjYWxsYmFjaworICogZnVuY3Rpb24uIEFmdGVyIHRoYXQsIGl0IGludm9rZXMgdGhlIGxwZmNfbmxwX25vdF91c2VkKCkgdG8gY2hlY2sKKyAqIHdoZXRoZXIgdGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIGxlZnQgb24gdGhlIG5kbHAuIElmIHNvLCBpdCB3aWxsCisgKiBwZXJmb3JtIG9uZSBtb3JlIGRlY3JlbWVudCBhbmQgdHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbmRscC4KKyAqKi8KIHZvaWQKIGxwZmNfbWJ4X2NtcGxfZGZsdF9ycGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTIzMzIsNiArMjk1MCwyMiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX3JzcDogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWxzIHJlc3BvbnNlIGlvY2IgY21kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIEVMUyBSZXNwb25zZSBJT0NCCisgKiBjb21tYW5kLiBJbiBub3JtYWwgY2FzZSwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBqdXN0IHByb3Blcmx5IHNldHMgdGhlCisgKiBubHBfZmxhZyBiaXRtYXAgaW4gdGhlIG5kbHAgZGF0YSBzdHJ1Y3R1cmUsIGlmIHRoZSBtYm94IGNvbW1hbmQgcmVmZXJlbmNlCisgKiBmaWVsZCBpbiB0aGUgY29tbWFuZCBJT0NCIGlzIG5vdCBOVUxMLCB0aGUgcmVmZXJyZWQgbWFpbGJveCBjb21tYW5kIHdpbGwKKyAqIGJlIHNlbmQgb3V0LCBhbmQgdGhlbiBpbnZva2VzIHRoZSBscGZjX2Vsc19mcmVlX2lvY2IoKSByb3V0aW5lIHRvIHJlbGVhc2UKKyAqIHRoZSBJT0NCLiBVbmRlciBlcnJvciBjb25kaXRpb25zLCBzdWNoIGFzIHdoZW4gYSBMU19SSlQgaXMgcmV0dXJuZWQgb3IgYQorICogbGluayBkb3duIGV2ZW50IG9jY3VycmVkIGR1cmluZyB0aGUgZGlzY292ZXJ5LCB0aGUgbHBmY19ubHBfbm90X3VzZWQoKQorICogcm91dGluZSBzaGFsbCBiZSBpbnZva2VkIHRyeWluZyB0byByZWxlYXNlIHRoZSBuZGxwIGlmIG5vIG90aGVyIHRocmVhZHMKKyAqIGFyZSBjdXJyZW50bHkgcmVmZXJyaW5nIGl0LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfcnNwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0yNDg3LDYgKzMxMjEsMzEgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX2FjYzogUHJlcGFyZSBhbmQgaXNzdWUgYW4gYWNjIHJlc3BvbnNlIGlvY2IgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmxhZzogdGhlIGVscyBjb21tYW5kIGNvZGUgdG8gYmUgYWNjZXB0ZWQuCisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYm94OiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyBhbmQgaXNzdWVzIGFuIEFjY2VwdCAoQUNDKSByZXNwb25zZSBJT0NCCisgKiBjb21tYW5kLiBJdCB1c2VzIHRoZSBAZmxhZyB0byBwcm9wZXJseSBzZXQgdXAgdGhlIElPQ0IgZmllbGQgZm9yIHRoZQorICogc3BlY2lmaWMgQUNDIHJlc3BvbnNlIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGFuZCBpbnZva2VzIHRoZQorICogbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBvdXQgQUNDIHJlc3BvbnNlIElPQ0IuIElmIGEKKyAqIEBtYm94IHBvaW50ZXIgaXMgcGFzc2VkIGluLCBpdCB3aWxsIGJlIHB1dCBpbnRvIHRoZSBjb250ZXh0X3VuLm1ib3gKKyAqIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byBpc3N1ZSB0aGUKKyAqIG1haWxib3ggY29tbWFuZCB0byB0aGUgSEJBIGxhdGVyIHdoZW4gY2FsbGJhY2sgaXMgaW52b2tlZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UgRUxTIElPQ0IgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhY2MgcmVzcG9uc2UKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBhY2MgcmVzcG9uc2UKKyAqKi8KIGludAogbHBmY19lbHNfcnNwX2FjYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IGZsYWcsCiAJCSBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCkBAIC0yNjAxLDYgKzMyNjAsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfcmVqZWN0OiBQcm9wYXJlIGFuZCBpc3N1ZSBhIHJqdCByZXNwb25zZSBpb2NiIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZWplY3RFcnJvcjoKKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQG1ib3g6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGFuZCBpc3N1ZSBhbiBSZWplY3QgKFJKVCkgcmVzcG9uc2UgSU9DQgorICogY29tbWFuZC4gSWYgYSBAbWJveCBwb2ludGVyIGlzIHBhc3NlZCBpbiwgaXQgd2lsbCBiZSBwdXQgaW50byB0aGUKKyAqIGNvbnRleHRfdW4ubWJveCBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24KKyAqIHRvIGlzc3VlIHRvIHRoZSBIQkEgbGF0ZXIuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSByZWplY3QgcmVzcG9uc2UgRUxTIElPQ0IgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCByZWplY3QgcmVzcG9uc2UKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSByZWplY3QgcmVzcG9uc2UKKyAqKi8KIGludAogbHBmY19lbHNfcnNwX3JlamVjdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IHJlamVjdEVycm9yLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLApAQCAtMjY2MCw2ICszMzQxLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX2FkaXNjX2FjYzogUHJlcGFyZSBhbmQgaXNzdWUgYWNjIHJlc3BvbnNlIHRvIGFkaXNjIGlvY2IgY21kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIGlzc3VlcyBhbiBBY2NlcHQgKEFDQykgcmVzcG9uc2UgdG8gQWRkcmVzcworICogRGlzY292ZXIgKEFESVNDKSBFTFMgY29tbWFuZC4gSXQgc2ltcGx5IHByZXBhcmVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJT0NCCisgKiBhbmQgaW52b2tlcyB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBvdXQgdGhlIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBRElTQyBBY2NlcHQgcmVzcG9uc2UgRUxTIElPQ0IgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhY2MgYWRpc2MgcmVzcG9uc2UKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBhZGlzYyBhY2MgcmVzcG9uc2UKKyAqKi8KIGludAogbHBmY19lbHNfcnNwX2FkaXNjX2FjYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLAogCQkgICAgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0yNzE2LDYgKzM0MTYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfcHJsaV9hY2M6IFByZXBhcmUgYW5kIGlzc3VlIGFjYyByZXNwb25zZSB0byBwcmxpIGlvY2IgY21kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIGlzc3VlcyBhbiBBY2NlcHQgKEFDQykgcmVzcG9uc2UgdG8gUHJvY2VzcworICogTG9naW4gKFBSTEkpIEVMUyBjb21tYW5kLiBJdCBzaW1wbHkgcHJlcGFyZXMgdGhlIHBheWxvYWQgb2YgdGhlIElPQ0IKKyAqIGFuZCBpbnZva2VzIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIG91dCB0aGUgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFBSTEkgQWNjZXB0IHJlc3BvbnNlIEVMUyBJT0NCIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgYWNjIHBybGkgcmVzcG9uc2UKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBhY2MgcHJsaSByZXNwb25zZQorICoqLwogaW50CiBscGZjX2Vsc19yc3BfcHJsaV9hY2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwKIAkJICAgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0yNzk1LDYgKzM1MTQsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3Bfcm5pZF9hY2M6IElzc3VlIHJuaWQgYWNjIHJlc3BvbnNlIGlvY2IgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGZvcm1hdDogcm5pZCBjb21tYW5kIGZvcm1hdC4KKyAqIEBvbGRpb2NiOiBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBSZXF1ZXN0IE5vZGUgSWRlbnRpZmljYXRpb24gRGF0YSAoUk5JRCkgQWNjZXB0CisgKiAoQUNDKSByZXNwb25zZS4gSXQgY29uc3RydWN0cyB0aGUgUk5JRCBBQ0MgcmVzcG9uc2UgY29tbWFuZCBhY2NvcmRpbmcgdG8KKyAqIHRoZSBwcm9wZXIgQGZvcm1hdCBhbmQgdGhlbiBjYWxscyB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8KKyAqIGlzc3VlIHRoZSByZXNwb25zZS4gTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBkb2VzIG5vdCBuZWVkIHRvIGhvbGQgdGhlIG5kbHAKKyAqIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGNhbGxiYWNrLiBTbywgdGhlIG5kbHAgcmVmZXJlbmNlIGNvdW50IHRha2VuIGJ5CisgKiB0aGUgbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSBpcyBwdXQgYmFjayBhbmQgdGhlIGNvbnRleHQxIGZpZWxkIG9mCisgKiBJT0NCIGlzIHNldCB0byBOVUxMIHRvIGluZGljYXRlIHRvIHRoZSBscGZjX2Vsc19mcmVlX2lvY2IoKSByb3V0aW5lIHRoYXQKKyAqIHRoZXJlIGlzIG5vIG5kbHAgcmVmZXJlbmNlIGF2YWlsYWJsZS4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24uIEhvd2V2ZXIsIGZvciB0aGUgUk5JRCBBY2NlcHQgUmVzcG9uc2UgRUxTIGNvbW1hbmQsCisgKiB0aGlzIGlzIHVuZG9uZSBsYXRlciBieSB0aGlzIHJvdXRpbmUgYWZ0ZXIgdGhlIElPQ0IgaXMgYWxsb2NhdGVkLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGFjYyBybmlkIHJlc3BvbnNlCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgYWNjIHJuaWQgcmVzcG9uc2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3JzcF9ybmlkX2FjYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQ4X3QgZm9ybWF0LAogCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0yODc1LDYgKzM2MjAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19kaXNjX2FkaXNjOiBJc3N1ZSByZW1haW5pbmcgYWRpc2MgaW9jYnMgdG8gbnByIG5vZGVzIG9mIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgQWRkcmVzcyBEaXNjb3ZlciAoQURJU0MpIEVMUyBjb21tYW5kcyB0byB0aG9zZQorICogTl9Qb3J0cyB3aGljaCBhcmUgaW4gbm9kZSBwb3J0IHJlY292ZXJ5IHN0YXRlIGFuZCBBRElTQyBoYXMgbm90IGJlZW4gaXNzdWVkCisgKiBmb3IgdGhlIEB2cG9ydC4gRWFjaCB0aW1lIGFuIEVMUyBBRElTQyBJT0NCIGlzIGlzc3VlZCBieSBpbnZva2luZyB0aGUKKyAqIGxwZmNfaXNzdWVfZWxzX2FkaXNjKCkgcm91dGluZSwgdGhlIHBlciBAdnBvcnQgbnVtYmVyIG9mIGRpc2NvdmVyIGNvdW50CisgKiAobnVtX2Rpc2Nfbm9kZXMpIHNoYWxsIGJlIGluY3JlbWVudGVkLiBJZiB0aGUgbnVtX2Rpc2Nfbm9kZXMgcmVhY2hlcyBhCisgKiBwcmUtY29uZmlndXJlZCB0aHJlc2hvbGQgKGNmZ19kaXNjb3ZlcnlfdGhyZWFkcyksIHRoZSBAdnBvcnQgZmNfZmxhZyB3aWxsCisgKiBiZSBtYXJrZWQgd2l0aCBGQ19OTFBfTU9SRSBiaXQgYW5kIHRoZSBwcm9jZXNzIG9mIGlzc3VpbmcgcmVtYWluaW5nIEFESVNDCisgKiBJT0NCcyBxdWl0IGZvciBsYXRlciBwaWNrIHVwLiBPbiB0aGUgb3RoZXIgaGFuZCwgYWZ0ZXIgd2Fsa2luZyB0aHJvdWdoCisgKiBhbGwgdGhlIG5kbHBzIHdpdGggdGhlIEB2cG9ydCBhbmQgdGhlcmUgaXMgbm9uZSBBRElTQyBJT0NCIGlzc3VlZCwgdGhlCisgKiBAdnBvcnQgZmNfZmxhZyBzaGFsbCBiZSBjbGVhcmVkIHdpdGggRkNfTkxQX01PUkUgYml0IGluZGljYXRpbmcgdGhlcmUgaXMKKyAqIG5vIG1vcmUgQURJU0MgbmVlZCB0byBiZSBzZW50LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgICBUaGUgbnVtYmVyIG9mIE5fUG9ydHMgd2l0aCBhZGlzYyBpc3N1ZWQuCisgKiovCiBpbnQKIGxwZmNfZWxzX2Rpc2NfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMjkxNCw2ICszNjc4LDI1IEBACiAJcmV0dXJuIHNlbnRhZGlzYzsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19kaXNjX3Bsb2dpOiBJc3N1ZSBwbG9naSBmb3IgYWxsIG5wciBub2RlcyBvZiBhIHZwb3J0IGJlZm9yZSBhZGlzYy4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBQb3J0IExvZ2luIChQTE9HSSkgRUxTIGNvbW1hbmRzIHRvIGFsbCB0aGUgTl9Qb3J0cworICogd2hpY2ggYXJlIGluIG5vZGUgcG9ydCByZWNvdmVyeSBzdGF0ZSwgd2l0aCBhIEB2cG9ydC4gRWFjaCB0aW1lIGFuIEVMUworICogQURJU0MgUExPR0kgSU9DQiBpcyBpc3N1ZWQgYnkgaW52b2tpbmcgdGhlIGxwZmNfaXNzdWVfZWxzX3Bsb2dpKCkgcm91dGluZSwKKyAqIHRoZSBwZXIgQHZwb3J0IG51bWJlciBvZiBkaXNjb3ZlciBjb3VudCAobnVtX2Rpc2Nfbm9kZXMpIHNoYWxsIGJlCisgKiBpbmNyZW1lbnRlZC4gSWYgdGhlIG51bV9kaXNjX25vZGVzIHJlYWNoZXMgYSBwcmUtY29uZmlndXJlZCB0aHJlc2hvbGQKKyAqIChjZmdfZGlzY292ZXJ5X3RocmVhZHMpLCB0aGUgQHZwb3J0IGZjX2ZsYWcgd2lsbCBiZSBtYXJrZWQgd2l0aCBGQ19OTFBfTU9SRQorICogYml0IHNldCBhbmQgcXVpdCB0aGUgcHJvY2VzcyBvZiBpc3N1aW5nIHJlbWFpbmluZyBBRElTQyBQTE9HSU4gSU9DQnMgZm9yCisgKiBsYXRlciBwaWNrIHVwLiBPbiB0aGUgb3RoZXIgaGFuZCwgYWZ0ZXIgd2Fsa2luZyB0aHJvdWdoIGFsbCB0aGUgbmRscHMgd2l0aAorICogdGhlIEB2cG9ydCBhbmQgdGhlcmUgaXMgbm9uZSBBRElTQyBQTE9HSSBJT0NCIGlzc3VlZCwgdGhlIEB2cG9ydCBmY19mbGFnCisgKiBzaGFsbCBiZSBjbGVhcmVkIHdpdGggdGhlIEZDX05MUF9NT1JFIGJpdCBpbmRpY2F0aW5nIHRoZXJlIGlzIG5vIG1vcmUgQURJU0MKKyAqIFBMT0dJIG5lZWQgdG8gYmUgc2VudC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICBUaGUgbnVtYmVyIG9mIE5fUG9ydHMgd2l0aCBwbG9naSBpc3N1ZWQuCisgKiovCiBpbnQKIGxwZmNfZWxzX2Rpc2NfcGxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMjk1NCw2ICszNzM3LDE1IEBACiAJcmV0dXJuIHNlbnRwbG9naTsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mbHVzaF9yc2NuOiBDbGVhbiB1cCBhbnkgcnNjbiBhY3Rpdml0aWVzIHdpdGggYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNsZWFucyB1cCBhbnkgUmVnaXN0cmF0aW9uIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24KKyAqIChSU0NOKSBhY3Rpdml0eSB3aXRoIGEgQHZwb3J0LiBOb3RlIHRoYXQgdGhlIGZjX3JzY25fZmx1c2ggZmxhZyBvZiB0aGUKKyAqIEB2cG9ydCB0b2dldGhlciB3aXRoIHRoZSBob3N0X2xvY2sgaXMgdXNlZCB0byBwcmV2ZW50IG11bHRpcGxlIHRocmVhZAorICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgUlNDTiBhcnJheSBvbiBhIHNhbWUgQHZwb3J0IGF0IHRoZSBzYW1lIHRpbWUuCisgKiovCiB2b2lkCiBscGZjX2Vsc19mbHVzaF9yc2NuKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTI5ODQsNiArMzc3NiwxOCBAQAogCXZwb3J0LT5mY19yc2NuX2ZsdXNoID0gMDsKIH0KIAorLyoqCisgKiBscGZjX3JzY25fcGF5bG9hZF9jaGVjazogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIHBlbmRpbmcgcnNjbiB0byBhIGRpZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGlkOiByZW1vdGUgZGVzdGluYXRpb24gcG9ydCBpZGVudGlmaWVyLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhbnkgcGVuZGluZyBSZWdpc3RyYXRpb24gU3RhdGUKKyAqIENvbmZpZ3VyYXRpb24gTm90aWZpY2F0aW9uIChSU0NOKSB0byBhIEBkaWQgb24gQHZwb3J0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIE5vbmUgemVybyAtIFRoZSBAZGlkIG1hdGNoZWQgd2l0aCBhIHBlbmRpbmcgcnNjbgorICogICAwIC0gbm90IGFibGUgdG8gbWF0Y2ggQGRpZCB3aXRoIGEgcGVuZGluZyByc2NuCisgKiovCiBpbnQKIGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgZGlkKQogewpAQCAtMzA1Myw2ICszODU3LDE3IEBACiAJcmV0dXJuIGRpZDsKIH0KIAorLyoqCisgKiBscGZjX3JzY25fcmVjb3ZlcnlfY2hlY2s6IFNlbmQgcmVjb3ZlcnkgZXZlbnQgdG8gdnBvcnQgbm9kZXMgbWF0Y2hpbmcgcnNjbgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VuZHMgcmVjb3ZlcnkgKE5MUF9FVlRfREVWSUNFX1JFQ09WRVJZKSBldmVudCB0byB0aGUKKyAqIHN0YXRlIG1hY2hpbmUgZm9yIGEgQHZwb3J0J3Mgbm9kZXMgdGhhdCBhcmUgd2l0aCBwZW5kaW5nIFJTQ04gKFJlZ2lzdHJhdGlvbgorICogU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbikuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWwgKGN1cnJlbnRseSBhbHdheSByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjayhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zMDcxLDYgKzM4ODYsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfcnNjbjogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCByc2NuIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIGFuIHVuc29saWNpdGVkIFJTQ04gKFJlZ2lzdHJhdGlvbiBTdGF0ZSBDaGFuZ2UKKyAqIE5vdGlmaWNhdGlvbikgSU9DQi4gRmlyc3QsIHRoZSBwYXlsb2FkIG9mIHRoZSB1bnNvbGljaXRlZCBSU0NOIGlzIHdhbGtlZAorICogdG8gaW52b2tlIGZjX2hvc3RfcG9zdF9ldmVudCgpIHJvdXRpbmUgdG8gdGhlIEZDIHRyYW5zcG9ydCBsYXllci4gSWYgdGhlCisgKiBkaXNjb3ZlciBzdGF0ZSBtYWNoaW5lIGlzIGFib3V0IHRvIGJlZ2luIGRpc2NvdmVyeSwgaXQganVzdCBhY2NlcHRzIHRoZQorICogUlNDTiBhbmQgdGhlIGRpc2NvdmVyeSBwcm9jZXNzIHdpbGwgc2F0aXNmeSB0aGUgUlNDTi4gSWYgdGhpcyBSU0NOIG9ubHkKKyAqIGNvbnRhaW5zIE5fUG9ydCBJRHMgZm9yIG90aGVyIHZwb3J0cyBvbiB0aGlzIEhCQSwgaXQganVzdCBhY2NlcHRzIHRoZQorICogUlNDTiBhbmQgaWdub3JlIHByb2Nlc3NpbmcgaXQuIElmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGluIHRoZSByZWNvdmVyeQorICogc3RhdGUsIHRoZSBmY19yc2NuX2lkX2xpc3Qgb2YgdGhpcyBAdnBvcnQgaXMgd2Fsa2VkIGFuZCB0aGUKKyAqIGxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjaygpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBzZW5kIHJlY292ZXJ5IGV2ZW50IGZvcgorICogYWxsIG5vZGVzIHRoYXQgbWF0Y2ggUlNDTiBwYXlsb2FkLiBPdGhlcndpc2UsIHRoZSBscGZjX2Vsc19oYW5kbGVfcnNjbigpCisgKiByb3V0aW5lIGlzIGludm9rZWQgdG8gaGFuZGxlIHRoZSBSU0NOIGV2ZW50LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBKdXN0IHNlbnQgdGhlIGFjYyByZXNwb25zZQorICogICAxIC0gU2VudCB0aGUgYWNjIHJlc3BvbnNlIGFuZCB3YWl0ZWQgZm9yIG5hbWUgc2VydmVyIGNvbXBsZXRpb24KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9yc2NuKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zMTMwLDcgKzM5NjcsNyBAQAogCQlpZiAocnNjbl9pZCA9PSBoYmFfaWQpIHsKIAkJCS8qIEFMTCBOUG9ydElEcyBpbiBSU0NOIGFyZSBvbiBIQkEgKi8KIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKLQkJCQkJICIwMjE0IElnbm9yZSBSU0NOICIKKwkJCQkJICIwMjE5IElnbm9yZSBSU0NOICIKIAkJCQkJICJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQkJCSB2cG9ydC0+ZmNfZmxhZywgcGF5bG9hZF9sZW4sCiAJCQkJCSAqbHAsIHZwb3J0LT5mY19yc2NuX2lkX2NudCk7CkBAIC0zMjQxLDYgKzQwNzgsMjIgQEAKIAlyZXR1cm4gbHBmY19lbHNfaGFuZGxlX3JzY24odnBvcnQpOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2hhbmRsZV9yc2NuOiBIYW5kbGUgcnNjbiBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgdGhlIFJlZ2lzdHJhdGlvbiBTdGF0ZSBDb25maWd1cmF0aW9uIE5vdGlmaWNhdGlvbgorICogKFJTQ04pIGZvciBhIEB2cG9ydC4gSWYgbG9naW4gdG8gTmFtZVNlcnZlciBkb2VzIG5vdCBleGlzdCwgYSBuZXcgbmRscCBzaGFsbAorICogYmUgY3JlYXRlZCBhbmQgYSBQb3J0IExvZ2luIChQTE9HSSkgdG8gdGhlIE5hbWVTZXJ2ZXIgaXMgaXNzdWVkLiBPdGhlcndpc2UsCisgKiBpZiB0aGUgbmRscCB0byBOYW1lU2VydmVyIGV4aXN0cywgYSBDb21tb24gVHJhbnNwb3J0IChDVCkgY29tbWFuZCB0byB0aGUKKyAqIE5hbWVTZXJ2ZXIgc2hhbGwgYmUgaXNzdWVkLiBJZiBDVCBjb21tYW5kIHRvIHRoZSBOYW1lU2VydmVyIGZhaWxzIHRvIGJlCisgKiBpc3N1ZWQsIHRoZSBscGZjX2Vsc19mbHVzaF9yc2NuKCkgcm91dGluZSBzaGFsbCBiZSBpbnZva2VkIHRvIGNsZWFuIHVwIGFueQorICogUlNDTiBhY3Rpdml0aWVzIHdpdGggdGhlIEB2cG9ydC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gQ2xlYW5lZCB1cCByc2NuIG9uIHRoZSBAdnBvcnQKKyAqICAgMSAtIFdhaXQgZm9yIHBsb2dpIHRvIG5hbWUgc2VydmVyIGJlZm9yZSBwcm9jZWVkCisgKiovCiBpbnQKIGxwZmNfZWxzX2hhbmRsZV9yc2NuKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTMzMTMsNiArNDE2NiwzMSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9mbG9naTogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBmbG9naSBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBGYWJyaWMgTG9naW4gKEZMT0dJKSBJT0NCIHJlY2VpdmVkIGFzIGFuIEVMUworICogdW5zb2xpY2l0ZWQgZXZlbnQuIEFuIHVuc29saWNpdGVkIEZMT0dJIGNhbiBiZSByZWNlaXZlZCBpbiBhIHBvaW50LXRvLQorICogcG9pbnQgdG9wb2xvZ3kuIEFzIGFuIHVuc29saWNpdGVkIEZMT0dJIHNob3VsZCBub3QgYmUgcmVjZWl2ZWQgaW4gYSBsb29wCisgKiBtb2RlLCBhbnkgdW5zb2xpY2l0ZWQgRkxPR0kgcmVjZWl2ZWQgaW4gbG9vcCBtb2RlIHNoYWxsIGJlIGlnbm9yZWQuIFRoZQorICogbHBmY19jaGVja19zcGFybSgpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBjaGVjayB0aGUgcGFyYW1ldGVycyBpbiB0aGUKKyAqIHVuc29saWNpdGVkIEZMT0dJLiBJZiBwYXJhbWV0ZXJzIHZhbGlkYXRpb24gZmFpbGVkLCB0aGUgcm91dGluZQorICogbHBmY19lbHNfcnNwX3JlamVjdCgpIHNoYWxsIGJlIGNhbGxlZCB3aXRoIHJlamVjdCByZWFzb24gY29kZSBzZXQgdG8KKyAqIExTRVhQX1NQQVJNX09QVElPTlMgdG8gcmVqZWN0IHRoZSBGTE9HSS4gT3RoZXJ3aXNlLCB0aGUgUG9ydCBXV04gaW4gdGhlCisgKiBGTE9HSSBzaGFsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBQb3J0IFdXTiBvZiB0aGUgQHZwb3J0IHRvIGRldGVybWluZSB3aG8KKyAqIHdpbGwgaW5pdGlhdGUgUExPR0kuIFRoZSBoaWdoZXIgbGV4aWNvZ3JhcGhpY2FsIHZhbHVlIHBhcnR5IHNoYWxsIGhhcworICogaGlnaGVyIHByaW9yaXR5IChhcyB0aGUgd2lubmluZyBwb3J0KSBhbmQgd2lsbCBpbml0aWF0ZSBQTE9HSSBhbmQKKyAqIGNvbW11bmljYXRlIFBvcnRfSURzIChBZGRyZXNzZXMpIGZvciBib3RoIG5vZGVzIGluIFBMT0dJLiBUaGUgcmVzdWx0CisgKiBvZiB0aGlzIHdpbGwgYmUgbWFya2VkIGluIHRoZSBAdnBvcnQgZmNfZmxhZyBmaWVsZCB3aXRoIEZDX1BUMlBUX1BMT0dJCisgKiBhbmQgdGhlbiB0aGUgbHBmY19lbHNfcnNwX2FjYygpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBhY2NlcHQgdGhlIEZMT0dJLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoZSB1bnNvbGljaXRlZCBmbG9naQorICogICAxIC0gRmFpbGVkIHRvIHByb2Nlc3MgdGhlIHVuc29saWNpdGVkIGZsb2dpCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfZmxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNDAyLDYgKzQyODAsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3Zfcm5pZDogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBybmlkIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIFJlcXVlc3QgTm9kZSBJZGVudGlmaWNhdGlvbiBEYXRhIChSTklEKSBJT0NCCisgKiByZWNlaXZlZCBhcyBhbiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIE9ubHkgd2hlbiB0aGUgUk5JRCBzcGVjaWZpZWQgZm9ybWF0CisgKiAweDAgb3IgMHhERiAoVG9wb2xvZ3kgRGlzY292ZXJ5IFNwZWNpZmljIE5vZGUgSWRlbnRpZmljYXRpb24gRGF0YSkKKyAqIHByZXNlbnQsIHRoaXMgcm91dGluZSB3aWxsIGludm9rZSB0aGUgbHBmY19lbHNfcnNwX3JuaWRfYWNjKCkgcm91dGluZSB0bworICogQWNjZXB0IChBQ0MpIHRoZSBSTklEIEVMUyBjb21tYW5kLiBBbGwgdGhlIG90aGVyIFJOSUQgZm9ybWF0cyBhcmUKKyAqIHJlamVjdGVkIGJ5IGludm9raW5nIHRoZSBscGZjX2Vsc19yc3BfcmVqZWN0KCkgcm91dGluZS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBybmlkIGlvY2IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3Zfcm5pZChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzQ0MSw2ICs0MzM1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X2xpcnI6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgbGlyciBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBhIExpbmsgSW5jaWRlbnQgUmVwb3J0IFJlZ2lzdHJhdGlvbihMSVJSKSBJT0NCCisgKiByZWNlaXZlZCBhcyBhbiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBqdXN0IGludm9rZXMKKyAqIHRoZSBscGZjX2Vsc19yc3BfcmVqZWN0KCkgcm91dGluZSB0byByZWplY3QgdGhlIExJUlIgSU9DQiB1bmNvbmRpdGlvbmFsbHkuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgbGlyciBpb2NiIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X2xpcnIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM0NTYsNiArNDM2MywyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9ycHNfYWNjOiBDb21wbGV0aW9uIGNhbGxiayBmdW5jIGZvciBNQlhfUkVBRF9MTktfU1RBVCBtYm94IGNtZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBNQlhfUkVBRF9MTktfU1RBVAorICogbWFpbGJveCBjb21tYW5kLiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHRvIGFjdHVhbGx5IHNlbmQgdGhlIEFjY2VwdAorICogKEFDQykgcmVzcG9uc2UgdG8gYSBSZWFkIFBvcnQgU3RhdHVzIChSUFMpIHVuc29saWNpdGVkIElPQ0IgZXZlbnQuIEl0CisgKiBjb2xsZWN0cyB0aGUgbGluayBzdGF0aXN0aWNzIGZyb20gdGhlIGNvbXBsZXRpb24gb2YgdGhlIE1CWF9SRUFEX0xOS19TVEFUCisgKiBtYWlsYm94IGNvbW1hbmQsIGNvbnN0cnVjdHMgdGhlIFJQUyByZXNwb25zZSB3aXRoIHRoZSBsaW5rIHN0YXRpc3RpY3MKKyAqIGNvbGxlY3RlZCwgYW5kIHRoZW4gaW52b2tlcyB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBBQ0MKKyAqIHJlc3BvbnNlIHRvIHRoZSBSUFMuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBSUFMgQWNjZXB0IFJlc3BvbnNlIEVMUyBJT0NCIGNvbW1hbmQuCisgKgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZWxzX3JzcF9ycHNfYWNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC0zNTMxLDYgKzQ0NTcsMjQgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X3JwczogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBycHMgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgUmVhZCBQb3J0IFN0YXR1cyAoUlBTKSBJT0NCIHJlY2VpdmVkIGFzIGFuCisgKiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIEl0IGZpcnN0IGNoZWNrcyB0aGUgcmVtb3RlIHBvcnQgc3RhdGUuIElmIHRoZQorICogcmVtb3RlIHBvcnQgaXMgbm90IGluIE5MUF9TVEVfVU5NQVBQRURfTk9ERSBzdGF0ZSBvciBOTFBfU1RFX01BUFBFRF9OT0RFCisgKiBzdGF0ZSwgaXQgaW52b2tlcyB0aGUgbHBmY19lbHNfcnNwX3JlamVjdCgpIHJvdXRpbmUgdG8gc2VuZCB0aGUgcmVqZWN0CisgKiByZXNwb25zZS4gT3RoZXJ3aXNlLCBpdCBpc3N1ZSB0aGUgTUJYX1JFQURfTE5LX1NUQVQgbWFpbGJveCBjb21tYW5kCisgKiBmb3IgcmVhZGluZyB0aGUgSEJBIGxpbmsgc3RhdGlzdGljcy4gSXQgaXMgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwKKyAqIGxwZmNfZWxzX3JzcF9ycHNfYWNjKCksIHNldCB0byB0aGUgTUJYX1JFQURfTE5LX1NUQVQgbWFpbGJveCBjb21tYW5kCisgKiB0byBhY3R1YWxseSBzZW5kaW5nIG91dCBSUFMgQWNjZXB0IChBQ0MpIHJlc3BvbnNlLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBycHMgaW9jYiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9ycHMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzU0NCwxNCArNDQ4OCw5IEBACiAJc3RydWN0IGxzX3JqdCBzdGF0OwogCiAJaWYgKChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFKSAmJgotCSAgICAobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpKSB7Ci0JCXN0YXQudW4uYi5sc1JqdFJzdmQwID0gMDsKLQkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7Ci0JCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9DQU5UX0dJVkVfREFUQTsKLQkJc3RhdC51bi5iLnZlbmRvclVuaXF1ZSA9IDA7Ci0JCWxwZmNfZWxzX3JzcF9yZWplY3QodnBvcnQsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCwKLQkJCU5VTEwpOwotCX0KKwkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkKKwkJLyogcmVqZWN0IHRoZSB1bnNvbGljaXRlZCBSUFMgcmVxdWVzdCBhbmQgZG9uZSB3aXRoIGl0ICovCisJCWdvdG8gcmVqZWN0X291dDsKIAogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOwogCWxwID0gKHVpbnQzMl90ICopIHBjbWQtPnZpcnQ7CkBAIC0zNTg0LDYgKzQ1MjMsOSBAQAogCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQl9CiAJfQorCityZWplY3Rfb3V0OgorCS8qIGlzc3VlIHJlamVjdGlvbiByZXNwb25zZSAqLwogCXN0YXQudW4uYi5sc1JqdFJzdmQwID0gMDsKIAlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfVU5BQkxFX1RQQzsKIAlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ0FOVF9HSVZFX0RBVEE7CkBAIC0zNTkyLDYgKzQ1MzQsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfcnBsX2FjYzogSXNzdWUgYW4gYWNjZXB0IHJwbCBlbHMgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kc2l6ZTogc2l6ZSBvZiB0aGUgRUxTIGNvbW1hbmQuCisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVlcyBhbiBBY2NlcHQgKEFDQykgUmVhZCBQb3J0IExpc3QgKFJQTCkgRUxTIGNvbW1hbmQuCisgKiBJdCBpcyB0byBiZSBjYWxsZWQgYnkgdGhlIGxwZmNfZWxzX3Jjdl9ycGwoKSByb3V0aW5lIHRvIGFjY2VwdCB0aGUgUlBMLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUlBMIEFjY2VwdCBSZXNwb25zZSBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBBQ0MgUlBMIEVMUyBjb21tYW5kCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgQUNDIFJQTCBFTFMgY29tbWFuZAorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcnNwX3JwbF9hY2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MTZfdCBjbWRzaXplLAogCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM2NDUsNiArNDYwNiwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9ycGw6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgcnBsIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIFJlYWQgUG9ydCBMaXN0IChSUEwpIElPQ0IgcmVjZWl2ZWQgYXMgYW4gRUxTCisgKiB1bnNvbGljaXRlZCBldmVudC4gSXQgZmlyc3QgY2hlY2tzIHRoZSByZW1vdGUgcG9ydCBzdGF0ZS4gSWYgdGhlIHJlbW90ZQorICogcG9ydCBpcyBub3QgaW4gTkxQX1NURV9VTk1BUFBFRF9OT0RFIGFuZCBOTFBfU1RFX01BUFBFRF9OT0RFIHN0YXRlcywgaXQKKyAqIGludm9rZXMgdGhlIGxwZmNfZWxzX3JzcF9yZWplY3QoKSByb3V0aW5lIHRvIHNlbmQgcmVqZWN0IHJlc3BvbnNlLgorICogT3RoZXJ3aXNlLCB0aGlzIHJvdXRpbmUgdGhlbiBpbnZva2VzIHRoZSBscGZjX2Vsc19yc3BfcnBsX2FjYygpIHJvdXRpbmUKKyAqIHRvIGFjY2VwdCB0aGUgUlBMLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHJwbCBpb2NiIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X3JwbChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNjU4LDEyICs0NjM1LDE1IEBACiAKIAlpZiAoKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOTUFQUEVEX05PREUpICYmCiAJICAgIChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpIHsKKwkJLyogaXNzdWUgcmVqZWN0aW9uIHJlc3BvbnNlICovCiAJCXN0YXQudW4uYi5sc1JqdFJzdmQwID0gMDsKIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9DQU5UX0dJVkVfREFUQTsKIAkJc3RhdC51bi5iLnZlbmRvclVuaXF1ZSA9IDA7CiAJCWxwZmNfZWxzX3JzcF9yZWplY3QodnBvcnQsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCwKIAkJCU5VTEwpOworCQkvKiByZWplY3RlZCB0aGUgdW5zb2xpY2l0ZWQgUlBMIHJlcXVlc3QgYW5kIGRvbmUgd2l0aCBpdCAqLworCQlyZXR1cm4gMDsKIAl9CiAKIAlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NiLT5jb250ZXh0MjsKQEAgLTM2ODUsNiArNDY2NSwzMCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9mYXJwOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGZhcnAgcmVxdWVzdCBlbHMgY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIEZpYnJlIENoYW5uZWwgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sCisgKiAoRkFSUCkgUmVxdWVzdCBJT0NCIHJlY2VpdmVkIGFzIGFuIEVMUyB1bnNvbGljaXRlZCBldmVudC4gQ3VycmVudGx5LAorICogdGhlIGxwZmMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgbWF0Y2hpbmcgb24gV1dQTiBvciBXV05OIGZvciBGQVJQLiBBcyBzdWNoLAorICogRkFSUF9NQVRDSF9QT1JUIGZsYWcgYW5kIEZBUlBfTUFUQ0hfTk9ERSBmbGFnIGFyZSBjaGVja2VkIGFnYWluc3QgdGhlCisgKiBNYXRjaCBGbGFnIGluIHRoZSBGQVJQIHJlcXVlc3QgSU9DQjogaWYgRkFSUF9NQVRDSF9QT1JUIGZsYWcgaXMgc2V0LCB0aGUKKyAqIHJlbW90ZSBQb3J0TmFtZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBGQyBQb3J0TmFtZSBzdG9yZWQgaW4gdGhlIEB2cG9ydAorICogZGF0YSBzdHJ1Y3R1cmU7IGlmIEZBUlBfTUFUQ0hfTk9ERSBmbGFnIGlzIHNldCwgdGhlIHJlbW90ZSBOb2RlTmFtZSBpcworICogY29tcGFyZWQgYWdhaW5zdCB0aGUgRkMgTm9kZU5hbWUgc3RvcmVkIGluIHRoZSBAdnBvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBJZiBhbnkgb2YgdGhlc2UgbWF0Y2hlcyBhbmQgdGhlIEZBUlBfUkVRVUVTVF9GQVJQUiBmbGFnIGlzIHNldCBpbiB0aGUKKyAqIEZBUlAgcmVxdWVzdCBJT0NCIFJlc3BvbnNlIEZsYWcsIHRoZSBscGZjX2lzc3VlX2Vsc19mYXJwcigpIHJvdXRpbmUgaXMKKyAqIGludm9rZWQgdG8gc2VuZCBvdXQgRkFSUCBSZXNwb25zZSB0byB0aGUgcmVtb3RlIG5vZGUuIEJlZm9yZSBzZW5kaW5nIHRoZQorICogRkFSUCBSZXNwb25zZSwgaG93ZXZlciwgdGhlIEZBUlBfUkVRVUVTVF9QTE9HSSBmbGFnIGlzIGNoZWNrIGluIHRoZSBGQVJQCisgKiByZXF1ZXN0IElPQ0IgUmVzcG9uc2UgRmxhZyBhbmQsIGlmIGl0IGlzIHNldCwgdGhlIGxwZmNfaXNzdWVfZWxzX3Bsb2dpKCkKKyAqIHJvdXRpbmUgaXMgaW52b2tlZCB0byBsb2cgaW50byB0aGUgcmVtb3RlIHBvcnQgZmlyc3QuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIEVpdGhlciB0aGUgRkFSUCBNYXRjaCBNb2RlIG5vdCBzdXBwb3J0ZWQgb3Igc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZAorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X2ZhcnAoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM3NDQsNiArNDc0OCwyMCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9mYXJwcjogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBmYXJwIHJlc3BvbnNlIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIEZpYnJlIENoYW5uZWwgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sCisgKiBSZXNwb25zZSAoRkFSUFIpIElPQ0IgcmVjZWl2ZWQgYXMgYW4gRUxTIHVuc29saWNpdGVkIGV2ZW50LiBJdCBzaW1wbHkKKyAqIGludm9rZXMgdGhlIGxwZmNfZWxzX3JzcF9hY2MoKSByb3V0aW5lIHRvIHRoZSByZW1vdGUgbm9kZSB0byBhY2NlcHQKKyAqIHRoZSBGQVJQIHJlc3BvbnNlIHJlcXVlc3QuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgRkFSUFIgSU9DQiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9mYXJwcihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHApCkBAIC0zNzY4LDYgKzQ3ODYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfZmFuOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGZhbiBpb2NiIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmFuX25kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBhIEZhYnJpYyBBZGRyZXNzIE5vdGlmaWNhdGlvbiAoRkFOKSBJT0NCCisgKiBjb21tYW5kIHJlY2VpdmVkIGFzIGFuIEVMUyB1bnNvbGljaXRlZCBldmVudC4gVGhlIEZBTiBFTFMgY29tbWFuZCB3aWxsCisgKiBvbmx5IGJlIHByb2Nlc3NlZCBvbiBhIHBoeXNpY2FsIHBvcnQgKGkuZS4sIHRoZSBAdnBvcnQgcmVwcmVzZW50cyB0aGUKKyAqIHBoeXNpY2FsIHBvcnQpLiBUaGUgZmFicmljIE5vZGVOYW1lIGFuZCBQb3J0TmFtZSBmcm9tIHRoZSBGQU4gSU9DQiBhcmUKKyAqIGNvbXBhcmVkIGFnYWluc3QgdGhvc2UgaW4gdGhlIHBoYmEgZGF0YSBzdHJ1Y3R1cmUuIElmIGFueSBvZiB0aG9zZSBpcworICogZGlmZmVyZW50LCB0aGUgbHBmY19pbml0aWFsX2Zsb2dpKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIGluaXRpYWxpemUKKyAqIEZhYnJpYyBMb2dpbiAoRkxPR0kpIHRvIHRoZSBmYWJyaWMgdG8gc3RhcnQgdGhlIGRpc2NvdmVyIG92ZXIuIE90aGVyd2lzZSwKKyAqIGlmIGJvdGggb2YgdGhvc2UgYXJlIGlkZW50aWNhbCwgdGhlIGxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luKCkgcm91dGluZQorICogaXMgaW52b2tlZCB0byByZWdpc3RlciBsb2dpbiB0byB0aGUgZmFicmljLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGZhbiBpb2NiIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9mYW4oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpmYW5fbmRscCkKQEAgLTM3OTcsNiArNDgzNCwxNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3RpbWVvdXQ6IEhhbmRsZXIgZnVuY2l0b24gdG8gdGhlIGVscyB0aW1lci4KKyAqIEBwdHI6IGhvbGRlciBmb3IgdGhlIHRpbWVyIGZ1bmN0aW9uIGFzc29jaWF0ZWQgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBieSB0aGUgRUxTIHRpbWVyIGFmdGVyIHRpbWVvdXQuIEl0IHBvc3RzIHRoZSBFTFMKKyAqIHRpbWVyIHRpbWVvdXQgZXZlbnQgYnkgc2V0dGluZyB0aGUgV09SS0VSX0VMU19UTU8gYml0IHRvIHRoZSB3b3JrIHBvcnQKKyAqIGV2ZW50IGJpdG1hcCBhbmQgdGhlbiBpbnZva2VzIHRoZSBscGZjX3dvcmtlcl93YWtlX3VwKCkgcm91dGluZSB0byB3YWtlCisgKiB1cCB0aGUgd29ya2VyIHRocmVhZC4gSXQgaXMgZm9yIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGludm9rZSB0aGUgcm91dGluZQorICogbHBmY19lbHNfdGltZW91dF9oYW5kbGVyKCkgdG8gd29yayBvbiB0aGUgcG9zdGVkIGV2ZW50IFdPUktFUl9FTFNfVE1PLgorICoqLwogdm9pZAogbHBmY19lbHNfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTM4MTYsNiArNDg2MywxNSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc190aW1lb3V0X2hhbmRsZXI6IFByb2Nlc3MgYW4gZWxzIHRpbWVvdXQgZXZlbnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGFjdHVhbCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIGFuIEVMUyB0aW1lb3V0CisgKiBldmVudC4gSXQgd2Fsa3MgdGhlIEVMUyByaW5nIHRvIGdldCBhbmQgYWJvcnQgYWxsIHRoZSBJT0NCcyAoZXhjZXB0IHRoZQorICogQUJPUlQvQ0xPU0UvRkFSUC9GQVJQUi9GRElTQyksIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIEB2cG9ydCBieQorICogaW52b2tpbmcgdGhlIGxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKCkgcm91dGluZS4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zODg2LDYgKzQ5NDIsMjYgQEAKIAkJbW9kX3RpbWVyKCZ2cG9ydC0+ZWxzX3Rtb2Z1bmMsIGppZmZpZXMgKyBIWiAqIHRpbWVvdXQpOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZsdXNoX2NtZDogQ2xlYW4gdXAgdGhlIG91dHN0YW5kaW5nIGVscyBjb21tYW5kcyB0byBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjbGVhbiB1cCBhbGwgdGhlIG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyBvbiBhCisgKiBAdnBvcnQuIEl0IGZpcnN0IGFib3J0cyB0aGUgQHZwb3J0IGJ5IGludm9raW5nIGxwZmNfZmFicmljX2Fib3J0X3Zwb3J0KCkKKyAqIHJvdXRpbmUuIEFmdGVyIHRoYXQsIGl0IHdhbGtzIHRoZSBFTFMgdHJhbnNtaXQgcXVldWUgdG8gcmVtb3ZlIGFsbCB0aGUKKyAqIElPQ0JzIHdpdGggdGhlIEB2cG9ydCBvdGhlciB0aGFuIHRoZSBRVUVfUklORyBhbmQgQUJPUlQvQ0xPU0UgSU9DQnMuIEZvcgorICogdGhlIElPQ0JzIHdpdGggYSBub24tTlVMTCBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBzdGF0dXMgc2V0IHRvIElPU1RBVF9MT0NBTF9SRUpFQ1QgYW5kCisgKiB1bi51bHBXb3JkWzRdIHNldCB0byBJT0VSUl9TTElfQUJPUlRFRC4gRm9yIElPQ0JzIHdpdGggYSBOVUxMIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgSU9DQiB3aWxsIHNpbXBseSBiZSByZWxlYXNlZC4gRmluYWxseSwgaXQgd2Fsa3MKKyAqIHRoZSBFTFMgdHJhbnNtaXQgY29tcGxldGlvbiBxdWV1ZSB0byBpc3N1ZSBhbiBhYm9ydCBJT0NCIHRvIGFueSB0cmFuc21pdAorICogY29tcGxldGlvbiBxdWV1ZSBJT0NCIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBAdnBvcnQgYW5kIGlzIG5vdAorICogYW4gSU9DQiBmcm9tIGxpYmRmYyAoaS5lLiwgdGhlIG1hbmFnZW1lbnQgcGxhbmUgSU9DQnMgdGhhdCBhcmUgbm90CisgKiBwYXJ0IG9mIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZSkgb3V0IHRvIEhCQSBieSBpbnZva2luZyB0aGUKKyAqIGxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKCkgcm91dGluZS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZQorICogYWJvcnQgSU9DQiB0byBhbnkgdHJhbnNtaXQgY29tcGxldGlvbiBxdWV1ZWVkIElPQ0IsIGl0IGRvZXMgbm90IGd1YXJhbnRlZQorICogdGhlIElPQ0JzIGFyZSBhYm9ydGVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorICoqLwogdm9pZAogbHBmY19lbHNfZmx1c2hfY21kKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTM5NDgsNiArNTAyNCwyMyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mbHVzaF9hbGxfY21kOiBDbGVhbiB1cCBhbGwgdGhlIG91dHN0YW5kaW5nIGVscyBjb21tYW5kcyB0byBhIEhCQS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGNsZWFuIHVwIGFsbCB0aGUgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzIG9uIGEKKyAqIEBwaGJhLiBJdCBmaXJzdCBhYm9ydHMgdGhlIEBwaGJhIGJ5IGludm9raW5nIHRoZSBscGZjX2ZhYnJpY19hYm9ydF9oYmEoKQorICogcm91dGluZS4gQWZ0ZXIgdGhhdCwgaXQgd2Fsa3MgdGhlIEVMUyB0cmFuc21pdCBxdWV1ZSB0byByZW1vdmUgYWxsIHRoZQorICogSU9DQnMgdG8gdGhlIEBwaGJhIG90aGVyIHRoYW4gdGhlIFFVRV9SSU5HIGFuZCBBQk9SVC9DTE9TRSBJT0NCcy4gRm9yCisgKiB0aGUgSU9DQnMgd2l0aCB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBhc3NvY2lhdGVkLCB0aGUgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBzdGF0dXMgc2V0IHRvIElPU1RBVF9MT0NBTF9SRUpFQ1QgYW5kCisgKiB1bi51bHBXb3JkWzRdIHNldCB0byBJT0VSUl9TTElfQUJPUlRFRC4gRm9yIElPQ0JzIHdpdGhvdXQgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGFzc29jaWF0ZWQsIHRoZSBJT0NCIHdpbGwgc2ltcGx5IGJlIHJlbGVhc2VkLiBGaW5hbGx5LAorICogaXQgd2Fsa3MgdGhlIEVMUyB0cmFuc21pdCBjb21wbGV0aW9uIHF1ZXVlIHRvIGlzc3VlIGFuIGFib3J0IElPQ0IgdG8gYW55CisgKiB0cmFuc21pdCBjb21wbGV0aW9uIHF1ZXVlIElPQ0IgdGhhdCBpcyBub3QgYW4gSU9DQiBmcm9tIGxpYmRmYyAoaS5lLiwgdGhlCisgKiBtYW5hZ2VtZW50IHBsYW5lIElPQ0JzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZSkKKyAqIG91dCB0byBIQkEgYnkgaW52b2tpbmcgdGhlIGxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKCkgcm91dGluZS4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX2ZsdXNoX2FsbF9jbWQoc3RydWN0IGxwZmNfaGJhICAqcGhiYSkKIHsKQEAgLTM5OTIsNiArNTA4NSwxMzAgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zZW5kX2Vsc19mYWlsdXJlX2V2ZW50OiBQb3N0cyBhbiBFTFMgY29tbWFuZCBmYWlsdXJlIGV2ZW50LgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JwOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYiB3aGljaCByZXBvcnRlZCBlcnJvci4KKyAqIEByc3Bpb2NicDogUG9pbnRlciB0byByZXNwb25zZSBpb2NiIHdoaWNoIHJlcG9ydGVkIGVycm9yLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBFTFMgY29tbWFuZAorICogZmFpbHVyZS4KKyAqKi8KK3ZvaWQKK2xwZmNfc2VuZF9lbHNfZmFpbHVyZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnAsCisJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYnApCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gY21kaW9jYnAtPnZwb3J0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwlzdHJ1Y3QgbHBmY19sc3JqdF9ldmVudCBsc3JqdF9ldmVudDsKKwlzdHJ1Y3QgbHBmY19mYWJyaWNfZXZlbnRfaGVhZGVyIGZhYnJpY19ldmVudDsKKwlzdHJ1Y3QgbHNfcmp0IHN0YXQ7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJdWludDMyX3QgKnBjbWQ7CisKKwluZGxwID0gY21kaW9jYnAtPmNvbnRleHQxOworCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJcmV0dXJuOworCisJaWYgKHJzcGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfTFNfUkpUKSB7CisJCWxzcmp0X2V2ZW50LmhlYWRlci5ldmVudF90eXBlID0gRkNfUkVHX0VMU19FVkVOVDsKKwkJbHNyanRfZXZlbnQuaGVhZGVyLnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9MU1JKVF9SQ1Y7CisJCW1lbWNweShsc3JqdF9ldmVudC5oZWFkZXIud3dwbiwgJm5kbHAtPm5scF9wb3J0bmFtZSwKKwkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweShsc3JqdF9ldmVudC5oZWFkZXIud3dubiwgJm5kbHAtPm5scF9ub2RlbmFtZSwKKwkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCXBjbWQgPSAodWludDMyX3QgKikgKCgoc3RydWN0IGxwZmNfZG1hYnVmICopCisJCQljbWRpb2NicC0+Y29udGV4dDIpLT52aXJ0KTsKKwkJbHNyanRfZXZlbnQuY29tbWFuZCA9ICpwY21kOworCQlzdGF0LnVuLmxzUmp0RXJyb3IgPSBiZTMyX3RvX2NwdShyc3Bpb2NicC0+aW9jYi51bi51bHBXb3JkWzRdKTsKKwkJbHNyanRfZXZlbnQucmVhc29uX2NvZGUgPSBzdGF0LnVuLmIubHNSanRSc25Db2RlOworCQlsc3JqdF9ldmVudC5leHBsYW5hdGlvbiA9IHN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHA7CisJCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCQlzaXplb2YobHNyanRfZXZlbnQpLAorCQkJKGNoYXIgKikmbHNyanRfZXZlbnQsCisJCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHJzcGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfTlBPUlRfQlNZKSB8fAorCQkocnNwaW9jYnAtPmlvY2IudWxwU3RhdHVzID09IElPU1RBVF9GQUJSSUNfQlNZKSkgeworCQlmYWJyaWNfZXZlbnQuZXZlbnRfdHlwZSA9IEZDX1JFR19GQUJSSUNfRVZFTlQ7CisJCWlmIChyc3Bpb2NicC0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX05QT1JUX0JTWSkKKwkJCWZhYnJpY19ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfUE9SVF9CVVNZOworCQllbHNlCisJCQlmYWJyaWNfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX0ZBQlJJQ19CVVNZOworCQltZW1jcHkoZmFicmljX2V2ZW50Lnd3cG4sICZuZGxwLT5ubHBfcG9ydG5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkoZmFicmljX2V2ZW50Lnd3bm4sICZuZGxwLT5ubHBfbm9kZW5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQkJc2l6ZW9mKGZhYnJpY19ldmVudCksCisJCQkoY2hhciAqKSZmYWJyaWNfZXZlbnQsCisJCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKwkJcmV0dXJuOworCX0KKworfQorCisvKioKKyAqIGxwZmNfc2VuZF9lbHNfZXZlbnQ6IFBvc3RzIHVuc29saWNpdGVkIGVscyBldmVudC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKiBAbmRscDogUG9pbnRlciBGQyBub2RlIG9iamVjdC4KKyAqIEBjbWQ6IEVMUyBjb21tYW5kIGNvZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBwb3N0cyBhbiBldmVudCB3aGVuIHRoZXJlIGlzIGFuIGluY29taW5nCisgKiB1bnNvbGljaXRlZCBFTFMgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NlbmRfZWxzX2V2ZW50KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKKwkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAorCQkgICAgdWludDMyX3QgY21kKQoreworCXN0cnVjdCBscGZjX2Vsc19ldmVudF9oZWFkZXIgZWxzX2RhdGE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCisJZWxzX2RhdGEuZXZlbnRfdHlwZSA9IEZDX1JFR19FTFNfRVZFTlQ7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEVMU19DTURfUExPR0k6CisJCWVsc19kYXRhLnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9QTE9HSV9SQ1Y7CisJCWJyZWFrOworCWNhc2UgRUxTX0NNRF9QUkxPOgorCQllbHNfZGF0YS5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfUFJMT19SQ1Y7CisJCWJyZWFrOworCWNhc2UgRUxTX0NNRF9BRElTQzoKKwkJZWxzX2RhdGEuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX0FESVNDX1JDVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwltZW1jcHkoZWxzX2RhdGEud3dwbiwgJm5kbHAtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwltZW1jcHkoZWxzX2RhdGEud3dubiwgJm5kbHAtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCXNpemVvZihlbHNfZGF0YSksCisJCShjaGFyICopJmVsc19kYXRhLAorCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKworCXJldHVybjsKK30KKworCisvKioKKyAqIGxwZmNfZWxzX3Vuc29sX2J1ZmZlcjogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBldmVudCBkYXRhIGJ1ZmZlci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHByaW5nOiBwb2ludGVyIHRvIGEgU0xJIHJpbmcuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGVsc2lvY2I6IHBvaW50ZXIgdG8gbHBmYyBlbHMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBwcm9jZXNzaW5nIHRoZSBJT0NCIGFzc29jaWF0ZWQgd2l0aCBhIHVuc29saWNpdGVkCisgKiBldmVudC4gSXQgZmlyc3QgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG5kbHAgdGhhdCBtYXRjaGVzCisgKiB0aGUgRElEIGZyb20gdGhlIHVuc29saWNpdGVkIElPQ0IuIElmIG5vdCwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgb25lIHdpdGgKKyAqIHRoZSBESUQgZnJvbSB0aGUgdW5zb2xpY2l0ZWQgSU9DQi4gVGhlIEVMUyBjb21tYW5kIGZyb20gdGhlIHVuc29saWNpdGVkCisgKiBJT0NCIGlzIHRoZW4gdXNlZCB0byBpbnZva2UgdGhlIHByb3BlciByb3V0aW5lIGFuZCB0byBzZXQgdXAgcHJvcGVyIHN0YXRlCisgKiBvZiB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19lbHNfdW5zb2xfYnVmZmVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgICBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiKQpAQCAtNDA1OSw4ICs1Mjc2LDYgQEAKIAl9CiAKIAlwaGJhLT5mY19zdGF0LmVsc1JjdkZyYW1lKys7Ci0JaWYgKGVsc2lvY2ItPmNvbnRleHQxKQotCQlscGZjX25scF9wdXQoZWxzaW9jYi0+Y29udGV4dDEpOwogCiAJZWxzaW9jYi0+Y29udGV4dDEgPSBscGZjX25scF9nZXQobmRscCk7CiAJZWxzaW9jYi0+dnBvcnQgPSB2cG9ydDsKQEAgLTQwODEsNiArNTI5Niw3IEBACiAJCXBoYmEtPmZjX3N0YXQuZWxzUmN2UExPR0krKzsKIAkJbmRscCA9IGxwZmNfcGxvZ2lfY29uZmlybV9ucG9ydChwaGJhLCBwYXlsb2FkLCBuZGxwKTsKIAorCQlscGZjX3NlbmRfZWxzX2V2ZW50KHZwb3J0LCBuZGxwLCBjbWQpOwogCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX0RJU0NfQVVUSCkgewogCQkJaWYgKCEocGhiYS0+cHBvcnQtPmZjX2ZsYWcgJiBGQ19QVDJQVCkgfHwKIAkJCQkocGhiYS0+cHBvcnQtPmZjX2ZsYWcgJiBGQ19QVDJQVF9QTE9HSSkpIHsKQEAgLTQxMzAsNiArNTM0Niw3IEBACiAJCQlkaWQsIHZwb3J0LT5wb3J0X3N0YXRlLCBuZGxwLT5ubHBfZmxhZyk7CiAKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZQUkxPKys7CisJCWxwZmNfc2VuZF9lbHNfZXZlbnQodnBvcnQsIG5kbHAsIGNtZCk7CiAJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfRElTQ19BVVRIKSB7CiAJCQlyanRfZXJyID0gTFNSSlRfVU5BQkxFX1RQQzsKIAkJCWJyZWFrOwpAQCAtNDE0Nyw2ICs1MzY0LDcgQEAKIAkJCSJSQ1YgQURJU0M6ICAgICAgIGRpZDp4JXgvc3RlOngleCBmbGc6eCV4IiwKIAkJCWRpZCwgdnBvcnQtPnBvcnRfc3RhdGUsIG5kbHAtPm5scF9mbGFnKTsKIAorCQlscGZjX3NlbmRfZWxzX2V2ZW50KHZwb3J0LCBuZGxwLCBjbWQpOwogCQlwaGJhLT5mY19zdGF0LmVsc1JjdkFESVNDKys7CiAJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfRElTQ19BVVRIKSB7CiAJCQlyanRfZXJyID0gTFNSSlRfVU5BQkxFX1RQQzsKQEAgLTQyNzAsNiArNTQ4OCw4IEBACiAJCQlOVUxMKTsKIAl9CiAKKwlscGZjX25scF9wdXQoZWxzaW9jYi0+Y29udGV4dDEpOworCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKIAlyZXR1cm47CiAKIGRyb3BpdDoKQEAgLTQyODIsNiArNTUwMiwxOSBAQAogCXBoYmEtPmZjX3N0YXQuZWxzUmN2RHJvcCsrOwogfQogCisvKioKKyAqIGxwZmNfZmluZF92cG9ydF9ieV92cGlkOiBGaW5kIGEgdnBvcnQgb24gYSBIQkEgdGhyb3VnaCB2cG9ydCBpZGVudGlmaWVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiBob3N0IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKgorICogVGhpcyByb3V0aW5lIGZpbmRzIGEgdnBvcnQgb24gYSBIQkEgKHJlZmVycmVkIGJ5IEBwaGJhKSB0aHJvdWdoIGEKKyAqIEB2cGkuIFRoZSBmdW5jdGlvbiB3YWxrcyB0aGUgSEJBJ3MgdnBvcnQgbGlzdCBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcworICogb2YgdGhlIHZwb3J0IHdpdGggdGhlIG1hdGNoaW5nIEB2cGkuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgIE5VTEwgLSBObyB2cG9ydCB3aXRoIHRoZSBtYXRjaGluZyBAdnBpIGZvdW5kCisgKiAgICBPdGhlcndpc2UgLSBBZGRyZXNzIHRvIHRoZSB2cG9ydCB3aXRoIHRoZSBtYXRjaGluZyBAdnBpLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX3Zwb3J0ICoKIGxwZmNfZmluZF92cG9ydF9ieV92cGlkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdnBpKQogewpAQCAtNDI5OSw2ICs1NTMyLDE4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19lbHNfdW5zb2xfZXZlbnQ6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZXZlbnQgZnJvbSBhbiBlbHMgc2xpIHJpbmcuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwcmluZzogcG9pbnRlciB0byBhIFNMSSByaW5nLgorICogQGVsc2lvY2I6IHBvaW50ZXIgdG8gbHBmYyBlbHMgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBwcm9jZXNzIGFuIHVuc29saWNpdGVkIGV2ZW50IHJlY2VpdmVkIGZyb20gYSBTTEkKKyAqIChTZXJ2aWNlIExldmVsIEludGVyZmFjZSkgcmluZy4gVGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIHRoZSBkYXRhIGJ1ZmZlcgorICogYXNzb2NpYXRlZCB3aXRoIHRoZSB1bnNvbGljaXRlZCBldmVudCBpcyBkb25lIGJ5IGludm9raW5nIHRoZSByb3V0aW5lCisgKiBscGZjX2Vsc191bnNvbF9idWZmZXIoKSBhZnRlciBwcm9wZXJseSBzZXQgdXAgdGhlIGlvY2IgYnVmZmVyIGZyb20gdGhlCisgKiBTTEkgcmluZyBvbiB3aGljaCB0aGUgdW5zb2xpY2l0ZWQgZXZlbnQgd2FzIHJlY2VpdmVkLgorICoqLwogdm9pZAogbHBmY19lbHNfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2IpCkBAIC00MzA5LDYgKzU1NTQsNyBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMSA9IGVsc2lvY2ItPmNvbnRleHQyOwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMiA9IGVsc2lvY2ItPmNvbnRleHQzOwogCisJZWxzaW9jYi0+Y29udGV4dDEgPSBOVUxMOwogCWVsc2lvY2ItPmNvbnRleHQyID0gTlVMTDsKIAllbHNpb2NiLT5jb250ZXh0MyA9IE5VTEw7CiAKQEAgLTQzNTYsOCArNTYwMiw2IEBACiAJICogVGhlIGRpZmZlcmVudCB1bnNvbGljaXRlZCBldmVudCBoYW5kbGVycyB3b3VsZCB0ZWxsIHVzCiAJICogaWYgdGhleSBhcmUgZG9uZSB3aXRoICJtcCIgYnkgc2V0dGluZyBjb250ZXh0MiB0byBOVUxMLgogCSAqLwotCWxwZmNfbmxwX3B1dChlbHNpb2NiLT5jb250ZXh0MSk7Ci0JZWxzaW9jYi0+Y29udGV4dDEgPSBOVUxMOwogCWlmIChlbHNpb2NiLT5jb250ZXh0MikgewogCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsIChzdHJ1Y3QgbHBmY19kbWFidWYgKillbHNpb2NiLT5jb250ZXh0Mik7CiAJCWVsc2lvY2ItPmNvbnRleHQyID0gTlVMTDsKQEAgLTQzNzYsNiArNTYyMCwxOSBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX2RvX3Njcl9uc19wbG9naTogSXNzdWUgYSBwbG9naSB0byB0aGUgbmFtZSBzZXJ2ZXIgZm9yIHNjci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIFBvcnQgTG9naW4gKFBMT0dJKSB0byB0aGUgTmFtZSBTZXJ2ZXIgd2l0aAorICogU3RhdGUgQ2hhbmdlIFJlcXVlc3QgKFNDUikgZm9yIGEgQHZwb3J0LiBUaGlzIHJvdXRpbmUgd2lsbCBjcmVhdGUgYW4KKyAqIG5kbHAgZm9yIHRoZSBOYW1lIFNlcnZlciBhc3NvY2lhdGVkIHRvIHRoZSBAdnBvcnQgaWYgc3VjaCBub2RlIGRvZXMKKyAqIG5vdCBhbHJlYWR5IGV4aXN0LiBUaGUgUExPR0kgdG8gTmFtZSBTZXJ2ZXIgaXMgaXNzdWVkIGJ5IGludm9raW5nIHRoZQorICogbHBmY19pc3N1ZV9lbHNfcGxvZ2koKSByb3V0aW5lLiBJZiBGYWJyaWMtRGV2aWNlIE1hbmFnZW1lbnQgSW50ZXJmYWNlCisgKiAoRkRNSSkgaXMgY29uZmlndXJlZCB0byB0aGUgQHZwb3J0LCBhIEZETUkgbm9kZSB3aWxsIGJlIGNyZWF0ZWQgYW5kCisgKiB0aGUgUExPR0kgdG8gRkRNSSBpcyBpc3N1ZWQgYnkgaW52b2tpbmcgbHBmY19pc3N1ZV9lbHNfcGxvZ2koKSByb3V0aW5lLgorICoqLwogdm9pZAogbHBmY19kb19zY3JfbnNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC00NDM0LDYgKzU2OTEsMTggQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19jbXBsX3JlZ19uZXdfdnBvcnQ6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgbmV3IHZwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB0byByZWdpc3RlciBuZXcgdnBvcnQKKyAqIG1haWxib3ggY29tbWFuZC4gSWYgdGhlIG5ldyB2cG9ydCBtYWlsYm94IGNvbW1hbmQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwKKyAqIHRoZSBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luIHNoYWxsIGJlIHBlcmZvcm1lZCBvbiBwaHlzaWNhbCBwb3J0ICh0aGUKKyAqIG5ldyB2cG9ydCBjcmVhdGVkIGlzIGFjdHVhbGx5IGEgcGh5c2ljYWwgcG9ydCwgd2l0aCBWUEkgMCkgb3IgdGhlIHBvcnQKKyAqIGxvZ2luIHRvIE5hbWUgU2VydmVyIGZvciBTdGF0ZSBDaGFuZ2UgUmVxdWVzdCAoU0NSKSB3aWxsIGJlIHBlcmZvcm1lZAorICogb24gdmlydHVhbCBwb3J0IChyZWFsIHZpcnR1YWwgcG9ydCwgd2l0aCBWUEkgZ3JlYXRlciB0aGFuIDApLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9yZWdfbmV3X3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC00NDkxLDYgKzU3NjAsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQ6IFJlZ2lzdGVyIGEgbmV3IHZwb3J0IHdpdGggYSBIQkEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVnaXN0ZXJzIHRoZSBAdnBvcnQgYXMgYSBuZXcgdmlydHVhbCBwb3J0IHdpdGggYSBIQkEuCisgKiBJdCBpcyBkb25lIHRocm91Z2ggYSByZWdpc3RlcmluZyB2cGkgbWFpbGJveCBjb21tYW5kLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAogCQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC00NTMxLDYgKzU4MDksMjYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19mZGlzYzogQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZmRpc2MgaW9jYiBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBGYWJyaWMgRGlzY292ZXIKKyAqIChGRElTQykgRUxTIGNvbW1hbmQuIFNpbmNlIGFsbCB0aGUgRkRJU0MgRUxTIGNvbW1hbmRzIGFyZSBpc3N1ZWQKKyAqIHNpbmdsZSB0aHJlYWRlZCwgZWFjaCBGRElTQyBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcmVzZXQKKyAqIHRoZSBkaXNjb3ZlcnkgdGltZXIgZm9yIGFsbCB2cG9ydHMgc3VjaCB0aGF0IHRoZSB0aW1lcnMgd2lsbCBub3QgZ2V0CisgKiB1bm5lY2Vzc2FyeSB0aW1lb3V0LiBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoZSBGRElTQyBJT0NCIHN0YXR1cy4gSWYgZXJyb3IKKyAqIGRldGVjdGVkLCB0aGUgdnBvcnQgd2lsbCBiZSBzZXQgdG8gRkNfVlBPUlRfRkFJTEVEIHN0YXRlLiBPdGhlcndpc2UsdGhlCisgKiB2cG9ydCB3aWxsIHNldCB0byBGQ19WUE9SVF9BQ1RJVkUgc3RhdGUuIEl0IHRoZW4gY2hlY2tzIHdoZXRoZXIgdGhlIERJRAorICogYXNzaWduZWQgdG8gdGhlIHZwb3J0IGhhcyBiZWVuIGNoYW5nZWQgd2l0aCB0aGUgY29tcGxldGlvbiBvZiB0aGUgRkRJU0MKKyAqIGNvbW1hbmQuIElmIHNvLCBib3RoIFJQSSAoUmVtb3RlIFBvcnQgSW5kZXgpIGFuZCBWUEkgKFZpcnR1YWwgUG9ydCBJbmRleCkKKyAqIGFyZSB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgSEJBLCBhbmQgdGhlbiB0aGUgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoKQorICogcm91dGluZSBpcyBpbnZva2VkIHRvIHJlZ2lzdGVyIG5ldyB2cG9ydCB3aXRoIHRoZSBIQkEuIE90aGVyd2lzZSwgdGhlCisgKiBscGZjX2RvX3Njcl9uc19wbG9naSgpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBpc3N1ZSBhIFBMT0dJIHRvIHRoZSBOYW1lCisgKiBTZXJ2ZXIgZm9yIFN0YXRlIENoYW5nZSBSZXF1ZXN0IChTQ1IpLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfZmRpc2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtNDU2NSw1OCArNTg2Myw4MCBAQAogCQkJZ290byBvdXQ7CiAJCS8qIEZESVNDIGZhaWxlZCAqLwogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKLQkJCQkgIjAxMjQgRkRJU0MgZmFpbGVkLiAoJWQvJWQpXG4iLAorCQkJCSAiMDEyNiBGRElTQyBmYWlsZWQuICglZC8lZClcbiIsCiAJCQkJIGlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSk7CisJCWdvdG8gZmRpc2NfZmFpbGVkOworCX0KIAkJaWYgKHZwb3J0LT5mY192cG9ydC0+dnBvcnRfc3RhdGUgPT0gRkNfVlBPUlRfSU5JVElBTElaSU5HKQogCQkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJLyogZ2l2aW5nIHVwIG9uIEZESVNDLiBDYW5jZWwgZGlzY292ZXJ5IHRpbWVyICovCiAJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCXZwb3J0LT5mY19mbGFnIHw9IEZDX0ZBQlJJQzsKLQkJaWYgKHZwb3J0LT5waGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKQotCQkJdnBvcnQtPmZjX2ZsYWcgfD0gIEZDX1BVQkxJQ19MT09QOwotCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19GQUJSSUM7CisJaWYgKHZwb3J0LT5waGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKQorCQl2cG9ydC0+ZmNfZmxhZyB8PSAgRkNfUFVCTElDX0xPT1A7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCi0JCXZwb3J0LT5mY19teURJRCA9IGlyc3AtPnVuLnVscFdvcmRbNF0gJiBNYXNrX0RJRDsKLQkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0FDVElWRSk7Ci0JCWlmICgodnBvcnQtPmZjX3ByZXZESUQgIT0gdnBvcnQtPmZjX215RElEKSAmJgotCQkJISh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpKSB7Ci0JCQkvKiBJZiBvdXIgTnBvcnRJRCBjaGFuZ2VkLCB3ZSBuZWVkIHRvIGVuc3VyZSBhbGwKLQkJCSAqIHJlbWFpbmluZyBOUE9SVHMgZ2V0IHVucmVnX2xvZ2luJ2VkIHNvIHdlIGNhbgotCQkJICogaXNzdWUgdW5yZWdfdnBpLgotCQkJICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnAsIG5leHRfbnAsCi0JCQkJJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7Ci0JCQkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApIHx8Ci0JCQkJICAgIChucC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTlBSX05PREUpIHx8Ci0JCQkJICAgICEobnAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJbnAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOwotCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQlscGZjX3VucmVnX3JwaSh2cG9ydCwgbnApOwotCQkJfQotCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKKwl2cG9ydC0+ZmNfbXlESUQgPSBpcnNwLT51bi51bHBXb3JkWzRdICYgTWFza19ESUQ7CisJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0FDVElWRSk7CisJaWYgKCh2cG9ydC0+ZmNfcHJldkRJRCAhPSB2cG9ydC0+ZmNfbXlESUQpICYmCisJCSEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKSkgeworCQkvKiBJZiBvdXIgTnBvcnRJRCBjaGFuZ2VkLCB3ZSBuZWVkIHRvIGVuc3VyZSBhbGwKKwkJICogcmVtYWluaW5nIE5QT1JUcyBnZXQgdW5yZWdfbG9naW4nZWQgc28gd2UgY2FuCisJCSAqIGlzc3VlIHVucmVnX3ZwaS4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgbmV4dF9ucCwKKwkJCSZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApIHx8CisJCQkgICAgKG5wLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9OUFJfTk9ERSkgfHwKKwkJCSAgICAhKG5wLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKQorCQkJCWNvbnRpbnVlOwogCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQlucC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfQURJU0M7CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlscGZjX3VucmVnX3JwaSh2cG9ydCwgbnApOwogCQl9Ci0KLQkJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkKLQkJCWxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHBoYmEsIHZwb3J0LCBuZGxwKTsKLQkJZWxzZQotCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwotCi0JCS8qIFVuY29uZGl0aW9uYWx5IGtpY2sgb2ZmIHJlbGVhc2luZyBmYWJyaWMgbm9kZSBmb3IgdnBvcnRzICovCi0JCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAorCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCisJCWxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHBoYmEsIHZwb3J0LCBuZGxwKTsKKwllbHNlCisJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKKwlnb3RvIG91dDsKK2ZkaXNjX2ZhaWxlZDoKKwlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfRkFJTEVEKTsKKwkvKiBDYW5jZWwgZGlzY292ZXJ5IHRpbWVyICovCisJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7CisJbHBmY19ubHBfcHV0KG5kbHApOwogb3V0OgogCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NiKTsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19mZGlzYzogSXNzdWUgYSBmZGlzYyBpb2NiIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyBhbmQgaXNzdWVzIGEgRmFicmljIERpc2NvdmVyIChGRElTQykgSU9DQiB0bworICogYSByZW1vdGUgbm9kZSAoQG5kbHApIG9mZiBhIEB2cG9ydC4gSXQgdXNlcyB0aGUgbHBmY19pc3N1ZV9mYWJyaWNfaW9jYigpCisgKiByb3V0aW5lIHRvIGlzc3VlIHRoZSBJT0NCLCB3aGljaCBtYWtlcyBzdXJlIG9ubHkgb25lIG91dHN0YW5kaW5nIGZhYnJpYworICogSU9DQiB3aWxsIGJlIHNlbnQgb2ZmIEhCQSBhdCBhbnkgZ2l2ZW4gdGltZS4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEZESVNDIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGZkaXNjIGlvY2IgY29tbWFuZAorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGZkaXNjIGlvY2IgY29tbWFuZAorICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9lbHNfZmRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJICAgICB1aW50OF90IHJldHJ5KQpAQCAtNDY5MSw2ICs2MDExLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19ucGl2X2xvZ286IENvbXBsZXRpb24gZnVuY3Rpb24gd2l0aCB2cG9ydCBsb2dvLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIGlzc3Vpbmcgb2YgYSBMT0dPCisgKiBFTFMgY29tbWFuZCBvZmYgYSB2cG9ydC4gSXQgZnJlZXMgdGhlIGNvbW1hbmQgSU9DQiBhbmQgdGhlbiBkZWNyZW1lbnQgdGhlCisgKiByZWZlcmVuY2UgY291bnQgaGVsZCBvbiBuZGxwIGZvciB0aGlzIGNvbXBsZXRpb24gZnVuY3Rpb24sIGluZGljYXRpbmcgdGhhdAorICogdGhlIHJlZmVyZW5jZSB0byB0aGUgbmRscCBpcyBubyBsb25nIG5lZWRlZC4gTm90ZSB0aGF0IHRoZQorICogbHBmY19lbHNfZnJlZV9pb2NiKCkgcm91dGluZSBkZWNyZW1lbnRzIHRoZSBuZGxwIHJlZmVyZW5jZSBoZWxkIGZvciB0aGlzCisgKiBjYWxsYmFjayBmdW5jdGlvbiBhbmQgYW4gYWRkaXRpb25hbCBleHBsaWNpdCBuZGxwIHJlZmVyZW5jZSBkZWNyZW1lbnRhdGlvbgorICogd2lsbCB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVsZWFzZSBvZiB0aGUgbmRscC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX25waXZfbG9nbyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC00NzEyLDYgKzYwNDYsMjIgQEAKIAlscGZjX25scF9wdXQobmRscCk7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfbnBpdl9sb2dvOiBJc3N1ZSBhIGxvZ28gb2ZmIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBMT0dPIEVMUyBjb21tYW5kIHRvIGFuIEBuZGxwIG9mZiBhIEB2cG9ydC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIExPR08gRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGxvZ28gb2ZmIHRoZSBAdnBvcnQKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBsb2dvIG9mZiB0aGUgQHZwb3J0CisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX25waXZfbG9nbyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewpAQCAtNDc1Nyw2ICs2MTA3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19mYWJyaWNfYmxvY2tfdGltZW91dDogSGFuZGxlciBmdW5jdGlvbiB0byB0aGUgZmFicmljIGJsb2NrIHRpbWVyLgorICogQHB0cjogaG9sZGVyIGZvciB0aGUgdGltZXIgZnVuY3Rpb24gYXNzb2NpYXRlZCBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSBmYWJyaWMgaW9jYiBibG9jayB0aW1lciBhZnRlcgorICogdGltZW91dC4gSXQgcG9zdHMgdGhlIGZhYnJpYyBpb2NiIGJsb2NrIHRpbWVvdXQgZXZlbnQgYnkgc2V0dGluZyB0aGUKKyAqIFdPUktFUl9GQUJSSUNfQkxPQ0tfVE1PIGJpdCB0byB3b3JrIHBvcnQgZXZlbnQgYml0bWFwIGFuZCB0aGVuIGludm9rZXMKKyAqIGxwZmNfd29ya2VyX3dha2VfdXAoKSByb3V0aW5lIHRvIHdha2UgdXAgdGhlIHdvcmtlciB0aHJlYWQuIEl0IGlzIGZvcgorICogdGhlIHdvcmtlciB0aHJlYWQgdG8gaW52b2tlIHRoZSBscGZjX3VuYmxvY2tfZmFicmljX2lvY2JzKCkgb24gdGhlCisgKiBwb3N0ZWQgZXZlbnQgV09SS0VSX0ZBQlJJQ19CTE9DS19UTU8uCisgKiovCiB2b2lkCiBscGZjX2ZhYnJpY19ibG9ja190aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtNDc3NSw2ICs2MTM2LDE2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfcmVzdW1lX2ZhYnJpY19pb2NiczogSXNzdWUgYSBmYWJyaWMgaW9jYiBmcm9tIGRyaXZlciBpbnRlcm5hbCBsaXN0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBvbmUgZmFicmljIGlvY2IgZnJvbSB0aGUgZHJpdmVyIGludGVybmFsIGxpc3QgdG8KKyAqIHRoZSBIQkEuIEl0IGZpcnN0IGNoZWNrcyB3aGV0aGVyIGl0J3MgcmVhZHkgdG8gaXNzdWUgb25lIGZhYnJpYyBpb2NiIHRvCisgKiB0aGUgSEJBICh3aGV0aGVyIHRoZXJlIGlzIG5vIG91dHN0YW5kaW5nIGZhYnJpYyBpb2NiKS4gSWYgc28sIGl0IHNoYWxsCisgKiByZW1vdmUgb25lIHBlbmRpbmcgZmFicmljIGlvY2IgZnJvbSB0aGUgZHJpdmVyIGludGVybmFsIGxpc3QgYW5kIGludm9rZXMKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgdGhlIGZhYnJpYyBpb2NiIHRvIHRoZSBIQkEuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19yZXN1bWVfZmFicmljX2lvY2JzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTQ4MjQsNiArNjE5NSwxNSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3VuYmxvY2tfZmFicmljX2lvY2JzOiBVbmJsb2NrIGlzc3VpbmcgZmFicmljIGlvY2IgY29tbWFuZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB1bmJsb2NrcyB0aGUgIGlzc3VpbmcgZmFicmljIGlvY2IgY29tbWFuZC4gVGhlIGZ1bmN0aW9uCisgKiB3aWxsIGNsZWFyIHRoZSBmYWJyaWMgaW9jYiBibG9jayBiaXQgYW5kIHRoZW4gaW52b2tlIHRoZSByb3V0aW5lCisgKiBscGZjX3Jlc3VtZV9mYWJyaWNfaW9jYnMoKSB0byBpc3N1ZSBvbmUgb2YgdGhlIHBlbmRpbmcgZmFicmljIGlvY2IKKyAqIGZyb20gdGhlIGRyaXZlciBpbnRlcm5hbCBmYWJyaWMgaW9jYiBsaXN0LgorICoqLwogdm9pZAogbHBmY191bmJsb2NrX2ZhYnJpY19pb2NicyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC00ODMzLDYgKzYyMTMsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19ibG9ja19mYWJyaWNfaW9jYnM6IEJsb2NrIGlzc3VpbmcgZmFicmljIGlvY2IgY29tbWFuZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBibG9ja3MgdGhlIGlzc3VpbmcgZmFicmljIGlvY2IgZm9yIGEgc3BlY2lmaWVkIGFtb3VudCBvZgorICogdGltZSAoY3VycmVudGx5IDEwMCBtcykuIFRoaXMgaXMgZG9uZSBieSBzZXQgdGhlIGZhYnJpYyBpb2NiIGJsb2NrIGJpdAorICogYW5kIHNldCB1cCBhIHRpbWVvdXQgdGltZXIgZm9yIDEwMG1zLiBXaGVuIHRoZSBibG9jayBiaXQgaXMgc2V0LCBubyBtb3JlCisgKiBmYWJyaWMgaW9jYiB3aWxsIGJlIGlzc3VlZCBvdXQgb2YgdGhlIEhCQS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2Jsb2NrX2ZhYnJpY19pb2NicyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC00ODQ2LDYgKzYyMzUsMTkgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2ZhYnJpY19pb2NiOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBmYWJyaWMgaW9jYi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIHB1dCB0byB0aGUgZmFicmljIGlvY2IncworICogY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAoaW9jYi0+aW9jYl9jbXBsKS4gVGhlIG9yaWdpbmFsIGlvY2IncyBjYWxsYmFjaworICogZnVuY3Rpb24gcG9pbnRlciBoYXMgYmVlbiBzdG9yZWQgaW4gaW9jYi0+ZmFicmljX2lvY2JfY21wbC4gVGhpcyBjYWxsYmFjaworICogZnVuY3Rpb24gZmlyc3QgcmVzdG9yZXMgYW5kIGludm9rZXMgdGhlIG9yaWdpbmFsIGlvY2IncyBjYWxsYmFjayBmdW5jdGlvbgorICogYW5kIHRoZW4gaW52b2tlcyB0aGUgbHBmY19yZXN1bWVfZmFicmljX2lvY2JzKCkgcm91dGluZSB0byBpc3N1ZSB0aGUgbmV4dAorICogZmFicmljIGJvdW5kIGlvY2IgZnJvbSB0aGUgZHJpdmVyIGludGVybmFsIGZhYnJpYyBpb2NiIGxpc3Qgb250byB0aGUgd2lyZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTQ4OTIsNiArNjI5NCwzMCBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2ZhYnJpY19pb2NiOiBJc3N1ZSBhIGZhYnJpYyBpb2NiIGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGFzIHRoZSB0b3AtbGV2ZWwgQVBJIGZvciBpc3N1aW5nIGEgZmFicmljIGlvY2IgY29tbWFuZAorICogc3VjaCBhcyBGTE9HSSBhbmQgRkRJU0MuIFRvIGFjY29tbW9kYXRlIGNlcnRhaW4gc3dpdGNoIGZhYnJpYywgdGhpcyBkcml2ZXIKKyAqIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBvbmx5IG9uZSBmYWJyaWMgYm91bmQgaW9jYiB3aWxsIGJlIG91dHN0YW5kaW5nIGF0CisgKiBhbnkgZ2l2ZW4gdGltZS4gQXMgc3VjaCwgdGhpcyBmdW5jdGlvbiB3aWxsIGZpcnN0IGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZXJlCisgKiBpcyBhbHJlYWR5IGFuIG91dHN0YW5kaW5nIGZhYnJpYyBpb2NiIG9uIHRoZSB3aXJlLiBJZiBzbywgaXQgd2lsbCBwdXQgdGhlCisgKiBuZXdseSBpc3N1ZWQgaW9jYiBvbnRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgZmFicmljIGlvY2IgbGlzdCwgd2FpdGluZyB0byBiZQorICogaXNzdWVkIGxhdGVyLiBPdGhlcndpc2UsIGl0IHdpbGwgaXNzdWUgdGhlIGlvY2Igb24gdGhlIHdpcmUgYW5kIHVwZGF0ZSB0aGUKKyAqIGZhYnJpYyBpb2NiIGNvdW50IGl0IGluZGljYXRlIHRoYXQgdGhlcmUgaXMgb25lIGZhYnJpYyBpb2NiIG9uIHRoZSB3aXJlLgorICoKKyAqIE5vdGUsIHRoaXMgaW1wbGVtZW50YXRpb24gaGFzIGEgcG90ZW50aWFsIHNlbmRpbmcgb3V0IGZhYnJpYyBJT0NCcyBvdXQgb2YKKyAqIG9yZGVyLiBUaGUgcHJvYmxlbSBpcyBjYXVzZWQgYnkgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgInJlYWR5IiBib29sZW4gZG9lcworICogbm90IGluY2x1ZGUgdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSBpbnRlcm5hbCBmYWJyaWMgSU9DQiBsaXN0IGlzIGVtcHR5LiBBcworICogc3VjaCwgaXQgaXMgcG9zc2libGUgYSBmYWJyaWMgSU9DQiBpc3N1ZWQgYnkgdGhpcyByb3V0aW5lIG1pZ2h0IGJlICJqdW1wIgorICogYWhlYWQgb2YgdGhlIGZhYnJpYyBJT0NCcyBpbiB0aGUgaW50ZXJuYWwgbGlzdC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICBJT0NCX1NVQ0NFU1MgLSBlaXRoZXIgZmFicmljIGlvY2IgcHV0IG9uIHRoZSBsaXN0IG9yIGlzc3VlZCBzdWNjZXNzZnVsbHkKKyAqICAgSU9DQl9FUlJPUiAtIGZhaWxlZCB0byBpc3N1ZSBmYWJyaWMgaW9jYgorICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9mYWJyaWNfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICppb2NiKQogewpAQCAtNDkzNyw3ICs2MzYzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCisvKioKKyAqIGxwZmNfZmFicmljX2Fib3J0X3Zwb3J0OiBBYm9ydCBhIHZwb3J0J3MgaW9jYnMgZnJvbSBkcml2ZXIgZmFicmljIGlvY2IgbGlzdC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydHMgYWxsIHRoZSBJT0NCcyBhc3NvY2lhdGVkIHdpdGggYSBAdnBvcnQgZnJvbSB0aGUKKyAqIGRyaXZlciBpbnRlcm5hbCBmYWJyaWMgSU9DQiBsaXN0LiBUaGUgbGlzdCBjb250YWlucyBmYWJyaWMgSU9DQnMgdG8gYmUKKyAqIGlzc3VlZCB0byB0aGUgRUxTIElPQ0IgcmluZy4gVGhpcyBhYm9ydCBmdW5jdGlvbiB3YWxrcyB0aGUgZmFicmljIElPQ0IKKyAqIGxpc3QsIHJlbW92ZXMgZWFjaCBJT0NCIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHZwb3J0IG9mZiB0aGUgbGlzdCwgc2V0IHRoZQorICogc3RhdHVzIGZlaWxkIHRvIElPU1RBVF9MT0NBTF9SRUpFQ1QsIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBJT0NCLgorICoqLwogc3RhdGljIHZvaWQgbHBmY19mYWJyaWNfYWJvcnRfdnBvcnQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewogCUxJU1RfSEVBRChjb21wbGV0aW9ucyk7CkBAIC00OTY3LDYgKzY0MDMsMTcgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19mYWJyaWNfYWJvcnRfbnBvcnQ6IEFib3J0IGEgbmRscCdzIGlvY2JzIGZyb20gZHJpdmVyIGZhYnJpYyBpb2NiIGxpc3QuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnRzIGFsbCB0aGUgSU9DQnMgYXNzb2NpYXRlZCB3aXRoIGFuIEBuZGxwIGZyb20gdGhlCisgKiBkcml2ZXIgaW50ZXJuYWwgZmFicmljIElPQ0IgbGlzdC4gVGhlIGxpc3QgY29udGFpbnMgZmFicmljIElPQ0JzIHRvIGJlCisgKiBpc3N1ZWQgdG8gdGhlIEVMUyBJT0NCIHJpbmcuIFRoaXMgYWJvcnQgZnVuY3Rpb24gd2Fsa3MgdGhlIGZhYnJpYyBJT0NCCisgKiBsaXN0LCByZW1vdmVzIGVhY2ggSU9DQiBhc3NvY2lhdGVkIHdpdGggdGhlIEBuZGxwIG9mZiB0aGUgbGlzdCwgc2V0IHRoZQorICogc3RhdHVzIGZlaWxkIHRvIElPU1RBVF9MT0NBTF9SRUpFQ1QsIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBJT0NCLgorICoqLwogdm9pZCBscGZjX2ZhYnJpY19hYm9ydF9ucG9ydChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKIAlMSVNUX0hFQUQoY29tcGxldGlvbnMpOwpAQCAtNDk5Niw2ICs2NDQzLDE3IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfZmFicmljX2Fib3J0X2hiYTogQWJvcnQgYWxsIGlvY2JzIG9uIGRyaXZlciBmYWJyaWMgaW9jYiBsaXN0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGFib3J0cyBhbGwgdGhlIElPQ0JzIGN1cnJlbnRseSBvbiB0aGUgZHJpdmVyIGludGVybmFsCisgKiBmYWJyaWMgSU9DQiBsaXN0LiBUaGUgbGlzdCBjb250YWlucyBmYWJyaWMgSU9DQnMgdG8gYmUgaXNzdWVkIHRvIHRoZSBFTFMKKyAqIElPQ0IgcmluZy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgZW50aXJlIElPQ0IgbGlzdCBvZmYgdGhlIGZhYnJpYyBJT0NCCisgKiBsaXN0LCByZW1vdmVzIElPQ0JzIG9mZiB0aGUgbGlzdCwgc2V0IHRoZSBzdGF0dXMgZmVpbGQgdG8KKyAqIElPU1RBVF9MT0NBTF9SRUpFQ1QsIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBJT0NCLgorICoqLwogdm9pZCBscGZjX2ZhYnJpY19hYm9ydF9oYmEoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCUxJU1RfSEVBRChjb21wbGV0aW9ucyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IGE5OGQxMWIuLmExYTcwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgogCiAjaW5jbHVkZSAibHBmY19ody5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgpAQCAtODgsMTQgKzg5LDYgQEAKIAkJCSZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAogCQkJbmRscC0+bmxwX3NpZCwgMCwgTFBGQ19DVFhfVEdUKTsKIAl9Ci0KLQkvKgotCSAqIEEgZGV2aWNlIGlzIG5vcm1hbGx5IGJsb2NrZWQgZm9yIHJlZGlzY292ZXJ5IGFuZCB1bmJsb2NrZWQgd2hlbgotCSAqIGRldmxvc3MgdGltZW91dCBoYXBwZW5zLiAgSW4gY2FzZSBhIHZwb3J0IGlzIHJlbW92ZWQgb3IgZHJpdmVyCi0JICogdW5sb2FkZWQgYmVmb3JlIGRldmxvc3MgdGltZW91dCBoYXBwZW5zLCB3ZSBuZWVkIHRvIHVuYmxvY2sgaGVyZS4KLQkgKi8KLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKLQlyZXR1cm47CiB9CiAKIC8qCkBAIC0yMTUsOCArMjA4LDE2IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUpCisJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX01BUFBFRF9OT0RFKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKKwkJCQkgIjAyODQgRGV2bG9zcyB0aW1lb3V0IElnbm9yZWQgb24gIgorCQkJCSAiV1dQTiAleDoleDoleDoleDoleDoleDoleDoleCAiCisJCQkJICJOUG9ydCB4JXhcbiIsCisJCQkJICpuYW1lLCAqKG5hbWUrMSksICoobmFtZSsyKSwgKihuYW1lKzMpLAorCQkJCSAqKG5hbWUrNCksICoobmFtZSs1KSwgKihuYW1lKzYpLCAqKG5hbWUrNyksCisJCQkJIG5kbHAtPm5scF9ESUQpOwogCQlyZXR1cm47CisJfQogCiAJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgewogCQkvKiBXZSB3aWxsIGNsZWFuIHVwIHRoZXNlIE5vZGVzIGluIGxpbmt1cCAqLwpAQCAtMjM3LDggKzIzOCw2IEBACiAJCWxwZmNfc2xpX2Fib3J0X2lvY2IodnBvcnQsICZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddLAogCQkJCSAgICBuZGxwLT5ubHBfc2lkLCAwLCBMUEZDX0NUWF9UR1QpOwogCX0KLQlpZiAodnBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykKLQkJd2Fybl9vbiA9IDA7CiAKIAlpZiAod2Fybl9vbikgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKQEAgLTI3Niw2ICsyNzUsMTI0IEBACiAJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHZwb3J0LCBuZGxwLCBOVUxMLCBOTFBfRVZUX0RFVklDRV9STSk7CiB9CiAKKy8qKgorICogbHBmY19hbGxvY19mYXN0X2V2dDogQWxsb2NhdGVzIGRhdGEgc3RydWN0dXJlIGZvciBwb3N0aW5nIGV2ZW50LgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGZ1bmN0aW9ucyB3aGljaCBuZWVkIHRvIHBvc3QKKyAqIGV2ZW50cyBmcm9tIGludGVycnVwdCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBkYXRhCisgKiBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIHBvc3RpbmcgZXZlbnQuIEl0IGFsc28ga2VlcHMgdHJhY2sgb2YKKyAqIG51bWJlciBvZiBldmVudHMgcGVuZGluZyBhbmQgcHJldmVudCBldmVudCBzdG9ybSB3aGVuIHRoZXJlIGFyZQorICogdG9vIG1hbnkgZXZlbnRzLgorICoqLworc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICoKK2xwZmNfYWxsb2NfZmFzdF9ldnQoc3RydWN0IGxwZmNfaGJhICpwaGJhKSB7CisJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpyZXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgbG90IG9mIGZhc3QgZXZlbnQgZG8gbm90IGV4aGF1c3QgbWVtb3J5IGR1ZSB0byB0aGlzICovCisJaWYgKGF0b21pY19yZWFkKCZwaGJhLT5mYXN0X2V2ZW50X2NvdW50KSA+IExQRkNfTUFYX0VWVF9DT1VOVCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQpLAorCQkJR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJYXRvbWljX2luYygmcGhiYS0+ZmFzdF9ldmVudF9jb3VudCk7CisJSU5JVF9MSVNUX0hFQUQoJnJldC0+d29ya19ldnQuZXZ0X2xpc3RwKTsKKwlyZXQtPndvcmtfZXZ0LmV2dCA9IExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbHBmY19mcmVlX2Zhc3RfZXZ0OiBGcmVlcyBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqIEBldnQ6ICBFdmVudCBvYmplY3Qgd2hpY2ggbmVlZCB0byBiZSBmcmVlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBkYXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgcG9zdGluZworICogZXZlbnRzLgorICoqLwordm9pZAorbHBmY19mcmVlX2Zhc3RfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpldnQpIHsKKworCWF0b21pY19kZWMoJnBoYmEtPmZhc3RfZXZlbnRfY291bnQpOworCWtmcmVlKGV2dCk7Cit9CisKKy8qKgorICogbHBmY19zZW5kX2Zhc3RwYXRoX2V2dDogUG9zdHMgZXZlbnRzIGdlbmVyYXRlZCBmcm9tIGZhc3QgcGF0aC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqIEBldnRwOiBFdmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdvcmtlciB0aHJlYWQsIHdoZW4gdGhlIGludGVycnVwdAorICogY29udGV4dCBuZWVkIHRvIHBvc3QgYW4gZXZlbnQuIFRoaXMgZnVuY3Rpb24gcG9zdHMgdGhlIGV2ZW50CisgKiB0byBmYyB0cmFuc3BvcnQgbmV0bGluayBpbnRlcmZhY2UuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19zZW5kX2Zhc3RwYXRoX2V2dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCXN0cnVjdCBscGZjX3dvcmtfZXZ0ICpldnRwKQoreworCXVuc2lnbmVkIGxvbmcgZXZ0X2NhdGVnb3J5LCBldnRfc3ViX2NhdGVnb3J5OworCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqZmFzdF9ldnRfZGF0YTsKKwljaGFyICpldnRfZGF0YTsKKwl1aW50MzJfdCBldnRfZGF0YV9zaXplOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCisJZmFzdF9ldnRfZGF0YSA9IGNvbnRhaW5lcl9vZihldnRwLCBzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQsCisJCXdvcmtfZXZ0KTsKKworCWV2dF9jYXRlZ29yeSA9ICh1bnNpZ25lZCBsb25nKSBmYXN0X2V2dF9kYXRhLT51bi5mYWJyaWNfZXZ0LmV2ZW50X3R5cGU7CisJZXZ0X3N1Yl9jYXRlZ29yeSA9ICh1bnNpZ25lZCBsb25nKSBmYXN0X2V2dF9kYXRhLT51bi4KKwkJCWZhYnJpY19ldnQuc3ViY2F0ZWdvcnk7CisJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQoZmFzdF9ldnRfZGF0YS0+dnBvcnQpOworCWlmIChldnRfY2F0ZWdvcnkgPT0gRkNfUkVHX0ZBQlJJQ19FVkVOVCkgeworCQlpZiAoZXZ0X3N1Yl9jYXRlZ29yeSA9PSBMUEZDX0VWRU5UX0ZDUFJEQ0hLRVJSKSB7CisJCQlldnRfZGF0YSA9IChjaGFyICopICZmYXN0X2V2dF9kYXRhLT51bi5yZWFkX2NoZWNrX2Vycm9yOworCQkJZXZ0X2RhdGFfc2l6ZSA9IHNpemVvZihmYXN0X2V2dF9kYXRhLT51bi4KKwkJCQlyZWFkX2NoZWNrX2Vycm9yKTsKKwkJfSBlbHNlIGlmICgoZXZ0X3N1Yl9jYXRlZ29yeSA9PSBMUEZDX0VWRU5UX0ZBQlJJQ19CVVNZKSB8fAorCQkJKGV2dF9zdWJfY2F0ZWdvcnkgPT0gSU9TVEFUX05QT1JUX0JTWSkpIHsKKwkJCWV2dF9kYXRhID0gKGNoYXIgKikgJmZhc3RfZXZ0X2RhdGEtPnVuLmZhYnJpY19ldnQ7CisJCQlldnRfZGF0YV9zaXplID0gc2l6ZW9mKGZhc3RfZXZ0X2RhdGEtPnVuLmZhYnJpY19ldnQpOworCQl9IGVsc2UgeworCQkJbHBmY19mcmVlX2Zhc3RfZXZ0KHBoYmEsIGZhc3RfZXZ0X2RhdGEpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmIChldnRfY2F0ZWdvcnkgPT0gRkNfUkVHX1NDU0lfRVZFTlQpIHsKKwkJc3dpdGNoIChldnRfc3ViX2NhdGVnb3J5KSB7CisJCWNhc2UgTFBGQ19FVkVOVF9RRlVMTDoKKwkJY2FzZSBMUEZDX0VWRU5UX0RFVkJTWToKKwkJCWV2dF9kYXRhID0gKGNoYXIgKikgJmZhc3RfZXZ0X2RhdGEtPnVuLnNjc2lfZXZ0OworCQkJZXZ0X2RhdGFfc2l6ZSA9IHNpemVvZihmYXN0X2V2dF9kYXRhLT51bi5zY3NpX2V2dCk7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0VWRU5UX0NIRUNLX0NPTkQ6CisJCQlldnRfZGF0YSA9IChjaGFyICopICZmYXN0X2V2dF9kYXRhLT51bi5jaGVja19jb25kX2V2dDsKKwkJCWV2dF9kYXRhX3NpemUgPSAgc2l6ZW9mKGZhc3RfZXZ0X2RhdGEtPnVuLgorCQkJCWNoZWNrX2NvbmRfZXZ0KTsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfRVZFTlRfVkFSUVVFREVQVEg6CisJCQlldnRfZGF0YSA9IChjaGFyICopICZmYXN0X2V2dF9kYXRhLT51bi5xdWV1ZV9kZXB0aF9ldnQ7CisJCQlldnRfZGF0YV9zaXplID0gc2l6ZW9mKGZhc3RfZXZ0X2RhdGEtPnVuLgorCQkJCXF1ZXVlX2RlcHRoX2V2dCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWxwZmNfZnJlZV9mYXN0X2V2dChwaGJhLCBmYXN0X2V2dF9kYXRhKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWxwZmNfZnJlZV9mYXN0X2V2dChwaGJhLCBmYXN0X2V2dF9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJZXZ0X2RhdGFfc2l6ZSwKKwkJZXZ0X2RhdGEsCisJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCisJbHBmY19mcmVlX2Zhc3RfZXZ0KHBoYmEsIGZhc3RfZXZ0X2RhdGEpOworCXJldHVybjsKK30KKwogc3RhdGljIHZvaWQKIGxwZmNfd29ya19saXN0X2RvbmUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzQ3LDYgKzQ2NCwxMCBAQAogCQkJbHBmY191bmJsb2NrX21nbXRfaW8ocGhiYSk7CiAJCQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKikoZXZ0cC0+ZXZ0X2FyZzIpKTsKIAkJCWJyZWFrOworCQljYXNlIExQRkNfRVZUX0ZBU1RQQVRIX01HTVRfRVZUOgorCQkJbHBmY19zZW5kX2Zhc3RwYXRoX2V2dChwaGJhLCBldnRwKTsKKwkJCWZyZWVfZXZ0ID0gMDsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChmcmVlX2V2dCkKIAkJCWtmcmVlKGV2dHApOwpAQCAtMzcxLDYgKzQ5Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCWlmIChoYV9jb3B5ICYgSEFfRVJBVFQpCisJCS8qIEhhbmRsZSB0aGUgZXJyb3IgYXR0ZW50aW9uIGV2ZW50ICovCiAJCWxwZmNfaGFuZGxlX2VyYXR0KHBoYmEpOwogCiAJaWYgKGhhX2NvcHkgJiBIQV9NQkFUVCkKQEAgLTM3OCw2ICs1MDAsNyBAQAogCiAJaWYgKGhhX2NvcHkgJiBIQV9MQVRUKQogCQlscGZjX2hhbmRsZV9sYXR0KHBoYmEpOworCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpCiAJCWZvcihpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpOyBpKyspIHsKQEAgLTEwMTMsMTQgKzExMzYsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWxwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCitscGZjX2VuYWJsZV9sYShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJdWludDMyX3QgY29udHJvbDsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwotCi0JbHBmY19saW5rZG93bihwaGJhKTsKLQotCS8qIHR1cm4gb24gTGluayBBdHRlbnRpb24gaW50ZXJydXB0cyAtIG5vIENMRUFSX0xBIG5lZWRlZCAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXBzbGktPnNsaV9mbGFnIHw9IExQRkNfUFJPQ0VTU19MQTsKIAljb250cm9sID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKQEAgLTEwMzAsNiArMTE0OSwxNSBAQAogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkCitscGZjX21ieF9pc3N1ZV9saW5rX2Rvd24oc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWxwZmNfbGlua2Rvd24ocGhiYSk7CisJbHBmY19lbmFibGVfbGEocGhiYSk7CisJLyogdHVybiBvbiBMaW5rIEF0dGVudGlvbiBpbnRlcnJ1cHRzIC0gbm8gQ0xFQVJfTEEgbmVlZGVkICovCit9CisKKwogLyoKICAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHByb2Nlc3NpbmcgYSBSRUFEX0xBIG1haWxib3gKICAqIGNvbW1hbmQgdXBvbiBjb21wbGV0aW9uLiBJdCBpcyBzZXR1cCBpbiB0aGUgTFBGQ19NQk9YUQpAQCAtMTA3Nyw4ICsxMjA1LDEyIEBACiAJfQogCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSBsYS0+ZXZlbnRUYWc7CisJaWYgKGxhLT5tbSkKKwkJcGhiYS0+c2xpLnNsaV9mbGFnIHw9IExQRkNfTUVOTE9fTUFJTlQ7CisJZWxzZQorCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfTUVOTE9fTUFJTlQ7CiAKLQlpZiAobGEtPmF0dFR5cGUgPT0gQVRfTElOS19VUCkgeworCWlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQICYmICghbGEtPm1tKSkgewogCQlwaGJhLT5mY19zdGF0LkxpbmtVcCsrOwogCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKQEAgLTEwOTAsMTMgKzEyMjIsMTUgQEAKIAkJfSBlbHNlIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCiAJCQkJCSIxMzAzIExpbmsgVXAgRXZlbnQgeCV4IHJlY2VpdmVkICIKLQkJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleFxuIiwKKwkJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXggeCV4ICVkXG4iLAogCQkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAogCQkJCQlsYS0+Z3JhbnRlZF9BTF9QQSwgbGEtPlVsbmtTcGVlZCwKLQkJCQkJcGhiYS0+YWxwYV9tYXBbMF0pOworCQkJCQlwaGJhLT5hbHBhX21hcFswXSwKKwkJCQkJbGEtPm1tLCBsYS0+ZmEsCisJCQkJCXBoYmEtPndhaXRfNF9tbG9fbWFpbnRfZmxnKTsKIAkJfQogCQlscGZjX21ieF9wcm9jZXNzX2xpbmtfdXAocGhiYSwgbGEpOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX0RPV04pIHsKIAkJcGhiYS0+ZmNfc3RhdC5MaW5rRG93bisrOwogCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKQEAgLTExMDksMTEgKzEyNDMsNDYgQEAKIAkJZWxzZSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULAogCQkJCSIxMzA1IExpbmsgRG93biBFdmVudCB4JXggcmVjZWl2ZWQgIgorCQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXggeCV4XG4iLAorCQkJCWxhLT5ldmVudFRhZywgcGhiYS0+ZmNfZXZlbnRUYWcsCisJCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUsIHZwb3J0LT5mY19mbGFnLAorCQkJCWxhLT5tbSwgbGEtPmZhKTsKKwkJfQorCQlscGZjX21ieF9pc3N1ZV9saW5rX2Rvd24ocGhiYSk7CisJfQorCWlmIChsYS0+bW0gJiYgbGEtPmF0dFR5cGUgPT0gQVRfTElOS19VUCkgeworCQlpZiAocGhiYS0+bGlua19zdGF0ZSAhPSBMUEZDX0xJTktfRE9XTikgeworCQkJcGhiYS0+ZmNfc3RhdC5MaW5rRG93bisrOworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKKwkJCQkiMTMxMiBMaW5rIERvd24gRXZlbnQgeCV4IHJlY2VpdmVkICIKIAkJCQkiRGF0YTogeCV4IHgleCB4JXhcbiIsCiAJCQkJbGEtPmV2ZW50VGFnLCBwaGJhLT5mY19ldmVudFRhZywKIAkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSwgdnBvcnQtPmZjX2ZsYWcpOworCQkJbHBmY19tYnhfaXNzdWVfbGlua19kb3duKHBoYmEpOworCQl9IGVsc2UKKwkJCWxwZmNfZW5hYmxlX2xhKHBoYmEpOworCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCisJCQkJIjEzMTAgTWVubG8gTWFpbnQgTW9kZSBMaW5rIHVwIEV2ZW50IHgleCByY3ZkICIKKwkJCQkiRGF0YTogeCV4IHgleCB4JXhcbiIsCisJCQkJbGEtPmV2ZW50VGFnLCBwaGJhLT5mY19ldmVudFRhZywKKwkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSwgdnBvcnQtPmZjX2ZsYWcpOworCQkvKgorCQkgKiBUaGUgY21uZCB0aGF0IHRyaWdnZXJlZCB0aGlzIHdpbGwgYmUgd2FpdGluZyBmb3IgdGhpcworCQkgKiBzaWduYWwuCisJCSAqLworCQkvKiBXQUtFVVAgZm9yIE1FTkxPX1NFVF9NT0RFIG9yIE1FTkxPX1JFU0VUIGNvbW1hbmQuICovCisJCWlmIChwaGJhLT53YWl0XzRfbWxvX21haW50X2ZsZykgeworCQkJcGhiYS0+d2FpdF80X21sb19tYWludF9mbGcgPSAwOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwaGJhLT53YWl0XzRfbWxvX21fcSk7CiAJCX0KLQkJbHBmY19tYnhfaXNzdWVfbGlua19kb3duKHBoYmEpOworCX0KKworCWlmIChsYS0+ZmEpIHsKKwkJaWYgKGxhLT5tbSkKKwkJCWxwZmNfaXNzdWVfY2xlYXJfbGEocGhiYSwgdnBvcnQpOworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTElOS19FVkVOVCwKKwkJCQkiMTMxMSBmYSAlZFxuIiwgbGEtPmZhKTsKIAl9CiAKIGxwZmNfbWJ4X2NtcGxfcmVhZF9sYV9mcmVlX21idWY6CkBAIC0xMTc3LDcgKzEzNDYsNyBAQAogCQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKIH0KIAotdm9pZAoraW50CiBscGZjX21ieF91bnJlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewogCXN0cnVjdCBscGZjX2hiYSAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKQEAgLTExODYsNyArMTM1NSw3IEBACiAKIAltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1ib3gpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAlscGZjX3VucmVnX3ZwaShwaGJhLCB2cG9ydC0+dnBpLCBtYm94KTsKIAltYm94LT52cG9ydCA9IHZwb3J0OwpAQCAtMTE5Nyw3ICsxMzY2LDkgQEAKIAkJCQkgIjE4MDAgQ291bGQgbm90IGlzc3VlIHVucmVnX3ZwaVxuIik7CiAJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfRVJST1I7CisJCXJldHVybiByYzsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNTUzLDYgKzE3MjQsMjIgQEAKIAkJICovCiAJCWxwZmNfcmVnaXN0ZXJfcmVtb3RlX3BvcnQodnBvcnQsIG5kbHApOwogCX0KKwlpZiAoKG5ld19zdGF0ZSA9PSAgTkxQX1NURV9NQVBQRURfTk9ERSkgJiYKKwkJKHZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCkpIHsKKwkJLyoKKwkJICogQSBuZXcgdGFyZ2V0IGlzIGRpc2NvdmVyZWQsIGlmIHRoZXJlIGlzIG5vIGJ1ZmZlciBmb3IKKwkJICogc3RhdGlzdGljYWwgZGF0YSBjb2xsZWN0aW9uIGFsbG9jYXRlIGJ1ZmZlci4KKwkJICovCisJCW5kbHAtPmxhdF9kYXRhID0ga2NhbGxvYyhMUEZDX01BWF9CVUNLRVRfQ09VTlQsCisJCQkJCSBzaXplb2Yoc3RydWN0IGxwZmNfc2NzaWNtZF9ia3QpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFuZGxwLT5sYXRfZGF0YSkKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfTk9ERSwKKwkJCQkiMDI4NiBscGZjX25scF9zdGF0ZV9jbGVhbnVwIGZhaWxlZCB0byAiCisJCQkJImFsbG9jYXRlIHN0YXRpc3RpY2FsIGRhdGEgYnVmZmVyIERJRCAiCisJCQkJIjB4JXhcbiIsIG5kbHAtPm5scF9ESUQpOworCX0KIAkvKgogCSAqIGlmIHdlIGFkZGVkIHRvIE1hcHBlZCBsaXN0LCBidXQgdGhlIHJlbW90ZSBwb3J0CiAJICogcmVnaXN0cmF0aW9uIGZhaWxlZCBvciBhc3NpZ25lZCBhIHRhcmdldCBpZCBvdXRzaWRlCkBAIC0yNzg2LDcgKzI5NzMsNyBAQAogCiAJZGVmYXVsdDoKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCi0JCQkJICIwMjI5IFVuZXhwZWN0ZWQgZGlzY292ZXJ5IHRpbWVvdXQsICIKKwkJCQkgIjAyNzMgVW5leHBlY3RlZCBkaXNjb3ZlcnkgdGltZW91dCwgIgogCQkJCSAidnBvcnQgU3RhdGUgeCV4XG4iLCB2cG9ydC0+cG9ydF9zdGF0ZSk7CiAJCWJyZWFrOwogCX0KQEAgLTI5NDAsNiArMzEyNyw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJm5kbHAtPm5scF9saXN0cCk7CiAJa3JlZl9pbml0KCZuZGxwLT5rcmVmKTsKIAlOTFBfSU5UX05PREVfQUNUKG5kbHApOworCWF0b21pY19zZXQoJm5kbHAtPmNtZF9wZW5kaW5nLCAwKTsKKwluZGxwLT5jbWRfcWRlcHRoID0gTFBGQ19NQVhfVEdUX1FERVBUSDsKIAogCWxwZmNfZGVidWdmc19kaXNjX3RyYyh2cG9ydCwgTFBGQ19ESVNDX1RSQ19OT0RFLAogCQkibm9kZSBpbml0OiAgICAgICBkaWQ6eCV4IiwKQEAgLTI5NzksOCArMzE2OCwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPm5kbHBfbG9jaywgZmxhZ3MpOwogCiAJLyogZnJlZSBuZGxwIG1lbW9yeSBmb3IgZmluYWwgbmRscCByZWxlYXNlICovCi0JaWYgKE5MUF9DSEtfRlJFRV9SRVEobmRscCkpCisJaWYgKE5MUF9DSEtfRlJFRV9SRVEobmRscCkpIHsKKwkJa2ZyZWUobmRscC0+bGF0X2RhdGEpOwogCQltZW1wb29sX2ZyZWUobmRscCwgbmRscC0+dnBvcnQtPnBoYmEtPm5scF9tZW1fcG9vbCk7CisJfQogfQogCiAvKiBUaGlzIHJvdXRpbmUgYnVtcHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYSBuZGxwIHN0cnVjdHVyZSB0byBlbnN1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCA3NzczYjk0Li41ZGU1ZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0xMTA3LDYgKzExMDcsOCBAQAogLyogU3RhcnQgRmlyZUZseSBSZWdpc3RlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VNVUxFWCAgICAgICAgMHgxMGRmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRklSRUZMWSAgICAgICAweDFhZTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9URVVTX1ZGICAgIDB4ZTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUEYgICAgMHhlMTgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX1NNQiAgICAgICAweGYwMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfTUlEICAgICAgIDB4ZjAxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JGTFkgICAgICAgICAgMHhmMDk1CkBAIC0xMTMzLDEwICsxMTM1LDEyIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFAxMTAwMFMgICAgICAweGZjMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MUEUxMTAwMFMgICAgIDB4ZmMyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVF9TICAgICAgICAgMHhmYzQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19TICAgICAweGZjNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1MgICAgICAgIDB4ZmQwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFTElPU19TQ1NQICAgMHhmZDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVMSU9TX0RDU1AgICAweGZkMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9aRVBIWVIgICAgICAgIDB4ZmUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hPUk5FVCAgICAgICAgMHhmZTA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVQSFlSX1NDU1AgICAweGZlMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9aRVBIWVJfRENTUCAgIDB4ZmUxMgogCkBAIC0xMTU0LDYgKzExNTgsNyBAQAogI2RlZmluZSBaRVBIWVJfSkVERUNfSUQgICAgICAgICAgICAgMHgwNTc3CiAjZGVmaW5lIFZJUEVSX0pFREVDX0lEICAgICAgICAgICAgICAweDQ4MzgKICNkZWZpbmUgU0FUVVJOX0pFREVDX0lEICAgICAgICAgICAgIDB4MTAwNAorI2RlZmluZSBIT1JORVRfSkRFQ19JRCAgICAgICAgICAgICAgMHgyMDU3NzA2RAogCiAjZGVmaW5lIEpFREVDX0lEX01BU0sgICAgICAgICAgICAgICAweDBGRkZGMDAwCiAjZGVmaW5lIEpFREVDX0lEX1NISUZUICAgICAgICAgICAgICAxMgpAQCAtMTE5OCw2ICsxMjAzLDE4IEBACiAjZGVmaW5lIEhBX1JYQVRUICAgICAgIDB4MDAwMDAwMDgJLyogQml0ICAzICovCiAjZGVmaW5lIEhBX1JYTUFTSyAgICAgIDB4MDAwMDAwMGYKIAorI2RlZmluZSBIQV9SMF9DTFJfTVNLCShIQV9SMFJFX1JFUSB8IEhBX1IwQ0VfUlNQIHwgSEFfUjBBVFQpCisjZGVmaW5lIEhBX1IxX0NMUl9NU0sJKEhBX1IxUkVfUkVRIHwgSEFfUjFDRV9SU1AgfCBIQV9SMUFUVCkKKyNkZWZpbmUgSEFfUjJfQ0xSX01TSwkoSEFfUjJSRV9SRVEgfCBIQV9SMkNFX1JTUCB8IEhBX1IyQVRUKQorI2RlZmluZSBIQV9SM19DTFJfTVNLCShIQV9SM1JFX1JFUSB8IEhBX1IzQ0VfUlNQIHwgSEFfUjNBVFQpCisKKyNkZWZpbmUgSEFfUjBfUE9TCTMKKyNkZWZpbmUgSEFfUjFfUE9TCTcKKyNkZWZpbmUgSEFfUjJfUE9TCTExCisjZGVmaW5lIEhBX1IzX1BPUwkxNQorI2RlZmluZSBIQV9MRV9QT1MJMjkKKyNkZWZpbmUgSEFfTUJfUE9TCTMwCisjZGVmaW5lIEhBX0VSX1BPUwkzMQogLyogQ2hpcCBBdHRlbnRpb24gUmVnaXN0ZXIgKi8KIAogI2RlZmluZSBDQV9SRUdfT0ZGU0VUICA0CS8qIEJ5dGUgb2Zmc2V0IGZyb20gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCkBAIC0xMjM1LDcgKzEyNTIsNyBAQAogCiAvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBIQ19SRUdfT0ZGU0VUICAxMgkvKiBXb3JkIG9mZnNldCBmcm9tIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBIQ19SRUdfT0ZGU0VUICAxMgkvKiBCeXRlIG9mZnNldCBmcm9tIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLwogCiAjZGVmaW5lIEhDX01CSU5UX0VOQSAgIDB4MDAwMDAwMDEJLyogQml0ICAwICovCiAjZGVmaW5lIEhDX1IwSU5UX0VOQSAgIDB4MDAwMDAwMDIJLyogQml0ICAxICovCkBAIC0xMjQ4LDYgKzEyNjUsMTkgQEAKICNkZWZpbmUgSENfTEFJTlRfRU5BICAgMHgyMDAwMDAwMAkvKiBCaXQgMjkgKi8KICNkZWZpbmUgSENfRVJJTlRfRU5BICAgMHg4MDAwMDAwMAkvKiBCaXQgMzEgKi8KIAorLyogTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgZVh0ZW5zaW9uIChNU0ktWCkgbWVzc2FnZSBpZGVudGlmaWVycyAqLworI2RlZmluZSBNU0lYX0RGTFRfSUQJMAorI2RlZmluZSBNU0lYX1JORzBfSUQJMAorI2RlZmluZSBNU0lYX1JORzFfSUQJMQorI2RlZmluZSBNU0lYX1JORzJfSUQJMgorI2RlZmluZSBNU0lYX1JORzNfSUQJMworCisjZGVmaW5lIE1TSVhfTElOS19JRAk0CisjZGVmaW5lIE1TSVhfTUJPWF9JRAk1CisKKyNkZWZpbmUgTVNJWF9TUEFSRTBfSUQJNgorI2RlZmluZSBNU0lYX1NQQVJFMV9JRAk3CisKIC8qIE1haWxib3ggQ29tbWFuZHMgKi8KICNkZWZpbmUgTUJYX1NIVVRET1dOICAgICAgICAweDAwCS8qIHRlcm1pbmF0ZSB0ZXN0aW5nICovCiAjZGVmaW5lIE1CWF9MT0FEX1NNICAgICAgICAgMHgwMQpAQCAtMTI4NSwxMCArMTMxNSwxNCBAQAogI2RlZmluZSBNQlhfS0lMTF9CT0FSRCAgICAgIDB4MjQKICNkZWZpbmUgTUJYX0NPTkZJR19GQVJQICAgICAweDI1CiAjZGVmaW5lIE1CWF9CRUFDT04gICAgICAgICAgMHgyQQorI2RlZmluZSBNQlhfQ09ORklHX01TSSAgICAgIDB4MzAKICNkZWZpbmUgTUJYX0hFQVJUQkVBVCAgICAgICAweDMxCiAjZGVmaW5lIE1CWF9XUklURV9WUEFSTVMgICAgMHgzMgogI2RlZmluZSBNQlhfQVNZTkNFVlRfRU5BQkxFIDB4MzMKIAorI2RlZmluZSBNQlhfUE9SVF9DQVBBQklMSVRJRVMgMHgzQgorI2RlZmluZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTCAweDNDCisKICNkZWZpbmUgTUJYX0NPTkZJR19IQlEJICAgIDB4N0MKICNkZWZpbmUgTUJYX0xPQURfQVJFQSAgICAgICAweDgxCiAjZGVmaW5lIE1CWF9SVU5fQklVX0RJQUc2NCAgMHg4NApAQCAtMTQ3NCwyNCArMTUwOCwxOCBAQAogCQkJdWludDMyX3QgYmRlRmxhZ3M6ODsJLyogQkRFIEZsYWdzIDAgSVMgQSBTVVBQT1JURUQKIAkJCQkJCSAgIFZBTFVFICEhICovCiAjZW5kaWYKLQotI2RlZmluZSBCVUZGX1VTRV9SU1ZEICAgICAgIDB4MDEJLyogYmRlRmxhZ3MgKi8KLSNkZWZpbmUgQlVGRl9VU0VfSU5UUlBUICAgICAweDAyCS8qIE5vdCBJbXBsZW1lbnRlZCB3aXRoIExQNjAwMCAqLwotI2RlZmluZSBCVUZGX1VTRV9DTU5EICAgICAgIDB4MDQJLyogT3B0aW9uYWwsIDE9Y21kL3JzcCAwPWRhdGEgYnVmZmVyICovCi0jZGVmaW5lIEJVRkZfVVNFX1JDViAgICAgICAgMHgwOAkvKiAgIiIgIiIsIDE9cmN2IGJ1ZmZlciwgMD14bWl0Ci0JCQkJCSAgICBidWZmZXIgKi8KLSNkZWZpbmUgQlVGRl9UWVBFXzMyQklUICAgICAweDEwCS8qICAiIiAiIiwgMT0zMiBiaXQgYWRkciAwPTY0IGJpdAotCQkJCQkgICAgYWRkciAqLwotI2RlZmluZSBCVUZGX1RZUEVfU1BFQ0lBTCAgIDB4MjAJLyogTm90IEltcGxlbWVudGVkIHdpdGggTFA2MDAwICAqLwotI2RlZmluZSBCVUZGX1RZUEVfQkRMICAgICAgIDB4NDAJLyogT3B0aW9uYWwsICBtYXkgYmUgc2V0IGluIEJETCAqLwotI2RlZmluZSBCVUZGX1RZUEVfSU5WQUxJRCAgIDB4ODAJLyogICIiICAiIiAqLworI2RlZmluZSBCVUZGX1RZUEVfQkRFXzY0ICAgIDB4MDAJLyogQkRFIChIb3N0X3Jlc2lkZW50KSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkRFX0lNTUVEIDB4MDEJLyogSW1tZWRpYXRlIERhdGEgQkRFICovCisjZGVmaW5lIEJVRkZfVFlQRV9CREVfNjRQICAgMHgwMgkvKiBCREUgKFBvcnQtcmVzaWRlbnQpICovCisjZGVmaW5lIEJVRkZfVFlQRV9CREVfNjRJICAgMHgwOAkvKiBJbnB1dCBCREUgKEhvc3QtcmVzaWRlbnQpICovCisjZGVmaW5lIEJVRkZfVFlQRV9CREVfNjRJUCAgMHgwQQkvKiBJbnB1dCBCREUgKFBvcnQtcmVzaWRlbnQpICovCisjZGVmaW5lIEJVRkZfVFlQRV9CTFBfNjQgICAgMHg0MAkvKiBCTFAgKEhvc3QtcmVzaWRlbnQpICovCisjZGVmaW5lIEJVRkZfVFlQRV9CTFBfNjRQICAgMHg0MgkvKiBCTFAgKFBvcnQtcmVzaWRlbnQpICovCiAJCX0gZjsKIAl9IHR1czsKIAl1aW50MzJfdCBhZGRyTG93OwogCXVpbnQzMl90IGFkZHJIaWdoOwogfTsKLSNkZWZpbmUgQkRFNjRfU0laRV9XT1JEIDAKLSNkZWZpbmUgQlBMNjRfU0laRV9XT1JEIDB4NDAKIAogdHlwZWRlZiBzdHJ1Y3QgVUxQX0JETCB7CS8qIFNMSS0yICovCiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECkBAIC0yMjAxLDcgKzIyMjksMTAgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1aW50MzJfdCBldmVudFRhZzsJLyogRXZlbnQgdGFnICovCiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECi0JdWludDMyX3QgcnN2ZDE6MjI7CisJdWludDMyX3QgcnN2ZDE6MTk7CisJdWludDMyX3QgZmE6MTsKKwl1aW50MzJfdCBtbToxOwkJLyogTWVubG8gTWFpbnRlbmFuY2UgbW9kZSBlbmFibGVkICovCisJdWludDMyX3Qgcng6MTsKIAl1aW50MzJfdCBwYjoxOwogCXVpbnQzMl90IGlsOjE7CiAJdWludDMyX3QgYXR0VHlwZTo4OwpAQCAtMjIwOSw3ICsyMjQwLDEwIEBACiAJdWludDMyX3QgYXR0VHlwZTo4OwogCXVpbnQzMl90IGlsOjE7CiAJdWludDMyX3QgcGI6MTsKLQl1aW50MzJfdCByc3ZkMToyMjsKKwl1aW50MzJfdCByeDoxOworCXVpbnQzMl90IG1tOjE7CisJdWludDMyX3QgZmE6MTsKKwl1aW50MzJfdCByc3ZkMToxOTsKICNlbmRpZgogCiAjZGVmaW5lIEFUX1JFU0VSVkVEICAgIDB4MDAJLyogUmVzZXJ2ZWQgLSBhdHRUeXBlICovCkBAIC0yMjMwLDYgKzIyNjQsNyBAQAogCiAjZGVmaW5lIFRPUE9MT0dZX1BUX1BUIDB4MDEJLyogVG9wb2xvZ3kgaXMgcHQtcHQgLyBwdC1mYWJyaWMgKi8KICNkZWZpbmUgVE9QT0xPR1lfTE9PUCAgMHgwMgkvKiBUb3BvbG9neSBpcyBGQy1BTCAqLworI2RlZmluZSBUT1BPTE9HWV9MTktfTUVOTE9fTUFJTlRFTkFOQ0UgMHgwNSAvKiBtYWludCBtb2RlIHplcGh0ciB0byBtZW5sbyAqLwogCiAJdW5pb24gewogCQlzdHJ1Y3QgdWxwX2JkZSBsaWxwQmRlOyAvKiBUaGlzIEJERSBwb2ludHMgdG8gYSAxMjggYnl0ZSBidWZmZXIKQEAgLTIzMjQsNiArMjM1OSwzNiBAQAogI2RlZmluZSAgRE1QX1JTUF9PRkZTRVQgICAgICAgICAgMHgxNCAgIC8qIHdvcmQgNSBjb250YWlucyBmaXJzdCB3b3JkIG9mIHJzcCAqLwogI2RlZmluZSAgRE1QX1JTUF9TSVpFICAgICAgICAgICAgMHg2QyAgIC8qIG1heGltdW0gb2YgMjcgd29yZHMgb2YgcnNwIGRhdGEgKi8KIAorLyogU3RydWN0dXJlIGZvciBNQiBDb21tYW5kIFVQREFURV9DRkcgKDB4MUIpICovCisKK3N0cnVjdCB1cGRhdGVfY2ZnX3ZhciB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdWludDMyX3QgcnN2ZDI6MTY7CisJdWludDMyX3QgdHlwZTo4OworCXVpbnQzMl90IHJzdmQ6MTsKKwl1aW50MzJfdCByYToxOworCXVpbnQzMl90IGNvOjE7CisJdWludDMyX3QgY3Y6MTsKKwl1aW50MzJfdCByZXE6NDsKKwl1aW50MzJfdCBlbnRyeV9sZW5ndGg6MTY7CisJdWludDMyX3QgcmVnaW9uX2lkOjE2OworI2Vsc2UgIC8qICBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQgKi8KKwl1aW50MzJfdCByZXE6NDsKKwl1aW50MzJfdCBjdjoxOworCXVpbnQzMl90IGNvOjE7CisJdWludDMyX3QgcmE6MTsKKwl1aW50MzJfdCByc3ZkOjE7CisJdWludDMyX3QgdHlwZTo4OworCXVpbnQzMl90IHJzdmQyOjE2OworCXVpbnQzMl90IHJlZ2lvbl9pZDoxNjsKKwl1aW50MzJfdCBlbnRyeV9sZW5ndGg6MTY7CisjZW5kaWYKKworCXVpbnQzMl90IHJlc3BfaW5mbzsKKwl1aW50MzJfdCBieXRlX2NudDsKKwl1aW50MzJfdCBkYXRhX29mZnNldDsKK307CisKIHN0cnVjdCBoYnFfbWFzayB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAJdWludDhfdCB0bWF0Y2g7CkBAIC0yNTYwLDYgKzI2MjUsNDAgQEAKIAogfSBDT05GSUdfUE9SVF9WQVI7CiAKKy8qIFN0cnVjdHVyZSBmb3IgTUIgQ29tbWFuZCBDT05GSUdfTVNJICgweDMwKSAqLworc3RydWN0IGNvbmZpZ19tc2lfdmFyIHsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1aW50MzJfdCBkZmx0TXNnTnVtOjg7CS8qIERlZmF1bHQgbWVzc2FnZSBudW1iZXIgICAgICAgICAgICAqLworCXVpbnQzMl90IHJzdmQxOjExOwkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBOSUQ6NTsJCS8qIE51bWJlciBvZiBzZWNvbmRhcnkgYXR0ZW50aW9uIElEcyAqLworCXVpbnQzMl90IHJzdmQyOjU7CS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90IGRmbHRQcmVzZW50OjE7CS8qIERlZmF1bHQgbWVzc2FnZSBudW1iZXIgcHJlc2VudCAgICAqLworCXVpbnQzMl90IGFkZEZsYWc6MTsJLyogQWRkIGFzc29jaWF0aW9uIGZsYWcgICAgICAgICAgICAgICovCisJdWludDMyX3QgcmVwb3J0RmxhZzoxOwkvKiBSZXBvcnQgYXNzb2NpYXRpb24gZmxhZyAgICAgICAgICAgKi8KKyNlbHNlCS8qICBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQgKi8KKwl1aW50MzJfdCByZXBvcnRGbGFnOjE7CS8qIFJlcG9ydCBhc3NvY2lhdGlvbiBmbGFnICAgICAgICAgICAqLworCXVpbnQzMl90IGFkZEZsYWc6MTsJLyogQWRkIGFzc29jaWF0aW9uIGZsYWcgICAgICAgICAgICAgICovCisJdWludDMyX3QgZGZsdFByZXNlbnQ6MTsJLyogRGVmYXVsdCBtZXNzYWdlIG51bWJlciBwcmVzZW50ICAgICovCisJdWludDMyX3QgcnN2ZDI6NTsJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgTklEOjU7CQkvKiBOdW1iZXIgb2Ygc2Vjb25kYXJ5IGF0dGVudGlvbiBJRHMgKi8KKwl1aW50MzJfdCByc3ZkMToxMTsJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgZGZsdE1zZ051bTo4OwkvKiBEZWZhdWx0IG1lc3NhZ2UgbnVtYmVyICAgICAgICAgICAgKi8KKyNlbmRpZgorCXVpbnQzMl90IGF0dGVudGlvbkNvbmRpdGlvbnNbMl07CisJdWludDhfdCAgYXR0ZW50aW9uSWRbMTZdOworCXVpbnQ4X3QgIG1lc3NhZ2VOdW1iZXJCeUhBWzY0XTsKKwl1aW50OF90ICBtZXNzYWdlTnVtYmVyQnlJRFsxNl07CisJdWludDMyX3QgYXV0b0NsZWFySEFbMl07CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdWludDMyX3QgcnN2ZDM6MTY7CisJdWludDMyX3QgYXV0b0NsZWFySUQ6MTY7CisjZWxzZQkvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCisJdWludDMyX3QgYXV0b0NsZWFySUQ6MTY7CisJdWludDMyX3QgcnN2ZDM6MTY7CisjZW5kaWYKKwl1aW50MzJfdCByc3ZkNDsKK307CisKIC8qIFNMSS0yIFBvcnQgQ29udHJvbCBCbG9jayAqLwogCiAvKiBTTElNIFBPSU5URVIgKi8KQEAgLTI2NzgsMTAgKzI3NzcsMTIgQEAKIAkJCQkJICogTkVXX0ZFQVRVUkUKIAkJCQkJICovCiAJc3RydWN0IGNvbmZpZ19oYnFfdmFyIHZhckNmZ0hicTsvKiBjbWQgPSAweDdjIChDT05GSUdfSEJRKSAgKi8KKwlzdHJ1Y3QgdXBkYXRlX2NmZ192YXIgdmFyVXBkYXRlQ2ZnOyAvKiBjbWQgPSAweDFCIChVUERBVEVfQ0ZHKSovCiAJQ09ORklHX1BPUlRfVkFSIHZhckNmZ1BvcnQ7CS8qIGNtZCA9IDB4ODggKENPTkZJR19QT1JUKSAgKi8KIAlSRUdfVlBJX1ZBUiB2YXJSZWdWcGk7CQkvKiBjbWQgPSAweDk2IChSRUdfVlBJKSAqLwogCVVOUkVHX1ZQSV9WQVIgdmFyVW5yZWdWcGk7CS8qIGNtZCA9IDB4OTcgKFVOUkVHX1ZQSSkgKi8KIAlBU1lOQ0VWVF9FTkFCTEVfVkFSIHZhckNmZ0FzeW5jRXZlbnQ7IC8qY21kID0geDMzIChDT05GSUdfQVNZTkMpICovCisJc3RydWN0IGNvbmZpZ19tc2lfdmFyIHZhckNmZ01TSTsvKiBjbWQgPSB4MzAgKENPTkZJR19NU0kpICAgICAqLwogfSBNQUlMVkFSSUFOVFM7CiAKIC8qCkBAIC0yNzE1LDExICsyODE2LDE5IEBACiAJdWludDMyX3QgaGJxX2dldFsxNl07CiB9OwogCi10eXBlZGVmIHVuaW9uIHsKLQlzdHJ1Y3Qgc2xpMl9kZXNjIHMyOwotCXN0cnVjdCBzbGkzX2Rlc2MgczM7Ci0Jc3RydWN0IHNsaTNfcGdwICBzM19wZ3A7Ci19IFNMSV9WQVI7CitzdHJ1Y3Qgc2xpM19pbmJfcGdwIHsKKwl1aW50MzJfdCBoYV9jb3B5OworCXVpbnQzMl90IGNvdW50ZXI7CisJc3RydWN0IGxwZmNfcGdwIHBvcnRbTUFYX1JJTkdTXTsKKwl1aW50MzJfdCBoYnFfZ2V0WzE2XTsKK307CisKK3VuaW9uIHNsaV92YXIgeworCXN0cnVjdCBzbGkyX2Rlc2MJczI7CisJc3RydWN0IHNsaTNfZGVzYwlzMzsKKwlzdHJ1Y3Qgc2xpM19wZ3AJCXMzX3BncDsKKwlzdHJ1Y3Qgc2xpM19pbmJfcGdwCXMzX2luYl9wZ3A7Cit9OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECkBAIC0yNzM3LDcgKzI4NDYsNyBAQAogI2VuZGlmCiAKIAlNQUlMVkFSSUFOVFMgdW47Ci0JU0xJX1ZBUiB1czsKKwl1bmlvbiBzbGlfdmFyIHVzOwogfSBNQUlMQk9YX3Q7CiAKIC8qCkBAIC0zMTA1LDYgKzMyMTQsMjcgQEAKIAlzdHJ1Y3QgbHBmY19oYnFfZW50cnkJYnVmZls1XTsKIH07CiAKKyNkZWZpbmUgTFBGQ19FWFRfREFUQV9CREVfQ09VTlQgMworc3RydWN0IGZjcF9pcndfZXh0IHsKKwl1aW50MzJfdAlpb190YWc2NF9sb3c7CisJdWludDMyX3QJaW9fdGFnNjRfaGlnaDsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1aW50OF90CQlyZXNlcnZlZDE7CisJdWludDhfdAkJcmVzZXJ2ZWQyOworCXVpbnQ4X3QJCXJlc2VydmVkMzsKKwl1aW50OF90CQllYmRlX2NvdW50OworI2Vsc2UgIC8qIF9fTElUVExFX0VORElBTiAqLworCXVpbnQ4X3QJCWViZGVfY291bnQ7CisJdWludDhfdAkJcmVzZXJ2ZWQzOworCXVpbnQ4X3QJCXJlc2VydmVkMjsKKwl1aW50OF90CQlyZXNlcnZlZDE7CisjZW5kaWYKKwl1aW50MzJfdAlyZXNlcnZlZDQ7CisJc3RydWN0IHVscF9iZGU2NCByYmRlOwkJLyogcmVzcG9uc2UgYmRlICovCisJc3RydWN0IHVscF9iZGU2NCBkYmRlW0xQRkNfRVhUX0RBVEFfQkRFX0NPVU5UXTsJLyogZGF0YSBCREUgb3IgQlBMICovCisJdWludDhfdCBpY2RbMzJdOwkJLyogaW1tZWRpYXRlIGNvbW1hbmQgZGF0YSAoMzIgYnl0ZXMpICovCit9OworCiB0eXBlZGVmIHN0cnVjdCBfSU9DQiB7CS8qIElPQ0Igc3RydWN0dXJlICovCiAJdW5pb24gewogCQlHRU5FUklDX1JTUCBncnNwOwkvKiBHZW5lcmljIHJlc3BvbnNlICovCkBAIC0zMTkwLDcgKzMzMjAsNyBAQAogCiAJCS8qIHdvcmRzIDgtMzEgdXNlZCBmb3IgcXVlX3hyaV9jeCBpb2NiICovCiAJCXN0cnVjdCBxdWVfeHJpNjRjeF9leHRfZmllbGRzIHF1ZV94cmk2NGN4X2V4dF93b3JkczsKLQorCQlzdHJ1Y3QgZmNwX2lyd19leHQgZmNwX2V4dDsKIAkJdWludDMyX3Qgc2xpM1dvcmRzWzI0XTsgLyogOTYgZXh0cmEgYnl0ZXMgZm9yIFNMSS0zICovCiAJfSB1bnNsaTM7CiAKQEAgLTMyOTIsMyArMzQyMiwxMCBAQAogCQkgaW9jYnAtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfTElOS19ET1dOIHx8CiAJCSBpb2NicC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9TTElfRE9XTikpOwogfQorCisjZGVmaW5lIE1FTkxPX1RSQU5TUE9SVF9UWVBFIDB4ZmUKKyNkZWZpbmUgTUVOTE9fQ09OVEVYVCAwCisjZGVmaW5lIE1FTkxPX1BVIDMKKyNkZWZpbmUgTUVOTE9fVElNRU9VVCAzMAorI2RlZmluZSBTRVRWQVJfTUxPTU5UIDB4MTAzMTA3CisjZGVmaW5lIFNFVFZBUl9NTE9SU1QgMHgxMDMwMDcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggZDUxYTJhNC4uOTA5YmUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC01MiwxNyArNTMsMjAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmxwZmNfdnBvcnRfdHJhbnNwb3J0X3RlbXBsYXRlID0gTlVMTDsKIHN0YXRpYyBERUZJTkVfSURSKGxwZmNfaGJhX2luZGV4KTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2NvbmZpZ19wb3J0X3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyBpbml0aWFsaXphdGlvbiBwcmlvciB0byB0aGUgICAgICAgICAgICAgKi8KLS8qICAgIENPTkZJR19QT1JUIG1haWxib3ggY29tbWFuZC4gVGhpcyB3aWxsIGJlIGluaXRpYWxpemVkICAgICAgICAgICAgICovCi0vKiAgICBhcyBhIFNMSSBsYXllciBjYWxsYmFjayByb3V0aW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FUkVTVEFSVCBpZiBpdCB3YW50cyAgICAgICAgKi8KLS8qICAgIHRoZSBTTEkgbGF5ZXIgdG8gcmVzZXQgdGhlIEhCQSBhbmQgdHJ5IGFnYWluLiBBbnkgICAgICAgICAgICAgICAgICovCi0vKiAgICBvdGhlciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY29uZmlnX3BvcnRfcHJlcDogUGVyZm9ybSBscGZjIGluaXRpYWxpemF0aW9uIHByaW9yIHRvIGNvbmZpZyBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyBpbml0aWFsaXphdGlvbiBwcmlvciB0byBpc3N1aW5nIHRoZSBDT05GSUdfUE9SVAorICogbWFpbGJveCBjb21tYW5kLiBJdCByZXRyaWV2ZXMgdGhlIHJldmlzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIEhCQSBhbmQKKyAqIGNvbGxlY3RzIHRoZSBWaXRhbCBQcm9kdWN0IERhdGEgKFZQRCkgYWJvdXQgdGhlIEhCQSBmb3IgcHJlcGFyaW5nIHRoZQorICogY29uZmlndXJhdGlvbiBvZiB0aGUgSEJBLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAgMCAtIHN1Y2Nlc3MuCisgKiAgIC1FUkVTVEFSVCAtIHJlcXVlc3RzIHRoZSBTTEkgbGF5ZXIgdG8gcmVzZXQgdGhlIEhCQSBhbmQgdHJ5IGFnYWluLgorICogICBBbnkgb3RoZXIgdmFsdWUgLSBpbmRpY2F0ZXMgYW4gZXJyb3IuCisgKiovCiBpbnQKIGxwZmNfY29uZmlnX3BvcnRfcHJlcChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xODAsMTIgKzE4NCw5IEBACiAJCQkJCQlzaXplb2YgKHBoYmEtPlJhbmRvbURhdGEpKTsKIAogCS8qIEdldCBhZGFwdGVyIFZQRCBpbmZvcm1hdGlvbiAqLwotCXBtYi0+Y29udGV4dDIgPSBrbWFsbG9jKERNUF9SU1BfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbWItPmNvbnRleHQyKQotCQlnb3RvIG91dF9mcmVlX21ib3g7CiAJbHBmY192cGRfZGF0YSA9IGttYWxsb2MoRE1QX1ZQRF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxwZmNfdnBkX2RhdGEpCi0JCWdvdG8gb3V0X2ZyZWVfY29udGV4dDI7CisJCWdvdG8gb3V0X2ZyZWVfbWJveDsKIAogCWRvIHsKIAkJbHBmY19kdW1wX21lbShwaGJhLCBwbWIsIG9mZnNldCk7CkBAIC0yMDAsMjEgKzIwMSwyOSBAQAogCQl9CiAJCWlmIChtYi0+dW4udmFyRG1wLndvcmRfY250ID4gRE1QX1ZQRF9TSVpFIC0gb2Zmc2V0KQogCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IERNUF9WUERfU0laRSAtIG9mZnNldDsKLQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHBtYi0+Y29udGV4dDIsIGxwZmNfdnBkX2RhdGEgKyBvZmZzZXQsCisJCWxwZmNfc2xpX3BjaW1lbV9iY29weSgoKHVpbnQ4X3QgKiltYikgKyBETVBfUlNQX09GRlNFVCwKKwkJCQkgICAgICBscGZjX3ZwZF9kYXRhICsgb2Zmc2V0LAogCQkJCSAgICAgIG1iLT51bi52YXJEbXAud29yZF9jbnQpOwogCQlvZmZzZXQgKz0gbWItPnVuLnZhckRtcC53b3JkX2NudDsKIAl9IHdoaWxlIChtYi0+dW4udmFyRG1wLndvcmRfY250ICYmIG9mZnNldCA8IERNUF9WUERfU0laRSk7CiAJbHBmY19wYXJzZV92cGQocGhiYSwgbHBmY192cGRfZGF0YSwgb2Zmc2V0KTsKIAogCWtmcmVlKGxwZmNfdnBkX2RhdGEpOwotb3V0X2ZyZWVfY29udGV4dDI6Ci0Ja2ZyZWUocG1iLT5jb250ZXh0Mik7CiBvdXRfZnJlZV9tYm94OgogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiAwOwogfQogCi0vKiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIGNvbmZpZyBhc3luYyBldmVudCBtYWlsYm94IGNvbW1hbmQuICovCisvKioKKyAqIGxwZmNfY29uZmlnX2FzeW5jX2NtcGw6IENvbXBsZXRpb24gaGFuZGxlciBmb3IgY29uZmlnIGFzeW5jIGV2ZW50IG1ib3ggY21kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1ib3hxOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgZHJpdmVyJ3MgY29uZmlndXJpbmcgYXN5bmNocm9ub3VzIGV2ZW50CisgKiBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIGRldmljZS4gSWYgdGhlIG1haWxib3ggY29tbWFuZCByZXR1cm5zIHN1Y2Nlc3NmdWxseSwKKyAqIGl0IHdpbGwgc2V0IGludGVybmFsIGFzeW5jIGV2ZW50IHN1cHBvcnQgZmxhZyB0byAxOyBvdGhlcndpc2UsIGl0IHdpbGwKKyAqIHNldCBpbnRlcm5hbCBhc3luYyBldmVudCBzdXBwb3J0IGZsYWcgdG8gMC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NvbmZpZ19hc3luY19jbXBsKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYm94cSkKIHsKQEAgLTIyNiwxNiArMjM1LDE5IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfY29uZmlnX3BvcnRfcG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIGluaXRpYWxpemF0aW9uIGFmdGVyIHRoZSAgICAgICAgICAgICAgICAqLwotLyogICAgQ09ORklHX1BPUlQgbWFpbGJveCBjb21tYW5kLiBUaGlzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgKi8KLS8qICAgIGFzIGEgU0xJIGxheWVyIGNhbGxiYWNrIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciByZXR1cm4gdmFsdWUgICAgICAgICAqLwotLyogICAgaW5kaWNhdGVzIGFuIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NvbmZpZ19wb3J0X3Bvc3Q6IFBlcmZvcm0gbHBmYyBpbml0aWFsaXphdGlvbiBhZnRlciBjb25maWcgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhlIENPTkZJR19QT1JUIG1haWxib3gKKyAqIGNvbW1hbmQgY2FsbC4gSXQgcGVyZm9ybXMgYWxsIGludGVybmFsIHJlc291cmNlIGFuZCBzdGF0ZSBzZXR1cHMgb24gdGhlCisgKiBwb3J0OiBwb3N0IElPQ0IgYnVmZmVycywgZW5hYmxlIGFwcHJvcHJpYXRlIGhvc3QgaW50ZXJydXB0IGF0dGVudGlvbnMsCisgKiBFTFMgcmluZyB0aW1lcnMsIGV0Yy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3MuCisgKiAgIEFueSBvdGhlciB2YWx1ZSAtIGVycm9yLgorICoqLwogaW50CiBscGZjX2NvbmZpZ19wb3J0X3Bvc3Qoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzc4LDYgKzM5MCwyOSBAQAogCWlmIChwaGJhLT5zbGlfcmV2ICE9IDMpCiAJCWxwZmNfcG9zdF9yY3ZfYnVmKHBoYmEpOwogCisJLyoKKwkgKiBDb25maWd1cmUgSEJBIE1TSS1YIGF0dGVudGlvbiBjb25kaXRpb25zIHRvIG1lc3NhZ2VzIGlmIE1TSS1YIG1vZGUKKwkgKi8KKwlpZiAocGhiYS0+aW50cl90eXBlID09IE1TSVgpIHsKKwkJcmMgPSBscGZjX2NvbmZpZ19tc2kocGhiYSwgcG1iKTsKKwkJaWYgKHJjKSB7CisJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKTsKKwkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJCQkiMDM1MiBDb25maWcgTVNJIG1haWxib3ggY29tbWFuZCAiCisJCQkJCSJmYWlsZWQsIG1ieENtZCB4JXgsIG1ieFN0YXR1cyB4JXhcbiIsCisJCQkJCXBtYi0+bWIubWJ4Q29tbWFuZCwgcG1iLT5tYi5tYnhTdGF0dXMpOworCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCS8qIEluaXRpYWxpemUgRVJBVFQgaGFuZGxpbmcgZmxhZyAqLworCXBoYmEtPmhiYV9mbGFnICY9IH5IQkFfRVJBVFRfSEFORExFRDsKKwogCS8qIEVuYWJsZSBhcHByb3ByaWF0ZSBob3N0IGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlzdGF0dXMgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOwpAQCAtMzkzLDI2ICs0MjgsMjYgQEAKIAogCWlmICgocGhiYS0+Y2ZnX3BvbGwgJiBFTkFCTEVfRkNQX1JJTkdfUE9MTElORykgJiYKIAkgICAgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpKQotCQlzdGF0dXMgJj0gfihIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXN0YXR1cyAmPSB+KEhDX1IwSU5UX0VOQSk7CiAKIAl3cml0ZWwoc3RhdHVzLCBwaGJhLT5IQ3JlZ2FkZHIpOwogCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAotCS8qCi0JICogU2V0dXAgdGhlIHJpbmcgMCAoZWxzKSAgdGltZW91dCBoYW5kbGVyCi0JICovCi0JdGltZW91dCA9IHBoYmEtPmZjX3JhdG92IDw8IDE7CisJLyogU2V0IHVwIHJpbmctMCAoRUxTKSB0aW1lciAqLworCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiAqIDI7CiAJbW9kX3RpbWVyKCZ2cG9ydC0+ZWxzX3Rtb2Z1bmMsIGppZmZpZXMgKyBIWiAqIHRpbWVvdXQpOworCS8qIFNldCB1cCBoZWFydCBiZWF0IChIQikgdGltZXIgKi8KIAltb2RfdGltZXIoJnBoYmEtPmhiX3Rtb2Z1bmMsIGppZmZpZXMgKyBIWiAqIExQRkNfSEJfTUJPWF9JTlRFUlZBTCk7CiAJcGhiYS0+aGJfb3V0c3RhbmRpbmcgPSAwOwogCXBoYmEtPmxhc3RfY29tcGxldGlvbl90aW1lID0gamlmZmllczsKKwkvKiBTZXQgdXAgZXJyb3IgYXR0ZW50aW9uIChFUkFUVCkgcG9sbGluZyB0aW1lciAqLworCW1vZF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCwgamlmZmllcyArIEhaICogTFBGQ19FUkFUVF9QT0xMX0lOVEVSVkFMKTsKIAogCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LCBwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwotCXBtYi0+dnBvcnQgPSB2cG9ydDsKLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKIAlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOwogCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIwNDU0IEFkYXB0ZXIgZmFpbGVkIHRvIGluaXQsIG1ieENtZCB4JXggIgpAQCAtNDQ3LDE5ICs0ODIsMjAgQEAKIAkJCQlyYyk7CiAJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfaGJhX2Rvd25fcHJlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIHVuaW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoZSAgICAgICAgICAgICAqLwotLyogICAgSEJBIGlzIHJlc2V0IHdoZW4gYnJpbmdpbmcgZG93biB0aGUgU0xJIExheWVyLiBUaGlzIHdpbGwgYmUgICAgICAgKi8KLS8qICAgIGluaXRpYWxpemVkIGFzIGEgU0xJIGxheWVyIGNhbGxiYWNrIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuIEFueSBvdGhlciByZXR1cm4gdmFsdWUgICAgICAgICAqLwotLyogICAgaW5kaWNhdGVzIGFuIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hiYV9kb3duX3ByZXA6IFBlcmZvcm0gbHBmYyB1bmluaXRpYWxpemF0aW9uIHByaW9yIHRvIEhCQSByZXNldC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgSEJBIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgdW5pbml0aWFsaXphdGlvbiBiZWZvcmUgdGhlIEhCQSBpcyByZXNldCB3aGVuCisgKiBicmluZ2luZyBkb3duIHRoZSBTTEkgTGF5ZXIuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzLgorICogICBBbnkgb3RoZXIgdmFsdWUgLSBlcnJvci4KKyAqKi8KIGludAogbHBmY19oYmFfZG93bl9wcmVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTQ4MSwxNSArNTE3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19oYmFfZG93bl9wb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGRvIHVuaW5pdGlhbGl6YXRpb24gYWZ0ZXIgdGhlIEhCQSBpcyByZXNldCAgICAgICovCi0vKiAgICB3aGVuIGJyaW5naW5nIGRvd24gdGhlIFNMSSBMYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHJldHVybnMgMCBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlICAgICAgICAgKi8KLS8qICAgIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oYmFfZG93bl9wb3N0OiBQZXJmb3JtIGxwZmMgdW5pbml0aWFsaXphdGlvbiBhZnRlciBIQkEgcmVzZXQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIEhCQSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBkbyB1bmluaXRpYWxpemF0aW9uIGFmdGVyIHRoZSBIQkEgaXMgcmVzZXQgd2hlbiBicmluZworICogZG93biB0aGUgU0xJIExheWVyLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjZXNzLgorICogICBBbnkgb3RoZXIgdmFsdWUgLSBlcnJvci4KKyAqKi8KIGludAogbHBmY19oYmFfZG93bl9wb3N0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTU0OCw3ICs1ODYsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogSEJBIGhlYXJ0IGJlYXQgdGltZW91dCBoYW5kbGVyICovCisvKioKKyAqIGxwZmNfaGJfdGltZW91dDogVGhlIEhCQS10aW1lciB0aW1lb3V0IGhhbmRsZXIuCisgKiBAcHRyOiB1bnNpZ25lZCBsb25nIGhvbGRzIHRoZSBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgaXMgdGhlIEhCQS10aW1lciB0aW1lb3V0IGhhbmRsZXIgcmVnaXN0ZXJlZCB0byB0aGUgbHBmYyBkcml2ZXIuIFdoZW4KKyAqIHRoaXMgdGltZXIgZmlyZXMsIGEgSEJBIHRpbWVvdXQgZXZlbnQgc2hhbGwgYmUgcG9zdGVkIHRvIHRoZSBscGZjIGRyaXZlcgorICogd29yay1wb3J0LWV2ZW50cyBiaXRtYXAgYW5kIHRoZSB3b3JrZXIgdGhyZWFkIGlzIG5vdGlmaWVkLiBUaGlzIHRpbWVvdXQKKyAqIGV2ZW50IHdpbGwgYmUgdXNlZCBieSB0aGUgd29ya2VyIHRocmVhZCB0byBpbnZva2UgdGhlIGFjdHVhbCB0aW1lb3V0CisgKiBoYW5kbGVyIHJvdXRpbmUsIGxwZmNfaGJfdGltZW91dF9oYW5kbGVyLiBBbnkgcGVyaW9kaWNhbCBvcGVyYXRpb25zIHdpbGwKKyAqIGJlIHBlcmZvcm1lZCBpbiB0aGUgdGltZW91dCBoYW5kbGVyIGFuZCB0aGUgSEJBIHRpbWVvdXQgZXZlbnQgYml0IHNoYWxsCisgKiBiZSBjbGVhcmVkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIGFmdGVyIGl0IGhhcyB0YWtlbiB0aGUgZXZlbnQgYml0bWFwIG91dC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2hiX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpCiB7CkBAIC01NTcsMTcgKzYwNiwzNiBAQAogCXVuc2lnbmVkIGxvbmcgaWZsYWc7CiAKIAlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXB0cjsKKworCS8qIENoZWNrIGZvciBoZWFydCBiZWF0IHRpbWVvdXQgY29uZGl0aW9ucyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5wcG9ydC0+d29ya19wb3J0X2xvY2ssIGlmbGFnKTsKIAl0bW9fcG9zdGVkID0gcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgJiBXT1JLRVJfSEJfVE1POwogCWlmICghdG1vX3Bvc3RlZCkKIAkJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgfD0gV09SS0VSX0hCX1RNTzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5wcG9ydC0+d29ya19wb3J0X2xvY2ssIGlmbGFnKTsKIAorCS8qIFRlbGwgdGhlIHdvcmtlciB0aHJlYWQgdGhlcmUgaXMgd29yayB0byBkbyAqLwogCWlmICghdG1vX3Bvc3RlZCkKIAkJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19oYl9tYm94X2NtcGw6IFRoZSBscGZjIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1ib3hxOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBscGZjIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kLgorICogSWYgY29uZmlndXJlZCwgdGhlIGxwZmMgZHJpdmVyIGlzc3VlcyB0aGUgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgdG8KKyAqIHRoZSBIQkEgZXZlcnkgTFBGQ19IQl9NQk9YX0lOVEVSVkFMIChjdXJyZW50IDUpIHNlY29uZHMuIEF0IHRoZSB0aW1lIHRoZQorICogaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkLCB0aGUgZHJpdmVyIHNoYWxsIHNldCB1cCBoZWFydC1iZWF0CisgKiB0aW1lb3V0IHRpbWVyIHRvIExQRkNfSEJfTUJPWF9USU1FT1VUIChjdXJyZW50IDMwKSBzZWNvbmRzIGFuZCBtYXJrcworICogaGVhcnQtYmVhdCBvdXRzdGFuZGluZyBzdGF0ZS4gT25jZSB0aGUgbWFpbGJveCBjb21tYW5kIGNvbWVzIGJhY2sgYW5kCisgKiBubyBlcnJvciBjb25kaXRpb25zIGRldGVjdGVkLCB0aGUgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgdGltZXIgaXMKKyAqIHJlc2V0IHRvIExQRkNfSEJfTUJPWF9JTlRFUlZBTCBzZWNvbmRzIGFuZCB0aGUgaGVhcnQtYmVhdCBvdXRzdGFuZGluZworICogc3RhdGUgaXMgY2xlYXJlZCBmb3IgdGhlIG5leHQgaGVhcnQtYmVhdC4gSWYgdGhlIHRpbWVyIGV4cGlyZWQgd2l0aCB0aGUKKyAqIGhlYXJ0LWJlYXQgb3V0c3RhbmRpbmcgc3RhdGUgc2V0LCB0aGUgZHJpdmVyIHdpbGwgcHV0IHRoZSBIQkEgb2ZmbGluZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2hiX21ib3hfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWJveHEpCiB7CkBAIC01NzcsNiArNjQ1LDcgQEAKIAlwaGJhLT5oYl9vdXRzdGFuZGluZyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAorCS8qIENoZWNrIGFuZCByZXNldCBoZWFydC1iZWF0IHRpbWVyIGlzIG5lY2Vzc2FyeSAqLwogCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCWlmICghKHBoYmEtPnBwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSAmJgogCQkhKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpICYmCkBAIC01ODYsNiArNjU1LDIyIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaGJfdGltZW91dF9oYW5kbGVyOiBUaGUgSEJBLXRpbWVyIHRpbWVvdXQgaGFuZGxlci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgaXMgdGhlIGFjdHVhbCBIQkEtdGltZXIgdGltZW91dCBoYW5kbGVyIHRvIGJlIGludm9rZWQgYnkgdGhlIHdvcmtlcgorICogdGhyZWFkIHdoZW5ldmVyIHRoZSBIQkEgdGltZXIgZmlyZWQgYW5kIEhCQS10aW1lb3V0IGV2ZW50IHBvc3RlZC4gVGhpcworICogaGFuZGxlciBwZXJmb3JtcyBhbnkgcGVyaW9kaWMgb3BlcmF0aW9ucyBuZWVkZWQgZm9yIHRoZSBkZXZpY2UuIElmIHN1Y2gKKyAqIHBlcmlvZGljIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gYXR0ZW5kZWQgdG8gZWl0aGVyIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICogb3IgYnkgcHJvY2Vzc2luZyBzbG93LXJpbmcgb3IgZmFzdC1yaW5nIGV2ZW50cyB3aXRoaW4gdGhlIEhCQS10aW1lcgorICogdGltZW91dCB3aW5kb3cgKExQRkNfSEJfTUJPWF9JTlRFUlZBTCksIHRoaXMgaGFuZGxlciBqdXN0IHNpbXBseSByZXNldHMKKyAqIHRoZSB0aW1lciBmb3IgdGhlIG5leHQgdGltZW91dCBwZXJpb2QuIElmIGxwZmMgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQKKyAqIGlzIGNvbmZpZ3VyZWQgYW5kIHRoZXJlIGlzIG5vIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIG91dHN0YW5kaW5nLCBhCisgKiBoZWFydC1iZWF0IG1haWxib3ggaXMgaXNzdWVkIGFuZCB0aW1lciBzZXQgcHJvcGVybHkuIE90aGVyd2lzZSwgaWYgdGhlcmUKKyAqIGhhcyBiZWVuIGEgaGVhcnQtYmVhdCBtYWlsYm94IGNvbW1hbmQgb3V0c3RhbmRpbmcsIHRoZSBIQkEgc2hhbGwgYmUgcHV0CisgKiB0byBvZmZsaW5lLgorICoqLwogdm9pZAogbHBmY19oYl90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNjg0LDYgKzc2OSwxMyBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX29mZmxpbmVfZXJhdHQ6IEJyaW5nIGxwZmMgb2ZmbGluZSBvbiBoYXJkd2FyZSBlcnJvciBhdHRlbnRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGJyaW5nIHRoZSBIQkEgb2ZmbGluZSB3aGVuIEhCQSBoYXJkd2FyZSBlcnJvcgorICogb3RoZXIgdGhhbiBQb3J0IEVycm9yIDYgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19vZmZsaW5lX2VyYXR0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTcwNCwxNCArNzk2LDE2IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfaGFuZGxlX2VyYXR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBoYW5kbGUgcHJvY2Vzc2luZyBhIEhvc3QgQXR0ZW50aW9uICAgICAgICAgICAgICAqLwotLyogICAgRXJyb3IgU3RhdHVzIGV2ZW50LiBUaGlzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGFzIGEgU0xJIGxheWVyIGNhbGxiYWNrIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oYW5kbGVfZXJhdHQ6IFRoZSBIQkEgaGFyZHdhcmUgZXJyb3IgaGFuZGxlci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIGhhbmRsZSB0aGUgZm9sbG93aW5nIEhCQSBoYXJkd2FyZSBlcnJvcgorICogY29uZGl0aW9uczoKKyAqIDEgLSBIQkEgZXJyb3IgYXR0ZW50aW9uIGludGVycnVwdAorICogMiAtIERNQSByaW5nIGluZGV4IG91dCBvZiByYW5nZQorICogMyAtIE1haWxib3ggY29tbWFuZCBjYW1lIGJhY2sgYXMgdW5rbm93bgorICoqLwogdm9pZAogbHBmY19oYW5kbGVfZXJhdHQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNzIyLDYgKzgxNiw3IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wZXJhdHVyZTsKIAlzdHJ1Y3QgdGVtcF9ldmVudCB0ZW1wX2V2ZW50X2RhdGE7CiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0OworCXN0cnVjdCBscGZjX2JvYXJkX2V2ZW50X2hlYWRlciBib2FyZF9ldmVudDsKIAogCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgcG9zc2libGUgZXJyb3JzLAogCSAqIHNpbmNlIHdlIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwY2kgY2FyZCBhbnl3YXkuICovCkBAIC03MzEsNiArODI2LDE2IEBACiAJaWYgKCFwaGJhLT5jZmdfZW5hYmxlX2hiYV9yZXNldCkKIAkJcmV0dXJuOwogCisJLyogU2VuZCBhbiBpbnRlcm5hbCBlcnJvciBldmVudCB0byBtZ210IGFwcGxpY2F0aW9uICovCisJYm9hcmRfZXZlbnQuZXZlbnRfdHlwZSA9IEZDX1JFR19CT0FSRF9FVkVOVDsKKwlib2FyZF9ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfUE9SVElOVEVSUjsKKwlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwgZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQkJCSAgc2l6ZW9mKGJvYXJkX2V2ZW50KSwKKwkJCQkgIChjaGFyICopICZib2FyZF9ldmVudCwKKwkJCQkgIFNDU0lfTkxfVklEX1RZUEVfUENJCisJCQkJICB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKwogCWlmIChwaGJhLT53b3JrX2hzICYgSFNfRkZFUjYpIHsKIAkJLyogUmUtZXN0YWJsaXNoaW5nIExpbmsgKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJTktfRVZFTlQsCkBAIC03NzEsNyArODc2LDcgQEAKIAkJdGVtcF9ldmVudF9kYXRhLmRhdGEgPSAodWludDMyX3QpdGVtcGVyYXR1cmU7CiAKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDQ1OSBBZGFwdGVyIG1heGltdW0gdGVtcGVyYXR1cmUgZXhjZWVkZWQgIgorCQkJCSIwNDA2IEFkYXB0ZXIgbWF4aW11bSB0ZW1wZXJhdHVyZSBleGNlZWRlZCAiCiAJCQkJIiglbGQpLCB0YWtpbmcgdGhpcyBwb3J0IG9mZmxpbmUgIgogCQkJCSJEYXRhOiB4JXggeCV4IHgleFxuIiwKIAkJCQl0ZW1wZXJhdHVyZSwgcGhiYS0+d29ya19ocywKQEAgLTc5MSw4ICs4OTYsOCBAQAogCiAJfSBlbHNlIHsKIAkJLyogVGhlIGlmIGNsYXVzZSBhYm92ZSBmb3JjZXMgdGhpcyBjb2RlIHBhdGggd2hlbiB0aGUgc3RhdHVzCi0JCSAqIGZhaWx1cmUgaXMgYSB2YWx1ZSBvdGhlciB0aGFuIEZGRVI2LiAgRG8gbm90IGNhbGwgdGhlIG9mZmxpbmUKLQkJICogIHR3aWNlLiBUaGlzIGlzIHRoZSBhZGFwdGVyIGhhcmR3YXJlIGVycm9yIHBhdGguCisJCSAqIGZhaWx1cmUgaXMgYSB2YWx1ZSBvdGhlciB0aGFuIEZGRVI2LiBEbyBub3QgY2FsbCB0aGUgb2ZmbGluZQorCQkgKiB0d2ljZS4gVGhpcyBpcyB0aGUgYWRhcHRlciBoYXJkd2FyZSBlcnJvciBwYXRoLgogCQkgKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCQkiMDQ1NyBBZGFwdGVyIEhhcmR3YXJlIEVycm9yICIKQEAgLTgwOCwxNiArOTEzLDE2IEBACiAKIAkJbHBmY19vZmZsaW5lX2VyYXR0KHBoYmEpOwogCX0KKwlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19oYW5kbGVfbGF0dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGhhbmRsZSBwcm9jZXNzaW5nIGEgSG9zdCBBdHRlbnRpb24gICAgICAgICAgICAgICovCi0vKiAgICBMaW5rIFN0YXR1cyBldmVudC4gVGhpcyB3aWxsIGJlIGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYXMgYSBTTEkgbGF5ZXIgY2FsbGJhY2sgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hhbmRsZV9sYXR0OiBUaGUgSEJBIGxpbmsgZXZlbnQgaGFuZGxlci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQgdG8gaGFuZGxlIGEgSEJBIGhvc3QKKyAqIGF0dGVudGlvbiBsaW5rIGV2ZW50LgorICoqLwogdm9pZAogbHBmY19oYW5kbGVfbGF0dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC04OTgsMTIgKzEwMDMsMjAgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX3BhcnNlX3ZwZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgVGhpcyByb3V0aW5lIHdpbGwgcGFyc2UgdGhlIFZQRCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19wYXJzZV92cGQ6IFBhcnNlIFZQRCAoVml0YWwgUHJvZHVjdCBEYXRhKS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwZDogcG9pbnRlciB0byB0aGUgdml0YWwgcHJvZHVjdCBkYXRhLgorICogQGxlbjogbGVuZ3RoIG9mIHRoZSB2aXRhbCBwcm9kdWN0IGRhdGEgaW4gYnl0ZXMuCisgKgorICogVGhpcyByb3V0aW5lIHBhcnNlcyB0aGUgVml0YWwgUHJvZHVjdCBEYXRhIChWUEQpLiBUaGUgVlBEIGlzIHRyZWF0ZWQgYXMKKyAqIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMuIEluIHRoaXMgcm91dGluZSwgdGhlIE1vZGVsTmFtZSwgUHJvZ3JhbVR5cGUsIGFuZAorICogTW9kZWxEZXNjLCBldGMuIGZpZWxkcyBvZiB0aGUgcGhiYSBkYXRhIHN0cnVjdHVyZSB3aWxsIGJlIHBvcHVsYXRlZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHBvaW50ZXIgdG8gdGhlIFZQRCBwYXNzZWQgaW4gaXMgTlVMTAorICogICAxIC0gc3VjY2VzcworICoqLwogc3RhdGljIGludAogbHBmY19wYXJzZV92cGQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50OF90ICp2cGQsIGludCBsZW4pCiB7CkBAIC0xMDQwLDEyICsxMTUzLDI1IEBACiAJcmV0dXJuKDEpOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hiYV9tb2RlbF9kZXNjOiBSZXRyaWV2ZSBIQkEgZGV2aWNlIG1vZGVsIG5hbWUgYW5kIGRlc2NyaXB0aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWRwOiBwb2ludGVyIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHRoZSBkZXJpdmVkIG1vZGVsIG5hbWUuCisgKiBAZGVzY3A6IHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGRlcml2ZWQgZGVzY3JpcHRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHJldHJpZXZlcyBIQkEncyBkZXNjcmlwdGlvbiBiYXNlZCBvbiBpdHMgcmVnaXN0ZXJlZCBQQ0kgZGV2aWNlCisgKiBJRC4gVGhlIEBkZXNjcCBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uIHBvaW50cyB0byBhbiBhcnJheSBvZiAyNTYgY2hhcnMuIEl0CisgKiBzaGFsbCBiZSByZXR1cm5lZCB3aXRoIHRoZSBtb2RlbCBuYW1lLCBtYXhpbXVtIHNwZWVkLCBhbmQgdGhlIGhvc3QgYnVzIHR5cGUuCisgKiBUaGUgQG1kcCBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uIHBvaW50cyB0byBhbiBhcnJheSBvZiA4MCBjaGFycy4gV2hlbiB0aGUKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBAbWRwIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIG1vZGVsIG5hbWUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaGJhX21vZGVsX2Rlc2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50OF90ICptZHAsIHVpbnQ4X3QgKmRlc2NwKQogewogCWxwZmNfdnBkX3QgKnZwOwogCXVpbnQxNl90IGRldl9pZCA9IHBoYmEtPnBjaWRldi0+ZGV2aWNlOwogCWludCBtYXhfc3BlZWQ7CisJaW50IEdFID0gMDsKIAlzdHJ1Y3QgewogCQljaGFyICogbmFtZTsKIAkJaW50ICAgIG1heF9zcGVlZDsKQEAgLTExNzcsNiArMTMwMywxOSBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9TQVRfUzoKIAkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMjAwMC1TIiwgbWF4X3NwZWVkLCAiUENJZSJ9OwogCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSE9STkVUOgorCQltID0gKHR5cGVvZihtKSl7IkxQMjEwMDAiLCBtYXhfc3BlZWQsICJQQ0llIn07CisJCUdFID0gMTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfVkY6CisJCW0gPSAodHlwZW9mKG0pKSB7IkxQZXYxMjAwMCIsIG1heF9zcGVlZCwgIlBDSWUgSU9WIn07CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9QUk9URVVTX1BGOgorCQltID0gKHR5cGVvZihtKSkgeyJMUGV2MTIwMDAiLCBtYXhfc3BlZWQsICJQQ0llIElPViJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19TOgorCQltID0gKHR5cGVvZihtKSkgeyJMUGVtdjEyMDAyLVMiLCBtYXhfc3BlZWQsICJQQ0llIElPViJ9OworCQlicmVhazsKIAlkZWZhdWx0OgogCQltID0gKHR5cGVvZihtKSl7IE5VTEwgfTsKIAkJYnJlYWs7CkBAIC0xMTg2LDE4ICsxMzI1LDI1IEBACiAJCXNucHJpbnRmKG1kcCwgNzksIiVzIiwgbS5uYW1lKTsKIAlpZiAoZGVzY3AgJiYgZGVzY3BbMF0gPT0gJ1wwJykKIAkJc25wcmludGYoZGVzY3AsIDI1NSwKLQkJCSAiRW11bGV4ICVzICVkR2IgJXMgRmlicmUgQ2hhbm5lbCBBZGFwdGVyIiwKLQkJCSBtLm5hbWUsIG0ubWF4X3NwZWVkLCBtLmJ1cyk7CisJCQkiRW11bGV4ICVzICVkJXMgJXMgJXMiLAorCQkJbS5uYW1lLCBtLm1heF9zcGVlZCwKKwkJCShHRSkgPyAiR0UiIDogIkdiIiwKKwkJCW0uYnVzLAorCQkJKEdFKSA/ICJGQ29FIEFkYXB0ZXIiIDogIkZpYnJlIENoYW5uZWwgQWRhcHRlciIpOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIGxwZmNfcG9zdF9idWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIFRoaXMgcm91dGluZSB3aWxsIHBvc3QgY291bnQgYnVmZmVycyB0byB0aGUgICovCi0vKiAgIHJpbmcgd2l0aCB0aGUgUVVFX1JJTkdfQlVGX0NOIGNvbW1hbmQuIFRoaXMgICovCi0vKiAgIGFsbG93cyAzIGJ1ZmZlcnMgLyBjb21tYW5kIHRvIGJlIHBvc3RlZC4gICAgICovCi0vKiAgIFJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzIE5PVCBwb3N0ZWQuICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcG9zdF9idWZmZXI6IFBvc3QgSU9DQihzKSB3aXRoIERNQSBidWZmZXIgZGVzY3JpcHRvcihzKSB0byBhIElPQ0IgcmluZy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHByaW5nOiBwb2ludGVyIHRvIGEgSU9DQiByaW5nLgorICogQGNudDogdGhlIG51bWJlciBvZiBJT0NCcyB0byBiZSBwb3N0ZWQgdG8gdGhlIElPQ0IgcmluZy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcG9zdHMgYSBnaXZlbiBudW1iZXIgb2YgSU9DQnMgd2l0aCB0aGUgYXNzb2NpYXRlZCBETUEgYnVmZmVyCisgKiBkZXNjcmlwdG9ycyBzcGVjaWZpZWQgYnkgdGhlIGNudCBhcmd1bWVudCB0byB0aGUgZ2l2ZW4gSU9DQiByaW5nLgorICoKKyAqIFJldHVybiBjb2RlcworICogICBUaGUgbnVtYmVyIG9mIElPQ0JzIE5PVCBhYmxlIHRvIGJlIHBvc3RlZCB0byB0aGUgSU9DQiByaW5nLgorICoqLwogaW50CiBscGZjX3Bvc3RfYnVmZmVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLCBpbnQgY250KQogewpAQCAtMTI4NywxMiArMTQzMywxNyBAQAogCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19wb3N0X3Jjdl9idWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIFRoaXMgcm91dGluZSBwb3N0IGluaXRpYWwgcmN2IGJ1ZmZlcnMgdG8gdGhlIGNvbmZpZ3VyZWQgcmluZ3MgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcG9zdF9yY3ZfYnVmOiBQb3N0IHRoZSBpbml0aWFsIHJlY2VpdmUgSU9DQiBidWZmZXJzIHRvIEVMUyByaW5nLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHBvc3RzIGluaXRpYWwgcmVjZWl2ZSBJT0NCIGJ1ZmZlcnMgdG8gdGhlIEVMUyByaW5nLiBUaGUKKyAqIGN1cnJlbnQgbnVtYmVyIG9mIGluaXRpYWwgSU9DQiBidWZmZXJzIHNwZWNpZmllZCBieSBMUEZDX0JVRl9SSU5HMCBpcworICogc2V0IHRvIDY0IElPQ0JzLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2VzcyAoY3VycmVudGx5IGFsd2F5cyBzdWNjZXNzKQorICoqLwogc3RhdGljIGludAogbHBmY19wb3N0X3Jjdl9idWYoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTMwNywxMSArMTQ1OCwxMyBAQAogCiAjZGVmaW5lIFMoTixWKSAoKChWKTw8KE4pKXwoKFYpPj4oMzItKE4pKSkpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX3NoYV9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3NoYV9pbml0OiBTZXQgdXAgaW5pdGlhbCBhcnJheSBvZiBoYXNoIHRhYmxlIGVudHJpZXMuCisgKiBASGFzaFJlc3VsdFBvaW50ZXI6IHBvaW50ZXIgdG8gYW4gYXJyYXkgYXMgaGFzaCB0YWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0cyB1cCB0aGUgaW5pdGlhbCB2YWx1ZXMgdG8gdGhlIGFycmF5IG9mIGhhc2ggdGFibGUgZW50cmllcworICogZm9yIHRoZSBMQyBIQkFzLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2hhX2luaXQodWludDMyX3QgKiBIYXNoUmVzdWx0UG9pbnRlcikKIHsKQEAgLTEzMjIsMTEgKzE0NzUsMTYgQEAKIAlIYXNoUmVzdWx0UG9pbnRlcls0XSA9IDB4QzNEMkUxRjA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBscGZjX3NoYV9pdGVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3NoYV9pdGVyYXRlOiBJdGVyYXRlIGluaXRpYWwgaGFzaCB0YWJsZSB3aXRoIHRoZSB3b3JraW5nIGhhc2ggdGFibGUuCisgKiBASGFzaFJlc3VsdFBvaW50ZXI6IHBvaW50ZXIgdG8gYW4gaW5pdGlhbC9yZXN1bHQgaGFzaCB0YWJsZS4KKyAqIEBIYXNoV29ya2luZ1BvaW50ZXI6IHBvaW50ZXIgdG8gYW4gd29ya2luZyBoYXNoIHRhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSBpdGVyYXRlcyBhbiBpbml0aWFsIGhhc2ggdGFibGUgcG9pbnRlZCBieSBASGFzaFJlc3VsdFBvaW50ZXIKKyAqIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSB3b3JraW5nIGhhc2ggdGFibGUgcG9pbnRlZWQgYnkgQEhhc2hXb3JraW5nUG9pbnRlci4KKyAqIFRoZSByZXN1bHRzIGFyZSBwdXR0aW5nIGJhY2sgdG8gdGhlIGluaXRpYWwgaGFzaCB0YWJsZSwgcmV0dXJuZWQgdGhyb3VnaAorICogdGhlIEBIYXNoUmVzdWx0UG9pbnRlciBhcyB0aGUgcmVzdWx0IGhhc2ggdGFibGUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zaGFfaXRlcmF0ZSh1aW50MzJfdCAqIEhhc2hSZXN1bHRQb2ludGVyLCB1aW50MzJfdCAqIEhhc2hXb3JraW5nUG9pbnRlcikKIHsKQEAgLTEzNzQsMjIgKzE1MzIsMjkgQEAKIAogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19jaGFsbGVuZ2Vfa2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jaGFsbGVuZ2Vfa2V5OiBDcmVhdGUgY2hhbGxlbmdlIGtleSBiYXNlZCBvbiBXV1BOIG9mIHRoZSBIQkEuCisgKiBAUmFuZG9tQ2hhbGxlbmdlOiBwb2ludGVyIHRvIHRoZSBlbnRyeSBvZiBob3N0IGNoYWxsZW5nZSByYW5kb20gbnVtYmVyIGFycmF5LgorICogQEhhc2hXb3JraW5nOiBwb2ludGVyIHRvIHRoZSBlbnRyeSBvZiB0aGUgd29ya2luZyBoYXNoIGFycmF5LgorICoKKyAqIFRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSB3b3JraW5nIGhhc2ggYXJyYXkgcmVmZXJyZWQgYnkgQEhhc2hXb3JraW5nCisgKiBmcm9tIHRoZSBjaGFsbGVuZ2UgcmFuZG9tIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBob3N0LCByZWZlcnJlZCBieQorICogQFJhbmRvbUNoYWxsZW5nZS4gVGhlIHJlc3VsdCBpcyBwdXQgaW50byB0aGUgZW50cnkgb2YgdGhlIHdvcmtpbmcgaGFzaAorICogYXJyYXkgYW5kIHJldHVybmVkIGJ5IHJlZmVyZW5jZSB0aHJvdWdoIEBIYXNoV29ya2luZy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NoYWxsZW5nZV9rZXkodWludDMyX3QgKiBSYW5kb21DaGFsbGVuZ2UsIHVpbnQzMl90ICogSGFzaFdvcmtpbmcpCiB7CiAJKkhhc2hXb3JraW5nID0gKCpSYW5kb21DaGFsbGVuZ2UgXiAqSGFzaFdvcmtpbmcpOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19oYmFfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oYmFfaW5pdDogUGVyZm9ybSBzcGVjaWFsIGhhbmRsaW5nIGZvciBMQyBIQkEgaW5pdGlhbGl6YXRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBoYmFpbml0OiBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2Vycy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIExDIEhCQSBpbml0aWFsaXphdGlvbi4KKyAqKi8KIHZvaWQKIGxwZmNfaGJhX2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCAqaGJhaW5pdCkKIHsKQEAgLTE0MTIsNiArMTU3NywxNSBAQAogCWtmcmVlKEhhc2hXb3JraW5nKTsKIH0KIAorLyoqCisgKiBscGZjX2NsZWFudXA6IFBlcmZvcm1zIHZwb3J0IGNsZWFudXBzIGJlZm9yZSBkZWxldGluZyBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIHRoZSBuZWNlc3NhcnkgY2xlYW51cHMgYmVmb3JlIGRlbGV0aW5nIHRoZSBAdnBvcnQuCisgKiBJdCBpbnZva2VzIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZSB0byBwZXJmb3JtIG5lY2Vzc2FyeSBzdGF0ZQorICogdHJhbnNpdGlvbnMgYW5kIHRvIHJlbGVhc2UgdGhlIG5kbHBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHZwb3J0LiBOb3RlLAorICogdGhlIHBoeXNpY2FsIHBvcnQgaXMgdHJlYXRlZCBhcyBAdnBvcnQgMC4KKyAqKi8KIHZvaWQKIGxwZmNfY2xlYW51cChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xNDU5LDE0ICsxNjMzLDYgQEAKIAkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUodnBvcnQsIG5kbHAsIE5VTEwsCiAJCQkJCSAgICAgTkxQX0VWVF9ERVZJQ0VfUk0pOwogCi0JCS8qIG5scF90eXBlIHplcm8gaXMgbm90IGRlZmluZWQsIG5scF9mbGFnIHplcm8gYWxzbyBub3QgZGVmaW5lZCwKLQkJICogbmxwX3N0YXRlIGlzIHVudXNlZCwgdGhpcyBoYXBwZW5zIHdoZW4KLQkJICogYW4gaW5pdGlhdG9yIGhhcyBsb2dnZWQKLQkJICogaW50byB1cyBzbyBjbGVhbnVwIHRoaXMgbmRscC4KLQkJICovCi0JCWlmICgobmRscC0+bmxwX3R5cGUgPT0gMCkgJiYgKG5kbHAtPm5scF9mbGFnID09IDApICYmCi0JCQkobmRscC0+bmxwX3N0YXRlID09IDApKQotCQkJbHBmY19ubHBfcHV0KG5kbHApOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIEFMTCBuZGxwJ3Mgc2hvdWxkIGJlIGdvbmUKQEAgLTE0ODIsNyArMTY0OCw3IEBACiAJCQkJCQkmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKIAkJCQlscGZjX3ByaW50Zl92bG9nKG5kbHAtPnZwb3J0LCBLRVJOX0VSUiwKIAkJCQkJCUxPR19OT0RFLAotCQkJCQkJIjAyODI6IGRpZDp4JXggbmRscDp4JXAgIgorCQkJCQkJIjAyODIgZGlkOngleCBuZGxwOnglcCAiCiAJCQkJCQkidXNnbWFwOngleCByZWZjbnQ6JWRcbiIsCiAJCQkJCQluZGxwLT5ubHBfRElELCAodm9pZCAqKW5kbHAsCiAJCQkJCQluZGxwLT5ubHBfdXNnX21hcCwKQEAgLTE0OTgsNiArMTY2NCwxNCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3N0b3BfdnBvcnRfdGltZXJzOiBTdG9wIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhIEB2cG9ydC4gVGhpcyBmdW5jdGlvbgorICogaXMgaW52b2tlZCBiZWZvcmUgZGlzYWJsaW5nIG9yIGRlbGV0aW5nIGEgQHZwb3J0LiBOb3RlIHRoYXQgdGhlIHBoeXNpY2FsCisgKiBwb3J0IGlzIHRyZWF0ZWQgYXMgQHZwb3J0IDAuCisgKiovCiB2b2lkCiBscGZjX3N0b3BfdnBvcnRfdGltZXJzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTE1MDcsNiArMTY4MSwxMyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3N0b3BfcGhiYV90aW1lcnM6IFN0b3AgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGFuIEhCQS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyBhbGwgdGhlIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggYSBIQkEuIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGludm9rZWQgYmVmb3JlIGVpdGhlciBwdXR0aW5nIGEgSEJBIG9mZmxpbmUgb3IgdW5sb2FkaW5nIHRoZSBkcml2ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zdG9wX3BoYmFfdGltZXJzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE1MTYsOSArMTY5NywyMCBAQAogCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5mYWJyaWNfYmxvY2tfdGltZXIpOwogCXBoYmEtPmhiX291dHN0YW5kaW5nID0gMDsKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+aGJfdG1vZnVuYyk7CisJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmVyYXR0X3BvbGwpOwogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Jsb2NrX21nbXRfaW86IE1hcmsgYSBIQkEncyBtYW5hZ2VtZW50IGludGVyZmFjZSBhcyBibG9ja2VkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIG1hcmtzIGEgSEJBJ3MgbWFuYWdlbWVudCBpbnRlcmZhY2UgYXMgYmxvY2tlZC4gT25jZSB0aGUgSEJBJ3MKKyAqIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGlzIG1hcmtlZCBhcyBibG9ja2VkLCBhbGwgdGhlIHVzZXIgc3BhY2UgYWNjZXNzIHRvCisgKiB0aGUgSEJBLCB3aGV0aGVyIHRoZXkgYXJlIGZyb20gc3lzZnMgaW50ZXJmYWNlIG9yIGxpYmRmYyBpbnRlcmZhY2Ugd2lsbAorICogYWxsIGJlIGJsb2NrZWQuIFRoZSBIQkEgaXMgc2V0IHRvIGJsb2NrIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSB3aGVuIHRoZQorICogZHJpdmVyIHByZXBhcmVzIHRoZSBIQkEgaW50ZXJmYWNlIGZvciBvbmxpbmUgb3Igb2ZmbGluZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2Jsb2NrX21nbXRfaW8oc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTE1MjksNiArMTcyMSwxOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKIH0KIAorLyoqCisgKiBscGZjX29ubGluZTogSW5pdGlhbGl6ZSBhbmQgYnJpbmcgYSBIQkEgb25saW5lLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBIQkEgYW5kIGJyaW5ncyBhIEhCQSBvbmxpbmUuIER1cmluZyB0aGlzCisgKiBwcm9jZXNzLCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgYmxvY2tlZCB0byBwcmV2ZW50IHVzZXIgc3BhY2UgYWNjZXNzCisgKiB0byB0aGUgSEJBIGludGVyZmVyaW5nIHdpdGggdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3NmdWwKKyAqICAgMSAtIGZhaWxlZAorICoqLwogaW50CiBscGZjX29ubGluZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xNTc0LDYgKzE3NzgsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3VuYmxvY2tfbWdtdF9pbzogTWFyayBhIEhCQSdzIG1hbmFnZW1lbnQgaW50ZXJmYWNlIHRvIGJlIG5vdCBibG9ja2VkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIG1hcmtzIGEgSEJBJ3MgbWFuYWdlbWVudCBpbnRlcmZhY2UgYXMgbm90IGJsb2NrZWQuIE9uY2UgdGhlCisgKiBIQkEncyBtYW5hZ2VtZW50IGludGVyZmFjZSBpcyBtYXJrZWQgYXMgbm90IGJsb2NrZWQsIGFsbCB0aGUgdXNlciBzcGFjZQorICogYWNjZXNzIHRvIHRoZSBIQkEsIHdoZXRoZXIgdGhleSBhcmUgZnJvbSBzeXNmcyBpbnRlcmZhY2Ugb3IgbGliZGZjCisgKiBpbnRlcmZhY2Ugd2lsbCBiZSBhbGxvd2VkLiBUaGUgSEJBIGlzIHNldCB0byBibG9jayB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UKKyAqIHdoZW4gdGhlIGRyaXZlciBwcmVwYXJlcyB0aGUgSEJBIGludGVyZmFjZSBmb3Igb25saW5lIG9yIG9mZmxpbmUgYW5kIHRoZW4KKyAqIHNldCB0byB1bmJsb2NrIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBhZnRlcndhcmRzLgorICoqLwogdm9pZAogbHBmY191bmJsb2NrX21nbXRfaW8oc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTE1ODQsNiArMTc5OSwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKIH0KIAorLyoqCisgKiBscGZjX29mZmxpbmVfcHJlcDogUHJlcGFyZSBhIEhCQSB0byBiZSBicm91Z2h0IG9mZmxpbmUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBwcmVwYXJlIGEgSEJBIHRvIGJlIGJyb3VnaHQgb2ZmbGluZS4gSXQgcGVyZm9ybXMKKyAqIHVucmVnaXN0cmF0aW9uIGxvZ2luIHRvIGFsbCB0aGUgbm9kZXMgb24gYWxsIHZwb3J0cyBhbmQgZmx1c2hlcyB0aGUgbWFpbGJveAorICogcXVldWUgdG8gbWFrZSBpdCByZWFkeSB0byBiZSBicm91Z2h0IG9mZmxpbmUuCisgKiovCiB2b2lkCiBscGZjX29mZmxpbmVfcHJlcChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtMTYzMyw2ICsxODU2LDE0IEBACiAJbHBmY19zbGlfZmx1c2hfbWJveF9xdWV1ZShwaGJhKTsKIH0KIAorLyoqCisgKiBscGZjX29mZmxpbmU6IEJyaW5nIGEgSEJBIG9mZmxpbmUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWN0dWFsbHkgYnJpbmdzIGEgSEJBIG9mZmxpbmUuIEl0IHN0b3BzIGFsbCB0aGUgdGltZXJzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEhCQSwgYnJpbmdzIGRvd24gdGhlIFNMSSBsYXllciwgYW5kIGV2ZW50dWFsbHkKKyAqIG1hcmtzIHRoZSBIQkEgYXMgaW4gb2ZmbGluZSBzdGF0ZSBmb3IgdGhlIHVwcGVyIGxheWVyIHByb3RvY29sLgorICoqLwogdm9pZAogbHBmY19vZmZsaW5lKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE2NzAsMTIgKzE5MDEsMTcgQEAKIAlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIEZ1bmN0aW9uIG5hbWU6IGxwZmNfc2NzaV9mcmVlCi0qCi0qIERlc2NyaXB0aW9uOiBDYWxsZWQgZnJvbSBscGZjX3BjaV9yZW1vdmVfb25lIGZyZWUgaW50ZXJuYWwgZHJpdmVyIHJlc291cmNlcwotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3Njc2lfZnJlZTogRnJlZSBhbGwgdGhlIFNDU0kgYnVmZmVycyBhbmQgSU9DQnMgZnJvbSBkcml2ZXIgbGlzdHMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gZnJlZSBhbGwgdGhlIFNDU0kgYnVmZmVycyBhbmQgSU9DQnMgZnJvbSB0aGUgZHJpdmVyCisgKiBsaXN0IGJhY2sgdG8ga2VybmVsLiBJdCBpcyBjYWxsZWQgZnJvbSBscGZjX3BjaV9yZW1vdmVfb25lIHRvIGZyZWUKKyAqIHRoZSBpbnRlcm5hbCByZXNvdXJjZXMgYmVmb3JlIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzZnVsIChmb3Igbm93LCBpdCBhbHdheXMgcmV0dXJucyAwKQorICoqLwogc3RhdGljIGludAogbHBmY19zY3NpX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTcwNCw2ICsxOTQwLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jcmVhdGVfcG9ydDogQ3JlYXRlIGFuIEZDIHBvcnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBpbnN0YW5jZTogYSB1bmlxdWUgaW50ZWdlciBJRCB0byB0aGlzIEZDIHBvcnQuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgYSBGQyBwb3J0IGZvciB0aGUgdXBwZXIgbGF5ZXIgcHJvdG9jb2wuIFRoZSBGQyBwb3J0CisgKiBjYW4gYmUgY3JlYXRlZCBvbiB0b3Agb2YgZWl0aGVyIGEgcGh5c2ljYWwgcG9ydCBvciBhIHZpcnR1YWwgcG9ydCBwcm92aWRlZAorICogYnkgdGhlIEhCQS4gVGhpcyByb3V0aW5lIGFsc28gYWxsb2NhdGVzIGEgU0NTSSBob3N0IGRhdGEgc3RydWN0dXJlIChzaG9zdCkKKyAqIGFuZCBhc3NvY2lhdGVzIHRoZSBGQyBwb3J0IGNyZWF0ZWQgYmVmb3JlIGFkZGluZyB0aGUgc2hvc3QgaW50byB0aGUgU0NTSQorICogbGF5ZXIuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIEB2cG9ydCAtIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogICBOVUxMIC0gcG9ydCBjcmVhdGUgZmFpbGVkLgorICoqLwogc3RydWN0IGxwZmNfdnBvcnQgKgogbHBmY19jcmVhdGVfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBpbnN0YW5jZSwgc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTc3Nyw2ICsyMDI5LDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogZGVzdHJveV9wb3J0OiBEZXN0cm95IGFuIEZDIHBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYW4gbHBmYyB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGVzdHJveXMgYSBGQyBwb3J0IGZyb20gdGhlIHVwcGVyIGxheWVyIHByb3RvY29sLiBBbGwgdGhlCisgKiByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IGFyZSByZWxlYXNlZC4KKyAqKi8KIHZvaWQKIGRlc3Ryb3lfcG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xNzk3LDYgKzIwNTYsMTYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19nZXRfaW5zdGFuY2U6IEdldCBhIHVuaXF1ZSBpbnRlZ2VyIElELgorICoKKyAqIFRoaXMgcm91dGluZSBhbGxvY2F0ZXMgYSB1bmlxdWUgaW50ZWdlciBJRCBmcm9tIGxwZmNfaGJhX2luZGV4IHBvb2wuIEl0CisgKiB1c2VzIHRoZSBrZXJuZWwgaWRyIGZhY2lsaXR5IHRvIHBlcmZvcm0gdGhlIHRhc2suCisgKgorICogUmV0dXJuIGNvZGVzOgorICogICBpbnN0YW5jZSAtIGEgdW5pcXVlIGludGVnZXIgSUQgYWxsb2NhdGVkIGFzIHRoZSBuZXcgaW5zdGFuY2UuCisgKiAgIC0xIC0gbHBmYyBnZXQgaW5zdGFuY2UgZmFpbGVkLgorICoqLwogaW50CiBscGZjX2dldF9pbnN0YW5jZSh2b2lkKQogewpAQCAtMTgxMCwxMSArMjA3OSwyMSBAQAogCXJldHVybiBpbnN0YW5jZTsKIH0KIAotLyoKLSAqIE5vdGU6IHRoZXJlIGlzIG5vIHNjYW5fc3RhcnQgZnVuY3Rpb24gYXMgYWRhcHRlciBpbml0aWFsaXphdGlvbgotICogd2lsbCBoYXZlIGFzeW5jaHJvbm91c2x5IGtpY2tlZCBvZmYgdGhlIGxpbmsgaW5pdGlhbGl6YXRpb24uCi0gKi8KLQorLyoqCisgKiBscGZjX3NjYW5fZmluaXNoZWQ6IG1ldGhvZCBmb3IgU0NTSSBsYXllciB0byBkZXRlY3Qgd2hldGhlciBzY2FuIGlzIGRvbmUuCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gU0NTSSBob3N0IGRhdGEgc3RydWN0dXJlLgorICogQHRpbWU6IGVsYXBzZWQgdGltZSBvZiB0aGUgc2NhbiBpbiBqaWZmaWVzLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFNDU0kgbGF5ZXIgd2l0aCBhIFNDU0kgaG9zdCB0byBkZXRlcm1pbmUKKyAqIHdoZXRoZXIgdGhlIHNjYW4gaG9zdCBpcyBmaW5pc2hlZC4KKyAqCisgKiBOb3RlOiB0aGVyZSBpcyBubyBzY2FuX3N0YXJ0IGZ1bmN0aW9uIGFzIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24gd2lsbCBoYXZlCisgKiBhc3luY2hyb25vdXNseSBraWNrZWQgb2ZmIHRoZSBsaW5rIGluaXRpYWxpemF0aW9uLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gU0NTSSBob3N0IHNjYW4gaXMgbm90IG92ZXIgeWV0LgorICogICAxIC0gU0NTSSBob3N0IHNjYW4gaXMgb3Zlci4KKyAqKi8KIGludCBscGZjX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSkKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwpAQCAtMTg1OCw2ICsyMTM3LDEzIEBACiAJcmV0dXJuIHN0YXQ7CiB9CiAKKy8qKgorICogbHBmY19ob3N0X2F0dHJpYl9pbml0OiBJbml0aWFsaXplIFNDU0kgaG9zdCBhdHRyaWJ1dGVzIG9uIGEgRkMgcG9ydC4KKyAqIEBzaG9zdDogcG9pbnRlciB0byBTQ1NJIGhvc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIGEgZ2l2ZW4gU0NTSSBob3N0IGF0dHJpYnV0ZXMgb24gYSBGQyBwb3J0LiBUaGUKKyAqIFNDU0kgaG9zdCBjYW4gYmUgZWl0aGVyIG9uIHRvcCBvZiBhIHBoeXNpY2FsIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQuCisgKiovCiB2b2lkIGxwZmNfaG9zdF9hdHRyaWJfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwpAQCAtMTkwNiw0MiArMjE5MiwxNTcgQEAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiB9CiAKKy8qKgorICogbHBmY19lbmFibGVfbXNpeDogRW5hYmxlIE1TSS1YIGludGVycnVwdCBtb2RlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gZW5hYmxlIHRoZSBNU0ktWCBpbnRlcnJ1cHQgdmVjdG9ycy4gVGhlIGtlcm5lbAorICogZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCkgaXMgY2FsbGVkIHRvIGVuYWJsZSB0aGUgTVNJLVggdmVjdG9ycy4gTm90ZSB0aGF0CisgKiBwY2lfZW5hYmxlX21zaXgoKSwgb25jZSBpbnZva2VkLCBlbmFibGVzIGVpdGhlciBhbGwgb3Igbm90aGluZywgZGVwZW5kaW5nCisgKiBvbiB0aGUgY3VycmVudCBhdmFpbGFiaWxpdHkgb2YgUENJIHZlY3RvciByZXNvdXJjZXMuIFRoZSBkZXZpY2UgZHJpdmVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgaW5kaXZpZHVhbCByZXF1ZXN0X2lycSgpIHRvIHJlZ2lzdGVyIGVhY2ggTVNJLVgKKyAqIHZlY3RvciB3aXRoIGEgaW50ZXJydXB0IGhhbmRsZXIsIHdoaWNoIGlzIGRvbmUgaW4gdGhpcyBmdW5jdGlvbi4gTm90ZSB0aGF0CisgKiBsYXRlciB3aGVuIGRldmljZSBpcyB1bmxvYWRpbmcsIHRoZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkKKyAqIG9uIGFsbCBNU0ktWCB2ZWN0b3JzIGl0IGhhcyBkb25lIHJlcXVlc3RfaXJxKCkgb24gYmVmb3JlIGNhbGxpbmcKKyAqIHBjaV9kaXNhYmxlX21zaXgoKS4gRmFpbHVyZSB0byBkbyBzbyByZXN1bHRzIGluIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlCisgKiB3aWxsIGJlIGxlZnQgd2l0aCBNU0ktWCBlbmFibGVkIGFuZCBsZWFrcyBpdHMgdmVjdG9ycy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Vzc2Z1bAorICogICBvdGhlciB2YWx1ZXMgLSBlcnJvcgorICoqLwogc3RhdGljIGludAogbHBmY19lbmFibGVfbXNpeChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7Ci0JaW50IGVycm9yOworCWludCByYywgaTsKKwlMUEZDX01CT1hRX3QgKnBtYjsKIAotCXBoYmEtPm1zaXhfZW50cmllc1swXS5lbnRyeSA9IDA7Ci0JcGhiYS0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciA9IDA7CisJLyogU2V0IHVwIE1TSS1YIG11bHRpLW1lc3NhZ2UgdmVjdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBMUEZDX01TSVhfVkVDVE9SUzsgaSsrKQorCQlwaGJhLT5tc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOwogCi0JZXJyb3IgPSBwY2lfZW5hYmxlX21zaXgocGhiYS0+cGNpZGV2LCBwaGJhLT5tc2l4X2VudHJpZXMsCisJLyogQ29uZmlndXJlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCisJcmMgPSBwY2lfZW5hYmxlX21zaXgocGhiYS0+cGNpZGV2LCBwaGJhLT5tc2l4X2VudHJpZXMsCiAJCQkJQVJSQVlfU0laRShwaGJhLT5tc2l4X2VudHJpZXMpKTsKLQlpZiAoZXJyb3IpIHsKKwlpZiAocmMpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCiAJCQkJIjA0MjAgRW5hYmxlIE1TSS1YIGZhaWxlZCAoJWQpLCBjb250aW51aW5nICIKLQkJCQkid2l0aCBNU0lcbiIsIGVycm9yKTsKLQkJcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOwotCQlyZXR1cm4gZXJyb3I7CisJCQkJIndpdGggTVNJXG4iLCByYyk7CisJCWdvdG8gbXNpX2ZhaWxfb3V0OworCX0gZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NU0lYX1ZFQ1RPUlM7IGkrKykKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkiMDQ3NyBNU0ktWCBlbnRyeVslZF06IHZlY3Rvcj14JXggIgorCQkJCQkibWVzc2FnZT0lZFxuIiwgaSwKKwkJCQkJcGhiYS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKKwkJCQkJcGhiYS0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5KTsKKwkvKgorCSAqIEFzc2lnbiBNU0ktWCB2ZWN0b3JzIHRvIGludGVycnVwdCBoYW5kbGVycworCSAqLworCisJLyogdmVjdG9yLTAgaXMgYXNzb2NpYXRlZCB0byBzbG93LXBhdGggaGFuZGxlciAqLworCXJjID0gcmVxdWVzdF9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgJmxwZmNfc3BfaW50cl9oYW5kbGVyLAorCQkJIElSUUZfU0hBUkVELCBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUsIHBoYmEpOworCWlmIChyYykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIwNDIxIE1TSS1YIHNsb3ctcGF0aCByZXF1ZXN0X2lycSBmYWlsZWQgIgorCQkJCSIoJWQpLCBjb250aW51aW5nIHdpdGggTVNJXG4iLCByYyk7CisJCWdvdG8gbXNpX2ZhaWxfb3V0OwogCX0KIAotCWVycm9yID0JcmVxdWVzdF9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgbHBmY19pbnRyX2hhbmRsZXIsIDAsCi0JCQkgICAgTFBGQ19EUklWRVJfTkFNRSwgcGhiYSk7Ci0JaWYgKGVycm9yKSB7CisJLyogdmVjdG9yLTEgaXMgYXNzb2NpYXRlZCB0byBmYXN0LXBhdGggaGFuZGxlciAqLworCXJjID0gcmVxdWVzdF9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzFdLnZlY3RvciwgJmxwZmNfZnBfaW50cl9oYW5kbGVyLAorCQkJIElSUUZfU0hBUkVELCBMUEZDX0ZQX0RSSVZFUl9IQU5ETEVSX05BTUUsIHBoYmEpOworCisJaWYgKHJjKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0MjEgTVNJLVggcmVxdWVzdF9pcnEgZmFpbGVkICglZCksICIKLQkJCQkiY29udGludWluZyB3aXRoIE1TSVxuIiwgZXJyb3IpOwotCQlwY2lfZGlzYWJsZV9tc2l4KHBoYmEtPnBjaWRldik7CisJCQkJIjA0MjkgTVNJLVggZmFzdC1wYXRoIHJlcXVlc3RfaXJxIGZhaWxlZCAiCisJCQkJIiglZCksIGNvbnRpbnVpbmcgd2l0aCBNU0lcbiIsIHJjKTsKKwkJZ290byBpcnFfZmFpbF9vdXQ7CiAJfQotCXJldHVybiBlcnJvcjsKKworCS8qCisJICogQ29uZmlndXJlIEhCQSBNU0ktWCBhdHRlbnRpb24gY29uZGl0aW9ucyB0byBtZXNzYWdlcworCSAqLworCXBtYiA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKworCWlmICghcG1iKSB7CisJCXJjID0gLUVOT01FTTsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMDQ3NCBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpc3N1aW5nICIKKwkJCQkiTUJPWF9DT05GSUdfTVNJIGNvbW1hbmRcbiIpOworCQlnb3RvIG1lbV9mYWlsX291dDsKKwl9CisJcmMgPSBscGZjX2NvbmZpZ19tc2kocGhiYSwgcG1iKTsKKwlpZiAocmMpCisJCWdvdG8gbWJ4X2ZhaWxfb3V0OworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKTsKKwlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkiMDM1MSBDb25maWcgTVNJIG1haWxib3ggY29tbWFuZCBmYWlsZWQsICIKKwkJCQkibWJ4Q21kIHgleCwgbWJ4U3RhdHVzIHgleFxuIiwKKwkJCQlwbWItPm1iLm1ieENvbW1hbmQsIHBtYi0+bWIubWJ4U3RhdHVzKTsKKwkJZ290byBtYnhfZmFpbF9vdXQ7CisJfQorCisJLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBtYWlsYm94IGNvbW1hbmQgKi8KKwltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlyZXR1cm4gcmM7CisKK21ieF9mYWlsX291dDoKKwkvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIG1haWxib3ggY29tbWFuZCAqLworCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCittZW1fZmFpbF9vdXQ6CisJLyogZnJlZSB0aGUgaXJxIGFscmVhZHkgcmVxdWVzdGVkICovCisJZnJlZV9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzFdLnZlY3RvciwgcGhiYSk7CisKK2lycV9mYWlsX291dDoKKwkvKiBmcmVlIHRoZSBpcnEgYWxyZWFkeSByZXF1ZXN0ZWQgKi8KKwlmcmVlX2lycShwaGJhLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCBwaGJhKTsKKworbXNpX2ZhaWxfb3V0OgorCS8qIFVuY29uZmlndXJlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCisJcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOworCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2Rpc2FibGVfbXNpeDogRGlzYWJsZSBNU0ktWCBpbnRlcnJ1cHQgbW9kZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlbGVhc2UgdGhlIE1TSS1YIHZlY3RvcnMgYW5kIHRoZW4gZGlzYWJsZSB0aGUKKyAqIE1TSS1YIGludGVycnVwdCBtb2RlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZGlzYWJsZV9tc2l4KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlmcmVlX2lycShwaGJhLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yLCBwaGJhKTsKKwlpbnQgaTsKKworCS8qIEZyZWUgdXAgTVNJLVggbXVsdGktbWVzc2FnZSB2ZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IExQRkNfTVNJWF9WRUNUT1JTOyBpKyspCisJCWZyZWVfaXJxKHBoYmEtPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsIHBoYmEpOworCS8qIERpc2FibGUgTVNJLVggKi8KIAlwY2lfZGlzYWJsZV9tc2l4KHBoYmEtPnBjaWRldik7CiB9CiAKKy8qKgorICogbHBmY19wY2lfcHJvYmVfb25lOiBscGZjIFBDSSBwcm9iZSBmdW5jIHRvIHJlZ2lzdGVyIGRldmljZSB0byBQQ0kgc3Vic3lzdGVtLgorICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZQorICogQHBpZDogcG9pbnRlciB0byBQQ0kgZGV2aWNlIGlkZW50aWZpZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gYmUgcmVnaXN0ZXJlZCB0byB0aGUga2VybmVsJ3MgUENJIHN1YnN5c3RlbS4gV2hlbiBhbgorICogRW11bGV4IEhCQSBpcyBwcmVzZW50ZWQgaW4gUENJIGJ1cywgdGhlIGtlcm5lbCBQQ0kgc3Vic3lzdGVtIGxvb2tzIGF0CisgKiBQQ0kgZGV2aWNlLXNwZWNpZmljIGluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgYW5kIGRyaXZlciB0byBzZWUgaWYgdGhlCisgKiBkcml2ZXIgc3RhdGUgdGhhdCBpdCBjYW4gc3VwcG9ydCB0aGlzIGtpbmQgb2YgZGV2aWNlLiBJZiB0aGUgbWF0Y2ggaXMKKyAqIHN1Y2Nlc3NmdWwsIHRoZSBkcml2ZXIgY29yZSBpbnZva2VzIHRoaXMgcm91dGluZS4gSWYgdGhpcyByb3V0aW5lCisgKiBkZXRlcm1pbmVzIGl0IGNhbiBjbGFpbSB0aGUgSEJBLCBpdCBkb2VzIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gdGhhdCBpdAorICogbmVlZHMgdG8gZG8gdG8gaGFuZGxlIHRoZSBIQkEgcHJvcGVybHkuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIGRyaXZlciBjYW4gY2xhaW0gdGhlIGRldmljZQorICogICBuZWdhdGl2ZSB2YWx1ZSAtIGRyaXZlciBjYW4gbm90IGNsYWltIHRoZSBkZXZpY2UKKyAqKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0CiBscGZjX3BjaV9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpCiB7CkBAIC0xOTU2LDYgKzIzNTcsNyBAQAogCWludCAgaSwgaGJxX2NvdW50OwogCXVpbnQxNl90IGlvdGFnOwogCWludCBiYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKKwlzdHJ1Y3QgbHBmY19hZGFwdGVyX2V2ZW50X2hlYWRlciBhZGFwdGVyX2V2ZW50OwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkKIAkJZ290byBvdXQ7CkBAIC0xOTY2LDYgKzIzNjgsNyBAQAogCWlmICghcGhiYSkKIAkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOwogCisJYXRvbWljX3NldCgmcGhiYS0+ZmFzdF9ldmVudF9jb3VudCwgMCk7CiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmhiYWxvY2spOwogCiAJLyogSW5pdGlhbGl6ZSBuZGxwIG1hbmFnZW1lbnQgc3BpbmxvY2sgKi8KQEAgLTE5NzgsNiArMjM4MSw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfcGhiYTsKIAogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5wb3J0X2xpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBoYmEtPndhaXRfNF9tbG9fbV9xKTsKIAkvKgogCSAqIEdldCBhbGwgdGhlIG1vZHVsZSBwYXJhbXMgZm9yIGNvbmZpZ3VyaW5nIHRoaXMgaG9zdCBhbmQgdGhlbgogCSAqIGVzdGFibGlzaCB0aGUgaG9zdC4KQEAgLTIwMDAsNiArMjQwNCw5IEBACiAJaW5pdF90aW1lcigmcGhiYS0+ZmFicmljX2Jsb2NrX3RpbWVyKTsKIAlwaGJhLT5mYWJyaWNfYmxvY2tfdGltZXIuZnVuY3Rpb24gPSBscGZjX2ZhYnJpY19ibG9ja190aW1lb3V0OwogCXBoYmEtPmZhYnJpY19ibG9ja190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBoYmE7CisJaW5pdF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCk7CisJcGhiYS0+ZXJhdHRfcG9sbC5mdW5jdGlvbiA9IGxwZmNfcG9sbF9lcmF0dDsKKwlwaGJhLT5lcmF0dF9wb2xsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGhiYTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXBjaV90cnlfc2V0X213aShwZGV2KTsKQEAgLTIwMTksNyArMjQyNiw3IEBACiAJYmFyMm1hcF9sZW4gICAgICAgID0gcGNpX3Jlc291cmNlX2xlbihwaGJhLT5wY2lkZXYsIDIpOwogCiAJLyogTWFwIEhCQSBTTElNIHRvIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KLQlwaGJhLT5zbGltX21lbW1hcF9wICAgICAgPSBpb3JlbWFwKHBoYmEtPnBjaV9iYXIwX21hcCwgYmFyMG1hcF9sZW4pOworCXBoYmEtPnNsaW1fbWVtbWFwX3AgPSBpb3JlbWFwKHBoYmEtPnBjaV9iYXIwX21hcCwgYmFyMG1hcF9sZW4pOwogCWlmICghcGhiYS0+c2xpbV9tZW1tYXBfcCkgewogCQllcnJvciA9IC1FTk9ERVY7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCkBAIC0yMDM3LDEyICsyNDQ0LDE4IEBACiAJfQogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBTTEktMiBzdHJ1Y3R1cmVzICovCi0JcGhiYS0+c2xpbTJwID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwaGJhLT5wY2lkZXYtPmRldiwgU0xJMl9TTElNX1NJWkUsCi0JCQkJCSAgJnBoYmEtPnNsaW0ycF9tYXBwaW5nLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBoYmEtPnNsaW0ycCkKKwlwaGJhLT5zbGltMnAudmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsCisJCQkJCSAgICAgICBTTEkyX1NMSU1fU0laRSwKKwkJCQkJICAgICAgICZwaGJhLT5zbGltMnAucGh5cywKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+c2xpbTJwLnZpcnQpCiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAKLQltZW1zZXQocGhiYS0+c2xpbTJwLCAwLCBTTEkyX1NMSU1fU0laRSk7CisJbWVtc2V0KHBoYmEtPnNsaW0ycC52aXJ0LCAwLCBTTEkyX1NMSU1fU0laRSk7CisJcGhiYS0+bWJveCA9IHBoYmEtPnNsaW0ycC52aXJ0ICsgb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLCBtYngpOworCXBoYmEtPnBjYiA9IChwaGJhLT5zbGltMnAudmlydCArIG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwgcGNiKSk7CisJcGhiYS0+SU9DQnMgPSAocGhiYS0+c2xpbTJwLnZpcnQgKworCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLCBJT0NCcykpOwogCiAJcGhiYS0+aGJxc2xpbXAudmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsCiAJCQkJCQkgbHBmY19zbGlfaGJxX3NpemUoKSwKQEAgLTIxMTEsNyArMjUyNCw3IEBACiAJcGhiYS0+ZmNfYXJidG92ID0gRkZfREVGX0FSQlRPVjsKIAogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT53b3JrX2xpc3QpOwotCXBoYmEtPndvcmtfaGFfbWFzayA9IChIQV9FUkFUVHxIQV9NQkFUVHxIQV9MQVRUKTsKKwlwaGJhLT53b3JrX2hhX21hc2sgPSAoSEFfRVJBVFQgfCBIQV9NQkFUVCB8IEhBX0xBVFQpOwogCXBoYmEtPndvcmtfaGFfbWFzayB8PSAoSEFfUlhNQVNLIDw8IChMUEZDX0VMU19SSU5HICogNCkpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgd2FpdCBxdWV1ZSBoZWFkIGZvciB0aGUga2VybmVsIHRocmVhZCAqLwpAQCAtMjE0NiwyMSArMjU1OSw0MiBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzaG9zdCk7CiAJcGhiYS0+aW50cl90eXBlID0gTk9ORTsKIAorCXBoYmEtPk1Cc2xpbWFkZHIgPSBwaGJhLT5zbGltX21lbW1hcF9wOworCXBoYmEtPkhBcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhBX1JFR19PRkZTRVQ7CisJcGhiYS0+Q0FyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgQ0FfUkVHX09GRlNFVDsKKwlwaGJhLT5IU3JlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIU19SRUdfT0ZGU0VUOworCXBoYmEtPkhDcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhDX1JFR19PRkZTRVQ7CisKKwkvKiBDb25maWd1cmUgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgKi8KIAlpZiAocGhiYS0+Y2ZnX3VzZV9tc2kgPT0gMikgewotCQllcnJvciA9IGxwZmNfZW5hYmxlX21zaXgocGhiYSk7Ci0JCWlmICghZXJyb3IpCi0JCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0lYOworCQkvKiBOZWVkIHRvIGlzc3VlIGNvbmZfcG9ydCBtYm94IGNtZCBiZWZvcmUgY29uZl9tc2kgbWJveCBjbWQgKi8KKwkJZXJyb3IgPSBscGZjX3NsaV9jb25maWdfcG9ydChwaGJhLCAzKTsKKwkJaWYgKGVycm9yKQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjA0MjcgRmlybXdhcmUgbm90IGNhcGFibGUgb2YgU0xJIDMgbW9kZS5cbiIpOworCQllbHNlIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIwNDI2IEZpcm13YXJlIGNhcGFibGUgb2YgU0xJIDMgbW9kZS5cbiIpOworCQkJLyogTm93LCB0cnkgdG8gZW5hYmxlIE1TSS1YIGludGVycnVwdCBtb2RlICovCisJCQllcnJvciA9IGxwZmNfZW5hYmxlX21zaXgocGhiYSk7CisJCQlpZiAoIWVycm9yKSB7CisJCQkJcGhiYS0+aW50cl90eXBlID0gTVNJWDsKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJCSIwNDMwIGVuYWJsZSBNU0ktWCBtb2RlLlxuIik7CisJCQl9CisJCX0KIAl9CiAKIAkvKiBGYWxsYmFjayB0byBNU0kgaWYgTVNJLVggaW5pdGlhbGl6YXRpb24gZmFpbGVkICovCiAJaWYgKHBoYmEtPmNmZ191c2VfbXNpID49IDEgJiYgcGhiYS0+aW50cl90eXBlID09IE5PTkUpIHsKIAkJcmV0dmFsID0gcGNpX2VuYWJsZV9tc2kocGhiYS0+cGNpZGV2KTsKLQkJaWYgKCFyZXR2YWwpCisJCWlmICghcmV0dmFsKSB7CiAJCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0k7Ci0JCWVsc2UKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAotCQkJCQkiMDQ1MiBFbmFibGUgTVNJIGZhaWxlZCwgY29udGludWluZyAiCi0JCQkJCSJ3aXRoIElSUVxuIik7CisJCQkJCSIwNDczIGVuYWJsZSBNU0kgbW9kZS5cbiIpOworCQl9IGVsc2UKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkiMDQ1MiBlbmFibGUgSVJRIG1vZGUuXG4iKTsKIAl9CiAKIAkvKiBNU0ktWCBpcyB0aGUgb25seSBjYXNlIHRoZSBkb2Vzbid0IG5lZWQgdG8gY2FsbCByZXF1ZXN0X2lycSAqLwpAQCAtMjE3NiwxOCArMjYxMCwxNiBAQAogCQkJcGhiYS0+aW50cl90eXBlID0gSU5UeDsKIAl9CiAKLQlwaGJhLT5NQnNsaW1hZGRyID0gcGhiYS0+c2xpbV9tZW1tYXBfcDsKLQlwaGJhLT5IQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIQV9SRUdfT0ZGU0VUOwotCXBoYmEtPkNBcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIENBX1JFR19PRkZTRVQ7Ci0JcGhiYS0+SFNyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSFNfUkVHX09GRlNFVDsKLQlwaGJhLT5IQ3JlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIQ19SRUdfT0ZGU0VUOwotCiAJaWYgKGxwZmNfYWxsb2Nfc3lzZnNfYXR0cih2cG9ydCkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMTQ3NiBGYWlsZWQgdG8gYWxsb2NhdGUgc3lzZnMgYXR0clxuIik7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCiAJaWYgKGxwZmNfc2xpX2hiYV9zZXR1cChwaGJhKSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIxNDc3IEZhaWxlZCB0byBzZXQgdXAgaGJhXG4iKTsKIAkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZW1vdmVfZGV2aWNlOwogCX0KQEAgLTIyMDYsNiArMjYzOCwxNiBAQAogCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJfQogCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkiMDQyOCBQZXJmb3JtIFNDU0kgc2NhblxuIik7CisJLyogU2VuZCBib2FyZCBhcnJpdmFsIGV2ZW50IHRvIHVwcGVyIGxheWVyICovCisJYWRhcHRlcl9ldmVudC5ldmVudF90eXBlID0gRkNfUkVHX0FEQVBURVJfRVZFTlQ7CisJYWRhcHRlcl9ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfQVJSSVZBTDsKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LCBmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCXNpemVvZihhZGFwdGVyX2V2ZW50KSwKKwkJKGNoYXIgKikgJmFkYXB0ZXJfZXZlbnQsCisJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOworCiAJc2NzaV9zY2FuX2hvc3Qoc2hvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC0yMjM4LDExICsyNjgwLDExIEBACiAJfQogCWxwZmNfbWVtX2ZyZWUocGhiYSk7CiBvdXRfZnJlZV9oYnFzbGltcDoKLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBscGZjX3NsaV9oYnFfc2l6ZSgpLCBwaGJhLT5oYnFzbGltcC52aXJ0LAotCQkJICBwaGJhLT5oYnFzbGltcC5waHlzKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBscGZjX3NsaV9oYnFfc2l6ZSgpLAorCQkJICBwaGJhLT5oYnFzbGltcC52aXJ0LCBwaGJhLT5oYnFzbGltcC5waHlzKTsKIG91dF9mcmVlX3NsaW06Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgU0xJMl9TTElNX1NJWkUsIHBoYmEtPnNsaW0ycCwKLQkJCQkJCQlwaGJhLT5zbGltMnBfbWFwcGluZyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgU0xJMl9TTElNX1NJWkUsCisJCQkgIHBoYmEtPnNsaW0ycC52aXJ0LCBwaGJhLT5zbGltMnAucGh5cyk7CiBvdXRfaW91bm1hcDoKIAlpb3VubWFwKHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCk7CiBvdXRfaW91bm1hcF9zbGltOgpAQCAtMjI2Miw2ICsyNzA0LDE0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIGxwZmNfcGNpX3JlbW92ZV9vbmU6IGxwZmMgUENJIGZ1bmMgdG8gdW5yZWdpc3RlciBkZXZpY2UgZnJvbSBQQ0kgc3Vic3lzdGVtLgorICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBiZSByZWdpc3RlcmVkIHRvIHRoZSBrZXJuZWwncyBQQ0kgc3Vic3lzdGVtLiBXaGVuIGFuCisgKiBFbXVsZXggSEJBIGlzIHJlbW92ZWQgZnJvbSBQQ0kgYnVzLiBJdCBwZXJmb3JtIGFsbCB0aGUgbmVjZXNzYXJ5IGNsZWFudXAKKyAqIGZvciB0aGUgSEJBIGRldmljZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIFBDSSBzdWJzeXN0ZW0gcHJvcGVybHkuCisgKiovCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQKIGxwZmNfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yMzE2LDEyICsyNzY2LDEyIEBACiAJbHBmY19zY3NpX2ZyZWUocGhiYSk7CiAJbHBmY19tZW1fZnJlZShwaGJhKTsKIAotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGxwZmNfc2xpX2hicV9zaXplKCksIHBoYmEtPmhicXNsaW1wLnZpcnQsCi0JCQkgIHBoYmEtPmhicXNsaW1wLnBoeXMpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGxwZmNfc2xpX2hicV9zaXplKCksCisJCQkgIHBoYmEtPmhicXNsaW1wLnZpcnQsIHBoYmEtPmhicXNsaW1wLnBoeXMpOwogCiAJLyogRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFNMSTIgaW50ZXJmYWNlICovCiAJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgU0xJMl9TTElNX1NJWkUsCi0JCQkgIHBoYmEtPnNsaW0ycCwgcGhiYS0+c2xpbTJwX21hcHBpbmcpOworCQkJICBwaGJhLT5zbGltMnAudmlydCwgcGhiYS0+c2xpbTJwLnBoeXMpOwogCiAJLyogdW5tYXAgYWRhcHRlciBTTElNIGFuZCBDb250cm9sIFJlZ2lzdGVycyAqLwogCWlvdW5tYXAocGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wKTsKQEAgLTIzMzYsMTMgKzI3ODYsMjEgQEAKIH0KIAogLyoqCi0gKiBscGZjX2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCi0gKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCi0gKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWVjdGlvbiBzdGF0ZQorICogbHBmY19pb19lcnJvcl9kZXRlY3RlZDogRHJpdmVyIG1ldGhvZCBmb3IgaGFuZGxpbmcgUENJIEkvTyBlcnJvciBkZXRlY3RlZC4KKyAqIEBwZGV2OiBwb2ludGVyIHRvIFBDSSBkZXZpY2UuCisgKiBAc3RhdGU6IHRoZSBjdXJyZW50IFBDSSBjb25uZWN0aW9uIHN0YXRlLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKLSAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgotICovCisgKiBUaGlzIHJvdXRpbmUgaXMgcmVnaXN0ZXJlZCB0byB0aGUgUENJIHN1YnN5c3RlbSBmb3IgZXJyb3IgaGFuZGxpbmcuIFRoaXMKKyAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIGl0IHdpbGwKKyAqIG5lZWQgdG8gc3RvcCBhbGwgdGhlIEkvT3MgYW5kIGludGVycnVwdChzKSB0byB0aGUgZGV2aWNlLiBPbmNlIHRoYXQgaXMKKyAqIGRvbmUsIGl0IHdpbGwgcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQgZm9yIHRoZSBQQ0kgc3Vic3lzdGVtIHRvCisgKiBwZXJmb3JtIHByb3BlciByZWNvdmVyeSBhcyBkZXNpcmVkLgorICoKKyAqIFJldHVybiBjb2RlcworICogICBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUIC0gbmVlZCB0byByZXNldCBiZWZvcmUgcmVjb3ZlcnkKKyAqICAgUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCAtIGRldmljZSBjb3VsZCBub3QgYmUgcmVjb3ZlcmVkCisgKiovCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBscGZjX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCiB7CkBAIC0yMzUxLDggKzI4MDksMTUgQEAKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICAqcHJpbmc7CiAKLQlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMDQ3MiBQQ0kgY2hhbm5lbCBJL08gcGVybWFuZW50IGZhaWx1cmVcbiIpOworCQkvKiBCbG9jayBhbGwgU0NTSSBkZXZpY2VzJyBJL09zIG9uIHRoZSBob3N0ICovCisJCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CisJCS8qIENsZWFuIHVwIGFsbCBkcml2ZXIncyBvdXRzdGFuZGluZyBTQ1NJIEkvT3MgKi8KKwkJbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzKHBoYmEpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJLyoKQEAgLTIzNzYsMTAgKzI4NDEsMjEgQEAKIH0KIAogLyoqCi0gKiBscGZjX2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCi0gKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBscGZjX2lvX3Nsb3RfcmVzZXQ6IFJlc3RhcnQgYSBQQ0kgZGV2aWNlIGZyb20gc2NyYXRjaC4KKyAqIEBwZGV2OiBwb2ludGVyIHRvIFBDSSBkZXZpY2UuCiAgKgotICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCisgKiBUaGlzIHJvdXRpbmUgaXMgcmVnaXN0ZXJlZCB0byB0aGUgUENJIHN1YnN5c3RlbSBmb3IgZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMKKyAqIGNhbGxlZCBhZnRlciBQQ0kgYnVzIGhhcyBiZWVuIHJlc2V0IHRvIHJlc3RhcnQgdGhlIFBDSSBjYXJkIGZyb20gc2NyYXRjaCwKKyAqIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuIER1cmluZyB0aGUgUENJIHN1YnN5c3RlbSBlcnJvciByZWNvdmVyeSwgYWZ0ZXIgdGhlCisgKiBkcml2ZXIgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VULCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIHBlcmZvcm0KKyAqIHByb3BlciBlcnJvciByZWNvdmVyeSBhbmQgdGhlbiBjYWxsIHRoaXMgcm91dGluZSBiZWZvcmUgY2FsbGluZyB0aGUgLnJlc3VtZQorICogbWV0aG9kIHRvIHJlY292ZXIgdGhlIGRldmljZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIEhCQSBkZXZpY2UsCisgKiBlbmFibGUgdGhlIGludGVycnVwdCwgYnV0IGl0IHdpbGwganVzdCBwdXQgdGhlIEhCQSB0byBvZmZsaW5lIHN0YXRlIHdpdGhvdXQKKyAqIHBhc3NpbmcgYW55IEkvTyB0cmFmZmljLgorICoKKyAqIFJldHVybiBjb2RlcworICogICBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQgLSB0aGUgZGV2aWNlIGhhcyBiZWVuIHJlY292ZXJlZAorICogICBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUIC0gZGV2aWNlIGNvdWxkIG5vdCBiZSByZWNvdmVyZWQKICAqLwogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgbHBmY19pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMjQwNCwyMCArMjg4MCwzNCBAQAogCS8qIEVuYWJsZSBjb25maWd1cmVkIGludGVycnVwdCBtZXRob2QgKi8KIAlwaGJhLT5pbnRyX3R5cGUgPSBOT05FOwogCWlmIChwaGJhLT5jZmdfdXNlX21zaSA9PSAyKSB7Ci0JCWVycm9yID0gbHBmY19lbmFibGVfbXNpeChwaGJhKTsKLQkJaWYgKCFlcnJvcikKLQkJCXBoYmEtPmludHJfdHlwZSA9IE1TSVg7CisJCS8qIE5lZWQgdG8gaXNzdWUgY29uZl9wb3J0IG1ib3ggY21kIGJlZm9yZSBjb25mX21zaSBtYm94IGNtZCAqLworCQllcnJvciA9IGxwZmNfc2xpX2NvbmZpZ19wb3J0KHBoYmEsIDMpOworCQlpZiAoZXJyb3IpCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkiMDQ3OCBGaXJtd2FyZSBub3QgY2FwYWJsZSBvZiBTTEkgMyBtb2RlLlxuIik7CisJCWVsc2UgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjA0NzkgRmlybXdhcmUgY2FwYWJsZSBvZiBTTEkgMyBtb2RlLlxuIik7CisJCQkvKiBOb3csIHRyeSB0byBlbmFibGUgTVNJLVggaW50ZXJydXB0IG1vZGUgKi8KKwkJCWVycm9yID0gbHBmY19lbmFibGVfbXNpeChwaGJhKTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0lYOworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkJIjA0ODAgZW5hYmxlIE1TSS1YIG1vZGUuXG4iKTsKKwkJCX0KKwkJfQogCX0KIAogCS8qIEZhbGxiYWNrIHRvIE1TSSBpZiBNU0ktWCBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KIAlpZiAocGhiYS0+Y2ZnX3VzZV9tc2kgPj0gMSAmJiBwaGJhLT5pbnRyX3R5cGUgPT0gTk9ORSkgewogCQlyZXR2YWwgPSBwY2lfZW5hYmxlX21zaShwaGJhLT5wY2lkZXYpOwotCQlpZiAoIXJldHZhbCkKKwkJaWYgKCFyZXR2YWwpIHsKIAkJCXBoYmEtPmludHJfdHlwZSA9IE1TSTsKLQkJZWxzZQogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkJCSIwNDcwIEVuYWJsZSBNU0kgZmFpbGVkLCBjb250aW51aW5nICIKLQkJCQkJIndpdGggSVJRXG4iKTsKKwkJCQkJIjA0ODEgZW5hYmxlIE1TSSBtb2RlLlxuIik7CisJCX0gZWxzZQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCSIwNDcwIGVuYWJsZSBJUlEgbW9kZS5cbiIpOwogCX0KIAogCS8qIE1TSS1YIGlzIHRoZSBvbmx5IGNhc2UgdGhlIGRvZXNuJ3QgbmVlZCB0byBjYWxsIHJlcXVlc3RfaXJxICovCkBAIC0yNDQwLDExICsyOTMwLDEzIEBACiB9CiAKIC8qKgotICogbHBmY19pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgotICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogbHBmY19pb19yZXN1bWU6IFJlc3VtZSBQQ0kgSS9PIG9wZXJhdGlvbi4KKyAqIEBwZGV2OiBwb2ludGVyIHRvIFBDSSBkZXZpY2UKICAqCi0gKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAotICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgorICogVGhpcyByb3V0aW5lIGlzIHJlZ2lzdGVyZWQgdG8gdGhlIFBDSSBzdWJzeXN0ZW0gZm9yIGVycm9yIGhhbmRsaW5nLiBJdCBpcworICogY2FsbGVkIHdoZW4ga2VybmVsIGVycm9yIHJlY292ZXJ5IHRlbGxzIHRoZSBscGZjIGRyaXZlciB0aGF0IGl0IGlzIG9rIHRvCisgKiByZXN1bWUgbm9ybWFsIFBDSSBvcGVyYXRpb24gYWZ0ZXIgUENJIGJ1cyBlcnJvciByZWNvdmVyeS4gQWZ0ZXIgdGhpcyBjYWxsLAorICogdHJhZmZpYyBjYW4gc3RhcnQgdG8gZmxvdyBmcm9tIHRoaXMgZGV2aWNlIGFnYWluLgogICovCiBzdGF0aWMgdm9pZCBscGZjX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTI0OTEsNiArMjk4Myw4IEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1pFUEhZUiwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfSE9STkVULAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9aRVBIWVJfU0NTUCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfWkVQSFlSX0RDU1AsCkBAIC0yNTIxLDYgKzMwMTUsMTIgQEAKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfU0FUX1MsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1BST1RFVVNfVkYsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUEYsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUywKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAgfQogfTsKIApAQCAtMjU0MCw2ICszMDQwLDE4IEBACiAJLmVycl9oYW5kbGVyICAgID0gJmxwZmNfZXJyX2hhbmRsZXIsCiB9OwogCisvKioKKyAqIGxwZmNfaW5pdDogbHBmYyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBscGZjIG1vZHVsZSBpcyBsb2FkZWQgaW50byB0aGUKKyAqIGtlcm5lbC4gVGhlIHNwZWNpYWwga2VybmVsIG1hY3JvIG1vZHVsZV9pbml0KCkgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUKKyAqIHJvbGUgb2YgdGhpcyByb3V0aW5lIHRvIHRoZSBrZXJuZWwgYXMgbHBmYyBtb2R1bGUgZW50cnkgcG9pbnQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzZnVsCisgKiAgIC1FTk9NRU0gLSBGQyBhdHRhY2ggdHJhbnNwb3J0IGZhaWxlZAorICogICBhbGwgb3RoZXJzIC0gZmFpbGVkCisgKi8KIHN0YXRpYyBpbnQgX19pbml0CiBscGZjX2luaXQodm9pZCkKIHsKQEAgLTI1NjcsMTIgKzMwNzksMjAgQEAKIAllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmxwZmNfZHJpdmVyKTsKIAlpZiAoZXJyb3IpIHsKIAkJZmNfcmVsZWFzZV90cmFuc3BvcnQobHBmY190cmFuc3BvcnRfdGVtcGxhdGUpOwotCQlmY19yZWxlYXNlX3RyYW5zcG9ydChscGZjX3Zwb3J0X3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJCWlmIChscGZjX2VuYWJsZV9ucGl2KQorCQkJZmNfcmVsZWFzZV90cmFuc3BvcnQobHBmY192cG9ydF90cmFuc3BvcnRfdGVtcGxhdGUpOwogCX0KIAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBscGZjX2V4aXQ6IGxwZmMgbW9kdWxlIHJlbW92YWwgcm91dGluZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB3aGVuIHRoZSBscGZjIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbC4KKyAqIFRoZSBzcGVjaWFsIGtlcm5lbCBtYWNybyBtb2R1bGVfZXhpdCgpIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHJvbGUgb2YKKyAqIHRoaXMgcm91dGluZSB0byB0aGUga2VybmVsIGFzIGxwZmMgbW9kdWxlIGV4aXQgcG9pbnQuCisgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdAogbHBmY19leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCmluZGV4IDdhOWJlNGMuLjc0NjVmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtMzcsMTAgKzM4LDIwIEBACiAjaW5jbHVkZSAibHBmY19jcnRuLmgiCiAjaW5jbHVkZSAibHBmY19jb21wYXQuaCIKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfZHVtcF9tZW06IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJldHJpZXZpbmcgSEJBJ3MgVlBEIG1lbW9yeS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEBvZmZzZXQ6IG9mZnNldCBmb3IgZHVtcGluZyBWUEQgbWVtb3J5IG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgZHVtcCBtYWlsYm94IGNvbW1hbmQgcHJvdmlkZXMgYSBtZXRob2QgZm9yIHRoZSBkZXZpY2UgZHJpdmVyIHRvIG9idGFpbgorICogdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIQkEgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBkdW1waW5nIEhCQSBWaXRhbCBQcm9kdWN0CisgKiBEYXRhIChWUEQpIG1lbW9yeS4gVGhpcyBtYWlsYm94IGNvbW1hbmQgaXMgdG8gYmUgdXNlZCBmb3IgcmV0cmlldmluZyBhCisgKiBwb3J0aW9uIChETVBfUlNQX1NJWkUgYnl0ZXMpIG9mIGEgSEJBJ3MgVlBEIGZyb20gdGhlIEhCQSBhdCBhbiBhZGRyZXNzCisgKiBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBvZmZzZXQgcGFyYW1ldGVyLgorICoqLwogdm9pZAogbHBmY19kdW1wX21lbShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsIHVpbnQxNl90IG9mZnNldCkKIHsKQEAgLTY1LDEwICs3NiwxNyBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWFkX252ICBJc3N1ZSBhIFJFQUQgTlZQQVJBTSAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVhZF9udjogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEncyBOVlJBTSBwYXJhbS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgcmVhZCBOVlJBTSBtYWlsYm94IGNvbW1hbmQgcmV0dXJucyB0aGUgSEJBJ3Mgbm9uLXZvbGF0aWxlIHBhcmFtZXRlcnMKKyAqIHRoYXQgYXJlIHVzZWQgYXMgZGVmYXVsdHMgd2hlbiB0aGUgRmlicmUgQ2hhbm5lbCBsaW5rIGlzIGJyb3VnaHQgb24tbGluZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBpbmZvcm1hdGlvbiBzdG9yZWQKKyAqIGluIHRoZSBIQkEncyBOVlJBTS4gU3BlY2lmaWNhbGx5LCB0aGUgSEJBJ3MgV1dOTiBhbmQgV1dQTi4KKyAqKi8KIHZvaWQKIGxwZmNfcmVhZF9udihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC04MSwxMCArOTksMTkgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfY29uZmlnX2FzeW5jICBJc3N1ZSBhICAgICAgICAgICAgICAgICovCi0vKiAgTUJYX0FTWU5DX0VWVF9FTkFCTEUgbWFpbGJveCBjb21tYW5kICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NvbmZpZ19hc3luYzogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgZW5hYmxpbmcgSEJBIGFzeW5jIGV2ZW50LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQHJpbmc6IHJpbmcgbnVtYmVyIGZvciB0aGUgYXN5bmNocm9ub3VzIGV2ZW50IHRvIGJlIGNvbmZpZ3VyZWQuCisgKgorICogVGhlIGFzeW5jaHJvbm91cyBldmVudCBlbmFibGUgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gZW5hYmxlIHRoZQorICogYXN5bmNocm9ub3VzIGV2ZW50IHBvc3RpbmcgdmlhIHRoZSBBU1lOQ19TVEFUVVNfQ04gSU9DQiByZXNwb25zZSBhbmQKKyAqIHNwZWNpZmllcyB0aGUgZGVmYXVsdCByaW5nIHRvIHdoaWNoIGV2ZW50cyBhcmUgcG9zdGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBlbmFibGluZyBIQkEgYXN5bmNocm9ub3VzCisgKiBldmVudCBzdXBwb3J0IG9uIGEgSU9DQiByaW5nLgorICoqLwogdm9pZAogbHBmY19jb25maWdfYXN5bmMoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLAogCQl1aW50MzJfdCByaW5nKQpAQCAtOTksMTAgKzEyNiwxOSBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19oZWFydF9iZWF0ICBJc3N1ZSBhIEhFQVJUX0JFQVQgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGVhcnRfYmVhdDogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgaGVhcnQgYmVhdC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgaGVhcnQgYmVhdCBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlY3QgYW4gdW5yZXNwb25zaXZlIEhCQSwgd2hpY2gKKyAqIGlzIGRlZmluZWQgYXMgYW55IGRldmljZSB3aGVyZSBubyBlcnJvciBhdHRlbnRpb24gaXMgc2VudCBhbmQgYm90aCBtYWlsYm94CisgKiBhbmQgcmluZ3MgYXJlIG5vdCBwcm9jZXNzZWQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGlzc3VpbmcgYSBoZWFydCBiZWF0IGluIHRoZQorICogZm9ybSBvZiBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIEhCQS4gVGhlIHRpbWVseSBjb21wbGV0aW9uIG9mIHRoZSBoZWFydAorICogYmVhdCBtYWlsYm94IGNvbW1hbmQgaW5kaWNhdGVzIHRoZSBoZWFsdGggb2YgdGhlIEhCQS4KKyAqKi8KIHZvaWQKIGxwZmNfaGVhcnRfYmVhdChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC0xMTUsMTAgKzE1MSwyNiBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWFkX2xhICBJc3N1ZSBhIFJFQUQgTEEgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVhZF9sYTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgbGluayBhdHRlbnRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAbXA6IERNQSBidWZmZXIgbWVtb3J5IGZvciByZWFkaW5nIHRoZSBsaW5rIGF0dGVudGlvbiBpbmZvcm1hdGlvbiBpbnRvLgorICoKKyAqIFRoZSByZWFkIGxpbmsgYXR0ZW50aW9uIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8gcmVhZCB0aGUgTGluayBFdmVudAorICogQXR0ZW50aW9uIGluZm9ybWF0aW9uIGluZGljYXRlZCBieSB0aGUgSEJBIHBvcnQgd2hlbiB0aGUgTGluayBFdmVudCBiaXQKKyAqIG9mIHRoZSBIb3N0IEF0dGVudGlvbiAoSFNUQVRUKSByZWdpc3RlciBpcyBzZXQgdG8gMS4gQSBMaW5rIEV2ZW50CisgKiBBdHRlbnRpb24gb2NjdXJzIGJhc2VkIG9uIGFuIGV4Y2VwdGlvbiBkZXRlY3RlZCBhdCB0aGUgRmlicmUgQ2hhbm5lbCBsaW5rCisgKiBpbnRlcmZhY2UuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIGxpbmsgYXR0ZW50aW9uCisgKiBpbmZvcm1hdGlvbi4gQSBETUEgbWVtb3J5IGhhcyBiZWVuIHNldCBhc2lkZSBhbmQgYWRkcmVzcyBwYXNzZWQgdG8gdGhlCisgKiBIQkEgdGhyb3VnaCBAbXAgZm9yIHRoZSBIQkEgdG8gRE1BIGxpbmsgYXR0ZW50aW9uIGluZm9ybWF0aW9uIGludG8gdGhlCisgKiBtZW1vcnkgYXMgcGFydCBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBtYWlsYm94IGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICAwIC0gU3VjY2VzcyAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIGludAogbHBmY19yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYiwgc3RydWN0IGxwZmNfZG1hYnVmICptcCkKIHsKQEAgLTE0MywxMCArMTk1LDIxIEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19jbGVhcl9sYSAgSXNzdWUgYSBDTEVBUiBMQSAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY2xlYXJfbGE6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNsZWFyaW5nIEhCQSBsaW5rIGF0dGVudGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY2xlYXIgbGluayBhdHRlbnRpb24gbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCB0byBjbGVhciB0aGUgbGluayBldmVudAorICogYXR0ZW50aW9uIGNvbmRpdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIExpbmsgRXZlbnQgYml0IG9mIHRoZSBIb3N0IEF0dGVudGlvbgorICogKEhTVEFUVCkgcmVnaXN0ZXIuIFRoZSBsaW5rIGV2ZW50IGF0dGVudGlvbiBjb25kaXRpb24gaXMgY2xlYXJlZCBvbmx5IGlmCisgKiB0aGUgZXZlbnQgdGFnIHNwZWNpZmllZCBtYXRjaGVzIHRoYXQgb2YgdGhlIGN1cnJlbnQgbGluayBldmVudCBjb3VudGVyLgorICogVGhlIGN1cnJlbnQgZXZlbnQgdGFnIGlzIHJlYWQgdXNpbmcgdGhlIHJlYWQgbGluayBhdHRlbnRpb24gZXZlbnQgbWFpbGJveAorICogY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgY2xlYXJpbmcgSEJBIGxpbmsgYXR0ZW50aW9uCisgKiBpbmZvcm1hdGlvbi4KKyAqKi8KIHZvaWQKIGxwZmNfY2xlYXJfbGEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtMTYxLDEwICsyMjQsMjAgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX2NvbmZpZ19saW5rICBJc3N1ZSBhIENPTkZJRyBMSU5LICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jb25maWdfbGluazogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgbGluayBvbiBhIEhCQS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY29uZmlndXJlIGxpbmsgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgYmVmb3JlIHRoZSBpbml0aWFsaXplIGxpbmsKKyAqIG1haWxib3ggY29tbWFuZCB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIGFuZCB0byBjb25maWd1cmUgbGluay1vcmllbnRlZAorICogcGFyYW1ldGVycyBzdWNoIGFzIERJRCBhZGRyZXNzIGFuZCB2YXJpb3VzIHRpbWVycy4gVHlwaWNhbGx5LCB0aGlzCisgKiBjb21tYW5kIHdvdWxkIGJlIHVzZWQgYWZ0ZXIgYW4gRl9Qb3J0IGxvZ2luIHRvIHNldCB0aGUgcmV0dXJuZWQgRElEIGFkZHJlc3MKKyAqIGFuZCB0aGUgZmFicmljIHRpbWVvdXQgdmFsdWVzLiBUaGlzIGNvbW1hbmQgaXMgbm90IHZhbGlkIGJlZm9yZSBhIGNvbmZpZ3VyZQorICogcG9ydCBjb21tYW5kIGhhcyBjb25maWd1cmVkIHRoZSBIQkEgcG9ydC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgbGluayBvbiBhIEhCQS4KKyAqKi8KIHZvaWQKIGxwZmNfY29uZmlnX2xpbmsoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtMTk5LDEwICsyNzIsOTggQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfaW5pdF9saW5rICBJc3N1ZSBhbiBJTklUIExJTksgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NvbmZpZ19tc2k6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIG1zaS14LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjb25maWd1cmUgTVNJLVggbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBIQkEncyBTTEktMworICogTVNJLVggbXVsdGktbWVzc2FnZSBpbnRlcnJ1cHQgdmVjdG9yIGFzc29jaWF0aW9uIHRvIGludGVycnVwdCBhdHRlbnRpb24KKyAqIGNvbmRpdGlvbnMuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICAwIC0gU3VjY2VzcworICogICAgLUVJTlZBTCAtIEZhaWx1cmUKKyAqKi8KK2ludAorbHBmY19jb25maWdfbXNpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCit7CisJTUFJTEJPWF90ICptYiA9ICZwbWItPm1iOworCXVpbnQzMl90IGF0dGVudGlvbkNvbmRpdGlvbnNbMl07CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAocGhiYS0+Y2ZnX3VzZV9tc2kgIT0gMikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIwNDc1IE5vdCBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIE1TSS1YICIKKwkJCQkiY2ZnX3VzZV9tc2k6IDB4JXhcbiIsIHBoYmEtPmNmZ191c2VfbXNpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBoYmEtPnNsaV9yZXYgPCAzKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjA0NzYgSEJBIG5vdCBzdXBwb3J0aW5nIFNMSS0zIG9yIGxhdGVyICIKKwkJCQkiU0xJIFJldmlzaW9uOiAweCV4XG4iLCBwaGJhLT5zbGlfcmV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2xlYXIgbWFpbGJveCBjb21tYW5kIGZpZWxkcyAqLworCW1lbXNldChwbWIsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKworCS8qCisJICogU0xJLTMsIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IEZlYXJ1cmUuCisJICovCisKKwkvKiBNdWx0aS1tZXNzYWdlIGF0dGVudGlvbiBjb25maWd1cmF0aW9uICovCisJYXR0ZW50aW9uQ29uZGl0aW9uc1swXSA9IChIQV9SMEFUVCB8IEhBX1IxQVRUIHwgSEFfUjJBVFQgfCBIQV9FUkFUVCB8CisJCQkJICBIQV9MQVRUIHwgSEFfTUJBVFQpOworCWF0dGVudGlvbkNvbmRpdGlvbnNbMV0gPSAwOworCisJbWItPnVuLnZhckNmZ01TSS5hdHRlbnRpb25Db25kaXRpb25zWzBdID0gYXR0ZW50aW9uQ29uZGl0aW9uc1swXTsKKwltYi0+dW4udmFyQ2ZnTVNJLmF0dGVudGlvbkNvbmRpdGlvbnNbMV0gPSBhdHRlbnRpb25Db25kaXRpb25zWzFdOworCisJLyoKKwkgKiBTZXQgdXAgbWVzc2FnZSBudW1iZXIgdG8gSEEgYml0IGFzc29jaWF0aW9uCisJICovCisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJLyogUkEwIChGQ1AgUmluZykgKi8KKwltYi0+dW4udmFyQ2ZnTVNJLm1lc3NhZ2VOdW1iZXJCeUhBW0hBX1IwX1BPU10gPSAxOworCS8qIFJBMSAoT3RoZXIgUHJvdG9jb2wgRXh0cmEgUmluZykgKi8KKwltYi0+dW4udmFyQ2ZnTVNJLm1lc3NhZ2VOdW1iZXJCeUhBW0hBX1IxX1BPU10gPSAxOworI2Vsc2UgICAvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCisJLyogUkEwIChGQ1AgUmluZykgKi8KKwltYi0+dW4udmFyQ2ZnTVNJLm1lc3NhZ2VOdW1iZXJCeUhBW0hBX1IwX1BPU14zXSA9IDE7CisJLyogUkExIChPdGhlciBQcm90b2NvbCBFeHRyYSBSaW5nKSAqLworCW1iLT51bi52YXJDZmdNU0kubWVzc2FnZU51bWJlckJ5SEFbSEFfUjFfUE9TXjNdID0gMTsKKyNlbmRpZgorCS8qIE11bHRpLW1lc3NhZ2UgaW50ZXJydXB0IGF1dG9jbGVhciBjb25maWd1cmF0aW9uKi8KKwltYi0+dW4udmFyQ2ZnTVNJLmF1dG9DbGVhckhBWzBdID0gYXR0ZW50aW9uQ29uZGl0aW9uc1swXTsKKwltYi0+dW4udmFyQ2ZnTVNJLmF1dG9DbGVhckhBWzFdID0gYXR0ZW50aW9uQ29uZGl0aW9uc1sxXTsKKworCS8qIEZvciBub3csIEhCQSBhdXRvY2xlYXIgZG9lcyBub3Qgd29yayByZWxpYWJseSwgZGlzYWJsZSBpdCAqLworCW1iLT51bi52YXJDZmdNU0kuYXV0b0NsZWFySEFbMF0gPSAwOworCW1iLT51bi52YXJDZmdNU0kuYXV0b0NsZWFySEFbMV0gPSAwOworCisJLyogU2V0IGNvbW1hbmQgYW5kIG93bmVyIGJpdCAqLworCW1iLT5tYnhDb21tYW5kID0gTUJYX0NPTkZJR19NU0k7CisJbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX2luaXRfbGluazogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgaW5pdGlhbGl6ZSBsaW5rIG9uIGEgSEJBLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQHRvcG9sb2d5OiB0aGUgbGluayB0b3BvbG9neSBmb3IgdGhlIGxpbmsgdG8gYmUgaW5pdGlhbGl6ZWQgdG8uCisgKiBAbGlua3NwZWVkOiB0aGUgbGluayBzcGVlZCBmb3IgdGhlIGxpbmsgdG8gYmUgaW5pdGlhbGl6ZWQgdG8uCisgKgorICogVGhlIGluaXRpYWxpemUgbGluayBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBGaWJyZQorICogQ2hhbm5lbCBsaW5rLiBUaGlzIGNvbW1hbmQgbXVzdCBmb2xsb3cgYSBjb25maWd1cmUgcG9ydCBjb21tYW5kIHRoYXQKKyAqIGVzdGFibGlzaGVzIHRoZSBtb2RlIG9mIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgaW5pdGlhbGl6aW5nIGxpbmsgb24gYSBIQkEKKyAqIHdpdGggdGhlIHNwZWNpZmllZCBsaW5rIHRvcG9sb2d5IGFuZCBzcGVlZC4KKyAqKi8KIHZvaWQKIGxwZmNfaW5pdF9saW5rKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJICAgICAgIExQRkNfTUJPWFFfdCAqIHBtYiwgdWludDMyX3QgdG9wb2xvZ3ksIHVpbnQzMl90IGxpbmtzcGVlZCkKQEAgLTI2OSwxMCArNDMwLDI3IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlYWRfc3BhcmFtICBJc3N1ZSBhIFJFQUQgU1BBUkFNICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWFkX3NwYXJhbTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgcGFyYW1ldGVycy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKgorICogVGhlIHJlYWQgc2VydmljZSBwYXJhbWV0ZXIgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCB0aGUgSEJBIHBvcnQKKyAqIHNlcnZpY2UgcGFyYW1ldGVycy4gVGhlIHNlcnZpY2UgcGFyYW1ldGVycyBhcmUgcmVhZCBpbnRvIHRoZSBidWZmZXIKKyAqIHNwZWNpZmllZCBkaXJlY3RseSBieSBhIEJERSBpbiB0aGUgbWFpbGJveCBjb21tYW5kLiBUaGVzZSBzZXJ2aWNlCisgKiBwYXJhbWV0ZXJzIG1heSB0aGVuIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHBheWxvYWQgb2YgYW4gTl9Qb3J0L0ZfUE9ydAorICogbG9naW4gcmVxdWVzdCBhbmQgcmVwbHkgKExPR0kvQUNDKS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgcG9ydCBzZXJ2aWNlCisgKiBwYXJhbWV0ZXJzLiBUaGUgRE1BIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGFkZHJlc3NlcworICogYXJlIHBvcHVsYXRlZCBpbnRvIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHRoZSBIQkEgdG8gRE1BIHRoZSBzZXJ2aWNlCisgKiBwYXJhbWV0ZXJzIGludG8uCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICAwIC0gU3VjY2VzcworICogICAgMSAtIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqKi8KIGludAogbHBmY19yZWFkX3NwYXJhbShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iLCBpbnQgdnBpKQogewpAQCAtMzEyLDEwICs0OTAsMjEgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY191bnJlZ19kaWQgIElzc3VlIGEgVU5SRUdfRElEICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfdW5yZWdfZGlkOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIERJRC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqIEBkaWQ6IHJlbW90ZSBwb3J0IGlkZW50aWZpZXIuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSB1bnJlZ2lzdGVyIERJRCBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byB1bnJlZ2lzdGVyIGFuIE5fUG9ydC9GX1BvcnQKKyAqIGxvZ2luIGZvciBhbiB1bmtub3duIFJQSSBieSBzcGVjaWZ5aW5nIHRoZSBESUQgb2YgYSByZW1vdGUgcG9ydC4gVGhpcworICogY29tbWFuZCBmcmVlcyBhbiBSUEkgY29udGV4dCBpbiB0aGUgSEJBIHBvcnQuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKKyAqIHBlcmZvcm1pbmcgYW4gaW1wbGljaXQgTl9Qb3J0L0ZfUG9ydCBsb2dvdXQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgYSByZW1vdGUKKyAqIE5fUG9ydC9GX1BvcnQgKERJRCkgbG9naW4uCisgKiovCiB2b2lkCiBscGZjX3VucmVnX2RpZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MTZfdCB2cGksIHVpbnQzMl90IGRpZCwKIAkgICAgICAgTFBGQ19NQk9YUV90ICogcG1iKQpAQCAtMzMzLDEwICs1MjIsMTkgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVhZF9udiAgSXNzdWUgYSBSRUFEIENPTkZJRyAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlYWRfY29uZmlnOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBjb25maWd1cmF0aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSByZWFkIGNvbmZpZ3VyYXRpb24gbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCB0aGUgSEJBIHBvcnQKKyAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVGhpcyBtYWlsYm94IGNvbW1hbmQgcHJvdmlkZXMgYSBtZXRob2QgZm9yCisgKiBzZWVpbmcgYW55IHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkIHZpYSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24KKyAqIG1haWxib3ggY29tbWFuZHMuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgb3V0IEhCQSBjb25maWd1cmF0aW9uCisgKiBwYXJhbWV0ZXJzLgorICoqLwogdm9pZAogbHBmY19yZWFkX2NvbmZpZyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC0zNTAsMTAgKzU0OCwxOCBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWFkX2xua19zdGF0ICBJc3N1ZSBhIFJFQUQgTElOSyBTVEFUVVMgKi8KLS8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVhZF9sbmtfc3RhdDogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgbGluayBzdGF0cy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgcmVhZCBsaW5rIHN0YXR1cyBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIHRoZSBsaW5rIHN0YXR1cyBmcm9tCisgKiB0aGUgSEJBLiBMaW5rIHN0YXR1cyBpbmNsdWRlcyBhbGwgbGluay1yZWxhdGVkIGVycm9yIGNvdW50ZXJzLiBUaGVzZQorICogY291bnRlcnMgYXJlIG1haW50YWluZWQgYnkgdGhlIEhCQSBhbmQgb3JpZ2luYXRlZCBpbiB0aGUgbGluayBoYXJkd2FyZQorICogdW5pdC4gTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSBjb3VudGVycyB3cmFwLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIG91dCBIQkEgbGluayBzdGF0dXMuCisgKiovCiB2b2lkCiBscGZjX3JlYWRfbG5rX3N0YXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtMzY3LDEwICs1NzMsMzAgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlZ19sb2dpbiAgSXNzdWUgYSBSRUdfTE9HSU4gICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWdfbG9naW46IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlZ2lzdGVyaW5nIHJlbW90ZSBsb2dpbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqIEBkaWQ6IHJlbW90ZSBwb3J0IGlkZW50aWZpZXIuCisgKiBAcGFyYW06IHBvaW50ZXIgdG8gbWVtb3J5IGhvbGRpbmcgdGhlIHNlcnZlciBwYXJhbWV0ZXJzLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEBmbGFnOiBhY3Rpb24gZmxhZyB0byBiZSBwYXNzZWQgYmFjayBmb3IgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uLgorICoKKyAqIFRoZSByZWdpc3RyYXRpb24gbG9naW4gbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYW4gTl9Qb3J0IG9yCisgKiBGX1BvcnQgbG9naW4uIFRoaXMgcmVnaXN0cmF0aW9uIGFsbG93cyB0aGUgSEJBIHRvIGNhY2hlIHRoZSByZW1vdGUgTl9Qb3J0CisgKiBzZXJ2aWNlIHBhcmFtZXRlcnMgaW50ZXJuYWxseSBhbmQgdGhlcmVieSBtYWtlIHRoZSBhcHByb3ByaWF0ZSBGQy0yCisgKiBkZWNpc2lvbnMuIFRoZSByZW1vdGUgcG9ydCBzZXJ2aWNlIHBhcmFtZXRlcnMgYXJlIGhhbmRlZCBvZmYgYnkgdGhlIGRyaXZlcgorICogdG8gdGhlIEhCQSB1c2luZyBhIGRlc2NyaXB0b3IgZW50cnkgdGhhdCBkaXJlY3RseSBpZGVudGlmaWVzIGEgYnVmZmVyIGluCisgKiBob3N0IG1lbW9yeS4gSW4gZXhjaGFuZ2UsIHRoZSBIQkEgcmV0dXJucyBhbiBSUEkgaWRlbnRpZmllci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVnaXN0ZXJpbmcgcmVtb3RlIHBvcnQgbG9naW4uCisgKiBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIERNQSBidWZmZXIgZm9yIHBhc3NpbmcgdGhlIHNlcnZpY2UgcGFyYW1ldGVycyB0byB0aGUKKyAqIEhCQSB3aXRoIHRoZSBtYWlsYm94IGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICAwIC0gU3VjY2VzcworICogICAgMSAtIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqKi8KIGludAogbHBmY19yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGksIHVpbnQzMl90IGRpZCwKIAkgICAgICAgdWludDhfdCAqcGFyYW0sIExQRkNfTUJPWFFfdCAqcG1iLCB1aW50MzJfdCBmbGFnKQpAQCAtNDE4LDEwICs2NDQsMjAgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3VucmVnX2xvZ2luICBJc3N1ZSBhIFVOUkVHX0xPR0lOICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY191bnJlZ19sb2dpbjogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyByZW1vdGUgbG9naW4uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKiBAcnBpOiByZW1vdGUgcG9ydCBpZGVudGlmaWVyCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSB1bnJlZ2lzdHJhdGlvbiBsb2dpbiBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byB1bnJlZ2lzdGVyIGFuIE5fUG9ydAorICogb3IgRl9Qb3J0IGxvZ2luLiBUaGlzIGNvbW1hbmQgZnJlZXMgYW4gUlBJIGNvbnRleHQgaW4gdGhlIEhCQS4gSXQgaGFzIHRoZQorICogZWZmZWN0IG9mIHBlcmZvcm1pbmcgYW4gaW1wbGljaXQgTl9Qb3J0L0ZfUG9ydCBsb2dvdXQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgcmVtb3RlIHBvcnQKKyAqIGxvZ2luLgorICoqLwogdm9pZAogbHBmY191bnJlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSwgdWludDMyX3QgcnBpLAogCQkgTFBGQ19NQk9YUV90ICogcG1iKQpAQCAtNDQwLDEwICs2NzYsMjEgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlZ192cGkgICBJc3N1ZSBhIFJFR19WUEkgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWdfdnBpOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWdpc3RlcmluZyB2cG9ydCBpZGVudGlmaWVyLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICogQHNpZDogRmlicmUgQ2hhbm5lbCBTX0lEIChOX1BvcnRfSUQgYXNzaWduZWQgdG8gYSB2aXJ0dWFsIE5fUG9ydCkuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSByZWdpc3RyYXRpb24gdnBvcnQgaWRlbnRpZmllciBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBhY3RpdmF0ZSBhCisgKiB2aXJ0dWFsIE5fUG9ydCBhZnRlciBpdCBoYXMgYWNxdWlyZWQgYW4gTl9Qb3J0X0lELiBUaGUgSEJBIHZhbGlkYXRlcyB0aGUKKyAqIE5fUG9ydF9JRCBhZ2FpbnN0IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2VsZWN0ZWQgdmlydHVhbCBOX1BvcnQgY29udGV4dAorICogYmxvY2sgYW5kIG1hcmtzIGl0IGFjdGl2ZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBvZiBJT0NCIGNvbW1hbmRzIGFuZAorICogcmVjZWl2ZWQgdW5zb2xpY2l0ZWQgZXhjaGFuZ2VzLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWdpc3RlcmluZyBhIHZpcnR1YWwgTl9Qb3J0LgorICoqLwogdm9pZAogbHBmY19yZWdfdnBpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdnBpLCB1aW50MzJfdCBzaWQsCiAJICAgICBMUEZDX01CT1hRX3QgKnBtYikKQEAgLTQ2MSwxMCArNzA4LDIyIEBACiAKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfdW5yZWdfdnBpICAgSXNzdWUgYSBVTlJFR19WTlBJICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3VucmVnX3ZwaTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyB2cG9ydCBpZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHVucmVnaXN0cmF0aW9uIHZwb3J0IGlkZW50aWZpZXIgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gaW5hY3RpdmF0ZQorICogYSB2aXJ0dWFsIE5fUG9ydC4gVGhlIGRyaXZlciBtdXN0IGhhdmUgbG9nZ2VkIG91dCBhbmQgdW5yZWdpc3RlcmVkIGFsbAorICogcmVtb3RlIE5fUG9ydHMgdG8gYWJvcnQgYW55IGFjdGl2aXR5IG9uIHRoZSB2aXJ0dWFsIE5fUG9ydC4gVGhlIEhCQSB3aWxsCisgKiB1bnJlZ2lzdGVycyBhbnkgZGVmYXVsdCBSUElzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHZwaSwgYWJvcnRpbmcKKyAqIGFueSBhY3RpdmUgZXhjaGFuZ2VzLiBUaGUgSEJBIHdpbGwgcG9zdCB0aGUgbWFpbGJveCByZXNwb25zZSBhZnRlciBtYWtpbmcKKyAqIHRoZSB2aXJ0dWFsIE5fUG9ydCBpbmFjdGl2ZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyBhIHZpcnR1YWwKKyAqIE5fUG9ydC4KKyAqKi8KIHZvaWQKIGxwZmNfdW5yZWdfdnBpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdnBpLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTQ3OSwxMiArNzM4LDE5IEBACiAKIH0KIAorLyoqCisgKiBscGZjX2NvbmZpZ19wY2Jfc2V0dXA6IFNldCB1cCBJT0NCIHJpbmdzIGluIHRoZSBQb3J0IENvbnRyb2wgQmxvY2sgKFBDQikKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZXRzIHVwIGFuZCBpbml0aWFsaXplcyB0aGUgSU9DQiByaW5ncyBpbiB0aGUgUG9ydCBDb250cm9sCisgKiBCbG9jayAoUENCKS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NvbmZpZ19wY2Jfc2V0dXAoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZzsKLQlQQ0JfdCAqcGNicCA9ICZwaGJhLT5zbGltMnAtPnBjYjsKKwlQQ0JfdCAqcGNicCA9IHBoYmEtPnBjYjsKIAlkbWFfYWRkcl90IHBkbWFfYWRkcjsKIAl1aW50MzJfdCBvZmZzZXQ7CiAJdWludDMyX3QgaW9jYkNudCA9IDA7CkBAIC01MTMsMjkgKzc3OSw0MyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJLyogQ29tbWFuZCByaW5nIHNldHVwIGZvciByaW5nICovCi0JCXByaW5nLT5jbWRyaW5nYWRkciA9ICh2b2lkICopICZwaGJhLT5zbGltMnAtPklPQ0JzW2lvY2JDbnRdOworCQlwcmluZy0+Y21kcmluZ2FkZHIgPSAodm9pZCAqKSZwaGJhLT5JT0NCc1tpb2NiQ250XTsKIAkJcGNicC0+cmRzY1tpXS5jbWRFbnRyaWVzID0gcHJpbmctPm51bUNpb2NiOwogCi0JCW9mZnNldCA9ICh1aW50OF90ICopICZwaGJhLT5zbGltMnAtPklPQ0JzW2lvY2JDbnRdIC0KLQkJCSAodWludDhfdCAqKSBwaGJhLT5zbGltMnA7Ci0JCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycF9tYXBwaW5nICsgb2Zmc2V0OworCQlvZmZzZXQgPSAodWludDhfdCAqKSAmcGhiYS0+SU9DQnNbaW9jYkNudF0gLQorCQkJICh1aW50OF90ICopIHBoYmEtPnNsaW0ycC52aXJ0OworCQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnAucGh5cyArIG9mZnNldDsKIAkJcGNicC0+cmRzY1tpXS5jbWRBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOwogCQlwY2JwLT5yZHNjW2ldLmNtZEFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwogCQlpb2NiQ250ICs9IHByaW5nLT5udW1DaW9jYjsKIAogCQkvKiBSZXNwb25zZSByaW5nIHNldHVwIGZvciByaW5nICovCi0JCXByaW5nLT5yc3ByaW5nYWRkciA9ICh2b2lkICopICZwaGJhLT5zbGltMnAtPklPQ0JzW2lvY2JDbnRdOworCQlwcmluZy0+cnNwcmluZ2FkZHIgPSAodm9pZCAqKSAmcGhiYS0+SU9DQnNbaW9jYkNudF07CiAKIAkJcGNicC0+cmRzY1tpXS5yc3BFbnRyaWVzID0gcHJpbmctPm51bVJpb2NiOwotCQlvZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5zbGltMnAtPklPQ0JzW2lvY2JDbnRdIC0KLQkJCSAodWludDhfdCAqKXBoYmEtPnNsaW0ycDsKLQkJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwX21hcHBpbmcgKyBvZmZzZXQ7CisJCW9mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPklPQ0JzW2lvY2JDbnRdIC0KKwkJCSAodWludDhfdCAqKXBoYmEtPnNsaW0ycC52aXJ0OworCQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnAucGh5cyArIG9mZnNldDsKIAkJcGNicC0+cmRzY1tpXS5yc3BBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOwogCQlwY2JwLT5yZHNjW2ldLnJzcEFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwogCQlpb2NiQ250ICs9IHByaW5nLT5udW1SaW9jYjsKIAl9CiB9CiAKKy8qKgorICogbHBmY19yZWFkX3JldjogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgcmV2aXNpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHJlYWQgcmV2aXNpb24gbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCB0aGUgcmV2aXNpb24gbGV2ZWxzIG9mCisgKiB0aGUgSEJBIGNvbXBvbmVudHMuIFRoZXNlIGNvbXBvbmVudHMgaW5jbHVkZSBoYXJkd2FyZSB1bml0cywgcmVzaWRlbnQKKyAqIGZpcm13YXJlLCBhbmQgYXZhaWxhYmxlIGZpcm13YXJlLiBIQkFzIHRoYXQgc3VwcG9ydHMgU0xJLTMgbW9kZSBvZgorICogb3BlcmF0aW9uIHByb3ZpZGUgZGlmZmVyZW50IHJlc3BvbnNlIGluZm9ybWF0aW9uIGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbgorICogcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZXIuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIHJldmlzaW9uCisgKiBpbmZvcm1hdGlvbi4KKyAqKi8KIHZvaWQKIGxwZmNfcmVhZF9yZXYoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtNTQ4LDYgKzgyOCwxNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2J1aWxkX2hicV9wcm9maWxlMjogU2V0IHVwIHRoZSBIQlEgU2VsZWN0aW9uIFByb2ZpbGUgMi4KKyAqIEBoYnFtYjogcG9pbnRlciB0byB0aGUgSEJRIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUgaW4gbWFpbGJveCBjb21tYW5kLgorICogQGhicV9kZXNjOiBwb2ludGVyIHRvIHRoZSBIQlEgc2VsZWN0aW9uIHByb2ZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGUgSG9zdCBCdWZmZXIgUXVldWUgKEhCUSkgU2VsZWN0aW9uIFByb2ZpbGUgMiBzcGVjaWZpZXMgdGhhdCB0aGUgSEJBCisgKiB0ZXN0cyB0aGUgaW5jb21pbmcgZnJhbWVzJyBSX0NUTC9UWVBFIGZpZWxkcyB3aXRoIHdvcmtzIDEwOjE1IGFuZCBwZXJmb3JtcworICogdGhlIFNlcXVlbmNlIExlbmd0aCBUZXN0IHVzaW5nIHRoZSBmaWVsZHMgaW4gdGhlIFNlbGVjdGlvbiBQcm9maWxlIDIKKyAqIGV4dGVuc2lvbiBpbiB3b3JkcyAyMDozMS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2J1aWxkX2hicV9wcm9maWxlMihzdHJ1Y3QgY29uZmlnX2hicV92YXIgKmhicW1iLAogCQkJc3RydWN0IGxwZmNfaGJxX2luaXQgICpoYnFfZGVzYykKQEAgLTU1Nyw2ICs4NDcsMTYgQEAKIAloYnFtYi0+cHJvZmlsZXMucHJvZmlsZTIuc2VxbGVub2ZmICA9IGhicV9kZXNjLT5zZXFsZW5vZmY7CiB9CiAKKy8qKgorICogbHBmY19idWlsZF9oYnFfcHJvZmlsZTM6IFNldCB1cCB0aGUgSEJRIFNlbGVjdGlvbiBQcm9maWxlIDMuCisgKiBAaGJxbWI6IHBvaW50ZXIgdG8gdGhlIEhCUSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlIGluIG1haWxib3ggY29tbWFuZC4KKyAqIEBoYnFfZGVzYzogcG9pbnRlciB0byB0aGUgSEJRIHNlbGVjdGlvbiBwcm9maWxlIGRlc2NyaXB0b3IuCisgKgorICogVGhlIEhvc3QgQnVmZmVyIFF1ZXVlIChIQlEpIFNlbGVjdGlvbiBQcm9maWxlIDMgc3BlY2lmaWVzIHRoYXQgdGhlIEhCQQorICogdGVzdHMgdGhlIGluY29taW5nIGZyYW1lJ3MgUl9DVEwvVFlQRSBmaWVsZHMgd2l0aCB3b3JkcyAxMDoxNSBhbmQgcGVyZm9ybXMKKyAqIHRoZSBTZXF1ZW5jZSBMZW5ndGggVGVzdCBhbmQgQnl0ZSBGaWVsZCBUZXN0IHVzaW5nIHRoZSBmaWVsZHMgaW4gdGhlCisgKiBTZWxlY3Rpb24gUHJvZmlsZSAzIGV4dGVuc2lvbiBpbiB3b3JkcyAyMDozMS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2J1aWxkX2hicV9wcm9maWxlMyhzdHJ1Y3QgY29uZmlnX2hicV92YXIgKmhicW1iLAogCQkJc3RydWN0IGxwZmNfaGJxX2luaXQgICpoYnFfZGVzYykKQEAgLTU2OSw2ICs4NjksMTcgQEAKIAkgICAgICAgc2l6ZW9mKGhicW1iLT5wcm9maWxlcy5wcm9maWxlMy5jbWRtYXRjaCkpOwogfQogCisvKioKKyAqIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGU1OiBTZXQgdXAgdGhlIEhCUSBTZWxlY3Rpb24gUHJvZmlsZSA1LgorICogQGhicW1iOiBwb2ludGVyIHRvIHRoZSBIQlEgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSBpbiBtYWlsYm94IGNvbW1hbmQuCisgKiBAaGJxX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEhCUSBzZWxlY3Rpb24gcHJvZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIFRoZSBIb3N0IEJ1ZmZlciBRdWV1ZSAoSEJRKSBTZWxlY3Rpb24gUHJvZmlsZSA1IHNwZWNpZmllcyBhIGhlYWRlciBIQlEuIFRoZQorICogSEJBIHRlc3RzIHRoZSBpbml0aWFsIGZyYW1lIG9mIGFuIGluY29taW5nIHNlcXVlbmNlIHVzaW5nIHRoZSBmcmFtZSdzCisgKiBSX0NUTC9UWVBFIGZpZWxkcyB3aXRoIHdvcmRzIDEwOjE1IGFuZCBwZXJmb3JtcyB0aGUgU2VxdWVuY2UgTGVuZ3RoIFRlc3QKKyAqIGFuZCBCeXRlIEZpZWxkIFRlc3QgdXNpbmcgdGhlIGZpZWxkcyBpbiB0aGUgU2VsZWN0aW9uIFByb2ZpbGUgNSBleHRlbnNpb24KKyAqIHdvcmRzIDIwOjMxLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGU1KHN0cnVjdCBjb25maWdfaGJxX3ZhciAqaGJxbWIsCiAJCQlzdHJ1Y3QgbHBmY19oYnFfaW5pdCAgKmhicV9kZXNjKQpAQCAtNTgxLDYgKzg5MiwyMCBAQAogCSAgICAgICBzaXplb2YoaGJxbWItPnByb2ZpbGVzLnByb2ZpbGU1LmNtZG1hdGNoKSk7CiB9CiAKKy8qKgorICogbHBmY19jb25maWdfaGJxOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBhbiBIQlEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBpZDogSEJRIGlkZW50aWZpZXIuCisgKiBAaGJxX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEhCQSBkZXNjcmlwdG9yIGRhdGEgc3RydWN0dXJlLgorICogQGhicV9lbnRyeV9pbmRleDogaW5kZXggb2YgdGhlIEhCUSBlbnRyeSBkYXRhIHN0cnVjdHVyZXMuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjb25maWd1cmUgSEJRIChIb3N0IEJ1ZmZlciBRdWV1ZSkgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlCisgKiBhbiBIQlEuIFRoZSBjb25maWd1cmF0aW9uIGJpbmRzIGV2ZW50cyB0aGF0IHJlcXVpcmUgYnVmZmVycyB0byBhIHBhcnRpY3VsYXIKKyAqIHJpbmcgYW5kIEhCUSBiYXNlZCBvbiBhIHNlbGVjdGlvbiBwcm9maWxlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBhbiBIQlEuCisgKiovCiB2b2lkCiBscGZjX2NvbmZpZ19oYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBpZCwKIAkJIHN0cnVjdCBscGZjX2hicV9pbml0ICpoYnFfZGVzYywKQEAgLTY0MSw4ICs5NjYsMjMgQEAKIAlyZXR1cm47CiB9CiAKLQotCisvKioKKyAqIGxwZmNfY29uZmlnX3Jpbmc6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIGFuIElPQ0IgcmluZy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHJpbmc6CisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjb25maWd1cmUgcmluZyBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBjb25maWd1cmUgYW4gSU9DQiByaW5nLiBUaGlzCisgKiBjb25maWd1cmF0aW9uIGJpbmRzIGZyb20gb25lIHRvIHNpeCBvZiBIQkEgUkNfQ1RML1RZUEUgbWFzayBlbnRyaWVzIHRvIHRoZQorICogcmluZy4gVGhpcyBpcyB1c2VkIHRvIG1hcCBpbmNvbWluZyBzZXF1ZW5jZXMgdG8gYSBwYXJ0aWN1bGFyIHJpbmcgd2hvc2UKKyAqIFJDX0NUTC9UWVBFIG1hc2sgZW50cnkgbWF0Y2hlcyB0aGF0IG9mIHRoZSBzZXF1ZW5jZS4gVGhlIGRyaXZlciBzaG91bGQgbm90CisgKiBhdHRlbXB0IHRvIGNvbmZpZ3VyZSBhIHJpbmcgd2hvc2UgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyCisgKiBzcGVjaWZpZWQgaW4gdGhlIFBvcnQgQ29udHJvbCBCbG9jayAoUENCKS4gSXQgaXMgYW4gZXJyb3IgdG8gaXNzdWUgdGhlCisgKiBjb25maWd1cmUgcmluZyBjb21tYW5kIG1vcmUgdGhhbiBvbmNlIHdpdGggdGhlIHNhbWUgcmluZyBudW1iZXIuIFRoZSBIQkEKKyAqIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGRyaXZlciBhdHRlbXB0cyB0aGlzLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBJT0NCIHJpbmcuCisgKiovCiB2b2lkCiBscGZjX2NvbmZpZ19yaW5nKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIGludCByaW5nLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC02ODQsNiArMTAyNCwyMCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2NvbmZpZ19wb3J0OiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBjb25maWd1cmUgcG9ydCBtYWlsYm94IGNvbW1hbmQgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgUG9ydCBDb250cm9sCisgKiBCbG9jayAoUENCKSBpbiB0aGUgZHJpdmVyIG1lbW9yeS4gQWZ0ZXIgdGhpcyBjb21tYW5kIGlzIGlzc3VlZCwgdGhlCisgKiBkcml2ZXIgbXVzdCBub3QgYWNjZXNzIHRoZSBtYWlsYm94IGluIHRoZSBIQkEgd2l0aG91dCBmaXJzdCByZXNldHRpbmcKKyAqIHRoZSBIQkEuIFRoZSBIQkEgbWF5IGNvcHkgdGhlIFBDQiBpbmZvcm1hdGlvbiB0byBpbnRlcm5hbCBzdG9yYWdlIGZvcgorICogc3Vic2VxdWVudCB1c2U7IHRoZSBkcml2ZXIgY2FuIG5vdCBjaGFuZ2UgdGhlIFBDQiBpbmZvcm1hdGlvbiB1bmxlc3MgaXQKKyAqIHJlc2V0cyB0aGUgSEJBLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBwb3J0LgorICoqLwogdm9pZAogbHBmY19jb25maWdfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtNzAyLDggKzEwNTYsOCBAQAogCiAJbWItPnVuLnZhckNmZ1BvcnQucGNiTGVuID0gc2l6ZW9mKFBDQl90KTsKIAotCW9mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPnNsaW0ycC0+cGNiIC0gKHVpbnQ4X3QgKilwaGJhLT5zbGltMnA7Ci0JcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwX21hcHBpbmcgKyBvZmZzZXQ7CisJb2Zmc2V0ID0gKHVpbnQ4X3QgKilwaGJhLT5wY2IgLSAodWludDhfdCAqKXBoYmEtPnNsaW0ycC52aXJ0OworCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycC5waHlzICsgb2Zmc2V0OwogCW1iLT51bi52YXJDZmdQb3J0LnBjYkxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CiAJbWItPnVuLnZhckNmZ1BvcnQucGNiSGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOwogCkBAIC03MTEsMTIgKzEwNjUsMTMgQEAKIAogCWlmIChwaGJhLT5zbGlfcmV2ID09IDMgJiYgcGhiYS0+dnBkLnNsaTNGZWF0LmNlcmJtKSB7CiAJCW1iLT51bi52YXJDZmdQb3J0LmNlcmJtID0gMTsgLyogUmVxdWVzdCBIQlFzICovCisJCW1iLT51bi52YXJDZmdQb3J0LmNjcnAgPSAxOyAvKiBDb21tYW5kIFJpbmcgUG9sbGluZyAqLworCQltYi0+dW4udmFyQ2ZnUG9ydC5jaW5iID0gMTsgLyogSW50ZXJydXB0IE5vdGlmaWNhdGlvbiBCbG9jayAqLwogCQltYi0+dW4udmFyQ2ZnUG9ydC5tYXhfaGJxID0gbHBmY19zbGlfaGJxX2NvdW50KCk7CiAJCWlmIChwaGJhLT5tYXhfdnBpICYmIHBoYmEtPmNmZ19lbmFibGVfbnBpdiAmJgogCQkgICAgcGhiYS0+dnBkLnNsaTNGZWF0LmNtdikgewogCQkJbWItPnVuLnZhckNmZ1BvcnQubWF4X3ZwaSA9IHBoYmEtPm1heF92cGk7CiAJCQltYi0+dW4udmFyQ2ZnUG9ydC5jbXYgPSAxOwotCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19OUElWX0VOQUJMRUQ7CiAJCX0gZWxzZQogCQkJbWItPnVuLnZhckNmZ1BvcnQubWF4X3ZwaSA9IHBoYmEtPm1heF92cGkgPSAwOwogCX0gZWxzZQpAQCAtNzI0LDE2ICsxMDc5LDE1IEBACiAJbWItPnVuLnZhckNmZ1BvcnQuc2xpX21vZGUgPSBwaGJhLT5zbGlfcmV2OwogCiAJLyogTm93IHNldHVwIHBjYiAqLwotCXBoYmEtPnNsaW0ycC0+cGNiLnR5cGUgPSBUWVBFX05BVElWRV9TTEkyOwotCXBoYmEtPnNsaW0ycC0+cGNiLmZlYXR1cmUgPSBGRUFUVVJFX0lOSVRJQUxfU0xJMjsKKwlwaGJhLT5wY2ItPnR5cGUgPSBUWVBFX05BVElWRV9TTEkyOworCXBoYmEtPnBjYi0+ZmVhdHVyZSA9IEZFQVRVUkVfSU5JVElBTF9TTEkyOwogCiAJLyogU2V0dXAgTWFpbGJveCBwb2ludGVycyAqLwotCXBoYmEtPnNsaW0ycC0+cGNiLm1haWxCb3hTaXplID0gb2Zmc2V0b2YoTUFJTEJPWF90LCB1cykgKwotCQlzaXplb2Yoc3RydWN0IHNsaTJfZGVzYyk7Ci0Jb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+c2xpbTJwLT5tYnggLSAodWludDhfdCAqKXBoYmEtPnNsaW0ycDsKLQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnBfbWFwcGluZyArIG9mZnNldDsKLQlwaGJhLT5zbGltMnAtPnBjYi5tYkFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7Ci0JcGhiYS0+c2xpbTJwLT5wY2IubWJBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKKwlwaGJhLT5wY2ItPm1haWxCb3hTaXplID0gc2l6ZW9mKE1BSUxCT1hfdCk7CisJb2Zmc2V0ID0gKHVpbnQ4X3QgKilwaGJhLT5tYm94IC0gKHVpbnQ4X3QgKilwaGJhLT5zbGltMnAudmlydDsKKwlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnAucGh5cyArIG9mZnNldDsKKwlwaGJhLT5wY2ItPm1iQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKKwlwaGJhLT5wY2ItPm1iQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CiAKIAkvKgogCSAqIFNldHVwIEhvc3QgR3JvdXAgcmluZyBwb2ludGVyLgpAQCAtNzk0LDEzICsxMTQ4LDEzIEBACiAJfQogCiAJLyogbWFzayBvZmYgQkFSMCdzIGZsYWcgYml0cyAwIC0gMyAqLwotCXBoYmEtPnNsaW0ycC0+cGNiLmhncEFkZHJMb3cgPSAoYmFyX2xvdyAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spICsKLQkJKHZvaWQgX19pb21lbSAqKSBwaGJhLT5ob3N0X2dwIC0KKwlwaGJhLT5wY2ItPmhncEFkZHJMb3cgPSAoYmFyX2xvdyAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spICsKKwkJKHZvaWQgX19pb21lbSAqKXBoYmEtPmhvc3RfZ3AgLQogCQkodm9pZCBfX2lvbWVtICopcGhiYS0+TUJzbGltYWRkcjsKIAlpZiAoYmFyX2xvdyAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQpCi0JCXBoYmEtPnNsaW0ycC0+cGNiLmhncEFkZHJIaWdoID0gYmFyX2hpZ2g7CisJCXBoYmEtPnBjYi0+aGdwQWRkckhpZ2ggPSBiYXJfaGlnaDsKIAllbHNlCi0JCXBoYmEtPnNsaW0ycC0+cGNiLmhncEFkZHJIaWdoID0gMDsKKwkJcGhiYS0+cGNiLT5oZ3BBZGRySGlnaCA9IDA7CiAJLyogd3JpdGUgSEdQIGRhdGEgdG8gU0xJTSBhdCB0aGUgcmVxdWlyZWQgbG9uZ3dvcmQgb2Zmc2V0ICovCiAJbWVtc2V0KCZoZ3AsIDAsIHNpemVvZihzdHJ1Y3QgbHBmY19oZ3ApKTsKIApAQCAtODEwLDE3ICsxMTY0LDE5IEBACiAJfQogCiAJLyogU2V0dXAgUG9ydCBHcm91cCByaW5nIHBvaW50ZXIgKi8KLQlpZiAocGhiYS0+c2xpX3JldiA9PSAzKQotCQlwZ3Bfb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnQgLQotCQkJKHVpbnQ4X3QgKilwaGJhLT5zbGltMnA7Ci0JZWxzZQotCQlwZ3Bfb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydCAtCi0JCQkodWludDhfdCAqKXBoYmEtPnNsaW0ycDsKLQotCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycF9tYXBwaW5nICsgcGdwX29mZnNldDsKLQlwaGJhLT5zbGltMnAtPnBjYi5wZ3BBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOwotCXBoYmEtPnNsaW0ycC0+cGNiLnBncEFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwotCXBoYmEtPmhicV9nZXQgPSAmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLmhicV9nZXRbMF07CisJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19JTkJfRU5BQkxFRCkgeworCQlwZ3Bfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLAorCQkJCSAgICAgIG1ieC51cy5zM19pbmJfcGdwLnBvcnQpOworCQlwaGJhLT5oYnFfZ2V0ID0gcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5oYnFfZ2V0OworCX0gZWxzZSBpZiAocGhiYS0+c2xpX3JldiA9PSAzKSB7CisJCXBncF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sCisJCQkJICAgICAgbWJ4LnVzLnMzX3BncC5wb3J0KTsKKwkJcGhiYS0+aGJxX2dldCA9IHBoYmEtPm1ib3gtPnVzLnMzX3BncC5oYnFfZ2V0OworCX0gZWxzZQorCQlwZ3Bfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLCBtYngudXMuczIucG9ydCk7CisJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwLnBoeXMgKyBwZ3Bfb2Zmc2V0OworCXBoYmEtPnBjYi0+cGdwQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKKwlwaGJhLT5wY2ItPnBncEFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwogCiAJLyogVXNlIGNhbGxiYWNrIHJvdXRpbmUgdG8gc2V0cCByaW5ncyBpbiB0aGUgcGNiICovCiAJbHBmY19jb25maWdfcGNiX3NldHVwKHBoYmEpOwpAQCAtODM1LDEwICsxMTkxLDI0IEBACiAJfQogCiAJLyogU3dhcCBQQ0IgaWYgbmVlZGVkICovCi0JbHBmY19zbGlfcGNpbWVtX2Jjb3B5KCZwaGJhLT5zbGltMnAtPnBjYiwgJnBoYmEtPnNsaW0ycC0+cGNiLAotCQkJICAgICAgc2l6ZW9mKFBDQl90KSk7CisJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHBoYmEtPnBjYiwgcGhiYS0+cGNiLCBzaXplb2YoUENCX3QpKTsKIH0KIAorLyoqCisgKiBscGZjX2tpbGxfYm9hcmQ6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGtpbGxpbmcgYm9hcmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGtpbGwgYm9hcmQgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gdGVsbCBmaXJtd2FyZSB0byBwZXJmb3JtIGEKKyAqIGdyYWNlZnVsIHNodXRkb3duIG9mIGEgY2hhbm5lbCBvbiBhIHNwZWNpZmllZCBib2FyZCB0byBwcmVwYXJlIGZvciByZXNldC4KKyAqIFdoZW4gdGhlIGtpbGwgYm9hcmQgbWFpbGJveCBjb21tYW5kIGlzIHJlY2VpdmVkLCB0aGUgRVIzIGJpdCBpcyBzZXQgdG8gMQorICogaW4gdGhlIEhvc3QgU3RhdHVzIHJlZ2lzdGVyIGFuZCB0aGUgRVIgQXR0ZW50aW9uIGJpdCBpcyBzZXQgdG8gMSBpbiB0aGUKKyAqIEhvc3QgQXR0ZW50aW9uIHJlZ2lzdGVyIG9mIHRoZSBIQkEgZnVuY3Rpb24gdGhhdCByZWNlaXZlZCB0aGUga2lsbCBib2FyZAorICogY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3Iga2lsbGluZyB0aGUgYm9hcmQgaW4KKyAqIHByZXBhcmF0aW9uIGZvciBhIGdyYWNlZnVsIHNodXRkb3duLgorICoqLwogdm9pZAogbHBmY19raWxsX2JvYXJkKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTg1MCw2ICsxMjIwLDE2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfbWJveF9wdXQ6IFB1dCBhIG1haWxib3ggY21kIGludG8gdGhlIHRhaWwgb2YgZHJpdmVyJ3MgbWFpbGJveCBxdWV1ZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1icTogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBEcml2ZXIgbWFpbnRhaW5zIGEgaW50ZXJuYWwgbWFpbGJveCBjb21tYW5kIHF1ZXVlIGltcGxlbWVudGVkIGFzIGEgbGlua2VkCisgKiBsaXN0LiBXaGVuIGEgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCwgaXQgc2hhbGwgYmUgcHV0IGludG8gdGhlIG1haWxib3gKKyAqIGNvbW1hbmQgcXVldWUgc3VjaCB0aGF0IHRoZXkgc2hhbGwgYmUgcHJvY2Vzc2VkIG9yZGVybHkgYXMgSEJBIGNhbiBwcm9jZXNzCisgKiBvbmUgbWFpbGJveCBjb21tYW5kIGF0IGEgdGltZS4KKyAqKi8KIHZvaWQKIGxwZmNfbWJveF9wdXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogbWJxKQogewpAQCAtODY0LDYgKzEyNDQsMjAgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19tYm94X2dldDogUmVtb3ZlIGEgbWFpbGJveCBjbWQgZnJvbSB0aGUgaGVhZCBvZiBkcml2ZXIncyBtYWlsYm94IHF1ZXVlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogRHJpdmVyIG1haW50YWlucyBhIGludGVybmFsIG1haWxib3ggY29tbWFuZCBxdWV1ZSBpbXBsZW1lbnRlZCBhcyBhIGxpbmtlZAorICogbGlzdC4gV2hlbiBhIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQsIGl0IHNoYWxsIGJlIHB1dCBpbnRvIHRoZSBtYWlsYm94CisgKiBjb21tYW5kIHF1ZXVlIHN1Y2ggdGhhdCB0aGV5IHNoYWxsIGJlIHByb2Nlc3NlZCBvcmRlcmx5IGFzIEhCQSBjYW4gcHJvY2VzcworICogb25lIG1haWxib3ggY29tbWFuZCBhdCBhIHRpbWUuIEFmdGVyIEhCQSBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgbWFpbGJveAorICogY29tbWFuZCwgdGhlIGRyaXZlciB3aWxsIHJlbW92ZSBhIHBlbmRpbmcgbWFpbGJveCBjb21tYW5kIGZyb20gdGhlIGhlYWQgb2YKKyAqIHRoZSBtYWlsYm94IGNvbW1hbmQgcXVldWUgYW5kIHNlbmQgdG8gdGhlIEhCQSBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiovCiBMUEZDX01CT1hRX3QgKgogbHBmY19tYm94X2dldChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtODc3LDYgKzEyNzEsMTcgQEAKIAlyZXR1cm4gbWJxOwogfQogCisvKioKKyAqIGxwZmNfbWJveF9jbXBsX3B1dDogUHV0IG1haWxib3ggY29tbWFuZCBpbnRvIG1haWxib3ggY29tbWFuZCBjb21wbGV0ZSBsaXN0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJxOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBwdXQgdGhlIGNvbXBsZXRlZCBtYWlsYm94IGNvbW1hbmQgaW50byB0aGUgbWFpbGJveCBjb21tYW5kCisgKiBjb21wbGV0ZSBsaXN0LiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gZHJpdmVyIGludGVycnVwdCBoYW5kbGVyCisgKiBjb250ZXh0LlRoZSBtYWlsYm94IGNvbXBsZXRlIGxpc3QgaXMgdXNlZCBieSB0aGUgZHJpdmVyIHdvcmtlciB0aHJlYWQKKyAqIHRvIHByb2Nlc3MgbWFpbGJveCBjb21wbGV0ZSBjYWxsYmFjayBmdW5jdGlvbnMgb3V0c2lkZSB0aGUgZHJpdmVyIGludGVycnVwdAorICogaGFuZGxlci4KKyAqKi8KIHZvaWQKIGxwZmNfbWJveF9jbXBsX3B1dChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBtYnEpCiB7CkBAIC04ODcsNiArMTI5MiwxNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX21ib3hfdG1vX3ZhbDogUmV0cmlldmUgbWFpbGJveCBjb21tYW5kIHRpbWVvdXQgdmFsdWUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWQ6IG1haWxib3ggY29tbWFuZCBjb2RlLgorICoKKyAqIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIHByb3BlciB0aW1lb3V0IHZhbHVlIGFjY29yZGluZyB0byB0aGUgbWFpbGJveAorICogY29tbWFuZCBjb2RlLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgVGltZW91dCB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgZ2l2ZW4gbWFpbGJveCBjb21tYW5kCisgKiovCiBpbnQKIGxwZmNfbWJveF90bW9fdmFsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IGNtZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCmluZGV4IDNjMGNlYmMuLmE0YmJhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTM5LDcgKzQwLDIxIEBACiAjZGVmaW5lIExQRkNfTUVNX1BPT0xfU0laRSAgICAgIDY0ICAgICAgLyogbWF4IGVsZW0gaW4gbm9uLURNQSBzYWZldHkgcG9vbCAqLwogCiAKLQorLyoqCisgKiBscGZjX21lbV9hbGxvYzogY3JlYXRlIGFuZCBhbGxvY2F0ZSBhbGwgUENJIGFuZCBtZW1vcnkgcG9vbHMKKyAqIEBwaGJhOiBIQkEgdG8gYWxsb2NhdGUgcG9vbHMgZm9yCisgKgorICogRGVzY3JpcHRpb246IENyZWF0ZXMgYW5kIGFsbG9jYXRlcyBQQ0kgcG9vbHMgbHBmY19zY3NpX2RtYV9idWZfcG9vbCwKKyAqIGxwZmNfbWJ1Zl9wb29sLCBscGZjX2hicV9wb29sLiAgQ3JlYXRlcyBhbmQgYWxsb2NhdGVzIGttYWxsb2MtYmFja2VkIG1lbXBvb2xzCisgKiBmb3IgTFBGQ19NQk9YUV90IGFuZCBscGZjX25vZGVsaXN0LiAgQWxzbyBhbGxvY2F0ZXMgdGhlIFZQSSBiaXRtYXNrLgorICoKKyAqIE5vdGVzOiBOb3QgaW50ZXJydXB0LXNhZmUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuICBJZiBhbnkKKyAqIGFsbG9jYXRpb24gZmFpbHMsIGZyZWVzIGFsbCBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIG1lbW9yeSBiZWZvcmUgcmV0dXJuaW5nLgorICoKKyAqIFJldHVybnM6CisgKiAgIDAgb24gc3VjY2VzcworICogICAtRU5PTUVNIG9uIGZhaWx1cmUgKGlmIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMgZmFpbCkKKyAqKi8KIGludAogbHBmY19tZW1fYWxsb2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTEyMCw2ICsxMzUsMTYgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorLyoqCisgKiBscGZjX21lbV9mcmVlOiBGcmVlcyBhbGwgUENJIGFuZCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGxwZmNfbWVtX2FsbG9jCisgKiBAcGhiYTogSEJBIHRvIGZyZWUgbWVtb3J5IGZvcgorICoKKyAqIERlc2NyaXB0aW9uOiBGcmVlcyBQQ0kgcG9vbHMgbHBmY19zY3NpX2RtYV9idWZfcG9vbCwgbHBmY19tYnVmX3Bvb2wsCisgKiBscGZjX2hicV9wb29sLiAgRnJlZXMga21hbGxvYy1iYWNrZWQgbWVtcG9vbHMgZm9yIExQRkNfTUJPWFFfdCBhbmQKKyAqIGxwZmNfbm9kZWxpc3QuICBBbHNvIGZyZWVzIHRoZSBWUEkgYml0bWFzay4KKyAqCisgKiBSZXR1cm5zOiBOb25lCisgKiovCiB2b2lkCiBscGZjX21lbV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC0xODEsMTIgKzIwNiwyOSBAQAogCXBoYmEtPmxwZmNfc2NzaV9kbWFfYnVmX3Bvb2wgPSBOVUxMOwogCXBoYmEtPmxwZmNfbWJ1Zl9wb29sID0gTlVMTDsKIAotCQkJCS8qIEZyZWUgdGhlIGlvY2IgbG9va3VwIGFycmF5ICovCisJLyogRnJlZSB0aGUgaW9jYiBsb29rdXAgYXJyYXkgKi8KIAlrZnJlZShwc2xpLT5pb2NicV9sb29rdXApOwogCXBzbGktPmlvY2JxX2xvb2t1cCA9IE5VTEw7Ci0KIH0KIAorLyoqCisgKiBscGZjX21idWZfYWxsb2M6IEFsbG9jYXRlIGFuIG1idWYgZnJvbSB0aGUgbHBmY19tYnVmX3Bvb2wgUENJIHBvb2wKKyAqIEBwaGJhOiBIQkEgd2hpY2ggb3ducyB0aGUgcG9vbCB0byBhbGxvY2F0ZSBmcm9tCisgKiBAbWVtX2ZsYWdzOiBpbmRpY2F0ZXMgaWYgdGhpcyBpcyBhIHByaW9yaXR5IChNRU1fUFJJKSBhbGxvY2F0aW9uCisgKiBAaGFuZGxlOiB1c2VkIHRvIHJldHVybiB0aGUgRE1BLW1hcHBlZCBhZGRyZXNzIG9mIHRoZSBtYnVmCisgKgorICogRGVzY3JpcHRpb246IEFsbG9jYXRlcyBhIERNQS1tYXBwZWQgYnVmZmVyIGZyb20gdGhlIGxwZmNfbWJ1Zl9wb29sIFBDSSBwb29sLgorICogQWxsb2NhdGVzIGZyb20gZ2VuZXJpYyBwY2lfcG9vbF9hbGxvYyBmdW5jdGlvbiBmaXJzdCBhbmQgaWYgdGhhdCBmYWlscyBhbmQKKyAqIG1lbV9mbGFncyBoYXMgTUVNX1BSSSBzZXQgKHRoZSBvbmx5IGRlZmluZWQgZmxhZyksIHJldHVybnMgYW4gbWJ1ZiBmcm9tIHRoZQorICogSEJBJ3MgcG9vbC4KKyAqCisgKiBOb3RlczogTm90IGludGVycnVwdC1zYWZlLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLiAgVGFrZXMKKyAqIHBoYmEtPmhiYWxvY2suCisgKgorICogUmV0dXJuczoKKyAqICAgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1idWYgb24gc3VjY2VzcworICogICBOVUxMIG9uIGZhaWx1cmUKKyAqKi8KIHZvaWQgKgogbHBmY19tYnVmX2FsbG9jKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqaGFuZGxlKQogewpAQCAtMjA2LDYgKzI0OCwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogX19scGZjX21lbV9mcmVlOiBGcmVlIGFuIG1idWYgZnJvbSB0aGUgbHBmY19tYnVmX3Bvb2wgUENJIHBvb2wgKGxvY2tlZCkKKyAqIEBwaGJhOiBIQkEgd2hpY2ggb3ducyB0aGUgcG9vbCB0byByZXR1cm4gdG8KKyAqIEB2aXJ0OiBtYnVmIHRvIGZyZWUKKyAqIEBkbWE6IHRoZSBETUEtbWFwcGVkIGFkZHJlc3Mgb2YgdGhlIGxwZmNfbWJ1Zl9wb29sIHRvIGJlIGZyZWVkCisgKgorICogRGVzY3JpcHRpb246IFJldHVybnMgYW4gbWJ1ZiBscGZjX21idWZfcG9vbCB0byB0aGUgbHBmY19tYnVmX3NhZmV0eV9wb29sIGlmCisgKiBpdCBpcyBiZWxvdyBpdHMgbWF4X2NvdW50LCBmcmVlcyB0aGUgbWJ1ZiBvdGhlcndpc2UuCisgKgorICogTm90ZXM6IE11c3QgYmUgY2FsbGVkIHdpdGggcGhiYS0+aGJhbG9jayBoZWxkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0bworICogbHBmY19tYnVmX3NhZmV0eV9wb29sLgorICoKKyAqIFJldHVybnM6IE5vbmUKKyAqKi8KIHZvaWQKIF9fbHBmY19tYnVmX2ZyZWUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdm9pZCAqdmlydCwgZG1hX2FkZHJfdCBkbWEpCiB7CkBAIC0yMjEsNyArMjc3LDIxIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfbWVtX2ZyZWU6IEZyZWUgYW4gbWJ1ZiBmcm9tIHRoZSBscGZjX21idWZfcG9vbCBQQ0kgcG9vbCAodW5sb2NrZWQpCisgKiBAcGhiYTogSEJBIHdoaWNoIG93bnMgdGhlIHBvb2wgdG8gcmV0dXJuIHRvCisgKiBAdmlydDogbWJ1ZiB0byBmcmVlCisgKiBAZG1hOiB0aGUgRE1BLW1hcHBlZCBhZGRyZXNzIG9mIHRoZSBscGZjX21idWZfcG9vbCB0byBiZSBmcmVlZAorICoKKyAqIERlc2NyaXB0aW9uOiBSZXR1cm5zIGFuIG1idWYgbHBmY19tYnVmX3Bvb2wgdG8gdGhlIGxwZmNfbWJ1Zl9zYWZldHlfcG9vbCBpZgorICogaXQgaXMgYmVsb3cgaXRzIG1heF9jb3VudCwgZnJlZXMgdGhlIG1idWYgb3RoZXJ3aXNlLgorICoKKyAqIE5vdGVzOiBUYWtlcyBwaGJhLT5oYmFsb2NrLiAgQ2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgb3RoZXIgbG9ja3MgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiBOb25lCisgKiovCiB2b2lkCisKIGxwZmNfbWJ1Zl9mcmVlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgZG1hKQogewogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwpAQCAtMjMyLDYgKzMwMiwxOSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19oYnFfYWxsb2M6IEFsbG9jYXRlIGFuIEhCUSBidWZmZXIKKyAqIEBwaGJhOiBIQkEgdG8gYWxsb2NhdGUgSEJRIGJ1ZmZlciBmb3IKKyAqCisgKiBEZXNjcmlwdGlvbjogQWxsb2NhdGVzIGEgRE1BLW1hcHBlZCBIQlEgYnVmZmVyIGZyb20gdGhlIGxwZmNfaGJxX3Bvb2wgUENJCisgKiBwb29sIGFsb25nIGEgbm9uLURNQS1tYXBwZWQgY29udGFpbmVyIGZvciBpdC4KKyAqCisgKiBOb3RlczogTm90IGludGVycnVwdC1zYWZlLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLgorICoKKyAqIFJldHVybnM6CisgKiAgIHBvaW50ZXIgdG8gSEJRIG9uIHN1Y2Nlc3MKKyAqICAgTlVMTCBvbiBmYWlsdXJlCisgKiovCiBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqCiBscGZjX2Vsc19oYnFfYWxsb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjUxLDYgKzMzNCwxOCBAQAogCXJldHVybiBoYnFicDsKIH0KIAorLyoqCisgKiBscGZjX21lbV9oYnFfZnJlZTogRnJlZXMgYW4gSEJRIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBscGZjX2Vsc19oYnFfYWxsb2MKKyAqIEBwaGJhOiBIQkEgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgZm9yCisgKiBAaGJxYnA6IEhCUSBjb250YWluZXIgcmV0dXJuZWQgYnkgbHBmY19lbHNfaGJxX2FsbG9jCisgKgorICogRGVzY3JpcHRpb246IEZyZWVzIGJvdGggdGhlIGNvbnRhaW5lciBhbmQgdGhlIERNQS1tYXBwZWQgYnVmZmVyIHJldHVybmVkIGJ5CisgKiBscGZjX2Vsc19oYnFfYWxsb2MuCisgKgorICogTm90ZXM6IENhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2tzIGhlbGQuCisgKgorICogUmV0dXJuczogTm9uZQorICoqLwogdm9pZAogbHBmY19lbHNfaGJxX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqaGJxYnApCiB7CkBAIC0yNTksNyArMzU0LDE4IEBACiAJcmV0dXJuOwogfQogCi0vKiBUaGlzIGlzIE9OTFkgY2FsbGVkIGZvciB0aGUgTFBGQ19FTFNfSEJRICovCisvKioKKyAqIGxwZmNfaW5fYnVmX2ZyZWU6IEZyZWUgYSBETUEgYnVmZmVyCisgKiBAcGhiYTogSEJBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGgKKyAqIEBtcDogQnVmZmVyIHRvIGZyZWUKKyAqCisgKiBEZXNjcmlwdGlvbjogRnJlZXMgdGhlIGdpdmVuIERNQSBidWZmZXIgaW4gdGhlIGFwcHJvcHJpYXRlIHdheSBnaXZlbiBpZiB0aGUKKyAqIEhCQSBpcyBydW5uaW5nIGluIFNMSTMgbW9kZSB3aXRoIEhCUXMgZW5hYmxlZC4KKyAqCisgKiBOb3RlczogVGFrZXMgcGhiYS0+aGJhbG9jay4gIENhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IG90aGVyIGxvY2tzIGhlbGQuCisgKgorICogUmV0dXJuczogTm9uZQorICoqLwogdm9pZAogbHBmY19pbl9idWZfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjY2I1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaApAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCisgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAqCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgICAgICAgKgorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiAqCisgKiBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgICAgICAgICAgKgorICogV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgICoKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgICAgICAqCisgKiBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFNVQ0ggRElTQ0xBSU1FUlMgQVJFIEhFTEQgKgorICogVE8gQkUgTEVHQUxMWSBJTlZBTElELiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgICoKKyAqIG1vcmUgZGV0YWlscywgYSBjb3B5IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HICAqCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEV2ZW50IGRlZmluaXRpb25zIGZvciBSZWdpc3RlckZvckV2ZW50ICovCisjZGVmaW5lIEZDX1JFR19MSU5LX0VWRU5UCQkweDAwMDEJLyogbGluayB1cCAvIGRvd24gZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19SU0NOX0VWRU5UCQkweDAwMDIJLyogUlNDTiBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0NUX0VWRU5UCQkJMHgwMDA0CS8qIENUIHJlcXVlc3QgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19EVU1QX0VWRU5UCQkweDAwMDgJLyogRHVtcCBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX1RFTVBFUkFUVVJFX0VWRU5UCTB4MDAxMAkvKiB0ZW1wZXJhdHVyZSBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0VMU19FVkVOVAkJMHgwMDIwCS8qIGxwZmMgZWxzIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfRkFCUklDX0VWRU5UCQkweDAwNDAJLyogbHBmYyBmYWJyaWMgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19TQ1NJX0VWRU5UCQkweDAwODAJLyogbHBmYyBzY3NpIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfQk9BUkRfRVZFTlQJCTB4MDEwMAkvKiBscGZjIGJvYXJkIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfQURBUFRFUl9FVkVOVAkJMHgwMjAwCS8qIGxwZmMgYWRhcHRlciBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0VWRU5UX01BU0sJCShGQ19SRUdfTElOS19FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19SU0NOX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0NUX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0RVTVBfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfVEVNUEVSQVRVUkVfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfRUxTX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0ZBQlJJQ19FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19TQ1NJX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0JPQVJEX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0FEQVBURVJfRVZFTlQpCisvKiBUZW1wZXJhdHVyZSBldmVudHMgKi8KKyNkZWZpbmUgTFBGQ19DUklUX1RFTVAJCTB4MQorI2RlZmluZSBMUEZDX1RIUkVTSE9MRF9URU1QCTB4MgorI2RlZmluZSBMUEZDX05PUk1BTF9URU1QCTB4MworLyoKKyAqIEFsbCBuZXQgbGluayBldmVudCBwYXlsb2FkcyB3aWxsIGJlZ2luIHdpdGggYW5kIGV2ZW50IHR5cGUKKyAqIGFuZCBzdWJjYXRlZ29yeS4gVGhlIGV2ZW50IHR5cGUgbXVzdCBjb21lIGZpcnN0LgorICogVGhlIHN1YmNhdGVnb3J5IGZ1cnRoZXIgZGVmaW5lcyB0aGUgZGF0YSB0aGF0IGZvbGxvd3MgaW4gdGhlIHJlc3QKKyAqIG9mIHRoZSBwYXlsb2FkLiBFYWNoIGNhdGVnb3J5IHdpbGwgaGF2ZSBpdHMgb3duIHVuaXF1ZSBoZWFkZXIgcGx1cworICogYW55IGFkZHRpb25hbCBkYXRhIHVuaXF1ZSB0byB0aGUgc3ViY2F0ZWdvcnkuCisgKiBUaGUgcGF5bG9hZCBzZW50IHZpYSB0aGUgZmMgdHJhbnNwb3J0IGlzIG9uZS13YXkgZHJpdmVyLT5hcHBsaWNhdGlvbi4KKyAqLworCisvKiBlbHMgZXZlbnQgaGVhZGVyICovCitzdHJ1Y3QgbHBmY19lbHNfZXZlbnRfaGVhZGVyIHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IHN1YmNhdGVnb3J5OworCXVpbnQ4X3Qgd3dwbls4XTsKKwl1aW50OF90IHd3bm5bOF07Cit9OworCisvKiBzdWJjYXRlZ29yeSBjb2RlcyBmb3IgRkNfUkVHX0VMU19FVkVOVCAqLworI2RlZmluZSBMUEZDX0VWRU5UX1BMT0dJX1JDVgkJMHgwMQorI2RlZmluZSBMUEZDX0VWRU5UX1BSTE9fUkNWCQkweDAyCisjZGVmaW5lIExQRkNfRVZFTlRfQURJU0NfUkNWCQkweDA0CisjZGVmaW5lIExQRkNfRVZFTlRfTFNSSlRfUkNWCQkweDA4CisKKy8qIHNwZWNpYWwgZWxzIGxzcmp0IGV2ZW50ICovCitzdHJ1Y3QgbHBmY19sc3JqdF9ldmVudCB7CisJc3RydWN0IGxwZmNfZWxzX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCByZWFzb25fY29kZTsKKwl1aW50MzJfdCBleHBsYW5hdGlvbjsKK307CisKKworLyogZmFicmljIGV2ZW50IGhlYWRlciAqLworc3RydWN0IGxwZmNfZmFicmljX2V2ZW50X2hlYWRlciB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBzdWJjYXRlZ29yeTsKKwl1aW50OF90IHd3cG5bOF07CisJdWludDhfdCB3d25uWzhdOworfTsKKworLyogc3ViY2F0ZWdvcnkgY29kZXMgZm9yIEZDX1JFR19GQUJSSUNfRVZFTlQgKi8KKyNkZWZpbmUgTFBGQ19FVkVOVF9GQUJSSUNfQlVTWQkJMHgwMQorI2RlZmluZSBMUEZDX0VWRU5UX1BPUlRfQlVTWQkJMHgwMgorI2RlZmluZSBMUEZDX0VWRU5UX0ZDUFJEQ0hLRVJSCQkweDA0CisKKy8qIHNwZWNpYWwgY2FzZSBmYWJyaWMgZmNwcmRjaGtlcnIgZXZlbnQgKi8KK3N0cnVjdCBscGZjX2ZjcHJkY2hrZXJyX2V2ZW50IHsKKwlzdHJ1Y3QgbHBmY19mYWJyaWNfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1aW50MzJfdCBsdW47CisJdWludDMyX3Qgb3Bjb2RlOworCXVpbnQzMl90IGZjcGlwYXJhbTsKK307CisKKworLyogc2NzaSBldmVudCBoZWFkZXIgKi8KK3N0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHsKKwl1aW50MzJfdCBldmVudF90eXBlOworCXVpbnQzMl90IHN1YmNhdGVnb3J5OworCXVpbnQzMl90IGx1bjsKKwl1aW50OF90IHd3cG5bOF07CisJdWludDhfdCB3d25uWzhdOworfTsKKworLyogc3ViY2F0ZWdvcnkgY29kZXMgZm9yIEZDX1JFR19TQ1NJX0VWRU5UICovCisjZGVmaW5lIExQRkNfRVZFTlRfUUZVTEwJMHgwMDAxCisjZGVmaW5lIExQRkNfRVZFTlRfREVWQlNZCTB4MDAwMgorI2RlZmluZSBMUEZDX0VWRU5UX0NIRUNLX0NPTkQJMHgwMDA0CisjZGVmaW5lIExQRkNfRVZFTlRfTFVOUkVTRVQJMHgwMDA4CisjZGVmaW5lIExQRkNfRVZFTlRfVEdUUkVTRVQJMHgwMDEwCisjZGVmaW5lIExQRkNfRVZFTlRfQlVTUkVTRVQJMHgwMDIwCisjZGVmaW5lIExQRkNfRVZFTlRfVkFSUVVFREVQVEgJMHgwMDQwCisKKy8qIHNwZWNpYWwgY2FzZSBzY3NpIHZhcnF1ZXVlZGVwdGggZXZlbnQgKi8KK3N0cnVjdCBscGZjX3Njc2lfdmFycXVldWVkZXB0aF9ldmVudCB7CisJc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgc2NzaV9ldmVudDsKKwl1aW50MzJfdCBvbGR2YWw7CisJdWludDMyX3QgbmV3dmFsOworfTsKKworLyogc3BlY2lhbCBjYXNlIHNjc2kgY2hlY2sgY29uZGl0aW9uIGV2ZW50ICovCitzdHJ1Y3QgbHBmY19zY3NpX2NoZWNrX2NvbmRpdGlvbl9ldmVudCB7CisJc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXIgc2NzaV9ldmVudDsKKwl1aW50OF90IHNlbnNlX2tleTsKKwl1aW50OF90IGFzYzsKKwl1aW50OF90IGFzY3E7Cit9OworCisvKiBldmVudCBjb2RlcyBmb3IgRkNfUkVHX0JPQVJEX0VWRU5UICovCisjZGVmaW5lIExQRkNfRVZFTlRfUE9SVElOVEVSUgkJMHgwMQorCisvKiBib2FyZCBldmVudCBoZWFkZXIgKi8KK3N0cnVjdCBscGZjX2JvYXJkX2V2ZW50X2hlYWRlciB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBzdWJjYXRlZ29yeTsKK307CisKKworLyogZXZlbnQgY29kZXMgZm9yIEZDX1JFR19BREFQVEVSX0VWRU5UICovCisjZGVmaW5lIExQRkNfRVZFTlRfQVJSSVZBTAkweDAxCisKKy8qIGFkYXB0ZXIgZXZlbnQgaGVhZGVyICovCitzdHJ1Y3QgbHBmY19hZGFwdGVyX2V2ZW50X2hlYWRlciB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBzdWJjYXRlZ29yeTsKK307CisKKworLyogZXZlbnQgY29kZXMgZm9yIHRlbXBfZXZlbnQgKi8KKyNkZWZpbmUgTFBGQ19DUklUX1RFTVAJCTB4MQorI2RlZmluZSBMUEZDX1RIUkVTSE9MRF9URU1QCTB4MgorI2RlZmluZSBMUEZDX05PUk1BTF9URU1QCTB4MworCitzdHJ1Y3QgdGVtcF9ldmVudCB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBldmVudF9jb2RlOworCXVpbnQzMl90IGRhdGE7Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCA2Njg4YTg2Li4wYzI1ZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC0xMDAzLDIwICsxMDA0LDggQEAKIAkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOwogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCi0JCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzKSB7CisJCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzKQogCQkJCWxwZmNfbW9yZV9hZGlzYyh2cG9ydCk7Ci0JCQkJaWYgKCh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgJiYKLQkJCQkgICAgKHZwb3J0LT5mY19ucHJfY250KSkKLQkJCQkJbHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCk7Ci0JCQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSB7Ci0JCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7Ci0JCQkJCWxwZmNfZW5kX3JzY24odnBvcnQpOwotCQkJCX0KLQkJCX0KIAkJfQogCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCX0KQEAgLTE4NjUsOCArMTg1NCwxMyBAQAogbHBmY19jbXBsX2xvZ29fbnByX25vZGUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJCXZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogeworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwlpZiAobmRscC0+bmxwX0RJRCA9PSBGYWJyaWNfRElEKSB7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnICY9IH4oRkNfRkFCUklDIHwgRkNfUFVCTElDX0xPT1ApOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJfQogCWxwZmNfdW5yZWdfcnBpKHZwb3J0LCBuZGxwKTsKLQkvKiBUaGlzIHJvdXRpbmUgZG9lcyBub3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSAqLwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTIxNTUsNyArMjE0OSw3IEBACiAJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAl9IGVsc2UgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCi0JCQkiMDIxMiBEU00gb3V0IHN0YXRlICVkIG9uIE5Qb3J0IGZyZWVcbiIsIHJjKTsKKwkJCSIwMjEzIERTTSBvdXQgc3RhdGUgJWQgb24gTlBvcnQgZnJlZVxuIiwgcmMpOwogCiAJCWxwZmNfZGVidWdmc19kaXNjX3RyYyh2cG9ydCwgTFBGQ19ESVNDX1RSQ19EU00sCiAJCQkiRFNNIG91dDogICAgICAgICBzdGU6JWQgZGlkOngleCBmbGc6eCV4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggMWJjZWJiZC4uYmQxODY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJscGZjX3ZlcnNpb24uaCIKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNDIsNiArNDMsMTExIEBACiAjZGVmaW5lIExQRkNfUkVTRVRfV0FJVCAgMgogI2RlZmluZSBMUEZDX0FCT1JUX1dBSVQgIDIKIAorLyoqCisgKiBscGZjX3VwZGF0ZV9zdGF0czogVXBkYXRlIHN0YXRpc3RpY2FsIGRhdGEgZm9yIHRoZSBjb21tYW5kIGNvbXBsZXRpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgb2JqZWN0LgorICogQGxwZmNfY21kOiBscGZjIHNjc2kgY29tbWFuZCBvYmplY3QgcG9pbnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIGEgY29tbWFuZCBjb21wbGV0aW9uIGFuZCB0aGlzCisgKiBmdW5jdGlvbiB1cGRhdGVzIHRoZSBzdGF0aXN0aWNhbCBkYXRhIGZvciB0aGUgY29tbWFuZCBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfdXBkYXRlX3N0YXRzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0ICBscGZjX3Njc2lfYnVmICpscGZjX2NtZCkKK3sKKwlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGxwZmNfY21kLT5yZGF0YTsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqcG5vZGUgPSByZGF0YS0+cG5vZGU7CisJc3RydWN0IHNjc2lfY21uZCAqY21kID0gbHBmY19jbWQtPnBDbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXVuc2lnbmVkIGxvbmcgbGF0ZW5jeTsKKwlpbnQgaTsKKworCWlmIChjbWQtPnJlc3VsdCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmICghdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkIHx8CisJCXZwb3J0LT5zdGF0X2RhdGFfYmxvY2tlZCB8fAorCQkhcG5vZGUtPmxhdF9kYXRhIHx8CisJCShwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX05PX0JVQ0tFVCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJbGF0ZW5jeSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxwZmNfY21kLT5zdGFydF90aW1lKTsKKworCWlmIChwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX0xJTkVBUl9CVUNLRVQpIHsKKwkJaSA9IChsYXRlbmN5ICsgcGhiYS0+YnVja2V0X3N0ZXAgLSAxIC0gcGhiYS0+YnVja2V0X2Jhc2UpLworCQkJcGhiYS0+YnVja2V0X3N0ZXA7CisJCWlmIChpID49IExQRkNfTUFYX0JVQ0tFVF9DT1VOVCkKKwkJCWkgPSBMUEZDX01BWF9CVUNLRVRfQ09VTlQ7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IExQRkNfTUFYX0JVQ0tFVF9DT1VOVC0xOyBpKyspCisJCQlpZiAobGF0ZW5jeSA8PSAocGhiYS0+YnVja2V0X2Jhc2UgKworCQkJCSgoMTw8aSkqcGhiYS0+YnVja2V0X3N0ZXApKSkKKwkJCQlicmVhazsKKwl9CisKKwlwbm9kZS0+bGF0X2RhdGFbaV0uY21kX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Cit9CisKKworLyoqCisgKiBscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudDogUG9zdHMgYSBxdWV1ZWRlcHRoIGNoYW5nZQorICogICAgICAgICAgICAgICAgICAgZXZlbnQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICogQG5kbHA6IFBvaW50ZXIgdG8gRkMgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldC4KKyAqIEBsdW46IEx1biBudW1iZXIgb2YgdGhlIHNjc2kgZGV2aWNlLgorICogQG9sZF92YWw6IE9sZCB2YWx1ZSBvZiB0aGUgcXVldWUgZGVwdGguCisgKiBAbmV3X3ZhbDogTmV3IHZhbHVlIG9mIHRoZSBxdWV1ZSBkZXB0aC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGV2ZW50IHRvIHRoZSBtZ210IGFwcGxpY2F0aW9uIGluZGljYXRpbmcKKyAqIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBzY3NpIGRldmljZSBxdWV1ZSBkZXB0aC4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCXN0cnVjdCBscGZjX3Zwb3J0ICAqdnBvcnQsCisJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAorCQl1aW50MzJfdCBsdW4sCisJCXVpbnQzMl90IG9sZF92YWwsCisJCXVpbnQzMl90IG5ld192YWwpCit7CisJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpmYXN0X3BhdGhfZXZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmYXN0X3BhdGhfZXZ0ID0gbHBmY19hbGxvY19mYXN0X2V2dChwaGJhKTsKKwlpZiAoIWZhc3RfcGF0aF9ldnQpCisJCXJldHVybjsKKworCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50LmV2ZW50X3R5cGUgPQorCQlGQ19SRUdfU0NTSV9FVkVOVDsKKwlmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQuc2NzaV9ldmVudC5zdWJjYXRlZ29yeSA9CisJCUxQRkNfRVZFTlRfVkFSUVVFREVQVEg7CisKKwkvKiBSZXBvcnQgYWxsIGx1bnMgd2l0aCBjaGFuZ2UgaW4gcXVldWUgZGVwdGggKi8KKwlmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQuc2NzaV9ldmVudC5sdW4gPSBsdW47CisJaWYgKG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgeworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lnd3cG4sCisJCQkmbmRscC0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5zY3NpX2V2ZW50Lnd3bm4sCisJCQkmbmRscC0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCX0KKworCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5vbGR2YWwgPSBvbGRfdmFsOworCWZhc3RfcGF0aF9ldnQtPnVuLnF1ZXVlX2RlcHRoX2V2dC5uZXd2YWwgPSBuZXdfdmFsOworCWZhc3RfcGF0aF9ldnQtPnZwb3J0ID0gdnBvcnQ7CisKKwlmYXN0X3BhdGhfZXZ0LT53b3JrX2V2dC5ldnQgPSBMUEZDX0VWVF9GQVNUUEFUSF9NR01UX0VWVDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dF9saXN0cCwgJnBoYmEtPndvcmtfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CisKKwlyZXR1cm47Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCB3aGVuIHRoZXJlIGlzIGEgcmVzb3VyY2UKICAqIGVycm9yIGluIGRyaXZlciBvciBpbiBmaXJtd2FyZS4KQEAgLTExNyw5ICsyMjMsMTAgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwotCXVuc2lnbmVkIGxvbmcgbmV3X3F1ZXVlX2RlcHRoOworCXVuc2lnbmVkIGxvbmcgbmV3X3F1ZXVlX2RlcHRoLCBvbGRfcXVldWVfZGVwdGg7CiAJdW5zaWduZWQgbG9uZyBudW1fcnNyY19lcnIsIG51bV9jbWRfc3VjY2VzczsKIAlpbnQgaTsKKwlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YTsKIAogCW51bV9yc3JjX2VyciA9IGF0b21pY19yZWFkKCZwaGJhLT5udW1fcnNyY19lcnIpOwogCW51bV9jbWRfc3VjY2VzcyA9IGF0b21pY19yZWFkKCZwaGJhLT5udW1fY21kX3N1Y2Nlc3MpOwpAQCAtMTM3LDYgKzI0NCw3IEBACiAJCQkJZWxzZQogCQkJCQluZXdfcXVldWVfZGVwdGggPSBzZGV2LT5xdWV1ZV9kZXB0aCAtCiAJCQkJCQkJCW5ld19xdWV1ZV9kZXB0aDsKKwkJCQlvbGRfcXVldWVfZGVwdGggPSBzZGV2LT5xdWV1ZV9kZXB0aDsKIAkJCQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQogCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAogCQkJCQkJCU1TR19PUkRFUkVEX1RBRywKQEAgLTE0NSw2ICsyNTMsMTMgQEAKIAkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKIAkJCQkJCQlNU0dfU0lNUExFX1RBRywKIAkJCQkJCQluZXdfcXVldWVfZGVwdGgpOworCQkJCXJkYXRhID0gc2Rldi0+aG9zdGRhdGE7CisJCQkJaWYgKHJkYXRhKQorCQkJCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudCgKKwkJCQkJCXBoYmEsIHZwb3J0c1tpXSwKKwkJCQkJCXJkYXRhLT5wbm9kZSwKKwkJCQkJCXNkZXYtPmx1biwgb2xkX3F1ZXVlX2RlcHRoLAorCQkJCQkJbmV3X3F1ZXVlX2RlcHRoKTsKIAkJCX0KIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CkBAIC0xNTksNiArMjc0LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCWludCBpOworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhOwogCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpCkBAIC0xNzYsNiArMjkyLDE0IEBACiAJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCiAJCQkJCQkJTVNHX1NJTVBMRV9UQUcsCiAJCQkJCQkJc2Rldi0+cXVldWVfZGVwdGgrMSk7CisJCQkJcmRhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJCQlpZiAocmRhdGEpCisJCQkJCWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KAorCQkJCQkJcGhiYSwgdnBvcnRzW2ldLAorCQkJCQkJcmRhdGEtPnBub2RlLAorCQkJCQkJc2Rldi0+bHVuLAorCQkJCQkJc2Rldi0+cXVldWVfZGVwdGggLSAxLAorCQkJCQkJc2Rldi0+cXVldWVfZGVwdGgpOwogCQkJfQogCQl9CiAJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKQEAgLTE4Myw2ICszMDcsMzUgQEAKIAlhdG9taWNfc2V0KCZwaGJhLT5udW1fY21kX3N1Y2Nlc3MsIDApOwogfQogCisvKioKKyAqIGxwZmNfc2NzaV9kZXZfYmxvY2s6IHNldCBhbGwgc2NzaSBob3N0cyB0byBibG9jayBzdGF0ZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhbGtzIHZwb3J0IGxpc3QgYW5kIHNldCBlYWNoIFNDU0kgaG9zdCB0byBibG9jayBzdGF0ZQorICogYnkgaW52b2tpbmcgZmNfcmVtb3RlX3BvcnRfZGVsZXRlKCkgcm91dGluZS4gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkCisgKiB3aXRoIEVFSCB3aGVuIGRldmljZSdzIFBDSSBzbG90IGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLgorICoqLwordm9pZAorbHBmY19zY3NpX2Rldl9ibG9jayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCWludCBpOworCisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlpZiAodnBvcnRzICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHNob3N0KSB7CisJCQkJcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNkZXYpKTsKKwkJCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKK30KKwogLyoKICAqIFRoaXMgcm91dGluZSBhbGxvY2F0ZXMgYSBzY3NpIGJ1ZmZlciwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkKICAqIGluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWF0ZSBhIFNDU0kgSS9PLiAgVGhlIG5vbi1ETUFhYmxlIGJ1ZmZlciByZWdpb24KQEAgLTE5OCw3ICszNTEsOSBAQAogCXN0cnVjdCBscGZjX3Njc2lfYnVmICpwc2I7CiAJc3RydWN0IHVscF9iZGU2NCAqYnBsOwogCUlPQ0JfdCAqaW9jYjsKLQlkbWFfYWRkcl90IHBkbWFfcGh5czsKKwlkbWFfYWRkcl90IHBkbWFfcGh5c19mY3BfY21kOworCWRtYV9hZGRyX3QgcGRtYV9waHlzX2ZjcF9yc3A7CisJZG1hX2FkZHJfdCBwZG1hX3BoeXNfYnBsOwogCXVpbnQxNl90IGlvdGFnOwogCiAJcHNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfc2NzaV9idWYpLCBHRlBfS0VSTkVMKTsKQEAgLTIzOCw0MCArMzkzLDYwIEBACiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIHNob3J0LWhhbmQgcG9pbnRlcnMuICovCiAJYnBsID0gcHNiLT5mY3BfYnBsOwotCXBkbWFfcGh5cyA9IHBzYi0+ZG1hX2hhbmRsZTsKKwlwZG1hX3BoeXNfZmNwX2NtZCA9IHBzYi0+ZG1hX2hhbmRsZTsKKwlwZG1hX3BoeXNfZmNwX3JzcCA9IHBzYi0+ZG1hX2hhbmRsZSArIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpOworCXBkbWFfcGh5c19icGwgPSBwc2ItPmRtYV9oYW5kbGUgKyBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSArCisJCQlzaXplb2Yoc3RydWN0IGZjcF9yc3ApOwogCiAJLyoKIAkgKiBUaGUgZmlyc3QgdHdvIGJkZXMgYXJlIHRoZSBGQ1BfQ01EIGFuZCBGQ1BfUlNQLiAgVGhlIGJhbGFuY2UgYXJlIHNnCiAJICogbGlzdCBiZGVzLiAgSW5pdGlhbGl6ZSB0aGUgZmlyc3QgdHdvIGFuZCBsZWF2ZSB0aGUgcmVzdCBmb3IKIAkgKiBxdWV1ZWNvbW1hbmQuCiAJICovCi0JYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwZG1hX3BoeXMpKTsKLQlicGwtPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwZG1hX3BoeXMpKTsKLQlicGwtPnR1cy5mLmJkZVNpemUgPSBzaXplb2YgKHN0cnVjdCBmY3BfY21uZCk7Ci0JYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVVNFX0NNTkQ7Ci0JYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwotCWJwbCsrOworCWJwbFswXS5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwZG1hX3BoeXNfZmNwX2NtZCkpOworCWJwbFswXS5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9jbWQpKTsKKwlicGxbMF0udHVzLmYuYmRlU2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpOworCWJwbFswXS50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJYnBsWzBdLnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CiAKIAkvKiBTZXR1cCB0aGUgcGh5c2ljYWwgcmVnaW9uIGZvciB0aGUgRkNQIFJTUCAqLwotCXBkbWFfcGh5cyArPSBzaXplb2YgKHN0cnVjdCBmY3BfY21uZCk7Ci0JYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChwZG1hX3BoeXMpKTsKLQlicGwtPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwZG1hX3BoeXMpKTsKLQlicGwtPnR1cy5mLmJkZVNpemUgPSBzaXplb2YgKHN0cnVjdCBmY3BfcnNwKTsKLQlicGwtPnR1cy5mLmJkZUZsYWdzID0gKEJVRkZfVVNFX0NNTkQgfCBCVUZGX1VTRV9SQ1YpOwotCWJwbC0+dHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKKwlicGxbMV0uYWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9yc3ApKTsKKwlicGxbMV0uYWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfcnNwKSk7CisJYnBsWzFdLnR1cy5mLmJkZVNpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9yc3ApOworCWJwbFsxXS50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJYnBsWzFdLnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CiAKIAkvKgogCSAqIFNpbmNlIHRoZSBJT0NCIGZvciB0aGUgRkNQIEkvTyBpcyBidWlsdCBpbnRvIHRoaXMgbHBmY19zY3NpX2J1ZiwKIAkgKiBpbml0aWFsaXplIGl0IHdpdGggYWxsIGtub3duIGRhdGEgbm93LgogCSAqLwotCXBkbWFfcGh5cyArPSAoc2l6ZW9mIChzdHJ1Y3QgZmNwX3JzcCkpOwogCWlvY2IgPSAmcHNiLT5jdXJfaW9jYnEuaW9jYjsKIAlpb2NiLT51bi5mY3BpNjQuYmRsLnVscElvVGFnMzIgPSAwOwotCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9waHlzKTsKLQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX3BoeXMpOwotCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSA9ICgyICogc2l6ZW9mIChzdHJ1Y3QgdWxwX2JkZTY0KSk7Ci0JaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREw7Ci0JaW9jYi0+dWxwQmRlQ291bnQgPSAxOworCWlmIChwaGJhLT5zbGlfcmV2ID09IDMpIHsKKwkJLyogZmlsbCBpbiBpbW1lZGlhdGUgZmNwIGNvbW1hbmQgQkRFICovCisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFX0lNTUVEOworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKTsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRyTG93ID0gb2Zmc2V0b2YoSU9DQl90LAorCQkJCQkJICAgICAgIHVuc2xpMy5mY3BfZXh0LmljZCk7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckhpZ2ggPSAwOworCQlpb2NiLT51bHBCZGVDb3VudCA9IDA7CisJCWlvY2ItPnVscExlID0gMDsKKwkJLyogZmlsbCBpbiByZXNwb25jZSBCREUgKi8KKwkJaW9jYi0+dW5zbGkzLmZjcF9leHQucmJkZS50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUudHVzLmYuYmRlU2l6ZSA9CisJCQkJCQlzaXplb2Yoc3RydWN0IGZjcF9yc3ApOworCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLmFkZHJMb3cgPQorCQkJCQkJcHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9yc3ApOworCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLmFkZHJIaWdoID0KKwkJCQkJCXB1dFBhZGRySGlnaChwZG1hX3BoeXNfZmNwX3JzcCk7CisJfSBlbHNlIHsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSA9ICgyICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9waHlzX2JwbCk7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9waHlzX2JwbCk7CisJCWlvY2ItPnVscEJkZUNvdW50ID0gMTsKKwkJaW9jYi0+dWxwTGUgPSAxOworCX0KIAlpb2NiLT51bHBDbGFzcyA9IENMQVNTMzsKIAogCXJldHVybiBwc2I7CkBAIC0zMTMsOCArNDg4LDkgQEAKIAlzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kID0gbHBmY19jbWQtPmZjcF9jbW5kOwogCXN0cnVjdCB1bHBfYmRlNjQgKmJwbCA9IGxwZmNfY21kLT5mY3BfYnBsOwogCUlPQ0JfdCAqaW9jYl9jbWQgPSAmbHBmY19jbWQtPmN1cl9pb2NicS5pb2NiOworCXN0cnVjdCB1bHBfYmRlNjQgKmRhdGFfYmRlID0gaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmRiZGU7CiAJZG1hX2FkZHJfdCBwaHlzYWRkcjsKLQl1aW50MzJfdCBpLCBudW1fYmRlID0gMDsKKwl1aW50MzJfdCBudW1fYmRlID0gMDsKIAlpbnQgbnNlZywgZGF0YWRpciA9IHNjc2lfY21uZC0+c2NfZGF0YV9kaXJlY3Rpb247CiAKIAkvKgpAQCAtMzUyLDM3ICs1MjgsMTU5IEBACiAJCSAqIGR1cmluZyBwcm9iZSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHNnIGVsZW1lbnRzIGluIGFueQogCQkgKiBzaW5nbGUgc2NzaSBjb21tYW5kLiAgSnVzdCBydW4gdGhyb3VnaCB0aGUgc2VnX2NudCBhbmQgZm9ybWF0CiAJCSAqIHRoZSBiZGUncy4KKwkJICogV2hlbiB1c2luZyBTTEktMyB0aGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGZpdCBhbGwgdGhlIEJERXMgaW50bworCQkgKiB0aGUgSU9DQi4gSWYgaXQgY2FuJ3QgdGhlbiB0aGUgQkRFcyBnZXQgYWRkZWQgdG8gYSBCUEwgYXMgaXQKKwkJICogZG9lcyBmb3IgU0xJLTIgbW9kZS4KIAkJICovCi0JCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbW5kLCBzZ2VsLCBuc2VnLCBpKSB7CisJCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbW5kLCBzZ2VsLCBuc2VnLCBudW1fYmRlKSB7CiAJCQlwaHlzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwotCQkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGh5c2FkZHIpKTsKLQkJCWJwbC0+YWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGh5c2FkZHIpKTsKLQkJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7Ci0JCQlpZiAoZGF0YWRpciA9PSBETUFfVE9fREVWSUNFKQotCQkJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSAwOwotCQkJZWxzZQotCQkJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1VTRV9SQ1Y7Ci0JCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7Ci0JCQlicGwrKzsKLQkJCW51bV9iZGUrKzsKKwkJCWlmIChwaGJhLT5zbGlfcmV2ID09IDMgJiYKKwkJCSAgICBuc2VnIDw9IExQRkNfRVhUX0RBVEFfQkRFX0NPVU5UKSB7CisJCQkJZGF0YV9iZGUtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJCQlkYXRhX2JkZS0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCQkJZGF0YV9iZGUtPmFkZHJMb3cgPSBwdXRQYWRkckxvdyhwaHlzYWRkcik7CisJCQkJZGF0YV9iZGUtPmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBoeXNhZGRyKTsKKwkJCQlkYXRhX2JkZSsrOworCQkJfSBlbHNlIHsKKwkJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQkJCWJwbC0+dHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKKwkJCQlicGwtPmFkZHJMb3cgPQorCQkJCQlsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwaHlzYWRkcikpOworCQkJCWJwbC0+YWRkckhpZ2ggPQorCQkJCQlsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGh5c2FkZHIpKTsKKwkJCQlicGwrKzsKKwkJCX0KIAkJfQogCX0KIAogCS8qCiAJICogRmluaXNoIGluaXRpYWxpemluZyB0aG9zZSBJT0NCIGZpZWxkcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlCi0JICogc2NzaV9jbW5kIHJlcXVlc3RfYnVmZmVyLiAgTm90ZSB0aGF0IHRoZSBiZGVTaXplIGlzIGV4cGxpY2l0bHkKLQkgKiByZWluaXRpYWxpemVkIHNpbmNlIGFsbCBpb2NiIG1lbW9yeSByZXNvdXJjZXMgYXJlIHVzZWQgbWFueSB0aW1lcwotCSAqIGZvciB0cmFuc21pdCwgcmVjZWl2ZSwgYW5kIGNvbnRpbnVhdGlvbiBicGwncy4KKwkgKiBzY3NpX2NtbmQgcmVxdWVzdF9idWZmZXIuICBOb3RlIHRoYXQgZm9yIFNMSS0yIHRoZSBiZGVTaXplIGlzCisJICogZXhwbGljaXRseSByZWluaXRpYWxpemVkIGFuZCBmb3IgU0xJLTMgdGhlIGV4dGVuZGVkIGJkZSBjb3VudCBpcworCSAqIGV4cGxpY2l0bHkgcmVpbml0aWFsaXplZCBzaW5jZSBhbGwgaW9jYiBtZW1vcnkgcmVzb3VyY2VzIGFyZSByZXVzZWQuCiAJICovCi0JaW9jYl9jbWQtPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSA9ICgyICogc2l6ZW9mIChzdHJ1Y3QgdWxwX2JkZTY0KSk7Ci0JaW9jYl9jbWQtPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSArPQotCQkobnVtX2JkZSAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwotCWlvY2JfY21kLT51bHBCZGVDb3VudCA9IDE7Ci0JaW9jYl9jbWQtPnVscExlID0gMTsKKwlpZiAocGhiYS0+c2xpX3JldiA9PSAzKSB7CisJCWlmIChudW1fYmRlID4gTFBGQ19FWFRfREFUQV9CREVfQ09VTlQpIHsKKwkJCS8qCisJCQkgKiBUaGUgZXh0ZW5kZWQgSU9DQiBmb3JtYXQgY2FuIG9ubHkgZml0IDMgQkRFIG9yIGEgQlBMLgorCQkJICogVGhpcyBJL08gaGFzIG1vcmUgdGhhbiAzIEJERSBzbyB0aGUgMXN0IGRhdGEgYmRlIHdpbGwKKwkJCSAqIGJlIGEgQlBMIHRoYXQgaXMgZmlsbGVkIGluIGhlcmUuCisJCQkgKi8KKwkJCXBoeXNhZGRyID0gbHBmY19jbWQtPmRtYV9oYW5kbGU7CisJCQlkYXRhX2JkZS0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OworCQkJZGF0YV9iZGUtPnR1cy5mLmJkZVNpemUgPSAobnVtX2JkZSAqCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpOworCQkJcGh5c2FkZHIgKz0gKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkgKworCQkJCSAgICAgKDIgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpKTsKKwkJCWRhdGFfYmRlLT5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwaHlzYWRkcik7CisJCQlkYXRhX2JkZS0+YWRkckxvdyA9IHB1dFBhZGRyTG93KHBoeXNhZGRyKTsKKwkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBicGwgKi8KKwkJCWlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5lYmRlX2NvdW50ID0gMjsKKwkJfSBlbHNlIHsKKwkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBiZGVzICovCisJCQlpb2NiX2NtZC0+dW5zbGkzLmZjcF9leHQuZWJkZV9jb3VudCA9IChudW1fYmRlICsgMSk7CisJCX0KKwl9IGVsc2UgeworCQlpb2NiX2NtZC0+dW4uZmNwaTY0LmJkbC5iZGVTaXplID0KKwkJCSgobnVtX2JkZSArIDIpICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwl9CiAJZmNwX2NtbmQtPmZjcERsID0gY3B1X3RvX2JlMzIoc2NzaV9idWZmbGVuKHNjc2lfY21uZCkpOwogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2VuZF9zY3NpX2Vycm9yX2V2ZW50OiBQb3N0cyBhbiBldmVudCB3aGVuIHRoZXJlIGlzIFNDU0kgZXJyb3IuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICogQGxwZmNfY21kOiBQb2ludGVyIHRvIGxwZmMgc2NzaSBjb21tYW5kIHdoaWNoIHJlcG9ydGVkIHRoZSBlcnJvci4KKyAqIEByc3BfaW9jYjogUG9pbnRlciB0byByZXNwb25zZSBpb2NiIG9iamVjdCB3aGljaCByZXBvcnRlZCBlcnJvci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvc3RzIGFuIGV2ZW50IHdoZW4gdGhlcmUgaXMgYSBTQ1NJIGNvbW1hbmQgcmVwb3J0aW5nCisgKiBlcnJvciBmcm9tIHRoZSBzY3NpIGRldmljZS4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NlbmRfc2NzaV9lcnJvcl9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKKwkJc3RydWN0IGxwZmNfc2NzaV9idWYgKmxwZmNfY21kLCBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwX2lvY2IpIHsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gbHBmY19jbWQtPnBDbWQ7CisJc3RydWN0IGZjcF9yc3AgKmZjcHJzcCA9IGxwZmNfY21kLT5mY3BfcnNwOworCXVpbnQzMl90IHJlc3BfaW5mbyA9IGZjcHJzcC0+cnNwU3RhdHVzMjsKKwl1aW50MzJfdCBzY3NpX3N0YXR1cyA9IGZjcHJzcC0+cnNwU3RhdHVzMzsKKwl1aW50MzJfdCBmY3BpX3Bhcm0gPSByc3BfaW9jYi0+aW9jYi51bi5mY3BpLmZjcGlfcGFybTsKKwlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQgPSBOVUxMOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpwbm9kZSA9IGxwZmNfY21kLT5yZGF0YS0+cG5vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIElmIHRoZXJlIGlzIHF1ZXVlZnVsbCBvciBidXN5IGNvbmRpdGlvbiBzZW5kIGEgc2NzaSBldmVudCAqLworCWlmICgoY21uZC0+cmVzdWx0ID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpIHx8CisJCShjbW5kLT5yZXN1bHQgPT0gU0FNX1NUQVRfQlVTWSkpIHsKKwkJZmFzdF9wYXRoX2V2dCA9IGxwZmNfYWxsb2NfZmFzdF9ldnQocGhiYSk7CisJCWlmICghZmFzdF9wYXRoX2V2dCkKKwkJCXJldHVybjsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uc2NzaV9ldnQuZXZlbnRfdHlwZSA9CisJCQlGQ19SRUdfU0NTSV9FVkVOVDsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uc2NzaV9ldnQuc3ViY2F0ZWdvcnkgPQorCQkoY21uZC0+cmVzdWx0ID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpID8KKwkJTFBGQ19FVkVOVF9RRlVMTCA6IExQRkNfRVZFTlRfREVWQlNZOworCQlmYXN0X3BhdGhfZXZ0LT51bi5zY3NpX2V2dC5sdW4gPSBjbW5kLT5kZXZpY2UtPmx1bjsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5zY3NpX2V2dC53d3BuLAorCQkJJnBub2RlLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uc2NzaV9ldnQud3dubiwKKwkJCSZwbm9kZS0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCX0gZWxzZSBpZiAoKHJlc3BfaW5mbyAmIFNOU19MRU5fVkFMSUQpICYmIGZjcHJzcC0+cnNwU25zTGVuICYmCisJCSgoY21uZC0+Y21uZFswXSA9PSBSRUFEXzEwKSB8fCAoY21uZC0+Y21uZFswXSA9PSBXUklURV8xMCkpKSB7CisJCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOworCQlpZiAoIWZhc3RfcGF0aF9ldnQpCisJCQlyZXR1cm47CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9CisJCQlGQ19SRUdfU0NTSV9FVkVOVDsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2NzaV9ldmVudC5zdWJjYXRlZ29yeSA9CisJCQlMUEZDX0VWRU5UX0NIRUNLX0NPTkQ7CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNjc2lfZXZlbnQubHVuID0KKwkJCWNtbmQtPmRldmljZS0+bHVuOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNjc2lfZXZlbnQud3dwbiwKKwkJCSZwbm9kZS0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNjc2lfZXZlbnQud3dubiwKKwkJCSZwbm9kZS0+bmxwX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zZW5zZV9rZXkgPQorCQkJY21uZC0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5hc2MgPSBjbW5kLT5zZW5zZV9idWZmZXJbMTJdOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5hc2NxID0gY21uZC0+c2Vuc2VfYnVmZmVyWzEzXTsKKwl9IGVsc2UgaWYgKChjbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpICYmCisJCSAgICAgZmNwaV9wYXJtICYmCisJCSAgICAgKChiZTMyX3RvX2NwdShmY3Byc3AtPnJzcFJlc0lkKSAhPSBmY3BpX3Bhcm0pIHx8CisJCQkoKHNjc2lfc3RhdHVzID09IFNBTV9TVEFUX0dPT0QpICYmCisJCQkhKHJlc3BfaW5mbyAmIChSRVNJRF9VTkRFUiB8IFJFU0lEX09WRVIpKSkpKSB7CisJCS8qCisJCSAqIElmIHN0YXR1cyBpcyBnb29kIG9yIHJlc2lkIGRvZXMgbm90IG1hdGNoIHdpdGggZmNwX3BhcmFtIGFuZAorCQkgKiB0aGVyZSBpcyB2YWxpZCBmY3BpX3Bhcm0sIHRoZW4gdGhlcmUgaXMgYSByZWFkX2NoZWNrIGVycm9yCisJCSAqLworCQlmYXN0X3BhdGhfZXZ0ID0gbHBmY19hbGxvY19mYXN0X2V2dChwaGJhKTsKKwkJaWYgKCFmYXN0X3BhdGhfZXZ0KQorCQkJcmV0dXJuOworCQlmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmhlYWRlci5ldmVudF90eXBlID0KKwkJCUZDX1JFR19GQUJSSUNfRVZFTlQ7CisJCWZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IuaGVhZGVyLnN1YmNhdGVnb3J5ID0KKwkJCUxQRkNfRVZFTlRfRkNQUkRDSEtFUlI7CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5oZWFkZXIud3dwbiwKKwkJCSZwbm9kZS0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IuaGVhZGVyLnd3bm4sCisJCQkmcG5vZGUtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5sdW4gPSBjbW5kLT5kZXZpY2UtPmx1bjsKKwkJZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5vcGNvZGUgPSBjbW5kLT5jbW5kWzBdOworCQlmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmZjcGlwYXJhbSA9CisJCQlmY3BpX3Bhcm07CisJfSBlbHNlCisJCXJldHVybjsKKworCWZhc3RfcGF0aF9ldnQtPnZwb3J0ID0gdnBvcnQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZmYXN0X3BhdGhfZXZ0LT53b3JrX2V2dC5ldnRfbGlzdHAsICZwaGJhLT53b3JrX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOworCXJldHVybjsKK30KIHN0YXRpYyB2b2lkCiBscGZjX3Njc2lfdW5wcmVwX2RtYV9idWYoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfc2NzaV9idWYgKiBwc2IpCiB7CkBAIC00MTEsNiArNzA5LDcgQEAKIAl1aW50MzJfdCByc3BsZW4gPSAwOwogCXVpbnQzMl90IGxvZ2l0ID0gTE9HX0ZDUCB8IExPR19GQ1BfRVJST1I7CiAKKwogCS8qCiAJICogIElmIHRoaXMgaXMgYSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCwgdGhlcmUgaXMgbm8KIAkgKiAgc2NzaSBwYWNrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbHBmY19jbWQuICBUaGUgZHJpdmVyCkBAIC01MjYsNiArODI1LDcgQEAKIAogIG91dDoKIAljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KGhvc3Rfc3RhdHVzLCBzY3NpX3N0YXR1cyk7CisJbHBmY19zZW5kX3Njc2lfZXJyb3JfZXZlbnQodnBvcnQtPnBoYmEsIHZwb3J0LCBscGZjX2NtZCwgcnNwX2lvY2IpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTQyLDkgKzg0MiwxMSBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgKnRtcF9zZGV2OwogCWludCBkZXB0aCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfcGF0aF9ldnQ7CiAKIAlscGZjX2NtZC0+cmVzdWx0ID0gcElvY2JPdXQtPmlvY2IudW4udWxwV29yZFs0XTsKIAlscGZjX2NtZC0+c3RhdHVzID0gcElvY2JPdXQtPmlvY2IudWxwU3RhdHVzOworCWF0b21pY19kZWMoJnBub2RlLT5jbWRfcGVuZGluZyk7CiAKIAlpZiAobHBmY19jbWQtPnN0YXR1cykgewogCQlpZiAobHBmY19jbWQtPnN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUICYmCkBAIC01NzAsMTIgKzg3MiwzNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSU9TVEFUX05QT1JUX0JTWToKIAkJY2FzZSBJT1NUQVRfRkFCUklDX0JTWToKLQkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfQlVTX0JVU1ksIDApOworCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9UUkFOU1BPUlRfRElTUlVQVEVELCAwKTsKKwkJCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOworCQkJaWYgKCFmYXN0X3BhdGhfZXZ0KQorCQkJCWJyZWFrOworCQkJZmFzdF9wYXRoX2V2dC0+dW4uZmFicmljX2V2dC5ldmVudF90eXBlID0KKwkJCQlGQ19SRUdfRkFCUklDX0VWRU5UOworCQkJZmFzdF9wYXRoX2V2dC0+dW4uZmFicmljX2V2dC5zdWJjYXRlZ29yeSA9CisJCQkJKGxwZmNfY21kLT5zdGF0dXMgPT0gSU9TVEFUX05QT1JUX0JTWSkgPworCQkJCUxQRkNfRVZFTlRfUE9SVF9CVVNZIDogTFBGQ19FVkVOVF9GQUJSSUNfQlVTWTsKKwkJCWlmIChwbm9kZSAmJiBOTFBfQ0hLX05PREVfQUNUKHBub2RlKSkgeworCQkJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uZmFicmljX2V2dC53d3BuLAorCQkJCQkmcG5vZGUtPm5scF9wb3J0bmFtZSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLmZhYnJpY19ldnQud3dubiwKKwkJCQkJJnBub2RlLT5ubHBfbm9kZW5hbWUsCisJCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCQl9CisJCQlmYXN0X3BhdGhfZXZ0LT52cG9ydCA9IHZwb3J0OworCQkJZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0ID0KKwkJCQlMUEZDX0VWVF9GQVNUUEFUSF9NR01UX0VWVDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZmYXN0X3BhdGhfZXZ0LT53b3JrX2V2dC5ldnRfbGlzdHAsCisJCQkJJnBoYmEtPndvcmtfbGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCQlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOwogCQkJYnJlYWs7CiAJCWNhc2UgSU9TVEFUX0xPQ0FMX1JFSkVDVDoKLQkJCWlmIChscGZjX2NtZC0+cmVzdWx0ID09IFJKVF9VTkFWQUlMX1BFUk0gfHwKKwkJCWlmIChscGZjX2NtZC0+cmVzdWx0ID09IElPRVJSX0lOVkFMSURfUlBJIHx8CiAJCQkgICAgbHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9OT19SRVNPVVJDRVMgfHwKLQkJCSAgICBscGZjX2NtZC0+cmVzdWx0ID09IFJKVF9MT0dJTl9SRVFVSVJFRCkgeworCQkJICAgIGxwZmNfY21kLT5yZXN1bHQgPT0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEKSB7CiAJCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9SRVFVRVVFLCAwKTsKIAkJCQlicmVhazsKIAkJCX0gLyogZWxzZTogZmFsbCB0aHJvdWdoICovCkBAIC01ODYsNyArOTEyLDggQEAKIAogCQlpZiAoIXBub2RlIHx8ICFOTFBfQ0hLX05PREVfQUNUKHBub2RlKQogCQkgICAgfHwgKHBub2RlLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpCi0JCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0JVU19CVVNZLCBTQU1fU1RBVF9CVVNZKTsKKwkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfVFJBTlNQT1JUX0RJU1JVUFRFRCwKKwkJCQkJCSBTQU1fU1RBVF9CVVNZKTsKIAl9IGVsc2UgewogCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX09LLCAwKTsKIAl9CkBAIC02MDIsOCArOTI5LDMyIEBACiAJCQkJIHNjc2lfZ2V0X3Jlc2lkKGNtZCkpOwogCX0KIAorCWxwZmNfdXBkYXRlX3N0YXRzKHBoYmEsIGxwZmNfY21kKTsKIAlyZXN1bHQgPSBjbWQtPnJlc3VsdDsKIAlzZGV2ID0gY21kLT5kZXZpY2U7CisJaWYgKHZwb3J0LT5jZmdfbWF4X3Njc2ljbXBsX3RpbWUgJiYKKwkgICB0aW1lX2FmdGVyKGppZmZpZXMsIGxwZmNfY21kLT5zdGFydF90aW1lICsKKwkJbXNlY3NfdG9famlmZmllcyh2cG9ydC0+Y2ZnX21heF9zY3NpY21wbF90aW1lKSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmICgocG5vZGUtPmNtZF9xZGVwdGggPiBhdG9taWNfcmVhZCgmcG5vZGUtPmNtZF9wZW5kaW5nKSAmJgorCQkgICAgKGF0b21pY19yZWFkKCZwbm9kZS0+Y21kX3BlbmRpbmcpID4gTFBGQ19NSU5fVEdUX1FERVBUSCkgJiYKKwkJICAgICgoY21kLT5jbW5kWzBdID09IFJFQURfMTApIHx8IChjbWQtPmNtbmRbMF0gPT0gV1JJVEVfMTApKSkpCisJCQlwbm9kZS0+Y21kX3FkZXB0aCA9IGF0b21pY19yZWFkKCZwbm9kZS0+Y21kX3BlbmRpbmcpOworCisJCXBub2RlLT5sYXN0X2NoYW5nZV90aW1lID0gamlmZmllczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKChwbm9kZS0+Y21kX3FkZXB0aCA8IExQRkNfTUFYX1RHVF9RREVQVEgpICYmCisJCSAgIHRpbWVfYWZ0ZXIoamlmZmllcywgcG5vZGUtPmxhc3RfY2hhbmdlX3RpbWUgKworCQkJbXNlY3NfdG9famlmZmllcyhMUEZDX1RHVFFfSU5URVJWQUwpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJcG5vZGUtPmNtZF9xZGVwdGggKz0gcG5vZGUtPmNtZF9xZGVwdGggKgorCQkJTFBGQ19UR1RRX1JBTVBVUF9QQ0VOVCAvIDEwMDsKKwkJaWYgKHBub2RlLT5jbWRfcWRlcHRoID4gTFBGQ19NQVhfVEdUX1FERVBUSCkKKwkJCXBub2RlLT5jbWRfcWRlcHRoID0gTFBGQ19NQVhfVEdUX1FERVBUSDsKKwkJcG5vZGUtPmxhc3RfY2hhbmdlX3RpbWUgPSBqaWZmaWVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0KKwogCWxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIApAQCAtNjQ3LDYgKzk5OCw5IEBACiAJCQkJcG5vZGUtPmxhc3RfcmFtcF91cF90aW1lID0gamlmZmllczsKIAkJCX0KIAkJfQorCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudChwaGJhLCB2cG9ydCwgcG5vZGUsCisJCQkweEZGRkZGRkZGLAorCQkJc2Rldi0+cXVldWVfZGVwdGggLSAxLCBzZGV2LT5xdWV1ZV9kZXB0aCk7CiAJfQogCiAJLyoKQEAgLTY3Niw2ICsxMDMwLDkgQEAKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKIAkJCQkJICIwNzExIGRldGVjdGVkIHF1ZXVlIGZ1bGwgLSBsdW4gcXVldWUgIgogCQkJCQkgImRlcHRoIGFkanVzdGVkIHRvICVkLlxuIiwgZGVwdGgpOworCQkJbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQocGhiYSwgdnBvcnQsCisJCQkJcG5vZGUsIDB4RkZGRkZGRkYsCisJCQkJZGVwdGgrMSwgZGVwdGgpOwogCQl9CiAJfQogCkBAIC02OTIsNiArMTA0OSwyNCBAQAogCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CiB9CiAKKy8qKgorICogbHBmY19mY3BjbWRfdG9faW9jYiAtIGNvcHkgdGhlIGZjcF9jbWQgZGF0YSBpbnRvIHRoZSBJT0NCLgorICogQGRhdGE6IEEgcG9pbnRlciB0byB0aGUgaW1tZWRpYXRlIGNvbW1hbmQgZGF0YSBwb3J0aW9uIG9mIHRoZSBJT0NCLgorICogQGZjcF9jbW5kOiBUaGUgRkNQIENvbW1hbmQgdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgU0NTSSBsYXllci4KKyAqCisgKiBUaGUgcm91dGluZSBjb3BpZXMgdGhlIGVudGlyZSBGQ1AgY29tbWFuZCBmcm9tIEBmY3BfY21uZCB0byBAZGF0YSB3aGlsZQorICogYnl0ZSBzd2FwcGluZyB0aGUgZGF0YSB0byBiaWcgZW5kaWFuIGZvcm1hdCBmb3IgdHJhbnNtaXNzaW9uIG9uIHRoZSB3aXJlLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfZmNwY21kX3RvX2lvY2IodWludDhfdCAqZGF0YSwgc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZCkKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpOworCSAgICAgaSArPSBzaXplb2YodWludDMyX3QpLCBqKyspIHsKKwkJKCh1aW50MzJfdCAqKWRhdGEpW2pdID0gY3B1X3RvX2JlMzIoKCh1aW50MzJfdCAqKWZjcF9jbW5kKVtqXSk7CisJfQorfQorCiBzdGF0aWMgdm9pZAogbHBmY19zY3NpX3ByZXBfY21uZChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX3Njc2lfYnVmICpscGZjX2NtZCwKIAkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpwbm9kZSkKQEAgLTc1OCw3ICsxMTMzLDggQEAKIAkJZmNwX2NtbmQtPmZjcENudGwzID0gMDsKIAkJcGhiYS0+ZmM0Q29udHJvbFJlcXVlc3RzKys7CiAJfQotCisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykKKwkJbHBmY19mY3BjbWRfdG9faW9jYihpb2NiX2NtZC0+dW5zbGkzLmZjcF9leHQuaWNkLCBmY3BfY21uZCk7CiAJLyoKIAkgKiBGaW5pc2ggaW5pdGlhbGl6aW5nIHRob3NlIElPQ0IgZmllbGRzIHRoYXQgYXJlIGluZGVwZW5kZW50CiAJICogb2YgdGhlIHNjc2lfY21uZCByZXF1ZXN0X2J1ZmZlcgpAQCAtNzk4LDExICsxMTc0LDEzIEBACiAJcGlvY2IgPSAmcGlvY2JxLT5pb2NiOwogCiAJZmNwX2NtbmQgPSBscGZjX2NtZC0+ZmNwX2NtbmQ7Ci0JaW50X3RvX3Njc2lsdW4obHVuLCAmbHBmY19jbWQtPmZjcF9jbW5kLT5mY3BfbHVuKTsKKwkvKiBDbGVhciBvdXQgYW55IG9sZCBkYXRhIGluIHRoZSBGQ1AgY29tbWFuZCBhcmVhICovCisJbWVtc2V0KGZjcF9jbW5kLCAwLCBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CisJaW50X3RvX3Njc2lsdW4obHVuLCAmZmNwX2NtbmQtPmZjcF9sdW4pOwogCWZjcF9jbW5kLT5mY3BDbnRsMiA9IHRhc2tfbWdtdF9jbWQ7Ci0KKwlpZiAodnBvcnQtPnBoYmEtPnNsaV9yZXYgPT0gMykKKwkJbHBmY19mY3BjbWRfdG9faW9jYihwaW9jYi0+dW5zbGkzLmZjcF9leHQuaWNkLCBmY3BfY21uZCk7CiAJcGlvY2ItPnVscENvbW1hbmQgPSBDTURfRkNQX0lDTU5ENjRfQ1I7Ci0KIAlwaW9jYi0+dWxwQ29udGV4dCA9IG5kbHAtPm5scF9ycGk7CiAJaWYgKG5kbHAtPm5scF9mY3BfaW5mbyAmIE5MUF9GQ1BfMl9ERVZJQ0UpIHsKIAkJcGlvY2ItPnVscEZDUDJSY3Z5ID0gMTsKQEAgLTk2Nyw5ICsxMzQ1LDEyIEBACiAJICogdHJhbnNwb3J0IGlzIHN0aWxsIHRyYW5zaXRpb25pbmcuCiAJICovCiAJaWYgKCFuZGxwIHx8ICFOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7Ci0JCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0JVU19CVVNZLCAwKTsKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfVFJBTlNQT1JUX0RJU1JVUFRFRCwgMCk7CiAJCWdvdG8gb3V0X2ZhaWxfY29tbWFuZDsKIAl9CisJaWYgKGF0b21pY19yZWFkKCZuZGxwLT5jbWRfcGVuZGluZykgPj0gbmRscC0+Y21kX3FkZXB0aCkKKwkJZ290byBvdXRfaG9zdF9idXN5OworCiAJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZihwaGJhKTsKIAlpZiAobHBmY19jbWQgPT0gTlVMTCkgewogCQlscGZjX2FkanVzdF9xdWV1ZV9kZXB0aChwaGJhKTsKQEAgLTk4MCw2ICsxMzYxLDcgQEAKIAkJZ290byBvdXRfaG9zdF9idXN5OwogCX0KIAorCWxwZmNfY21kLT5zdGFydF90aW1lID0gamlmZmllczsKIAkvKgogCSAqIFN0b3JlIHRoZSBtaWRsYXllcidzIGNvbW1hbmQgc3RydWN0dXJlIGZvciB0aGUgY29tcGxldGlvbiBwaGFzZQogCSAqIGFuZCBjb21wbGV0ZSB0aGUgY29tbWFuZCBpbml0aWFsaXphdGlvbi4KQEAgLTk4Nyw2ICsxMzY5LDcgQEAKIAlscGZjX2NtZC0+cENtZCAgPSBjbW5kOwogCWxwZmNfY21kLT5yZGF0YSA9IHJkYXRhOwogCWxwZmNfY21kLT50aW1lb3V0ID0gMDsKKwlscGZjX2NtZC0+c3RhcnRfdGltZSA9IGppZmZpZXM7CiAJY21uZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopbHBmY19jbWQ7CiAJY21uZC0+c2NzaV9kb25lID0gZG9uZTsKIApAQCAtOTk2LDYgKzEzNzksNyBAQAogCiAJbHBmY19zY3NpX3ByZXBfY21uZCh2cG9ydCwgbHBmY19jbWQsIG5kbHApOwogCisJYXRvbWljX2luYygmbmRscC0+Y21kX3BlbmRpbmcpOwogCWVyciA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgJnBoYmEtPnNsaS5yaW5nW3BzbGktPmZjcF9yaW5nXSwKIAkJCQkgICZscGZjX2NtZC0+Y3VyX2lvY2JxLCBTTElfSU9DQl9SRVRfSU9DQik7CiAJaWYgKGVycikKQEAgLTEwMTAsNiArMTM5NCw3IEBACiAJcmV0dXJuIDA7CiAKICBvdXRfaG9zdF9idXN5X2ZyZWVfYnVmOgorCWF0b21pY19kZWMoJm5kbHAtPmNtZF9wZW5kaW5nKTsKIAlscGZjX3Njc2lfdW5wcmVwX2RtYV9idWYocGhiYSwgbHBmY19jbWQpOwogCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAgb3V0X2hvc3RfYnVzeToKQEAgLTExNDUsNiArMTUzMCw3IEBACiAJaW50IHJldCA9IFNVQ0NFU1M7CiAJaW50IHN0YXR1czsKIAlpbnQgY250OworCXN0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHNjc2lfZXZlbnQ7CiAKIAlscGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIoY21uZCk7CiAJLyoKQEAgLTExNjMsNiArMTU0OSwxOSBAQAogCQkJYnJlYWs7CiAJCXBub2RlID0gcmRhdGEtPnBub2RlOwogCX0KKworCXNjc2lfZXZlbnQuZXZlbnRfdHlwZSA9IEZDX1JFR19TQ1NJX0VWRU5UOworCXNjc2lfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX1RHVFJFU0VUOworCXNjc2lfZXZlbnQubHVuID0gMDsKKwltZW1jcHkoc2NzaV9ldmVudC53d3BuLCAmcG5vZGUtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwltZW1jcHkoc2NzaV9ldmVudC53d25uLCAmcG5vZGUtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJc2l6ZW9mKHNjc2lfZXZlbnQpLAorCQkoY2hhciAqKSZzY3NpX2V2ZW50LAorCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKwogCWlmICghcmRhdGEgfHwgcG5vZGUtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRkNQLAogCQkJCSAiMDcyMSBMVU4gUmVzZXQgcnBvcnQgIgpAQCAtMTI0MiwxMCArMTY0MSwyMyBAQAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOwogCWludCBtYXRjaDsKLQlpbnQgcmV0ID0gU1VDQ0VTUywgc3RhdHVzLCBpOworCWludCByZXQgPSBTVUNDRVNTLCBzdGF0dXMgPSBTVUNDRVNTLCBpOwogCWludCBjbnQ7CiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZDsKIAl1bnNpZ25lZCBsb25nIGxhdGVyOworCXN0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHNjc2lfZXZlbnQ7CisKKwlzY3NpX2V2ZW50LmV2ZW50X3R5cGUgPSBGQ19SRUdfU0NTSV9FVkVOVDsKKwlzY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9CVVNSRVNFVDsKKwlzY3NpX2V2ZW50Lmx1biA9IDA7CisJbWVtY3B5KHNjc2lfZXZlbnQud3dwbiwgJnZwb3J0LT5mY19wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwltZW1jcHkoc2NzaV9ldmVudC53d25uLCAmdnBvcnQtPmZjX25vZGVuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQlzaXplb2Yoc2NzaV9ldmVudCksCisJCShjaGFyICopJnNjc2lfZXZlbnQsCisJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOwogCiAJbHBmY19ibG9ja19lcnJvcl9oYW5kbGVyKGNtbmQpOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCmluZGV4IGRhYmE5MjMuLjQzN2YxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCkBAIC0xMDcsNiArMTA3LDEwIEBACiAKIH07CiAKK3N0cnVjdCBscGZjX3Njc2ljbWRfYmt0IHsKKwl1aW50MzJfdCBjbWRfY291bnQ7Cit9OworCiBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBzY3NpX2NtbmQgKnBDbWQ7CkBAIC0xMzksNiArMTQzLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgbHBmY19pb2NicSBjdXJfaW9jYnE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRxOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKIH07CiAKICNkZWZpbmUgTFBGQ19TQ1NJX0RNQV9FWFRfU0laRSAyNjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDUwZmUwNzYuLjhhYjViYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTY2LDEwICs2NywxNiBAQAogCUxQRkNfQUJPUlRfSU9DQgogfSBscGZjX2lvY2JfdHlwZTsKIAotCQkvKiBTTEktMi9TTEktMyBwcm92aWRlIGRpZmZlcmVudCBzaXplZCBpb2Nicy4gIEdpdmVuIGEgcG9pbnRlcgotCQkgKiB0byB0aGUgc3RhcnQgb2YgdGhlIHJpbmcsIGFuZCB0aGUgc2xvdCBudW1iZXIgb2YgdGhlCi0JCSAqIGRlc2lyZWQgaW9jYiBlbnRyeSwgY2FsYyBhIHBvaW50ZXIgdG8gdGhhdCBlbnRyeS4KLQkJICovCisvKioKKyAqIGxwZmNfY21kX2lvY2I6IEdldCBuZXh0IGNvbW1hbmQgaW9jYiBlbnRyeSBpbiB0aGUgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBwb2ludGVyIHRvIG5leHQgY29tbWFuZCBpb2NiIGVudHJ5CisgKiBpbiB0aGUgY29tbWFuZCByaW5nLiBUaGUgY2FsbGVyIG11c3QgaG9sZCBoYmFsb2NrIHRvIHByZXZlbnQKKyAqIG90aGVyIHRocmVhZHMgY29uc3VtZSB0aGUgbmV4dCBjb21tYW5kIGlvY2IuCisgKiBTTEktMi9TTEktMyBwcm92aWRlIGRpZmZlcmVudCBzaXplZCBpb2Nicy4KKyAqKi8KIHN0YXRpYyBpbmxpbmUgSU9DQl90ICoKIGxwZmNfY21kX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC03Nyw2ICs4NCwxNiBAQAogCQkJICAgcHJpbmctPmNtZGlkeCAqIHBoYmEtPmlvY2JfY21kX3NpemUpOwogfQogCisvKioKKyAqIGxwZmNfcmVzcF9pb2NiOiBHZXQgbmV4dCByZXNwb25zZSBpb2NiIGVudHJ5IGluIHRoZSByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBvaW50ZXIgdG8gbmV4dCByZXNwb25zZSBpb2NiIGVudHJ5CisgKiBpbiB0aGUgcmVzcG9uc2UgcmluZy4gVGhlIGNhbGxlciBtdXN0IGhvbGQgaGJhbG9jayB0byBtYWtlIHN1cmUKKyAqIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNvbnN1bWUgdGhlIG5leHQgcmVzcG9uc2UgaW9jYi4KKyAqIFNMSS0yL1NMSS0zIHByb3ZpZGUgZGlmZmVyZW50IHNpemVkIGlvY2JzLgorICoqLwogc3RhdGljIGlubGluZSBJT0NCX3QgKgogbHBmY19yZXNwX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC04NCw2ICsxMDEsMTUgQEAKIAkJCSAgIHByaW5nLT5yc3BpZHggKiBwaGJhLT5pb2NiX3JzcF9zaXplKTsKIH0KIAorLyoqCisgKiBfX2xwZmNfc2xpX2dldF9pb2NicTogQWxsb2NhdGVzIGFuIGlvY2Igb2JqZWN0IGZyb20gaW9jYiBwb29sLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBhbGxvY2F0ZXMgYSBuZXcgZHJpdmVyIGlvY2Igb2JqZWN0IGZyb20gdGhlIGlvY2IgcG9vbC4gSWYgdGhlCisgKiBhbGxvY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgcG9pbnRlciB0byB0aGUgbmV3bHkKKyAqIGFsbG9jYXRlZCBpb2NiIG9iamVjdCBlbHNlIGl0IHJldHVybnMgTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19pb2NicSAqCiBfX2xwZmNfc2xpX2dldF9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC05NCw2ICsxMjAsMTUgQEAKIAlyZXR1cm4gaW9jYnE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfZ2V0X2lvY2JxOiBBbGxvY2F0ZXMgYW4gaW9jYiBvYmplY3QgZnJvbSBpb2NiIHBvb2wuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGFsbG9jYXRlcyBhIG5ldyBkcml2ZXIgaW9jYiBvYmplY3QgZnJvbSB0aGUgaW9jYiBwb29sLiBJZiB0aGUKKyAqIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXdseQorICogYWxsb2NhdGVkIGlvY2Igb2JqZWN0IGVsc2UgaXQgcmV0dXJucyBOVUxMLgorICoqLwogc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19zbGlfZ2V0X2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTEwNiw2ICsxNDEsMTYgQEAKIAlyZXR1cm4gaW9jYnE7CiB9CiAKKy8qKgorICogX19scGZjX3NsaV9yZWxlYXNlX2lvY2JxOiBSZWxlYXNlIGlvY2IgdG8gdGhlIGlvY2IgcG9vbC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBpb2NicTogUG9pbnRlciB0byBkcml2ZXIgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gcmVsZWFzZSBkcml2ZXIKKyAqIGlvY2Igb2JqZWN0IHRvIHRoZSBpb2NiIHBvb2wuIFRoZSBpb3RhZyBpbiB0aGUgaW9jYiBvYmplY3QKKyAqIGRvZXMgbm90IGNoYW5nZSBmb3IgZWFjaCB1c2Ugb2YgdGhlIGlvY2Igb2JqZWN0LiBUaGlzIGZ1bmN0aW9uCisgKiBjbGVhcnMgYWxsIG90aGVyIGZpZWxkcyBvZiB0aGUgaW9jYiBvYmplY3Qgd2hlbiBpdCBpcyBmcmVlZC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBfX2xwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnEpCiB7CkBAIC0xMTgsNiArMTYzLDE0IEBACiAJbGlzdF9hZGRfdGFpbCgmaW9jYnEtPmxpc3QsICZwaGJhLT5scGZjX2lvY2JfbGlzdCk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmVsZWFzZV9pb2NicTogUmVsZWFzZSBpb2NiIHRvIHRoZSBpb2NiIHBvb2wuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaW9jYnE6IFBvaW50ZXIgdG8gZHJpdmVyIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIHRvIHJlbGVhc2UgdGhlIGlvY2IgdG8KKyAqIGlvY2IgcG9vbC4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnEpCiB7CkBAIC0xMzEsMTAgKzE4NCwyMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiB9CiAKLS8qCi0gKiBUcmFuc2xhdGUgdGhlIGlvY2IgY29tbWFuZCB0byBhbiBpb2NiIGNvbW1hbmQgdHlwZSB1c2VkIHRvIGRlY2lkZSB0aGUgZmluYWwKLSAqIGRpc3Bvc2l0aW9uIG9mIGVhY2ggY29tcGxldGVkIElPQ0IuCi0gKi8KKy8qKgorICogbHBmY19zbGlfaW9jYl9jbWRfdHlwZTogR2V0IHRoZSBpb2NiIHR5cGUuCisgKiBAaW9jYl9jbW5kIDogaW9jYiBjb21tYW5kIGNvZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgcmluZyBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW9jYiB0eXBlLgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIHRoZSBpb2NiIGNvbW1hbmQgdG8gYW4gaW9jYiBjb21tYW5kIHR5cGUgdXNlZCB0bworICogZGVjaWRlIHRoZSBmaW5hbCBkaXNwb3NpdGlvbiBvZiBlYWNoIGNvbXBsZXRlZCBJT0NCLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqIExQRkNfVU5LTk9XTl9JT0NCIGlmIGl0IGlzIGFuIHVuc3VwcG9ydGVkIGlvY2IKKyAqIExQRkNfU09MX0lPQ0IgICAgIGlmIGl0IGlzIGEgc29saWNpdGVkIGlvY2IgY29tcGxldGlvbgorICogTFBGQ19BQk9SVF9JT0NCICAgaWYgaXQgaXMgYW4gYWJvcnQgaW9jYgorICogTFBGQ19VTlNPTF9JT0NCICAgaWYgaXQgaXMgYW4gdW5zb2xpY2l0ZWQgaW9jYgorICoKKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2suCisgKiovCiBzdGF0aWMgbHBmY19pb2NiX3R5cGUKIGxwZmNfc2xpX2lvY2JfY21kX3R5cGUodWludDhfdCBpb2NiX2NtbmQpCiB7CkBAIC0yMzAsNiArMjk0LDE3IEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmluZ19tYXA6IElzc3VlIGNvbmZpZ19yaW5nIG1ib3ggZm9yIGFsbCByaW5ncy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFNMSSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiB0byBjb25maWd1cmUgZXZlcnkgcmluZyBvZiB0aGUgSEJBJ3MgU0xJIGludGVyZmFjZS4gVGhlCisgKiBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2suIFRoaXMgZnVuY3Rpb24gaXNzdWVzCisgKiBhIGNvbmZpZ19yaW5nIG1haWxib3ggY29tbWFuZCBmb3IgZWFjaCByaW5nLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBlbHNlIHJldHVybnMgYSBuZWdhdGl2ZQorICogZXJyb3IgY29kZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX3JpbmdfbWFwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI2Miw2ICszMzcsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGxwZmNfc2xpX3Jpbmd0eGNtcGxfcHV0OiBBZGRzIG5ldyBpb2NiIHRvIHRoZSB0eGNtcGxxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4gVGhlIGZ1bmN0aW9uIGFkZHMgdGhlCisgKiBuZXcgaW9jYiB0byB0eGNtcGxxIG9mIHRoZSBnaXZlbiByaW5nLiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zCisgKiAwLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgRUxTIHJpbmcsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmCisgKiB0aGVyZSBpcyBhIHZwb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGUgRUxTIGNvbW1hbmQuIFRoaXMgZnVuY3Rpb24gYWxzbworICogc3RhcnRzIGVsc190bW9mdW5jIHRpbWVyIGlmIHRoaXMgaXMgYW4gRUxTIGNvbW1hbmQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9yaW5ndHhjbXBsX3B1dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYikKQEAgLTI4Miw2ICszNjksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yaW5ndHhfZ2V0OiBHZXQgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHhxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gZ2V0IG5leHQKKyAqIGlvY2IgaW4gdHhxIG9mIHRoZSBnaXZlbiByaW5nLiBJZiB0aGVyZSBpcyBhbnkgaW9jYiBpbgorICogdGhlIHR4cSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmlyc3QgaW9jYiBpbiB0aGUgbGlzdCBhZnRlcgorICogcmVtb3ZpbmcgdGhlIGlvY2IgZnJvbSB0aGUgbGlzdCwgZWxzZSBpdCByZXR1cm5zIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19zbGlfcmluZ3R4X2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTI5MywxNCArMzkwLDI1IEBACiAJcmV0dXJuIGNtZF9pb2NiOwogfQogCisvKioKKyAqIGxwZmNfc2xpX25leHRfaW9jYl9zbG90OiBHZXQgbmV4dCBpb2NiIHNsb3QgaW4gdGhlIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCBhbmQgdGhlIGNhbGxlciBtdXN0IHBvc3QgdGhlCisgKiBpb2NiIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBsb2NrLiBJZiB0aGUgY2FsbGVyIHJlbGVhc2VzIHRoZSBsb2NrLAorICogaW9jYiBzbG90IHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbiBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBpb2NiIHNsb3QgaWYgdGhlcmUKKyAqIGlzIGF2YWlsYWJsZSBzbG90IGluIHRoZSByaW5nLCBlbHNlIGl0IHJldHVybnMgTlVMTC4KKyAqIElmIHRoZSBnZXQgaW5kZXggb2YgdGhlIHJpbmcgaXMgYWhlYWQgb2YgdGhlIHB1dCBpbmRleCwgdGhlIGZ1bmN0aW9uCisgKiB3aWxsIHBvc3QgYW4gZXJyb3IgYXR0ZW50aW9uIGV2ZW50IHRvIHRoZSB3b3JrZXIgdGhyZWFkIHRvIHRha2UgdGhlCisgKiBIQkEgdG8gb2ZmbGluZSBzdGF0ZS4KKyAqKi8KIHN0YXRpYyBJT0NCX3QgKgogbHBmY19zbGlfbmV4dF9pb2NiX3Nsb3QgKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewotCXN0cnVjdCBscGZjX3BncCAqcGdwID0gKHBoYmEtPnNsaV9yZXYgPT0gMykgPwotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnRbcHJpbmctPnJpbmdub10gOgotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydFtwcmluZy0+cmluZ25vXTsKKwlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9ICZwaGJhLT5wb3J0X2dwW3ByaW5nLT5yaW5nbm9dOwogCXVpbnQzMl90ICBtYXhfY21kX2lkeCA9IHByaW5nLT5udW1DaW9jYjsKLQogCWlmICgocHJpbmctPm5leHRfY21kaWR4ID09IHByaW5nLT5jbWRpZHgpICYmCiAJICAgKCsrcHJpbmctPm5leHRfY21kaWR4ID49IG1heF9jbWRfaWR4KSkKIAkJcHJpbmctPm5leHRfY21kaWR4ID0gMDsKQEAgLTMzNiw2ICs0NDQsMTggQEAKIAlyZXR1cm4gbHBmY19jbWRfaW9jYihwaGJhLCBwcmluZyk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfbmV4dF9pb3RhZzogR2V0IGFuIGlvdGFnIGZvciB0aGUgaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBpb2NicTogUG9pbnRlciB0byBkcml2ZXIgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGFuIGlvdGFnIGZvciB0aGUgaW9jYi4gSWYgdGhlcmUgaXMgbm8gdW51c2VkIGlvdGFnIGFuZAorICogdGhlIGlvY2JxX2xvb2t1cF9sZW4gPCAweGZmZmYsIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgYmlnZ2VyIGlvdGFnX2xvb2t1cAorICogYXJyYXkgYW5kIGFzc2lnbnMgYSBuZXcgaW90YWcuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWxsb2NhdGVkIGlvdGFnIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcmV0dXJucyB6ZXJvLgorICogWmVybyBpcyBub3QgYSB2YWxpZCBpb3RhZy4KKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2suCisgKiovCiB1aW50MTZfdAogbHBmY19zbGlfbmV4dF9pb3RhZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICppb2NicSkKIHsKQEAgLTM5OSw2ICs1MTksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9zdWJtaXRfaW9jYjogU3VibWl0IGFuIGlvY2IgdG8gdGhlIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAaW9jYjogUG9pbnRlciB0byBpb2NiIHNsb3QgaW4gdGhlIHJpbmcuCisgKiBAbmV4dGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIGlvY2Igb2JqZWN0IHdoaWNoIG5lZWQgdG8gYmUKKyAqICAgICAgICAgICAgcG9zdGVkIHRvIGZpcm13YXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIHBvc3QgYSBuZXcgaW9jYiB0bworICogdGhlIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgbmV3IGlvY2IgdG8gcmluZyBpb2NiIHNsb3QgYW5kCisgKiB1cGRhdGVzIHRoZSByaW5nIHBvaW50ZXJzLiBJdCBhZGRzIHRoZSBuZXcgaW9jYiB0byB0eGNtcGxxIGlmIHRoZXJlIGlzCisgKiBhIGNvbXBsZXRpb24gY2FsbCBiYWNrIGZvciB0aGlzIGlvY2IgZWxzZSB0aGUgZnVuY3Rpb24gd2lsbCBmcmVlIHRoZQorICogaW9jYiBvYmplY3QuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfc3VibWl0X2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCUlPQ0JfdCAqaW9jYiwgc3RydWN0IGxwZmNfaW9jYnEgKm5leHRpb2NiKQpAQCAtNDQxLDYgKzU3NSwxOCBAQAogCXdyaXRlbChwcmluZy0+Y21kaWR4LCAmcGhiYS0+aG9zdF9ncFtwcmluZy0+cmluZ25vXS5jbWRQdXRJbngpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3VwZGF0ZV9mdWxsX3Jpbmc6IFVwZGF0ZSB0aGUgY2hpcCBhdHRlbnRpb24gcmVnaXN0ZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrIGZvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNoaXAgYXR0ZW50aW9uIGJpdHMgZm9yIHRoZSByaW5nIHRvIGluZm9ybSBmaXJtd2FyZQorICogdGhhdCB0aGVyZSBhcmUgcGVuZGluZyB3b3JrIHRvIGJlIGRvbmUgZm9yIHRoaXMgcmluZyBhbmQgcmVxdWVzdHMgYW4KKyAqIGludGVycnVwdCB3aGVuIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgcmluZy4gVGhpcyBmdW5jdGlvbiBpcworICogY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyB1bmFibGUgdG8gcG9zdCBtb3JlIGlvY2JzIHRvIHRoZSByaW5nIGR1ZQorICogdG8gdW5hdmFpbGFiaWxpdHkgb2Ygc3BhY2UgaW4gdGhlIHJpbmcuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfdXBkYXRlX2Z1bGxfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTQ2MCw2ICs2MDYsMTUgQEAKIAlwcmluZy0+c3RhdHMuaW9jYl9jbWRfZnVsbCsrOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3VwZGF0ZV9yaW5nOiBVcGRhdGUgY2hpcCBhdHRlbnRpb24gcmVnaXN0ZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNoaXAgYXR0ZW50aW9uIHJlZ2lzdGVyIGJpdCBmb3IgdGhlCisgKiBnaXZlbiByaW5nIHRvIGluZm9ybSBIQkEgdGhhdCB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZQorICogaW4gdGhpcyByaW5nLiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3VwZGF0ZV9yaW5nKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtNDY4LDExICs2MjMsMjIgQEAKIAkvKgogCSAqIFRlbGwgdGhlIEhCQSB0aGF0IHRoZXJlIGlzIHdvcmsgdG8gZG8gaW4gdGhpcyByaW5nLgogCSAqLwotCXdtYigpOwotCXdyaXRlbChDQV9SMEFUVCA8PCAocmluZ25vICogNCksIHBoYmEtPkNBcmVnYWRkcik7Ci0JcmVhZGwocGhiYS0+Q0FyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfQ1JQX0VOQUJMRUQpKSB7CisJCXdtYigpOworCQl3cml0ZWwoQ0FfUjBBVFQgPDwgKHJpbmdubyAqIDQpLCBwaGJhLT5DQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5DQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCX0KIH0KIAorLyoqCisgKiBscGZjX3NsaV9yZXN1bWVfaW9jYjogUHJvY2VzcyBpb2NicyBpbiB0aGUgdHhxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gcG9zdCBwZW5kaW5nIGlvY2JzCisgKiBpbiB0aGUgdHhxIHRvIHRoZSBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBkcml2ZXIKKyAqIGRldGVjdHMgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSByaW5nLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3Jlc3VtZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtNTA0LDYgKzY3MCwxNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9uZXh0X2hicV9zbG90OiBHZXQgbmV4dCBoYnEgZW50cnkgZm9yIHRoZSBIQlEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaGJxbm86IEhCUSBudW1iZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gZ2V0IHRoZSBuZXh0CisgKiBhdmFpbGFibGUgc2xvdCBmb3IgdGhlIGdpdmVuIEhCUS4gSWYgdGhlcmUgaXMgZnJlZSBzbG90CisgKiBhdmFpbGFibGUgZm9yIHRoZSBIQlEgaXQgd2lsbCByZXR1cm4gcG9pbnRlciB0byB0aGUgbmV4dCBhdmFpbGFibGUKKyAqIEhCUSBlbnRyeSBlbHNlIGl0IHdpbGwgcmV0dXJuIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaGJxX2VudHJ5ICoKIGxwZmNfc2xpX25leHRfaGJxX3Nsb3Qoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBoYnFubykKIHsKQEAgLTUzOSw2ICs3MTUsMTUgQEAKIAkJCWhicXAtPmhicVB1dElkeDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFidWZfZnJlZV9hbGw6IEZyZWUgYWxsIHRoZSBoYnEgYnVmZmVycy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCB0byBmcmVlIGFsbCB0aGUKKyAqIGhicSBidWZmZXJzIHdoaWxlIHVuaW5pdGlhbGl6aW5nIHRoZSBTTEkgaW50ZXJmYWNlLiBJdCBhbHNvCisgKiBmcmVlcyB0aGUgSEJRIGJ1ZmZlcnMgcmV0dXJuZWQgYnkgdGhlIGZpcm13YXJlIGJ1dCBub3QgeWV0CisgKiBwcm9jZXNzZWQgYnkgdGhlIHVwcGVyIGxheWVycy4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX2hicWJ1Zl9mcmVlX2FsbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC01ODQsNiArNzY5LDE4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicV90b19maXJtd2FyZTogUG9zdCB0aGUgaGJxIGJ1ZmZlciB0byBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBoYnFubzogSEJRIG51bWJlci4KKyAqIEBoYnFfYnVmOiBQb2ludGVyIHRvIEhCUSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgaGJhbG9jayBoZWxkIHRvIHBvc3QgYQorICogaGJxIGJ1ZmZlciB0byB0aGUgZmlybXdhcmUuIElmIHRoZSBmdW5jdGlvbiBmaW5kcyBhbiBlbXB0eQorICogc2xvdCBpbiB0aGUgSEJRLCBpdCB3aWxsIHBvc3QgdGhlIGJ1ZmZlci4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiBwb2ludGVyIHRvIHRoZSBoYnEgZW50cnkgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBvc3QgdGhlIGJ1ZmZlcgorICogZWxzZSBpdCB3aWxsIHJldHVybiBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2hicV9lbnRyeSAqCiBscGZjX3NsaV9oYnFfdG9fZmlybXdhcmUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBoYnFubywKIAkJCSBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqaGJxX2J1ZikKQEAgLTYxMiw2ICs4MDksNyBAQAogCXJldHVybiBoYnFlOwogfQogCisvKiBIQlEgZm9yIEVMUyBhbmQgQ1QgdHJhZmZpYy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19oYnFfaW5pdCBscGZjX2Vsc19oYnEgPSB7CiAJLnJuID0gMSwKIAkuZW50cnlfY291bnQgPSAyMDAsCkBAIC02MjMsNiArODIxLDcgQEAKIAkuYWRkX2NvdW50ID0gNSwKIH07CiAKKy8qIEhCUSBmb3IgdGhlIGV4dHJhIHJpbmcgaWYgbmVlZGVkICovCiBzdGF0aWMgc3RydWN0IGxwZmNfaGJxX2luaXQgbHBmY19leHRyYV9oYnEgPSB7CiAJLnJuID0gMSwKIAkuZW50cnlfY291bnQgPSAyMDAsCkBAIC02MzQsNTEgKzgzMyw4MSBAQAogCS5hZGRfY291bnQgPSA1LAogfTsKIAorLyogQXJyYXkgb2YgSEJRcyAqLwogc3RydWN0IGxwZmNfaGJxX2luaXQgKmxwZmNfaGJxX2RlZnNbXSA9IHsKIAkmbHBmY19lbHNfaGJxLAogCSZscGZjX2V4dHJhX2hicSwKIH07CiAKKy8qKgorICogbHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxczogUG9zdCBtb3JlIGhicSBidWZmZXJzIHRvIEhCUS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBoYnFubzogSEJRIG51bWJlci4KKyAqIEBjb3VudDogTnVtYmVyIG9mIEhCUSBidWZmZXJzIHRvIGJlIHBvc3RlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCB0byBwb3N0IG1vcmUgaGJxIGJ1ZmZlcnMgdG8gdGhlCisgKiBnaXZlbiBIQlEuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgSEJRIGJ1ZmZlcnMgc3VjY2Vzc2Z1bGx5CisgKiBwb3N0ZWQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgaGJxbm8sIHVpbnQzMl90IGNvdW50KQogewotCXVpbnQzMl90IGksIHN0YXJ0LCBlbmQ7CisJdWludDMyX3QgaSwgcG9zdGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBoYnFfZG1hYnVmICpoYnFfYnVmZmVyOwotCisJTElTVF9IRUFEKGhicV9idWZfbGlzdCk7CiAJaWYgKCFwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKQogCQlyZXR1cm4gMDsKIAotCXN0YXJ0ID0gcGhiYS0+aGJxc1toYnFub10uYnVmZmVyX2NvdW50OwotCWVuZCA9IGNvdW50ICsgc3RhcnQ7Ci0JaWYgKGVuZCA+IGxwZmNfaGJxX2RlZnNbaGJxbm9dLT5lbnRyeV9jb3VudCkKLQkJZW5kID0gbHBmY19oYnFfZGVmc1toYnFub10tPmVudHJ5X2NvdW50OwotCisJaWYgKChwaGJhLT5oYnFzW2hicW5vXS5idWZmZXJfY291bnQgKyBjb3VudCkgPgorCSAgICBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQpCisJCWNvdW50ID0gbHBmY19oYnFfZGVmc1toYnFub10tPmVudHJ5X2NvdW50IC0KKwkJCQkJcGhiYS0+aGJxc1toYnFub10uYnVmZmVyX2NvdW50OworCWlmICghY291bnQpCisJCXJldHVybiAwOworCS8qIEFsbG9jYXRlIEhCUSBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaGJxX2J1ZmZlciA9IChwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKShwaGJhKTsKKwkJaWYgKCFoYnFfYnVmZmVyKQorCQkJYnJlYWs7CisJCWxpc3RfYWRkX3RhaWwoJmhicV9idWZmZXItPmRidWYubGlzdCwgJmhicV9idWZfbGlzdCk7CisJfQogCS8qIENoZWNrIHdoZXRoZXIgSEJRIGlzIHN0aWxsIGluIHVzZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJaWYgKCFwaGJhLT5oYnFfaW5fdXNlKQotCQlnb3RvIG91dDsKLQotCS8qIFBvcHVsYXRlIEhCUSBlbnRyaWVzICovCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQloYnFfYnVmZmVyID0gKHBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpKHBoYmEpOwotCQlpZiAoIWhicV9idWZmZXIpCi0JCQlnb3RvIGVycjsKLQkJaGJxX2J1ZmZlci0+dGFnID0gKGkgfCAoaGJxbm8gPDwgMTYpKTsKLQkJaWYgKGxwZmNfc2xpX2hicV90b19maXJtd2FyZShwaGJhLCBoYnFubywgaGJxX2J1ZmZlcikpCisJCWdvdG8gZXJyOworCXdoaWxlICghbGlzdF9lbXB0eSgmaGJxX2J1Zl9saXN0KSkgeworCQlsaXN0X3JlbW92ZV9oZWFkKCZoYnFfYnVmX2xpc3QsIGhicV9idWZmZXIsIHN0cnVjdCBoYnFfZG1hYnVmLAorCQkJCSBkYnVmLmxpc3QpOworCQloYnFfYnVmZmVyLT50YWcgPSAocGhiYS0+aGJxc1toYnFub10uYnVmZmVyX2NvdW50IHwKKwkJCQkgICAgICAoaGJxbm8gPDwgMTYpKTsKKwkJaWYgKGxwZmNfc2xpX2hicV90b19maXJtd2FyZShwaGJhLCBoYnFubywgaGJxX2J1ZmZlcikpIHsKIAkJCXBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudCsrOwotCQllbHNlCisJCQlwb3N0ZWQrKzsKKwkJfSBlbHNlCiAJCQkocGhiYS0+aGJxc1toYnFub10uaGJxX2ZyZWVfYnVmZmVyKShwaGJhLCBoYnFfYnVmZmVyKTsKIAl9Ci0KLSBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXJldHVybiBwb3N0ZWQ7CitlcnI6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmaGJxX2J1Zl9saXN0KSkgeworCQlsaXN0X3JlbW92ZV9oZWFkKCZoYnFfYnVmX2xpc3QsIGhicV9idWZmZXIsIHN0cnVjdCBoYnFfZG1hYnVmLAorCQkJCSBkYnVmLmxpc3QpOworCQkocGhiYS0+aGJxc1toYnFub10uaGJxX2ZyZWVfYnVmZmVyKShwaGJhLCBoYnFfYnVmZmVyKTsKKwl9CiAJcmV0dXJuIDA7Ci0gZXJyOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFidWZfYWRkX2hicXM6IFBvc3QgbW9yZSBIQlEgYnVmZmVycyB0byBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBxbm86IEhCUSBudW1iZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwb3N0cyBtb3JlIGJ1ZmZlcnMgdG8gdGhlIEhCUS4gVGhpcyBmdW5jdGlvbgorICogaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIEhCUSBlbnRyaWVzCisgKiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLgorICoqLwogaW50CiBscGZjX3NsaV9oYnFidWZfYWRkX2hicXMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBxbm8pCiB7CkBAIC02ODYsNiArOTE1LDE1IEBACiAJCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmFkZF9jb3VudCkpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicWJ1Zl9pbml0X2hicXM6IFBvc3QgaW5pdGlhbCBidWZmZXJzIHRvIHRoZSBIQlEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcW5vOiAgSEJRIHF1ZXVlIG51bWJlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFNMSSBpbml0aWFsaXphdGlvbiBjb2RlIHBhdGggd2l0aAorICogbm8gbG9jayBoZWxkIHRvIHBvc3QgaW5pdGlhbCBIQlEgYnVmZmVycyB0byBmaXJtd2FyZS4gVGhlCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgSEJRIGVudHJpZXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2hicWJ1Zl9pbml0X2hicXMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBxbm8pCiB7CkBAIC02OTMsNiArOTMxLDE2IEBACiAJCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmluaXRfY291bnQpKTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFidWZfZmluZDogRmluZCB0aGUgaGJxIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggYSB0YWcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAdGFnOiBUYWcgb2YgdGhlIGhicSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMKKyAqIGZvciB0aGUgaGJxIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRhZyBpbiB0aGUgaGJxIGJ1ZmZlcgorICogbGlzdC4gSWYgaXQgZmluZHMgdGhlIGhicSBidWZmZXIsIGl0IHJldHVybnMgdGhlIGhicV9idWZmZXIgb3RoZXIgd2lzZQorICogaXQgcmV0dXJucyBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBoYnFfZG1hYnVmICoKIGxwZmNfc2xpX2hicWJ1Zl9maW5kKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgdGFnKQogewpAQCAtNzE2LDYgKzk2NCwxNSBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2ZyZWVfaGJxOiBHaXZlIGJhY2sgdGhlIGhicSBidWZmZXIgdG8gZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaGJxX2J1ZmZlcjogUG9pbnRlciB0byBIQlEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jay4gVGhpcyBmdW5jdGlvbiBnaXZlcyBiYWNrCisgKiB0aGUgaGJxIGJ1ZmZlciB0byBmaXJtd2FyZS4gSWYgdGhlIEhCUSBkb2VzIG5vdCBoYXZlIHNwYWNlIHRvCisgKiBwb3N0IHRoZSBidWZmZXIsIGl0IHdpbGwgZnJlZSB0aGUgYnVmZmVyLgorICoqLwogdm9pZAogbHBmY19zbGlfZnJlZV9oYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqaGJxX2J1ZmZlcikKIHsKQEAgLTcyOSw2ICs5ODYsMTUgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19zbGlfY2hrX21ieF9jb21tYW5kOiBDaGVjayBpZiB0aGUgbWFpbGJveCBpcyBhIGxlZ2l0aW1hdGUgbWFpbGJveC4KKyAqIEBtYnhDb21tYW5kOiBtYWlsYm94IGNvbW1hbmQgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgbWFpbGJveCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHRvIHZlcmlmeQorICogdGhhdCB0aGUgY29tcGxldGVkIG1haWxib3ggY29tbWFuZCBpcyBhIGxlZ2l0aW1hdGUgbWFpbGJveCBjb21tYW5kLiBJZiB0aGUKKyAqIGNvbXBsZXRlZCBtYWlsYm94IGlzIG5vdCBrbm93biB0byB0aGUgZnVuY3Rpb24sIGl0IHdpbGwgcmV0dXJuIE1CWF9TSFVURE9XTgorICogYW5kIHRoZSBtYWlsYm94IGV2ZW50IGhhbmRsZXIgd2lsbCB0YWtlIHRoZSBIQkEgb2ZmbGluZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2Noa19tYnhfY29tbWFuZCh1aW50OF90IG1ieENvbW1hbmQpCiB7CkBAIC03ODUsNiArMTA1MSw4IEBACiAJY2FzZSBNQlhfUkVHX1ZQSToKIAljYXNlIE1CWF9VTlJFR19WUEk6CiAJY2FzZSBNQlhfSEVBUlRCRUFUOgorCWNhc2UgTUJYX1BPUlRfQ0FQQUJJTElUSUVTOgorCWNhc2UgTUJYX1BPUlRfSU9WX0NPTlRST0w6CiAJCXJldCA9IG1ieENvbW1hbmQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC03OTMsNiArMTA2MSwxOSBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorCisvKioKKyAqIGxwZmNfc2xpX3dha2VfbWJveF93YWl0OiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIG1ib3ggaXNzdWVkIGZyb20KKyAqICAgICAgICAgIGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWJveHE6IFBvaW50ZXIgdG8gbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgaXMgY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIGZvciBtYWlsYm94IGNvbW1hbmRzIGlzc3VlZCBmcm9tCisgKiBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZQorICogbWFpbGJveCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHdha2UgdXAgdGhyZWFkIHdhaXRpbmcgb24gdGhlIHdhaXQgcXVldWUgcG9pbnRlZCBieSBjb250ZXh0MQorICogb2YgdGhlIG1haWxib3guCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfd2FrZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYm94cSkKIHsKQEAgLTgxMiw2ICsxMDkzLDE3IEBACiAJcmV0dXJuOwogfQogCisKKy8qKgorICogbHBmY19zbGlfZGVmX21ib3hfY21wbDogRGVmYXVsdCBtYWlsYm94IGNvbXBsZXRpb24gaGFuZGxlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWI6IFBvaW50ZXIgdG8gbWFpbGJveCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGVmYXVsdCBtYWlsYm94IGNvbXBsZXRpb24gaGFuZGxlci4gSXQKKyAqIGZyZWVzIHRoZSBtZW1vcnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcGxldGVkIG1haWxib3gKKyAqIGNvbW1hbmQuIElmIHRoZSBjb21wbGV0ZWQgY29tbWFuZCBpcyBhIFJFR19MT0dJTiBtYWlsYm94IGNvbW1hbmQsCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgaXNzdWUgYSBVUkVHX0xPR0lOIHRvIHJlLWNsYWltIHRoZSBSUEkuCisgKiovCiB2b2lkCiBscGZjX3NsaV9kZWZfbWJveF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC04NDYsNiArMTEzOCwxOSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYW5kbGVfbWJfZXZlbnQ6IEhhbmRsZSBtYWlsYm94IGNvbXBsZXRpb25zIGZyb20gZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIGFsbAorICogdGhlIGNvbXBsZXRlZCBtYWlsYm94IGNvbW1hbmRzIGFuZCBnaXZlcyBpdCB0byB1cHBlciBsYXllcnMuIFRoZSBpbnRlcnJ1cHQKKyAqIHNlcnZpY2Ugcm91dGluZSBwcm9jZXNzZXMgbWFpbGJveCBjb21wbGV0aW9uIGludGVycnVwdCBhbmQgYWRkcyBjb21wbGV0ZWQKKyAqIG1haWxib3ggY29tbWFuZHMgdG8gdGhlIG1ib3hxX2NtcGwgcXVldWUgYW5kIHNpZ25hbHMgdGhlIHdvcmtlciB0aHJlYWQuCisgKiBXb3JrZXIgdGhyZWFkIGNhbGwgbHBmY19zbGlfaGFuZGxlX21iX2V2ZW50LCB3aGljaCB3aWxsIHJldHVybiB0aGUKKyAqIGNvbXBsZXRlZCBtYWlsYm94IGNvbW1hbmRzIGluIG1ib3hxX2NtcGwgcXVldWUgdG8gdGhlIHVwcGVyIGxheWVycy4gVGhpcworICogZnVuY3Rpb24gcmV0dXJucyB0aGUgbWFpbGJveCBjb21tYW5kcyB0byB0aGUgdXBwZXIgbGF5ZXIgYnkgY2FsbGluZyB0aGUKKyAqIGNvbXBsZXRpb24gaGFuZGxlciBmdW5jdGlvbiBvZiBlYWNoIG1haWxib3guCisgKiovCiBpbnQKIGxwZmNfc2xpX2hhbmRsZV9tYl9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC05NTMsNiArMTI1OCwxOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3JlcGxhY2VfaGJxYnVmZjogUmVwbGFjZSB0aGUgSEJRIGJ1ZmZlciB3aXRoIGEgbmV3IGJ1ZmZlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEB0YWc6IFRhZyBmb3IgdGhlIEhCUSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB1bnNvbGljaXRlZCBldmVudCBoYW5kbGVyIGNvZGUgcGF0aCB0byBnZXQgdGhlCisgKiBIQlEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBhbiB1bnNvbGljaXRlZCBpb2NiLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiBubyBsb2NrIGhlbGQuIEl0IHJldHVybnMgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRhZyBhbmQgcG9zdHMKKyAqIGFub3RoZXIgYnVmZmVyIHRvIHRoZSBmaXJtd2FyZS4gTm90ZSB0aGF0IHRoZSBuZXcgYnVmZmVyIG11c3QgYmUgYWxsb2NhdGVkCisgKiBiZWZvcmUgdGFraW5nIHRoZSBoYmFsb2NrIGFuZCB0aGF0IHRoZSBoYmEgbG9jayBtdXN0IGJlIGhlbGQgdW50aWwgaXQgaXMKKyAqIGZpbmlzaGVkIHdpdGggdGhlIGhicSBlbnRyeSBzd2FwLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2RtYWJ1ZiAqCiBscGZjX3NsaV9yZXBsYWNlX2hicWJ1ZmYoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCB0YWcpCiB7CkBAIC05NjIsMjIgKzEyNzksMjggQEAKIAlkbWFfYWRkcl90IHBoeXM7CS8qIG1hcHBlZCBhZGRyZXNzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWhicW5vID0gdGFnID4+IDE2OworCW5ld19oYnFfZW50cnkgPSAocGhiYS0+aGJxc1toYnFub10uaGJxX2FsbG9jX2J1ZmZlcikocGhiYSk7CiAJLyogQ2hlY2sgd2hldGhlciBIQlEgaXMgc3RpbGwgaW4gdXNlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlpZiAoIXBoYmEtPmhicV9pbl91c2UpIHsKKwkJaWYgKG5ld19oYnFfZW50cnkpCisJCQkocGhiYS0+aGJxc1toYnFub10uaGJxX2ZyZWVfYnVmZmVyKShwaGJhLAorCQkJCQkJCSAgICBuZXdfaGJxX2VudHJ5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAloYnFfZW50cnkgPSBscGZjX3NsaV9oYnFidWZfZmluZChwaGJhLCB0YWcpOwogCWlmIChoYnFfZW50cnkgPT0gTlVMTCkgeworCQlpZiAobmV3X2hicV9lbnRyeSkKKwkJCShwaGJhLT5oYnFzW2hicW5vXS5oYnFfZnJlZV9idWZmZXIpKHBoYmEsCisJCQkJCQkJICAgIG5ld19oYnFfZW50cnkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlsaXN0X2RlbCgmaGJxX2VudHJ5LT5kYnVmLmxpc3QpOwogCi0JaGJxbm8gPSB0YWcgPj4gMTY7Ci0JbmV3X2hicV9lbnRyeSA9IChwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKShwaGJhKTsKIAlpZiAobmV3X2hicV9lbnRyeSA9PSBOVUxMKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmhicV9lbnRyeS0+ZGJ1Zi5saXN0LCAmcGhiYS0+aGJxYnVmX2luX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CkBAIC05OTcsNiArMTMyMCwxOCBAQAogCXJldHVybiAmbmV3X2hicV9lbnRyeS0+ZGJ1ZjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9nZXRfYnVmZjogR2V0IHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIgdGFnLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAdGFnOiBidWZmZXIgdGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLiBXaGVuIFFVRV9CVUZUQUdfQklUIGJpdAorICogaXMgc2V0IGluIHRoZSB0YWcgdGhlIGJ1ZmZlciBpcyBwb3N0ZWQgZm9yIGEgcGFydGljdWxhciBleGNoYW5nZSwKKyAqIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgYnVmZmVyIHdpdGhvdXQgcmVwbGFjaW5nIHRoZSBidWZmZXIuCisgKiBJZiB0aGUgYnVmZmVyIGlzIGZvciB1bnNvbGljaXRlZCBFTFMgb3IgQ1QgdHJhZmZpYywgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyB0aGUgYnVmZmVyIGFuZCBhbHNvIHBvc3RzIGFub3RoZXIgYnVmZmVyIHRvIHRoZSBmaXJtd2FyZS4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19kbWFidWYgKgogbHBmY19zbGlfZ2V0X2J1ZmYoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLApAQCAtMTAwOCw2ICsxMzQzLDIxIEBACiAJCXJldHVybiBscGZjX3NsaV9yZXBsYWNlX2hicWJ1ZmYocGhiYSwgdGFnKTsKIH0KIAorCisvKioKKyAqIGxwZmNfc2xpX3Byb2Nlc3NfdW5zb2xfaW9jYjogVW5zb2xpY2l0ZWQgaW9jYiBoYW5kbGVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAc2F2ZXE6IFBvaW50ZXIgdG8gdGhlIHVuc29saWNpdGVkIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgYnkgdGhlIHJpbmcgZXZlbnQgaGFuZGxlcgorICogd2hlbiB0aGVyZSBpcyBhbiB1bnNvbGljaXRlZCBpb2NiIHBvc3RlZCB0byB0aGUgcmVzcG9uc2UgcmluZyBieSB0aGUKKyAqIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGlvY2JzCisgKiBhbmQgY2FsbHMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSByaW5nLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYm90aAorICogcXJpbmcgYnVmZmVycyBhbmQgaGJxIGJ1ZmZlcnMuCisgKiBXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDEgdGhlIGNhbGxlciBjYW4gZnJlZSB0aGUgaW9jYiBvYmplY3Qgb3RoZXJ3aXNlCisgKiB1cHBlciBsYXllciBmdW5jdGlvbnMgd2lsbCBmcmVlIHRoZSBpb2NiIG9iamVjdHMuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnNhdmVxKQpAQCAtMTE5Miw2ICsxNTQyLDE4IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaW9jYnFfbG9va3VwOiBGaW5kIGNvbW1hbmQgaW9jYiBmb3IgdGhlIGdpdmVuIHJlc3BvbnNlIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwcnNwaW9jYjogUG9pbnRlciB0byByZXNwb25zZSBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIHVwIHRoZSBpb2NiX2xvb2t1cCB0YWJsZSB0byBnZXQgdGhlIGNvbW1hbmQgaW9jYgorICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcmVzcG9uc2UgaW9jYiB1c2luZyB0aGUgaW90YWcgb2YgdGhlCisgKiByZXNwb25zZSBpb2NiLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBoYmFsb2NrIGhlbGQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbW1hbmQgaW9jYiBvYmplY3QgaWYgaXQgZmluZHMgdGhlIGNvbW1hbmQKKyAqIGlvY2IgZWxzZSByZXR1cm5zIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19zbGlfaW9jYnFfbG9va3VwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJICAgICAgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLApAQCAtMTIxNyw2ICsxNTc5LDIzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcHJvY2Vzc19zb2xfaW9jYjogcHJvY2VzcyBzb2xpY2l0ZWQgaW9jYiBjb21wbGV0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAc2F2ZXE6IFBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlvY2IgdG8gYmUgcHJvY2Vzc2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSByaW5nIGV2ZW50IGhhbmRsZXIgZm9yIG5vbi1mY3AKKyAqIHJpbmdzIHdoZW4gdGhlcmUgaXMgYSBuZXcgcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZy4KKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLiBUaGlzIGZ1bmN0aW9uCisgKiBnZXRzIHRoZSBjb21tYW5kIGlvY2IgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNwb25zZSBpb2NiIGFuZAorICogY2FsbHMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIGNvbW1hbmQgaW9jYi4gSWYgdGhlcmUKKyAqIGlzIG5vIGNvbXBsZXRpb24gaGFuZGxlciwgdGhlIGZ1bmN0aW9uIHdpbGwgZnJlZSB0aGUgcmVzb3VyY2VzCisgKiBhc3NvY2lhdGVkIHdpdGggY29tbWFuZCBpb2NiLiBJZiB0aGUgcmVzcG9uc2UgaW9jYiBpcyBmb3IKKyAqIGFuIGFscmVhZHkgYWJvcnRlZCBjb21tYW5kIGlvY2IsIHRoZSBzdGF0dXMgb2YgdGhlIGNvbXBsZXRpb24KKyAqIGlzIGNoYW5nZWQgdG8gSU9TVEFUX0xPQ0FMX1JFSkVDVC9JT0VSUl9TTElfQUJPUlRFRC4KKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX3Byb2Nlc3Nfc29sX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQkgIHN0cnVjdCBscGZjX2lvY2JxICpzYXZlcSkKQEAgLTEyMzMsNiArMTYxMiwxNyBAQAogCWlmIChjbWRpb2NicCkgewogCQlpZiAoY21kaW9jYnAtPmlvY2JfY21wbCkgewogCQkJLyoKKwkJCSAqIElmIGFuIEVMUyBjb21tYW5kIGZhaWxlZCBzZW5kIGFuIGV2ZW50IHRvIG1nbXQKKwkJCSAqIGFwcGxpY2F0aW9uLgorCQkJICovCisJCQlpZiAoc2F2ZXEtPmlvY2IudWxwU3RhdHVzICYmCisJCQkgICAgIChwcmluZy0+cmluZ25vID09IExQRkNfRUxTX1JJTkcpICYmCisJCQkgICAgIChjbWRpb2NicC0+aW9jYi51bHBDb21tYW5kID09CisJCQkJQ01EX0VMU19SRVFVRVNUNjRfQ1IpKQorCQkJCWxwZmNfc2VuZF9lbHNfZmFpbHVyZV9ldmVudChwaGJhLAorCQkJCQljbWRpb2NicCwgc2F2ZXEpOworCisJCQkvKgogCQkJICogUG9zdCBhbGwgRUxTIGNvbXBsZXRpb25zIHRvIHRoZSB3b3JrZXIgdGhyZWFkLgogCQkJICogQWxsIG90aGVyIGFyZSBwYXNzZWQgdG8gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCiAJCQkgKi8KQEAgLTEyODIsMTIgKzE2NzIsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcnNwX3BvaW50ZXJzX2Vycm9yOiBSZXNwb25zZSByaW5nIHBvaW50ZXIgZXJyb3IgaGFuZGxlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGlvY2IgcmluZyBldmVudCBoYW5kbGVycyB3aGVuCisgKiBwdXQgcG9pbnRlciBpcyBhaGVhZCBvZiB0aGUgZ2V0IHBvaW50ZXIgZm9yIGEgcmluZy4gVGhpcyBmdW5jdGlvbiBzaWduYWwKKyAqIGFuIGVycm9yIGF0dGVudGlvbiBjb25kaXRpb24gdG8gdGhlIHdvcmtlciB0aHJlYWQgYW5kIHRoZSB3b3JrZXIKKyAqIHRocmVhZCB3aWxsIHRyYW5zaXRpb24gdGhlIEhCQSB0byBvZmZsaW5lIHN0YXRlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3JzcF9wb2ludGVyc19lcnJvcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKLQlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9IChwaGJhLT5zbGlfcmV2ID09IDMpID8KLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0W3ByaW5nLT5yaW5nbm9dIDoKLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107CisJc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAmcGhiYS0+cG9ydF9ncFtwcmluZy0+cmluZ25vXTsKIAkvKgogCSAqIFJpbmcgPHJpbmdubz4gaGFuZGxlcjogcG9ydFJzcFB1dCA8cG9ydFJzcFB1dD4gaXMgYmlnZ2VyIHRoZW4KIAkgKiByc3AgcmluZyA8cG9ydFJzcE1heD4KQEAgLTEzMTIsNiArMTcxMCw1MSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3BvbGxfZXJhdHQ6IEVycm9yIGF0dGVudGlvbiBwb2xsaW5nIHRpbWVyIHRpbWVvdXQgaGFuZGxlci4KKyAqIEBwdHI6IFBvaW50ZXIgdG8gYWRkcmVzcyBvZiBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHRoZSBFcnJvciBBdHRlbnRpb24gcG9sbGluZyB0aW1lciB3aGVuIHRoZQorICogdGltZXIgdGltZXMgb3V0LiBJdCB3aWxsIGNoZWNrIHRoZSBTTEkgRXJyb3IgQXR0ZW50aW9uIHJlZ2lzdGVyIGZvcgorICogcG9zc2libGUgYXR0ZW50aW9uIGV2ZW50cy4gSWYgc28sIGl0IHdpbGwgcG9zdCBhbiBFcnJvciBBdHRlbnRpb24gZXZlbnQKKyAqIGFuZCB3YWtlIHVwIHdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyBpdC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHNldCB1cCB0aGUKKyAqIEVycm9yIEF0dGVudGlvbiBwb2xsaW5nIHRpbWVyIGZvciB0aGUgbmV4dCBwb2xsLgorICoqLwordm9pZCBscGZjX3BvbGxfZXJhdHQodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhOworCXVpbnQzMl90IGVyYXR0ID0gMDsKKworCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopcHRyOworCisJLyogQ2hlY2sgY2hpcCBIQSByZWdpc3RlciBmb3IgZXJyb3IgZXZlbnQgKi8KKwllcmF0dCA9IGxwZmNfc2xpX2NoZWNrX2VyYXR0KHBoYmEpOworCisJaWYgKGVyYXR0KQorCQkvKiBUZWxsIHRoZSB3b3JrZXIgdGhyZWFkIHRoZXJlIGlzIHdvcmsgdG8gZG8gKi8KKwkJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKKwllbHNlCisJCS8qIFJlc3RhcnQgdGhlIHRpbWVyIGZvciBuZXh0IGVyYXR0IHBvbGwgKi8KKwkJbW9kX3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsLCBqaWZmaWVzICsKKwkJCQkJSFogKiBMUEZDX0VSQVRUX1BPTExfSU5URVJWQUwpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nOiBIYW5kbGUgRkNQIHJpbmcgY29tcGxldGlvbiBpbiBwb2xsaW5nIG1vZGUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBscGZjX3F1ZXVlY29tbWFuZCwgbHBmY19wb2xsX3RpbWVvdXQsCisgKiBscGZjX2Fib3J0X2hhbmRsZXIgYW5kIGxwZmNfc2xhdmVfY29uZmlndXJlIHdoZW4gRkNQX1JJTkdfUE9MTElORworICogaXMgZW5hYmxlZC4KKyAqCisgKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgYW55IGxvY2suCisgKiBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZyB1bnRpbCBpdAorICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwdG8gdGhlIGlvY2Igd2l0aAorICogTEUgYml0IHNldC4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIG9mIHRoZSBjb21tYW5kIGlvY2IKKyAqIGlmIHRoZSByZXNwb25zZSBpb2NiIGluZGljYXRlcyBhIGNvbXBsZXRpb24gZm9yIGEgY29tbWFuZCBpb2NiIG9yIGl0IGlzCisgKiBhbiBhYm9ydCBjb21wbGV0aW9uLgorICoqLwogdm9pZCBscGZjX3NsaV9wb2xsX2ZjcF9yaW5nKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgICAgICAqcHNsaSAgPSAmcGhiYS0+c2xpOwpAQCAtMTMyMCw3ICsxNzYzLDcgQEAKIAlJT0NCX3QgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxIHJzcGlvY2JxOwotCXN0cnVjdCBscGZjX3BncCAqcGdwOworCXN0cnVjdCBscGZjX3BncCAqcGdwID0gJnBoYmEtPnBvcnRfZ3BbcHJpbmctPnJpbmdub107CiAJdWludDMyX3Qgc3RhdHVzOwogCXVpbnQzMl90IHBvcnRSc3BQdXQsIHBvcnRSc3BNYXg7CiAJaW50IHR5cGU7CkBAIC0xMzMwLDExICsxNzczLDYgQEAKIAogCXByaW5nLT5zdGF0cy5pb2NiX2V2ZW50Kys7CiAKLQlwZ3AgPSAocGhiYS0+c2xpX3JldiA9PSAzKSA/Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydFtwcmluZy0+cmluZ25vXSA6Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOwotCi0KIAkvKgogCSAqIFRoZSBuZXh0IGF2YWlsYWJsZSByZXNwb25zZSBlbnRyeSBzaG91bGQgbmV2ZXIgZXhjZWVkIHRoZSBtYXhpbXVtCiAJICogZW50cmllcy4gIElmIGl0IGRvZXMsIHRyZWF0IGl0IGFzIGFuIGFkYXB0ZXIgaGFyZHdhcmUgZXJyb3IuCkBAIC0xMzcyLDggKzE4MTAsOCBAQAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzNdLAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzRdLAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzVdLAotCQkJCQkqKCgodWludDMyX3QgKikgaXJzcCkgKyA2KSwKLQkJCQkJKigoKHVpbnQzMl90ICopIGlyc3ApICsgNykpOworCQkJCQkqKHVpbnQzMl90ICopJmlyc3AtPnVuMSwKKwkJCQkJKigodWludDMyX3QgKikmaXJzcC0+dW4xICsgMSkpOwogCQl9CiAKIAkJc3dpdGNoICh0eXBlKSB7CkBAIC0xNDY1LDE3ICsxOTAzLDI4IEBACiAJcmV0dXJuOwogfQogCi0vKgorLyoqCisgKiBscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50OiBIYW5kbGUgcmluZyBldmVudHMgb24gRkNQIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBtYXNrOiBIb3N0IGF0dGVudGlvbiByZWdpc3RlciBtYXNrIGZvciB0aGlzIHJpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBhIHJpbmcKKyAqIGV2ZW50IGZvciB0aGUgZmNwIHJpbmcuIFRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCBhbnkgbG9jay4KKyAqIFRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgZWFjaCByZXNwb25zZSBpb2NiIGluIHRoZSByZXNwb25zZSByaW5nIHVudGlsIGl0CisgKiBmaW5kcyBhbiBpb2NiIHdpdGggTEUgYml0IHNldCBhbmQgY2hhaW5zIGFsbCB0aGUgaW9jYnMgdXB0byB0aGUgaW9jYiB3aXRoCisgKiBMRSBiaXQgc2V0LiBUaGUgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgb2YgdGhlIGNvbW1hbmQgaW9jYgorICogaWYgdGhlIHJlc3BvbnNlIGlvY2IgaW5kaWNhdGVzIGEgY29tcGxldGlvbiBmb3IgYSBjb21tYW5kIGlvY2Igb3IgaXQgaXMKKyAqIGFuIGFib3J0IGNvbXBsZXRpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgbHBmY19zbGlfcHJvY2Vzc191bnNvbF9pb2NiCisgKiBmdW5jdGlvbiBpZiB0aGlzIGlzIGFuIHVuc29saWNpdGVkIGlvY2IuCiAgKiBUaGlzIHJvdXRpbmUgcHJlc3VtZXMgTFBGQ19GQ1BfUklORyBoYW5kbGluZyBhbmQgZG9lc24ndCBib3RoZXIKLSAqIHRvIGNoZWNrIGl0IGV4cGxpY2l0bHkuCi0gKi8KKyAqIHRvIGNoZWNrIGl0IGV4cGxpY2l0bHkuIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2hhbmRsZV9mYXN0X3JpbmdfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywgdWludDMyX3QgbWFzaykKIHsKLQlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9IChwaGJhLT5zbGlfcmV2ID09IDMpID8KLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0W3ByaW5nLT5yaW5nbm9dIDoKLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107CisJc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAmcGhiYS0+cG9ydF9ncFtwcmluZy0+cmluZ25vXTsKIAlJT0NCX3QgKmlyc3AgPSBOVUxMOwogCUlPQ0JfdCAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSA9IE5VTEw7CkBAIC0xNTQ4LDggKzE5OTcsOCBAQAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzNdLAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzRdLAogCQkJCQlpcnNwLT51bi51bHBXb3JkWzVdLAotCQkJCQkqKCgodWludDMyX3QgKikgaXJzcCkgKyA2KSwKLQkJCQkJKigoKHVpbnQzMl90ICopIGlyc3ApICsgNykpOworCQkJCQkqKHVpbnQzMl90ICopJmlyc3AtPnVuMSwKKwkJCQkJKigodWludDMyX3QgKikmaXJzcC0+dW4xICsgMSkpOwogCQl9CiAKIAkJc3dpdGNoICh0eXBlKSB7CkBAIC0xNjQ2LDEzICsyMDk1LDI4IEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hhbmRsZV9zbG93X3JpbmdfZXZlbnQ6IEhhbmRsZSByaW5nIGV2ZW50cyBmb3Igbm9uLUZDUCByaW5ncy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQG1hc2s6IEhvc3QgYXR0ZW50aW9uIHJlZ2lzdGVyIG1hc2sgZm9yIHRoaXMgcmluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIHdoZW4gdGhlcmUgaXMgYSByaW5nCisgKiBldmVudCBmb3Igbm9uLWZjcCByaW5ncy4gVGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIGFueSBsb2NrIC4KKyAqIFRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgZWFjaCByZXNwb25zZSBpb2NiIGluIHRoZSByZXNwb25zZSByaW5nIHVudGlsIGl0CisgKiBmaW5kcyBhbiBpb2NiIHdpdGggTEUgYml0IHNldCBhbmQgY2hhaW5zIGFsbCB0aGUgaW9jYnMgdXB0byB0aGUgaW9jYiB3aXRoCisgKiBMRSBiaXQgc2V0LiBUaGUgZnVuY3Rpb24gd2lsbCBjYWxsIGxwZmNfc2xpX3Byb2Nlc3Nfc29sX2lvY2IgZnVuY3Rpb24gaWYgdGhlCisgKiByZXNwb25zZSBpb2NiIGluZGljYXRlcyBhIGNvbXBsZXRpb24gb2YgYSBjb21tYW5kIGlvY2IuIFRoZSBmdW5jdGlvbgorICogd2lsbCBjYWxsIGxwZmNfc2xpX3Byb2Nlc3NfdW5zb2xfaW9jYiBmdW5jdGlvbiBpZiB0aGlzIGlzIGFuIHVuc29saWNpdGVkCisgKiBpb2NiLiBUaGUgZnVuY3Rpb24gZnJlZXMgdGhlIHJlc291cmNlcyBvciBjYWxscyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGlmCisgKiB0aGlzIGlvY2IgaXMgYW4gYWJvcnQgY29tcGxldGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgMCB3aGVuIHRoZSBhbGxvY2F0ZWQKKyAqIGlvY2JzIGFyZSBub3QgZnJlZWQsIG90aGVyd2lzZSByZXR1cm5zIDEuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hhbmRsZV9zbG93X3JpbmdfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywgdWludDMyX3QgbWFzaykKIHsKLQlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9IChwaGJhLT5zbGlfcmV2ID09IDMpID8KLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0W3ByaW5nLT5yaW5nbm9dIDoKLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107CisJc3RydWN0IGxwZmNfcGdwICpwZ3A7CiAJSU9DQl90ICplbnRyeTsKIAlJT0NCX3QgKmlyc3AgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicCA9IE5VTEw7CkBAIC0xNjY2LDYgKzIxMzAsNyBAQAogCWludCByYyA9IDE7CiAJdW5zaWduZWQgbG9uZyBpZmxhZzsKIAorCXBncCA9ICZwaGJhLT5wb3J0X2dwW3ByaW5nLT5yaW5nbm9dOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CiAJcHJpbmctPnN0YXRzLmlvY2JfZXZlbnQrKzsKIApAQCAtMTkwNCw2ICsyMzY5LDE2IEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZzogQWJvcnQgYWxsIGlvY2JzIGluIHRoZSByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgYWxsIGlvY2JzIGluIHRoZSBnaXZlbiByaW5nIGFuZCBmcmVlcyBhbGwgdGhlIGlvY2IKKyAqIG9iamVjdHMgaW4gdHhxLiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhbiBhYm9ydCBpb2NiIGZvciBhbGwgdGhlIGlvY2IgY29tbWFuZHMKKyAqIGluIHR4Y21wbHEuIFRoZSBpb2NicyBpbiB0aGUgdHhjbXBscSBpcyBub3QgZ3VhcmFudGVlZCB0byBjb21wbGV0ZSBiZWZvcmUKKyAqIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbi4gVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuCisgKiovCiB2b2lkCiBscGZjX3NsaV9hYm9ydF9pb2NiX3Jpbmcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC0xOTQzLDYgKzI0MTgsODMgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzOiBmbHVzaCBhbGwgaW9jYnMgaW4gdGhlIGZjcCByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgaW9jYnMgaW4gdGhlIGZjcCByaW5nIGFuZCBmcmVlcyBhbGwgdGhlIGlvY2IKKyAqIG9iamVjdHMgaW4gdHhxIGFuZCB0eGNtcGxxLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGlzc3VlIGFib3J0IGlvY2JzCisgKiBmb3IgYWxsIHRoZSBpb2NiIGNvbW1hbmRzIGluIHR4Y21wbHEsIHRoZXkgd2lsbCBqdXN0IGJlIHJldHVybmVkIHdpdGgKKyAqIElPRVJSX1NMSV9ET1dOLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBFRUggd2hlbiBkZXZpY2UncyBQQ0kKKyAqIHNsb3QgaGFzIGJlZW4gcGVybWFuZW50bHkgZGlzYWJsZWQuCisgKiovCit2b2lkCitscGZjX3NsaV9mbHVzaF9mY3BfcmluZ3Moc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxJU1RfSEVBRCh0eHEpOworCUxJU1RfSEVBRCh0eGNtcGxxKTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYjsKKwlJT0NCX3QgKmNtZCA9IE5VTEw7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAgKnByaW5nOworCisJLyogQ3VycmVudGx5LCBvbmx5IG9uZSBmY3AgcmluZyAqLworCXByaW5nID0gJnBzbGktPnJpbmdbcHNsaS0+ZmNwX3JpbmddOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogUmV0cmlldmUgZXZlcnl0aGluZyBvbiB0eHEgKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwcmluZy0+dHhxLCAmdHhxKTsKKwlwcmluZy0+dHhxX2NudCA9IDA7CisKKwkvKiBSZXRyaWV2ZSBldmVyeXRoaW5nIG9uIHRoZSB0eGNtcGxxICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcHJpbmctPnR4Y21wbHEsICZ0eGNtcGxxKTsKKwlwcmluZy0+dHhjbXBscV9jbnQgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisKKwkvKiBGbHVzaCB0aGUgdHhxICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0eHEpKSB7CisJCWlvY2IgPSBsaXN0X2dldF9maXJzdCgmdHhxLCBzdHJ1Y3QgbHBmY19pb2NicSwgbGlzdCk7CisJCWNtZCA9ICZpb2NiLT5pb2NiOworCQlsaXN0X2RlbF9pbml0KCZpb2NiLT5saXN0KTsKKworCQlpZiAoIWlvY2ItPmlvY2JfY21wbCkKKwkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7CisJCWVsc2UgeworCQkJY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0RPV047CisJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7CisJCX0KKwl9CisKKwkvKiBGbHVzaCB0aGUgdHhjbXBxICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0eGNtcGxxKSkgeworCQlpb2NiID0gbGlzdF9nZXRfZmlyc3QoJnR4Y21wbHEsIHN0cnVjdCBscGZjX2lvY2JxLCBsaXN0KTsKKwkJY21kID0gJmlvY2ItPmlvY2I7CisJCWxpc3RfZGVsX2luaXQoJmlvY2ItPmxpc3QpOworCisJCWlmICghaW9jYi0+aW9jYl9jbXBsKQorCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKKwkJZWxzZSB7CisJCQljbWQtPnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQljbWQtPnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfRE9XTjsKKwkJCShpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBpb2NiLCBpb2NiKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBscGZjX3NsaV9icmRyZWFkeTogQ2hlY2sgZm9yIGhvc3Qgc3RhdHVzIGJpdHMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWFzazogQml0IG1hc2sgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBob3N0IHN0YXR1cyByZWdpc3RlciBhbmQgY29tcGFyZXMKKyAqIHdpdGggdGhlIHByb3ZpZGVkIGJpdCBtYXNrIHRvIGNoZWNrIGlmIEhCQSBjb21wbGV0ZWQKKyAqIHRoZSByZXN0YXJ0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBpbiBhIGxvb3AgZm9yIHRoZQorICogSEJBIHRvIGNvbXBsZXRlIHJlc3RhcnQuIElmIHRoZSBIQkEgZG9lcyBub3QgcmVzdGFydCB3aXRoaW4KKyAqIDE1IGl0ZXJhdGlvbnMsIHRoZSBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBIQkEgYWdhaW4uIFRoZQorICogZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gSEJBIGZhaWwgdG8gcmVzdGFydCBvdGhlcndpc2UgcmV0dXJucworICogemVyby4KKyAqKi8KIGludAogbHBmY19zbGlfYnJkcmVhZHkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBtYXNrKQogewpAQCAtMTk5MCw2ICsyNTQyLDEzIEBACiAKICNkZWZpbmUgQkFSUklFUl9URVNUX1BBVFRFUk4gKDB4ZGVhZGJlZWYpCiAKKy8qKgorICogbHBmY19yZXNldF9iYXJyaWVyOiBNYWtlIEhCQSByZWFkeSBmb3IgSEJBIHJlc2V0LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSByZXNldHRpbmcgYW4gSEJBLiBUaGlzCisgKiBmdW5jdGlvbiByZXF1ZXN0cyBIQkEgdG8gcXVpZXNjZSBETUFzIGJlZm9yZSBhIHJlc2V0LgorICoqLwogdm9pZCBscGZjX3Jlc2V0X2JhcnJpZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXVpbnQzMl90IF9faW9tZW0gKnJlc3BfYnVmOwpAQCAtMjA2Myw2ICsyNjIyLDE3IEBACiAJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KIH0KIAorLyoqCisgKiBscGZjX3NsaV9icmRraWxsOiBJc3N1ZSBhIGtpbGxfYm9hcmQgbWFpbGJveCBjb21tYW5kLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGEga2lsbF9ib2FyZCBtYWlsYm94IGNvbW1hbmQgYW5kIHdhaXRzIGZvcgorICogdGhlIGVycm9yIGF0dGVudGlvbiBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzdG9wcGluZworICogdGhlIGZpcm13YXJlIHByb2Nlc3NpbmcuIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55CisgKiBsb2Nrcy4gVGhpcyBmdW5jdGlvbiBjYWxscyBscGZjX2hiYV9kb3duX3Bvc3QgZnVuY3Rpb24gdG8gZnJlZQorICogYW55IHBlbmRpbmcgY29tbWFuZHMgYWZ0ZXIgdGhlIGtpbGwuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxIHdoZW4gaXQKKyAqIGZhaWxzIHRvIGtpbGwgdGhlIGJvYXJkIGVsc2Ugd2lsbCByZXR1cm4gMC4KKyAqKi8KIGludAogbHBmY19zbGlfYnJka2lsbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yMTM5LDYgKzI3MDksMTcgQEAKIAlyZXR1cm4gaGFfY29weSAmIEhBX0VSQVRUID8gMCA6IDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfYnJkcmVzZXQ6IFJlc2V0IHRoZSBIQkEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIEhCQSBieSB3cml0aW5nIEhDX0lOSVRGRiB0byB0aGUgY29udHJvbAorICogcmVnaXN0ZXIuIEFmdGVyIHRoZSBIQkEgcmVzZXRzLCB0aGlzIGZ1bmN0aW9uIHJlc2V0cyBhbGwgdGhlIGlvY2IgcmluZworICogaW5kaWNlcy4gVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBQQ0kgbGF5ZXIgcGFyaXR5IGNoZWNraW5nIGR1cmluZworICogdGhlIHJlc2V0LgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgYWx3YXlzLgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuCisgKiovCiBpbnQKIGxwZmNfc2xpX2JyZHJlc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTIxOTEsNiArMjc3MiwxOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2JyZHJlc3RhcnQ6IFJlc3RhcnQgdGhlIEhCQS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgU0xJIGluaXRpYWxpemF0aW9uIGNvZGUgcGF0aCB0bworICogcmVzdGFydCB0aGUgSEJBLiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrLgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgTUJYX1JFU1RBUlQgbWFpbGJveCBjb21tYW5kIHRvIHRoZSBTTElNIGFuZAorICogcmVzZXRzIHRoZSBIQkEuIEF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCBpdCBjYWxscyBscGZjX2hiYV9kb3duX3Bvc3QKKyAqIGZ1bmN0aW9uIHRvIGZyZWUgYW55IHBlbmRpbmcgY29tbWFuZHMuIFRoZSBmdW5jdGlvbiBlbmFibGVzCisgKiBQT1NUIG9ubHkgZHVyaW5nIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgemVyby4KKyAqIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgY29tcGxldGlvbiBvZiBNQlhfUkVTVEFSVCBtYWlsYm94CisgKiBjb21tYW5kIGJlZm9yZSB0aGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24uCisgKiovCiBpbnQKIGxwZmNfc2xpX2JyZHJlc3RhcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjI1MSw2ICsyODQ1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfY2hpcHNldF9pbml0OiBXYWl0IGZvciB0aGUgcmVzdGFydCBvZiB0aGUgSEJBIGFmdGVyIGEgcmVzdGFydC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIEhCQSByZXN0YXJ0IHRvIHdhaXQgZm9yIHN1Y2Nlc3NmdWwKKyAqIHJlc3RhcnQgb2YgdGhlIEhCQS4gU3VjY2Vzc2Z1bCByZXN0YXJ0IG9mIHRoZSBIQkEgaXMgaW5kaWNhdGVkIGJ5CisgKiBIU19GRlJEWSBhbmQgSFNfTUJSRFkgYml0cy4gSWYgdGhlIEhCQSBmYWlscyB0byByZXN0YXJ0IGV2ZW4gYWZ0ZXIgMTUKKyAqIGl0ZXJhdGlvbiwgdGhlIGZ1bmN0aW9uIHdpbGwgcmVzdGFydCB0aGUgSEJBIGFnYWluLiBUaGUgZnVuY3Rpb24gcmV0dXJucworICogemVybyBpZiBIQkEgc3VjY2Vzc2Z1bGx5IHJlc3RhcnRlZCBlbHNlIHJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2NoaXBzZXRfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yMzM2LDEyICsyOTQwLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxX2NvdW50OiBHZXQgdGhlIG51bWJlciBvZiBIQlFzIHRvIGJlIGNvbmZpZ3VyZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgSEJRcyByZXF1aXJlZCB0byBiZQorICogY29uZmlndXJlZC4KKyAqKi8KIGludAogbHBmY19zbGlfaGJxX2NvdW50KHZvaWQpCiB7CiAJcmV0dXJuIEFSUkFZX1NJWkUobHBmY19oYnFfZGVmcyk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxX2VudHJ5X2NvdW50OiBDYWxjdWxhdGUgdG90YWwgbnVtYmVyIG9mIGhicSBlbnRyaWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgbnVtYmVyIG9mIGhicSBlbnRyaWVzIGluIGV2ZXJ5IEhCUSB0byBnZXQKKyAqIHRoZSB0b3RhbCBudW1iZXIgb2YgaGJxIGVudHJpZXMgcmVxdWlyZWQgZm9yIHRoZSBIQkEgYW5kIHJldHVybnMKKyAqIHRoZSB0b3RhbCBjb3VudC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2hicV9lbnRyeV9jb3VudCh2b2lkKQogewpAQCAtMjM1NCwxMiArMjk3MSwyNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFfc2l6ZTogQ2FsY3VsYXRlIG1lbW9yeSByZXF1aXJlZCBmb3IgYWxsIGhicSBlbnRyaWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGZvciBhbGwgaGJxIGVudHJpZXMKKyAqIHRvIGJlIGNvbmZpZ3VyZWQgYW5kIHJldHVybnMgdGhlIHRvdGFsIG1lbW9yeSByZXF1aXJlZC4KKyAqKi8KIGludAogbHBmY19zbGlfaGJxX3NpemUodm9pZCkKIHsKIAlyZXR1cm4gbHBmY19zbGlfaGJxX2VudHJ5X2NvdW50KCkgKiBzaXplb2Yoc3RydWN0IGxwZmNfaGJxX2VudHJ5KTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFfc2V0dXA6IGNvbmZpZ3VyZSBhbmQgaW5pdGlhbGl6ZSBIQlFzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB0aGUgU0xJIGluaXRpYWxpemF0aW9uIHRvIGNvbmZpZ3VyZQorICogYWxsIHRoZSBIQlFzIGFuZCBwb3N0IGJ1ZmZlcnMgdG8gdGhlIEhCUS4gVGhlIGNhbGxlciBpcyBub3QKKyAqIHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHplcm8gaWYgc3VjY2Vzc2Z1bAorICogZWxzZSBpdCB3aWxsIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfaGJxX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI0MTUsMTUgKzMwNDcsMjYgQEAKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAogCS8qIEluaXRpYWxseSBwb3B1bGF0ZSBvciByZXBsZW5pc2ggdGhlIEhCUXMgKi8KLQlmb3IgKGhicW5vID0gMDsgaGJxbm8gPCBoYnFfY291bnQ7ICsraGJxbm8pIHsKLQkJaWYgKGxwZmNfc2xpX2hicWJ1Zl9pbml0X2hicXMocGhiYSwgaGJxbm8pKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWZvciAoaGJxbm8gPSAwOyBoYnFubyA8IGhicV9jb3VudDsgKytoYnFubykKKwkJbHBmY19zbGlfaGJxYnVmX2luaXRfaGJxcyhwaGJhLCBoYnFubyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWxwZmNfZG9fY29uZmlnX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgc2xpX21vZGUpCisvKioKKyAqIGxwZmNfc2xpX2NvbmZpZ19wb3J0OiBJc3N1ZSBjb25maWcgcG9ydCBtYWlsYm94IGNvbW1hbmQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAc2xpX21vZGU6IHNsaSBtb2RlIC0gMi8zCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHNsaSBpbnRpYWxpemF0aW9uIGNvZGUgcGF0aAorICogdG8gaXNzdWUgY29uZmlnX3BvcnQgbWFpbGJveCBjb21tYW5kLiBUaGlzIGZ1bmN0aW9uIHJlc3RhcnRzIHRoZQorICogSEJBIGZpcm13YXJlIGFuZCBpc3N1ZXMgYSBjb25maWdfcG9ydCBtYWlsYm94IGNvbW1hbmQgdG8gY29uZmlndXJlCisgKiB0aGUgU0xJIGludGVyZmFjZSBpbiB0aGUgc2xpIG1vZGUgc3BlY2lmaWVkIGJ5IHNsaV9tb2RlCisgKiB2YXJpYWJsZS4gVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9ja3MuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcmV0dXJucyBuZWdhdGl2ZSBlcnJvcgorICogY29kZS4KKyAqKi8KK2ludAorbHBmY19zbGlfY29uZmlnX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgc2xpX21vZGUpCiB7CiAJTFBGQ19NQk9YUV90ICpwbWI7CiAJdWludDMyX3QgcmVzZXRjb3VudCA9IDAsIHJjID0gMCwgZG9uZSA9IDA7CkBAIC0yNDYwLDEzICszMTAzLDE1IEBACiAJCWlmIChyYyA9PSAtRVJFU1RBUlQpIHsKIAkJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0xJTktfVU5LTk9XTjsKIAkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHJjKSB7CisJCX0gZWxzZSBpZiAocmMpCiAJCQlicmVhazsKLQkJfQotCiAJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0lOSVRfTUJYX0NNRFM7CiAJCWxwZmNfY29uZmlnX3BvcnQocGhiYSwgcG1iKTsKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpOworCQlwaGJhLT5zbGkzX29wdGlvbnMgJj0gfihMUEZDX1NMSTNfTlBJVl9FTkFCTEVEIHwKKwkJCQkJTFBGQ19TTEkzX0hCUV9FTkFCTEVEIHwKKwkJCQkJTFBGQ19TTEkzX0NSUF9FTkFCTEVEIHwKKwkJCQkJTFBGQ19TTEkzX0lOQl9FTkFCTEVEKTsKIAkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIwNDQyIEFkYXB0ZXIgZmFpbGVkIHRvIGluaXQsIG1ieENtZCB4JXggIgpAQCAtMjQ3NiwzMCArMzEyMSw2NCBAQAogCQkJcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCXJjID0gLUVOWElPOwotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCWRvbmUgPSAxOwotCQkJcGhiYS0+bWF4X3ZwaSA9IChwaGJhLT5tYXhfdnBpICYmCi0JCQkJCSBwbWItPm1iLnVuLnZhckNmZ1BvcnQuZ212KSAhPSAwCi0JCQkJPyBwbWItPm1iLnVuLnZhckNmZ1BvcnQubWF4X3ZwaQotCQkJCTogMDsKLQkJfQogCX0KLQogCWlmICghZG9uZSkgewogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gZG9fcHJlcF9mYWlsZWQ7CiAJfQotCi0JaWYgKChwbWItPm1iLnVuLnZhckNmZ1BvcnQuc2xpX21vZGUgPT0gMykgJiYKLQkJKCFwbWItPm1iLnVuLnZhckNmZ1BvcnQuY01BKSkgewotCQlyYyA9IC1FTlhJTzsKKwlpZiAocG1iLT5tYi51bi52YXJDZmdQb3J0LnNsaV9tb2RlID09IDMpIHsKKwkJaWYgKCFwbWItPm1iLnVuLnZhckNmZ1BvcnQuY01BKSB7CisJCQlyYyA9IC1FTlhJTzsKKwkJCWdvdG8gZG9fcHJlcF9mYWlsZWQ7CisJCX0KKwkJaWYgKHBoYmEtPm1heF92cGkgJiYgcG1iLT5tYi51bi52YXJDZmdQb3J0LmdtdikgeworCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19OUElWX0VOQUJMRUQ7CisJCQlwaGJhLT5tYXhfdnBpID0gcG1iLT5tYi51bi52YXJDZmdQb3J0Lm1heF92cGk7CisJCX0gZWxzZQorCQkJcGhiYS0+bWF4X3ZwaSA9IDA7CisJCWlmIChwbWItPm1iLnVuLnZhckNmZ1BvcnQuZ2VyYm0pCisJCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX0hCUV9FTkFCTEVEOworCQlpZiAocG1iLT5tYi51bi52YXJDZmdQb3J0LmdjcnApCisJCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX0NSUF9FTkFCTEVEOworCQlpZiAocG1iLT5tYi51bi52YXJDZmdQb3J0LmdpbmIpIHsKKwkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfSU5CX0VOQUJMRUQ7CisJCQlwaGJhLT5wb3J0X2dwID0gcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5wb3J0OworCQkJcGhiYS0+aW5iX2hhX2NvcHkgPSAmcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5oYV9jb3B5OworCQkJcGhiYS0+aW5iX2NvdW50ZXIgPSAmcGhiYS0+bWJveC0+dXMuczNfaW5iX3BncC5jb3VudGVyOworCQkJcGhiYS0+aW5iX2xhc3RfY291bnRlciA9CisJCQkJCXBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuY291bnRlcjsKKwkJfSBlbHNlIHsKKwkJCXBoYmEtPnBvcnRfZ3AgPSBwaGJhLT5tYm94LT51cy5zM19wZ3AucG9ydDsKKwkJCXBoYmEtPmluYl9oYV9jb3B5ID0gTlVMTDsKKwkJCXBoYmEtPmluYl9jb3VudGVyID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXBoYmEtPnBvcnRfZ3AgPSBwaGJhLT5tYm94LT51cy5zMi5wb3J0OworCQlwaGJhLT5pbmJfaGFfY29weSA9IE5VTEw7CisJCXBoYmEtPmluYl9jb3VudGVyID0gTlVMTDsKKwkJcGhiYS0+bWF4X3ZwaSA9IDA7CiAJfQotCiBkb19wcmVwX2ZhaWxlZDoKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gcmM7CiB9CiAKKworLyoqCisgKiBscGZjX3NsaV9oYmFfc2V0dXA6IFNMSSBpbnRpYWxpemF0aW9uIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gU0xJIGludGlhbGl6YXRpb24gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBieSB0aGUgSEJBIGludGlhbGl6YXRpb24gY29kZSwgSEJBIHJlc2V0IGNvZGUgYW5kIEhCQQorICogZXJyb3IgYXR0ZW50aW9uIGhhbmRsZXIgY29kZS4gQ2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueQorICogbG9ja3MuIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGNvbmZpZ19wb3J0IG1haWxib3ggY29tbWFuZCB0byBjb25maWd1cmUKKyAqIHRoZSBTTEksIHNldHVwIGlvY2IgcmluZ3MgYW5kIEhCUSByaW5ncy4gSW4gdGhlIGVuZCB0aGUgZnVuY3Rpb24KKyAqIGNhbGxzIHRoZSBjb25maWdfcG9ydF9wb3N0IGZ1bmN0aW9uIHRvIGlzc3VlIGluaXRfbGluayBtYWlsYm94CisgKiBjb21tYW5kIGFuZCB0byBzdGFydCB0aGUgZGlzY292ZXJ5LiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gemVybworICogaWYgc3VjY2Vzc2Z1bCwgZWxzZSBpdCB3aWxsIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICoqLwogaW50CiBscGZjX3NsaV9oYmFfc2V0dXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjUyOCwyMiArMzIwNywyMCBAQAogCQlicmVhazsKIAl9CiAKLQlyYyA9IGxwZmNfZG9fY29uZmlnX3BvcnQocGhiYSwgbW9kZSk7CisJcmMgPSBscGZjX3NsaV9jb25maWdfcG9ydChwaGJhLCBtb2RlKTsKKwogCWlmIChyYyAmJiBscGZjX3NsaV9tb2RlID09IDMpCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQgfCBMT0dfVlBPUlQsCiAJCQkJIjE4MjAgVW5hYmxlIHRvIHNlbGVjdCBTTEktMy4gICIKIAkJCQkiTm90IHN1cHBvcnRlZCBieSBhZGFwdGVyLlxuIik7CiAJaWYgKHJjICYmIG1vZGUgIT0gMikKLQkJcmMgPSBscGZjX2RvX2NvbmZpZ19wb3J0KHBoYmEsIDIpOworCQlyYyA9IGxwZmNfc2xpX2NvbmZpZ19wb3J0KHBoYmEsIDIpOwogCWlmIChyYykKIAkJZ290byBscGZjX3NsaV9oYmFfc2V0dXBfZXJyb3I7CiAKIAlpZiAocGhiYS0+c2xpX3JldiA9PSAzKSB7CiAJCXBoYmEtPmlvY2JfY21kX3NpemUgPSBTTEkzX0lPQ0JfQ01EX1NJWkU7CiAJCXBoYmEtPmlvY2JfcnNwX3NpemUgPSBTTEkzX0lPQ0JfUlNQX1NJWkU7Ci0JCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfRU5BQkxFRDsKLQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19IQlFfRU5BQkxFRDsKLQogCX0gZWxzZSB7CiAJCXBoYmEtPmlvY2JfY21kX3NpemUgPSBTTEkyX0lPQ0JfQ01EX1NJWkU7CiAJCXBoYmEtPmlvY2JfcnNwX3NpemUgPSBTTEkyX0lPQ0JfUlNQX1NJWkU7CkBAIC0yNTU4LDggKzMyMzUsNyBAQAogCWlmIChyYykKIAkJZ290byBscGZjX3NsaV9oYmFfc2V0dXBfZXJyb3I7CiAKLQkJCQkvKiBJbml0IEhCUXMgKi8KLQorCS8qIEluaXQgSEJRcyAqLwogCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJcmMgPSBscGZjX3NsaV9oYnFfc2V0dXAocGhiYSk7CiAJCWlmIChyYykKQEAgLTI1ODEsMTkgKzMyNTcsMTkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qISBscGZjX21ib3hfdGltZW91dAorCisvKioKKyAqIGxwZmNfbWJveF90aW1lb3V0OiBUaW1lb3V0IGNhbGwgYmFjayBmdW5jdGlvbiBmb3IgbWJveCB0aW1lci4KKyAqIEBwdHI6IGNvbnRleHQgb2JqZWN0IC0gcG9pbnRlciB0byBoYmEgc3RydWN0dXJlLgogICoKLSAqIFxwcmUKLSAqIFxwb3N0Ci0gKiBccGFyYW0gaGJhIFBvaW50ZXIgdG8gcGVyIHN0cnVjdCBscGZjX2hiYSBzdHJ1Y3R1cmUKLSAqIFxwYXJhbSBsMSAgUG9pbnRlciB0byB0aGUgZHJpdmVyJ3MgbWFpbGJveCBxdWV1ZS4KLSAqIFxyZXR1cm4KLSAqICAgdm9pZAotICoKLSAqIFxiIERlc2NyaXB0aW9uOgotICoKLSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIG1haWxib3ggdGltZW91dCBldmVudHMgYXQgdGltZXIgaW50ZXJydXB0IGNvbnRleHQuCi0gKi8KKyAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBtYWlsYm94IHRpbWVyLiBUaGUgbWFpbGJveAorICogdGltZXIgaXMgYXJtZWQgd2hlbiBhIG5ldyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIGFuZCB0aGUgdGltZXIKKyAqIGlzIGRlbGV0ZWQgd2hlbiB0aGUgbWFpbGJveCBjb21wbGV0ZS4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQorICogdGhlIGtlcm5lbCB0aW1lciBjb2RlIHdoZW4gYSBtYWlsYm94IGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbgorICogZXhwZWN0ZWQgdGltZS4gVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgd29ya2VyIHRocmVhZCB0bworICogcHJvY2VzcyB0aGUgbWFpbGJveCB0aW1lb3V0IGFuZCByZXR1cm5zLiBBbGwgdGhlIHByb2Nlc3NpbmcgaXMKKyAqIGRvbmUgYnkgdGhlIHdvcmtlciB0aHJlYWQgZnVuY3Rpb24gbHBmY19tYm94X3RpbWVvdXRfaGFuZGxlci4KKyAqKi8KIHZvaWQKIGxwZmNfbWJveF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtMjYxMiw2ICszMjg4LDE1IEBACiAJcmV0dXJuOwogfQogCisKKy8qKgorICogbHBmY19tYm94X3RpbWVvdXRfaGFuZGxlcjogV29ya2VyIHRocmVhZCBmdW5jdGlvbiB0byBoYW5kbGUgbWFpbGJveCB0aW1lb3V0LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZCB3aGVuIGEgbWFpbGJveCBjb21tYW5kIHRpbWVzIG91dC4KKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlCisgKiBIQkEgYW5kIHJlY292ZXIgYWxsIHRoZSBwZW5kaW5nIGNvbW1hbmRzLgorICoqLwogdm9pZAogbHBmY19tYm94X3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNjY2LDYgKzMzNTEsMzIgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGlfaXNzdWVfbWJveDogSXNzdWUgYSBtYWlsYm94IGNvbW1hbmQgdG8gZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcG1ib3g6IFBvaW50ZXIgdG8gbWFpbGJveCBvYmplY3QuCisgKiBAZmxhZzogRmxhZyBpbmRpY2F0aW5nIGhvdyB0aGUgbWFpbGJveCBuZWVkIHRvIGJlIHByb2Nlc3NlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBkaXNjb3ZlcnkgY29kZSBhbmQgSEJBIG1hbmFnZW1lbnQgY29kZQorICogdG8gc3VibWl0IGEgbWFpbGJveCBjb21tYW5kIHRvIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlCisgKiBoYmFsb2NrIHRvIHByb3RlY3QgdGhlIGRhdGEgc3RydWN0dXJlcy4KKyAqIFRoZSBtYWlsYm94IGNvbW1hbmQgY2FuIGJlIHN1Ym1pdHRlZCBpbiBwb2xsaW5nIG1vZGUsIGluIHdoaWNoIGNhc2UKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGluIGEgcG9sbGluZyBsb29wIGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUKKyAqIG1haWxib3guCisgKiBJZiB0aGUgbWFpbGJveCBpcyBzdWJtaXR0ZWQgaW4gbm9fd2FpdCBtb2RlIChub3QgcG9sbGluZykgdGhlCisgKiBmdW5jdGlvbiB3aWxsIHN1Ym1pdCB0aGUgY29tbWFuZCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcKKyAqIGZvciB0aGUgbWFpbGJveCBjb21wbGV0aW9uLiBUaGUgbm9fd2FpdCBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIEhCQQorICogaXMgaW4gU0xJMi9TTEkzIG1vZGUgLSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorICogVGhlIFNMSSBpbnRlcmZhY2UgYWxsb3dzIG9ubHkgb25lIG1haWxib3ggcGVuZGluZyBhdCBhIHRpbWUuIElmIHRoZQorICogbWFpbGJveCBpcyBpc3N1ZWQgaW4gcG9sbGluZyBtb2RlIGFuZCB0aGVyZSBpcyBhbHJlYWR5IGEgbWFpbGJveAorICogcGVuZGluZywgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IuIElmIHRoZSBtYWlsYm94IGlzIGlzc3VlZAorICogaW4gTk9fV0FJVCBtb2RlIGFuZCB0aGVyZSBpcyBhIG1haWxib3ggcGVuZGluZyBhbHJlYWR5LCB0aGUgZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIE1CWF9CVVNZIGFmdGVyIHF1ZXVpbmcgdGhlIG1haWxib3ggaW50byBtYWlsYm94IHF1ZXVlLgorICogVGhlIHNsaSBsYXllciBvd25zIHRoZSBtYWlsYm94IG9iamVjdCB1bnRpbCB0aGUgY29tcGxldGlvbiBvZiBtYWlsYm94CisgKiBjb21tYW5kIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJuIE1CWF9CVVNZIG9yIE1CWF9TVUNDRVNTLiBGb3IgYWxsIG90aGVyCisgKiByZXR1cm4gY29kZXMgdGhlIGNhbGxlciBvd25zIHRoZSBtYWlsYm94IGNvbW1hbmQgYWZ0ZXIgdGhlIHJldHVybiBvZgorICogdGhlIGZ1bmN0aW9uLgorICoqLwogaW50CiBscGZjX3NsaV9pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWJveCwgdWludDMyX3QgZmxhZykKIHsKQEAgLTI2NzYsNyArMzM4Nyw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcgZHJ2cl9mbGFnID0gMDsKLQl2b2xhdGlsZSB1aW50MzJfdCB3b3JkMCwgbGRhdGE7CisJdWludDMyX3Qgd29yZDAsIGxkYXRhOwogCXZvaWQgX19pb21lbSAqdG9fc2xpbTsKIAlpbnQgcHJvY2Vzc2luZ19xdWV1ZSA9IDA7CiAKQEAgLTI4MzYsMTIgKzM1NDcsMTEgQEAKIAogCWlmIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpIHsKIAkJLyogRmlyc3QgY29weSBjb21tYW5kIGRhdGEgdG8gaG9zdCBTTElNIGFyZWEgKi8KLQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KG1iLCAmcGhiYS0+c2xpbTJwLT5tYngsIE1BSUxCT1hfQ01EX1NJWkUpOworCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkobWIsIHBoYmEtPm1ib3gsIE1BSUxCT1hfQ01EX1NJWkUpOwogCX0gZWxzZSB7CiAJCWlmIChtYi0+bWJ4Q29tbWFuZCA9PSBNQlhfQ09ORklHX1BPUlQpIHsKIAkJCS8qIGNvcHkgY29tbWFuZCBkYXRhIGludG8gaG9zdCBtYm94IGZvciBjbXBsICovCi0JCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkobWIsICZwaGJhLT5zbGltMnAtPm1ieCwKLQkJCQkJICAgICAgTUFJTEJPWF9DTURfU0laRSk7CisJCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkobWIsIHBoYmEtPm1ib3gsIE1BSUxCT1hfQ01EX1NJWkUpOwogCQl9CiAKIAkJLyogRmlyc3QgY29weSBtYm94IGNvbW1hbmQgZGF0YSB0byBIQkEgU0xJTSwgc2tpcCBwYXN0IGZpcnN0CkBAIC0yODUxLDcgKzM1NjEsNyBAQAogCQkJICAgIE1BSUxCT1hfQ01EX1NJWkUgLSBzaXplb2YgKHVpbnQzMl90KSk7CiAKIAkJLyogTmV4dCBjb3B5IG92ZXIgZmlyc3Qgd29yZCwgd2l0aCBtYnhPd25lciBzZXQgKi8KLQkJbGRhdGEgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKW1iKTsKKwkJbGRhdGEgPSAqKCh1aW50MzJfdCAqKW1iKTsKIAkJdG9fc2xpbSA9IHBoYmEtPk1Cc2xpbWFkZHI7CiAJCXdyaXRlbChsZGF0YSwgdG9fc2xpbSk7CiAJCXJlYWRsKHRvX3NsaW0pOyAvKiBmbHVzaCAqLwpAQCAtMjg4Myw3ICszNTkzLDcgQEAKIAogCQlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFKSB7CiAJCQkvKiBGaXJzdCByZWFkIG1ib3ggc3RhdHVzIHdvcmQgKi8KLQkJCXdvcmQwID0gKigodm9sYXRpbGUgdWludDMyX3QgKikmcGhiYS0+c2xpbTJwLT5tYngpOworCQkJd29yZDAgPSAqKCh1aW50MzJfdCAqKXBoYmEtPm1ib3gpOwogCQkJd29yZDAgPSBsZTMyX3RvX2NwdSh3b3JkMCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBGaXJzdCByZWFkIG1ib3ggc3RhdHVzIHdvcmQgKi8KQEAgLTI5MjIsMTIgKzM2MzIsMTEgQEAKIAogCQkJaWYgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTEkyX0FDVElWRSkgewogCQkJCS8qIEZpcnN0IGNvcHkgY29tbWFuZCBkYXRhICovCi0JCQkJd29yZDAgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKQotCQkJCQkJJnBoYmEtPnNsaW0ycC0+bWJ4KTsKKwkJCQl3b3JkMCA9ICooKHVpbnQzMl90ICopcGhiYS0+bWJveCk7CiAJCQkJd29yZDAgPSBsZTMyX3RvX2NwdSh3b3JkMCk7CiAJCQkJaWYgKG1iLT5tYnhDb21tYW5kID09IE1CWF9DT05GSUdfUE9SVCkgewogCQkJCQlNQUlMQk9YX3QgKnNsaW1tYjsKLQkJCQkJdm9sYXRpbGUgdWludDMyX3Qgc2xpbXdvcmQwOworCQkJCQl1aW50MzJfdCBzbGltd29yZDA7CiAJCQkJCS8qIENoZWNrIHJlYWwgU0xJTSBmb3IgYW55IGVycm9ycyAqLwogCQkJCQlzbGltd29yZDAgPSByZWFkbChwaGJhLT5NQnNsaW1hZGRyKTsKIAkJCQkJc2xpbW1iID0gKE1BSUxCT1hfdCAqKSAmIHNsaW13b3JkMDsKQEAgLTI5NDgsOCArMzY1Nyw3IEBACiAKIAkJaWYgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTEkyX0FDVElWRSkgewogCQkJLyogY29weSByZXN1bHRzIGJhY2sgdG8gdXNlciAqLwotCQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KCZwaGJhLT5zbGltMnAtPm1ieCwgbWIsCi0JCQkJCSAgICAgIE1BSUxCT1hfQ01EX1NJWkUpOworCQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHBoYmEtPm1ib3gsIG1iLCBNQUlMQk9YX0NNRF9TSVpFKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZpcnN0IGNvcHkgY29tbWFuZCBkYXRhICovCiAJCQlscGZjX21lbWNweV9mcm9tX3NsaW0obWIsIHBoYmEtPk1Cc2xpbWFkZHIsCkBAIC0yOTgwLDkgKzM2ODgsMTYgQEAKIAlyZXR1cm4gTUJYX05PVF9GSU5JU0hFRDsKIH0KIAotLyoKLSAqIENhbGxlciBuZWVkcyB0byBob2xkIGxvY2suCi0gKi8KKy8qKgorICogX19scGZjX3NsaV9yaW5ndHhfcHV0OiBBZGQgYW4gaW9jYiB0byB0aGUgdHhxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gYWRkcmVzcyBvZiBuZXdseSBhZGRlZCBjb21tYW5kIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgdG8gYWRkIGEgY29tbWFuZAorICogaW9jYiB0byB0aGUgdHhxIHdoZW4gU0xJIGxheWVyIGNhbm5vdCBzdWJtaXQgdGhlIGNvbW1hbmQgaW9jYgorICogdG8gdGhlIHJpbmcuCisgKiovCiBzdGF0aWMgdm9pZAogX19scGZjX3NsaV9yaW5ndHhfcHV0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NiKQpAQCAtMjk5Miw2ICszNzA3LDIzIEBACiAJcHJpbmctPnR4cV9jbnQrKzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9uZXh0X2lvY2I6IEdldCB0aGUgbmV4dCBpb2NiIGluIHRoZSB0eHEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byBhZGRyZXNzIG9mIG5ld2x5IGFkZGVkIGNvbW1hbmQgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCBiZWZvcmUgYSBuZXcKKyAqIGlvY2IgaXMgc3VibWl0dGVkIHRvIHRoZSBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiBjaGVja3MKKyAqIHR4cSB0byBmbHVzaCB0aGUgaW9jYnMgaW4gdHhxIHRvIEZpcm13YXJlIGJlZm9yZQorICogc3VibWl0dGluZyBuZXcgaW9jYnMgdG8gdGhlIEZpcm13YXJlLgorICogSWYgdGhlcmUgYXJlIGlvY2JzIGluIHRoZSB0eHEgd2hpY2ggbmVlZCB0byBiZSBzdWJtaXR0ZWQKKyAqIHRvIGZpcm13YXJlLCBscGZjX3NsaV9uZXh0X2lvY2IgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudAorICogb2YgdGhlIHR4cSBhZnRlciBkZXF1ZXVpbmcgaXQgZnJvbSB0eHEuCisgKiBJZiB0aGVyZSBpcyBubyBpb2NiIGluIHRoZSB0eHEgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqICpwaW9jYiBhbmQgKnBpb2NiIGlzIHNldCB0byBOVUxMLiBDYWxsZXIgbmVlZHMgdG8gY2hlY2sKKyAqICpwaW9jYiB0byBmaW5kIGlmIHRoZXJlIGFyZSBtb3JlIGNvbW1hbmRzIGluIHRoZSB0eHEuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19zbGlfbmV4dF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqKnBpb2NiKQpAQCAtMzAwNyw5ICszNzM5LDMwIEBACiAJcmV0dXJuIG5leHRpb2NiOwogfQogCi0vKgotICogTG9ja2xlc3MgdmVyc2lvbiBvZiBscGZjX3NsaV9pc3N1ZV9pb2NiLgotICovCisvKioKKyAqIF9fbHBmY19zbGlfaXNzdWVfaW9jYjogTG9ja2xlc3MgdmVyc2lvbiBvZiBscGZjX3NsaV9pc3N1ZV9pb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQGZsYWc6IEZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIGNvbW1hbmQgY2FuIGJlIHB1dCBpbnRvIHR4cS4KKyAqCisgKiBfX2xwZmNfc2xpX2lzc3VlX2lvY2IgaXMgdXNlZCBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGRyaXZlcgorICogdG8gaXNzdWUgYW4gaW9jYiBjb21tYW5kIHRvIHRoZSBIQkEuIElmIHRoZSBQQ0kgc2xvdCBpcyByZWNvdmVyaW5nCisgKiBmcm9tIGVycm9yIHN0YXRlIG9yIGlmIEhCQSBpcyByZXNldHRpbmcgb3IgaWYgTFBGQ19TVE9QX0lPQ0JfRVZFTlQKKyAqIGZsYWcgaXMgdHVybmVkIG9uLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJT0NCX0VSUk9SLgorICogV2hlbiB0aGUgbGluayBpcyBkb3duLCB0aGlzIGZ1bmN0aW9uIGFsbG93cyBvbmx5IGlvY2JzIGZvcgorICogcG9zdGluZyBidWZmZXJzLgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBjb21tYW5kIHJpbmcgYW5kCisgKiBwb3N0cyB0aGUgY29tbWFuZCB0byB0aGUgYXZhaWxhYmxlIHNsb3QgYW5kIHdyaXRlcyB0aGUgcG9ydAorICogYXR0ZW50aW9uIHJlZ2lzdGVyIHRvIHJlcXVlc3QgSEJBIHN0YXJ0IHByb2Nlc3NpbmcgbmV3IGlvY2IuCisgKiBJZiB0aGVyZSBpcyBubyBzbG90IGF2YWlsYWJsZSBpbiB0aGUgcmluZyBhbmQKKyAqIGZsYWcgJiBTTElfSU9DQl9SRVRfSU9DQiBpcyBzZXQsIHRoZSBuZXcgaW9jYiBpcyBhZGRlZCB0byB0aGUKKyAqIHR4cSwgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIElPQ0JfQlVTWS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4KKyAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBzdWNjZXNzIGFmdGVyIGl0IHN1Y2Nlc3NmdWxseSBzdWJtaXQgdGhlCisgKiBpb2NiIHRvIGZpcm13YXJlIG9yIGFmdGVyIGFkZGluZyB0byB0aGUgdHhxLgorICoqLwogc3RhdGljIGludAogX19scGZjX3NsaV9pc3N1ZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NiLCB1aW50MzJfdCBmbGFnKQpAQCAtMzA1Miw2ICszODA1LDE2IEBACiAJCSAqIGNhbiBiZSBpc3N1ZWQgaWYgdGhlIGxpbmsgaXMgbm90IHVwLgogCQkgKi8KIAkJc3dpdGNoIChwaW9jYi0+aW9jYi51bHBDb21tYW5kKSB7CisJCWNhc2UgQ01EX0dFTl9SRVFVRVNUNjRfQ1I6CisJCWNhc2UgQ01EX0dFTl9SRVFVRVNUNjRfQ1g6CisJCQlpZiAoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX01FTkxPX01BSU5UKSB8fAorCQkJCShwaW9jYi0+aW9jYi51bi5nZW5yZXE2NC53NS5oY3N3LlJjdGwgIT0KKwkJCQkJRkNfRkNQX0NNTkQpIHx8CisJCQkJKHBpb2NiLT5pb2NiLnVuLmdlbnJlcTY0Lnc1Lmhjc3cuVHlwZSAhPQorCQkJCQlNRU5MT19UUkFOU1BPUlRfVFlQRSkpCisKKwkJCQlnb3RvIGlvY2JfYnVzeTsKKwkJCWJyZWFrOwogCQljYXNlIENNRF9RVUVfUklOR19CVUZfQ046CiAJCWNhc2UgQ01EX1FVRV9SSU5HX0JVRjY0X0NOOgogCQkJLyoKQEAgLTMxMDYsNiArMzg2OSwxOSBAQAogfQogCiAKKy8qKgorICogbHBmY19zbGlfaXNzdWVfaW9jYjogV3JhcHBlciBmdW5jdGlvbiBmb3IgX19scGZjX3NsaV9pc3N1ZV9pb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQGZsYWc6IEZsYWcgaW5kaWNhdGluZyBpZiB0aGlzIGNvbW1hbmQgY2FuIGJlIHB1dCBpbnRvIHR4cS4KKyAqCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiIGlzIGEgd3JhcHBlciBhcm91bmQgX19scGZjX3NsaV9pc3N1ZV9pb2NiCisgKiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBoYmFsb2NrIGFuZCBjYWxscworICogX19scGZjX3NsaV9pc3N1ZV9pb2NiIGZ1bmN0aW9uIGFuZCB3aWxsIHJldHVybiB0aGUgZXJyb3IgcmV0dXJuZWQKKyAqIGJ5IF9fbHBmY19zbGlfaXNzdWVfaW9jYiBmdW5jdGlvbi4gVGhpcyB3cmFwcGVyIGlzIHVzZWQgYnkKKyAqIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgaG9sZCBoYmFsb2NrLgorICoqLwogaW50CiBscGZjX3NsaV9pc3N1ZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NiLCB1aW50MzJfdCBmbGFnKQpAQCAtMzEyMCw2ICszODk2LDE3IEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZXh0cmFfcmluZ19zZXR1cDogRXh0cmEgcmluZyBzZXR1cCBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGlsZSBkcml2ZXIgYXR0YWNoZXMgd2l0aCB0aGUKKyAqIEhCQSB0byBzZXR1cCB0aGUgZXh0cmEgcmluZy4gVGhlIGV4dHJhIHJpbmcgaXMgdXNlZAorICogb25seSB3aGVuIGRyaXZlciBuZWVkcyB0byBzdXBwb3J0IHRhcmdldCBtb2RlIGZ1bmN0aW9uYWxpdHkKKyAqIG9yIElQIG92ZXIgRkMgZnVuY3Rpb25hbGl0aWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICoqLwogc3RhdGljIGludAogbHBmY19leHRyYV9yaW5nX3NldHVwKCBzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zMTU1LDYgKzM5NDIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9hc3luY19ldmVudF9oYW5kbGVyOiBBU1lOQyBpb2NiIGhhbmRsZXIgZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBpb2NicTogUG9pbnRlciB0byBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgc2xvdyByaW5nIGV2ZW50IGhhbmRsZXIKKyAqIGZ1bmN0aW9uIHdoZW4gdGhlcmUgaXMgYW4gQVNZTkMgZXZlbnQgaW9jYiBpbiB0aGUgcmluZy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBvbmx5IHRlbXBlcmF0dXJlIHJlbGF0ZWQKKyAqIEFTWU5DIGV2ZW50cy4gVGhlIGZ1bmN0aW9uIGRlY29kZXMgdGhlIHRlbXBlcmF0dXJlIHNlbnNvcgorICogZXZlbnQgbWVzc2FnZSBhbmQgcG9zdHMgZXZlbnRzIGZvciB0aGUgbWFuYWdlbWVudCBhcHBsaWNhdGlvbnMuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGlfYXN5bmNfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAogCXN0cnVjdCBscGZjX3NsaV9yaW5nICogcHJpbmcsIHN0cnVjdCBscGZjX2lvY2JxICogaW9jYnEpCkBAIC0zMjEwLDYgKzQwMTAsMTcgQEAKIH0KIAogCisvKioKKyAqIGxwZmNfc2xpX3NldHVwOiBTTEkgcmluZyBzZXR1cCBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBscGZjX3NsaV9zZXR1cCBzZXRzIHVwIHJpbmdzIG9mIHRoZSBTTEkgaW50ZXJmYWNlIHdpdGgKKyAqIG51bWJlciBvZiBpb2NicyBwZXIgcmluZyBhbmQgaW90YWdzLiBUaGlzIGZ1bmN0aW9uIGlzCisgKiBjYWxsZWQgd2hpbGUgZHJpdmVyIGF0dGFjaCB0byB0aGUgSEJBIGFuZCBiZWZvcmUgdGhlCisgKiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBsb2NraW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMC4KKyAqKi8KIGludAogbHBmY19zbGlfc2V0dXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzMyMSw2ICs0MTMyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcXVldWVfc2V0dXA6IFF1ZXVlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIGxwZmNfc2xpX3F1ZXVlX3NldHVwIHNldHMgdXAgbWFpbGJveCBxdWV1ZXMgYW5kIGlvY2IgcXVldWVzIGZvciBlYWNoCisgKiByaW5nLiBUaGlzIGZ1bmN0aW9uIGFsc28gaW5pdGlhbGl6ZXMgcmluZyBpbmRpY2VzIG9mIGVhY2ggcmluZy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNMSQorICogaW50ZXJmYWNlIG9mIGFuIEhCQS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIGFuZCBhbHdheXMgcmV0dXJucworICogMS4KKyAqKi8KIGludAogbHBmY19zbGlfcXVldWVfc2V0dXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzM0OSw2ICs0MTcxLDIzIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaG9zdF9kb3duOiBWcG9ydCBjbGVhbnVwIGZ1bmN0aW9uLgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZpcnR1YWwgcG9ydCBvYmplY3QuCisgKgorICogbHBmY19zbGlfaG9zdF9kb3duIGlzIGNhbGxlZCB0byBjbGVhbiB1cCB0aGUgcmVzb3VyY2VzCisgKiBhc3NvY2lhdGVkIHdpdGggYSB2cG9ydCBiZWZvcmUgZGVzdHJveWluZyB2aXJ0dWFsCisgKiBwb3J0IGRhdGEgc3RydWN0dXJlcy4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKyAqIC0gRnJlZSBkaXNjb3ZlcnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpcnR1YWwKKyAqICAgcG9ydC4KKyAqIC0gRnJlZSBpb2NicyBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aXJ0dWFsIHBvcnQgaW4KKyAqICAgdGhlIHR4cS4KKyAqIC0gU2VuZCBhYm9ydCBmb3IgYWxsIGlvY2IgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqICAgdnBvcnQgaW4gdHhjbXBscS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCBhbmQgYWx3YXlzIHJldHVybnMgMS4KKyAqKi8KIGludAogbHBmY19zbGlfaG9zdF9kb3duKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTM0MTEsNiArNDI1MCwyMSBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hiYV9kb3duOiBSZXNvdXJjZSBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgSEJBLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGFsbCBpb2NiLCBidWZmZXJzLCBtYWlsYm94IGNvbW1hbmRzCisgKiB3aGlsZSBzaHV0dGluZyBkb3duIHRoZSBIQkEuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8KKyAqIGxvY2sgaGVsZCBhbmQgYWx3YXlzIHJldHVybnMgMS4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nIHRvIGNsZWFudXAgZHJpdmVyIHJlc291cmNlczoKKyAqIC0gRnJlZSBkaXNjb3ZlcnkgcmVzb3VyY2VzIGZvciBlYWNoIHZpcnR1YWwgcG9ydAorICogLSBDbGVhbnVwIGFueSBwZW5kaW5nIGZhYnJpYyBpb2NicworICogLSBJdGVyYXRlIHRocm91Z2ggdGhlIGlvY2IgdHhxIGFuZCBmcmVlIGVhY2ggZW50cnkKKyAqICAgaW4gdGhlIGxpc3QuCisgKiAtIEZyZWUgdXAgYW55IGJ1ZmZlciBwb3N0ZWQgdG8gdGhlIEhCQQorICogLSBGcmVlIG1haWxib3ggY29tbWFuZHMgaW4gdGhlIG1haWxib3ggcXVldWUuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hiYV9kb3duKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTM1MDEsNiArNDM1NSwxOCBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3BjaW1lbV9iY29weTogU0xJIG1lbW9yeSBjb3B5IGZ1bmN0aW9uLgorICogQHNyY3A6IFNvdXJjZSBtZW1vcnkgcG9pbnRlci4KKyAqIEBkZXN0cDogRGVzdGluYXRpb24gbWVtb3J5IHBvaW50ZXIuCisgKiBAY250OiBOdW1iZXIgb2Ygd29yZHMgcmVxdWlyZWQgdG8gYmUgY29waWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4gZHJpdmVyIG1lbW9yeQorICogYW5kIHRoZSBTTEkgbWVtb3J5LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2hhbmdlcyB0aGUgZW5kaWFubmVzcworICogb2YgZWFjaCB3b3JkIGlmIG5hdGl2ZSBlbmRpYW5uZXNzIGlzIGRpZmZlcmVudCBmcm9tIFNMSQorICogZW5kaWFubmVzcy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dAorICogbG9jay4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX3BjaW1lbV9iY29weSh2b2lkICpzcmNwLCB2b2lkICpkZXN0cCwgdWludDMyX3QgY250KQogewpAQCAtMzUxOCw2ICs0Mzg0LDE3IEBACiAJfQogfQogCisKKy8qKgorICogbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0OiBGdW5jdGlvbiB0byBhZGQgYSBidWZmZXIgdG8gcG9zdGJ1ZnEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBtcDogUG9pbnRlciB0byBkcml2ZXIgYnVmZmVyIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqIEl0IGFsd2F5cyByZXR1cm4gemVybyBhZnRlciBhZGRpbmcgdGhlIGJ1ZmZlciB0byB0aGUgcG9zdGJ1ZnEKKyAqIGJ1ZmZlciBsaXN0LgorICoqLwogaW50CiBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQkgc3RydWN0IGxwZmNfZG1hYnVmICptcCkKQEAgLTM1MzEsNiArNDQwOCwxOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2dldF9idWZmZXJfdGFnOiBUYWcgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3IgYSBidWZmZXIgcG9zdGVkCisgKiAgICAgICAgICB1c2luZyBDTURfUVVFX1hSSTY0X0NYIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogV2hlbiBIQlEgaXMgZW5hYmxlZCwgYnVmZmVycyBhcmUgc2VhcmNoZWQgYmFzZWQgb24gdGFncy4gVGhpcyBmdW5jdGlvbgorICogYWxsb2NhdGVzIGEgdGFnIGZvciBidWZmZXIgcG9zdGVkIHVzaW5nIENNRF9RVUVfWFJJNjRfQ1ggaW9jYi4gVGhlCisgKiB0YWcgaXMgYml0IHdpc2Ugb3ItZWQgd2l0aCBRVUVfQlVGVEFHX0JJVCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdGFnCisgKiBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRhZ3Mgb2YgYnVmZmVyIHBvc3RlZCBmb3IgdW5zb2xpY2l0ZWQgZXZlbnRzLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFsbG9jYXRlZCB0YWcuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAorICogbm8gbG9ja3MgaGVsZC4KKyAqKi8KIHVpbnQzMl90CiBscGZjX3NsaV9nZXRfYnVmZmVyX3RhZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zNTQ1LDYgKzQ0MzQsMjIgQEAKIAlyZXR1cm4gcGhiYS0+YnVmZmVyX3RhZ19jb3VudDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yaW5nX3RhZ2dlZGJ1Zl9nZXQ6IFNlYXJjaCBIQlEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aAorICogICAgICAgICAgICAgIHBvc3RlZCB1c2luZyBDTURfUVVFX1hSSTY0X0NYIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEB0YWc6IEJ1ZmZlciB0YWcuCisgKgorICogQnVmZmVycyBwb3N0ZWQgdXNpbmcgQ01EX1FVRV9YUkk2NF9DWCBpb2NiIGFyZSBpbiBwcmluZy0+cG9zdGJ1ZnEKKyAqIGxpc3QuIEFmdGVyIEhCQSBETUEgZGF0YSB0byB0aGVzZSBidWZmZXJzLCBDTURfSU9DQl9SRVRfWFJJNjRfQ1gKKyAqIGlvY2IgaXMgcG9zdGVkIHRvIHRoZSByZXNwb25zZSByaW5nIHdpdGggdGhlIHRhZyBvZiB0aGUgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgcHJpbmctPnBvc3RidWZxIGxpc3QgdXNpbmcgdGhlIHRhZworICogdG8gZmluZCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIENNRF9JT0NCX1JFVF9YUkk2NF9DWAorICogaW9jYi4gSWYgdGhlIGJ1ZmZlciBpcyBmb3VuZCB0aGVuIGxwZmNfZG1hYnVmIG9iamVjdCBvZiB0aGUKKyAqIGJ1ZmZlciBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGVsc2UgTlVMTCBpcyByZXR1cm5lZC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICoqLwogc3RydWN0IGxwZmNfZG1hYnVmICoKIGxwZmNfc2xpX3JpbmdfdGFnZ2VkYnVmX2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCXVpbnQzMl90IHRhZykKQEAgLTM1NjUsNyArNDQ3MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkiMDQxMCBDYW5ub3QgZmluZCB2aXJ0dWFsIGFkZHIgZm9yIGJ1ZmZlciB0YWcgb24gIgorCQkJIjA0MDIgQ2Fubm90IGZpbmQgdmlydHVhbCBhZGRyIGZvciBidWZmZXIgdGFnIG9uICIKIAkJCSJyaW5nICVkIERhdGEgeCVseCB4JXAgeCVwIHgleFxuIiwKIAkJCXByaW5nLT5yaW5nbm8sICh1bnNpZ25lZCBsb25nKSB0YWcsCiAJCQlzbHAtPm5leHQsIHNscC0+cHJldiwgcHJpbmctPnBvc3RidWZxX2NudCk7CkBAIC0zNTczLDYgKzQ0NzgsMjMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQ6IFNMSTIgYnVmZmVyIHNlYXJjaCBmdW5jdGlvbiBmb3IKKyAqICAgICAgdW5zb2xpY2l0ZWQgY3QgYW5kIGVscyBldmVudHMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBwaHlzOiBETUEgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGJ1ZmZlciBsaXN0IHVzaW5nIHRoZSBkbWFfYWRkcmVzcworICogb2YgdW5zb2xpY2l0ZWQgZXZlbnQgdG8gZmluZCB0aGUgZHJpdmVyJ3MgbHBmY19kbWFidWYgb2JqZWN0CisgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBkbWFfYWRkcmVzcy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlCisgKiBscGZjX2RtYWJ1ZiBvYmplY3QgaWYgYSBidWZmZXIgaXMgZm91bmQgZWxzZSBpdCByZXR1cm5zIE5VTEwuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY3QgYW5kIGVscyB1bnNvbGljaXRlZCBldmVudAorICogaGFuZGxlcnMgdG8gZ2V0IHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bnNvbGljaXRlZAorICogZXZlbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiovCiBzdHJ1Y3QgbHBmY19kbWFidWYgKgogbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJIGRtYV9hZGRyX3QgcGh5cykKQEAgLTM2MDAsNiArNDUyMiwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2Fib3J0X2Vsc19jbXBsOiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBlbHMgYWJvcnQgaW9jYnMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYjogUG9pbnRlciB0byBkcml2ZXIgY29tbWFuZCBpb2NiIG9iamVjdC4KKyAqIEByc3Bpb2NiOiBQb2ludGVyIHRvIGRyaXZlciByZXNwb25zZSBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBhYm9ydCBpb2NicyBmb3IKKyAqIEVMUyBjb21tYW5kcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgRUxTIHJpbmcgZXZlbnQKKyAqIGhhbmRsZXIgd2l0aCBubyBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24gZnJlZXMgbWVtb3J5IHJlc291cmNlcworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBhYm9ydCBpb2NiLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX2Fib3J0X2Vsc19jbXBsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTM2NjUsNiArNDU5OCwxNyBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lnbm9yZV9lbHNfY21wbDogQ29tcGxldGlvbiBoYW5kbGVyIGZvciBhYm9ydGVkIEVMUyBjb21tYW5kLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIGNvbW1hbmQgaW9jYiBvYmplY3QuCisgKiBAcnNwaW9jYjogUG9pbnRlciB0byBkcml2ZXIgcmVzcG9uc2UgaW9jYiBvYmplY3QuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFNMSSByaW5nIGV2ZW50IGhhbmRsZXIgd2l0aCBubworICogbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIEVMUyBjb21tYW5kcworICogd2hpY2ggYXJlIGFib3J0ZWQuIFRoZSBmdW5jdGlvbiBmcmVlcyBtZW1vcnkgcmVzb3VyY2VzIHVzZWQgZm9yCisgKiB0aGUgYWJvcnRlZCBFTFMgY29tbWFuZHMuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19pZ25vcmVfZWxzX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTM2NzMsNyArNDYxNyw3IEBACiAKIAkvKiBFTFMgY21kIHRhZyA8dWxwSW9UYWc+IGNvbXBsZXRlcyAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCi0JCQkiMDEzMyBJZ25vcmluZyBFTFMgY21kIHRhZyB4JXggY29tcGxldGlvbiBEYXRhOiAiCisJCQkiMDEzOSBJZ25vcmluZyBFTFMgY21kIHRhZyB4JXggY29tcGxldGlvbiBEYXRhOiAiCiAJCQkieCV4IHgleCB4JXhcbiIsCiAJCQlpcnNwLT51bHBJb1RhZywgaXJzcC0+dWxwU3RhdHVzLAogCQkJaXJzcC0+dW4udWxwV29yZFs0XSwgaXJzcC0+dWxwVGltZW91dCk7CkBAIC0zNjg0LDYgKzQ2MjgsMTcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWc6IEFib3J0IGZ1bmN0aW9uIGZvciBhIGNvbW1hbmQgaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQGNtZGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIGNvbW1hbmQgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYW4gYWJvcnQgaW9jYiBmb3IgdGhlIHByb3ZpZGVkIGNvbW1hbmQKKyAqIGlvY2IuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCB3aGVuIGl0IGZhaWxzIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbgorICogZmFpbHVyZSBvciB3aGVuIHRoZSBjb21tYW5kIGlvY2IgaXMgYW4gYWJvcnQgcmVxdWVzdC4KKyAqKi8KIGludAogbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYikKQEAgLTM3NDgsNiArNDcwMyw4IEBACiAJCQkgaWFidC0+dW4uYWN4cmkuYWJvcnRJb1RhZywgYWJ0c2lvY2JwLT5pb3RhZyk7CiAJcmV0dmFsID0gX19scGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIHByaW5nLCBhYnRzaW9jYnAsIDApOwogCisJaWYgKHJldHZhbCkKKwkJX19scGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGFidHNpb2NicCk7CiBhYm9ydF9pb3RhZ19leGl0OgogCS8qCiAJICogQ2FsbGVyIHRvIHRoaXMgcm91dGluZSBzaG91bGQgY2hlY2sgZm9yIElPQ0JfRVJST1IKQEAgLTM3NTcsNiArNDcxNCwyOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfdmFsaWRhdGVfZmNwX2lvY2I6IEZpbHRlcmluZyBmdW5jdGlvbiwgdXNlZCB0byBmaW5kIGNvbW1hbmRzCisgKiAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgdnBvcnQvU0NTSSB0YXJnZXQvbHVuLgorICogQGlvY2JxOiBQb2ludGVyIHRvIGRyaXZlciBpb2NiIG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBkcml2ZXIgdmlydHVhbCBwb3J0IG9iamVjdC4KKyAqIEB0Z3RfaWQ6IFNDU0kgSUQgb2YgdGhlIHRhcmdldC4KKyAqIEBsdW5faWQ6IExVTiBJRCBvZiB0aGUgc2NzaSBkZXZpY2UuCisgKiBAY3R4X2NtZDogTFBGQ19DVFhfTFVOL0xQRkNfQ1RYX1RHVC9MUEZDX0NUWF9IT1NUCisgKgorICogVGhpcyBmdW5jdGlvbiBhY3RzIGFzIGlvY2IgZmlsdGVyIGZvciBmdW5jdGlvbnMgd2hpY2ggYWJvcnQgb3IgY291bnQKKyAqIGFsbCBGQ1AgaW9jYnMgcGVuZGluZyBvbiBhIGx1bi9TQ1NJIHRhcmdldC9TQ1NJIGhvc3QuIEl0IHdpbGwgcmV0dXJuCisgKiAwIGlmIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgaXMgbWV0IGZvciB0aGUgZ2l2ZW4gaW9jYiBhbmQgd2lsbCByZXR1cm4KKyAqIDEgaWYgdGhlIGZpbHRlcmluZyBjcml0ZXJpYSBpcyBub3QgbWV0LgorICogSWYgY3R4X2NtZCA9PSBMUEZDX0NUWF9MVU4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb25seSBpZiB0aGUKKyAqIGdpdmVuIGlvY2IgaXMgZm9yIHRoZSBTQ1NJIGRldmljZSBzcGVjaWZpZWQgYnkgdnBvcnQsIHRndF9pZCBhbmQKKyAqIGx1bl9pZCBwYXJhbWV0ZXIuCisgKiBJZiBjdHhfY21kID09IExQRkNfQ1RYX1RHVCwgIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb25seSBpZiB0aGUKKyAqIGdpdmVuIGlvY2IgaXMgZm9yIHRoZSBTQ1NJIHRhcmdldCBzcGVjaWZpZWQgYnkgdnBvcnQgYW5kIHRndF9pZAorICogcGFyYW1ldGVycy4KKyAqIElmIGN0eF9jbWQgPT0gTFBGQ19DVFhfSE9TVCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbmx5IGlmIHRoZQorICogZ2l2ZW4gaW9jYiBpcyBmb3IgdGhlIFNDU0kgaG9zdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHZwb3J0LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfdmFsaWRhdGVfZmNwX2lvY2Ioc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQkgICB1aW50MTZfdCB0Z3RfaWQsIHVpbnQ2NF90IGx1bl9pZCwKQEAgLTM4MDAsNiArNDc4MCwyNSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9zdW1faW9jYjogRnVuY3Rpb24gdG8gY291bnQgdGhlIG51bWJlciBvZiBGQ1AgaW9jYnMgcGVuZGluZy4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2aXJ0dWFsIHBvcnQuCisgKiBAdGd0X2lkOiBTQ1NJIElEIG9mIHRoZSB0YXJnZXQuCisgKiBAbHVuX2lkOiBMVU4gSUQgb2YgdGhlIHNjc2kgZGV2aWNlLgorICogQGN0eF9jbWQ6IExQRkNfQ1RYX0xVTi9MUEZDX0NUWF9UR1QvTFBGQ19DVFhfSE9TVC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIEZDUCBjb21tYW5kcyBwZW5kaW5nIGZvciB0aGUgdnBvcnQuCisgKiBXaGVuIGN0eF9jbWQgPT0gTFBGQ19DVFhfTFVOLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgRkNQCisgKiBjb21tYW5kcyBwZW5kaW5nIG9uIHRoZSB2cG9ydCBhc3NvY2lhdGVkIHdpdGggU0NTSSBkZXZpY2Ugc3BlY2lmaWVkCisgKiBieSB0Z3RfaWQgYW5kIGx1bl9pZCBwYXJhbWV0ZXJzLgorICogV2hlbiBjdHhfY21kID09IExQRkNfQ1RYX1RHVCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIEZDUAorICogY29tbWFuZHMgcGVuZGluZyBvbiB0aGUgdnBvcnQgYXNzb2NpYXRlZCB3aXRoIFNDU0kgdGFyZ2V0IHNwZWNpZmllZAorICogYnkgdGd0X2lkIHBhcmFtZXRlci4KKyAqIFdoZW4gY3R4X2NtZCA9PSBMUEZDX0NUWF9IT1NULCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgRkNQCisgKiBjb21tYW5kcyBwZW5kaW5nIG9uIHRoZSB2cG9ydC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGlvY2JzIHdoaWNoIHNhdGlzZnkgdGhlIGZpbHRlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2sgaGVsZC4KKyAqKi8KIGludAogbHBmY19zbGlfc3VtX2lvY2Ioc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MTZfdCB0Z3RfaWQsIHVpbnQ2NF90IGx1bl9pZCwKIAkJICBscGZjX2N0eF9jbWQgY3R4X2NtZCkKQEAgLTM4MTksNiArNDgxOCwxNyBAQAogCXJldHVybiBzdW07CiB9CiAKKy8qKgorICogbHBmY19zbGlfYWJvcnRfZmNwX2NtcGw6IENvbXBsZXRpb24gaGFuZGxlciBmdW5jdGlvbiBmb3IgYW4gYWJvcnRlZAorICogICAgICAgRkNQIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBjbWRpb2NiOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYiBvYmplY3QuCisgKiBAcnNwaW9jYjogUG9pbnRlciB0byByZXNwb25zZSBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFib3J0ZWQgRkNQIGlvY2IgY29tcGxldGVzLiBUaGlzCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHJpbmcgZXZlbnQgaGFuZGxlciB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGlvY2IuCisgKiovCiB2b2lkCiBscGZjX3NsaV9hYm9ydF9mY3BfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0zODI3LDYgKzQ4MzcsMjggQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGlfYWJvcnRfaW9jYjogVGhpcyBmdW5jdGlvbiBpc3N1ZSBhYm9ydCBmb3IgYWxsIFNDU0kgY29tbWFuZHMKKyAqICAgICAgICAgIHBlbmRpbmcgb24gYSBTQ1NJIGhvc3QodnBvcnQpL3RhcmdldC9sdW4uCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdmlydHVhbCBwb3J0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAdGd0X2lkOiBTQ1NJIElEIG9mIHRoZSB0YXJnZXQuCisgKiBAbHVuX2lkOiBMVU4gSUQgb2YgdGhlIHNjc2kgZGV2aWNlLgorICogQGFib3J0X2NtZDogTFBGQ19DVFhfTFVOL0xQRkNfQ1RYX1RHVC9MUEZDX0NUWF9IT1NULgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gYWJvcnQgY29tbWFuZCBmb3IgZXZlcnkgU0NTSSBjb21tYW5kCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHZpcnR1YWwgcG9ydCBwZW5kaW5nIG9uIHRoZSByaW5nCisgKiBmaWx0ZXJlZCBieSBscGZjX3NsaV92YWxpZGF0ZV9mY3BfaW9jYiBmdW5jdGlvbi4KKyAqIFdoZW4gYWJvcnRfY21kID09IExQRkNfQ1RYX0xVTiwgdGhlIGZ1bmN0aW9uIHNlbmRzIGFib3J0IG9ubHkgdG8gdGhlCisgKiBGQ1AgaW9jYnMgYXNzb2NpYXRlZCB3aXRoIGx1biBzcGVjaWZpZWQgYnkgdGd0X2lkIGFuZCBsdW5faWQKKyAqIHBhcmFtZXRlcnMKKyAqIFdoZW4gYWJvcnRfY21kID09IExQRkNfQ1RYX1RHVCwgdGhlIGZ1bmN0aW9uIHNlbmRzIGFib3J0IG9ubHkgdG8gdGhlCisgKiBGQ1AgaW9jYnMgYXNzb2NpYXRlZCB3aXRoIFNDU0kgdGFyZ2V0IHNwZWNpZmllZCBieSB0Z3RfaWQgcGFyYW1ldGVyLgorICogV2hlbiBhYm9ydF9jbWQgPT0gTFBGQ19DVFhfSE9TVCwgdGhlIGZ1bmN0aW9uIHNlbmRzIGFib3J0IHRvIGFsbAorICogRkNQIGlvY2JzIGFzc29jaWF0ZWQgd2l0aCB2aXJ0dWFsIHBvcnQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIGlvY2JzIGl0IGZhaWxlZCB0byBhYm9ydC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4KKyAqKi8KIGludAogbHBmY19zbGlfYWJvcnRfaW9jYihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgIHVpbnQxNl90IHRndF9pZCwgdWludDY0X3QgbHVuX2lkLCBscGZjX2N0eF9jbWQgYWJvcnRfY21kKQpAQCAtMzg3OCw2ICs0OTEwLDI0IEBACiAJcmV0dXJuIGVycmNudDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV93YWtlX2lvY2Jfd2FpdDogaW9jYiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2IgaXNzdWVkIHVzaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZQorICogcmluZyBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGhvdXQgYW55IGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogY2FuIGJlIGNhbGxlZCBmcm9tIGJvdGggd29ya2VyIHRocmVhZCBjb250ZXh0IGFuZCBpbnRlcnJ1cHQKKyAqIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gYWxzbyBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgdGhyZWFkIHdoaWNoCisgKiBjbGVhbnMgdXAgdGhlIFNMSSBsYXllciBvYmplY3RzLgorICogVGhpcyBmdW5jdGlvbiBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3dha2VfaW9jYl93YWl0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKQEAgLTM4OTksMTMgKzQ5NDksMzYgQEAKIAlyZXR1cm47CiB9CiAKLS8qCi0gKiBJc3N1ZSB0aGUgY2FsbGVyJ3MgaW9jYiBhbmQgd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24sIGJ1dCBubyBsb25nZXIgdGhhbiB0aGUKLSAqIGNhbGxlcidzIHRpbWVvdXQuICBOb3RlIHRoYXQgaW9jYl9mbGFncyBpcyBjbGVhcmVkIGJlZm9yZSB0aGUKLSAqIGxwZmNfc2xpX2lzc3VlX2NhbGwgc2luY2UgdGhlIHdha2Ugcm91dGluZSBzZXRzIGEgdW5pcXVlIHZhbHVlIGFuZCBieQotICogZGVmaW5pdGlvbiB0aGlzIGlzIGEgd2FpdCBmdW5jdGlvbi4KLSAqLwotCisvKioKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdDogU3luY2hyb25vdXMgZnVuY3Rpb24gdG8gaXNzdWUgaW9jYiBjb21tYW5kcy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4uCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gc2xpIHJpbmcuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQHByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICogQHRpbWVvdXQ6IFRpbWVvdXQgaW4gbnVtYmVyIG9mIHNlY29uZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlIGlvY2IgdG8gZmlybXdhcmUgYW5kIHdhaXRzIGZvciB0aGUKKyAqIGlvY2IgdG8gY29tcGxldGUuIElmIHRoZSBpb2NiIGNvbW1hbmQgaXMgbm90CisgKiBjb21wbGV0ZWQgd2l0aGluIHRpbWVvdXQgc2Vjb25kcywgaXQgcmV0dXJucyBJT0NCX1RJTUVET1VULgorICogQ2FsbGVyIHNob3VsZCBub3QgZnJlZSB0aGUgaW9jYiByZXNvdXJjZXMgaWYgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyBJT0NCX1RJTUVET1VULgorICogVGhlIGZ1bmN0aW9uIHdhaXRzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uIHVzaW5nIGFuCisgKiBub24taW50ZXJydXB0aWJsZSB3YWl0LgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIGlvY2IgY29tcGxldGlvbi4KKyAqIFNvLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgd2hpY2gKKyAqIGRvZXMgbm90IGFsbG93IHNsZWVwaW5nLiBEdWUgdG8gdGhlIHNhbWUgcmVhc29uLCB0aGlzIGZ1bmN0aW9uCisgKiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkLgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGlvY2IgY29tcGxldGlvbnMgb2NjdXIgd2hpbGUKKyAqIHRoaXMgZnVuY3Rpb24gc2xlZXAuIFNvLCB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZnJvbQorICogdGhlIHRocmVhZCB3aGljaCBwcm9jZXNzIGlvY2IgY29tcGxldGlvbiBmb3IgdGhpcyByaW5nLgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGlvY2JfZmxhZyBvZiB0aGUgaW9jYiBvYmplY3QgYmVmb3JlCisgKiBpc3N1aW5nIHRoZSBpb2NiIGFuZCB0aGUgaW9jYiBjb21wbGV0aW9uIGhhbmRsZXIgc2V0cyB0aGlzCisgKiBmbGFnIGFuZCB3YWtlcyB0aGlzIHRocmVhZCB3aGVuIHRoZSBpb2NiIGNvbXBsZXRlcy4KKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB3aWxsIGJlIGNvcGllZCB0byBwcnNwaW9jYnEKKyAqIGJ5IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgd2hlbiB0aGUgY29tbWFuZCBjb21wbGV0ZXMuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgSU9DQl9TVUNDRVNTIHdoZW4gc3VjY2Vzcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICoqLwogaW50CiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKQEAgLTM5NjMsNyArNTAzNiw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAotCQkJCSI6MDMzMiBJT0NCIHdhaXQgaXNzdWUgZmFpbGVkLCBEYXRhIHgleFxuIiwKKwkJCQkiMDMzMiBJT0NCIHdhaXQgaXNzdWUgZmFpbGVkLCBEYXRhIHgleFxuIiwKIAkJCQlyZXR2YWwpOwogCQlyZXR2YWwgPSBJT0NCX0VSUk9SOwogCX0KQEAgLTM5ODMsNiArNTA1NiwzMiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaXNzdWVfbWJveF93YWl0OiBTeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpc3N1ZSBtYWlsYm94LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94cTogUG9pbnRlciB0byBkcml2ZXIgbWFpbGJveCBvYmplY3QuCisgKiBAdGltZW91dDogVGltZW91dCBpbiBudW1iZXIgb2Ygc2Vjb25kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyB0aGUgbWFpbGJveCB0byBmaXJtd2FyZSBhbmQgd2FpdHMgZm9yIHRoZQorICogbWFpbGJveCBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiB0aGUgbWFpbGJveCBjb21tYW5kIGlzIG5vdAorICogY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHNlY29uZHMsIGl0IHJldHVybnMgTUJYX1RJTUVPVVQuCisgKiBUaGUgZnVuY3Rpb24gd2FpdHMgZm9yIHRoZSBtYWlsYm94IGNvbXBsZXRpb24gdXNpbmcgYW4KKyAqIGludGVycnVwdGlibGUgd2FpdC4gSWYgdGhlIHRocmVhZCBpcyB3b2tlbiB1cCBkdWUgdG8gYQorICogc2lnbmFsLCBNQlhfVElNRU9VVCBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiBDYWxsZXIKKyAqIHNob3VsZCBub3QgZnJlZSB0aGUgbWFpbGJveCByZXNvdXJjZXMsIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogTUJYX1RJTUVPVVQuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0aW9uLgorICogU28sIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCB3aGljaAorICogZG9lcyBub3QgYWxsb3cgc2xlZXBpbmcuIER1ZSB0byB0aGUgc2FtZSByZWFzb24sIHRoaXMgZnVuY3Rpb24KKyAqIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgbWFpbGJveCBjb21wbGV0aW9uIG9jY3VycyB3aGlsZQorICogdGhpcyBmdW5jdGlvbiBzbGVlcC4gU28sIHRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tCisgKiB0aGUgd29ya2VyIHRocmVhZCB3aGljaCBwcm9jZXNzZXMgbWFpbGJveCBjb21wbGV0aW9uLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgSEJBIG1hbmFnZW1lbnQKKyAqIGFwcGxpY2F0aW9ucy4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBNQlhfU1VDQ0VTUyB3aGVuIHN1Y2Nlc3NmdWwuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqKi8KIGludAogbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWJveHEsCiAJCQkgdWludDMyX3QgdGltZW91dCkKQEAgLTQwMjcsNiArNTEyNiwxOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfZmx1c2hfbWJveF9xdWV1ZTogbWFpbGJveCBxdWV1ZSBjbGVhbnVwIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gY2xlYW51cCBhbnkgcGVuZGluZyBtYWlsYm94CisgKiBvYmplY3RzIGluIHRoZSBkcml2ZXIgcXVldWUgYmVmb3JlIGJyaW5naW5nIHRoZSBIQkEgb2ZmbGluZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIHJlc2V0dGluZyB0aGUgSEJBLgorICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoZSBmdW5jdGlvbgorICogdGFrZXMgaGJhbG9jayB0byB1cGRhdGUgU0xJIGRhdGEgc3RydWN0dXJlLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgd2hlbiB0aGVyZSBpcyBhbiBhY3RpdmUgbWFpbGJveAorICogY29tbWFuZCBwZW5kaW5nIGVsc2UgcmV0dXJucyAwLgorICoqLwogaW50CiBscGZjX3NsaV9mbHVzaF9tYm94X3F1ZXVlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC00MDU4LDggKzUxNjksNzQgQEAKIAlyZXR1cm4gKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJX01CT1hfQUNUSVZFKSA/IDEgOiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2NoZWNrX2VyYXR0OiBjaGVjayBlcnJvciBhdHRlbnRpb24gZXZlbnRzCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3JtIHRpbWVyIHNvZnQgaW50ZXJydXB0IGNvbnRleHQgdG8gY2hlY2sgSEJBJ3MKKyAqIGVycm9yIGF0dGVudGlvbiByZWdpc3RlciBiaXQgZm9yIGVycm9yIGF0dGVudGlvbiBldmVudHMuCisgKgorICogVGhpcyBmdWNudGlvbiByZXR1cm5zIDEgd2hlbiB0aGVyZSBpcyBFcnJvciBBdHRlbnRpb24gaW4gdGhlIEhvc3QgQXR0ZW50aW9uCisgKiBSZWdpc3RlciBhbmQgcmV0dXJucyAwIG90aGVyd2lzZS4KKyAqKi8KK2ludAorbHBmY19zbGlfY2hlY2tfZXJhdHQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXVpbnQzMl90IGhhX2NvcHk7CisKKwkvKiBJZiBzb21lYm9keSBpcyB3YWl0aW5nIHRvIGhhbmRsZSBhbiBlcmF0dCwgZG9uJ3QgcHJvY2VzcyBpdAorCSAqIGhlcmUuIFRoZSBicmRraWxsIGZ1bmN0aW9uIHdpbGwgZG8gdGhpcy4KKwkgKi8KKwlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfSUdOT1JFX0VSQVRUKQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIGlmIGludGVycnVwdCBoYW5kbGVyIGhhbmRsZXMgdGhpcyBFUkFUVCAqLworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWlmIChwaGJhLT5oYmFfZmxhZyAmIEhCQV9FUkFUVF9IQU5ETEVEKSB7CisJCS8qIEludGVycnVwdCBoYW5kbGVyIGhhcyBoYW5kbGVkIEVSQVRUICovCisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybiAwOworCX0KKworCS8qIFJlYWQgY2hpcCBIb3N0IEF0dGVudGlvbiAoSEEpIHJlZ2lzdGVyICovCisJaGFfY29weSA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7CisJaWYgKGhhX2NvcHkgJiBIQV9FUkFUVCkgeworCQkvKiBSZWFkIGhvc3Qgc3RhdHVzIHJlZ2lzdGVyIHRvIHJldHJpZXZlIGVycm9yIGV2ZW50ICovCisJCWxwZmNfc2xpX3JlYWRfaHMocGhiYSk7CisJCS8qIFNldCB0aGUgZHJpdmVyIEhBIHdvcmsgYml0bWFwICovCisJCXBoYmEtPndvcmtfaGEgfD0gSEFfRVJBVFQ7CisJCS8qIEluZGljYXRlIHBvbGxpbmcgaGFuZGxlcyB0aGlzIEVSQVRUICovCisJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9FUkFUVF9IQU5ETEVEOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm4gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX3NwX2ludHJfaGFuZGxlcjogVGhlIHNsb3ctcGF0aCBpbnRlcnJ1cHQgaGFuZGxlciBvZiBscGZjIGRyaXZlci4KKyAqIEBpcnE6IEludGVycnVwdCBudW1iZXIuCisgKiBAZGV2X2lkOiBUaGUgZGV2aWNlIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHRoZSBQQ0kgbGF5ZXIgYXMgYW4gaW50ZXJydXB0CisgKiBzZXJ2aWNlIHJvdXRpbmUgd2hlbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgd2l0aCBNU0ktWCBtdWx0aS1tZXNzYWdlCisgKiBpbnRlcnJ1cHQgbW9kZSBhbmQgdGhlcmUgYXJlIHNsb3ctcGF0aCBldmVudHMgaW4gdGhlIEhCQS4gSG93ZXZlciwKKyAqIHdoZW4gdGhlIGRldmljZSBpcyBlbmFibGVkIHdpdGggZWl0aGVyIE1TSSBvciBQaW4tSVJRIGludGVycnVwdCBtb2RlLAorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGV2aWNlLWxldmVsIGludGVycnVwdCBoYW5kbGVyLgorICogV2hlbiB0aGUgUENJIHNsb3QgaXMgaW4gZXJyb3IgcmVjb3Zlcnkgb3IgdGhlIEhCQSBpcyB1bmRlcmdvaW5nCisgKiBpbml0aWFsaXphdGlvbiwgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgbm90IHByb2Nlc3MgdGhlIGludGVycnVwdC4KKyAqIFRoZSBsaW5rIGF0dGVudGlvbiBhbmQgRUxTIHJpbmcgYXR0ZW50aW9uIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUKKyAqIHdvcmtlciB0aHJlYWQuIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzaWduYWxzIHRoZSB3b3JrZXIgdGhyZWFkIGFuZAorICogYW5kIHJldHVybnMgZm9yIHRoZXNlIGV2ZW50cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhbnkKKyAqIGxvY2sgaGVsZC4gSXQgZ2V0cyB0aGUgaGJhbG9jayB0byBhY2Nlc3MgYW5kIHVwZGF0ZSBTTEkgZGF0YQorICogc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgSVJRX0hBTkRMRUQgd2hlbiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBlbHNlIGl0CisgKiByZXR1cm5zIElSUV9OT05FLgorICoqLwogaXJxcmV0dXJuX3QKLWxwZmNfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK2xwZmNfc3BfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhOwogCXVpbnQzMl90IGhhX2NvcHk7CkBAIC00MDc4LDQ4ICs1MjU1LDUyIEBACiAJICogR2V0IHRoZSBkcml2ZXIncyBwaGJhIHN0cnVjdHVyZSBmcm9tIHRoZSBkZXZfaWQgYW5kCiAJICogYXNzdW1lIHRoZSBIQkEgaXMgbm90IGludGVycnVwdGluZy4KIAkgKi8KLQlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBkZXZfaWQ7CisJcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZXZfaWQ7CiAKIAlpZiAodW5saWtlbHkoIXBoYmEpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQkvKiBJZiB0aGUgcGNpIGNoYW5uZWwgaXMgb2ZmbGluZSwgaWdub3JlIGFsbCB0aGUgaW50ZXJydXB0cy4gKi8KLQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShwaGJhLT5wY2lkZXYpKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JcGhiYS0+c2xpLnNsaXN0YXQuc2xpX2ludHIrKzsKLQogCS8qCi0JICogQ2FsbCB0aGUgSEJBIHRvIHNlZSBpZiBpdCBpcyBpbnRlcnJ1cHRpbmcuICBJZiBub3QsIGRvbid0IGNsYWltCi0JICogdGhlIGludGVycnVwdAorCSAqIFN0dWZmIG5lZWRzIHRvIGJlIGF0dGVudGVkIHRvIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGFuCisJICogaW5kaXZpZHVhbCBpbnRlcnJ1cHQgaGFuZGxlciBpbiBNU0ktWCBtdWx0aS1tZXNzYWdlIGludGVycnVwdCBtb2RlCiAJICovCi0KLQkvKiBJZ25vcmUgYWxsIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLwotCWlmICh1bmxpa2VseShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX0RPV04pKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQkvKgotCSAqIFJlYWQgaG9zdCBhdHRlbnRpb24gcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2UKLQkgKiBDbGVhciBBdHRlbnRpb24gU291cmNlcywgZXhjZXB0IEVycm9yIEF0dGVudGlvbiAodG8KLQkgKiBwcmVzZXJ2ZSBzdGF0dXMpIGFuZCBMaW5rIEF0dGVudGlvbgotCSAqLwotCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7Ci0JaGFfY29weSA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7Ci0JLyogSWYgc29tZWJvZHkgaXMgd2FpdGluZyB0byBoYW5kbGUgYW4gZXJhdHQgZG9uJ3QgcHJvY2VzcyBpdAotCSAqIGhlcmUuICBUaGUgYnJka2lsbCBmdW5jdGlvbiB3aWxsIGRvIHRoaXMuCi0JICovCi0JaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0lHTk9SRV9FUkFUVCkKLQkJaGFfY29weSAmPSB+SEFfRVJBVFQ7Ci0Jd3JpdGVsKChoYV9jb3B5ICYgfihIQV9MQVRUIHwgSEFfRVJBVFQpKSwgcGhiYS0+SEFyZWdhZGRyKTsKLQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLwotCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKLQotCWlmICh1bmxpa2VseSghaGFfY29weSkpCi0JCXJldHVybiBJUlFfTk9ORTsKKwlpZiAocGhiYS0+aW50cl90eXBlID09IE1TSVgpIHsKKwkJLyogSWYgdGhlIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBhbGwgdGhlIGludGVycnVwdHMgKi8KKwkJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCisJCQlyZXR1cm4gSVJRX05PTkU7CisJCS8qIFVwZGF0ZSBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IHN0YXRpc3RpY3MgKi8KKwkJcGhiYS0+c2xpLnNsaXN0YXQuc2xpX2ludHIrKzsKKwkJLyogSWdub3JlIGFsbCBpbnRlcnJ1cHRzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KKwkJaWYgKHVubGlrZWx5KHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfRE9XTikpCisJCQlyZXR1cm4gSVJRX05PTkU7CisJCS8qIE5lZWQgdG8gcmVhZCBIQSBSRUcgZm9yIHNsb3ctcGF0aCBldmVudHMgKi8KKwkJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwkJaGFfY29weSA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7CisJCS8qIElmIHNvbWVib2R5IGlzIHdhaXRpbmcgdG8gaGFuZGxlIGFuIGVyYXR0IGRvbid0IHByb2Nlc3MgaXQKKwkJICogaGVyZS4gVGhlIGJyZGtpbGwgZnVuY3Rpb24gd2lsbCBkbyB0aGlzLgorCQkgKi8KKwkJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0lHTk9SRV9FUkFUVCkKKwkJCWhhX2NvcHkgJj0gfkhBX0VSQVRUOworCQkvKiBDaGVjayB0aGUgbmVlZCBmb3IgaGFuZGxpbmcgRVJBVFQgaW4gaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJaWYgKGhhX2NvcHkgJiBIQV9FUkFUVCkgeworCQkJaWYgKHBoYmEtPmhiYV9mbGFnICYgSEJBX0VSQVRUX0hBTkRMRUQpCisJCQkJLyogRVJBVFQgcG9sbGluZyBoYXMgaGFuZGxlZCBFUkFUVCAqLworCQkJCWhhX2NvcHkgJj0gfkhBX0VSQVRUOworCQkJZWxzZQorCQkJCS8qIEluZGljYXRlIGludGVycnVwdCBoYW5kbGVyIGhhbmRsZXMgRVJBVFQgKi8KKwkJCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfRVJBVFRfSEFORExFRDsKKwkJfQorCQkvKiBDbGVhciB1cCBvbmx5IGF0dGVudGlvbiBzb3VyY2UgcmVsYXRlZCB0byBzbG93LXBhdGggKi8KKwkJd3JpdGVsKChoYV9jb3B5ICYgKEhBX01CQVRUIHwgSEFfUjJfQ0xSX01TSykpLAorCQkJcGhiYS0+SEFyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOworCX0gZWxzZQorCQloYV9jb3B5ID0gcGhiYS0+aGFfY29weTsKIAogCXdvcmtfaGFfY29weSA9IGhhX2NvcHkgJiBwaGJhLT53b3JrX2hhX21hc2s7CiAKLQlpZiAodW5saWtlbHkod29ya19oYV9jb3B5KSkgeworCWlmICh3b3JrX2hhX2NvcHkpIHsKIAkJaWYgKHdvcmtfaGFfY29weSAmIEhBX0xBVFQpIHsKIAkJCWlmIChwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1BST0NFU1NfTEEpIHsKIAkJCQkvKgpAQCAtNDEzOCw3ICs1MzE5LDcgQEAKIAkJCQl3b3JrX2hhX2NvcHkgJj0gfkhBX0xBVFQ7CiAJCX0KIAotCQlpZiAod29ya19oYV9jb3B5ICYgfihIQV9FUkFUVHxIQV9NQkFUVHxIQV9MQVRUKSkgeworCQlpZiAod29ya19oYV9jb3B5ICYgfihIQV9FUkFUVCB8IEhBX01CQVRUIHwgSEFfTEFUVCkpIHsKIAkJCS8qCiAJCQkgKiBUdXJuIG9mZiBTbG93IFJpbmdzIGludGVycnVwdHMsIExQRkNfRUxTX1JJTkcgaXMKIAkJCSAqIHRoZSBvbmx5IHNsb3cgcmluZy4KQEAgLTQxNzksMzEgKzUzNjAsMTMgQEAKIAkJCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CiAJCQl9CiAJCX0KLQotCQlpZiAod29ya19oYV9jb3B5ICYgSEFfRVJBVFQpIHsKLQkJCS8qCi0JCQkgKiBUaGVyZSB3YXMgYSBsaW5rL2JvYXJkIGVycm9yLiAgUmVhZCB0aGUKLQkJCSAqIHN0YXR1cyByZWdpc3RlciB0byByZXRyaWV2ZSB0aGUgZXJyb3IgZXZlbnQKLQkJCSAqIGFuZCBwcm9jZXNzIGl0LgotCQkJICovCi0JCQlwaGJhLT5zbGkuc2xpc3RhdC5lcnJfYXR0bl9ldmVudCsrOwotCQkJLyogU2F2ZSBzdGF0dXMgaW5mbyAqLwotCQkJcGhiYS0+d29ya19ocyA9IHJlYWRsKHBoYmEtPkhTcmVnYWRkcik7Ci0JCQlwaGJhLT53b3JrX3N0YXR1c1swXSA9IHJlYWRsKHBoYmEtPk1Cc2xpbWFkZHIgKyAweGE4KTsKLQkJCXBoYmEtPndvcmtfc3RhdHVzWzFdID0gcmVhZGwocGhiYS0+TUJzbGltYWRkciArIDB4YWMpOwotCi0JCQkvKiBDbGVhciBDaGlwIGVycm9yIGJpdCAqLwotCQkJd3JpdGVsKEhBX0VSQVRULCBwaGJhLT5IQXJlZ2FkZHIpOwotCQkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQkJCXBoYmEtPnBwb3J0LT5zdG9wcGVkID0gMTsKLQkJfQotCiAJCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7Ci0JCWlmICgod29ya19oYV9jb3B5ICYgSEFfTUJBVFQpICYmCi0JCSAgICAocGhiYS0+c2xpLm1ib3hfYWN0aXZlKSkgeworCQlpZiAod29ya19oYV9jb3B5ICYgSEFfRVJBVFQpCisJCQlscGZjX3NsaV9yZWFkX2hzKHBoYmEpOworCQlpZiAoKHdvcmtfaGFfY29weSAmIEhBX01CQVRUKSAmJiAocGhiYS0+c2xpLm1ib3hfYWN0aXZlKSkgewogCQkJcG1iID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlOwogCQkJcG1ib3ggPSAmcG1iLT5tYjsKLQkJCW1ib3ggPSAmcGhiYS0+c2xpbTJwLT5tYng7CisJCQltYm94ID0gcGhiYS0+bWJveDsKIAkJCXZwb3J0ID0gcG1iLT52cG9ydDsKIAogCQkJLyogRmlyc3QgY2hlY2sgb3V0IHRoZSBzdGF0dXMgd29yZCAqLwpAQCAtNDI3MCw3ICs1NDMzLDcgQEAKIAkJCQkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKIAkJCQkJCQlLRVJOX0VSUiwKIAkJCQkJCQlMT0dfTUJPWCB8IExPR19TTEksCi0JCQkJCQkJIjAzMDYgcmMgc2hvdWxkIGhhdmUiCisJCQkJCQkJIjAzNTAgcmMgc2hvdWxkIGhhdmUiCiAJCQkJCQkJImJlZW4gTUJYX0JVU1kiKTsKIAkJCQkJCWdvdG8gc2VuZF9jdXJyZW50X21ib3g7CiAJCQkJCX0KQEAgLTQyODMsNiArNTQ0Niw3IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOworCiAJCWlmICgod29ya19oYV9jb3B5ICYgSEFfTUJBVFQpICYmCiAJCSAgICAocGhiYS0+c2xpLm1ib3hfYWN0aXZlID09IE5VTEwpKSB7CiBzZW5kX2N1cnJlbnRfbWJveDoKQEAgLTQzMDIsMTUgKzU0NjYsNzQgQEAKIAkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOwogCQlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOwogCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQloYV9jb3B5ICY9IH4ocGhiYS0+d29ya19oYV9tYXNrKTsKK30gLyogbHBmY19zcF9pbnRyX2hhbmRsZXIgKi8KKworLyoqCisgKiBscGZjX2ZwX2ludHJfaGFuZGxlcjogVGhlIGZhc3QtcGF0aCBpbnRlcnJ1cHQgaGFuZGxlciBvZiBscGZjIGRyaXZlci4KKyAqIEBpcnE6IEludGVycnVwdCBudW1iZXIuCisgKiBAZGV2X2lkOiBUaGUgZGV2aWNlIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHRoZSBQQ0kgbGF5ZXIgYXMgYW4gaW50ZXJydXB0CisgKiBzZXJ2aWNlIHJvdXRpbmUgd2hlbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgd2l0aCBNU0ktWCBtdWx0aS1tZXNzYWdlCisgKiBpbnRlcnJ1cHQgbW9kZSBhbmQgdGhlcmUgaXMgYSBmYXN0LXBhdGggRkNQIElPQ0IgcmluZyBldmVudCBpbiB0aGUKKyAqIEhCQS4gSG93ZXZlciwgd2hlbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgd2l0aCBlaXRoZXIgTVNJIG9yIFBpbi1JUlEKKyAqIGludGVycnVwdCBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBkZXZpY2UtbGV2ZWwKKyAqIGludGVycnVwdCBoYW5kbGVyLiBXaGVuIHRoZSBQQ0kgc2xvdCBpcyBpbiBlcnJvciByZWNvdmVyeSBvciB0aGUgSEJBCisgKiBpcyB1bmRlcmdvaW5nIGluaXRpYWxpemF0aW9uLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBub3QgcHJvY2VzcworICogdGhlIGludGVycnVwdC4gVGhlIFNDU0kgRkNQIGZhc3QtcGF0aCByaW5nIGV2ZW50IGFyZSBoYW5kbGVkIGluIHRoZQorICogaW50cnJ1cHQgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBoZWxkLiBJdAorICogZ2V0cyB0aGUgaGJhbG9jayB0byBhY2Nlc3MgYW5kIHVwZGF0ZSBTTEkgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBJUlFfSEFORExFRCB3aGVuIGludGVycnVwdCBpcyBoYW5kbGVkIGVsc2UgaXQKKyAqIHJldHVybnMgSVJRX05PTkUuCisgKiovCitpcnFyZXR1cm5fdAorbHBmY19mcF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBscGZjX2hiYSAgKnBoYmE7CisJdWludDMyX3QgaGFfY29weTsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKworCS8qIEdldCB0aGUgZHJpdmVyJ3MgcGhiYSBzdHJ1Y3R1cmUgZnJvbSB0aGUgZGV2X2lkIGFuZAorCSAqIGFzc3VtZSB0aGUgSEJBIGlzIG5vdCBpbnRlcnJ1cHRpbmcuCisJICovCisJcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgZGV2X2lkOworCisJaWYgKHVubGlrZWx5KCFwaGJhKSkKKwkJcmV0dXJuIElSUV9OT05FOwogCiAJLyoKLQkgKiBQcm9jZXNzIGFsbCBldmVudHMgb24gRkNQIHJpbmcuICBUYWtlIHRoZSBvcHRpbWl6ZWQgcGF0aCBmb3IKLQkgKiBGQ1AgSU8uICBBbnkgb3RoZXIgSU8gaXMgc2xvdyBwYXRoIGFuZCBpcyBoYW5kbGVkIGJ5Ci0JICogdGhlIHdvcmtlciB0aHJlYWQuCisJICogU3R1ZmYgbmVlZHMgdG8gYmUgYXR0ZW50ZWQgdG8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYXMgYW4KKwkgKiBpbmRpdmlkdWFsIGludGVycnVwdCBoYW5kbGVyIGluIE1TSS1YIG11bHRpLW1lc3NhZ2UgaW50ZXJydXB0IG1vZGUKIAkgKi8KLQlzdGF0dXMgPSAoaGFfY29weSAmIChIQV9SWE1BU0sgIDw8ICg0KkxQRkNfRkNQX1JJTkcpKSk7CisJaWYgKHBoYmEtPmludHJfdHlwZSA9PSBNU0lYKSB7CisJCS8qIElmIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBhbGwgdGhlIGludGVycnVwdHMgKi8KKwkJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCisJCQlyZXR1cm4gSVJRX05PTkU7CisJCS8qIFVwZGF0ZSBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IHN0YXRpc3RpY3MgKi8KKwkJcGhiYS0+c2xpLnNsaXN0YXQuc2xpX2ludHIrKzsKKwkJLyogSWdub3JlIGFsbCBpbnRlcnJ1cHRzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KKwkJaWYgKHVubGlrZWx5KHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfRE9XTikpCisJCQlyZXR1cm4gSVJRX05PTkU7CisJCS8qIE5lZWQgdG8gcmVhZCBIQSBSRUcgZm9yIEZDUCByaW5nIGFuZCBvdGhlciByaW5nIGV2ZW50cyAqLworCQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwkJLyogQ2xlYXIgdXAgb25seSBhdHRlbnRpb24gc291cmNlIHJlbGF0ZWQgdG8gZmFzdC1wYXRoICovCisJCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7CisJCXdyaXRlbCgoaGFfY29weSAmIChIQV9SMF9DTFJfTVNLIHwgSEFfUjFfQ0xSX01TSykpLAorCQkJcGhiYS0+SEFyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOworCX0gZWxzZQorCQloYV9jb3B5ID0gcGhiYS0+aGFfY29weTsKKworCS8qCisJICogUHJvY2VzcyBhbGwgZXZlbnRzIG9uIEZDUCByaW5nLiBUYWtlIHRoZSBvcHRpbWl6ZWQgcGF0aCBmb3IgRkNQIElPLgorCSAqLworCWhhX2NvcHkgJj0gfihwaGJhLT53b3JrX2hhX21hc2spOworCisJc3RhdHVzID0gKGhhX2NvcHkgJiAoSEFfUlhNQVNLIDw8ICg0KkxQRkNfRkNQX1JJTkcpKSk7CiAJc3RhdHVzID4+PSAoNCpMUEZDX0ZDUF9SSU5HKTsKIAlpZiAoc3RhdHVzICYgSEFfUlhNQVNLKQogCQlscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHBoYmEsCkBAIC00MzE5LDExICs1NTQyLDEwIEBACiAKIAlpZiAocGhiYS0+Y2ZnX211bHRpX3Jpbmdfc3VwcG9ydCA9PSAyKSB7CiAJCS8qCi0JCSAqIFByb2Nlc3MgYWxsIGV2ZW50cyBvbiBleHRyYSByaW5nLiAgVGFrZSB0aGUgb3B0aW1pemVkIHBhdGgKLQkJICogZm9yIGV4dHJhIHJpbmcgSU8uICBBbnkgb3RoZXIgSU8gaXMgc2xvdyBwYXRoIGFuZCBpcyBoYW5kbGVkCi0JCSAqIGJ5IHRoZSB3b3JrZXIgdGhyZWFkLgorCQkgKiBQcm9jZXNzIGFsbCBldmVudHMgb24gZXh0cmEgcmluZy4gVGFrZSB0aGUgb3B0aW1pemVkIHBhdGgKKwkJICogZm9yIGV4dHJhIHJpbmcgSU8uCiAJCSAqLwotCQlzdGF0dXMgPSAoaGFfY29weSAmIChIQV9SWE1BU0sgIDw8ICg0KkxQRkNfRVhUUkFfUklORykpKTsKKwkJc3RhdHVzID0gKGhhX2NvcHkgJiAoSEFfUlhNQVNLIDw8ICg0KkxQRkNfRVhUUkFfUklORykpKTsKIAkJc3RhdHVzID4+PSAoNCpMUEZDX0VYVFJBX1JJTkcpOwogCQlpZiAoc3RhdHVzICYgSEFfUlhNQVNLKSB7CiAJCQlscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHBoYmEsCkBAIC00MzMyLDUgKzU1NTQsMTA2IEBACiAJCX0KIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOworfSAgLyogbHBmY19mcF9pbnRyX2hhbmRsZXIgKi8KIAotfSAvKiBscGZjX2ludHJfaGFuZGxlciAqLworLyoqCisgKiBscGZjX2ludHJfaGFuZGxlcjogVGhlIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxlciBvZiBscGZjIGRyaXZlci4KKyAqIEBpcnE6IEludGVycnVwdCBudW1iZXIuCisgKiBAZGV2X2lkOiBUaGUgZGV2aWNlIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGZyb20gdGhlIFBDSQorICogbGF5ZXIgd2hlbiBlaXRoZXIgTVNJIG9yIFBpbi1JUlEgaW50ZXJydXB0IG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlcmUgaXMKKyAqIGFuIGV2ZW50IGluIHRoZSBIQkEgd2hpY2ggcmVxdWlyZXMgZHJpdmVyIGF0dGVudGlvbi4gVGhpcyBmdW5jdGlvbgorICogaW52b2tlcyB0aGUgc2xvdy1wYXRoIGludGVycnVwdCBhdHRlbnRpb24gaGFuZGxpbmcgZnVuY3Rpb24gYW5kIGZhc3QtcGF0aAorICogaW50ZXJydXB0IGF0dGVudGlvbiBoYW5kbGluZyBmdW5jdGlvbiBpbiB0dXJuIHRvIHByb2Nlc3MgdGhlIHJlbGV2YW50CisgKiBIQkEgYXR0ZW50aW9uIGV2ZW50cy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBoZWxkLiBJdAorICogZ2V0cyB0aGUgaGJhbG9jayB0byBhY2Nlc3MgYW5kIHVwZGF0ZSBTTEkgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBJUlFfSEFORExFRCB3aGVuIGludGVycnVwdCBpcyBoYW5kbGVkLCBlbHNlIGl0CisgKiByZXR1cm5zIElSUV9OT05FLgorICoqLworaXJxcmV0dXJuX3QKK2xwZmNfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhOworCWlycXJldHVybl90IHNwX2lycV9yYywgZnBfaXJxX3JjOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzMSwgc3RhdHVzMjsKKworCS8qCisJICogR2V0IHRoZSBkcml2ZXIncyBwaGJhIHN0cnVjdHVyZSBmcm9tIHRoZSBkZXZfaWQgYW5kCisJICogYXNzdW1lIHRoZSBIQkEgaXMgbm90IGludGVycnVwdGluZy4KKwkgKi8KKwlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBkZXZfaWQ7CisKKwlpZiAodW5saWtlbHkoIXBoYmEpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBJZiB0aGUgcGNpIGNoYW5uZWwgaXMgb2ZmbGluZSwgaWdub3JlIGFsbCB0aGUgaW50ZXJydXB0cy4gKi8KKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShwaGJhLT5wY2lkZXYpKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogVXBkYXRlIGRldmljZSBsZXZlbCBpbnRlcnJ1cHQgc3RhdGlzdGljcyAqLworCXBoYmEtPnNsaS5zbGlzdGF0LnNsaV9pbnRyKys7CisKKwkvKiBJZ25vcmUgYWxsIGludGVycnVwdHMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLworCWlmICh1bmxpa2VseShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX0RPV04pKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOworCXBoYmEtPmhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCWlmICh1bmxpa2VseSghcGhiYS0+aGFfY29weSkpIHsKKwkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIGlmIChwaGJhLT5oYV9jb3B5ICYgSEFfRVJBVFQpIHsKKwkJaWYgKHBoYmEtPmhiYV9mbGFnICYgSEJBX0VSQVRUX0hBTkRMRUQpCisJCQkvKiBFUkFUVCBwb2xsaW5nIGhhcyBoYW5kbGVkIEVSQVRUICovCisJCQlwaGJhLT5oYV9jb3B5ICY9IH5IQV9FUkFUVDsKKwkJZWxzZQorCQkJLyogSW5kaWNhdGUgaW50ZXJydXB0IGhhbmRsZXIgaGFuZGxlcyBFUkFUVCAqLworCQkJcGhiYS0+aGJhX2ZsYWcgfD0gSEJBX0VSQVRUX0hBTkRMRUQ7CisJfQorCisJLyogQ2xlYXIgYXR0ZW50aW9uIHNvdXJjZXMgZXhjZXB0IGxpbmsgYW5kIGVycm9yIGF0dGVudGlvbnMgKi8KKwl3cml0ZWwoKHBoYmEtPmhhX2NvcHkgJiB+KEhBX0xBVFQgfCBIQV9FUkFUVCkpLCBwaGJhLT5IQXJlZ2FkZHIpOworCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOworCisJLyoKKwkgKiBJbnZva2VzIHNsb3ctcGF0aCBob3N0IGF0dGVudGlvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYXMgYXBwcm9wcmlhdGUuCisJICovCisKKwkvKiBzdGF0dXMgb2YgZXZlbnRzIHdpdGggbWFpbGJveCBhbmQgbGluayBhdHRlbnRpb24gKi8KKwlzdGF0dXMxID0gcGhiYS0+aGFfY29weSAmIChIQV9NQkFUVCB8IEhBX0xBVFQgfCBIQV9FUkFUVCk7CisKKwkvKiBzdGF0dXMgb2YgZXZlbnRzIHdpdGggRUxTIHJpbmcgKi8KKwlzdGF0dXMyID0gKHBoYmEtPmhhX2NvcHkgJiAoSEFfUlhNQVNLICA8PCAoNCpMUEZDX0VMU19SSU5HKSkpOworCXN0YXR1czIgPj49ICg0KkxQRkNfRUxTX1JJTkcpOworCisJaWYgKHN0YXR1czEgfHwgKHN0YXR1czIgJiBIQV9SWE1BU0spKQorCQlzcF9pcnFfcmMgPSBscGZjX3NwX2ludHJfaGFuZGxlcihpcnEsIGRldl9pZCk7CisJZWxzZQorCQlzcF9pcnFfcmMgPSBJUlFfTk9ORTsKKworCS8qCisJICogSW52b2tlIGZhc3QtcGF0aCBob3N0IGF0dGVudGlvbiBpbnRlcnJ1cHQgaGFuZGxpbmcgYXMgYXBwcm9wcmlhdGUuCisJICovCisKKwkvKiBzdGF0dXMgb2YgZXZlbnRzIHdpdGggRkNQIHJpbmcgKi8KKwlzdGF0dXMxID0gKHBoYmEtPmhhX2NvcHkgJiAoSEFfUlhNQVNLIDw8ICg0KkxQRkNfRkNQX1JJTkcpKSk7CisJc3RhdHVzMSA+Pj0gKDQqTFBGQ19GQ1BfUklORyk7CisKKwkvKiBzdGF0dXMgb2YgZXZlbnRzIHdpdGggZXh0cmEgcmluZyAqLworCWlmIChwaGJhLT5jZmdfbXVsdGlfcmluZ19zdXBwb3J0ID09IDIpIHsKKwkJc3RhdHVzMiA9IChwaGJhLT5oYV9jb3B5ICYgKEhBX1JYTUFTSyA8PCAoNCpMUEZDX0VYVFJBX1JJTkcpKSk7CisJCXN0YXR1czIgPj49ICg0KkxQRkNfRVhUUkFfUklORyk7CisJfSBlbHNlCisJCXN0YXR1czIgPSAwOworCisJaWYgKChzdGF0dXMxICYgSEFfUlhNQVNLKSB8fCAoc3RhdHVzMiAmIEhBX1JYTUFTSykpCisJCWZwX2lycV9yYyA9IGxwZmNfZnBfaW50cl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKKwllbHNlCisJCWZwX2lycV9yYyA9IElSUV9OT05FOworCisJLyogUmV0dXJuIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxpbmcgc3RhdHVzICovCisJcmV0dXJuIChzcF9pcnFfcmMgPT0gSVJRX0hBTkRMRUQpID8gc3BfaXJxX3JjIDogZnBfaXJxX3JjOworfSAgLyogbHBmY19pbnRyX2hhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IDcyNDlmZDIuLjg4MzkzODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtMjMzLDYgKzIzMyw3IEBACiAjZGVmaW5lIExQRkNfU0xJMl9BQ1RJVkUgICAgICAgICAgMHgyMDAJLyogU0xJMiBvdmVybGF5IGluIGZpcm13YXJlIGlzIGFjdGl2ZSAqLwogI2RlZmluZSBMUEZDX1BST0NFU1NfTEEgICAgICAgICAgIDB4NDAwCS8qIEFibGUgdG8gcHJvY2VzcyBsaW5rIGF0dGVudGlvbiAqLwogI2RlZmluZSBMUEZDX0JMT0NLX01HTVRfSU8gICAgICAgIDB4ODAwCS8qIERvbid0IGFsbG93IG1nbXQgbWJ4IG9yIGlvY2IgY21kcyAqLworI2RlZmluZSBMUEZDX01FTkxPX01BSU5UICAgICAgICAgIDB4MTAwMCAvKiBuZWVkIGZvciBtZW5sIGZ3IGRvd25sb2FkICovCiAKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyByaW5nW0xQRkNfTUFYX1JJTkddOwogCWludCBmY3BfcmluZzsJCS8qIHJpbmcgdXNlZCBmb3IgRkNQIGluaXRpYXRvciBjb21tYW5kcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCBhZDI0Y2FjLi5jYzQzZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMTgsOSArMTgsMTEgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjIuNyIKKyNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4yLjgiCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRSAibHBmYyIKKyNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCisjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKKyNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgogCiAjZGVmaW5lIExQRkNfTU9EVUxFX0RFU0MgIkVtdWxleCBMaWdodFB1bHNlIEZpYnJlIENoYW5uZWwgU0NTSSBkcml2ZXIgIiBcCiAJCUxQRkNfRFJJVkVSX1ZFUlNJT04KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwppbmRleCAxMDlmODlkLi5hN2RlMWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC0yMDQsNiArMjA1LDc3IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19kaXNjb3Zlcnlfd2FpdDogV2FpdCBmb3IgZHJpdmVyIGRpc2NvdmVyeSB0byBxdWllc2NlLgorICogQHZwb3J0OiBUaGUgdmlydHVhbCBwb3J0IGZvciB3aGljaCB0aGlzIGNhbGwgaXMgYmVpbmcgZXhlY3V0ZWQuCisgKgorICogVGhpcyBkcml2ZXIgY2FsbHMgdGhpcyByb3V0aW5lIHNwZWNpZmljYWxseSBmcm9tIGxwZmNfdnBvcnRfZGVsZXRlCisgKiB0byBlbmZvcmNlIGEgc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIHZwb3J0CisgKiBkZWxldGUgcmVsYXRpdmUgdG8gZGlzY292ZXJ5IGFjdGl2aXRpZXMuICBUaGUKKyAqIGxwZmNfdnBvcnRfZGVsZXRlIHJvdXRpbmUgc2hvdWxkIG5vdCByZXR1cm4gdW50aWwgaXQKKyAqIGNhbiByZWFzb25hYmx5IGd1YXJhbnRlZSB0aGF0IGRpc2NvdmVyeSBoYXMgcXVpZXNjZWQuCisgKiBQb3N0IEZESVNDIExPR08sIHRoZSBkcml2ZXIgbXVzdCB3YWl0IHVudGlsIGl0cyBTQU4gdGVhcmRvd24gaXMKKyAqIGNvbXBsZXRlIGFuZCBhbGwgcmVzb3VyY2VzIHJlY292ZXJlZCBiZWZvcmUgYWxsb3dpbmcKKyAqIGNsZWFudXAuCisgKgorICogVGhpcyByb3V0aW5lIGRvZXMgbm90IHJlcXVpcmUgYW55IGxvY2tzIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZCBscGZjX2Rpc2NvdmVyeV93YWl0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwl1aW50MzJfdCB3YWl0X2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHdhaXRfdGltZV9tYXg7CisJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOworCisJd2FpdF9mbGFncyA9IEZDX1JTQ05fTU9ERSB8IEZDX1JTQ05fRElTQ09WRVJZIHwgRkNfTkxQX01PUkUgfAorCQkgICAgIEZDX1JTQ05fREVGRVJSRUQgfCBGQ19ORElTQ19BQ1RJVkUgfCBGQ19ESVNDX1RNTzsKKworCS8qCisJICogVGhlIHRpbWUgY29uc3RyYWludCBvbiB0aGlzIGxvb3AgaXMgYSBiYWxhbmNlIGJldHdlZW4gdGhlCisJICogZmFicmljIFJBX1RPViB2YWx1ZSBhbmQgZGV2X2xvc3MgdG1vLiAgVGhlIGRyaXZlcidzCisJICogZGV2bG9zc190bW8gaXMgMTAgZ2l2aW5nIHRoaXMgbG9vcCBhIDN4IG11bHRpcGxpZXIgbWluaW1hbGx5LgorCSAqLworCXdhaXRfdGltZV9tYXggPSBtc2Vjc190b19qaWZmaWVzKCgocGhiYS0+ZmNfcmF0b3YgKiAzKSArIDMpICogMTAwMCk7CisJd2FpdF90aW1lX21heCArPSBqaWZmaWVzOworCXN0YXJ0X3RpbWUgPSBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB3YWl0X3RpbWVfbWF4KSkgeworCQlpZiAoKHZwb3J0LT5udW1fZGlzY19ub2RlcyA+IDApICAgIHx8CisJCSAgICAodnBvcnQtPmZjX2ZsYWcgJiB3YWl0X2ZsYWdzKSAgfHwKKwkJICAgICgodnBvcnQtPnBvcnRfc3RhdGUgPiBMUEZDX1ZQT1JUX0ZBSUxFRCkgJiYKKwkJICAgICAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX1ZQT1JUX1JFQURZKSkpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19WUE9SVCwKKwkJCQkJIjE4MzMgVnBvcnQgZGlzY292ZXJ5IHF1aWVzY2UgV2FpdDoiCisJCQkJCSIgdnBpIHgleCBzdGF0ZSB4JXggZmNfZmxhZ3MgeCV4IgorCQkJCQkiIG51bV9ub2RlcyB4JXgsIHdhaXRpbmcgMTAwMCBtc2VjcyIKKwkJCQkJIiB0b3RhbCB3YWl0IG1zZWNzIHgleFxuIiwKKwkJCQkJdnBvcnQtPnZwaSwgdnBvcnQtPnBvcnRfc3RhdGUsCisJCQkJCXZwb3J0LT5mY19mbGFnLCB2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMsCisJCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0X3RpbWUpKTsKKwkJCW1zbGVlcCgxMDAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEJhc2UgY2FzZS4gIFdhaXQgdmFyaWFudHMgc2F0aXNmaWVkLiAgQnJlYWsgb3V0ICovCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfVlBPUlQsCisJCQkJCSAiMTgzNCBWcG9ydCBkaXNjb3ZlcnkgcXVpZXNjZWQ6IgorCQkJCQkgIiB2cGkgeCV4IHN0YXRlIHgleCBmY19mbGFncyB4JXgiCisJCQkJCSAiIHdhaXQgbXNlY3MgeCV4XG4iLAorCQkJCQkgdnBvcnQtPnZwaSwgdnBvcnQtPnBvcnRfc3RhdGUsCisJCQkJCSB2cG9ydC0+ZmNfZmxhZywKKwkJCQkJIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcworCQkJCQkJLSBzdGFydF90aW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHdhaXRfdGltZV9tYXgpKQorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19WUE9SVCwKKwkJCQkiMTgzNSBWcG9ydCBkaXNjb3ZlcnkgcXVpZXNjZSBmYWlsZWQ6IgorCQkJCSIgdnBpIHgleCBzdGF0ZSB4JXggZmNfZmxhZ3MgeCV4IgorCQkJCSIgd2FpdCBtc2VjcyB4JXhcbiIsCisJCQkJdnBvcnQtPnZwaSwgdnBvcnQtPnBvcnRfc3RhdGUsCisJCQkJdnBvcnQtPmZjX2ZsYWcsCisJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnRfdGltZSkpOworfQorCiBpbnQKIGxwZmNfdnBvcnRfY3JlYXRlKHN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQsIGJvb2wgZGlzYWJsZSkKIHsKQEAgLTUwNiw4ICs1NzgsMTIgQEAKIAkgKiBpbml0aWF0ZWQgYWZ0ZXIgd2UndmUgZGlzcG9zZWQgb2YgYWxsIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkCiAJICogd2l0aCB0aGUgcG9ydC4KIAkgKi8KLQlpZiAoIXNjc2lfaG9zdF9nZXQoc2hvc3QpIHx8ICFzY3NpX2hvc3RfZ2V0KHNob3N0KSkKKwlpZiAoIXNjc2lfaG9zdF9nZXQoc2hvc3QpKQogCQlyZXR1cm4gVlBPUlRfSU5WQUw7CisJaWYgKCFzY3NpX2hvc3RfZ2V0KHNob3N0KSkgeworCQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKKwkJcmV0dXJuIFZQT1JUX0lOVkFMOworCX0KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl2cG9ydC0+bG9hZF9mbGFnIHw9IEZDX1VOTE9BRElORzsKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtNTk3LDExICs2NzMsMTYgQEAKIAkJfQogCQl2cG9ydC0+dW5yZWdfdnBpX2NtcGwgPSBWUE9SVF9JTlZBTDsKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMocGhiYS0+ZmNfcmF0b3YgKiAyMDAwKTsKKwkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOVVNFRF9OT0RFKQorCQkJZ290byBza2lwX2xvZ287CiAJCWlmICghbHBmY19pc3N1ZV9lbHNfbnBpdl9sb2dvKHZwb3J0LCBuZGxwKSkKIAkJCXdoaWxlICh2cG9ydC0+dW5yZWdfdnBpX2NtcGwgPT0gVlBPUlRfSU5WQUwgJiYgdGltZW91dCkKIAkJCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKIAl9CiAKKwlpZiAoIShwaGJhLT5wcG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSkKKwkJbHBmY19kaXNjb3Zlcnlfd2FpdCh2cG9ydCk7CisKIHNraXBfbG9nbzoKIAlscGZjX2NsZWFudXAodnBvcnQpOwogCWxwZmNfc2xpX2hvc3RfZG93bih2cG9ydCk7CkBAIC02MTUsOCArNjk2LDEwIEBACiAJCSAqIENvbXBsZXRpb24gb2YgdW5yZWdfdnBpIChscGZjX21ieF9jbXBsX3VucmVnX3ZwaSkKIAkJICogZG9lcyB0aGUgc2NzaV9ob3N0X3B1dCgpIHRvIHJlbGVhc2UgdGhlIHZwb3J0LgogCQkgKi8KLQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKLQl9CisJCWlmIChscGZjX21ieF91bnJlZ192cGkodnBvcnQpKQorCQkJc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJfSBlbHNlCisJCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwogCiAJbHBmY19mcmVlX3ZwaShwaGJhLCB2cG9ydC0+dnBpKTsKIAl2cG9ydC0+d29ya19wb3J0X2V2ZW50cyA9IDA7CkBAIC02NjMsMyArNzQ2LDgyIEBACiAJCXNjc2lfaG9zdF9wdXQobHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSkpOwogCWtmcmVlKHZwb3J0cyk7CiB9CisKKworLyoqCisgKiBscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YTogUmVzZXQgdGhlIHN0YXRpc3RpY2FsIGRhdGEgZm9yIHRoZSB2cG9ydC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHN0YXRpc3RpY2FsIGRhdGEgZm9yIHRoZSB2cG9ydC4gVGhpcyBmdW5jdGlvbgorICogaXMgY2FsbGVkIHdpdGggdGhlIGhvc3RfbG9jayBoZWxkCisgKiovCit2b2lkCitscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMLCAqbmV4dF9uZGxwID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCQljb250aW51ZTsKKwkJaWYgKG5kbHAtPmxhdF9kYXRhKQorCQkJbWVtc2V0KG5kbHAtPmxhdF9kYXRhLCAwLCBMUEZDX01BWF9CVUNLRVRfQ09VTlQgKgorCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCkpOworCX0KK30KKworCisvKioKKyAqIGxwZmNfYWxsb2NfYnVja2V0OiBBbGxvY2F0ZSBkYXRhIGJ1ZmZlciByZXF1aXJlZCBmb3IgY29sbGVjdGluZworICogIHN0YXRpc3RpY2FsIGRhdGEuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGRhdGEgYnVmZmVyIHJlcXVpcmVkIGZvciBhbGwgdGhlIEZDCisgKiBub2RlcyBvZiB0aGUgdnBvcnQgdG8gY29sbGVjdCBzdGF0aXN0aWNhbCBkYXRhLgorICoqLwordm9pZAorbHBmY19hbGxvY19idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTCwgKm5leHRfbmRscCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQkJY29udGludWU7CisKKwkJa2ZyZWUobmRscC0+bGF0X2RhdGEpOworCQluZGxwLT5sYXRfZGF0YSA9IE5VTEw7CisKKwkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX01BUFBFRF9OT0RFKSB7CisJCQluZGxwLT5sYXRfZGF0YSA9IGtjYWxsb2MoTFBGQ19NQVhfQlVDS0VUX0NPVU5ULAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBscGZjX3Njc2ljbWRfYmt0KSwKKwkJCQkJIEdGUF9BVE9NSUMpOworCisJCQlpZiAoIW5kbHAtPmxhdF9kYXRhKQorCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfTk9ERSwKKwkJCQkJIjAyODcgbHBmY19hbGxvY19idWNrZXQgZmFpbGVkIHRvICIKKwkJCQkJImFsbG9jYXRlIHN0YXRpc3RpY2FsIGRhdGEgYnVmZmVyIERJRCAiCisJCQkJCSIweCV4XG4iLCBuZGxwLT5ubHBfRElEKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBscGZjX2ZyZWVfYnVja2V0OiBGcmVlIGRhdGEgYnVmZmVyIHJlcXVpcmVkIGZvciBjb2xsZWN0aW5nCisgKiAgc3RhdGlzdGljYWwgZGF0YS4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2cG9ydCBvYmplY3QuCisgKgorICogVGggZnVuY3Rpb24gZnJlZXMgc3RhdGlzdGljYWwgZGF0YSBidWZmZXIgb2YgYWxsIHRoZSBGQworICogbm9kZXMgb2YgdGhlIHZwb3J0LgorICoqLwordm9pZAorbHBmY19mcmVlX2J1Y2tldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMLCAqbmV4dF9uZGxwID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCQljb250aW51ZTsKKworCQlrZnJlZShuZGxwLT5sYXRfZGF0YSk7CisJCW5kbHAtPmxhdF9kYXRhID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmgKaW5kZXggOTZjNDQ1My4uOTA4MjgzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaApAQCAtMTEyLDQgKzExMiw4IEBACiB2b2lkIGxwZmNfdnBvcnRfc2V0X3N0YXRlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCSAgZW51bSBmY192cG9ydF9zdGF0ZSBuZXdfc3RhdGUpOwogCit2b2lkIGxwZmNfdnBvcnRfcmVzZXRfc3RhdF9kYXRhKHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX2FsbG9jX2J1Y2tldChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3ZvaWQgbHBmY19mcmVlX2J1Y2tldChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKKwogI2VuZGlmIC8qIEhfTFBGQ19WUE9SVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggMWM3OWY5Ny4uMGVhNzhkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zc3QuYworKysgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCkBAIC01NzA4LDcgKzU3MDgsOCBAQAogCXN0cnVjdCBkZXZpY2UgKm9zc3RfbWVtYmVyOwogCWludCBlcnI7CiAKLQlvc3N0X21lbWJlciA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShvc3N0X3N5c2ZzX2NsYXNzLCBkZXZpY2UsIGRldiwgU1RwLCAiJXMiLCBuYW1lKTsKKwlvc3N0X21lbWJlciA9IGRldmljZV9jcmVhdGUob3NzdF9zeXNmc19jbGFzcywgZGV2aWNlLCBkZXYsIFNUcCwKKwkJCQkgICAgIiVzIiwgbmFtZSk7CiAJaWYgKElTX0VSUihvc3N0X21lbWJlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAib3NzdCA6VzogVW5hYmxlIHRvIGFkZCBzeXNmcyBjbGFzcyBtZW1iZXIgJXNcbiIsIG5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihvc3N0X21lbWJlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCAwZGRmZTcxLi5lZDczMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTEwMDYsNyArMTAwNiw2IEBACiAJfQogCiAJcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY3BvcnQpOwotCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggZmM0YmZhNy4uYTc2ZWZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtMTE4Nyw3ICsxMTg3LDEyIEBACiAJCSAgICBjcC0+c2VyaWFsX251bWJlciwgY29tcF9zdGF0dXMsCiAJCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkpKTsKIAotCQljcC0+cmVzdWx0ID0gRElEX0JVU19CVVNZIDw8IDE2OworCQkvKgorCQkgKiBXZSBhcmUgZ29pbmcgdG8gaGF2ZSB0aGUgZmMgY2xhc3MgYmxvY2sgdGhlIHJwb3J0CisJCSAqIHdoaWxlIHdlIHRyeSB0byByZWNvdmVyIHNvIGluc3RydWN0IHRoZSBtaWQgbGF5ZXIKKwkJICogdG8gcmVxdWV1ZSB1bnRpbCB0aGUgY2xhc3MgZGVjaWRlcyBob3cgdG8gaGFuZGxlIHRoaXMuCisJCSAqLworCQljcC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSkKIAkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdChmY3BvcnQtPmhhLCBmY3BvcnQsIDEsIDEpOwogCQlicmVhazsKQEAgLTEyMTQsNyArMTIxOSwxMiBAQAogCQlicmVhazsKIAogCWNhc2UgQ1NfVElNRU9VVDoKLQkJY3AtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJLyoKKwkJICogV2UgYXJlIGdvaW5nIHRvIGhhdmUgdGhlIGZjIGNsYXNzIGJsb2NrIHRoZSBycG9ydAorCQkgKiB3aGlsZSB3ZSB0cnkgdG8gcmVjb3ZlciBzbyBpbnN0cnVjdCB0aGUgbWlkIGxheWVyCisJCSAqIHRvIHJlcXVldWUgdW50aWwgdGhlIGNsYXNzIGRlY2lkZXMgaG93IHRvIGhhbmRsZSB0aGlzLgorCQkgKi8KKwkJY3AtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCiAJCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7CiAJCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCAzNDMzNDQxLi4yYWVkNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMzk0LDEwICszOTQsOCBAQAogCX0KIAogCS8qIENsb3NlIHdpbmRvdyBvbiBmY3BvcnQvcnBvcnQgc3RhdGUtdHJhbnNpdGlvbmluZy4gKi8KLQlpZiAoZmNwb3J0LT5kcnBvcnQpIHsKLQkJY21kLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OwotCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKLQl9CisJaWYgKGZjcG9ydC0+ZHJwb3J0KQorCQlnb3RvIHFjX3RhcmdldF9idXN5OwogCiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfT05MSU5FKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEIHx8CkBAIC00MDUsNyArNDAzLDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjX2hvc3RfYnVzeTsKKwkJZ290byBxY190YXJnZXRfYnVzeTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC00MjgsMTAgKzQyNiwxMSBAQAogCiBxY19ob3N0X2J1c3lfbG9jazoKIAlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwotCi1xY19ob3N0X2J1c3k6CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKK3FjX3RhcmdldF9idXN5OgorCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CisKIHFjX2ZhaWxfY29tbWFuZDoKIAlkb25lKGNtZCk7CiAKQEAgLTQ2MSwxMCArNDYwLDggQEAKIAl9CiAKIAkvKiBDbG9zZSB3aW5kb3cgb24gZmNwb3J0L3Jwb3J0IHN0YXRlLXRyYW5zaXRpb25pbmcuICovCi0JaWYgKGZjcG9ydC0+ZHJwb3J0KSB7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKLQl9CisJaWYgKGZjcG9ydC0+ZHJwb3J0KQorCQlnb3RvIHFjMjRfdGFyZ2V0X2J1c3k7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19PTkxJTkUpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQgfHwKQEAgLTQ3Miw3ICs0NjksNyBAQAogCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJCWdvdG8gcWMyNF9mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxYzI0X2hvc3RfYnVzeTsKKwkJZ290byBxYzI0X3RhcmdldF9idXN5OwogCX0KIAogCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTQ5NSwxMCArNDkyLDExIEBACiAKIHFjMjRfaG9zdF9idXN5X2xvY2s6CiAJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotcWMyNF9ob3N0X2J1c3k6CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKK3FjMjRfdGFyZ2V0X2J1c3k6CisJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKKwogcWMyNF9mYWlsX2NvbW1hbmQ6CiAJZG9uZShjbWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKaW5kZXggYTkxYTU3Yy4uNzk5MTIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQkgICAgICBoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmNoYW5uZWwsCiAJCQkgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pKTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAogCQkvKgogCQkgKiBNYXJrIGRldmljZSBtaXNzaW5nIHNvIHRoYXQgd2Ugd29uJ3QgY29udGludWUgdG8gc2VuZApAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZGRiX2VudHJ5LT5zdGF0ZSkgPT0gRERCX1NUQVRFX09OTElORSkKIAkJCXFsYTR4eHhfbWFya19kZXZpY2VfbWlzc2luZyhoYSwgZGRiX2VudHJ5KTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAKIAljYXNlIFNDU19RVUVVRV9GVUxMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCBkZTgyNzlhLi5kYjdlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCSAgICAgIGhhLT5ob3N0X25vLCBkZGJfZW50cnktPmJ1cywgZGRiX2VudHJ5LT50YXJnZXQsCiAJCSAgICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4KSk7CiAJaXNjc2lfYmxvY2tfc2Vzc2lvbihkZGJfZW50cnktPnNlc3MpOwotCWlzY3NpX2Nvbm5fZXJyb3IoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogfQogCiBzdGF0aWMgc3RydWN0IHNyYiogcWxhNHh4eF9nZXRfbmV3X3NyYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjX2hvc3RfYnVzeTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDJhYzNjYjIuLmY4Yjc5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNzU0LDggKzc1NCwxMiBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChydG4pIHsKLQkJc2NzaV9xdWV1ZV9pbnNlcnQoY21kLCAocnRuID09IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSkgPwotCQkJCQkJcnRuIDogU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSk7CisJCWlmIChydG4gIT0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZICYmCisJCSAgICBydG4gIT0gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZKQorCQkJcnRuID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCQlzY3NpX3F1ZXVlX2luc2VydChjbWQsIHJ0bik7CisKIAkJU0NTSV9MT0dfTUxRVUVVRSgzLAogCQkgICAgcHJpbnRrKCJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7CiAJfQpAQCAtODAwLDYgKzgwNCw3IEBACiB2b2lkIHNjc2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRydjsKIAl1bnNpZ25lZCBpbnQgZ29vZF9ieXRlczsKQEAgLTgxNSw2ICs4MjAsNyBAQAogCSAqIFhYWChoY2gpOiBXaGF0IGFib3V0IGxvY2tpbmc/CiAgICAgICAgICAqLwogICAgICAgICBzaG9zdC0+aG9zdF9ibG9ja2VkID0gMDsKKwlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IDA7CiAgICAgICAgIHNkZXYtPmRldmljZV9ibG9ja2VkID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCBmZWNlZmEwLi45NGVkMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTEwNjUsMTAgKzEwNjUsMTAgQEAKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgKnRndHJfc2NtZCwgKm5leHQ7Ci0JdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBpZCA9IDA7CiAJaW50IHJ0bjsKIAotCWZvciAoaWQgPSAwOyBpZCA8PSBzaG9zdC0+bWF4X2lkOyBpZCsrKSB7CisJZG8gewogCQl0Z3RyX3NjbWQgPSBOVUxMOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKIAkJCWlmIChpZCA9PSBzY21kX2lkKHNjbWQpKSB7CkBAIC0xMDc2LDggKzEwNzYsMTggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlpZiAoIXRndHJfc2NtZCkgeworCQkJLyogbm90IG9uZSBleGFjdGx5IGVxdWFsOyBmaW5kIHRoZSBuZXh0IGhpZ2hlc3QgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NtZCwgd29ya19xLCBlaF9lbnRyeSkgeworCQkJCWlmIChzY21kX2lkKHNjbWQpID4gaWQgJiYKKwkJCQkgICAgKCF0Z3RyX3NjbWQgfHwKKwkJCQkgICAgIHNjbWRfaWQodGd0cl9zY21kKSA+IHNjbWRfaWQoc2NtZCkpKQorCQkJCQkJdGd0cl9zY21kID0gc2NtZDsKKwkJCX0KKwkJfQogCQlpZiAoIXRndHJfc2NtZCkKLQkJCWNvbnRpbnVlOworCQkJLyogbm8gbW9yZSBjb21tYW5kcywgdGhhdCdzIGl0ICovCisJCQlicmVhazsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTZW5kaW5nIHRhcmdldCByZXNldCAiCiAJCQkJCQkgICJ0byB0YXJnZXQgJWRcbiIsCkBAIC0xMDk2LDcgKzExMDYsOCBAQAogCQkJCQkJCSAgIiBmYWlsZWQgdGFyZ2V0OiAiCiAJCQkJCQkJICAiJWRcbiIsCiAJCQkJCQkJICBjdXJyZW50LT5jb21tLCBpZCkpOwotCX0KKwkJaWQrKzsKKwl9IHdoaWxlKGlkICE9IDApOwogCiAJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIH0KQEAgLTEyMTksNiArMTIzMCw0MCBAQAogfQogCiAvKioKKyAqIHNjc2lfbm9yZXRyeV9jbWQgLSBkZXRlcm1pbnRlIGlmIGNvbW1hbmQgc2hvdWxkIGJlIGZhaWxlZCBmYXN0CisgKiBAc2NtZDoJU0NTSSBjbWQgdG8gZXhhbWluZS4KKyAqLworaW50IHNjc2lfbm9yZXRyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzd2l0Y2ggKGhvc3RfYnl0ZShzY21kLT5yZXN1bHQpKSB7CisJY2FzZSBESURfT0s6CisJCWJyZWFrOworCWNhc2UgRElEX0JVU19CVVNZOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChzY21kLT5yZXF1ZXN0KTsKKwljYXNlIERJRF9QQVJJVFk6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZGV2KHNjbWQtPnJlcXVlc3QpOworCWNhc2UgRElEX0VSUk9SOgorCQlpZiAobXNnX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBDT01NQU5EX0NPTVBMRVRFICYmCisJCSAgICBzdGF0dXNfYnl0ZShzY21kLT5yZXN1bHQpID09IFJFU0VSVkFUSU9OX0NPTkZMSUNUKQorCQkJcmV0dXJuIDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRElEX1NPRlRfRVJST1I6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZHJpdmVyKHNjbWQtPnJlcXVlc3QpOworCX0KKworCXN3aXRjaCAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSkgeworCWNhc2UgQ0hFQ0tfQ09ORElUSU9OOgorCQkvKgorCQkgKiBhc3N1bWUgY2FsbGVyIGhhcyBjaGVja2VkIHNlbnNlIGFuZCBkZXRlcm1pbnRlZAorCQkgKiB0aGUgY2hlY2sgY29uZGl0aW9uIHdhcyByZXRyeWFibGUuCisJCSAqLworCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RldihzY21kLT5yZXF1ZXN0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBzY3NpX2RlY2lkZV9kaXNwb3NpdGlvbiAtIERpc3Bvc2l0aW9uIGEgY21kIG9uIHJldHVybiBmcm9tIExMRC4KICAqIEBzY21kOglTQ1NJIGNtZCB0byBleGFtaW5lLgogICoKQEAgLTEyOTAsNyArMTMzNSwyMCBAQAogCiAJY2FzZSBESURfUkVRVUVVRToKIAkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwotCisJY2FzZSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRDoKKwkJLyoKKwkJICogTExEL3RyYW5zcG9ydCB3YXMgZGlzcnVwdGVkIGR1cmluZyBwcm9jZXNzaW5nIG9mIHRoZSBJTy4KKwkJICogVGhlIHRyYW5zcG9ydCBjbGFzcyBpcyBub3cgYmxvY2tlZC9ibG9ja2luZywKKwkJICogYW5kIHRoZSB0cmFuc3BvcnQgd2lsbCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSBJTworCQkgKiBiYXNlZCBvbiBpdHMgdGltZXJzIGFuZCByZWNvdmVyeSBjYXBhYmxpbGl0aWVzLgorCQkgKi8KKwkJcmV0dXJuIEFERF9UT19NTFFVRVVFOworCWNhc2UgRElEX1RSQU5TUE9SVF9GQUlMRkFTVDoKKwkJLyoKKwkJICogVGhlIHRyYW5zcG9ydCBkZWNpZGVkIHRvIGZhaWxmYXN0IHRoZSBJTyAobW9zdCBsaWtlbHkKKwkJICogdGhlIGZhc3QgaW8gZmFpbCB0bW8gZmlyZWQpLCBzbyBzZW5kIElPIGRpcmVjdGx5IHVwd2FyZHMuCisJCSAqLworCQlyZXR1cm4gU1VDQ0VTUzsKIAljYXNlIERJRF9FUlJPUjoKIAkJaWYgKG1zZ19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gQ09NTUFORF9DT01QTEVURSAmJgogCQkgICAgc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBSRVNFUlZBVElPTl9DT05GTElDVCkKQEAgLTEzODMsNyArMTQ0MSw3IEBACiAJICogZXZlbiBpZiB0aGUgcmVxdWVzdCBpcyBtYXJrZWQgZmFzdCBmYWlsLCB3ZSBzdGlsbCByZXF1ZXVlCiAJICogZm9yIHF1ZXVlIGNvbmdlc3Rpb24gY29uZGl0aW9ucyAoUVVFVUVfRlVMTCBvciBCVVNZKSAqLwogCWlmICgoKytzY21kLT5yZXRyaWVzKSA8PSBzY21kLT5hbGxvd2VkCi0JICAgICYmICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpKSB7CisJICAgICYmICFzY3NpX25vcmV0cnlfY21kKHNjbWQpKSB7CiAJCXJldHVybiBORUVEU19SRVRSWTsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTUwOCw3ICsxNTY2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NtZCwgbmV4dCwgZG9uZV9xLCBlaF9lbnRyeSkgewogCQlsaXN0X2RlbF9pbml0KCZzY21kLT5laF9lbnRyeSk7CiAJCWlmIChzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSAmJgotCQkgICAgIWJsa19ub3JldHJ5X3JlcXVlc3Qoc2NtZC0+cmVxdWVzdCkgJiYKKwkJICAgICFzY3NpX25vcmV0cnlfY21kKHNjbWQpICYmCiAJCSAgICAoKytzY21kLT5yZXRyaWVzIDw9IHNjbWQtPmFsbG93ZWQpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBmbHVzaCIKIAkJCQkJCQkgICIgcmV0cnkgY21kOiAlcFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggOThlZTU1Yy4uZTVhOTUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KGRldmljZSk7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTMzLDEwICsxMzQsMTcgQEAKIAkgKiBpZiBhIGNvbW1hbmQgaXMgcmVxdWV1ZWQgd2l0aCBubyBvdGhlciBjb21tYW5kcyBvdXRzdGFuZGluZwogCSAqIGVpdGhlciBmb3IgdGhlIGRldmljZSBvciBmb3IgdGhlIGhvc3QuCiAJICovCi0JaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZKQorCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOgogCQlob3N0LT5ob3N0X2Jsb2NrZWQgPSBob3N0LT5tYXhfaG9zdF9ibG9ja2VkOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kpCisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOgogCQlkZXZpY2UtPmRldmljZV9ibG9ja2VkID0gZGV2aWNlLT5tYXhfZGV2aWNlX2Jsb2NrZWQ7CisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOgorCQlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IHN0YXJnZXQtPm1heF90YXJnZXRfYmxvY2tlZDsKKwkJYnJlYWs7CisJfQogCiAJLyoKIAkgKiBEZWNyZW1lbnQgdGhlIGNvdW50ZXJzLCBzaW5jZSB0aGVzZSBjb21tYW5kcyBhcmUgbm8gbG9uZ2VyCkBAIC00NjAsMTAgKzQ2OCwxMiBAQAogdm9pZCBzY3NpX2RldmljZV91bmJ1c3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNob3N0LT5ob3N0X2J1c3ktLTsKKwlzdGFyZ2V0LT50YXJnZXRfYnVzeS0tOwogCWlmICh1bmxpa2VseShzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2hvc3QpICYmCiAJCSAgICAgKHNob3N0LT5ob3N0X2ZhaWxlZCB8fCBzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQpKSkKIAkJc2NzaV9laF93YWtldXAoc2hvc3QpOwpAQCAtNTE5LDYgKzUyOSwxMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzY3NpX3RhcmdldF9pc19idXN5KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlyZXR1cm4gKChzdGFyZ2V0LT5jYW5fcXVldWUgPiAwICYmCisJCSBzdGFyZ2V0LT50YXJnZXRfYnVzeSA+PSBzdGFyZ2V0LT5jYW5fcXVldWUpIHx8CisJCSBzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV9ydW5fcXVldWUoKQogICoKQEAgLTUzMyw3ICs1NTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzdGFydmVkX2hlYWQgPSBOVUxMLCAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTYwLDYgKzU3NywyMSBAQAogCQkgKi8KIAkJc2RldiA9IGxpc3RfZW50cnkoc2hvc3QtPnN0YXJ2ZWRfbGlzdC5uZXh0LAogCQkJCQkgIHN0cnVjdCBzY3NpX2RldmljZSwgc3RhcnZlZF9lbnRyeSk7CisJCS8qCisJCSAqIFRoZSAqcXVldWVfcmVhZHkgZnVuY3Rpb25zIGNhbiBhZGQgYSBkZXZpY2UgYmFjayBvbnRvIHRoZQorCQkgKiBzdGFydmVkIGxpc3QncyB0YWlsLCBzbyB3ZSBtdXN0IGNoZWNrIGZvciBhIGluZmluaXRlIGxvb3AuCisJCSAqLworCQlpZiAoc2RldiA9PSBzdGFydmVkX2hlYWQpCisJCQlicmVhazsKKwkJaWYgKCFzdGFydmVkX2hlYWQpCisJCQlzdGFydmVkX2hlYWQgPSBzZGV2OworCisJCWlmIChzY3NpX3RhcmdldF9pc19idXN5KHNjc2lfdGFyZ2V0KHNkZXYpKSkgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC01NzUsMTMgKzYwNyw2IEBACiAJCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCiAJCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKLQkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkpCi0JCQkvKgotCQkJICogc2RldiBsb3N0IGEgcmFjZSwgYW5kIHdhcyBwdXQgYmFjayBvbiB0aGUKLQkJCSAqIHN0YXJ2ZWQgbGlzdC4gVGhpcyBpcyB1bmxpa2VseSBidXQgd2l0aG91dCB0aGlzCi0JCQkgKiBpbiB0aGVvcnkgd2UgY291bGQgbG9vcCBmb3JldmVyLgotCQkJICovCi0JCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY4MSw3ICs3MDYsNyBAQAogCQkJbGVmdG92ZXIgPSByZXEtPmRhdGFfbGVuOwogCiAJCS8qIGtpbGwgcmVtYWluZGVyIGlmIG5vIHJldHJ5cyAqLwotCQlpZiAoZXJyb3IgJiYgYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQorCQlpZiAoZXJyb3IgJiYgc2NzaV9ub3JldHJ5X2NtZChjbWQpKQogCQkJYmxrX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGxlZnRvdmVyKTsKIAkJZWxzZSB7CiAJCQlpZiAocmVxdWV1ZSkgewpAQCAtMTM0NCw2ICsxMzY5LDUyIEBACiAJcmV0dXJuIDE7CiB9CiAKKworLyoKKyAqIHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5OiBjaGVja3MgaWYgdGhlcmUgd2UgY2FuIHNlbmQgY29tbWFuZHMgdG8gdGFyZ2V0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugb24gc3RhcmdldCB0byBjaGVjay4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisKKwlpZiAoc3RhcmdldC0+c2luZ2xlX2x1bikgeworCQlpZiAoc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgJiYKKwkJICAgIHN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyICE9IHNkZXYpCisJCQlyZXR1cm4gMDsKKwkJc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgPSBzZGV2OworCX0KKworCWlmIChzdGFyZ2V0LT50YXJnZXRfYnVzeSA9PSAwICYmIHN0YXJnZXQtPnRhcmdldF9ibG9ja2VkKSB7CisJCS8qCisJCSAqIHVuYmxvY2sgYWZ0ZXIgdGFyZ2V0X2Jsb2NrZWQgaXRlcmF0ZXMgdG8gemVybworCQkgKi8KKwkJaWYgKC0tc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPT0gMCkgeworCQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJCSAidW5ibG9ja2luZyB0YXJnZXQgYXQgemVybyBkZXB0aFxuIikpOworCQl9IGVsc2UgeworCQkJYmxrX3BsdWdfZGV2aWNlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoc2NzaV90YXJnZXRfaXNfYnVzeShzdGFyZ2V0KSkgeworCQlpZiAobGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgJnNob3N0LT5zdGFydmVkX2xpc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBXZSdyZSBPSyB0byBwcm9jZXNzIHRoZSBjb21tYW5kLCBzbyB3ZSBjYW4ndCBiZSBzdGFydmVkICovCisJaWYgKCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkKKwkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBzY3NpX2hvc3RfcXVldWVfcmVhZHk6IGlmIHdlIGNhbiBzZW5kIHJlcXVlc3RzIHRvIHNob3N0LCByZXR1cm4gMSBlbHNlCiAgKiByZXR1cm4gMC4gV2UgbXVzdCBlbmQgdXAgcnVubmluZyB0aGUgcXVldWUgYWdhaW4gd2hlbmV2ZXIgMCBpcwpAQCAtMTM5MCw2ICsxNDYxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSByZXEtPnNwZWNpYWw7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwpAQCAtMTQxMyw2ICsxNDg1LDcgQEAKIAlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc2hvc3QtPmhvc3RfYnVzeSsrOworCXN0YXJnZXQtPnRhcmdldF9idXN5Kys7CiAJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCkBAIC0xNTUwLDE0ICsxNjIzLDEzIEBACiAJCQlnb3RvIG5vdF9yZWFkeTsKIAkJfQogCisJCWlmICghc2NzaV90YXJnZXRfcXVldWVfcmVhZHkoc2hvc3QsIHNkZXYpKQorCQkJZ290byBub3RfcmVhZHk7CisKIAkJaWYgKCFzY3NpX2hvc3RfcXVldWVfcmVhZHkocSwgc2hvc3QsIHNkZXYpKQogCQkJZ290byBub3RfcmVhZHk7Ci0JCWlmIChzY3NpX3RhcmdldChzZGV2KS0+c2luZ2xlX2x1bikgewotCQkJaWYgKHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAmJgotCQkJICAgIHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAhPSBzZGV2KQotCQkJCWdvdG8gbm90X3JlYWR5OwotCQkJc2NzaV90YXJnZXQoc2RldiktPnN0YXJnZXRfc2Rldl91c2VyID0gc2RldjsKLQkJfQorCisJCXNjc2lfdGFyZ2V0KHNkZXYpLT50YXJnZXRfYnVzeSsrOwogCQlzaG9zdC0+aG9zdF9idXN5Kys7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCA2Y2RkZDVkLi5lMTg1MDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC01OSw2ICs1OSw3IEBACiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpOwogaW50IHNjc2lfZWhfZ2V0X3NlbnNlKHN0cnVjdCBsaXN0X2hlYWQgKndvcmtfcSwKIAkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKTsKK2ludCBzY3NpX25vcmV0cnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOwogCiAvKiBzY3NpX2xpYi5jICovCiBleHRlcm4gaW50IHNjc2lfbWF5YmVfdW5ibG9ja19ob3N0KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggMzM0ODYyZS4uYjE0ZGMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtNDE5LDYgKzQxOSw3IEBACiAJZGV2LT50eXBlID0gJnNjc2lfdGFyZ2V0X3R5cGU7CiAJc3RhcmdldC0+aWQgPSBpZDsKIAlzdGFyZ2V0LT5jaGFubmVsID0gY2hhbm5lbDsKKwlzdGFyZ2V0LT5jYW5fcXVldWUgPSAwOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5zaWJsaW5ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPmRldmljZXMpOwogCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9DUkVBVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBkNWY3NjUzLi4xZTcxYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMjEzMyw4ICsyMTMzLDcgQEAKIAlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SRChyb2xlcyk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQocG9ydF9zdGF0ZSk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQoc2NzaV90YXJnZXRfaWQpOwotCWlmIChmdC0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKKwlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKIAogCUJVR19PTihjb3VudCA+IEZDX1JQT1JUX05VTV9BVFRSUyk7CiAKQEAgLTIzMjgsNiArMjMyNywyMiBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdmVfaG9zdCk7CiAKK3N0YXRpYyB2b2lkIGZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKworCS8qIEludm9sdmUgdGhlIExMREQgaWYgcG9zc2libGUgdG8gdGVybWluYXRlIGFsbCBpbyBvbiB0aGUgcnBvcnQuICovCisJaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKKwkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKKworCS8qCisJICogbXVzdCB1bmJsb2NrIHRvIGZsdXNoIHF1ZXVlZCBJTy4gVGhlIGNhbGxlciB3aWxsIGhhdmUgc2V0CisJICogdGhlIHBvcnRfc3RhdGUgb3IgZmxhZ3MsIHNvIHRoYXQgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkgd2lsbAorCSAqIGZhaWwgSU8uCisJICovCisJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Cit9CiAKIC8qKgogICogZmNfc3RhcmdldF9kZWxldGUgLSBjYWxsZWQgdG8gZGVsZXRlIHRoZSBzY3NpIGRlY2VuZGVudHMgb2YgYW4gcnBvcnQKQEAgLTIzNDAsMTMgKzIzNTUsOCBAQAogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0LCBzdGd0X2RlbGV0ZV93b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKLQkvKiBJbnZvbHZlIHRoZSBMTEREIGlmIHBvc3NpYmxlIHRvIHRlcm1pbmF0ZSBhbGwgaW8gb24gdGhlIHJwb3J0LiAqLwotCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCi0JCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7Ci0KKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogCXNjc2lfcmVtb3ZlX3RhcmdldCgmcnBvcnQtPmRldik7CiB9CiAKQEAgLTIzNzIsMTAgKzIzODIsNyBAQAogCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcpCiAJCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CiAKLQkvKiBpbnZvbHZlIHRoZSBMTEREIHRvIHRlcm1pbmF0ZSBhbGwgcGVuZGluZyBpL28gKi8KLQlpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwotCisJZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIAkvKgogCSAqIENhbmNlbCBhbnkgb3V0c3RhbmRpbmcgdGltZXJzLiBUaGVzZSBzaG91bGQgcmVhbGx5IGV4aXN0CiAJICogb25seSB3aGVuIHJtbW9kJ2luZyB0aGUgTExERCBhbmQgd2UncmUgYXNraW5nIGZvcgpAQCAtMjYzOSw3ICsyNjQ2LDggQEAKIAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCQkJCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQkJCXJwb3J0LT5mbGFncyAmPSB+KEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVCB8CisJCQkJCQkgIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORyk7CiAKIAkJCQkvKiBpZiB0YXJnZXQsIGluaXRpYXRlIGEgc2NhbiAqLwogCQkJCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpIHsKQEAgLTI3MDIsNiArMjcxMCw3IEBACiAJCQlycG9ydC0+cG9ydF9pZCA9IGlkcy0+cG9ydF9pZDsKIAkJCXJwb3J0LT5yb2xlcyA9IGlkcy0+cm9sZXM7CiAJCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9PTkxJTkU7CisJCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKIAogCQkJaWYgKGZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKQogCQkJCW1lbXNldChycG9ydC0+ZGRfZGF0YSwgMCwKQEAgLTI3ODQsNyArMjc5Myw2IEBACiBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWludCB0aW1lb3V0ID0gcnBvcnQtPmRldl9sb3NzX3RtbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yODMwLDcgKzI4MzgsNyBAQAogCiAJLyogc2VlIGlmIHdlIG5lZWQgdG8ga2lsbCBpbyBmYXN0ZXIgdGhhbiB3YWl0aW5nIGZvciBkZXZpY2UgbG9zcyAqLwogCWlmICgocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gIT0gLTEpICYmCi0JICAgIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA8IHRpbWVvdXQpICYmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pKQorCSAgICAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPCB0aW1lb3V0KSkKIAkJZmNfcXVldWVfZGV2bG9zc193b3JrKHNob3N0LCAmcnBvcnQtPmZhaWxfaW9fd29yaywKIAkJCQkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gKiBIWik7CiAKQEAgLTI5MDYsNyArMjkxNCw4IEBACiAJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQlycG9ydC0+ZmxhZ3MgJj0gfihGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQgfAorCQkJCSAgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KQEAgLTMwMDEsNiArMzAxMCw3IEBACiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwogCXJwb3J0LT5yb2xlcyA9IEZDX1BPUlRfUk9MRV9VTktOT1dOOwogCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX05PVFBSRVNFTlQ7CisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQ7CiAKIAkvKiByZW1vdmUgdGhlIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IHVzZWQgaW4gdGhlIGNvbnNpc3RpbmcgYmluZGluZyAqLwogCXN3aXRjaCAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlKSB7CkBAIC0zMDQzLDEzICszMDUzLDEyIEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnQsIGZhaWxfaW9fd29yay53b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKIAlpZiAocnBvcnQtPnBvcnRfc3RhdGUgIT0gRkNfUE9SVFNUQVRFX0JMT0NLRUQpCiAJCXJldHVybjsKIAotCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggMGNlNWY3Yy4uNGE4MDNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogc2hvd19lcF9oYW5kbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAgPSBpc2NzaV9kZXZfdG9fZW5kcG9pbnQoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZXAtPmlkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBlcC0+aWQpOwogfQogc3RhdGljIElTQ1NJX0FUVFIoZXAsIGhhbmRsZSwgU19JUlVHTywgc2hvd19lcF9oYW5kbGUsIE5VTEwpOwogCkBAIC0xNTYsNyArMTU2LDcgQEAKIHN0YXRpYyBpbnQgaXNjc2lfbWF0Y2hfZXBpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCA9IGlzY3NpX2Rldl90b19lbmRwb2ludChkZXYpOwotCXVuc2lnbmVkIGludCAqZXBpZCA9ICh1bnNpZ25lZCBpbnQgKikgZGF0YTsKKwl1aW50NjRfdCAqZXBpZCA9ICh1aW50NjRfdCAqKSBkYXRhOwogCiAJcmV0dXJuICplcGlkID09IGVwLT5pZDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwotCXVuc2lnbmVkIGludCBpZDsKKwl1aW50NjRfdCBpZDsKIAlpbnQgZXJyOwogCiAJZm9yIChpZCA9IDE7IGlkIDwgSVNDU0lfTUFYX0VQSUQ7IGlkKyspIHsKQEAgLTE4Nyw3ICsxODcsOCBAQAogCiAJZXAtPmlkID0gaWQ7CiAJZXAtPmRldi5jbGFzcyA9ICZpc2NzaV9lbmRwb2ludF9jbGFzczsKLQlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0ldSIsIGlkKTsKKwlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0lbGx1IiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGlkKTsKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmVwLT5kZXYpOwogICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9lcDsKQEAgLTM3NCwxMCArMzc1LDEwIEBACiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfU0VTU0lPTl9GQUlMRUQ6Ci0JCWVyciA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQlicmVhazsKIAljYXNlIElTQ1NJX1NFU1NJT05fRlJFRToKLQkJZXJyID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpAQCAtMTAxMCw3ICsxMDExLDcgQEAKIAogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7Ci0JCWlzY3NpX2Nvbm5fZXJyb3IoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJaXNjc2lfY29ubl9lcnJvcl9ldmVudChjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQlpc2NzaV9jbHNfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJjYW4gbm90IGRlbGl2ZXIgIgogCQkJCSAgICAgICJjb250cm9sIFBEVTogT09NXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDMxLDcgKzEwMzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVjdl9wZHUpOwogCi12b2lkIGlzY3NpX2Nvbm5fZXJyb3Ioc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnJvcikKK3ZvaWQgaXNjc2lfY29ubl9lcnJvcl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKQogewogCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwogCXN0cnVjdCBza19idWZmCSpza2I7CkBAIC0xMDYzLDcgKzEwNjQsNyBAQAogCWlzY3NpX2Nsc19jb25uX3ByaW50ayhLRVJOX0lORk8sIGNvbm4sICJkZXRlY3RlZCBjb25uIGVycm9yICglZClcbiIsCiAJCQkgICAgICBlcnJvcik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX2Vycm9yKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQpOwogCiBzdGF0aWMgaW50CiBpc2NzaV9pZl9zZW5kX3JlcGx5KGludCBwaWQsIGludCBzZXEsIGludCB0eXBlLCBpbnQgZG9uZSwgaW50IG11bHRpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IGIyOTM2MGUuLjdjMmQyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCWZvcihpID0gMDsgaSA8IERWX1JFVFJJRVM7IGkrKykgewogCQlyZXN1bHQgPSBzY3NpX2V4ZWN1dGUoc2RldiwgY21kLCBkaXIsIGJ1ZmZlciwgYnVmZmxlbiwKIAkJCQkgICAgICBzZW5zZSwgRFZfVElNRU9VVCwgLyogcmV0cmllcyAqLyAxLAotCQkJCSAgICAgIFJFUV9GQUlMRkFTVCk7CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RFViB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7CiAJCWlmIChyZXN1bHQgJiBEUklWRVJfU0VOU0UpIHsKIAkJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcl90bXA7CiAJCQlpZiAoIXNzaGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBhN2I1M2JlLi43YzRkMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJc2VjdG9yX3QgYmxvY2sgPSBycS0+c2VjdG9yOwogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IHJxLT5ucl9zZWN0b3JzOwotCWludCByZXQ7CisJaW50IHJldCwgaG9zdF9kaWY7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MTUsNyArNTE1LDggQEAKIAkJCQkJcnEtPm5yX3NlY3RvcnMpKTsKIAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSkpCisJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOworCWlmIChob3N0X2RpZikKIAkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CiAJZWxzZQogCQlTQ3BudC0+Y21uZFsxXSA9IDA7CkBAIC01NzMsOCArNTc0LDkgQEAKIAlTQ3BudC0+c2RiLmxlbmd0aCA9IHRoaXNfY291bnQgKiBzZHAtPnNlY3Rvcl9zaXplOwogCiAJLyogSWYgRElGIG9yIERJWCBpcyBlbmFibGVkLCB0ZWxsIEhCQSBob3cgdG8gaGFuZGxlIHJlcXVlc3QgKi8KLQlpZiAoc2RrcC0+cHJvdGVjdGlvbl90eXBlIHx8IHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCi0JCXNkX2RpZl9vcChTQ3BudCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKTsKKwlpZiAoaG9zdF9kaWYgfHwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKKwkJc2RfZGlmX29wKFNDcG50LCBob3N0X2RpZiwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSwKKwkJCSAgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkbid0IGRpc2Nvbm5lY3QgaW4gdGhlIG1pZGRsZSBvZiBhIHNlY3Rvciwgc28gd2l0aCBhIGR1bWIKQEAgLTEyNTIsMTQgKzEyNTQsMTIgQEAKIAllbHNlCiAJCXR5cGUgPSAoKGJ1ZmZlclsxMl0gPj4gMSkgJiA3KSArIDE7IC8qIFBfVFlQRSAwID0gVHlwZSAxICovCiAKKwlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSB0eXBlOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKLQkJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgogCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046Ci0JCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IHR5cGU7CiAJCWJyZWFrOwogCiAJY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKQEAgLTEyNzcsNyArMTI3Nyw2IEBACiAJcmV0dXJuOwogCiBkaXNhYmxlOgotCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7CiAJc2RrcC0+Y2FwYWNpdHkgPSAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDk1YjlmMDYuLjc1NjM4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC05NywxOSArOTcsMjggQEAKICAgICAgICBfX2JlMzIgcmVmX3RhZzsJCS8qIFRhcmdldCBMQkEgb3IgaW5kaXJlY3QgTEJBICovCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCiAKLWV4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKik7CiBleHRlcm4gaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzZF9kaWZfY29tcGxldGUoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAotI2RlZmluZSBzZF9kaWZfb3AoYSwgYiwgYykJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNkX2RpZl9jb25maWdfaG9zdChhKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2RfZGlmX3ByZXBhcmUoYSwgYiwgYykJCQkoMCkKLSNkZWZpbmUgc2RfZGlmX2NvbXBsZXRlKGEsIGIpCQkJKDApCitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX29wKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfY29uZmlnX2hvc3Qoc3RydWN0IHNjc2lfZGlzayAqZGlzaykKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgcywgdW5zaWduZWQgaW50IGEpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEpCit7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDRkMTdmM2QuLjNlYmIxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMxMSwyNiArMzExLDI3IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBzZGtwLT5kaXNrOwogCXU4IHR5cGUgPSBzZGtwLT5wcm90ZWN0aW9uX3R5cGU7CisJaW50IGRpZiwgZGl4OwogCi0JLyogSWYgdGhpcyBIQkEgZG9lc24ndCBzdXBwb3J0IERJWCwgcmVzb3J0IHRvIG5vcm1hbCBJL08gb3IgRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpID09IDApIHsKKwlkaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKKwlkaXggPSBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKIAotCQlpZiAodHlwZSA9PSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTikKLQkJCXJldHVybjsKLQotCQlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSkgPT0gMCkgewotCQkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIlR5cGUgJWQgcHJvdGVjdGlvbiAiIFwKLQkJCQkgICJ1bnN1cHBvcnRlZCBieSBIQkEuIERpc2FibGluZyBESUYuXG4iLCB0eXBlKTsKLQkJCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwKLQkJCSAgdHlwZSk7Ci0KLQkJcmV0dXJuOworCWlmICghZGl4ICYmIHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIDApKSB7CisJCWRpZiA9IDA7IGRpeCA9IDE7CiAJfQogCisJaWYgKHR5cGUpIHsKKwkJaWYgKGRpZikKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJFbmFibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwkJZWxzZQorCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJCSAgIkRpc2FibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwl9CisKKwlpZiAoIWRpeCkKKwkJcmV0dXJuOworCiAJLyogRW5hYmxlIERNQSBvZiBwcm90ZWN0aW9uIGluZm9ybWF0aW9uICovCiAJaWYgKHNjc2lfaG9zdF9nZXRfZ3VhcmQoc2RrcC0+ZGV2aWNlLT5ob3N0KSAmIFNIT1NUX0RJWF9HVUFSRF9JUCkKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCkBAIC0zNDMsMTcgKzM0NCwxNyBAQAogCQllbHNlCiAJCQlibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRpc2ssICZkaWZfdHlwZTFfaW50ZWdyaXR5X2NyYyk7CiAKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLAotCQkgICJFbmFibGluZyAlcyBpbnRlZ3JpdHkgcHJvdGVjdGlvblxuIiwgZGlzay0+aW50ZWdyaXR5LT5uYW1lKTsKKwlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCSAgIkVuYWJsaW5nIERJWCAlcyBwcm90ZWN0aW9uXG4iLCBkaXNrLT5pbnRlZ3JpdHktPm5hbWUpOwogCiAJLyogU2lnbmFsIHRvIGJsb2NrIGxheWVyIHRoYXQgd2Ugc3VwcG9ydCBzZWN0b3IgdGFnZ2luZyAqLwotCWlmICh0eXBlICYmIHNka3AtPkFUTykgeworCWlmIChkaWYgJiYgdHlwZSAmJiBzZGtwLT5BVE8pIHsKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCiAJCQlkaXNrLT5pbnRlZ3JpdHktPnRhZ19zaXplID0gc2l6ZW9mKHUxNikgKyBzaXplb2YodTMyKTsKIAkJZWxzZQogCQkJZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSA9IHNpemVvZih1MTYpOwogCi0JCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJESUYgYXBwbGljYXRpb24gdGFnIHNpemUgJXVcbiIsCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIkRJRiBhcHBsaWNhdGlvbiB0YWcgc2l6ZSAldVxuIiwKIAkJCSAgZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSk7CiAJfQogfQpAQCAtMzYxLDcgKzM2Miw3IEBACiAvKgogICogRElGIERNQSBvcGVyYXRpb24gbWFnaWMgZGVjb2RlciByaW5nLgogICovCi12b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmLCB1bnNpZ25lZCBpbnQgZGl4KQordm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKIApAQCAtNDA2LDcgKzQwNyw4IEBACiAJfQogCiAJc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKLQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgZGlmKTsKKwlpZiAoZGlmKQorCQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgdHlwZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IGJhOWI5YmIuLjkzYmQ1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xNDUwLDEyICsxNDUwLDEwIEBACiAJaWYgKHNnX3N5c2ZzX3ZhbGlkKSB7CiAJCXN0cnVjdCBkZXZpY2UgKnNnX2NsYXNzX21lbWJlcjsKIAotCQlzZ19jbGFzc19tZW1iZXIgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc2dfc3lzZnNfY2xhc3MsCi0JCQkJCQkJY2xfZGV2LT5wYXJlbnQsCi0JCQkJCQkJTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLAotCQkJCQkJCSAgICAgIHNkcC0+aW5kZXgpLAotCQkJCQkJCXNkcCwKLQkJCQkJCQkiJXMiLCBkaXNrLT5kaXNrX25hbWUpOworCQlzZ19jbGFzc19tZW1iZXIgPSBkZXZpY2VfY3JlYXRlKHNnX3N5c2ZzX2NsYXNzLCBjbF9kZXYtPnBhcmVudCwKKwkJCQkJCU1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwKKwkJCQkJCSAgICAgIHNkcC0+aW5kZXgpLAorCQkJCQkJc2RwLCAiJXMiLCBkaXNrLT5kaXNrX25hbWUpOwogCQlpZiAoSVNfRVJSKHNnX2NsYXNzX21lbWJlcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic2dfYWRkOiAiCiAJCQkgICAgICAgImRldmljZV9jcmVhdGUgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwppbmRleCA0ZWIzZGE5Li40YWQzZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCkBAIC0yMjMsOSArMjIzLDkgQEAKIAkJCQlub19tdWx0aSA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxNV0pOwotCQkJc2VjID0gQkNEMkJJTihidWZmZXJbMTZdKTsKLQkJCWZyYW1lID0gQkNEMkJJTihidWZmZXJbMTddKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzE1XSk7CisJCQlzZWMgPSBiY2QyYmluKGJ1ZmZlclsxNl0pOworCQkJZnJhbWUgPSBiY2QyYmluKGJ1ZmZlclsxN10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1Miw5ICsyNTIsOSBAQAogCQkJfQogCQkJaWYgKHJjICE9IDApCiAJCQkJYnJlYWs7Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxXSk7Ci0JCQlzZWMgPSBCQ0QyQklOKGJ1ZmZlclsyXSk7Ci0JCQlmcmFtZSA9IEJDRDJCSU4oYnVmZmVyWzNdKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzFdKTsKKwkJCXNlYyA9IGJjZDJiaW4oYnVmZmVyWzJdKTsKKwkJCWZyYW1lID0gYmNkMmJpbihidWZmZXJbM10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJaWYgKHNlY3RvcikKIAkJCQlzZWN0b3IgLT0gQ0RfTVNGX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYzJiYjUzZTMuLjVjMjhkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC00NDI4LDEzICs0NDI4LDEwIEBACiAJCXNucHJpbnRmKG5hbWUsIDEwLCAiJXMlcyVzIiwgcmV3ID8gIm4iIDogIiIsCiAJCQkgU1RwLT5kaXNrLT5kaXNrX25hbWUsIHN0X2Zvcm1hdHNbaV0pOwogCQlzdF9jbGFzc19tZW1iZXIgPQotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHN0X3N5c2ZzX2NsYXNzLAotCQkJCQkgICAgICAmU1RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LAotCQkJCQkgICAgICBNS0RFVihTQ1NJX1RBUEVfTUFKT1IsCi0JCQkJCQkgICAgVEFQRV9NSU5PUihkZXZfbnVtLAotCQkJCQkJCSAgICAgIG1vZGUsIHJldykpLAotCQkJCQkgICAgICAmU1RwLT5tb2Rlc1ttb2RlXSwKLQkJCQkJICAgICAgIiVzIiwgbmFtZSk7CisJCQlkZXZpY2VfY3JlYXRlKHN0X3N5c2ZzX2NsYXNzLCAmU1RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LAorCQkJCSAgICAgIE1LREVWKFNDU0lfVEFQRV9NQUpPUiwKKwkJCQkJICAgIFRBUEVfTUlOT1IoZGV2X251bSwgbW9kZSwgcmV3KSksCisJCQkJICAgICAgJlNUcC0+bW9kZXNbbW9kZV0sICIlcyIsIG5hbWUpOwogCQlpZiAoSVNfRVJSKHN0X2NsYXNzX21lbWJlcikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInN0JWQ6IGRldmljZV9jcmVhdGUgZmFpbGVkXG4iLAogCQkJICAgICAgIGRldl9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IGQzY2E3ZDMuLjE1MjhkZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTIyMjMsOSArMjIyMyw5IEBACiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0VGUiwgZWZyKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAKIAkvKiBXb3JrYXJvdW5kIHRvIGVuYWJsZSAxMTUyMDAgYmF1ZCBvbiBPTUFQMTUxMCBpbnRlcm5hbCBwb3J0cyAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJiBpc19vbWFwX3BvcnQoKHVuc2lnbmVkIGludCl1cC0+cG9ydC5tZW1iYXNlKSkgeworCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJiBpc19vbWFwX3BvcnQodXApKSB7CiAJCWlmIChiYXVkID09IDExNTIwMCkgewogCQkJcXVvdCA9IDE7CiAJCQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfT1NDXzEyTV9TRUwsIDEpOwpAQCAtMjI3OCwxOCArMjI3OCwyNyBAQAogCQlwLT5wbShwb3J0LCBzdGF0ZSwgb2xkc3RhdGUpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfcG9ydF9zaXplKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcHQpCit7CisJaWYgKHB0LT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQorCQlyZXR1cm4gMHgxMDAwMDA7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAorCWlmIChpc19vbWFwX3BvcnQocHQpKQorCQlyZXR1cm4gMHgxNiA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKKyNlbmRpZgorCXJldHVybiA4IDw8IHB0LT5wb3J0LnJlZ3NoaWZ0OworfQorCiAvKgogICogUmVzb3VyY2UgaGFuZGxpbmcuCiAgKi8KIHN0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXF1ZXN0X3N0ZF9yZXNvdXJjZShzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXVuc2lnbmVkIGludCBzaXplID0gOCA8PCB1cC0+cG9ydC5yZWdzaGlmdDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlcmlhbDgyNTBfcG9ydF9zaXplKHVwKTsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAodXAtPnBvcnQuaW90eXBlKSB7CiAJY2FzZSBVUElPX0FVOgotCQlzaXplID0gMHgxMDAwMDA7Ci0JCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgVVBJT19UU0k6CiAJY2FzZSBVUElPX01FTTMyOgogCWNhc2UgVVBJT19NRU06CkBAIC0yMzIzLDEyICsyMzMyLDEwIEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfcmVsZWFzZV9zdGRfcmVzb3VyY2Uoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDggPDwgdXAtPnBvcnQucmVnc2hpZnQ7CisJdW5zaWduZWQgaW50IHNpemUgPSBzZXJpYWw4MjUwX3BvcnRfc2l6ZSh1cCk7CiAKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgewogCWNhc2UgVVBJT19BVToKLQkJc2l6ZSA9IDB4MTAwMDAwOwotCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFVQSU9fVFNJOgogCWNhc2UgVVBJT19NRU0zMjoKIAljYXNlIFVQSU9fTUVNOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKaW5kZXggMDQxNmFkMy4uNDE4YjRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkucHJvYmUJCT0gc2VyaWFsX2luaXRfY2hpcCwKIH07CiAKLWludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQogewogCXJlZ2lzdGVyX3BhcmlzY19kcml2ZXIoJmxhc2lfZHJpdmVyKTsKIAlyZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDMxNzg2YjMuLmRiNzgzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtMTEyMyw0MiArMTEyMyw2IEBACiAJICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCiAJICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKIAotY29uZmlnIFNFUklBTF9DUE1fU0NDMQotCWJvb2wgIlN1cHBvcnQgZm9yIFNDQzEgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNDQzEgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TQ0MyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0NDMiBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU0NDMiBhcyBhIHNlcmlhbCBwb3J0Ci0KLWNvbmZpZyBTRVJJQUxfQ1BNX1NDQzMKLQlib29sICJTdXBwb3J0IGZvciBTQ0MzIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTQ0MzIGFzIGEgc2VyaWFsIHBvcnQKLQotY29uZmlnIFNFUklBTF9DUE1fU0NDNAotCWJvb2wgIlN1cHBvcnQgZm9yIFNDQzQgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNDQzQgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TTUMxCi0JYm9vbCAiU3VwcG9ydCBmb3IgU01DMSBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU01DMSBhcyBhIHNlcmlhbCBwb3J0Ci0KLWNvbmZpZyBTRVJJQUxfQ1BNX1NNQzIKLQlib29sICJTdXBwb3J0IGZvciBTTUMyIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTTUMyIGFzIGEgc2VyaWFsIHBvcnQKLQogY29uZmlnIFNFUklBTF9TR0lfTDFfQ09OU09MRQogCWJvb2wgIlNHSSBBbHRpeCBMMSBzZXJpYWwgY29uc29sZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDI1ZWZjYTUuLmE2YzRkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTEzMzMsNiArMTMzMyw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIGluaXRpYWxpemUgdGhlIGRldmljZSBwb2ludGVyIGZvciB0aGUgcG9ydCAqLworCXBpbmZvLT5wb3J0LmRldiA9ICZvZmRldi0+ZGV2OworCiAJcmV0dXJuIHVhcnRfYWRkX29uZV9wb3J0KCZjcG1fcmVnLCAmcGluZm8tPnBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKaW5kZXggMGYwYWZmMC4uMWI5NGM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCW1lbV9hZGRyID0gKHU4ICopIGNwbV9kcHJhbV9hZGRyKGNwbV9kcGFsbG9jKG1lbXN6LCA4KSk7CiAJCWRtYV9hZGRyID0gKHUzMiljcG1fZHByYW1fcGh5cyhtZW1fYWRkcik7CiAJfSBlbHNlCi0JCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCisJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgbWVtc3osICZkbWFfYWRkciwKIAkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobWVtX2FkZHIgPT0gTlVMTCkgewpAQCAtMTI3LDggKzEyNyw4IEBACiAKIHZvaWQgY3BtX3VhcnRfZnJlZWJ1ZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgotCQkJCQkgICAgICAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCisJZG1hX2ZyZWVfY29oZXJlbnQocGluZm8tPnBvcnQuZGV2LCBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqCisJCQkJCQkJICBwaW5mby0+cnhfZmlmb3NpemUpICsKIAkJCSAgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnR4X25yZmlmb3MgKgogCQkJCQkgcGluZm8tPnR4X2ZpZm9zaXplKSwgcGluZm8tPm1lbV9hZGRyLAogCQkJICBwaW5mby0+ZG1hX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IGI4ZGI0ZDMuLjE0MWMwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlkbWFfYWRkciA9IHZpcnRfdG9fYnVzKG1lbV9hZGRyKTsKIAl9CiAJZWxzZQotCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBtZW1zeiwgJmRtYV9hZGRyLAorCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChwaW5mby0+cG9ydC5kZXYsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKG1lbV9hZGRyID09IE5VTEwpIHsKQEAgLTE2Myw4ICsxNjMsOCBAQAogCiB2b2lkIGNwbV91YXJ0X2ZyZWVidWYoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvKQogewotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT5yeF9ucmZpZm9zICoKLQkJCQkJICAgICAgIHBpbmZvLT5yeF9maWZvc2l6ZSkgKworCWRtYV9mcmVlX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgorCQkJCQkJCSAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCiAJCQkgIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT50eF9ucmZpZm9zICoKIAkJCQkJIHBpbmZvLT50eF9maWZvc2l6ZSksICh2b2lkIF9fZm9yY2UgKilwaW5mby0+bWVtX2FkZHIsCiAJCQkgIHBpbmZvLT5kbWFfYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDM2MTI2MDcuLjYxMTdkM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MiwxMyArNzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KICNpbmNsdWRlIDxhc20vbXBjNTEyeC5oPgpAQCAtMTA3LDEyICsxMDIsMTEgQEAKIAkgKiAgICAgICAgaXQncyBjbGVhcmVkLCB0aGVuIGEgbWVtc2V0KC4uLiwwLC4uLikgc2hvdWxkIGJlIGFkZGVkIHRvCiAJICogICAgICAgIHRoZSBjb25zb2xlX2luaXQKIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisKIC8qIGxvb2t1cCB0YWJsZSBmb3IgbWF0Y2hpbmcgZGV2aWNlIG5vZGVzIHRvIGluZGV4IG51bWJlcnMgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1wYzUyeHhfdWFydF9ub2Rlc1tNUEM1Mnh4X1BTQ19NQVhOVU1dOwogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3VhcnRfb2ZfZW51bWVyYXRlKHZvaWQpOwotI2VuZGlmCiAKIAogI2RlZmluZSBQU0MocG9ydCkgKChzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqKSgocG9ydCktPm1lbWJhc2UpKQpAQCAtMjU1LDE3ICsyNDksMTIgQEAKIC8qIFNlYXJjaCBmb3IgYnVzLWZyZXF1ZW5jeSBwcm9wZXJ0eSBpbiB0aGlzIG5vZGUgb3IgYSBwYXJlbnQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1wYzUyeHhfZ2V0dWFydGNsayh2b2lkICpwKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAkvKgogCSAqIDUyMDAgVUFSVHMgaGF2ZSBhIC8gMzIgcHJlc2NhbGVyCiAJICogYnV0IHRoZSBnZW5lcmljIHNlcmlhbCBjb2RlIGFzc3VtZXMgMTYKIAkgKiBzbyByZXR1cm4gaXBiIGZyZXEgLyAyCiAJICovCiAJcmV0dXJuIG1wYzUyeHhfZmluZF9pcGJfZnJlcShwKSAvIDI7Ci0jZWxzZQotCXByX2RlYnVnKCJ1bmV4cGVjdGVkIGNhbGwgdG8gbXBjNTJ4eF9nZXR1YXJ0Y2xrIHdpdGggYXJjaC9wcGNcbiIpOwotCXJldHVybiBOVUxMOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHNjX29wcyBtcGM1Mnh4X3BzY19vcHMgPSB7CkBAIC04ODYsMTAgKzg3NSw2IEBACiAKIAkvKiBDVHtVLEx9UiBhcmUgd3JpdGUtb25seSAhICovCiAJKmJhdWQgPSBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEOwotI2lmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0JaWYgKF9fcmVzLmJpX2JhdWRyYXRlKQotCQkqYmF1ZCA9IF9fcmVzLmJpX2JhdWRyYXRlOwotI2VuZGlmCiAKIAkvKiBQYXJzZSB0aGVtICovCiAJc3dpdGNoIChtcjEgJiBNUEM1Mnh4X1BTQ19NT0RFX0JJVFNfTUFTSykgewpAQCAtOTQ2LDQyICs5MzEsNiBAQAogCXBzY19vcHMtPmN3X3Jlc3RvcmVfaW50cyhwb3J0KTsKIH0KIAotI2lmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi1zdGF0aWMgaW50IF9faW5pdAotbXBjNTJ4eF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJm1wYzUyeHhfdWFydF9wb3J0c1tjby0+aW5kZXhdOwotCi0JaW50IGJhdWQgPSBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEOwotCWludCBiaXRzID0gODsKLQlpbnQgcGFyaXR5ID0gJ24nOwotCWludCBmbG93ID0gJ24nOwotCi0JaWYgKGNvLT5pbmRleCA8IDAgfHwgY28tPmluZGV4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBCYXNpYyBwb3J0IGluaXQuIE5lZWRlZCBzaW5jZSB3ZSB1c2Ugc29tZSB1YXJ0Xz8/PyBmdW5jIGJlZm9yZQotCSAqIHJlYWwgaW5pdCBmb3IgZWFybHkgYWNjZXNzICovCi0Jc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwotCXBvcnQtPnVhcnRjbGsJPSBfX3Jlcy5iaV9pcGJmcmVxIC8gMjsgLyogTG9vayBhdCBDVExSIGRvYyAqLwotCXBvcnQtPm9wcwk9ICZtcGM1Mnh4X3VhcnRfb3BzOwotCXBvcnQtPm1hcGJhc2UJPSBNUEM1Mnh4X1BBKE1QQzUyeHhfUFNDeF9PRkZTRVQoY28tPmluZGV4KzEpKTsKLQotCS8qIFdlIGlvcmVtYXAgb3Vyc2VsZiAqLwotCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIE1QQzUyeHhfUFNDX1NJWkUpOwotCWlmIChwb3J0LT5tZW1iYXNlID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2V0dXAgdGhlIHBvcnQgcGFyYW1ldGVycyBhY2NvZGluZyB0byBvcHRpb25zICovCi0JaWYgKG9wdGlvbnMpCi0JCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKLQllbHNlCi0JCW1wYzUyeHhfY29uc29sZV9nZXRfb3B0aW9ucyhwb3J0LCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKLQotCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwotfQotCi0jZWxzZQogCiBzdGF0aWMgaW50IF9faW5pdAogbXBjNTJ4eF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKQEAgLTEwNTMsNyArMTAwMiw2IEBACiAKIAlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCiAKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBtcGM1Mnh4X3VhcnRfZHJpdmVyOwpAQCAtMTA3Miw5ICsxMDIwLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBtcGM1Mnh4X2NvbnNvbGVfaW5pdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAltcGM1Mnh4X3VhcnRfb2ZfZW51bWVyYXRlKCk7Ci0jZW5kaWYKIAlyZWdpc3Rlcl9jb25zb2xlKCZtcGM1Mnh4X2NvbnNvbGUpOwogCXJldHVybiAwOwogfQpAQCAtMTEwMCwxMTUgKzEwNDYsNiBAQAogCS5jb25zCQk9IE1QQzUyeHhfUFNDX0NPTlNPTEUsCiB9OwogCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBQbGF0Zm9ybSBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotbXBjNTJ4eF91YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7Ci0KLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gTlVMTDsKLQlpbnQgaSwgaWR4LCByZXQ7Ci0KLQkvKiBDaGVjayB2YWxpZGl0eSAmIHByZXNlbmNlICovCi0JaWR4ID0gZGV2LT5pZDsKLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTVBDNTJ4eF9QU0NfTUFYTlVNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghbXBjNTJ4eF9tYXRjaF9wc2NfZnVuY3Rpb24oaWR4LCAidWFydCIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEluaXQgdGhlIHBvcnQgc3RydWN0dXJlICovCi0JcG9ydCA9ICZtcGM1Mnh4X3VhcnRfcG9ydHNbaWR4XTsKLQotCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQlwb3J0LT51YXJ0Y2xrCT0gX19yZXMuYmlfaXBiZnJlcSAvIDI7IC8qIExvb2sgYXQgQ1RMUiBkb2MgKi8KLQlwb3J0LT5maWZvc2l6ZQk9IDUxMjsKLQlwb3J0LT5pb3R5cGUJPSBVUElPX01FTTsKLQlwb3J0LT5mbGFncwk9IFVQRl9CT09UX0FVVE9DT05GIHwKLQkJCSAgKHVhcnRfY29uc29sZShwb3J0KSA/IDAgOiBVUEZfSU9SRU1BUCk7Ci0JcG9ydC0+bGluZQk9IGlkeDsKLQlwb3J0LT5vcHMJPSAmbXBjNTJ4eF91YXJ0X29wczsKLQlwb3J0LT5kZXYJPSAmZGV2LT5kZXY7Ci0KLQkvKiBTZWFyY2ggZm9yIElSUSBhbmQgbWFwYmFzZSAqLwotCWZvciAoaSA9IDAgOyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzIDsgaSsrLCByZXMrKykgewotCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJcG9ydC0+bWFwYmFzZSA9IHJlcy0+c3RhcnQ7Ci0JCWVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lSUSkKLQkJCXBvcnQtPmlycSA9IHJlcy0+c3RhcnQ7Ci0JfQotCWlmICghcG9ydC0+aXJxIHx8ICFwb3J0LT5tYXBiYXNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEFkZCB0aGUgcG9ydCB0byB0aGUgdWFydCBzdWItc3lzdGVtICovCi0JcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCWlmICghcmV0KQotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopcG9ydCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0KLQlpZiAocG9ydCkKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKHBvcnQpCi0JCXVhcnRfc3VzcGVuZF9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChwb3J0KQotCQl1YXJ0X3Jlc3VtZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM1Mnh4LXBzYyIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewotCS5wcm9iZQkJPSBtcGM1Mnh4X3VhcnRfcHJvYmUsCi0JLnJlbW92ZQkJPSBtcGM1Mnh4X3VhcnRfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gbXBjNTJ4eF91YXJ0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBtcGM1Mnh4X3VhcnRfcmVzdW1lLAotI2VuZGlmCi0JLmRyaXZlcgkJPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJtcGM1Mnh4LXBzYyIsCi0JfSwKLX07Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBPRiBQbGF0Zm9ybSBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTQwMiw3ICsxMjM5LDYgQEAKIAkJLm5hbWUJPSAibXBjNTJ4eC1wc2MtdWFydCIsCiAJfSwKIH07Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKSAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTQyMyw3ICsxMjU5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOwogCiAJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3VhcnRfb2ZfZHJpdmVyKTsKQEAgLTE0MzMsMTYgKzEyNjgsNiBAQAogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0jZWxzZQotCXBzY19vcHMgPSAmbXBjNTJ4eF9wc2Nfb3BzOwotCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgZmFpbGVkICglaSlcbiIsCi0JCSAgICAgICBfX0ZJTEVfXywgcmV0KTsKLQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7Ci0JCXJldHVybiByZXQ7Ci0JfQotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NTAsMTEgKzEyNzUsNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF91YXJ0X29mX2RyaXZlcik7Ci0jZWxzZQotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKLSNlbmRpZgogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKaW5kZXggYzhiNDI2Ni4uNDg3M2YyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDQwYTI1MzEuLjg3YzE4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlICJzYW1zdW5nLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMKaW5kZXggZDAxNzAzMS4uZmQwMTdiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTIuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYwppbmRleCBkNGEyYjE3Li4zMTdkMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDQwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQ0MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDVhODhiM2Y5Li4xZTIxOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDhmY2I0YzUuLjczMTNjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAkJcmV0ID0gc2VyaWFsX3R4eDlfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBwb3J0IGF0IGluZGV4ICVkICIKLQkJCQkiKElPJXggTUVNJWxseCBJUlElZCk6ICVkXG4iLCBpLAorCQkJCSIoSU8lbHggTUVNJWxseCBJUlElZCk6ICVkXG4iLCBpLAogCQkJCXAtPmlvYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5tYXBiYXNlLAogCQkJCXAtPmlycSwgcmV0KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCAzZGYyYWFlLi4zYjlkMmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTdXBlckggb24tY2hpcCBzZXJpYWwgbW9kdWxlIHN1cHBvcnQuICAoU0NJIHdpdGggbm8gRklGTyAvIHdpdGggRklGTykKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNiAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBNb2RpZmllZCB0byBzdXBwb3J0IFNINzcyMCBTQ0lGLiBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcyAoSnVsIDIwMDcpLgogICoKICAqIGJhc2VkIG9mZiBvZiB0aGUgb2xkIGRyaXZlcnMvY2hhci9zaC1zY2kuYyBieToKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2lmZGVmIENPTkZJR19TVVBFUkgKICNpbmNsdWRlIDxhc20vY2xvY2suaD4KQEAgLTc4LDcgKzc5LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAlicmVha190aW1lcjsKIAlpbnQJCQlicmVha19mbGFnOwogCi0jaWZkZWYgQ09ORklHX1NVUEVSSAorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCS8qIFBvcnQgY2xvY2sgKi8KIAlzdHJ1Y3QgY2xrCQkqY2xrOwogI2VuZGlmCkBAIC04MzEsNyArODMyLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkgJiYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAvKgogICogSGVyZSB3ZSBkZWZpbmUgYSB0cmFuc2lzdGlvbiBub3RpZmllciBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgYWxsIG9mIG91cgogICogcG9ydHMnIGJhdWQgcmF0ZSB3aGVuIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGNoYW5nZXMuCkBAIC04NjAsNyArODYxLDcgQEAKIAkJCSAqIENsZWFuIHRoaXMgdXAgbGF0ZXIuLgogCQkJICovCiAJCQljbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7Ci0JCQlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgKiAxNjsKKwkJCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAkJCWNsa19wdXQoY2xrKTsKIAkJfQogCkBAIC04NzMsNyArODc0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzY2lfbmIgPSB7ICZzY2lfbm90aWZpZXIsIE5VTEwsIDAgfTsKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVEgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVEgJiYgQ09ORklHX0hBVkVfQ0xLICovCiAKIHN0YXRpYyBpbnQgc2NpX3JlcXVlc3RfaXJxKHN0cnVjdCBzY2lfcG9ydCAqcG9ydCkKIHsKQEAgLTEwMDgsNyArMTAwOSw3IEBACiAJaWYgKHMtPmVuYWJsZSkKIAkJcy0+ZW5hYmxlKHBvcnQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJcy0+Y2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwogI2VuZGlmCiAKQEAgLTEwMzAsNyArMTAzMSw3IEBACiAJaWYgKHMtPmRpc2FibGUpCiAJCXMtPmRpc2FibGUocG9ydCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgpICYmICFkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAljbGtfcHV0KHMtPmNsayk7CiAJcy0+Y2xrID0gTlVMTDsKICNlbmRpZgpAQCAtMTA0MSwyNCArMTA0MiwxMSBAQAogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9ICZzY2lfcG9ydHNbcG9ydC0+bGluZV07CiAJdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbDsKLQlpbnQgdDsKKwlpbnQgdCA9IC0xOwogCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwotCi0Jc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgMDoKLQkJCXQgPSAtMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQl7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0JCQl0ID0gU0NCUlJfVkFMVUUoYmF1ZCwgY2xrX2dldF9yYXRlKHMtPmNsaykpOwotI2Vsc2UKLQkJCXQgPSBTQ0JSUl9WQUxVRShiYXVkKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQl9CisJaWYgKGxpa2VseShiYXVkKSkKKwkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQsIHBvcnQtPnVhcnRjbGspOwogCiAJZG8gewogCQlzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwpAQCAtMTExMyw3ICsxMTAxLDcgQEAKIAkJY2FzZSBQT1JUX0lSREE6IHJldHVybiAiaXJkYSI7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTExNDUsMTIgKzExMzMsMTYgQEAKIAkJYnJlYWs7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAwKQorCWlmIChwb3J0LT5mbGFncyAmIFVQRl9JT1JFTUFQICYmICFwb3J0LT5tZW1iYXNlKSB7CisjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCiAJCXBvcnQtPm1hcGJhc2UgPSBvbmNoaXBfcmVtYXAoU0NJRl9BRERSX1NINSwgMTAyNCwgIlNDSUYiKTsKLQotCXBvcnQtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcG9ydC0+bWFwYmFzZTsKKwkJcG9ydC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwb3J0LT5tYXBiYXNlOworI2Vsc2UKKwkJcG9ydC0+bWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwb3J0LT5tYXBiYXNlLCAweDQwKTsKICNlbmRpZgorCisJCXByaW50ayhLRVJOX0VSUiAic2NpOiBjYW4ndCByZW1hcCBwb3J0IyVkXG4iLCBwb3J0LT5saW5lKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2NpX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCkBAIC0xMjA3LDE3ICsxMTk5LDE3IEBACiAJCXNjaV9wb3J0c1tpXS5kaXNhYmxlCT0gaDgzMDBfc2NpX2Rpc2FibGU7CiAjZW5kaWYKIAkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IENPTkZJR19DUFVfQ0xPQ0s7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLQkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrICogMTY7Ci0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAJCS8qCiAJCSAqIFhYWDogV2Ugc2hvdWxkIHVzZSBhIHByb3BlciBTQ0kvU0NJRiBjbG9jawogCQkgKi8KIAkJewogCQkJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwotCQkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspICogMTY7CisJCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsayk7CiAJCQljbGtfcHV0KGNsayk7CiAJCX0KKyNlbHNlCisjZXJyb3IgIk5lZWQgYSB2YWxpZCB1YXJ0Y2xrIgogI2VuZGlmCiAKIAkJc2NpX3BvcnRzW2ldLmJyZWFrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykmc2NpX3BvcnRzW2ldOwpAQCAtMTI4NSw3ICsxMjc3LDcgQEAKIAogCXBvcnQtPnR5cGUgPSBzZXJpYWxfY29uc29sZV9wb3J0LT50eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKCFzZXJpYWxfY29uc29sZV9wb3J0LT5jbGspCiAJCXNlcmlhbF9jb25zb2xlX3BvcnQtPmNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKICNlbmRpZgpAQCAtMTQzNiw3ICsxNDI4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRfc2NpX3BvcnQgKnAgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCBpOworCWludCBpLCByZXQgPSAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgcCAmJiBwLT5mbGFncyAhPSAwOyBwKyssIGkrKykgewogCQlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaXBvcnQgPSAmc2NpX3BvcnRzW2ldOwpAQCAtMTQ1MywxMiArMTQ0NSwyMiBAQAogCiAJCXNjaXBvcnQtPnBvcnQubWFwYmFzZQk9IHAtPm1hcGJhc2U7CiAKLQkJLyoKLQkJICogRm9yIHRoZSBzaW1wbGUgKGFuZCBtYWpvcml0eSBvZikgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZAotCQkgKiB0byBkbyBhbnkgcmVtYXBwaW5nLCBqdXN0IGNhc3QgdGhlIGNvb2tpZSBkaXJlY3RseS4KLQkJICovCi0JCWlmIChwLT5tYXBiYXNlICYmICFwLT5tZW1iYXNlICYmICEocC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCkpCi0JCQlwLT5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKXAtPm1hcGJhc2U7CisJCWlmIChwLT5tYXBiYXNlICYmICFwLT5tZW1iYXNlKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCkgeworCQkJCXAtPm1lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocC0+bWFwYmFzZSwgMHg0MCk7CisJCQkJaWYgKElTX0VSUihwLT5tZW1iYXNlKSkgeworCQkJCQlyZXQgPSBQVFJfRVJSKHAtPm1lbWJhc2UpOworCQkJCQlnb3RvIGVycl91bnJlZzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRm9yIHRoZSBzaW1wbGUgKGFuZCBtYWpvcml0eSBvZikgY2FzZXMKKwkJCQkgKiB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSByZW1hcHBpbmcsCisJCQkJICoganVzdCBjYXN0IHRoZSBjb29raWUgZGlyZWN0bHkuCisJCQkJICovCisJCQkJcC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwLT5tYXBiYXNlOworCQkJfQorCQl9CiAKIAkJc2NpcG9ydC0+cG9ydC5tZW1iYXNlCT0gcC0+bWVtYmFzZTsKIApAQCAtMTQ3OSw3ICsxNDgxLDcgQEAKIAlrZ2RiX3B1dGNoYXIJPSBrZ2RiX3NjaV9wdXRjaGFyOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkgJiYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmc2NpX25iLCBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwogCWRldl9pbmZvKCZkZXYtPmRldiwgIkNQVSBmcmVxdWVuY3kgbm90aWZpZXIgcmVnaXN0ZXJlZFxuIik7CiAjZW5kaWYKQEAgLTE0ODksNiArMTQ5MSwxMiBAQAogI2VuZGlmCiAKIAlyZXR1cm4gMDsKKworZXJyX3VucmVnOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNjaV91YXJ0X2RyaXZlciwgJnNjaV9wb3J0c1tpXS5wb3J0KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHNjaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCA4YTA3NDllLi43Y2QyOGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMzIwLDE4ICszMjAsMTYgQEAKICNkZWZpbmUgU0NJX0VWRU5UX1dSSVRFX1dBS0VVUAkwCiAKICNkZWZpbmUgU0NJX0lOKHNpemUsIG9mZnNldCkJCQkJCVwKLSAgdW5zaWduZWQgaW50IGFkZHIgPSBwb3J0LT5tYXBiYXNlICsgKG9mZnNldCk7CQkJXAogICBpZiAoKHNpemUpID09IDgpIHsJCQkJCQlcCi0gICAgcmV0dXJuIGN0cmxfaW5iKGFkZHIpOwkJCQkJXAorICAgIHJldHVybiBpb3JlYWQ4KHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9IGVsc2UgewkJCQkJCQlcCi0gICAgcmV0dXJuIGN0cmxfaW53KGFkZHIpOwkJCQkJXAorICAgIHJldHVybiBpb3JlYWQxNihwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKICAgfQogI2RlZmluZSBTQ0lfT1VUKHNpemUsIG9mZnNldCwgdmFsdWUpCQkJCVwKLSAgdW5zaWduZWQgaW50IGFkZHIgPSBwb3J0LT5tYXBiYXNlICsgKG9mZnNldCk7CQkJXAogICBpZiAoKHNpemUpID09IDgpIHsJCQkJCQlcCi0gICAgY3RybF9vdXRiKHZhbHVlLCBhZGRyKTsJCQkJCVwKKyAgICBpb3dyaXRlOCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0gZWxzZSBpZiAoKHNpemUpID09IDE2KSB7CQkJCQlcCi0gICAgY3RybF9vdXR3KHZhbHVlLCBhZGRyKTsJCQkJCVwKKyAgICBpb3dyaXRlMTYodmFsdWUsIHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9CiAKICNkZWZpbmUgQ1BVX1NDSXhfRk5TKG5hbWUsIHNjaV9vZmZzZXQsIHNjaV9zaXplLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKVwKQEAgLTc5MSwxMSArNzg5LDE2IEBACiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMikrMTYqYnBzKS8oMzIqYnBzKS0xKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQotI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjIpKzE2KmJwcykvKDE2KmJwcyktMSkKK3N0YXRpYyBpbmxpbmUgaW50IHNjYnJyX2NhbGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJwcywgaW50IGNsaykKK3sKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpCisJCXJldHVybiAoY2xrKzE2KmJwcykvKDMyKmJwcyktMTsKKwllbHNlCisJCXJldHVybiAoKGNsayoyKSsxNipicHMpLygxNipicHMpLTE7Cit9CisjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSBzY2Jycl9jYWxjKHBvcnQsIGJwcywgY2xrKQogI2VsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCi0jZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcykgKCgoQ09ORklHX0NQVV9DTE9DSyoxMDAwLzMyKS9icHMpLTEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLSNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzKSAoKGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrKzE2KmJwcykvKDMyKmJwcyktMSkKKyNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoxMDAwLzMyKS9icHMpLTEpCiAjZWxzZSAvKiBHZW5lcmljIFNIICovCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygzMipicHMpLTEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCBiNzNlM2MwLi5kNTI3NmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCkBAIC02MSw3ICs2MSw3IEBACiAjZGVmaW5lIFNOX1NBTF9CVUZGRVJfU0laRSAoNjQgKiAoMSA8PCAxMCkpCiAKICNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19ERVBUSCAxNgotI2RlZmluZSBTTl9TQUxfVUFSVF9GSUZPX1NQRUVEX0NQUyA5NjAwLzEwCisjZGVmaW5lIFNOX1NBTF9VQVJUX0ZJRk9fU1BFRURfQ1BTICg5NjAwLzEwKQogCiAvKiBzbl90cmFuc21pdF9jaGFycygpIGNhbGxpbmcgYXJncyAqLwogI2RlZmluZSBUUkFOU01JVF9CVUZGRVJFRAkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwppbmRleCA1YzVkMThkLi41MzljOTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAJcnhfc2l6ZSA9IEwxX0NBQ0hFX0FMSUdOKHFlX3BvcnQtPnJ4X25yZmlmb3MgKiBxZV9wb3J0LT5yeF9maWZvc2l6ZSk7CiAJdHhfc2l6ZSA9IEwxX0NBQ0hFX0FMSUdOKHFlX3BvcnQtPnR4X25yZmlmb3MgKiBxZV9wb3J0LT50eF9maWZvc2l6ZSk7CiAKLQliZF92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHJ4X3NpemUgKyB0eF9zaXplLCAmYmRfZG1hX2FkZHIsCisJYmRfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChwb3J0LT5kZXYsIHJ4X3NpemUgKyB0eF9zaXplLCAmYmRfZG1hX2FkZHIsCiAJCUdGUF9LRVJORUwpOwogCWlmICghYmRfdmlydCkgewogCQlkZXZfZXJyKHBvcnQtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIgZGVzY3JpcHRvcnNcbiIpOwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X3FlX3BvcnQsIHBvcnQpOwogCXN0cnVjdCB1Y2Nfc2xvd19wcml2YXRlICp1Y2NzID0gcWVfcG9ydC0+dXNfcHJpdmF0ZTsKIAotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHFlX3BvcnQtPmJkX3NpemUsIHFlX3BvcnQtPmJkX3ZpcnQsCisJZG1hX2ZyZWVfY29oZXJlbnQocG9ydC0+ZGV2LCBxZV9wb3J0LT5iZF9zaXplLCBxZV9wb3J0LT5iZF92aXJ0LAogCQkJICBxZV9wb3J0LT5iZF9kbWFfYWRkcik7CiAKIAl1Y2Nfc2xvd19mcmVlKHVjY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9NYWtlZmlsZSBiL2RyaXZlcnMvc2gvTWFrZWZpbGUKaW5kZXggYTk2ZjRhOC4uNmEwMjVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NoL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFN1cGVySCBzcGVjaWZpYyBkcml2ZXJzLgogIwotCiBvYmotJChDT05GSUdfU1VQRVJIWVdBWSkJKz0gc3VwZXJoeXdheS8KIG9iai0kKENPTkZJR19NQVBMRSkJCSs9IG1hcGxlLworb2JqLXkJCQkJKz0gaW50Yy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDI0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMCwwICsxLDcxMyBAQAorLyoKKyAqIFNoYXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBmb3IgSVBSIGFuZCBJTlRDMiB0eXBlcyBvZiBJUlFzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIEJhc2VkIG9uIGludGMyLmMgYW5kIGlwci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAxICBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzICBUYWthc2hpIEt1c3VkYSA8a3VzdWRhLXRha2FzaGlAaGl0YWNoaS11bC5jby5qcD4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KKworI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAorCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXAorCSAoKGFkZHJfZSkgPDwgMTYpIHwgKChhZGRyX2QgPDwgMjQpKSkKKworI2RlZmluZSBfSU5UQ19TSElGVChoKSAoaCAmIDB4MWYpCisjZGVmaW5lIF9JTlRDX1dJRFRIKGgpICgoaCA+PiA1KSAmIDB4ZikKKyNkZWZpbmUgX0lOVENfRk4oaCkgKChoID4+IDkpICYgMHhmKQorI2RlZmluZSBfSU5UQ19NT0RFKGgpICgoaCA+PiAxMykgJiAweDcpCisjZGVmaW5lIF9JTlRDX0FERFJfRShoKSAoKGggPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgX0lOVENfQUREUl9EKGgpICgoaCA+PiAyNCkgJiAweGZmKQorCitzdHJ1Y3QgaW50Y19oYW5kbGVfaW50IHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaGFuZGxlOworfTsKKworc3RydWN0IGludGNfZGVzY19pbnQgeworCXVuc2lnbmVkIGxvbmcgKnJlZzsKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyAqc21wOworI2VuZGlmCisJdW5zaWduZWQgaW50IG5yX3JlZzsKKwlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpwcmlvOworCXVuc2lnbmVkIGludCBucl9wcmlvOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnNlbnNlOworCXVuc2lnbmVkIGludCBucl9zZW5zZTsKKwlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKK307CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIElTX1NNUCh4KSB4LnNtcAorI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0gKyAoKGQtPnNtcFsoeCldICYgMHhmZikgKiBjKSkKKyNkZWZpbmUgU01QX05SKGQsIHgpICgoZC0+c21wWyh4KV0gPj4gOCkgPyAoZC0+c21wWyh4KV0gPj4gOCkgOiAxKQorI2Vsc2UKKyNkZWZpbmUgSVNfU01QKHgpIDAKKyNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldKQorI2RlZmluZSBTTVBfTlIoZCwgeCkgMQorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y19wcmlvX2xldmVsW05SX0lSUVNdOyAvKiBmb3Igbm93ICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhY2tfaGFuZGxlW05SX0lSUVNdOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGNfZGVzY19pbnQgKmdldF9pbnRjX2Rlc2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGludGNfZGVzY19pbnQsIGNoaXApKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2V0X2ZpZWxkKHVuc2lnbmVkIGludCB2YWx1ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWx1ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisJdW5zaWduZWQgaW50IHdpZHRoID0gX0lOVENfV0lEVEgoaGFuZGxlKTsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBfSU5UQ19TSElGVChoYW5kbGUpOworCisJdmFsdWUgJj0gfigoKDEgPDwgd2lkdGgpIC0gMSkgPDwgc2hpZnQpOworCXZhbHVlIHw9IGZpZWxkX3ZhbHVlIDw8IHNoaWZ0OworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRlYihzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRldyhzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRlbChzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBtb2RpZnlfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlYihzZXRfZmllbGQoX19yYXdfcmVhZGIoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRldyhzZXRfZmllbGQoX19yYXdfcmVhZHcoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlbChzZXRfZmllbGQoX19yYXdfcmVhZGwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK2VudW0gewlSRUdfRk5fRVJSID0gMCwgUkVHX0ZOX1dSSVRFX0JBU0UgPSAxLCBSRUdfRk5fTU9ESUZZX0JBU0UgPSA1IH07CisKK3N0YXRpYyB2b2lkICgqaW50Y19yZWdfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkgPSB7CisJW1JFR19GTl9XUklURV9CQVNFICsgMF0gPSB3cml0ZV84LAorCVtSRUdfRk5fV1JJVEVfQkFTRSArIDFdID0gd3JpdGVfMTYsCisJW1JFR19GTl9XUklURV9CQVNFICsgM10gPSB3cml0ZV8zMiwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgMF0gPSBtb2RpZnlfOCwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgMV0gPSBtb2RpZnlfMTYsCisJW1JFR19GTl9NT0RJRllfQkFTRSArIDNdID0gbW9kaWZ5XzMyLAorfTsKKworZW51bSB7CU1PREVfRU5BQkxFX1JFRyA9IDAsIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGVuYWJsZWQgKi8KKwlNT0RFX01BU0tfUkVHLCAgICAgICAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBkaXNhYmxlZCAqLworCU1PREVfRFVBTF9SRUcsICAgICAgIC8qIFR3byByZWdpc3RlcnMsIHNldCBiaXQgdG8gZW5hYmxlIC8gZGlzYWJsZSAqLworCU1PREVfUFJJT19SRUcsICAgICAgIC8qIFByaW9yaXR5IHZhbHVlIHdyaXR0ZW4gdG8gZW5hYmxlIGludGVycnVwdCAqLworCU1PREVfUENMUl9SRUcsICAgICAgIC8qIEFib3ZlIHBsdXMgYWxsIGJpdHMgc2V0IHRvIGRpc2FibGUgaW50ZXJydXB0ICovCit9OworCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfZmllbGQodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJICAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICAgdW5zaWduZWQgaW50IGlycSkKK3sKKwlmbihhZGRyLCBoYW5kbGUsICgoMSA8PCBfSU5UQ19XSURUSChoYW5kbGUpKSAtIDEpKTsKK30KKworc3RhdGljIHZvaWQgaW50Y19tb2RlX3plcm8odW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJICAgdW5zaWduZWQgaW50IGlycSkKK3sKKwlmbihhZGRyLCBoYW5kbGUsIDApOworfQorCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfcHJpbyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19wcmlvX2xldmVsW2lycV0pOworfQorCitzdGF0aWMgdm9pZCAoKmludGNfZW5hYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCSB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCisJCQkJIHVuc2lnbmVkIGludCBpcnEpID0geworCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfcHJpbywKKwlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfcHJpbywKK307CisKK3N0YXRpYyB2b2lkICgqaW50Y19kaXNhYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCQkgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfemVybywKKwlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7CisJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKKwkJaW50Y19lbmFibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNcCisJCQkJCQkgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOworCX0KK30KKworc3RhdGljIHZvaWQgaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlfaW50Y19lbmFibGUoaXJxLCAodW5zaWduZWQgbG9uZylnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaW50Y19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBoYW5kbGUgPSAodW5zaWduZWQgbG9uZykgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOworCQlpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLGludGNfcmVnX2Zuc1wKKwkJCQkJCSAgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOworCX0KK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOworCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gYWNrX2hhbmRsZVtpcnFdOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWludGNfZGlzYWJsZShpcnEpOworCisJLyogcmVhZCByZWdpc3RlciBhbmQgd3JpdGUgemVybyBvbmx5IHRvIHRoZSBhc3NvY2FpdGVkIGJpdCAqLworCisJaWYgKGhhbmRsZSkgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOworCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKKwkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCisJCQlfX3Jhd19yZWFkYihhZGRyKTsKKwkJCV9fcmF3X3dyaXRlYigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMToJLyogMTZiaXQgKi8KKwkJCV9fcmF3X3JlYWR3KGFkZHIpOworCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKKwkJCWJyZWFrOworCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDM6CS8qIDMyYml0ICovCisJCQlfX3Jhd19yZWFkbChhZGRyKTsKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppbnRjX2ZpbmRfaXJxKHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBucl9ocCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpOworCisJLyogdGhpcyBkb2Vzbid0IHNjYWxlIHdlbGwsIGJ1dC4uLgorCSAqCisJICogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjZXJhaW4gdW5jb21tb24KKwkgKiBvcGVyYXRpb25zIHN1Y2ggYXMgaW50Y19zZXRfcHJpb3JpdHkoKSBhbmQgaW50Y19zZXRfc2Vuc2UoKQorCSAqIGFuZCBpbiB0aG9zZSByYXJlIGNhc2VzIHBlcmZvcm1hbmNlIGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KKwkgKiBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGxvdyBpcyBtb3JlIGltcG9ydGFudC4KKwkgKgorCSAqIG9uZSByYXRoZXIgc2ltcGxlIHdheSB0byBzcGVlZCB0aGlzIHVwIGFuZCBzdGlsbCBrZWVwIHRoZQorCSAqIG1lbW9yeSBmb290cHJpbnQgZG93biBpcyB0byBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNvcnRlZAorCSAqIGFuZCB0aGVuIHBlcmZvcm0gYSBiaXNlY3QgdG8gbG9va3VwIHRoZSBpcnEuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaHA7IGkrKykgeworCQlpZiAoKGhwICsgaSktPmlycSAhPSBpcnEpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gaHAgKyBpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOworCisJaWYgKCFpbnRjX3ByaW9fbGV2ZWxbaXJxXSB8fCBwcmlvIDw9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWhwID0gaW50Y19maW5kX2lycShkLT5wcmlvLCBkLT5ucl9wcmlvLCBpcnEpOworCWlmIChpaHApIHsKKwkJaWYgKHByaW8gPj0gKDEgPDwgX0lOVENfV0lEVEgoaWhwLT5oYW5kbGUpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWludGNfcHJpb19sZXZlbFtpcnFdID0gcHJpbzsKKworCQkvKgorCQkgKiBvbmx5IHNldCBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgZGlyZWN0bHkKKwkJICogcHJpbWFyeSBtYXNraW5nIG1ldGhvZCBpcyB1c2luZyBpbnRjX3ByaW9fbGV2ZWxbaXJxXQorCQkgKiBwcmlvcml0eSBsZXZlbCB3aWxsIGJlIHNldCBkdXJpbmcgbmV4dCBlbmFibGUoKQorCQkgKi8KKworCQlpZiAoX0lOVENfRk4oaWhwLT5oYW5kbGUpICE9IFJFR19GTl9FUlIpCisJCQlfaW50Y19lbmFibGUoaXJxLCBpaHAtPmhhbmRsZSk7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0geworCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCisJW0lSUV9UWVBFX0VER0VfUklTSU5HXSA9IFZBTElEKDEpLAorCVtJUlFfVFlQRV9MRVZFTF9MT1ddID0gVkFMSUQoMiksCisJLyogU0g3NzA2LCBTSDc3MDcgYW5kIFNINzcwOSBkbyBub3Qgc3VwcG9ydCBoaWdoIGxldmVsIHRyaWdnZXJlZCAqLworI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKKwlbSVJRX1RZUEVfTEVWRUxfSElHSF0gPSBWQUxJRCgzKSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBpbnRjX3NldF9zZW5zZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW50Y19pcnFfc2Vuc2VfdGFibGVbdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0tdOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlocCA9IGludGNfZmluZF9pcnEoZC0+c2Vuc2UsIGQtPm5yX3NlbnNlLCBpcnEpOworCWlmIChpaHApIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShpaHAtPmhhbmRsZSksIDApOworCQlpbnRjX3JlZ19mbnNbX0lOVENfRk4oaWhwLT5oYW5kbGUpXShhZGRyLCBpaHAtPmhhbmRsZSwgdmFsdWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19nZXRfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgZC0+bnJfcmVnOyBrKyspIHsKKwkJaWYgKGQtPnJlZ1trXSA9PSBhZGRyZXNzKQorCQkJcmV0dXJuIGs7CisJfQorCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQoreworCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgeworCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKKworCQlmb3IgKGogPSAwOyBnLT5lbnVtX2lkc1tqXTsgaisrKSB7CisJCQlpZiAoZy0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0dXJuIGctPmVudW1faWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCit7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+bWFza19yZWdzOworCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKKwl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKKworCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7CisJCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9EVUFMX1JFRzsKKwkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOworCQkJCXJlZ19kID0gbXItPnNldF9yZWc7CisJCQl9IGVsc2UgeworCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJCWlmIChtci0+c2V0X3JlZykgeworCQkJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOworCQkJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOworCQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOworCQkJCX0gZWxzZSB7CisJCQkJCW1vZGUgPSBNT0RFX01BU0tfUkVHOworCQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOworCQkJCQlyZWdfZCA9IG1yLT5jbHJfcmVnOworCQkJCX0KKwkJCX0KKworCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQkxLAorCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCX0KKwl9CisKKwlpZiAoZG9fZ3JwcykKKwkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3sKKwlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5wcmlvX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlLCBiaXQ7CisJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CisKKwlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgeworCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocHItPmVudW1faWRzKTsgaisrKSB7CisJCQlpZiAocHItPmVudW1faWRzW2pdICE9IGVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgeworCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7CisJCQkJbW9kZSA9IE1PREVfUENMUl9SRUc7CisJCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKKwkJCQlyZWdfZCA9IHByLT5jbHJfcmVnOworCQkJfSBlbHNlIHsKKwkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9QUklPX1JFRzsKKwkJCQlpZiAoIXByLT5zZXRfcmVnKQorCQkJCQlCVUcoKTsKKwkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOworCQkJCXJlZ19kID0gcHItPnNldF9yZWc7CisJCQl9CisKKwkJCWZuICs9IChwci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKworCQkJQlVHX09OKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKKworCQkJYml0ID0gcHItPnJlZ193aWR0aCAtICgoaiArIDEpICogcHItPmZpZWxkX3dpZHRoKTsKKworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQlwci0+ZmllbGRfd2lkdGgsIGJpdCk7CisJCX0KKwl9CisKKwlpZiAoZG9fZ3JwcykKKwkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2Fja19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQpCit7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+YWNrX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOworCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOworCisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykgeworCQltciA9IGRlc2MtPmFja19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7CisJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOworCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKKwkJCXJlZ19kID0gbXItPnNldF9yZWc7CisKKwkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKwkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKKwkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKKwkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKKwkJCQkJMSwKKwkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19zZW5zZV9kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKK3sKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKKworCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCWZuICs9IChzci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKworCQkJQlVHX09OKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGggPiBzci0+cmVnX3dpZHRoKTsKKworCQkJYml0ID0gc3ItPnJlZ193aWR0aCAtICgoaiArIDEpICogc3ItPmZpZWxkX3dpZHRoKTsKKworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCisJCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y19yZWdpc3Rlcl9pcnEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkgICAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSAgICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwOworCXVuc2lnbmVkIGludCBkYXRhWzJdLCBwcmltYXJ5OworCisJLyogUHJlZmVyIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIGJpdG1hcCBvdmVyIG90aGVyIGNvbWJpbmF0aW9uczoKKwkgKiAxLiBiaXRtYXAsIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCisJICogMi4gcHJpb3JpdHksIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCisJICogMy4gYml0bWFwLCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQorCSAqIDQuIHByaW9yaXR5LCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQorCSAqLworCisJZGF0YVswXSA9IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOworCWRhdGFbMV0gPSBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKKworCXByaW1hcnkgPSAwOworCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQorCQlwcmltYXJ5ID0gMTsKKworCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOworCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOworCisJaWYgKCFkYXRhW3ByaW1hcnldKQorCQlwcmltYXJ5IF49IDE7CisKKwlCVUdfT04oIWRhdGFbcHJpbWFyeV0pOyAvKiBtdXN0IGhhdmUgcHJpbWFyeSBtYXNraW5nIG1ldGhvZCAqLworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZC0+Y2hpcCwKKwkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKwlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICh2b2lkICopZGF0YVtwcmltYXJ5XSk7CisKKwkvKiBzZXQgcHJpb3JpdHkgbGV2ZWwKKwkgKiAtIHRoaXMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMiBmb3IgNS1iaXQgcHJpb3JpdGllcyBvbiA3NzgwCisJICovCisJaW50Y19wcmlvX2xldmVsW2lycV0gPSAyOworCisJLyogZW5hYmxlIHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBpZiBwcmVzZW50ICovCisJaWYgKGRhdGFbIXByaW1hcnldKQorCQlfaW50Y19lbmFibGUoaXJxLCBkYXRhWyFwcmltYXJ5XSk7CisKKwkvKiBhZGQgaXJxIHRvIGQtPnByaW8gbGlzdCBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgKi8KKwlpZiAoZGF0YVsxXSkgeworCQlocCA9IGQtPnByaW8gKyBkLT5ucl9wcmlvOworCQlocC0+aXJxID0gaXJxOworCQlocC0+aGFuZGxlID0gZGF0YVsxXTsKKworCQlpZiAocHJpbWFyeSkgeworCQkJLyoKKwkJCSAqIG9ubHkgc2Vjb25kYXJ5IHByaW9yaXR5IHNob3VsZCBhY2Nlc3MgcmVnaXN0ZXJzLCBzbworCQkJICogc2V0IF9JTlRDX0ZOKGgpID0gUkVHX0ZOX0VSUiBmb3IgaW50Y19zZXRfcHJpb3JpdHkoKQorCQkJICovCisKKwkJCWhwLT5oYW5kbGUgJj0gfl9JTlRDX01LKDB4MGYsIDAsIDAsIDAsIDAsIDApOworCQkJaHAtPmhhbmRsZSB8PSBfSU5UQ19NSyhSRUdfRk5fRVJSLCAwLCAwLCAwLCAwLCAwKTsKKwkJfQorCQlkLT5ucl9wcmlvKys7CisJfQorCisJLyogYWRkIGlycSB0byBkLT5zZW5zZSBsaXN0IGlmIHNlbnNlIGlzIGF2YWlsYWJsZSAqLworCWRhdGFbMF0gPSBpbnRjX3NlbnNlX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7CisJaWYgKGRhdGFbMF0pIHsKKwkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5pcnEgPSBpcnE7CisJCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aGFuZGxlID0gZGF0YVswXTsKKwkJZC0+bnJfc2Vuc2UrKzsKKwl9CisKKwkvKiBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlkLT5jaGlwLm1hc2soaXJxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorCWlmIChkZXNjLT5hY2tfcmVncykKKwkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNudCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNtcCkKK3sKKwlpZiAodmFsdWUpIHsKKwkJZC0+cmVnW2NudF0gPSB2YWx1ZTsKKyNpZmRlZiBDT05GSUdfU01QCisJCWQtPnNtcFtjbnRdID0gc21wOworI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CisKKwlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKKworCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKKwlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJZC0+bnJfcmVnICs9IGRlc2MtPmFja19yZWdzID8gZGVzYy0+bnJfYWNrX3JlZ3MgOiAwOworI2VuZGlmCisJZC0+cmVnID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnJlZykpOworI2lmZGVmIENPTkZJR19TTVAKKwlkLT5zbXAgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+c21wKSk7CisjZW5kaWYKKwlrID0gMDsKKworCWlmIChkZXNjLT5tYXNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoZGVzYy0+bWFza19yZWdzW2ldKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQl9CisJfQorCisJaWYgKGRlc2MtPnByaW9fcmVncykgeworCQlkLT5wcmlvID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQl9CisJfQorCisJaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKKwkJZC0+c2Vuc2UgPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5zZW5zZV9yZWdzW2ldLnJlZywgMCk7CisJCX0KKwl9CisKKwlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOworCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKKwlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOworCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7CisJZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJaWYgKGRlc2MtPmFja19yZWdzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKKworCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKKwl9CisjZW5kaWYKKworCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCisJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggMjVlZGE3MS4uMGRlYmUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTE1LDEzICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTA4LDEzICsxMDIsMTMgQEAKIAkgKiBCZWNhdXNlIHBzYy0+Y2NyIGlzIGRlZmluZWQgYXMgMTZiaXQgcmVnaXN0ZXIgaW5zdGVhZCBvZiAzMmJpdAogCSAqIGp1c3Qgc2V0IHRoZSBsb3dlciBieXRlIG9mIEJpdENsa0RpdgogCSAqLwotCWNjciA9IGluX2JlMTYoJnBzYy0+Y2NyKTsKKwljY3IgPSBpbl9iZTE2KCh1MTYgX19pb21lbSAqKSZwc2MtPmNjcik7CiAJY2NyICY9IDB4RkYwMDsKIAlpZiAoY3MtPnNwZWVkX2h6KQogCQljY3IgfD0gKE1DTEsgLyBjcy0+c3BlZWRfaHogLSAxKSAmIDB4RkY7CiAJZWxzZSAvKiBieSBkZWZhdWx0IFNQSSBDbGsgMU1IeiAqLwogCQljY3IgfD0gKE1DTEsgLyAxMDAwMDAwIC0gMSkgJiAweEZGOwotCW91dF9iZTE2KCZwc2MtPmNjciwgY2NyKTsKKwlvdXRfYmUxNigodTE2IF9faW9tZW0gKikmcHNjLT5jY3IsIGNjcik7CiAJbXBzLT5iaXRzX3Blcl93b3JkID0gY3MtPmJpdHNfcGVyX3dvcmQ7CiAKIAlpZiAobXBzLT5hY3RpdmF0ZV9jcykKQEAgLTM0Nyw3ICszNDEsNyBAQAogCS8qIENvbmZpZ3VyZSA4Yml0IGNvZGVjIG1vZGUgYXMgYSBTUEkgbWFzdGVyIGFuZCB1c2UgRU9GIGZsYWdzICovCiAJLyogU0lDUl9TSU1fQ09ERUM4fFNJQ1JfR0VOQ0xLfFNJQ1JfU1BJfFNJQ1JfTVNUUnxTSUNSX1VTRUVPRiAqLwogCW91dF9iZTMyKCZwc2MtPnNpY3IsIDB4MDE4MEM4MDApOwotCW91dF9iZTE2KCZwc2MtPmNjciwgMHgwNzBGKTsgLyogYnkgZGVmYXVsdCBTUEkgQ2xrIDFNSHogKi8KKwlvdXRfYmUxNigodTE2IF9faW9tZW0gKikmcHNjLT5jY3IsIDB4MDcwRik7IC8qIGRlZmF1bHQgU1BJIENsayAxTUh6ICovCiAKIAkvKiBTZXQgMm1zIERUTCBkZWxheSAqLwogCW91dF84KCZwc2MtPmN0dXIsIDB4MDApOwpAQCAtNDcxLDUzICs0NjUsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLXN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3dpdGNoKGRldi0+aWQpIHsKLQljYXNlIDE6Ci0JY2FzZSAyOgotCWNhc2UgMzoKLQljYXNlIDY6Ci0JCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcHJvYmUoJmRldi0+ZGV2LAotCQkJTVBDNTJ4eF9QQShNUEM1Mnh4X1BTQ3hfT0ZGU0VUKGRldi0+aWQpKSwKLQkJCU1QQzUyeHhfUFNDX1NJWkUsIHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKSwgZGV2LT5pZCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmZGV2LT5kZXYpOwotfQotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06bXBjNTJ4eC1wc2Mtc3BpIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfcHNjX3NwaV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnJlbW92ZSA9IF9fZXhpdF9wKG1wYzUyeHhfcHNjX3NwaV9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm1wYzUyeHgtcHNjLXNwaSIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X3BzY19zcGlfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1wYzUyeHhfcHNjX3NwaV9wbGF0Zm9ybV9kcml2ZXIsCi0JCQltcGM1Mnh4X3BzY19zcGlfcHJvYmUpOwotfQotbW9kdWxlX2luaXQobXBjNTJ4eF9wc2Nfc3BpX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTJ4eF9wc2Nfc3BpX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF9wc2Nfc3BpX3BsYXRmb3JtX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChtcGM1Mnh4X3BzY19zcGlfZXhpdCk7Ci0KLSNlbHNlCS8qIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KLQogc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9wc2Nfc3BpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtNTg2LDggKzUzMyw2IEBACiB9CiBtb2R1bGVfZXhpdChtcGM1Mnh4X3BzY19zcGlfZXhpdCk7CiAKLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCi0KIE1PRFVMRV9BVVRIT1IoIkRyYWdvcyBDYXJwIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1QQzUyeHggUFNDIFNQSSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IDlkMjE4NmYuLjQ1NGEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMTE5LDEyICsxMTksMTQgQEAKIAlzdHJ1Y3QgY2xrCQkqZmNrOwogCS8qIFZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyICovCiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwl1bnNpZ25lZCBsb25nCQlwaHlzOwogCS8qIFNQSTEgaGFzIDQgY2hhbm5lbHMsIHdoaWxlIFNQSTIgaGFzIDIgKi8KIAlzdHJ1Y3Qgb21hcDJfbWNzcGlfZG1hCSpkbWFfY2hhbm5lbHM7CiB9OwogCiBzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MgewogCXZvaWQgX19pb21lbQkJKmJhc2U7CisJdW5zaWduZWQgbG9uZwkJcGh5czsKIAlpbnQJCQl3b3JkX2xlbjsKIH07CiAKQEAgLTIzMyw3ICsyMzUsNyBAQAogCWMgPSBjb3VudDsKIAl3b3JkX2xlbiA9IGNzLT53b3JkX2xlbjsKIAotCWJhc2UgPSAodW5zaWduZWQgbG9uZykgaW9fdjJwKGNzLT5iYXNlKTsKKwliYXNlID0gY3MtPnBoeXM7CiAJdHhfcmVnID0gYmFzZSArIE9NQVAyX01DU1BJX1RYMDsKIAlyeF9yZWcgPSBiYXNlICsgT01BUDJfTUNTUElfUlgwOwogCXJ4ID0geGZlci0+cnhfYnVmOwpAQCAtNjMzLDYgKzYzNSw3IEBACiAJCWlmICghY3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJY3MtPmJhc2UgPSBtY3NwaS0+YmFzZSArIHNwaS0+Y2hpcF9zZWxlY3QgKiAweDE0OworCQljcy0+cGh5cyA9IG1jc3BpLT5waHlzICsgc3BpLT5jaGlwX3NlbGVjdCAqIDB4MTQ7CiAJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOwogCX0KIApAQCAtMTAwNSw3ICsxMDA4LDEzIEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQltY3NwaS0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKikgaW9fcDJ2KHItPnN0YXJ0KTsKKwltY3NwaS0+cGh5cyA9IHItPnN0YXJ0OworCW1jc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAoIW1jc3BpLT5iYXNlKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgTUNTUElcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGVycjFhYTsKKwl9CiAKIAlJTklUX1dPUksoJm1jc3BpLT53b3JrLCBvbWFwMl9tY3NwaV93b3JrKTsKIApAQCAtMTA1NSw2ICsxMDY0LDggQEAKIGVycjI6CiAJY2xrX3B1dChtY3NwaS0+aWNrKTsKIGVycjFhOgorCWlvdW5tYXAobWNzcGktPmJhc2UpOworZXJyMWFhOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEpOwogZXJyMToKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwpAQCAtMTA2Nyw2ICsxMDc4LDcgQEAKIAlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOwogCXN0cnVjdCBvbWFwMl9tY3NwaV9kbWEJKmRtYV9jaGFubmVsczsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyOworCXZvaWQgX19pb21lbSAqYmFzZTsKIAogCW1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAltY3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKQEAgLTEwNzgsNyArMTA5MCw5IEBACiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSk7CiAKKwliYXNlID0gbWNzcGktPmJhc2U7CiAJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaW91bm1hcChiYXNlKTsKIAlrZnJlZShkbWFfY2hhbm5lbHMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggNTUxNWViOS4uYmFiNmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtNTksNyArNTksNiBAQAogICogYW5kIGlycXMgc2hvdWxkIHNob3cgdGhlcmUgdG9vLi4uCiAgKi8KICNkZWZpbmUgVVdJUkVfQkFTRV9QSFlTCQkweEZGRkIzMDAwCi0jZGVmaW5lIFVXSVJFX0JBU0UJCSgodm9pZCAqX19pb21lbSlJT19BRERSRVNTKFVXSVJFX0JBU0VfUEhZUykpCiAKIC8qIHVXaXJlIFJlZ2lzdGVyczogKi8KICNkZWZpbmUgVVdJUkVfSU9fU0laRSAweDIwCkBAIC0xMDMsMTYgKzEwMiwyMSBAQAogfTsKIAogLyogUkVWSVNJVCBjb21waWxlIHRpbWUgY29uc3RhbnQgZm9yIGlkeF9zaGlmdD8gKi8KKy8qCisgKiBPciwgcHV0IGl0IGluIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgZHJpdmVyOworICogdGhhdCBhdm9pZHMgaGF2aW5nIHRvIGlzc3VlIHR3byBsb2FkcyBmb3IgZWFjaCBiaXQgb2Ygc3RhdGljIGRhdGEuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXdpcmVfaWR4X3NoaWZ0Oworc3RhdGljIHZvaWQgX19pb21lbSAqdXdpcmVfYmFzZTsKIAogc3RhdGljIGlubGluZSB2b2lkIHV3aXJlX3dyaXRlX3JlZyhpbnQgaWR4LCB1MTYgdmFsKQogewotCV9fcmF3X3dyaXRldyh2YWwsIFVXSVJFX0JBU0UgKyAoaWR4IDw8IHV3aXJlX2lkeF9zaGlmdCkpOworCV9fcmF3X3dyaXRldyh2YWwsIHV3aXJlX2Jhc2UgKyAoaWR4IDw8IHV3aXJlX2lkeF9zaGlmdCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiB1d2lyZV9yZWFkX3JlZyhpbnQgaWR4KQogewotCXJldHVybiBfX3Jhd19yZWFkdyhVV0lSRV9CQVNFICsgKGlkeCA8PCB1d2lyZV9pZHhfc2hpZnQpKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcodXdpcmVfYmFzZSArIChpZHggPDwgdXdpcmVfaWR4X3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX3V3aXJlX2NvbmZpZ3VyZV9tb2RlKHU4IGNzLCB1bnNpZ25lZCBsb25nIGZsYWdzKQpAQCAtNDkyLDYgKzQ5NiwxNCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXV3aXJlID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJdXdpcmVfYmFzZSA9IGlvcmVtYXAoVVdJUkVfQkFTRV9QSFlTLCBVV0lSRV9JT19TSVpFKTsKKwlpZiAoIXV3aXJlX2Jhc2UpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgaW9yZW1hcCBVV0lSRVxuIik7CisJCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB1d2lyZSk7CiAKIAl1d2lyZS0+Y2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm14b3JfY2siKTsKQEAgLTUyMCw4ICs1MzIsMTAgQEAKIAl1d2lyZS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSB1d2lyZV90eHJ4OwogCiAJc3RhdHVzID0gc3BpX2JpdGJhbmdfc3RhcnQoJnV3aXJlLT5iaXRiYW5nKTsKLQlpZiAoc3RhdHVzIDwgMCkKKwlpZiAoc3RhdHVzIDwgMCkgewogCQl1d2lyZV9vZmYodXdpcmUpOworCQlpb3VubWFwKHV3aXJlX2Jhc2UpOworCX0KIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC01MzQsNiArNTQ4LDcgQEAKIAogCXN0YXR1cyA9IHNwaV9iaXRiYW5nX3N0b3AoJnV3aXJlLT5iaXRiYW5nKTsKIAl1d2lyZV9vZmYodXdpcmUpOworCWlvdW5tYXAodXdpcmVfYmFzZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwppbmRleCBiODcyYmZhLi4wMTRiZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwpAQCAtMzY0LDYgKzM2NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBGaXggYWMgdGltaW5nIGlmIHJlcXVpcmVkLiAgICovCisJaWYgKG9yaW9uX3NwaS0+c3BpX2luZm8tPmVuYWJsZV9jbG9ja19maXgpCisJCW9yaW9uX3NwaV9zZXRiaXRzKG9yaW9uX3NwaSwgT1JJT05fU1BJX0lGX0NPTkZJR19SRUcsCisJCQkJICAoMSA8PCAxNCkpOworCiAJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA9PSAwKQogCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDQ3ZDM2My4uZGFlODdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtNDcsNiArNDcsMTAgQEAKIAogI2RlZmluZSBNQVhfQlVTRVMgMwogCisjZGVmaW5lIFJYX1RIUkVTSF9ERkxUIAk4CisjZGVmaW5lIFRYX1RIUkVTSF9ERkxUIAk4CisjZGVmaW5lIFRJTU9VVF9ERkxUCQkxMDAwCisKICNkZWZpbmUgRE1BX0lOVF9NQVNLCQkoRENTUl9FTkRJTlRSIHwgRENTUl9TVEFSVElOVFIgfCBEQ1NSX0JVU0VSUikKICNkZWZpbmUgUkVTRVRfRE1BX0NIQU5ORUwJKERDU1JfTk9ERVNDIHwgRE1BX0lOVF9NQVNLKQogI2RlZmluZSBJU19ETUFfQUxJR05FRCh4KQkoKCgodTMyKSh4KSkgJiAweDA3KSA9PSAwKQpAQCAtMTE3MSw2ICsxMTc1LDggQEAKIAlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJdW5zaWduZWQgaW50IGNsa19kaXY7CisJdWludCB0eF90aHJlcyA9IFRYX1RIUkVTSF9ERkxUOworCXVpbnQgcnhfdGhyZXMgPSBSWF9USFJFU0hfREZMVDsKIAogCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQogCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwpAQCAtMTIwOSw4ICsxMjE1LDcgQEAKIAogCQljaGlwLT5jc19jb250cm9sID0gbnVsbF9jc19jb250cm9sOwogCQljaGlwLT5lbmFibGVfZG1hID0gMDsKLQkJY2hpcC0+dGltZW91dCA9IDEwMDA7Ci0JCWNoaXAtPnRocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goMSkgfCBTU0NSMV9UeFRyZXNoKDEpOworCQljaGlwLT50aW1lb3V0ID0gVElNT1VUX0RGTFQ7CiAJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hID8KIAkJCQkJRENNRF9CVVJTVDggOiAwOwogCX0KQEAgLTEyMjQsMjIgKzEyMjksMjEgQEAKIAlpZiAoY2hpcF9pbmZvKSB7CiAJCWlmIChjaGlwX2luZm8tPmNzX2NvbnRyb2wpCiAJCQljaGlwLT5jc19jb250cm9sID0gY2hpcF9pbmZvLT5jc19jb250cm9sOwotCi0JCWNoaXAtPnRpbWVvdXQgPSBjaGlwX2luZm8tPnRpbWVvdXQ7Ci0KLQkJY2hpcC0+dGhyZXNob2xkID0gKFNTQ1IxX1J4VHJlc2goY2hpcF9pbmZvLT5yeF90aHJlc2hvbGQpICYKLQkJCQkJCQkJU1NDUjFfUkZUKSB8Ci0JCQkJKFNTQ1IxX1R4VHJlc2goY2hpcF9pbmZvLT50eF90aHJlc2hvbGQpICYKLQkJCQkJCQkJU1NDUjFfVEZUKTsKLQotCQljaGlwLT5lbmFibGVfZG1hID0gY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZSAhPSAwCi0JCQkJCSYmIGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYTsKKwkJaWYgKGNoaXBfaW5mby0+dGltZW91dCkKKwkJCWNoaXAtPnRpbWVvdXQgPSBjaGlwX2luZm8tPnRpbWVvdXQ7CisJCWlmIChjaGlwX2luZm8tPnR4X3RocmVzaG9sZCkKKwkJCXR4X3RocmVzID0gY2hpcF9pbmZvLT50eF90aHJlc2hvbGQ7CisJCWlmIChjaGlwX2luZm8tPnJ4X3RocmVzaG9sZCkKKwkJCXJ4X3RocmVzID0gY2hpcF9pbmZvLT5yeF90aHJlc2hvbGQ7CisJCWNoaXAtPmVuYWJsZV9kbWEgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWE7CiAJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSAwOwotCiAJCWlmIChjaGlwX2luZm8tPmVuYWJsZV9sb29wYmFjaykKIAkJCWNoaXAtPmNyMSA9IFNTQ1IxX0xCTTsKIAl9CiAKKwljaGlwLT50aHJlc2hvbGQgPSAoU1NDUjFfUnhUcmVzaChyeF90aHJlcykgJiBTU0NSMV9SRlQpIHwKKwkJCShTU0NSMV9UeFRyZXNoKHR4X3RocmVzKSAmIFNTQ1IxX1RGVCk7CisKIAkvKiBzZXQgZG1hIGJ1cnN0IGFuZCB0aHJlc2hvbGQgb3V0c2lkZSBvZiBjaGlwX2luZm8gcGF0aCBzbyB0aGF0IGlmCiAJICogY2hpcF9pbmZvIGdvZXMgYXdheSBhZnRlciBzZXR0aW5nIGNoaXAtPmVuYWJsZV9kbWEsIHRoZQogCSAqIGJ1cnN0IGFuZCB0aHJlc2hvbGQgY2FuIHN0aWxsIHJlc3BvbmQgdG8gY2hhbmdlcyBpbiBiaXRzX3Blcl93b3JkICovCkBAIC0xMjY4LDE3ICsxMjcyLDE5IEBACiAKIAkvKiBOT1RFOiAgUFhBMjV4X1NTUCBfY291bGRfIHVzZSBleHRlcm5hbCBjbG9ja2luZyAuLi4gKi8KIAlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCi0JCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWRcbiIsCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWQsICVzXG4iLAogCQkJCXNwaS0+Yml0c19wZXJfd29yZCwKIAkJCQljbGtfZ2V0X3JhdGUoc3NwLT5jbGspCiAJCQkJCS8gKDEgKyAoKGNoaXAtPmNyMCAmIFNTQ1IwX1NDUikgPj4gOCkpLAotCQkJCXNwaS0+bW9kZSAmIDB4Myk7CisJCQkJc3BpLT5tb2RlICYgMHgzLAorCQkJCWNoaXAtPmVuYWJsZV9kbWEgPyAiRE1BIiA6ICJQSU8iKTsKIAllbHNlCi0JCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWRcbiIsCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWQsICVzXG4iLAogCQkJCXNwaS0+Yml0c19wZXJfd29yZCwKLQkJCQljbGtfZ2V0X3JhdGUoc3NwLT5jbGspCisJCQkJY2xrX2dldF9yYXRlKHNzcC0+Y2xrKSAvIDIKIAkJCQkJLyAoMSArICgoY2hpcC0+Y3IwICYgU1NDUjBfU0NSKSA+PiA4KSksCi0JCQkJc3BpLT5tb2RlICYgMHgzKTsKKwkJCQlzcGktPm1vZGUgJiAweDMsCisJCQkJY2hpcC0+ZW5hYmxlX2RtYSA/ICJETUEiIDogIlBJTyIpOwogCiAJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CiAJCWNoaXAtPm5fYnl0ZXMgPSAxOwpAQCAtMTQwNyw5ICsxNDEzLDkgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqcGxhdGZvcm1faW5mbzsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBOVUxMOworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKLQlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzOwogCiAJcGxhdGZvcm1faW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIApAQCAtMTQyMiw3ICsxNDI4LDcgQEAKIAkvKiBBbGxvY2F0ZSBtYXN0ZXIgd2l0aCBzcGFjZSBmb3IgZHJ2X2RhdGEgYW5kIG51bGwgZG1hIGJ1ZmZlciAqLwogCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2Yoc3RydWN0IGRyaXZlcl9kYXRhKSArIDE2KTsKIAlpZiAoIW1hc3RlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGFsbG9jIHNwaV9tYXN0ZXJcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2Mgc3BpX21hc3RlclxuIik7CiAJCXNzcF9mcmVlKHNzcCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE0NTgsNyArMTQ2NCw3IEBACiAKIAlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IElSUSAlZFxuIiwgc3NwLT5pcnEpOwogCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CiAJfQogCkBAIC0xNDk4LDcgKzE1MDQsOSBAQAogCiAJLyogTG9hZCBkZWZhdWx0IFNTUCBjb25maWd1cmF0aW9uICovCiAJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7Ci0Jd3JpdGVfU1NDUjEoU1NDUjFfUnhUcmVzaCg0KSB8IFNTQ1IxX1R4VHJlc2goMTIpLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwl3cml0ZV9TU0NSMShTU0NSMV9SeFRyZXNoKFJYX1RIUkVTSF9ERkxUKSB8CisJCQkJU1NDUjFfVHhUcmVzaChUWF9USFJFU0hfREZMVCksCisJCQkJZHJ2X2RhdGEtPmlvYWRkcik7CiAJd3JpdGVfU1NDUjAoU1NDUjBfU2VyQ2xrRGl2KDIpCiAJCQl8IFNTQ1IwX01vdG9yb2xhCiAJCQl8IFNTQ1IwX0RhdGFTaXplKDgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCA3NWU4Njg2Li4zNzM0ZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtNjYwLDcgKzY2MCw3IEBACiAKIAlpbnQJCQlzdGF0dXM7CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1lc3NhZ2U7Ci0Jc3RydWN0IHNwaV90cmFuc2Zlcgl4WzJdOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJeDsKIAl1OAkJCSpsb2NhbF9idWY7CiAKIAkvKiBVc2UgcHJlYWxsb2NhdGVkIERNQS1zYWZlIGJ1ZmZlci4gIFdlIGNhbid0IGF2b2lkIGNvcHlpbmcgaGVyZSwKQEAgLTY3MSwxNSArNjcxLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtZXNzYWdlKTsKLQltZW1zZXQoeCwgMCwgc2l6ZW9mIHgpOwotCWlmIChuX3R4KSB7Ci0JCXhbMF0ubGVuID0gbl90eDsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhbMF0sICZtZXNzYWdlKTsKLQl9Ci0JaWYgKG5fcngpIHsKLQkJeFsxXS5sZW4gPSBuX3J4OwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeFsxXSwgJm1lc3NhZ2UpOwotCX0KKwltZW1zZXQoJngsIDAsIHNpemVvZiB4KTsKKwl4LmxlbiA9IG5fdHggKyBuX3J4OworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4LCAmbWVzc2FnZSk7CiAKIAkvKiAuLi4gdW5sZXNzIHNvbWVvbmUgZWxzZSBpcyB1c2luZyB0aGUgcHJlLWFsbG9jYXRlZCBidWZmZXIgKi8KIAlpZiAoIW11dGV4X3RyeWxvY2soJmxvY2spKSB7CkBAIC02OTAsMTUgKzY4NCwxNSBAQAogCQlsb2NhbF9idWYgPSBidWY7CiAKIAltZW1jcHkobG9jYWxfYnVmLCB0eGJ1Ziwgbl90eCk7Ci0JeFswXS50eF9idWYgPSBsb2NhbF9idWY7Ci0JeFsxXS5yeF9idWYgPSBsb2NhbF9idWYgKyBuX3R4OworCXgudHhfYnVmID0gbG9jYWxfYnVmOworCXgucnhfYnVmID0gbG9jYWxfYnVmOwogCiAJLyogZG8gdGhlIGkvbyAqLwogCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm1lc3NhZ2UpOwogCWlmIChzdGF0dXMgPT0gMCkKLQkJbWVtY3B5KHJ4YnVmLCB4WzFdLnJ4X2J1Ziwgbl9yeCk7CisJCW1lbWNweShyeGJ1ZiwgeC5yeF9idWYgKyBuX3R4LCBuX3J4KTsKIAotCWlmICh4WzBdLnR4X2J1ZiA9PSBidWYpCisJaWYgKHgudHhfYnVmID09IGJ1ZikKIAkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAllbHNlCiAJCWtmcmVlKGxvY2FsX2J1Zik7CkBAIC03NDQsNSArNzM4LDUgQEAKICAqIGRyaXZlciByZWdpc3RyYXRpb24pIF9jb3VsZF8gYmUgZHluYW1pY2FsbHkgbGlua2VkIChtb2R1bGFyKSAuLi4gY29zdHMKICAqIGluY2x1ZGUgbmVlZGluZyB0byBoYXZlIGJvYXJkaW5mbyBkYXRhIHN0cnVjdHVyZXMgYmUgbXVjaCBtb3JlIHB1YmxpYy4KICAqLwotc3Vic3lzX2luaXRjYWxsKHNwaV9pbml0KTsKK3Bvc3Rjb3JlX2luaXRjYWxsKHNwaV9pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKaW5kZXggM2ViNDE0Yi4uYzI1MmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCkBAIC0yNDcsNiArMjQ3LDkgQEAKIAl3cml0ZWIoMHhmZiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUFJFKTsKIAl3cml0ZWIoU1BQSU5fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUElOKTsKIAl3cml0ZWIoU1BDT05fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKKworCWlmIChody0+cGRhdGEgJiYgaHctPnBkYXRhLT5ncGlvX3NldHVwKQorCQlody0+cGRhdGEtPmdwaW9fc2V0dXAoaHctPnBkYXRhLCAxKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTQxMiw2ICs0MTUsOSBAQAogewogCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWlmIChody0+cGRhdGEgJiYgaHctPnBkYXRhLT5ncGlvX3NldHVwKQorCQlody0+cGRhdGEtPmdwaW9fc2V0dXAoaHctPnBkYXRhLCAwKTsKKwogCWNsa19kaXNhYmxlKGh3LT5jbGspOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCBlNWUwY2ZlLi44OWE0Mzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtNTgzLDEwICs1ODMsOSBAQAogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAkJc3BpZGV2LT5kZXZ0ID0gTUtERVYoU1BJREVWX01BSk9SLCBtaW5vcik7Ci0JCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShzcGlkZXZfY2xhc3MsICZzcGktPmRldiwKLQkJCQlzcGlkZXYtPmRldnQsIHNwaWRldiwKLQkJCQkic3BpZGV2JWQuJWQiLAotCQkJCXNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJZGV2ID0gZGV2aWNlX2NyZWF0ZShzcGlkZXZfY2xhc3MsICZzcGktPmRldiwgc3BpZGV2LT5kZXZ0LAorCQkJCSAgICBzcGlkZXYsICJzcGlkZXYlZC4lZCIsCisJCQkJICAgIHNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0KTsKIAkJc3RhdHVzID0gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJnNwaS0+ZGV2LCAibm8gbWlub3IgbnVtYmVyIGF2YWlsYWJsZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTc5ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTAsMCArMSw0NiBAQAorbWVudWNvbmZpZyBTVEFHSU5HCisJYm9vbCAiU3RhZ2luZyBkcml2ZXJzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2VsZWN0IGEgbnVtYmVyIG9mIGRyaXZlcnMgdGhhdCBhcmUKKwkgIG5vdCBvZiB0aGUgIm5vcm1hbCIgTGludXgga2VybmVsIHF1YWxpdHkgbGV2ZWwuICBUaGVzZSBkcml2ZXJzCisJICBhcmUgcGxhY2VkIGhlcmUgaW4gb3JkZXIgdG8gZ2V0IGEgd2lkZXIgYXVkaWVuY2UgZm9yIHVzZSBvZgorCSAgdGhlbS4gIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgZHJpdmVycyBhcmUgdW5kZXIgaGVhdnkKKwkgIGRldmVsb3BtZW50LCBtYXkgb3IgbWF5IG5vdCB3b3JrLCBhbmQgbWF5IGNvbnRhaW4gdXNlcnNwYWNlCisJICBpbnRlcmZhY2VzIHRoYXQgbW9zdCBsaWtlbHkgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBuZWFyCisJICBmdXR1cmUuCisKKwkgIFVzaW5nIGFueSBvZiB0aGVzZSBkcml2ZXJzIHdpbGwgdGFpbnQgeW91ciBrZXJuZWwgd2hpY2ggbWlnaHQKKwkgIGFmZmVjdCBzdXBwb3J0IG9wdGlvbnMgZnJvbSBib3RoIHRoZSBjb21tdW5pdHksIGFuZCB2YXJpb3VzCisJICBjb21tZXJjaWFsIHN1cHBvcnQgb3JnaW5pemF0aW9ucy4KKworCSAgSWYgeW91IHdpc2ggdG8gd29yayBvbiB0aGVzZSBkcml2ZXJzLCB0byBoZWxwIGltcHJvdmUgdGhlbSwgb3IKKwkgIHRvIHJlcG9ydCBwcm9ibGVtcyB5b3UgaGF2ZSB3aXRoIHRoZW0sIHBsZWFzZSBzZWUgdGhlCisJICBkcml2ZXJfbmFtZS5SRUFETUUgZmlsZSBpbiB0aGUgZHJpdmVycy9zdGFnaW5nLyBkaXJlY3RvcnkgdG8KKwkgIHNlZSB3aGF0IG5lZWRzIHRvIGJlIHdvcmtlZCBvbiwgYW5kIHdobyB0byBjb250YWN0LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKworaWYgU1RBR0lORworCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZWNoby9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnIgorCitlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjViY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMgTWFrZWZpbGUgZm9yIHN0YWdpbmcgZGlyZWN0b3J5CisKKyMgZml4IGZvciBidWlsZCBzeXN0ZW0gYnVnLi4uCitvYmotJChDT05GSUdfU1RBR0lORykJCSs9IHN0YWdpbmcubworCitvYmotJChDT05GSUdfRVQxMzFYKQkJKz0gZXQxMzF4Lworb2JqLSQoQ09ORklHX1NMSUNPU1MpCQkrPSBzbGljb3NzLworb2JqLSQoQ09ORklHX1NYRykJCSs9IHN4Zy8KK29iai0kKENPTkZJR19NRTQwMDApCQkrPSBtZTQwMDAvCitvYmotJChDT05GSUdfVklERU9fR083MDA3KQkrPSBnbzcwMDcvCitvYmotJChDT05GSUdfVVNCX0lQX0NPTU1PTikJKz0gdXNiaXAvCitvYmotJChDT05GSUdfVzM1VU5EKQkJKz0gd2luYm9uZC8KK29iai0kKENPTkZJR19QUklTTTJfVVNCKQkrPSB3bGFuLW5nLworb2JqLSQoQ09ORklHX0VDSE8pCQkrPSBlY2hvLworb2JqLSQoQ09ORklHX1VTQl9BVE1FTCkJCSs9IGF0NzZfdXNiLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA2Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL0tjb25maWcKQEAgLTAsMCArMSw4IEBACitjb25maWcgVVNCX0FUTUVMCisJdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTAzL2F0NzZjNTA1L2F0NzZjNTA1YSBVU0IgY2FyZHMiCisJZGVwZW5kcyBvbiBXTEFOXzgwMjExICYmIFVTQgorCWRlZmF1bHQgTgorCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBFbmFibGUgc3VwcG9ydCBmb3IgVVNCIFdpcmVsZXNzIGRldmljZXMgdXNpbmcgQXRtZWwgYXQ3NmM1MDMsCisJICBhdDc2YzUwNSBvciBhdDc2YzUwNWEgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0N2U4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfVVNCX0FUTUVMKQkJKz0gYXQ3Nl91c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTExY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KQEAgLTAsMCArMSwyIEBACityZXdyaXRlIHRoZSBkcml2ZXIgdG8gdXNlIHRoZSBwcm9wZXIgaW4ta2VybmVsIHdpcmVsZXNzIHN0YWNrCitpbnN0ZWFkIG9mIHVzaW5nIGl0cyBvd24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwpAQCAtMCwwICsxLDU1NTkgQEAKKy8qCisgKiBhdDc2YzUwMy9hdDc2YzUwNSBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMyBPbGl2ZXIgS3VydGgKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmljayBKb25lcworICogQ29weXJpZ2h0IChjKSAyMDA0IEJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQmVybGlvcyBkcml2ZXIgZm9yIFdMQU4gVVNCIGRldmljZXMgYmFzZWQgb24gdGhlCisgKiBBdG1lbCBBVDc2QzUwM0EvNTA1LzUwNUEuCisgKgorICogU29tZSBpd19oYW5kbGVyIGNvZGUgd2FzIHRha2VuIGZyb20gYWlyby5jLCAoQykgMTk5OSBCZW5qYW1pbiBSZWVkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSAiYXQ3Nl91c2IuaCIKKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfTkFNRSAiYXQ3Nl91c2IiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjE3IgorI2RlZmluZSBEUklWRVJfREVTQyAiQXRtZWwgYXQ3NnggVVNCIFdpcmVsZXNzIExBTiBEcml2ZXIiCisKKy8qIGF0NzZfZGVidWcgYml0cyAqLworI2RlZmluZSBEQkdfUFJPR1JFU1MJCTB4MDAwMDAwMDEJLyogYXV0aGVudGljYXRpb24vYWNjb2NpYXRpb24gKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRQkJMHgwMDAwMDAwMgkvKiBzaG93IEJTUyB0YWJsZSBhZnRlciBzY2FucyAqLworI2RlZmluZSBEQkdfSU9DVEwJCTB4MDAwMDAwMDQJLyogaW9jdGwgY2FsbHMgLyBzZXR0aW5ncyAqLworI2RlZmluZSBEQkdfTUFDX1NUQVRFCQkweDAwMDAwMDA4CS8qIE1BQyBzdGF0ZSB0cmFuc2l0aW9ucyAqLworI2RlZmluZSBEQkdfVFhfREFUQQkJMHgwMDAwMDAxMAkvKiB0eCBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEFfQ09OVEVOVAkweDAwMDAwMDIwCS8qIHR4IGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1RYX01HTVQJCTB4MDAwMDAwNDAJLyogdHggbWFuYWdlbWVudCAqLworI2RlZmluZSBEQkdfUlhfREFUQQkJMHgwMDAwMDA4MAkvKiByeCBkYXRhIGhlYWRlciAqLworI2RlZmluZSBEQkdfUlhfREFUQV9DT05URU5UCTB4MDAwMDAxMDAJLyogcnggZGF0YSBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9NR01UCQkweDAwMDAwMjAwCS8qIHJ4IG1nbXQgZnJhbWUgaGVhZGVycyAqLworI2RlZmluZSBEQkdfUlhfQkVBQ09OCQkweDAwMDAwNDAwCS8qIHJ4IGJlYWNvbiAqLworI2RlZmluZSBEQkdfUlhfQ1RSTAkJMHgwMDAwMDgwMAkvKiByeCBjb250cm9sICovCisjZGVmaW5lIERCR19SWF9NR01UX0NPTlRFTlQJMHgwMDAwMTAwMAkvKiByeCBtZ210IGNvbnRlbnQgKi8KKyNkZWZpbmUgREJHX1JYX0ZSQUdTCQkweDAwMDAyMDAwCS8qIHJ4IGRhdGEgZnJhZ21lbnQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgREJHX0RFVlNUQVJUCQkweDAwMDA0MDAwCS8qIGZ3IGRvd25sb2FkLCBkZXZpY2Ugc3RhcnQgKi8KKyNkZWZpbmUgREJHX1VSQgkJCTB4MDAwMDgwMDAJLyogcnggdXJiIHN0YXR1cywgLi4uICovCisjZGVmaW5lIERCR19SWF9BVE1FTF9IRFIJMHgwMDAxMDAwMAkvKiBBdG1lbC1zcGVjaWZpYyBSeCBoZWFkZXJzICovCisjZGVmaW5lIERCR19QUk9DX0VOVFJZCQkweDAwMDIwMDAwCS8qIHByb2NlZHVyZSBlbnRyaWVzL2V4aXRzICovCisjZGVmaW5lIERCR19QTQkJCTB4MDAwNDAwMDAJLyogcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncyAqLworI2RlZmluZSBEQkdfQlNTX01BVENICQkweDAwMDgwMDAwCS8qIEJTUyBtYXRjaCBmYWlsdXJlcyAqLworI2RlZmluZSBEQkdfUEFSQU1TCQkweDAwMTAwMDAwCS8qIHNob3cgY29uZmlndXJlZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIERCR19XQUlUX0NPTVBMRVRFCTB4MDAyMDAwMDAJLyogY29tbWFuZCBjb21wbGV0aW9uICovCisjZGVmaW5lIERCR19SWF9GUkFHU19TS0IJMHgwMDQwMDAwMAkvKiBza2IgaGVhZGVyIG9mIFJ4IGZyYWdtZW50cyAqLworI2RlZmluZSBEQkdfQlNTX1RBQkxFX1JNCTB4MDA4MDAwMDAJLyogcHVyZ2luZyBic3MgdGFibGUgZW50cmllcyAqLworI2RlZmluZSBEQkdfTU9OSVRPUl9NT0RFCTB4MDEwMDAwMDAJLyogbW9uaXRvciBtb2RlICovCisjZGVmaW5lIERCR19NSUIJCQkweDAyMDAwMDAwCS8qIGR1bXAgYWxsIE1JQnMgb24gc3RhcnR1cCAqLworI2RlZmluZSBEQkdfTUdNVF9USU1FUgkJMHgwNDAwMDAwMAkvKiBkdW1wIG1nbXRfdGltZXIgb3BzICovCisjZGVmaW5lIERCR19XRV9FVkVOVFMJCTB4MDgwMDAwMDAJLyogZHVtcCB3aXJlbGVzcyBldmVudHMgKi8KKyNkZWZpbmUgREJHX0ZXCQkJMHgxMDAwMDAwMAkvKiBmaXJtd2FyZSBkb3dubG9hZCAqLworI2RlZmluZSBEQkdfREZVCQkJMHgyMDAwMDAwMAkvKiBkZXZpY2UgZmlybXdhcmUgdXBncmFkZSAqLworCisjZGVmaW5lIERCR19ERUZBVUxUUwkJMAorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKyNkZWZpbmUgYXQ3Nl9kYmcoYml0cywgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGF0NzZfZGVidWcgJiAoYml0cykpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGF0NzZfZGVidWcgPSBEQkdfREVGQVVMVFM7CisKKy8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CisKK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSBmaXJtd2FyZXNbXSA9IHsKKwlbMF0gPSB7IiJ9LAorCVtCT0FSRF81MDNfSVNMMzg2MV0gPSB7ImF0bWVsX2F0NzZjNTAzLWkzODYxLmJpbiJ9LAorCVtCT0FSRF81MDNfSVNMMzg2M10gPSB7ImF0bWVsX2F0NzZjNTAzLWkzODYzLmJpbiJ9LAorCVtCT0FSRF81MDNdID0geyJhdG1lbF9hdDc2YzUwMy1yZm1kLmJpbiJ9LAorCVtCT0FSRF81MDNfQUNDXSA9IHsiYXRtZWxfYXQ3NmM1MDMtcmZtZC1hY2MuYmluIn0sCisJW0JPQVJEXzUwNV0gPSB7ImF0bWVsX2F0NzZjNTA1LXJmbWQuYmluIn0sCisJW0JPQVJEXzUwNV8yOTU4XSA9IHsiYXRtZWxfYXQ3NmM1MDUtcmZtZDI5NTguYmluIn0sCisJW0JPQVJEXzUwNUFdID0geyJhdG1lbF9hdDc2YzUwNWEtcmZtZDI5NTguYmluIn0sCisJW0JPQVJEXzUwNUFNWF0gPSB7ImF0bWVsX2F0NzZjNTA1YW14LXJmbWQuYmluIn0sCit9OworCisjZGVmaW5lIFVTQl9ERVZJQ0VfREFUQShfX29wcykJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShfX29wcykKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldl90YWJsZVtdID0geworCS8qCisJICogYXQ3NmM1MDMtaTM4NjEKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjEgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi4xL3YyLjYgKi8KKwl7VVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIE5ldGdlYXIgTUExMDEgcmV2LiBBICovCisJe1VTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBUZWtyYW0gVTMwMEMgLyBBbGxuZXQgQUxMMDE5MyAqLworCXtVU0JfREVWSUNFKDB4MGIzYiwgMHgxNjEyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogSFAgSE4yMTBXIEo3ODAxQSAqLworCXtVU0JfREVWSUNFKDB4MDNmMCwgMHgwMTFjKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogU2l0ZWNvbS9aLUNvbS9aeXhlbCBNNFktNzUwICovCisJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKGludGVyc2lsKSAqLworCXtVU0JfREVWSUNFKDB4MDY5YSwgMHgwMzIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogRVogY29ubmVjdCAxMU1wYnMgV2lyZWxlc3MgVVNCIEFkYXB0ZXIgU01DMjY2MlcgdjEgKi8KKwl7VVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEJlblEgQVdMMzAwICovCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDkwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBBZGR0cm9uIEFXVS0xMjAsIENvbXBleCBXTFUxMSAqLworCXtVU0JfREVWSUNFKDB4MDVkZCwgMHhmZjMxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogSW50ZWwgQVAzMTAgQW55UG9pbnQgSUkgVVNCICovCisJe1VTQl9ERVZJQ0UoMHg4MDg2LCAweDAyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBEeW5hbGluayBMMTFVICovCisJe1VTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBBcmVzY29tIFdMLTIxMCwgRkNDIGlkIDA3Si1HTDI0MTFVU0IgKi8KKwl7VVNCX0RFVklDRSgweDBkOGUsIDB4NzExMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEktTyBEQVRBIFdOLUIxMS9VU0IgKi8KKwl7VVNCX0RFVklDRSgweDA0YmIsIDB4MDkxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEJUIFZveWFnZXIgMTAxMCAqLworCXtVU0JfREVWSUNFKDB4MDY5YSwgMHgwODIxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MworCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MyBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2Myl9LAorCS8qIFNhbXN1bmcgU1dMLTIxMDBVICovCisJe1VTQl9ERVZJQ0UoMHgwNTVkLCAweGEwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpfSwKKwkvKgorCSAqIGF0NzZjNTAzLXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzL1JGTUQgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChyZm1kKSAqLworCXtVU0JfREVWSUNFKDB4MDY5YSwgMHgwMzIxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjYgKi8KKwl7VVNCX0RFVklDRSgweDA3N2IsIDB4MjIxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBOZXR3b3JrIEV2ZXJ5d2hlcmUgTldVMTFCICovCisJe1VTQl9ERVZJQ0UoMHgwNzdiLCAweDIyMjcpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEIgKi8KKwl7VVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBELUxpbmsgRFdMLTEyMCByZXYuIEUgKi8KKwl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBBY3Rpb250ZWMgODAyVUFUMSwgSFdVMDExNTAtMDFVSyAqLworCXtVU0JfREVWSUNFKDB4MTY2OCwgMHg3NjA1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEFpclZhc3QgVy1CdWRkaWUgV04yMTAgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NDEwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIFhIMTE1MyA4MDIuMTFiIFVTQiBhZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDU3NDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQ05ldCBDTlVTQjYxMSAqLworCXtVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEZpYmVyTGluZSBGTC1XTDIwMFUgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4MDAwMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBCZW5RIEFXTDQwMCBVU0Igc3RpY2sgKi8KKwl7VVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiAzQ29tIDNDUlNIRVc2OTYgKi8KKwl7VVNCX0RFVklDRSgweDA1MDYsIDB4MGEwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBTaWVtZW5zIFNhbnRpcyBBRFNMIFdMQU4gVVNCIGFkYXB0ZXIgV0xMIDAxMyAqLworCXtVU0JfREVWSUNFKDB4MDY4MSwgMHgwMDFiKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCB2ZXJzaW9uIDIgKi8KKwl7VVNCX0RFVklDRSgweDA1MGQsIDB4MDA1MCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBpQmxpdHp6LCBCV1U2MTMgKG5vdCAqQiBvciAqU0IpICovCisJe1VTQl9ERVZJQ0UoMHgwN2I4LCAweGIwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogR2lnYWJ5dGUgR04tV0xCTTEwMSAqLworCXtVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIFBsYW5leCBHVy1VUzExUyAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHgzMjIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEludGVybmFsIFdMQU4gYWRhcHRlciBpbiBoNVs0LDVdeHggc2VyaWVzIGlQQVFzICovCisJe1VTQl9ERVZJQ0UoMHgwNDlmLCAweDAwMzIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaSAqLworCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDExKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIENvcmVnYSBXaXJlbGVzcyBMQU4gVVNCLTExIG1pbmkyICovCisJe1VTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTgpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogVW5pZGVuIFBDVzEwMCAqLworCXtVU0JfREVWSUNFKDB4MDVkZCwgMHhmZjM1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZC1hY2MKKwkgKi8KKwkvKiBTTUMyNjY0VyAqLworCXtVU0JfREVWSUNFKDB4MDgzYSwgMHgzNTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19BQ0MpfSwKKwkvKiBCZWxraW4gRjVENjA1MCwgU01DMjY2MlcgdjIsIFNNQzI2NjJXLUFSICovCisJe1VTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQyl9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDUvUkZNRCAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA2KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNSl9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQsIE92aXNMaW5rIFdMLTExMzBVU0IgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIEZpYmVybGluZSBGTC1XTDI0MFUgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4MDAxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIENOZXQgQ05VU0ItNjExRyAqLworCXtVU0JfREVWSUNFKDB4MTM3MSwgMHgwMDEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuOCAqLworCXtVU0JfREVWSUNFKDB4MTkxNSwgMHgyMjMzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogWHRlcmFzeXMgWE4tMjEyMkIsIElCbGl0enogQldVNjEzQi9CV1U2MTNTQiAqLworCXtVU0JfREVWSUNFKDB4MTJmZCwgMHgxMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogQ29yZWdhIFdMQU4gVVNCIFN0aWNrIDExICovCisJe1VTQl9ERVZJQ0UoMHgwN2FhLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBNaWNyb3N0YXIgTVNJIEJveCBNUzY5NzggKi8KKwl7VVNCX0RFVklDRSgweDBkYjAsIDB4MTAyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qCisJICogYXQ3NmM1MDVhLXJmbWQyOTU4CisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNUEgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSl9LAorCS8qIEdlbmVyaWMgQVQ3NkM1MDVBUyBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKX0sCisJLyogU2llbWVucyBHaWdhc2V0IFVTQiBXTEFOIEFkYXB0ZXIgMTEgKi8KKwl7VVNCX0RFVklDRSgweDE2OTAsIDB4MDcwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBKX0sCisJLyoKKwkgKiBhdDc2YzUwNWFteC1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNUFNWCBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBTVgpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldl90YWJsZSk7CisKKy8qIFN1cHBvcnRlZCByYXRlcyBvZiB0aGlzIGhhcmR3YXJlLCBiaXQgNyBtYXJrcyBiYXNpYyByYXRlcyAqLworc3RhdGljIGNvbnN0IHU4IGh3X3JhdGVzW10gPSB7IDB4ODIsIDB4ODQsIDB4MGIsIDB4MTYgfTsKKworLyogRnJlcXVlbmN5IG9mIGVhY2ggY2hhbm5lbCBpbiBNSHogKi8KK3N0YXRpYyBjb25zdCBsb25nIGNoYW5uZWxfZnJlcXVlbmN5W10gPSB7CisJMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKKwkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Cit9OworCisjZGVmaW5lIE5VTV9DSEFOTkVMUyBBUlJBWV9TSVpFKGNoYW5uZWxfZnJlcXVlbmN5KQorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcHJlYW1ibGVzW10gPSB7ICJsb25nIiwgInNob3J0IiwgImF1dG8iIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtYWNfc3RhdGVzW10gPSB7CisJW01BQ19JTklUXSA9ICJJTklUIiwKKwlbTUFDX1NDQU5OSU5HXSA9ICJTQ0FOTklORyIsCisJW01BQ19BVVRIXSA9ICJBVVRIIiwKKwlbTUFDX0FTU09DXSA9ICJBU1NPQyIsCisJW01BQ19KT0lOSU5HXSA9ICJKT0lOSU5HIiwKKwlbTUFDX0NPTk5FQ1RFRF0gPSAiQ09OTkVDVEVEIiwKKwlbTUFDX09XTl9JQlNTXSA9ICJPV05fSUJTUyIKK307CisKKy8qIEZpcm13YXJlIGRvd25sb2FkICovCisvKiBERlUgc3RhdGVzICovCisjZGVmaW5lIFNUQVRFX0lETEUJCQkweDAwCisjZGVmaW5lIFNUQVRFX0RFVEFDSAkJCTB4MDEKKyNkZWZpbmUgU1RBVEVfREZVX0lETEUJCQkweDAyCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DCQkweDAzCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZCQkweDA0CisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFCQkweDA1CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DCQkweDA2CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVAkJMHgwNworI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVAkweDA4CisjZGVmaW5lIFNUQVRFX0RGVV9VUExPQURfSURMRQkJMHgwOQorI2RlZmluZSBTVEFURV9ERlVfRVJST1IJCQkweDBhCisKKy8qIERGVSBjb21tYW5kcyAqLworI2RlZmluZSBERlVfREVUQUNICQkJMAorI2RlZmluZSBERlVfRE5MT0FECQkJMQorI2RlZmluZSBERlVfVVBMT0FECQkJMgorI2RlZmluZSBERlVfR0VUU1RBVFVTCQkJMworI2RlZmluZSBERlVfQ0xSU1RBVFVTCQkJNAorI2RlZmluZSBERlVfR0VUU1RBVEUJCQk1CisjZGVmaW5lIERGVV9BQk9SVAkJCTYKKworI2RlZmluZSBGV19CTE9DS19TSVpFIDEwMjQKKworc3RydWN0IGRmdV9zdGF0dXMgeworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgcG9sbF90aW1lb3V0WzNdOworCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdHJpbmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzX2ludGVyc2lsKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYxIHx8IGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDNyZm1kKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwMyB8fCBib2FyZCA9PSBCT0FSRF81MDNfQUNDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDVhKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwNUEgfHwgYm9hcmQgPT0gQk9BUkRfNTA1QU1YKTsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBmaXJzdCAoaW50ZXJuYWwpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCSAgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBERlVfRE5MT0FELAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGJsb2Nrbm8sIDAsIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBhdDc2X2RmdV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZnVfc3RhdHVzICpzdGF0dXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFUVVMsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdHVzLCBzaXplb2Yoc3RydWN0IGRmdV9zdGF0dXMpLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBhdDc2X2RmdV9nZXRfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRFLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXRlLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ29udmVydCB0aW1lb3V0IGZyb20gdGhlIERGVSBzdGF0dXMgdG8gamlmZmllcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0NzZfZ2V0X3RpbWVvdXQoc3RydWN0IGRmdV9zdGF0dXMgKnMpCit7CisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoKHMtPnBvbGxfdGltZW91dFsyXSA8PCAxNikKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMV0gPDwgOCkKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMF0pKTsKK30KKworLyogTG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBmcm9tIHRoZSBidWZmZXIuICBJZiBtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwLCB1c2UKKyAqIGl0cyB2YWx1ZSBpbiBqaWZmaWVzIGluIHRoZSBNQU5JRkVTVF9TWU5DIHN0YXRlLiAgKi8KK3N0YXRpYyBpbnQgYXQ3Nl91c2JkZnVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpidWYsIHUzMiBzaXplLAorCQkJCWludCBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpCit7CisJdTggKmJsb2NrOworCXN0cnVjdCBkZnVfc3RhdHVzIGRmdV9zdGF0X2J1ZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmVlZF9kZnVfc3RhdGUgPSAxOworCWludCBpc19kb25lID0gMDsKKwl1OCBkZnVfc3RhdGUgPSAwOworCXUzMiBkZnVfdGltZW91dCA9IDA7CisJaW50IGJzaXplID0gMDsKKwlpbnQgYmxvY2tubyA9IDA7CisKKwlhdDc2X2RiZyhEQkdfREZVLCAiJXMoICVwLCAldSwgJWQpIiwgX19mdW5jX18sIGJ1Ziwgc2l6ZSwKKwkJIG1hbmlmZXN0X3N5bmNfdGltZW91dCk7CisKKwlpZiAoIXNpemUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgIkZXIGJ1ZmZlciBsZW5ndGggaW52YWxpZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbyB7CisJCWlmIChuZWVkX2RmdV9zdGF0ZSkgeworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXRlKHVkZXYsICZkZnVfc3RhdGUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiY2Fubm90IGdldCBERlUgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJfQorCisJCXN3aXRjaCAoZGZ1X3N0YXRlKSB7CisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX1NZTkMiKTsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJCX0gZWxzZQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2RmdV9nZXRfc3RhdHVzIHJldHVybmVkICVkXG4iLAorCQkJCQkgICByZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfQlVTWSIpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBSZXNldHRpbmcgZGV2aWNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJET1dOTE9BRC4uLiIpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgU1RBVEVfREZVX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIElETEUiKTsKKworCQkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJCWF0NzZfZGJnKERCR19ERlUsICJpbnQgZncsIHNpemUgbGVmdCA9ICU1ZCwgIgorCQkJCSAiYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLCBzaXplLCBic2l6ZSwKKwkJCQkgYmxvY2tubyk7CisJCQlyZXQgPQorCQkJICAgIGF0NzZfbG9hZF9pbnRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJCWJ1ZiArPSBic2l6ZTsKKwkJCXNpemUgLT0gYnNpemU7CisJCQlibG9ja25vKys7CisKKwkJCWlmIChyZXQgIT0gYnNpemUpCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfbG9hZF9pbnRfZndfYmxvY2sgIgorCQkJCQkgICAicmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DIik7CisKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCisJCQkvKiBvdmVycmlkZSB0aGUgdGltZW91dCBmcm9tIHRoZSBzdGF0dXMgcmVzcG9uc2UsCisJCQkgICBuZWVkZWQgZm9yIEFUNzZDNTA1QSAqLworCQkJaWYgKG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDApCisJCQkJZGZ1X3RpbWVvdXQgPSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQ7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFdhaXRpbmcgZm9yIG1hbmlmZXN0IHBoYXNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1Q6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfVVBMT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX1VQTE9BRF9JRExFIik7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9FUlJPUjoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRVJST1IiKTsKKwkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIFVOS05PV04gU1RBVEUgKCVkKSIsIGRmdV9zdGF0ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghaXNfZG9uZSAmJiAocmV0ID49IDApKTsKKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyogUmVwb3J0IHRoYXQgdGhlIHNjYW4gcmVzdWx0cyBhcmUgcmVhZHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDc2X2l3ZXZlbnRfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCXdpcmVsZXNzX3NlbmRfZXZlbnQobmV0ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCWF0NzZfZGJnKERCR19XRV9FVkVOVFMsICIlczogU0lPQ0dJV1NDQU4gc2VudCIsIG5ldGRldi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDc2X2l3ZXZlbnRfYnNzX2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJICAgIHU4ICpic3NpZCkKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KG5ldGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisJYXQ3Nl9kYmcoREJHX1dFX0VWRU5UUywgIiVzOiAlczogU0lPQ0dJV0FQIHNlbnQiLCBuZXRkZXYtPm5hbWUsCisJCSBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDc2X2l3ZXZlbnRfYnNzX2Rpc2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCXdpcmVsZXNzX3NlbmRfZXZlbnQobmV0ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwlhdDc2X2RiZyhEQkdfV0VfRVZFTlRTLCAiJXM6ICVzOiBTSU9DR0lXQVAgc2VudCIsIG5ldGRldi0+bmFtZSwKKwkJIF9fZnVuY19fKTsKK30KKworI2RlZmluZSBIRVgyU1RSX0JVRkZFUlMgNAorI2RlZmluZSBIRVgyU1RSX01BWF9MRU4gNjQKKyNkZWZpbmUgQklOMkhFWCh4KSAoKHgpIDwgMTAgPyAnMCcgKyAoeCkgOiAoeCkgKyAnQScgLSAxMCkKKworLyogQ29udmVydCBiaW5hcnkgZGF0YSBpbnRvIGhleCBzdHJpbmcgKi8KK3N0YXRpYyBjaGFyICpoZXgyc3RyKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbSEVYMlNUUl9CVUZGRVJTXVszICogSEVYMlNUUl9NQVhfTEVOICsgMV07CisJY2hhciAqcmV0ID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoSEVYMlNUUl9CVUZGRVJTIC0gMSldOworCWNoYXIgKm9idWYgPSByZXQ7CisJdTggKmlidWYgPSBidWY7CisKKwlpZiAobGVuID4gSEVYMlNUUl9NQVhfTEVOKQorCQlsZW4gPSBIRVgyU1RSX01BWF9MRU47CisKKwlpZiAobGVuIDw9IDApIHsKKwkJcmV0WzBdID0gJ1wwJzsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgPj4gNCk7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmICYgMHhmKTsKKwkJKm9idWYrKyA9ICctJzsKKwkJaWJ1ZisrOworCX0KKwkqKC0tb2J1ZikgPSAnXDAnOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUMyU1RSX0JVRkZFUlMgNAorCitzdGF0aWMgaW5saW5lIGNoYXIgKm1hYzJzdHIodTggKm1hYykKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbTUFDMlNUUl9CVUZGRVJTXVs2ICogM107CisJY2hhciAqc3RyOworCisJc3RyID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoTUFDMlNUUl9CVUZGRVJTIC0gMSldOworCXNwcmludGYoc3RyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwlyZXR1cm4gc3RyOworfQorCisvKiBMRUQgdHJpZ2dlciAqLworc3RhdGljIGludCB0eF9hY3Rpdml0eTsKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBERUZJTkVfVElNRVIobGVkdHJpZ190eF90aW1lciwgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYywgMCwgMCk7CitERUZJTkVfTEVEX1RSSUdHRVIobGVkdHJpZ190eCk7CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0YXRpYyBpbnQgdHhfbGFzdGFjdGl2aXR5OworCisJaWYgKHR4X2xhc3RhY3Rpdml0eSAhPSB0eF9hY3Rpdml0eSkgeworCQl0eF9sYXN0YWN0aXZpdHkgPSB0eF9hY3Rpdml0eTsKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX0ZVTEwpOworCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworCX0gZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KHZvaWQpCit7CisJdHhfYWN0aXZpdHkrKzsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmxlZHRyaWdfdHhfdGltZXIpKQorCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworfQorCisvKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3NpZCBpcyBoaWRkZW4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfaGlkZGVuX3NzaWQodTggKnNzaWQsIGludCBsZW5ndGgpCit7CisJc3RhdGljIGNvbnN0IHU4IHplcm9zWzMyXTsKKworCWlmIChsZW5ndGggPT0gMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAobGVuZ3RoID09IDEgJiYgc3NpZFswXSA9PSAnICcpCisJCXJldHVybiAxOworCisJcmV0dXJuIChtZW1jbXAoc3NpZCwgemVyb3MsIGxlbmd0aCkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDc2X2ZyZWVfYnNzX2xpc3Qoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCXByaXYtPmN1cnJfYnNzID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwdHIsIG5leHQsICZwcml2LT5ic3NfbGlzdCkgeworCQlsaXN0X2RlbChwdHIpOworCQlrZnJlZShsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhdDc2X3JlbWFwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwYSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIDAsIE5VTEwsIDAsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfb3BfbW9kZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCXU4IG9wX21vZGU7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDAxLCAwLCAmb3BfbW9kZSwgMSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlIGlmIChyZXQgPCAxKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiBvcF9tb2RlOworfQorCisvKiBMb2FkIGEgYmxvY2sgb2YgdGhlIHNlY29uZCAoImV4dGVybmFsIikgcGFydCBvZiB0aGUgZmlybXdhcmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfbG9hZF9leHRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCQkgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBlLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgICAweDA4MDIsIGJsb2Nrbm8sIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfaHdfY2ZnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwYTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogSW50ZXJzaWwgYm9hcmRzIHVzZSBhIGRpZmZlcmVudCAidmFsdWUiIGZvciBHZXRIV0NvbmZpZyByZXF1ZXN0cyAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgICB1bmlvbiBhdDc2X2h3Y2ZnICpidWYsIGludCBidWZfc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDA5MDIsIDAsCisJCQkgICAgICAgYnVmLCBidWZfc2l6ZSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworfQorCisvKiBHZXQgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZGFwdGVyIGFuZCBwdXQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlCisgKiBmaWVsZHMgb2YgJ3ByaXYnICh0aGUgR2V0SFdDb25maWcgcmVxdWVzdCBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHJlc3VsdAorICogZGVwZW5kcyBvbiB0aGUgYm9hcmQgdHlwZSkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfaHdfY29uZmlnKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwl1bmlvbiBhdDc2X2h3Y2ZnICpod2NmZyA9IGttYWxsb2Moc2l6ZW9mKCpod2NmZyksIEdGUF9LRVJORUwpOworCisJaWYgKCFod2NmZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYXQ3Nl9pc19pbnRlcnNpbChwcml2LT5ib2FyZF90eXBlKSkgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmdfaW50ZXJzaWwocHJpdi0+dWRldiwgaHdjZmcsCisJCQkJCSAgICAgICBzaXplb2YoaHdjZmctPmkpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPmkubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+aS5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgaWYgKGF0NzZfaXNfNTAzcmZtZChwcml2LT5ib2FyZF90eXBlKSkgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjMpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnIzLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnIzLnJlZ3VsYXRvcnlfZG9tYWluOworCX0gZWxzZSB7CisJCXJldCA9IGF0NzZfZ2V0X2h3X2NmZyhwcml2LT51ZGV2LCBod2NmZywgc2l6ZW9mKGh3Y2ZnLT5yNSkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBod2NmZy0+cjUubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJcHJpdi0+cmVndWxhdG9yeV9kb21haW4gPSBod2NmZy0+cjUucmVndWxhdG9yeV9kb21haW47CisJfQorCitleGl0OgorCWtmcmVlKGh3Y2ZnKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBIVyBDb25maWcgKGVycm9yICVkKVxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnX2RvbWFpbiBjb25zdCAqYXQ3Nl9nZXRfcmVnX2RvbWFpbih1MTYgY29kZSkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgZmRfdGFiW10gPSB7CisJCXsweDEwLCAiRkNDIChVU0EpIiwgMHg3ZmZ9LAkvKiBjaCAxLTExICovCisJCXsweDIwLCAiSUMgKENhbmFkYSkiLCAweDdmZn0sCS8qIGNoIDEtMTEgKi8KKwkJezB4MzAsICJFVFNJIChtb3N0IG9mIEV1cm9wZSkiLCAweDFmZmZ9LAkvKiBjaCAxLTEzICovCisJCXsweDMxLCAiU3BhaW4iLCAweDYwMH0sCS8qIGNoIDEwLTExICovCisJCXsweDMyLCAiRnJhbmNlIiwgMHgxZTAwfSwJLyogY2ggMTAtMTMgKi8KKwkJezB4NDAsICJNS0sgKEphcGFuKSIsIDB4MjAwMH0sCS8qIGNoIDE0ICovCisJCXsweDQxLCAiTUtLMSAoSmFwYW4pIiwgMHgzZmZmfSwJLyogY2ggMS0xNCAqLworCQl7MHg1MCwgIklzcmFlbCIsIDB4M2ZjfSwJLyogY2ggMy05ICovCisJCXsweDAwLCAiPHVua25vd24+IiwgMHhmZmZmZmZmZn0JLyogY2ggMS0zMiAqLworCX07CisKKwkvKiBMYXN0IGVudHJ5IGlzIGZhbGxiYWNrIGZvciB1bmtub3duIGRvbWFpbiBjb2RlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmRfdGFiKSAtIDE7IGkrKykKKwkJaWYgKGNvZGUgPT0gZmRfdGFiW2ldLmNvZGUpCisJCQlicmVhazsKKworCXJldHVybiAmZmRfdGFiW2ldOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9taWIoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHUxNiBtaWIsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgICBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIG1pYiA8PCA4LCAwLCBidWYsIGJ1Zl9zaXplLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gYnVmX3NpemUpCisJCXJldHVybiAtRUlPOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybiBwb3NpdGl2ZSBudW1iZXIgZm9yIHN0YXR1cywgbmVnYXRpdmUgZm9yIGFuIGVycm9yICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2dldF9jbWRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBjbWQpCit7CisJdTggc3RhdF9idWZbNDBdOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDIyLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBjbWQsIDAsIHN0YXRfYnVmLAorCQkJICAgICAgc2l6ZW9mKHN0YXRfYnVmKSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHN0YXRfYnVmWzVdOworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2NhcmRfY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGNtZCwgdm9pZCAqYnVmLAorCQkJCSBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9jb21tYW5kICpjbWRfYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKworCQkJCQkgICAgICAgYnVmX3NpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFjbWRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZF9idWYtPmNtZCA9IGNtZDsKKwljbWRfYnVmLT5yZXNlcnZlZCA9IDA7CisJY21kX2J1Zi0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9zaXplKTsKKwltZW1jcHkoY21kX2J1Zi0+ZGF0YSwgYnVmLCBidWZfc2l6ZSk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBlLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwgMCwgY21kX2J1ZiwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArIGJ1Zl9zaXplLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWtmcmVlKGNtZF9idWYpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFLRV9DTURfU1RBVFVTX0NBU0UoYykJY2FzZSAoYyk6IHJldHVybiAjYworc3RhdGljIGNvbnN0IGNoYXIgKmF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHU4IGNtZF9zdGF0dXMpCit7CisJc3dpdGNoIChjbWRfc3RhdHVzKSB7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSURMRSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfQ09NUExFVEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1VOS05PV04pOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19GVU5DVElPTl9OT1RfU1VQUE9SVEVEKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19USU1FX09VVCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0hPU1RfRkFJTFVSRSk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfU0NBTl9GQUlMRUQpOworCX0KKworCXJldHVybiAiVU5LTk9XTiI7Cit9CisKKy8qIFdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgY29tcGxldGVkICovCitzdGF0aWMgaW50IGF0NzZfd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBjbWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIENNRF9DT01QTEVUSU9OX1RJTUVPVVQ7CisKKwlkbyB7CisJCXN0YXR1cyA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgY21kKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X2NtZF9zdGF0dXMgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCisJCWF0NzZfZGJnKERCR19XQUlUX0NPTVBMRVRFLAorCQkJICIlczogV2FpdGluZyBvbiBjbWQgJWQsIHN0YXR1cyA9ICVkICglcykiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgY21kLCBzdGF0dXMsCisJCQkgYXQ3Nl9nZXRfY21kX3N0YXR1c19zdHJpbmcoc3RhdHVzKSk7CisKKwkJaWYgKHN0YXR1cyAhPSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCisJCSAgICAmJiBzdGF0dXMgIT0gQ01EX1NUQVRVU19JRExFKQorCQkJYnJlYWs7CisKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gMTApOwkvKiAxMDAgbXMgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogY29tcGxldGlvbiB0aW1lb3V0IGZvciBjb21tYW5kICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgY21kKTsKKwkJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9taWIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IHNldF9taWJfYnVmZmVyICpidWYpCit7CisJaW50IHJldDsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0VUX01JQiwgYnVmLAorCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3Qgc2V0X21pYl9idWZmZXIsCisJCQkJCSAgICAgZGF0YSkgKyBidWYtPnNpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NFVF9NSUIpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6IHNldF9taWI6IGF0NzZfd2FpdF9jb21wbGV0aW9uIGZhaWxlZCAiCisJCSAgICAgICAid2l0aCAlZFxuIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybiA8IDAgb24gZXJyb3IsID09IDAgaWYgbm8gY29tbWFuZCBzZW50LCA9PSAxIGlmIGNtZCBzZW50ICovCitzdGF0aWMgaW50IGF0NzZfc2V0X3JhZGlvKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKwlpbnQgY21kOworCisJaWYgKHByaXYtPnJhZGlvX29uID09IGVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwljbWQgPSBlbmFibGUgPyBDTURfUkFESU9fT04gOiBDTURfUkFESU9fT0ZGOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIGNtZCwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCglZCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgY21kLCByZXQpOworCWVsc2UKKwkJcmV0ID0gMTsKKworCXByaXYtPnJhZGlvX29uID0gZW5hYmxlOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCBjdXJyZW50IHBvd2VyIHNhdmUgbW9kZSAoQVQ3Nl9QTV9PRkYvQVQ3Nl9QTV9PTi9BVDc2X1BNX1NNQVJUKSAqLworc3RhdGljIGludCBhdDc2X3NldF9wbV9tb2RlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX01HTVQ7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfbWdtdCwgcG93ZXJfbWdtdF9tb2RlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHByaXYtPnBtX21vZGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwbV9tb2RlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHRoZSBhc3NvY2lhdGlvbiBpZCBmb3IgcG93ZXIgc2F2ZSBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc2V0X2Fzc29jaWQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTE2IGlkKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIHN0YXRpb25faWQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoaWQpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXNzb2NpZCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCB0aGUgbGlzdGVuIGludGVydmFsIGZvciBwb3dlciBzYXZlIG1vZGUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbGlzdGVuX2ludGVydmFsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBpbnRlcnZhbCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIGxpc3Rlbl9pbnRlcnZhbCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihpbnRlcnZhbCk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogc2V0X21pYiAobGlzdGVuX2ludGVydmFsKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9wcmVhbWJsZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1OCB0eXBlKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByZWFtYmxlX3R5cGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gdHlwZTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByZWFtYmxlKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9mcmFnKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBzaXplKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQzsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hYywgZnJhZ190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChmcmFnIHRocmVzaG9sZCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcnRzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBzaXplKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQzsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hYywgcnRzX3RocmVzaG9sZCk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLndvcmQgPSBjcHVfdG9fbGUxNihzaXplKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHJ0cykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2soc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IG9ub2ZmKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHR4YXV0b3JhdGVfZmFsbGJhY2spOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gb25vZmY7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChhdXRvcmF0ZSBmYWxsYmFjaykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9hZGRfbWFjX2FkZHJlc3Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdm9pZCAqYWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfQUREUjsKKwlwcml2LT5taWJfYnVmLnNpemUgPSBFVEhfQUxFTjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfYWRkciwgbWFjX2FkZHIpOworCW1lbWNweShwcml2LT5taWJfYnVmLmRhdGEuYWRkciwgYWRkciwgRVRIX0FMRU4pOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoTUFDX0FERFIsIG1hY19hZGRyKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfYWRkcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWNfYWRkciAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX2FkZHIpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX0FERFIsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkcikpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX0FERFIpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfQUREUjogbWFjX2FkZHIgJXMgcmVzIDB4JXggMHgleCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBtYWMyc3RyKG0tPm1hY19hZGRyKSwgbS0+cmVzWzBdLCBtLT5yZXNbMV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPmdyb3VwX2FkZHIpOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBncm91cCBhZGRyICVkOiAlcywgIgorCQkJICJzdGF0dXMgJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsIGksCisJCQkgbWFjMnN0cihtLT5ncm91cF9hZGRyW2ldKSwgbS0+Z3JvdXBfYWRkcl9zdGF0dXNbaV0pOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfd2VwKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlpbnQga2V5X2xlbjsKKwlzdHJ1Y3QgbWliX21hY193ZXAgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY193ZXApLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfV0VQLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX1dFUCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IHByaXZfaW52b2tlZCAldSBkZWZfa2V5X2lkICV1ICIKKwkJICJrZXlfbGVuICV1IGV4Y2xfdW5lbmNyICV1IHdlcF9pY3ZfZXJyICV1IHdlcF9leGNsdWRlZCAldSAiCisJCSAiZW5jcl9sZXZlbCAldSBrZXkgJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBtLT5wcml2YWN5X2ludm9rZWQsIG0tPndlcF9kZWZhdWx0X2tleV9pZCwKKwkJIG0tPndlcF9rZXlfbWFwcGluZ19sZW4sIG0tPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQsCisJCSBsZTMyX3RvX2NwdShtLT53ZXBfaWN2X2Vycm9yX2NvdW50KSwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9leGNsdWRlZF9jb3VudCksIG0tPmVuY3J5cHRpb25fbGV2ZWwsCisJCSBtLT53ZXBfZGVmYXVsdF9rZXlfaWQpOworCisJa2V5X2xlbiA9IChtLT5lbmNyeXB0aW9uX2xldmVsID09IDEpID8KKwkgICAgV0VQX1NNQUxMX0tFWV9MRU4gOiBXRVBfTEFSR0VfS0VZX0xFTjsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKQorCQlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfV0VQOiBrZXkgJWQ6ICVzIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGksCisJCQkgaGV4MnN0cihtLT53ZXBfZGVmYXVsdF9rZXl2YWx1ZVtpXSwga2V5X2xlbikpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWNfbWdtdChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWNfbWdtdCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX01HTVQsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDX01HTVQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfTUdNVDogYmVhY29uX3BlcmlvZCAlZCBDRlBfbWF4X2R1cmF0aW9uICIKKwkJICIlZCBtZWRpdW1fb2NjdXBhbmN5X2xpbWl0ICVkIHN0YXRpb25faWQgMHgleCBBVElNX3dpbmRvdyAlZCAiCisJCSAiQ0ZQX21vZGUgJWQgcHJpdmFjeV9vcHRfaW1wbCAlZCBEVElNX3BlcmlvZCAlZCBDRlBfcGVyaW9kICVkICIKKwkJICJjdXJyZW50X2Jzc2lkICVzIGN1cnJlbnRfZXNzaWQgJXMgY3VycmVudF9ic3NfdHlwZSAlZCAiCisJCSAicG1fbW9kZSAlZCBpYnNzX2NoYW5nZSAlZCByZXMgJWQgIgorCQkgIm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkICVkICIKKwkJICJpbnRlcm5hdGlvbmFsX3JvYW1pbmcgJWQgY291bnRyeV9zdHJpbmcgJS4zcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGxlMTZfdG9fY3B1KG0tPmJlYWNvbl9wZXJpb2QpLAorCQkgbGUxNl90b19jcHUobS0+Q0ZQX21heF9kdXJhdGlvbiksCisJCSBsZTE2X3RvX2NwdShtLT5tZWRpdW1fb2NjdXBhbmN5X2xpbWl0KSwKKwkJIGxlMTZfdG9fY3B1KG0tPnN0YXRpb25faWQpLCBsZTE2X3RvX2NwdShtLT5BVElNX3dpbmRvdyksCisJCSBtLT5DRlBfbW9kZSwgbS0+cHJpdmFjeV9vcHRpb25faW1wbGVtZW50ZWQsIG0tPkRUSU1fcGVyaW9kLAorCQkgbS0+Q0ZQX3BlcmlvZCwgbWFjMnN0cihtLT5jdXJyZW50X2Jzc2lkKSwKKwkJIGhleDJzdHIobS0+Y3VycmVudF9lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgbS0+Y3VycmVudF9ic3NfdHlwZSwgbS0+cG93ZXJfbWdtdF9tb2RlLCBtLT5pYnNzX2NoYW5nZSwKKwkJIG0tPnJlcywgbS0+bXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQsCisJCSBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9lbmFibGVkLCBtLT5jb3VudHJ5X3N0cmluZyk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hYyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tYWMgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hYyksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQywgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUM6IG1heF90eF9tc2R1X2xpZmV0aW1lICVkICIKKwkJICJtYXhfcnhfbGlmZXRpbWUgJWQgZnJhZ190aHJlc2hvbGQgJWQgcnRzX3RocmVzaG9sZCAlZCAiCisJCSAiY3dtaW4gJWQgY3dtYXggJWQgc2hvcnRfcmV0cnlfdGltZSAlZCBsb25nX3JldHJ5X3RpbWUgJWQgIgorCQkgInNjYW5fdHlwZSAlZCBzY2FuX2NoYW5uZWwgJWQgcHJvYmVfZGVsYXkgJXUgIgorCQkgIm1pbl9jaGFubmVsX3RpbWUgJWQgbWF4X2NoYW5uZWxfdGltZSAlZCBsaXN0ZW5faW50ICVkICIKKwkJICJkZXNpcmVkX3NzaWQgJXMgZGVzaXJlZF9ic3NpZCAlcyBkZXNpcmVkX2Jzc3R5cGUgJWQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZTMyX3RvX2NwdShtLT5tYXhfdHhfbXNkdV9saWZldGltZSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfcnhfbGlmZXRpbWUpLAorCQkgbGUxNl90b19jcHUobS0+ZnJhZ190aHJlc2hvbGQpLCBsZTE2X3RvX2NwdShtLT5ydHNfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmN3bWluKSwgbGUxNl90b19jcHUobS0+Y3dtYXgpLAorCQkgbS0+c2hvcnRfcmV0cnlfdGltZSwgbS0+bG9uZ19yZXRyeV90aW1lLCBtLT5zY2FuX3R5cGUsCisJCSBtLT5zY2FuX2NoYW5uZWwsIGxlMTZfdG9fY3B1KG0tPnByb2JlX2RlbGF5KSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1pbl9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bWF4X2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5saXN0ZW5faW50ZXJ2YWwpLAorCQkgaGV4MnN0cihtLT5kZXNpcmVkX3NzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG1hYzJzdHIobS0+ZGVzaXJlZF9ic3NpZCksIG0tPmRlc2lyZWRfYnNzdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX3BoeShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9waHkgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX1BIWSwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChQSFkpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBQSFk6IGVkX3RocmVzaG9sZCAlZCBzbG90X3RpbWUgJWQgIgorCQkgInNpZnNfdGltZSAlZCBwcmVhbWJsZV9sZW5ndGggJWQgcGxjcF9oZWFkZXJfbGVuZ3RoICVkICIKKwkJICJtcGR1X21heF9sZW5ndGggJWQgY2NhX21vZGVfc3VwcG9ydGVkICVkIG9wZXJhdGlvbl9yYXRlX3NldCAiCisJCSAiMHgleCAweCV4IDB4JXggMHgleCBjaGFubmVsX2lkICVkIGN1cnJlbnRfY2NhX21vZGUgJWQgIgorCQkgInBoeV90eXBlICVkIGN1cnJlbnRfcmVnX2RvbWFpbiAlZCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGxlMzJfdG9fY3B1KG0tPmVkX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5zbG90X3RpbWUpLCBsZTE2X3RvX2NwdShtLT5zaWZzX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+cHJlYW1ibGVfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnBsY3BfaGVhZGVyX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5tcGR1X21heF9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+Y2NhX21vZGVfc3VwcG9ydGVkKSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzBdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzFdLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMl0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbM10sIG0tPmNoYW5uZWxfaWQsIG0tPmN1cnJlbnRfY2NhX21vZGUsCisJCSBtLT5waHlfdHlwZSwgbS0+Y3VycmVudF9yZWdfZG9tYWluKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbG9jYWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbG9jYWwgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX0xPQ0FMLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9sb2NhbCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTE9DQUwpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBMT0NBTDogYmVhY29uX2VuYWJsZSAlZCAiCisJCSAidHhhdXRvcmF0ZV9mYWxsYmFjayAlZCBzc2lkX3NpemUgJWQgcHJvbWlzY3VvdXNfbW9kZSAlZCAiCisJCSAicHJlYW1ibGVfdHlwZSAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwgbS0+YmVhY29uX2VuYWJsZSwKKwkJIG0tPnR4YXV0b3JhdGVfZmFsbGJhY2ssIG0tPnNzaWRfc2l6ZSwgbS0+cHJvbWlzY3VvdXNfbW9kZSwKKwkJIG0tPnByZWFtYmxlX3R5cGUpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tZG9tYWluKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21kb21haW4gKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NRE9NQUlOLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWRvbWFpbikpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTURPTUFJTikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1ET01BSU46IGNoYW5uZWxfbGlzdCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBoZXgyc3RyKG0tPmNoYW5uZWxfbGlzdCwgc2l6ZW9mKG0tPmNoYW5uZWxfbGlzdCkpKTsKKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1ET01BSU46IHR4X3Bvd2VybGV2ZWwgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgaGV4MnN0cihtLT50eF9wb3dlcmxldmVsLCBzaXplb2YobS0+dHhfcG93ZXJsZXZlbCkpKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfY3VycmVudF9ic3NpZChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtaWJfbWFjX21nbXQgKm1hY19tZ210ID0KKwkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtYWNfbWdtdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgbWFjX21nbXQsCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKwltZW1jcHkocHJpdi0+YnNzaWQsIG1hY19tZ210LT5jdXJyZW50X2Jzc2lkLCBFVEhfQUxFTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVzaW5nIEJTU0lEICVzXG4iLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJICAgICAgIG1hYzJzdHIocHJpdi0+YnNzaWQpKTsKK2Vycm9yOgorCWtmcmVlKG1hY19tZ210KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9jdXJyZW50X2NoYW5uZWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWliX3BoeSAqcGh5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9waHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcGh5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9QSFksIHBoeSwgc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliKE1JQl9QSFkpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCXByaXYtPmNoYW5uZWwgPSBwaHktPmNoYW5uZWxfaWQ7CitlcnJvcjoKKwlrZnJlZShwaHkpOworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGF0NzZfc3RhcnRfc2NhbiAtIHN0YXJ0IGEgc2NhbgorICoKKyAqIEB1c2VfZXNzaWQgLSB1c2UgdGhlIGNvbmZpZ3VyZWQgRVNTSUQgaW4gbm9uIHBhc3NpdmUgbW9kZQorICovCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfc2NhbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgdXNlX2Vzc2lkKQoreworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisKKwlpZiAodXNlX2Vzc2lkKSB7CisJCW1lbWNweShzY2FuLmVzc2lkLCBwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCQlzY2FuLmVzc2lkX3NpemUgPSBwcml2LT5lc3NpZF9zaXplOworCX0gZWxzZQorCQlzY2FuLmVzc2lkX3NpemUgPSAwOworCisJLyogamFsOiB3aHkgc2hvdWxkIHdlIHN0YXJ0IGF0IGEgY2VydGFpbiBjaGFubmVsPyB3ZSBkbyBzY2FuIHRoZSB3aG9sZQorCSAgIHJhbmdlIGFsbG93ZWQgYnkgcmVnIGRvbWFpbi4gKi8KKwlzY2FuLmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCisJLyogYXRtZWx3bGFuZHJpdmVyIGRpZmZlcnMgYmV0d2VlbiBzY2FuIHR5cGUgMCBhbmQgMSAoYWN0aXZlL3Bhc3NpdmUpCisJICAgRm9yIGFkLWhvYyBtb2RlLCBpdCB1c2VzIHR5cGUgMCBvbmx5LiAqLworCXNjYW4uc2Nhbl90eXBlID0gcHJpdi0+c2Nhbl9tb2RlOworCisJLyogSU5GTzogRm9yIHByb2JlX2RlbGF5LCBub3QgbXVsdGlwbHlpbmcgYnkgMTAyNCBhcyB0aGlzIHdpbGwgYmUKKwkgICBzbGlnaHRseSBsZXNzIHRoYW4gbWluX2NoYW5uZWxfdGltZQorCSAgIChwZXIgc3BlYzogcHJvYmUgZGVsYXkgPCBtaW4uIGNoYW5uZWwgdGltZSkgKi8KKwlzY2FuLm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lKTsKKwlzY2FuLm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21heF90aW1lKTsKKwlzY2FuLnByb2JlX2RlbGF5ID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSAqIDEwMDApOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCS8qIG90aGVyIHZhbHVlcyBhcmUgc2V0IHRvIDAgZm9yIHR5cGUgMCAqLworCisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IHN0YXJ0X3NjYW4gKHVzZV9lc3NpZCA9ICVkLCBpbnRsID0gJWQsICIKKwkJICJjaGFubmVsID0gJWQsIHByb2JlX2RlbGF5ID0gJWQsIHNjYW5fbWluX3RpbWUgPSAlZCwgIgorCQkgInNjYW5fbWF4X3RpbWUgPSAlZCkiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCB1c2VfZXNzaWQsCisJCSBzY2FuLmludGVybmF0aW9uYWxfc2Nhbiwgc2Nhbi5jaGFubmVsLAorCQkgbGUxNl90b19jcHUoc2Nhbi5wcm9iZV9kZWxheSksCisJCSBsZTE2X3RvX2NwdShzY2FuLm1pbl9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUoc2Nhbi5tYXhfY2hhbm5lbF90aW1lKSk7CisKKwlyZXR1cm4gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TQ0FOLCAmc2Nhbiwgc2l6ZW9mKHNjYW4pKTsKK30KKworLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworc3RhdGljIGludCBhdDc2X3N0YXJ0X21vbml0b3Ioc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiBzY2FuOworCWludCByZXQ7CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisKKwlzY2FuLmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX1BBU1NJVkU7CisJc2Nhbi5pbnRlcm5hdGlvbmFsX3NjYW4gPSAwOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TQ0FOLCAmc2Nhbiwgc2l6ZW9mKHNjYW4pKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X3N0YXJ0X2lic3Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyBic3M7CisJaW50IHJldDsKKworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19PV05fSUJTUyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfT1dOX0lCU1MpCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1zZXQoJmJzcywgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9pYnNzKSk7CisJbWVtc2V0KGJzcy5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweShic3MuZXNzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJYnNzLmVzc2lkX3NpemUgPSBwcml2LT5lc3NpZF9zaXplOworCWJzcy5ic3NfdHlwZSA9IEFESE9DX01PREU7CisJYnNzLmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TVEFSVF9JQlNTLCAmYnNzLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2lic3MpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzdGFydF9pYnNzIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX1NUQVJUX0lCU1MpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzdGFydF9pYnNzIGZhaWxlZCB0byBjb21wbGV0ZSwgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYXQ3Nl9nZXRfY3VycmVudF9ic3NpZChwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfZ2V0X2N1cnJlbnRfY2hhbm5lbChwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIG5vdCBzdXJlIHdoYXQgdGhpcyBpcyBnb29kIGZvciA/Pz8gKi8KKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX01HTVQ7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfbWdtdCwgaWJzc19jaGFuZ2UpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gMDsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoaWJzcyBjaGFuZ2Ugb2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRkZXYpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPm5ldGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlcXVlc3QgY2FyZCB0byBqb2luIEJTUyBpbiBtYW5hZ2VkIG9yIGFkLWhvYyBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfam9pbl9ic3Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJc3RydWN0IGF0NzZfcmVxX2pvaW4gam9pbjsKKworCUJVR19PTighcHRyKTsKKworCW1lbXNldCgmam9pbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9qb2luKSk7CisJbWVtY3B5KGpvaW4uYnNzaWQsIHB0ci0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkoam9pbi5lc3NpZCwgcHRyLT5zc2lkLCBwdHItPnNzaWRfbGVuKTsKKwlqb2luLmVzc2lkX3NpemUgPSBwdHItPnNzaWRfbGVuOworCWpvaW4uYnNzX3R5cGUgPSAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DID8gMSA6IDIpOworCWpvaW4uY2hhbm5lbCA9IHB0ci0+Y2hhbm5lbDsKKwlqb2luLnRpbWVvdXQgPSBjcHVfdG9fbGUxNigyMDAwKTsKKworCWF0NzZfZGJnKERCR19QUk9HUkVTUywKKwkJICIlcyBqb2luIGFkZHIgJXMgc3NpZCAlcyB0eXBlICVkIGNoICVkIHRpbWVvdXQgJWQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKGpvaW4uYnNzaWQpLCBqb2luLmVzc2lkLAorCQkgam9pbi5ic3NfdHlwZSwgam9pbi5jaGFubmVsLCBsZTE2X3RvX2NwdShqb2luLnRpbWVvdXQpKTsKKwlyZXR1cm4gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9KT0lOLCAmam9pbiwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworfQorCisvKiBDYWxjdWxhdGUgcGFkZGluZyBmcm9tIHR4YnVmLT53bGVuZ3RoICh3aGljaCBleGNsdWRlcyB0aGUgVVNCIFRYIGhlYWRlciksCisgICBsaWtlbHkgdG8gY29tcGVuc2F0ZSBhIGZsYXcgaW4gdGhlIEFUNzZDNTAzQSBVU0IgcGFydCAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfY2FsY19wYWRkaW5nKGludCB3bGVuKQoreworCS8qIGFkZCB0aGUgVVNCIFRYIGhlYWRlciAqLworCXdsZW4gKz0gQVQ3Nl9UWF9IRFJMRU47CisKKwl3bGVuID0gd2xlbiAlIDY0OworCisJaWYgKHdsZW4gPCA1MCkKKwkJcmV0dXJuIDUwIC0gd2xlbjsKKworCWlmICh3bGVuID49IDYxKQorCQlyZXR1cm4gNjQgKyA1MCAtIHdsZW47CisKKwlyZXR1cm4gMDsKK30KKworLyogV2UgYXJlIGRvaW5nIGEgbG90IG9mIHRoaW5ncyBoZXJlIGluIGFuIGludGVycnVwdC4gTmVlZAorICAgYSBiaCBoYW5kbGVyIChXYXRjaGluZyBUViB3aXRoIGEgVFYgY2FyZCBpcyBwcm9iYWJseQorICAgYSBnb29kIHRlc3Q6IGlmIHlvdSBzZWUgZmxpY2tlcnMsIHdlIGFyZSBkb2luZyB0b28gbXVjaC4KKyAgIEN1cnJlbnRseSBJIGRvIHNlZSBmbGlja2Vycy4uLiBldmVuIHdpdGggb3VyIHRhc2tsZXQgOi0oICkKKyAgIE1heWJlIGJlY2F1c2UgdGhlIGJ0dHYgZHJpdmVyIGFuZCB1c2ItdWhjaSB1c2UgdGhlIHNhbWUgaW50ZXJydXB0CisqLworLyogT3IgbWF5YmUgYmVjYXVzZSBvdXIgQkggaGFuZGxlciBpcyBwcmVlbXB0aW5nIGJ0dHYncyBCSCBoYW5kbGVyLi4gQkhzIGRvbid0CisgKiBzb2x2ZSBldmVyeXRoaW5nLi4gKGFsZXgpICovCitzdGF0aWMgdm9pZCBhdDc2X3J4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gdXJiLT5jb250ZXh0OworCisJcHJpdi0+cnhfdGFza2xldC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdXJiOworCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKm1nbXRfYnVmOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlzdGF0cy0+dHhfcGFja2V0cysrOworCQlicmVhazsKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJLyogdXJiIGhhcyBiZWVuIHVubGlua2VkICovCisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXMgLSBub256ZXJvIHR4IHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCXN0YXRzLT50eF9lcnJvcnMrKzsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKKwltZ210X2J1ZiA9IHByaXYtPm5leHRfbWdtdF9idWxrOworCXByaXYtPm5leHRfbWdtdF9idWxrID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoIW1nbXRfYnVmKSB7CisJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJcmV0dXJuOworCX0KKworCS8qIHdlIGRvbid0IGNvcHkgdGhlIHBhZGRpbmcgYnl0ZXMsIGJ1dCBhZGQgdGhlbQorCSAgIHRvIHRoZSBsZW5ndGggKi8KKwltZW1jcHkocHJpdi0+YnVsa19vdXRfYnVmZmVyLCBtZ210X2J1ZiwKKwkgICAgICAgbGUxNl90b19jcHUobWdtdF9idWYtPndsZW5ndGgpICsgQVQ3Nl9UWF9IRFJMRU4pOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnR4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+dHhfcGlwZSwKKwkJCSAgcHJpdi0+YnVsa19vdXRfYnVmZmVyLAorCQkJICBsZTE2X3RvX2NwdShtZ210X2J1Zi0+d2xlbmd0aCkgKyBtZ210X2J1Zi0+cGFkZGluZyArCisJCQkgIEFUNzZfVFhfSERSTEVOLCBhdDc2X3R4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIHR4IHN1Ym1pdCB1cmI6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCisJa2ZyZWUobWdtdF9idWYpOworfQorCisvKiBTZW5kIGEgbWFuYWdlbWVudCBmcmFtZSBvbiBidWxrLW91dC4gIHR4YnVmLT53bGVuZ3RoIG11c3QgYmUgc2V0ICovCitzdGF0aWMgaW50IGF0NzZfdHhfbWdtdChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4YnVmKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwlpbnQgdXJiX3N0YXR1czsKKwl2b2lkICpvbGRidWYgPSBOVUxMOworCisJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsJLyogc3RvcCBuZXRkZXYgd2F0Y2hkb2cgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CS8qIHN0b3AgdHggZGF0YSBwYWNrZXRzICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworCisJdXJiX3N0YXR1cyA9IHByaXYtPnR4X3VyYi0+c3RhdHVzOworCWlmICh1cmJfc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkvKiBjYW5ub3QgdHJhbnNtaXQgbm93LCBwdXQgaW4gdGhlIHF1ZXVlICovCisJCW9sZGJ1ZiA9IHByaXYtPm5leHRfbWdtdF9idWxrOworCQlwcml2LT5uZXh0X21nbXRfYnVsayA9IHR4YnVmOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAob2xkYnVmKSB7CisJCS8qIGEgZGF0YS9tZ210IHR4IGlzIGFscmVhZHkgcGVuZGluZyBpbiB0aGUgVVJCIC0KKwkJICAgaWYgdGhpcyBpcyBubyBlcnJvciBpbiBzb21lIHNpdHVhdGlvbnMgd2UgbXVzdAorCQkgICBpbXBsZW1lbnQgYSBxdWV1ZSBvciBzaWxlbnRseSBtb2RpZnkgdGhlIG9sZCBtc2cgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVtb3ZlZCBwZW5kaW5nIG1nbXQgYnVmZmVyICVzXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBoZXgyc3RyKG9sZGJ1ZiwgNjQpKTsKKwkJa2ZyZWUob2xkYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHhidWYtPnR4X3JhdGUgPSBUWF9SQVRFXzFNQklUOworCXR4YnVmLT5wYWRkaW5nID0gYXQ3Nl9jYWxjX3BhZGRpbmcobGUxNl90b19jcHUodHhidWYtPndsZW5ndGgpKTsKKwltZW1zZXQodHhidWYtPnJlc2VydmVkLCAwLCBzaXplb2YodHhidWYtPnJlc2VydmVkKSk7CisKKwlpZiAocHJpdi0+bmV4dF9tZ210X2J1bGspCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVSQiBzdGF0dXMgJWQsIGJ1dCBtZ210IGlzIHBlbmRpbmdcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHVyYl9zdGF0dXMpOworCisJYXQ3Nl9kYmcoREJHX1RYX01HTVQsCisJCSAiJXM6IHR4IG1nbXQ6IHdsZW4gJWQgdHhfcmF0ZSAlZCBwYWQgJWQgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZTE2X3RvX2NwdSh0eGJ1Zi0+d2xlbmd0aCksCisJCSB0eGJ1Zi0+dHhfcmF0ZSwgdHhidWYtPnBhZGRpbmcsCisJCSBoZXgyc3RyKHR4YnVmLT5wYWNrZXQsIGxlMTZfdG9fY3B1KHR4YnVmLT53bGVuZ3RoKSkpOworCisJLyogdHhidWYgd2FzIG5vdCBjb25zdW1lZCBhYm92ZSAtPiBzZW5kIG1nbXQgbXNnIGltbWVkaWF0ZWx5ICovCisJbWVtY3B5KHByaXYtPmJ1bGtfb3V0X2J1ZmZlciwgdHhidWYsCisJICAgICAgIGxlMTZfdG9fY3B1KHR4YnVmLT53bGVuZ3RoKSArIEFUNzZfVFhfSERSTEVOKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT50eF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnR4X3BpcGUsCisJCQkgIHByaXYtPmJ1bGtfb3V0X2J1ZmZlciwKKwkJCSAgbGUxNl90b19jcHUodHhidWYtPndsZW5ndGgpICsgdHhidWYtPnBhZGRpbmcgKworCQkJICBBVDc2X1RYX0hEUkxFTiwgYXQ3Nl90eF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCWtmcmVlKHR4YnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEdvIHRvIHRoZSBuZXh0IGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXh0X2llKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICoqaWUpCit7CisJKmllID0gKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICopKCYoKmllKS0+ZGF0YVsoKmllKS0+bGVuXSk7Cit9CisKKy8qIENoYWxsZW5nZSBpcyB0aGUgY2hhbGxlbmdlIHN0cmluZyAoaW4gVExWIGZvcm1hdCkKKyAgIHdlIGdvdCB3aXRoIHNlcV9uciAyIGZvciBzaGFyZWQgc2VjcmV0IGF1dGhlbnRpY2F0aW9uIG9ubHkgYW5kCisgICBzZW5kIGluIHNlcV9uciAzIFdFUCBlbmNyeXB0ZWQgdG8gcHJvdmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBXRVAga2V5OworICAgb3RoZXJ3aXNlIGl0IGlzIE5VTEwgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9hdXRoX3JlcShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKmJzcywKKwkJCSBpbnQgc2VxX25yLCBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqY2hhbGxlbmdlKQoreworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfYXV0aCAqcmVxOworCWludCBidWZfbGVuID0gKHNlcV9uciAhPSAzID8gQVVUSF9GUkFNRV9TSVpFIDoKKwkJICAgICAgIEFVVEhfRlJBTUVfU0laRSArIDEgKyAxICsgY2hhbGxlbmdlLT5sZW4pOworCisJQlVHX09OKCFic3MpOworCUJVR19PTihzZXFfbnIgPT0gMyAmJiAhY2hhbGxlbmdlKTsKKwl0eF9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9sZW4gKyBNQVhfUEFERElOR19TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXR4X2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEgPSAoc3RydWN0IGllZWU4MDIxMV9hdXRoICopdHhfYnVmZmVyLT5wYWNrZXQ7CisJbWdtdCA9ICZyZXEtPmhlYWRlcjsKKworCS8qIG1ha2Ugd2lyZWxlc3MgaGVhZGVyICovCisJLyogZmlyc3QgYXV0aCBtc2cgaXMgbm90IGVuY3J5cHRlZCwgb25seSB0aGUgc2Vjb25kIChzZXFfbnIgPT0gMykgKi8KKwltZ210LT5mcmFtZV9jdGwgPQorCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9BVVRIIHwKKwkJCShzZXFfbnIgPT0gMyA/IElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCA6IDApKTsKKworCW1nbXQtPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoMHg4MDAwKTsKKwltZW1jcHkobWdtdC0+YWRkcjEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YWRkcjIsIHByaXYtPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YWRkcjMsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoMCk7CisKKwlyZXEtPmFsZ29yaXRobSA9IGNwdV90b19sZTE2KHByaXYtPmF1dGhfbW9kZSk7CisJcmVxLT50cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHNlcV9ucik7CisJcmVxLT5zdGF0dXMgPSBjcHVfdG9fbGUxNigwKTsKKworCWlmIChzZXFfbnIgPT0gMykKKwkJbWVtY3B5KHJlcS0+aW5mb19lbGVtZW50LCBjaGFsbGVuZ2UsIDEgKyAxICsgY2hhbGxlbmdlLT5sZW4pOworCisJLyogaW5pdC4gYXQ3Nl9wcml2IHR4IGhlYWRlciAqLworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KGJ1Zl9sZW4gLSBBVDc2X1RYX0hEUkxFTik7CisJYXQ3Nl9kYmcoREJHX1RYX01HTVQsICIlczogQXV0aFJlcSBic3NpZCAlcyBhbGcgJWQgc2VxX25yICVkIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihtZ210LT5hZGRyMyksCisJCSBsZTE2X3RvX2NwdShyZXEtPmFsZ29yaXRobSksIGxlMTZfdG9fY3B1KHJlcS0+dHJhbnNhY3Rpb24pKTsKKwlpZiAoc2VxX25yID09IDMpCisJCWF0NzZfZGJnKERCR19UWF9NR01ULCAiJXM6IEF1dGhSZXEgY2hhbGxlbmdlOiAlcyAuLi4iLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaGV4MnN0cihyZXEtPmluZm9fZWxlbWVudCwgMTgpKTsKKworCS8qIGVpdGhlciBzZW5kIGltbWVkaWF0ZWx5IChpZiBubyBkYXRhIHR4IGlzIHBlbmRpbmcKKwkgICBvciBwdXQgaXQgaW4gcGVuZGluZyBsaXN0ICovCisJcmV0dXJuIGF0NzZfdHhfbWdtdChwcml2LCB0eF9idWZmZXIpOworfQorCitzdGF0aWMgaW50IGF0NzZfYXNzb2NfcmVxKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqYnNzKQoreworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppZTsKKwljaGFyICplc3NpZDsKKwlpbnQgZXNzaWRfbGVuOworCXUxNiBjYXBhOworCisJQlVHX09OKCFic3MpOworCisJdHhfYnVmZmVyID0ga21hbGxvYyhBU1NPQ1JFUV9NQVhfU0laRSArIE1BWF9QQURESU5HX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmICghdHhfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcSA9IChzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgKil0eF9idWZmZXItPnBhY2tldDsKKwltZ210ID0gJnJlcS0+aGVhZGVyOworCWllID0gcmVxLT5pbmZvX2VsZW1lbnQ7CisKKwkvKiBtYWtlIHdpcmVsZXNzIGhlYWRlciAqLworCW1nbXQtPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKKworCW1nbXQtPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoMHg4MDAwKTsKKwltZW1jcHkobWdtdC0+YWRkcjEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YWRkcjIsIHByaXYtPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YWRkcjMsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoMCk7CisKKwkvKiB3ZSBtdXN0IHNldCB0aGUgUHJpdmFjeSBiaXQgaW4gdGhlIGNhcGFiaWxpdGllcyB0byBhc3N1cmUgYW4KKwkgICBBZ2VyZS1iYXNlZCBBUCB3aXRoIG9wdGlvbmFsIFdFUCB0cmFuc21pdHMgZW5jcnlwdGVkIGZyYW1lcworCSAgIHRvIHVzLiAgQVAgb25seSBzZXQgdGhlIFByaXZhY3kgYml0IGluIHRoZWlyIGNhcGFiaWxpdGllcworCSAgIGlmIFdFUCBpcyBtYW5kYXRvcnkgaW4gdGhlIEJTUyEgKi8KKwljYXBhID0gYnNzLT5jYXBhOworCWlmIChwcml2LT53ZXBfZW5hYmxlZCkKKwkJY2FwYSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwlpZiAocHJpdi0+cHJlYW1ibGVfdHlwZSAhPSBQUkVBTUJMRV9UWVBFX0xPTkcpCisJCWNhcGEgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOworCXJlcS0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KGNhcGEpOworCisJcmVxLT5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNigyICogYnNzLT5iZWFjb25faW50ZXJ2YWwpOworCisJLyogd3JpdGUgVExWIGRhdGEgZWxlbWVudHMgKi8KKworCWllLT5pZCA9IE1GSUVfVFlQRV9TU0lEOworCWllLT5sZW4gPSBic3MtPnNzaWRfbGVuOworCW1lbWNweShpZS0+ZGF0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKTsKKwluZXh0X2llKCZpZSk7CisKKwlpZS0+aWQgPSBNRklFX1RZUEVfUkFURVM7CisJaWUtPmxlbiA9IHNpemVvZihod19yYXRlcyk7CisJbWVtY3B5KGllLT5kYXRhLCBod19yYXRlcywgc2l6ZW9mKGh3X3JhdGVzKSk7CisJbmV4dF9pZSgmaWUpOwkJLyogaWUgcG9pbnRzIGJlaGluZCB0aGUgc3VwcF9yYXRlcyBmaWVsZCAqLworCisJLyogaW5pdC4gYXQ3Nl9wcml2IHR4IGhlYWRlciAqLworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KCh1OCAqKWllIC0gKHU4ICopbWdtdCk7CisKKwlpZSA9IHJlcS0+aW5mb19lbGVtZW50OworCWVzc2lkID0gaWUtPmRhdGE7CisJZXNzaWRfbGVuID0gbWluX3QoaW50LCBJV19FU1NJRF9NQVhfU0laRSwgaWUtPmxlbik7CisKKwluZXh0X2llKCZpZSk7CQkvKiBwb2ludHMgdG8gSUUgb2YgcmF0ZXMgbm93ICovCisJYXQ3Nl9kYmcoREJHX1RYX01HTVQsCisJCSAiJXM6IEFzc29jUmVxIGJzc2lkICVzIGNhcGEgMHglMDR4IHNzaWQgJS4qcyByYXRlcyAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIobWdtdC0+YWRkcjMpLAorCQkgbGUxNl90b19jcHUocmVxLT5jYXBhYmlsaXR5KSwgZXNzaWRfbGVuLCBlc3NpZCwKKwkJIGhleDJzdHIoaWUtPmRhdGEsIGllLT5sZW4pKTsKKworCS8qIGVpdGhlciBzZW5kIGltbWVkaWF0ZWx5IChpZiBubyBkYXRhIHR4IGlzIHBlbmRpbmcKKwkgICBvciBwdXQgaXQgaW4gcGVuZGluZyBsaXN0ICovCisJcmV0dXJuIGF0NzZfdHhfbWdtdChwcml2LCB0eF9idWZmZXIpOworfQorCisvKiBXZSBnb3QgdG8gY2hlY2sgdGhlIGJzc19saXN0IGZvciBvbGQgZW50cmllcyAqLworc3RhdGljIHZvaWQgYXQ3Nl9ic3NfbGlzdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcGFyKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSAoc3RydWN0IGF0NzZfcHJpdiAqKXBhcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHIsICpucHRyOworCXN0cnVjdCBic3NfaW5mbyAqcHRyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobHB0ciwgbnB0ciwgJnByaXYtPmJzc19saXN0KSB7CisKKwkJcHRyID0gbGlzdF9lbnRyeShscHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCisJCWlmIChwdHIgIT0gcHJpdi0+Y3Vycl9ic3MKKwkJICAgICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgcHRyLT5sYXN0X3J4ICsgQlNTX0xJU1RfVElNRU9VVCkpIHsKKwkJCWF0NzZfZGJnKERCR19CU1NfVEFCTEVfUk0sCisJCQkJICIlczogYnNzX2xpc3Q6IHJlbW92aW5nIG9sZCBCU1MgJXMgY2ggJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIocHRyLT5ic3NpZCksCisJCQkJIHB0ci0+Y2hhbm5lbCk7CisJCQlsaXN0X2RlbCgmcHRyLT5saXN0KTsKKwkJCWtmcmVlKHB0cik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKwkvKiByZXN0YXJ0IHRoZSB0aW1lciAqLworCW1vZF90aW1lcigmcHJpdi0+YnNzX2xpc3RfdGltZXIsIGppZmZpZXMgKyBCU1NfTElTVF9USU1FT1VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0NzZfc2V0X21hY19zdGF0ZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCSAgICAgIGVudW0gbWFjX3N0YXRlIG1hY19zdGF0ZSkKK3sKKwlhdDc2X2RiZyhEQkdfTUFDX1NUQVRFLCAiJXMgc3RhdGU6ICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbWFjX3N0YXRlc1ttYWNfc3RhdGVdKTsKKwlwcml2LT5tYWNfc3RhdGUgPSBtYWNfc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9ic3NfdGFibGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYnNzX2luZm8gKnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCWF0NzZfZGJnKERCR19CU1NfVEFCTEUsICIlcyBCU1MgdGFibGUgKGN1cnI9JXApOiIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIHByaXYtPmN1cnJfYnNzKTsKKworCWxpc3RfZm9yX2VhY2gobHB0ciwgJnByaXYtPmJzc19saXN0KSB7CisJCXB0ciA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KTsKKwkJYXQ3Nl9kYmcoREJHX0JTU19UQUJMRSwgIjB4JXA6IGJzc2lkICVzIGNoYW5uZWwgJWQgc3NpZCAlLipzICIKKwkJCSAiKCVzKSBjYXBhIDB4JTA0eCByYXRlcyAlcyByc3NpICVkIGxpbmsgJWQgbm9pc2UgJWQiLAorCQkJIHB0ciwgbWFjMnN0cihwdHItPmJzc2lkKSwgcHRyLT5jaGFubmVsLCBwdHItPnNzaWRfbGVuLAorCQkJIHB0ci0+c3NpZCwgaGV4MnN0cihwdHItPnNzaWQsIHB0ci0+c3NpZF9sZW4pLAorCQkJIHB0ci0+Y2FwYSwgaGV4MnN0cihwdHItPnJhdGVzLCBwdHItPnJhdGVzX2xlbiksCisJCQkgcHRyLT5yc3NpLCBwdHItPmxpbmtfcXVhbCwgcHRyLT5ub2lzZV9sZXZlbCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENhbGxlZCB1cG9uIHN1Y2Nlc3NmdWwgYXNzb2NpYXRpb24gdG8gbWFyayBpbnRlcmZhY2UgYXMgY29ubmVjdGVkICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfYXNzb2NfZG9uZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX2Fzc29jX2RvbmUpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQyk7CisJV0FSTl9PTighcHJpdi0+Y3Vycl9ic3MpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DIHx8ICFwcml2LT5jdXJyX2JzcykKKwkJZ290byBleGl0OworCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgeworCQlpZiAocHJpdi0+cG1fbW9kZSAhPSBBVDc2X1BNX09GRikgeworCQkJLyogY2FsY3VsYXRlIHRoZSBsaXN0ZW4gaW50ZXJ2YWwgaW4gdW5pdHMgb2YKKwkJCSAgIGJlYWNvbiBpbnRlcnZhbHMgb2YgdGhlIGN1cnJfYnNzICovCisJCQl1MzIgcG1fcGVyaW9kX2JlYWNvbiA9IChwcml2LT5wbV9wZXJpb2QgPj4gMTApIC8KKwkJCSAgICBwcml2LT5jdXJyX2Jzcy0+YmVhY29uX2ludGVydmFsOworCisJCQlwbV9wZXJpb2RfYmVhY29uID0gbWF4KHBtX3BlcmlvZF9iZWFjb24sIDJ1KTsKKwkJCXBtX3BlcmlvZF9iZWFjb24gPSBtaW4ocG1fcGVyaW9kX2JlYWNvbiwgMHhmZmZmdSk7CisKKwkJCWF0NzZfZGJnKERCR19QTSwKKwkJCQkgIiVzOiBwbV9tb2RlICVkIGFzc29jIGlkIDB4JXggbGlzdGVuIGludCAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHJpdi0+cG1fbW9kZSwKKwkJCQkgcHJpdi0+YXNzb2NfaWQsIHBtX3BlcmlvZF9iZWFjb24pOworCisJCQlhdDc2X3NldF9hc3NvY2lkKHByaXYsIHByaXYtPmFzc29jX2lkKTsKKwkJCWF0NzZfc2V0X2xpc3Rlbl9pbnRlcnZhbChwcml2LCAodTE2KXBtX3BlcmlvZF9iZWFjb24pOworCQl9CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uLCBCRUFDT05fVElNRU9VVCk7CisJfQorCWF0NzZfc2V0X3BtX21vZGUocHJpdik7CisKKwluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfQ09OTkVDVEVEKTsKKwlhdDc2X2l3ZXZlbnRfYnNzX2Nvbm5lY3QocHJpdi0+bmV0ZGV2LCBwcml2LT5jdXJyX2Jzcy0+YnNzaWQpOworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiBjb25uZWN0ZWQgdG8gQlNTSUQgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogV2Ugb25seSBzdG9yZSB0aGUgbmV3IG1hYyBhZGRyZXNzIGluIG5ldGRldiBzdHJ1Y3QsCisgICBpdCBnZXRzIHNldCB3aGVuIHRoZSBuZXRkZXYgaXMgb3BlbmVkLiAqLworc3RhdGljIGludCBhdDc2X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkciAqbWFjID0gYWRkcjsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgbWFjLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXQ3Nl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCitzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmF0NzZfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICJSRVRVUk4gcXVhbCAlZCBsZXZlbCAlZCBub2lzZSAlZCB1cGRhdGVkICVkIiwKKwkJIHByaXYtPndzdGF0cy5xdWFsLnF1YWwsIHByaXYtPndzdGF0cy5xdWFsLmxldmVsLAorCQkgcHJpdi0+d3N0YXRzLnF1YWwubm9pc2UsIHByaXYtPndzdGF0cy5xdWFsLnVwZGF0ZWQpOworCisJcmV0dXJuICZwcml2LT53c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwcm9taXNjOworCisJcHJvbWlzYyA9ICgobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAhPSAwKTsKKwlpZiAocHJvbWlzYyAhPSBwcml2LT5wcm9taXNjKSB7CisJCS8qIFRoaXMgZ2V0cyBjYWxsZWQgaW4gaW50ZXJydXB0LCBtdXN0IHJlc2NoZWR1bGUgKi8KKwkJcHJpdi0+cHJvbWlzYyA9IHByb21pc2M7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfc2V0X3Byb21pc2MpOworCX0KK30KKworLyogU3RvcCBhbGwgbmV0d29yayBhY3Rpdml0eSwgZmx1c2ggYWxsIHBlbmRpbmcgdGFza3MgKi8KK3N0YXRpYyB2b2lkIGF0NzZfcXVpZXNjZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSU5JVCk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2Nhbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfcmVzdGFydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworCWtmcmVlKHByaXYtPm5leHRfbWdtdF9idWxrKTsKKwlwcml2LT5uZXh0X21nbXRfYnVsayA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXQ3Nl9wcml2IGltcGxlbWVudGF0aW9ucyBvZiBpd19oYW5kbGVyIGZ1bmN0aW9uczoKKyAqLworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdm9pZCAqbnVsbCwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlcyAlczogcmVzdGFydGluZyB0aGUgZGV2aWNlIiwgbmV0ZGV2LT5uYW1lLAorCQkgX19mdW5jX18pOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfSU5JVCkKKwkJYXQ3Nl9xdWllc2NlKHByaXYpOworCisJLyogV2FpdCBoYWxmIHNlY29uZCBiZWZvcmUgdGhlIHJlc3RhcnQgdG8gcHJvY2VzcyBzdWJzZXF1ZW50CisJICogcmVxdWVzdHMgZnJvbSB0aGUgc2FtZSBpd2NvbmZpZyBpbiBhIHNpbmdsZSByZXN0YXJ0ICovCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19yZXN0YXJ0LCBIWiAvIDIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7CisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdOQU1FIC0gbmFtZSAlcyIsIG5ldGRldi0+bmFtZSwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgY2hhbiA9IC0xOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXRlJFUSAtIGZyZXEubSAlZCBmcmVxLmUgJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCBmcmVxLT5tLCBmcmVxLT5lKTsKKworCWlmICgoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSkKKwkJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLworCQljaGFuID0gZnJlcS0+bTsKKwllbHNlIHsKKwkJLyogU2V0dGluZyBieSBmcmVxdWVuY3kgLSBzZWFyY2ggdGhlIHRhYmxlICovCisJCWludCBtdWx0ID0gMTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8ICg2IC0gZnJlcS0+ZSk7IGkrKykKKwkJCW11bHQgKj0gMTA7CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CisJCQlpZiAoZnJlcS0+bSA9PSAoY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiBtdWx0KSkKKwkJCQljaGFuID0gaSArIDE7CisJCX0KKwl9CisKKwlpZiAoY2hhbiA8IDEgfHwgIXByaXYtPmRvbWFpbikKKwkJLyogbm9uLXBvc2l0aXZlIGNoYW5uZWxzIGFyZSBpbnZhbGlkCisJCSAqIHdlIG5lZWQgYSBkb21haW4gaW5mbyB0byBzZXQgdGhlIGNoYW5uZWwKKwkJICogZWl0aGVyIHRoYXQgb3IgYW4gaW52YWxpZCBmcmVxdWVuY3kgd2FzCisJCSAqIHByb3ZpZGVkIGJ5IHRoZSB1c2VyICovCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoIShwcml2LT5kb21haW4tPmNoYW5uZWxfbWFwICYgKDEgPDwgKGNoYW4gLSAxKSkpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjaGFubmVsICVkIG5vdCBhbGxvd2VkIGZvciBkb21haW4gJXNcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGNoYW4sIHByaXYtPmRvbWFpbi0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJaWYgKHJldCA9PSAtRUlXQ09NTUlUKSB7CisJCXByaXYtPmNoYW5uZWwgPSBjaGFuOworCQlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0ZSRVEgLSBjaCAlZCIsIG5ldGRldi0+bmFtZSwKKwkJCSBjaGFuKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlmcmVxLT5tID0gcHJpdi0+Y2hhbm5lbDsKKwlmcmVxLT5lID0gMDsKKworCWlmIChwcml2LT5jaGFubmVsKQorCQlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0ZSRVEgLSBmcmVxICVsZCB4IDEwZSVkIiwKKwkJCSBuZXRkZXYtPm5hbWUsIGNoYW5uZWxfZnJlcXVlbmN5W3ByaXYtPmNoYW5uZWwgLSAxXSwgNik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0ZSRVEgLSBjaCAlZCIsIG5ldGRldi0+bmFtZSwKKwkJIHByaXYtPmNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXTU9ERSAtICVkIiwgbmV0ZGV2LT5uYW1lLCAqbW9kZSk7CisKKwlpZiAoKCptb2RlICE9IElXX01PREVfQURIT0MpICYmICgqbW9kZSAhPSBJV19NT0RFX0lORlJBKSAmJgorCSAgICAoKm1vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5pd19tb2RlID0gKm1vZGU7CisJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkKKwkJcHJpdi0+cG1fbW9kZSA9IEFUNzZfUE1fT0ZGOworCisJcmV0dXJuIC1FSVdDT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXTU9ERSAtICVkIiwgbmV0ZGV2LT5uYW1lLCAqbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwkvKiBpbnNwaXJlZCBieSBhdG1lbC5jICovCisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKKwlpbnQgaTsKKworCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCisJLyogVE9ETzogcmFuZ2UtPnRocm91Z2hwdXQgPSB4eHh4eHg7ICovCisKKwlyYW5nZS0+bWluX253aWQgPSAweDAwMDA7CisJcmFuZ2UtPm1heF9ud2lkID0gMHgwMDAwOworCisJLyogdGhpcyBkcml2ZXIgZG9lc24ndCBtYWludGFpbiBzZW5zaXRpdml0eSBpbmZvcm1hdGlvbiAqLworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDA7CisKKwlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxMDA7CisJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKKwlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKworCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7CisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gNTA7CisJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMDsKKwlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKworCXJhbmdlLT5iaXRyYXRlWzBdID0gMTAwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVsxXSA9IDIwMDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbMl0gPSA1NTAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzNdID0gMTEwMDAwMDA7CisJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDQ7CisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKworCXJhbmdlLT5taW5fZnJhZyA9IE1JTl9GUkFHX1RIUkVTSE9MRDsKKwlyYW5nZS0+bWF4X2ZyYWcgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisKKwlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9PTjsKKwlyYW5nZS0+cG1fY2FwYSA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX0FMTF9SOworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSBXRVBfU01BTExfS0VZX0xFTjsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IFdFUF9MQVJHRV9LRVlfTEVOOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gV0VQX0tFWVM7CisKKwkvKiBib3RoIFdMLTI0MFUgYW5kIExpbmtzeXMgV1VTQjExIHYyLjYgc3BlY2lmeSAxNSBkQm0gYXMgb3V0cHV0IHBvd2VyCisJICAgLSB0YWtlIHRoaXMgZm9yIGFsbCAoaWdub3JlIGFudGVubmEgZ2FpbnMpICovCisJcmFuZ2UtPnR4cG93ZXJbMF0gPSAxNTsKKwlyYW5nZS0+bnVtX3R4cG93ZXIgPSAxOworCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisKKwkvKiBzYW1lIGFzIHRoZSB2YWx1ZXMgdXNlZCBpbiBhdG1lbC5jICovCisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cl90aW1lX2ZsYWdzID0gMDsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMTsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OworCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJLyogdGVzdCBpZiBjaGFubmVsIG1hcCBiaXQgaXMgcmFpc2VkICovCisJCWlmIChwcml2LT5kb21haW4tPmNoYW5uZWxfbWFwICYgKDB4MSA8PCBpKSkgeworCQkJcmFuZ2UtPm51bV9mcmVxdWVuY3kgKz0gMTsKKworCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGkgKyAxOworCQkJcmFuZ2UtPmZyZXFbaV0ubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2ldICogMTAwMDAwOworCQkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CS8qIGZyZXEgKiAxMF4xICovCisJCX0KKwl9CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1JBTkdFIiwgbmV0ZGV2LT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfc3B5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAwOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdTUFkgLSBudW1iZXIgb2YgYWRkcmVzc2VzICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgZGF0YS0+bGVuZ3RoKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKwlyZXQgPSBpd19oYW5kbGVyX3NldF9zcHkocHJpdi0+bmV0ZGV2LCBpbmZvLCAodW5pb24gaXdyZXFfZGF0YSAqKWRhdGEsCisJCQkJIGV4dHJhKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9zcHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKwlyZXQgPSBpd19oYW5kbGVyX2dldF9zcHkocHJpdi0+bmV0ZGV2LCBpbmZvLAorCQkJCSAodW5pb24gaXdyZXFfZGF0YSAqKWRhdGEsIGV4dHJhKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXU1BZIC0gbnVtYmVyIG9mIGFkZHJlc3NlcyAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIGRhdGEtPmxlbmd0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfdGhyc3B5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1RIUlNQWSAtIG51bWJlciBvZiBhZGRyZXNzZXMgJWQpIiwKKwkJIG5ldGRldi0+bmFtZSwgZGF0YS0+bGVuZ3RoKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKwlyZXQgPSBpd19oYW5kbGVyX3NldF90aHJzcHkobmV0ZGV2LCBpbmZvLCAodW5pb24gaXdyZXFfZGF0YSAqKWRhdGEsCisJCQkJICAgIGV4dHJhKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF90aHJzcHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKwlyZXQgPSBpd19oYW5kbGVyX2dldF90aHJzcHkobmV0ZGV2LCBpbmZvLCAodW5pb24gaXdyZXFfZGF0YSAqKWRhdGEsCisJCQkJICAgIGV4dHJhKTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXVEhSU1BZIC0gbnVtYmVyIG9mIGFkZHJlc3NlcyAlZCkiLAorCQkgbmV0ZGV2LT5uYW1lLCBkYXRhLT5sZW5ndGgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXQVAgLSB3YXAvYnNzaWQgJXMiLCBuZXRkZXYtPm5hbWUsCisJCSBtYWMyc3RyKGFwX2FkZHItPnNhX2RhdGEpKTsKKworCS8qIGlmIHRoZSBpbmNvbWluZyBhZGRyZXNzID09IGZmOmZmOmZmOmZmOmZmOmZmLCB0aGUgdXNlciBoYXMKKwkgICBjaG9zZW4gYW55IG9yIGF1dG8gQVAgcHJlZmVyZW5jZSAqLworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKQorCSAgICB8fCBpc196ZXJvX2V0aGVyX2FkZHIoYXBfYWRkci0+c2FfZGF0YSkpCisJCXByaXYtPndhbnRlZF9ic3NpZF92YWxpZCA9IDA7CisJZWxzZSB7CisJCS8qIHVzZXIgd2FudHMgdG8gc2V0IGEgcHJlZmVycmVkIEFQIGFkZHJlc3MgKi8KKwkJcHJpdi0+d2FudGVkX2Jzc2lkX3ZhbGlkID0gMTsKKwkJbWVtY3B5KHByaXYtPndhbnRlZF9ic3NpZCwgYXBfYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCX0KKworCXJldHVybiAtRUlXQ09NTUlUOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdBUCAtIHdhcC9ic3NpZCAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIG1hYzJzdHIoYXBfYWRkci0+c2FfZGF0YSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAwOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdTQ0FOIiwgbmV0ZGV2LT5uYW1lKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm10eCkpCisJCXJldHVybiAtRUlOVFI7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlyZXQgPSAtRU5FVERPV047CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBqYWw6IHdlIGRvbid0IGFsbG93ICJpd2xpc3QgZXRoWCBzY2FuIiB3aGlsZSB3ZSBhcmUKKwkgICBpbiBtb25pdG9yIG1vZGUgKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogRGlzY2FyZCBvbGQgc2NhbiByZXN1bHRzICovCisJaWYgKChqaWZmaWVzIC0gcHJpdi0+bGFzdF9zY2FuKSA+ICgyMCAqIEhaKSkKKwkJcHJpdi0+c2Nhbl9zdGF0ZSA9IFNDQU5fSURMRTsKKwlwcml2LT5sYXN0X3NjYW4gPSBqaWZmaWVzOworCisJLyogSW5pdGlhdGUgYSBzY2FuIGNvbW1hbmQgKi8KKwlpZiAocHJpdi0+c2Nhbl9zdGF0ZSA9PSBTQ0FOX0lOX1BST0dSRVNTKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0OworCX0KKworCXByaXYtPnNjYW5fc3RhdGUgPSBTQ0FOX0lOX1BST0dSRVNTOworCisJYXQ3Nl9xdWllc2NlKHByaXYpOworCisJLyogVHJ5IHRvIGRvIHBhc3NpdmUgb3IgYWN0aXZlIHNjYW4gaWYgV0UgYXNrcyBhcy4gKi8KKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGgKKwkgICAgJiYgd3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpIHsKKwkJc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwkJaWYgKHJlcS0+c2Nhbl90eXBlID09IElXX1NDQU5fVFlQRV9QQVNTSVZFKQorCQkJcHJpdi0+c2Nhbl9tb2RlID0gU0NBTl9UWVBFX1BBU1NJVkU7CisJCWVsc2UgaWYgKHJlcS0+c2Nhbl90eXBlID09IElXX1NDQU5fVFlQRV9BQ1RJVkUpCisJCQlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCisJCS8qIFNhbml0eSBjaGVjayB2YWx1ZXM/ICovCisJCWlmIChyZXEtPm1pbl9jaGFubmVsX3RpbWUgPiAwKQorCQkJcHJpdi0+c2Nhbl9taW5fdGltZSA9IHJlcS0+bWluX2NoYW5uZWxfdGltZTsKKworCQlpZiAocmVxLT5tYXhfY2hhbm5lbF90aW1lID4gMCkKKwkJCXByaXYtPnNjYW5fbWF4X3RpbWUgPSByZXEtPm1heF9jaGFubmVsX3RpbWU7CisJfQorCisJLyogY2hhbmdlIHRvIHNjYW5uaW5nIHN0YXRlICovCisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19TQ0FOTklORyk7CisJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19zdGFydF9zY2FuKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHIsICpucHRyOworCXN0cnVjdCBic3NfaW5mbyAqY3Vycl9ic3M7CisJc3RydWN0IGl3X2V2ZW50ICppd2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXdfZXZlbnQpLCBHRlBfS0VSTkVMKTsKKwljaGFyICpjdXJyX3ZhbCwgKmN1cnJfcG9zID0gZXh0cmE7CisJaW50IGk7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1NDQU4iLCBuZXRkZXYtPm5hbWUpOworCisJaWYgKCFpd2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHByaXYtPnNjYW5fc3RhdGUgIT0gU0NBTl9DT01QTEVURUQpCisJCS8qIHNjYW4gbm90IHlldCBmaW5pc2hlZCAqLworCQlyZXR1cm4gLUVBR0FJTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxwdHIsIG5wdHIsICZwcml2LT5ic3NfbGlzdCkgeworCQljdXJyX2JzcyA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KTsKKworCQlpd2UtPmNtZCA9IFNJT0NHSVdBUDsKKwkJaXdlLT51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoaXdlLT51LmFwX2FkZHIuc2FfZGF0YSwgY3Vycl9ic3MtPmJzc2lkLCA2KTsKKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJSVdfRVZfQUREUl9MRU4pOworCisJCWl3ZS0+dS5kYXRhLmxlbmd0aCA9IGN1cnJfYnNzLT5zc2lkX2xlbjsKKwkJaXdlLT5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCWl3ZS0+dS5kYXRhLmZsYWdzID0gMTsKKworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQljdXJyX2Jzcy0+c3NpZCk7CisKKwkJaXdlLT5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaXdlLT51Lm1vZGUgPSAoY3Vycl9ic3MtPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykgPworCQkgICAgSVdfTU9ERV9BREhPQyA6CisJCSAgICAoY3Vycl9ic3MtPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKSA/CisJCSAgICBJV19NT0RFX01BU1RFUiA6IElXX01PREVfQVVUTzsKKwkJLyogSVdfTU9ERV9BVVRPID0gMCB3aGljaCBJIHRob3VnaHQgaXMKKwkJICogdGhlIG1vc3QgbG9naWNhbCB2YWx1ZSB0byByZXR1cm4gaW4gdGhpcyBjYXNlICovCisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCUlXX0VWX1VJTlRfTEVOKTsKKworCQlpd2UtPmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UtPnUuZnJlcS5tID0gY3Vycl9ic3MtPmNoYW5uZWw7CisJCWl3ZS0+dS5mcmVxLmUgPSAwOworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQlJV19FVl9GUkVRX0xFTik7CisKKwkJaXdlLT5jbWQgPSBTSU9DR0lXRU5DT0RFOworCQlpZiAoY3Vycl9ic3MtPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJCWl3ZS0+dS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJCWVsc2UKKwkJCWl3ZS0+dS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisJCWl3ZS0+dS5kYXRhLmxlbmd0aCA9IDA7CisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCU5VTEwpOworCisJCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KKwkJaXdlLT5jbWQgPSBJV0VWUVVBTDsKKwkJaXdlLT51LnF1YWwubm9pc2UgPSAwOworCQlpd2UtPnUucXVhbC51cGRhdGVkID0KKwkJICAgIElXX1FVQUxfTk9JU0VfSU5WQUxJRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJaXdlLT51LnF1YWwubGV2ZWwgPSAoY3Vycl9ic3MtPnJzc2kgKiAxMDAgLyA0Mik7CisJCWlmIChpd2UtPnUucXVhbC5sZXZlbCA+IDEwMCkKKwkJCWl3ZS0+dS5xdWFsLmxldmVsID0gMTAwOworCQlpZiAoYXQ3Nl9pc19pbnRlcnNpbChwcml2LT5ib2FyZF90eXBlKSkKKwkJCWl3ZS0+dS5xdWFsLnF1YWwgPSBjdXJyX2Jzcy0+bGlua19xdWFsOworCQllbHNlIHsKKwkJCWl3ZS0+dS5xdWFsLnF1YWwgPSAwOworCQkJaXdlLT51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwkJfQorCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCUlXX0VWX1FVQUxfTEVOKTsKKworCQkvKiBSYXRlOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZXMKKwkJICogYSBiaXQgbW9yZSBvZiBtYWdpYyAtIEplYW4gSUkgKi8KKwkJY3Vycl92YWwgPSBjdXJyX3BvcyArIElXX0VWX0xDUF9MRU47CisKKwkJaXdlLT5jbWQgPSBTSU9DR0lXUkFURTsKKwkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCWl3ZS0+dS5iaXRyYXRlLmZpeGVkID0gMDsKKwkJaXdlLT51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCQkvKiBNYXggOCB2YWx1ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGN1cnJfYnNzLT5yYXRlc19sZW47IGkrKykgeworCQkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKwkJCWl3ZS0+dS5iaXRyYXRlLnZhbHVlID0KKwkJCSAgICAoKGN1cnJfYnNzLT5yYXRlc1tpXSAmIDB4N2YpICogNTAwMDAwKTsKKwkJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJCWN1cnJfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3Vycl9wb3MsCisJCQkJCQkJY3Vycl92YWwsCisJCQkJCQkJZXh0cmEgKworCQkJCQkJCUlXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCQlJV19FVl9QQVJBTV9MRU4pOworCQl9CisKKwkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJCWlmICgoY3Vycl92YWwgLSBjdXJyX3BvcykgPiBJV19FVl9MQ1BfTEVOKQorCQkJY3Vycl9wb3MgPSBjdXJyX3ZhbDsKKworCQkvKiBtb3JlIGluZm9ybWF0aW9uIG1heSBiZSBzZW50IGJhY2sgdXNpbmcgSVdFQ1VTVE9NICovCisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJZGF0YS0+bGVuZ3RoID0gKGN1cnJfcG9zIC0gZXh0cmEpOworCWRhdGEtPmZsYWdzID0gMDsKKworCWtmcmVlKGl3ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0VTU0lEIC0gJXMiLCBuZXRkZXYtPm5hbWUsIGV4dHJhKTsKKworCWlmIChkYXRhLT5mbGFncykgeworCQltZW1jcHkocHJpdi0+ZXNzaWQsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOworCQlwcml2LT5lc3NpZF9zaXplID0gZGF0YS0+bGVuZ3RoOworCX0gZWxzZQorCQlwcml2LT5lc3NpZF9zaXplID0gMDsJLyogVXNlIGFueSBTU0lEICovCisKKwlyZXR1cm4gLUVJV0NPTU1JVDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwcml2LT5lc3NpZF9zaXplKSB7CisJCS8qIG5vdCB0aGUgQU5ZIHNzaWQgaW4gcHJpdi0+ZXNzaWQgKi8KKwkJZGF0YS0+ZmxhZ3MgPSAxOworCQlkYXRhLT5sZW5ndGggPSBwcml2LT5lc3NpZF9zaXplOworCQltZW1jcHkoZXh0cmEsIHByaXYtPmVzc2lkLCBkYXRhLT5sZW5ndGgpOworCX0gZWxzZSB7CisJCS8qIHRoZSBBTlkgc3NpZCB3YXMgc3BlY2lmaWVkICovCisJCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCAmJiBwcml2LT5jdXJyX2JzcykgeworCQkJLyogcmVwb3J0IHRoZSBTU0lEIHdlIGhhdmUgZm91bmQgKi8KKwkJCWRhdGEtPmZsYWdzID0gMTsKKwkJCWRhdGEtPmxlbmd0aCA9IHByaXYtPmN1cnJfYnNzLT5zc2lkX2xlbjsKKwkJCW1lbWNweShleHRyYSwgcHJpdi0+Y3Vycl9ic3MtPnNzaWQsIGRhdGEtPmxlbmd0aCk7CisJCX0gZWxzZSB7CisJCQkvKiByZXBvcnQgQU5ZIGJhY2sgKi8KKwkJCWRhdGEtPmZsYWdzID0gMDsKKwkJCWRhdGEtPmxlbmd0aCA9IDA7CisJCX0KKwl9CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0VTU0lEIC0gJS4qcyIsIG5ldGRldi0+bmFtZSwKKwkJIGRhdGEtPmxlbmd0aCwgZXh0cmEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqYml0cmF0ZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1JBVEUgLSAlZCIsIG5ldGRldi0+bmFtZSwKKwkJIGJpdHJhdGUtPnZhbHVlKTsKKworCXN3aXRjaCAoYml0cmF0ZS0+dmFsdWUpIHsKKwljYXNlIC0xOgorCQlwcml2LT50eHJhdGUgPSBUWF9SQVRFX0FVVE87CisJCWJyZWFrOwkJLyogYXV0byByYXRlICovCisJY2FzZSAxMDAwMDAwOgorCQlwcml2LT50eHJhdGUgPSBUWF9SQVRFXzFNQklUOworCQlicmVhazsKKwljYXNlIDIwMDAwMDA6CisJCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfMk1CSVQ7CisJCWJyZWFrOworCWNhc2UgNTUwMDAwMDoKKwkJcHJpdi0+dHhyYXRlID0gVFhfUkFURV81XzVNQklUOworCQlicmVhazsKKwljYXNlIDExMDAwMDAwOgorCQlwcml2LT50eHJhdGUgPSBUWF9SQVRFXzExTUJJVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmJpdHJhdGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwcml2LT50eHJhdGUpIHsKKwkJLyogcmV0dXJuIG1heCByYXRlIGlmIFJBVEVfQVVUTyAqLworCWNhc2UgVFhfUkFURV9BVVRPOgorCQliaXRyYXRlLT52YWx1ZSA9IDExMDAwMDAwOworCQlicmVhazsKKwljYXNlIFRYX1JBVEVfMU1CSVQ6CisJCWJpdHJhdGUtPnZhbHVlID0gMTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9SQVRFXzJNQklUOgorCQliaXRyYXRlLT52YWx1ZSA9IDIwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVFhfUkFURV81XzVNQklUOgorCQliaXRyYXRlLT52YWx1ZSA9IDU1MDAwMDA7CisJCWJyZWFrOworCWNhc2UgVFhfUkFURV8xMU1CSVQ6CisJCWJpdHJhdGUtPnZhbHVlID0gMTEwMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJYml0cmF0ZS0+Zml4ZWQgPSAocHJpdi0+dHhyYXRlICE9IFRYX1JBVEVfQVVUTyk7CisJYml0cmF0ZS0+ZGlzYWJsZWQgPSAwOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdSQVRFIC0gJWQiLCBuZXRkZXYtPm5hbWUsCisJCSBiaXRyYXRlLT52YWx1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisJaW50IHJ0aHIgPSBydHMtPnZhbHVlOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdSVFMgLSB2YWx1ZSAlZCBkaXNhYmxlZCAlcyIsCisJCSBuZXRkZXYtPm5hbWUsIHJ0cy0+dmFsdWUsIChydHMtPmRpc2FibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJaWYgKHJ0cy0+ZGlzYWJsZWQpCisJCXJ0aHIgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKworCWlmICgocnRociA8IDApIHx8IChydGhyID4gTUFYX1JUU19USFJFU0hPTEQpKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcHJpdi0+cnRzX3RocmVzaG9sZCA9IHJ0aHI7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlydHMtPnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaG9sZDsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPj0gTUFYX1JUU19USFJFU0hPTEQpOworCXJ0cy0+Zml4ZWQgPSAxOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdSVFMgLSB2YWx1ZSAlZCBkaXNhYmxlZCAlcyIsCisJCSBuZXRkZXYtPm5hbWUsIHJ0cy0+dmFsdWUsIChydHMtPmRpc2FibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisJaW50IGZ0aHIgPSBmcmFnLT52YWx1ZTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXRlJBRyAtIHZhbHVlICVkLCBkaXNhYmxlZCAlcyIsCisJCSBuZXRkZXYtPm5hbWUsIGZyYWctPnZhbHVlLAorCQkgKGZyYWctPmRpc2FibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJaWYgKGZyYWctPmRpc2FibGVkKQorCQlmdGhyID0gTUFYX0ZSQUdfVEhSRVNIT0xEOworCisJaWYgKChmdGhyIDwgTUlOX0ZSQUdfVEhSRVNIT0xEKSB8fCAoZnRociA+IE1BWF9GUkFHX1RIUkVTSE9MRCkpCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlwcml2LT5mcmFnX3RocmVzaG9sZCA9IGZ0aHIgJiB+MHgxOwkvKiBnZXQgYW4gZXZlbiB2YWx1ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWZyYWctPnZhbHVlID0gcHJpdi0+ZnJhZ190aHJlc2hvbGQ7CisJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPj0gTUFYX0ZSQUdfVEhSRVNIT0xEKTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0ZSQUcgLSB2YWx1ZSAlZCwgZGlzYWJsZWQgJXMiLAorCQkgbmV0ZGV2LT5uYW1lLCBmcmFnLT52YWx1ZSwKKwkJIChmcmFnLT5kaXNhYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfdHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnBvd2VyLCBjaGFyICpleHRyYSkKK3sKKwlwb3dlci0+dmFsdWUgPSAxNTsKKwlwb3dlci0+Zml4ZWQgPSAxOwkvKiBObyBwb3dlciBjb250cm9sICovCisJcG93ZXItPmRpc2FibGVkID0gMDsKKwlwb3dlci0+ZmxhZ3MgPSBJV19UWFBPV19EQk07CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1RYUE9XIC0gdHhwb3cgJWQgZEJtIiwgbmV0ZGV2LT5uYW1lLAorCQkgcG93ZXItPnZhbHVlKTsKKworCXJldHVybiAwOworfQorCisvKiBqYWw6IHNob3J0IHJldHJ5IGlzIGhhbmRsZWQgYnkgdGhlIGZpcm13YXJlIChhdCBsZWFzdCAwLjkwLngpLAorICAgd2hpbGUgbG9uZyByZXRyeSBpcyBub3QgKD8pICovCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJldHJ5LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXUkVUUlkgZGlzYWJsZWQgJWQgZmxhZ3MgMHgleCB2YWwgJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCByZXRyeS0+ZGlzYWJsZWQsIHJldHJ5LT5mbGFncywgcmV0cnktPnZhbHVlKTsKKworCWlmICghcmV0cnktPmRpc2FibGVkICYmIChyZXRyeS0+ZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpIHsKKwkJaWYgKChyZXRyeS0+ZmxhZ3MgJiBJV19SRVRSWV9NSU4pIHx8CisJCSAgICAhKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX01BWCkpCisJCQlwcml2LT5zaG9ydF9yZXRyeV9saW1pdCA9IHJldHJ5LT52YWx1ZTsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEFkYXB0ZWQgKHJpcHBlZCkgZnJvbSBhdG1lbC5jICovCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJldHJ5LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXUkVUUlkiLCBuZXRkZXYtPm5hbWUpOworCisJcmV0cnktPmRpc2FibGVkID0gMDsJLyogQ2FuJ3QgYmUgZGlzYWJsZWQgKi8KKwlyZXRyeS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyZXRyeS0+dmFsdWUgPSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaW5kZXggPSAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJaW50IGxlbiA9IGVuY29kaW5nLT5sZW5ndGg7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0VOQ09ERSAtIGVuYy5mbGFncyAlMDh4ICIKKwkJICJwb2ludGVyICVwIGxlbiAlZCIsIG5ldGRldi0+bmFtZSwgZW5jb2RpbmctPmZsYWdzLAorCQkgZW5jb2RpbmctPnBvaW50ZXIsIGVuY29kaW5nLT5sZW5ndGgpOworCWF0NzZfZGJnKERCR19JT0NUTCwKKwkJICIlczogU0lPQ1NJV0VOQ09ERSAtIG9sZCB3ZXBzdGF0ZTogZW5hYmxlZCAlcyBrZXlfaWQgJWQgIgorCQkgImF1dGhfbW9kZSAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIChwcml2LT53ZXBfZW5hYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCBwcml2LT53ZXBfa2V5X2lkLAorCQkgKHByaXYtPmF1dGhfbW9kZSA9PQorCQkgIFdMQU5fQVVUSF9TSEFSRURfS0VZKSA/ICJyZXN0cmljdGVkIiA6ICJvcGVuIik7CisKKwkvKiB0YWtlIHRoZSBvbGQgZGVmYXVsdCBrZXkgaWYgaW5kZXggaXMgaW52YWxpZCAqLworCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gV0VQX0tFWVMpKQorCQlpbmRleCA9IHByaXYtPndlcF9rZXlfaWQ7CisKKwlpZiAobGVuID4gMCkgeworCQlpZiAobGVuID4gV0VQX0xBUkdFX0tFWV9MRU4pCisJCQlsZW4gPSBXRVBfTEFSR0VfS0VZX0xFTjsKKworCQltZW1zZXQocHJpdi0+d2VwX2tleXNbaW5kZXhdLCAwLCBXRVBfS0VZX0xFTik7CisJCW1lbWNweShwcml2LT53ZXBfa2V5c1tpbmRleF0sIGV4dHJhLCBsZW4pOworCQlwcml2LT53ZXBfa2V5c19sZW5baW5kZXhdID0gKGxlbiA8PSBXRVBfU01BTExfS0VZX0xFTikgPworCQkgICAgV0VQX1NNQUxMX0tFWV9MRU4gOiBXRVBfTEFSR0VfS0VZX0xFTjsKKwkJcHJpdi0+d2VwX2VuYWJsZWQgPSAxOworCX0KKworCXByaXYtPndlcF9rZXlfaWQgPSBpbmRleDsKKwlwcml2LT53ZXBfZW5hYmxlZCA9ICgoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSA9PSAwKTsKKworCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKKwkJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCQlwcml2LT5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKKworCWF0NzZfZGJnKERCR19JT0NUTCwKKwkJICIlczogU0lPQ1NJV0VOQ09ERSAtIG5ldyB3ZXBzdGF0ZTogZW5hYmxlZCAlcyBrZXlfaWQgJWQgIgorCQkgImtleV9sZW4gJWQgYXV0aF9tb2RlICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgKHByaXYtPndlcF9lbmFibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHByaXYtPndlcF9rZXlfaWQgKyAxLAorCQkgcHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdLAorCQkgKHByaXYtPmF1dGhfbW9kZSA9PQorCQkgIFdMQU5fQVVUSF9TSEFSRURfS0VZKSA/ICJyZXN0cmljdGVkIiA6ICJvcGVuIik7CisKKwlyZXR1cm4gLUVJV0NPTU1JVDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICplbmNvZGluZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGluZGV4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCisJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBXRVBfS0VZUykpCisJCWluZGV4ID0gcHJpdi0+d2VwX2tleV9pZDsKKworCWVuY29kaW5nLT5mbGFncyA9CisJICAgIChwcml2LT5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpID8KKwkgICAgSVdfRU5DT0RFX1JFU1RSSUNURUQgOiBJV19FTkNPREVfT1BFTjsKKworCWlmICghcHJpdi0+d2VwX2VuYWJsZWQpCisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CisKKwlpZiAoZW5jb2RpbmctPnBvaW50ZXIpIHsKKwkJZW5jb2RpbmctPmxlbmd0aCA9IHByaXYtPndlcF9rZXlzX2xlbltpbmRleF07CisKKwkJbWVtY3B5KGV4dHJhLCBwcml2LT53ZXBfa2V5c1tpbmRleF0sIHByaXYtPndlcF9rZXlzX2xlbltpbmRleF0pOworCisJCWVuY29kaW5nLT5mbGFncyB8PSAoaW5kZXggKyAxKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV0VOQ09ERSAtIGVuYy5mbGFncyAlMDh4ICIKKwkJICJwb2ludGVyICVwIGxlbiAlZCIsIG5ldGRldi0+bmFtZSwgZW5jb2RpbmctPmZsYWdzLAorCQkgZW5jb2RpbmctPnBvaW50ZXIsIGVuY29kaW5nLT5sZW5ndGgpOworCWF0NzZfZGJnKERCR19JT0NUTCwKKwkJICIlczogU0lPQ0dJV0VOQ09ERSAtIHdlcHN0YXRlOiBlbmFibGVkICVzIGtleV9pZCAlZCAiCisJCSAia2V5X2xlbiAlZCBhdXRoX21vZGUgJXMiLCBuZXRkZXYtPm5hbWUsCisJCSAocHJpdi0+d2VwX2VuYWJsZWQpID8gInRydWUiIDogImZhbHNlIiwgcHJpdi0+d2VwX2tleV9pZCArIDEsCisJCSBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0sCisJCSAocHJpdi0+YXV0aF9tb2RlID09CisJCSAgV0xBTl9BVVRIX1NIQVJFRF9LRVkpID8gInJlc3RyaWN0ZWQiIDogIm9wZW4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwgY2hhciAqZXh0cmEpCit7CisJaW50IGVyciA9IC1FSVdDT01NSVQ7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsCisJCSAiJXM6IFNJT0NTSVdQT1dFUiAtIGRpc2FibGVkICVzIGZsYWdzIDB4JXggdmFsdWUgMHgleCIsCisJCSBuZXRkZXYtPm5hbWUsIChwcnEtPmRpc2FibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHBycS0+ZmxhZ3MsCisJCSBwcnEtPnZhbHVlKTsKKworCWlmIChwcnEtPmRpc2FibGVkKQorCQlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisJZWxzZSB7CisJCXN3aXRjaCAocHJxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKKwkJY2FzZSBJV19QT1dFUl9BTExfUjoKKwkJY2FzZSBJV19QT1dFUl9PTjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkKKwkJCXByaXYtPnBtX3BlcmlvZCA9IHBycS0+dmFsdWU7CisKKwkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisJCXByaXYtPnBtX21vZGUgPSBBVDc2X1BNX09OOworCX0KK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpwb3dlciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlwb3dlci0+ZGlzYWJsZWQgPSAocHJpdi0+cG1fbW9kZSA9PSBBVDc2X1BNX09GRik7CisJaWYgKCFwb3dlci0+ZGlzYWJsZWQpIHsKKwkJcG93ZXItPmZsYWdzID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfQUxMX1I7CisJCXBvd2VyLT52YWx1ZSA9IHByaXYtPnBtX3BlcmlvZDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1BPV0VSIC0gJXMgZmxhZ3MgMHgleCB2YWx1ZSAweCV4IiwKKwkJIG5ldGRldi0+bmFtZSwgcG93ZXItPmRpc2FibGVkID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJIHBvd2VyLT5mbGFncywgcG93ZXItPnZhbHVlKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJpdmF0ZSBJT0NUTFMKKyAqLworc3RhdGljIGludCBhdDc2X2l3X3NldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsCisJCQkJICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHZhbCA9ICooKGludCAqKW5hbWUpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX1NIT1JUX1BSRUFNQkxFLCAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIHZhbCk7CisKKwlpZiAodmFsIDwgUFJFQU1CTEVfVFlQRV9MT05HIHx8IHZhbCA+IFBSRUFNQkxFX1RZUEVfQVVUTykKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlCisJCXByaXYtPnByZWFtYmxlX3R5cGUgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfZ2V0X3Nob3J0X3ByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNucHJpbnRmKHdycXUtPm5hbWUsIHNpemVvZih3cnF1LT5uYW1lKSwgIiVzICglZCkiLAorCQkgcHJlYW1ibGVzW3ByaXYtPnByZWFtYmxlX3R5cGVdLCBwcml2LT5wcmVhbWJsZV90eXBlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X3NldF9kZWJ1ZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCWNoYXIgKnB0cjsKKwl1MzIgdmFsOworCisJaWYgKGRhdGEtPmxlbmd0aCA+IDApIHsKKwkJdmFsID0gc2ltcGxlX3N0cnRvbChleHRyYSwgJnB0ciwgMCk7CisKKwkJaWYgKHB0ciA9PSBleHRyYSkKKwkJCXZhbCA9IERCR19ERUZBVUxUUzsKKworCQlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfREVCVUcgaW5wdXQgJWQ6ICVzIC0+IDB4JXgiLAorCQkJIG5ldGRldi0+bmFtZSwgZGF0YS0+bGVuZ3RoLCBleHRyYSwgdmFsKTsKKwl9IGVsc2UKKwkJdmFsID0gREJHX0RFRkFVTFRTOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX0RFQlVHLCBvbGQgMHgleCwgbmV3IDB4JXgiLAorCQkgbmV0ZGV2LT5uYW1lLCBhdDc2X2RlYnVnLCB2YWwpOworCisJLyogamFsOiBzb21lIG1vcmUgb3V0cHV0IHRvIHBpbiBkb3duIGxvY2t1cHMgKi8KKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogbmV0aWYgcnVubmluZyAlZCBxdWV1ZV9zdG9wcGVkICVkICIKKwkJICJjYXJyaWVyX29rICVkIiwgbmV0ZGV2LT5uYW1lLCBuZXRpZl9ydW5uaW5nKG5ldGRldiksCisJCSBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldiksIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSk7CisKKwlhdDc2X2RlYnVnID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19nZXRfZGVidWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc25wcmludGYod3JxdS0+bmFtZSwgc2l6ZW9mKHdycXUtPm5hbWUpLCAiMHglMDh4IiwgYXQ3Nl9kZWJ1Zyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19zZXRfcG93ZXJzYXZlX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLAorCQkJCSAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCB2YWwgPSAqKChpbnQgKiluYW1lKTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9QT1dFUlNBVkVfTU9ERSwgJWQgKCVzKSIsCisJCSBuZXRkZXYtPm5hbWUsIHZhbCwKKwkJIHZhbCA9PSBBVDc2X1BNX09GRiA/ICJhY3RpdmUiIDogdmFsID09IEFUNzZfUE1fT04gPyAic2F2ZSIgOgorCQkgdmFsID09IEFUNzZfUE1fU01BUlQgPyAic21hcnQgc2F2ZSIgOiAiPGludmFsaWQ+Iik7CisJaWYgKHZhbCA8IEFUNzZfUE1fT0ZGIHx8IHZhbCA+IEFUNzZfUE1fU01BUlQpCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlwcml2LT5wbV9tb2RlID0gdmFsOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2dldF9wb3dlcnNhdmVfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50ICpwYXJhbSA9IChpbnQgKilleHRyYTsKKworCXBhcmFtWzBdID0gcHJpdi0+cG1fbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X3NldF9zY2FuX3RpbWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IG1pbnQgPSAqKChpbnQgKiluYW1lKTsKKwlpbnQgbWF4dCA9ICooKGludCAqKW5hbWUgKyAxKTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9TQ0FOX1RJTUVTIC0gbWluICVkIG1heCAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIG1pbnQsIG1heHQpOworCWlmIChtaW50IDw9IDAgfHwgbWF4dCA8PSAwIHx8IG1pbnQgPiBtYXh0KQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UgeworCQlwcml2LT5zY2FuX21pbl90aW1lID0gbWludDsKKwkJcHJpdi0+c2Nhbl9tYXhfdGltZSA9IG1heHQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2dldF9zY2FuX3RpbWVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50ICpwYXJhbSA9IChpbnQgKilleHRyYTsKKworCXBhcmFtWzBdID0gcHJpdi0+c2Nhbl9taW5fdGltZTsKKwlwYXJhbVsxXSA9IHByaXYtPnNjYW5fbWF4X3RpbWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19zZXRfc2Nhbl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCB2YWwgPSAqKChpbnQgKiluYW1lKTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9TQ0FOX01PREUgLSBtb2RlICVzIiwKKwkJIG5ldGRldi0+bmFtZSwgKHZhbCA9IFNDQU5fVFlQRV9BQ1RJVkUpID8gImFjdGl2ZSIgOgorCQkgKHZhbCA9IFNDQU5fVFlQRV9QQVNTSVZFKSA/ICJwYXNzaXZlIiA6ICI8aW52YWxpZD4iKTsKKworCWlmICh2YWwgIT0gU0NBTl9UWVBFX0FDVElWRSAmJiB2YWwgIT0gU0NBTl9UWVBFX1BBU1NJVkUpCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlwcml2LT5zY2FuX21vZGUgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfZ2V0X3NjYW5fbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgKnBhcmFtID0gKGludCAqKWV4dHJhOworCisJcGFyYW1bMF0gPSBwcml2LT5zY2FuX21vZGU7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQVQ3Nl9TRVRfSEFORExFUihoLCBmKSBbaCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBmCisKKy8qIFN0YW5kYXJkIHdpcmVsZXNzIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBhdDc2X2hhbmRsZXJzW10gPSB7CisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXQ09NTUlULCBhdDc2X2l3X2hhbmRsZXJfY29tbWl0KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdOQU1FLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X25hbWUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsIGF0NzZfaXdfaGFuZGxlcl9zZXRfZnJlcSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXRlJFUSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9mcmVxKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdNT0RFLCBhdDc2X2l3X2hhbmRsZXJfc2V0X21vZGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV01PREUsIGF0NzZfaXdfaGFuZGxlcl9nZXRfbW9kZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXUkFOR0UsIGF0NzZfaXdfaGFuZGxlcl9nZXRfcmFuZ2UpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1NQWSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9zcHkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1NQWSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9zcHkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1RIUlNQWSwgYXQ3Nl9pd19oYW5kbGVyX3NldF90aHJzcHkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwgYXQ3Nl9pd19oYW5kbGVyX2dldF90aHJzcHkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0FQLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3dhcCksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXQVAsIGF0NzZfaXdfaGFuZGxlcl9nZXRfd2FwKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdTQ0FOLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3NjYW4pLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1NDQU4sIGF0NzZfaXdfaGFuZGxlcl9nZXRfc2NhbiksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXRVNTSUQsIGF0NzZfaXdfaGFuZGxlcl9zZXRfZXNzaWQpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV0VTU0lELCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2Vzc2lkKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdSQVRFLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3JhdGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1JBVEUsIGF0NzZfaXdfaGFuZGxlcl9nZXRfcmF0ZSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXUlRTLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3J0cyksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXUlRTLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3J0cyksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXRlJBRywgYXQ3Nl9pd19oYW5kbGVyX3NldF9mcmFnKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdGUkFHLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2ZyYWcpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1RYUE9XLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3R4cG93KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdSRVRSWSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9yZXRyeSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXUkVUUlksIGF0NzZfaXdfaGFuZGxlcl9nZXRfcmV0cnkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0VOQ09ERSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9lbmNvZGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV0VOQ09ERSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9lbmNvZGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1BPV0VSLCBhdDc2X2l3X2hhbmRsZXJfc2V0X3Bvd2VyKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdQT1dFUiwgYXQ3Nl9pd19oYW5kbGVyX2dldF9wb3dlcikKK307CisKKyNkZWZpbmUgQVQ3Nl9TRVRfUFJJVihoLCBmKSBbaCAtIFNJT0NJV0ZJUlNUUFJJVl0gPSAoaXdfaGFuZGxlcikgZgorCisvKiBQcml2YXRlIHdpcmVsZXNzIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBhdDc2X3ByaXZfaGFuZGxlcnNbXSA9IHsKKwlBVDc2X1NFVF9QUklWKEFUNzZfU0VUX1NIT1JUX1BSRUFNQkxFLCBhdDc2X2l3X3NldF9zaG9ydF9wcmVhbWJsZSksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X0dFVF9TSE9SVF9QUkVBTUJMRSwgYXQ3Nl9pd19nZXRfc2hvcnRfcHJlYW1ibGUpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9TRVRfREVCVUcsIGF0NzZfaXdfc2V0X2RlYnVnKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfR0VUX0RFQlVHLCBhdDc2X2l3X2dldF9kZWJ1ZyksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X1NFVF9QT1dFUlNBVkVfTU9ERSwgYXQ3Nl9pd19zZXRfcG93ZXJzYXZlX21vZGUpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9HRVRfUE9XRVJTQVZFX01PREUsIGF0NzZfaXdfZ2V0X3Bvd2Vyc2F2ZV9tb2RlKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfU0VUX1NDQU5fVElNRVMsIGF0NzZfaXdfc2V0X3NjYW5fdGltZXMpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9HRVRfU0NBTl9USU1FUywgYXQ3Nl9pd19nZXRfc2Nhbl90aW1lcyksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X1NFVF9TQ0FOX01PREUsIGF0NzZfaXdfc2V0X3NjYW5fbW9kZSksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X0dFVF9TQ0FOX01PREUsIGF0NzZfaXdfZ2V0X3NjYW5fbW9kZSksCit9OworCisvKiBOYW1lcyBhbmQgYXJndW1lbnRzIG9mIHByaXZhdGUgd2lyZWxlc3MgaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIGF0NzZfcHJpdl9hcmdzW10gPSB7CisJLyogMCAtIGxvbmcsIDEgLSBzaG9ydCAqLworCXtBVDc2X1NFVF9TSE9SVF9QUkVBTUJMRSwKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfcHJlYW1ibGUifSwKKworCXtBVDc2X0dFVF9TSE9SVF9QUkVBTUJMRSwKKwkgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxMCwgImdldF9wcmVhbWJsZSJ9LAorCisJLyogd2UgbXVzdCBwYXNzIHRoZSBuZXcgZGVidWcgbWFzayBhcyBhIHN0cmluZywgYmVjYXVzZSBpd3ByaXYgY2Fubm90CisJICogcGFyc2UgaGV4IG51bWJlcnMgc3RhcnRpbmcgd2l0aCAweCA6LSggICovCisJe0FUNzZfU0VUX0RFQlVHLAorCSBJV19QUklWX1RZUEVfQ0hBUiB8IDEwLCAwLCAic2V0X2RlYnVnIn0sCisKKwl7QVQ3Nl9HRVRfREVCVUcsCisJIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMTAsICJnZXRfZGVidWcifSwKKworCS8qIDEgLSBhY3RpdmUsIDIgLSBwb3dlciBzYXZlLCAzIC0gc21hcnQgcG93ZXIgc2F2ZSAqLworCXtBVDc2X1NFVF9QT1dFUlNBVkVfTU9ERSwKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfcG93ZXJzYXZlIn0sCisKKwl7QVQ3Nl9HRVRfUE9XRVJTQVZFX01PREUsCisJIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X3Bvd2Vyc2F2ZSJ9LAorCisJLyogbWluX2NoYW5uZWxfdGltZSwgbWF4X2NoYW5uZWxfdGltZSAqLworCXtBVDc2X1NFVF9TQ0FOX1RJTUVTLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMiwgMCwgInNldF9zY2FuX3RpbWVzIn0sCisKKwl7QVQ3Nl9HRVRfU0NBTl9USU1FUywKKwkgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDIsICJnZXRfc2Nhbl90aW1lcyJ9LAorCisJLyogMCAtIGFjdGl2ZSwgMSAtIHBhc3NpdmUgc2NhbiAqLworCXtBVDc2X1NFVF9TQ0FOX01PREUsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3NjYW5fbW9kZSJ9LAorCisJe0FUNzZfR0VUX1NDQU5fTU9ERSwKKwkgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfc2Nhbl9tb2RlIn0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0NzZfaGFuZGxlcl9kZWYgPSB7CisJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUoYXQ3Nl9oYW5kbGVycyksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShhdDc2X3ByaXZfaGFuZGxlcnMpLAorCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShhdDc2X3ByaXZfYXJncyksCisJLnN0YW5kYXJkID0gYXQ3Nl9oYW5kbGVycywKKwkucHJpdmF0ZSA9IGF0NzZfcHJpdl9oYW5kbGVycywKKwkucHJpdmF0ZV9hcmdzID0gYXQ3Nl9wcml2X2FyZ3MsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IGF0NzZfZ2V0X3dpcmVsZXNzX3N0YXRzLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNuYXBzaWdbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMyB9OworCisvKiBSRkMgMTA0MiBlbmNhcHN1bGF0ZXMgRXRoZXJuZXQgZnJhbWVzIGluIDgwMi4yIFNOQVAgKDB4YWEsIDB4YWEsIDB4MDMpIHdpdGgKKyAqIGEgU05BUCBPSUQgb2YgMCAoMHgwMCwgMHgwMCwgMHgwMCkgKi8KK3N0YXRpYyBjb25zdCB1OCByZmMxMDQyc2lnW10gPSB7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGludCBhdDc2X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCWludCByZXQgPSAwOworCWludCB3bGVuOworCWludCBzdWJtaXRfbGVuOworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyID0gcHJpdi0+YnVsa19vdXRfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICppODAyXzExX2hkciA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXR4X2J1ZmZlci0+cGFja2V0OworCXU4ICpwYXlsb2FkID0gaTgwMl8xMV9oZHItPnBheWxvYWQ7CisJc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIG5ldGRldiBpcyBzdG9wcGVkXG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CisJCS8qIHNraXAgdGhpcyBwYWNrZXQgKi8KKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdi0+dHhfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGNhbGxlZCB3aGlsZSB0eCB1cmIgaXMgcGVuZGluZ1xuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18pOworCQkvKiBza2lwIHRoaXMgcGFja2V0ICovCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHNrYiB0b28gc2hvcnQgKCVkKVxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18sIHNrYi0+bGVuKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhdDc2X2xlZHRyaWdfdHhfYWN0aXZpdHkoKTsJLyogdGVsbCBsZWR0cmlnZ2VyIHdlIHNlbmQgYSBwYWNrZXQgKi8KKworCS8qIHdlIGNhbiBnZXQgcmlkIG9mIG1lbWNweSBpZiB3ZSBzZXQgbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gdG8KKwkgICByZXNlcnZlIGVub3VnaCBzcGFjZSwgYnV0IHdlIHdvdWxkIG5lZWQgdG8ga2VlcCB0aGUgc2tiIGFyb3VuZCAqLworCisJaWYgKG50b2hzKGVoLT5oX3Byb3RvKSA8PSBFVEhfREFUQV9MRU4pIHsKKwkJLyogdGhpcyBpcyBhIDgwMi4zIHBhY2tldCAqLworCQlpZiAoc2tiLT5sZW4gPj0gRVRIX0hMRU4gKyBzaXplb2YocmZjMTA0MnNpZykKKwkJICAgICYmIHNrYi0+ZGF0YVtFVEhfSExFTl0gPT0gcmZjMTA0MnNpZ1swXQorCQkgICAgJiYgc2tiLT5kYXRhW0VUSF9ITEVOICsgMV0gPT0gcmZjMTA0MnNpZ1sxXSkgeworCQkJLyogaGlnaGVyIGxheWVyIGRlbGl2ZXJlZCBTTkFQIGhlYWRlciAtIGtlZXAgaXQgKi8KKwkJCW1lbWNweShwYXlsb2FkLCBza2ItPmRhdGEgKyBFVEhfSExFTiwKKwkJCSAgICAgICBza2ItPmxlbiAtIEVUSF9ITEVOKTsKKwkJCXdsZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOICsgc2tiLT5sZW4gLSBFVEhfSExFTjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyb3BwaW5nIG5vbi1TTkFQIDgwMi4yIHBhY2tldCAiCisJCQkgICAgICAgIihEU0FQIDB4JTAyeCBTU0FQIDB4JTAyeCBjbnRybCAweCUwMngpXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgc2tiLT5kYXRhW0VUSF9ITEVOXSwKKwkJCSAgICAgICBza2ItPmRhdGFbRVRIX0hMRU4gKyAxXSwKKwkJCSAgICAgICBza2ItPmRhdGFbRVRIX0hMRU4gKyAyXSk7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFkZCBSRkMgMTA0MiBoZWFkZXIgaW4gZnJvbnQgKi8KKwkJbWVtY3B5KHBheWxvYWQsIHJmYzEwNDJzaWcsIHNpemVvZihyZmMxMDQyc2lnKSk7CisJCW1lbWNweShwYXlsb2FkICsgc2l6ZW9mKHJmYzEwNDJzaWcpLCAmZWgtPmhfcHJvdG8sCisJCSAgICAgICBza2ItPmxlbiAtIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pKTsKKwkJd2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU4gKyBzaXplb2YocmZjMTA0MnNpZykgKyBza2ItPmxlbiAtCisJCSAgICBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTsKKwl9CisKKwkvKiBtYWtlIHdpcmVsZXNzIGhlYWRlciAqLworCWk4MDJfMTFfaGRyLT5mcmFtZV9jdGwgPQorCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkocHJpdi0+d2VwX2VuYWJsZWQgPyBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQgOiAwKSB8CisJCQkocHJpdi0+aXdfbW9kZSA9PQorCQkJIElXX01PREVfSU5GUkEgPyBJRUVFODAyMTFfRkNUTF9UT0RTIDogMCkpOworCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIxLCBlaC0+aF9kZXN0LCBFVEhfQUxFTik7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjIsIGVoLT5oX3NvdXJjZSwgRVRIX0FMRU4pOworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIzLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCX0gZWxzZSBpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSB7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShpODAyXzExX2hkci0+YWRkcjIsIGVoLT5oX3NvdXJjZSwgRVRIX0FMRU4pOworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIzLCBlaC0+aF9kZXN0LCBFVEhfQUxFTik7CisJfQorCisJaTgwMl8xMV9oZHItPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoMCk7CisJaTgwMl8xMV9oZHItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNigwKTsKKworCS8qIHNldHVwICdBdG1lbCcgaGVhZGVyICovCisJdHhfYnVmZmVyLT53bGVuZ3RoID0gY3B1X3RvX2xlMTYod2xlbik7CisJdHhfYnVmZmVyLT50eF9yYXRlID0gcHJpdi0+dHhyYXRlOworCS8qIGZvciBicm9hZGNhc3QgZGVzdGluYXRpb24gYWRkcmVzc2VzLCB0aGUgZmlybXdhcmUgMC4xMDAueAorCSAgIHNlZW1zIHRvIGNob29zZSB0aGUgaGlnaGVzdCByYXRlIHNldCB3aXRoIENNRF9TVEFSVFVQIGluCisJICAgYmFzaWNfcmF0ZV9zZXQgcmVwbGFjaW5nIHRoaXMgdmFsdWUgKi8KKworCW1lbXNldCh0eF9idWZmZXItPnJlc2VydmVkLCAwLCBzaXplb2YodHhfYnVmZmVyLT5yZXNlcnZlZCkpOworCisJdHhfYnVmZmVyLT5wYWRkaW5nID0gYXQ3Nl9jYWxjX3BhZGRpbmcod2xlbik7CisJc3VibWl0X2xlbiA9IHdsZW4gKyBBVDc2X1RYX0hEUkxFTiArIHR4X2J1ZmZlci0+cGFkZGluZzsKKworCWF0NzZfZGJnKERCR19UWF9EQVRBX0NPTlRFTlQsICIlcyBza2ItPmRhdGEgJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBoZXgyc3RyKHNrYi0+ZGF0YSwgMzIpKTsKKwlhdDc2X2RiZyhEQkdfVFhfREFUQSwgIiVzIHR4OiB3bGVuIDB4JXggcGFkIDB4JXggcmF0ZSAlZCBoZHIgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbGUxNl90b19jcHUodHhfYnVmZmVyLT53bGVuZ3RoKSwKKwkJIHR4X2J1ZmZlci0+cGFkZGluZywgdHhfYnVmZmVyLT50eF9yYXRlLAorCQkgaGV4MnN0cihpODAyXzExX2hkciwgc2l6ZW9mKCppODAyXzExX2hkcikpKTsKKwlhdDc2X2RiZyhEQkdfVFhfREFUQV9DT05URU5ULCAiJXMgcGF5bG9hZCAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIGhleDJzdHIocGF5bG9hZCwgNDgpKTsKKworCS8qIHNlbmQgc3R1ZmYgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT50eF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnR4X3BpcGUsIHR4X2J1ZmZlciwKKwkJCSAgc3VibWl0X2xlbiwgYXQ3Nl90eF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCXN0YXRzLT50eF9lcnJvcnMrKzsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gdHggc3VibWl0IHVyYjogJWRcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCWlmIChyZXQgPT0gLUVJTlZBTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogLUVJTlZBTDogdHggdXJiICVwIGhjcHJpdiAlcCBjb21wbGV0ZSAlcFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHByaXYtPnR4X3VyYiwKKwkJCSAgICAgICBwcml2LT50eF91cmItPmhjcHJpdiwgcHJpdi0+dHhfdXJiLT5jb21wbGV0ZSk7CisJfSBlbHNlIHsKKwkJc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKwlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJ0eCB0aW1lb3V0LiIpOworCisJdXNiX3VubGlua191cmIocHJpdi0+dHhfdXJiKTsKKwlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKK30KKworc3RhdGljIGludCBhdDc2X3N1Ym1pdF9yeF91cmIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCWludCBzaXplOworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5yeF9za2I7CisKKwlpZiAoIXByaXYtPnJ4X3VyYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogcHJpdi0+cnhfdXJiIGlzIE5VTExcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFza2IpIHsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyKSk7CisJCWlmICghc2tiKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgcnggc2tidWZmXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisJCXByaXYtPnJ4X3NrYiA9IHNrYjsKKwl9IGVsc2UgeworCQlza2JfcHVzaChza2IsIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJc2tiX3RyaW0oc2tiLCAwKTsKKwl9CisKKwlzaXplID0gc2tiX3RhaWxyb29tKHNrYik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+cnhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT5yeF9waXBlLAorCQkJICBza2JfcHV0KHNrYiwgc2l6ZSksIHNpemUsIGF0NzZfcnhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnJ4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRU5PREVWKQorCQkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULAorCQkJCSAidXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQgLUVOT0RFViIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByeCwgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJfQorCitleGl0OgorCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PREVWKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3Qgc3VibWl0IHJ4IHVyYiAtIHBsZWFzZSB1bmxvYWQgdGhlICIKKwkJICAgICAgICJkcml2ZXIgYW5kL29yIHBvd2VyIGN5Y2xlIHRoZSBkZXZpY2VcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXMoKTogZW50cnkiLCBfX2Z1bmNfXyk7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdHgpKQorCQlyZXR1cm4gLUVJTlRSOworCisJLyogaWYgbmV0ZGV2LT5kZXZfYWRkciAhPSBwcml2LT5tYWNfYWRkciB3ZSBtdXN0CisJICAgc2V0IHRoZSBtYWMgYWRkcmVzcyBpbiB0aGUgZGV2aWNlICEgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyKSkgeworCQlpZiAoYXQ3Nl9hZGRfbWFjX2FkZHJlc3MocHJpdiwgbmV0ZGV2LT5kZXZfYWRkcikgPj0gMCkKKwkJCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiBzZXQgbmV3IE1BQyBhZGRyICVzIiwKKwkJCQkgbmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG5ldGRldi0+ZGV2X2FkZHIpKTsKKwl9CisKKwlwcml2LT5zY2FuX3N0YXRlID0gU0NBTl9JRExFOworCXByaXYtPmxhc3Rfc2NhbiA9IGppZmZpZXM7CisKKwlyZXQgPSBhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Blbjogc3VibWl0X3J4X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfcmVzdGFydCwgMCk7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzKCk6IGVuZCIsIF9fZnVuY19fKTsKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICIlczogRU5URVIiLCBfX2Z1bmNfXyk7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdHgpKQorCQlyZXR1cm4gLUVJTlRSOworCisJYXQ3Nl9xdWllc2NlKHByaXYpOworCisJaWYgKCFwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKSB7CisJCS8qIFdlIGFyZSBjYWxsZWQgYnkgImlmY29uZmlnIGV0aFggZG93biIsIG5vdCBiZWNhdXNlIHRoZQorCQkgKiBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlLiAqLworCQlhdDc2X3NldF9yYWRpbyhwcml2LCAwKTsKKworCQkvKiBXZSB1bmxpbmsgcnhfdXJiIGJlY2F1c2UgYXQ3Nl9vcGVuKCkgcmUtc3VibWl0cyBpdC4KKwkJICogSWYgdW5wbHVnZ2VkLCBhdDc2X2RlbGV0ZV9kZXZpY2UoKSB0YWtlcyBjYXJlIG9mIGl0LiAqLworCQl1c2Jfa2lsbF91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwkvKiBmcmVlIHRoZSBic3NfbGlzdCAqLworCWF0NzZfZnJlZV9ic3NfbGlzdChwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICIlczogRVhJVCIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOworCisJdXNiX21ha2VfcGF0aChwcml2LT51ZGV2LCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisKKwlzbnByaW50ZihpbmZvLT5md192ZXJzaW9uLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbiksICIlZC4lZC4lZC0lZCIsCisJCSBwcml2LT5md192ZXJzaW9uLm1ham9yLCBwcml2LT5md192ZXJzaW9uLm1pbm9yLAorCQkgcHJpdi0+ZndfdmVyc2lvbi5wYXRjaCwgcHJpdi0+ZndfdmVyc2lvbi5idWlsZCk7Cit9CisKK3N0YXRpYyB1MzIgYXQ3Nl9ldGh0b29sX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF0NzZfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gYXQ3Nl9ldGh0b29sX2dldF9kcnZpbmZvLAorCS5nZXRfbGluayA9IGF0NzZfZXRodG9vbF9nZXRfbGluaywKK307CisKKy8qIERvd25sb2FkIGV4dGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9leHRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBvcF9tb2RlOworCWludCBibG9ja25vID0gMDsKKwlpbnQgYnNpemU7CisJdTggKmJsb2NrOworCXU4ICpidWYgPSBmd2UtPmV4dGZ3OworCWludCBzaXplID0gZndlLT5leHRmd19zaXplOworCisJaWYgKCFidWYgfHwgIXNpemUpCisJCXJldHVybiAtRU5PRU5UOworCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIG9wbW9kZSAlZFxuIiwKKwkJCSAgIG9wX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSIpOworCisJLyogZm9yIGZ3ID49IDAuMTAwLCB0aGUgZGV2aWNlIG5lZWRzIGFuIGV4dHJhIGVtcHR5IGJsb2NrICovCisJZG8geworCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCSAiZXh0IGZ3LCBzaXplIGxlZnQgPSAlNWQsIGJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwKKwkJCSBzaXplLCBic2l6ZSwgYmxvY2tubyk7CisJCXJldCA9IGF0NzZfbG9hZF9leHRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJaWYgKHJldCAhPSBic2l6ZSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAibG9hZGluZyAlZHRoIGZpcm13YXJlIGJsb2NrIGZhaWxlZDogJWRcbiIsCisJCQkJICAgYmxvY2tubywgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlidWYgKz0gYnNpemU7CisJCXNpemUgLT0gYnNpemU7CisJCWJsb2Nrbm8rKzsKKwl9IHdoaWxlIChic2l6ZSA+IDApOworCisJaWYgKGF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIjIwMCBtcyBkZWxheSBmb3IgNTA1YSIpOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyA1ICsgMSk7CisJfQorCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGludGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBuZWVkX3JlbWFwID0gIWF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpOworCisJcmV0ID0gYXQ3Nl91c2JkZnVfZG93bmxvYWQodWRldiwgZndlLT5pbnRmdywgZndlLT5pbnRmd19zaXplLAorCQkJCSAgIG5lZWRfcmVtYXAgPyAwIDogMiAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZncgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzZW5kaW5nIFJFTUFQIik7CisKKwkvKiBubyBSRU1BUCBmb3IgNTA1QSAoc2VlIFNGIGRyaXZlcikgKi8KKwlpZiAobmVlZF9yZW1hcCkgeworCQlyZXQgPSBhdDc2X3JlbWFwKHVkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAic2VuZGluZyBSRU1BUCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNsZWVwaW5nIGZvciAyIHNlY29uZHMiKTsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMiAqIEhaICsgMSk7CisJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfbWF0Y2hfZXNzaWQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJLyogY29tbW9uIGNyaXRlcmlhIGZvciBib3RoIG1vZGkgKi8KKworCWludCByZXQgPSAocHJpdi0+ZXNzaWRfc2l6ZSA9PSAwIC8qIEFOWSBzc2lkICovICB8fAorCQkgICAocHJpdi0+ZXNzaWRfc2l6ZSA9PSBwdHItPnNzaWRfbGVuICYmCisJCSAgICAhbWVtY21wKHByaXYtPmVzc2lkLCBwdHItPnNzaWQsIHB0ci0+c3NpZF9sZW4pKSk7CisJaWYgKCFyZXQpCisJCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCQkgIiVzIGJzcyB0YWJsZSBlbnRyeSAlcDogZXNzaWQgZGlkbid0IG1hdGNoIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHB0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9tYXRjaF9tb2RlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCWludCByZXQ7CisKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQorCQlyZXQgPSBwdHItPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKwllbHNlCisJCXJldCA9IHB0ci0+Y2FwYSAmIFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJaWYgKCFyZXQpCisJCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCQkgIiVzIGJzcyB0YWJsZSBlbnRyeSAlcDogbW9kZSBkaWRuJ3QgbWF0Y2giLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHRyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfbWF0Y2hfcmF0ZXMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHRyLT5yYXRlc19sZW47IGkrKykgeworCQl1OCByYXRlID0gcHRyLT5yYXRlc1tpXTsKKworCQlpZiAoIShyYXRlICYgMHg4MCkpCisJCQljb250aW51ZTsKKworCQkvKiB0aGlzIGlzIGEgYmFzaWMgcmF0ZSB3ZSBoYXZlIHRvIHN1cHBvcnQKKwkJICAgKHNlZSBJRUVFODAyLjExLCBjaC4gNy4zLjIuMikgKi8KKwkJaWYgKHJhdGUgIT0gKDB4ODAgfCBod19yYXRlc1swXSkKKwkJICAgICYmIHJhdGUgIT0gKDB4ODAgfCBod19yYXRlc1sxXSkKKwkJICAgICYmIHJhdGUgIT0gKDB4ODAgfCBod19yYXRlc1syXSkKKwkJICAgICYmIHJhdGUgIT0gKDB4ODAgfCBod19yYXRlc1szXSkpIHsKKwkJCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCQkJICIlczogYnNzIHRhYmxlIGVudHJ5ICVwOiBiYXNpYyByYXRlICUwMnggbm90ICIKKwkJCQkgInN1cHBvcnRlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwgcHRyLCByYXRlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogaWYgd2UgdXNlIHNob3J0IHByZWFtYmxlLCB0aGUgYnNzIG11c3Qgc3VwcG9ydCBpdCAqLworCWlmIChwcml2LT5wcmVhbWJsZV90eXBlID09IFBSRUFNQkxFX1RZUEVfU0hPUlQgJiYKKwkgICAgIShwdHItPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKSB7CisJCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCQkgIiVzOiAlcCBkb2VzIG5vdCBzdXBwb3J0IHNob3J0IHByZWFtYmxlIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHB0cik7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9tYXRjaF93ZXAoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJaWYgKCFwcml2LT53ZXBfZW5hYmxlZCAmJiBwdHItPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgeworCQkvKiB3ZSBoYXZlIGRpc2FibGVkIFdFUCwgYnV0IHRoZSBCU1Mgc2lnbmFscyBwcml2YWN5ICovCisJCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCQkgIiVzOiBic3MgdGFibGUgZW50cnkgJXA6IHJlcXVpcmVzIGVuY3J5cHRpb24iLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgcHRyKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIG90aGVyd2lzZSBpZiB0aGUgQlNTIGRvZXMgbm90IHNpZ25hbCBwcml2YWN5IGl0IG1heSB3ZWxsCisJICAgYWNjZXB0IGVuY3J5cHRlZCBwYWNrZXRzIGZyb20gdXMgLi4uICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfbWF0Y2hfYnNzaWQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpwdHIpCit7CisJaWYgKCFwcml2LT53YW50ZWRfYnNzaWRfdmFsaWQgfHwKKwkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwdHItPmJzc2lkLCBwcml2LT53YW50ZWRfYnNzaWQpKQorCQlyZXR1cm4gMTsKKworCWF0NzZfZGJnKERCR19CU1NfTUFUQ0gsCisJCSAiJXM6IHJlcXVlc3RlZCBic3NpZCAtICVzIGRvZXMgbm90IG1hdGNoIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihwcml2LT53YW50ZWRfYnNzaWQpKTsKKwlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkgIiAgICAgIEFQIGJzc2lkIC0gJXMgb2YgYnNzIHRhYmxlIGVudHJ5ICVwIiwKKwkJIG1hYzJzdHIocHRyLT5ic3NpZCksIHB0cik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYXQ3Nl9tYXRjaF9ic3MgLSB0cnkgdG8gZmluZCBhIG1hdGNoaW5nIGJzcyBpbiBwcml2LT5ic3MKKyAqCisgKiBsYXN0IC0gbGFzdCBic3MgdHJpZWQKKyAqCisgKiBsYXN0ID09IE5VTEwgc2lnbmFscyBhIG5ldyByb3VuZCBzdGFydGluZyB3aXRoIHByaXYtPmJzc19saXN0Lm5leHQKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW5zaWRlIGFuIGFjcXVpcmVkIHByaXYtPmJzc19saXN0X3NwaW5sb2NrCisgKiBvdGhlcndpc2UgdGhlIHRpbWVvdXQgb24gYnNzIG1heSByZW1vdmUgdGhlIG5ld2x5IGNob3NlbiBlbnRyeQorICovCitzdGF0aWMgc3RydWN0IGJzc19pbmZvICphdDc2X21hdGNoX2JzcyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgYnNzX2luZm8gKmxhc3QpCit7CisJc3RydWN0IGJzc19pbmZvICpwdHIgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnI7CisKKwljdXJyID0gbGFzdCA/IGxhc3QtPmxpc3QubmV4dCA6IHByaXYtPmJzc19saXN0Lm5leHQ7CisJd2hpbGUgKGN1cnIgIT0gJnByaXYtPmJzc19saXN0KSB7CisJCXB0ciA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KTsKKwkJaWYgKGF0NzZfbWF0Y2hfZXNzaWQocHJpdiwgcHRyKSAmJiBhdDc2X21hdGNoX21vZGUocHJpdiwgcHRyKQorCQkgICAgJiYgYXQ3Nl9tYXRjaF93ZXAocHJpdiwgcHRyKSAmJiBhdDc2X21hdGNoX3JhdGVzKHByaXYsIHB0cikKKwkJICAgICYmIGF0NzZfbWF0Y2hfYnNzaWQocHJpdiwgcHRyKSkKKwkJCWJyZWFrOworCQljdXJyID0gY3Vyci0+bmV4dDsKKwl9CisKKwlpZiAoY3VyciA9PSAmcHJpdi0+YnNzX2xpc3QpCisJCXB0ciA9IE5VTEw7CisJLyogb3RoZXJ3aXNlIHB0ciBwb2ludHMgdG8gdGhlIHN0cnVjdCBic3NfaW5mbyB3ZSBoYXZlIGNob3NlbiAqLworCisJYXQ3Nl9kYmcoREJHX0JTU19UQUJMRSwgIiVzICVzOiByZXR1cm5lZCAlcCIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIF9fZnVuY19fLCBwdHIpOworCXJldHVybiBwdHI7Cit9CisKKy8qIFN0YXJ0IGpvaW5pbmcgYSBtYXRjaGluZyBCU1MsIG9yIGNyZWF0ZSBvd24gSUJTUyAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX2pvaW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19qb2luKTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0pPSU5JTkcpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0pPSU5JTkcpCisJCWdvdG8gZXhpdDsKKworCS8qIHNlY3VyZSB0aGUgYWNjZXNzIHRvIHByaXYtPmN1cnJfYnNzICEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKwlwcml2LT5jdXJyX2JzcyA9IGF0NzZfbWF0Y2hfYnNzKHByaXYsIHByaXYtPmN1cnJfYnNzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKCFwcml2LT5jdXJyX2JzcykgeworCQkvKiBoZXJlIHdlIGhhdmVuJ3QgZm91bmQgYSBtYXRjaGluZyAoaSlic3MgLi4uICovCisJCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfT1dOX0lCU1MpOworCQkJYXQ3Nl9zdGFydF9pYnNzKHByaXYpOworCQkJZ290byBleGl0OworCQl9CisJCS8qIGhhdmVuJ3QgZm91bmQgYSBtYXRjaGluZyBCU1MgaW4gaW5mcmEgbW9kZSAtIHRyeSBhZ2FpbiAqLworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX1NDQU5OSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19zdGFydF9zY2FuKTsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGF0NzZfam9pbl9ic3MocHJpdiwgcHJpdi0+Y3Vycl9ic3MpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGpvaW5fYnNzIGZhaWxlZCB3aXRoICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0ID0gYXQ3Nl93YWl0X2NvbXBsZXRpb24ocHJpdiwgQ01EX0pPSU4pOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlpZiAocmV0ICE9IENNRF9TVEFUVVNfVElNRV9PVVQpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBqb2luX2JzcyBjb21wbGV0ZWQgd2l0aCAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBqb2luX2JzcyBzc2lkICVzIHRpbWVkIG91dFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgbWFjMnN0cihwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKTsKKworCQkvKiByZXRyeSBuZXh0IEJTUyBpbW1lZGlhdGVseSAqLworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogaGVyZSB3ZSBoYXZlIGpvaW5lZCB0aGUgKEkpQlNTICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQlzdHJ1Y3QgYnNzX2luZm8gKmJwdHIgPSBwcml2LT5jdXJyX2JzczsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19DT05ORUNURUQpOworCQkvKiBnZXQgRVNTSUQsIEJTU0lEIGFuZCBjaGFubmVsIGZvciBwcml2LT5jdXJyX2JzcyAqLworCQlwcml2LT5lc3NpZF9zaXplID0gYnB0ci0+c3NpZF9sZW47CisJCW1lbWNweShwcml2LT5lc3NpZCwgYnB0ci0+c3NpZCwgYnB0ci0+c3NpZF9sZW4pOworCQltZW1jcHkocHJpdi0+YnNzaWQsIGJwdHItPmJzc2lkLCBFVEhfQUxFTik7CisJCXByaXYtPmNoYW5uZWwgPSBicHRyLT5jaGFubmVsOworCQlhdDc2X2l3ZXZlbnRfYnNzX2Nvbm5lY3QocHJpdi0+bmV0ZGV2LCBicHRyLT5ic3NpZCk7CisJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJLyoganVzdCB0byBiZSBzdXJlICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKKwl9IGVsc2UgeworCQkvKiBzZW5kIGF1dGggcmVxICovCisJCXByaXYtPnJldHJpZXMgPSBBVVRIX1JFVFJJRVM7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfQVVUSCk7CisJCWF0NzZfYXV0aF9yZXEocHJpdiwgcHJpdi0+Y3Vycl9ic3MsIDEsIE5VTEwpOworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwKKwkJCSAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgKyBIWiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCwgQVVUSF9USU1FT1VUKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBSZWFwIHNjYW4gcmVzdWx0cyAqLworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19nZXRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHN0YXR1czsKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfZ2V0X3NjYW4ud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19TQ0FOTklORyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfU0NBTk5JTkcpCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBhdDc2X2dldF9jbWRfc3RhdHVzIGZhaWxlZCB3aXRoICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJc3RhdHVzID0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUzsKKwkJLyogSU5GTzogSG9wZSBpdCB3YXMgYSBvbmUgb2ZmIGVycm9yIC0gaWYgbm90LCBzY2FubmluZworCQkgICBmdXJ0aGVyIGRvd24gdGhlIGxpbmUgYW5kIHN0b3AgdGhpcyBjeWNsZSAqLworCX0KKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsCisJCSAiJXMgJXM6IGdvdCBjbWRfc3RhdHVzICVkIChzdGF0ZSAlcywgbmVlZF9hbnkgJWQpIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18sIHN0YXR1cywKKwkJIG1hY19zdGF0ZXNbcHJpdi0+bWFjX3N0YXRlXSwgcHJpdi0+c2Nhbl9uZWVkX2FueSk7CisKKwlpZiAoc3RhdHVzICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJaWYgKChzdGF0dXMgIT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUykgJiYKKwkJICAgIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JRExFKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBCYWQgc2NhbiBzdGF0dXM6ICVzXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18sCisJCQkgICAgICAgYXQ3Nl9nZXRfY21kX3N0YXR1c19zdHJpbmcoc3RhdHVzKSk7CisKKwkJLyogdGhlIGZpcnN0IGNtZCBzdGF0dXMgYWZ0ZXIgc2NhbiBzdGFydCBpcyBhbHdheXMgYSBJRExFIC0+CisJCSAgIHN0YXJ0IHRoZSB0aW1lciB0byBwb2xsIGFnYWluIHVudGlsIENPTVBMRVRFRCAqLworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwKKwkJCSAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgZm9yICVkIHRpY2tzIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4sCisJCQkJICAgICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChhdDc2X2RlYnVnICYgREJHX0JTU19UQUJMRSkKKwkJYXQ3Nl9kdW1wX2Jzc190YWJsZShwcml2KTsKKworCWlmIChwcml2LT5zY2FuX25lZWRfYW55KSB7CisJCXJldCA9IGF0NzZfc3RhcnRfc2Nhbihwcml2LCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6ICVzOiBzdGFydF9zY2FuIChBTlkpIGZhaWxlZCB3aXRoICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18sIHJldCk7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLAorCQkJICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciBmb3IgJWQgdGlja3MiLCBfX2Z1bmNfXywKKwkJCSBfX0xJTkVfXywgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2NhbiwKKwkJCQkgICAgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlwcml2LT5zY2FuX25lZWRfYW55ID0gMDsKKwl9IGVsc2UgeworCQlwcml2LT5zY2FuX3N0YXRlID0gU0NBTl9DT01QTEVURUQ7CisJCS8qIHJlcG9ydCB0aGUgZW5kIG9mIHNjYW4gdG8gdXNlciBzcGFjZSAqLworCQlhdDc2X2l3ZXZlbnRfc2Nhbl9jb21wbGV0ZShwcml2LT5uZXRkZXYpOworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIEhhbmRsZSBsb3NzIG9mIGJlYWNvbnMgZnJvbSB0aGUgQVAgKi8KK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX2JlYWNvbi53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQ09OTkVDVEVEIHx8IHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkKKwkJZ290byBleGl0OworCisJLyogV2UgaGF2ZW4ndCByZWNlaXZlZCBhbnkgYmVhY29ucyBmcm9tIG91dCBBUCBmb3IgQkVBQ09OX1RJTUVPVVQgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogbG9zdCBiZWFjb24gYnNzaWQgJXNcbiIsCisJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCWF0NzZfaXdldmVudF9ic3NfZGlzY29ubmVjdChwcml2LT5uZXRkZXYpOworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfU0NBTk5JTkcpOworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfc3RhcnRfc2Nhbik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBIYW5kbGUgYXV0aGVudGljYXRpb24gcmVzcG9uc2UgdGltZW91dCAqLworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19hdXRoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX2F1dGgud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BVVRIKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BVVRIKQorCQlnb3RvIGV4aXQ7CisKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogYXV0aGVudGljYXRpb24gcmVzcG9uc2UgdGltZW91dCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUpOworCisJaWYgKHByaXYtPnJldHJpZXMtLSA+PSAwKSB7CisJCWF0NzZfYXV0aF9yZXEocHJpdiwgcHJpdi0+Y3Vycl9ic3MsIDEsIE5VTEwpOworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyICsgSFoiLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCwgQVVUSF9USU1FT1VUKTsKKwl9IGVsc2UgeworCQkvKiB0cnkgdG8gZ2V0IG5leHQgbWF0Y2hpbmcgQlNTICovCisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogSGFuZGxlIGFzc29jaWF0aW9uIHJlc3BvbnNlIHRpbWVvdXQgKi8KK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfYXNzb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgZHdvcmtfYXNzb2Mud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MpCisJCWdvdG8gZXhpdDsKKworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiBhc3NvY2lhdGlvbiByZXNwb25zZSB0aW1lb3V0IiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSk7CisKKwlpZiAocHJpdi0+cmV0cmllcy0tID49IDApIHsKKwkJYXQ3Nl9hc3NvY19yZXEocHJpdiwgcHJpdi0+Y3Vycl9ic3MpOworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyICsgSFoiLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MsIEFTU09DX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCS8qIHRyeSB0byBnZXQgbmV4dCBtYXRjaGluZyBCU1MgKi8KKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBSZWFkIG5ldyBic3NpZCBpbiBhZC1ob2MgbW9kZSAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX25ld19ic3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19uZXdfYnNzKTsKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjX21nbXQgbWFjX21nbXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgJm1hY19tZ210LAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgImlic3NfY2hhbmdlID0gMHglMngiLCBtYWNfbWdtdC5pYnNzX2NoYW5nZSk7CisJbWVtY3B5KHByaXYtPmJzc2lkLCBtYWNfbWdtdC5jdXJyZW50X2Jzc2lkLCBFVEhfQUxFTik7CisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAidXNpbmcgQlNTSUQgJXMiLCBtYWMyc3RyKHByaXYtPmJzc2lkKSk7CisKKwlhdDc2X2l3ZXZlbnRfYnNzX2Nvbm5lY3QocHJpdi0+bmV0ZGV2LCBwcml2LT5ic3NpZCk7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX01HTVQ7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMTsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWNfbWdtdCwgaWJzc19jaGFuZ2UpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gMDsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGlic3MgY2hhbmdlIG9rKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIGludCBhdDc2X3N0YXJ0dXBfZGV2aWNlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfY2FyZF9jb25maWcgKmNjZmcgPSAmcHJpdi0+Y2FyZF9jb25maWc7CisJaW50IHJldDsKKworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHNzaWQgJS4qcyAoJXMpIG1vZGUgJXMgY2ggJWQgd2VwICVzIGtleSAlZCAiCisJCSAia2V5bGVuICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwcml2LT5lc3NpZF9zaXplLCBwcml2LT5lc3NpZCwKKwkJIGhleDJzdHIocHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyA/ICJhZGhvYyIgOiAiaW5mcmEiLAorCQkgcHJpdi0+Y2hhbm5lbCwgcHJpdi0+d2VwX2VuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAorCQkgcHJpdi0+d2VwX2tleV9pZCwgcHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwcmVhbWJsZSAlcyBydHMgJWQgcmV0cnkgJWQgZnJhZyAlZCAiCisJCSAidHhyYXRlICVzIGF1dGhfbW9kZSAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIHByZWFtYmxlc1twcml2LT5wcmVhbWJsZV90eXBlXSwgcHJpdi0+cnRzX3RocmVzaG9sZCwKKwkJIHByaXYtPnNob3J0X3JldHJ5X2xpbWl0LCBwcml2LT5mcmFnX3RocmVzaG9sZCwKKwkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFXzFNQklUID8gIjFNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV8yTUJJVCA/ICIyTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfNV81TUJJVCA/ICI1LjVNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV8xMU1CSVQgPyAiMTFNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV9BVVRPID8gImF1dG8iIDogIjxpbnZhbGlkPiIsIHByaXYtPmF1dGhfbW9kZSk7CisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogcG1fbW9kZSAlZCBwbV9wZXJpb2QgJWQgYXV0aF9tb2RlICVzICIKKwkJICJzY2FuX3RpbWVzICVkICVkIHNjYW5fbW9kZSAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHByaXYtPnBtX21vZGUsIHByaXYtPnBtX3BlcmlvZCwKKwkJIHByaXYtPmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfT1BFTiA/ICJvcGVuIiA6ICJzaGFyZWRfc2VjcmV0IiwKKwkJIHByaXYtPnNjYW5fbWluX3RpbWUsIHByaXYtPnNjYW5fbWF4X3RpbWUsCisJCSBwcml2LT5zY2FuX21vZGUgPT0gU0NBTl9UWVBFX0FDVElWRSA/ICJhY3RpdmUiIDogInBhc3NpdmUiKTsKKworCW1lbXNldChjY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfY2FyZF9jb25maWcpKTsKKwljY2ZnLT5wcm9taXNjdW91c19tb2RlID0gMDsKKwljY2ZnLT5zaG9ydF9yZXRyeV9saW1pdCA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OworCisJaWYgKHByaXYtPndlcF9lbmFibGVkKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0gPiBXRVBfU01BTExfS0VZX0xFTikKKwkJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDI7CisJCWVsc2UKKwkJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDE7CisKKwkJLyogamFsOiBhbHdheXMgZXhjbHVkZSB1bmVuY3J5cHRlZCBpZiBXRVAgaXMgYWN0aXZlICovCisJCWNjZmctPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOworCX0gZWxzZSB7CisJCWNjZmctPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOworCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAwOworCX0KKworCWNjZmctPnJ0c190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihwcml2LT5ydHNfdGhyZXNob2xkKTsKKwljY2ZnLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPmZyYWdfdGhyZXNob2xkKTsKKworCW1lbWNweShjY2ZnLT5iYXNpY19yYXRlX3NldCwgaHdfcmF0ZXMsIDQpOworCS8qIGphbDogcmVhbGx5IG5lZWRlZCwgd2UgZG8gYSBzZXRfbWliIGZvciBhdXRvcmF0ZSBsYXRlciA/Pz8gKi8KKwljY2ZnLT5hdXRvX3JhdGVfZmFsbGJhY2sgPSAocHJpdi0+dHhyYXRlID09IFRYX1JBVEVfQVVUTyA/IDEgOiAwKTsKKwljY2ZnLT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwljY2ZnLT5wcml2YWN5X2ludm9rZWQgPSBwcml2LT53ZXBfZW5hYmxlZDsKKwltZW1jcHkoY2NmZy0+Y3VycmVudF9zc2lkLCBwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCWNjZmctPnNzaWRfbGVuID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKworCWNjZmctPndlcF9kZWZhdWx0X2tleV9pZCA9IHByaXYtPndlcF9rZXlfaWQ7CisJbWVtY3B5KGNjZmctPndlcF9kZWZhdWx0X2tleV92YWx1ZSwgcHJpdi0+d2VwX2tleXMsIDQgKiBXRVBfS0VZX0xFTik7CisKKwljY2ZnLT5zaG9ydF9wcmVhbWJsZSA9IHByaXYtPnByZWFtYmxlX3R5cGU7CisJY2NmZy0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TVEFSVFVQLCAmcHJpdi0+Y2FyZF9jb25maWcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TVEFSVFVQKTsKKworCS8qIHJlbW92ZSBCU1NJRCBmcm9tIHByZXZpb3VzIHJ1biAqLworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJaWYgKGF0NzZfc2V0X3JhZGlvKHByaXYsIDEpID09IDEpCisJCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9SQURJT19PTik7CisKKwlyZXQgPSBhdDc2X3NldF9wcmVhbWJsZShwcml2LCBwcml2LT5wcmVhbWJsZV90eXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2ZyYWcocHJpdiwgcHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcnRzKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2socHJpdiwKKwkJCQkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGF0NzZfZGVidWcgJiBEQkdfTUlCKSB7CisJCWF0NzZfZHVtcF9taWJfbWFjKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19hZGRyKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19tZ210KHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY193ZXAocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWRvbWFpbihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9waHkocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbG9jYWwocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlc3RhcnQgdGhlIGludGVyZmFjZSAqLworc3RhdGljIHZvaWQgYXQ3Nl9kd29ya19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX3Jlc3RhcnQud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsJLyogc3RvcCBuZXRkZXYgd2F0Y2hkb2cgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CS8qIHN0b3AgdHggZGF0YSBwYWNrZXRzICovCisKKwlhdDc2X3N0YXJ0dXBfZGV2aWNlKHByaXYpOworCisJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCXByaXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19TQ0FOTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfc3RhcnRfc2Nhbik7CisJfSBlbHNlIHsKKwkJcHJpdi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKKwkJYXQ3Nl9zdGFydF9tb25pdG9yKHByaXYpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogSW5pdGlhdGUgc2Nhbm5pbmcgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zdGFydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfc3RhcnRfc2Nhbik7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfU0NBTk5JTkcpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX1NDQU5OSU5HKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBvbmx5IGNsZWFyIHRoZSBic3MgbGlzdCB3aGVuIGEgc2NhbiBpcyBhY3RpdmVseSBpbml0aWF0ZWQsCisJICogb3RoZXJ3aXNlIHNpbXBseSByZWx5IG9uIGF0NzZfYnNzX2xpc3RfdGltZW91dCAqLworCWlmIChwcml2LT5zY2FuX3N0YXRlID09IFNDQU5fSU5fUFJPR1JFU1MpIHsKKwkJYXQ3Nl9mcmVlX2Jzc19saXN0KHByaXYpOworCQlwcml2LT5zY2FuX25lZWRfYW55ID0gMTsKKwl9IGVsc2UKKwkJcHJpdi0+c2Nhbl9uZWVkX2FueSA9IDA7CisKKwlyZXQgPSBhdDc2X3N0YXJ0X3NjYW4ocHJpdiwgMSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHN0YXJ0X3NjYW4gZmFpbGVkIHdpdGggJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fLCByZXQpOworCWVsc2UgeworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwKKwkJCSAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgZm9yICVkIHRpY2tzIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4sCisJCQkJICAgICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBFbmFibGUgb3IgZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfc2V0X3Byb21pc2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zZXRfcHJvbWlzYyk7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByb21pc2N1b3VzX21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cHJvbWlzYyA/IDEgOiAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJvbWlzY3VvdXNfbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogU3VibWl0IFJ4IHVyYiBiYWNrIHRvIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zdWJtaXRfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zdWJtaXRfcngpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBXZSBnb3QgYW4gYXNzb2NpYXRpb24gcmVzcG9uc2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdF9hc3NvYyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKnJlc3AgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqKWJ1Zi0+cGFja2V0OworCXUxNiBhc3NvY19pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmFpZCk7CisJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1KHJlc3AtPnN0YXR1cyk7CisKKwlhdDc2X2RiZyhEQkdfUlhfTUdNVCwgIiVzOiByeCBBc3NvY1Jlc3AgYnNzaWQgJXMgY2FwYSAweCUwNHggc3RhdHVzICIKKwkJICIweCUwNHggYXNzb2NfaWQgMHglMDR4IHJhdGVzICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbWFjMnN0cihyZXNwLT5oZWFkZXIuYWRkcjMpLCBsZTE2X3RvX2NwdShyZXNwLT5jYXBhYmlsaXR5KSwKKwkJIHN0YXR1cywgYXNzb2NfaWQsIGhleDJzdHIocmVzcC0+aW5mb19lbGVtZW50LT5kYXRhLAorCQkJCQkgICByZXNwLT5pbmZvX2VsZW1lbnQtPmxlbikpOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFzc29jUmVzcCBpbiBzdGF0ZSAlcyBpZ25vcmVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWNfc3RhdGVzW3ByaXYtPm1hY19zdGF0ZV0pOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKCFwcml2LT5jdXJyX2Jzcyk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7CisJaWYgKHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCXN0cnVjdCBic3NfaW5mbyAqcHRyID0gcHJpdi0+Y3Vycl9ic3M7CisJCXByaXYtPmFzc29jX2lkID0gYXNzb2NfaWQgJiAweDNmZmY7CisJCS8qIHVwZGF0ZSBpd2NvbmZpZyBwYXJhbXMgKi8KKwkJbWVtY3B5KHByaXYtPmJzc2lkLCBwdHItPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShwcml2LT5lc3NpZCwgcHRyLT5zc2lkLCBwdHItPnNzaWRfbGVuKTsKKwkJcHJpdi0+ZXNzaWRfc2l6ZSA9IHB0ci0+c3NpZF9sZW47CisJCXByaXYtPmNoYW5uZWwgPSBwdHItPmNoYW5uZWw7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfYXNzb2NfZG9uZSk7CisJfSBlbHNlIHsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwl9Cit9CisKKy8qIFByb2Nlc3MgZGlzYXNzb2NpYXRpb24gcmVxdWVzdCBmcm9tIHRoZSBBUCAqLworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210X2Rpc2Fzc29jKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICpyZXNwID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKilidWYtPnBhY2tldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdCA9ICZyZXNwLT5oZWFkZXI7CisKKwlhdDc2X2RiZyhEQkdfUlhfTUdNVCwKKwkJICIlczogcnggRGlzQXNzb2MgYnNzaWQgJXMgcmVhc29uIDB4JTA0eCBkZXN0aW5hdGlvbiAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIobWdtdC0+YWRkcjMpLAorCQkgbGUxNl90b19jcHUocmVzcC0+cmVhc29uKSwgbWFjMnN0cihtZ210LT5hZGRyMSkpOworCisJLyogV2UgYXJlIG5vdCBjb25uZWN0ZWQsIGlnbm9yZSAqLworCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX1NDQU5OSU5HIHx8IHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfSU5JVAorCSAgICB8fCAhcHJpdi0+Y3Vycl9ic3MpCisJCXJldHVybjsKKworCS8qIE5vdCBvdXIgQlNTSUQsIGlnbm9yZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+YWRkcjMsIHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpCisJCXJldHVybjsKKworCS8qIE5vdCBmb3Igb3VyIFNUQSBhbmQgbm90IGJyb2FkY2FzdCwgaWdub3JlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBtZ210LT5hZGRyMSkKKwkgICAgJiYgIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKG1nbXQtPmFkZHIxKSkKKwkJcmV0dXJuOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MgJiYgcHJpdi0+bWFjX3N0YXRlICE9IE1BQ19DT05ORUNURUQKKwkgICAgJiYgcHJpdi0+bWFjX3N0YXRlICE9IE1BQ19KT0lOSU5HKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEaXNBc3NvYyBpbiBzdGF0ZSAlcyBpZ25vcmVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWNfc3RhdGVzW3ByaXYtPm1hY19zdGF0ZV0pOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEKSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJYXQ3Nl9pd2V2ZW50X2Jzc19kaXNjb25uZWN0KHByaXYtPm5ldGRldik7CisJfQorCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdF9hdXRoKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKnJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9hdXRoICopYnVmLT5wYWNrZXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQgPSAmcmVzcC0+aGVhZGVyOworCWludCBzZXFfbnIgPSBsZTE2X3RvX2NwdShyZXNwLT50cmFuc2FjdGlvbik7CisJaW50IGFsZyA9IGxlMTZfdG9fY3B1KHJlc3AtPmFsZ29yaXRobSk7CisJaW50IHN0YXR1cyA9IGxlMTZfdG9fY3B1KHJlc3AtPnN0YXR1cyk7CisKKwlhdDc2X2RiZyhEQkdfUlhfTUdNVCwKKwkJICIlczogcnggQXV0aEZyYW1lIGJzc2lkICVzIGFsZyAlZCBzZXFfbnIgJWQgc3RhdHVzICVkICIKKwkJICJkZXN0aW5hdGlvbiAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihtZ210LT5hZGRyMyksCisJCSBhbGcsIHNlcV9uciwgc3RhdHVzLCBtYWMyc3RyKG1nbXQtPmFkZHIxKSk7CisKKwlpZiAoYWxnID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmIHNlcV9uciA9PSAyKQorCQlhdDc2X2RiZyhEQkdfUlhfTUdNVCwgIiVzOiBBdXRoRnJhbWUgY2hhbGxlbmdlICVzIC4uLiIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBoZXgyc3RyKHJlc3AtPmluZm9fZWxlbWVudCwgMTgpKTsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FVVEgpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGlnbm9yZWQgQXV0aEZyYW1lIGluIHN0YXRlICVzXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWNfc3RhdGVzW3ByaXYtPm1hY19zdGF0ZV0pOworCQlyZXR1cm47CisJfQorCWlmIChwcml2LT5hdXRoX21vZGUgIT0gYWxnKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpZ25vcmVkIEF1dGhGcmFtZSBmb3IgYWxnICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBhbGcpOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKCFwcml2LT5jdXJyX2Jzcyk7CisKKwkvKiBOb3Qgb3VyIEJTU0lEIG9yIG5vdCBmb3Igb3VyIFNUQSwgaWdub3JlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5hZGRyMywgcHJpdi0+Y3Vycl9ic3MtPmJzc2lkKQorCSAgICB8fCBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgbWdtdC0+YWRkcjEpKQorCQlyZXR1cm47CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwlpZiAoc3RhdHVzICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJLyogdHJ5IHRvIGpvaW4gbmV4dCBic3MgKi8KKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX09QRU4gfHwgc2VxX25yID09IDQpIHsKKwkJcHJpdi0+cmV0cmllcyA9IEFTU09DX1JFVFJJRVM7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfQVNTT0MpOworCQlhdDc2X2Fzc29jX3JlcShwcml2LCBwcml2LT5jdXJyX2Jzcyk7CisJCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLAorCQkJICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciArIEhaIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYywgQVNTT0NfVElNRU9VVCk7CisJCXJldHVybjsKKwl9CisKKwlXQVJOX09OKHNlcV9uciAhPSAyKTsKKwlhdDc2X2F1dGhfcmVxKHByaXYsIHByaXYtPmN1cnJfYnNzLCBzZXFfbnIgKyAxLCByZXNwLT5pbmZvX2VsZW1lbnQpOworCWF0NzZfZGJnKERCR19NR01UX1RJTUVSLCAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgKyBIWiIsIF9fZnVuY19fLAorCQkgX19MSU5FX18pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCwgQVVUSF9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210X2RlYXV0aChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKnJlc3AgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKWJ1Zi0+cGFja2V0OworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210ID0gJnJlc3AtPmhlYWRlcjsKKworCWF0NzZfZGJnKERCR19SWF9NR01UIHwgREJHX1BST0dSRVNTLAorCQkgIiVzOiByeCBEZUF1dGggYnNzaWQgJXMgcmVhc29uIDB4JTA0eCBkZXN0aW5hdGlvbiAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIobWdtdC0+YWRkcjMpLAorCQkgbGUxNl90b19jcHUocmVzcC0+cmVhc29uKSwgbWFjMnN0cihtZ210LT5hZGRyMSkpOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVVUSCAmJiBwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DCisJICAgICYmIHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQ09OTkVDVEVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZUF1dGggaW4gc3RhdGUgJXMgaWdub3JlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjX3N0YXRlc1twcml2LT5tYWNfc3RhdGVdKTsKKwkJcmV0dXJuOworCX0KKworCUJVR19PTighcHJpdi0+Y3Vycl9ic3MpOworCisJLyogTm90IG91ciBCU1NJRCwgaWdub3JlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5hZGRyMywgcHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSkKKwkJcmV0dXJuOworCisJLyogTm90IGZvciBvdXIgU1RBIGFuZCBub3QgYnJvYWRjYXN0LCBpZ25vcmUgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPm5ldGRldi0+ZGV2X2FkZHIsIG1nbXQtPmFkZHIxKQorCSAgICAmJiAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIobWdtdC0+YWRkcjEpKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQpCisJCWF0NzZfaXdldmVudF9ic3NfZGlzY29ubmVjdChwcml2LT5uZXRkZXYpOworCisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCWludCB2YXJwYXJfbGVuOworCS8qIGJlYWNvbiBjb250ZW50ICovCisJc3RydWN0IGllZWU4MDIxMV9iZWFjb24gKmJkYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICopYnVmLT5wYWNrZXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQgPSAmYmRhdGEtPmhlYWRlcjsKKworCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHI7CisJc3RydWN0IGJzc19pbmZvICptYXRjaDsJLyogZW50cnkgbWF0Y2hpbmcgYWRkcjMgd2l0aCBpdHMgYnNzaWQgKi8KKwlpbnQgbmV3X2VudHJ5ID0gMDsKKwlpbnQgbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppZTsKKwlpbnQgaGF2ZV9zc2lkID0gMDsKKwlpbnQgaGF2ZV9yYXRlcyA9IDA7CisJaW50IGhhdmVfY2hhbm5lbCA9IDA7CisJaW50IGtlZXBfZ29pbmcgPSAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQpIHsKKwkJLyogaW4gc3RhdGUgTUFDX0NPTk5FQ1RFRCB3ZSB1c2UgdGhlIG1nbXRfdGltZXIgdG8gY29udHJvbAorCQkgICB0aGUgYmVhY29uIG9mIHRoZSBCU1MgKi8KKwkJQlVHX09OKCFwcml2LT5jdXJyX2Jzcyk7CisKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+Y3Vycl9ic3MtPmJzc2lkLCBtZ210LT5hZGRyMykpIHsKKwkJCS8qIFdlIGdvdCBvdXIgQVAncyBiZWFjb24sIGRlZmVyIHRoZSB0aW1lb3V0IGhhbmRsZXIuCisJCQkgICBLaWxsIHBlbmRpbmcgd29yayBmaXJzdCwgYXMgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkKKwkJCSAgIHdvbid0IGRvIGl0LiAqLworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uLAorCQkJCQkgICAgICBCRUFDT05fVElNRU9VVCk7CisJCQlwcml2LT5jdXJyX2Jzcy0+cnNzaSA9IGJ1Zi0+cnNzaTsKKwkJCXByaXYtPmJlYWNvbnNfcmVjZWl2ZWQrKzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCS8qIGxvb2sgaWYgd2UgaGF2ZSB0aGlzIEJTUyBhbHJlYWR5IGluIHRoZSBsaXN0ICovCisJbWF0Y2ggPSBOVUxMOworCisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5ic3NfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaChscHRyLCAmcHJpdi0+YnNzX2xpc3QpIHsKKwkJCXN0cnVjdCBic3NfaW5mbyAqYnNzX3B0ciA9CisJCQkgICAgbGlzdF9lbnRyeShscHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoYnNzX3B0ci0+YnNzaWQsIG1nbXQtPmFkZHIzKSkgeworCQkJCW1hdGNoID0gYnNzX3B0cjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghbWF0Y2gpIHsKKwkJLyogQlNTIG5vdCBpbiB0aGUgbGlzdCAtIGFwcGVuZCBpdCAqLworCQltYXRjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBic3NfaW5mbyksIEdGUF9BVE9NSUMpOworCQlpZiAoIW1hdGNoKSB7CisJCQlhdDc2X2RiZyhEQkdfQlNTX1RBQkxFLAorCQkJCSAiJXM6IGNhbm5vdCBrbWFsbG9jIG5ldyBic3MgaW5mbyAoJXpkIGJ5dGUpIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBzaXplb2Yoc3RydWN0IGJzc19pbmZvKSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJbmV3X2VudHJ5ID0gMTsKKwkJbGlzdF9hZGRfdGFpbCgmbWF0Y2gtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7CisJfQorCisJbWF0Y2gtPmNhcGEgPSBsZTE2X3RvX2NwdShiZGF0YS0+Y2FwYWJpbGl0eSk7CisJbWF0Y2gtPmJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KGJkYXRhLT5iZWFjb25faW50ZXJ2YWwpOworCW1hdGNoLT5yc3NpID0gYnVmLT5yc3NpOworCW1hdGNoLT5saW5rX3F1YWwgPSBidWYtPmxpbmtfcXVhbGl0eTsKKwltYXRjaC0+bm9pc2VfbGV2ZWwgPSBidWYtPm5vaXNlX2xldmVsOworCW1lbWNweShtYXRjaC0+YnNzaWQsIG1nbXQtPmFkZHIzLCBFVEhfQUxFTik7CisJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBic3NpZCAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIG1hYzJzdHIobWF0Y2gtPmJzc2lkKSk7CisKKwlpZSA9IGJkYXRhLT5pbmZvX2VsZW1lbnQ7CisKKwkvKiBsZW5ndGggb2YgdmFyIGxlbmd0aCBiZWFjb24gcGFyYW1ldGVycyAqLworCXZhcnBhcl9sZW4gPSBtaW5fdChpbnQsIGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkgLQorCQkJICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYmVhY29uKSwKKwkJCSAgIEJFQUNPTl9NQVhfREFUQV9MRU5HVEgpOworCisJLyogVGhpcyByb3V0aW5lIHN0ZXBzIHRocm91Z2ggdGhlIGJkYXRhLT5kYXRhIGFycmF5IHRvIGdldAorCSAqIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2Nlc3MgcG9pbnQuCisJICogQ3VycmVudGx5LCB0aGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHJlY2VpcHQgb2Y6IFNTSUQsCisJICogc3VwcG9ydGVkIHRyYW5zZmVyIHJhdGVzIGFuZCBjaGFubmVsLCBpbiBhbnkgb3JkZXIsIHdpdGggc29tZQorCSAqIHRvbGVyYW5jZSBmb3IgaW50ZXJtaXR0ZW50IHVua25vd24gY29kZXMgKGFsdGhvdWdoIHRoaXMKKwkgKiBmdW5jdGlvbmFsaXR5IG1heSBub3QgYmUgbmVjZXNzYXJ5IGFzIHRoZSB1c2VmdWwgaW5mb3JtYXRpb24gd2lsbAorCSAqIHVzdWFsbHkgYXJyaXZlIGluIGNvbnNlY3V0aXZlbHksIGJ1dCB0aGVyZSBoYXZlIGJlZW4gc29tZQorCSAqIHJlcG9ydHMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIGZpZWxkcyBhcnJpdmluZyBpbiBhCisJICogZGlmZmVyZW50IG9yZGVyKS4KKwkgKiBJdCBkb2VzIG5vdCBzdXBwb3J0IGFueSBtb3JlIElFIHR5cGVzIGFsdGhvdWdoIE1GSUVfVFlQRV9USU0gbWF5CisJICogYmUgc3VwcG9ydGVkIChvbiBteSBBUCBhdCBsZWFzdCkuCisJICogVGhlIGJkYXRhLT5kYXRhIGFycmF5IGlzIGFib3V0IDE1MDAgYnl0ZXMgbG9uZyBidXQgb25seSB+MzYgb2YgdGhvc2UKKwkgKiBieXRlcyBhcmUgdXNlZnVsLCBoZW5jZSB0aGUgaGF2ZV9zc2lkIGV0YyBvcHRpbWl6YXRpb25zLiAqLworCisJd2hpbGUgKGtlZXBfZ29pbmcgJiYKKwkgICAgICAgKCgmaWUtPmRhdGFbaWUtPmxlbl0gLSAodTggKiliZGF0YS0+aW5mb19lbGVtZW50KSA8PQorCQl2YXJwYXJfbGVuKSkgeworCisJCXN3aXRjaCAoaWUtPmlkKSB7CisKKwkJY2FzZSBNRklFX1RZUEVfU1NJRDoKKwkJCWlmIChoYXZlX3NzaWQpCisJCQkJYnJlYWs7CisKKwkJCWxlbiA9IG1pbl90KGludCwgSVdfRVNTSURfTUFYX1NJWkUsIGllLT5sZW4pOworCisJCQkvKiB3ZSBjb3B5IG9ubHkgaWYgdGhpcyBpcyBhIG5ldyBlbnRyeSwKKwkJCSAgIG9yIHRoZSBpbmNvbWluZyBTU0lEIGlzIG5vdCBhIGhpZGRlbiBTU0lELiBUaGlzCisJCQkgICB3aWxsIHByb3RlY3QgdXMgZnJvbSBvdmVyd3JpdGluZyBhIHJlYWwgU1NJRCByZWFkCisJCQkgICBpbiBhIFByb2JlUmVzcG9uc2Ugd2l0aCBhIGhpZGRlbiBvbmUgZnJvbSBhCisJCQkgICBmb2xsb3dpbmcgYmVhY29uLiAqLworCQkJaWYgKCFuZXdfZW50cnkgJiYgYXQ3Nl9pc19oaWRkZW5fc3NpZChpZS0+ZGF0YSwgbGVuKSkgeworCQkJCWhhdmVfc3NpZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW1hdGNoLT5zc2lkX2xlbiA9IGxlbjsKKwkJCW1lbWNweShtYXRjaC0+c3NpZCwgaWUtPmRhdGEsIGxlbik7CisJCQlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IFNTSUQgLSAlLipzIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZW4sIG1hdGNoLT5zc2lkKTsKKwkJCWhhdmVfc3NpZCA9IDE7CisJCQlicmVhazsKKworCQljYXNlIE1GSUVfVFlQRV9SQVRFUzoKKwkJCWlmIChoYXZlX3JhdGVzKQorCQkJCWJyZWFrOworCisJCQltYXRjaC0+cmF0ZXNfbGVuID0KKwkJCSAgICBtaW5fdChpbnQsIHNpemVvZihtYXRjaC0+cmF0ZXMpLCBpZS0+bGVuKTsKKwkJCW1lbWNweShtYXRjaC0+cmF0ZXMsIGllLT5kYXRhLCBtYXRjaC0+cmF0ZXNfbGVuKTsKKwkJCWhhdmVfcmF0ZXMgPSAxOworCQkJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBTVVBQT1JURUQgUkFURVMgJXMiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsCisJCQkJIGhleDJzdHIoaWUtPmRhdGEsIGllLT5sZW4pKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJRV9UWVBFX0RTX1NFVDoKKwkJCWlmIChoYXZlX2NoYW5uZWwpCisJCQkJYnJlYWs7CisKKwkJCW1hdGNoLT5jaGFubmVsID0gaWUtPmRhdGFbMF07CisJCQloYXZlX2NoYW5uZWwgPSAxOworCQkJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBDSEFOTkVMIC0gJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hdGNoLT5jaGFubmVsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJRV9UWVBFX0NGX1NFVDoKKwkJY2FzZSBNRklFX1RZUEVfVElNOgorCQljYXNlIE1GSUVfVFlQRV9JQlNTX1NFVDoKKwkJZGVmYXVsdDoKKwkJCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogYmVhY29uIElFIGlkICVkIGxlbiAlZCAlcyIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaWUtPmlkLCBpZS0+bGVuLAorCQkJCSBoZXgyc3RyKGllLT5kYXRhLCBpZS0+bGVuKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgaW5mb3JtYXRpb25hbCBlbGVtZW50ICovCisJCW5leHRfaWUoJmllKTsKKworCQkvKiBPcHRpbWl6YXRpb246IGFmdGVyIGFsbCwgdGhlIGJkYXRhLT5kYXRhIGFycmF5IGlzCisJCSAqIHZhcnBhcl9sZW4gYnl0ZXMgbG9uZywgd2hlcmVhcyB3ZSBnZXQgYWxsIG9mIHRoZSB1c2VmdWwKKwkJICogaW5mb3JtYXRpb24gYWZ0ZXIgb25seSB+MzYgYnl0ZXMsIHRoaXMgc2F2ZXMgdXMgYSBsb3Qgb2YKKwkJICogdGltZSAoYW5kIHRyb3VibGUgYXMgdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSBhcnJheQorCQkgKiBjb3VsZCBiZSBmdWxsIG9mIGp1bmspCisJCSAqIENvbW1lbnQgdGhpcyBvdXQgaWYgeW91IHdhbnQgdG8gc2VlIHdoYXQgb3RoZXIgaW5mb3JtYXRpb24KKwkJICogY29tZXMgZnJvbSB0aGUgQVAgLSBhbHRob3VnaCBsaXR0bGUgb2YgaXQgbWF5IGJlIHVzZWZ1bCAqLworCX0KKworCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogRmluaXNoZWQgcHJvY2Vzc2luZyBiZWFjb24gZGF0YSIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUpOworCisJbWF0Y2gtPmxhc3RfcnggPSBqaWZmaWVzOwkvKiByZWNvcmQgbGFzdCByeCBvZiBiZWFjb24gKi8KKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworfQorCisvKiBDYWxjdWxhdGUgdGhlIGxpbmsgbGV2ZWwgZnJvbSBhIGdpdmVuIHJ4X2J1ZmZlciAqLworc3RhdGljIHZvaWQgYXQ3Nl9jYWxjX2xldmVsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmLAorCQkJICAgIHN0cnVjdCBpd19xdWFsaXR5ICpxdWFsKQoreworCS8qIGp1c3QgYSBndWVzcyBmb3Igbm93LCBtaWdodCBiZSBkaWZmZXJlbnQgZm9yIG90aGVyIGNoaXBzICovCisJaW50IG1heF9yc3NpID0gNDI7CisKKwlxdWFsLT5sZXZlbCA9IChidWYtPnJzc2kgKiAxMDAgLyBtYXhfcnNzaSk7CisJaWYgKHF1YWwtPmxldmVsID4gMTAwKQorCQlxdWFsLT5sZXZlbCA9IDEwMDsKKwlxdWFsLT51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKK30KKworLyogQ2FsY3VsYXRlIHRoZSBsaW5rIHF1YWxpdHkgZnJvbSBhIGdpdmVuIHJ4X2J1ZmZlciAqLworc3RhdGljIHZvaWQgYXQ3Nl9jYWxjX3F1YWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYsCisJCQkgICBzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbCkKK3sKKwlpZiAoYXQ3Nl9pc19pbnRlcnNpbChwcml2LT5ib2FyZF90eXBlKSkKKwkJcXVhbC0+cXVhbCA9IGJ1Zi0+bGlua19xdWFsaXR5OworCWVsc2UgeworCQl1bnNpZ25lZCBsb25nIGVsYXBzZWQ7CisKKwkJLyogVXBkYXRlIHF1YWwgYXQgbW9zdCBvbmNlIGEgc2Vjb25kICovCisJCWVsYXBzZWQgPSBqaWZmaWVzIC0gcHJpdi0+YmVhY29uc19sYXN0X3F1YWw7CisJCWlmIChlbGFwc2VkIDwgMSAqIEhaKQorCQkJcmV0dXJuOworCisJCXF1YWwtPnF1YWwgPSBxdWFsLT5sZXZlbCAqIHByaXYtPmJlYWNvbnNfcmVjZWl2ZWQgKgorCQkgICAgbXNlY3NfdG9famlmZmllcyhwcml2LT5iZWFjb25fcGVyaW9kKSAvIGVsYXBzZWQ7CisKKwkJcHJpdi0+YmVhY29uc19sYXN0X3F1YWwgPSBqaWZmaWVzOworCQlwcml2LT5iZWFjb25zX3JlY2VpdmVkID0gMDsKKwl9CisJcXVhbC0+cXVhbCA9IChxdWFsLT5xdWFsID4gMTAwKSA/IDEwMCA6IHF1YWwtPnF1YWw7CisJcXVhbC0+dXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKK30KKworLyogQ2FsY3VsYXRlIHRoZSBub2lzZSBxdWFsaXR5IGZyb20gYSBnaXZlbiByeF9idWZmZXIgKi8KK3N0YXRpYyB2b2lkIGF0NzZfY2FsY19ub2lzZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiwKKwkJCSAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbCkKK3sKKwlxdWFsLT5ub2lzZSA9IDA7CisJcXVhbC0+dXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfdXBkYXRlX3dzdGF0cyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpd19xdWFsaXR5ICpxdWFsID0gJnByaXYtPndzdGF0cy5xdWFsOworCisJaWYgKGJ1Zi0+cnNzaSAmJiBwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCkgeworCQlxdWFsLT51cGRhdGVkID0gMDsKKwkJYXQ3Nl9jYWxjX2xldmVsKHByaXYsIGJ1ZiwgcXVhbCk7CisJCWF0NzZfY2FsY19xdWFsKHByaXYsIGJ1ZiwgcXVhbCk7CisJCWF0NzZfY2FsY19ub2lzZShwcml2LCBidWYsIHF1YWwpOworCX0gZWxzZSB7CisJCXF1YWwtPnF1YWwgPSAwOworCQlxdWFsLT5sZXZlbCA9IDA7CisJCXF1YWwtPm5vaXNlID0gMDsKKwkJcXVhbC0+dXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWYtPnBhY2tldDsKKwl1MTYgZnJhbWVjdGwgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jdGwpOworCisJLyogdXBkYXRlIHdzdGF0cyAqLworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0lOSVQgJiYgcHJpdi0+bWFjX3N0YXRlICE9IE1BQ19TQ0FOTklORykgeworCQkvKiBqYWw6IHRoaXMgaXMgYSBkaXJ0eSBoYWNrIG5lZWRlZCBieSBUaW0gaW4gYWQtaG9jIG1vZGUgKi8KKwkJLyogRGF0YSBwYWNrZXRzIGFsd2F5cyBzZWVtIHRvIGhhdmUgYSAwIGxpbmsgbGV2ZWwsIHNvIHdlCisJCSAgIG9ubHkgcmVhZCBsaW5rIHF1YWxpdHkgaW5mbyBmcm9tIG1hbmFnZW1lbnQgcGFja2V0cy4KKwkJICAgQXRtZWwgZHJpdmVyIGFjdHVhbGx5IGF2ZXJhZ2VzIHRoZSBwcmVzZW50LCBhbmQgcHJldmlvdXMKKwkJICAgdmFsdWVzLCB3ZSBqdXN0IHByZXNlbnQgdGhlIHJhdyB2YWx1ZSBhdCB0aGUgbW9tZW50IC0gVEpTICovCisJCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MKKwkJICAgIHx8IChwcml2LT5jdXJyX2JzcworCQkJJiYgIWNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5hZGRyMywKKwkJCQkJICAgICAgIHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpKQorCQkJYXQ3Nl91cGRhdGVfd3N0YXRzKHByaXYsIGJ1Zik7CisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX01HTVRfQ09OVEVOVCwgIiVzIHJ4IG1nbXQgZnJhbWVjdGwgMHgleCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYW1lY3RsLAorCQkgaGV4MnN0cihtZ210LCBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpKSk7CisKKwlzd2l0Y2ggKGZyYW1lY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJYXQ3Nl9yeF9tZ210X2JlYWNvbihwcml2LCBidWYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CisJCWF0NzZfcnhfbWdtdF9hc3NvYyhwcml2LCBidWYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgorCQlhdDc2X3J4X21nbXRfZGlzYXNzb2MocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlhdDc2X3J4X21nbXRfYXV0aChwcml2LCBidWYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwkJYXQ3Nl9yeF9tZ210X2RlYXV0aChwcml2LCBidWYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWdub3JpbmcgZnJhbWUgd2l0aCBmcmFtZWN0bCAweCUwNHhcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYW1lY3RsKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qIENvbnZlcnQgdGhlIDgwMi4xMSBoZWFkZXIgaW50byBhbiBldGhlcm5ldC1zdHlsZSBoZWFkZXIsIG1ha2Ugc2tiCisgKiByZWFkeSBmb3IgY29uc3VtcHRpb24gYnkgbmV0aWZfcngoKSAqLworc3RhdGljIHZvaWQgYXQ3Nl9pZWVlODAyMTFfdG9fZXRoKHN0cnVjdCBza19idWZmICpza2IsIGludCBpd19tb2RlKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICppODAyXzExX2hkcjsKKwlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyX3A7CisJdTggKnNyY19hZGRyOworCXU4ICpkZXN0X2FkZHI7CisKKwlpODAyXzExX2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKworCS8qIFRoYXQgd291bGQgYmUgdGhlIGV0aGVybmV0IGhlYWRlciBpZiB0aGUgaGFyZHdhcmUgY29udmVydGVkCisJICogdGhlIGZyYW1lIGZvciB1cy4gIE1ha2Ugc3VyZSB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24KKwkgKiBtYXRjaCB0aGUgODAyLjExIGhlYWRlci4gIFdoaWNoIGhhcmR3YXJlIGRvZXMgaXQ/ICovCisJZXRoX2hkcl9wID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVsbChza2IsIElFRUU4MDIxMV8zQUREUl9MRU4pOworCisJZGVzdF9hZGRyID0gaTgwMl8xMV9oZHItPmFkZHIxOworCWlmIChpd19tb2RlID09IElXX01PREVfQURIT0MpCisJCXNyY19hZGRyID0gaTgwMl8xMV9oZHItPmFkZHIyOworCWVsc2UKKwkJc3JjX2FkZHIgPSBpODAyXzExX2hkci0+YWRkcjM7CisKKwlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyX3AtPmhfc291cmNlLCBzcmNfYWRkcikgJiYKKwkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyX3AtPmhfZGVzdCwgZGVzdF9hZGRyKSkKKwkJLyogWWVzLCB3ZSBhbHJlYWR5IGhhdmUgYW4gZXRoZXJuZXQgaGVhZGVyICovCisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJZWxzZSB7CisJCXUxNiBsZW47CisKKwkJLyogTmVlZCB0byBidWlsZCBhbiBldGhlcm5ldCBoZWFkZXIgKi8KKwkJaWYgKCFtZW1jbXAoc2tiLT5kYXRhLCBzbmFwc2lnLCBzaXplb2Yoc25hcHNpZykpKSB7CisJCQkvKiBTTkFQIGZyYW1lIC0gZGVjYXBzdWxhdGUsIGtlZXAgcHJvdG8gKi8KKwkJCXNrYl9wdXNoKHNrYiwgb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90bykgLQorCQkJCSBzaXplb2YocmZjMTA0MnNpZykpOworCQkJbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIDgwMi4zIGZyYW1lLCBwcm90byBpcyBsZW5ndGggKi8KKwkJCWxlbiA9IHNrYi0+bGVuOworCQkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCX0KKworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQlldGhfaGRyX3AgPSBldGhfaGRyKHNrYik7CisJCS8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGlzIG9yZGVyIChldGhfaGRyX3AtPmhfZGVzdCBtYXkKKwkJICogb3ZlcmxhcCBzcmNfYWRkcikgKi8KKwkJbWVtY3B5KGV0aF9oZHJfcC0+aF9zb3VyY2UsIHNyY19hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShldGhfaGRyX3AtPmhfZGVzdCwgZGVzdF9hZGRyLCBFVEhfQUxFTik7CisJCWlmIChsZW4pCisJCQlldGhfaGRyX3AtPmhfcHJvdG8gPSBodG9ucyhsZW4pOworCX0KKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKK30KKworLyogQ2hlY2sgZm9yIGZyYWdtZW50ZWQgZGF0YSBpbiBwcml2LT5yeF9za2IuIElmIHRoZSBwYWNrZXQgd2FzIG5vIGZyYWdtZW50CisgICBvciBpdCB3YXMgdGhlIGxhc3Qgb2YgYSBmcmFnbWVudCBzZXQgYSBza2IgY29udGFpbmluZyB0aGUgd2hvbGUgcGFja2V0CisgICBpcyByZXR1cm5lZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBPdGhlcndpc2Ugd2UgZ2V0IE5VTEwgYW5kIGFyZQorICAgZG9uZSBhbmQgdGhlIHBhY2tldCBpcyBlaXRoZXIgc3RvcmVkIGluc2lkZSB0aGUgZnJhZ21lbnQgYnVmZmVyCisgICBvciB0aHJvd24gYXdheS4gIEV2ZXJ5IHJldHVybmVkIHNrYiBzdGFydHMgd2l0aCB0aGUgaWVlZTgwMl8xMSBoZWFkZXIKKyAgIGFuZCBjb250YWlucyBfbm9fIEZDUyBhdCB0aGUgZW5kICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0NzZfY2hlY2tfZm9yX3J4X2ZyYWdzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X3NrYjsKKwlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiA9IChzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmk4MDJfMTFfaGRyID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopYnVmLT5wYWNrZXQ7CisJLyogc2VxX2N0cmwsIGZyYWdtZW50X251bWJlciwgc2VxdWVuY2UgbnVtYmVyIG9mIG5ldyBwYWNrZXQgKi8KKwl1MTYgc2N0bCA9IGxlMTZfdG9fY3B1KGk4MDJfMTFfaGRyLT5zZXFfY3RsKTsKKwl1MTYgZnJhZ25yID0gc2N0bCAmIDB4ZjsKKwl1MTYgc2VxbnIgPSBzY3RsID4+IDQ7CisJdTE2IGZyYW1lX2N0bCA9IGxlMTZfdG9fY3B1KGk4MDJfMTFfaGRyLT5mcmFtZV9jdGwpOworCisJLyogTGVuZ3RoIGluY2x1ZGluZyB0aGUgSUVFRTgwMi4xMSBoZWFkZXIsIGJ1dCB3aXRob3V0IHRoZSB0cmFpbGluZworCSAqIEZDUyBhbmQgd2l0aG91dCB0aGUgQXRtZWwgUnggaGVhZGVyICovCisJaW50IGxlbmd0aCA9IGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkgLSBJRUVFODAyMTFfRkNTX0xFTjsKKworCS8qIHdoZXJlIGRvZXMgdGhlIGRhdGEgcGF5bG9hZCBzdGFydCBpbiBza2ItPmRhdGEgPyAqLworCXU4ICpkYXRhID0gaTgwMl8xMV9oZHItPnBheWxvYWQ7CisKKwkvKiBsZW5ndGggb2YgcGF5bG9hZCwgZXhjbC4gdGhlIHRyYWlsaW5nIEZDUyAqLworCWludCBkYXRhX2xlbiA9IGxlbmd0aCAtIElFRUU4MDIxMV8zQUREUl9MRU47CisKKwlpbnQgaTsKKwlzdHJ1Y3QgcnhfZGF0YV9idWYgKmJwdHIsICpvcHRyOworCXVuc2lnbmVkIGxvbmcgb2xkZXN0ID0gfjBVTDsKKworCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJICIlczogcnggZGF0YSBmcmFtZV9jdGwgJTA0eCBhZGRyMiAlcyBzZXEvZnJhZyAlZC8lZCAiCisJCSAibGVuZ3RoICVkIGRhdGEgJWQ6ICVzIC4uLiIsIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhbWVfY3RsLAorCQkgbWFjMnN0cihpODAyXzExX2hkci0+YWRkcjIpLCBzZXFuciwgZnJhZ25yLCBsZW5ndGgsIGRhdGFfbGVuLAorCQkgaGV4MnN0cihkYXRhLCAzMikpOworCisJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTX1NLQiwgIiVzOiBpbmNvbWluZyBza2I6IGhlYWQgJXAgZGF0YSAlcCAiCisJCSAidGFpbCAlcCBlbmQgJXAgbGVuICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBza2ItPmhlYWQsCisJCSBza2ItPmRhdGEsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgc2tiX2VuZF9wb2ludGVyKHNrYiksCisJCSBza2ItPmxlbik7CisKKwlpZiAoZGF0YV9sZW4gPCAwKSB7CisJCS8qIG1ha2Ugc3VyZSBkYXRhIHN0YXJ0cyBpbiB0aGUgYnVmZmVyICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkYXRhIGZyYW1lIHRvbyBzaG9ydFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCVdBUk5fT04obGVuZ3RoIDw9IEFUNzZfUlhfSERSTEVOKTsKKwlpZiAobGVuZ3RoIDw9IEFUNzZfUlhfSERSTEVOKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHJlbW92ZSB0aGUgYXQ3Nl9yeF9idWZmZXIgaGVhZGVyIC0gd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlICovCisJLyogd2UgbmVlZCB0aGUgSUVFRTgwMi4xMSBoZWFkZXIgKGZvciB0aGUgYWRkcmVzc2VzKSBpZiB0aGlzIHBhY2tldAorCSAgIGlzIHRoZSBmaXJzdCBvZiBhIGNoYWluICovCisJc2tiX3B1bGwoc2tiLCBBVDc2X1JYX0hEUkxFTik7CisKKwkvKiByZW1vdmUgRkNTIGF0IGVuZCAqLworCXNrYl90cmltKHNrYiwgbGVuZ3RoKTsKKworCWF0NzZfZGJnKERCR19SWF9GUkFHU19TS0IsICIlczogdHJpbW1lZCBza2I6IGhlYWQgJXAgZGF0YSAlcCB0YWlsICVwICIKKwkJICJlbmQgJXAgbGVuICVkIGRhdGEgJXAgZGF0YV9sZW4gJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBza2ItPmhlYWQsIHNrYi0+ZGF0YSwgc2tiX3RhaWxfcG9pbnRlcihza2IpLAorCQkgc2tiX2VuZF9wb2ludGVyKHNrYiksIHNrYi0+bGVuLCBkYXRhLCBkYXRhX2xlbik7CisKKwlpZiAoZnJhZ25yID09IDAgJiYgIShmcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSB7CisJCS8qIHVuZnJhZ21lbnRlZCBwYWNrZXQgcmVjZWl2ZWQgKi8KKwkJLyogVXNlIGEgbmV3IHNrYiBmb3IgdGhlIG5leHQgcmVjZWl2ZSAqLworCQlwcml2LT5yeF9za2IgPSBOVUxMOworCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsICIlczogdW5mcmFnbWVudGVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHNrYjsKKwl9CisKKwkvKiBsb29rIGlmIHdlJ3ZlIGdvdCBhIGNoYWluIGZvciB0aGUgc2VuZGVyIGFkZHJlc3MuCisJICAgYWZ0ZXJ3YXJkcyBvcHRyIHBvaW50cyB0byBmaXJzdCBmcmVlIG9yIHRoZSBvbGRlc3QgZW50cnksCisJICAgb3IsIGlmIGkgPCBOUl9SWF9EQVRBX0JVRiwgYnB0ciBwb2ludHMgdG8gdGhlIGVudHJ5IGZvciB0aGUKKwkgICBzZW5kZXIgYWRkcmVzcyAqLworCS8qIGRldGVybWluaW5nIHRoZSBvbGRlc3QgZW50cnkgZG9lc24ndCBjb3BlIHdpdGggamlmZmllcyB3cmFwcGluZworCSAgIGJ1dCBJIGRvbid0IGNhcmUgdG8gZGVsZXRlIGEgeW91bmcgZW50cnkgYXQgdGhlc2UgcmFyZSBtb21lbnRzIC4uLiAqLworCisJYnB0ciA9IHByaXYtPnJ4X2RhdGE7CisJb3B0ciA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IE5SX1JYX0RBVEFfQlVGOyBpKyssIGJwdHIrKykgeworCQlpZiAoIWJwdHItPnNrYikgeworCQkJb3B0ciA9IGJwdHI7CisJCQlvbGRlc3QgPSAwVUw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGk4MDJfMTFfaGRyLT5hZGRyMiwgYnB0ci0+c2VuZGVyKSkKKwkJCWJyZWFrOworCisJCWlmICghb3B0cikgeworCQkJb3B0ciA9IGJwdHI7CisJCQlvbGRlc3QgPSBicHRyLT5sYXN0X3J4OworCQl9IGVsc2UgaWYgKGJwdHItPmxhc3RfcnggPCBvbGRlc3QpCisJCQlvcHRyID0gYnB0cjsKKwl9CisKKwlpZiAoaSA8IE5SX1JYX0RBVEFfQlVGKSB7CisKKwkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLCAiJXM6ICVkLiBjYWNoZWVudHJ5IChzZXEvZnJhZyA9ICVkLyVkKSAiCisJCQkgIm1hdGNoZWQgc2VuZGVyIGFkZHIiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaSwgYnB0ci0+c2VxbnIsIGJwdHItPmZyYWducik7CisKKwkJLyogYnB0ciBwb2ludHMgdG8gYW4gZW50cnkgZm9yIHRoZSBzZW5kZXIgYWRkcmVzcyAqLworCQlpZiAoYnB0ci0+c2VxbnIgPT0gc2VxbnIpIHsKKwkJCWludCBsZWZ0OworCQkJLyogdGhlIGZyYWdtZW50IGhhcyB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIgKi8KKwkJCWlmICgoKGJwdHItPmZyYWduciArIDEpICYgMHhmKSAhPSBmcmFnbnIpIHsKKwkJCQkvKiB3cm9uZyBmcmFnbWVudCBudW1iZXIgLT4gaWdub3JlIGl0ICovCisJCQkJLyogaXMgJiAweGYgbmVjZXNzYXJ5IGFib3ZlID8/PyAqLworCQkJCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJCQkJICIlczogZnJhZyBuciBtaXNtYXRjaDogJWQgKyAxICE9ICVkIiwKKwkJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgYnB0ci0+ZnJhZ25yLAorCQkJCQkgZnJhZ25yKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWJwdHItPmxhc3RfcnggPSBqaWZmaWVzOworCQkJLyogdGhlIG5leHQgZm9sbG93aW5nIGZyYWdtZW50IG51bWJlciAtPgorCQkJICAgYWRkIHRoZSBkYXRhIGF0IHRoZSBlbmQgKi8KKworCQkJLyogZm9yIHRlc3Qgb25seSA/Pz8gKi8KKwkJCWxlZnQgPSBza2JfdGFpbHJvb20oYnB0ci0+c2tiKTsKKwkJCWlmIChsZWZ0IDwgZGF0YV9sZW4pCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiJXM6IG9ubHkgJWQgYnl0ZSBmcmVlIChuZWVkICVkKVxuIiwKKwkJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZWZ0LCBkYXRhX2xlbik7CisJCQllbHNlCisJCQkJbWVtY3B5KHNrYl9wdXQoYnB0ci0+c2tiLCBkYXRhX2xlbiksIGRhdGEsCisJCQkJICAgICAgIGRhdGFfbGVuKTsKKworCQkJYnB0ci0+ZnJhZ25yID0gZnJhZ25yOworCQkJaWYgKGZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJLyogdGhpcyB3YXMgdGhlIGxhc3QgZnJhZ21lbnQgLSBzZW5kIGl0ICovCisJCQlza2IgPSBicHRyLT5za2I7CisJCQlicHRyLT5za2IgPSBOVUxMOwkvKiBmcmVlIHRoZSBlbnRyeSAqLworCQkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLCAiJXM6IGxhc3QgZnJhZyBvZiBzZXEgJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHNlcW5yKTsKKwkJCXJldHVybiBza2I7CisJCX0KKworCQkvKiBnb3QgYW5vdGhlciBzZXF1ZW5jZSBudW1iZXIgKi8KKwkJaWYgKGZyYWduciA9PSAwKSB7CisJCQkvKiBpdCdzIHRoZSBzdGFydCBvZiBhIG5ldyBjaGFpbiAtIHJlcGxhY2UgdGhlCisJCQkgICBvbGQgb25lIGJ5IHRoaXMgKi8KKwkJCS8qIGJwdHItPnNlbmRlciBoYXMgdGhlIGNvcnJlY3QgdmFsdWUgYWxyZWFkeSAqLworCQkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkJCSAiJXM6IHN0YXJ0IG9mIG5ldyBzZXEgJWQsIHJlbW92aW5nIG9sZCBzZXEgJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHNlcW5yLCBicHRyLT5zZXFucik7CisJCQlicHRyLT5zZXFuciA9IHNlcW5yOworCQkJYnB0ci0+ZnJhZ25yID0gMDsKKwkJCWJwdHItPmxhc3RfcnggPSBqaWZmaWVzOworCQkJLyogc3dhcCBicHRyLT5za2IgYW5kIHByaXYtPnJ4X3NrYiAqLworCQkJc2tiID0gYnB0ci0+c2tiOworCQkJYnB0ci0+c2tiID0gcHJpdi0+cnhfc2tiOworCQkJcHJpdi0+cnhfc2tiID0gc2tiOworCQl9IGVsc2UgeworCQkJLyogaXQgZnJvbSB0aGUgbWlkZGxlIG9mIGEgbmV3IGNoYWluIC0+CisJCQkgICBkZWxldGUgdGhlIG9sZCBlbnRyeSBhbmQgc2tpcCB0aGUgbmV3IG9uZSAqLworCQkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkJCSAiJXM6IG1pZGRsZSBvZiBuZXcgc2VxICVkICglZCkgIgorCQkJCSAicmVtb3Zpbmcgb2xkIHNlcSAlZCIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgc2VxbnIsIGZyYWduciwKKwkJCQkgYnB0ci0+c2VxbnIpOworCQkJZGV2X2tmcmVlX3NrYihicHRyLT5za2IpOworCQkJYnB0ci0+c2tiID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBpZiB3ZSBkaWRuJ3QgZmluZCBhIGNoYWluIGZvciB0aGUgc2VuZGVyIGFkZHJlc3MsIG9wdHIKKwkgICBwb2ludHMgZWl0aGVyIHRvIHRoZSBmaXJzdCBmcmVlIG9yIHRoZSBvbGRlc3QgZW50cnkgKi8KKworCWlmIChmcmFnbnIgIT0gMCkgeworCQkvKiB0aGlzIGlzIG5vdCB0aGUgYmVnaW4gb2YgYSBmcmFnbWVudCBjaGFpbiAuLi4gKi8KKwkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLAorCQkJICIlczogbm8gY2hhaW4gZm9yIG5vbi1maXJzdCBmcmFnbWVudCAoJWQpIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYWducik7CisJCXJldHVybiBOVUxMOworCX0KKworCUJVR19PTighb3B0cik7CisJaWYgKG9wdHItPnNrYikgeworCQkvKiBzd2FwIHRoZSBza2IncyAqLworCQlza2IgPSBvcHRyLT5za2I7CisJCW9wdHItPnNrYiA9IHByaXYtPnJ4X3NrYjsKKwkJcHJpdi0+cnhfc2tiID0gc2tiOworCisJCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJCSAiJXM6IGZyZWUgb2xkIGNvbnRlbnRzOiBzZW5kZXIgJXMgc2VxL2ZyYWcgJWQvJWQiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihvcHRyLT5zZW5kZXIpLAorCQkJIG9wdHItPnNlcW5yLCBvcHRyLT5mcmFnbnIpOworCisJfSBlbHNlIHsKKwkJLyogdGFrZSB0aGUgc2tiIGZyb20gcHJpdi0+cnhfc2tiICovCisJCW9wdHItPnNrYiA9IHByaXYtPnJ4X3NrYjsKKwkJLyogbGV0IGF0NzZfc3VibWl0X3J4X3VyYigpIGFsbG9jYXRlIGEgbmV3IHNrYiAqLworCQlwcml2LT5yeF9za2IgPSBOVUxMOworCisJCWF0NzZfZGJnKERCR19SWF9GUkFHUywgIiVzOiB1c2UgYSBmcmVlIGVudHJ5IiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUpOworCX0KKwltZW1jcHkob3B0ci0+c2VuZGVyLCBpODAyXzExX2hkci0+YWRkcjIsIEVUSF9BTEVOKTsKKwlvcHRyLT5zZXFuciA9IHNlcW5yOworCW9wdHItPmZyYWduciA9IDA7CisJb3B0ci0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogUnggaW50ZXJydXB0OiB3ZSBleHBlY3QgdGhlIGNvbXBsZXRlIGRhdGEgYnVmZmVyIGluIHByaXYtPnJ4X3NrYiAqLworc3RhdGljIHZvaWQgYXQ3Nl9yeF9kYXRhKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X3NrYjsKKwlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiA9IChzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmk4MDJfMTFfaGRyOworCWludCBsZW5ndGggPSBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpOworCisJYXQ3Nl9kYmcoREJHX1JYX0RBVEEsICIlcyByZWNlaXZlZCBkYXRhIHBhY2tldDogJXMiLCBuZXRkZXYtPm5hbWUsCisJCSBoZXgyc3RyKHNrYi0+ZGF0YSwgQVQ3Nl9SWF9IRFJMRU4pKTsKKworCWF0NzZfZGJnKERCR19SWF9EQVRBX0NPTlRFTlQsICJyeCBwYWNrZXQ6ICVzIiwKKwkJIGhleDJzdHIoc2tiLT5kYXRhICsgQVQ3Nl9SWF9IRFJMRU4sIGxlbmd0aCkpOworCisJc2tiID0gYXQ3Nl9jaGVja19mb3JfcnhfZnJhZ3MocHJpdik7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCS8qIEF0bWVsIGhlYWRlciBhbmQgdGhlIEZDUyBhcmUgYWxyZWFkeSByZW1vdmVkICovCisJaTgwMl8xMV9oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilza2ItPmRhdGE7CisKKwlza2ItPmRldiA9IG5ldGRldjsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CS8qIFRPRE86IHNob3VsZCBjaGVjayBDUkMgKi8KKworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihpODAyXzExX2hkci0+YWRkcjEpKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGk4MDJfMTFfaGRyLT5hZGRyMSwgbmV0ZGV2LT5icm9hZGNhc3QpKQorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7CisJCWVsc2UKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfTVVMVElDQVNUOworCX0gZWxzZSBpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGk4MDJfMTFfaGRyLT5hZGRyMSwgbmV0ZGV2LT5kZXZfYWRkcikpCisJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCisJYXQ3Nl9pZWVlODAyMTFfdG9fZXRoKHNrYiwgcHJpdi0+aXdfbW9kZSk7CisKKwluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCW5ldGlmX3J4KHNrYik7CisJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X21vbml0b3JfbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3J4X3JhZGlvdGFwICpydDsKKwl1OCAqcGF5bG9hZDsKKwlpbnQgc2tibGVuOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYgPQorCSAgICAoc3RydWN0IGF0NzZfcnhfYnVmZmVyICopcHJpdi0+cnhfc2tiLT5kYXRhOworCS8qIGxlbmd0aCBpbmNsdWRpbmcgdGhlIElFRUU4MDIuMTEgaGVhZGVyIGFuZCB0aGUgdHJhaWxpbmcgRkNTLAorCSAgIGJ1dCBub3QgYXQ3Nl9yeF9idWZmZXIgKi8KKwlpbnQgbGVuZ3RoID0gbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKworCWlmIChsZW5ndGggPCBJRUVFODAyMTFfRkNTX0xFTikgeworCQkvKiBidWZmZXIgY29udGFpbnMgbm8gZGF0YSAqLworCQlhdDc2X2RiZyhEQkdfTU9OSVRPUl9NT0RFLAorCQkJICIlczogTU9OSVRPUiBNT0RFOiByeCBza2Igd2l0aG91dCBkYXRhIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tibGVuID0gc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X3JhZGlvdGFwKSArIGxlbmd0aDsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNT05JVE9SIE1PREU6IGRldl9hbGxvY19za2IgZm9yIHJhZGlvdGFwICIKKwkJICAgICAgICJoZWFkZXIgcmV0dXJuZWQgTlVMTFxuIiwgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9wdXQoc2tiLCBza2JsZW4pOworCisJcnQgPSAoc3RydWN0IGF0NzZfcnhfcmFkaW90YXAgKilza2ItPmRhdGE7CisJcGF5bG9hZCA9IHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCk7CisKKwlydC0+cnRfaGRyLml0X3ZlcnNpb24gPSAwOworCXJ0LT5ydF9oZHIuaXRfcGFkID0gMDsKKwlydC0+cnRfaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCkpOworCXJ0LT5ydF9oZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKEFUNzZfUlhfUkFESU9UQVBfUFJFU0VOVCk7CisKKwlydC0+cnRfdHNmdCA9IGNwdV90b19sZTY0KGxlMzJfdG9fY3B1KGJ1Zi0+cnhfdGltZSkpOworCXJ0LT5ydF9yYXRlID0gaHdfcmF0ZXNbYnVmLT5yeF9yYXRlXSAmICh+MHg4MCk7CisJcnQtPnJ0X3NpZ25hbCA9IGJ1Zi0+cnNzaTsKKwlydC0+cnRfbm9pc2UgPSBidWYtPm5vaXNlX2xldmVsOworCXJ0LT5ydF9mbGFncyA9IElFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUzsKKwlpZiAoYnVmLT5mcmFnbWVudGF0aW9uKQorCQlydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRzsKKworCW1lbWNweShwYXlsb2FkLCBidWYtPnBhY2tldCwgbGVuZ3RoKTsKKwlza2ItPmRldiA9IG5ldGRldjsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOworCisJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwluZXRpZl9yeChza2IpOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKK30KKworLyogQ2hlY2sgaWYgd2Ugc3B5IG9uIHRoZSBzZW5kZXIgYWRkcmVzcyBpbiBidWYgYW5kIHVwZGF0ZSBzdGF0cyAqLworc3RhdGljIHZvaWQgYXQ3Nl9pd3NweV91cGRhdGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHIgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWYtPnBhY2tldDsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsOworCisJLyogV2UgY2FuIG9ubHkgc2V0IHRoZSBsZXZlbCBoZXJlICovCisJcXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX0lOVkFMSUQgfCBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisJcXVhbC5sZXZlbCA9IDA7CisJcXVhbC5ub2lzZSA9IDA7CisJYXQ3Nl9jYWxjX2xldmVsKHByaXYsIGJ1ZiwgJnF1YWwpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJaWYgKHByaXYtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKQorCQl3aXJlbGVzc19zcHlfdXBkYXRlKHByaXYtPm5ldGRldiwgaGRyLT5hZGRyMiwgJnF1YWwpOworCisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfdGFza2xldCh1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1Y3QgdXJiICopcGFyYW07CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0+bmV0ZGV2OworCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICppODAyXzExX2hkcjsKKwl1MTYgZnJhbWVfY3RsOworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZGV2aWNlIHVucGx1Z2dlZCIpOworCQlpZiAodXJiKQorCQkJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAidXJiIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcHJpdi0+cnhfc2tiIHx8ICFuZXRkZXYgfHwgIXByaXYtPnJ4X3NrYi0+ZGF0YSkKKwkJcmV0dXJuOworCisJYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXByaXYtPnJ4X3NrYi0+ZGF0YTsKKworCWk4MDJfMTFfaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopYnVmLT5wYWNrZXQ7CisKKwlmcmFtZV9jdGwgPSBsZTE2X3RvX2NwdShpODAyXzExX2hkci0+ZnJhbWVfY3RsKTsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkJYXQ3Nl9kYmcoREJHX1VSQiwKKwkJCQkgIiVzICVzOiAtIG5vbnplcm8gUnggYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkgX19mdW5jX18sIG5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX0FUTUVMX0hEUiwKKwkJICIlczogcnggZnJhbWU6IHJhdGUgJWQgcnNzaSAlZCBub2lzZSAlZCBsaW5rICVkICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgYnVmLT5yeF9yYXRlLCBidWYtPnJzc2ksIGJ1Zi0+bm9pc2VfbGV2ZWwsCisJCSBidWYtPmxpbmtfcXVhbGl0eSwgaGV4MnN0cihpODAyXzExX2hkciwgNDgpKTsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJYXQ3Nl9yeF9tb25pdG9yX21vZGUocHJpdik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiB0aGVyZSBpcyBhIG5ldyBic3NpZCBhcm91bmQsIGFjY2VwdCBpdDogKi8KKwlpZiAoYnVmLT5uZXdic3MgJiYgcHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiByeCBuZXdic3MiLCBuZXRkZXYtPm5hbWUpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX25ld19ic3MpOworCX0KKworCXN3aXRjaCAoZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQlhdDc2X3J4X2RhdGEocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwkJLyogamFsOiBUT0RPOiBmaW5kIG91dCBpZiB3ZSBjYW4gdXBkYXRlIGl3c3B5IGFsc28gb24KKwkJICAgb3RoZXIgZnJhbWVzIHRoYW4gbWFuYWdlbWVudCAobWlnaHQgZGVwZW5kIG9uIHRoZQorCQkgICByYWRpbyBjaGlwIC8gZmlybXdhcmUgdmVyc2lvbiAhKSAqLworCisJCWF0NzZfaXdzcHlfdXBkYXRlKHByaXYsIGJ1Zik7CisKKwkJYXQ3Nl9yeF9tZ210KHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgorCQlhdDc2X2RiZyhEQkdfUlhfQ1RSTCwgIiVzOiBpZ25vcmVkIGN0cmwgZnJhbWU6ICUwNHgiLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhbWVfY3RsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlnbm9yaW5nIGZyYW1lIHdpdGggZnJhbWVjdGwgMHglMDR4XG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFtZV9jdGwpOworCX0KK2V4aXQ6CisJYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworfQorCisvKiBMb2FkIGZpcm13YXJlIGludG8ga2VybmVsIG1lbW9yeSBhbmQgcGFyc2UgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSAqYXQ3Nl9sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgIGVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlKQoreworCWludCByZXQ7CisJY2hhciAqc3RyOworCXN0cnVjdCBhdDc2X2Z3X2hlYWRlciAqZndoOworCXN0cnVjdCBmd2VudHJ5ICpmd2UgPSAmZmlybXdhcmVzW2JvYXJkX3R5cGVdOworCisJbXV0ZXhfbG9jaygmZndfbXV0ZXgpOworCisJaWYgKGZ3ZS0+bG9hZGVkKSB7CisJCWF0NzZfZGJnKERCR19GVywgInJlLXVzaW5nIHByZXZpb3VzbHkgbG9hZGVkIGZ3Iik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfRlcsICJkb3dubG9hZGluZyBmaXJtd2FyZSAlcyIsIGZ3ZS0+ZnduYW1lKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd2UtPmZ3LCBmd2UtPmZ3bmFtZSwgJnVkZXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgImZpcm13YXJlICVzIG5vdCBmb3VuZCFcbiIsCisJCQkgICBmd2UtPmZ3bmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAieW91IG1heSBuZWVkIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBmcm9tICIKKwkJCSAgICJodHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdHMvYXQ3NmM1MDNhLyIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZ290IGl0LiIpOworCWZ3aCA9IChzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKikoZndlLT5mdy0+ZGF0YSk7CisKKwlpZiAoZndlLT5mdy0+c2l6ZSA8PSBzaXplb2YoKmZ3aCkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJmaXJtd2FyZSBpcyB0b28gc2hvcnQgKDB4JXp4KVxuIiwgZndlLT5mdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDUkMgY3VycmVudGx5IG5vdCBjaGVja2VkICovCisJZndlLT5ib2FyZF90eXBlID0gbGUzMl90b19jcHUoZndoLT5ib2FyZF90eXBlKTsKKwlpZiAoZndlLT5ib2FyZF90eXBlICE9IGJvYXJkX3R5cGUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJib2FyZCB0eXBlIG1pc21hdGNoLCByZXF1ZXN0ZWQgJXUsIGdvdCAldVxuIiwKKwkJCSAgIGJvYXJkX3R5cGUsIGZ3ZS0+Ym9hcmRfdHlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPSBmd2gtPm1ham9yOworCWZ3ZS0+ZndfdmVyc2lvbi5taW5vciA9IGZ3aC0+bWlub3I7CisJZndlLT5md192ZXJzaW9uLnBhdGNoID0gZndoLT5wYXRjaDsKKwlmd2UtPmZ3X3ZlcnNpb24uYnVpbGQgPSBmd2gtPmJ1aWxkOworCisJc3RyID0gKGNoYXIgKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPnN0cl9vZmZzZXQpOworCWZ3ZS0+aW50ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpOworCWZ3ZS0+aW50Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbik7CisJZndlLT5leHRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCk7CisJZndlLT5leHRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKTsKKworCWZ3ZS0+bG9hZGVkID0gMTsKKworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnVkZXYtPmRldiwKKwkJICAgInVzaW5nIGZpcm13YXJlICVzICh2ZXJzaW9uICVkLiVkLiVkLSVkKVxuIiwKKwkJICAgZndlLT5md25hbWUsIGZ3aC0+bWFqb3IsIGZ3aC0+bWlub3IsIGZ3aC0+cGF0Y2gsIGZ3aC0+YnVpbGQpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiYm9hcmQgJXUsIGludCAlZDolZCwgZXh0ICVkOiVkIiwgYm9hcmRfdHlwZSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbiksCisJCSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pKTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJmaXJtd2FyZSBpZCAlcyIsIHN0cik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpCisJCXJldHVybiBmd2U7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF0NzZfcHJpdiAqYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKwlpbnQgaTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYXQ3Nl9wcml2KSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXByaXYtPnVkZXYgPSB1ZGV2OworCXByaXYtPm5ldGRldiA9IG5ldGRldjsKKworCW11dGV4X2luaXQoJnByaXYtPm10eCk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX2Fzc29jX2RvbmUsIGF0NzZfd29ya19hc3NvY19kb25lKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfam9pbiwgYXQ3Nl93b3JrX2pvaW4pOworCUlOSVRfV09SSygmcHJpdi0+d29ya19uZXdfYnNzLCBhdDc2X3dvcmtfbmV3X2Jzcyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3N0YXJ0X3NjYW4sIGF0NzZfd29ya19zdGFydF9zY2FuKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc2V0X3Byb21pc2MsIGF0NzZfd29ya19zZXRfcHJvbWlzYyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3N1Ym1pdF9yeCwgYXQ3Nl93b3JrX3N1Ym1pdF9yeCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX3Jlc3RhcnQsIGF0NzZfZHdvcmtfcmVzdGFydCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2dldF9zY2FuLCBhdDc2X2R3b3JrX2dldF9zY2FuKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZHdvcmtfYmVhY29uLCBhdDc2X2R3b3JrX2JlYWNvbik7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2F1dGgsIGF0NzZfZHdvcmtfYXV0aCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2Fzc29jLCBhdDc2X2R3b3JrX2Fzc29jKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5tZ210X3NwaW5sb2NrKTsKKwlwcml2LT5uZXh0X21nbXRfYnVsayA9IE5VTEw7CisJcHJpdi0+bWFjX3N0YXRlID0gTUFDX0lOSVQ7CisKKwkvKiBpbml0aWFsaXplIGVtcHR5IEJTUyBsaXN0ICovCisJcHJpdi0+Y3Vycl9ic3MgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrKTsKKworCWluaXRfdGltZXIoJnByaXYtPmJzc19saXN0X3RpbWVyKTsKKwlwcml2LT5ic3NfbGlzdF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKwlwcml2LT5ic3NfbGlzdF90aW1lci5mdW5jdGlvbiA9IGF0NzZfYnNzX2xpc3RfdGltZW91dDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5zcHlfc3BpbmxvY2spOworCisJLyogbWFyayBhbGwgcnggZGF0YSBlbnRyaWVzIGFzIHVudXNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9SWF9EQVRBX0JVRjsgaSsrKQorCQlwcml2LT5yeF9kYXRhW2ldLnNrYiA9IE5VTEw7CisKKwlwcml2LT5yeF90YXNrbGV0LmZ1bmMgPSBhdDc2X3J4X3Rhc2tsZXQ7CisJcHJpdi0+cnhfdGFza2xldC5kYXRhID0gMDsKKworCXByaXYtPnBtX21vZGUgPSBBVDc2X1BNX09GRjsKKwlwcml2LT5wbV9wZXJpb2QgPSAwOworCisJcmV0dXJuIHByaXY7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9hbGxvY191cmJzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQsICplcF9pbiwgKmVwX291dDsKKwlpbnQgaTsKKwlpbnQgYnVmZmVyX3NpemU7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVOVEVSIiwgX19mdW5jX18pOworCisJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzOiBOdW1FbmRwb2ludHMgJWQgIiwgX19mdW5jX18sCisJCSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iTnVtRW5kcG9pbnRzKTsKKworCWVwX2luID0gTlVMTDsKKwllcF9vdXQgPSBOVUxMOworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWF0NzZfZGJnKERCR19VUkIsICIlczogJWQuIGVuZHBvaW50OiBhZGRyIDB4JXggYXR0ciAweCV4IiwKKwkJCSBfX2Z1bmNfXywgaSwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MsCisJCQkgZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7CisKKwkJaWYgKCFlcF9pbiAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpCisJCQllcF9pbiA9IGVuZHBvaW50OworCisJCWlmICghZXBfb3V0ICYmIHVzYl9lbmRwb2ludF9pc19idWxrX291dChlbmRwb2ludCkpCisJCQllcF9vdXQgPSBlbmRwb2ludDsKKwl9CisKKwlpZiAoIWVwX2luIHx8ICFlcF9vdXQpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImJ1bGsgZW5kcG9pbnRzIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXByaXYtPnJ4X3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MpOworCXByaXYtPnR4X3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKTsKKworCXByaXYtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPnJ4X3VyYiB8fCAhcHJpdi0+dHhfdXJiKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBVUkJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWZmZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIpICsgTUFYX1BBRERJTkdfU0laRTsKKwlwcml2LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmJ1bGtfb3V0X2J1ZmZlcikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGFsbG9jYXRlIG91dHB1dCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFWElUIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSAqLworc3RhdGljIGludCBhdDc2X2luaXRfbmV3X2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlpbnQgcmV0OworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJVU0IgaW50ZXJmYWNlOiAlZCBlbmRwb2ludHMiLAorCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKworCXJldCA9IGF0NzZfYWxsb2NfdXJicyhwcml2LCBpbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBNQUMgYWRkcmVzcyAqLworCXJldCA9IGF0NzZfZ2V0X2h3X2NvbmZpZyhwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGdldCBNQUMgYWRkcmVzc1xuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcml2LT5kb21haW4gPSBhdDc2X2dldF9yZWdfZG9tYWluKHByaXYtPnJlZ3VsYXRvcnlfZG9tYWluKTsKKwkvKiBpbml0LiBuZXRkZXYtPmRldl9hZGRyICovCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlwcml2LT5jaGFubmVsID0gREVGX0NIQU5ORUw7CisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRl9SVFNfVEhSRVNIT0xEOworCXByaXYtPmZyYWdfdGhyZXNob2xkID0gREVGX0ZSQUdfVEhSRVNIT0xEOworCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gREVGX1NIT1JUX1JFVFJZX0xJTUlUOworCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfQVVUTzsKKwlwcml2LT5wcmVhbWJsZV90eXBlID0gUFJFQU1CTEVfVFlQRV9MT05HOworCXByaXYtPmJlYWNvbl9wZXJpb2QgPSAxMDA7CisJcHJpdi0+YmVhY29uc19sYXN0X3F1YWwgPSBqaWZmaWVzOworCXByaXYtPmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9PUEVOOworCXByaXYtPnNjYW5fbWluX3RpbWUgPSBERUZfU0NBTl9NSU5fVElNRTsKKwlwcml2LT5zY2FuX21heF90aW1lID0gREVGX1NDQU5fTUFYX1RJTUU7CisJcHJpdi0+c2Nhbl9tb2RlID0gU0NBTl9UWVBFX0FDVElWRTsKKworCW5ldGRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CS8qIG5vdCB5ZXQgb3IgbmV2ZXIgKi8KKwluZXRkZXYtPm9wZW4gPSBhdDc2X29wZW47CisJbmV0ZGV2LT5zdG9wID0gYXQ3Nl9zdG9wOworCW5ldGRldi0+Z2V0X3N0YXRzID0gYXQ3Nl9nZXRfc3RhdHM7CisJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZhdDc2X2V0aHRvb2xfb3BzOworCisJLyogQWRkIHBvaW50ZXJzIHRvIGVuYWJsZSBpd3NweSBzdXBwb3J0LiAqLworCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+c3B5X2RhdGE7CisJbmV0ZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CisKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGF0NzZfdHg7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gYXQ3Nl90eF90aW1lb3V0OworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSAyICogSFo7CisJbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhdDc2X2hhbmRsZXJfZGVmOworCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gYXQ3Nl9zZXRfbXVsdGljYXN0OworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYXQ3Nl9zZXRfbWFjX2FkZHJlc3M7CisJZGV2X2FsbG9jX25hbWUobmV0ZGV2LCAid2xhbiVkIik7CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYocHJpdi0+bmV0ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJjYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlIChzdGF0dXMgJWQpIVxuIiwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKwlwcml2LT5uZXRkZXZfcmVnaXN0ZXJlZCA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogVVNCICVzLCBNQUMgJXMsIGZpcm13YXJlICVkLiVkLiVkLSVkXG4iLAorCSAgICAgICBuZXRkZXYtPm5hbWUsIGludGVyZmFjZS0+ZGV2LmJ1c19pZCwgbWFjMnN0cihwcml2LT5tYWNfYWRkciksCisJICAgICAgIHByaXYtPmZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtPmZ3X3ZlcnNpb24ubWlub3IsCisJICAgICAgIHByaXYtPmZ3X3ZlcnNpb24ucGF0Y2gsIHByaXYtPmZ3X3ZlcnNpb24uYnVpbGQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWd1bGF0b3J5IGRvbWFpbiAweCUwMng6ICVzXG4iLCBuZXRkZXYtPm5hbWUsCisJICAgICAgIHByaXYtPnJlZ3VsYXRvcnlfZG9tYWluLCBwcml2LT5kb21haW4tPm5hbWUpOworCisJLyogd2UgbGV0IHRoaXMgdGltZXIgcnVuIHRoZSB3aG9sZSB0aW1lIHRoaXMgZHJpdmVyIGluc3RhbmNlIGxpdmVzICovCisJbW9kX3RpbWVyKCZwcml2LT5ic3NfbGlzdF90aW1lciwgamlmZmllcyArIEJTU19MSVNUX1RJTUVPVVQpOworCitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZGVsZXRlX2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCBpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRU5URVIiLCBfX2Z1bmNfXyk7CisKKwkvKiBUaGUgZGV2aWNlIGlzIGdvbmUsIGRvbid0IGJvdGhlciB0dXJuaW5nIGl0IG9mZiAqLworCXByaXYtPmRldmljZV91bnBsdWdnZWQgPSAxOworCisJaWYgKHByaXYtPm5ldGRldl9yZWdpc3RlcmVkKQorCQl1bnJlZ2lzdGVyX25ldGRldihwcml2LT5uZXRkZXYpOworCisJLyogYXNzdW1pbmcgd2UgdXNlZCBrZXZlbnRkLCBpdCBtdXN0IHF1aWVzY2UgdG9vICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWtmcmVlKHByaXYtPmJ1bGtfb3V0X2J1ZmZlcik7CisKKwlpZiAocHJpdi0+dHhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT50eF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+dHhfdXJiKTsKKwl9CisJaWYgKHByaXYtPnJ4X3VyYikgeworCQl1c2Jfa2lsbF91cmIocHJpdi0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHByaXYtPnJ4X3VyYik7CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogdW5saW5rZWQgdXJicyIsIF9fZnVuY19fKTsKKworCWlmIChwcml2LT5yeF9za2IpCisJCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOworCisJYXQ3Nl9mcmVlX2Jzc19saXN0KHByaXYpOworCWRlbF90aW1lcl9zeW5jKCZwcml2LT5ic3NfbGlzdF90aW1lcik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEKQorCQlhdDc2X2l3ZXZlbnRfYnNzX2Rpc2Nvbm5lY3QocHJpdi0+bmV0ZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9SWF9EQVRBX0JVRjsgaSsrKQorCQlpZiAocHJpdi0+cnhfZGF0YVtpXS5za2IpIHsKKwkJCWRldl9rZnJlZV9za2IocHJpdi0+cnhfZGF0YVtpXS5za2IpOworCQkJcHJpdi0+cnhfZGF0YVtpXS5za2IgPSBOVUxMOworCQl9CisJdXNiX3B1dF9kZXYocHJpdi0+dWRldik7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBiZWZvcmUgZnJlZWluZyBwcml2L25ldGRldiIsIF9fZnVuY19fKTsKKwlmcmVlX25ldGRldihwcml2LT5uZXRkZXYpOwkvKiBwcml2IGlzIGluIG5ldGRldiAqLworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBhdDc2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgbmVlZF9leHRfZncgPSAwOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd3Y7CisJaW50IGJvYXJkX3R5cGUgPSAoaW50KWlkLT5kcml2ZXJfaW5mbzsKKworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgKi8KKwlmd2UgPSBhdDc2X2xvYWRfZmlybXdhcmUodWRldiwgYm9hcmRfdHlwZSk7CisJaWYgKCFmd2UpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJLyogd2UgZ2V0IE9QTU9ERV9OT05FIHdpdGggMi40LjIzLCBTTUMyNjYyVy1BUiA/Pz8KKwkgICB3ZSBnZXQgMjA0IHdpdGggMi40LjIzLCBGaWJlcmxpbmUgRkwtV0wyNDB1ICg1MDVBK1JGTUQyOTU4KSA/Pz8gKi8KKworCWlmIChvcF9tb2RlID09IE9QTU9ERV9IV19DT05GSUdfTU9ERSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGhhbmRsZSBhIGRldmljZSBpbiBIV19DT05GSUdfTU9ERVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICisJICAgICYmIG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQkvKiBkb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBwYXJ0ICovCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iLAorCQkJCSAgIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXVzYl9wdXRfZGV2KHVkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEludGVybmFsIGZpcm13YXJlIGFscmVhZHkgaW5zaWRlIHRoZSBkZXZpY2UuICBHZXQgZmlybXdhcmUKKwkgKiB2ZXJzaW9uIHRvIHRlc3QgaWYgZXh0ZXJuYWwgZmlybXdhcmUgaXMgbG9hZGVkLgorCSAqIFRoaXMgd29ya3Mgb25seSBmb3IgbmV3ZXIgZmlybXdhcmUsIGUuZy4gdGhlIEludGVyc2lsIDAuOTAueAorCSAqIHNheXMgImNvbnRyb2wgdGltZW91dCBvbiBlcDBpbiIgYW5kIHN1YnNlcXVlbnQKKwkgKiBhdDc2X2dldF9vcF9tb2RlKCkgZmFpbCB0b28gOi0oICovCisKKwkvKiBpZiB2ZXJzaW9uID49IDAuMTAwLngueSBvciBkZXZpY2Ugd2l0aCBidWlsdC1pbiBmbGFzaCB3ZSBjYW4KKwkgKiBxdWVyeSB0aGUgZGV2aWNlIGZvciB0aGUgZncgdmVyc2lvbiAqLworCWlmICgoZndlLT5md192ZXJzaW9uLm1ham9yID4gMCB8fCBmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPj0gMTAwKQorCSAgICB8fCAob3BfbW9kZSA9PSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNIKSkgeworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDAgfHwgKGZ3di5tYWpvciB8IGZ3di5taW5vcikgPT0gMCkKKwkJCW5lZWRfZXh0X2Z3ID0gMTsKKwl9IGVsc2UKKwkJLyogTm8gd2F5IHRvIGNoZWNrIGZpcm13YXJlIHZlcnNpb24sIHJlbG9hZCB0byBiZSBzdXJlICovCisJCW5lZWRfZXh0X2Z3ID0gMTsKKworCWlmIChuZWVkX2V4dF9mdykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZVxuIik7CisKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIFJlLWNoZWNrIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGdldHRpbmcgZmlybXdhcmUgdmVyc2lvblxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlwcml2ID0gYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHVkZXYpOworCWlmICghcHJpdikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCVNFVF9ORVRERVZfREVWKHByaXYtPm5ldGRldiwgJmludGVyZmFjZS0+ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgcHJpdik7CisKKwltZW1jcHkoJnByaXYtPmZ3X3ZlcnNpb24sICZmd3YsIHNpemVvZihzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24pKTsKKwlwcml2LT5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKKworCXJldCA9IGF0NzZfaW5pdF9uZXdfZGV2aWNlKHByaXYsIGludGVyZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWF0NzZfZGVsZXRlX2RldmljZShwcml2KTsKKworCXJldHVybiByZXQ7CisKK2Vycm9yOgorCXVzYl9wdXRfZGV2KHVkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIERpc2Nvbm5lY3QgYWZ0ZXIgbG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZSAqLworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRpc2Nvbm5lY3RpbmdcbiIsIHByaXYtPm5ldGRldi0+bmFtZSk7CisJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaW50ZXJmYWNlLT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOworfQorCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdDc2X2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5wcm9iZSA9IGF0NzZfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhdDc2X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZGV2X3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXQ3Nl9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiIGxvYWRpbmdcbiIpOworCisJbXV0ZXhfaW5pdCgmZndfbXV0ZXgpOworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJICAgICAgICI6IHVzYl9yZWdpc3RlciBmYWlsZWQgKHN0YXR1cyAlZClcbiIsIHJlc3VsdCk7CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImF0NzZfdXNiLXR4IiwgJmxlZHRyaWdfdHgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDc2X21vZF9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiIHVubG9hZGluZ1xuIik7CisJdXNiX2RlcmVnaXN0ZXIoJmF0NzZfZHJpdmVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaXJtd2FyZXMpOyBpKyspIHsKKwkJaWYgKGZpcm13YXJlc1tpXS5mdykKKwkJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmVzW2ldLmZ3KTsKKwl9CisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUobGVkdHJpZ190eCk7Cit9CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXQ3Nl9kZWJ1ZywgaW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbGV2ZWwiKTsKKworbW9kdWxlX2luaXQoYXQ3Nl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChhdDc2X21vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEt1cnRoIDxva3VAbWFzcW1haWwuY3g+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBbGV4IDxhbGV4QGZvb2dvZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIEpvbmVzIik7CitNT0RVTEVfQVVUSE9SKCJCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmggYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjBiZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmgKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBPbGl2ZXIgS3VydGgKKyAqCSAgICAgKGMpIDIwMDMsMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKgkgICAgIChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgU291cmNlZm9yZ2UgZHJpdmVyCisgKiByZWxlYXNlZCBhbmQgbWFpbnRhaW5lZCBieSBBdG1lbDoKKyAqCisgKiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hdG1lbHdsYW5kcml2ZXIvCisgKgorICogQWx0aG91Z2ggdGhlIGNvZGUgd2FzIGNvbXBsZXRlbHkgcmUtd3JpdHRlbiwKKyAqIGl0IHdvdWxkIGhhdmUgYmVlbiBpbXBvc3NpYmxlIHdpdGhvdXQgQXRtZWwncyBkZWNpc2lvbiB0bworICogcmVsZWFzZSBhbiBPcGVuIFNvdXJjZSBkcml2ZXIgKHVuZm9ydHVuYXRlbHkgdGhlIGZpcm13YXJlIHdhcworICoga2VwdCBiaW5hcnkgb25seSkuIFRoYW5rcyBmb3IgdGhhdCBkZWNpc2lvbiB0byBBdG1lbCEKKyAqLworCisjaWZuZGVmIF9BVDc2X1VTQl9ICisjZGVmaW5lIF9BVDc2X1VTQl9ICisKKy8qIEJvYXJkIHR5cGVzICovCitlbnVtIGJvYXJkX3R5cGUgeworCUJPQVJEXzUwM19JU0wzODYxID0gMSwKKwlCT0FSRF81MDNfSVNMMzg2MyA9IDIsCisJQk9BUkRfNTAzID0gMywKKwlCT0FSRF81MDNfQUNDID0gNCwKKwlCT0FSRF81MDUgPSA1LAorCUJPQVJEXzUwNV8yOTU4ID0gNiwKKwlCT0FSRF81MDVBID0gNywKKwlCT0FSRF81MDVBTVggPSA4Cit9OworCisvKiBvdXIgcHJpdmF0ZSBpb2N0bCdzICovCisvKiBwcmVhbWJsZSBsZW5ndGggKDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvKSAqLworI2RlZmluZSBBVDc2X1NFVF9TSE9SVF9QUkVBTUJMRQkJKFNJT0NJV0ZJUlNUUFJJViArIDApCisjZGVmaW5lIEFUNzZfR0VUX1NIT1JUX1BSRUFNQkxFCQkoU0lPQ0lXRklSU1RQUklWICsgMSkKKy8qIHdoaWNoIGRlYnVnIGNoYW5uZWxzIGFyZSBlbmFibGVkICovCisjZGVmaW5lIEFUNzZfU0VUX0RFQlVHCQkJKFNJT0NJV0ZJUlNUUFJJViArIDIpCisjZGVmaW5lIEFUNzZfR0VUX0RFQlVHCQkJKFNJT0NJV0ZJUlNUUFJJViArIDMpCisvKiBwb3dlciBzYXZlIG1vZGUgKGluY2wuIHRoZSBBdG1lbCBwcm9wcmlldGFyeSBzbWFydCBzYXZlIG1vZGUpICovCisjZGVmaW5lIEFUNzZfU0VUX1BPV0VSU0FWRV9NT0RFCQkoU0lPQ0lXRklSU1RQUklWICsgNCkKKyNkZWZpbmUgQVQ3Nl9HRVRfUE9XRVJTQVZFX01PREUJCShTSU9DSVdGSVJTVFBSSVYgKyA1KQorLyogbWluIGFuZCBtYXggY2hhbm5lbCB0aW1lcyBmb3Igc2NhbiAqLworI2RlZmluZSBBVDc2X1NFVF9TQ0FOX1RJTUVTCQkoU0lPQ0lXRklSU1RQUklWICsgNikKKyNkZWZpbmUgQVQ3Nl9HRVRfU0NBTl9USU1FUwkJKFNJT0NJV0ZJUlNUUFJJViArIDcpCisvKiBzY2FuIG1vZGUgKDAgLSBhY3RpdmUsIDEgLSBwYXNzaXZlKSAqLworI2RlZmluZSBBVDc2X1NFVF9TQ0FOX01PREUJCShTSU9DSVdGSVJTVFBSSVYgKyA4KQorI2RlZmluZSBBVDc2X0dFVF9TQ0FOX01PREUJCShTSU9DSVdGSVJTVFBSSVYgKyA5KQorCisjZGVmaW5lIENNRF9TVEFUVVNfSURMRQkJCQkweDAwCisjZGVmaW5lIENNRF9TVEFUVVNfQ09NUExFVEUJCQkweDAxCisjZGVmaW5lIENNRF9TVEFUVVNfVU5LTk9XTgkJCTB4MDIKKyNkZWZpbmUgQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgkJMHgwMworI2RlZmluZSBDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQJMHgwNAorI2RlZmluZSBDTURfU1RBVFVTX1RJTUVfT1VUCQkJMHgwNworI2RlZmluZSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCQkJMHgwOAorI2RlZmluZSBDTURfU1RBVFVTX0hPU1RfRkFJTFVSRQkJCTB4ZmYKKyNkZWZpbmUgQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRAkJCTB4ZjAKKworLyogYW5zd2VycyB0byBnZXQgb3AgbW9kZSAqLworI2RlZmluZSBPUE1PREVfTk9ORQkJCQkweDAwCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gJCTB4MDEKKyNkZWZpbmUgT1BNT0RFX0hXX0NPTkZJR19NT0RFCQkJMHgwMgorI2RlZmluZSBPUE1PREVfREZVX01PREVfV0lUSF9GTEFTSAkJMHgwMworI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNICQkweDA0CisKKyNkZWZpbmUgQ01EX1NFVF9NSUIJCTB4MDEKKyNkZWZpbmUgQ01EX0dFVF9NSUIJCTB4MDIKKyNkZWZpbmUgQ01EX1NDQU4JCTB4MDMKKyNkZWZpbmUgQ01EX0pPSU4JCTB4MDQKKyNkZWZpbmUgQ01EX1NUQVJUX0lCU1MJCTB4MDUKKyNkZWZpbmUgQ01EX1JBRElPX09OCQkweDA2CisjZGVmaW5lIENNRF9SQURJT19PRkYJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVJUVVAJCTB4MEIKKworI2RlZmluZSBNSUJfTE9DQUwJCTB4MDEKKyNkZWZpbmUgTUlCX01BQ19BRERSCQkweDAyCisjZGVmaW5lIE1JQl9NQUMJCQkweDAzCisjZGVmaW5lIE1JQl9NQUNfTUdNVAkJMHgwNQorI2RlZmluZSBNSUJfTUFDX1dFUAkJMHgwNgorI2RlZmluZSBNSUJfUEhZCQkJMHgwNworI2RlZmluZSBNSUJfRldfVkVSU0lPTgkJMHgwOAorI2RlZmluZSBNSUJfTURPTUFJTgkJMHgwOQorCisjZGVmaW5lIEFESE9DX01PREUJCTEKKyNkZWZpbmUgSU5GUkFTVFJVQ1RVUkVfTU9ERQkyCisKKy8qIHZhbHVlcyBmb3Igc3RydWN0IG1pYl9sb2NhbCwgZmllbGQgcHJlYW1ibGVfdHlwZSAqLworI2RlZmluZSBQUkVBTUJMRV9UWVBFX0xPTkcJMAorI2RlZmluZSBQUkVBTUJMRV9UWVBFX1NIT1JUCTEKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9BVVRPCTIKKworLyogdmFsdWVzIGZvciB0eF9yYXRlICovCisjZGVmaW5lIFRYX1JBVEVfMU1CSVQJCTAKKyNkZWZpbmUgVFhfUkFURV8yTUJJVAkJMQorI2RlZmluZSBUWF9SQVRFXzVfNU1CSVQgCTIKKyNkZWZpbmUgVFhfUkFURV8xMU1CSVQJCTMKKyNkZWZpbmUgVFhfUkFURV9BVVRPCQk0CisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZXMgKi8KKyNkZWZpbmUgQVQ3Nl9QTV9PRkYJCTEKKyNkZWZpbmUgQVQ3Nl9QTV9PTgkJMgorI2RlZmluZSBBVDc2X1BNX1NNQVJUCQkzCisKK3N0cnVjdCBod2NmZ19yNTA1IHsKKwl1OCBjcjM5X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZDJbMTRdOworCXU4IGNyMTVfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfcmZtZCB7CisJdTggY3IyMF92YWx1ZXNbMTRdOworCXU4IGNyMjFfdmFsdWVzWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCBsb3dfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCBub3JtYWxfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBjcjMxX3ZhbHVlc1sxNF07CisJdTggY3I1OF92YWx1ZXNbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGF0NzZfaHdjZmcgeworCXN0cnVjdCBod2NmZ19pbnRlcnNpbCBpOworCXN0cnVjdCBod2NmZ19yZm1kIHIzOworCXN0cnVjdCBod2NmZ19yNTA1IHI1OworfTsKKworI2RlZmluZSBXRVBfU01BTExfS0VZX0xFTgkoNDAgLyA4KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTgkoMTA0IC8gOCkKKworc3RydWN0IGF0NzZfY2FyZF9jb25maWcgeworCXU4IGV4Y2x1ZGVfdW5lbmNyeXB0ZWQ7CisJdTggcHJvbWlzY3VvdXNfbW9kZTsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBlbmNyeXB0aW9uX3R5cGU7CisJX19sZTE2IHJ0c190aHJlc2hvbGQ7CisJX19sZTE2IGZyYWdtZW50YXRpb25fdGhyZXNob2xkOwkvKiAyNTYuLjIzNDYgKi8KKwl1OCBiYXNpY19yYXRlX3NldFs0XTsKKwl1OCBhdXRvX3JhdGVfZmFsbGJhY2s7CS8qIDAsMSAqLworCXU4IGNoYW5uZWw7CisJdTggcHJpdmFjeV9pbnZva2VkOworCXU4IHdlcF9kZWZhdWx0X2tleV9pZDsJLyogMC4uMyAqLworCXU4IGN1cnJlbnRfc3NpZFszMl07CisJdTggd2VwX2RlZmF1bHRfa2V5X3ZhbHVlWzRdW1dFUF9LRVlfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKwl1OCBzaG9ydF9wcmVhbWJsZTsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X2NvbW1hbmQgeworCXU4IGNtZDsKKwl1OCByZXNlcnZlZDsKKwlfX2xlMTYgc2l6ZTsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTGVuZ3RoIG9mIEF0bWVsLXNwZWNpZmljIFJ4IGhlYWRlciBiZWZvcmUgODAyLjExIGZyYW1lICovCisjZGVmaW5lIEFUNzZfUlhfSERSTEVOIG9mZnNldG9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciwgcGFja2V0KQorCitzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgeworCV9fbGUxNiB3bGVuZ3RoOworCXU4IHJ4X3JhdGU7CisJdTggbmV3YnNzOworCXU4IGZyYWdtZW50YXRpb247CisJdTggcnNzaTsKKwl1OCBsaW5rX3F1YWxpdHk7CisJdTggbm9pc2VfbGV2ZWw7CisJX19sZTMyIHJ4X3RpbWU7CisJdTggcGFja2V0W0lFRUU4MDIxMV9GUkFNRV9MRU4gKyBJRUVFODAyMTFfRkNTX0xFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgVHggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9UWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3R4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggdHhfcmF0ZTsKKwl1OCBwYWRkaW5nOworCXU4IHJlc2VydmVkWzRdOworCXU4IHBhY2tldFtJRUVFODAyMTFfRlJBTUVfTEVOICsgSUVFRTgwMjExX0ZDU19MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogZGVmaW5lcyBmb3Igc2Nhbl90eXBlIGJlbG93ICovCisjZGVmaW5lIFNDQU5fVFlQRV9BQ1RJVkUJMAorI2RlZmluZSBTQ0FOX1RZUEVfUEFTU0lWRQkxCisKK3N0cnVjdCBhdDc2X3JlcV9zY2FuIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IHNjYW5fdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiBwcm9iZV9kZWxheTsKKwlfX2xlMTYgbWluX2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbWF4X2NoYW5uZWxfdGltZTsKKwl1OCBlc3NpZF9zaXplOworCXU4IGludGVybmF0aW9uYWxfc2NhbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X3JlcV9pYnNzIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X3JlcV9qb2luIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggZXNzaWRbMzJdOworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJX19sZTE2IHRpbWVvdXQ7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzZXRfbWliX2J1ZmZlciB7CisJdTggdHlwZTsKKwl1OCBzaXplOworCXU4IGluZGV4OworCXU4IHJlc2VydmVkOworCXVuaW9uIHsKKwkJdTggYnl0ZTsKKwkJX19sZTE2IHdvcmQ7CisJCXU4IGFkZHJbRVRIX0FMRU5dOworCX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbG9jYWwgeworCXUxNiByZXNlcnZlZDA7CisJdTggYmVhY29uX2VuYWJsZTsKKwl1OCB0eGF1dG9yYXRlX2ZhbGxiYWNrOworCXU4IHJlc2VydmVkMTsKKwl1OCBzc2lkX3NpemU7CisJdTggcHJvbWlzY3VvdXNfbW9kZTsKKwl1MTYgcmVzZXJ2ZWQyOworCXU4IHByZWFtYmxlX3R5cGU7CisJdTE2IHJlc2VydmVkMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX2FkZHIgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZXNbMl07CQkvKiA/Pz8gKi8KKwl1OCBncm91cF9hZGRyWzRdW0VUSF9BTEVOXTsKKwl1OCBncm91cF9hZGRyX3N0YXR1c1s0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjIHsKKwlfX2xlMzIgbWF4X3R4X21zZHVfbGlmZXRpbWU7CisJX19sZTMyIG1heF9yeF9saWZldGltZTsKKwlfX2xlMTYgZnJhZ190aHJlc2hvbGQ7CisJX19sZTE2IHJ0c190aHJlc2hvbGQ7CisJX19sZTE2IGN3bWluOworCV9fbGUxNiBjd21heDsKKwl1OCBzaG9ydF9yZXRyeV90aW1lOworCXU4IGxvbmdfcmV0cnlfdGltZTsKKwl1OCBzY2FuX3R5cGU7CQkvKiBhY3RpdmUgb3IgcGFzc2l2ZSAqLworCXU4IHNjYW5fY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CS8qIGRlbGF5IGJlZm9yZSBQcm9iZVJlcSBpbiBhY3RpdmUgc2NhbiwgUk8gKi8KKwlfX2xlMTYgbWluX2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbWF4X2NoYW5uZWxfdGltZTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCXU4IGRlc2lyZWRfc3NpZFszMl07CisJdTggZGVzaXJlZF9ic3NpZFtFVEhfQUxFTl07CisJdTggZGVzaXJlZF9ic3N0eXBlOwkvKiBhZC1ob2Mgb3IgaW5mcmFzdHJ1Y3R1cmUgKi8KKwl1OCByZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19tZ210IHsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKKwlfX2xlMTYgQ0ZQX21heF9kdXJhdGlvbjsKKwlfX2xlMTYgbWVkaXVtX29jY3VwYW5jeV9saW1pdDsKKwlfX2xlMTYgc3RhdGlvbl9pZDsJLyogYXNzb2MgaWQgKi8KKwlfX2xlMTYgQVRJTV93aW5kb3c7CisJdTggQ0ZQX21vZGU7CisJdTggcHJpdmFjeV9vcHRpb25faW1wbGVtZW50ZWQ7CisJdTggRFRJTV9wZXJpb2Q7CisJdTggQ0ZQX3BlcmlvZDsKKwl1OCBjdXJyZW50X2Jzc2lkW0VUSF9BTEVOXTsKKwl1OCBjdXJyZW50X2Vzc2lkWzMyXTsKKwl1OCBjdXJyZW50X2Jzc190eXBlOworCXU4IHBvd2VyX21nbXRfbW9kZTsKKwkvKiByZm1kIGFuZCA1MDUgKi8KKwl1OCBpYnNzX2NoYW5nZTsKKwl1OCByZXM7CisJdTggbXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQ7CisJdTggbXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfZW5hYmxlZDsKKwl1OCBjb3VudHJ5X3N0cmluZ1szXTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfbWFjX3dlcCB7CisJdTggcHJpdmFjeV9pbnZva2VkOwkvKiAwIGRpc2FibGUgZW5jci4sIDEgZW5hYmxlIGVuY3IgKi8KKwl1OCB3ZXBfZGVmYXVsdF9rZXlfaWQ7CisJdTggd2VwX2tleV9tYXBwaW5nX2xlbjsKKwl1OCBleGNsdWRlX3VuZW5jcnlwdGVkOworCV9fbGUzMiB3ZXBfaWN2X2Vycm9yX2NvdW50OworCV9fbGUzMiB3ZXBfZXhjbHVkZWRfY291bnQ7CisJdTggd2VwX2RlZmF1bHRfa2V5dmFsdWVbV0VQX0tFWVNdW1dFUF9LRVlfTEVOXTsKKwl1OCBlbmNyeXB0aW9uX2xldmVsOwkvKiAxIGZvciA0MGJpdCwgMiBmb3IgMTA0Yml0IGVuY3J5cHRpb24gKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfcGh5IHsKKwlfX2xlMzIgZWRfdGhyZXNob2xkOworCisJX19sZTE2IHNsb3RfdGltZTsKKwlfX2xlMTYgc2lmc190aW1lOworCV9fbGUxNiBwcmVhbWJsZV9sZW5ndGg7CisJX19sZTE2IHBsY3BfaGVhZGVyX2xlbmd0aDsKKwlfX2xlMTYgbXBkdV9tYXhfbGVuZ3RoOworCV9fbGUxNiBjY2FfbW9kZV9zdXBwb3J0ZWQ7CisKKwl1OCBvcGVyYXRpb25fcmF0ZV9zZXRbNF07CisJdTggY2hhbm5lbF9pZDsKKwl1OCBjdXJyZW50X2NjYV9tb2RlOworCXU4IHBoeV90eXBlOworCXU4IGN1cnJlbnRfcmVnX2RvbWFpbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtaWJfZndfdmVyc2lvbiB7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcGF0Y2g7CisJdTggYnVpbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21kb21haW4geworCXU4IHR4X3Bvd2VybGV2ZWxbMTRdOworCXU4IGNoYW5uZWxfbGlzdFsxNF07CS8qIDAgZm9yIGludmFsaWQgY2hhbm5lbHMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBhdDc2X2Z3X2hlYWRlciB7CisJX19sZTMyIGNyYzsJCS8qIENSQzMyIG9mIHRoZSB3aG9sZSBpbWFnZSAqLworCV9fbGUzMiBib2FyZF90eXBlOwkvKiBmaXJtd2FyZSBjb21wYXRpYmlsaXR5IGNvZGUgKi8KKwl1OCBidWlsZDsJCS8qIGZpcm13YXJlIGJ1aWxkIG51bWJlciAqLworCXU4IHBhdGNoOwkJLyogZmlybXdhcmUgcGF0Y2ggbGV2ZWwgKi8KKwl1OCBtaW5vcjsJCS8qIGZpcm13YXJlIG1pbm9yIHZlcnNpb24gKi8KKwl1OCBtYWpvcjsJCS8qIGZpcm13YXJlIG1ham9yIHZlcnNpb24gKi8KKwlfX2xlMzIgc3RyX29mZnNldDsJLyogb2Zmc2V0IG9mIHRoZSBjb3B5cmlnaHQgc3RyaW5nICovCisJX19sZTMyIGludF9md19vZmZzZXQ7CS8qIGludGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBpbnRfZndfbGVuOwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KKwlfX2xlMzIgZXh0X2Z3X29mZnNldDsJLyogZXh0ZXJuYWwgZmlybXdhcmUgaW1hZ2Ugb2Zmc2V0ICovCisJX19sZTMyIGV4dF9md19sZW47CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZW51bSBtYWNfc3RhdGUgeworCU1BQ19JTklULAorCU1BQ19TQ0FOTklORywKKwlNQUNfQVVUSCwKKwlNQUNfQVNTT0MsCisJTUFDX0pPSU5JTkcsCisJTUFDX0NPTk5FQ1RFRCwKKwlNQUNfT1dOX0lCU1MKK307CisKKy8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KK3N0cnVjdCByZWdfZG9tYWluIHsKKwl1MTYgY29kZTsKKwljaGFyIGNvbnN0ICpuYW1lOworCXUzMiBjaGFubmVsX21hcDsJLyogaWYgYml0IE4gaXMgc2V0LCBjaGFubmVsIChOKzEpIGlzIGFsbG93ZWQgKi8KK307CisKKy8qIGhvdyBsb25nIGRvIHdlIGtlZXAgYSAoSSlCU1MgaW4gdGhlIGJzc19saXN0IGluIGppZmZpZXMKKyAgIHRoaXMgc2hvdWxkIGJlIGxvbmcgZW5vdWdoIGZvciB0aGUgdXNlciB0byByZXRyaWV2ZSB0aGUgdGFibGUKKyAgIChieSBpd2xpc3QgPykgYWZ0ZXIgdGhlIGRldmljZSBzdGFydGVkLCBiZWNhdXNlIGFsbCBlbnRyaWVzIGZyb20KKyAgIG90aGVyIGNoYW5uZWxzIHRoYW4gdGhlIG9uZSB0aGUgZGV2aWNlIGxvY2tzIG9uIGdldCByZW1vdmVkLCB0b28gKi8KKyNkZWZpbmUgQlNTX0xJU1RfVElNRU9VVAkoMTIwICogSFopCisvKiBzdHJ1Y3QgdG8gc3RvcmUgQlNTIGluZm8gZm91bmQgZHVyaW5nIHNjYW4gKi8KKyNkZWZpbmUgQlNTX0xJU1RfTUFYX1JBVEVfTEVOCTMyCS8qIDMyIHJhdGVzIHNob3VsZCBiZSBlbm91Z2ggLi4uICovCisKK3N0cnVjdCBic3NfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJdTggYnNzaWRbRVRIX0FMRU5dOwkvKiBic3NpZCAqLworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwkvKiBlc3NpZCAqLworCXU4IHNzaWRfbGVuOwkJLyogbGVuZ3RoIG9mIHNzaWQgYWJvdmUgKi8KKwl1OCBjaGFubmVsOworCXUxNiBjYXBhOwkJLyogQlNTIGNhcGFiaWxpdGllcyAqLworCXUxNiBiZWFjb25faW50ZXJ2YWw7CS8qIGJlYWNvbiBpbnRlcnZhbCwgS3VzICgxMDI0IG1pY3Jvc2Vjb25kcykgKi8KKwl1OCByYXRlc1tCU1NfTElTVF9NQVhfUkFURV9MRU5dOwkvKiBzdXBwb3J0ZWQgcmF0ZXMgaW4gdW5pdHMgb2YKKwkJCQkJCSAgIDUwMCBrYnBzLCBPUmVkIHdpdGggMHg4MCBmb3IKKwkJCQkJCSAgIGJhc2ljIHJhdGVzICovCisJdTggcmF0ZXNfbGVuOworCisJLyogcXVhbGl0eSBvZiByZWNlaXZlZCBiZWFjb24gKi8KKwl1OCByc3NpOworCXU4IGxpbmtfcXVhbDsKKwl1OCBub2lzZV9sZXZlbDsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsJLyogdGltZSAoamlmZmllcykgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KK307CisKKy8qIGEgcnggZGF0YSBidWZmZXIgdG8gY29sbGVjdCByeCBmcmFnbWVudHMgKi8KK3N0cnVjdCByeF9kYXRhX2J1ZiB7CisJdTggc2VuZGVyW0VUSF9BTEVOXTsJLyogc2VuZGVyIGFkZHJlc3MgKi8KKwl1MTYgc2VxbnI7CQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MTYgZnJhZ25yOwkJLyogbGFzdCBmcmFnbWVudCByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsJLyogamlmZmllcyBvZiBsYXN0IHJ4ICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogPT0gTlVMTCBpZiBlbnRyeSBpcyBmcmVlICovCit9OworCisjZGVmaW5lIE5SX1JYX0RBVEFfQlVGCQk4CisKKy8qIERhdGEgZm9yIG9uZSBsb2FkZWQgZmlybXdhcmUgZmlsZSAqLworc3RydWN0IGZ3ZW50cnkgeworCWNvbnN0IGNoYXIgKmNvbnN0IGZ3bmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBleHRmd19zaXplOworCWludCBpbnRmd19zaXplOworCS8qIHBvaW50ZXIgdG8gbG9hZGVkIGZpcm13YXJlLCBubyBuZWVkIHRvIGZyZWUgKi8KKwl1OCAqZXh0Znc7CQkvKiBleHRlcm5hbCBmaXJtd2FyZSwgZXh0Zndfc2l6ZSBieXRlcyBsb25nICovCisJdTggKmludGZ3OwkJLyogaW50ZXJuYWwgZmlybXdhcmUsIGludGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOwkvKiBib2FyZCB0eXBlICovCisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisJaW50IGxvYWRlZDsJCS8qIExvYWRlZCBhbmQgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworfTsKKworc3RydWN0IGF0NzZfcHJpdiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CS8qIG5ldCBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkvKiBuZXQgZGV2aWNlIHN0YXRzICovCisJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwkvKiB3aXJlbGVzcyBzdGF0cyAqLworCisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsJLyogc2tidWZmIGZvciByZWNlaXZpbmcgZGF0YSAqLworCXZvaWQgKmJ1bGtfb3V0X2J1ZmZlcjsJLyogYnVmZmVyIGZvciBzZW5kaW5nIGRhdGEgKi8KKworCXN0cnVjdCB1cmIgKnR4X3VyYjsJLyogVVJCIGZvciBzZW5kaW5nIGRhdGEgKi8KKwlzdHJ1Y3QgdXJiICpyeF91cmI7CS8qIFVSQiBmb3IgcmVjZWl2aW5nIGRhdGEgKi8KKworCXVuc2lnbmVkIGludCB0eF9waXBlOwkvKiBidWxrIG91dCBwaXBlICovCisJdW5zaWduZWQgaW50IHJ4X3BpcGU7CS8qIGJ1bGsgaW4gcGlwZSAqLworCisJc3RydWN0IG11dGV4IG10eDsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKworCS8qIHdvcmsgcXVldWVzICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfYXNzb2NfZG9uZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19qb2luOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX25ld19ic3M7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RhcnRfc2NhbjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zZXRfcHJvbWlzYzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zdWJtaXRfcng7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19yZXN0YXJ0OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfZ2V0X3NjYW47CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19iZWFjb247CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29ya19hdXRoOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfYXNzb2M7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCS8qIHRoZSBXRVAgc3R1ZmYgKi8KKwlpbnQgd2VwX2VuYWJsZWQ7CS8qIDEgaWYgV0VQIGlzIGVuYWJsZWQgKi8KKwlpbnQgd2VwX2tleV9pZDsJCS8qIGtleSBpZCB0byBiZSB1c2VkICovCisJdTggd2VwX2tleXNbV0VQX0tFWVNdW1dFUF9LRVlfTEVOXTsJLyogdGhlIGZvdXIgV0VQIGtleXMsCisJCQkJCQkgICA1IG9yIDEzIGJ5dGVzIGFyZSB1c2VkICovCisJdTggd2VwX2tleXNfbGVuW1dFUF9LRVlTXTsJLyogdGhlIGxlbmd0aCBvZiB0aGUgYWJvdmUga2V5cyAqLworCisJaW50IGNoYW5uZWw7CisJaW50IGl3X21vZGU7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKwlpbnQgZXNzaWRfc2l6ZTsKKwlpbnQgcmFkaW9fb247CisJaW50IHByb21pc2M7CisKKwlpbnQgcHJlYW1ibGVfdHlwZTsJLyogMCAtIGxvbmcsIDEgLSBzaG9ydCwgMiAtIGF1dG8gKi8KKwlpbnQgYXV0aF9tb2RlOwkJLyogYXV0aGVudGljYXRpb24gdHlwZTogMCBvcGVuLCAxIHNoYXJlZCBrZXkgKi8KKwlpbnQgdHhyYXRlOwkJLyogMCwxLDIsMyA9IDEsMiw1LjUsMTEgTWJwcywgNCBpcyBhdXRvICovCisJaW50IGZyYWdfdGhyZXNob2xkOwkvKiB0aHJlc2hvbGQgZm9yIGZyYWdtZW50YXRpb24gb2YgdHggcGFja2V0cyAqLworCWludCBydHNfdGhyZXNob2xkOwkvKiB0aHJlc2hvbGQgZm9yIFJUUyBtZWNoYW5pc20gKi8KKwlpbnQgc2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpbnQgc2Nhbl9taW5fdGltZTsJLyogc2NhbiBtaW4gY2hhbm5lbCB0aW1lICovCisJaW50IHNjYW5fbWF4X3RpbWU7CS8qIHNjYW4gbWF4IGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21vZGU7CQkvKiBTQ0FOX1RZUEVfQUNUSVZFLCBTQ0FOX1RZUEVfUEFTU0lWRSAqLworCWludCBzY2FuX25lZWRfYW55OwkvKiBpZiBzZXQsIG5lZWQgdG8gc2NhbiBmb3IgYW55IEVTU0lEICovCisKKwkvKiB0aGUgbGlzdCB3ZSBnb3QgZnJvbSBzY2FubmluZyAqLworCXNwaW5sb2NrX3QgYnNzX2xpc3Rfc3BpbmxvY2s7CS8qIHByb3RlY3RzIGJzc19saXN0IG9wZXJhdGlvbnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19saXN0OwkvKiBsaXN0IG9mIEJTUyB3ZSBnb3QgYmVhY29ucyBmcm9tICovCisJc3RydWN0IHRpbWVyX2xpc3QgYnNzX2xpc3RfdGltZXI7CS8qIHRpbWVyIHRvIHB1cmdlIG9sZCBlbnRyaWVzCisJCQkJCQkgICBmcm9tIGJzc19saXN0ICovCisJc3RydWN0IGJzc19pbmZvICpjdXJyX2JzczsJLyogY3VycmVudCBCU1MgKi8KKwl1MTYgYXNzb2NfaWQ7CQkvKiBjdXJyZW50IGFzc29jaWF0aW9uIElELCBpZiBhc3NvY2lhdGVkICovCisKKwl1OCB3YW50ZWRfYnNzaWRbRVRIX0FMRU5dOworCWludCB3YW50ZWRfYnNzaWRfdmFsaWQ7CS8qICE9IDAgaWYgd2FudGVkX2Jzc2lkIGlzIHRvIGJlIHVzZWQgKi8KKworCS8qIHNvbWUgZGF0YSBmb3IgaW5mcmFzdHJ1Y3R1cmUgbW9kZSBvbmx5ICovCisJc3BpbmxvY2tfdCBtZ210X3NwaW5sb2NrOwkvKiB0aGlzIHNwaW5sb2NrIHByb3RlY3RzIGFjY2VzcyB0bworCQkJCQkgICBuZXh0X21nbXRfYnVsayAqLworCisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICpuZXh0X21nbXRfYnVsazsJLyogcGVuZGluZyBtYW5hZ2VtZW50IG1zZyB0bworCQkJCQkJICAgc2VuZCB2aWEgYnVsayBvdXQgKi8KKwllbnVtIG1hY19zdGF0ZSBtYWNfc3RhdGU7CisJZW51bSB7CisJCVNDQU5fSURMRSwKKwkJU0NBTl9JTl9QUk9HUkVTUywKKwkJU0NBTl9DT01QTEVURUQKKwl9IHNjYW5fc3RhdGU7CisJdGltZV90IGxhc3Rfc2NhbjsKKworCWludCByZXRyaWVzOwkJLyogcmVtYWluaW5nIHJldHJpZXMgaW4gY2FzZSBvZiB0aW1lb3V0IHdoZW4KKwkJCQkgKiBzZW5kaW5nIEF1dGhSZXEgb3IgQXNzb2NSZXEgKi8KKwl1OCBwbV9tb2RlOwkJLyogcG93ZXIgbWFuYWdlbWVudCBtb2RlICovCisJdTMyIHBtX3BlcmlvZDsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgcGVyaW9kIGluIG1pY3Jvc2Vjb25kcyAqLworCisJc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmRvbWFpbjsJLyogcmVnIGRvbWFpbiBkZXNjcmlwdGlvbiAqLworCisJLyogaXdzcHkgc3VwcG9ydCAqLworCXNwaW5sb2NrX3Qgc3B5X3NwaW5sb2NrOworCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsKKworCXN0cnVjdCBpd19wdWJsaWNfZGF0YSB3aXJlbGVzc19kYXRhOworCisJLyogVGhlc2UgZmllbGRzIGNvbnRhaW4gSFcgY29uZmlnIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UgKG5vdCBhbGwgb2YKKwkgKiB0aGVzZSBmaWVsZHMgYXJlIHVzZWQgYnkgYWxsIGJvYXJkIHR5cGVzKSAqLworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKworCXN0cnVjdCBhdDc2X2NhcmRfY29uZmlnIGNhcmRfY29uZmlnOworCisJLyogc3RvcmUgcnggZnJhZ21lbnRzIHVudGlsIGNvbXBsZXRlICovCisJc3RydWN0IHJ4X2RhdGFfYnVmIHJ4X2RhdGFbTlJfUlhfREFUQV9CVUZdOworCisJZW51bSBib2FyZF90eXBlIGJvYXJkX3R5cGU7CisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX3VucGx1Z2dlZDoxOworCXVuc2lnbmVkIGludCBuZXRkZXZfcmVnaXN0ZXJlZDoxOworCXN0cnVjdCBzZXRfbWliX2J1ZmZlciBtaWJfYnVmOwkvKiBnbG9iYWwgYnVmZmVyIGZvciBzZXRfbWliIGNhbGxzICovCisKKwkvKiBiZWFjb24gY291bnRpbmcgKi8KKwlpbnQgYmVhY29uX3BlcmlvZDsJLyogcGVyaW9kIG9mIG1nbXQgYmVhY29ucywgS3VzICovCisJaW50IGJlYWNvbnNfcmVjZWl2ZWQ7CisJdW5zaWduZWQgbG9uZyBiZWFjb25zX2xhc3RfcXVhbDsJLyogdGltZSB3ZSByZXN0YXJ0ZWQgY291bnRpbmcKKwkJCQkJCSAgIGJlYWNvbnMgKi8KK307CisKK3N0cnVjdCBhdDc2X3J4X3JhZGlvdGFwIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBydF9oZHI7CisJX19sZTY0IHJ0X3RzZnQ7CisJdTggcnRfZmxhZ3M7CisJdTggcnRfcmF0ZTsKKwlzOCBydF9zaWduYWw7CisJczggcnRfbm9pc2U7Cit9OworCisjZGVmaW5lIEFUNzZfUlhfUkFESU9UQVBfUFJFU0VOVAkJICBcCisJKCgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9UU0ZUKQkJfCBcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKQkJfCBcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpCQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UpKQorCisjZGVmaW5lIEJFQUNPTl9NQVhfREFUQV9MRU5HVEgJMTUwMAorCisvKiB0aGUgbWF4aW11bSBzaXplIG9mIGFuIEFzc29jUmVxIHBhY2tldCAqLworI2RlZmluZSBBU1NPQ1JFUV9NQVhfU0laRSBcCisgIChBVDc2X1RYX0hEUkxFTiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QpICsgXAorICAgMSArIDEgKyBJV19FU1NJRF9NQVhfU0laRSArIDEgKyAxICsgNCkKKworLyogZm9yIHNoYXJlZCBzZWNyZXQgYXV0aCwgYWRkIHRoZSBjaGFsbGVuZ2UgdGV4dCBzaXplICovCisjZGVmaW5lIEFVVEhfRlJBTUVfU0laRSAoQVQ3Nl9UWF9IRFJMRU4gKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hdXRoKSkKKworLyogTWF4aW1hbCBudW1iZXIgb2YgQXV0aFJlcSByZXRyaWVzICovCisjZGVmaW5lIEFVVEhfUkVUUklFUwkJMworCisvKiBNYXhpbWFsIG51bWJlciBvZiBBc3NvY1JlcSByZXRyaWVzICovCisjZGVmaW5lIEFTU09DX1JFVFJJRVMJCTMKKworLyogQmVhY29uIHRpbWVvdXQgaW4gbWFuYWdlZCBtb2RlIHdoZW4gd2UgYXJlIGNvbm5lY3RlZCAqLworI2RlZmluZSBCRUFDT05fVElNRU9VVAkJKDEwICogSFopCisKKy8qIFRpbWVvdXQgZm9yIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlICovCisjZGVmaW5lIEFVVEhfVElNRU9VVAkJKDEgKiBIWikKKworLyogVGltZW91dCBmb3IgYXNzb2NpYXRpb24gcmVzcG9uc2UgKi8KKyNkZWZpbmUgQVNTT0NfVElNRU9VVAkJKDEgKiBIWikKKworLyogUG9sbGluZyBpbnRlcnZhbCB3aGVuIHNjYW4gaXMgcnVubmluZyAqLworI2RlZmluZSBTQ0FOX1BPTExfSU5URVJWQUwJKEhaIC8gNCkKKworLyogQ29tbWFuZCBjb21wbGV0aW9uIHRpbWVvdXQgKi8KKyNkZWZpbmUgQ01EX0NPTVBMRVRJT05fVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIERFRl9SVFNfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX0ZSQUdfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX1NIT1JUX1JFVFJZX0xJTUlUCTgKKyNkZWZpbmUgREVGX0NIQU5ORUwJCTEwCisjZGVmaW5lIERFRl9TQ0FOX01JTl9USU1FCTEwCisjZGVmaW5lIERFRl9TQ0FOX01BWF9USU1FCTEyMAorCisjZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xECShNQVhfRlJBR19USFJFU0hPTEQgKyAxKQorCisvKiB0aGUgbWF4IHBhZGRpbmcgc2l6ZSBmb3IgdHggaW4gYnl0ZXMgKHNlZSBjYWxjX3BhZGRpbmcpICovCisjZGVmaW5lIE1BWF9QQURESU5HX1NJWkUJNTMKKworI2VuZGlmCQkJCS8qIF9BVDc2X1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ0MWVhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgRUNITworCXRyaXN0YXRlICJMaW5lIEVjaG8gQ2FuY2VsbGVyIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgbGluZSBlY2hvIGNhbmNlbGxpbmcgc3VwcG9ydCBmb3IgbUlTRE4gYW5kCisJICBaYXB0ZWwgZHJpdmVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZWNoby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0Y2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19FQ0hPKSArPSBlY2hvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTA5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9UT0RPCkBAIC0wLDAgKzEsMTAgQEAKK1RPRE86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBMaW5kZW50CisJLSB0eXBlZGVmIHJlbW92YWxzCisJLSBoYW5kbGUgYml0X29wZXJhdGlvbnMuaCAobWVyZ2UgaW4gb3IgbWFrZSBwYXJ0IG9mIGNvbW1vbiBjb2RlPykKKwktIHJlbW92ZSBwcm9jIGludGVyZmFjZSwgb25seSB1c2UgZWNoby5oIGludGVyZmFjZSAocHJvYyBpbnRlcmZhY2UgaXMKKwkgIHJhY3kgYW5kIG5vdCBjb3JyZWN0LikKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgQ2M6IFN0ZXZlCitVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4gYW5kIERhdmlkIFJvd2UgPGRhdmlkQHJvd2V0ZWwuY29tPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyZjRiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmgKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBTcGFuRFNQIC0gYSBzZXJpZXMgb2YgRFNQIGNvbXBvbmVudHMgZm9yIHRlbGVwaG9ueQorICoKKyAqIGJpdF9vcGVyYXRpb25zLmggLSBWYXJpb3VzIGJpdCBsZXZlbCBvcGVyYXRpb25zLCBzdWNoIGFzIGJpdCByZXZlcnNhbAorICoKKyAqIFdyaXR0ZW4gYnkgU3RldmUgVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZXZlIFVuZGVyd29vZAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICRJZDogYml0X29wZXJhdGlvbnMuaCx2IDEuMTEgMjAwNi8xMS8yOCAxNTozNzowMyBzdGV2ZXUgRXhwICQKKyAqLworCisvKiEgXGZpbGUgKi8KKworI2lmICFkZWZpbmVkKF9CSVRfT1BFUkFUSU9OU19IXykKKyNkZWZpbmUgX0JJVF9PUEVSQVRJT05TX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19pMzg2X18pICB8fCAgZGVmaW5lZChfX3g4Nl82NF9fKQorLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCBpbiBhIHdvcmQKKyAgICBccGFyYW0gYml0cyBUaGUgd29yZCB0byBiZSBzZWFyY2hlZAorICAgIFxyZXR1cm4gVGhlIGJpdCBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCwgb3IgLTEgaWYgdGhlIHdvcmQgaXMgemVyby4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQoreworICAgIGludCByZXM7CisKKyAgICBfX2FzbV9fICgiIHhvcmwgJVtyZXNdLCVbcmVzXTtcbiIKKyAgICAgICAgICAgICAiIGRlY2wgJVtyZXNdO1xuIgorICAgICAgICAgICAgICIgYnNybCAlW2JpdHNdLCVbcmVzXVxuIgorICAgICAgICAgICAgIDogW3Jlc10gIj0mciIgKHJlcykKKyAgICAgICAgICAgICA6IFtiaXRzXSAicm0iIChiaXRzKSk7CisgICAgcmV0dXJuIHJlczsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEZpbmQgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbG93ZXN0IHNldCBiaXQgaW4gYSB3b3JkCisgICAgXHBhcmFtIGJpdHMgVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQKKyAgICBccmV0dXJuIFRoZSBiaXQgbnVtYmVyIG9mIHRoZSBsb3dlc3Qgc2V0IGJpdCwgb3IgLTEgaWYgdGhlIHdvcmQgaXMgemVyby4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBib3R0b21fYml0KHVuc2lnbmVkIGludCBiaXRzKQoreworICAgIGludCByZXM7CisKKyAgICBfX2FzbV9fICgiIHhvcmwgJVtyZXNdLCVbcmVzXTtcbiIKKyAgICAgICAgICAgICAiIGRlY2wgJVtyZXNdO1xuIgorICAgICAgICAgICAgICIgYnNmbCAlW2JpdHNdLCVbcmVzXVxuIgorICAgICAgICAgICAgIDogW3Jlc10gIj0mciIgKHJlcykKKyAgICAgICAgICAgICA6IFtiaXRzXSAicm0iIChiaXRzKSk7CisgICAgcmV0dXJuIHJlczsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQoreworICAgIGludCBpOworCisgICAgaWYgKGJpdHMgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGkgPSAwOworICAgIGlmIChiaXRzICYgMHhGRkZGMDAwMCkKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHhGRkZGMDAwMDsKKyAgICAgICAgaSArPSAxNjsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweEZGMDBGRjAwKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweEZGMDBGRjAwOworICAgICAgICBpICs9IDg7CisgICAgfQorICAgIGlmIChiaXRzICYgMHhGMEYwRjBGMCkKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHhGMEYwRjBGMDsKKyAgICAgICAgaSArPSA0OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4Q0NDQ0NDQ0MpCisgICAgeworICAgICAgICBiaXRzICY9IDB4Q0NDQ0NDQ0M7CisgICAgICAgIGkgKz0gMjsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweEFBQUFBQUFBKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweEFBQUFBQUFBOworICAgICAgICBpICs9IDE7CisgICAgfQorICAgIHJldHVybiBpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBib3R0b21fYml0KHVuc2lnbmVkIGludCBiaXRzKQoreworICAgIGludCBpOworCisgICAgaWYgKGJpdHMgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGkgPSAzMjsKKyAgICBpZiAoYml0cyAmIDB4MDAwMEZGRkYpCisgICAgeworICAgICAgICBiaXRzICY9IDB4MDAwMEZGRkY7CisgICAgICAgIGkgLT0gMTY7CisgICAgfQorICAgIGlmIChiaXRzICYgMHgwMEZGMDBGRikKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHgwMEZGMDBGRjsKKyAgICAgICAgaSAtPSA4OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4MEYwRjBGMEYpCisgICAgeworICAgICAgICBiaXRzICY9IDB4MEYwRjBGMEY7CisgICAgICAgIGkgLT0gNDsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweDMzMzMzMzMzKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweDMzMzMzMzMzOworICAgICAgICBpIC09IDI7CisgICAgfQorICAgIGlmIChiaXRzICYgMHg1NTU1NTU1NSkKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHg1NTU1NTU1NTsKKyAgICAgICAgaSAtPSAxOworICAgIH0KKyAgICByZXR1cm4gaTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VuZGlmCisKKy8qISBcYnJpZWYgQml0IHJldmVyc2UgYSBieXRlLgorICAgIFxwYXJhbSBkYXRhIFRoZSBieXRlIHRvIGJlIHJldmVyc2VkLgorICAgIFxyZXR1cm4gVGhlIGJpdCByZXZlcnNlZCB2ZXJzaW9uIG9mIGRhdGEuICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50OF90IGJpdF9yZXZlcnNlOCh1aW50OF90IHgpCit7CisjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgLyogSWYgbXVsdGlwbHkgaXMgZmFzdCAqLworICAgIHJldHVybiAoKHgqMHgwODAyVSAmIDB4MjIxMTBVKSB8ICh4KjB4ODAyMFUgJiAweDg4NDQwVSkpKjB4MTAxMDFVID4+IDE2OworI2Vsc2UKKyAgICAvKiBJZiBtdWx0aXBseSBpcyBzbG93LCBidXQgd2UgaGF2ZSBhIGJhcnJlbCBzaGlmdGVyICovCisgICAgeCA9ICh4ID4+IDQpIHwgKHggPDwgNCk7CisgICAgeCA9ICgoeCAmIDB4Q0MpID4+IDIpIHwgKCh4ICYgMHgzMykgPDwgMik7CisgICAgcmV0dXJuICgoeCAmIDB4QUEpID4+IDEpIHwgKCh4ICYgMHg1NSkgPDwgMSk7CisjZW5kaWYKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgMTYgYml0IHdvcmQuCisgICAgXHBhcmFtIGRhdGEgVGhlIHdvcmQgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3VpbnQxNl90IGJpdF9yZXZlcnNlMTYodWludDE2X3QgZGF0YSk7CisKKy8qISBcYnJpZWYgQml0IHJldmVyc2UgYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0gZGF0YSBUaGUgd29yZCB0byBiZSByZXZlcnNlZC4KKyAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwordWludDMyX3QgYml0X3JldmVyc2UzMih1aW50MzJfdCBkYXRhKTsKKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBlYWNoIG9mIHRoZSBmb3VyIGJ5dGVzIGluIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIGRhdGEgVGhlIHdvcmQgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3VpbnQzMl90IGJpdF9yZXZlcnNlXzRieXRlcyh1aW50MzJfdCBkYXRhKTsKKworLyohIFxicmllZiBGaW5kIHRoZSBudW1iZXIgb2Ygc2V0IGJpdHMgaW4gYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSBudW1iZXIgb2Ygc2V0IGJpdHMuICovCitpbnQgb25lX2JpdHMzMih1aW50MzJfdCB4KTsKKworLyohIFxicmllZiBDcmVhdGUgYSBtYXNrIGFzIHdpZGUgYXMgdGhlIG51bWJlciBpbiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIG1hc2suICovCit1aW50MzJfdCBtYWtlX21hc2szMih1aW50MzJfdCB4KTsKKworLyohIFxicmllZiBDcmVhdGUgYSBtYXNrIGFzIHdpZGUgYXMgdGhlIG51bWJlciBpbiBhIDE2IGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIG1hc2suICovCit1aW50MTZfdCBtYWtlX21hc2sxNih1aW50MTZfdCB4KTsKKworLyohIFxicmllZiBGaW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAorICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBsZWFzdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQoreworICAgIHJldHVybiAoeCAmICgtKGludDMyX3QpIHgpKTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEZpbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgb25lIGluIGEgd29yZCwgYW5kIHJldHVybiBhIHdvcmQKKyAgICAgICAgICAgd2l0aCBqdXN0IHRoYXQgYml0IHNldC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSB3b3JkIHdpdGggdGhlIHNpbmdsZSBzZXQgYml0LiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgbW9zdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQoreworI2lmIGRlZmluZWQoX19pMzg2X18pICB8fCAgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgIHJldHVybiAxIDw8IHRvcF9iaXQoeCk7CisjZWxzZQorICAgIHggPSBtYWtlX21hc2szMih4KTsKKyAgICByZXR1cm4gKHggXiAoeCA+PiAxKSk7CisjZW5kaWYKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEZpbmQgdGhlIHBhcml0eSBvZiBhIGJ5dGUuCisgICAgXHBhcmFtIHggVGhlIGJ5dGUgdG8gYmUgY2hlY2tlZC4KKyAgICBccmV0dXJuIDEgZm9yIG9kZCwgb3IgMCBmb3IgZXZlbi4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBwYXJpdHk4KHVpbnQ4X3QgeCkKK3sKKyAgICB4ID0gKHggXiAoeCA+PiA0KSkgJiAweDBGOworICAgIHJldHVybiAoMHg2OTk2ID4+IHgpICYgMTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEZpbmQgdGhlIHBhcml0eSBvZiBhIDE2IGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIGNoZWNrZWQuCisgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5MTYodWludDE2X3QgeCkKK3sKKyAgICB4IF49ICh4ID4+IDgpOworICAgIHggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisgICAgcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgY2hlY2tlZC4KKyAgICBccmV0dXJuIDEgZm9yIG9kZCwgb3IgMCBmb3IgZXZlbi4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBwYXJpdHkzMih1aW50MzJfdCB4KQoreworICAgIHggXj0gKHggPj4gMTYpOworICAgIHggXj0gKHggPj4gOCk7CisgICAgeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKKyAgICByZXR1cm4gKDB4Njk5NiA+PiB4KSAmIDE7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisvKi0gRW5kIG9mIGZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTI4MWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogU3BhbkRTUCAtIGEgc2VyaWVzIG9mIERTUCBjb21wb25lbnRzIGZvciB0ZWxlcGhvbnkKKyAqCisgKiBlY2hvLmMgLSBBIGxpbmUgZWNobyBjYW5jZWxsZXIuICBUaGlzIGNvZGUgaXMgYmVpbmcgZGV2ZWxvcGVkCisgKiAgICAgICAgICBhZ2FpbnN0IGFuZCBwYXJ0aWFsbHkgY29tcGxpZXMgd2l0aCBHMTY4LgorICoKKyAqIFdyaXR0ZW4gYnkgU3RldmUgVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+CisgKiAgICAgICAgIGFuZCBEYXZpZCBSb3dlIDxkYXZpZF9hdF9yb3dldGVsX2RvdF9jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzIFN0ZXZlIFVuZGVyd29vZCwgMjAwNyBEYXZpZCBSb3dlCisgKgorICogQmFzZWQgb24gYSBiaXQgZnJvbSBoZXJlLCBhIGJpdCBmcm9tIHRoZXJlLCBleWUgb2YgdG9hZCwgZWFyIG9mCisgKiBiYXQsIDE1IHllYXJzIG9mIGZhaWxlZCBhdHRlbXB0cyBieSBEYXZpZCBhbmQgYSBmZXcgZnJpZWQgYnJhaW4KKyAqIGNlbGxzLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICRJZDogZWNoby5jLHYgMS4yMCAyMDA2LzEyLzAxIDE4OjAwOjQ4IHN0ZXZldSBFeHAgJAorICovCisKKy8qISBcZmlsZSAqLworCisvKiBJbXBsZW1lbnRhdGlvbiBOb3RlcworICAgRGF2aWQgUm93ZQorICAgQXByaWwgMjAwNworCisgICBUaGlzIGNvZGUgc3RhcnRlZCBsaWZlIGFzIFN0ZXZlJ3MgTkxNUyBhbGdvcml0aG0gd2l0aCBhIHRhcAorICAgcm90YXRpb24gYWxnb3JpdGhtIHRvIGhhbmRsZSBkaXZlcmdlbmNlIGR1cmluZyBkb3VibGUgdGFsay4gIEkKKyAgIGFkZGVkIGEgR2VpZ2VsIERvdWJsZSBUYWxrIERldGVjdG9yIChEVEQpIFsyXSBhbmQgcGVyZm9ybWVkIHNvbWUKKyAgIEcxNjggdGVzdHMuICBIb3dldmVyIEkgaGFkIHRyb3VibGUgbWVldGluZyB0aGUgRzE2OCByZXF1aXJlbWVudHMsCisgICBlc3BlY2lhbGx5IGZvciBkb3VibGUgdGFsayAtIHRoZXJlIHdlcmUgYWx3YXlzIGNhc2VzIHdoZXJlIG15IERURAorICAgZmFpbGVkLCBmb3IgZXhhbXBsZSB3aGVyZSBuZWFyIGVuZCBzcGVlY2ggd2FzIHVuZGVyIHRoZSA2ZEIKKyAgIHRocmVzaG9sZCByZXF1aXJlZCBmb3IgZGVjbGFyaW5nIGRvdWJsZSB0YWxrLgorCisgICBTbyBJIHRyaWVkIGEgdHdvIHBhdGggYWxnb3JpdGhtIFsxXSwgd2hpY2ggaGFzIHNvIGZhciBnaXZlbiBiZXR0ZXIKKyAgIHJlc3VsdHMuICBUaGUgb3JpZ2luYWwgdGFwIHJvdGF0aW9uL0dlaWdlbCBhbGdvcml0aG0gaXMgYXZhaWxhYmxlCisgICBpbiBTVk4gaHR0cDovL3N2bi5yb3dldGVsLmNvbS9zb2Z0d2FyZS9vc2xlYy90YWdzL2JlZm9yZV8xNmJpdC4KKyAgIEl0J3MgcHJvYmFibHkgcG9zc2libGUgdG8gbWFrZSBpdCB3b3JrIGlmIHNvbWUgb25lIHdhbnRzIHRvIHB1dCBzb21lCisgICBzZXJpb3VzIHdvcmsgaW50byBpdC4KKworICAgQXQgcHJlc2VudCBubyBzcGVjaWFsIHRyZWF0bWVudCBpcyBwcm92aWRlZCBmb3IgdG9uZXMsIHdoaWNoCisgICBnZW5lcmFsbHkgY2F1c2UgTkxNUyBhbGdvcml0aG1zIHRvIGRpdmVyZ2UuICBJbml0aWFsIHJ1bnMgb2YgYQorICAgc3Vic2V0IG9mIHRoZSBHMTY4IHRlc3RzIGZvciB0b25lcyAoZS5nIC4vZWNob190ZXN0IDYpIHNob3cgdGhlCisgICBjdXJyZW50IGFsZ29yaXRobSBpcyBwYXNzaW5nIE9LLCB3aGljaCBpcyBraW5kIG9mIHN1cnByaXNpbmcuICBUaGUKKyAgIGZ1bGwgc2V0IG9mIHRlc3RzIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCB0byBjb25maXJtIHRoaXMgcmVzdWx0LgorCisgICBPbmUgb3RoZXIgaW50ZXJlc3RpbmcgY2hhbmdlIGlzIHRoYXQgSSBoYXZlIG1hbmFnZWQgdG8gZ2V0IHRoZSBOTE1TCisgICBjb2RlIHRvIHdvcmsgd2l0aCAxNiBiaXQgY29lZmZpY2llbnRzLCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgMzIKKyAgIGJpdCBjb2VmZmljZW50cy4gIFRoaXMgcmVkdWNlcyB0aGUgTUlQcyBhbmQgc3RvcmFnZSByZXF1aXJlZC4KKyAgIEkgZXZhdWxhdGVkIHRoZSAxNiBiaXQgcG9ydCB1c2luZyBnMTY4X3Rlc3RzLnNoIGFuZCBsaXN0ZW5pbmcgdGVzdHMKKyAgIG9uIDQgcmVhbC13b3JsZCBzYW1wbGVzLgorCisgICBJIGFsc28gYXR0ZW1wdGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGJsb2NrIGJhc2VkIE5MTVMgdXBkYXRlCisgICBbMl0gYnV0IGFsdGhvdWdoIHRoaXMgcGFzc2VzIGcxNjhfdGVzdHMuc2ggaXQgZGlkbid0IGNvbnZlcmdlIHdlbGwKKyAgIG9uIHRoZSByZWFsLXdvcmxkIHNhbXBsZXMuICBJIGhhdmUgbm8gaWRlYSB3aHksIHBlcmhhcHMgYSBzY2FsaW5nCisgICBwcm9ibGVtLiAgVGhlIGJsb2NrIGJhc2VkIGNvZGUgaXMgYWxzbyBhdmFpbGFibGUgaW4gU1ZOCisgICBodHRwOi8vc3ZuLnJvd2V0ZWwuY29tL3NvZnR3YXJlL29zbGVjL3RhZ3MvYmVmb3JlXzE2Yml0LiAgSWYgdGhpcworICAgY29kZSBjYW4gYmUgZGVidWdnZWQsIGl0IHdpbGwgbGVhZCB0byBmdXJ0aGVyIHJlZHVjdGlvbiBpbiBNSVBTLCBhcworICAgdGhlIGJsb2NrIHVwZGF0ZSBjb2RlIG1hcHMgbmljZWx5IG9udG8gRFNQIGluc3RydWN0aW9uIHNldHMgKGl0J3MgYQorICAgZG90IHByb2R1Y3QpIGNvbXBhcmVkIHRvIHRoZSBjdXJyZW50IHNhbXBsZS1ieS1zYW1wbGUgdXBkYXRlLgorCisgICBTdGV2ZSBhbHNvIGhhcyBzb21lIG5pY2Ugbm90ZXMgb24gZWNobyBjYW5jZWxsZXJzIGluIGVjaG8uaAorCisKKyAgIFJlZmVyZW5jZXM6CisKKyAgIFsxXSBPY2hpYWksIEFyZXNla2ksIGFuZCBPZ2loYXJhLCAiRWNobyBDYW5jZWxsZXIgd2l0aCBUd28gRWNobworICAgICAgIFBhdGggTW9kZWxzIiwgSUVFRSBUcmFuc2FjdGlvbnMgb24gY29tbXVuaWNhdGlvbnMsIENPTS0yNSwKKyAgICAgICBOby4gNiwgSnVuZQorICAgICAgIDE5NzcuCisgICAgICAgaHR0cDovL3d3dy5yb3dldGVsLmNvbS9pbWFnZXMvZWNoby9kdWFsX3BhdGhfcGFwZXIucGRmCisKKyAgIFsyXSBUaGUgY2xhc3NpYywgdmVyeSB1c2VmdWwgcGFwZXIgdGhhdCB0ZWxscyB5b3UgaG93IHRvCisgICAgICAgYWN0dWFsbHkgYnVpbGQgYSByZWFsIHdvcmxkIGVjaG8gY2FuY2VsbGVyOgorICAgICAgICAgTWVzc2Vyc2NobWl0dCwgSGVkYmVyZywgQ29sZSwgSGFvdWksIFdpbnNoaXAsICJEaWdpdGFsIFZvaWNlCisgICAgICAgICBFY2hvIENhbmNlbGxlciB3aXRoIGEgVE1TMzIwMDIwLAorICAgICAgICAgaHR0cDovL3d3dy5yb3dldGVsLmNvbS9pbWFnZXMvZWNoby9zcHJhMTI5LnBkZgorCisgICBbM10gSSBoYXZlIHdyaXR0ZW4gYSBzZXJpZXMgb2YgYmxvZyBwb3N0cyBvbiB0aGlzIHdvcmssIGhlcmUgaXMKKyAgICAgICBQYXJ0IDE6IGh0dHA6Ly93d3cucm93ZXRlbC5jb20vYmxvZy8/cD0xOAorCisgICBbNF0gVGhlIHNvdXJjZSBjb2RlIGh0dHA6Ly9zdm4ucm93ZXRlbC5jb20vc29mdHdhcmUvb3NsZWMvCisKKyAgIFs1XSBBIG5pY2UgcmVmZXJlbmNlIG9uIExNUyBmaWx0ZXJzOgorICAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZWFzdF9tZWFuX3NxdWFyZXNfZmlsdGVyCisKKyAgIENyZWRpdHM6CisKKyAgIFRoYW5rcyB0byBTdGV2ZSBVbmRlcndvb2QsIEplYW4tTWFyYyBWYWxpbiwgYW5kIFJhbWFrcmlzaG5hbgorICAgTXV0aHVrcmlzaG5hbiBmb3IgdGhlaXIgc3VnZ2VzdGlvbnMgYW5kIGVtYWlsIGRpc2N1c3Npb25zLiAgVGhhbmtzCisgICBhbHNvIHRvIHRob3NlIHBlb3BsZSB3aG8gY29sbGVjdGVkIGVjaG8gc2FtcGxlcyBmb3IgbWUgc3VjaCBhcworICAgTWFyaywgUGF3ZWwsIGFuZCBQYXZlbC4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gICAgICAgLyogV2UncmUgZG9pbmcga2VybmVsIHdvcmsgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjZGVmaW5lIG1hbGxvYyhhKSBrbWFsbG9jKChhKSwgR0ZQX0tFUk5FTCkKKyNkZWZpbmUgZnJlZShhKSBrZnJlZShhKQorCisjaW5jbHVkZSAiYml0X29wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJlY2hvLmgiCisKKyNkZWZpbmUgTUlOX1RYX1BPV0VSX0ZPUl9BREFQVElPTiAgIDY0CisjZGVmaW5lIE1JTl9SWF9QT1dFUl9GT1JfQURBUFRJT04gICA2NAorI2RlZmluZSBEVERfSEFOR09WRVIgICAgICAgICAgICAgICA2MDAgICAgIC8qIDYwMCBzYW1wbGVzLCBvciA3NW1zICAgICAqLworI2RlZmluZSBEQ19MT0cyQkVUQSAgICAgICAgICAgICAgICAgIDMgICAgIC8qIGxvZzIoKSBvZiBEQyBmaWx0ZXIgQmV0YSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DVElPTlMKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhZGFwdGluZyBjb2VmZnMgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHN0b2NoYXN0aWMgZGVzY2VudCAoTilMTVMgYWxnb3JpdGhtICovCisKKworI2lmZGVmIF9fQkxBQ0tGSU5fQVNNX18KK3N0YXRpYyB2b2lkIF9faW5saW5lX18gbG1zX2FkYXB0X2JnKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQgY2xlYW4sIGludCBzaGlmdCkKK3sKKyAgICBpbnQgaSwgajsKKyAgICBpbnQgb2Zmc2V0MTsKKyAgICBpbnQgb2Zmc2V0MjsKKyAgICBpbnQgZmFjdG9yOworICAgIGludCBleHA7CisgICAgaW50MTZfdCAqcGhpc3Q7CisgICAgaW50IG47CisKKyAgICBpZiAoc2hpZnQgPiAwKQorCWZhY3RvciA9IGNsZWFuIDw8IHNoaWZ0OworICAgIGVsc2UKKwlmYWN0b3IgPSBjbGVhbiA+PiAtc2hpZnQ7CisKKyAgICAvKiBVcGRhdGUgdGhlIEZJUiB0YXBzICovCisKKyAgICBvZmZzZXQyID0gZWMtPmN1cnJfcG9zOworICAgIG9mZnNldDEgPSBlYy0+dGFwcyAtIG9mZnNldDI7CisgICAgcGhpc3QgPSAmZWMtPmZpcl9zdGF0ZV9iZy5oaXN0b3J5W29mZnNldDJdOworCisgICAgLyogc3Q6IGFuZCBlbjogaGVscCB1cyBsb2NhdGUgdGhlIGFzc2VtYmxlciBpbiBlY2hvLnMgKi8KKworICAgIC8vYXNtKCJzdDoiKTsKKyAgICBuID0gZWMtPnRhcHM7CisgICAgZm9yIChpID0gMCwgaiA9IG9mZnNldDI7ICBpIDwgbjsgIGkrKywgaisrKQorICAgIHsKKyAgICAgICBleHAgPSAqcGhpc3QrKyAqIGZhY3RvcjsKKyAgICAgICBlYy0+ZmlyX3RhcHMxNlsxXVtpXSArPSAoaW50MTZfdCkgKChleHArKDE8PDE0KSkgPj4gMTUpOworICAgIH0KKyAgICAvL2FzbSgiZW46Iik7CisKKyAgICAvKiBOb3RlIHRoZSBhc20gZm9yIHRoZSBpbm5lciBsb29wIGFib3ZlIGdlbmVyYXRlZCBieSBCbGFja2ZpbiBnY2MKKyAgICAgICA0LjEuMSBpcyBwcmV0dHkgZ29vZCAobm90ZSBldmVuIHBhcmFsbGVsIGluc3RydWN0aW9ucyB1c2VkKToKKworICAgIAlSMCA9IFcgW1AwKytdIChYKTsKKwlSMCAqPSBSMjsKKwlSMCA9IFIwICsgUjMgKE5TKSB8fAorCVIxID0gVyBbUDFdIChYKSB8fAorCW5vcDsKKwlSMCA+Pj49IDE1OworCVIwID0gUjAgKyBSMTsKKwlXIFtQMSsrXSA9IFIwOworCisJQSBibG9jayBiYXNlZCB1cGRhdGUgYWxnb3JpdGhtIHdvdWxkIGJlIG11Y2ggZmFzdGVyIGJ1dCB0aGUKKwlhYm92ZSBjYW4ndCBiZSBpbXByb3ZlZCBvbiBtdWNoLiAgRXZlcnkgaW5zdHJ1Y3Rpb24gc2F2ZWQgaW4KKwl0aGUgbG9vcCBhYm92ZSBpcyAyIE1JUHMvY2ghICBUaGUgZm9yIGxvb3AgYWJvdmUgaXMgd2hlcmUgdGhlCisJQmxhY2tmaW4gc3BlbmRzIG1vc3Qgb2YgaXQncyB0aW1lIC0gYWJvdXQgMTcgTUlQcy9jaCBtZWFzdXJlZAorCXdpdGggc3BlZWR0ZXN0LmMgd2l0aCAyNTYgdGFwcyAoMzJtcykuICBXcml0ZS1iYWNrIGFuZAorCVdyaXRlLXRocm91Z2ggY2FjaGUgZ2F2ZSBhYm91dCB0aGUgc2FtZSBwZXJmb3JtYW5jZS4KKyAgICAqLworfQorCisvKgorICAgSURFQVMgZm9yIGZ1cnRoZXIgb3B0aW1pc2F0aW9uIG9mIGxtc19hZGFwdF9iZygpOgorCisgICAxLyBUaGUgcm91bmRpbmcgaXMgcXVpdGUgY29zdGx5LiAgQ291bGQgd2Uga2VlcCBhcyAzMiBiaXQgY29lZmZzCisgICB0aGVuIG1ha2UgZmlsdGVyIHBsdWNrIHRoZSBNUyAxNi1iaXRzIG9mIHRoZSBjb2VmZnMgd2hlbiBmaWx0ZXJpbmc/CisgICBIb3dldmVyIHRoaXMgd291bGQgbG93ZXIgcG90ZW50aWFsIG9wdGltaXNhdGlvbiBvZiBmaWx0ZXIsIGFzIEkKKyAgIHRoaW5rIHRoZSBkdWFsLU1BQyBhcmNoaXRlY3R1cmUgcmVxdWlyZXMgcGFja2VkIDE2IGJpdCBjb2VmZnMuCisKKyAgIDIvIEJsb2NrIGJhc2VkIHVwZGF0ZSB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgYXMgcGVyIGNvbW1lbnRzIGFib3ZlLAorICAgY291bGQgdXNlIGR1YWwgTUFDIGFyY2hpdGVjdHVyZS4KKworICAgMy8gTG9vayBmb3Igc2FtZSBzYW1wbGUgQmxhY2tmaW4gTE1TIGNvZGUsIHNlZSBpZiB3ZSBjYW4gZ2V0IGR1YWwtTUFDCisgICBwYWNraW5nLgorCisgICA0LyBFeGVjdXRlIHRoZSB3aG9sZSBlL2MgaW4gYSBibG9jayBvZiBzYXkgMjBtcyByYXRoZXIgdGhhbiBzYW1wbGUKKyAgIGJ5IHNhbXBsZS4gIFByb2Nlc3NpbmcgYSBmZXcgc2FtcGxlcyBldmVyeSBtcyBpcyBpbmVmZmljaWVudC4KKyovCisKKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxtc19hZGFwdF9iZyhlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50IGNsZWFuLCBpbnQgc2hpZnQpCit7CisgICAgaW50IGk7CisKKyAgICBpbnQgb2Zmc2V0MTsKKyAgICBpbnQgb2Zmc2V0MjsKKyAgICBpbnQgZmFjdG9yOworICAgIGludCBleHA7CisKKyAgICBpZiAoc2hpZnQgPiAwKQorCWZhY3RvciA9IGNsZWFuIDw8IHNoaWZ0OworICAgIGVsc2UKKwlmYWN0b3IgPSBjbGVhbiA+PiAtc2hpZnQ7CisKKyAgICAvKiBVcGRhdGUgdGhlIEZJUiB0YXBzICovCisKKyAgICBvZmZzZXQyID0gZWMtPmN1cnJfcG9zOworICAgIG9mZnNldDEgPSBlYy0+dGFwcyAtIG9mZnNldDI7CisKKyAgICBmb3IgKGkgPSBlYy0+dGFwcyAtIDE7ICBpID49IG9mZnNldDE7ICBpLS0pCisgICAgeworICAgICAgIGV4cCA9IChlYy0+ZmlyX3N0YXRlX2JnLmhpc3RvcnlbaSAtIG9mZnNldDFdKmZhY3Rvcik7CisgICAgICAgZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwKygxPDwxNCkpID4+IDE1KTsKKyAgICB9CisgICAgZm9yICggIDsgIGkgPj0gMDsgIGktLSkKKyAgICB7CisgICAgICAgZXhwID0gKGVjLT5maXJfc3RhdGVfYmcuaGlzdG9yeVtpICsgb2Zmc2V0Ml0qZmFjdG9yKTsKKyAgICAgICBlYy0+ZmlyX3RhcHMxNlsxXVtpXSArPSAoaW50MTZfdCkgKChleHArKDE8PDE0KSkgPj4gMTUpOworICAgIH0KK30KKyNlbmRpZgorCisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZWNob19jYW5fc3RhdGVfdCAqZWNob19jYW5fY3JlYXRlKGludCBsZW4sIGludCBhZGFwdGlvbl9tb2RlKQoreworICAgIGVjaG9fY2FuX3N0YXRlX3QgKmVjOworICAgIGludCBpOworICAgIGludCBqOworCisgICAgZWMgPSBrbWFsbG9jKHNpemVvZigqZWMpLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoZWMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuICBOVUxMOworICAgIG1lbXNldChlYywgMCwgc2l6ZW9mKCplYykpOworCisgICAgZWMtPnRhcHMgPSBsZW47CisgICAgZWMtPmxvZzJ0YXBzID0gdG9wX2JpdChsZW4pOworICAgIGVjLT5jdXJyX3BvcyA9IGVjLT50YXBzIC0gMTsKKworICAgIGZvciAoaSA9IDA7ICBpIDwgMjsgIGkrKykKKyAgICB7CisgICAgICAgIGlmICgoZWMtPmZpcl90YXBzMTZbaV0gPSAoaW50MTZfdCAqKSBtYWxsb2MoKGVjLT50YXBzKSpzaXplb2YoaW50MTZfdCkpKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyAgaiA8IGk7ICBqKyspCisgICAgICAgICAgICAgICAga2ZyZWUoZWMtPmZpcl90YXBzMTZbal0pOworICAgICAgICAgICAga2ZyZWUoZWMpOworICAgICAgICAgICAgcmV0dXJuICBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbXNldChlYy0+ZmlyX3RhcHMxNltpXSwgMCwgKGVjLT50YXBzKSpzaXplb2YoaW50MTZfdCkpOworICAgIH0KKworICAgIGZpcjE2X2NyZWF0ZSgmZWMtPmZpcl9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgZWMtPmZpcl90YXBzMTZbMF0sCisgICAgICAgICAgICAgICAgIGVjLT50YXBzKTsKKyAgICBmaXIxNl9jcmVhdGUoJmVjLT5maXJfc3RhdGVfYmcsCisgICAgICAgICAgICAgICAgIGVjLT5maXJfdGFwczE2WzFdLAorICAgICAgICAgICAgICAgICBlYy0+dGFwcyk7CisKKyAgICBmb3IoaT0wOyBpPDU7IGkrKykgeworICAgICAgZWMtPnh2dHhbaV0gPSBlYy0+eXZ0eFtpXSA9IGVjLT54dnJ4W2ldID0gZWMtPnl2cnhbaV0gPSAwOworICAgIH0KKworICAgIGVjLT5jbmdfbGV2ZWwgPSAxMDAwOworICAgIGVjaG9fY2FuX2FkYXB0aW9uX21vZGUoZWMsIGFkYXB0aW9uX21vZGUpOworCisgICAgZWMtPnNuYXBzaG90ID0gKGludDE2X3QqKW1hbGxvYyhlYy0+dGFwcypzaXplb2YoaW50MTZfdCkpOworICAgIG1lbXNldChlYy0+c25hcHNob3QsIDAsIHNpemVvZihpbnQxNl90KSplYy0+dGFwcyk7CisKKyAgICBlYy0+Y29uZF9tZXQgPSAwOworICAgIGVjLT5Qc3RhdGVzID0gMDsKKyAgICBlYy0+THR4YWNjID0gZWMtPkxyeGFjYyA9IGVjLT5MY2xlYW5hY2MgPSBlYy0+TGNsZWFuX2JnYWNjID0gMDsKKyAgICBlYy0+THR4ID0gZWMtPkxyeCA9IGVjLT5MY2xlYW4gPSBlYy0+TGNsZWFuX2JnID0gMDsKKyAgICBlYy0+dHhfMSA9IGVjLT50eF8yID0gZWMtPnJ4XzEgPSBlYy0+cnhfMiA9IDA7CisgICAgZWMtPkxiZ24gPSBlYy0+TGJnbl9hY2MgPSAwOworICAgIGVjLT5MYmduX3VwcGVyID0gMjAwOworICAgIGVjLT5MYmduX3VwcGVyX2FjYyA9IGVjLT5MYmduX3VwcGVyIDw8IDEzOworCisgICAgcmV0dXJuICBlYzsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIGVjaG9fY2FuX2ZyZWUoZWNob19jYW5fc3RhdGVfdCAqZWMpCit7CisJaW50IGk7CisKKwlmaXIxNl9mcmVlKCZlYy0+ZmlyX3N0YXRlKTsKKwlmaXIxNl9mcmVlKCZlYy0+ZmlyX3N0YXRlX2JnKTsKKwlmb3IgKGkgPSAwOyAgaSA8IDI7ICBpKyspCisJCWtmcmVlKGVjLT5maXJfdGFwczE2W2ldKTsKKwlrZnJlZShlYy0+c25hcHNob3QpOworCWtmcmVlKGVjKTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIGVjaG9fY2FuX2FkYXB0aW9uX21vZGUoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludCBhZGFwdGlvbl9tb2RlKQoreworICAgIGVjLT5hZGFwdGlvbl9tb2RlID0gYWRhcHRpb25fbW9kZTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIGVjaG9fY2FuX2ZsdXNoKGVjaG9fY2FuX3N0YXRlX3QgKmVjKQoreworICAgIGludCBpOworCisgICAgZWMtPkx0eGFjYyA9IGVjLT5McnhhY2MgPSBlYy0+TGNsZWFuYWNjID0gZWMtPkxjbGVhbl9iZ2FjYyA9IDA7CisgICAgZWMtPkx0eCA9IGVjLT5McnggPSBlYy0+TGNsZWFuID0gZWMtPkxjbGVhbl9iZyA9IDA7CisgICAgZWMtPnR4XzEgPSBlYy0+dHhfMiA9IGVjLT5yeF8xID0gZWMtPnJ4XzIgPSAwOworCisgICAgZWMtPkxiZ24gPSBlYy0+TGJnbl9hY2MgPSAwOworICAgIGVjLT5MYmduX3VwcGVyID0gMjAwOworICAgIGVjLT5MYmduX3VwcGVyX2FjYyA9IGVjLT5MYmduX3VwcGVyIDw8IDEzOworCisgICAgZWMtPm5vbnVwZGF0ZV9kd2VsbCA9IDA7CisKKyAgICBmaXIxNl9mbHVzaCgmZWMtPmZpcl9zdGF0ZSk7CisgICAgZmlyMTZfZmx1c2goJmVjLT5maXJfc3RhdGVfYmcpOworICAgIGVjLT5maXJfc3RhdGUuY3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisgICAgZWMtPmZpcl9zdGF0ZV9iZy5jdXJyX3BvcyA9IGVjLT50YXBzIC0gMTsKKyAgICBmb3IgKGkgPSAwOyAgaSA8IDI7ICBpKyspCisgICAgICAgIG1lbXNldChlYy0+ZmlyX3RhcHMxNltpXSwgMCwgZWMtPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKworICAgIGVjLT5jdXJyX3BvcyA9IGVjLT50YXBzIC0gMTsKKyAgICBlYy0+UHN0YXRlcyA9IDA7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBlY2hvX2Nhbl9zbmFwc2hvdChlY2hvX2Nhbl9zdGF0ZV90ICplYykgeworICAgIG1lbWNweShlYy0+c25hcHNob3QsIGVjLT5maXJfdGFwczE2WzBdLCBlYy0+dGFwcypzaXplb2YoaW50MTZfdCkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIER1YWwgUGF0aCBFY2hvIENhbmNlbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQxNl90IGVjaG9fY2FuX3VwZGF0ZShlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50MTZfdCB0eCwgaW50MTZfdCByeCkKK3sKKyAgICBpbnQzMl90IGVjaG9fdmFsdWU7CisgICAgaW50IGNsZWFuX2JnOworICAgIGludCB0bXAsIHRtcDE7CisKKyAgICAvKiBJbnB1dCBzY2FsaW5nIHdhcyBmb3VuZCBiZSByZXF1aXJlZCB0byBwcmV2ZW50IHByb2JsZW1zIHdoZW4gdHgKKyAgICAgICBzdGFydHMgY2xpcHBpbmcuICBBbm90aGVyIHBvc3NpYmxlIHdheSB0byBoYW5kbGUgdGhpcyB3b3VsZCBiZSB0aGUKKyAgICAgICBmaWx0ZXIgY29lZmZpY2VudCBzY2FsaW5nLiAqLworCisgICAgZWMtPnR4ID0gdHg7IGVjLT5yeCA9IHJ4OworICAgIHR4ID4+PTE7CisgICAgcnggPj49MTsKKworICAgIC8qCisgICAgICAgRmlsdGVyIERDLCAzZEIgcG9pbnQgaXMgMTYwSHogKEkgdGhpbmspLCBub3RlIDMyIGJpdCBwcmVjaXNpb24gcmVxdWlyZWQKKyAgICAgICBvdGhlcndpc2UgdmFsdWVzIGRvIG5vdCB0cmFjayBkb3duIHRvIDAuIFplcm8gYXQgREMsIFBvbGUgYXQgKDEtQmV0YSkKKyAgICAgICBvbmx5IHJlYWwgYXhpcy4gIFNvbWUgY2hpcCBzZXRzIChsaWtlIFNpIGxhYnMpIGRvbid0IG5lZWQKKyAgICAgICB0aGlzLCBidXQgc29tZXRoaW5nIGxpa2UgYSAkMTAgWDEwMFAgY2FyZCBkb2VzLiAgQW55IERDIHJlYWxseSBzbG93cworICAgICAgIGRvd24gY29udmVyZ2VuY2UuCisKKyAgICAgICBOb3RlOiByZW1vdmVzIHNvbWUgbG93IGZyZXF1ZW5jeSBmcm9tIHRoZSBzaWduYWwsIHRoaXMgcmVkdWNlcworICAgICAgIHRoZSBzcGVlY2ggcXVhbGl0eSB3aGVuIGxpc3RlbmluZyB0byBzYW1wbGVzIHRocm91Z2ggaGVhZHBob25lcworICAgICAgIGJ1dCBtYXkgbm90IGJlIG9idmlvdXMgdGhyb3VnaCBhIHRlbGVwaG9uZSBoYW5kc2V0LgorCisgICAgICAgTm90ZSB0aGF0IHRoZSAzZEIgZnJlcXVlbmN5IGluIHJhZGlhbnMgaXMgYXBwcm94IEJldGEsIGUuZy4gZm9yCisgICAgICAgQmV0YSA9IDJeKC0zKSA9IDAuMTI1LCAzZEIgZnJlcSBpcyAwLjEyNSByYWRzID0gMTU5SHouCisgICAgKi8KKworICAgIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9SWF9IUEYpIHsKKyAgICAgIHRtcCA9IHJ4IDw8IDE1OworI2lmIDEKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBnYWluIG9mIHRoZSBIUEYgaXMgMS4wLiBUaGlzIGNhbiBzdGlsbCBzYXR1cmF0ZSBhIGxpdHRsZSB1bmRlcgorICAgICAgICAgICBpbXB1bHNlIGNvbmRpdGlvbnMsIGFuZCBpdCBtaWdodCByb2xsIHRvIDMyNzY4IGFuZCBuZWVkIGNsaXBwaW5nIG9uIHN1c3RhaW5lZCBwZWFrCisgICAgICAgICAgIGxldmVsIHNpZ25hbHMuIEhvd2V2ZXIsIHRoZSBzY2FsZSBvZiBzdWNoIGNsaXBwaW5nIGlzIHNtYWxsLCBhbmQgdGhlIGVycm9yIGR1ZSB0bworICAgICAgICAgICBhbnkgc2F0dXJhdGlvbiBzaG91bGQgbm90IG1hcmtlZGx5IGFmZmVjdCB0aGUgZG93bnN0cmVhbSBwcm9jZXNzaW5nLiAqLworICAgICAgICB0bXAgLT0gKHRtcCA+PiA0KTsKKyNlbmRpZgorICAgICAgZWMtPnJ4XzEgKz0gLShlYy0+cnhfMT4+RENfTE9HMkJFVEEpICsgdG1wIC0gZWMtPnJ4XzI7CisKKyAgICAgIC8qIGhhcmQgbGltaXQgZmlsdGVyIHRvIHByZXZlbnQgY2xpcHBpbmcuICBOb3RlIHRoYXQgYXQgdGhpcyBzdGFnZQorCSByeCBzaG91bGQgYmUgbGltaXRlZCB0byArLy0gMTYzODMgZHVlIHRvIHJpZ2h0IHNoaWZ0IGFib3ZlICovCisgICAgICB0bXAxID0gZWMtPnJ4XzEgPj4gMTU7CisgICAgICBpZiAodG1wMSA+IDE2MzgzKSB0bXAxID0gMTYzODM7CisgICAgICBpZiAodG1wMSA8IC0xNjM4MykgdG1wMSA9IC0xNjM4MzsKKyAgICAgIHJ4ID0gdG1wMTsKKyAgICAgIGVjLT5yeF8yID0gdG1wOworICAgIH0KKworICAgIC8qIEJsb2NrIGF2ZXJhZ2Ugb2YgcG93ZXIgaW4gdGhlIGZpbHRlciBzdGF0ZXMuICBVc2VkIGZvcgorICAgICAgIGFkYXB0aW9uIHBvd2VyIGNhbGN1bGF0aW9uLiAqLworCisgICAgeworCWludCBuZXcsIG9sZDsKKworCS8qIGVmZmljaWVudCAib3V0IHdpdGggdGhlIG9sZCBhbmQgaW4gd2l0aCB0aGUgbmV3IiBhbGdvcml0aG0gc28KKwkgICB3ZSBkb24ndCBoYXZlIHRvIHJlY2FsY3VsYXRlIG92ZXIgdGhlIHdob2xlIGJsb2NrIG9mCisJICAgc2FtcGxlcy4gKi8KKwluZXcgPSAoaW50KXR4ICogKGludCl0eDsKKwlvbGQgPSAoaW50KWVjLT5maXJfc3RhdGUuaGlzdG9yeVtlYy0+ZmlyX3N0YXRlLmN1cnJfcG9zXSAqCisgICAgICAgICAgICAgIChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdOworCWVjLT5Qc3RhdGVzICs9ICgobmV3IC0gb2xkKSArICgxPDxlYy0+bG9nMnRhcHMpKSA+PiBlYy0+bG9nMnRhcHM7CisJaWYgKGVjLT5Qc3RhdGVzIDwgMCkgZWMtPlBzdGF0ZXMgPSAwOworICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBzaG9ydCB0ZXJtIGF2ZXJhZ2UgbGV2ZWxzIHVzaW5nIHNpbXBsZSBzaW5nbGUgcG9sZSBJSVJzICovCisKKyAgICBlYy0+THR4YWNjICs9IGFicyh0eCkgLSBlYy0+THR4OworICAgIGVjLT5MdHggPSAoZWMtPkx0eGFjYyArICgxPDw0KSkgPj4gNTsKKyAgICBlYy0+THJ4YWNjICs9IGFicyhyeCkgLSBlYy0+THJ4OworICAgIGVjLT5McnggPSAoZWMtPkxyeGFjYyArICgxPDw0KSkgPj4gNTsKKworICAgIC8qIEZvcmVncm91bmQgZmlsdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICBlYy0+ZmlyX3N0YXRlLmNvZWZmcyA9IGVjLT5maXJfdGFwczE2WzBdOworICAgIGVjaG9fdmFsdWUgPSBmaXIxNigmZWMtPmZpcl9zdGF0ZSwgdHgpOworICAgIGVjLT5jbGVhbiA9IHJ4IC0gZWNob192YWx1ZTsKKyAgICBlYy0+TGNsZWFuYWNjICs9IGFicyhlYy0+Y2xlYW4pIC0gZWMtPkxjbGVhbjsKKyAgICBlYy0+TGNsZWFuID0gKGVjLT5MY2xlYW5hY2MgKyAoMTw8NCkpID4+IDU7CisKKyAgICAvKiBCYWNrZ3JvdW5kIGZpbHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgZWNob192YWx1ZSA9IGZpcjE2KCZlYy0+ZmlyX3N0YXRlX2JnLCB0eCk7CisgICAgY2xlYW5fYmcgPSByeCAtIGVjaG9fdmFsdWU7CisgICAgZWMtPkxjbGVhbl9iZ2FjYyArPSBhYnMoY2xlYW5fYmcpIC0gZWMtPkxjbGVhbl9iZzsKKyAgICBlYy0+TGNsZWFuX2JnID0gKGVjLT5MY2xlYW5fYmdhY2MgKyAoMTw8NCkpID4+IDU7CisKKyAgICAvKiBCYWNrZ3JvdW5kIEZpbHRlciBhZGFwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAvKiBBbG1vc3QgYWx3YXlzIGFkYXAgYmcgZmlsdGVyLCBqdXN0IHNpbXBsZSBEVCBhbmQgZW5lcmd5CisgICAgICAgZGV0ZWN0aW9uIHRvIG1pbmltaXNlIGFkYXB0aW9uIGluIGNhc2VzIG9mIHN0cm9uZyBkb3VibGUgdGFsay4KKyAgICAgICBIb3dldmVyIHRoaXMgaXMgbm90IGNyaXRpY2FsIGZvciB0aGUgZHVhbCBwYXRoIGFsZ29yaXRobS4KKyAgICAqLworICAgIGVjLT5mYWN0b3IgPSAwOworICAgIGVjLT5zaGlmdCA9IDA7CisgICAgaWYgKChlYy0+bm9udXBkYXRlX2R3ZWxsID09IDApKSB7CisJaW50ICAgUCwgbG9nUCwgc2hpZnQ7CisKKwkvKiBEZXRlcm1pbmU6CisKKwkgICBmID0gQmV0YSAqIGNsZWFuX2JnX3J4L1AgLS0tLS0tICgxKQorCisJICAgd2hlcmUgUCBpcyB0aGUgdG90YWwgcG93ZXIgaW4gdGhlIGZpbHRlciBzdGF0ZXMuCisKKwkgICBUaGUgQm9mZmlucyBoYXZlIHNob3duIHRoYXQgaWYgd2Ugb2JleSAoMSkgd2UgY29udmVyZ2UKKwkgICBxdWlja2x5IGFuZCBhdm9pZCBpbnN0YWJpbGl0eS4KKworCSAgIFRoZSBjb3JyZWN0IGZhY3RvciBmIG11c3QgYmUgaW4gUTMwLCBhcyB0aGlzIGlzIHRoZSBmaXhlZAorCSAgIHBvaW50IGZvcm1hdCByZXF1aXJlZCBieSB0aGUgbG1zX2FkYXB0X2JnKCkgZnVuY3Rpb24sCisJICAgdGhlcmVmb3JlIHRoZSBzY2FsZWQgdmVyc2lvbiBvZiAoMSkgaXM6CisKKwkgICAoMl4zMCkgKiBmICA9ICgyXjMwKSAqIEJldGEgKiBjbGVhbl9iZ19yeC9QCisJICAgICAgIGZhY3RvciAgPSAoMl4zMCkgKiBCZXRhICogY2xlYW5fYmdfcngvUCAgICAgICAgIC0tLS0tICgyKQorCisJICAgV2UgaGF2ZSBjaG9zZW4gQmV0YSA9IDAuMjUgYnkgZXhwZXJpbWVudCwgc286CisKKwkgICAgICAgZmFjdG9yICA9ICgyXjMwKSAqICgyXi0yKSAqIGNsZWFuX2JnX3J4L1AKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwIC0gMiAtIGxvZzIoUCkpCisJICAgICAgIGZhY3RvciAgPSBjbGVhbl9iZ19yeCAyICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tICgzKQorCisJICAgVG8gYXZvaWQgYSBkaXZpZGUgd2UgYXBwcm94aW1hdGUgbG9nMihQKSBhcyB0b3BfYml0KFApLAorCSAgIHdoaWNoIHJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBoaWdoZXN0IG5vbi16ZXJvIGJpdCBpbgorCSAgIFAuICBUaGlzIGFwcHJveGltYXRpb24gaW50cm9kdWNlcyBhbiBlcnJvciBhcyBsYXJnZSBhcyBhCisJICAgZmFjdG9yIG9mIDIsIGJ1dCB0aGUgYWxnb3JpdGhtIHNlZW1zIHRvIGhhbmRsZSBpdCBPSy4KKworCSAgIENvbWUgdG8gdGhpbmsgb2YgaXQgYSBkaXZpZGUgbWF5IG5vdCBiZSBhIGJpZyBkZWFsIG9uIGEKKwkgICBtb2Rlcm4gRFNQLCBzbyBpdHMgcHJvYmFibHkgd29ydGggY2hlY2tpbmcgb3V0IHRoZSBjeWNsZXMKKwkgICBmb3IgYSBkaXZpZGUgdmVyc3VzIGEgdG9wX2JpdCgpIGltcGxlbWVudGF0aW9uLgorCSovCisKKwlQID0gTUlOX1RYX1BPV0VSX0ZPUl9BREFQVElPTiArIGVjLT5Qc3RhdGVzOworCWxvZ1AgPSB0b3BfYml0KFApICsgZWMtPmxvZzJ0YXBzOworCXNoaWZ0ID0gMzAgLSAyIC0gbG9nUDsKKwllYy0+c2hpZnQgPSBzaGlmdDsKKworCWxtc19hZGFwdF9iZyhlYywgY2xlYW5fYmcsIHNoaWZ0KTsKKyAgICB9CisKKyAgICAvKiB2ZXJ5IHNpbXBsZSBEVEQgdG8gbWFrZSBzdXJlIHdlIGRvbnQgdHJ5IGFuZCBhZGFwdCB3aXRoIHN0cm9uZworICAgICAgIG5lYXIgZW5kIHNwZWVjaCAqLworCisgICAgZWMtPmFkYXB0ID0gMDsKKyAgICBpZiAoKGVjLT5McnggPiBNSU5fUlhfUE9XRVJfRk9SX0FEQVBUSU9OKSAmJiAoZWMtPkxyeCA+IGVjLT5MdHgpKQorCWVjLT5ub251cGRhdGVfZHdlbGwgPSBEVERfSEFOR09WRVI7CisgICAgaWYgKGVjLT5ub251cGRhdGVfZHdlbGwpCisJZWMtPm5vbnVwZGF0ZV9kd2VsbC0tOworCisgICAgLyogVHJhbnNmZXIgbG9naWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC8qIFRoZXNlIGNvbmRpdGlvbnMgYXJlIGZyb20gdGhlIGR1YWwgcGF0aCBwYXBlciBbMV0sIEkgbWVzc2VkIHdpdGgKKyAgICAgICB0aGVtIGEgYml0IHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuICovCisKKyAgICBpZiAoKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX0FEQVBUSU9OKSAmJgorCShlYy0+bm9udXBkYXRlX2R3ZWxsID09IDApICYmCisJKDgqZWMtPkxjbGVhbl9iZyA8IDcqZWMtPkxjbGVhbikgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjg3NSplYy0+TGNsZWFuKSAqLyAmJgorCSg4KmVjLT5MY2xlYW5fYmcgPCBlYy0+THR4KSAgICAgIC8qIChlYy0+TGNsZWFuX2JnIDwgMC4xMjUqZWMtPkx0eCkgICAgKi8gKQorICAgIHsKKwlpZiAoZWMtPmNvbmRfbWV0ID09IDYpIHsKKwkgICAgLyogQkcgZmlsdGVyIGhhcyBoYWQgYmV0dGVyIHJlc3VsdHMgZm9yIDYgY29uc2VjdXRpdmUgc2FtcGxlcyAqLworCSAgICBlYy0+YWRhcHQgPSAxOworCSAgICBtZW1jcHkoZWMtPmZpcl90YXBzMTZbMF0sIGVjLT5maXJfdGFwczE2WzFdLCBlYy0+dGFwcypzaXplb2YoaW50MTZfdCkpOworCX0KKwllbHNlCisJICAgIGVjLT5jb25kX21ldCsrOworICAgIH0KKyAgICBlbHNlCisJZWMtPmNvbmRfbWV0ID0gMDsKKworICAgIC8qIE5vbi1MaW5lYXIgUHJvY2Vzc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgZWMtPmNsZWFuX25scCA9IGVjLT5jbGVhbjsKKyAgICBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfTkxQKQorICAgIHsKKyAgICAgICAgLyogTm9uLWxpbmVhciBwcm9jZXNzb3IgLSBhIGZhbmN5IHdheSB0byBzYXkgInphcCBzbWFsbCBzaWduYWxzLCB0byBhdm9pZAorICAgICAgICAgICByZXNpZHVhbCBlY2hvIGR1ZSB0byAodUxhdy9BTGF3KSBub24tbGluZWFyaXR5IGluIHRoZSBjaGFubmVsLiIuICovCisKKyAgICAgIGlmICgoMTYqZWMtPkxjbGVhbiA8IGVjLT5MdHgpKQorICAgICAgeworCS8qIE91ciBlL2MgaGFzIGltcHJvdmVkIGVjaG8gYnkgYXQgbGVhc3QgMjQgZEIgKGVhY2ggZmFjdG9yIG9mIDIgaXMgNmRCLAorCSAgIHNvIDIqMioyKjI9MTYgaXMgdGhlIHNhbWUgYXMgNis2KzYrNj0yNGRCKSAqLworICAgICAgICBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfQ05HKQorCXsKKwkgICAgZWMtPmNuZ19sZXZlbCA9IGVjLT5MYmduOworCisJICAgIC8qIFZlcnkgZWxlbWVudGFyeSBjb21mb3J0IG5vaXNlIGdlbmVyYXRpb24uICBKdXN0IHJhbmRvbQorCSAgICAgICBudW1iZXJzIHJvbGxlZCBvZmYgdmVyeSB2YWd1ZWx5IEhvdGgtbGlrZS4gIERSOiBUaGlzCisJICAgICAgIG5vaXNlIGRvZXNuJ3Qgc291bmQgcXVpdGUgcmlnaHQgdG8gbWUgLSBJIHN1c3BlY3QgdGhlcmUKKwkgICAgICAgYXJlIHNvbWUgb3Zlcmxmb3cgaXNzdWVzIGluIHRoZSBmaWx0ZXJpbmcgYXMgaXQncyB0b28KKwkgICAgICAgImNyYWNrbHkiLiAgVE9ETzogZGVidWcgdGhpcywgbWF5YmUganVzdCBwbGF5IG5vaXNlIGF0CisJICAgICAgIGhpZ2ggbGV2ZWwgb3IgbG9vayBhdCBzcGVjdHJ1bS4KKwkgICAgKi8KKworCSAgICBlYy0+Y25nX3JuZG51bSA9IDE2NjQ1MjVVKmVjLT5jbmdfcm5kbnVtICsgMTAxMzkwNDIyM1U7CisJICAgIGVjLT5jbmdfZmlsdGVyID0gKChlYy0+Y25nX3JuZG51bSAmIDB4RkZGRikgLSAzMjc2OCArIDUqZWMtPmNuZ19maWx0ZXIpID4+IDM7CisJICAgIGVjLT5jbGVhbl9ubHAgPSAoZWMtPmNuZ19maWx0ZXIqZWMtPmNuZ19sZXZlbCo4KSA+PiAxNDsKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX0NMSVApCisJeworCSAgICAvKiBUaGlzIHNvdW5kcyBtdWNoIGJldHRlciB0aGFuIENORyAqLworCSAgICBpZiAoZWMtPmNsZWFuX25scCA+IGVjLT5MYmduKQorCSAgICAgIGVjLT5jbGVhbl9ubHAgPSBlYy0+TGJnbjsKKwkgICAgaWYgKGVjLT5jbGVhbl9ubHAgPCAtZWMtPkxiZ24pCisJICAgICAgZWMtPmNsZWFuX25scCA9IC1lYy0+TGJnbjsKKwl9CisJZWxzZQorICAgICAgICB7CisJICAvKiBqdXN0IG11dGUgdGhlIHJlc2lkdWFsLCBkb2Vzbid0IHNvdW5kIHZlcnkgZ29vZCwgdXNlZCBtYWlubHkKKwkgICAgIGluIEcxNjggdGVzdHMgKi8KKyAgICAgICAgICBlYy0+Y2xlYW5fbmxwID0gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisJICAvKiBCYWNrZ3JvdW5kIG5vaXNlIGVzdGltYXRvci4gIEkgdHJpZWQgYSBmZXcgYWxnb3JpdGhtcworCSAgICAgaGVyZSB3aXRob3V0IG11Y2ggbHVjay4gIFRoaXMgdmVyeSBzaW1wbGUgb25lIHNlZW1zIHRvCisJICAgICB3b3JrIGJlc3QsIHdlIGp1c3QgYXZlcmFnZSB0aGUgbGV2ZWwgdXNpbmcgYSBzbG93ICgxIHNlYworCSAgICAgdGltZSBjb25zdCkgZmlsdGVyIGlmIHRoZSBjdXJyZW50IGxldmVsIGlzIGxlc3MgdGhhbiBhCisJICAgICAoZXhwZXJpbWVudGFsbHkgZGVyaXZlZCkgY29uc3RhbnQuICBUaGlzIG1lYW5zIHdlIGRvbnQKKwkgICAgIGluY2x1ZGUgaGlnaCBsZXZlbCBzaWduYWxzIGxpa2UgbmVhciBlbmQgc3BlZWNoLiAgV2hlbgorCSAgICAgY29tYmluZWQgd2l0aCBDTkcgb3IgZXNwZWNpYWxseSBDTElQIHNlZW1zIHRvIHdvcmsgT0suCisJICAqLworCSAgaWYgKGVjLT5MY2xlYW4gPCA0MCkgeworCSAgICAgIGVjLT5MYmduX2FjYyArPSBhYnMoZWMtPmNsZWFuKSAtIGVjLT5MYmduOworCSAgICAgIGVjLT5MYmduID0gKGVjLT5MYmduX2FjYyArICgxPDwxMSkpID4+IDEyOworCSAgfQorICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBSb2xsIGFyb3VuZCB0aGUgdGFwcyBidWZmZXIgKi8KKyAgICBpZiAoZWMtPmN1cnJfcG9zIDw9IDApCisgICAgICAgIGVjLT5jdXJyX3BvcyA9IGVjLT50YXBzOworICAgIGVjLT5jdXJyX3Bvcy0tOworCisgICAgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fRElTQUJMRSkKKyAgICAgIGVjLT5jbGVhbl9ubHAgPSByeDsKKworICAgIC8qIE91dHB1dCBzY2FsZWQgYmFjayB1cCBhZ2FpbiB0byBtYXRjaCBpbnB1dCBzY2FsaW5nICovCisKKyAgICByZXR1cm4gKGludDE2X3QpIGVjLT5jbGVhbl9ubHAgPDwgMTsKK30KKworLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgc2VwZXJhdGVkIGZyb20gdGhlIGVjaG8gY2FuY2VsbGVyIGlzIGl0IGlzIHVzdWFsbHkgY2FsbGVkCisgICBhcyBwYXJ0IG9mIHRoZSB0eCBwcm9jZXNzLiAgU2VlIHJ4IEhQIChEQyBibG9ja2luZykgZmlsdGVyIGFib3ZlLCBpdCdzCisgICB0aGUgc2FtZSBkZXNpZ24uCisKKyAgIFNvbWUgc29mdCBwaG9uZXMgc2VuZCBzcGVlY2ggc2lnbmFscyB3aXRoIGEgbG90IG9mIGxvdyBmcmVxdWVuY3kKKyAgIGVuZXJneSwgZS5nLiBkb3duIHRvIDIwSHouICBUaGlzIGNhbiBtYWtlIHRoZSBoeWJyaWQgbm9uLWxpbmVhcgorICAgd2hpY2ggY2F1c2VzIHRoZSBlY2hvIGNhbmNlbGxlciB0byBmYWxsIG92ZXIuICBUaGlzIGZpbHRlciBjYW4gaGVscAorICAgYnkgcmVtb3ZpbmcgYW55IGxvdyBmcmVxdWVuY3kgYmVmb3JlIGl0IGdldHMgdG8gdGhlIHR4IHBvcnQgb2YgdGhlCisgICBoeWJyaWQuCisKKyAgIEl0IGNhbiBhbHNvIGhlbHAgYnkgcmVtb3ZpbmcgYW5kIERDIGluIHRoZSB0eCBzaWduYWwuICBEQyBpcyBiYWQKKyAgIGZvciBMTVMgYWxnb3JpdGhtcy4KKworICAgVGhpcyBpcyBvbmUgb2YgdGhlIGNsYXNzaWMgREMgcmVtb3ZhbCBmaWx0ZXJzLCBhZGp1c3RlZCB0byBwcm92aWRlIHN1ZmZpY2llbnQKKyAgIGJhc3Mgcm9sbG9mZiB0byBtZWV0IHRoZSBhYm92ZSByZXF1aXJlbWVudCB0byBwcm90ZWN0IGh5YnJpZHMgZnJvbSB0aGluZ3MgdGhhdAorICAgdXBzZXQgdGhlbS4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdWNjZXNzaXZlIHNhbXBsZXMgcHJvZHVjZXMgYSBsb3VzeSBIUEYsIGFuZAorICAgdGhlbiBhIHN1aXRhYmx5IHBsYWNlZCBwb2xlIGZsYXR0ZW5zIHRoaW5ncyBvdXQuIFRoZSBmaW5hbCByZXN1bHQgaXMgYSBuaWNlbHkKKyAgIHJvbGxlZCBvZmYgYmFzcyBlbmQuIFRoZSBmaWx0ZXJpbmcgaXMgaW1wbGVtZW50ZWQgd2l0aCBleHRlbmRlZCBmcmFjdGlvbmFsCisgICBwcmVjaXNpb24sIHdoaWNoIG5vaXNlIHNoYXBlcyB0aGluZ3MsIGdpdmluZyB2ZXJ5IGNsZWFuIERDIHJlbW92YWwuCisqLworCitpbnQxNl90IGVjaG9fY2FuX2hwZl90eChlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50MTZfdCB0eCkgeworICAgIGludCB0bXAsIHRtcDE7CisKKyAgICBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfVFhfSFBGKSB7CisgICAgICAgIHRtcCA9IHR4IDw8IDE1OworI2lmIDEKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBnYWluIG9mIHRoZSBIUEYgaXMgMS4wLiBUaGUgZmlyc3QgY2FuIHN0aWxsIHNhdHVyYXRlIGEgbGl0dGxlIHVuZGVyCisgICAgICAgICAgIGltcHVsc2UgY29uZGl0aW9ucywgYW5kIGl0IG1pZ2h0IHJvbGwgdG8gMzI3NjggYW5kIG5lZWQgY2xpcHBpbmcgb24gc3VzdGFpbmVkIHBlYWsKKyAgICAgICAgICAgbGV2ZWwgc2lnbmFscy4gSG93ZXZlciwgdGhlIHNjYWxlIG9mIHN1Y2ggY2xpcHBpbmcgaXMgc21hbGwsIGFuZCB0aGUgZXJyb3IgZHVlIHRvCisgICAgICAgICAgIGFueSBzYXR1cmF0aW9uIHNob3VsZCBub3QgbWFya2VkbHkgYWZmZWN0IHRoZSBkb3duc3RyZWFtIHByb2Nlc3NpbmcuICovCisgICAgICAgIHRtcCAtPSAodG1wID4+IDQpOworI2VuZGlmCisgICAgICAgIGVjLT50eF8xICs9IC0oZWMtPnR4XzE+PkRDX0xPRzJCRVRBKSArIHRtcCAtIGVjLT50eF8yOworICAgICAgICB0bXAxID0gZWMtPnR4XzEgPj4gMTU7CisJaWYgKHRtcDEgPiAzMjc2NykgdG1wMSA9IDMyNzY3OworCWlmICh0bXAxIDwgLTMyNzY3KSB0bXAxID0gLTMyNzY3OworCXR4ID0gdG1wMTsKKyAgICAgICAgZWMtPnR4XzIgPSB0bXA7CisgICAgfQorCisgICAgcmV0dXJuIHR4OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTFiNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogU3BhbkRTUCAtIGEgc2VyaWVzIG9mIERTUCBjb21wb25lbnRzIGZvciB0ZWxlcGhvbnkKKyAqCisgKiBlY2hvLmMgLSBBIGxpbmUgZWNobyBjYW5jZWxsZXIuICBUaGlzIGNvZGUgaXMgYmVpbmcgZGV2ZWxvcGVkCisgKiAgICAgICAgICBhZ2FpbnN0IGFuZCBwYXJ0aWFsbHkgY29tcGxpZXMgd2l0aCBHMTY4LgorICoKKyAqIFdyaXR0ZW4gYnkgU3RldmUgVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+CisgKiAgICAgICAgIGFuZCBEYXZpZCBSb3dlIDxkYXZpZF9hdF9yb3dldGVsX2RvdF9jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFN0ZXZlIFVuZGVyd29vZCBhbmQgMjAwNyBEYXZpZCBSb3dlCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBlY2hvLmgsdiAxLjkgMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKKyAqLworCisjaWZuZGVmIF9fRUNIT19ICisjZGVmaW5lIF9fRUNIT19ICisKKy8qISBccGFnZSBlY2hvX2Nhbl9wYWdlIExpbmUgZWNobyBjYW5jZWxsYXRpb24gZm9yIHZvaWNlCisKK1xzZWN0aW9uIGVjaG9fY2FuX3BhZ2Vfc2VjXzEgV2hhdCBkb2VzIGl0IGRvPworVGhpcyBtb2R1bGUgYWltcyB0byBwcm92aWRlIEcuMTY4LTIwMDIgY29tcGxpYW50IGVjaG8gY2FuY2VsbGF0aW9uLCB0byByZW1vdmUKK2VsZWN0cmljYWwgZWNob2VzIChlLmcuIGZyb20gMi00IHdpcmUgaHlicmlkcykgZnJvbSB2b2ljZSBjYWxscy4KKworXHNlY3Rpb24gZWNob19jYW5fcGFnZV9zZWNfMiBIb3cgZG9lcyBpdCB3b3JrPworVGhlIGhlYXJ0IG9mIHRoZSBlY2hvIGNhbmNlbGxvciBpcyBGSVIgZmlsdGVyLiBUaGlzIGlzIGFkYXB0ZWQgdG8gbWF0Y2ggdGhlCitlY2hvIGltcHVsc2UgcmVzcG9uc2Ugb2YgdGhlIHRlbGVwaG9uZSBsaW5lLiBJdCBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvCithZGVxdWF0ZWx5IGNvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGF0IGltcHVsc2UgcmVzcG9uc2UuIFRoZSBzaWduYWwgdHJhbnNtaXR0ZWQKK3RvIHRoZSB0ZWxlcGhvbmUgbGluZSBpcyBwYXNzZWQgdGhyb3VnaCB0aGUgRklSIGZpbHRlci4gT25jZSB0aGUgRklSIGlzCitwcm9wZXJseSBhZGFwdGVkLCB0aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgZWNobyBzaWduYWwKK3JlY2VpdmVkIGZyb20gdGhlIGxpbmUuIFRoaXMgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSByZWNlaXZlZCBzaWduYWwuIFRoZSByZXN1bHQKK2lzIGFuIGVzdGltYXRlIG9mIHRoZSBzaWduYWwgd2hpY2ggb3JpZ2luYXRlZCBhdCB0aGUgZmFyIGVuZCBvZiB0aGUgbGluZSwgZnJlZQorZnJvbSBlY2hvcyBvZiBvdXIgb3duIHRyYW5zbWl0dGVkIHNpZ25hbC4KKworVGhlIGxlYXN0IG1lYW4gc3F1YXJlcyAoTE1TKSBhbGdvcml0aG0gaXMgYXR0cmlidXRlZCB0byBXaWRyb3cgYW5kIEhvZmYsIGFuZAord2FzIGludHJvZHVjZWQgaW4gMTk2MC4gSXQgaXMgdGhlIGNvbW1vbmVzdCBmb3JtIG9mIGZpbHRlciBhZGFwdGlvbiB1c2VkIGluCit0aGluZ3MgbGlrZSBtb2RlbSBsaW5lIGVxdWFsaXNlcnMgYW5kIGxpbmUgZWNobyBjYW5jZWxsZXJzLiBUaGVyZSBpdCB3b3JrcyB2ZXJ5Cit3ZWxsLiAgSG93ZXZlciwgaXQgb25seSB3b3JrcyB3ZWxsIGZvciBzaWduYWxzIG9mIGNvbnN0YW50IGFtcGxpdHVkZS4gSXQgd29ya3MKK3ZlcnkgcG9vcmx5IGZvciB0aGluZ3MgbGlrZSBzcGVlY2ggZWNobyBjYW5jZWxsYXRpb24sIHdoZXJlIHRoZSBzaWduYWwgbGV2ZWwKK3ZhcmllcyB3aWRlbHkuICBUaGlzIGlzIHF1aXRlIGVhc3kgdG8gZml4LiBJZiB0aGUgc2lnbmFsIGxldmVsIGlzIG5vcm1hbGlzZWQgLQorc2ltaWxhciB0byBhcHBseWluZyBBR0MgLSBMTVMgY2FuIHdvcmsgYXMgd2VsbCBmb3IgYSBzaWduYWwgb2YgdmFyeWluZworYW1wbGl0dWRlIGFzIGl0IGRvZXMgZm9yIGEgbW9kZW0gc2lnbmFsLiBUaGlzIG5vcm1hbGlzZWQgbGVhc3QgbWVhbiBzcXVhcmVzCisoTkxNUykgYWxnb3JpdGhtIGlzIHRoZSBjb21tb25lc3Qgb25lIHVzZWQgZm9yIHNwZWVjaCBlY2hvIGNhbmNlbGxhdGlvbi4gTWFueQorb3RoZXIgYWxnb3JpdGhtcyBleGlzdCAtIGUuZy4gUkxTIChlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBLYWxtYW4gZmlsdGVyaW5nKSwKK0ZBUCwgZXRjLiBTb21lIHBlcmZvcm0gc2lnbmlmaWNhbnRseSBiZXR0ZXIgdGhhbiBOTE1TLiAgSG93ZXZlciwgZmFjdG9ycyBzdWNoCithcyBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgYW5kIHBhdGVudHMgZmF2b3VyIHRoZSB1c2Ugb2YgTkxNUy4KKworQSBzaW1wbGUgcmVmaW5lbWVudCB0byBOTE1TIGNhbiBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSB3aXRoIHNwZWVjaC4gTkxNUyB0ZW5kcwordG8gYWRhcHQgYmVzdCB0byB0aGUgc3Ryb25nZXN0IHBhcnRzIG9mIGEgc2lnbmFsLiBJZiB0aGUgc2lnbmFsIGlzIHdoaXRlIG5vaXNlLAordGhlIE5MTVMgYWxnb3JpdGhtIHdvcmtzIHZlcnkgd2VsbC4gSG93ZXZlciwgc3BlZWNoIGhhcyBtb3JlIGxvdyBmcmVxdWVuY3kgdGhhbgoraGlnaCBmcmVxdWVuY3kgY29udGVudC4gUHJlLXdoaXRlbmluZyAoaS5lLiBmaWx0ZXJpbmcgdGhlIHNpZ25hbCB0byBmbGF0dGVuIGl0cworc3BlY3RydW0pIHRoZSBlY2hvIHNpZ25hbCBpbXByb3ZlcyB0aGUgYWRhcHQgcmF0ZSBmb3Igc3BlZWNoLCBhbmQgZW5zdXJlcyB0aGUKK2ZpbmFsIHJlc2lkdWFsIHNpZ25hbCBpcyBub3QgaGVhdmlseSBiaWFzZWQgdG93YXJkcyBoaWdoIGZyZXF1ZW5jaWVzLiBBIHZlcnkKK2xvdyBjb21wbGV4aXR5IGZpbHRlciBpcyBhZGVxdWF0ZSBmb3IgdGhpcywgc28gcHJlLXdoaXRlbmluZyBhZGRzIGxpdHRsZSB0byB0aGUKK2NvbXB1dGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBlY2hvIGNhbmNlbGxlci4KKworQW4gRklSIGZpbHRlciBhZGFwdGVkIHVzaW5nIHByZS13aGl0ZW5lZCBOTE1TIHBlcmZvcm1zIHdlbGwsIHByb3ZpZGVkIGNlcnRhaW4KK2NvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgIC0gVGhlIHRyYW5zbWl0dGVkIHNpZ25hbCBoYXMgcG9vciBzZWxmLWNvcnJlbGF0aW9uLgorICAgIC0gVGhlcmUgaXMgbm8gc2lnbmFsIGJlaW5nIGdlbmVyYXRlZCB3aXRoaW4gdGhlIGVudmlyb25tZW50IGJlaW5nCisgICAgICBjYW5jZWxsZWQuCisKK1RoZSBkaWZmaWN1bHR5IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBjYW4gYmUgZ3VhcmFudGVlZC4KKworSWYgdGhlIGFkYXB0aW9uIGlzIHBlcmZvcm1lZCB3aGlsZSB0cmFuc21pdHRpbmcgbm9pc2UgKG9yIHNvbWV0aGluZyBmYWlybHkKK25vaXNlIGxpa2UsIHN1Y2ggYXMgdm9pY2UpIHRoZSBhZGFwdGlvbiB3b3JrcyB2ZXJ5IHdlbGwuIElmIHRoZSBhZGFwdGlvbiBpcworcGVyZm9ybWVkIHdoaWxlIHRyYW5zbWl0dGluZyBzb21ldGhpbmcgaGlnaGx5IGNvcnJlbGF0aXZlICh0eXBpY2FsbHkgbmFycm93CitiYW5kIGVuZXJneSBzdWNoIGFzIHNpZ25hbGxpbmcgdG9uZXMgb3IgRFRNRiksIHRoZSBhZGFwdGlvbiBjYW4gZ28gc2VyaW91c2x5Cit3cm9uZy4gVGhlIHJlYXNvbiBpcyB0aGVyZSBpcyBvbmx5IG9uZSBzb2x1dGlvbiBmb3IgdGhlIGFkYXB0aW9uIG9uIGEgbmVhcgorcmFuZG9tIHNpZ25hbCAtIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9mIHRoZSBsaW5lLiBGb3IgYSByZXBldGl0aXZlIHNpZ25hbCwKK3RoZXJlIGFyZSBhbnkgbnVtYmVyIG9mIHNvbHV0aW9ucyB3aGljaCBjb252ZXJnZSB0aGUgYWRhcHRpb24sIGFuZCBub3RoaW5nCitndWlkZXMgdGhlIGFkYXB0aW9uIHRvIGNob29zZSB0aGUgZ2VuZXJhbGlzZWQgb25lLiBBbGxvd2luZyBhbiB1bnRyYWluZWQKK2NhbmNlbGxlciB0byBjb252ZXJnZSBvbiB0aGlzIGtpbmQgb2YgbmFycm93YmFuZCBlbmVyZ3kgcHJvYmFibHkgYSBnb29kIHRoaW5nLAorc2luY2UgYXQgbGVhc3QgaXQgY2FuY2VscyB0aGUgdG9uZXMuIEFsbG93aW5nIGEgd2VsbCBjb252ZXJnZWQgY2FuY2VsbGVyIHRvCitjb250aW51ZSBjb252ZXJnaW5nIG9uIHN1Y2ggZW5lcmd5IGlzIGp1c3QgYSB3YXkgdG8gcnVpbiBpdHMgZ2VuZXJhbGlzZWQKK2FkYXB0aW9uLiBBIG5hcnJvd2JhbmQgZGV0ZWN0b3IgaXMgbmVlZGVkLCBzbyBhZGFwYXRpb24gY2FuIGJlIHN1c3BlbmRlZCBhdAorYXBwcm9wcmlhdGUgdGltZXMuCisKK1RoZSBhZGFwdGlvbiBwcm9jZXNzIGlzIGJhc2VkIG9uIHRyeWluZyB0byBlbGltaW5hdGUgdGhlIHJlY2VpdmVkIHNpZ25hbC4gV2hlbgordGhlcmUgaXMgYW55IHNpZ25hbCBmcm9tIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQgYmVpbmcgY2FuY2VsbGVkIGl0IG1heSB1cHNldAordGhlIGFkYXB0aW9uIHByb2Nlc3MuIFNpbWlsYXJseSwgaWYgdGhlIHNpZ25hbCB3ZSBhcmUgdHJhbnNtaXR0aW5nIGlzIHNtYWxsLAorbm9pc2UgbWF5IGRvbWluYXRlIGFuZCBkaXN0dXJiIHRoZSBhZGFwdGlvbiBwcm9jZXNzLiBJZiB3ZSBjYW4gZW5zdXJlIHRoYXQgdGhlCithZGFwdGlvbiBpcyBvbmx5IHBlcmZvcm1lZCB3aGVuIHdlIGFyZSB0cmFuc21pdHRpbmcgYSBzaWduaWZpY2FudCBzaWduYWwgbGV2ZWwsCithbmQgdGhlIGVudmlyb25tZW50IGlzIG5vdCwgdGhpbmdzIHdpbGwgYmUgT0suIENsZWFybHksIGl0IGlzIGVhc3kgdG8gdGVsbCB3aGVuCit3ZSBhcmUgc2VuZGluZyBhIHNpZ25pZmljYW50IHNpZ25hbC4gVGVsbGluZywgaWYgdGhlIGVudmlyb25tZW50IGlzIGdlbmVyYXRpbmcKK2Egc2lnbmlmaWNhbnQgc2lnbmFsLCBhbmQgZG9pbmcgaXQgd2l0aCBzdWZmaWNpZW50IHNwZWVkIHRoYXQgdGhlIGFkYXB0aW9uIHdpbGwKK25vdCBoYXZlIGRpdmVyZ2VkIHRvbyBtdWNoIG1vcmUgd2Ugc3RvcCBpdCwgaXMgYSBsaXR0bGUgaGFyZGVyLgorCitUaGUga2V5IHByb2JsZW0gaW4gZGV0ZWN0aW5nIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIHNvdXJjaW5nIHNpZ25pZmljYW50CitlbmVyZ3kgaXMgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgdmVyeSBxdWlja2x5LiBHaXZlbiBhIHJlYXNvbmFibHkgbG9uZyBzYW1wbGUgb2YKK3RoZSByZWNlaXZlZCBzaWduYWwsIHRoZXJlIGFyZSBhIG51bWJlciBvZiBzdHJhdGVnaWVzIHdoaWNoIG1heSBiZSB1c2VkIHRvCithc3Nlc3Mgd2hldGhlciB0aGF0IHNpZ25hbCBjb250YWlucyBhIHN0cm9uZyBmYXIgZW5kIGNvbXBvbmVudC4gSG93ZXZlciwgYnkgdGhlCit0aW1lIHRoYXQgYXNzZXNzbWVudCBpcyBjb21wbGV0ZSB0aGUgZmFyIGVuZCBzaWduYWwgd2lsbCBoYXZlIGFscmVhZHkgY2F1c2VkCittYWpvciBtaXMtY29udmVyZ2VuY2UgaW4gdGhlIGFkYXB0aW9uIHByb2Nlc3MuIEFuIGFzc2Vzc21lbnQgYWxnb3JpdGhtIGlzCituZWVkZWQgd2hpY2ggcHJvZHVjZXMgYSBmYWlybHkgYWNjdXJhdGUgcmVzdWx0IGZyb20gYSB2ZXJ5IHNob3J0IGJ1cnN0IG9mIGZhcgorZW5kIGVuZXJneS4KKworXHNlY3Rpb24gZWNob19jYW5fcGFnZV9zZWNfMyBIb3cgZG8gSSB1c2UgaXQ/CitUaGUgZWNobyBjYW5jZWxsb3IgcHJvY2Vzc2VzIGJvdGggdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHN0cmVhbXMgc2FtcGxlIGJ5CitzYW1wbGUuIFRoZSBwcm9jZXNzaW5nIGZ1bmN0aW9uIGlzIG5vdCBkZWNsYXJlZCBpbmxpbmUuIFVuZm9ydHVuYXRlbHksCitjYW5jZWxsYXRpb24gcmVxdWlyZXMgbWFueSBvcGVyYXRpb25zIHBlciBzYW1wbGUsIHNvIHRoZSBjYWxsIG92ZXJoZWFkIGlzIG9ubHkKK2EgbWlub3IgYnVyZGVuLgorKi8KKworI2luY2x1ZGUgImZpci5oIgorCisvKiBNYXNrIGJpdHMgZm9yIHRoZSBhZGFwdGlvbiBtb2RlICovCisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9BREFQVElPTgkweDAxCisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9OTFAJMHgwMgorI2RlZmluZSBFQ0hPX0NBTl9VU0VfQ05HCTB4MDQKKyNkZWZpbmUgRUNIT19DQU5fVVNFX0NMSVAJMHgwOAorI2RlZmluZSBFQ0hPX0NBTl9VU0VfVFhfSFBGCTB4MTAKKyNkZWZpbmUgRUNIT19DQU5fVVNFX1JYX0hQRgkweDIwCisjZGVmaW5lIEVDSE9fQ0FOX0RJU0FCTEUJMHg0MAorCisvKiEKKyAgICBHLjE2OCBlY2hvIGNhbmNlbGxlciBkZXNjcmlwdG9yLiBUaGlzIGRlZmluZXMgdGhlIHdvcmtpbmcgc3RhdGUgZm9yIGEgbGluZQorICAgIGVjaG8gY2FuY2VsbGVyLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50MTZfdCB0eCxyeDsKKwlpbnQxNl90IGNsZWFuOworCWludDE2X3QgY2xlYW5fbmxwOworCisJaW50IG5vbnVwZGF0ZV9kd2VsbDsKKwlpbnQgY3Vycl9wb3M7CisJaW50IHRhcHM7CisJaW50IGxvZzJ0YXBzOworCWludCBhZGFwdGlvbl9tb2RlOworCisJaW50IGNvbmRfbWV0OworCWludDMyX3QgUHN0YXRlczsKKwlpbnQxNl90IGFkYXB0OworCWludDMyX3QgZmFjdG9yOworCWludDE2X3Qgc2hpZnQ7CisKKwkvKiBBdmVyYWdlIGxldmVscyBhbmQgYXZlcmFnaW5nIGZpbHRlciBzdGF0ZXMgKi8KKwlpbnQgTHR4YWNjLCBMcnhhY2MsIExjbGVhbmFjYywgTGNsZWFuX2JnYWNjOworCWludCBMdHgsIExyeDsKKwlpbnQgTGNsZWFuOworCWludCBMY2xlYW5fYmc7CisJaW50IExiZ24sIExiZ25fYWNjLCBMYmduX3VwcGVyLCBMYmduX3VwcGVyX2FjYzsKKworCS8qIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgZmlsdGVyIHN0YXRlcyAqLworCWZpcjE2X3N0YXRlX3QgZmlyX3N0YXRlOworCWZpcjE2X3N0YXRlX3QgZmlyX3N0YXRlX2JnOworCWludDE2X3QgKmZpcl90YXBzMTZbMl07CisKKwkvKiBEQyBibG9ja2luZyBmaWx0ZXIgc3RhdGVzICovCisJaW50IHR4XzEsIHR4XzIsIHJ4XzEsIHJ4XzI7CisKKwkvKiBvcHRpb25hbCBIaWdoIFBhc3MgRmlsdGVyIHN0YXRlcyAqLworCWludDMyX3QgeHZ0eFs1XSwgeXZ0eFs1XTsKKwlpbnQzMl90IHh2cnhbNV0sIHl2cnhbNV07CisKKwkvKiBQYXJhbWV0ZXJzIGZvciB0aGUgb3B0aW9uYWwgSG90aCBub2lzZSBnZW5lcmF0b3IgKi8KKwlpbnQgY25nX2xldmVsOworCWludCBjbmdfcm5kbnVtOworCWludCBjbmdfZmlsdGVyOworCisJLyogc25hcHNob3Qgc2FtcGxlIG9mIGNvZWZmcyB1c2VkIGZvciBkZXZlbG9wbWVudCAqLworCWludDE2X3QgKnNuYXBzaG90OworfSBlY2hvX2Nhbl9zdGF0ZV90OworCisvKiEgQ3JlYXRlIGEgdm9pY2UgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gbGVuIFRoZSBsZW5ndGggb2YgdGhlIGNhbmNlbGxlciwgaW4gc2FtcGxlcy4KKyAgICBccmV0dXJuIFRoZSBuZXcgY2FuY2VsbGVyIGNvbnRleHQsIG9yIE5VTEwgaWYgdGhlIGNhbmNlbGxlciBjb3VsZCBub3QgYmUgY3JlYXRlZC4KKyovCitlY2hvX2Nhbl9zdGF0ZV90ICplY2hvX2Nhbl9jcmVhdGUoaW50IGxlbiwgaW50IGFkYXB0aW9uX21vZGUpOworCisvKiEgRnJlZSBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorKi8KK3ZvaWQgZWNob19jYW5fZnJlZShlY2hvX2Nhbl9zdGF0ZV90ICplYyk7CisKKy8qISBGbHVzaCAocmVpbml0aWFsaXNlKSBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorKi8KK3ZvaWQgZWNob19jYW5fZmx1c2goZWNob19jYW5fc3RhdGVfdCAqZWMpOworCisvKiEgU2V0IHRoZSBhZGFwdGlvbiBtb2RlIG9mIGEgdm9pY2UgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gZWMgVGhlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGFkYXB0IFRoZSBtb2RlLgorKi8KK3ZvaWQgZWNob19jYW5fYWRhcHRpb25fbW9kZShlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50IGFkYXB0aW9uX21vZGUpOworCit2b2lkIGVjaG9fY2FuX3NuYXBzaG90KGVjaG9fY2FuX3N0YXRlX3QgKmVjKTsKKworLyohIFByb2Nlc3MgYSBzYW1wbGUgdGhyb3VnaCBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyLgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gdHggVGhlIHRyYW5zbWl0dGVkIGF1ZGlvIHNhbXBsZS4KKyAgICBccGFyYW0gcnggVGhlIHJlY2VpdmVkIGF1ZGlvIHNhbXBsZS4KKyAgICBccmV0dXJuIFRoZSBjbGVhbiAoZWNobyBjYW5jZWxsZWQpIHJlY2VpdmVkIHNhbXBsZS4KKyovCitpbnQxNl90IGVjaG9fY2FuX3VwZGF0ZShlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50MTZfdCB0eCwgaW50MTZfdCByeCk7CisKKy8qISBQcm9jZXNzIHRvIGhpZ2ggcGFzcyBmaWx0ZXIgdGhlIHR4IHNpZ25hbC4KKyAgICBccGFyYW0gZWMgVGhlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIHR4IFRoZSB0cmFuc21pdHRlZCBhdWlvIHNhbXBsZS4KKyAgICBccmV0dXJuIFRoZSBIUCBmaWx0ZXJlZCB0cmFuc21pdCBzYW1wbGUsIHNlbmQgdGhpcyB0byB5b3VyIEQvQS4KKyovCitpbnQxNl90IGVjaG9fY2FuX2hwZl90eChlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50MTZfdCB0eCk7CisKKyNlbmRpZgkvKiBfX0VDSE9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZmlyLmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJmYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZmlyLmgKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBTcGFuRFNQIC0gYSBzZXJpZXMgb2YgRFNQIGNvbXBvbmVudHMgZm9yIHRlbGVwaG9ueQorICoKKyAqIGZpci5oIC0gR2VuZXJhbCB0ZWxlcGhvbnkgRklSIHJvdXRpbmVzCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgU3RldmUgVW5kZXJ3b29kCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBmaXIuaCx2IDEuOCAyMDA2LzEwLzI0IDEzOjQ1OjI4IHN0ZXZldSBFeHAgJAorICovCisKKy8qISBccGFnZSBmaXJfcGFnZSBGSVIgZmlsdGVyaW5nCitcc2VjdGlvbiBmaXJfcGFnZV9zZWNfMSBXaGF0IGRvZXMgaXQgZG8/Cis/Pz8uCisKK1xzZWN0aW9uIGZpcl9wYWdlX3NlY18yIEhvdyBkb2VzIGl0IHdvcms/Cis/Pz8uCisqLworCisjaWYgIWRlZmluZWQoX0ZJUl9IXykKKyNkZWZpbmUgX0ZJUl9IXworCisvKgorICAgQmxhY2tmaW4gTk9URVMgJiBJREVBUzoKKworICAgQSBzaW1wbGUgZG90IHByb2R1Y3QgZnVuY3Rpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGZpbHRlci4gIFRoaXMgcGVyZm9ybXMKKyAgIGp1c3Qgb25lIE1BQy9jeWNsZSB3aGljaCBpcyBpbmVmZmljaWVudCBidXQgd2FzIGVhc3kgdG8gaW1wbGVtZW50IGFzIGEgZmlyc3QKKyAgIHBhc3MuICBUaGUgY3VycmVudCBCbGFja2ZpbiBjb2RlIGFsc28gdXNlcyBhbiB1bnJvbGxlZCBmb3JtIG9mIHRoZSBmaWx0ZXIKKyAgIGhpc3RvcnkgdG8gYXZvaWQgMCBsZW5ndGggaGFyZHdhcmUgbG9vcCBpc3N1ZXMuICBUaGlzIGlzIHdhc3RlZnVsIG9mCisgICBtZW1vcnkuCisKKyAgIElkZWFzIGZvciBpbXByb3ZlbWVudDoKKworICAgMS8gUmV3cml0ZSBmaWx0ZXIgZm9yIGR1YWwgTUFDIGlubmVyIGxvb3AuICBUaGUgaXNzdWUgaGVyZSBpcyBoYW5kbGluZworICAgaGlzdG9yeSBzYW1wbGUgb2Zmc2V0cyB0aGF0IGFyZSAxNiBiaXQgYWxpZ25lZCAtIHRoZSBkdWFsIE1BQyBuZWVkcworICAgMzIgYml0IGFsaWdtbmVudC4gIFRoZXJlIGFyZSBzb21lIGdvb2QgZXhhbXBsZXMgaW4gbGliYmZkc3AuCisKKyAgIDIvIFVzZSB0aGUgaGFyZHdhcmUgY2lyY3VsYXIgYnVmZmVyIGZhY2lsaXR5IHRvaGFsdmUgbWVtb3J5IHVzYWdlLgorCisgICAzLyBDb25zaWRlciB1c2luZyBpbnRlcm5hbCBtZW1vcnkuCisKKyAgIFVzaW5nIGxlc3MgbWVtb3J5IG1pZ2h0IGFsc28gaW1wcm92ZSBzcGVlZCBhcyBjYWNoZSBtaXNzZXMgd2lsbCBiZQorICAgcmVkdWNlZC4gQSBkcm9wIGluIE1JUHMgYW5kIG1lbW9yeSBhcHByb2FjaGluZyA1MCUgc2hvdWxkIGJlCisgICBwb3NzaWJsZS4KKworICAgVGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgZmlsdGVycyBjdXJyZW5sdHkgdXNlIGEgdG90YWwgb2YKKyAgIGFib3V0IDEwIE1JUHMvY2ggYXMgbWVhc3VyZWQgd2l0aCBzcGVlZHRlc3QuYyBvbiBhIDI1NiBUQVAgZWNobworICAgY2FuLgorKi8KKworI2lmIGRlZmluZWQoVVNFX01NWCkgIHx8ICBkZWZpbmVkKFVTRV9TU0UyKQorI2luY2x1ZGUgIm1teC5oIgorI2VuZGlmCisKKy8qIQorICAgIDE2IGJpdCBpbnRlZ2VyIEZJUiBkZXNjcmlwdG9yLiBUaGlzIGRlZmluZXMgdGhlIHdvcmtpbmcgc3RhdGUgZm9yIGEgc2luZ2xlCisgICAgaW5zdGFuY2Ugb2YgYW4gRklSIGZpbHRlciB1c2luZyAxNiBiaXQgaW50ZWdlciBjb2VmZmljaWVudHMuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQgdGFwczsKKwlpbnQgY3Vycl9wb3M7CisJY29uc3QgaW50MTZfdCAqY29lZmZzOworCWludDE2X3QgKmhpc3Rvcnk7Cit9IGZpcjE2X3N0YXRlX3Q7CisKKy8qIQorICAgIDMyIGJpdCBpbnRlZ2VyIEZJUiBkZXNjcmlwdG9yLiBUaGlzIGRlZmluZXMgdGhlIHdvcmtpbmcgc3RhdGUgZm9yIGEgc2luZ2xlCisgICAgaW5zdGFuY2Ugb2YgYW4gRklSIGZpbHRlciB1c2luZyAzMiBiaXQgaW50ZWdlciBjb2VmZmljaWVudHMsIGFuZCBmaWx0ZXJpbmcKKyAgICAxNiBiaXQgaW50ZWdlciBkYXRhLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50IHRhcHM7CisJaW50IGN1cnJfcG9zOworCWNvbnN0IGludDMyX3QgKmNvZWZmczsKKwlpbnQxNl90ICpoaXN0b3J5OworfSBmaXIzMl9zdGF0ZV90OworCisvKiEKKyAgICBGbG9hdGluZyBwb2ludCBGSVIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIHNpbmdsZQorICAgIGluc3RhbmNlIG9mIGFuIEZJUiBmaWx0ZXIgdXNpbmcgZmxvYXRpbmcgcG9pbnQgY29lZmZpY2llbnRzIGFuZCBkYXRhLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50IHRhcHM7CisJaW50IGN1cnJfcG9zOworCWNvbnN0IGZsb2F0ICpjb2VmZnM7CisJZmxvYXQgKmhpc3Rvcnk7Cit9IGZpcl9mbG9hdF9zdGF0ZV90OworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGNvbnN0IGludDE2X3QgKmZpcjE2X2NyZWF0ZShmaXIxNl9zdGF0ZV90ICpmaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCAqY29lZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXBzKQoreworCWZpci0+dGFwcyA9IHRhcHM7CisJZmlyLT5jdXJyX3BvcyA9IHRhcHMgLSAxOworCWZpci0+Y29lZmZzID0gY29lZmZzOworI2lmIGRlZmluZWQoVVNFX01NWCkgIHx8ICBkZWZpbmVkKFVTRV9TU0UyKSB8fCBkZWZpbmVkKF9fQkxBQ0tGSU5fQVNNX18pCisJaWYgKChmaXItPmhpc3RvcnkgPSBtYWxsb2MoMip0YXBzKnNpemVvZihpbnQxNl90KSkpKQorCQltZW1zZXQoZmlyLT5oaXN0b3J5LCAwLCAyKnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyNlbHNlCisJaWYgKChmaXItPmhpc3RvcnkgPSAoaW50MTZfdCAqKSBtYWxsb2ModGFwcypzaXplb2YoaW50MTZfdCkpKSkKKwkJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgdGFwcypzaXplb2YoaW50MTZfdCkpOworI2VuZGlmCisJcmV0dXJuIGZpci0+aGlzdG9yeTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjE2X2ZsdXNoKGZpcjE2X3N0YXRlX3QgKmZpcikKK3sKKyNpZiBkZWZpbmVkKFVTRV9NTVgpICB8fCAgZGVmaW5lZChVU0VfU1NFMikgfHwgZGVmaW5lZChfX0JMQUNLRklOX0FTTV9fKQorICAgIG1lbXNldChmaXItPmhpc3RvcnksIDAsIDIqZmlyLT50YXBzKnNpemVvZihpbnQxNl90KSk7CisjZWxzZQorICAgIG1lbXNldChmaXItPmhpc3RvcnksIDAsIGZpci0+dGFwcypzaXplb2YoaW50MTZfdCkpOworI2VuZGlmCit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mcmVlKGZpcjE2X3N0YXRlX3QgKmZpcikKK3sKKwlmcmVlKGZpci0+aGlzdG9yeSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIF9fQkxBQ0tGSU5fQVNNX18KK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBkb3RfYXNtKHNob3J0ICp4LCBzaG9ydCAqeSwgaW50IGxlbikKK3sKKyAgIGludCBkb3Q7CisKKyAgIGxlbi0tOworCisgICBfX2FzbV9fCisgICAoCisgICAiSTAgPSAlMTtcblx0IgorICAgIkkxID0gJTI7XG5cdCIKKyAgICJBMCA9IDA7XG5cdCIKKyAgICJSMC5MID0gV1tJMCsrXSB8fCBSMS5MID0gV1tJMSsrXTtcblx0IgorICAgIkxPT1AgZG90JT0gTEMwID0gJTM7XG5cdCIKKyAgICJMT09QX0JFR0lOIGRvdCU9O1xuXHQiCisgICAgICAiQTAgKz0gUjAuTCAqIFIxLkwgKElTKSB8fCBSMC5MID0gV1tJMCsrXSB8fCBSMS5MID0gV1tJMSsrXTtcblx0IgorICAgIkxPT1BfRU5EIGRvdCU9O1xuXHQiCisgICAiQTAgKz0gUjAuTCpSMS5MIChJUyk7XG5cdCIKKyAgICJSMCA9IEEwO1xuXHQiCisgICAiJTAgPSBSMDtcblx0IgorICAgOiAiPSZkIiAoZG90KQorICAgOiAiYSIgKHgpLCAiYSIgKHkpLCAiYSIgKGxlbikKKyAgIDogIkkwIiwgIkkxIiwgIkExIiwgIkEwIiwgIlIwIiwgIlIxIgorICAgKTsKKworICAgcmV0dXJuIGRvdDsKK30KKyNlbmRpZgorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyMTYoZmlyMTZfc3RhdGVfdCAqZmlyLCBpbnQxNl90IHNhbXBsZSkKK3sKKyAgICBpbnQzMl90IHk7CisjaWYgZGVmaW5lZChVU0VfTU1YKQorICAgIGludCBpOworICAgIG1teF90ICptbXhfY29lZmZzOworICAgIG1teF90ICptbXhfaGlzdDsKKworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3BvcyArIGZpci0+dGFwc10gPSBzYW1wbGU7CisKKyAgICBtbXhfY29lZmZzID0gKG1teF90ICopIGZpci0+Y29lZmZzOworICAgIG1teF9oaXN0ID0gKG1teF90ICopICZmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc107CisgICAgaSA9IGZpci0+dGFwczsKKyAgICBweG9yX3IycihtbTQsIG1tNCk7CisgICAgLyogOCBzYW1wbGVzIHBlciBpdGVyYXRpb24sIHNvIHRoZSBmaWx0ZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggbG9uZy4gKi8KKyAgICB3aGlsZSAoaSA+IDApCisgICAgeworICAgICAgICBtb3ZxX20ycihtbXhfY29lZmZzWzBdLCBtbTApOworICAgICAgICBtb3ZxX20ycihtbXhfY29lZmZzWzFdLCBtbTIpOworICAgICAgICBtb3ZxX20ycihtbXhfaGlzdFswXSwgbW0xKTsKKyAgICAgICAgbW92cV9tMnIobW14X2hpc3RbMV0sIG1tMyk7CisgICAgICAgIG1teF9jb2VmZnMgKz0gMjsKKyAgICAgICAgbW14X2hpc3QgKz0gMjsKKyAgICAgICAgcG1hZGR3ZF9yMnIobW0xLCBtbTApOworICAgICAgICBwbWFkZHdkX3IycihtbTMsIG1tMik7CisgICAgICAgIHBhZGRkX3IycihtbTAsIG1tNCk7CisgICAgICAgIHBhZGRkX3IycihtbTIsIG1tNCk7CisgICAgICAgIGkgLT0gODsKKyAgICB9CisgICAgbW92cV9yMnIobW00LCBtbTApOworICAgIHBzcmxxX2kycigzMiwgbW0wKTsKKyAgICBwYWRkZF9yMnIobW0wLCBtbTQpOworICAgIG1vdmRfcjJtKG1tNCwgeSk7CisgICAgZW1tcygpOworI2VsaWYgZGVmaW5lZChVU0VfU1NFMikKKyAgICBpbnQgaTsKKyAgICB4bW1fdCAqeG1tX2NvZWZmczsKKyAgICB4bW1fdCAqeG1tX2hpc3Q7CisKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3MgKyBmaXItPnRhcHNdID0gc2FtcGxlOworCisgICAgeG1tX2NvZWZmcyA9ICh4bW1fdCAqKSBmaXItPmNvZWZmczsKKyAgICB4bW1faGlzdCA9ICh4bW1fdCAqKSAmZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdOworICAgIGkgPSBmaXItPnRhcHM7CisgICAgcHhvcl9yMnIoeG1tNCwgeG1tNCk7CisgICAgLyogMTYgc2FtcGxlcyBwZXIgaXRlcmF0aW9uLCBzbyB0aGUgZmlsdGVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNiBsb25nLiAqLworICAgIHdoaWxlIChpID4gMCkKKyAgICB7CisgICAgICAgIG1vdmRxdV9tMnIoeG1tX2NvZWZmc1swXSwgeG1tMCk7CisgICAgICAgIG1vdmRxdV9tMnIoeG1tX2NvZWZmc1sxXSwgeG1tMik7CisgICAgICAgIG1vdmRxdV9tMnIoeG1tX2hpc3RbMF0sIHhtbTEpOworICAgICAgICBtb3ZkcXVfbTJyKHhtbV9oaXN0WzFdLCB4bW0zKTsKKyAgICAgICAgeG1tX2NvZWZmcyArPSAyOworICAgICAgICB4bW1faGlzdCArPSAyOworICAgICAgICBwbWFkZHdkX3Iycih4bW0xLCB4bW0wKTsKKyAgICAgICAgcG1hZGR3ZF9yMnIoeG1tMywgeG1tMik7CisgICAgICAgIHBhZGRkX3Iycih4bW0wLCB4bW00KTsKKyAgICAgICAgcGFkZGRfcjJyKHhtbTIsIHhtbTQpOworICAgICAgICBpIC09IDE2OworICAgIH0KKyAgICBtb3ZkcWFfcjJyKHhtbTQsIHhtbTApOworICAgIHBzcmxkcV9pMnIoOCwgeG1tMCk7CisgICAgcGFkZGRfcjJyKHhtbTAsIHhtbTQpOworICAgIG1vdmRxYV9yMnIoeG1tNCwgeG1tMCk7CisgICAgcHNybGRxX2kycig0LCB4bW0wKTsKKyAgICBwYWRkZF9yMnIoeG1tMCwgeG1tNCk7CisgICAgbW92ZF9yMm0oeG1tNCwgeSk7CisjZWxpZiBkZWZpbmVkKF9fQkxBQ0tGSU5fQVNNX18pCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zICsgZmlyLT50YXBzXSA9IHNhbXBsZTsKKyAgICB5ID0gZG90X2FzbSgoaW50MTZfdCopZmlyLT5jb2VmZnMsICZmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10sIGZpci0+dGFwcyk7CisjZWxzZQorICAgIGludCBpOworICAgIGludCBvZmZzZXQxOworICAgIGludCBvZmZzZXQyOworCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworCisgICAgb2Zmc2V0MiA9IGZpci0+Y3Vycl9wb3M7CisgICAgb2Zmc2V0MSA9IGZpci0+dGFwcyAtIG9mZnNldDI7CisgICAgeSA9IDA7CisgICAgZm9yIChpID0gZmlyLT50YXBzIC0gMTsgIGkgPj0gb2Zmc2V0MTsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSAtIG9mZnNldDFdOworICAgIGZvciAoICA7ICBpID49IDA7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgKyBvZmZzZXQyXTsKKyNlbmRpZgorICAgIGlmIChmaXItPmN1cnJfcG9zIDw9IDApCisgICAgCWZpci0+Y3Vycl9wb3MgPSBmaXItPnRhcHM7CisgICAgZmlyLT5jdXJyX3Bvcy0tOworICAgIHJldHVybiAoaW50MTZfdCkgKHkgPj4gMTUpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIGNvbnN0IGludDE2X3QgKmZpcjMyX2NyZWF0ZShmaXIzMl9zdGF0ZV90ICpmaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCAqY29lZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXBzKQoreworICAgIGZpci0+dGFwcyA9IHRhcHM7CisgICAgZmlyLT5jdXJyX3BvcyA9IHRhcHMgLSAxOworICAgIGZpci0+Y29lZmZzID0gY29lZmZzOworICAgIGZpci0+aGlzdG9yeSA9IChpbnQxNl90ICopIG1hbGxvYyh0YXBzKnNpemVvZihpbnQxNl90KSk7CisgICAgaWYgKGZpci0+aGlzdG9yeSkKKyAgICAJbWVtc2V0KGZpci0+aGlzdG9yeSwgJ1wwJywgdGFwcypzaXplb2YoaW50MTZfdCkpOworICAgIHJldHVybiBmaXItPmhpc3Rvcnk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mbHVzaChmaXIzMl9zdGF0ZV90ICpmaXIpCit7CisgICAgbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgZmlyLT50YXBzKnNpemVvZihpbnQxNl90KSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mcmVlKGZpcjMyX3N0YXRlX3QgKmZpcikKK3sKKyAgICBmcmVlKGZpci0+aGlzdG9yeSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gaW50MTZfdCBmaXIzMihmaXIzMl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQoreworICAgIGludCBpOworICAgIGludDMyX3QgeTsKKyAgICBpbnQgb2Zmc2V0MTsKKyAgICBpbnQgb2Zmc2V0MjsKKworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKyAgICBvZmZzZXQyID0gZmlyLT5jdXJyX3BvczsKKyAgICBvZmZzZXQxID0gZmlyLT50YXBzIC0gb2Zmc2V0MjsKKyAgICB5ID0gMDsKKyAgICBmb3IgKGkgPSBmaXItPnRhcHMgLSAxOyAgaSA+PSBvZmZzZXQxOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpIC0gb2Zmc2V0MV07CisgICAgZm9yICggIDsgIGkgPj0gMDsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSArIG9mZnNldDJdOworICAgIGlmIChmaXItPmN1cnJfcG9zIDw9IDApCisgICAgCWZpci0+Y3Vycl9wb3MgPSBmaXItPnRhcHM7CisgICAgZmlyLT5jdXJyX3Bvcy0tOworICAgIHJldHVybiAoaW50MTZfdCkgKHkgPj4gMTUpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgX19LRVJORUxfXworc3RhdGljIF9faW5saW5lX18gY29uc3QgZmxvYXQgKmZpcl9mbG9hdF9jcmVhdGUoZmlyX2Zsb2F0X3N0YXRlX3QgKmZpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0ICpjb2VmZnMsCisgICAgCSAgICAJICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFwcykKK3sKKyAgICBmaXItPnRhcHMgPSB0YXBzOworICAgIGZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKKyAgICBmaXItPmNvZWZmcyA9IGNvZWZmczsKKyAgICBmaXItPmhpc3RvcnkgPSAoZmxvYXQgKikgbWFsbG9jKHRhcHMqc2l6ZW9mKGZsb2F0KSk7CisgICAgaWYgKGZpci0+aGlzdG9yeSkKKyAgICAgICAgbWVtc2V0KGZpci0+aGlzdG9yeSwgJ1wwJywgdGFwcypzaXplb2YoZmxvYXQpKTsKKyAgICByZXR1cm4gZmlyLT5oaXN0b3J5OworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyX2Zsb2F0X2ZyZWUoZmlyX2Zsb2F0X3N0YXRlX3QgKmZpcikKK3sKKyAgICBmcmVlKGZpci0+aGlzdG9yeSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gaW50MTZfdCBmaXJfZmxvYXQoZmlyX2Zsb2F0X3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCit7CisgICAgaW50IGk7CisgICAgZmxvYXQgeTsKKyAgICBpbnQgb2Zmc2V0MTsKKyAgICBpbnQgb2Zmc2V0MjsKKworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKworICAgIG9mZnNldDIgPSBmaXItPmN1cnJfcG9zOworICAgIG9mZnNldDEgPSBmaXItPnRhcHMgLSBvZmZzZXQyOworICAgIHkgPSAwOworICAgIGZvciAoaSA9IGZpci0+dGFwcyAtIDE7ICBpID49IG9mZnNldDE7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgLSBvZmZzZXQxXTsKKyAgICBmb3IgKCAgOyAgaSA+PSAwOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpICsgb2Zmc2V0Ml07CisgICAgaWYgKGZpci0+Y3Vycl9wb3MgPD0gMCkKKyAgICAJZmlyLT5jdXJyX3BvcyA9IGZpci0+dGFwczsKKyAgICBmaXItPmN1cnJfcG9zLS07CisgICAgcmV0dXJuICAoaW50MTZfdCkgeTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorLyotIEVuZCBvZiBmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL21teC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTM5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIG1teC5oCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBILiBEaWV0eiBhbmQgUi4gRmlzaGVyCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaWZuZGVmIEFWQ09ERUNfSTM4Nk1NWF9ICisjZGVmaW5lIEFWQ09ERUNfSTM4Nk1NWF9ICisKKy8qCisgKiBUaGUgdHlwZSBvZiBhbiB2YWx1ZSB0aGF0IGZpdHMgaW4gYW4gTU1YIHJlZ2lzdGVyIChub3RlIHRoYXQgbG9uZworICogbG9uZyBjb25zdGFudCB2YWx1ZXMgTVVTVCBiZSBzdWZmaXhlZCBieSBMTCBhbmQgdW5zaWduZWQgbG9uZyBsb25nCisgKiB2YWx1ZXMgYnkgVUxMLCBsZXN0IHRoZXkgYmUgdHJ1bmNhdGVkIGJ5IHRoZSBjb21waWxlcikKKyAqLworCit0eXBlZGVmICAgICAgICB1bmlvbiB7CisgICAgICAgIGxvbmcgbG9uZyAgICAgICAgICAgICAgIHE7ICAgICAgLyogUXVhZHdvcmQgKDY0LWJpdCkgdmFsdWUgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICAgICAgdXE7ICAgICAvKiBVbnNpZ25lZCBRdWFkd29yZCAqLworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBkWzJdOyAgIC8qIDIgRG91Ymxld29yZCAoMzItYml0KSB2YWx1ZXMgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdWRbMl07ICAvKiAyIFVuc2lnbmVkIERvdWJsZXdvcmQgKi8KKyAgICAgICAgc2hvcnQgICAgICAgICAgICAgICAgICAgd1s0XTsgICAvKiA0IFdvcmQgKDE2LWJpdCkgdmFsdWVzICovCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIHV3WzRdOyAgLyogNCBVbnNpZ25lZCBXb3JkICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGJbOF07ICAgLyogOCBCeXRlICg4LWJpdCkgdmFsdWVzICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIHViWzhdOyAgLyogOCBVbnNpZ25lZCBCeXRlICovCisgICAgICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgIHNbMl07ICAgLyogU2luZ2xlLXByZWNpc2lvbiAoMzItYml0KSB2YWx1ZSAqLworfSBtbXhfdDsgICAgICAgIC8qIE9uIGFuIDgtYnl0ZSAoNjQtYml0KSBib3VuZGFyeSAqLworCisvKiBTU0UgcmVnaXN0ZXJzICovCit0eXBlZGVmIHVuaW9uIHsKKwljaGFyIGJbMTZdOworfSB4bW1fdDsKKworCisjZGVmaW5lICAgICAgICAgbW14X2kycihvcCxpbW0scmVnKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImkiIChpbW0pICkKKworI2RlZmluZSAgICAgICAgIG1teF9tMnIob3AsbWVtLHJlZykgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKworI2RlZmluZSAgICAgICAgIG1teF9yMm0ob3AscmVnLG1lbSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSUiICNyZWcgIiwgJTAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAobWVtKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gKQorCisjZGVmaW5lICAgICAgICAgbW14X3IycihvcCxyZWdzLHJlZ2QpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQorCisKKyNkZWZpbmUgICAgICAgICBlbW1zKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlbW1zIikKKworI2RlZmluZSAgICAgICAgIG1vdmRfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChtb3ZkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBtb3ZkX3IybShyZWcsdmFyKSAgICAgICAgICAgbW14X3IybSAobW92ZCwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92ZF9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKG1vdmQsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBtb3ZxX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAobW92cSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgbW92cV9yMm0ocmVnLHZhcikgICAgICAgICAgIG1teF9yMm0gKG1vdnEsIHJlZywgdmFyKQorI2RlZmluZSAgICAgICAgIG1vdnFfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChtb3ZxLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFja3NzZHdfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc2R3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWNrc3Nkd19yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3NzZHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFja3Nzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc3diLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWNrc3N3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Nzd2IsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWNrdXN3Yl9tMnIodmFyLHJlZykgICAgICAgbW14X20yciAocGFja3Vzd2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhY2t1c3diX3IycihyZWdzLHJlZ2QpICAgICBtbXhfcjJyIChwYWNrdXN3YiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhZGRiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZGJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhZGRkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhZGR3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGR3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFkZHNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBhZGRzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBhZGRzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWRkc3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocGFkZHN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkc3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocGFkZHN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFkZHVzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBhZGR1c2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGR1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwYWRkdXNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhZGR1c3dfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYWRkdXN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkdXN3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGFkZHVzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhbmRfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChwYW5kLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYW5kX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAocGFuZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhbmRuX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYW5kbiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFuZG5fcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhbmRuLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGNtcGVxYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBlcWJfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBjbXBlcWRfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXFkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZXFkX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwY21wZXF3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGVxd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcXcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwY21wZ3RiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGd0Yl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGd0ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndGQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBndGRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3RkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBjbXBndHdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3R3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZ3R3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0dywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtYWRkd2RfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwbWFkZHdkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWFkZHdkX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocG1hZGR3ZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtdWxod19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbXVsaHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtdWxod19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbXVsaHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbXVsbHdfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG11bGx3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbXVsbHdfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG11bGx3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG9yX20ycih2YXIscmVnKSAgICAgICAgICAgIG1teF9tMnIgKHBvciwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG9yX3IycihyZWdzLHJlZ2QpICAgICAgICAgIG1teF9yMnIgKHBvciwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzbGxkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsZCwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGxkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNsbHFfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxxLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xscV9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbHEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxxX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xscSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc2xsd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHcsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGx3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xsdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGx3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHNyYWRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmFkLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JhZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNyYWQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmFkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JhZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3Jhd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYXcsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmF3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYXdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmF3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHNybGRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmxkLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JsZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybGQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3JscV9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybHEsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxxX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JscSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybHFfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmxxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzcmx3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JsdywgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmx3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jsd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3ViYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHN1YmIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3ViYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3ViZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHN1YmQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3ViZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3Vid19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHN1YncsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJ3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3VidywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzdWJzYl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc3Vic2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJzYl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc3Vic2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHN1YnN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzdWJzdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YnN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzdWJzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3VidXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3VidXN3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocHN1YnVzdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YnVzd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBzdWJ1c3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwdW5wY2toYndfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraGJ3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2toYndfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraGJ3LCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2hkcV9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toZHEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2hkcV9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNraHdkX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2h3ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNraHdkX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2h3ZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHB1bnBja2xid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsYncsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2xid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNrbGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xkcSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNrbGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsd2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbHdkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsd2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbHdkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHhvcl9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKHB4b3IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB4b3JfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChweG9yLCByZWdzLCByZWdkKQorCisKKy8qIDNETk9XIGV4dGVuc2lvbnMgKi8KKworI2RlZmluZSAgICAgICAgIHBhdmd1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYXZndXNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZndXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGF2Z3VzYiwgcmVncywgcmVnZCkKKworCisvKiBBTUQgTU1YIGV4dGVuc2lvbnMgLSBhbHNvIGF2YWlsYWJsZSBpbiBpbnRlbCBTU0UgKi8KKworCisjZGVmaW5lICAgICAgICAgbW14X20ycmkob3AsbWVtLHJlZyxpbW0pIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUxLCAlMCwgJSUiICNyZWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pLCAiaSIgKGltbSkpCisjZGVmaW5lICAgICAgICAgbW14X3Iycmkob3AscmVncyxyZWdkLGltbSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVncyAiLCAlJSIgI3JlZ2QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImkiIChpbW0pICkKKworI2RlZmluZSAgICAgICAgIG1teF9mZXRjaChtZW0saGludCkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInByZWZldGNoIiAjaGludCAiICUwIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSkpCisKKworI2RlZmluZSAgICAgICAgIG1hc2ttb3ZxKHJlZ3MsbWFza3JlZykgICAgICBtbXhfcjJyaSAobWFza21vdnEsIHJlZ3MsIG1hc2tyZWcpCisKKyNkZWZpbmUgICAgICAgICBtb3ZudHFfcjJtKG1tcmVnLHZhcikgICAgICAgbW14X3IybSAobW92bnRxLCBtbXJlZywgdmFyKQorCisjZGVmaW5lICAgICAgICAgcGF2Z2JfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmdiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZnYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGF2Z3dfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmd3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYXZnd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwZXh0cndfcjJyKG1tcmVnLHJlZyxpbW0pICAgbW14X3IycmkgKHBleHRydywgbW1yZWcsIHJlZywgaW1tKQorCisjZGVmaW5lICAgICAgICAgcGluc3J3X3IycihyZWcsbW1yZWcsaW1tKSAgIG1teF9yMnJpIChwaW5zcncsIHJlZywgbW1yZWcsIGltbSkKKworI2RlZmluZSAgICAgICAgIHBtYXhzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWF4c3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtYXhzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWF4c3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbWF4dWJfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG1heHViLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWF4dWJfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG1heHViLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1pbnN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW5zdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1pbnN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW5zdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtaW51Yl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWludWIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtaW51Yl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWludWIsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbW92bXNrYihtbXJlZyxyZWcpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Ztc2twcyAlIiAjbW1yZWcgIiwgJSIgI3JlZykKKworI2RlZmluZSAgICAgICAgIHBtdWxodXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwbXVsaHV3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbXVsaHV3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocG11bGh1dywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHByZWZldGNodDAobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDApCisjZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MShtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MSkKKyNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQyKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQyKQorI2RlZmluZSAgICAgICAgIHByZWZldGNobnRhKG1lbSkgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgbnRhKQorCisjZGVmaW5lICAgICAgICAgcHNhZGJ3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzYWRidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNhZGJ3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzYWRidywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzaHVmd19tMnIodmFyLHJlZyxpbW0pICAgICBtbXhfbTJyaShwc2h1ZncsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZ3X3IycihyZWdzLHJlZ2QsaW1tKSAgIG1teF9yMnJpKHBzaHVmdywgcmVncywgcmVnZCwgaW1tKQorCisjZGVmaW5lICAgICAgICAgc2ZlbmNlKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZmVuY2Vcblx0IikKKworLyogU1NFMiAqLworI2RlZmluZSAgICAgICAgIHBzaHVmaHdfbTJyKHZhcixyZWcsaW1tKSAgICBtbXhfbTJyaShwc2h1Zmh3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZSAgICAgICAgIHBzaHVmaHdfcjJyKHJlZ3MscmVnZCxpbW0pICBtbXhfcjJyaShwc2h1Zmh3LCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZsd19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmbHcsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZsd19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmbHcsIHJlZ3MsIHJlZ2QsIGltbSkKKworI2RlZmluZSAgICAgICAgIHBzaHVmZF9yMnIocmVncyxyZWdkLGltbSkgICBtbXhfcjJyaShwc2h1ZmQsIHJlZ3MsIHJlZ2QsIGltbSkKKworI2RlZmluZSAgICAgICAgIG1vdmRxYV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcWEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcWEsIHJlZywgdmFyKQorI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcWEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKG1vdmRxdSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKG1vdmRxdSwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92ZHF1X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKG1vdmRxdSwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtdWxsd19yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChwbXVsbHcsIHJlZywgdmFyKQorCisjZGVmaW5lICAgICAgICAgcHNsbGRxX2kycihpbW0scmVnKSAgICAgICAgIG1teF9pMnIgKHBzbGxkcSwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybGRxX2kycihpbW0scmVnKSAgICAgICAgIG1teF9pMnIgKHBzcmxkcSwgaW1tLCByZWcpCisKKyNkZWZpbmUgICAgICAgICBwdW5wY2tscWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNrbHFkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tocWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNraHFkcSwgcmVncywgcmVnZCkKKworCisjZW5kaWYgLyogQVZDT0RFQ19JMzg2TU1YX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTFjZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2NvbmZpZyBFVDEzMVgKKwl0cmlzdGF0ZSAiQWdlcmUgRVQtMTMxMCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRERVZfMTAwMCAmJiBQQ0kKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBZ2VyZSBFVC0xMzEwIGV0aGVybmV0IGFkYXB0ZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBldDEzMXguCisKK2NvbmZpZyBFVDEzMVhfREVCVUcKKwlib29sICJFbmFibGUgZXQxMzF4IGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVUMTMxWAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGZvciBkZXRhaWxlZCBkZWJ1ZyBpbmZvcm1hdGlvbi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkNTcxZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTWFrZWZpbGUKQEAgLTAsMCArMSwxOCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIEFnZXJlIEVULTEzMXggZXRoZXJuZXQgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19FVDEzMVgpICs9IGV0MTMxeC5vCisKK2V0MTMxeC1vYmpzIDo9CWV0MTMxMF9lZXByb20ubyBcCisJCWV0MTMxMF9qYWdjb3JlLm8gXAorCQlldDEzMTBfbWFjLm8gXAorCQlldDEzMTBfcGh5Lm8gXAorCQlldDEzMTBfcG0ubyBcCisJCWV0MTMxMF9yeC5vIFwKKwkJZXQxMzEwX3R4Lm8gXAorCQlldDEzMXhfY29uZmlnLm8gXAorCQlldDEzMXhfZGVidWcubyBcCisJCWV0MTMxeF9pbml0cGNpLm8gXAorCQlldDEzMXhfaXNyLm8gXAorCQlldDEzMXhfbmV0ZGV2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NTJhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvUkVBRE1FCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBFVDEzMTAgbmV0d29yayBkZXZpY2UuCisKK0Jhc2VkIG9uIHRoZSBkcml2ZXIgZm91bmQgYXQgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXQxMzF4LworCitDbGVhbmVkIHVwIGltbWVuc2VseSBieSBPbGFmIEhhcnRtYW4gPG8uaGFydG1hbm5AdGVsb3ZpdGFsLmNvbT4gYW5kIENocmlzdG9waAorSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CisKK05vdGUsIHRoZSBwb3dlcm1hbmFnZW1lbnQgb3B0aW9ucyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgdmVuZG9yIHByb3ZpZGVkCitkcml2ZXIgYXMgdGhleSBkaWQgbm90IGJ1aWxkIHByb3Blcmx5IGF0IHRoZSB0aW1lLgorCitUT0RPOgorCS0ga2VybmVsIGNvZGluZyBzdHlsZSBjbGVhbnVwcworCS0gZm9yd2FyZCBwb3J0IGZvciBsYXRlc3QgbmV0d29yayBkcml2ZXIgY2hhbmdlcworCS0ga2lsbCB1c2VsZXNzIHR5cGVjYXN0cyAoZS5nLiBpbiBldDEzMTBfcGh5LmMpCisJLSBhbGxvY19ldGhlcmRldiBpcyBpbml0aWFsaXppbmcgbWVtb3J5IHdpdGggemVybz8hPworCS0gYWRkX3RpbWVyIGNhbGwgaW4gZXQxMzF4X25ldGRldi5jIGlzIGNvcnJlY3Q/CisJLSBBZGQgcG93ZXIgc2F2aW5nIGZ1bmN0aW9uYWxpdHkgKHN1c3BlbmQsIHNsZWVwLCByZXN1bWUpCisJLSBJbXBsZW1lbnQgYSBmZXcgbW9yZSBrZXJuZWwgUGFyYW1ldGVyIChzZXQgbWFjICkKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0bzoKKwlHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorCitBbmQgQ2M6IE9sYWYgSGFydG1hbm4gPG8uaGFydG1hbm5AdGVsb3ZpdGFsLmNvbT4gYXMgaGUgaGFzIHRoaXMgZGV2aWNlIGFuZCBjYW4KK3Rlc3QgYW55IGNoYW5nZXMuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODU5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0wLDAgKzEsMjM5OSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfYWRkcmVzc19tYXAuaCAtIENvbnRhaW5zIHRoZSByZWdpc3RlciBtYXBwaW5nIGZvciB0aGUgRVQxMzEwCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0VUMTMxMF9BRERSRVNTX01BUF9IXworI2RlZmluZSBfRVQxMzEwX0FERFJFU1NfTUFQX0hfCisKKworLyogU1RBUlQgT0YgR0xPQkFMIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKK3R5cGVkZWYgdW5pb24gX1FfQUREUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIGFkZHI6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgYWRkcjoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBRX0FERFJfdCwgKlBRX0FERFJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHggcXVldWUgc3RhcnQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDAwCisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4IHF1ZXVlIGVuZCBhZGRyZXNzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDQKKyAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgc3RhcnQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDA4CisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIGVuZCBhZGRyZXNzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMEMKKyAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBjb250cm9sIHN0YXR1cyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDEwCisgKi8KK3R5cGVkZWYgdW5pb24gX1BNX0NTUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBwbV9qYWdjb3JlX3J4X3JkeToxOwkvLyBiaXQgOQorCQl1MzIgcG1famFnY29yZV90eF9yZHk6MTsJLy8gYml0IDgKKwkJdTMyIHBtX3BoeV9scGVkX2VuOjE7CS8vIGJpdCA3CisJCXUzMiBwbV9waHlfc3dfY29tYToxOwkvLyBiaXQgNgorCQl1MzIgcG1fcnhjbGtfZ2F0ZToxOwkvLyBiaXQgNQorCQl1MzIgcG1fdHhjbGtfZ2F0ZToxOwkvLyBiaXQgNAorCQl1MzIgcG1fc3lzY2xrX2dhdGU6MTsJLy8gYml0IDMKKwkJdTMyIHBtX2phZ2NvcmVfcnhfZW46MTsJLy8gYml0IDIKKwkJdTMyIHBtX2phZ2NvcmVfdHhfZW46MTsJLy8gYml0IDEKKwkJdTMyIHBtX2dpZ2VwaHlfZW46MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBwbV9naWdlcGh5X2VuOjE7CS8vIGJpdCAwCisJCXUzMiBwbV9qYWdjb3JlX3R4X2VuOjE7CS8vIGJpdCAxCisJCXUzMiBwbV9qYWdjb3JlX3J4X2VuOjE7CS8vIGJpdCAyCisJCXUzMiBwbV9zeXNjbGtfZ2F0ZToxOwkvLyBiaXQgMworCQl1MzIgcG1fdHhjbGtfZ2F0ZToxOwkvLyBiaXQgNAorCQl1MzIgcG1fcnhjbGtfZ2F0ZToxOwkvLyBiaXQgNQorCQl1MzIgcG1fcGh5X3N3X2NvbWE6MTsJLy8gYml0IDYKKwkJdTMyIHBtX3BoeV9scGVkX2VuOjE7CS8vIGJpdCA3CisJCXUzMiBwbV9qYWdjb3JlX3R4X3JkeToxOwkvLyBiaXQgOAorCQl1MzIgcG1famFnY29yZV9yeF9yZHk6MTsJLy8gYml0IDkKKwkJdTMyIHVudXNlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUE1fQ1NSX3QsICpQUE1fQ1NSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBzdGF0dXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxOAorICovCit0eXBlZGVmIHVuaW9uIF9JTlRFUlJVUFRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkNToxMTsJCQkvLyBiaXRzIDIxLTMxCisJCXUzMiBzbHZfdGltZW91dDoxOwkJCS8vIGJpdCAyMAorCQl1MzIgbWFjX3N0YXRfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTkKKwkJdTMyIHJ4bWFjX2ludGVycnVwdDoxOwkJLy8gYml0IDE4CisJCXUzMiB0eG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNworCQl1MzIgcGh5X2ludGVycnVwdDoxOwkJLy8gYml0IDE2CisJCXUzMiB3YWtlX29uX2xhbjoxOwkJCS8vIGJpdCAxNQorCQl1MzIgd2F0Y2hkb2dfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTQKKwkJdTMyIHVudXNlZDQ6NDsJCQkvLyBiaXRzIDEwLTEzCisJCXUzMiByeGRtYV9lcnI6MTsJCQkvLyBiaXQgOQorCQl1MzIgcnhkbWFfcGt0X3N0YXRfcmluZ19sb3c6MTsJLy8gYml0IDgKKwkJdTMyIHJ4ZG1hX2ZiX3JpbmcxX2xvdzoxOwkJLy8gYml0IDcKKwkJdTMyIHJ4ZG1hX2ZiX3JpbmcwX2xvdzoxOwkJLy8gYml0IDYKKwkJdTMyIHJ4ZG1hX3hmcl9kb25lOjE7CQkvLyBiaXQgNQorCQl1MzIgdHhkbWFfZXJyOjE7CQkJLy8gYml0IDQKKwkJdTMyIHR4ZG1hX2lzcjoxOwkJCS8vIGJpdCAzCisJCXUzMiB1bnVzZWQzOjE7CQkJLy8gYml0IDIKKwkJdTMyIHVudXNlZDI6MTsJCQkvLyBiaXQgMQorCQl1MzIgdW51c2VkMToxOwkJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdW51c2VkMToxOwkJCS8vIGJpdCAwCisJCXUzMiB1bnVzZWQyOjE7CQkJLy8gYml0IDEKKwkJdTMyIHVudXNlZDM6MTsJCQkvLyBiaXQgMgorCQl1MzIgdHhkbWFfaXNyOjE7CQkJLy8gYml0IDMKKwkJdTMyIHR4ZG1hX2VycjoxOwkJCS8vIGJpdCA0CisJCXUzMiByeGRtYV94ZnJfZG9uZToxOwkJLy8gYml0IDUKKwkJdTMyIHJ4ZG1hX2ZiX3JpbmcwX2xvdzoxOwkJLy8gYml0IDYKKwkJdTMyIHJ4ZG1hX2ZiX3JpbmcxX2xvdzoxOwkJLy8gYml0IDcKKwkJdTMyIHJ4ZG1hX3BrdF9zdGF0X3JpbmdfbG93OjE7CS8vIGJpdCA4CisJCXUzMiByeGRtYV9lcnI6MTsJCQkvLyBiaXQgOQorCQl1MzIgdW51c2VkNDo0OwkJCS8vIGJpdHMgMTAtMTMKKwkJdTMyIHdhdGNoZG9nX2ludGVycnVwdDoxOwkJLy8gYml0IDE0CisJCXUzMiB3YWtlX29uX2xhbjoxOwkJCS8vIGJpdCAxNQorCQl1MzIgcGh5X2ludGVycnVwdDoxOwkJLy8gYml0IDE2CisJCXUzMiB0eG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNworCQl1MzIgcnhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTgKKwkJdTMyIG1hY19zdGF0X2ludGVycnVwdDoxOwkJLy8gYml0IDE5CisJCXUzMiBzbHZfdGltZW91dDoxOwkJCS8vIGJpdCAyMAorCQl1MzIgdW51c2VkNToxMTsJCQkvLyBiaXRzIDIxLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IElOVEVSUlVQVF90LCAqUElOVEVSUlVQVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgbWFzayByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDFDCisgKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KSwgYnV0ICd3YXRjaGRvZ19pbnRlcnJ1cHQnIGlzIG5vdCB1c2VkLgorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBhbGlhcyBjbGVhciBtYXNrIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMjAKKyAqIERlZmluZWQgZWFybGllciAoSU5URVJSVVBUX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IHN0YXR1cyBhbGlhcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDI0CisgKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHNvZnR3YXJlIHJlc2V0IHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMjgKKyAqLwordHlwZWRlZiB1bmlvbiBfU1dfUkVTRVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgc2VsZmNscl9kaXNhYmxlOjE7CS8vIGJpdCAzMQorCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA3LTMwCisJCXUzMiBtbWNfc3dfcmVzZXQ6MTsJLy8gYml0IDYKKwkJdTMyIG1hY19zdGF0X3N3X3Jlc2V0OjE7CS8vIGJpdCA1CisJCXUzMiBtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDQKKwkJdTMyIHJ4bWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCAzCisJCXUzMiB0eG1hY19zd19yZXNldDoxOwkvLyBiaXQgMgorCQl1MzIgcnhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDEKKwkJdTMyIHR4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdHhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDAKKwkJdTMyIHJ4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAxCisJCXUzMiB0eG1hY19zd19yZXNldDoxOwkvLyBiaXQgMgorCQl1MzIgcnhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDMKKwkJdTMyIG1hY19zd19yZXNldDoxOwkvLyBiaXQgNAorCQl1MzIgbWFjX3N0YXRfc3dfcmVzZXQ6MTsJLy8gYml0IDUKKwkJdTMyIG1tY19zd19yZXNldDoxOwkvLyBiaXQgNgorCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA3LTMwCisJCXUzMiBzZWxmY2xyX2Rpc2FibGU6MTsJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFNXX1JFU0VUX3QsICpQU1dfUkVTRVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgU0xWIFRpbWVyIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMkMKKyAqLwordHlwZWRlZiB1bmlvbiBfU0xWX1RJTUVSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiB0aW1lcl9pbmk6MjQ7CS8vIGJpdHMgMC0yMworI2Vsc2UKKwkJdTMyIHRpbWVyX2luaToyNDsJLy8gYml0cyAwLTIzCisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBTTFZfVElNRVJfdCwgKlBTTFZfVElNRVJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTVNJIENvbmZpZ3VyYXRpb24gcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAzMAorICovCit0eXBlZGVmIHVuaW9uIF9NU0lfQ09ORklHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDE6MTM7CS8vIGJpdHMgMTktMzEKKwkJdTMyIG1zaV90YzozOwkvLyBiaXRzIDE2LTE4CisJCXUzMiB1bnVzZWQyOjExOwkvLyBiaXRzIDUtMTUKKwkJdTMyIG1zaV92ZWN0b3I6NTsJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUzMiBtc2lfdmVjdG9yOjU7CS8vIGJpdHMgMC00CisJCXUzMiB1bnVzZWQyOjExOwkvLyBiaXRzIDUtMTUKKwkJdTMyIG1zaV90YzozOwkvLyBiaXRzIDE2LTE4CisJCXUzMiB1bnVzZWQxOjEzOwkvLyBiaXRzIDE5LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1TSV9DT05GSUdfdCwgKlBNU0lfQ09ORklHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIExvb3BiYWNrIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMzQKKyAqLwordHlwZWRlZiB1bmlvbiBfTE9PUEJBQ0tfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCisJCXUzMiBkbWFfbG9vcGJhY2s6MTsJLy8gYml0IDEKKwkJdTMyIG1hY19sb29wYmFjazoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIG1hY19sb29wYmFjazoxOwkvLyBiaXQgMAorCQl1MzIgZG1hX2xvb3BiYWNrOjE7CS8vIGJpdCAxCisJCXUzMiB1bnVzZWQ6MzA7CQkvLyBiaXRzIDItMzEKKyNlbmRpZgorCX0gYml0czsKK30gTE9PUEJBQ0tfdCwgKlBMT09QQkFDS190OworCisvKgorICogR0xPQkFMIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwMAorICovCit0eXBlZGVmIHN0cnVjdCBfR0xPQkFMX3QgewkJCS8vIExvY2F0aW9uOgorCVFfQUREUl90IHR4cV9zdGFydF9hZGRyOwkJLy8gIDB4MDAwMAorCVFfQUREUl90IHR4cV9lbmRfYWRkcjsJCQkvLyAgMHgwMDA0CisJUV9BRERSX3QgcnhxX3N0YXJ0X2FkZHI7CQkvLyAgMHgwMDA4CisJUV9BRERSX3QgcnhxX2VuZF9hZGRyOwkJCS8vICAweDAwMEMKKwlQTV9DU1JfdCBwbV9jc3I7CQkJLy8gIDB4MDAxMAorCXUzMiB1bnVzZWQ7CQkJCS8vICAweDAwMTQKKwlJTlRFUlJVUFRfdCBpbnRfc3RhdHVzOwkJCS8vICAweDAwMTgKKwlJTlRFUlJVUFRfdCBpbnRfbWFzazsJCQkvLyAgMHgwMDFDCisJSU5URVJSVVBUX3QgaW50X2FsaWFzX2Nscl9lbjsJCS8vICAweDAwMjAKKwlJTlRFUlJVUFRfdCBpbnRfc3RhdHVzX2FsaWFzOwkJLy8gIDB4MDAyNAorCVNXX1JFU0VUX3Qgc3dfcmVzZXQ7CQkJLy8gIDB4MDAyOAorCVNMVl9USU1FUl90IHNsdl90aW1lcjsJCQkvLyAgMHgwMDJDCisJTVNJX0NPTkZJR190IG1zaV9jb25maWc7CQkvLyAgMHgwMDMwCisJTE9PUEJBQ0tfdCBsb29wYmFjazsJCQkvLyAgMHgwMDM0CisJdTMyIHdhdGNoZG9nX3RpbWVyOwkJCS8vICAweDAwMzgKK30gR0xPQkFMX3QsICpQR0xPQkFMX3Q7CisKKy8qIEVORCBPRiBHTE9CQUwgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBUWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBjb250cm9sIHN0YXR1cyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhETUFfQ1NSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MTk7CQkvLyBiaXRzIDEzLTMxCisJCXUzMiB0cmFmZmljX2NsYXNzOjQ7CS8vIGJpdHMgOS0xMgorCQl1MzIgc25nbF9lcGt0X21vZGU6MTsJLy8gYml0IDgKKwkJdTMyIGNhY2hlX3RocnNobGQ6NDsJLy8gYml0cyA0LTcKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCisJCXUzMiBkcm9wX1RMUF9kaXNhYmxlOjE7CS8vIGJpdCAxCisJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCisJCXUzMiBkcm9wX1RMUF9kaXNhYmxlOjE7CS8vIGJpdCAxCisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgY2FjaGVfdGhyc2hsZDo0OwkvLyBiaXRzIDQtNworCQl1MzIgc25nbF9lcGt0X21vZGU6MTsJLy8gYml0IDgKKwkJdTMyIHRyYWZmaWNfY2xhc3M6NDsJLy8gYml0cyA5LTEyCisJCXUzMiB1bnVzZWQyOjE5OwkJLy8gYml0cyAxMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWERNQV9DU1JfdCwgKlBUWERNQV9DU1JfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgcGFja2V0IHJpbmcgYmFzZSBhZGRyZXNzIGhpIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwNAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgcGFja2V0IHJpbmcgYmFzZSBhZGRyZXNzIGxvdyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDgKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIG51bWJlciBvZiBkZXNjcmlwdG9yIHJlZyBpbiB0eGRtYSBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYRE1BX1BSX05VTV9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBwcl9uZGVzOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHByX25kZXM6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhETUFfUFJfTlVNX0RFU190LCAqUFRYRE1BX1BSX05VTV9ERVNfdDsKKworCit0eXBlZGVmIHVuaW9uIF9ETUExMFdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIxOwkvLyBiaXRzIDExLTMxCisJCXUzMiB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgdmFsOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHZhbDoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDEwCisJCXUzMiB1bnVzZWQ6MjE7CS8vIGJpdHMgMTEtMzEKKyNlbmRpZgorCX0gYml0czsKK30gRE1BMTBXX3QsICpQRE1BMTBXX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IHF1ZXVlIHdyaXRlIGFkZHJlc3MgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDEwCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IHF1ZXVlIHdyaXRlIGFkZHJlc3MgZXh0ZXJuYWwgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDE0CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IHF1ZXVlIHJlYWQgYWRkcmVzcyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMTgKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc3RhdHVzIHdyaXRlYmFjayBhZGRyZXNzIGhpIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxQworICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc3RhdHVzIHdyaXRlYmFjayBhZGRyZXNzIGxvIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyMAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc2VydmljZSByZXF1ZXN0IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyNAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBzZXJ2aWNlIGNvbXBsZXRlIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyOAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCit0eXBlZGVmIHVuaW9uIF9ETUE0V190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorCQl1MzIgd3JhcDoxOwkvLyBiaXQgNAorCQl1MzIgdmFsOjQ7CQkvLyBiaXQgMC0zCisjZWxzZQorCQl1MzIgdmFsOjQ7CQkvLyBiaXRzIDAtMworCQl1MzIgd3JhcDoxOwkvLyBiaXQgNAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKyNlbmRpZgorCX0gYml0czsKK30gRE1BNFdfdCwgKlBETUE0V190OworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBkZXNjcmlwdG9yIGNhY2hlIHJlYWQgaW5kZXggcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDJDCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTRXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggZGVzY3JpcHRvciBjYWNoZSB3cml0ZSBpbmRleCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMzAKKyAqIERlZmluZWQgZWFybGllciAoRE1BNFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBlcnJvciByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMzQKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhETUFfRVJST1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMzoyMjsJCS8vIGJpdHMgMTAtMzEKKwkJdTMyIFdyYmtSZXdpbmQ6MTsJLy8gYml0IDkKKwkJdTMyIFdyYmtSZXNlbmQ6MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDI6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBEZXNjclJld2luZDoxOwkvLyBiaXQgNQorCQl1MzIgRGVzY3JSZXNlbmQ6MTsJLy8gYml0IDQKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCisJCXUzMiBQeWxkUmV3aW5kOjE7CS8vIGJpdCAxCisJCXUzMiBQeWxkUmVzZW5kOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgUHlsZFJlc2VuZDoxOwkvLyBiaXQgMAorCQl1MzIgUHlsZFJld2luZDoxOwkvLyBiaXQgMQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKKwkJdTMyIERlc2NyUmVzZW5kOjE7CS8vIGJpdCA0CisJCXUzMiBEZXNjclJld2luZDoxOwkvLyBiaXQgNQorCQl1MzIgdW51c2VkMjoyOwkJLy8gYml0cyA2LTcKKwkJdTMyIFdyYmtSZXNlbmQ6MTsJLy8gYml0IDgKKwkJdTMyIFdyYmtSZXdpbmQ6MTsJLy8gYml0IDkKKwkJdTMyIHVudXNlZDM6MjI7CQkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYRE1BX0VSUk9SX3QsICpQVFhETUFfRVJST1JfdDsKKworLyoKKyAqIFR4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1RYRE1BX3QgewkJLy8gTG9jYXRpb246CisJVFhETUFfQ1NSX3QgY3NyOwkJLy8gIDB4MTAwMAorCXUzMiBwcl9iYXNlX2hpOwkJCS8vICAweDEwMDQKKwl1MzIgcHJfYmFzZV9sbzsJCQkvLyAgMHgxMDA4CisJVFhETUFfUFJfTlVNX0RFU190IHByX251bV9kZXM7CS8vICAweDEwMEMKKwlETUExMFdfdCB0eHFfd3JfYWRkcjsJCS8vICAweDEwMTAKKwlETUExMFdfdCB0eHFfd3JfYWRkcl9leHQ7CS8vICAweDEwMTQKKwlETUExMFdfdCB0eHFfcmRfYWRkcjsJCS8vICAweDEwMTgKKwl1MzIgZG1hX3diX2Jhc2VfaGk7CQkvLyAgMHgxMDFDCisJdTMyIGRtYV93Yl9iYXNlX2xvOwkJLy8gIDB4MTAyMAorCURNQTEwV190IHNlcnZpY2VfcmVxdWVzdDsJLy8gIDB4MTAyNAorCURNQTEwV190IHNlcnZpY2VfY29tcGxldGU7CS8vICAweDEwMjgKKwlETUE0V190IGNhY2hlX3JkX2luZGV4OwkJLy8gIDB4MTAyQworCURNQTRXX3QgY2FjaGVfd3JfaW5kZXg7CQkvLyAgMHgxMDMwCisJVFhETUFfRVJST1JfdCBUeERtYUVycm9yOwkvLyAgMHgxMDM0CisJdTMyIERlc2NBYm9ydENvdW50OwkJLy8gIDB4MTAzOAorCXUzMiBQYXlsb2FkQWJvcnRDbnQ7CQkvLyAgMHgxMDNjCisJdTMyIFdyaXRlQmFja0Fib3J0Q250OwkJLy8gIDB4MTA0MAorCXUzMiBEZXNjVGltZW91dENudDsJCS8vICAweDEwNDQKKwl1MzIgUGF5bG9hZFRpbWVvdXRDbnQ7CQkvLyAgMHgxMDQ4CisJdTMyIFdyaXRlQmFja1RpbWVvdXRDbnQ7CS8vICAweDEwNGMKKwl1MzIgRGVzY0Vycm9yQ291bnQ7CQkvLyAgMHgxMDUwCisJdTMyIFBheWxvYWRFcnJvckNudDsJCS8vICAweDEwNTQKKwl1MzIgV3JpdGVCYWNrRXJyb3JDbnQ7CQkvLyAgMHgxMDU4CisJdTMyIERyb3BwZWRUTFBDb3VudDsJCS8vICAweDEwNWMKKwlETUExMFdfdCBOZXdTZXJ2aWNlQ29tcGxldGU7CS8vICAweDEwNjAKKwl1MzIgRXRoZXJuZXRQYWNrZXRDb3VudDsJLy8gIDB4MTA2NAorfSBUWERNQV90LCAqUFRYRE1BX3Q7CisKKy8qIEVORCBPRiBUWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIFJYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGNvbnRyb2wgc3RhdHVzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwMAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9DU1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoxNDsJCS8vIGJpdHMgMTgtMzEKKwkJdTMyIGhhbHRfc3RhdHVzOjE7CS8vIGJpdCAxNworCQl1MzIgcGt0X2RvbmVfZmx1c2g6MTsJLy8gYml0IDE2CisJCXUzMiBwa3RfZHJvcF9kaXNhYmxlOjE7CS8vIGJpdCAxNQorCQl1MzIgdW51c2VkMToxOwkJLy8gYml0IDE0CisJCXUzMiBmYnIxX2VuYWJsZToxOwkvLyBiaXQgMTMKKwkJdTMyIGZicjFfc2l6ZToyOwkvLyBiaXRzIDExLTEyCisJCXUzMiBmYnIwX2VuYWJsZToxOwkvLyBiaXQgMTAKKwkJdTMyIGZicjBfc2l6ZToyOwkvLyBiaXRzIDgtOQorCQl1MzIgZG1hX2JpZ19lbmRpYW46MTsJLy8gYml0IDcKKwkJdTMyIHBrdF9iaWdfZW5kaWFuOjE7CS8vIGJpdCA2CisJCXUzMiBwc3JfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNQorCQl1MzIgZmJyX2JpZ19lbmRpYW46MTsJLy8gYml0IDQKKwkJdTMyIHRjOjM7CQkvLyBiaXRzIDEtMworCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAorCQl1MzIgdGM6MzsJCS8vIGJpdHMgMS0zCisJCXUzMiBmYnJfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNAorCQl1MzIgcHNyX2JpZ19lbmRpYW46MTsJLy8gYml0IDUKKwkJdTMyIHBrdF9iaWdfZW5kaWFuOjE7CS8vIGJpdCA2CisJCXUzMiBkbWFfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNworCQl1MzIgZmJyMF9zaXplOjI7CS8vIGJpdHMgOC05CisJCXUzMiBmYnIwX2VuYWJsZToxOwkvLyBiaXQgMTAKKwkJdTMyIGZicjFfc2l6ZToyOwkvLyBiaXRzIDExLTEyCisJCXUzMiBmYnIxX2VuYWJsZToxOwkvLyBiaXQgMTMKKwkJdTMyIHVudXNlZDE6MTsJCS8vIGJpdCAxNAorCQl1MzIgcGt0X2Ryb3BfZGlzYWJsZToxOwkvLyBiaXQgMTUKKwkJdTMyIHBrdF9kb25lX2ZsdXNoOjE7CS8vIGJpdCAxNgorCQl1MzIgaGFsdF9zdGF0dXM6MTsJLy8gYml0IDE3CisJCXUzMiB1bnVzZWQyOjE0OwkJLy8gYml0cyAxOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9DU1JfdCwgKlBSWERNQV9DU1JfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZG1hIHdyaXRlYmFjayBsbyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGRtYSB3cml0ZWJhY2sgaGkgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDA4CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBudW1iZXIgb2YgcGFja2V0cyBkb25lIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwQworICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9OVU1fUEtUX0RPTkVfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI0OwkvLyBiaXRzIDgtMzEKKwkJdTMyIG51bV9kb25lOjg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgbnVtX2RvbmU6ODsJLy8gYml0cyAwLTcKKwkJdTMyIHVudXNlZDoyNDsJLy8gYml0cyA4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX05VTV9QS1RfRE9ORV90LCAqUFJYRE1BX05VTV9QS1RfRE9ORV90OworCisvKgorICogc3RydWN0dXJlIGZvciBtYXggcGFja2V0IHRpbWUgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDEwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX01BWF9QS1RfVElNRV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTQ7CQkvLyBiaXRzIDE4LTMxCisJCXUzMiB0aW1lX2RvbmU6MTg7CS8vIGJpdHMgMC0xNworI2Vsc2UKKwkJdTMyIHRpbWVfZG9uZToxODsJLy8gYml0cyAwLTE3CisJCXUzMiB1bnVzZWQ6MTQ7CQkvLyBiaXRzIDE4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX01BWF9QS1RfVElNRV90LCAqUFJYRE1BX01BWF9QS1RfVElNRV90OworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSByZWFkIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDE0CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHJlYWQgYWRkcmVzcyBleHRlcm5hbCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMTgKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgd3JpdGUgYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMUMKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGJhc2UgYWRkcmVzcyBsbyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMjAKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBiYXNlIGFkZHJlc3MgaGkgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDI0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDI4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9OVU1fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKwkJdTMyIHBzcl9uZGVzOjEyOwkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTMyIHBzcl9uZGVzOjEyOwkvLyBiaXQgMC0xMQorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfTlVNX0RFU190LCAqUFJYRE1BX1BTUl9OVU1fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyQworICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKwkJdTMyIHBzcl9hdmFpbF93cmFwOjE7CS8vIGJpdCAxMgorCQl1MzIgcHNyX2F2YWlsOjEyOwkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTMyIHBzcl9hdmFpbDoxMjsJLy8gYml0IDAtMTEKKwkJdTMyIHBzcl9hdmFpbF93cmFwOjE7CS8vIGJpdCAxMgorCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3QsICpQUlhETUFfUFNSX0FWQUlMX09GRlNFVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDMwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9GVUxMX09GRlNFVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCisJCXUzMiBwc3JfZnVsbF93cmFwOjE7CS8vIGJpdCAxMgorCQl1MzIgcHNyX2Z1bGw6MTI7CS8vIGJpdCAwLTExCisjZWxzZQorCQl1MzIgcHNyX2Z1bGw6MTI7CS8vIGJpdCAwLTExCisJCXUzMiBwc3JfZnVsbF93cmFwOjE7CS8vIGJpdCAxMgorCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfRlVMTF9PRkZTRVRfdCwgKlBSWERNQV9QU1JfRlVMTF9PRkZTRVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGFjY2VzcyBpbmRleCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorCQl1MzIgcHNyX2FpOjU7CS8vIGJpdHMgMC00CisjZWxzZQorCQl1MzIgcHNyX2FpOjU7CS8vIGJpdHMgMC00CisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfQUNDRVNTX0lOREVYX3QsICpQUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90OworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgbWluaW11bSBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzOAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfTUlOX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CS8vIGJpdHMgMTItMzEKKwkJdTMyIHBzcl9taW46MTI7CS8vIGJpdHMgMC0xMQorI2Vsc2UKKwkJdTMyIHBzcl9taW46MTI7CS8vIGJpdHMgMC0xMQorCQl1MzIgdW51c2VkOjIwOwkvLyBiaXRzIDEyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX1BTUl9NSU5fREVTX3QsICpQUlhETUFfUFNSX01JTl9ERVNfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyBiYXNlIGxvIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDNDCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIGJhc2UgaGkgYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNDAKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDQ0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX0ZCUl9OVU1fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKwkJdTMyIGZicl9uZGVzYzoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBmYnJfbmRlc2M6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX0ZCUl9OVU1fREVTX3QsICpQUlhETUFfRkJSX05VTV9ERVNfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAwIGF2YWlsYWJsZSBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDQ4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNEMKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgY2FjaGUgMCBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfRkJDX1JEX0lOREVYX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisJCXUzMiBmYmNfcmRpOjU7CS8vIGJpdCAwLTQKKyNlbHNlCisJCXUzMiBmYmNfcmRpOjU7CS8vIGJpdCAwLTQKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX0ZCQ19SRF9JTkRFWF90LCAqUFJYRE1BX0ZCQ19SRF9JTkRFWF90OworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDAgbWluaW11bSBkZXNjcmlwdG9yIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA1NAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9GQlJfTUlOX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIGZicl9taW46MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgZmJyX21pbjoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9GQlJfTUlOX0RFU190LCAqUFJYRE1BX0ZCUl9NSU5fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBiYXNlIGFkZHJlc3MgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDU4IC0gMHgyMDVDCisgKiBEZWZpbmVkIGVhcmxpZXIgKFJYRE1BX0ZCUl9CQVNFX0xPX3QgYW5kIFJYRE1BX0ZCUl9CQVNFX0hJX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA2MAorICogRGVmaW5lZCBlYXJsaWVyIChSWERNQV9GQlJfTlVNX0RFU190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA2NAorICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQlJfQVZBSUxfT0ZGU0VUX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA2OAorICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQlJfRlVMTF9PRkZTRVRfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciBjYWNoZSAxIHJlYWQgaW5kZXggcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDZDCisgKiBEZWZpbmVkIEVhcmxpZXIgKFJYRE1BX0ZCQ19SRF9JTkRFWF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBtaW5pbXVtIGRlc2NyaXB0b3IgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDcwCisgKiBEZWZpbmVkIEVhcmxpZXIgKFJYRE1BX0ZCUl9NSU5fREVTX3QpCisgKi8KKworLyoKKyAqIFJ4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1JYRE1BX3QgewkJCQkvLyBMb2NhdGlvbjoKKwlSWERNQV9DU1JfdCBjc3I7CQkJCS8vICAweDIwMDAKKwl1MzIgZG1hX3diX2Jhc2VfbG87CQkJCS8vICAweDIwMDQKKwl1MzIgZG1hX3diX2Jhc2VfaGk7CQkJCS8vICAweDIwMDgKKwlSWERNQV9OVU1fUEtUX0RPTkVfdCBudW1fcGt0X2RvbmU7CQkvLyAgMHgyMDBDCisJUlhETUFfTUFYX1BLVF9USU1FX3QgbWF4X3BrdF90aW1lOwkJLy8gIDB4MjAxMAorCURNQTEwV190IHJ4cV9yZF9hZGRyOwkJCQkvLyAgMHgyMDE0CisJRE1BMTBXX3QgcnhxX3JkX2FkZHJfZXh0OwkJCS8vICAweDIwMTgKKwlETUExMFdfdCByeHFfd3JfYWRkcjsJCQkJLy8gIDB4MjAxQworCXUzMiBwc3JfYmFzZV9sbzsJCQkJLy8gIDB4MjAyMAorCXUzMiBwc3JfYmFzZV9oaTsJCQkJLy8gIDB4MjAyNAorCVJYRE1BX1BTUl9OVU1fREVTX3QgcHNyX251bV9kZXM7CQkvLyAgMHgyMDI4CisJUlhETUFfUFNSX0FWQUlMX09GRlNFVF90IHBzcl9hdmFpbF9vZmZzZXQ7CS8vICAweDIwMkMKKwlSWERNQV9QU1JfRlVMTF9PRkZTRVRfdCBwc3JfZnVsbF9vZmZzZXQ7CS8vICAweDIwMzAKKwlSWERNQV9QU1JfQUNDRVNTX0lOREVYX3QgcHNyX2FjY2Vzc19pbmRleDsJLy8gIDB4MjAzNAorCVJYRE1BX1BTUl9NSU5fREVTX3QgcHNyX21pbl9kZXM7CQkvLyAgMHgyMDM4CisJdTMyIGZicjBfYmFzZV9sbzsJCQkJLy8gIDB4MjAzQworCXUzMiBmYnIwX2Jhc2VfaGk7CQkJCS8vICAweDIwNDAKKwlSWERNQV9GQlJfTlVNX0RFU190IGZicjBfbnVtX2RlczsJCS8vICAweDIwNDQKKwlETUExMFdfdCBmYnIwX2F2YWlsX29mZnNldDsJCQkvLyAgMHgyMDQ4CisJRE1BMTBXX3QgZmJyMF9mdWxsX29mZnNldDsJCQkvLyAgMHgyMDRDCisJUlhETUFfRkJDX1JEX0lOREVYX3QgZmJyMF9yZF9pbmRleDsJCS8vICAweDIwNTAKKwlSWERNQV9GQlJfTUlOX0RFU190IGZicjBfbWluX2RlczsJCS8vICAweDIwNTQKKwl1MzIgZmJyMV9iYXNlX2xvOwkJCQkvLyAgMHgyMDU4CisJdTMyIGZicjFfYmFzZV9oaTsJCQkJLy8gIDB4MjA1QworCVJYRE1BX0ZCUl9OVU1fREVTX3QgZmJyMV9udW1fZGVzOwkJLy8gIDB4MjA2MAorCURNQTEwV190IGZicjFfYXZhaWxfb2Zmc2V0OwkJCS8vICAweDIwNjQKKwlETUExMFdfdCBmYnIxX2Z1bGxfb2Zmc2V0OwkJCS8vICAweDIwNjgKKwlSWERNQV9GQkNfUkRfSU5ERVhfdCBmYnIxX3JkX2luZGV4OwkJLy8gIDB4MjA2QworCVJYRE1BX0ZCUl9NSU5fREVTX3QgZmJyMV9taW5fZGVzOwkJLy8gIDB4MjA3MAorfSBSWERNQV90LCAqUFJYRE1BX3Q7CisKKy8qIEVORCBPRiBSWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIFRYTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGNvbnRyb2wgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0NUTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDgtMzEKKwkJdTMyIGNrbHNlZ19kaWFibGU6MTsJLy8gYml0IDcKKwkJdTMyIGNrYmNudF9kaXNhYmxlOjE7CS8vIGJpdCA2CisJCXUzMiBja3NlZ251bToxOwkJLy8gYml0IDUKKwkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIGZjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgbWlmX2Rpc2FibGU6MTsJLy8gYml0IDEKKwkJdTMyIHR4bWFjX2VuOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHR4bWFjX2VuOjE7CQkvLyBiaXQgMAorCQl1MzIgbWlmX2Rpc2FibGU6MTsJLy8gYml0IDEgbWFjIGludGVyZmFjZQorCQl1MzIgbWNpZl9kaXNhYmxlOjE7CS8vIGJpdCAyIG1lbS4gY29udHIuIGludGVyZmFjZQorCQl1MzIgZmNfZGlzYWJsZToxOwkvLyBiaXQgMworCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkvLyBiaXQgNAorCQl1MzIgY2tzZWdudW06MTsJCS8vIGJpdCA1CisJCXUzMiBja2JjbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgY2tsc2VnX2RpYWJsZToxOwkvLyBiaXQgNworCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0NUTF90LCAqUFRYTUFDX0NUTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBzaGFkb3cgcG9pbnRlciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDQKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfU0hBRE9XX1BUUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6NTsJLy8gYml0cyAyNy0zMQorCQl1MzIgdHhxX3JkX3B0cjoxMTsJLy8gYml0cyAxNi0yNgorCQl1MzIgcmVzZXJ2ZWQ6NTsJCS8vIGJpdHMgMTEtMTUKKwkJdTMyIHR4cV93cl9wdHI6MTE7CS8vIGJpdHMgMC0xMAorI2Vsc2UKKwkJdTMyIHR4cV93cl9wdHI6MTE7CS8vIGJpdHMgMC0xMAorCQl1MzIgcmVzZXJ2ZWQ6NTsJCS8vIGJpdHMgMTEtMTUKKwkJdTMyIHR4cV9yZF9wdHI6MTE7CS8vIGJpdHMgMTYtMjYKKwkJdTMyIHJlc2VydmVkMjo1OwkvLyBiaXRzIDI3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX1NIQURPV19QVFJfdCwgKlBUWE1BQ19TSEFET1dfUFRSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGNvdW50IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwOAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfQ05UX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKwkJdTMyIHJlc2VydmVkOjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTMyIHR4cV91bmRlcnJ1bjo0OwkvLyBiaXRzIDQtNworCQl1MzIgZmlmb191bmRlcnJ1bjo0OwkvLyBiaXRzIDAtMworI2Vsc2UKKwkJdTMyIGZpZm9fdW5kZXJydW46NDsJLy8gYml0cyAwLTMKKwkJdTMyIHR4cV91bmRlcnJ1bjo0OwkvLyBiaXRzIDQtNworCQl1MzIgcmVzZXJ2ZWQ6NDsJCS8vIGJpdHMgOC0xMQorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19FUlJfQ05UX3QsICpQVFhNQUNfRVJSX0NOVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBtYXggZmlsbCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfTUFYX0ZJTExfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorCQl1MzIgbWF4X2ZpbGw6MTI7CS8vIGJpdHMgMC0xMQorI2Vsc2UKKwkJdTMyIG1heF9maWxsOjEyOwkvLyBiaXRzIDAtMTEKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfTUFYX0ZJTExfdCwgKlBUWE1BQ19NQVhfRklMTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBjZiBwYXJhbWV0ZXIgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDEwCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0NGX1BBUkFNX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGNmZXA6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIGNmcHQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIGNmcHQ6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgY2ZlcDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19DRl9QQVJBTV90LCAqUFRYTUFDX0NGX1BBUkFNX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4IHRlc3QgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDE0CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX1RYVEVTVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorCQl1MzIgcmVzZXJ2ZWQxOjE7CS8vIGJpdCAxNgorCQl1MzIgdHh0ZXN0X2VuOjE7CS8vIGJpdCAxNQorCQl1MzIgdW51c2VkMTo0OwkJLy8gYml0cyAxMS0xNAorCQl1MzIgdHhxdGVzdF9wdHI6MTE7CS8vIGJpdHMgMC0xMQorI2Vsc2UKKwkJdTMyIHR4cXRlc3RfcHRyOjExOwkvLyBiaXRzIDAtMTAKKwkJdTMyIHVudXNlZDE6NDsJCS8vIGJpdHMgMTEtMTQKKwkJdTMyIHR4dGVzdF9lbjoxOwkvLyBiaXQgMTUKKwkJdTMyIHJlc2VydmVkMToxOwkvLyBiaXQgMTYKKwkJdTMyIHVudXNlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX1RYVEVTVF90LCAqUFRYTUFDX1RYVEVTVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBlcnJvciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMTgKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBjdHJsMl9lcnI6MTsJLy8gYml0IDUKKwkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiBsc2VnX2VycjoxOwkJLy8gYml0IDIKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAorCQl1MzIgc2VnbnVtX2VycjoxOwkvLyBiaXQgMQorCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKKwkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAorCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvLyBiaXQgOAorCQl1MzIgdW51c2VkMjoyMzsJCS8vIGJpdHMgOS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19FUlJfdCwgKlBUWE1BQ19FUlJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgaW50ZXJydXB0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxQworICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfSU5UX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBjdHJsMl9lcnI6MTsJLy8gYml0IDUKKwkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiBsc2VnX2VycjoxOwkJLy8gYml0IDIKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAorCQl1MzIgc2VnbnVtX2VycjoxOwkvLyBiaXQgMQorCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKKwkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAorCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvLyBiaXQgOAorCQl1MzIgdW51c2VkMjoyMzsJCS8vIGJpdHMgOS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19FUlJfSU5UX3QsICpQVFhNQUNfRVJSX0lOVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBlcnJvciBpbnRlcnJ1cHQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDIwCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0NQX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCisJCXUzMiBicF9yZXE6MTsJCS8vIGJpdCAxCisJCXUzMiBicF94b254b2ZmOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgYnBfeG9ueG9mZjoxOwkvLyBiaXQgMAorCQl1MzIgYnBfcmVxOjE7CQkvLyBiaXQgMQorCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0JQX0NUUkxfdCwgKlBUWE1BQ19CUF9DVFJMX3Q7CisKKy8qCisgKiBUeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9UWE1BQ190IHsJCS8vIExvY2F0aW9uOgorCVRYTUFDX0NUTF90IGN0bDsJCS8vICAweDMwMDAKKwlUWE1BQ19TSEFET1dfUFRSX3Qgc2hhZG93X3B0cjsJLy8gIDB4MzAwNAorCVRYTUFDX0VSUl9DTlRfdCBlcnJfY250OwkvLyAgMHgzMDA4CisJVFhNQUNfTUFYX0ZJTExfdCBtYXhfZmlsbDsJLy8gIDB4MzAwQworCVRYTUFDX0NGX1BBUkFNX3QgY2ZfcGFyYW07CS8vICAweDMwMTAKKwlUWE1BQ19UWFRFU1RfdCB0eF90ZXN0OwkJLy8gIDB4MzAxNAorCVRYTUFDX0VSUl90IGVycjsJCS8vICAweDMwMTgKKwlUWE1BQ19FUlJfSU5UX3QgZXJyX2ludDsJLy8gIDB4MzAxQworCVRYTUFDX0JQX0NUUkxfdCBicF9jdHJsOwkvLyAgMHgzMDIwCit9IFRYTUFDX3QsICpQVFhNQUNfdDsKKworLyogRU5EIE9GIFRYTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qIFNUQVJUIE9GIFJYTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4bWFjIGNvbnRyb2wgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKwkJdTMyIHJ4bWFjX2ludF9kaXNhYmxlOjE7CS8vIGJpdCA2CisJCXUzMiBhc3luY19kaXNhYmxlOjE7CQkvLyBiaXQgNQorCQl1MzIgbWlmX2Rpc2FibGU6MTsJCS8vIGJpdCA0CisJCXUzMiB3b2xfZGlzYWJsZToxOwkJLy8gYml0IDMKKwkJdTMyIHBrdF9maWx0ZXJfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgbWNpZl9kaXNhYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgcnhtYWNfZW46MTsJCQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHJ4bWFjX2VuOjE7CQkJLy8gYml0IDAKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHBrdF9maWx0ZXJfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgd29sX2Rpc2FibGU6MTsJCS8vIGJpdCAzCisJCXUzMiBtaWZfZGlzYWJsZToxOwkJLy8gYml0IDQKKwkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJCS8vIGJpdCA1CisJCXUzMiByeG1hY19pbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfQ1RSTF90LCAqUFJYTUFDX0NUUkxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gQ29udHJvbCBhbmQgQ1JDIDAgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DVExfQ1JDMF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBjcmMwOjE2OwkJLy8gYml0cyAxNi0zMQorCQl1MzIgcmVzZXJ2ZTo0OwkJLy8gYml0cyAxMi0xNQorCQl1MzIgaWdub3JlX3BwOjE7CS8vIGJpdCAxMQorCQl1MzIgaWdub3JlX21wOjE7CS8vIGJpdCAxMAorCQl1MzIgY2xyX2ludHI6MTsJCS8vIGJpdCA5CisJCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLy8gYml0IDgKKwkJdTMyIGlnbm9yZV91bmk6MTsJLy8gYml0IDcKKwkJdTMyIGlnbm9yZV9tdWx0aToxOwkvLyBiaXQgNgorCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8vIGJpdCA1CisJCXUzMiB2YWxpZF9jcmM0OjE7CS8vIGJpdCA0CisJCXUzMiB2YWxpZF9jcmMzOjE7CS8vIGJpdCAzCisJCXUzMiB2YWxpZF9jcmMyOjE7CS8vIGJpdCAyCisJCXUzMiB2YWxpZF9jcmMxOjE7CS8vIGJpdCAxCisJCXUzMiB2YWxpZF9jcmMwOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdmFsaWRfY3JjMDoxOwkvLyBiaXQgMAorCQl1MzIgdmFsaWRfY3JjMToxOwkvLyBiaXQgMQorCQl1MzIgdmFsaWRfY3JjMjoxOwkvLyBiaXQgMgorCQl1MzIgdmFsaWRfY3JjMzoxOwkvLyBiaXQgMworCQl1MzIgdmFsaWRfY3JjNDoxOwkvLyBiaXQgNAorCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8vIGJpdCA1CisJCXUzMiBpZ25vcmVfbXVsdGk6MTsJLy8gYml0IDYKKwkJdTMyIGlnbm9yZV91bmk6MTsJLy8gYml0IDcKKwkJdTMyIGlnbm9yZV9saW5rX2NoZzoxOwkvLyBiaXQgOAorCQl1MzIgY2xyX2ludHI6MTsJCS8vIGJpdCA5CisJCXUzMiBpZ25vcmVfbXA6MTsJLy8gYml0IDEwCisJCXUzMiBpZ25vcmVfcHA6MTsJLy8gYml0IDExCisJCXUzMiByZXNlcnZlOjQ7CQkvLyBiaXRzIDEyLTE1CisJCXUzMiBjcmMwOjE2OwkJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfQ1RMX0NSQzBfdCwgKlBSWE1BQ19XT0xfQ1RMX0NSQzBfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgQ1JDIDEgYW5kIENSQyAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwOAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1JDMTJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY3JjMjoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgY3JjMToxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgY3JjMToxNjsJLy8gYml0cyAwLTE1CisJCXUzMiBjcmMyOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9DUkMxMl90LCAqUFJYTUFDX1dPTF9DUkMxMl90OworCisvKgorICogc3RydWN0dXJlIGZvciBDUkMgMyBhbmQgQ1JDIDQgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DUkMzNF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBjcmM0OjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBjcmMzOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBjcmMzOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIGNyYzQ6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX0NSQzM0X3QsICpQUlhNQUNfV09MX0NSQzM0X3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIFNvdXJjZSBBZGRyZXNzIExvIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxMAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfU0FfTE9fdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgc2EzOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIHNhNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBzYTU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBzYTY6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBzYTY6ODsJLy8gYml0cyAwLTcKKwkJdTMyIHNhNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIHNhNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBzYTM6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfU0FfTE9fdCwgKlBSWE1BQ19XT0xfU0FfTE9fdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gU291cmNlIEFkZHJlc3MgSGkgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDE0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9TQV9ISV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgc2ExOjg7CQkvLyBiaXRzIDgtMTUKKwkJdTMyIHNhMjo4OwkJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBzYTI6ODsJCS8vIGJpdHMgMC03CisJCXUzMiBzYTE6ODsJCS8vIGJpdHMgOC0xNQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX1NBX0hJX3QsICpQUlhNQUNfV09MX1NBX0hJX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIG1hc2sgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDE4IC0gMHg0MDY0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBVbmljYXN0IFBha2V0IEZpbHRlciBBZGRyZXNzIDEgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDY4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1VOSV9QRl9BRERSMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBhZGRyMV8zOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFkZHIxXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjFfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIxXzY6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBhZGRyMV82Ojg7CS8vIGJpdHMgMC03CisJCXUzMiBhZGRyMV81Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjFfNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMV8zOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfVU5JX1BGX0FERFIxX3QsICpQUlhNQUNfVU5JX1BGX0FERFIxX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFVuaWNhc3QgUGFrZXQgRmlsdGVyIEFkZHJlc3MgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwNkMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfVU5JX1BGX0FERFIyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGFkZHIyXzM6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgYWRkcjJfNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMl81Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjJfNjo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIGFkZHIyXzY6ODsJLy8gYml0cyAwLTcKKwkJdTMyIGFkZHIyXzU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMl80Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIyXzM6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19VTklfUEZfQUREUjJfdCwgKlBSWE1BQ19VTklfUEZfQUREUjJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVW5pY2FzdCBQYWtldCBGaWx0ZXIgQWRkcmVzcyAxICYgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwNzAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfVU5JX1BGX0FERFIzX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGFkZHIyXzE6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgYWRkcjJfMjo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMV8xOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjFfMjo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIGFkZHIxXzI6ODsJLy8gYml0cyAwLTcKKwkJdTMyIGFkZHIxXzE6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMl8yOjg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIyXzE6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19VTklfUEZfQUREUjNfdCwgKlBSWE1BQ19VTklfUEZfQUREUjNfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTXVsdGljYXN0IEhhc2ggcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDc0IC0gMHg0MDgwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBQYWNrZXQgRmlsdGVyIENvbnRyb2wgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDg0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1BGX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjo5OwkJLy8gYml0cyAyMy0zMQorCQl1MzIgbWluX3BrdF9zaXplOjc7CS8vIGJpdHMgMTYtMjIKKwkJdTMyIHVudXNlZDE6MTI7CQkvLyBiaXRzIDQtMTUKKwkJdTMyIGZpbHRlcl9mcmFnX2VuOjE7CS8vIGJpdCAzCisJCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8vIGJpdCAyCisJCXUzMiBmaWx0ZXJfbXVsdGlfZW46MTsJLy8gYml0IDEKKwkJdTMyIGZpbHRlcl9icm9hZF9lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGZpbHRlcl9icm9hZF9lbjoxOwkvLyBiaXQgMAorCQl1MzIgZmlsdGVyX211bHRpX2VuOjE7CS8vIGJpdCAxCisJCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8vIGJpdCAyCisJCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvLyBiaXQgMworCQl1MzIgdW51c2VkMToxMjsJCS8vIGJpdHMgNC0xNQorCQl1MzIgbWluX3BrdF9zaXplOjc7CS8vIGJpdHMgMTYtMjIKKwkJdTMyIHVudXNlZDI6OTsJCS8vIGJpdHMgMjMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfUEZfQ1RSTF90LCAqUFJYTUFDX1BGX0NUUkxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlIENvbnRyb2wgTWF4IFNlZ21lbnQgcmVnIGluIHJ4bWFjCisgKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDQwODgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIG1heF9zaXplOjg7CS8vIGJpdHMgMi05CisJCXUzMiBmY19lbjoxOwkvLyBiaXQgMQorCQl1MzIgc2VnX2VuOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgc2VnX2VuOjE7CS8vIGJpdCAwCisJCXUzMiBmY19lbjoxOwkvLyBiaXQgMQorCQl1MzIgbWF4X3NpemU6ODsJLy8gYml0cyAyLTkKKwkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QsICpQUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlIFdhdGVyIE1hcmsgcmVnIGluIHJ4bWFjIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOEMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjo2OwkvLyBiaXRzIDI2LTMxCisJCXUzMiBtYXJrX2hpOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQorCQl1MzIgbWFya19sbzoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBtYXJrX2xvOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIG1hcmtfaGk6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIHJlc2VydmVkMjo2OwkvLyBiaXRzIDI2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX01DSUZfV0FURVJfTUFSS190LCAqUFJYTUFDX01DSUZfV0FURVJfTUFSS190OworCisvKgorICogc3RydWN0dXJlIGZvciBSeCBRdWV1ZSBEaWFsb2cgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5MAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19SWFFfRElBR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorCQl1MzIgcmRfcHRyOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQorCQl1MzIgd3JfcHRyOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHdyX3B0cjoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CisJCXUzMiByZF9wdHI6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIHJlc2VydmVkMjo2OwkvLyBiaXRzIDI2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1JYUV9ESUFHX3QsICpQUlhNQUNfUlhRX0RJQUdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3Igc3BhY2UgYXZhaWxpYWJsZSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDk0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1NQQUNFX0FWQUlMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjoxNTsJCS8vIGJpdHMgMTctMzEKKwkJdTMyIHNwYWNlX2F2YWlsX2VuOjE7CS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvLyBiaXRzIDEwLTE1CisJCXUzMiBzcGFjZV9hdmFpbDoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBzcGFjZV9hdmFpbDoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MzIgc3BhY2VfYXZhaWxfZW46MTsJLy8gYml0IDE2CisJCXUzMiByZXNlcnZlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1NQQUNFX0FWQUlMX3QsICpQUlhNQUNfU1BBQ0VfQVZBSUxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2UgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5OAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19NSUZfQ1RMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmU6MTQ7CQkvLyBiaXRzIDE4LTMxCisJCXUzMiBkcm9wX3BrdF9lbjoxOwkJLy8gYml0IDE3CisJCXUzMiBkcm9wX3BrdF9tYXNrOjE3OwkvLyBiaXRzIDAtMTYKKyNlbHNlCisJCXUzMiBkcm9wX3BrdF9tYXNrOjE3OwkvLyBiaXRzIDAtMTYKKwkJdTMyIGRyb3BfcGt0X2VuOjE7CQkvLyBiaXQgMTcKKwkJdTMyIHJlc2VydmU6MTQ7CQkvLyBiaXRzIDE4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX01JRl9DVExfdCwgKlBSWE1BQ19NSUZfQ1RMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIEVycm9yIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOUMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfRVJST1JfUkVHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmU6Mjg7CS8vIGJpdHMgNC0zMQorCQl1MzIgbWlmOjE7CQkvLyBiaXQgMworCQl1MzIgYXN5bmM6MTsJLy8gYml0IDIKKwkJdTMyIHBrdF9maWx0ZXI6MTsJLy8gYml0IDEKKwkJdTMyIG1jaWY6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBtY2lmOjE7CS8vIGJpdCAwCisJCXUzMiBwa3RfZmlsdGVyOjE7CS8vIGJpdCAxCisJCXUzMiBhc3luYzoxOwkvLyBiaXQgMgorCQl1MzIgbWlmOjE7CQkvLyBiaXQgMworCQl1MzIgcmVzZXJ2ZToyODsJLy8gYml0cyA0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX0VSUk9SX1JFR190LCAqUFJYTUFDX0VSUk9SX1JFR190OworCisvKgorICogUnggTUFDIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfUlhNQUNfdCB7CQkJCS8vIExvY2F0aW9uOgorCVJYTUFDX0NUUkxfdCBjdHJsOwkJCQkvLyAgMHg0MDAwCisJUlhNQUNfV09MX0NUTF9DUkMwX3QgY3JjMDsJCQkvLyAgMHg0MDA0CisJUlhNQUNfV09MX0NSQzEyX3QgY3JjMTI7CQkJLy8gIDB4NDAwOAorCVJYTUFDX1dPTF9DUkMzNF90IGNyYzM0OwkJCS8vICAweDQwMEMKKwlSWE1BQ19XT0xfU0FfTE9fdCBzYV9sbzsJCQkvLyAgMHg0MDEwCisJUlhNQUNfV09MX1NBX0hJX3Qgc2FfaGk7CQkJLy8gIDB4NDAxNAorCXUzMiBtYXNrMF93b3JkMDsJCQkJLy8gIDB4NDAxOAorCXUzMiBtYXNrMF93b3JkMTsJCQkJLy8gIDB4NDAxQworCXUzMiBtYXNrMF93b3JkMjsJCQkJLy8gIDB4NDAyMAorCXUzMiBtYXNrMF93b3JkMzsJCQkJLy8gIDB4NDAyNAorCXUzMiBtYXNrMV93b3JkMDsJCQkJLy8gIDB4NDAyOAorCXUzMiBtYXNrMV93b3JkMTsJCQkJLy8gIDB4NDAyQworCXUzMiBtYXNrMV93b3JkMjsJCQkJLy8gIDB4NDAzMAorCXUzMiBtYXNrMV93b3JkMzsJCQkJLy8gIDB4NDAzNAorCXUzMiBtYXNrMl93b3JkMDsJCQkJLy8gIDB4NDAzOAorCXUzMiBtYXNrMl93b3JkMTsJCQkJLy8gIDB4NDAzQworCXUzMiBtYXNrMl93b3JkMjsJCQkJLy8gIDB4NDA0MAorCXUzMiBtYXNrMl93b3JkMzsJCQkJLy8gIDB4NDA0NAorCXUzMiBtYXNrM193b3JkMDsJCQkJLy8gIDB4NDA0OAorCXUzMiBtYXNrM193b3JkMTsJCQkJLy8gIDB4NDA0QworCXUzMiBtYXNrM193b3JkMjsJCQkJLy8gIDB4NDA1MAorCXUzMiBtYXNrM193b3JkMzsJCQkJLy8gIDB4NDA1NAorCXUzMiBtYXNrNF93b3JkMDsJCQkJLy8gIDB4NDA1OAorCXUzMiBtYXNrNF93b3JkMTsJCQkJLy8gIDB4NDA1QworCXUzMiBtYXNrNF93b3JkMjsJCQkJLy8gIDB4NDA2MAorCXUzMiBtYXNrNF93b3JkMzsJCQkJLy8gIDB4NDA2NAorCVJYTUFDX1VOSV9QRl9BRERSMV90IHVuaV9wZl9hZGRyMTsJCS8vICAweDQwNjgKKwlSWE1BQ19VTklfUEZfQUREUjJfdCB1bmlfcGZfYWRkcjI7CQkvLyAgMHg0MDZDCisJUlhNQUNfVU5JX1BGX0FERFIzX3QgdW5pX3BmX2FkZHIzOwkJLy8gIDB4NDA3MAorCXUzMiBtdWx0aV9oYXNoMTsJCQkJLy8gIDB4NDA3NAorCXUzMiBtdWx0aV9oYXNoMjsJCQkJLy8gIDB4NDA3OAorCXUzMiBtdWx0aV9oYXNoMzsJCQkJLy8gIDB4NDA3QworCXUzMiBtdWx0aV9oYXNoNDsJCQkJLy8gIDB4NDA4MAorCVJYTUFDX1BGX0NUUkxfdCBwZl9jdHJsOwkJCS8vICAweDQwODQKKwlSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IG1jaWZfY3RybF9tYXhfc2VnOwkvLyAgMHg0MDg4CisJUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QgbWNpZl93YXRlcl9tYXJrOwkvLyAgMHg0MDhDCisJUlhNQUNfUlhRX0RJQUdfdCByeHFfZGlhZzsJCQkvLyAgMHg0MDkwCisJUlhNQUNfU1BBQ0VfQVZBSUxfdCBzcGFjZV9hdmFpbDsJCS8vICAweDQwOTQKKworCVJYTUFDX01JRl9DVExfdCBtaWZfY3RybDsJCQkvLyAgMHg0MDk4CisJUlhNQUNfRVJST1JfUkVHX3QgZXJyX3JlZzsJCQkvLyAgMHg0MDlDCit9IFJYTUFDX3QsICpQUlhNQUNfdDsKKworLyogRU5EIE9GIFRYTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyYXRpb24gIzEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0NGRzFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgc29mdF9yZXNldDoxOwkJLy8gYml0IDMxCisJCXUzMiBzaW1fcmVzZXQ6MTsJCS8vIGJpdCAzMAorCQl1MzIgcmVzZXJ2ZWQzOjEwOwkJLy8gYml0cyAyMC0yOQorCQl1MzIgcmVzZXRfcnhfbWM6MTsJCS8vIGJpdCAxOQorCQl1MzIgcmVzZXRfdHhfbWM6MTsJCS8vIGJpdCAxOAorCQl1MzIgcmVzZXRfcnhfZnVuOjE7CS8vIGJpdCAxNworCQl1MzIgcmVzZXRfdHhfZnVuOjE7CS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQyOjc7CQkvLyBiaXRzIDktMTUKKwkJdTMyIGxvb3BfYmFjazoxOwkJLy8gYml0IDgKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIHJ4X2Zsb3c6MTsJCS8vIGJpdCA1CisJCXUzMiB0eF9mbG93OjE7CQkvLyBiaXQgNAorCQl1MzIgc3luY2RfcnhfZW46MTsJCS8vIGJpdCAzCisJCXUzMiByeF9lbmFibGU6MTsJCS8vIGJpdCAyCisJCXUzMiBzeW5jZF90eF9lbjoxOwkJLy8gYml0IDEKKwkJdTMyIHR4X2VuYWJsZToxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB0eF9lbmFibGU6MTsJCS8vIGJpdCAwCisJCXUzMiBzeW5jZF90eF9lbjoxOwkJLy8gYml0IDEKKwkJdTMyIHJ4X2VuYWJsZToxOwkJLy8gYml0IDIKKwkJdTMyIHN5bmNkX3J4X2VuOjE7CQkvLyBiaXQgMworCQl1MzIgdHhfZmxvdzoxOwkJLy8gYml0IDQKKwkJdTMyIHJ4X2Zsb3c6MTsJCS8vIGJpdCA1CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBsb29wX2JhY2s6MTsJCS8vIGJpdCA4CisJCXUzMiByZXNlcnZlZDI6NzsJCS8vIGJpdHMgOS0xNQorCQl1MzIgcmVzZXRfdHhfZnVuOjE7CS8vIGJpdCAxNgorCQl1MzIgcmVzZXRfcnhfZnVuOjE7CS8vIGJpdCAxNworCQl1MzIgcmVzZXRfdHhfbWM6MTsJCS8vIGJpdCAxOAorCQl1MzIgcmVzZXRfcnhfbWM6MTsJCS8vIGJpdCAxOQorCQl1MzIgcmVzZXJ2ZWQzOjEwOwkJLy8gYml0cyAyMC0yOQorCQl1MzIgc2ltX3Jlc2V0OjE7CQkvLyBiaXQgMzAKKwkJdTMyIHNvZnRfcmVzZXQ6MTsJCS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfQ0ZHMV90LCAqUE1BQ19DRkcxX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyYXRpb24gIzIgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMDQKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0NGRzJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQzOjE2OwkJLy8gYml0cyAxNi0zMQorCQl1MzIgcHJlYW1ibGVfbGVuOjQ7CS8vIGJpdHMgMTItMTUKKwkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxMC0xMQorCQl1MzIgaWZfbW9kZToyOwkJLy8gYml0cyA4LTkKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGh1Z2VfZnJhbWU6MTsJCS8vIGJpdCA1CisJCXUzMiBsZW5fY2hlY2s6MTsJCS8vIGJpdCA0CisJCXUzMiB1bmRlZmluZWQ6MTsJCS8vIGJpdCAzCisJCXUzMiBwYWRfY3JjOjE7CQkvLyBiaXQgMgorCQl1MzIgY3JjX2VuYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIGZ1bGxfZHVwbGV4OjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGZ1bGxfZHVwbGV4OjE7CQkvLyBiaXQgMAorCQl1MzIgY3JjX2VuYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHBhZF9jcmM6MTsJCS8vIGJpdCAyCisJCXUzMiB1bmRlZmluZWQ6MTsJCS8vIGJpdCAzCisJCXUzMiBsZW5fY2hlY2s6MTsJCS8vIGJpdCA0CisJCXUzMiBodWdlX2ZyYW1lOjE7CQkvLyBiaXQgNQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgaWZfbW9kZToyOwkJLy8gYml0cyA4LTkKKwkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxMC0xMQorCQl1MzIgcHJlYW1ibGVfbGVuOjQ7CS8vIGJpdHMgMTItMTUKKwkJdTMyIHJlc2VydmVkMzoxNjsJCS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0NGRzJfdCwgKlBNQUNfQ0ZHMl90OworCisvKgorICogc3RydWN0dXJlIGZvciBJbnRlcnBhY2tldCBnYXAgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMDgKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0lQR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxOwkJLy8gYml0IDMxCisJCXUzMiBub25fQjJCX2lwZ18xOjc7CS8vIGJpdHMgMjQtMzAKKwkJdTMyIHVuZGVmaW5lZDI6MTsJCS8vIGJpdCAyMworCQl1MzIgbm9uX0IyQl9pcGdfMjo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiBtaW5faWZnX2VuZm9yY2U6ODsJLy8gYml0cyA4LTE1CisJCXUzMiB1bmRlZmluZWQxOjE7CQkvLyBiaXQgNworCQl1MzIgQjJCX2lwZzo3OwkJLy8gYml0cyAwLTYKKyNlbHNlCisJCXUzMiBCMkJfaXBnOjc7CQkvLyBiaXRzIDAtNgorCQl1MzIgdW5kZWZpbmVkMToxOwkJLy8gYml0IDcKKwkJdTMyIG1pbl9pZmdfZW5mb3JjZTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIG5vbl9CMkJfaXBnXzI6NzsJLy8gYml0cyAxNi0yMgorCQl1MzIgdW5kZWZpbmVkMjoxOwkJLy8gYml0IDIzCisJCXUzMiBub25fQjJCX2lwZ18xOjc7CS8vIGJpdHMgMjQtMzAKKwkJdTMyIHJlc2VydmVkOjE7CQkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0lQR190LCAqUE1BQ19JUEdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaGFsZiBkdXBsZXggcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0hGRFBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjg7CQkvLyBiaXRzIDI0LTMxCisJCXUzMiBhbHRfYmViX3RydW5jOjQ7CS8vIGJpdHMgMjMtMjAKKwkJdTMyIGFsdF9iZWJfZW5hYmxlOjE7CS8vIGJpdCAxOQorCQl1MzIgYnBfbm9fYmFja29mZjoxOwkvLyBiaXQgMTgKKwkJdTMyIG5vX2JhY2tvZmY6MTsJCS8vIGJpdCAxNworCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCAxNgorCQl1MzIgcmV4bWl0X21heDo0OwkJLy8gYml0cyAxMi0xNQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDEwLTExCisJCXUzMiBjb2xsX3dpbmRvdzoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBjb2xsX3dpbmRvdzoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyAxMC0xMQorCQl1MzIgcmV4bWl0X21heDo0OwkJLy8gYml0cyAxMi0xNQorCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCAxNgorCQl1MzIgbm9fYmFja29mZjoxOwkJLy8gYml0IDE3CisJCXUzMiBicF9ub19iYWNrb2ZmOjE7CS8vIGJpdCAxOAorCQl1MzIgYWx0X2JlYl9lbmFibGU6MTsJLy8gYml0IDE5CisJCXUzMiBhbHRfYmViX3RydW5jOjQ7CS8vIGJpdHMgMjMtMjAKKwkJdTMyIHJlc2VydmVkMjo4OwkJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfSEZEUF90LCAqUE1BQ19IRkRQX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1heGltdW0gRnJhbWUgTGVuZ3RoIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDEwCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19NQVhfRk1fTEVOX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBtYXhfbGVuOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBtYXhfbGVuOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19NQVhfRk1fTEVOX3QsICpQTUFDX01BWF9GTV9MRU5fdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUmVzZXJ2ZSAxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDE0IC0gMHg1MDE4CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBUZXN0IHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDFDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19URVNUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyOTsJLy8gYml0cyAzLTMxCisJCXUzMiBtYWNfdGVzdDozOwkvLyBiaXRzIDAtMgorI2Vsc2UKKwkJdTMyIG1hY190ZXN0OjM7CS8vIGJpdHMgMC0yCisJCXUzMiB1bnVzZWQ6Mjk7CS8vIGJpdHMgMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfVEVTVF90LCAqUE1BQ19URVNUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMjAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQ0ZHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2V0X21paV9tZ210OjE7CS8vIGJpdCAzMQorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDYtMzAKKwkJdTMyIHNjYW5fYXV0b19pbmNyZW10OjE7CS8vIGJpdCA1CisJCXUzMiBwcmVhbWJsZV9zdXBwcmVzczoxOwkvLyBiaXQgNAorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgbWdtdF9jbGtfcmVzZXQ6MzsJLy8gYml0cyAwLTIKKyNlbHNlCisJCXUzMiBtZ210X2Nsa19yZXNldDozOwkvLyBiaXRzIDAtMgorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgcHJlYW1ibGVfc3VwcHJlc3M6MTsJLy8gYml0IDQKKwkJdTMyIHNjYW5fYXV0b19pbmNyZW10OjE7CS8vIGJpdCA1CisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNi0zMAorCQl1MzIgcmVzZXRfbWlpX21nbXQ6MTsJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0NGR190LCAqUE1JSV9NR01UX0NGR190OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb21tYW5kIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDI0CisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0NNRF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDozMDsJLy8gYml0cyAyLTMxCisJCXUzMiBzY2FuX2N5Y2xlOjE7CS8vIGJpdCAxCisJCXUzMiByZWFkX2N5Y2xlOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcmVhZF9jeWNsZToxOwkvLyBiaXQgMAorCQl1MzIgc2Nhbl9jeWNsZToxOwkvLyBiaXQgMQorCQl1MzIgcmVzZXJ2ZWQ6MzA7CS8vIGJpdHMgMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9DTURfdCwgKlBNSUlfTUdNVF9DTURfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgQWRkcmVzcyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyOAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9BRERSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjoxOTsJLy8gYml0IDEzLTMxCisJCXUzMiBwaHlfYWRkcjo1OwkvLyBiaXRzIDgtMTIKKwkJdTMyIHJlc2VydmVkMTozOwkvLyBiaXRzIDUtNworCQl1MzIgcmVnX2FkZHI6NTsJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUzMiByZWdfYWRkcjo1OwkvLyBiaXRzIDAtNAorCQl1MzIgcmVzZXJ2ZWQxOjM7CS8vIGJpdHMgNS03CisJCXUzMiBwaHlfYWRkcjo1OwkvLyBiaXRzIDgtMTIKKwkJdTMyIHJlc2VydmVkMjoxOTsJLy8gYml0IDEzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0FERFJfdCwgKlBNSUlfTUdNVF9BRERSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMkMKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgcGh5X2N0cmw6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHBoeV9jdHJsOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0NUUkxfdCwgKlBNSUlfTUdNVF9DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IFN0YXR1cyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzMAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9TVEFUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBwaHlfc3RhdDoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgcGh5X3N0YXQ6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfU1RBVF90LCAqUE1JSV9NR01UX1NUQVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9ycyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzNAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9JTkRJQ0FUT1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6Mjk7CS8vIGJpdHMgMy0zMQorCQl1MzIgbm90X3ZhbGlkOjE7CS8vIGJpdCAyCisJCXUzMiBzY2FubmluZzoxOwkvLyBiaXQgMQorCQl1MzIgYnVzeToxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGJ1c3k6MTsJLy8gYml0IDAKKwkJdTMyIHNjYW5uaW5nOjE7CS8vIGJpdCAxCisJCXUzMiBub3RfdmFsaWQ6MTsJLy8gYml0IDIKKwkJdTMyIHJlc2VydmVkOjI5OwkvLyBiaXRzIDMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfSU5ESUNBVE9SX3QsICpQTUlJX01HTVRfSU5ESUNBVE9SX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIEludGVyZmFjZSBDb250cm9sIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDM4CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19JRl9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2V0X2lmX21vZHVsZToxOwkvLyBiaXQgMzEKKwkJdTMyIHJlc2VydmVkNDozOwkJLy8gYml0IDI4LTMwCisJCXUzMiB0YmlfbW9kZToxOwkJLy8gYml0IDI3CisJCXUzMiBnaGRfbW9kZToxOwkJLy8gYml0IDI2CisJCXUzMiBsaGRfbW9kZToxOwkJLy8gYml0IDI1CisJCXUzMiBwaHlfbW9kZToxOwkJLy8gYml0IDI0CisJCXUzMiByZXNldF9wZXJfbWlpOjE7CS8vIGJpdCAyMworCQl1MzIgcmVzZXJ2ZWQzOjY7CQkvLyBiaXRzIDE3LTIyCisJCXUzMiBzcGVlZDoxOwkJLy8gYml0IDE2CisJCXUzMiByZXNldF9wZTEwMHg6MTsJLy8gYml0IDE1CisJCXUzMiByZXNlcnZlZDI6NDsJCS8vIGJpdHMgMTEtMTQKKwkJdTMyIGZvcmNlX3F1aWV0OjE7CQkvLyBiaXQgMTAKKwkJdTMyIG5vX2NpcGhlcjoxOwkJLy8gYml0IDkKKwkJdTMyIGRpc2FibGVfbGlua19mYWlsOjE7CS8vIGJpdCA4CisJCXUzMiByZXNldF9ncHNpOjE7CQkvLyBiaXQgNworCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvLyBiaXRzIDEtNgorCQl1MzIgZW5hYl9qYWJfcHJvdGVjdDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGVuYWJfamFiX3Byb3RlY3Q6MTsJLy8gYml0IDAKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxLTYKKwkJdTMyIHJlc2V0X2dwc2k6MTsJCS8vIGJpdCA3CisJCXUzMiBkaXNhYmxlX2xpbmtfZmFpbDoxOwkvLyBiaXQgOAorCQl1MzIgbm9fY2lwaGVyOjE7CQkvLyBiaXQgOQorCQl1MzIgZm9yY2VfcXVpZXQ6MTsJCS8vIGJpdCAxMAorCQl1MzIgcmVzZXJ2ZWQyOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiByZXNldF9wZTEwMHg6MTsJLy8gYml0IDE1CisJCXUzMiBzcGVlZDoxOwkJLy8gYml0IDE2CisJCXUzMiByZXNlcnZlZDM6NjsJCS8vIGJpdHMgMTctMjIKKwkJdTMyIHJlc2V0X3Blcl9taWk6MTsJLy8gYml0IDIzCisJCXUzMiBwaHlfbW9kZToxOwkJLy8gYml0IDI0CisJCXUzMiBsaGRfbW9kZToxOwkJLy8gYml0IDI1CisJCXUzMiBnaGRfbW9kZToxOwkJLy8gYml0IDI2CisJCXUzMiB0YmlfbW9kZToxOwkJLy8gYml0IDI3CisJCXUzMiByZXNlcnZlZDQ6MzsJCS8vIGJpdCAyOC0zMAorCQl1MzIgcmVzZXRfaWZfbW9kdWxlOjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfSUZfQ1RSTF90LCAqUE1BQ19JRl9DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIEludGVyZmFjZSBTdGF0dXMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwM0MKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0lGX1NUQVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDkKKwkJdTMyIGNsYXNoOjE7CQkvLyBiaXQgOAorCQl1MzIgcGh5X2phYmJlcjoxOwkJLy8gYml0IDcKKwkJdTMyIHBoeV9saW5rX29rOjE7CQkvLyBiaXQgNgorCQl1MzIgcGh5X2Z1bGxfZHVwbGV4OjE7CS8vIGJpdCA1CisJCXUzMiBwaHlfc3BlZWQ6MTsJCS8vIGJpdCA0CisJCXUzMiBwZTEwMHhfbGlua19mYWlsOjE7CS8vIGJpdCAzCisJCXUzMiBwZTEwdF9sb3NzX2NhcnJpZToxOwkvLyBiaXQgMgorCQl1MzIgcGUxMHRfc3FlX2Vycm9yOjE7CS8vIGJpdCAxCisJCXUzMiBwZTEwdF9qYWJiZXI6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBwZTEwdF9qYWJiZXI6MTsJLy8gYml0IDAKKwkJdTMyIHBlMTB0X3NxZV9lcnJvcjoxOwkvLyBiaXQgMQorCQl1MzIgcGUxMHRfbG9zc19jYXJyaWU6MTsJLy8gYml0IDIKKwkJdTMyIHBlMTAweF9saW5rX2ZhaWw6MTsJLy8gYml0IDMKKwkJdTMyIHBoeV9zcGVlZDoxOwkJLy8gYml0IDQKKwkJdTMyIHBoeV9mdWxsX2R1cGxleDoxOwkvLyBiaXQgNQorCQl1MzIgcGh5X2xpbmtfb2s6MTsJCS8vIGJpdCA2CisJCXUzMiBwaHlfamFiYmVyOjE7CQkvLyBiaXQgNworCQl1MzIgY2xhc2g6MTsJCS8vIGJpdCA4CisJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDkKKwkJdTMyIHJlc2VydmVkOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfSUZfU1RBVF90LCAqUE1BQ19JRl9TVEFUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1hYyBTdGF0aW9uIEFkZHJlc3MsIFBhcnQgMSByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTA0MAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVElPTl9BRERSMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBPY3RldDY6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgT2N0ZXQ1Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIE9jdGV0NDo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIE9jdGV0Mzo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIE9jdGV0Mzo4OwkvLyBiaXRzIDAtNworCQl1MzIgT2N0ZXQ0Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgT2N0ZXQ1Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIE9jdGV0Njo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19TVEFUSU9OX0FERFIxX3QsICpQTUFDX1NUQVRJT05fQUREUjFfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFjIFN0YXRpb24gQWRkcmVzcywgUGFydCAyIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDQ0CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19TVEFUSU9OX0FERFIyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIE9jdGV0Mjo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBPY3RldDE6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXQgMC0xNQorCQl1MzIgT2N0ZXQxOjg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIE9jdGV0Mjo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19TVEFUSU9OX0FERFIyX3QsICpQTUFDX1NUQVRJT05fQUREUjJfdDsKKworLyoKKyAqIE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX01BQ190IHsJCQkJCS8vIExvY2F0aW9uOgorCU1BQ19DRkcxX3QgY2ZnMTsJCQkJLy8gIDB4NTAwMAorCU1BQ19DRkcyX3QgY2ZnMjsJCQkJLy8gIDB4NTAwNAorCU1BQ19JUEdfdCBpcGc7CQkJCQkvLyAgMHg1MDA4CisJTUFDX0hGRFBfdCBoZmRwOwkJCQkvLyAgMHg1MDBDCisJTUFDX01BWF9GTV9MRU5fdCBtYXhfZm1fbGVuOwkJCS8vICAweDUwMTAKKwl1MzIgcnN2MTsJCQkJCS8vICAweDUwMTQKKwl1MzIgcnN2MjsJCQkJCS8vICAweDUwMTgKKwlNQUNfVEVTVF90IG1hY190ZXN0OwkJCQkvLyAgMHg1MDFDCisJTUlJX01HTVRfQ0ZHX3QgbWlpX21nbXRfY2ZnOwkJCS8vICAweDUwMjAKKwlNSUlfTUdNVF9DTURfdCBtaWlfbWdtdF9jbWQ7CQkJLy8gIDB4NTAyNAorCU1JSV9NR01UX0FERFJfdCBtaWlfbWdtdF9hZGRyOwkJCS8vICAweDUwMjgKKwlNSUlfTUdNVF9DVFJMX3QgbWlpX21nbXRfY3RybDsJCQkvLyAgMHg1MDJDCisJTUlJX01HTVRfU1RBVF90IG1paV9tZ210X3N0YXQ7CQkJLy8gIDB4NTAzMAorCU1JSV9NR01UX0lORElDQVRPUl90IG1paV9tZ210X2luZGljYXRvcjsJLy8gIDB4NTAzNAorCU1BQ19JRl9DVFJMX3QgaWZfY3RybDsJCQkJLy8gIDB4NTAzOAorCU1BQ19JRl9TVEFUX3QgaWZfc3RhdDsJCQkJLy8gIDB4NTAzQworCU1BQ19TVEFUSU9OX0FERFIxX3Qgc3RhdGlvbl9hZGRyXzE7CQkvLyAgMHg1MDQwCisJTUFDX1NUQVRJT05fQUREUjJfdCBzdGF0aW9uX2FkZHJfMjsJCS8vICAweDUwNDQKK30gTUFDX3QsICpQTUFDX3Q7CisKKy8qIEVORCBPRiBNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyogU1RBUlQgT0YgTUFDIFNUQVQgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgQ2FycnkgUmVnaXN0ZXIgT25lIGFuZCBpdCdzIE1hc2sgUmVnaXN0ZXIgcmVnIGxvY2F0ZWQgaW4gbWFjCisgKiBzdGF0IGFkZHJlc3MgbWFwIGFkZHJlc3MgMHg2MTMwIGFuZCAweDYxMzguCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19TVEFUX1JFR18xX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHRyNjQ6MTsJLy8gYml0IDMxCisJCXUzMiB0cjEyNzoxOwkvLyBiaXQgMzAKKwkJdTMyIHRyMjU1OjE7CS8vIGJpdCAyOQorCQl1MzIgdHI1MTE6MTsJLy8gYml0IDI4CisJCXUzMiB0cjFrOjE7CS8vIGJpdCAyNworCQl1MzIgdHJtYXg6MTsJLy8gYml0IDI2CisJCXUzMiB0cm1ndjoxOwkvLyBiaXQgMjUKKwkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDE3LTI0CisJCXUzMiByYnl0OjE7CS8vIGJpdCAxNgorCQl1MzIgcnBrdDoxOwkvLyBiaXQgMTUKKwkJdTMyIHJmY3M6MTsJLy8gYml0IDE0CisJCXUzMiBybWNhOjE7CS8vIGJpdCAxMworCQl1MzIgcmJjYToxOwkvLyBiaXQgMTIKKwkJdTMyIHJ4Y2Y6MTsJLy8gYml0IDExCisJCXUzMiByeHBmOjE7CS8vIGJpdCAxMAorCQl1MzIgcnh1bzoxOwkvLyBiaXQgOQorCQl1MzIgcmFsbjoxOwkvLyBiaXQgOAorCQl1MzIgcmZscjoxOwkvLyBiaXQgNworCQl1MzIgcmNkZToxOwkvLyBiaXQgNgorCQl1MzIgcmNzZToxOwkvLyBiaXQgNQorCQl1MzIgcnVuZDoxOwkvLyBiaXQgNAorCQl1MzIgcm92cjoxOwkvLyBiaXQgMworCQl1MzIgcmZyZzoxOwkvLyBiaXQgMgorCQl1MzIgcmpicjoxOwkvLyBiaXQgMQorCQl1MzIgcmRycDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHJkcnA6MTsJLy8gYml0IDAKKwkJdTMyIHJqYnI6MTsJLy8gYml0IDEKKwkJdTMyIHJmcmc6MTsJLy8gYml0IDIKKwkJdTMyIHJvdnI6MTsJLy8gYml0IDMKKwkJdTMyIHJ1bmQ6MTsJLy8gYml0IDQKKwkJdTMyIHJjc2U6MTsJLy8gYml0IDUKKwkJdTMyIHJjZGU6MTsJLy8gYml0IDYKKwkJdTMyIHJmbHI6MTsJLy8gYml0IDcKKwkJdTMyIHJhbG46MTsJLy8gYml0IDgKKwkJdTMyIHJ4dW86MTsJLy8gYml0IDkKKwkJdTMyIHJ4cGY6MTsJLy8gYml0IDEwCisJCXUzMiByeGNmOjE7CS8vIGJpdCAxMQorCQl1MzIgcmJjYToxOwkvLyBiaXQgMTIKKwkJdTMyIHJtY2E6MTsJLy8gYml0IDEzCisJCXUzMiByZmNzOjE7CS8vIGJpdCAxNAorCQl1MzIgcnBrdDoxOwkvLyBiaXQgMTUKKwkJdTMyIHJieXQ6MTsJLy8gYml0IDE2CisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAxNy0yNAorCQl1MzIgdHJtZ3Y6MTsJLy8gYml0IDI1CisJCXUzMiB0cm1heDoxOwkvLyBiaXQgMjYKKwkJdTMyIHRyMWs6MTsJLy8gYml0IDI3CisJCXUzMiB0cjUxMToxOwkvLyBiaXQgMjgKKwkJdTMyIHRyMjU1OjE7CS8vIGJpdCAyOQorCQl1MzIgdHIxMjc6MTsJLy8gYml0IDMwCisJCXUzMiB0cjY0OjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVF9SRUdfMV90LCAqUE1BQ19TVEFUX1JFR18xX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENhcnJ5IFJlZ2lzdGVyIFR3byBNYXNrIFJlZ2lzdGVyIHJlZyBpbiBtYWMgc3RhdCBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDYxM0MKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRfUkVHXzJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjEyOwkvLyBiaXQgMjAtMzEKKwkJdTMyIHRqYnI6MTsJLy8gYml0IDE5CisJCXUzMiB0ZmNzOjE7CS8vIGJpdCAxOAorCQl1MzIgdHhjZjoxOwkvLyBiaXQgMTcKKwkJdTMyIHRvdnI6MTsJLy8gYml0IDE2CisJCXUzMiB0dW5kOjE7CS8vIGJpdCAxNQorCQl1MzIgdGZyZzoxOwkvLyBiaXQgMTQKKwkJdTMyIHRieXQ6MTsJLy8gYml0IDEzCisJCXUzMiB0cGt0OjE7CS8vIGJpdCAxMgorCQl1MzIgdG1jYToxOwkvLyBiaXQgMTEKKwkJdTMyIHRiY2E6MTsJLy8gYml0IDEwCisJCXUzMiB0eHBmOjE7CS8vIGJpdCA5CisJCXUzMiB0ZGZyOjE7CS8vIGJpdCA4CisJCXUzMiB0ZWRmOjE7CS8vIGJpdCA3CisJCXUzMiB0c2NsOjE7CS8vIGJpdCA2CisJCXUzMiB0bWNsOjE7CS8vIGJpdCA1CisJCXUzMiB0bGNsOjE7CS8vIGJpdCA0CisJCXUzMiB0eGNsOjE7CS8vIGJpdCAzCisJCXUzMiB0bmNsOjE7CS8vIGJpdCAyCisJCXUzMiB0cGZoOjE7CS8vIGJpdCAxCisJCXUzMiB0ZHJwOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdGRycDoxOwkvLyBiaXQgMAorCQl1MzIgdHBmaDoxOwkvLyBiaXQgMQorCQl1MzIgdG5jbDoxOwkvLyBiaXQgMgorCQl1MzIgdHhjbDoxOwkvLyBiaXQgMworCQl1MzIgdGxjbDoxOwkvLyBiaXQgNAorCQl1MzIgdG1jbDoxOwkvLyBiaXQgNQorCQl1MzIgdHNjbDoxOwkvLyBiaXQgNgorCQl1MzIgdGVkZjoxOwkvLyBiaXQgNworCQl1MzIgdGRmcjoxOwkvLyBiaXQgOAorCQl1MzIgdHhwZjoxOwkvLyBiaXQgOQorCQl1MzIgdGJjYToxOwkvLyBiaXQgMTAKKwkJdTMyIHRtY2E6MTsJLy8gYml0IDExCisJCXUzMiB0cGt0OjE7CS8vIGJpdCAxMgorCQl1MzIgdGJ5dDoxOwkvLyBiaXQgMTMKKwkJdTMyIHRmcmc6MTsJLy8gYml0IDE0CisJCXUzMiB0dW5kOjE7CS8vIGJpdCAxNQorCQl1MzIgdG92cjoxOwkvLyBiaXQgMTYKKwkJdTMyIHR4Y2Y6MTsJLy8gYml0IDE3CisJCXUzMiB0ZmNzOjE7CS8vIGJpdCAxOAorCQl1MzIgdGpicjoxOwkvLyBiaXQgMTkKKwkJdTMyIHVudXNlZDoxMjsJLy8gYml0IDIwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19TVEFUX1JFR18yX3QsICpQTUFDX1NUQVRfUkVHXzJfdDsKKworLyoKKyAqIE1BQyBTVEFUUyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX01BQ19TVEFUX3QgewkJLy8gTG9jYXRpb246CisJdTMyIHBhZFszMl07CQkvLyAgMHg2MDAwIC0gNjA3QworCisJLy8gVHgvUnggMC02NCBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFI2NDsJCQkvLyAgMHg2MDgwCisKKwkvLyBUeC9SeCA2NS0xMjcgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSMTI3OwkJCS8vICAweDYwODQKKworCS8vIFR4L1J4IDEyOC0yNTUgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSMjU1OwkJCS8vICAweDYwODgKKworCS8vIFR4L1J4IDI1Ni01MTEgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSNTExOwkJCS8vICAweDYwOEMKKworCS8vIFR4L1J4IDUxMi0xMDIzIEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjFLOwkJCS8vICAweDYwOTAKKworCS8vIFR4L1J4IDEwMjQtMTUxOCBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFJNYXg7CQkJLy8gIDB4NjA5NAorCisJLy8gVHgvUnggMTUxOS0xNTIyIEJ5dGUgR29vZCBWTEFOIEZyYW1lIENvdW50CisJdTMyIFRSTWd2OwkJCS8vICAweDYwOTgKKworCS8vIFJ4IEJ5dGUgQ291bnRlcgorCXUzMiBSQnl0OwkJCS8vICAweDYwOUMKKworCS8vIFJ4IFBhY2tldCBDb3VudGVyCisJdTMyIFJQa3Q7CQkJLy8gIDB4NjBBMAorCisJLy8gUnggRkNTIEVycm9yIENvdW50ZXIKKwl1MzIgUkZjczsJCQkvLyAgMHg2MEE0CisKKwkvLyBSeCBNdWx0aWNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgUk1jYTsJCQkvLyAgMHg2MEE4CisKKwkvLyBSeCBCcm9hZGNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgUkJjYTsJCQkvLyAgMHg2MEFDCisKKwkvLyBSeCBDb250cm9sIEZyYW1lIFBhY2tldCBDb3VudGVyCisJdTMyIFJ4Q2Y7CQkJLy8gIDB4NjBCMAorCisJLy8gUnggUGF1c2UgRnJhbWUgUGFja2V0IENvdW50ZXIKKwl1MzIgUnhQZjsJCQkvLyAgMHg2MEI0CisKKwkvLyBSeCBVbmtub3duIE9QIENvZGUgQ291bnRlcgorCXUzMiBSeFVvOwkJCS8vICAweDYwQjgKKworCS8vIFJ4IEFsaWdubWVudCBFcnJvciBDb3VudGVyCisJdTMyIFJBbG47CQkJLy8gIDB4NjBCQworCisJLy8gUnggRnJhbWUgTGVuZ3RoIEVycm9yIENvdW50ZXIKKwl1MzIgUkZscjsJCQkvLyAgMHg2MEMwCisKKwkvLyBSeCBDb2RlIEVycm9yIENvdW50ZXIKKwl1MzIgUkNkZTsJCQkvLyAgMHg2MEM0CisKKwkvLyBSeCBDYXJyaWVyIFNlbnNlIEVycm9yIENvdW50ZXIKKwl1MzIgUkNzZTsJCQkvLyAgMHg2MEM4CisKKwkvLyBSeCBVbmRlcnNpemUgUGFja2V0IENvdW50ZXIKKwl1MzIgUlVuZDsJCQkvLyAgMHg2MENDCisKKwkvLyBSeCBPdmVyc2l6ZSBQYWNrZXQgQ291bnRlcgorCXUzMiBST3ZyOwkJCS8vICAweDYwRDAKKworCS8vIFJ4IEZyYWdtZW50IENvdW50ZXIKKwl1MzIgUkZyZzsJCQkvLyAgMHg2MEQ0CisKKwkvLyBSeCBKYWJiZXIgQ291bnRlcgorCXUzMiBSSmJyOwkJCS8vICAweDYwRDgKKworCS8vIFJ4IERyb3AKKwl1MzIgUkRycDsJCQkvLyAgMHg2MERDCisKKwkvLyBUeCBCeXRlIENvdW50ZXIKKwl1MzIgVEJ5dDsJCQkvLyAgMHg2MEUwCisKKwkvLyBUeCBQYWNrZXQgQ291bnRlcgorCXUzMiBUUGt0OwkJCS8vICAweDYwRTQKKworCS8vIFR4IE11bHRpY2FzdCBQYWNrZXQgQ291bnRlcgorCXUzMiBUTWNhOwkJCS8vICAweDYwRTgKKworCS8vIFR4IEJyb2FkY2FzdCBQYWNrZXQgQ291bnRlcgorCXUzMiBUQmNhOwkJCS8vICAweDYwRUMKKworCS8vIFR4IFBhdXNlIENvbnRyb2wgRnJhbWUgQ291bnRlcgorCXUzMiBUeFBmOwkJCS8vICAweDYwRjAKKworCS8vIFR4IERlZmVycmFsIFBhY2tldCBDb3VudGVyCisJdTMyIFREZnI7CQkJLy8gIDB4NjBGNAorCisJLy8gVHggRXhjZXNzaXZlIERlZmVycmFsIFBhY2tldCBDb3VudGVyCisJdTMyIFRFZGY7CQkJLy8gIDB4NjBGOAorCisJLy8gVHggU2luZ2xlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUU2NsOwkJCS8vICAweDYwRkMKKworCS8vIFR4IE11bHRpcGxlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUTWNsOwkJCS8vICAweDYxMDAKKworCS8vIFR4IExhdGUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCisJdTMyIFRMY2w7CQkJLy8gIDB4NjEwNAorCisJLy8gVHggRXhjZXNzaXZlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUWGNsOwkJCS8vICAweDYxMDgKKworCS8vIFR4IFRvdGFsIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUTmNsOwkJCS8vICAweDYxMEMKKworCS8vIFR4IFBhdXNlIEZyYW1lIEhvbm9yZWQgQ291bnRlcgorCXUzMiBUUGZoOwkJCS8vICAweDYxMTAKKworCS8vIFR4IERyb3AgRnJhbWUgQ291bnRlcgorCXUzMiBURHJwOwkJCS8vICAweDYxMTQKKworCS8vIFR4IEphYmJlciBGcmFtZSBDb3VudGVyCisJdTMyIFRKYnI7CQkJLy8gIDB4NjExOAorCisJLy8gVHggRkNTIEVycm9yIENvdW50ZXIKKwl1MzIgVEZjczsJCQkvLyAgMHg2MTFDCisKKwkvLyBUeCBDb250cm9sIEZyYW1lIENvdW50ZXIKKwl1MzIgVHhDZjsJCQkvLyAgMHg2MTIwCisKKwkvLyBUeCBPdmVyc2l6ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRPdnI7CQkJLy8gIDB4NjEyNAorCisJLy8gVHggVW5kZXJzaXplIEZyYW1lIENvdW50ZXIKKwl1MzIgVFVuZDsJCQkvLyAgMHg2MTI4CisKKwkvLyBUeCBGcmFnbWVudHMgRnJhbWUgQ291bnRlcgorCXUzMiBURnJnOwkJCS8vICAweDYxMkMKKworCS8vIENhcnJ5IFJlZ2lzdGVyIE9uZSBSZWdpc3RlcgorCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxOwkvLyAgMHg2MTMwCisKKwkvLyBDYXJyeSBSZWdpc3RlciBUd28gUmVnaXN0ZXIKKwlNQUNfU1RBVF9SRUdfMl90IENhcnJ5MjsJLy8gIDB4NjEzNAorCisJLy8gQ2FycnkgUmVnaXN0ZXIgT25lIE1hc2sgUmVnaXN0ZXIKKwlNQUNfU1RBVF9SRUdfMV90IENhcnJ5MU07CS8vICAweDYxMzgKKworCS8vIENhcnJ5IFJlZ2lzdGVyIFR3byBNYXNrIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTJNOwkvLyAgMHg2MTNDCit9IE1BQ19TVEFUX3QsICpQTUFDX1NUQVRfdDsKKworLyogRU5EIE9GIE1BQyBTVEFUIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgTU1DIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1haW4gTWVtb3J5IENvbnRyb2xsZXIgQ29udHJvbCByZWcgaW4gbW1jIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NzAwMAorICovCit0eXBlZGVmIHVuaW9uIF9NTUNfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNy0zMQorCQl1MzIgZm9yY2VfY2U6MTsJCS8vIGJpdCA2CisJCXUzMiByeGRtYV9kaXNhYmxlOjE7CS8vIGJpdCA1CisJCXUzMiB0eGRtYV9kaXNhYmxlOjE7CS8vIGJpdCA0CisJCXUzMiB0eG1hY19kaXNhYmxlOjE7CS8vIGJpdCAzCisJCXUzMiByeG1hY19kaXNhYmxlOjE7CS8vIGJpdCAyCisJCXUzMiBhcmJfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIG1tY19lbmFibGU6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgbW1jX2VuYWJsZToxOwkJLy8gYml0IDAKKwkJdTMyIGFyYl9kaXNhYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgcnhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgdHhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMworCQl1MzIgdHhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNAorCQl1MzIgcnhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNQorCQl1MzIgZm9yY2VfY2U6MTsJCS8vIGJpdCA2CisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNTUNfQ1RSTF90LCAqUE1NQ19DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1haW4gTWVtb3J5IENvbnRyb2xsZXIgSG9zdCBNZW1vcnkgQWNjZXNzIEFkZHJlc3MgcmVnIGluIG1tYworICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg3MDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX01NQ19TUkFNX0FDQ0VTU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBieXRlX2VuYWJsZToxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDE0LTE1CisJCXUzMiByZXFfYWRkcjoxMDsJCS8vIGJpdHMgNC0xMworCQl1MzIgcmVzZXJ2ZWQxOjE7CQkvLyBiaXQgMworCQl1MzIgaXNfY3RybF93b3JkOjE7CS8vIGJpdCAyCisJCXUzMiB3cl9hY2Nlc3M6MTsJCS8vIGJpdCAxCisJCXUzMiByZXFfYWNjZXNzOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHJlcV9hY2Nlc3M6MTsJCS8vIGJpdCAwCisJCXUzMiB3cl9hY2Nlc3M6MTsJCS8vIGJpdCAxCisJCXUzMiBpc19jdHJsX3dvcmQ6MTsJLy8gYml0IDIKKwkJdTMyIHJlc2VydmVkMToxOwkJLy8gYml0IDMKKwkJdTMyIHJlcV9hZGRyOjEwOwkJLy8gYml0cyA0LTEzCisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTQtMTUKKwkJdTMyIGJ5dGVfZW5hYmxlOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1NQ19TUkFNX0FDQ0VTU190LCAqUE1NQ19TUkFNX0FDQ0VTU190OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIEhvc3QgTWVtb3J5IEFjY2VzcyBEYXRhIHJlZyBpbiBtbWMKKyAqIGFkZHJlc3MgbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4NzAwOCAtIDB4NzAxNAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIE1lbW9yeSBDb250cm9sIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfTU1DX3QgewkJCS8vIExvY2F0aW9uOgorCU1NQ19DVFJMX3QgbW1jX2N0cmw7CQkvLyAgMHg3MDAwCisJTU1DX1NSQU1fQUNDRVNTX3Qgc3JhbV9hY2Nlc3M7CS8vICAweDcwMDQKKwl1MzIgc3JhbV93b3JkMTsJCS8vICAweDcwMDgKKwl1MzIgc3JhbV93b3JkMjsJCS8vICAweDcwMEMKKwl1MzIgc3JhbV93b3JkMzsJCS8vICAweDcwMTAKKwl1MzIgc3JhbV93b3JkNDsJCS8vICAweDcwMTQKK30gTU1DX3QsICpQTU1DX3Q7CisKKy8qIEVORCBPRiBNTUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBFWFAgUk9NIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBFeHBhbnNpb24gUk9NIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCisKKy8qIFRha2UgdGhpcyBvdXQgdW50aWwgaXQgaXMgbm90IGVtcHR5ICovCisjaWYgMAordHlwZWRlZiBzdHJ1Y3QgX0VYUF9ST01fdCB7CisKK30gRVhQX1JPTV90LCAqUEVYUF9ST01fdDsKKyNlbmRpZgorCisvKiBFTkQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qCisgKiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfQUREUkVTU19NQVBfdCB7CisJR0xPQkFMX3QgZ2xvYmFsOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIGdsb2JhbCBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9nbG9iYWxbNDA5NiAtIHNpemVvZihHTE9CQUxfdCldOworCVRYRE1BX3QgdHhkbWE7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgdHhkbWEgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfdHhkbWFbNDA5NiAtIHNpemVvZihUWERNQV90KV07CisJUlhETUFfdCByeGRtYTsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiByeGRtYSBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9yeGRtYVs0MDk2IC0gc2l6ZW9mKFJYRE1BX3QpXTsKKwlUWE1BQ190IHR4bWFjOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHR4bWFjIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3R4bWFjWzQwOTYgLSBzaXplb2YoVFhNQUNfdCldOworCVJYTUFDX3QgcnhtYWM7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgcnhtYWMgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfcnhtYWNbNDA5NiAtIHNpemVvZihSWE1BQ190KV07CisJTUFDX3QgbWFjOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIG1hYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9tYWNbNDA5NiAtIHNpemVvZihNQUNfdCldOworCU1BQ19TVEFUX3QgbWFjU3RhdDsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBtYWMgc3RhdCBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9tYWNfc3RhdFs0MDk2IC0gc2l6ZW9mKE1BQ19TVEFUX3QpXTsKKwlNTUNfdCBtbWM7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgbW1jIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX21tY1s0MDk2IC0gc2l6ZW9mKE1NQ190KV07CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfWzEwMTU4MDhdOworCisvKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLworI2lmIDAKKwlFWFBfUk9NX3QgZXhwX3JvbTsKKyNlbmRpZgorCisJdTggdW51c2VkX2V4cF9yb21bNDA5Nl07CS8vIE1HUy1zaXplIFRCRAorCXU4IHVudXNlZF9fWzUyNDI4OF07CS8vIHVudXNlZCBzZWN0aW9uIG9mIGFkZHJlc3MgbWFwCit9IEFERFJFU1NfTUFQX3QsICpQQUREUkVTU19NQVBfdDsKKworI2VuZGlmIC8qIF9FVDEzMTBfQUREUkVTU19NQVBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiMTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5jCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9lZXByb20uYyAtIENvZGUgdXNlZCB0byBhY2Nlc3MgdGhlIGRldmljZSdzIEVFUFJPTQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX2VlcHJvbS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKworI2luY2x1ZGUgImV0MTMxMF90eC5oIgorCisKKy8qCisgKiBFRVBST00gRGVmaW5lcworICovCisKKy8qIExCQ0lGIFJlZ2lzdGVyIEdyb3VwcyAoYWRkcmVzc2VkIHZpYSAzMi1iaXQgb2Zmc2V0cykgKi8KKyNkZWZpbmUgTEJDSUZfRFdPUkQwX0dST1VQX09GRlNFVCAgICAgICAweEFDCisjZGVmaW5lIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQgICAgICAgMHhCMAorCisvKiBMQkNJRiBSZWdpc3RlcnMgKGFkZHJlc3NlZCB2aWEgOC1iaXQgb2Zmc2V0cykgKi8KKyNkZWZpbmUgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQgICAweEFDCisjZGVmaW5lIExCQ0lGX0RBVEFfUkVHSVNURVJfT0ZGU0VUICAgICAgMHhCMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCAgIDB4QjEKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1JFR0lTVEVSX09GRlNFVCAgICAweEIyCisKKy8qIExCQ0lGIENvbnRyb2wgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBMQkNJRl9DT05UUk9MX1NFUVVFTlRJQUxfUkVBRCAgIDB4MDEKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9QQUdFX1dSSVRFICAgICAgICAweDAyCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfVU5VU0VEMSAgICAgICAgICAgMHgwNAorI2RlZmluZSBMQkNJRl9DT05UUk9MX0VFUFJPTV9SRUxPQUQgICAgIDB4MDgKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9VTlVTRUQyICAgICAgICAgICAweDEwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUiAgICAgMHgyMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX0kyQ19XUklURSAgICAgICAgIDB4NDAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEUgICAgICAweDgwCisKKy8qIExCQ0lGIFN0YXR1cyBSZWdpc3RlciBCaXRzICovCisjZGVmaW5lIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgICAgMHgwMQorI2RlZmluZSBMQkNJRl9TVEFUVVNfSTJDX0lETEUgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0FDS19FUlJPUiAgICAgICAgICAweDA0CisjZGVmaW5lIExCQ0lGX1NUQVRVU19HRU5FUkFMX0VSUk9SICAgICAgMHgwOAorI2RlZmluZSBMQkNJRl9TVEFUVVNfVU5VU0VEICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0NIRUNLU1VNX0VSUk9SICAgICAweDQwCisjZGVmaW5lIExCQ0lGX1NUQVRVU19FRVBST01fUFJFU0VOVCAgICAgMHg4MAorCisvKiBNaXNjZWxsYW5lb3VzIENvbnN0cmFpbnRzICovCisjZGVmaW5lIE1BWF9OVU1fUkVHSVNURVJfUE9MTFMgICAgICAgICAgMTAwMAorI2RlZmluZSBNQVhfTlVNX1dSSVRFX1JFVFJJRVMgICAgICAgICAgIDIKKworLyoKKyAqIERlZmluZSBtYWNyb3MgdGhhdCBhbGxvdyBpbmRpdmlkdWFsIHJlZ2lzdGVyIHZhbHVlcyB0byBiZSBleHRyYWN0ZWQgZnJvbSBhCisgKiBEV09SRDEgcmVnaXN0ZXIgZ3JvdXBpbmcKKyAqLworI2RlZmluZSBFWFRSQUNUX0RBVEFfUkVHSVNURVIoeCkgICAgKHVpbnQ4X3QpKHggJiAweEZGKQorI2RlZmluZSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih4KSAgKHVpbnQ4X3QpKCh4ID4+IDE2KSAmIDB4RkYpCisjZGVmaW5lIEVYVFJBQ1RfQ09OVFJPTF9SRUcoeCkgICAgICAodWludDhfdCkoKHggPj4gOCkgJiAweEZGKQorCisvKioKKyAqIEVlcHJvbVdyaXRlQnl0ZSAtIFdyaXRlIGEgYnl0ZSB0byB0aGUgRVQxMzEwJ3MgRUVQUk9NCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEB1bkFkZHJlc3M6IHRoZSBhZGRyZXNzIHRvIHdyaXRlCisgKiBAYkRhdGE6IHRoZSB2YWx1ZSB0byB3cml0ZQorICogQHVuRWVwcm9uSWQ6IHRoZSBJRCBvZiB0aGUgRUVQUk9NCisgKiBAdW5BZGRyZXNzaW5nTW9kZTogaG93IHRoZSBFRVBST00gaXMgdG8gYmUgYWNjZXNzZWQKKyAqCisgKiBSZXR1cm5zIFNVQ0NFU1Mgb3IgRkFJTFVSRQorICovCitpbnQzMl90IEVlcHJvbVdyaXRlQnl0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MzJfdCB1bkFkZHJlc3MsCisJCQl1aW50OF90IGJEYXRhLCB1aW50MzJfdCB1bkVlcHJvbUlkLAorCQkJdWludDMyX3QgdW5BZGRyZXNzaW5nTW9kZSkKK3sKKyAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwQWRhcHRlci0+cGRldjsKKwlpbnQzMl90IG5JbmRleDsKKwlpbnQzMl90IG5SZXRyaWVzOworCWludDMyX3QgbkVycm9yID0gZmFsc2U7CisJaW50MzJfdCBuSTJDV3JpdGVBY3RpdmUgPSAwOworCWludDMyX3QgbldyaXRlU3VjY2Vzc2Z1bCA9IDA7CisJdWludDhfdCBiQ29udHJvbDsKKwl1aW50OF90IGJTdGF0dXMgPSAwOworCXVpbnQzMl90IHVuRHdvcmQxID0gMDsKKwl1aW50MzJfdCB1bkRhdGEgPSAwOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGV4Y2VycHQgaXMgZnJvbSAiU2VyaWFsIEVFUFJPTSBIVyBEZXNpZ24KKwkgKiBTcGVjaWZpY2F0aW9uIiBWZXJzaW9uIDAuOTIgKDkvMjAvMjAwNCk6CisJICoKKwkgKiBTaW5nbGUgQnl0ZSBXcml0ZXMKKwkgKgorCSAqIEZvciBhbiBFRVBST00sIGFuIEkyQyBzaW5nbGUgYnl0ZSB3cml0ZSBpcyBkZWZpbmVkIGFzIGEgU1RBUlQKKwkgKiBjb25kaXRpb24gZm9sbG93ZWQgYnkgdGhlIGRldmljZSBhZGRyZXNzLCBFRVBST00gYWRkcmVzcywgb25lIGJ5dGUKKwkgKiBvZiBkYXRhIGFuZCBhIFNUT1AgY29uZGl0aW9uLiAgVGhlIFNUT1AgY29uZGl0aW9uIHdpbGwgdHJpZ2dlciB0aGUKKwkgKiBFRVBST00ncyBpbnRlcm5hbGx5IHRpbWVkIHdyaXRlIGN5Y2xlIHRvIHRoZSBub252b2xhdGlsZSBtZW1vcnkuCisJICogQWxsIGlucHV0cyBhcmUgZGlzYWJsZWQgZHVyaW5nIHRoaXMgd3JpdGUgY3ljbGUgYW5kIHRoZSBFRVBST00gd2lsbAorCSAqIG5vdCByZXNwb25kIHRvIGFueSBhY2Nlc3MgdW50aWwgdGhlIGludGVybmFsIHdyaXRlIGlzIGNvbXBsZXRlLgorCSAqIFRoZSBzdGVwcyB0byBleGVjdXRlIGEgc2luZ2xlIGJ5dGUgd3JpdGUgYXJlIGFzIGZvbGxvd3M6CisJICoKKwkgKiAxLiBDaGVjayBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIgZm9yIGJpdHMgNiAmIDM6MiBhbGwgZXF1YWwgdG8gMCBhbmQKKwkgKiAgICBiaXRzIDcsMTowIGJvdGggZXF1YWwgdG8gMSwgYXQgbGVhc3Qgb25jZSBhZnRlciByZXNldC4KKwkgKiAgICBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgbmVlZCBvbmx5IHRvIGNoZWNrIHRoYXQgYml0cyAxOjAgYXJlCisJICogICAgZXF1YWwgdG8gMSBwcmlvciB0byBzdGFydGluZyBhIHNpbmdsZSBieXRlIHdyaXRlLgorCSAqCisJICogMi4gV3JpdGUgdG8gdGhlIExCQ0lGIENvbnRyb2wgUmVnaXN0ZXI6ICBiaXQgNz0xLCBiaXQgNj0xLCBiaXQgMz0wLAorCSAqICAgIGFuZCBiaXRzIDE6MCBib3RoID0wLiAgQml0IDUgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlCisJICogICAgdHlwZSBvZiBFRVBST00gYmVpbmcgYWNjZXNzZWQgKDE9dHdvIGJ5dGUgYWRkcmVzc2luZywgMD1vbmUKKwkgKiAgICBieXRlIGFkZHJlc3NpbmcpLgorCSAqCisJICogMy4gV3JpdGUgdGhlIGFkZHJlc3MgdG8gdGhlIExCQ0lGIEFkZHJlc3MgUmVnaXN0ZXIuCisJICoKKwkgKiA0LiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgTEJDSUYgRGF0YSBSZWdpc3RlciAodGhlIEkyQyB3cml0ZSB3aWxsCisJICogICAgYmVnaW4pLgorCSAqCisJICogNS4gTW9uaXRvciBiaXQgMTowIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBXaGVuIGJpdHMgMTowIGFyZQorCSAqICAgIGJvdGggZXF1YWwgdG8gMSwgdGhlIEkyQyB3cml0ZSBoYXMgY29tcGxldGVkIGFuZCB0aGUgaW50ZXJuYWwKKwkgKiAgICB3cml0ZSBjeWNsZSBvZiB0aGUgRUVQUk9NIGlzIGFib3V0IHRvIHN0YXJ0LiAoYml0cyAxOjAgPSAwMSBpcworCSAqICAgIGEgbGVnYWwgc3RhdGUgd2hpbGUgd2FpdGluZyBmcm9tIGJvdGggZXF1YWwgdG8gMSwgYnV0IGJpdHMKKwkgKiAgICAxOjAgPSAxMCBpcyBpbnZhbGlkIGFuZCBpbXBsaWVzIHRoYXQgc29tZXRoaW5nIGlzIGJyb2tlbikuCisJICoKKwkgKiA2LiBDaGVjayBiaXQgMyBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgSWYgIGVxdWFsIHRvIDEsIGFuCisJICogICAgZXJyb3IgaGFzIG9jY3VycmVkLgorCSAqCisJICogNy4gQ2hlY2sgYml0IDIgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIElmIGVxdWFsIHRvIDEgYW4gQUNLCisJICogICAgZXJyb3IgaGFzIG9jY3VycmVkIG9uIHRoZSBhZGRyZXNzIHBoYXNlIG9mIHRoZSB3cml0ZS4gIFRoaXMKKwkgKiAgICBjb3VsZCBiZSBkdWUgdG8gYW4gYWN0dWFsIGhhcmR3YXJlIGZhaWx1cmUgb3IgdGhlIEVFUFJPTSBtYXkKKwkgKiAgICBzdGlsbCBiZSBpbiBpdHMgaW50ZXJuYWwgd3JpdGUgY3ljbGUgZnJvbSBhIHByZXZpb3VzIHdyaXRlLgorCSAqICAgIFRoaXMgd3JpdGUgb3BlcmF0aW9uIHdhcyBpZ25vcmVkIGFuZCBtdXN0IGJlIHJlcGVhdGVkIGxhdGVyLgorCSAqCisJICogOC4gU2V0IGJpdCA2IG9mIHRoZSBMQkNJRiBDb250cm9sIFJlZ2lzdGVyID0gMC4gSWYgYW5vdGhlciB3cml0ZSBpcworCSAqICAgIHJlcXVpcmVkLCBnbyB0byBzdGVwIDEuCisJICovCisKKwkvKiBTdGVwIDE6ICovCisJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJbkVycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgJiYKKwkJICAgIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJICAgIAkvKiBiaXRzIDE6MCBhcmUgZXF1YWwgdG8gMSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobkVycm9yIHx8IChuSW5kZXggPj0gTUFYX05VTV9SRUdJU1RFUl9QT0xMUykpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJLyogU3RlcCAyOiAqLworCWJDb250cm9sID0gMDsKKwliQ29udHJvbCB8PSBMQkNJRl9DT05UUk9MX0xCQ0lGX0VOQUJMRSB8IExCQ0lGX0NPTlRST0xfSTJDX1dSSVRFOworCisJaWYgKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSB7CisJCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUjsKKwl9CisKKwlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0NPTlRST0xfUkVHSVNURVJfT0ZGU0VULAorCQkJCSAgYkNvbnRyb2wpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCW5JMkNXcml0ZUFjdGl2ZSA9IDE7CisKKwkvKiBQcmVwYXJlIEVFUFJPTSBhZGRyZXNzIGZvciBTdGVwIDMgKi8KKwl1bkFkZHJlc3MgfD0gKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSA/CisJICAgICh1bkVlcHJvbUlkIDw8IDE2KSA6ICh1bkVlcHJvbUlkIDw8IDgpOworCisJZm9yIChuUmV0cmllcyA9IDA7IG5SZXRyaWVzIDwgTUFYX05VTV9XUklURV9SRVRSSUVTOyBuUmV0cmllcysrKSB7CisJCS8qIFN0ZXAgMzoqLworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9BRERSRVNTX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICAgdW5BZGRyZXNzKSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTdGVwIDQ6ICovCisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTEJDSUZfREFUQV9SRUdJU1RFUl9PRkZTRVQsCisJCQkJCSAgYkRhdGEpKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0ZXAgNTogKi8KKwkJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkJLyogUmVhZCByZWdpc3RlcnMgZ3JvdXBlZCBpbiBEV09SRDEgKi8KKwkJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKKwkJCQkJCSAgTEJDSUZfRFdPUkQxX0dST1VQX09GRlNFVCwKKwkJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJCW5FcnJvciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJTdGF0dXMgPSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih1bkR3b3JkMSk7CisKKwkJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAmJgorCQkJICAgIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJCSAgICAJLyogSTJDIHdyaXRlIGNvbXBsZXRlICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobkVycm9yIHx8IChuSW5kZXggPj0gTUFYX05VTV9SRUdJU1RFUl9QT0xMUykpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogU3RlcCA2OiBEb24ndCBicmVhayBoZXJlIGlmIHdlIGFyZSByZXZpc2lvbiAxLCB0aGlzIGlzCisJCSAqCSAgIHNvIHdlIGRvIGEgYmxpbmQgd3JpdGUgZm9yIGxvYWQgYnVnLgorCSAgICAgICAgICovCisJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0dFTkVSQUxfRVJST1IKKwkJICAgICYmIHBBZGFwdGVyLT5SZXZpc2lvbklEID09IDApIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RlcCA3ICovCisJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0FDS19FUlJPUikgeworCQkJLyoKKwkJCSAqIFRoaXMgY291bGQgYmUgZHVlIHRvIGFuIGFjdHVhbCBoYXJkd2FyZSBmYWlsdXJlCisJCQkgKiBvciB0aGUgRUVQUk9NIG1heSBzdGlsbCBiZSBpbiBpdHMgaW50ZXJuYWwgd3JpdGUKKwkJCSAqIGN5Y2xlIGZyb20gYSBwcmV2aW91cyB3cml0ZS4gVGhpcyB3cml0ZSBvcGVyYXRpb24KKwkJCSAqIHdhcyBpZ25vcmVkIGFuZCBtdXN0IGJlIHJlcGVhdGVkIGxhdGVyLgorCQkJICovCisJCQl1ZGVsYXkoMTApOworCQkJY29udGludWU7CisJCX0KKworCQluV3JpdGVTdWNjZXNzZnVsID0gMTsKKwkJYnJlYWs7CisJfQorCisJLyogU3RlcCA4OiAqLworCXVkZWxheSgxMCk7CisJbkluZGV4ID0gMDsKKwl3aGlsZSAobkkyQ1dyaXRlQWN0aXZlKSB7CisJCWJDb250cm9sICY9IH5MQkNJRl9DT05UUk9MX0kyQ19XUklURTsKKworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0NPTlRST0xfUkVHSVNURVJfT0ZGU0VULAorCQkJCQkgIGJDb250cm9sKSkgeworCQkJbldyaXRlU3VjY2Vzc2Z1bCA9IDA7CisJCX0KKworCQkvKiBEbyByZWFkIHVudGlsIGludGVybmFsIEFDS19FUlJPUiBnb2VzIGF3YXkgbWVhbmluZyB3cml0ZQorCQkgKiBjb21wbGV0ZWQKKwkJICovCisJCWRvIHsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKKwkJCQkJICAgICAgIExCQ0lGX0FERFJFU1NfUkVHSVNURVJfT0ZGU0VULAorCQkJCQkgICAgICAgdW5BZGRyZXNzKTsKKwkJCWRvIHsKKwkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKKwkJCQkJTEJDSUZfREFUQV9SRUdJU1RFUl9PRkZTRVQsICZ1bkRhdGEpOworCQkJfSB3aGlsZSAoKHVuRGF0YSAmIDB4MDAwMTAwMDApID09IDApOworCQl9IHdoaWxlICh1bkRhdGEgJiAweDAwMDQwMDAwKTsKKworCQliQ29udHJvbCA9IEVYVFJBQ1RfQ09OVFJPTF9SRUcodW5EYXRhKTsKKworCQlpZiAoYkNvbnRyb2wgIT0gMHhDMCB8fCBuSW5kZXggPT0gMTAwMDApIHsKKwkJCWJyZWFrOworCQl9CisKKwkJbkluZGV4Kys7CisJfQorCisJcmV0dXJuIG5Xcml0ZVN1Y2Nlc3NmdWwgPyBTVUNDRVNTIDogRkFJTFVSRTsKK30KKworLyoqCisgKiBFZXByb21SZWFkQnl0ZSAtIFJlYWQgYSBieXRlIGZyb20gdGhlIEVUMTMxMCdzIEVFUFJPTQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAdW5BZGRyZXNzOiB0aGUgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHJlYWQKKyAqIEBwYkRhdGE6IGEgcG9pbnRlciB0byBhIGJ5dGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSByZWFkCisgKiBAdW5FZXByb25JZDogdGhlIElEIG9mIHRoZSBFRVBST00KKyAqIEB1bkFkZHJlc3NpbmdNb2RlOiBob3cgdGhlIEVFUFJPTSBpcyB0byBiZSBhY2Nlc3NlZAorICoKKyAqIFJldHVybnMgU1VDQ0VTUyBvciBGQUlMVVJFCisgKi8KK2ludDMyX3QgRWVwcm9tUmVhZEJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDMyX3QgdW5BZGRyZXNzLAorCQkgICAgICAgdWludDhfdCAqcGJEYXRhLCB1aW50MzJfdCB1bkVlcHJvbUlkLAorCQkgICAgICAgdWludDMyX3QgdW5BZGRyZXNzaW5nTW9kZSkKK3sKKyAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwQWRhcHRlci0+cGRldjsKKwlpbnQzMl90IG5JbmRleDsKKwlpbnQzMl90IG5FcnJvciA9IDA7CisJdWludDhfdCBiQ29udHJvbDsKKwl1aW50OF90IGJTdGF0dXMgPSAwOworCXVpbnQzMl90IHVuRHdvcmQxID0gMDsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBleGNlcnB0IGlzIGZyb20gIlNlcmlhbCBFRVBST00gSFcgRGVzaWduCisJICogU3BlY2lmaWNhdGlvbiIgVmVyc2lvbiAwLjkyICg5LzIwLzIwMDQpOgorCSAqCisJICogU2luZ2xlIEJ5dGUgUmVhZHMKKwkgKgorCSAqIEEgc2luZ2xlIGJ5dGUgcmVhZCBpcyBzaW1pbGFyIHRvIHRoZSBzaW5nbGUgYnl0ZSB3cml0ZSwgd2l0aCB0aGUKKwkgKiBleGNlcHRpb24gb2YgdGhlIGRhdGEgZmxvdzoKKwkgKgorCSAqIDEuIENoZWNrIExCQ0lGIFN0YXR1cyBSZWdpc3RlciBmb3IgYml0cyA2ICYgMzoyIGFsbCBlcXVhbCB0byAwIGFuZAorCSAqICAgIGJpdHMgNywxOjAgYm90aCBlcXVhbCB0byAxLCBhdCBsZWFzdCBvbmNlIGFmdGVyIHJlc2V0LgorCSAqICAgIFN1YnNlcXVlbnQgb3BlcmF0aW9ucyBuZWVkIG9ubHkgdG8gY2hlY2sgdGhhdCBiaXRzIDE6MCBhcmUgZXF1YWwKKwkgKiAgICB0byAxIHByaW9yIHRvIHN0YXJ0aW5nIGEgc2luZ2xlIGJ5dGUgcmVhZC4KKwkgKgorCSAqIDIuIFdyaXRlIHRvIHRoZSBMQkNJRiBDb250cm9sIFJlZ2lzdGVyOiAgYml0IDc9MSwgYml0IDY9MCwgYml0IDM9MCwKKwkgKiAgICBhbmQgYml0cyAxOjAgYm90aCA9MC4gIEJpdCA1IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlCisJICogICAgb2YgRUVQUk9NIGJlaW5nIGFjY2Vzc2VkICgxPXR3byBieXRlIGFkZHJlc3NpbmcsIDA9b25lIGJ5dGUKKwkgKiAgICBhZGRyZXNzaW5nKS4KKwkgKgorCSAqIDMuIFdyaXRlIHRoZSBhZGRyZXNzIHRvIHRoZSBMQkNJRiBBZGRyZXNzIFJlZ2lzdGVyIChJMkMgcmVhZCB3aWxsCisJICogICAgYmVnaW4pLgorCSAqCisJICogNC4gTW9uaXRvciBiaXQgMCBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgV2hlbiA9MSwgSTJDIHJlYWQKKwkgKiAgICBpcyBjb21wbGV0ZS4gKGlmIGJpdCAxID0xIGFuZCBiaXQgMCBzdGF5cyA9MCwgYSBoYXJkd2FyZSBmYWlsdXJlCisJICogICAgaGFzIG9jY3VycmVkKS4KKwkgKgorCSAqIDUuIENoZWNrIGJpdCAyIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBJZiA9MSwgdGhlbiBhbiBlcnJvcgorCSAqICAgIGhhcyBvY2N1cnJlZC4gIFRoZSBkYXRhIHRoYXQgaGFzIGJlZW4gcmV0dXJuZWQgZnJvbSB0aGUgUEhZIG1heQorCSAqICAgIGJlIGludmFsaWQuCisJICoKKwkgKiA2LiBSZWdhcmRsZXNzIG9mIGVycm9yIHN0YXR1cywgcmVhZCBkYXRhIGJ5dGUgZnJvbSBMQkNJRiBEYXRhCisJICogICAgUmVnaXN0ZXIuICBJZiBhbm90aGVyIGJ5dGUgaXMgcmVxdWlyZWQsIGdvIHRvIHN0ZXAgMS4KKwkgKi8KKworCS8qIFN0ZXAgMTogKi8KKwlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IE1BWF9OVU1fUkVHSVNURVJfUE9MTFM7IG5JbmRleCsrKSB7CisJCS8qIFJlYWQgcmVnaXN0ZXJzIGdyb3VwZWQgaW4gRFdPUkQxICovCisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfRFdPUkQxX0dST1VQX09GRlNFVCwKKwkJCQkJICAmdW5Ed29yZDEpKSB7CisJCQluRXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQliU3RhdHVzID0gRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIodW5Ed29yZDEpOworCisJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAmJgorCQkgICAgYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19JMkNfSURMRSkgeworCQkJLyogYml0cyAxOjAgYXJlIGVxdWFsIHRvIDEgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgMjogKi8KKwliQ29udHJvbCA9IDA7CisJYkNvbnRyb2wgfD0gTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEU7CisKKwlpZiAodW5BZGRyZXNzaW5nTW9kZSA9PSBEVUFMX0JZVEUpIHsKKwkJYkNvbnRyb2wgfD0gTEJDSUZfQ09OVFJPTF9UV09fQllURV9BRERSOworCX0KKworCWlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUl9PRkZTRVQsCisJCQkJICBiQ29udHJvbCkpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJLyogU3RlcCAzOiAqLworCXVuQWRkcmVzcyB8PSAodW5BZGRyZXNzaW5nTW9kZSA9PSBEVUFMX0JZVEUpID8KKwkgICAgKHVuRWVwcm9tSWQgPDwgMTYpIDogKHVuRWVwcm9tSWQgPDwgOCk7CisKKwlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9BRERSRVNTX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkgICB1bkFkZHJlc3MpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgNDogKi8KKwlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IE1BWF9OVU1fUkVHSVNURVJfUE9MTFM7IG5JbmRleCsrKSB7CisJCS8qIFJlYWQgcmVnaXN0ZXJzIGdyb3VwZWQgaW4gRFdPUkQxICovCisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfRFdPUkQxX0dST1VQX09GRlNFVCwKKwkJCQkJICAmdW5Ed29yZDEpKSB7CisJCQluRXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQliU3RhdHVzID0gRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIodW5Ed29yZDEpOworCisJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTAorCQkgICAgJiYgYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19JMkNfSURMRSkgeworCQkJLyogSTJDIHJlYWQgY29tcGxldGUgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgNjogKi8KKwkqcGJEYXRhID0gRVhUUkFDVF9EQVRBX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCXJldHVybiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19BQ0tfRVJST1IpID8gRkFJTFVSRSA6IFNVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNmY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9lZXByb20uaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHVzZWQgZm9yIEVFUFJPTQorICogICAgICAgICAgICAgICAgICAgYWNjZXNzIHJvdXRpbmVzCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMTBfRUVQUk9NX0hfXworI2RlZmluZSBfX0VUMTMxMF9FRVBST01fSF9fCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworI2lmbmRlZiBTVUNDRVNTCisjZGVmaW5lIFNVQ0NFU1MJCTAKKyNkZWZpbmUgRkFJTFVSRQkJMQorI2VuZGlmCisKKyNpZm5kZWYgUkVBRAorI2RlZmluZSBSRUFECQkwCisjZGVmaW5lIFdSSVRFCQkxCisjZW5kaWYKKworI2lmbmRlZiBTSU5HTEVfQllURQorI2RlZmluZSBTSU5HTEVfQllURQkwCisjZGVmaW5lIERVQUxfQllURQkxCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCitpbnQzMl90IEVlcHJvbVdyaXRlQnl0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB1bkFkZHJlc3MsCisJCQl1OCBiRGF0YSwgdTMyIHVuRWVwcm9tSWQsCisJCQl1MzIgdW5BZGRyZXNzaW5nTW9kZSk7CitpbnQzMl90IEVlcHJvbVJlYWRCeXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdTMyIHVuQWRkcmVzcywKKwkJICAgICAgIHU4ICpwYkRhdGEsIHUzMiB1bkVlcHJvbUlkLAorCQkgICAgICAgdTMyIHVuQWRkcmVzc2luZ01vZGUpOworCisjZW5kaWYgLyogX0VUMTMxMF9FRVBST01fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNiMzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9qYWdjb3JlLmMgLSBBbGwgY29kZSBwZXJ0YWluaW5nIHRvIHRoZSBFVDEzMDEvRVQxMzF4J3MgSkFHY29yZQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyoqCisgKiBDb25maWdHbG9iYWxSZWdzIC0gVXNlZCB0byBjb25maWd1cmUgdGhlIGdsb2JhbCByZWdpc3RlcnMgb24gdGhlIEpBR0NvcmUKKyAqIEBwQWRwYXRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdHbG9iYWxSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9HTE9CQUxfdCBfX2lvbWVtICpwR2JsID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCAyMDQ4KSB7CisJCQkvKiBUeCAvIFJ4RE1BIGFuZCBUeC9SeCBNQUMgaW50ZXJmYWNlcyBoYXZlIGEgMWsgd29yZAorCQkJICogYmxvY2sgb2YgUkFNIHRoYXQgdGhlIGRyaXZlciBjYW4gc3BsaXQgYmV0d2VlbiBUeAorCQkJICogYW5kIFJ4IGFzIGl0IGRlc2lyZXMuICBPdXIgZGVmYXVsdCBpcyB0byBzcGxpdCBpdAorCQkJICogNTAvNTA6CisJCQkgKi8KKwkJCXdyaXRlbCgwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVJ4TWVtRW5kLAorCQkJICAgICAgICZwR2JsLT5yeHFfZW5kX2FkZHIudmFsdWUpOworCQkJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVJ4TWVtRW5kICsgMSwKKwkJCSAgICAgICAmcEdibC0+dHhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwKKwkJCSAgICAgICAmcEdibC0+dHhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA8IDgxOTIpIHsKKwkJCS8qIEZvciBqdW1ibyBwYWNrZXRzID4gMmsgYnV0IDwgOGssIHNwbGl0IDUwLTUwLiAqLworCQkJd3JpdGVsKDAsICZwR2JsLT5yeHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1JYX09GRlNFVCwKKwkJCSAgICAgICAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fUlhfT0ZGU0VUICsgMSwKKwkJCSAgICAgICAmcEdibC0+dHhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwKKwkJCSAgICAgICAmcEdibC0+dHhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIDkyMTYgaXMgdGhlIG9ubHkgcGFja2V0IHNpemUgZ3JlYXRlciB0aGFuIDhrIHRoYXQKKwkJCSAqIGlzIGF2YWlsYWJsZS4gVGhlIFR4IGJ1ZmZlciBoYXMgdG8gYmUgYmlnIGVub3VnaAorCQkJICogZm9yIG9uZSB3aG9sZSBwYWNrZXQgb24gdGhlIFR4IHNpZGUuIFdlJ2xsIG1ha2UKKwkJCSAqIHRoZSBUeCA5NDA4LCBhbmQgZ2l2ZSB0aGUgcmVzdCB0byBSeAorCQkJICovCisJCQl3cml0ZWwoMHgwMDAwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKDB4MDFiMywgJnBHYmwtPnJ4cV9lbmRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoMHgwMWI0LCAmcEdibC0+dHhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwKKwkJCSAgICAgICAmcEdibC0+dHhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgdGhlIGxvb3BiYWNrIHJlZ2lzdGVyLiBEaXNhYmxlIGFsbCBsb29wYmFja3MuICovCisJCXdyaXRlbCgwLCAmcEdibC0+bG9vcGJhY2sudmFsdWUpOworCX0gZWxzZSB7CisJCS8qIEZvciBQSFkgTGluZSBsb29wYmFjaywgdGhlIG1lbW9yeSBpcyBjb25maWd1cmVkIGFzIGlmIFR4CisJCSAqIGFuZCBSeCBib3RoIGhhdmUgYWxsIHRoZSBtZW1vcnkuICBUaGlzIGlzIGJlY2F1c2UgdGhlCisJCSAqIFJ4TUFDIHdpbGwgd3JpdGUgZGF0YSBpbnRvIHRoZSBzcGFjZSwgYW5kIHRoZSBUeE1BQyB3aWxsCisJCSAqIHJlYWQgaXQgb3V0LgorCQkgKi8KKwkJd3JpdGVsKDAsICZwR2JsLT5yeHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsICZwR2JsLT5yeHFfZW5kX2FkZHIudmFsdWUpOworCQl3cml0ZWwoMCwgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgbG9vcGJhY2sgcmVnaXN0ZXIgKE1BQyBsb29wYmFjaykuICovCisJCXdyaXRlbCgxLCAmcEdibC0+bG9vcGJhY2sudmFsdWUpOworCX0KKworCS8qIE1TSSBSZWdpc3RlciAqLworCXdyaXRlbCgwLCAmcEdibC0+bXNpX2NvbmZpZy52YWx1ZSk7CisKKwkvKiBCeSBkZWZhdWx0LCBkaXNhYmxlIHRoZSB3YXRjaGRvZyB0aW1lci4gIEl0IHdpbGwgYmUgZW5hYmxlZCB3aGVuCisJICogYSBwYWNrZXQgaXMgcXVldWVkLgorCSAqLworCXdyaXRlbCgwLCAmcEdibC0+d2F0Y2hkb2dfdGltZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBDb25maWdNTUNSZWdzIC0gVXNlZCB0byBjb25maWd1cmUgdGhlIG1haW4gbWVtb3J5IHJlZ2lzdGVycyBpbiB0aGUgSkFHQ29yZQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ01NQ1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlNTUNfQ1RSTF90IG1tY19jdHJsID0geyAwIH07CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQWxsIHdlIG5lZWQgdG8gZG8gaXMgaW5pdGlhbGl6ZSB0aGUgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwltbWNfY3RybC5iaXRzLmZvcmNlX2NlID0gMHgwOworCW1tY19jdHJsLmJpdHMucnhkbWFfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnR4ZG1hX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy50eG1hY19kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMucnhtYWNfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLmFyYl9kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMubW1jX2VuYWJsZSA9IDB4MTsKKworCXdyaXRlbChtbWNfY3RybC52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tbWMubW1jX2N0cmwudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQzMl90IE1hc2tWYWx1ZTsKKworCS8qIEVuYWJsZSBhbGwgZ2xvYmFsIGludGVycnVwdHMgKi8KKwlpZiAoKGFkYXB0ZXItPkZsb3dDb250cm9sID09IFR4T25seSkgfHwgKGFkYXB0ZXItPkZsb3dDb250cm9sID09IEJvdGgpKSB7CisJCU1hc2tWYWx1ZSA9IElOVF9NQVNLX0VOQUJMRTsKKwl9IGVsc2UgeworCQlNYXNrVmFsdWUgPSBJTlRfTUFTS19FTkFCTEVfTk9fRkxPVzsKKwl9CisKKwlpZiAoYWRhcHRlci0+RHJpdmVyTm9QaHlBY2Nlc3MpIHsKKwkJTWFza1ZhbHVlIHw9IDB4MTAwMDA7CisJfQorCisJYWRhcHRlci0+Q2FjaGVkTWFza1ZhbHVlLnZhbHVlID0gTWFza1ZhbHVlOworCXdyaXRlbChNYXNrVmFsdWUsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwuaW50X21hc2sudmFsdWUpOworfQorCit2b2lkIGV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICogYWRhcHRlcikKK3sKKwkvKiBEaXNhYmxlIGFsbCBnbG9iYWwgaW50ZXJydXB0cyAqLworCWFkYXB0ZXItPkNhY2hlZE1hc2tWYWx1ZS52YWx1ZSA9IElOVF9NQVNLX0RJU0FCTEU7CisJd3JpdGVsKElOVF9NQVNLX0RJU0FCTEUsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwuaW50X21hc2sudmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzgyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2phZ2NvcmUuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8KKyAqICAgICAgICAgICAgICAgICAgICB0aGUgSkFHQ29yZQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX0pBR0NPUkVfSF9fCisjZGVmaW5lIF9fRVQxMzEwX0pBR0NPUkVfSF9fCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworCisjZGVmaW5lIElOVEVSTkFMX01FTV9TSVpFICAgICAgIDB4NDAwCS8vMTAyNCBvZiBpbnRlcm5hbCBtZW1vcnkKKyNkZWZpbmUgSU5URVJOQUxfTUVNX1JYX09GRlNFVCAgMHgxRkYJLy81MCUgICBUeCwgNTAlICAgUngKKworI2RlZmluZSBSRUdTX01BWF9BUlJBWSAgICAgICAgICA0MDk2CisKKy8qCisgKiBGb3IgaW50ZXJydXB0cywgbm9ybWFsIHJ1bm5pbmcgaXM6CisgKiAgICAgICByeGRtYV94ZnJfZG9uZSwgcGh5X2ludGVycnVwdCwgbWFjX3N0YXRfaW50ZXJydXB0LAorICogICAgICAgd2F0Y2hkb2dfaW50ZXJydXB0ICYgdHhkbWFfeGZlcl9kb25lCisgKgorICogSW4gYm90aCBjYXNlcywgd2hlbiBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBmb3IgZWl0aGVyIFR4IG9yIGJpLWRpcmVjdGlvbiwKKyAqIHdlIGFkZGl0aW9uYWwgZW5hYmxlIHJ4X2ZicjBfbG93IGFuZCByeF9mYnIxX2xvdywgc28gd2Uga25vdyB3aGVuIHRoZQorICogYnVmZmVyIHJpbmdzIGFyZSBydW5uaW5nIGxvdy4KKyAqLworI2RlZmluZSBJTlRfTUFTS19ESVNBQkxFICAgICAgICAgICAgMHhmZmZmZmZmZgorCisvLyBOT1RFOiBNYXNraW5nIG91dCBNQUNfU1RBVCBJbnRlcnJ1cHQgZm9yIG5vdy4uLgorLy8jZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZjZiZjE3CisvLyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFX05PX0ZMT1cgICAgIDB4ZmZmNmJmZDcKKyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFICAgICAgICAgICAgIDB4ZmZmZWJmMTcKKyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFX05PX0ZMT1cgICAgIDB4ZmZmZWJmZDcKKworLyogREFUQSBTVFJVQ1RVUkVTIEZPUiBESVJFQ1QgUkVHSVNURVIgQUNDRVNTICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OCBiUmVhZFdyaXRlOworCXUzMiBuUmVnQ291bnQ7CisJdTMyIG5EYXRhW1JFR1NfTUFYX0FSUkFZXTsKKwl1MzIgbk9mZnNldHNbUkVHU19NQVhfQVJSQVldOworfSBKQUdDT1JFX0FDQ0VTU19SRUdTLCAqUEpBR0NPUkVfQUNDRVNTX1JFR1M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OCBiUmVhZFdyaXRlOworCXUzMiBuRGF0YVdpZHRoOworCXUzMiBuUmVnQ291bnQ7CisJdTMyIG5PZmZzZXRzW1JFR1NfTUFYX0FSUkFZXTsKKwl1MzIgbkRhdGFbUkVHU19NQVhfQVJSQVldOworfSBQQ0lfQ0ZHX1NQQUNFX1JFR1MsICpQUENJX0NGR19TUEFDRV9SRUdTOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3ZvaWQgQ29uZmlnR2xvYmFsUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTU1DUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzEwX0pBR0NPUkVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjQ5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYwpAQCAtMCwwICsxLDc5MiBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfbWFjLmMgLSBBbGwgY29kZSBhbmQgcm91dGluZXMgcGVydGFpbmluZyB0byB0aGUgTUFDCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKioKKyAqIENvbmZpZ01hY1JlZ3MxIC0gSW5pdGlhbGl6ZSB0aGUgZmlyc3QgcGFydCBvZiBNQUMgcmVncworICogQHBBZHBhdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ01BQ1JlZ3MxKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9NQUNfdCBfX2lvbWVtICpwTWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWM7CisJTUFDX1NUQVRJT05fQUREUjFfdCBzdGF0aW9uMTsKKwlNQUNfU1RBVElPTl9BRERSMl90IHN0YXRpb24yOworCU1BQ19JUEdfdCBpcGc7CisJTUFDX0hGRFBfdCBoZmRwOworCU1JSV9NR01UX0NGR190IG1paV9tZ210X2NmZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBGaXJzdCB3ZSBuZWVkIHRvIHJlc2V0IGV2ZXJ5dGhpbmcuICBXcml0ZSB0byBNQUMgY29uZmlndXJhdGlvbgorCSAqIHJlZ2lzdGVyIDEgdG8gcGVyZm9ybSByZXNldC4KKwkgKi8KKwl3cml0ZWwoMHhDMDBGMDAwMCwgJnBNYWMtPmNmZzEudmFsdWUpOworCisJLyogTmV4dCBsZXRzIGNvbmZpZ3VyZSB0aGUgTUFDIEludGVyLXBhY2tldCBnYXAgcmVnaXN0ZXIgKi8KKwlpcGcuYml0cy5ub25fQjJCX2lwZ18xID0gMHgzODsJCS8vIDU4ZAorCWlwZy5iaXRzLm5vbl9CMkJfaXBnXzIgPSAweDU4OwkJLy8gODhkCisJaXBnLmJpdHMubWluX2lmZ19lbmZvcmNlID0gMHg1MDsJLy8gODBkCisJaXBnLmJpdHMuQjJCX2lwZyA9IDB4NjA7CQkvLyA5NmQKKwl3cml0ZWwoaXBnLnZhbHVlLCAmcE1hYy0+aXBnLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBIYWxmIER1cGxleCByZWdpc3RlciAqLworCWhmZHAuYml0cy5hbHRfYmViX3RydW5jID0gMHhBOworCWhmZHAuYml0cy5hbHRfYmViX2VuYWJsZSA9IDB4MDsKKwloZmRwLmJpdHMuYnBfbm9fYmFja29mZiA9IDB4MDsKKwloZmRwLmJpdHMubm9fYmFja29mZiA9IDB4MDsKKwloZmRwLmJpdHMuZXhjZXNzX2RlZmVyID0gMHgxOworCWhmZHAuYml0cy5yZXhtaXRfbWF4ID0gMHhGOworCWhmZHAuYml0cy5jb2xsX3dpbmRvdyA9IDB4Mzc7CQkvLyA1NWQKKwl3cml0ZWwoaGZkcC52YWx1ZSwgJnBNYWMtPmhmZHAudmFsdWUpOworCisJLyogTmV4dCBsZXRzIGNvbmZpZ3VyZSB0aGUgTUFDIEludGVyZmFjZSBDb250cm9sIHJlZ2lzdGVyICovCisJd3JpdGVsKDAsICZwTWFjLT5pZl9jdHJsLnZhbHVlKTsKKworCS8qIExldCdzIG1vdmUgb24gdG8gc2V0dGluZyB1cCB0aGUgbWlpIG1hbmFnbWVudCBjb25maWd1cmF0aW9uICovCisJbWlpX21nbXRfY2ZnLmJpdHMucmVzZXRfbWlpX21nbXQgPSAwOworCW1paV9tZ210X2NmZy5iaXRzLnNjYW5fYXV0b19pbmNyZW10ID0gMDsKKwltaWlfbWdtdF9jZmcuYml0cy5wcmVhbWJsZV9zdXBwcmVzcyA9IDA7CisJbWlpX21nbXRfY2ZnLmJpdHMubWdtdF9jbGtfcmVzZXQgPSAweDc7CisJd3JpdGVsKG1paV9tZ210X2NmZy52YWx1ZSwgJnBNYWMtPm1paV9tZ210X2NmZy52YWx1ZSk7CisKKwkvKiBOZXh0IGxldHMgY29uZmlndXJlIHRoZSBNQUMgU3RhdGlvbiBBZGRyZXNzIHJlZ2lzdGVyLiAgVGhlc2UKKwkgKiB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgRUVQUk9NIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc3RvcmVkCisJICogaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLiAgV2Ugd3JpdGUgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIGFkYXB0ZXIKKwkgKiBzdHJ1Y3R1cmUgdG8gdGhlIE1BQyBTdGF0aW9uIEFkZHJlc3MgcmVnaXN0ZXJzIGhpZ2ggYW5kIGxvdy4gIFRoaXMKKwkgKiBzdGF0aW9uIGFkZHJlc3MgaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyBhbmQgY2hlY2tpbmcgcGF1c2UgY29udHJvbAorCSAqIHBhY2tldHMuCisJICovCisJc3RhdGlvbjIuYml0cy5PY3RldDEgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF07CisJc3RhdGlvbjIuYml0cy5PY3RldDIgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV07CisJc3RhdGlvbjEuYml0cy5PY3RldDMgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl07CisJc3RhdGlvbjEuYml0cy5PY3RldDQgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM107CisJc3RhdGlvbjEuYml0cy5PY3RldDUgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF07CisJc3RhdGlvbjEuYml0cy5PY3RldDYgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV07CisJd3JpdGVsKHN0YXRpb24xLnZhbHVlLCAmcE1hYy0+c3RhdGlvbl9hZGRyXzEudmFsdWUpOworCXdyaXRlbChzdGF0aW9uMi52YWx1ZSwgJnBNYWMtPnN0YXRpb25fYWRkcl8yLnZhbHVlKTsKKworCS8qIE1heCBldGhlcm5ldCBwYWNrZXQgaW4gYnl0ZXMgdGhhdCB3aWxsIHBhc3NlZCBieSB0aGUgbWFjIHdpdGhvdXQKKwkgKiBiZWluZyB0cnVuY2F0ZWQuICBBbGxvdyB0aGUgTUFDIHRvIHBhc3MgNCBtb3JlIHRoYW4gb3VyIG1heCBwYWNrZXQKKwkgKiBzaXplLiAgVGhpcyBpcyA0IGZvciB0aGUgRXRoZXJuZXQgQ1JDLgorCSAqCisJICogUGFja2V0cyBsYXJnZXIgdGhhbiAoUmVnaXN0cnlKdW1ib1BhY2tldCkgdGhhdCBkbyBub3QgY29udGFpbiBhCisJICogVkxBTiBJRCB3aWxsIGJlIGRyb3BwZWQgYnkgdGhlIFJ4IGZ1bmN0aW9uLgorCSAqLworCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCArIDQsICZwTWFjLT5tYXhfZm1fbGVuLnZhbHVlKTsKKworCS8qIGNsZWFyIG91dCBNQUMgY29uZmlnIHJlc2V0ICovCisJd3JpdGVsKDAsICZwTWFjLT5jZmcxLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogQ29uZmlnTWFjUmVnczIgLSBJbml0aWFsaXplIHRoZSBzZWNvbmQgcGFydCBvZiBNQUMgcmVncworICogQHBBZHBhdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ01BQ1JlZ3MyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJaW50MzJfdCBkZWxheSA9IDA7CisJc3RydWN0IF9NQUNfdCBfX2lvbWVtICpwTWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWM7CisJTUFDX0NGRzFfdCBjZmcxOworCU1BQ19DRkcyX3QgY2ZnMjsKKwlNQUNfSUZfQ1RSTF90IGlmY3RybDsKKwlUWE1BQ19DVExfdCBjdGw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJY3RsLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eG1hYy5jdGwudmFsdWUpOworCWNmZzEudmFsdWUgPSByZWFkbCgmcE1hYy0+Y2ZnMS52YWx1ZSk7CisJY2ZnMi52YWx1ZSA9IHJlYWRsKCZwTWFjLT5jZmcyLnZhbHVlKTsKKwlpZmN0cmwudmFsdWUgPSByZWFkbCgmcE1hYy0+aWZfY3RybC52YWx1ZSk7CisKKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJY2ZnMi5iaXRzLmlmX21vZGUgPSAweDI7CisJCWlmY3RybC5iaXRzLnBoeV9tb2RlID0gMHgwOworCX0gZWxzZSB7CisJCWNmZzIuYml0cy5pZl9tb2RlID0gMHgxOworCQlpZmN0cmwuYml0cy5waHlfbW9kZSA9IDB4MTsKKwl9CisKKwkvKiBXZSBuZWVkIHRvIGVuYWJsZSBSeC9UeCAqLworCWNmZzEuYml0cy5yeF9lbmFibGUgPSAweDE7CisJY2ZnMS5iaXRzLnR4X2VuYWJsZSA9IDB4MTsKKworCS8qIFNldCB1cCBmbG93IGNvbnRyb2wgKi8KKwljZmcxLmJpdHMudHhfZmxvdyA9IDB4MTsKKworCWlmICgocEFkYXB0ZXItPkZsb3dDb250cm9sID09IFJ4T25seSkgfHwKKwkgICAgKHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQljZmcxLmJpdHMucnhfZmxvdyA9IDB4MTsKKwl9IGVsc2UgeworCQljZmcxLmJpdHMucnhfZmxvdyA9IDB4MDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGxvb3AgYmFjayB0byBvZmYgKi8KKwljZmcxLmJpdHMubG9vcF9iYWNrID0gMDsKKworCXdyaXRlbChjZmcxLnZhbHVlLCAmcE1hYy0+Y2ZnMS52YWx1ZSk7CisKKwkvKiBOb3cgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBNQUMgQ29uZmlndXJhdGlvbiAyIHJlZ2lzdGVyICovCisJY2ZnMi5iaXRzLnByZWFtYmxlX2xlbiA9IDB4NzsKKwljZmcyLmJpdHMuaHVnZV9mcmFtZSA9IDB4MDsKKwkvKiBMRU5HVEggRklFTEQgQ0hFQ0tJTkcgYml0NDogU2V0IHRoaXMgYml0IHRvIGNhdXNlIHRoZSBNQUMgdG8gY2hlY2sKKwkgKiB0aGUgZnJhbWUncyBsZW5ndGggZmllbGQgdG8gZW5zdXJlIGl0IG1hdGNoZXMgdGhlIGFjdHVhbCBkYXRhCisJICogZmllbGQgbGVuZ3RoLiBDbGVhciB0aGlzIGJpdCBpZiBubyBsZW5ndGggZmllbGQgY2hlY2tpbmcgaXMKKwkgKiBkZXNpcmVkLiBJdHMgZGVmYXVsdCBpcyAwLgorCSAqLworCWNmZzIuYml0cy5sZW5fY2hlY2sgPSAweDE7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrID09IGZhbHNlKSB7CisJCWNmZzIuYml0cy5wYWRfY3JjID0gMHgxOworCQljZmcyLmJpdHMuY3JjX2VuYWJsZSA9IDB4MTsKKwl9IGVsc2UgeworCQljZmcyLmJpdHMucGFkX2NyYyA9IDA7CisJCWNmZzIuYml0cy5jcmNfZW5hYmxlID0gMDsKKwl9CisKKwkvKiAxIC0gZnVsbCBkdXBsZXgsIDAgLSBoYWxmLWR1cGxleCAqLworCWNmZzIuYml0cy5mdWxsX2R1cGxleCA9IHBBZGFwdGVyLT51aUR1cGxleE1vZGU7CisJaWZjdHJsLmJpdHMuZ2hkX21vZGUgPSAhcEFkYXB0ZXItPnVpRHVwbGV4TW9kZTsKKworCXdyaXRlbChpZmN0cmwudmFsdWUsICZwTWFjLT5pZl9jdHJsLnZhbHVlKTsKKwl3cml0ZWwoY2ZnMi52YWx1ZSwgJnBNYWMtPmNmZzIudmFsdWUpOworCisJZG8geworCQl1ZGVsYXkoMTApOworCQlkZWxheSsrOworCQljZmcxLnZhbHVlID0gcmVhZGwoJnBNYWMtPmNmZzEudmFsdWUpOworCX0gd2hpbGUgKCghY2ZnMS5iaXRzLnN5bmNkX3J4X2VuIHx8CisJCSAgIWNmZzEuYml0cy5zeW5jZF90eF9lbikgJiYKKwkJIGRlbGF5IDwgMTAwKTsKKworCWlmIChkZWxheSA9PSAxMDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiU3luY2QgYml0cyBkaWQgbm90IHJlc3BvbmQgY29ycmVjdGx5IGNmZzEgd29yZCAweCUwOHhcbiIsCisJCQkgIGNmZzEudmFsdWUpOworCX0KKworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJICAiU3BlZWQgJWQsIER1cCAlZCwgQ0ZHMSAweCUwOHgsIENGRzIgMHglMDh4LCBpZl9jdHJsIDB4JTA4eFxuIiwKKwkJICBwQWRhcHRlci0+dWlMaW5rU3BlZWQsIHBBZGFwdGVyLT51aUR1cGxleE1vZGUsCisJCSAgcmVhZGwoJnBNYWMtPmNmZzEudmFsdWUpLCByZWFkbCgmcE1hYy0+Y2ZnMi52YWx1ZSksCisJCSAgcmVhZGwoJnBNYWMtPmlmX2N0cmwudmFsdWUpKTsKKworCS8qIEVuYWJsZSBUWE1BQyAqLworCWN0bC5iaXRzLnR4bWFjX2VuID0gMHgxOworCWN0bC5iaXRzLmZjX2Rpc2FibGUgPSAweDE7CisJd3JpdGVsKGN0bC52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eG1hYy5jdGwudmFsdWUpOworCisJLyogUmVhZHkgdG8gc3RhcnQgdGhlIFJYRE1BL1RYRE1BIGVuZ2luZSAqLworCWlmICghTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUikpIHsKKwkJZXQxMzF4X3J4X2RtYV9lbmFibGUocEFkYXB0ZXIpOworCQlldDEzMXhfdHhfZG1hX2VuYWJsZShwQWRhcHRlcik7CisJfSBlbHNlIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIkRpZG4ndCBlbmFibGUgUngvVHggZHVlIHRvIGxvdy1wb3dlciBtb2RlXG4iKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIENvbmZpZ1J4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfUlhNQUNfdCBfX2lvbWVtICpwUnhNYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjOworCVJYTUFDX1dPTF9TQV9MT190IHNhX2xvOworCVJYTUFDX1dPTF9TQV9ISV90IHNhX2hpOworCVJYTUFDX1BGX0NUUkxfdCBwZl9jdHJsID0geyAwIH07CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRGlzYWJsZSB0aGUgTUFDIHdoaWxlIGl0IGlzIGJlaW5nIGNvbmZpZ3VyZWQgKGFsc28gZGlzYWJsZSBXT0wpICovCisJd3JpdGVsKDB4OCwgJnBSeE1hYy0+Y3RybC52YWx1ZSk7CisKKwkvKiBJbml0aWFsaXplIFdPTCB0byBkaXNhYmxlZC4gKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMC52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzEyLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMzQudmFsdWUpOworCisJLyogV2UgbmVlZCB0byBzZXQgdGhlIFdPTCBtYXNrMCAtIG1hc2s0IG5leHQuICBXZSBpbml0aWFsaXplIGl0IHRvCisJICogaXRzIGRlZmF1bHQgVmFsdWVzIG9mIDB4MDAwMDAwMDAgYmVjYXVzZSB0aGVyZSBhcmUgbm90IFdPTCBtYXNrcworCSAqIGFzIG9mIHRoaXMgdGltZS4KKwkgKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazBfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMF93b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazBfd29yZDMpOworCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2sxX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazFfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2sxX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMl93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2syX3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMl93b3JkMyk7CisKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazNfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrM193b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazNfd29yZDMpOworCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2s0X3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazRfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2s0X3dvcmQzKTsKKworCS8qIExldHMgc2V0dXAgdGhlIFdPTCBTb3VyY2UgQWRkcmVzcyAqLworCXNhX2xvLmJpdHMuc2EzID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdOworCXNhX2xvLmJpdHMuc2E0ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdOworCXNhX2xvLmJpdHMuc2E1ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdOworCXNhX2xvLmJpdHMuc2E2ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdOworCXdyaXRlbChzYV9sby52YWx1ZSwgJnBSeE1hYy0+c2FfbG8udmFsdWUpOworCisJc2FfaGkuYml0cy5zYTEgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF07CisJc2FfaGkuYml0cy5zYTIgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV07CisJd3JpdGVsKHNhX2hpLnZhbHVlLCAmcFJ4TWFjLT5zYV9oaS52YWx1ZSk7CisKKwkvKiBEaXNhYmxlIGFsbCBQYWNrZXQgRmlsdGVyaW5nICovCisJd3JpdGVsKDAsICZwUnhNYWMtPnBmX2N0cmwudmFsdWUpOworCisJLyogTGV0J3MgaW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBQYWNrZXQgZmlsdGVyaW5nIGFkZHJlc3MgKi8KKwlpZiAocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCkgeworCQlTZXR1cERldmljZUZvclVuaWNhc3QocEFkYXB0ZXIpOworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX3VuaV9lbiA9IDE7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMS52YWx1ZSk7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT51bmlfcGZfYWRkcjIudmFsdWUpOworCQl3cml0ZWwoMCwgJnBSeE1hYy0+dW5pX3BmX2FkZHIzLnZhbHVlKTsKKwl9CisKKwkvKiBMZXQncyBpbml0aWFsaXplIHRoZSBNdWx0aWNhc3QgaGFzaCAqLworCWlmIChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpIHsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDA7CisJfSBlbHNlIHsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDE7CisJCVNldHVwRGV2aWNlRm9yTXVsdGljYXN0KHBBZGFwdGVyKTsKKwl9CisKKwkvKiBSdW50IHBhY2tldCBmaWx0ZXJpbmcuICBEaWRuJ3Qgd29yayBpbiB2ZXJzaW9uIEEgc2lsaWNvbi4gKi8KKwlwZl9jdHJsLmJpdHMubWluX3BrdF9zaXplID0gTklDX01JTl9QQUNLRVRfU0laRSArIDQ7CisJcGZfY3RybC5iaXRzLmZpbHRlcl9mcmFnX2VuID0gMTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA+IDgxOTIpIHsKKwkJUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCBtY2lmX2N0cmxfbWF4X3NlZzsKKworCQkvKiBJbiBvcmRlciB0byB0cmFuc21pdCBqdW1ibyBwYWNrZXRzIGdyZWF0ZXIgdGhhbiA4aywgdGhlCisJCSAqIEZJRk8gYmV0d2VlbiBSeE1BQyBhbmQgUnhETUEgbmVlZHMgdG8gYmUgcmVkdWNlZCBpbiBzaXplCisJCSAqIHRvICgxNmsgLSBKdW1ibyBwYWNrZXQgc2l6ZSkuICBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhpcywKKwkJICogd2UgbXVzdCB1c2UgImN1dCB0aHJvdWdoIiBtb2RlIGluIHRoZSBSeE1BQywgd2hpY2ggY2hvcHMKKwkJICogcGFja2V0cyBkb3duIGludG8gc2VnbWVudHMgd2hpY2ggYXJlIChtYXhfc2l6ZSAqIDE2KS4gIEluCisJCSAqIHRoaXMgY2FzZSB3ZSBzZWxlY3RlZCAyNTYgYnl0ZXMsIHNpbmNlIHRoaXMgaXMgdGhlIHNpemUgb2YKKwkJICogdGhlIFBDSS1FeHByZXNzIFRMUCdzIHRoYXQgdGhlIDEzMTAgdXNlcy4KKwkJICovCisJCW1jaWZfY3RybF9tYXhfc2VnLmJpdHMuc2VnX2VuID0gMHgxOworCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLmZjX2VuID0gMHgwOworCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLm1heF9zaXplID0gMHgxMDsKKworCQl3cml0ZWwobWNpZl9jdHJsX21heF9zZWcudmFsdWUsCisJCSAgICAgICAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDAsICZwUnhNYWMtPm1jaWZfY3RybF9tYXhfc2VnLnZhbHVlKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBNQ0lGIHdhdGVyIG1hcmtzICovCisJd3JpdGVsKDAsICZwUnhNYWMtPm1jaWZfd2F0ZXJfbWFyay52YWx1ZSk7CisKKwkvKiAgSW5pdGlhbGl6ZSB0aGUgTUlGIGNvbnRyb2wgKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgU3BhY2UgQXZhaWxhYmxlIFJlZ2lzdGVyICovCisJd3JpdGVsKDAsICZwUnhNYWMtPnNwYWNlX2F2YWlsLnZhbHVlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHRoZSBtaWZfY3RybCByZWdpc3RlcgorCSAqIGJpdCAzOiAgUmVjZWl2ZSBjb2RlIGVycm9yLiBPbmUgb3IgbW9yZSBuaWJibGVzIHdlcmUgc2lnbmFsZWQgYXMKKwkgKgkgICBlcnJvcnMgIGR1cmluZyB0aGUgcmVjZXB0aW9uIG9mIHRoZSBwYWNrZXQuICBDbGVhciB0aGlzCisJICoJICAgYml0IGluIEdpZ2FiaXQsIHNldCBpdCBpbiAxMDBNYml0LiAgVGhpcyB3YXMgZGVyaXZlZAorCSAqCSAgIGV4cGVyaW1lbnRhbGx5IGF0IFVOSC4KKwkgKiBiaXQgNDogIFJlY2VpdmUgQ1JDIGVycm9yLiBUaGUgcGFja2V0J3MgQ1JDIGRpZCBub3QgbWF0Y2ggdGhlCisJICoJICAgaW50ZXJuYWxseSBnZW5lcmF0ZWQgQ1JDLgorCSAqIGJpdCA1OiAgUmVjZWl2ZSBsZW5ndGggY2hlY2sgZXJyb3IuIEluZGljYXRlcyB0aGF0IGZyYW1lIGxlbmd0aAorCSAqCSAgIGZpZWxkIHZhbHVlIGluIHRoZSBwYWNrZXQgZG9lcyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBkYXRhCisJICoJICAgYnl0ZSBsZW5ndGggYW5kIGlzIG5vdCBhIHR5cGUgZmllbGQuCisJICogYml0IDE2OiBSZWNlaXZlIGZyYW1lIHRydW5jYXRlZC4KKwkgKiBiaXQgMTc6IERyb3AgcGFja2V0IGVuYWJsZQorCSAqLworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDBNQlBTKSB7CisJCXdyaXRlbCgweDMwMDM4LCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDB4MzAwMzAsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKwl9CisKKwkvKiBGaW5hbGx5IHdlIGluaXRpYWxpemUgUnhNYWMgdG8gYmUgZW5hYmxlZCAmIFdPTCBkaXNhYmxlZC4gIFBhY2tldAorCSAqIGZpbHRlciBpcyBhbHdheXMgZW5hYmxlZCBzaW5jZSBpdCBpcyB3aGVyZSB0aGUgcnVudCBwYWNrZXRzIGFyZQorCSAqIHN1cHBvc2VkIHRvIGJlIGRyb3BwZWQuICBGb3IgdmVyc2lvbiBBIHNpbGljb24sIHJ1bnQgcGFja2V0CisJICogZHJvcHBpbmcgZG9lc24ndCB3b3JrLCBzbyBpdCBpcyBkaXNhYmxlZCBpbiB0aGUgcGZfY3RybCByZWdpc3RlciwKKwkgKiBidXQgd2Ugc3RpbGwgbGVhdmUgdGhlIHBhY2tldCBmaWx0ZXIgb24uCisJICovCisJd3JpdGVsKHBmX2N0cmwudmFsdWUsICZwUnhNYWMtPnBmX2N0cmwudmFsdWUpOworCXdyaXRlbCgweDksICZwUnhNYWMtPmN0cmwudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBDb25maWdUeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1RYTUFDX3QgX19pb21lbSAqcFR4TWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eG1hYzsKKwlUWE1BQ19DRl9QQVJBTV90IExvY2FsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBDb250cm9sIEZyYW1lIFBhcmFtZXRlcnMKKwkgKiBjZnB0IC0gY29udHJvbCBmcmFtZSBwYXVzZSB0aW1lciBzZXQgdG8gNjQgKDB4NDApCisJICogY2ZlcCAtIGNvbnRyb2wgZnJhbWUgZXh0ZW5kZWQgcGF1c2UgdGltZXIgc2V0IHRvIDB4MAorCSAqLworCWlmIChwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gTm9uZSkgeworCQl3cml0ZWwoMCwgJnBUeE1hYy0+Y2ZfcGFyYW0udmFsdWUpOworCX0gZWxzZSB7CisJCUxvY2FsLmJpdHMuY2ZwdCA9IDB4NDA7CisJCUxvY2FsLmJpdHMuY2ZlcCA9IDB4MDsKKwkJd3JpdGVsKExvY2FsLnZhbHVlLCAmcFR4TWFjLT5jZl9wYXJhbS52YWx1ZSk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBDb25maWdNYWNTdGF0UmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfTUFDX1NUQVRfdCBfX2lvbWVtICpwRGV2TWFjU3RhdCA9CisJCSZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBOZXh0IHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIE1BQ19TVEFUIHJlZ2lzdGVycyB0byB6ZXJvIG9uCisJICogdGhlIGRldmljZS4KKwkgKi8KKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SRmNzKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SQWxuKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SRmxyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SRHJwKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SQ2RlKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5ST3ZyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5SRnJnKTsKKworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlRTY2wpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlREZnIpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlRNY2wpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlRMY2wpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlROY2wpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlRPdnIpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlRVbmQpOworCisJLyogVW5tYXNrIGFueSBjb3VudGVycyB0aGF0IHdlIHdhbnQgdG8gdHJhY2sgdGhlIG92ZXJmbG93IG9mLgorCSAqIEluaXRpYWxseSB0aGlzIHdpbGwgYmUgYWxsIGNvdW50ZXJzLiAgSXQgbWF5IGJlY29tZSBjbGVhciBsYXRlcgorCSAqIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gdHJhY2sgYWxsIGNvdW50ZXJzLgorCSAqLworCXsKKwkJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTFNID0geyAweGZmZmZmZmZmIH07CisKKwkJQ2FycnkxTS5iaXRzLnJkcnAgPSAwOworCQlDYXJyeTFNLmJpdHMucmpiciA9IDE7CisJCUNhcnJ5MU0uYml0cy5yZnJnID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJvdnIgPSAwOworCQlDYXJyeTFNLmJpdHMucnVuZCA9IDE7CisJCUNhcnJ5MU0uYml0cy5yY3NlID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJjZGUgPSAwOworCQlDYXJyeTFNLmJpdHMucmZsciA9IDA7CisJCUNhcnJ5MU0uYml0cy5yYWxuID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJ4dW8gPSAxOworCQlDYXJyeTFNLmJpdHMucnhwZiA9IDE7CisJCUNhcnJ5MU0uYml0cy5yeGNmID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJiY2EgPSAxOworCQlDYXJyeTFNLmJpdHMucm1jYSA9IDE7CisJCUNhcnJ5MU0uYml0cy5yZmNzID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJwa3QgPSAxOworCQlDYXJyeTFNLmJpdHMucmJ5dCA9IDE7CisJCUNhcnJ5MU0uYml0cy50cm1ndiA9IDE7CisJCUNhcnJ5MU0uYml0cy50cm1heCA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjFrID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRyNTExID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRyMjU1ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRyMTI3ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRyNjQgPSAxOworCisJCXdyaXRlbChDYXJyeTFNLnZhbHVlLCAmcERldk1hY1N0YXQtPkNhcnJ5MU0udmFsdWUpOworCX0KKworCXsKKwkJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTJNID0geyAweGZmZmZmZmZmIH07CisKKwkJQ2FycnkyTS5iaXRzLnRkcnAgPSAxOworCQlDYXJyeTJNLmJpdHMudHBmaCA9IDE7CisJCUNhcnJ5Mk0uYml0cy50bmNsID0gMDsKKwkJQ2FycnkyTS5iaXRzLnR4Y2wgPSAxOworCQlDYXJyeTJNLmJpdHMudGxjbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50bWNsID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRzY2wgPSAwOworCQlDYXJyeTJNLmJpdHMudGVkZiA9IDE7CisJCUNhcnJ5Mk0uYml0cy50ZGZyID0gMDsKKwkJQ2FycnkyTS5iaXRzLnR4cGYgPSAxOworCQlDYXJyeTJNLmJpdHMudGJjYSA9IDE7CisJCUNhcnJ5Mk0uYml0cy50bWNhID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRwa3QgPSAxOworCQlDYXJyeTJNLmJpdHMudGJ5dCA9IDE7CisJCUNhcnJ5Mk0uYml0cy50ZnJnID0gMTsKKwkJQ2FycnkyTS5iaXRzLnR1bmQgPSAwOworCQlDYXJyeTJNLmJpdHMudG92ciA9IDA7CisJCUNhcnJ5Mk0uYml0cy50eGNmID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRmY3MgPSAxOworCQlDYXJyeTJNLmJpdHMudGpiciA9IDE7CisKKwkJd3JpdGVsKENhcnJ5Mk0udmFsdWUsICZwRGV2TWFjU3RhdC0+Q2FycnkyTS52YWx1ZSk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBDb25maWdGbG93Q29udHJvbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKiBwQWRhcHRlcikKK3sKKwlpZiAocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9PSAwKSB7CisJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IE5vbmU7CisJfSBlbHNlIHsKKwkJY2hhciBSZW1vdGVQYXVzZSwgUmVtb3RlQXN5bmNQYXVzZTsKKworCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQocEFkYXB0ZXIsCisJCQkJICAgICAgVFJVRVBIWV9CSVRfUkVBRCwgNSwgMTAsICZSZW1vdGVQYXVzZSk7CisJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChwQWRhcHRlciwKKwkJCQkgICAgICBUUlVFUEhZX0JJVF9SRUFELCA1LCAxMSwKKwkJCQkgICAgICAmUmVtb3RlQXN5bmNQYXVzZSk7CisKKwkJaWYgKChSZW1vdGVQYXVzZSA9PSBUUlVFUEhZX0JJVF9TRVQpICYmCisJCSAgICAoUmVtb3RlQXN5bmNQYXVzZSA9PSBUUlVFUEhZX0JJVF9TRVQpKSB7CisJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBwQWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbDsKKwkJfSBlbHNlIGlmICgoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9CSVRfU0VUKSAmJgorCQkJICAgKFJlbW90ZUFzeW5jUGF1c2UgPT0gVFJVRVBIWV9CSVRfQ0xFQVIpKSB7CisJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IEJvdGg7CisJCQl9IGVsc2UgeworCQkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IE5vbmU7CisJCQl9CisJCX0gZWxzZSBpZiAoKFJlbW90ZVBhdXNlID09IFRSVUVQSFlfQklUX0NMRUFSKSAmJgorCQkJICAgKFJlbW90ZUFzeW5jUGF1c2UgPT0gVFJVRVBIWV9CSVRfQ0xFQVIpKSB7CisJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCQl9IGVsc2Ugey8qIGlmIChSZW1vdGVQYXVzZSA9PSBUUlVFUEhZX0NMRUFSX0JJVCAmJgorCQkJICAgICAgIFJlbW90ZUFzeW5jUGF1c2UgPT0gVFJVRVBIWV9TRVRfQklUKSAqLworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBSeE9ubHk7CisJCQl9IGVsc2UgeworCQkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IE5vbmU7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyAtIFVwZGF0ZSB0aGUgbG9jYWwgY29weSBvZiB0aGUgc3RhdGlzdGljcworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFVwZGF0ZU1hY1N0YXRIb3N0Q291bnRlcnMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX2NlX3N0YXRzX3QgKnN0YXRzID0gJnBBZGFwdGVyLT5TdGF0czsKKwlzdHJ1Y3QgX01BQ19TVEFUX3QgX19pb21lbSAqcERldk1hY1N0YXQgPQorCQkmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQ7CisKKwlzdGF0cy0+Y29sbGlzaW9ucyArPSByZWFkbCgmcERldk1hY1N0YXQtPlROY2wpOworCXN0YXRzLT5maXJzdF9jb2xsaXNpb24gKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UU2NsKTsKKwlzdGF0cy0+dHhfZGVmZXJyZWQgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5URGZyKTsKKwlzdGF0cy0+ZXhjZXNzaXZlX2NvbGxpc2lvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UTWNsKTsKKwlzdGF0cy0+bGF0ZV9jb2xsaXNpb25zICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VExjbCk7CisJc3RhdHMtPnR4X3VmbG8gKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UVW5kKTsKKwlzdGF0cy0+bWF4X3BrdF9lcnJvciArPSByZWFkbCgmcERldk1hY1N0YXQtPlRPdnIpOworCisJc3RhdHMtPmFsaWdubWVudF9lcnIgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SQWxuKTsKKwlzdGF0cy0+Y3JjX2VyciArPSByZWFkbCgmcERldk1hY1N0YXQtPlJDZGUpOworCXN0YXRzLT5ub3JjdmJ1ZiArPSByZWFkbCgmcERldk1hY1N0YXQtPlJEcnApOworCXN0YXRzLT5yeF9vdl9mbG93ICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+Uk92cik7CisJc3RhdHMtPmNvZGVfdmlvbGF0aW9ucyArPSByZWFkbCgmcERldk1hY1N0YXQtPlJGY3MpOworCXN0YXRzLT5sZW5ndGhfZXJyICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkZscik7CisKKwlzdGF0cy0+b3RoZXJfZXJyb3JzICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkZyZyk7Cit9CisKKy8qKgorICogSGFuZGxlTWFjU3RhdEludGVycnVwdAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIE9uZSBvZiB0aGUgTUFDU1RBVCBjb3VudGVycyBoYXMgd3JhcHBlZC4gIFVwZGF0ZSB0aGUgbG9jYWwgY29weSBvZgorICogdGhlIHN0YXRpc3RpY3MgaGVsZCBpbiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUsIGNoZWNraW5nIHRoZSAid3JhcCIKKyAqIGJpdCBmb3IgZWFjaCBjb3VudGVyLgorICovCit2b2lkIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlNQUNfU1RBVF9SRUdfMV90IENhcnJ5MTsKKwlNQUNfU1RBVF9SRUdfMl90IENhcnJ5MjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgYml0cyBmcm9tIHRoZSByZWdpc3RlcihzKS4gIFRoZXNlIGFyZSBDbGVhciBPbgorCSAqIFdyaXRlLgorCSAqLworCUNhcnJ5MS52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTEudmFsdWUpOworCUNhcnJ5Mi52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTIudmFsdWUpOworCisJd3JpdGVsKENhcnJ5MS52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0LkNhcnJ5MS52YWx1ZSk7CisJd3JpdGVsKENhcnJ5Mi52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0LkNhcnJ5Mi52YWx1ZSk7CisKKwkvKiBXZSBuZWVkIHRvIGRvIHVwZGF0ZSB0aGUgaG9zdCBjb3B5IG9mIGFsbCB0aGUgTUFDX1NUQVQgY291bnRlcnMuCisJICogRm9yIGVhY2ggY291bnRlciwgY2hlY2sgaXQncyBvdmVyZmxvdyBiaXQuICBJZiB0aGUgb3ZlcmZsb3cgYml0IGlzCisJICogc2V0LCB0aGVuIGluY3JlbWVudCB0aGUgaG9zdCB2ZXJzaW9uIG9mIHRoZSBjb3VudCBieSBvbmUgY29tcGxldGUKKwkgKiByZXZvbHV0aW9uIG9mIHRoZSBjb3VudGVyLiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBjb3VudGVyCisJICogYmxvY2sgaW5kaWNhdGVzIHRoYXQgb25lIG9mIHRoZSBjb3VudGVycyBoYXMgd3JhcHBlZC4KKwkgKi8KKwlpZiAoQ2FycnkxLmJpdHMucmZjcykgeworCQlwQWRhcHRlci0+U3RhdHMuY29kZV92aW9sYXRpb25zICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yYWxuKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5hbGlnbm1lbnRfZXJyICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yZmxyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5sZW5ndGhfZXJyICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yZnJnKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5vdGhlcl9lcnJvcnMgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJjZGUpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmNyY19lcnIgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJvdnIpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLnJ4X292X2Zsb3cgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJkcnApIHsKKwkJcEFkYXB0ZXItPlN0YXRzLm5vcmN2YnVmICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50b3ZyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5tYXhfcGt0X2Vycm9yICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50dW5kKSB7CisJCXBBZGFwdGVyLT5TdGF0cy50eF91ZmxvICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50c2NsKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5maXJzdF9jb2xsaXNpb24gKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRkZnIpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLnR4X2RlZmVycmVkICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50bWNsKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5leGNlc3NpdmVfY29sbGlzaW9ucyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudGxjbCkgeworCQlwQWRhcHRlci0+U3RhdHMubGF0ZV9jb2xsaXNpb25zICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50bmNsKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5jb2xsaXNpb25zICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBTZXR1cERldmljZUZvck11bHRpY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfUlhNQUNfdCBfX2lvbWVtICpyeG1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWM7CisJdWludDMyX3QgbkluZGV4OworCXVpbnQzMl90IHJlc3VsdDsKKwl1aW50MzJfdCBoYXNoMSA9IDA7CisJdWludDMyX3QgaGFzaDIgPSAwOworCXVpbnQzMl90IGhhc2gzID0gMDsKKwl1aW50MzJfdCBoYXNoNCA9IDA7CisJUE1fQ1NSX3QgcG1fY3NyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIElmIEVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1QgaXMgc3BlY2lmaWVkLCB0aGVuIHdlIHByb3Zpc2lvbgorCSAqIHRoZSBtdWx0aS1jYXN0IExJU1QuICBJZiBpdCBpcyBOT1Qgc3BlY2lmaWVkLCAoYW5kICJBTEwiIGlzIG5vdAorCSAqIHNwZWNpZmllZCkgdGhlbiB3ZSBzaG91bGQgcGFzcyBOTyBtdWx0aS1jYXN0IGFkZHJlc3NlcyB0byB0aGUKKwkgKiBkcml2ZXIuCisJICovCisJaWYgKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUKSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJNVUxUSUNBU1QgZmxhZyBpcyBzZXQsIE1DQ291bnQ6ICVkXG4iLAorCQkJICAgIHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudCk7CisKKwkJLyogTG9vcCB0aHJvdWdoIG91ciBtdWx0aWNhc3QgYXJyYXkgYW5kIHNldCB1cCB0aGUgZGV2aWNlICovCisJCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgcEFkYXB0ZXItPk1DQWRkcmVzc0NvdW50OyBuSW5kZXgrKykgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJNQ0xpc3RbJWRdOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkgICAgbkluZGV4LAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMF0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVsxXSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzJdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bM10sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVs0XSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzVdKTsKKworCQkJcmVzdWx0ID0gZXRoZXJfY3JjKDYsIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XSk7CisKKwkJCXJlc3VsdCA9IChyZXN1bHQgJiAweDNGODAwMDAwKSA+PiAyMzsKKworCQkJaWYgKHJlc3VsdCA8IDMyKSB7CisJCQkJaGFzaDEgfD0gKDEgPDwgcmVzdWx0KTsKKwkJCX0gZWxzZSBpZiAoKDMxIDwgcmVzdWx0KSAmJiAocmVzdWx0IDwgNjQpKSB7CisJCQkJcmVzdWx0IC09IDMyOworCQkJCWhhc2gyIHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9IGVsc2UgaWYgKCg2MyA8IHJlc3VsdCkgJiYgKHJlc3VsdCA8IDk2KSkgeworCQkJCXJlc3VsdCAtPSA2NDsKKwkJCQloYXNoMyB8PSAoMSA8PCByZXN1bHQpOworCQkJfSBlbHNlIHsKKwkJCQlyZXN1bHQgLT0gOTY7CisJCQkJaGFzaDQgfD0gKDEgPDwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFdyaXRlIG91dCB0aGUgbmV3IGhhc2ggdG8gdGhlIGRldmljZSAqLworCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJd3JpdGVsKGhhc2gxLCAmcnhtYWMtPm11bHRpX2hhc2gxKTsKKwkJd3JpdGVsKGhhc2gyLCAmcnhtYWMtPm11bHRpX2hhc2gyKTsKKwkJd3JpdGVsKGhhc2gzLCAmcnhtYWMtPm11bHRpX2hhc2gzKTsKKwkJd3JpdGVsKGhhc2g0LCAmcnhtYWMtPm11bHRpX2hhc2g0KTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIFNldHVwRGV2aWNlRm9yVW5pY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfUlhNQUNfdCBfX2lvbWVtICpyeG1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWM7CisJUlhNQUNfVU5JX1BGX0FERFIxX3QgdW5pX3BmMTsKKwlSWE1BQ19VTklfUEZfQUREUjJfdCB1bmlfcGYyOworCVJYTUFDX1VOSV9QRl9BRERSM190IHVuaV9wZjM7CisJUE1fQ1NSX3QgcG1fY3NyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldCB1cCB1bmljYXN0IHBhY2tldCBmaWx0ZXIgcmVnIDMgdG8gYmUgdGhlIGZpcnN0IHR3byBvY3RldHMgb2YKKwkgKiB0aGUgTUFDIGFkZHJlc3MgZm9yIGJvdGggYWRkcmVzcworCSAqCisJICogU2V0IHVwIHVuaWNhc3QgcGFja2V0IGZpbHRlciByZWcgMiB0byBiZSB0aGUgb2N0ZXRzIDIgLSA1IG9mIHRoZQorCSAqIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgYWRkcmVzcworCSAqCisJICogU2V0IHVwIHVuaWNhc3QgcGFja2V0IGZpbHRlciByZWcgMyB0byBiZSB0aGUgb2N0ZXRzIDIgLSA1IG9mIHRoZQorCSAqIE1BQyBhZGRyZXNzIGZvciBmaXJzdCBhZGRyZXNzCisJICovCisJdW5pX3BmMy5iaXRzLmFkZHIxXzEgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF07CisJdW5pX3BmMy5iaXRzLmFkZHIxXzIgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV07CisJdW5pX3BmMy5iaXRzLmFkZHIyXzEgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF07CisJdW5pX3BmMy5iaXRzLmFkZHIyXzIgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV07CisKKwl1bmlfcGYyLmJpdHMuYWRkcjJfMyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwl1bmlfcGYyLmJpdHMuYWRkcjJfNCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwl1bmlfcGYyLmJpdHMuYWRkcjJfNSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwl1bmlfcGYyLmJpdHMuYWRkcjJfNiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKworCXVuaV9wZjEuYml0cy5hZGRyMV8zID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdOworCXVuaV9wZjEuYml0cy5hZGRyMV80ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdOworCXVuaV9wZjEuYml0cy5hZGRyMV81ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdOworCXVuaV9wZjEuYml0cy5hZGRyMV82ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdOworCisJcG1fY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKwlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMCkgeworCQl3cml0ZWwodW5pX3BmMS52YWx1ZSwgJnJ4bWFjLT51bmlfcGZfYWRkcjEudmFsdWUpOworCQl3cml0ZWwodW5pX3BmMi52YWx1ZSwgJnJ4bWFjLT51bmlfcGZfYWRkcjIudmFsdWUpOworCQl3cml0ZWwodW5pX3BmMy52YWx1ZSwgJnJ4bWFjLT51bmlfcGZfYWRkcjMudmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjZjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9tYWMuaCAtICBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQorICogICAgICAgICAgICAgICAgIE1BQy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfRVQxMzEwX01BQ19IXworI2RlZmluZSBfRVQxMzEwX01BQ19IXworCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworCisjZGVmaW5lIENPVU5URVJfV1JBUF8yOF9CSVQgMHgxMDAwMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMjJfQklUIDB4NDAwMDAwCisjZGVmaW5lIENPVU5URVJfV1JBUF8xNl9CSVQgMHgxMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMTJfQklUIDB4MTAwMAorCisjZGVmaW5lIENPVU5URVJfTUFTS18yOF9CSVQgKENPVU5URVJfV1JBUF8yOF9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMjJfQklUIChDT1VOVEVSX1dSQVBfMjJfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzE2X0JJVCAoQ09VTlRFUl9XUkFQXzE2X0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18xMl9CSVQgKENPVU5URVJfV1JBUF8xMl9CSVQgLSAxKQorCisjZGVmaW5lIFVQREFURV9DT1VOVEVSKEhvc3RDbnQsRGV2Q250KSBcCisgICAgSG9zdENudCA9IEhvc3RDbnQgKyBEZXZDbnQ7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKwordm9pZCBDb25maWdNQUNSZWdzMShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdNQUNSZWdzMihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdSeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnVHhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ01hY1N0YXRSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ0Zsb3dDb250cm9sKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFVwZGF0ZU1hY1N0YXRIb3N0Q291bnRlcnMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgSGFuZGxlTWFjU3RhdEludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBTZXR1cERldmljZUZvck11bHRpY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBTZXR1cERldmljZUZvclVuaWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9FVDEzMTBfTUFDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGZhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYwpAQCAtMCwwICsxLDEyODEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3BoeS5jIC0gUm91dGluZXMgZm9yIGNvbmZpZ3VyaW5nIGFuZCBhY2Nlc3NpbmcgdGhlIFBIWQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X25ldGRldi5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKiBQcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgd2l0aCBsb2NhbCBzY29wZSAqLworc3RhdGljIGludCBldDEzMXhfeGN2cl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qKgorICogUGh5TWlSZWFkIC0gUmVhZCBmcm9tIHRoZSBQSFkgdGhyb3VnaCB0aGUgTUlJIEludGVyZmFjZSBvbiB0aGUgTUFDCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHhjdnJBZGRyOiB0aGUgYWRkcmVzcyBvZiB0aGUgdHJhbnNjaWV2ZXIKKyAqIEB4Y3ZyUmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICogQHZhbHVlOiBwb2ludGVyIHRvIGEgMTYtYml0IHZhbHVlIGluIHdoaWNoIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1aW50OF90IHhjdnJBZGRyLAorCSAgICAgIHVpbnQ4X3QgeGN2clJlZywgdWludDE2X3QgKnZhbHVlKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqbWFjID0gJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlpbnQgc3RhdHVzID0gMDsKKwl1aW50MzJfdCBkZWxheTsKKwlNSUlfTUdNVF9BRERSX3QgbWlpQWRkcjsKKwlNSUlfTUdNVF9DTURfdCBtaWlDbWQ7CisJTUlJX01HTVRfSU5ESUNBVE9SX3QgbWlpSW5kaWNhdG9yOworCisJLyogU2F2ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlZ2lzdGVycyB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvIHdlIGNhbgorCSAqIHNldCB0aGVtIGJhY2sKKwkgKi8KKwltaWlBZGRyLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJbWlpQ21kLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFN0b3AgdGhlIGN1cnJlbnQgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBTZXQgdXAgdGhlIHJlZ2lzdGVyIHdlIG5lZWQgdG8gcmVhZCBmcm9tIG9uIHRoZSBjb3JyZWN0IFBIWSAqLworCXsKKwkJTUlJX01HTVRfQUREUl90IG1paV9tZ210X2FkZHIgPSB7IDAgfTsKKworCQltaWlfbWdtdF9hZGRyLmJpdHMucGh5X2FkZHIgPSB4Y3ZyQWRkcjsKKwkJbWlpX21nbXRfYWRkci5iaXRzLnJlZ19hZGRyID0geGN2clJlZzsKKwkJd3JpdGVsKG1paV9tZ210X2FkZHIudmFsdWUsICZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCX0KKworCS8qIEtpY2sgdGhlIHJlYWQgY3ljbGUgb2ZmICovCisJZGVsYXkgPSAwOworCisJd3JpdGVsKDB4MSwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCWRvIHsKKwkJdWRlbGF5KDUwKTsKKwkJZGVsYXkrKzsKKwkJbWlpSW5kaWNhdG9yLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfaW5kaWNhdG9yLnZhbHVlKTsKKwl9IHdoaWxlICgobWlpSW5kaWNhdG9yLmJpdHMubm90X3ZhbGlkIHx8IG1paUluZGljYXRvci5iaXRzLmJ1c3kpICYmCisJCSBkZWxheSA8IDUwKTsKKworCS8qIElmIHdlIGhpdCB0aGUgbWF4IGRlbGF5LCB3ZSBjb3VsZCBub3QgcmVhZCB0aGUgcmVnaXN0ZXIgKi8KKwlpZiAoZGVsYXkgPj0gNTApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgInhjdnJSZWcgMHglMDh4IGNvdWxkIG5vdCBiZSByZWFkXG4iLCB4Y3ZyUmVnKTsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJzdGF0dXMgaXMgIDB4JTA4eFxuIiwKKwkJCSAgICBtaWlJbmRpY2F0b3IudmFsdWUpOworCisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogSWYgd2UgaGl0IGhlcmUgd2Ugd2VyZSBhYmxlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGFuZCB3ZSBuZWVkIHRvCisJICogcmV0dXJuIHRoZSB2YWx1ZSB0byB0aGUgY2FsbGVyCisJICovCisJLyogVE9ETzogbWFrZSB0aGlzIHN0dWZmIGEgc2ltcGxlIHJlYWR3KCk/ISAqLworCXsKKwkJTUlJX01HTVRfU1RBVF90IG1paV9tZ210X3N0YXQ7CisKKwkJbWlpX21nbXRfc3RhdC52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X3N0YXQudmFsdWUpOworCQkqdmFsdWUgPSAodWludDE2X3QpIG1paV9tZ210X3N0YXQuYml0cy5waHlfc3RhdDsKKwl9CisKKwkvKiBTdG9wIHRoZSByZWFkIG9wZXJhdGlvbiAqLworCXdyaXRlbCgwLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICIgIHhjdnJfYWRkciA9IDB4JTAyeCwgIgorCQkgICAgInhjdnJfcmVnICA9IDB4JTAyeCwgIgorCQkgICAgInZhbHVlICAgICA9IDB4JTA0eC5cbiIsIHhjdnJBZGRyLCB4Y3ZyUmVnLCAqdmFsdWUpOworCisJLyogc2V0IHRoZSByZWdpc3RlcnMgd2UgdG91Y2hlZCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB3aGljaCB3ZSBlbnRlcmVkCisJICogdGhpcyBmdW5jdGlvbgorCSAqLworCXdyaXRlbChtaWlBZGRyLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwl3cml0ZWwobWlpQ21kLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBNaVdyaXRlIC0gV3JpdGUgdG8gYSBQSFkgcmVnaXN0ZXIgdGhyb3VnaCB0aGUgTUlJIGludGVyZmFjZSBvZiB0aGUgTUFDCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHhjdnJSZWc6IHRoZSByZWdpc3RlciB0byByZWFkCisgKiBAdmFsdWU6IDE2LWJpdCB2YWx1ZSB0byB3cml0ZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IE1pV3JpdGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1aW50OF90IHhjdnJSZWcsIHVpbnQxNl90IHZhbHVlKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqbWFjID0gJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlpbnQgc3RhdHVzID0gMDsKKwl1aW50OF90IHhjdnJBZGRyID0gYWRhcHRlci0+U3RhdHMueGN2cl9hZGRyOworCXVpbnQzMl90IGRlbGF5OworCU1JSV9NR01UX0FERFJfdCBtaWlBZGRyOworCU1JSV9NR01UX0NNRF90IG1paUNtZDsKKwlNSUlfTUdNVF9JTkRJQ0FUT1JfdCBtaWlJbmRpY2F0b3I7CisKKwkvKiBTYXZlIGEgbG9jYWwgY29weSBvZiB0aGUgcmVnaXN0ZXJzIHdlIGFyZSBkZWFsaW5nIHdpdGggc28gd2UgY2FuCisJICogc2V0IHRoZW0gYmFjaworCSAqLworCW1paUFkZHIudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwltaWlDbWQudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogU3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24gKi8KKwl3cml0ZWwoMCwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFNldCB1cCB0aGUgcmVnaXN0ZXIgd2UgbmVlZCB0byB3cml0ZSB0byBvbiB0aGUgY29ycmVjdCBQSFkgKi8KKwl7CisJCU1JSV9NR01UX0FERFJfdCBtaWlfbWdtdF9hZGRyOworCisJCW1paV9tZ210X2FkZHIuYml0cy5waHlfYWRkciA9IHhjdnJBZGRyOworCQltaWlfbWdtdF9hZGRyLmJpdHMucmVnX2FkZHIgPSB4Y3ZyUmVnOworCQl3cml0ZWwobWlpX21nbXRfYWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJfQorCisJLyogQWRkIHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXJzIHRvIHRoZSBtYWMgKi8KKwl3cml0ZWwodmFsdWUsICZtYWMtPm1paV9tZ210X2N0cmwudmFsdWUpOworCWRlbGF5ID0gMDsKKworCWRvIHsKKwkJdWRlbGF5KDUwKTsKKwkJZGVsYXkrKzsKKwkJbWlpSW5kaWNhdG9yLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfaW5kaWNhdG9yLnZhbHVlKTsKKwl9IHdoaWxlIChtaWlJbmRpY2F0b3IuYml0cy5idXN5ICYmIGRlbGF5IDwgMTAwKTsKKworCS8qIElmIHdlIGhpdCB0aGUgbWF4IGRlbGF5LCB3ZSBjb3VsZCBub3Qgd3JpdGUgdGhlIHJlZ2lzdGVyICovCisJaWYgKGRlbGF5ID09IDEwMCkgeworCQl1aW50MTZfdCBUZW1wVmFsdWU7CisKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgInhjdnJSZWcgMHglMDh4IGNvdWxkIG5vdCBiZSB3cml0dGVuIiwgeGN2clJlZyk7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAic3RhdHVzIGlzICAweCUwOHhcbiIsCisJCQkgICAgbWlpSW5kaWNhdG9yLnZhbHVlKTsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJjb21tYW5kIGlzICAweCUwOHhcbiIsCisJCQkgICAgcmVhZGwoJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKSk7CisKKwkJTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsICZUZW1wVmFsdWUpOworCisJCXN0YXR1cyA9IC1FSU87CisJfQorCisJLyogU3RvcCB0aGUgd3JpdGUgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBzZXQgdGhlIHJlZ2lzdGVycyB3ZSB0b3VjaGVkIGJhY2sgdG8gdGhlIHN0YXRlIGF0IHdoaWNoIHdlIGVudGVyZWQKKyAgICAgICAgICogdGhpcyBmdW5jdGlvbgorICAgICAgICAgKi8KKwl3cml0ZWwobWlpQWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJd3JpdGVsKG1paUNtZC52YWx1ZSwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiIHhjdnJfYWRkciA9IDB4JTAyeCwgIgorCQkgICAgInhjdnJfcmVnICA9IDB4JTAyeCwgIgorCQkgICAgInZhbHVlICAgICA9IDB4JTA0eC5cbiIsIHhjdnJBZGRyLCB4Y3ZyUmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF94Y3ZyX2ZpbmQgLSBGaW5kIHRoZSBQSFkgSUQKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAtRU5PREVWOworCXVpbnQ4X3QgeGN2cl9hZGRyOworCU1JX0lEUjFfdCBpZHIxOworCU1JX0lEUjJfdCBpZHIyOworCXVpbnQzMl90IHhjdnJfaWQ7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogV2UgbmVlZCB0byBnZXQgeGN2ciBpZCBhbmQgYWRkcmVzcyB3ZSBqdXN0IGdldCB0aGUgZmlyc3Qgb25lICovCisJZm9yICh4Y3ZyX2FkZHIgPSAwOyB4Y3ZyX2FkZHIgPCAzMjsgeGN2cl9hZGRyKyspIHsKKwkJLyogUmVhZCB0aGUgSUQgZnJvbSB0aGUgUEhZICovCisJCVBoeU1pUmVhZChhZGFwdGVyLCB4Y3ZyX2FkZHIsCisJCQkgICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlkcjEpLAorCQkJICAmaWRyMS52YWx1ZSk7CisJCVBoeU1pUmVhZChhZGFwdGVyLCB4Y3ZyX2FkZHIsCisJCQkgICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlkcjIpLAorCQkJICAmaWRyMi52YWx1ZSk7CisKKwkJeGN2cl9pZCA9ICh1aW50MzJfdCkgKChpZHIxLnZhbHVlIDw8IDE2KSB8IGlkcjIudmFsdWUpOworCisJCWlmICgoaWRyMS52YWx1ZSAhPSAwKSAmJiAoaWRyMS52YWx1ZSAhPSAweGZmZmYpKSB7CisJCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiWGN2ciBhZGRyOiAweCUwMnhcdFhjdnJfaWQ6IDB4JTA4eFxuIiwKKwkJCQkgIHhjdnJfYWRkciwgeGN2cl9pZCk7CisKKwkJCWFkYXB0ZXItPlN0YXRzLnhjdnJfaWQgPSB4Y3ZyX2lkOworCQkJYWRhcHRlci0+U3RhdHMueGN2cl9hZGRyID0geGN2cl9hZGRyOworCisJCQlzdGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NldHBoeV9ub3JtYWwgLSBTZXQgUEhZIGZvciBub3JtYWwgb3BlcmF0aW9uLgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBVc2VkIGJ5IFBvd2VyIE1hbmFnZW1lbnQgdG8gZm9yY2UgdGhlIFBIWSBpbnRvIDEwIEJhc2UgVCBoYWxmLWR1cGxleCBtb2RlLAorICogd2hlbiBnb2luZyB0byBEMyBpbiBXT0wgbW9kZS4gQWxzbyB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiB0byBzZXQgdGhlCisgKiBQSFkgZm9yIG5vcm1hbCBvcGVyYXRpb24uCisgKi8KK2ludCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIFBIWSBpcyBwb3dlcmVkIHVwICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihhZGFwdGVyLCAwKTsKKwlzdGF0dXMgPSBldDEzMXhfeGN2cl9pbml0KGFkYXB0ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF94Y3ZyX2luaXQgLSBJbml0IHRoZSBwaHkgaWYgd2UgYXJlIHNldHRpbmcgaXQgaW50byBmb3JjZSBtb2RlCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK3N0YXRpYyBpbnQgZXQxMzF4X3hjdnJfaW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJTUlfSU1SX3QgaW1yOworCU1JX0lTUl90IGlzcjsKKwlNSV9MQ1IyX3QgbGNyMjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBaZXJvIG91dCB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgdmFyaWFibGUgcmVwcmVzZW50aW5nIEJNU1IgKi8KKwlhZGFwdGVyLT5CbXNyLnZhbHVlID0gMDsKKworCU1pUmVhZChhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpc3IpLCAmaXNyLnZhbHVlKTsKKworCU1pUmVhZChhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpbXIpLCAmaW1yLnZhbHVlKTsKKworCS8qIFNldCB0aGUgbGluayBzdGF0dXMgaW50ZXJydXB0IG9ubHkuICBCYWQgYmVoYXZpb3Igd2hlbiBsaW5rIHN0YXR1cworCSAqIGFuZCBhdXRvIG5lZyBhcmUgc2V0LCB3ZSBydW4gaW50byBhIG5lc3RlZCBpbnRlcnJ1cHQgcHJvYmxlbQorCSAqLworCWltci5iaXRzLmludF9lbiA9IDB4MTsKKwlpbXIuYml0cy5saW5rX3N0YXR1cyA9IDB4MTsKKwlpbXIuYml0cy5hdXRvbmVnX3N0YXR1cyA9IDB4MTsKKworCU1pV3JpdGUoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaW1yKSwgaW1yLnZhbHVlKTsKKworCS8qIFNldCB0aGUgTEVEIGJlaGF2aW9yIHN1Y2ggdGhhdCBMRUQgMSBpbmRpY2F0ZXMgc3BlZWQgKG9mZiA9CisJICogMTBNYml0cywgYmxpbmsgPSAxMDBNYml0cywgb24gPSAxMDAwTWJpdHMpIGFuZCBMRUQgMiBpbmRpY2F0ZXMKKwkgKiBsaW5rIGFuZCBhY3Rpdml0eSAob24gZm9yIGxpbmssIGJsaW5rIG9mZiBmb3IgYWN0aXZpdHkpLgorCSAqCisJICogTk9URTogU29tZSBjdXN0b21pemF0aW9ucyBoYXZlIGJlZW4gYWRkZWQgaGVyZSBmb3Igc3BlY2lmaWMKKwkgKiB2ZW5kb3JzOyBUaGUgTEVEIGJlaGF2aW9yIGlzIG5vdyBkZXRlcm1pbmVkIGJ5IHZlbmRvciBkYXRhIGluIHRoZQorCSAqIEVFUFJPTS4gSG93ZXZlciwgdGhlIGFib3ZlIGRlc2NyaXB0aW9uIGlzIHRoZSBkZWZhdWx0LgorCSAqLworCWlmICgoYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSAmIDB4NCkgPT0gMCkgeworCQlNaVJlYWQoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgbGNyMiksCisJCSAgICAgICAmbGNyMi52YWx1ZSk7CisJCWlmICgoYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSAmIDB4OCkgPT0gMCkKKwkJCWxjcjIuYml0cy5sZWRfdHhfcnggPSAweDM7CisJCWVsc2UKKwkJCWxjcjIuYml0cy5sZWRfdHhfcnggPSAweDQ7CisJCWxjcjIuYml0cy5sZWRfbGluayA9IDB4YTsKKwkJTWlXcml0ZShhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBsY3IyKSwKKwkJCWxjcjIudmFsdWUpOworCX0KKworCS8qIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGdvIGludG8gYSBmb3JjZSBtb2RlIGFuZCBzZXQgaXQgKi8KKwlpZiAoYWRhcHRlci0+QWlGb3JjZVNwZWVkID09IDAgJiYgYWRhcHRlci0+QWlGb3JjZURweCA9PSAwKSB7CisJCWlmICgoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBUeE9ubHkpIHx8CisJCSAgICAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX1NFVCwgNCwgMTEsIE5VTEwpOworCQl9IGVsc2UgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMSwgTlVMTCk7CisJCX0KKworCQlpZiAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLCBOVUxMKTsKKwkJfQorCisJCS8qIFNldCB0aGUgcGh5IHRvIGF1dG9uZWdvdGlhdGlvbiAqLworCQlFVDEzMTBfUGh5QXV0b05lZyhhZGFwdGVyLCB0cnVlKTsKKworCQkvKiBOT1RFIC0gRG8gd2UgbmVlZCB0aGlzPyAqLworCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwgVFJVRVBIWV9CSVRfU0VULCAwLCA5LCBOVUxMKTsKKworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gc3RhdHVzOworCX0gZWxzZSB7CisJCUVUMTMxMF9QaHlBdXRvTmVnKGFkYXB0ZXIsIGZhbHNlKTsKKworCQkvKiBTZXQgdG8gdGhlIGNvcnJlY3QgZm9yY2UgbW9kZS4gKi8KKwkJaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggIT0gMSkgeworCQkJaWYgKChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IFR4T25seSkgfHwKKwkJCSAgICAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMSwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMSwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfQorCisJCQlpZiAoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCQkgICAgICBUUlVFUEhZX0JJVF9TRVQsIDQsIDEwLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDEwLCBOVUxMKTsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTEsIE5VTEwpOworCQl9CisKKwkJc3dpdGNoIChhZGFwdGVyLT5BaUZvcmNlU3BlZWQpIHsKKwkJY2FzZSAxMDoKKwkJCWlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDEpIHsKKwkJCQlUUEFMX1NldFBoeTEwSGFsZkR1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSBpZiAoYWRhcHRlci0+QWlGb3JjZURweCA9PSAyKSB7CisJCQkJVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgeworCQkJCVRQQUxfU2V0UGh5MTBGb3JjZShhZGFwdGVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDEwMDoKKwkJCWlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDEpIHsKKwkJCQlUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMikgeworCQkJCVRQQUxfU2V0UGh5MTAwRnVsbER1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSB7CisJCQkJVFBBTF9TZXRQaHkxMDBGb3JjZShhZGFwdGVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDEwMDA6CisJCQlUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4KGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gc3RhdHVzOworCX0KK30KKwordm9pZCBldDEzMXhfTWlpX2NoZWNrKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKQoreworCXVpbnQ4X3QgdWNMaW5rU3RhdHVzOworCXVpbnQzMl90IHVpQXV0b05lZ1N0YXR1czsKKwl1aW50MzJfdCB1aVNwZWVkOworCXVpbnQzMl90IHVpRHVwbGV4OworCXVpbnQzMl90IHVpTWRpTWRpeDsKKwl1aW50MzJfdCB1aU1hc3RlclNsYXZlOworCXVpbnQzMl90IHVpUG9sYXJpdHk7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKGJtc3JfaW50cy5iaXRzLmxpbmtfc3RhdHVzKSB7CisJCWlmIChibXNyLmJpdHMubGlua19zdGF0dXMpIHsKKwkJCXBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9IDIwOworCisJCQkvKiBVcGRhdGUgb3VyIHN0YXRlIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGUgdGhlCisJCQkgKiBjb25uZWN0ZWQgc3RhdGUKKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJCQlwQWRhcHRlci0+TWVkaWFTdGF0ZSA9IE5FVElGX1NUQVRVU19NRURJQV9DT05ORUNUOworCQkJTVBfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCQkJLyogRG9uJ3QgaW5kaWNhdGUgc3RhdGUgaWYgd2UncmUgaW4gbG9vcGJhY2sgbW9kZSAqLworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQkJCW5ldGlmX2NhcnJpZXJfb24ocEFkYXB0ZXItPm5ldGRldik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkxpbmsgZG93biBjYWJsZSBwcm9ibGVtXG4iKTsKKworCQkJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwTUJQUykgeworCQkJCS8vIE5PVEUgLSBJcyB0aGVyZSBhIHdheSB0byBxdWVyeSB0aGlzIHdpdGhvdXQgVHJ1ZVBIWT8KKwkJCQkvLyAmJiBUUlVfUXVlcnlDb3JlVHlwZShwQWRhcHRlci0+aFRydWVQaHksIDApID09IEVNSV9UUlVFUEhZX0ExM08pIHsKKwkJCQl1aW50MTZfdCBSZWdpc3RlcjE4OworCisJCQkJTWlSZWFkKHBBZGFwdGVyLCAweDEyLCAmUmVnaXN0ZXIxOCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCB8IDB4NCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMCwgUmVnaXN0ZXIxOCB8IDB4ODQwMik7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMSwgUmVnaXN0ZXIxOCB8IDUxMSk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCk7CisJCQl9CisKKwkJCS8qIEZvciB0aGUgZmlyc3QgTiBzZWNvbmRzIG9mIGxpZmUsIHdlIGFyZSBpbiAibGluaworCQkJICogZGV0ZWN0aW9uIiBXaGVuIHdlIGFyZSBpbiB0aGlzIHN0YXRlLCB3ZSBzaG91bGQKKwkJCSAqIG9ubHkgcmVwb3J0ICJjb25uZWN0ZWQiLiBXaGVuIHRoZSBMaW5rRGV0ZWN0aW9uCisJCQkgKiBUaW1lciBleHBpcmVzLCB3ZSBjYW4gcmVwb3J0IGRpc2Nvbm5lY3RlZCAoaGFuZGxlZAorCQkJICogaW4gdGhlIExpbmtEZXRlY3Rpb25EUEMpLgorCQkJICovCisJCQlpZiAoKE1QX0lTX0ZMQUdfQ0xFQVIKKwkJCSAgICAgKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTikpCisJCQkgICAgfHwgKHBBZGFwdGVyLT5NZWRpYVN0YXRlID09CisJCQkJTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCQkJCXBBZGFwdGVyLT5NZWRpYVN0YXRlID0KKwkJCQkgICAgTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkxvY2ssCisJCQkJCQkgICAgICAgbG9ja2ZsYWdzKTsKKworCQkJCS8qIE9ubHkgaW5kaWNhdGUgc3RhdGUgaWYgd2UncmUgaW4gbG9vcGJhY2sKKwkJCQkgKiBtb2RlCisJCQkJICovCisJCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQkJCQluZXRpZl9jYXJyaWVyX29mZihwQWRhcHRlci0+bmV0ZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJCXBBZGFwdGVyLT51aUxpbmtTcGVlZCA9IDA7CisJCQlwQWRhcHRlci0+dWlEdXBsZXhNb2RlID0gMDsKKworCQkJLyogRnJlZSB0aGUgcGFja2V0cyBiZWluZyBhY3RpdmVseSBzZW50ICYgc3RvcHBlZCAqLworCQkJZXQxMzF4X2ZyZWVfYnVzeV9zZW5kX3BhY2tldHMocEFkYXB0ZXIpOworCisJCQkvKiBSZS1pbml0aWFsaXplIHRoZSBzZW5kIHN0cnVjdHVyZXMgKi8KKwkJCWV0MTMxeF9pbml0X3NlbmQocEFkYXB0ZXIpOworCisJCQkvKiBSZXNldCB0aGUgUkZEIGxpc3QgYW5kIHJlLXN0YXJ0IFJVICovCisJCQlldDEzMXhfcmVzZXRfcmVjdihwQWRhcHRlcik7CisKKwkJCS8qCisJCQkgKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdG8gdGhlIHN0YXRlIGl0IHdhcyBkdXJpbmcKKwkJCSAqIGluaXQgcHJpb3IgdG8gYXV0b25lZ290aWF0aW9uIGJlaW5nIGNvbXBsZXRlLiBUaGlzCisJCQkgKiB3YXksIHdoZW4gd2UgZ2V0IHRoZSBhdXRvLW5lZyBjb21wbGV0ZSBpbnRlcnJ1cHQsCisJCQkgKiB3ZSBjYW4gY29tcGxldGUgaW5pdCBieSBjYWxsaW5nIENvbmZpZ01hY1JFR1MyLgorCQkJICovCisJCQlldDEzMXhfc29mdF9yZXNldChwQWRhcHRlcik7CisKKwkJCS8qIFNldHVwIEVUMTMxMCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gKi8KKwkJCWV0MTMxeF9hZGFwdGVyX3NldHVwKHBBZGFwdGVyKTsKKworCQkJLyogU2V0dXAgdGhlIFBIWSBpbnRvIGNvbWEgbW9kZSB1bnRpbCB0aGUgY2FibGUgaXMKKwkJCSAqIHBsdWdnZWQgYmFjayBpbgorCQkJICovCisJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5Q29tYSA9PSAxKSB7CisJCQkJRW5hYmxlUGh5Q29tYShwQWRhcHRlcik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYm1zcl9pbnRzLmJpdHMuYXV0b19uZWdfY29tcGxldGUgfHwKKwkgICAgKChwQWRhcHRlci0+QWlGb3JjZURweCA9PSAzKSAmJiAoYm1zcl9pbnRzLmJpdHMubGlua19zdGF0dXMpKSkgeworCQlpZiAoYm1zci5iaXRzLmF1dG9fbmVnX2NvbXBsZXRlIHx8IChwQWRhcHRlci0+QWlGb3JjZURweCA9PSAzKSkgeworCQkJRVQxMzEwX1BoeUxpbmtTdGF0dXMocEFkYXB0ZXIsCisJCQkJCSAgICAgJnVjTGlua1N0YXR1cywgJnVpQXV0b05lZ1N0YXR1cywKKwkJCQkJICAgICAmdWlTcGVlZCwgJnVpRHVwbGV4LCAmdWlNZGlNZGl4LAorCQkJCQkgICAgICZ1aU1hc3RlclNsYXZlLCAmdWlQb2xhcml0eSk7CisKKwkJCXBBZGFwdGVyLT51aUxpbmtTcGVlZCA9IHVpU3BlZWQ7CisJCQlwQWRhcHRlci0+dWlEdXBsZXhNb2RlID0gdWlEdXBsZXg7CisKKwkJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICJwQWRhcHRlci0+dWlMaW5rU3BlZWQgMHglMDR4LCBwQWRhcHRlci0+dWlEdXBsZXggMHglMDh4XG4iLAorCQkJCSAgcEFkYXB0ZXItPnVpTGlua1NwZWVkLAorCQkJCSAgcEFkYXB0ZXItPnVpRHVwbGV4TW9kZSk7CisKKwkJCXBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9IDIwOworCisJCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSB7CisJCQkJLy8gTk9URSAtIElzIHRoZXJlIGEgd2F5IHRvIHF1ZXJ5IHRoaXMgd2l0aG91dCBUcnVlUEhZPworCQkJCS8vICYmIFRSVV9RdWVyeUNvcmVUeXBlKHBBZGFwdGVyLT5oVHJ1ZVBoeSwgMCkgPT0gRU1JX1RSVUVQSFlfQTEzTykgeworCQkJCXVpbnQxNl90IFJlZ2lzdGVyMTg7CisKKwkJCQlNaVJlYWQocEFkYXB0ZXIsIDB4MTIsICZSZWdpc3RlcjE4KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4IHwgMHg0KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEwLCBSZWdpc3RlcjE4IHwgMHg4NDAyKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDExLCBSZWdpc3RlcjE4IHwgNTExKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4KTsKKwkJCX0KKworCQkJQ29uZmlnRmxvd0NvbnRyb2wocEFkYXB0ZXIpOworCisJCQlpZiAoKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSAmJgorCQkJICAgIChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA+IDIwNDgpKQorCQkJeworCQkJCUVUMTMxMF9QaHlBbmRPclJlZyhwQWRhcHRlciwgMHgxNiwgMHhjZmZmLAorCQkJCQkJICAgMHgyMDAwKTsKKwkJCX0KKworCQkJU2V0UnhEbWFUaW1lcihwQWRhcHRlcik7CisJCQlDb25maWdNQUNSZWdzMihwQWRhcHRlcik7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4IC0gRm9yY2UgdGhlIHBoeSBpbnRvIDEwIEJhc2UgVCBIYWxmIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5CisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIEZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRik7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXggLSBGb3JjZSB0aGUgcGh5IGludG8gMTAgQmFzZSBUIEZ1bGwgRHVwbGV4IG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwRm9yY2UgLSBGb3JjZSBCYXNlLVQgRkQgbW9kZSBXSVRIT1VUIHVzaW5nIGF1dG9uZWdvdGlhdGlvbgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5MTBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRGlzYWJsZSBhdXRvbmVnICovCisJRVQxMzEwX1BoeUF1dG9OZWcocEFkYXB0ZXIsIGZhbHNlKTsKKworCS8qIERpc2FibGUgYWxsIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIEZvcmNlIDEwIE1icHMgKi8KKwlFVDEzMTBfUGh5U3BlZWRTZWxlY3QocEFkYXB0ZXIsIFRSVUVQSFlfU1BFRURfMTBNQlBTKTsKKworCS8qIEZvcmNlIEZ1bGwgZHVwbGV4ICovCisJRVQxMzEwX1BoeUR1cGxleE1vZGUocEFkYXB0ZXIsIFRSVUVQSFlfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwSGFsZkR1cGxleCAtIEZvcmNlIDEwMCBCYXNlIFQgSGFsZiBEdXBsZXggbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseS4KKyAqLwordm9pZCBUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIGZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRik7CisKKwkvKiBTZXQgc3BlZWQgKi8KKwlFVDEzMTBfUGh5U3BlZWRTZWxlY3QocEFkYXB0ZXIsIFRSVUVQSFlfU1BFRURfMTAwTUJQUyk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4IC0gRm9yY2UgMTAwIEJhc2UgVCBGdWxsIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5CisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBGaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwRm9yY2UgLSBGb3JjZSAxMDAgQmFzZVQgRkQgbW9kZSBXSVRIT1VUIHVzaW5nIGF1dG9uZWdvdGlhdGlvbgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5MTAwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIERpc2FibGUgYXV0b25lZyAqLworCUVUMTMxMF9QaHlBdXRvTmVnKHBBZGFwdGVyLCBmYWxzZSk7CisKKwkvKiBEaXNhYmxlIGFsbCBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBGb3JjZSAxMDAgTWJwcyAqLworCUVUMTMxMF9QaHlTcGVlZFNlbGVjdChwQWRhcHRlciwgVFJVRVBIWV9TUEVFRF8xMDBNQlBTKTsKKworCS8qIEZvcmNlIEZ1bGwgZHVwbGV4ICovCisJRVQxMzEwX1BoeUR1cGxleE1vZGUocEFkYXB0ZXIsIFRSVUVQSFlfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXggLSBGb3JjZSAxMDAwIEJhc2UgVCBGdWxsIER1cGxleCBtb2RlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkuCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDAwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogZmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIHNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKworCS8qIHBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeUF1dG9OZWcgLSBTZXQgcGh5IHRvIGF1dG9uZWdvdGlhdGlvbiBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFRQQUxfU2V0UGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogVHVybiBvbiBhZHZlcnRpc2VtZW50IG9mIGFsbCBjYXBhYmlsaXRpZXMgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEgpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USCk7CisKKwlpZiAocEFkYXB0ZXItPkRldmljZUlEICE9IEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QpIHsKKwkJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCX0gZWxzZSB7CisJCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgYXV0by1uZWcgaXMgT04gKGl0IGlzIGRpc2FibGVkIGluIEZPUkNFIG1vZGVzKSAqLworCUVUMTMxMF9QaHlBdXRvTmVnKHBBZGFwdGVyLCB0cnVlKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworCisvKgorICogVGhlIHJvdXRpbmVzIHdoaWNoIGZvbGxvdyBwcm92aWRlIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhlIFBIWSwgYW5kIGFyZSB1c2VkCisgKiBwcmltYXJpbHkgYnkgdGhlIHJvdXRpbmVzIGFib3ZlIChhbHRob3VnaCB0aGVyZSBhcmUgYSBmZXcgcGxhY2VzIGVsc2V3aGVyZQorICogaW4gdGhlIGRyaXZlciB3aGVyZSB0aGlzIGxldmVsIG9mIGFjY2VzcyBpcyByZXF1aXJlZCkuCisgKi8KKworc3RhdGljIGNvbnN0IHVpbnQxNl90IENvbmZpZ1BoeVsyNV1bMl0gPSB7CisJLyogUmVnICAgICAgVmFsdWUgICAgICBSZWdpc3RlciAqLworCS8qIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7MHg4ODBCLCAweDA5MjZ9LAkvKiBBZmVJZkNyZWc0QjEwMDBNc2JzICovCisJezB4ODgwQywgMHgwOTI2fSwJLyogQWZlSWZDcmVnNEIxMDBNc2JzICovCisJezB4ODgwRCwgMHgwOTI2fSwJLyogQWZlSWZDcmVnNEIxME1zYnMgKi8KKworCXsweDg4MEUsIDB4QjREM30sCS8qIEFmZUlmQ3JlZzRCMTAwMExzYnMgKi8KKwl7MHg4ODBGLCAweEI0RDN9LAkvKiBBZmVJZkNyZWc0QjEwMExzYnMgKi8KKwl7MHg4ODEwLCAweEI0RDN9LAkvKiBBZmVJZkNyZWc0QjEwTHNicyAqLworCisJezB4ODgwNSwgMHhCMDNFfSwJLyogQWZlSWZDcmVnM0IxMDAwTXNicyAqLworCXsweDg4MDYsIDB4QjAzRX0sCS8qIEFmZUlmQ3JlZzNCMTAwTXNicyAqLworCXsweDg4MDcsIDB4RkYwMH0sCS8qIEFmZUlmQ3JlZzNCMTBNc2JzICovCisKKwl7MHg4ODA4LCAweEUwOTB9LAkvKiBBZmVJZkNyZWczQjEwMDBMc2JzICovCisJezB4ODgwOSwgMHhFMTEwfSwJLyogQWZlSWZDcmVnM0IxMDBMc2JzICovCisJezB4ODgwQSwgMHgwMDAwfSwJLyogQWZlSWZDcmVnM0IxMExzYnMgKi8KKworCXsweDMwMEQsIDF9LAkJLyogRGlzYWJsZU5vcm0gKi8KKworCXsweDI4MEMsIDB4MDE4MH0sCS8qIExpbmtIb2xkRW5kICovCisKKwl7MHgxQzIxLCAweDAwMDJ9LAkvKiBBbHBoYU0gKi8KKworCXsweDM4MjEsIDZ9LAkJLyogRmZlTGtnVHgwICovCisJezB4MzgxRCwgMX0sCQkvKiBGZmVMa2cxZzQgKi8KKwl7MHgzODFFLCAxfSwJCS8qIEZmZUxrZzFnNSAqLworCXsweDM4MUYsIDF9LAkJLyogRmZlTGtnMWc2ICovCisJezB4MzgyMCwgMX0sCQkvKiBGZmVMa2cxZzcgKi8KKworCXsweDg0MDIsIDB4MDFGMH0sCS8qIEJ0aW5hY3QgKi8KKwl7MHg4MDBFLCAyMH0sCQkvKiBMZnRyYWluVGltZSAqLworCXsweDgwMEYsIDI0fSwJCS8qIER2Z3VhcmRUaW1lICovCisJezB4ODAxMCwgNDZ9LAkJLyogSWRsZ3VhcmRUaW1lICovCisKKwl7MCwgMH0KKworfTsKKworLyogY29uZGVuc2VkIHZlcnNpb24gb2YgdGhlIHBoeSBpbml0aWFsaXphdGlvbiByb3V0aW5lICovCit2b2lkIEVUMTMxMF9QaHlJbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdWludDE2X3QgdXNEYXRhLCB1c0luZGV4OworCisJaWYgKHBBZGFwdGVyID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCS8vIGdldCB0aGUgaWRlbnRpdHkgKGFnYWluID8pCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMSwgJnVzRGF0YSk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMiwgJnVzRGF0YSk7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBkby9hY2hpZXZlID8KKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwMgorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLAkweDAwMDYpOworCisJLy8gcmVhZCBtb2RlbSByZWdpc3RlciAwNDAyLCBzaG91bGQgSSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmV0dXJuIGRhdGEgPworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIDB4MDQwMik7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsICZ1c0RhdGEpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgZG8vYWNoaWV2ZSA/CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwMik7CisKKwkvLyBnZXQgdGhlIGlkZW50aXR5IChhZ2FpbiA/KQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzEsICZ1c0RhdGEpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzIsICZ1c0RhdGEpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgYWNoaWV2ZSA/CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDIKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDA2KTsKKworCS8vIHJlYWQgbW9kZW0gcmVnaXN0ZXIgMDQwMiwgc2hvdWxkIEkgZG8gc29tZXRoaW5nIHdpdGggdGhlIHJldHVybiBkYXRhPworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIDB4MDQwMik7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsICZ1c0RhdGEpOworCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwMik7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBhY2hpZXZlIChzaG91bGQgcmV0dXJuIDB4MTA0MCkKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwMgorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAweDE4NDApOworCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwNyk7CisKKwkvLyBoZXJlIHRoZSB3cml0aW5nIG9mIHRoZSBhcnJheSBzdGFydHMuLi4uCisJdXNJbmRleCA9IDA7CisJd2hpbGUgKENvbmZpZ1BoeVt1c0luZGV4XVswXSAhPSAweDAwMDApIHsKKwkJLy8gd3JpdGUgdmFsdWUKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0lOREVYX1JFRywgQ29uZmlnUGh5W3VzSW5kZXhdWzBdKTsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0RBVEFfUkVHLCBDb25maWdQaHlbdXNJbmRleF1bMV0pOworCisJCS8vIHJlYWQgaXQgYmFjaworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfSU5ERVhfUkVHLCBDb25maWdQaHlbdXNJbmRleF1bMF0pOworCQlNaVJlYWQocEFkYXB0ZXIsIFBIWV9EQVRBX1JFRywgJnVzRGF0YSk7CisKKwkJLy8gZG8gYSBjaGVjayBvbiB0aGUgdmFsdWUgcmVhZCBiYWNrID8KKwkJdXNJbmRleCsrOworCX0KKwkvLyBoZXJlIHRoZSB3cml0aW5nIG9mIHRoZSBhcnJheSBlbmRzLi4uCisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsJLy8gMHgxODQwCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDcKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgMHgxMDQwKTsKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDAyKTsKK30KKwordm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgMHg4MDAwKTsKK30KKwordm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIGJvb2wgZG93bikKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChkb3duID09IGZhbHNlKSB7CisJCS8vIFBvd2VyIFVQCisJCXVzRGF0YSAmPSB+MHgwODAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9IGVsc2UgeworCQkvLyBQb3dlciBET1dOCisJCXVzRGF0YSB8PSAweDA4MDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBib29sIGVuYWJsZSkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChlbmFibGUgPT0gdHJ1ZSkgeworCQkvLyBBdXRvbmVnb3RpYXRpb24gT04KKwkJdXNEYXRhIHw9IDB4MTAwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfSBlbHNlIHsKKwkJLy8gQXV0b25lZ290aWF0aW9uIE9GRgorCQl1c0RhdGEgJj0gfjB4MTAwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlEdXBsZXhNb2RlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCWlmIChkdXBsZXggPT0gVFJVRVBIWV9EVVBMRVhfRlVMTCkgeworCQkvLyBTZXQgRnVsbCBEdXBsZXgKKwkJdXNEYXRhIHw9IDB4MTAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9IGVsc2UgeworCQkvLyBTZXQgSGFsZiBEdXBsZXgKKwkJdXNEYXRhICY9IH4weDEwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlTcGVlZFNlbGVjdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MTZfdCBzcGVlZCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBQSFkgY29udHJvbCByZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCisJLy8gQ2xlYXIgYWxsIFNwZWVkIHNldHRpbmdzIChCaXRzIDYsIDEzKQorCXVzRGF0YSAmPSB+MHgyMDQwOworCisJLy8gUmVzZXQgdGhlIHNwZWVkIGJpdHMgYmFzZWQgb24gdXNlciBzZWxlY3Rpb24KKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBUUlVFUEhZX1NQRUVEXzEwTUJQUzoKKwkJLy8gQml0cyBhbHJlYWR5IGNsZWFyZWQgYWJvdmUsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfU1BFRURfMTAwTUJQUzoKKwkJLy8gMTAwTSA9PSBTZXQgYml0IDEzCisJCXVzRGF0YSB8PSAweDIwMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTOgorCWRlZmF1bHQ6CisJCXVzRGF0YSB8PSAweDAwNDA7CisJCWJyZWFrOworCX0KKworCS8vIFdyaXRlIGJhY2sgdGhlIG5ldyBzcGVlZAorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCQkgIHVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBQSFkgMTAwMCBCYXNlLVQgQ29udHJvbCBSZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgUEhZXzEwMDBfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBCaXRzIDgsOQorCXVzRGF0YSAmPSB+MHgwMzAwOworCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9OT05FOgorCQkvLyBEdXBsZXggYWxyZWFkeSBjbGVhcmVkLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTDoKKwkJLy8gU2V0IEJpdCA5CisJCXVzRGF0YSB8PSAweDAyMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRjoKKwkJLy8gU2V0IEJpdCA4CisJCXVzRGF0YSB8PSAweDAxMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USDoKKwlkZWZhdWx0OgorCQl1c0RhdGEgfD0gMHgwMzAwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIGFkdmVydGlzZW1lbnQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfMTAwMF9DT05UUk9MLCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCSB1aW50MTZfdCBkdXBsZXgpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJLy8gUmVhZCB0aGUgQXV0b25lZ290aWF0aW9uIFJlZ2lzdGVyICgxMC8xMDApCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCAmdXNEYXRhKTsKKworCS8vIENsZWFyIGJpdHMgNyw4CisJdXNEYXRhICY9IH4weDAxODA7CisKKwlzd2l0Y2ggKGR1cGxleCkgeworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkU6CisJCS8vIER1cGxleCBhbHJlYWR5IGNsZWFyZWQsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMOgorCQkvLyBTZXQgQml0IDgKKwkJdXNEYXRhIHw9IDB4MDEwMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGOgorCQkvLyBTZXQgQml0IDcKKwkJdXNEYXRhIHw9IDB4MDA4MDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIOgorCWRlZmF1bHQ6CisJCS8vIFNldCBCaXRzIDcsOAorCQl1c0RhdGEgfD0gMHgwMTgwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIGFkdmVydGlzZW1lbnQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkJdWludDE2X3QgZHVwbGV4KQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCS8vIFJlYWQgdGhlIEF1dG9uZWdvdGlhdGlvbiBSZWdpc3RlciAoMTAvMTAwKQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBiaXRzIDUsNgorCXVzRGF0YSAmPSB+MHgwMDYwOworCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9OT05FOgorCQkvLyBEdXBsZXggYWxyZWFkeSBjbGVhcmVkLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTDoKKwkJLy8gU2V0IEJpdCA2CisJCXVzRGF0YSB8PSAweDAwNDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRjoKKwkJLy8gU2V0IEJpdCA1CisJCXVzRGF0YSB8PSAweDAwMjA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USDoKKwlkZWZhdWx0OgorCQkvLyBTZXQgQml0cyA1LDYKKwkJdXNEYXRhIHw9IDB4MDA2MDsKKwkJYnJlYWs7CisJfQorCisJLy8gV3JpdGUgYmFjayBhZHZlcnRpc2VtZW50CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgdXNEYXRhKTsKK30KKwordm9pZCBFVDEzMTBfUGh5TGlua1N0YXR1cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJICB1aW50OF90ICp1Y0xpbmtTdGF0dXMsCisJCQkgIHVpbnQzMl90ICp1aUF1dG9OZWcsCisJCQkgIHVpbnQzMl90ICp1aUxpbmtTcGVlZCwKKwkJCSAgdWludDMyX3QgKnVpRHVwbGV4TW9kZSwKKwkJCSAgdWludDMyX3QgKnVpTWRpTWRpeCwKKwkJCSAgdWludDMyX3QgKnVpTWFzdGVyU2xhdmUsIHVpbnQzMl90ICp1aVBvbGFyaXR5KQoreworCXVpbnQxNl90IHVzTWlTdGF0dXMgPSAwOworCXVpbnQxNl90IHVzMTAwMEJhc2VUID0gMDsKKwl1aW50MTZfdCB1c1ZtaVBoeVN0YXR1cyA9IDA7CisJdWludDE2X3QgdXNDb250cm9sID0gMDsKKworCU1pUmVhZChwQWRhcHRlciwgUEhZX1NUQVRVUywgJnVzTWlTdGF0dXMpOworCU1pUmVhZChwQWRhcHRlciwgUEhZXzEwMDBfU1RBVFVTLCAmdXMxMDAwQmFzZVQpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX1BIWV9TVEFUVVMsICZ1c1ZtaVBoeVN0YXR1cyk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzQ29udHJvbCk7CisKKwlpZiAodWNMaW5rU3RhdHVzKSB7CisJCSp1Y0xpbmtTdGF0dXMgPQorCQkgICAgKHVuc2lnbmVkIGNoYXIpKCh1c1ZtaVBoeVN0YXR1cyAmIDB4MDA0MCkgPyAxIDogMCk7CisJfQorCisJaWYgKHVpQXV0b05lZykgeworCQkqdWlBdXRvTmVnID0KKwkJICAgICh1c0NvbnRyb2wgJiAweDEwMDApID8gKCh1c1ZtaVBoeVN0YXR1cyAmIDB4MDAyMCkgPworCQkJCQkgICAgVFJVRVBIWV9BTkVHX0NPTVBMRVRFIDoKKwkJCQkJICAgIFRSVUVQSFlfQU5FR19OT1RfQ09NUExFVEUpIDoKKwkJICAgIFRSVUVQSFlfQU5FR19ESVNBQkxFRDsKKwl9CisKKwlpZiAodWlMaW5rU3BlZWQpIHsKKwkJKnVpTGlua1NwZWVkID0gKHVzVm1pUGh5U3RhdHVzICYgMHgwMzAwKSA+PiA4OworCX0KKworCWlmICh1aUR1cGxleE1vZGUpIHsKKwkJKnVpRHVwbGV4TW9kZSA9ICh1c1ZtaVBoeVN0YXR1cyAmIDB4MDA4MCkgPj4gNzsKKwl9CisKKwlpZiAodWlNZGlNZGl4KSB7CisJCS8qIE5PVEU6IE5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQkqdWlNZGlNZGl4ID0gMDsKKwl9CisKKwlpZiAodWlNYXN0ZXJTbGF2ZSkgeworCQkqdWlNYXN0ZXJTbGF2ZSA9CisJCSAgICAodXMxMDAwQmFzZVQgJiAweDQwMDApID8gVFJVRVBIWV9DRkdfTUFTVEVSIDoKKwkJICAgIFRSVUVQSFlfQ0ZHX1NMQVZFOworCX0KKworCWlmICh1aVBvbGFyaXR5KSB7CisJCSp1aVBvbGFyaXR5ID0KKwkJICAgICh1c1ZtaVBoeVN0YXR1cyAmIDB4MDQwMCkgPyBUUlVFUEhZX1BPTEFSSVRZX0lOVkVSVEVEIDoKKwkJICAgIFRSVUVQSFlfUE9MQVJJVFlfTk9STUFMOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5QW5kT3JSZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCXVpbnQxNl90IHJlZ251bSwgdWludDE2X3QgYW5kTWFzaywgdWludDE2X3Qgb3JNYXNrKQoreworCXVpbnQxNl90IHJlZzsKKworCS8vIFJlYWQgdGhlIHJlcXVlc3RlZCByZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgcmVnbnVtLCAmcmVnKTsKKworCS8vIEFwcGx5IHRoZSBBTkQgbWFzaworCXJlZyAmPSBhbmRNYXNrOworCisJLy8gQXBwbHkgdGhlIE9SIG1hc2sKKwlyZWcgfD0gb3JNYXNrOworCisJLy8gV3JpdGUgdGhlIHZhbHVlIGJhY2sgdG8gdGhlIHJlZ2lzdGVyCisJTWlXcml0ZShwQWRhcHRlciwgcmVnbnVtLCByZWcpOworfQorCit2b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MTZfdCBhY3Rpb24sCisJCQkgICB1aW50MTZfdCByZWdudW0sIHVpbnQxNl90IGJpdG51bSwgdWludDhfdCAqdmFsdWUpCit7CisJdWludDE2X3QgcmVnOworCXVpbnQxNl90IG1hc2sgPSAwOworCisJLy8gQ3JlYXRlIGEgbWFzayB0byBpc29sYXRlIHRoZSByZXF1ZXN0ZWQgYml0CisJbWFzayA9IDB4MDAwMSA8PCBiaXRudW07CisKKwkvLyBSZWFkIHRoZSByZXF1ZXN0ZWQgcmVnaXN0ZXIKKwlNaVJlYWQocEFkYXB0ZXIsIHJlZ251bSwgJnJlZyk7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgVFJVRVBIWV9CSVRfUkVBRDoKKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCSp2YWx1ZSA9IChyZWcgJiBtYXNrKSA+PiBiaXRudW07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQklUX1NFVDoKKwkJcmVnIHw9IG1hc2s7CisJCU1pV3JpdGUocEFkYXB0ZXIsIHJlZ251bSwgcmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQklUX0NMRUFSOgorCQlyZWcgJj0gfm1hc2s7CisJCU1pV3JpdGUocEFkYXB0ZXIsIHJlZ251bSwgcmVnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjRjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaApAQCAtMCwwICsxLDkxMCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcGh5LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQorICogICAgICAgICAgICAgICAgUEhZLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfUEhZX0hfCisjZGVmaW5lIF9FVDEzMTBfUEhZX0hfCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworI2RlZmluZSBUUlVFUEhZX1NVQ0NFU1MgMAorI2RlZmluZSBUUlVFUEhZX0ZBSUxVUkUgMQordHlwZWRlZiB2b2lkICpUUlVFUEhZX0hBTkRMRTsKK3R5cGVkZWYgdm9pZCAqVFJVRVBIWV9QTEFURk9STV9IQU5ETEU7Cit0eXBlZGVmIHZvaWQgKlRSVUVQSFlfT1NBTF9IQU5ETEU7CisKKy8qIE1JIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLworI2RlZmluZSBNSV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JX1NUQVRVU19SRUcgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlfUEhZX0lERU5USUZJRVJfMV9SRUcgICAgICAgICAgICAgMgorI2RlZmluZSBNSV9QSFlfSURFTlRJRklFUl8yX1JFRyAgICAgICAgICAgICAzCisjZGVmaW5lIE1JX0FVVE9ORUdfQURWRVJUSVNFTUVOVF9SRUcgICAgICAgIDQKKyNkZWZpbmUgTUlfQVVUT05FR19MSU5LX1BBUlRORVJfQUJJTElUWV9SRUcgNQorI2RlZmluZSBNSV9BVVRPTkVHX0VYUEFOU0lPTl9SRUcgICAgICAgICAgICA2CisjZGVmaW5lIE1JX0FVVE9ORUdfTkVYVF9QQUdFX1RSQU5TTUlUX1JFRyAgIDcKKyNkZWZpbmUgTUlfTElOS19QQVJUTkVSX05FWFRfUEFHRV9SRUcgICAgICAgOAorI2RlZmluZSBNSV8xMDAwQkFTRVRfQ09OVFJPTF9SRUcgICAgICAgICAgICA5CisjZGVmaW5lIE1JXzEwMDBCQVNFVF9TVEFUVVNfUkVHICAgICAgICAgICAgIDEwCisjZGVmaW5lIE1JX1JFU0VSVkVEMTFfUkVHICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIE1JX1JFU0VSVkVEMTJfUkVHICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1JX1JFU0VSVkVEMTNfUkVHICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIE1JX1JFU0VSVkVEMTRfUkVHICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1JX0VYVEVOREVEX1NUQVRVU19SRUcgICAgICAgICAgICAgIDE1CisKKy8qIFZNSSBSZWdpc3RlciBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgVk1JX1JFU0VSVkVEMTZfUkVHICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMTdfUkVHICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMThfUkVHICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgVk1JX0xPT1BCQUNLX0NPTlRST0xfUkVHICAgICAgICAgICAgMTkKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMjBfUkVHICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgVk1JX01JX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgVk1JX1BIWV9DT05GSUdVUkFUSU9OX1JFRyAgICAgICAgICAgMjIKKyNkZWZpbmUgVk1JX1BIWV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgVk1JX0lOVEVSUlVQVF9NQVNLX1JFRyAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVk1JX0lOVEVSUlVQVF9TVEFUVVNfUkVHICAgICAgICAgICAgMjUKKyNkZWZpbmUgVk1JX1BIWV9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgVk1JX0xFRF9DT05UUk9MXzFfUkVHICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgVk1JX0xFRF9DT05UUk9MXzJfUkVHICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMjlfUkVHICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMzBfUkVHICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgVk1JX1JFU0VSVkVEMzFfUkVHICAgICAgICAgICAgICAgICAgMzEKKworLyogUEhZIFJlZ2lzdGVyIE1hcHBpbmcoTUkpIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFJlZ3MgKi8KK3R5cGVkZWYgc3RydWN0IF9NSV9SRUdTX3QgeworCXU4IGJtY3I7CQkvLyBCYXNpYyBtb2RlIGNvbnRyb2wgcmVnKFJlZyAweDAwKQorCXU4IGJtc3I7CQkvLyBCYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MDEpCisJdTggaWRyMTsJCS8vIFBoeSBpZGVudGlmaWVyIHJlZyAxKFJlZyAweDAyKQorCXU4IGlkcjI7CQkvLyBQaHkgaWRlbnRpZmllciByZWcgMihSZWcgMHgwMykKKwl1OCBhbmFyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50KFJlZyAweDA0KQorCXU4IGFubHBhcjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gbGluayBQYXJ0bmVyIEFiaWxpdHkoUmVnIDB4MDUpCisJdTggYW5lcjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gZXhwYW5zaW9uIHJlZyhSZWcgMHgwNikKKwl1OCBhbm5wdHI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIG5leHQgcGFnZSB0cmFuc21pdCByZWcoUmVnIDB4MDcpCisJdTggbHBucHI7CQkvLyBsaW5rIHBhcnRuZXIgbmV4dCBwYWdlIHJlZyhSZWcgMHgwOCkKKwl1OCBnY3I7CQkvLyBHaWdhYml0IGJhc2ljIG1vZGUgY29udHJvbCByZWcoUmVnIDB4MDkpCisJdTggZ3NyOwkJLy8gR2lnYWJpdCBiYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MEEpCisJdTggbWlfcmVzMVs0XTsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDBCIC0gMHgwRSkKKwl1OCBlc3I7CQkvLyBFeHRlbmRlZCBzdGF0dXMgcmVnKFJlZyAweDBGKQorCXU4IG1pX3JlczJbM107CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxMCAtIDB4MTIpCisJdTggbG9vcF9jdGw7CS8vIExvb3BiYWNrIENvbnRyb2wgUmVnKFJlZyAweDEzKQorCXU4IG1pX3JlczM7CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxNCkKKwl1OCBtY3I7CQkvLyBNSSBDb250cm9sIFJlZyhSZWcgMHgxNSkKKwl1OCBwY3I7CQkvLyBDb25maWd1cmF0aW9uIFJlZyhSZWcgMHgxNikKKwl1OCBwaHlfY3RsOwkvLyBQSFkgQ29udHJvbCBSZWcoUmVnIDB4MTcpCisJdTggaW1yOwkJLy8gSW50ZXJydXB0IE1hc2sgUmVnKFJlZyAweDE4KQorCXU4IGlzcjsJCS8vIEludGVycnVwdCBTdGF0dXMgUmVnKFJlZyAweDE5KQorCXU4IHBzcjsJCS8vIFBIWSBTdGF0dXMgUmVnKFJlZyAweDFBKQorCXU4IGxjcjE7CQkvLyBMRUQgQ29udHJvbCAxIFJlZyhSZWcgMHgxQikKKwl1OCBsY3IyOwkJLy8gTEVEIENvbnRyb2wgMiBSZWcoUmVnIDB4MUMpCisJdTggbWlfcmVzNFszXTsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDFEIC0gMHgxRikKK30gTUlfUkVHU190LCAqUE1JX1JFR1NfdDsKKworLyogTUkgUmVnaXN0ZXIgMDogQmFzaWMgbW9kZSBjb250cm9sIHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9CTUNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlc2V0OjE7CQkvLyBiaXQgMTUKKwkJdTE2IGxvb3BiYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCisJCXUxNiBlbmFibGVfYXV0b25lZzoxOwkvLyBiaXQgMTIKKwkJdTE2IHBvd2VyX2Rvd246MTsJCS8vIGJpdCAxMQorCQl1MTYgaXNvbGF0ZToxOwkJLy8gYml0IDEwCisJCXUxNiByZXN0YXJ0X2F1dG9uZWc6MTsJLy8gYml0IDkKKwkJdTE2IGR1cGxleF9tb2RlOjE7CQkvLyBiaXQgOAorCQl1MTYgY29sX3Rlc3Q6MTsJCS8vIGJpdCA3CisJCXUxNiBzcGVlZF8xMDAwX3NlbDoxOwkvLyBiaXQgNgorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAwLTUKKyNlbHNlCisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDAtNQorCQl1MTYgc3BlZWRfMTAwMF9zZWw6MTsJLy8gYml0IDYKKwkJdTE2IGNvbF90ZXN0OjE7CQkvLyBiaXQgNworCQl1MTYgZHVwbGV4X21vZGU6MTsJCS8vIGJpdCA4CisJCXUxNiByZXN0YXJ0X2F1dG9uZWc6MTsJLy8gYml0IDkKKwkJdTE2IGlzb2xhdGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgcG93ZXJfZG93bjoxOwkJLy8gYml0IDExCisJCXUxNiBlbmFibGVfYXV0b25lZzoxOwkvLyBiaXQgMTIKKwkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCisJCXUxNiBsb29wYmFjazoxOwkJLy8gYml0IDE0CisJCXUxNiByZXNldDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0JNQ1JfdCwgKlBNSV9CTUNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE6ICBCYXNpYyBtb2RlIHN0YXR1cyByZWdpc3RlciAqLwordHlwZWRlZiB1bmlvbiBfTUlfQk1TUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBsaW5rXzEwMFQ0OjE7CQkvLyBiaXQgMTUKKwkJdTE2IGxpbmtfMTAwZmR4OjE7CQkvLyBiaXQgMTQKKwkJdTE2IGxpbmtfMTAwaGR4OjE7CQkvLyBiaXQgMTMKKwkJdTE2IGxpbmtfMTBmZHg6MTsJCS8vIGJpdCAxMgorCQl1MTYgbGlua18xMGhkeDoxOwkJLy8gYml0IDExCisJCXUxNiBsaW5rXzEwMFQyZmR4OjE7CS8vIGJpdCAxMAorCQl1MTYgbGlua18xMDBUMmhkeDoxOwkvLyBiaXQgOQorCQl1MTYgZXh0ZW5kX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDcKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3M6MTsJLy8gYml0IDYKKwkJdTE2IGF1dG9fbmVnX2NvbXBsZXRlOjE7CS8vIGJpdCA1CisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDQKKwkJdTE2IGF1dG9fbmVnX2FibGU6MTsJLy8gYml0IDMKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgamFiYmVyX2RldGVjdDoxOwkvLyBiaXQgMQorCQl1MTYgZXh0X2NhcDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBleHRfY2FwOjE7CQkvLyBiaXQgMAorCQl1MTYgamFiYmVyX2RldGVjdDoxOwkvLyBiaXQgMQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiBhdXRvX25lZ19hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDQKKwkJdTE2IGF1dG9fbmVnX2NvbXBsZXRlOjE7CS8vIGJpdCA1CisJCXUxNiBwcmVhbWJsZV9zdXByZXNzOjE7CS8vIGJpdCA2CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgNworCQl1MTYgZXh0ZW5kX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgbGlua18xMDBUMmhkeDoxOwkvLyBiaXQgOQorCQl1MTYgbGlua18xMDBUMmZkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTBoZHg6MTsJCS8vIGJpdCAxMQorCQl1MTYgbGlua18xMGZkeDoxOwkJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwMGhkeDoxOwkJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMGZkeDoxOwkJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMFQ0OjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQk1TUl90LCAqUE1JX0JNU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjogUGh5c2ljYWwgSWRlbnRpZmllciAxICovCit0eXBlZGVmIHVuaW9uIF9NSV9JRFIxX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworCQl1MTYgaWVlZV9hZGRyZXNzOjE2OwkvLyAweDAyODIgZGVmYXVsdChiaXRzIDAtMTUpCisJfSBiaXRzOworfSBNSV9JRFIxX3QsICpQTUlfSURSMV90OworCisvKiBNSSBSZWdpc3RlciAzOiBQaHlzaWNhbCBJZGVudGlmaWVyIDIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lEUjJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgaWVlZV9hZGRyZXNzOjY7CS8vIDExMTEwMCBkZWZhdWx0KGJpdHMgMTAtMTUpCisJCXUxNiBtb2RlbF9ubzo2OwkJLy8gMDAwMDAxIGRlZmF1bHQoYml0cyA0LTkpCisJCXUxNiByZXZfbm86NDsJCS8vIDAwMTAgICBkZWZhdWx0KGJpdHMgMC0zKQorI2Vsc2UKKwkJdTE2IHJldl9ubzo0OwkJLy8gMDAxMCAgIGRlZmF1bHQoYml0cyAwLTMpCisJCXUxNiBtb2RlbF9ubzo2OwkJLy8gMDAwMDAxIGRlZmF1bHQoYml0cyA0LTkpCisJCXUxNiBpZWVlX2FkZHJlc3M6NjsJLy8gMTExMTAwIGRlZmF1bHQoYml0cyAxMC0xNSkKKyNlbmRpZgorCX0gYml0czsKK30gTUlfSURSMl90LCAqUE1JX0lEUjJfdDsKKworLyogTUkgUmVnaXN0ZXIgNDogQXV0by1uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50IHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTkFSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgorCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisjZWxzZQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxNAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5BUl90LCAqUE1JX0FOQVJfdDsKKworLyogTUkgUmVnaXN0ZXIgNTogQXV0by1uZWdvdGlhdGlvbiBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlbWVudCByZWdpc3RlciAqLwordHlwZWRlZiBzdHJ1Y3QgX01JX0FOTFBBUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQorCQl1MTYgYWNrbm93bGVkZ2U6MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKwkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKKwkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgYWNrbm93bGVkZ2U6MTsJCS8vIGJpdCAxNAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5MUEFSX3QsICpQTUlfQU5MUEFSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDY6IEF1dG8tbmVnb3RpYXRpb24gZXhwYW5zaW9uIHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTkVSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczoxMTsJLy8gYml0cyA1LTE1CisJCXUxNiBwZGY6MTsJCS8vIGJpdCA0CisJCXUxNiBscF9ucF9hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiBucF9hYmxlOjE7CS8vIGJpdCAyCisJCXUxNiBwYWdlX3J4OjE7CS8vIGJpdCAxCisJCXUxNiBscF9hbl9hYmxlOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgbHBfYW5fYWJsZToxOwkvLyBiaXQgMAorCQl1MTYgcGFnZV9yeDoxOwkvLyBiaXQgMQorCQl1MTYgbnBfYWJsZToxOwkvLyBiaXQgMgorCQl1MTYgbHBfbnBfYWJsZToxOwkvLyBiaXQgMworCQl1MTYgcGRmOjE7CQkvLyBiaXQgNAorCQl1MTYgcmVzOjExOwkvLyBiaXRzIDUtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5FUl90LCAqUE1JX0FORVJfdDsKKworLyogTUkgUmVnaXN0ZXIgNzogQXV0by1uZWdvdGlhdGlvbiBuZXh0IHBhZ2UgdHJhbnNtaXQgcmVnKDB4MDcpICovCit0eXBlZGVmIHVuaW9uIF9NSV9BTk5QVFJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorCQl1MTYgcmVzMToxOwkvLyBiaXQgMTQKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisjZWxzZQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE6MTsJLy8gYml0IDE0CisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0FOTlBUUl90LCAqUE1JX0FOTlBUUl90OworCisvKiBNSSBSZWdpc3RlciA4OiBMaW5rIFBhcnRuZXIgTmV4dCBQYWdlIFJlZygweDA4KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTFBOUFJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorCQl1MTYgYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisjZWxzZQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKwkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IGFjazoxOwkJLy8gYml0IDE0CisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xQTlBSX3QsICpQTUlfTFBOUFJfdDsKKworLyogTUkgUmVnaXN0ZXIgOTogMTAwMEJhc2VUIENvbnRyb2wgUmVnKDB4MDkpICovCit0eXBlZGVmIHVuaW9uIF9NSV9HQ1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgdGVzdF9tb2RlOjM7CQkvLyBiaXRzIDEzLTE1CisJCXUxNiBtc19jb25maWdfZW46MTsJLy8gYml0IDEyCisJCXUxNiBtc192YWx1ZToxOwkJLy8gYml0IDExCisJCXUxNiBwb3J0X3R5cGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCA5CisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDgKKwkJdTE2IHJlczo4OwkJCS8vIGJpdCAwLTcKKyNlbHNlCisJCXUxNiByZXM6ODsJCQkvLyBiaXQgMC03CisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDgKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgOQorCQl1MTYgcG9ydF90eXBlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IG1zX3ZhbHVlOjE7CQkvLyBiaXQgMTEKKwkJdTE2IG1zX2NvbmZpZ19lbjoxOwkvLyBiaXQgMTIKKwkJdTE2IHRlc3RfbW9kZTozOwkJLy8gYml0cyAxMy0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9HQ1JfdCwgKlBNSV9HQ1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMTA6IDEwMDBCYXNlVCBTdGF0dXMgUmVnKDB4MEEpICovCit0eXBlZGVmIHVuaW9uIF9NSV9HU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbXNfY29uZmlnX2ZhdWx0OjE7CS8vIGJpdCAxNQorCQl1MTYgbXNfcmVzb2x2ZToxOwkJLy8gYml0IDE0CisJCXUxNiBsb2NhbF9yeF9zdGF0dXM6MTsJLy8gYml0IDEzCisJCXUxNiByZW1vdGVfcnhfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMQorCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzOjI7CQkJLy8gYml0cyA4LTkKKwkJdTE2IGlkbGVfZXJyX2NudDo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTE2IGlkbGVfZXJyX2NudDo4OwkvLyBiaXRzIDAtNworCQl1MTYgcmVzOjI7CQkJLy8gYml0cyA4LTkKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgMTEKKwkJdTE2IHJlbW90ZV9yeF9zdGF0dXM6MTsJLy8gYml0IDEyCisJCXUxNiBsb2NhbF9yeF9zdGF0dXM6MTsJLy8gYml0IDEzCisJCXUxNiBtc19yZXNvbHZlOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1zX2NvbmZpZ19mYXVsdDoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfR1NSX3QsICpQTUlfR1NSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDExIC0gMTQ6IFJlc2VydmVkIFJlZ3MoMHgwQiAtIDB4MEUpICovCit0eXBlZGVmIHVuaW9uIF9NSV9SRVNfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTU6MTsJLy8gYml0IDE1CisJCXUxNiByZXMxNDoxOwkvLyBiaXQgMTQKKwkJdTE2IHJlczEzOjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMTI6MTsJLy8gYml0IDEyCisJCXUxNiByZXMxMToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczEwOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzOToxOwkvLyBiaXQgOQorCQl1MTYgcmVzODoxOwkvLyBiaXQgOAorCQl1MTYgcmVzNzoxOwkvLyBiaXQgNworCQl1MTYgcmVzNjoxOwkvLyBiaXQgNgorCQl1MTYgcmVzNToxOwkvLyBiaXQgNQorCQl1MTYgcmVzNDoxOwkvLyBiaXQgNAorCQl1MTYgcmVzMzoxOwkvLyBiaXQgMworCQl1MTYgcmVzMjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzMToxOwkvLyBiaXQgMQorCQl1MTYgcmVzMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHJlczA6MTsJLy8gYml0IDAKKwkJdTE2IHJlczE6MTsJLy8gYml0IDEKKwkJdTE2IHJlczI6MTsJLy8gYml0IDIKKwkJdTE2IHJlczM6MTsJLy8gYml0IDMKKwkJdTE2IHJlczQ6MTsJLy8gYml0IDQKKwkJdTE2IHJlczU6MTsJLy8gYml0IDUKKwkJdTE2IHJlczY6MTsJLy8gYml0IDYKKwkJdTE2IHJlczc6MTsJLy8gYml0IDcKKwkJdTE2IHJlczg6MTsJLy8gYml0IDgKKwkJdTE2IHJlczk6MTsJLy8gYml0IDkKKwkJdTE2IHJlczEwOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzMTE6MTsJLy8gYml0IDExCisJCXUxNiByZXMxMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHJlczEzOjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMTQ6MTsJLy8gYml0IDE0CisJCXUxNiByZXMxNToxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUkVTX3QsICpQTUlfUkVTX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE1OiBFeHRlbmRlZCBzdGF0dXMgUmVnKDB4MEYpICovCit0eXBlZGVmIHVuaW9uIF9NSV9FU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbGlua18xMDAwWGZkeDoxOwkvLyBiaXQgMTUKKwkJdTE2IGxpbmtfMTAwMFhoZHg6MTsJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEyCisJCXUxNiByZXM6MTI7CQkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTE2IHJlczoxMjsJCS8vIGJpdCAwLTExCisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwMDBYaGR4OjE7CS8vIGJpdCAxNAorCQl1MTYgbGlua18xMDAwWGZkeDoxOwkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfRVNSX3QsICpQTUlfRVNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDE2IC0gMTg6IFJlc2VydmVkIFJlZygweDEwLTB4MTIpICovCisKKy8qIE1JIFJlZ2lzdGVyIDE5OiBMb29wYmFjayBDb250cm9sIFJlZygweDEzKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG1paV9lbjoxOwkJLy8gYml0IDE1CisJCXUxNiBwY3NfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgcG1kX2VuOjE7CQkvLyBiaXQgMTMKKwkJdTE2IGFsbF9kaWdpdGFsX2VuOjE7CS8vIGJpdCAxMgorCQl1MTYgcmVwbGljYV9lbjoxOwkJLy8gYml0IDExCisJCXUxNiBsaW5lX2RyaXZlcl9lbjoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlczoxMDsJCS8vIGJpdCAwLTkKKyNlbHNlCisJCXUxNiByZXM6MTA7CQkvLyBiaXQgMC05CisJCXUxNiBsaW5lX2RyaXZlcl9lbjoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlcGxpY2FfZW46MTsJCS8vIGJpdCAxMQorCQl1MTYgYWxsX2RpZ2l0YWxfZW46MTsJLy8gYml0IDEyCisJCXUxNiBwbWRfZW46MTsJCS8vIGJpdCAxMworCQl1MTYgcGNzX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG1paV9lbjoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xDUl90LCAqUE1JX0xDUl90OworCisvKiBNSSBSZWdpc3RlciAyMDogUmVzZXJ2ZWQgUmVnKDB4MTQpICovCisKKy8qIE1JIFJlZ2lzdGVyIDIxOiBNYW5hZ2VtZW50IEludGVyZmFjZSBDb250cm9sIFJlZygweDE1KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTUlDUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjU7CQkvLyBiaXRzIDExLTE1CisJCXUxNiBtaV9lcnJvcl9jb3VudDo3OwkvLyBiaXRzIDQtMTAKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCisJCXUxNiBpZ25vcmVfMTBnX2ZyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMzOjE7CQkvLyBiaXQgMQorCQl1MTYgcHJlYW1ibGVfc3VwcmVzc19lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3NfZW46MTsJLy8gYml0IDAKKwkJdTE2IHJlczM6MTsJCS8vIGJpdCAxCisJCXUxNiBpZ25vcmVfMTBnX2ZyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMworCQl1MTYgbWlfZXJyb3JfY291bnQ6NzsJLy8gYml0cyA0LTEwCisJCXUxNiByZXMxOjU7CQkvLyBiaXRzIDExLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX01JQ1JfdCwgKlBNSV9NSUNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDIyOiBQSFkgQ29uZmlndXJhdGlvbiBSZWcoMHgxNikgKi8KK3R5cGVkZWYgdW5pb24gX01JX1BIWV9DT05GSUdfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgY3JzX3R4X2VuOjE7CQkvLyBiaXQgMTUKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNAorCQl1MTYgdHhfZmlmb19kZXB0aDoyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiBzcGVlZF9kb3duc2hpZnQ6MjsJLy8gYml0cyAxMC0xMQorCQl1MTYgcGJpX2RldGVjdDoxOwkJLy8gYml0IDkKKwkJdTE2IHRiaV9yYXRlOjE7CQkvLyBiaXQgOAorCQl1MTYgYWx0ZXJuYXRlX25wOjE7CS8vIGJpdCA3CisJCXUxNiBncm91cF9tZGlvX2VuOjE7CS8vIGJpdCA2CisJCXUxNiB0eF9jbG9ja19lbjoxOwkJLy8gYml0IDUKKwkJdTE2IHN5c19jbG9ja19lbjoxOwkvLyBiaXQgNAorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IG1hY19pZl9tb2RlOjM7CQkvLyBiaXRzIDAtMgorI2Vsc2UKKwkJdTE2IG1hY19pZl9tb2RlOjM7CQkvLyBiaXRzIDAtMgorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IHN5c19jbG9ja19lbjoxOwkvLyBiaXQgNAorCQl1MTYgdHhfY2xvY2tfZW46MTsJCS8vIGJpdCA1CisJCXUxNiBncm91cF9tZGlvX2VuOjE7CS8vIGJpdCA2CisJCXUxNiBhbHRlcm5hdGVfbnA6MTsJLy8gYml0IDcKKwkJdTE2IHRiaV9yYXRlOjE7CQkvLyBiaXQgOAorCQl1MTYgcGJpX2RldGVjdDoxOwkJLy8gYml0IDkKKwkJdTE2IHNwZWVkX2Rvd25zaGlmdDoyOwkvLyBiaXRzIDEwLTExCisJCXUxNiB0eF9maWZvX2RlcHRoOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNAorCQl1MTYgY3JzX3R4X2VuOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUEhZX0NPTkZJR190LCAqUE1JX1BIWV9DT05GSUdfdDsKKworLyogTUkgUmVnaXN0ZXIgMjM6IFBIWSBDT05UUk9MIFJlZygweDE3KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUEhZX0NPTlRST0xfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CisJCXUxNiB0ZHJfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDEzCisJCXUxNiBkb3duc2hpZnRfYXR0ZW1wdHM6MjsJLy8gYml0cyAxMS0xMgorCQl1MTYgcmVzMzo1OwkJLy8gYml0IDYtMTAKKwkJdTE2IGphYmJlcl8xMGJhc2VUOjE7CS8vIGJpdCA1CisJCXUxNiBzcWVfMTBiYXNlVDoxOwkJLy8gYml0IDQKKwkJdTE2IHRwX2xvb3BiYWNrXzEwYmFzZVQ6MTsJLy8gYml0IDMKKwkJdTE2IHByZWFtYmxlX2dlbl9lbjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzNDoxOwkJLy8gYml0IDEKKwkJdTE2IGZvcmNlX2ludDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBmb3JjZV9pbnQ6MTsJCS8vIGJpdCAwCisJCXUxNiByZXM0OjE7CQkvLyBiaXQgMQorCQl1MTYgcHJlYW1ibGVfZ2VuX2VuOjE7CS8vIGJpdCAyCisJCXUxNiB0cF9sb29wYmFja18xMGJhc2VUOjE7CS8vIGJpdCAzCisJCXUxNiBzcWVfMTBiYXNlVDoxOwkJLy8gYml0IDQKKwkJdTE2IGphYmJlcl8xMGJhc2VUOjE7CS8vIGJpdCA1CisJCXUxNiByZXMzOjU7CQkvLyBiaXQgNi0xMAorCQl1MTYgZG93bnNoaWZ0X2F0dGVtcHRzOjI7CS8vIGJpdHMgMTEtMTIKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxMworCQl1MTYgdGRyX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9QSFlfQ09OVFJPTF90LCAqUE1JX1BIWV9DT05UUk9MX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI0OiBJbnRlcnJ1cHQgTWFzayBSZWcoMHgxOCkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lNUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgorCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9JTVJfdCwgKlBNSV9JTVJfdDsKKworLyogTUkgUmVnaXN0ZXIgMjU6IEludGVycnVwdCBTdGF0dXMgUmVnKDB4MTkpICovCit0eXBlZGVmIHVuaW9uIF9NSV9JU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNworCQl1MTYgbnBfcng6MTsJCS8vIGJpdCA2CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMTAtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfSVNSX3QsICpQTUlfSVNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI2OiBQSFkgU3RhdHVzIFJlZygweDFBKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUFNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorCQl1MTYgYXV0b25lZ19mYXVsdDoyOwkvLyBiaXQgMTMtMTQKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgbWRpX3hfc3RhdHVzOjE7CS8vIGJpdCAxMQorCQl1MTYgcG9sYXJpdHlfc3RhdHVzOjE7CS8vIGJpdCAxMAorCQl1MTYgc3BlZWRfc3RhdHVzOjI7CS8vIGJpdHMgOC05CisJCXUxNiBkdXBsZXhfc3RhdHVzOjE7CS8vIGJpdCA3CisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDYKKwkJdTE2IHR4X3N0YXR1czoxOwkJLy8gYml0IDUKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDQKKwkJdTE2IGNvbGxpc2lvbl9zdGF0dXM6MTsJLy8gYml0IDMKKwkJdTE2IGF1dG9uZWdfZW46MTsJCS8vIGJpdCAyCisJCXUxNiBwYXVzZV9lbjoxOwkJLy8gYml0IDEKKwkJdTE2IGFzeW1tZXRyaWNfZGlyOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgYXN5bW1ldHJpY19kaXI6MTsJLy8gYml0IDAKKwkJdTE2IHBhdXNlX2VuOjE7CQkvLyBiaXQgMQorCQl1MTYgYXV0b25lZ19lbjoxOwkJLy8gYml0IDIKKwkJdTE2IGNvbGxpc2lvbl9zdGF0dXM6MTsJLy8gYml0IDMKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDQKKwkJdTE2IHR4X3N0YXR1czoxOwkJLy8gYml0IDUKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgNgorCQl1MTYgZHVwbGV4X3N0YXR1czoxOwkvLyBiaXQgNworCQl1MTYgc3BlZWRfc3RhdHVzOjI7CS8vIGJpdHMgOC05CisJCXUxNiBwb2xhcml0eV9zdGF0dXM6MTsJLy8gYml0IDEwCisJCXUxNiBtZGlfeF9zdGF0dXM6MTsJLy8gYml0IDExCisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgMTIKKwkJdTE2IGF1dG9uZWdfZmF1bHQ6MjsJLy8gYml0IDEzLTE0CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUFNSX3QsICpQTUlfUFNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI3OiBMRUQgQ29udHJvbCBSZWcgMSgweDFCKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSMV90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjI7CQkvLyBiaXRzIDE0LTE1CisJCXUxNiBsZWRfZHVwX2luZGljYXRlOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IGxlZF8xMGJhc2VUOjI7CQkvLyBiaXRzIDEwLTExCisJCXUxNiBsZWRfY29sbGlzaW9uOjI7CS8vIGJpdHMgOC05CisJCXUxNiByZXMyOjI7CQkvLyBiaXRzIDYtNworCQl1MTYgcmVzMzoyOwkJLy8gYml0cyA0LTUKKwkJdTE2IHB1bHNlX2R1cjoyOwkJLy8gYml0cyAyLTMKKwkJdTE2IHB1bHNlX3N0cmV0Y2gxOjE7CS8vIGJpdCAxCisJCXUxNiBwdWxzZV9zdHJldGNoMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IHB1bHNlX3N0cmV0Y2gwOjE7CS8vIGJpdCAwCisJCXUxNiBwdWxzZV9zdHJldGNoMToxOwkvLyBiaXQgMQorCQl1MTYgcHVsc2VfZHVyOjI7CQkvLyBiaXRzIDItMworCQl1MTYgcmVzMzoyOwkJLy8gYml0cyA0LTUKKwkJdTE2IHJlczI6MjsJCS8vIGJpdHMgNi03CisJCXUxNiBsZWRfY29sbGlzaW9uOjI7CS8vIGJpdHMgOC05CisJCXUxNiBsZWRfMTBiYXNlVDoyOwkJLy8gYml0cyAxMC0xMQorCQl1MTYgbGVkX2R1cF9pbmRpY2F0ZToyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiByZXMxOjI7CQkvLyBiaXRzIDE0LTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xDUjFfdCwgKlBNSV9MQ1IxX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI4OiBMRUQgQ29udHJvbCBSZWcgMigweDFDKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfTENSMl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBsZWRfbGluazo0OwkJLy8gYml0cyAxMi0xNQorCQl1MTYgbGVkX3R4X3J4OjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTE2IGxlZF8xMDBCYXNlVFg6NDsJLy8gYml0cyA0LTcKKwkJdTE2IGxlZF8xMDAwQmFzZVQ6NDsJLy8gYml0cyAwLTMKKyNlbHNlCisJCXUxNiBsZWRfMTAwMEJhc2VUOjQ7CS8vIGJpdHMgMC0zCisJCXUxNiBsZWRfMTAwQmFzZVRYOjQ7CS8vIGJpdHMgNC03CisJCXUxNiBsZWRfdHhfcng6NDsJCS8vIGJpdHMgOC0xMQorCQl1MTYgbGVkX2xpbms6NDsJCS8vIGJpdHMgMTItMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTENSMl90LCAqUE1JX0xDUjJfdDsKKworLyogTUkgUmVnaXN0ZXIgMjkgLSAzMTogUmVzZXJ2ZWQgUmVnKDB4MUQgLSAweDFFKSAqLworCisvKiBUcnVlUEhZIGhlYWRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IF9UUlVFUEhZX0FDQ0VTU19NSV9SRUdTXyB7CisJVFJVRVBIWV9IQU5ETEUgaFRydWVQaHk7CisJaW50MzJfdCBuUGh5SWQ7CisJdTggYlJlYWRXcml0ZTsKKwl1OCAqcGJ5UmVnczsKKwl1OCAqcHdEYXRhOworCWludDMyX3QgblJlZ0NvdW50OworfSBUUlVFUEhZX0FDQ0VTU19NSV9SRUdTLCAqUFRSVUVQSFlfQUNDRVNTX01JX1JFR1M7CisKKy8qIFRydWVQSFkgaGVhZGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX1RBR19UUEFMX0FDQ0VTU19NSV9SRUdTXyB7CisJdTMyIG5QaHlJZDsKKwl1OCBiUmVhZFdyaXRlOworCXUzMiBuUmVnQ291bnQ7CisJdTE2IERhdGFbNDA5Nl07CisJdTggUmVnc1s0MDk2XTsKK30gVFBBTF9BQ0NFU1NfTUlfUkVHUywgKlBUUEFMX0FDQ0VTU19NSV9SRUdTOworCisKK3R5cGVkZWYgVFJVRVBIWV9IQU5ETEUgVFBBTF9IQU5ETEU7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworLyogT1MgU3BlY2lmaWMgRnVuY3Rpb25zKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMEZvcmNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIFByb3RvdHlwZXMgZm9yIEVUMTMxMF9waHkuYyAqLworaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50MzJfdCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCSAgICAgICB1OCB4Y3ZyQWRkciwgdTggeGN2clJlZywgdTE2ICp2YWx1ZSk7CisKKy8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBiZWNhdXNlIGV0MTMxeF9hZGFwdGVyIGlzIG5vdCBhbHdheXMKKyAqIGRlZmluZWQKKyAqLworI2RlZmluZSBNaVJlYWQoYWRhcHRlciwgeGN2clJlZywgdmFsdWUpIFwKKwlQaHlNaVJlYWQoKGFkYXB0ZXIpLCAoYWRhcHRlciktPlN0YXRzLnhjdnJfYWRkciwgKHhjdnJSZWcpLCAodmFsdWUpKQorCitpbnQzMl90IE1pV3JpdGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQl1OCB4Y3ZSZWcsIHUxNiB2YWx1ZSk7Cit2b2lkIGV0MTMxeF9NaWlfY2hlY2soc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJICAgICAgTUlfQk1TUl90IGJtc3IsIE1JX0JNU1JfdCBibXNyX2ludHMpOworCisvKiBUaGlzIGxhc3QgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkICh0aGUgZHJpdmVyIGNvdWxkIGNhbGwgdGhlIFRQQUwKKyAqIHZlcnNpb24gaW5zdGVhZCksIGJ1dCB0aGlzIHNldHMgdGhlIGFkYXB0ZXIgdXAgY29ycmVjdGx5LCBhbmQgY2FsbHMgdGhlCisgKiBhY2Nlc3Mgcm91dGluZSBpbmRpcmVjdGx5LiAgVGhpcyBwcm90ZWN0cyB0aGUgZHJpdmVyIGZyb20gY2hhbmdlcyBpbiBUUEFMLgorICovCit2b2lkIFNldFBoeV8xMEJhc2VUSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBEZWZpbmVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCisKKy8vIERlZmluZSBiaXQgb3BlcmF0aW9uIGZsYWdzCisjZGVmaW5lIFRSVUVQSFlfQklUX0NMRUFSICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0JJVF9TRVQgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9CSVRfUkVBRCAgICAgICAgICAgICAgICAyCisKKy8vIERlZmluZSByZWFkL3dyaXRlIG9wZXJhdGlvbiBmbGFncworI2lmbmRlZiBUUlVFUEhZX1JFQUQKKyNkZWZpbmUgVFJVRVBIWV9SRUFEICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfV1JJVEUgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX01BU0sgICAgICAgICAgICAgICAgICAgIDIKKyNlbmRpZgorCisvLyBEZWZpbmUgc3BlZWRzCisjZGVmaW5lIFRSVUVQSFlfU1BFRURfMTBNQlBTICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX1NQRUVEXzEwME1CUFMgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xMDAwTUJQUyAgICAgICAgICAyCisKKy8vIERlZmluZSBkdXBsZXggbW9kZXMKKyNkZWZpbmUgVFJVRVBIWV9EVVBMRVhfSEFMRiAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgMQorCisvLyBEZWZpbmUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisjZGVmaW5lIFRSVUVQSFlfQ0ZHX1NMQVZFICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0NGR19NQVNURVIgICAgICAgICAgICAgIDEKKworLy8gRGVmaW5lIE1ESS9NREktWCBzZXR0aW5ncworI2RlZmluZSBUUlVFUEhZX01ESSAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9NRElYICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfQVVUT19NRElfTURJWCAgICAgICAgICAgMgorCisvLyBEZWZpbmUgMTBCYXNlLVQgbGluayBwb2xhcml0aWVzCisjZGVmaW5lIFRSVUVQSFlfUE9MQVJJVFlfTk9STUFMICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX1BPTEFSSVRZX0lOVkVSVEVEICAgICAgIDEKKworLy8gRGVmaW5lIGF1dG8tbmVnb3RpYXRpb24gcmVzdWx0cworI2RlZmluZSBUUlVFUEhZX0FORUdfTk9UX0NPTVBMRVRFICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9BTkVHX0NPTVBMRVRFICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfQU5FR19ESVNBQkxFRCAgICAgICAgICAgMgorCisvKiBEZWZpbmUgZHVwbGV4IGFkdmVydGlzbWVudCBmbGFncyAqLworI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSAgICAgICAgIDB4MDAKKyNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxCisjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGICAgICAgICAgMHgwMgorI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USCAgICAgXAorICAgIChUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCB8IFRSVUVQSFlfQURWX0RVUExFWF9IQUxGKQorCisjZGVmaW5lIFBIWV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MDAJLy8jZGVmaW5lIFRSVV9NSV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4MDEJLy8jZGVmaW5lIFRSVV9NSV9TVEFUVVNfUkVHSVNURVIgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBIWV9JRF8xICAgICAgICAgICAgICAgICAgIDB4MDIJLy8jZGVmaW5lIFRSVV9NSV9QSFlfSURFTlRJRklFUl8xX1JFR0lTVEVSICAgICAgICAyCisjZGVmaW5lIFBIWV9JRF8yICAgICAgICAgICAgICAgICAgIDB4MDMJLy8jZGVmaW5lIFRSVV9NSV9QSFlfSURFTlRJRklFUl8yX1JFR0lTVEVSICAgICAgICAzCisjZGVmaW5lIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQgICAgIDB4MDQJLy8jZGVmaW5lIFRSVV9NSV9BRFZFUlRJU0VNRU5UX1JFR0lTVEVSICAgICAgICAgICA0CisjZGVmaW5lIFBIWV9BVVRPX0xJTktfUEFSVE5FUiAgICAgIDB4MDUJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfQUJJTElUWV9SRUdJU1RFUiAgICA1CisjZGVmaW5lIFBIWV9BVVRPX0VYUEFOU0lPTiAgICAgICAgIDB4MDYJLy8jZGVmaW5lIFRSVV9NSV9FWFBBTlNJT05fUkVHSVNURVIgICAgICAgICAgICAgICA2CisjZGVmaW5lIFBIWV9BVVRPX05FWFRfUEFHRV9UWCAgICAgIDB4MDcJLy8jZGVmaW5lIFRSVV9NSV9ORVhUX1BBR0VfVFJBTlNNSVRfUkVHSVNURVIgICAgICA3CisjZGVmaW5lIFBIWV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFIDB4MDgJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFX1JFR0lTVEVSICA4CisjZGVmaW5lIFBIWV8xMDAwX0NPTlRST0wgICAgICAgICAgIDB4MDkJLy8jZGVmaW5lIFRSVV9NSV8xMDAwQkFTRVRfQ09OVFJPTF9SRUdJU1RFUiAgICAgICA5CisjZGVmaW5lIFBIWV8xMDAwX1NUQVRVUyAgICAgICAgICAgIDB4MEEJLy8jZGVmaW5lIFRSVV9NSV8xMDAwQkFTRVRfU1RBVFVTX1JFR0lTVEVSICAgICAgICAxMAorCisjZGVmaW5lIFBIWV9FWFRFTkRFRF9TVEFUVVMgICAgICAgIDB4MEYJLy8jZGVmaW5lIFRSVV9NSV9FWFRFTkRFRF9TVEFUVVNfUkVHSVNURVIgICAgICAgICAxNQorCisvLyBzb21lIGRlZmluZXMgZm9yIG1vZGVtIHJlZ2lzdGVycyB0aGF0IHNlZW0gdG8gYmUgJ3Jlc2VydmVkJworI2RlZmluZSBQSFlfSU5ERVhfUkVHICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFBIWV9EQVRBX1JFRyAgICAgICAgICAgICAgIDB4MTEKKworI2RlZmluZSBQSFlfTVBIWV9DT05UUk9MX1JFRyAgICAgICAweDEyCS8vI2RlZmluZSBUUlVfVk1JX01QSFlfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgMTgKKworI2RlZmluZSBQSFlfTE9PUEJBQ0tfQ09OVFJPTCAgICAgICAweDEzCS8vI2RlZmluZSBUUlVfVk1JX0xPT1BCQUNLX0NPTlRST0xfMV9SRUdJU1RFUiAgICAgMTkKKwkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfTE9PUEJBQ0tfQ09OVFJPTF8yX1JFR0lTVEVSICAgICAyMAorI2RlZmluZSBQSFlfUkVHSVNURVJfTUdNVF9DT05UUk9MICAweDE1CS8vI2RlZmluZSBUUlVfVk1JX01JX1NFUV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgMjEKKyNkZWZpbmUgUEhZX0NPTkZJRyAgICAgICAgICAgICAgICAgMHgxNgkvLyNkZWZpbmUgVFJVX1ZNSV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSICAgICAgICAgIDIyCisjZGVmaW5lIFBIWV9QSFlfQ09OVFJPTCAgICAgICAgICAgIDB4MTcJLy8jZGVmaW5lIFRSVV9WTUlfUEhZX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgICAyMworI2RlZmluZSBQSFlfSU5URVJSVVBUX01BU0sgICAgICAgICAweDE4CS8vI2RlZmluZSBUUlVfVk1JX0lOVEVSUlVQVF9NQVNLX1JFR0lTVEVSICAgICAgICAgMjQKKyNkZWZpbmUgUEhZX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgMHgxOQkvLyNkZWZpbmUgVFJVX1ZNSV9JTlRFUlJVUFRfU1RBVFVTX1JFR0lTVEVSICAgICAgIDI1CisjZGVmaW5lIFBIWV9QSFlfU1RBVFVTICAgICAgICAgICAgIDB4MUEJLy8jZGVmaW5lIFRSVV9WTUlfUEhZX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAyNgorI2RlZmluZSBQSFlfTEVEXzEgICAgICAgICAgICAgICAgICAweDFCCS8vI2RlZmluZSBUUlVfVk1JX0xFRF9DT05UUk9MXzFfUkVHSVNURVIgICAgICAgICAgMjcKKyNkZWZpbmUgUEhZX0xFRF8yICAgICAgICAgICAgICAgICAgMHgxQwkvLyNkZWZpbmUgVFJVX1ZNSV9MRURfQ09OVFJPTF8yX1JFR0lTVEVSICAgICAgICAgIDI4CisJCQkJCS8vI2RlZmluZSBUUlVfVk1JX0xJTktfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgMjkKKwkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfVElNSU5HX0NPTlRST0xfUkVHSVNURVIKKworLyogUHJvdG90eXBlcyBmb3IgUEhZIGFjY2VzcyByb3V0aW5lcyAqLwordm9pZCBFVDEzMTBfUGh5SW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRVQxMzEwX1BoeVBvd2VyRG93bihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZG93bik7Cit2b2lkIEVUMTMxMF9QaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpOwordm9pZCBFVDEzMTBfUGh5RHVwbGV4TW9kZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5U3BlZWRTZWxlY3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BlZWQpOwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSB1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCXUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5TGlua1N0YXR1cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHU4ICp1Y0xpbmtTdGF0dXMsCisJCQkgIHUzMiAqdWlBdXRvTmVnLAorCQkJICB1MzIgKnVpTGlua1NwZWVkLAorCQkJICB1MzIgKnVpRHVwbGV4TW9kZSwKKwkJCSAgdTMyICp1aU1kaU1kaXgsCisJCQkgIHUzMiAqdWlNYXN0ZXJTbGF2ZSwgdTMyICp1aVBvbGFyaXR5KTsKK3ZvaWQgRVQxMzEwX1BoeUFuZE9yUmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCXUxNiByZWdudW0sIHUxNiBhbmRNYXNrLCB1MTYgb3JNYXNrKTsKK3ZvaWQgRVQxMzEwX1BoeUFjY2Vzc01pQml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIHUxNiBhY3Rpb24sCisJCQkgICB1MTYgcmVnbnVtLCB1MTYgYml0bnVtLCB1OCAqdmFsdWUpOworCisjZW5kaWYgLyogX0VUMTMxMF9QSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MzliYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9wbS5jIC0gQWxsIHBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCBjb2RlIChub3QgY29tcGxldGVseSBpbXBsZW1lbnRlZCkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKioKKyAqIEVuYWJsZVBoeUNvbWEgLSBjYWxsZWQgd2hlbiBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIGRyaXZlciByZWNlaXZlIGFuIHBoeSBzdGF0dXMgY2hhbmdlIGludGVycnVwdCB3aGlsZSBpbiBEMCBhbmQgY2hlY2sgdGhhdAorICogcGh5X3N0YXR1cyBpcyBkb3duLgorICoKKyAqICAgICAgICAgIC0tIGdhdGUgb2ZmIEpBR0NvcmU7CisgKiAgICAgICAgICAtLSBzZXQgZ2lnRSBQSFkgaW4gQ29tYSBtb2RlCisgKiAgICAgICAgICAtLSB3YWtlIG9uIHBoeV9pbnRlcnJ1cHQ7IFBlcmZvcm0gc29mdHdhcmUgcmVzZXQgSkFHQ29yZSwKKyAqICAgICAgICAgICAgIHJlLWluaXRpYWxpemUgamFnY29yZSBhbmQgZ2lnRSBQSFkKKyAqCisgKiAgICAgIEFkZCBEMC1BU1BNLVBoeUxpbmtEb3duIFN1cHBvcnQ6CisgKiAgICAgICAgICAtLSB3aGlsZSBpbiBEMCwgd2hlbiB0aGVyZSBpcyBhIHBoeV9pbnRlcnJ1cHQgaW5kaWNhdGluZyBwaHkgbGluaworICogICAgICAgICAgICAgZG93biBzdGF0dXMsIGNhbGwgdGhlIE1QU2V0UGh5Q29tYSByb3V0aW5lIHRvIGVudGVyIHRoaXMgYWN0aXZlCisgKiAgICAgICAgICAgICBzdGF0ZSBwb3dlciBzYXZpbmcgbW9kZQorICogICAgICAgICAgLS0gd2hpbGUgaW4gRDAtQVNQTS1QaHlMaW5rRG93biBtb2RlLCB3aGVuIHRoZXJlIGlzIGEgcGh5X2ludGVycnVwdAorICogICAgICAgaW5kaWNhdGluZyBsaW5rdXAgc3RhdHVzLCBjYWxsIHRoZSBNUERpc2FibGVQaHlDb21hIHJvdXRpbmUgdG8KKyAqICAgICAgICAgICAgIHJlc3RvcmUgSkFHQ29yZSBhbmQgZ2lnRSBQSFkKKyAqLwordm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJUE1fQ1NSX3QgR2xvYmFsUG1DU1I7CisJaW50MzJfdCBMb29wQ291bnRlciA9IDEwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCUdsb2JhbFBtQ1NSLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIFNhdmUgdGhlIEdiRSBQSFkgc3BlZWQgYW5kIGR1cGxleCBtb2Rlcy4gTmVlZCB0byByZXN0b3JlIHRoaXMKKwkgKiB3aGVuIGNhYmxlIGlzIHBsdWdnZWQgYmFjayBpbgorCSAqLworCXBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duU3BlZWQgPSBwQWRhcHRlci0+QWlGb3JjZVNwZWVkOworCXBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duRHVwbGV4ID0gcEFkYXB0ZXItPkFpRm9yY2VEcHg7CisKKwkvKiBTdG9wIHNlbmRpbmcgcGFja2V0cy4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFncyk7CisJTVBfU0VUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzKTsKKworCS8qIFdhaXQgZm9yIG91dHN0YW5kaW5nIFJlY2VpdmUgcGFja2V0cyAqLworCXdoaWxlICgoTVBfR0VUX1JDVl9SRUYocEFkYXB0ZXIpICE9IDApICYmIChMb29wQ291bnRlci0tID4gMCkpIHsKKwkJbWRlbGF5KDIpOworCX0KKworCS8qIEdhdGUgb2ZmIEpBR0NvcmUgMyBjbG9jayBkb21haW5zICovCisJR2xvYmFsUG1DU1IuYml0cy5wbV9zeXNjbGtfZ2F0ZSA9IDA7CisJR2xvYmFsUG1DU1IuYml0cy5wbV90eGNsa19nYXRlID0gMDsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3J4Y2xrX2dhdGUgPSAwOworCXdyaXRlbChHbG9iYWxQbUNTUi52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIFByb2dyYW0gZ2lnRSBQSFkgaW4gdG8gQ29tYSBtb2RlICovCisJR2xvYmFsUG1DU1IuYml0cy5wbV9waHlfc3dfY29tYSA9IDE7CisJd3JpdGVsKEdsb2JhbFBtQ1NSLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBEaXNhYmxlUGh5Q29tYSAtIERpc2FibGUgdGhlIFBoeSBDb21hIE1vZGUKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBEaXNhYmxlUGh5Q29tYShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNX0NTUl90IEdsb2JhbFBtQ1NSOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCUdsb2JhbFBtQ1NSLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIERpc2FibGUgcGh5X3N3X2NvbWEgcmVnaXN0ZXIgYW5kIHJlLWVuYWJsZSBKQUdDb3JlIGNsb2NrcyAqLworCUdsb2JhbFBtQ1NSLmJpdHMucG1fc3lzY2xrX2dhdGUgPSAxOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fdHhjbGtfZ2F0ZSA9IDE7CisJR2xvYmFsUG1DU1IuYml0cy5wbV9yeGNsa19nYXRlID0gMTsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3BoeV9zd19jb21hID0gMDsKKwl3cml0ZWwoR2xvYmFsUG1DU1IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwkvKiBSZXN0b3JlIHRoZSBHYkUgUEhZIHNwZWVkIGFuZCBkdXBsZXggbW9kZXM7CisJICogUmVzZXQgSkFHQ29yZTsgcmUtY29uZmlndXJlIGFuZCBpbml0aWFsaXplIEpBR0NvcmUgYW5kIGdpZ0UgUEhZCisJICovCisJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IHBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duU3BlZWQ7CisJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSBwQWRhcHRlci0+UG9NZ210LlBvd2VyRG93bkR1cGxleDsKKworCS8qIFJlLWluaXRpYWxpemUgdGhlIHNlbmQgc3RydWN0dXJlcyAqLworCWV0MTMxeF9pbml0X3NlbmQocEFkYXB0ZXIpOworCisJLyogUmVzZXQgdGhlIFJGRCBsaXN0IGFuZCByZS1zdGFydCBSVSAgKi8KKwlldDEzMXhfcmVzZXRfcmVjdihwQWRhcHRlcik7CisKKwkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdG8gdGhlIHN0YXRlIGl0IHdhcyBkdXJpbmcgaW5pdCBwcmlvciB0bworICAgICAgICAgKiBhdXRvbmVnb3RpYXRpb24gYmVpbmcgY29tcGxldGUuICBUaGlzIHdheSwgd2hlbiB3ZSBnZXQgdGhlIGF1dG8tbmVnCisgICAgICAgICAqIGNvbXBsZXRlIGludGVycnVwdCwgd2UgY2FuIGNvbXBsZXRlIGluaXQgYnkgY2FsbGluZyBDb25maWdNYWNSRUdTMi4KKyAgICAgICAgICovCisJZXQxMzF4X3NvZnRfcmVzZXQocEFkYXB0ZXIpOworCisJLyogc2V0dXAgZXQxMzEwIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiA/PyAqLworCWV0MTMxeF9hZGFwdGVyX3NldHVwKHBBZGFwdGVyKTsKKworCS8qIEFsbG93IFR4IHRvIHJlc3RhcnQgKi8KKwlNUF9DTEVBUl9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUik7CisKKwkvKiBOZWVkIHRvIHJlLWVuYWJsZSBSeC4gKi8KKwlldDEzMXhfcnhfZG1hX2VuYWJsZShwQWRhcHRlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAyMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcG0uaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gcG93ZXIKKyAqICAgICAgICAgICAgICAgbWFuYWdlbWVudC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfRVQxMzEwX1BNX0hfCisjZGVmaW5lIF9FVDEzMTBfUE1fSF8KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjZGVmaW5lIE1BWF9XT0xfUEFDS0VUX1NJWkUgICAgMHg4MAorI2RlZmluZSBNQVhfV09MX01BU0tfU0laRSAgICAgICggTUFYX1dPTF9QQUNLRVRfU0laRSAvIDggKQorI2RlZmluZSBOVU1fV09MX1BBVFRFUk5TICAgICAgIDB4NQorI2RlZmluZSBDUkMxNl9QT0xZICAgICAgICAgICAgIDB4MTAyMQorCisvKiBEZWZpbml0aW9uIG9mIE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFICovCit0eXBlZGVmIGVudW0geworCU5kaXNEZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKKwlOZGlzRGV2aWNlU3RhdGVEMCwKKwlOZGlzRGV2aWNlU3RhdGVEMSwKKwlOZGlzRGV2aWNlU3RhdGVEMiwKKwlOZGlzRGV2aWNlU3RhdGVEMworfSBORElTX0RFVklDRV9QT1dFUl9TVEFURTsKKwordHlwZWRlZiBzdHJ1Y3QgX01QX1BPV0VSX01HTVQgeworCS8qIHZhcmlhYmxlIHB1dHRpbmcgdGhlIHBoeSBpbnRvIGNvbWEgbW9kZSB3aGVuIGJvb3QgdXAgd2l0aCBubyBjYWJsZQorCSAqIHBsdWdnZWQgaW4gYWZ0ZXIgNSBzZWNvbmRzCisJICovCisJdTggVHJhbnNQaHlDb21hTW9kZU9uQm9vdDsKKworCS8qIEFycmF5IGhvbGRpbmcgdGhlIGZpdmUgQ1JDIHZhbHVlcyB0aGF0IHRoZSBkZXZpY2UgaXMgY3VycmVudGx5CisJICogdXNpbmcgZm9yIFdPTC4gIFRoaXMgd2lsbCBiZSBxdWVyaWVkIHdoZW4gYSBwYXR0ZXJuIGlzIHRvIGJlCisJICogcmVtb3ZlZC4KKwkgKi8KKwl1MzIgbG9jYWxXb2xBbmRDcmMwOworCXUxNiBXT0xQYXR0ZXJuTGlzdFtOVU1fV09MX1BBVFRFUk5TXTsKKwl1OCBXT0xNYXNrTGlzdFtOVU1fV09MX1BBVFRFUk5TXVtNQVhfV09MX01BU0tfU0laRV07CisJdTMyIFdPTE1hc2tTaXplW05VTV9XT0xfUEFUVEVSTlNdOworCisJLyogSVAgYWRkcmVzcyAqLworCXVuaW9uIHsKKwkJdTMyIHUzMjsKKwkJdTggdThbNF07CisJfSBJUEFkZHJlc3M7CisKKwkvKiBDdXJyZW50IFBvd2VyIHN0YXRlIG9mIHRoZSBhZGFwdGVyLiAqLworCU5ESVNfREVWSUNFX1BPV0VSX1NUQVRFIFBvd2VyU3RhdGU7CisJYm9vbCBXT0xTdGF0ZTsKKwlib29sIFdPTEVuYWJsZWQ7CisJYm9vbCBGYWlsZWQxMEhhbGY7CisJYm9vbCBiRmFpbGVkU3RhdGVUcmFuc2l0aW9uOworCisJLyogTmV4dCB0d28gdXNlZCB0byBzYXZlIHBvd2VyIGluZm9ybWF0aW9uIGF0IHBvd2VyIGRvd24uIFRoaXMKKwkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZHVyaW5nIHBvd2VyIHVwIHRvIHNldCB1cCBwYXJ0cyBvZiBQb3dlcgorCSAqIE1hbmFnZW1lbnQgaW4gSkFHQ29yZQorCSAqLworCXUzMiB0eF9lbjsKKwl1MzIgcnhfZW47CisJdTE2IFBvd2VyRG93blNwZWVkOworCXU4IFBvd2VyRG93bkR1cGxleDsKK30gTVBfUE9XRVJfTUdNVCwgKlBNUF9QT1dFUl9NR01UOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAoIElTIFRIRVJFIEEgV0FZIFRPIERPIFRISVMgV0lUSCBBIFRZUEVERUY/Pz8gKQorICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3UxNiBDYWxjdWxhdGVDQ0lUQ1JDMTYodTggKlBhdHRlcm4sIHU4ICpNYXNrLCB1MzIgTWFza1NpemUpOwordm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIERpc2FibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfRVQxMzEwX1BNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk4ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMCwwICsxLDEzOTEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3J4LmMgLSBSb3V0aW5lcyB1c2VkIHRvIHBlcmZvcm0gZGF0YSByZWNlcHRpb24KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworCit2b2lkIG5pY19yZXR1cm5fcmZkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9SRkQgcE1wUmZkKTsKKworLyoqCisgKiBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICoKKyAqIEFsbG9jYXRlcyBGcmVlIGJ1ZmZlciByaW5nIDEgZm9yIHN1cmUsIGZyZWUgYnVmZmVyIHJpbmcgMCBpZiByZXF1aXJlZCwKKyAqIGFuZCB0aGUgUGFja2V0IFN0YXR1cyBSaW5nLgorICovCitpbnQgZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQzMl90IE91dGVyTG9vcCwgSW5uZXJMb29wOworCXVpbnQzMl90IGJ1ZnNpemU7CisJdWludDMyX3QgcGt0U3RhdFJpbmdTaXplLCBGQlJDaHVua1NpemU7CisJUlhfUklOR190ICpyeF9yaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmIGFkYXB0ZXItPlJ4UmluZzsKKworCS8qIEFsbG9jIG1lbW9yeSBmb3IgdGhlIGxvb2t1cCB0YWJsZSAqLworI2lmZGVmIFVTRV9GQlIwCisJcnhfcmluZy0+RmJyWzBdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKyNlbmRpZgorCisJcnhfcmluZy0+RmJyWzFdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKworCS8qIFRoZSBmaXJzdCB0aGluZyB3ZSB3aWxsIGRvIGlzIGNvbmZpZ3VyZSB0aGUgc2l6ZXMgb2YgdGhlIGJ1ZmZlcgorCSAqIHJpbmdzLiBUaGVzZSB3aWxsIGNoYW5nZSBiYXNlZCBvbiBqdW1ibyBwYWNrZXQgc3VwcG9ydC4gIExhcmdlcgorCSAqIGp1bWJvIHBhY2tldHMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIGVhY2ggZW50cnkgaW4gRkJSMCwgYW5kIHRoZQorCSAqIG51bWJlciBvZiBlbnRyaWVzIGluIEZCUjAsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZGVjcmVhc2luZyB0aGUKKwkgKiBudW1iZXIgb2YgZW50cmllcyBpbiBGQlIxLgorCSAqCisJICogRkJSMSBob2xkcyAibGFyZ2UiIGZyYW1lcywgRkJSMCBob2xkcyAic21hbGwiIGZyYW1lcy4gIElmIEZCUjEKKwkgKiBlbnRyaWVzIGFyZSBodWdlIGluIG9yZGVyIHRvIGFjY29tb2RhdGUgYSAianVtYm8iIGZyYW1lLCB0aGVuIGl0CisJICogd2lsbCBoYXZlIGxlc3MgZW50cmllcy4gIENvbnZlcnNlbHksIEZCUjEgd2lsbCBub3cgYmUgcmVsaWVkIHVwb24KKwkgKiB0byBjYXJyeSBtb3JlICJub3JtYWwiIGZyYW1lcywgdGh1cyBpdCdzIGVudHJ5IHNpemUgYWxzbyBpbmNyZWFzZXMKKwkgKiBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGdvZXMgdXAgdG9vIChzaW5jZSBpdCBub3cgY2FycmllcworCSAqICJzbWFsbCIgKyAicmVndWxhciIgcGFja2V0cy4KKwkgKgorCSAqIEluIHRoaXMgc2NoZW1lLCB3ZSB0cnkgdG8gbWFpbnRhaW4gNTEyIGVudHJpZXMgYmV0d2VlbiB0aGUgdHdvCisJICogcmluZ3MuIEFsc28sIEZCUjEgcmVtYWlucyBhIGNvbnN0YW50IHNpemUgLSB3aGVuIGl0J3Mgc2l6ZSBkb3VibGVzCisJICogdGhlIG51bWJlciBvZiBlbnRyaWVzIGhhbHZlcy4gIEZCUjAgaW5jcmVhc2VzIGluIHNpemUsIGhvd2V2ZXIuCisJICovCisKKwlpZiAoYWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA8IDIwNDgpIHsKKyNpZmRlZiBVU0VfRkJSMAorCQlyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSA9IDI1NjsKKwkJcnhfcmluZy0+RmJyME51bUVudHJpZXMgPSA1MTI7CisjZW5kaWYKKwkJcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPSAyMDQ4OworCQlyeF9yaW5nLT5GYnIxTnVtRW50cmllcyA9IDUxMjsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCA0MDk2KSB7CisjaWZkZWYgVVNFX0ZCUjAKKwkJcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgPSA1MTI7CisJCXJ4X3JpbmctPkZicjBOdW1FbnRyaWVzID0gMTAyNDsKKyNlbmRpZgorCQlyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA9IDQwOTY7CisJCXJ4X3JpbmctPkZicjFOdW1FbnRyaWVzID0gNTEyOworCX0gZWxzZSB7CisjaWZkZWYgVVNFX0ZCUjAKKwkJcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgPSAxMDI0OworCQlyeF9yaW5nLT5GYnIwTnVtRW50cmllcyA9IDc2ODsKKyNlbmRpZgorCQlyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA9IDE2Mzg0OworCQlyeF9yaW5nLT5GYnIxTnVtRW50cmllcyA9IDEyODsKKwl9CisKKyNpZmRlZiBVU0VfRkJSMAorCWFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+UnhSaW5nLkZicjBOdW1FbnRyaWVzICsKKwkgICAgYWRhcHRlci0+UnhSaW5nLkZicjFOdW1FbnRyaWVzOworI2Vsc2UKKwlhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllcyA9IGFkYXB0ZXItPlJ4UmluZy5GYnIxTnVtRW50cmllczsKKyNlbmRpZgorCisJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMSAqLworCWJ1ZnNpemUgPSAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpICsgMHhmZmY7CisJcnhfcmluZy0+cEZicjFSaW5nVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIGJ1ZnNpemUsCisJCQkJCQkgICAgJnJ4X3JpbmctPnBGYnIxUmluZ1BhKTsKKwlpZiAoIXJ4X3JpbmctPnBGYnIxUmluZ1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URTogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlCisJICogYmVmb3JlIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJcnhfcmluZy0+RmJyMVJlYWxwYSA9IHJ4X3JpbmctPnBGYnIxUmluZ1BhOworCisJLyogQWxpZ24gRnJlZSBCdWZmZXIgUmluZyAxIG9uIGEgNEsgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxUmVhbHBhLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxb2Zmc2V0LCAweDBGRkYpOworCisJcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMVJpbmdWYSArCisJCQkJCXJ4X3JpbmctPkZicjFvZmZzZXQpOworCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwICovCisJYnVmc2l6ZSA9IChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykgKyAweGZmZjsKKwlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICAmcnhfcmluZy0+cEZicjBSaW5nUGEpOworCWlmICghcnhfcmluZy0+cEZicjBSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwlyeF9yaW5nLT5GYnIwUmVhbHBhID0gcnhfcmluZy0+cEZicjBSaW5nUGE7CisKKwkvKiBBbGlnbiBGcmVlIEJ1ZmZlciBSaW5nIDAgb24gYSA0SyBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjBSZWFscGEsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjBvZmZzZXQsIDB4MEZGRik7CisKKwlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIwUmluZ1ZhICsKKwkJCQkJcnhfcmluZy0+RmJyMG9mZnNldCk7CisjZW5kaWYKKworCWZvciAoT3V0ZXJMb29wID0gMDsgT3V0ZXJMb29wIDwgKHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7CisJICAgICBPdXRlckxvb3ArKykgeworCQl1aW50NjRfdCBGYnIxT2Zmc2V0OworCQl1aW50NjRfdCBGYnIxVGVtcFBhOworCQl1aW50MzJfdCBGYnIxQWxpZ247CisKKwkJLyogVGhpcyBjb2RlIGFsbG9jYXRlcyBhbiBhcmVhIG9mIG1lbW9yeSBiaWcgZW5vdWdoIGZvciBOCisJCSAqIGZyZWUgYnVmZmVycyArIChidWZmZXJfc2l6ZSAtIDEpIHNvIHRoYXQgdGhlIGJ1ZmZlcnMgY2FuCisJCSAqIGJlIGFsaWduZWQgb24gNGsgYm91bmRhcmllcy4gIElmIGVhY2ggYnVmZmVyIHdlcmUgYWxpZ25lZAorCQkgKiB0byBhIGJ1ZmZlcl9zaXplIGJvdW5kYXJ5LCB0aGUgZWZmZWN0IHdvdWxkIGJlIHRvIGRvdWJsZQorCQkgKiB0aGUgc2l6ZSBvZiBGQlIwLiAgQnkgYWxsb2NhdGluZyBOIGJ1ZmZlcnMgYXQgb25jZSwgd2UKKwkJICogcmVkdWNlIHRoaXMgb3ZlcmhlYWQuCisJCSAqLworCQlpZiAocnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPiA0MDk2KSB7CisJCQlGYnIxQWxpZ24gPSA0MDk2OworCQl9IGVsc2UgeworCQkJRmJyMUFsaWduID0gcnhfcmluZy0+RmJyMUJ1ZmZlclNpemU7CisJCX0KKworCQlGQlJDaHVua1NpemUgPQorCQkgICAgKEZCUl9DSFVOS1MgKiByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSkgKyBGYnIxQWxpZ24gLSAxOworCQlyeF9yaW5nLT5GYnIxTWVtVmFbT3V0ZXJMb29wXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBGQlJDaHVua1NpemUsCisJCQkJCSAmcnhfcmluZy0+RmJyMU1lbVBhW091dGVyTG9vcF0pOworCisJCWlmICghcnhfcmluZy0+RmJyMU1lbVZhW091dGVyTG9vcF0pIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCBhbGxvYyBtZW1vcnlcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogU2VlIE5PVEUgaW4gIlNhdmUgUGh5c2ljYWwgQWRkcmVzcyIgY29tbWVudCBhYm92ZSAqLworCQlGYnIxVGVtcFBhID0gcnhfcmluZy0+RmJyMU1lbVBhW091dGVyTG9vcF07CisKKwkJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgICAgJkZicjFUZW1wUGEsCisJCQkJCSAgICAgICZGYnIxT2Zmc2V0LCAoRmJyMUFsaWduIC0gMSkpOworCisJCWZvciAoSW5uZXJMb29wID0gMDsgSW5uZXJMb29wIDwgRkJSX0NIVU5LUzsgSW5uZXJMb29wKyspIHsKKwkJCXVpbnQzMl90IGluZGV4ID0gKE91dGVyTG9vcCAqIEZCUl9DSFVOS1MpICsgSW5uZXJMb29wOworCisJCQkvKiBTYXZlIHRoZSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhpcyBpbmRleCBmb3IgcXVpY2sKKwkJCSAqIGFjY2VzcyBsYXRlcgorCQkJICovCisJCQlyeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XSA9CisJCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyMU1lbVZhW091dGVyTG9vcF0gKworCQkJICAgIChJbm5lckxvb3AgKiByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSkgKyBGYnIxT2Zmc2V0OworCisJCQkvKiBub3cgc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4gdGhlIGRlc2NyaXB0b3IKKwkJCSAqIHNvIHRoZSBkZXZpY2UgY2FuIGFjY2VzcyBpdAorCQkJICovCisJCQlyeF9yaW5nLT5GYnJbMV0tPlBBSGlnaFtpbmRleF0gPQorCQkJICAgICh1aW50MzJfdCkgKEZicjFUZW1wUGEgPj4gMzIpOworCQkJcnhfcmluZy0+RmJyWzFdLT5QQUxvd1tpbmRleF0gPSAodWludDMyX3QpIEZicjFUZW1wUGE7CisKKwkJCUZicjFUZW1wUGEgKz0gcnhfcmluZy0+RmJyMUJ1ZmZlclNpemU7CisKKwkJCXJ4X3JpbmctPkZiclsxXS0+QnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdOworCQkJcnhfcmluZy0+RmJyWzFdLT5CdWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzFdLT5WYVtpbmRleF0gLSA0OworCQl9CisJfQorCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBTYW1lIGZvciBGQlIwIChpZiBpbiB1c2UpICovCisJZm9yIChPdXRlckxvb3AgPSAwOyBPdXRlckxvb3AgPCAocnhfcmluZy0+RmJyME51bUVudHJpZXMgLyBGQlJfQ0hVTktTKTsKKwkgICAgIE91dGVyTG9vcCsrKSB7CisJCXVpbnQ2NF90IEZicjBPZmZzZXQ7CisJCXVpbnQ2NF90IEZicjBUZW1wUGE7CisKKwkJRkJSQ2h1bmtTaXplID0gKChGQlJfQ0hVTktTICsgMSkgKiByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSkgLSAxOworCQlyeF9yaW5nLT5GYnIwTWVtVmFbT3V0ZXJMb29wXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBGQlJDaHVua1NpemUsCisJCQkJCSAmcnhfcmluZy0+RmJyME1lbVBhW091dGVyTG9vcF0pOworCisJCWlmICghcnhfcmluZy0+RmJyME1lbVZhW091dGVyTG9vcF0pIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCBhbGxvYyBtZW1vcnlcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogU2VlIE5PVEUgaW4gIlNhdmUgUGh5c2ljYWwgQWRkcmVzcyIgY29tbWVudCBhYm92ZSAqLworCQlGYnIwVGVtcFBhID0gcnhfcmluZy0+RmJyME1lbVBhW091dGVyTG9vcF07CisKKwkJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgICAgJkZicjBUZW1wUGEsCisJCQkJCSAgICAgICZGYnIwT2Zmc2V0LAorCQkJCQkgICAgICByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSAtIDEpOworCisJCWZvciAoSW5uZXJMb29wID0gMDsgSW5uZXJMb29wIDwgRkJSX0NIVU5LUzsgSW5uZXJMb29wKyspIHsKKwkJCXVpbnQzMl90IGluZGV4ID0gKE91dGVyTG9vcCAqIEZCUl9DSFVOS1MpICsgSW5uZXJMb29wOworCisJCQlyeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XSA9CisJCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyME1lbVZhW091dGVyTG9vcF0gKworCQkJICAgIChJbm5lckxvb3AgKiByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSkgKyBGYnIwT2Zmc2V0OworCisJCQlyeF9yaW5nLT5GYnJbMF0tPlBBSGlnaFtpbmRleF0gPQorCQkJICAgICh1aW50MzJfdCkgKEZicjBUZW1wUGEgPj4gMzIpOworCQkJcnhfcmluZy0+RmJyWzBdLT5QQUxvd1tpbmRleF0gPSAodWludDMyX3QpIEZicjBUZW1wUGE7CisKKwkJCUZicjBUZW1wUGEgKz0gcnhfcmluZy0+RmJyMEJ1ZmZlclNpemU7CisKKwkJCXJ4X3JpbmctPkZiclswXS0+QnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdOworCQkJcnhfcmluZy0+RmJyWzBdLT5CdWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzBdLT5WYVtpbmRleF0gLSA0OworCQl9CisJfQorI2VuZGlmCisKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3IgRklGTyBvZiBQYWNrZXQgU3RhdHVzIHJpbmcgZW50cmllcyAqLworCXBrdFN0YXRSaW5nU2l6ZSA9CisJICAgIHNpemVvZihQS1RfU1RBVF9ERVNDX3QpICogYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXM7CisKKwlyeF9yaW5nLT5wUFNSaW5nVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICBwa3RTdGF0UmluZ1NpemUgKyAweDBmZmYsCisJCQkJCQkgICZyeF9yaW5nLT5wUFNSaW5nUGEpOworCisJaWYgKCFyeF9yaW5nLT5wUFNSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgUGFja2V0IFN0YXR1cyBSaW5nXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFIDogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlIGJlZm9yZQorCSAqIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJcnhfcmluZy0+cFBTUmluZ1JlYWxQYSA9IHJ4X3JpbmctPnBQU1JpbmdQYTsKKworCS8qIEFsaWduIFBhY2tldCBTdGF0dXMgUmluZyBvbiBhIDRLIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmcnhfcmluZy0+cFBTUmluZ1JlYWxQYSwKKwkJCQkgICAgICAmcnhfcmluZy0+cFBTUmluZ09mZnNldCwgMHgwRkZGKTsKKworCXJ4X3JpbmctPnBQU1JpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBQU1JpbmdWYSArCisJCQkJICAgICAgcnhfcmluZy0+cFBTUmluZ09mZnNldCk7CisKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3Igd3JpdGViYWNrIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpICsKKwkJCQkJCSAgICAweDcsICZyeF9yaW5nLT5wUnhTdGF0dXNQYSk7CisJaWYgKCFyeF9yaW5nLT5wUnhTdGF0dXNWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBTdGF0dXMgQmxvY2tcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlyeF9yaW5nLT5SeFN0YXR1c1JlYWxQQSA9IHJ4X3JpbmctPnBSeFN0YXR1c1BhOworCisJLyogQWxpZ24gd3JpdGUgYmFjayBvbiBhbiA4IGJ5dGUgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5SeFN0YXR1c1JlYWxQQSwKKwkJCQkgICAgICAmcnhfcmluZy0+UnhTdGF0dXNPZmZzZXQsIDB4MDcpOworCisJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUnhTdGF0dXNWYSArCisJCQkJCXJ4X3JpbmctPlJ4U3RhdHVzT2Zmc2V0KTsKKwlyeF9yaW5nLT5OdW1SZmQgPSBOSUNfREVGQVVMVF9OVU1fUkZEOworCisJLyogUmVjdgorCSAqIHBjaV9wb29sX2NyZWF0ZSBpbml0aWFsaXplcyBhIGxvb2thc2lkZSBsaXN0LiBBZnRlciBzdWNjZXNzZnVsCisJICogY3JlYXRpb24sIG5vbnBhZ2VkIGZpeGVkLXNpemUgYmxvY2tzIGNhbiBiZSBhbGxvY2F0ZWQgZnJvbSBhbmQKKwkgKiBmcmVlZCB0byB0aGUgbG9va2FzaWRlIGxpc3QuCisJICogUkZEcyB3aWxsIGJlIGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbC4KKwkgKi8KKwlyeF9yaW5nLT5SZWN2TG9va2FzaWRlID0ga21lbV9jYWNoZV9jcmVhdGUoYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCQkJICAgc2l6ZW9mKE1QX1JGRCksCisJCQkJCQkgICAwLAorCQkJCQkJICAgU0xBQl9DQUNIRV9ETUEgfAorCQkJCQkJICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkJICAgTlVMTCk7CisKKwlNUF9TRVRfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERSk7CisKKwkvKiBUaGUgUkZEcyBhcmUgZ29pbmcgdG8gYmUgcHV0IG9uIGxpc3RzIGxhdGVyIG9uLCBzbyBpbml0aWFsaXplIHRoZQorCSAqIGxpc3RzIG5vdy4KKwkgKi8KKwlJTklUX0xJU1RfSEVBRCgmcnhfcmluZy0+UmVjdkxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlIC0gRnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBtb2R1bGUuCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCXVpbnQzMl90IGluZGV4OworCXVpbnQzMl90IGJ1ZnNpemU7CisJdWludDMyX3QgcGt0U3RhdFJpbmdTaXplOworCVBNUF9SRkQgcE1wUmZkOworCVJYX1JJTkdfdCAqcnhfcmluZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJiBhZGFwdGVyLT5SeFJpbmc7CisKKwkvKiBGcmVlIFJGRHMgYW5kIGFzc29jaWF0ZWQgcGFja2V0IGRlc2NyaXB0b3JzICovCisJREJHX0FTU0VSVChyeF9yaW5nLT5uUmVhZHlSZWN2ID09IHJ4X3JpbmctPk51bVJmZCk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4X3JpbmctPlJlY3ZMaXN0KSkgeworCQlwTXBSZmQgPSAoTVBfUkZEICopIGxpc3RfZW50cnkocnhfcmluZy0+UmVjdkxpc3QubmV4dCwKKwkJCQkJICAgICAgIE1QX1JGRCwgbGlzdF9ub2RlKTsKKworCQlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCQlldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKGFkYXB0ZXIsIHBNcFJmZCk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QpKSB7CisJCXBNcFJmZCA9IChNUF9SRkQgKikgbGlzdF9lbnRyeShyeF9yaW5nLT5SZWN2UGVuZGluZ0xpc3QubmV4dCwKKwkJCQkJICAgICAgIE1QX1JGRCwgbGlzdF9ub2RlKTsKKwkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwkJZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShhZGFwdGVyLCBwTXBSZmQpOworCX0KKworCS8qIEZyZWUgRnJlZSBCdWZmZXIgUmluZyAxICovCisJaWYgKHJ4X3JpbmctPnBGYnIxUmluZ1ZhKSB7CisJCS8qIEZpcnN0IHRoZSBwYWNrZXQgbWVtb3J5ICovCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8CisJCSAgICAgKHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7IGluZGV4KyspIHsKKwkJCWlmIChyeF9yaW5nLT5GYnIxTWVtVmFbaW5kZXhdKSB7CisJCQkJdWludDMyX3QgRmJyMUFsaWduOworCisJCQkJaWYgKHJ4X3JpbmctPkZicjFCdWZmZXJTaXplID4gNDA5NikgeworCQkJCQlGYnIxQWxpZ24gPSA0MDk2OworCQkJCX0gZWxzZSB7CisJCQkJCUZicjFBbGlnbiA9IHJ4X3JpbmctPkZicjFCdWZmZXJTaXplOworCQkJCX0KKworCQkJCWJ1ZnNpemUgPQorCQkJCSAgICAocnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgKiBGQlJfQ0hVTktTKSArCisJCQkJICAgIEZicjFBbGlnbiAtIDE7CisKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIxTWVtVmFbaW5kZXhdLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjFNZW1QYVtpbmRleF0pOworCisJCQkJcnhfcmluZy0+RmJyMU1lbVZhW2luZGV4XSA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBOb3cgdGhlIEZJRk8gaXRzZWxmICovCisJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjFSaW5nVmEgLQorCQkJCQkJcnhfcmluZy0+RmJyMW9mZnNldCk7CisKKwkJYnVmc2l6ZSA9CisJCSAgICAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpICsgMHhmZmY7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBidWZzaXplLAorCQkJCSAgICByeF9yaW5nLT5wRmJyMVJpbmdWYSwgcnhfcmluZy0+cEZicjFSaW5nUGEpOworCisJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gTlVMTDsKKwl9CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIE5vdyB0aGUgc2FtZSBmb3IgRnJlZSBCdWZmZXIgUmluZyAwICovCisJaWYgKHJ4X3JpbmctPnBGYnIwUmluZ1ZhKSB7CisJCS8qIEZpcnN0IHRoZSBwYWNrZXQgbWVtb3J5ICovCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8CisJCSAgICAgKHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7IGluZGV4KyspIHsKKwkJCWlmIChyeF9yaW5nLT5GYnIwTWVtVmFbaW5kZXhdKSB7CisJCQkJYnVmc2l6ZSA9CisJCQkJICAgIChyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSAqCisJCQkJICAgICAoRkJSX0NIVU5LUyArIDEpKSAtIDE7CisKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIwTWVtVmFbaW5kZXhdLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjBNZW1QYVtpbmRleF0pOworCisJCQkJcnhfcmluZy0+RmJyME1lbVZhW2luZGV4XSA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBOb3cgdGhlIEZJRk8gaXRzZWxmICovCisJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjBSaW5nVmEgLQorCQkJCQkJcnhfcmluZy0+RmJyMG9mZnNldCk7CisKKwkJYnVmc2l6ZSA9CisJCSAgICAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyME51bUVudHJpZXMpICsgMHhmZmY7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBidWZzaXplLAorCQkJCSAgICByeF9yaW5nLT5wRmJyMFJpbmdWYSwgcnhfcmluZy0+cEZicjBSaW5nUGEpOworCisJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gTlVMTDsKKwl9CisjZW5kaWYKKworCS8qIEZyZWUgUGFja2V0IFN0YXR1cyBSaW5nICovCisJaWYgKHJ4X3JpbmctPnBQU1JpbmdWYSkgeworCQlyeF9yaW5nLT5wUFNSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUFNSaW5nVmEgLQorCQkJCQkgICAgICByeF9yaW5nLT5wUFNSaW5nT2Zmc2V0KTsKKworCQlwa3RTdGF0UmluZ1NpemUgPQorCQkgICAgc2l6ZW9mKFBLVF9TVEFUX0RFU0NfdCkgKiBhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllczsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIHBrdFN0YXRSaW5nU2l6ZSArIDB4MGZmZiwKKwkJCQkgICAgcnhfcmluZy0+cFBTUmluZ1ZhLCByeF9yaW5nLT5wUFNSaW5nUGEpOworCisJCXJ4X3JpbmctPnBQU1JpbmdWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBhcmVhIG9mIG1lbW9yeSBmb3IgdGhlIHdyaXRlYmFjayBvZiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKwlpZiAocnhfcmluZy0+cFJ4U3RhdHVzVmEpIHsKKwkJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUnhTdGF0dXNWYSAtCisJCQkJCQlyeF9yaW5nLT5SeFN0YXR1c09mZnNldCk7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpICsgMHg3LAorCQkJCSAgICByeF9yaW5nLT5wUnhTdGF0dXNWYSwgcnhfcmluZy0+cFJ4U3RhdHVzUGEpOworCisJCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHJlY2VpdmUgYnVmZmVyIHBvb2wgKi8KKworCS8qIEZyZWUgcmVjZWl2ZSBwYWNrZXQgcG9vbCAqLworCisJLyogRGVzdHJveSB0aGUgbG9va2FzaWRlIChSRkQpIHBvb2wgKi8KKwlpZiAoTVBfVEVTVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX1JFQ1ZfTE9PS0FTSURFKSkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocnhfcmluZy0+UmVjdkxvb2thc2lkZSk7CisJCU1QX0NMRUFSX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfUkVDVl9MT09LQVNJREUpOworCX0KKworCS8qIEZyZWUgdGhlIEZCUiBMb29rdXAgVGFibGUgKi8KKyNpZmRlZiBVU0VfRkJSMAorCWtmcmVlKHJ4X3JpbmctPkZiclswXSk7CisjZW5kaWYKKworCWtmcmVlKHJ4X3JpbmctPkZiclsxXSk7CisKKwkvKiBSZXNldCBDb3VudGVycyAqLworCXJ4X3JpbmctPm5SZWFkeVJlY3YgPSAwOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfaW5pdF9yZWN2IC0gSW5pdGlhbGl6ZSByZWNlaXZlIGRhdGEgc3RydWN0dXJlcy4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAtRU5PTUVNOworCVBNUF9SRkQgcE1wUmZkID0gTlVMTDsKKwl1aW50MzJfdCBSZmRDb3VudDsKKwl1aW50MzJfdCBUb3RhbE51bVJmZCA9IDA7CisJUlhfUklOR190ICpyeF9yaW5nID0gTlVMTDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJiBhZGFwdGVyLT5SeFJpbmc7CisKKwkvKiBTZXR1cCBlYWNoIFJGRCAqLworCWZvciAoUmZkQ291bnQgPSAwOyBSZmRDb3VudCA8IHJ4X3JpbmctPk51bVJmZDsgUmZkQ291bnQrKykgeworCQlwTXBSZmQgPSAoTVBfUkZEICopIGttZW1fY2FjaGVfYWxsb2MocnhfcmluZy0+UmVjdkxvb2thc2lkZSwKKwkJCQkJCSAgICAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCisJCWlmICghcE1wUmZkKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGRuJ3QgYWxsb2MgUkZEIG91dCBvZiBrbWVtX2NhY2hlXG4iKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0YXR1cyA9IGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jKGFkYXB0ZXIsIHBNcFJmZCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkbid0IGFsbG9jIHBhY2tldCBmb3IgUkZEXG4iKTsKKwkJCWttZW1fY2FjaGVfZnJlZShyeF9yaW5nLT5SZWN2TG9va2FzaWRlLCBwTXBSZmQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBBZGQgdGhpcyBSRkQgdG8gdGhlIFJlY3ZMaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcnhfcmluZy0+UmVjdkxpc3QpOworCisJCS8qIEluY3JlbWVudCBib3RoIHRoZSBhdmFpbGFibGUgUkZEJ3MsIGFuZCB0aGUgdG90YWwgUkZEJ3MuICovCisJCXJ4X3JpbmctPm5SZWFkeVJlY3YrKzsKKwkJVG90YWxOdW1SZmQrKzsKKwl9CisKKwlpZiAoVG90YWxOdW1SZmQgPiBOSUNfTUlOX05VTV9SRkQpIHsKKwkJc3RhdHVzID0gMDsKKwl9CisKKwlyeF9yaW5nLT5OdW1SZmQgPSBUb3RhbE51bVJmZDsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUocnhfcmluZy0+UmVjdkxvb2thc2lkZSwgcE1wUmZkKTsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQWxsb2NhdGlvbiBwcm9ibGVtcyBpbiBldDEzMXhfaW5pdF9yZWN2XG4iKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAcE1wUmZkOiBwb2ludGVyIHRvIGEgUkZECisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgTVBfUkZEICpwTXBSZmQpCit7CisJcE1wUmZkLT5QYWNrZXQgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZSAtIEZyZWUgdGhlIHBhY2tldCBhbGxvY2F0ZWQgZm9yIHRoZSBnaXZlbiBSRkQKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAcE1wUmZkOiBwb2ludGVyIHRvIGEgUkZECisgKi8KK3ZvaWQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIE1QX1JGRCAqcE1wUmZkKQoreworCXBNcFJmZC0+UGFja2V0ID0gTlVMTDsKKwlrbWVtX2NhY2hlX2ZyZWUoYWRhcHRlci0+UnhSaW5nLlJlY3ZMb29rYXNpZGUsIHBNcFJmZCk7Cit9CisKKy8qKgorICogQ29uZmlnUnhEbWFSZWdzIC0gU3RhcnQgb2YgUnhfRE1BIGluaXQgc2VxdWVuY2UKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYRE1BX3QgX19pb21lbSAqcFJ4RG1hID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYTsKKwlzdHJ1Y3QgX3J4X3JpbmdfdCAqcFJ4TG9jYWwgPSAmcEFkYXB0ZXItPlJ4UmluZzsKKwlQRkJSX0RFU0NfdCBwRmJyRW50cnk7CisJdWludDMyX3QgaUVudHJ5OworCVJYRE1BX1BTUl9OVU1fREVTX3QgcHNyX251bV9kZXM7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogSGFsdCBSWERNQSB0byBwZXJmb3JtIHRoZSByZWNvbmZpZ3VyZS4gICovCisJZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHBBZGFwdGVyKTsKKworCS8qIExvYWQgdGhlIGNvbXBsZXRpb24gd3JpdGViYWNrIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEUgOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUKKwkgKiBiZWZvcmUgc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPlJ4U3RhdHVzUmVhbFBBID4+IDMyKSwKKwkgICAgICAgJnBSeERtYS0+ZG1hX3diX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5SeFN0YXR1c1JlYWxQQSwgJnBSeERtYS0+ZG1hX3diX2Jhc2VfbG8pOworCisJbWVtc2V0KHBSeExvY2FsLT5wUnhTdGF0dXNWYSwgMCwgc2l6ZW9mKFJYX1NUQVRVU19CTE9DS190KSk7CisKKwkvKiBTZXQgdGhlIGFkZHJlc3MgYW5kIHBhcmFtZXRlcnMgb2YgdGhlIHBhY2tldCBzdGF0dXMgcmluZyBpbnRvIHRoZQorCSAqIDEzMTAncyByZWdpc3RlcnMKKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPnBQU1JpbmdSZWFsUGEgPj4gMzIpLAorCSAgICAgICAmcFJ4RG1hLT5wc3JfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPnBQU1JpbmdSZWFsUGEsICZwUnhEbWEtPnBzcl9iYXNlX2xvKTsKKwl3cml0ZWwocFJ4TG9jYWwtPlBzck51bUVudHJpZXMgLSAxLCAmcFJ4RG1hLT5wc3JfbnVtX2Rlcy52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhEbWEtPnBzcl9mdWxsX29mZnNldC52YWx1ZSk7CisKKwlwc3JfbnVtX2Rlcy52YWx1ZSA9IHJlYWRsKCZwUnhEbWEtPnBzcl9udW1fZGVzLnZhbHVlKTsKKwl3cml0ZWwoKHBzcl9udW1fZGVzLmJpdHMucHNyX25kZXMgKiBMT19NQVJLX1BFUkNFTlRfRk9SX1BTUikgLyAxMDAsCisJICAgICAgICZwUnhEbWEtPnBzcl9taW5fZGVzLnZhbHVlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCS8qIFRoZXNlIGxvY2FsIHZhcmlhYmxlcyB0cmFjayB0aGUgUFNSIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID0gMDsKKwlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbF93cmFwID0gMDsKKworCS8qIE5vdydzIHRoZSBiZXN0IHRpbWUgdG8gaW5pdGlhbGl6ZSBGQlIxIGNvbnRlbnRzICovCisJcEZickVudHJ5ID0gKFBGQlJfREVTQ190KSBwUnhMb2NhbC0+cEZicjFSaW5nVmE7CisJZm9yIChpRW50cnkgPSAwOyBpRW50cnkgPCBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXM7IGlFbnRyeSsrKSB7CisJCXBGYnJFbnRyeS0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMV0tPlBBSGlnaFtpRW50cnldOworCQlwRmJyRW50cnktPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUxvd1tpRW50cnldOworCQlwRmJyRW50cnktPndvcmQyLmJpdHMuYmkgPSBpRW50cnk7CisJCXBGYnJFbnRyeSsrOworCX0KKworCS8qIFNldCB0aGUgYWRkcmVzcyBhbmQgcGFyYW1ldGVycyBvZiBGcmVlIGJ1ZmZlciByaW5nIDEgKGFuZCAwIGlmCisJICogcmVxdWlyZWQpIGludG8gdGhlIDEzMTAncyByZWdpc3RlcnMKKwkgKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPkZicjFSZWFscGEgPj4gMzIpLCAmcFJ4RG1hLT5mYnIxX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5GYnIxUmVhbHBhLCAmcFJ4RG1hLT5mYnIxX2Jhc2VfbG8pOworCXdyaXRlbChwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxLCAmcFJ4RG1hLT5mYnIxX251bV9kZXMudmFsdWUpOworCisJeworCQlETUExMFdfdCBmYnIxX2Z1bGwgPSB7IDAgfTsKKworCQlmYnIxX2Z1bGwuYml0cy52YWwgPSAwOworCQlmYnIxX2Z1bGwuYml0cy53cmFwID0gMTsKKwkJd3JpdGVsKGZicjFfZnVsbC52YWx1ZSwgJnBSeERtYS0+ZmJyMV9mdWxsX29mZnNldC52YWx1ZSk7CisJfQorCisJLyogVGhpcyB2YXJpYWJsZSB0cmFja3MgdGhlIGZyZWUgYnVmZmVyIHJpbmcgMSBmdWxsIHBvc2l0aW9uLCBzbyBpdAorCSAqIGhhcyB0byBtYXRjaCB0aGUgYWJvdmUuCisJICovCisJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLnZhbCA9IDA7CisJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLndyYXAgPSAxOworCXdyaXRlbCgoKHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAqIExPX01BUktfUEVSQ0VOVF9GT1JfUlgpIC8gMTAwKSAtIDEsCisJICAgICAgICZwUnhEbWEtPmZicjFfbWluX2Rlcy52YWx1ZSk7CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIE5vdydzIHRoZSBiZXN0IHRpbWUgdG8gaW5pdGlhbGl6ZSBGQlIwIGNvbnRlbnRzICovCisJcEZickVudHJ5ID0gKFBGQlJfREVTQ190KSBwUnhMb2NhbC0+cEZicjBSaW5nVmE7CisJZm9yIChpRW50cnkgPSAwOyBpRW50cnkgPCBwUnhMb2NhbC0+RmJyME51bUVudHJpZXM7IGlFbnRyeSsrKSB7CisJCXBGYnJFbnRyeS0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMF0tPlBBSGlnaFtpRW50cnldOworCQlwRmJyRW50cnktPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUxvd1tpRW50cnldOworCQlwRmJyRW50cnktPndvcmQyLmJpdHMuYmkgPSBpRW50cnk7CisJCXBGYnJFbnRyeSsrOworCX0KKworCXdyaXRlbCgodWludDMyX3QpIChwUnhMb2NhbC0+RmJyMFJlYWxwYSA+PiAzMiksICZwUnhEbWEtPmZicjBfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPkZicjBSZWFscGEsICZwUnhEbWEtPmZicjBfYmFzZV9sbyk7CisJd3JpdGVsKHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEsICZwUnhEbWEtPmZicjBfbnVtX2Rlcy52YWx1ZSk7CisKKwl7CisJCURNQTEwV190IGZicjBfZnVsbCA9IHsgMCB9OworCisJCWZicjBfZnVsbC5iaXRzLnZhbCA9IDA7CisJCWZicjBfZnVsbC5iaXRzLndyYXAgPSAxOworCQl3cml0ZWwoZmJyMF9mdWxsLnZhbHVlLCAmcFJ4RG1hLT5mYnIwX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwl9CisKKwkvKiBUaGlzIHZhcmlhYmxlIHRyYWNrcyB0aGUgZnJlZSBidWZmZXIgcmluZyAwIGZ1bGwgcG9zaXRpb24sIHNvIGl0CisJICogaGFzIHRvIG1hdGNoIHRoZSBhYm92ZS4KKwkgKi8KKwlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMudmFsID0gMDsKKwlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMud3JhcCA9IDE7CisJd3JpdGVsKCgocFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzICogTE9fTUFSS19QRVJDRU5UX0ZPUl9SWCkgLyAxMDApIC0gMSwKKwkgICAgICAgJnBSeERtYS0+ZmJyMF9taW5fZGVzLnZhbHVlKTsKKyNlbmRpZgorCisJLyogUHJvZ3JhbSB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2Ugd2lsbCByZWNlaXZlIGJlZm9yZSBnZW5lcmF0aW5nIGFuCisJICogaW50ZXJydXB0LgorCSAqIEZvciB2ZXJzaW9uIEIgc2lsaWNvbiwgdGhpcyB2YWx1ZSBnZXRzIHVwZGF0ZWQgb25jZSBhdXRvbmVnIGlzCisJICpjb21wbGV0ZS4KKwkgKi8KKwl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5UnhOdW1CdWZmZXJzLCAmcFJ4RG1hLT5udW1fcGt0X2RvbmUudmFsdWUpOworCisJLyogVGhlICJ0aW1lX2RvbmUiIGlzIG5vdCB3b3JraW5nIGNvcnJlY3RseSB0byBjb2FsZXNjZSBpbnRlcnJ1cHRzCisJICogYWZ0ZXIgYSBnaXZlbiB0aW1lIHBlcmlvZCwgYnV0IHJhdGhlciBpcyBnaXZpbmcgdXMgYW4gaW50ZXJydXB0CisJICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGhhdmUgcmVjZWl2ZWQgcGFja2V0cy4KKwkgKiBUaGlzIHZhbHVlIGdldHMgdXBkYXRlZCBvbmNlIGF1dG9uZWcgaXMgY29tcGxldGUuCisJICovCisJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVJ4VGltZUludGVydmFsLCAmcFJ4RG1hLT5tYXhfcGt0X3RpbWUudmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFNldFJ4RG1hVGltZXIgLSBTZXQgdGhlIGhlYXJ0YmVhdCB0aW1lciBhY2NvcmRpbmcgdG8gbGluZSByYXRlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIFNldFJ4RG1hVGltZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwkvKiBGb3IgdmVyc2lvbiBCIHNpbGljb24sIHdlIGRvIG5vdCB1c2UgdGhlIFJ4RE1BIHRpbWVyIGZvciAxMCBhbmQgMTAwCisJICogTWJpdHMvcyBsaW5lIHJhdGVzLiBXZSBkbyBub3QgZW5hYmxlIGFuZCBSeERNQSBpbnRlcnJ1cHQgY29hbGVzY2luZy4KKwkgKi8KKwlpZiAoKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwME1CUFMpIHx8CisJICAgIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xME1CUFMpKSB7CisJCXdyaXRlbCgwLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLm1heF9wa3RfdGltZS52YWx1ZSk7CisJCXdyaXRlbCgxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLm51bV9wa3RfZG9uZS52YWx1ZSk7CisJfQorfQorCisvKioKKyAqIGV0MTMxeF9yeF9kbWFfZGlzYWJsZSAtIFN0b3Agb2YgUnhfRE1BIG9uIHRoZSBFVDEzMTAKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlSWERNQV9DU1JfdCBjc3I7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgdGhlIHJlY2VpdmUgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl3cml0ZWwoMHgwMDAwMjAwMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMSkgeworCQl1ZGVsYXkoNSk7CisJCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDEpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJSWCBEbWEgZmFpbGVkIHRvIGVudGVyIGhhbHQgc3RhdGUuIENTUiAweCUwOHhcbiIsCisJCQkJICBjc3IudmFsdWUpOworCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfcnhfZG1hX2VuYWJsZSAtIHJlLXN0YXJ0IG9mIFJ4X0RNQSBvbiB0aGUgRVQxMzEwLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmspIHsKKwkvKiBSeERNQSBpcyBkaXNhYmxlZCBmb3IgbG9vcGJhY2sgb3BlcmF0aW9uLiAqLworCQl3cml0ZWwoMHgxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJfSBlbHNlIHsKKwkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3Igbm9ybWFsIG9wZXJhdGlvbiAqLworCQlSWERNQV9DU1JfdCBjc3IgPSB7IDAgfTsKKworCQljc3IuYml0cy5mYnIxX2VuYWJsZSA9IDE7CisJCWlmIChwQWRhcHRlci0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDQwOTYpIHsKKwkJCWNzci5iaXRzLmZicjFfc2l6ZSA9IDE7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA4MTkyKSB7CisJCQljc3IuYml0cy5mYnIxX3NpemUgPSAyOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gMTYzODQpIHsKKwkJCWNzci5iaXRzLmZicjFfc2l6ZSA9IDM7CisJCX0KKyNpZmRlZiBVU0VfRkJSMAorCQljc3IuYml0cy5mYnIwX2VuYWJsZSA9IDE7CisJCWlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDI1NikgeworCQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMTsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDUxMikgeworCQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMjsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDEwMjQpIHsKKwkJCWNzci5iaXRzLmZicjBfc2l6ZSA9IDM7CisJCX0KKyNlbmRpZgorCQl3cml0ZWwoY3NyLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisKKwkJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMCkgeworCQkJdWRlbGF5KDUpOworCQkJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCQkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDApIHsKKwkJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgIlJYIERtYSBmYWlsZWQgdG8gZXhpdCBoYWx0IHN0YXRlLiAgQ1NSIDB4JTA4eFxuIiwKKwkJCQkJICBjc3IudmFsdWUpOworCQkJfQorCQl9CisJfQorCisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBuaWNfcnhfcGt0cyAtIENoZWNrcyB0aGUgaGFyZHdhcmUgZm9yIGF2YWlsYWJsZSBwYWNrZXRzCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBSZXR1cm5zIHBNcFJmZCwgYSBwb2ludGVyIHRvIG91ciBNUFJGRC4KKyAqCisgKiBDaGVja3MgdGhlIGhhcmR3YXJlIGZvciBhdmFpbGFibGUgcGFja2V0cywgdXNpbmcgY29tcGxldGlvbiByaW5nCisgKiBJZiBwYWNrZXRzIGFyZSBhdmFpbGFibGUsIGl0IGdldHMgYW4gUkZEIGZyb20gdGhlIFJlY3ZMaXN0LCBhdHRhY2hlcworICogdGhlIHBhY2tldCB0byBpdCwgcHV0cyB0aGUgUkZEIGluIHRoZSBSZWN2UGVuZExpc3QsIGFuZCBhbHNvIHJldHVybnMKKyAqIHRoZSBwb2ludGVyIHRvIHRoZSBSRkQuCisgKi8KK1BNUF9SRkQgbmljX3J4X3BrdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX3J4X3JpbmdfdCAqcFJ4TG9jYWwgPSAmcEFkYXB0ZXItPlJ4UmluZzsKKwlQUlhfU1RBVFVTX0JMT0NLX3QgcFJ4U3RhdHVzQmxvY2s7CisJUFBLVF9TVEFUX0RFU0NfdCBwUFNSRW50cnk7CisJUE1QX1JGRCBwTXBSZmQ7CisJdWludDMyX3QgbkluZGV4OworCXVpbnQ4X3QgKnBCdWZWYTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OworCXVpbnQ4X3QgcmluZ0luZGV4OworCXVpbnQxNl90IGJ1ZmZlckluZGV4OworCXVpbnQzMl90IGxvY2FsTGVuOworCVBLVF9TVEFUX0RFU0NfV09SRDBfdCBXb3JkMDsKKworCisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFJYIFN0YXR1cyBibG9jayBpcyB3cml0dGVuIGJ5IHRoZSBETUEgZW5naW5lIHByaW9yIHRvIGV2ZXJ5CisJICogaW50ZXJydXB0LiBJdCBjb250YWlucyB0aGUgbmV4dCB0byBiZSB1c2VkIGVudHJ5IGluIHRoZSBQYWNrZXQKKwkgKiBTdGF0dXMgUmluZywgYW5kIGFsc28gdGhlIHR3byBGcmVlIEJ1ZmZlciByaW5ncy4KKwkgKi8KKwlwUnhTdGF0dXNCbG9jayA9IChQUlhfU1RBVFVTX0JMT0NLX3QpIHBSeExvY2FsLT5wUnhTdGF0dXNWYTsKKworCWlmIChwUnhTdGF0dXNCbG9jay0+V29yZDEuYml0cy5QU1JvZmZzZXQgPT0KKwkJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsICYmCisJICAgIHBSeFN0YXR1c0Jsb2NrLT5Xb3JkMS5iaXRzLlBTUndyYXAgPT0KKwkgICAgCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbF93cmFwKSB7CisJCS8qIExvb2tzIGxpa2UgdGhpcyByaW5nIGlzIG5vdCB1cGRhdGVkIHlldCAqLworCQlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICIoMClcbiIpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBUaGUgcGFja2V0IHN0YXR1cyByaW5nIGluZGljYXRlcyB0aGF0IGRhdGEgaXMgYXZhaWxhYmxlLiAqLworCXBQU1JFbnRyeSA9IChQUEtUX1NUQVRfREVTQ190KSAocFJ4TG9jYWwtPnBQU1JpbmdWYSkgKworCQkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGw7CisKKwkvKiBHcmFiIGFueSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcXVpcmVkIG9uY2UgdGhlIFBTUiBpcworCSAqIGFkdmFuY2VkLCBzaW5jZSB3ZSBjYW4gbm8gbG9uZ2VyIHJlbHkgb24gdGhlIG1lbW9yeSBiZWluZworCSAqIGFjY3VyYXRlCisJICovCisJbG9jYWxMZW4gPSBwUFNSRW50cnktPndvcmQxLmJpdHMubGVuZ3RoOworCXJpbmdJbmRleCA9ICh1aW50OF90KSBwUFNSRW50cnktPndvcmQxLmJpdHMucmk7CisJYnVmZmVySW5kZXggPSAodWludDE2X3QpIHBQU1JFbnRyeS0+d29yZDEuYml0cy5iaTsKKwlXb3JkMCA9IHBQU1JFbnRyeS0+d29yZDA7CisKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJSWCBQQUNLRVQgU1RBVFVTXG4iKTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdGxlbmd0aCAgICAgIDogJWRcbiIsIGxvY2FsTGVuKTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdHJpbmdJbmRleCAgIDogJWRcbiIsIHJpbmdJbmRleCk7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHRidWZmZXJJbmRleCA6ICVkXG4iLCBidWZmZXJJbmRleCk7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHR3b3JkMCAgICAgICA6IDB4JTA4eFxuIiwgV29yZDAudmFsdWUpOworCisjaWYgMAorCS8qIENoZWNrIHRoZSBTdGF0dXMgV29yZCB0aGF0IHRoZSBNQUMgaGFzIGFwcGVuZGVkIHRvIHRoZSBQU1IKKwkgKiBlbnRyeSBpbiBjYXNlIHRoZSBNQUMgaGFzIGRldGVjdGVkIGVycm9ycy4KKwkgKi8KKwlpZiAoV29yZDAudmFsdWUgJiBBTENBVEVMX0JBRF9TVEFUVVMpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUnhQa3RzID4+IEFsY2F0ZWwgU3RhdHVzIFdvcmQgZXJyb3IuIgorCQkJICAiVmFsdWUgMHglMDh4XG4iLCBwUFNSRW50cnktPndvcmQwLnZhbHVlKTsKKwl9CisjZW5kaWYKKworCS8qIEluZGljYXRlIHRoYXQgd2UgaGF2ZSB1c2VkIHRoaXMgUFNSIGVudHJ5LiAqLworCWlmICgrK3BSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID4KKwkgICAgcFJ4TG9jYWwtPlBzck51bUVudHJpZXMgLSAxKSB7CisJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsID0gMDsKKwkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGxfd3JhcCBePSAxOworCX0KKworCXdyaXRlbChwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwudmFsdWUsCisJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEucHNyX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKworI2lmbmRlZiBVU0VfRkJSMAorCWlmIChyaW5nSW5kZXggIT0gMSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSeFBrdHMgUFNSIEVudHJ5ICVkIGluZGljYXRlcyAiCisJCQkgICJCdWZmZXIgUmluZyAwIGluIHVzZVxuIiwKKwkJCSAgcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYKKworI2lmZGVmIFVTRV9GQlIwCisJaWYgKHJpbmdJbmRleCA+IDEgfHwKKwkgICAgKHJpbmdJbmRleCA9PSAwICYmCisJICAgICBidWZmZXJJbmRleCA+IHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEpIHx8CisJICAgIChyaW5nSW5kZXggPT0gMSAmJgorCSAgICAgYnVmZmVySW5kZXggPiBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxKSkKKyNlbHNlCisJaWYgKHJpbmdJbmRleCAhPSAxIHx8CisJICAgIGJ1ZmZlckluZGV4ID4gcFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSkKKyNlbmRpZgorCXsKKwkJLyogSWxsZWdhbCBidWZmZXIgb3IgcmluZyBpbmRleCBjYW5ub3QgYmUgdXNlZCBieSBTL1cqLworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSeFBrdHMgUFNSIEVudHJ5ICVkIGluZGljYXRlcyAiCisJCQkgICJsZW5ndGggb2YgJWQgYW5kL29yIGJhZCBiaSglZClcbiIsCisJCQkgIHBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsLAorCQkJICBsb2NhbExlbiwgYnVmZmVySW5kZXgpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgYW5kIGZpbGwgdGhlIFJGRC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBSZmQgPSBOVUxMOworCWVsZW1lbnQgPSBwUnhMb2NhbC0+UmVjdkxpc3QubmV4dDsKKwlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CisKKwlpZiAocE1wUmZkID09IE5VTEwpIHsKKwkJREJHX1JYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIk5VTEwgUkZEIHJldHVybmVkIGZyb20gUmVjdkxpc3QgdmlhIGxpc3RfZW50cnkoKVxuIik7CisJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCXBSeExvY2FsLT5uUmVhZHlSZWN2LS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFJmZC0+aUJ1ZmZlckluZGV4ID0gYnVmZmVySW5kZXg7CisJcE1wUmZkLT5pUmluZ0luZGV4ID0gcmluZ0luZGV4OworCisJLyogSW4gVjEgc2lsaWNvbiwgdGhlcmUgaXMgYSBidWcgd2hpY2ggc2NyZXdzIHVwIGZpbHRlcmluZyBvZgorCSAqIHJ1bnQgcGFja2V0cy4gIFRoZXJlZm9yZSBydW50IHBhY2tldCBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQKKwkgKiBpbiB0aGUgTUFDIGFuZCB0aGUgcGFja2V0cyBhcmUgZHJvcHBlZCBoZXJlLiAgVGhleSBhcmUKKwkgKiBhbHNvIGNvdW50ZWQgaGVyZS4KKwkgKi8KKwlpZiAobG9jYWxMZW4gPCAoTklDX01JTl9QQUNLRVRfU0laRSArIDQpKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5vdGhlcl9lcnJvcnMrKzsKKwkJbG9jYWxMZW4gPSAwOworCX0KKworCWlmIChsb2NhbExlbikgeworCQlpZiAocEFkYXB0ZXItPlJlcGxpY2FQaHlMb29wYmsgPT0gMSkgeworCQkJcEJ1ZlZhID0gcFJ4TG9jYWwtPkZicltyaW5nSW5kZXhdLT5WYVtidWZmZXJJbmRleF07CisKKwkJCWlmIChtZW1jbXAoJnBCdWZWYVs2XSwgJnBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXSwKKwkJCQkgICBFVEhfQUxFTikgPT0gMCkgeworCQkJCWlmIChtZW1jbXAoJnBCdWZWYVs0Ml0sICJSZXBsaWNhIHBhY2tldCIsCisJCQkJCSAgIEVUSF9ITEVOKSkgeworCQkJCQlwQWRhcHRlci0+UmVwbGljYVBoeUxvb3Bia1BGID0gMTsKKwkJCQl9CisJCQl9CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgInBCdWZWYTpcdCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCSAgICBwQnVmVmFbNl0sIHBCdWZWYVs3XSwgcEJ1ZlZhWzhdLAorCQkJCSAgICBwQnVmVmFbOV0sIHBCdWZWYVsxMF0sIHBCdWZWYVsxMV0pOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkN1cnJlbnRBZGRyOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl0sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV0pOworCQl9CisKKwkJLyogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBtdWx0aWNhc3QgcGFja2V0IGNvbWluZyBpbiAqLworCQlpZiAoKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9NVUxUSUNBU1RfUEtUKSAmJgorCQkgICAgIShXb3JkMC52YWx1ZSAmIEFMQ0FURUxfQlJPQURDQVNUX1BLVCkpIHsKKwkJCS8qIFByb21pc2N1b3VzIG1vZGUgYW5kIE11bHRpY2FzdCBtb2RlIGFyZQorCQkJICogbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSBhcyB3YXMgZmlyc3QKKwkJCSAqIHRob3VnaHQuICBJIGd1ZXNzIFByb21pc2N1b3VzIGlzIGp1c3QKKwkJCSAqIGNvbnNpZGVyZWQgYSBzdXBlci1zZXQgb2YgdGhlIG90aGVyCisJCQkgKiBmaWx0ZXJzLiBHZW5lcmFsbHkgZmlsdGVyIGlzIDB4MmIgd2hlbiBpbgorCQkJICogcHJvbWlzY3VvdXMgbW9kZS4KKwkJCSAqLworCQkJaWYgKChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCkKKwkJCSAgICAmJiAhKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMpCisJCQkgICAgJiYgIShwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpKSB7CisJCQkJcEJ1ZlZhID0gcFJ4TG9jYWwtPkZicltyaW5nSW5kZXhdLT4KKwkJCQkJCVZhW2J1ZmZlckluZGV4XTsKKworCQkJCS8qIExvb3AgdGhyb3VnaCBvdXIgbGlzdCB0byBzZWUgaWYgdGhlCisJCQkJICogZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGlzIHBhY2tldAorCQkJCSAqIG1hdGNoZXMgb25lIGluIG91ciBsaXN0LgorCQkJCSAqLworCQkJCWZvciAobkluZGV4ID0gMDsKKwkJCQkgICAgIG5JbmRleCA8IHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudDsKKwkJCQkgICAgIG5JbmRleCsrKSB7CisJCQkJCWlmIChwQnVmVmFbMF0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVswXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzFdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMV0KKwkJCQkJICAgICYmIHBCdWZWYVsyXSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzJdCisJCQkJCSAgICAmJiBwQnVmVmFbM10gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVszXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzRdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNF0KKwkJCQkJICAgICYmIHBCdWZWYVs1XSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzVdKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIElmIG91ciBpbmRleCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyCisJCQkJICogb2YgTXVsdGljYXN0IGFkZHJlc3Mgd2UgaGF2ZSwgdGhlbgorCQkJCSAqIHRoaXMgbWVhbnMgd2UgZGlkIG5vdCBmaW5kIHRoaXMKKwkJCQkgKiBwYWNrZXQncyBtYXRjaGluZyBhZGRyZXNzIGluIG91cgorCQkJCSAqIGxpc3QuICBTZXQgdGhlIFBhY2tldFNpemUgdG8gemVybywKKwkJCQkgKiBzbyB3ZSBmcmVlIG91ciBSRkQgd2hlbiB3ZSByZXR1cm4KKwkJCQkgKiBmcm9tIHRoaXMgZnVuY3Rpb24uCisJCQkJICovCisJCQkJaWYgKG5JbmRleCA9PSBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQpIHsKKwkJCQkJbG9jYWxMZW4gPSAwOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGxvY2FsTGVuID4gMCkgeworCQkJCXBBZGFwdGVyLT5TdGF0cy5tdWx0aXJjdisrOworCQkJfQorCQl9IGVsc2UgaWYgKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKSB7CisJCQlwQWRhcHRlci0+U3RhdHMuYnJkY3N0cmN2Kys7CisJCX0gZWxzZSB7CisJCQkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgY291bnRlciBtZWFzdXJlcyBpbgorCQkJICogcHJvbWlzY3VvdXMgbW9kZS4gUGVyaGFwcyB3ZSBzaG91bGQgY2hlY2sKKwkJCSAqIHRoZSBNQUMgYWRkcmVzcyB0byBzZWUgaWYgaXQgaXMgZGlyZWN0ZWQKKwkJCSAqIHRvIHVzIGluIHByb21pc2N1b3VzIG1vZGUuCisJCQkgKi8KKwkJCXBBZGFwdGVyLT5TdGF0cy51bmlyY3YrKzsKKwkJfQorCX0KKworCWlmIChsb2NhbExlbiA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisKKwkJLy9wTXBSZmQtPlBhY2tldFNpemUgPSBsb2NhbExlbiAtIDQ7CisJCXBNcFJmZC0+UGFja2V0U2l6ZSA9IGxvY2FsTGVuOworCisJCXNrYiA9IGRldl9hbGxvY19za2IocE1wUmZkLT5QYWNrZXRTaXplICsgMik7CisJCWlmICghc2tiKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGRuJ3QgYWxsb2MgYW4gU0tCIGZvciBSeFxuIik7CisJCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlwQWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHBNcFJmZC0+UGFja2V0U2l6ZTsKKworCQltZW1jcHkoc2tiX3B1dChza2IsIHBNcFJmZC0+UGFja2V0U2l6ZSksCisJCSAgICAgICBwUnhMb2NhbC0+RmJyW3JpbmdJbmRleF0tPlZhW2J1ZmZlckluZGV4XSwKKwkJICAgICAgIHBNcFJmZC0+UGFja2V0U2l6ZSk7CisKKwkJc2tiLT5kZXYgPSBwQWRhcHRlci0+bmV0ZGV2OworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwQWRhcHRlci0+bmV0ZGV2KTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJCW5ldGlmX3J4KHNrYik7CisJfSBlbHNlIHsKKwkJcE1wUmZkLT5QYWNrZXRTaXplID0gMDsKKwl9CisKKwluaWNfcmV0dXJuX3JmZChwQWRhcHRlciwgcE1wUmZkKTsKKworCURCR19SWChldDEzMXhfZGJnaW5mbywgIigxKVxuIik7CisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcE1wUmZkOworfQorCisvKioKKyAqIGV0MTMxeF9yZXNldF9yZWN2IC0gUmVzZXQgdGhlIHJlY2VpdmUgbGlzdAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogQXNzdW1wdGlvbiwgUmN2IHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICovCit2b2lkIGV0MTMxeF9yZXNldF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUE1QX1JGRCBwTXBSZmQ7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlEQkdfQVNTRVJUKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KSk7CisKKwkvKiBUYWtlIGFsbCB0aGUgUkZEJ3MgZnJvbSB0aGUgcGVuZGluZyBsaXN0LCBhbmQgc3RpY2sgdGhlbSBvbiB0aGUKKwkgKiBSZWN2TGlzdC4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5SeFJpbmcuUmVjdlBlbmRpbmdMaXN0KSkgeworCQllbGVtZW50ID0gcEFkYXB0ZXItPlJ4UmluZy5SZWN2UGVuZGluZ0xpc3QubmV4dDsKKworCQlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CisKKwkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwkJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgcmVjZWl2ZSBwcm9jZXNzaW5nCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBBc3N1bXB0aW9uLCBSY3Ygc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCisgKi8KK3ZvaWQgZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNUF9SRkQgcE1wUmZkID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0QXJyYXlbTlVNX1BBQ0tFVFNfSEFORExFRF07CisJUE1QX1JGRCBSRkRGcmVlQXJyYXlbTlVNX1BBQ0tFVFNfSEFORExFRF07CisJdWludDMyX3QgUGFja2V0QXJyYXlDb3VudCA9IDA7CisJdWludDMyX3QgUGFja2V0c1RvSGFuZGxlOworCXVpbnQzMl90IFBhY2tldEZyZWVDb3VudCA9IDA7CisJYm9vbCBUZW1wVW5maW5pc2hlZFJlYyA9IGZhbHNlOworCisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCVBhY2tldHNUb0hhbmRsZSA9IE5VTV9QQUNLRVRTX0hBTkRMRUQ7CisKKwkvKiBQcm9jZXNzIHVwIHRvIGF2YWlsYWJsZSBSRkQncyAqLworCXdoaWxlIChQYWNrZXRBcnJheUNvdW50IDwgUGFja2V0c1RvSGFuZGxlKSB7CisJCWlmIChsaXN0X2VtcHR5KCZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KSkgeworCQkJREJHX0FTU0VSVChwQWRhcHRlci0+UnhSaW5nLm5SZWFkeVJlY3YgPT0gMCk7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJOTyBSRkQncyAhISEhISEhISEhISEhXG4iKTsKKwkJCVRlbXBVbmZpbmlzaGVkUmVjID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcE1wUmZkID0gbmljX3J4X3BrdHMocEFkYXB0ZXIpOworCisJCWlmIChwTXBSZmQgPT0gTlVMTCkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBEbyBub3QgcmVjZWl2ZSBhbnkgcGFja2V0cyB1bnRpbCBhIGZpbHRlciBoYXMgYmVlbiBzZXQuCisJCSAqIERvIG5vdCByZWNlaXZlIGFueSBwYWNrZXRzIHVudGlsIHdlIGFyZSBhdCBEMC4KKwkJICogRG8gbm90IHJlY2VpdmUgYW55IHBhY2tldHMgdW50aWwgd2UgaGF2ZSBsaW5rLgorCQkgKiBJZiBsZW5ndGggaXMgemVybywgcmV0dXJuIHRoZSBSRkQgaW4gb3JkZXIgdG8gYWR2YW5jZSB0aGUKKwkJICogRnJlZSBidWZmZXIgcmluZy4KKwkJICovCisJCWlmICgoIXBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIpIHx8CisJCSAgICAocEFkYXB0ZXItPlBvTWdtdC5Qb3dlclN0YXRlICE9IE5kaXNEZXZpY2VTdGF0ZUQwKSB8fAorCQkgICAgKCFNUF9MSU5LX0RFVEVDVEVEKHBBZGFwdGVyKSkgfHwKKwkJICAgIChwTXBSZmQtPlBhY2tldFNpemUgPT0gMCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyB3ZSByZWNlaXZlZCAqLworCQlwQWRhcHRlci0+U3RhdHMuaXBhY2tldHMrKzsKKworCQkvKiBTZXQgdGhlIHN0YXR1cyBvbiB0aGUgcGFja2V0LCBlaXRoZXIgcmVzb3VyY2VzIG9yIHN1Y2Nlc3MgKi8KKwkJaWYgKHBBZGFwdGVyLT5SeFJpbmcublJlYWR5UmVjdiA+PSBSRkRfTE9XX1dBVEVSX01BUkspIHsKKwkJCS8qIFB1dCB0aGlzIFJGRCBvbiB0aGUgcGVuZGluZyBsaXN0CisJCQkgKgorCQkJICogTk9URTogbmljX3J4X3BrdHMoKSBhYm92ZSBpcyBhbHJlYWR5IHJldHVybmluZyB0aGUKKwkJCSAqIFJGRCB0byB0aGUgUmVjdkxpc3QsIHNvIGRvbid0IGFkZGl0aW9uYWxseSBkbyB0aGF0CisJCQkgKiBoZXJlLgorCQkJICogQmVzaWRlcywgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgKGF0IHRoaXMgcG9pbnQpIHRoZQorCQkJICogcGVuZGluZyBsaXN0IGFueXdheS4KKwkJCSAqLworCQkJLy9zcGluX2xvY2tfaXJxc2F2ZSggJnBBZGFwdGVyLT5SY3ZQZW5kTG9jaywgbG9ja2ZsYWdzICk7CisJCQkvL2xpc3RfYWRkX3RhaWwoICZwTXBSZmQtPmxpc3Rfbm9kZSwgJnBBZGFwdGVyLT5SeFJpbmcuUmVjdlBlbmRpbmdMaXN0ICk7CisJCQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwQWRhcHRlci0+UmN2UGVuZExvY2ssIGxvY2tmbGFncyApOworCisJCQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyBSZWN2cyAqLworCQkJLy9NUF9JTkNfUkNWX1JFRiggcEFkYXB0ZXIgKTsKKwkJfSBlbHNlIHsKKwkJCVJGREZyZWVBcnJheVtQYWNrZXRGcmVlQ291bnRdID0gcE1wUmZkOworCQkJUGFja2V0RnJlZUNvdW50Kys7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUkZEJ3MgYXJlIHJ1bm5pbmcgb3V0ICEhISEhISEhISEhISFcbiIpOworCQl9CisKKwkJUGFja2V0QXJyYXlbUGFja2V0QXJyYXlDb3VudF0gPSBwTXBSZmQtPlBhY2tldDsKKwkJUGFja2V0QXJyYXlDb3VudCsrOworCX0KKworCWlmICgoUGFja2V0QXJyYXlDb3VudCA9PSBOVU1fUEFDS0VUU19IQU5ETEVEKSB8fCBUZW1wVW5maW5pc2hlZFJlYykgeworCQlwQWRhcHRlci0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IHRydWU7CisJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCAqIE5BTk9fSU5fQV9NSUNSTywKKwkJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwl9IGVsc2UgeworCQkvKiBXYXRjaGRvZyB0aW1lciB3aWxsIGRpc2FibGUgaXRzZWxmIGlmIGFwcHJvcHJpYXRlLiAqLworCQlwQWRhcHRlci0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IGZhbHNlOworCX0KKworCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogTklDUmV0dXJuUkZEIC0gUmVjeWNsZSBhIFJGRCBhbmQgcHV0IGl0IGJhY2sgb250byB0aGUgcmVjZWl2ZSBsaXN0CisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqIEBwTXBSZmQ6IHBvaW50ZXIgdG8gdGhlIFJGRAorICovCit2b2lkIG5pY19yZXR1cm5fcmZkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9SRkQgcE1wUmZkKQoreworCXN0cnVjdCBfcnhfcmluZ190ICpwUnhMb2NhbCA9ICZwQWRhcHRlci0+UnhSaW5nOworCXN0cnVjdCBfUlhETUFfdCBfX2lvbWVtICpwUnhEbWEgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hOworCXVpbnQxNl90IGJpID0gcE1wUmZkLT5pQnVmZmVySW5kZXg7CisJdWludDhfdCByaSA9IHBNcFJmZC0+aVJpbmdJbmRleDsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19SWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBXZSBkb24ndCB1c2UgYW55IG9mIHRoZSBPT0IgZGF0YSBiZXNpZGVzIHN0YXR1cy4gT3RoZXJ3aXNlLCB3ZQorCSAqIG5lZWQgdG8gY2xlYW4gdXAgT09CIGRhdGEKKwkgKi8KKwlpZiAoCisjaWZkZWYgVVNFX0ZCUjAKKwkgICAgKHJpID09IDAgJiYgYmkgPCBwUnhMb2NhbC0+RmJyME51bUVudHJpZXMpIHx8CisjZW5kaWYKKwkgICAgKHJpID09IDEgJiYgYmkgPCBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+RmJyTG9jaywgbG9ja2ZsYWdzKTsKKworCQlpZiAocmkgPT0gMSkgeworCQkJUEZCUl9ERVNDX3QgcE5leHREZXNjID0KKwkJCSAgICAoUEZCUl9ERVNDX3QpIChwUnhMb2NhbC0+cEZicjFSaW5nVmEpICsKKwkJCSAgICBwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsOworCisJCQkvKiBIYW5kbGUgdGhlIEZyZWUgQnVmZmVyIFJpbmcgYWR2YW5jZW1lbnQgaGVyZS4gV3JpdGUKKwkJCSAqIHRoZSBQQSAvIEJ1ZmZlciBJbmRleCBmb3IgdGhlIHJldHVybmVkIGJ1ZmZlciBpbnRvCisJCQkgKiB0aGUgb2xkZXN0IChuZXh0IHRvIGJlIGZyZWVkKUZCUiBlbnRyeQorCQkJICovCisJCQlwTmV4dERlc2MtPmFkZHJfaGkgPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUhpZ2hbYmldOworCQkJcE5leHREZXNjLT5hZGRyX2xvID0gcFJ4TG9jYWwtPkZiclsxXS0+UEFMb3dbYmldOworCQkJcE5leHREZXNjLT53b3JkMi52YWx1ZSA9IGJpOworCisJCQlpZiAoKytwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsID4KKwkJCSAgICAocFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSkpIHsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsID0gMDsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMud3JhcCBePSAxOworCQkJfQorCisJCQl3cml0ZWwocFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC52YWx1ZSwKKwkJCSAgICAgICAmcFJ4RG1hLT5mYnIxX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwkJfQorI2lmZGVmIFVTRV9GQlIwCisJCWVsc2UgeworCQkJUEZCUl9ERVNDX3QgcE5leHREZXNjID0KKwkJCSAgICAoUEZCUl9ERVNDX3QpIHBSeExvY2FsLT5wRmJyMFJpbmdWYSArCisJCQkgICAgcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLnZhbDsKKworCQkJLyogSGFuZGxlIHRoZSBGcmVlIEJ1ZmZlciBSaW5nIGFkdmFuY2VtZW50IGhlcmUuIFdyaXRlCisJCQkgKiB0aGUgUEEgLyBCdWZmZXIgSW5kZXggZm9yIHRoZSByZXR1cm5lZCBidWZmZXIgaW50bworCQkJICogdGhlIG9sZGVzdCAobmV4dCB0byBiZSBmcmVlZCkgRkJSIGVudHJ5CisJCQkgKi8KKwkJCXBOZXh0RGVzYy0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMF0tPlBBSGlnaFtiaV07CisJCQlwTmV4dERlc2MtPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUxvd1tiaV07CisJCQlwTmV4dERlc2MtPndvcmQyLnZhbHVlID0gYmk7CisKKwkJCWlmICgrK3BSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWwgPgorCQkJICAgIChwUnhMb2NhbC0+RmJyME51bUVudHJpZXMgLSAxKSkgeworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWwgPSAwOworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy53cmFwIF49IDE7CisJCQl9CisKKwkJCXdyaXRlbChwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLnZhbHVlLAorCQkJICAgICAgICZwUnhEbWEtPmZicjBfZnVsbF9vZmZzZXQudmFsdWUpOworCQl9CisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkZickxvY2ssIGxvY2tmbGFncyk7CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUmV0dXJuUkZEIGlsbGVnYWwgQnVmZmVyIEluZGV4IHJldHVybmVkXG4iKTsKKwl9CisKKwkvKiBUaGUgcHJvY2Vzc2luZyBvbiB0aGlzIFJGRCBpcyBkb25lLCBzbyBwdXQgaXQgYmFjayBvbiB0aGUgdGFpbCBvZgorCSAqIG91ciBsaXN0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcFJ4TG9jYWwtPlJlY3ZMaXN0KTsKKwlwUnhMb2NhbC0+blJlYWR5UmVjdisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0FTU0VSVChwUnhMb2NhbC0+blJlYWR5UmVjdiA8PSBwUnhMb2NhbC0+TnVtUmZkKTsKKwlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2NmRiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3J4LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIGRhdGEKKyAqICAgICAgICAgICAgICAgcmVjZXB0aW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX1JYX0hfXworI2RlZmluZSBfX0VUMTMxMF9SWF9IX18KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjZGVmaW5lIFVTRV9GQlIwIHRydWUKKworI2lmZGVmIFVTRV9GQlIwCisvLyNkZWZpbmUgRkJSMF9CVUZGRVJfU0laRSAyNTYKKyNlbmRpZgorCisvLyNkZWZpbmUgRkJSMV9CVUZGRVJfU0laRSAyMDQ4CisKKyNkZWZpbmUgRkJSX0NIVU5LUyAzMgorCisjZGVmaW5lIE1BWF9ERVNDX1BFUl9SSU5HX1JYICAgICAgICAgMTAyNAorCisvKiBudW1iZXIgb2YgUkZEcyAtIGRlZmF1bHQgYW5kIG1pbiAqLworI2lmZGVmIFVTRV9GQlIwCisjZGVmaW5lIFJGRF9MT1dfV0FURVJfTUFSSwk0MAorI2RlZmluZSBOSUNfTUlOX05VTV9SRkQJCTY0CisjZGVmaW5lIE5JQ19ERUZBVUxUX05VTV9SRkQJMTAyNAorI2Vsc2UKKyNkZWZpbmUgUkZEX0xPV19XQVRFUl9NQVJLCTIwCisjZGVmaW5lIE5JQ19NSU5fTlVNX1JGRAkJNjQKKyNkZWZpbmUgTklDX0RFRkFVTFRfTlVNX1JGRAkyNTYKKyNlbmRpZgorCisjZGVmaW5lIE5VTV9QQUNLRVRTX0hBTkRMRUQJMjU2CisKKyNkZWZpbmUgQUxDQVRFTF9CQURfU1RBVFVTCTB4ZTQ3ZjAwMDAKKyNkZWZpbmUgQUxDQVRFTF9NVUxUSUNBU1RfUEtUCTB4MDEwMDAwMDAKKyNkZWZpbmUgQUxDQVRFTF9CUk9BRENBU1RfUEtUCTB4MDIwMDAwMDAKKworLyogdHlwZWRlZnMgZm9yIEZyZWUgQnVmZmVyIERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9uIF9GQlJfV09SRDJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAwLTkoQnVmZmVyIEluZGV4KQorI2Vsc2UKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAwLTkoQnVmZmVyIEluZGV4KQorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdCAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBGQlJfV09SRDJfdCwgKlBGQlJfV09SRDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0ZCUl9ERVNDX3QgeworCXUzMiBhZGRyX2xvOworCXUzMiBhZGRyX2hpOworCUZCUl9XT1JEMl90IHdvcmQyOworfSBGQlJfREVTQ190LCAqUEZCUl9ERVNDX3Q7CisKKy8qIFR5cGVkZWZzIGZvciBQYWNrZXQgU3RhdHVzIFJpbmcgRGVzY3JpcHRvcnMgKi8KK3R5cGVkZWYgdW5pb24gX1BLVF9TVEFUX0RFU0NfV09SRDBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQkvLyB0b3AgMTYgYml0cyBhcmUgZnJvbSB0aGUgQWxjYXRlbCBTdGF0dXMgV29yZCBhcyBlbnVtZXJhdGVkIGluCisJCS8vIFBFLU1DWE1BQyBEYXRhIFNoZWV0IElQRCBEUzU0IDAyMTAtMSAoYWxzbyBJUEQtRFM4MCAwMjA1LTIpCisjaWYgMAorCQl1MzIgYXN3X3RydW5jOjE7CQkvLyBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKQorI2VuZGlmCisJCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLy8gYml0IDMxKFJ4IGxvbmcgZXZlbnQpCisJCXUzMiBhc3dfVkxBTl90YWc6MTsJLy8gYml0IDMwKFZMQU4gdGFnIGRldGVjdGVkKQorCQl1MzIgYXN3X3Vuc3VwcG9ydGVkX29wOjE7CS8vIGJpdCAyOSh1bnN1cHBvcnRlZCBPUCBjb2RlKQorCQl1MzIgYXN3X3BhdXNlX2ZyYW1lOjE7CS8vIGJpdCAyOChpcyBhIHBhdXNlIGZyYW1lKQorCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLy8gYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkKKwkJdTMyIGFzd19kcmliYmxlX25pYmJsZToxOwkvLyBiaXQgMjYoc3B1cmlvdXMgYml0cyBhZnRlciBFT1ApCisJCXUzMiBhc3dfYnJvYWRjYXN0OjE7CS8vIGJpdCAyNShoYXMgYSBicm9hZGNhc3QgYWRkcmVzcykKKwkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLy8gYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X09LOjE7CQkvLyBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikKKwkJdTMyIGFzd190b29fbG9uZzoxOwkvLyBiaXQgMjIoZnJhbWUgbGVuZ3RoID4gMTUxOCBieXRlcykKKwkJdTMyIGFzd19sZW5fY2hrX2VycjoxOwkvLyBiaXQgMjEoZnJhbWUgbGVuZ3RoIGZpZWxkIGluY29ycmVjdCkKKwkJdTMyIGFzd19DUkNfZXJyOjE7CQkvLyBiaXQgMjAoQ1JDIGVycm9yKQorCQl1MzIgYXN3X2NvZGVfZXJyOjE7CS8vIGJpdCAxOShvbmUgb3IgbW9yZSBuaWJibGVzIHNpZ25hbGxlZCBhcyBlcnJvcnMpCisJCXUzMiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudDoxOwkvLyBiaXQgMTgoYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldCkKKwkJdTMyIGFzd19SWF9EVl9ldmVudDoxOwkvLyBiaXQgMTcoc2hvcnQgcmVjZWl2ZSBldmVudCBkZXRlY3RlZCkKKwkJdTMyIGFzd19wcmV2X3BrdF9kcm9wcGVkOjE7Ly8gYml0IDE2KGUuZy4gSUZHIHRvbyBzbWFsbCBvbiBwcmV2aW91cykKKwkJdTMyIHVudXNlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgdnA6MTsJCQkvLyBiaXQgMTAoVkxBTiBQYWNrZXQpCisJCXUzMiBqcDoxOwkJCS8vIGJpdCA5KEp1bWJvIFBhY2tldCkKKwkJdTMyIGZ0OjE7CQkJLy8gYml0IDgoRnJhbWUgVHJ1bmNhdGVkKQorCQl1MzIgZHJvcDoxOwkJLy8gYml0IDcoRHJvcCBwYWNrZXQpCisJCXUzMiByeG1hY19lcnJvcjoxOwkJLy8gYml0IDYoUlhNQUMgRXJyb3IgSW5kaWNhdG9yKQorCQl1MzIgd29sOjE7CQkJLy8gYml0IDUoV09MIEV2ZW50KQorCQl1MzIgdGNwcDoxOwkJLy8gYml0IDQoVENQIGNoZWNrc3VtIHBhc3MpCisJCXUzMiB0Y3BhOjE7CQkvLyBiaXQgMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaXBwOjE7CQkJLy8gYml0IDIoSVAgY2hlY2tzdW0gcGFzcykKKwkJdTMyIGlwYToxOwkJCS8vIGJpdCAxKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGhwOjE7CQkJLy8gYml0IDAoaGFzaCBwYXNzKQorI2Vsc2UKKwkJdTMyIGhwOjE7CQkJLy8gYml0IDAoaGFzaCBwYXNzKQorCQl1MzIgaXBhOjE7CQkJLy8gYml0IDEoSVAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaXBwOjE7CQkJLy8gYml0IDIoSVAgY2hlY2tzdW0gcGFzcykKKwkJdTMyIHRjcGE6MTsJCS8vIGJpdCAzKFRDUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB0Y3BwOjE7CQkvLyBiaXQgNChUQ1AgY2hlY2tzdW0gcGFzcykKKwkJdTMyIHdvbDoxOwkJCS8vIGJpdCA1KFdPTCBFdmVudCkKKwkJdTMyIHJ4bWFjX2Vycm9yOjE7CQkvLyBiaXQgNihSWE1BQyBFcnJvciBJbmRpY2F0b3IpCisJCXUzMiBkcm9wOjE7CQkvLyBiaXQgNyhEcm9wIHBhY2tldCkKKwkJdTMyIGZ0OjE7CQkJLy8gYml0IDgoRnJhbWUgVHJ1bmNhdGVkKQorCQl1MzIganA6MTsJCQkvLyBiaXQgOShKdW1ibyBQYWNrZXQpCisJCXUzMiB2cDoxOwkJCS8vIGJpdCAxMChWTEFOIFBhY2tldCkKKwkJdTMyIHVudXNlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgYXN3X3ByZXZfcGt0X2Ryb3BwZWQ6MTsvLyBiaXQgMTYoZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzKQorCQl1MzIgYXN3X1JYX0RWX2V2ZW50OjE7CS8vIGJpdCAxNyhzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkKQorCQl1MzIgYXN3X2ZhbHNlX2NhcnJpZXJfZXZlbnQ6MTsJLy8gYml0IDE4KGJhZCBjYXJyaWVyIHNpbmNlIGxhc3QgZ29vZCBwYWNrZXQpCisJCXUzMiBhc3dfY29kZV9lcnI6MTsJLy8gYml0IDE5KG9uZSBvciBtb3JlIG5pYmJsZXMgc2lnbmFsbGVkIGFzIGVycm9ycykKKwkJdTMyIGFzd19DUkNfZXJyOjE7CQkvLyBiaXQgMjAoQ1JDIGVycm9yKQorCQl1MzIgYXN3X2xlbl9jaGtfZXJyOjE7CS8vIGJpdCAyMShmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0KQorCQl1MzIgYXN3X3Rvb19sb25nOjE7CS8vIGJpdCAyMihmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzKQorCQl1MzIgYXN3X09LOjE7CQkvLyBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikKKwkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLy8gYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X2Jyb2FkY2FzdDoxOwkvLyBiaXQgMjUoaGFzIGEgYnJvYWRjYXN0IGFkZHJlc3MpCisJCXUzMiBhc3dfZHJpYmJsZV9uaWJibGU6MTsJLy8gYml0IDI2KHNwdXJpb3VzIGJpdHMgYWZ0ZXIgRU9QKQorCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLy8gYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkKKwkJdTMyIGFzd19wYXVzZV9mcmFtZToxOwkvLyBiaXQgMjgoaXMgYSBwYXVzZSBmcmFtZSkKKwkJdTMyIGFzd191bnN1cHBvcnRlZF9vcDoxOwkvLyBiaXQgMjkodW5zdXBwb3J0ZWQgT1AgY29kZSkKKwkJdTMyIGFzd19WTEFOX3RhZzoxOwkvLyBiaXQgMzAoVkxBTiB0YWcgZGV0ZWN0ZWQpCisJCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLy8gYml0IDMxKFJ4IGxvbmcgZXZlbnQpCisjaWYgMAorCQl1MzIgYXN3X3RydW5jOjE7CQkvLyBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKQorI2VuZGlmCisjZW5kaWYKKwl9IGJpdHM7Cit9IFBLVF9TVEFUX0RFU0NfV09SRDBfdCwgKlBQS1RfU1RBVF9XT1JEMF90OworCit0eXBlZGVmIHVuaW9uIF9QS1RfU1RBVF9ERVNDX1dPUkQxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDo0OwkvLyBiaXRzIDI4LTMxCisJCXUzMiByaToyOwkJLy8gYml0cyAyNi0yNyhSaW5nIEluZGV4KQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDE2LTI1KEJ1ZmZlciBJbmRleCkKKwkJdTMyIGxlbmd0aDoxNjsJLy8gYml0IDAtMTUobGVuZ3RoIGluIGJ5dGVzKQorI2Vsc2UKKwkJdTMyIGxlbmd0aDoxNjsJLy8gYml0IDAtMTUobGVuZ3RoIGluIGJ5dGVzKQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDE2LTI1KEJ1ZmZlciBJbmRleCkKKwkJdTMyIHJpOjI7CQkvLyBiaXRzIDI2LTI3KFJpbmcgSW5kZXgpCisJCXUzMiB1bnVzZWQ6NDsJLy8gYml0cyAyOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBQS1RfU1RBVF9ERVNDX1dPUkQxX3QsICpQUEtUX1NUQVRfV09SRDFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1BLVF9TVEFUX0RFU0NfdCB7CisJUEtUX1NUQVRfREVTQ19XT1JEMF90IHdvcmQwOworCVBLVF9TVEFUX0RFU0NfV09SRDFfdCB3b3JkMTsKK30gUEtUX1NUQVRfREVTQ190LCAqUFBLVF9TVEFUX0RFU0NfdDsKKworLyogVHlwZWRlZnMgZm9yIHRoZSBSWCBETUEgc3RhdHVzIHdvcmQgKi8KKworLyoKKyAqIFJYU1RBVF9XT1JEMF90IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBzdGF0dXMgYml0cyBvZiB0aGUgUnggRE1BIGVuZ2luZQorICogdGhhdCBnZXQgY29waWVkIG91dCB0byBtZW1vcnkgYnkgdGhlIEVULTEzMTAuICBXb3JkIDAgaXMgYSAzMiBiaXQgd29yZAorICogd2hpY2hjb250YWlucyBGcmVlIEJ1ZmZlciByaW5nIDAgYW5kIDEgYXZhaWxhYmxlIG9mZnNldC4KKyAqLwordHlwZWRlZiB1bmlvbiBfcnhzdGF0X3dvcmQwX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIEZCUjF1bnVzZWQ6NTsJLy8gYml0cyAyNy0zMQorCQl1MzIgRkJSMXdyYXA6MTsJLy8gYml0IDI2CisJCXUzMiBGQlIxb2Zmc2V0OjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiBGQlIwdW51c2VkOjU7CS8vIGJpdHMgMTEtMTUKKwkJdTMyIEZCUjB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgRkJSMG9mZnNldDoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBGQlIwb2Zmc2V0OjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgRkJSMHdyYXA6MTsJLy8gYml0IDEwCisJCXUzMiBGQlIwdW51c2VkOjU7CS8vIGJpdHMgMTEtMTUKKwkJdTMyIEZCUjFvZmZzZXQ6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIEZCUjF3cmFwOjE7CS8vIGJpdCAyNgorCQl1MzIgRkJSMXVudXNlZDo1OwkvLyBiaXRzIDI3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYU1RBVF9XT1JEMF90LCAqUFJYU1RBVF9XT1JEMF90OworCisvKgorICogUlhTVEFUX1dPUkQxX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIHN0YXR1cyBiaXRzIG9mIHRoZSBSeCBETUEgZW5naW5lCisgKiB0aGF0IGdldCBjb3BpZWQgb3V0IHRvIG1lbW9yeSBieSB0aGUgRVQtMTMxMC4gIFdvcmQgMyBpcyBhIDMyIGJpdCB3b3JkCisgKiB3aGljaCBjb250YWlucyB0aGUgUGFja2V0IFN0YXR1cyBSaW5nIGF2YWlsYWJsZSBvZmZzZXQuCisgKi8KK3R5cGVkZWYgdW5pb24gX3J4c3RhdF93b3JkMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBQU1J1bnVzZWQ6MzsJLy8gYml0cyAyOS0zMQorCQl1MzIgUFNSd3JhcDoxOwkvLyBiaXQgMjgKKwkJdTMyIFBTUm9mZnNldDoxMjsJLy8gYml0cyAxNi0yNworCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIFBTUm9mZnNldDoxMjsJLy8gYml0cyAxNi0yNworCQl1MzIgUFNSd3JhcDoxOwkvLyBiaXQgMjgKKwkJdTMyIFBTUnVudXNlZDozOwkvLyBiaXRzIDI5LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYU1RBVF9XT1JEMV90LCAqUFJYU1RBVF9XT1JEMV90OworCisvKgorICogUlhfU1RBVFVTX0JMT0NLX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhlIFJ4IERNQSBlbmdpbmUKKyAqIGl0IHNpdHMgaW4gZnJlZSBtZW1vcnksIGFuZCBpcyBwb2ludGVkIHRvIGJ5IDB4MTAxYyAvIDB4MTAyMAorICovCit0eXBlZGVmIHN0cnVjdCBfcnhfc3RhdHVzX2Jsb2NrX3QgeworCVJYU1RBVF9XT1JEMF90IFdvcmQwOworCVJYU1RBVF9XT1JEMV90IFdvcmQxOworfSBSWF9TVEFUVVNfQkxPQ0tfdCwgKlBSWF9TVEFUVVNfQkxPQ0tfdDsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgbG9vay11cCB0YWJsZSBob2xkaW5nIGZyZWUgYnVmZmVyIHJpbmcgcG9pbnRlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0Zickxvb2t1cFRhYmxlIHsKKwl2b2lkICpWYVtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqQnVmZmVyMVtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqQnVmZmVyMltNQVhfREVTQ19QRVJfUklOR19SWF07CisJdTMyIFBBSGlnaFtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdTMyIFBBTG93W01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKK30gRkJSTE9PS1VQVEFCTEUsICpQRkJSTE9PS1VQVEFCTEU7CisKK3R5cGVkZWYgZW51bSB7CisJT05FX1BBQ0tFVF9JTlRFUlJVUFQsCisJRk9VUl9QQUNLRVRfSU5URVJSVVBUCit9IGVSWF9JTlRFUlJVUFRfU1RBVEVfdCwgKlBlUlhfSU5URVJSVVBUX1NUQVRFX3Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgc2tiJ3MgaW4gYSBsaXN0CisgKi8KK3R5cGVkZWYgc3RydWN0IHJ4X3NrYl9saXN0X2VsZW0geworCXN0cnVjdCBsaXN0X2hlYWQgc2tiX2xpc3RfZWxlbTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7Cit9IFJYX1NLQl9MSVNUX0VMRU0sICpQUlhfU0tCX0xJU1RfRUxFTTsKKworLyoKKyAqIFJYX1JJTkdfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGFkYXB0b3IncyBsb2NhbCByZWZlcmVuY2UocykgdG8gdGhlCisgKiByaW5ncworICovCit0eXBlZGVmIHN0cnVjdCBfcnhfcmluZ190IHsKKyNpZmRlZiBVU0VfRkJSMAorCXZvaWQgKnBGYnIwUmluZ1ZhOworCWRtYV9hZGRyX3QgcEZicjBSaW5nUGE7CisJdm9pZCAqRmJyME1lbVZhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJZG1hX2FkZHJfdCBGYnIwTWVtUGFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKKwl1aW50NjRfdCBGYnIwUmVhbHBhOworCXVpbnQ2NF90IEZicjBvZmZzZXQ7CisJRE1BMTBXX3QgbG9jYWxfRmJyMF9mdWxsOworCXUzMiBGYnIwTnVtRW50cmllczsKKwl1MzIgRmJyMEJ1ZmZlclNpemU7CisjZW5kaWYKKwl2b2lkICpwRmJyMVJpbmdWYTsKKwlkbWFfYWRkcl90IHBGYnIxUmluZ1BhOworCXZvaWQgKkZicjFNZW1WYVtNQVhfREVTQ19QRVJfUklOR19SWCAvIEZCUl9DSFVOS1NdOworCWRtYV9hZGRyX3QgRmJyMU1lbVBhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJdWludDY0X3QgRmJyMVJlYWxwYTsKKwl1aW50NjRfdCBGYnIxb2Zmc2V0OworCUZCUkxPT0tVUFRBQkxFICpGYnJbMl07CisJRE1BMTBXX3QgbG9jYWxfRmJyMV9mdWxsOworCXUzMiBGYnIxTnVtRW50cmllczsKKwl1MzIgRmJyMUJ1ZmZlclNpemU7CisKKwl2b2lkICpwUFNSaW5nVmE7CisJZG1hX2FkZHJfdCBwUFNSaW5nUGE7CisJdWludDY0X3QgcFBTUmluZ1JlYWxQYTsKKwl1aW50NjRfdCBwUFNSaW5nT2Zmc2V0OworCVJYRE1BX1BTUl9GVUxMX09GRlNFVF90IGxvY2FsX3Bzcl9mdWxsOworCXUzMiBQc3JOdW1FbnRyaWVzOworCisJdm9pZCAqcFJ4U3RhdHVzVmE7CisJZG1hX2FkZHJfdCBwUnhTdGF0dXNQYTsKKwl1aW50NjRfdCBSeFN0YXR1c1JlYWxQQTsKKwl1aW50NjRfdCBSeFN0YXR1c09mZnNldDsKKworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdkJ1ZmZlclBvb2w7CisKKwkvKiBSRUNWICovCisJc3RydWN0IGxpc3RfaGVhZCBSZWN2TGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZQZW5kaW5nTGlzdDsKKwl1MzIgblJlYWR5UmVjdjsKKworCXUzMiBOdW1SZmQ7CisKKwlib29sIFVuZmluaXNoZWRSZWNlaXZlczsKKworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdlBhY2tldFBvb2w7CisKKwkvKiBsb29rYXNpZGUgbGlzdHMgKi8KKwlzdHJ1Y3Qga21lbV9jYWNoZSAqUmVjdkxvb2thc2lkZTsKK30gUlhfUklOR190LCAqUFJYX1JJTkdfdDsKKworLyogRm9yd2FyZCByZWZlcmVuY2Ugb2YgUkZEICovCitzdHJ1Y3QgX01QX1JGRDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCisvKiBQUk9UT1RZUEVTIGZvciBJbml0aWFsaXphdGlvbiAqLworaW50IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IF9NUF9SRkQgKnBNcFJmZCk7Cit2b2lkIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOworaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0UnhEbWFUaW1lcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBldDEzMXhfcmVzZXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzEwX1JYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1YzI2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKQEAgLTAsMCArMSwxNTI1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF90eC5jIC0gUm91dGluZXMgdXNlZCB0byBwZXJmb3JtIGRhdGEgdHJhbnNtaXNzaW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworc3RhdGljIHZvaWQgZXQxMzF4X3VwZGF0ZV90Y2JfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3N0YXRpYyB2b2lkIGV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBldDEzMXhfZnJlZV9zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCQkgICBQTVBfVENCIHBNcFRjYik7CitzdGF0aWMgaW50IGV0MTMxeF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CitzdGF0aWMgaW50IG5pY19zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYik7CisKKy8qKgorICogZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkuCisgKgorICogQWxsb2NhdGVzIG1lbW9yeSB0aGF0IHdpbGwgYmUgdmlzaWJsZSBib3RoIHRvIHRoZSBkZXZpY2UgYW5kIHRvIHRoZSBDUFUuCisgKiBUaGUgT1Mgd2lsbCBwYXNzIHVzIHBhY2tldHMsIHBvaW50ZXJzIHRvIHdoaWNoIHdlIHdpbGwgaW5zZXJ0IGluIHRoZSBUeAorICogRGVzY3JpcHRvciBxdWV1ZS4gVGhlIGRldmljZSB3aWxsIHJlYWQgdGhpcyBxdWV1ZSB0byBmaW5kIHRoZSBwYWNrZXRzIGluCisgKiBtZW1vcnkuIFRoZSBkZXZpY2Ugd2lsbCB1cGRhdGUgdGhlICJzdGF0dXMiIGluIG1lbW9yeSBlYWNoIHRpbWUgaXQgeG1pdHMgYQorICogcGFja2V0LgorICovCitpbnQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBkZXNjX3NpemUgPSAwOworCVRYX1JJTkdfdCAqdHhfcmluZyA9ICZhZGFwdGVyLT5UeFJpbmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVENCJ3MgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spICovCisJYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtID0gKE1QX1RDQiAqKSBrY2FsbG9jKE5VTV9UQ0IsIHNpemVvZihNUF9UQ0IpLAorCQkJCQkJICAgICAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFRDQnNcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciByaW5nLCBhbmQgYWxsb2NhdGUKKwkgKiBzb21lIGV4dHJhIHNvIHRoYXQgdGhlIHJpbmcgY2FuIGJlIGFsaWduZWQgb24gYSA0ayBib3VuZGFyeS4KKwkgKi8KKwlkZXNjX3NpemUgPSAoc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBOVU1fREVTQ19QRVJfUklOR19UWCkgKyA0MDk2IC0gMTsKKwl0eF9yaW5nLT5wVHhEZXNjUmluZ1ZhID0KKwkgICAgKFBUWF9ERVNDX0VOVFJZX3QpIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGRlc2Nfc2l6ZSwKKwkJCQkJCSAgICAmdHhfcmluZy0+cFR4RGVzY1JpbmdQYSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUeCBSaW5nXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl0eF9yaW5nLT5wVHhEZXNjUmluZ0FkanVzdGVkUGEgPSB0eF9yaW5nLT5wVHhEZXNjUmluZ1BhOworCisJLyogQWxpZ24gVHggRGVzY3JpcHRvciBSaW5nIG9uIGEgNGsgKDB4MTAwMCkgYnl0ZSBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnR4X3JpbmctPnBUeERlc2NSaW5nQWRqdXN0ZWRQYSwKKwkJCQkgICAgICAmdHhfcmluZy0+VHhEZXNjT2Zmc2V0LCAweDBGRkYpOworCisJdHhfcmluZy0+cFR4RGVzY1JpbmdWYSArPSB0eF9yaW5nLT5UeERlc2NPZmZzZXQ7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBUeCBzdGF0dXMgYmxvY2sgKi8KKwl0eF9yaW5nLT5wVHhTdGF0dXNWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSwKKwkJCQkJCSAgICAmdHhfcmluZy0+cFR4U3RhdHVzUGEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1BhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFR4IHN0YXR1cyBibG9ja1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBkdW1teSBidWZmZXIgKi8KKwl0eF9yaW5nLT5wVHhEdW1teUJsa1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUsCisJCQkJCQkgICAgICAmdHhfcmluZy0+cFR4RHVtbXlCbGtQYSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtQYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUeCBkdW1teSBidWZmZXJcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUgLSBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHdpdGhpbiB0aGlzIG1vZHVsZQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKS4KKyAqLwordm9pZCBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZGVzY19zaXplID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEpIHsKKwkJLyogRnJlZSBtZW1vcnkgcmVsYXRpbmcgdG8gVHggcmluZ3MgaGVyZSAqLworCQlhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSAtPSBhZGFwdGVyLT5UeFJpbmcuVHhEZXNjT2Zmc2V0OworCisJCWRlc2Nfc2l6ZSA9CisJCSAgICAoc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBOVU1fREVTQ19QRVJfUklOR19UWCkgKyA0MDk2IC0gMTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIGRlc2Nfc2l6ZSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1BhKTsKKworCQlhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBtZW1vcnkgZm9yIHRoZSBUeCBzdGF0dXMgYmxvY2sgKi8KKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzUGEpOworCisJCWFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSBtZW1vcnkgZm9yIHRoZSBkdW1teSBidWZmZXIgKi8KKwlpZiAoYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrVmEpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtWYSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrUGEpOworCisJCWFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHRoZSBtZW1vcnkgZm9yIE1QX1RDQiBzdHJ1Y3R1cmVzICovCisJaWYgKGFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSkgeworCQlrZnJlZShhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0pOworCQlhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0gPSBOVUxMOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogQ29uZmlnVHhEbWFSZWdzIC0gU2V0IHVwIHRoZSB0eCBkbWEgc2VjdGlvbiBvZiB0aGUgSkFHQ29yZS4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnVHhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9UWERNQV90IF9faW9tZW0gKnBUeERtYSA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWE7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTG9hZCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZy4gKi8KKwl3cml0ZWwoKHVpbnQzMl90KSAocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ0FkanVzdGVkUGEgPj4gMzIpLAorCSAgICAgICAmcFR4RG1hLT5wcl9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nQWRqdXN0ZWRQYSwKKwkgICAgICAgJnBUeERtYS0+cHJfYmFzZV9sbyk7CisKKwkvKiBJbml0aWFsaXNlIHRoZSB0cmFuc21pdCBETUEgZW5naW5lICovCisJd3JpdGVsKE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gMSwgJnBUeERtYS0+cHJfbnVtX2Rlcy52YWx1ZSk7CisKKwkvKiBMb2FkIHRoZSBjb21wbGV0aW9uIHdyaXRlYmFjayBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwoMCwgJnBUeERtYS0+ZG1hX3diX2Jhc2VfaGkpOworCXdyaXRlbChwQWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1BhLCAmcFR4RG1hLT5kbWFfd2JfYmFzZV9sbyk7CisKKwltZW1zZXQocEFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSwgMCwgc2l6ZW9mKFRYX1NUQVRVU19CTE9DS190KSk7CisKKwl3cml0ZWwoMCwgJnBUeERtYS0+c2VydmljZV9yZXF1ZXN0LnZhbHVlKTsKKwlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAwOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdHhfZG1hX2Rpc2FibGUgLSBTdG9wIG9mIFR4X0RNQSBvbiB0aGUgRVQxMzEwCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3R4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHRoZSB0cmFtc21pdCBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCXdyaXRlbCgweDEwMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5jc3IudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdHhfZG1hX2VuYWJsZSAtIHJlLXN0YXJ0IG9mIFR4X0RNQSBvbiB0aGUgRVQxMzEwLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIE1haW5seSB1c2VkIGFmdGVyIGEgcmV0dXJuIHRvIHRoZSBEMCAoZnVsbC1wb3dlcikgc3RhdGUgZnJvbSBhIGxvd2VyIHN0YXRlLgorICovCit2b2lkIGV0MTMxeF90eF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmspIHsKKwkvKiBUeERNQSBpcyBkaXNhYmxlZCBmb3IgbG9vcGJhY2sgb3BlcmF0aW9uLiAqLworCQl3cml0ZWwoMHgxMDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuY3NyLnZhbHVlKTsKKwl9IGVsc2UgeworCQlUWERNQV9DU1JfdCBjc3IgPSB7IDAgfTsKKworCQkvKiBTZXR1cCB0aGUgdHJhbnNtaXQgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIG5vcm1hbAorCQkgKiBvcGVyYXRpb24KKwkJICovCisJCWNzci5iaXRzLnNuZ2xfZXBrdF9tb2RlID0gMTsKKwkJY3NyLmJpdHMuaGFsdCA9IDA7CisJCWNzci5iaXRzLmNhY2hlX3RocnNobGQgPSBwQWRhcHRlci0+UmVnaXN0cnlETUFDYWNoZTsKKwkJd3JpdGVsKGNzci52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5jc3IudmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2luaXRfc2VuZCAtIEluaXRpYWxpemUgc2VuZCBkYXRhIHN0cnVjdHVyZXMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJUE1QX1RDQiBwTXBUY2I7CisJdWludDMyX3QgVGNiQ291bnQ7CisJVFhfUklOR190ICp0eF9yaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwl0eF9yaW5nID0gJmFkYXB0ZXItPlR4UmluZzsKKwlwTXBUY2IgPSBhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW07CisKKwl0eF9yaW5nLT5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYjsKKworCS8qIEdvIHRocm91Z2ggYW5kIHNldCB1cCBlYWNoIFRDQiAqLworCWZvciAoVGNiQ291bnQgPSAwOyBUY2JDb3VudCA8IE5VTV9UQ0I7IFRjYkNvdW50KyspIHsKKwkJbWVtc2V0KHBNcFRjYiwgMCwgc2l6ZW9mKE1QX1RDQikpOworCisJCS8qIFNldCB0aGUgbGluayBwb2ludGVyIGluIEhXIFRDQiB0byB0aGUgbmV4dCBUQ0IgaW4gdGhlCisJCSAqIGNoYWluLiAgSWYgdGhpcyBpcyB0aGUgbGFzdCBUQ0IgaW4gdGhlIGNoYWluLCBhbHNvIHNldCB0aGUKKwkJICogdGFpbCBwb2ludGVyLgorCQkgKi8KKwkJaWYgKFRjYkNvdW50IDwgTlVNX1RDQiAtIDEpIHsKKwkJCXBNcFRjYi0+TmV4dCA9IHBNcFRjYiArIDE7CisJCX0gZWxzZSB7CisJCQl0eF9yaW5nLT5UQ0JSZWFkeVF1ZXVlVGFpbCA9IHBNcFRjYjsKKwkJCXBNcFRjYi0+TmV4dCA9IChQTVBfVENCKSBOVUxMOworCQl9CisKKwkJcE1wVGNiKys7CisJfQorCisJLyogQ3VyciBzZW5kIHF1ZXVlIHNob3VsZCBub3cgYmUgZW1wdHkgKi8KKwl0eF9yaW5nLT5DdXJyU2VuZEhlYWQgPSAoUE1QX1RDQikgTlVMTDsKKwl0eF9yaW5nLT5DdXJyU2VuZFRhaWwgPSAoUE1QX1RDQikgTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9zZW5kX3BhY2tldHMgLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgT1MgdG8gc2VuZCBwYWNrZXRzCisgKiBAc2tiOiB0aGUgcGFja2V0KHMpIHRvIHNlbmQKKyAqIEBuZXRkZXY6ZGV2aWNlIG9uIHdoaWNoIHRvIFRYIHRoZSBhYm92ZSBwYWNrZXQocykKKyAqCisgKiBSZXR1cm4gMCBpbiBhbG1vc3QgYWxsIGNhc2VzOyBub24temVybyB2YWx1ZSBpbiBleHRyZW1lIGhhcmQgZmFpbHVyZSBvbmx5CisgKi8KK2ludCBldDEzMXhfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJcEFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogU2VuZCB0aGVzZSBwYWNrZXRzCisJICoKKwkgKiBOT1RFOiBUaGUgTGludXggVHggZW50cnkgcG9pbnQgaXMgb25seSBnaXZlbiBvbmUgcGFja2V0IGF0IGEgdGltZQorCSAqIHRvIFR4LCBzbyB0aGUgUGFja2V0Q291bnQgYW5kIGl0J3MgYXJyYXkgdXNlZCBtYWtlcyBubyBzZW5zZSBoZXJlCisJICovCisKKwkvKiBRdWV1ZSBpcyBub3QgZW1wdHkgb3IgVENCIGlzIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSkgfHwKKwkgICAgTVBfVENCX1JFU09VUkNFU19OT1RfQVZBSUxBQkxFKHBBZGFwdGVyKSkgeworCQkvKiBOT1RFOiBJZiB0aGVyZSdzIGFuIGVycm9yIG9uIHNlbmQsIG5vIG5lZWQgdG8gcXVldWUgdGhlCisJCSAqIHBhY2tldCB1bmRlciBMaW51eDsgaWYgd2UganVzdCBzZW5kIGFuIGVycm9yIHVwIHRvIHRoZQorCQkgKiBuZXRpZiBsYXllciwgaXQgd2lsbCByZXNlbmQgdGhlIHNrYiB0byB1cy4KKwkJICovCisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiVENCIFJlc291cmNlcyBOb3QgQXZhaWxhYmxlXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIHRvIHNlZSBpZiB0aGUgbGluayBpcyB1cDsgaWYgaXQncyBub3QsIG1ha2UgdGhlCisJCSAqIG5ldGlmIGxheWVyIHRoaW5rIHdlJ3JlIGdvb2QgYW5kIGRyb3AgdGhlIHBhY2tldAorCQkgKi8KKwkJLy9pZiggTVBfU0hPVUxEX0ZBSUxfU0VORCggcEFkYXB0ZXIgKSB8fCBwQWRhcHRlci0+RHJpdmVyTm9QaHlBY2Nlc3MgKQorCQlpZiAoTVBfU0hPVUxEX0ZBSUxfU0VORChwQWRhcHRlcikgfHwgcEFkYXB0ZXItPkRyaXZlck5vUGh5QWNjZXNzCisJCSAgICB8fCAhbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIkNhbid0IFR4LCBMaW5rIGlzIERPV047IGRyb3AgdGhlIHBhY2tldFxuIik7CisKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlza2IgPSBOVUxMOworCisJCQlwQWRhcHRlci0+bmV0X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IGV0MTMxeF9zZW5kX3BhY2tldChza2IsIHBBZGFwdGVyKTsKKworCQkJaWYgKHN0YXR1cyA9PSAtRU5PTUVNKSB7CisKKwkJCQkvKiBOT1RFOiBJZiB0aGVyZSdzIGFuIGVycm9yIG9uIHNlbmQsIG5vIG5lZWQKKwkJCQkgKiB0byBxdWV1ZSB0aGUgcGFja2V0IHVuZGVyIExpbnV4OyBpZiB3ZSBqdXN0CisJCQkJICogc2VuZCBhbiBlcnJvciB1cCB0byB0aGUgbmV0aWYgbGF5ZXIsIGl0CisJCQkJICogd2lsbCByZXNlbmQgdGhlIHNrYiB0byB1cy4KKwkJCQkgKi8KKwkJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICJSZXNvdXJjZXMgcHJvYmxlbSwgUXVldWUgdHggcGFja2V0XG4iKTsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICE9IDApIHsKKwkJCQkvKiBPbiBhbnkgb3RoZXIgZXJyb3IsIG1ha2UgbmV0aWYgdGhpbmsgd2UncmUKKwkJCQkgKiBPSyBhbmQgZHJvcCB0aGUgcGFja2V0CisJCQkJICovCisJCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAiR2VuZXJhbCBlcnJvciwgZHJvcCBwYWNrZXRcbiIpOworCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCisJCQkJcEFkYXB0ZXItPm5ldF9zdGF0cy50eF9kcm9wcGVkKys7CisJCQl9CisJCX0KKwl9CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NlbmRfcGFja2V0IC0gRG8gdGhlIHdvcmsgdG8gc2VuZCBhIHBhY2tldAorICogQHNrYjogdGhlIHBhY2tldChzKSB0byBzZW5kCisgKiBAcEFkYXB0ZXI6IGEgcG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiAwIGluIGFsbW9zdCBhbGwgY2FzZXM7IG5vbi16ZXJvIHZhbHVlIGluIGV4dHJlbWUgaGFyZCBmYWlsdXJlIG9ubHkuCisgKgorICogQXNzdW1wdGlvbjogU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCitzdGF0aWMgaW50IGV0MTMxeF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlQTVBfVENCIHBNcFRjYiA9IE5VTEw7CisJdWludDE2X3QgKnBTaEJ1ZlZhOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIElzIG91ciBidWZmZXIgc2NhdHRlcmVkLCBvciBjb250aW51b3VzPyAqLworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiU2NhdHRlcmVkIGJ1ZmZlcjogTk9cbiIpOworCX0gZWxzZSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIlNjYXR0ZXJlZCBidWZmZXI6IFlFUywgTnVtIEZyYWdzOiAlZFxuIiwKKwkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpOworCX0KKworCS8qIEFsbCBwYWNrZXRzIG11c3QgaGF2ZSBhdCBsZWFzdCBhIE1BQyBhZGRyZXNzIGFuZCBhIHByb3RvY29sIHR5cGUgKi8KKwlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJQYWNrZXQgc2l6ZSA8IEVUSF9ITEVOICgxNCBieXRlcylcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBHZXQgYSBUQ0IgZm9yIHRoaXMgcGFja2V0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZDsKKworCWlmIChwTXBUY2IgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIkNhbid0IG9idGFpbiBhIFRDQlxuIik7CisJCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2ItPk5leHQ7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9PSBOVUxMKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiLT5QYWNrZXRMZW5ndGggPSBza2ItPmxlbjsKKwlwTXBUY2ItPlBhY2tldCA9IHNrYjsKKworCWlmICgoc2tiLT5kYXRhICE9IE5VTEwpICYmICgoc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuKSA+PSA2KSkgeworCQlwU2hCdWZWYSA9ICh1aW50MTZfdCAqKSBza2ItPmRhdGE7CisKKwkJaWYgKChwU2hCdWZWYVswXSA9PSAweGZmZmYpICYmCisJCSAgICAocFNoQnVmVmFbMV0gPT0gMHhmZmZmKSAmJiAocFNoQnVmVmFbMl0gPT0gMHhmZmZmKSkgeworCQkJTVBfU0VUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9CUk9BRCk7CisJCX0gZWxzZSBpZiAoKHBTaEJ1ZlZhWzBdICYgMHgzKSA9PSAweDAwMDEpIHsKKwkJCU1QX1NFVF9GTEFHKHBNcFRjYiwgZk1QX0RFU1RfTVVMVEkpOworCQl9CisJfQorCisJcE1wVGNiLT5OZXh0ID0gTlVMTDsKKworCS8qIENhbGwgdGhlIE5JQyBzcGVjaWZpYyBzZW5kIGhhbmRsZXIuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXN0YXR1cyA9IG5pY19zZW5kX3BhY2tldChwQWRhcHRlciwgcE1wVGNiKTsKKwl9CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJCWlmIChwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsLT5OZXh0ID0gcE1wVGNiOworCQl9IGVsc2UgeworCQkJLyogQXBwYXJlbnRseSByZWFkeSBRIGlzIGVtcHR5LiAqLworCQkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYjsKKwkJfQorCisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwgPSBwTXBUY2I7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwkJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlEQkdfQVNTRVJUKHBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kIDw9IE5VTV9UQ0IpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuaWNfc2VuZF9wYWNrZXQgLSBOSUMgc3BlY2lmaWMgc2VuZCBoYW5kbGVyIGZvciB2ZXJzaW9uIEIgc2lsaWNvbi4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFRjYjogcG9pbnRlciB0byBNUF9UQ0IKKyAqCisgKiBSZXR1cm5zIDAgb3IgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgbmljX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9UQ0IgcE1wVGNiKQoreworCXVpbnQzMl90IGxvb3BJbmRleDsKKwlUWF9ERVNDX0VOVFJZX3QgQ3VyRGVzY1syNF07CisJdWludDMyX3QgRnJhZ21lbnROdW1iZXIgPSAwOworCXVpbnQzMl90IGlUaGlzQ29weSwgaVJlbWFpbmRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFBhY2tldCA9IHBNcFRjYi0+UGFja2V0OworCXVpbnQzMl90IEZyYWdMaXN0Q291bnQgPSBza2Jfc2hpbmZvKHBQYWNrZXQpLT5ucl9mcmFncyArIDE7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcEZyYWdMaXN0ID0gJnNrYl9zaGluZm8ocFBhY2tldCktPmZyYWdzWzBdOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzMSwgbG9ja2ZsYWdzMjsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQYXJ0IG9mIHRoZSBvcHRpbWl6YXRpb25zIG9mIHRoaXMgc2VuZCByb3V0aW5lIHJlc3RyaWN0IHVzIHRvCisJICogc2VuZGluZyAyNCBmcmFnbWVudHMgYXQgYSBwYXNzLiAgSW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIG5ldmVyIHNlZQorCSAqIG1vcmUgdGhhbiA1IGZyYWdtZW50cy4KKwkgKgorCSAqIE5PVEU6IFRoZSBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKGJlbG93KSBjYW4gaGFuZGxlIGFueQorCSAqIG51bWJlciBvZiBmcmFnbWVudHMuIElmIG5lZWRlZCwgd2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiwKKwkgKiBhbHRob3VnaCBpdCBpcyBsZXNzIGVmZmljaWVudC4KKwkgKi8KKwlpZiAoRnJhZ0xpc3RDb3VudCA+IDIzKSB7CisJCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCW1lbXNldChDdXJEZXNjLCAwLCBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIChGcmFnTGlzdENvdW50ICsgMSkpOworCisJZm9yIChsb29wSW5kZXggPSAwOyBsb29wSW5kZXggPCBGcmFnTGlzdENvdW50OyBsb29wSW5kZXgrKykgeworCQkvKiBJZiB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhpcyBlbGVtZW50LCBsZXRzIGdldCBhCisJCSAqIGRlc2NyaXB0b3IgZnJvbSB0aGUgcmluZyBhbmQgZ2V0IHRoZSBuZWNlc3NhcnkgZGF0YQorCQkgKi8KKwkJaWYgKGxvb3BJbmRleCA9PSAwKSB7CisJCQkvKiBJZiB0aGUgZnJhZ21lbnRzIGFyZSBzbWFsbGVyIHRoYW4gYSBzdGFuZGFyZCBNVFUsCisJCQkgKiB0aGVuIG1hcCB0aGVtIHRvIGEgc2luZ2xlIGRlc2NyaXB0b3IgaW4gdGhlIFR4CisJCQkgKiBEZXNjIHJpbmcuIEhvd2V2ZXIsIGlmIHRoZXkncmUgbGFyZ2VyLCBhcyBpcworCQkJICogcG9zc2libGUgd2l0aCBzdXBwb3J0IGZvciBqdW1ibyBwYWNrZXRzLCB0aGVuCisJCQkgKiBzcGxpdCB0aGVtIGVhY2ggYWNyb3NzIDIgZGVzY3JpcHRvcnMuCisJCQkgKgorCQkJICogVGhpcyB3aWxsIHdvcmsgdW50aWwgd2UgZGV0ZXJtaW5lIHdoeSB0aGUgaGFyZHdhcmUKKwkJCSAqIGRvZXNuJ3Qgc2VlbSB0byBsaWtlIGxhcmdlIGZyYWdtZW50cy4KKwkJCSAqLworCQkJaWYgKChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgPD0gMTUxNCkgeworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIkdvdCBwYWNrZXQgb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWQsICIKKwkJCQkgICAgICAgIlRDQjogMHglcFxuIiwKKwkJCQkgICAgICAgKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkJICAgICAgIHZhbCwgcE1wVGNiKTsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMuCisJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgIHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuOworCisJCQkJLyogTk9URTogSGVyZSwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgaW1wbGljaXRseSBjYXN0IGFzIGEKKwkJCQkgKiB1aW50MzJfdC4gQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUKKwkJCQkgKiA2NC1iaXQsIHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5CisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBhbHdheXMgMzItYml0CisJCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEKKwkJCQkgKiBzdWJzeXN0ZW0pCisJCQkJICovCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcisrXS5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICBwUGFja2V0LT5kYXRhLAorCQkJCQkJICAgcFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGFfbGVuLAorCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl9IGVsc2UgeworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIkdvdCBwYWNrZXQgb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWQsICIKKwkJCQkgICAgICAgIlRDQjogMHglcFxuIiwKKwkJCQkgICAgICAgKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkJICAgICAgIHZhbCwgcE1wVGNiKTsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMuCisJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgICgocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIC8gMik7CisKKwkJCQkvKiBOT1RFOiBIZXJlLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCBmcm9tCisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBpbXBsaWNpdGx5IGNhc3QgYXMgYQorCQkJCSAqIHVpbnQzMl90LiBBbHRob3VnaCBkbWFfYWRkcl90IGNhbiBiZQorCQkJCSAqIDY0LWJpdCwgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkKKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGFsd2F5cyAzMi1iaXQKKwkJCQkgKiBhZGRyZXNzYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgcGNpL2RtYQorCQkJCSAqIHN1YnN5c3RlbSkKKwkJCQkgKi8KKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGEsCisJCQkJCQkgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpLAorCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0ud29yZDIuYml0cy4KKwkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkgICAgKChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgLyAyKTsKKworCQkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhCisJCQkJICogdWludDMyX3QuIEFsdGhvdWdoIGRtYV9hZGRyX3QgY2FuIGJlCisJCQkJICogNjQtYml0LCB0aGUgYWRkcmVzcyByZXR1cm5lZCBieQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJCSAqIGFkZHJlc3NhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBwY2kvZG1hCisJCQkJICogc3Vic3lzdGVtKQorCQkJCSAqLworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIrK10uRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgcFBhY2tldC0+ZGF0YSArCisJCQkJCQkgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpLAorCQkJCQkJICAgKChwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICBwUGFja2V0LT5kYXRhX2xlbikgLyAyKSwKKwkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJfQorCQl9IGVsc2UgeworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJHb3QgcGFja2V0IG9mIGxlbmd0aCAlZCwiCisJCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZFxuIgorCQkJICAgICAgICJUQ0I6IDB4JXBcbiIsCisJCQkgICAgICAgcEZyYWdMaXN0W2xvb3BJbmRleF0uc2l6ZSwKKwkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwsCisJCQkgICAgICAgcE1wVGNiKTsKKworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCQkgICAgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnNpemU7CisKKwkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCSAqIHBjaV9tYXBfcGFnZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhIHVpbnQzMl90LgorCQkJICogQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUgNjQtYml0LCB0aGUgYWRkcmVzcworCQkJICogcmV0dXJuZWQgYnkgcGNpX21hcF9wYWdlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEgc3Vic3lzdGVtKQorCQkJICovCisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJICAgIHBjaV9tYXBfcGFnZShwQWRhcHRlci0+cGRldiwKKwkJCQkJIHBGcmFnTGlzdFtsb29wSW5kZXggLSAxXS5wYWdlLAorCQkJCQkgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnBhZ2Vfb2Zmc2V0LAorCQkJCQkgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnNpemUsCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCX0KKworCWlmIChGcmFnbWVudE51bWJlciA9PSAwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiTm8uIGZyYWdzIGlzIDBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPT0KKwkJICAgIHBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycykgeworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHg1OworCQkJcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPSAwOworCQl9IGVsc2UgeworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHgxOworCQl9CisJfSBlbHNlIHsKKwkJQ3VyRGVzY1tGcmFnbWVudE51bWJlciAtIDFdLndvcmQzLnZhbHVlID0gMHg1OworCX0KKworCUN1ckRlc2NbMF0ud29yZDMuYml0cy5mID0gMTsKKworCXBNcFRjYi0+V3JJbmRleFN0YXJ0ID0gcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCXBNcFRjYi0+UGFja2V0U3RhbGVDb3VudCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJaVRoaXNDb3B5ID0KKwkgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFggLSBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWw7CisKKwlpZiAoaVRoaXNDb3B5ID49IEZyYWdtZW50TnVtYmVyKSB7CisJCWlSZW1haW5kZXIgPSAwOworCQlpVGhpc0NvcHkgPSBGcmFnbWVudE51bWJlcjsKKwl9IGVsc2UgeworCQlpUmVtYWluZGVyID0gRnJhZ21lbnROdW1iZXIgLSBpVGhpc0NvcHk7CisJfQorCisJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCwgQ3VyRGVzYywKKwkgICAgICAgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBpVGhpc0NvcHkpOworCisJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsICs9IGlUaGlzQ29weTsKKworCWlmICgocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsID09IDApIHx8CisJICAgIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgPT0KKwkgICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSkgeworCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMud3JhcCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDB4NDAwOworCQl9CisJfQorCisJaWYgKGlSZW1haW5kZXIpIHsKKwkJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSwKKwkJICAgICAgIEN1ckRlc2MgKyBpVGhpc0NvcHksCisJCSAgICAgICBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIGlSZW1haW5kZXIpOworCisJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCArPSBpUmVtYWluZGVyOworCX0KKworCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgPT0gMCkgeworCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlKSB7CisJCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPSBOVU1fREVTQ19QRVJfUklOR19UWCAtIDE7CisJCX0gZWxzZSB7CisJCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPQorCQkJICAgIDB4NDAwIHwgKE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gMSk7CisJCX0KKwl9IGVsc2UgeworCQlwTXBUY2ItPldySW5kZXgudmFsdWUgPQorCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlIC0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwtPk5leHQgPSBwTXBUY2I7CisJfSBlbHNlIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTXBUY2I7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBwTXBUY2I7CisKKwlEQkdfQVNTRVJUKHBNcFRjYi0+TmV4dCA9PSBOVUxMKTsKKworCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kKys7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MyKTsKKworCS8qIFdyaXRlIHRoZSBuZXcgd3JpdGUgcG9pbnRlciBiYWNrIHRvIHRoZSBkZXZpY2UuICovCisJd3JpdGVsKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSwKKwkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5zZXJ2aWNlX3JlcXVlc3QudmFsdWUpOworCisJLyogRm9yIEdpZyBvbmx5LCB3ZSB1c2UgVHggSW50ZXJydXB0IGNvYWxlc2NpbmcuICBFbmFibGUgdGhlIHNvZnR3YXJlCisJICogdGltZXIgdG8gd2FrZSB1cyB1cCBpZiB0aGlzIHBhY2tldCBpc24ndCBmb2xsb3dlZCBieSBOIG1vcmUuCisJICovCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCAqIE5BTk9fSU5fQV9NSUNSTywKKwkJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKgorICogTk9URTogRm9yIG5vdywga2VlcCB0aGlzIG9sZGVyIHZlcnNpb24gb2YgTklDU2VuZFBhY2tldCBhcm91bmQgZm9yCisgKiByZWZlcmVuY2UsIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IHVzZWQKKyAqLworI2lmIDAKKworLyoqCisgKiBOSUNTZW5kUGFja2V0IC0gTklDIHNwZWNpZmljIHNlbmQgaGFuZGxlci4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFRjYjogcG9pbnRlciB0byBNUF9UQ0IKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzLCBlcnJubyBvbiBmYWlsdXJlLgorICoKKyAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgc2VuZCByb3V0aW5lIGlzIGRlc2lnbmVkIGZvciB2ZXJzaW9uIEEgc2lsaWNvbi4KKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICovCitzdGF0aWMgaW50IG5pY19zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYikKK3sKKwl1aW50MzJfdCBsb29wSW5kZXgsIGZyYWdJbmRleCwgbG9vcEVuZDsKKwl1aW50MzJfdCBpU3BsaXRGaXJzdEVsZW1lbnQgPSAwOworCXVpbnQzMl90IFNlZ21lbnRTaXplID0gMDsKKwlUWF9ERVNDX0VOVFJZX3QgQ3VyRGVzYzsKKwlUWF9ERVNDX0VOVFJZX3QgKkN1ckRlc2NQb3N0Q29weSA9IE5VTEw7CisJdWludDMyX3QgU2xvdHNBdmFpbGFibGU7CisJRE1BMTBXX3QgU2VydmljZUNvbXBsZXRlOworCXVuc2lnbmVkIGludCBsb2NrZmxhZ3MxLCBsb2NrZmxhZ3MyOworCXN0cnVjdCBza19idWZmICpwUGFja2V0ID0gcE1wVGNiLT5QYWNrZXQ7CisJdWludDMyX3QgRnJhZ0xpc3RDb3VudCA9IHNrYl9zaGluZm8ocFBhY2tldCktPm5yX2ZyYWdzICsgMTsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpwRnJhZ0xpc3QgPSAmc2tiX3NoaW5mbyhwUGFja2V0KS0+ZnJhZ3NbMF07CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJU2VydmljZUNvbXBsZXRlLnZhbHVlID0KKwkJcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5OZXdTZXJ2aWNlQ29tcGxldGUudmFsdWUpOworCisJLyoKKwkgKiBBdHRlbXB0IHRvIGZpeCBUV08gaGFyZHdhcmUgYnVnczoKKwkgKiAxKSAgTkVWRVIgd3JpdGUgYW4gb2RkIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKwkgKiAyKSAgSWYgcGFja2V0IGxlbmd0aCBpcyBsZXNzIHRoYW4gTklDX01JTl9QQUNLRVRfU0laRSwgdGhlbiBwYWQgdGhlCisJICogICAgIHBhY2tldCB0byBOSUNfTUlOX1BBQ0tFVF9TSVpFIGJ5dGVzIGJ5IGFkZGluZyBhIG5ldyBsYXN0CisJICogICAgIGRlc2NyaXB0b3IgSU4gSEFMRiBEVVBMRVggTU9ERSBPTkxZCisJICogTk9URSB0aGF0ICgyKSBpbnRlcmFjdHMgd2l0aCAoMSkuICBJZiB0aGUgcGFja2V0IGlzIGxlc3MgdGhhbgorCSAqIE5JQ19NSU5fUEFDS0VUX1NJWkUgYnl0ZXMgdGhlbiB3ZSB3aWxsIGFwcGVuZCBhIGRlc2NyaXB0b3IuCisJICogVGhlcmVmb3JlIGlmIGl0IGlzIGV2ZW4gbm93LCBpdCB3aWxsIGV2ZW50dWFsbHkgZW5kIHVwIG9kZCwgYW5kCisJICogc28gd2lsbCBuZWVkIGFkanVzdGluZy4KKwkgKgorCSAqIFZMQU4gdGFncyBnZXQgaW52b2x2ZWQgc2luY2UgVkxBTiB0YWdzIGFkZCBhbm90aGVyIG9uZSBvciB0d28KKwkgKiBzZWdtZW50cy4KKwkgKi8KKwlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJICAgICAgICJwTXBUY2ItPlBhY2tldExlbmd0aDogJWRcbiIsIHBNcFRjYi0+UGFja2V0TGVuZ3RoKTsKKworCWlmICgocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9PSAwKQorCSAgICAmJiAocE1wVGNiLT5QYWNrZXRMZW5ndGggPCBOSUNfTUlOX1BBQ0tFVF9TSVpFKSkgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiSEFMRiBEVVBMRVggbW9kZSBBTkQgbGVuIDwgTUlOX1BLVF9TSVpFXG4iKTsKKwkJaWYgKChGcmFnTGlzdENvdW50ICYgMHgxKSA9PSAwKSB7CisJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgICAgIkV2ZW4gbnVtYmVyIG9mIGRlc2NzLCBzcGxpdCAxc3QgZWxlbVxuIik7CisJCQlpU3BsaXRGaXJzdEVsZW1lbnQgPSAxOworCQkJLy9TZWdtZW50U2l6ZSA9IHBGcmFnTGlzdFswXS5zaXplIC8gMjsKKwkJCVNlZ21lbnRTaXplID0gKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDI7CisJCX0KKwl9IGVsc2UgaWYgKEZyYWdMaXN0Q291bnQgJiAweDEpIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiT2RkIG51bWJlciBvZiBkZXNjcywgc3BsaXQgMXN0IGVsZW1cbiIpOworCisJCWlTcGxpdEZpcnN0RWxlbWVudCA9IDE7CisJCS8vU2VnbWVudFNpemUgPSBwRnJhZ0xpc3RbMF0uc2l6ZSAvIDI7CisJCVNlZ21lbnRTaXplID0gKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDI7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcV93cmFwID09CisJICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnNlcnZfY3BsX3dyYXApIHsKKwkJLyogVGhlIHJpbmcgaGFzbid0IHdyYXBwZWQuICBTbG90cyBhdmFpbGFibGUgc2hvdWxkIGJlCisJCSAqIChSSU5HX1NJWkUpIC0gIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVycy4KKwkJICovCisJCVNsb3RzQXZhaWxhYmxlID0gTlVNX0RFU0NfUEVSX1JJTkdfVFggLQorCQkgICAgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxIC0KKwkJICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy5zZXJ2X2NwbCk7CisJfSBlbHNlIHsKKwkJLyogVGhlIHJpbmcgaGFzIHdyYXBwZWQuICBTbG90cyBhdmFpbGFibGUgc2hvdWxkIGJlIHRoZQorCQkgKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwb2ludGVycy4KKwkJICovCisJCVNsb3RzQXZhaWxhYmxlID0gU2VydmljZUNvbXBsZXRlLmJpdHMuc2Vydl9jcGwgLQorCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXE7CisJfQorCisJaWYgKChGcmFnTGlzdENvdW50ICsgaVNwbGl0Rmlyc3RFbGVtZW50KSA+IFNsb3RzQXZhaWxhYmxlKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJOb3QgRW5vdWdoIFNwYWNlIGluIFR4IERlc2MgUmluZ1xuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbG9vcEVuZCA9IChGcmFnTGlzdENvdW50KSArIGlTcGxpdEZpcnN0RWxlbWVudDsKKwlmcmFnSW5kZXggPSAwOworCisJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCSAgICAgICAiVENCICAgICAgICAgICA6IDB4JXBcbiIKKwkgICAgICAgIlBhY2tldCAoU0tCKSAgOiAweCVwXHQgUGFja2V0LT5sZW46ICVkXHQgUGFja2V0LT5kYXRhX2xlbjogJWRcbiIKKwkgICAgICAgIkZyYWdMaXN0Q291bnQgOiAlZFx0IGlTcGxpdEZpcnN0RWxlbWVudDogJWRcdCBsb29wRW5kOiVkXG4iLAorCSAgICAgICBwTXBUY2IsCisJICAgICAgIHBQYWNrZXQsIHBQYWNrZXQtPmxlbiwgcFBhY2tldC0+ZGF0YV9sZW4sCisJICAgICAgIEZyYWdMaXN0Q291bnQsIGlTcGxpdEZpcnN0RWxlbWVudCwgbG9vcEVuZCk7CisKKwlmb3IgKGxvb3BJbmRleCA9IDA7IGxvb3BJbmRleCA8IGxvb3BFbmQ7IGxvb3BJbmRleCsrKSB7CisJCWlmIChsb29wSW5kZXggPiBpU3BsaXRGaXJzdEVsZW1lbnQpIHsKKwkJCWZyYWdJbmRleCsrOworCQl9CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkluIGxvb3AsIGxvb3BJbmRleDogJWRcdCBmcmFnSW5kZXg6ICVkXG4iLCBsb29wSW5kZXgsCisJCSAgICAgICBmcmFnSW5kZXgpOworCisJCS8qIElmIHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGlzIGVsZW1lbnQsIGxldCdzIGdldCBhCisJCSAqIGRlc2NyaXB0b3IgZnJvbSB0aGUgcmluZyBhbmQgZ2V0IHRoZSBuZWNlc3NhcnkgZGF0YQorCQkgKi8KKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIlBhY2tldCBMZW5ndGggJWQsIgorCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZFxuIiwKKwkJICAgICAgIHBQYWNrZXQtPmxlbiwKKwkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxKTsKKworCQkvLyBOT1RFIC0gU2hvdWxkIHdlIGRvIGEgcGFyYW5vaWEgY2hlY2sgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGZyYWdtZW50CisJCS8vIGFjdHVhbGx5IGhhcyBhIGxlbmd0aD8gSXQncyBISUdITFkgdW5saWtlbHkgdGhlIGZyYWdtZW50IHdvdWxkCisJCS8vIGNvbnRhaW4gbm8gZGF0YS4uLgorCQlpZiAoMSkgeworCQkJLy8gTk9URSAtIEN1cnJlbnRseSBhbHdheXMgZ2V0dGluZyAzMi1iaXQgYWRkcnMsIGFuZCBkbWFfYWRkcl90IGlzCisJCQkvLyAgICAgICAgb25seSAzMi1iaXQsIHNvIGxlYXZlICJoaWdoIiBwdHIgdmFsdWUgb3V0IGZvciBub3cKKwkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQlDdXJEZXNjLndvcmQyLnZhbHVlID0gMDsKKwkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAwOworCisJCQlpZiAoZnJhZ0luZGV4ID09IDApIHsKKwkJCQlpZiAoaVNwbGl0Rmlyc3RFbGVtZW50KSB7CisJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICAgICJTcGxpdCBmaXJzdCBlbGVtZW50OiBZRVNcbiIpOworCisJCQkJCWlmIChsb29wSW5kZXggPT0gMCkgeworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJHb3QgZnJhZ21lbnQgb2YgbGVuZ3RoICVkLCBmcmFnSW5kZXg6ICVkXG4iLAorCQkJCQkJICAgICAgIHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgICAgcFBhY2tldC0+ZGF0YV9sZW4sCisJCQkJCQkgICAgICAgZnJhZ0luZGV4KTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiU2VnbWVudFNpemU6ICVkXG4iLAorCQkJCQkJICAgICAgIFNlZ21lbnRTaXplKTsKKworCQkJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLgorCQkJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJCQkgICAgU2VnbWVudFNpemU7CisJCQkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT4KKwkJCQkJCQkJICAgcGRldiwKKwkJCQkJCQkJICAgcFBhY2tldC0+CisJCQkJCQkJCSAgIGRhdGEsCisJCQkJCQkJCSAgIFNlZ21lbnRTaXplLAorCQkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAicGNpX21hcF9zaW5nbGUoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJCQkgICAgICAgQ3VyRGVzYy4KKwkJCQkJCSAgICAgICBEYXRhQnVmZmVyUHRyTG93KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiR290IGZyYWdtZW50IG9mIGxlbmd0aCAlZCwgZnJhZ0luZGV4OiAlZFxuIiwKKwkJCQkJCSAgICAgICBwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICAgIHBQYWNrZXQtPmRhdGFfbGVuLAorCQkJCQkJICAgICAgIGZyYWdJbmRleCk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgIkxlZnRvdmVyIFNpemU6ICVkXG4iLAorCQkJCQkJICAgICAgIChwUGFja2V0LT5sZW4gLQorCQkJCQkJCXBQYWNrZXQtPmRhdGFfbGVuIC0KKwkJCQkJCQlTZWdtZW50U2l6ZSkpOworCisJCQkJCQlDdXJEZXNjLndvcmQyLmJpdHMuCisJCQkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkJCSAgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgICBwUGFja2V0LT5kYXRhX2xlbikgLQorCQkJCQkJICAgICBTZWdtZW50U2l6ZSk7CisJCQkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT4KKwkJCQkJCQkJICAgcGRldiwKKwkJCQkJCQkJICAgKHBQYWNrZXQtPgorCQkJCQkJCQkgICAgZGF0YSArCisJCQkJCQkJCSAgICBTZWdtZW50U2l6ZSksCisJCQkJCQkJCSAgIChwUGFja2V0LT4KKwkJCQkJCQkJICAgIGxlbiAtCisJCQkJCQkJCSAgICBwUGFja2V0LT4KKwkJCQkJCQkJICAgIGRhdGFfbGVuIC0KKwkJCQkJCQkJICAgIFNlZ21lbnRTaXplKSwKKwkJCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgInBjaV9tYXBfc2luZ2xlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCQkJICAgICAgIEN1ckRlc2MuCisJCQkJCQkgICAgICAgRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAgICAiU3BsaXQgZmlyc3QgZWxlbWVudDogTk9cbiIpOworCisJCQkJCUN1ckRlc2Mud29yZDIuYml0cy5sZW5ndGhfaW5fYnl0ZXMgPQorCQkJCQkgICAgcFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW47CisKKwkJCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJCSAgIHBQYWNrZXQtPmRhdGEsCisJCQkJCQkJICAgKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkJICAgIHBQYWNrZXQtPmRhdGFfbGVuKSwKKwkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgICAgInBjaV9tYXBfc2luZ2xlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCQkgICAgICAgQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCisJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgIHBGcmFnTGlzdFtmcmFnSW5kZXggLSAxXS5zaXplOworCQkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfcGFnZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0gMV0ucGFnZSwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0KKwkJCQkJCQkgICAxXS5wYWdlX29mZnNldCwKKwkJCQkJCSBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0gMV0uc2l6ZSwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJwY2lfbWFwX3BhZ2UoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJICAgICAgIEN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQl9CisKKwkJCWlmIChsb29wSW5kZXggPT0gMCkgeworCQkJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGRlc2NyaXB0b3Igb2YgdGhlIHBhY2tldAorCQkJCSAqCisJCQkJICogU2V0IHRoZSAiZiIgYml0IHRvIGluZGljYXRlIHRoaXMgaXMgdGhlCisJCQkJICogZmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgcGFja2V0LgorCQkJCSAqLworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIlRoaXMgaXMgb3VyIEZJUlNUIGRlc2NyaXB0b3JcbiIpOworCQkJCUN1ckRlc2Mud29yZDMuYml0cy5mID0gMTsKKworCQkJCXBNcFRjYi0+V3JJbmRleFN0YXJ0ID0KKwkJCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCQkJfQorCisJCQlpZiAoKGxvb3BJbmRleCA9PSAobG9vcEVuZCAtIDEpKSAmJgorCQkJICAgIChwQWRhcHRlci0+dWlEdXBsZXhNb2RlIHx8CisJCQkgICAgIChwTXBUY2ItPlBhY2tldExlbmd0aCA+PSBOSUNfTUlOX1BBQ0tFVF9TSVpFKSkpIHsKKwkJCQkvKiBUaGlzIGlzIHRoZSBMYXN0IGRlc2NyaXB0b3Igb2YgdGhlIHBhY2tldCAqLworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgIlRISVMgaXMgb3VyIExBU1QgZGVzY3JpcHRvclxuIik7CisKKwkJCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09CisJCQkJICAgIFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJCQkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy4KKwkJCQkJICAgIFR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA+PQorCQkJCQkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzKSB7CisJCQkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQkJCQkJcEFkYXB0ZXItPlR4UmluZy4KKwkJCQkJCSAgICBUeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQKKwkJCQkJCSAgICA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHgxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCQl9CisKKwkJCQkvKiBGb2xsb3dpbmcgaW5kZXggd2lsbCBiZSB1c2VkIGR1cmluZyBmcmVlaW5nCisJCQkJICogb2YgcGFja2V0CisJCQkJICovCisJCQkJcE1wVGNiLT5XckluZGV4ID0KKwkJCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCQkJCXBNcFRjYi0+UGFja2V0U3RhbGVDb3VudCA9IDA7CisJCQl9CisKKwkJCS8qIENvcHkgdGhlIGRlc2NyaXB0b3IgKGZpbGxlZCBhYm92ZSkgaW50byB0aGUKKwkJCSAqIGRlc2NyaXB0b3IgcmluZyBhdCB0aGUgbmV4dCBmcmVlIGVudHJ5LiAgQWR2YW5jZQorCQkJICogdGhlICJuZXh0IGZyZWUgZW50cnkiIHZhcmlhYmxlCisJCQkgKi8KKwkJCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxLAorCQkJICAgICAgICZDdXJEZXNjLCBzaXplb2YoVFhfREVTQ19FTlRSWV90KSk7CisKKwkJCUN1ckRlc2NQb3N0Q29weSA9CisJCQkgICAgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcTsKKworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJDVVJSRU5UIERFU0NSSVBUT1JcbiIKKwkJCSAgICAgICAiXHRBZGRyZXNzICAgICAgICAgICA6IDB4JXBcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJMb3cgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDIgICAgICAgICAgICAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHksCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT5EYXRhQnVmZmVyUHRySGlnaCwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJMb3csCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMi52YWx1ZSwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQzLnZhbHVlKTsKKworCQkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEgPj0KKwkJCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCkgeworCQkJCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy4KKwkJCQkgICAgc2Vydl9yZXFfd3JhcCkgeworCQkJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuCisJCQkJCSAgICB2YWx1ZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLgorCQkJCQkgICAgdmFsdWUgPSAweDQwMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9PSAwICYmCisJICAgIHBNcFRjYi0+UGFja2V0TGVuZ3RoIDwgTklDX01JTl9QQUNLRVRfU0laRSkgeworCQkvLyBOT1RFIC0gU2FtZSAzMi82NC1iaXQgaXNzdWUgYXMgYWJvdmUuLi4KKwkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRySGlnaCA9IDB4MDsKKwkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0gcEFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1BhOworCQlDdXJEZXNjLndvcmQyLnZhbHVlID0gMDsKKworCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcuVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID49CisJCQkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzKSB7CisJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCQlwQWRhcHRlci0+VHhSaW5nLlR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA9CisJCQkJICAgIDA7CisJCQl9IGVsc2UgeworCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQl9CisKKwkJQ3VyRGVzYy53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCSAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFIC0gcE1wVGNiLT5QYWNrZXRMZW5ndGg7CisKKwkJcE1wVGNiLT5XckluZGV4ID0gcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kOworCisJCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEsCisJCSAgICAgICAmQ3VyRGVzYywgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkpOworCisJCUN1ckRlc2NQb3N0Q29weSA9CisJCSAgICBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXE7CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkNVUlJFTlQgREVTQ1JJUFRPUlxuIgorCQkgICAgICAgIlx0QWRkcmVzcyAgICAgICAgICAgOiAweCVwXG4iCisJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckxvdyAgOiAweCUwOHhcbiIKKwkJICAgICAgICJcdHdvcmQyICAgICAgICAgICAgIDogMHglMDh4XG4iCisJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weSwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+RGF0YUJ1ZmZlclB0ckhpZ2gsCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJMb3csCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQyLnZhbHVlLAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMy52YWx1ZSk7CisKKwkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEgPj0KKwkJICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSB7CisJCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkgICAgc2Vydl9yZXFfd3JhcCkgeworCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDB4NDAwOworCQkJfQorCQl9CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiUGFkZGluZyBkZXNjcmlwdG9yICVkIGJ5ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgLy9wQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUsCisJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSwKKwkJICAgICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUgLSBwTXBUY2ItPlBhY2tldExlbmd0aCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFnczIpOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsLT5OZXh0ID0gcE1wVGNiOworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE1wVGNiOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gcE1wVGNiOworCisJREJHX0FTU0VSVChwTXBUY2ItPk5leHQgPT0gTlVMTCk7CisKKwlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCsrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwkvKiBXcml0ZSB0aGUgbmV3IHdyaXRlIHBvaW50ZXIgYmFjayB0byB0aGUgZGV2aWNlLiAqLworCXdyaXRlbChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUsCisJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuc2VydmljZV9yZXF1ZXN0LnZhbHVlKTsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwlEdW1wRGV2aWNlQmxvY2soREJHX1RYX09OLCBwQWRhcHRlciwgMSk7CisjZW5kaWYKKworCS8qIEZvciBHaWcgb25seSwgd2UgdXNlIFR4IEludGVycnVwdCBjb2FsZXNjaW5nLiAgRW5hYmxlIHRoZSBzb2Z0d2FyZQorCSAqIHRpbWVyIHRvIHdha2UgdXMgdXAgaWYgdGhpcyBwYWNrZXQgaXNuJ3QgZm9sbG93ZWQgYnkgTiBtb3JlLgorCSAqLworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWwgKiBOQU5PX0lOX0FfTUlDUk8sCisJCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qKgorICogZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQgLSBSZWN5Y2xlIGEgTVBfVENCLCBjb21wbGV0ZSB0aGUgcGFja2V0IGlmIG5lY2Vzc2FyeQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKiBAcE1wVGNiOiBwb2ludGVyIHRvIE1QX1RDQgorICoKKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCisgKi8KK19faW5saW5lIHZvaWQgZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1RDQiBwTXBUY2IpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJVFhfREVTQ19FTlRSWV90ICpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcEFkYXB0ZXItPm5ldF9zdGF0czsKKworCWlmIChNUF9URVNUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9CUk9BRCkpIHsKKwkJYXRvbWljX2luYygmcEFkYXB0ZXItPlN0YXRzLmJyZGNzdHhtdCk7CisJfSBlbHNlIGlmIChNUF9URVNUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9NVUxUSSkpIHsKKwkJYXRvbWljX2luYygmcEFkYXB0ZXItPlN0YXRzLm11bHRpeG10KTsKKwl9IGVsc2UgeworCQlhdG9taWNfaW5jKCZwQWRhcHRlci0+U3RhdHMudW5peG10KTsKKwl9CisKKwlpZiAocE1wVGNiLT5QYWNrZXQpIHsKKwkJc3RhdHMtPnR4X2J5dGVzICs9IHBNcFRjYi0+UGFja2V0LT5sZW47CisKKwkJLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBUWCBkZXNjcmlwdG9ycyBvbiB0aGUgcmluZworCQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGFja2V0IGFuZCB1bWFwIHRoZSBmcmFnbWVudHMKKwkJICogdGhleSBwb2ludCB0bworCQkgKi8KKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIlVubWFwIGRlc2NyaXB0b3JzIEhlcmVcbiIKKwkJICAgICAgICJUQ0IgICAgICAgICAgICAgICAgICA6IDB4JXBcbiIKKwkJICAgICAgICJUQ0IgTmV4dCAgICAgICAgICAgICA6IDB4JXBcbiIKKwkJICAgICAgICJUQ0IgUGFja2V0TGVuZ3RoICAgICA6ICVkXG4iCisJCSAgICAgICAiVENCIFdySW5kZXgudmFsdWUgICAgOiAweCUwOHhcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC5iaXRzLnZhbCA6ICVkXG4iCisJCSAgICAgICAiVENCIFdySW5kZXgudmFsdWUgICAgOiAweCUwOHhcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC5iaXRzLnZhbCA6ICVkXG4iLAorCQkgICAgICAgcE1wVGNiLAorCQkgICAgICAgcE1wVGNiLT5OZXh0LAorCQkgICAgICAgcE1wVGNiLT5QYWNrZXRMZW5ndGgsCisJCSAgICAgICBwTXBUY2ItPldySW5kZXhTdGFydC52YWx1ZSwKKwkJICAgICAgIHBNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMudmFsLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4LnZhbHVlLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsKTsKKworCQlkbyB7CisJCQlkZXNjID0KKwkJCSAgICAoVFhfREVTQ19FTlRSWV90ICopIChwQWRhcHRlci0+VHhSaW5nLgorCQkJCQkJIHBUeERlc2NSaW5nVmEgKworCQkJCQkJIHBNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMudmFsKTsKKworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJDVVJSRU5UIERFU0NSSVBUT1JcbiIKKwkJCSAgICAgICAiXHRBZGRyZXNzICAgICAgICAgICA6IDB4JXBcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRySGlnaCA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJMb3cgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDIgICAgICAgICAgICAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMyAgICAgICAgICAgICA6IDB4JTA4eFxuIiwKKwkJCSAgICAgICBkZXNjLAorCQkJICAgICAgIGRlc2MtPkRhdGFCdWZmZXJQdHJIaWdoLAorCQkJICAgICAgIGRlc2MtPkRhdGFCdWZmZXJQdHJMb3csCisJCQkgICAgICAgZGVzYy0+d29yZDIudmFsdWUsCisJCQkgICAgICAgZGVzYy0+d29yZDMudmFsdWUpOworCisJCQlwY2lfdW5tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkgZGVzYy0+RGF0YUJ1ZmZlclB0ckxvdywKKwkJCQkJIGRlc2MtPndvcmQyLnZhbHVlLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkJaWYgKCsrcE1wVGNiLT5XckluZGV4U3RhcnQuYml0cy52YWwgPj0KKwkJCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCkgeworCQkJCWlmIChwTXBUY2ItPldySW5kZXhTdGFydC5iaXRzLndyYXApIHsKKwkJCQkJcE1wVGNiLT5XckluZGV4U3RhcnQudmFsdWUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXBNcFRjYi0+V3JJbmRleFN0YXJ0LnZhbHVlID0gMHg0MDA7CisJCQkJfQorCQkJfQorCQl9CisJCXdoaWxlIChkZXNjICE9IChwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJCXBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkpOworCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJGcmVlIFBhY2tldCAoU0tCKSAgIDogMHglcFxuIiwgcE1wVGNiLT5QYWNrZXQpOworCisJCWRldl9rZnJlZV9za2JfYW55KHBNcFRjYi0+UGFja2V0KTsKKwl9CisKKwltZW1zZXQocE1wVGNiLCAwLCBzaXplb2YoTVBfVENCKSk7CisKKwkvKiBBZGQgdGhlIFRDQiB0byB0aGUgUmVhZHkgUSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBBZGFwdGVyLT5TdGF0cy5vcGFja2V0cysrOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbC0+TmV4dCA9IHBNcFRjYjsKKwl9IGVsc2UgeworCQkvKiBBcHBhcmVudGx5IHJlYWR5IFEgaXMgZW1wdHkuICovCisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2I7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCA9IHBNcFRjYjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0FTU0VSVChwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA+PSAwKTsKK30KKworLyoqCisgKiBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyAtIEZyZWUgYW5kIGNvbXBsZXRlIHRoZSBzdG9wcGVkIGFjdGl2ZSBzZW5kcworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogQXNzdW1wdGlvbiAtIFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKKyAqLwordm9pZCBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNUF9UQ0IgcE1wVGNiOworCXN0cnVjdCBsaXN0X2hlYWQgKnBFbnRyeTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFBhY2tldCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJdWludDMyX3QgRnJlZUNvdW50ZXIgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKKworCQlwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZC0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworCisJCXBFbnRyeSA9IHBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZS5uZXh0OworCisJCXBQYWNrZXQgPSBOVUxMOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcubldhaXRTZW5kID0gMDsKKworCS8qIEFueSBwYWNrZXRzIGJlaW5nIHNlbnQ/IENoZWNrIHRoZSBmaXJzdCBUQ0Igb24gdGhlIHNlbmQgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisKKwl3aGlsZSAoKHBNcFRjYiAhPSBOVUxMKSAmJiAoRnJlZUNvdW50ZXIgPCBOVU1fVENCKSkgeworCQlQTVBfVENCIHBOZXh0ID0gcE1wVGNiLT5OZXh0OworCisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE5leHQ7CisKKwkJaWYgKHBOZXh0ID09IE5VTEwpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gTlVMTDsKKwkJfQorCisJCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kLS07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgInBNcFRjYiA9IDB4JXBcbiIsIHBNcFRjYik7CisKKwkJRnJlZUNvdW50ZXIrKzsKKwkJTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4ocEFkYXB0ZXIsIHBNcFRjYik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCisJaWYgKEZyZWVDb3VudGVyID09IE5VTV9UQ0IpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTXBGcmVlQnVzeVNlbmRQYWNrZXRzIGV4aXR0ZWQgbG9vcCBmb3IgYSBiYWQgcmVhc29uXG4iKTsKKwkJQlVHKCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kID0gMDsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdCAtIEludGVycnVwdCBoYW5kbGVyIGZvciBzZW5kaW5nIHByb2Nlc3NpbmcKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIFJlLWNsYWltIHRoZSBzZW5kIHJlc291cmNlcywgY29tcGxldGUgc2VuZHMgYW5kIGdldCBtb3JlIHRvIHNlbmQgZnJvbQorICogdGhlIHNlbmQgd2FpdCBxdWV1ZS4KKyAqCisgKiBBc3N1bXB0aW9uIC0gU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCit2b2lkIGV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTWFyayBhcyBjb21wbGV0ZWQgYW55IHBhY2tldHMgd2hpY2ggaGF2ZSBiZWVuIHNlbnQgYnkgdGhlIGRldmljZS4gKi8KKwlldDEzMXhfdXBkYXRlX3RjYl9saXN0KHBBZGFwdGVyKTsKKworCS8qIElmIHdlIHF1ZXVlZCBhbnkgdHJhbnNtaXRzIGJlY2F1c2Ugd2UgZGlkbid0IGhhdmUgYW55IFRDQnMgZWFybGllciwKKwkgKiBkZXF1ZXVlIGFuZCBzZW5kIHRob3NlIHBhY2tldHMgbm93LCBhcyBsb25nIGFzIHdlIGhhdmUgZnJlZSBUQ0JzLgorCSAqLworCWV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdChwQWRhcHRlcik7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF91cGRhdGVfdGNiX2xpc3QgLSBIZWxwZXIgcm91dGluZSBmb3IgU2VuZCBJbnRlcnJ1cHQgaGFuZGxlcgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogUmUtY2xhaW1zIHRoZSBzZW5kIHJlc291cmNlcyBhbmQgY29tcGxldGVzIHNlbmRzLiAgQ2FuIGFsc28gYmUgY2FsbGVkIGFzCisgKiBwYXJ0IG9mIHRoZSBOSUMgc2VuZCByb3V0aW5lIHdoZW4gdGhlICJTZXJ2aWNlQ29tcGxldGUiIGluZGljYXRpb24gaGFzCisgKiB3cmFwcGVkLgorICovCitzdGF0aWMgdm9pZCBldDEzMXhfdXBkYXRlX3RjYl9saXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJRE1BMTBXX3QgU2VydmljZUNvbXBsZXRlOworCVBNUF9UQ0IgcE1wVGNiOworCisJU2VydmljZUNvbXBsZXRlLnZhbHVlID0KKwkgICAgcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5OZXdTZXJ2aWNlQ29tcGxldGUudmFsdWUpOworCisJLyogSGFzIHRoZSByaW5nIHdyYXBwZWQ/ICBQcm9jZXNzIGFueSBkZXNjcmlwdG9ycyB0aGF0IGRvIG5vdCBoYXZlCisJICogdGhlIHNhbWUgIndyYXAiIGluZGljYXRvciBhcyB0aGUgY3VycmVudCBjb21wbGV0aW9uIGluZGljYXRvcgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJd2hpbGUgKHBNcFRjYiAmJgorCSAgICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy53cmFwICE9IHBNcFRjYi0+V3JJbmRleC5iaXRzLndyYXAgICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnZhbCA8IHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZC0tOworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYi0+TmV4dDsKKwkJaWYgKHBNcFRjYi0+TmV4dCA9PSBOVUxMKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IE5VTEw7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCQlNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihwQWRhcHRlciwgcE1wVGNiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJLyogR290byB0aGUgbmV4dCBwYWNrZXQgKi8KKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCXdoaWxlIChwTXBUY2IgJiYKKwkgICAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMud3JhcCA9PSBwTXBUY2ItPldySW5kZXguYml0cy53cmFwICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnZhbCA+IHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZC0tOworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYi0+TmV4dDsKKwkJaWYgKHBNcFRjYi0+TmV4dCA9PSBOVUxMKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IE5VTEw7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCQlNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihwQWRhcHRlciwgcE1wVGNiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJLyogR290byB0aGUgbmV4dCBwYWNrZXQgKi8KKwkJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisJfQorCisJLyogV2FrZSB1cCB0aGUgcXVldWUgd2hlbiB3ZSBoaXQgYSBsb3ctd2F0ZXIgbWFyayAqLworCWlmIChwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA8PSAoTlVNX1RDQiAvIDMpKSB7CisJCW5ldGlmX3dha2VfcXVldWUocEFkYXB0ZXItPm5ldGRldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKK30KKworLyoqCisgKiBldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3QgLSBIZWxwZXIgcm91dGluZSBmb3IgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBUYWtlcyBwYWNrZXRzIGZyb20gdGhlIHNlbmQgd2FpdCBxdWV1ZSBhbmQgcG9zdHMgdGhlbSB0byB0aGUgZGV2aWNlIChpZgorICogcm9vbSBhdmFpbGFibGUpLgorICovCitzdGF0aWMgdm9pZCBldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUpICYmCisJICAgICAgIE1QX1RDQl9SRVNPVVJDRVNfQVZBSUxBQkxFKHBBZGFwdGVyKSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpwRW50cnk7CisKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJUeCBwYWNrZXRzIG9uIHRoZSB3YWl0IHF1ZXVlXG4iKTsKKworCQlwRW50cnkgPSBwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUubmV4dDsKKworCQlwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZC0tOworCisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJNcEhhbmRsZVNlbmRJbnRlcnJ1cHQgLSBzZW50IGEgcXVldWVkIHBrdC4gV2FpdGluZyAlZFxuIiwKKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTljNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF90eC5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byBkYXRhCisgKiAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9UWF9IX18KKyNkZWZpbmUgX19FVDEzMTBfVFhfSF9fCisKKworLyogVHlwZWRlZnMgZm9yIFR4IERlc2NyaXB0b3IgUmluZyAqLworCisvKgorICogVFhERVNDX1dPUkQyX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIGNvbnRyb2wgYml0cyBpbiB0aGUgVHggRGVzY3JpcHRvcgorICogcmluZyBmb3IgdGhlIEVULTEzMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfdHhkZXNjX3dvcmQyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHZsYW5fcHJpbzozOwkJLy8gYml0cyAyOS0zMShWTEFOIHByaW9yaXR5KQorCQl1MzIgdmxhbl9jZmk6MTsJCS8vIGJpdCAyOChjZmkpCisJCXUzMiB2bGFuX3RhZzoxMjsJCS8vIGJpdHMgMTYtMjcoVkxBTiB0YWcpCisJCXUzMiBsZW5ndGhfaW5fYnl0ZXM6MTY7CS8vIGJpdHMgIDAtMTUocGFja2V0IGxlbmd0aCkKKyNlbHNlCisJCXUzMiBsZW5ndGhfaW5fYnl0ZXM6MTY7CS8vIGJpdHMgIDAtMTUocGFja2V0IGxlbmd0aCkKKwkJdTMyIHZsYW5fdGFnOjEyOwkJLy8gYml0cyAxNi0yNyhWTEFOIHRhZykKKwkJdTMyIHZsYW5fY2ZpOjE7CQkvLyBiaXQgMjgoY2ZpKQorCQl1MzIgdmxhbl9wcmlvOjM7CQkvLyBiaXRzIDI5LTMxKFZMQU4gcHJpb3JpdHkpCisjZW5kaWYJLyogX0JJVF9GSUVMRFNfSFRPTCAqLworCX0gYml0czsKK30gVFhERVNDX1dPUkQyX3QsICpQVFhERVNDX1dPUkQyX3Q7CisKKy8qCisgKiBUWERFU0NfV09SRDNfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgY29udHJvbCBiaXRzIGluIHRoZSBUeCBEZXNjcmlwdG9yCisgKiByaW5nIGZvciB0aGUgRVQtMTMxMAorICovCit0eXBlZGVmIHVuaW9uIF90eGRlc2Nfd29yZDNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE3OwkvLyBiaXRzIDE1LTMxCisJCXUzMiB1ZHBhOjE7CS8vIGJpdCAxNChVRFAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdGNwYToxOwkvLyBiaXQgMTMoVENQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGlwYToxOwkJLy8gYml0IDEyKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHZsYW46MTsJLy8gYml0IDExKGFwcGVuZCBWTEFOIHRhZykKKwkJdTMyIGhwOjE7CQkvLyBiaXQgMTAoUGFja2V0IGlzIGEgSHVnZSBwYWNrZXQpCisJCXUzMiBwcDoxOwkJLy8gYml0ICA5KHBhZCBwYWNrZXQpCisJCXUzMiBtYWM6MTsJCS8vIGJpdCAgOChNQUMgb3ZlcnJpZGUpCisJCXUzMiBjcmM6MTsJCS8vIGJpdCAgNyhhcHBlbmQgQ1JDKQorCQl1MzIgZToxOwkJLy8gYml0ICA2KFR4IGZyYW1lIGhhcyBlcnJvcikKKwkJdTMyIHBmOjE7CQkvLyBiaXQgIDUoc2VuZCBwYXVzZSBmcmFtZSkKKwkJdTMyIGJwOjE7CQkvLyBiaXQgIDQoSXNzdWUgaGFsZi1kdXBsZXggYmFja3ByZXNzdXJlIChYT04vWE9GRikKKwkJdTMyIGN3OjE7CQkvLyBiaXQgIDMoQ29udHJvbCB3b3JkIC0gbm8gcGFja2V0IGRhdGEpCisJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKKwkJdTMyIGY6MTsJCS8vIGJpdCAgMShmaXJzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorCQl1MzIgbDoxOwkJLy8gYml0ICAwKGxhc3QgcGFja2V0IGluIHRoZSBzZXF1ZW5jZSkKKyNlbHNlCisJCXUzMiBsOjE7CQkvLyBiaXQgIDAobGFzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorCQl1MzIgZjoxOwkJLy8gYml0ICAxKGZpcnN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCisJCXUzMiBpcjoxOwkJLy8gYml0ICAyKGludGVycnVwdCB0aGUgcHJvY2Vzc29yIHdoZW4gdGhpcyBwa3Qgc2VudCkKKwkJdTMyIGN3OjE7CQkvLyBiaXQgIDMoQ29udHJvbCB3b3JkIC0gbm8gcGFja2V0IGRhdGEpCisJCXUzMiBicDoxOwkJLy8gYml0ICA0KElzc3VlIGhhbGYtZHVwbGV4IGJhY2twcmVzc3VyZSAoWE9OL1hPRkYpCisJCXUzMiBwZjoxOwkJLy8gYml0ICA1KHNlbmQgcGF1c2UgZnJhbWUpCisJCXUzMiBlOjE7CQkvLyBiaXQgIDYoVHggZnJhbWUgaGFzIGVycm9yKQorCQl1MzIgY3JjOjE7CQkvLyBiaXQgIDcoYXBwZW5kIENSQykKKwkJdTMyIG1hYzoxOwkJLy8gYml0ICA4KE1BQyBvdmVycmlkZSkKKwkJdTMyIHBwOjE7CQkvLyBiaXQgIDkocGFkIHBhY2tldCkKKwkJdTMyIGhwOjE7CQkvLyBiaXQgMTAoUGFja2V0IGlzIGEgSHVnZSBwYWNrZXQpCisJCXUzMiB2bGFuOjE7CS8vIGJpdCAxMShhcHBlbmQgVkxBTiB0YWcpCisJCXUzMiBpcGE6MTsJCS8vIGJpdCAxMihJUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB0Y3BhOjE7CS8vIGJpdCAxMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdWRwYToxOwkvLyBiaXQgMTQoVURQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHVudXNlZDoxNzsJLy8gYml0cyAxNS0zMQorI2VuZGlmCS8qIF9CSVRfRklFTERTX0hUT0wgKi8KKwl9IGJpdHM7Cit9IFRYREVTQ19XT1JEM190LCAqUFRYREVTQ19XT1JEM190OworCisvKiBUWF9ERVNDX0VOVFJZX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIGVhY2ggZGVzY3JpcHRvciBvbiB0aGUgcmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgX3R4X2Rlc2NfZW50cnlfdCB7CisJdTMyIERhdGFCdWZmZXJQdHJIaWdoOworCXUzMiBEYXRhQnVmZmVyUHRyTG93OworCVRYREVTQ19XT1JEMl90IHdvcmQyOwkvLyBjb250cm9sIHdvcmRzIGhvdyB0byB4bWl0IHRoZQorCVRYREVTQ19XT1JEM190IHdvcmQzOwkvLyBkYXRhIChkZXRhaWxlZCBhYm92ZSkKK30gVFhfREVTQ19FTlRSWV90LCAqUFRYX0RFU0NfRU5UUllfdDsKKworCisvKiBUeXBlZGVmcyBmb3IgVHggRE1BIGVuZ2luZSBzdGF0dXMgd3JpdGViYWNrICovCisKKy8qCisgKiBUWF9TVEFUVVNfQkxPQ0tfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgVHggRE1BIGVuZ2luZQorICogaXQgc2l0cyBpbiBmcmVlIG1lbW9yeSwgYW5kIGlzIHBvaW50ZWQgdG8gYnkgMHgxMDFjIC8gMHgxMDIwCisgKi8KK3R5cGVkZWYgdW5pb24gX3R4X3N0YXR1c19ibG9ja190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjE7CQkvLyBiaXRzIDExLTMxCisJCXUzMiBzZXJ2X2NwbF93cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgc2Vydl9jcGw6MTA7CQkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHNlcnZfY3BsOjEwOwkJLy8gYml0cyAwLTkKKwkJdTMyIHNlcnZfY3BsX3dyYXA6MTsJLy8gYml0IDEwCisJCXUzMiB1bnVzZWQ6MjE7CQkvLyBiaXRzIDExLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYX1NUQVRVU19CTE9DS190LCAqUFRYX1NUQVRVU19CTE9DS190OworCisvKiBUQ0IgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spICovCit0eXBlZGVmIHN0cnVjdCBfTVBfVENCIHsKKwlzdHJ1Y3QgX01QX1RDQiAqTmV4dDsKKwl1MzIgRmxhZ3M7CisJdTMyIENvdW50OworCXUzMiBQYWNrZXRTdGFsZUNvdW50OworCXN0cnVjdCBza19idWZmICpQYWNrZXQ7CisJdTMyIFBhY2tldExlbmd0aDsKKwlETUExMFdfdCBXckluZGV4OworCURNQTEwV190IFdySW5kZXhTdGFydDsKK30gTVBfVENCLCAqUE1QX1RDQjsKKworLyogU3RydWN0dXJlIHRvIGhvbGQgdGhlIHNrYidzIGluIGEgbGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QgdHhfc2tiX2xpc3RfZWxlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBza2JfbGlzdF9lbGVtOworCXN0cnVjdCBza19idWZmICpza2I7Cit9IFRYX1NLQl9MSVNUX0VMRU0sICpQVFhfU0tCX0xJU1RfRUxFTTsKKworLyogVFhfUklOR190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyBvdXIgbG9jYWwgcmVmZXJlbmNlKHMpIHRvIHRoZSByaW5nICovCit0eXBlZGVmIHN0cnVjdCBfdHhfcmluZ190IHsKKwkvKiBUQ0IgKFRyYW5zbWl0IENvbnRyb2wgQmxvY2spIG1lbW9yeSBhbmQgbGlzdHMgKi8KKwlQTVBfVENCIE1wVGNiTWVtOworCisJLyogTGlzdCBvZiBUQ0JzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgKi8KKwlQTVBfVENCIFRDQlJlYWR5UXVldWVIZWFkOworCVBNUF9UQ0IgVENCUmVhZHlRdWV1ZVRhaWw7CisKKwkvKiBsaXN0IG9mIFRDQnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHNlbnQuICBOT1RFIHRoYXQgYWNjZXNzIHRvIGFsbAorCSAqIHRocmVlIG9mIHRoZXNlIChpbmNsdWRpbmcgbkJ1c3lTZW5kKSBhcmUgY29udHJvbGxlZCB2aWEgdGhlCisJICogVENCU2VuZFFMb2NrLiAgVGhpcyBsb2NrIHNob3VsZCBiZSBzZWN1cmVkIHByaW9yIHRvIGluY2VtZW50aW5nIC8KKwkgKiBkZWNyZW1lbnRpbmcgbkJ1c3lTZW5kLCBvciBhbnkgcXVldWUgbWFuaXB1bGF0aW9uIG9uIEN1cnJTZW5kSGVhZCAvCisJICogVGFpbAorCSAqLworCVBNUF9UQ0IgQ3VyclNlbmRIZWFkOworCVBNUF9UQ0IgQ3VyclNlbmRUYWlsOworCWludDMyX3QgbkJ1c3lTZW5kOworCisJLyogTGlzdCBvZiBwYWNrZXRzIChub3QgVENCcykgdGhhdCB3ZXJlIHF1ZXVlZCBmb3IgbGFjayBvZiByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIFNlbmRXYWl0UXVldWU7CisJaW50MzJfdCBuV2FpdFNlbmQ7CisKKwkvKiBUaGUgYWN0dWFsIGRlc2NyaXB0b3IgcmluZyAqLworCVBUWF9ERVNDX0VOVFJZX3QgcFR4RGVzY1JpbmdWYTsKKwlkbWFfYWRkcl90IHBUeERlc2NSaW5nUGE7CisJdWludDY0X3QgcFR4RGVzY1JpbmdBZGp1c3RlZFBhOworCXVpbnQ2NF90IFR4RGVzY09mZnNldDsKKworCS8qIFJlYWR5VG9TZW5kIGluZGljYXRlcyB3aGVyZSB3ZSBsYXN0IHdyb3RlIHRvIGluIHRoZSBkZXNjcmlwdG9yIHJpbmcuICovCisJRE1BMTBXX3QgdHhEbWFSZWFkeVRvU2VuZDsKKworCS8qIFRoZSBsb2NhdGlvbiBvZiB0aGUgd3JpdGUtYmFjayBzdGF0dXMgYmxvY2sgKi8KKwlQVFhfU1RBVFVTX0JMT0NLX3QgcFR4U3RhdHVzVmE7CisJZG1hX2FkZHJfdCBwVHhTdGF0dXNQYTsKKworCS8qIEEgQmxvY2sgb2YgemVyb2VzIHVzZWQgdG8gcGFkIHBhY2tldHMgdGhhdCBhcmUgbGVzcyB0aGFuIDYwIGJ5dGVzICovCisJdm9pZCAqcFR4RHVtbXlCbGtWYTsKKwlkbWFfYWRkcl90IHBUeER1bW15QmxrUGE7CisKKwlUWE1BQ19FUlJfdCBUeE1hY0VycjsKKworCS8qIFZhcmlhYmxlcyB0byB0cmFjayB0aGUgVHggaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZXMgKi8KKwlpbnQzMl90IFR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdDsKK30gVFhfUklOR190LCAqUFRYX1JJTkdfdDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgZnJhZy1saXN0IGZvciB0aGUgZm9sbG93aW5nIHByb3RvdHlwZXMgKi8KK3R5cGVkZWYgc3RydWN0IF9NUF9GUkFHX0xJU1QgTVBfRlJBR19MSVNULCAqUE1QX0ZSQUdfTElTVDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCisvKiBQUk9UT1RZUEVTIGZvciBldDEzMTBfdHguYyAqLworaW50IGV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnVHhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfaW5pdF9zZW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOworaW50IGV0MTMxeF9zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKKyNlbmRpZiAvKiBfX0VUMTMxMF9UWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmU2MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9hZGFwdGVyLmggLSBIZWFkZXIgd2hpY2ggaW5jbHVkZXMgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUsIGFsb25nCisgKiAgICAgICAgICAgICAgICAgICAgd2l0aCByZWxhdGVkIHN1cHBvcnQgc3RydWN0dXJlcywgbWFjcm9zLCBkZWZpbml0aW9ucywgZXRjLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0FEQVBURVJfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0FEQVBURVJfSF9fCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKworLyoKKyAqIERvIG5vdCBjaGFuZ2UgdGhlc2UgdmFsdWVzOiBpZiBjaGFuZ2VkLCB0aGVuIGNoYW5nZSBhbHNvIGluIHJlc3BlY3RpdmUKKyAqIFRYZG1hIGFuZCBSeGRtYSBlbmdpbmVzCisgKi8KKyNkZWZpbmUgTlVNX0RFU0NfUEVSX1JJTkdfVFggICAgICAgICA1MTIJLy8gVFggRG8gbm90IGNoYW5nZSB0aGVzZSB2YWx1ZXMKKyNkZWZpbmUgTlVNX1RDQiAgICAgICAgICAgICAgICAgICAgICA2NAorCisvKgorICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgc3VwZXJzZWRlZCBieSByZWdpc3RyeSBlbnRyaWVzIHRvIGZhY2lsaXRhdGUgdHVuaW5nLgorICogT25jZSB0aGUgZGVzaXJlZCBwZXJmb3JtYW5jZSBoYXMgYmVlbiBhY2hpZXZlZCwgdGhlIG9wdGltYWwgcmVnaXN0cnkgdmFsdWVzCisgKiBzaG91bGQgYmUgcmUtcG9wdWxhdGVkIHRvIHRoZXNlICNkZWZpbmVzOgorICovCisjZGVmaW5lIE5VTV9UUkFGRklDX0NMQVNTRVMgICAgICAgICAgMQorCisvKgorICogVGhlcmUgYXJlIHRocmVlIHdheXMgb2YgY291bnRpbmcgZXJyb3JzIC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBYIGVycm9ycworICogaW4gWSBwYWNrZXRzIChyZXByZXNlbnRlZCBieSB0aGUgIlNBTVBMRSIgbWFjcm9zKSwgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgorICogTiBlcnJvcnMgaW4gYSBTIG1TZWMgdGltZSBwZXJpb2QgKHRoZSAiUEVSSU9EIiBtYWNyb3MpLCBvciBpZiB0aGVyZSBhcmUKKyAqIGNvbnNlY3V0aXZlIHBhY2tldHMgd2l0aCBlcnJvcnMgKENPTlNFQ19FUlJPUkVEX1RIUkVTSCkuICBUaGlzIGxhc3QgY292ZXJzCisgKiBmb3IgIkJ1cnN0eSIgZXJyb3JzLCBhbmQgdGhlIGVycm9yZWQgcGFja2V0cyBtYXkgd2VsbCBub3QgYmUgY29udGlndW91cywKKyAqIGJ1dCBzZXZlcmFsIGVycm9ycyB3aGVyZSB0aGUgcGFja2V0IGNvdW50ZXIgaGFzIGNoYW5nZWQgYnkgbGVzcyB0aGFuIGEKKyAqIHNtYWxsIGFtb3VudCB3aWxsIGNhdXNlIHRoaXMgY291bnQgdG8gaW5jcmVtZW50LgorICovCisjZGVmaW5lIFRYX1BBQ0tFVFNfSU5fU0FNUExFICAgICAgICAxMDAwMAorI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1NBTVBMRSAgICAgNTAKKworI2RlZmluZSBUWF9FUlJPUl9QRVJJT0QgICAgICAgICAgICAgMTAwMAorI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1BFUklPRCAgICAgMTAKKworI2RlZmluZSBMSU5LX0RFVEVDVElPTl9USU1FUiAgICAgICAgNTAwMAorCisjZGVmaW5lIFRYX0NPTlNFQ19SQU5HRSAgICAgICAgICAgICA1CisjZGVmaW5lIFRYX0NPTlNFQ19FUlJPUkVEX1RIUkVTSCAgICAxMAorCisjZGVmaW5lIExPX01BUktfUEVSQ0VOVF9GT1JfUFNSICAgICAxNQorI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1JYICAgICAgMTUKKworLyogTWFjcm9zIGZvciBmbGFnIGFuZCByZWYgY291bnQgb3BlcmF0aW9ucyAgICAgICAgKi8KKyNkZWZpbmUgTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAgICgoX00pLT5GbGFncyB8PSAoX0YpKQorI2RlZmluZSBNUF9DTEVBUl9GTEFHKF9NLCBfRikgICAgICAgKChfTSktPkZsYWdzICY9IH4oX0YpKQorI2RlZmluZSBNUF9DTEVBUl9GTEFHUyhfTSkgICAgICAgICAgKChfTSktPkZsYWdzID0gMCkKKyNkZWZpbmUgTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSAhPSAwKQorI2RlZmluZSBNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICAgKCgoX00pLT5GbGFncyAmIChfRikpID09IChfRikpCisjZGVmaW5lIE1QX0lTX0ZMQUdfQ0xFQVIoX00sIF9GKSAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gMCkKKworI2RlZmluZSBNUF9JTkNfUkNWX1JFRihfQSkgICAgICAgICAgYXRvbWljX2luYygmKF9BKS0+UmN2UmVmQ291bnQpCisjZGVmaW5lIE1QX0RFQ19SQ1ZfUkVGKF9BKSAgICAgICAgICBhdG9taWNfZGVjKCYoX0EpLT5SY3ZSZWZDb3VudCkKKyNkZWZpbmUgTVBfR0VUX1JDVl9SRUYoX0EpICAgICAgICAgIGF0b21pY19yZWFkKCYoX0EpLT5SY3ZSZWZDb3VudCkKKworLyogTWFjcm9zIHNwZWNpZmljIHRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCisjZGVmaW5lIE1QX1RDQl9SRVNPVVJDRVNfQVZBSUxBQkxFKF9NKSAoKF9NKS0+VHhSaW5nLm5CdXN5U2VuZCA8IE5VTV9UQ0IpCisjZGVmaW5lIE1QX1RDQl9SRVNPVVJDRVNfTk9UX0FWQUlMQUJMRShfTSkgKChfTSktPlR4UmluZy5uQnVzeVNlbmQgPj0gTlVNX1RDQikKKworI2RlZmluZSBNUF9TSE9VTERfRkFJTF9TRU5EKF9NKSAgICgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX0ZBSUxfU0VORF9NQVNLKQorI2RlZmluZSBNUF9JU19OT1RfUkVBRFkoX00pICAgICAgICgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX05PVF9SRUFEWV9NQVNLKQorI2RlZmluZSBNUF9JU19SRUFEWShfTSkgICAgICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9OT1RfUkVBRFlfTUFTSykKKworI2RlZmluZSBNUF9IQVNfQ0FCTEUoX00pICAgICAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9fQ0FCTEUpCisjZGVmaW5lIE1QX0xJTktfREVURUNURUQoX00pICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTikKKworLyogQ291bnRlcnMgZm9yIGVycm9yIHJhdGUgbW9uaXRvcmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX0VSUl9DT1VOVEVSUyB7CisJdTMyIFBrdENvdW50VHhQYWNrZXRzOworCXUzMiBQa3RDb3VudFR4RXJyb3JzOworCXUzMiBUaW1lckJhc2VkVHhFcnJvcnM7CisJdTMyIFBrdENvdW50TGFzdEVycm9yOworCXUzMiBFcnJlZENvbnNlY1BhY2tldHM7Cit9IE1QX0VSUl9DT1VOVEVSUywgKlBNUF9FUlJfQ09VTlRFUlM7CisKKy8qIFJGRCAoUmVjZWl2ZSBGcmFtZSBEZXNjcmlwdG9yKSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX1JGRCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKwl1MzIgUGFja2V0U2l6ZTsJLy8gdG90YWwgc2l6ZSBvZiByZWNlaXZlIGZyYW1lCisJdTE2IGlCdWZmZXJJbmRleDsKKwl1OCBpUmluZ0luZGV4OworfSBNUF9SRkQsICpQTVBfUkZEOworCisvKiBFbnVtIGZvciBGbG93IENvbnRyb2wgKi8KK3R5cGVkZWYgZW51bSBfZWZsb3dfY29udHJvbF90IHsKKwlCb3RoID0gMCwKKwlUeE9ubHkgPSAxLAorCVJ4T25seSA9IDIsCisJTm9uZSA9IDMKK30gZUZMT1dfQ09OVFJPTF90LCAqUGVGTE9XX0NPTlRST0xfdDsKKworLyogU3RydWN0IHRvIGRlZmluZSBzb21lIGRldmljZSBzdGF0aXN0aWNzICovCit0eXBlZGVmIHN0cnVjdCBfY2Vfc3RhdHNfdCB7CisJLyogTGluayBJbnB1dC9PdXRwdXQgc3RhdHMgKi8KKwl1aW50NjRfdCBpcGFja2V0czsJLy8gIyBvZiBpbiBwYWNrZXRzCisJdWludDY0X3Qgb3BhY2tldHM7CS8vICMgb2Ygb3V0IHBhY2tldHMKKworCS8qIE1JQiBJSSB2YXJpYWJsZXMKKwkgKgorCSAqIE5PVEU6IGF0b21pY190IHR5cGVzIGFyZSBvbmx5IGd1YXJhbnRlZWQgdG8gc3RvcmUgMjQtYml0czsgaWYgd2UKKwkgKiBNVVNUIGhhdmUgMzIsIHRoZW4gd2UnbGwgbmVlZCBhbm90aGVyIHdheSB0byBwZXJmb3JtIGF0b21pYworCSAqIG9wZXJhdGlvbnMKKwkgKi8KKwl1MzIgdW5pcmN2OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJYXRvbWljX3QgdW5peG10OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIGZvciBUeAorCXUzMiBtdWx0aXJjdjsJLy8gIyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAorCWF0b21pY190IG11bHRpeG10OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIGZvciBUeAorCXUzMiBicmRjc3RyY3Y7CS8vICMgYnJvYWRjYXN0IHBhY2tldHMgcmVjZWl2ZWQKKwlhdG9taWNfdCBicmRjc3R4bXQ7CS8vICMgYnJvYWRjYXN0IHBhY2tldHMgZm9yIFR4CisJdTMyIG5vcmN2YnVmOwkvLyAjIFJ4IHBhY2tldHMgZGlzY2FyZGVkCisJdTMyIG5veG10YnVmOwkvLyAjIFR4IHBhY2tldHMgZGlzY2FyZGVkCisKKwkvKiBUcmFuc2NpZXZlciBzdGF0ZSBpbmZvcm1hdGlvbnMuICovCisJdTggeGN2cl9hZGRyOworCXUzMiB4Y3ZyX2lkOworCisJLyogVHggU3RhdGlzdGljcy4gKi8KKwl1MzIgdHhfdWZsbzsJCS8vIFR4IFVuZGVycnVucworCisJdTMyIGNvbGxpc2lvbnM7CisJdTMyIGV4Y2Vzc2l2ZV9jb2xsaXNpb25zOworCXUzMiBmaXJzdF9jb2xsaXNpb247CisJdTMyIGxhdGVfY29sbGlzaW9uczsKKwl1MzIgbWF4X3BrdF9lcnJvcjsKKwl1MzIgdHhfZGVmZXJyZWQ7CisKKwkvKiBSeCBTdGF0aXN0aWNzLiAqLworCXUzMiByeF9vdl9mbG93OwkvLyBSeCBPdmVyIEZsb3cKKworCXUzMiBsZW5ndGhfZXJyOworCXUzMiBhbGlnbm1lbnRfZXJyOworCXUzMiBjcmNfZXJyOworCXUzMiBjb2RlX3Zpb2xhdGlvbnM7CisJdTMyIG90aGVyX2Vycm9yczsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwl1MzIgVW5oYW5kbGVkSW50ZXJydXB0c1BlclNlYzsKKwl1MzIgUnhEbWFJbnRlcnJ1cHRzUGVyU2VjOworCXUzMiBUeERtYUludGVycnVwdHNQZXJTZWM7CisJdTMyIFdhdGNoRG9nSW50ZXJydXB0c1BlclNlYzsKKyNlbmRpZgkvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKwl1MzIgU3luY2hyb3Vub3VzSXRlcmF0aW9uczsKKwlJTlRFUlJVUFRfdCBJbnRlcnJ1cHRTdGF0dXM7Cit9IENFX1NUQVRTX3QsICpQQ0VfU1RBVFNfdDsKKworLyogVGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlciB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOworCisJLyogRmxhZ3MgdGhhdCBpbmRpY2F0ZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhZGFwdGVyICovCisJdTMyIEZsYWdzOworCXUzMiBId0VyckNvdW50OworCisJLyogQ29uZmlndXJhdGlvbiAgKi8KKwl1OCBQZXJtYW5lbnRBZGRyZXNzW0VUSF9BTEVOXTsKKwl1OCBDdXJyZW50QWRkcmVzc1tFVEhfQUxFTl07CisJYm9vbCBiT3ZlcnJpZGVBZGRyZXNzOworCWJvb2wgYkVlcHJvbVByZXNlbnQ7CisJdTggZWVwcm9tRGF0YVsyXTsKKworCS8qIFNwaW5sb2NrcyAqLworCXNwaW5sb2NrX3QgTG9jazsKKworCXNwaW5sb2NrX3QgVENCU2VuZFFMb2NrOworCXNwaW5sb2NrX3QgVENCUmVhZHlRTG9jazsKKwlzcGlubG9ja190IFNlbmRIV0xvY2s7CisJc3BpbmxvY2tfdCBTZW5kV2FpdExvY2s7CisKKwlzcGlubG9ja190IFJjdkxvY2s7CisJc3BpbmxvY2tfdCBSY3ZQZW5kTG9jazsKKwlzcGlubG9ja190IEZickxvY2s7CisKKwlzcGlubG9ja190IFBIWUxvY2s7CisKKwkvKiBQYWNrZXQgRmlsdGVyIGFuZCBsb29rIGFoZWFkIHNpemUgKi8KKwl1MzIgUGFja2V0RmlsdGVyOworCXUzMiB1bExvb2tBaGVhZDsKKwl1MzIgdWlMaW5rU3BlZWQ7CisJdTMyIHVpRHVwbGV4TW9kZTsKKwl1MzIgdWlBdXRvTmVnU3RhdHVzOworCXU4IHVjTGlua1N0YXR1czsKKworCS8qIG11bHRpY2FzdCBsaXN0ICovCisJdTMyIE1DQWRkcmVzc0NvdW50OworCXU4IE1DTGlzdFtOSUNfTUFYX01DQVNUX0xJU1RdW0VUSF9BTEVOXTsKKworCS8qIE1BQyB0ZXN0ICovCisJVFhNQUNfVFhURVNUX3QgVHhNYWNUZXN0OworCisJLyogUG9pbnRlciB0byB0aGUgZGV2aWNlJ3MgUENJIHJlZ2lzdGVyIHNwYWNlICovCisJQUREUkVTU19NQVBfdCBfX2lvbWVtICpDU1JBZGRyZXNzOworCisJLyogUENJIGNvbmZpZyBzcGFjZSBpbmZvLCBmb3IgZGVidWcgcHVycG9zZXMgb25seS4gKi8KKwl1OCBSZXZpc2lvbklEOworCXUxNiBWZW5kb3JJRDsKKwl1MTYgRGV2aWNlSUQ7CisJdTE2IFN1YlZlbmRvcklEOworCXUxNiBTdWJTeXN0ZW1JRDsKKwl1MzIgQ2FjaGVGaWxsU2l6ZTsKKwl1MTYgUGNpWERldkN0bDsKKwl1OCBwY2lfbGF0X3RpbWVyOworCXU4IHBjaV9oZHJfdHlwZTsKKwl1OCBwY2lfYmlzdDsKKwl1MzIgcGNpX2NmZ19zdGF0ZVs2NCAvIHNpemVvZih1MzIpXTsKKworCS8qIFJlZ2lzdHJ5IHBhcmFtZXRlcnMgKi8KKwl1OCBTcGVlZER1cGxleDsJCS8vIHNwZWVkL2R1cGxleAorCWVGTE9XX0NPTlRST0xfdCBSZWdpc3RyeUZsb3dDb250cm9sOwkvLyBmb3IgODAyLjN4IGZsb3cgY29udHJvbAorCXU4IFJlZ2lzdHJ5V09MTWF0Y2g7CS8vIEVuYWJsZSBXT0wgcGF0dGVybi1tYXRjaGluZworCXU4IFJlZ2lzdHJ5V09MTGluazsJLy8gTGluayBzdGF0ZSBjaGFuZ2UgaXMgaW5kZXBlbmRhbnQKKwl1OCBSZWdpc3RyeVBoeUNvbWE7CS8vIFBoeSBDb21hIG1vZGUgZW5hYmxlL2Rpc2FibGUKKworCXUzMiBSZWdpc3RyeVJ4TWVtRW5kOwkvLyBTaXplIG9mIGludGVybmFsIHJ4IG1lbW9yeQorCXU4IFJlZ2lzdHJ5TUFDU3RhdDsJLy8gSWYgc2V0LCByZWFkIE1BQ1NUQVQsIGVsc2UgZG9uJ3QKKwl1MzIgUmVnaXN0cnlWbGFuVGFnOwkvLyA4MDIuMXEgVmxhbiBUQUcKKwl1MzIgUmVnaXN0cnlKdW1ib1BhY2tldDsJLy8gTWF4IHN1cHBvcnRlZCBldGhlcm5ldCBwYWNrZXQgc2l6ZQorCisJdTMyIFJlZ2lzdHJ5VHhOdW1CdWZmZXJzOworCXUzMiBSZWdpc3RyeVR4VGltZUludGVydmFsOworCisJdTMyIFJlZ2lzdHJ5UnhOdW1CdWZmZXJzOworCXUzMiBSZWdpc3RyeVJ4VGltZUludGVydmFsOworCisJLyogVmFsaWRhdGlvbiBoZWxwZXJzICovCisJdTggUmVnaXN0cnlQTVdPTDsKKwl1OCBSZWdpc3RyeU5NSURpc2FibGU7CisJdTMyIFJlZ2lzdHJ5RE1BQ2FjaGU7CisJdTMyIFJlZ2lzdHJ5U0NHYWluOworCXU4IFJlZ2lzdHJ5UGh5TG9vcGJrOwkvLyBFbmFibGUgUGh5IGxvb3BiYWNrCisKKwkvKiBEZXJpdmVkIGZyb20gdGhlIHJlZ2lzdHJ5OiAqLworCXU4IEFpRm9yY2VEcHg7CQkvLyBkdXBsZXggc2V0dGluZworCXUxNiBBaUZvcmNlU3BlZWQ7CQkvLyAnU3BlZWQnLCB1c2VyIG92ZXItcmlkZSBvZiBsaW5lIHNwZWVkCisJZUZMT1dfQ09OVFJPTF90IEZsb3dDb250cm9sOwkvLyBmbG93IGNvbnRyb2wgdmFsaWRhdGVkIGJ5IHRoZSBmYXItZW5kCisJZW51bSB7CisJCU5FVElGX1NUQVRVU19JTlZBTElEID0gMCwKKwkJTkVUSUZfU1RBVFVTX01FRElBX0NPTk5FQ1QsCisJCU5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNULAorCQlORVRJRl9TVEFUVVNfTUFYCisJfSBNZWRpYVN0YXRlOworCXU4IERyaXZlck5vUGh5QWNjZXNzOworCisJLyogTWluaW1pemUgaW5pdC10aW1lICovCisJYm9vbCBiUXVlcnlQZW5kaW5nOworCWJvb2wgYlNldFBlbmRpbmc7CisJYm9vbCBiUmVzZXRQZW5kaW5nOworCXN0cnVjdCB0aW1lcl9saXN0IEVycm9yVGltZXI7CisJYm9vbCBiTGlua1RpbWVyQWN0aXZlOworCU1QX1BPV0VSX01HTVQgUG9NZ210OworCUlOVEVSUlVQVF90IENhY2hlZE1hc2tWYWx1ZTsKKworCWF0b21pY190IFJjdlJlZkNvdW50OwkvLyBOdW0gcGFja2V0cyBub3QgeWV0IHJldHVybmVkCisKKwkvKiBYY3ZyIHN0YXR1cyBhdCBsYXN0IHBvbGwgKi8KKwlNSV9CTVNSX3QgQm1zcjsKKworCS8qIFR4IE1lbW9yeSBWYXJpYWJsZXMgKi8KKwlUWF9SSU5HX3QgVHhSaW5nOworCisJLyogUnggTWVtb3J5IFZhcmlhYmxlcyAqLworCVJYX1JJTkdfdCBSeFJpbmc7CisKKwkvKiBFVDEzMTAgcmVnaXN0ZXIgQWNjZXNzICovCisJSkFHQ09SRV9BQ0NFU1NfUkVHUyBKYWdDb3JlUmVnczsKKwlQQ0lfQ0ZHX1NQQUNFX1JFR1MgUGNpQ2ZnUmVnczsKKworCS8qIExvb3BiYWNrIHNwZWNpZmljcyAqLworCXU4IFJlcGxpY2FQaHlMb29wYms7CS8vIFJlcGxpY2EgRW5hYmxlCisJdTggUmVwbGljYVBoeUxvb3Bia1BGOwkvLyBSZXBsaWNhIEVuYWJsZSBQYXNzL0ZhaWwKKworCS8qIFN0YXRzICovCisJQ0VfU1RBVFNfdCBTdGF0czsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHNfcHJldjsKK307CisKKyNkZWZpbmUgTVBTZW5kUGFja2V0c0hhbmRsZXIgIE1QU2VuZFBhY2tldHMKKyNkZWZpbmUgTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4oQWRhcHRlciwgcE1wVGNiKSBcCisJZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoQWRhcHRlciwgcE1wVGNiKQorI2RlZmluZSBNcFNlbmRQYWNrZXRGdW4oQWRhcHRlciwgUGFja2V0KSBNcFNlbmRQYWNrZXQoQWRhcHRlciwgUGFja2V0KQorCisjZW5kaWYgLyogX19FVDEzMVhfQURBUFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkYmFhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9jb25maWcuYyAtIEhhbmRsZXMgcGFyc2luZyBvZiBjb25maWd1cmF0aW9uIGRhdGEgZHVyaW5nCisgKiAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorI2luY2x1ZGUgImV0MTMxeF9jb25maWcuaCIKKworI2luY2x1ZGUgImV0MTMxMF90eC5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qIERlZmluZXMgZm9yIFBhcmFtZXRlciBEZWZhdWx0L01pbi9NYXggdmF1bGVzICovCisjZGVmaW5lIFBBUk1fU1BFRURfRFVQTEVYX0RFRiAgIDAKKyNkZWZpbmUgUEFSTV9TUEVFRF9EVVBMRVhfTUlOICAgMAorI2RlZmluZSBQQVJNX1NQRUVEX0RVUExFWF9NQVggICA1CisKKyNkZWZpbmUgUEFSTV9WTEFOX1RBR19ERUYgICAgICAgMAorI2RlZmluZSBQQVJNX1ZMQU5fVEFHX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fVkxBTl9UQUdfTUFYICAgICAgIDQwOTUKKworI2RlZmluZSBQQVJNX0ZMT1dfQ1RMX0RFRiAgICAgICAwCisjZGVmaW5lIFBBUk1fRkxPV19DVExfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9GTE9XX0NUTF9NQVggICAgICAgMworCisjZGVmaW5lIFBBUk1fV09MX0xJTktfREVGICAgICAgIDMKKyNkZWZpbmUgUEFSTV9XT0xfTElOS19NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX1dPTF9MSU5LX01BWCAgICAgICAzCisKKyNkZWZpbmUgUEFSTV9XT0xfTUFUQ0hfREVGICAgICAgNworI2RlZmluZSBQQVJNX1dPTF9NQVRDSF9NSU4gICAgICAwCisjZGVmaW5lIFBBUk1fV09MX01BVENIX01BWCAgICAgIDcKKworI2RlZmluZSBQQVJNX0pVTUJPX1BLVF9ERUYgICAgICAxNTE0CisjZGVmaW5lIFBBUk1fSlVNQk9fUEtUX01JTiAgICAgIDE1MTQKKyNkZWZpbmUgUEFSTV9KVU1CT19QS1RfTUFYICAgICAgOTIxNgorCisjZGVmaW5lIFBBUk1fUEhZX0NPTUFfREVGICAgICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfQ09NQV9NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9DT01BX01BWCAgICAgICAxCisKKyNkZWZpbmUgUEFSTV9SWF9OVU1fQlVGU19ERUYgICAgNAorI2RlZmluZSBQQVJNX1JYX05VTV9CVUZTX01JTiAgICAxCisjZGVmaW5lIFBBUk1fUlhfTlVNX0JVRlNfTUFYICAgIDY0CisKKyNkZWZpbmUgUEFSTV9SWF9USU1FX0lOVF9ERUYgICAgMTAKKyNkZWZpbmUgUEFSTV9SWF9USU1FX0lOVF9NSU4gICAgMgorI2RlZmluZSBQQVJNX1JYX1RJTUVfSU5UX01BWCAgICAzMjAKKworI2RlZmluZSBQQVJNX1RYX05VTV9CVUZTX0RFRiAgICA0CisjZGVmaW5lIFBBUk1fVFhfTlVNX0JVRlNfTUlOICAgIDEKKyNkZWZpbmUgUEFSTV9UWF9OVU1fQlVGU19NQVggICAgNDAKKworI2RlZmluZSBQQVJNX1RYX1RJTUVfSU5UX0RFRiAgICA0MAorI2RlZmluZSBQQVJNX1RYX1RJTUVfSU5UX01JTiAgICAxCisjZGVmaW5lIFBBUk1fVFhfVElNRV9JTlRfTUFYICAgIDE0MAorCisjZGVmaW5lIFBBUk1fUlhfTUVNX0VORF9ERUYgICAgIDB4MmJjCisjZGVmaW5lIFBBUk1fUlhfTUVNX0VORF9NSU4gICAgIDAKKyNkZWZpbmUgUEFSTV9SWF9NRU1fRU5EX01BWCAgICAgMHgzZmYKKworI2RlZmluZSBQQVJNX01BQ19TVEFUX0RFRiAgICAgICAxCisjZGVmaW5lIFBBUk1fTUFDX1NUQVRfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9NQUNfU1RBVF9NQVggICAgICAgMQorCisjZGVmaW5lIFBBUk1fU0NfR0FJTl9ERUYgICAgICAgIDcKKyNkZWZpbmUgUEFSTV9TQ19HQUlOX01JTiAgICAgICAgMAorI2RlZmluZSBQQVJNX1NDX0dBSU5fTUFYICAgICAgICA3CisKKyNkZWZpbmUgUEFSTV9QTV9XT0xfREVGICAgICAgICAgMAorI2RlZmluZSBQQVJNX1BNX1dPTF9NSU4gICAgICAgICAwCisjZGVmaW5lIFBBUk1fUE1fV09MX01BWCAgICAgICAgIDEKKworI2RlZmluZSBQQVJNX05NSV9ESVNBQkxFX0RFRiAgICAwCisjZGVmaW5lIFBBUk1fTk1JX0RJU0FCTEVfTUlOICAgIDAKKyNkZWZpbmUgUEFSTV9OTUlfRElTQUJMRV9NQVggICAgMgorCisjZGVmaW5lIFBBUk1fRE1BX0NBQ0hFX0RFRiAgICAgIDAKKyNkZWZpbmUgUEFSTV9ETUFfQ0FDSEVfTUlOICAgICAgMAorI2RlZmluZSBQQVJNX0RNQV9DQUNIRV9NQVggICAgICAxNQorCisjZGVmaW5lIFBBUk1fUEhZX0xPT1BCS19ERUYgICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfTE9PUEJLX01JTiAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9MT09QQktfTUFYICAgICAxCisKKyNkZWZpbmUgUEFSTV9NQUNfQUREUkVTU19ERUYgICAgeyAweDAwLCAweDA1LCAweDNkLCAweDAwLCAweDAyLCAweDAwIH0KKworLyogTW9kdWxlIHBhcmFtZXRlciBmb3IgZGlzYWJsaW5nIE5NSQorICogZXQxMzF4X3NwZWVkX3NldCA6CisgKiBTZXQgTGluayBzcGVlZCBhbmQgZHVibGV4IG1hbnVhbGx5ICgwLTUpICBbMF0KKyAqICAxIDogMTBNYiAgIEhhbGYtRHVwbGV4CisgKiAgMiA6IDEwTWIgICBGdWxsLUR1cGxleAorICogIDMgOiAxMDBNYiAgSGFsZi1EdXBsZXgKKyAqICA0IDogMTAwTWIgIEZ1bGwtRHVwbGV4CisgKiAgNSA6IDEwMDBNYiBGdWxsLUR1cGxleAorICogIDAgOiBBdXRvIFNwZWVkIEF1dG8gRHVibGV4IC8vIGRlZmF1bHQKKyAqLworc3RhdGljIHUzMiBldDEzMXhfbm1pX2Rpc2FibGUgPSBQQVJNX05NSV9ESVNBQkxFX0RFRjsKK21vZHVsZV9wYXJhbShldDEzMXhfbm1pX2Rpc2FibGUsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfbm1pX2Rpc2FibGUsICJEaXNhYmxlIE5NSSAoMC0yKSBbMF0iKTsKKworLyogTW9kdWxlIHBhcmFtZXRlciBmb3IgbWFudWFsIHNwZWVkIHNldHRpbmcKKyAqIGV0MTMxeF9ubWlfZGlzYWJsZSA6CisgKiBEaXNhYmxlIE5NSSAoMC0yKSBbMF0KKyAqICAwIDoKKyAqICAxIDoKKyAqICAyIDoKKyAqLworc3RhdGljIHUzMiBldDEzMXhfc3BlZWRfc2V0ID0gUEFSTV9TUEVFRF9EVVBMRVhfREVGOworbW9kdWxlX3BhcmFtKGV0MTMxeF9zcGVlZF9zZXQsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfc3BlZWRfc2V0LAorCQkgIlNldCBMaW5rIHNwZWVkIGFuZCBkdWJsZXggbWFudWFsbHkgKDAtNSkgIFswXSBcbiAgMSA6IDEwTWIgICBIYWxmLUR1cGxleCBcbiAgMiA6IDEwTWIgICBGdWxsLUR1cGxleCBcbiAgMyA6IDEwME1iICBIYWxmLUR1cGxleCBcbiAgNCA6IDEwME1iICBGdWxsLUR1cGxleCBcbiAgNSA6IDEwMDBNYiBGdWxsLUR1cGxleCBcbiAwIDogQXV0byBTcGVlZCBBdXRvIER1YmxleCIpOworCisvKioKKyAqIGV0MTMxeF9jb25maWdfcGFyc2UKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICoKKyAqIFBhcnNlcyBhIGNvbmZpZ3VyYXRpb24gZnJvbSBzb21lIGxvY2F0aW9uIChtb2R1bGUgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUpCisgKiBpbnRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKi8KK3ZvaWQgZXQxMzF4X2NvbmZpZ19wYXJzZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVpbnQ4X3QgbWFjQWRkckRlZltdID0gUEFSTV9NQUNfQUREUkVTU19ERUY7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyoKKwkgKiBUaGUgTkRJUyBkcml2ZXIgdXNlcyB0aGUgcmVnaXN0cnkgdG8gc3RvcmUgcGVyc2lzdGVudCBwZXItZGV2aWNlCisJICogY29uZmlndXJhdGlvbiwgYW5kIHJlYWRzIHRoaXMgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBhcHByb3ByaWF0ZQorCSAqIGVsZW1lbnRzIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlIG9uIGluaXRpYWxpemF0aW9uLgorCSAqIEJlY2F1c2UgTGludXggaGFzIG5vIGFuYWxvZyB0byB0aGUgcmVnaXN0cnksIHVzZSB0aGlzIGZ1bmN0aW9uIHRvCisJICogaW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSB3aXRoIGEgZGVmYXVsdAorCSAqIGNvbmZpZ3VyYXRpb24uCisJICoKKwkgKiBPbmUgb3RoZXIgcG9zc2liaWxpdHkgaXMgdG8gdXNlIGEgc2VyaWVzIG9mIG1vZHVsZSBwYXJhbWV0ZXJzIHdoaWNoCisJICogY2FuIGJlIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIHdoZW4gdGhlIG1vZHVsZSBpcyBpbml0aWFsaXplZC4KKwkgKiBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGFsbG93IGZvciBzZXBlcmF0ZQorCSAqIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBldmVudCBtdWx0aXBsZSBkZXZpY2VzIGFyZSBwcmVzZW50LCBhbmQgaGVuY2UKKwkgKiB3aWxsIG5vdCBzdWZmaWNlLgorCSAqCisJICogSWYgYW5vdGhlciBtZXRob2QgaXMgZGVyaXZlZCB3aGljaCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLCB0aGlzIGlzCisJICogd2hlcmUgaXQgc2hvdWxkIGJlIGltcGxlbWVudGVkLgorCSAqLworCisJIC8qIFNldCB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUKKwkgICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXJzCisJICAqLworCWlmIChldDEzMXhfc3BlZWRfc2V0ICE9IFBBUk1fU1BFRURfRFVQTEVYX0RFRikgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNwZWVkIHNldCBtYW51YWxseSB0byA6ICVkIFxuIiwKKwkJCSAgICBldDEzMXhfc3BlZWRfc2V0KTsKKwkJcEFkYXB0ZXItPlNwZWVkRHVwbGV4ID0gZXQxMzF4X3NwZWVkX3NldDsKKwl9IGVsc2UgeworCQlwQWRhcHRlci0+U3BlZWREdXBsZXggPSBQQVJNX1NQRUVEX0RVUExFWF9ERUY7CisJfQorCisJLy8gIHBBZGFwdGVyLT5TcGVlZER1cGxleCAgICAgICAgICAgID0gUEFSTV9TUEVFRF9EVVBMRVhfREVGOworCisJcEFkYXB0ZXItPlJlZ2lzdHJ5VmxhblRhZyA9IFBBUk1fVkxBTl9UQUdfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID0gUEFSTV9GTE9XX0NUTF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5V09MTGluayA9IFBBUk1fV09MX0xJTktfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVdPTE1hdGNoID0gUEFSTV9XT0xfTUFUQ0hfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID0gUEFSTV9KVU1CT19QS1RfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVBoeUNvbWEgPSBQQVJNX1BIWV9DT01BX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlSeE51bUJ1ZmZlcnMgPSBQQVJNX1JYX05VTV9CVUZTX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlSeFRpbWVJbnRlcnZhbCA9IFBBUk1fUlhfVElNRV9JTlRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycyA9IFBBUk1fVFhfTlVNX0JVRlNfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVR4VGltZUludGVydmFsID0gUEFSTV9UWF9USU1FX0lOVF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UnhNZW1FbmQgPSBQQVJNX1JYX01FTV9FTkRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeU1BQ1N0YXQgPSBQQVJNX01BQ19TVEFUX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlTQ0dhaW4gPSBQQVJNX1NDX0dBSU5fREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVBNV09MID0gUEFSTV9QTV9XT0xfREVGOworCisJaWYgKGV0MTMxeF9ubWlfZGlzYWJsZSAhPSBQQVJNX05NSV9ESVNBQkxFX0RFRikgeworCQlwQWRhcHRlci0+UmVnaXN0cnlOTUlEaXNhYmxlID0gZXQxMzF4X25taV9kaXNhYmxlOworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5SZWdpc3RyeU5NSURpc2FibGUgPSBQQVJNX05NSV9ESVNBQkxFX0RFRjsKKwl9CisKKwlwQWRhcHRlci0+UmVnaXN0cnlETUFDYWNoZSA9IFBBUk1fRE1BX0NBQ0hFX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPSBQQVJNX1BIWV9MT09QQktfREVGOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyB0byBhIGRlZmF1bHQgKi8KKwltZW1jcHkocEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBtYWNBZGRyRGVmLCBFVEhfQUxFTik7CisJcEFkYXB0ZXItPmJPdmVycmlkZUFkZHJlc3MgPSBmYWxzZTsKKworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJICAiRGVmYXVsdCBNQUMgQWRkcmVzcyAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXSwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXSwKKwkJICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF0sIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XSk7CisKKwkvKiBEZWNvZGUgU3BlZWREdXBsZXgKKwkgKgorCSAqIFNldCB1cCBhcyBpZiB3ZSBhcmUgYXV0byBuZWdvdGlhdGluZyBhbHdheXMgYW5kIHRoZW4gY2hhbmdlIGlmIHdlCisJICogZ28gaW50byBmb3JjZSBtb2RlCisJICovCisJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDA7CS8vIEF1dG8gc3BlZWQKKwlwQWRhcHRlci0+QWlGb3JjZURweCA9IDA7CS8vIEF1dG8gRkRYCisKKwkvKiBJZiB3ZSBhcmUgdGhlIDEwLzEwMCBkZXZpY2UsIGFuZCBnaWdhYml0IGlzIHNvbWVob3cgcmVxdWVzdGVkIHRoZW4KKwkgKiBrbm9jayBpdCBkb3duIHRvIDEwMCBmdWxsLgorCSAqLworCWlmICgocEFkYXB0ZXItPkRldmljZUlEID09IEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QpICYmCisJICAgIChwQWRhcHRlci0+U3BlZWREdXBsZXggPT0gNSkpIHsKKwkJcEFkYXB0ZXItPlNwZWVkRHVwbGV4ID0gNDsKKwl9CisKKwlzd2l0Y2ggKHBBZGFwdGVyLT5TcGVlZER1cGxleCkgeworCWNhc2UgMToJCS8vIDEwTWIgICBIYWxmLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvLyAxME1iICAgRnVsbC1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDI7CisJCWJyZWFrOworCisJY2FzZSAzOgkJLy8gMTAwTWIgIEhhbGYtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CQkvLyAxMDBNYiAgRnVsbC1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAyOworCQlicmVhazsKKworCWNhc2UgNToJCS8vIDEwMDBNYiBGdWxsLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTAwMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAyOworCQlicmVhazsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDJjMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfY29uZmlnLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB0byBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICBldDEzMXhfY29uZmlnLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9DT05GSUdfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0NPTkZJR19IX18KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIGV0MTMxeF9jb25maWdfcGFyc2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX0NPTkZJR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTViY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9kZWJ1Zy5jIC0gUm91dGluZXMgdXNlZCBmb3IgZGVidWdnaW5nLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKKyNpbmNsdWRlICJldDEzMXhfY29uZmlnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisKKy8qKgorICogRHVtcFR4UXVldWVDb250ZW50cyAtIER1bXAgb3V0IHRoZSB0eCBxdWV1ZSBhbmQgdGhlIHNoYWRvdyBwb2ludGVycworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIER1bXBUeFF1ZXVlQ29udGVudHMoaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlNTUNfdCBfX2lvbWVtICptbWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1tYzsKKwl1aW50MzJfdCBUeFF1ZXVlQWRkcjsKKworCWlmIChEQkdfRkxBR1MoZXQxMzF4X2RiZ2luZm8pICYgZGJnTHZsKSB7CisJCWZvciAoVHhRdWV1ZUFkZHIgPSAweDIwMDsgVHhRdWV1ZUFkZHIgPCAweDNmZjsgVHhRdWV1ZUFkZHIrKykgeworCQkJTU1DX1NSQU1fQUNDRVNTX3Qgc3JhbV9hY2Nlc3M7CisKKwkJCXNyYW1fYWNjZXNzLnZhbHVlID0gcmVhZGwoJm1tYy0+c3JhbV9hY2Nlc3MudmFsdWUpOworCQkJc3JhbV9hY2Nlc3MuYml0cy5yZXFfYWRkciA9IFR4UXVldWVBZGRyOworCQkJc3JhbV9hY2Nlc3MuYml0cy5yZXFfYWNjZXNzID0gMTsKKwkJCXdyaXRlbChzcmFtX2FjY2Vzcy52YWx1ZSwgJm1tYy0+c3JhbV9hY2Nlc3MudmFsdWUpOworCisJCQlEQkdfUFJJTlQoIkFkZHIgMHgleCwgQWNjZXNzIDB4JTA4eFx0IgorCQkJCSAgIlZhbHVlIDEgMHglMDh4LCBWYWx1ZSAyIDB4JTA4eCwgIgorCQkJCSAgIlZhbHVlIDMgMHglMDh4LCBWYWx1ZSA0IDB4JTA4eCwgXG4iLAorCQkJCSAgVHhRdWV1ZUFkZHIsCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX2FjY2Vzcy52YWx1ZSksCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX3dvcmQxKSwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fd29yZDIpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkMyksCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX3dvcmQ0KSk7CisJCX0KKworCQlEQkdfUFJJTlQoIlNoYWRvdyBQb2ludGVycyAweCUwOHhcbiIsCisJCQkgIHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWMuc2hhZG93X3B0ci52YWx1ZSkpOworCX0KK30KKworLyoqCisgKiBEdW1wRGV2aWNlQmxvY2sKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIER1bXBzIHRoZSBmaXJzdCA2NCByZWdzIG9mIGVhY2ggYmxvY2sgb2YgdGhlIGV0LTEzMTAgKGVhY2ggYmxvY2sgaXMKKyAqIG1hcHBlZCB0byBhIG5ldyBwYWdlLCBlYWNoIHBhZ2UgaXMgNDA5NiBieXRlcykuCisgKi8KKyNkZWZpbmUgTlVNX0JMT0NLUyA4Cit2b2lkIER1bXBEZXZpY2VCbG9jayhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkgICAgIHVpbnQzMl90IEJsb2NrKQoreworCXVpbnQzMl90IEFkZHJlc3MxLCBBZGRyZXNzMjsKKwl1aW50MzJfdCBfX2lvbWVtICpCaWdEZXZpY2VQb2ludGVyID0KKwkJKHVpbnQzMl90IF9faW9tZW0gKikgcEFkYXB0ZXItPkNTUkFkZHJlc3M7CisJY29uc3QgY2hhciAqQmxvY2tOYW1lc1tOVU1fQkxPQ0tTXSA9IHsKKwkJIkdsb2JhbCIsICJUeCBETUEiLCAiUnggRE1BIiwgIlR4IE1BQyIsCisJCSJSeCBNQUMiLCAiTUFDIiwgIk1BQyBTdGF0IiwgIk1NQyIKKwl9OworCisJLyogT3V0cHV0IHRoZSBkZWJ1ZyBjb3VudGVycyB0byB0aGUgZGVidWcgdGVybWluYWwgKi8KKwlpZiAoREJHX0ZMQUdTKGV0MTMxeF9kYmdpbmZvKSAmIGRiZ0x2bCkgeworCQlEQkdfUFJJTlQoIiVzIGJsb2NrXG4iLCBCbG9ja05hbWVzW0Jsb2NrXSk7CisJCUJpZ0RldmljZVBvaW50ZXIgKz0gQmxvY2sgKiAxMDI0OworCQlmb3IgKEFkZHJlc3MxID0gMDsgQWRkcmVzczEgPCA4OyBBZGRyZXNzMSsrKSB7CisJCQlmb3IgKEFkZHJlc3MyID0gMDsgQWRkcmVzczIgPCA4OyBBZGRyZXNzMisrKSB7CisJCQkJaWYgKEJsb2NrID09IDAgJiYKKwkJCQkgICAgKEFkZHJlc3MxICogOCArIEFkZHJlc3MyKSA9PSA2KSB7CisJCQkJCURCR19QUklOVCgiICBJU1IgICAgLCAiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlEQkdfUFJJTlQoIjB4JTA4eCwgIiwKKwkJCQkJCSAgcmVhZGwoQmlnRGV2aWNlUG9pbnRlcisrKSk7CisJCQkJfQorCQkJfQorCQkJREJHX1BSSU5UKCJcbiIpOworCQl9CisJCURCR19QUklOVCgiXG4iKTsKKwl9Cit9CisKKy8qKgorICogRHVtcERldmljZVJlZworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogRHVtcHMgdGhlIGZpcnN0IDY0IHJlZ3Mgb2YgZWFjaCBibG9jayBvZiB0aGUgZXQtMTMxMCAoZWFjaCBibG9jayBpcworICogbWFwcGVkIHRvIGEgbmV3IHBhZ2UsIGVhY2ggcGFnZSBpcyA0MDk2IGJ5dGVzKS4KKyAqLwordm9pZCBEdW1wRGV2aWNlUmVnKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdWludDMyX3QgQWRkcmVzczEsIEFkZHJlc3MyOworCXVpbnQzMl90IEJsb2NrOworCXVpbnQzMl90IF9faW9tZW0gKkJpZ0RldmljZVBvaW50ZXIgPQorCQkodWludDMyX3QgX19pb21lbSAqKSBwQWRhcHRlci0+Q1NSQWRkcmVzczsKKwl1aW50MzJfdCBfX2lvbWVtICpQb2ludGVyOworCWNvbnN0IGNoYXIgKkJsb2NrTmFtZXNbTlVNX0JMT0NLU10gPSB7CisJCSJHbG9iYWwiLCAiVHggRE1BIiwgIlJ4IERNQSIsICJUeCBNQUMiLAorCQkiUnggTUFDIiwgIk1BQyIsICJNQUMgU3RhdCIsICJNTUMiCisJfTsKKworCS8qIE91dHB1dCB0aGUgZGVidWcgY291bnRlcnMgdG8gdGhlIGRlYnVnIHRlcm1pbmFsICovCisJaWYgKERCR19GTEFHUyhldDEzMXhfZGJnaW5mbykgJiBkYmdMdmwpIHsKKwkJZm9yIChCbG9jayA9IDA7IEJsb2NrIDwgTlVNX0JMT0NLUzsgQmxvY2srKykgeworCQkJREJHX1BSSU5UKCIlcyBibG9ja1xuIiwgQmxvY2tOYW1lc1tCbG9ja10pOworCQkJUG9pbnRlciA9IEJpZ0RldmljZVBvaW50ZXIgKyAoQmxvY2sgKiAxMDI0KTsKKworCQkJZm9yIChBZGRyZXNzMSA9IDA7IEFkZHJlc3MxIDwgODsgQWRkcmVzczErKykgeworCQkJCWZvciAoQWRkcmVzczIgPSAwOyBBZGRyZXNzMiA8IDg7IEFkZHJlc3MyKyspIHsKKwkJCQkJREJHX1BSSU5UKCIweCUwOHgsICIsCisJCQkJCQkgIHJlYWRsKFBvaW50ZXIrKykpOworCQkJCX0KKwkJCQlEQkdfUFJJTlQoIlxuIik7CisJCQl9CisJCQlEQkdfUFJJTlQoIlxuIik7CisJCX0KKwl9Cit9CisKKyNlbmRpZiAvLyBDT05GSUdfRVQxMzFYX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWI2MDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfZGVidWcuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHVzZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgIG91dHB1dHRpbmcgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHN5c3RlbSBsb2dnaW5nIGZhY2lsaXR5CisgKiAgICAgICAgICAgICAgICAgIChrc3lzbG9nZCkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9EQkdfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0RCR19IX18KKworLyogRGVmaW5lIE1hc2tzIGZvciBkZWJ1Z2dpbmcgdHlwZXMvbGV2ZWxzICovCisjZGVmaW5lIERCR19FUlJPUl9PTiAgICAgICAgMHgwMDAwMDAwMUwKKyNkZWZpbmUgREJHX1dBUk5JTkdfT04gICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBEQkdfTk9USUNFX09OICAgICAgIDB4MDAwMDAwMDRMCisjZGVmaW5lIERCR19UUkFDRV9PTiAgICAgICAgMHgwMDAwMDAwOEwKKyNkZWZpbmUgREJHX1ZFUkJPU0VfT04gICAgICAweDAwMDAwMDEwTAorI2RlZmluZSBEQkdfUEFSQU1fT04gICAgICAgIDB4MDAwMDAwMjBMCisjZGVmaW5lIERCR19CUkVBS19PTiAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgREJHX1JYX09OICAgICAgICAgICAweDAwMDAwMTAwTAorI2RlZmluZSBEQkdfVFhfT04gICAgICAgICAgIDB4MDAwMDAyMDBMCisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisKKy8qCisgKiBTZXQgdGhlIGxldmVsIG9mIGRlYnVnZ2luZyBpZiBub3QgZG9uZSB3aXRoIGEgcHJlcHJvY2Vzc29yIGRlZmluZS4gU2VlCisgKiBldDEzMXhfbWFpbi5jLCBmdW5jdGlvbiBldDEzMXhfaW5pdF9tb2R1bGUoKSBmb3IgaG93IHRoZSBkZWJ1ZyBsZXZlbAorICogdHJhbnNsYXRlcyBpbnRvIHRoZSB0eXBlcyBvZiBtZXNzYWdlcyBkaXNwbGF5ZWQuCisgKi8KKyNpZm5kZWYgREJHX0xWTAorI2RlZmluZSBEQkdfTFZMCTMKKyNlbmRpZiAvKiBEQkdfTFZMICovCisKKyNkZWZpbmUgREJHX0RFRkFVTFRTCQkoREJHX0VSUk9SX09OIHwgREJHX1dBUk5JTkdfT04gfCBEQkdfQlJFQUtfT04gKQorCisjZGVmaW5lIERCR19GTEFHUyhBKQkJKEEpLT5kYmdGbGFncworI2RlZmluZSBEQkdfTkFNRShBKQkJKEEpLT5kYmdOYW1lCisjZGVmaW5lIERCR19MRVZFTChBKQkJKEEpLT5kYmdMZXZlbAorCisjaWZuZGVmIERCR19QUklOVAorI2RlZmluZSBEQkdfUFJJTlQoUy4uLikJCXByaW50ayhLRVJOX0RFQlVHIFMpCisjZW5kaWYgLyogREJHX1BSSU5UICovCisKKyNpZm5kZWYgREJHX1BSSU5UQworI2RlZmluZSBEQkdfUFJJTlRDKFMuLi4pCXByaW50ayhTKQorI2VuZGlmIC8qIERCR19QUklOVEMgKi8KKworI2lmbmRlZiBEQkdfVFJBUAorI2RlZmluZSBEQkdfVFJBUAkJe30JLyogQlVHKCkgKi8KKyNlbmRpZiAvKiBEQkdfVFJBUCAqLworCisjZGVmaW5lIF9FTlRFUl9TVFIJIj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4iCisjZGVmaW5lIF9MRUFWRV9TVFIJIjw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwiCisKKyNkZWZpbmUgX0RCR19FTlRFUihBKQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JS4qczolc1xuIiwgREJHX05BTUUoQSksCVwKKwkJCQkrK0RCR19MRVZFTChBKSwgX0VOVEVSX1NUUiwgX19mdW5jX18pCisjZGVmaW5lIF9EQkdfTEVBVkUoQSkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiUuKnM6JXNcbiIsIERCR19OQU1FKEEpLAlcCisJCQkJREJHX0xFVkVMKEEpLS0sIF9MRUFWRV9TVFIsIF9fZnVuY19fKQorCisjZGVmaW5lIERCR19FTlRFUihBKSAgICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19FTlRFUihBKTt9CisKKyNkZWZpbmUgREJHX0xFQVZFKEEpICAgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UUkFDRV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0xFQVZFKEEpO30KKworI2RlZmluZSBEQkdfUEFSQU0oQSxOLEYsUy4uLikgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19QQVJBTV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSSU5UKCIgICVzIC0tICJGIlxuIixOLFMpO30KKworI2RlZmluZSBEQkdfRVJST1IoQSxTLi4uKQlcCisJaWYgKERCR19GTEFHUyhBKSAmIERCR19FUlJPUl9PTikgewkJCQlcCisJCURCR19QUklOVCgiJXM6RVJST1I6JXMgIixEQkdfTkFNRShBKSwgX19mdW5jX18pOwlcCisJCURCR19QUklOVEMoUyk7CQkJCQkJXAorCQlEQkdfVFJBUDsJCQkJCQlcCisJfQorCisjZGVmaW5lIERCR19XQVJOSU5HKEEsUy4uLikge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfV0FSTklOR19PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKCIlczpXQVJOSU5HOiVzICIsREJHX05BTUUoQSksX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfTk9USUNFKEEsUy4uLikgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX05PVElDRV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKCIlczpOT1RJQ0U6JXMgIixEQkdfTkFNRShBKSxfX2Z1bmNfXyk7REJHX1BSSU5UQyhTKTt9fQorCisjZGVmaW5lIERCR19UUkFDRShBLFMuLi4pICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6VFJBQ0U6JXMgIixEQkdfTkFNRShBKSwgX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfVkVSQk9TRShBLFMuLi4pIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1ZFUkJPU0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6VkVSQk9TRTolcyAiLERCR19OQU1FKEEpLCBfX2Z1bmNfXyk7REJHX1BSSU5UQyhTKTt9fQorCisjZGVmaW5lIERCR19SWChBLFMuLi4pICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUlhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVChTKTt9fQorCisjZGVmaW5lIERCR19SWF9FTlRFUihBKSAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUlhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19FTlRFUihBKTt9CisKKyNkZWZpbmUgREJHX1JYX0xFQVZFKEEpICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19SWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0xFQVZFKEEpO30KKworI2RlZmluZSBEQkdfVFgoQSxTLi4uKSAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoUyk7fX0KKworI2RlZmluZSBEQkdfVFhfRU5URVIoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfRU5URVIoQSk7fQorCisjZGVmaW5lIERCR19UWF9MRUFWRShBKSAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19MRUFWRShBKTt9CisKKyNkZWZpbmUgREJHX0FTU0VSVChDKSAgICAgICB7aWYgKCEoQykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiQVNTRVJUKCVzKSAtLSAlcyMlZCAoJXMpXG4iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjQyxfX0ZJTEVfXyxfX0xJTkVfXyxfX2Z1bmNfXyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1RSQVA7fX0KKyNkZWZpbmUgU1RBVElDCisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICpkYmdOYW1lOworCWludCBkYmdMZXZlbDsKKwl1bnNpZ25lZCBsb25nIGRiZ0ZsYWdzOworfSBkYmdfaW5mb190OworCisjZWxzZSAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKyNkZWZpbmUgREJHX0RFRk4KKyNkZWZpbmUgREJHX1RSQVAKKyNkZWZpbmUgREJHX1BSSU5UKFMuLi4pCisjZGVmaW5lIERCR19FTlRFUihBKQorI2RlZmluZSBEQkdfTEVBVkUoQSkKKyNkZWZpbmUgREJHX1BBUkFNKEEsTixGLFMuLi4pCisjZGVmaW5lIERCR19FUlJPUihBLFMuLi4pCisjZGVmaW5lIERCR19XQVJOSU5HKEEsUy4uLikKKyNkZWZpbmUgREJHX05PVElDRShBLFMuLi4pCisjZGVmaW5lIERCR19UUkFDRShBLFMuLi4pCisjZGVmaW5lIERCR19WRVJCT1NFKEEsUy4uLikKKyNkZWZpbmUgREJHX1JYKEEsUy4uLikKKyNkZWZpbmUgREJHX1JYX0VOVEVSKEEpCisjZGVmaW5lIERCR19SWF9MRUFWRShBKQorI2RlZmluZSBEQkdfVFgoQSxTLi4uKQorI2RlZmluZSBEQkdfVFhfRU5URVIoQSkKKyNkZWZpbmUgREJHX1RYX0xFQVZFKEEpCisjZGVmaW5lIERCR19BU1NFUlQoQykKKyNkZWZpbmUgU1RBVElDIHN0YXRpYworCisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3ZvaWQgRHVtcFR4UXVldWVDb250ZW50cyhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBEdW1wRGV2aWNlQmxvY2soaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgIHVuc2lnbmVkIGludCBCbG9jayk7Cit2b2lkIER1bXBEZXZpY2VSZWcoaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX0RCR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODZjYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVmcy5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9kZWZzLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB0byBhc3Npc3Qgd2l0aCBPUworICogICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9ERUZTX0hfXworI2RlZmluZSBfX0VUMTMxWF9ERUZTX0hfXworCisvKiBQYWNrZXQgYW5kIGhlYWRlciBzaXplcyAqLworI2RlZmluZSBOSUNfTUlOX1BBQ0tFVF9TSVpFCTYwCisjZGVmaW5lIE5JQ19IRUFERVJfU0laRQkJRVRIX0hMRU4JLyogMTQgKi8KKworLyogTXVsdGljYXN0IGxpc3Qgc2l6ZSAqLworI2RlZmluZSBOSUNfTUFYX01DQVNUX0xJU1QJMTI4CisKKy8qIFN1cHBvcnRlZCBGaWx0ZXJzICovCisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJMHgwMDAxCisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCTB4MDAwMgorI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfQlJPQURDQVNUCQkweDAwMDQKKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCQkweDAwMDgKKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMHgwMDEwCisKKy8qIFR4IFRpbWVvdXQgKi8KKyNkZWZpbmUgRVQxMzFYX1RYX1RJTUVPVVQJKDEgKiBIWikKKyNkZWZpbmUgTklDX1NFTkRfSEFOR19USFJFU0hPTEQJMAorCisvKiBNUF9UQ0IgZmxhZ3MgKi8KKyNkZWZpbmUgZk1QX0RFU1RfTVVMVEkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZNUF9ERVNUX0JST0FECQkJMHgwMDAwMDAwMgorCisvKiBNUF9BREFQVEVSIGZsYWdzICovCisjZGVmaW5lIGZNUF9BREFQVEVSX1JFQ1ZfTE9PS0FTSURFCTB4MDAwMDAwMDQKKyNkZWZpbmUgZk1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRQkweDAwMDAwMDA4CisjZGVmaW5lIGZNUF9BREFQVEVSX1NFQ09OREFSWQkJMHgwMDAwMDAxMAorCisvKiBNUF9TSEFSRUQgZmxhZ3MgKi8KKyNkZWZpbmUgZk1QX0FEQVBURVJfU0hVVERPV04JCTB4MDAxMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIJCTB4MDAyMDAwMDAKKworI2RlZmluZSBmTVBfQURBUFRFUl9OT05fUkVDT1ZFUl9FUlJPUgkweDAwODAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTCTB4MDEwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfTk9fQ0FCTEUJCTB4MDIwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfSEFSRFdBUkVfRVJST1IJMHgwNDAwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MJMHgwODAwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTCTB4MTAwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04JMHgyMDAwMDAwMAorCisjZGVmaW5lIGZNUF9BREFQVEVSX0ZBSUxfU0VORF9NQVNLCTB4M2ZmMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfTk9UX1JFQURZX01BU0sJMHgzZmYwMDAwMAorCisvKiBTb21lIG9mZnNldHMgaW4gUENJIGNvbmZpZyBzcGFjZSB0aGF0IGFyZSBhY3R1YWxseSB1c2VkLiAqLworI2RlZmluZSBFVDEzMTBfUENJX1BNX0NBUEFCSUxJVFkJMHg0MAorI2RlZmluZSBFVDEzMTBfUENJX1BNX0NTUgkJMHg0NAorI2RlZmluZSBFVDEzMTBfUENJX01BWF9QWUxECQkweDRDCisjZGVmaW5lIEVUMTMxMF9QQ0lfREVWX0NUUkwJCTB4NTAKKyNkZWZpbmUgRVQxMzEwX1BDSV9ERVZfU1RBVAkJMHg1MgorI2RlZmluZSBFVDEzMTBfTk1JX0RJU0FCTEUJCTB4NjEKKyNkZWZpbmUgRVQxMzEwX1BDSV9NQUNfQUREUkVTUwkJMHhBNAorI2RlZmluZSBFVDEzMTBfUENJX0VFUFJPTV9TVEFUVVMJMHhCMgorI2RlZmluZSBFVDEzMTBfUENJX1BIWV9JTkRFWF9SRUcJMHhCNAorI2RlZmluZSBFVDEzMTBfUENJX0FDS19OQUNLCQkweEMwCisjZGVmaW5lIEVUMTMxMF9QQ0lfUkVQTEFZCQkweEMyCisjZGVmaW5lIEVUMTMxMF9QQ0lfTDBMMUxBVEVOQ1kJCTB4Q0YKKyNkZWZpbmUgRVQxMzEwX1BDSV9TRUxfUEhZX0NUUkwJCTB4RTQKKyNkZWZpbmUgRVQxMzEwX1BDSV9BRFZBTkNFRF9FUlIJCTB4MTAwCisKKy8qIFBDSSBWZW5kb3IvUHJvZHVjdCBJRHMgKi8KKyNkZWZpbmUgRVQxMzFYX1BDSV9WRU5ET1JfSUQJCTB4MTFDMQkvLyBBZ2VyZSBTeXN0ZW1zCisjZGVmaW5lIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0dJRwkweEVEMDAJLy8gRVQxMzEwIDEwMDAgQmFzZS1UCisjZGVmaW5lIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QJMHhFRDAxCS8vIEVUMTMxMCAxMDAgIEJhc2UtVAorCisvKiBEZWZpbmUgb3JkZXIgb2YgbWFnbml0dWRlIGNvbnZlcnRlciAqLworI2RlZmluZSBOQU5PX0lOX0FfTUlDUk8JMTAwMAorCisjZW5kaWYgLyogX19FVDEzMVhfREVGU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzZmMTcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jCkBAIC0wLDAgKzEsMTA0NiBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfaW5pdHBjaS5jIC0gUm91dGluZXMgYW5kIGRhdGEgdXNlZCB0byByZWdpc3RlciB0aGUgZHJpdmVyIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgUENJIChhbmQgUENJIEV4cHJlc3MpIHN1YnN5c3RlbSwgYXMgd2VsbCBhcyBiYXNpYyBkcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICBpbml0IGFuZCBzdGFydHVwLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKKyNpbmNsdWRlICJldDEzMXhfY29uZmlnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisjaW5jbHVkZSAiZXQxMzEwX2VlcHJvbS5oIgorCisKK2ludCBfX2RldmluaXQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKK3ZvaWQgX19kZXZleGl0IGV0MTMxeF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworCisvKiBNb2RpbmZvIHBhcmFtZXRlcnMgKGZpbGxlZCBvdXQgdXNpbmcgZGVmaW5lcyBmcm9tIGV0MTMxeF92ZXJzaW9uLmgpICovCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9JTkZPKTsKK01PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKKworLyogTW9kdWxlIFBhcmFtZXRlcnMgYW5kIHJlbGF0ZWQgZGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitzdGF0aWMgdTMyIGV0MTMxeF9kZWJ1Z19sZXZlbCA9IERCR19MVkw7CitzdGF0aWMgdTMyIGV0MTMxeF9kZWJ1Z19mbGFncyA9IERCR19ERUZBVUxUUzsKKworLyoKK2V0MTMxeF9kZWJ1Z19sZXZlbCA6CisgTGV2ZWwgb2YgZGVidWdnaW5nIGRlc2lyZWQgKDAtNykKKyAgIDcgOiBEQkdfUlhfT04gfCBEQkdfVFhfT04KKyAgIDYgOiBEQkdfUEFSQU1fT04KKyAgIDUgOiBEQkdfVkVSQk9TRV9PTgorICAgNCA6IERCR19UUkFDRV9PTgorICAgMyA6IERCR19OT1RJQ0VfT04KKyAgIDIgOiBubyBkZWJ1ZyBpbmZvCisgICAxIDogbm8gZGVidWcgaW5mbworICAgMCA6IG5vIGRlYnVnIGluZm8KKyovCisKK21vZHVsZV9wYXJhbShldDEzMXhfZGVidWdfbGV2ZWwsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKGV0MTMxeF9kZWJ1Z19mbGFncywgdWludCwgMCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZXQxMzF4X2RlYnVnX2xldmVsLCAiTGV2ZWwgb2YgZGVidWdnaW5nIGRlc2lyZWQgKDAtNykiKTsKKworc3RhdGljIGRiZ19pbmZvX3QgZXQxMzF4X2luZm8gPSB7IERSSVZFUl9OQU1FX0VYVCwgMCwgMCB9OworZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm8gPSAmZXQxMzF4X2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZXQxMzF4X3BjaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe0VUMTMxWF9QQ0lfVkVORE9SX0lELCBFVDEzMVhfUENJX0RFVklDRV9JRF9HSUcsIFBDSV9BTllfSUQsCisJIFBDSV9BTllfSUQsIDAsIDAsIDBVTH0sCisJe0VUMTMxWF9QQ0lfVkVORE9SX0lELCBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNULCBQQ0lfQU5ZX0lELAorCSBQQ0lfQU5ZX0lELCAwLCAwLCAwVUx9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBldDEzMXhfcGNpX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGV0MTMxeF9kcml2ZXIgPSB7CisgICAgICAubmFtZQk9IERSSVZFUl9OQU1FLAorICAgICAgLmlkX3RhYmxlCT0gZXQxMzF4X3BjaV90YWJsZSwKKyAgICAgIC5wcm9iZQk9IGV0MTMxeF9wY2lfc2V0dXAsCisgICAgICAucmVtb3ZlCT0gX19kZXZleGl0X3AoZXQxMzF4X3BjaV9yZW1vdmUpLAorICAgICAgLnN1c3BlbmQJPSBOVUxMLAkJLy9ldDEzMXhfcGNpX3N1c3BlbmQsCisgICAgICAucmVzdW1lCT0gTlVMTCwJCS8vZXQxMzF4X3BjaV9yZXN1bWUsCit9OworCisKKy8qKgorICogZXQxMzF4X2luaXRfbW9kdWxlIC0gVGhlICJtYWluIiBlbnRyeSBwb2ludCBjYWxsZWQgb24gZHJpdmVyIGluaXRpYWxpemF0aW9uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXN1bHQ7CisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJLyogU2V0IHRoZSBsZXZlbCBvZiBkZWJ1ZyBtZXNzYWdlcyBkaXNwbGF5ZWQgdXNpbmcgdGhlIG1vZHVsZQorCSAqIHBhcmFtZXRlcgorCSAqLworCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyA9IGV0MTMxeF9kZWJ1Z19mbGFnczsKKworCXN3aXRjaCAoZXQxMzF4X2RlYnVnX2xldmVsKSB7CisJY2FzZSA3OgorCQlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgfD0gKERCR19SWF9PTiB8IERCR19UWF9PTik7CisKKwljYXNlIDY6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSBEQkdfUEFSQU1fT047CisKKwljYXNlIDU6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSBEQkdfVkVSQk9TRV9PTjsKKworCWNhc2UgNDoKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19UUkFDRV9PTjsKKworCWNhc2UgMzoKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19OT1RJQ0VfT047CisKKwljYXNlIDI6CisJY2FzZSAxOgorCWNhc2UgMDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKwlEQkdfUFJJTlQoIiVzXG4iLCBEUklWRVJfSU5GTyk7CisKKwlyZXN1bHQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZldDEzMXhfZHJpdmVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBldDEzMXhfY2xlYW51cF9tb2R1bGUgLSBUaGUgZW50cnkgcG9pbnQgY2FsbGVkIG9uIGRyaXZlciBjbGVhbnVwCisgKi8KK3ZvaWQgZXQxMzF4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZXQxMzF4X2RyaXZlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKgorICogVGhlc2UgbWFjcm9zIG1hcCB0aGUgZHJpdmVyLXNwZWNpZmljIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCkKKyAqIHJvdXRpbmVzIHNvIHRoZXkgY2FuIGJlIGNhbGxlZCBieSB0aGUga2VybmVsLgorICovCittb2R1bGVfaW5pdChldDEzMXhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZXQxMzF4X2NsZWFudXBfbW9kdWxlKTsKKworCisvKioKKyAqIGV0MTMxeF9maW5kX2FkYXB0ZXIgLSBGaW5kIHRoZSBhZGFwdGVyIGFuZCBnZXQgYWxsIHRoZSBhc3NpZ25lZCByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9maW5kX2FkYXB0ZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcmVzdWx0OworCXVpbnQ4X3QgZWVwcm9tU3RhdDsKKwl1aW50OF90IG1heFBheWxvYWQgPSAwOworCXVpbnQ4X3QgcmVhZF9zaXplX3JlZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBBbGxvdyBkaXNhYmxpbmcgb2YgTm9uLU1hc2thYmxlIEludGVycnVwdHMgaW4gSS9PIHNwYWNlLCB0bworCSAqIHN1cHBvcnQgdmFsaWRhdGlvbi4KKwkgKi8KKwlpZiAoYWRhcHRlci0+UmVnaXN0cnlOTUlEaXNhYmxlKSB7CisJCXVpbnQ4X3QgUmVnaXN0ZXJWYWw7CisKKwkJUmVnaXN0ZXJWYWwgPSBpbmIoRVQxMzEwX05NSV9ESVNBQkxFKTsKKwkJUmVnaXN0ZXJWYWwgJj0gMHhmMzsKKworCQlpZiAoYWRhcHRlci0+UmVnaXN0cnlOTUlEaXNhYmxlID09IDIpIHsKKwkJCVJlZ2lzdGVyVmFsIHw9IDB4YzsKKwkJfQorCisJCW91dGIoRVQxMzEwX05NSV9ESVNBQkxFLCBSZWdpc3RlclZhbCk7CisJfQorCisJLyogV2UgZmlyc3QgbmVlZCB0byBjaGVjayB0aGUgRUVQUk9NIFN0YXR1cyBjb2RlIGxvY2F0ZWQgYXQgb2Zmc2V0CisJICogMHhCMiBvZiBjb25maWcgc3BhY2UKKwkgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFVDEzMTBfUENJX0VFUFJPTV9TVEFUVVMsCisJCQkJICAgICAgJmVlcHJvbVN0YXQpOworCisJLyogVEhJUyBJUyBBIFdPUktBUk9VTkQ6CisgCSAqIEkgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdHdpY2UgdG8gZ2V0IG15IGNhcmQgaW4gYQorCSAqIExHIE0xIEV4cHJlc3MgRHVhbCBydW5uaW5nLiBJIHRyaWVkIGFsc28gYSBtc2xlZXAgYmVmb3JlIHRoaXMKKwkgKiBmdW5jdGlvbiwgYmVjYXVzZSBJIHRob3VndGggdGhlcmUgY291bGQgYmUgc29tZSB0aW1lIGNvbmRpZGlvbnMKKwkgKiBidXQgaXQgZGlkbid0IHdvcmsuIENhbGwgdGhlIHdob2xlIGZ1bmN0aW9uIHR3aWNlIGFsc28gd29yay4KKwkgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFVDEzMTBfUENJX0VFUFJPTV9TVEFUVVMsCisJCQkJICAgICAgJmVlcHJvbVN0YXQpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yICIKKwkJCSAgIkVFUFJPTSBTdGF0dXNcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaWYgdGhlIGVycm9yKHMpIHdlIGNhcmUgYWJvdXQgYXJlIHByZXNlbnQuICBJZiB0aGV5IGFyZQorCSAqIHByZXNlbnQsIHdlIG5lZWQgdG8gZmFpbC4KKwkgKi8KKwlpZiAoZWVwcm9tU3RhdCAmIDB4NEMpIHsKKwkJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELAorCQkJCQkgICAgICAmYWRhcHRlci0+UmV2aXNpb25JRCk7CisJCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgIgorCQkJCSAgIlJldmlzaW9uIElEXG4iKTsKKwkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5SZXZpc2lvbklEID09IDB4MDEpIHsKKwkJCWludDMyX3Qgbkxvb3A7CisJCQl1aW50OF90IHVjVGVtcFs0XSA9IHsgMHhGRSwgMHgxMywgMHgxMCwgMHhGRiB9OworCisJCQkvKiBSZS13cml0ZSB0aGUgZmlyc3QgNCBieXRlcyBpZiB3ZSBoYXZlIGFuIGVlcHJvbQorCQkJICogcHJlc2VudCBhbmQgdGhlIHJldmlzaW9uIGlkIGlzIDEsIHRoaXMgZml4ZXMgdGhlCisJCQkgKiBjb3JydXB0aW9uIHNlZW4gd2l0aCAxMzEwIEIgU2lsaWNvbgorCQkJICovCisJCQlmb3IgKG5Mb29wID0gMDsgbkxvb3AgPCAzOyBuTG9vcCsrKSB7CisJCQkJRWVwcm9tV3JpdGVCeXRlKGFkYXB0ZXIsIG5Mb29wLCB1Y1RlbXBbbkxvb3BdLAorCQkJCQkJMCwgU0lOR0xFX0JZVEUpOworCQkJfQorCQl9CisKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiRmF0YWwgRUVQUk9NIFN0YXR1cyBFcnJvciAtIDB4JTA0eFxuIiwgZWVwcm9tU3RhdCk7CisKKwkJLyogVGhpcyBlcnJvciBjb3VsZCBtZWFuIHRoYXQgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlCisJCSAqIGVlcHJvbSBvciB0aGF0IHRoZSBlZXByb20gZG9lc24ndCBleGlzdC4gIFdlIHdpbGwgdHJlYXQKKwkJICogZWFjaCBjYXNlIHRoZSBzYW1lIGFuZCBub3QgdHJ5IHRvIGdhdGhlciBhZGRpdGlvbmFsCisJCSAqIGluZm9ybWF0aW9uIHRoYXQgbm9ybWFsbHkgd291bGQgY29tZSBmcm9tIHRoZSBlZXByb20sIGxpa2UKKwkJICogTUFDIEFkZHJlc3MKKwkJICovCisJCWFkYXB0ZXItPmJFZXByb21QcmVzZW50ID0gZmFsc2U7CisKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiRUVQUk9NIFN0YXR1cyBDb2RlIC0gMHglMDR4XG4iLAorCQkJICBlZXByb21TdGF0KTsKKwkJYWRhcHRlci0+YkVlcHJvbVByZXNlbnQgPSB0cnVlOworCX0KKworCS8qIFJlYWQgdGhlIEVFUFJPTSBmb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIExFRCBiZWhhdmlvci4gUmVmZXIgdG8KKwkgKiBFVDEzMTBfcGh5LmMsIGV0MTMxeF94Y3ZyX2luaXQoKSwgZm9yIGl0cyB1c2UuCisJICovCisJRWVwcm9tUmVhZEJ5dGUoYWRhcHRlciwgMHg3MCwgJmFkYXB0ZXItPmVlcHJvbURhdGFbMF0sIDAsIFNJTkdMRV9CWVRFKTsKKwlFZXByb21SZWFkQnl0ZShhZGFwdGVyLCAweDcxLCAmYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSwgMCwgU0lOR0xFX0JZVEUpOworCisJaWYgKGFkYXB0ZXItPmVlcHJvbURhdGFbMF0gIT0gMHhjZCkgeworCQlhZGFwdGVyLT5lZXByb21EYXRhWzFdID0gMHgwMDsJLy8gRGlzYWJsZSBhbGwgb3B0aW9uYWwgZmVhdHVyZXMKKwl9CisKKwkvKiBMZXQncyBzZXQgdXAgdGhlIFBPUlQgTE9HSUMgUmVnaXN0ZXIuICBGaXJzdCB3ZSBuZWVkIHRvIGtub3cgd2hhdAorCSAqIHRoZSBtYXhfcGF5bG9hZF9zaXplIGlzCisJICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRVQxMzEwX1BDSV9NQVhfUFlMRCwgJm1heFBheWxvYWQpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yICIKKwkJCSAgIk1heCBQYXlsb2FkIFNpemVcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBBY2svTmFrIGxhdGVuY3kgYW5kIHJlcGxheSB0aW1lcnMgKi8KKwltYXhQYXlsb2FkICY9IDB4MDc7CS8vIE9ubHkgdGhlIGxvd2VyIDMgYml0cyBhcmUgdmFsaWQKKworCWlmIChtYXhQYXlsb2FkIDwgMikgeworCQljb25zdCB1aW50MTZfdCBBY2tOYWtbMl0gPSB7IDB4NzYsIDB4RDAgfTsKKwkJY29uc3QgdWludDE2X3QgUmVwbGF5WzJdID0geyAweDFFMCwgMHgyRUQgfTsKKworCQlyZXN1bHQgPSBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgRVQxMzEwX1BDSV9BQ0tfTkFDSywKKwkJCQkJICAgICAgIEFja05ha1ttYXhQYXlsb2FkXSk7CisJCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGQgbm90IHdyaXRlIFBDSSBjb25maWcgc3BhY2UgIgorCQkJCSAgImZvciBBQ0svTkFLXG4iKTsKKwkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBFVDEzMTBfUENJX1JFUExBWSwKKwkJCQkJICAgICAgIFJlcGxheVttYXhQYXlsb2FkXSk7CisJCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGQgbm90IHdyaXRlIFBDSSBjb25maWcgc3BhY2UgIgorCQkJCSAgImZvciBSZXBsYXkgVGltZXJcbiIpOworCQkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogbDBzIGFuZCBsMSBsYXRlbmN5IHRpbWVycy4gIFdlIGFyZSB1c2luZyBkZWZhdWx0IHZhbHVlcy4KKwkgKiBSZXByZXNlbnRpbmcgMDAxIGZvciBMMHMgYW5kIDAxMCBmb3IgTDEKKwkgKi8KKwlyZXN1bHQgPSBwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgRVQxMzEwX1BDSV9MMEwxTEFURU5DWSwgMHgxMSk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ291bGQgbm90IHdyaXRlIFBDSSBjb25maWcgc3BhY2UgZm9yICIKKwkJCSAgIkxhdGVuY3kgVGltZXJzXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogQ2hhbmdlIHRoZSBtYXggcmVhZCBzaXplIHRvIDJrICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg1MSwgJnJlYWRfc2l6ZV9yZWcpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yIE1heCByZWFkIHNpemVcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZWFkX3NpemVfcmVnICY9IDB4OGY7CisJcmVhZF9zaXplX3JlZyB8PSAweDQwOworCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NTEsIHJlYWRfc2l6ZV9yZWcpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNvdWxkIG5vdCB3cml0ZSBQQ0kgY29uZmlnIHNwYWNlIGZvciBNYXggcmVhZCBzaXplXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogUENJIEV4cHJlc3MgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgMHg0OC0weDVCIChEZXZpY2UgQ29udHJvbCkgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFVDEzMTBfUENJX0RFVl9DVFJMLAorCQkJCSAgICAgICZhZGFwdGVyLT5QY2lYRGV2Q3RsKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBQQ0kgRXhwcmVzcyBEZXYgQ3RsXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogR2V0IE1BQyBhZGRyZXNzIGZyb20gY29uZmlnIHNwYWNlIGlmIGFuIGVlcHJvbSBleGlzdHMsIG90aGVyd2lzZQorCSAqIHRoZSBNQUMgYWRkcmVzcyB0aGVyZSB3aWxsIG5vdCBiZSB2YWxpZAorCSAqLworCWlmIChhZGFwdGVyLT5iRWVwcm9tUHJlc2VudCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgeworCQkJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoCisJCQkJCXBkZXYsIEVUMTMxMF9QQ0lfTUFDX0FERFJFU1MgKyBpLAorCQkJCQlhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzICsgaSk7CisJCQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkJICAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgTUFDIGFkZHJlc3NcbiIpOworCQkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF9lcnJvcl90aW1lcl9oYW5kbGVyCisgKiBAZGF0YTogdGltZXItc3BlY2lmaWMgdmFyaWFibGU7IGhlcmUgYSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFRoZSByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBlcnJvciB0aW1lciBleHBpcmVzLCB0byB0cmFjayB0aGUgbnVtYmVyIG9mCisgKiByZWN1cnJpbmcgZXJyb3JzLgorICovCit2b2lkIGV0MTMxeF9lcnJvcl90aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0gKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqKSBkYXRhOworCVBNX0NTUl90IHBtX2NzcjsKKworCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMCkgeworCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5TUFDU3RhdCkgeworCQkJVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhwQWRhcHRlcik7CisJCX0KKwl9IGVsc2UgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTm8gaW50ZXJydXB0cywgaW4gUEhZIGNvbWEsIHBtX2NzciA9IDB4JXhcbiIsCisJCQkgICAgcG1fY3NyLnZhbHVlKTsKKwl9CisKKwlpZiAoIXBBZGFwdGVyLT5CbXNyLmJpdHMubGlua19zdGF0dXMgJiYKKwkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5UGh5Q29tYSAmJgorCSAgICBwQWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QgPCAxMSkgeworCQlwQWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QrKzsKKwl9CisKKwlpZiAocEFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290ID09IDEwKSB7CisJCWlmICghcEFkYXB0ZXItPkJtc3IuYml0cy5saW5rX3N0YXR1cworCQkgICAgJiYgcEFkYXB0ZXItPlJlZ2lzdHJ5UGh5Q29tYSkgeworCQkJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJCQkvLyBOT1RFIC0gVGhpcyB3YXMgb3JpZ2luYWxseSBhICdzeW5jIHdpdGggaW50ZXJydXB0Jy4gSG93CisJCQkJLy8gICAgICAgIHRvIGRvIHRoYXQgdW5kZXIgTGludXg/CisJCQkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHBBZGFwdGVyKTsKKwkJCQlFbmFibGVQaHlDb21hKHBBZGFwdGVyKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFRoaXMgaXMgYSBwZXJpb2RpYyB0aW1lciwgc28gcmVzY2hlZHVsZSAqLworCW1vZF90aW1lcigmcEFkYXB0ZXItPkVycm9yVGltZXIsIGppZmZpZXMgKworCQkgIFRYX0VSUk9SX1BFUklPRCAqIEhaIC8gMTAwMCk7Cit9CisKKy8qKgorICogZXQxMzF4X2xpbmtfZGV0ZWN0aW9uX2hhbmRsZXIKKyAqCisgKiBUaW1lciBmdW5jdGlvbiBmb3IgbGluayB1cCBhdCBkcml2ZXIgbG9hZCB0aW1lCisgKi8KK3ZvaWQgZXQxMzF4X2xpbmtfZGV0ZWN0aW9uX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPSAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwkvKiBMZXQgZXZlcnlvbmUga25vdyB0aGF0IHdlIGhhdmUgcnVuICovCisJcEFkYXB0ZXItPmJMaW5rVGltZXJBY3RpdmUgPSBmYWxzZTsKKworCWlmIChwQWRhcHRlci0+TWVkaWFTdGF0ZSA9PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCQlwQWRhcHRlci0+TWVkaWFTdGF0ZSA9IE5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNUOworCQlNUF9DTEVBUl9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYocEFkYXB0ZXItPm5ldGRldik7CisKKwkJcEFkYXB0ZXItPmJTZXRQZW5kaW5nID0gZmFsc2U7CisJfQorfQorCisvKioKKyAqIGV0MTMxeF9hZGFwdGVyX3NldHVwIC0gU2V0IHRoZSBhZGFwdGVyIHVwIGFzIHBlciBjYXNzaW5pKyBkb2N1bWVudGF0aW9uCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfYWRhcHRlcl9zZXR1cChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgSkFHQ29yZSAqLworCUNvbmZpZ0dsb2JhbFJlZ3MocEFkYXB0ZXIpOworCisJQ29uZmlnTUFDUmVnczEocEFkYXB0ZXIpOworCUNvbmZpZ01NQ1JlZ3MocEFkYXB0ZXIpOworCisJQ29uZmlnUnhNYWNSZWdzKHBBZGFwdGVyKTsKKwlDb25maWdUeE1hY1JlZ3MocEFkYXB0ZXIpOworCisJQ29uZmlnUnhEbWFSZWdzKHBBZGFwdGVyKTsKKwlDb25maWdUeERtYVJlZ3MocEFkYXB0ZXIpOworCisJQ29uZmlnTWFjU3RhdFJlZ3MocEFkYXB0ZXIpOworCisJLyogTW92ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gVGltZXIgZnVuY3Rpb24/PyAqLworCXN0YXR1cyA9IGV0MTMxeF94Y3ZyX2ZpbmQocEFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IGZpbmQgdGhlIHhjdnJcbiIpOworCX0KKworCS8qIFByZXBhcmUgdGhlIFRSVUVQSFkgbGlicmFyeS4gKi8KKwlFVDEzMTBfUGh5SW5pdChwQWRhcHRlcik7CisKKwkvKiBSZXNldCB0aGUgcGh5IG5vdyBzbyBjaGFuZ2VzIHRha2UgcGxhY2UgKi8KKwlFVDEzMTBfUGh5UmVzZXQocEFkYXB0ZXIpOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qCisJICogV2UgbmVlZCB0byB0dXJuIG9mZiAxMDAwIGJhc2UgaGFsZiBkdWxwbGV4LCB0aGUgbWFjIGRvZXMgbm90CisJICogc3VwcG9ydCBpdC4gRm9yIHRoZSAxMC8xMDAgcGFydCwgdHVybiBvZmYgYWxsIGdpZyBhZHZlcnRpc2VtZW50CisJICovCisJaWYgKHBBZGFwdGVyLT5EZXZpY2VJRCAhPSBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNUKSB7CisJCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKwl9IGVsc2UgeworCQlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJfQorCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlldDEzMXhfc2V0cGh5X25vcm1hbChwQWRhcHRlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMgLSBzZXQgdXAgdGhlIE1BQyBBZGRyZXNzIG9uIHRoZSBFVDEzMTAKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBJZiBoYXZlIG91ciBkZWZhdWx0IG1hYyBmcm9tIHJlZ2lzdHJ5IGFuZCBubyBtYWMgYWRkcmVzcyBmcm9tCisJICogRUVQUk9NIHRoZW4gd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgbGFzdCBvY3RldCBhbmQgc2V0IGl0IG9uIHRoZQorCSAqIGRldmljZQorCSAqLworCWlmICghYWRhcHRlci0+Yk92ZXJyaWRlQWRkcmVzcykgeworCQlpZiAoYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1swXSA9PSAweDAwICYmCisJCSAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzFdID09IDB4MDAgJiYKKwkJICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbMl0gPT0gMHgwMCAmJgorCQkgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1szXSA9PSAweDAwICYmCisJCSAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzRdID09IDB4MDAgJiYKKwkJICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbNV0gPT0gMHgwMCkgeworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gcmFuZG9tbHkgZ2VuZXJhdGUgdGhlIGxhc3Qgb2N0ZXQgc28gd2UKKwkJCSAqIGRlY3JlYXNlIG91ciBjaGFuY2VzIG9mIHNldHRpbmcgdGhlIG1hYyBhZGRyZXNzIHRvCisJCQkgKiBzYW1lIGFzIGFub3RoZXIgb25lIG9mIG91ciBjYXJkcyBpbiB0aGUgc3lzdGVtCisJCQkgKi8KKwkJCWdldF9yYW5kb21fYnl0ZXMoJmFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdLCAxKTsKKworCQkJLyoKKwkJCSAqIFdlIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIHJlZ2lzdGVyIHdlIGFyZQorCQkJICogd29ya2luZyB3aXRoIHNvIHdlIG5lZWQgdG8gY29weSB0aGUgY3VycmVudAorCQkJICogYWRkcmVzcyBpbnRvIHRoZSBwZXJtYW5lbnQgYWRkcmVzcworCQkJICovCisJCQltZW1jcHkoYWRhcHRlci0+UGVybWFuZW50QWRkcmVzcywKKwkJCSAgICAgICBhZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgRVRIX0FMRU4pOworCQl9IGVsc2UgeworCQkJLyogV2UgZG8gbm90IGhhdmUgYW4gb3ZlcnJpZGUgYWRkcmVzcywgc28gc2V0IHRoZQorCQkJICogY3VycmVudCBhZGRyZXNzIHRvIHRoZSBwZXJtYW5lbnQgYWRkcmVzcyBhbmQgYWRkCisJCQkgKiBpdCB0byB0aGUgZGV2aWNlCisJCQkgKi8KKwkJCW1lbWNweShhZGFwdGVyLT5DdXJyZW50QWRkcmVzcywKKwkJCSAgICAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzLCBFVEhfQUxFTik7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9zb2Z0X3Jlc2V0IC0gSXNzdWUgYSBzb2Z0IHJlc2V0IHRvIHRoZSBoYXJkd2FyZSwgY29tcGxldGUgZm9yIEVUMTMxMAorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfc29mdF9yZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIERpc2FibGUgTUFDIENvcmUgKi8KKwl3cml0ZWwoMHhjMDBmMDAwMCwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYy5jZmcxLnZhbHVlKTsKKworCS8qIFNldCBldmVyeXRoaW5nIHRvIGEgcmVzZXQgdmFsdWUgKi8KKwl3cml0ZWwoMHg3RiwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5zd19yZXNldC52YWx1ZSk7CisJd3JpdGVsKDB4MDAwZjAwMDAsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWMuY2ZnMS52YWx1ZSk7CisJd3JpdGVsKDB4MDAwMDAwMDAsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWMuY2ZnMS52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5IC0gQWxpZ24gYWxsb2NhdGVkIG1lbW9yeSBvbiBhIGdpdmVuIGJvdW5kYXJ5CisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEBwaHlzX2FkZHI6IHBvaW50ZXIgdG8gUGh5c2ljYWwgYWRkcmVzcworICogQG9mZnNldDogcG9pbnRlciB0byB0aGUgb2Zmc2V0IHZhcmlhYmxlCisgKiBAbWFzazogY29ycmVjdCBtYXNrCisgKi8KK3ZvaWQgZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHVpbnQ2NF90ICpwaHlzX2FkZHIsCisJCQkJICAgdWludDY0X3QgKm9mZnNldCwgdWludDY0X3QgbWFzaykKK3sKKwl1aW50NjRfdCBuZXdfYWRkcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkqb2Zmc2V0ID0gMDsKKworCW5ld19hZGRyID0gKnBoeXNfYWRkciAmIH5tYXNrOworCisJaWYgKG5ld19hZGRyICE9ICpwaHlzX2FkZHIpIHsKKwkJLyogTW92ZSB0byBuZXh0IGFsaWduZWQgYmxvY2sgKi8KKwkJbmV3X2FkZHIgKz0gbWFzayArIDE7CisJCS8qIFJldHVybiBvZmZzZXQgZm9yIGFkanVzdGluZyB2aXJ0IGFkZHIgKi8KKwkJKm9mZnNldCA9IG5ld19hZGRyIC0gKnBoeXNfYWRkcjsKKwkJLyogUmV0dXJuIG5ldyBwaHlzaWNhbCBhZGRyZXNzICovCisJCSpwaHlzX2FkZHIgPSBuZXdfYWRkcjsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKS4KKyAqCisgKiBBbGxvY2F0ZSBhbGwgdGhlIG1lbW9yeSBibG9ja3MgZm9yIHNlbmQsIHJlY2VpdmUgYW5kIG90aGVycy4KKyAqLworaW50IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJZG8geworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBUeCBSaW5nICovCisJCXN0YXR1cyA9IGV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jKGFkYXB0ZXIpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyBGQUlMRURcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBSZWNlaXZlIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbiAqLworCQlzdGF0dXMgPSBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyhhZGFwdGVyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2MgRkFJTEVEXG4iKTsKKwkJCWV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEluaXQgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwkJc3RhdHVzID0gZXQxMzF4X2luaXRfcmVjdihhZGFwdGVyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJldDEzMXhfaW5pdF9yZWN2IEZBSUxFRFxuIik7CisJCQlldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCQkJZXQxMzF4X3J4X2RtYV9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUgLSBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciB1c2UgYnkgVHggJiBSeAorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEZyZWUgRE1BIG1lbW9yeSAqLworCWV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisJZXQxMzF4X3J4X2RtYV9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3BjaV9yZW1vdmUKKyAqIEBwZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHBjaV9kZXYgc3RydWN0dXJlCisgKgorICogUmVnaXN0ZXJlZCBpbiB0aGUgcGNpX2RyaXZlciBzdHJ1Y3R1cmUsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlCisgKiBQQ0kgc3Vic3lzdGVtIGRldGVjdHMgdGhhdCBhIFBDSSBkZXZpY2Ugd2hpY2ggbWF0Y2hlcyB0aGUgaW5mb3JtYXRpb24KKyAqIGNvbnRhaW5lZCBpbiB0aGUgcGNpX2RldmljZV9pZCB0YWJsZSBoYXMgYmVlbiByZW1vdmVkLgorICovCit2b2lkIF9fZGV2ZXhpdCBldDEzMXhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBSZXRyaWV2ZSB0aGUgbmV0X2RldmljZSBwb2ludGVyIGZyb20gdGhlIHBjaV9kZXYgc3RydWN0LCBhcyB3ZWxsCisJICogYXMgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QKKwkgKi8KKwluZXRkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogUGVyZm9ybSBkZXZpY2UgY2xlYW51cCAqLworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisJaW91bm1hcChhZGFwdGVyLT5DU1JBZGRyZXNzKTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfcGNpX3NldHVwIC0gUGVyZm9ybSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKyAqIEBwZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHBjaV9kZXYgc3RydWN0dXJlCisgKiBAZW50OiB0aGlzIGRldmljZSdzIGVudHJ5IGluIHRoZSBwY2lfZGV2aWNlX2lkIHRhYmxlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqCisgKiBSZWdpc3RlcmVkIGluIHRoZSBwY2lfZHJpdmVyIHN0cnVjdHVyZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUKKyAqIFBDSSBzdWJzeXN0ZW0gZmluZHMgYSBuZXcgUENJIGRldmljZSB3aGljaCBtYXRjaGVzIHRoZSBpbmZvcm1hdGlvbgorICogY29udGFpbmVkIGluIHRoZSBwY2lfZGV2aWNlX2lkIHRhYmxlLiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVxdWl2YWxlbnQgdG8KKyAqIGEgZGV2aWNlIGluc2VydGlvbiByb3V0aW5lLgorICovCitpbnQgX19kZXZpbml0IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgcG1fY2FwOworCWJvb2wgcGNpX3VzaW5nX2RhYzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEVuYWJsZSB0aGUgZGV2aWNlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJwY2lfZW5hYmxlX2RldmljZSgpIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFBlcmZvcm0gc29tZSBiYXNpYyBQQ0kgY2hlY2tzICovCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbid0IGZpbmQgUENJIGRldmljZSdzIGJhc2UgYWRkcmVzc1xuIik7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3VsdCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDYW4ndCBnZXQgUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCisJLyogRW5hYmxlIFBDSSBidXMgbWFzdGVyaW5nICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiU2V0dGluZyBQQ0kgQnVzIE1hc3RlcmluZy4uLlxuIik7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKiBRdWVyeSBQQ0kgZm9yIFBvd2VyIE1nbXQgQ2FwYWJpbGl0aWVzCisJICoKKwkgKiBOT1RFOiBOb3cgcmVhZGluZyBQb3dlck1nbXQgaW4gYW5vdGhlciBsb2NhdGlvbjsgaXMgdGhpcyBzdGlsbAorCSAqIG5lZWRlZD8KKwkgKi8KKwlwbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOworCWlmIChwbV9jYXAgPT0gMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgZmluZCBQb3dlciBNYW5hZ2VtZW50IGNhcGFiaWxpdGllc1xuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVzOworCX0KKworCS8qIENoZWNrIHRoZSBETUEgYWRkcmVzc2luZyBzdXBwb3J0IG9mIHRoaXMgZGV2aWNlICovCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpIHsKKwkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiNjQtYml0IERNQSBhZGRyZXNzaW5nIHN1cHBvcnRlZFxuIik7CisJCXBjaV91c2luZ19kYWMgPSB0cnVlOworCisJCXJlc3VsdCA9CisJCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKTsKKwkJaWYgKHJlc3VsdCAhPSAwKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiVW5hYmxlIHRvIG9idGFpbiA2NCBiaXQgRE1BIGZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVzOworCQl9CisJfSBlbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmVUxMKSkgeworCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICI2NC1iaXQgRE1BIGFkZHJlc3NpbmcgTk9UIHN1cHBvcnRlZFxuIik7CisJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJCSAgIjMyLWJpdCBETUEgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWRcbiIpOworCQlwY2lfdXNpbmdfZGFjID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiTm8gdXNhYmxlIERNQSBhZGRyZXNzaW5nIG1ldGhvZFxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVzOworCX0KKworCS8qIEFsbG9jYXRlIG5ldGRldiBhbmQgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHMgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgIkFsbG9jYXRlIG5ldGRldiBhbmQgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHMuLi5cbiIpOworCW5ldGRldiA9IGV0MTMxeF9kZXZpY2VfYWxsb2MoKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGRuJ3QgYWxsb2MgbmV0ZGV2IHN0cnVjdFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVzOworCX0KKworCS8qIFNldHVwIHRoZSBmdW5kYW1lbnRhbCBuZXRfZGV2aWNlIGFuZCBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlIGVsZW1lbnRzICAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlNldHRpbmcgZnVuZGFtZW50YWwgbmV0X2RldmljZSBpbmZvLi4uXG4iKTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCWlmIChwY2lfdXNpbmdfZGFjKSB7CisJCS8vbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJfQorCisJLyoKKwkgKiBOT1RFIC0gVHVybiB0aGlzIG9uIHdoZW4gd2UncmUgcmVhZHkgdG8gZGVhbCB3aXRoIFNHLURNQQorCSAqCisJICogTk9URTogQWNjb3JkaW5nIHRvICJMaW51eCBEZXZpY2UgRHJpdmVycyIsIDNyZCBlZCwgUnViaW5pIGV0IGFsLAorCSAqIGlmIGNoZWNrc3VtbWluZyBpcyBub3QgcGVyZm9ybWVkIGluIEhXLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBub3QKKwkgKiB1c2UgU0cuCisJICogRnJvbSBwcCA1MTAtNTExOgorCSAqCisJICogIk5vdGUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IHBlcmZvcm0gc2NhdHRlci9nYXRoZXIgSS9PIHRvIHlvdXIKKwkgKiBkZXZpY2UgaWYgaXQgZG9lcyBub3QgYWxzbyBwcm92aWRlIHNvbWUgZm9ybSBvZiBjaGVja3N1bW1pbmcgYXMKKwkgKiB3ZWxsLiBUaGUgcmVhc29uIGlzIHRoYXQsIGlmIHRoZSBrZXJuZWwgaGFzIHRvIG1ha2UgYSBwYXNzIG92ZXIgYQorCSAqIGZyYWdtZW50ZWQgKCJub25saW5lYXIiKSBwYWNrZXQgdG8gY2FsY3VsYXRlIHRoZSBjaGVja3N1bSwgaXQKKwkgKiBtaWdodCBhcyB3ZWxsIGNvcHkgdGhlIGRhdGEgYW5kIGNvYWxlc2NlIHRoZSBwYWNrZXQgYXQgdGhlIHNhbWUKKwkgKiB0aW1lLiIKKwkgKgorCSAqIFRoaXMgaGFzIGJlZW4gdmVyaWZpZWQgYnkgc2V0dGluZyB0aGUgZmxhZ3MgYmVsb3cgYW5kIHN0aWxsIG5vdAorCSAqIHJlY2VpdmluZyBhIHNjYXR0ZXJlZCBidWZmZXIgZnJvbSB0aGUgbmV0d29yayBzdGFjaywgc28gbGVhdmUgaXQKKwkgKiBvZmYgdW50aWwgY2hlY2tzdW1zIGFyZSBjYWxjdWxhdGVkIGluIEhXLgorCSAqLworCS8vbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCS8vbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05PX0NTVU07CisJLy9uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKworCS8qIEFsbG9jYXRlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QgYW5kIGNvcHkgaW4gcmVsZXZhbnQgaW5mb3JtYXRpb24gKi8KKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5wZGV2ID0gcGRldjsKKwlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CisJYWRhcHRlci0+VmVuZG9ySUQgPSBwZGV2LT52ZW5kb3I7CisJYWRhcHRlci0+RGV2aWNlSUQgPSBwZGV2LT5kZXZpY2U7CisKKwkvKiBEbyB0aGUgc2FtZSBmb3IgdGhlIG5ldGRldiBzdHJ1Y3QgKi8KKwluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKwluZXRkZXYtPmJhc2VfYWRkciA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCisJLyogSW5pdGlhbGl6ZSBzcGlubG9ja3MgaGVyZSAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIkluaXRpYWxpemUgc3BpbmxvY2tzLi4uXG4iKTsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5Mb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+VENCU2VuZFFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+VENCUmVhZHlRTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlNlbmRIV0xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5TZW5kV2FpdExvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5SY3ZMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+UmN2UGVuZExvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5GYnJMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+UEhZTG9jayk7CisKKwkvKiBQYXJzZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW50byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdCAqLworCWV0MTMxeF9jb25maWdfcGFyc2UoYWRhcHRlcik7CisKKwkvKiBGaW5kIHRoZSBwaHlzaWNhbCBhZGFwdGVyCisJICoKKwkgKiBOT1RFOiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBNcEZpbmRBZGFwdGVyKCkgcm91dGluZTsgY2FuIHdlCisJICogICAgICAgbHVtcCBpdCdzIGluaXQgd2l0aCB0aGUgZGV2aWNlIHNwZWNpZmljIGluaXQgYmVsb3cgaW50byBhCisJICogICAgICAgc2luZ2xlIGluaXQgZnVuY3Rpb24/CisJICovCisJLy93aGlsZSAoZXQxMzF4X2ZpbmRfYWRhcHRlcihhZGFwdGVyLCBwZGV2KSAhPSAwKTsKKwlldDEzMXhfZmluZF9hZGFwdGVyKGFkYXB0ZXIsIHBkZXYpOworCisJLyogTWFwIHRoZSBidXMtcmVsYXRpdmUgcmVnaXN0ZXJzIHRvIHN5c3RlbSB2aXJ0dWFsIG1lbW9yeSAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJICAiTWFwcGluZyBidXMtcmVsYXRpdmUgcmVnaXN0ZXJzIHRvIHZpcnR1YWwgbWVtb3J5Li4uXG4iKTsKKworCWFkYXB0ZXItPkNTUkFkZHJlc3MgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoYWRhcHRlci0+Q1NSQWRkcmVzcyA9PSBOVUxMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfZGV2OworCX0KKworCS8qIFBlcmZvcm0gZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGhlcmUgKFNlZSBjb2RlIGJlbG93KSAqLworCisJLyogSWYgUGh5IENPTUEgbW9kZSB3YXMgZW5hYmxlZCB3aGVuIHdlIHdlbnQgZG93biwgZGlzYWJsZSBpdCBoZXJlLiAqLworCXsKKwkJUE1fQ1NSX3QgR2xvYmFsUG1DU1IgPSB7IDAgfTsKKworCQlHbG9iYWxQbUNTUi5iaXRzLnBtX3N5c2Nsa19nYXRlID0gMTsKKwkJR2xvYmFsUG1DU1IuYml0cy5wbV90eGNsa19nYXRlID0gMTsKKwkJR2xvYmFsUG1DU1IuYml0cy5wbV9yeGNsa19nYXRlID0gMTsKKwkJd3JpdGVsKEdsb2JhbFBtQ1NSLnZhbHVlLAorCQkgICAgICAgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCX0KKworCS8qIElzc3VlIGEgZ2xvYmFsIHJlc2V0IHRvIHRoZSBldDEzMTAgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJJc3N1aW5nIHNvZnQgcmVzZXQuLi5cbiIpOworCWV0MTMxeF9zb2Z0X3Jlc2V0KGFkYXB0ZXIpOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAocGFyYW5vaWQpICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiRGlzYWJsZSBkZXZpY2UgaW50ZXJydXB0cy4uLlxuIik7CisJZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKworCS8qIEFsbG9jYXRlIERNQSBtZW1vcnkgKi8KKwlyZXN1bHQgPSBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2MoYWRhcHRlcik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNvdWxkIG5vdCBhbGxvYyBhZGFwYXRlciBtZW1vcnkgKERNQSlcbiIpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCS8qIEluaXQgc2VuZCBkYXRhIHN0cnVjdHVyZXMgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJJbml0IHNlbmQgZGF0YSBzdHJ1Y3R1cmVzLi4uXG4iKTsKKwlldDEzMXhfaW5pdF9zZW5kKGFkYXB0ZXIpOworCisJYWRhcHRlci0+UG9NZ210LlBvd2VyU3RhdGUgPSBOZGlzRGV2aWNlU3RhdGVEMDsKKworCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQKKwkgKgorCSAqIE5PVEUgLSBUaGlzIGlzIGJlaW5nIGRvbmUgaW4gdGhlIG9wZW4gcm91dGluZSwgd2hlcmUgbW9zdCBvdGhlcgorCSAqICAgICAgICAgTGludXggZHJpdmVycyBzZXR1cCBJUlEgaGFuZGxlcnMuIE1ha2Ugc3VyZSBkZXZpY2UKKwkgKiAgICAgICAgIGludGVycnVwdHMgYXJlIG5vdCB0dXJuZWQgb24gYmVmb3JlIHRoZSBJUlEgaXMgcmVnaXN0ZXJlZCEhCisJICoKKwkgKiAgICAgICAgIFdoYXQgd2Ugd2lsbCBkbyBoZXJlIGlzIHNldHVwIHRoZSB0YXNrIHN0cnVjdHVyZSBmb3IgdGhlCisJICogICAgICAgICBJU1IncyBkZWZlcnJlZCBoYW5kbGVyCisJICovCisJSU5JVF9XT1JLKCZhZGFwdGVyLT50YXNrLCBldDEzMXhfaXNyX2hhbmRsZXIpOworCisJLyogRGV0ZXJtaW5lIE1BQyBBZGRyZXNzLCBhbmQgY29weSBpbnRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdCAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlJldHJpZXZlIE1BQyBhZGRyZXNzLi4uXG4iKTsKKwlldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyhhZGFwdGVyKTsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgRVRIX0FMRU4pOworCisJLyogU2V0dXAgZXQxMzEwIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlNldHVwIHRoZSBhZGFwdGVyLi4uXG4iKTsKKwlldDEzMXhfYWRhcHRlcl9zZXR1cChhZGFwdGVyKTsKKworCS8qIENyZWF0ZSBhIHRpbWVyIHRvIGNvdW50IGVycm9ycyByZWNlaXZlZCBieSB0aGUgTklDICovCisJaW5pdF90aW1lcigmYWRhcHRlci0+RXJyb3JUaW1lcik7CisKKwlhZGFwdGVyLT5FcnJvclRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgVFhfRVJST1JfUEVSSU9EICogSFogLyAxMDAwOworCWFkYXB0ZXItPkVycm9yVGltZXIuZnVuY3Rpb24gPSBldDEzMXhfZXJyb3JfdGltZXJfaGFuZGxlcjsKKwlhZGFwdGVyLT5FcnJvclRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyOworCisJLyogSW5pdGlhbGl6ZSBsaW5rIHN0YXRlICovCisJZXQxMzF4X2xpbmtfZGV0ZWN0aW9uX2hhbmRsZXIoKHVuc2lnbmVkIGxvbmcpYWRhcHRlcik7CisKKwkvKiBJbnRpYWxpemUgdmFyaWFibGUgZm9yIGNvdW50aW5nIGhvdyBsb25nIHdlIGRvIG5vdCBoYXZlIGxpbmsgc3RhdHVzICovCisJYWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QgPSAwOworCisJLyogV2UgY2FuIGVuYWJsZSBpbnRlcnJ1cHRzIG5vdworCSAqCisJICogIE5PVEUgLSBCZWNhdXNlIHJlZ2lzdHJhdGlvbiBvZiBpbnRlcnJ1cHQgaGFuZGxlciBpcyBkb25lIGluIHRoZQorCSAqICAgICAgICAgZGV2aWNlJ3Mgb3BlbigpLCBkZWZlciBlbmFibGluZyBkZXZpY2UgaW50ZXJydXB0cyB0byB0aGF0CisJICogICAgICAgICBwb2ludAorCSAqLworCisJLyogUmVnaXN0ZXIgdGhlIG5ldF9kZXZpY2Ugc3RydWN0IHdpdGggdGhlIExpbnV4IG5ldHdvcmsgbGF5ZXIgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJSZWdpc3RlcmluZyBuZXRfZGV2aWNlLi4uXG4iKTsKKwlpZiAoKHJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpKSAhPSAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX21lbV9mcmVlOworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBuZXRfZGV2aWNlIHN0cnVjdCB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLiBTYXZlIGEgY29weQorCSAqIG9mIHRoZSBQQ0kgY29uZmlnIHNwYWNlIGZvciB0aGlzIGRldmljZSBub3cgdGhhdCB0aGUgZGV2aWNlIGhhcworCSAqIGJlZW4gaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSBxdWlja2x5IHJlc3RvcmVkLgorCSAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpOworCisJcGNpX3NhdmVfc3RhdGUoYWRhcHRlci0+cGRldik7CisKK291dDoKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiByZXN1bHQ7CisKK2Vycl9tZW1fZnJlZToKKwlldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShhZGFwdGVyKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoYWRhcHRlci0+Q1NSQWRkcmVzcyk7CitlcnJfZnJlZV9kZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK2Vycl9yZWxlYXNlX3JlczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWdvdG8gb3V0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYWNiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfaW5pdHBjaS5oIC0gSGVhZGVyIHdoaWNoIGluY2x1ZGVzIGNvbW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCB0byB0aGUgZHJpdmVyJ3MgUENJIChhbmQgUENJIEV4cHJlc3MpIGluZm9ybWF0aW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0lOSVRQQ0lfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0lOSVRQQ0lfSF9fCisKKy8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3ZvaWQgZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHU2NCAqcGh5c19hZGRyLAorCQkJCSAgIHU2NCAqb2Zmc2V0LCB1NjQgbWFzayk7CisKK2ludCBldDEzMXhfYWRhcHRlcl9zZXR1cChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfc29mdF9yZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX19FVDEzMVhfSU5JVFBDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhZmFkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jCkBAIC0wLDAgKzEsNDg4IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9pc3IuYyAtIEZpbGUgd2hpY2ggY29udGFpbnMgdGhlIElTUiwgSVNSIGhhbmRsZXIsIGFuZCByZWxhdGVkIHJvdXRpbmVzCisgKiAgICAgICAgICAgICAgICBmb3IgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyoqCisgKiBldDEzMXhfaXNyIC0gVGhlIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgZm9yIHRoZSBkcml2ZXIuCisgKiBAaXJxOiB0aGUgSVJRIG9uIHdoaWNoIHRoZSBpbnRlcnJ1cHQgd2FzIHJlY2VpdmVkLgorICogQGRldl9pZDogZGV2aWNlLXNwZWNpZmljIGluZm8gKGhlcmUgYSBwb2ludGVyIHRvIGEgbmV0X2RldmljZSBzdHJ1Y3QpCisgKgorICogUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGludGVycnVwdCB3YXMgaGFuZGxlZC4KKyAqLworaXJxcmV0dXJuX3QgZXQxMzF4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJYm9vbCBoYW5kbGVkID0gdHJ1ZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7CisJSU5URVJSVVBUX3Qgc3RhdHVzOworCisJaWYgKG5ldGRldiA9PSBOVUxMIHx8ICFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJObyBuZXRfZGV2aWNlIHN0cnVjdCBvciBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQloYW5kbGVkID0gZmFsc2U7CisJCWdvdG8gb3V0OworCX0KKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogSWYgdGhlIGFkYXB0ZXIgaXMgaW4gbG93IHBvd2VyIHN0YXRlLCB0aGVuIGl0IHNob3VsZCBub3QKKwkgKiByZWNvZ25pemUgYW55IGludGVycnVwdAorCSAqLworCisJLyogRGlzYWJsZSBEZXZpY2UgSW50ZXJydXB0cyAqLworCWV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisKKwkvKiBHZXQgYSBjb3B5IG9mIHRoZSB2YWx1ZSBpbiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCSAqIHNvIHdlIGNhbiBwcm9jZXNzIHRoZSBpbnRlcnJ1cHRpbmcgc2VjdGlvbgorCSAqLworCXN0YXR1cy52YWx1ZSA9IHJlYWRsKCZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwuaW50X3N0YXR1cy52YWx1ZSk7CisKKwlpZiAoYWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gVHhPbmx5IHx8CisJICAgIGFkYXB0ZXItPkZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJc3RhdHVzLnZhbHVlICY9IH5JTlRfTUFTS19FTkFCTEU7CisJfSBlbHNlIHsKKwkJc3RhdHVzLnZhbHVlICY9IH5JTlRfTUFTS19FTkFCTEVfTk9fRkxPVzsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhpcyBpcyBvdXIgaW50ZXJydXB0ICovCisJaWYgKCFzdGF0dXMudmFsdWUpIHsKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJCWFkYXB0ZXItPlN0YXRzLlVuaGFuZGxlZEludGVycnVwdHNQZXJTZWMrKzsKKyNlbmRpZgorCQloYW5kbGVkID0gZmFsc2U7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiTk9UIE9VUiBJTlRFUlJVUFRcbiIpOworCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRoaXMgaXMgb3VyIGludGVycnVwdCwgc28gcHJvY2VzcyBhY2NvcmRpbmdseSAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwlpZiAoc3RhdHVzLmJpdHMucnhkbWFfeGZyX2RvbmUpIHsKKwkJYWRhcHRlci0+U3RhdHMuUnhEbWFJbnRlcnJ1cHRzUGVyU2VjKys7CisJfQorCisJaWYgKHN0YXR1cy5iaXRzLnR4ZG1hX2lzcikgeworCQlhZGFwdGVyLT5TdGF0cy5UeERtYUludGVycnVwdHNQZXJTZWMrKzsKKwl9CisjZW5kaWYKKworCWlmIChzdGF0dXMuYml0cy53YXRjaGRvZ19pbnRlcnJ1cHQpIHsKKwkJUE1QX1RDQiBwTXBUY2IgPSBhZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCisJCWlmIChwTXBUY2IpIHsKKwkJCWlmICgrK3BNcFRjYi0+UGFja2V0U3RhbGVDb3VudCA+IDEpIHsKKwkJCQlzdGF0dXMuYml0cy50eGRtYV9pc3IgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKGFkYXB0ZXItPlJ4UmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMpIHsKKwkJCXN0YXR1cy5iaXRzLnJ4ZG1hX3hmcl9kb25lID0gMTsKKwkJfSBlbHNlIGlmIChwTXBUY2IgPT0gTlVMTCkgeworCQkJd3JpdGVsKDAsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwud2F0Y2hkb2dfdGltZXIpOworCQl9CisKKwkJc3RhdHVzLmJpdHMud2F0Y2hkb2dfaW50ZXJydXB0ID0gMDsKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJCWFkYXB0ZXItPlN0YXRzLldhdGNoRG9nSW50ZXJydXB0c1BlclNlYysrOworI2VuZGlmCisJfQorCisJaWYgKHN0YXR1cy52YWx1ZSA9PSAwKSB7CisJCS8qIFRoaXMgaW50ZXJydXB0IGhhcyBpbiBzb21lIHdheSBiZWVuICJoYW5kbGVkIiBieQorCQkgKiB0aGUgSVNSLiBFaXRoZXIgaXQgd2FzIGEgc3B1cmlvdXMgUnggaW50ZXJydXB0LCBvcgorCQkgKiBpdCB3YXMgYSBUeCBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbiBmaWx0ZXJlZCBieQorCQkgKiB0aGUgSVNSLgorCQkgKi8KKwkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXZSBuZWVkIHRvIHNhdmUgdGhlIGludGVycnVwdCBzdGF0dXMgdmFsdWUgZm9yIHVzZSBpbiBvdXIKKwkgKiBEUEMuIFdlIHdpbGwgY2xlYXIgdGhlIHNvZnR3YXJlIGNvcHkgb2YgdGhhdCBpbiB0aGF0CisJICogcm91dGluZS4KKwkgKi8KKwlhZGFwdGVyLT5TdGF0cy5JbnRlcnJ1cHRTdGF0dXMgPSBzdGF0dXM7CisKKwkvKiBTY2hlZHVsZSB0aGUgSVNSIGhhbmRsZXIgYXMgYSBib3R0b20taGFsZiB0YXNrIGluIHRoZQorCSAqIGtlcm5lbCdzIHRxX2ltbWVkaWF0ZSBxdWV1ZSwgYW5kIG1hcmsgdGhlIHF1ZXVlIGZvcgorCSAqIGV4ZWN1dGlvbgorCSAqLworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnRhc2spOworCitvdXQ6CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKy8qKgorICogZXQxMzF4X2lzcl9oYW5kbGVyIC0gVGhlIElTUiBoYW5kbGVyCisgKiBAcF9hZGFwdGVyLCBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBzY2hlZHVsZWQgdG8gcnVuIGluIGEgZGVmZXJyZWQgY29udGV4dCBieSB0aGUgSVNSLiBUaGlzIGlzIHdoZXJlIHRoZSBJU1IncworICogd29yayBhY3R1YWxseSBnZXRzIGRvbmUuCisgKi8KK3ZvaWQgZXQxMzF4X2lzcl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBldDEzMXhfYWRhcHRlciwgdGFzayk7CisJSU5URVJSVVBUX3QgR2xvYlN0YXR1cyA9IHBBZGFwdGVyLT5TdGF0cy5JbnRlcnJ1cHRTdGF0dXM7CisJQUREUkVTU19NQVBfdCBfX2lvbWVtICppb21lbSA9IHBBZGFwdGVyLT5DU1JBZGRyZXNzOworCisJLyoKKwkgKiBUaGVzZSBmaXJzdCB0d28gYXJlIGJ5IGZhciB0aGUgbW9zdCBjb21tb24uICBPbmNlIGhhbmRsZWQsIHdlIGNsZWFyCisJICogdGhlaXIgdHdvIGJpdHMgaW4gdGhlIHN0YXR1cyB3b3JkLiAgSWYgdGhlIHdvcmQgaXMgbm93IHplcm8sIHdlCisJICogZXhpdC4KKwkgKi8KKwkvKiBIYW5kbGUgYWxsIHRoZSBjb21wbGV0ZWQgVHJhbnNtaXQgaW50ZXJydXB0cyAqLworCWlmIChHbG9iU3RhdHVzLmJpdHMudHhkbWFfaXNyKSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIlRYRE1BX0lTUiBpbnRlcnJ1cHRcbiIpOworCQlldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHBBZGFwdGVyKTsKKwl9CisKKwkvKiBIYW5kbGUgYWxsIHRoZSBjb21wbGV0ZWQgUmVjZWl2ZXMgaW50ZXJydXB0cyAqLworCWlmIChHbG9iU3RhdHVzLmJpdHMucnhkbWFfeGZyX2RvbmUpIHsKKwkJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiUlhETUFfWEZSX0RPTkUgaW50ZXJydXB0XG4iKTsKKwkJZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChwQWRhcHRlcik7CisJfQorCisJR2xvYlN0YXR1cy52YWx1ZSAmPSAweGZmZmZmZmQ3OworCisJaWYgKEdsb2JTdGF0dXMudmFsdWUpIHsKKwkJLyogSGFuZGxlIHRoZSBUWERNQSBFcnJvciBpbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy50eGRtYV9lcnIpIHsKKwkJCVRYRE1BX0VSUk9SX3QgVHhEbWFFcnI7CisKKwkJCS8qIEZvbGxvd2luZyByZWFkIGFsc28gY2xlYXJzIHRoZSByZWdpc3RlciAoQ09SKSAqLworCQkJVHhEbWFFcnIudmFsdWUgPSByZWFkbCgmaW9tZW0tPnR4ZG1hLlR4RG1hRXJyb3IudmFsdWUpOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlRYRE1BX0VSUiBpbnRlcnJ1cHQsIGVycm9yID0gJWRcbiIsCisJCQkJICAgIFR4RG1hRXJyLnZhbHVlKTsKKwkJfQorCisJCS8qIEhhbmRsZSBGcmVlIEJ1ZmZlciBSaW5nIDAgYW5kIDEgTG93IGludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnJ4ZG1hX2ZiX3JpbmcwX2xvdyB8fAorCQkgICAgR2xvYlN0YXR1cy5iaXRzLnJ4ZG1hX2ZiX3JpbmcxX2xvdykgeworCQkJLyoKKwkJCSAqIFRoaXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdW51c2VkIGJ1ZmZlcnMgaW4KKwkJCSAqIFJYRE1BIGZyZWUgYnVmZmVyIHJpbmcgMCBpcyA8PSB0aGUgbGltaXQgeW91CisJCQkgKiBwcm9ncmFtbWVkLiBGcmVlIGJ1ZmZlciByZXNvdXJjZXMgbmVlZCB0byBiZQorCQkJICogcmV0dXJuZWQuICBGcmVlIGJ1ZmZlcnMgYXJlIGNvbnN1bWVkIGFzIHBhY2tldHMKKwkJCSAqIGFyZSBwYXNzZWQgZnJvbSB0aGUgbmV0d29yayB0byB0aGUgaG9zdC4gVGhlIGhvc3QKKwkJCSAqIGJlY29tZXMgYXdhcmUgb2YgdGhlIHBhY2tldHMgZnJvbSB0aGUgY29udGVudHMgb2YKKwkJCSAqIHRoZSBwYWNrZXQgc3RhdHVzIHJpbmcuIFRoaXMgcmluZyBpcyBxdWVyaWVkIHdoZW4KKwkJCSAqIHRoZSBwYWNrZXQgZG9uZSBpbnRlcnJ1cHQgb2NjdXJzLiBQYWNrZXRzIGFyZSB0aGVuCisJCQkgKiBwYXNzZWQgdG8gdGhlIE9TLiBXaGVuIHRoZSBPUyBpcyBkb25lIHdpdGggdGhlCisJCQkgKiBwYWNrZXRzIHRoZSByZXNvdXJjZXMgY2FuIGJlIHJldHVybmVkIHRvIHRoZQorCQkJICogRVQxMzEwIGZvciByZS11c2UuIFRoaXMgaW50ZXJydXB0IGlzIG9uZSBtZXRob2Qgb2YKKwkJCSAqIHJldHVybmluZyByZXNvdXJjZXMuCisJCQkgKi8KKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUlhETUFfRkJfUklORzBfTE9XIG9yICIKKwkJCQkgICAgIlJYRE1BX0ZCX1JJTkcxX0xPVyBpbnRlcnJ1cHRcbiIpOworCisJCQkvKiBJZiB0aGUgdXNlciBoYXMgZmxvdyBjb250cm9sIG9uLCB0aGVuIHdlIHdpbGwKKwkJCSAqIHNlbmQgYSBwYXVzZSBwYWNrZXQsIG90aGVyd2lzZSBqdXN0IGV4aXQKKwkJCSAqLworCQkJaWYgKHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBUeE9ubHkgfHwKKwkJCSAgICBwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQkJCVBNX0NTUl90IHBtX2NzcjsKKworCQkJCS8qIFRlbGwgdGhlIGRldmljZSB0byBzZW5kIGEgcGF1c2UgcGFja2V0IHZpYQorCQkJCSAqIHRoZSBiYWNrIHByZXNzdXJlIHJlZ2lzdGVyCisJCQkJICovCisJCQkJcG1fY3NyLnZhbHVlID0gcmVhZGwoJmlvbWVtLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKwkJCQlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMCkgeworCQkJCQlUWE1BQ19CUF9DVFJMX3QgYnBfY3RybCA9IHsgMCB9OworCisJCQkJCWJwX2N0cmwuYml0cy5icF9yZXEgPSAxOworCQkJCQlicF9jdHJsLmJpdHMuYnBfeG9ueG9mZiA9IDE7CisJCQkJCXdyaXRlbChicF9jdHJsLnZhbHVlLAorCQkJCQkgICAgICAgJmlvbWVtLT50eG1hYy5icF9jdHJsLnZhbHVlKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBIYW5kbGUgUGFja2V0IFN0YXR1cyBSaW5nIExvdyBJbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5yeGRtYV9wa3Rfc3RhdF9yaW5nX2xvdykgeworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJSWERNQV9QS1RfU1RBVF9SSU5HX0xPVyBpbnRlcnJ1cHRcbiIpOworCisJCQkvKgorCQkJICogU2FtZSBpZGVhIGFzIHdpdGggdGhlIHR3byBGcmVlIEJ1ZmZlciBSaW5ncy4KKwkJCSAqIFBhY2tldHMgZ29pbmcgZnJvbSB0aGUgbmV0d29yayB0byB0aGUgaG9zdCBlYWNoCisJCQkgKiBjb25zdW1lIGEgZnJlZSBidWZmZXIgcmVzb3VyY2UgYW5kIGEgcGFja2V0IHN0YXR1cworCQkJICogcmVzb3VyY2UuICBUaGVzZSByZXNvdXJlcyBhcmUgcGFzc2VkIHRvIHRoZSBPUy4KKwkJCSAqIFdoZW4gdGhlIE9TIGlzIGRvbmUgd2l0aCB0aGUgcmVzb3VyY2VzLCB0aGV5IG5lZWQKKwkJCSAqIHRvIGJlIHJldHVybmVkIHRvIHRoZSBFVDEzMTAuIFRoaXMgaXMgb25lIG1ldGhvZAorCQkJICogb2YgcmV0dXJuaW5nIHRoZSByZXNvdXJjZXMuCisJCQkgKi8KKwkJfQorCisJCS8qIEhhbmRsZSBSWERNQSBFcnJvciBJbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5yeGRtYV9lcnIpIHsKKwkJCS8qCisJCQkgKiBUaGUgcnhkbWFfZXJyb3IgaW50ZXJydXB0IGlzIHNlbnQgd2hlbiBhIHRpbWUtb3V0CisJCQkgKiBvbiBhIHJlcXVlc3QgaXNzdWVkIGJ5IHRoZSBKQUdDb3JlIGhhcyBvY2N1cnJlZCBvcgorCQkJICogYSBjb21wbGV0aW9uIGlzIHJldHVybmVkIHdpdGggYW4gdW4tc3VjY2Vzc2Z1bAorCQkJICogc3RhdHVzLiAgSW4gYm90aCBjYXNlcyB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkCisJCQkgKiBjb21wbGV0ZS4gVGhlIEpBR0NvcmUgd2lsbCBhdXRvbWF0aWNhbGx5IHJlLXRyeSB0aGUKKwkJCSAqIHJlcXVlc3QgaW4gcXVlc3Rpb24uIE5vcm1hbGx5IGluZm9ybWF0aW9uIG9uIGV2ZW50cworCQkJICogbGlrZSB0aGVzZSBhcmUgc2VudCB0byB0aGUgaG9zdCB1c2luZyB0aGUgIkFkdmFuY2VkCisJCQkgKiBFcnJvciBSZXBvcnRpbmciIGNhcGFiaWxpdHkuIFRoaXMgaW50ZXJydXB0IGlzCisJCQkgKiBhbm90aGVyIHdheSBvZiBnZXR0aW5nIHNpbWlsYXIgaW5mb3JtYXRpb24uIFRoZQorCQkJICogb25seSB0aGluZyByZXF1aXJlZCBpcyB0byBjbGVhciB0aGUgaW50ZXJydXB0IGJ5CisJCQkgKiByZWFkaW5nIHRoZSBJU1IgaW4gdGhlIGdsb2JhbCByZXNvdXJjZXMuIFRoZQorCQkJICogSkFHQ29yZSB3aWxsIGRvIGEgcmUtdHJ5IG9uIHRoZSByZXF1ZXN0LiAgTm9ybWFsbHkKKwkJCSAqIHlvdSBzaG91bGQgbmV2ZXIgc2VlIHRoaXMgaW50ZXJydXB0LiBJZiB5b3Ugc3RhcnQKKwkJCSAqIHRvIHNlZSB0aGlzIGludGVycnVwdCBvY2N1cnJpbmcgZnJlcXVlbnRseSB0aGVuCisJCQkgKiBzb21ldGhpbmcgYmFkIGhhcyBvY2N1cnJlZC4gQSByZXNldCBtaWdodCBiZSB0aGUKKwkJCSAqIHRoaW5nIHRvIGRvLgorCQkJICovCisJCQkvLyBUUkFQKCk7CisKKwkJCXBBZGFwdGVyLT5UeE1hY1Rlc3QudmFsdWUgPQorCQkJCXJlYWRsKCZpb21lbS0+dHhtYWMudHhfdGVzdC52YWx1ZSk7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlJ4RE1BX0VSUiBpbnRlcnJ1cHQsIGVycm9yICV4XG4iLAorCQkJCSAgICBwQWRhcHRlci0+VHhNYWNUZXN0LnZhbHVlKTsKKwkJfQorCisJCS8qIEhhbmRsZSB0aGUgV2FrZSBvbiBMQU4gRXZlbnQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy53YWtlX29uX2xhbikgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBzZWNvbmRhcnkgaW50ZXJydXB0IGZvciB3YWtlIG9uIExBTi4KKwkJCSAqIFRoZSBkcml2ZXIgc2hvdWxkIG5ldmVyIHNlZSB0aGlzLCBpZiBpdCBkb2VzLAorCQkJICogc29tZXRoaW5nIHNlcmlvdXMgaXMgd3JvbmcuIFdlIHdpbGwgVFJBUCB0aGUKKwkJCSAqIG1lc3NhZ2Ugd2hlbiB3ZSBhcmUgaW4gREJHIG1vZGUsIG90aGVyd2lzZSB3ZQorCQkJICogd2lsbCBpZ25vcmUgaXQuCisJCQkgKi8KKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIldBS0VfT05fTEFOIGludGVycnVwdFxuIik7CisJCX0KKworCQkvKiBIYW5kbGUgdGhlIFBIWSBpbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5waHlfaW50ZXJydXB0KSB7CisJCQlQTV9DU1JfdCBwbV9jc3I7CisJCQlNSV9CTVNSX3QgQm1zckludHMsIEJtc3JEYXRhOworCQkJTUlfSVNSX3QgbXlJc3I7CisKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiUEhZIGludGVycnVwdFxuIik7CisKKwkJCS8qIElmIHdlIGFyZSBpbiBjb21hIG1vZGUgd2hlbiB3ZSBnZXQgdGhpcyBpbnRlcnJ1cHQsCisJCQkgKiB3ZSBuZWVkIHRvIGRpc2FibGUgaXQuCisJCQkgKi8KKwkJCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZpb21lbS0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJCQlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMSkgeworCQkJCS8qCisJCQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBjb21hIG1vZGUgYW5kIGlmCisJCQkJICogc28sIGRpc2FibGUgaXQgYmVjYXVzZSB3ZSB3aWxsIG5vdCBiZSBhYmxlCisJCQkJICogdG8gcmVhZCBQSFkgdmFsdWVzIHVudGlsIHdlIGFyZSBvdXQuCisJCQkJICovCisJCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAiRGV2aWNlIGlzIGluIENPTUEgbW9kZSwgIgorCQkJCQkgICAgIm5lZWQgdG8gd2FrZSB1cFxuIik7CisJCQkJRGlzYWJsZVBoeUNvbWEocEFkYXB0ZXIpOworCQkJfQorCisJCQkvKiBSZWFkIHRoZSBQSFkgSVNSIHRvIGNsZWFyIHRoZSByZWFzb24gZm9yIHRoZQorCQkJICogaW50ZXJydXB0LgorCQkJICovCisJCQlNaVJlYWQocEFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlzciksCisJCQkgICAgICAgJm15SXNyLnZhbHVlKTsKKworCQkJaWYgKCFwQWRhcHRlci0+UmVwbGljYVBoeUxvb3BiaykgeworCQkJCU1pUmVhZChwQWRhcHRlciwKKwkJCQkgICAgICAgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgYm1zciksCisJCQkJICAgICAgICZCbXNyRGF0YS52YWx1ZSk7CisKKwkJCQlCbXNySW50cy52YWx1ZSA9CisJCQkJICAgIHBBZGFwdGVyLT5CbXNyLnZhbHVlIF4gQm1zckRhdGEudmFsdWU7CisJCQkJcEFkYXB0ZXItPkJtc3IudmFsdWUgPSBCbXNyRGF0YS52YWx1ZTsKKworCQkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgIkJtc3IudmFsdWUgPSAweCUwNHgsIgorCQkJCQkgICAgIkJtc3JfaW50cy52YWx1ZSA9IDB4JTA0eFxuIiwKKwkJCQkJICAgIEJtc3JEYXRhLnZhbHVlLCBCbXNySW50cy52YWx1ZSk7CisKKwkJCQkvKiBEbyBhbGwgdGhlIGNhYmxlIGluIC8gY2FibGUgb3V0IHN0dWZmICovCisJCQkJZXQxMzF4X01paV9jaGVjayhwQWRhcHRlciwgQm1zckRhdGEsIEJtc3JJbnRzKTsKKwkJCX0KKwkJfQorCisJCS8qIExldCdzIG1vdmUgb24gdG8gdGhlIFR4TWFjICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMudHhtYWNfaW50ZXJydXB0KSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLlR4TWFjRXJyLnZhbHVlID0KKwkJCQlyZWFkbCgmaW9tZW0tPnR4bWFjLmVyci52YWx1ZSk7CisKKwkJCS8qCisJCQkgKiBXaGVuIGFueSBvZiB0aGUgZXJyb3JzIG9jY3VyIGFuZCBUWE1BQyBnZW5lcmF0ZXMKKwkJCSAqIGFuIGludGVycnVwdCB0byByZXBvcnQgdGhlc2UgZXJyb3JzLCBpdCB1c3VhbGx5CisJCQkgKiBtZWFucyB0aGF0IFRYTUFDIGhhcyBkZXRlY3RlZCBhbiBlcnJvciBpbiB0aGUgZGF0YQorCQkJICogc3RyZWFtIHJldHJpZXZlZCBmcm9tIHRoZSBvbi1jaGlwIFR4IFEuIEFsbCBvZgorCQkJICogdGhlc2UgZXJyb3JzIGFyZSBjYXRhc3Ryb3BoaWMgYW5kIFRYTUFDIHdvbid0IGJlCisJCQkgKiBhYmxlIHRvIHJlY292ZXIgZGF0YSB3aGVuIHRoZXNlIGVycm9ycyBvY2N1ci4gIEluCisJCQkgKiBhIG51dHNoZWxsLCB0aGUgd2hvbGUgVHggcGF0aCB3aWxsIGhhdmUgdG8gYmUgcmVzZXQKKwkJCSAqIGFuZCByZS1jb25maWd1cmVkIGFmdGVyd2FyZHMuCisJCQkgKi8KKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiVFhNQUMgaW50ZXJydXB0LCBlcnJvciAweCUwOHhcbiIsCisJCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcuVHhNYWNFcnIudmFsdWUpOworCisJCQkvKiBJZiB3ZSBhcmUgZGVidWdnaW5nLCB3ZSB3YW50IHRvIHNlZSB0aGlzIGVycm9yLAorCQkJICogb3RoZXJ3aXNlIHdlIGp1c3Qgd2FudCB0aGUgZGV2aWNlIHRvIGJlIHJlc2V0IGFuZAorCQkJICogY29udGludWUKKwkJCSAqLworCQkJLy9EQkdfVFJBUCgpOworCQl9CisKKwkJLyogSGFuZGxlIFJYTUFDIEludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnJ4bWFjX2ludGVycnVwdCkgeworCQkJLyoKKwkJCSAqIFRoZXNlIGludGVycnVwdHMgYXJlIGNhdGFzdHJvcGhpYyB0byB0aGUgZGV2aWNlLAorCQkJICogd2hhdCB3ZSBuZWVkIHRvIGRvIGlzIGRpc2FibGUgdGhlIGludGVycnVwdHMgYW5kCisJCQkgKiBzZXQgdGhlIGZsYWcgdG8gY2F1c2UgdXMgdG8gcmVzZXQgc28gd2UgY2FuIHNvbHZlCisJCQkgKiB0aGlzIGlzc3VlLgorCQkJICovCisJCQkvLyBNUF9TRVRfRkxBRyggcEFkYXB0ZXIsIGZNUF9BREFQVEVSX0hBUkRXQVJFX0VSUk9SICk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUlhNQUMgaW50ZXJydXB0LCBlcnJvciAweCUwOHguICBSZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLmVycl9yZWcudmFsdWUpKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJFbmFibGUgMHglMDh4LCBEaWFnIDB4JTA4eFxuIiwKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5jdHJsLnZhbHVlKSwKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5yeHFfZGlhZy52YWx1ZSkpOworCisJCQkvKgorCQkJICogSWYgd2UgYXJlIGRlYnVnZ2luZywgd2Ugd2FudCB0byBzZWUgdGhpcyBlcnJvciwKKwkJCSAqIG90aGVyd2lzZSB3ZSBqdXN0IHdhbnQgdGhlIGRldmljZSB0byBiZSByZXNldCBhbmQKKwkJCSAqIGNvbnRpbnVlCisJCQkgKi8KKwkJCS8vIFRSQVAoKTsKKwkJfQorCisJCS8qIEhhbmRsZSBNQUNfU1RBVCBJbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5tYWNfc3RhdF9pbnRlcnJ1cHQpIHsKKwkJCS8qCisJCQkgKiBUaGlzIG1lYW5zIGF0IGxlYXN0IG9uZSBvZiB0aGUgdW4tbWFza2VkIGNvdW50ZXJzCisJCQkgKiBpbiB0aGUgTUFDX1NUQVQgYmxvY2sgaGFzIHJvbGxlZCBvdmVyLiAgVXNlIHRoaXMKKwkJCSAqIHRvIG1haW50YWluIHRoZSB0b3AsIHNvZnR3YXJlIG1hbmFnZWQgYml0cyBvZiB0aGUKKwkJCSAqIGNvdW50ZXIocykuCisJCQkgKi8KKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiTUFDX1NUQVQgaW50ZXJydXB0XG4iKTsKKwkJCUhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQocEFkYXB0ZXIpOworCQl9CisKKwkJLyogSGFuZGxlIFNMViBUaW1lb3V0IEludGVycnVwdCAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnNsdl90aW1lb3V0KSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBhIHRpbWVvdXQgaGFzIG9jY3VyZWQgb24gYSByZWFkIG9yCisJCQkgKiB3cml0ZSByZXF1ZXN0IHRvIG9uZSBvZiB0aGUgSkFHQ29yZSByZWdpc3RlcnMuIFRoZQorCQkJICogR2xvYmFsIFJlc291cmNlcyBibG9jayBoYXMgdGVybWluYXRlZCB0aGUgcmVxdWVzdAorCQkJICogYW5kIG9uIGEgcmVhZCByZXF1ZXN0LCByZXR1cm5lZCBhICJmYWtlIiB2YWx1ZS4KKwkJCSAqIFRoZSBtb3N0IGxpa2VseSByZWFzb25zIGFyZTogQmFkIEFkZHJlc3Mgb3IgdGhlCisJCQkgKiBhZGRyZXNzZWQgbW9kdWxlIGlzIGluIGEgcG93ZXItZG93biBzdGF0ZSBhbmQKKwkJCSAqIGNhbid0IHJlc3BvbmQuCisJCQkgKi8KKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiU0xWX1RJTUVPVVQgaW50ZXJydXB0XG4iKTsKKwkJfQorCX0KKworCWlmIChwQWRhcHRlci0+UG9NZ210LlBvd2VyU3RhdGUgPT0gTmRpc0RldmljZVN0YXRlRDApIHsKKwkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHBBZGFwdGVyKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTUxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9pc3IuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCisgKiAgICAgICAgICAgICAgICBJU1IgcHJvY2Vzc2luZyBjb2RlLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0lTUl9IX18KKyNkZWZpbmUgX19FVDEzMVhfSVNSX0hfXworCitpcnFyZXR1cm5fdCBldDEzMXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Cit2b2lkIGV0MTMxeF9pc3JfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisjZW5kaWYgLyogX19FVDEzMVhfSVNSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY1OTcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKQEAgLTAsMCArMSw4NTYgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X25ldGRldi5jIC0gUm91dGluZXMgYW5kIGRhdGEgcmVxdWlyZWQgYnkgYWxsIExpbnV4IG5ldHdvcmsgZGV2aWNlcy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0MTMxeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBldDEzMXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBldDEzMXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgZXQxMzF4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcmVxYnVmLCBpbnQgY21kKTsKK3ZvaWQgZXQxMzF4X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBldDEzMXhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIGV0MTMxeF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGV0MTMxeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK2ludCBldDEzMXhfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKm5ld19tYWMpOwordm9pZCBldDEzMXhfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKK3ZvaWQgZXQxMzF4X3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MTZfdCB2aWQpOwordm9pZCBldDEzMXhfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MTZfdCB2aWQpOworCisvKioKKyAqIGV0MTMxeF9kZXZpY2VfYWxsb2MKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgbmV0X2RldmljZSBzdHJ1Y3QgZm9yCisgKiB0aGlzIGRldmljZS4KKyAqCisgKiBDcmVhdGUgaW5zdGFuY2VzIG9mIG5ldF9kZXZpY2UgYW5kIHdsX3ByaXZhdGUgZm9yIHRoZSBuZXcgYWRhcHRlciBhbmQKKyAqIHJlZ2lzdGVyIHRoZSBkZXZpY2UncyBlbnRyeSBwb2ludHMgaW4gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlLgorICovCitzdHJ1Y3QgbmV0X2RldmljZSAqZXQxMzF4X2RldmljZV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQWxsb2MgbmV0X2RldmljZSBhbmQgYWRhcHRlciBzdHJ1Y3RzICovCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBldDEzMXhfYWRhcHRlcikpOworCisJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkFsbG9jIG9mIG5ldF9kZXZpY2Ugc3RydWN0IGZhaWxlZFxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFNldHVwIHRoZSBmdW5jdGlvbiByZWdpc3RyYXRpb24gdGFibGUgKGFuZCBvdGhlciBkYXRhKSBmb3IgYQorCSAqIG5ldF9kZXZpY2UKKwkgKi8KKwkvL25ldGRldi0+aW5pdCAgICAgICAgICAgICAgID0gJmV0MTMxeF9pbml0OworCS8vbmV0ZGV2LT5zZXRfY29uZmlnID0gJmV0MTMxeF9jb25maWc7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSAmZXQxMzF4X3N0YXRzOworCW5ldGRldi0+b3BlbiA9ICZldDEzMXhfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSAmZXQxMzF4X2Nsb3NlOworCW5ldGRldi0+ZG9faW9jdGwgPSAmZXQxMzF4X2lvY3RsOworCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmV0MTMxeF9tdWx0aWNhc3Q7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZXQxMzF4X3R4OworCW5ldGRldi0+dHhfdGltZW91dCA9ICZldDEzMXhfdHhfdGltZW91dDsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gRVQxMzFYX1RYX1RJTUVPVVQ7CisJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gJmV0MTMxeF9jaGFuZ2VfbXR1OworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gJmV0MTMxeF9zZXRfbWFjX2FkZHI7CisKKwkvL25ldGRldi0+ZXRodG9vbF9vcHMgICAgICAgID0gJmV0MTMxeF9ldGh0b29sX29wczsKKworCS8vIFBvbGw/CisJLy9uZXRkZXYtPnBvbGwgICAgICAgICAgICAgICA9ICZldDEzMXhfcG9sbDsKKwkvL25ldGRldi0+cG9sbF9jb250cm9sbGVyICAgID0gJmV0MTMxeF9wb2xsX2NvbnRyb2xsZXI7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBuZXRkZXY7Cit9CisKKy8qKgorICogZXQxMzF4X3N0YXRzIC0gUmV0dXJuIHRoZSBjdXJyZW50IGRldmljZSBzdGF0aXN0aWNzLgorICogQG5ldGRldjogZGV2aWNlIHdob3NlIHN0YXRzIGFyZSBiZWluZyBxdWVyaWVkCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0MTMxeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmFkYXB0ZXItPm5ldF9zdGF0czsKKwlDRV9TVEFUU190ICpkZXZzdGF0ID0gJmFkYXB0ZXItPlN0YXRzOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXN0YXRzLT5yeF9wYWNrZXRzID0gZGV2c3RhdC0+aXBhY2tldHM7CisJc3RhdHMtPnR4X3BhY2tldHMgPSBkZXZzdGF0LT5vcGFja2V0czsKKwlzdGF0cy0+cnhfZXJyb3JzID0gZGV2c3RhdC0+bGVuZ3RoX2VyciArIGRldnN0YXQtPmFsaWdubWVudF9lcnIgKworCSAgICBkZXZzdGF0LT5jcmNfZXJyICsgZGV2c3RhdC0+Y29kZV92aW9sYXRpb25zICsgZGV2c3RhdC0+b3RoZXJfZXJyb3JzOworCXN0YXRzLT50eF9lcnJvcnMgPSBkZXZzdGF0LT5tYXhfcGt0X2Vycm9yOworCXN0YXRzLT5tdWx0aWNhc3QgPSBkZXZzdGF0LT5tdWx0aXJjdjsKKwlzdGF0cy0+Y29sbGlzaW9ucyA9IGRldnN0YXQtPmNvbGxpc2lvbnM7CisKKwlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IGRldnN0YXQtPmxlbmd0aF9lcnI7CisJc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gZGV2c3RhdC0+cnhfb3ZfZmxvdzsKKwlzdGF0cy0+cnhfY3JjX2Vycm9ycyA9IGRldnN0YXQtPmNyY19lcnI7CisKKwkvLyBOT1RFOiBUaGVzZSBzdGF0cyBkb24ndCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIENFX1NUQVRTLCBzbyB3ZSdyZQorCS8vICAgICAgIGdvaW5nIHRvIGhhdmUgdG8gdXBkYXRlIHRoZXNlIGRpcmVjdGx5IGZyb20gd2l0aGluIHRoZSBUWC9SWCBjb2RlCisJLy9zdGF0cy0+cnhfYnl0ZXMgICAgICAgICAgICA9IDIwOyAvL2RldnN0YXQtPjsKKwkvL3N0YXRzLT50eF9ieXRlcyAgICAgICAgICAgID0gMjA7IC8vZGV2c3RhdC0+OworCS8vc3RhdHMtPnJ4X2Ryb3BwZWQgICAgICAgICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfZHJvcHBlZCAgICAgICAgICA9IGRldnN0YXQtPjsKKworCS8vIE5PVEU6IE5vdCB1c2VkLCBjYW4ndCBmaW5kIGFuYWxvZ291cyBzdGF0aXN0aWNzCisJLy9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzICAgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT5yeF9maWZvX2Vycm9ycyAgICAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgICAgPSBkZXZzdGF0LT47CisKKwkvL3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfZmlmb19lcnJvcnMgICAgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgICAgPSBkZXZzdGF0LT47CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0czsKK30KKworLyoqCisgKiBldDEzMXhfb3BlbiAtIE9wZW4gdGhlIGRldmljZSBmb3IgdXNlLgorICogQG5ldGRldjogZGV2aWNlIHRvIGJlIG9wZW5lZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU3RhcnQgdGhlIHRpbWVyIHRvIHRyYWNrIE5JQyBlcnJvcnMgKi8KKwlhZGRfdGltZXIoJmFkYXB0ZXItPkVycm9yVGltZXIpOworCisJLyogUmVnaXN0ZXIgb3VyIElTUiAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlJlZ2lzdGVyaW5nIElTUi4uLlxuIik7CisKKwlyZXN1bHQgPQorCSAgICByZXF1ZXN0X2lycShuZXRkZXYtPmlycSwgZXQxMzF4X2lzciwgSVJRRl9TSEFSRUQsIG5ldGRldi0+bmFtZSwKKwkJCW5ldGRldik7CisJaWYgKHJlc3VsdCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgcmVnaXN0ZXIgSVNSXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBFbmFibGUgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAoaWYgbm90IGFscmVhZHkgZW5hYmxlZCkgKi8KKwlldDEzMXhfcnhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKworCS8qIEVuYWJsZSBkZXZpY2UgaW50ZXJydXB0cyAqLworCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKworCU1QX1NFVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOworCisJLyogV2UncmUgcmVhZHkgdG8gbW92ZSBzb21lIGRhdGEsIHNvIHN0YXJ0IHRoZSBxdWV1ZSAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZXQxMzF4X2Nsb3NlIC0gQ2xvc2UgdGhlIGRldmljZQorICogQG5ldGRldjogZGV2aWNlIHRvIGJlIGNsb3NlZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEZpcnN0IHRoaW5nIGlzIHRvIHN0b3AgdGhlIHF1ZXVlICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogU3RvcCB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzICovCisJZXQxMzF4X3J4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKworCS8qIERpc2FibGUgZGV2aWNlIGludGVycnVwdHMgKi8KKwlldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCisJLyogRGVyZWdpc3RlcmluZyBJU1IgKi8KKwlNUF9DTEVBUl9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOworCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiRGVyZWdpc3RlcmluZyBJU1IuLi5cbiIpOworCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBuZXRkZXYpOworCisJLyogU3RvcCB0aGUgZXJyb3IgdGltZXIgKi8KKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+RXJyb3JUaW1lcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF9pb2N0bF9taWkgLSBUaGUgZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyBNSUkgSU9DVExzCisgKiBAbmV0ZGV2OiBkZXZpY2Ugb24gd2hpY2ggdGhlIHF1ZXJ5IGlzIGJlaW5nIG1hZGUKKyAqIEByZXFidWY6IHRoZSByZXF1ZXN0LXNwZWNpZmljIGRhdGEgYnVmZmVyCisgKiBAY21kOiB0aGUgY29tbWFuZCByZXF1ZXN0IGNvZGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2lvY3RsX21paShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJlcWJ1ZiwgaW50IGNtZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocmVxYnVmKTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiU0lPQ0dNSUlQSFlcbiIpOworCQlkYXRhLT5waHlfaWQgPSBwQWRhcHRlci0+U3RhdHMueGN2cl9hZGRyOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dNSUlSRUc6CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiU0lPQ0dNSUlSRUdcbiIpOworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IE1pUmVhZChwQWRhcHRlciwKKwkJCQkJZGF0YS0+cmVnX251bSwgJmRhdGEtPnZhbF9vdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTSU9DU01JSVJFRzoKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJTSU9DU01JSVJFR1xuIik7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gTWlXcml0ZShwQWRhcHRlciwgZGF0YS0+cmVnX251bSwKKwkJCQkJIGRhdGEtPnZhbF9pbik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X2lvY3RsIC0gVGhlIEkvTyBDb250cm9sIGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIKKyAqIEBuZXRkZXY6IGRldmljZSBvbiB3aGljaCB0aGUgY29udHJvbCByZXF1ZXN0IGlzIGJlaW5nIG1hZGUKKyAqIEByZXFidWY6IGEgcG9pbnRlciB0byB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIKKyAqIEBjbWQ6IHRoZSBJT0NUTCBjb21tYW5kIGNvZGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcmVxYnVmLCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwljYXNlIFNJT0NHTUlJUkVHOgorCWNhc2UgU0lPQ1NNSUlSRUc6CisJCXN0YXR1cyA9IGV0MTMxeF9pb2N0bF9taWkobmV0ZGV2LCByZXFidWYsIGNtZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJVbmhhbmRsZWQgSU9DVEwgQ29kZTogMHglMDR4XG4iLAorCQkJICAgIGNtZCk7CisJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfc2V0X3BhY2tldF9maWx0ZXIgLSBDb25maWd1cmVzIHRoZSBSeCBQYWNrZXQgZmlsdGVyaW5nIG9uIHRoZSBkZXZpY2UKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUKKyAqLworaW50IGV0MTMxeF9zZXRfcGFja2V0X2ZpbHRlcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdWludDMyX3QgZmlsdGVyID0gYWRhcHRlci0+UGFja2V0RmlsdGVyOworCVJYTUFDX0NUUkxfdCBjdHJsOworCVJYTUFDX1BGX0NUUkxfdCBwZl9jdHJsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWN0cmwudmFsdWUgPSByZWFkbCgmYWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWMuY3RybC52YWx1ZSk7CisJcGZfY3RybC52YWx1ZSA9IHJlYWRsKCZhZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYy5wZl9jdHJsLnZhbHVlKTsKKworCS8qIERlZmF1bHQgdG8gZGlzYWJsZWQgcGFja2V0IGZpbHRlcmluZy4gIEVuYWJsZSBpdCBpbiB0aGUgaW5kaXZpZHVhbAorCSAqIGNhc2Ugc3RhdGVtZW50cyB0aGF0IHJlcXVpcmUgdGhlIGRldmljZSB0byBmaWx0ZXIgc29tZXRoaW5nCisJICovCisJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDE7CisKKwkvKiBTZXQgdXMgdG8gYmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBzbyB3ZSByZWNlaXZlIGV2ZXJ5dGhpbmcsIHRoaXMKKwkgKiBpcyBhbHNvIHRydWUgd2hlbiB3ZSBnZXQgYSBwYWNrZXQgZmlsdGVyIG9mIDAKKwkgKi8KKwlpZiAoKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUykgfHwgZmlsdGVyID09IDApIHsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl9icm9hZF9lbiA9IDA7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX3VuaV9lbiA9IDA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU2V0IHVzIHVwIHdpdGggTXVsdGljYXN0IHBhY2tldCBmaWx0ZXJpbmcuICBUaHJlZSBjYXNlcyBhcmUKKwkJICogcG9zc2libGUgLSAoMSkgd2UgaGF2ZSBhIG11bHRpLWNhc3QgbGlzdCwgKDIpIHdlIHJlY2VpdmUgQUxMCisJCSAqIG11bHRpY2FzdCBlbnRyaWVzIG9yICgzKSB3ZSByZWNlaXZlIG5vbmUuCisJCSAqLworCQlpZiAoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTXVsdGljYXN0IGZpbHRlcmluZyBPRkYgKFJ4IEFMTCBNVUxUSUNBU1QpXG4iKTsKKwkJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOworCQl9IGVsc2UgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJNdWx0aWNhc3QgZmlsdGVyaW5nIE9OXG4iKTsKKwkJCVNldHVwRGV2aWNlRm9yTXVsdGljYXN0KGFkYXB0ZXIpOworCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDE7CisJCQljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMDsKKwkJfQorCisJCS8qIFNldCB1cyB1cCB3aXRoIFVuaWNhc3QgcGFja2V0IGZpbHRlcmluZyAqLworCQlpZiAoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0RJUkVDVEVEKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlVuaWNhc3QgRmlsdGVyaW5nIE9OXG4iKTsKKwkJCVNldHVwRGV2aWNlRm9yVW5pY2FzdChhZGFwdGVyKTsKKwkJCXBmX2N0cmwuYml0cy5maWx0ZXJfdW5pX2VuID0gMTsKKwkJCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAwOworCQl9CisKKwkJLyogU2V0IHVzIHVwIHdpdGggQnJvYWRjYXN0IHBhY2tldCBmaWx0ZXJpbmcgKi8KKwkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9CUk9BRENBU1QpIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiQnJvYWRjYXN0IEZpbHRlcmluZyBPTlxuIik7CisJCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMTsKKwkJCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAwOworCQl9IGVsc2UgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJCcm9hZGNhc3QgRmlsdGVyaW5nIE9GRlxuIik7CisJCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMDsKKwkJfQorCisJCS8qIFNldHVwIHRoZSByZWNlaXZlIG1hYyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAtIFBhY2tldAorCQkgKiBGaWx0ZXIgY29udHJvbCArIHRoZSBlbmFibGUgLyBkaXNhYmxlIGZvciBwYWNrZXQgZmlsdGVyCisJCSAqIGluIHRoZSBjb250cm9sIHJlZy4KKwkJICovCisJCXdyaXRlbChwZl9jdHJsLnZhbHVlLAorCQkgICAgICAgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjLnBmX2N0cmwudmFsdWUpOworCQl3cml0ZWwoY3RybC52YWx1ZSwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjLmN0cmwudmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfbXVsdGljYXN0IC0gVGhlIGhhbmRsZXIgdG8gY29uZmlndXJlIG11bHRpY2FzdGluZyBvbiB0aGUgaW50ZXJmYWNlCisgKiBAbmV0ZGV2OiBhIHBvaW50ZXIgdG8gYSBuZXRfZGV2aWNlIHN0cnVjdCByZXByZXNlbnRpbmcgdGhlIGRldmljZQorICovCit2b2lkIGV0MTMxeF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVpbnQzMl90IFBhY2tldEZpbHRlciA9IDA7CisJdWludDMyX3QgY291bnQ7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwkvKiBCZWZvcmUgd2UgbW9kaWZ5IHRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBmaWx0ZXIgZmxhZ3MsIHN0b3JlIHRoZW0KKwkgKiBsb2NhbGx5LiBUaGlzIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcncyBjaGFuZ2VkIGFuZCBpZgorCSAqIHdlIGV2ZW4gbmVlZCB0byBib3RoZXIgdGhlIGhhcmR3YXJlCisJICovCisJUGFja2V0RmlsdGVyID0gYWRhcHRlci0+UGFja2V0RmlsdGVyOworCisJLyogQ2xlYXIgdGhlICdtdWx0aWNhc3QnIGZsYWcgbG9jYWxseTsgYmVjdWFzZSB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUKKwkgKiBmbGFnIHRvIGNoZWNrIG11bHRpY2FzdCwgYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgY2FuIGJlCisJICogc2V0LCB0aGlzIGlzIHRoZSBlYXNpZXN0IHdheSB0byBkZXRlcm1pbmUgaWYgbW9yZSB0aGFuIG9uZQorCSAqIG11bHRpY2FzdCBhZGRyZXNzIGlzIGJlaW5nIHNldC4KKwkgKi8KKwlQYWNrZXRGaWx0ZXIgJj0gfkVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1Q7CisKKwkvKiBDaGVjayB0aGUgbmV0X2RldmljZSBmbGFncyBhbmQgc2V0IHRoZSBkZXZpY2UgaW5kZXBlbmRlbnQgZmxhZ3MKKwkgKiBhY2NvcmRpbmdseQorCSAqLworCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgIk1VTFRJQ0FTVCBBRERSIENPVU5UOiAlZFxuIiwgbmV0ZGV2LT5tY19jb3VudCk7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiUmVxdWVzdDogUFJPTUlTQ1VPVVMgTU9ERSBPTlxuIik7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciB8PSBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7CisJfSBlbHNlIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJSZXF1ZXN0OiBQUk9NSVNDVU9VUyBNT0RFIE9GRlxuIik7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTOworCX0KKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiUmVxdWVzdDogQUNDRVBUIEFMTCBNVUxUSUNBU1RcbiIpOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgfD0gRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CisJfQorCisJaWYgKG5ldGRldi0+bWNfY291bnQgPiBOSUNfTUFYX01DQVNUX0xJU1QpIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIkFDQ0VQVCBBTEwgTVVMVElDQVNUIGZvciBub3csIGFzIHRoZXJlJ3MgbW9yZSBNdWx0aWNhc3QgIgorCQkJICAgICJhZGRyZXNzZXMgdGhhbiB0aGUgSFcgc3VwcG9ydHNcbiIpOworCisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciB8PSBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKKwl9CisKKwlpZiAobmV0ZGV2LT5tY19jb3VudCA8IDEpIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJSZXF1ZXN0OiBSRUpFQ1QgQUxMIE1VTFRJQ0FTVFxuIik7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CisJCWFkYXB0ZXItPlBhY2tldEZpbHRlciAmPSB+RVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVDsKKwl9IGVsc2UgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiUmVxdWVzdDogU0VUIE1VTFRJQ0FTVCBGSUxURVIoUylcbiIpOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgfD0gRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVDsKKwl9CisKKwkvKiBTZXQgdmFsdWVzIGluIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0ICovCisJYWRhcHRlci0+TUNBZGRyZXNzQ291bnQgPSBuZXRkZXYtPm1jX2NvdW50OworCisJaWYgKG5ldGRldi0+bWNfY291bnQpIHsKKwkJaWYgKG1jbGlzdC0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pIHsKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTXVsdGljYXN0IGFkZHJzIGFyZSBub3QgRVRIX0FMRU4gaW4gc2l6ZVxuIik7CisJCX0gZWxzZSB7CisJCQljb3VudCA9IG5ldGRldi0+bWNfY291bnQgLSAxOworCQkJbWVtY3B5KGFkYXB0ZXItPk1DTGlzdFtjb3VudF0sIG1jbGlzdC0+ZG1pX2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCQl9CisJfQorCisJLyogQXJlIHRoZSBuZXcgZmxhZ3MgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIG9uZXM/IElmIG5vdCwgdGhlbiBubworCSAqIGFjdGlvbiBpcyByZXF1aXJlZAorCSAqCisJICogTk9URSAtIFRoaXMgYmxvY2sgd2lsbCBhbHdheXMgdXBkYXRlIHRoZSBNQ0xpc3Qgd2l0aCB0aGUgaGFyZHdhcmUsCisJICogICAgICAgIGV2ZW4gaWYgdGhlIGFkZHJlc3NlcyBhcmVuJ3QgdGhlIHNhbWUuCisJICovCisJaWYgKFBhY2tldEZpbHRlciAhPSBhZGFwdGVyLT5QYWNrZXRGaWx0ZXIpIHsKKwkJLyogQ2FsbCB0aGUgZGV2aWNlJ3MgZmlsdGVyIGZ1bmN0aW9uICovCisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiVVBEQVRFIFJFUVVJUkVELCBGTEFHUyBjaGFuZ2VkXG4iKTsKKworCQlldDEzMXhfc2V0X3BhY2tldF9maWx0ZXIoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk5PIFVQREFURSBSRVFVSVJFRCwgRkxBR1MgZGlkbid0IGNoYW5nZVxuIik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3R4IC0gVGhlIGhhbmRsZXIgdG8gdHggYSBwYWNrZXQgb24gdGhlIGRldmljZQorICogQHNrYjogZGF0YSB0byBiZSBUeCdkCisgKiBAbmV0ZGV2OiBkZXZpY2Ugb24gd2hpY2ggZGF0YSBpcyB0byBiZSBUeCdkCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBzdGF0dXMgPSAwOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNhdmUgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIFRYIHRpbWVvdXQgd2F0Y2hkb2cgKi8KKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qIENhbGwgdGhlIGRldmljZS1zcGVjaWZpYyBkYXRhIFR4IHJvdXRpbmUgKi8KKwlzdGF0dXMgPSBldDEzMXhfc2VuZF9wYWNrZXRzKHNrYiwgbmV0ZGV2KTsKKworCS8qIENoZWNrIHN0YXR1cyBhbmQgbWFuYWdlIHRoZSBuZXRpZiBxdWV1ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJaWYgKHN0YXR1cyA9PSAtRU5PTUVNKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIk9VVCBPRiBUQ0JzOyBTVE9QIE5FVElGIFFVRVVFXG4iKTsKKworCQkJLyogUHV0IHRoZSBxdWV1ZSB0byBzbGVlcCB1bnRpbCByZXNvdXJjZXMgYXJlCisJCQkgKiBhdmFpbGFibGUKKwkJCSAqLworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJc3RhdHVzID0gMTsKKwkJfSBlbHNlIHsKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTWlzYyBlcnJvcjsgZHJvcCBwYWNrZXRcbiIpOworCQkJc3RhdHVzID0gMDsKKwkJfQorCX0KKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfdHhfdGltZW91dCAtIFRpbWVvdXQgaGFuZGxlcgorICogQG5ldGRldjogYSBwb2ludGVyIHRvIGEgbmV0X2RldmljZSBzdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSBkZXZpY2UKKyAqCisgKiBUaGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIFR4IHJlcXVlc3QgdGltZXMgb3V0LiBUaGUgdGltZW91dCBwZXJpb2QgaXMKKyAqIHNwZWNpZmllZCBieSB0aGUgJ3R4X3RpbWVvIiBlbGVtZW50IGluIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZSAoc2VlCisgKiBldDEzMXhfYWxsb2NfZGV2aWNlKCkgdG8gc2VlIGhvdyB0aGlzIHZhbHVlIGlzIHNldCkuCisgKi8KK3ZvaWQgZXQxMzF4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlQTVBfVENCIHBNcFRjYjsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiVFggVElNRU9VVFxuIik7CisKKwkvKiBKdXN0IHNraXAgdGhpcyBwYXJ0IGlmIHRoZSBhZGFwdGVyIGlzIGRvaW5nIGxpbmsgZGV0ZWN0aW9uICovCisJaWYgKE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIlN0aWxsIGRvaW5nIGxpbmsgZGV0ZWN0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFueSBub25yZWNvdmVyYWJsZSBoYXJkd2FyZSBlcnJvcj8KKwkgKiBDaGVja3MgYWRhcHRlci0+ZmxhZ3MgZm9yIGFueSBmYWlsdXJlIGluIHBoeSByZWFkaW5nCisJICovCisJaWYgKE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTk9OX1JFQ09WRVJfRVJST1IpKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiTm9uIHJlY292ZXJhYmxlIGVycm9yIC0gcmVtb3ZlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEhhcmR3YXJlIGZhaWx1cmU/ICovCisJaWYgKE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfSEFSRFdBUkVfRVJST1IpKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiaGFyZHdhcmUgZXJyb3IgLSByZXNldFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJcyBzZW5kIHN0dWNrPyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wVGNiID0gcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQ7CisKKwlpZiAocE1wVGNiICE9IE5VTEwpIHsKKwkJcE1wVGNiLT5Db3VudCsrOworCisJCWlmIChwTXBUY2ItPkNvdW50ID4gTklDX1NFTkRfSEFOR19USFJFU0hPTEQpIHsKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJCQlUWF9TVEFUVVNfQkxPQ0tfdCB0eERtYUNvbXBsZXRlID0KKwkJCSAgICAqKHBBZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzVmEpOworCQkJUFRYX0RFU0NfRU5UUllfdCBwRGVzYyA9CisJCQkgICAgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCSAgICBwTXBUY2ItPldySW5kZXguYml0cy52YWw7CisjZW5kaWYKKwkJCVRYX0RFU0NfRU5UUllfdCBTdHVja0Rlc2NyaXB0b3JzWzEwXTsKKworCQkJaWYgKHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCA+IDcpIHsKKwkJCQltZW1jcHkoU3R1Y2tEZXNjcmlwdG9ycywKKwkJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCQkgICAgICAgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsIC0gNiwKKwkJCQkgICAgICAgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiAxMCk7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssCisJCQkJCSAgICAgICBsb2NrZmxhZ3MpOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlNlbmQgc3R1Y2sgLSByZXNldC4gIHBNcFRjYi0+V3JJbmRleCAleCwgRmxhZ3MgMHglMDh4XG4iLAorCQkJCSAgICBwTXBUY2ItPldySW5kZXguYml0cy52YWwsCisJCQkJICAgIHBNcFRjYi0+RmxhZ3MpOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgInBEZXNjIDB4JTA4eCwgMHglMDh4LCAweCUwOHgsIDB4JTA4eFxuIiwKKwkJCQkgICAgcERlc2MtPkRhdGFCdWZmZXJQdHJIaWdoLAorCQkJCSAgICBwRGVzYy0+RGF0YUJ1ZmZlclB0ckxvdywgcERlc2MtPndvcmQyLnZhbHVlLAorCQkJCSAgICBwRGVzYy0+d29yZDMudmFsdWUpOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIldiU3RhdHVzIDB4JTA4eFxuIiwgdHhEbWFDb21wbGV0ZS52YWx1ZSk7CisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJCQlEdW1wRGV2aWNlQmxvY2soREJHX1dBUk5JTkdfT04sIHBBZGFwdGVyLCAwKTsKKwkJCUR1bXBEZXZpY2VCbG9jayhEQkdfV0FSTklOR19PTiwgcEFkYXB0ZXIsIDEpOworCQkJRHVtcERldmljZUJsb2NrKERCR19XQVJOSU5HX09OLCBwQWRhcHRlciwgMyk7CisJCQlEdW1wRGV2aWNlQmxvY2soREJHX1dBUk5JTkdfT04sIHBBZGFwdGVyLCA1KTsKKyNlbmRpZgorCQkJZXQxMzF4X2Nsb3NlKG5ldGRldik7CisJCQlldDEzMXhfb3BlbihuZXRkZXYpOworCisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworfQorCisvKioKKyAqIGV0MTMxeF9jaGFuZ2VfbXR1IC0gVGhlIGhhbmRsZXIgY2FsbGVkIHRvIGNoYW5nZSB0aGUgTVRVIGZvciB0aGUgZGV2aWNlCisgKiBAbmV0ZGV2OiBkZXZpY2Ugd2hvc2UgTVRVIGlzIHRvIGJlIGNoYW5nZWQKKyAqIEBuZXdfbXR1OiB0aGUgZGVzaXJlZCBNVFUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIHJlcXVlc3RlZCBNVFUgaXMgdmFsaWQgKi8KKwlpZiAobmV3X210dSA9PSAwIHx8IG5ld19tdHUgPiA5MjE2KSB7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFN0b3AgdGhlIG5ldGlmIHF1ZXVlICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogU3RvcCB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzICovCisJZXQxMzF4X3J4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKworCS8qIERpc2FibGUgZGV2aWNlIGludGVycnVwdHMgKi8KKwlldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCWV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoYWRhcHRlcik7CisJZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChhZGFwdGVyKTsKKworCS8qIFNldCB0aGUgbmV3IE1UVSAqLworCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKworCS8qIEZyZWUgUnggRE1BIG1lbW9yeSAqLworCWV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCisJLyogU2V0IHRoZSBjb25maWcgcGFyYW1ldGVyIGZvciBKdW1ibyBQYWNrZXQgc3VwcG9ydCAqLworCWFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPSBuZXdfbXR1ICsgMTQ7CisJZXQxMzF4X3NvZnRfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBBbGxvYyBhbmQgaW5pdCBSeCBETUEgbWVtb3J5ICovCisJcmVzdWx0ID0gZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKGFkYXB0ZXIpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiQ2hhbmdlIE1UVSBmYWlsZWQ7IGNvdWxkbid0IHJlLWFsbG9jIERNQSBtZW1vcnlcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWV0MTMxeF9pbml0X3NlbmQoYWRhcHRlcik7CisKKwlldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyhhZGFwdGVyKTsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIEVUSF9BTEVOKTsKKworCS8qIEluaXQgdGhlIGRldmljZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwlldDEzMXhfYWRhcHRlcl9zZXR1cChhZGFwdGVyKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJaWYgKE1QX1RFU1RfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgeworCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJfQorCisJLyogUmVzdGFydCB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzICovCisJZXQxMzF4X3J4X2RtYV9lbmFibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9lbmFibGUoYWRhcHRlcik7CisKKwkvKiBSZXN0YXJ0IHRoZSBuZXRpZiBxdWV1ZSAqLworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBldDEzMXhfc2V0X21hY19hZGRyIC0gaGFuZGxlciB0byBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGUgZGV2aWNlCisgKiBAbmV0ZGV2OiBkZXZpY2Ugd2hvc2UgTUFDIGlzIHRvIGJlIGNoYW5nZWQKKyAqIEBuZXdfbWFjOiB0aGUgZGVzaXJlZCBNQUMgYWRkcmVzcworICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKgorICogSU1QTEVNRU5URUQgQlkgOiBibHV4IGh0dHA6Ly9iZXJuZGx1eC5kZSAyMi4wMS4yMDA3IDIxOjE0CisgKi8KK2ludCBldDEzMXhfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKm5ld19tYWMpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSBuZXdfbWFjOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKwkvLyBiZWdpbiBibHV4CisJLy8gREJHX1ZFUkJPU0UoIGV0MTMxeF9kYmdpbmZvLCAiRnVuY3Rpb24gbm90IGltcGxlbWVudGVkISFcbiIgKTsKKworCWlmIChhZGFwdGVyID09IE5VTEwpIHsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSByZXF1ZXN0ZWQgTUFDIGlzIHZhbGlkICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHJlc3MtPnNhX2RhdGEpKSB7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFN0b3AgdGhlIG5ldGlmIHF1ZXVlICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogU3RvcCB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzICovCisJZXQxMzF4X3J4X2RtYV9kaXNhYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKworCS8qIERpc2FibGUgZGV2aWNlIGludGVycnVwdHMgKi8KKwlldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCWV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQoYWRhcHRlcik7CisJZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChhZGFwdGVyKTsKKworCS8qIFNldCB0aGUgbmV3IE1BQyAqLworCS8vIG5ldGRldi0+c2V0X21hY19hZGRyZXNzICA9ICZuZXdfbWFjOworCS8vIG5ldGRldi0+bXR1ID0gbmV3X210dTsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyZXNzLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCXByaW50aygiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJICAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwgbmV0ZGV2LT5kZXZfYWRkcls0XSwKKwkgICAgICAgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisKKwkvKiBGcmVlIFJ4IERNQSBtZW1vcnkgKi8KKwlldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKworCS8qIFNldCB0aGUgY29uZmlnIHBhcmFtZXRlciBmb3IgSnVtYm8gUGFja2V0IHN1cHBvcnQgKi8KKwkvLyBhZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID0gbmV3X210dSArIDE0OworCS8vIGJsdXg6IG5vdCBuZWVkZXQgaGVyZSwgdydsbCBjaGFuZ2UgdGhlIE1BQworCisJZXQxMzF4X3NvZnRfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBBbGxvYyBhbmQgaW5pdCBSeCBETUEgbWVtb3J5ICovCisJcmVzdWx0ID0gZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKGFkYXB0ZXIpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiQ2hhbmdlIE1BQyBmYWlsZWQ7IGNvdWxkbid0IHJlLWFsbG9jIERNQSBtZW1vcnlcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWV0MTMxeF9pbml0X3NlbmQoYWRhcHRlcik7CisKKwlldDEzMXhfc2V0dXBfaGFyZHdhcmVfcHJvcGVydGllcyhhZGFwdGVyKTsKKwkvLyBtZW1jcHkoIG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTiApOworCS8vIGJsdXg6IG5vLCBkbyBub3Qgb3ZlcnJpZGUgb3VyIG5pY2UgYWRkcmVzcworCisJLyogSW5pdCB0aGUgZGV2aWNlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLworCWV0MTMxeF9hZGFwdGVyX3NldHVwKGFkYXB0ZXIpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlpZiAoTVBfVEVTVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7CisJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwl9CisKKwkvKiBSZXN0YXJ0IHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKi8KKwlldDEzMXhfcnhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2VuYWJsZShhZGFwdGVyKTsKKworCS8qIFJlc3RhcnQgdGhlIG5ldGlmIHF1ZXVlICovCisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFjZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfbmV0ZGV2LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiByZWxhdGVkIHRvIHRoZQorICogICAgICAgICAgICAgICAgICAgZHJpdmVyJ3MgbmV0X2RldmljZSBzdXBwb3J0LgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX05FVERFVl9IX18KKyNkZWZpbmUgX19FVDEzMVhfTkVUREVWX0hfXworCitzdHJ1Y3QgbmV0X2RldmljZSAqZXQxMzF4X2RldmljZV9hbGxvYyh2b2lkKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX05FVERFVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X3ZlcnNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE2NDVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X3ZlcnNpb24uaCAtIFRoaXMgZmlsZSBwcm92aWRlcyBzeXN0ZW0gYW5kIGRldmljZSB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX1ZFUlNJT05fSF9fCisjZGVmaW5lIF9fRVQxMzFYX1ZFUlNJT05fSF9fCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIlZpY3RvciBTb3JpYW5vICh2anNvcmlhbm9AYWdlcmUuY29tKSIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UJCSJEdWFsIEJTRC9HUEwiCisjZGVmaW5lIERSSVZFUl9ERVZJQ0VfU1RSSU5HCSJFVDEzMTAiCisjZGVmaW5lIERSSVZFUl9OQU1FCQkiZXQxMzF4IgorI2RlZmluZSBEUklWRVJfTUFKT1JfVkVSU0lPTgkxCisjZGVmaW5lIERSSVZFUl9NSU5PUl9WRVJTSU9OCTIKKyNkZWZpbmUgRFJJVkVSX1BBVENIX1ZFUlNJT04JMworI2RlZmluZSBEUklWRVJfVkVSU0lPTl9TVFJJTkcJIjEuMi4zIgorI2RlZmluZSBEUklWRVJfVkVORE9SCQkiQWdlcmUgU3lzdGVtcywgaHR0cDovL3d3dy5hZ2VyZS5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDCQkiMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciIKKworI2RlZmluZSBTVFJVQ1RfTU9EVUxFCQkibmV0IgkvKiBibHV4OiBtaXNzZWQgYnkgdGhlIGtlcm5lbCAqLworCisjZGVmaW5lIERSSVZFUl9JTkZPCQlEUklWRVJfREVTQyAiIGZvciB0aGUgIlwKKwkJCQlEUklWRVJfREVWSUNFX1NUUklORyAiLCB2IiBcCisJCQkJRFJJVkVSX1ZFUlNJT05fU1RSSU5HICIgYnkgIiBcCisJCQkJRFJJVkVSX1ZFTkRPUgorCisjZGVmaW5lIERSSVZFUl9OQU1FX0VYVAkJImV0MTMxeC5rbyIKKworI2VuZGlmIC8qIF9fRVQxMzFYX1ZFUlNJT05fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZwpAQCAtMCwwICsxLDI3IEBACitjb25maWcgVklERU9fR083MDA3CisJdHJpc3RhdGUgIkdvIDcwMDcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIElOUFVUCisJZGVwZW5kcyBvbiBTTkQKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJc2VsZWN0IFZJREVPX0lSCisJc2VsZWN0IFZJREVPX1RVTkVSCisJc2VsZWN0IFZJREVPX1RWRUVQUk9NCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgQ1JDMzIKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBzb21lIHdpZXJkIGRldmljZS4uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnbzcwMDcKKworY29uZmlnIFZJREVPX0dPNzAwN19VU0IKKwl0cmlzdGF0ZSAiR28gNzAwNyBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNyAmJiBVU0IKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBzb21lIHdpZXJkIGRldmljZS4uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnbzcwMDctdXNiCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTMxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKyNvYmotbSArPSBnbzcwMDcubyBnbzcwMDctdXNiLm8gc25kLWdvNzAwNy5vIHdpcy1zYWE3MTE1Lm8gd2lzLXR3OTkwMy5vIFwKKwkJd2lzLXVkYTEzNDIubyB3aXMtc29ueS10dW5lci5vIHdpcy1zYWE3MTEzLm8gd2lzLW92NzY0MC5vIFwKKwkJd2lzLXR3MjgwNC5vCisKKworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykgKz0gZ283MDA3Lm8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDdfVVNCKSArPSBnbzcwMDctdXNiLm8KKworZ283MDA3LW9ianMgKz0gZ283MDA3LXY0bDIubyBnbzcwMDctZHJpdmVyLm8gZ283MDA3LWkyYy5vIGdvNzAwNy1mdy5vIHNuZC1nbzcwMDcubworCisKKyNpZm5lcSAoJChTQUE3MTM0X0JVSUxEKSwpCisjb2JqLW0gKz0gc2FhNzEzNC1nbzcwMDcubworI2VuZGlmCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvc3RhZ2luZy9zYWE3MTM0CitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjQ0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L1JFQURNRQpAQCAtMCwwICsxLDExIEBACitUb2RvOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gc3BhcnNlIGNsZWFudXBzCisJLSBsb3RzIG9mIGxpdHRsZSBtb2R1bGVzLCBzaG91bGQgYmUgbWVyZ2VkIHRvZ2V0aGVyCisJICBhbmQgYWRkZWQgdG8gdGhlIGJ1aWxkLgorCS0gdGVzdGluZz8KKwktIGhhbmRsZSBjaHVybiBpbiB2NGwgbGF5ZXIuCisKK1BsZWFzZSBzZW5kIHBhdGNocyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgQ2M6IFJvc3MKK0NvaGVuIDxyY29oZW5Ac251cmdsZS5vcmc+IGFzIHdlbGwuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWRyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhZTRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWRyaXZlci5jCkBAIC0wLDAgKzEsNjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKworI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCisvKgorICogV2FpdCBmb3IgYW4gaW50ZXJydXB0IHRvIGJlIGRlbGl2ZXJlZCBmcm9tIHRoZSBHTzcwMDdTQiBhbmQgcmV0dXJuCisgKiB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBhbmQgZGF0YS4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqdmFsdWUsIHUxNiAqZGF0YSkKK3sKKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDA7CisJZ28tPmhwaV9vcHMtPnJlYWRfaW50ZXJydXB0KGdvKTsKKwlpZiAod2FpdF9ldmVudF90aW1lb3V0KGdvLT5pbnRlcnJ1cHRfd2FpdHEsCisJCQkJZ28tPmludGVycnVwdF9hdmFpbGFibGUsIDUqSFopIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdGltZW91dCB3YWl0aW5nIGZvciByZWFkIGludGVycnVwdFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFnby0+aW50ZXJydXB0X2F2YWlsYWJsZSkKKwkJcmV0dXJuIC0xOworCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMDsKKwkqdmFsdWUgPSBnby0+aW50ZXJydXB0X3ZhbHVlICYgMHhmZmZlOworCSpkYXRhID0gZ28tPmludGVycnVwdF9kYXRhOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQpOworCisvKgorICogUmVhZCBhIHJlZ2lzdGVyL2FkZHJlc3Mgb24gdGhlIEdPNzAwN1NCLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19yZWFkX2FkZHIoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiBhZGRyLCB1MTYgKmRhdGEpCit7CisJaW50IGNvdW50ID0gMTAwOworCXUxNiB2YWx1ZTsKKworCWlmIChnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCAweDAwMTAsIGFkZHIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCWlmIChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZ2YWx1ZSwgZGF0YSkgPT0gMCAmJgorCQkJCXZhbHVlID09IDB4YTAwMCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlYWRfYWRkcik7CisKKy8qCisgKiBTZW5kIHRoZSBib290IGZpcm13YXJlIHRvIHRoZSBlbmNvZGVyLCB3aGljaCBqdXN0IHdha2VzIGl0IHVwIGFuZCBsZXRzCisgKiB1cyB0YWxrIHRvIHRoZSBHUElPIHBpbnMgYW5kIG9uLWJvYXJkIEkyQyBhZGFwdGVyLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCBnbzcwMDdfbG9hZF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJY2hhciBmd19uYW1lW10gPSAiZ283MDA3ZncuYmluIjsKKwl2b2lkICpib3VuY2U7CisJaW50IGZ3X2xlbiwgcnYgPSAwOworCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmd19uYW1lLCBnby0+ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDc6IHVuYWJsZSB0byBsb2FkIGZpcm13YXJlIGZyb20gZmlsZSBcIiVzXCJcbiIsCisJCQlmd19uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZndfZW50cnktPnNpemUgPCAxNiB8fCBtZW1jbXAoZndfZW50cnktPmRhdGEsICJXSVNHTzcwMDdGVyIsIDExKSkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZmlsZSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlICIKKwkJCQkiZ283MDA3IGZpcm13YXJlXG4iLCBmd19uYW1lKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJCXJldHVybiAtMTsKKwl9CisJZndfbGVuID0gZndfZW50cnktPnNpemUgLSAxNjsKKwlib3VuY2UgPSBrbWFsbG9jKGZ3X2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJvdW5jZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgdHJhbnNmZXJcbiIsIGZ3X2xlbik7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbWNweShib3VuY2UsIGZ3X2VudHJ5LT5kYXRhICsgMTYsIGZ3X2xlbik7CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJaWYgKGdvNzAwN19pbnRlcmZhY2VfcmVzZXQoZ28pIDwgMCB8fAorCQkJZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIGJvdW5jZSwgZndfbGVuKSA8IDAgfHwKKwkJCWdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJmludHJfdmFsLCAmaW50cl9kYXRhKSA8IDAgfHwKKwkJCShpbnRyX3ZhbCAmIH4weDEpICE9IDB4NWE1YSkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKKwkJcnYgPSAtMTsKKwl9CisJa2ZyZWUoYm91bmNlKTsKKwlyZXR1cm4gcnY7Cit9CisKKy8qCisgKiBCb290IHRoZSBlbmNvZGVyIGFuZCByZWdpc3RlciB0aGUgSTJDIGFkYXB0ZXIgaWYgcmVxdWVzdGVkLiAgRG8gdGhlCisgKiBtaW5pbXVtIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSwgc2luY2UgdGhlIGJvYXJkLXNwZWNpZmljIGNvZGUgbWF5CisgKiBzdGlsbCBuZWVkIHRvIHByb2JlIHRoZSBib2FyZCBJRC4KKyAqCisgKiBNdXN0IE5PVCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X2Jvb3RfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbywgaW50IGluaXRfaTJjKQoreworCWludCByZXQ7CisKKwlkb3duKCZnby0+aHdfbG9jayk7CisJcmV0ID0gZ283MDA3X2xvYWRfZW5jb2Rlcihnbyk7CisJdXAoJmdvLT5od19sb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICghaW5pdF9pMmMpCisJCXJldHVybiAwOworCWlmIChnbzcwMDdfaTJjX2luaXQoZ28pIDwgMCkKKwkJcmV0dXJuIC0xOworCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAxOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfYm9vdF9lbmNvZGVyKTsKKworLyoKKyAqIENvbmZpZ3VyZSBhbnkgaGFyZHdhcmUtcmVsYXRlZCByZWdpc3RlcnMgaW4gdGhlIEdPNzAwNywgc3VjaCBhcyBHUElPCisgKiBwaW5zIGFuZCBidXMgcGFyYW1ldGVycywgd2hpY2ggYXJlIGJvYXJkLXNwZWNpZmljLiAgVGhpcyBhc3N1bWVzCisgKiB0aGUgYm9vdCBmaXJtd2FyZSBoYXMgYWxyZWFkeSBiZWVuIGRvd25sb2FkZWQuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IGdvNzAwN19pbml0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaWYgKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmIEdPNzAwN19BVURJT19JMlNfTUFTVEVSKSB7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDEwMDAsIDB4MDgxMSk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDEwMDAsIDB4MGMxMSk7CisJfQorCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfTUFUUklYX1JFVikgeworCQkvKiBTZXQgR1BJTyBwaW4gMCB0byBiZSBhbiBvdXRwdXQgKGF1ZGlvIGNsb2NrIGNvbnRyb2wpICovCisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODIsIDB4MDAwMSk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODAsIDB4MDBmZSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU2VuZCB0aGUgYm9vdCBmaXJtd2FyZSB0byB0aGUgR083MDA3IGFuZCBjb25maWd1cmUgdGhlIHJlZ2lzdGVycy4gIFRoaXMKKyAqIGlzIHRoZSBvbmx5IHdheSB0byBzdG9wIHRoZSBlbmNvZGVyIG9uY2UgaXQgaGFzIHN0YXJ0ZWQgc3RyZWFtaW5nIHZpZGVvLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19yZXNldF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWlmIChnbzcwMDdfbG9hZF9lbmNvZGVyKGdvKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZ283MDA3X2luaXRfZW5jb2Rlcihnbyk7Cit9CisKKy8qCisgKiBBdHRlbXB0IHRvIGluc3RhbnRpYXRlIGFuIEkyQyBjbGllbnQgYnkgSUQsIHByb2JhYmx5IGxvYWRpbmcgYSBtb2R1bGUuCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9pMmNfbW9kdWxlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGlkLCBpbnQgYWRkcikKK3sKKwljaGFyICptb2RuYW1lOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1OgorCQltb2RuYW1lID0gIndpcy1zYWE3MTE1IjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTM6CisJCW1vZG5hbWUgPSAid2lzLXNhYTcxMTMiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfVURBMTM0MjoKKwkJbW9kbmFtZSA9ICJ3aXMtdWRhMTM0MiI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19TT05ZX1RVTkVSOgorCQltb2RuYW1lID0gIndpcy1zb255LXR1bmVyIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1RXOTkwMzoKKwkJbW9kbmFtZSA9ICJ3aXMtdHc5OTAzIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1RXMjgwNDoKKwkJbW9kbmFtZSA9ICJ3aXMtdHcyODA0IjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX09WNzY0MDoKKwkJbW9kbmFtZSA9ICJ3aXMtb3Y3NjQwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbW9kbmFtZSA9IE5VTEw7CisJCWJyZWFrOworCX0KKwlpZiAobW9kbmFtZSAhPSBOVUxMKQorCQlyZXF1ZXN0X21vZHVsZShtb2RuYW1lKTsKKwlpZiAod2lzX2kyY19wcm9iZV9kZXZpY2UoYWRhcHRlciwgaWQsIGFkZHIpID09IDEpCisJCXJldHVybiAwOworCWlmIChtb2RuYW1lICE9IE5VTEwpCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJnbzcwMDc6IHByb2JpbmcgZm9yIG1vZHVsZSAlcyBmYWlsZWQiLCBtb2RuYW1lKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJnbzcwMDc6IHNlbnNvciAldSBzZWVtcyB0byBiZSB1bnN1cHBvcnRlZCFcbiIsIGlkKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSB0aGUgR083MDA3IGhhcmR3YXJlIHNldHVwLCByZWdpc3RlciB0aGUgb24tYm9hcmQgSTJDIGFkYXB0ZXIKKyAqIChpZiB1c2VkIG9uIHRoaXMgYm9hcmQpLCBsb2FkIHRoZSBJMkMgY2xpZW50IGRyaXZlciBmb3IgdGhlIHNlbnNvcgorICogKFNBQTcxMTUgb3Igd2hhdGV2ZXIpIGFuZCBvdGhlciBkZXZpY2VzLCBhbmQgcmVnaXN0ZXIgdGhlIEFMU0EgYW5kIFY0TDIKKyAqIGludGVyZmFjZXMuCisgKgorICogTXVzdCBOT1QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCBpLCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJnbzcwMDc6IHJlZ2lzdGVyaW5nIG5ldyAlc1xuIiwgZ28tPm5hbWUpOworCisJZG93bigmZ28tPmh3X2xvY2spOworCXJldCA9IGdvNzAwN19pbml0X2VuY29kZXIoZ28pOworCXVwKCZnby0+aHdfbG9jayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKworCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSAmJgorCQkJZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQykgeworCQlpZiAoZ283MDA3X2kyY19pbml0KGdvKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAxOworCX0KKwlpZiAoZ28tPmkyY19hZGFwdGVyX29ubGluZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ28tPmJvYXJkX2luZm8tPm51bV9pMmNfZGV2czsgKytpKQorCQkJaW5pdF9pMmNfbW9kdWxlKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCWdvLT5ib2FyZF9pbmZvLT5pMmNfZGV2c1tpXS5pZCwKKwkJCQkJZ28tPmJvYXJkX2luZm8tPmkyY19kZXZzW2ldLmFkZHIpOworI2lmZGVmIFRVTkVSX1NFVF9UWVBFX0FERFIKKwkJaWYgKGdvLT50dW5lcl90eXBlID49IDApIHsKKwkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXAgPSB7CisJCQkJLm1vZGVfbWFzawk9IFRfQU5BTE9HX1RWLAorCQkJCS5hZGRyCQk9IEFERFJfVU5TRVQsCisJCQkJLnR5cGUJCT0gZ28tPnR1bmVyX3R5cGUKKwkJCX07CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCX0KKyNlbHNlCisJCWlmIChnby0+dHVuZXJfdHlwZSA+PSAwKQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCVRVTkVSX1NFVF9UWVBFLCAmZ28tPnR1bmVyX3R5cGUpOworI2VuZGlmCisJCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCURFQ09ERVJfU0VUX0NIQU5ORUwsICZnby0+Y2hhbm5lbF9udW1iZXIpOworCX0KKwlpZiAoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19BVURJTykgeworCQlnby0+YXVkaW9fZW5hYmxlZCA9IDE7CisJCWdvNzAwN19zbmRfaW5pdChnbyk7CisJfQorCXJldHVybiBnbzcwMDdfdjRsMl9pbml0KGdvKTsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIpOworCisvKgorICogU2VuZCB0aGUgZW5jb2RlIGZpcm13YXJlIHRvIHRoZSBlbmNvZGVyLCB3aGljaCB3aWxsIGNhdXNlIGl0CisgKiB0byBpbW1lZGlhdGVseSBzdGFydCBkZWxpdmVyaW5nIHRoZSB2aWRlbyBhbmQgYXVkaW8gc3RyZWFtcy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfc3RhcnRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwl1OCAqZnc7CisJaW50IGZ3X2xlbiwgcnYgPSAwLCBpOworCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOworCisJZ28tPm1vZGV0X2VuYWJsZSA9IDA7CisJaWYgKCFnby0+ZHZkX21vZGUpCisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCWlmIChnby0+bW9kZXRbaV0uZW5hYmxlKSB7CisJCQkJZ28tPm1vZGV0X2VuYWJsZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnby0+bW9kZXRbaV0ucGl4ZWxfdGhyZXNob2xkID0gMzI3Njc7CisJCQlnby0+bW9kZXRbaV0ubW90aW9uX3RocmVzaG9sZCA9IDMyNzY3OworCQkJZ28tPm1vZGV0W2ldLm1iX3RocmVzaG9sZCA9IDMyNzY3OworCQl9CisKKwlpZiAoZ283MDA3X2NvbnN0cnVjdF9md19pbWFnZShnbywgJmZ3LCAmZndfbGVuKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgZncsIGZ3X2xlbikgPCAwIHx8CisJCQlnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciB0cmFuc2ZlcnJpbmcgZmlybXdhcmVcbiIpOworCQlydiA9IC0xOworCQlnb3RvIHN0YXJ0X2Vycm9yOworCX0KKworCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJZ28tPnBhcnNlX2xlbmd0aCA9IDA7CisJZ28tPnNlZW5fZnJhbWUgPSAwOworCWlmIChnbzcwMDdfc3RyZWFtX3N0YXJ0KGdvKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGVycm9yIHN0YXJ0aW5nIHN0cmVhbSB0cmFuc2ZlclxuIik7CisJCXJ2ID0gLTE7CisJCWdvdG8gc3RhcnRfZXJyb3I7CisJfQorCitzdGFydF9lcnJvcjoKKwlrZnJlZShmdyk7CisJcmV0dXJuIHJ2OworfQorCisvKgorICogU3RvcmUgYSBieXRlIGluIHRoZSBjdXJyZW50IHZpZGVvIGJ1ZmZlciwgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfYnl0ZShzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYsIHU4IGJ5dGUpCit7CisJaWYgKGdvYnVmICE9IE5VTEwgJiYgZ29idWYtPmJ5dGVzdXNlZCA8IEdPNzAwN19CVUZfU0laRSkgeworCQl1bnNpZ25lZCBpbnQgcGdpZHggPSBnb2J1Zi0+b2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJCXVuc2lnbmVkIGludCBwZ29mZiA9IGdvYnVmLT5vZmZzZXQgJiB+UEFHRV9NQVNLOworCisJCSooKHU4ICopcGFnZV9hZGRyZXNzKGdvYnVmLT5wYWdlc1twZ2lkeF0pICsgcGdvZmYpID0gYnl0ZTsKKwkJKytnb2J1Zi0+b2Zmc2V0OworCQkrK2dvYnVmLT5ieXRlc3VzZWQ7CisJfQorfQorCisvKgorICogRGVsaXZlciB0aGUgbGFzdCB2aWRlbyBidWZmZXIgYW5kIGdldCBhIG5ldyBvbmUgdG8gc3RhcnQgd3JpdGluZyB0by4KKyAqLworc3RhdGljIHZvaWQgZnJhbWVfYm91bmRhcnkoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCWludCBpOworCisJaWYgKGdvLT5hY3RpdmVfYnVmKSB7CisJCWlmIChnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlKSB7CisJCQlpZiAoZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCArIDIxNiA8IEdPNzAwN19CVUZfU0laRSkgeworCQkJCWZvciAoaSA9IDA7IGkgPCAyMTY7ICsraSkKKwkJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwKKwkJCQkJCQlnby0+YWN0aXZlX21hcFtpXSk7CisJCQkJZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCAtPSAyMTY7CisJCQl9IGVsc2UKKwkJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gMDsKKwkJfQorCQlnby0+YWN0aXZlX2J1Zi0+c3RhdGUgPSBCVUZfU1RBVEVfRE9ORTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZnby0+ZnJhbWVfd2FpdHEpOworCQlnby0+YWN0aXZlX2J1ZiA9IE5VTEw7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZ29idWYsICZnby0+c3RyZWFtLCBzdHJlYW0pCisJCWlmIChnb2J1Zi0+c3RhdGUgPT0gQlVGX1NUQVRFX1FVRVVFRCkgeworCQkJZ29idWYtPnNlcSA9IGdvLT5uZXh0X3NlcTsKKwkJCWRvX2dldHRpbWVvZmRheSgmZ29idWYtPnRpbWVzdGFtcCk7CisJCQlnby0+YWN0aXZlX2J1ZiA9IGdvYnVmOworCQkJYnJlYWs7CisJCX0KKwkrK2dvLT5uZXh0X3NlcTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYml0bWFwX3dvcmQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaW50IHgsIHksIGksIHN0cmlkZSA9ICgoZ28tPndpZHRoID4+IDQpICsgNykgPj4gMzsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7CisJCXkgPSAoKChnby0+cGFyc2VfbGVuZ3RoIC0gMSkgPDwgMykgKyBpKSAvIChnby0+d2lkdGggPj4gNCk7CisJCXggPSAoKChnby0+cGFyc2VfbGVuZ3RoIC0gMSkgPDwgMykgKyBpKSAlIChnby0+d2lkdGggPj4gNCk7CisJCWdvLT5hY3RpdmVfbWFwW3N0cmlkZSAqIHkgKyAoeCA+PiAzKV0gfD0KKwkJCQkJKGdvLT5tb2RldF93b3JkICYgMSkgPDwgKHggJiAweDcpOworCQlnby0+bW9kZXRfd29yZCA+Pj0gMTsKKwl9Cit9CisKKy8qCisgKiBQYXJzZSBhIGNodW5rIG9mIHRoZSB2aWRlbyBzdHJlYW0gaW50byBmcmFtZXMuICBUaGUgZnJhbWVzIGFyZSBub3QKKyAqIGRlbGltaXRlZCBieSB0aGUgaGFyZHdhcmUsIHNvIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGZyYW1lIGJvdW5kYXJpZXMKKyAqIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHZpZGVvIHN0cmVhbSB3ZSdyZSByZWNlaXZpbmcuCisgKi8KK3ZvaWQgZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgc2VxX3N0YXJ0X2NvZGUgPSAtMSwgZnJhbWVfc3RhcnRfY29kZSA9IC0xOworCisJc3Bpbl9sb2NrKCZnby0+c3BpbmxvY2spOworCisJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQlzZXFfc3RhcnRfY29kZSA9IDB4QjA7CisJCWZyYW1lX3N0YXJ0X2NvZGUgPSAweEI2OworCQlicmVhazsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQlzZXFfc3RhcnRfY29kZSA9IDB4QjM7CisJCWZyYW1lX3N0YXJ0X2NvZGUgPSAweDAwOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKwkJaWYgKGdvLT5hY3RpdmVfYnVmICE9IE5VTEwgJiYKKwkJCSAgICBnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkID49IEdPNzAwN19CVUZfU0laRSAtIDMpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDc6IGRyb3BwaW5nIG92ZXJzaXplZCBmcmFtZVxuIik7CisJCQlnby0+YWN0aXZlX2J1Zi0+b2Zmc2V0IC09IGdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQ7CisJCQlnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkID0gMDsKKwkJCWdvLT5hY3RpdmVfYnVmLT5tb2RldF9hY3RpdmUgPSAwOworCQkJZ28tPmFjdGl2ZV9idWYgPSBOVUxMOworCQl9CisKKwkJc3dpdGNoIChnby0+c3RhdGUpIHsKKwkJY2FzZSBTVEFURV9EQVRBOgorCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHgwMDoKKwkJCQlnby0+c3RhdGUgPSBTVEFURV8wMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjoKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9GRjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgYnVmW2ldKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFXzAwOgorCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHgwMDoKKwkJCQlnby0+c3RhdGUgPSBTVEFURV8wMF8wMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9GRjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgYnVmW2ldKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfMDBfMDA6CisJCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQkJY2FzZSAweDAwOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCS8qIGdvLT5zdGF0ZSByZW1haW5zIFNUQVRFXzAwXzAwICovCisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDE6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDBfMDBfMDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFXzAwXzAwXzAxOgorCQkJLyogSWYgdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgTVBFRyBmcmFtZSwKKwkJCSAqIGdldCBhIG5ldyBidWZmZXIgKi8KKwkJCWlmICgoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxIHx8CisJCQkJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiB8fAorCQkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQpICYmCisJCQkJCShidWZbaV0gPT0gc2VxX3N0YXJ0X2NvZGUgfHwKKwkJCQkJCWJ1ZltpXSA9PSAweEI4IHx8IC8qIEdPUCBjb2RlICovCisJCQkJCQlidWZbaV0gPT0gZnJhbWVfc3RhcnRfY29kZSkpIHsKKwkJCQlpZiAoZ28tPmFjdGl2ZV9idWYgPT0gTlVMTCB8fCBnby0+c2Vlbl9mcmFtZSkKKwkJCQkJZnJhbWVfYm91bmRhcnkoZ28pOworCQkJCWlmIChidWZbaV0gPT0gZnJhbWVfc3RhcnRfY29kZSkgeworCQkJCQlpZiAoZ28tPmFjdGl2ZV9idWYgIT0gTlVMTCkKKwkJCQkJCWdvLT5hY3RpdmVfYnVmLT5mcmFtZV9vZmZzZXQgPQorCQkJCQkJCWdvLT5hY3RpdmVfYnVmLT5vZmZzZXQ7CisJCQkJCWdvLT5zZWVuX2ZyYW1lID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlnby0+c2Vlbl9mcmFtZSA9IDA7CisJCQkJfQorCQkJfQorCQkJLyogSGFuZGxlIGFueSBzcGVjaWFsIGNodW5rIHR5cGVzLCBvciBqdXN0IHdyaXRlIHRoZQorCQkJICogc3RhcnQgY29kZSB0byB0aGUgKHBvdGVudGlhbGx5IG5ldykgYnVmZmVyICovCisJCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQkJY2FzZSAweEY1OiAvKiB0aW1lc3RhbXAgKi8KKwkJCQlnby0+cGFyc2VfbGVuZ3RoID0gMTI7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfVU5QQVJTRUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RjY6IC8qIHZiaSAqLworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX1ZCSV9MRU5fQTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGODogLyogTUQgbWFwICovCisJCQkJZ28tPnBhcnNlX2xlbmd0aCA9IDA7CisJCQkJbWVtc2V0KGdvLT5hY3RpdmVfbWFwLCAwLAorCQkJCQkJc2l6ZW9mKGdvLT5hY3RpdmVfbWFwKSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfTU9ERVRfTUFQOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOiAvKiBQb3RlbnRpYWwgSlBFRyBzdGFydCBjb2RlICovCisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDEpOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX0ZGOgorCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHgwMDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweEZGKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV8wMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweEZGKTsKKwkJCQkvKiBnby0+c3RhdGUgcmVtYWlucyBTVEFURV9GRiAqLworCQkJCWJyZWFrOworCQkJY2FzZSAweEQ4OgorCQkJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcpCisJCQkJCWZyYW1lX2JvdW5kYXJ5KGdvKTsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHhGRik7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgYnVmW2ldKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfVkJJX0xFTl9BOgorCQkJZ28tPnBhcnNlX2xlbmd0aCA9IGJ1ZltpXSA8PCA4OworCQkJZ28tPnN0YXRlID0gU1RBVEVfVkJJX0xFTl9COworCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfVkJJX0xFTl9COgorCQkJZ28tPnBhcnNlX2xlbmd0aCB8PSBidWZbaV07CisJCQlpZiAoZ28tPnBhcnNlX2xlbmd0aCA+IDApCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfVU5QQVJTRUQ7CisJCQllbHNlCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX01PREVUX01BUDoKKwkJCWlmIChnby0+cGFyc2VfbGVuZ3RoIDwgMjA0KSB7CisJCQkJaWYgKGdvLT5wYXJzZV9sZW5ndGggJiAxKSB7CisJCQkJCWdvLT5tb2RldF93b3JkIHw9IGJ1ZltpXTsKKwkJCQkJd3JpdGVfYml0bWFwX3dvcmQoZ28pOworCQkJCX0gZWxzZQorCQkJCQlnby0+bW9kZXRfd29yZCA9IGJ1ZltpXSA8PCA4OworCQkJfSBlbHNlIGlmIChnby0+cGFyc2VfbGVuZ3RoID09IDIwNyAmJiBnby0+YWN0aXZlX2J1ZikgeworCQkJCWdvLT5hY3RpdmVfYnVmLT5tb2RldF9hY3RpdmUgPSBidWZbaV07CisJCQl9CisJCQlpZiAoKytnby0+cGFyc2VfbGVuZ3RoID09IDIwOCkKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfVU5QQVJTRUQ6CisJCQlpZiAoLS1nby0+cGFyc2VfbGVuZ3RoID09IDApCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmdvLT5zcGlubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0pOworCisvKgorICogQWxsb2NhdGUgYSBuZXcgZ283MDA3IHN0cnVjdC4gIFVzZWQgYnkgdGhlIGhhcmR3YXJlLXNwZWNpZmljIHByb2JlLgorICovCitzdHJ1Y3QgZ283MDA3ICpnbzcwMDdfYWxsb2Moc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvICpib2FyZCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBnbzcwMDcgKmdvOworCWludCBpOworCisJZ28gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWdvLT5kZXYgPSBkZXY7CisJZ28tPmJvYXJkX2luZm8gPSBib2FyZDsKKwlnby0+Ym9hcmRfaWQgPSAwOworCWdvLT50dW5lcl90eXBlID0gLTE7CisJZ28tPmNoYW5uZWxfbnVtYmVyID0gMDsKKwlnby0+bmFtZVswXSA9IDA7CisJaW5pdF9NVVRFWCgmZ28tPmh3X2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdvLT5mcmFtZV93YWl0cSk7CisJc3Bpbl9sb2NrX2luaXQoJmdvLT5zcGlubG9jayk7CisJZ28tPnZpZGVvX2RldiA9IE5VTEw7CisJZ28tPnJlZl9jb3VudCA9IDA7CisJZ28tPnN0YXR1cyA9IFNUQVRVU19JTklUOworCW1lbXNldCgmZ28tPmkyY19hZGFwdGVyLCAwLCBzaXplb2YoZ28tPmkyY19hZGFwdGVyKSk7CisJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDA7CisJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdvLT5pbnRlcnJ1cHRfd2FpdHEpOworCWdvLT5pbl91c2UgPSAwOworCWdvLT5pbnB1dCA9IDA7CisJaWYgKGJvYXJkLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSB7CisJCWdvLT5zdGFuZGFyZCA9IEdPNzAwN19TVERfTlRTQzsKKwkJZ28tPndpZHRoID0gNzIwOworCQlnby0+aGVpZ2h0ID0gNDgwOworCQlnby0+c2Vuc29yX2ZyYW1lcmF0ZSA9IDMwMDAwOworCX0gZWxzZSB7CisJCWdvLT5zdGFuZGFyZCA9IEdPNzAwN19TVERfT1RIRVI7CisJCWdvLT53aWR0aCA9IGJvYXJkLT5zZW5zb3Jfd2lkdGg7CisJCWdvLT5oZWlnaHQgPSBib2FyZC0+c2Vuc29yX2hlaWdodDsKKwkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSBib2FyZC0+c2Vuc29yX2ZyYW1lcmF0ZTsKKwl9CisJZ28tPmVuY29kZXJfdl9vZmZzZXQgPSBib2FyZC0+c2Vuc29yX3Zfb2Zmc2V0OworCWdvLT5lbmNvZGVyX2hfb2Zmc2V0ID0gYm9hcmQtPnNlbnNvcl9oX29mZnNldDsKKwlnby0+ZW5jb2Rlcl9oX2hhbHZlID0gMDsKKwlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMDsKKwlnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPSAwOworCWdvLT5zdHJlYW1pbmcgPSAwOworCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01KUEVHOworCWdvLT5iaXRyYXRlID0gMTUwMDAwMDsKKwlnby0+ZnBzX3NjYWxlID0gMTsKKwlnby0+cGFsaSA9IDA7CisJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJZ28tPmdvcF9zaXplID0gMDsKKwlnby0+aXBiID0gMDsKKwlnby0+Y2xvc2VkX2dvcCA9IDA7CisJZ28tPnJlcGVhdF9zZXFoZWFkID0gMDsKKwlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAwOworCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDA7CisJZ28tPmR2ZF9tb2RlID0gMDsKKwlnby0+aW50ZXJsYWNlX2NvZGluZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZ28tPm1vZGV0W2ldLmVuYWJsZSA9IDA7OworCWZvciAoaSA9IDA7IGkgPCAxNjI0OyArK2kpCisJCWdvLT5tb2RldF9tYXBbaV0gPSAwOworCWdvLT5hdWRpb19kZWxpdmVyID0gTlVMTDsKKwlnby0+YXVkaW9fZW5hYmxlZCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmdvLT5zdHJlYW0pOworCisJcmV0dXJuIGdvOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfYWxsb2MpOworCisvKgorICogRGV0YWNoIGFuZCB1bnJlZ2lzdGVyIHRoZSBlbmNvZGVyLiAgVGhlIGdvNzAwNyBzdHJ1Y3Qgd29uJ3QgYmUgZnJlZWQKKyAqIHVudGlsIHY0bDIgZmluaXNoZXMgcmVsZWFzaW5nIGl0cyByZXNvdXJjZXMgYW5kIGFsbCBhc3NvY2lhdGVkIGZkcyBhcmUKKyAqIGNsb3NlZCBieSBhcHBsaWNhdGlvbnMuCisgKi8KK3ZvaWQgZ283MDA3X3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpZiAoZ28tPmkyY19hZGFwdGVyX29ubGluZSkgeworCQlpZiAoaTJjX2RlbF9hZGFwdGVyKCZnby0+aTJjX2FkYXB0ZXIpID09IDApCisJCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMDsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdvNzAwNzogZXJyb3IgcmVtb3ZpbmcgSTJDIGFkYXB0ZXIhXG4iKTsKKwl9CisKKwlpZiAoZ28tPmF1ZGlvX2VuYWJsZWQpCisJCWdvNzAwN19zbmRfcmVtb3ZlKGdvKTsKKwlnbzcwMDdfdjRsMl9yZW1vdmUoZ28pOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcmVtb3ZlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZWExMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMKQEAgLTAsMCArMSwxNjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgdG8gZ2VuZXJhdGUgYSBmaXJtd2FyZSBpbWFnZSBmb3IgdGhlIEdPNzAwN1NCCisgKiBlbmNvZGVyLiAgTXVjaCBvZiB0aGUgZmlybXdhcmUgaXMgcmVhZCB2ZXJiYXRpbSBmcm9tIGEgZmlsZSwgYnV0IHNvbWUgb2YKKyAqIGl0IGNvbmNlcm5pbmcgYml0cmF0ZSBjb250cm9sIGFuZCBvdGhlciB0aGluZ3MgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBhdAorICogcnVuLXRpbWUgYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gIE5vdGUgdGhhdCB0aGUgZm9ybWF0IGhlYWRlcnMKKyAqIGdlbmVyYXRlZCBoZXJlIGRvIG5vdCBhZmZlY3QgdGhlIGZ1bmN0aW9uaW5nIG9mIHRoZSBlbmNvZGVyOyB0aGV5IGFyZQorICogbWVyZWx5IHBhcnJvdGVkIGJhY2sgdG8gdGhlIGhvc3QgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggZnJhbWUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorCisvKiBDb25zdGFudHMgdXNlZCBpbiB0aGUgc291cmNlIGZpcm13YXJlIGltYWdlIHRvIGRlc2NyaWJlIGNvZGUgc2VnbWVudHMgKi8KKworI2RlZmluZQlGTEFHX01PREVfTUpQRUcJCSgxKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzEJCSgxPDwxKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzIJCSgxPDwyKQorI2RlZmluZQlGTEFHX01PREVfTVBFRzQJCSgxPDwzKQorI2RlZmluZQlGTEFHX01PREVfSDI2MwkJKDE8PDQpCisjZGVmaW5lIEZMQUdfTU9ERV9BTEwJCShGTEFHX01PREVfTUpQRUcgfCBGTEFHX01PREVfTVBFRzEgfCBcCisJCQkJCUZMQUdfTU9ERV9NUEVHMiB8IEZMQUdfTU9ERV9NUEVHNCB8IFwKKwkJCQkJRkxBR19NT0RFX0gyNjMpCisjZGVmaW5lIEZMQUdfU1BFQ0lBTAkJKDE8PDgpCisKKyNkZWZpbmUgU1BFQ0lBTF9GUk1fSEVBRAkwCisjZGVmaW5lIFNQRUNJQUxfQlJDX0NUUkwJMQorI2RlZmluZSBTUEVDSUFMX0NPTkZJRwkJMgorI2RlZmluZSBTUEVDSUFMX1NFUUhFQUQJCTMKKyNkZWZpbmUgU1BFQ0lBTF9BVl9TWU5DCQk0CisjZGVmaW5lIFNQRUNJQUxfRklOQUwJCTUKKyNkZWZpbmUgU1BFQ0lBTF9BVURJTwkJNgorI2RlZmluZSBTUEVDSUFMX01PREVUCQk3CisKKy8qIExpdHRsZSBkYXRhIGNsYXNzIGZvciBjcmVhdGluZyBNUEVHIGhlYWRlcnMgYml0LWJ5LWJpdCAqLworCitzdHJ1Y3QgY29kZV9nZW4geworCXVuc2lnbmVkIGNoYXIgKnA7IC8qIGRlc3RpbmF0aW9uICovCisJdTMyIGE7IC8qIGNvbGxlY3RzIGJpdHMgYXQgdGhlIHRvcCBvZiB0aGUgdmFyaWFibGUgKi8KKwlpbnQgYjsgLyogYml0IHBvc2l0aW9uIG9mIG1vc3QgcmVjZW50bHktd3JpdHRlbiBiaXQgKi8KKwlpbnQgbGVuOyAvKiB3cml0dGVuIG91dCBzbyBmYXIgKi8KK307CisKKyNkZWZpbmUgQ09ERV9HRU4obmFtZSwgZGVzdCkgc3RydWN0IGNvZGVfZ2VuIG5hbWUgPSB7IGRlc3QsIDAsIDMyLCAwIH0KKworI2RlZmluZSBDT0RFX0FERChuYW1lLCB2YWwsIGxlbmd0aCkgZG8geyBcCisJbmFtZS5iIC09IChsZW5ndGgpOyBcCisJbmFtZS5hIHw9ICh2YWwpIDw8IG5hbWUuYjsgXAorCXdoaWxlIChuYW1lLmIgPD0gMjQpIHsgXAorCQkqbmFtZS5wID0gbmFtZS5hID4+IDI0OyBcCisJCSsrbmFtZS5wOyBcCisJCW5hbWUuYSA8PD0gODsgXAorCQluYW1lLmIgKz0gODsgXAorCQluYW1lLmxlbiArPSA4OyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIENPREVfTEVOR1RIKG5hbWUpIChuYW1lLmxlbiArICgzMiAtIG5hbWUuYikpCisKKy8qIFRhYmxlcyBmb3IgY3JlYXRpbmcgdGhlIGJpdHJhdGUgY29udHJvbCBkYXRhICovCisKK3N0YXRpYyBjb25zdCBzMTYgY29udmVyZ2Vfc3BlZWRfaXBbMTAxXSA9IHsKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLAorCTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDMsCisJMywgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwKKwk1LCA1LCA1LCA2LCA2LCA2LCA3LCA3LCA4LCA4LAorCTksIDEwLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsCisJMTksIDIwLCAyMiwgMjMsIDI1LCAyNywgMzAsIDMyLCAzNSwgMzgsCisJNDEsIDQ1LCA0OSwgNTMsIDU4LCA2MywgNjksIDc2LCA4MywgOTEsCisJMTAwCit9OworCitzdGF0aWMgY29uc3QgczE2IGNvbnZlcmdlX3NwZWVkX2lwYlsxMDFdID0geworCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCisJMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKwkzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LAorCTQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsIDYsCisJNiwgNiwgNiwgNywgNywgNywgNywgOCwgOCwgOSwKKwk5LCA5LCAxMCwgMTAsIDExLCAxMiwgMTIsIDEzLCAxNCwgMTQsCisJMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjIsIDIzLCAyNSwgMjYsCisJMjgsIDMwLCAzMiwgMzQsIDM3LCA0MCwgNDIsIDQ2LCA0OSwgNTMsCisJNTcsIDYxLCA2NiwgNzEsIDc3LCA4MywgOTAsIDk3LCAxMDYsIDExNSwKKwkxMjUsIDEzNSwgMTQ3LCAxNjEsIDE3NSwgMTkxLCAyMDksIDIyOCwgMjQ5LCAyNzMsCisJMzAwCit9OworCitzdGF0aWMgY29uc3QgczE2IExBTUJEQV90YWJsZVs0XVsxMDFdID0geworCXsJMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsCisJCTE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLAorCQkyMiwgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjUsIDI2LCAyNiwKKwkJMjcsIDI3LCAyOCwgMjgsIDI5LCAyOSwgMzAsIDMxLCAzMSwgMzIsCisJCTMyLCAzMywgMzMsIDM0LCAzNSwgMzUsIDM2LCAzNywgMzcsIDM4LAorCQkzOSwgMzksIDQwLCA0MSwgNDIsIDQyLCA0MywgNDQsIDQ1LCA0NiwKKwkJNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisJCTU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LAorCQk2NywgNjgsIDY5LCA3MCwgNzIsIDczLCA3NCwgNzYsIDc3LCA3OCwKKwkJODAsIDgxLCA4MywgODQsIDg2LCA4NywgODksIDkwLCA5MiwgOTQsCisJCTk2CisJfSwKKwl7CisJCTIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIyLCAyMiwgMjMsIDIzLAorCQkyMywgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LCAyOCwKKwkJMjgsIDI5LCAyOSwgMzAsIDMwLCAzMSwgMzEsIDMyLCAzMywgMzMsCisJCTM0LCAzNCwgMzUsIDM2LCAzNiwgMzcsIDM4LCAzOCwgMzksIDQwLAorCQk0MCwgNDEsIDQyLCA0MywgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwKKwkJNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsCisJCTU4LCA1OSwgNjAsIDYxLCA2MiwgNjQsIDY1LCA2NiwgNjcsIDY4LAorCQk3MCwgNzEsIDcyLCA3MywgNzUsIDc2LCA3OCwgNzksIDgwLCA4MiwKKwkJODMsIDg1LCA4NiwgODgsIDkwLCA5MSwgOTMsIDk1LCA5NiwgOTgsCisJCTEwMCwgMTAyLCAxMDMsIDEwNSwgMTA3LCAxMDksIDExMSwgMTEzLCAxMTUsIDExNywKKwkJMTIwCisJfSwKKwl7CisJCTI0LCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsIDI4LAorCQkyOCwgMjksIDI5LCAzMCwgMzAsIDMxLCAzMSwgMzIsIDMzLCAzMywKKwkJMzQsIDM0LCAzNSwgMzYsIDM2LCAzNywgMzgsIDM4LCAzOSwgNDAsCisJCTQxLCA0MSwgNDIsIDQzLCA0NCwgNDQsIDQ1LCA0NiwgNDcsIDQ4LAorCQk0OSwgNTAsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywKKwkJNTgsIDU5LCA2MCwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjksCisJCTcwLCA3MSwgNzIsIDc0LCA3NSwgNzYsIDc4LCA3OSwgODEsIDgyLAorCQk4NCwgODUsIDg3LCA4OCwgOTAsIDkyLCA5MywgOTUsIDk3LCA5OCwKKwkJMTAwLCAxMDIsIDEwNCwgMTA2LCAxMDgsIDExMCwgMTEyLCAxMTQsIDExNiwgMTE4LAorCQkxMjAsIDEyMiwgMTI0LCAxMjcsIDEyOSwgMTMxLCAxMzQsIDEzNiwgMTM4LCAxNDEsCisJCTE0NAorCX0sCisJeworCQkzMiwgMzIsIDMzLCAzMywgMzQsIDM0LCAzNSwgMzYsIDM2LCAzNywKKwkJMzgsIDM4LCAzOSwgNDAsIDQxLCA0MSwgNDIsIDQzLCA0NCwgNDQsCisJCTQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUwLCA1MSwgNTIsIDUzLAorCQk1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjIsIDYzLCA2NCwKKwkJNjUsIDY2LCA2NywgNjksIDcwLCA3MSwgNzIsIDc0LCA3NSwgNzYsCisJCTc4LCA3OSwgODEsIDgyLCA4NCwgODUsIDg3LCA4OCwgOTAsIDkyLAorCQk5MywgOTUsIDk3LCA5OCwgMTAwLCAxMDIsIDEwNCwgMTA2LCAxMDgsIDExMCwKKwkJMTEyLCAxMTQsIDExNiwgMTE4LCAxMjAsIDEyMiwgMTI0LCAxMjcsIDEyOSwgMTMxLAorCQkxMzQsIDEzNiwgMTM5LCAxNDEsIDE0NCwgMTQ2LCAxNDksIDE1MiwgMTU0LCAxNTcsCisJCTE2MCwgMTYzLCAxNjYsIDE2OSwgMTcyLCAxNzUsIDE3OCwgMTgxLCAxODUsIDE4OCwKKwkJMTkyCisJfQorfTsKKworLyogTVBFRyBibGFuayBmcmFtZSBnZW5lcmF0aW9uIHRhYmxlcyAqLworCitlbnVtIG1wZWdfZnJhbWVfdHlwZSB7CisJUEZSQU1FLAorCUJGUkFNRV9QUkUsCisJQkZSQU1FX1BPU1QsCisJQkZSQU1FX0JJRElSLAorCUJGUkFNRV9FTVBUWQorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhZGRyaW5jdGFiWzMzXVsyXSA9IHsKKwl7IDB4MDEsIDEgfSwJeyAweDAzLCAzIH0sCXsgMHgwMiwgMyB9LAl7IDB4MDMsIDQgfSwKKwl7IDB4MDIsIDQgfSwJeyAweDAzLCA1IH0sCXsgMHgwMiwgNSB9LAl7IDB4MDcsIDcgfSwKKwl7IDB4MDYsIDcgfSwJeyAweDBiLCA4IH0sCXsgMHgwYSwgOCB9LAl7IDB4MDksIDggfSwKKwl7IDB4MDgsIDggfSwJeyAweDA3LCA4IH0sCXsgMHgwNiwgOCB9LAl7IDB4MTcsIDEwIH0sCisJeyAweDE2LCAxMCB9LAl7IDB4MTUsIDEwIH0sCXsgMHgxNCwgMTAgfSwJeyAweDEzLCAxMCB9LAorCXsgMHgxMiwgMTAgfSwJeyAweDIzLCAxMSB9LAl7IDB4MjIsIDExIH0sCXsgMHgyMSwgMTEgfSwKKwl7IDB4MjAsIDExIH0sCXsgMHgxZiwgMTEgfSwJeyAweDFlLCAxMSB9LAl7IDB4MWQsIDExIH0sCisJeyAweDFjLCAxMSB9LAl7IDB4MWIsIDExIH0sCXsgMHgxYSwgMTEgfSwJeyAweDE5LCAxMSB9LAorCXsgMHgxOCwgMTEgfQorfTsKKworLyogU3RhbmRhcmQgSlBFRyB0YWJsZXMgKi8KKworc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbXSA9IHsKKwkgOCwgMTYsIDE5LCAyMiwgMjYsIDI3LCAyOSwgMzQsCisJMTYsIDE2LCAyMiwgMjQsIDI3LCAyOSwgMzQsIDM3LAorCTE5LCAyMiwgMjYsIDI3LCAyOSwgMzQsIDM0LCAzOCwKKwkyMiwgMjIsIDI2LCAyNywgMjksIDM0LCAzNywgNDAsCisJMjIsIDI2LCAyNywgMjksIDMyLCAzNSwgNDAsIDQ4LAorCTI2LCAyNywgMjksIDMyLCAzNSwgNDAsIDQ4LCA1OCwKKwkyNiwgMjcsIDI5LCAzNCwgMzgsIDQ2LCA1NiwgNjksCisJMjcsIDI5LCAzNSwgMzgsIDQ2LCA1NiwgNjksIDgzCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19kY19sdW1pbmFuY2VbXSA9IHsKKwkwLCAwLCAxLCA1LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2RjX2x1bWluYW5jZVtdID0geworCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKKworc3RhdGljIGNvbnN0IHU4IGJpdHNfZGNfY2hyb21pbmFuY2VbXSA9IHsKKwkwLCAwLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2RjX2Nocm9taW5hbmNlW10gPSB7CisJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19hY19sdW1pbmFuY2VbXSA9IHsKKwkwLCAwLCAyLCAxLCAzLCAzLCAyLCA0LCAzLCA1LCA1LCA0LCA0LCAwLCAwLCAxLCAweDdkCit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2FjX2x1bWluYW5jZVtdID0geworCTB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MDUsIDB4MTIsCisJMHgyMSwgMHgzMSwgMHg0MSwgMHgwNiwgMHgxMywgMHg1MSwgMHg2MSwgMHgwNywKKwkweDIyLCAweDcxLCAweDE0LCAweDMyLCAweDgxLCAweDkxLCAweGExLCAweDA4LAorCTB4MjMsIDB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsIDB4NTIsIDB4ZDEsIDB4ZjAsCisJMHgyNCwgMHgzMywgMHg2MiwgMHg3MiwgMHg4MiwgMHgwOSwgMHgwYSwgMHgxNiwKKwkweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI1LCAweDI2LCAweDI3LCAweDI4LAorCTB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksCisJMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwgMHg0OSwKKwkweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LAorCTB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksCisJMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwKKwkweDdhLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LAorCTB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCisJMHg5OSwgMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKKwkweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LAorCTB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsCisJMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhkMiwgMHhkMywgMHhkNCwKKwkweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLCAweGUxLCAweGUyLAorCTB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsCisJMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywgMHhmOCwKKwkweGY5LCAweGZhCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19hY19jaHJvbWluYW5jZVtdID0geworCTAsIDAsIDIsIDEsIDIsIDQsIDQsIDMsIDQsIDcsIDUsIDQsIDQsIDAsIDEsIDIsIDB4NzcKK307CisKK3N0YXRpYyBjb25zdCB1OCB2YWxfYWNfY2hyb21pbmFuY2VbXSA9IHsKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDExLCAweDA0LCAweDA1LCAweDIxLAorCTB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsCisJMHgxMywgMHgyMiwgMHgzMiwgMHg4MSwgMHgwOCwgMHgxNCwgMHg0MiwgMHg5MSwKKwkweGExLCAweGIxLCAweGMxLCAweDA5LCAweDIzLCAweDMzLCAweDUyLCAweGYwLAorCTB4MTUsIDB4NjIsIDB4NzIsIDB4ZDEsIDB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsCisJMHhlMSwgMHgyNSwgMHhmMSwgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNiwKKwkweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDM1LCAweDM2LCAweDM3LCAweDM4LAorCTB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCisJMHg0OSwgMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKKwkweDU5LCAweDVhLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LAorCTB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisJMHg3OSwgMHg3YSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKwkweDg4LCAweDg5LCAweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAorCTB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCisJMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwKKwkweGI1LCAweGI2LCAweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLAorCTB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsCisJMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwKKwkweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LAorCTB4ZWEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCisJMHhmOSwgMHhmYQorfTsKKworLyogWmlnLXphZyBtYXBwaW5nIGZvciBxdWFudCB0YWJsZQorICoKKyAqIE9LLCBsZXQncyBkbyB0aGlzIG1hcHBpbmcgb24gdGhlIGFjdHVhbCB0YWJsZSBhYm92ZSBzbyBpdCBkb2Vzbid0IGhhdmUKKyAqIHRvIGJlIGRvbmUgb24gdGhlIGZseS4KKyAqLworc3RhdGljIGNvbnN0IGludCB6els2NF0gPSB7CisJMCwgICAxLCAgOCwgMTYsICA5LCAgMiwgIDMsIDEwLCAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCAgNCwgIDUsCisJMTIsIDE5LCAyNiwgMzMsIDQwLCA0OCwgNDEsIDM0LCAyNywgMjAsIDEzLCAgNiwgIDcsIDE0LCAyMSwgMjgsCisJMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LCAyOSwgMjIsIDE1LCAyMywgMzAsIDM3LCA0NCwgNTEsCisJNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LCA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjMKK307CisKK3N0YXRpYyBpbnQgY29weV9wYWNrYWdlcyh1MTYgKmRlc3QsIHUxNiAqc3JjLCBpbnQgcGtnX2NudCwgaW50IHNwYWNlKQoreworCWludCBpLCBjbnQgPSBwa2dfY250ICogMzI7CisKKwlpZiAoc3BhY2UgPCBjbnQpCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7ICsraSkKKwkJZGVzdFtpXSA9IF9fY3B1X3RvX2xlMTYoc3JjW2ldKTsKKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgbWpwZWdfZnJhbWVfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBxKQoreworCWludCBpLCBwID0gMDsKKworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4ZDg7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhkYjsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAyICsgNjU7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVswXTsKKwlmb3IgKGkgPSAxOyBpIDwgNjQ7ICsraSkKKwkJLyogYnVmW3ArK10gPSAoZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVtpXSAqIHEpID4+IDM7ICovCisJCWJ1ZltwKytdID0gKGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbenpbaV1dICogcSkgPj4gMzsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGMwOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDE3OworCWJ1ZltwKytdID0gODsKKwlidWZbcCsrXSA9IGdvLT5oZWlnaHQgPj4gODsKKwlidWZbcCsrXSA9IGdvLT5oZWlnaHQgJiAweGZmOworCWJ1ZltwKytdID0gZ28tPndpZHRoID4+IDg7CisJYnVmW3ArK10gPSBnby0+d2lkdGggJiAweGZmOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDE7CisJYnVmW3ArK10gPSAweDIyOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDI7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGM0OworCWJ1ZltwKytdID0gNDE4ID4+IDg7CisJYnVmW3ArK10gPSA0MTggJiAweGZmOworCWJ1ZltwKytdID0gMHgwMDsKKwltZW1jcHkoYnVmICsgcCwgYml0c19kY19sdW1pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2RjX2x1bWluYW5jZSwgc2l6ZW9mKHZhbF9kY19sdW1pbmFuY2UpKTsKKwlwICs9IHNpemVvZih2YWxfZGNfbHVtaW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4MDE7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfZGNfY2hyb21pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2RjX2Nocm9taW5hbmNlLCBzaXplb2YodmFsX2RjX2Nocm9taW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2RjX2Nocm9taW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4MTA7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfYWNfbHVtaW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9hY19sdW1pbmFuY2UsIHNpemVvZih2YWxfYWNfbHVtaW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2FjX2x1bWluYW5jZSk7CisJYnVmW3ArK10gPSAweDExOworCW1lbWNweShidWYgKyBwLCBiaXRzX2FjX2Nocm9taW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9hY19jaHJvbWluYW5jZSwgc2l6ZW9mKHZhbF9hY19jaHJvbWluYW5jZSkpOworCXAgKz0gc2l6ZW9mKHZhbF9hY19jaHJvbWluYW5jZSk7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhkYTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAxMjsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAxOworCWJ1ZltwKytdID0gMHgwMDsKKwlidWZbcCsrXSA9IDI7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDB4MTE7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gNjM7CisJYnVmW3ArK10gPSAwOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW50IGdlbl9tanBlZ2hkcl90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwl1OCAqYnVmOworCXUxNiBtZW0gPSAweDNlMDA7CisJdW5zaWduZWQgaW50IGFkZHIgPSAweDE5OworCWludCBzaXplID0gMCwgaSwgb2ZmID0gMCwgY2h1bms7CisKKwlidWYgPSBrbWFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlIDQwOTYgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCA0MDk2KTsKKworCWZvciAoaSA9IDE7IGkgPCAzMjsgKytpKSB7CisJCW1qcGVnX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgc2l6ZSwgaSk7CisJCXNpemUgKz0gODA7CisJfQorCWNodW5rID0gbWpwZWdfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBzaXplLCAxKTsKKwltZW1tb3ZlKGJ1ZiArIHNpemUsIGJ1ZiArIHNpemUgKyA4MCwgY2h1bmsgLSA4MCk7CisJc2l6ZSArPSBjaHVuayAtIDgwOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gc2l6ZSkKKwkJCWNodW5rID0gKHNpemUgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIrKyk7CisJCQltZW0gPSAweDNlMDA7CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KK2RvbmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgaW50IG1wZWcxX2ZyYW1lX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLAorCQlpbnQgbW9kdWxvLCBpbnQgcGljdF9zdHJ1Y3QsIGVudW0gbXBlZ19mcmFtZV90eXBlIGZyYW1lKQoreworCWludCBpLCBqLCBtYl9jb2RlLCBtYl9sZW47CisJaW50IHJvd3MgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IGdvLT5oZWlnaHQgLyAzMiA6IGdvLT5oZWlnaHQgLyAxNjsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKworCXN3aXRjaCAoZnJhbWUpIHsKKwljYXNlIFBGUkFNRToKKwkJbWJfY29kZSA9IDB4MTsKKwkJbWJfbGVuID0gMzsKKwkJYnJlYWs7CisJY2FzZSBCRlJBTUVfUFJFOgorCQltYl9jb2RlID0gMHgyOworCQltYl9sZW4gPSA0OworCQlicmVhazsKKwljYXNlIEJGUkFNRV9QT1NUOgorCQltYl9jb2RlID0gMHgyOworCQltYl9sZW4gPSAzOworCQlicmVhazsKKwljYXNlIEJGUkFNRV9CSURJUjoKKwkJbWJfY29kZSA9IDB4MjsKKwkJbWJfbGVuID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyoga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkgKi8KKwkJbWJfY29kZSA9IG1iX2xlbiA9IDA7CisJCWJyZWFrOworCX0KKworCUNPREVfQUREKGMsIGZyYW1lID09IFBGUkFNRSA/IDB4MiA6IDB4MywgMTMpOworCUNPREVfQUREKGMsIDB4ZmZmZiwgMTYpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4NyA6IDB4NCwgNCk7CisJaWYgKGZyYW1lICE9IFBGUkFNRSkKKwkJQ09ERV9BREQoYywgZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHg3IDogMHg0LCA0KTsKKwllbHNlCisJCUNPREVfQUREKGMsIDAsIDQpOyAvKiBJcyB0aGlzIHN1cHBvc2VkIHRvIGJlIGhlcmU/PyAqLworCUNPREVfQUREKGMsIDAsIDMpOyAvKiBXaGF0IGlzIHRoaXM/PyAqLworCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJaWYgKGogIT0gOCkKKwkJQ09ERV9BREQoYywgMCwgaik7CisKKwlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyKSB7CisJCUNPREVfQUREKGMsIDB4MSwgMjQpOworCQlDT0RFX0FERChjLCAweGI1LCA4KTsKKwkJQ09ERV9BREQoYywgMHg4NDQsIDEyKTsKKwkJQ09ERV9BREQoYywgZnJhbWUgPT0gUEZSQU1FID8gMHhmZiA6IDB4NDQsIDgpOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0LCA0KTsKKwkJCWlmIChnby0+ZHZkX21vZGUpCisJCQkJQ09ERV9BREQoYywgMHgwMDAsIDExKTsKKwkJCWVsc2UKKwkJCQlDT0RFX0FERChjLCAweDIwMCwgMTEpOworCQl9IGVsc2UgeworCQkJQ09ERV9BREQoYywgMHgzLCA0KTsKKwkJCUNPREVfQUREKGMsIDB4MjBjLCAxMSk7CisJCX0KKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChqICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBqKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcm93czsgKytpKSB7CisJCUNPREVfQUREKGMsIDEsIDI0KTsKKwkJQ09ERV9BREQoYywgaSArIDEsIDgpOworCQlDT0RFX0FERChjLCAweDIsIDYpOworCQlDT0RFX0FERChjLCAweDEsIDEpOworCQlDT0RFX0FERChjLCBtYl9jb2RlLCBtYl9sZW4pOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIDB4MSwgMik7CisJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlpZiAoZnJhbWUgPT0gQkZSQU1FX0JJRElSKSB7CisJCQlDT0RFX0FERChjLCAweDMsIDIpOworCQkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCUNPREVfQUREKGMsIDB4MywgMik7CisJCWZvciAoaiA9IChnby0+d2lkdGggPj4gNCkgLSAyOyBqID49IDMzOyBqIC09IDMzKQorCQkJQ09ERV9BREQoYywgMHg4LCAxMSk7CisJCUNPREVfQUREKGMsIGFkZHJpbmN0YWJbal1bMF0sIGFkZHJpbmN0YWJbal1bMV0pOworCQlDT0RFX0FERChjLCBtYl9jb2RlLCBtYl9sZW4pOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpIHsKKwkJCUNPREVfQUREKGMsIDB4MSwgMik7CisJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlpZiAoZnJhbWUgPT0gQkZSQU1FX0JJRElSKSB7CisJCQlDT0RFX0FERChjLCAweDMsIDIpOworCQkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCUNPREVfQUREKGMsIDB4MywgMik7CisKKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWogPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChqICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBqKTsKKwl9CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyA0ICogODsKKwlidWZbMl0gPSAweDAwOworCWJ1ZlszXSA9IDB4MDA7CisJYnVmWzRdID0gMHgwMTsKKwlidWZbNV0gPSAweDAwOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG1wZWcxX3NlcXVlbmNlX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KQoreworCWludCBpLCBhc3BlY3RfcmF0aW8sIHBpY3R1cmVfcmF0ZTsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKworCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEpIHsKKwkJc3dpdGNoIChnby0+YXNwZWN0X3JhdGlvKSB7CisJCWNhc2UgR083MDA3X1JBVElPXzRfMzoKKwkJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyAzIDogMjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDUgOiA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhc3BlY3RfcmF0aW8gPSAxOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQkJYXNwZWN0X3JhdGlvID0gMjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQkJYXNwZWN0X3JhdGlvID0gMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXNwZWN0X3JhdGlvID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXN3aXRjaCAoZ28tPnNlbnNvcl9mcmFtZXJhdGUpIHsKKwljYXNlIDI0MDAwOgorCQlwaWN0dXJlX3JhdGUgPSAxOworCQlicmVhazsKKwljYXNlIDI0MDI0OgorCQlwaWN0dXJlX3JhdGUgPSAyOworCQlicmVhazsKKwljYXNlIDI1MDI1OgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDYgOiAzOworCQlicmVhazsKKwljYXNlIDMwMDAwOgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDcgOiA0OworCQlicmVhazsKKwljYXNlIDMwMDMwOgorCQlwaWN0dXJlX3JhdGUgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IDggOiA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaWN0dXJlX3JhdGUgPSA1OyAvKiAzMCBmcHMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZGVmYXVsdCAqLworCQlicmVhazsKKwl9CisKKwlDT0RFX0FERChjLCBnby0+d2lkdGgsIDEyKTsKKwlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxMik7CisJQ09ERV9BREQoYywgYXNwZWN0X3JhdGlvLCA0KTsKKwlDT0RFX0FERChjLCBwaWN0dXJlX3JhdGUsIDQpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDIwMDAwIDogMHgzZmZmZiwgMTgpOworCUNPREVfQUREKGMsIDEsIDEpOworCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDExMiA6IDIwLCAxMCk7CisJQ09ERV9BREQoYywgMCwgMyk7CisKKwkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCWlmIChpICE9IDgpCisJCUNPREVfQUREKGMsIDAsIGkpOworCisJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMikgeworCQlDT0RFX0FERChjLCAweDEsIDI0KTsKKwkJQ09ERV9BREQoYywgMHhiNSwgOCk7CisJCUNPREVfQUREKGMsIDB4MTQ4LCAxMik7CisJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJCUNPREVfQUREKGMsIDB4MjAwMDEsIDIwKTsKKwkJZWxzZQorCQkJQ09ERV9BREQoYywgMHhhMDAwMSwgMjApOworCQlDT0RFX0FERChjLCAwLCAxNik7CisKKwkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCWlmIChpICE9IDgpCisJCQlDT0RFX0FERChjLCAwLCBpKTsKKworCQlpZiAoZXh0KSB7CisJCQlDT0RFX0FERChjLCAweDEsIDI0KTsKKwkJCUNPREVfQUREKGMsIDB4YjUyLCAxMik7CisJCQlDT0RFX0FERChjLCBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gMiA6IDEsIDMpOworCQkJQ09ERV9BREQoYywgMHgxMDUsIDkpOworCQkJQ09ERV9BREQoYywgMHg1MDUsIDE2KTsKKwkJCUNPREVfQUREKGMsIGdvLT53aWR0aCwgMTQpOworCQkJQ09ERV9BREQoYywgMSwgMSk7CisJCQlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxNCk7CisKKwkJCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCQkJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwkJCWlmIChpICE9IDgpCisJCQkJQ09ERV9BREQoYywgMCwgaSk7CisJCX0KKwl9CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyA0ICogODsKKwlidWZbMF0gPSBpICYgMHhmZjsKKwlidWZbMV0gPSBpID4+IDg7CisJYnVmWzJdID0gMHgwMDsKKwlidWZbM10gPSAweDAwOworCWJ1Zls0XSA9IDB4MDE7CisJYnVmWzVdID0gMHhiMzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnZW5fbXBlZzFoZHJfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJdTE2ICpjb2RlLCBpbnQgc3BhY2UsIGludCAqZnJhbWVsZW4pCit7CisJdTggKmJ1ZjsKKwl1MTYgbWVtID0gMHgzZTAwOworCXVuc2lnbmVkIGludCBhZGRyID0gMHgxOTsKKwlpbnQgaSwgb2ZmID0gMCwgY2h1bms7CisKKwlidWYgPSBrbWFsbG9jKDUxMjAsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlIDUxMjAgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCA1MTIwKTsKKwlmcmFtZWxlblswXSA9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmLCAwLCAxLCBQRlJBTUUpOworCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJZnJhbWVsZW5bMF0gKz0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBmcmFtZWxlblswXSAvIDgsCisJCQkJCQkJMCwgMiwgUEZSQU1FKTsKKwlidWZbMF0gPSBmcmFtZWxlblswXSAmIDB4ZmY7CisJYnVmWzFdID0gZnJhbWVsZW5bMF0gPj4gODsKKwlpID0gMzY4OworCWZyYW1lbGVuWzFdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCAxLCBCRlJBTUVfUFJFKTsKKwlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCWZyYW1lbGVuWzFdICs9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSArIGZyYW1lbGVuWzFdIC8gOCwKKwkJCQkJCQkwLCAyLCBCRlJBTUVfUFJFKTsKKwlidWZbaV0gPSBmcmFtZWxlblsxXSAmIDB4ZmY7CisJYnVmW2kgKyAxXSA9IGZyYW1lbGVuWzFdID4+IDg7CisJaSArPSAxNjMyOworCWZyYW1lbGVuWzJdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCAxLCBCRlJBTUVfUE9TVCk7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblsyXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGkgKyBmcmFtZWxlblsyXSAvIDgsCisJCQkJCQkJMCwgMiwgQkZSQU1FX1BPU1QpOworCWJ1ZltpXSA9IGZyYW1lbGVuWzJdICYgMHhmZjsKKwlidWZbaSArIDFdID0gZnJhbWVsZW5bMl0gPj4gODsKKwlpICs9IDE0MzI7CisJZnJhbWVsZW5bM10gPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIDEsIEJGUkFNRV9CSURJUik7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblszXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGkgKyBmcmFtZWxlblszXSAvIDgsCisJCQkJCQkJMCwgMiwgQkZSQU1FX0JJRElSKTsKKwlidWZbaV0gPSBmcmFtZWxlblszXSAmIDB4ZmY7CisJYnVmW2kgKyAxXSA9IGZyYW1lbGVuWzNdID4+IDg7CisJaSArPSAxNjMyICsgMTY7CisJbXBlZzFfc2VxdWVuY2VfaGVhZGVyKGdvLCBidWYgKyBpLCAwKTsKKwlpICs9IDQwOworCWZvciAoaSA9IDA7IGkgPCA1MTIwOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IDUxMjApCisJCQljaHVuayA9ICg1MTIwIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKTsKKwkJCWlmIChtZW0gKyBjaHVuayA9PSAweDQwMDApIHsKKwkJCQltZW0gPSAweDNlMDA7CisJCQkJKythZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9Citkb25lOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCB2dGlfYml0bGVuKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXVuc2lnbmVkIGludCBpLCBtYXhfdGltZV9pbmNyID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlOworCisJZm9yIChpID0gMzE7IChtYXhfdGltZV9pbmNyICYgKCgxIDw8IGkpIC0gMSkpID09IG1heF90aW1lX2luY3I7IC0taSk7CisJcmV0dXJuIGkgKyAxOworfQorCitzdGF0aWMgaW50IG1wZWc0X2ZyYW1lX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLAorCQlpbnQgbW9kdWxvLCBlbnVtIG1wZWdfZnJhbWVfdHlwZSBmcmFtZSkKK3sKKwlpbnQgaTsKKwlDT0RFX0dFTihjLCBidWYgKyA2KTsKKwlpbnQgbWJfY291bnQgPSAoZ28tPndpZHRoID4+IDQpICogKGdvLT5oZWlnaHQgPj4gNCk7CisKKwlDT0RFX0FERChjLCBmcmFtZSA9PSBQRlJBTUUgPyAweDEgOiAweDIsIDIpOworCWlmIChtb2R1bG8pCisJCUNPREVfQUREKGMsIDB4MSwgMSk7CisJQ09ERV9BREQoYywgMHgxLCAyKTsKKwlDT0RFX0FERChjLCAwLCB2dGlfYml0bGVuKGdvKSk7CisJQ09ERV9BREQoYywgMHgzLCAyKTsKKwlpZiAoZnJhbWUgPT0gUEZSQU1FKQorCQlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAweGMsIDExKTsKKwlpZiAoZnJhbWUgIT0gUEZSQU1FKQorCQlDT0RFX0FERChjLCAweDQsIDMpOworCWlmIChmcmFtZSAhPSBCRlJBTUVfRU1QVFkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1iX2NvdW50OyArK2kpIHsKKwkJCXN3aXRjaCAoZnJhbWUpIHsKKwkJCWNhc2UgUEZSQU1FOgorCQkJCUNPREVfQUREKGMsIDB4MSwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9QUkU6CisJCQkJQ09ERV9BREQoYywgMHg0NywgOCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9QT1NUOgorCQkJCUNPREVfQUREKGMsIDB4MjcsIDcpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRlJBTUVfQklESVI6CisJCQkJQ09ERV9BREQoYywgMHg1ZiwgOCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9FTVBUWTogLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogQnl0ZS1hbGlnbiB3aXRoIGEgemVybyBmb2xsb3dlZCBieSBvbmVzICovCisJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAoMSA8PCAoaSAtIDEpKSAtIDEsIGkgLSAxKTsKKworCWkgPSBDT0RFX0xFTkdUSChjKSArIDQgKiA4OworCWJ1ZlswXSA9IGkgJiAweGZmOworCWJ1ZlsxXSA9IGkgPj4gODsKKwlidWZbMl0gPSAweDAwOworCWJ1ZlszXSA9IDB4MDA7CisJYnVmWzRdID0gMHgwMTsKKwlidWZbNV0gPSAweGI2OworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG1wZWc0X3NlcXVlbmNlX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgaGVhZFtdID0geyAweDAwLCAweDAwLCAweDAxLCAweGIwLCBnby0+cGFsaSwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHhiNSwgMHgwOSwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgfTsKKwlpbnQgaSwgYXNwZWN0X3JhdGlvOworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGU7CisJQ09ERV9HRU4oYywgYnVmICsgMiArIHNpemVvZihoZWFkKSk7CisKKwlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwljYXNlIEdPNzAwN19SQVRJT180XzM6CisJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyAzIDogMjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDUgOiA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3BlY3RfcmF0aW8gPSAxOworCQlicmVhazsKKwl9CisKKwltZW1jcHkoYnVmICsgMiwgaGVhZCwgc2l6ZW9mKGhlYWQpKTsKKwlDT0RFX0FERChjLCAweDE5MSwgMTcpOworCUNPREVfQUREKGMsIGFzcGVjdF9yYXRpbywgNCk7CisJQ09ERV9BREQoYywgMHgxLCA0KTsKKwlDT0RFX0FERChjLCBmcHMsIDE2KTsKKwlDT0RFX0FERChjLCAweDMsIDIpOworCUNPREVfQUREKGMsIDEwMDEsIHZ0aV9iaXRsZW4oZ28pKTsKKwlDT0RFX0FERChjLCAxLCAxKTsKKwlDT0RFX0FERChjLCBnby0+d2lkdGgsIDEzKTsKKwlDT0RFX0FERChjLCAxLCAxKTsKKwlDT0RFX0FERChjLCBnby0+aGVpZ2h0LCAxMyk7CisJQ09ERV9BREQoYywgMHgyODMwLCAxNCk7CisKKwkvKiBCeXRlLWFsaWduICovCisJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlDT0RFX0FERChjLCAwLCAxKTsKKwlDT0RFX0FERChjLCAoMSA8PCAoaSAtIDEpKSAtIDEsIGkgLSAxKTsKKworCWkgPSBDT0RFX0xFTkdUSChjKSArIHNpemVvZihoZWFkKSAqIDg7CisJYnVmWzBdID0gaSAmIDB4ZmY7CisJYnVmWzFdID0gaSA+PiA4OworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdlbl9tcGVnNGhkcl90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQl1MTYgKmNvZGUsIGludCBzcGFjZSwgaW50ICpmcmFtZWxlbikKK3sKKwl1OCAqYnVmOworCXUxNiBtZW0gPSAweDNlMDA7CisJdW5zaWduZWQgaW50IGFkZHIgPSAweDE5OworCWludCBpLCBvZmYgPSAwLCBjaHVuazsKKworCWJ1ZiA9IGttYWxsb2MoNTEyMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgNTEyMCBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSBjb25zdHJ1Y3Rpb25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChidWYsIDAsIDUxMjApOworCWZyYW1lbGVuWzBdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYsIDAsIFBGUkFNRSk7CisJaSA9IDM2ODsKKwlmcmFtZWxlblsxXSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgQkZSQU1FX1BSRSk7CisJaSArPSAxNjMyOworCWZyYW1lbGVuWzJdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfUE9TVCk7CisJaSArPSAxNDMyOworCWZyYW1lbGVuWzNdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfQklESVIpOworCWkgKz0gMTYzMjsKKwltcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIEJGUkFNRV9FTVBUWSk7CisJaSArPSAxNjsKKwltcGVnNF9zZXF1ZW5jZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDApOworCWkgKz0gNDA7CisJZm9yIChpID0gMDsgaSA8IDUxMjA7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gNTEyMCkKKwkJCWNodW5rID0gKDUxMjAgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIpOworCQkJaWYgKG1lbSArIGNodW5rID09IDB4NDAwMCkgeworCQkJCW1lbSA9IDB4M2UwMDsKKwkJCQkrK2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KKwltZW0gPSAweDNlMDA7CisJYWRkciA9IGdvLT5pcGIgPyAweDE0ZjkgOiAweDBhZjk7CisJbWVtc2V0KGJ1ZiwgMCwgNTEyMCk7CisJZnJhbWVsZW5bNF0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiwgMSwgUEZSQU1FKTsKKwlpID0gMzY4OworCWZyYW1lbGVuWzVdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAxLCBCRlJBTUVfUFJFKTsKKwlpICs9IDE2MzI7CisJZnJhbWVsZW5bNl0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9QT1NUKTsKKwlpICs9IDE0MzI7CisJZnJhbWVsZW5bN10gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9CSURJUik7CisJaSArPSAxNjMyOworCW1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMSwgQkZSQU1FX0VNUFRZKTsKKwlpICs9IDE2OworCWZvciAoaSA9IDA7IGkgPCA1MTIwOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IDUxMjApCisJCQljaHVuayA9ICg1MTIwIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKTsKKwkJCWlmIChtZW0gKyBjaHVuayA9PSAweDQwMDApIHsKKwkJCQltZW0gPSAweDNlMDA7CisJCQkJKythZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9Citkb25lOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCBicmN0cmxfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJdTE2ICpjb2RlLCBpbnQgc3BhY2UsIGludCAqZnJhbWVsZW4pCit7CisJaW50IGNvbnZlcmdlX3NwZWVkID0gMDsKKwlpbnQgbGFtYmRhID0gKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRyB8fCBnby0+ZHZkX21vZGUpID8KKwkJCQkxMDAgOiAwOworCWludCBwZWFrX3JhdGUgPSA2ICogZ28tPmJpdHJhdGUgLyA1OworCWludCB2YnZfYnVmZmVyID0gZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8KKwkJCQlnby0+Yml0cmF0ZSA6CisJCQkJKGdvLT5kdmRfbW9kZSA/IDkwMDAwMCA6IHBlYWtfcmF0ZSk7CisJaW50IGZwcyA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZTsKKwlpbnQgcSA9IDA7CisJLyogQml6YXJyZSBtYXRoIGJlbG93IGRlcGVuZHMgb24gcm91bmRpbmcgZXJyb3JzIGluIGRpdmlzaW9uICovCisJdTMyIHNnb3BfZXhwdF9hZGRyID0gZ28tPmJpdHJhdGUgLyAzMiAqIChnby0+aXBiID8gMyA6IDEpICogMTAwMSAvIGZwczsKKwl1MzIgc2dvcF9wZWFrX2FkZHIgPSBwZWFrX3JhdGUgLyAzMiAqIDEwMDEgLyBmcHM7CisJdTMyIHRvdGFsX2V4cHRfYWRkciA9IGdvLT5iaXRyYXRlIC8gMzIgKiAxMDAwIC8gZnBzICogKGZwcyAvIDEwMDApOworCXUzMiB2YnZfYWxlcnRfYWRkciA9IHZidl9idWZmZXIgKiAzIC8gKDQgKiAzMik7CisJdTMyIGNwbHhbXSA9IHsKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCQlxID4gMCA/IHNnb3BfZXhwdF9hZGRyICogcSA6CisJCQkyICogZ28tPndpZHRoICogZ28tPmhlaWdodCAqIChnby0+aXBiID8gNiA6IDQpIC8gMzIsCisJCXEgPiAwID8gc2dvcF9leHB0X2FkZHIgKiBxIDoKKwkJCTIgKiBnby0+d2lkdGggKiBnby0+aGVpZ2h0ICogKGdvLT5pcGIgPyA2IDogNCkgLyAzMiwKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCX07CisJdTMyIGNhbGNfcSA9IHEgPiAwID8gcSA6IGNwbHhbMF0gLyBzZ29wX2V4cHRfYWRkcjsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYyMCwJCWdvLT5pcGIgPyBjb252ZXJnZV9zcGVlZF9pcGJbY29udmVyZ2Vfc3BlZWRdCisJCQkJCTogY29udmVyZ2Vfc3BlZWRfaXBbY29udmVyZ2Vfc3BlZWRdLAorCQkweEJGMjEsCQlnby0+aXBiID8gMiA6IDAsCisJCTB4QkYyMiwJCWdvLT5pcGIgPyBMQU1CREFfdGFibGVbMF1bbGFtYmRhIC8gMiArIDUwXQorCQkJCQk6IDMyNzY3LAorCQkweEJGMjMsCQlnby0+aXBiID8gTEFNQkRBX3RhYmxlWzFdW2xhbWJkYV0gOiAzMjc2NywKKwkJMHhCRjI0LAkJMzI3NjcsCisJCTB4QkYyNSwJCWxhbWJkYSA+IDk5ID8gMzI3NjcgOiBMQU1CREFfdGFibGVbM11bbGFtYmRhXSwKKwkJMHhCRjI2LAkJc2dvcF9leHB0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMjcsCQlzZ29wX2V4cHRfYWRkciA+PiAxNiwKKwkJMHhCRjI4LAkJc2dvcF9wZWFrX2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMjksCQlzZ29wX3BlYWtfYWRkciA+PiAxNiwKKwkJMHhCRjJBLAkJdmJ2X2FsZXJ0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMkIsCQl2YnZfYWxlcnRfYWRkciA+PiAxNiwKKwkJMHhCRjJDLAkJMCwKKwkJMHhCRjJELAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGMkUsCQl2YnZfYWxlcnRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYyRiwJCXZidl9hbGVydF9hZGRyID4+IDE2LAorCQkweEJGMzAsCQljcGx4WzBdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjMxLAkJY3BseFswXSA+PiAxNiwKKwkJMHhCRjMyLAkJY3BseFsxXSAmIDB4MDAwMEZGRkYsCisJCTB4QkYzMywJCWNwbHhbMV0gPj4gMTYsCisJCTB4QkYzNCwJCWNwbHhbMl0gJiAweDAwMDBGRkZGLAorCQkweEJGMzUsCQljcGx4WzJdID4+IDE2LAorCQkweEJGMzYsCQljcGx4WzNdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjM3LAkJY3BseFszXSA+PiAxNiwKKwkJMHhCRjM4LAkJMCwKKwkJMHhCRjM5LAkJMCwKKwkJMHhCRjNBLAkJdG90YWxfZXhwdF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjNCLAkJdG90YWxfZXhwdF9hZGRyID4+IDE2LAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYzQywJCXRvdGFsX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYzRCwJCXRvdGFsX2V4cHRfYWRkciA+PiAxNiwKKwkJMHhCRjNFLAkJMCwKKwkJMHhCRjNGLAkJMCwKKwkJMHhCRjQ4LAkJMCwKKwkJMHhCRjQ5LAkJMCwKKwkJMHhCRjRBLAkJY2FsY19xIDwgNCA/IDQgOiAoY2FsY19xID4gMTI0ID8gMTI0IDogY2FsY19xKSwKKwkJMHhCRjRCLAkJNCwKKwkJMHhCRjRDLAkJMCwKKwkJMHhCRjRELAkJMCwKKwkJMHhCRjRFLAkJMCwKKwkJMHhCRjRGLAkJMCwKKwkJMHhCRjUwLAkJMCwKKwkJMHhCRjUxLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGNDAsCQlzZ29wX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkY0MSwJCXNnb3BfZXhwdF9hZGRyID4+IDE2LAorCQkweEJGNDIsCQkwLAorCQkweEJGNDMsCQkwLAorCQkweEJGNDQsCQkwLAorCQkweEJGNDUsCQkwLAorCQkweEJGNDYsCQkoZ28tPndpZHRoID4+IDQpICogKGdvLT5oZWlnaHQgPj4gNCksCisJCTB4QkY0NywJCTAsCisJCTB4QkY2NCwJCTAsCisJCTB4QkY2NSwJCTAsCisJCTB4QkYxOCwJCWZyYW1lbGVuWzRdLAorCQkweEJGMTksCQlmcmFtZWxlbls1XSwKKwkJMHhCRjFBLAkJZnJhbWVsZW5bNl0sCisJCTB4QkYxQiwJCWZyYW1lbGVuWzddLAorCQkwLAkJMCwKKworI2lmIDAgLyogUmVtb3ZlIG9uY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCBtYXRjaGluZyAqLworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkY1NiwJCTQsCisJCTB4QkY1NywJCTAsCisJCTB4QkY1OCwJCTUsCisJCTB4QkY1OSwJCTAsCisJCTB4QkY1QSwJCTYsCisJCTB4QkY1QiwJCTAsCisJCTB4QkY1QywJCTgsCisJCTB4QkY1RCwJCTAsCisJCTB4QkY1RSwJCTEsCisJCTB4QkY1RiwJCTAsCisJCTB4QkY2MCwJCTEsCisJCTB4QkY2MSwJCTAsCisJCTB4QkY2MiwJCTAsCisJCTB4QkY2MywJCTAsCisJCTAsCQkwLAorI2Vsc2UKKwkJMHgyMDA4LAkJMHgwMDAwLAorCQkweEJGNTYsCQk0LAorCQkweEJGNTcsCQkwLAorCQkweEJGNTgsCQk1LAorCQkweEJGNTksCQkwLAorCQkweEJGNUEsCQk2LAorCQkweEJGNUIsCQkwLAorCQkweEJGNUMsCQk4LAorCQkweEJGNUQsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKyNlbmRpZgorCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjEwLAkJMCwKKwkJMHhCRjExLAkJMCwKKwkJMHhCRjEyLAkJMCwKKwkJMHhCRjEzLAkJMCwKKwkJMHhCRjE0LAkJMCwKKwkJMHhCRjE1LAkJMCwKKwkJMHhCRjE2LAkJMCwKKwkJMHhCRjE3LAkJMCwKKwkJMHhCRjdFLAkJMCwKKwkJMHhCRjdGLAkJMSwKKwkJMHhCRjUyLAkJZnJhbWVsZW5bMF0sCisJCTB4QkY1MywJCWZyYW1lbGVuWzFdLAorCQkweEJGNTQsCQlmcmFtZWxlblsyXSwKKwkJMHhCRjU1LAkJZnJhbWVsZW5bM10sCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCA2LCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGUgLyAxMDAwOworCWludCByb3dzID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyBnby0+aGVpZ2h0IC8gMzIgOiBnby0+aGVpZ2h0IC8gMTY7CisJaW50IGJyY193aW5kb3dfc2l6ZSA9IGZwczsKKwlpbnQgcV9taW4gPSAyLCBxX21heCA9IDMxOworCWludCBUSEFDQ29lZmZTZXQwID0gMDsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4YzAwMiwJCTB4MTRiNCwKKwkJMHhjMDAzLAkJMHgyOGI0LAorCQkweGMwMDQsCQkweDNjNWEsCisJCTB4ZGMwNSwJCTB4MmE3NywKKwkJMHhjNmMzLAkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gMCA6IDEpLAorCQkweGM2ODAsCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweGYxIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyAweDYxIDoKKwkJCQkJCQkJCTB4ZDMpLAorCQkweGM3ODAsCQkweDAxNDAsCisJCTB4ZTAwOSwJCTB4MDAwMSwKKwkJMHhjNjBmLAkJMHgwMDA4LAorCQkweGQ0ZmYsCQkweDAwMDIsCisJCTB4ZTQwMywJCTIzNDAsCisJCTB4ZTQwNiwJCTc1LAorCQkweGQ0MTEsCQkweDAwMDEsCisJCTB4ZDQxMCwJCTB4YTFkNiwKKwkJMHgwMDAxLAkJMHgyODAxLAorCisJCTB4MjAwZCwJCTB4MDAwMCwKKwkJMHhlNDAyLAkJMHgwMThiLAorCQkweGU0MDEsCQkweDhiMDEsCisJCTB4ZDQ3MiwJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCQlHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCQkJKCFnby0+aW50ZXJsYWNlX2NvZGluZykgPworCQkJCQkweDAxYjAgOiAweDAxNzAsCisJCTB4ZDQ3NSwJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCQlHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCQkJKCFnby0+aW50ZXJsYWNlX2NvZGluZykgPworCQkJCQkweDAwMDggOiAweDAwMDksCisJCTB4YzQwNCwJCWdvLT5pbnRlcmxhY2VfY29kaW5nID8gMHg0NCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4MTEgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgPyAweDAyIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHgwNCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzICA/IDB4MDggOgorCQkJCQkJCQkgICAgIDB4MjApKSkpLAorCQkweGJmMGEsCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gOCA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSA/IDEgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAyIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyA0IDogMTYpKSkpIHwKKwkJCQkoKGdvLT5yZXBlYXRfc2VxaGVhZCA/IDEgOiAwKSA8PCA2KSB8CisJCQkJKChnby0+ZHZkX21vZGUgPyAxIDogMCkgPDwgOSkgfAorCQkJCSgoZ28tPmdvcF9oZWFkZXJfZW5hYmxlID8gMSA6IDApIDw8IDEwKSwKKwkJMHhiZjBiLAkJMCwKKwkJMHhkZDVhLAkJZ28tPmlwYiA/IDB4MTQgOiAweDBhLAorCQkweGJmMGMsCQkwLAorCQkweGJmMGQsCQkwLAorCQkweGM2ODMsCQlUSEFDQ29lZmZTZXQwLAorCQkweGM0MGEsCQkoZ28tPndpZHRoIDw8IDQpIHwgcm93cywKKwkJMHhlMDFhLAkJZ28tPmJvYXJkX2luZm8tPmhwaV9idWZmZXJfY2FwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDA4LAkJMCwKKwkJMHhlNDAyLAkJMHg4OCwKKwkJMHhlNDAxLAkJMHg4ZjAxLAorCQkweGJmNmEsCQkwLAorCQkweGJmNmIsCQkwLAorCQkweGJmNmMsCQkwLAorCQkweGJmNmQsCQkwLAorCQkweGJmNmUsCQkwLAorCQkweGJmNmYsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkwLAorCQkweGJmNjYsCQlicmNfd2luZG93X3NpemUsCisJCTB4YmY2NywJCTAsCisJCTB4YmY2OCwJCXFfbWluLAorCQkweGJmNjksCQlxX21heCwKKwkJMHhiZmUwLAkJMCwKKwkJMHhiZmUxLAkJMCwKKwkJMHhiZmUyLAkJMCwKKwkJMHhiZmUzLAkJZ28tPmlwYiA/IDMgOiAxLAorCQkweGMwMzEsCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgPyAxIDogMCwKKwkJMHhjMDFjLAkJMHgxZiwKKwkJMHhkZDhjLAkJMHgxNSwKKwkJMHhkZDk0LAkJMHgxNSwKKwkJMHhkZDg4LAkJZ28tPmlwYiA/IDB4MTQwMSA6IDB4MGEwMSwKKwkJMHhkZDkwLAkJZ28tPmlwYiA/IDB4MTQwMSA6IDB4MGEwMSwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMCwKKwkJMHhiZmU0LAkJMCwKKwkJMHhiZmU1LAkJMCwKKwkJMHhiZmU2LAkJMCwKKwkJMHhiZmU3LAkJZnBzIDw8IDgsCisJCTB4YmZlOCwJCTB4M2EwMCwKKwkJMHhiZmU5LAkJMCwKKwkJMHhiZmVhLAkJMCwKKwkJMHhiZmViLAkJMCwKKwkJMHhiZmVjLAkJKGdvLT5pbnRlcmxhY2VfY29kaW5nID8gMSA8PCAxNSA6IDApIHwKKwkJCQkJKGdvLT5tb2RldF9lbmFibGUgPyAweGEgOiAwKSB8CisJCQkJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJCUdPNzAwN19TRU5TT1JfVkJJID8gMSA6IDApLAorCQkweGJmZWQsCQkwLAorCQkweGJmZWUsCQkwLAorCQkweGJmZWYsCQkwLAorCQkweGJmZjAsCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQkJR083MDA3X1NFTlNPUl9UViA/IDB4ZjA2MCA6IDB4YjA2MCwKKwkJMHhiZmYxLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDUsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBzZXFoZWFkX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlLAorCWludCAoKnNlcXVlbmNlX2hlYWRlcl9mdW5jKShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZXh0KSkKK3sKKwlpbnQgdm9wX3RpbWVfaW5jcmVtZW50X2JpdGxlbmd0aCA9IHZ0aV9iaXRsZW4oZ28pOworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGUgKgorCQkJCQkoZ28tPmludGVybGFjZV9jb2RpbmcgPyAyIDogMSk7CisJdW5zaWduZWQgY2hhciBidWZbNDBdID0geyB9OworCWludCBsZW4gPSBzZXF1ZW5jZV9oZWFkZXJfZnVuYyhnbywgYnVmLCAxKTsKKwl1MTYgcGFja1tdID0geworCQkweDIwMDYsCQkwLAorCQkweGJmMDgsCQlmcHMsCisJCTB4YmYwOSwJCTAsCisJCTB4YmZmMiwJCXZvcF90aW1lX2luY3JlbWVudF9iaXRsZW5ndGgsCisJCTB4YmZmMywJCSgxIDw8IHZvcF90aW1lX2luY3JlbWVudF9iaXRsZW5ndGgpIC0gMSwKKwkJMHhiZmU2LAkJMCwKKwkJMHhiZmU3LAkJKGZwcyAvIDEwMDApIDw8IDgsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDA3LAkJMCwKKwkJMHhjODAwLAkJYnVmWzJdIDw8IDggfCBidWZbM10sCisJCTB4YzgwMSwJCWJ1Zls0XSA8PCA4IHwgYnVmWzVdLAorCQkweGM4MDIsCQlidWZbNl0gPDwgOCB8IGJ1Zls3XSwKKwkJMHhjODAzLAkJYnVmWzhdIDw8IDggfCBidWZbOV0sCisJCTB4YzQwNiwJCTY0LAorCQkweGM0MDcsCQlsZW4gLSA2NCwKKwkJMHhjNjFiLAkJMSwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTAsCisJCTB4YzgwOCwJCWJ1ZlsxMF0gPDwgOCB8IGJ1ZlsxMV0sCisJCTB4YzgwOSwJCWJ1ZlsxMl0gPDwgOCB8IGJ1ZlsxM10sCisJCTB4YzgwYSwJCWJ1ZlsxNF0gPDwgOCB8IGJ1ZlsxNV0sCisJCTB4YzgwYiwJCWJ1ZlsxNl0gPDwgOCB8IGJ1ZlsxN10sCisJCTB4YzgwYywJCWJ1ZlsxOF0gPDwgOCB8IGJ1ZlsxOV0sCisJCTB4YzgwZCwJCWJ1ZlsyMF0gPDwgOCB8IGJ1ZlsyMV0sCisJCTB4YzgwZSwJCWJ1ZlsyMl0gPDwgOCB8IGJ1ZlsyM10sCisJCTB4YzgwZiwJCWJ1ZlsyNF0gPDwgOCB8IGJ1ZlsyNV0sCisJCTB4YzgxMCwJCWJ1ZlsyNl0gPDwgOCB8IGJ1ZlsyN10sCisJCTB4YzgxMSwJCWJ1ZlsyOF0gPDwgOCB8IGJ1ZlsyOV0sCisJCTB4YzgxMiwJCWJ1ZlszMF0gPDwgOCB8IGJ1ZlszMV0sCisJCTB4YzgxMywJCWJ1ZlszMl0gPDwgOCB8IGJ1ZlszM10sCisJCTB4YzgxNCwJCWJ1ZlszNF0gPDwgOCB8IGJ1ZlszNV0sCisJCTB4YzgxNSwJCWJ1ZlszNl0gPDwgOCB8IGJ1ZlszN10sCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDMsIHNwYWNlKTsKK30KKworc3RhdGljIGludCByZWxhdGl2ZV9wcmltZShpbnQgYmlnLCBpbnQgbGl0dGxlKQoreworCWludCByZW1haW5kZXI7CisKKwl3aGlsZSAobGl0dGxlICE9IDApIHsKKwkJcmVtYWluZGVyID0gYmlnICUgbGl0dGxlOworCQliaWcgPSBsaXR0bGU7CisJCWxpdHRsZSA9IHJlbWFpbmRlcjsKKwl9CisJcmV0dXJuIGJpZzsKK30KKworc3RhdGljIGludCBhdnN5bmNfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IGFyYXRlID0gZ28tPmJvYXJkX2luZm8tPmF1ZGlvX3JhdGUgKiAxMDAxICogZ28tPmZwc19zY2FsZTsKKwlpbnQgcmF0aW8gPSBhcmF0ZSAvIGdvLT5zZW5zb3JfZnJhbWVyYXRlOworCWludCBhZGpyYXRpbyA9IHJhdGlvICogMjE1IC8gMTAwOworCWludCBycHJpbWUgPSByZWxhdGl2ZV9wcmltZShnby0+c2Vuc29yX2ZyYW1lcmF0ZSwKKwkJCQkJYXJhdGUgJSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSk7CisJaW50IGYxID0gKGFyYXRlICUgZ28tPnNlbnNvcl9mcmFtZXJhdGUpIC8gcnByaW1lOworCWludCBmMiA9IChnby0+c2Vuc29yX2ZyYW1lcmF0ZSAtIGFyYXRlICUgZ28tPnNlbnNvcl9mcmFtZXJhdGUpIC8gcnByaW1lOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwZSwJCTAsCisJCTB4YmY5OCwJCSh1MTYpKCgtYWRqcmF0aW8pICYgMHhmZmZmKSwKKwkJMHhiZjk5LAkJKHUxNikoKC1hZGpyYXRpbykgPj4gMTYpLAorCQkweGJmOTIsCQkwLAorCQkweGJmOTMsCQkwLAorCQkweGJmZjQsCQlmMSA+IGYyID8gZjEgOiBmMiwKKwkJMHhiZmY1LAkJZjEgPCBmMiA/IGYxIDogZjIsCisJCTB4YmZmNiwJCWYxIDwgZjIgPyByYXRpbyA6IHJhdGlvICsgMSwKKwkJMHhiZmY3LAkJZjEgPiBmMiA/IHJhdGlvIDogcmF0aW8gKyAxLAorCQkweGJmZjgsCQkwLAorCQkweGJmZjksCQkwLAorCQkweGJmZmEsCQlhZGpyYXRpbyAmIDB4ZmZmZiwKKwkJMHhiZmZiLAkJYWRqcmF0aW8gPj4gMTYsCisJCTB4YmY5NCwJCTAsCisJCTB4YmY5NSwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCAxLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgZmluYWxfcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IHJvd3MgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IGdvLT5oZWlnaHQgLyAzMiA6IGdvLT5oZWlnaHQgLyAxNjsKKwl1MTYgcGFja1tdID0geworCQkweDgwMDAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTAsCisJCTIsCisJCSgoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJCQkoIWdvLT5pbnRlcmxhY2VfY29kaW5nKSA/CisJCQkJCSgxIDw8IDE0KSB8ICgxIDw8IDkpIDogMCkgfAorCQkJKChnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPyAxIDogMCkgPDwgOCkgfAorCQkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCUdPNzAwN19TRU5TT1JfQ09ORklHX01BU0spLAorCQkoKGdvLT5lbmNvZGVyX3ZfaGFsdmUgPyAxIDogMCkgPDwgMTQpIHwKKwkJCShnby0+ZW5jb2Rlcl92X2hhbHZlID8gcm93cyA8PCA5IDogcm93cyA8PCA4KSB8CisJCQkoZ28tPmVuY29kZXJfaF9oYWx2ZSA/IDEgPDwgNiA6IDApIHwKKwkJCShnby0+ZW5jb2Rlcl9oX2hhbHZlID8gZ28tPndpZHRoID4+IDMgOiBnby0+d2lkdGggPj4gNCksCisJCSgxIDw8IDE1KSB8IChnby0+ZW5jb2Rlcl92X29mZnNldCA8PCA2KSB8CisJCQkoMSA8PCA3KSB8IChnby0+ZW5jb2Rlcl9oX29mZnNldCA+PiAyKSwKKwkJKDEgPDwgNiksCisJCTAsCisJCTAsCisJCSgoZ28tPmZwc19zY2FsZSAtIDEpIDw8IDgpIHwKKwkJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UViA/CisJCQkJCQkoMSA8PCA3KSA6IDApIHwKKwkJCTB4NDEsCisJCWdvLT5pcGIgPyAweGQ0YyA6IDB4MzZiLAorCQkocm93cyA8PCA4KSB8IChnby0+d2lkdGggPj4gNCksCisJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4MDQwNCA6IDAsCisJCSgxIDw8IDE1KSB8ICgoZ28tPmludGVybGFjZV9jb2RpbmcgPyAxIDogMCkgPDwgMTMpIHwKKwkJCSgoZ28tPmNsb3NlZF9nb3AgPyAxIDogMCkgPDwgMTIpIHwKKwkJCSgoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMSA6IDApIDw8IDExKSB8CisJCS8qCSgxIDw8IDkpIHwgICAqLworCQkJKChnby0+aXBiID8gMyA6IDApIDw8IDcpIHwKKwkJCSgoZ28tPm1vZGV0X2VuYWJsZSA/IDEgOiAwKSA8PCAyKSB8CisJCQkoKGdvLT5kdmRfbW9kZSA/IDEgOiAwKSA8PCAxKSB8IDEsCisJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgPyAweDg5YTAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4ODlhMCA6CisJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8gMHg4OWEwIDoKKwkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweDg5MjAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gMHg4OTIwIDogMCkpKSkpLAorCQlnby0+aXBiID8gMHgxZjE1IDogMHgxZjBiLAorCQlnby0+aXBiID8gMHgwMDE1IDogMHgwMDBiLAorCQlnby0+aXBiID8gMHhhODAwIDogMHg1ODAwLAorCQkweGZmZmYsCisJCTB4MDAyMCArIDB4MDM0YiAqIDAsCisJCTB4MDAyMCArIDB4MDM0YiAqIDEsCisJCTB4MDAyMCArIDB4MDM0YiAqIDIsCisJCTB4MDAyMCArIDB4MDM0YiAqIDMsCisJCTB4MDAyMCArIDB4MDM0YiAqIDQsCisJCTB4MDAyMCArIDB4MDM0YiAqIDUsCisJCWdvLT5pcGIgPyAoZ28tPmdvcF9zaXplIC8gMykgOiBnby0+Z29wX3NpemUsCisJCShnby0+aGVpZ2h0ID4+IDQpICogKGdvLT53aWR0aCA+PiA0KSAqIDExMCAvIDEwMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMSwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IGF1ZGlvX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCBjbG9ja19jb25maWcgPSAoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmCisJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgPyAxIDogMCkgPDwgMTEpIHwKKwkJCSgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYKKwkJCQlHTzcwMDdfQVVESU9fT0tJX01PREUgPyAxIDogMCkgPDwgOCkgfAorCQkJKCgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2JjbGtfZGl2IC8gNCkgLSAxKSA8PCA0KSB8CisJCQkoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX21haW5fZGl2IC0gMSk7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDBkLAkJMCwKKwkJMHg5MDAyLAkJMCwKKwkJMHg5MDAyLAkJMCwKKwkJMHg5MDMxLAkJMCwKKwkJMHg5MDMyLAkJMCwKKwkJMHg5MDMzLAkJMCwKKwkJMHg5MDM0LAkJMCwKKwkJMHg5MDM1LAkJMCwKKwkJMHg5MDM2LAkJMCwKKwkJMHg5MDM3LAkJMCwKKwkJMHg5MDQwLAkJMCwKKwkJMHg5MDAwLAkJY2xvY2tfY29uZmlnLAorCQkweDkwMDEsCQkoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYgMHhmZmZmKSB8CisJCQkJCSgxIDw8IDkpLAorCQkweDkwMDAsCQkoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmCisJCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiA/CisJCQkJCQkxIDogMCkgPDwgMTApIHwKKwkJCQkJY2xvY2tfY29uZmlnLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTB4MjAwNSwJCTAsCisJCTB4OTA0MSwJCTAsCisJCTB4OTA0MiwJCTI1NiwKKwkJMHg5MDQzLAkJMCwKKwkJMHg5MDQ0LAkJMTYsCisJCTB4OTA0NSwJCTE2LAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMiwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IG1vZGV0X3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCByZXQsIG1iLCBpLCBhZGRyLCBjbnQgPSAwOworCXUxNiBwYWNrWzMyXTsKKwl1MTYgdGhyZXNob2xkc1tdID0geworCQkweDIwMGUsCQkwLAorCQkweGJmODIsCQlnby0+bW9kZXRbMF0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODMsCQlnby0+bW9kZXRbMV0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODQsCQlnby0+bW9kZXRbMl0ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODUsCQlnby0+bW9kZXRbM10ucGl4ZWxfdGhyZXNob2xkLAorCQkweGJmODYsCQlnby0+bW9kZXRbMF0ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjg3LAkJZ28tPm1vZGV0WzFdLm1vdGlvbl90aHJlc2hvbGQsCisJCTB4YmY4OCwJCWdvLT5tb2RldFsyXS5tb3Rpb25fdGhyZXNob2xkLAorCQkweGJmODksCQlnby0+bW9kZXRbM10ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjhhLAkJZ28tPm1vZGV0WzBdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhiLAkJZ28tPm1vZGV0WzFdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhjLAkJZ28tPm1vZGV0WzJdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhkLAkJZ28tPm1vZGV0WzNdLm1iX3RocmVzaG9sZCwKKwkJMHhiZjhlLAkJMCwKKwkJMHhiZjhmLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldCA9IGNvcHlfcGFja2FnZXMoY29kZSwgdGhyZXNob2xkcywgMSwgc3BhY2UpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisJY250ICs9IHJldDsKKworCWFkZHIgPSAweGJhYzA7CisJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwlpID0gMDsKKwlmb3IgKG1iID0gMDsgbWIgPCAxNjI0OyArK21iKSB7CisJCXBhY2tbaSAqIDIgKyAzXSA8PD0gMjsKKwkJcGFja1tpICogMiArIDNdIHw9IGdvLT5tb2RldF9tYXBbbWJdOworCQlpZiAobWIgJSA4ICE9IDcpCisJCQljb250aW51ZTsKKwkJcGFja1tpICogMiArIDJdID0gYWRkcisrOworCQkrK2k7CisJCWlmIChpID09IDEwIHx8IG1iID09IDE2MjMpIHsKKwkJCXBhY2tbMF0gPSAweDIwMDAgfCBpOworCQkJcmV0ID0gY29weV9wYWNrYWdlcyhjb2RlICsgY250LCBwYWNrLCAxLCBzcGFjZSAtIGNudCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQljbnQgKz0gcmV0OworCQkJaSA9IDA7CisJCQltZW1zZXQocGFjaywgMCwgNjQpOworCQl9CisJCXBhY2tbaSAqIDIgKyAzXSA9IDA7CisJfQorCisJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwlpID0gMDsKKwlmb3IgKGFkZHIgPSAweGJiOTA7IGFkZHIgPCAweGJiZmE7ICsrYWRkcikgeworCQlwYWNrW2kgKiAyICsgMl0gPSBhZGRyOworCQlwYWNrW2kgKiAyICsgM10gPSAwOworCQkrK2k7CisJCWlmIChpID09IDEwIHx8IGFkZHIgPT0gMHhiYmY5KSB7CisJCQlwYWNrWzBdID0gMHgyMDAwIHwgaTsKKwkJCXJldCA9IGNvcHlfcGFja2FnZXMoY29kZSArIGNudCwgcGFjaywgMSwgc3BhY2UgLSBjbnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJY250ICs9IHJldDsKKwkJCWkgPSAwOworCQkJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwkJfQorCX0KKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IGRvX3NwZWNpYWwoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiB0eXBlLCB1MTYgKmNvZGUsIGludCBzcGFjZSwKKwkJCWludCAqZnJhbWVsZW4pCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTUEVDSUFMX0ZSTV9IRUFEOgorCQlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01KUEVHOgorCQkJcmV0dXJuIGdlbl9tanBlZ2hkcl90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJcmV0dXJuIGdlbl9tcGVnMWhkcl90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwKKwkJCQkJCQkJZnJhbWVsZW4pOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCQlyZXR1cm4gZ2VuX21wZWc0aGRyX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQkJCQlmcmFtZWxlbik7CisJCX0KKwljYXNlIFNQRUNJQUxfQlJDX0NUUkw6CisJCXJldHVybiBicmN0cmxfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsIGZyYW1lbGVuKTsKKwljYXNlIFNQRUNJQUxfQ09ORklHOgorCQlyZXR1cm4gY29uZmlnX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfU0VRSEVBRDoKKwkJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJcmV0dXJuIHNlcWhlYWRfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsCisJCQkJCW1wZWcxX3NlcXVlbmNlX2hlYWRlcik7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJCXJldHVybiBzZXFoZWFkX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQltcGVnNF9zZXF1ZW5jZV9oZWFkZXIpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFNQRUNJQUxfQVZfU1lOQzoKKwkJcmV0dXJuIGF2c3luY190b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJY2FzZSBTUEVDSUFMX0ZJTkFMOgorCQlyZXR1cm4gZmluYWxfcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCWNhc2UgU1BFQ0lBTF9BVURJTzoKKwkJcmV0dXJuIGF1ZGlvX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfTU9ERVQ6CisJCXJldHVybiBtb2RldF90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJfQorCXByaW50ayhLRVJOX0VSUgorCQkiZ283MDA3OiBmaXJtd2FyZSBmaWxlIGNvbnRhaW5zIHVuc3VwcG9ydGVkIGZlYXR1cmUgJTA0eFxuIiwKKwkJdHlwZSk7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ283MDA3X2NvbnN0cnVjdF9md19pbWFnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKipmdywgaW50ICpmd2xlbikKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXUxNiAqY29kZSwgKnNyYzsKKwlpbnQgZnJhbWVsZW5bOF0gPSB7IH07IC8qIGhvbGRzIHRoZSBsZW5ndGhzIG9mIGVtcHR5IGZyYW1lIHRlbXBsYXRlcyAqLworCWludCBjb2Rlc3BhY2UgPSA2NCAqIDEwMjQsIGkgPSAwLCBzcmNsZW4sIGNodW5rX2xlbiwgY2h1bmtfZmxhZ3M7CisJaW50IG1vZGVfZmxhZzsKKwlpbnQgcmV0OworCisJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJY2FzZSBHTzcwMDdfRk9STUFUX01KUEVHOgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTUpQRUc7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJbW9kZV9mbGFnID0gRkxBR19NT0RFX01QRUcxOworCQlicmVhazsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCW1vZGVfZmxhZyA9IEZMQUdfTU9ERV9NUEVHMjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTVBFRzQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBnby0+Ym9hcmRfaW5mby0+ZmlybXdhcmUsIGdvLT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNzogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZnJvbSBmaWxlIFwiJXNcIlxuIiwKKwkJCWdvLT5ib2FyZF9pbmZvLT5maXJtd2FyZSk7CisJCXJldHVybiAtMTsKKwl9CisJY29kZSA9IGttYWxsb2MoY29kZXNwYWNlICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIGNvbnN0cnVjdGlvblxuIiwgY29kZXNwYWNlICogMik7CisJCWdvdG8gZndfZmFpbGVkOworCX0KKwltZW1zZXQoY29kZSwgMCwgY29kZXNwYWNlICogMik7CisJc3JjID0gKHUxNiAqKWZ3X2VudHJ5LT5kYXRhOworCXNyY2xlbiA9IGZ3X2VudHJ5LT5zaXplIC8gMjsKKwl3aGlsZSAoc3JjbGVuID49IDIpIHsKKwkJY2h1bmtfZmxhZ3MgPSBfX2xlMTZfdG9fY3B1KHNyY1swXSk7CisJCWNodW5rX2xlbiA9IF9fbGUxNl90b19jcHUoc3JjWzFdKTsKKwkJaWYgKGNodW5rX2xlbiArIDIgPiBzcmNsZW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBmaXJtd2FyZSBmaWxlIFwiJXNcIiAiCisJCQkJCSJhcHBlYXJzIHRvIGJlIGNvcnJ1cHRlZFxuIiwKKwkJCQkJZ28tPmJvYXJkX2luZm8tPmZpcm13YXJlKTsKKwkJCWdvdG8gZndfZmFpbGVkOworCQl9CisJCWlmIChjaHVua19mbGFncyAmIG1vZGVfZmxhZykgeworCQkJaWYgKGNodW5rX2ZsYWdzICYgRkxBR19TUEVDSUFMKSB7CisJCQkJcmV0ID0gZG9fc3BlY2lhbChnbywgX19sZTE2X3RvX2NwdShzcmNbMl0pLAorCQkJCQkmY29kZVtpXSwgY29kZXNwYWNlIC0gaSwgZnJhbWVsZW4pOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBpbnN1ZmZpY2llbnQgIgorCQkJCQkJCSJtZW1vcnkgZm9yIGZpcm13YXJlICIKKwkJCQkJCQkiY29uc3RydWN0aW9uXG4iKTsKKwkJCQkJZ290byBmd19mYWlsZWQ7CisJCQkJfQorCQkJCWkgKz0gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29kZXNwYWNlIC0gaSA8IGNodW5rX2xlbikgeworCQkJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogaW5zdWZmaWNpZW50ICIKKwkJCQkJCQkibWVtb3J5IGZvciBmaXJtd2FyZSAiCisJCQkJCQkJImNvbnN0cnVjdGlvblxuIik7CisJCQkJCWdvdG8gZndfZmFpbGVkOworCQkJCX0KKwkJCQltZW1jcHkoJmNvZGVbaV0sICZzcmNbMl0sIGNodW5rX2xlbiAqIDIpOworCQkJCWkgKz0gY2h1bmtfbGVuOworCQkJfQorCQl9CisJCXNyY2xlbiAtPSBjaHVua19sZW4gKyAyOworCQlzcmMgKz0gY2h1bmtfbGVuICsgMjsKKwl9CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJKmZ3ID0gKHU4ICopY29kZTsKKwkqZndsZW4gPSBpICogMjsKKwlyZXR1cm4gMDsKKworZndfZmFpbGVkOgorCWtmcmVlKGNvZGUpOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiYWFlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKKy8qKioqKioqKioqKioqKiBSZWdpc3RyYXRpb24gaW50ZXJmYWNlIGZvciBJMkMgY2xpZW50IGRyaXZlcnMgKioqKioqKioqKioqKiovCisKKy8qIFNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGF1dG8tcHJvYmUgdGhlIEkyQyBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgSTJDCisgKiBidXMgb24gdGhlIGdvNzAwNywgd2UgaGF2ZSB0aGlzIHNpbGx5IGxpdHRsZSByZWdpc3RyYXRpb24gc3lzdGVtIHRoYXQKKyAqIGNsaWVudCBkcml2ZXJzIGNhbiB1c2UgdG8gcmVnaXN0ZXIgdGhlaXIgSTJDIGRyaXZlciBJRCBhbmQgdGhlaXIKKyAqIGRldGVjdF9jbGllbnQgZnVuY3Rpb24gKHRoZSBvbmUgdGhhdCdzIG5vcm1hbGx5IHBhc3NlZCB0byBpMmNfcHJvYmUpLgorICoKKyAqIFdoZW4gYSBuZXcgZ283MDA3IGRldmljZSBpcyBjb25uZWN0ZWQsIHdlIGNhbiBsb29rIHVwIGluIGEgYm9hcmQgaW5mbworICogdGFibGUgYnkgdGhlIFVTQiBvciBQQ0kgdmVuZG9yL3Byb2R1Y3QvcmV2aXNpb24gSUQgdG8gZGV0ZXJtaW5lCisgKiB3aGljaCBJMkMgY2xpZW50IG1vZHVsZSB0byBsb2FkLiAgVGhlIGNsaWVudCBkcml2ZXIgbW9kdWxlIHdpbGwgcmVnaXN0ZXIKKyAqIGl0c2VsZiBoZXJlLCBhbmQgdGhlbiB3ZSBjYW4gY2FsbCB0aGUgcmVnaXN0ZXJlZCBkZXRlY3RfY2xpZW50IGZ1bmN0aW9uCisgKiB0byBmb3JjZS1sb2FkIGEgbmV3IGNsaWVudCBhdCB0aGUgYWRkcmVzcyBsaXN0ZWQgaW4gdGhlIGJvYXJkIGluZm8gdGFibGUuCisgKgorICogUmVhbGx5IHRoZSBJMkMgc3Vic3lzdGVtIHNob3VsZCBoYXZlIGEgd2F5IHRvIGZvcmNlLWxvYWQgSTJDIGNsaWVudAorICogZHJpdmVycyB3aGVuIHdlIGhhdmUgYSBwcmlvcmkga25vd2xlZGdlIG9mIHdoYXQncyBvbiB0aGUgYnVzLCBlc3BlY2lhbGx5CisgKiBzaW5jZSB0aGUgZXhpc3RpbmcgSTJDIGF1dG8tcHJvYmUgbWVjaGFuaXNtIGlzIHNvIGhva2V5LCBidXQgd2UnbGwgdXNlCisgKiBvdXIgb3duIG1lY2hhbmlzbSBmb3IgdGhlIHRpbWUgYmVpbmcuICovCisKK3N0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIgeworCXVuc2lnbmVkIGludCBpZDsKKwlmb3VuZF9wcm9jIGZvdW5kX3Byb2M7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RhdGljIExJU1RfSEVBRChpMmNfY2xpZW50X2RyaXZlcnMpOworc3RhdGljIERFQ0xBUkVfTVVURVgoaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKworLyogQ2xpZW50IGRyaXZlcnMgcmVnaXN0ZXIgaGVyZSBieSB0aGVpciBJMkMgZHJpdmVyIElEICovCitpbnQgd2lzX2kyY19hZGRfZHJpdmVyKHVuc2lnbmVkIGludCBpZCwgZm91bmRfcHJvYyBmb3VuZF9wcm9jKQoreworCXN0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIgKmRyaXZlcjsKKworCWRyaXZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHJpdmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRyaXZlci0+aWQgPSBpZDsKKwlkcml2ZXItPmZvdW5kX3Byb2MgPSBmb3VuZF9wcm9jOworCisJZG93bigmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkcml2ZXItPmxpc3QsICZpMmNfY2xpZW50X2RyaXZlcnMpOworCXVwKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHdpc19pMmNfYWRkX2RyaXZlcik7CisKK3ZvaWQgd2lzX2kyY19kZWxfZHJpdmVyKGZvdW5kX3Byb2MgZm91bmRfcHJvYykKK3sKKwlzdHJ1Y3Qgd2lzX2kyY19jbGllbnRfZHJpdmVyICpkcml2ZXIsICpuZXh0OworCisJZG93bigmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHJpdmVyLCBuZXh0LCAmaTJjX2NsaWVudF9kcml2ZXJzLCBsaXN0KQorCQlpZiAoZHJpdmVyLT5mb3VuZF9wcm9jID09IGZvdW5kX3Byb2MpIHsKKwkJCWxpc3RfZGVsKCZkcml2ZXItPmxpc3QpOworCQkJa2ZyZWUoZHJpdmVyKTsKKwkJfQorCXVwKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTCh3aXNfaTJjX2RlbF9kcml2ZXIpOworCisvKiBUaGUgbWFpbiBnbzcwMDcgZHJpdmVyIGNhbGxzIHRoaXMgdG8gaW5zdGFudGlhdGUgYSBjbGllbnQgYnkgZHJpdmVyCisgKiBJRCBhbmQgYnVzIGFkZHJlc3MsIHdoaWNoIGFyZSBib3RoIHN0b3JlZCBpbiB0aGUgYm9hcmQgaW5mbyB0YWJsZSAqLworaW50IHdpc19pMmNfcHJvYmVfZGV2aWNlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQl1bnNpZ25lZCBpbnQgaWQsIGludCBhZGRyKQoreworCXN0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIgKmRyaXZlcjsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKGFkZHIgPCAwIHx8IGFkZHIgPiAweDdmKQorCQlyZXR1cm4gLTE7CisJZG93bigmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRyaXZlciwgJmkyY19jbGllbnRfZHJpdmVycywgbGlzdCkKKwkJaWYgKGRyaXZlci0+aWQgPT0gaWQpIHsKKwkJCWlmIChkcml2ZXItPmZvdW5kX3Byb2MoYWRhcHRlciwgYWRkciwgMCkgPT0gMCkKKwkJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCXVwKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKiBEcml2ZXIgZm9yIG9uLWJvYXJkIEkyQyBhZGFwdGVyICoqKioqKioqKioqKioqKioqKioqKi8KKworLyogI2RlZmluZSBHTzcwMDdfSTJDX0RFQlVHICovCisKKyNkZWZpbmUgU1BJX0kyQ19BRERSX0JBU0UJCTB4MTQwMAorI2RlZmluZSBTVEFUVVNfUkVHX0FERFIJCQkoU1BJX0kyQ19BRERSX0JBU0UgKyAweDIpCisjZGVmaW5lIEkyQ19DVFJMX1JFR19BRERSCQkoU1BJX0kyQ19BRERSX0JBU0UgKyAweDYpCisjZGVmaW5lIEkyQ19ERVZfVVBfQUREUl9SRUdfQUREUgkoU1BJX0kyQ19BRERSX0JBU0UgKyAweDcpCisjZGVmaW5lIEkyQ19MT19BRERSX1JFR19BRERSCQkoU1BJX0kyQ19BRERSX0JBU0UgKyAweDgpCisjZGVmaW5lIEkyQ19EQVRBX1JFR19BRERSCQkoU1BJX0kyQ19BRERSX0JBU0UgKyAweDkpCisjZGVmaW5lIEkyQ19DTEtGUkVRX1JFR19BRERSCQkoU1BJX0kyQ19BRERSX0JBU0UgKyAweGEpCisKKyNkZWZpbmUgSTJDX1NUQVRFX01BU0sJCQkweDAwMDcKKyNkZWZpbmUgSTJDX1JFQURfUkVBRFlfTUFTSwkJMHgwMDA4CisKKy8qIFRoZXJlIGlzIG9ubHkgb25lIEkyQyBwb3J0IG9uIHRoZSBUVzI4MDQgdGhhdCBmZWVkcyBhbGwgZm91ciBHTzcwMDcgVklQcworICogb24gdGhlIEFkbGluayBQQ0ktTVBHMjQsIHNvIGFjY2VzcyBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgb2YgdGhlbS4gKi8KK3N0YXRpYyBERUNMQVJFX01VVEVYKGFkbGlua19tcGcyNF9pMmNfbG9jayk7CisKK3N0YXRpYyBpbnQgZ283MDA3X2kyY194ZmVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgYWRkciwgaW50IHJlYWQsCisJCXUxNiBjb21tYW5kLCBpbnQgZmxhZ3MsIHU4ICpkYXRhKQoreworCWludCBpLCByZXQgPSAtMTsKKwl1MTYgdmFsOworCisJaWYgKGdvLT5zdGF0dXMgPT0gU1RBVFVTX1NIVVRET1dOKQorCQlyZXR1cm4gLTE7CisKKyNpZmRlZiBHTzcwMDdfSTJDX0RFQlVHCisJaWYgKHJlYWQpCisJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctaTJjOiByZWFkaW5nIDB4JTAyeCBvbiAweCUwMnhcbiIsCisJCQljb21tYW5kLCBhZGRyKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0RFQlVHCisJCQkiZ283MDA3LWkyYzogd3JpdGluZyAweCUwMnggdG8gMHglMDJ4IG9uIDB4JTAyeFxuIiwKKwkJCSpkYXRhLCBjb21tYW5kLCBhZGRyKTsKKyNlbmRpZgorCisJZG93bigmZ28tPmh3X2xvY2spOworCisJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQpIHsKKwkJLyogQnJpZGdlIHRoZSBJMkMgcG9ydCBvbiB0aGlzIEdPNzAwNyB0byB0aGUgc2hhcmVkIGJ1cyAqLworCQlkb3duKCZhZGxpbmtfbXBnMjRfaTJjX2xvY2spOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMjApOworCX0KKworCS8qIFdhaXQgZm9yIEkyQyBhZGFwdGVyIHRvIGJlIHJlYWR5ICovCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJaWYgKGdvNzAwN19yZWFkX2FkZHIoZ28sIFNUQVRVU19SRUdfQUREUiwgJnZhbCkgPCAwKQorCQkJZ290byBpMmNfZG9uZTsKKwkJaWYgKCEodmFsICYgSTJDX1NUQVRFX01BU0spKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMDApOworCX0KKwlpZiAoaSA9PSAxMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy1pMmM6IEkyQyBhZGFwdGVyIGlzIGh1bmdcbiIpOworCQlnb3RvIGkyY19kb25lOworCX0KKworCS8qIFNldCB0YXJnZXQgcmVnaXN0ZXIgKGNvbW1hbmQpICovCisJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19DVFJMX1JFR19BRERSLCBmbGFncyk7CisJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19MT19BRERSX1JFR19BRERSLCBjb21tYW5kKTsKKworCS8qIElmIHdlJ3JlIHdyaXRpbmcsIHNlbmQgdGhlIGRhdGEgYW5kIHRhcmdldCBhZGRyZXNzIGFuZCB3ZSdyZSBkb25lICovCisJaWYgKCFyZWFkKSB7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfREFUQV9SRUdfQUREUiwgKmRhdGEpOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0RFVl9VUF9BRERSX1JFR19BRERSLAorCQkJCQkoYWRkciA8PCA5KSB8IChjb21tYW5kID4+IDgpKTsKKwkJcmV0ID0gMDsKKwkJZ290byBpMmNfZG9uZTsKKwl9CisKKwkvKiBPdGhlcndpc2UsIHdlJ3JlIHJlYWRpbmcuICBGaXJzdCBjbGVhciBpMmNfcnhfZGF0YV9yZHkuICovCisJaWYgKGdvNzAwN19yZWFkX2FkZHIoZ28sIEkyQ19EQVRBX1JFR19BRERSLCAmdmFsKSA8IDApCisJCWdvdG8gaTJjX2RvbmU7CisKKwkvKiBTZW5kIHRoZSB0YXJnZXQgYWRkcmVzcyBwbHVzIHJlYWQgZmxhZyAqLworCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfREVWX1VQX0FERFJfUkVHX0FERFIsCisJCQkoYWRkciA8PCA5KSB8IDB4MDEwMCB8IChjb21tYW5kID4+IDgpKTsKKworCS8qIFdhaXQgZm9yIGkyY19yeF9kYXRhX3JkeSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCWlmIChnbzcwMDdfcmVhZF9hZGRyKGdvLCBTVEFUVVNfUkVHX0FERFIsICZ2YWwpIDwgMCkKKwkJCWdvdG8gaTJjX2RvbmU7CisJCWlmICh2YWwgJiBJMkNfUkVBRF9SRUFEWV9NQVNLKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMDApOworCX0KKwlpZiAoaSA9PSAxMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy1pMmM6IEkyQyBhZGFwdGVyIGlzIGh1bmdcbiIpOworCQlnb3RvIGkyY19kb25lOworCX0KKworCS8qIFJldHJpZXZlIHRoZSByZWFkIGJ5dGUgKi8KKwlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgSTJDX0RBVEFfUkVHX0FERFIsICZ2YWwpIDwgMCkKKwkJZ290byBpMmNfZG9uZTsKKwkqZGF0YSA9IHZhbDsKKwlyZXQgPSAwOworCitpMmNfZG9uZToKKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNCkgeworCQkvKiBJc29sYXRlIHRoZSBJMkMgcG9ydCBvbiB0aGlzIEdPNzAwNyBmcm9tIHRoZSBzaGFyZWQgYnVzICovCisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODIsIDB4MDAwMCk7CisJCXVwKCZhZGxpbmtfbXBnMjRfaTJjX2xvY2spOworCX0KKwl1cCgmZ28tPmh3X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkciwKKwkJdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKKwkJdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKworCWlmIChzaXplICE9IEkyQ19TTUJVU19CWVRFX0RBVEEpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZ283MDA3X2kyY194ZmVyKGdvLCBhZGRyLCByZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFELCBjb21tYW5kLAorCQkJZmxhZ3MgJiBJMkNfQ0xJRU5UX1NDQ0IgPyAweDEwIDogMHgwMCwgJmRhdGEtPmJ5dGUpOworfQorCisvKiBWRVJZIExJTUlURUQgSTJDIG1hc3RlciB4ZmVyIGZ1bmN0aW9uIC0tIG9ubHkgbmVlZGVkIGJlY2F1c2UgdGhlCisgKiBTTUJ1cyBmdW5jdGlvbnMgb25seSBzdXBwb3J0IDgtYml0IGNvbW1hbmRzIGFuZCB0aGUgU0FBNzEzNSB1c2VzCisgKiAxNi1iaXQgY29tbWFuZHMuICBUaGUgSTJDIGludGVyZmFjZSBvbiB0aGUgR083MDA3LCBhcyBsaW1pdGVkIGFzCisgKiBpdCBpcywgZG9lcyBzdXBwb3J0IHRoaXMgbW9kZS4gKi8KKworc3RhdGljIGludCBnbzcwMDdfaTJjX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworCQkvKiBXZSBjYW4gb25seSBkbyB0d28gdGhpbmdzIGhlcmUgLS0gd3JpdGUgdGhyZWUgYnl0ZXMsIG9yCisJCSAqIHdyaXRlIHR3byBieXRlcyBhbmQgcmVhZCBvbmUgYnl0ZS4gKi8KKwkJaWYgKG1zZ3NbaV0ubGVuID09IDIpIHsKKwkJCWlmIChpICsgMSA9PSBudW0gfHwgbXNnc1tpXS5hZGRyICE9IG1zZ3NbaSArIDFdLmFkZHIgfHwKKwkJCQkJKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgfHwKKwkJCQkJIShtc2dzW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSB8fAorCQkJCQltc2dzW2kgKyAxXS5sZW4gIT0gMSkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoZ283MDA3X2kyY194ZmVyKGdvLCBtc2dzW2ldLmFkZHIsIDEsCisJCQkJCShtc2dzW2ldLmJ1ZlswXSA8PCA4KSB8IG1zZ3NbaV0uYnVmWzFdLAorCQkJCQkweDAxLCAmbXNnc1tpICsgMV0uYnVmWzBdKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJKytpOworCQl9IGVsc2UgaWYgKG1zZ3NbaV0ubGVuID09IDMpIHsKKwkJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKG1zZ3NbaV0ubGVuICE9IDMpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGdvNzAwN19pMmNfeGZlcihnbywgbXNnc1tpXS5hZGRyLCAwLAorCQkJCQkobXNnc1tpXS5idWZbMF0gPDwgOCkgfCBtc2dzW2ldLmJ1ZlsxXSwKKwkJCQkJMHgwMSwgJm1zZ3NbaV0uYnVmWzJdKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9IGVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBnbzcwMDdfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQTsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdvNzAwN19hbGdvID0geworCS5zbWJ1c194ZmVyCT0gZ283MDA3X3NtYnVzX3hmZXIsCisJLm1hc3Rlcl94ZmVyCT0gZ283MDA3X2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGdvNzAwN19mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBnbzcwMDdfYWRhcF90ZW1wbCA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5jbGFzcwkJCT0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKwkubmFtZQkJCT0gIldJUyBHTzcwMDdTQiIsCisJLmlkCQkJPSBJMkNfQUxHT19HTzcwMDcsCisJLmFsZ28JCQk9ICZnbzcwMDdfYWxnbywKK307CisKK2ludCBnbzcwMDdfaTJjX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJbWVtY3B5KCZnby0+aTJjX2FkYXB0ZXIsICZnbzcwMDdfYWRhcF90ZW1wbCwKKwkJCXNpemVvZihnbzcwMDdfYWRhcF90ZW1wbCkpOworCWdvLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gZ28tPmRldjsKKwlpMmNfc2V0X2FkYXBkYXRhKCZnby0+aTJjX2FkYXB0ZXIsIGdvKTsKKwlpZiAoaTJjX2FkZF9hZGFwdGVyKCZnby0+aTJjX2FkYXB0ZXIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDctaTJjOiBlcnJvcjogaTJjX2FkZF9hZGFwdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1NTQyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgaXMgdGhlIHByaXZhdGUgaW5jbHVkZSBmaWxlIGZvciB0aGUgZ283MDA3IGRyaXZlci4gIEl0IHNob3VsZCBub3QKKyAqIGJlIGluY2x1ZGVkIGJ5IGFueWJvZHkgYnV0IHRoZSBkcml2ZXIgaXRzZWxmLCBhbmQgZXNwZWNpYWxseSBub3QgYnkKKyAqIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLgorICovCisKK3N0cnVjdCBnbzcwMDc7CisKKy8qIElEcyB0byBhY3RpdmF0ZSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0IGNvZGUgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfTUFUUklYX0lJCTAKKyNkZWZpbmUgR083MDA3X0JPQVJESURfTUFUUklYX1JFTE9BRAkxCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1NUQVJfVFJFSwkyCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BDSV9WT1lBR0VSCTMKKyNkZWZpbmUgR083MDA3X0JPQVJESURfWE1FTgkJNAorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJCQk1CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1hNRU5fSUlJCQk2CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX01BVFJJWF9SRVYJNworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9NNDAyVQkJMTYKKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0FOWQkxNyAvKiBuZWVkIHRvIGNoZWNrIHR1bmVyIG1vZGVsICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9OQQkxOCAvKiBkZXRlY3RlZCBOVFNDIHR1bmVyICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9FVQkxOSAvKiBkZXRlY3RlZCBQQUwgdHVuZXIgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0pQCTIwIC8qIGRldGVjdGVkIE5UU0MtSiB0dW5lciAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9MSUZFVklFV19MUjE5MgkyMSAvKiBUViBXYWxrZXIgVWx0cmEgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfRU5EVVJBCQkyMgorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQJMjMKKworLyogVmFyaW91cyBjaGFyYWN0ZXJpc3RpY3Mgb2YgZWFjaCBib2FyZCAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPCQkoMTw8MCkKKyNkZWZpbmUgR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQwkoMTw8MSkKKyNkZWZpbmUgR083MDA3X0JPQVJEX0hBU19UVU5FUgkJKDE8PDIpCisKKy8qIENoYXJhY3RlcmlzdGljcyBvZiBzZW5zb3IgZGV2aWNlcyAqLworI2RlZmluZSBHTzcwMDdfU0VOU09SX1ZBTElEX1BPTEFSCSgxPDwwKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0hSRUZfUE9MQVIJKDE8PDEpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVlJFRl9QT0xBUgkoMTw8MikKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9GSUVMRF9JRF9QT0xBUgkoMTw8MykKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9CSVRfV0lEVEgJCSgxPDw0KQorI2RlZmluZSBHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRQkoMTw8NSkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl82NTYJCSgxPDw2KQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0NPTkZJR19NQVNLCTB4N2YKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9UVgkJKDE8PDcpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVkJJCQkoMTw8OCkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9TQ0FMSU5HCQkoMTw8OSkKKworLyogQ2hhcmFjdGVyaXN0aWNzIG9mIGF1ZGlvIHNlbnNvciBkZXZpY2VzICovCisjZGVmaW5lIEdPNzAwN19BVURJT19JMlNfTU9ERV8xCQkoMSkKKyNkZWZpbmUgR083MDA3X0FVRElPX0kyU19NT0RFXzIJCSgyKQorI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01PREVfMwkJKDMpCisjZGVmaW5lIEdPNzAwN19BVURJT19CQ0xLX1BPTEFSCQkoMTw8MikKKyNkZWZpbmUgR083MDA3X0FVRElPX1dPUkRfMTQJCSgxNDw8NCkKKyNkZWZpbmUgR083MDA3X0FVRElPX1dPUkRfMTYJCSgxNjw8NCkKKyNkZWZpbmUgR083MDA3X0FVRElPX09ORV9DSEFOTkVMCSgxPDwxMSkKKyNkZWZpbmUgR083MDA3X0FVRElPX0kyU19NQVNURVIJCSgxPDwxNikKKyNkZWZpbmUgR083MDA3X0FVRElPX09LSV9NT0RFCQkoMTw8MTcpCisKK3N0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyB7CisJY2hhciAqZmlybXdhcmU7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCBocGlfYnVmZmVyX2NhcDsKKwl1bnNpZ25lZCBpbnQgc2Vuc29yX2ZsYWdzOworCWludCBzZW5zb3Jfd2lkdGg7CisJaW50IHNlbnNvcl9oZWlnaHQ7CisJaW50IHNlbnNvcl9mcmFtZXJhdGU7CisJaW50IHNlbnNvcl9oX29mZnNldDsKKwlpbnQgc2Vuc29yX3Zfb2Zmc2V0OworCXVuc2lnbmVkIGludCBhdWRpb19mbGFnczsKKwlpbnQgYXVkaW9fcmF0ZTsKKwlpbnQgYXVkaW9fYmNsa19kaXY7CisJaW50IGF1ZGlvX21haW5fZGl2OworCWludCBudW1faTJjX2RldnM7CisJc3RydWN0IHsKKwkJaW50IGlkOworCQlpbnQgYWRkcjsKKwl9IGkyY19kZXZzWzRdOworCWludCBudW1faW5wdXRzOworCXN0cnVjdCB7CisJCWludCB2aWRlb19pbnB1dDsKKwkJaW50IGF1ZGlvX2lucHV0OworCQljaGFyICpuYW1lOworCX0gaW5wdXRzWzRdOworfTsKKworc3RydWN0IGdvNzAwN19ocGlfb3BzIHsKKwlpbnQgKCppbnRlcmZhY2VfcmVzZXQpKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCp3cml0ZV9pbnRlcnJ1cHQpKHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgYWRkciwgaW50IGRhdGEpOworCWludCAoKnJlYWRfaW50ZXJydXB0KShzdHJ1Y3QgZ283MDA3ICpnbyk7CisJaW50ICgqc3RyZWFtX3N0YXJ0KShzdHJ1Y3QgZ283MDA3ICpnbyk7CisJaW50ICgqc3RyZWFtX3N0b3ApKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCpzZW5kX2Zpcm13YXJlKShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmRhdGEsIGludCBsZW4pOworfTsKKworLyogVGhlIHZpZGVvIGJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKi8KKyNkZWZpbmUJR083MDA3X0JVRl9QQUdFUwkoMTI4ICogMTAyNCAvIFBBR0VfU0laRSkKKyNkZWZpbmUJR083MDA3X0JVRl9TSVpFCQkoR083MDA3X0JVRl9QQUdFUyA8PCBQQUdFX1NISUZUKQorCitzdHJ1Y3QgZ283MDA3X2J1ZmZlciB7CisJc3RydWN0IGdvNzAwNyAqZ287IC8qIFJldmVyc2UgcmVmZXJlbmNlIGZvciBWTUEgb3BzICovCisJaW50IGluZGV4OyAvKiBSZXZlcnNlIHJlZmVyZW5jZSBmb3IgRFFCVUYgKi8KKwllbnVtIHsgQlVGX1NUQVRFX0lETEUsIEJVRl9TVEFURV9RVUVVRUQsIEJVRl9TVEFURV9ET05FIH0gc3RhdGU7CisJdTMyIHNlcTsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CisJc3RydWN0IGxpc3RfaGVhZCBzdHJlYW07CisJc3RydWN0IHBhZ2UgKnBhZ2VzW0dPNzAwN19CVUZfUEFHRVMgKyAxXTsgLyogZXh0cmEgZm9yIHN0cmFkZGxpbmcgKi8KKwl1bnNpZ25lZCBsb25nIHVzZXJfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGFnZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBieXRlc3VzZWQ7CisJdW5zaWduZWQgaW50IGZyYW1lX29mZnNldDsKKwl1MzIgbW9kZXRfYWN0aXZlOworCWludCBtYXBwZWQ7Cit9OworCitzdHJ1Y3QgZ283MDA3X2ZpbGUgeworCXN0cnVjdCBnbzcwMDcgKmdvOworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlpbnQgYnVmX2NvdW50OworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpidWZzOworfTsKKworI2RlZmluZQlHTzcwMDdfRk9STUFUX01KUEVHCTAKKyNkZWZpbmUgR083MDA3X0ZPUk1BVF9NUEVHNAkxCisjZGVmaW5lIEdPNzAwN19GT1JNQVRfTVBFRzEJMgorI2RlZmluZSBHTzcwMDdfRk9STUFUX01QRUcyCTMKKyNkZWZpbmUgR083MDA3X0ZPUk1BVF9IMjYzCTQKKworI2RlZmluZSBHTzcwMDdfUkFUSU9fMV8xCTAKKyNkZWZpbmUgR083MDA3X1JBVElPXzRfMwkxCisjZGVmaW5lIEdPNzAwN19SQVRJT18xNl85CTIKKworZW51bSBnbzcwMDdfcGFyc2VyX3N0YXRlIHsKKwlTVEFURV9EQVRBLAorCVNUQVRFXzAwLAorCVNUQVRFXzAwXzAwLAorCVNUQVRFXzAwXzAwXzAxLAorCVNUQVRFX0ZGLAorCVNUQVRFX1ZCSV9MRU5fQSwKKwlTVEFURV9WQklfTEVOX0IsCisJU1RBVEVfTU9ERVRfTUFQLAorCVNUQVRFX1VOUEFSU0VELAorfTsKKworc3RydWN0IGdvNzAwNyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7CisJaW50IHR1bmVyX3R5cGU7CisJaW50IGNoYW5uZWxfbnVtYmVyOyAvKiBmb3IgbXVsdGktY2hhbm5lbCBib2FyZHMgbGlrZSBBZGxpbmsgUENJLU1QRzI0ICovCisJY2hhciBuYW1lWzY0XTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CisJaW50IHJlZl9jb3VudDsKKwllbnVtIHsgU1RBVFVTX0lOSVQsIFNUQVRVU19PTkxJTkUsIFNUQVRVU19TSFVURE9XTiB9IHN0YXR1czsKKwlzcGlubG9ja190IHNwaW5sb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgaHdfbG9jazsKKwlpbnQgc3RyZWFtaW5nOworCWludCBpbl91c2U7CisJaW50IGF1ZGlvX2VuYWJsZWQ7CisKKwkvKiBWaWRlbyBpbnB1dCAqLworCWludCBpbnB1dDsKKwllbnVtIHsgR083MDA3X1NURF9OVFNDLCBHTzcwMDdfU1REX1BBTCwgR083MDA3X1NURF9PVEhFUiB9IHN0YW5kYXJkOworCWludCBzZW5zb3JfZnJhbWVyYXRlOworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworCWludCBlbmNvZGVyX2hfb2Zmc2V0OworCWludCBlbmNvZGVyX3Zfb2Zmc2V0OworCXVuc2lnbmVkIGludCBlbmNvZGVyX2hfaGFsdmU6MTsKKwl1bnNpZ25lZCBpbnQgZW5jb2Rlcl92X2hhbHZlOjE7CisJdW5zaWduZWQgaW50IGVuY29kZXJfc3Vic2FtcGxlOjE7CisKKwkvKiBFbmNvZGVyIGNvbmZpZyAqLworCWludCBmb3JtYXQ7CisJaW50IGJpdHJhdGU7CisJaW50IGZwc19zY2FsZTsKKwlpbnQgcGFsaTsKKwlpbnQgYXNwZWN0X3JhdGlvOworCWludCBnb3Bfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaXBiOjE7CisJdW5zaWduZWQgaW50IGNsb3NlZF9nb3A6MTsKKwl1bnNpZ25lZCBpbnQgcmVwZWF0X3NlcWhlYWQ6MTsKKwl1bnNpZ25lZCBpbnQgc2VxX2hlYWRlcl9lbmFibGU6MTsKKwl1bnNpZ25lZCBpbnQgZ29wX2hlYWRlcl9lbmFibGU6MTsKKwl1bnNpZ25lZCBpbnQgZHZkX21vZGU6MTsKKwl1bnNpZ25lZCBpbnQgaW50ZXJsYWNlX2NvZGluZzoxOworCisJLyogTW90aW9uIGRldGVjdGlvbiAqLworCXVuc2lnbmVkIGludCBtb2RldF9lbmFibGU6MTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgZW5hYmxlOjE7CisJCWludCBwaXhlbF90aHJlc2hvbGQ7CisJCWludCBtb3Rpb25fdGhyZXNob2xkOworCQlpbnQgbWJfdGhyZXNob2xkOworCX0gbW9kZXRbNF07CisJdW5zaWduZWQgY2hhciBtb2RldF9tYXBbMTYyNF07CisJdW5zaWduZWQgY2hhciBhY3RpdmVfbWFwWzIxNl07CisKKwkvKiBWaWRlbyBzdHJlYW1pbmcgKi8KKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqYWN0aXZlX2J1ZjsKKwllbnVtIGdvNzAwN19wYXJzZXJfc3RhdGUgc3RhdGU7CisJaW50IHBhcnNlX2xlbmd0aDsKKwl1MTYgbW9kZXRfd29yZDsKKwlpbnQgc2Vlbl9mcmFtZTsKKwl1MzIgbmV4dF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZCBzdHJlYW07CisJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfd2FpdHE7CisKKwkvKiBBdWRpbyBzdHJlYW1pbmcgKi8KKwl2b2lkICgqYXVkaW9fZGVsaXZlcikoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpOworCXZvaWQgKnNuZF9jb250ZXh0OworCisJLyogSTJDICovCisJaW50IGkyY19hZGFwdGVyX29ubGluZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CisKKwkvKiBIUEkgZHJpdmVyICovCisJc3RydWN0IGdvNzAwN19ocGlfb3BzICpocGlfb3BzOworCXZvaWQgKmhwaV9jb250ZXh0OworCWludCBpbnRlcnJ1cHRfYXZhaWxhYmxlOworCXdhaXRfcXVldWVfaGVhZF90IGludGVycnVwdF93YWl0cTsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfdmFsdWU7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X2RhdGE7Cit9OworCisvKiBBbGwgb2YgdGhlc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHBpX2xvY2sgc2VtYXBob3JlIGhlbGQhICovCisjZGVmaW5lIGdvNzAwN19pbnRlcmZhY2VfcmVzZXQoZ28pIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT5pbnRlcmZhY2VfcmVzZXQoZ28pKQorI2RlZmluZQlnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCB4LCB5KSBcCisJCQkoKGdvKS0+aHBpX29wcy0+d3JpdGVfaW50ZXJydXB0KSgoZ28pLCAoeCksICh5KSkKKyNkZWZpbmUgZ283MDA3X3N0cmVhbV9zdGFydChnbykgXAorCQkJKChnbyktPmhwaV9vcHMtPnN0cmVhbV9zdGFydChnbykpCisjZGVmaW5lIGdvNzAwN19zdHJlYW1fc3RvcChnbykgXAorCQkJKChnbyktPmhwaV9vcHMtPnN0cmVhbV9zdG9wKGdvKSkKKyNkZWZpbmUJZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIHgsIHkpIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT5zZW5kX2Zpcm13YXJlKSgoZ28pLCAoeCksICh5KSkKKyNkZWZpbmUgZ283MDA3X3dyaXRlX2FkZHIoZ28sIHgsIHkpIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT53cml0ZV9pbnRlcnJ1cHQpKChnbyksICh4KXwweDgwMDAsICh5KSkKKworLyogZ283MDA3LWRyaXZlci5jICovCitpbnQgZ283MDA3X3JlYWRfYWRkcihzdHJ1Y3QgZ283MDA3ICpnbywgdTE2IGFkZHIsIHUxNiAqZGF0YSk7CitpbnQgZ283MDA3X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKnZhbHVlLCB1MTYgKmRhdGEpOworaW50IGdvNzAwN19ib290X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28sIGludCBpbml0X2kyYyk7CitpbnQgZ283MDA3X3Jlc2V0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pOworaW50IGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKTsKK2ludCBnbzcwMDdfc3RhcnRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbyk7Cit2b2lkIGdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpOworc3RydWN0IGdvNzAwNyAqZ283MDA3X2FsbG9jKHN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyAqYm9hcmQsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIGdvNzAwN19yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOworCisvKiBnbzcwMDctZncuYyAqLworaW50IGdvNzAwN19jb25zdHJ1Y3RfZndfaW1hZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICoqZncsIGludCAqZndsZW4pOworCisvKiBnbzcwMDctaTJjLmMgKi8KK2ludCBnbzcwMDdfaTJjX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pOworaW50IGdvNzAwN19pMmNfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKTsKKworLyogZ283MDA3LXY0bDIuYyAqLworaW50IGdvNzAwN192NGwyX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pOwordm9pZCBnbzcwMDdfdjRsMl9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOworCisvKiBzbmQtZ283MDA3LmMgKi8KK2ludCBnbzcwMDdfc25kX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pOworaW50IGdvNzAwN19zbmRfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZDZkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jCkBAIC0wLDAgKzEsMTIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KKworI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGFzc3VtZV9lbmR1cmE7Cittb2R1bGVfcGFyYW0oYXNzdW1lX2VuZHVyYSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYXNzdW1lX2VuZHVyYSwgIndoZW4gcHJvYmluZyBmYWlscywgaGFyZHdhcmUgaXMgYSBQZWxjbyBFbmR1cmEiKTsKKworLyogI2RlZmluZSBHTzcwMDdfVVNCX0RFQlVHICovCisvKiAjZGVmaW5lIEdPNzAwN19JMkNfREVCVUcgKi8gLyogZm9yIGRlYnVnZ2luZyB0aGUgRVotVVNCIEkyQyBhZGFwdGVyICovCisKKyNkZWZpbmUJSFBJX1NUQVRVU19BRERSCTB4RkZGNAorI2RlZmluZQlJTlRfUEFSQU1fQUREUgkweEZGRjYKKyNkZWZpbmUJSU5UX0lOREVYX0FERFIJMHhGRkY4CisKKy8qCisgKiBQaXBlcyBvbiBFWi1VU0IgaW50ZXJmYWNlOgorICogCTAgc25kIC0gQ29udHJvbAorICogCTAgcmN2IC0gQ29udHJvbAorICogCTIgc25kIC0gRG93bmxvYWQgZmlybXdhcmUgKGNvbnRyb2wpCisgKiAJNCByY3YgLSBSZWFkIEludGVycnVwdCAoaW50ZXJydXB0KQorICogCTYgcmN2IC0gUmVhZCBWaWRlbyAoYnVsaykKKyAqIAk4IHJjdiAtIFJlYWQgQXVkaW8gKGJ1bGspCisgKi8KKworI2RlZmluZSBHTzcwMDdfVVNCX0VaVVNCCQkoMTw8MCkKKyNkZWZpbmUgR083MDA3X1VTQl9FWlVTQl9JMkMJCSgxPDwxKQorCitzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyBtYWluX2luZm87Cit9OworCitzdHJ1Y3QgZ283MDA3X3VzYiB7CisJc3RydWN0IGdvNzAwN191c2JfYm9hcmQgKmJvYXJkOworCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdXJiICp2aWRlb191cmJzWzhdOworCXN0cnVjdCB1cmIgKmF1ZGlvX3VyYnNbOF07CisJc3RydWN0IHVyYiAqaW50cl91cmI7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKiogUHJvZHVjdCBzcGVjaWZpY2F0aW9uIGRhdGEgKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9tYXRyaXhfaWkgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNSwKKwkJCQkuYWRkcgk9IDB4MjAsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAyLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMCwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOSwKKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbWF0cml4X3JlbG9hZCA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViwKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExMywKKwkJCQkuYWRkcgk9IDB4MjUsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAyLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMCwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOSwKKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfc3Rhcl90cmVrID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCIHwgR083MDA3X1VTQl9FWlVTQl9JMkMsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8sIC8qIHwKKwkJCQkJR083MDA3X0JPQVJEX0hBU19UVU5FUiwgKi8KKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJIHwKKwkJCQkJR083MDA3X1NFTlNPUl9TQ0FMSU5HLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNSwKKwkJCQkuYWRkcgk9IDB4MjAsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAyLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMSwKKwkJCS8qCS5hdWRpb19pbnB1dAk9IEFVRElPX0VYVEVSTiwgKi8KKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOCwKKwkJCS8qCS5hdWRpb19pbnB1dAk9IEFVRElPX0VYVEVSTiwgKi8KKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQkvKgl7CisJCSAqCQkudmlkZW9faW5wdXQJPSAzLAorCQkgKgkJLmF1ZGlvX2lucHV0CT0gQVVESU9fVFVORVIsCisJCSAqCQkubmFtZQkJPSAiVHVuZXIiLAorCQkgKgl9LAorCQkgKi8KKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX3B4X3R2NDAydSA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiB8IEdPNzAwN19VU0JfRVpVU0JfSTJDLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX0hBU19UVU5FUiwKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJIHwKKwkJCQkJR083MDA3X1NFTlNPUl9TQ0FMSU5HLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLm51bV9pMmNfZGV2cwkgPSAzLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNSwKKwkJCQkuYWRkcgk9IDB4MjAsCisJCQl9LAorCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfVURBMTM0MiwKKwkJCQkuYWRkcgk9IDB4MWEsCisJCQl9LAorCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUiwKKwkJCQkuYWRkcgk9IDB4NjAsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAzLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMSwKKwkJLmF1ZGlvX2lucHV0CSA9IFRWQVVESU9fSU5QVVRfRVhURVJOLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA4LAorCQkJCS5hdWRpb19pbnB1dAk9IFRWQVVESU9fSU5QVVRfRVhURVJOLAorCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMywKKwkJCQkuYXVkaW9faW5wdXQJPSBUVkFVRElPX0lOUFVUX1RVTkVSLAorCQkJCS5uYW1lCQk9ICJUdW5lciIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfeG1lbiA9IHsKKwkuZmxhZ3MJCT0gMCwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJICA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSAgPSBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuaHBpX2J1ZmZlcl9jYXAgICA9IDAsCisJCS5zZW5zb3JfZmxhZ3MJICA9IEdPNzAwN19TRU5TT1JfVlJFRl9QT0xBUiwKKwkJLnNlbnNvcl93aWR0aAkgID0gMzIwLAorCQkuc2Vuc29yX2hlaWdodAkgID0gMjQwLAorCQkuc2Vuc29yX2ZyYW1lcmF0ZSA9IDMwMDMwLAorCQkuYXVkaW9fZmxhZ3MJICA9IEdPNzAwN19BVURJT19PTkVfQ0hBTk5FTCB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTU9ERV8zIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTQgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19CQ0xLX1BPTEFSIHwKKwkJCQkJR083MDA3X0FVRElPX09LSV9NT0RFLAorCQkuYXVkaW9fcmF0ZQkgID0gODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSAgPSA0OCwKKwkJLmF1ZGlvX21haW5fZGl2CSAgPSAxLAorCQkubnVtX2kyY19kZXZzCSAgPSAxLAorCQkuaTJjX2RldnMJICA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX09WNzY0MCwKKwkJCQkuYWRkcgk9IDB4MjEsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgID0gMSwKKwkJLmlucHV0cyAJICA9IHsKKwkJCXsKKwkJCQkubmFtZQkJPSAiQ2FtZXJhIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9tYXRyaXhfcmV2b2x1dGlvbiA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJLAorCQkubnVtX2kyY19kZXZzCSA9IDEsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19UVzk5MDMsCisJCQkJLmFkZHIJPSAweDQ0LAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDIsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDgsCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX2xpZmV2aWV3X2xyMTkyID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgfAorCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCisJCS5udW1faTJjX2RldnMJID0gMCwKKwkJLm51bV9pbnB1dHMJID0gMSwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDAsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfZW5kdXJhID0geworCS5mbGFncwkJPSAwLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSAwLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gNDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSA4LAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gMCwKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYsCisJCS5zZW5zb3JfaF9vZmZzZXQgPSA4LAorCQkubnVtX2kyY19kZXZzCSA9IDAsCisJCS5udW1faW5wdXRzCSA9IDEsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkubmFtZQkJPSAiQ2FtZXJhIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9hZGxpbmtfbXBnMjQgPSB7CisJLmZsYWdzCQk9IDAsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSAwLAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJLAorCQkubnVtX2kyY19kZXZzCSA9IDEsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19UVzI4MDQsCisJCQkJLmFkZHIJPSAweDAwLCAvKiB5ZXMsIHJlYWxseSAqLworCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMSwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdvNzAwN191c2JfaWRfdGFibGVbXSA9IHsKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIHwKKwkJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDAsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIFhNZW4gKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjAwLAorCQkuYkludGVyZmFjZUNsYXNzCT0gMjU1LAorCQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMCwKKwkJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1hNRU4sCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwMiwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgTWF0cml4IElJICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwMiwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX01BVFJJWF9JSSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjA0LCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBNYXRyaXggKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA0LCAgIC8qICAgICBSZWxvYWRlZCAqLworCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfTUFUUklYX1JFTE9BRCwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gfAorCQkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwNSwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgWE1lbi1JSSAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDUsCisJCS5iSW50ZXJmYWNlQ2xhc3MJPSAyNTUsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAwLAorCQkuYkludGVyZmFjZVByb3RvY29sCT0gMjU1LAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfWE1FTl9JSSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjA4LCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBTdGFyIFRyZWsgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA4LAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfU1RBUl9UUkVLLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiB8CisJCQkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjA5LCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBYTWVuLUlJSSAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDksCisJCS5iSW50ZXJmYWNlQ2xhc3MJPSAyNTUsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAwLAorCQkuYkludGVyZmFjZVByb3RvY29sCT0gMjU1LAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfWE1FTl9JSUksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIxMCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgTWF0cml4ICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIxMCwgICAvKiAgICAgUmV2b2x1dGlvbiAqLworCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfTUFUUklYX1JFViwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MDkzYiwgIC8qIFZlbmRvciBJRCBvZiBQbGV4dG9yICovCisJCS5pZFByb2R1Y3QJPSAweGExMDIsICAvKiBQcm9kdWN0IElEIG9mIE00MDJVICovCisJCS5iY2REZXZpY2VfbG8JPSAweDEsCSAgIC8qIHJldmlzaW9uIG51bWJlciBvZiBCbHVlYmVycnkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1BYX000MDJVLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwOTNiLCAgLyogVmVuZG9yIElEIG9mIFBsZXh0b3IgKi8KKwkJLmlkUHJvZHVjdAk9IDB4YTEwNCwgIC8qIFByb2R1Y3QgSUQgb2YgVFY0MDJVICovCisJCS5iY2REZXZpY2VfbG8JPSAweDEsCisJCS5iY2REZXZpY2VfaGkJPSAweDEsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfQU5ZLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgxMGZkLCAgLyogVmVuZG9yIElEIG9mIEFudWJpcyBFbGVjdHJvbmljcyAqLworCQkuaWRQcm9kdWN0CT0gMHhkZTAwLCAgLyogUHJvZHVjdCBJRCBvZiBMaWZldmlldyBMUjE5MiAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgxLAorCQkuYmNkRGV2aWNlX2hpCT0gMHgxLAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfTElGRVZJRVdfTFIxOTIsCisJfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZ283MDA3X3VzYl9pZF90YWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBFWi1VU0IgSFBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChzdHJ1Y3QgZ283MDA3ICpnbywgaW50IHJlcXVlc3QsCisJCWludCB2YWx1ZSwgaW50IGluZGV4LCB2b2lkICp0cmFuc2Zlcl9idWZmZXIsIGludCBsZW5ndGgsIGludCBpbikKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCB0aW1lb3V0ID0gNTAwMDsKKworCWlmIChpbikgeworCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksIHJlcXVlc3QsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkJdmFsdWUsIGluZGV4LCB0cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwgdGltZW91dCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUodXNiLT51c2JkZXYsIDApLCByZXF1ZXN0LAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJdmFsdWUsIGluZGV4LCB0cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwgdGltZW91dCk7CisJfQorfQorCitzdGF0aWMgaW50IGdvNzAwN191c2JfaW50ZXJmYWNlX3Jlc2V0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJdTE2IGludHJfdmFsLCBpbnRyX2RhdGE7CisKKwkvKiBSZXNldCBlbmNvZGVyICovCisJaWYgKGdvNzAwN193cml0ZV9pbnRlcnJ1cHQoZ28sIDB4MDAwMSwgMHgwMDAxKSA8IDApCisJCXJldHVybiAtMTsKKwltc2xlZXAoMTAwKTsKKworCWlmICh1c2ItPmJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpIHsKKwkJLyogUmVzZXQgYnVmZmVyIGluIEVaLVVTQiAqLworI2lmZGVmIEdPNzAwN19VU0JfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IHJlc2V0dGluZyBFWi1VU0IgYnVmZmVyc1xuIik7CisjZW5kaWYKKwkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4MTAsIDAsIDAsIE5VTEwsIDAsIDApIDwgMCB8fAorCQkgICAgZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHgxMCwgMCwgMCwgTlVMTCwgMCwgMCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qIFJlc2V0IGVuY29kZXIgYWdhaW4gKi8KKwkJaWYgKGdvNzAwN193cml0ZV9pbnRlcnJ1cHQoZ28sIDB4MDAwMSwgMHgwMDAxKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCW1zbGVlcCgxMDApOworCX0KKworCS8qIFdhaXQgZm9yIGFuIGludGVycnVwdCB0byBpbmRpY2F0ZSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0ICovCisJaWYgKGdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJmludHJfdmFsLCAmaW50cl9kYXRhKSA8IDAgfHwKKwkJCShpbnRyX3ZhbCAmIH4weDEpICE9IDB4NTVhYSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDctdXNiOiB1bmFibGUgdG8gcmVzZXQgdGhlIFVTQiBpbnRlcmZhY2VcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2JfZXp1c2Jfd3JpdGVfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQkJaW50IGFkZHIsIGludCBkYXRhKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IGksIHI7CisJdTE2IHN0YXR1c19yZWc7CisJaW50IHRpbWVvdXQgPSA1MDA7CisKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJImdvNzAwNy11c2I6IFdyaXRlSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsIGFkZHIsIGRhdGEpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKwkJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwKKwkJCQl1c2JfcmN2Y3RybHBpcGUodXNiLT51c2JkZXYsIDApLCAweDE0LAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJCTAsIEhQSV9TVEFUVVNfQUREUiwgJnN0YXR1c19yZWcsCisJCQkJc2l6ZW9mKHN0YXR1c19yZWcpLCB0aW1lb3V0KTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byB3cml0ZV9pbnRfZXJyb3I7CisJCV9fbGUxNl90b19jcHVzKCZzdGF0dXNfcmVnKTsKKwkJaWYgKCEoc3RhdHVzX3JlZyAmIDB4MDAxMCkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwKTsKKwl9CisJaWYgKGkgPT0gMTAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy11c2I6IGRldmljZSBpcyBodW5nLCBzdGF0dXMgcmVnID0gMHglMDR4XG4iLAorCQkJc3RhdHVzX3JlZyk7CisJCXJldHVybiAtMTsKKwl9CisJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgMHgxMiwKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsIGRhdGEsCisJCQlJTlRfUEFSQU1fQUREUiwgTlVMTCwgMCwgdGltZW91dCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIHdyaXRlX2ludF9lcnJvcjsKKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiLT51c2JkZXYsIDApLAorCQkJMHgxMiwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwgYWRkciwKKwkJCUlOVF9JTkRFWF9BRERSLCBOVUxMLCAwLCB0aW1lb3V0KTsKKwlpZiAociA8IDApCisJCWdvdG8gd3JpdGVfaW50X2Vycm9yOworCXJldHVybiAwOworCit3cml0ZV9pbnRfZXJyb3I6CisJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBXcml0ZUludGVycnVwdDogJWRcbiIsIHIpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2Jfb25ib2FyZF93cml0ZV9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sCisJCQkJCQlpbnQgYWRkciwgaW50IGRhdGEpCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwl1OCAqdGJ1ZjsKKwlpbnQgcjsKKwlpbnQgdGltZW91dCA9IDUwMDsKKworI2lmZGVmIEdPNzAwN19VU0JfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRworCQkiZ283MDA3LXVzYjogV3JpdGVJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwgYWRkciwgZGF0YSk7CisjZW5kaWYKKworCXRidWYgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICh0YnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCh0YnVmLCAwLCA4KTsKKwl0YnVmWzBdID0gZGF0YSAmIDB4ZmY7CisJdGJ1ZlsxXSA9IGRhdGEgPj4gODsKKwl0YnVmWzJdID0gYWRkciAmIDB4ZmY7CisJdGJ1ZlszXSA9IGFkZHIgPj4gODsKKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiLT51c2JkZXYsIDIpLCAweDAwLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5ULCAweDU1YWEsCisJCQkweGYwZjAsIHRidWYsIDgsIHRpbWVvdXQpOworCWtmcmVlKHRidWYpOworCWlmIChyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIFdyaXRlSW50ZXJydXB0OiAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3VzYl9yZWFkaW50ZXJydXB0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OworCXUxNiAqcmVncyA9ICh1MTYgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRVNIVVRET1dOICYmCisJCQkJZ28tPnN0YXR1cyAhPSBTVEFUVVNfU0hVVERPV04pIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDctdXNiOiBlcnJvciBpbiByZWFkIGludGVycnVwdDogJWRcbiIsCisJCQkJdXJiLT5zdGF0dXMpOworCQl9IGVsc2UgeworCQkJd2FrZV91cCgmZ28tPmludGVycnVwdF93YWl0cSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBzaG9ydCByZWFkIGluIGludGVycnVwdCBwaXBlIVxuIik7CisJfSBlbHNlIHsKKwkJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAxOworCQlnby0+aW50ZXJydXB0X2RhdGEgPSBfX2xlMTZfdG9fY3B1KHJlZ3NbMF0pOworCQlnby0+aW50ZXJydXB0X3ZhbHVlID0gX19sZTE2X3RvX2NwdShyZWdzWzFdKTsKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBSZWFkSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsCisJCQkJZ28tPmludGVycnVwdF92YWx1ZSwgZ28tPmludGVycnVwdF9kYXRhKTsKKyNlbmRpZgorCX0KKworCXdha2VfdXAoJmdvLT5pbnRlcnJ1cHRfd2FpdHEpOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2JfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgcjsKKworCXIgPSB1c2Jfc3VibWl0X3VyYih1c2ItPmludHJfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3LXVzYjogdW5hYmxlIHRvIHN1Ym1pdCBpbnRlcnJ1cHQgdXJiOiAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3VzYl9yZWFkX3ZpZGVvX3BpcGVfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gKHN0cnVjdCBnbzcwMDcgKil1cmItPmNvbnRleHQ7CisJaW50IHI7CisKKwlpZiAoIWdvLT5zdHJlYW1pbmcpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZnby0+ZnJhbWVfd2FpdHEpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gdmlkZW8gcGlwZTogJWRcbiIsCisJCQkJdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogc2hvcnQgcmVhZCBpbiB2aWRlbyBwaXBlIVxuIik7CisJCXJldHVybjsKKwl9CisJZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShnbywgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHIgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIHZpZGVvIHBpcGU6ICVkXG4iLCByKTsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3VzYl9yZWFkX2F1ZGlvX3BpcGVfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gKHN0cnVjdCBnbzcwMDcgKil1cmItPmNvbnRleHQ7CisJaW50IHI7CisKKwlpZiAoIWdvLT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIGF1ZGlvIHBpcGU6ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IHNob3J0IHJlYWQgaW4gYXVkaW8gcGlwZSFcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChnby0+YXVkaW9fZGVsaXZlciAhPSBOVUxMKQorCQlnby0+YXVkaW9fZGVsaXZlcihnbywgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHIgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIGF1ZGlvIHBpcGU6ICVkXG4iLCByKTsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3N0cmVhbV9zdGFydChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpLCByOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQlyID0gdXNiX3N1Ym1pdF91cmIodXNiLT52aWRlb191cmJzW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIHN1Ym1pdHRpbmcgdmlkZW8gIgorCQkJCQkidXJiICVkOiAlZFxuIiwgaSwgcik7CisJCQlnb3RvIHZpZGVvX3N1Ym1pdF9mYWlsZWQ7CisJCX0KKwl9CisJaWYgKCFnby0+YXVkaW9fZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCXIgPSB1c2Jfc3VibWl0X3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0sIEdGUF9LRVJORUwpOworCQlpZiAociA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3Igc3VibWl0dGluZyBhdWRpbyAiCisJCQkJCSJ1cmIgJWQ6ICVkXG4iLCBpLCByKTsKKwkJCWdvdG8gYXVkaW9fc3VibWl0X2ZhaWxlZDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworYXVkaW9fc3VibWl0X2ZhaWxlZDoKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQl1c2Jfa2lsbF91cmIodXNiLT5hdWRpb191cmJzW2ldKTsKK3ZpZGVvX3N1Ym1pdF9mYWlsZWQ6CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJdXNiX2tpbGxfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2Jfc3RyZWFtX3N0b3Aoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgaTsKKworCWlmIChnby0+c3RhdHVzID09IFNUQVRVU19TSFVURE9XTikKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJdXNiX2tpbGxfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSk7CisJaWYgKGdvLT5hdWRpb19lbmFibGVkKQorCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJdXNiX2tpbGxfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9zZW5kX2Zpcm13YXJlKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCB0cmFuc2ZlcnJlZCwgcGlwZTsKKwlpbnQgdGltZW91dCA9IDUwMDsKKworI2lmZGVmIEdPNzAwN19VU0JfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogRG93bmxvYWRCdWZmZXIgc2VuZGluZyAlZCBieXRlc1xuIiwgbGVuKTsKKyNlbmRpZgorCisJaWYgKHVzYi0+Ym9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2ItPnVzYmRldiwgMik7CisJZWxzZQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzYi0+dXNiZGV2LCAzKTsKKworCXJldHVybiB1c2JfYnVsa19tc2codXNiLT51c2JkZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCQkJJnRyYW5zZmVycmVkLCB0aW1lb3V0KTsKK30KKworc3RhdGljIHN0cnVjdCBnbzcwMDdfaHBpX29wcyBnbzcwMDdfdXNiX2V6dXNiX2hwaV9vcHMgPSB7CisJLmludGVyZmFjZV9yZXNldAk9IGdvNzAwN191c2JfaW50ZXJmYWNlX3Jlc2V0LAorCS53cml0ZV9pbnRlcnJ1cHQJPSBnbzcwMDdfdXNiX2V6dXNiX3dyaXRlX2ludGVycnVwdCwKKwkucmVhZF9pbnRlcnJ1cHQJCT0gZ283MDA3X3VzYl9yZWFkX2ludGVycnVwdCwKKwkuc3RyZWFtX3N0YXJ0CQk9IGdvNzAwN191c2Jfc3RyZWFtX3N0YXJ0LAorCS5zdHJlYW1fc3RvcAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdG9wLAorCS5zZW5kX2Zpcm13YXJlCQk9IGdvNzAwN191c2Jfc2VuZF9maXJtd2FyZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgZ283MDA3X3VzYl9vbmJvYXJkX2hwaV9vcHMgPSB7CisJLmludGVyZmFjZV9yZXNldAk9IGdvNzAwN191c2JfaW50ZXJmYWNlX3Jlc2V0LAorCS53cml0ZV9pbnRlcnJ1cHQJPSBnbzcwMDdfdXNiX29uYm9hcmRfd3JpdGVfaW50ZXJydXB0LAorCS5yZWFkX2ludGVycnVwdAkJPSBnbzcwMDdfdXNiX3JlYWRfaW50ZXJydXB0LAorCS5zdHJlYW1fc3RhcnQJCT0gZ283MDA3X3VzYl9zdHJlYW1fc3RhcnQsCisJLnN0cmVhbV9zdG9wCQk9IGdvNzAwN191c2Jfc3RyZWFtX3N0b3AsCisJLnNlbmRfZmlybXdhcmUJCT0gZ283MDA3X3VzYl9zZW5kX2Zpcm13YXJlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBEcml2ZXIgZm9yIEVaLVVTQiBJMkMgYWRhcHRlciAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJdTggYnVmWzE2XTsKKwlpbnQgYnVmX2xlbiwgaTsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAtMTsKKworCWRvd24oJnVzYi0+aTJjX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7CisJCS8qIFRoZSBoYXJkd2FyZSBjb21tYW5kIGlzICJ3cml0ZSBzb21lIGJ5dGVzIHRoZW4gcmVhZCBzb21lCisJCSAqIGJ5dGVzIiwgc28gd2UgdHJ5IHRvIGNvYWxlc2NlIGEgd3JpdGUgZm9sbG93ZWQgYnkgYSByZWFkCisJCSAqIGludG8gYSBzaW5nbGUgVVNCIHRyYW5zYWN0aW9uICovCisJCWlmIChpICsgMSA8IG51bSAmJiBtc2dzW2ldLmFkZHIgPT0gbXNnc1tpICsgMV0uYWRkciAmJgorCQkJCSEobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSAmJgorCQkJCShtc2dzW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBpMmMgd3JpdGUvcmVhZCAlZC8lZCAiCisJCQkJCSJieXRlcyBvbiAlMDJ4XG4iLCBtc2dzW2ldLmxlbiwKKwkJCQkJbXNnc1tpICsgMV0ubGVuLCBtc2dzW2ldLmFkZHIpOworI2VuZGlmCisJCQlidWZbMF0gPSAweDAxOworCQkJYnVmWzFdID0gbXNnc1tpXS5sZW4gKyAxOworCQkJYnVmWzJdID0gbXNnc1tpXS5hZGRyIDw8IDE7CisJCQltZW1jcHkoJmJ1ZlszXSwgbXNnc1tpXS5idWYsIG1zZ3NbaV0ubGVuKTsKKwkJCWJ1Zl9sZW4gPSBtc2dzW2ldLmxlbiArIDM7CisJCQlidWZbYnVmX2xlbisrXSA9IG1zZ3NbKytpXS5sZW47CisJCX0gZWxzZSBpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisjaWZkZWYgR083MDA3X0kyQ19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IGkyYyByZWFkICVkICIKKwkJCQkJImJ5dGVzIG9uICUwMnhcbiIsIG1zZ3NbaV0ubGVuLAorCQkJCQltc2dzW2ldLmFkZHIpOworI2VuZGlmCisJCQlidWZbMF0gPSAweDAxOworCQkJYnVmWzFdID0gMTsKKwkJCWJ1ZlsyXSA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJYnVmWzNdID0gbXNnc1tpXS5sZW47CisJCQlidWZfbGVuID0gNDsKKwkJfSBlbHNlIHsKKyNpZmRlZiBHTzcwMDdfSTJDX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogaTJjIHdyaXRlICVkICIKKwkJCQkJImJ5dGVzIG9uICUwMnhcbiIsIG1zZ3NbaV0ubGVuLAorCQkJCQltc2dzW2ldLmFkZHIpOworI2VuZGlmCisJCQlidWZbMF0gPSAweDAwOworCQkJYnVmWzFdID0gbXNnc1tpXS5sZW4gKyAxOworCQkJYnVmWzJdID0gbXNnc1tpXS5hZGRyIDw8IDE7CisJCQltZW1jcHkoJmJ1ZlszXSwgbXNnc1tpXS5idWYsIG1zZ3NbaV0ubGVuKTsKKwkJCWJ1Zl9sZW4gPSBtc2dzW2ldLmxlbiArIDM7CisJCQlidWZbYnVmX2xlbisrXSA9IDA7CisJCX0KKwkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4MjQsIDAsIDAsCisJCQkJCQlidWYsIGJ1Zl9sZW4sIDApIDwgMCkKKwkJCWdvdG8gaTJjX2RvbmU7CisJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwkJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDI1LCAwLCAwLCBidWYsCisJCQkJCQltc2dzW2ldLmxlbiArIDEsIDEpIDwgMCkKKwkJCQlnb3RvIGkyY19kb25lOworCQkJbWVtY3B5KG1zZ3NbaV0uYnVmLCBidWYgKyAxLCBtc2dzW2ldLmxlbik7CisJCX0KKwl9CisJcmV0ID0gMDsKKworaTJjX2RvbmU6CisJdXAoJnVzYi0+aTJjX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgZ283MDA3X3VzYl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBObyBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSwgc28gd2UgZG9uJ3QgYm90aGVyCisJICogc3VwcG9ydGluZyBxdWljayB3cml0ZXMgdG8gYXZvaWQgY29uZnVzaW5nIHByb2JpbmcgKi8KKwlyZXR1cm4gKEkyQ19GVU5DX1NNQlVTX0VNVUwpICYgfkkyQ19GVU5DX1NNQlVTX1FVSUNLOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZ283MDA3X3VzYl9hbGdvID0geworCS5tYXN0ZXJfeGZlcgk9IGdvNzAwN191c2JfaTJjX21hc3Rlcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gZ283MDA3X3VzYl9mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBnbzcwMDdfdXNiX2FkYXBfdGVtcGwgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuY2xhc3MJCQk9IEkyQ19DTEFTU19UVl9BTkFMT0csCisJLm5hbWUJCQk9ICJXSVMgR083MDA3U0IgRVotVVNCIiwKKwkuaWQJCQk9IEkyQ19BTEdPX0dPNzAwN19VU0IsCisJLmFsZ28JCQk9ICZnbzcwMDdfdXNiX2FsZ28sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqIFVTQiBhZGQvcmVtb3ZlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBnbzcwMDcgKmdvOworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CisJc3RydWN0IGdvNzAwN191c2JfYm9hcmQgKmJvYXJkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWNoYXIgKm5hbWU7CisJaW50IHZpZGVvX3BpcGUsIGksIHZfdXJiX2xlbjsKKworCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBwcm9iaW5nIG5ldyBHTzcwMDcgVVNCIGJvYXJkXG4iKTsKKworCXN3aXRjaCAoaWQtPmRyaXZlcl9pbmZvKSB7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfSUk6CisJCW5hbWUgPSAiV0lTIE1hdHJpeCBJSSBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfbWF0cml4X2lpOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX01BVFJJWF9SRUxPQUQ6CisJCW5hbWUgPSAiV0lTIE1hdHJpeCBSZWxvYWRlZCBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfbWF0cml4X3JlbG9hZDsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVWOgorCQluYW1lID0gIldJUyBNYXRyaXggUmV2b2x1dGlvbiBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfbWF0cml4X3Jldm9sdXRpb247CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfU1RBUl9UUkVLOgorCQluYW1lID0gIldJUyBTdGFyIFRyZWsgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX3N0YXJfdHJlazsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9YTUVOOgorCQluYW1lID0gIldJUyBYTWVuIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF94bWVuOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1hNRU5fSUk6CisJCW5hbWUgPSAiV0lTIFhNZW4gSUkgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX3htZW47CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfWE1FTl9JSUk6CisJCW5hbWUgPSAiV0lTIFhNZW4gSUlJIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF94bWVuOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1BYX000MDJVOgorCQluYW1lID0gIlBsZXh0b3IgUFgtTTQwMlUiOworCQlib2FyZCA9ICZib2FyZF9tYXRyaXhfaWk7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0FOWToKKwkJbmFtZSA9ICJQbGV4dG9yIFBYLVRWNDAyVSAodW5rbm93biB0dW5lcikiOworCQlib2FyZCA9ICZib2FyZF9weF90djQwMnU7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfTElGRVZJRVdfTFIxOTI6CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogVGhlIExpZmV2aWV3IFRWIFdhbGtlciBVbHRyYSAiCisJCQkJImlzIG5vdCBzdXBwb3J0ZWQuICBTb3JyeSFcbiIpOworCQlyZXR1cm4gMDsKKwkJbmFtZSA9ICJMaWZldmlldyBUViBXYWxrZXIgVWx0cmEiOworCQlib2FyZCA9ICZib2FyZF9saWZldmlld19scjE5MjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiB1bmtub3duIGJvYXJkIElEICVkIVxuIiwKKwkJCQkodW5zaWduZWQgaW50KWlkLT5kcml2ZXJfaW5mbyk7CisJCXJldHVybiAwOworCX0KKworCXVzYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnbzcwMDdfdXNiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQodXNiLCAwLCBzaXplb2Yoc3RydWN0IGdvNzAwN191c2IpKTsKKworCS8qIEFsbG9jYXRlIHRoZSBVUkIgYW5kIGJ1ZmZlciBmb3IgcmVjZWl2aW5nIGluY29taW5nIGludGVycnVwdHMgKi8KKwl1c2ItPmludHJfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNiLT5pbnRyX3VyYiA9PSBOVUxMKQorCQlnb3RvIGFsbG9jZmFpbDsKKwl1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKDIqc2l6ZW9mKHUxNiksIEdGUF9LRVJORUwpOworCWlmICh1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisKKwlnbyA9IGdvNzAwN19hbGxvYygmYm9hcmQtPm1haW5faW5mbywgJmludGYtPmRldik7CisJaWYgKGdvID09IE5VTEwpCisJCWdvdG8gYWxsb2NmYWlsOworCXVzYi0+Ym9hcmQgPSBib2FyZDsKKwl1c2ItPnVzYmRldiA9IHVzYmRldjsKKwlnby0+Ym9hcmRfaWQgPSBpZC0+ZHJpdmVyX2luZm87CisJc3RybmNweShnby0+bmFtZSwgbmFtZSwgc2l6ZW9mKGdvLT5uYW1lKSk7CisJaWYgKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpCisJCWdvLT5ocGlfb3BzID0gJmdvNzAwN191c2JfZXp1c2JfaHBpX29wczsKKwllbHNlCisJCWdvLT5ocGlfb3BzID0gJmdvNzAwN191c2Jfb25ib2FyZF9ocGlfb3BzOworCWdvLT5ocGlfY29udGV4dCA9IHVzYjsKKwl1c2JfZmlsbF9pbnRfdXJiKHVzYi0+aW50cl91cmIsIHVzYi0+dXNiZGV2LAorCQkJdXNiX3JjdmludHBpcGUodXNiLT51c2JkZXYsIDQpLAorCQkJdXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAyKnNpemVvZih1MTYpLAorCQkJZ283MDA3X3VzYl9yZWFkaW50ZXJydXB0X2NvbXBsZXRlLCBnbywgOCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBnbyk7CisKKwkvKiBCb290IHRoZSBHTzcwMDcgKi8KKwlpZiAoZ283MDA3X2Jvb3RfZW5jb2RlcihnbywgZ28tPmJvYXJkX2luZm8tPmZsYWdzICYKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQykgPCAwKQorCQlnb3RvIGluaXRmYWlsOworCisJLyogUmVnaXN0ZXIgdGhlIEVaLVVTQiBJMkMgYWRhcHRlciwgaWYgd2UncmUgdXNpbmcgaXQgKi8KKwlpZiAoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQl9JMkMpIHsKKwkJbWVtY3B5KCZnby0+aTJjX2FkYXB0ZXIsICZnbzcwMDdfdXNiX2FkYXBfdGVtcGwsCisJCQkJc2l6ZW9mKGdvNzAwN191c2JfYWRhcF90ZW1wbCkpOworCQlpbml0X01VVEVYKCZ1c2ItPmkyY19sb2NrKTsKKwkJZ28tPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSBnby0+ZGV2OworCQlpMmNfc2V0X2FkYXBkYXRhKCZnby0+aTJjX2FkYXB0ZXIsIGdvKTsKKwkJaWYgKGkyY19hZGRfYWRhcHRlcigmZ28tPmkyY19hZGFwdGVyKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDctdXNiOiBlcnJvcjogaTJjX2FkZF9hZGFwdGVyIGZhaWxlZFxuIik7CisJCQlnb3RvIGluaXRmYWlsOworCQl9CisJCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAxOworCX0KKworCS8qIFBlbGNvIGFuZCBBZGxpbmsgcmV1c2VkIHRoZSBYTWVuIGFuZCBYTWVuLUlJSSB2ZW5kb3IgYW5kIHByb2R1Y3QKKwkgKiBJRHMgZm9yIHRoZWlyIG93biBpbmNvbXBhdGlibGUgZGVzaWducy4gIFdlIGNhbiBkZXRlY3QgWE1lbiBib2FyZHMKKwkgKiBieSBwcm9iaW5nIHRoZSBzZW5zb3IsIGJ1dCB0aGVyZSBpcyBubyB3YXkgdG8gcHJvYmUgdGhlIHNlbnNvcnMgb24KKwkgKiB0aGUgUGVsY28gYW5kIEFkbGluayBkZXNpZ25zIHNvIHdlIGRlZmF1bHQgdG8gdGhlIEFkbGluay4gIElmIGl0CisJICogaXMgYWN0dWFsbHkgYSBQZWxjbywgdGhlIHVzZXIgbXVzdCBzZXQgdGhlIGFzc3VtZV9lbmR1cmEgbW9kdWxlCisJICogcGFyYW1ldGVyLiAqLworCWlmICgoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX1hNRU4gfHwKKwkJCQlnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfWE1FTl9JSUkpICYmCisJCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lKSB7CisJCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7CisKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIHJlZ2lzdGVyIDB4MEEgaXMgMHg3NiAqLworCQlpMmNfc21idXNfeGZlcigmZ28tPmkyY19hZGFwdGVyLCAweDIxLCBJMkNfQ0xJRU5UX1NDQ0IsCisJCQlJMkNfU01CVVNfUkVBRCwgMHgwQSwgSTJDX1NNQlVTX0JZVEVfREFUQSwgJmRhdGEpOworCQlpZiAoZGF0YS5ieXRlICE9IDB4NzYpIHsKKwkJCWlmIChhc3N1bWVfZW5kdXJhKSB7CisJCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfRU5EVVJBOworCQkJCXVzYi0+Ym9hcmQgPSBib2FyZCA9ICZib2FyZF9lbmR1cmE7CisJCQkJZ28tPmJvYXJkX2luZm8gPSAmYm9hcmQtPm1haW5faW5mbzsKKwkJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGVsY28gRW5kdXJhIiwKKwkJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJfSBlbHNlIHsKKwkJCQl1MTYgY2hhbm5lbDsKKworCQkJCS8qIHNldCBHUElPNSB0byBiZSBhbiBvdXRwdXQsIGN1cnJlbnRseSBsb3cgKi8KKwkJCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMDApOworCQkJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODAsIDB4MDBkZik7CisJCQkJLyogcmVhZCBjaGFubmVsIG51bWJlciBmcm9tIEdQSU9bMTowXSAqLworCQkJCWdvNzAwN19yZWFkX2FkZHIoZ28sIDB4M2M4MSwgJmNoYW5uZWwpOworCQkJCWNoYW5uZWwgJj0gMHgzOworCQkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNDsKKwkJCQl1c2ItPmJvYXJkID0gYm9hcmQgPSAmYm9hcmRfYWRsaW5rX21wZzI0OworCQkJCWdvLT5ib2FyZF9pbmZvID0gJmJvYXJkLT5tYWluX2luZm87CisJCQkJZ28tPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbDsKKwkJCQlzbnByaW50Zihnby0+bmFtZSwgc2l6ZW9mKGdvLT5uYW1lKSwKKwkJCQkJIkFkbGluayBQQ0ktTVBHMjQsIGNoYW5uZWwgIyVkIiwKKwkJCQkJY2hhbm5lbCk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBQcm9iZSB0aGUgdHVuZXIgbW9kZWwgb24gdGhlIFRWNDAyVSAqLworCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0FOWSkgeworCQl1OCBkYXRhWzNdOworCisJCS8qIEJvYXJkIHN0cmFwcGluZyBpbmRpY2F0ZXMgdHVuZXIgbW9kZWwgKi8KKwkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NDEsIDAsIDAsIGRhdGEsIDMsIDEpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBHUElPIHJlYWQgZmFpbGVkIVxuIik7CisJCQlnb3RvIGluaXRmYWlsOworCQl9CisJCXN3aXRjaCAoZGF0YVswXSA+PiA2KSB7CisJCWNhc2UgMToKKwkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9FVTsKKwkJCWdvLT50dW5lcl90eXBlID0gVFVORVJfU09OWV9CVEZfUEc0NzJaOworCQkJc3RybmNweShnby0+bmFtZSwgIlBsZXh0b3IgUFgtVFY0MDJVLUVVIiwKKwkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0pQOworCQkJZ28tPnR1bmVyX3R5cGUgPSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o7CisJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGxleHRvciBQWC1UVjQwMlUtSlAiLAorCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfTkE7CisJCQlnby0+dHVuZXJfdHlwZSA9IFRVTkVSX1NPTllfQlRGX1BCNDYzWjsKKwkJCXN0cm5jcHkoZ28tPm5hbWUsICJQbGV4dG9yIFBYLVRWNDAyVS1OQSIsCisJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogdW5hYmxlIHRvIGRldGVjdCAiCisJCQkJCQkidHVuZXIgdHlwZSFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogQ29uZmlndXJlIHR1bmVyIG1vZGUgc2VsZWN0aW9uIGlucHV0cyBjb25uZWN0ZWQKKwkJICogdG8gdGhlIEVaLVVTQiBHUElPIG91dHB1dCBwaW5zICovCisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDQwLCAweDdmMDIsIDAsCisJCQkJCU5VTEwsIDAsIDApIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdvNzAwNy11c2I6IEdQSU8gd3JpdGUgZmFpbGVkIVxuIik7CisJCQlnb3RvIGluaXRmYWlsOworCQl9CisJfQorCisJLyogUHJpbnQgYSBuYXN0eSBtZXNzYWdlIGlmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHVzZSBhIFVTQjIuMCBkZXZpY2UgaW4KKwkgKiBhIFVTQjEuMSBwb3J0LiAgVGhlcmUgd2lsbCBiZSBzaWxlbnQgY29ycnVwdGlvbiBvZiB0aGUgc3RyZWFtLiAqLworCWlmICgoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikgJiYKKwkJCXVzYmRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogKioqIFdBUk5JTkcgKioqICBUaGlzIGRldmljZSAiCisJCQkJIm11c3QgYmUgY29ubmVjdGVkIHRvIGEgVVNCIDIuMCBwb3J0ISAgIgorCQkJCSJBdHRlbXB0aW5nIHRvIGNhcHR1cmUgdmlkZW8gdGhyb3VnaCBhIFVTQiAxLjEgIgorCQkJCSJwb3J0IHdpbGwgcmVzdWx0IGluIHN0cmVhbSBjb3JydXB0aW9uLCBldmVuICIKKwkJCQkiYXQgbG93IGJpdHJhdGVzIVxuIik7CisKKwkvKiBEbyBhbnkgZmluYWwgR083MDA3IGluaXRpYWxpemF0aW9uLCB0aGVuIHJlZ2lzdGVyIHRoZQorCSAqIFY0TDIgYW5kIEFMU0EgaW50ZXJmYWNlcyAqLworCWlmIChnbzcwMDdfcmVnaXN0ZXJfZW5jb2RlcihnbykgPCAwKQorCQlnb3RvIGluaXRmYWlsOworCisJLyogQWxsb2NhdGUgdGhlIFVSQnMgYW5kIGJ1ZmZlcnMgZm9yIHJlY2VpdmluZyB0aGUgdmlkZW8gc3RyZWFtICovCisJaWYgKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpIHsKKwkJdl91cmJfbGVuID0gMTAyNDsKKwkJdmlkZW9fcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1c2ItPnVzYmRldiwgNik7CisJfSBlbHNlIHsKKwkJdl91cmJfbGVuID0gNTEyOworCQl2aWRlb19waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHVzYi0+dXNiZGV2LCAxKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQl1c2ItPnZpZGVvX3VyYnNbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAodXNiLT52aWRlb191cmJzW2ldID09IE5VTEwpCisJCQlnb3RvIGluaXRmYWlsOworCQl1c2ItPnZpZGVvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9CisJCQkJCQlrbWFsbG9jKHZfdXJiX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1c2ItPnZpZGVvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKQorCQkJZ290byBpbml0ZmFpbDsKKwkJdXNiX2ZpbGxfYnVsa191cmIodXNiLT52aWRlb191cmJzW2ldLCB1c2ItPnVzYmRldiwgdmlkZW9fcGlwZSwKKwkJCQl1c2ItPnZpZGVvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciwgdl91cmJfbGVuLAorCQkJCWdvNzAwN191c2JfcmVhZF92aWRlb19waXBlX2NvbXBsZXRlLCBnbyk7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIFVSQnMgYW5kIGJ1ZmZlcnMgZm9yIHJlY2VpdmluZyB0aGUgYXVkaW8gc3RyZWFtICovCisJaWYgKChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSAmJiBnby0+YXVkaW9fZW5hYmxlZCkKKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQkJdXNiLT5hdWRpb191cmJzW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICh1c2ItPmF1ZGlvX3VyYnNbaV0gPT0gTlVMTCkKKwkJCQlnb3RvIGluaXRmYWlsOworCQkJdXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKDQwOTYsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKHVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCisJCQkJZ290byBpbml0ZmFpbDsKKwkJCXVzYl9maWxsX2J1bGtfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSwgdXNiLT51c2JkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlKHVzYi0+dXNiZGV2LCA4KSwKKwkJCQl1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciwgNDA5NiwKKwkJCQlnbzcwMDdfdXNiX3JlYWRfYXVkaW9fcGlwZV9jb21wbGV0ZSwgZ28pOworCQl9CisKKworCWdvLT5zdGF0dXMgPSBTVEFUVVNfT05MSU5FOworCXJldHVybiAwOworCitpbml0ZmFpbDoKKwlnby0+c3RhdHVzID0gU1RBVFVTX1NIVVRET1dOOworCXJldHVybiAwOworCithbGxvY2ZhaWw6CisJaWYgKHVzYi0+aW50cl91cmIpIHsKKwkJa2ZyZWUodXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKHVzYi0+aW50cl91cmIpOworCX0KKwlrZnJlZSh1c2IpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IGk7CisKKwlnby0+c3RhdHVzID0gU1RBVFVTX1NIVVRET1dOOworCXVzYl9raWxsX3VyYih1c2ItPmludHJfdXJiKTsKKworCS8qIEZyZWUgVVNCLXJlbGF0ZWQgc3RydWN0cyAqLworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXSAhPSBOVUxMKSB7CisJCQlpZiAodXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkKKwkJCQlrZnJlZSh1c2ItPnZpZGVvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXNiLT52aWRlb191cmJzW2ldKTsKKwkJfQorCQlpZiAodXNiLT5hdWRpb191cmJzW2ldICE9IE5VTEwpIHsKKwkJCWlmICh1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQorCQkJCWtmcmVlKHVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0pOworCQl9CisJfQorCWtmcmVlKHVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX2ZyZWVfdXJiKHVzYi0+aW50cl91cmIpOworCisJa2ZyZWUoZ28tPmhwaV9jb250ZXh0KTsKKworCWdvNzAwN19yZW1vdmUoZ28pOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ283MDA3X3VzYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImdvNzAwNyIsCisJLnByb2JlCQk9IGdvNzAwN191c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBnbzcwMDdfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gZ283MDA3X3VzYl9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdvNzAwN191c2JfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmdvNzAwN191c2JfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGdvNzAwN191c2JfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZnbzcwMDdfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGdvNzAwN191c2JfaW5pdCk7Cittb2R1bGVfZXhpdChnbzcwMDdfdXNiX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlMTE0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwpAQCAtMCwwICsxLDE0OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImdvNzAwNy5oIgorI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdGF0aWMgdm9pZCBkZWFjdGl2YXRlX2J1ZmZlcihzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYpCit7CisJaW50IGk7CisKKwlpZiAoZ29idWYtPnN0YXRlICE9IEJVRl9TVEFURV9JRExFKSB7CisJCWxpc3RfZGVsKCZnb2J1Zi0+c3RyZWFtKTsKKwkJZ29idWYtPnN0YXRlID0gQlVGX1NUQVRFX0lETEU7CisJfQorCWlmIChnb2J1Zi0+cGFnZV9jb3VudCA+IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGdvYnVmLT5wYWdlX2NvdW50OyArK2kpCisJCQlwYWdlX2NhY2hlX3JlbGVhc2UoZ29idWYtPnBhZ2VzW2ldKTsKKwkJZ29idWYtPnBhZ2VfY291bnQgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgYWJvcnRfcXVldWVkKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZ29idWYsIG5leHQsICZnby0+c3RyZWFtLCBzdHJlYW0pIHsKKwkJZGVhY3RpdmF0ZV9idWZmZXIoZ29idWYpOworCX0KK30KKworc3RhdGljIGludCBnbzcwMDdfc3RyZWFtb2ZmKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCByZXR2YWwgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkb3duKCZnby0+aHdfbG9jayk7CisJaWYgKGdvLT5zdHJlYW1pbmcpIHsKKwkJZ28tPnN0cmVhbWluZyA9IDA7CisJCWdvNzAwN19zdHJlYW1fc3RvcChnbyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJYWJvcnRfcXVldWVkKGdvKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWdvNzAwN19yZXNldF9lbmNvZGVyKGdvKTsKKwkJcmV0dmFsID0gMDsKKwl9CisJdXAoJmdvLT5od19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maDsKKworCWlmIChnby0+c3RhdHVzICE9IFNUQVRVU19PTkxJTkUpCisJCXJldHVybiAtRUJVU1k7CisJZ29maCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnbzcwMDdfZmlsZSksIEdGUF9LRVJORUwpOworCWlmIChnb2ZoID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCSsrZ28tPnJlZl9jb3VudDsKKwlnb2ZoLT5nbyA9IGdvOworCWluaXRfTVVURVgoJmdvZmgtPmxvY2spOworCWdvZmgtPmJ1Zl9jb3VudCA9IDA7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZ29maDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKworCWlmIChnb2ZoLT5idWZfY291bnQgPiAwKSB7CisJCWdvNzAwN19zdHJlYW1vZmYoZ28pOworCQlnby0+aW5fdXNlID0gMDsKKwkJa2ZyZWUoZ29maC0+YnVmcyk7CisJCWdvZmgtPmJ1Zl9jb3VudCA9IDA7CisJfQorCWtmcmVlKGdvZmgpOworCWlmICgtLWdvLT5yZWZfY291bnQgPT0gMCkKKwkJa2ZyZWUoZ28pOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2ZyYW1lX3R5cGVfZmxhZyhzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYsIGludCBmb3JtYXQpCit7CisJdTggKmYgPSBwYWdlX2FkZHJlc3MoZ29idWYtPnBhZ2VzWzBdKTsKKworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBHTzcwMDdfRk9STUFUX01KUEVHOgorCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCXN3aXRjaCAoKGZbZ29idWYtPmZyYW1lX29mZnNldCArIDRdID4+IDYpICYgMHgzKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FOworCQljYXNlIDE6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19QRlJBTUU7CisJCWNhc2UgMjoKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0JGUkFNRTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJc3dpdGNoICgoZltnb2J1Zi0+ZnJhbWVfb2Zmc2V0ICsgNV0gPj4gMykgJiAweDcpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJCWNhc2UgMjoKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX1BGUkFNRTsKKwkJY2FzZSAzOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfQkZSQU1FOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfY2FwdHVyZV9zaXplKHN0cnVjdCBnbzcwMDcgKmdvLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwgaW50IHRyeSkKK3sKKwlpbnQgc2Vuc29yX2hlaWdodCA9IDAsIHNlbnNvcl93aWR0aCA9IDA7CisJaW50IHdpZHRoLCBoZWlnaHQsIGk7CisKKwlpZiAoZm10ICE9IE5VTEwgJiYgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRyAmJgorCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NUEVHICYmCisJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01QRUc0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZ28tPnN0YW5kYXJkKSB7CisJY2FzZSBHTzcwMDdfU1REX05UU0M6CisJCXNlbnNvcl93aWR0aCA9IDcyMDsKKwkJc2Vuc29yX2hlaWdodCA9IDQ4MDsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfU1REX1BBTDoKKwkJc2Vuc29yX3dpZHRoID0gNzIwOworCQlzZW5zb3JfaGVpZ2h0ID0gNTc2OworCQlicmVhazsKKwljYXNlIEdPNzAwN19TVERfT1RIRVI6CisJCXNlbnNvcl93aWR0aCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGg7CisJCXNlbnNvcl9oZWlnaHQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZtdCA9PSBOVUxMKSB7CisJCXdpZHRoID0gc2Vuc29yX3dpZHRoOworCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0OworCX0gZWxzZSBpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfU0NBTElORykgeworCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gc2Vuc29yX3dpZHRoKQorCQkJd2lkdGggPSBzZW5zb3Jfd2lkdGg7CisJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8IDE0NCkKKwkJCXdpZHRoID0gMTQ0OworCQllbHNlCisJCQl3aWR0aCA9IGZtdC0+Zm10LnBpeC53aWR0aCAmIH4weDBmOworCisJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gc2Vuc29yX2hlaWdodCkKKwkJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQ7CisJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCA5NikKKwkJCWhlaWdodCA9IDk2OworCQllbHNlCisJCQloZWlnaHQgPSBmbXQtPmZtdC5waXguaGVpZ2h0ICYgfjB4MGY7CisJfSBlbHNlIHsKKwkJaW50IHJlcXVlc3RlZF9zaXplID0gZm10LT5mbXQucGl4LndpZHRoICogZm10LT5mbXQucGl4LmhlaWdodDsKKwkJaW50IHNlbnNvcl9zaXplID0gc2Vuc29yX3dpZHRoICogc2Vuc29yX2hlaWdodDsKKworCQlpZiAoNjQgKiByZXF1ZXN0ZWRfc2l6ZSA8IDkgKiBzZW5zb3Jfc2l6ZSkgeworCQkJd2lkdGggPSBzZW5zb3Jfd2lkdGggLyA0OworCQkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodCAvIDQ7CisJCX0gZWxzZSBpZiAoNjQgKiByZXF1ZXN0ZWRfc2l6ZSA8IDM2ICogc2Vuc29yX3NpemUpIHsKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoIC8gMjsKKwkJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQgLyAyOworCQl9IGVsc2UgeworCQkJd2lkdGggPSBzZW5zb3Jfd2lkdGg7CisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0OworCQl9CisJCXdpZHRoICY9IH4weGY7CisJCWhlaWdodCAmPSB+MHhmOworCX0KKworCWlmIChmbXQgIT0gTlVMTCkgeworCQl1MzIgcGl4ZWxmb3JtYXQgPSBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CisKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmbXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IGhlaWdodDsKKwkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7CisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBHTzcwMDdfQlVGX1NJWkU7CisJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsgLyogPz8gKi8KKwl9CisKKwlpZiAodHJ5KQorCQlyZXR1cm4gMDsKKworCWdvLT53aWR0aCA9IHdpZHRoOworCWdvLT5oZWlnaHQgPSBoZWlnaHQ7CisJZ28tPmVuY29kZXJfaF9vZmZzZXQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hfb2Zmc2V0OworCWdvLT5lbmNvZGVyX3Zfb2Zmc2V0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl92X29mZnNldDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQlnby0+bW9kZXRbaV0uZW5hYmxlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTYyNDsgKytpKQorCQlnby0+bW9kZXRfbWFwW2ldID0gMDsKKworCWlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9TQ0FMSU5HKSB7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX3Jlc29sdXRpb24gcmVzOworCisJCXJlcy53aWR0aCA9IHdpZHRoOworCQlpZiAoaGVpZ2h0ID4gc2Vuc29yX2hlaWdodCAvIDIpIHsKKwkJCXJlcy5oZWlnaHQgPSBoZWlnaHQgLyAyOworCQkJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXMuaGVpZ2h0ID0gaGVpZ2h0OworCQkJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDE7CisJCX0KKwkJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCURFQ09ERVJfU0VUX1JFU09MVVRJT04sICZyZXMpOworCX0gZWxzZSB7CisJCWlmICh3aWR0aCA8PSBzZW5zb3Jfd2lkdGggLyA0KSB7CisJCQlnby0+ZW5jb2Rlcl9oX2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAxOworCQkJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMTsKKwkJfSBlbHNlIGlmICh3aWR0aCA8PSBzZW5zb3Jfd2lkdGggLyAyKSB7CisJCQlnby0+ZW5jb2Rlcl9oX2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAxOworCQkJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWdvLT5lbmNvZGVyX2hfaGFsdmUgPSAwOworCQkJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDA7CisJCQlnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPSAwOworCQl9CisJfQorCisJaWYgKGZtdCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfTVBFRzoKKwkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSB8fAorCQkJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiB8fAorCQkJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCkKKwkJCWJyZWFrOworCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHMTsKKwkJZ28tPnBhbGkgPSAwOworCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwkJZ28tPmdvcF9zaXplID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyAxMDAwOworCQlnby0+aXBiID0gMDsKKwkJZ28tPmNsb3NlZF9nb3AgPSAxOworCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAxOworCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+ZHZkX21vZGUgPSAwOworCQlicmVhazsKKwkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5ISAqLworCWNhc2UgVjRMMl9QSVhfRk1UX01QRUc0OgorCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0KQorCQkJYnJlYWs7CisJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUc0OworCQlnby0+cGFsaSA9IDB4ZjU7CisJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCQlnby0+Z29wX3NpemUgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDA7CisJCWdvLT5pcGIgPSAwOworCQlnby0+Y2xvc2VkX2dvcCA9IDE7CisJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDE7CisJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDE7CisJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDE7CisJCWdvLT5kdmRfbW9kZSA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX01KUEVHOgorCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NSlBFRzsKKwkJZ28tPnBhbGkgPSAwOworCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwkJZ28tPmdvcF9zaXplID0gMDsKKwkJZ28tPmlwYiA9IDA7CisJCWdvLT5jbG9zZWRfZ29wID0gMDsKKwkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMDsKKwkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMDsKKwkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMDsKKwkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsaXBfdG9fbW9kZXRfbWFwKHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgcmVnaW9uLAorCQlzdHJ1Y3QgdjRsMl9jbGlwICpjbGlwX2xpc3QpCit7CisJc3RydWN0IHY0bDJfY2xpcCBjbGlwLCAqY2xpcF9wdHI7CisJaW50IHgsIHksIG1ibnVtOworCisJLyogQ2hlY2sgaWYgY29vcmRpbmF0ZXMgYXJlIE9LIGFuZCBpZiBhbnkgbWFjcm9ibG9ja3MgYXJlIGFscmVhZHkKKwkgKiB1c2VkIGJ5IG90aGVyIHJlZ2lvbnMgKGJlc2lkZXMgMCkgKi8KKwljbGlwX3B0ciA9IGNsaXBfbGlzdDsKKwl3aGlsZSAoY2xpcF9wdHIpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbGlwLCBjbGlwX3B0ciwgc2l6ZW9mKGNsaXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY2xpcC5jLmxlZnQgPCAwIHx8IChjbGlwLmMubGVmdCAmIDB4RikgfHwKKwkJCQljbGlwLmMud2lkdGggPD0gMCB8fCAoY2xpcC5jLndpZHRoICYgMHhGKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2xpcC5jLmxlZnQgKyBjbGlwLmMud2lkdGggPiBnby0+d2lkdGgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNsaXAuYy50b3AgPCAwIHx8IChjbGlwLmMudG9wICYgMHhGKSB8fAorCQkJCWNsaXAuYy5oZWlnaHQgPD0gMCB8fCAoY2xpcC5jLmhlaWdodCAmIDB4RikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNsaXAuYy50b3AgKyBjbGlwLmMuaGVpZ2h0ID4gZ28tPmhlaWdodCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlmb3IgKHkgPSAwOyB5IDwgY2xpcC5jLmhlaWdodDsgeSArPSAxNikKKwkJCWZvciAoeCA9IDA7IHggPCBjbGlwLmMud2lkdGg7IHggKz0gMTYpIHsKKwkJCQltYm51bSA9IChnby0+d2lkdGggPj4gNCkgKgorCQkJCQkJKChjbGlwLmMudG9wICsgeSkgPj4gNCkgKworCQkJCQkoKGNsaXAuYy5sZWZ0ICsgeCkgPj4gNCk7CisJCQkJaWYgKGdvLT5tb2RldF9tYXBbbWJudW1dICE9IDAgJiYKKwkJCQkJCWdvLT5tb2RldF9tYXBbbWJudW1dICE9IHJlZ2lvbikKKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJY2xpcF9wdHIgPSBjbGlwLm5leHQ7CisJfQorCisJLyogQ2xlYXIgb2xkIHJlZ2lvbiBtYWNyb2Jsb2NrcyAqLworCWZvciAobWJudW0gPSAwOyBtYm51bSA8IDE2MjQ7ICsrbWJudW0pCisJCWlmIChnby0+bW9kZXRfbWFwW21ibnVtXSA9PSByZWdpb24pCisJCQlnby0+bW9kZXRfbWFwW21ibnVtXSA9IDA7CisKKwkvKiBDbGFpbSBtYWNyb2Jsb2NrcyBpbiB0aGlzIGxpc3QgKi8KKwljbGlwX3B0ciA9IGNsaXBfbGlzdDsKKwl3aGlsZSAoY2xpcF9wdHIpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbGlwLCBjbGlwX3B0ciwgc2l6ZW9mKGNsaXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlmb3IgKHkgPSAwOyB5IDwgY2xpcC5jLmhlaWdodDsgeSArPSAxNikKKwkJCWZvciAoeCA9IDA7IHggPCBjbGlwLmMud2lkdGg7IHggKz0gMTYpIHsKKwkJCQltYm51bSA9IChnby0+d2lkdGggPj4gNCkgKgorCQkJCQkJKChjbGlwLmMudG9wICsgeSkgPj4gNCkgKworCQkJCQkoKGNsaXAuYy5sZWZ0ICsgeCkgPj4gNCk7CisJCQkJZ28tPm1vZGV0X21hcFttYm51bV0gPSByZWdpb247CisJCQl9CisJCWNsaXBfcHRyID0gY2xpcC5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBnb2ZoLT5nbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKworCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJnbzcwMDciKTsKKwkJc3RybmNweShjYXAtPmNhcmQsIGdvLT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDksIDgpOworCQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJCVY0TDJfQ0FQX1NUUkVBTUlORzsgLyogfCBWNEwyX0NBUF9BVURJTzsgKi8KKwkJaWYgKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpCisJCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOworCQl1bnNpZ25lZCBpbnQgaW5kZXg7CisJCWNoYXIgKmRlc2M7CisJCXUzMiBwaXhlbGZvcm1hdDsKKworCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzd2l0Y2ggKGZtdC0+aW5kZXgpIHsKKwkJY2FzZSAwOgorCQkJcGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CisJCQlkZXNjID0gIk1vdGlvbi1KUEVHIjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCQkJZGVzYyA9ICJNUEVHMS9NUEVHMi9NUEVHNCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWluZGV4ID0gZm10LT5pbmRleDsKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT5pbmRleCA9IGluZGV4OworCQlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWZtdC0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgZGVzYywgc2l6ZW9mKGZtdC0+ZGVzY3JpcHRpb24pKTsKKwkJZm10LT5waXhlbGZvcm1hdCA9IHBpeGVsZm9ybWF0OworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19UUllfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisKKwkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHNldF9jYXB0dXJlX3NpemUoZ28sIGZtdCwgMSk7CisJfQorCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisKKwkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmbXQtPmZtdC5waXgud2lkdGggPSBnby0+d2lkdGg7CisJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBnby0+aGVpZ2h0OworCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcgPworCQkJVjRMMl9QSVhfRk1UX01KUEVHIDogVjRMMl9QSVhfRk1UX01QRUc7CisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBHTzcwMDdfQlVGX1NJWkU7CisJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsgLyogPz8gKi8KKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisKKwkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gc2V0X2NhcHR1cmVfc2l6ZShnbywgZm10LCAwKTsKKwl9CisJY2FzZSBWSURJT0NfR19GQlVGOgorCWNhc2UgVklESU9DX1NfRkJVRjoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7CisJCXVuc2lnbmVkIGludCBjb3VudCwgaTsKKworCQlpZiAoZ28tPnN0cmVhbWluZykKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChyZXEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkJcmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRvd24oJmdvZmgtPmxvY2spOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWZvciAoaSA9IDA7IGkgPCBnb2ZoLT5idWZfY291bnQ7ICsraSkKKwkJCWlmIChnb2ZoLT5idWZzW2ldLm1hcHBlZCA+IDApCisJCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJZG93bigmZ28tPmh3X2xvY2spOworCQlpZiAoZ28tPmluX3VzZSA+IDAgJiYgZ29maC0+YnVmX2NvdW50ID09IDApIHsKKwkJCXVwKCZnby0+aHdfbG9jayk7CisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWlmIChnb2ZoLT5idWZfY291bnQgPiAwKQorCQkJa2ZyZWUoZ29maC0+YnVmcyk7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWNvdW50ID0gcmVxLT5jb3VudDsKKwkJaWYgKGNvdW50ID4gMCkgeworCQkJaWYgKGNvdW50IDwgMikKKwkJCQljb3VudCA9IDI7CisJCQlpZiAoY291bnQgPiAzMikKKwkJCQljb3VudCA9IDMyOworCQkJZ29maC0+YnVmcyA9IGttYWxsb2MoY291bnQgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCBnbzcwMDdfYnVmZmVyKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoZ29maC0+YnVmcyA9PSBOVUxMKSB7CisJCQkJdXAoJmdvLT5od19sb2NrKTsKKwkJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQkJfQorCQkJbWVtc2V0KGdvZmgtPmJ1ZnMsIDAsCisJCQkJCWNvdW50ICogc2l6ZW9mKHN0cnVjdCBnbzcwMDdfYnVmZmVyKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJCWdvZmgtPmJ1ZnNbaV0uZ28gPSBnbzsKKwkJCQlnb2ZoLT5idWZzW2ldLmluZGV4ID0gaTsKKwkJCQlnb2ZoLT5idWZzW2ldLnN0YXRlID0gQlVGX1NUQVRFX0lETEU7CisJCQkJZ29maC0+YnVmc1tpXS5tYXBwZWQgPSAwOworCQkJfQorCQkJZ28tPmluX3VzZSA9IDE7CisJCX0gZWxzZSB7CisJCQlnby0+aW5fdXNlID0gMDsKKwkJfQorCQlnb2ZoLT5idWZfY291bnQgPSBjb3VudDsKKwkJdXAoJmdvLT5od19sb2NrKTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworCQlyZXEtPmNvdW50ID0gY291bnQ7CisJCXJlcS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcmVxLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJdW5zaWduZWQgaW50IGluZGV4OworCisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWluZGV4ID0gYnVmLT5pbmRleDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCWlmIChpbmRleCA+PSBnb2ZoLT5idWZfY291bnQpCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCQlidWYtPmluZGV4ID0gaW5kZXg7CisJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJc3dpdGNoIChnb2ZoLT5idWZzW2luZGV4XS5zdGF0ZSkgeworCQljYXNlIEJVRl9TVEFURV9RVUVVRUQ6CisJCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CisJCQlicmVhazsKKwkJY2FzZSBCVUZfU1RBVEVfRE9ORToKKwkJCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJ1Zi0+ZmxhZ3MgPSAwOworCQl9CisJCWlmIChnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQpCisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOworCQlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCWJ1Zi0+bS5vZmZzZXQgPSBpbmRleCAqIEdPNzAwN19CVUZfU0laRTsKKwkJYnVmLT5sZW5ndGggPSBHTzcwMDdfQlVGX1NJWkU7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCQlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWY7CisJCWludCByZXQ7CisKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJCQlidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlpZiAoYnVmLT5pbmRleCA8IDAgfHwgYnVmLT5pbmRleCA+PSBnb2ZoLT5idWZfY291bnQpCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQlnb2J1ZiA9ICZnb2ZoLT5idWZzW2J1Zi0+aW5kZXhdOworCQlpZiAoZ29idWYtPm1hcHBlZCA9PSAwKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlpZiAoZ29idWYtPnN0YXRlICE9IEJVRl9TVEFURV9JRExFKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJLyogb2Zmc2V0IHdpbGwgYmUgMCB1bnRpbCB3ZSByZWFsbHkgc3VwcG9ydCBVU0VSUFRSIHN0cmVhbWluZyAqLworCQlnb2J1Zi0+b2Zmc2V0ID0gZ29idWYtPnVzZXJfYWRkciAmIH5QQUdFX01BU0s7CisJCWdvYnVmLT5ieXRlc3VzZWQgPSAwOworCQlnb2J1Zi0+ZnJhbWVfb2Zmc2V0ID0gMDsKKwkJZ29idWYtPm1vZGV0X2FjdGl2ZSA9IDA7CisJCWlmIChnb2J1Zi0+b2Zmc2V0ID4gMCkKKwkJCWdvYnVmLT5wYWdlX2NvdW50ID0gR083MDA3X0JVRl9QQUdFUyArIDE7CisJCWVsc2UKKwkJCWdvYnVmLT5wYWdlX2NvdW50ID0gR083MDA3X0JVRl9QQUdFUzsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwKKwkJCQlnb2J1Zi0+dXNlcl9hZGRyICYgUEFHRV9NQVNLLCBnb2J1Zi0+cGFnZV9jb3VudCwKKwkJCQkxLCAxLCBnb2J1Zi0+cGFnZXMsIE5VTEwpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlpZiAocmV0ICE9IGdvYnVmLT5wYWdlX2NvdW50KSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXQ7ICsraSkKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UoZ29idWYtPnBhZ2VzW2ldKTsKKwkJCWdvYnVmLT5wYWdlX2NvdW50ID0gMDsKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwkJZ29idWYtPnN0YXRlID0gQlVGX1NUQVRFX1FVRVVFRDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZnb2J1Zi0+c3RyZWFtLCAmZ28tPnN0cmVhbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19EUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCQlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWY7CisJCXUzMiBmcmFtZV90eXBlX2ZsYWc7CisJCURFRklORV9XQUlUKHdhaXQpOworCisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlpZiAobGlzdF9lbXB0eSgmZ28tPnN0cmVhbSkpCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQlnb2J1ZiA9IGxpc3RfZW50cnkoZ28tPnN0cmVhbS5uZXh0LAorCQkJCXN0cnVjdCBnbzcwMDdfYnVmZmVyLCBzdHJlYW0pOworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlpZiAoZ29idWYtPnN0YXRlICE9IEJVRl9TVEFURV9ET05FICYmCisJCQkJIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJCWZvciAoOzspIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJmdvLT5mcmFtZV93YWl0cSwgJndhaXQsCisJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmIChnb2J1Zi0+c3RhdGUgPT0gQlVGX1NUQVRFX0RPTkUpCisJCQkJCWJyZWFrOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzY2hlZHVsZSgpOworCQkJfQorCQkJZmluaXNoX3dhaXQoJmdvLT5mcmFtZV93YWl0cSwgJndhaXQpOworCQl9CisJCWlmIChnb2J1Zi0+c3RhdGUgIT0gQlVGX1NUQVRFX0RPTkUpCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWRlYWN0aXZhdGVfYnVmZmVyKGdvYnVmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWZyYW1lX3R5cGVfZmxhZyA9IGdldF9mcmFtZV90eXBlX2ZsYWcoZ29idWYsIGdvLT5mb3JtYXQpOworCQlnb2J1Zi0+c3RhdGUgPSBCVUZfU1RBVEVfSURMRTsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKwkJYnVmLT5pbmRleCA9IGdvYnVmLT5pbmRleDsKKwkJYnVmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlidWYtPmJ5dGVzdXNlZCA9IGdvYnVmLT5ieXRlc3VzZWQ7CisJCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRCB8IGZyYW1lX3R5cGVfZmxhZzsKKwkJYnVmLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJYnVmLT50aW1lc3RhbXAgPSBnb2J1Zi0+dGltZXN0YW1wOworCQlidWYtPnNlcXVlbmNlID0gZ29idWYtPnNlcTsKKwkJYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQlidWYtPm0ub2Zmc2V0ID0gZ29idWYtPmluZGV4ICogR083MDA3X0JVRl9TSVpFOworCQlidWYtPmxlbmd0aCA9IEdPNzAwN19CVUZfU0laRTsKKwkJYnVmLT5yZXNlcnZlZCA9IGdvYnVmLT5tb2RldF9hY3RpdmU7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NUUkVBTU9OOgorCXsKKwkJdW5zaWduZWQgaW50ICp0eXBlID0gYXJnOworCisJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCWRvd24oJmdvLT5od19sb2NrKTsKKwkJaWYgKCFnby0+c3RyZWFtaW5nKSB7CisJCQlnby0+c3RyZWFtaW5nID0gMTsKKwkJCWdvLT5uZXh0X3NlcSA9IDA7CisJCQlnby0+YWN0aXZlX2J1ZiA9IE5VTEw7CisJCQlpZiAoZ283MDA3X3N0YXJ0X2VuY29kZXIoZ28pIDwgMCkKKwkJCQlyZXR2YWwgPSAtRUlPOworCQkJZWxzZQorCQkJCXJldHZhbCA9IDA7CisJCX0KKwkJdXAoJmdvLT5od19sb2NrKTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJeworCQl1bnNpZ25lZCBpbnQgKnR5cGUgPSBhcmc7CisKKwkJaWYgKCp0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJZ283MDA3X3N0cmVhbW9mZihnbyk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKwkJdTMyIGlkOworCisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlpZCA9IGN0cmwtPmlkOworCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKCpjdHJsKSk7CisJCWN0cmwtPmlkID0gaWQ7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZQ1RSTCwgYXJnKTsKKwkJcmV0dXJuIGN0cmwtPm5hbWVbMF0gPT0gMCA/IC1FSU5WQUwgOiAwOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcXVlcnk7CisKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihxdWVyeSkpOworCQlxdWVyeS5pZCA9IGN0cmwtPmlkOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsICZxdWVyeSk7CisJCWlmIChxdWVyeS5uYW1lWzBdID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfR19DVFJMLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsIHF1ZXJ5OworCisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwkJcXVlcnkuaWQgPSBjdHJsLT5pZDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCAmcXVlcnkpOworCQlpZiAocXVlcnkubmFtZVswXSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfQ1RSTCwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfUEFSTToKKwl7CisJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0gPSBhcmc7CisJCXN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZSA9IHsKKwkJCS5udW1lcmF0b3IgPSAxMDAxICogIGdvLT5mcHNfc2NhbGUsCisJCQkuZGVub21pbmF0b3IgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSwKKwkJfTsKKworCQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KHBhcm0sIDAsIHNpemVvZigqcGFybSkpOworCQlwYXJtLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlwYXJtLT5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSB8PSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUgPSB0aW1lcGVyZnJhbWU7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtID0gYXJnOworCQl1bnNpZ25lZCBpbnQgbiwgZDsKKworCQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBhcm0tPnBhcm0uY2FwdHVyZS5jYXB0dXJlbW9kZSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW4gPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAqCisJCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvcjsKKwkJZCA9IDEwMDEgKiBwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yOworCQlpZiAobiAhPSAwICYmIGQgIT0gMCAmJiBuID4gZCkKKwkJCWdvLT5mcHNfc2NhbGUgPSAobiArIGQvMikgLyBkOworCQllbHNlCisJCQlnby0+ZnBzX3NjYWxlID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJeworCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOworCisJCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCQlnby0+aW5wdXQgPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKSB7CisJCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQkJcmV0dXJuIC1FSU87CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCQlWSURJT0NfRU5VTVNURCwgYXJnKTsKKwkJCWlmICghc3RkLT5pZCkgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgZnJvbSB0dW5lciAqLworCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSB7CisJCQlzd2l0Y2ggKHN0ZC0+aW5kZXgpIHsKKwkJCWNhc2UgMDoKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfTlRTQywgIk5UU0MiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0sCisJCQkJCQkiUEFML1NFQ0FNIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHN0ZC0+aW5kZXggIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbXNldChzdGQsIDAsIHNpemVvZigqc3RkKSk7CisJCQlzbnByaW50ZihzdGQtPm5hbWUsIHNpemVvZihzdGQtPm5hbWUpLCAiJWR4JWQsICVkZnBzIiwKKwkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoLAorCQkJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0LAorCQkJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZnJhbWVyYXRlIC8gMTAwMCk7CisJCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7CisJCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0KKwkJCQkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mcmFtZXJhdGU7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX0dfU1RELCBhcmcpOworCQl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSB7CisJCQlpZiAoZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQykKKwkJCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKKwkJCWVsc2UKKwkJCQkqc3RkID0gVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07CisJCX0gZWxzZQorCQkJKnN0ZCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAoIShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgJiYKKwkJCQkqc3RkICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCpzdGQgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX1NfU1RELCBhcmcpOworCQkJaWYgKCEqc3RkKSAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCBmcm9tIHR1bmVyICovCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCpzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX05UU0M7CisJCQlnby0+c2Vuc29yX2ZyYW1lcmF0ZSA9IDMwMDAwOworCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJCWdvLT5zdGFuZGFyZCA9IEdPNzAwN19TVERfUEFMOworCQkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAyNTAyNTsKKwkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJCWdvLT5zdGFuZGFyZCA9IEdPNzAwN19TVERfUEFMOworCQkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAyNTAyNTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCSAgICBWSURJT0NfU19TVEQsIHN0ZCk7CisJCXNldF9jYXB0dXJlX3NpemUoZ28sIE5VTEwsIDApOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCQlnby0+aW5wdXQgPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKSB7CisJCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQkJcmV0dXJuIC1FSU87CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCQlWSURJT0NfUVVFUllTVEQsIGFyZyk7CisJCX0gZWxzZSBpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpCisJCQkqc3RkID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOworCQllbHNlCisJCQkqc3RkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX2lucHV0ICppbnAgPSBhcmc7CisJCWludCBpbmRleDsKKworCQlpZiAoaW5wLT5pbmRleCA+PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpbmRleCA9IGlucC0+aW5kZXg7CisJCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisJCWlucC0+aW5kZXggPSBpbmRleDsKKwkJc3RybmNweShpbnAtPm5hbWUsIGdvLT5ib2FyZF9pbmZvLT5pbnB1dHNbaW5kZXhdLm5hbWUsCisJCQkJc2l6ZW9mKGlucC0+bmFtZSkpOworCQkvKiBJZiB0aGlzIGJvYXJkIGhhcyBhIHR1bmVyLCBpdCB3aWxsIGJlIHRoZSBsYXN0IGlucHV0ICovCisJCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCQlpbmRleCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpCisJCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJCWVsc2UKKwkJCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCWlucC0+YXVkaW9zZXQgPSAwOworCQlpbnAtPnR1bmVyID0gMDsKKwkJaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKQorCQkJaW5wLT5zdGQgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwKKwkJCQkJCQlWNEwyX1NURF9TRUNBTTsKKwkJZWxzZQorCQkJaW5wLT5zdGQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJKmlucHV0ID0gZ28tPmlucHV0OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaWYgKCppbnB1dCA+PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZ28tPnN0cmVhbWluZykKKwkJCXJldHVybiAtRUJVU1k7CisJCWdvLT5pbnB1dCA9ICppbnB1dDsKKwkJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfSU5QVVQsCisJCQkJJmdvLT5ib2FyZF9pbmZvLT5pbnB1dHNbKmlucHV0XS52aWRlb19pbnB1dCk7CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0FVRElPLAorCQkJCSZnby0+Ym9hcmRfaW5mby0+aW5wdXRzWyppbnB1dF0uYXVkaW9faW5wdXQpOworCQl9CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHQtPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX0dfVFVORVIsIGFyZyk7CisJCXQtPmluZGV4ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfVFVORVI6CisJeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKKworCQlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodC0+aW5kZXggIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJc3dpdGNoIChnby0+Ym9hcmRfaWQpIHsKKwkJY2FzZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfTkE6CisJCWNhc2UgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0pQOgorCQkJLyogTm8gc2VsZWN0YWJsZSBvcHRpb25zIGN1cnJlbnRseSAqLworCQkJaWYgKHQtPmF1ZG1vZGUgIT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfVFVORVIsIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwl7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOworCQlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX0dfRlJFUVVFTkNZLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJeworCQlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19GUkVRVUVOQ1ksIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCA9IGFyZzsKKworCQlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOworCQljcm9wY2FwLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkvKiBUaGVzZSBzcGVjaWZ5IHRoZSByYXcgaW5wdXQgb2YgdGhlIHNlbnNvciAqLworCQlzd2l0Y2ggKGdvLT5zdGFuZGFyZCkgeworCQljYXNlIEdPNzAwN19TVERfTlRTQzoKKwkJCWNyb3BjYXAtPmJvdW5kcy50b3AgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gNzIwOworCQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IDQ4MDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gNzIwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSA0ODA7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfU1REX1BBTDoKKwkJCWNyb3BjYXAtPmJvdW5kcy50b3AgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gNzIwOworCQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IDU3NjsKKwkJCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gNzIwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSA1NzY7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfU1REX09USEVSOgorCQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoOworCQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0OworCQkJY3JvcGNhcC0+ZGVmcmVjdC50b3AgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7CisKKwkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKKwkJY3JvcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJLyogVGhlc2Ugc3BlY2lmeSB0aGUgcmF3IGlucHV0IG9mIHRoZSBzZW5zb3IgKi8KKwkJc3dpdGNoIChnby0+c3RhbmRhcmQpIHsKKwkJY2FzZSBHTzcwMDdfU1REX05UU0M6CisJCQljcm9wLT5jLnRvcCA9IDA7CisJCQljcm9wLT5jLmxlZnQgPSAwOworCQkJY3JvcC0+Yy53aWR0aCA9IDcyMDsKKwkJCWNyb3AtPmMuaGVpZ2h0ID0gNDgwOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9QQUw6CisJCQljcm9wLT5jLnRvcCA9IDA7CisJCQljcm9wLT5jLmxlZnQgPSAwOworCQkJY3JvcC0+Yy53aWR0aCA9IDcyMDsKKwkJCWNyb3AtPmMuaGVpZ2h0ID0gNTc2OworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9PVEhFUjoKKwkJCWNyb3AtPmMudG9wID0gMDsKKwkJCWNyb3AtPmMubGVmdCA9IDA7CisJCQljcm9wLT5jLndpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJCWNyb3AtPmMuaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCQlicmVhazsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOworCisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKKwl7CisJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOworCisJCW1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7CisJCXBhcmFtcy0+cXVhbGl0eSA9IDUwOyAvKiA/PyAqLworCQlwYXJhbXMtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUIHwKKwkJCQkJVjRMMl9KUEVHX01BUktFUl9EUVQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKKworCQlpZiAocGFyYW1zLT5xdWFsaXR5ICE9IDUwIHx8CisJCQkJcGFyYW1zLT5qcGVnX21hcmtlcnMgIT0gKFY0TDJfSlBFR19NQVJLRVJfREhUIHwKKwkJCQkJCQlWNEwyX0pQRUdfTUFSS0VSX0RRVCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCS8qIFRlbXBvcmFyeSBpb2N0bHMgZm9yIGNvbnRyb2xsaW5nIGNvbXByZXNzaW9uIGNoYXJhY3RlcmlzdGljcyAqLworCWNhc2UgR083MDA3SU9DX1NfQklUUkFURToKKwl7CisJCWludCAqYml0cmF0ZSA9IGFyZzsKKworCQlpZiAoZ28tPnN0cmVhbWluZykKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBVcHBlciBib3VuZCBpcyBraW5kIG9mIGFyYml0cmFyeSBoZXJlICovCisJCWlmICgqYml0cmF0ZSA8IDY0MDAwIHx8ICpiaXRyYXRlID4gMTAwMDAwMDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ28tPmJpdHJhdGUgPSAqYml0cmF0ZTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX0dfQklUUkFURToKKwl7CisJCWludCAqYml0cmF0ZSA9IGFyZzsKKworCQkqYml0cmF0ZSA9IGdvLT5iaXRyYXRlOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfU19DT01QX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMgKmNvbXAgPSBhcmc7CisKKwkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29tcC0+Z29wX3NpemUgPiAwKQorCQkJZ28tPmdvcF9zaXplID0gY29tcC0+Z29wX3NpemU7CisJCWVsc2UKKwkJCWdvLT5nb3Bfc2l6ZSA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gMTAwMDsKKwkJaWYgKGdvLT5nb3Bfc2l6ZSAhPSAxNSkKKwkJCWdvLT5kdmRfbW9kZSA9IDA7CisJCS8qZ28tPmlwYiA9IGNvbXAtPm1heF9iX2ZyYW1lcyA+IDA7Ki8gLyogY29tcGxldGVseSB1bnRlc3RlZCAqLworCQlpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpIHsKKwkJCXN3aXRjaCAoY29tcC0+YXNwZWN0X3JhdGlvKSB7CisJCQljYXNlIEdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX05UU0M6CisJCQljYXNlIEdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX1BBTDoKKwkJCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzRfMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0M6CisJCQljYXNlIEdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9QQUw6CisJCQkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xNl85OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY29tcC0+ZmxhZ3MgJiBHTzcwMDdfQ09NUF9PTUlUX1NFUV9IRUFERVIpIHsKKwkJCWdvLT5kdmRfbW9kZSA9IDA7CisJCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAwOworCQl9IGVsc2UgeworCQkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJfQorCQkvKiBmYWxsLXRocm91Z2ggKi8KKwl9CisJY2FzZSBHTzcwMDdJT0NfR19DT01QX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMgKmNvbXAgPSBhcmc7CisKKwkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRykKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQoY29tcCwgMCwgc2l6ZW9mKCpjb21wKSk7CisJCWNvbXAtPmdvcF9zaXplID0gZ28tPmdvcF9zaXplOworCQljb21wLT5tYXhfYl9mcmFtZXMgPSBnby0+aXBiID8gMiA6IDA7CisJCXN3aXRjaCAoZ28tPmFzcGVjdF9yYXRpbykgeworCQljYXNlIEdPNzAwN19SQVRJT180XzM6CisJCQlpZiAoZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQykKKwkJCQljb21wLT5hc3BlY3RfcmF0aW8gPQorCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDOworCQkJZWxzZQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX1BBTDsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQkJaWYgKGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MpCisJCQkJY29tcC0+YXNwZWN0X3JhdGlvID0KKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0M7CisJCQllbHNlCisJCQkJY29tcC0+YXNwZWN0X3JhdGlvID0KKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X1BBTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tcC0+YXNwZWN0X3JhdGlvID0gR083MDA3X0FTUEVDVF9SQVRJT18xXzE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZ28tPmNsb3NlZF9nb3ApCisJCQljb21wLT5mbGFncyB8PSBHTzcwMDdfQ09NUF9DTE9TRURfR09QOworCQlpZiAoIWdvLT5zZXFfaGVhZGVyX2VuYWJsZSkKKwkJCWNvbXAtPmZsYWdzIHw9IEdPNzAwN19DT01QX09NSVRfU0VRX0hFQURFUjsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX1NfTVBFR19QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zICptcGVnID0gYXJnOworCisJCWlmIChnby0+Zm9ybWF0ICE9IEdPNzAwN19GT1JNQVRfTVBFRzEgJiYKKwkJCQlnby0+Zm9ybWF0ICE9IEdPNzAwN19GT1JNQVRfTVBFRzIgJiYKKwkJCQlnby0+Zm9ybWF0ICE9IEdPNzAwN19GT1JNQVRfTVBFRzQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAobXBlZy0+ZmxhZ3MgJiBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERSkgeworCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzI7CisJCQlnby0+Yml0cmF0ZSA9IDk4MDAwMDA7CisJCQlnby0+Z29wX3NpemUgPSAxNTsKKwkJCWdvLT5wYWxpID0gMHg0ODsKKwkJCWdvLT5jbG9zZWRfZ29wID0gMTsKKwkJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAxOworCQkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMTsKKwkJCWdvLT5kdmRfbW9kZSA9IDE7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKG1wZWctPm1wZWdfdmlkZW9fc3RhbmRhcmQpIHsKKwkJCWNhc2UgR083MDA3X01QRUdfVklERU9fTVBFRzE6CisJCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzE7CisJCQkJZ28tPnBhbGkgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBHTzcwMDdfTVBFR19WSURFT19NUEVHMjoKKwkJCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHMjsKKwkJCQlpZiAobXBlZy0+cGFsaSA+PiAyNCA9PSAyKQorCQkJCQlnby0+cGFsaSA9IG1wZWctPnBhbGkgJiAweGZmOworCQkJCWVsc2UKKwkJCQkJZ28tPnBhbGkgPSAweDQ4OworCQkJCWJyZWFrOworCQkJY2FzZSBHTzcwMDdfTVBFR19WSURFT19NUEVHNDoKKwkJCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHNDsKKwkJCQlpZiAobXBlZy0+cGFsaSA+PiAyNCA9PSA0KQorCQkJCQlnby0+cGFsaSA9IG1wZWctPnBhbGkgJiAweGZmOworCQkJCWVsc2UKKwkJCQkJZ28tPnBhbGkgPSAweGY1OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9CisJCQkJbXBlZy0+ZmxhZ3MgJiBHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVIKKwkJCQk/IDAgOiAxOworCQkJaWYgKG1wZWctPmZsYWdzICYgR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUikKKwkJCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAxOworCQkJZWxzZQorCQkJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJCQlnby0+ZHZkX21vZGUgPSAwOworCQl9CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCX0KKwljYXNlIEdPNzAwN0lPQ19HX01QRUdfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcyAqbXBlZyA9IGFyZzsKKworCQltZW1zZXQobXBlZywgMCwgc2l6ZW9mKCptcGVnKSk7CisJCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJCQltcGVnLT5tcGVnX3ZpZGVvX3N0YW5kYXJkID0gR083MDA3X01QRUdfVklERU9fTVBFRzE7CisJCQltcGVnLT5wYWxpID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCQltcGVnLT5tcGVnX3ZpZGVvX3N0YW5kYXJkID0gR083MDA3X01QRUdfVklERU9fTVBFRzI7CisJCQltcGVnLT5wYWxpID0gR083MDA3X01QRUdfUFJPRklMRSgyLCBnby0+cGFsaSk7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQkJbXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCA9IEdPNzAwN19NUEVHX1ZJREVPX01QRUc0OworCQkJbXBlZy0+cGFsaSA9IEdPNzAwN19NUEVHX1BST0ZJTEUoNCwgZ28tPnBhbGkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoIWdvLT5nb3BfaGVhZGVyX2VuYWJsZSkKKwkJCW1wZWctPmZsYWdzIHw9IEdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUjsKKwkJaWYgKGdvLT5yZXBlYXRfc2VxaGVhZCkKKwkJCW1wZWctPmZsYWdzIHw9IEdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVI7CisJCWlmIChnby0+ZHZkX21vZGUpCisJCQltcGVnLT5mbGFncyB8PSBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX1NfTURfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tZF9wYXJhbXMgKm1kcCA9IGFyZzsKKworCQlpZiAobWRwLT5yZWdpb24gPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChtZHAtPnRyaWdnZXIgPiAwKSB7CisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLnBpeGVsX3RocmVzaG9sZCA9CisJCQkJCW1kcC0+cGl4ZWxfdGhyZXNob2xkID4+IDE7CisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLm1vdGlvbl90aHJlc2hvbGQgPQorCQkJCQltZHAtPm1vdGlvbl90aHJlc2hvbGQgPj4gMTsKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0ubWJfdGhyZXNob2xkID0KKwkJCQkJbWRwLT50cmlnZ2VyID4+IDE7CisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLmVuYWJsZSA9IDE7CisJCX0gZWxzZQorCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5lbmFibGUgPSAwOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwl9CisJY2FzZSBHTzcwMDdJT0NfR19NRF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcyAqbWRwID0gYXJnOworCQlpbnQgcmVnaW9uID0gbWRwLT5yZWdpb247CisKKwkJaWYgKG1kcC0+cmVnaW9uID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQobWRwLCAwLCBzaXplb2Yoc3RydWN0IGdvNzAwN19tZF9wYXJhbXMpKTsKKwkJbWRwLT5yZWdpb24gPSByZWdpb247CisJCWlmICghZ28tPm1vZGV0W3JlZ2lvbl0uZW5hYmxlKQorCQkJcmV0dXJuIDA7CisJCW1kcC0+cGl4ZWxfdGhyZXNob2xkID0KKwkJCShnby0+bW9kZXRbcmVnaW9uXS5waXhlbF90aHJlc2hvbGQgPDwgMSkgKyAxOworCQltZHAtPm1vdGlvbl90aHJlc2hvbGQgPQorCQkJKGdvLT5tb2RldFtyZWdpb25dLm1vdGlvbl90aHJlc2hvbGQgPDwgMSkgKyAxOworCQltZHAtPnRyaWdnZXIgPQorCQkJKGdvLT5tb2RldFtyZWdpb25dLm1iX3RocmVzaG9sZCA8PCAxKSArIDE7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX01EX1JFR0lPTjoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbWRfcmVnaW9uICpyZWdpb24gPSBhcmc7CisKKwkJaWYgKHJlZ2lvbi0+cmVnaW9uIDwgMSB8fCByZWdpb24tPnJlZ2lvbiA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGNsaXBfdG9fbW9kZXRfbWFwKGdvLCByZWdpb24tPnJlZ2lvbiwgcmVnaW9uLT5jbGlwcyk7CisJfQorCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDc6IHVuc3VwcG9ydGVkIGlvY3RsICVkXG4iLCBjbWQpOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKKwordW5sb2NrX2FuZF9yZXR1cm46CisJdXAoJmdvZmgtPmxvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZ29maC0+Z28tPnN0YXR1cyAhPSBTVEFUVVNfT05MSU5FKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIGdvNzAwN19kb19pb2N0bCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdvNzAwN19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN192bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJKytnb2J1Zi0+bWFwcGVkOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgtLWdvYnVmLT5tYXBwZWQgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ29idWYtPmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlkZWFjdGl2YXRlX2J1ZmZlcihnb2J1Zik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvYnVmLT5nby0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qIENvcGllZCBmcm9tIHZpZGVvYnVmLWRtYS1zZy5jICovCitzdGF0aWMgaW50IGdvNzAwN192bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfVVNFUiB8IF9fR0ZQX0RNQTMyKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBWTV9GQVVMVF9PT007CisJY2xlYXJfdXNlcl9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsCisJCQlwYWdlKTsKKwl2bWYtPnBhZ2UgPSBwYWdlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdvNzAwN192bV9vcHMgPSB7CisJLm9wZW4JPSBnbzcwMDdfdm1fb3BlbiwKKwkuY2xvc2UJPSBnbzcwMDdfdm1fY2xvc2UsCisJLmZhdWx0CT0gZ283MDA3X3ZtX2ZhdWx0LAorfTsKKworc3RhdGljIGludCBnbzcwMDdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBpbmRleDsKKworCWlmIChnb2ZoLT5nby0+c3RhdHVzICE9IFNUQVRVU19PTkxJTkUpCisJCXJldHVybiAtRUlPOworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogb25seSBzdXBwb3J0IFZNX1NIQVJFRCBtYXBwaW5nICovCisJaWYgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCAhPSBHTzcwMDdfQlVGX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOyAvKiBtdXN0IG1hcCBleGFjdGx5IG9uZSBmdWxsIGJ1ZmZlciAqLworCWRvd24oJmdvZmgtPmxvY2spOworCWluZGV4ID0gdm1hLT52bV9wZ29mZiAvIEdPNzAwN19CVUZfUEFHRVM7CisJaWYgKGluZGV4ID49IGdvZmgtPmJ1Zl9jb3VudCkgeworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOyAvKiB0cnlpbmcgdG8gbWFwIGJleW9uZCByZXF1ZXN0ZWQgYnVmZmVycyAqLworCX0KKwlpZiAoaW5kZXggKiBHTzcwMDdfQlVGX1BBR0VTICE9IHZtYS0+dm1fcGdvZmYpIHsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsgLyogb2Zmc2V0IGlzIG5vdCBhbGlnbmVkIG9uIGJ1ZmZlciBib3VuZGFyeSAqLworCX0KKwlpZiAoZ29maC0+YnVmc1tpbmRleF0ubWFwcGVkID4gMCkgeworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWdvZmgtPmJ1ZnNbaW5kZXhdLm1hcHBlZCA9IDE7CisJZ29maC0+YnVmc1tpbmRleF0udXNlcl9hZGRyID0gdm1hLT52bV9zdGFydDsKKwl2bWEtPnZtX29wcyA9ICZnbzcwMDdfdm1fb3BzOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9JTzsKKwl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICZnb2ZoLT5idWZzW2luZGV4XTsKKwl1cCgmZ29maC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ283MDA3X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZjsKKworCWlmIChsaXN0X2VtcHR5KCZnb2ZoLT5nby0+c3RyZWFtKSkKKwkJcmV0dXJuIFBPTExFUlI7CisJZ29idWYgPSBsaXN0X2VudHJ5KGdvZmgtPmdvLT5zdHJlYW0ubmV4dCwgc3RydWN0IGdvNzAwN19idWZmZXIsIHN0cmVhbSk7CisJcG9sbF93YWl0KGZpbGUsICZnb2ZoLT5nby0+ZnJhbWVfd2FpdHEsIHdhaXQpOworCWlmIChnb2J1Zi0+c3RhdGUgPT0gQlVGX1NUQVRFX0RPTkUpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdmZsX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKworCXZpZGVvX2RldmljZV9yZWxlYXNlKHZmZCk7CisJaWYgKC0tZ28tPnJlZl9jb3VudCA9PSAwKQorCQlrZnJlZShnbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdvNzAwN19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBnbzcwMDdfb3BlbiwKKwkucmVsZWFzZQk9IGdvNzAwN19yZWxlYXNlLAorCS5pb2N0bAkJPSBnbzcwMDdfaW9jdGwsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLnJlYWQJCT0gZ283MDA3X3JlYWQsCisJLm1tYXAJCT0gZ283MDA3X21tYXAsCisJLnBvbGwJCT0gZ283MDA3X3BvbGwsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBnbzcwMDdfdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gImdvNzAwNyIsCisJLnZmbF90eXBlCT0gVklEX1RZUEVfQ0FQVFVSRSwKKwkuZm9wcwkJPSAmZ283MDA3X2ZvcHMsCisJLm1pbm9yCQk9IC0xLAorCS5yZWxlYXNlCT0gZ283MDA3X3ZmbF9yZWxlYXNlLAorfTsKKworaW50IGdvNzAwN192NGwyX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaW50IHJ2OworCisJZ28tPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChnby0+dmlkZW9fZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShnby0+dmlkZW9fZGV2LCAmZ283MDA3X3RlbXBsYXRlLCBzaXplb2YoZ283MDA3X3RlbXBsYXRlKSk7CisJZ28tPnZpZGVvX2Rldi0+cGFyZW50ID0gZ28tPmRldjsKKwlydiA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShnby0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJ2IDwgMCkgeworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShnby0+dmlkZW9fZGV2KTsKKwkJZ28tPnZpZGVvX2RldiA9IE5VTEw7CisJCXJldHVybiBydjsKKwl9CisJdmlkZW9fc2V0X2RydmRhdGEoZ28tPnZpZGVvX2RldiwgZ28pOworCSsrZ28tPnJlZl9jb3VudDsKKworCXJldHVybiAwOworfQorCit2b2lkIGdvNzAwN192NGwyX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZG93bigmZ28tPmh3X2xvY2spOworCWlmIChnby0+c3RyZWFtaW5nKSB7CisJCWdvLT5zdHJlYW1pbmcgPSAwOworCQlnbzcwMDdfc3RyZWFtX3N0b3AoZ28pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWFib3J0X3F1ZXVlZChnbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCX0KKwl1cCgmZ28tPmh3X2xvY2spOworCWlmIChnby0+dmlkZW9fZGV2KQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShnby0+dmlkZW9fZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LmggYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTljOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBSRUFETUUgZG9jdW1lbnRhdGlvbiBmaWxlICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKiBERVBSRUNBVEVEIC0tIHVzZSBWNEwyX1BJWF9GTVRfTVBFRyBhbmQgdGhlbiBjYWxsIEdPNzAwN0lPQ19TX01QRUdfUEFSQU1TCisgKiB0byBzZWxlY3QgYmV0d2VlbiBNUEVHMSwgTVBFRzIsIGFuZCBNUEVHNCAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRzQgICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICc0JykgLyogTVBFRzQgKi8KKworLyogVGhlc2Ugd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgYmV0dGVyIGludGVyZmFjZQorICogc29vbiwgc28gZG9uJ3QgZ2V0IHRvbyBhdHRhY2hlZCB0byB0aGVtICovCisjZGVmaW5lCUdPNzAwN0lPQ19TX0JJVFJBVEUJX0lPVygnVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyAwLCBpbnQpCisjZGVmaW5lCUdPNzAwN0lPQ19HX0JJVFJBVEUJX0lPUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyAxLCBpbnQpCisKK2VudW0gZ283MDA3X2FzcGVjdF9yYXRpbyB7CisJR083MDA3X0FTUEVDVF9SQVRJT18xXzEgPSAwLAorCUdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX05UU0MgPSAxLAorCUdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX1BBTCA9IDIsCisJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X05UU0MgPSAzLAorCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9QQUwgPSA0LAorfTsKKworLyogVXNlZCB0byBzZXQgZ2VuZXJpYyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zIHsKKwlfX3UzMiBnb3Bfc2l6ZTsKKwlfX3UzMiBtYXhfYl9mcmFtZXM7CisJZW51bSBnbzcwMDdfYXNwZWN0X3JhdGlvIGFzcGVjdF9yYXRpbzsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiByZXNlcnZlZFs4XTsKK307CisKKyNkZWZpbmUgR083MDA3X0NPTVBfQ0xPU0VEX0dPUAkJMHgwMDAwMDAwMQorI2RlZmluZSBHTzcwMDdfQ09NUF9PTUlUX1NFUV9IRUFERVIJMHgwMDAwMDAwMgorCitlbnVtIGdvNzAwN19tcGVnX3ZpZGVvX3N0YW5kYXJkIHsKKwlHTzcwMDdfTVBFR19WSURFT19NUEVHMSA9IDAsCisJR083MDA3X01QRUdfVklERU9fTVBFRzIgPSAxLAorCUdPNzAwN19NUEVHX1ZJREVPX01QRUc0ID0gMiwKK307CisKKy8qIFVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgZm9yIFY0TDJfUElYX0ZNVF9NUEVHIGZvcm1hdCAqLworc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcyB7CisJZW51bSBnbzcwMDdfbXBlZ192aWRlb19zdGFuZGFyZCBtcGVnX3ZpZGVvX3N0YW5kYXJkOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHBhbGk7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCisjZGVmaW5lIEdPNzAwN19NUEVHX0ZPUkNFX0RWRF9NT0RFCTB4MDAwMDAwMDEKKyNkZWZpbmUgR083MDA3X01QRUdfT01JVF9HT1BfSEVBREVSCTB4MDAwMDAwMDIKKyNkZWZpbmUgR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUgkweDAwMDAwMDA0CisKKyNkZWZpbmUgR083MDA3X01QRUdfUFJPRklMRShmb3JtYXQsIHBhbGkpCSgoKGZvcm1hdCk8PDI0KXwocGFsaSkpCisKKyNkZWZpbmUgR083MDA3X01QRUcyX1BST0ZJTEVfTUFJTl9NQUlOCQlHTzcwMDdfTVBFR19QUk9GSUxFKDIsIDB4NDgpCisKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDA4KQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wxCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4MDEpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDIJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwMikKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMwkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDAzKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wxCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4OTEpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDIJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHg5MikKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMwkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDkzKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0w0CQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4OTQpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wwCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjApCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wxCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjEpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wyCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjIpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0wzCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjMpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w0CQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjQpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FTX0w1CQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4ZjUpCisKK3N0cnVjdCBnbzcwMDdfbWRfcGFyYW1zIHsKKwlfX3UxNiByZWdpb247CisJX191MTYgdHJpZ2dlcjsKKwlfX3UxNiBwaXhlbF90aHJlc2hvbGQ7CisJX191MTYgbW90aW9uX3RocmVzaG9sZDsKKwlfX3UzMiByZXNlcnZlZFs4XTsKK307CisKK3N0cnVjdCBnbzcwMDdfbWRfcmVnaW9uIHsKKwlfX3UxNiByZWdpb247CisJX191MTYgZmxhZ3M7CisJc3RydWN0IHY0bDJfY2xpcCAqY2xpcHM7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCisjZGVmaW5lCUdPNzAwN0lPQ19TX01QRUdfUEFSQU1TCV9JT1dSKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDIsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX0dfTVBFR19QQVJBTVMJX0lPUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyAzLCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19TX0NPTVBfUEFSQU1TCV9JT1dSKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDQsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX0dfQ09NUF9QQVJBTVMJX0lPUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA1LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19TX01EX1BBUkFNUwlfSU9XUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA2LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfR19NRF9QQVJBTVMJX0lPUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA3LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfU19NRF9SRUdJT04JX0lPVygnVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA4LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbWRfcmVnaW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTZkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisKKyNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgorI2luY2x1ZGUgInNhYTcxMzQuaCIKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorCisjZGVmaW5lIEdPNzAwN19IUElfREVCVUcKKworZW51bSBocGlfYWRkcmVzcyB7CisJSFBJX0FERFJfVklERU9fQlVGRkVSID0gMHhlNCwKKwlIUElfQUREUl9JTklUX0JVRkZFUiA9IDB4ZWEsCisJSFBJX0FERFJfSU5UUl9SRVRfVkFMVUUgPSAweGVlLAorCUhQSV9BRERSX0lOVFJfUkVUX0RBVEEgPSAweGVjLAorCUhQSV9BRERSX0lOVFJfU1RBVFVTID0gMHhmNCwKKwlIUElfQUREUl9JTlRSX1dSX1BBUkFNID0gMHhmNiwKKwlIUElfQUREUl9JTlRSX1dSX0lOREVYID0gMHhmOCwKK307CisKK2VudW0gZ3Bpb19jb21tYW5kIHsKKwlHUElPX0NPTU1BTkRfUkVTRVQgPSAweDAwLCAvKiAwMDBiICovCisJR1BJT19DT01NQU5EX1JFUTEgID0gMHgwNCwgLyogMDAxYiAqLworCUdQSU9fQ09NTUFORF9XUklURSA9IDB4MjAsIC8qIDAxMGIgKi8KKwlHUElPX0NPTU1BTkRfUkVRMiAgPSAweDI0LCAvKiAwMTFiICovCisJR1BJT19DT01NQU5EX1JFQUQgID0gMHg4MCwgLyogMTAwYiAqLworCUdQSU9fQ09NTUFORF9WSURFTyA9IDB4ODQsIC8qIDEwMWIgKi8KKwlHUElPX0NPTU1BTkRfSURMRSAgPSAweEEwLCAvKiAxMTBiICovCisJR1BJT19DT01NQU5EX0FERFIgID0gMHhBNCwgLyogMTExYiAqLworfTsKKworc3RydWN0IHNhYTcxMzRfZ283MDA3IHsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKKwl1OCAqdG9wOworCXU4ICpib3R0b207CisJZG1hX2FkZHJfdCB0b3BfZG1hOworCWRtYV9hZGRyX3QgYm90dG9tX2RtYTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gYm9hcmRfdm95YWdlciA9IHsKKwkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJLmZsYWdzCQkgPSAwLAorCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQlHTzcwMDdfU0VOU09SX1ZCSSwKKwkuYXVkaW9fZmxhZ3MJPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJLm51bV9pbnB1dHMJID0gMSwKKwkuaW5wdXRzIAkgPSB7CisJCXsKKwkJCS5uYW1lCQk9ICJTQUE3MTM0IiwKKwkJfSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBEcml2ZXIgZm9yIEdQSU8gSFBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZ3Bpb193cml0ZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgdTggYWRkciwgdTE2IGRhdGEpCit7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisKKwkvKiBXcml0ZSBIUEkgYWRkcmVzcyAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgYWRkcik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwkvKiBXcml0ZSBsb3cgYnl0ZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgZGF0YSAmIDB4ZmYpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1dSSVRFKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCS8qIFdyaXRlIGhpZ2ggYnl0ZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgZGF0YSA+PiA4KTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9XUklURSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncGlvX3JlYWQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHU4IGFkZHIsIHUxNiAqZGF0YSkKK3sKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKworCS8qIFdyaXRlIEhQSSBhZGRyZXNzICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBhZGRyKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9BRERSKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4MDApOworCisJLyogUmVhZCBsb3cgYnl0ZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFQUQpOworCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJKmRhdGEgPSBzYWFfcmVhZGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwkvKiBSZWFkIGhpZ2ggYnl0ZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFQUQpOworCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJKmRhdGEgfD0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzApIDw8IDg7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19pbnRlcmZhY2VfcmVzZXQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKwl1MzIgc3RhdHVzOworCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOworCWludCBjb3VudCA9IDIwOworCisJc2FhX2NsZWFyYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDgwKTsgLyogRGlzYWJsZSBUUyBpbnRlcmZhY2UgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUyLCAweGE0KTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFU0VUKTsKKwltc2xlZXAoMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVRMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVRMik7CisJbXNsZWVwKDEwKTsKKworCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisKKwlzdGF0dXMgPSBzYWFfcmVhZGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMik7CisJLypwcmludGsoS0VSTl9ERUJVRyAic3RhdHVzIGlzICVzXG4iLCBzdGF0dXMgJiAweDQwID8gIk9LIiA6ICJub3QgT0siKTsgKi8KKworCS8qIGVudGVyIGNvbW1hbmQgbW9kZS4uLig/KSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTIpOworCisJZG8geworCQlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkJc3RhdHVzID0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIpOworCQkvKnByaW50ayhLRVJOX0lORk8gImdwaW8gaXMgJTA4eFxuIiwgc2FhX3JlYWRsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMikpOyAqLworCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKKworCS8qIFdhaXQgZm9yIGFuIGludGVycnVwdCB0byBpbmRpY2F0ZSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0ICovCisJaWYgKGdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJmludHJfdmFsLCAmaW50cl9kYXRhKSA8IDAgfHwKKwkJCShpbnRyX3ZhbCAmIH4weDEpICE9IDB4NTVhYSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzYWE3MTM0LWdvNzAwNzogdW5hYmxlIHRvIHJlc2V0IHRoZSBHTzcwMDdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3dyaXRlX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywgaW50IGFkZHIsIGludCBkYXRhKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisJaW50IGk7CisJdTE2IHN0YXR1c19yZWc7CisKKyNpZmRlZiBHTzcwMDdfSFBJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJInNhYTcxMzQtZ283MDA3OiBXcml0ZUludGVycnVwdDogJTA0eCAlMDR4XG4iLCBhZGRyLCBkYXRhKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCWdwaW9fcmVhZChkZXYsIEhQSV9BRERSX0lOVFJfU1RBVFVTLCAmc3RhdHVzX3JlZyk7CisJCWlmICghKHN0YXR1c19yZWcgJiAweDAwMTApKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfQorCWlmIChpID09IDEwMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzYWE3MTM0LWdvNzAwNzogZGV2aWNlIGlzIGh1bmcsIHN0YXR1cyByZWcgPSAweCUwNHhcbiIsCisJCQlzdGF0dXNfcmVnKTsKKwkJcmV0dXJuIC0xOworCX0KKwlncGlvX3dyaXRlKGRldiwgSFBJX0FERFJfSU5UUl9XUl9QQVJBTSwgZGF0YSk7CisJZ3Bpb193cml0ZShkZXYsIEhQSV9BRERSX0lOVFJfV1JfSU5ERVgsIGFkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKworCS8qIFhYWCB3ZSBuZWVkIHRvIHdhaXQgaWYgdGhlcmUgaXMgbm8gaW50ZXJydXB0IGF2YWlsYWJsZSAqLworCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMTsKKwlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1JFVF9WQUxVRSwgJmdvLT5pbnRlcnJ1cHRfdmFsdWUpOworCWdwaW9fcmVhZChkZXYsIEhQSV9BRERSX0lOVFJfUkVUX0RBVEEsICZnby0+aW50ZXJydXB0X2RhdGEpOworI2lmZGVmIEdPNzAwN19IUElfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic2FhNzEzNC1nbzcwMDc6IFJlYWRJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwKKwkJCWdvLT5pbnRlcnJ1cHRfdmFsdWUsIGdvLT5pbnRlcnJ1cHRfZGF0YSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2FhNzEzNF9nbzcwMDdfaXJxX3RzX2RvbmUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHN0YXR1cykKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldi0+ZW1wcmVzc19kZXYpOworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCisJaWYgKCFnby0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisJaWYgKDAgIT0gKHN0YXR1cyAmIDB4MDAwZjAwMDApKQorCQlwcmludGsoS0VSTl9ERUJVRyAic2FhNzEzNC1nbzcwMDc6IGlycTogbG9zdCAlbGRcbiIsCisJCQkJKHN0YXR1cyA+PiAxNikgJiAweDBmKTsKKwlpZiAoc3RhdHVzICYgMHgxMDAwMDApIHsKKwkJZG1hX3N5bmNfc2luZ2xlKCZkZXYtPnBjaS0+ZGV2LAorCQkJCXNhYS0+Ym90dG9tX2RtYSwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKGdvLCBzYWEtPmJvdHRvbSwgUEFHRV9TSVpFKTsKKwkJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMig1KSwgY3B1X3RvX2xlMzIoc2FhLT5ib3R0b21fZG1hKSk7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlKCZkZXYtPnBjaS0+ZGV2LAorCQkJCXNhYS0+dG9wX2RtYSwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKGdvLCBzYWEtPnRvcCwgUEFHRV9TSVpFKTsKKwkJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMSg1KSwgY3B1X3RvX2xlMzIoc2FhLT50b3BfZG1hKSk7CisJfQorfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3N0cmVhbV9zdGFydChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCisJc2FhLT50b3BfZG1hID0gZG1hX21hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LCB2aXJ0X3RvX3BhZ2Uoc2FhLT50b3ApLAorCQkJMCwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWlmICghc2FhLT50b3BfZG1hKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzYWEtPmJvdHRvbV9kbWEgPSBkbWFfbWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsCisJCQl2aXJ0X3RvX3BhZ2Uoc2FhLT5ib3R0b20pLAorCQkJMCwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCWlmICghc2FhLT5ib3R0b21fZG1hKSB7CisJCWRtYV91bm1hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LCBzYWEtPnRvcF9kbWEsIFBBR0VfU0laRSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzYWFfd3JpdGVsKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMCA+PiAyLCAweEEzMDBCMDAwKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMNCA+PiAyLCAweDQwMDAwMjAwKTsKKworCS8qIFNldCBIUEkgaW50ZXJmYWNlIGZvciB2aWRlbyAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgSFBJX0FERFJfVklERU9fQlVGRkVSKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9BRERSKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweDAwKTsKKworCS8qIEVuYWJsZSBUUyBpbnRlcmZhY2UgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4ZTYpOworCisJLyogUmVzZXQgVFMgaW50ZXJmYWNlICovCisJc2FhX3NldGIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAxKTsKKwlzYWFfY2xlYXJiKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMSk7CisKKwkvKiBTZXQgdXAgdHJhbnNmZXIgYmxvY2sgc2l6ZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTF9TRVJJQUwsIDEyOCAtIDEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAoUEFHRV9TSVpFID4+IDcpIC0gMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTEsIDApOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEyLCAwKTsKKworCS8qIEVuYWJsZSB2aWRlbyBzdHJlYW1pbmcgbW9kZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1ZJREVPKTsKKworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTEoNSksIGNwdV90b19sZTMyKHNhYS0+dG9wX2RtYSkpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTIoNSksIGNwdV90b19sZTMyKHNhYS0+Ym90dG9tX2RtYSkpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSwgMTI4KTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg1KSwgU0FBNzEzNF9SU19DT05UUk9MX0JVUlNUX01BWCk7CisKKwkvKiBFbmFibGUgVFMgRklGTyAqLworCXNhYV9zZXRsKFNBQTcxMzRfTUFJTl9DVFJMLCBTQUE3MTM0X01BSU5fQ1RSTF9URTUpOworCisJLyogRW5hYmxlIERNQSBJUlEgKi8KKwlzYWFfc2V0bChTQUE3MTM0X0lSUTEsCisJCQlTQUE3MTM0X0lSUTFfSU5URV9SQTJfMSB8IFNBQTcxMzRfSVJRMV9JTlRFX1JBMl8wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3N0cmVhbV9zdG9wKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisKKwkvKiBTaHV0IGRvd24gVFMgRklGTyAqLworCXNhYV9jbGVhcmwoU0FBNzEzNF9NQUlOX0NUUkwsIFNBQTcxMzRfTUFJTl9DVFJMX1RFNSk7CisKKwkvKiBEaXNhYmxlIERNQSBJUlEgKi8KKwlzYWFfY2xlYXJsKFNBQTcxMzRfSVJRMSwKKwkJCVNBQTcxMzRfSVJRMV9JTlRFX1JBMl8xIHwgU0FBNzEzNF9JUlExX0lOVEVfUkEyXzApOworCisJLyogRGlzYWJsZSBUUyBpbnRlcmZhY2UgKi8KKwlzYWFfY2xlYXJiKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4ODApOworCisJZG1hX3VubWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsIHNhYS0+dG9wX2RtYSwgUEFHRV9TSVpFLAorCQkJRE1BX0ZST01fREVWSUNFKTsKKwlkbWFfdW5tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgc2FhLT5ib3R0b21fZG1hLCBQQUdFX1NJWkUsCisJCQlETUFfRlJPTV9ERVZJQ0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfc2VuZF9maXJtd2FyZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKwl1MTYgc3RhdHVzX3JlZzsKKwlpbnQgaTsKKworI2lmZGVmIEdPNzAwN19IUElfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic2FhNzEzNC1nbzcwMDc6IERvd25sb2FkQnVmZmVyICIKKwkJCSJzZW5kaW5nICVkIGJ5dGVzXG4iLCBsZW4pOworI2VuZGlmCisKKwl3aGlsZSAobGVuID4gMCkgeworCQlpID0gbGVuID4gNjQgPyA2NCA6IGxlbjsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgSFBJX0FERFJfSU5JVF9CVUZGRVIpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9BRERSKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisJCXdoaWxlIChpLS0gPiAwKSB7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsICpkYXRhKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1dSSVRFKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCQkJKytkYXRhOworCQkJLS1sZW47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCQlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1NUQVRVUywgJnN0YXR1c19yZWcpOworCQkJaWYgKCEoc3RhdHVzX3JlZyAmIDB4MDAwMikpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gMTAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInNhYTcxMzQtZ283MDA3OiBkZXZpY2UgaXMgaHVuZywgIgorCQkJCQkic3RhdHVzIHJlZyA9IDB4JTA0eFxuIiwgc3RhdHVzX3JlZyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgc2FhNzEzNF9nbzcwMDdfaHBpX29wcyA9IHsKKwkuaW50ZXJmYWNlX3Jlc2V0CT0gc2FhNzEzNF9nbzcwMDdfaW50ZXJmYWNlX3Jlc2V0LAorCS53cml0ZV9pbnRlcnJ1cHQJPSBzYWE3MTM0X2dvNzAwN193cml0ZV9pbnRlcnJ1cHQsCisJLnJlYWRfaW50ZXJydXB0CQk9IHNhYTcxMzRfZ283MDA3X3JlYWRfaW50ZXJydXB0LAorCS5zdHJlYW1fc3RhcnQJCT0gc2FhNzEzNF9nbzcwMDdfc3RyZWFtX3N0YXJ0LAorCS5zdHJlYW1fc3RvcAkJPSBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RvcCwKKwkuc2VuZF9maXJtd2FyZQkJPSBzYWE3MTM0X2dvNzAwN19zZW5kX2Zpcm13YXJlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBBZGQvcmVtb3ZlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfaW5pdChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYTsKKworCXByaW50ayhLRVJOX0RFQlVHICJzYWE3MTM0LWdvNzAwNzogcHJvYmluZyBuZXcgU0FBNzEzWCBib2FyZFxuIik7CisKKwlzYWEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2FhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChzYWEsIDAsIHNpemVvZihzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcpKTsKKworCS8qIEFsbG9jYXRlIGEgY291cGxlIHBhZ2VzIGZvciByZWNlaXZpbmcgdGhlIGNvbXByZXNzZWQgc3RyZWFtICovCisJc2FhLT50b3AgPSAodTggKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFzYWEtPnRvcCkKKwkJZ290byBhbGxvY2ZhaWw7CisJc2FhLT5ib3R0b20gPSAodTggKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFzYWEtPmJvdHRvbSkKKwkJZ290byBhbGxvY2ZhaWw7CisKKwlnbyA9IGdvNzAwN19hbGxvYygmYm9hcmRfdm95YWdlciwgJmRldi0+cGNpLT5kZXYpOworCWlmIChnbyA9PSBOVUxMKQorCQlnb3RvIGFsbG9jZmFpbDsKKwlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9QQ0lfVk9ZQUdFUjsKKwlzdHJuY3B5KGdvLT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLCBzaXplb2YoZ28tPm5hbWUpKTsKKwlnby0+aHBpX29wcyA9ICZzYWE3MTM0X2dvNzAwN19ocGlfb3BzOworCWdvLT5ocGlfY29udGV4dCA9IHNhYTsKKwlzYWEtPmRldiA9IGRldjsKKworCS8qIEJvb3QgdGhlIEdPNzAwNyAqLworCWlmIChnbzcwMDdfYm9vdF9lbmNvZGVyKGdvLCBnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJgorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDKSA8IDApCisJCWdvdG8gaW5pdGZhaWw7CisKKwkvKiBEbyBhbnkgZmluYWwgR083MDA3IGluaXRpYWxpemF0aW9uLCB0aGVuIHJlZ2lzdGVyIHRoZQorCSAqIFY0TDIgYW5kIEFMU0EgaW50ZXJmYWNlcyAqLworCWlmIChnbzcwMDdfcmVnaXN0ZXJfZW5jb2RlcihnbykgPCAwKQorCQlnb3RvIGluaXRmYWlsOworCWRldi0+ZW1wcmVzc19kZXYgPSBnby0+dmlkZW9fZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKGRldi0+ZW1wcmVzc19kZXYsIGdvKTsKKworCWdvLT5zdGF0dXMgPSBTVEFUVVNfT05MSU5FOworCXJldHVybiAwOworCitpbml0ZmFpbDoKKwlnby0+c3RhdHVzID0gU1RBVFVTX1NIVVRET1dOOworCXJldHVybiAwOworCithbGxvY2ZhaWw6CisJaWYgKHNhYS0+dG9wKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2FhLT50b3ApOworCWlmIChzYWEtPmJvdHRvbSkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+Ym90dG9tKTsKKwlrZnJlZShzYWEpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X2Zpbmkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCit7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWE7CisKKwlpZiAoTlVMTCA9PSBkZXYtPmVtcHJlc3NfZGV2KQorCQlyZXR1cm4gMDsKKworCWdvID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2LT5lbXByZXNzX2Rldik7CisJc2FhID0gZ28tPmhwaV9jb250ZXh0OworCWdvLT5zdGF0dXMgPSBTVEFUVVNfU0hVVERPV047CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+dG9wKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2FhLT5ib3R0b20pOworCWtmcmVlKHNhYSk7CisJZ283MDA3X3JlbW92ZShnbyk7CisJZGV2LT5lbXByZXNzX2RldiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzYWE3MTM0X21wZWdfb3BzIHNhYTcxMzRfZ283MDA3X29wcyA9IHsKKwkudHlwZSAgICAgICAgICA9IFNBQTcxMzRfTVBFR19HTzcwMDcsCisJLmluaXQgICAgICAgICAgPSBzYWE3MTM0X2dvNzAwN19pbml0LAorCS5maW5pICAgICAgICAgID0gc2FhNzEzNF9nbzcwMDdfZmluaSwKKwkuaXJxX3RzX2RvbmUgICA9IHNhYTcxMzRfZ283MDA3X2lycV90c19kb25lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2FhNzEzNF9nbzcwMDdfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc2FhNzEzNF90c19yZWdpc3Rlcigmc2FhNzEzNF9nbzcwMDdfb3BzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNhYTcxMzRfZ283MDA3X21vZF9jbGVhbnVwKHZvaWQpCit7CisJc2FhNzEzNF90c191bnJlZ2lzdGVyKCZzYWE3MTM0X2dvNzAwN19vcHMpOworfQorCittb2R1bGVfaW5pdChzYWE3MTM0X2dvNzAwN19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzYWE3MTM0X2dvNzAwN19tb2RfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyNzQwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciB0aGUgZ283MDA3IGF1ZGlvIGRyaXZlciIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgdGhlIGdvNzAwNyBhdWRpbyBkcml2ZXIiKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIGZvciB0aGUgZ283MDA3IGF1ZGlvIGRyaXZlciIpOworCitzdHJ1Y3QgZ283MDA3X3NuZCB7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfcGNtICpwY207CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3BpbmxvY2tfdCBsb2NrOworCWludCB3X2lkeDsKKwlpbnQgaHdfcHRyOworCWludCBhdmFpbDsKKwlpbnQgY2FwdHVyaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGdvNzAwN19zbmRfY2FwdHVyZV9odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4JCT0gNDgwMDAsCisJLnJhdGVfbWF4CQk9IDQ4MDAwLAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSAoMTI4KjEwMjQpLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9ICgxMjgqMTAyNCksCisJLnBlcmlvZHNfbWluCQk9IDEsCisJLnBlcmlvZHNfbWF4CQk9IDMyLAorfTsKKworc3RhdGljIHZvaWQgcGFyc2VfYXVkaW9fc3RyZWFtX2RhdGEoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpCit7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBnb3NuZC0+c3Vic3RyZWFtLT5ydW50aW1lOworCWludCBmcmFtZXMgPSBieXRlc190b19mcmFtZXMocnVudGltZSwgbGVuZ3RoKTsKKworCXNwaW5fbG9jaygmZ29zbmQtPmxvY2spOworCWdvc25kLT5od19wdHIgKz0gZnJhbWVzOworCWlmIChnb3NuZC0+aHdfcHRyID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlnb3NuZC0+aHdfcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCWdvc25kLT5hdmFpbCArPSBmcmFtZXM7CisJc3Bpbl91bmxvY2soJmdvc25kLT5sb2NrKTsKKwlpZiAoZ29zbmQtPndfaWR4ICsgbGVuZ3RoID4gcnVudGltZS0+ZG1hX2J5dGVzKSB7CisJCWludCBjcHkgPSBydW50aW1lLT5kbWFfYnl0ZXMgLSBnb3NuZC0+d19pZHg7CisKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgZ29zbmQtPndfaWR4LCBidWYsIGNweSk7CisJCWxlbmd0aCAtPSBjcHk7CisJCWJ1ZiArPSBjcHk7CisJCWdvc25kLT53X2lkeCA9IDA7CisJfQorCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGdvc25kLT53X2lkeCwgYnVmLCBsZW5ndGgpOworCWdvc25kLT53X2lkeCArPSBsZW5ndGg7CisJc3Bpbl9sb2NrKCZnb3NuZC0+bG9jayk7CisJaWYgKGdvc25kLT5hdmFpbCA8IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCXNwaW5fdW5sb2NrKCZnb3NuZC0+bG9jayk7CisJCXJldHVybjsKKwl9CisJZ29zbmQtPmF2YWlsIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCXNwaW5fdW5sb2NrKCZnb3NuZC0+bG9jayk7CisJaWYgKGdvc25kLT5jYXB0dXJpbmcpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoZ29zbmQtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IGJ5dGVzOworCisJYnl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID4gMCkKKwkJdmZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSk7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSAwOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jKGJ5dGVzKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA9IGJ5dGVzOworCWdvLT5hdWRpb19kZWxpdmVyID0gcGFyc2VfYXVkaW9fc3RyZWFtX2RhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZ28tPmF1ZGlvX2RlbGl2ZXIgPSBOVUxMOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA+IDApCisJCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnb3NuZC0+bG9jaywgZmxhZ3MpOworCWlmIChnb3NuZC0+c3Vic3RyZWFtID09IE5VTEwpIHsKKwkJZ29zbmQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5odyA9IGdvNzAwN19zbmRfY2FwdHVyZV9odzsKKwkJciA9IDA7CisJfSBlbHNlCisJCXIgPSAtRUJVU1k7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ29zbmQtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJZ29zbmQtPnN1YnN0cmVhbSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJLyogSnVzdCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHdlIHNob3VsZCBzaWduYWwgQUxTQSB3aGVuCisJCSAqIHNvdW5kIGNvbWVzIGluICovCisJCWdvc25kLT5jYXB0dXJpbmcgPSAxOworCQlyZXR1cm4gMDsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOworCQlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgZ283MDA3X3NuZF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisKKwlyZXR1cm4gZ29zbmQtPmh3X3B0cjsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpnbzcwMDdfc25kX3BjbV9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGdvNzAwN19zbmRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gZ283MDA3X3NuZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlCQk9IGdvNzAwN19zbmRfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGdvNzAwN19zbmRfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gZ283MDA3X3NuZF9od19mcmVlLAorCS5wcmVwYXJlCT0gZ283MDA3X3NuZF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGdvNzAwN19zbmRfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBnbzcwMDdfc25kX3BjbV9wb2ludGVyLAorCS5wYWdlCQk9IGdvNzAwN19zbmRfcGNtX3BhZ2UsCit9OworCitzdGF0aWMgaW50IGdvNzAwN19zbmRfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKworCWtmcmVlKGdvLT5zbmRfY29udGV4dCk7CisJZ28tPnNuZF9jb250ZXh0ID0gTlVMTDsKKwlpZiAoLS1nby0+cmVmX2NvdW50ID09IDApCisJCWtmcmVlKGdvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBnbzcwMDdfc25kX2RldmljZV9vcHMgPSB7CisJLmRldl9mcmVlCT0gZ283MDA3X3NuZF9mcmVlLAorfTsKKworaW50IGdvNzAwN19zbmRfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdGF0aWMgaW50IGRldjsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWVuYWJsZVtkZXZdKSB7CisJCWRldisrOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJZ29zbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X3NuZCksIEdGUF9LRVJORUwpOworCWlmIChnb3NuZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmZ29zbmQtPmxvY2spOworCWdvc25kLT5od19wdHIgPSBnb3NuZC0+d19pZHggPSBnb3NuZC0+YXZhaWwgPSAwOworCWdvc25kLT5jYXB0dXJpbmcgPSAwOworCWdvc25kLT5jYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwlpZiAoZ29zbmQtPmNhcmQgPT0gTlVMTCkgeworCQlrZnJlZShnb3NuZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXQgPSBzbmRfZGV2aWNlX25ldyhnb3NuZC0+Y2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBnbywKKwkJCSZnbzcwMDdfc25kX2RldmljZV9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc25kX2NhcmRfc2V0X2Rldihnb3NuZC0+Y2FyZCwgZ28tPmRldik7CisJcmV0ID0gc25kX3BjbV9uZXcoZ29zbmQtPmNhcmQsICJnbzcwMDciLCAwLCAwLCAxLCAmZ29zbmQtPnBjbSk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShnb3NuZC0+Y2FyZCk7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3RybmNweShnb3NuZC0+Y2FyZC0+ZHJpdmVyLCAiZ283MDA3Iiwgc2l6ZW9mKGdvc25kLT5jYXJkLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGdvc25kLT5jYXJkLT5zaG9ydG5hbWUsIGdvLT5uYW1lLCBzaXplb2YoZ29zbmQtPmNhcmQtPmRyaXZlcikpOworCXN0cm5jcHkoZ29zbmQtPmNhcmQtPmxvbmduYW1lLCBnb3NuZC0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJc2l6ZW9mKGdvc25kLT5jYXJkLT5sb25nbmFtZSkpOworCisJZ29zbmQtPnBjbS0+cHJpdmF0ZV9kYXRhID0gZ287CisJc25kX3BjbV9zZXRfb3BzKGdvc25kLT5wY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCSZnbzcwMDdfc25kX2NhcHR1cmVfb3BzKTsKKworCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGdvc25kLT5jYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGdvc25kLT5jYXJkKTsKKwkJa2ZyZWUoZ29zbmQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdvc25kLT5zdWJzdHJlYW0gPSBOVUxMOworCWdvLT5zbmRfY29udGV4dCA9IGdvc25kOworCSsrZGV2OworCSsrZ28tPnJlZl9jb3VudDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfc25kX2luaXQpOworCitpbnQgZ283MDA3X3NuZF9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJc25kX2NhcmRfZGlzY29ubmVjdChnb3NuZC0+Y2FyZCk7CisJc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChnb3NuZC0+Y2FyZCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19zbmRfcmVtb3ZlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtaTJjLmggYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNmNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtaTJjLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogVGVtcG9yYXJ5IEkyQyBJRHMgLS0gdGhlc2UgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHJlYWwgcmVnaXN0ZXJlZCBJRHMgKi8KKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1CTB4ZjBmMAorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDIJMHhmMGYxCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUgkweGYwZjIKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19UVzk5MDMJCTB4ZjBmMworI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTMJMHhmMGY0CisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfT1Y3NjQwCQkweGYwZjUKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19UVzI4MDQJCTB4ZjBmNgorI2RlZmluZQlJMkNfQUxHT19HTzcwMDcJCQkweGYwMDAwMAorI2RlZmluZQlJMkNfQUxHT19HTzcwMDdfVVNCCQkweGYxMDAwMAorCisvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIGNsaWVudCBuZWVkcyB0byBiZSBhY2Nlc3NlZCB3aXRoIFNDQ0Igc2VtYW50aWNzICovCisvKiBXZSByZS11c2UgdGhlIEkyQ19NX1RFTiB2YWx1ZSBzbyB0aGUgZmxhZyBwYXNzZXMgdGhyb3VnaCB0aGUgbWFza3MgaW4gdGhlCisgKiBjb3JlIEkyQyBjb2RlLiAgTWFqb3Iga2x1ZGdlLCBidXQgdGhlIEkyQyBsYXllciBhaW4ndCBleGFjdGx5IGZsZXhpYmxlLiAqLworI2RlZmluZQlJMkNfQ0xJRU5UX1NDQ0IJCQkweDEwCisKK3R5cGVkZWYgaW50ICgqZm91bmRfcHJvYykgKHN0cnVjdCBpMmNfYWRhcHRlciAqLCBpbnQsIGludCk7CitpbnQgd2lzX2kyY19hZGRfZHJpdmVyKHVuc2lnbmVkIGludCBpZCwgZm91bmRfcHJvYyBmb3VuZF9wcm9jKTsKK3ZvaWQgd2lzX2kyY19kZWxfZHJpdmVyKGZvdW5kX3Byb2MgZm91bmRfcHJvYyk7CisKK2ludCB3aXNfaTJjX3Byb2JlX2RldmljZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJdW5zaWduZWQgaW50IGlkLCBpbnQgYWRkcik7CisKKy8qIERlZmluaXRpb25zIGZvciBuZXcgdmlkZW8gZGVjb2RlciBjb21tYW5kcyAqLworCitzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uIHsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKK307CisKKyNkZWZpbmUJREVDT0RFUl9TRVRfUkVTT0xVVElPTglfSU9XKCdkJywgMjAwLCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uKQorI2RlZmluZQlERUNPREVSX1NFVF9DSEFOTkVMCV9JT1coJ2QnLCAyMDEsIGludCkKKworLyogU29ueSB0dW5lciB0eXBlcyAqLworCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BHNDcyWgkJMjAwCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BLNDY3WgkJMjAxCisjZGVmaW5lIFRVTkVSX1NPTllfQlRGX1BCNDYzWgkJMjAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLW92NzY0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjExZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfb3Y3NjQwIHsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29udHJhc3Q7CisJaW50IHNhdHVyYXRpb247CisJaW50IGh1ZTsKK307CisKK3N0YXRpYyB1OCBpbml0aWFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDEyLCAweDgwLAorCTB4MTIsIDB4NTQsCisJMHgxNCwgMHgyNCwKKwkweDE1LCAweDAxLAorCTB4MjgsIDB4MjAsCisJMHg3NSwgMHg4MiwKKwkweEZGLCAweEZGLCAvKiBUZXJtaW5hdG9yIChyZWcgMHhGRiBpcyB1bnVzZWQpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnJlZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4RkY7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdzW2ldLCByZWdzW2kgKyAxXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX292NzY0MF9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfb3Y3NjQwX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiT1Y3NjQwIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfb3Y3NjQwX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX292NzY0MF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc19vdjc2NDBfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc19vdjc2NDBfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCWNsaWVudC0+ZmxhZ3MgPSBJMkNfQ0xJRU5UX1NDQ0I7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLW92NzY0MDogaW5pdGlhbGl6aW5nIE9WNzY0MCBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndpcy1vdjc2NDA6IGVycm9yIGluaXRpYWxpemluZyBPVjc2NDBcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19vdjc2NDBfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19vdjc2NDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBPVjc2NDAgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19PVjc2NDAsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfb3Y3NjQwX2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19vdjc2NDBfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfb3Y3NjQwX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc19vdjc2NDBfZHJpdmVyLmlkLCB3aXNfb3Y3NjQwX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfb3Y3NjQwX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX292NzY0MF9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfb3Y3NjQwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc19vdjc2NDBfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfb3Y3NjQwX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhZmYxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc19zYWE3MTEzIHsKKwlpbnQgbm9ybTsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29udHJhc3Q7CisJaW50IHNhdHVyYXRpb247CisJaW50IGh1ZTsKK307CisKK3N0YXRpYyB1OCBpbml0aWFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDAxLCAweDA4LAorCTB4MDIsIDB4YzAsCisJMHgwMywgMHgzMywKKwkweDA0LCAweDAwLAorCTB4MDUsIDB4MDAsCisJMHgwNiwgMHhlOSwKKwkweDA3LCAweDBkLAorCTB4MDgsIDB4ZDgsCisJMHgwOSwgMHg0MCwKKwkweDBhLCAweDgwLAorCTB4MGIsIDB4NDcsCisJMHgwYywgMHg0MCwKKwkweDBkLCAweDAwLAorCTB4MGUsIDB4MDEsCisJMHgwZiwgMHgyYSwKKwkweDEwLCAweDQwLAorCTB4MTEsIDB4MGMsCisJMHgxMiwgMHhmZSwKKwkweDEzLCAweDAwLAorCTB4MTQsIDB4MDAsCisJMHgxNSwgMHgwNCwKKwkweDE2LCAweDAwLAorCTB4MTcsIDB4MDAsCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweDAwLAorCTB4MWEsIDB4MDAsCisJMHgxYiwgMHgwMCwKKwkweDFjLCAweDAwLAorCTB4MWQsIDB4MDAsCisJMHgxZSwgMHgwMCwKKwkweDFmLCAweGM4LAorCTB4NDAsIDB4MDAsCisJMHg0MSwgMHhmZiwKKwkweDQyLCAweGZmLAorCTB4NDMsIDB4ZmYsCisJMHg0NCwgMHhmZiwKKwkweDQ1LCAweGZmLAorCTB4NDYsIDB4ZmYsCisJMHg0NywgMHhmZiwKKwkweDQ4LCAweGZmLAorCTB4NDksIDB4ZmYsCisJMHg0YSwgMHhmZiwKKwkweDRiLCAweGZmLAorCTB4NGMsIDB4ZmYsCisJMHg0ZCwgMHhmZiwKKwkweDRlLCAweGZmLAorCTB4NGYsIDB4ZmYsCisJMHg1MCwgMHhmZiwKKwkweDUxLCAweGZmLAorCTB4NTIsIDB4ZmYsCisJMHg1MywgMHhmZiwKKwkweDU0LCAweGZmLAorCTB4NTUsIDB4ZmYsCisJMHg1NiwgMHhmZiwKKwkweDU3LCAweGZmLAorCTB4NTgsIDB4MDAsCisJMHg1OSwgMHg1NCwKKwkweDVhLCAweDA3LAorCTB4NWIsIDB4ODMsCisJMHg1YywgMHgwMCwKKwkweDVkLCAweDAwLAorCTB4NWUsIDB4MDAsCisJMHg1ZiwgMHgwMCwKKwkweDYwLCAweDAwLAorCTB4NjEsIDB4MDAsCisJMHgwMCwgMHgwMCwgLyogVGVybWluYXRvciAocmVnIDB4MDAgaXMgcmVhZC1vbmx5KSAqLworfTsKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnJlZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4MDA7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdzW2ldLCByZWdzW2kgKyAxXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zYWE3MTEzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc19zYWE3MTEzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDIsIDB4QzAgfCAqaW5wdXQpOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwOSwKKwkJCQkqaW5wdXQgPCA2ID8gMHg0MCA6IDB4ODApOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaW5wdXQgPSBhcmc7CisJCWRlYy0+bm9ybSA9ICppbnB1dDsKKwkJaWYgKGRlYy0+bm9ybSAmIFY0TDJfU1REX05UU0MpIHsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGUsIDB4MDEpOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgMHg0MCk7CisJCX0gZWxzZSBpZiAoZGVjLT5ub3JtICYgVjRMMl9TVERfUEFMKSB7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBlLCAweDAxKTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIDB4NDgpOworCQl9IGVsc2UgaWYgKGRlYy0+bm9ybSAqIFY0TDJfU1REX1NFQ0FNKSB7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBlLCAweDUwKTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIDB4NDgpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDcxOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiU2F0dXJhdGlvbiIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA2NDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAtMTI4OworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGEsIGRlYy0+YnJpZ2h0bmVzcyk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGIsIGRlYy0+Y29udHJhc3QpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGMsIGRlYy0+c2F0dXJhdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5odWUgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IC0xMjgpCisJCQkJZGVjLT5odWUgPSAtMTI4OworCQkJZWxzZQorCQkJCWRlYy0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBkLCBkZWMtPmh1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+Y29udHJhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPnNhdHVyYXRpb247CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zYWE3MTEzX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19zYWE3MTEzX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiU0FBNzExMyAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3NhYTcxMTNfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfc2FhNzExM19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTMgKmRlYzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc19zYWE3MTEzX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfc2FhNzExM19jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwlkZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX3NhYTcxMTMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlYy0+bm9ybSA9IFY0TDJfU1REX05UU0M7CisJZGVjLT5icmlnaHRuZXNzID0gMTI4OworCWRlYy0+Y29udHJhc3QgPSA3MTsKKwlkZWMtPnNhdHVyYXRpb24gPSA2NDsKKwlkZWMtPmh1ZSA9IDA7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjKTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtc2FhNzExMzogaW5pdGlhbGl6aW5nIFNBQTcxMTMgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpZiAod3JpdGVfcmVncyhjbGllbnQsIGluaXRpYWxfcmVnaXN0ZXJzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkid2lzLXNhYTcxMTM6IGVycm9yIGluaXRpYWxpemluZyBTQUE3MTEzXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJa2ZyZWUoZGVjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc2FhNzExM19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTMgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJa2ZyZWUoZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zYWE3MTEzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgU0FBNzExMyBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTMsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfc2FhNzExM19kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfc2FhNzExM19jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3NhYTcxMTNfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfc2FhNzExM19kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfc2FhNzExM19kcml2ZXIuaWQsIHdpc19zYWE3MTEzX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfc2FhNzExM19jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc19zYWE3MTEzX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc19zYWE3MTEzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc19zYWE3MTEzX2luaXQpOworbW9kdWxlX2V4aXQod2lzX3NhYTcxMTNfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzk0Yzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3NhYTcxMTUgeworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDEsIDB4MDgsCisJMHgwMiwgMHhjMCwKKwkweDAzLCAweDIwLAorCTB4MDQsIDB4ODAsCisJMHgwNSwgMHg4MCwKKwkweDA2LCAweGViLAorCTB4MDcsIDB4ZTAsCisJMHgwOCwgMHhmMCwJLyogYWx3YXlzIHRvZ2dsZSBGSUQgKi8KKwkweDA5LCAweDQwLAorCTB4MGEsIDB4ODAsCisJMHgwYiwgMHg0MCwKKwkweDBjLCAweDQwLAorCTB4MGQsIDB4MDAsCisJMHgwZSwgMHgwMywKKwkweDBmLCAweDJhLAorCTB4MTAsIDB4MGUsCisJMHgxMSwgMHgwMCwKKwkweDEyLCAweDhkLAorCTB4MTMsIDB4MDAsCisJMHgxNCwgMHgwMCwKKwkweDE1LCAweDExLAorCTB4MTYsIDB4MDEsCisJMHgxNywgMHhkYSwKKwkweDE4LCAweDQwLAorCTB4MTksIDB4ODAsCisJMHgxYSwgMHgwMCwKKwkweDFiLCAweDQyLAorCTB4MWMsIDB4YTksCisJMHgzMCwgMHg2NiwKKwkweDMxLCAweDkwLAorCTB4MzIsIDB4MDEsCisJMHgzNCwgMHgwMCwKKwkweDM1LCAweDAwLAorCTB4MzYsIDB4MjAsCisJMHgzOCwgMHgwMywKKwkweDM5LCAweDIwLAorCTB4M2EsIDB4ODgsCisJMHg0MCwgMHgwMCwKKwkweDQxLCAweGZmLAorCTB4NDIsIDB4ZmYsCisJMHg0MywgMHhmZiwKKwkweDQ0LCAweGZmLAorCTB4NDUsIDB4ZmYsCisJMHg0NiwgMHhmZiwKKwkweDQ3LCAweGZmLAorCTB4NDgsIDB4ZmYsCisJMHg0OSwgMHhmZiwKKwkweDRhLCAweGZmLAorCTB4NGIsIDB4ZmYsCisJMHg0YywgMHhmZiwKKwkweDRkLCAweGZmLAorCTB4NGUsIDB4ZmYsCisJMHg0ZiwgMHhmZiwKKwkweDUwLCAweGZmLAorCTB4NTEsIDB4ZmYsCisJMHg1MiwgMHhmZiwKKwkweDUzLCAweGZmLAorCTB4NTQsIDB4ZjQgLyoweGZmKi8sCisJMHg1NSwgMHhmZiwKKwkweDU2LCAweGZmLAorCTB4NTcsIDB4ZmYsCisJMHg1OCwgMHg0MCwKKwkweDU5LCAweDQ3LAorCTB4NWEsIDB4MDYgLyoweDAzKi8sCisJMHg1YiwgMHg4MywKKwkweDVkLCAweDA2LAorCTB4NWUsIDB4MDAsCisJMHg4MCwgMHgzMCwgLyogd2luZG93IGRlZmluZWQgc2NhbGVyIG9wZXJhdGlvbiwgdGFzayBBIGFuZCBCIGVuYWJsZWQgKi8KKwkweDgxLCAweDAzLCAvKiB1c2Ugc2NhbGVyIGRhdGFwYXRoIGdlbmVyYXRlZCBWICovCisJMHg4MywgMHgwMCwKKwkweDg0LCAweDAwLAorCTB4ODUsIDB4MDAsCisJMHg4NiwgMHg0NSwKKwkweDg3LCAweDMxLAorCTB4ODgsIDB4YzAsCisJMHg5MCwgMHgwMiwgLyogdGFzayBBIHByb2Nlc3MgdG9wIGZpZWxkICovCisJMHg5MSwgMHgwOCwKKwkweDkyLCAweDA5LAorCTB4OTMsIDB4ODAsCisJMHg5NCwgMHgwNiwKKwkweDk1LCAweDAwLAorCTB4OTYsIDB4YzAsCisJMHg5NywgMHgwMiwKKwkweDk4LCAweDEyLAorCTB4OTksIDB4MDAsCisJMHg5YSwgMHhmMiwKKwkweDliLCAweDAwLAorCTB4OWMsIDB4ZDAsCisJMHg5ZCwgMHgwMiwKKwkweDllLCAweGYyLAorCTB4OWYsIDB4MDAsCisJMHhhMCwgMHgwMSwKKwkweGExLCAweDAxLAorCTB4YTIsIDB4MDEsCisJMHhhNCwgMHg4MCwKKwkweGE1LCAweDQwLAorCTB4YTYsIDB4NDAsCisJMHhhOCwgMHgwMCwKKwkweGE5LCAweDA0LAorCTB4YWEsIDB4MDAsCisJMHhhYywgMHgwMCwKKwkweGFkLCAweDAyLAorCTB4YWUsIDB4MDAsCisJMHhiMCwgMHgwMCwKKwkweGIxLCAweDA0LAorCTB4YjIsIDB4MDAsCisJMHhiMywgMHgwNCwKKwkweGI0LCAweDAwLAorCTB4YjgsIDB4MDAsCisJMHhiYywgMHgwMCwKKwkweGMwLCAweDAzLAkvKiB0YXNrIEIgcHJvY2VzcyBib3R0b20gZmllbGQgKi8KKwkweGMxLCAweDA4LAorCTB4YzIsIDB4MDksCisJMHhjMywgMHg4MCwKKwkweGM0LCAweDA2LAorCTB4YzUsIDB4MDAsCisJMHhjNiwgMHhjMCwKKwkweGM3LCAweDAyLAorCTB4YzgsIDB4MTIsCisJMHhjOSwgMHgwMCwKKwkweGNhLCAweGYyLAorCTB4Y2IsIDB4MDAsCisJMHhjYywgMHhkMCwKKwkweGNkLCAweDAyLAorCTB4Y2UsIDB4ZjIsCisJMHhjZiwgMHgwMCwKKwkweGQwLCAweDAxLAorCTB4ZDEsIDB4MDEsCisJMHhkMiwgMHgwMSwKKwkweGQ0LCAweDgwLAorCTB4ZDUsIDB4NDAsCisJMHhkNiwgMHg0MCwKKwkweGQ4LCAweDAwLAorCTB4ZDksIDB4MDQsCisJMHhkYSwgMHgwMCwKKwkweGRjLCAweDAwLAorCTB4ZGQsIDB4MDIsCisJMHhkZSwgMHgwMCwKKwkweGUwLCAweDAwLAorCTB4ZTEsIDB4MDQsCisJMHhlMiwgMHgwMCwKKwkweGUzLCAweDA0LAorCTB4ZTQsIDB4MDAsCisJMHhlOCwgMHgwMCwKKwkweDg4LCAweGYwLCAvKiBFbmQgb2Ygb3JpZ2luYWwgc3RhdGljIGxpc3QgKi8KKwkweDAwLCAweDAwLCAvKiBUZXJtaW5hdG9yIChyZWcgMHgwMCBpcyByZWFkLW9ubHkpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHgwMDsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTUgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMiwgMHhDMCB8ICppbnB1dCk7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDA5LAorCQkJCSppbnB1dCA8IDYgPyAweDQwIDogMHhDMCk7CisJCWJyZWFrOworCX0KKwljYXNlIERFQ09ERVJfU0VUX1JFU09MVVRJT046CisJeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uICpyZXMgPSBhcmc7CisJCS8qIENvdXJzZS1ncmFpbmVkIHNjYWxlciAqLworCQlpbnQgaF9pbnRlZ2VyX3NjYWxlciA9IHJlcy0+d2lkdGggPCA3MDQgPyA3MDQgLyByZXMtPndpZHRoIDogMTsKKwkJLyogRmluZS1ncmFpbmVkIHNjYWxlciB0byB0YWtlIGNhcmUgb2YgcmVtYWluZGVyICovCisJCWludCBoX3NjYWxpbmdfaW5jcmVtZW50ID0gKDcwNCAvIGhfaW50ZWdlcl9zY2FsZXIpICoKKwkJCQkJMTAyNCAvIHJlcy0+d2lkdGg7CisJCS8qIEZpbmUtZ3JhaW5lZCBzY2FsZXIgb25seSAqLworCQlpbnQgdl9zY2FsaW5nX2luY3JlbWVudCA9IChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDID8KKwkJCQkyNDAgOiAyODgpICogMTAyNCAvIHJlcy0+aGVpZ2h0OworCQl1OCByZWdzW10gPSB7CisJCQkweDg4LAkweGMwLAorCQkJMHg5YywJcmVzLT53aWR0aCAmIDB4ZmYsCisJCQkweDlkLAlyZXMtPndpZHRoID4+IDgsCisJCQkweDllLAlyZXMtPmhlaWdodCAmIDB4ZmYsCisJCQkweDlmLAlyZXMtPmhlaWdodCA+PiA4LAorCQkJMHhhMCwJaF9pbnRlZ2VyX3NjYWxlciwKKwkJCTB4YTEsCTEsCisJCQkweGEyLAkxLAorCQkJMHhhOCwJaF9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGE5LAloX3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGFjLAkoaF9zY2FsaW5nX2luY3JlbWVudCAvIDIpICYgMHhmZiwKKwkJCTB4YWQsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgPj4gOCwKKwkJCTB4YjAsCXZfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhiMSwJdl9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhiMiwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGIzLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGNjLAlyZXMtPndpZHRoICYgMHhmZiwKKwkJCTB4Y2QsCXJlcy0+d2lkdGggPj4gOCwKKwkJCTB4Y2UsCXJlcy0+aGVpZ2h0ICYgMHhmZiwKKwkJCTB4Y2YsCXJlcy0+aGVpZ2h0ID4+IDgsCisJCQkweGQwLAloX2ludGVnZXJfc2NhbGVyLAorCQkJMHhkMSwJMSwKKwkJCTB4ZDIsCTEsCisJCQkweGQ4LAloX3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4ZDksCWhfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4ZGMsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgJiAweGZmLAorCQkJMHhkZCwJKGhfc2NhbGluZ19pbmNyZW1lbnQgLyAyKSA+PiA4LAorCQkJMHhlMCwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGUxLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGUyLAl2X3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4ZTMsCXZfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4ODgsCTB4ZjAsCisJCQkwLAkwLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJdTggcmVnc1tdID0geworCQkJMHg4OCwJMHhjMCwKKwkJCTB4OTgsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDEyIDogMHgxNiwKKwkJCTB4OWEsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYyIDogMHgyMCwKKwkJCTB4OWIsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHgwMSwKKwkJCTB4YzgsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDEyIDogMHgxNiwKKwkJCTB4Y2EsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYyIDogMHgyMCwKKwkJCTB4Y2IsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHgwMSwKKwkJCTB4ODgsCTB4ZjAsCisJCQkweDMwLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg2NiA6IDB4MDAsCisJCQkweDMxLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg5MCA6IDB4ZTAsCisJCQkwLAkwLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7CisJCWRlYy0+bm9ybSA9ICppbnB1dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDY0OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYSwgZGVjLT5icmlnaHRuZXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+Y29udHJhc3QgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYiwgZGVjLT5jb250cmFzdCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYywgZGVjLT5zYXR1cmF0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmh1ZSA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCkKKwkJCQlkZWMtPmh1ZSA9IC0xMjg7CisJCQllbHNlCisJCQkJZGVjLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGQsIGRlYy0+aHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmJyaWdodG5lc3M7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5jb250cmFzdDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5odWU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTVfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3NhYTcxMTVfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJTQUE3MTE1IChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfc2FhNzExNV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc19zYWE3MTE1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfc2FhNzExNSAqZGVjOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3NhYTcxMTVfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc19zYWE3MTE1X2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfc2FhNzExNSksIEdGUF9LRVJORUwpOworCWlmIChkZWMgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGVjLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlkZWMtPmJyaWdodG5lc3MgPSAxMjg7CisJZGVjLT5jb250cmFzdCA9IDY0OworCWRlYy0+c2F0dXJhdGlvbiA9IDY0OworCWRlYy0+aHVlID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWMpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy1zYWE3MTE1OiBpbml0aWFsaXppbmcgU0FBNzExNSBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ3aXMtc2FhNzExNTogZXJyb3IgaW5pdGlhbGl6aW5nIFNBQTcxMTVcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zYWE3MTE1X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc2FhNzExNSAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlrZnJlZShkZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBTQUE3MTE1IEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNSwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19zYWE3MTE1X2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc19zYWE3MTE1X2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfc2FhNzExNV9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19zYWE3MTE1X2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc19zYWE3MTE1X2RyaXZlci5pZCwgd2lzX3NhYTcxMTVfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19zYWE3MTE1X2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3NhYTcxMTVfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3NhYTcxMTVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3NhYTcxMTVfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfc2FhNzExNV9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OTdmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMKQEAgLTAsMCArMSw3NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKKy8qICNkZWZpbmUgTVBYX0RFQlVHICovCisKKy8qIEFTKElGL01QWCkgcGluOiAgICAgIExPVyAgICAgIEhJR0gvT1BFTgorICogSUYvTVBYIGFkZHJlc3M6ICAgMHg0Mi8weDQwICAgMHg0My8weDQ0CisgKi8KKyNkZWZpbmUgSUZfSTJDX0FERFIJMHg0MworI2RlZmluZSBNUFhfSTJDX0FERFIJMHg0NAorCitzdGF0aWMgdjRsMl9zdGRfaWQgZm9yY2VfYmFuZDsKK3N0YXRpYyBjaGFyIGZvcmNlX2JhbmRfc3RyW10gPSAiLSI7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGZvcmNlX2JhbmQsIGZvcmNlX2JhbmRfc3RyLCBzaXplb2YoZm9yY2VfYmFuZF9zdHIpLCAwNjQ0KTsKK3N0YXRpYyBpbnQgZm9yY2VfbXB4X21vZGUgPSAtMTsKK21vZHVsZV9wYXJhbShmb3JjZV9tcHhfbW9kZSwgaW50LCAwNjQ0KTsKKworLyogU3RvcmUgdHVuZXIgaW5mbyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdHVuZXIuYywgc28gbWF5YmUgd2UgY2FuIHB1dCB0aGUKKyAqIFNvbnkgdHVuZXIgc3VwcG9ydCBpbiB0aGVyZS4gKi8KK3N0cnVjdCBzb255X3R1bmVydHlwZSB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBjaGFyIFZlbmRvcjsgLyogdW51c2VkIGhlcmUgKi8KKwl1bnNpZ25lZCBjaGFyIFR5cGU7IC8qIHVudXNlZCBoZXJlICovCisKKwl1bnNpZ25lZCBzaG9ydCB0aHJlc2gxOyAvKiAgYmFuZCBzd2l0Y2ggVkhGX0xPIDw9PiBWSEZfSEkgKi8KKwl1bnNpZ25lZCBzaG9ydCB0aHJlc2gyOyAvKiAgYmFuZCBzd2l0Y2ggVkhGX0hJIDw9PiBVSEYgKi8KKwl1bnNpZ25lZCBjaGFyIFZIRl9MOworCXVuc2lnbmVkIGNoYXIgVkhGX0g7CisJdW5zaWduZWQgY2hhciBVSEY7CisJdW5zaWduZWQgY2hhciBjb25maWc7CisJdW5zaWduZWQgc2hvcnQgSUZQQ29mZjsKK307CisKKy8qIFRoaXMgYXJyYXkgaXMgaW5kZXhlZCBieSAodHVuZXJfdHlwZSAtIDIwMCkgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ueV90dW5lcnR5cGUgc29ueV90dW5lcnNbXSA9IHsKKwl7ICJTb255IFBBTCtTRUNBTSAoQlRGLVBHNDcyWikiLCAwLCAwLAorCSAgMTYqMTQ0LjI1LCAxNio0MjcuMjUsIDB4MDEsIDB4MDIsIDB4MDQsIDB4YzYsIDYyM30sCisJeyAiU29ueSBOVFNDX0pQIChCVEYtUEs0NjdaKSIsIDAsIDAsCisJICAxNioyMjAuMjUsIDE2KjQ2Ny4yNSwgMHgwMSwgMHgwMiwgMHgwNCwgMHhjNiwgOTQwfSwKKwl7ICJTb255IE5UU0MgKEJURi1QQjQ2M1opIiwgMCwgMCwKKwkgIDE2KjEzMC4yNSwgMTYqMzY0LjI1LCAweDAxLCAweDAyLCAweDA0LCAweGM2LCA3MzJ9LAorfTsKKworc3RydWN0IHdpc19zb255X3R1bmVyIHsKKwlpbnQgdHlwZTsKKwl2NGwyX3N0ZF9pZCBzdGQ7CisJdW5zaWduZWQgaW50IGZyZXE7CisJaW50IG1weG1vZGU7CisJdTMyIGF1ZG1vZGU7Cit9OworCisvKiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgZGVmYXVsdF9zZXRfdHZfZnJlcSgpIGluIHR1bmVyLmMgKi8KK3N0YXRpYyBpbnQgc2V0X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGZyZXEpCit7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJY2hhciAqYmFuZF9uYW1lOworCWludCBuOworCWludCBiYW5kX3NlbGVjdDsKKwlzdHJ1Y3Qgc29ueV90dW5lcnR5cGUgKnR1bjsKKwl1OCBidWZmZXJbNF07CisKKwl0dW4gPSAmc29ueV90dW5lcnNbdC0+dHlwZSAtIDIwMF07CisJaWYgKGZyZXEgPCB0dW4tPnRocmVzaDEpIHsKKwkJYmFuZF9uYW1lID0gIlZIRl9MIjsKKwkJYmFuZF9zZWxlY3QgPSB0dW4tPlZIRl9MOworCX0gZWxzZSBpZiAoZnJlcSA8IHR1bi0+dGhyZXNoMikgeworCQliYW5kX25hbWUgPSAiVkhGX0giOworCQliYW5kX3NlbGVjdCA9IHR1bi0+VkhGX0g7CisJfSBlbHNlIHsKKwkJYmFuZF9uYW1lID0gIlVIRiI7CisJCWJhbmRfc2VsZWN0ID0gdHVuLT5VSEY7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogdHVuaW5nIHRvIGZyZXF1ZW5jeSAlZC4lMDRkICglcylcbiIsCisJCQlmcmVxIC8gMTYsIChmcmVxICUgMTYpICogNjI1LCBiYW5kX25hbWUpOworCW4gPSBmcmVxICsgdHVuLT5JRlBDb2ZmOworCisJYnVmZmVyWzBdID0gbiA+PiA4OworCWJ1ZmZlclsxXSA9IG4gJiAweGZmOworCWJ1ZmZlclsyXSA9IHR1bi0+Y29uZmlnOworCWJ1ZmZlclszXSA9IGJhbmRfc2VsZWN0OworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlciwgNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcHhfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIsIGludCB2YWwpCit7CisJdTggYnVmZmVyWzVdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCWJ1ZmZlclswXSA9IGRldjsKKwlidWZmZXJbMV0gPSBhZGRyID4+IDg7CisJYnVmZmVyWzJdID0gYWRkciAmIDB4ZmY7CisJYnVmZmVyWzNdID0gdmFsID4+IDg7CisJYnVmZmVyWzRdID0gdmFsICYgMHhmZjsKKwltc2cuYWRkciA9IE1QWF9JMkNfQUREUjsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSA1OworCW1zZy5idWYgPSBidWZmZXI7CisJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNUFggcmVnaXN0ZXIgdmFsdWVzIGZvciB0aGUgQlRGLVBHNDcyWjoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNXyAgICAgTklDQU1fICBTQ0FSVF8KKyAqICAgICAgICAgIE1PRFVTICBTT1VSQ0UgICAgQUNCICAgUFJFU0NBTCBQUkVTQ0FMIFBSRVNDQUwgU1lTVEVNICBWT0xVTUUKKyAqICAgICAgICAgMTAvMDAzMCAxMi8wMDA4IDEyLzAwMTMgMTIvMDAwRSAxMi8wMDEwIDEyLzAwMDAgMTAvMDAyMCAxMi8wMDAwCisgKiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQXV0byAgICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMyAgICA1MDAwICAgIFhYWFggICAgMDAwMSAgICA3NTAwCisgKgorICogQi9HCisgKiAgTW9ubyAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAzICAgIDUwMDAgICAgWFhYWCAgICAwMDAzICAgIDc1MDAKKyAqICBBMiAgICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDEgICAgNTAwMCAgICBYWFhYICAgIDAwMDMgICAgNzUwMAorICogIE5JQ0FNICAgMTAwMyAgICAwMTIwICAgIDAxMDAgICAgMjYwMyAgICA1MDAwICAgIFhYWFggICAgMDAwOCAgICA3NTAwCisgKgorICogSQorICogIE1vbm8gICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMyAgICA3OTAwICAgIFhYWFggICAgMDAwQSAgICA3NTAwCisgKiAgTklDQU0gICAxMDAzICAgIDAxMjAgICAgMDEwMCAgICAyNjAzICAgIDc5MDAgICAgWFhYWCAgICAwMDBBICAgIDc1MDAKKyAqCisgKiBEL0sKKyAqICBNb25vICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDMgICAgNTAwMCAgICBYWFhYICAgIDAwMDQgICAgNzUwMAorICogIEEyLTEgICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMSAgICA1MDAwICAgIFhYWFggICAgMDAwNCAgICA3NTAwCisgKiAgQTItMiAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAxICAgIDUwMDAgICAgWFhYWCAgICAwMDA1ICAgIDc1MDAKKyAqICBBMi0zICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDEgICAgNTAwMCAgICBYWFhYICAgIDAwMDcgICAgNzUwMAorICogIE5JQ0FNICAgMTAwMyAgICAwMTIwICAgIDAxMDAgICAgMjYwMyAgICA1MDAwICAgIFhYWFggICAgMDAwQiAgICA3NTAwCisgKgorICogTC9MJworICogIE1vbm8gICAgMDAwMyAgICAwMjAwICAgIDAxMDAgICAgN0MwMyAgICA1MDAwICAgIDIyMDAgICAgMDAwOSAgICA3NTAwCisgKiAgTklDQU0gICAwMDAzICAgIDAxMjAgICAgMDEwMCAgICA3QzAzICAgIDUwMDAgICAgWFhYWCAgICAwMDA5ICAgIDc1MDAKKyAqCisgKiBNCisgKiAgTW9ubyAgICAxMDAzICAgIDAyMDAgICAgMDEwMCAgICAyQjAzICAgIDUwMDAgICAgMkIwMCAgICAwMDAyICAgIDc1MDAKKyAqCisgKiBGb3IgQXNpYSwgcmVwbGFjZSB0aGUgMHgyNlhYIGluIEZNX1BSRVNDQUxFIHdpdGggMHgxNFhYLgorICoKKyAqIEJpbGluZ3VhbCBzZWxlY3Rpb24gaW4gQTIvTklDQU06CisgKgorICogICAgICAgICBIaWdoIGJ5dGUgb2YgU09VUkNFICAgICBMZWZ0IGNoYW4gICBSaWdodCBjaGFuCisgKiAgICAgICAgICAgICAgICAgMHgwMSAgICAgICAgICAgICAgTUFJTiAgICAgICAgIFNVQgorICogICAgICAgICAgICAgICAgIDB4MDMgICAgICAgICAgICAgIE1BSU4gICAgICAgICBNQUlOCisgKiAgICAgICAgICAgICAgICAgMHgwNCAgICAgICAgICAgICAgU1VCICAgICAgICAgIFNVQgorICoKKyAqIEZvcmNlIG1vbm8gaW4gTklDQU0gYnkgc2V0dGluZyB0aGUgaGlnaCBieXRlIG9mIFNPVVJDRSB0byAweDAyIChML0wnKSBvcgorICogMHgwMCAoYWxsIG90aGVyIGJhbmRzKS4gIEZvcmNlIG1vbm8gaW4gQTIgd2l0aCBGTU9OT19BMjoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICBGTU9OT19BMgorICogICAgICAgICAgICAgICAgICAgICAgMTAvMDAyMgorICogICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0KKyAqICAgICBGb3JjZWQgbW9ubyBPTiAgICAgMDdGMAorICogICAgIEZvcmNlZCBtb25vIE9GRiAgICAwMTkwCisgKi8KKworc3RhdGljIHN0cnVjdCB7CisJZW51bSB7IEFVRF9NT05PLCBBVURfQTIsIEFVRF9OSUNBTSwgQVVEX05JQ0FNX0wgfSBhdWRpb19tb2RlOworCXUxNiBtb2R1czsKKwl1MTYgc291cmNlOworCXUxNiBhY2I7CisJdTE2IGZtX3ByZXNjYWxlOworCXUxNiBuaWNhbV9wcmVzY2FsZTsKKwl1MTYgc2NhcnRfcHJlc2NhbGU7CisJdTE2IHN5c3RlbTsKKwl1MTYgdm9sdW1lOworfSBtcHhfYXVkaW9fbW9kZXNbXSA9IHsKKwkvKiBBdXRvICovCXsgQVVEX01PTk8sCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwMSwgMHg3NTAwIH0sCisJLyogQi9HIE1vbm8gKi8JeyBBVURfTU9OTywJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDAzLCAweDc1MDAgfSwKKwkvKiBCL0cgQTIgKi8JeyBBVURfQTIsCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMSwKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwMywgMHg3NTAwIH0sCisJLyogQi9HIE5JQ0FNICovIHsgQVVEX05JQ0FNLAkweDEwMDMsIDB4MDEyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDgsIDB4NzUwMCB9LAorCS8qIEkgTW9ubyAqLwl7IEFVRF9NT05PLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NzkwMCwgMHgwMDAwLCAweDAwMEEsIDB4NzUwMCB9LAorCS8qIEkgTklDQU0gKi8JeyBBVURfTklDQU0sCTB4MTAwMywgMHgwMTIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg3OTAwLCAweDAwMDAsIDB4MDAwQSwgMHg3NTAwIH0sCisJLyogRC9LIE1vbm8gKi8JeyBBVURfTU9OTywJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA0LCAweDc1MDAgfSwKKwkvKiBEL0sgQTItMSAqLwl7IEFVRF9BMiwJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAxLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA0LCAweDc1MDAgfSwKKwkvKiBEL0sgQTItMiAqLwl7IEFVRF9BMiwJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAxLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA1LCAweDc1MDAgfSwKKwkvKiBEL0sgQTItMyAqLwl7IEFVRF9BMiwJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAxLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA3LCAweDc1MDAgfSwKKwkvKiBEL0sgTklDQU0gKi8JeyBBVURfTklDQU0sCTB4MTAwMywgMHgwMTIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwQiwgMHg3NTAwIH0sCisJLyogTC9MJyBNb25vICovCXsgQVVEX01PTk8sCTB4MDAwMywgMHgwMjAwLCAweDAxMDAsIDB4N0MwMywKKwkJCQkJMHg1MDAwLCAweDIyMDAsIDB4MDAwOSwgMHg3NTAwIH0sCisJLyogTC9MJyBOSUNBTSAqL3sgQVVEX05JQ0FNX0wsCTB4MDAwMywgMHgwMTIwLCAweDAxMDAsIDB4N0MwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwOSwgMHg3NTAwIH0sCit9OworCisjZGVmaW5lIE1QWF9OVU1fTU9ERVMJQVJSQVlfU0laRShtcHhfYXVkaW9fbW9kZXMpCisKK3N0YXRpYyBpbnQgbXB4X3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTE2IHNvdXJjZSA9IDA7CisJdTggYnVmZmVyWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKworCS8qIHJlc2V0IE1QWCAqLworCWJ1ZmZlclswXSA9IDB4MDA7CisJYnVmZmVyWzFdID0gMHg4MDsKKwlidWZmZXJbMl0gPSAweDAwOworCW1zZy5hZGRyID0gTVBYX0kyQ19BRERSOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IDM7CisJbXNnLmJ1ZiA9IGJ1ZmZlcjsKKwlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKwlidWZmZXJbMV0gPSAweDAwOworCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpOworCisJaWYgKG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5hdWRpb19tb2RlICE9IEFVRF9NT05PKSB7CisJCXN3aXRjaCAodC0+YXVkbW9kZSkgeworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQkJc3dpdGNoIChtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uYXVkaW9fbW9kZSkgeworCQkJY2FzZSBBVURfQTI6CisJCQkJc291cmNlID0gbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNvdXJjZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVEX05JQ0FNOgorCQkJCXNvdXJjZSA9IDB4MDAwMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVVEX05JQ0FNX0w6CisJCQkJc291cmNlID0gMHgwMjAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCQlzb3VyY2UgPSBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc291cmNlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQkJc291cmNlID0gMHgwMzAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQkJc291cmNlID0gMHgwNDAwOworCQkJYnJlYWs7CisJCX0KKwkJc291cmNlIHw9IG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zb3VyY2UgJiAweDAwZmY7CisJfSBlbHNlCisJCXNvdXJjZSA9IG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zb3VyY2U7CisKKwltcHhfd3JpdGUoY2xpZW50LCAweDEwLCAweDAwMzAsIG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5tb2R1cyk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDA4LCBzb3VyY2UpOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAxMywgbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmFjYik7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDBlLAorCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmZtX3ByZXNjYWxlKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMTAsCisJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0ubmljYW1fcHJlc2NhbGUpOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAwZCwKKwkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zY2FydF9wcmVzY2FsZSk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMCwgMHgwMDIwLCBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc3lzdGVtKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMDAsIG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS52b2x1bWUpOworCWlmIChtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uYXVkaW9fbW9kZSA9PSBBVURfQTIpCisJCW1weF93cml0ZShjbGllbnQsIDB4MTAsIDB4MDAyMiwKKwkJCXQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX01PTk8gPyAgMHgwN2YwIDogMHgwMTkwKTsKKworI2lmZGVmIE1QWF9ERUJVRworCXsKKwkJdTggYnVmMVszXSwgYnVmMlsyXTsKKwkJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IE1QWCByZWdpc3RlcnM6ICUwNHggJTA0eCAiCisJCQkJIiUwNHggJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5tb2R1cywKKwkJCQlzb3VyY2UsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmFjYiwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uZm1fcHJlc2NhbGUsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLm5pY2FtX3ByZXNjYWxlLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zY2FydF9wcmVzY2FsZSwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc3lzdGVtLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS52b2x1bWUpOworCQlidWYxWzBdID0gMHgxMTsKKwkJYnVmMVsxXSA9IDB4MDA7CisJCWJ1ZjFbMl0gPSAweDdlOworCQltc2dzWzBdLmFkZHIgPSBNUFhfSTJDX0FERFI7CisJCW1zZ3NbMF0uZmxhZ3MgPSAwOworCQltc2dzWzBdLmxlbiA9IDM7CisJCW1zZ3NbMF0uYnVmID0gYnVmMTsKKwkJbXNnc1sxXS5hZGRyID0gTVBYX0kyQ19BRERSOworCQltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJCW1zZ3NbMV0ubGVuID0gMjsKKwkJbXNnc1sxXS5idWYgPSBidWYyOworCQlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiBNUFggc3lzdGVtOiAlMDJ4JTAyeFxuIiwKKwkJCQlidWYyWzBdLCBidWYyWzFdKTsKKwkJYnVmMVswXSA9IDB4MTE7CisJCWJ1ZjFbMV0gPSAweDAyOworCQlidWYxWzJdID0gMHgwMDsKKwkJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMik7CisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogTVBYIHN0YXR1czogJTAyeCUwMnhcbiIsCisJCQkJYnVmMlswXSwgYnVmMlsxXSk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJRiBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgdGhlIEJURi1QRzQ3Mlo6CisgKgorICoJQi9HOiAweDk0IDB4NzAgMHg0OQorICoJSTogICAweDE0IDB4NzAgMHg0YQorICoJRC9LOiAweDE0IDB4NzAgMHg0YgorICoJTDogICAweDA0IDB4NzAgMHg0YgorICoJTCc6ICAweDQ0IDB4NzAgMHg1MworICoJTTogICAweDUwIDB4MzAgMHg0YworICovCisKK3N0YXRpYyBpbnQgc2V0X2lmKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggYnVmZmVyWzRdOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlpbnQgZGVmYXVsdF9tcHhfbW9kZSA9IDA7CisKKwkvKiBjb25maWd1cmUgSUYgKi8KKwlidWZmZXJbMF0gPSAwOworCWlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsKKwkJYnVmZmVyWzFdID0gMHg5NDsKKwkJYnVmZmVyWzJdID0gMHg3MDsKKwkJYnVmZmVyWzNdID0gMHg0OTsKKwkJZGVmYXVsdF9tcHhfbW9kZSA9IDE7CisJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfSSkgeworCQlidWZmZXJbMV0gPSAweDE0OworCQlidWZmZXJbMl0gPSAweDcwOworCQlidWZmZXJbM10gPSAweDRhOworCQlkZWZhdWx0X21weF9tb2RlID0gNDsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCQlidWZmZXJbMV0gPSAweDE0OworCQlidWZmZXJbMl0gPSAweDcwOworCQlidWZmZXJbM10gPSAweDRiOworCQlkZWZhdWx0X21weF9tb2RlID0gNjsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJYnVmZmVyWzFdID0gMHgwNDsKKwkJYnVmZmVyWzJdID0gMHg3MDsKKwkJYnVmZmVyWzNdID0gMHg0YjsKKwkJZGVmYXVsdF9tcHhfbW9kZSA9IDExOworCX0KKwltc2cuYWRkciA9IElGX0kyQ19BRERSOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmxlbiA9IDQ7CisJbXNnLmJ1ZiA9IGJ1ZmZlcjsKKwlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCS8qIFNlbGVjdCBNUFggbW9kZSBpZiBub3QgZm9yY2VkIGJ5IHRoZSB1c2VyICovCisJaWYgKGZvcmNlX21weF9tb2RlID49IDAgfHwgZm9yY2VfbXB4X21vZGUgPCBNUFhfTlVNX01PREVTKQorCQl0LT5tcHhtb2RlID0gZm9yY2VfbXB4X21vZGU7CisJZWxzZQorCQl0LT5tcHhtb2RlID0gZGVmYXVsdF9tcHhfbW9kZTsKKwlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IHNldHRpbmcgTVBYIHRvIG1vZGUgJWRcbiIsCisJCQl0LT5tcHhtb2RlKTsKKwltcHhfc2V0dXAoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR1bmVyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKyNpZmRlZiBUVU5FUl9TRVRfVFlQRV9BRERSCisJY2FzZSBUVU5FUl9TRVRfVFlQRV9BRERSOgorCXsKKwkJc3RydWN0IHR1bmVyX3NldHVwICp0dW5fc2V0dXAgPSBhcmc7CisJCWludCAqdHlwZSA9ICZ0dW5fc2V0dXAtPnR5cGU7CisjZWxzZQorCWNhc2UgVFVORVJfU0VUX1RZUEU6CisJeworCQlpbnQgKnR5cGUgPSBhcmc7CisjZW5kaWYKKworCQlpZiAodC0+dHlwZSA+PSAwKSB7CisJCQlpZiAodC0+dHlwZSAhPSAqdHlwZSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIndpcy1zb255LXR1bmVyOiB0eXBlIGFscmVhZHkgIgorCQkJCQkic2V0IHRvICVkLCBpZ25vcmluZyByZXF1ZXN0IGZvciAlZFxuIiwKKwkJCQkJdC0+dHlwZSwgKnR5cGUpOworCQkJYnJlYWs7CisJCX0KKwkJdC0+dHlwZSA9ICp0eXBlOworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQlzd2l0Y2ggKGZvcmNlX2JhbmRfc3RyWzBdKSB7CisJCQljYXNlICdiJzoKKwkJCWNhc2UgJ0InOgorCQkJY2FzZSAnZyc6CisJCQljYXNlICdHJzoKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ3aXMtc29ueS10dW5lcjogZm9yY2luZyAiCisJCQkJCQkidHVuZXIgdG8gUEFMLUIvRyBiYW5kc1xuIik7CisJCQkJZm9yY2VfYmFuZCA9IFY0TDJfU1REX1BBTF9CRzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2knOgorCQkJY2FzZSAnSSc6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAid2lzLXNvbnktdHVuZXI6IGZvcmNpbmcgIgorCQkJCQkJInR1bmVyIHRvIFBBTC1JIGJhbmRcbiIpOworCQkJCWZvcmNlX2JhbmQgPSBWNEwyX1NURF9QQUxfSTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2QnOgorCQkJY2FzZSAnRCc6CisJCQljYXNlICdrJzoKKwkJCWNhc2UgJ0snOgorCQkJCXByaW50ayhLRVJOX0lORk8gIndpcy1zb255LXR1bmVyOiBmb3JjaW5nICIKKwkJCQkJCSJ0dW5lciB0byBQQUwtRC9LIGJhbmRzXG4iKTsKKwkJCQlmb3JjZV9iYW5kID0gVjRMMl9TVERfUEFMX0k7CisJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCWNhc2UgJ0wnOgorCQkJCXByaW50ayhLRVJOX0lORk8gIndpcy1zb255LXR1bmVyOiBmb3JjaW5nICIKKwkJCQkJCSJ0dW5lciB0byBTRUNBTS1MIGJhbmRcbiIpOworCQkJCWZvcmNlX2JhbmQgPSBWNEwyX1NURF9TRUNBTV9MOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmb3JjZV9iYW5kID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChmb3JjZV9iYW5kKQorCQkJCXQtPnN0ZCA9IGZvcmNlX2JhbmQ7CisJCQllbHNlCisJCQkJdC0+c3RkID0gVjRMMl9TVERfUEFMX0JHOworCQkJc2V0X2lmKGNsaWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCQl0LT5zdGQgPSBWNEwyX1NURF9OVFNDX01fSlA7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQl0LT5zdGQgPSBWNEwyX1NURF9OVFNDX007CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXNvbnktdHVuZXI6IHR1bmVyIHR5cGUgJWQgaXMgbm90ICIKKwkJCQkJInN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZVxuIiwgKnR5cGUpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHR5cGUgPj0gMCkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkid2lzLXNvbnktdHVuZXI6IHR5cGUgc2V0IHRvICVkICglcylcbiIsCisJCQkJdC0+dHlwZSwgc29ueV90dW5lcnNbdC0+dHlwZSAtIDIwMF0ubmFtZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwl7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQlmLT5mcmVxdWVuY3kgPSB0LT5mcmVxOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJdC0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwkJc2V0X2ZyZXEoY2xpZW50LCB0LT5mcmVxKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJeworCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOworCisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCXN3aXRjaCAoc3RkLT5pbmRleCkgeworCQkJY2FzZSAwOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9QQUxfQkcsICJQQUwtQi9HIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1BBTF9JLCAiUEFMLUkiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfUEFMX0RLLCAiUEFMLUQvSyIpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9TRUNBTV9MLCAiU0VDQU0tTCIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdGQtPmlkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJCWlmIChzdGQtPmluZGV4ICE9IDApIHsKKwkJCQlzdGQtPmlkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCVY0TDJfU1REX05UU0NfTV9KUCwgIk5UU0MtSiIpOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJaWYgKHN0ZC0+aW5kZXggIT0gMCkgeworCQkJCXN0ZC0+aWQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwgVjRMMl9TVERfTlRTQ19NLCAiTlRTQyIpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQkqc3RkID0gdC0+c3RkOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCQl2NGwyX3N0ZF9pZCBvbGQgPSB0LT5zdGQ7CisKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJaWYgKGZvcmNlX2JhbmQgJiYgKCpzdGQgJiBmb3JjZV9iYW5kKSAhPSAqc3RkICYmCisJCQkJCSpzdGQgIT0gVjRMMl9TVERfUEFMICYmCisJCQkJCSpzdGQgIT0gVjRMMl9TVERfU0VDQU0pIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IGlnbm9yaW5nICIKKwkJCQkJCSJyZXF1ZXN0ZWQgVFYgc3RhbmRhcmQgaW4gIgorCQkJCQkJImZhdm9yIG9mIGZvcmNlX2JhbmQgdmFsdWVcbiIpOworCQkJCXQtPnN0ZCA9IGZvcmNlX2JhbmQ7CisJCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsgLyogZGVmYXVsdCAqLworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKKwkJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJCQkJdC0+c3RkID0gVjRMMl9TVERfUEFMX0k7CisJCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9QQUxfREspIHsKKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfREs7CisJCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CisJCQkJdC0+c3RkID0gVjRMMl9TVERfU0VDQU1fTDsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtc29ueS10dW5lcjogVFYgc3RhbmRhcmQgIgorCQkJCQkJIm5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCSpzdGQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKG9sZCAhPSB0LT5zdGQpCisJCQkJc2V0X2lmKGNsaWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCQlpZiAoISgqc3RkICYgVjRMMl9TVERfTlRTQ19NX0pQKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAid2lzLXNvbnktdHVuZXI6IFRWIHN0YW5kYXJkICIKKwkJCQkJCSJub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkqc3RkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCWlmICghKCpzdGQgJiBWNEwyX1NURF9OVFNDX00pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtc29ueS10dW5lcjogVFYgc3RhbmRhcmQgIgorCQkJCQkJIm5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCSpzdGQgPSAwOyAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCAqLworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQlpZiAoZm9yY2VfYmFuZCkKKwkJCQkqc3RkID0gZm9yY2VfYmFuZDsKKwkJCWVsc2UKKwkJCQkqc3RkID0gVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfUEFMX0kgfAorCQkJCQlWNEwyX1NURF9QQUxfREsgfCBWNEwyX1NURF9TRUNBTV9MOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQkJKnN0ZCA9IFY0TDJfU1REX05UU0NfTV9KUDsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCSpzdGQgPSBWNEwyX1NURF9OVFNDX007CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW4gPSBhcmc7CisKKwkJbWVtc2V0KHQsIDAsIHNpemVvZigqdHVuKSk7CisJCXN0cmNweSh0dW4tPm5hbWUsICJUZWxldmlzaW9uIik7CisJCXR1bi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQl0dW4tPnJhbmdlbG93ID0gMFVMOyAvKiBkb2VzIGFueXRoaW5nIHVzZSB0aGVzZT8gKi8KKwkJdHVuLT5yYW5nZWhpZ2ggPSAweGZmZmZmZmZmVUw7CisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCXR1bi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfAorCQkJCVY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKKwkJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMjsKKwkJCXR1bi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfAorCQkJCVY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwKKwkJCQlWNEwyX1RVTkVSX1NVQl9MQU5HMjsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQl0dW4tPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CisJCQl0dW4tPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwKKwkJCQkJCVY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCWJyZWFrOworCQl9CisJCXR1bi0+YXVkbW9kZSA9IHQtPmF1ZG1vZGU7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnR1biA9IGFyZzsKKworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQlpZiAodHVuLT5hdWRtb2RlICE9IHQtPmF1ZG1vZGUpIHsKKwkJCQl0LT5hdWRtb2RlID0gdHVuLT5hdWRtb2RlOworCQkJCW1weF9zZXR1cChjbGllbnQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAwOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc29ueV90dW5lcl9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfc29ueV90dW5lcl9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlNvbnkgVFYgVHVuZXIgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19zb255X3R1bmVyX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3NvbnlfdHVuZXJfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3NvbnlfdHVuZXJfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc19zb255X3R1bmVyX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAodCA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl0LT50eXBlID0gLTE7CisJdC0+ZnJlcSA9IDA7CisJdC0+bXB4bW9kZSA9IDA7CisJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdCk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXNvbnktdHVuZXI6IGluaXRpYWxpemluZyB0dW5lciBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc29ueV90dW5lcl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZSh0KTsKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NvbnlfdHVuZXJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBTb255IFRWIFR1bmVyIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUiwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19zb255X3R1bmVyX2RldGFjaCwKKwkuY29tbWFuZAk9IHR1bmVyX2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfc29ueV90dW5lcl9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19zb255X3R1bmVyX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc19zb255X3R1bmVyX2RyaXZlci5pZCwKKwkJCQkJd2lzX3NvbnlfdHVuZXJfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19zb255X3R1bmVyX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3NvbnlfdHVuZXJfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3NvbnlfdHVuZXJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3NvbnlfdHVuZXJfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfc29ueV90dW5lcl9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHcyODA0LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ZlNGQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHcyODA0LmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfdHcyODA0IHsKKwlpbnQgY2hhbm5lbDsKKwlpbnQgbm9ybTsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29udHJhc3Q7CisJaW50IHNhdHVyYXRpb247CisJaW50IGh1ZTsKK307CisKK3N0YXRpYyB1OCBnbG9iYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MzksIDB4MDAsCisJMHgzYSwgMHhmZiwKKwkweDNiLCAweDg0LAorCTB4M2MsIDB4ODAsCisJMHgzZCwgMHg4MCwKKwkweDNlLCAweDgyLAorCTB4M2YsIDB4ODIsCisJMHhmZiwgMHhmZiwgLyogVGVybWluYXRvciAocmVnIDB4ZmYgZG9lcyBub3QgZXhpc3QpICovCit9OworCitzdGF0aWMgdTggY2hhbm5lbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgwMSwgMHhjNCwKKwkweDAyLCAweGE1LAorCTB4MDMsIDB4MjAsCisJMHgwNCwgMHhkMCwKKwkweDA1LCAweDIwLAorCTB4MDYsIDB4ZDAsCisJMHgwNywgMHg4OCwKKwkweDA4LCAweDIwLAorCTB4MDksIDB4MDcsCisJMHgwYSwgMHhmMCwKKwkweDBiLCAweDA3LAorCTB4MGMsIDB4ZjAsCisJMHgwZCwgMHg0MCwKKwkweDBlLCAweGQyLAorCTB4MGYsIDB4ODAsCisJMHgxMCwgMHg4MCwKKwkweDExLCAweDgwLAorCTB4MTIsIDB4ODAsCisJMHgxMywgMHgxZiwKKwkweDE0LCAweDAwLAorCTB4MTUsIDB4MDAsCisJMHgxNiwgMHgwMCwKKwkweDE3LCAweDAwLAorCTB4MTgsIDB4ZmYsCisJMHgxOSwgMHhmZiwKKwkweDFhLCAweGZmLAorCTB4MWIsIDB4ZmYsCisJMHgxYywgMHhmZiwKKwkweDFkLCAweGZmLAorCTB4MWUsIDB4ZmYsCisJMHgxZiwgMHhmZiwKKwkweDIwLCAweDA3LAorCTB4MjEsIDB4MDcsCisJMHgyMiwgMHgwMCwKKwkweDIzLCAweDkxLAorCTB4MjQsIDB4NTEsCisJMHgyNSwgMHgwMywKKwkweDI2LCAweDAwLAorCTB4MjcsIDB4MDAsCisJMHgyOCwgMHgwMCwKKwkweDI5LCAweDAwLAorCTB4MmEsIDB4MDAsCisJMHgyYiwgMHgwMCwKKwkweDJjLCAweDAwLAorCTB4MmQsIDB4MDAsCisJMHgyZSwgMHgwMCwKKwkweDJmLCAweDAwLAorCTB4MzAsIDB4MDAsCisJMHgzMSwgMHgwMCwKKwkweDMyLCAweDAwLAorCTB4MzMsIDB4MDAsCisJMHgzNCwgMHgwMCwKKwkweDM1LCAweDAwLAorCTB4MzYsIDB4MDAsCisJMHgzNywgMHgwMCwKKwkweGZmLCAweGZmLCAvKiBUZXJtaW5hdG9yIChyZWcgMHhmZiBkb2VzIG5vdCBleGlzdCkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUsIGludCBjaGFubmVsKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnIHwgKGNoYW5uZWwgPDwgNiksIHZhbHVlKTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzLCBpbnQgY2hhbm5lbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHhmZjsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJcmVnc1tpXSB8IChjaGFubmVsIDw8IDYpLCByZWdzW2kgKyAxXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc190dzI4MDRfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3R3MjgwNCAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoY21kID09IERFQ09ERVJfU0VUX0NIQU5ORUwpIHsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpZiAoKmlucHV0IDwgMCB8fCAqaW5wdXQgPiAzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzI4MDQ6IGNoYW5uZWwgJWQgaXMgbm90ICIKKwkJCQkJImJldHdlZW4gMCBhbmQgMyFcbiIsICppbnB1dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlkZWMtPmNoYW5uZWwgPSAqaW5wdXQ7CisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtdHcyODA0OiBpbml0aWFsaXppbmcgVFcyODA0ICIKKwkJCQkiY2hhbm5lbCAlZFxuIiwgZGVjLT5jaGFubmVsKTsKKwkJaWYgKGRlYy0+Y2hhbm5lbCA9PSAwICYmCisJCQkJd3JpdGVfcmVncyhjbGllbnQsIGdsb2JhbF9yZWdpc3RlcnMsIDApIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdHcyODA0OiBlcnJvciBpbml0aWFsaXppbmcgIgorCQkJCQkiVFcyODA0IGdsb2JhbCByZWdpc3RlcnNcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBjaGFubmVsX3JlZ2lzdGVycywgZGVjLT5jaGFubmVsKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXR3MjgwNDogZXJyb3IgaW5pdGlhbGl6aW5nICIKKwkJCQkJIlRXMjgwNCBjaGFubmVsICVkXG4iLCBkZWMtPmNoYW5uZWwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRlYy0+Y2hhbm5lbCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy10dzI4MDQ6IGlnbm9yaW5nIGNvbW1hbmQgJTA4eCB1bnRpbCAiCisJCQkJImNoYW5uZWwgbnVtYmVyIGlzIHNldFxuIiwgY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJdTggcmVnc1tdID0geworCQkJMHgwMSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4YzQgOiAweDg0LAorCQkJMHgwOSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDcgOiAweDA0LAorCQkJMHgwYSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjAgOiAweDIwLAorCQkJMHgwYiwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDcgOiAweDA0LAorCQkJMHgwYywgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjAgOiAweDIwLAorCQkJMHgwZCwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4NDAgOiAweDRhLAorCQkJMHgxNiwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDAgOiAweDQwLAorCQkJMHgxNywgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDAgOiAweDQwLAorCQkJMHgyMCwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDcgOiAweDBmLAorCQkJMHgyMSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDcgOiAweDBmLAorCQkJMHhmZiwJMHhmZiwKKwkJfTsKKwkJd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MsIGRlYy0+Y2hhbm5lbCk7CisJCWRlYy0+bm9ybSA9ICppbnB1dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiU2F0dXJhdGlvbiIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTIsIGRlYy0+YnJpZ2h0bmVzcywgZGVjLT5jaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+Y29udHJhc3QgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMSwgZGVjLT5jb250cmFzdCwgZGVjLT5jaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCBkZWMtPnNhdHVyYXRpb24sIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5odWUgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5odWUgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBmLCBkZWMtPmh1ZSwgZGVjLT5jaGFubmVsKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmJyaWdodG5lc3M7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5jb250cmFzdDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5odWU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3R3MjgwNF9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfdHcyODA0X2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiVFcyODA0IChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfdHcyODA0X2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3R3MjgwNF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3R3MjgwNCAqZGVjOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3R3MjgwNF9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3R3MjgwNF9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwlkZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX3R3MjgwNCksIEdGUF9LRVJORUwpOworCWlmIChkZWMgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGVjLT5jaGFubmVsID0gLTE7CisJZGVjLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlkZWMtPmJyaWdodG5lc3MgPSAxMjg7CisJZGVjLT5jb250cmFzdCA9IDEyODsKKwlkZWMtPnNhdHVyYXRpb24gPSAxMjg7CisJZGVjLT5odWUgPSAxMjg7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtdHcyODA0OiBjcmVhdGluZyBUVzI4MDQgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc190dzI4MDRfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc190dzI4MDQgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJa2ZyZWUoZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzI4MDRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBUVzI4MDQgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19UVzI4MDQsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfdHcyODA0X2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc190dzI4MDRfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc190dzI4MDRfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfdHcyODA0X2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc190dzI4MDRfZHJpdmVyLmlkLCB3aXNfdHcyODA0X2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfdHcyODA0X2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3R3MjgwNF9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfdHcyODA0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc190dzI4MDRfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfdHcyODA0X2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTQxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc190dzk5MDMgeworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDIsIDB4NDQsIC8qIGlucHV0IDEsIGNvbXBvc2l0ZSAqLworCTB4MDMsIDB4OTIsIC8qIGNvcnJlY3QgZGlnaXRhbCBmb3JtYXQgKi8KKwkweDA0LCAweDAwLAorCTB4MDUsIDB4ODAsIC8qIG9yIDB4MDAgZm9yIFBBTCAqLworCTB4MDYsIDB4NDAsIC8qIHNlY29uZCBpbnRlcm5hbCBjdXJyZW50IHJlZmVyZW5jZSAqLworCTB4MDcsIDB4MDIsIC8qIHdpbmRvdyAqLworCTB4MDgsIDB4MTQsIC8qIHdpbmRvdyAqLworCTB4MDksIDB4ZjAsIC8qIHdpbmRvdyAqLworCTB4MGEsIDB4ODEsIC8qIHdpbmRvdyAqLworCTB4MGIsIDB4ZDAsIC8qIHdpbmRvdyAqLworCTB4MGMsIDB4OGMsCisJMHgwZCwgMHgwMCwgLyogc2NhbGluZyAqLworCTB4MGUsIDB4MTEsIC8qIHNjYWxpbmcgKi8KKwkweDBmLCAweDAwLCAvKiBzY2FsaW5nICovCisJMHgxMCwgMHgwMCwgLyogYnJpZ2h0bmVzcyAqLworCTB4MTEsIDB4NjAsIC8qIGNvbnRyYXN0ICovCisJMHgxMiwgMHgwMSwgLyogc2hhcnBuZXNzICovCisJMHgxMywgMHg3ZiwgLyogVSBnYWluICovCisJMHgxNCwgMHg1YSwgLyogViBnYWluICovCisJMHgxNSwgMHgwMCwgLyogaHVlICovCisJMHgxNiwgMHhjMywgLyogc2hhcnBuZXNzICovCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweDU4LCAvKiB2YmkgKi8KKwkweDFhLCAweDgwLAorCTB4MWMsIDB4MGYsIC8qIHZpZGVvIG5vcm0gKi8KKwkweDFkLCAweDdmLCAvKiB2aWRlbyBub3JtICovCisJMHgyMCwgMHhhMCwgLyogY2xhbXBpbmcgZ2FpbiAod29ya2luZyAweDUwKSAqLworCTB4MjEsIDB4MjIsCisJMHgyMiwgMHhmMCwKKwkweDIzLCAweGZlLAorCTB4MjQsIDB4M2MsCisJMHgyNSwgMHgzOCwKKwkweDI2LCAweDQ0LAorCTB4MjcsIDB4MjAsCisJMHgyOCwgMHgwMCwKKwkweDI5LCAweDE1LAorCTB4MmEsIDB4YTAsCisJMHgyYiwgMHg0NCwKKwkweDJjLCAweDM3LAorCTB4MmQsIDB4MDAsCisJMHgyZSwgMHhhNSwgLyogYnVyc3QgUExMIGNvbnRyb2wgKHdvcmtpbmc6IGE5KSAqLworCTB4MmYsIDB4ZTAsIC8qIDB4ZWEgaXMgYmx1ZSB0ZXN0IGZyYW1lIC0tIDB4ZTAgZm9yIG5vcm1hbCAqLworCTB4MzEsIDB4MDAsCisJMHgzMywgMHgyMiwKKwkweDM0LCAweDExLAorCTB4MzUsIDB4MzUsCisJMHgzYiwgMHgwNSwKKwkweDA2LCAweGMwLCAvKiByZXNldCBkZXZpY2UgKi8KKwkweDAwLCAweDAwLCAvKiBUZXJtaW5hdG9yIChyZWcgMHgwMCBpcyByZWFkLW9ubHkpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHgwMDsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3R3OTkwM19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfdHc5OTAzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDIsIDB4NDAgfCAoKmlucHV0IDw8IDEpKTsKKwkJYnJlYWs7CisJfQorI2lmIDAgICAvKiBUaGUgc2NhbGVyIG9uIHRoaXMgdGhpbmcgc2VlbXMgdG8gYmUgaG9ycmlibHkgYnJva2VuICovCisJY2FzZSBERUNPREVSX1NFVF9SRVNPTFVUSU9OOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiAqcmVzID0gYXJnOworCQkvKmludCBoc2NhbGUgPSAyNTYgKiA3MjAgLyByZXMtPndpZHRoOyovCisJCWludCBoc2NhbGUgPSAyNTYgKiA3MjAgLyAocmVzLT53aWR0aCAtIChyZXMtPndpZHRoID4gNzA0ID8gMCA6IDgpKTsKKwkJaW50IHZzY2FsZSA9IDI1NiAqIChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDID8gIDI0MCA6IDI4OCkKKwkJCQkvIHJlcy0+aGVpZ2h0OworCQl1OCByZWdzW10gPSB7CisJCQkweDBkLCB2c2NhbGUgJiAweGZmLAorCQkJMHgwZiwgaHNjYWxlICYgMHhmZiwKKwkJCTB4MGUsICgodnNjYWxlICYgMHhmMDApID4+IDQpIHwgKChoc2NhbGUgJiAweGYwMCkgPj4gOCksCisJCQkweDA2LCAweGMwLCAvKiByZXNldCBkZXZpY2UgKi8KKwkJCTAsCTAsCisJCX07CisJCXByaW50ayhLRVJOX0RFQlVHICJ2c2NhbGUgaXMgJTA0eCwgaHNjYWxlIGlzICUwNHhcbiIsCisJCQkJdnNjYWxlLCBoc2NhbGUpOworCQkvKndyaXRlX3JlZ3MoY2xpZW50LCByZWdzKTsqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJdTggcmVnc1tdID0geworCQkJMHgwNSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ODAgOiAweDAwLAorCQkJMHgwNywgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDIgOiAweDEyLAorCQkJMHgwOCwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MTQgOiAweDE4LAorCQkJMHgwOSwgKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjAgOiAweDIwLAorCQkJMCwJMCwKKwkJfTsKKwkJd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMHgwMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAweDYwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisjaWYgMAorCQkvKiBJIGRvbid0IHVuZGVyc3RhbmQgaG93IHRoZSBDaHJvbWEgR2FpbiByZWdpc3RlcnMgd29yay4uLiAqLworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAtMTI4OworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IC0xMjgpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIGRlYy0+YnJpZ2h0bmVzcyk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTEsIGRlYy0+Y29udHJhc3QpOworCQkJYnJlYWs7CisjaWYgMAorCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQkvKndyaXRlX3JlZyhjbGllbnQsIDB4MGMsIGRlYy0+c2F0dXJhdGlvbik7Ki8KKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+aHVlID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+aHVlID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxNSwgZGVjLT5odWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisjaWYgMAorCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHc5OTAzX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc190dzk5MDNfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJUVzk5MDMgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc190dzk5MDNfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfdHc5OTAzX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfdHc5OTAzICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfdHc5OTAzX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfdHc5OTAzX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfdHc5OTAzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJZGVjLT5jb250cmFzdCA9IDB4NjA7CisJZGVjLT5odWUgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXR3OTkwMzogaW5pdGlhbGl6aW5nIFRXOTkwMyBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzk5MDM6IGVycm9yIGluaXRpYWxpemluZyBUVzk5MDNcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc190dzk5MDNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc190dzk5MDMgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJa2ZyZWUoZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzk5MDNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBUVzk5MDMgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19UVzk5MDMsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfdHc5OTAzX2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc190dzk5MDNfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc190dzk5MDNfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfdHc5OTAzX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc190dzk5MDNfZHJpdmVyLmlkLCB3aXNfdHc5OTAzX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfdHc5OTAzX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3R3OTkwM19kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfdHc5OTAzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc190dzk5MDNfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfdHc5OTAzX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4OTRlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsIGludCB2YWx1ZSkKK3sKKwkvKiBVREExMzQyIHdhbnRzIE1TQiBmaXJzdCwgYnV0IFNNQnVzIHNlbmRzIExTQiBmaXJzdCAqLworCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWx1ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc191ZGExMzQyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0FVRElPOgorCXsKKwkJaW50ICppbnAgPSBhcmc7CisKKwkJc3dpdGNoICgqaW5wKSB7CisJCWNhc2UgVFZBVURJT19JTlBVVF9UVU5FUjoKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MDAsIDB4MTQ0MSk7IC8qIHNlbGVjdCBpbnB1dCAyICovCisJCQlicmVhazsKKwkJY2FzZSBUVkFVRElPX0lOUFVUX0VYVEVSTjoKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MDAsIDB4MTI0MSk7IC8qIHNlbGVjdCBpbnB1dCAxICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXVkYTEzNDI6IGlucHV0ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJCSppbnApOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc191ZGExMzQyX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc191ZGExMzQyX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiVURBMTM0MiAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3VkYTEzNDJfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfdWRhMTM0Ml9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc191ZGExMzQyX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfdWRhMTM0Ml9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXVkYTEzNDI6IGluaXRpYWxpemluZyBVREExMzQyIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHg4MDAwKTsgLyogcmVzZXQgcmVnaXN0ZXJzICovCisJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHgxMjQxKTsgLyogc2VsZWN0IGlucHV0IDEgKi8KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3VkYTEzNDJfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc191ZGExMzQyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgVURBMTM0MiBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDIsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfdWRhMTM0Ml9kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfdWRhMTM0Ml9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3VkYTEzNDJfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfdWRhMTM0Ml9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfdWRhMTM0Ml9kcml2ZXIuaWQsIHdpc191ZGExMzQyX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfdWRhMTM0Ml9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc191ZGExMzQyX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc191ZGExMzQyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc191ZGExMzQyX2luaXQpOworbW9kdWxlX2V4aXQod2lzX3VkYTEzNDJfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTZjOWRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK2NvbmZpZyBNRTQwMDAKKwl0cmlzdGF0ZSAiTWVpbGhhdXMgTUUtNDAwMCBzdXBwb3J0IgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1laWxoYXVzIE1FLTQwMDAgZmFtaWx5IG9mIGJvYXJkcworCSAgdGhhdCBkbyBkYXRhIGNvbGxlY3Rpb24gYW5kIG11bHRpcHVycG9zZSBJL08uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG1lNDAwMC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDg3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19NRTQwMDApCQkrPSBtZTQwMDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmI4Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorCitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gc3BhcnNlIGNsZWFudXBzCisJLSBwb3NzaWJsZSAvcHJvYyBpbnRlcmFjdGlvbiBjbGVhbnVwcworCS0gbW9yZSBpbmZvIG5lZWRlZCBmb3IgS2NvbmZpZyBlbnRyeQorCS0gcmVhbCBkZXZpY2UgaWQ/CisJLSBtb2R1bGUgcGFyYW1ldGVyIGNsZWFudXAKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorYW5kIENjOiBXb2xmZ2FuZyBCZWl0ZXIgPHcuYmVpdGVyQGFvbi5hdD4gYW5kCitHdWVudGVyIEdlYmhhcmR0IDxnLmdlYmhhcmR0QG1laWxoYXVzLmRlPgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjJkZDdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYwpAQCAtMCwwICsxLDYxMzMgQEAKKy8qIERldmljZSBkcml2ZXIgZm9yIE1laWxoYXVzIE1FLTQwMDAgYm9hcmQgZmFtaWx5LgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBNZWlsaGF1cyBFbGVjdHJvbmljIEdtYkggKHN1cHBvcnRAbWVpbGhhdXMuZGUpCisgKgorICogIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgQXV0aG9yOglHdWVudGVyIEdlYmhhcmR0CTxnLmdlYmhhcmR0QG1laWxoYXVzLmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyogSW5jbHVkZS1GaWxlIGZvciB0aGUgTWVpbGhhdXMgTUUtNDAwMCBJL08gYm9hcmQgKi8KKyNpbmNsdWRlICJtZTQwMDAuaCIKKyNpbmNsdWRlICJtZTQwMDBfZmlybXdhcmUuaCIKKyNpbmNsdWRlICJtZTQ2MTBfZmlybXdhcmUuaCIKKworLyogQWRtaW5pc3RyYXRpdmUgc3R1ZmYgZm9yIG1vZGluZm8gKi8KK01PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgR2ViaGFyZHQgPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04KKyAgICAoIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNZWlsaGF1cyBNRS00MDAwIGJvYXJkcyB2ZXJzaW9uIDEuMC41Iik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtNDAwMCBNdWx0aSBJL08gYm9hcmRzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIEJvYXJkIHNwZWNpZmljIGRhdGEgYXJlIGtlcHQgaW4gYSBnbG9iYWwgbGlzdCAqLworTElTVF9IRUFEKG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpOworCisvKiBNYWpvciBEZXZpY2UgTnVtYmVycy4gMCBtZWFucyB0byBnZXQgaXQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBTeXN0ZW0gKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubyA9IDA7CitzdGF0aWMgaW50IG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8gPSAwOworc3RhdGljIGludCBtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubyA9IDA7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vID0gMDsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vID0gMDsKKworLyogTGV0IHRoZSB1c2VyIHNwZWNpZnkgYSBjdXN0b20gbWFqb3IgZHJpdmVyIG51bWJlciAqLworbW9kdWxlX3BhcmFtKG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBmb3IgYW5hbG9nIG91dHB1dCAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW0obWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywKKwkJICJNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBhbmFsb2cgaW5wdXQgKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywKKwkJICJNYWpvciBkcml2ZXIgbnVtYmVyIGRpZ2l0YWwgSS9PIChkZWZhdWx0IDApIik7CisKK21vZHVsZV9wYXJhbShtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBmb3IgY291bnRlciAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW0obWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IChkZWZhdWx0IDApIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTW9kdWxlIHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaW5pdF9tb2R1bGUodm9pZCk7Cit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEJvYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IG1lNDAwMF94aWxpbnhfZG93bmxvYWQobWU0MDAwX2luZm9fdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX3Jlc2V0X2JvYXJkKG1lNDAwMF9pbmZvX3QgKik7CisKK3N0YXRpYyB2b2lkIGNsZWFyX2JvYXJkX2luZm9fbGlzdCh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBtZTQwMDBfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IGluaXRfYm9hcmRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBtZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbyk7CitzdGF0aWMgaW50IGFsbG9jX2FvX2NvbnRleHRzKG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYW9fY29udGV4dHMobWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pOworc3RhdGljIGludCBhbGxvY19haV9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgYWxsb2NfZGlvX2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCBhbGxvY19jbnRfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IGFsbG9jX2V4dF9pbnRfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3R1ZmYgdXNlZCBieSBhbGwgZGV2aWNlIHBhcnRzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCitzdGF0aWMgaW50IG1lNDAwMF9nZXRfdXNlcl9pbmZvKG1lNDAwMF91c2VyX2luZm9fdCAqLAorCQkJCW1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKTsKK3N0YXRpYyBpbnQgbWU0MDAwX3JlYWRfcHJvY21lbShjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEFuYWxvZyBvdXRwdXQgc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV9zaW5nKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICBsb2ZmX3QgKik7CitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfd3JhcChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX2NvbnQoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisJCQkJICAgIGxvZmZfdCAqKTsKKworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfc2luZyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJCXVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfd3JhcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJCXVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfY29udChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJCXVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9hb19wb2xsX2NvbnQoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzeW5jX2NvbnQoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworCitzdGF0aWMgaW50IG1lNDAwMF9hb19zdGFydCh1bnNpZ25lZCBsb25nICosIG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zdG9wKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IodTMyICosIG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVsb2FkKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVsb2FkX3VwZGF0ZShtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZShpbnQgKiwgbWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZXBhcmUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2luZm8pOworc3RhdGljIGludCBtZTQwMDBfYW9fcmVzZXQobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2luZm8pOworc3RhdGljIGludCBtZTQwMDBfYW9fZW5hYmxlX2RvKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19kaXNhYmxlX2RvKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19mc21fc3RhdGUoaW50ICosIG1lNDAwMF9hb19jb250ZXh0X3QgKik7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCAqIGNoYW5uZWxzLAorCQkJCQkgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworCitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBbmFsb2cgaW5wdXQgc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3NpbmdsZShtZTQwMDBfYWlfc2luZ2xlX3QgKiwgbWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX3Npbmcoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FpX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX3N3KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWU0MDAwX2FpX3BvbGwoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3AsIGludCBtb2RlKTsKKworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3ByZXBhcmUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfcmVzZXQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfY29uZmlnKG1lNDAwMF9haV9jb25maWdfdCAqLCBtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnQobWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0YXJ0X2V4KHVuc2lnbmVkIGxvbmcgKiwgbWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0b3AobWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX3NldHVwKG1lNDAwMF9haV90cmlnZ2VyX3QgKiwKKwkJCQkgICBtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc2Nfc2V0dXAobWU0MDAwX2FpX3NjX3QgKiBhcmcsCisJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX29mZnNldF9kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Z1bGxzY2FsZV9lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZnNtX3N0YXRlKGludCAqYXJnLCBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRUVQUk9NIHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9lZXByb21fcmVhZChtZTQwMDBfZWVwcm9tX3QgKiBhcmcsCisJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9lZXByb21fd3JpdGUobWU0MDAwX2VlcHJvbV90ICogYXJnLAorCQkJICAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlZXByb21fcmVhZF9jbWQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIGludCBsZW5ndGgpOworc3RhdGljIGludCBlZXByb21fd3JpdGVfY21kKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0LCB1bnNpZ25lZCBsb25nIGNtZCwKKwkJCSAgICBpbnQgbGVuZ3RoKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEaWdpdGFsIEkvTyBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9fY29uZmlnKG1lNDAwMF9kaW9fY29uZmlnX3QgKiwgbWU0MDAwX2Rpb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9fZ2V0X2J5dGUobWU0MDAwX2Rpb19ieXRlX3QgKiwgbWU0MDAwX2Rpb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9fc2V0X2J5dGUobWU0MDAwX2Rpb19ieXRlX3QgKiwgbWU0MDAwX2Rpb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9fcmVzZXQobWU0MDAwX2Rpb19jb250ZXh0X3QgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ291bnRlciBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfY250X2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfY29uZmlnKG1lNDAwMF9jbnRfY29uZmlnX3QgKiwgbWU0MDAwX2NudF9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVhZChtZTQwMDBfY250X3QgKiwgbWU0MDAwX2NudF9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfd3JpdGUobWU0MDAwX2NudF90ICosIG1lNDAwMF9jbnRfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfY250X3Jlc2V0KG1lNDAwMF9jbnRfY29udGV4dF90ICopOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEV4dGVybmFsIGludGVycnVwdCByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJCXVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9lbmFibGUobWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfY291bnQodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqIGV4dF9pbnRfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3B0ciwgaW50IG1vZGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9hb19pc3IoaW50LCB2b2lkICopOworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50LCB2b2lkICopOworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9leHRfaW50X2lzcihpbnQsIHZvaWQgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW5saW5lIGZ1bmN0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX2J1Zl9jb3VudChtZTQwMDBfY2lyY19idWZfdCwgaW50KTsKK3N0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9idWZfc3BhY2UobWU0MDAwX2NpcmNfYnVmX3QsIGludCk7CitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfc3BhY2VfdG9fZW5kKG1lNDAwMF9jaXJjX2J1Zl90LCBpbnQpOworc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX3ZhbHVlc190b19lbmQobWU0MDAwX2NpcmNfYnVmX3QsIGludCk7CisKK3N0YXRpYyB2b2lkIGlubGluZSBtZTQwMDBfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworc3RhdGljIHZvaWQgaW5saW5lIG1lNDAwMF9vdXRsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmxpbmUgbWU0MDAwX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5saW5lIG1lNDAwMF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKKworc3RhdGljIGludCBtZTQwMDBfYnVmX2NvdW50KG1lNDAwMF9jaXJjX2J1Zl90IGJ1ZiwgaW50IHNpemUpCit7CisJcmV0dXJuICgoYnVmLmhlYWQgLSBidWYudGFpbCkgJiAoc2l6ZSAtIDEpKTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYnVmX3NwYWNlKG1lNDAwMF9jaXJjX2J1Zl90IGJ1ZiwgaW50IHNpemUpCit7CisJcmV0dXJuICgoYnVmLnRhaWwgLSAoYnVmLmhlYWQgKyAxKSkgJiAoc2l6ZSAtIDEpKTsKK30KKworc3RhdGljIGludCBtZTQwMDBfdmFsdWVzX3RvX2VuZChtZTQwMDBfY2lyY19idWZfdCBidWYsIGludCBzaXplKQoreworCWludCBlbmQ7CisJaW50IG47CisJZW5kID0gc2l6ZSAtIGJ1Zi50YWlsOworCW4gPSAoYnVmLmhlYWQgKyBlbmQpICYgKHNpemUgLSAxKTsKKwlyZXR1cm4gKG4gPCBlbmQpID8gbiA6IGVuZDsKK30KKworc3RhdGljIGludCBtZTQwMDBfc3BhY2VfdG9fZW5kKG1lNDAwMF9jaXJjX2J1Zl90IGJ1ZiwgaW50IHNpemUpCit7CisJaW50IGVuZDsKKwlpbnQgbjsKKworCWVuZCA9IHNpemUgLSAxIC0gYnVmLmhlYWQ7CisJbiA9IChlbmQgKyBidWYudGFpbCkgJiAoc2l6ZSAtIDEpOworCXJldHVybiAobiA8PSBlbmQpID8gbiA6IChlbmQgKyAxKTsKK30KKworc3RhdGljIHZvaWQgbWU0MDAwX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCVBPUlRfUERFQlVHKCItLT4gMHglMDJYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCW91dGIodmFsdWUsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBtZTQwMDBfb3V0bCh1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJUE9SVF9QREVCVUcoIi0tPiAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCW91dGwodmFsdWUsIHBvcnQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZTQwMDBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCXZhbHVlID0gaW5sKHBvcnQpOworCVBPUlRfUERFQlVHKCI8LS0gMHglMDhsWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJdmFsdWUgPSBpbmIocG9ydCk7CisJUE9SVF9QREVCVUcoIjwtLSAweCUwOFggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdHJ1Y3QgcGNpX2RyaXZlciBtZTQwMDBfZHJpdmVyID0geworCS5uYW1lID0gTUU0MDAwX05BTUUsCisJLmlkX3RhYmxlID0gbWU0MDAwX3BjaV90YWJsZSwKKwkucHJvYmUgPSBtZTQwMDBfcHJvYmUKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3NpbmcgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHdyaXRlOm1lNDAwMF9hb193cml0ZV9zaW5nLAorICAgICAgaW9jdGw6bWU0MDAwX2FvX2lvY3RsX3NpbmcsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3dyYXAgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHdyaXRlOm1lNDAwMF9hb193cml0ZV93cmFwLAorICAgICAgaW9jdGw6bWU0MDAwX2FvX2lvY3RsX3dyYXAsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX2NvbnQgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHdyaXRlOm1lNDAwMF9hb193cml0ZV9jb250LAorICAgICAgcG9sbDptZTQwMDBfYW9fcG9sbF9jb250LAorICAgICAgaW9jdGw6bWU0MDAwX2FvX2lvY3RsX2NvbnQsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKKyAgICAgIGZzeW5jOm1lNDAwMF9hb19mc3luY19jb250LAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfc2luZyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgaW9jdGw6bWU0MDAwX2FpX2lvY3RsX3NpbmcsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfc3cgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHJlYWQ6bWU0MDAwX2FpX3JlYWQsCisgICAgICBwb2xsOm1lNDAwMF9haV9wb2xsLAorICAgICAgaW9jdGw6bWU0MDAwX2FpX2lvY3RsX3N3LAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCisgICAgICBmYXN5bmM6bWU0MDAwX2FpX2Zhc3luYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXQgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHJlYWQ6bWU0MDAwX2FpX3JlYWQsCisgICAgICBwb2xsOm1lNDAwMF9haV9wb2xsLAorICAgICAgaW9jdGw6bWU0MDAwX2FpX2lvY3RsX2V4dCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgcmVhZDptZTQwMDBfYWlfcmVhZCwKKyAgICAgIHBvbGw6bWU0MDAwX2FpX3BvbGwsCisgICAgICBpb2N0bDptZTQwMDBfYWlfaW9jdGxfZXh0LAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0ID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICByZWFkOm1lNDAwMF9haV9yZWFkLAorICAgICAgcG9sbDptZTQwMDBfYWlfcG9sbCwKKyAgICAgIGlvY3RsOm1lNDAwMF9haV9pb2N0bF9leHQsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9kaW9fZm9wcyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgaW9jdGw6bWU0MDAwX2Rpb19pb2N0bCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2NudF9mb3BzID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICBpb2N0bDptZTQwMDBfY250X2lvY3RsLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZXh0X2ludF9mb3BzID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICBpb2N0bDptZTQwMDBfZXh0X2ludF9pb2N0bCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorICAgICAgZmFzeW5jOm1lNDAwMF9leHRfaW50X2Zhc3luYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYW9fZm9wc19hcnJheVtdID0geworCSZtZTQwMDBfYW9fZm9wc19zaW5nLAkvLyBzaW5nbGUgb3BlcmF0aW9ucworCSZtZTQwMDBfYW9fZm9wc193cmFwLAkvLyB3cmFwYXJvdW5kIG9wZXJhdGlvbnMKKwkmbWU0MDAwX2FvX2ZvcHNfY29udCwJLy8gY29udGlub3VzIG9wZXJhdGlvbnMKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYWlfZm9wc19hcnJheVtdID0geworCSZtZTQwMDBfYWlfZm9wc19zaW5nLAkvLyBzaW5nbGUgb3BlcmF0aW9ucworCSZtZTQwMDBfYWlfZm9wc19jb250X3N3LAkvLyBjb250aW51b3VzIG9wZXJhdGlvbnMgd2l0aCBzb2Z0d2FyZSBzdGFydAorCSZtZTQwMDBfYWlfZm9wc19jb250X2V0LAkvLyBjb250aW5vdXMgb3BlcmF0aW9ucyB3aXRoIGV4dGVybmFsIHRyaWdnZXIKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSwJLy8gc2FtcGxlIHZhbHVlcyBieSBleHRlcm5hbCB0cmlnZ2VyCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QsCS8vIHdvcmsgdGhyb3VnaCBvbmUgY2hhbm5lbCBsaXN0IGJ5IGV4dGVybmFsIHRyaWdnZXIKK307CisKK2ludCBfX2luaXQgbWU0MDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlDQUxMX1BERUJVRygiaW5pdF9tb2R1bGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBSZWdpc3RlciBkcml2ZXIgY2FwYWJpbGl0aWVzICovCisJcmVzdWx0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbWU0MDAwX2RyaXZlcik7CisJUERFQlVHKCJpbml0X21vZHVsZSgpOiVkIGRldmljZXMgZGV0ZWN0ZWRcbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCByZWdpc3RlciBkcml2ZXJcbiIpOworCQlnb3RvIElOSVRfRVJST1JfMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGFuYWxvZyBvdXRwdXQgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FPX05BTUUsCisJCQkgICAgJm1lNDAwMF9hb19mb3BzX3NpbmcpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IEFPIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzI7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIEFPID0gJWxkXG4iLAorCSAgICAgICBtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgYW5hbG9nIGlucHV0ICAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQUlfTkFNRSwKKwkJCSAgICAmbWU0MDAwX2FpX2ZvcHNfc2luZyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgQUkgbWFqb3Igbm9cbiIpOworCQlnb3RvIElOSVRfRVJST1JfMzsKKwl9IGVsc2UgeworCQltZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vID0gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfbW9kdWxlKCk6TWFqb3IgZHJpdmVyIG51bWJlciBmb3IgQUkgPSAlbGRcbiIsCisJICAgICAgIG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBkaWdpdGFsIEkvTyAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0RJT19OQU1FLAorCQkJICAgICZtZTQwMDBfZGlvX2ZvcHMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBESU8gbWFqb3Igbm9cbiIpOworCQlnb3RvIElOSVRfRVJST1JfNDsKKwl9IGVsc2UgeworCQltZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIERJTyA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBjb3VudGVyICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQ05UX05BTUUsCisJCQkgICAgJm1lNDAwMF9jbnRfZm9wcyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IENOVCBtYWpvciBub1xuIik7CisJCWdvdG8gSU5JVF9FUlJPUl81OworCX0gZWxzZSB7CisJCW1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vID0gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfbW9kdWxlKCk6TWFqb3IgZHJpdmVyIG51bWJlciBmb3IgQ05UID0gJWxkXG4iLAorCSAgICAgICBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGV4dGVybmFsIGludGVycnVwdCAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9FWFRfSU5UX05BTUUsCisJCQkgICAgJm1lNDAwMF9leHRfaW50X2ZvcHMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBtYWpvciBubyBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0XG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzY7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vID0gcmVzdWx0OworCX0KKwlQREVCVUcKKwkgICAgKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGV4dGVybmFsIGludGVycnVwdCA9ICVsZFxuIiwKKwkgICAgIG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBDcmVhdGUgdGhlIC9wcm9jL21lNDAwMCBlbnRyeSAqLworCWlmICghY3JlYXRlX3Byb2NfcmVhZF9lbnRyeQorCSAgICAoIm1lNDAwMCIsIDAsIE5VTEwsIG1lNDAwMF9yZWFkX3Byb2NtZW0sIE5VTEwpKSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGNyZWF0ZSBwcm9jIGVudHJ5XG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzc7CisJfQorCisJcmV0dXJuIDA7CisKKyAgICAgIElOSVRfRVJST1JfNzoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9FWFRfSU5UX05BTUUpOworCisgICAgICBJTklUX0VSUk9SXzY6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9DTlRfTkFNRSk7CisKKyAgICAgIElOSVRfRVJST1JfNToKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0RJT19OQU1FKTsKKworICAgICAgSU5JVF9FUlJPUl80OgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BSV9OQU1FKTsKKworICAgICAgSU5JVF9FUlJPUl8zOgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BT19OQU1FKTsKKworICAgICAgSU5JVF9FUlJPUl8yOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWU0MDAwX2RyaXZlcik7CisJY2xlYXJfYm9hcmRfaW5mb19saXN0KCk7CisKKyAgICAgIElOSVRfRVJST1JfMToKKwlyZXR1cm4gcmVzdWx0OworfQorCittb2R1bGVfaW5pdChtZTQwMDBfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBjbGVhcl9ib2FyZF9pbmZvX2xpc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpib2FyZF9wOworCXN0cnVjdCBsaXN0X2hlYWQgKmRhY19wOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCS8qIENsZWFyIGNvbnRleHQgbGlzdHMgKi8KKwlmb3IgKGJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJICAgICBib2FyZF9wICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBib2FyZF9wID0gYm9hcmRfcC0+bmV4dCkgeworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShib2FyZF9wLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJLyogQ2xlYXIgYW5hbG9nIG91dHB1dCBjb250ZXh0IGxpc3QgKi8KKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpKSB7CisJCQlkYWNfcCA9IGJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdC5uZXh0OworCQkJYW9fY29udGV4dCA9CisJCQkgICAgbGlzdF9lbnRyeShkYWNfcCwgbWU0MDAwX2FvX2NvbnRleHRfdCwgbGlzdCk7CisJCQltZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJCQlmcmVlX2lycShhb19jb250ZXh0LT5pcnEsIGFvX2NvbnRleHQpOworCQkJaWYgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKKwkJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQkJbGlzdF9kZWwoZGFjX3ApOworCQkJa2ZyZWUoYW9fY29udGV4dCk7CisJCX0KKworCQkvKiBDbGVhciBhbmFsb2cgaW5wdXQgY29udGV4dCAqLworCQlpZiAoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKQorCQkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dCk7CisKKwkJLyogQ2xlYXIgZGlnaXRhbCBJL08gY29udGV4dCAqLworCQlrZnJlZShib2FyZF9pbmZvLT5kaW9fY29udGV4dCk7CisKKwkJLyogQ2xlYXIgY291bnRlciBjb250ZXh0ICovCisJCWtmcmVlKGJvYXJkX2luZm8tPmNudF9jb250ZXh0KTsKKworCQkvKiBDbGVhciBleHRlcm5hbCBpbnRlcnJ1cHQgY29udGV4dCAqLworCQlrZnJlZShib2FyZF9pbmZvLT5leHRfaW50X2NvbnRleHQpOworCX0KKworCS8qIENsZWFyIHRoZSBib2FyZCBpbmZvIGxpc3QgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpKSB7CisJCWJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KGJvYXJkX3AsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQlwY2lfcmVsZWFzZV9yZWdpb25zKGJvYXJkX2luZm8tPnBjaV9kZXZfcCk7CisJCWxpc3RfZGVsKGJvYXJkX3ApOworCQlrZnJlZShib2FyZF9pbmZvKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBtZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbykKK3sKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBseCByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDEpOworCWlmIChib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDpnZXRfcmVnaXN0ZXJzKCk6UENJIGJhc2UgYWRkcmVzcyAxIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAxKTsKKworCVBERUJVRworCSAgICAoImdldF9yZWdpc3RlcnMoKTpQTFggY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bFggWzB4JTRsWF1cbiIsCisJICAgICBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSwgYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZTQwMDAgcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAyKTsKKwlpZiAoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Z2V0X3JlZ2lzdGVycygpOlBDSSBiYXNlIGFkZHJlc3MgMiBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMik7CisKKwlQREVCVUcoImdldF9yZWdpc3RlcnMoKTpNRTQwMDAgcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGxYIFsweCU0bFhdXG4iLAorCSAgICAgICBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSwgYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aW1lciByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMyk7CisJaWYgKGJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Z2V0X3JlZ2lzdGVycygpOlBDSSBiYXNlIGFkZHJlc3MgMyBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAzKTsKKworCVBERUJVRygiZ2V0X3JlZ2lzdGVycygpOlRpbWVyIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZSwgYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZV9zaXplKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNSk7CisJaWYgKGJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImdldF9yZWdpc3RlcnMoKTpNRTQwMDA6UENJIGJhc2UgYWRkcmVzcyA1IGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgNSk7CisKKwlQREVCVUcoImdldF9yZWdpc3RlcnMoKTpQcm9ncmFtIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlLCBib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2Vfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCwKKwkJCSAgIG1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqYm9hcmRfcDsKKwlib2FyZF9pbmZvLT5wY2lfZGV2X3AgPSBwY2lfZGV2X3A7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUU0MDAwX0JPQVJEX1ZFUlNJT05TOyBpKyspIHsKKwkJaWYgKG1lNDAwMF9ib2FyZHNbaV0uZGV2aWNlX2lkID09IHBjaV9kZXZfcC0+ZGV2aWNlKSB7CisJCQlib2FyZF9pbmZvLT5ib2FyZF9wID0gJm1lNDAwMF9ib2FyZHNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSBNRTQwMDBfQk9BUkRfVkVSU0lPTlMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbygpOkRldmljZSBJRCBub3QgdmFsaWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBib2FyZCBpbiB0aGUgZ2xvYmFsIGxpc3QgKi8KKwlmb3IgKGJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQsIGkgPSAwOworCSAgICAgYm9hcmRfcCAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgYm9hcmRfcCA9IGJvYXJkX3AtPm5leHQsIGkrKykgeworCQlpZiAoYm9hcmRfcCA9PSAmYm9hcmRfaW5mby0+bGlzdCkgeworCQkJYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGJvYXJkX3AgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbygpOkNhbm5vdCBnZXQgaW5kZXggb2YgYmFvcmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBJbml0IGxpc3QgaGVhZCBmb3IgYW5hbG9nIG91dHB1dCBjb250ZXh0cyAqLworCUlOSVRfTElTVF9IRUFEKCZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpOworCisJLyogSW5pdCBzcGluIGxvY2tzICovCisJc3Bpbl9sb2NrX2luaXQoJmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJvYXJkX2luZm8tPmFpX2N0cmxfbG9jayk7CisKKwkvKiBHZXQgdGhlIHNlcmlhbCBudW1iZXIgKi8KKwlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2Rldl9wLCAweDJDLCAmYm9hcmRfaW5mby0+c2VyaWFsX25vKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbzogQ2FuJ3QgZ2V0IHNlcmlhbF9ub1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6c2VyaWFsX25vID0gMHgleFxuIiwgYm9hcmRfaW5mby0+c2VyaWFsX25vKTsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUgcmV2aXNpb24gKi8KKwlyZXN1bHQgPQorCSAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2X3AsIDB4MDgsICZib2FyZF9pbmZvLT5od19yZXZpc2lvbik7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1FNDAwMDppbml0X2JvYXJkX2luZm8oKTpDYW4ndCBnZXQgaHdfcmV2aXNpb25cbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOmh3X3JldmlzaW9uID0gMHgleFxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+aHdfcmV2aXNpb24pOworCisJLyogR2V0IHRoZSB2ZW5kb3IgaWQgKi8KKwlib2FyZF9pbmZvLT52ZW5kb3JfaWQgPSBwY2lfZGV2X3AtPnZlbmRvcjsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnZlbmRvcl9pZCA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnZlbmRvcl9pZCk7CisKKwkvKiBHZXQgdGhlIGRldmljZSBpZCAqLworCWJvYXJkX2luZm8tPmRldmljZV9pZCA9IHBjaV9kZXZfcC0+ZGV2aWNlOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6ZGV2aWNlX2lkID0gMHgleFxuIiwgYm9hcmRfaW5mby0+ZGV2aWNlX2lkKTsKKworCS8qIEdldCB0aGUgcGNpIGRldmljZSBudW1iZXIgKi8KKwlib2FyZF9pbmZvLT5wY2lfZGV2X25vID0gUENJX0ZVTkMocGNpX2Rldl9wLT5kZXZmbik7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpwY2lfZnVuY19ubyA9IDB4JXhcbiIsCisJICAgICAgIGJvYXJkX2luZm8tPnBjaV9mdW5jX25vKTsKKworCS8qIEdldCB0aGUgcGNpIHNsb3QgbnVtYmVyICovCisJYm9hcmRfaW5mby0+cGNpX2Rldl9ubyA9IFBDSV9TTE9UKHBjaV9kZXZfcC0+ZGV2Zm4pOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6cGNpX2Rldl9ubyA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnBjaV9kZXZfbm8pOworCisJLyogR2V0IHRoZSBwY2kgYnVzIG51bWJlciAqLworCWJvYXJkX2luZm8tPnBjaV9idXNfbm8gPSBwY2lfZGV2X3AtPmJ1cy0+bnVtYmVyOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6cGNpX2J1c19ubyA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnBjaV9idXNfbm8pOworCisJLyogR2V0IHRoZSBpcnEgYXNzaWduZWQgdG8gdGhlIGJvYXJkICovCisJYm9hcmRfaW5mby0+aXJxID0gcGNpX2Rldl9wLT5pcnE7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTppcnEgPSAlZFxuIiwgYm9hcmRfaW5mby0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2FvX2NvbnRleHRzKG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCWludCBpOworCWludCBlcnI7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ib2FyZF9wLT5hby5jb3VudDsgaSsrKSB7CisJCWFvX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihtZTQwMDBfYW9fY29udGV4dF90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYW9fY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImFsbG9jX2FvX2NvbnRleHRzKCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgYW8gY29udGV4dFxuIik7CisJCQlyZWxlYXNlX2FvX2NvbnRleHRzKGluZm8pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGFvX2NvbnRleHQsIDAsIHNpemVvZihtZTQwMDBfYW9fY29udGV4dF90KSk7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmFvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKwkJYW9fY29udGV4dC0+aXJxID0gaW5mby0+aXJxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhb19jb250ZXh0LT53YWl0X3F1ZXVlKTsKKwkJYW9fY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJaWYgKGluZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpIHsKKwkJCS8qIEFsbG9jYXRlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuYnVmID0KKwkJCSAgICBrbWFsbG9jKE1FNDAwMF9BT19CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiYWxsb2NfYW9fY29udGV4dHMoKTpDYW4ndCBnZXQgY2lyY3VsYXIgYnVmZmVyXG4iKTsKKwkJCQlyZWxlYXNlX2FvX2NvbnRleHRzKGluZm8pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJbWVtc2V0KGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiwgMCwKKwkJCSAgICAgICBNRTQwMDBfQU9fQlVGRkVSX1NJWkUpOworCisJCQkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCQl9CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWFvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9DVFJMX1JFRzsKKwkJCWFvX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5maWZvX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfRklGT19SRUc7CisJCQlhb19jb250ZXh0LT5zaW5nbGVfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHOworCQkJYW9fY29udGV4dC0+dGltZXJfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9USU1FUl9SRUc7CisJCQlhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5wcmVsb2FkX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX0NUUkxfUkVHOworCQkJYW9fY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPmZpZm9fcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9GSUZPX1JFRzsKKwkJCWFvX2NvbnRleHQtPnNpbmdsZV9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUc7CisJCQlhb19jb250ZXh0LT50aW1lcl9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX1RJTUVSX1JFRzsKKwkJCWFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPnByZWxvYWRfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWFvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19DVFJMX1JFRzsKKwkJCWFvX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5maWZvX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfRklGT19SRUc7CisJCQlhb19jb250ZXh0LT5zaW5nbGVfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHOworCQkJYW9fY29udGV4dC0+dGltZXJfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19USU1FUl9SRUc7CisJCQlhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5wcmVsb2FkX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW5mby0+Ym9hcmRfcC0+YW8uZmlmb19jb3VudCkgeworCQkJLyogUmVxdWVzdCB0aGUgaW50ZXJydXB0IGxpbmUgKi8KKwkJCWVyciA9CisJCQkgICAgcmVxdWVzdF9pcnEoYW9fY29udGV4dC0+aXJxLCBtZTQwMDBfYW9faXNyLAorCQkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCisJCQkJCU1FNDAwMF9OQU1FLCBhb19jb250ZXh0KTsKKwkJCWlmIChlcnIpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImFsbG9jX2FvX2NvbnRleHRzKCk6Q2FuJ3QgZ2V0IGludGVycnVwdCBsaW5lIik7CisJCQkJaWYgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKKwkJCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCQlrZnJlZShhb19jb250ZXh0KTsKKwkJCQlyZWxlYXNlX2FvX2NvbnRleHRzKGluZm8pOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisKKwkJbGlzdF9hZGRfdGFpbCgmYW9fY29udGV4dC0+bGlzdCwgJmluZm8tPmFvX2NvbnRleHRfbGlzdCk7CisJCWFvX2NvbnRleHQtPmluZGV4ID0gaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9hb19jb250ZXh0cyhtZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkYWNfcDsKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJLyogQ2xlYXIgYW5hbG9nIG91dHB1dCBjb250ZXh0IGxpc3QgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkpIHsKKwkJZGFjX3AgPSBib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QubmV4dDsKKwkJYW9fY29udGV4dCA9IGxpc3RfZW50cnkoZGFjX3AsIG1lNDAwMF9hb19jb250ZXh0X3QsIGxpc3QpOworCQlmcmVlX2lycShhb19jb250ZXh0LT5pcnEsIGFvX2NvbnRleHQpOworCQlpZiAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKQorCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJbGlzdF9kZWwoZGFjX3ApOworCQlrZnJlZShhb19jb250ZXh0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYWlfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCisJaWYgKGluZm8tPmJvYXJkX3AtPmFpLmNvdW50KSB7CisJCWFpX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihtZTQwMDBfYWlfY29udGV4dF90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWlfY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDphbGxvY19haV9jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgYWkgY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoYWlfY29udGV4dCwgMCwgc2l6ZW9mKG1lNDAwMF9haV9jb250ZXh0X3QpKTsKKworCQlpbmZvLT5haV9jb250ZXh0ID0gYWlfY29udGV4dDsKKworCQlzcGluX2xvY2tfaW5pdCgmYWlfY29udGV4dC0+dXNlX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYWlfY29udGV4dC0+aW50X2xvY2spOworCQlhaV9jb250ZXh0LT5udW1iZXIgPSAwOworCQlhaV9jb250ZXh0LT5pcnEgPSBpbmZvLT5pcnE7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFpX2NvbnRleHQtPndhaXRfcXVldWUpOworCQlhaV9jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlhaV9jb250ZXh0LT5jdHJsX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DVFJMX1JFRzsKKwkJYWlfY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TVEFUVVNfUkVHOworCQlhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9SRUc7CisJCWFpX2NvbnRleHQtPmRhdGFfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0RBVEFfUkVHOworCQlhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DSEFOX1RJTUVSX1JFRzsKKwkJYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NIQU5fUFJFX1RJTUVSX1JFRzsKKwkJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NDQU5fVElNRVJfTE9XX1JFRzsKKwkJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUc7CisJCWFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0hJR0hfUkVHOworCQlhaV9jb250ZXh0LT5zdGFydF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU1RBUlRfUkVHOworCQlhaV9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NBTVBMRV9DT1VOVEVSX1JFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19kaW9fY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwltZTQwMDBfZGlvX2NvbnRleHRfdCAqZGlvX2NvbnRleHQ7CisKKwlpZiAoaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50KSB7CisJCWRpb19jb250ZXh0ID0ga21hbGxvYyhzaXplb2YobWU0MDAwX2Rpb19jb250ZXh0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkaW9fY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDphbGxvY19kaW9fY29udGV4dCgpOkNhbid0IGdldCBtZW1vcnkgZm9yIGRpbyBjb250ZXh0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChkaW9fY29udGV4dCwgMCwgc2l6ZW9mKG1lNDAwMF9kaW9fY29udGV4dF90KSk7CisKKwkJaW5mby0+ZGlvX2NvbnRleHQgPSBkaW9fY29udGV4dDsKKworCQlzcGluX2xvY2tfaW5pdCgmZGlvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJZGlvX2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWRpb19jb250ZXh0LT5kaW9fY291bnQgPSBpbmZvLT5ib2FyZF9wLT5kaW8uY291bnQ7CisKKwkJZGlvX2NvbnRleHQtPmRpcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0RJUl9SRUc7CisJCWRpb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fQ1RSTF9SRUc7CisJCWRpb19jb250ZXh0LT5wb3J0XzBfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19QT1JUXzBfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8xX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8xX1JFRzsKKwkJZGlvX2NvbnRleHQtPnBvcnRfMl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX1BPUlRfMl9SRUc7CisJCWRpb19jb250ZXh0LT5wb3J0XzNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19QT1JUXzNfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2NudF9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCW1lNDAwMF9jbnRfY29udGV4dF90ICpjbnRfY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5jbnQuY291bnQpIHsKKwkJY250X2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihtZTQwMDBfY250X2NvbnRleHRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNudF9jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2NudF9jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY250IGNvbnRleHRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGNudF9jb250ZXh0LCAwLCBzaXplb2YobWU0MDAwX2NudF9jb250ZXh0X3QpKTsKKworCQlpbmZvLT5jbnRfY29udGV4dCA9IGNudF9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQljbnRfY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJY250X2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPnRpbWVyX3JlZ2Jhc2UgKyBNRTQwMDBfQ05UX0NUUkxfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzBfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzFfUkVHOworCQljbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DT1VOVEVSXzJfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2V4dF9pbnRfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5jbnQuY291bnQpIHsKKwkJZXh0X2ludF9jb250ZXh0ID0KKwkJICAgIGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWV4dF9pbnRfY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDphbGxvY19leHRfaW50X2NvbnRleHQoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBjbnQgY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoZXh0X2ludF9jb250ZXh0LCAwLCBzaXplb2YobWU0MDAwX2V4dF9pbnRfY29udGV4dF90KSk7CisKKwkJaW5mby0+ZXh0X2ludF9jb250ZXh0ID0gZXh0X2ludF9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZleHRfaW50X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJZXh0X2ludF9jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlleHRfaW50X2NvbnRleHQtPmZhc3luY19wdHIgPSBOVUxMOworCQlleHRfaW50X2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKworCQlleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NUUkxfUkVHOworCQlleHRfaW50X2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfcHJvYmUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yIGJvYXJkIGNvbnRleHQgKi8KKwlib2FyZF9pbmZvID0ga21hbGxvYyhzaXplb2YobWU0MDAwX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghYm9hcmRfaW5mbykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgYm9hcmQgaW5mbyBzdHJ1Y3R1cmVcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIFBST0JFX0VSUk9SXzE7CisJfQorCW1lbXNldChib2FyZF9pbmZvLCAwLCBzaXplb2YobWU0MDAwX2luZm9fdCkpOworCisJLyogQWRkIHRvIGdsb2JhbCBsaW5rZWQgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJmJvYXJkX2luZm8tPmxpc3QsICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KTsKKworCS8qIEdldCB0aGUgUENJIGJhc2UgcmVnaXN0ZXJzICovCisJcmVzdWx0ID0gZ2V0X3JlZ2lzdGVycyhkZXYsIGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgZ2V0IHJlZ2lzdGVyc1xuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMjsKKwl9CisKKwkvKiBFbmFibGUgdGhlIGRldmljZSAqLworCXJlc3VsdCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzI7CisJfQorCisJLyogUmVxdWVzdCB0aGUgUENJIHJlZ2lzdGVyIHJlZ2lvbnMgKi8KKwlyZXN1bHQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgTUU0MDAwX05BTUUpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IHJlcXVlc3QgSS9PIHJlZ2lvbnNcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzI7CisJfQorCisJLyogSW5pdGlhbGl6ZSBib2FyZCBpbmZvICovCisJcmVzdWx0ID0gaW5pdF9ib2FyZF9pbmZvKGRldiwgYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBpbml0IGJhb3JkIGluZm9cbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzM7CisJfQorCisJLyogRG93bmxvYWQgdGhlIHhpbGlueCBmaXJtd2FyZSAqLworCXJlc3VsdCA9IG1lNDAwMF94aWxpbnhfZG93bmxvYWQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZTpDYW4ndCBkb3dubG9hZCBmaXJtd2FyZVxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBNYWtlIGEgaGFyZHdhcmUgcmVzZXQgKi8KKwlyZXN1bHQgPSBtZTQwMDBfcmVzZXRfYm9hcmQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZTpDYW4ndCByZXNldCBib2FyZFxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmFsb2cgb3V0cHV0IGNvbnRleHQgc3RydWN0dXJlcyAqLworCXJlc3VsdCA9IGFsbG9jX2FvX2NvbnRleHRzKGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgYWxsb2NhdGUgYW8gY29udGV4dHNcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzM7CisJfQorCisJLyogQWxsb2NhdGUgYW5hbG9nIGlucHV0IGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19haV9jb250ZXh0KGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgYWxsb2NhdGUgYWkgY29udGV4dFxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfNDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBkaWdpdGFsIEkvTyBjb250ZXh0ICovCisJcmVzdWx0ID0gYWxsb2NfZGlvX2NvbnRleHQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBhbGxvY2F0ZSBkaW8gY29udGV4dFxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfNTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjb3VudGVyIGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19jbnRfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGFsbG9jYXRlIGNudCBjb250ZXh0XG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl82OworCX0KKworCS8qIEFsbG9jYXRlIGV4dGVybmFsIGludGVycnVwdCBjb250ZXh0ICovCisJcmVzdWx0ID0gYWxsb2NfZXh0X2ludF9jb250ZXh0KGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGFsbG9jYXRlIGV4dF9pbnQgY29udGV4dFxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfNzsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgUFJPQkVfRVJST1JfNzoKKwlrZnJlZShib2FyZF9pbmZvLT5jbnRfY29udGV4dCk7CisKKyAgICAgIFBST0JFX0VSUk9SXzY6CisJa2ZyZWUoYm9hcmRfaW5mby0+ZGlvX2NvbnRleHQpOworCisgICAgICBQUk9CRV9FUlJPUl81OgorCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQpOworCisgICAgICBQUk9CRV9FUlJPUl80OgorCXJlbGVhc2VfYW9fY29udGV4dHMoYm9hcmRfaW5mbyk7CisKKyAgICAgIFBST0JFX0VSUk9SXzM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCisgICAgICBQUk9CRV9FUlJPUl8yOgorCWxpc3RfZGVsKCZib2FyZF9pbmZvLT5saXN0KTsKKwlrZnJlZShib2FyZF9pbmZvKTsKKworICAgICAgUFJPQkVfRVJST1JfMToKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IG1lNDAwMF94aWxpbnhfZG93bmxvYWQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJaW50IHNpemUgPSAwOworCXUzMiB2YWx1ZSA9IDA7CisJaW50IGlkeCA9IDA7CisJdW5zaWduZWQgY2hhciAqZmlybTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJZmlybSA9IChpbmZvLT5kZXZpY2VfaWQgPT0gMHg0NjEwKSA/IHhpbGlueF9maXJtXzQ2MTAgOiB4aWxpbnhfZmlybTsKKworCS8qCisJICogU2V0IFBMWCBsb2NhbCBpbnRlcnJ1cHQgMiBwb2xhcml0eSB0byBoaWdoLgorCSAqIEludGVycnVwdCBpcyB0aHJvd24gYnkgaW5pdCBwaW4gb2YgeGlsaW54LgorCSAqLworCW91dGwoMHgxMCwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKTsKKworCS8qIFNldCAvQ1MgYW5kIC9XUklURSBvZiB0aGUgWGlsaW54ICovCisJdmFsdWUgPSBpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSB8PSAweDEwMDsKKwlvdXRsKHZhbHVlLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogSW5pdCBYaWxpbnggd2l0aCBDUzEgKi8KKwlpbmIoaW5mby0+cHJvZ3JhbV9yZWdiYXNlICsgMHhDOCk7CisKKwkvKiBXYWl0IHVudGlsIC9JTklUIHBpbiBpcyBzZXQgKi8KKwl1ZGVsYXkoMjApOworCWlmICghaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUikgJiAweDIwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkNhbid0IGluaXQgWGlsaW54XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogUmVzZXQgL0NTIGFuZCAvV1JJVEUgb2YgdGhlIFhpbGlueCAqLworCXZhbHVlID0gaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgJj0gfjB4MTAwOworCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBEb3dubG9hZCBYaWxpbnggZmlybXdhcmUgKi8KKwlzaXplID0gKGZpcm1bMF0gPDwgMjQpICsgKGZpcm1bMV0gPDwgMTYpICsgKGZpcm1bMl0gPDwgOCkgKyBmaXJtWzNdOworCXVkZWxheSgxMCk7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNpemU7IGlkeCsrKSB7CisJCW91dGIoZmlybVsxNiArIGlkeF0sIGluZm8tPnByb2dyYW1fcmVnYmFzZSk7CisKKwkJdWRlbGF5KDEwKTsKKworCQkvKiBDaGVjayBpZiBCVVNZIGZsYWcgaXMgbG93ICovCisJCWlmIChpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKSAmIDB4MjApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6WGlsaW54IGlzIHN0aWxsIGJ1c3kgKGlkeCA9ICVkKVxuIiwKKwkJCSAgICAgICBpZHgpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlQREVCVUcoIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTolZCBieXRlcyB3cml0dGVuXG4iLCBpZHgpOworCisJLyogSWYgZG9uZSBmbGFnIGlzIGhpZ2ggZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwgKi8KKwlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDQpIHsKKwkJUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6RG9uZSBmbGFnIGlzIHNldFxuIik7CisJCVBERUJVRygibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkRvd25sb2FkIHdhcyBzdWNjZXNzZnVsXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkRPTkUgZmxhZyBpcyBub3Qgc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpEb3dubG9hZCBub3Qgc3VjY2VzZnVsXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU2V0IC9DUyBhbmQgL1dSSVRFICovCisJdmFsdWUgPSBpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSB8PSAweDEwMDsKKwlvdXRsKHZhbHVlLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3Jlc2V0X2JvYXJkKG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCXVuc2lnbmVkIGxvbmcgaWNyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9yZXNldF9ib2FyZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIE1ha2UgYSBoYXJkd2FyZSByZXNldCAqLworCWljciA9IG1lNDAwMF9pbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwlpY3IgfD0gMHg0MDAwMDAwMDsKKwltZTQwMDBfb3V0bChpY3IsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJaWNyICY9IH4weDQwMDAwMDAwOworCW1lNDAwMF9vdXRsKGljciwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCS8qIFNldCBib3RoIHN0b3AgYml0cyBpbiB0aGUgYW5hbG9nIGlucHV0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwltZTQwMDBfb3V0bChNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NUUkxfUkVHKTsKKworCS8qIFNldCBib3RoIHN0b3AgYml0cyBpbiB0aGUgYW5hbG9nIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9DVFJMX1JFRyk7CisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9DVFJMX1JFRyk7CisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9DVFJMX1JFRyk7CisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19DVFJMX1JFRyk7CisKKwkvKiAweDgwMDAgdG8gdGhlIERBQ3MgbWVhbnMgYW4gb3V0cHV0IHZvbHRhZ2Ugb2YgMFYgKi8KKwltZTQwMDBfb3V0bCgweDgwMDAsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX1NJTkdMRV9SRUcpOworCW1lNDAwMF9vdXRsKDB4ODAwMCwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfU0lOR0xFX1JFRyk7CisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9TSU5HTEVfUkVHKTsKKwltZTQwMDBfb3V0bCgweDgwMDAsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX1NJTkdMRV9SRUcpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgb24gdGhlIFBMWCAqLworCW1lNDAwMF9vdXRsKDB4NDMsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUik7CisKKwkvKiBTZXQgdGhlIGFkdXN0bWVudCByZWdpc3RlciBmb3IgQU8gZGVtdXggKi8KKwltZTQwMDBfb3V0bChNRTQwMDBfQU9fREVNVVhfQURKVVNUX1ZBTFVFLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1JFRyk7CisKKwkvKiBTZXQgZGlnaXRhbCBJL08gZGlyZWN0aW9uIGZvciBwb3J0IDAgdG8gb3V0cHV0IG9uIGlzb2xhdGVkIHZlcnNpb25zICovCisJaWYgKCEobWU0MDAwX2lubChpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fRElSX1JFRykgJiAweDEpKSB7CisJCW1lNDAwMF9vdXRsKDB4MSwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3ApCit7CisJaW50IGJvYXJkLCBkZXYsIG1vZGU7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisJc3RydWN0IGxpc3RfaGVhZCAqcHRyOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm8gPSBOVUxMOworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQgPSBOVUxMOworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQgPSBOVUxMOworCW1lNDAwMF9kaW9fY29udGV4dF90ICpkaW9fY29udGV4dCA9IE5VTEw7CisJbWU0MDAwX2NudF9jb250ZXh0X3QgKmNudF9jb250ZXh0ID0gTlVMTDsKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dCA9IE5VTEw7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX29wZW4oKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBBbmFsb2cgb3V0cHV0ICovCisJaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IEFPX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCWRldiA9IEFPX1BPUlQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJbW9kZSA9IEFPX01PREUoaW5vZGVfcC0+aV9yZGV2KTsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6Ym9hcmQgPSAlZCBhbyA9ICVkIG1vZGUgPSAlZFxuIiwgYm9hcmQsCisJCSAgICAgICBkZXYsIG1vZGUpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQsIGkgPSAwOworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0LCBpKyspIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCQlpZiAoaSA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBTZWFyY2ggZm9yIHRoZSBkYWMgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IGJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdC5uZXh0LCBpID0gMDsKKwkJICAgICBwdHIgIT0gJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdDsKKwkJICAgICBwdHIgPSBwdHItPm5leHQsIGkrKykgeworCQkJYW9fY29udGV4dCA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfYW9fY29udGV4dF90LCBsaXN0KTsKKwkJCWlmIChpID09IGRldikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkRldmljZSAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgZGV2KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQ2hlY2sgaWYgbW9kZSBpcyB2YWxpZCAqLworCQlpZiAobW9kZSA+IDIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpNb2RlIGlzIG5vdCB2YWxpZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIENoZWNrIGlmIG1vZGUgaXMgdmFsaWQgZm9yIHRoaXMgQU8gKi8KKwkJaWYgKChtb2RlICE9IE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFKQorCQkgICAgJiYgKGRldiA+PSBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkFPICVkIG9ubHkgaW4gc2luZ2xlIG1vZGUgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGRldik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmYW9fY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoYW9fY29udGV4dC0+ZGFjX2luX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkFPICVkIGFscmVhZHkgaW4gdXNlXG4iLAorCQkJICAgICAgIGRldik7CisJCQlzcGluX3VubG9jaygmYW9fY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQlhb19jb250ZXh0LT5tb2RlID0gbW9kZTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGFvX2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyICovCisJCWZpbGVfcC0+Zl9vcCA9IG1lNDAwMF9hb19mb3BzX2FycmF5W21vZGVdOworCisJCWVyciA9IG1lNDAwMF9hb19wcmVwYXJlKGFvX2NvbnRleHQpOworCQlpZiAoZXJyKSB7CisJCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCS8qIEFuYWxvZyBpbnB1dCAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IEFJX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCW1vZGUgPSBBSV9NT0RFKGlub2RlX3AtPmlfcmRldik7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmFpIGJvYXJkID0gJWQgbW9kZSA9ICVkXG4iLCBib2FyZCwgbW9kZSk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dCwgaSA9IDA7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQsIGkrKykgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJCWlmIChpID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWFpX2NvbnRleHQgPSBib2FyZF9pbmZvLT5haV9jb250ZXh0OworCisJCS8qIENoZWNrIGlmIG1vZGUgaXMgdmFsaWQgKi8KKwkJaWYgKG1vZGUgPiA1KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6TW9kZSBpcyBub3QgdmFsaWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGFpX2NvbnRleHQtPmluX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkFJIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT51c2VfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWFpX2NvbnRleHQtPmluX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT51c2VfbG9jayk7CisKKwkJYWlfY29udGV4dC0+bW9kZSA9IG1vZGU7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBhaV9jb250ZXh0OworCisJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciAqLworCQlmaWxlX3AtPmZfb3AgPSBtZTQwMDBfYWlfZm9wc19hcnJheVttb2RlXTsKKworCQkvKiBQcmVwYXJlIGFuYWxvZyBpbnB1dCAqLworCQltZTQwMDBfYWlfcHJlcGFyZShhaV9jb250ZXh0KTsKKwl9CisJLyogRGlnaXRhbCBJL08gKi8KKwllbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vKSB7CisJCWJvYXJkID0gRElPX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCWRldiA9IDA7CisJCW1vZGUgPSAwOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTpib2FyZCA9ICVkXG4iLCBib2FyZCk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCkgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJCWlmIChib2FyZF9pbmZvLT5ib2FyZF9jb3VudCA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBTZWFyY2ggZm9yIHRoZSBkaW8gY29udGV4dCAqLworCQlkaW9fY29udGV4dCA9IGJvYXJkX2luZm8tPmRpb19jb250ZXh0OworCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmZGlvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGRpb19jb250ZXh0LT5pbl91c2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpESU8gYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJc3Bpbl91bmxvY2soJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRpb19jb250ZXh0LT5pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmZGlvX2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGRpb19jb250ZXh0OworCisJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciB0byBzaW5nbGUgZnVuY3Rpb25zICovCisJCWZpbGVfcC0+Zl9vcCA9ICZtZTQwMDBfZGlvX2ZvcHM7CisKKwkJLy9tZTQwMDBfZGlvX3Jlc2V0KGRpb19jb250ZXh0KTsKKwl9CisJLyogQ291bnRlcnMgKi8KKwllbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vKSB7CisJCWJvYXJkID0gQ05UX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCWRldiA9IDA7CisJCW1vZGUgPSAwOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTpib2FyZCA9ICVkXG4iLCBib2FyZCk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCkgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJCWlmIChib2FyZF9pbmZvLT5ib2FyZF9jb3VudCA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBHZXQgdGhlIGNudCBjb250ZXh0ICovCisJCWNudF9jb250ZXh0ID0gYm9hcmRfaW5mby0+Y250X2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoY250X2NvbnRleHQtPmluX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkNOVCBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlzcGluX3VubG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJY250X2NvbnRleHQtPmluX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gY250X2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KKwkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9jbnRfZm9wczsKKwl9CisJLyogRXh0ZXJuYWwgSW50ZXJydXB0ICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBFWFRfSU5UX0JPQVJEKGlub2RlX3AtPmlfcmRldik7CisJCWRldiA9IDA7CisJCW1vZGUgPSAwOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTpib2FyZCA9ICVkXG4iLCBib2FyZCk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCkgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJCWlmIChib2FyZF9pbmZvLT5ib2FyZF9jb3VudCA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBHZXQgdGhlIGV4dGVybmFsIGludGVycnVwdCBjb250ZXh0ICovCisJCWV4dF9pbnRfY29udGV4dCA9IGJvYXJkX2luZm8tPmV4dF9pbnRfY29udGV4dDsKKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmNudF9jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChleHRfaW50X2NvbnRleHQtPmluX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkV4dGVybmFsIGludGVycnVwdCBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlzcGluX3VubG9jaygmZXh0X2ludF9jb250ZXh0LT51c2VfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWV4dF9pbnRfY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmV4dF9pbnRfY29udGV4dC0+dXNlX2xvY2spOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gZXh0X2ludF9jb250ZXh0OworCisJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciB0byBzaW5nbGUgZnVuY3Rpb25zICovCisJCWZpbGVfcC0+Zl9vcCA9ICZtZTQwMDBfZXh0X2ludF9mb3BzOworCisJCS8qIFJlcXVlc3QgdGhlIGludGVycnVwdCBsaW5lICovCisJCWVyciA9CisJCSAgICByZXF1ZXN0X2lycShleHRfaW50X2NvbnRleHQtPmlycSwgbWU0MDAwX2V4dF9pbnRfaXNyLAorCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgTUU0MDAwX05BTUUsCisJCQkJZXh0X2ludF9jb250ZXh0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkNhbid0IGdldCBpbnRlcnJ1cHQgbGluZSIpOworCQkJZXh0X2ludF9jb250ZXh0LT5pbl91c2UgPSAwOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBSZXNldCB0aGUgY291bnRlciAqLworCQltZTQwMDBfZXh0X2ludF9kaXNhYmxlKGV4dF9pbnRfY29udGV4dCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6bWU0MDAwX29wZW4oKTpNYWpvciBudW1iZXIgdW5rbm93blxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCkKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisJbWU0MDAwX2Rpb19jb250ZXh0X3QgKmRpb19jb250ZXh0OworCW1lNDAwMF9jbnRfY29udGV4dF90ICpjbnRfY29udGV4dDsKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfcmVsZWFzZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIE1hcmsgREFDIGFzIHVudXNlZCAqLworCQlhb19jb250ZXh0LT5kYWNfaW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubykgeworCQlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogUmVzZXQgdGhlIGFuYWxvZyBpbnB1dCAqLworCQltZTQwMDBfYWlfcmVzZXQoYWlfY29udGV4dCk7CisKKwkJLyogRnJlZSB0aGUgaW50ZXJydXB0IGFuZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWlmIChhaV9jb250ZXh0LT5tb2RlKSB7CisJCQlmcmVlX2lycShhaV9jb250ZXh0LT5pcnEsIGFpX2NvbnRleHQpOworCQkJa2ZyZWUoYWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9IE5VTEw7CisJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCQl9CisKKwkJLyogTWFyayBBSSBhcyB1bnVzZWQgKi8KKwkJYWlfY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJZGlvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBNYXJrIGRpZ2l0YWwgSS9PIGFzIHVudXNlZCAqLworCQlkaW9fY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJY250X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBNYXJrIGNvdW50ZXJzIGFzIHVudXNlZCAqLworCQljbnRfY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vKSB7CisJCWV4dF9pbnRfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIERpc2FibGUgdGhlIGV4dGVybmVsIGludGVycnVwdCAqLworCQltZTQwMDBfZXh0X2ludF9kaXNhYmxlKGV4dF9pbnRfY29udGV4dCk7CisKKwkJZnJlZV9pcnEoZXh0X2ludF9jb250ZXh0LT5pcnEsIGV4dF9pbnRfY29udGV4dCk7CisKKwkJLyogRGVsZXRlIHRoZSBmYXN5bmMgc3RydWN0dXJlIGFuZCBmcmVlIG1lbW9yeSAqLworCQltZTQwMDBfZXh0X2ludF9mYXN5bmMoMCwgZmlsZV9wLCAwKTsKKworCQkvKiBNYXJrIGFzIHVudXNlZCAqLworCQlleHRfaW50X2NvbnRleHQtPmluX3VzZSA9IDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9yZWxlYXNlKCk6TWFqb3IgbnVtYmVyIHVua25vd25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFuYWxvZyBvdXRwdXQgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVwYXJlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3ByZXBhcmUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMpIHsKKwkJLyogT25seSBkbyBhbnl0aGluZyBpZiBub3QgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBtb2RlICovCisJCXVuc2lnbmVkIGxvbmcgbW9kZSA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlpZiAoKG1vZGUgJiBNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMpCisJCSAgICAmJiAobW9kZSAmIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTykpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU3RvcCBhbnkgY29udmVyc2lvbiAqLworCQltZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHRvIGRlZmF1bHQgc3RhdGUgICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisJfSBlbHNlIGlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCkgeworCQkvKiBPbmx5IGRvIGFueXRoaW5nIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IG1vZGUgKi8KKwkJdW5zaWduZWQgbG9uZyBtb2RlID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCWlmICgobW9kZSAmIE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCkKKwkJICAgICYmIChtb2RlICYgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBTdG9wIGFueSBjb252ZXJzaW9uICovCisJCW1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChhb19jb250ZXh0KTsKKworCQkvKiBTZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGVmYXVsdCBzdGF0ZSAgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLAorCQkJICAgIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCQkvKiBTZXQgdG8gZmFzdGVzdCBzYW1wbGUgcmF0ZSAqLworCQltZTQwMDBfb3V0bCg2NSwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKwl9IGVsc2UgaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9TSU5HTEUpIHsKKwkJLyogT25seSBkbyBhbnl0aGluZyBpZiBub3QgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBtb2RlICovCisJCXVuc2lnbmVkIGxvbmcgbW9kZSA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlpZiAoIQorCQkgICAgKG1vZGUgJgorCQkgICAgIChNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQgfAorCQkgICAgICBNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMpKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBTdG9wIGFueSBjb252ZXJzaW9uICovCisJCW1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChhb19jb250ZXh0KTsKKworCQkvKiBDbGVhciB0aGUgY29udHJvbCByZWdpc3RlciAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJbWU0MDAwX291dGwoMHgwLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3ByZXBhcmUoKTpJbnZhbGlkIG1vZGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3Jlc2V0KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcmVzZXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwlpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQpIHsKKwkJLyoKKwkJICogRmlyc3Qgc3RvcCBjb252ZXJzaW9uIG9mIHRoZSBEQUMgYmVmb3JlIHJlY29uZmlndXJlLgorCQkgKiBUaGlzIGlzIGVzc2FudGlhbCwgY2F1c2Ugb2YgdGhlIHN0YXRlIG1hY2hpbmUuCisJCSAqIElmIG5vdCBzdG9wcGVkIGJlZm9yZSBjb25maWd1cmluZyBtb2RlLCBpdCBjb3VsZAorCQkgKiB3YWxrIGluIGEgdW5kZWZpbmVkIHN0YXRlLgorCQkgKi8KKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJCXNsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJfQorCisJCS8qIFNldCB0byB0cmFuc3BhcmVudCBtb2RlICovCisJCW1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKworCQkvKiBTZXQgdG8gc2luZ2xlIG1vZGUgaW4gb3JkZXIgdG8gc2V0IGRlZmF1bHQgdm9sdGFnZSAqLworCQltZTQwMDBfb3V0bCgweDAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkvKiBTZXQgdm9sdGFnZSB0byAwViAqLworCQltZTQwMDBfb3V0bCgweDgwMDAsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCisJCS8qIFNldCB0byBmYXN0ZXN0IHNhbXBsZSByYXRlICovCisJCW1lNDAwMF9vdXRsKDY1LCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCisJCS8qIFNldCB0aGUgb3JpZ2luYWwgbW9kZSBhbmQgZW5hYmxlIEZJRk8gKi8KKwkJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsCisJCQkgICAgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCX0gZWxzZSBpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMpIHsKKwkJLyoKKwkJICogRmlyc3Qgc3RvcCBjb252ZXJzaW9uIG9mIHRoZSBEQUMgYmVmb3JlIHJlY29uZmlndXJlLgorCQkgKiBUaGlzIGlzIGVzc2FudGlhbCwgY2F1c2Ugb2YgdGhlIHN0YXRlIG1hY2hpbmUuCisJCSAqIElmIG5vdCBzdG9wcGVkIGJlZm9yZSBjb25maWd1cmluZyBtb2RlLCBpdCBjb3VsZAorCQkgKiB3YWxrIGluIGEgdW5kZWZpbmVkIHN0YXRlLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJCXNsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJfQorCisJCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJCS8qIFNldCB0byB0cmFuc3BhcmVudCBtb2RlICovCisJCW1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKworCQkvKiBTZXQgdG8gc2luZ2xlIG1vZGUgaW4gb3JkZXIgdG8gc2V0IGRlZmF1bHQgdm9sdGFnZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCW1lNDAwMF9vdXRsKDB4MCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisKKwkJLyogU2V0IHRoZSBvcmlnaW5hbCBtb2RlIGFuZCBlbmFibGUgRklGTyAqLworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJLyogU2V0IHRvIHRyYW5zcGFyZW50IG1vZGUgKi8KKwkJbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV9zaW5nKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmZiwKKwkJCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICogb2ZmcCkKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwl1MzIgdmFsdWU7CisJY29uc3QgdTE2ICpidWZmZXIgPSAoY29uc3QgdTE2ICopYnVmZjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfc2luZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChjbnQgIT0gMikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfc2luZygpOldyaXRlIGNvdW50IGlzIG5vdCAyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGdldF91c2VyKHZhbHVlLCBidWZmZXIpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9zaW5nKCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3dyYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWZmLAorCQkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKiBvZmZwKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdCBpOworCXUzMiB2YWx1ZTsKKwl1MzIgdG1wOworCWNvbnN0IHUxNiAqYnVmZmVyID0gKGNvbnN0IHUxNiAqKWJ1ZmY7CisJc2l6ZV90IGNvdW50ID0gY250IC8gMjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfd3JhcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIGEgY29udmVyc2lvbiBpcyBhbHJlYWR5IHJ1bm5pbmcgKi8KKwlpZiAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fd3JpdGVfd3JhcCgpOlRoZXJlIGlzIGFscmVhZHkgYSBjb252ZXJzaW9uIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChjb3VudCA+IE1FNDAwMF9BT19GSUZPX0NPVU5UKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV93cmFwKCk6Q2FuJ3QgbG9hZCBtb3JlIHRoYW4gJWQgdmFsdWVzXG4iLAorCQkgICAgICAgTUU0MDAwX0FPX0ZJRk9fQ09VTlQpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwkvKiBSZXNldCB0aGUgRklGTyAqLworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk87CisJb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPOworCW91dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoZ2V0X3VzZXIodmFsdWUsIGJ1ZmZlciArIGkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX3NpbmdsZSgpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmICgoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAxX0ZJRk9fUkVHKQorCQkgICAgfHwgKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wM19GSUZPX1JFRykpCisJCQl2YWx1ZSA9IHZhbHVlIDw8IDE2OworCQlvdXRsKHZhbHVlLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisJfQorCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfd3JhcCgpIGlzIGxlYXZlZCB3aXRoICVkXG4iLCBpICogMik7CisKKwlyZXR1cm4gaSAqIDI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV9jb250KHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmZiwKKwkJCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICogb2ZmcCkKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwljb25zdCB1MTYgKmJ1ZmZlciA9IChjb25zdCB1MTYgKilidWZmOworCXNpemVfdCBjb3VudCA9IGNudCAvIDI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCWludCBjID0gMDsKKwlpbnQgayA9IDA7CisJaW50IHJldCA9IDA7CisJdTE2IHN2YWx1ZTsKKwl1MzIgbHZhbHVlOworCWludCBpOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ2hlY2sgY291bnQgKi8KKwlpZiAoY291bnQgPD0gMCkgeworCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q291bnQgaXMgMFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fQVBQRU5EKSB7CisJCVBERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpBcHBlbmQgZGF0YSB0byBkYXRhIHN0cmVhbVxuIik7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fd3JpdGVfY29udCgpOkJyb2tlbiBwaXBlIGluIG5vbmJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJcmV0dXJuIC1FUElQRTsKKwkJCQl9CisJCQkJYyA9IG1lNDAwMF9zcGFjZV90b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkJTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisJCQkJaWYgKCFjKSB7CisJCQkJCVBERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOlJldHVybmluZyBmcm9tIG5vbmJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYW9fY29udGV4dC0+d2FpdF9xdWV1ZSwKKwkJCQkJCQkgKGMgPQorCQkJCQkJCSAgbWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCQkJCSAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJCSAgIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSk7CisJCQkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkJyb2tlbiBwaXBlIGluIGJsb2NraW5nIHdyaXRlXG4iKTsKKwkJCQkJcmV0dXJuIC1FUElQRTsKKwkJCQl9CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6V2FpdCBmb3IgZnJlZSBidWZmZXIgaW50ZXJydXB0ZWQgZnJvbSBzaWduYWxcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKworCQkJUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLCBjKTsKKworCQkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZnJlZSBidWZmZXIgb3Igc2l6ZSBvZiBjb3VudCAqLworCQkJaWYgKGNvdW50IDwgYykKKwkJCQljID0gY291bnQ7CisKKwkJCWsgPSAyICogYzsKKwkJCWsgLT0gY29weV9mcm9tX3VzZXIoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsIGJ1ZmZlciwKKwkJCQkJICAgIGspOworCQkJYyA9IGsgLyAyOworCQkJUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkNvcHkgJWQgdmFsdWVzIGZyb20gdXNlciBzcGFjZVxuIiwKKwkJCSAgICAgYyk7CisKKwkJCWlmICghYykKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0gMSk7CisJCQlidWZmZXIgKz0gYzsKKwkJCWNvdW50IC09IGM7CisJCQlyZXQgKz0gYzsKKworCQkJLyogVmFsdWVzIGFyZSBub3cgYXZhaWxhYmxlIHNvIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChtZTQwMDBfYnVmX2NvdW50CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkgeworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCX0KKworCQkvKiBXYWl0IHVudGlsIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgaWYgT19TWU5DIGlzIHNldCAqLworCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX1NZTkMpIHsKKwkJCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJICAgICAgIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJCQkJUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6QnJva2VuIHBpcGUgZGV0ZWN0ZWQgYWZ0ZXIgc3luY1xuIik7CisJCQkJCXJldHVybiAtRVBJUEU7CisJCQkJfQorCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzeW5jIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6UHJlbG9hZCBEQUMgRklGT1xuIik7CisJCWlmICgobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCSAgICAgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q2FuJ3QgUHJlbG9hZCBEQUMgRklGTyB3aGlsZSBjb252ZXJzaW9uIGlzIHJ1bm5pbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCS8qIENsZWFyIHRoZSBGSUZPICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJRKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk87CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJCS8qIFJlc2V0IHRoZSBicm9rZW4gcGlwZSBmbGFnICovCisJCWFvX2NvbnRleHQtPnBpcGVfZmxhZyA9IDA7CisKKwkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZmlmbyBvciBjb3VudCAqLworCQljID0gTUU0MDAwX0FPX0ZJRk9fQ09VTlQ7CisJCWlmIChjb3VudCA8IGMpCisJCQljID0gY291bnQ7CisKKwkJUERFQlVHCisJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6V3JpdGUgJWQgdmFsdWVzIHRvIERBQyBvbiAweCVsWFxuIiwKKwkJICAgICBjLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisKKwkJLyogV3JpdGUgdmFsdWVzIHRvIHRoZSBmaWZvICovCisJCWZvciAoaSA9IDA7IGkgPCBjOyBpKyspIHsKKwkJCWlmIChnZXRfdXNlcihzdmFsdWUsIGJ1ZmZlcikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmICgoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0KKwkJCSAgICAgTUU0MDAwX0FPXzAxX0ZJRk9fUkVHKQorCQkJICAgIHx8ICgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PQorCQkJCU1FNDAwMF9BT18wM19GSUZPX1JFRykpIHsKKwkJCQlsdmFsdWUgPSAoKHUzMikgc3ZhbHVlKSA8PCAxNjsKKwkJCX0gZWxzZQorCQkJCWx2YWx1ZSA9ICh1MzIpIHN2YWx1ZTsKKworCQkJb3V0bChsdmFsdWUsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwkJCWJ1ZmZlcisrOworCQl9CisJCWNvdW50IC09IGM7CisJCXJldCArPSBjOworCisJCXdoaWxlICgxKSB7CisJCQkvKiBHZXQgZnJlZSBidWZmZXIgKi8KKwkJCWMgPSBtZTQwMDBfc3BhY2VfdG9fZW5kKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisKKwkJCWlmIChjID09IDApCisJCQkJcmV0dXJuICgyICogcmV0KTsKKworCQkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZnJlZSBidWZmZXIgb3Igc2l6ZSBvZiBjb3VudCAqLworCQkJaWYgKGNvdW50IDwgYykKKwkJCQljID0gY291bnQ7CisKKwkJCS8qIElmIGNvdW50ID0gMCByZXR1cm4gdG8gdXNlciAqLworCQkJaWYgKGMgPD0gMCkgeworCQkJCVBERUJVRworCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q291bnQgcmVhY2hlZCAwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJayA9IDIgKiBjOworCQkJayAtPSBjb3B5X2Zyb21fdXNlcihhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgICAgYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYnVmZmVyLAorCQkJCQkgICAgayk7CisJCQljID0gayAvIDI7CisJCQlQREVCVUcKKwkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6V3JvdGUgJWQgdmFsdWVzIHRvIGJ1ZmZlclxuIiwKKwkJCSAgICAgYyk7CisKKwkJCWlmICghYykKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0gMSk7CisJCQlidWZmZXIgKz0gYzsKKwkJCWNvdW50IC09IGM7CisJCQlyZXQgKz0gYzsKKworCQkJLyogSWYgdmFsdWVzIGluIHRoZSBidWZmZXIgYXJlIGF2YWlsYWJsZSBzbyBlbmFibGUgaW50ZXJydXB0cyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCQlpZiAobWU0MDAwX2J1Zl9jb3VudAorCQkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQlQREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkVuYWJsZSBJbnRlcnJ1cHRzXG4iKTsKKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CisJCQkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl9CisJfQorCisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXR1cm4gKHJldCA9PSAwKSA/IC1FQUdBSU4gOiAyICogcmV0OworCX0KKworCXJldHVybiAyICogcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9hb19wb2xsX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVfcCwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wb2xsX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZV9wLCAmYW9fY29udGV4dC0+d2FpdF9xdWV1ZSwgd2FpdCk7CisKKwkvKiBHZXQgZnJlZSBidWZmZXIgKi8KKwlpZiAobWU0MDAwX3NwYWNlX3RvX2VuZChhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3BvbGxfY29udCgpOlJldHVybiBtYXNrICVsWFxuIiwgbWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZnN5bmNfY29udChzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfcCwKKwkJCQlpbnQgZGF0YXN5bmMpCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZnN5bmNfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX2ZzeW5jX2NvbnQoKTpCcm9rZW4gcGlwZSBkZXRlY3RlZFxuIik7CisJCQlyZXR1cm4gLUVQSVBFOworCQl9CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX2ZzeW5jX2NvbnQoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfc2luZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXJldHVybiAtRU5PVFRZOworCQlQREVCVUcoIm1lNDAwMF9hb19pb2N0bF9zaW5nKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19QUkVMT0FEOgorCQlyZXR1cm4gbWU0MDAwX2FvX3ByZWxvYWQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUFJFTE9BRF9VUERBVEU6CisJCXJldHVybiBtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYW9fY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX0VYX1RSSUc6CisJCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2V4X3RyaWcoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1NXOgorCQlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfVVBEQVRFOgorCQlyZXR1cm4KKwkJICAgIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKChtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QgKikKKwkJCQkJCSAgYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX1RJTUVPVVQ6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkJIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0RJU0FCTEVfRE86CisJCXJldHVybiBtZTQwMDBfYW9fZGlzYWJsZV9kbyhhb19jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9faW9jdGxfc2luZygpOlNlcnZpY2UgbnVtYmVyIGludmFsaWRcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfd3JhcChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2lvY3RsX3dyYXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlyZXR1cm4gLUVOT1RUWTsKKwkJUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfd3JhcCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQU9fU1RBUlQ6CisJCXJldHVybiBtZTQwMDBfYW9fc3RhcnQoKHVuc2lnbmVkIGxvbmcgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9fc3RvcChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19SRVNFVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19yZXNldChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19USU1FUl9TRVRfRElWSVNPUjoKKwkJcmV0dXJuIG1lNDAwMF9hb190aW1lcl9zZXRfZGl2aXNvcigodTMyICopIGFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYW9fY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQU9fRlNNX1NUQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2ZzbV9zdGF0ZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FTkFCTEVfRE86CisJCXJldHVybiBtZTQwMDBfYW9fZW5hYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0RJU0FCTEVfRE86CisJCXJldHVybiBtZTQwMDBfYW9fZGlzYWJsZV9kbyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19FWF9UUklHOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfU1c6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfc3coYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfY29udChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2lvY3RsX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlyZXR1cm4gLUVOT1RUWTsKKwkJUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfY29udCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQU9fU1RBUlQ6CisJCXJldHVybiBtZTQwMDBfYW9fc3RhcnQoKHVuc2lnbmVkIGxvbmcgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9fc3RvcChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19SRVNFVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19yZXNldChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19USU1FUl9TRVRfRElWSVNPUjoKKwkJcmV0dXJuIG1lNDAwMF9hb190aW1lcl9zZXRfZGl2aXNvcigodTMyICopIGFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRU5BQkxFX0RPOgorCQlyZXR1cm4gbWU0MDAwX2FvX2VuYWJsZV9kbyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19ESVNBQkxFX0RPOgorCQlyZXR1cm4gbWU0MDAwX2FvX2Rpc2FibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRlNNX1NUQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2ZzbV9zdGF0ZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19FWF9UUklHOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfU1c6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfc3coYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0dFVF9GUkVFX0JVRkZFUjoKKwkJcmV0dXJuIG1lNDAwMF9hb19nZXRfZnJlZV9idWZmZXIoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgYW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zdGFydCh1bnNpZ25lZCBsb25nICphcmcsIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyByZWY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3N0YXJ0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKHRpbWVvdXQsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3N0YXJ0KCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJaWYgKCh0bXAgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcpKSB7CisJCWlmICh0aW1lb3V0KSB7CisJCQlyZWYgPSBqaWZmaWVzOworCQkJd2hpbGUgKCEKKwkJCSAgICAgICAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCQlNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc3RhcnQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc3RhcnQoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQltZTQwMDBfb3V0bCgweDgwMDAsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zdG9wKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFNldCB0aGUgc3RvcCBiaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIHN0b3AgYml0ICovCisJLy90bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOworCS8vbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIHN0b3AgYml0cyAqLworCS8vdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCS8vbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IodTMyICogYXJnLAorCQkJCSAgICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgZGl2aXNvcjsKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcihkaXZpc29yLCBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKCk6Q2FuJ3Qgc2V0IHRpbWVyIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpOkRpdmlzb3IgZnJvbSB1c2VyID0gJWRcbiIsCisJICAgICAgIGRpdmlzb3IpOworCisJLyogQ2hlY2sgaWYgdGhlIGRpdmlzb3IgaXMgcmlnaHQuIE1FNDAwMF9BT19NSU5fVElDS1MgaXMgdGhlIGxvd2VzdCAqLworCWlmIChkaXZpc29yIDwgTUU0MDAwX0FPX01JTl9USUNLUykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3RpbWVyIHNldF9kaXZpc29yKCk6RGl2aXNvciB0byBsb3dcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaXggYnVnIGluIEZpcm13YXJlICovCisJZGl2aXNvciAtPSAyOworCisJUERFQlVHKCJtZTQwMDBfYW9fdGltZXIgc2V0X2Rpdmlzb3IoKTpEaXZpc29yIHRvIEhXID0gJWRcbiIsIGRpdmlzb3IpOworCisJLyogV3JpdGUgdGhlIGRpdmlzb3IgKi8KKwltZTQwMDBfb3V0bChkaXZpc29yLCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoaW50ICphcmcsCisJCQkJICAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJaW50IG1vZGU7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKG1vZGUsIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgpOkNhbid0IHNldCB0cmlnZ2VyIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobW9kZSA9PSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9SSVNJTkcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfRURHRSB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0JPVEgpOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfRkFMTElORykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfQk9USDsKKwkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0U7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAobW9kZSA9PSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9CT1RIKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9CisJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19FREdFIHwKKwkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0JPVEg7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKCk6SW52YWxpZCB0cmlnZ2VyIG1vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX2VuYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKCk6Q2FuJ3QgZW5hYmxlIHRyaWdnZXIgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUc7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoKTpDYW4ndCBkaXNhYmxlIHRyaWdnZXIgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJLyogQmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbQorCSAgIG1lNDAwMF9hb19zeW5jaHJvbm91cyBkaXNhYmxlICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZSgpOkNhbid0IGRpc2FibGUgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBEaXNhYmxlIHByZWxvYWQgYml0CisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRW5hYmxlIHByZWxvYWQgYml0CisJdG1wIHw9ICgweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRW5hYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3cobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRW5hYmxlIHByZWxvYWQgYml0CisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWQobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wcmVsb2FkKCkgaXMgZXhlY3V0ZWRcbiIpOworCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KGFvX2NvbnRleHQpOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVsb2FkX3VwZGF0ZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXUzMiBjdHJsOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wcmVsb2FkX3VwZGF0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KSB7CisJCS8qIFRoZSBjaGFubmVscyB3ZSB1cGRhdGUgbXVzdCBiZSBpbiB0aGUgZm9sbG93aW5nIHN0YXRlIDoKKwkJICAgLSBNb2RlIEEKKwkJICAgLSBIYXJkd2FyZSB0cmlnZ2VyIGlzIGRpc2FibGVkCisJCSAgIC0gQ29ycmVzcG9uZGluZyBzaW11bHRhbmVvdXMgYml0IGlzIHJlc2V0CisJCSAqLworCQljdHJsID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCWlmICghCisJCSAgICAoY3RybCAmCisJCSAgICAgKE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzAgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8xIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHKSkpIHsKKwkJCWlmICghCisJCQkgICAgKHRtcCAmCisJCQkgICAgICgweDEgPDwKKwkJCSAgICAgICgoKG1lNDAwMF9hb19jb250ZXh0X3QgKikgZW50cnkpLT5pbmRleCArIDE2KSkpKSB7CisJCQkJdG1wICY9CisJCQkJICAgIH4oMHgxIDw8CisJCQkJICAgICAgKCgobWU0MDAwX2FvX2NvbnRleHRfdCAqKSBlbnRyeSktPmluZGV4KSk7CisJCQl9CisJCX0KKwl9CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZShtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QgKiBhcmcsCisJCQkJCSBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwlpbnQgZXJyOworCWludCBpOworCXUzMiB0bXA7CisJbWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90IGNoYW5uZWxzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjaGFubmVscywgYXJnLCBzaXplb2YobWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpDYW4ndCBjb3B5IGNvbW1hbmRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwljaGFubmVscy5saXN0ID0KKwkgICAga21hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBjaGFubmVscy5jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFubmVscy5saXN0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpOkNhbid0IGdldCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGNoYW5uZWxzLmxpc3QsIDAsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGNoYW5uZWxzLmNvdW50KTsKKworCS8qIENvcHkgY2hhbm5lbCBsaXN0IGZyb20gdXNlciAqLworCWVyciA9CisJICAgIGNvcHlfZnJvbV91c2VyKGNoYW5uZWxzLmxpc3QsIGFyZy0+bGlzdCwKKwkJCSAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGNoYW5uZWxzLmNvdW50KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpOkNhbid0IGNvcHkgbGlzdFxuIik7CisJCWtmcmVlKGNoYW5uZWxzLmxpc3QpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzLmNvdW50OyBpKyspIHsKKwkJaWYgKGNoYW5uZWxzLmxpc3RbaV0gPgorCQkgICAgYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uY291bnQpIHsKKwkJCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCQkJa2ZyZWUoY2hhbm5lbHMubGlzdCk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6SW52YWxpZCBib2FyZCBudW1iZXIgc3BlY2lmaWVkXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXRtcCAmPSB+KDB4MSA8PCBjaGFubmVscy5saXN0W2ldKTsJLy8gQ2xlYXIgdGhlIHByZWxvYWQgYml0CisJCXRtcCAmPSB+KDB4MSA8PCAoY2hhbm5lbHMubGlzdFtpXSArIDE2KSk7CS8vIENsZWFyIHRoZSBodyBzaW11bHRhbmVvdXMgYml0CisJfQorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCWtmcmVlKGNoYW5uZWxzLmxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgc3cgYml0CisJdG1wIHw9IDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNik7CS8vIEVuYWJsZSBzeW5jaHJvbm91cyBodyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCS8qIE1ha2UgcnVubmFibGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlpZiAodG1wICYgKE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzAgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8xKSkgeworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19zeW5jaHJvbm91c19zdygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCB8PSAweDEgPDwgYW9fY29udGV4dC0+aW5kZXg7CS8vIEVuYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQKKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBzeW5jaHJvbm91cyBodyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCS8qIE1ha2UgcnVubmFibGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlpZiAodG1wICYgKE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzAgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8xKSkgeworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2dldF9mcmVlX2J1ZmZlcih1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGM7CisJaW50IGVycjsKKworCWMgPSBtZTQwMDBfYnVmX3NwYWNlKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKKworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19nZXRfZnJlZV9idWZmZXIoKTpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyByZWY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIodGltZW91dCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJaWYgKCh0bXAgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcpKSB7CisJCWlmICh0aW1lb3V0KSB7CisJCQlyZWYgPSBqaWZmaWVzOworCQkJd2hpbGUgKChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJCU1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJd2hpbGUgKChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJCU1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6RXh0ZXJuYWwgVHJpZ2dlciBpcyBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19lbmFibGVfZG8obWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19lbmFibGVfZG8oKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBPbmx5IGF2YWlsYWJsZSBmb3IgYW5hbG9nIG91dHB1dCAzICovCisJaWYgKGFvX2NvbnRleHQtPmluZGV4ICE9IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2VuYWJsZV9kbygpOk9ubHkgYXZhaWxhYmxlIGZvciBhbmFsb2cgb3V0cHV0IDNcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FvX2VuYWJsZV9kbygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogU2V0IHRoZSBzdG9wIGJpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRE87CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19kaXNhYmxlX2RvKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZGlzYWJsZV9kbygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIE9ubHkgYXZhaWxhYmxlIGZvciBhbmFsb2cgb3V0cHV0IDMgKi8KKwlpZiAoYW9fY29udGV4dC0+aW5kZXggIT0gMykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZGlzYWJsZSgpOk9ubHkgYXZhaWxhYmxlIGZvciBhbmFsb2cgb3V0cHV0IDNcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FvX2Rpc2FibGVfZG8oKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9ETyk7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19mc21fc3RhdGUoaW50ICphcmcsIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19mc21fc3RhdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPQorCSAgICAobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgPyAxCisJICAgIDogMDsKKworCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZnNtX3N0YXRlKCk6QnJva2VuIHBpcGUgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gLUVQSVBFOworCX0KKworCWlmIChwdXRfdXNlcih0bXAsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZnNtX3N0YXRlKCk6Q2Fubm90IGNvcHkgdG8gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQW5hbG9nIGlucHV0IHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfYWlfcHJlcGFyZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9wcmVwYXJlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogU2V0IHRoZSBuZXcgbW9kZSBhbmQgc3RvcCBiaXRzICovCisJbWU0MDAwX291dGwoYWlfY29udGV4dC0+CisJCSAgICBtb2RlIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AgfAorCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBTZXQgdGhlIHRpbWVyIHJlZ2lzdGVycyAqLworCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gMDsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSAwOworCisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKworCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9jb3VudCA9IDA7CisKKwlpZiAoYWlfY29udGV4dC0+bW9kZSkgeworCQkvKiBSZXF1ZXN0IHRoZSBpbnRlcnJ1cHQgbGluZSAqLworCQllcnIgPQorCQkgICAgcmVxdWVzdF9pcnEoYWlfY29udGV4dC0+aXJxLCBtZTQwMDBfYWlfaXNyLAorCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgTUU0MDAwX05BTUUsCisJCQkJYWlfY29udGV4dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3ByZXBhcmUoKTpDYW4ndCBnZXQgaW50ZXJydXB0IGxpbmUiKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9CisJCSAgICBrbWFsbG9jKE1FNDAwMF9BSV9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWlfY29udGV4dC0+Y2lyY19idWYuYnVmKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9wcmVwYXJlKCk6Q2FuJ3QgZ2V0IGNpcmN1bGFyIGJ1ZmZlclxuIik7CisJCQlmcmVlX2lycShhaV9jb250ZXh0LT5pcnEsIGFpX2NvbnRleHQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiwgMCwgTUU0MDAwX0FJX0JVRkZFUl9TSVpFKTsKKworCQkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfcmVzZXQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qCisJICogRmlyc3Qgc3RvcCBjb252ZXJzaW9uIG9mIHRoZSBzdGF0ZSBtYWNoaW5lIGJlZm9yZSByZWNvbmZpZ3VyZS4KKwkgKiBJZiBub3Qgc3RvcHBlZCBiZWZvcmUgY29uZmlndXJpbmcgbW9kZSwgaXQgY291bGQKKwkgKiB3YWxrIGluIGEgdW5kZWZpbmVkIHN0YXRlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXdoaWxlIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9haV9yZXNldCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwkvKiBDbGVhciB0aGUgY29udHJvbCByZWdpc3RlciBhbmQgc2V0IHRoZSBzdG9wIGJpdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwltZTQwMDBfb3V0bChNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJLyogUmVzZXQgdGltZXIgcmVnaXN0ZXJzICovCisJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSAwOworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaCA9IDA7CisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPSAwOworCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCA9IDA7CisKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlZyk7CisKKwlhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfY291bnQgPSAwOworCisJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX3Npbmcoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJCXVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9pb2N0bF9zaW5nKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYWlfaW9jdGxfc2luZygpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfc2luZygpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BSV9TSU5HTEU6CisJCXJldHVybiBtZTQwMDBfYWlfc2luZ2xlKChtZTQwMDBfYWlfc2luZ2xlX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX2VuYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgobWU0MDAwX2FpX3RyaWdnZXJfdCAqKSBhcmcsCisJCQkJCSAgICAgICBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BSV9PRkZTRVRfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX29mZnNldF9lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfT0ZGU0VUX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfb2Zmc2V0X2Rpc2FibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlVMTFNDQUxFX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0ZVTExTQ0FMRV9ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2Z1bGxzY2FsZV9kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9SRUFEOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV9yZWFkKChtZTQwMDBfZWVwcm9tX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FRVBST01fV1JJVEU6CisJCXJldHVybiBtZTQwMDBfZWVwcm9tX3dyaXRlKChtZTQwMDBfZWVwcm9tX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfc2luZygpOkludmFsaWQgc2VydmljZSBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3NpbmdsZShtZTQwMDBfYWlfc2luZ2xlX3QgKiBhcmcsCisJCQkgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJbWU0MDAwX2FpX3NpbmdsZV90IGNtZDsKKwlpbnQgZXJyOworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyBqaWZmeTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc2luZ2xlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9haV9zaW5nbGVfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHJhbmdlIHBhcmFtZXRlciAqLworCXN3aXRjaCAoY21kLnJhbmdlKSB7CisJY2FzZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzEwOgorCWNhc2UgTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8yXzU6CisJY2FzZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8xMDoKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzJfNToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpJbnZhbGlkIHJhbmdlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIG1vZGUgYW5kIGNoYW5uZWwgbnVtYmVyICovCisJc3dpdGNoIChjbWQubW9kZSkgeworCWNhc2UgTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVEOgorCQlpZiAoY21kLmNoYW5uZWwgPj0gYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkFuYWxvZyBpbnB1dCBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMOgorCQlpZiAoY21kLmNoYW5uZWwgPj0KKwkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmRpZmZfY291bnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkFuYWxvZyBpbnB1dCBpcyBub3QgYXZhaWxhYmxlIGluIGRpZmZlcmVudGlhbCBtb2RlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6SW52YWxpZCBtb2RlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENsZWFyIGNoYW5uZWwgbGlzdCwgZGF0YSBmaWZvIGFuZCBib3RoIHN0b3AgYml0cyAqLworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPIHwKKwkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBFbmFibGUgY2hhbm5lbCBsaXN0IGFuZCBkYXRhIGZpZm8gKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk87CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBHZW5lcmF0ZSBjaGFubmVsIGxpc3QgZW50cnkgKi8KKwltZTQwMDBfb3V0bChjbWQuY2hhbm5lbCB8IGNtZC5yYW5nZSB8IGNtZC4KKwkJICAgIG1vZGUgfCBNRTQwMDBfQUlfTElTVF9MQVNUX0VOVFJZLAorCQkgICAgYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X3JlZyk7CisKKwkvKiBTZXQgdGhlIHRpbWVyIHRvIG1heGltdW0gKi8KKwltZTQwMDBfb3V0bCg2NiwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDY2LCBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCisJaWYgKHRtcCAmIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHKSB7CisJCWppZmZ5ID0gamlmZmllczsKKwkJd2hpbGUgKCEKKwkJICAgICAgIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCU1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCQlpZiAoKChqaWZmaWVzIC0gamlmZnkpID4gKGNtZC50aW1lb3V0ICogSFogLyBVU0VSX0haKSkgJiYgY21kLnRpbWVvdXQpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBTdGFydCBjb252ZXJzaW9uICovCisJCW1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhcnRfcmVnKTsKKworCQkvKiBXYWl0IHVudGlsIHJlYWR5ICovCisJCXVkZWxheSgxMCk7CisJCWlmICghCisJCSAgICAobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCSAgICAgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOlZhbHVlIG5vdCBhdmFpbGFibGUgYWZ0ZXIgd2FpdFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCS8qIFJlYWQgdmFsdWUgZnJvbSBkYXRhIGZpZm8gKi8KKwljbWQudmFsdWUgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmRhdGFfcmVnKSAmIDB4RkZGRjsKKworCS8qIENvcHkgcmVzdWx0IGJhY2sgdG8gdXNlciAqLworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjbWQsIHNpemVvZihtZTQwMDBfYWlfc2luZ2xlX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX3N3KHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9pb2N0bF9zdygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2lvY3RsX3N3KCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9zdygpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BSV9TQ19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zY19zZXR1cCgobWU0MDAwX2FpX3NjX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9DT05GSUc6CisJCXJldHVybiBtZTQwMDBfYWlfY29uZmlnKChtZTQwMDBfYWlfY29uZmlnX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9TVEFSVDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zdGFydChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FpX3N0b3AoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfaW1tZWRpYXRlX3N0b3AoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlNNX1NUQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2ZzbV9zdGF0ZSgoaW50ICopYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BSV9FRVBST01fUkVBRDoKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fcmVhZCgobWU0MDAwX2VlcHJvbV90ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRUVQUk9NX1dSSVRFOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV93cml0ZSgobWU0MDAwX2VlcHJvbV90ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfR0VUX0NPVU5UX0JVRkZFUjoKKwkJcmV0dXJuIG1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkJICBhaV9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2lvY3RsX3N3KCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX2V4dChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2lvY3RsX2V4dCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2lvY3RsX2V4dCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfZXh0KCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FJX1NDX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX3NjX3NldHVwKChtZTQwMDBfYWlfc2NfdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0NPTkZJRzoKKwkJcmV0dXJuIG1lNDAwMF9haV9jb25maWcoKG1lNDAwMF9haV9jb25maWdfdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FpX3N0YXJ0X2V4KCh1bnNpZ25lZCBsb25nICopYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FpX3N0b3AoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfaW1tZWRpYXRlX3N0b3AoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKG1lNDAwMF9haV90cmlnZ2VyX3QgKikgYXJnLAorCQkJCQkgICAgICAgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlNNX1NUQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2ZzbV9zdGF0ZSgoaW50ICopYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BSV9HRVRfQ09VTlRfQlVGRkVSOgorCQlyZXR1cm4gbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgIGFpX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfaW9jdGxfZXh0KCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3AsIGludCBtb2RlKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2Zhc3luY19jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlX3AsIG1vZGUsICZhaV9jb250ZXh0LT5mYXN5bmNfcCk7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2NvbmZpZyhtZTQwMDBfYWlfY29uZmlnX3QgKiBhcmcsCisJCQkgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJbWU0MDAwX2FpX2NvbmZpZ190IGNtZDsKKwl1MzIgKmxpc3QgPSBOVUxMOworCXUzMiBtb2RlOworCWludCBpOworCWludCBlcnI7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdTY0IHNjYW47CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfY29uZmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBzdG9wcGVkICovCisJaWYgKGlubChhaV9jb250ZXh0LT5jdHJsX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDb252ZXJzaW9uIGlzIG5vdCBzdG9wcGVkXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9haV9jb25maWdfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisKKwlQREVCVUcKKwkgICAgKCJtZTQwMDBfYWlfY29uZmlnKCk6Y2hhbiA9ICVsZCwgcHJlX2NoYW4gPSAlbGQsIHNjYW5fbG93ID0gJWxkLCBzY2FuX2hpZ2ggPSAlbGQsIGNvdW50ID0gJWxkXG4iLAorCSAgICAgY21kLnRpbWVyLmNoYW4sIGNtZC50aW1lci5wcmVfY2hhbiwgY21kLnRpbWVyLnNjYW5fbG93LAorCSAgICAgY21kLnRpbWVyLnNjYW5faGlnaCwgY21kLmNoYW5uZWxfbGlzdC5jb3VudCk7CisKKwkvKiBDaGVjayB3aGV0aGVyIHNhbXBsZSBhbmQgaG9sZCBpcyBhdmFpbGFibGUgZm9yIHRoaXMgYm9hcmQgKi8KKwlpZiAoY21kLnNoKSB7CisJCWlmICghYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuc2hfY291bnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOlNhbXBsZSBhbmQgSG9sZCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGJvYXJkXG4iKTsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGUgY2hhbm5lbCBsaXN0IHNpemUgKi8KKwlpZiAoY21kLmNoYW5uZWxfbGlzdC5jb3VudCA+IE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfQ09VTlQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgbGlzdCBpcyB0byBsYXJnZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisKKwkvKiBDb3B5IGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgKi8KKwlsaXN0ID0ga21hbGxvYyhzaXplb2YodTMyKSAqIGNtZC5jaGFubmVsX2xpc3QuY291bnQsIEdGUF9LRVJORUwpOworCWlmICghbGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNhbid0IGdldCBtZW1vcnkgZm9yIGNoYW5uZWwgbGlzdFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisJZXJyID0KKwkgICAgY29weV9mcm9tX3VzZXIobGlzdCwgY21kLmNoYW5uZWxfbGlzdC5saXN0LAorCQkJICAgc2l6ZW9mKHUzMikgKiBjbWQuY2hhbm5lbF9saXN0LmNvdW50KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCisJLyogQ2hlY2sgaWYgbGFzdCBlbnRyeSBiaXQgaXMgc2V0ICovCisJaWYgKCEobGlzdFtjbWQuY2hhbm5lbF9saXN0LmNvdW50IC0gMV0gJiBNRTQwMDBfQUlfTElTVF9MQVNUX0VOVFJZKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAibWU0MDAwX2FpX2NvbmZpZygpOkxhc3QgZW50cnkgYml0IGlzIG5vdCBzZXRcbiIpOworCQlsaXN0W2NtZC5jaGFubmVsX2xpc3QuY291bnQgLSAxXSB8PSBNRTQwMDBfQUlfTElTVF9MQVNUX0VOVFJZOworCX0KKworCS8qIENoZWNrIHdoZXRoZXIgbW9kZSBpcyBlcXVhbCBmb3IgYWxsIGVudHJpZXMgKi8KKwltb2RlID0gbGlzdFswXSAmIDB4MjA7CisJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQlpZiAoKGxpc3RbaV0gJiAweDIwKSAhPSBtb2RlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpNb2RlIGlzIG5vdCBlcXVhbCBmb3IgYWxsIGVudHJpZXNcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCX0KKworCS8qIENoZWNrIHdoZXRoZXIgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBtb2RlICovCisJaWYgKG1vZGUgPT0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVEKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJCWlmICgobGlzdFtpXSAmIDB4MUYpID49CisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCBpcyBub3QgYXZhaWxhYmxlIGZvciBzaW5nbGUgZW5kZWRcbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBBSV9DT05GSUdfRVJSOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChtb2RlID09IE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCQlpZiAoKGxpc3RbaV0gJiAweDFGKSA+PQorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmRpZmZfY291bnQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCBpcyBub3QgYXZhaWxhYmxlIGZvciBkaWZmZXJlbnRpYWxcbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBBSV9DT05GSUdfRVJSOworCQkJfQorCQl9CisJfQorCisJLyogQ2hlY2sgaWYgYmlwb2xhciBpcyBzZXQgZm9yIGFsbCBlbnRyaWVzIHdoZW4gaW4gZGlmZmVyZW50aWFsIG1vZGUgKi8KKwlpZiAobW9kZSA9PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9ESUZGRVJFTlRJQUwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQkJaWYgKChsaXN0W2ldICYgMHhDMCkgIT0gTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8xMAorCQkJICAgICYmIChsaXN0W2ldICYgMHhDMCkgIT0KKwkJCSAgICBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzJfNSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpCaXBvbGFyIGlzIG5vdCBzZWxlY3RlZCBpbiBkaWZmZXJlbnRpYWwgbW9kZVxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYWlfY29udGV4dC0+bW9kZSAhPSBNRTQwMDBfQUlfQUNRX01PREVfRVhUX1NJTkdMRV9WQUxVRSkgeworCQkvKiBDaGVjayBmb3IgbWluaW11bSBjaGFubmVsIGRpdmlzb3IgKi8KKwkJaWYgKGNtZC50aW1lci5jaGFuIDwgTUU0MDAwX0FJX01JTl9USUNLUykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCB0aW1lciBkaXZpc29yIGlzIHRvIGxvd1xuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisKKwkJLyogQ2hlY2sgaWYgbWluaW11bSBjaGFubmVsIGRpdmlzb3IgaXMgYWRqdXN0ZWQgd2hlbiBzYW1wbGUgYW5kIGhvbGQgaXMgYWN0aXZhdGVkICovCisJCWlmICgoY21kLnNoKSAmJiAoY21kLnRpbWVyLmNoYW4gIT0gTUU0MDAwX0FJX01JTl9USUNLUykpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgdGltZXIgZGl2aXNvciBtdXN0IGJlIGF0IG1pbmltdW0gd2hlbiBzYW1wbGUgYW5kIGhvbGQgaXMgYWN0aXZhdGVkXG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKworCQkvKiBDaGVjayBmb3IgbWluaW11bSBjaGFubmVsIHByZSBkaXZpc29yICovCisJCWlmIChjbWQudGltZXIucHJlX2NoYW4gPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIHByZSB0aW1lciBkaXZpc29yIGlzIHRvIGxvd1xuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisKKwkJLyogV3JpdGUgdGhlIGNoYW5uZWwgdGltZXJzICovCisJCW1lNDAwMF9vdXRsKGNtZC50aW1lci5jaGFuIC0gMSwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCQltZTQwMDBfb3V0bChjbWQudGltZXIucHJlX2NoYW4gLSAxLAorCQkJICAgIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisKKwkJLyogU2F2ZSB0aGUgdGltZXIgdmFsdWVzIGluIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSBjbWQudGltZXIuY2hhbjsKKwkJYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXIgPSBjbWQudGltZXIucHJlX2NoYW47CisKKwkJaWYgKGFpX2NvbnRleHQtPm1vZGUgIT0gTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfQ0hBTkxJU1QpIHsKKwkJCS8qIENoZWNrIGZvciBzY2FuIHRpbWVyIGRpdmlzb3IgKi8KKwkJCXNjYW4gPQorCQkJICAgICh1NjQpIGNtZC50aW1lci5zY2FuX2xvdyB8ICgodTY0KSBjbWQudGltZXIuCisJCQkJCQkJc2Nhbl9oaWdoIDw8IDMyKTsKKwkJCWlmIChzY2FuICE9IDApIHsKKwkJCQlpZiAoc2NhbiA8CisJCQkJICAgIGNtZC5jaGFubmVsX2xpc3QuY291bnQgKiBjbWQudGltZXIuY2hhbiArCisJCQkJICAgIDEpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpTY2FuIHRpbWVyIGRpdmlzb3IgaXMgdG8gbG93XG4iKTsKKwkJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQkJZ290byBBSV9DT05GSUdfRVJSOworCQkJCX0KKwkJCX0KKworCQkJLyogV3JpdGUgdGhlIHNjYW4gdGltZXJzICovCisJCQlpZiAoc2NhbiAhPSAwKSB7CisJCQkJc2Nhbi0tOworCQkJCXRtcCA9ICh1MzIpIChzY2FuICYgMHhGRkZGRkZGRik7CisJCQkJbWU0MDAwX291dGwodG1wLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnKTsKKwkJCQl0bXAgPSAodTMyKSAoKHNjYW4gPj4gMzIpICYgMHhGRkZGRkZGRik7CisJCQkJbWU0MDAwX291dGwodG1wLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisKKwkJCQlzY2FuID0KKwkJCQkgICAgc2NhbiAtIChjbWQudGltZXIuY2hhbiAtIDEpICsKKwkJCQkgICAgKGNtZC50aW1lci5wcmVfY2hhbiAtIDEpOworCQkJCXRtcCA9ICh1MzIpIChzY2FuICYgMHhGRkZGRkZGRik7CisJCQkJbWU0MDAwX291dGwodG1wLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyk7CisJCQkJdG1wID0gKHUzMikgKChzY2FuID4+IDMyKSAmIDB4RkZGRkZGRkYpOworCQkJCW1lNDAwMF9vdXRsKHRtcCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPgorCQkJCQkgICAgc2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCQkJfSBlbHNlIHsKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCQkJCW1lNDAwMF9vdXRsKDB4MCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCisJCQkJbWU0MDAwX291dGwoMHgwLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyk7CisJCQkJbWU0MDAwX291dGwoMHgwLAorCQkJCQkgICAgYWlfY29udGV4dC0+CisJCQkJCSAgICBzY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisJCQl9CisKKwkJCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gY21kLnRpbWVyLnNjYW5fbG93OworCQkJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoID0gY21kLnRpbWVyLnNjYW5faGlnaDsKKwkJfQorCX0KKworCS8qIENsZWFyIHRoZSBjaGFubmVsIGxpc3QgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk87CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk87CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBXcml0ZSB0aGUgY2hhbm5lbCBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQltZTQwMDBfb3V0bChsaXN0W2ldLCBhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfcmVnKTsKKwl9CisKKwkvKiBTZXR1cCBzYW1wbGUgYW5kIGhvbGQgKi8KKwlpZiAoY21kLnNoKSB7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCX0gZWxzZSB7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xEOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisKKwkvKiBTYXZlIHRoZSBjaGFubmVsIGxpc3Qgc2l6ZSBpbiB0aGUgYm9hcmQgY29udGV4dCAqLworCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9jb3VudCA9IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7CisKKwlrZnJlZShsaXN0KTsKKworCXJldHVybiAwOworCisgICAgICBBSV9DT05GSUdfRVJSOgorCisJLyogUmVzZXQgdGhlIHRpbWVycyAqLworCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gMDsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSAwOworCisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKworCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9jb3VudCA9IDA7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0KKwkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xEKTsKKworCWlmIChsaXN0KQorCQlrZnJlZShsaXN0KTsKKworCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIGludCBhaV9jb21tb25fc3RhcnQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwlDQUxMX1BERUJVRygiYWlfY29tbW9uX3N0YXJ0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0b3BwZWQgKi8KKwlpZiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDphaV9jb21tb25fc3RhcnQoKTpDb252ZXJzaW9uIGlzIG5vdCBzdG9wcGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBDbGVhciBkYXRhIGZpZm8sIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGNsZWFyIHNhbXBsZSBjb3VudGVyIHJlbG9hZCAqLworCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRIHwKKwkJIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQpOworCisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBDbGVhciBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCS8qIEVuYWJsZSBkYXRhIGZpZm8gKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTzsKKworCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc2V0dXAgKi8KKwlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgJiYgIWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwl9IGVsc2UgaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyCisJCSAgICYmIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPD0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKSB7CisJCQkvKiBFbmFibGUgb25seSBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQ7CisJCX0gZWxzZSB7CisJCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfUkVMT0FEOworCQl9CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIG9ubHkgSGFsZiBGdWxsIEludGVycnVwdCAqLworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwl9CisKKwkvKiBDbGVhciB0aGUgc3RvcCBiaXRzICovCisJdG1wICY9IH4oTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCisJLyogV3JpdGUgc2V0dXAgdG8gaGFyZHdhcmUgKi8KKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIFdyaXRlIHNhbXBsZSBjb3VudGVyICovCisJbWU0MDAwX291dGwoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIsIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJaW50IGVycjsKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0YXJ0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogUHJlcGFyZSBIYXJkd2FyZSAqLworCWVyciA9IGFpX2NvbW1vbl9zdGFydChhaV9jb250ZXh0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogU3RhcnQgY29udmVyc2lvbiBieSBkdW1teSByZWFkICovCisJbWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGFydF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0YXJ0X2V4KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCWludCBlcnI7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyByZWY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zdGFydF9leCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcih0aW1lb3V0LCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9zdGFydF9leCgpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogUHJlcGFyZSBIYXJkd2FyZSAqLworCWVyciA9IGFpX2NvbW1vbl9zdGFydChhaV9jb250ZXh0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHRpbWVvdXQpIHsKKwkJcmVmID0gamlmZmllczsKKwkJd2hpbGUgKCEKKwkJICAgICAgIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKQorCQl7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RhcnRfZXgoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKCEKKwkJICAgICAgIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKQorCQl7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zdG9wKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIERpc2FibGUgaXJxcyBhbmQgY2xlYXIgZGF0YSBmaWZvICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8pOworCS8qIFN0b3AgY29udmVyc2lvbiBvZiB0aGUgc3RhdGUgbWFjaGluZSAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJLyogQ2xlYXIgY2lyY3VsYXIgYnVmZmVyICovCisJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwl3aGlsZSAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc3RvcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIERpc2FibGUgaXJxcyBhbmQgY2xlYXIgZGF0YSBmaWZvICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8pOworCS8qIFN0b3AgY29udmVyc2lvbiBvZiB0aGUgc3RhdGUgbWFjaGluZSAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCS8qIENsZWFyIGNpcmN1bGFyIGJ1ZmZlciAqLworCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJd2hpbGUgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdG9wKCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN0b3AgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAobWU0MDAwX2FpX3RyaWdnZXJfdCAqIGFyZywKKwkJCQkgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwltZTQwMDBfYWlfdHJpZ2dlcl90IGNtZDsKKwlpbnQgZXJyOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfYWlfdHJpZ2dlcl90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9ESUdJVEFMKSB7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQU5BTE9HOworCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0FOQUxPRykgeworCQlpZiAoIWFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmV4X3RyaWdfYW5hbG9nKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6Tm8gYW5hbG9nIHRyaWdnZXIgYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19BTkFMT0c7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6SW52YWxpZCB0cmlnZ2VyIG1vZGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC5lZGdlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX1JJU0lORykgeworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQk9USCB8CisJCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkcpOworCX0gZWxzZSBpZiAoY21kLmVkZ2UgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfRkFMTElORykgeworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORzsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RIOworCX0gZWxzZSBpZiAoY21kLmVkZ2UgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfQk9USCkgeworCQl0bXAgfD0KKwkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0JPVEggfAorCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORzsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpJbnZhbGlkIHRyaWdnZXIgZWRnZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zY19zZXR1cChtZTQwMDBfYWlfc2NfdCAqIGFyZywKKwkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCW1lNDAwMF9haV9zY190IGNtZDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zY19zZXR1cCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfYWlfc2NfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zY19zZXR1cCgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPSBjbWQudmFsdWU7CisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkID0gY21kLnJlbG9hZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYWlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNoYXIgKmJ1ZmYsIHNpemVfdCBjbnQsCisJCQkgICAgICBsb2ZmX3QgKiBvZmZwKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXMxNiAqYnVmZmVyID0gKHMxNiAqKSBidWZmOworCXNpemVfdCBjb3VudCA9IGNudCAvIDI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdG1wOworCWludCBjID0gMDsKKwlpbnQgayA9IDA7CisJaW50IHJldCA9IDA7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3JlYWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisKKwkvKiBDaGVjayBjb3VudCAqLworCWlmIChjb3VudCA8PSAwKSB7CisJCVBERUJVRygibWU0MDAwX2FpX3JlYWQoKTpDb3VudCBpcyAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQljID0gbWU0MDAwX3ZhbHVlc190b19lbmQoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQlpZiAoIWMpIHsKKwkJCQlQREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfcmVhZCgpOlJldHVybmluZyBmcm9tIG5vbmJsb2NraW5nIHJlYWRcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBzdGlsbCBydW5uaW5nICovCisJCQlpZiAoIQorCQkJICAgIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCSAgICAgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9yZWFkKCk6Q29udmVyc2lvbiBpbnRlcnJ1cHRlZFxuIik7CisJCQkJcmV0dXJuIC1FUElQRTsKKwkJCX0KKworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFpX2NvbnRleHQtPndhaXRfcXVldWUsCisJCQkJCQkgKG1lNDAwMF92YWx1ZXNfdG9fZW5kCisJCQkJCQkgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSAgIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOldhaXQgb24gdmFsdWVzIGludGVycnVwdGVkIGZyb20gc2lnbmFsXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQl9CisKKwkJLyogT25seSByZWFkIGNvdW50IHZhbHVlcyBvciBhcyBtdWNoIGFzIGF2YWlsYWJsZSAqLworCQljID0gbWU0MDAwX3ZhbHVlc190b19lbmQoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCSBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpOiVkIHZhbHVlcyB0byBlbmRcbiIsIGMpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCisJCVBERUJVRygibWU0MDAwX2FpX3JlYWQoKTpDb3B5ICVkIHZhbHVlcyB0byB1c2VyIHNwYWNlXG4iLCBjKTsKKwkJayA9IDIgKiBjOworCQlrIC09IGNvcHlfdG9fdXNlcihidWZmZXIsCisJCQkJICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCwgayk7CisJCWMgPSBrIC8gMjsKKwkJaWYgKCFjKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9yZWFkKCk6Q2Fubm90IGNvcHkgbmV3IHZhbHVlcyB0byB1c2VyXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9CisJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCArIGMpICYgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLQorCQkJCQkJICAgICAgIDEpOworCQlidWZmZXIgKz0gYzsKKwkJY291bnQgLT0gYzsKKwkJcmV0ICs9IGM7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCWlmIChtZTQwMDBfYnVmX3NwYWNlCisJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzZXR1cCAqLworCQkJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyCisJCQkgICAgJiYgIWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkJCS8qIEVuYWJsZSBIYWxmIEZ1bGwgSW50ZXJydXB0IGFuZCBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCQl0bXAgfD0KKwkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlE7CisJCQl9IGVsc2UgaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyCisJCQkJICAgJiYgYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkKSB7CisJCQkJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyIDwKKwkJCQkgICAgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKSB7CisJCQkJCS8qIEVuYWJsZSBvbmx5IFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQkJCXRtcCB8PQorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogRW5hYmxlIG9ubHkgSGFsZiBGdWxsIEludGVycnVwdCAqLworCQkJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCQkJfQorCisJCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgc3RpbGwgcnVubmluZyAqLworCWlmICghKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOkNvbnZlcnNpb24gbm90IHJ1bm5pbmcgYWZ0ZXIgY29tcGxldGUgcmVhZFxuIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXR1cm4gKGsgPT0gMCkgPyAtRUFHQUlOIDogMiAqIHJldDsKKwl9CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3JlYWQoKSBpcyBsZWF2ZWRcbiIpOworCXJldHVybiByZXQgKiAyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9haV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlX3AsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcG9sbCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCS8qIFJlZ2lzdGVyIHdhaXQgcXVldWUgKi8KKwlwb2xsX3dhaXQoZmlsZV9wLCAmYWlfY29udGV4dC0+d2FpdF9xdWV1ZSwgd2FpdCk7CisKKwkvKiBHZXQgYXZhaWxhYmxlIHZhbHVlcyAqLworCWlmIChtZTQwMDBfdmFsdWVzX3RvX2VuZChhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCVBERUJVRygibWU0MDAwX2FpX3BvbGwoKTpSZXR1cm4gbWFzayAlbFhcbiIsIG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX29mZnNldF9lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX29mZnNldF9lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX09GRlNFVDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfb2Zmc2V0X2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9PRkZTRVQ7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZnVsbHNjYWxlX2VuYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRlVMTFNDQUxFOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Z1bGxzY2FsZV9kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9mdWxsc2NhbGVfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0ZVTExTQ0FMRTsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9mc21fc3RhdGUoaW50ICphcmcsIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9mc21fc3RhdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPQorCSAgICAobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgPyAxCisJICAgIDogMDsKKworCWlmIChwdXRfdXNlcih0bXAsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYWlfZnNtX3N0YXRlKCk6Q2Fubm90IGNvcHkgdG8gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGM7CisJaW50IGVycjsKKworCWMgPSBtZTQwMDBfYnVmX2NvdW50KGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRVBST00gc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlZXByb21fd3JpdGVfY21kKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0LCB1bnNpZ25lZCBsb25nIGNtZCwKKwkJCSAgICBpbnQgbGVuZ3RoKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlDQUxMX1BERUJVRygiZWVwcm9tX3dyaXRlX2NtZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCVBERUJVRygiZWVwcm9tX3dyaXRlX2NtZCgpOldyaXRlIGNvbW1hbmQgMHglMDhsWCB3aXRoIGxlbmd0aCA9ICVkXG4iLAorCSAgICAgICBjbWQsIGxlbmd0aCk7CisKKwkvKiBHZXQgdGhlIElDUiByZWdpc3RlciBhbmQgY2xlYXIgdGhlIHJlbGF0ZWQgYml0cyAqLworCXZhbHVlID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXZhbHVlICY9IH4oUExYX0lDUl9NQVNLX0VFUFJPTSk7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBSYWlzZSB0aGUgY2hpcCBzZWxlY3QgKi8KKwl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1Q7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpIHsKKwkJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKKwkJfSBlbHNlIHsKKwkJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0KKworCQkvKiBXcml0ZSB0byBFRVBST00gKi8KKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogUmFpc2luZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQkvKiBGYWxsaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgY2hpcCBzZWxlY3QgKi8KKwl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXVkZWxheShFRVBST01fREVMQVkpOworCisJLyogV2FpdCB1bnRpbCBoYXJkd2FyZSBpcyByZWFkeSBmb3Igc3VyZSAqLworCW1kZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGVlcHJvbV9yZWFkX2NtZChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNtZCwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIHNob3J0IGlkID0gMDsKKworCUNBTExfUERFQlVHKCJlZXByb21fcmVhZF9jbWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlQREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpOlJlYWQgY29tbWFuZCAweCUwOGxYIHdpdGggbGVuZ3RoID0gJWRcbiIsIGNtZCwKKwkgICAgICAgbGVuZ3RoKTsKKworCS8qIEdldCB0aGUgSUNSIHJlZ2lzdGVyIGFuZCBjbGVhciB0aGUgcmVsYXRlZCBiaXRzICovCisJdmFsdWUgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgJj0gfihQTFhfSUNSX01BU0tfRUVQUk9NKTsKKworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogUmFpc2UgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXVkZWxheShFRVBST01fREVMQVkpOworCisJLyogV3JpdGUgdGhlIHJlYWQgY29tbWFuZCB0byB0aGUgZWVwcm9tICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKSB7CisJCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOworCQl9CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCS8qIFJhaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogRmFsbGluZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJfQorCisJLyogUmVhZCB0aGUgdmFsdWUgZnJvbSB0aGUgZWVwcm9tICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJLyogUmFpc2luZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQlpZiAobWU0MDAwX2lubChhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpICYKKwkJICAgIFBMWF9JQ1JfQklUX0VFUFJPTV9SRUFEKSB7CisJCQlpZCB8PSAoMHg4MDAwID4+IGkpOworCQkJUERFQlVHKCJlZXByb21fcmVhZF9jbWQoKTpPUiB3aXRoIDB4JTA0WFxuIiwKKwkJCSAgICAgICAoMHg4MDAwID4+IGkpKTsKKwkJfSBlbHNlIHsKKwkJCVBERUJVRygiZWVwcm9tX3JlYWRfY21kKCk6RG9udCd0IE9SXG4iKTsKKwkJfQorCisJCS8qIEZhbGxpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCX0KKworCS8qIENsZWFyIHRoZSBjaGlwIHNlbGVjdCAqLworCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1Q7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwlyZXR1cm4gaWQ7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2VlcHJvbV93cml0ZShtZTQwMDBfZWVwcm9tX3QgKiBhcmcsCisJCQkgICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJaW50IGVycjsKKwltZTQwMDBfZWVwcm9tX3Qgc2V0dXA7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJdW5zaWduZWQgbG9uZyBkYXRlX2hpZ2g7CisJdW5zaWduZWQgbG9uZyBkYXRlX2xvdzsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZWVwcm9tX3dyaXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZXJyID0gY29weV9mcm9tX3VzZXIoJnNldHVwLCBhcmcsIHNpemVvZihzZXR1cCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9lZXByb21fd3JpdGUoKTpDYW5ub3QgY29weSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEVuYWJsZSB3cml0aW5nICovCisJZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBNRTQwMDBfRUVQUk9NX0NNRF9XUklURV9FTkFCTEUsCisJCQkgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0VOQUJMRSk7CisKKwkvKiBDb21tYW5kIGZvciBkYXRlICovCisJZGF0ZV9oaWdoID0gKHNldHVwLmRhdGUgJiAweEZGRkYwMDAwKSA+PiAxNjsKKwlkYXRlX2xvdyA9IChzZXR1cC5kYXRlICYgMHgwMDAwRkZGRik7CisKKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0hJR0ggPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBkYXRlX2hpZ2gpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0xPVyA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIGRhdGVfbG93KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzEwX29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIHVuaV8xMF9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzJfNV9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzJfNV9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDEwViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMTBfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAxMFYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGJpXzEwX2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMl81X29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMl81X2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAxMFYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgZGlmZl8xMF9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX0ZVTExTQ0FMRQorCQkJCSAgICAgICA8PCBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkJKHVuc2lnbmVkCisJCQkJCQkJCQkgbG9uZykKKwkJCQkJCQkJCXNldHVwLgorCQkJCQkJCQkJZGlmZl8xMF9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBkaWZmXzJfNV9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9GVUxMU0NBTEUKKwkJCQkgICAgICAgPDwgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJCSh1bnNpZ25lZAorCQkJCQkJCQkJIGxvbmcpCisJCQkJCQkJCQlzZXR1cC4KKwkJCQkJCQkJCWRpZmZfMl81X2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIERpc2FibGUgd3JpdGluZyAqLworCWVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRElTQUJMRSwKKwkJCSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRElTQUJMRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3JlYWQobWU0MDAwX2VlcHJvbV90ICogYXJnLAorCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGNtZDsKKwltZTQwMDBfZWVwcm9tX3Qgc2V0dXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2VlcHJvbV9yZWFkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29tbWFuZCBmb3IgZGF0ZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0hJR0g7CisJc2V0dXAuZGF0ZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKwlzZXR1cC5kYXRlIDw8PSAxNjsKKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9MT1c7CisJc2V0dXAuZGF0ZSB8PQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAxMFYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfT0ZGU0VUOworCXNldHVwLnVuaV8xMF9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAxMFYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfRlVMTFNDQUxFOworCXNldHVwLnVuaV8xMF9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX09GRlNFVDsKKwlzZXR1cC51bmlfMl81X29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfRlVMTFNDQUxFOworCXNldHVwLnVuaV8yXzVfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAxMFYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9PRkZTRVQ7CisJc2V0dXAuYmlfMTBfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAxMFYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9GVUxMU0NBTEU7CisJc2V0dXAuYmlfMTBfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAyLDVWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfT0ZGU0VUOworCXNldHVwLmJpXzJfNV9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9GVUxMU0NBTEU7CisJc2V0dXAuYmlfMl81X2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcm50aWFsIDEwViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfT0ZGU0VUOworCXNldHVwLmRpZmZfMTBfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfRlVMTFNDQUxFOworCXNldHVwLmRpZmZfMTBfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVybnRpYWwgMiw1ViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfT0ZGU0VUOworCXNldHVwLmRpZmZfMl81X29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9GVUxMU0NBTEU7CisJc2V0dXAuZGlmZl8yXzVfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJZXJyID0gY29weV90b191c2VyKGFyZywgJnNldHVwLCBzaXplb2Yoc2V0dXApKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZWVwcm9tX3JlYWQoKTpDYW5ub3QgY29weSB0byB1c2VyXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRElPIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfZGlvX2NvbnRleHRfdCAqZGlvX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19pb2N0bCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWRpb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZGlvX2lvY3RsKCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0RJT19DT05GSUc6CisJCXJldHVybiBtZTQwMDBfZGlvX2NvbmZpZygobWU0MDAwX2Rpb19jb25maWdfdCAqKSBhcmcsCisJCQkJCSBkaW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRElPX1NFVF9CWVRFOgorCQlyZXR1cm4gbWU0MDAwX2Rpb19zZXRfYnl0ZSgobWU0MDAwX2Rpb19ieXRlX3QgKikgYXJnLAorCQkJCQkgICBkaW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRElPX0dFVF9CWVRFOgorCQlyZXR1cm4gbWU0MDAwX2Rpb19nZXRfYnl0ZSgobWU0MDAwX2Rpb19ieXRlX3QgKikgYXJnLAorCQkJCQkgICBkaW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRElPX1JFU0VUOgorCQlyZXR1cm4gbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9faW9jdGwoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2NvbmZpZyhtZTQwMDBfZGlvX2NvbmZpZ190ICogYXJnLAorCQkJICAgICBtZTQwMDBfZGlvX2NvbnRleHRfdCAqIGRpb19jb250ZXh0KQoreworCW1lNDAwMF9kaW9fY29uZmlnX3QgY21kOworCXUzMiB0bXA7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZGlvX2NvbmZpZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfZGlvX2NvbmZpZ190KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHBvcnQgcGFyYW1ldGVyICovCisJaWYgKGNtZC5wb3J0ID49IGRpb19jb250ZXh0LT5kaW9fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9kaW9fY29uZmlnKCk6IHBvcnQgJWQsIG1vZGUgJWQsIGZ1bmN0aW9uICVkXG4iLCBjbWQucG9ydCwKKwkgICAgICAgY21kLm1vZGUsIGNtZC5mdW5jdGlvbik7CisKKwlpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0EpIHsKKwkJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9JTlBVVCkgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gaW5wdXQgb24gb3B0byBpc29sYXRlZCB2ZXJzaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEpOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEpOworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMCk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMSB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgY21kLm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9CKSB7CisJCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfSU5QVVQpIHsKKwkJCS8qIE9ubHkgZG8gYW55dGhpbmcgd2hlbiBUVEwgdmVyc2lvbiBpcyBpbnN0YWxsZWQgKi8KKwkJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJCXRtcCAmPQorCQkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyk7CisJCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJfQorCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCS8qIENoZWNrIGlmIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCQkJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW5ub3Qgc2V0IHRvIG91dHB1dCBvbiBvcHRvIGlzb2xhdGVkIHZlcnNpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyk7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzI7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gRklGTyBsb3cgb3V0cHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzEpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQkvKiBDaGVjayBpZiBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwkJCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2Fubm90IHNldCB0byBGSUZPIGhpZ2ggb3V0cHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQykgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81KTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81KTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzIpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzI7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfRCkgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83KTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83KTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNjsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83IHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzMpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzM7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlQREVCVUcoIm1lNDAwMF9kaW9fY29uZmlnKCk6IHBvcnQgJWQsIG1vZGUgJWQsIGZ1bmN0aW9uICVkXG4iLCBjbWQucG9ydCwKKwkgICAgICAgY21kLm1vZGUsIGNtZC5mdW5jdGlvbik7CisKKwlpZiAoKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKQorCSAgICB8fCAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykpIHsKKwkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8wIHwKKwkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8xKTsKKwkJaWYgKGNtZC5mdW5jdGlvbiA9PSBNRTQwMDBfRElPX0ZVTkNUSU9OX1BBVFRFUk4pIHsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQuZnVuY3Rpb24gPT0gTUU0MDAwX0RJT19GVU5DVElPTl9ERU1VWCkgeworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQuZnVuY3Rpb24gPT0gTUU0MDAwX0RJT19GVU5DVElPTl9NVVgpIHsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzE7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6SW52YWxpZCBwb3J0IGZ1bmN0aW9uIHNwZWNpZmllZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9kaW9fc2V0X2J5dGUobWU0MDAwX2Rpb19ieXRlX3QgKiBhcmcsCisJCQkgICAgICAgbWU0MDAwX2Rpb19jb250ZXh0X3QgKiBkaW9fY29udGV4dCkKK3sKKwltZTQwMDBfZGlvX2J5dGVfdCBjbWQ7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZGlvX3NldF9ieXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9kaW9fYnl0ZV90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcG9ydCBwYXJhbWV0ZXIgKi8KKwlpZiAoY21kLnBvcnQgPj0gZGlvX2NvbnRleHQtPmRpb19jb3VudCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9BKSB7CisJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpICYgMHgzKSAhPSAweDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGluIG91dHB1dCBtb2RlXG4iLAorCQkJICAgICAgIGNtZC5wb3J0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCW1lNDAwMF9vdXRsKGNtZC5ieXRlLCBkaW9fY29udGV4dC0+cG9ydF8wX3JlZyk7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQikgeworCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKSAmIDB4QykgIT0gMHg0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfMV9yZWcpOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0MpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweDMwKSAhPSAweDEwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfMl9yZWcpOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0QpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweEMwKSAhPSAweDQwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfM19yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2dldF9ieXRlKG1lNDAwMF9kaW9fYnl0ZV90ICogYXJnLAorCQkJICAgICAgIG1lNDAwMF9kaW9fY29udGV4dF90ICogZGlvX2NvbnRleHQpCit7CisJbWU0MDAwX2Rpb19ieXRlX3QgY21kOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19nZXRfYnl0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfZGlvX2J5dGVfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHBvcnQgcGFyYW1ldGVyICovCisJaWYgKGNtZC5wb3J0ID49IGRpb19jb250ZXh0LT5kaW9fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQSkgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfMF9yZWcpICYgMHhGRjsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9CKSB7CisJCWNtZC5ieXRlID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+cG9ydF8xX3JlZykgJiAweEZGOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0MpIHsKKwkJY21kLmJ5dGUgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5wb3J0XzJfcmVnKSAmIDB4RkY7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfRCkgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfM19yZWcpICYgMHhGRjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19nZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKG1lNDAwMF9kaW9fYnl0ZV90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19nZXRfYnl0ZSgpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9kaW9fcmVzZXQobWU0MDAwX2Rpb19jb250ZXh0X3QgKiBkaW9fY29udGV4dCkKK3sKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENsZWFyIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJbWU0MDAwX291dGwoMCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIENoZWNrIGZvciBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJbWU0MDAwX291dGwoMHgxLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQltZTQwMDBfb3V0bCgweDAsIGRpb19jb250ZXh0LT5wb3J0XzBfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ09VTlRFUiBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfY250X2NvbnRleHRfdCAqY250X2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9pb2N0bCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWNudF9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZGlvX2lvY3RsKCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0NOVF9SRUFEOgorCQlyZXR1cm4gbWU0MDAwX2NudF9yZWFkKChtZTQwMDBfY250X3QgKikgYXJnLCBjbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQ05UX1dSSVRFOgorCQlyZXR1cm4gbWU0MDAwX2NudF93cml0ZSgobWU0MDAwX2NudF90ICopIGFyZywgY250X2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0NOVF9DT05GSUc6CisJCXJldHVybiBtZTQwMDBfY250X2NvbmZpZygobWU0MDAwX2NudF9jb25maWdfdCAqKSBhcmcsCisJCQkJCSBjbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQ05UX1JFU0VUOgorCQlyZXR1cm4gbWU0MDAwX2NudF9yZXNldChjbnRfY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9faW9jdGwoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfY250X2NvbmZpZyhtZTQwMDBfY250X2NvbmZpZ190ICogYXJnLAorCQkJICAgICBtZTQwMDBfY250X2NvbnRleHRfdCAqIGNudF9jb250ZXh0KQoreworCW1lNDAwMF9jbnRfY29uZmlnX3QgY21kOworCXU4IGNvdW50ZXI7CisJdTggbW9kZTsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfY29uZmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9jbnRfY29uZmlnX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X2NvbmZpZygpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgY291bnRlciBwYXJhbWV0ZXIgKi8KKwlzd2l0Y2ggKGNtZC5jb3VudGVyKSB7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMDoKKwkJY291bnRlciA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8wOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8xOgorCQljb3VudGVyID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzE7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzI6CisJCWNvdW50ZXIgPSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfY29uZmlnKCk6Q291bnRlciAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLmNvdW50ZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayBtb2RlIHBhcmFtZXRlciAqLworCXN3aXRjaCAoY21kLm1vZGUpIHsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV8wOgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzA7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzE6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMTsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfMjoKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8yOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV8zOgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzM7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzQ6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfNDsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfNToKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV81OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQubW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdyaXRlIHRoZSBjb250cm9sIHdvcmQgKi8KKwltZTQwMDBfb3V0YigoY291bnRlciB8IG1vZGUgfCAweDMwKSwgY250X2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVhZChtZTQwMDBfY250X3QgKiBhcmcsCisJCQkgICBtZTQwMDBfY250X2NvbnRleHRfdCAqIGNudF9jb250ZXh0KQoreworCW1lNDAwMF9jbnRfdCBjbWQ7CisJdTggdG1wOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9yZWFkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9jbnRfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfcmVhZCgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogUmVhZCBjb3VudGVyICovCisJc3dpdGNoIChjbWQuY291bnRlcikgeworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzA6CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCQljbWQudmFsdWUgPSB0bXA7CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCQljbWQudmFsdWUgfD0gKCh1MTYpIHRtcCkgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMToKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisJCWNtZC52YWx1ZSA9IHRtcDsKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisJCWNtZC52YWx1ZSB8PSAoKHUxNikgdG1wKSA8PCA4OworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8yOgorCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwkJY21kLnZhbHVlID0gdG1wOworCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwkJY21kLnZhbHVlIHw9ICgodTE2KSB0bXApIDw8IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X3JlYWQoKTpDb3VudGVyICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQuY291bnRlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvcHkgcmVzdWx0IGJhY2sgdG8gdXNlciAqLworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjbWQsIHNpemVvZihtZTQwMDBfY250X3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X3JlYWQoKTpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfY250X3dyaXRlKG1lNDAwMF9jbnRfdCAqIGFyZywKKwkJCSAgICBtZTQwMDBfY250X2NvbnRleHRfdCAqIGNudF9jb250ZXh0KQoreworCW1lNDAwMF9jbnRfdCBjbWQ7CisJdTggdG1wOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF93cml0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfY250X3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X3dyaXRlKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBXcml0ZSBjb3VudGVyICovCisJc3dpdGNoIChjbWQuY291bnRlcikgeworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzA6CisJCXRtcCA9IGNtZC52YWx1ZSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCQl0bXAgPSAoY21kLnZhbHVlID4+IDgpICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzE6CisJCXRtcCA9IGNtZC52YWx1ZSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCQl0bXAgPSAoY21kLnZhbHVlID4+IDgpICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzI6CisJCXRtcCA9IGNtZC52YWx1ZSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQl0bXAgPSAoY21kLnZhbHVlID4+IDgpICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X3dyaXRlKCk6Q291bnRlciAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLmNvdW50ZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfY250X3Jlc2V0KG1lNDAwMF9jbnRfY29udGV4dF90ICogY250X2NvbnRleHQpCit7CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfcmVzZXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBTZXQgdGhlIG1vZGUgYW5kIHZhbHVlIGZvciBjb3VudGVyIDAgKi8KKwltZTQwMDBfb3V0YigweDMwLCBjbnRfY29udGV4dC0+Y3RybF9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisKKwkvKiBTZXQgdGhlIG1vZGUgYW5kIHZhbHVlIGZvciBjb3VudGVyIDEgKi8KKwltZTQwMDBfb3V0YigweDcwLCBjbnRfY29udGV4dC0+Y3RybF9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisKKwkvKiBTZXQgdGhlIG1vZGUgYW5kIHZhbHVlIGZvciBjb3VudGVyIDIgKi8KKwltZTQwMDBfb3V0YigweEIwLCBjbnRfY29udGV4dC0+Y3RybF9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXh0ZXJuYWwgSW50ZXJydXB0IHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJCXVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pb2N0bCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWV4dF9pbnRfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZXh0X2ludF9pb2N0bCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfZXh0X2ludF9pb2N0bCgpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9FWFRfSU5UX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9leHRfaW50X2VuYWJsZShleHRfaW50X2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0VYVF9JTlRfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9leHRfaW50X2Rpc2FibGUoZXh0X2ludF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9FWFRfSU5UX0NPVU5UOgorCQlyZXR1cm4gbWU0MDAwX2V4dF9pbnRfY291bnQoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCSAgICBleHRfaW50X2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZXh0X2ludF9pb2N0bCgpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2VuYWJsZShtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKiBleHRfaW50X2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUTsKKwltZTQwMDBfb3V0bCh0bXAsIGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZGlzYWJsZShtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKiBleHRfaW50X2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9jb3VudCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICogZXh0X2ludF9jb250ZXh0KQoreworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2NvdW50KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJcHV0X3VzZXIoZXh0X2ludF9jb250ZXh0LT5pbnRfY291bnQsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZ2V0X3VzZXJfaW5mbyhtZTQwMDBfdXNlcl9pbmZvX3QgKiBhcmcsCisJCQkJbWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pCit7CisJbWU0MDAwX3VzZXJfaW5mb190IHVzZXJfaW5mbzsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZ2V0X3VzZXJfaW5mbygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXVzZXJfaW5mby5ib2FyZF9jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX2NvdW50OworCXVzZXJfaW5mby5wbHhfcmVnYmFzZSA9IGJvYXJkX2luZm8tPnBseF9yZWdiYXNlOworCXVzZXJfaW5mby5wbHhfcmVnYmFzZV9zaXplID0gYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZTsKKwl1c2VyX2luZm8ubWU0MDAwX3JlZ2Jhc2UgPSBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZTsKKwl1c2VyX2luZm8ubWU0MDAwX3JlZ2Jhc2Vfc2l6ZSA9IGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlX3NpemU7CisJdXNlcl9pbmZvLnNlcmlhbF9ubyA9IGJvYXJkX2luZm8tPnNlcmlhbF9ubzsKKwl1c2VyX2luZm8uaHdfcmV2aXNpb24gPSBib2FyZF9pbmZvLT5od19yZXZpc2lvbjsKKwl1c2VyX2luZm8udmVuZG9yX2lkID0gYm9hcmRfaW5mby0+dmVuZG9yX2lkOworCXVzZXJfaW5mby5kZXZpY2VfaWQgPSBib2FyZF9pbmZvLT5kZXZpY2VfaWQ7CisJdXNlcl9pbmZvLnBjaV9idXNfbm8gPSBib2FyZF9pbmZvLT5wY2lfYnVzX25vOworCXVzZXJfaW5mby5wY2lfZGV2X25vID0gYm9hcmRfaW5mby0+cGNpX2Rldl9ubzsKKwl1c2VyX2luZm8ucGNpX2Z1bmNfbm8gPSBib2FyZF9pbmZvLT5wY2lfZnVuY19ubzsKKwl1c2VyX2luZm8uaXJxID0gYm9hcmRfaW5mby0+aXJxOworCXVzZXJfaW5mby5pcnFfY291bnQgPSBib2FyZF9pbmZvLT5pcnFfY291bnQ7CisJdXNlcl9pbmZvLmRyaXZlcl92ZXJzaW9uID0gTUU0MDAwX0RSSVZFUl9WRVJTSU9OOworCXVzZXJfaW5mby5hb19jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmNvdW50OworCXVzZXJfaW5mby5hb19maWZvX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uZmlmb19jb3VudDsKKworCXVzZXJfaW5mby5haV9jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmNvdW50OworCXVzZXJfaW5mby5haV9zaF9jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLnNoX2NvdW50OworCXVzZXJfaW5mby5haV9leF90cmlnX2FuYWxvZyA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmV4X3RyaWdfYW5hbG9nOworCisJdXNlcl9pbmZvLmRpb19jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmRpby5jb3VudDsKKworCXVzZXJfaW5mby5jbnRfY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5jbnQuY291bnQ7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfaW5mbywgc2l6ZW9mKG1lNDAwMF91c2VyX2luZm9fdCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJU1IgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIsIGludCBtb2RlKQoreworCWludCByZXN1bHQgPSAwOworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2Zhc3luYygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWV4dF9pbnRfY29udGV4dCA9IGZpbGVfcHRyLT5wcml2YXRlX2RhdGE7CisKKwlyZXN1bHQgPQorCSAgICBmYXN5bmNfaGVscGVyKGZkLCBmaWxlX3B0ciwgbW9kZSwgJmV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0cik7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZmFzeW5jKCkgaXMgbGVhdmVkXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIHRtcDsKKwl1MzIgdmFsdWU7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKwlpbnQgaTsKKwlpbnQgYyA9IDA7CisJaW50IGMxID0gMDsKKwkvL3Vuc2lnbmVkIGxvbmcgYmVmb3JlOworCS8vdW5zaWduZWQgbG9uZyBhZnRlcjsKKworCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZGV2X2lkOworCisJLyogQ2hlY2sgaWYgaXJxIG51bWJlciBpcyByaWdodCAqLworCWlmIChpcnEgIT0gYW9fY29udGV4dC0+aXJxKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTppbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCisJCQkgICBpcnEpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogQ2hlY2sgaWYgdGhpcyBEQUMgcmlzZWQgYW4gaW50ZXJydXB0ICovCisJaWYgKCEKKwkgICAgKCgweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMykpICYKKwkgICAgIG1lNDAwMF9pbmwoYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcpKSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6Tm90IHRoaXMgREFDXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCisJaWYgKCEodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRUYpICYmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRikKKwkgICAgJiYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGKSkgeworCQljID0gTUU0MDAwX0FPX0ZJRk9fQ09VTlQ7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpGaWZvIGVtcHR5XG4iKTsKKwl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9FRikKKwkJICAgJiYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGKQorCQkgICAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpKSB7CisJCWMgPSBNRTQwMDBfQU9fRklGT19DT1VOVCAvIDI7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpGaWZvIHVuZGVyIGhhbGYgZnVsbFxuIik7CisJfSBlbHNlIHsKKwkJYyA9IDA7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpGaWZvIGZ1bGxcbiIpOworCX0KKworCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpUcnkgdG8gd3JpdGUgMHglMDRYIHZhbHVlc1xuIiwgYyk7CisKKwl3aGlsZSAoMSkgeworCQljMSA9IG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkgIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpOworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6VmFsdWVzIHRvIGVuZCA9ICVkXG4iLCBjMSk7CisJCWlmIChjMSA+IGMpCisJCQljMSA9IGM7CisKKwkJaWYgKGMxIDw9IDApIHsKKwkJCUlTUl9QREVCVUcKKwkJCSAgICAoIm1lNDAwMF9hb19pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGVtcHR5XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCS8vcmR0c2NsKGJlZm9yZSk7CisJCWlmICgoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAxX0ZJRk9fUkVHKSB8fAorCQkgICAgKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wM19GSUZPX1JFRykpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBjMTsgaSsrKSB7CisJCQkJdmFsdWUgPQorCQkJCSAgICAoKHUzMikKKwkJCQkgICAgICgqCisJCQkJICAgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJICAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBpKSkpIDw8IDE2OworCQkJCW91dGwodmFsdWUsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlvdXRzdyhhb19jb250ZXh0LT5maWZvX3JlZywKKwkJCSAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkgICAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsLCBjMSk7CisKKwkJLy9yZHRzY2woYWZ0ZXIpOworCQkvL3ByaW50ayhLRVJOX0VSUiJNRTQwMDA6bWU0MDAwX2FvX2lzcigpOlRpbWUgbGFwc2UgPSAlbHVcbiIsIGFmdGVyIC0gYmVmb3JlKTsKKworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0KKwkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsICsgYzEpICYgKE1FNDAwMF9BT19CVUZGRVJfQ09VTlQgLQorCQkJCQkJCTEpOworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6JWQgdmFsdWVzIHdyb3RlIHRvIHBvcnQgMHglMDRYXG4iLAorCQkJICAgYzEsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwkJYyAtPSBjMTsKKwl9CisKKwkvKiBJZiB0aGVyZSBhcmUgbm8gdmFsdWVzIGxlZnQgaW4gdGhlIGJ1ZmZlciwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisJaWYgKCFtZTQwMDBfYnVmX2NvdW50KGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkgeworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9hb19pc3IoKTpEaXNhYmxlIEludGVycnVwdCBiZWNhdXNlIG5vIHZhbHVlcyBsZWZ0IGluIGJ1ZmZlclxuIik7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKworCS8qIFJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX1JFU0VUX0lSUTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9SRVNFVF9JUlE7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBJZiBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQsIGZsb3cgd2FzIGludGVycnVwdGVkICovCisJaWYgKCEobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6bWU0MDAwX2FvX2lzcigpOkJyb2tlbiBwaXBlXG4iKTsKKwkJYW9fY29udGV4dC0+cGlwZV9mbGFnID0gMTsJLy8gU2V0IGZsYWcgaW4gb3JkZXIgdG8gaW5mb3JtIHdyaXRlIHJvdXRpbmUKKwkJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsJLy8gRGlzYWJsZSBpbnRlcnJ1cHQKKwl9CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKworCS8qIFdha2UgdXAgd2FpdGluZyBwcm9jZXNzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYoYW9fY29udGV4dC0+d2FpdF9xdWV1ZSkpOworCisJLyogQ291bnQgdGhlIGludGVycnVwdCAqLworCWFvX2NvbnRleHQtPmJvYXJkX2luZm8tPmlycV9jb3VudCsrOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIHRtcDsKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCWludCBpOworCWludCBjID0gMDsKKwlpbnQgYzEgPSAwOworI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKKwl1bnNpZ25lZCBsb25nIGJlZm9yZTsKKwl1bnNpZ25lZCBsb25nIGFmdGVyOworI2VuZGlmCisKKwlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCkgaXMgZXhlY3V0ZWRcbiIpOworCisjaWZkZWYgTUU0MDAwX0lTUl9ERUJVRworCXJkdHNjbChiZWZvcmUpOworI2VuZGlmCisKKwlhaV9jb250ZXh0ID0gZGV2X2lkOworCisJLyogQ2hlY2sgaWYgaXJxIG51bWJlciBpcyByaWdodCAqLworCWlmIChpcnEgIT0gYWlfY29udGV4dC0+aXJxKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTppbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCisJCQkgICBpcnEpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+aXJxX3N0YXR1c19yZWcpICYKKwkgICAgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FJX0hGKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gaGFsZiBmdWxsIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKworCQkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciB0byBmaW5kIG91dCB3aGF0IGhhcHBlbmVkICovCisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJCWlmICghKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpICYmCisJCSAgICAhKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCSAgICAmJiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGZ1bGxcbiIpOworCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UOworCisJCQkvKiBGSUZPIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKKwkJCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEpOworCQkJb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpICYmCisJCQkgICAhKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkgICAmJiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGhhbGYgZnVsbFxuIik7CisJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyOworCQl9IGVsc2UgeworCQkJYyA9IDA7CisJCQlJU1JfUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6Q2FuJ3QgZGV0ZXJtaW5lIHN0YXRlIG9mIGZpZm9cbiIpOworCQl9CisKKwkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOlRyeSB0byByZWFkICVkIHZhbHVlc1xuIiwgYyk7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWMxID0gbWU0MDAwX3NwYWNlX3RvX2VuZChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwgYzEpOworCQkJaWYgKGMxID4gYykKKwkJCQljMSA9IGM7CisKKwkJCWlmIChjMSA8PSAwKSB7CisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLCBjMSk7CisJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkgICAgIGMxKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0gMSk7CisJCQljIC09IGMxOworCQl9CisKKwkJLyogV29yayBpcyBkb25lLCBzbyByZXNldCB0aGUgaW50ZXJydXB0ICovCisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOnJlc2V0IGludGVycnVwdCBmaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHRcbiIpOworCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwl9CisKKwlpZiAobWU0MDAwX2lubChhaV9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJiBNRTQwMDBfSVJRX1NUQVRVU19CSVRfU0MpIHsKKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U2FtcGxlIGNvdW50ZXIgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCisJCWlmICghYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkKSB7CisJCQlJU1JfUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U2luZ2xlIGRhdGEgYmxvY2sgYXZhaWxhYmxlXG4iKTsKKworCQkJLyogUG9sbCBkYXRhIHVudGlsIGZpZm8gZW1wdHkgKi8KKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIChpIDwgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKQorCQkJICAgICAmJiAoaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKSAmCisJCQkJIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpOyBpKyspIHsKKwkJCQlpZiAobWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQkJCQkqKGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCkgPQorCQkgaW53KGFpX2NvbnRleHQtPmRhdGFfcmVnKTsKKwkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCSAgICAgMSkgJiAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTolZCB2YWx1ZXMgcmVhZFxuIiwgaSk7CisJCX0gZWxzZSB7CisJCQlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPD0KKwkJCSAgICBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDIpIHsKKwkJCQlJU1JfUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkludGVycnVwdCBmcm9tIGFkanVzdGFibGUgaGFsZiBmdWxsIHRocmVzaG9sZFxuIik7CisKKwkJCQkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciB0byBmaW5kIG91dCB3aGF0IGhhcHBlbmVkICovCisJCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJCQlpZiAoISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkJCSAgICAhKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkJICAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGZ1bGxcbiIpOworCQkJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQ7CisKKwkJCQkJLyogRklGTyBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uICovCisJCQkJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQkJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQkJdG1wIHw9CisJCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJCQkJCW91dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCQkJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkKKwkJCQkJICAgJiYgISh0bXAgJgorCQkJCQkJTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCQkJICAgJiYgKHRtcCAmCisJCQkJCSAgICAgICBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGhhbGYgZnVsbFxuIik7CisJCQkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDI7CisJCQkJfSBlbHNlIHsKKwkJCQkJYyA9IGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyOworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTYW1wbGUgY291bnQgdmFsdWVzXG4iKTsKKwkJCQl9CisKKwkJCQlJU1JfUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlRyeSB0byByZWFkICVkIHZhbHVlc1xuIiwKKwkJCQkgICAgIGMpOworCisJCQkJd2hpbGUgKDEpIHsKKwkJCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kKGFpX2NvbnRleHQtPgorCQkJCQkJCQkgY2lyY19idWYsCisJCQkJCQkJCSBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsCisJCQkJCSAgICAgYzEpOworCQkJCQlpZiAoYzEgPiBjKQorCQkJCQkJYzEgPSBjOworCisJCQkJCWlmIChjMSA8PSAwKSB7CisJCQkJCQlJU1JfUERFQlVHCisJCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBmdWxsXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaW5zdyhhaV9jb250ZXh0LT5kYXRhX3JlZywKKwkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsIGMxKTsKKwkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCSAgICAgYzEpICYgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCQkJYyAtPSBjMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCUlTUl9QREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6TXVsdGlwbGUgZGF0YSBibG9jayBhdmFpbGFibGVcbiIpOworCisJCQkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJCQkJaWYgKCEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkgJiYKKwkJCQkgICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCSAgICAmJiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UOworCisJCQkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiAqLworCQkJCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJCXRtcCB8PQorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCQkJCQlvdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCisJCQkJCXdoaWxlICgxKSB7CisJCQkJCQljMSA9IG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgICAgIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJCQkJSVNSX1BERUJVRworCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlpZiAoYzEgPiBjKQorCQkJCQkJCWMxID0gYzsKKworCQkJCQkJaWYgKGMxIDw9IDApIHsKKwkJCQkJCQlJU1JfUERFQlVHCisJCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZnVsbFxuIik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWluc3coYWlfY29udGV4dC0+ZGF0YV9yZWcsCisJCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsCisJCQkJCQkgICAgIGMxKTsKKwkJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCQkJCSAgICAgYzEpICYKKwkJCQkJCSAgICAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtCisJCQkJCQkgICAgIDEpOworCQkJCQkJYyAtPSBjMTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpCisJCQkJCSAgICYmICEodG1wICYKKwkJCQkJCU1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkJCSAgICYmICh0bXAgJgorCQkJCQkgICAgICAgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGxcbiIpOworCQkJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyOworCisJCQkJCXdoaWxlICgxKSB7CisJCQkJCQljMSA9IG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgICAgIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJCQkJSVNSX1BERUJVRworCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlpZiAoYzEgPiBjKQorCQkJCQkJCWMxID0gYzsKKworCQkJCQkJaWYgKGMxIDw9IDApIHsKKwkJCQkJCQlJU1JfUERFQlVHCisJCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZnVsbFxuIik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWluc3coYWlfY29udGV4dC0+ZGF0YV9yZWcsCisJCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsCisJCQkJCQkgICAgIGMxKTsKKwkJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCQkJCSAgICAgYzEpICYKKwkJCQkJCSAgICAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtCisJCQkJCQkgICAgIDEpOworCQkJCQkJYyAtPSBjMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFBvbGwgZGF0YSB1bnRpbCBmaWZvIGVtcHR5ICovCisJCQkJCWZvciAoaSA9IDA7CisJCQkJCSAgICAgKGkgPCBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDIpCisJCQkJCSAgICAgJiYgKGlubChhaV9jb250ZXh0LT5jdHJsX3JlZykgJgorCQkJCQkJIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpOworCQkJCQkgICAgIGkrKykgeworCQkJCQkJaWYgKG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgICAgIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCQkJCQkJKihhaV9jb250ZXh0LT5jaXJjX2J1Zi4KKwkJCQkJCQkgIGJ1ZiArCisJCQkJCQkJICBhaV9jb250ZXh0LT5jaXJjX2J1Zi4KKwkJCQkJCQkgIGhlYWQpID0KKwkJCQkgICAgICAgaW53KGFpX2NvbnRleHQtPmRhdGFfcmVnKTsKKwkJCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi4KKwkJCQkJCQkgICAgaGVhZCA9CisJCQkJCQkJICAgIChhaV9jb250ZXh0LT4KKwkJCQkJCQkgICAgIGNpcmNfYnVmLmhlYWQgKworCQkJCQkJCSAgICAgMSkgJgorCQkJCQkJCSAgICAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVAorCQkJCQkJCSAgICAgLSAxKTsKKwkJCQkJCX0gZWxzZQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOiVkIHZhbHVlcyByZWFkXG4iLAorCQkJCQkgICAgIGkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIFdvcmsgaXMgZG9uZSwgc28gcmVzZXQgdGhlIGludGVycnVwdCAqLworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpyZXNldCBpbnRlcnJ1cHQgZnJvbSBzYW1wbGUgY291bnRlclxuIik7CisJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCX0KKworCS8qIFZhbHVlcyBhcmUgbm93IGF2YWlsYWJsZSwgc28gd2FrZSB1cCB3YWl0aW5nIHByb2Nlc3MgKi8KKwlpZiAobWU0MDAwX2J1Zl9jb3VudChhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOldha2UgdXAgd2FpdGluZyBwcm9jZXNzXG4iKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYoYWlfY29udGV4dC0+d2FpdF9xdWV1ZSkpOworCX0KKworCS8qIElmIHRoZXJlIGlzIG5vIHNwYWNlIGxlZnQgaW4gdGhlIGJ1ZmZlciwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJaWYgKCFtZTQwMDBfYnVmX3NwYWNlKGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpEaXNhYmxlIEludGVycnVwdCBiZWNhdXNlIG5vIHNwYWNlIGxlZnQgaW4gYnVmZmVyXG4iKTsKKwkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8CisJCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9MRV9JUlEpOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9CisJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKworI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKKwlyZHRzY2woYWZ0ZXIpOworCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOm1lNDAwMF9haV9pc3IoKTpUaW1lIGxhcHNlID0gJWx1XG4iLAorCSAgICAgICBhZnRlciAtIGJlZm9yZSk7CisjZW5kaWYKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9leHRfaW50X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlJU1JfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pc3IoKSBpcyBleGVjdXRlZFxuIik7CisKKwlleHRfaW50X2NvbnRleHQgPSBkZXZfaWQ7CisKKwkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCisJaWYgKGlycSAhPSBleHRfaW50X2NvbnRleHQtPmlycSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pc3IoKTppbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCisJCQkgICBpcnEpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJgorCSAgICBNRTQwMDBfSVJRX1NUQVRVU19CSVRfRVgpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaXNyKCk6RXh0ZXJuYWwgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCQl0bXAgPSBtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJCWV4dF9pbnRfY29udGV4dC0+aW50X2NvdW50Kys7CisKKwkJaWYgKGV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0cikgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWUyNjAwX2V4dF9pbnRfaXNyKCk6U2VuZCBzaWduYWwgdG8gcHJvY2Vzc1xuIik7CisJCQlraWxsX2Zhc3luYygmZXh0X2ludF9jb250ZXh0LT5mYXN5bmNfcHRyLCBTSUdJTywKKwkJCQkgICAgUE9MTF9JTik7CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgX19leGl0IG1lNDAwMF9tb2R1bGVfZXhpdCh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmJvYXJkX3A7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKworCUNBTExfUERFQlVHKCJjbGVhbnVwX21vZHVsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0VYVF9JTlRfTkFNRSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0NOVF9OQU1FKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRElPX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FJX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FPX05BTUUpOworCisJcmVtb3ZlX3Byb2NfZW50cnkoIm1lNDAwMCIsIE5VTEwpOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZTQwMDBfZHJpdmVyKTsKKworCS8qIFJlc2V0IHRoZSBib2FyZHMgKi8KKwlmb3IgKGJvYXJkX3AgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJICAgICBib2FyZF9wICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBib2FyZF9wID0gYm9hcmRfcC0+bmV4dCkgeworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShib2FyZF9wLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJbWU0MDAwX3Jlc2V0X2JvYXJkKGJvYXJkX2luZm8pOworCX0KKworCWNsZWFyX2JvYXJkX2luZm9fbGlzdCgpOworfQorCittb2R1bGVfZXhpdChtZTQwMDBfbW9kdWxlX2V4aXQpOworCitzdGF0aWMgaW50IG1lNDAwMF9yZWFkX3Byb2NtZW0oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGNvdW50LAorCQkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCWludCBsaW1pdCA9IGNvdW50IC0gMTAwMDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlxuTUU0MDAwIERSSVZFUiBWRVJTSU9OICVYLiVYLiVYXG5cbiIsCisJCSAgICAgICAoTUU0MDAwX0RSSVZFUl9WRVJTSU9OICYgMHhGRjAwMDApID4+IDE2LAorCQkgICAgICAgKE1FNDAwMF9EUklWRVJfVkVSU0lPTiAmIDB4RkYwMCkgPj4gOCwKKwkJICAgICAgIChNRTQwMDBfRFJJVkVSX1ZFUlNJT04gJiAweEZGKSk7CisKKwkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJICAgICAocHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSAmJiAobGVuIDwgbGltaXQpOworCSAgICAgcHRyID0gcHRyLT5uZXh0KSB7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkJvYXJkIG51bWJlciAlZDpcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfY291bnQpOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICItLS0tLS0tLS0tLS0tLS1cbiIpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUExYIGJhc2UgcmVnaXN0ZXIgPSAweCVsWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQTFggYmFzZSByZWdpc3RlciBzaXplID0gMHglbFhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2Vfc2l6ZSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJNRTQwMDAgYmFzZSByZWdpc3RlciA9IDB4JWxYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIk1FNDAwMCBiYXNlIHJlZ2lzdGVyIHNpemUgPSAweCVsWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZV9zaXplKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlNlcmlhbCBudW1iZXIgPSAweCVYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnNlcmlhbF9ubyk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJIYXJkd2FyZSByZXZpc2lvbiA9IDB4JVhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+aHdfcmV2aXNpb24pOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiVmVuZG9yIGlkID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT52ZW5kb3JfaWQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiRGV2aWNlIGlkID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5kZXZpY2VfaWQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUENJIGJ1cyBudW1iZXIgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wY2lfYnVzX25vKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBDSSBkZXZpY2UgbnVtYmVyID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGNpX2Rldl9ubyk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQQ0kgZnVuY3Rpb24gbnVtYmVyID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGNpX2Z1bmNfbm8pOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJJUlEgPSAldVxuIiwgYm9hcmRfaW5mby0+aXJxKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwKKwkJCSAgICAiQ291bnQgb2YgaW50ZXJydXB0cyBzaW5jZSBtb2R1bGUgd2FzIGxvYWRlZCA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmlycV9jb3VudCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGFuYWxvZyBvdXRwdXRzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgYW5hbG9nIG91dHB1dCBmaWZvcyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBhbmFsb2cgaW5wdXRzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICJDb3VudCBvZiBzYW1wbGUgYW5kIGhvbGQgZGV2aWNlcyBmb3IgYW5hbG9nIGlucHV0ID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuc2hfY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICJBbmFsb2cgZXh0ZXJuYWwgdHJpZ2dlciBhdmFpbGFibGUgZm9yIGFuYWxvZyBpbnB1dCA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmV4X3RyaWdfYW5hbG9nKTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgZGlnaXRhbCBwb3J0cyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmRpby5jb3VudCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGNvdW50ZXIgZGV2aWNlcyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmNudC5jb3VudCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBSSBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FJX0NUUkxfUkVHKSk7CisKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiQU8gMCBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJICAgTUU0MDAwX0FPXzAwX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAwIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMF9TVEFUVVNfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAxIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDFfQ1RSTF9SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDEgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDIgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMl9DVFJMX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMiBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMyBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAzX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAzIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wM19TVEFUVVNfUkVHKSk7CisJfQorCisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNWU0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5oCkBAIC0wLDAgKzEsOTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAoc3VwcG9ydEBtZWlsaGF1cy5kZSkKKyAqCisgKiBTb3VyY2UgRmlsZSA6IG1lNDAwMC5oCisgKiBBdXRob3IgICAgICA6IEdHIChHdWVudGVyIEdlYmhhcmR0KSAgPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisgKi8KKworI2lmbmRlZiBfTUU0MDAwX0hfCisjZGVmaW5lIF9NRTQwMDBfSF8KKworI2lmZGVmIF9fS0VSTkVMX18KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBUaGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHJlbGVhc2UKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfRFJJVkVSX1ZFUlNJT04gIDB4MTAwMDkJLy8gVmVyc2lvbiAxLjAwLjA5CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRGVidWcgc2VjdGlvbgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjdW5kZWYgTUU0MDAwX0NBTExfREVCVUcJLy8gRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKKyN1bmRlZiBNRTQwMDBfSVNSX0RFQlVHCQkvLyBEZWJ1ZyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQorI3VuZGVmIE1FNDAwMF9QT1JUX0RFQlVHCS8vIERlYnVnIHBvcnQgYWNjZXNzCisjdW5kZWYgTUU0MDAwX0RFQlVHCQkvLyBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMKKworI2lmZGVmIE1FNDAwMF9DQUxMX0RFQlVHCisjdW5kZWYgQ0FMTF9QREVCVUcKKyNkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjIGRlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisjdW5kZWYgSVNSX1BERUJVRworI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciTUU0MDAwOiIgZm10LCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworI2lmZGVmIE1FNDAwMF9QT1JUX0RFQlVHCisjdW5kZWYgUE9SVF9QREVCVUcKKyNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIFBPUlRfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworI2lmZGVmIE1FNDAwMF9ERUJVRworI3VuZGVmIFBERUJVRworI2RlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUVJTEhBVVMgMHgxNDAyCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NTAJMHg0NjUwCS8vIExvdyBDb3N0IHZlcnNpb24KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MAkweDQ2NjAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MEkJMHg0NjYxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBTCTB4NDY2MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSVMJMHg0NjYzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MAkweDQ2NzAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MEkJMHg0NjcxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBTCTB4NDY3MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwSVMJMHg0NjczCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MAkweDQ2ODAJLy8gU3RhbmRhcmQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MEkJMHg0NjgxCS8vIElzb2xhdGVkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSVMJMHg0NjgzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEZXZpY2UgbmFtZXMsIGZvciBlbnRyaWVzIGluIC9wcm9jLy4uCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX05BTUUJCSJtZTQwMDAiCisjZGVmaW5lIE1FNDAwMF9BT19OQU1FCQkibWU0MDAwX2FvIgorI2RlZmluZSBNRTQwMDBfQUlfTkFNRQkJIm1lNDAwMF9haSIKKyNkZWZpbmUgTUU0MDAwX0RJT19OQU1FCQkibWU0MDAwX2RpbyIKKyNkZWZpbmUgTUU0MDAwX0NOVF9OQU1FCQkibWU0MDAwX2NudCIKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfTkFNRQkibWU0MDAwX2V4dF9pbnQiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgTUUtNDAwMCBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcJCQkweDAwCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDBfU1RBVFVTX1JFRwkJCTB4MDQJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wMF9GSUZPX1JFRwkJCTB4MDgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHCQkJMHgwQwkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1RJTUVSX1JFRwkJCTB4MTAJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX0NUUkxfUkVHCQkJMHgxOAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcJCQkweDFDCS8vIFIvXworI2RlZmluZSBNRTQwMDBfQU9fMDFfRklGT19SRUcJCQkweDIwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDFfU0lOR0xFX1JFRwkJCTB4MjQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9USU1FUl9SRUcJCQkweDI4CS8vIF8vVworCisjZGVmaW5lIE1FNDAwMF9BT18wMl9DVFJMX1JFRwkJCTB4MzAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FPXzAyX0ZJRk9fUkVHCQkJMHgzOAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcJCQkweDNDCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvLyBfL1cKKworI2RlZmluZSBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcJCQkweDQ4CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDNfU1RBVFVTX1JFRwkJCTB4NEMJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wM19GSUZPX1JFRwkJCTB4NTAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHCQkJMHg1NAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1RJTUVSX1JFRwkJCTB4NTgJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfUkVHCQkJMHg3NAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19SRUcJCQkweDc0CS8vIFIvXworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRwkJMHg3OAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX0RBVEFfUkVHCQkJMHg3QwkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHCQkweDgwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHCQkweDg0CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9MT1dfUkVHCQkweDg4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9ISUdIX1JFRwkJMHg4QwkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUcJMHg5MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0hJR0hfUkVHCTB4OTQJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFSVF9SRUcJCQkweDk4CS8vIFIvXworCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLy8gUi9fCisKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzBfUkVHCQkJMHhBMAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzFfUkVHCQkJMHhBNAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzJfUkVHCQkJMHhBOAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzNfUkVHCQkJMHhBQwkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0RJT19ESVJfUkVHCQkJMHhCMAkvLyBSL1cKKworI2RlZmluZSBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWAkJCTB4QjQJLy8gUi9XCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX1JFRwkJCTB4QjgJLy8gUi9XCisKKyNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcJCTB4QkMJLy8gLS9XCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NBTVBMRV9DT1VOVEVSX1JFRwkJMHhDMAkvLyBfL1cKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBWYWx1ZSB0byBhZGp1c3QgRGVtdXgKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1ZBTFVFICAgICAgICAgICAgMHg0QworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENvdW50ZXIgYmFzZSByZWdpc3RlciBvZmZzZXRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzBfUkVHCQkweDAwCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8xX1JFRwkJMHgwMQorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMl9SRUcJCTB4MDIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX1JFRwkJCTB4MDMKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBQTFggYmFzZSByZWdpc3RlciBvZmZzZXRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUExYX0lOVENTUgkweDRDCS8vIEludGVycnVwdCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKyNkZWZpbmUgUExYX0lDUgkJMHg1MAkvLyBJbml0aWFsaXphdGlvbiBjb250cm9sIHJlZ2lzdGVyCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIFBMWF9JQ1NSIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX0VOICAgICAgICAgICAgIDB4MDEJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9QT0wgICAgICAgICAgICAweDAyCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgcG9sYXJpdHkgaXMgYWN0aXZlIGhpZ2ggKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX1NUQVRFICAgICAgICAgIDB4MDQJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBhY3RpdmUgKHIvXykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX0VOICAgICAgICAgICAgIDB4MDgJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9QT0wgICAgICAgICAgICAweDEwCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgcG9sYXJpdHkgaXMgYWN0aXZlIGhpZ2ggKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX1NUQVRFICAgICAgICAgIDB4MjAJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBhY3RpdmUgIChyL18pCisjZGVmaW5lIFBMWF9JTlRDU1JfUENJX0lOVF9FTiAgICAgICAgICAgICAgICAweDQwCS8vIElmIHNldCwgUENJIGludGVycnVwdCBpcyBlbmFibGVkIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfU09GVF9JTlQgICAgICAgICAgICAgICAgICAweDgwCS8vIElmIHNldCwgYSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIChyL3cpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIFBMWF9JQ1IgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUCQkweDAxMDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVAkJMHgwMjAwMDAwMAorI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEUJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX1JFQUQJCQkweDA4MDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9WQUxJRAkJMHgxMDAwMDAwMAorCisjZGVmaW5lIFBMWF9JQ1JfTUFTS19FRVBST00JCQkweDFGMDAwMDAwCisKKyNkZWZpbmUgRUVQUk9NX0RFTEFZCQkJCTEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FPX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMAkJMHgwMDEKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMQkJMHgwMDIKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfTUFTS19NT0RFCQkweDAwMworI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUAkJCTB4MDA0CisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTwkJMHgwMDgKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHCTB4MDEwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0UJCTB4MDIwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUAkweDA4MAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPCQkweDEwMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUQkJMHgyMDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX1JFU0VUX0lSUQkJMHg0MDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfQk9USAkJMHg4MDAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FPX1NUQVRVU19SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00JCTB4MDEKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CSVRfRkYJCQkweDAyCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGCQkJMHgwNAorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9FRgkJCTB4MDgKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FJX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX01PREVfMAkJMHgwMDAwMDAwMQorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTU9ERV8xCQkweDAwMDAwMDAyCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9NT0RFXzIJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xECQkweDAwMDAwMDA4CisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUAkweDAwMDAwMDEwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPCQkweDAwMDAwMDQwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8JCTB4MDAwMDAwODAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0ZVTExTQ0FMRQkJMHgwMDAwMDEwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfT0ZGU0VUCQkweDAwMDAwMjAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0FOQUxPRwkweDAwMDAwNDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHCQkweDAwMDAwODAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkcJMHgwMDAwMTAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRCQkweDAwMDAyMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlFfUkVTRVQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0xFX0lSUQkJMHgwMDAwODAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRX1JFU0VUCQkweDAwMDEwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEJCTB4MDAwMjAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVAkJMHgwMDA0MDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRCQkweDAwMDgwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlFfUkVTRVQJCTB4MDAxMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NDX1JFTE9BRAkJMHgwMDIwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RICQkweDgwMDAwMDAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9BSV9TVEFUVVNfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfQ0hBTk5FTAkJMHgwMDQwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9DSEFOTkVMCQkweDAwODAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0NIQU5ORUwJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQQkJMHgwMjAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBCQkweDA0MDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEJCTB4MDgwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfTEUJCQkweDEwMDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTQkJMHgyMDAwMDAwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfSVJRX1NUQVRVU19SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfRVgJCTB4MDEKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0xFCQkweDAyCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRgkJMHgwNAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMF9IRgkJMHgwOAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMV9IRgkJMHgxMAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fMl9IRgkJMHgyMAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQU9fM19IRgkJMHg0MAorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfU0MJCTB4ODAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0RJT19DVFJMX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wCQkwWDAwMDEKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEJCTBYMDAwMgorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMgkJMFgwMDA0CisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zCQkwWDAwMDgKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQJCTBYMDAxMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNQkJMFgwMDIwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82CQkwWDAwNDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcJCTBYMDA4MAorCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMAkJMFgwMTAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMQkJMFgwMjAwCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMAkJMFgwNDAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzEJCTBYMDgwMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8yCQkwWDEwMDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMwkJMFgyMDAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9DTlRfQ1RSTF9SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMCAgMHgwMAorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMSAgMHg0MAorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMiAgMHg4MAorCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8wICAgICAweDAwCS8vIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8xICAgICAweDAyCS8vIFJldHJpZ2dlcmFibGUgT25lLVNob3QKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzIgICAgIDB4MDQJLy8gQXN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzMgICAgIDB4MDYJLy8gU3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfNCAgICAgMHgwOAkvLyBDb3VudGVyIHN0YXJ0IGJ5IHNvZnR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzUgICAgIDB4MEEJLy8gQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIG1pbm9yIGRldmljZSBudW1iZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBBT19CT0FSRChkZXYpICgoTUlOT1IoZGV2KSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgQU9fUE9SVChkZXYpICAoKE1JTk9SKGRldikgPj4gMikgJiAweEYpCisjZGVmaW5lIEFPX01PREUoZGV2KSAgKE1JTk9SKGRldikgJiAweDMpCisKKyNkZWZpbmUgQUlfQk9BUkQoZGV2KSAoKE1JTk9SKGRldikgPj4gMykgJiAweDFGKQorI2RlZmluZSBBSV9NT0RFKGRldikgIChNSU5PUihkZXYpICYgMHg3KQorCisjZGVmaW5lIERJT19CT0FSRChkZXYpIChNSU5PUihkZXYpKQorCisjZGVmaW5lIENOVF9CT0FSRChkZXYpIChNSU5PUihkZXYpKQorCisjZGVmaW5lIEVYVF9JTlRfQk9BUkQoZGV2KSAoTUlOT1IoZGV2KSkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDaXJjdWxhciBidWZmZXIgdXNlZCBmb3IgYW5hbG9nIGlucHV0L291dHB1dCByZWFkcy93cml0ZXMuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiB7CisJczE2ICpidWY7CisJaW50IHZvbGF0aWxlIGhlYWQ7CisJaW50IHZvbGF0aWxlIHRhaWw7Cit9IG1lNDAwMF9jaXJjX2J1Zl90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FvX2luZm8geworCWludCBjb3VudDsKKwlpbnQgZmlmb19jb3VudDsKK30gbWU0MDAwX2FvX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2luZm8geworCWludCBjb3VudDsKKwlpbnQgc2hfY291bnQ7CisJaW50IGRpZmZfY291bnQ7CisJaW50IGV4X3RyaWdfYW5hbG9nOworfSBtZTQwMDBfYWlfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2luZm8geworCWludCBjb3VudDsKK30gbWU0MDAwX2Rpb19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfaW5mbyB7CisJaW50IGNvdW50OworfSBtZTQwMDBfY250X2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2JvYXJkIHsKKwl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CisJbWU0MDAwX2FvX2luZm9fdCBhbzsKKwltZTQwMDBfYWlfaW5mb190IGFpOworCW1lNDAwMF9kaW9faW5mb190IGRpbzsKKwltZTQwMDBfY250X2luZm9fdCBjbnQ7Cit9IG1lNDAwMF9ib2FyZF90OworCitzdGF0aWMgbWU0MDAwX2JvYXJkX3QgbWU0MDAwX2JvYXJkc1tdID0geworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2MTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7M319LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfX0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYwLCB7MiwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYxLCB7MiwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYyLCB7MiwgMH0sIHsxNiwgOCwgMCwgMH0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYzLCB7MiwgMH0sIHsxNiwgOCwgMCwgMH0sIHs0fSwgezN9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzAsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcxLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzMsIHs0LCAwfSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODAsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgxLCB7NCwgNH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MiwgezQsIDR9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODMsIHs0LCA0fSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKworCXswfSwKK307CisKKyNkZWZpbmUgTUU0MDAwX0JPQVJEX1ZFUlNJT05TIChzaXplb2YobWU0MDAwX2JvYXJkcykgLyBzaXplb2YobWU0MDAwX2JvYXJkX3QpIC0gMSkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBQQ0kgZGV2aWNlIHRhYmxlLgorICBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1lNDAwMF9wY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtZTQwMDBfcGNpX3RhYmxlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBHbG9iYWwgYm9hcmQgYW5kIHN1YmRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIExpc3Qgb2YgYWxsIGRldGVjdGVkIGJvYXJkcworCWludCBib2FyZF9jb3VudDsJLy8gSW5kZXggb2YgdGhlIGJvYXJkIGFmdGVyIGRldGVjdGlvbgorCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZTsJLy8gUExYIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgY2lyY3VpdAorCXVuc2lnbmVkIGxvbmcgcHJvZ3JhbV9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3MgdG8gc2V0IHRoZSBwcm9ncmFtIHBpbiBmb3IgdGhlIHhpbGlueAorCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZV9zaXplOwkvLyBQTFggcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZV9zaXplOwkvLyBNRTQwMDAgcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyB0aW1lcl9yZWdiYXNlX3NpemU7CS8vIFRpbWVyIGNpcmN1aXQgcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2Vfc2l6ZTsJLy8gU2l6ZSBvZiBwcm9ncmFtIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwCisKKwl1bnNpZ25lZCBpbnQgc2VyaWFsX25vOwkvLyBTZXJpYWwgbnVtYmVyIG9mIHRoZSBib2FyZAorCXVuc2lnbmVkIGNoYXIgaHdfcmV2aXNpb247CS8vIEhhcmR3YXJlIHJldmlzaW9uIG9mIHRoZSBib2FyZAorCXVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZDsJLy8gTWVpbGhhdXMgdmVuZG9yIGlkICgweDE0MDIpCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvLyBEZXZpY2UgSUQKKworCWludCBwY2lfYnVzX25vOwkJLy8gUENJIGJ1cyBudW1iZXIKKwlpbnQgcGNpX2Rldl9ubzsJCS8vIFBDSSBkZXZpY2UgbnVtYmVyCisJaW50IHBjaV9mdW5jX25vOwkvLyBQQ0kgZnVuY3Rpb24gbnVtYmVyCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcDsJLy8gR2VuZXJhbCBQQ0kgaW5mb3JtYXRpb24KKworCW1lNDAwMF9ib2FyZF90ICpib2FyZF9wOwkvLyBIb2xkcyB0aGUgYm9hcmQgY2FwYWJpbGl0aWVzCisKKwl1bnNpZ25lZCBpbnQgaXJxOwkvLyBJUlEgYXNzaWduZWQgZnJvbSB0aGUgUENJIEJJT1MKKwl1bnNpZ25lZCBpbnQgaXJxX2NvdW50OwkvLyBDb3VudCBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzCisKKwlzcGlubG9ja190IHByZWxvYWRfbG9jazsJLy8gR3VhcmRzIHRoZSBhbmFsb2cgb3V0cHV0IHByZWxvYWQgcmVnaXN0ZXIKKwlzcGlubG9ja190IGFpX2N0cmxfbG9jazsJLy8gR3VhcmRzIHRoZSBhbmFsb2cgaW5wdXQgY29udHJvbCByZWdpc3RlcgorCisJc3RydWN0IGxpc3RfaGVhZCBhb19jb250ZXh0X2xpc3Q7CS8vIExpc3Qgd2l0aCBhbmFsb2cgb3V0cHV0IHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgKmFpX2NvbnRleHQ7CS8vIEFuYWxvZyBpbnB1dCAgc3BlY2lmaWMgY29udGV4dAorCXN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgKmRpb19jb250ZXh0OwkvLyBEaWdpdGFsIEkvTyBzcGVjaWZpYyBjb250ZXh0CisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCAqY250X2NvbnRleHQ7CS8vIENvdW50ZXIgc3BlY2lmaWMgY29udGV4dAorCXN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0ICpleHRfaW50X2NvbnRleHQ7CS8vIEV4dGVybmFsIGludGVycnVwdCBzcGVjaWZpYyBjb250ZXh0Cit9IG1lNDAwMF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9hb19jb250ZXh0X3QKKwlpbnQgaW5kZXg7CQkvLyBJbmRleCBpbiB0aGUgbGlzdAorCWludCBtb2RlOwkJLy8gSW5kaWNhdGVzIG1vZGUgKDAgPSBzaW5nbGUsIDEgPSB3cmFwYXJvdW5kLCAyID0gY29udGlub3VzKQorCWludCBkYWNfaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJc3BpbmxvY2tfdCBpbnRfbG9jazsJLy8gVXNlZCB3aGVuIGxvY2tpbmcgb3V0IGludGVycnVwdHMKKwltZTQwMDBfY2lyY19idWZfdCBjaXJjX2J1ZjsJLy8gQ2lyY3VsYXIgYnVmZmVyCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJLy8gV2FpdCBxdWV1ZSB0byBzbGVlcCB3aGlsZSBibG9ja2luZyB3cml0ZQorCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJdW5zaWduZWQgaW50IGlycTsJLy8gVGhlIGlycSBhc3NvY2lhdGVkIHdpdGggdGhpcyBBREMKKwlpbnQgdm9sYXRpbGUgcGlwZV9mbGFnOwkvLyBJbmRpY2F0ZXMgYnJva2VuIHBpcGUgc2V0IGZyb20gbWU0MDAwX2FvX2lzcigpCisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIHN0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBmaWZvX3JlZzsKKwl1bnNpZ25lZCBsb25nIHNpbmdsZV9yZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9yZWc7CisJdW5zaWduZWQgbG9uZyBpcnFfc3RhdHVzX3JlZzsKKwl1bnNpZ25lZCBsb25nIHByZWxvYWRfcmVnOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcDsJLy8gUXVldWUgZm9yIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24KK30gbWU0MDAwX2FvX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2FpX2luZm9fdAorCWludCBtb2RlOwkJLy8gSW5kaWNhdGVzIG1vZGUKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJc3BpbmxvY2tfdCBpbnRfbG9jazsJLy8gVXNlZCB3aGVuIGxvY2tpbmcgb3V0IGludGVycnVwdHMKKwlpbnQgbnVtYmVyOwkJLy8gTnVtYmVyIG9mIHRoZSBEQUMKKwl1bnNpZ25lZCBpbnQgaXJxOwkvLyBUaGUgaXJxIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFEQworCW1lNDAwMF9jaXJjX2J1Zl90IGNpcmNfYnVmOwkvLyBDaXJjdWxhciBidWZmZXIKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkvLyBXYWl0IHF1ZXVlIHRvIHNsZWVwIHdoaWxlIGJsb2NraW5nIHJlYWQKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19wOwkvLyBRdWV1ZSBmb3IgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbgorCisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIHN0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX2xpc3RfcmVnOworCXVuc2lnbmVkIGxvbmcgZGF0YV9yZWc7CisJdW5zaWduZWQgbG9uZyBjaGFuX3RpbWVyX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNoYW5fcHJlX3RpbWVyX3JlZzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXJfbG93X3JlZzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXJfaGlnaF9yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3ByZV90aW1lcl9sb3dfcmVnOworCXVuc2lnbmVkIGxvbmcgc2Nhbl9wcmVfdGltZXJfaGlnaF9yZWc7CisJdW5zaWduZWQgbG9uZyBzdGFydF9yZWc7CisJdW5zaWduZWQgbG9uZyBpcnFfc3RhdHVzX3JlZzsKKwl1bnNpZ25lZCBsb25nIHNhbXBsZV9jb3VudGVyX3JlZzsKKworCXVuc2lnbmVkIGxvbmcgY2hhbl90aW1lcjsKKwl1bnNpZ25lZCBsb25nIGNoYW5fcHJlX3RpbWVyOworCXVuc2lnbmVkIGxvbmcgc2Nhbl90aW1lcl9sb3c7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2hpZ2g7CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX2xpc3RfY291bnQ7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfY291bnRlcjsKKwlpbnQgc2FtcGxlX2NvdW50ZXJfcmVsb2FkOworfSBtZTQwMDBfYWlfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2Rpb19jb250ZXh0X3QKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJaW50IG51bWJlcjsKKwlpbnQgZGlvX2NvdW50OworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJdW5zaWduZWQgbG9uZyBkaXJfcmVnOworCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzBfcmVnOworCXVuc2lnbmVkIGxvbmcgcG9ydF8xX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfMl9yZWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzNfcmVnOworfSBtZTQwMDBfZGlvX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9kaW9fY29udGV4dF90CisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCWludCBudW1iZXI7CisJaW50IGNudF9jb3VudDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyXzBfcmVnOworCXVuc2lnbmVkIGxvbmcgY291bnRlcl8xX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMl9yZWc7Cit9IG1lNDAwMF9jbnRfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZXh0X2ludF9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9kaW9fY29udGV4dF90CisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCWludCBudW1iZXI7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW50X2NvdW50OworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcHRyOworCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBpcnFfc3RhdHVzX3JlZzsKK30gbWU0MDAwX2V4dF9pbnRfY29udGV4dF90OworCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBBcHBsaWNhdGlvbiBpbmNsdWRlIHNlY3Rpb24gc3RhcnRzIGhlcmUKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBhbmFsb2cgaW5wdXQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdlbmVyYWwgc3R1ZmYgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0ZJRk9fQ09VTlQJCTIwNDgKKworI2RlZmluZSBNRTQwMDBfQUlfTUlOX1RJQ0tTCQk2NgorI2RlZmluZSBNRTQwMDBfQUlfTUFYX1NDQU5fVElDS1MJMHhGRkZGRkZGRkZGTEwKKworI2RlZmluZSBNRTQwMDBfQUlfQlVGRkVSX1NJWkUgCQkoMzIgKiAxMDI0KQkvLyBTaXplIGluIGJ5dGVzCisKKyNkZWZpbmUgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVAkJKChNRTQwMDBfQUlfQlVGRkVSX1NJWkUpIC8gMikJLy8gU2l6ZSBpbiB2YWx1ZXMKKworLyogQ2hhbm5lbCBsaXN0IGRlZmluZXMgYW5kIG1hc2tzICovCisjZGVmaW5lIE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfQ09VTlQJCTEwMjQKKworI2RlZmluZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQJMHgwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMCTB4MDIwCisKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8xMAkJMHgwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8yXzUJMHgwNDAKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMTAJMHgwODAKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMl81CTB4MEMwCisKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfTEFTVF9FTlRSWQkJMHgxMDAKKworLyogRXh0ZXJuYWwgdHJpZ2dlciBkZWZpbmVzICovCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX1NPRlRXQVJFCQkweDAJLy8gVXNlIG9ubHkgd2l0aCBBUEkKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0RJR0lUQUwJCTB4MQorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfQU5BTE9HCQkweDIKKworI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9SSVNJTkcJMHgwCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcJMHgxCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX0JPVEgJCTB4MgorCisvKiBTYW1wbGUgYW5kIEhvbGQgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NJTVVMVEFORU9VU19ESVNBQkxFCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NJTVVMVEFORU9VU19FTkFCTEUJCTB4MQorCisvKiBEZWZpbmVzIGZvciB0aGUgU2FtcGxlIENvdW50ZXIgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NDX1JFTE9BRAkJCTB4MAorI2RlZmluZSBNRTQwMDBfQUlfU0NfT05DRQkJCTB4MQorCisvKiBNb2RlcyBmb3IgYW5hbG9nIGlucHV0ICovCisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9TSU5HTEUJCTB4MDAJLy8gQ2F0Y2ggb25lIHNpbmdsZSB2YWx1ZQorI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfU09GVFdBUkUJCTB4MDEJLy8gQ29udGlub3VzIHNhbXBsaW5nIHdpdGggc29mdHdhcmUgc3RhcnQKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX0VYVAkJCTB4MDIJLy8gQ29udGlub3VzIHNhbXBsaW5nIHdpdGggZXh0ZXJuYWwgdHJpZ2dlciBzdGFydAorI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfRVhUX1NJTkdMRV9WQUxVRQkweDAzCS8vIFNhbXBsZSBvbmUgdmFsdWUgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfRVhUX1NJTkdMRV9DSEFOTElTVAkweDA0CS8vIFNhbXBsZSBvbmUgY2hhbm5lbCBsaXN0IGJ5IGV4dGVybmFsIHRyaWdnZXIKKworLyogU3RhdXMgb2YgQUkgRlNNICovCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfSURMRQkJCTB4MAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JVU1kJCQkweDEKKworLyogVm9sdGFnZXMgZm9yIGNhbGlicmF0aW9uICovCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfVU5JX09GRlNFVAkJMTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9GVUxMU0NBTEUJCTk5NTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX0JJX09GRlNFVAkJMC4wCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfQklfRlVMTFNDQUxFCQk5OTUwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9VTklfT0ZGU0VUCQkxMC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX0ZVTExTQ0FMRQkJMjQ1MC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfQklfT0ZGU0VUCQkwLjAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9CSV9GVUxMU0NBTEUJCTI0NTAuMEUtMworCisvKiBJZGVhbCBkaWdpdHMgZm9yIGNhbGlicmF0aW9uICovCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfVU5JX09GRlNFVF9ESUdJVFMJKC0zMjcwMikKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9VTklfRlVMTFNDQUxFX0RJR0lUUwkzMjQ0MAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX0JJX09GRlNFVF9ESUdJVFMJMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX0JJX0ZVTExTQ0FMRV9ESUdJVFMJMzI2MDQKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9VTklfT0ZGU0VUX0RJR0lUUwkoLTMyNTA1KQorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X1VOSV9GVUxMU0NBTEVfRElHSVRTCTMxNDU3CisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfQklfT0ZGU0VUX0RJR0lUUwkwCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfQklfRlVMTFNDQUxFX0RJR0lUUwkzMjExMworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGFuYWxvZyBvdXRwdXQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdlbmVyYWwgc3R1ZmYgKi8KKyNkZWZpbmUgTUU0MDAwX0FPX0ZJRk9fQ09VTlQJCQkoNCAqIDEwMjQpCisKKyNkZWZpbmUgTUU0MDAwX0FPX01JTl9USUNLUwkJCTY2CisKKyNkZWZpbmUgTUU0MDAwX0FPX0JVRkZFUl9TSVpFIAkJCSgzMiAqIDEwMjQpCS8vIFNpemUgaW4gYnl0ZXMKKworI2RlZmluZSBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIAkJCSgoTUU0MDAwX0FPX0JVRkZFUl9TSVpFKSAvIDIpCS8vIFNpemUgaW4gdmFsdWVzCisKKy8qIENvbnZlcnNpb24gbW9kZXMgZm9yIGFuYWxvZyBvdXRwdXQgKi8KKyNkZWZpbmUgTUU0MDAwX0FPX0NPTlZfTU9ERV9TSU5HTEUJCTB4MAorI2RlZmluZSBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQJCTB4MQorI2RlZmluZSBNRTQwMDBfQU9fQ09OVl9NT0RFX0NPTlRJTlVPVVMJCTB4MgorCisvKiBUcmlnZ2VyIHNldHVwICovCisjZGVmaW5lIE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX1JJU0lORwkweDAKKyNkZWZpbmUgTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfRkFMTElORwkweDEKKyNkZWZpbmUgTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfQk9USAkJMHgyCisKKy8qIFN0YXR1cyBvZiBBTyBGU00gKi8KKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19JRExFCQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQlVTWQkJCTB4MQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGVlcHJvbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFECQkJMHgxODAKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRU5BQkxFCQkweDEzMAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9XUklURV9ESVNBQkxFCQkweDEwMAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9XUklURQkJCTB4MTQwMDAwMAorCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFECQk5CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURV9FTkFCTEUJOQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRElTQUJMRQk5CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURQkJMjUKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0hJR0gJCTB4MzIKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9MT1cJCTB4MzMKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX09GRlNFVAkweDM0CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfRlVMTFNDQUxFCTB4MzUKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX09GRlNFVAkweDM2CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9GVUxMU0NBTEUJMHgzNworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9PRkZTRVQJMHgzOAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9GVUxMU0NBTEUJMHgzOQorCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfT0ZGU0VUCTB4M0EKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9GVUxMU0NBTEUJMHgzQgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfT0ZGU0VUCTB4M0MKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX0ZVTExTQ0FMRQkweDNECisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX09GRlNFVAkweDNFCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX0ZVTExTQ0FMRQkweDNGCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfTEVOR1RICQk2CisjZGVmaW5lIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgJCTE2CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgZGlnaXRhbCBJL08KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0EJCTB4MAorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfQgkJMHgxCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9DCQkweDIKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0QJCTB4MworCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9JTlBVVAkJMHgwCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQJCTB4MQorI2RlZmluZSBNRTQwMDBfRElPX0ZJRk9fTE9XCQkweDIKKyNkZWZpbmUgTUU0MDAwX0RJT19GSUZPX0hJR0gJCTB4MworCisjZGVmaW5lIE1FNDAwMF9ESU9fRlVOQ1RJT05fUEFUVEVSTgkweDAKKyNkZWZpbmUgTUU0MDAwX0RJT19GVU5DVElPTl9ERU1VWAkweDEKKyNkZWZpbmUgTUU0MDAwX0RJT19GVU5DVElPTl9NVVgJCTB4MgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGNvdW50ZXJzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8wICAwCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8xICAxCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8yICAyCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzAgICAgIDAJLy8gQ2hhbmdlIHN0YXRlIGlmIHplcm8gY3Jvc3NpbmcKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzEgICAgIDEJLy8gUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdAorI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMiAgICAgMgkvLyBBc3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMyAgICAgMwkvLyBTeW1tZXRyaWNhbCBkaXZpZGVyCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV80ICAgICA0CS8vIENvdW50ZXIgc3RhcnQgYnkgc29mdHdhcmUgdHJpZ2dlcgorI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNSAgICAgNQkvLyBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBHZW5lcmFsIHR5cGUgZGVmaW5pdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF91c2VyX2luZm8geworCWludCBib2FyZF9jb3VudDsJLy8gSW5kZXggb2YgdGhlIGJvYXJkIGFmdGVyIGRldGVjdGlvbgorCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2U7CS8vIFBMWCBjb25maWd1cmF0aW9uIHNwYWNlIGJhc2UgYWRkcmVzcworCXVuc2lnbmVkIGxvbmcgbWU0MDAwX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZV9zaXplOwkvLyBQTFggcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZV9zaXplOwkvLyBNRTQwMDAgcmVnaXN0ZXIgc2V0IHNwYWNlCisJdW5zaWduZWQgbG9uZyBzZXJpYWxfbm87CS8vIFNlcmlhbCBudW1iZXIgb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgY2hhciBod19yZXZpc2lvbjsJLy8gSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvLyBNZWlsaGF1cyB2ZW5kb3IgaWQgKDB4MTQwMikKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CS8vIERldmljZSBJRAorCWludCBwY2lfYnVzX25vOwkJLy8gUENJIGJ1cyBudW1iZXIKKwlpbnQgcGNpX2Rldl9ubzsJCS8vIFBDSSBkZXZpY2UgbnVtYmVyCisJaW50IHBjaV9mdW5jX25vOwkvLyBQQ0kgZnVuY3Rpb24gbnVtYmVyCisJY2hhciBpcnE7CQkvLyBJUlEgYXNzaWduZWQgZnJvbSB0aGUgUENJIEJJT1MKKwlpbnQgaXJxX2NvdW50OwkJLy8gQ291bnQgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cworCisJaW50IGRyaXZlcl92ZXJzaW9uOwkvLyBWZXJzaW9uIG9mIHRoZSBkcml2ZXIgcmVsZWFzZQorCisJaW50IGFvX2NvdW50OwkJLy8gQ291bnQgb2YgYW5hbG9nIG91dHB1dCBjaGFubmVscworCWludCBhb19maWZvX2NvdW50OwkvLyBDb3VudCBmbyBhbmFsb2cgb3V0cHV0IGZpZm9zCisKKwlpbnQgYWlfY291bnQ7CQkvLyBDb3VudCBvZiBhbmFsb2cgaW5wdXQgY2hhbm5lbHMKKwlpbnQgYWlfc2hfY291bnQ7CS8vIENvdW50IG9mIHNhbXBsZSBhbmQgaG9sZCBkZXZpY2VzCisJaW50IGFpX2V4X3RyaWdfYW5hbG9nOwkvLyBGbGFnIHRvIGluZGljYXRlIGlmIGFuYWxvZ291cyBleHRlcm5hbCB0cmlnZ2VyIGlzIGF2YWlsYWJsZQorCisJaW50IGRpb19jb3VudDsJCS8vIENvdW50IG9mIGRpZ2l0YWwgSS9PIHBvcnRzCisKKwlpbnQgY250X2NvdW50OwkJLy8gQ291bnQgb2YgY291bnRlcnMKK30gbWU0MDAwX3VzZXJfaW5mb190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGFuYWxvZyBvdXRwdXQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19jaGFubmVsX2xpc3QgeworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyAqbGlzdDsKK30gbWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGFuYWxvZyBpbnB1dAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2NoYW5uZWxfbGlzdCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bnNpZ25lZCBsb25nICpsaXN0OworfSBtZTQwMDBfYWlfY2hhbm5lbF9saXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV90aW1lciB7CisJdW5zaWduZWQgbG9uZyBwcmVfY2hhbjsKKwl1bnNpZ25lZCBsb25nIGNoYW47CisJdW5zaWduZWQgbG9uZyBzY2FuX2xvdzsKKwl1bnNpZ25lZCBsb25nIHNjYW5faGlnaDsKK30gbWU0MDAwX2FpX3RpbWVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9jb25maWcgeworCW1lNDAwMF9haV90aW1lcl90IHRpbWVyOworCW1lNDAwMF9haV9jaGFubmVsX2xpc3RfdCBjaGFubmVsX2xpc3Q7CisJaW50IHNoOworfSBtZTQwMDBfYWlfY29uZmlnX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9zaW5nbGUgeworCWludCBjaGFubmVsOworCWludCByYW5nZTsKKwlpbnQgbW9kZTsKKwlzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Cit9IG1lNDAwMF9haV9zaW5nbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX3RyaWdnZXIgeworCWludCBtb2RlOworCWludCBlZGdlOworfSBtZTQwMDBfYWlfdHJpZ2dlcl90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfc2MgeworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IHJlbG9hZDsKK30gbWU0MDAwX2FpX3NjX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgZWVwcm9tCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZWVwcm9tIHsKKwl1bnNpZ25lZCBsb25nIGRhdGU7CisJc2hvcnQgdW5pXzEwX29mZnNldDsKKwlzaG9ydCB1bmlfMTBfZnVsbHNjYWxlOworCXNob3J0IHVuaV8yXzVfb2Zmc2V0OworCXNob3J0IHVuaV8yXzVfZnVsbHNjYWxlOworCXNob3J0IGJpXzEwX29mZnNldDsKKwlzaG9ydCBiaV8xMF9mdWxsc2NhbGU7CisJc2hvcnQgYmlfMl81X29mZnNldDsKKwlzaG9ydCBiaV8yXzVfZnVsbHNjYWxlOworCXNob3J0IGRpZmZfMTBfb2Zmc2V0OworCXNob3J0IGRpZmZfMTBfZnVsbHNjYWxlOworCXNob3J0IGRpZmZfMl81X29mZnNldDsKKwlzaG9ydCBkaWZmXzJfNV9mdWxsc2NhbGU7Cit9IG1lNDAwMF9lZXByb21fdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBkaWdpdGFsIEkvTworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2Rpb19jb25maWcgeworCWludCBwb3J0OworCWludCBtb2RlOworCWludCBmdW5jdGlvbjsKK30gbWU0MDAwX2Rpb19jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2Rpb19ieXRlIHsKKwlpbnQgcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7Cit9IG1lNDAwMF9kaW9fYnl0ZV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGNvdW50ZXJzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfY250IHsKKwlpbnQgY291bnRlcjsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKK30gbWU0MDAwX2NudF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfY250X2NvbmZpZyB7CisJaW50IGNvdW50ZXI7CisJaW50IG1vZGU7Cit9IG1lNDAwMF9jbnRfY29uZmlnX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGludDFfY291bnQ7CisJaW50IGludDJfY291bnQ7Cit9IG1lNDAwMF9pbnRfdHlwZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgaW9jdGxzIG9mIHRoZSBib2FyZAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNRTQwMDBfSU9DVExfTUFYTlIgNTAKKyNkZWZpbmUgTUU0MDAwX01BR0lDICd5JworI2RlZmluZSBNRTQwMDBfR0VUX1VTRVJfSU5GTyAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDAsIG1lNDAwMF91c2VyX2luZm9fdCkKKworI2RlZmluZSBNRTQwMDBfQU9fU1RBUlQgICAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDEsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1FNDAwMF9BT19TVE9QICAgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMikKKyNkZWZpbmUgTUU0MDAwX0FPX0lNTUVESUFURV9TVE9QICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzKQorI2RlZmluZSBNRTQwMDBfQU9fUkVTRVQgICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDQpCisjZGVmaW5lIE1FNDAwMF9BT19QUkVMT0FEICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNSkKKyNkZWZpbmUgTUU0MDAwX0FPX1BSRUxPQURfVVBEQVRFICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA2KQorI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19FTkFCTEUgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDcpCisjZGVmaW5lIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEUgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgOCkKKyNkZWZpbmUgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCA5LCBpbnQpCisjZGVmaW5lIE1FNDAwMF9BT19USU1FUl9TRVRfRElWSVNPUiAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMTAsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1FNDAwMF9BT19FTkFCTEVfRE8gICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTEpCisjZGVmaW5lIE1FNDAwMF9BT19ESVNBQkxFX0RPICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTIpCisjZGVmaW5lIE1FNDAwMF9BT19GU01fU1RBVEUgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMTMsIGludCkKKworI2RlZmluZSBNRTQwMDBfQUlfU0lOR0xFICAgICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDE0LCBtZTQwMDBfYWlfc2luZ2xlX3QpCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFSVCAgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMTUsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1FNDAwMF9BSV9TVE9QICAgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTYpCisjZGVmaW5lIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUCAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTcpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX0VOQUJMRSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTgpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX0RJU0FCTEUgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMTkpCisjZGVmaW5lIE1FNDAwMF9BSV9FWF9UUklHX1NFVFVQICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjAsIG1lNDAwMF9haV90cmlnZ2VyX3QpCisjZGVmaW5lIE1FNDAwMF9BSV9DT05GSUcgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjEsIG1lNDAwMF9haV9jb25maWdfdCkKKyNkZWZpbmUgTUU0MDAwX0FJX1NDX1NFVFVQICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyMiwgbWU0MDAwX2FpX3NjX3QpCisjZGVmaW5lIE1FNDAwMF9BSV9GU01fU1RBVEUgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMjMsIGludCkKKworI2RlZmluZSBNRTQwMDBfRElPX0NPTkZJRyAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDI0LCBtZTQwMDBfZGlvX2NvbmZpZ190KQorI2RlZmluZSBNRTQwMDBfRElPX0dFVF9CWVRFICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDI1LCBtZTQwMDBfZGlvX2J5dGVfdCkKKyNkZWZpbmUgTUU0MDAwX0RJT19TRVRfQllURSAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyNiwgbWU0MDAwX2Rpb19ieXRlX3QpCisjZGVmaW5lIE1FNDAwMF9ESU9fUkVTRVQgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMjcpCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9SRUFEICAgICAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAyOCwgbWU0MDAwX2NudF90KQorI2RlZmluZSBNRTQwMDBfQ05UX1dSSVRFICAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDI5LCBtZTQwMDBfY250X3QpCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09ORklHICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMzAsIG1lNDAwMF9jbnRfY29uZmlnX3QpCisjZGVmaW5lIE1FNDAwMF9DTlRfUkVTRVQgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzEpCisKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfRElTQUJMRSAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzMikKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfRU5BQkxFICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzMykKKyNkZWZpbmUgTUU0MDAwX0VYVF9JTlRfQ09VTlQgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAzNCwgaW50KQorCisjZGVmaW5lIE1FNDAwMF9BSV9PRkZTRVRfRU5BQkxFICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzUpCisjZGVmaW5lIE1FNDAwMF9BSV9PRkZTRVRfRElTQUJMRSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzYpCisjZGVmaW5lIE1FNDAwMF9BSV9GVUxMU0NBTEVfRU5BQkxFICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzcpCisjZGVmaW5lIE1FNDAwMF9BSV9GVUxMU0NBTEVfRElTQUJMRSAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzgpCisKKyNkZWZpbmUgTUU0MDAwX0FJX0VFUFJPTV9SRUFEICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAzOSwgbWU0MDAwX2VlcHJvbV90KQorI2RlZmluZSBNRTQwMDBfQUlfRUVQUk9NX1dSSVRFICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDQwLCBtZTQwMDBfZWVwcm9tX3QpCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19FWF9UUklHIF9JTyAgKE1FNDAwMF9NQUdJQywgNDEpCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfU1cgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDQyKQorI2RlZmluZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX0RJU0FCTEUgX0lPICAoTUU0MDAwX01BR0lDLCA0MykKKyNkZWZpbmUgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19VUERBVEUgIF9JT1cgKE1FNDAwMF9NQUdJQywgNDQsIG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCkKKworI2RlZmluZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRVhfVFJJRyAgX0lPICAoTUU0MDAwX01BR0lDLCA0NSkKKyNkZWZpbmUgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX1NXICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNDYpCisjZGVmaW5lIE1FNDAwMF9BT19TWU5DSFJPTk9VU19ESVNBQkxFICBfSU8gIChNRTQwMDBfTUFHSUMsIDQ3KQorCisjZGVmaW5lIE1FNDAwMF9BT19FWF9UUklHX1RJTUVPVVQgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDQ4LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQU9fR0VUX0ZSRUVfQlVGRkVSICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCA0OSwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBNRTQwMDBfQUlfR0VUX0NPVU5UX0JVRkZFUiAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCA1MCwgdW5zaWduZWQgbG9uZykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMF9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDBfZmlybXdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MyM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDBfZmlybXdhcmUuaApAQCAtMCwwICsxLDEwMDMzIEBACisvKgorICAgVGhpcyBmaWxlIGlzIGNvcHlyaWdodCBieSBNZWlsaGF1cyBFbGVjdHJvbmljIEdtYkggMjAwMy4KKyAgIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSwgc2VsbCwgbW9kaWZ5LCByZXZlcnNlIGVuZ2luZWVyIG9yIHVzZSB0aGlzCisgICBjb2RlIChvciBwYXJ0cyBvZiBpdCkgZm9yIGFueSBvdGhlciBwdXJwb3NlIG9yIHVuZGVyIGFueSBvdGhlciBjb25kaXRpb25zCisgICB0aGFuIHN0YXRlZCBiZWxvdy4KKworICAgMSkgWW91IGFyZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZmlsZSB0b2dldGhlcgorICAgd2l0aCBkZXZpY2UgZHJpdmVycyBmb3IgdGhlIE1laWxoYXVzIE1FLTQwMDAsIGJvYXJkIGZhbWlseS4KKworICAgMikgRGVyaXZlZCB3b3JrIChkZXZpY2UgZHJpdmVycyB1c2luZyB0aGlzIGZpbGUpIGNhbiBiZSBwdWJsaXNoZWQgdW5kZXIKKyAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gQW55IG90aGVyIGxpY2Vuc2UgdGVybXMgaGF2ZQorICAgdG8gYmUgYWdyZWVkIGJ5IE1laWxoYXVzIEdtYkggaW4gd3JpdHRlbi4KKworICAgMikgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOworICAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIE1laWxoYXVzIGlzIHVuZGVyCisgICBubyBtZWFucyBsaWFibGUgZm9yIHByb2R1Y3RzIHVzaW5nIHRoaXMgZmlsZSBvciBwYXJ0cyBvZiBpdC4KKworICAgMykgVGhlIGNvcHlyaWdodCBvZiB0aGlzIGZpbGUgaGFzIHRvIGJlIG1lbnRpb25lZCBpbiBkZXJpdmVkIHdvcmsuCisKKyAgIDQpIElmIHRoaXMgbGljZW5zZSB0ZXJtcyBhcmUgbm90IHZhbGlkIGR1ZSB0byBhbnkgb3RoZXIgbGF3CisgICBvciByZXN0cmljdGlvbnMgaW1wb3NlZCBvbiB5b3UsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlCisgICB0aGlzIGZpbGUgaW4gYW55IHdheSBhdCBhbGwuCisgKi8KKworLyogVmVyc2lvbiAxOCBvZiBzdGFuZGFyZCBmaXJtd2FyZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgeGlsaW54X2Zpcm1bXSA9IHsKKzB4MDAsIDB4MDEsIDB4ZmIsIDB4ZGMsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDQsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDU1LCAweDk5LCAweEFBLCAweDY2LCAweDBDLCAweDAwLAorMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgwNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RjAsIDB4MEMsIDB4ODAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDEsIDB4RkMsIDB4QjQsIDB4MEMsIDB4MDAsIDB4MDMsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBDLAorMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4NkUsIDB4MEQsIDB4MDEsIDB4NDksIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweDAwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0QSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGRSwgMHg0QiwgMHgwMiwgMHgzRSwgMHgwMCwgMHhFQSwgMHgwMCwgMHhBOCwgMHgwMCwgMHhBMCwKKzB4MEEsIDB4ODAsIDB4MkEsIDB4MDAsIDB4QUUsIDB4MDAsIDB4QjgsIDB4MDIsIDB4QTAsIDB4MDIsIDB4ODAsIDB4MjgsIDB4MDAsCisweEFBLCAweDAwLCAweEI4LCAweDAyLCAweDYwLCAweDAyLCAweDgwLCAweDBCLCAweDAwLCAweDI2LCAweDAwLCAweEI4LCAweDAwLAorMHhFMCwgMHgwMiwgMHg4MCwgMHgwQiwgMHgwMCwgMHgyRSwgMHgwMCwgMHhCOCwgMHgwMCwgMHhFMCwgMHgwMiwgMHg4MCwgMHgwQiwKKzB4MDAsIDB4QUUsIDB4MDAsIDB4QjgsIDB4MDIsIDB4ODAsIDB4MEEsIDB4RkMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDVCLCAweDAwLCAweEYzLCAweDA0LCAweENDLCAweDAxLCAweEYyLCAweDk2LCAweEMyLAorMHhERiwgMHgzMCwgMHhCQiwgMHg0MywgMHhEMCwgMHg3MywgMHhCMCwgMHg4RiwgMHhDMCwgMHgzRCwgMHgwMiwgMHhGQiwgMHg0OCwKKzB4RkMsIDB4MTMsIDB4MzAsIDB4MTMsIDB4QzAsIDB4NEYsIDB4MDIsIDB4M0YsIDB4MDEsIDB4REMsIDB4MTMsIDB4QjAsIDB4NEYsCisweEMwLCAweDRGLCAweDAwLCAweDNCLCAweEM5LCAweENDLCAweDA0LCAweEYyLCAweDEzLCAweEMwLCAweEZDLCAweDAwLCAweEZCLAorMHhDOSwgMHg4QywgMHgyNywgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4NTcsIDB4NDAsIDB4RTEsIDB4MDgsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MTMsCisweDAxLCAweEQxLCAweDA0LCAweEM0LCAweDFCLCAweDEwLCAweDZELCAweDQwLCAweDNDLCAweDAyLCAweERELCAweDA2LCAweEY0LAorMHgwRiwgMHgxMCwgMHgxMSwgMHg0MCwgMHgyNywgMHgxMSwgMHg1NywgMHg4MSwgMHhDNCwgMHgwRiwgMHhEMCwgMHhCRiwgMHg0MCwKKzB4NjQsIDB4MDAsIDB4NTEsIDB4MDQsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsCisweDU0LCAweDExLCAweDE0LCAweDE5LCAweDQwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEOCwgMHg0OCwgMHg0NCwgMHgyMSwgMHgwMCwKKzB4QzksIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4Q0MsIDB4NjQsIDB4MzMsIDB4MTEsIDB4Q0QsIDB4MDYsIDB4MzQsIDB4MjMsCisweDUwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDhELCAweDAwLCAweDA0LCAweDIzLCAweEQwLCAweDBDLCAweDQyLCAweDAxLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0NCwgMHgzMCwgMHgwOSwgMHhDRCwgMHg0NCwgMHg0NCwKKzB4MTIsIDB4MTAsIDB4MDAsIDB4NDQsIDB4NDcsIDB4ODgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEE4LCAweEI1LCAweDAxLCAweEQxLCAweDAwLCAweDQ0LCAweDBBLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweEQxLAorMHg0MCwgMHg0NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg2MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwKKzB4MDEsIDB4NDAsIDB4MjcsIDB4MTAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4Q0EsIDB4MEQsIDB4NDAsIDB4NjUsIDB4MDAsCisweEMxLCAweDAwLCAweDQ0LCAweEM2LCAweEQwLCAweDE5LCAweDQwLCAweDMwLCAweDAwLCAweEQxLCAweDAwLCAweDU0LCAweDA5LAorMHgxNCwgMHgxMSwgMHg0MCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwKKzB4RTMsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzQsIDB4RjcsIDB4MDAsIDB4OUIsIDB4NDAsCisweDVDLCAweDAzLCAweEYyLCAweDBELCAweEM2LCAweDM3LCAweDEwLCAweERCLCAweDAwLCAweDc0LCAweDAzLCAweDcwLCAweEExLAorMHg4MSwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMywgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhDNywgMHgwMSwgMHg5MywKKzB4MDAsIDB4NUQsIDB4MEMsIDB4RjAsIDB4MzEsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NUYsIDB4QzAsIDB4MEMsIDB4MDcsIDB4MzAsCisweDcxLCAweDgwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELAorMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHhGRiwgMHgxOCwgMHhGRiwgMHgwNCwgMHhBQywKKzB4MDMsIDB4QjEsIDB4MEQsIDB4QzgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4QjQsIDB4MTMsIDB4Q0EsCisweEZGLCAweDAwLCAweEY3LCAweDAzLCAweEU0LCAweDQzLCAweEYwLCAweDBFLCAweEMxLCAweDBFLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHg0MCwgMHhGMCwgMHgwQiwgMHhFMiwgMHgzRiwgMHgwMCwgMHhGRiwgMHg4MywgMHhGRCwgMHgyNSwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDAsCisweEQzLCAweDAwLCAweDRDLCAweDBBLCAweDMwLCAweDBELCAweEMwLCAweEE0LCAweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHg0MSwgMHhDNCwgMHgzNSwKKzB4MDAsIDB4RDMsIDB4MDIsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDBFLCAweDMwLCAweDAxLCAweEMxLCAweDM3LCAweDEwLCAweEQ3LCAweDA0LCAweDRDLCAweDBCLCAweDMwLCAweDIxLCAweEMwLAorMHgwQiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhGNCwgMHgwMSwgMHhGNSwKKzB4MDAsIDB4NDQsIDB4MkUsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTAsCisweDBGLCAweEMwLCAweDNFLCAweDAwLCAweEYxLCAweDAwLCAweEVDLCAweDAzLCAweDEwLCAweDExLCAweEMwLCAweDM1LCAweDAwLAorMHhEMSwgMHgwMSwgMHhEQywgMHgwNywgMHg3MCwgMHgyRiwgMHhDMywgMHgyMywgMHgwNiwgMHhERCwgMHgyMCwgMHg2NCwgMHgwMiwKKzB4QjAsIDB4MzgsIDB4NDEsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDMsIDB4NkMsIDB4MjksIDB4NTAsIDB4QTksIDB4NDAsIDB4NEUsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDAxLCAweEQxLCAweDAwLAorMHgwNCwgMHgyOSwgMHg5MCwgMHgwNCwgMHg0MCwgMHgyNCwgMHgwMCwgMHhENSwgMHgwMCwgMHgzNCwgMHgwMywgMHg1MCwgMHgwRCwKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NUQsIDB4MDAsIDB4NDAsIDB4MTIsIDB4MjAsIDB4MDEsCisweDA0LCAweDEwLCAweDBCLCAweEQwLCAweDFDLCAweDQyLCAweDIxLCAweDgwLCAweDBELCAweDQwLCAweDM0LCAweDA4LCAweDkwLAorMHgzMCwgMHg0MCwgMHgzMSwgMHgxMCwgMHhENSwgMHgwMywgMHgwNCwgMHgwNSwgMHgxOCwgMHgxOCwgMHg0NCwgMHgxRiwgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NjgsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsCisweDA3LCAweDk4LCAweDFCLCAweDQwLCAweDY5LCAweDgwLCAweEUxLCAweDgxLCAweDI0LCAweDA3LCAweDEwLCAweDlFLCAweDQwLAorMHg3OCwgMHg4MCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNywgMHg1MCwgMHg1MiwgMHg2MSwgMHg3OSwgMHgwMCwgMHgyMSwgMHgxOSwKKzB4OTAsIDB4MDcsIDB4NTEsIDB4MUMsIDB4NDAsIDB4NkEsIDB4MDAsIDB4NkQsIDB4NDEsIDB4QTQsIDB4MDYsIDB4RDIsIDB4MTIsCisweDQwLCAweDdCLCAweDAwLCAweEYxLCAweDA5LCAweEU0LCAweDQ1LCAweDU0LCAweDFBLCAweDQwLCAweDEyLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgyMCwgMHgwMiwgMHhDMywgMHg4OCwgMHg0NCwgMHgwMiwKKzB4QjAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4RDcsIDB4MDgsIDB4MzQsIDB4MDMsIDB4NzAsIDB4MEMsIDB4NDAsIDB4MzcsCisweDAyLCAweERELCAweDAwLCAweDA0LCAweDAzLCAweDcxLCAweDEwLCAweEMwLCAweDE2LCAweDAyLCAweDAxLCAweDgwLCAweDFDLAorMHhDMywgMHhGMCwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHhDRiwgMHgwOSwgMHgzQywgMHg5MSwgMHhCMCwgMHg4OCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4QzcsIDB4MTAsIDB4MEMsIDB4MTEsIDB4MzgsIDB4ODQsIDB4QzEsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEIwLCAweDJELCAweDAwLCAweEZGLCAweDAyLCAweEZDLCAweDAyLCAweDYwLAorMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHg0MywgMHg3MCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwKKzB4RjMsIDB4MDAsIDB4RkMsIDB4MEIsIDB4QjAsIDB4MDIsIDB4QzAsIDB4M0YsIDB4NDgsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MkIsCisweEYwLCAweDhGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDIwLCAweDNDLCAweDAzLCAweDkwLCAweDA5LCAweEMwLCAweDNGLAorMHgwMCwgMHhFRSwgMHgyMCwgMHg3QywgMHgwMSwgMHhENCwgMHgwMSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MEUsIDB4N0MsIDB4MDAsIDB4QzAsIDB4MEQsCisweEMwLCAweDc1LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDUzLCAweDcwLCAweDhELCAweEM2LCAweEI0LCAweDA0LCAweERGLAorMHgwMCwgMHg3QywgMHgxMywgMHhCMCwgMHgwMCwgMHhDMCwgMHgzNCwgMHgxMCwgMHgwNywgMHg4MCwgMHg1QywgMHgxMywgMHgzMCwKKzB4NUMsIDB4QzEsIDB4MDQsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsCisweDVGLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA5LCAweEMwLCAweDQ3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgyOSwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4NEYsIDB4NDAsIDB4M0EsIDB4MTEsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDM5LCAweDAwLCAweEFELCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDJFLAorMHg0MCwgMHgwOCwgMHgwOCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwKKzB4MjAsIDB4QzQsIDB4MDEsIDB4MTAsIDB4MEEsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDY5LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA2LCAweDkwLCAweDNFLCAweDRDLCAweDZGLAorMHgxMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgxNywgMHhEMCwgMHgwRSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwRCwgMHg5NCwKKzB4MjcsIDB4RDAsIDB4MTMsIDB4NDEsIDB4N0EsIDB4ODAsIDB4NkQsIDB4MDEsIDB4OTQsIDB4MzcsIDB4NTEsIDB4NUUsIDB4NDAsCisweDZBLCAweDA0LCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQxLCAweDFBLCAweDQ4LCAweDdCLCAweDgwLCAweEFELCAweDAxLAorMHg4NCwgMHgwNSwgMHgxNCwgMHgxRSwgMHg0MiwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MjgsIDB4MjMsIDB4ODQsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MkUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NDksCisweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM2LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgxMSwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHg3MCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4NkYsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4NDQsIDB4MDUsCisweDIxLCAweDE0LCAweDFDLCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorMHhBOCwgMHhEOSwgMHgwMCwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhCMCwgMHgwNywgMHhDNCwgMHhERiwgMHgwMSwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4NzgsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsCisweDE3LCAweEMwLCAweDlFLCAweDAxLCAweDdGLCAweDBFLCAweDVDLCAweDAxLCAweDc0LCAweDA1LCAweEM4LCAweDFFLCAweDAwLAorMHg3RiwgMHgwMiwgMHhGQywgMHgwRCwgMHhFMCwgMHgwNywgMHhDMCwgMHgxNywgMHgyMCwgMHg3RiwgMHgwNywgMHhDQywgMHgwNSwKKzB4MTAsIDB4MDcsIDB4QzEsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsCisweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDNDLCAweDQwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDYwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzEsIDB4MDUsIDB4MTAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4OTEsIDB4MDEsIDB4RDAsIDB4ODcsIDB4MDEsIDB4MUYsCisweDMwLCAweDcwLCAweDA4LCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDE4LCAweDFGLCAweDQwLCAweDdELCAweDAwLCAweEYwLAorMHgxMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywKKzB4MDEsIDB4OUIsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDIzLCAweDQwLCAweDkzLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLAorMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0NCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDNCwgMHg2NywgMHgwMiwgMHg5RCwgMHgwMCwKKzB4NEMsIDB4MTYsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUYsIDB4MDMsIDB4NEMsIDB4MjIsIDB4MzQsIDB4MDgsCisweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY2LCAweDAwLAorMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RjAsIDB4QjgsIDB4NDAsIDB4MjQsCisweDAwLCAweDhELCAweDA4LCAweDAxLCAweDA2LCAweDMwLCAweDI5LCAweEMwLCAweDI3LCAweDIxLCAweDhELCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4RCwgMHgwMywgMHg2QywgMHgxRSwgMHg1NCwgMHgyOSwgMHg0MCwKKzB4MDUsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4ODEsCisweDAwLCAweDQ0LCAweDIyLCAweDEwLCAweDA4LCAweDQwLCAweDM1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg2MCwgMHgyNCwgMHg4MCwKKzB4REQsIDB4ODAsIDB4NTQsIDB4MTIsIDB4MDAsIDB4QTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDRELCAweDQzLCAweDI3LCAweDAwLCAweDk4LCAweDEwLCAweDA0LCAweDAyLCAweDEwLCAweEE5LCAweDQwLCAweDYwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHg4NSwgMHgwNCwKKzB4MDQsIDB4MUEsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MjAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MTIsIDB4RDAsIDB4ODgsCisweDY0LCAweDIzLCAweDAxLCAweDg5LCAweDA4LCAweDM0LCAweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDAyLCAweERELAorMHgwMCwgMHgxNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0NCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwOCwgMHgwNCwgMHgwMiwgMHhEOCwKKzB4MDgsIDB4NDIsIDB4MjMsIDB4MDIsIDB4OUQsIDB4MDgsIDB4MjQsIDB4MjIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NDEsIDB4ODgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDEzLCAweDBBLCAweDRDLAorMHgwOSwgMHgzMCwgMHhBMSwgMHhDMCwgMHg4NSwgMHgwMiwgMHgxRCwgMHgwMiwgMHg3QywgMHgyOCwgMHhGMCwgMHg2MSwgMHhDMSwKKzB4ODcsIDB4MDIsIDB4MTksIDB4MTYsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzAsIDB4ODQsIDB4MDAsIDB4MUYsIDB4MDAsCisweDVDLCAweDUxLCAweDcwLCAweDQxLCAweDQ1LCAweDA3LCAweDEwLCAweDFGLCAweDAyLCAweDRELCAweDAxLCAweEYwLCAweDAxLAorMHhDNCwgMHg4NywgMHgwMCwgMHgwRCwgMHgwMiwgMHg0QywgMHg4OCwgMHgzMCwgMHgwMSwgMHhDNCwgMHg3NCwgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MDAsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MEEsCisweEYwLCAweDBCLCAweEMwLCAweDJCLCAweDAwLCAweEJGLCAweDA0LCAweDdDLCAweDIyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LAorMHgwMiwgMHg5MywgMHgwNCwgMHg3QywgMHgyMiwgMHg3MCwgMHgwQiwgMHhEMCwgMHgyRiwgMHgwMSwgMHhCRiwgMHgwMCwgMHg2QywKKzB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MkQsIDB4MTAsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsCisweDI3LCAweDAxLCAweEJGLCAweDg0LCAweEZDLCAweDEyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHg5MywgMHg4QywgMHhFOCwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OTMsIDB4NjAsIDB4N0MsIDB4NTIsIDB4MzAsIDB4QzksIDB4QzAsIDB4MjUsIDB4MDAsCisweDlCLCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLAorMHhCMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgyOCwgMHg5RiwgMHg0MCwgMHhCQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyNCwKKzB4MjAsIDB4QkYsIDB4NDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDExLCAweDBDLCAweDQ0LCAweDQ5LCAweEQwLCAweDAxLAorMHg0MSwgMHgwNywgMHgwMCwgMHgxMSwgMHgxNCwgMHg3NCwgMHgxMCwgMHgxMCwgMHhDMSwgMHg0OCwgMHg4NCwgMHgwNCwgMHgxMSwKKzB4MTAsIDB4NDQsIDB4MjAsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MUQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4MTQsCisweDAxLCAweDQwLCAweDE3LCAweDAwLCAweDFELCAweDE0LCAweDY0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA1LCAweDBDLAorMHg1RCwgMHg5MCwgMHg1NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjcsIDB4NDAsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MzIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDI3LCAweDQwLCAweDg1LCAweDA0LCAweDM0LCAweDUyLCAweDEwLCAweDQ4LCAweDQwLCAweDIxLCAweDAzLCAweDg5LCAweDA4LAorMHgxNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwNSwgMHg5RCwgMHgwMCwgMHgwNCwgMHgyMiwgMHgxMiwgMHg4QywKKzB4NDIsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDEsIDB4OEQsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwNCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg2OSwgMHg2MCwgMHgyNywKKzB4MDAsIDB4OTUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NjAsIDB4MjEsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsCisweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDI3LCAweDgwLCAweDlDLCAweDAyLCAweDU0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgwQSwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNywgMHg4MCwgMHg4RCwgMHgwOCwKKzB4NTQsIDB4MTIsIDB4MTIsIDB4MTksIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEE4LCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDBFLCAweEYwLCAweDM5LCAweEUwLCAweDI3LCAweDIxLAorMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMiwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg1QywgMHgwMiwKKzB4RjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4NjcsCisweDAwLCAweDlGLCAweDI0LCAweDdDLCAweDAyLCAweEY4LCAweDg4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHgzMCwgMHg1OSwgMHhDMCwgMHgxNCwgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4NTYsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjcsIDB4MDEsIDB4OUIsCisweDA0LCAweDdDLCAweDAyLCAweEY0LCAweDA4LCAweENDLCAweDI2LCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgzOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMSwKKzB4OUYsIDB4MDUsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MTksIDB4QzIsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA4LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LAorMHgwNSwgMHgwMCwgMHgwRiwgMHgwMCwgMHg1QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RTAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsCisweEMxLCAweDA3LCAweDAwLCAweDFCLCAweDA2LCAweDRDLCAweDQwLCAweEYwLCAweDAxLCAweEMxLCAweDA0LCAweDAxLCAweDEzLAorMHgwMiwgMHg3QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgyMCwgMHgzMSwKKzB4MjEsIDB4ODAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTgsCisweDAwLCAweDVELCAweDAwLCAweEMwLCAweDA1LCAweDcwLCAweDA1LCAweDQwLCAweDEwLCAweDAwLCAweDVDLCAweDAwLCAweDc0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxNSwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHg0NSwgMHhEMCwgMHgwNywgMHhDMCwKKzB4MTUsIDB4MDAsIDB4NjEsIDB4MDAsIDB4REMsIDB4NEQsIDB4NzAsIDB4MDcsIDB4NDAsIDB4REQsIDB4NDAsIDB4NTEsIDB4MDAsCisweEY0LCAweDNELCAweDEwLCAweDc3LCAweDQwLCAweDE3LCAweDQwLCAweDcxLCAweDAwLCAweDg0LCAweDBELCAweEYwLCAweEE3LAorMHhDMCwgMHg1MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgyMiwgMHgyMCwKKzB4Q0QsIDB4ODAsIDB4MTAsIDB4MEYsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDBDLCAweDAwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweEJDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDOSwgMHgwMSwgMHgyNCwgMHgwNywgMHg1MCwgMHgwQywgMHg0MCwgMHhGMCwgMHgwMCwgMHhDMSwgMHgyMCwgMHgzNCwKKzB4MDcsIDB4MTAsIDB4NEMsIDB4NjAsIDB4MzMsIDB4OTAsIDB4QzksIDB4MDAsIDB4MDQsIDB4NEYsIDB4MTAsIDB4MkMsIDB4NDIsCisweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweENELAorMHgwNCwgMHg4NCwgMHgwQiwgMHg1MCwgMHgxRSwgMHg0MCwgMHgzQSwgMHgwMywgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4OEUsIDB4NDAsIDB4MzksIDB4QTEsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0QsIDB4MDAsCisweEZELCAweDQyLCAweDkwLCAweDAzLCAweDUwLCAweDE4LCAweDQwLCAweEZELCAweDEwLCAweEUxLCAweDA0LCAweEY0LCAweDA2LAorMHgxMCwgMHgwRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhDNSwgMHgwMSwgMHg5MCwgMHgwQywgMHg2MCwgMHgxMiwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4RUYsIDB4MDcsCisweDk0LCAweDA3LCAweDcwLCAweDFGLCAweEM4LCAweDdCLCAweDAwLCAweEVGLCAweDA1LCAweEI0LCAweDBGLCAweEYwLCAweDFFLAorMHg0MCwgMHg3QiwgMHgwNCwgMHhFRCwgMHgwMSwgMHhCQywgMHgwNywgMHhGMiwgMHgxQSwgMHhDOCwgMHg3QiwgMHgyNCwgMHhGQiwKKzB4MDEsIDB4QUMsIDB4ODQsIDB4NzAsIDB4MUEsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDksIDB4QjQsIDB4MDYsIDB4MzQsCisweDFFLCAweEM0LCAweDdGLCAweDA4LCAweDc5LCAweDAxLCAweENDLCAweDA2LCAweDMyLCAweDE2LCAweEMwLCAweDUwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwgMHgxMCwgMHhERiwgMHgwMiwgMHg3QywKKzB4MDMsIDB4NzAsIDB4RUQsIDB4QzgsIDB4QjUsIDB4MjEsIDB4REYsIDB4MDAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzgsCisweDM3LCAweDAyLCAweERGLCAweDg4LCAweDdDLCAweDAzLCAweEQwLCAweDA5LCAweEMwLCAweDMzLCAweDAxLCAweDkzLCAweDgwLAorMHg3QywgMHgwMSwgMHg2MCwgMHgwMSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwgMHgyQSwgMHg3QywgMHgwMCwgMHg2MCwgMHgwOSwKKzB4QzAsIDB4QjcsIDB4MDYsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzIsIDB4NDMsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDAwLCAweEZGLCAweDAzLCAweEM4LCAweDIxLAorMHhFMCwgMHgzRSwgMHhDMiwgMHhGQywgMHgxMiwgMHhGRiwgMHgwOSwgMHhFQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwKKzB4MDIsIDB4RkIsIDB4MDEsIDB4REMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0QsIDB4MDQsIDB4QjMsIDB4NDEsIDB4QkMsCisweDI3LCAweEIwLCAweDEzLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDIxLCAweEZDLCAweDA2LCAweEYwLCAweDFGLCAweEMwLAorMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhCQywgMHg4NywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MzksIDB4MTAsIDB4RkQsIDB4MDQsIDB4ODQsIDB4MDEsIDB4RjAsCisweDBFLCAweEMxLCAweDNBLCAweDAwLCAweEVELCAweDAwLCAweEVDLCAweDAzLCAweDE1LCAweDhFLCAweDQ4LCAweDNCLCAweDQwLAorMHhGMSwgMHgwMCwgMHg4NCwgMHgyMywgMHhEMCwgMHhBOCwgMHg0MCwgMHgzQiwgMHgyMCwgMHgyMSwgMHgwMCwgMHhCNCwgMHgyOSwKKzB4MTAsIDB4NjIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4REYsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RjAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAyLCAweEVELCAweDA4LCAweEJDLCAweDAxLCAweEIwLCAweDBFLCAweDQxLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NiwgMHg2MywgMHhEOCwgMHgwRiwKKzB4NDAsIDB4MzgsIDB4ODAsIDB4RkQsIDB4NDAsIDB4ODQsIDB4MjMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4MzMsIDB4MTAsIDB4RTEsCisweDAwLCAweEI0LCAweDIzLCAweEQyLCAweDIyLCAweDYwLCAweDM5LCAweDAwLCAweEE1LCAweDAwLCAweEI0LCAweDAwLCAweDEyLAorMHgwMiwgMHg0MCwgMHgyQSwgMHgwMCwgMHhFRCwgMHgxMCwgMHg5NCwgMHgwMiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4NkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA2LCAweDU4LCAweDNDLCAweDQwLAorMHgzMiwgMHgwMCwgMHhDRCwgMHgwOCwgMHgyNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MiwgMHgzMywgMHgyMCwgMHhDMSwgMHgwMCwKKzB4MTYsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QjMsIDB4MDAsIDB4MDUsIDB4MEIsIDB4MzYsIDB4MDEsIDB4MTAsIDB4MDAsCisweDQwLCAweDAzLCAweDEwLCAweENELCAweDQwLCAweDA0LCAweDEwLCAweDUxLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDlELAorMHgxMiwgMHgxNCwgMHhBRiwgMHg5MCwgMHg1MCwgMHgwMCwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTgsIDB4MjUsIDB4MDEsIDB4RkYsIDB4MDAsIDB4NEQsIDB4MjIsIDB4RDAsIDB4M0YsIDB4QzAsIDB4M0MsCisweDAwLCAweEZGLCAweDAwLCAweENDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEYzLCAweDAwLCAweDFDLAorMHgwMiwgMHhGMCwgMHgyNSwgMHhDMCwgMHhCRCwgMHgwMiwgMHg1NywgMHgwQiwgMHg3QywgMHgwMywgMHgxMSwgMHgwOSwgMHhDMCwKKzB4RjcsIDB4MDIsIDB4RUYsIDB4MDAsIDB4NUMsIDB4MEEsIDB4RDAsIDB4OUQsIDB4NDAsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MDIsCisweDcwLCAweDAzLCAweDEwLCAweDIxLCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHg0RCwgMHhDNCwgMHgzNywgMHgxMCwKKzB4REYsIDB4ODAsIDB4N0MsIDB4ODMsIDB4NzAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4RDcsIDB4ODAsIDB4NjQsIDB4MDIsCisweEYwLCAweDNELCAweEMwLCAweDM3LCAweDQ4LCAweDVBLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDI5LCAweEMwLCAweDY3LAorMHgwMCwgMHhENywgMHgwMCwgMHg1QywgMHgwQSwgMHhGMCwgMHgxNSwgMHhDNCwgMHgzNywgMHgyMCwgMHg1RiwgMHgwMiwgMHg3QywKKzB4MDksIDB4RjAsIDB4MjksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweDA4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweDMwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweEZGLAorMHgwMCwgMHhGRSwgMHgwMywgMHhGMiwgMHgwRiwgMHhDMiwgMHgzRiwgMHg4MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhCMSwKKzB4MTcsIDB4QzIsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MEIsIDB4QzAsIDB4N0YsIDB4MDAsCisweEZGLCAweDAwLCAweENDLCAweDAyLCAweEQwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweDMxLCAweDAwLCAweENDLCAweDYyLAorMHgzMCwgMHgwMywgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwKKzB4NTYsIDB4MDAsIDB4REQsIDB4MDAsIDB4MzQsIDB4MEUsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4ODAsIDB4REQsIDB4MDAsCisweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweEEwLCAweERGLCAweDIwLCAweDc0LCAweDAzLCAweDMxLCAweDlELAorMHhDMCwgMHgzMSwgMHgwMCwgMHg5MSwgMHgwQSwgMHg3NCwgMHgwRiwgMHg3OCwgMHgxMSwgMHg0MCwgMHg4NywgMHgwMSwgMHhERCwKKzB4MDAsIDB4NkMsIDB4NDQsIDB4NzAsIDB4MDEsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MTMsIDB4MEYsIDB4MTQsIDB4NDQsIDB4MTAsCisweDM5LCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEE2LAorMHgwMiwgMHhERCwgMHgwMCwgMHg3NCwgMHgwQywgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwKKzB4MDMsIDB4RDIsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MDUsIDB4NDAsCisweDM3LCAweDAwLCAweDU1LCAweDgyLCAweDc0LCAweDEyLCAweEQwLCAweDE5LCAweDQwLCAweDE3LCAweDAyLCAweEQ5LCAweDAwLAorMHg0NCwgMHgwNCwgMHhEMCwgMHgwOSwgMHg0MiwgMHgzMywgMHgwMCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgxOSwKKzB4NDEsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsCisweENELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM2LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgyMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg4OCwgMHg0OCwgMHgzNSwKKzB4MDAsIDB4NDUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTgsIDB4MDgsIDB4NjAsIDB4MDMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjUsCisweDAwLCAweDUwLCAweDAwLCAweDQ4LCAweDMzLCAweDQwLCAweDQ1LCAweDAwLCAweDQ0LCAweDAwLCAweDExLCAweDA4LCAweDQwLAorMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyNiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MTAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4REQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDNGLCAweDAwLCAweERELCAweDAwLCAweDdFLCAweDAzLCAweEIwLCAweDA1LCAweDQ4LCAweDNCLCAweDAwLAorMHhENSwgMHgwMCwgMHg3QywgMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHhGRiwgMHgwOCwgMHg0QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDMsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMiwgMHg3MCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHg4MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzEsIDB4NDMsIDB4QzAsIDB4M0QsIDB4MDAsIDB4M0IsCisweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDAwLCAweDc4LAorMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGRiwgMHg4MCwgMHhGMCwgMHgwQiwgMHhDMiwgMHgxNywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MEYsIDB4MDQsIDB4MzMsIDB4MDEsIDB4QzQsCisweDAyLCAweEI4LCAweDBCLCAweEMwLCAweEJGLCAweDAxLCAweEZCLCAweDJDLCAweEVDLCAweDhFLCAweDcwLCAweDJGLCAweEMwLAorMHg0RiwgMHgwMCwgMHhGNywgMHgxOCwgMHg4QywgMHgyNCwgMHhGMCwgMHg0RiwgMHhDMSwgMHg0RiwgMHgwMiwgMHhGRiwgMHg0NCwKKzB4REMsIDB4MjcsIDB4MzAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RTcsIDB4MDAsIDB4RUMsIDB4MDQsIDB4RjAsIDB4MEYsCisweEMwLCAweDZDLCAweDAwLCAweEZCLCAweDEwLCAweDlDLCAweDUyLCAweEYwLCAweDEzLCAweEMwLCAweDBDLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg4NywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4NDAsIDB4QkYsIDB4MDAsIDB4RjEsIDB4MDIsIDB4NEMsIDB4MTMsIDB4MTAsIDB4OEYsIDB4NDAsIDB4NjcsCisweDA4LCAweEYxLCAweDAyLCAweDQ0LCAweDEwLCAweEQyLCAweDNGLCAweEMyLCAweDIzLCAweDA4LCAweEYxLCAweDAzLCAweDQ0LAorMHgxMywgMHgwNCwgMHg2RiwgMHg0MCwgMHhGQywgMHgyMCwgMHhGMSwgMHgwQiwgMHg0NCwgMHgwNCwgMHhEMSwgMHgzRiwgMHhDMCwKKzB4NDQsIDB4MDAsIDB4RDUsIDB4NDMsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MTUsIDB4QzAsIDB4MDYsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDAwLCAweDAxLCAweDAwLCAweDE1LCAweDAwLCAweDkyLAorMHgwOCwgMHg0MiwgMHgzMywgMHgwMywgMHhDOSwgMHgwQywgMHgzNCwgMHgwMywgMHg1MCwgMHg0QywgMHg0NCwgMHgwNywgMHg4MCwKKzB4QzUsIDB4MjAsIDB4MDQsIDB4MTIsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MTMsIDB4MTAsIDB4QzksIDB4MDIsIDB4MTQsIDB4MDMsCisweDEwLCAweDJDLCAweDQwLCAweEIxLCAweDAwLCAweEM1LCAweDAwLCAweDA3LCAweDAwLCAweDUwLCAweDJDLCAweDQwLCAweDI2LAorMHgwMCwgMHhDMSwgMHgyMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwNSwgMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NDEsIDB4MDQsIDB4MDEsIDB4MDEsIDB4NTQsIDB4MEUsIDB4NTAsIDB4MTksCisweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDQ3LCAweDAwLCAweEQxLAorMHgwMCwgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNSwgMHgwNCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxOCwKKzB4MEQsIDB4MDgsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MDAsCisweEQ1LCAweDAwLCAweDc0LCAweDA2LCAweEQwLCAweDM1LCAweDQwLCAweDBFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHhDNywgMHgwMCwgMHgxMywgMHgwMywgMHg1NCwgMHgwQywgMHg5MCwgMHg1MSwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzQsIDB4NDMsIDB4MDAsIDB4RDcsIDB4MDAsCisweDRDLCAweDBFLCAweEYwLCAweDBELCAweDQ4LCAweDk3LCAweDAyLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweDMyLCAweDBELAorMHhDMCwgMHgzNywgMHgxMCwgMHhENywgMHgwMCwgMHg2RSwgMHg0NCwgMHhGMCwgMHgwRCwgMHhEMCwgMHg2MiwgMHgwMCwgMHhEQiwKKzB4MDAsIDB4NUMsIDB4MTYsIDB4RjIsIDB4MUQsIDB4RTAsIDB4MDgsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDgwLCAweDA1LCAweDAwLCAweDNGLCAweDAwLCAweDZELCAweDgwLCAweEYwLCAweDAzLCAweEMwLCAweDNGLAorMHgwMCwgMHhFRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGOCwgMHgwRCwgMHhDMCwgMHgyRiwgMHg4MCwgMHhFQiwgMHg0MCwgMHhGQywKKzB4MDAsIDB4RjIsIDB4MEYsIDB4QzAsIDB4NEYsIDB4MDAsIDB4RUIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsCisweDNCLCAweDA0LCAweEZELCAweDgwLCAweERDLCAweDQwLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDgsIDB4ODUsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEQsIDB4MDgsIDB4MzAsIDB4MDksIDB4QzMsIDB4MzMsIDB4MDAsCisweERGLCAweDAwLCAweDVDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDg1LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDBBLAorMHgzMCwgMHgwRCwgMHhDNiwgMHgxNiwgMHgwMCwgMHhEMywgMHgxMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwKKzB4MDAsIDB4REYsIDB4MjAsIDB4NEMsIDB4MDgsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0UsCisweDQyLCAweDcwLCAweDJELCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHg0RSwgMHgwMCwgMHg2OSwgMHg0MCwgMHgzRiwgMHgxMCwgMHhGRCwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsIDB4QTQsIDB4MDMsIDB4RkQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTIsCisweDBGLCAweDQwLCAweDI0LCAweDAwLCAweEYwLCAweDAzLCAweDU0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDdDLCAweDA0LAorMHhFRCwgMHgwMCwgMHg0NSwgMHgwNCwgMHhEMCwgMHgxRiwgMHg0MCwgMHg0NywgMHgwMCwgMHhGRCwgMHgwMCwgMHg3NCwgMHgwRSwKKzB4MTAsIDB4MEQsIDB4NDMsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsCisweDQyLCAweDAwLCAweDA5LCAweDI0LCAweDAwLCAweDQ2LCAweDkwLCAweDAwLCAweDQwLCAweDMzLCAweDIwLCAweEM5LCAweDAwLAorMHg1MiwgMHgwMiwgMHhEMCwgMHgwQywgMHg0OCwgMHhBMSwgMHgwMCwgMHhDQywgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwQywKKzB4NDgsIDB4MjcsIDB4NjAsIDB4QzEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDA0LCAweDI0LCAweDA0LCAweEQwLCAweDhDLCAweDQ5LCAweDIzLCAweDEyLCAweENELCAweDAwLCAweDE2LCAweDA0LCAweDUxLAorMHgwRCwgMHg0MSwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg0OCwKKzB4MjQsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4OTQsCisweDA3LCAweDkwLCAweDlFLCAweDQwLCAweDc4LCAweEEwLCAweEVELCAweDAxLCAweEQ0LCAweDA0LCAweDE0LCAweDFFLCAweDQwLAorMHg2OSwgMHgwMCwgMHhFMSwgMHgxMSwgMHg5NCwgMHgwNywgMHhDMCwgMHgxQywgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHg5NSwKKzB4ODQsIDB4MDUsIDB4RDIsIDB4MUUsIDB4NDAsIDB4NEIsIDB4MDAsIDB4RUQsIDB4MDksIDB4QjYsIDB4NDQsIDB4MTAsIDB4MUYsCisweDQwLCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDAwLCAweDAwLAorMHgxQiwgMHgxMCwgMHgwRCwgMHgyMSwgMHhCMCwgMHgwNCwgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MEMsIDB4QzgsIDB4ODEsIDB4MDAsIDB4REUsIDB4MDAsIDB4MUMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzMsCisweDAzLCAweEMzLCAweDgwLCAweDFDLCAweDgzLCAweEYwLCAweDRDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDBDLAorMHg0MCwgMHg3MCwgMHgwQywgMHhFNCwgMHgyMywgMHgyMiwgMHhDRiwgMHgwMCwgMHgxRSwgMHgxNCwgMHg3MCwgMHgwQywgMHhDMCwKKzB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MkQsIDB4MTIsIDB4N0YsCisweDA4LCAweEZDLCAweDAzLCAweDU0LCAweDBGLCAweEMwLCAweDNGLCAweDgwLCAweEZGLCAweDAyLCAweEVDLCAweDAzLCAweDcwLAorMHgwRiwgMHhDMywgMHgxRiwgMHgwMCwgMHhGRiwgMHgwOCwgMHhFQywgMHgwMywgMHhGMCwgMHgyRSwgMHhDNCwgMHgzRSwgMHgwMiwKKzB4RUYsIDB4MTAsIDB4RjgsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4M0UsIDB4MDAsIDB4RkYsIDB4MDYsIDB4REMsIDB4MDEsCisweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDA4LCAweEZGLCAweDIwLCAweEZFLCAweDIwLCAweEYyLCAweDBDLCAweEMwLCAweDBCLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwKKzB4NEMsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjcsIDB4MDEsIDB4REIsIDB4MEUsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NUQsCisweEMxLCAweDI0LCAweDAwLCAweERGLCAweDg2LCAweDdDLCAweDg2LCAweDcwLCAweDNELCAweEMwLCAweDE2LCAweDAwLCAweERGLAorMHgxMCwgMHg3QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMSwgMHgzNiwgMHgwMSwgMHhERiwgMHgwMSwgMHg0QywgMHgwMCwgMHhGMCwKKzB4QUMsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDYsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NTQsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA5LCAweDA4LCAweDIxLCAweDAwLCAweDg0LAorMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHhCQiwgMHgwRCwgMHhFMSwgMHgwMCwgMHg5QywgMHgwMywgMHhEMCwgMHg0RSwgMHg1MCwKKzB4MzgsIDB4ODAsIDB4RUQsIDB4MTIsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MTgsIDB4MDAsIDB4RUQsIDB4MDQsCisweEIwLCAweDgzLCAweEQwLCAweDRFLCAweDQyLCAweEI4LCAweDgyLCAweENELCAweDA0LCAweEE1LCAweDAxLCAweEQwLCAweDRFLAorMHg0OSwgMHgyOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMCwgMHgxMSwgMHgwRSwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NDksIDB4MDQsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MEQsCisweEQwLCAweDE2LCAweDQxLCAweDczLCAweDAxLCAweEU5LCAweDA1LCAweDk0LCAweDA3LCAweEQwLCAweDVFLCAweDQwLCAweDY4LAorMHgwMCwgMHhFRCwgMHgwNSwgMHhCNCwgMHgwNywgMHg1MCwgMHg5QywgMHg1MCwgMHg3OSwgMHg4MCwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4ODcsIDB4NTgsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QTQsIDB4MDQsIDB4NTAsIDB4MUUsIDB4NDAsCisweDc4LCAweDAwLCAweENELCAweDAxLCAweDA0LCAweDA2LCAweDEwLCAweDFGLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHg3NywgMHgyMCwgMHhEMSwgMHgwNCwgMHgwNCwgMHgwNywgMHhEMCwKKzB4M0MsIDB4NDEsIDB4MzMsIDB4MDAsIDB4QzEsIDB4NDAsIDB4MTQsIDB4QTcsIDB4RDgsIDB4MEMsIDB4NDAsIDB4QjAsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDBCLCAweDEwLCAweDBDLCAweDQwLCAweDcxLCAweDgzLCAweENELCAweDAwLCAweDM0LCAweDAzLAorMHhEOSwgMHgwRCwgMHg1MCwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHg0QiwgMHhEMSwgMHgwQywgMHg0OCwgMHgxMSwKKzB4MTQsIDB4Q0QsIDB4MDAsIDB4MTYsIDB4MjcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NEEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDVELCAweDQwLCAweDczLCAweDAwLCAweENELCAweDBELCAweEYwLCAweDA3LAorMHhDMCwgMHgxNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxOCwgMHgwMiwgMHg1RiwKKzB4MDAsIDB4RkMsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4NUQsIDB4MTgsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDVELCAweDgwLCAweEM1LCAweDAxLCAweEY4LCAweDA1LCAweEMwLCAweDVDLCAweDAwLAorMHg1RiwgMHgwMCwgMHhDQywgMHgwMSwgMHgzMCwgMHg2NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgxRiwgMHg4MiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDEsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NUMsIDB4ODAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsCisweDAwLCAweDdDLCAweDhDLCAweEYwLCAweDAxLCAweEMxLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHg2NywgMHgwMiwgMHg5MywgMHgwMCwgMHg0QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OTMsIDB4MDAsIDB4N0MsCisweDQyLCAweEYwLCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEIyLCAweDA5LCAweEMyLAorMHhFNSwgMHgwMCwgMHg5NywgMHgwNSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4NUUsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDIwLCAweEU2LCAweDYwLCAweDkxLCAweDAzLCAweDQ0LCAweDA2LCAweEQwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg1QywgMHgwMiwgMHhEMCwgMHgwOSwgMHg0NiwgMHgyNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDgsIDB4RTQsCisweDA0LCAweDkxLCAweDAwLCAweDQ0LCAweDI2LCAweEQxLCAweDQ5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHg0RSwgMHhEMiwgMHgxOCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjQsIDB4MDQsIDB4RDEsIDB4MDgsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTUsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDA0LCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHgwMiwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg2MCwgMHgyNSwgMHgwMCwKKzB4OTUsIDB4NDAsIDB4NDYsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MjIsCisweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgyMCwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwNCwgMHgxMywgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywgMHgxMSwgMHg4MSwgMHgwQywKKzB4MTQsIDB4MjIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDQsIDB4MzQsIDB4MjIsIDB4RDAsIDB4NDgsCisweDYwLCAweDIzLCAweDAyLCAweDhELCAweDAwLCAweDM0LCAweDIyLCAweDEwLCAweDg4LCAweDQwLCAweDIwLCAweDA4LCAweDkxLAorMHgwMCwgMHgwNCwgMHgwNiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODIsCisweDAyLCAweDUzLCAweDBBLCAweDRELCAweDMwLCAweEYwLCAweDQ1LCAweEMxLCAweDg3LCAweDAyLCAweDE3LCAweDAyLCAweDdDLAorMHgwOCwgMHhGMCwgMHhBMCwgMHhDMCwgMHgwNywgMHgwOCwgMHgxMywgMHgwQSwgMHgzQywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4ODcsIDB4MDAsIDB4MTcsIDB4MTQsIDB4N0MsIDB4MDgsIDB4QjAsIDB4NjAsIDB4QzEsIDB4MDUsIDB4ODUsIDB4NTYsIDB4MTQsCisweDQ0LCAweDAwLCAweEYwLCAweDQxLCAweEQxLCAweDA0LCAweDAwLCAweDFGLCAweDE0LCAweDVDLCAweDAwLCAweEYwLCAweDAxLAorMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5MCwgMHgyRiwgMHgyMiwKKzB4QkYsIDB4MDAsIDB4RkMsIDB4MzMsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MEMsIDB4REMsIDB4MTIsCisweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDMwLCAweDlGLCAweDA4LCAweEZDLCAweDEyLCAweEYwLCAweDg5LCAweEM4LCAweDJGLAorMHgwMSwgMHg5RiwgMHg0MCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0OSwgMHhDMiwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDgsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEEsIDB4QzAsCisweDY1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAxLCAweEJGLAorMHgwMCwgMHhDQywgMHgzMiwgMHhFMCwgMHgwQiwgMHhDOCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwOCwgMHg2QywgMHgwMiwgMHhFMCwKKzB4NDksIDB4QzEsIDB4MkUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4RDgsIDB4MjQsIDB4MjAsCisweEJGLCAweDM0LCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEUwLCAweDJELCAweDAwLCAweEIzLCAweDAwLCAweEVDLCAweDAyLAorMHhGMCwgMHg0QiwgMHhDMSwgMHgyQywgMHgyMCwgMHg5RiwgMHg1NSwgMHhGOCwgMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHg2MCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsCisweDQ0LCAweEIwLCAweEQwLCAweDI1LCAweDQxLCAweDA0LCAweDA0LCAweDFELCAweDA4LCAweDQ0LCAweDUwLCAweEQyLCAweDQxLAorMHg0NCwgMHgwNCwgMHgwMCwgMHgxNywgMHgxMiwgMHg3NCwgMHg0MCwgMHgxNCwgMHg4MSwgMHg2OCwgMHgwNCwgMHgwNSwgMHgxRCwKKzB4MDAsIDB4NzQsIDB4MTAsIDB4NzEsIDB4MjEsIDB4NDEsIDB4MDQsIDB4MDAsIDB4MTUsIDB4MDgsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQwLCAweDA1LCAweDIwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDcyLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMywgMHg4RCwgMHgxNSwgMHgwNCwKKzB4OTIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MjQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDEsCisweDIyLCAweDIwLCAweDhELCAweDBDLCAweDM2LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIyLCAweDIxLCAweDhELCAweDAwLAorMHgzMCwgMHgxMiwgMHhEMSwgMHhDOCwgMHg0MCwgMHgzMSwgMHgwMiwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDAsIDB4ODgsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDY1LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4NDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDYsIDB4OUQsIDB4MDAsIDB4NzQsCisweDAyLCAweDUwLCAweDA4LCAweDQ4LCAweDM0LCAweDA4LCAweDk1LCAweDIwLCAweDQ2LCAweDQzLCAweEQwLCAweDA5LCAweDQwLAorMHg2NywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NiwgMHgwRSwgMHhEMCwgMHg0OSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODgsIDB4RTcsIDB4MDQsIDB4OUYsIDB4MDEsIDB4NEQsIDB4MDIsIDB4RjAsCisweDM5LCAweEUwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDA0LAorMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHgzMCwgMHgwOSwgMHg0MCwgMHg2NiwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUQsIDB4OEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4RTYsCisweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDBFLCAweEYwLCAweDA4LCAweDQwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHg2NiwgMHhGMywgMHg4OCwKKzB4RDEsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMSwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzEsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDg1LCAweDAyLCAweDFGLCAweDAwLCAweDRELCAweDA4LCAweEY4LCAweDIxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMCwgMHhDNCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDgsIDB4RjAsIDB4MDAsIDB4QzAsIDB4ODQsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDAyLCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHg0MCwgMHgzMiwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MUMsIDB4MDIsIDB4N0QsIDB4MDIsIDB4QzQsIDB4MDEsIDB4RDAsIDB4MzcsIDB4QzAsIDB4MTUsCisweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQ4LCAweDVGLCAweDAwLCAweDVGLCAweDAwLCAweDc0LAorMHgwMSwgMHhEMCwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwNSwgMHg0NSwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MUQsIDB4MDAsIDB4N0YsIDB4MjAsIDB4RjQsIDB4NEQsIDB4RDAsIDB4MDcsIDB4NDAsIDB4NTQsIDB4MjAsIDB4NUQsIDB4MDAsCisweEY0LCAweDAxLCAweDM0LCAweDA3LCAweEQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHg3MiwgMHg4MCwgMHg4RCwgMHgxMCwgMHgwNCwgMHgwMywgMHhEMCwgMHhCQywgMHg0MCwgMHgzMSwgMHgwMCwKKzB4REQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDYsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDMsCisweEQwLCAweDE4LCAweDYwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweEIwLAorMHgwMSwgMHhDMSwgMHgxMiwgMHgzNCwgMHgwQiwgMHhEMCwgMHgzNCwgMHg1MCwgMHg3MCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDgwLCAweDI4LCAweDAxLCAweDdELCAweDA4LCAweDg0LCAweDQzLCAweEQwLCAweDBFLCAweDQwLCAweDM5LCAweDAwLCAweEVELAorMHgwQywgMHhCNCwgMHgxMywgMHhEQSwgMHhDRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgxMywgMHhEMSwKKzB4MEIsIDB4NDAsIDB4MzgsIDB4MjEsIDB4MEQsIDB4MDEsIDB4ODYsIDB4MjMsIDB4RDIsIDB4NEMsIDB4NDAsIDB4MjEsIDB4MDAsCisweDY1LCAweDEwLCAweEIwLCAweDAxLCAweEQwLCAweDBFLCAweDQxLCAweDM4LCAweDA0LCAweEVELCAweDAwLCAweEY0LCAweDQ3LAorMHgxMCwgMHgwRiwgMHg0MCwgMHgxNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwKKzB4RjgsIDB4MDAsIDB4QUYsIDB4MDUsIDB4OEMsIDB4MDcsIDB4RDAsIDB4MTYsIDB4QzAsIDB4NzksIDB4MDAsIDB4RUYsIDB4MDUsCisweEJDLCAweDBGLCAweEYwLCAweDFFLCAweEM0LCAweDdCLCAweDIwLCAweEVELCAweDExLCAweEI0LCAweDg3LCAweEQwLCAweDBGLAorMHhDMCwgMHg3OCwgMHgwMSwgMHgyRiwgMHgyMSwgMHg4QywgMHg1NywgMHhGMCwgMHhCRSwgMHhDNCwgMHg2OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QjAsIDB4MDUsIDB4RjAsIDB4MUMsIDB4QzQsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4RjgsIDB4MDUsIDB4QjAsCisweDFFLCAweEQwLCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LAorMHgwMCwgMHg4RiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHhCNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjEsIDB4NEQsIDB4QzEsIDB4MzcsIDB4MDAsIDB4RDYsIDB4NDQsIDB4N0MsIDB4QUIsIDB4RjAsIDB4MEQsIDB4Q0MsCisweEI3LCAweDA2LCAweDFGLCAweDAwLCAweDZDLCAweDAzLCAweDYwLCAweDZELCAweEMwLCAweDI1LCAweDAwLCAweDVGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NDEsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NEYsIDB4MDAsCisweDIzLCAweDQxLCAweERELCAweDI3LCAweEY4LCAweDhGLCAweEMwLCAweEZGLCAweDA0LCAweEZCLCAweDAxLCAweERDLCAweDA3LAorMHhGMCwgMHg5RiwgMHhDMCwgMHg2QywgMHgwMiwgMHhGRiwgMHgwMSwgMHhFQywgMHgyRiwgMHhGMiwgMHg5QiwgMHhDMiwgMHg3RiwKKzB4NDIsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NDgsIDB4MDAsIDB4QjMsIDB4ODksIDB4QUUsCisweDI1LCAweDMwLCAweDFGLCAweEMyLCAweDdGLCAweDAyLCAweEZGLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDFFLCAweEMwLAorMHgwMCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgwOSwgMHgwMCwgMHg2MSwKKzB4MDgsIDB4ODUsIDB4MDEsIDB4RDgsIDB4MEUsIDB4NDEsIDB4M0YsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDIsCisweDBGLCAweDU0LCAweDg4LCAweDIwLCAweEU3LCAweDAwLCAweDg1LCAweDIzLCAweEQwLCAweENBLCAweDQwLCAweDNCLCAweDAyLAorMHgyMSwgMHgwOCwgMHhBQywgMHgwMywgMHg3MCwgMHgwRiwgMHg0OCwgMHgyOCwgMHgwMCwgMHhFQiwgMHgwMCwgMHg4QywgMHgwMSwKKzB4QjAsIDB4NEEsIDB4NDAsIDB4M0IsIDB4MDIsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MUIsIDB4RDAsIDB4MEUsIDB4NTAsIDB4NTQsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDA0LCAweDIxLCAweDAyLAorMHg5NCwgMHhDMywgMHhEMCwgMHg4NiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHg5NCwgMHgyMywgMHhEMCwgMHgwRSwKKzB4NDIsIDB4MzgsIDB4OTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDIsIDB4MEEsIDB4MDAsIDB4M0YsIDB4MDQsIDB4MDEsCisweDAwLCAweDg0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLCAweDA5LCAweDAwLCAweEExLCAweDQwLCAweDk3LCAweDAxLCAweDEyLAorMHgwRSwgMHg0OCwgMHgyQiwgMHgxMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4QTcsIDB4MDEsIDB4MDEsIDB4ODEsIDB4NDQsCisweDBFLCAweEQwLCAweDMxLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQ4LCAweDBDLCAweDQwLAorMHhCMCwgMHgwOCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg2MCwgMHgzMywgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MjQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NTAsIDB4MjEsIDB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4NDAsIDB4MTIsIDB4MDgsCisweDQwLCAweDIzLCAweDAxLCAweENELCAweDAwLCAweDc0LCAweDlFLCAweEQxLCAweDhDLCAweDQwLCAweDEwLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHhGRCwgMHg0MCwgMHgzMywgMHgwMSwgMHg1QywgMHgwNCwKKzB4RDAsIDB4MTksIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RDQsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NzQsCisweDAwLCAweEZFLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweEJCLCAweDgwLCAweDEzLCAweDAwLCAweENDLAorMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgyNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg1QywgMHgwNSwgMHgxMCwgMHgwNSwgMHhDOCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4NEIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDA4LCAweDVGLCAweDBBLCAweDdDLCAweDQwLCAweEYwLAorMHgyOSwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgyMywgMHhGMywgMHgwRCwgMHhDNCwgMHhDNywgMHgwMCwKKzB4QzQsIDB4ODAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDEsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsCisweDcwLCAweDBDLCAweEMwLCAweDI2LCAweDAwLCAweDVGLCAweDAyLCAweDUwLCAweDA1LCAweEYwLCAweDBELCAweEMwLCAweDI3LAorMHgwMCwgMHhERSwgMHg0MCwgMHg3QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDIsIDB4MzMsIDB4MjAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MEIsCisweEMwLCAweDNDLCAweDAwLCAweEZFLCAweDAwLCAweEZFLCAweDAzLCAweEIyLCAweDBGLCAweEMyLCAweDdGLCAweDA1LCAweEZGLAorMHgwMCwgMHhDRCwgMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzIsIDB4MEUsIDB4MDAsIDB4MEYsIDB4MDEsIDB4Q0QsIDB4MDEsIDB4MzAsIDB4NEYsIDB4QzAsIDB4N0MsIDB4MDEsCisweEVGLCAweDAwLCAweENDLCAweDA3LCAweDMwLCAweDFCLCAweEMwLCAweDAwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg3NiwgMHgyMCwgMHgwNSwgMHgwNCwgMHg0NCwgMHgwNCwgMHgxMCwgMHgzOSwgMHg0MSwKKzB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NzAsIDB4MEQsIDB4NDAsIDB4QTcsIDB4ODAsIDB4REQsIDB4MDAsCisweDQ0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM1LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAzLCAweDcyLCAweDBELAorMHg0OCwgMHg0NSwgMHgwMCwgMHgxRCwgMHgwNSwgMHgwNCwgMHgwOCwgMHg1MiwgMHgwQywgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MDksIDB4MTAsIDB4OUMsIDB4NDAsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweEEwLCAweDE0LCAweDUwLCAweDExLCAweDAwLCAweDQ0LCAweDA2LCAweDEwLCAweDExLCAweDYwLCAweDM2LAorMHgxMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0QSwgMHgwNywgMHg4MCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MDMsIDB4RDAsIDB4MDksIDB4NjgsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsCisweDQ0LCAweDAwLCAweDlELCAweDA4LCAweDQ0LCAweDIwLCAweDEwLCAweDBELCAweDQwLCAweDM1LCAweDAwLCAweERELCAweDAwLAorMHg1NCwgMHgxMywgMHg1MCwgMHgwNSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDUsIDB4MDQsIDB4MTQsIDB4MDgsIDB4NTAsIDB4MzIsIDB4MDAsCisweENELCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDgwLCAweDA0LCAweDAzLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgzNCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg1MiwgMHgwQywgMHg0MCwgMHgyMSwKKzB4MTAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NTAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDUsCisweDBCLCAweDE0LCAweDBELCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhCMCwgMHgzMiwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMCwgMHgwMSwgMHhDMiwgMHgzRSwgMHgxMCwgMHhERiwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4MTAsIDB4RUQsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsCisweDA5LCAweDg4LCAweDNGLCAweDQwLCAweDEzLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEUwLCAweDA0LCAweDIwLAorMHgxRiwgMHgwMCwgMHg0RSwgMHgwMCwgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwQiwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsCisweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDBCLCAweENBLCAweDNELCAweDAwLCAweEZGLCAweDIwLAorMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MzksIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NDAsIDB4MEYsIDB4QzAsIDB4MEQsIDB4MDAsIDB4M0YsCisweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEM4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDEzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzRiwKKzB4MDAsIDB4RkIsIDB4MUMsIDB4RUMsIDB4MDUsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NUYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsCisweDAzLCAweEIwLCAweDBGLCAweEMxLCAweDNGLCAweDAwLCAweDNCLCAweDgxLCAweEVDLCAweDMzLCAweDcwLCAweDBGLCAweEMwLAorMHg0RiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhGQywgMHg4NCwgMHhGMCwgMHg0RiwgMHg4MCwgMHg3QywgMHgwMCwgMHg3QiwgMHgwMSwKKzB4QkMsIDB4MDQsIDB4RjAsIDB4MTMsIDB4QzIsIDB4NEUsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDMsCisweDQ0LCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweEZGLCAweDAyLAorMHhGMSwgMHgwMiwgMHg0NCwgMHgwNiwgMHgxNCwgMHgxOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg4RCwgMHg3MCwgMHg3NCwgMHhBRiwKKzB4MTAsIDB4MUYsIDB4NDAsIDB4RkYsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4M0IsIDB4MTAsIDB4QkYsIDB4NDAsIDB4NzcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweEJGLCAweDQwLCAweDM4LCAweDA1LCAweDkxLCAweDAxLCAweDc0LAorMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NiwgMHg4NiwgMHhEMiwgMHgxOSwgMHg0MCwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MjAsIDB4QzgsCisweDA0LCAweDY0LCAweDAxLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDA0LCAweDA2LCAweDAzLCAweDkwLAorMHgwQywgMHg0MiwgMHhCMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMywgMHg1MCwgMHgwQywgMHg2MCwgMHgzMywgMHgyMCwKKzB4Q0QsIDB4ODAsIDB4MzQsIDB4MDIsIDB4NTIsIDB4MEMsIDB4NjAsIDB4MzAsIDB4NDAsIDB4ODUsIDB4NDAsIDB4MTYsIDB4MDAsCisweEQwLCAweDAwLCAweDQyLCAweDAzLCAweDAwLCAweEM1LCAweDgwLCAweDM0LCAweDAwLCAweEQyLCAweDAwLCAweDQyLCAweDQ3LAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4NTAsIDB4MTksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MjMsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsCisweDQwLCAweDM3LCAweDAwLCAweDlDLCAweDAxLCAweDM0LCAweDAzLCAweDEwLCAweDBELCAweDAwLCAweDM3LCAweDAwLCAweERELAorMHgwNiwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgxMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwKKzB4MTEsIDB4NDAsIDB4NjcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4QzAsIDB4MTksIDB4NDAsIDB4MEYsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLCAweERCLCAweDgwLCAweDJDLAorMHgxMiwgMHg3MSwgMHgxMSwgMHhDMSwgMHgxNywgMHgwMSwgMHgxRiwgMHgwMywgMHg0QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4MTMsIDB4MDMsIDB4NkMsIDB4MDMsIDB4NzIsIDB4MEQsIDB4QzgsIDB4MDcsIDB4MDEsIDB4MUUsIDB4MDAsCisweDdDLCAweDAxLCAweEYwLCAweDBDLCAweEMwLCAweDM0LCAweDAwLCAweDU1LCAweDA1LCAweDdDLCAweDA0LCAweEQwLCAweDMxLAorMHhDMCwgMHg0NywgMHgwMSwgMHhERiwgMHhBMCwgMHg3NCwgMHgwNCwgMHhGMCwgMHgxOSwgMHhDMSwgMHgwMywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDIsCisweEIwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDgwLCAweEJDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMSwgMHhGRiwgMHg0MSwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4M0YsIDB4MDAsIDB4QjMsIDB4MDksIDB4RjgsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsCisweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEY4LCAweDQwLCAweEYwLCAweDA5LCAweEMxLCAweDFGLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MjksIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MjIsIDB4NkMsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweDEzLCAweDQ2LCAweDdDLCAweDAzLCAweEIyLCAweDBELCAweEM0LCAweDM0LCAweDAwLCAweERGLCAweDAyLCAweDRDLCAweDE3LAorMHhCMCwgMHg4RCwgMHhDMiwgMHgzNywgMHgxMCwgMHg5RiwgMHg4MCwgMHg3RSwgMHgwOCwgMHhCNCwgMHg4MSwgMHhDOCwgMHgyNywKKzB4MTEsIDB4REYsIDB4MDAsIDB4NUUsIDB4MDAsIDB4RjAsIDB4MjksIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDNDLCAweDAwLCAweEYxLCAweDAwLCAweDQ0LCAweDEyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgyMiwgMHg5RCwgMHhBMCwgMHhDNCwgMHg0QiwgMHg1MCwgMHgxRiwgMHg0MCwgMHgzRiwgMHgwMCwgMHgxQSwKKzB4MDMsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsIDB4NzQsIDB4MDEsIDB4REQsIDB4MDAsIDB4NDQsIDB4MEIsIDB4MTAsCisweDJGLCAweDQyLCAweDM3LCAweDAwLCAweDkxLCAweDBCLCAweDc0LCAweDAyLCAweDIxLCAweDAxLCAweDQwLCAweEE3LCAweDAxLAorMHhERCwgMHgwMCwgMHg0NiwgMHgxQSwgMHg5MCwgMHgyOSwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MTMsIDB4RDAsIDB4MDAsIDB4NDAsCisweDMyLCAweDAyLCAweDBELCAweDAwLCAweDI0LCAweDFGLCAweDEwLCAweDBDLCAweDQ4LCAweDMzLCAweDAwLCAweDA0LCAweDAwLAorMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMSwgMHgwRCwgMHhBMCwgMHgyNiwgMHg4OCwgMHgxMCwgMHgyQywKKzB4NDgsIDB4MzMsIDB4MDAsIDB4QzQsIDB4MDgsIDB4MzQsIDB4MDAsIDB4MTAsIDB4NTAsIDB4NDgsIDB4NDIsIDB4MjAsIDB4QzksCisweDgwLCAweDI0LCAweDAyLCAweEQyLCAweDIwLCAweDQwLCAweDFFLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHg4MCwgMHg3MCwgMHgwMCwgMHhDMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxRSwgMHg0MCwgMHg2QiwKKzB4MDAsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDIsIDB4QUQsIDB4MjksIDB4QjQsCisweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDRCLCAweDAwLCAweDJELCAweDQxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDYwLAorMHg3QiwgMHgyMiwgMHhFMSwgMHg0MSwgMHhGNCwgMHgwNCwgMHg5MCwgMHg5MiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4ODQsIDB4MDYsIDB4OTAsIDB4MTIsIDB4NDAsIDB4MUEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDA4LCAweDFDLCAweDAzLCAweEQwLCAweDA0LCAweEMwLCAweDIzLCAweDAwLAorMHhDRiwgMHgwMCwgMHgyRSwgMHgwMywgMHgzMCwgMHgwQywgMHhFOCwgMHgzMywgMHgwMiwgMHg4NywgMHgxMiwgMHgzQywgMHgwMywKKzB4QjAsIDB4MEMsIDB4QzEsIDB4MDMsIDB4MjAsIDB4MEQsIDB4MDEsIDB4MkQsIDB4MTYsIDB4MzAsIDB4OEMsIDB4QzAsIDB4MzMsCisweDAwLCAweDg3LCAweDA4LCAweDM0LCAweDA2LCAweDMwLCAweDUwLCAweEMyLCAweDEzLCAweDAwLCAweENGLCAweDAwLCAweDNDLAorMHgwMywgMHhGMCwgMHg4NCwgMHhDMCwgMHg0QSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QjgsIDB4M0QsIDB4MDAsIDB4RkMsIDB4MjIsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MkYsIDB4MDIsIDB4RkYsCisweDAwLCAweDlDLCAweDYzLCAweEYwLCAweEFGLCAweEMwLCAweDMzLCAweDRBLCAweDkzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRSwgMHhDMSwgMHgwQywgMHg5MiwgMHgxRiwgMHg4MCwgMHgwQywgMHgyMywgMHg3NCwgMHgwRiwgMHhDMCwgMHg3NywgMHgwMCwKKzB4QjcsIDB4MDgsIDB4N0MsIDB4MDIsIDB4NzAsIDB4ODcsIDB4RTAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkQsIDB4MDIsCisweEYwLCAweDBGLCAweEMyLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLAorMHhCNywgMHgwMywgMHhERiwgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg3RiwgMHgwMSwKKzB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4ODYsIDB4MTMsIDB4MDEsIDB4NUMsIDB4MDMsIDB4NzEsIDB4NUQsCisweEMwLCAweDQwLCAweDkwLCAweDEzLCAweDAwLCAweDdDLCAweDAxLCAweDM4LCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweEQzLAorMHg4MCwgMHg3QywgMHgwMiwgMHhEMCwgMHgxMSwgMHhDMCwgMHgyNCwgMHg4MCwgMHhDRiwgMHgwMCwgMHg0QywgMHgwMCwgMHhGMSwKKzB4MDEsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksCisweDAzLCAweEVELCAweDAyLCAweEI0LCAweDAyLCAweDEwLCAweDA2LCAweDQwLCAweDJCLCAweDAwLCAweEZELCAweDAwLCAweDg0LAorMHg5MywgMHhEMCwgMHgyRSwgMHg0MiwgMHgzMywgMHgyMSwgMHhBMSwgMHgwMCwgMHg4NCwgMHgxMywgMHhEMCwgMHhDRSwgMHg2OCwKKzB4MzksIDB4MzAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4M0YsIDB4MTksIDB4RTEsIDB4MjAsCisweEI0LCAweDAyLCAweEQyLCAweDAyLCAweDQ0LCAweDM4LCAweDEwLCAweEVELCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDAyLAorMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDgsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDcsCisweEQwLCAweDVFLCAweDQwLCAweDdCLCAweDAxLCAweEIxLCAweDIxLCAweEI0LCAweDI3LCAweDUwLCAweDFDLCAweDUwLCAweDNBLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg5NCwgMHgwNywgMHg5MSwgMHg5RSwgMHg0NCwgMHgzQiwgMHgwMywgMHhBMSwgMHgwMSwgMHhCNCwKKzB4NDYsIDB4RDgsIDB4MTMsIDB4NDQsIDB4NzgsIDB4MDAsIDB4RTUsIDB4ODEsIDB4ODQsIDB4QzcsIDB4RDAsIDB4MUEsIDB4NDAsCisweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDA4LCAweENELAorMHgwMCwgMHgzNCwgMHgyRSwgMHgxNSwgMHgyQywgMHg0MSwgMHgyMywgMHgyMCwgMHhDRCwgMHgxMywgMHgwNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDQsIDB4MzcsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDg3LCAweDkwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDQ3LAorMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHg4NywgMHhEMCwgMHhFQywgMHg0MCwgMHg0QiwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsCisweEJDLCAweDBELCAweDMwLCAweDA3LCAweEMwLCAweDVGLCAweDAxLCAweDdGLCAweDQwLCAweDdDLCAweDAxLCAweEQwLCAweDA1LAorMHhDMCwgMHgxNywgMHgxMCwgMHg3MywgMHgwMywgMHg3QywgMHgwMSwgMHg3MSwgMHgwNSwgMHhDMCwgMHg5RSwgMHhDMCwgMHg3MywKKzB4MDksIDB4OUMsIDB4MDUsIDB4OTEsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NjEsIDB4MDAsIDB4RjQsIDB4MDEsIDB4RjAsCisweDI3LCAweDQwLCAweDFDLCAweDgwLCAweDRGLCAweDAwLCAweEM0LCAweDhELCAweEYwLCAweDM3LCAweDQwLCAweDVGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4NDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RTAsCisweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg0LCAweDI2LCAweDFGLCAweDhBLAorMHg3QywgMHgyMCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwOCwgMHhGMiwgMHgwMSwKKzB4QzAsIDB4ODcsIDB4MzksIDB4MUYsIDB4MDAsIDB4N0QsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDA2LAorMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg4MywgMHgwMCwgMHgwQywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDOCwgMHgyNywKKzB4MDIsIDB4OUIsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTEsIDB4MDAsIDB4N0MsCisweDIyLCAweEI0LCAweDk4LCAweEMwLCAweDI1LCAweDAwLCAweDkzLCAweDQwLCAweDRDLCAweDI2LCAweDMwLCAweDA5LCAweEMxLAorMHg2NywgMHgwMiwgMHg5QiwgMHgwMCwgMHgwQywgMHgwMiwgMHgzMCwgMHgzOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTQsCisweDA5LCAweEMwLCAweDIxLCAweDAyLCAweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDIzLCAweDAwLAorMHg5MCwgMHgwMSwgMHg3NCwgMHgwMiwgMHhEMCwgMHg5OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwNCwgMHg3QywgMHgwRSwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MkMsIDB4MDAsIDB4OUIsIDB4MTIsIDB4MkMsIDB4MEUsIDB4MTQsIDB4OTksIDB4NDAsIDB4RTMsCisweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDBBLCAweDUwLCAweDM5LCAweDQ4LCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg4MCwgMHg4RCwgMHgwMCwgMHg1NCwgMHgyMiwgMHgxMCwgMHgwOSwKKzB4NjAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4OTksCisweDAwLCAweDcwLCAweDAyLCAweEQ4LCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDk1LCAweDIwLCAweDc2LCAweDBBLCAweDE4LAorMHgwOSwgMHg0MSwgMHgyNSwgMHgwMCwgMHg5MSwgMHgwOCwgMHg0MCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwNCwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4NDcsIDB4MTEsIDB4MjksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweEEwLCAweDAxLCAweDhELCAweDA0LCAweDA0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLAorMHhBNSwgMHhBMCwgMHg4NSwgMHgxNCwgMHgwNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhDOSwgMHgwMCwKKzB4MzQsIDB4MjIsIDB4RDIsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MUEsIDB4MDgsCisweDQwLCAweDIwLCAweDAyLCAweDk5LCAweDIwLCAweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDI3LCAweDAwLCAweDgxLAorMHgwMSwgMHgwNCwgMHgxMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUQsIDB4OEEsIDB4NTQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4QzEsIDB4OTcsCisweDAwLCAweDEzLCAweDBBLCAweDRDLCAweDUwLCAweEIwLCAweDQxLCAweDQxLCAweDA3LCAweDA1LCAweDFCLCAweDAwLCAweDdDLAorMHg1OCwgMHhEMCwgMHg0MSwgMHg0MSwgMHgxNywgMHgwMCwgMHgxNywgMHgyMCwgMHg3RSwgMHgwMCwgMHhCMCwgMHg0MSwgMHhDMSwKKzB4QzUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MEEsCisweDRDLCAweDAwLCAweDMzLCAweDAxLCAweEMyLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHhCOCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwOCwgMHhCQywgMHgwMiwgMHhEMCwgMHgwQiwgMHhDOCwgMHgyRCwgMHgwMSwKKzB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4QTYsIDB4MDAsIDB4N0MsIDB4MTIsCisweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEJCLCAweDAwLCAweDlDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweEE3LAorMHgwOSwgMHhCRiwgMHg2MCwgMHhEQywgMHg4MiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwOCwgMHg5NywgMHgwMCwgMHhGRCwKKzB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4NDgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI3LCAweDA1LCAweDlGLCAweDBDLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDJGLCAweDAyLCAweDlGLAorMHg4NCwgMHhGNCwgMHhEMiwgMHg3MCwgMHg0QiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgyMiwgMHg3MCwKKzB4NEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjcsIDB4MjAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzIsIDB4NjQsIDB4MDMsCisweEE1LCAweDgwLCAweENDLCAweDAyLCAweDcxLCAweDBCLCAweDQwLCAweDJELCAweDAwLCAweEJCLCAweDIwLCAweENDLCAweDAyLAorMHhGMCwgMHgwQiwgMHg4MiwgMHg2NCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwKKzB4NDcsIDB4MDUsIDB4MUQsIDB4NEMsIDB4NzQsIDB4MDAsIDB4QzAsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MjAsIDB4MUQsIDB4QjQsCisweDc0LCAweDAwLCAweDcwLCAweDgxLCAweDQwLCAweDg0LCAweDAwLCAweDE5LCAweDgwLCAweDc0LCAweEEwLCAweEQwLCAweDAxLAorMHg0NCwgMHgwNiwgMHgwMCwgMHgxMywgMHg4MCwgMHg1QywgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg4NCwgMHgxMCwgMHg1NywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MTUsIDB4MjAsIDB4MTksIDB4NTAsIDB4NkMsIDB4MDAsIDB4RDAsCisweDAxLCAweDUwLCAweDcwLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLAorMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwQywgMHgzNCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4ODgsIDB4NDgsCisweDI2LCAweDgwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweEEwLCAweDIwLCAweDg1LCAweDAwLAorMHgxNywgMHg4MiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsCisweDlELCAweDAwLCAweDc0LCAweDEzLCAweEQwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDlELCAweDEwLCAweDc0LCAweDAyLAorMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNiwKKzB4MDAsIDB4OTEsIDB4MDYsIDB4NTYsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MTAsIDB4OTUsIDB4MDgsIDB4NDQsCisweDA2LCAweEQ4LCAweDE5LCAweDQwLCAweDI1LCAweDAwLCAweDk5LCAweDAwLCAweDY0LCAweDA2LCAweEQwLCAweDE5LCAweDAwLAorMHg2MCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyRCwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4QTcsIDB4MDIsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MDIsIDB4NzAsCisweDA5LCAweEM0LCAweDI0LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDYwLCAweDAxLAorMHg5RiwgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHg0NiwKKzB4NzAsIDB4NTksIDB4Q0UsIDB4RTUsIDB4MDIsIDB4OUIsIDB4MDAsIDB4NkMsIDB4NEUsIDB4RjAsIDB4MTksIDB4QzEsIDB4MTQsCisweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4NTAsIDB4MjcsIDB4MjQsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4NjUsIDB4MDIsIDB4OUYsCisweDQxLCAweDc4LCAweDAyLCAweEYxLCAweDA4LCAweEQwLCAweDI3LCAweDA4LCAweDlGLCAweDAxLCAweDc4LCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NywgMHg4MCwgMHg5RSwgMHgwMCwgMHg3OCwgMHgwMiwgMHhGMSwgMHgwOCwgMHhDMCwgMHg1MywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsCisweDAwLCAweEY4LCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDgwLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMywgMHg3QywgMHgwMCwgMHhEMiwgMHgwMCwgMHhEMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgxMiwKKzB4NEMsIDB4NDAsIDB4QjAsIDB4ODEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MTgsIDB4RjAsIDB4MjEsCisweEMwLCAweDA3LCAweDA0LCAweDEzLCAweDAwLCAweDRDLCAweDE4LCAweDMwLCAweDAxLCAweEMwLCAweDUzLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHhDNCwgMHgwMSwKKzB4NzAsIDB4MDUsIDB4NDAsIDB4OUYsIDB4MDgsIDB4NTEsIDB4MDAsIDB4RjQsIDB4NkQsIDB4RDAsIDB4MTUsIDB4NDAsIDB4OUYsCisweDAwLCAweDdELCAweDEwLCAweDc0LCAweDAxLCAweEQxLCAweDE1LCAweDQzLCAweDlDLCAweDEwLCAweDdELCAweDAwLCAweEVDLAorMHgxMSwgMHg3MCwgMHgzNywgMHhDOCwgMHgxNiwgMHgwMCwgMHg2RCwgMHgxMCwgMHhDNSwgMHgwMSwgMHhEMCwgMHg4NywgMHg0MCwKKzB4NUYsIDB4MDQsIDB4NjEsIDB4MTgsIDB4QzQsIDB4MDksIDB4QjAsIDB4MDcsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAxLCAweDUwLAorMHgwQywgMHg0OCwgMHhCMywgMHgwNCwgMHhDMSwgMHgwMCwgMHgzNiwgMHgwRSwgMHhEMCwgMHgwOCwgMHg0MCwgMHhCMywgMHgwMCwKKzB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDgsIDB4MUMsIDB4NDQsIDB4QjIsIDB4ODEsIDB4Q0QsIDB4MEIsIDB4MjQsIDB4MDMsCisweDUwLCAweDNDLCAweDQxLCAweDMxLCAweDAwLCAweENELCAweDExLCAweDA0LCAweDBFLCAweEQwLCAweDJDLCAweDQwLCAweDczLAorMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwMywgMHgxMCwgMHhBQywgMHg2MSwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RUQsIDB4MDksIDB4ODQsIDB4MDEsIDB4NTAsIDB4MEUsCisweDQwLCAweEZCLCAweDQwLCAweEUxLCAweDAwLCAweEI2LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDA0LCAweEVELAorMHgyMCwgMHhCNCwgMHg5MywgMHhEMCwgMHgxRSwgMHg0MCwgMHhBQSwgMHgwOCwgMHhGRCwgMHgwMSwgMHhBNCwgMHgwMCwgMHg1MSwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4MDIsIDB4MkQsIDB4MDAsIDB4ODYsIDB4MEEsIDB4RDAsIDB4MEUsIDB4NjAsIDB4N0IsIDB4MDgsCisweEUxLCAweDAwLCAweDA1LCAweDg3LCAweDkwLCAweDBFLCAweDYwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMSwgMHhGRiwgMHgwNSwgMHg5QywgMHgwNSwgMHg3MCwgMHgxRSwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RTMsIDB4MEYsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDAsIDB4MkQsIDB4MDEsCisweEI0LCAweDNGLCAweEYwLCAweDBDLCAweENDLCAweDRBLCAweDgwLCAweEVGLCAweDAxLCAweEFFLCAweDA0LCAweDcwLCAweDFDLAorMHhDMCwgMHg3OSwgMHgwNSwgMHgyRCwgMHgwMSwgMHg5QywgMHgwNywgMHhFOSwgMHgxRSwgMHhDMCwgMHg3QiwgMHg0MCwgMHhFMSwKKzB4MjEsIDB4OEMsIDB4MDUsIDB4MzAsIDB4MTYsIDB4QzAsIDB4NTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweERGLCAweDEwLCAweDdDLCAweDAxLCAweDcwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4ODMsIDB4RjEsIDB4MEQsIDB4QzIsIDB4MjUsIDB4MDAsIDB4Q0YsIDB4NDAsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MEQsIDB4QzAsCisweEI2LCAweDIwLCAweDFGLCAweDAwLCAweDU4LCAweDgzLCAweEZBLCAweDA5LCAweEMwLCAweDEzLCAweDA4LCAweENGLCAweDAwLAorMHg3NCwgMHgwMiwgMHhGMSwgMHgwNSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QTIsIDB4N0YsIDB4MTQsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MTEsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsCisweEZGLCAweDA5LCAweEZDLCAweDA2LCAweDMwLCAweDlGLCAweEMwLCAweDdFLCAweDAyLCAweEZGLCAweDA5LCAweEZDLCAweDA3LAorMHg3MCwgMHgxRiwgMHhDOCwgMHg2RiwgMHgwMiwgMHhFRiwgMHg0MSwgMHhEQywgMHgyNCwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QywKKzB4MDAsIDB4MzMsIDB4MDksIDB4RjgsIDB4MDcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RkIsIDB4NDEsIDB4Q0MsCisweDA1LCAweDMwLCAweDk3LCAweEM0LCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHg0MSwgMHhEMSwgMHgwRSwgMHhDMCwgMHgzOSwgMHgyMywgMHhFRCwKKzB4MDgsIDB4QjQsIDB4MDIsIDB4QjAsIDB4OEUsIDB4MDgsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDgsIDB4REMsIDB4MjMsIDB4MzAsCisweDRFLCAweDQ0LCAweDZCLCAweDJBLCAweEM5LCAweEMwLCAweDEwLCAweDIwLCAweEQwLCAweDgyLCAweDQwLCAweDM5LCAweDAwLAorMHgyRCwgMHgwQywgMHgzNCwgMHgwNywgMHhEMCwgMHgwNCwgMHgwMCwgMHgzQiwgMHgwNywgMHhFNywgMHgwOCwgMHhBQywgMHgyOSwKKzB4MzAsIDB4QUUsIDB4QzAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDc5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDIxLCAweEQwLCAweDBFLCAweDQwLCAweDFCLCAweDI0LCAweEVELCAweDQwLAorMHg5NiwgMHgwMiwgMHg5MCwgMHg4RSwgMHg0OCwgMHgyOSwgMHgwOCwgMHgyRCwgMHgwMCwgMHg5MCwgMHgwMywgMHg1MCwgMHgwQSwKKzB4NDgsIDB4MEIsIDB4MDcsIDB4NjUsIDB4MTgsIDB4OTQsIDB4NDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzEsIDB4MDAsIDB4MkQsCisweDgwLCAweEI0LCAweDQzLCAweEQwLCAweDBFLCAweDQ4LCAweDJCLCAweDAwLCAweDY1LCAweDAwLCAweDg0LCAweDAxLCAweDkwLAorMHg4MiwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MEQsIDB4RDAsIDB4MkMsIDB4NDAsIDB4RTEsIDB4MDQsIDB4Q0QsIDB4MDIsIDB4MzQsCisweDAyLCAweDgwLCAweDBDLCAweDUwLCAweDIxLCAweDEwLCAweENELCAweDEyLCAweDE0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLAorMHg2MywgMHgxMSwgMHg0OSwgMHgwMSwgMHgwNCwgMHgwQywgMHhDMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHgwMCwgMHgwRCwgMHgwMCwKKzB4MzQsIDB4NEIsIDB4RDgsIDB4OTAsIDB4NDIsIDB4NzMsIDB4MDEsIDB4NDUsIDB4MDAsIDB4MjQsIDB4MkUsIDB4MTQsIDB4MTgsCisweDQwLCAweDE5LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLAorMHhGRiwgMHgwMCwgMHgzQywgMHgwRiwgMHhGMCwgMHgyRCwgMHhDMSwgMHg4MywgMHgwMCwgMHhGRiwgMHgwNSwgMHg1RSwgMHgwMywKKzB4QjAsIDB4MDgsIDB4QzAsIDB4MzUsIDB4MDAsIDB4Q0YsIDB4ODEsIDB4REMsIDB4ODMsIDB4NzAsIDB4MDksIDB4QzIsIDB4MjMsCisweDEwLCAweEQ3LCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDNELCAweDA4LCAweDE3LCAweDE4LCAweDc0LAorMHgwMywgMHhGMCwgMHgzOSwgMHg2OCwgMHgzNywgMHgxMCwgMHhENywgMHgwMCwgMHg0QywgMHg4MiwgMHhCOCwgMHg1OSwgMHhDMCwKKzB4NzcsIDB4MjEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsCisweDQwLCAweDdDLCAweDExLCAweEYwLCAweDRELCAweEMyLCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYxLAorMHgwRCwgMHg0MCwgMHhCNCwgMHgwMCwgMHhERiwgMHgwMSwgMHg1QywgMHgwMywgMHg3MCwgMHgwRCwgMHg4MiwgMHhBNywgMHgwMCwKKzB4REMsIDB4NDQsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MTYsIDB4MjAsIDB4N0MsIDB4MDMsCisweEYwLCAweDA5LCAweEM1LCAweDM2LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM5LCAweDA3LAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwKKzB4RkMsIDB4MEIsIDB4MzAsIDB4MEUsIDB4QzAsIDB4MkMsIDB4MDAsIDB4RjMsIDB4MTAsIDB4RkMsIDB4MjcsIDB4RjAsIDB4MDksCisweEMwLCAweDM4LCAweDQwLCAweDMzLCAweDA1LCAweENDLCAweDAzLCAweEYwLCAweDBBLCAweEMwLCAweDBDLCAweDAwLCAweEYzLAorMHhBMCwgMHhFOCwgMHhDMCwgMHgzMCwgMHgxMywgMHhDMCwgMHgzRiwgMHgwMCwgMHgzQiwgMHgwMSwgMHhDQywgMHgwNSwgMHhGMCwKKzB4MDMsIDB4QzIsIDB4M0QsIDB4MDAsIDB4RkIsIDB4MDEsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDIsIDB4NDAsIDB4MDQsIDB4MjgsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweEQxLCAweDAwLCAweDc0LAorMHgwMiwgMHgxNCwgMHgwRCwgMHg2MCwgMHg2NCwgMHg4MSwgMHhENSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzUsIDB4ODEsIDB4RDEsIDB4MjMsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4NDAsIDB4RTUsIDB4MDAsIDB4QzEsIDB4MDAsCisweDEwLCAweDIwLCAweEIwLCAweDUxLCAweDQwLCAweDM3LCAweDAwLCAweDA1LCAweDQzLCAweDQ0LCAweDE1LCAweEQwLCAweDExLAorMHg0MywgMHgxMywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3QywgMHgwRSwgMHhEMSwgMHgzMSwgMHg1MCwgMHgwNCwgMHgwNiwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzIsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDMsCisweDkyLCAweDBELCAweDUwLCAweDQ0LCAweDA4LCAweEQxLCAweDAwLCAweDc0LCAweEMzLCAweERBLCAweDBELCAweDAwLCAweDE0LAorMHgyMCwgMHgxMSwgMHg0MCwgMHg2NCwgMHgwMywgMHhEMCwgMHg0OSwgMHg0MCwgMHhDNCwgMHgwMCwgMHg5MSwgMHgwOCwgMHg3NCwKKzB4NDAsIDB4OTAsIDB4NEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTUsIDB4MTQsIDB4NjQsIDB4MjMsIDB4RDEsIDB4MTksIDB4MDQsCisweDM3LCAweDAwLCAweDkxLCAweDA0LCAweDc0LCAweDA0LCAweEQ5LCAweDE5LCAweDQwLCAweDA1LCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg5MCwKKzB4MEMsIDB4NDAsIDB4MDQsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDEsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTEsIDB4MTAsCisweDAxLCAweDAwLCAweDI0LCAweDAzLCAweDUwLCAweDBDLCAweDQ2LCAweDA1LCAweEUxLCAweDkxLCAweDAyLCAweDU0LCAweDIwLAorMHg5MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHgxNSwgMHgwMCwgMHgwNSwgMHhCMywgMHhEOCwgMHgwMCwgMHgwMCwgMHgzMywKKzB4QzAsIDB4ODEsIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDNFLCAweDAwLCAweEZCLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELAorMHg0MCwgMHgwNCwgMHgwMCwgMHhGMSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDQsIDB4MDUsIDB4MTMsIDB4MDIsIDB4NkMsIDB4MDAsIDB4QjAsCisweDAxLCAweDQwLCAweDNGLCAweDAwLCAweDE3LCAweDAwLCAweDZDLCAweDAzLCAweEYyLCAweEExLCAweEMwLCAweDI3LCAweDAwLAorMHg0MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgwNSwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MEYsIDB4QzAsCisweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLAorMHhEMCwgMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwgMHgwNywgMHgxMCwgMHgzRiwgMHg4MCwgMHhFQywgMHg5MCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4M0YsIDB4MDAsIDB4M0MsIDB4MDAsIDB4N0MsIDB4MUIsIDB4RjAsIDB4NDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsCisweDAwLCAweERDLCAweDAyLCAweEYwLCAweDBCLCAweEM4LCAweDE3LCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHg4MCwgMHgwRiwgMHgwNiwgMHhBRiwgMHgwMCwgMHhFQywgMHgwMiwgMHhFMCwgMHgxRSwgMHhDMCwgMHgwRiwKKzB4MDUsIDB4RkIsIDB4MEMsIDB4RkMsIDB4NTAsIDB4MzAsIDB4NDMsIDB4QzAsIDB4MkMsIDB4MDEsIDB4MzMsIDB4MDAsIDB4Q0MsCisweDAzLCAweDMwLCAweDFGLCAweEMwLCAweDBGLCAweDA1LCAweDIzLCAweDAxLCAweEVDLCAweDAzLCAweEIwLCAweDEzLCAweEMwLAorMHgzRiwgMHgwMSwgMHgzQiwgMHgwMSwgMHhDNCwgMHgwNiwgMHhCNiwgMHg4MywgMHhDMCwgMHgwRCwgMHgwMywgMHgzNywgMHgwMCwKKzB4QUMsIDB4MjcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4MEUsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDEwLCAweDg3LCAweDAxLCAweDlELCAweDAxLCAweDQ0LCAweDAwLCAweEQwLCAweDBELCAweDQwLCAweDgzLCAweDAwLAorMHhGMSwgMHgwOCwgMHg3NCwgMHgxMCwgMHgxMCwgMHgwOSwgMHg0MCwgMHhCNCwgMHgwNywgMHg1NSwgMHgxMCwgMHg4NCwgMHgyQiwKKzB4MTAsIDB4NDEsIDB4QzMsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4QzQsIDB4MDcsIDB4QjAsIDB4MTUsIDB4QzAsIDB4QkQsCisweDEyLCAweEQxLCAweDAxLCAweDQ0LCAweDQyLCAweDEwLCAweEUxLCAweDQwLCAweDkwLCAweDAzLCAweDExLCAweDIzLCAweDQ0LAorMHgxMiwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwQywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4QTAsIDB4MDMsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MTQsIDB4MDYsIDB4QzAsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4QzksCisweDA0LCAweDM2LCAweDQwLCAweDEwLCAweDY0LCAweDQ5LCAweDIwLCAweDA5LCAweDAxLCAweDA4LCAweDA0LCAweEMzLCAweDEwLAorMHg0NCwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwQiwgMHg5OCwgMHgwOCwgMHg0MiwgMHgzMywgMHg5NSwKKzB4MTUsIDB4MDAsIDB4NjQsIDB4MTMsIDB4MTAsIDB4NDgsIDB4NDgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4NzYsIDB4MTEsCisweDExLCAweDBDLCAweDUwLCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLAorMHg0NSwgMHgwMCwgMHhERCwgMHgyMiwgMHg1NCwgMHgwNCwgMHhEMSwgMHgwRCwgMHg0MCwgMHg0NywgMHgxMCwgMHhEMSwgMHgwMCwKKzB4NzQsIDB4MDksIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MTAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MjEsCisweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAxLCAweDU0LCAweDAzLCAweDgwLCAweDBELCAweDQyLCAweDM1LCAweDAwLCAweDE1LAorMHgxMCwgMHg2NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0NCwgMHgyNSwgMHgwNCwgMHhENSwgMHgxNCwgMHg1NCwgMHgwMywgMHgxMCwKKzB4MDksIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4NDcsCisweDAwLCAweDlGLCAweDA5LCAweDdELCAweDA0LCAweEYwLCAweDlELCAweEMwLCAweEM3LCAweDIwLCAweERCLCAweDgwLCAweDdDLAorMHgwOSwgMHgzMSwgMHg1MSwgMHhDMCwgMHg2NCwgMHgwMiwgMHgxMywgMHgwMiwgMHg0QywgMHgwMywgMHgzMCwgMHgyRCwgMHhDMCwKKzB4QzcsIDB4NDIsIDB4MTMsIDB4MDEsIDB4N0MsIDB4MDMsIDB4QjAsIDB4ODksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDIsCisweDJELCAweDAyLCAweEIxLCAweEI1LCAweEMwLCAweDg1LCAweDAwLCAweDA1LCAweDAzLCAweDdDLCAweDZGLCAweDI0LCAweDFDLAorMHg4MCwgMHg4QSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwKKzB4QUYsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4MTAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDIsCisweEYyLCAweDkxLCAweEMwLCAweDdCLCAweDAwLCAweDJGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDU3LCAweEMwLCAweDJELAorMHgwMCwgMHgzRSwgMHgwMCwgMHhBQywgMHg4MywgMHhGMCwgMHgwQiwgMHhDOCwgMHgzQiwgMHgwMCwgMHhGQiwgMHg0OSwgMHhEQywKKzB4MDIsIDB4RDAsIDB4MTIsIDB4QzAsIDB4MUEsIDB4NDAsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjQsIDB4NUYsIDB4QzAsCisweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDA1LCAweDgwLCAweDlGLAorMHgwNywgMHg2QywgMHgwMiwgMHg3MCwgMHg4RCwgMHhDMCwgMHgwNiwgMHgwMCwgMHhEMywgMHgyMCwgMHg1RSwgMHgwOSwgMHgzOCwKKzB4MDAsIDB4QzAsIDB4MjQsIDB4MDIsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4OTMsIDB4MDAsCisweDFGLCAweDA2LCAweDRDLCAweDYzLCAweDMwLCAweDA5LCAweEMwLCAweDM0LCAweDIwLCAweDFCLCAweDIwLCAweDRFLCAweDAzLAorMHhGMSwgMHgwRCwgMHhDMCwgMHg5NiwgMHgwQSwgMHgxNywgMHgwMiwgMHg2QywgMHg0MywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyOCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NDQsIDB4ODYsIDB4REQsIDB4QzIsCisweDQ0LCAweEU4LCAweDEyLCAweDFELCAweDQwLCAweDA0LCAweDAwLCAweEYxLCAweDAwLCAweDZDLCAweDAzLCAweDMxLCAweDAxLAorMHg0MCwgMHhGNCwgMHgwMiwgMHhERCwgMHgwNCwgMHhDNCwgMHgwMywgMHgxMCwgMHgwNSwgMHhDNiwgMHhFNywgMHg4MSwgMHgwRiwKKzB4NDAsIDB4RDAsIDB4MEIsIDB4QjEsIDB4MUQsIDB4NDAsIDB4M0QsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsCisweDA5LCAweDQ0LCAweDM0LCAweDEyLCAweERCLCAweDFCLCAweDA4LCAweDQzLCAweDEwLCAweDdELCAweDQwLCAweDRELCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgwMiwgMHgzMCwgMHgwRCwgMHgwMCwgMHgwNCwKKzB4MDYsIDB4MTAsIDB4NTgsIDB4NTAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTAsIDB4MDAsIDB4NDAsCisweDMwLCAweDAwLCAweDhELCAweDAxLCAweDA0LCAweDI3LCAweDEwLCAweDA5LCAweDQwLCAweDIzLCAweDIxLCAweDA5LCAweDQyLAorMHgwNCwgMHgwRiwgMHg1MCwgMHhGNCwgMHg0OCwgMHgzMCwgMHgxMCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMiwgMHhEQSwgMHgwMCwKKzB4MDAsIDB4NjIsIDB4NDAsIDB4Q0MsIDB4MDMsIDB4MDEsIDB4MDcsIDB4NTgsIDB4N0MsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDRBLCAweDAwLCAweDZELCAweDAxLCAweDg0LCAweDA3LAorMHgxMiwgMHgxRiwgMHg0NCwgMHg0OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHgyNCwgMHgwNCwgMHgxMCwgMHg5QSwgMHg0MCwgMHg3OCwKKzB4ODAsIDB4NEQsIDB4MDEsIDB4ODQsIDB4MjcsIDB4MTAsIDB4MUEsIDB4NDIsIDB4NTksIDB4MDAsIDB4MzUsIDB4MDEsIDB4OTQsCisweDAzLCAweERDLCAweDE2LCAweDYwLCAweDcxLCAweDAyLCAweEUxLCAweDAxLCAweDg0LCAweDA2LCAweDUwLCAweDk0LCAweDQwLAorMHg3OCwgMHg4MywgMHhFOSwgMHgwOSwgMHhDNCwgMHgyNywgMHg1MCwgMHgxNiwgMHg0MCwgMHgzNSwgMHgyMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NEMsIDB4MjMsIDB4NzAsCisweDg4LCAweEMwLCAweDgwLCAweDQyLCAweEQzLCAweDAwLCAweDM0LCAweDAyLCAweDkwLCAweDg0LCAweEM0LCAweDMwLCAweDAwLAorMHg4RCwgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHg0NCwgMHg0MCwgMHgzMywgMHgwMSwgMHgwRCwgMHgwOCwgMHgwQywgMHgxMywKKzB4NTAsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4MEMsIDB4ODMsIDB4RjAsIDB4QTAsIDB4RDAsIDB4MDIsCisweDAxLCAweDA3LCAweDg4LCAweDBDLCAweDIzLCAweDcwLCAweDRDLCAweEMwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwOCwgMHhERSwgMHgwMywgMHhGNCwgMHgwRiwKKzB4QzIsIDB4MEQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4OEYsIDB4QzIsIDB4M0YsIDB4MDAsIDB4RkYsCisweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDNGLCAweDA4LCAweEJDLCAweDFCLCAweDMwLAorMHg4RSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhBNywgMHhBMCwgMHhGRCwgMHgwMiwgMHhGMCwgMHg4NywgMHhDMCwgMHgyRiwgMHg0MSwKKzB4RUYsIDB4MDgsIDB4N0MsIDB4MjMsIDB4QjAsIDB4MEQsIDB4QzQsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDBGLCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAxLCAweEUxLCAweDA5LCAweEMwLAorMHgwNywgMHgwOCwgMHhERiwgMHgwNiwgMHg1QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5MywgMHgwMCwKKzB4NEMsIDB4MjcsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjgsIDB4MTEsCisweEMwLCAweDM2LCAweDAzLCAweERCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDFELCAweEMwLCAweDI0LCAweDAwLCAweDEzLAorMHgyMCwgMHg0RCwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4OTgsIDB4MjksIDB4MDAsIDB4NkQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MEIsCisweDAwLCAweEZELCAweDEyLCAweDg0LCAweDAyLCAweEQwLCAweDBGLCAweDQ4LCAweDM4LCAweDAwLCAweDIxLCAweDAwLCAweDA0LAorMHgzMywgMHgxNCwgMHgwQSwgMHg0MCwgMHgzQiwgMHg0MCwgMHgyMiwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwgMHgwQSwgMHg0MCwKKzB4M0MsIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NTIsIDB4M0QsIDB4MDAsIDB4QzUsIDB4MDAsCisweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDRGLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHhGOSwgMHgwMCwgMHg4RCwgMHgwMSwgMHg5NCwgMHgwRiwgMHhEMCwgMHgxQSwgMHg0MCwgMHg1QiwgMHgwOCwKKzB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4M0UsIDB4NDAsIDB4NzgsIDB4NDAsIDB4QzEsIDB4MTEsIDB4QTUsIDB4MDcsCisweDE4LCAweDFFLCAweDQwLCAweDczLCAweDAwLCAweDIxLCAweDAxLCAweEI0LCAweDA3LCAweDUwLCAweDE3LCAweDQ2LCAweDc5LAorMHgwMSwgMHhFOSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxQywgMHg3MCwgMHg1OCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg4NiwKKzB4NDcsIDB4MTAsIDB4MUUsIDB4NDEsIDB4MTMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDIwLCAweEIzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweEI3LCAweDAwLCAweENELAorMHgwMCwgMHgwNCwgMHgxNywgMHhEOCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxMCwKKzB4MkMsIDB4NDAsIDB4QjMsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MzQsIDB4MDMsIDB4RDgsIDB4MkMsIDB4NDAsIDB4MzEsIDB4MDAsCisweEMxLCAweDQ4LCAweDc0LCAweDAyLCAweEQwLCAweDJDLCAweDY0LCAweDcxLCAweDgwLCAweEM1LCAweDBCLCAweDA0LCAweDlCLAorMHgxMiwgMHgzQywgMHg2MCwgMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwKKzB4MUYsIDB4MDAsIDB4NkYsIDB4MDAsIDB4REQsIDB4MEQsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDAsCisweERDLCAweDQ5LCAweEYwLCAweDA3LCAweEQwLCAweDE0LCAweDAwLCAweDczLCAweDAxLCAweDZDLCAweDAxLCAweDMwLCAweEQ3LAorMHhDMCwgMHg5QiwgMHg0MCwgMHg3MywgMHgxMSwgMHg3QywgMHgwMSwgMHhGMCwgMHhCNywgMHg1NCwgMHgxNywgMHgwMCwgMHg3QiwKKzB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4NDcsIDB4QzAsIDB4NUMsIDB4MDksIDB4NzMsIDB4ODAsIDB4OEMsIDB4MDUsIDB4MzUsCisweDA2LCAweEMwLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHg5OCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgwRiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MEYsIDB4MDIsIDB4NUMsIDB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDgyLCAweDdDLCAweDgwLCAweEYwLCAweDgxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDA0LAorMHg3QywgMHgwMCwgMHhCOCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgwRiwgMHgxMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwKKzB4QzUsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjEsIDB4MDQsCisweDkzLCAweDAwLCAweDBELCAweDBFLCAweDMwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDFDLCAweDAyLAorMHhCNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywKKzB4MDIsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsCisweDAyLCAweDMwLCAweDA5LCAweEM4LCAweDIzLCAweDIwLCAweDlCLCAweDAxLCAweDRELCAweDIyLCAweDcwLCAweDE5LCAweEMyLAorMHg0MSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMiwgMHg5NSwKKzB4MDIsIDB4NDQsIDB4MEUsIDB4MTQsIDB4MDksIDB4NDIsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDA5LCAweDQ4LCAweDI3LCAweDA4LCAweDkxLCAweDEyLCAweDQ0LCAweDQyLCAweEQwLCAweDA5LCAweDQ0LCAweDY3LCAweDEwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHg0NiwgMHhEMCwgMHgzOSwgMHhFMCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg1QywgMHgwMiwKKzB4NTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NEMsIDB4MDIsIDB4MTAsIDB4QTksIDB4NDAsIDB4MDQsCisweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDkxLCAweDAyLAorMHg0NCwgMHgwMiwgMHg5MCwgMHg4OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MjAsIDB4RDUsCisweDAwLCAweDc0LCAweDEyLCAweEQ4LCAweDBELCAweDQ1LCAweDIzLCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDEwLAorMHgwOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5OSwgMHg4OCwgMHg0NCwgMHg0MiwgMHg1MCwgMHgwOSwgMHg0MiwgMHg3MSwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MjAsIDB4MDEsIDB4ODUsIDB4MDQsIDB4MDQsCisweDFCLCAweDkwLCAweDI4LCAweDQwLCAweDIzLCAweDQxLCAweDgxLCAweDBDLCAweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLAorMHgyMywgMHgwMSwgMHg4RCwgMHgwNCwgMHgwNiwgMHgxMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMSwgMHhDMSwgMHgwMCwKKzB4MzYsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDMsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsCisweDQ0LCAweDIzLCAweDAyLCAweEM5LCAweDAwLCAweDQ0LCAweDIyLCAweDEwLCAweDBELCAweDYwLCAweDUwLCAweEE4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxMywgMHgwMCwgMHg0QywgMHgwOCwKKzB4QjAsIDB4MjUsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MDIsIDB4NUMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4ODMsCisweDQyLCAweDFGLCAweDBBLCAweDQ0LCAweDI4LCAweEQwLCAweDIxLCAweDAwLCAweDE3LCAweDAwLCAweDFGLCAweDQwLCAweDdDLAorMHg1MCwgMHhGMCwgMHgwMSwgMHg0MCwgMHg4NywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgyOCwgMHgzMCwgMHhFMSwgMHhDMSwKKzB4ODcsIDB4NDUsIDB4MUIsIDB4MTQsIDB4MEMsIDB4MDgsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NzUsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDJGLCAweDEyLCAweEJGLCAweDA4LCAweEZDLCAweDBBLCAweDcwLAorMHgwQiwgMHhDMiwgMHgyRiwgMHgwMiwgMHg5RiwgMHgwQywgMHhGQywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMiwKKzB4QjMsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjIsIDB4NEYsIDB4QzAsIDB4MkYsIDB4MjIsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDBBLCAweEMwLCAweDI1LCAweDAzLCAweEI2LCAweDAwLCAweEQ4LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLAorMHg0MSwgMHhCNywgMHgwMCwgMHhEQywgMHgxMiwgMHhGNCwgMHgwRiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDUsIDB4QkYsIDB4MDQsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsCisweEMwLCAweDMzLCAweDAyLCAweDkzLCAweDA0LCAweDdDLCAweEQyLCAweEIwLCAweEM5LCAweEMwLCAweDJDLCAweDAwLCAweEIzLAorMHgwMCwgMHhDQywgMHgyMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyOCwgMHgwNSwgMHhCQiwgMHgwMCwgMHhEQywgMHgwMiwgMHhCMCwKKzB4MEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4QjMsIDB4MjAsIDB4NUMsIDB4OEEsIDB4RjIsIDB4NDksIDB4QzIsIDB4MkQsIDB4NDAsCisweEJFLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBBLCAweEQwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgxNSwgMHgwMSwgMHgxRCwgMHgwOCwgMHg0NSwgMHhDOCwgMHhEMCwgMHgwMSwgMHg0OSwKKzB4MDcsIDB4MDIsIDB4MTEsIDB4MTQsIDB4MzAsIDB4MTAsIDB4MDAsIDB4QzEsIDB4NDIsIDB4ODQsIDB4MDQsIDB4MDEsIDB4MTAsCisweDQ0LCAweDIwLCAweDExLCAweDQxLCAweDgzLCAweDA1LCAweDIwLCAweDU3LCAweDQwLCAweDVDLCAweDA4LCAweDAxLCAweDAxLAorMHg0MCwgMHgwMywgMHgwMiwgMHgxMSwgMHgwMCwgMHg2NCwgMHgxNCwgMHhEMCwgMHhEMSwgMHg0MSwgMHg4MSwgMHg0NCwgMHg1NSwKKzB4MDAsIDB4MDQsIDB4MDEsIDB4NTAsIDB4MDEsIDB4NDAsIDB4NzAsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDIwLCAweDMxLCAweDA1LCAweDhELCAweDAwLCAweDM0LCAweEIyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4MSwgMHgyQywgMHgzNCwgMHg1MiwgMHg5OCwgMHg0OCwgMHg0OCwgMHgyMCwgMHgwMywgMHg4MSwgMHhDOCwgMHgwNCwKKzB4MDIsIDB4MTAsIDB4NDksIDB4MDQsIDB4MjAsIDB4MTAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MjIsIDB4RDEsIDB4MDgsIDB4NDAsCisweDIzLCAweDIwLCAweDgxLCAweDAwLCAweDE2LCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDRCLCAweDhELCAweEMwLAorMHg0NSwgMHgwMiwgMHgxMiwgMHgwOSwgMHg0MCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MDAsIDB4MjUsIDB4MDEsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MEEsIDB4RDIsIDB4MDksIDB4NDAsIDB4QTMsIDB4NDAsCisweDkxLCAweDQwLCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDkxLCAweDAzLCAweDA0LCAweDAyLAorMHgxMCwgMHg0OSwgMHg1MCwgMHgyNiwgMHgxMiwgMHg5NSwgMHgwMCwgMHg1NCwgMHgwMywgMHg1MCwgMHhBOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4NDAsIDB4OTUsIDB4MDgsIDB4NDQsCisweDEyLCAweDUwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5MywKKzB4NjAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MTksIDB4RDAsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MzAsCisweDA4LCAweEMyLCAweDI0LCAweDA4LCAweDkzLCAweDAyLCAweDVDLCAweDgyLCAweEYwLCAweDE5LCAweEM4LCAweDI3LCAweDQwLAorMHg5MSwgMHgxOCwgMHg1QywgMHgwNiwgMHhGMCwgMHgyOSwgMHhDMSwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4MjAsIDB4MjgsIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsCisweDY1LCAweDAwLCAweDhGLCAweDAwLCAweDRDLCAweDRFLCAweEYwLCAweDA5LCAweEMxLCAweEU3LCAweDMwLCAweDlGLCAweDQwLAorMHg3QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MTksIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsCisweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweEU3LCAweDQwLCAweDhCLCAweDEwLCAweDdDLCAweDgyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwKKzB4ODAsIDB4MUYsIDB4MDYsIDB4NEUsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDQsIDB4ODAsIDB4MTMsIDB4MDAsIDB4N0UsCisweDgwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDA2LCAweDFGLCAweDEyLCAweDVDLCAweDIwLCAweEY4LCAweDIxLCAweEMwLAorMHgwNywgMHg5NCwgMHgxMywgMHgwMiwgMHgzQywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwQSwKKzB4N0MsIDB4MDAsIDB4RTEsIDB4MjAsIDB4QzAsIDB4ODAsIDB4MDQsIDB4MTcsIDB4MjAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4ODEsCisweEMyLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDFDLCAweDAwLAorMHg3RCwgMHgwMCwgMHhDNCwgMHgwMSwgMHg3MCwgMHg1NywgMHg0MCwgMHgxNSwgMHg4MCwgMHg1QiwgMHg0MCwgMHg2NCwgMHgwMSwKKzB4QjIsIDB4MDUsIDB4QzIsIDB4MUYsIDB4MjAsIDB4N0QsIDB4MTEsIDB4QzQsIDB4MjUsIDB4NzgsIDB4MDUsIDB4RTAsIDB4REIsCisweDAwLCAweDdCLCAweDA0LCAweEZDLCAweDJELCAweDcwLCAweDM3LCAweDQ0LCAweDE3LCAweDIwLCAweDUzLCAweDQwLCAweDU4LAorMHgwMSwgMHg3MCwgMHgwNSwgMHhEMCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMCwgMHhDNCwgMHgwNSwgMHgxNCwgMHgxNywgMHg0MCwKKzB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsCisweDIwLCAweDA2LCAweDAzLCAweDUwLCAweDNDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLAorMHgwQywgMHg2MCwgMHhGMywgMHgwOCwgMHhERCwgMHgwMiwgMHgxNCwgMHgwRiwgMHhEMSwgMHgwQywgMHg0MCwgMHgxMywgMHgwMiwKKzB4QzEsIDB4MDMsIDB4MzQsIDB4MEYsIDB4NDEsIDB4NEMsIDB4NjAsIDB4MzcsIDB4ODAsIDB4ODEsIDB4MDEsIDB4MzQsIDB4MDMsCisweDkwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweEM1LCAweDAzLCAweDQ0LCAweDFGLCAweDUwLCAweDRDLCAweDQwLCAweDUwLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgyOCwgMHgwMCwgMHhBRCwgMHgwMCwKKzB4ODYsIDB4NDEsIDB4NTgsIDB4MUUsIDB4NjAsIDB4M0QsIDB4MTAsIDB4RTksIDB4NDAsIDB4QjQsIDB4MzMsIDB4MTAsIDB4NEUsCisweDQwLCAweDM5LCAweDA4LCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweDUwLCAweDRFLCAweDQwLCAweDE5LCAweDA4LCAweEU5LAorMHgwMCwgMHg5NCwgMHgwOSwgMHg1MCwgMHgyNiwgMHg0MCwgMHgzQiwgMHgwMywgMHhBMSwgMHg0MCwgMHhCNiwgMHgxMywgMHg1MCwKKzB4OEUsIDB4NDAsIDB4MDgsIDB4MDQsIDB4QzEsIDB4MDIsIDB4ODQsIDB4NDAsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MDUsIDB4MjAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDY4LCAweDAwLCAweENELCAweDAxLCAweDg1LAorMHgwNywgMHg3MCwgMHgxNywgMHhDMCwgMHg3OCwgMHgwMSwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHg1RSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OUMsIDB4ODUsIDB4RDAsIDB4MUUsIDB4NjAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDEsCisweEI0LCAweDA2LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDQwLCAweEEzLCAweDAxLCAweEJDLCAweDFGLCAweEYxLCAweDVGLAorMHhDMCwgMHg3QSwgMHgwMCwgMHhFNywgMHgwMSwgMHg4RCwgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg0NCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MkQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsCisweDcwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDQzLCAweEYxLCAweDJELCAweEMxLCAweDM3LAorMHgzMCwgMHhEQywgMHgwMCwgMHg3QywgMHg4MSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDQsIDB4OUIsIDB4MDAsIDB4NTgsIDB4ODMsIDB4RkEsIDB4MEQsIDB4Q0MsCisweDA2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLCAweEIwLCAweDBELCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2RiwgMHgwMCwgMHhGMywgMHg0MSwgMHhDQywgMHgxMywgMHhGMCwKKzB4MUYsIDB4QzAsIDB4RkYsIDB4MDQsIDB4RkIsIDB4OTEsIDB4RUMsIDB4MDcsIDB4ODAsIDB4OUYsIDB4QzEsIDB4NUMsIDB4MDgsCisweDdCLCAweDg5LCAweENDLCAweDA2LCAweDMwLCAweDFGLCAweEMxLCAweDVGLCAweDAwLCAweEIzLCAweDAxLCAweEY4LCAweEE3LAorMHhCMCwgMHgxRiwgMHhEMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgyMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RCwKKzB4MDIsIDB4NzcsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweEFELCAweDQwLCAweEExLCAweDMwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLAorMHg0NSwgMHgzRiwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHg2MywgMHgxMCwgMHgwRSwgMHg0OCwgMHgwQywgMHgwMiwgMHgzMSwKKzB4MEMsIDB4QzUsIDB4MjIsIDB4MTAsIDB4MEUsIDB4NDMsIDB4OUIsIDB4MDIsIDB4QTEsIDB4MDIsIDB4QjQsIDB4MDEsIDB4NTAsCisweEEyLCAweDQwLCAweDM4LCAweDgwLCAweEVELCAweDEwLCAweEI0LCAweDAzLCAweDcwLCAweDRFLCAweDUwLCAweDE4LCAweDQ3LAorMHhGQiwgMHgwMCwgMHhDNCwgMHgwOCwgMHgxNCwgMHgwQSwgMHg0OCwgMHg1NywgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjgsIDB4MDAsIDB4NjEsIDB4MDgsIDB4ODQsIDB4NjMsIDB4RDAsIDB4ODYsIDB4NDAsCisweDNCLCAweDAwLCAweEUxLCAweDAwLCAweDI0LCAweDAzLCAweDE0LCAweDBDLCAweDUwLCAweDE4LCAweDQ0LCAweDYxLCAweDAwLAorMHhBNCwgMHgwMCwgMHgxNCwgMHgwRSwgMHg0MCwgMHgzMywgMHg0NCwgMHgyMSwgMHgxMCwgMHhCNCwgMHgwMywgMHgxMSwgMHgwRSwKKzB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDQsIDB4MzksIDB4ODAsIDB4RjUsCisweDAwLCAweDg0LCAweDQzLCAweDkwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHgyMCwgMHgyMywgMHgxNCwgMHgwMSwgMHgyMCwgMHgwNCwgMHgwRSwgMHhEMCwgMHgxOCwgMHg0MCwgMHhCMywKKzB4MDQsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MkMsIDB4NDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NjQsCisweDAwLCAweDExLCAweDJDLCAweDQwLCAweEYzLCAweDAwLCAweDAxLCAweDEyLCAweDM0LCAweDAzLCAweDUwLCAweDM4LCAweDQwLAorMHgzMCwgMHgwMCwgMHhDRCwgMHgwMywgMHg3NiwgMHgwNywgMHg1MCwgMHgwRCwgMHg0MCwgMHg1NCwgMHgwMCwgMHg0OSwgMHgwQywKKzB4MDUsIDB4MEUsIDB4MTAsIDB4OUMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDI4LCAweDI1LCAweDAwLCAweDkzLCAweDAxLCAweDQ1LCAweDBBLCAweEY4LCAweDA5LCAweEMwLCAweEJGLCAweDQwLAorMHhGMywgMHgwMCwgMHhFQywgMHgwRiwgMHgzMCwgMHgyRiwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgxMiwgMHg2QywgMHgwMywKKzB4MzAsIDB4MEUsIDB4QzAsIDB4MTcsIDB4MTAsIDB4MTMsIDB4MDMsIDB4N0MsIDB4ODMsIDB4QjAsIDB4MTgsIDB4QzAsIDB4M0MsCisweDIwLCAweDlGLCAweDAwLCAweEY0LCAweDA3LCAweEYwLCAweDVGLCAweEMwLCAweDc1LCAweDAwLCAweDk3LCAweDIyLCAweDA0LAorMHgyRiwgMHhCMCwgMHhCQywgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4ODcsIDB4MDAsIDB4MEYsIDB4ODAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsCisweDgwLCAweDdDLCAweDEzLCAweDcwLCAweDBELCAweEMwLCAweDg3LCAweDAwLCAweDk3LCAweDAyLCAweDVDLCAweDBBLCAweEYwLAorMHgwRCwgMHhFMCwgMHgxNywgMHgwMCwgMHg5RiwgMHgyMCwgMHgzQywgMHgwOCwgMHhGMCwgMHhDMSwgMHhDOCwgMHgzNywgMHgwMCwKKzB4OUYsIDB4MDQsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4QTcsIDB4NDQsIDB4REYsIDB4MDIsIDB4N0MsIDB4ODgsCisweEYyLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LAorMHgyRCwgMHgwMCwgMHg5RiwgMHgwMCwgMHhFQywgMHg0MiwgMHhFMCwgMHgwMywgMHhFMCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjgsIDB4MEUsIDB4RDAsIDB4MkMsIDB4MDIsIDB4M0YsIDB4MTAsIDB4Q0QsIDB4MDcsIDB4MzQsIDB4MEYsCisweEMxLCAweDNDLCAweDA0LCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweEIxLCAweDhGLCAweEMwLCAweDNFLCAweDAwLCAweEJGLAorMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3NCwgMHg0MCwgMHhGNywgMHgwMCwgMHhGQywgMHgxNywgMHgzMCwKKzB4MEYsIDB4MDAsIDB4MTAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4QzYsCisweDA4LCAweDFELCAweDgxLCAweDQ0LCAweDQ0LCAweEQwLCAweDExLCAweDQxLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHhDNCwgMHgwOCwgMHgxOSwgMHgwMiwgMHg0QywgMHgwQSwgMHgxMCwgMHgwRCwgMHg0MCwKKzB4ODQsIDB4MDAsIDB4OTcsIDB4MDMsIDB4NzQsIDB4MDYsIDB4QjgsIDB4MUQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4OEQsIDB4MDEsCisweDU0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDI0LCAweDQyLCAweEQzLCAweDA5LCAweDc0LCAweDA1LCAweDEwLCAweDA1LAorMHg0OCwgMHgxNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NCwgMHgwMCwKKzB4OUQsIDB4MDEsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTQsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweENELCAweDAzLCAweDQ0LCAweDE5LCAweDEwLCAweDBELCAweDUwLCAweDE0LAorMHgwMCwgMHgxOCwgMHgwMSwgMHg3NCwgMHgyMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwNCwgMHg0NCwKKzB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4ODQsIDB4NDAsIDB4REQsIDB4MDIsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsCisweDA0LCAweDA4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDBELAorMHgwMSwgMHgwNSwgMHgwMCwgMHhEMSwgMHgwOCwgMHg0OCwgMHgzMywgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTAsIDB4MEQsIDB4NjAsIDB4MTAsIDB4MTAsCisweDg1LCAweDAwLCAweDM0LCAweDAwLCAweDkxLCAweDAxLCAweDQwLCAweDMwLCAweDAwLCAweDlELCAweDgwLCAweDE2LCAweDAzLAorMHgxMCwgMHgwQywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg1MCwgMHgxOCwgMHg1MCwgMHg0MSwKKzB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MjYsIDB4MDAsIDB4MUYsIDB4MDAsCisweDZDLCAweDAyLCAweEYxLCAweDAxLCAweDQwLCAweDNGLCAweDAwLCAweERGLCAweDAwLCAweERDLCAweDAzLCAweEQwLCAweDBGLAorMHhDMCwgMHgzNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDEsIDB4MTEsIDB4MDUsIDB4QzAsIDB4M0UsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDBELCAweEMwLCAweDA0LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDAwLCAweDMxLCAweDBELCAweEMwLCAweDAwLCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRSwKKzB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDBGLCAweDAwLCAweDNCLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDBGLCAweEM0LCAweDNGLCAweDA4LCAweDM3LCAweDAwLAorMHhCQywgMHgwMCwgMHhGMiwgMHgwMiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MEYsIDB4MDAsIDB4RjcsIDB4NDAsIDB4RkMsIDB4MDAsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MTYsIDB4MjEsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDVGLCAweDAwLCAweDczLCAweDAxLCAweENDLCAweDA3LAorMHhGMCwgMHgxRiwgMHhDMCwgMHgzQywgMHgwMSwgMHhCMywgMHgwMSwgMHhBQywgMHgwNSwgMHhGMCwgMHg0RiwgMHhDMCwgMHg0RCwKKzB4MDgsIDB4M0YsIDB4MDMsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NEYsIDB4NDAsIDB4MzMsIDB4MDEsIDB4RkMsCisweDBDLCAweDcxLCAweDkwLCAweEMwLCAweDRDLCAweDAwLCAweEEzLCAweDAxLCAweEVELCAweDA0LCAweEYwLCAweDEyLCAweEMwLAorMHg0RiwgMHgwMCwgMHgzRiwgMHgwMiwgMHhDRSwgMHgyNiwgMHgzNCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwOCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NTMsIDB4MDAsIDB4NTEsIDB4MDEsIDB4RUMsIDB4MDcsIDB4RDAsCisweDFGLCAweDQwLCAweDc0LCAweDAwLCAweDk1LCAweDAxLCAweDUxLCAweDA2LCAweEQwLCAweDlGLCAweDQyLCAweDQ0LCAweDAwLAorMHgxRCwgMHgwMCwgMHg0QywgMHgwNCwgMHhEMCwgMHgzRiwgMHg0MCwgMHg0NywgMHgwMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwMCwKKzB4MTAsIDB4NDUsIDB4NDQsIDB4NDUsIDB4MDAsIDB4MTEsIDB4NDEsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDcsCisweDAwLCAweDk3LCAweDgyLCAweDZDLCAweDEwLCAweDEwLCAweDExLCAweDQ4LCAweDBGLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgyNSwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMywgMHg1MSwgMHgwQywKKzB4NDAsIDB4QjAsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4MDUsCisweDA0LCAweDI0LCAweDAzLCAweEQwLCAweDJDLCAweDQwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDc0LCAweDEwLCAweEQwLAorMHgwOSwgMHg0MCwgMHgzNSwgMHgwMCwgMHg5NSwgMHg4MCwgMHgxNCwgMHg1MCwgMHhEMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwOCwKKzB4NEQsIDB4MDYsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDI3LCAweDAwLCAweEMxLCAweDAwLCAweDY0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHgzNCwgMHgwMCwgMHg1NSwgMHgwNiwgMHg1NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwgMHgwRCwgMHg4MSwKKzB4NDQsIDB4MjMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NzQsIDB4NDYsIDB4MTAsIDB4MEQsCisweDQwLCAweDM1LCAweDQwLCAweDE1LCAweDAyLCAweDUwLCAweDA2LCAweEQwLCAweDExLCAweDYwLCAweDA3LCAweDAwLCAweDk1LAorMHgwOCwgMHg0NSwgMHgwNiwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTgsIDB4NzMsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4RDAsIDB4MzQsCisweDgwLCAweEM3LCAweDAzLCAweDZDLCAweDFCLCAweEYwLCAweDBDLCAweEMwLCAweDY1LCAweDAxLCAweDlGLCAweDAxLCAweDZDLAorMHg0RSwgMHhGMCwgMHgwRCwgMHhDMCwgMHg4MywgMHgwMSwgMHgxMywgMHgwMCwgMHgzQywgMHgwNCwgMHg3MCwgMHgzRCwgMHhDMCwKKzB4RjUsIDB4MDgsIDB4ODcsIDB4MDMsIDB4NTQsIDB4NDQsIDB4RjAsIDB4MzEsIDB4QzEsIDB4MDcsIDB4MTEsIDB4MUYsIDB4MDUsCisweDQ0LCAweDA2LCAweDMwLCAweDMxLCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNywgMHg4MCwgMHhGRCwgMHg0MCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgzQiwgMHgyMCwKKzB4RkYsIDB4MDAsIDB4RTgsIDB4OTYsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MjAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDYsCisweEUwLCAweDBELCAweEM0LCAweDRFLCAweDAyLCAweDNGLCAweDQxLCAweEY0LCAweDAyLCAweEYwLCAweDJGLCAweEMwLCAweEJGLAorMHgwMCwgMHhCQiwgMHgwMiwgMHhDNCwgMHgwMiwgMHhEMCwgMHgwMywgMHg0MSwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMSwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzQsIDB4M0YsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDA4LCAweEE1LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg2RSwgMHgwQiwgMHgzMCwgMHgwRCwgMHhDMCwgMHhBNCwgMHg4MCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwKKzB4OEQsIDB4QzIsIDB4MDcsIDB4MDIsIDB4MUUsIDB4MDAsIDB4N0MsIDB4MTgsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDEsCisweDlGLCAweDA2LCAweDZDLCAweDA4LCAweEYyLCAweDgxLCAweEM4LCAweDE2LCAweDQ0LCAweDgzLCAweDAyLCAweDRELCAweDhBLAorMHgzMCwgMHgyOSwgMHhDNCwgMHgwOCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4M0YsIDB4MDAsIDB4REQsIDB4MDcsCisweDc2LCAweDFFLCAweEYwLCAweEFGLCAweDQwLCAweDQ0LCAweDAwLCAweDlGLCAweDgwLCAweDc0LCAweDRGLCAweEQwLCAweDFGLAorMHhDMCwgMHhDNCwgMHgwMCwgMHgxRiwgMHgwQywgMHg3MCwgMHgwMiwgMHhGMCwgMHgwQywgMHg0MCwgMHhGMCwgMHgwOCwgMHg5RCwKKzB4MDIsIDB4NTAsIDB4MDIsIDB4RDIsIDB4MTEsIDB4NTAsIDB4NTQsIDB4MDQsIDB4OTEsIDB4MDksIDB4NjQsIDB4MDIsIDB4MzQsCisweDM5LCAweEMwLCAweDZDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDIyLAorMHgwMCwgMHhDMSwgMHg0MCwgMHgyNCwgMHgwMywgMHgxMCwgMHg0QywgMHg2MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgwNCwgMHgzNCwKKzB4MUUsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzYsIDB4MTEsIDB4RDAsIDB4NEMsIDB4NjAsCisweDAyLCAweDA0LCAweDA5LCAweDAwLCAweDM0LCAweDBDLCAweERBLCAweDAwLCAweDAwLCAweDgyLCAweDAyLCAweDA4LCAweDAwLAorMHgxNCwgMHgwMCwgMHhEMCwgMHgyMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwOSwgMHg4MywgMHg2NCwgMHgzMiwgMHg5MCwgMHhDOCwKKzB4NDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDgsIDB4N0EsIDB4NDAsCisweEUxLCAweDAxLCAweDM0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweDZELCAweDgxLCAweEY2LCAweDI2LAorMHhEMCwgMHgxQywgMHg0MCwgMHg0OCwgMHgwMCwgMHgyNSwgMHg0OSwgMHhCNiwgMHgyNSwgMHhEMCwgMHg5RSwgMHg0MCwgMHg0OCwKKzB4MDAsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDEsIDB4NTMsIDB4NDAsIDB4NEEsIDB4MDEsIDB4N0QsIDB4ODEsIDB4OTQsCisweDI0LCAweEQ4LCAweDEyLCAweDYwLCAweDRDLCAweDgwLCAweDY5LCAweDIxLCAweEE0LCAweDI0LCAweDEwLCAweDEzLCAweDQwLAorMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhBMiwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MkMsIDB4MjMsIDB4MTAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4NEYsIDB4MDAsIDB4MzQsIDB4MjIsIDB4MTAsCisweDBDLCAweEMxLCAweDYwLCAweDA1LCAweDg5LCAweDA3LCAweDNDLCAweDE1LCAweEYwLCAweDhDLCAweEMwLCAweDAzLCAweDAyLAorMHgwRiwgMHgwMSwgMHgzOCwgMHg0NiwgMHhGMCwgMHg1MCwgMHhFOCwgMHg0MiwgMHgxMCwgMHhDRCwgMHgxNCwgMHgxNCwgMHgyMywKKzB4RjAsIDB4ODAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4Q0IsIDB4MTAsIDB4NEMsIDB4MjMsIDB4QjIsIDB4MkQsIDB4RTAsIDB4NEEsCisweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDJELCAweDAwLCAweEZGLCAweDgwLAorMHhGQywgMHgwNywgMHg3MCwgMHgxRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwOCwgMHhGQywgMHgyMiwgMHg3MCwgMHgwRCwKKzB4RDAsIDB4MjcsIDB4MDIsIDB4QkUsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4MEYsIDB4MDIsIDB4MzUsCisweDQwLCAweEZDLCAweDAzLCAweDcwLCAweDBGLCAweEU4LCAweDNELCAweDAwLCAweDdGLCAweDAwLCAweERDLCAweDIzLCAweEYwLAorMHgwMywgMHhDOCwgMHgwOSwgMHgwMiwgMHhGNywgMHgwMCwgMHhEQywgMHgyMywgMHhEMCwgMHg4MywgMHhEMCwgMHgwQiwgMHg2MCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4NjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsCisweDIzLCAweEYwLCAweDFELCAweEQwLCAweDM0LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweERDLCAweEMwLAorMHg2NSwgMHgyMCwgMHg5QiwgMHgyMCwgMHg2QywgMHgwNCwgMHhCMCwgMHg5RCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHg4MCwKKzB4N0MsIDB4MDcsIDB4QkMsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4NUYsIDB4MDEsIDB4NkUsIDB4MDcsIDB4MzksIDB4MDEsCisweEMwLCAweDA3LCAweDgwLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweDMzLCAweDA5LCAweEMwLCAweDQwLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhBQiwgMHgwMCwgMHhCNCwgMHgxMywKKzB4RDAsIDB4MkMsIDB4NDAsIDB4MzgsIDB4MTEsIDB4NjEsIDB4MDAsIDB4OEMsIDB4MDIsIDB4MTgsIDB4NEUsIDB4NDEsIDB4MjgsCisweDMwLCAweDMxLCAweDAwLCAweDg0LCAweDAzLCAweDExLCAweENDLCAweDQwLCAweDA4LCAweDg4LCAweDJELCAweDAwLCAweEI0LAorMHgwMywgMHgxMCwgMHgwQSwgMHg0MiwgMHgzQiwgMHg4MCwgMHg2RCwgMHgwMCwgMHg5NCwgMHgwMywgMHgxNCwgMHgwMiwgMHg0MCwKKzB4MEIsIDB4MDAsIDB4N0QsIDB4QzAsIDB4QzQsIDB4MDEsIDB4QjAsIDB4MEEsIDB4NDAsIDB4NEQsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAwLCAweEExLCAweDAzLCAweDk0LCAweDA3LCAweDUyLAorMHg1RSwgMHg2MCwgMHg3MCwgMHgwMywgMHg2NSwgMHg0MywgMHhCNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg2RCwgMHgwMCwKKzB4QTUsIDB4MDEsIDB4ODQsIDB4MDQsIDB4MTAsIDB4MUUsIDB4NDAsIDB4QzksIDB4MDAsIDB4MjUsIDB4MDEsIDB4QjQsIDB4MDcsCisweDEwLCAweDE2LCAweDQ0LCAweDRCLCAweDEwLCAweEZELCAweDAxLCAweDk0LCAweDg3LCAweDEwLCAweDE2LCAweDQ0LCAweDVCLAorMHgyMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNSwgMHgxMCwgMHgxQywgMHg2NCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MjMsIDB4MDQsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDMwLCAweDAwLCAweDQxLCAweDQ1LCAweDMwLCAweDJFLCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweEM1LAorMHgyMCwgMHgwNCwgMHgxRiwgMHgxMCwgMHgwQywgMHg1MCwgMHhGMSwgMHgwMSwgMHhDRCwgMHg0OCwgMHgzNCwgMHgwRiwgMHgxMiwKKzB4M0MsIDB4NDEsIDB4RjMsIDB4MDAsIDB4Q0QsIDB4MjIsIDB4MTQsIDB4MTMsIDB4MTAsIDB4MUMsIDB4NDAsIDB4RjMsIDB4MEMsCisweENELCAweDA3LCAweDI0LCAweDRGLCAweDEwLCAweDRDLCAweDQ4LCAweDU5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHg5RiwgMHgwMCwgMHg3MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTQsIDB4MDAsIDB4NzcsIDB4MDAsIDB4QjQsIDB4MDEsIDB4QjUsIDB4MDUsIDB4QzAsIDB4REQsIDB4MDEsIDB4NzcsIDB4MDgsCisweEVDLCAweDBELCAweEIwLCAweDA1LCAweEUwLCAweERELCAweDAwLCAweDdGLCAweDBCLCAweEZDLCAweDE1LCAweEIxLCAweDM3LAorMHhDMSwgMHhEQiwgMHgxNiwgMHg3RiwgMHgwMiwgMHhERCwgMHgwOSwgMHgzMCwgMHgyNywgMHhDMSwgMHg1RiwgMHgxNCwgMHg3RiwKKzB4MDQsIDB4RTQsIDB4MUQsIDB4MTAsIDB4MTcsIDB4NDUsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweDI0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHg4MCwgMHg0QywgMHgxMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxMiwgMHgwMCwgMHg3RCwKKzB4MjAsIDB4RjAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDgsIDB4RjIsIDB4MDEsIDB4QzAsCisweDg3LCAweDAwLCAweDFGLCAweDBBLCAweDY0LCAweDIwLCAweEYwLCAweDAxLCAweEMxLCAweDg3LCAweDAwLCAweDFGLCAweDQwLAorMHg1RCwgMHgwMCwgMHhGNCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsCisweDkzLCAweDgwLCAweDdDLCAweDBBLCAweDMwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDAyLAorMHhGMCwgMHgxOSwgMHhDOCwgMHgyNiwgMHgwMCwgMHg5MywgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OTMsIDB4MTAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NkMsCisweDBBLCAweDMwLCAweDU4LCAweEM0LCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyNiwgMHgwMCwgMHg4RCwgMHgwMCwgMHhDNCwgMHgwMiwgMHhEOCwgMHgxQiwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwKKzB4MDEsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4ODcsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsCisweDI5LCAweDQ0LCAweEUzLCAweDFDLCAweDkxLCAweDAxLCAweDc0LCAweDEyLCAweEQwLCAweDA5LCAweDRBLCAweDY3LCAweDAwLAorMHg5NSwgMHgyMiwgMHg3NCwgMHg4MiwgMHhEMCwgMHgxOCwgMHg0MCwgMHgyNCwgMHgwOCwgMHg5QywgMHgwMywgMHgwNCwgMHg0MiwKKzB4MTQsIDB4MTksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsCisweDI0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDA0LAorMHg1NCwgMHgwMiwgMHgxMCwgMHg2OSwgMHg0NCwgMHgyNywgMHg4MCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwgMHg4OSwKKzB4NDEsIDB4MjcsIDB4NDEsIDB4RDEsIDB4MEEsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDIsIDB4OTEsCisweDgyLCAweDc0LCAweDAyLCAweDUyLCAweDg5LCAweDAwLCAweDI0LCAweDAwLCAweDhELCAweDAwLCAweDQyLCAweDAzLCAweDEwLAorMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHhBMCwKKzB4MDAsIDB4OUQsIDB4MDIsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDAsIDB4ODUsIDB4MjAsIDB4NzQsCisweDAzLCAweDUwLCAweDA4LCAweDQ4LCAweDIzLCAweDAwLCAweDk1LCAweDA4LCAweDA0LCAweDgzLCAweEQyLCAweDA4LCAweDQwLAorMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgyMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4NSwgMHg4MCwKKzB4MzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MzAsIDB4OTAsIDB4Q0QsIDB4NjgsIDB4NDUsIDB4QTIsIDB4MTAsIDB4NDgsCisweDUwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDAyLCAweDAwLAorMHgxRiwgMHgwMCwgMHg0RCwgMHgwNCwgMHhEMCwgMHgxMSwgMHhDMCwgMHgwNywgMHgwNSwgMHgxMywgMHg4MCwgMHg1QywgMHg4MCwKKzB4MzAsIDB4NDEsIDB4QzEsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzEsIDB4MDcsCisweDAwLCAweDEzLCAweDgwLCAweDM4LCAweDA4LCAweEYwLCAweDIxLCAweEMwLCAweDE3LCAweDIwLCAweDEzLCAweDAwLCAweDNFLAorMHgwOCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwOCwgMHgxRiwgMHgxNiwgMHg0QywgMHgwOCwgMHgzMCwgMHgwNSwgMHhDMCwKKzB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTgsIDB4N0YsIDB4MDAsIDB4QkYsCisweDAxLCAweDdDLCAweDBFLCAweEQwLCAweDI5LCAweEMwLCAweDY3LCAweDEwLCAweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCNywgMHgwNCwgMHg5QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgzRiwgMHgyMCwKKzB4RkYsIDB4NDAsIDB4RkMsIDB4MTIsIDB4RDAsIDB4NEIsIDB4QzAsIDB4MkYsIDB4MTAsIDB4QUYsIDB4ODAsIDB4RkUsIDB4MTIsCisweEYwLCAweDBCLCAweEM4LCAweDJGLCAweDAwLCAweEJFLCAweDQ0LCAweERDLCAweDEzLCAweEYwLCAweDhCLCAweEMwLCAweDc3LAorMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MiwKKzB4N0MsIDB4MzYsIDB4RjAsIDB4MUIsIDB4QzEsIDB4MjcsIDB4MDIsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjIsIDB4NEIsCisweEMxLCAweDJGLCAweDAwLCAweERCLCAweDgwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEM4LCAweDJGLCAweDAwLCAweEJGLAorMHgwMCwgMHhDNCwgMHgyMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhCRSwgMHgwMCwgMHg0QywgMHg4MiwgMHgzMCwKKzB4MEIsIDB4QzAsIDB4MkIsIDB4MDgsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDEwLCAweDQ3LCAweDA1LCAweDFELCAweEMxLCAweDM0LAorMHgwQywgMHhEMCwgMHgyMSwgMHg0MCwgMHg0MywgMHgyMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MUQsIDB4NzAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsCisweDQ0LCAweDExLCAweDcyLCAweDAxLCAweDQxLCAweDA0LCAweDMwLCAweDFELCAweDIwLCAweDU0LCAweDUwLCAweDEwLCAweDAxLAorMHg0MCwgMHgxNywgMHgwMCwgMHgxRCwgMHgwMCwgMHgwQywgMHgwMCwgMHgxMCwgMHgwMSwgMHg0NCwgMHg2MSwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MzIsCisweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAzLCAweDhELCAweDAwLCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4OSwgMHgwNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwOCwgMHgwOCwgMHgzMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNSwKKzB4MTIsIDB4RDgsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4OTIsIDB4MTAsIDB4MDgsIDB4NjAsCisweDIzLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDgyLCAweDEwLCAweDA5LCAweDQwLCAweDRBLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDgsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MjAsCisweDhELCAweDE4LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQ0LCAweDY2LCAweDEwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHg1MCwgMHgyOCwgMHg1NCwgMHhCNCwgMHgwMiwgMHg5RCwgMHgxMCwgMHg1NSwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MSwgMHgyNywKKzB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4OTAsIDB4MTksIDB4NjAsIDB4NjMsIDB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweEVGLCAweDAwLCAweEJGLCAweDBELCAweEZDLCAweDgyLCAweEYyLCAweDA5LAorMHhDMCwgMHgyRiwgMHgwMCwgMHg5RiwgMHgxMywgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHhFNywgMHgyNCwgMHg5QiwKKzB4ODEsIDB4NDQsIDB4NDYsIDB4RjIsIDB4MDksIDB4QzgsIDB4NjcsIDB4MjAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweEU0LCAweDAwLCAweDlGLCAweDIwLCAweDU0LCAweDFBLCAweDMwLCAweDI5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgxMiwgMHg0QywgMHgwRSwgMHgzNCwgMHg1OSwgMHhDMCwgMHgxNiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4RTUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDA1LCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLAorMHg3QywgMHg2MiwgMHhFMCwgMHgwOSwgMHgwMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHg3MiwgMHg0OSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MjIsIDB4RDQsIDB4OTksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUQsCisweDEzLCAweDdGLCAweEQyLCAweDcwLCAweDA5LCAweEMxLCAweDU5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHg4NSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhEMCwgMHgwNiwKKzB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4ODAsIDB4MUYsIDB4MDIsIDB4NUMsCisweDg4LCAweDMwLCAweDAxLCAweEM1LCAweDg1LCAweDQwLCAweDEzLCAweDMwLCAweDRDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLAorMHgwNywgMHgwMSwgMHgxMywgMHgyMywgMHg1QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNSwgMHgxNCwgMHgwMywgMHgwMCwKKzB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDU4LCAweDc3LCAweDQwLCAweDE0LCAweDAwLAorMHg2NSwgMHgwMiwgMHhEOCwgMHgwMSwgMHhEMCwgMHgxNywgMHg0MCwgMHgxNywgMHg4MCwgMHg1QywgMHgwMCwgMHhENCwgMHgwMSwKKzB4MTEsIDB4MDcsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NjEsIDB4MDIsIDB4QzQsIDB4ODUsIDB4MzIsIDB4MDUsIDB4QzAsIDB4OUQsCisweDQwLCAweDYxLCAweDEwLCAweDQ4LCAweDAxLCAweEQxLCAweDA3LCAweDQwLCAweDVGLCAweDA0LCAweDcxLCAweDAwLCAweEQ0LAorMHg4MSwgMHg1MCwgMHgwNywgMHg0OCwgMHg0MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4NzgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NDEsCisweDA0LCAweDI0LCAweDAyLCAweEQwLCAweERDLCAweDQwLCAweDMzLCAweDIwLCAweENELCAweDQwLCAweDE0LCAweDAzLCAweDEwLAorMHgwQywgMHgwQSwgMHhCMCwgMHgwQywgMHhDMSwgMHgwOCwgMHgwNSwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MSwgMHgwMCwKKzB4QzEsIDB4ODAsIDB4NTAsIDB4ODMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MDQsIDB4MkIsCisweDFDLCAweDJELCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLAorMHgzOCwgMHgwMSwgMHhFRCwgMHgwNCwgMHhCNCwgMHgyNywgMHg1OCwgMHgxQSwgMHg0MCwgMHg3OCwgMHgwMSwgMHhGNSwgMHgwMCwKKzB4OTQsIDB4MDIsIDB4RDgsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MEMsIDB4OTQsIDB4MEMsIDB4MTAsIDB4MUEsCisweDRBLCAweDdELCAweDAwLCAweEUxLCAweDIwLCAweDg0LCAweDQzLCAweDAwLCAweDRFLCAweDQwLCAweDRELCAweDI0LCAweEYxLAorMHg0MCwgMHhBNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg3RiwgMHgwOCwgMHhFMSwgMHg4MiwgMHg4NCwgMHgwMSwgMHgxMCwKKzB4MDYsIDB4NDQsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4RjgsCisweDAwLCAweEVGLCAweDAzLCAweEJDLCAweDA3LCAweDMwLCAweDFBLCAweEMyLCAweDc4LCAweDAxLCAweDYzLCAweDAxLCAweEFDLAorMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRCwgMHgzMSwgMHg5NiwgMHgwNCwgMHgzMCwgMHgxQSwgMHg0MCwKKzB4NzksIDB4MDAsIDB4NjMsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzEsIDB4NDksIDB4MjAsIDB4RTMsIDB4MDEsCisweDlFLCAweDE3LCAweEYyLCAweDFFLCAweEM4LCAweDc5LCAweDQwLCAweEYzLCAweDAxLCAweDhELCAweDA2LCAweDMwLCAweDFFLAorMHhDMCwgMHg1MywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MzcsIDB4MTAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYxLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweERELCAweDAyLCAweDJDLCAweDAwLCAweEYwLCAweDA4LCAweEUwLCAweDMzLAorMHgwMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhBMiwgMHg0RCwgMHhDMCwgMHgwNSwgMHgyMCwgMHhDRiwgMHgyMCwgMHg1QywKKzB4MUIsIDB4RjIsIDB4MDksIDB4RTAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsCisweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDc5LCAweDAwLCAweEUzLAorMHgwMSwgMHhDQywgMHgxMywgMHhGOCwgMHg4RiwgMHhDMCwgMHg3RCwgMHgwNCwgMHg3RiwgMHgwOSwgMHhDQywgMHgwNiwgMHhGMCwKKzB4OUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RjcsIDB4MDEsIDB4M0MsIDB4MjQsIDB4NzAsIDB4OUIsIDB4QzAsIDB4NDcsIDB4MjIsCisweEJGLCAweDBELCAweENDLCAweDA2LCAweEIwLCAweDlELCAweDQxLCAweDRGLCAweDAyLCAweEJGLCAweDAxLCAweENELCAweDRGLAorMHgzMCwgMHg5RSwgMHhDOCwgMHg3QywgMHgxMiwgMHgzQiwgMHgwOSwgMHhDQywgMHgwNywgMHgzNCwgMHg5NywgMHhEOCwgMHgxOCwKKzB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MTgsCisweDg0LCAweDAzLCAweEQ4LCAweDBFLCAweDQwLCAweDM4LCAweDIwLCAweEVELCAweDBDLCAweEFDLCAweDAyLCAweEQwLCAweDBBLAorMHg0NCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwOCwgMHhCNCwgMHgyNCwgMHgxMCwgMHhDQSwgMHgwOCwgMHg3QiwgMHgwMSwgMHg0RCwKKzB4OTgsIDB4NDQsIDB4NDMsIDB4MTAsIDB4NUUsIDB4NDAsIDB4MDMsIDB4MDMsIDB4QUQsIDB4MDQsIDB4OTQsIDB4MjMsIDB4MTAsCisweDBFLCAweDQyLCAweDI5LCAweDAzLCAweDJELCAweDBDLCAweEZDLCAweDExLCAweDEwLCAweDg2LCAweDQwLCAweDU0LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg3RCwgMHgwMCwgMHhGMSwgMHgwMSwgMHg4NCwKKzB4MjcsIDB4RDAsIDB4QzgsIDB4NDAsIDB4NzksIDB4MDIsIDB4N0QsIDB4MDAsIDB4QTYsIDB4MDIsIDB4NTAsIDB4MEEsIDB4NDgsCisweDNCLCAweDgwLCAweEVELCAweDAwLCAweEY0LCAweDAwLCAweEQwLCAweDAyLCAweDBBLCAweDA5LCAweDA4LCAweDNELCAweDA2LAorMHhBNiwgMHgyMiwgMHgxMCwgMHgwRSwgMHg0NCwgMHgwQiwgMHgxNCwgMHhCRCwgMHgwMCwgMHhDNiwgMHgwMywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4MTksIDB4MTAsIDB4MkQsIDB4NDAsIDB4QzQsIDB4MDIsIDB4MTIsIDB4MDYsIDB4NDIsIDB4NjAsIDB4MDIsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLAorMHhEOCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgyMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MjAsIDB4MzQsIDB4NEMsIDB4OTAsIDB4MDAsIDB4NDAsIDB4QjIsIDB4MDEsIDB4NEQsIDB4MDEsIDB4MjQsCisweDg1LCAweDlBLCAweDJELCAweDQ4LCAweEMzLCAweDAwLCAweDhELCAweDEwLCAweDE0LCAweDlCLCAweDEwLCAweDI4LCAweDQxLAorMHg4MSwgMHgwMCwgMHg4RCwgMHgwOCwgMHgwNSwgMHgwOCwgMHgxMCwgMHhCOCwgMHg0MCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4MzUsIDB4NDEsIDB4RDMsIDB4MDEsIDB4NEQsIDB4MDMsIDB4RDAsCisweDA5LCAweEMwLCAweDM1LCAweDAwLCAweDVGLCAweDAwLCAweDJDLCAweDAzLCAweDcwLCAweDA1LCAweEMwLCAweDc3LCAweDA0LAorMHhGRiwgMHgxMSwgMHg3QywgMHgxQywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNSwgMHgwOCwgMHhERiwgMHgwMiwgMHg2RCwgMHgwOSwKKzB4MzQsIDB4MEYsIDB4QzAsIDB4QzcsIDB4MjAsIDB4Q0QsIDB4ODEsIDB4QzQsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzAsIDB4MjEsCisweDAwLCAweERCLCAweDJCLCAweDQ0LCAweDBCLCAweDMwLCAweEI5LCAweEMwLCAweDc0LCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgyOSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4NDIsIDB4N0MsIDB4NEEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjcsIDB4OTEsIDB4REYsCisweDI0LCAweDdDLCAweDAwLCAweDcwLCAweDA5LCAweEMwLCAweDM3LCAweDBBLCAweERGLCAweDAyLCAweDVDLCAweDQyLCAweDcwLAorMHhDRCwgMHhDMCwgMHgwNywgMHgwNCwgMHg5RiwgMHgwMSwgMHg2QywgMHgwMywgMHhGMCwgMHgyNSwgMHg0MCwgMHgwNywgMHgwMSwKKzB4REYsIDB4MDIsIDB4N0MsIDB4MDksIDB4RjAsIDB4MjksIDB4QzgsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEM4LCAweDAzLCAweDMwLCAweDFCLCAweEMwLAorMHgzRiwgMHgyMCwgMHg3RiwgMHg0MSwgMHhGQywgMHgyNywgMHgzMCwgMHg0NiwgMHhDMCwgMHg3RSwgMHgwMSwgMHhGRiwgMHgyMCwKKzB4Q0MsIDB4MEMsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDgsIDB4RjgsIDB4MDUsIDB4QjQsIDB4MEYsCisweEMwLCAweDBELCAweDA4LCAweEZGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDEwLCAweEU3LAorMHgwMSwgMHhDQywgMHg0NiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4NTAsIDB4MTksIDB4NDAsIDB4MzcsCisweDAwLCAweDFELCAweDAyLCAweDc0LCAweDBELCAweDEwLCAweDE1LCAweDQwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDQ0LAorMHgwQywgMHhEMSwgMHgxOSwgMHhDMCwgMHgwNywgMHgwMSwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwOCwgMHg5MCwgMHgwRCwgMHg0MCwKKzB4QzQsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NkMsIDB4MDMsIDB4RDIsIDB4RjUsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MDEsCisweDQ0LCAweDAyLCAweEQwLCAweDM5LCAweDQ4LCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHg1NCwgMHgwMywgMHg5MCwgMHg4RCwgMHg0MSwgMHgzNywgMHgwMCwKKzB4NUQsIDB4MDgsIDB4NzQsIDB4NDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4QzksIDB4MDAsIDB4NDQsIDB4QzAsCisweEQ4LCAweDExLCAweDAwLCAweDA3LCAweDAyLCAweDlELCAweDAyLCAweDM2LCAweDE4LCAweDEyLCAweDBELCAweDQwLCAweDQ2LAorMHgwMCwgMHg5RCwgMHgwMywgMHg2MCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHhFNywgMHgwMCwgMHgxMSwgMHgwNCwgMHg0NCwKKzB4OUIsIDB4RDAsIDB4MTEsIDB4NEQsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDI4LCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDA0LCAweDQwLCAweDMyLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMiwgMHg1NiwgMHgwQywgMHg0MiwgMHgyMCwgMHg4MCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgxMCwgMHhEMCwKKzB4MTgsIDB4NDAsIDB4MzEsIDB4MDksIDB4NEQsIDB4MjAsIDB4MzQsIDB4MjIsIDB4MTEsIDB4NkMsIDB4NTAsIDB4MDIsIDB4MDIsCisweDhELCAweDAwLCAweDI0LCAweDAzLCAweEQyLCAweDBDLCAweDQyLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHhEMCwgMHgwOCwgMHg0QSwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwKKzB4M0UsIDB4MDgsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4NUYsIDB4MDAsCisweDc0LCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDM2LCAweDEwLCAweEZCLCAweDAwLCAweDRDLCAweDUwLCAweDcxLCAweDAxLAorMHg2NCwgMHgwNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgwMCwgMHhCMCwgMHg2RiwgMHhDMCwgMHgwNywgMHhBMCwgMHg5RiwKKzB4ODAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NDAsIDB4NDcsIDB4ODAsIDB4NEUsIDB4MDEsIDB4RjIsCisweDAxLCAweEMwLCAweDA3LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEEwLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywKKzB4MDEsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MkYsIDB4MDQsIDB4RkMsIDB4MTAsIDB4RkMsIDB4NDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDhGLCAweDA4LCAweDJGLCAweDAwLCAweEZDLCAweDEwLCAweEQyLCAweDhGLCAweEMwLCAweDBELCAweDAxLCAweDJFLCAweDAwLAorMHhCQywgMHgwMywgMHhFMCwgMHgwRiwgMHhDMiwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwQiwKKzB4QzIsIDB4MTcsIDB4NjQsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4M0YsIDB4MDAsCisweEEzLCAweDQwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDExLCAweEIzLCAweDIwLCAweEZDLCAweDI2LAorMHhCMCwgMHg5RiwgMHhEMiwgMHgyQywgMHgwMCwgMHhGRiwgMHgyMSwgMHhFQywgMHgxMCwgMHhCMiwgMHg4RiwgMHhDOCwgMHgzQywKKzB4MTIsIDB4RkYsIDB4MDQsIDB4RUMsIDB4MjAsIDB4NzIsIDB4MEYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RjMsIDB4MDMsIDB4RUQsCisweDFCLCAweEIwLCAweDlCLCAweEMwLCAweDdDLCAweDBBLCAweERGLCAweDAxLCAweEZDLCAweDFBLCAweDM0LCAweDQ5LCAweEMwLAorMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCMSwKKzB4MDEsIDB4NDQsIDB4ODIsIDB4NzAsIDB4MDEsIDB4MDIsIDB4M0YsIDB4MjIsIDB4OTEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsCisweDRDLCAweDQ4LCAweEI0LCAweDAxLCAweEQxLCAweDAxLCAweDU0LCAweDI0LCAweEQwLCAweDZGLCAweDYwLCAweEJDLCAweDAxLAorMHhGRCwgMHgwOSwgMHg0NCwgMHgxOCwgMHgxMCwgMHg5RiwgMHg0MCwgMHgzMywgMHgwMSwgMHhEMSwgMHgwMCwgMHg4NCwgMHgxQiwKKzB4MTQsIDB4NDgsIDB4NTAsIDB4MzQsIDB4MjEsIDB4REQsIDB4MDQsIDB4NzQsIDB4MTIsIDB4MTEsIDB4MTksIDB4NDAsIDB4MEQsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMxLCAweDAwLCAweDgxLCAweDAwLAorMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgyMCwgMHhDNSwgMHgyMCwgMHgxNCwgMHgwNywgMHg1MCwgMHgwQywKKzB4NDAsIDB4ODEsIDB4MDQsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4NkMsIDB4NDgsIDB4QjAsIDB4MDEsIDB4Q0QsCisweDAwLCAweDI0LCAweDFDLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDA0LCAweDA0LCAweDBCLCAweDUwLAorMHgwRCwgMHg0MCwgMHgzMCwgMHgwMSwgMHhDRCwgMHgxNCwgMHgzNCwgMHgxOCwgMHgxMCwgMHg4MSwgMHg0MCwgMHg1QywgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzcsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NDQsCisweDBFLCAweDUyLCAweDExLCAweDQ1LCAweDM3LCAweDEwLCAweEQ1LCAweDQzLCAweDc0LCAweDA3LCAweDUwLCAweDBELCAweDQ0LAorMHg1NSwgMHgwMCwgMHhENSwgMHgwNCwgMHg1NiwgMHg4OCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwKKzB4MjQsIDB4MDIsIDB4MTMsIDB4MEQsIDB4NDAsIDB4MzcsIDB4ODAsIDB4QzEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEQsCisweDQwLCAweDM0LCAweDAwLCAweERELCAweDgwLCAweDc0LCAweDA2LCAweDEwLCAweDExLCAweDQwLCAweDFELCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMSwgMHg0RCwgMHgwNCwKKzB4RjAsIDB4MTEsIDB4QzQsIDB4MzcsIDB4QzAsIDB4RDcsIDB4MDMsIDB4N0MsIDB4MDcsIDB4RjAsIDB4OEQsIDB4QzAsIDB4QzUsCisweDAwLCAweERGLCAweDAxLCAweDRDLCAweDBDLCAweEIyLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDZDLAorMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHg3NywgMHgwQSwgMHhEMywgMHg4MCwgMHg2QywgMHgwMywgMHhGMCwgMHgwOCwgMHhDNCwKKzB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEUsIDB4MzAsIDB4MzksIDB4QzAsIDB4ODIsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDNELCAweDEwLCAweEVGLCAweDAwLCAweEZDLCAweDgwLCAweDcwLAorMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHg4MCwgMHhGOCwgMHgwMywgMHhCNCwgMHgwRiwgMHhDMCwgMHgxQSwgMHgwMCwKKzB4RkIsIDB4MDAsIDB4NUMsIDB4MjIsIDB4RjAsIDB4MEYsIDB4QzIsIDB4MzcsIDB4MzAsIDB4RUYsIDB4MDAsIDB4NUMsIDB4MEQsCisweEYzLCAweDBGLCAweEMwLCAweDdGLCAweDQwLCAweEZGLCAweDgwLCAweERDLCAweDAzLCAweEIwLCAweDBCLCAweEMwLCAweDNGLAorMHgyMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MEEsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MEEsIDB4RjIsIDB4NjksCisweEMwLCAweDMzLCAweDIwLCAweERGLCAweDAyLCAweDVELCAweDgzLCAweEYwLCAweENELCAweEMwLCAweDg0LCAweDAwLCAweEQzLAorMHgwMSwgMHg3QywgMHgwOSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNCwgMHg0MCwgMHhEMywgMHg4NCwgMHg3QywgMHg4MSwgMHgzMCwKKzB4OEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsCisweERCLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDA5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhGOCwgMHgwMiwgMHg1MSwgMHgyMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0NSwKKzB4M0YsIDB4MDAsIDB4REQsIDB4MDEsIDB4N0MsIDB4ODMsIDB4MTAsIDB4M0QsIDB4NDAsIDB4MTQsIDB4MDgsIDB4QzAsIDB4MjAsCisweDc0LCAweDAzLCAweDEyLCAweEJGLCAweDQwLCAweEZDLCAweDAyLCAweEYxLCAweDAwLCAweDc0LCAweDgzLCAweDEwLCAweDFGLAorMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNCwgMHg4MCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDIwLCAweDMwLCAweDAwLCAweDgxLCAweDEyLCAweDA0LCAweDRDLCAweEQ5LCAweDM4LCAweDQwLCAweDMzLAorMHgwMCwgMHhDRCwgMHgwOSwgMHg1NCwgMHgwMywgMHgxMCwgMHgyRCwgMHg0MCwgMHgyMCwgMHgwOCwgMHhDMSwgMHgwMCwgMHgzNCwKKzB4MDcsIDB4MTEsIDB4QUMsIDB4NDgsIDB4QjEsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MzQsIDB4ODIsIDB4MTAsIDB4MUMsIDB4NDEsCisweDM2LCAweDAwLCAweEM5LCAweDIwLCAweDc0LCAweDAzLCAweDUwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg2MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4QTEsIDB4ODksIDB4ODQsIDB4MDcsIDB4RDgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDIsCisweEZELCAweDA5LCAweEI0LCAweDA3LCAweDEyLCAweDFFLCAweDQwLCAweDY4LCAweDAwLCAweEUxLCAweDgxLCAweEI0LCAweDA3LAorMHgxMCwgMHgxRSwgMHg0MCwgMHg3OSwgMHgwNSwgMHhFMSwgMHgxMSwgMHhCNCwgMHgyNywgMHgxMCwgMHgxQywgMHg0MCwgMHhGQSwKKzB4MDAsIDB4RTksIDB4ODEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUEsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTgsIDB4MEIsIDB4QjQsCisweDg0LCAweEQwLCAweDFBLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgxOCwgMHgzMCwgMHgwMCwgMHg4MywgMHgyMCwgMHgwQywgMHg0MSwgMHhGMCwgMHg4QywgMHhDNCwgMHgzMywgMHgyMCwgMHg0RiwKKzB4MDAsIDB4MUQsIDB4MjMsIDB4NzAsIDB4OEMsIDB4QzAsIDB4ODQsIDB4NDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4NDMsIDB4NzQsCisweDBELCAweEMwLCAweDMxLCAweDAwLCAweEMzLCAweDAwLCAweDNDLCAweDAwLCAweDMwLCAweDBDLCAweEQwLCAweDMzLCAweDAwLAorMHhDQSwgMHgwOCwgMHgzQywgMHgwMywgMHg3NCwgMHgwQywgMHhEMCwgMHgzNCwgMHgwMCwgMHhDMywgMHgxRCwgMHgzQywgMHgwOCwKKzB4RjAsIDB4NzAsIDB4QzgsIDB4NEIsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsCisweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDA0LCAweDZGLCAweDAwLAorMHhGQywgMHhBMywgMHg3MCwgMHgwRiwgMHhFMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRiwKKzB4QzEsIDB4M0UsIDB4MEQsIDB4RkYsIDB4MDAsIDB4RkUsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RjcsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEY1LCAweDI4LCAweEZDLCAweDAwLCAweEYwLAorMHg4MywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywKKzB4MDEsIDB4QjMsIDB4MDIsIDB4NEQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjcsIDB4MDAsIDB4RDMsIDB4ODAsIDB4NkMsCisweDAzLCAweEYyLCAweDBELCAweEMyLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDJELCAweEMwLAorMHhCNCwgMHgwNCwgMHhEMywgMHgwNCwgMHg3QywgMHg4NiwgMHgzMCwgMHg2RCwgMHhDMCwgMHg3NywgMHgwMCwgMHhEMywgMHg0MCwKKzB4N0MsIDB4NTMsIDB4QjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4NDQsIDB4ODIsIDB4RjAsIDB4MTEsCisweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDNELCAweDA1LAorMHhFMSwgMHgxMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzRiwgMHgwNCwgMHhFNSwgMHgwMCwgMHg4NCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MjAsIDB4RUQsIDB4QTAsIDB4OUMsIDB4MDIsIDB4MTAsIDB4NEYsIDB4NDIsIDB4M0MsCisweDIxLCAweEUxLCAweDBBLCAweDlDLCAweDAzLCAweDE4LCAweDhFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHgwQiwgMHgxMCwgMHgwQSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwKKzB4NEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4NDIsIDB4ODEsCisweDAxLCAweDg0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweDQ5LCAweDAxLCAweEE0LCAweDQ3LCAweDUwLAorMHgxRSwgMHg0MCwgMHg1QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHgxNCwgMHgwNSwgMHgxNCwgMHgxRSwgMHg1MCwgMHg3QSwgMHg0MCwKKzB4RTEsIDB4MjEsIDB4MzQsIDB4MDQsIDB4RDAsIDB4OUUsIDB4NjAsIDB4N0IsIDB4NDAsIDB4RTEsIDB4MDEsIDB4MzQsIDB4MTcsCisweDkwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEwLCAweDQwLCAweDAyLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwQSwKKzB4MDQsIDB4QzMsIDB4QzEsIDB4QkMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4NUQsIDB4MDEsIDB4MDQsIDB4MDUsIDB4RDAsIDB4MDgsCisweDQwLCAweDczLCAweDBBLCAweDhELCAweDIwLCAweDE0LCAweDBGLCAweDEwLCAweDBDLCAweDQwLCAweDMyLCAweDgwLCAweEMxLAorMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHg0MCwgMHgzNCwgMHgwMywgMHgxMiwKKzB4ODksIDB4NDIsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4ODMsIDB4RDgsIDB4MUMsIDB4NDAsIDB4NUEsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDAwLCAweDczLCAweDAzLCAweENDLAorMHgwRCwgMHhFMCwgMHgwNywgMHhDMCwgMHgxNywgMHgwMCwgMHg3QiwgMHgwMCwgMHhFQywgMHgwNSwgMHhGMCwgMHgxNSwgMHhDMiwKKzB4MUYsIDB4MDAsIDB4NUYsIDB4MDUsIDB4REMsIDB4NjEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTYsIDB4NjAsIDB4NTMsIDB4ODAsCisweEY0LCAweDAxLCAweEYxLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDUzLCAweDAwLCAweDdDLCAweDAxLCAweEIwLCAweDA1LAorMHhDMCwgMHgxNywgMHgxMCwgMHg1RiwgMHgwMCwgMHhDQywgMHgzOSwgMHhGMCwgMHgzNywgMHhDMCwgMHg1RSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4ODEsIDB4MDAsIDB4MEYsIDB4MDQsIDB4N0MsIDB4MjgsCisweEYxLCAweDAxLCAweEMzLCAweDA3LCAweDEwLCAweDE3LCAweDA4LCAweDdDLCAweDA0LCAweEYwLCAweEExLCAweEMwLCAweDA3LAorMHgwMSwgMHgxRiwgMHgwMCwgMHgxQywgMHgwMCwgMHhGMCwgMHgyMCwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywKKzB4ODAsIDB4MzQsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4M0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDgwLCAweDFFLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDgxLCAweEMxLCAweDQ5LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwgMHg5MywgMHgwOCwgMHg2QywgMHgwNiwgMHhGMCwKKzB4ODksIDB4QzAsIDB4NjMsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4MDIsIDB4MzEsIDB4MDksIDB4RDAsIDB4MjQsIDB4MDAsCisweDlCLCAweDAwLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEQwLCAweDY0LCAweEMwLCAweDkzLCAweDA4LCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNCwKKzB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY0LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDZFLCAweEQyLCAweDI5LAorMHg0MCwgMHgyNywgMHgwMiwgMHg5MSwgMHgwMywgMHgwNCwgMHgwMiwgMHgxMCwgMHgzOSwgMHg0MSwgMHgyNCwgMHgwOCwgMHg5MSwKKzB4MjAsIDB4N0MsIDB4MjYsIDB4MTEsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OTEsIDB4MDIsIDB4NzQsIDB4MDIsIDB4RDAsCisweDc5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsCisweDI3LCAweDAwLCAweDkxLCAweDEwLCAweDQ0LCAweDAyLCAweDEwLCAweDg4LCAweDQ4LCAweDIwLCAweDAwLCAweDk5LCAweDA0LAorMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHg0OSwKKzB4NDAsIDB4NjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjQsIDB4MDAsIDB4OTUsCisweDAxLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHg0MSwgMHg4MSwgMHgwNCwgMHgwNCwgMHgxQSwgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4QzEsIDB4ODEsIDB4MDQsIDB4NDUsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODksIDB4MDAsIDB4MzQsCisweDEyLCAweDEwLCAweDRDLCAweDQwLCAweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDQ4LCAweDQwLAorMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHg5MCwgMHgwOCwgMHg1NCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MzQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NjAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEI4LCAweDk2LCAweDAyLCAweDEzLCAweDAwLCAweDZDLCAweDA4LCAweEYwLCAweDgxLCAweDQ0LCAweDg3LCAweDAyLAorMHgxMywgMHgwQSwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzAsIDB4QTEsIDB4NDIsIDB4ODQsIDB4MDIsIDB4MTEsIDB4MDAsIDB4N0MsIDB4QTgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODMsCisweDEyLCAweDFGLCAweDBBLCAweDdDLCAweDU4LCAweDcwLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDE3LCAweDBBLCAweDdDLAorMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4MDgsIDB4RjQsIDB4MEEsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4RkYsCisweDA4LCAweEZDLCAweDAyLCAweEY0LCAweDBCLCAweEMyLCAweDJGLCAweDAyLCAweEI3LCAweDAwLCAweERDLCAweDIyLCAweEYwLAorMHg4OSwgMHhDOCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwOCwKKzB4QkYsIDB4MDAsIDB4NUMsIDB4OTIsIDB4NzAsIDB4MEIsIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MjIsCisweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLAorMHgyRiwgMHgwNSwgMHhCMywgMHg4NCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwNCwKKzB4NUMsIDB4MDIsIDB4MzAsIDB4OEIsIDB4RTAsIDB4MjUsIDB4MDAsIDB4QjcsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4NEIsCisweEMwLCAweDJGLCAweDA1LCAweEJGLCAweDA0LCAweDRDLCAweDAzLCAweEY0LCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweERGLAorMHgwMCwgMHg0QywgMHg1MiwgMHhCMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhFMiwKKzB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsCisweDAxLCAweDExLCAweDg4LCAweDc0LCAweDQ5LCAweEQwLCAweDA1LCAweDQxLCAweDA3LCAweDAyLCAweDE1LCAweDE0LCAweDQ0LAorMHg5MCwgMHgxMSwgMHg0MSwgMHg0MiwgMHg4NywgMHg0NCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgyMCwgMHg3MiwgMHg0MSwgMHhDMSwKKzB4MDUsIDB4MDEsIDB4MUMsIDB4MDgsIDB4NTQsIDB4NDksIDB4MTAsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MTQsCisweDU0LCAweDEwLCAweDcwLCAweDQxLCAweDQwLCAweDA3LCAweDI0LCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAxLAorMHg0MiwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMCwgMHgwNSwKKzB4ODEsIDB4MDAsIDB4MzQsIDB4MzIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MjAsIDB4ODEsIDB4MkMsIDB4NDQsIDB4NTYsCisweDA0LCAweDQ4LCAweDQwLCAweDI1LCAweDQzLCAweDg1LCAweDQwLCAweDE0LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIzLAorMHgyNSwgMHhDRCwgMHgwMCwgMHgyNCwgMHgzMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5RCwgMHgwNCwgMHgwNCwKKzB4NTIsIDB4OTAsIDB4NDgsIDB4NDQsIDB4MjMsIDB4MDEsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDRCLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDkxLAorMHgwMSwgMHg3NCwgMHg4MywgMHhEMCwgMHg4OSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MTksIDB4NDAsIDB4QTcsIDB4QzAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDYsIDB4NTAsIDB4MDksIDB4MDAsIDB4MjcsIDB4MDgsCisweDk5LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDUwLCAweDAyLAorMHg1OCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MywgMHg2MywKKzB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDUsCisweDdDLCAweDBFLCAweEYwLCAweDM5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAzLCAweDFELCAweDAyLCAweDEwLCAweDA5LAorMHhDOCwgMHgyNSwgMHg0MCwgMHg5NywgMHgyMCwgMHg1QywgMHgwMiwgMHhGMywgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwKKzB4MDAsIDB4NkMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MjAsIDB4OEYsIDB4MDEsIDB4NDksIDB4MDIsIDB4QjAsCisweDE5LCAweEM4LCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDE2LCAweEYwLCAweDI5LCAweEMwLCAweDE3LCAweDA4LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyMSwgMHgxMCwgMHg5RiwgMHgyMCwgMHg3QywKKzB4MTIsIDB4RjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEUwLCAweDI1LCAweDA0LCAweDlGLCAweDAwLAorMHg1QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMSwgMHg5RiwgMHg4NCwgMHg2QywgMHgwMiwgMHhCMCwgMHg1OSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDA0LCAweDdFLCAweDY4LAorMHhCNCwgMHgyMSwgMHhEMCwgMHgwNCwgMHgwOCwgMHgxRCwgMHgwMiwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDOCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NUMsCisweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwQywgMHg3QywgMHgwOCwgMHgzMCwgMHgyMSwgMHhDMiwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MUMsIDB4NDAsIDB4NzEsIDB4MDEsIDB4RTQsIDB4MEQsIDB4MzAsCisweDA3LCAweDQxLCAweDE0LCAweDAwLCAweDdELCAweDBELCAweDQ0LCAweDAxLCAweDcwLCAweDA3LCAweEMwLCAweDExLCAweDAwLAorMHg1RCwgMHgwMCwgMHg3NiwgMHgwNSwgMHg5MCwgMHgwNywgMHg0MCwgMHg5RiwgMHgwOCwgMHg2MSwgMHgwMiwgMHg0NCwgMHgwMSwKKzB4NzAsIDB4MTcsIDB4QzgsIDB4OUUsIDB4MDIsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NTIsIDB4MDUsIDB4NDAsIDB4MTcsCisweDAxLCAweDdELCAweDAzLCAweDc0LCAweDAxLCAweDEwLCAweDA1LCAweDQ0LCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg3MiwgMHgwMCwgMHg4MSwgMHgwOSwgMHgyNCwgMHgwQiwgMHg1MCwgMHgyQywKKzB4NDIsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDMsIDB4MjQsIDB4MDMsIDB4RDAsIDB4OUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsCisweDAxLCAweDM0LCAweDIyLCAweEQwLCAweDFDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDEwLCAweDU0LCAweDgzLCAweDUwLAorMHhCNCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHg0MCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg3MiwgMHgwMCwKKzB4Q0QsIDB4ODEsIDB4MzYsIDB4ODMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDIwLCAweDA1LCAweEExLCAweDAwLCAweEE0LCAweDA3LCAweDUwLCAweDFFLCAweDYwLAorMHgzOCwgMHgwMCwgMHhBRCwgMHgwNCwgMHg4NCwgMHgxMywgMHhEMCwgMHgwRSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhFRCwgMHg4MCwKKzB4QjQsIDB4MDMsIDB4OTAsIDB4MEUsIDB4NDQsIDB4NkIsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MjMsIDB4NDAsIDB4MUUsCisweDQwLCAweDNBLCAweDAwLCAweEVELCAweDA4LCAweEI0LCAweDEzLCAweDUwLCAweDRFLCAweDQwLCAweDNCLCAweDEwLCAweEFDLAorMHgwMCwgMHgzNCwgMHgyNywgMHgxMCwgMHgwRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MTgsIDB4RTgsIDB4MDAsIDB4QTEsIDB4MDEsIDB4RjQsIDB4MDcsIDB4NzAsIDB4MTcsIDB4QzAsIDB4NzgsCisweDAwLCAweEVGLCAweDAzLCAweEFDLCAweDI3LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDIyLCAweEVELCAweDAxLCAweEI2LAorMHgwNywgMHhGMCwgMHgxNiwgMHg4MiwgMHg3MywgMHgwMCwgMHgwMywgMHgwMSwgMHg5QywgMHgxNywgMHg2MCwgMHgxRSwgMHhDMCwKKzB4NzgsIDB4MDgsIDB4RUYsIDB4ODksIDB4M0MsIDB4MTcsIDB4MzgsIDB4REUsIDB4QzgsIDB4N0IsIDB4MDAsIDB4QUYsIDB4MDEsCisweEJDLCAweDI3LCAweDMwLCAweDFFLCAweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhCOCwgMHgwNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwMywgMHgzMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwOCwKKzB4OEYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MDMsIDB4REYsIDB4MDAsIDB4N0MsIDB4ODMsCisweEIxLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDlCLCAweDUxLCAweDBDLCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHg0QiwgMHg3MCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDIwLCAweDZELCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDExLCAweEIwLCAweDFGLCAweEMwLCAweEZGLCAweDAwLCAweEZGLAorMHgwMSwgMHhDQywgMHg0NywgMHhGMCwgMHgxQiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwKKzB4OUYsIDB4RTAsIDB4NUMsIDB4MDAsIDB4M0YsIDB4MDEsIDB4RjgsIDB4MkYsIDB4MzgsIDB4MUYsIDB4QzgsIDB4NkUsIDB4MjgsCisweEYzLCAweDgxLCAweEZDLCAweDQ3LCAweEZBLCAweDlGLCAweEM4LCAweDZGLCAweDAwLCAweDMzLCAweDIxLCAweDdDLCAweDI3LAorMHgzMCwgMHg5RiwgMHhDNCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwKKzB4MjksIDB4MjAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MjEsIDB4MzEsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsCisweDg0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDNCLCAweDE0LCAweEVELCAweDgwLCAweDlDLCAweDIzLCAweDcwLCAweDhBLAorMHhDMCwgMHgyOCwgMHgwMSwgMHgyRCwgMHgyMCwgMHg5QywgMHgwMywgMHgzMCwgMHg0RSwgMHg0MCwgMHgwQywgMHgxMiwgMHhFMSwKKzB4MTgsIDB4QjQsIDB4MDMsIDB4NzAsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4QjQsIDB4MDcsIDB4QjAsCisweDBDLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LAorMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwRSwgMHg0MSwgMHgzQiwgMHgwMCwgMHg2RCwgMHgwMCwgMHg4NCwKKzB4MEIsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MDYsIDB4NzAsCisweDE4LCAweDEwLCAweDJELCAweDAwLCAweDE0LCAweDQzLCAweDFELCAweDBFLCAweDQwLCAweDI4LCAweDQ0LCAweEU1LCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0NCwgMHgyQiwgMHgwMiwgMHhBOSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4MjMsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsCisweDgxLCAweDA2LCAweDA1LCAweDgwLCAweDEwLCAweDA4LCAweDQwLCAweDM3LCAweDAwLCAweDRELCAweDAwLCAweDA0LCAweDg3LAorMHhEMCwgMHgwMCwgMHg0NiwgMHg3MywgMHgwOCwgMHhDRCwgMHgwMCwgMHgxNCwgMHg5MywgMHg1MSwgMHgwOCwgMHg0MCwgMHgyMCwKKzB4MDgsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MTAsIDB4RDUsIDB4ODAsIDB4MzQsCisweDAzLCAweDUwLCAweDBDLCAweDYwLCAweDIzLCAweDAwLCAweDg5LCAweDIwLCAweDc2LCAweDEzLCAweDFDLCAweEVELCAweDQ4LAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyRCwgMHg0MCwgMHg5MywKKzB4MDAsIDB4NDQsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0QsIDB4MDcsIDB4RjAsCisweDA1LCAweEMwLCAweEZGLCAweDAyLCAweERGLCAweDAwLCAweDdDLCAweDBCLCAweDMwLCAweDA5LCAweEM0LCAweDM0LCAweDAwLAorMHgxRiwgMHgwMCwgMHhEQywgMHgwNywgMHgzMCwgMHgwRCwgMHhEMCwgMHg1NCwgMHgwMCwgMHhGNywgMHgwMSwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MzcsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MTAsIDB4M0QsIDB4QzQsIDB4NzcsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDAwLCAweDBGLCAweDAxLAorMHg3QywgMHg2OCwgMHg3MCwgMHgyOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMywgMHhGMCwgMHgxRCwKKzB4QzgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MUMsIDB4MDMsIDB4NzIsIDB4MjUsIDB4QzAsIDB4OTUsIDB4MDAsIDB4MUYsCisweDgyLCAweDFDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweDcwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHg4NywgMHhGMCwgMHgwRCwgMHhDNCwgMHgxNywgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkYsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsCisweDAyLCAweEYwLCAweDAyLCAweEMxLCAweDNDLCAweDAwLCAweEYzLCAweDAyLCAweENDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLAorMHgzQywgMHgwMCwgMHhGRiwgMHgwMywgMHhDQywgMHgwMywgMHgzMCwgMHg4MiwgMHhDMCwgMHg2QywgMHg0MCwgMHgzMywgMHgwMCwKKzB4RkMsIDB4NDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NEYsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEQsIDB4MDMsIDB4MzAsIDB4MEYsCisweEMwLCAweDZGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDBGLCAweEQwLCAweDA0LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg0NiwgMHgwMiwgMHgxMSwgMHgwMiwgMHg1NCwgMHgwNiwKKzB4OTAsIDB4NzEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MjAsIDB4NDAsIDB4MzQsCisweDAwLCAweENELCAweDAwLCAweDZDLCAweDAzLCAweDEwLCAweDI1LCAweDQxLCAweDg0LCAweDA2LCAweDExLCAweDAxLCAweDc0LAorMHgwMywgMHgxMCwgMHgxRCwgMHhDMCwgMHg0MSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwKKzB4NjcsIDB4MDAsIDB4OUQsIDB4MDUsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4QzIsIDB4MDYsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDIyLCAweDAwLCAweEQxLCAweDAyLCAweDQ0LCAweDA2LCAweEQwLAorMHgxMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEOCwgMHgyMSwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MDksIDB4NDAsIDB4MTAsIDB4ODAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDMsCisweDkwLCAweDFELCAweDQxLCAweDM3LCAweDAxLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM3LAorMHgwMSwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMywgMHgxNCwgMHgwRCwgMHg0NCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4OTgsIDB4MDgsCisweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDgwLCAweDA1LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDMwLCAweDAwLCAweERELAorMHgwMCwgMHgyNCwgMHgwMywgMHgxNCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwKKzB4MEMsIDB4NDAsIDB4NTcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODAsCisweDBELCAweDAyLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDRDLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgyMiwgMHg0MCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMSwgMHgwMSwgMHg1MCwKKzB4M0MsIDB4MDAsIDB4NDMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4RDAsIDB4M0MsIDB4MDAsIDB4REYsIDB4MDAsCisweDQ0LCAweDAzLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweEZDLCAweDAzLCAweEIwLCAweDBELAorMHhDMCwgMHgyNywgMHg0MCwgMHhGMywgMHgwMCwgMHhDNCwgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwKKzB4MDIsIDB4QkMsIDB4MTMsIDB4MzAsIDB4QUQsIDB4QzIsIDB4MDQsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEIwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEY4LCAweDBCLCAweEMwLCAweDNGLAorMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHg0MCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzQsIDB4MEIsIDB4RTAsCisweDBELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEM4LCAweDJGLCAweDMwLCAweEJGLCAweDA0LAorMHg3QywgMHgwQiwgMHhGMCwgMHg0RiwgMHhDMCwgMHgxNywgMHg2MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4N0UsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4NDQsIDB4M0MsIDB4MDUsCisweEY3LCAweDAwLCAweEVDLCAweDIzLCAweEIwLCAweDRGLCAweEMwLCAweDQ5LCAweDAwLCAweDM3LCAweDAzLCAweEZDLCAweDAzLAorMHgzMiwgMHgyRiwgMHg0MCwgMHgzRCwgMHgwMiwgMHgyMywgMHgwMywgMHhEQywgMHgyNCwgMHg3OCwgMHg5MywgMHhDMCwgMHg0OCwKKzB4MDAsIDB4MjMsIDB4MDEsIDB4RTQsIDB4MDMsIDB4QjAsIDB4MTcsIDB4QzAsIDB4NEMsIDB4MDAsIDB4RkYsIDB4MjEsIDB4Q0MsCisweDA2LCAweEUwLCAweDAzLCAweEMwLCAweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgwOCwgMHg3RiwgMHgwMCwgMHhERCwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHhGNCwgMHgwMCwgMHhGMSwKKzB4MDMsIDB4ODQsIDB4M0IsIDB4MTAsIDB4OUQsIDB4QzAsIDB4NjQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4RjQsIDB4MkYsIDB4MTQsCisweDZGLCAweDQ0LCAweEJDLCAweDAzLCAweDExLCAweDg0LCAweDRDLCAweDAwLCAweEQwLCAweDQxLCAweEMwLCAweDU0LCAweDQ4LAorMHg1MSwgMHgwMSwgMHg0NCwgMHgyRiwgMHgxMCwgMHgxMSwgMHg1MCwgMHg0NCwgMHgwMCwgMHhGRCwgMHhBMSwgMHg0NCwgMHgwNCwKKzB4RDEsIDB4MDksIDB4NDAsIDB4MEMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDMzLCAweDAwLCAweDBELCAweDQwLCAweDM0LCAweDAzLCAweDkxLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweEM1LCAweDIyLAorMHgyNCwgMHgxMywgMHg5MSwgMHgwQywgMHg0MCwgMHgwMSwgMHgwOCwgMHgwRCwgMHg4NCwgMHgzNCwgMHgwMywgMHg5MCwgMHgyQywKKzB4NDAsIDB4MzEsIDB4MjEsIDB4MDEsIDB4QzAsIDB4MTQsIDB4MTQsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MzIsIDB4MjAsIDB4OTEsCisweDAwLCAweDA0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDAyLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLCAweEQwLAorMHgwMSwgMHg0MiwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4NjAsIDB4NDQsCisweDAzLCAweDEwLCAweDBELCAweDQwLCAweDY0LCAweDI0LCAweDFELCAweDAxLCAweDc0LCAweDAzLCAweDkyLCAweDBELCAweDQwLAorMHgzMiwgMHg4OCwgMHgwMSwgMHgwMSwgMHg1NCwgMHgwNCwgMHhDMCwgMHgxOSwgMHg1MCwgMHg5NCwgMHgwMSwgMHg5MCwgMHgwOCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDYsIDB4MDQsIDB4REQsIDB4MDAsIDB4NDQsIDB4NDYsIDB4RDEsIDB4MzEsCisweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLAorMHg5RiwgMHgwNCwgMHgzQywgMHgwMywgMHg5NCwgMHgwQywgMHhEMCwgMHgzNCwgMHgxMCwgMHhENywgMHgwMCwgMHg2QywgMHgwMywKKzB4QjAsIDB4MEQsIDB4QzgsIDB4NDUsIDB4MTAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzUsCisweDAwLCAweDEzLCAweDExLCAweDVDLCAweDA0LCAweDcxLCAweDMwLCAweEMwLCAweDI2LCAweDAwLCAweDEzLCAweDgzLCAweDZDLAorMHgwMywgMHhCMCwgMHg0OCwgMHhDMCwgMHhDNiwgMHgwMCwgMHhDRiwgMHgwMCwgMHg0RCwgMHgwRSwgMHhGMCwgMHgzMSwgMHhEMCwKKzB4MjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4M0QsIDB4MDAsIDB4QkYsCisweDAwLCAweEZDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweEVELCAweDQwLCAweEZDLCAweDgzLCAweEYwLAorMHgwRSwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRSwgMHhDNCwgMHgzRCwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4M0MsIDB4MDMsCisweDEwLCAweDRCLCAweEMwLCAweDBELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDFFLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgyMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4ODMsIDB4NzAsIDB4MEQsCisweEMwLCAweDA3LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweDlGLAorMHgwMiwgMHg1QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMiwgMHhBNywgMHgwMSwgMHg5MywgMHgwNiwgMHg3QywgMHg0NywgMHgzMCwKKzB4NDksIDB4QzAsIDB4ODcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDgsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDIwLCAweDlELCAweDgwLCAweDc0LAorMHgwMywgMHhEMCwgMHg0RCwgMHg2MCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhDNCwgMHg4MywgMHgxMCwgMHgwRiwgMHg0NCwKKzB4QTcsIDB4MUEsIDB4OTEsIDB4MDAsIDB4QkMsIDB4MTMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDAsIDB4OUQsIDB4MDAsCisweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDgzLCAweDAxLCAweEMxLCAweDUxLCAweEM0LCAweDBCLCAweDUwLCAweDA5LAorMHg0MCwgMHg4NywgMHgwMCwgMHhEQywgMHgwMCwgMHg3NCwgMHgwQSwgMHhEMCwgMHg5OSwgMHg0MCwgMHg2RCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MTMsCisweEQwLCAweDJDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDU0LCAweDAzLCAweDU4LCAweDBDLCAweDQxLCAweDIzLAorMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMywgMHg5MCwgMHgwQywgMHg0NCwgMHgzMCwgMHgwMCwgMHgwRCwgMHg4MCwgMHgxNCwKKzB4MDAsIDB4RDEsIDB4MDAsIDB4NDAsIDB4ODIsIDB4MDgsIDB4QzUsIDB4NjMsIDB4MTQsIDB4MDMsIDB4MTAsIDB4M0MsIDB4NDAsCisweEMzLCAweDAzLCAweENELCAweDAwLCAweDM0LCAweDE2LCAweEQwLCAweDE5LCAweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHg4MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHg4MSwgMHhCNCwgMHgyNywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4Q0QsIDB4ODksIDB4ODQsIDB4MDcsIDB4MTgsIDB4MUUsIDB4NDAsIDB4NkYsIDB4MDEsCisweDIxLCAweDAxLCAweEI0LCAweDA3LCAweEMwLCAweDFDLCAweDQ4LCAweDc4LCAweDAwLCAweEJELCAweDQxLCAweDg0LCAweDA3LAorMHhEMCwgMHgxQSwgMHg0MSwgMHg1RiwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg0QiwKKzB4MDEsIDB4RUQsIDB4MjEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4NUEsIDB4NDAsIDB4M0QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweDhGLCAweDA4LCAweDNDLCAweDAzLCAweEYwLCAweDhDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywgMHgyMywgMHg3MCwgMHgxQywgMHhDMCwgMHg2MywgMHgyMSwgMHg4MywKKzB4MDIsIDB4M0UsIDB4MDMsIDB4QjAsIDB4OEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4MUMsIDB4MDIsIDB4RjAsCisweDA0LCAweEMwLCAweDMzLCAweDAxLCAweDg3LCAweDA0LCAweDFDLCAweDIzLCAweDM4LCAweDBDLCAweEMxLCAweDAzLCAweDAyLAorMHhDRiwgMHgwMCwgMHgzQywgMHhFMywgMHhGMCwgMHgwMCwgMHhDMSwgMHg0OCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4ODcsIDB4RjAsIDB4OUYsIDB4QzAsCisweDNGLCAweDAwLCAweEZGLCAweDUwLCAweEZDLCAweDAzLCAweEYyLCAweDhGLCAweEMwLCAweDJGLCAweDQyLCAweEJGLCAweDA4LAorMHhEQywgMHgwMywgMHhGOCwgMHgwRiwgMHhDMiwgMHgzRiwgMHg5NCwgMHhGRiwgMHg0MCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RCwKKzB4NDAsIDB4M0YsIDB4NDAsIDB4QkIsIDB4MDAsIDB4NUMsIDB4NjMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4MEYsIDB4MDMsIDB4RkYsCisweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDQzLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHg4MCwgMHg5RSwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDIsIDB4REYsIDB4MTEsIDB4NEMsIDB4NTMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4NEMsCisweDAzLCAweEYwLCAweDRELCAweEMwLCAweEY3LCAweDAxLCAweDVCLCAweDAwLCAweDdDLCAweDAxLCAweDcyLCAweDFELCAweEMwLAorMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOCwgMHhDMCwgMHg0NCwgMHhDMCwgMHhEQiwgMHgwMSwKKzB4NEMsIDB4MDEsIDB4RDAsIDB4MUQsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweDg4LCAweDM5LCAweDAxLCAweEFELCAweDAwLCAweDM0LCAweDhCLCAweDEwLCAweDJFLCAweDQ4LCAweDNCLCAweDMxLAorMHhFRCwgMHgwNCwgMHhBQywgMHgwMywgMHhEMCwgMHgyRSwgMHg0MCwgMHgwQiwgMHgyOCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgzQiwKKzB4RDAsIDB4QUUsIDB4QzAsIDB4MzksIDB4MEEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4MDAsIDB4MzgsCisweDAwLCAweEVELCAweDgwLCAweDg0LCAweDEzLCAweEQyLCAweDBBLCAweDQwLCAweDA4LCAweDAwLCAweEM1LCAweDAyLCAweDk0LAorMHgwMSwgMHhEMCwgMHgwRiwgMHg0MCwgMHg0QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4NzksIDB4MDIsIDB4QTUsIDB4NDMsIDB4QjQsIDB4MTcsIDB4MTAsIDB4NUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsCisweDAxLCAweDg0LCAweDI3LCAweDU4LCAweDVFLCAweDQ0LCAweDZCLCAweDEwLCAweEFELCAweDExLCAweDg1LCAweDA3LCAweEQwLAorMHgxRSwgMHg0NiwgMHg3MywgMHgwMSwgMHhFOSwgMHg5MSwgMHhCNCwgMHg4NywgMHg0MiwgMHgxRSwgMHg0MCwgMHg3QSwgMHgwMCwKKzB4RkQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MEEsIDB4NDEsIDB4QzgsIDB4NDAsIDB4RUQsIDB4MDUsIDB4ODQsIDB4MDUsCisweEQwLCAweDFBLCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LAorMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxNCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDIsIDB4Q0QsIDB4MDMsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDMxLCAweDAwLCAweEM5LCAweDAxLCAweDM0LCAweDE3LCAweEQwLCAweDVDLCAweDQyLCAweEYyLCAweDAwLCAweENELAorMHg4MCwgMHgwNCwgMHgwMywgMHhEMCwgMHgzOCwgMHg0MCwgMHg3MCwgMHg0MSwgMHhDRCwgMHg0MCwgMHgxNCwgMHg2MywgMHhEMCwKKzB4M0MsIDB4NDksIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsCisweDAwLCAweDdGLCAweDAwLCAweDNDLCAweDAxLCAweEIwLCAweDA0LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLAorMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHg5RiwgMHgwMCwgMHg3RiwgMHgwMSwgMHg0NCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDNCwKKzB4MTcsIDB4MDAsIDB4N0IsIDB4MDIsIDB4RjQsIDB4MTUsIDB4NzAsIDB4MTcsIDB4RDAsIDB4OUEsIDB4MTAsIDB4N0YsIDB4MTAsCisweDVDLCAweDAxLCAweEYwLCAweDA3LCAweEMwLCAweDFDLCAweDAwLCAweDVGLCAweDAwLCAweENDLCAweDA1LCAweEYwLCAweDU3LAorMHhEMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MDAsCisweEYwLCAweDAxLCAweEM0LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDg4LCAweEYwLCAweDAxLCAweEMwLCAweDA1LAorMHgwMCwgMHgxNywgMHgxMCwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNSwgMHgwMiwgMHgxRiwgMHgwMCwgMHg3NSwKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTcsIDB4ODAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsCisweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg0QywgMHgxMiwgMHgzMCwgMHgyOSwgMHhDMiwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwKKzB4NDksIDB4QzAsIDB4MjQsIDB4MDYsIDB4OUYsIDB4MTAsIDB4NEMsIDB4MjIsIDB4MzAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsCisweDk3LCAweDAwLCAweDdDLCAweDAyLCAweDMyLCAweDU5LCAweEMwLCAweDI3LCAweDI2LCAweDkzLCAweDgwLCAweDdELCAweDBBLAorMHhGMCwgMHgxOSwgMHhDMSwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHg1OSwgMHhDMCwgMHg0MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MkUsIDB4MDAsIDB4OEQsIDB4MDAsCisweEM0LCAweDFFLCAweDEwLCAweDJCLCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDc5LAorMHg0MCwgMHg2NSwgMHgwMCwgMHg5RCwgMHg4MCwgMHg2OCwgMHgwNiwgMHg1MCwgMHgwOSwgMHg2MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NUMsIDB4MDIsIDB4QjEsIDB4MzksIDB4QzIsIDB4RTcsIDB4MDAsIDB4ODEsIDB4ODIsIDB4NkMsIDB4MUEsIDB4RDAsCisweDg5LCAweEMwLCAweDI1LCAweDAwLCAweEJELCAweDAzLCAweDM0LCAweDFBLCAweDEyLCAweDQ5LCAweDQwLCAweDA3LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgyMCwgMHg5RCwgMHg0MCwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTgsIDB4MDksIDB4NDIsCisweDI0LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDgyLCAweDEyLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDYwLAorMHgzNCwgMHgwMiwgMHg1OCwgMHgyRCwgMHg0MCwgMHhBNywgMHg4MCwgMHhEMSwgMHg5OCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NzQsIDB4MjIsIDB4MTQsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDlELCAweDAyLCAweDA0LCAweDAyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHhBMCwgMHgwMCwgMHg4RCwgMHgwNiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMSwKKzB4MDAsIDB4OEQsIDB4MDgsIDB4NDUsIDB4ODMsIDB4NUEsIDB4ODgsIDB4NjAsIDB4MjMsIDB4ODIsIDB4OEQsIDB4MDgsIDB4MzQsCisweDIyLCAweEQwLCAweDg4LCAweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAwLCAweDI0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHgzMSwgMHg4MCwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4NDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEQsIDB4MDQsIDB4MzQsCisweDExLCAweDUwLCAweDA0LCAweDA1LCAweDBGLCAweDAwLCAweDdDLCAweDc4LCAweDMwLCAweDQxLCAweDQxLCAweDA0LCAweDAwLAorMHgxRCwgMHgwMiwgMHg0NCwgMHg1MCwgMHgzMSwgMHg2MSwgMHg0MSwgMHg4NywgMHgwNSwgMHgxNywgMHg0MiwgMHg3NCwgMHgwOCwKKzB4NzQsIDB4MjAsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4NDAsIDB4NkMsIDB4NTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDgxLCAweDdDLCAweDAwLCAweDMwLCAweEExLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHhBNywgMHgwMCwgMHhCRiwgMHgwMSwgMHg3QywgMHgwQSwgMHhGMSwgMHgyOSwKKzB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4ODIsIDB4RjQsIDB4MDksIDB4QzAsIDB4MkYsIDB4MjAsIDB4QkYsCisweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAxLCAweEZGLCAweDI0LCAweERDLCAweDEyLCAweDAwLAorMHg0QiwgMHhDMCwgMHgyRCwgMHg0MCwgMHhBRiwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDOCwgMHgzOSwgMHgwMCwKKzB4OUYsIDB4MjIsIDB4RkMsIDB4MDMsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDY3LCAweDAxLCAweDkzLCAweDAyLCAweENDLCAweDA2LCAweEYwLCAweDFCLCAweEMwLAorMHgyNSwgMHgwMiwgMHg5QiwgMHhFMCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0QiwgMHhDNSwgMHgyRiwgMHgwMCwgMHg5MywgMHgwMCwKKzB4REMsIDB4MDIsIDB4MzgsIDB4ODksIDB4QzAsIDB4MjcsIDB4NDksIDB4OTMsIDB4MDAsIDB4NUUsIDB4MjIsIDB4MzAsIDB4MEIsCisweDQwLCAweDJDLCAweDAwLCAweEEzLCAweDAwLCAweENDLCAweDEyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLCAweEJCLAorMHgxMSwgMHhGQywgMHg4MiwgMHhFMCwgMHgwQiwgMHhEMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDgsIDB4MEIsIDB4MDEsIDB4NDUsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDYsIDB4NDcsCisweDAxLCAweDFELCAweDlELCAweDc0LCAweDUwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDEwLCAweDVDLAorMHgwMCwgMHgxNCwgMHg4MSwgMHgwMCwgMHgwNywgMHgyNSwgMHgxMSwgMHgwNCwgMHg1QywgMHgxMCwgMHgxMCwgMHgwMSwgMHg1MSwKKzB4MDQsIDB4MjAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDIsIDB4MDUsIDB4NDgsIDB4MDcsIDB4MTAsIDB4MTMsIDB4NDIsCisweDc0LCAweDAwLCAweEQwLCAweDA1LCAweDQwLCAweDYwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHhBMCwgMHhBMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwgMHgyMywgMHgwMiwKKzB4OEQsIDB4MDAsIDB4MzQsIDB4MzIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MTQsIDB4MjIsCisweDkwLCAweDA4LCAweDQ0LCAweDIzLCAweDAzLCAweDg5LCAweDE0LCAweDU0LCAweDEyLCAweDE4LCAweDQ4LCAweDQwLCAweDIyLAorMHg0MCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgyMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4RDEsIDB4MDgsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDg4LCAweDI1LCAweDAwLCAweDg5LCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELAorMHg4MCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHgwMCwgMHhBNywgMHg0MiwgMHg5MSwgMHgwMiwgMHg1NCwgMHgwMiwgMHg5OCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjYsIDB4MjAsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAxLCAweDkxLCAweDAwLCAweDc0LCAweDAyLAorMHhEMCwgMHgwRCwgMHg0MCwgMHg2MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwKKzB4MjUsIDB4MDAsIDB4QjMsIDB4ODEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MkYsIDB4MDgsIDB4QkIsIDB4ODAsCisweDdDLCAweDAyLCAweEYxLCAweDA5LCAweDgwLCAweDY1LCAweDAwLCAweDkzLCAweDAwLCAweDFDLCAweDAyLCAweDkwLCAweDA5LAorMHg0OCwgMHgyNywgMHgwMCwgMHg5QiwgMHgwMywgMHgxQywgMHgxQSwgMHgzMCwgMHg1OSwgMHhDMCwgMHgyMiwgMHgwMSwgMHg4MywKKzB4QTcsIDB4NEMsIDB4MDIsIDB4RDAsIDB4MjksIDB4QzQsIDB4NjcsIDB4MDAsIDB4OUIsIDB4ODAsIDB4N0MsIDB4MkEsIDB4RjAsCisweDI5LCAweEMwLCAweDE0LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDI1LAorMHgwMCwgMHg5RiwgMHgwMSwgMHg3MCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5QywgMHhBMCwgMHg3QywKKzB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0UsIDB4MDIsIDB4NTAsIDB4MDksIDB4QzQsCisweDI3LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDAyLCAweEY0LCAweDQ5LCAweEUwLCAweDY1LCAweDAxLCAweDlDLCAweDQ0LAorMHg1QywgMHg0MiwgMHhGMCwgMHgwOSwgMHgwMCwgMHg2NywgMHgwNCwgMHg5RiwgMHgyMCwgMHg3RSwgMHgwNiwgMHhEMCwgMHg1OCwKKzB4QzEsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDEsIDB4MDAsCisweDFGLCAweDAwLCAweDVDLCAweDQwLCAweEYwLCAweDAxLCAweEUwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHgzMSwgMHgwMSwgMHhFMCwgMHgwNiwgMHgxMSwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg5MCwgMHgwMSwgMHhDOCwgMHgwMywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjgsIDB4MDEsIDB4QzAsIDB4ODYsIDB4MDAsIDB4MUYsIDB4ODAsIDB4NUMsCisweDAwLCAweDYwLCAweDAxLCAweEMwLCAweDg1LCAweDAwLCAweDFGLCAweDA0LCAweDRELCAweDAwLCAweEYwLCAweDIxLCAweEMwLAorMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg1RCwKKzB4MDAsIDB4RDQsIDB4MEQsIDB4RDgsIDB4MDcsIDB4NjAsIDB4MTcsIDB4MTAsIDB4NUUsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsCisweDU3LCAweEUwLCAweDlCLCAweDgwLCAweDVELCAweDIwLCAweEY0LCAweDAxLCAweEIyLCAweDA1LCAweEMwLCAweDE3LCAweDgwLAorMHg1RCwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgxNywgMHhDMCwgMHgxQywgMHgwMCwgMHg3RCwgMHgwMiwgMHhDNCwgMHgwMSwKKzB4QjAsIDB4MTcsIDB4NDAsIDB4OTgsIDB4MDAsIDB4N0YsIDB4MDMsIDB4QzQsIDB4NDUsIDB4RDIsIDB4MDcsIDB4NDgsIDB4NDEsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLAorMHgwNCwgMHgyRSwgMHg1MCwgMHgwOCwgMHg0MCwgMHgzMSwgMHg4MCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMywgMHgxOCwKKzB4NjAsIDB4MzIsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDdDLCAweDUwLCAweDIwLCAweDAwLCAweENELCAweDFBLCAweDE2LCAweDBCLCAweDEwLAorMHgwNCwgMHgwMCwgMHhGMSwgMHgwMiwgMHg4RCwgMHgwMCwgMHgwNCwgMHgxRSwgMHhEMCwgMHg4QywgMHg0MCwgMHg0MCwgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4OTQsCisweDAyLCAweEQwLCAweDBBLCAweDQwLCAweDNCLCAweDAxLCAweEVELCAweDA0LCAweDM0LCAweDA3LCAweDE4LCAweDBBLCAweDQwLAorMHgzQiwgMHgwMCwgMHhFRCwgMHgwNCwgMHgzNCwgMHgwMiwgMHg5MiwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDEsIDB4MjgsIDB4MTAsIDB4QUQsIDB4NDAsIDB4ODQsIDB4MDQsIDB4OTAsIDB4M0UsCisweDQwLCAweDM4LCAweDAwLCAweEFELCAweDgzLCAweDg2LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDExLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMywgMHg5NCwgMHgwNywKKzB4NzAsIDB4MUEsIDB4QzAsIDB4NzksIDB4MDEsIDB4RUQsIDB4MDUsIDB4QjQsIDB4MzcsIDB4MzEsIDB4MUUsIDB4NDAsIDB4N0EsCisweDA4LCAweEVELCAweDBCLCAweEI0LCAweDA2LCAweDM0LCAweDFFLCAweEMwLCAweDdCLCAweDAyLCAweEVELCAweDg1LCAweEJDLAorMHgyNywgMHhEOCwgMHgxNywgMHhFMCwgMHg2OCwgMHgwMCwgMHhBRiwgMHg4MSwgMHg5QywgMHgwNCwgMHg3OCwgMHgxNiwgMHhDMCwKKzB4NzksIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDEwLCAweERGLCAweDQwLCAweDdDLCAweDAzLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgyQiwgMHhGNCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4ODIsIDB4REYsIDB4M0UsIDB4NUMsIDB4M0IsCisweDcwLCAweDAxLCAweEUwLCAweDI1LCAweDIwLCAweDlGLCAweDAwLCAweDNDLCAweDAwLCAweDcwLCAweDBELCAweEMyLCAweDI3LAorMHgwMCwgMHhDNywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDksIDB4Q0MsIDB4MzIsIDB4RjgsIDB4OEIsCisweEMwLCAweDdDLCAweDA0LCAweEZGLCAweDExLCAweEZDLCAweDA3LCAweEYwLCAweDFCLCAweEM4LCAweDdGLCAweDAwLCAweEZGLAorMHgwMSwgMHhERSwgMHgwNiwgMHhGMCwgMHhCRCwgMHhDMSwgMHg3NCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwKKzB4MUIsIDB4QzAsIDB4NkMsIDB4MDAsIDB4OUIsIDB4ODksIDB4RkMsIDB4MjUsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0MsIDB4MDAsCisweEJCLCAweDAxLCAweEJDLCAweDA3LCAweDM4LCAweDlGLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgxQywgMHg4NCwgMHgyMiwgMHhEOCwgMHgwQSwgMHhDMCwKKzB4M0EsIDB4QTAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MTMsIDB4MDAsIDB4RUQsIDB4MDAsCisweDhDLCAweDEyLCAweEQwLCAweDVFLCAweDQwLCAweDc4LCAweDAyLCAweEVELCAweDAwLCAweDlDLCAweDQzLCAweEQwLCAweDBCLAorMHg2MCwgMHgyOCwgMHgwNiwgMHhBRCwgMHgwNSwgMHhCNCwgMHgyNCwgMHhEMiwgMHgwRSwgMHhDMCwgMHgzQSwgMHg4MCwgMHhBNSwKKzB4MDAsIDB4QjQsIDB4MDksIDB4RjIsIDB4QzIsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA4LCAweDM5LCAweDAwLCAweEZELCAweDgxLCAweEE0LCAweDAzLCAweEQ4LCAweDg4LCAweDQwLCAweDc4LAorMHgwMiwgMHhFNSwgMHgwMSwgMHhCNCwgMHgwMywgMHg1MCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMiwgMHhGRCwgMHgxOCwgMHg5NCwKKzB4MDIsIDB4RDEsIDB4NEUsIDB4NTQsIDB4M0EsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweEE5LCAweDE0LCAweEI0LCAweDgwLCAweEQ4LCAweDg2LCAweDQwLCAweDM5LCAweDAwLCAweEUxLCAweDAwLAorMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDEsIDB4RDAsIDB4MDgsIDB4NjQsIDB4MzIsIDB4MDAsCisweENELCAweDgwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDYwLCAweDEzLCAweDAwLCAweENELCAweDgxLCAweDA0LCAweDAyLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHg0MCwgMHg1NCwgMHgwRiwgMHhEMSwgMHgyOCwgMHg0NCwgMHhFMCwKKzB4MTAsIDB4OEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4ODgsIDB4NDAsIDB4NjMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsCisweDA5LCAweDUyLCAweDMwLCAweDQwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHg0MSwgMHg2RCwgMHgwMiwgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzgsIDB4RjcsIDB4MDgsIDB4RkYsIDB4MDMsIDB4NTQsIDB4ODMsIDB4RDIsCisweDBGLCAweDQ4LCAweDNFLCAweDAwLCAweEZGLCAweDA4LCAweEY0LCAweDBCLCAweEQwLCAweDJELCAweEQwLCAweDM0LCAweDAyLAorMHg4QiwgMHgwMSwgMHg3QywgMHgwMCwgMHhEMCwgMHgwQywgMHhDMCwgMHhCNSwgMHgwNiwgMHg5MywgMHgwMCwgMHg3QywgMHgwQSwKKzB4MTAsIDB4MjEsIDB4QzAsIDB4NTcsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDMzLCAweDAwLCAweERGLCAweDEwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgyOSwgMHhDNCwgMHg3NywgMHgwNCwgMHhERiwgMHgwNCwgMHgxQywgMHgwQSwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4QTcsIDB4MDgsIDB4OUYsCisweDYwLCAweDdDLCAweDg4LCAweEYxLCAweDJELCAweDQwLCAweEI2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHhBMSwgMHhDOCwgMHgzNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwKKzB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4MzAsIDB4MkYsIDB4QzAsIDB4M0YsIDB4MjAsIDB4RjMsIDB4NDAsIDB4RkMsCisweDAzLCAweEYwLCAweDFGLCAweEMwLCAweDJDLCAweDAyLCAweEZGLCAweDgwLCAweEZDLCAweDg3LCAweDMwLCAweDBGLCAweEQwLAorMHgzQywgMHgwMCwgMHhGNSwgMHgwMCwgMHhDRCwgMHg0MywgMHhCMCwgMHgwNywgMHhDMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4Q0MsIDB4ODAsIDB4RjAsIDB4MEYsIDB4ODAsIDB4M0MsIDB4MDAsIDB4QjMsIDB4MDQsIDB4RkMsIDB4NDAsIDB4RjAsIDB4MEEsCisweEMxLCAweDA0LCAweDI2LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM2LCAweDIwLAorMHhEMSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg5NCwgMHgwNSwgMHhDMCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywKKzB4RDAsIDB4ODQsIDB4NDEsIDB4MjUsIDB4MDAsIDB4REQsIDB4MjAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsCisweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEIwLCAweDIxLCAweDQwLCAweDE3LCAweDAwLCAweDlELCAweDIzLCAweDQ0LAorMHg0QywgMHhEMCwgMHgwRCwgMHg1MCwgMHg2MCwgMHg4NCwgMHg5NSwgMHgwNywgMHg3NCwgMHgwQywgMHhEMCwgMHgzOSwgMHg1MCwKKzB4MDQsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4QzAsIDB4RDEsCisweDAwLCAweDc0LCAweDAyLCAweDkwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLAorMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg2NCwgMHgxQiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4RDUsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4QjcsIDB4MDEsIDB4OUQsIDB4MTEsIDB4NDQsIDB4MDQsCisweEQwLCAweDBELCAweDQxLCAweDQ1LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDExLCAweDQwLCAweDA0LAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDExLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweDE0LCAweDRDLCAweDQwLCAweDMwLCAweDA0LCAweEM1LAorMHgyMCwgMHgwNCwgMHgwMywgMHhENCwgMHgwMCwgMHg0NCwgMHgyMywgMHg4MCwgMHg4RCwgMHgzMCwgMHgwNSwgMHg0MCwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MjUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4ODEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweEYzLCAweDQwLCAweDdDLAorMHgwMywgMHgzMCwgMHgwRCwgMHhDNCwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMiwKKzB4QTQsIDB4MDIsIDB4RkQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEUsIDB4QzAsIDB4M0MsIDB4MDEsIDB4RjcsIDB4MDAsCisweENDLCAweDAzLCAweDMyLCAweDA1LCAweEMyLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDEwLCAweEYwLCAweDBELAorMHhDMCwgMHgyNSwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwOSwgMHhDMCwgMHgwNCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4QTgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsCisweDc4LCAweDA3LCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDQ3LCAweEMxLCAweDBGLAorMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgyRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEEsIDB4NDAsCisweDJBLCAweDA4LCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgzRiwgMHgwOCwgMHhBMywgMHgwMCwgMHhGQywgMHgzMywgMHgzMCwKKzB4OUIsIDB4QzAsIDB4RUYsIDB4MDAsIDB4RkYsIDB4MDMsIDB4OUQsIDB4MjcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDIsCisweEZCLCAweDA5LCAweENELCAweDA3LCAweDcwLCAweDFGLCAweEM4LCAweDdBLCAweDA4LCAweEZGLCAweDAxLCAweEZDLCAweDA3LAorMHgzMSwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHhGRSwgMHgyNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QSwKKzB4NDAsIDB4QjMsIDB4MDEsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MjYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDNCLCAweDM4LCAweEQxLCAweDQzLCAweEY0LCAweDEzLCAweDEyLCAweDRDLAorMHg0NCwgMHgyNywgMHgxMSwgMHgxQywgMHg4NCwgMHg0NCwgMHgxMCwgMHgxMCwgMHgxMSwgMHg1MCwgMHgwNCwgMHgwMSwgMHgxMSwKKzB4MDQsIDB4NDQsIDB4RDAsIDB4NTAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MEQsIDB4MTAsIDB4MzQsIDB4NDAsIDB4MTAsCisweDQxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDQ0LCAweDVDLCAweDEwLCAweDEwLCAweDExLCAweDQwLCAweDQ0LCAweDAwLAorMHg5MSwgMHgwMSwgMHg1QywgMHgwQywgMHgxNCwgMHg0NSwgMHg0MCwgMHgwRiwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjMsIDB4MDUsIDB4ODEsIDB4MjIsIDB4MTQsIDB4MzMsIDB4MTAsIDB4MEMsIDB4NDgsCisweDIxLCAweDAxLCAweENELCAweDAwLCAweDQ0LCAweDEzLCAweDU0LCAweDBELCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDgwLAorMHgwNCwgMHgwMywgMHg1NiwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwNCwgMHgzNCwgMHgxMywgMHg5MCwgMHg0QywKKzB4NDAsIDB4MzMsIDB4MDUsIDB4Q0QsIDB4MjAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDEsCisweDAxLCAweDM0LCAweDBBLCAweEQwLCAweDQwLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4OCwgMHgzNSwgMHg0MCwgMHhEMSwgMHg4NCwgMHg3NCwgMHgwMywgMHgxNCwgMHgzRCwgMHg0MCwgMHgyNywKKzB4MjAsIDB4MEQsIDB4MDAsIDB4NTQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDQsCisweDAwLCAweDU0LCAweDAxLCAweDYwLCAweDA3LCAweDAwLCAweDFELCAweDgwLCAweDcwLCAweDAwLCAweDkwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxRCwgMHgyMCwgMHgxNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHg1MSwgMHgwMSwKKzB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEwLCAweDM3LCAweDAwLCAweDkzLCAweDAxLCAweDVDLCAweDAzLCAweDMwLCAweDNELCAweEMwLCAweDY1LCAweDBBLAorMHhERiwgMHgwMCwgMHg0QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNSwgMHg0MCwgMHhEQiwgMHg4MCwgMHgwOCwgMHgwMywKKzB4NzQsIDB4MEQsIDB4QzQsIDB4MzYsIDB4MTAsIDB4REYsIDB4MDAsIDB4NzgsIDB4MDMsIDB4QTAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDgwLCAweERGLCAweDAwLCAweDc0LCAweDAzLCAweDM0LCAweDBDLCAweEMyLCAweDM2LCAweDAwLCAweDkxLCAweDAxLCAweDNDLAorMHgxNSwgMHhGMCwgMHgxNSwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4ODgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsCisweDQwLCAweEU0LCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDBFLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDQwLCAweEYwLAorMHgwMywgMHgwMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgzMCwgMHhGQywgMHg4MCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHhBMCwKKzB4M0YsIDB4NDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MTQsIDB4RkYsIDB4MDAsIDB4REMsIDB4MjQsCisweDMwLCAweDQ3LCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LAorMHg2MSwgMHgxMCwgMHg5QiwgMHgwMSwgMHg2QywgMHgwMywgMHgzNCwgMHgzRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHhEMywgMHg1MCwKKzB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4RDMsIDB4MDgsIDB4NEMsIDB4MDcsIDB4QjAsIDB4NEQsCisweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAxLCAweDRDLCAweDgzLCAweDMwLCAweDFELCAweEMxLCAweDM3LCAweDAwLCAweERGLAorMHgwMSwgMHg3QywgMHg5NywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5MywgMHgxMCwgMHg3QywgMHgyMCwgMHgzMCwKKzB4MjUsIDB4RDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QjQsCisweDAyLCAweEQxLCAweDIwLCAweEQ0LCAweDJCLCAweDEwLCAweDJELCAweDQwLCAweDY0LCAweDAxLCAweDFBLCAweDAzLCAweDNDLAorMHgwMCwgMHgxNCwgMHg0MCwgMHg0MiwgMHg4NywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg1MSwgMHhDMCwKKzB4MDUsIDB4NDAsIDB4MTUsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjEsCisweDc0LCAweDBDLCAweEQwLCAweDAxLCAweDQ0LCAweEMwLCAweDA0LCAweDU5LCAweDAzLCAweDc0LCAweDIwLCAweDAwLCAweEI1LAorMHg0MCwgMHgwQywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgyMCwgMHgzMCwgMHgwMCwKKzB4ODksIDB4NDAsIDB4NDQsIDB4MDMsIDB4OTAsIDB4MkMsIDB4NDEsIDB4NjAsIDB4MDAsIDB4QzksIDB4MDIsIDB4MzQsIDB4MDMsCisweDEwLCAweDFDLCAweDQwLCAweEI3LCAweDA0LCAweEMxLCAweDAxLCAweDE0LCAweDAzLCAweDkwLCAweDJDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDOSwgMHgwMiwgMHg1NCwgMHgyNywgMHg5MSwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwKKzB4MEIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4NDAsIDB4ODksIDB4MDMsIDB4MTQsIDB4MEMsIDB4MTAsIDB4OUMsIDB4NDAsCisweDRDLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDc4LCAweDAwLCAweEYxLAorMHgwMSwgMHgxNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg2OCwgMHgwMCwgMHgyOSwgMHgxMSwgMHhDNCwgMHgwNCwgMHgxMCwKKzB4OTIsIDB4NDgsIDB4NEIsIDB4MDAsIDB4MjEsIDB4MDMsIDB4OTQsIDB4MDQsIDB4MTIsIDB4MTIsIDB4NDAsIDB4NEQsIDB4MjAsCisweDI5LCAweDA5LCAweDk1LCAweDBDLCAweDUwLCAweDEyLCAweDQwLCAweDRCLCAweDIwLCAweDJDLCAweDQxLCAweEIwLCAweDA0LAorMHhEMCwgMHgxMywgMHg0MCwgMHg0OCwgMHgwMCwgMHhBOSwgMHgyOSwgMHhCNCwgMHgxNywgMHgxMCwgMHgxRiwgMHg0MCwgMHgzQywKKzB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OEIsIDB4MDAsCisweDBDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDI0LCAweDAwLCAweENCLCAweDg4LCAweDM0LCAweDIzLCAweDMxLCAweDBDLAorMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHg4MCwgMHg1QywgMHgyMywgMHhCMCwgMHg4QywgMHhDMCwgMHgzMywgMHgwMiwgMHhDRiwKKzB4MDAsIDB4MUMsIDB4MjMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjIsCisweDBDLCAweEM0LCAweDMwLCAweDAwLCAweDQzLCAweDMwLCAweDFDLCAweDAzLCAweDMwLCAweDdDLCAweEMwLCAweDQ4LCAweDQwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywKKzB4NEIsIDB4NTAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDIsIDB4M0YsIDB4MjgsIDB4RkUsIDB4MDAsIDB4RjIsIDB4MDMsIDB4NDgsCisweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDgwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM3LCAweDAwLAorMHhFQywgMHgwMCwgMHhCMCwgMHg4MywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMiwKKzB4QzAsIDB4NEYsIDB4NDAsIDB4NzcsIDB4MDAsIDB4M0MsIDB4MTMsIDB4RjIsIDB4OEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDEzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxQywgMHhDMCwgMHgzMCwKKzB4NDAsIDB4RDMsIDB4MDAsIDB4NkYsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsCisweDAzLCAweEYwLCAweDFELCAweEQwLCAweDM0LCAweDAwLCAweERGLCAweDIxLCAweDRELCAweDA3LCAweDI0LCAweDBELCAweEMwLAorMHgzMywgMHgwMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwNywgMHgzMiwgMHgxNSwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MjIsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBGLCAweDUwLCAweDI4LCAweDAwLCAweDJELCAweDAwLCAweEJDLCAweDAwLCAweEQwLCAweDAyLCAweDQ4LCAweDA5LCAweDAwLAorMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMiwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4RDAsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4M0QsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDQsIDB4MEIsCisweDAwLCAweEUxLCAweDIwLCAweEFDLCAweDAzLCAweEIwLCAweDA3LCAweEMwLCAweDRFLCAweDY4LCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg2OSwgMHgxMCwgMHhFRCwgMHgwMywgMHg5NCwgMHgxNywgMHhEMCwgMHgxRSwKKzB4NDAsIDB4NjgsIDB4MDQsIDB4RUQsIDB4NDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDQsIDB4N0MsIDB4MjAsIDB4RjksCisweDgxLCAweDg0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEU1LCAweDAxLCAweDg0LCAweDA3LCAweEQwLAorMHgxRSwgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHg4NywgMHgxOCwgMHgxRSwgMHg0MCwgMHg3QiwgMHg0MCwKKzB4NzEsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MTYsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDI0LCAweDRDLAorMHgzMCwgMHgxMCwgMHgwRCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgxMCwgMHgwOSwgMHhDMCwKKzB4MDQsIDB4ODAsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MDMsIDB4MDgsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDAsCisweDQwLCAweDAxLCAweDAwLCAweDBELCAweDAwLCAweDA2LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDUxLAorMHgwMywgMHgyNCwgMHhDRiwgMHgxMiwgMHgzNCwgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTAsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MjcsIDB4QzAsIDB4NTQsCisweDAwLCAweDVGLCAweDAwLCAweDc0LCAweDAxLCAweDcwLCAweDA1LCAweEM0LCAweDE0LCAweDAwLCAweDRCLCAweDAwLCAweDZDLAorMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTMsIDB4MDAsIDB4NzEsIDB4MDcsCisweENDLCAweDExLCAweDE0LCAweDE3LCAweDQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwOCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMSwgMHgwNywgMHgwMCwKKzB4M0QsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzcsIDB4MDIsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBFLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHg0MCwgMHgxRiwgMHgwNiwgMHg3QywKKzB4MDAsIDB4RjAsIDB4QTEsIDB4QzksIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDIxLCAweDAwLCAweDkzLCAweDAwLCAweDNDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI0LCAweDEwLCAweDlGLAorMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5MywgMHgwMCwgMHg2QywgMHgwNiwgMHhGMCwKKzB4OTksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweDlCLCAweDAwLCAweDZDLCAweDAyLAorMHhGMCwgMHg0OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4MjYsIDB4NDAsIDB4OTEsIDB4ODAsIDB4NzQsIDB4NDIsIDB4MTAsIDB4QTksIDB4NDEsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MDksCisweDVFLCAweDJBLCAweEQwLCAweDE5LCAweDQwLCAweDYzLCAweDQwLCAweDkxLCAweDAyLCAweDQ1LCAweDFBLCAweEQwLCAweDY5LAorMHhDMiwgMHgyNiwgMHgwOCwgMHg5RCwgMHgwMiwgMHg0NCwgMHg0MiwgMHgxMCwgMHgzOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDIsIDB4NzQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDgsIDB4NjcsIDB4MDQsIDB4OTEsIDB4ODIsIDB4NDQsIDB4ODYsIDB4RDAsCisweDY5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDY0LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHhDNCwKKzB4NDIsIDB4RDAsIDB4NEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjksIDB4MDMsIDB4QzQsIDB4MTIsIDB4RDAsIDB4MEIsIDB4NDAsCisweDJDLCAweDAwLCAweEJELCAweDAwLCAweEM0LCAweDA2LCAweDkyLCAweDBCLCAweDQ0LCAweDJGLCAweDAwLCAweEJELCAweEMwLAorMHhGNCwgMHgwMiwgMHhEMCwgMHgxQiwgMHg0MCwgMHgyRiwgMHg0MSwgMHg5MSwgMHgwOCwgMHg2NCwgMHgyMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MkEsIDB4MjAsIDB4MDEsCisweDgxLCAweDA0LCAweDM0LCAweDEyLCAweDE4LCAweDA4LCAweDUwLCAweDIwLCAweDAwLCAweEJDLCAweDAwLCAweDg0LCAweDAyLAorMHhEMCwgMHgwQSwgMHg0MCwgMHg2RiwgMHgwMCwgMHhCOSwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQSwKKzB4MDAsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MDIsIDB4OTAsIDB4MUEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4NDEsIDB4QjQsCisweDA2LCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweDkxLCAweDAwLCAweDI0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLAorMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHg4NiwgMHgwMiwgMHgxMywKKzB4MDAsIDB4N0MsIDB4MjgsIDB4MzQsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MUYsIDB4MEEsIDB4NDQsIDB4MjgsIDB4RjAsCisweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDFCLCAweDBBLCAweDRDLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDg1LCAweDAyLAorMHgxRiwgMHgwQSwgMHg0QywgMHgyOCwgMHhCMywgMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwgMHgwQSwgMHg3QywgMHgyOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MEYsIDB4MTAsIDB4NTMsIDB4MDAsIDB4NkMsIDB4NTEsIDB4RkEsIDB4QTEsIDB4QzAsIDB4NzcsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDg4LCAweDJGLCAweDAyLCAweEJGLCAweDA4LAorMHg3QywgMHgyMiwgMHg3OCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgyMCwgMHg5RSwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4ODcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdELCAweDAyLCAweDcxLCAweDA5LCAweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDIwLCAweDdDLCAweDgyLCAweEYwLAorMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHhBNywgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDEsIDB4QjMsIDB4MTQsIDB4Q0MsCisweEIyLCAweDMwLCAweDBGLCAweEMwLCAweDJELCAweDAwLCAweEJGLCAweDA4LCAweENDLCAweDAyLCAweDEwLCAweDBCLCAweEMwLAorMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHgwMCwKKzB4RkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDgsIDB4REMsIDB4MDIsIDB4MzAsIDB4MEIsCisweEMwLCAweDJGLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDgyLCAweDMwLCAweDBCLCAweEMwLCAweDY3LCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwRCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgzMCwKKzB4MTAsIDB4MDEsIDB4NDMsIDB4MDQsIDB4MDQsIDB4MUQsIDB4MDAsIDB4MDQsIDB4NTAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDMsCisweDAxLCAweDFELCAweDEwLCAweDRDLCAweDQwLCAweDE0LCAweDAxLCAweDUwLCAweDA0LCAweDA1LCAweDAxLCAweDA0LCAweDc0LAorMHgxMCwgMHhEMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgyNCwgMHgwMSwgMHg0MCwgMHg1QywgMHg1MCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4ODEsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDAzLCAweDkxLCAweDIwLCAweDA0LCAweDEyLCAweDkwLAorMHg0OSwgMHg0MCwgMHgyMSwgMHg4MCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMSwKKzB4OEQsIDB4MDQsIDB4NjUsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDEsIDB4ODEsIDB4MTQsIDB4MzQsIDB4MTIsCisweEQ4LCAweDQ4LCAweDUwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDE0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0OCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTAsIDB4MjksCisweDQwLCAweDI0LCAweDAyLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDhELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MjAsCisweDk5LCAweDAwLCAweDc0LCAweDBBLCAweDEyLCAweDg5LCAweDQwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4MywgMHg4OSwgMHgwQywgMHgwMiwgMHhCNCwgMHgxOCwgMHhDMCwKKzB4NjUsIDB4MjAsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUYsIDB4MDAsCisweDZDLCAweDAyLCAweDMwLCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNCwgMHg0MCwgMHg5MywgMHgwMCwgMHg1QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5OSwKKzB4MTIsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MTksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDQxLCAweDdDLCAweDAyLCAweDc0LCAweDI5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHg1MCwgMHg3QywgMHg0MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweDk3LCAweDE1LAorMHg3RSwgMHg1MiwgMHhGMCwgMHgwOSwgMHhFMCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDgsIDB4NDEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MTAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFGLCAweDA4LCAweDRDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgxMSwgMHhGMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgyMCwgMHg0QywgMHgwNCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgwNiwKKzB4NDAsIDB4MTMsIDB4NDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4MEMsCisweDA4LCAweDE0LCAweDAxLCAweEM0LCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHg1QywgMHgwMCwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgyNywgMHhDMCwgMHgxNSwgMHgwMCwgMHg3RCwKKzB4MDAsIDB4QzYsIDB4MDUsIDB4NTAsIDB4MDUsIDB4NDAsIDB4NUYsIDB4MDQsIDB4NzMsIDB4MDIsIDB4QjQsIDB4MjksIDB4RDEsCisweDA3LCAweEMyLCAweDEyLCAweDAwLCAweDdELCAweDQ1LCAweEM0LCAweDE1LCAweEQwLCAweDA3LCAweEMwLCAweDE0LCAweDAwLAorMHg3MSwgMHgwMiwgMHhDQywgMHgwMSwgMHhEMCwgMHgxNSwgMHg0MCwgMHg5QiwgMHgwOCwgMHg3MSwgMHgwMiwgMHhENCwgMHgwRCwKKzB4NTAsIDB4RjcsIDB4NDAsIDB4NTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsCisweDMyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDIwLCAweENELCAweDAwLAorMHg2NCwgMHgwRiwgMHg1MCwgMHgwOCwgMHg0NCwgMHg3MywgMHgwMCwgMHhDMSwgMHgwNCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwNCwKKzB4NDAsIDB4MzIsIDB4MTAsIDB4Q0QsIDB4MDEsIDB4MDUsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzEsCisweDA2LCAweDY1LCAweDA3LCAweEQwLCAweDk4LCAweDQwLCAweDYzLCAweDAzLCAweDQxLCAweDA4LCAweDA0LCAweDIzLCAweDEwLAorMHgwQywgMHg0MCwgMHg1MiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwOCwKKzB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4NDMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4N0QsIDB4MDAsIDB4QTUsCisweDBCLCAweDUwLCAweDBFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQxLAorMHgzOCwgMHgwMSwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwQSwgMHhFMSwgMHg4MywKKzB4QTQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4NzEsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MTIsCisweDU4LCAweDA2LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDYwLCAweDAwLAorMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHhEMCwgMHgxRSwgMHhDMCwgMHg3OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhBNCwgMHgwNiwKKzB4NzAsIDB4MUUsIDB4QzAsIDB4NkIsIDB4NDAsIDB4RTMsIDB4MDEsIDB4QjAsIDB4MDUsIDB4RjAsIDB4MUUsIDB4NDAsIDB4N0EsCisweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDc4LCAweDA1LCAweEUzLCAweDAxLCAweEFDLAorMHgwNywgMHhGMSwgMHgxRSwgMHhDMCwgMHg2QiwgMHgwMCwgMHg2MywgMHg4MSwgMHg4NCwgMHgwNywgMHgzMCwgMHgxOCwgMHhDMCwKKzB4NDYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MDUsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDM1LCAweDEwLCAweDBGLCAweDAwLCAweDVDLCAweDAyLCAweEIwLAorMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwQywgMHhDMCwgMHgzNywgMHgwNCwKKzB4NUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4QjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDEsCisweEYwLCAweDBELCAweEMwLCAweDMzLCAweDIwLCAweDRGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDQxLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg0RCwgMHgwMCwgMHhFNywgMHgyMSwKKzB4Q0MsIDB4MDcsIDB4RjgsIDB4ODcsIDB4QzAsIDB4N0MsIDB4MDIsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsCisweEMwLCAweDdDLCAweDAwLCAweDczLCAweDAxLCAweEVDLCAweDA1LCAweDMyLCAweDFGLCAweEMwLCAweDdGLCAweDA0LCAweEYzLAorMHgwMSwgMHhGQywgMHgwNCwgMHhCMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgxMCwgMHhCMywgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwKKzB4MUUsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDUsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MTMsIDB4ODQsIDB4MEIsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDhELCAweDEwLCAweEUxLCAweDA4LCAweDg0LAorMHgyMSwgMHg3OCwgMHgwRSwgMHg0NCwgMHgzOCwgMHgwMCwgMHg3RCwgMHgwNiwgMHhDNSwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4NzEsIDB4NDAsIDB4ODQsIDB4RTAsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QTEsIDB4MTAsCisweEI0LCAweDAxLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAyLCAweEJCLCAweDE4LCAweDhDLCAweDBBLCAweEQwLCAweDhFLAorMHg0MCwgMHgxOSwgMHgwMiwgMHhBMSwgMHgwNiwgMHhBQywgMHgwMywgMHhEMCwgMHgyMCwgMHg0MCwgMHg1NywgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4RTUsIDB4MDAsIDB4ODUsIDB4MDEsCisweDUwLCAweDg3LCAweDQwLCAweDM4LCAweDhDLCAweEFELCAweDAwLCAweDg2LCAweDAxLCAweDkwLCAweDBGLCAweDQwLCAweDNBLAorMHg0MCwgMHhFMSwgMHgwMCwgMHhDNCwgMHgwMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhGNCwKKzB4MEEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4NjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDI5LCAweDQyLCAweDYxLCAweDBDLCAweDk0LCAweDQzLCAweEQwLCAweDAyLCAweDQwLCAweDIzLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg1MCwKKzB4MzEsIDB4NDAsIDB4NzAsIDB4MDAsIDB4MUQsIDB4NDEsIDB4MDIsIDB4NDUsIDB4OTAsIDB4M0MsIDB4NTAsIDB4ODIsIDB4MDQsCisweDAxLCAweDEwLCAweDA0LCAweDA4LCAweDEwLCAweDJDLCAweDQyLCAweDc3LCAweDAxLCAweDAxLCAweDA1LCAweDMwLCAweDA0LAorMHgxMCwgMHhEMCwgMHg0MCwgMHhCMywgMHgwNCwgMHgwOSwgMHgwNSwgMHgwNiwgMHgzNCwgMHhEMCwgMHgxQywgMHg0MCwgMHg5MSwKKzB4MDAsIDB4ODEsIDB4MTMsIDB4MzQsIDB4MEUsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDgwLCAweDA1LCAweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAzLCAweDcwLCAweEU5LAorMHhDMCwgMHg3NCwgMHgwMCwgMHhERiwgMHgwNSwgMHg0QywgMHgwOSwgMHhCMCwgMHgwRCwgMHhDMCwgMHgxNiwgMHgwMCwgMHg5MywKKzB4MDEsIDB4NEMsIDB4MDcsIDB4MzQsIDB4N0MsIDB4NDAsIDB4QkYsIDB4MDAsIDB4MTMsIDB4MDMsIDB4M0MsIDB4MDMsIDB4MTAsCisweDIxLCAweEMwLCAweDNCLCAweDAwLCAweDUzLCAweDAzLCAweDRDLCAweDA4LCAweEYwLCAweDNELCAweEMwLCAweEI1LCAweDAyLAorMHg0MywgMHgxMSwgMHg1MCwgMHgwRCwgMHhGMCwgMHgwOSwgMHg0MCwgMHg3NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NDcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4ODMsIDB4NzAsIDB4MDksIDB4RDIsCisweDI3LCAweDAwLCAweERGLCAweDA0LCAweDdDLCAweDIxLCAweDcwLCAweDhELCAweEMwLCAweEI1LCAweDAyLCAweERGLCAweDA4LAorMHg3QywgMHg4QiwgMHhGMiwgMHgwRCwgMHhDMCwgMHgzNywgMHg0MiwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMywgMHg3MCwgMHgyOSwKKzB4QzAsIDB4NzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4NUMsIDB4MDIsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4RjcsIDB4NDAsIDB4NUYsCisweDQwLCAweDJDLCAweDBCLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwQiwgMHg0MCwgMHhFMywgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgzQywKKzB4MDAsIDB4RkIsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzEsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDksIDB4RkMsCisweDQwLCAweEYwLCAweDBGLCAweEMxLCAweDNDLCAweDAwLCAweDMzLCAweDA1LCAweEZDLCAweDAzLCAweEIwLCAweDQ3LCAweEMwLAorMHgzRCwgMHgwMCwgMHg3MywgMHgwMCwgMHhDQywgMHgyMCwgMHgzMCwgMHg5RiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhCMywgMHgwMCwKKzB4Q0MsIDB4NDMsIDB4MzIsIDB4MEIsIDB4QzQsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgxLCAweDIwLCAweEM2LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDBGLCAweEYwLCAweDExLCAweDYwLCAweDYxLCAweDAyLAorMHg5MSwgMHgwMiwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHg4NywgMHgwNCwgMHgxRCwgMHgwMCwgMHg1QywgMHgxRSwKKzB4RDEsIDB4MUQsIDB4NDAsIDB4MzQsIDB4MDgsIDB4MTEsIDB4MTIsIDB4NzQsIDB4MDAsIDB4MTAsIDB4NzEsIDB4NDAsIDB4MzQsCisweDAwLCAweDExLCAweDAyLCAweDRDLCAweDBDLCAweDEwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweDExLCAweDAxLCAweDQ0LAorMHgyRiwgMHgxNSwgMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4QTAsIDB4NDYsIDB4MDAsIDB4RDEsIDB4MDQsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MTksCisweDAwLCAweDA0LCAweDEwLCAweDEwLCAweDFELCAweDQ4LCAweDE3LCAweDEwLCAweDFELCAweDAwLCAweDc0LCAweDA1LCAweDUwLAorMHgxRCwgMHg0NCwgMHgzNCwgMHg0MCwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgzNiwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDksIDB4MDEsIDB4NjQsIDB4QzMsCisweDEwLCAweDE5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgwMCwgMHgxOCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyNiwgMHg4MCwgMHg0MSwgMHgwMCwKKzB4MDUsIDB4MDQsIDB4MTgsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MUQsCisweDQwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDc0LCAweDAxLCAweDE4LCAweDA4LCAweDUwLCAweDM2LCAweDAwLCAweDgxLAorMHgwMCwgMHgwNCwgMHgwMiwgMHgxNCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg4OSwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwKKzB4MDAsIDB4NDQsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDYsCisweDAwLCAweEQzLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDA1LCAweDUwLCAweDM3LCAweDAwLCAweDFCLCAweDAwLCAweDRDLAorMHgwMCwgMHgyMCwgMHgwRCwgMHhDMCwgMHgxMywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHg1MCwKKzB4MzgsIDB4MDAsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4NTMsIDB4MDAsCisweDRDLCAweDAxLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweDlCLCAweDIwLCAweDZDLCAweDgxLCAweDMwLCAweEE5LAorMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgwRiwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MDIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDBFLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDQwLCAweDlDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHg3OCwgMHgwMywgMHhDMCwgMHgzOSwgMHgwMCwgMHgzRSwgMHgwMCwgMHhEQywKKzB4ODAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4QTcsIDB4MDAsIDB4RkUsIDB4MDMsIDB4RjAsIDB4NEIsIDB4RTAsCisweDE3LCAweDIyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweERGLCAweDAwLCAweEIzLAorMHgwOCwgMHhGQywgMHgwNiwgMHg3MCwgMHg5RiwgMHhDOCwgMHg3RSwgMHgxMiwgMHhGMywgMHgwOSwgMHhFQywgMHgyNywgMHgxMSwKKzB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RTMsIDB4MDksIDB4REMsIDB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4NDAsCisweEYzLCAweDA5LCAweEJDLCAweDBGLCAweEY4LCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LCAweDlDLCAweDA3LAorMHhGMCwgMHgxRiwgMHhDMCwgMHg1QywgMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHgwNiwgMHhGMCwgMHgxQiwgMHhDOCwgMHgwRCwKKzB4MDgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4MjcsIDB4MDEsIDB4OTEsIDB4MjAsCisweDQ0LCAweDUzLCAweDEwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDE1LCAweDAwLCAweDUwLCAweDAwLCAweDUwLCAweDExLAorMHg0MCwgMHg0NCwgMHgwOCwgMHgxNSwgMHgwMCwgMHgwNCwgMHgxMCwgMHhEMiwgMHgwMSwgMHg0MSwgMHg0NSwgMHgwMCwgMHgxMSwKKzB4ODAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDIsIDB4MDMsIDB4MjUsIDB4MTEsIDB4MDQsIDB4NjQsIDB4MDQsIDB4RDEsCisweDFGLCAweDQ4LCAweDc0LCAweDQwLCAweDE1LCAweDgxLCAweDU0LCAweDAyLCAweEQyLCAweDA5LCAweDQyLCAweDBGLCAweDYwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzNywgMHgwMCwgMHhDMSwgMHg0NCwgMHgxNCwKKzB4MTMsIDB4NTAsIDB4NEQsIDB4NDgsIDB4MzcsIDB4MTEsIDB4RDEsIDB4ODQsIDB4NDYsIDB4MTMsIDB4MTAsIDB4MEMsIDB4NjIsCisweDMwLCAweDIwLCAweEM1LCAweDA0LCAweDE0LCAweDAzLCAweEQwLCAweDRELCAweDQwLCAweDMwLCAweDAwLCAweEM5LCAweDQ0LAorMHgxNCwgMHgxMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNiwgMHgxMCwgMHhENSwgMHgwMCwgMHgxNCwgMHgwMywgMHg1OCwgMHgwQywKKzB4NDAsIDB4MjEsIDB4MDAsIDB4MTUsIDB4MjAsIDB4MTQsIDB4MDAsIDB4RDgsIDB4MDAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDI1LCAweDEwLCAweEQxLCAweDIxLCAweDY0LCAweDA3LAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxNSwgMHgwMCwgMHg1NCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg3MCwgMHgwNCwKKzB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MTksIDB4MDAsIDB4NzQsCisweDAwLCAweEQwLCAweDAxLCAweDQyLCAweDA3LCAweDAwLCAweDExLCAweDAwLCAweDY0LCAweDAwLCAweEQwLCAweDBELCAweDAwLAorMHgyNSwgMHgwMCwgMHgxNSwgMHgwMSwgMHg1NCwgMHg0NCwgMHhEMCwgMHgxMSwgMHg0MSwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MTMsIDB4MDMsIDB4RDMsIDB4MzEsIDB4N0MsIDB4MTcsIDB4NzAsCisweDBDLCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM0LCAweDMwLAorMHhEMywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHgwMiwgMHgzNCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MjAsIDB4QzcsIDB4NDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MTUsCisweDAwLCAweDA2LCAweDAxLCAweDVDLCAweDBFLCAweEYwLCAweDM5LCAweEMwLCAweDA5LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyRCwgMHg0MCwgMHhERiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEMsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4NDAsIDB4M0IsCisweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweDA4LCAweDBGLCAweDAwLCAweDM3LCAweDAwLCAweEZDLCAweDAwLCAweEYwLAorMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhDQywgMHgwMCwgMHhEMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHg4MSwKKzB4QkIsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDA4LCAweEI1LCAweDAwLCAweERGLCAweDAwLCAweDRELCAweDAzLCAweDcwLCAweDhELCAweEMwLAorMHgzNywgMHgwMSwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMSwgMHhENywgMHgwMCwKKzB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsCisweEMyLCAweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDZDLCAweDEzLCAweEIwLCAweDBDLCAweEMwLCAweDI0LCAweDAxLCAweDlGLAorMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHg0OCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDAsCisweDA0LCAweDBCLCAweDAwLCAweDVDLCAweDAwLCAweEIwLCAweDAwLCAweDQwLCAweDgzLCAweDAwLCAweDFCLCAweDAwLCAweDZFLAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHhDMywgMHgwMCwgMHgxRCwgMHgwMCwgMHg1QywgMHgwMCwgMHgxMCwgMHgwMSwgMHhFOCwKKzB4MDMsIDB4MDAsIDB4MTEsIDB4ODAsIDB4NDQsIDB4NDAsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MjAsIDB4MDEsIDB4OUQsIDB4MDAsCisweDVDLCAweDAwLCAweEQwLCAweDExLCAweDQxLCAweDRGLCAweDA4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHgyMCwgMHgyMiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHhCMSwgMHgwMCwKKzB4QzUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDMsCisweDEwLCAweDBDLCAweDQ4LCAweDczLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDgzLCAweDkwLCAweDBDLCAweDQwLCAweDMwLAorMHgwMCwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwNywgMHg4MCwgMHgwQywgMHg0MCwgMHhFMywgMHgwMCwgMHg0RCwgMHgwNSwgMHgzNiwKKzB4MTIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDA4LCAweDZBLCAweDAwLCAweEVELCAweDA5LCAweDg2LCAweDA3LCAweDEwLCAweDEzLCAweDYwLCAweDRDLCAweDAwLCAweDJELAorMHgwMSwgMHhENCwgMHgwNCwgMHg5MCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgzOCwgMHgwMSwgMHhBNCwgMHgwNCwgMHgxQywKKzB4MTIsIDB4NDAsIDB4NEIsIDB4MDQsIDB4MkQsIDB4MDEsIDB4RDQsIDB4MDQsIDB4MDAsIDB4MTMsIDB4NDAsIDB4NDksIDB4MDAsCisweDIxLCAweDAxLCAweEM0LCAweDA0LCAweDUwLCAweDFDLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDExLCAweDk0LCAweDA3LAorMHhEMCwgMHg5QSwgMHg0MCwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwKKzB4MzIsIDB4MDIsIDB4MEQsIDB4MDgsIDB4NEMsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MTIsIDB4RDcsIDB4MDAsCisweDFDLCAweDAzLCAweDMwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEM3LCAweDAwLCAweDA0LCAweDAzLCAweDMwLCAweDBDLAorMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwOCwgMHgzNCwgMHgxMywgMHhCMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMiwgMHhENywKKzB4MDAsIDB4MkMsIDB4MDMsIDB4QjAsIDB4MEMsIDB4RDAsIDB4MjMsIDB4MDIsIDB4Q0YsIDB4MjAsIDB4M0MsIDB4NDIsIDB4RjAsCisweDhDLCAweEMwLCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDJELAorMHgwMCwgMHg3RiwgMHgwOCwgMHhGOCwgMHgwMywgMHhFMCwgMHgwMiwgMHg4MCwgMHgwOSwgMHgwMCwgMHgzQiwgMHgwMCwgMHhBOCwKKzB4MjAsIDB4RjIsIDB4ODEsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzgsCisweDA3LCAweDAwLCAweDNGLCAweDI4LCAweDdDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDQwLAorMHg1NCwgMHgyNCwgMHgyMCwgMHg5RCwgMHhDMCwgMHgyQywgMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwKKzB4QzIsIDB4MEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDM1LCAweDAwLCAweERFLCAweDAwLCAweDdDLCAweDA3LAorMHgzMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgxRCwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsCisweDAzLCAweEIwLCAweDBELCAweEM0LCAweDI0LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDgzLCAweDMwLCAweDBELCAweEMyLAorMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgyOSwgMHgwMCwgMHhGRCwKKzB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4NTAsCisweDAyLCAweDAwLCAweDA4LCAweDg4LCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDUwLCAweDAyLCAweDQwLCAweDA5LCAweDAwLAorMHgyRiwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0OCwgMHgwQiwgMHgwMCwgMHgyRCwgMHgyMCwgMHhCNiwgMHgwMCwKKzB4MTgsIDB4NEUsIDB4NDAsIDB4MzgsIDB4MjAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4NDAsIDB4NEMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweDZELCAweDAwLAorMHg4NCwgMHg0NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHg4MSwgMHhGNCwgMHgwNywgMHgxOCwgMHgxRiwKKzB4NDgsIDB4NzgsIDB4ODAsIDB4RUQsIDB4MDEsIDB4RjYsIDB4MDcsIDB4MTMsIDB4MUYsIDB4NDQsIDB4N0IsIDB4ODAsIDB4RUQsCisweDAxLCAweEI0LCAweDg3LCAweDU4LCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEY0LCAweDA3LCAweEQ4LAorMHhERSwgMHg0MCwgMHg2QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHgxMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MjMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MDQsCisweDA1LCAweEQwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDAwLCAweDQwLAorMHgwMCwgMHhBMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywgMHgxMCwgMHgwNSwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MjAsIDB4MzQsIDB4MDAsIDB4NTEsIDB4MEMsCisweDUwLCAweDIyLCAweDAwLCAweDhELCAweDBGLCAweDc0LCAweDBGLCAweDFBLCAweDZELCAweDQwLCAweDU4LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgxMCwgMHhDQywgMHgwRCwKKzB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsIDB4RDAsIDB4MTQsCisweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVELCAweDAwLCAweDdDLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHgzQywgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwKKzB4MUEsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MEQsIDB4MzQsIDB4MDcsIDB4RDAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweDIwLCAweDdDLCAweDQwLCAweEYyLAorMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgyMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHg4RiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MDAsIDB4M0QsIDB4MDAsIDB4RTQsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDIwLCAweEZDLCAweDA4LCAweDkwLCAweDAxLCAweEMwLCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHhGMCwgMHg4MSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhFNywgMHg4MCwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzNCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MDYsIDB4NzIsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsCisweDkzLCAweDA1LCAweDdDLCAweDQyLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyOCwgMHg2NiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDgsIDB4MTksIDB4NDAsIDB4RTcsIDB4MjAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDA0LCAweDk3LCAweDIwLCAweDQ0LCAweDAyLCAweDMwLCAweDA5LAorMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgyMCwgMHg3MCwgMHgxNiwgMHgzMCwgMHgwQiwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4OTYsIDB4NTAsIDB4MzksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweEEwLCAweDI0LCAweDAyLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDg5LCAweDQwLCAweDZGLAorMHgwMCwgMHhCRCwgMHgwMCwgMHhENCwgMHgwMiwgMHhEMCwgMHhBQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwKKzB4MDIsIDB4MTAsIDB4MEIsIDB4NjAsIDB4MkYsIDB4MDAsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsCisweDJGLCAweDgwLCAweEI5LCAweDAwLCAweEY0LCAweDEyLCAweDEwLCAweDY5LCAweDYwLCAweDM2LCAweDAwLCAweEQ5LCAweDAyLAorMHg3NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg0MSwgMHg3MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MjgsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MUMsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MkEsIDB4NDAsIDB4RUIsIDB4MDAsCisweEJELCAweDA4LCAweDg0LCAweDIyLCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDAwLCAweEIwLCAweDIyLAorMHgxMCwgMHg4QSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBNSwgMHg4OCwgMHg4NCwgMHgyMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgyRiwKKzB4MDIsIDB4QTEsIDB4MDgsIDB4QjQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NjQsIDB4MjQsIDB4MDgsIDB4ODksIDB4MDAsIDB4MzQsCisweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwNiwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDIsIDB4NUMsIDB4MDgsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4OEEsIDB4N0MsIDB4MDgsIDB4MzQsCisweDIxLCAweEMwLCAweDA3LCAweDAwLCAweDFELCAweDAyLCAweDQ0LCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLAorMHgxQiwgMHgwMiwgMHhGQywgMHgwMCwgMHg3MCwgMHgxMSwgMHhDMCwgMHgwNiwgMHg0MCwgMHgxQiwgMHgwMCwgMHg3QywgMHgyOCwKKzB4MzIsIDB4QTEsIDB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsCisweDZGLCAweDAwLCAweEJGLCAweDA0LCAweEZDLCAweDEyLCAweEYwLCAweDE5LCAweDQwLCAweDY3LCAweDAwLCAweDlGLCAweDQ0LAorMHgzQywgMHgxMiwgMHhGMiwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0OCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4ODQsIDB4N0MsIDB4MTIsIDB4NzAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDEsIDB4OUYsCisweDg0LCAweDdDLCAweDAyLCAweDcwLCAweDI4LCAweEMwLCAweDJELCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwKKzB4MDAsIDB4OTMsIDB4MkMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QUIsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI4LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEM4LAorMHgyRCwgMHgwMCwgMHg5MywgMHgwOCwgMHg1QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMCwKKzB4REMsIDB4MDIsIDB4QjAsIDB4MUIsIDB4QzMsIDB4MkIsIDB4MDAsIDB4QkYsIDB4NjAsIDB4RkMsIDB4ODIsIDB4MzAsIDB4MEIsCisweEMwLCAweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDU0LCAweDQ1LAorMHg1MSwgMHg0QywgMHg3NCwgMHg0MCwgMHhEMCwgMHg1MSwgMHg0MSwgMHg0NywgMHgwMSwgMHgxMSwgMHgxNCwgMHg3NCwgMHgxMCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDUsIDB4NzQsIDB4ODAsIDB4RDIsIDB4NDEsIDB4NDEsIDB4MDQsCisweDAwLCAweDExLCAweDA0LCAweDRDLCAweDQwLCAweDEwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFELCAweDE0LCAweDc0LAorMHgwMCwgMHgxMCwgMHgyMSwgMHg0MiwgMHgwNywgMHgwOCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg1MCwgMHgwNSwgMHg0MCwKKzB4NzMsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjEsIDB4MDAsIDB4ODEsCisweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDg1LCAweDA0LCAweDM0LCAweDUyLCAweEQwLAorMHgwOSwgMHg2MiwgMHgyMSwgMHgwMCwgMHg4RCwgMHgxMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyNSwgMHgwMCwKKzB4OTEsIDB4MDQsIDB4NTQsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MDQsIDB4MTQsIDB4MDIsCisweEQyLCAweDA4LCAweDQ4LCAweDIzLCAweDIwLCAweDhELCAweDIwLCAweDc0LCAweDAyLCAweDE4LCAweDA4LCAweDQwLCAweDRCLAorMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5MSwgMHgwMCwKKzB4NzQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksCisweDAwLCAweDI1LCAweDgwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLAorMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzYsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDZGLCAweDAwLCAweDkzLCAweDAyLCAweDc4LAorMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDgsIDB4MjEsIDB4NDAsIDB4ODEsIDB4MDAsCisweDU0LCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDFDLCAweDAyLCAweEIwLCAweDA5LAorMHhDMCwgMHhFNywgMHg4MSwgMHg5RiwgMHgwMiwgMHg3OCwgMHg0MiwgMHgzMiwgMHgyOSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4QTUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MjYsCisweEYxLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLCAweDI2LAorMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4QkMsIDB4MDksIDB4QzAsCisweDY3LCAweDAxLCAweDlGLCAweDA5LCAweDdDLCAweDAyLCAweEYxLCAweDQ5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0UsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsCisweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEUyLCAweDA3LCAweDA4LCAweDFCLCAweDAwLCAweDRDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHg0MSwgMHhDOCwgMHg4NywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDEsIDB4ODcsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDU0LCAweDgwLCAweDVELCAweDAwLCAweDQ0LCAweDAxLCAweDcwLCAweDQ1LAorMHg0MCwgMHgxQywgMHgwMCwgMHg1QiwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHgwNywgMHg2MCwgMHg5QywgMHgwMCwgMHg1MSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4RDgsIDB4MDUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NTUsIDB4MDAsIDB4MUUsIDB4MDEsIDB4NzIsCisweDA1LCAweDQwLCAweDE3LCAweDA4LCAweDUzLCAweDAwLCAweENDLCAweDBELCAweEMwLCAweDA3LCAweEMwLCAweERELCAweDAxLAorMHg3MCwgMHgwQSwgMHhGMCwgMHgzNSwgMHgxMCwgMHgxNywgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzYsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MTYsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsCisweDYyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDU4LCAweDk4LCAweDQ4LCAweEYzLCAweDA2LCAweENELCAweDAwLAorMHgzNCwgMHgwMywgMHhEMiwgMHgwRCwgMHg0MCwgMHhCMywgMHgwMSwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHg1MCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4ODAsIDB4QzksIDB4MDAsIDB4MTQsIDB4MEEsIDB4OTAsIDB4MzQsIDB4NDAsIDB4RTMsIDB4MDEsIDB4ODEsCisweDAyLCAweDc0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHg4OCwgMHhCOCwgMHgxMSwgMHhFRCwgMHhBNSwgMHg5NiwgMHgxMywgMHg1MCwgMHg1RSwgMHg0MCwgMHg5QywKKzB4MDEsIDB4RTksIDB4MDgsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEIsIDB4NDAsIDB4NUYsIDB4MDAsIDB4RTksIDB4MDQsIDB4QjQsCisweDEzLCAweEQ4LCAweDBFLCAweDQwLCAweDNELCAweDAwLCAweEY1LCAweDAwLCAweDk2LCAweDEzLCAweDUwLCAweDBFLCAweDQwLAorMHg3RiwgMHgwMywgMHhFMSwgMHgwNSwgMHg5MCwgMHgwQiwgMHhEMCwgMHgyNiwgMHg2MCwgMHg2RCwgMHgwMCwgMHhFMSwgMHg4MiwKKzB4QjQsIDB4MDIsIDB4OTAsIDB4MUUsIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweDEwLCAweEY4LCAweDAwLCAweEZELCAweDA3LCAweDlDLCAweDE3LCAweDcwLCAweDFGLCAweEMwLCAweEZBLCAweDAxLAorMHhFMywgMHgwMSwgMHhCNCwgMHgxNywgMHg3MCwgMHgxRSwgMHg1MCwgMHg2QiwgMHgwMCwgMHhFRCwgMHgwNSwgMHhCQywgMHg0NywKKzB4RDAsIDB4OUUsIDB4NjgsIDB4N0IsIDB4MDgsIDB4RUIsIDB4MDEsIDB4ODQsIDB4MTcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsCisweDAwLCAweEZCLCAweDA5LCAweDlDLCAweDA3LCAweEYwLCAweDFFLCAweDgwLCAweDZCLCAweDAwLCAweEU2LCAweDIxLCAweEZDLAorMHgwNiwgMHhCMCwgMHgxQiwgMHhDMCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4NzAsIDB4ODksIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDI0LCAweDE4LCAweEQ3LCAweDAwLCAweDdDLCAweEIzLCAweEYwLAorMHg0RCwgMHhDMiwgMHgyMywgMHgwMCwgMHhDNywgMHg5MiwgMHg3QywgMHg0QiwgMHg3MCwgMHgwRCwgMHhDMCwgMHhCMywgMHgwNCwKKzB4REIsIDB4MDgsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4ODAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsCisweDcwLCAweDAxLCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHg3OSwgMHgwMCwgMHhFMywgMHgwNCwgMHhDRCwgMHg1MywgMHg3MCwgMHgxQiwgMHhDMCwgMHg3RiwgMHg0MCwgMHhGMiwgMHgwMSwKKzB4REMsIDB4NjcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4MDAsIDB4RUYsIDB4MTksIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsCisweDg1LCAweDdGLCAweDAwLCAweEYzLCAweDExLCAweEZDLCAweDY3LCAweDcwLCAweDFGLCAweEMwLCAweDdELCAweDAwLCAweEY3LAorMHgwMSwgMHhDRCwgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHhDMSwgMHhGNCwgMHgwNywgMHhGMiwKKzB4MUIsIDB4QzQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksCisweDAwLCAweEUxLCAweDAwLCAweEFDLCAweDAzLCAweDEwLCAweDBBLCAweDQwLCAweDFCLCAweDAwLCAweEUxLCAweDA4LCAweERDLAorMHhDMywgMHgxMSwgMHgwQSwgMHhDMCwgMHgwOSwgMHgwOSwgMHhFRCwgMHgwMCwgMHg5NCwgMHgyMywgMHg1MCwgMHgwRSwgMHg0MiwKKzB4MUIsIDB4MDAsIDB4RTEsIDB4MDQsIDB4REMsIDB4MDMsIDB4MTAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsCisweDg0LCAweDJCLCAweEQwLCAweDg2LCAweDQwLCAweDJCLCAweDA2LCAweDZELCAweDA4LCAweEI0LCAweDExLCAweEQwLCAweDRGLAorMHhDMCwgMHg1NiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyRCwgMHgwMCwKKzB4RjEsIDB4MDAsIDB4QzQsIDB4MjMsIDB4NTAsIDB4OEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweDU5LCAweDhBLCAweDQxLCAweDJBLCAweDMwLCAweEZELCAweDEwLCAweEU2LCAweDAzLCAweDkwLCAweDBFLCAweDQwLCAweDNGLAorMHgwNiwgMHhFMSwgMHgyMCwgMHhBNiwgMHgwMywgMHg1MSwgMHgwRiwgMHg0MCwgMHgzOSwgMHgwMiwgMHhFRCwgMHgwMCwgMHhBNCwKKzB4NDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDIsIDB4MEEsIDB4NDAsCisweDAyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDI1LCAweDAyLCAweEMxLAorMHgwOSwgMHgyNCwgMHgwNywgMHgxMCwgMHgwOCwgMHg2MCwgMHg1MywgMHgwRSwgMHhDMSwgMHgwQSwgMHgzNCwgMHgwNywgMHgxMiwKKzB4MDgsIDB4NDEsIDB4QTMsIDB4MjAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MUYsIDB4NTAsIDB4M0MsIDB4NDAsIDB4NDMsIDB4MDAsCisweEQxLCAweDBCLCAweDE0LCAweDM3LCAweDEwLCAweDNDLCAweDQwLCAweDc0LCAweDAwLCAweENELCAweDA1LCAweDI0LCAweDE3LAorMHhEMSwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHg0RCwgMHgyNiwgMHgzNCwgMHgxOCwgMHhEMCwgMHgwMCwgMHg0MiwgMHgxMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MjUsIDB4NDAsIDB4RjMsIDB4MDAsCisweENELCAweDFCLCAweDcwLCAweDJELCAweEMwLCAweEIzLCAweDAwLCAweEYzLCAweDhBLCAweEZDLCAweDBCLCAweDcwLCAweDE4LAorMHhDMCwgMHgyNiwgMHgwNCwgMHhGRSwgMHgwMSwgMHhFQywgMHg0RiwgMHhCMCwgMHg1RiwgMHhDMCwgMHgyNywgMHg0MCwgMHhGMywKKzB4MDAsIDB4RkMsIDB4MEIsIDB4NzAsIDB4OUMsIDB4QzAsIDB4QkQsIDB4MDIsIDB4RTcsIDB4MDYsIDB4NkMsIDB4MEYsIDB4RDAsCisweDA1LCAweEMwLCAweEU3LCAweDAwLCAweDhELCAweDA2LCAweDdFLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDU2LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwNCwgMHhERiwgMHgwMCwgMHg3QywKKzB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MjksIDB4QzAsCisweDA1LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEE3LCAweDg4LCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHg3MiwgMHg4RCwgMHhDMCwgMHgzNywgMHg4MiwgMHhERiwgMHgwMCwgMHg1QywgMHgwQiwgMHhCMCwgMHgyNSwKKzB4ODgsIDB4QTcsIDB4MDksIDB4OUYsIDB4MDIsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDUsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDMSwgMHg1RiwgMHgwOCwgMHhGMywgMHgwMCwgMHhGQywgMHg0MywgMHhGMCwgMHgwMywgMHhDMiwgMHgyQywKKzB4MEMsIDB4RkYsIDB4MTAsIDB4RjgsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MEQsIDB4MDQsIDB4RkIsIDB4OTAsIDB4Q0MsCisweDAzLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEY3LCAweDQwLCAweEU4LCAweDAzLCAweEQwLCAweDI3LCAweEMwLAorMHg2RiwgMHgwMCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgxMywgMHgyMiwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDgsIDB4RDEsIDB4MDAsIDB4NzQsIDB4ODMsIDB4RDAsCisweDA5LCAweDYwLCAweDE2LCAweDBBLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQyLCAweDE1LCAweDQwLCAweDY0LCAweDAwLAorMHhERCwgMHgwMCwgMHg1QywgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHhDNCwgMHgwNCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4RDgsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDcsIDB4QzAsIDB4MjUsIDB4NDIsIDB4RTMsCisweEMwLCAweDEzLCAweDA1LCAweDQ0LCAweDRFLCAweEQwLCAweDMxLCAweDQwLCAweDE3LCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMiwgMHg2NCwgMHgyMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwOSwKKzB4NDgsIDB4MzcsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MTksIDB4NDEsIDB4NDUsIDB4MjAsIDB4REQsCisweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDY3LCAweDAwLCAweERELCAweDAwLCAweDY0LCAweDAzLCAweEQwLAorMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhENSwgMHgwMCwgMHg3NiwgMHgwNywgMHhEMCwgMHgwNSwgMHg0MCwgMHhCNywgMHgwMSwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4MDQsIDB4RDIsIDB4MzksIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHgzMywgMHgwOCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHg0MCwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQwLCAweDMwLCAweDAwLCAweEQxLCAweDAwLCAweDE2LCAweDgzLCAweEQwLCAweDA0LCAweDQwLCAweDEzLCAweDEwLCAweDAxLAorMHgwMCwgMHgwNSwgMHgwMCwgMHhEMCwgMHgwOCwgMHg2MCwgMHg0MywgMHhBMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QjAsIDB4MjYsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDgsIDB4MTMsCisweDQwLCAweEQzLCAweDgwLCAweDdDLCAweDAzLCAweEYxLCAweDAxLCAweEQwLCAweDA0LCAweDAwLCAweERFLCAweDAwLCAweEZDLAorMHgwMywgMHg3MiwgMHgwRiwgMHhDNCwgMHgwNSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwKKzB4M0UsIDB4MDAsIDB4RTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzQsIDB4MzcsIDB4ODgsIDB4MTEsIDB4MDAsCisweDRDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDAxLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhBOCwgMHgyRiwgMHgxMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRSwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MEUsIDB4MDAsIDB4RkYsIDB4MDAsIDB4OUMsIDB4MDMsCisweEYwLCAweDBGLCAweEM4LCAweDBCLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBFLCAweDQwLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMiwgMHgxRiwgMHgwOCwgMHgzNywgMHgwMCwgMHhGQywKKzB4MDAsIDB4RTEsIDB4MDMsIDB4QzAsIDB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEEwLCAweDJGLCAweDAwLCAweDNCLCAweDE0LCAweEJDLCAweDBGLCAweDM0LCAweDFGLCAweEMwLCAweDdFLCAweDAyLCAweEZGLAorMHgwOSwgMHhGQywgMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGMywgMHgwOSwgMHg4QywgMHgyNywgMHg3MiwKKzB4MUYsIDB4QzQsIDB4N0UsIDB4MDIsIDB4RkIsIDB4MjksIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MjAsCisweEYzLCAweDA5LCAweENDLCAweDI3LCAweDMwLCAweDgzLCAweEMyLCAweDdDLCAweDAyLCAweEYzLCAweDI0LCAweEVFLCAweDFBLAorMHgzMCwgMHg0QiwgMHhDNCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwKKzB4MjcsIDB4MjAsIDB4MDEsIDB4MDIsIDB4NzQsIDB4MTMsIDB4MTgsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4ODAsCisweDc0LCAweDA0LCAweDQwLCAweDExLCAweDQwLCAweDAwLCAweDA0LCAweDExLCAweDAwLCAweDQ0LCAweDEwLCAweDEwLCAweDQwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwNCwgMHg0NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MSwgMHg0NCwgMHgwMCwgMHgxMywKKzB4NDQsIDB4NDQsIDB4MTAsIDB4MzAsIDB4NjUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RjUsIDB4MEIsIDB4NkUsIDB4MTAsIDB4MTAsCisweDExLCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAyLAorMHg0MCwgMHgwMSwgMHg0MCwgMHgzNiwgMHgwMywgMHg1MCwgMHgwRCwgMHg1MCwgMHgzMCwgMHgwMSwgMHhDRCwgMHg4NCwgMHgzNCwKKzB4MDMsIDB4ODEsIDB4MEQsIDB4NTAsIDB4MzAsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MTMsIDB4RDAsIDB4MEMsIDB4NDEsCisweDMwLCAweDAxLCAweEMxLCAweDA0LCAweDI0LCAweDAzLCAweEQwLCAweDRELCAweDQwLCAweDM0LCAweDAwLCAweEM5LCAweDA0LAorMHgyNCwgMHgwMywgMHgxMCwgMHgyOCwgMHg0MCwgMHgzMSwgMHg4MSwgMHhDRCwgMHgyMCwgMHgwNCwgMHgxQSwgMHgxMSwgMHg4OCwKKzB4NDAsIDB4NDUsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MTUsIDB4MDAsCisweDExLCAweDIyLCAweDM0LCAweDAzLCAweDUwLCAweDAxLCAweDQ0LCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDgwLAorMHg5MCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4MDAsIDB4RDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjQsCisweDAwLCAweDEwLCAweDRELCAweDQyLCAweDM2LCAweDA4LCAweERELCAweDAwLCAweDQ3LCAweDA0LCAweDEwLCAweDE5LCAweDQxLAorMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHg2NywgMHg0MCwgMHgxQiwKKzB4MDEsIDB4N0MsIDB4MjcsIDB4NTAsIDB4MEMsIDB4QzgsIDB4MzQsIDB4MjAsIDB4REYsIDB4ODAsIDB4M0MsIDB4MDMsIDB4QjQsCisweDBDLCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLAorMHhEMywgMHgwMCwgMHg2QywgMHgwMywgMHhGMiwgMHgwQywgMHg4MCwgMHgzMCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg2RCwgMHgwMywKKzB4MzQsIDB4MDEsIDB4RDEsIDB4MzUsIDB4MDAsIDB4REYsIDB4NDAsIDB4NDQsIDB4MDQsIDB4MjIsIDB4MzEsIDB4QzAsIDB4MDEsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDY5LCAweDAxLCAweDNGLCAweDAzLAorMHhGOCwgMHgwMywgMHhCMCwgMHgwMywgMHg4MCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzAsIDB4MDMsIDB4RDAsIDB4MEQsIDB4MDAsIDB4MzcsCisweDAwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYxLAorMHgwNywgMHhDMCwgMHgzRCwgMHgyMCwgMHhGNywgMHgwMCwgMHhGNCwgMHgwMCwgMHhGNSwgMHgwMywgMHhDMywgMHgxRSwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4ODEsIDB4MzcsIDB4MEEsIDB4NEQsCisweDAzLCAweDMwLCAweDBELCAweEMwLCAweDc3LCAweDQxLCAweEQzLCAweDA1LCAweDVDLCAweDAzLCAweDMwLCAweDhELCAweEMwLAorMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMSwKKzB4NEMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDIsIDB4RDcsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksCisweEMwLCAweDM3LCAweDAwLCAweERGLCAweDEwLCAweDc0LCAweDhBLCAweDMzLCAweDIxLCAweEM0LCAweDBCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhCNCwgMHgwMCwgMHgxMSwgMHg4MSwgMHg0NCwgMHgwMywKKzB4MTAsIDB4NDEsIDB4NDQsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDAsIDB4QjAsIDB4MTEsIDB4NDAsIDB4MDQsCisweDAwLCAweDExLCAweDIwLCAweDc0LCAweDAwLCAweDE0LCAweDAxLCAweDQ4LCAweDA0LCAweDAwLCAweDEwLCAweDAxLCAweDQ0LAorMHg0NCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwOCwgMHgxMSwgMHgwMSwgMHg2NCwgMHgwMCwgMHhEMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MTAsIDB4RTAsIDB4MTMsIDB4MzQsIDB4MDQsIDB4MTAsIDB4MzAsIDB4MDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDAwLCAweDQxLCAweDAwLCAweDI1LCAweDAzLCAweDUwLAorMHgxQywgMHg0MCwgMHhCMywgMHgwMCwgMHhDOSwgMHgwMiwgMHgzNCwgMHg0MywgMHg5MCwgMHgwQywgMHg0MSwgMHgzNSwgMHg4MCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsCisweDUwLCAweDhDLCAweDQwLCAweDcxLCAweDgwLCAweEM5LCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDM2LAorMHgwOCwgMHhDNCwgMHgwMiwgMHgzNCwgMHgwMiwgMHg1NCwgMHgyOCwgMHgwMiwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4NzgsIDB4NDAsIDB4NjEsIDB4MDksIDB4RTQsIDB4MDcsIDB4MTAsIDB4MTIsCisweDQwLCAweDRCLCAweDAwLCAweDI5LCAweDA5LCAweEI0LCAweDI0LCAweDkwLCAweDkyLCAweDQwLCAweDQ4LCAweDAwLCAweDIxLAorMHgwMSwgMHhGNiwgMHgyNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0QSwgMHgwMCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMCwKKzB4MTMsIDB4NDAsIDB4NEQsIDB4MDgsIDB4MjksIDB4MDksIDB4QTYsIDB4MDQsIDB4QzAsIDB4MTIsIDB4NDAsIDB4N0IsIDB4MzAsCisweEU5LCAweDAxLCAweEI0LCAweDY2LCAweDUwLCAweDEyLCAweDQxLCAweDFCLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgwNCwgMHg0MCwgMHg0NSwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwgMHg4QywgMHhDMCwKKzB4MzMsIDB4MDAsIDB4Q0IsIDB4MDAsIDB4MUMsIDB4MjMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4OTAsIDB4QzMsIDB4MDAsCisweDNDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDMyLCAweDAwLCAweEQzLCAweDAwLCAweDM0LCAweDAzLCAweDcwLCAweDBDLAorMHhDMCwgMHgzMSwgMHgwMCwgMHhDRSwgMHg4MCwgMHgzRSwgMHgwMywgMHhGMCwgMHgwMCwgMHhDMCwgMHgzNywgMHgwMCwgMHhDNywKKzB4MDgsIDB4M0MsIDB4MjIsIDB4NzAsIDB4MDgsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEIwLCAweDFELCAweDAwLCAweDdGLCAweDAwLCAweERFLCAweDAzLCAweEYwLCAweDAzLCAweDYwLCAweDBGLAorMHgwMCwgMHgzNywgMHgwMCwgMHhCQywgMHgyMCwgMHhGMCwgMHgwMiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGNCwKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4RjAsIDB4MDIsIDB4QzAsCisweDBBLCAweDAwLCAweDM3LCAweDgwLCAweEVFLCAweDA0LCAweEYwLCAweDAzLCAweEMwLCAweDNELCAweDgyLCAweEY3LCAweDM4LAorMHhCQywgMHgyMiwgMHhCMCwgMHg4OSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4MzcsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4NDAsCisweEQzLCAweDAxLCAweDBELCAweDAzLCAweEIwLCAweDFDLCAweEQwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDA3LAorMHhCNCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHgwRCwgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDEsIDB4NkQsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4ODAsIDB4REYsIDB4MDQsIDB4M0MsCisweDAwLCAweDMwLCAweDE5LCAweEMwLCAweDU0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHg4OCwgMHgzOSwgMHgwMCwgMHgzMSwgMHgwMCwgMHg4NSwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgwRiwgMHgwMCwgMHgzMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4MTAsCisweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDNELCAweDAwLCAweEE0LCAweDAwLCAweDcwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLAorMHgzNywgMHgwMCwgMHg4QywgMHg4MCwgMHhEMCwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgxNCwgMHg5QywgMHgwMCwKKzB4MTQsIDB4MDMsIDB4QzAsIDB4NEEsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsCisweDc5LCAweDAwLCAweDI5LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDAxLAorMHg5NCwgMHgwNywgMHg5MCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsCisweDAxLCAweDg0LCAweDg3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDg1LCAweDk0LCAweDA2LCAweDU1LAorMHgxQiwgMHg0MCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHg3NywKKzB4MDIsIDB4OTEsIDB4MTAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDM0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgyNCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg0MCwgMHgwMywgMHgxMCwgMHgwNSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4RDAsIDB4RUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MEIsIDB4NTAsIDB4OEMsCisweDQwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDlELCAweDAwLAorMHg3QiwgMHg4NywgMHg2QywgMHg0MSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHg1QywgMHgwMSwKKzB4QjQsIDB4MDUsIDB4QzgsIDB4MTQsIDB4MTAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzQsIDB4MTcsCisweDAwLCAweDVGLCAweDAwLCAweDQ0LCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLAorMHgwMSwgMHg3MCwgMHgzNywgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg5RSwgMHgyMSwgMHg1MCwgMHhCNywgMHg0MCwKKzB4NUQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDQwLCAweEU4LCAweDAwLCAweDcwLAorMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgyMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzcsIDB4MjAsIDB4REMsIDB4MDAsCisweEYwLCAweDAxLCAweEUwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDVFLCAweDgwLCAweDkwLCAweDAxLCAweDgwLCAweDRBLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNiwgMHgwMiwgMHg5MywgMHgwMCwKKzB4NUMsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MTYsIDB4MzAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwKKzB4MDksIDB4QzAsIDB4MjQsIDB4MTAsIDB4OUYsIDB4ODAsIDB4N0UsIDB4MjYsIDB4MzAsIDB4ODksIDB4QzIsIDB4NDMsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY2LCAweDAwLCAweDkxLCAweDIwLCAweDQ0LAorMHgwMiwgMHg5MCwgMHgxOSwgMHg0NCwgMHhBNywgMHgwMCwgMHg5MSwgMHgwMiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NTAsIDB4MjAsIDB4NDAsIDB4OTEsIDB4MDIsCisweDc0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDI0LCAweDAwLCAweDlGLCAweDAyLCAweDM0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwNiwgMHgxNCwgMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLCAweDJGLAorMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHg4MiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMCwgMHhCMSwgMHgwMCwgMHhGNCwKKzB4MjIsIDB4RDAsIDB4NEIsIDB4NDAsIDB4MkUsIDB4MDEsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsCisweDI0LCAweDAwLCAweDlELCAweDBBLCAweDU0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHg0MSwgMHg4MSwgMHgwNCwgMHgwNSwgMHgwMiwgMHg5MCwKKzB4MEEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QTEsIDB4MDEsIDB4RjQsIDB4MDIsIDB4MTUsIDB4MEUsIDB4NDIsIDB4MkIsIDB4MDAsCisweEFELCAweDAwLCAweEI0LCAweDgyLCAweEQwLCAweDBCLCAweDQwLCAweDJDLCAweDAwLCAweEExLCAweDAxLCAweEI2LCAweDAyLAorMHhEMCwgMHgwQSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhGNCwgMHgwMiwgMHgxNCwgMHg0OCwgMHg0MCwgMHgyMCwKKzB4MDIsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NEMsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDgyLCAweDAyLCAweDEzLCAweDBBLCAweDVDLCAweDI4LCAweEYwLCAweDAxLAorMHhDMCwgMHg4NywgMHg0MiwgMHgxMywgMHgwQSwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwKKzB4MEEsIDB4N0MsIDB4MjgsIDB4RDAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsCisweEExLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDBBLCAweEZDLCAweDI4LCAweDMwLCAweEExLCAweEQwLCAweDg0LCAweDEwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4M0YsIDB4MDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MjEsIDB4OUYsCisweDA4LCAweEZDLCAweDIzLCAweEY4LCAweDhCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwNSwgMHhBMywgMHg4QywgMHg1QywgMHgwMiwgMHgzNSwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MDIsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MEIsIDB4RTAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEQsCisweDIyLCAweEYxLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHgyRSwgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHhDOSwgMHhFMiwgMHgyNCwgMHg4MCwgMHhCRiwgMHhBMCwKKzB4QzgsIDB4ODMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweDA4LCAweDAzLCAweDAxLCAweDExLCAweDBDLCAweDQ1LCAweDQwLCAweDEwLCAweDAxLCAweDQwLCAweDAzLCAweDAwLAorMHgxRCwgMHgxNCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwNCwgMHgxRCwgMHgxMCwgMHg0NCwgMHgwMCwKKzB4RDAsIDB4NDEsIDB4NDEsIDB4MDQsIDB4MDEsIDB4MEQsIDB4MDQsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDEsIDB4MDQsCisweDEwLCAweDBELCAweDU0LCAweDc0LCAweDEwLCAweDUwLCAweEMxLCAweDUwLCAweDA0LCAweDI0LCAweDFELCAweDAwLCAweDQ1LAorMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4MjMsIDB4MDUsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsCisweDA0LCAweDM0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDAwLCAweDE0LCAweDAyLCAweEQwLAorMHg0OSwgMHg1MCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwKKzB4OEQsIDB4MDQsIDB4MzQsIDB4NTIsIDB4NTAsIDB4NTgsIDB4NDAsIDB4MjEsIDB4MDEsIDB4OEQsIDB4QTgsIDB4MDQsIDB4ODIsCisweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LAorMHgyNSwgMHg0MCwgMHg5MSwgMHgwMiwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTYsIDB4MDIsIDB4QzAsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweERELAorMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHgwNiwgMHgwMiwgMHgxNCwKKzB4NDksIDB4NDAsIDB4NjMsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4QTMsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHg1MCwgMHgwOCwgMHg1MCwgMHgyNSwgMHgwOCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDOCwKKzB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsCisweDdDLCAweDAyLCAweDM0LCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDgwLCAweDRDLCAweDBBLCAweDIwLCAweDA5LAorMHhDMSwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg2NSwgMHgwMiwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgxMCwgMHg2NCwKKzB4MDIsIDB4QjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MTAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzIsCisweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDg1LCAweDIwLCAweDEzLAorMHg0MCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHg5MCwgMHhFMiwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFGLCAweDA4LCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDEzLCAweDAwLCAweDRDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwOCwgMHgxRCwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MUMsIDB4MDIsIDB4NTEsIDB4ODEsCisweDQ1LCAweDAxLCAweDcwLCAweDE1LCAweDQwLCAweDVGLCAweDAxLCAweDcxLCAweDAwLCAweDg0LCAweDBELCAweDEwLCAweDk3LAorMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3MCwgMHgwMSwgMHg5OCwgMHgwNCwgMHg0MCwgMHgxNywgMHgwMCwgMHg3RCwKKzB4MDAsIDB4NDQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsIDB4NTcsIDB4MDAsIDB4N0IsIDB4MDMsIDB4NDQsIDB4MDEsIDB4QzAsCisweDA1LCAweDQwLCAweDE3LCAweDEwLCAweDdDLCAweDAyLCAweDc0LCAweDAxLCAweDEwLCAweDA3LCAweDAwLCAweDUwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg3MiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwKKzB4MDMsIDB4NTAsIDB4ODgsIDB4NDAsIDB4NzMsIDB4NDAsIDB4QzUsIDB4MDgsIDB4MDQsIDB4MEIsIDB4NTAsIDB4MkMsIDB4NDAsCisweDMzLCAweDAwLCAweERELCAweDAwLCAweDI0LCAweDAzLCAweEQyLCAweDBDLCAweDQ0LCAweDMzLCAweDAwLCAweENELCAweDEwLAorMHgyNSwgMHgwMiwgMHg1MCwgMHgxRCwgMHg0MCwgMHg2MywgMHgwMCwgMHhDMSwgMHgwQSwgMHgyNSwgMHgwMywgMHhEMCwgMHgwQywKKzB4NjAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MEIsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MEMsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDA0LCAweEIxLCAweDAyLCAweDg0LCAweDMzLAorMHg1MCwgMHgwRSwgMHg0MCwgMHg1QiwgMHgwMCwgMHg2NSwgMHgwMSwgMHg4NCwgMHg0MywgMHgxMCwgMHgwQSwgMHg0MSwgMHgzQiwKKzB4MDEsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MjMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4RUQsIDB4MDEsIDB4QTQsCisweDAzLCAweDUwLCAweDJFLCAweDQwLCAweDdCLCAweDAwLCAweEU5LCAweDIxLCAweEE2LCAweDAzLCAweEQwLCAweDRFLCAweDQwLAorMHgzQiwgMHgwMSwgMHg2OSwgMHgwMCwgMHhCNCwgMHgwMywgMHg1OCwgMHgxQywgMHg0NCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDIsIDB4RTMsIDB4MDEsIDB4OUMsIDB4MjcsIDB4NzEsCisweDFFLCAweEMwLCAweDdCLCAweDIwLCAweEY3LCAweDAxLCAweDhELCAweDA2LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLAorMHhFRCwgMHgwNSwgMHhBQywgMHg4NywgMHhEMCwgMHgzRSwgMHhDMCwgMHg3QiwgMHgwMiwgMHhFRiwgMHgwMSwgMHhBQywgMHgwNywKKzB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RTMsIDB4MDEsIDB4QUMsIDB4OTcsIDB4RjAsIDB4OUUsIDB4RTAsIDB4N0IsCisweDIwLCAweDZELCAweDIxLCAweEJDLCAweDA3LCAweDc0LCAweDFFLCAweEMyLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHhCRCwgMHg0MCwgMHg5RiwgMHgwNiwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4M0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDQsIDB4REYsCisweDAyLCAweDdDLCAweDBCLCAweEYwLCAweDJELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweDYwLAorMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwQiwgMHhGMCwgMHhBRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4MUYsIDB4MDAsIDB4M0MsIDB4NUIsIDB4QjAsIDB4MDksIDB4QzIsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDRGLCAweDQwLCAweEIzLCAweDAzLCAweENDLCAweDEzLCAweEYwLCAweDFFLCAweEMwLAorMHg2QywgMHgwMCwgMHhCRiwgMHgwMSwgMHg4QywgMHgwNiwgMHgzMCwgMHgxQiwgMHhDMCwgMHg3QiwgMHgwNCwgMHhGMywgMHgxMywKKzB4Q0MsIDB4MEYsIDB4MzAsIDB4M0YsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RkYsIDB4ODEsIDB4RkMsIDB4ODcsIDB4QjAsIDB4MUYsCisweEMwLCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDRGLCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDA0LCAweDdGLAorMHgwOSwgMHhDQywgMHgwNiwgMHgzMCwgMHg5RCwgMHhDMiwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4ODgsIDB4MDksIDB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDgsCisweDA0LCAweDJELCAweDQ0LCAweDg0LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEM0LAorMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgxMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4QUQsIDB4MTAsIDB4QkMsIDB4MjMsIDB4RDAsIDB4MEUsIDB4QzAsIDB4M0EsIDB4MDAsIDB4NkQsIDB4MDgsCisweDg0LCAweDAzLCAweDExLCAweDNFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwOCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg4MSwgMHgwMCwgMHg4NCwgMHg2MywgMHhEMCwgMHgwRiwgMHg0MCwgMHgyQSwgMHgwMCwKKzB4QUQsIDB4MDAsIDB4QzYsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4QkYsIDB4MDAsIDB4RjEsIDB4MDIsIDB4ODQsIDB4MjMsCisweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDZELCAweDA4LCAweEY0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMiwgMHg2RCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzOCwgMHgwMiwgMHhDRCwgMHg0OCwgMHg4NiwKKzB4MDMsIDB4NTAsIDB4OEUsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDI4LCAweDEzLCAweDAwLCAweDgxLCAweDQyLCAweDA2LCAweDA3LCAweEQwLCAweDRDLCAweDQwLCAweDQyLCAweDAxLCAweDBELAorMHgwRCwgMHgwNCwgMHgwRSwgMHgxMCwgMHg2OCwgMHg0MCwgMHg3MywgMHgwMCwgMHhDMSwgMHgwMSwgMHgwNCwgMHg0MywgMHgxMCwKKzB4MUMsIDB4NDEsIDB4MzMsIDB4MDQsIDB4MEQsIDB4MDUsIDB4MzQsIDB4NDMsIDB4MTgsIDB4MzgsIDB4NDAsIDB4NzMsIDB4MDAsCisweDFELCAweDA1LCAweDE2LCAweDJCLCAweEQxLCAweDBDLCAweDUwLCAweDMwLCAweDA4LCAweDBELCAweDAwLCAweDQwLCAweDBCLAorMHg1OCwgMHgyOCwgMHg0MSwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwKKzB4MjEsIDB4MTEsIDB4RDEsIDB4MDIsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MkMsIDB4QzAsIDB4RjYsIDB4MDAsIDB4REYsIDB4MDIsCisweDRELCAweDQ0LCAweDM0LCAweDFELCAweEMwLCAweDNGLCAweDAwLCAweEUzLCAweDA0LCAweEM0LCAweDA3LCAweDMwLCAweDBGLAorMHg0MCwgMHg3QiwgMHgwMCwgMHgxRiwgMHgwMywgMHgzQywgMHgwQiwgMHgzMCwgMHg5RCwgMHg0MCwgMHhCNywgMHgwNCwgMHg1RiwKKzB4MDMsIDB4QjQsIDB4MDcsIDB4RjAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MjIsIDB4NzIsCisweDNELCAweEM0LCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MjIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjAsIDB4OEQsIDB4QzAsCisweDM3LCAweDAyLCAweDFGLCAweDAyLCAweDdDLCAweDA3LCAweDcwLCAweDhELCAweEMwLCAweDM3LCAweDAxLCAweDVGLCAweDQwLAorMHg3QywgMHg0MywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMiwgMHg3QywgMHgwNywgMHg5NiwgMHgxRCwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MkYsIDB4ODAsCisweEYzLCAweDEwLCAweENDLCAweDAzLCAweEYwLCAweDFGLCAweEMwLCAweDlDLCAweDIwLCAweDdGLCAweDAwLCAweENDLCAweDUxLAorMHg3MCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGMywgMHgyMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwKKzB4ODAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsCisweDAzLCAweDMwLCAweDBFLCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweEEwLCAweDRDLCAweDgzLCAweDMwLCAweDE3LCAweEMyLAorMHgwNywgMHgyNCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMSwgMHgyMCwgMHg0NiwgMHgwMSwgMHhDMSwKKzB4MDksIDB4NDUsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NDAsIDB4QzQsIDB4MTAsIDB4MUQsIDB4NUIsIDB4MDQsIDB4MUYsIDB4NTAsCisweDc1LCAweDQwLCAweDMzLCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQyLCAweDM3LCAweDQwLAorMHgxMSwgMHgwMiwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0OCwgMHgzNywgMHgyMCwgMHgxRCwgMHgwMiwgMHg2QywgMHgwMywKKzB4QjAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MTAsIDB4OEQsIDB4MDcsIDB4NTQsIDB4MDMsIDB4MTQsIDB4M0QsIDB4NDAsIDB4ODcsCisweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ0LCAweDAwLCAweDk5LCAweDAwLAorMHg0NCwgMHgwMywgMHhEMCwgMHg4RCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHg1MCwgMHgxRCwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsCisweDA4LCAweDc0LCAweDA3LCAweDkwLCAweDBELCAweDQwLCAweDM3LCAweDAyLCAweDlELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLAorMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg2NSwgMHgwMiwgMHgxMCwgMHg4RCwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4OTEsIDB4ODAsIDB4MDQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDA1LCAweDAzLCAweDUwLCAweDBDLCAweDQwLAorMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMCwKKzB4NjQsIDB4MDMsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NjUsIDB4MDMsIDB4OTAsIDB4MEMsCisweDQwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDRDLCAweDQwLCAweDQzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgwRSwgMHgwMCwgMHhCQiwgMHg0MCwgMHhDQywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NEYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4M0YsCisweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBGLCAweDQwLCAweDNGLCAweDAwLCAweDUxLCAweDAwLCAweDdDLAorMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg1RiwgMHg0MCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4OUYsIDB4MjAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MDUsIDB4QzIsIDB4MDcsIDB4NDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RUYsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4RTAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4ODAsIDB4QkMsIDB4MDMsCisweDcwLCAweDBCLCAweEMwLCAweDNGLCAweDEwLCAweDNGLCAweDgwLCAweERDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgyMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4RTAsIDB4MUYsCisweEMwLCAweDdDLCAweDAyLCAweEZCLCAweDAxLCAweEJFLCAweDBGLCAweDExLCAweDNGLCAweEMwLCAweDdDLCAweDgyLCAweEYzLAorMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGQiwgMHgwMSwgMHhEQywgMHgwNywgMHgzMCwKKzB4OUYsIDB4QzAsIDB4NUUsIDB4MDIsIDB4QjMsIDB4ODQsIDB4RUMsIDB4MzEsIDB4RjAsIDB4MUYsIDB4RTQsIDB4N0YsIDB4MDAsCisweEZGLCAweEMxLCAweEVDLCAweDI0LCAweEIwLCAweDE3LCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgxMCwgMHg2OSwgMHgwMCwgMHhGMSwgMHgxMSwgMHg0MCwKKzB4MDAsIDB4MjAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MTcsIDB4MDEsCisweDc0LCAweDA0LCAweEQwLCAweDExLCAweDQwLCAweDA0LCAweDIwLCAweDFELCAweDAxLCAweDQ0LCAweDg0LCAweEIwLCAweDAxLAorMHg0MCwgMHgxNSwgMHgwMSwgMHhENSwgMHgwOSwgMHg0NCwgMHhCMywgMHhEMCwgMHgxRiwgMHg0MiwgMHg3RiwgMHgwMCwgMHhGRCwKKzB4MDEsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MTksIDB4NDAsIDB4MDUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweERELCAweDg0LCAweDAwLCAweDEzLCAweEQwLCAweDBELCAweDQwLCAweDMwLAorMHgyMSwgMHhDOSwgMHgwMCwgMHgzMCwgMHgxMywgMHgxMCwgMHg0RCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwKKzB4ODMsIDB4QzAsIDB4MEQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4NjAsIDB4NDAsIDB4MDMsIDB4OTIsIDB4NEMsIDB4NDAsCisweDIwLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLCAweEM1LCAweDAwLAorMHg0NCwgMHgxMCwgMHg5MSwgMHgwRCwgMHg2NCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTgsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDYsIDB4ODAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDE1LCAweDAwLCAweDc0LCAweDAwLAorMHhEMCwgMHgwMSwgMHg1MCwgMHgwNCwgMHgwOCwgMHgxRCwgMHgwMCwgMHg1NCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg0MCwgMHgyMSwKKzB4MDAsIDB4OTQsIDB4MDAsIDB4NjQsIDB4MTEsIDB4RDAsIDB4MEQsIDB4NjAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsCisweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4OCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMSwgMHgwQywgMHhEMCwgMHgzNCwgMHgwMCwgMHhEQiwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4MzQsIDB4MEMsIDB4RDAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjEsCisweDBELCAweDQwLCAweDM2LCAweDA4LCAweERCLCAweDAwLCAweDFDLCAweDAzLCAweEIwLCAweDBELCAweEMyLCAweEE2LCAweDAwLAorMHg4NywgMHgwMSwgMHg3RCwgMHgwMSwgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHgyRCwgMHgwNCwKKzB4QjAsIDB4RDQsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsCisweDBELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGNCwgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEQsIDB4MDAsIDB4M0QsIDB4MDAsIDB4RUQsIDB4NDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDgsIDB4RkYsCisweDA1LCAweENDLCAweDAzLCAweEYwLCAweDBGLCAweDQwLCAweDNFLCAweDIwLCAweEZGLCAweDAwLCAweEZFLCAweDAwLCAweEYwLAorMHgxQiwgMHhEMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwKKzB4MDQsIDB4RDMsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzQsIDB4MTAsIDB4RDcsIDB4MDgsIDB4NkUsCisweEEzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERCLCAweDg0LCAweDdDLCAweDgzLCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNiwgMHgyMCwgMHg5NywgMHgyNCwKKzB4NkUsIDB4MDksIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MjgsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MkQsCisweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEM0LCAweDAxLAorMHgxMSwgMHgwMSwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHhEMCwgMHgwNiwgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwNCwKKzB4MTQsIDB4NTEsIDB4NDAsIDB4MDcsIDB4MzAsIDB4MTEsIDB4MTAsIDB4NUMsIDB4MDAsIDB4RDksIDB4MDAsIDB4QzEsIDB4NDUsCisweDI0LCAweDBELCAweEFBLCAweDY0LCAweDAwLCAweDcwLCAweDQxLCAweDQwLCAweDY0LCAweDAwLCAweDlCLCAweDA0LCAweDc0LAorMHgwMSwgMHhEMCwgMHgwRCwgMHg0OCwgMHgzNywgMHgwMCwgMHhERCwgMHgwNCwgMHg1QywgMHg2RSwgMHgxMCwgMHgwOSwgMHhDMCwKKzB4NEQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4ODAsIDB4QzEsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDhDLCAweDQwLCAweDM0LCAweDAwLCAweEM1LCAweDAxLCAweDQ0LCAweDA3LCAweDkyLAorMHgxQywgMHgwMCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMiwgMHgzNCwgMHgwMywgMHhEMCwgMHgxQywgMHg2MCwgMHg3MywgMHgyMCwKKzB4Q0QsIDB4MjMsIDB4MzQsIDB4MjcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4RjAsIDB4MDQsIDB4ODEsIDB4MDMsIDB4MzQsIDB4MDEsCisweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDA1LCAweDM0LCAweDBELCAweDEwLCAweDA4LCAweDQwLCAweDFGLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg0QywgMHgwMCwgMHgyMSwgMHgwMSwKKzB4QjQsIDB4MDQsIDB4RDAsIDB4MTMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4OTgsIDB4NTIsCisweDQ0LCAweDRCLCAweDAwLCAweDIxLCAweDA1LCAweDk0LCAweDA0LCAweEQwLCAweDEyLCAweDY4LCAweDRCLCAweDAwLCAweDJELAorMHgwMSwgMHhCMCwgMHgwNCwgMHg1MCwgMHgxMiwgMHg0MCwgMHg3OSwgMHgwMCwgMHhFOSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4QTEsIDB4OTQsIDB4MjcsIDB4MTAsIDB4OUEsIDB4NDAsIDB4MTksIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEMzLCAweDAwLCAweDNDLAorMHgwMywgMHhGMCwgMHg4QywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDNywgMHgwMCwgMHgwNSwgMHgyMywgMHhCMCwgMHg1QywgMHhDNCwKKzB4MzMsIDB4MDAsIDB4QzEsIDB4MDUsIDB4M0MsIDB4MDMsIDB4RDAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MjAsIDB4Q0YsIDB4ODgsCisweDNDLCAweDAzLCAweEYyLCAweDBELCAweDUwLCAweEEwLCAweDA0LCAweEMzLCAweDAwLCAweDM0LCAweDAzLCAweEYwLCAweDhDLAorMHhDMCwgMHgzMywgMHgwNiwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMSwgMHgzMCwgMHg4OCwgMHhDNCwgMHg0QiwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsCisweEYwLCAweDgyLCAweEMwLCAweDBGLCAweDAwLCAweDJFLCAweDA4LCAweEQ0LCAweDAwLCAweDcxLCAweDAzLCAweEMwLCAweDA3LAorMHgwMiwgMHgxNywgMHgwOCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwRCwgMHgwMCwgMHgxRCwgMHg4MCwgMHg2NCwKKzB4MDAsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MjAsIDB4MDIsIDB4RDgsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsCisweDdGLCAweDA4LCAweEZGLCAweDAxLCAweERDLCAweDAzLCAweEYwLCAweDhCLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzUsIDB4MTAsIDB4Q0UsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RDAsIDB4MEMsIDB4QzAsIDB4MzQsIDB4MjAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDczLCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHg4RCwgMHhDMCwgMHgzNywKKzB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4MUQsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA5LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEMwLCAweDAyLAorMHg0MCwgMHgwQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwOSwgMHgwMCwgMHgyRCwKKzB4MDAsIDB4QjQsIDB4MDAsIDB4NTAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDAsCisweDAyLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAyLCAweDlDLCAweDFCLCAweEYwLCAweDRFLCAweDQ4LCAweDNCLCAweDAxLAorMHhFOSwgMHgwMiwgMHhCNCwgMHgwMywgMHgxMCwgMHgwQSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MDIsIDB4NzksIDB4MDgsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4QzAsIDB4MUUsIDB4NDAsCisweDdCLCAweDAwLCAweEZELCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFGLCAweDQwLCAweDc4LCAweDEwLCAweEU0LCAweDAxLAorMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHgwOCwgMHg3RiwgMHgwMCwgMHhFNSwgMHgwMSwgMHhCNCwgMHgwNywgMHg0MCwgMHgxRSwKKzB4NjAsIDB4NkIsIDB4MDQsIDB4RTUsIDB4MDUsIDB4OTQsIDB4MTcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsCisweDA1LCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQ0LCAweDBFLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgyOCwgMHgwMywgMHg4MCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDgsIDB4MDEsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MzQsCisweDgwLCAweDUyLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDkwLCAweDAwLCAweDQwLAorMHhFMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDOSwgMHgwMCwKKzB4MzQsIDB4MEUsIDB4MUMsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLAorMHg1RiwgMHgwMCwgMHg0NSwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwKKzB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MUYsCisweDAwLCAweDRGLCAweDAwLCAweERDLCAweDgxLCAweDc4LCAweDA1LCAweEM0LCAweDE3LCAweDAwLCAweDVGLCAweDgwLCAweEZDLAorMHgyNSwgMHgzMCwgMHg0NywgMHg0MCwgMHg1RSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4OEYsIDB4MjAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4M0YsCisweDAwLCAweERDLCAweDAwLCAweEYxLCAweDAzLCAweEMwLCAweDBGLCAweDIwLCAweDNELCAweDAwLCAweEZDLCAweDAwLCAweEYwLAorMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHg0MCwgMHg4NywgMHgwMSwKKzB4MUYsIDB4MDAsIDB4NUMsIDB4MjAsIDB4NzAsIDB4MDAsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsCisweEYwLCAweDAxLCAweEUwLCAweDQ5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LAorMHg2NywgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGOCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwNCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjQsIDB4MjAsIDB4OTcsIDB4MDksIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksCisweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDU5LCAweEMwLCAweDI0LCAweDAxLCAweDlGLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwgMHhGMCwKKzB4MDksIDB4QzgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4QTYsCisweDA2LCAweDlELCAweDIwLCAweDc0LCAweDA2LCAweEQ4LCAweDM5LCAweDQ0LCAweDIzLCAweDIwLCAweDkxLCAweDAxLCAweDc0LAorMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwOCwgMHg4MywgMHgwMSwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0NCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MTgsIDB4NTAsIDB4RTQsIDB4MDAsIDB4QkQsIDB4MDAsCisweEM0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDJDLCAweDAxLCAweEJELCAweDQwLCAweDc0LCAweDBFLCAweEQyLCAweDA5LAorMHg0MiwgMHgwNywgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwOCwKKzB4QkQsIDB4MDAsIDB4RjQsIDB4MDYsIDB4RDIsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4NDAsIDB4RjQsIDB4MTIsCisweDUwLCAweDhCLCAweDQwLCAweDJDLCAweDIwLCAweEJELCAweDAwLCAweEU0LCAweDAyLCAweDkwLCAweDBCLCAweDYwLCAweDJFLAorMHgwMCwgMHhCNSwgMHgwMSwgMHhGNCwgMHgwQSwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwKKzB4MTMsIDB4RDIsIDB4MDksIDB4NDAsIDB4MjQsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NDMsIDB4RDAsIDB4MDksIDB4NjAsCisweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDI4LCAweDAwLCAweEFELAorMHgwMiwgMHhCNCwgMHgwQSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyRiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNiwgMHgwQSwgMHhEMCwKKzB4MkEsIDB4NTAsIDB4MjgsIDB4MDIsIDB4QkQsIDB4MDAsIDB4RTUsIDB4MEEsIDB4MTAsIDB4MEEsIDB4NjAsIDB4QUIsIDB4MDAsCisweEFELCAweDAwLCAweEI2LCAweDAyLCAweEQwLCAweDJCLCAweDYyLCAweEExLCAweDAwLCAweDhELCAweDIwLCAweDA0LCAweDhBLAorMHhEMiwgMHgyOCwgMHg0MCwgMHgyMCwgMHg4OCwgMHg4RCwgMHg4MCwgMHgzNCwgMHgyMiwgMHhEMCwgMHgyOCwgMHg0MCwgMHg0MywKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDg3LCAweDQyLCAweDEzLCAweDAwLCAweDdFLCAweDAwLCAweDcwLCAweDAxLAorMHhDMCwgMHg4NCwgMHgwMCwgMHg1NywgMHgwMCwgMHgyQywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MTUsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEQsIDB4MDQsIDB4RTAsCisweDExLCAweEQwLCAweDQ0LCAweDAwLCAweDFELCAweDAxLCAweDNDLCAweDA4LCAweEYwLCAweDAwLCAweEUyLCAweDc3LCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwRCwgMHg5RiwgMHgwMSwgMHg3QywKKzB4ODYsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MTksIDB4NDQsCisweDI3LCAweDAxLCAweDkzLCAweDAwLCAweDVDLCAweDA2LCAweEUwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDOCwgMHg2RSwgMHgwMCwgMHhCRiwgMHgwMiwgMHhGNCwgMHgwRSwgMHhGMCwgMHgzOSwKKzB4QzAsIDB4QTcsIDB4MDgsIDB4OUYsIDB4MDIsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAwLCAweEIzLCAweDAyLCAweEZDLCAweDAyLAorMHhEMSwgMHgwQSwgMHhDMCwgMHgyNywgMHgxMCwgMHhCRSwgMHgwMCwgMHhEOCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywKKzB4MDIsIDB4QkYsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QUYsIDB4MDAsIDB4QjcsIDB4MDAsIDB4REMsCisweDAyLCAweEMwLCAweDJCLCAweEMwLCAweDJGLCAweDAwLCAweEIzLCAweDAxLCAweEJDLCAweDQ2LCAweDMwLCAweEQ5LCAweEMwLAorMHg2QywgMHgwMSwgMHhCMywgMHgxMSwgMHhDOCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDUsIDB4MUIsIDB4MDUsIDB4NzQsIDB4MTQsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDA0LCAweDFELCAweDAwLCAweDc0LCAweDU0LCAweEQwLCAweDExLCAweDQwLCAweDA3LCAweDAxLAorMHgxRCwgMHgwMCwgMHg3NCwgMHg1NCwgMHhEMCwgMHgwMSwgMHhDMCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4OTAsIDB4NTEsIDB4NDAsIDB4NDcsIDB4MDUsIDB4MTEsIDB4MjAsIDB4NzQsIDB4MTQsIDB4NTAsIDB4MzEsIDB4NDAsIDB4ODUsCisweDAwLCAweDExLCAweDAyLCAweDU0LCAweDAwLCAweEQwLCAweDUwLCAweDQxLCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMSwgMHg4MSwgMHgwMCwgMHgzNCwgMHg0MiwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDEsIDB4MjMsIDB4MjEsIDB4OEMsCisweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDIwLCAweDk0LCAweDAwLCAweDE0LCAweDAyLCAweDkwLAorMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMiwgMHgzNCwgMHg1MiwgMHg1MCwgMHhDOCwgMHg0MCwgMHgyMCwgMHgwMiwKKzB4ODUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDk5LCAweDIwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHg4MCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksCisweDAwLCAweEE3LCAweDAxLCAweDkxLCAweDAwLCAweDcwLCAweDQyLCAweDUwLCAweDA4LCAweDQwLCAweDM3LCAweDAwLCAweDk1LAorMHgwMCwgMHg1NiwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4MDgsIDB4MjUsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHg5MCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4QzAsIDB4OTMsIDB4MDEsIDB4RkMsIDB4MkEsIDB4NzEsIDB4MEIsIDB4QzgsIDB4MjAsIDB4NDAsIDB4OTcsIDB4NDAsCisweDRDLCAweDlFLCAweEYwLCAweDJCLCAweDQwLCAweDE3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEM0LCAweDI1LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMyLCAweDY3LAorMHgwMCwgMHg5RiwgMHg4OSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5QiwgMHg4MCwgMHg3QywKKzB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDNBLCAweDAxLCAweEQwLCAweDA2LCAweDAwLCAweDEzLAorMHgwMCwgMHg2QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNCwgMHg4MCwgMHgxMywgMHgyOCwgMHg3QywgMHgwMCwgMHhCMiwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzIsIDB4ODcsIDB4MDAsCisweDFGLCAweDAwLCAweDBDLCAweDA4LCAweDMxLCAweDAxLCAweEQwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDRELCAweDg4LAorMHgzMCwgMHgyMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwKKzB4REMsIDB4MDAsIDB4NUQsIDB4NDAsIDB4NzQsIDB4MTEsIDB4MTUsIDB4NTcsIDB4QzAsIDB4MTQsIDB4MTAsIDB4NTUsIDB4NDAsCisweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE0LCAweDAwLCAweDdCLCAweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDA1LAorMHg0MCwgMHg1NCwgMHgwMCwgMHg2QiwgMHgwMiwgMHhGNCwgMHgwRCwgMHgzNCwgMHgwNSwgMHg0MCwgMHg5QiwgMHgwMCwgMHg3RCwKKzB4MDIsIDB4NkUsIDB4MDEsIDB4QjAsIDB4MDUsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0IsIDB4MUIsIDB4QzQsIDB4MDUsIDB4MTAsCisweDA1LCAweEM4LCAweDUyLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEY2LAorMHg4MiwgMHhDRCwgMHgwOSwgMHgzNCwgMHgwMywgMHgxMCwgMHgzOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4QzAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NDUsIDB4MDUsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MDgsIDB4NDAsCisweDMyLCAweDAyLCAweEMxLCAweDA0LCAweDM0LCAweDAxLCAweDE4LCAweDBDLCAweDQwLCAweEUzLCAweDAzLCAweDhELCAweDEwLAorMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0NCwgMHhBMiwgMHgwMSwgMHg4OSwgMHgwMywgMHgyNCwgMHgxQiwgMHgxRCwgMHgwQywKKzB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTgsIDB4ODAsCisweEFELCAweDQ0LCAweEY0LCAweDE3LCAweDEwLCAweDFBLCAweDQ0LCAweDdDLCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDEyLAorMHhEMiwgMHg1QSwgMHg0MCwgMHg3QywgMHgwMSwgMHhFOSwgMHgwMCwgMHhGNiwgMHgxNywgMHgxMCwgMHgxQSwgMHg0MCwgMHgyQSwKKzB4MDAsIDB4RTEsIDB4MDAsIDB4RjQsIDB4MEYsIDB4OTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4OEQsIDB4MTEsIDB4RjQsCisweDBCLCAweDkwLCAweDhFLCAweDQwLCAweDI4LCAweDA0LCAweEE5LCAweDIwLCAweEE0LCAweDBGLCAweDEwLCAweDVFLCAweDQwLAorMHgxMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwKKzB4MjEsIDB4QkMsIDB4MUUsIDB4MTAsIDB4MUUsIDB4QzAsIDB4NzgsIDB4MDIsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RDIsCisweDVGLCAweEMwLCAweDc4LCAweDA0LCAweEU1LCAweDAxLCAweEJDLCAweDk3LCAweEIwLCAweDFBLCAweDYwLCAweDdFLCAweDAwLAorMHhFMSwgMHgwMSwgMHhCQywgMHgwNywgMHgxOSwgMHgzRSwgMHhDMCwgMHg3QiwgMHgxMSwgMHhBRiwgMHgwMSwgMHhBNiwgMHgwRSwKKzB4MzAsIDB4MUMsIDB4ODgsIDB4NkEsIDB4MDAsIDB4QUIsIDB4MDEsIDB4RUMsIDB4MDUsIDB4MzAsIDB4M0UsIDB4QzAsIDB4NTAsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDA4LCAweDlGLCAweDAwLAorMHgzQywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDOCwgMHhCMSwgMHgwMSwgMHhERiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4OSwKKzB4REEsIDB4MzMsIDB4MDIsIDB4REMsIDB4MDAsIDB4M0MsIDB4MjMsIDB4RjAsIDB4MDgsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsCisweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDA5LCAweDgwLCAweDE3LCAweDEwLCAweDlELCAweDAwLCAweDZDLCAweDAyLCAweEMwLAorMHgwRCwgMHhDMCwgMHgyMSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDOCwgMHg0MywgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0IsIDB4MDAsIDB4RjMsIDB4MTEsIDB4Q0MsCisweDA3LCAweEI4LCAweDBCLCAweEMwLCAweDdGLCAweDA0LCAweEZGLCAweDAxLCAweEVELCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHg3RiwgMHgyMCwgMHhFRiwgMHgwOSwgMHg0QywgMHgyNywgMHgzMCwgMHgxQiwgMHhDMCwgMHg3RCwgMHgwNCwgMHhGQiwgMHgwMSwKKzB4OUMsIDB4MDcsIDB4QjAsIDB4OUUsIDB4QzIsIDB4NUQsIDB4MDQsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsCisweEM4LCAweDZDLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDA4LCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgxOSwgMHgwNiwgMHhGMSwgMHg0MCwgMHhDNCwgMHgxMywKKzB4MzksIDB4NEEsIDB4NDAsIDB4M0IsIDB4MDEsIDB4RUQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDgsIDB4M0IsCisweDAxLCAweEM3LCAweDAyLCAweDg0LCAweDc3LCAweDEwLCAweDBBLCAweDQwLCAweDNDLCAweDAwLCAweDYxLCAweDAwLCAweDg0LAorMHgwMywgMHg0MCwgMHgxRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhBRCwgMHg4NCwgMHhBNCwgMHgxMywgMHhGMCwgMHgwRSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4RTUsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEJDLCAweDAwLCAweEExLCAweDA4LCAweDg0LCAweDAyLCAweDAxLAorMHg4QSwgMHg0MSwgMHgzQiwgMHgxMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHg0MywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgyMCwKKzB4RUQsIDB4MDIsIDB4ODAsIDB4MTcsIDB4MTAsIDB4MEIsIDB4NDEsIDB4MjksIDB4MDAsIDB4RjEsIDB4MDAsIDB4OTQsIDB4MDMsCisweDEwLCAweDRGLCAweDQwLCAweDFBLCAweDAwLCAweEFELCAweDgwLCAweEI0LCAweDQyLCAweEQwLCAweDFFLCAweDQwLCAweDIwLAorMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgxRiwgMHg0MCwgMHgyMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MDIsIDB4NDQsIDB4MEUsIDB4MTAsIDB4M0MsCisweDQwLCAweEIzLCAweDAyLCAweENELCAweDAyLCAweDA2LCAweDBFLCAweDAwLCAweDM4LCAweDQwLCAweEYzLCAweDAxLCAweEM5LAorMHgwOCwgMHgwNCwgMHg0RiwgMHgxMSwgMHg2OCwgMHg0MiwgMHhBNSwgMHgwMiwgMHgwMSwgMHgwQiwgMHgwNCwgMHg0QiwgMHg1MCwKKzB4MDgsIDB4NDEsIDB4MTMsIDB4MjIsIDB4OEQsIDB4ODEsIDB4NjYsIDB4MUEsIDB4NTIsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsCisweEM1LCAweDgwLCAweDc0LCAweDA4LCAweEQwLCAweDBDLCAweDQwLCAweDE4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg2NSwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0QywgMHg0RiwgMHgzNCwgMHgxOCwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4REYsIDB4MDMsIDB4MEMsIDB4MDcsIDB4MzAsIDB4M0QsIDB4QzEsIDB4QkYsIDB4MDQsIDB4Q0QsIDB4MDEsCisweDRELCAweDBCLCAweDM2LCAweDJELCAweEU0LCAweEI1LCAweDAyLCAweDkzLCAweDAyLCAweDU0LCAweDQyLCAweDEwLCAweDE5LAorMHhDMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwNSwgMHg3NCwgMHgwRiwgMHhEMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5NywKKzB4MjAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4QkQsIDB4RDUsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweEE3LCAweDIwLCAweDlGLCAweDE4LCAweDdDLCAweDAzLCAweDcwLCAweDI5LCAweEMwLCAweDM3LAorMHgwMSwgMHhERSwgMHgwOCwgMHg3QywgMHgwMywgMHhGNCwgMHg0RCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMiwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OTcsIDB4ODIsIDB4N0MsIDB4MEIsIDB4NzAsIDB4OEQsIDB4RTAsCisweDM1LCAweDAwLCAweERGLCAweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDlELCAweDAyLAorMHg3QywgMHgyQSwgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODAsIDB4MEEsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4NDMsIDB4NzAsIDB4MEYsIDB4QzEsIDB4M0MsIDB4MDAsCisweEZGLCAweDE1LCAweERDLCAweDY2LCAweDMwLCAweDFCLCAweEMwLCAweDNGLCAweDIwLCAweEZGLCAweDAwLCAweENDLCAweDAzLAorMHhGMCwgMHg5RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzMywgMHgxMCwgMHhGQywgMHgwMywgMHhFMCwgMHgwQiwgMHhDMCwgMHg3RiwKKzB4MTAsIDB4RTMsIDB4NDksIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4QkYsIDB4MDAsIDB4QkYsIDB4MjIsIDB4RkMsCisweDQwLCAweDMwLCAweDBGLCAweEMwLCAweDA3LCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLAorMHgyMCwgMHg2NiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg4MywgMHgxMCwgMHgyRCwgMHg0MCwgMHgzNCwgMHgwOCwgMHhERCwKKzB4NDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDQsIDB4MzcsIDB4MDgsIDB4REQsIDB4MDMsIDB4NDQsIDB4MDMsIDB4RDAsCisweDE5LCAweDY4LCAweDI3LCAweDgwLCAweDE1LCAweDEzLCAweDc0LCAweDQ3LCAweEQyLCAweDk5LCAweEM0LCAweDUxLCAweDI4LAorMHhEMSwgMHgwMywgMHg2QywgMHgyNywgMHhGMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwNCwgMHg3QywgMHgyRiwKKzB4MTEsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsCisweDQ2LCAweDA0LCAweERELCAweDAwLCAweDQ0LCAweDEyLCAweDEyLCAweDA5LCAweDQxLCAweDM2LCAweDAwLCAweERELCAweDAwLAorMHg3NCwgMHgwMywgMHgxMiwgMHg4RCwgMHg0MiwgMHgzNywgMHgwMCwgMHhERCwgMHgwMSwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDIsIDB4MzcsIDB4MjAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MDksIDB4NDQsIDB4MTcsIDB4MDIsIDB4OTUsCisweDUwLCAweDQ0LCAweDAyLCAweDEwLCAweDBELCAweDQ4LCAweDM2LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDBBLCAweDEwLAorMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NTAsIDB4MzIsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4NzQsCisweDAzLCAweDUwLCAweDhDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAyLCAweDA0LCAweDEzLCAweEQwLCAweDA4LCAweDQwLAorMHgzNiwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MSwgMHgzNSwgMHg0MCwgMHg0NSwgMHg4MCwKKzB4MjQsIDB4MDIsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MjAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MEMsCisweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI2LCAweDAwLAorMHg5RiwgMHgyMCwgMHg0QywgMHgwMiwgMHgzNCwgMHgwMSwgMHhDMCwgMHgzRSwgMHgwMCwgMHhERiwgMHgwMCwgMHg1OCwgMHg4MiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4M0YsIDB4MDgsIDB4REYsIDB4MDIsIDB4ODQsIDB4NDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MjcsCisweDAwLCAweDExLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweDQwLCAweDE3LCAweDgwLCAweDk3LCAweDgwLCAweDRDLAorMHgwMiwgMHgzMCwgMHgwRSwgMHg4MCwgMHgxNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzNCwgMHgwRiwgMHhDOCwKKzB4MDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjAsIDB4MkYsIDB4MDAsIDB4QkYsCisweDQwLCAweEZDLCAweDAyLCAweEIwLCAweDA3LCAweEMwLCAweDNELCAweDA4LCAweEVGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLAorMHg0QiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwKKzB4MkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MDksIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RjgsIDB4MDIsCisweEYwLCAweDBGLCAweEMyLCAweDFGLCAweDIwLCAweDdGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDE3LAorMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg2RiwgMHgwMCwgMHgyRiwgMHgwNCwKKzB4Q0MsIDB4MDYsIDB4NzAsIDB4NDMsIDB4QzEsIDB4MEYsIDB4MDEsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MTAsIDB4NzQsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDMzLCAweDEwLCAweENDLCAweDgwLCAweDMwLCAweDAzLCAweEQwLCAweDBDLCAweDAwLCAweDMzLAorMHgwNCwgMHhDQywgMHgwMCwgMHgzNCwgMHg0MywgMHhDOCwgMHg3RSwgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywgMHg1MywgMHhGMCwKKzB4MTIsIDB4QzAsIDB4NkQsIDB4MDIsIDB4QUYsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MEYsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDY3LCAweDAwLCAweDFELCAweEFCLCAweDQ0LAorMHgwNywgMHgxMCwgMHgzNSwgMHg0OCwgMHhENywgMHgwMiwgMHhEMSwgMHhBMSwgMHg0NCwgMHgwRCwgMHgxMCwgMHgzNSwgMHg0MCwKKzB4NTcsIDB4MDIsIDB4NTEsIDB4NDMsIDB4NEMsIDB4MEQsIDB4MTAsIDB4QjUsIDB4NDAsIDB4RDQsIDB4MDIsIDB4NTEsIDB4MDMsCisweDQ0LCAweDBELCAweDEwLCAweDk1LCAweDQwLCAweDMzLCAweDExLCAweEQxLCAweDAzLCAweDc0LCAweDhGLCAweEQwLCAweDE5LAorMHg0MCwgMHgyNywgMHgwMSwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNCwgMHhEMiwgMHgxMSwgMHg0MCwgMHgwNywgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTgsIDB4MjMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NDQsIDB4MDMsCisweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDQwLCAweEMxLCAweDAwLCAweDE0LCAweDBBLCAweDE4LCAweDg4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwQSwgMHg1MCwgMHgwOCwgMHg0OCwgMHgyMCwgMHgwMCwgMHg4OSwgMHgwOCwgMHgwNiwKKzB4MEEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDEsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsCisweDAxLCAweDEwLCAweDg1LCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgyNSwgMHgwMiwgMHgxRCwgMHhDMCwgMHg2NCwgMHhDNywgMHgxMCwKKzB4MDUsIDB4NDQsIDB4MzcsIDB4MDIsIDB4RDEsIDB4MDAsIDB4NTYsIDB4MDgsIDB4MTAsIDB4MDUsIDB4NDAsIDB4QjcsIDB4MDksCisweDkxLCAweDAzLCAweDY0LCAweDAzLCAweDUwLCAweDA5LCAweDQwLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDBFLAorMHgxMCwgMHgwOSwgMHg0MiwgMHgzNywgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwgMHg1NywKKzB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDUsIDB4RDAsIDB4MTksIDB4NDEsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDI3LCAweDAwLCAweERGLCAweDVBLCAweDBDLCAweDBGLCAweDcwLCAweDkxLAorMHhDMCwgMHhDNywgMHgwNCwgMHhEMywgMHgwMSwgMHg1QywgMHgyNCwgMHgzMCwgMHgxMSwgMHhDMiwgMHhDNywgMHgwMCwgMHgxMywKKzB4MDIsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MjEsIDB4QzEsIDB4QzQsIDB4ODYsIDB4MTMsIDB4MUIsIDB4NEMsIDB4MDgsIDB4MzAsCisweDAxLCAweEMwLCAweDM2LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDU5LCAweEMwLCAweEU1LCAweDAwLAorMHg5RiwgMHgwNywgMHg3QywgMHgxNiwgMHhGMCwgMHgzOSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MkQsIDB4MjAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MTcsIDB4QzAsCisweDRGLCAweDAwLCAweEZELCAweDAyLCAweEVDLCAweDAxLCAweEIwLCAweDNGLCAweEMwLCAweDFBLCAweDQwLCAweDZGLCAweDAwLAorMHg5QywgMHgwRCwgMHhCMCwgMHgwNywgMHhDMCwgMHg1QiwgMHgyMCwgMHg3RiwgMHgwMCwgMHhGRCwgMHgwMSwgMHhGMCwgMHgwNywKKzB4QzIsIDB4N0YsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4N0YsCisweDAwLCAweEZDLCAweDAxLCAweEYyLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMCwgMHhEMywgMHgxMywgMHg0QywgMHgyMywgMHhGMCwgMHgwOSwgMHhEMCwgMHhBMCwKKzB4MDAsIDB4REYsIDB4MTEsIDB4MUMsIDB4MEEsIDB4NzAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NEMsCisweDJBLCAweDMwLCAweDJDLCAweEMwLCAweEE3LCAweDAyLCAweDgzLCAweDAyLCAweDBELCAweDAyLCAweEYwLCAweDJELCAweDQxLAorMHg3NCwgMHgwMSwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgyOSwgMHhDMCwgMHg5NCwgMHgwMCwgMHg5RiwgMHgwRSwKKzB4NEMsIDB4MEEsIDB4RjAsIDB4MjksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDY0LCAweDAxLCAweDgxLCAweDIyLCAweDQ0LCAweDAzLCAweEQwLCAweEI1LCAweDQwLCAweEU0LCAweDAyLAorMHhDRCwgMHgwMiwgMHg0NCwgMHgyOCwgMHhEMCwgMHhBRCwgMHg0MSwgMHhCNywgMHgwNiwgMHgxRCwgMHgxQSwgMHg0NCwgMHgwNywKKzB4MTIsIDB4QUQsIDB4NDIsIDB4QjcsIDB4MDAsIDB4OTEsIDB4MEIsIDB4NkMsIDB4MkEsIDB4RDAsIDB4MEQsIDB4NDEsIDB4QjUsCisweDA4LCAweEQxLCAweDAxLCAweEM0LCAweDgzLCAweEQwLCAweDBELCAweEMwLCAweDE0LCAweDAwLCAweEQxLCAweDAxLCAweDQ0LAorMHg5OSwgMHhEMCwgMHgxOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MjAsIDB4RTIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjgsIDB4Q0QsCisweDAwLCAweDIwLCAweDI0LCAweDgwLCAweDEwLCAweDQwLCAweDQzLCAweDAwLCAweDBELCAweDAxLCAweDA2LCAweDkwLCAweDEwLAorMHg5MCwgMHg0MCwgMHg0MywgMHgwNCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgyNCwgMHhEMCwgMHgxMCwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4ODEsIDB4ODAsIDB4MjQsIDB4ODMsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4NDIsCisweEQxLCAweDAwLCAweDQzLCAweDBGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorMHg2QSwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHg5OCwgMHg0MywgMHg1OCwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NkIsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MUUsCisweDQwLCAweDYzLCAweDAwLCAweEMxLCAweDExLCAweDg0LCAweDA1LCAweEQwLCAweDE0LCAweDUwLCAweDc4LCAweDAwLCAweEUxLAorMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgwQiwgMHg0MCwgMHg3QSwgMHgxMiwgMHhCMSwgMHgwMSwgMHg4NSwgMHgwNiwgMHhEMCwKKzB4MTIsIDB4NDgsIDB4MTMsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjIsCisweDAwLCAweDAzLCAweDA4LCAweDFDLCAweDAzLCAweEYwLCAweEE4LCAweEM4LCAweDAwLCAweDg0LCAweENGLCAweDAwLCAweDNDLAorMHg4MywgMHg3MCwgMHgwQywgMHg0MCwgMHgxMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDQSwKKzB4MTMsIDB4MTAsIDB4NDMsIDB4MDAsIDB4MjQsIDB4MDEsIDB4RjAsIDB4RTAsIDB4QzAsIDB4MzAsIDB4NDAsIDB4ODMsIDB4MTgsCisweDJDLCAweDAzLCAweEYwLCAweDg4LCAweEMwLCAweDI0LCAweDQwLCAweDQ3LCAweDA4LCAweDBDLCAweDAzLCAweEYwLCAweDAwLAorMHhDMSwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzOSwgMHg0MCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4OEIsIDB4QzAsIDB4MUYsIDB4MjAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDMsCisweEY4LCAweDA3LCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDhCLCAweEMwLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgwMSwgMHhGMCwgMHg4MywgMHhFMCwgMHgzRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhERCwKKzB4NDMsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4ODMsIDB4QzAsCisweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDY3LCAweDAwLCAweDUzLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNiwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OTMsIDB4ODAsIDB4N0MsIDB4MDcsIDB4MzIsIDB4MDEsIDB4QzIsIDB4NDQsIDB4MDAsCisweDEzLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwOSwgMHhDMCwgMHg1NywgMHgwMCwgMHg1MywgMHg4MCwgMHg3QywgMHgwMSwgMHgzMCwgMHgxOSwgMHhDMCwgMHg0MCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsCisweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDA4LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBBLAorMHg0MCwgMHgyMywgMHg0MCwgMHhFMSwgMHgwMCwgMHgzNiwgMHgwMywgMHgwNCwgMHgwQywgMHg0MCwgMHgyOCwgMHg0MCwgMHhFMSwKKzB4MjAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBBLCAweDQwLCAweDNCLCAweDAwLCAweDYxLCAweDAwLCAweEY0LCAweDAxLCAweEIxLCAweDAyLCAweDQwLCAweDQ4LCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwKKzB4MDcsIDB4RDAsIDB4MUMsIDB4NDQsIDB4NzgsIDB4MDAsIDB4RTUsIDB4MTEsIDB4QjYsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsCisweDVCLCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDE2LCAweDQwLCAweDUwLCAweDAwLCAweDQxLCAweDAxLAorMHg4NCwgMHgwNywgMHgxNCwgMHgzRSwgMHg0MCwgMHg3RiwgMHgwMCwgMHhFMSwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxQSwKKzB4NDAsIDB4REYsIDB4MDAsIDB4NjEsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MTgsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDMzLCAweDAwLCAweEMxLCAweDEzLCAweDM0LCAweDAxLAorMHhEMCwgMHg5QywgMHg0MCwgMHhCMCwgMHgwNCwgMHg4RCwgMHgwMSwgMHgzNiwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsCisweDAzLCAweDEwLCAweDJDLCAweDQwLCAweDYzLCAweDAyLCAweEM1LCAweDA4LCAweDM0LCAweDAzLCAweEQwLCAweEFDLCAweDQxLAorMHhEMywgMHgwMCwgMHg0MSwgMHg2MiwgMHgzNCwgMHg4NSwgMHg5MCwgMHgxQywgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4NTcsIDB4MDQsIDB4NzMsIDB4MDcsIDB4QkMsIDB4MDksIDB4RjAsCisweDA3LCAweEQwLCAweDlFLCAweDA0LCAweDU3LCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDg3LCAweEUwLCAweDFGLCAweDAwLAorMHg3MywgMHgwMiwgMHhGQywgMHgxRCwgMHgzMCwgMHgxNywgMHhEMSwgMHgxQywgMHgwMCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMSwKKzB4MzAsIDB4MjcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDEsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MTcsIDB4QzAsIDB4MUYsCisweDAwLCAweDYzLCAweDA3LCAweEJDLCAweDA1LCAweDMwLCAweDc3LCAweEMwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHg0MCwgMHgwRiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA0LCAweEYwLAorMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0NCwKKzB4MUYsIDB4MDYsIDB4N0MsIDB4MjQsIDB4RjAsIDB4NDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA4LCAweEUwLAorMHgyMCwgMHgwMCwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOCwgMHhDMCwgMHgyMCwgMHgwMCwgMHg4MywgMHgxMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4MEMsIDB4MDIsIDB4NzAsIDB4MDgsCisweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwOCwgMHg0QywgMHgyMiwgMHgzMCwgMHg1OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4MTAsIDB4MjQsCisweDQwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDE0LCAweDA5LCAweEQwLCAweDI0LCAweDUwLCAweDkxLCAweDQwLCAweDRELAorMHgwMiwgMHhEMCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NSwgMHgwMiwgMHgxNCwgMHgwOSwgMHg1MCwKKzB4NjQsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDEsCisweDU0LCAweDA2LCAweDU0LCAweDI5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4MDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDMsCisweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LCAweDQwLCAweDIwLAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwKKzB4NDIsIDB4MTEsIDB4MjksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDI4LCAweDIwLCAweDAwLCAweDhELCAweDA0LCAweDA1LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDgxLAorMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0NCwgMHgyMCwgMHgwMSwgMHg4OSwgMHgwNCwgMHgwNCwgMHgxMiwgMHhEMCwKKzB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NjAsIDB4MDAsCisweDgxLCAweDA0LCAweDM0LCAweDEyLCAweDUwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDU0LCAweDAyLAorMHg1MCwgMHg0OCwgMHg0MCwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MzQsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsCisweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFCLCAweDIwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxMywKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4NUYsIDB4ODAsIDB4NEMsIDB4MDAsIDB4MzIsCisweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDJCLAorMHgwMCwgMHhCRiwgMHgyOCwgMHhGRCwgMHgwMiwgMHhGMSwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwQSwgMHhCRiwgMHgyMCwgMHhGQywKKzB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjcsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjIsIDB4OEIsIDB4QzAsCisweDJGLCAweDIyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLCAweEYyLCAweDhCLCAweEMwLCAweDJCLCAweDAwLCAweEJGLCAweDA4LAorMHg3QywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHg4QiwKKzB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsCisweDlGLCAweDg0LCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDUyLAorMHgzMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHg0OSwgMHhDMCwgMHgyNCwKKzB4MDUsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MkMsIDB4MDIsIDB4QjMsIDB4MDQsIDB4Q0MsCisweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYyLCAweDBCLCAweEMwLAorMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgwNywgMHgwMCwgMHgxRCwKKzB4MjgsIDB4NzQsIDB4ODAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsCisweDgxLCAweDQwLCAweDg3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweEEwLCAweDEyLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxRCwgMHg4OCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgwMywgMHg0MCwgMHgwNCwgMHg0MCwgMHgxMSwgMHgyMCwgMHg0NSwgMHgwMCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4MTYsIDB4MTQsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzMsCisweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDI5LCAweDAwLCAweEFELCAweDAwLAorMHhCNCwgMHgwMiwgMHhEMCwgMHg5QSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwNiwgMHgxMCwgMHgxQSwKKzB4NDAsIDB4NkIsIDB4MDIsIDB4QUQsIDB4MDksIDB4QjQsIDB4MDYsIDB4MTAsIDB4OUEsIDB4NDgsIDB4NjgsIDB4MjAsIDB4QUQsCisweDAxLCAweEIwLCAweDI2LCAweEQwLCAweDlBLCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDA4LCAweDA0LCAweDBBLCAweEQwLAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4RCwgMHg4MCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgxOCwgMHg0MCwgMHg0QiwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4NjUsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsCisweDhBLCAweEQwLCAweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLAorMHg2RiwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHg2QywgMHgwMCwgMHhCRCwgMHgwMCwKKzB4RjQsIDB4MTIsIDB4RDAsIDB4MEIsIDB4NTAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDI2LCAweDAyLCAweDlELCAweDAyLCAweDc0LCAweDBBLCAweEQwLCAweDE5LCAweDQwLCAweDYzLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwKKzB4RjAsIDB4MjksIDB4QzgsIDB4QTcsIDB4NDAsIDB4OTEsIDB4MDAsIDB4N0MsIDB4MkEsIDB4MzQsIDB4MzksIDB4QzAsIDB4QTcsCisweDAwLCAweDlGLCAweDBCLCAweDdDLCAweDBBLCAweDM0LCAweEE5LCAweEQwLCAweEE0LCAweDAwLCAweDlGLCAweDAzLCAweDdDLAorMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMSwKKzB4QTcsIDB4MDAsIDB4OUYsIDB4ODIsIDB4N0MsIDB4MEUsIDB4RjAsIDB4MjksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI1LCAweDA4LCAweDlGLCAweDAwLCAweDc4LCAweDA2LCAweEYwLAorMHgwOSwgMHg4MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDEsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDYsCisweEYwLCAweDk4LCAweEMwLCAweDI3LCAweDAxLCAweDhGLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgyOCwgMHg3QywgMHg2NiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBCLCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBDLCAweDAwLCAweDNGLAorMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhCMCwKKzB4MDMsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFGLCAweDEyLCAweDdDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgyMCwgMHg0MCwgMHgwMSwgMHg3MCwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MjAsCisweDc0LCAweDAxLCAweEQyLCAweDA1LCAweDQ4LCAweDE3LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDMwLCAweDA1LAorMHhDMCwgMHgxRSwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgxMCwgMHg3RCwKKzB4MDMsIDB4RjQsIDB4NEQsIDB4NTAsIDB4MTcsIDB4NTAsIDB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDAyLCAweDAwLCAweDBELCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDAzLAorMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNiwKKzB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisweDM0LCAweDA4LCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDRELCAweDAwLAorMHgzNCwgMHgwOSwgMHgxMCwgMHg4QywgMHg0MSwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4ODgsIDB4MzgsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4ODQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDFFLCAweDQwLCAweDNBLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwNywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQSwKKzB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4NDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NkQsIDB4NDIsIDB4QjQsCisweDA1LCAweDUwLCAweDFFLCAweDQwLCAweDA1LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHgxMCwgMHg0OCwgMHgwMCwgMHgyRiwgMHgwMSwgMHg4RCwgMHg4NCwgMHg3MCwgMHgxMiwgMHhDMCwgMHg0QiwgMHgwMCwgMHgyRiwKKzB4MDEsIDB4QkMsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RDAsIDB4NEEsIDB4MDgsIDB4MkQsIDB4MjEsIDB4QjQsIDB4MDQsIDB4RjAsCisweDEyLCAweEMwLCAweDRCLCAweDAwLCAweDJGLCAweDAxLCAweEJDLCAweDA0LCAweDMwLCAweDEyLCAweEMwLCAweDU4LCAweDAwLAorMHhBRiwgMHgwMSwgMHhCQywgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMywgMHhFRiwgMHgwMSwgMHhCQywgMHgwNSwKKzB4MzAsIDB4MUUsIDB4QzAsIDB4NDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsCisweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdFLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwQywgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0RCwKKzB4MDAsIDB4M0YsIDB4MDEsIDB4Q0MsIDB4MjAsIDB4RjAsIDB4MTMsIDB4QzAsIDB4NEMsIDB4MDAsIDB4M0YsIDB4MDEsIDB4Q0MsCisweDA0LCAweEYwLCAweDEzLCAweEMwLCAweDRFLCAweDAwLCAweDMzLCAweDAxLCAweENDLCAweDg0LCAweEYwLCAweDEzLCAweEMyLAorMHg0RiwgMHgwMiwgMHgzRiwgMHgwOSwgMHhGQywgMHgwNCwgMHhGMCwgMHgxMywgMHhDMCwgMHg3QywgMHgwMCwgMHhCRiwgMHgwMSwKKzB4RkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsIDB4MDQsIDB4NzMsIDB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsIDB4MTcsCisweEMwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LCAweDA4LAorMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhGMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgzMCwgMHg5NCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NTAsIDB4MzgsIDB4NDIsIDB4RTEsIDB4MDgsIDB4ODUsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEYwLCAweDBFLCAweDQwLCAweDA4LCAweDAwLCAweEFELCAweDAwLCAweEI0LAorMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzQiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBQywgMHgxMiwgMHhCMCwgMHg1RSwgMHg0MCwKKzB4NTcsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MkQsCisweDE4LCAweDg0LCAweDIwLCAweEQ4LCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDNELCAweDAwLCAweDg0LCAweDAwLCAweEQwLAorMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMCwgMHhEMCwgMHgyMiwgMHg0MCwgMHg4QiwgMHgyMCwKKzB4MkQsIDB4MDgsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MTgsIDB4MDQsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDIsCisweEQwLCAweDBGLCAweDQwLCAweDM4LCAweDAwLCAweDYxLCAweDEwLCAweDg0LCAweDQzLCAweDE4LCAweDRFLCAweDQwLCAweDAzLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgzMSwgMHgwMCwgMHhDRCwgMHgwNiwKKzB4MDYsIDB4MEIsIDB4NTAsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MEIsIDB4RDAsIDB4MEMsCisweDQ0LCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwMiwgMHgzNCwgMHgwMywgMHg1MCwgMHgwQywgMHg1MCwgMHg1MCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwKKzB4N0MsIDB4NDAsIDB4RjMsIDB4MDAsIDB4ODEsIDB4MDMsIDB4MjQsIDB4MTYsIDB4OTAsIDB4MkQsIDB4NDAsIDB4MTMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDA1LCAweDAwLCAweDFGLCAweDAxLCAweDRDLAorMHgyOCwgMHhEMCwgMHgxMSwgMHhEMCwgMHg0NCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwNCwgMHhGMCwgMHgzMSwgMHhDMCwKKzB4NDQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4NUMsIDB4MDQsIDB4RjAsIDB4MTEsIDB4QzAsIDB4NDcsIDB4MDAsIDB4MUYsIDB4MDEsCisweDdDLCAweDA0LCAweEQwLCAweDAwLCAweEMwLCAweDc0LCAweDAwLCAweERGLCAweDAxLCAweDNDLCAweDAyLCAweEQwLCAweDBELAorMHhDMSwgMHhCOCwgMHgwMSwgMHg0MywgMHgwMywgMHg0QywgMHgwNSwgMHgzMCwgMHhCRCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0QsIDB4ODcsCisweEYwLCAweDFELCAweEMxLCAweDc3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDA3LCAweEYwLCAweDFELCAweEMwLCAweDc3LAorMHgxMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwNywgMHhGMCwgMHgxRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhERiwgMHg4MSwgMHg3QywKKzB4MDcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM1LCAweDQ0LCAweDVGLCAweDEwLCAweDdDLCAweDBCLCAweEYyLCAweDNELCAweEM0LCAweDA3LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgwRiwgMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHg4MCwgMHgzMCwKKzB4MDMsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4QkMsIDB4NDAsIDB4MzAsIDB4MDIsIDB4QzEsIDB4MEMsIDB4MDgsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDMyLCAweDEwLCAweEZDLCAweDgwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMCwgMHhFRiwgMHgwOSwgMHhDQywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4NUYsIDB4QzAsIDB4MTAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDMyLCAweDAwLCAweEQxLCAweDAwLCAweDM0LCAweDAzLCAweDkyLCAweDBELAorMHg0MiwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NzYsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MzcsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDIsCisweDBELCAweEMwLCAweDI0LCAweDA4LCAweDlELCAweDAxLCAweDQ0LCAweDAyLCAweDE0LCAweDBELCAweDQwLCAweDM3LCAweDAwLAorMHg5NSwgMHg5MywgMHgxNCwgMHgwQywgMHgxMCwgMHg0RCwgMHg0MCwgMHgxNSwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxNSwgMHgwMCwgMHg1NCwgMHgwMCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4NzYsIDB4ODAsIDB4RDksIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTgsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsCisweDIxLCAweDU0LCAweDBELCAweDEyLCAweDBELCAweDQ4LCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyOCwgMHgzNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5NCwgMHgwQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQ4LAorMHgwMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHgyMCwgMHgxNSwgMHgwMCwKKzB4NTQsIDB4MDIsIDB4MTEsIDB4MEQsIDB4NDAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEIwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEM4LCAweDA3LCAweDQwLAorMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMiwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3NCwgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDQsCisweDEwLCAweERGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDBELCAweEMwLCAweDNCLCAweDAwLCAweDkzLCAweDAwLCAweDRDLAorMHgwMiwgMHgzMiwgMHg0NSwgMHhDMCwgMHgwMCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTAsIDB4M0YsIDB4NDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDMsIDB4NTEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEM0LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRCwgMHgxMCwKKzB4QkQsIDB4MjAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4NDAsIDB4QUYsIDB4ODAsIDB4RkQsIDB4MDIsCisweEYwLCAweDI5LCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLAorMHgyRiwgMHgwMSwgMHg3MywgMHgwMSwgMHhGQywgMHgxMSwgMHgzNCwgMHgzMywgMHhDMCwgMHgxRSwgMHgwMSwgMHhCMywgMHgxNCwKKzB4Q0MsIDB4MDcsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MDEsIDB4QkYsIDB4ODAsIDB4Q0MsIDB4MjcsIDB4RjAsIDB4ODMsCisweEMwLCAweDc4LCAweDAwLCAweDIzLCAweDAxLCAweENDLCAweEIzLCAweEYwLCAweDRCLCAweEMwLCAweDFBLCAweDIxLCAweDczLAorMHgwMSwgMHhFQywgMHgxMCwgMHhGMiwgMHgxMywgMHhDMCwgMHgzQywgMHgwNSwgMHg3RiwgMHgwMSwgMHhGQywgMHgwNSwgMHhGMCwKKzB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4RjcsCisweDAwLCAweEQxLCAweDgxLCAweDc0LCAweDI1LCAweDEyLCAweDBELCAweDQwLCAweEQ0LCAweDAyLCAweDkxLCAweDAzLCAweDQ0LAorMHg4NywgMHhEMCwgMHgzOSwgMHg4MCwgMHhGRSwgMHgwMiwgMHg5RCwgMHgwMywgMHg0NCwgMHgxMywgMHhEMCwgMHg2MSwgMHg0MCwKKzB4MzQsIDB4NDQsIDB4MTMsIDB4ODEsIDB4RDQsIDB4MjMsIDB4RDAsIDB4QjksIDB4NDAsIDB4RDQsIDB4MDIsIDB4OTEsIDB4MDEsCisweDQ0LCAweDMxLCAweEQxLCAweDExLCAweDQwLCAweEZDLCAweDAwLCAweDlELCAweDgxLCAweDM0LCAweDg3LCAweEQwLCAweDFELAorMHg0NCwgMHgwRiwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhBMywgMHgwMCwKKzB4QzEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NTAsIDB4NEMsIDB4NDAsIDB4MTYsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MDMsCisweEQwLCAweDIwLCAweDQwLCAweDMwLCAweDAwLCAweDhELCAweDAyLCAweDA0LCAweDEzLCAweEQwLCAweDI4LCAweDQwLCAweDMwLAorMHgwMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg2MCwgMHgxMywgMHgwMCwgMHg4MSwgMHg4MCwgMHgyNCwKKzB4NDIsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MEMsIDB4NDAsCisweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDc1LCAweDAwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgxRCwgMHg0MCwgMHgzNCwgMHgwNCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgxMywgMHhEMCwKKzB4MzksIDB4NjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzQsIDB4MDAsCisweDU5LCAweDAwLCAweDU0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDE1LCAweDAwLCAweDkxLCAweDEwLCAweDQ0LCAweDYzLAorMHhEMCwgMHgyMSwgMHg0MCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwNiwgMHg3NCwgMHg5QiwgMHhEOCwgMHgwRCwgMHg0MCwgMHgwRiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4QTgsIDB4MjMsIDB4NDAsIDB4OTMsIDB4NDAsCisweDNDLCAweDNCLCAweDcxLCAweDFELCAweEMwLCAweEQyLCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDA3LCAweEYwLCAweDFELAorMHhDMCwgMHgzNCwgMHgwMCwgMHg4RiwgMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHg5MSwgMHhEMCwgMHgzNCwgMHgwMCwgMHgxMSwKKzB4MDcsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MTMsIDB4NDYsIDB4NTMsIDB4MDAsIDB4NkMsIDB4MEMsIDB4RjAsCisweDk4LCAweEUwLCAweDM2LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDA1LCAweEUwLCAweDBELCAweEMwLCAweDBCLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyNSwgMHgwMCwgMHhCRiwgMHg0NSwgMHhGQywKKzB4MDUsIDB4RjAsIDB4MEYsIDB4QzAsIDB4OUYsIDB4NDAsIDB4RUIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsCisweDNGLCAweDEwLCAweERGLCAweDA0LCAweEZDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDNGLCAweDQwLCAweEI3LCAweDA0LAorMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDNCwgMHg3RSwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHg4NCwgMHhGMCwgMHgwMywKKzB4NzAsIDB4MzUsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLCAweDkzLCAweDAxLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHhEMywgMHgxMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4REIsIDB4MTAsIDB4NUMsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDk2LCAweDg0LCAweDkzLCAweDAyLCAweDdDLCAweDA4LCAweEI0LCAweDJELCAweEMwLAorMHgzNywgMHgwMCwgMHhENywgMHgwMiwgMHg3QywgMHgwMiwgMHhCMCwgMHgwRCwgMHhDMCwgMHgyOSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4RTQsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzYsIDB4MDUsIDB4RDAsCisweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDNELCAweDAxLAorMHhEMSwgMHgwMCwgMHg0NCwgMHg4MywgMHhEQSwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDQiwgMHg4MiwgMHhDNCwgMHg0MywKKzB4RDEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4OEIsIDB4MUEsIDB4NzYsIDB4MDAsIDB4MTAsIDB4MDUsIDB4NDAsIDB4M0YsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweEIwLCAweDFELCAweEMwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwNSwgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzMsIDB4MDIsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDQsIDB4MzAsIDB4MDAsIDB4QzUsCisweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDM0LCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDA3LCAweEMwLAorMHgwOCwgMHg0MCwgMHhGMCwgMHgyMCwgMHhDMSwgMHgwMywgMHgzNCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg0OCwgMHgzMywgMHgwMCwKKzB4ODAsIDB4MDAsIDB4MzYsIDB4MDIsIDB4NTAsIDB4OEMsIDB4NDAsIDB4NEUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBELCAweDgwLCAweDc4LCAweDIwLCAweEUxLCAweDgxLCAweEI0LCAweDQ3LCAweEQwLCAweDFFLCAweDYwLAorMHg1QiwgMHgxMCwgMHhBMSwgMHg4MSwgMHhCNCwgMHgwNywgMHg1MCwgMHg5QiwgMHg0MiwgMHg3OSwgMHgwMCwgMHhBMSwgMHgwMSwKKzB4QTQsIDB4MDcsIDB4RDgsIDB4MTIsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RjksIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MUEsCisweDQwLCAweDVFLCAweDA0LCAweEE5LCAweDAxLCAweEI0LCAweDA1LCAweDkwLCAweDUyLCAweDQwLCAweDdCLCAweDAwLCAweEExLAorMHgwMSwgMHhCNCwgMHgwNiwgMHg5MCwgMHgxRSwgMHg0MCwgMHgzNiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDEsIDB4RjIsIDB4MEMsIDB4RTAsIDB4MzMsCisweDQwLCAweEMzLCAweDAwLCAweDNDLCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDMwLCAweDAwLCAweEM2LCAweDIwLCAweDI0LAorMHgwMywgMHhEMCwgMHg0QywgMHhDMCwgMHgzMCwgMHgzMCwgMHg4MywgMHg1OCwgMHgxQywgMHgwMywgMHhGMCwgMHgwOCwgMHhDMCwKKzB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4QjQsIDB4MEMsIDB4QzAsIDB4MzMsIDB4NDAsIDB4ODcsIDB4MDAsCisweDNDLCAweDAyLCAweDcwLCAweDBDLCAweEM0LCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMiwKKzB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QjMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDAzLCAweEQwLCAweDNGLCAweDAwLCAweEZGLCAweDIwLCAweERDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDFGLAorMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMywgMHg3MCwgMHg0QiwgMHhDQSwgMHhCRiwgMHg4MiwgMHhCRiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEE4LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMyLCAweDc3LCAweDAwLCAweDkzLAorMHg4MCwgMHg1QywgMHg4MywgMHg3MCwgMHgwOSwgMHg4MCwgMHhCNSwgMHgyMiwgMHhEMywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4NzcsIDB4MjAsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MzMsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDc4LCAweDAzLCAweEIwLCAweDFELCAweEMwLCAweDM2LCAweDgxLCAweERGLCAweDAwLCAweDRDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5OCwKKzB4QjksIDB4MTAsIDB4QUQsIDB4NDAsIDB4OUMsIDB4MEIsIDB4RDMsIDB4MEUsIDB4NDAsIDB4MTMsIDB4MDEsIDB4RTEsIDB4MDAsCisweDg0LCAweDAzLCAweEQwLCAweDJBLCAweDQwLCAweDMwLCAweDExLCAweEUxLCAweDIyLCAweEI0LCAweDgzLCAweEQwLCAweDBFLAorMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHg1MywgMHg4MCwgMHgwQSwgMHg0MCwgMHhCQiwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NjAsIDB4MzgsIDB4MDgsIDB4QUQsIDB4MDAsIDB4OTQsIDB4MDIsIDB4RDAsCisweDBFLCAweDQwLCAweDRGLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDc5LAorMHgwNSwgMHhBRCwgMHgwMywgMHhCNCwgMHg1NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMywgMHhDMSwgMHgwOSwgMHg5NiwKKzB4NDcsIDB4RDAsIDB4N0MsIDB4NEMsIDB4NzksIDB4NjAsIDB4RTEsIDB4MDUsIDB4QjYsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsCisweDdCLCAweDAwLCAweEUxLCAweDgzLCAweEI0LCAweDA3LCAweEMwLCAweERFLCAweDA4LCAweDdCLCAweDAxLCAweEFELCAweDAxLAorMHhCNCwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHg3QSwgMHg5MiwgMHhFRCwgMHg0MywgMHg4NCwgMHgwNiwgMHhEMCwgMHgxRSwKKzB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MzMsIDB4MDAsCisweDhELCAweDQwLCAweDE0LCAweDAyLCAweEQwLCAweDNELCAweDQxLCAweDIzLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDA2LAorMHhEMCwgMHgxQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHhFQywgMHg2MCwgMHgyMywKKzB4MDAsIDB4QzEsIDB4MDcsIDB4MzQsIDB4MDMsIDB4OTEsIDB4MUMsIDB4NDAsIDB4QTMsIDB4MDksIDB4OEQsIDB4MDAsIDB4MzQsCisweDFGLCAweDEwLCAweDNDLCAweDQ0LCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLAorMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxMSwgMHgxMCwgMHg2RiwKKzB4MDAsIDB4QkMsIDB4MjEsIDB4RjAsIDB4MDcsIDB4QzEsIDB4MUYsIDB4NDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDEsIDB4NzIsCisweDE3LCAweEMyLCAweDE1LCAweDAwLCAweDUyLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDM3LCAweEMwLCAweDE3LCAweDAwLAorMHg3MywgMHgyMywgMHg3QywgMHgwMSwgMHhGMiwgMHgxNSwgMHhDMywgMHg5RiwgMHgwMSwgMHg3RiwgMHgwNSwgMHhGQywgMHgxRCwKKzB4MzQsIDB4MTcsIDB4QzUsIDB4MTYsIDB4MDAsIDB4N0YsIDB4NDAsIDB4Q0MsIDB4ODEsIDB4RTAsIDB4MDUsIDB4QzAsIDB4NUYsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDIwLCAweDFGLCAweDA0LAorMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzgsIDB4MDcsIDB4NDIsIDB4MUYsCisweDAyLCAweDNDLCAweDAwLCAweEIwLCAweDAxLCAweEMyLCAweDAzLCAweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLCAweDcwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4OUIsIDB4MDEsIDB4NEMsCisweDIyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLAorMHg2MSwgMHgwMCwgMHg5NiwgMHgwNCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMiwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4NUMsIDB4MDIsIDB4NzgsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NDksCisweEM5LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFRSwgMHgwMCwgMHg5MSwgMHg4OSwgMHhDNCwgMHgwNiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4NkMsIDB4MDAsIDB4QUQsIDB4MDMsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDIsIDB4NjQsCisweDAwLCAweEIxLCAweDA3LCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweEE0LCAweDgyLCAweDhELCAweDAyLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwQiwgMHg0OCwgMHgyRiwgMHgwMCwgMHg5MSwgMHg0MCwgMHg3NCwgMHgwMiwgMHhCMCwgMHg3OSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MkMsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDA0LCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDE2LAorMHgwRCwgMHg2MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgwQSwgMHg0MCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMiwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4QTQsIDB4MjAsIDB4OUQsIDB4MTgsIDB4NTQsIDB4MDIsCisweDUwLCAweDA5LCAweDQxLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5OCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4ODgsCisweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDBBLCAweEQwLCAweDI4LCAweDQwLCAweDIwLCAweDAwLCAweDg5LAorMHgwMCwgMHgzNCwgMHgyMiwgMHg1MCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4RCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgxMCwKKzB4MDgsIDB4NDgsIDB4MjMsIDB4NDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MjIsIDB4OTgsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MjAsCisweDk1LCAweEMyLCAweDY0LCAweDBBLCAweDEwLCAweDA4LCAweDQwLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg0NiwgMHg0MCwgMHgxMywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMiwgMHgyMSwgMHhEMCwKKzB4NDQsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDUsIDB4MTUsIDB4MUYsIDB4MDEsCisweDdDLCAweDA4LCAweDcwLCAweDYxLCAweEQxLCAweDgwLCAweDAwLCAweDFELCAweDAwLCAweDVDLCAweDUwLCAweDUwLCAweDExLAorMHg0MCwgMHg0NywgMHgwMCwgMHg1MywgMHg0MCwgMHg2QywgMHg1OCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNSwgMHgwRiwKKzB4MDAsIDB4NEQsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzQsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE5LCAweEI4LCAweEFGLCAweDA4LCAweEJGLCAweDAwLCAweEZELCAweDBBLCAweEYwLCAweDRCLCAweEMwLCAweEFGLAorMHgwMCwgMHhCRiwgMHgwMiwgMHhGQywgMHgwNiwgMHhGMCwgMHgzQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCMywgMHgwMiwgMHg3QywKKzB4MTIsIDB4QjEsIDB4NEIsIDB4ODAsIDB4MkYsIDB4MDEsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MkIsIDB4QzAsCisweEFGLCAweDA4LCAweEJGLCAweDAwLCAweEY4LCAweDEyLCAweEYyLCAweDBBLCAweEM0LCAweDI3LCAweDAwLCAweEI3LCAweDAxLAorMHhEQywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTAsIDB4NkYsIDB4MDAsIDB4QkYsIDB4NDAsIDB4QzQsIDB4NTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NkYsIDB4MDEsCisweEJGLCAweDQxLCAweDdDLCAweDAyLCAweDMwLCAweDc5LCAweEMwLCAweDJDLCAweDAwLCAweEZGLCAweDMxLCAweDRDLCAweDIyLAorMHhGMCwgMHg0OSwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHhCMCwgMHg1QiwgMHhDMSwgMHg2RCwKKzB4MTQsIDB4QjMsIDB4NjAsIDB4NEMsIDB4NTIsIDB4MzIsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MjgsIDB4OUYsIDB4MDIsIDB4N0MsCisweDBBLCAweEYwLCAweDBCLCAweEM2LCAweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLAorMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwOCwgMHhEMCwgMHgwMSwgMHg0MywgMHg5NywgMHgwMCwgMHgxRCwKKzB4MDIsIDB4MzQsIDB4NTQsIDB4NTIsIDB4NzUsIDB4NTAsIDB4ODQsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NTQsIDB4MDAsIDB4OTAsCisweDQxLCAweDExLCAweDA0LCAweDQxLCAweDExLCAweDAwLCAweDc0LCAweDlDLCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLAorMHg1MSwgMHgwMCwgMHg1NCwgMHgxMSwgMHg1MCwgMHgwNSwgMHgwMCwgMHg4NywgMHgxMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwNCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsCisweEEzLCAweDgwLCAweERELCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweEIzLCAweDMwLCAweDhDLCAweDAyLAorMHgzNCwgMHgwMiwgMHgxMCwgMHhDOCwgMHg0MCwgMHgyMiwgMHgwMiwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHg1MCwgMHhDOCwKKzB4NDAsIDB4MjAsIDB4MjUsIDB4ODAsIDB4MDAsIDB4MzQsIDB4NjIsIDB4OTIsIDB4MDgsIDB4NjAsIDB4MjMsIDB4MDAsIDB4OTUsCisweDAwLCAweDE0LCAweDUyLCAweEQwLCAweDA4LCAweDQyLCAweDIzLCAweDgyLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLAorMHgwOCwgMHg0MCwgMHg0QiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwKKzB4MDAsIDB4OUQsIDB4MjIsIDB4NTQsIDB4MDIsIDB4RDAsIDB4NjksIDB4NDIsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MzQsCisweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI2LCAweDgwLCAweDlELCAweDAwLCAweDU0LCAweDgyLCAweDkwLCAweDA4LCAweDQxLAorMHgyMCwgMHgwMCwgMHg5MSwgMHgyNCwgMHg3NiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHhENSwgMHg0OCwKKzB4MTQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDIsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MUEsIDB4RDAsIDB4MDksCisweDQwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLAorMHg4RiwgMHg4MiwgMHg1RCwgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4MzAsIDB4QUIsIDB4QzAsIDB4MjYsIDB4MTAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjQsCisweDAwLCAweDkzLCAweDA0LCAweEZDLCAweDAyLCAweEIwLCAweDE4LCAweEM4LCAweDI3LCAweDQwLCAweDg3LCAweDAwLCAweDVDLAorMHgwQSwgMHg2MCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgyNCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsCisweDAwLCAweDZDLCAweDBFLCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDlFLCAweDA5LCAweDdDLCAweDBFLCAweEYwLAorMHgwOCwgMHhDMCwgMHgyNSwgMHg4MCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHhBNywgMHgxNCwKKzB4OUYsIDB4MjAsIDB4M0MsIDB4MDIsIDB4NzAsIDB4NTksIDB4Q0EsIDB4MjcsIDB4MDgsIDB4OUIsIDB4MTEsIDB4N0MsIDB4MDIsCisweEY4LCAweDQ5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDRCLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUIsIDB4MTAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MjEsCisweEQwLCAweDA0LCAweDAyLCAweDFGLCAweDA4LCAweDRELCAweDAwLCAweEYwLCAweDAxLCAweEUwLCAweDA0LCAweDAwLCAweDE3LAorMHgxMCwgMHg0QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwMiwgMHg0MCwgMHgxMywgMHgwMiwgMHg0QywgMHgwOCwgMHhGMiwKKzB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDFDLCAweDAwLCAweDVELCAweDAwLCAweDcwLAorMHgwMSwgMHgxOCwgMHgwNSwgMHg0OCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMywgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg1MCwKKzB4NTQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4OUMsIDB4MDEsIDB4N0QsIDB4NDEsCisweDdDLCAweDExLCAweDcwLCAweDA3LCAweEMwLCAweERFLCAweDAxLCAweDcwLCAweDAzLCAweDY4LCAweDAxLCAweDEwLCAweDM3LAorMHgwNSwgMHgxNCwgMHg4MCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMCwgMHg0NSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MjIsIDB4MjAsIDB4OEQsIDB4MDAsIDB4MzAsIDB4MDYsCisweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDEwLCAweDhDLCAweDA4LCAweDM2LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMwLAorMHgwMCwgMHg4RCwgMHgxMywgMHgyNCwgMHgwMywgMHhDMCwgMHgwQywgMHg0MCwgMHhCMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwKKzB4MDMsIDB4NTAsIDB4MzgsIDB4NDAsIDB4MjAsIDB4MjksIDB4QzAsIDB4MEEsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MzgsIDB4MDEsCisweDMxLCAweDAwLCAweENELCAweDgwLCAweDM2LCAweDAzLCAweEMwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHg0MCwgMHhCNCwgMHgwRiwgMHgxMCwKKzB4MEUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MjMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MjgsIDB4MDAsCisweEFELCAweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDRFLCAweDYwLCAweDM4LCAweDgwLCAweEZELCAweDAzLCAweEE0LCAweDIzLAorMHg1MCwgMHgyOCwgMHg0MCwgMHgzQSwgMHgwMCwgMHhGMSwgMHgwMCwgMHgyNiwgMHgyMywgMHgxMCwgMHgxQiwgMHg0MCwgMHgzOCwKKzB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MTMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDAxLCAweDNDLCAweDA3LCAweDM0LCAweDNFLAorMHhDMCwgMHg3QiwgMHgwMCwgMHhBRiwgMHg4MSwgMHhCQywgMHgwNywgMHgzNCwgMHg3RSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhBRCwKKzB4MDEsIDB4QTQsIDB4MUYsIDB4RjksIDB4QkYsIDB4NDAsIDB4NDgsIDB4MDAsIDB4RTcsIDB4MDEsIDB4QUMsIDB4MTcsIDB4NzAsCisweDE2LCAweEUwLCAweDY4LCAweDAwLCAweEUzLCAweDAxLCAweDhDLCAweDU3LCAweEIwLCAweDFFLCAweEUwLCAweDc5LCAweDAwLAorMHhFRCwgMHgwMywgMHhCRSwgMHgwRiwgMHhGMCwgMHgxRSwgMHhDNCwgMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MEQsIDB4NDQsCisweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDEwLCAweDhGLCAweDAwLAorMHg1QywgMHg0QiwgMHhGMCwgMHg2RCwgMHhEMCwgMHgwNywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHg4MywgMHg3MCwgMHgwNSwKKzB4QzAsIDB4MzMsIDB4MDgsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MEIsIDB4NzEsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MTAsIDB4REYsCisweDAwLCAweDc0LCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMCwgMHg2RiwgMHgwMCwgMHhGMywgMHgwOSwgMHhGQywgMHg4MywgMHgzMCwgMHg5RiwgMHhDMCwgMHg3RiwKKzB4MDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4ODAsIDB4N0QsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsCisweDI3LCAweDMwLCAweDFGLCAweEMwLCAweDdFLCAweDIyLCAweEZGLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDFGLCAweEMwLAorMHg2QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhCMCwgMHgxQiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhFRiwgMHgwOSwKKzB4OEMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEUxLCAweDgwLCAweEIwLCAweDUzLCAweEI0LCAweDBFLCAweDQ2LCAweDNCLCAweDAyLAorMHhFMSwgMHg4MCwgMHhCNCwgMHgwMywgMHg3MCwgMHg0RSwgMHg0OCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwNCwgMHhCNCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDEsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDYsIDB4QjQsIDB4MDIsIDB4OTAsIDB4MEUsIDB4QzQsIDB4MzksCisweDAwLCAweDJGLCAweDAwLCAweEY0LCAweDgzLCAweDEwLCAweDRBLCAweDAwLCAweDNCLCAweDA4LCAweEVELCAweDIwLCAweEFDLAorMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjksIDB4MDQsIDB4RTEsIDB4MDAsIDB4MzAsIDB4MzMsIDB4MTgsIDB4MEUsIDB4NjAsIDB4MzMsIDB4QzAsIDB4RTksCisweDEwLCAweEI0LCAweDI3LCAweEQwLCAweDFGLCAweDcyLCAweDNCLCAweDAwLCAweEFELCAweDgwLCAweEI0LCAweDAzLCAweDk4LAorMHgwQywgMHg0MCwgMHgyOSwgMHgyMCwgMHhFQywgMHgxMCwgMHhBNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQSwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4QTAsIDB4RkQsIDB4MTEsIDB4QzQsIDB4MDcsCisweDEwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LAorMHg2MywgMHgwMCwgMHhDMSwgMHgyMCwgMHgzNCwgMHg4QiwgMHg5MCwgMHgxQywgMHg0MCwgMHhCMywgMHgwMSwgMHg0OSwgMHgyMCwKKzB4MzQsIDB4MDcsIDB4NTAsIDB4MkMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MzQsIDB4MDMsIDB4OTQsIDB4MUMsCisweDY0LCAweDYxLCAweDAwLCAweDBELCAweDEzLCAweDc0LCAweDgyLCAweDkwLCAweDlDLCAweDQwLCAweEYxLCAweDAwLCAweDA1LAorMHgwMywgMHgzNCwgMHgwMywgMHgxMSwgMHgxQywgMHg0MCwgMHgzMywgMHgxMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwQiwgMHg1OCwKKzB4MEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4NjUsCisweDAwLCAweEMzLCAweDA0LCAweDdDLCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDM3LCAweDA0LCAweDhCLCAweDAxLCAweDc0LAorMHgwMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNywgMHgwMCwgMHhERiwgMHgxMSwgMHhGQywgMHgwMywgMHhCMCwgMHgyRiwgMHhDMCwKKzB4MzUsIDB4MTEsIDB4NUYsIDB4MDMsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTYsIDB4MDgsIDB4OUQsIDB4MDQsCisweEZDLCAweDE3LCAweDU0LCAweDY4LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweEMzLCAweDQ1LCAweDEzLCAweDE1LCAweDBELAorMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHg0MCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MTMsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MjMsCisweEYwLCAweDRELCAweEQwLCAweDI3LCAweDAwLCAweERGLCAweDAyLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweDAwLCAweEI0LAorMHgwOCwgMHg1RiwgMHg4MCwgMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgwNiwgMHg5RiwgMHgwMiwgMHgzQywKKzB4MDMsIDB4NTAsIDB4MDksIDB4QzAsIDB4MzMsIDB4MDAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsCisweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDI3LCAweDAwLCAweEZGLAorMHg5MCwgMHhDRCwgMHgwMywgMHhGMSwgMHgwRiwgMHhDMSwgMHgzRSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDRSwgMHgwMywgMHgzMiwKKzB4MEYsIDB4RTAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4NUYsIDB4MDAsCisweDdGLCAweDAxLCAweEZDLCAweDIzLCAweDM4LCAweDA1LCAweEUwLCAweDJDLCAweDAxLCAweDM4LCAweDkwLCAweEZDLCAweDAzLAorMHgzMCwgMHg0QiwgMHhERCwgMHgzRCwgMHgwMCwgMHhGMywgMHgxMCwgMHhDQywgMHg0MywgMHg3OCwgMHg5RiwgMHhDMCwgMHgxMywKKzB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NTYsIDB4MDAsIDB4REQsIDB4NDksCisweDQ0LCAweDAzLCAweDcwLCAweDBDLCAweDQwLCAweDc0LCAweDA4LCAweDlELCAweDAwLCAweDA0LCAweDAzLCAweEIwLCAweDBELAorMHhDMCwgMHg2NiwgMHg4MCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgxNSwgMHgwMywgMHgxRCwKKzB4MjMsIDB4NUMsIDB4MDIsIDB4QjAsIDB4MDQsIDB4NDQsIDB4MjUsIDB4MDAsIDB4MUQsIDB4NDEsIDB4NzQsIDB4MDMsIDB4NzAsCisweDA5LCAweDQwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweDE3LCAweDAyLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNCwgMHgwMSwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4RDAsIDB4MEQsIDB4NjAsIDB4MzYsIDB4MDIsIDB4OUQsIDB4MDQsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDgsCisweDM0LCAweDAyLCAweERELCAweDA2LCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDYwLCAweDA3LCAweDAwLCAweDlELCAweDQ0LAorMHg3NCwgMHgwMywgMHg5MywgMHgwRCwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMywgMHgxMCwgMHgyOSwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4QzAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweERELCAweDIwLCAweDA0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHg4MCwgMHg4RCwgMHgwMCwgMHg0NSwgMHgwMywgMHg5OSwgMHgwQywgMHg0MCwgMHgzMCwKKzB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTAsCisweDAyLCAweDkwLCAweDBDLCAweDYwLCAweDExLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAzLCAweDUwLCAweDA4LCAweDQwLAorMHgzMCwgMHg0MCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHhBMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MjYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RjgsCisweDBELCAweEMwLCAweDM2LCAweDAwLCAweERGLCAweDQwLCAweEM2LCAweDAzLCAweDMyLCAweDBGLCAweDUwLCAweDI0LCAweDIwLAorMHg1RCwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3OCwgMHgwMywKKzB4OTAsIDB4MEQsIDB4NDAsIDB4MjQsIDB4MDgsIDB4MUYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MDUsIDB4QzAsIDB4MzUsCisweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDAzLCAweEM0LCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3QSwgMHgwRiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjMsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4N0YsCisweDAwLCAweEZDLCAweDgzLCAweEYxLCAweDBGLCAweDgwLCAweDBELCAweDAwLCAweDNFLCAweDAwLCAweERDLCAweDgyLCAweEYwLAorMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwNywgMHg0MCwgMHgzRiwgMHgwMCwKKzB4RjcsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjgsIDB4MEIsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDVGLCAweDAwLCAweDMzLCAweDhDLCAweENDLCAweDEwLCAweDMwLCAweDFGLCAweEMwLAorMHgyRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgxRiwgMHhFMCwgMHg3RiwgMHgwMCwgMHhCQiwgMHgwMSwKKzB4RjQsIDB4MDcsIDB4NzAsIDB4MEIsIDB4QzAsIDB4N0MsIDB4MDUsIDB4RkYsIDB4NDIsIDB4RkMsIDB4MzIsIDB4RjAsIDB4NEYsCisweEM4LCAweDNGLCAweDAxLCAweEZGLCAweDAxLCAweEZDLCAweDBDLCAweDMwLCAweDRGLCAweEMwLCAweDRFLCAweDAwLCAweEIzLAorMHgwMCwgMHg3QywgMHg3MywgMHhGMCwgMHg0RiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4MTEsIDB4MEUsIDB4NkMsIDB4MjQsIDB4MzAsIDB4MUQsIDB4NDAsIDB4MjMsCisweDAwLCAweDUxLCAweDAzLCAweDE0LCAweDAyLCAweDUwLCAweDRELCAweDQ5LCAweDMzLCAweDEwLCAweEMxLCAweDEwLCAweDc0LAorMHgwNCwgMHgxMCwgMHhCOSwgMHhFMCwgMHhGRSwgMHgwMCwgMHhGRCwgMHgwQSwgMHg3NCwgMHgyMiwgMHhEMCwgMHhCRiwgMHg0MCwKKzB4M0YsIDB4MEIsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4M0QsIDB4NDAsIDB4NDQsIDB4MDAsIDB4OTEsIDB4MEIsCisweEY0LCAweDAzLCAweEQxLCAweDFGLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHhBMCwgMHgyNywgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwKKzB4ODEsIDB4MDIsIDB4MDQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4NzQsIDB4MDMsCisweDU0LCAweDA0LCAweDUwLCAweDMyLCAweDIwLCAweEM1LCAweDg0LCAweDM0LCAweDEyLCAweEQwLCAweDBDLCAweDQwLCAweDMxLAorMHgwNCwgMHhDRCwgMHgwMCwgMHg1NCwgMHgxMSwgMHgxMCwgMHgyQywgMHg0OCwgMHg0NiwgMHg4MCwgMHhDMSwgMHgwMCwgMHgxNCwKKzB4MTMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEE4LCAweDI1LCAweDAyLCAweDUxLCAweDAwLCAweDQ0LCAweDA4LCAweDEwLCAweDBELCAweDQwLCAweDI3LCAweDAyLCAweDUxLAorMHgwMCwgMHg1NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0OCwgMHgzNywgMHgwMCwgMHhEOSwgMHgwMywgMHg3NCwgMHgxOCwgMHgxNCwKKzB4MTUsIDB4NTAsIDB4MzYsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzAsIDB4MjIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MjAsCisweERELCAweDAwLCAweDc0LCAweDA5LCAweDUwLCAweDBELCAweDQwLCAweDQ2LCAweDQwLCAweEQxLCAweDExLCAweDc0LCAweDAzLAorMHhEMSwgMHgwRCwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwKKzB4NTMsIDB4MDEsIDB4MTMsIDB4MTAsIDB4NDQsIDB4MEMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4NDAsIDB4MTMsIDB4ODAsCisweDQ0LCAweDA2LCAweDM0LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERCLCAweDAxLCAweDNDLCAweDA5LCAweDcwLCAweDMxLAorMHg0MCwgMHgzNiwgMHgzMCwgMHhERiwgMHgwMCwgMHg3OCwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MEMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDIsIDB4MTAsIDB4RDMsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjEsCisweDBELCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDdELAorMHg1MCwgMHhFRiwgMHgxMCwgMHhCQywgMHgyMiwgMHg3MCwgMHgwRiwgMHhDMCwgMHgyQiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhCOCwKKzB4MjYsIDB4QjAsIDB4MEYsIDB4ODgsIDB4M0YsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDNGLCAweDAwLCAweEZGLCAweDIwLCAweEY4LCAweDA2LCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDEwLAorMHhGQywgMHgyNCwgMHhGMCwgMHgwRSwgMHhDMCwgMHgwRCwgMHgyOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDgsCisweDFGLCAweDAwLCAweDZDLCAweDI5LCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDAxLCAweEM3LCAweDgwLCAweDRDLCAweDAzLAorMHgzNCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMiwgMHg0RSwgMHgwOCwgMHgyMiwgMHgwNSwgMHhDOCwgMHgzNCwKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkQsCisweDA5LCAweDcwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDBBLCAweDdDLCAweDAzLCAweEYxLCAweDBELCAweEM0LAorMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NDUsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QTcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NEQsIDB4MDMsIDB4MTAsCisweDBELCAweEMwLCAweDc2LCAweDAyLCAweEQxLCAweDAwLCAweDQ1LCAweDAxLCAweEIwLCAweDA0LCAweEMxLCAweDNFLCAweDAwLAorMHhGRCwgMHgwMCwgMHg3QywgMHgwMywgMHhDMSwgMHgxRiwgMHhDMSwgMHgzRSwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMSwKKzB4MTAsIDB4MEYsIDB4QzAsIDB4NDUsIDB4MDAsIDB4REQsIDB4NDEsIDB4RjQsIDB4ODMsIDB4RDAsIDB4NUYsIDB4NDAsIDB4NEYsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDAwLCAweDhELCAweDAxLAorMHgwNCwgMHgwNywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4RjQsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MDYsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NzAsIDB4MDAsIDB4Q0QsCisweDgwLCAweDM0LCAweDAzLCAweEMwLCAweDFDLCAweDQwLCAweDMwLCAweDA4LCAweENELCAweEMwLCAweDA0LCAweDAxLCAweDUwLAorMHgwQywgMHg0MCwgMHg1MywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgxRiwgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NjgsIDB4MDAsIDB4MkQsIDB4MTksIDB4MDQsCisweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLCAweDYxLCAweDAxLCAweEE0LCAweDI3LCAweDkwLCAweDFFLCAweDQwLAorMHg3QSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhDNCwgMHgwNCwgMHg5OSwgMHg5QSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHg4MSwKKzB4OTQsIDB4MDcsIDB4RDAsIDB4OUUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4ODEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQwLCAweDQ5LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDI3LCAweEQwLCAweDFFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgyMCwgMHgwMCwgMHhERiwgMHgwMCwgMHgwNCwgMHgwMywKKzB4MzAsIDB4MEMsIDB4QzAsIDB4MjIsIDB4MDIsIDB4ODUsIDB4MDgsIDB4MDQsIDB4MjMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDA0LCAweEM3LCAweDA4LCAweDA0LCAweDQyLCAweDMwLCAweDAwLCAweEMwLCAweDMwLCAweDA0LCAweENGLCAweDAwLCAweDM0LAorMHgwMiwgMHhGMCwgMHg4QywgMHhDMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHg4MCwgMHg0QywgMHgwMSwgMHg3MCwgMHgwQywgMHhDMCwKKzB4MTMsIDB4ODQsIDB4Q0YsIDB4MDAsIDB4MUMsIDB4MTcsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDJELCAweDAwLCAweDdGLCAweDAwLCAweERELCAweDAzLCAweEQwLAorMHgwRiwgMHhDMCwgMHgyRiwgMHg4MCwgMHg3RiwgMHgwMCwgMHhERSwgMHhBMywgMHg3MCwgMHgwRiwgMHhDOCwgMHgzRiwgMHgwMCwKKzB4RjcsIDB4MDAsIDB4QkMsIDB4MjIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjIsCisweEYwLCAweEFFLCAweEMyLCAweDNGLCAweDIwLCAweEZGLCAweDA4LCAweERDLCAweDIxLCAweEYwLCAweDBGLCAweEM0LCAweDBGLAorMHgxMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzEsIDB4MEQsCisweEMwLCAweDNGLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwNCwgMHgzMCwgMHgxNSwgMHhDMCwgMHhCNSwgMHgwNCwgMHhERiwgMHgwNywgMHg2QywgMHgwMywgMHhGMCwKKzB4NUQsIDB4QzAsIDB4MzYsIDB4MDUsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTMsIDB4MDAsCisweEQxLCAweDQwLCAweDc4LCAweDE3LCAweDM0LCAweDJELCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHg5OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4OTAsIDB4QUMsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4RUQsIDB4MjAsCisweEI0LCAweDAwLCAweDUwLCAweDBFLCAweDQwLCAweDM4LCAweDAxLCAweENELCAweDEyLCAweDg0LCAweDAzLCAweEQwLCAweDBFLAorMHg0MCwgMHhCOCwgMHgwMCwgMHhFNywgMHgwMCwgMHg5QywgMHgwMywgMHhEMCwgMHg2RSwgMHg0MCwgMHgwQiwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4RjQsIDB4MkIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweEU5LCAweDAwLCAweDhELCAweDAzLCAweDI0LCAweDA1LCAweDk0LCAweDFFLCAweDQwLCAweDdCLAorMHgxMCwgMHhFQywgMHgwMywgMHhCNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgyMCwgMHhFRCwgMHgwMSwgMHhGNiwKKzB4MDcsIDB4MTAsIDB4MTQsIDB4NDEsIDB4NzksIDB4MDIsIDB4RUQsIDB4MDUsIDB4ODQsIDB4MDcsIDB4NTAsIDB4REMsIDB4NDAsCisweDdBLCAweDAwLCAweEVELCAweDAxLCAweDk2LCAweDA1LCAweEQwLCAweDFFLCAweDQwLCAweDVCLCAweDgwLCAweEUxLCAweDQxLAorMHhCNCwgMHgxNywgMHgxMCwgMHg5RSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MjAsIDB4NjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MTMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDIsCisweEM5LCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQyLCAweDMzLCAweDAwLCAweDRDLCAweDA4LCAweDM0LCAweDBCLAorMHg1MCwgMHgzQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDQywgMHgwMCwgMHgwNCwgMHgwNywgMHhEMSwgMHgwQywgMHg0MCwgMHgzMiwKKzB4MjAsIDB4QzUsIDB4MDAsIDB4NTQsIDB4MEIsIDB4RDAsIDB4MEMsIDB4NDQsIDB4MjMsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorMHhBOCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwQSwgMHhFQywgMHgxRCwgMHhCMCwgMHgwNSwgMHg0MCwgMHg1NywgMHgwMCwgMHg3RiwKKzB4MEEsIDB4N0MsIDB4MDEsIDB4QjQsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MTAsIDB4N0QsIDB4MDIsIDB4RkMsIDB4MjEsIDB4MzAsCisweDI3LCAweEMwLCAweDE1LCAweDEwLCAweDVGLCAweDAwLCAweDRDLCAweDE1LCAweEYwLCAweDA1LCAweEMwLCAweDE2LCAweDgwLAorMHg1RiwgMHhDMCwgMHhEQywgMHgwMSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxRiwgMHgwMiwgMHg3MywgMHgwMiwgMHg3NCwgMHgwMSwKKzB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsCisweDA3LCAweDAwLCAweDBGLCAweDAyLCAweDNDLCAweDAwLCAweDcwLCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgyMCwgMHhGMCwgMHg0MSwKKzB4QzAsIDB4MDMsIDB4ODAsIDB4MUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDEsIDB4ODAsIDB4MUYsCisweDAyLCAweDVDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MjIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweEEyLCAweEYwLCAweDA5LCAweEMwLAorMHg2NywgMHgwMCwgMHg5QiwgMHg4MCwgMHg3QywgMHgwMiwgMHhEMiwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHg4NCwKKzB4N0MsIDB4MDIsIDB4QjAsIDB4MDgsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OEYsIDB4MDEsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLAorMHg5RCwgMHgwMywgMHg0NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg2QywgMHgyMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NkMsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDc0LAorMHgwMiwgMHg1MCwgMHgwOSwgMHhDMCwgMHg2NiwgMHgwMiwgMHg5RCwgMHgwOSwgMHg2QywgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsCisweDA0LCAweDQ0LCAweDAyLCAweDE5LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDU4LAorMHgwOSwgMHg0MCwgMHgyNywgMHgwNSwgMHg5RCwgMHgwMCwgMHg2NiwgMHgwMiwgMHg1MiwgMHg4RCwgMHg0MCwgMHgyNywgMHgwMSwKKzB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTAsIDB4MDIsIDB4NzQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweEMwLCAweDQ0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhBMCwgMHgwMCwgMHg4RCwgMHgwNCwKKzB4MDQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDEsIDB4ODUsIDB4MDQsIDB4MjQsIDB4MTIsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweDlELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDIzLCAweDAxLCAweDgxLAorMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0OCwgMHgyMSwgMHgwMSwgMHg4MSwgMHgwMCwgMHgzNCwgMHgyMiwgMHg1MCwKKzB4MDgsIDB4NEEsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MjYsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDgsIDB4NDMsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDVGLCAweDBBLCAweDRDLAorMHgwMCwgMHgzMSwgMHgwMSwgMHg0MCwgMHg4NywgMHgwMiwgMHgxMywgMHgwMCwgMHgwQywgMHgyOCwgMHg3MCwgMHhBMSwgMHhDMCwKKzB4ODcsIDB4MDIsIDB4MUYsIDB4MEEsIDB4NjQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MEEsCisweDc0LCAweDI4LCAweEYwLCAweDQxLCAweDQxLCAweDg3LCAweDQyLCAweDEzLCAweDBBLCAweDdDLCAweDA4LCAweEIwLCAweDQxLAorMHhDMSwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4NkYsIDB4MDAsIDB4QkYsIDB4MjgsIDB4RjUsIDB4MjIsCisweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDI4LCAweEZDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHhCRSwgMHg0MCwgMHhCRCwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwOCwgMHhGQywKKzB4MjIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsCisweDJGLCAweDAwLCAweEJGLCAweDA4LCAweDdDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MCwgMHgyNywgMHgwMCwgMHhCRiwgMHgxNCwgMHhDQywgMHgxMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4NzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsCisweDhGLCAweDAwLCAweEJDLCAweDAyLCAweDMyLCAweDBCLCAweEMwLCAweDJDLCAweDAxLCAweDlGLCAweDE0LCAweDRDLCAweDMyLAorMHgzMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHgwOCwgMHg0QywgMHgwMiwgMHhGMiwgMHg0OSwgMHhDMSwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MjAsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDU3LCAweDA1LCAweDFELCAweDA0LCAweDQ0LCAweDIwLCAweEQwLCAweDAxLAorMHg0OCwgMHgwNywgMHgwNCwgMHgxQiwgMHgwOCwgMHg3NCwgMHg1MCwgMHgxMCwgMHg0MSwgMHg0MCwgMHgwNywgMHg4MSwgMHgxRCwKKzB4NTAsIDB4NzQsIDB4MDAsIDB4MTEsIDB4ODEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUQsIDB4MDQsIDB4NDUsIDB4MzAsIDB4QjAsCisweDIxLCAweEMwLCAweDA2LCAweDBDLCAweDExLCAweDAwLCAweDQ0LCAweDUwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLAorMHgxRCwgMHgwMiwgMHg3NCwgMHg0MCwgMHgxMCwgMHgwMSwgMHhDMCwgMHg3MiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDIzLCAweDAyLCAweDgxLCAweDAxLCAweDE0LCAweDMyLCAweDUxLCAweDQ4LCAweDQxLCAweDIzLCAweDAxLCAweDhELCAweDA1LAorMHg3NCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMiwgMHg4OSwgMHgxNCwgMHgwNCwgMHgxMiwgMHgxMCwgMHg4OCwKKzB4NDAsIDB4MjAsIDB4NDIsIDB4ODEsIDB4MDAsIDB4MjQsIDB4MTIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4ODAsIDB4OEQsCisweDA5LCAweDM0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMiwgMHg5RCwgMHgwNCwgMHg0NCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDIsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDAyLCAweDEwLCAweDI5LCAweDQwLCAweDI0LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDIyLCAweDk0LCAweDA5LCAweDQwLAorMHgyNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgwMCwgMHg5RCwgMHgwOCwKKzB4NzQsIDB4MDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDA4LCAweDJELCAweDEwLCAweDlGLCAweDAxLCAweDRDLCAweDA2LCAweEYwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MywgMHgwMSwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzQywgMHg0NiwKKzB4MzQsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsCisweDAwLCAweDkzLCAweDAwLCAweDZELCAweDZFLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDAwLCAweDlGLCAweDAyLCAweDc4LAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MDAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsCisweDgzLCAweDdFLCAweDBFLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDQ5LCAweDdDLCAweDI2LCAweEYwLAorMHg0OSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgyMCwgMHgzQywgMHgwNiwgMHg3MSwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NUMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4M0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LAorMHg4NSwgMHgwMCwgMHgwRiwgMHgwMSwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMSwgMHgxRiwgMHgwMCwKKzB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUIsIDB4MDAsIDB4NEYsIDB4MDAsIDB4QjAsIDB4MDEsCisweEMwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAwLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsCisweDAwLCAweDdELCAweDAwLCAweDc0LCAweDgxLCAweEQwLCAweDA1LCAweEMwLCAweDlELCAweDA0LCAweDVELCAweDAwLCAweDdFLAorMHgwMSwgMHhEMCwgMHgxNSwgMHg0MCwgMHg1RiwgMHgwMSwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwMSwgMHgxNCwgMHgwNCwgMHhEMCwKKzB4MTYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4NDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MTAsCisweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQ0LCAweDE3LCAweDIwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA0LAorMHg0MCwgMHg1MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4REEsIDB4MEMsIDB4NDgsIDB4MzUsIDB4MjAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDMsCisweEQwLCAweDlDLCAweDQwLCAweDMzLCAweDgwLCAweEM5LCAweDIwLCAweDEwLCAweDAyLCAweDkwLCAweDhDLCAweDQwLCAweDIyLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwMywgMHgxOCwgMHgwOCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhERCwgMHgwMSwgMHgyNCwKKzB4ODMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4ODIsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsCisweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDgxLCAweEVELAorMHgwMCwgMHhCNCwgMHg0MywgMHhEOSwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHg0MywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NkIsIDB4MDEsIDB4RjEsIDB4MDUsIDB4RDQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NTAsIDB4M0EsIDB4MDAsCisweEVELCAweDA4LCAweDM0LCAweDAzLCAweDE4LCAweDBFLCAweDQwLCAweDM5LCAweDA4LCAweEVELCAweDAwLCAweEE0LCAweDAzLAorMHhDMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg4MCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxMywKKzB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4RjgsIDB4MDAsIDB4MkYsIDB4MDEsCisweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDU5LCAweDAwLCAweEVGLCAweDAxLCAweEI0LCAweDA2LCAweEYwLCAweDFFLAorMHhFNCwgMHhGQiwgMHgwMCwgMHhFQiwgMHgxMSwgMHg5NCwgMHgwNywgMHhCMiwgMHgxRSwgMHhEMCwgMHg3QSwgMHgwMCwgMHhFRiwKKzB4MTUsIDB4QkMsIDB4NUYsIDB4NzAsIDB4MUMsIDB4QzAsIDB4NzksIDB4MDAsIDB4RkYsIDB4MDEsIDB4QUMsIDB4MDcsIDB4RTAsCisweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweEI0LCAweDM3LCAweEYwLCAweDFBLCAweEMwLCAweDUzLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTUsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4QjAsIDB4MEQsIDB4QzAsCisweDAzLCAweDAwLCAweERGLCAweDA4LCAweDZDLCAweDAzLCAweEYyLCAweDBDLCAweEQwLCAweDM3LCAweDAwLCAweERGLCAweDIwLAorMHg3QywgMHgwMywgMHhGNCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwNywgMHg1RiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdCLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA3LAorMHhGQSwgMHg4RiwgMHhDMCwgMHg2RiwgMHgwMiwgMHhGMywgMHgwOSwgMHg4QywgMHgwRiwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwKKzB4MDAsIDB4RjMsIDB4MDEsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0MsIDB4MzAsIDB4RjcsIDB4NDEsIDB4Q0MsCisweDA3LCAweDcwLCAweDFGLCAweEM0LCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweERDLCAweDQ3LCAweDcyLCAweDFGLCAweEM4LAorMHg3QiwgMHgyMiwgMHhGNywgMHhBMSwgMHhGQywgMHg4NywgMHgzMiwgMHgxQiwgMHhDMiwgMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MzksIDB4MDAsIDB4NjEsIDB4NDAsIDB4ODQsIDB4MDMsIDB4NzgsCisweDBFLCAweDQ0LCAweDJCLCAweDEwLCAweEUxLCAweDIwLCAweEFDLCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhGMSwgMHgwMCwgMHg4NCwgMHgxMywgMHg1MCwgMHg0RSwgMHg0NCwgMHgzOSwgMHgwMCwgMHhGMSwgMHgwMCwgMHhDNCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4QzAsIDB4M0UsIDB4MDIsIDB4RTEsIDB4MDAsIDB4ODYsIDB4MDMsIDB4RjAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDQwLCAweEU1LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3RCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHg4RSwKKzB4NDAsIDB4MEIsIDB4MDAsIDB4QzAsIDB4MjAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsCisweDAyLCAweEM0LCAweDAzLCAweDEyLCAweDBFLCAweDYwLCAweDM4LCAweDAwLCAweEU1LCAweDAwLCAweDg0LCAweDAzLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHhENCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzRiwgMHg0MCwKKzB4RUQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDMzLCAweDAwLCAweDQxLCAweDAzLCAweDA1LCAweDFCLCAweDUwLCAweDBDLCAweDQwLAorMHg0MywgMHg0MCwgMHhDMSwgMHgwMiwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgxMywgMHgwMCwgMHhDMSwgMHg0MSwKKzB4MDQsIDB4MDMsIDB4NTEsIDB4MEMsIDB4NjAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDBCLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAyLCAweDhELAorMHg0MiwgMHgzNCwgMHgwMywgMHgxNCwgMHgwQywgMHg1MCwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTgsIDB4QjUsIDB4NDIsIDB4RDcsIDB4MDYsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjcsCisweDA0LCAweEQzLCAweDAwLCAweDRDLCAweDAyLCAweDM0LCAweDBELCAweEMwLCAweDNGLCAweDQwLCAweEYxLCAweDAxLCAweDBDLAorMHgwNywgMHgzMCwgMHhBQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhGNywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwKKzB4M0QsIDB4MDAsIDB4RDMsIDB4MDAsIDB4REMsIDB4MjMsIDB4NzAsIDB4MEQsIDB4NDAsIDB4RjcsIDB4NDIsIDB4REYsIDB4MDIsCisweEZDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHhBNywgMHgwMCwKKzB4REYsIDB4MDEsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NUMsIDB4NjMsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM2LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweDA4LCAweDNGLCAweDAwLCAweDMzLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDA3LCAweDAwLCAweEY3LAorMHgxMCwgMHhGQywgMHgwMiwgMHgzMCwgMHg1RiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwKKzB4OUIsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RTMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsIDB4M0YsIDB4MDAsCisweEIzLCAweDAxLCAweEZFLCAweDAzLCAweEYwLCAweDBGLCAweENBLCAweEJGLCAweDAwLCAweEZFLCAweDEwLCAweEY0LCAweDAzLAorMHgzMCwgMHg1QSwgMHg4MCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwKKzB4MzYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QzcsIDB4MDQsIDB4RDEsIDB4MDAsCisweDc0LCAweDI2LCAweDEwLCAweDFELCAweDQwLCAweDA3LCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDFELAorMHg1MCwgMHgzNSwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwKKzB4MDMsIDB4NzYsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MjAsIDB4REQsIDB4MDksIDB4NzQsIDB4MDMsIDB4MTAsCisweDA5LCAweEMwLCAweDA1LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDMyLAorMHgwMCwgMHhEMSwgMHgwMSwgMHg3NCwgMHgyMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHhENSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDIsIDB4REQsIDB4MDAsIDB4NzYsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsCisweDc0LCAweDIwLCAweEQxLCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDRELCAweDQwLCAweDMzLCAweDI4LCAweEQxLCAweDA0LAorMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHgwMywgMHgwMCwgMHgwOSwKKzB4NDAsIDB4MDUsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsCisweDA1LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLAorMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweDM0LCAweDIzLCAweDEwLCAweDA4LCAweDQwLAorMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgzRSwgMHgwMCwgMHgwMywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MTQsCisweDA5LCAweEMwLCAweDIzLCAweDEwLCAweEZGLCAweDAwLCAweDdDLCAweDAzLCAweDM0LCAweDBELCAweEMwLCAweDM0LCAweDAwLAorMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhDMywgMHgyMCwgMHg3NCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDEsCisweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4ODAsIDB4MEYsIDB4MDAsIDB4RkEsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweDgwLCAweDNGLCAweDA4LCAweEZGLCAweDAwLCAweEIwLCAweDAzLCAweEYwLAorMHgwRiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgxNSwgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4OEMsIDB4Q0MsCisweDEyLCAweDMyLCAweENGLCAweEMwLCAweDVFLCAweDIyLCAweEIzLCAweDIxLCAweEZDLCAweDA2LCAweEYwLCAweENGLCAweEM0LAorMHgzRCwgMHgwMywgMHgyMywgMHgwMSwgMHhGQywgMHgyMywgMHhGMCwgMHgxMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHg0QywKKzB4Q0MsIDB4MDYsIDB4QjAsIDB4MTcsIDB4RDgsIDB4NUMsIDB4MDAsIDB4RjcsIDB4MDQsIDB4QUMsIDB4MDQsIDB4QjAsIDB4NEYsCisweEMxLCAweDdBLCAweDA4LCAweDNGLCAweDAxLCAweERDLCAweDMwLCAweEIwLCAweDFCLCAweEM0LCAweDBGLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwRSwgMHg0NCwgMHgyNiwKKzB4MTAsIDB4RUYsIDB4NDAsIDB4MjQsIDB4MDEsIDB4RDEsIDB4MDQsIDB4NzQsIDB4MDUsIDB4NzAsIDB4MkYsIDB4NDAsIDB4QkMsCisweDAyLCAweDkxLCAweDAxLCAweEY0LCAweDFCLCAweDkwLCAweDQwLCAweDQwLCAweEZGLCAweDAyLCAweEZELCAweDA4LCAweDQ0LAorMHhDMywgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhGMSwgMHgwMSwgMHg0NCwgMHgwNSwgMHgxMCwgMHgzRiwgMHg0MCwKKzB4NzQsIDB4MTAsIDB4MUQsIDB4QTEsIDB4MzQsIDB4MzgsIDB4QjAsIDB4MUMsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDAyLCAweDEwLAorMHg0QywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgxMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHg2QywgMHg0OCwgMHgzMywgMHgxMSwKKzB4NDUsIDB4MDAsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4MTAsIDB4QzUsIDB4NDQsIDB4MDQsIDB4MTMsCisweDkwLCAweDA4LCAweDQwLCAweDAwLCAweDA1LCAweEM5LCAweDA4LCAweDY0LCAweDAxLCAweEQwLCAweDBDLCAweDQwLCAweDMwLAorMHgyMCwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwNCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MjAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsCisweDQwLCAweEE0LCAweDBBLCAweEQxLCAweDA0LCAweDc0LCAweDAxLCAweDUwLCAweDBELCAweDQwLCAweDM0LCAweDQwLCAweDk1LAorMHgwMiwgMHg3NCwgMHgwMywgMHhEMSwgMHgxOSwgMHg0MiwgMHgzNywgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHg5MCwKKzB4MDgsIDB4NDAsIDB4QjQsIDB4MDEsIDB4RDksIDB4MDAsIDB4NjQsIDB4MDUsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MzYsIDB4MDQsCisweDFELCAweDE4LCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwOSwgMHgwQywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwKKzB4RDYsIDB4MDgsIDB4OTMsIDB4MDEsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDksCisweDdDLCAweDAzLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDgzLCAweEIxLCAweDI1LAorMHhDOSwgMHgzNCwgMHg0MCwgMHhEQiwgMHgwMCwgMHg2QywgMHgxNywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNiwgMHgwMCwgMHgxRiwKKzB4MDIsIDB4NUMsIDB4MTYsIDB4RjAsIDB4MzksIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEVGLCAweEMxLCAweDdDLCAweDAyLCAweEYyLCAweDBFLCAweEMwLCAweDZGLAorMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywgMHg4RCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhCQiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4QjAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MTAsIDB4REQsIDB4ODMsIDB4NzAsIDB4MEIsIDB4QzAsCisweDNGLCAweDAwLCAweEY3LCAweDAwLCAweERDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweDNGLCAweDAxLAorMHhGQywgMHgwRSwgMHhCNCwgMHgyRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDgsIDB4MzUsIDB4MDEsIDB4OTMsIDB4NDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsIDB4MzUsIDB4MDgsCisweERGLCAweDAwLCAweDRDLCAweDBCLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDg4LCAweERGLCAweDAwLCAweDVDLCAweDAzLAorMHg3MCwgMHgyNSwgMHhDMCwgMHgzNCwgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgyRCwgMHhFMiwgMHgyNywKKzB4MDAsIDB4REYsIDB4MDQsIDB4N0MsIDB4MDksIDB4RjAsIDB4MEQsIDB4QzEsIDB4MjUsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NUMsCisweDAyLCAweDMwLCAweDA1LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwNSwgMHg3NCwgMHg4MywgMHgxOCwgMHgxRiwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwKKzB4MTAsIDB4NDQsIDB4ODEsIDB4RDAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4ODgsIDB4OUYsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTAsCisweDBELCAweDQyLCAweDNDLCAweDAwLCAweEZELCAweDAwLCAweDc0LCAweDAzLCAweEIwLCAweDA5LCAweDQwLCAweDc3LCAweDAwLAorMHhFRCwgMHgwMCwgMHgzNiwgMHgwNSwgMHgxMCwgMHg2RSwgMHg0MCwgMHhCNCwgMHgwMiwgMHgxQiwgMHgxMSwgMHg0QywgMHgwMywKKzB4NDAsIDB4MDUsIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsCisweEIyLCAweDAyLCAweDgxLCAweDAwLCAweDM0LCAweDgyLCAweDEwLCAweDFDLCAweDQwLCAweDY1LCAweDAyLCAweENELCAweDAxLAorMHgwNCwgMHg4MSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwOCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MiwgMHgwMCwKKzB4NDIsIDB4MzIsIDB4MjAsIDB4Q0QsIDB4NDMsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NjcsIDB4MDIsIDB4Q0QsCisweDAzLCAweDI0LCAweDAzLCAweDU4LCAweDBDLCAweDQ0LCAweDMxLCAweDA4LCAweDA1LCAweDAxLCAweDU0LCAweDExLCAweDEwLAorMHgwNCwgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwKKzB4MDAsIDB4QTEsIDB4MDEsIDB4QjQsIDB4MDYsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NjgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsCisweDA1LCAweEQwLCAweDFFLCAweDQ4LCAweDdBLCAweDAwLCAweDM1LCAweDAxLCAweDg0LCAweDI3LCAweDEwLCAweDk2LCAweDUwLAorMHg3QSwgMHgwMCwgMHhFRCwgMHgxOSwgMHhCNCwgMHgwMywgMHgxMCwgMHgxQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4RjQsIDB4MDUsIDB4MTksIDB4MUMsIDB4NDAsIDB4N0MsIDB4MDAsIDB4MzksIDB4ODEsIDB4QTQsIDB4MjQsIDB4MTAsIDB4MUUsCisweDQwLCAweDFBLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLAorMHhDMywgMHgwNCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMCwgMHhERiwgMHgwMCwgMHgwRCwgMHgwMSwKKzB4RjgsIDB4MEQsIDB4QzAsIDB4MzAsIDB4MDIsIDB4NEQsIDB4MDAsIDB4NUMsIDB4MDcsIDB4NzAsIDB4MkMsIDB4QzAsIDB4MzIsCisweDAyLCAweENGLCAweDAwLCAweDdDLCAweDIzLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweENGLCAweDE0LCAweDM0LAorMHg0MywgMHg3MCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMCwgMHhDNywgMHgwMCwgMHgxRSwgMHgwMywgMHgzNCwgMHgwNCwgMHhDMiwKKzB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MzksIDB4NDIsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDJGLCAweEMxLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLAorMHgwRiwgMHg4MSwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgyQiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwNCwKKzB4RkYsIDB4MTAsIDB4RjQsIDB4MTMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MTAsIDB4N0MsIDB4MjEsCisweDcwLCAweDBGLCAweEMwLCAweDFGLCAweDEwLCAweEVGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDBCLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4NEMsIDB4MDMsIDB4RjAsIDB4NkQsIDB4QzAsIDB4MjcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsCisweEMwLCAweDM3LCAweDA1LCAweDU3LCAweDAwLCAweDVDLCAweDM3LCAweDM0LCAweDA4LCAweEMwLCAweDM2LCAweDAxLCAweERGLAorMHgxMiwgMHg0RCwgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMiwKKzB4NEMsIDB4QzEsIDB4NjYsIDB4MDAsIDB4OUIsIDB4MDEsIDB4NEMsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzAsIDB4NTcsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEJELCAweDA0LCAweDg1LAorMHgwQSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHgxMCwgMHg4RSwgMHg0MCwKKzB4M0IsIDB4MDEsIDB4NkQsIDB4MDAsIDB4OUMsIDB4MTMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDMsIDB4RTcsIDB4MDQsCisweDg0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDA4LCAweEVELCAweDE0LCAweEI0LCAweDAzLCAweDcwLCAweDRFLAorMHhDMiwgMHgzQSwgMHg0MCwgMHgyMywgMHgwMCwgMHg4NSwgMHgwMCwgMHhCMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDksIDB4QTQsIDB4MTcsCisweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDkwLCAweDVFLCAweDQwLCAweDdCLAorMHgwMiwgMHhFRCwgMHgzMSwgMHgxNiwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MiwgMHg3QSwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NCwKKzB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDUsIDB4QjQsIDB4MDcsIDB4NTAsIDB4REUsIDB4NDAsCisweDY5LCAweDAwLCAweEU5LCAweDgxLCAweDg0LCAweDg3LCAweDkwLCAweDE2LCAweDQwLCAweDBGLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MjMsIDB4MjAsIDB4REQsIDB4NDAsIDB4MzQsIDB4NDUsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDgsCisweENELCAweDA2LCAweDE0LCAweDAzLCAweDEwLCAweEJDLCAweDQwLCAweDMwLCAweDAwLCAweEQ1LCAweDIwLCAweDA0LCAweDA3LAorMHhEMCwgMHgxOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMSwgMHg1MCwgMHgwQywgMHg0MCwgMHg1MywKKzB4MzAsIDB4QzEsIDB4MDgsIDB4MDQsIDB4MEIsIDB4OTAsIDB4MDQsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDg4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDZDLCAweDQxLCAweEYwLCAweDA1LAorMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhCQywgMHg0RCwgMHhCMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg2RiwKKzB4MDEsIDB4NUMsIDB4MDEsIDB4MzAsIDB4MzcsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NTcsIDB4ODAsIDB4NEMsIDB4OTEsIDB4RjAsCisweDQ3LCAweEMwLCAweDlGLCAweDAwLCAweDVGLCAweDAwLCAweEJDLCAweDE1LCAweDcwLCAweDA0LCAweEMwLCAweDVELCAweDBDLAorMHg3QiwgMHgwMywgMHhDQywgMHgwOSwgMHhBMCwgMHgwNywgMHhDMCwgMHg1RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDQwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MDIsIDB4N0MsIDB4NDAsIDB4NzAsIDB4MjEsIDB4ODAsIDB4ODYsIDB4MDAsIDB4MTcsCisweDEyLCAweDNDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwOCwgMHg4RiwgMHg0MCwgMHg0RCwgMHgxNiwgMHhGMCwgMHg5OSwgMHhDMCwgMHhFNywKKzB4MDAsIDB4OTMsIDB4MDksIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsCisweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDIzLCAweDAwLCAweDk3LCAweDAwLCAweDVDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLAorMHg2NCwgMHgwNiwgMHg5MywgMHgwMywgMHg1QywgMHhBMiwgMHg3MSwgMHg5OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDIwLCAweEE2LCAweDAwLCAweEJELCAweDQwLCAweEM0LCAweDA2LCAweDcwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLAorMHg5MSwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxOCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MjgsIDB4NDAsIDB4MjQsIDB4MDgsIDB4OTMsIDB4MjAsIDB4MDQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NjAsCisweDAwLCAweDkxLCAweDA0LCAweDQ0LCAweDRFLCAweDEwLCAweDA5LCAweDUwLCAweDI1LCAweDEwLCAweDlELCAweDA2LCAweDc0LAorMHgwNiwgMHg1MCwgMHgwOSwgMHg0MiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjQsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsCisweDgwLCAweDQ0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweEQwLAorMHgyOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5NSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NTAsIDB4MjksIDB4NDAsIDB4MjQsIDB4MzAsIDB4OUQsIDB4MDgsIDB4NzQsIDB4NTIsCisweDEwLCAweDBELCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLAorMHgzMCwgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNCwgMHgwMiwgMHg1OCwgMHg2OCwgMHg0MCwgMHhBNywgMHgwMCwgMHg4MSwgMHgwMiwKKzB4NDQsIDB4MEEsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsIDB4MjIsIDB4RDAsIDB4ODksCisweDQwLCAweDIwLCAweDAwLCAweDg5LCAweDA4LCAweDQ0LCAweDIyLCAweDkwLCAweDI5LCAweDQwLCAweEE0LCAweDAwLCAweDgxLAorMHgwMCwgMHgwNCwgMHgwMiwgMHgxMiwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHg1NCwKKzB4MjgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzAsIDB4MDYsCisweDAwLCAweDFGLCAweDAxLCAweDRDLCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDEzLCAweDAwLCAweDBDLAorMHgwMCwgMHgxNCwgMHg2MSwgMHhDMSwgMHg4NywgMHgwRCwgMHgxNywgMHgwMCwgMHg1QywgMHg1OCwgMHhGMSwgMHgyMSwgMHhDMCwKKzB4MDUsIDB4MDUsIDB4MDcsIDB4MTYsIDB4NUMsIDB4ODgsIDB4MzAsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MTMsIDB4NTQsCisweDVDLCAweDgwLCAweDc4LCAweDQxLCAweEMxLCAweDE0LCAweDEwLCAweDFGLCAweDAwLCAweDNDLCAweDU4LCAweDMwLCAweDAxLAorMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgzOCwgMHgyNywgMHgwOCwKKzB4QkYsIDB4MDMsIDB4RkMsIDB4MEEsIDB4RjAsIDB4OTksIDB4QzAsIDB4NkYsIDB4MDgsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDYsCisweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDA5LCAweEI3LCAweDAwLCAweDdDLCAweDEyLCAweEYwLCAweDRCLCAweEMyLCAweDI1LAorMHgwMCwgMHg5NywgMHgwNCwgMHhGQywgMHgxMiwgMHg3MCwgMHgxQiwgMHhDMCwgMHg2RiwgMHgzMCwgMHg5RiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjgsIDB4MDksIDB4RDIsIDB4MkIsIDB4ODAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MUIsIDB4QzAsCisweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJCLCAweDAwLCAweEJGLAorMHgxMywgMHhGQywgMHg0NiwgMHhGMCwgMHgwQiwgMHhDMCwgMHhBQywgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwQSwgMHgzMCwKKzB4QzksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDUsCisweEJGLCAweDBDLCAweDQ5LCAweDAyLCAweEYyLCAweDI5LCAweEMyLCAweEFGLCAweDAwLCAweEFGLCAweDA0LCAweEZDLCAweDAyLAorMHhGMCwgMHg0QiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDcsCisweDc0LCAweDg4LCAweEQwLCAweDUxLCAweDQwLCAweDQ0LCAweDIwLCAweDFELCAweDA1LCAweDc0LCAweDA0LCAweDEwLCAweEMxLAorMHg0OCwgMHg4NCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgyMCwgMHhEMCwgMHg0NSwgMHg1MywgMHgwNCwgMHgwMCwgMHgxRCwKKzB4MEMsIDB4NDQsIDB4NDAsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsCisweDgxLCAweDQwLCAweDE0LCAweDIwLCAweDVELCAweDIwLCAweDc0LCAweDIwLCAweDE0LCAweDExLCAweDQwLCAweDczLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwKKzB4MDIsIDB4RDAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsCisweDIyLCAweDAzLCAweDg5LCAweDAwLCAweDM0LCAweDAyLCAweEQxLCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDA0LAorMHgyNiwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgxMCwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMiwgMHhEQywgMHgwOCwKKzB4NDAsIDB4MjAsIDB4MTAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4OTQsIDB4NDgsIDB4NDEsIDB4NDMsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDIwLCAweDc0LCAweDgyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjYsCisweDgyLCAweEQwLCAweDg5LCAweDY2LCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUxLCAweDA5LCAweDU4LAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgyQSwgMHgxMCwgMHg2OSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDEsIDB4N0MsIDB4MDYsIDB4RjAsCisweDBCLCAweEQwLCAweDJDLCAweDAzLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDEwLCAweDA5LCAweEMwLCAweDI2LCAweDAwLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg4MCwgMHg2NCwgMHgyMiwKKzB4RjAsIDB4M0IsIDB4QzAsIDB4MkYsIDB4MDgsIDB4OUQsIDB4MDAsIDB4MzQsIDB4NEEsIDB4RjAsIDB4MDksIDB4NDAsIDB4QTQsCisweDAwLCAweDlGLCAweDAzLCAweDcwLCAweDA2LCAweEIwLCAweDNCLCAweEM0LCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwKKzB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsCisweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDVDLCAweDA2LCAweEY4LAorMHgxOSwgMHhDMiwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhCMCwgMHgwOSwgMHgwNSwgMHgyNywgMHg4MCwKKzB4OUUsIDB4MTAsIDB4NkMsIDB4MDYsIDB4RjAsIDB4MTksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDQwLCAweDdDLCAweDAwLCAweEI0LCAweDgxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMiwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MjEsCisweEMwLCAweDA0LCAweDIwLCAweDEzLCAweDEwLCAweDVDLCAweDk4LCAweEYwLCAweDAxLCAweEQwLCAweDg0LCAweDAwLCAweDFGLAorMHg0MiwgMHgyQywgMHgwMCwgMHgzNCwgMHgyMSwgMHhEMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MUMsIDB4MDEsIDB4NTEsIDB4MDEsIDB4RjQsIDB4MUQsIDB4MTAsIDB4MTUsIDB4NDAsIDB4MTcsCisweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE0LCAweDAwLCAweDUxLCAweDAwLCAweDc0LAorMHgwMSwgMHhEMCwgMHg5NywgMHhDMCwgMHgxNCwgMHgwMCwgMHg3MSwgMHgwMywgMHg0NCwgMHgwMSwgMHg3MCwgMHgwNSwgMHg0MCwKKzB4MTQsIDB4MDAsIDB4NzEsIDB4MDEsIDB4QzQsIDB4MDUsIDB4RDAsIDB4MTYsIDB4NDIsIDB4MUMsIDB4MDAsIDB4N0QsIDB4MDAsCisweEY0LCAweDAxLCAweDE0LCAweDA1LCAweDQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHg2MiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgxRSwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzMywgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4QzAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDJDLCAweDQwLCAweDMyLCAweDQwLCAweEMxLCAweDExLCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDMyLAorMHgwMiwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwNSwgMHg5MCwgMHgxOCwgMHg0MCwgMHg2MCwgMHgwMSwgMHhDOSwgMHgwMiwgMHgyNCwKKzB4MDMsIDB4MTQsIDB4MEMsIDB4NjAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDgwLCAweDY4LCAweDAwLCAweEExLCAweDA2LCAweEI0LCAweDA2LCAweDEwLCAweDhFLCAweDQwLCAweDNCLCAweDAxLCAweEFELAorMHgwNCwgMHhCNCwgMHgxMywgMHhEMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHg4MSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4QzEsIDB4MTAsIDB4ODQsIDB4MTMsIDB4NTAsIDB4NUUsIDB4NDAsIDB4N0EsIDB4MTEsCisweEExLCAweDExLCAweDg2LCAweDA5LCAweEQwLCAweDJDLCAweDQyLCAweEE4LCAweDAwLCAweEVELCAweDAwLCAweDM0LCAweDBCLAorMHgxMCwgMHg1RiwgMHg2MCwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwKKzB4NjgsIDB4MDAsIDB4RTMsIDB4MDcsIDB4QkMsIDB4MDYsIDB4MzAsIDB4NUEsIDB4QzAsIDB4RUIsIDB4MDAsIDB4RUYsIDB4MDMsCisweEI0LCAweDBGLCAweEYwLCAweDFDLCAweEMwLCAweEYxLCAweDAwLCAweEUxLCAweDAxLCAweEJDLCAweDE3LCAweEYwLCAweDE3LAorMHhDNCwgMHg3MiwgMHgwMCwgMHhFMywgMHgwMSwgMHg5QywgMHgxNywgMHg3MCwgMHgzRSwgMHhDOCwgMHhGRSwgMHg0MCwgMHhFMywKKzB4MDEsIDB4OUMsIDB4MDUsIDB4QjAsIDB4MUEsIDB4QzAsIDB4NjgsIDB4MDgsIDB4RUQsIDB4MDEsIDB4QUMsIDB4MDUsIDB4MzAsCisweDNFLCAweEMwLCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LAorMHg1MCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzIsIDB4QjcsIDB4MEQsIDB4REYsIDB4MDAsIDB4N0MsIDB4NEIsIDB4RjAsIDB4MDUsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDIzLCAweDcyLCAweDBELCAweEQwLCAweDI1LCAweDAwLCAweERGLCAweDAwLAorMHg3RSwgMHgwMSwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGNCwgMHgwQywKKzB4QzAsIDB4NDMsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkYsIDB4MDAsCisweEZGLCAweDA5LCAweENDLCAweDEzLCAweDMwLCAweDFGLCAweEMwLCAweDdCLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDI3LAorMHgzMCwgMHg1RiwgMHg4MCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHg0NywgMHgzMCwgMHgxQiwgMHhDMCwgMHg3QywKKzB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NjgsIDB4MEEsIDB4QjEsIDB4MEMsIDB4RkMsCisweDI1LCAweEYwLCAweDFGLCAweEMwLCAweDc4LCAweDQyLCAweEYzLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDFGLCAweEM0LAorMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4MCwgMHgyOSwgMHgwMCwgMHhCRCwKKzB4MTgsIDB4ODQsIDB4NDMsIDB4MTEsIDB4MEEsIDB4NDgsIDB4M0IsIDB4MDAsIDB4QTEsIDB4MTAsIDB4ODQsIDB4MjMsIDB4MTAsCisweDBFLCAweDQ4LCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDhCLCAweDQxLCAweDM4LCAweDAwLAorMHg3RCwgMHgwMCwgMHg5NCwgMHgwMywgMHhEMCwgMHg0RSwgMHg0MCwgMHgzOCwgMHgwMywgMHhBMSwgMHgwNCwgMHhCNCwgMHgwOSwKKzB4RDAsIDB4OEUsIDB4NDAsIDB4MTksIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MEEsIDB4RjAsIDB4OEUsIDB4NDAsIDB4NTQsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDQwLAorMHhBNywgMHgyMiwgMHgxNCwgMHgwQSwgMHg0MCwgMHgyRiwgMHgwNiwgMHhCMSwgMHgwOCwgMHhDNCwgMHgwNywgMHgxMiwgMHg0RSwKKzB4NjAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDIsIDB4QjQsIDB4MDMsIDB4OTAsIDB4MDIsIDB4NTAsIDB4MzgsIDB4MDIsIDB4QUQsCisweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDFGLCAweDQ5LCAweDJDLCAweDA0LCAweEU5LCAweDg4LCAweEI0LCAweDAxLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzOCwgMHg4MCwgMHg2MSwgMHgxMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgxRiwgMHg0MCwgMHg2MCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MjQsCisweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDc3LCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDIzLCAweDEwLCAweDBDLCAweDYwLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwOCwgMHgzNCwgMHgwMywgMHg5MSwgMHgwMCwgMHg0MSwgMHgzMCwgMHgwMCwgMHg0RCwgMHgwMCwKKzB4MDYsIDB4MDMsIDB4RDIsIDB4M0MsIDB4NDAsIDB4NjAsIDB4MjAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDksIDB4RDAsIDB4MDgsCisweDQwLCAweDMxLCAweDAyLCAweDAxLCAweDAzLCAweDMwLCAweDA3LCAweDUwLCAweDBDLCAweDYwLCAweDE4LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMSwgMHg2QywgMHgwMiwKKzB4MzAsIDB4MEQsIDB4NDAsIDB4QjcsIDB4NDIsIDB4RDMsIDB4MjEsIDB4NEQsIDB4MDMsIDB4MTQsIDB4MEYsIDB4QzIsIDB4M0YsCisweDAwLCAweERGLCAweDAwLCAweEY0LCAweDAzLCAweDkwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweDVGLCAweDAwLCAweENELAorMHgxNywgMHhGMCwgMHgzRCwgMHhEMCwgMHhGNCwgMHg0MCwgMHg5QSwgMHgwMCwgMHg3QywgMHgwOSwgMHhGMSwgMHgwRCwgMHhDMiwKKzB4RjAsIDB4MDAsIDB4RDEsIDB4MjMsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MkQsIDB4NTAsIDB4NzQsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEI3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLAorMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzIsIDB4MkQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAxLCAweDk3LCAweDIyLCAweDdDLCAweDBELCAweEUwLCAweDBELCAweEMwLCAweEI3LAorMHgwNCwgMHhERiwgMHgyMCwgMHg3QywgMHgyMSwgMHhGMCwgMHhDRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MEIsCisweEQwLCAweDJDLCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNFLCAweDAwLCAweEZGLAorMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHg5QiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMSwgMHhFRSwgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzEsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDUsIDB4Q0MsIDB4NDEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0QsIDB4MDAsCisweEZCLCAweDEwLCAweDhDLCAweDEwLCAweDMwLCAweDBGLCAweEMwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhENiwgMHgwMCwgMHhERCwgMHgwOSwgMHg3NCwgMHgwQSwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4NjQsIDB4MjIsIDB4RDEsIDB4MjAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsCisweDc0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAyLCAweDdFLCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwNywgMHg0NCwgMHgwNSwgMHhEMCwgMHgzOCwgMHhDOCwgMHg3NiwgMHgwMSwgMHg4OSwKKzB4MDAsIDB4NTQsIDB4MEMsIDB4NTAsIDB4MEQsIDB4NDIsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweEEwLCAweDI0LCAweDA0LCAweDlELCAweDAwLCAweDc0LCAweDBCLCAweEQyLCAweDBELCAweDQyLCAweDM0LAorMHg0MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4MTAsIDB4MDUsIDB4NDEsIDB4MzcsIDB4ODAsIDB4MUQsIDB4NjYsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDY0LCAweDA3LCAweEQyLCAweDM1LCAweDQwLCAweDc1LCAweDAwLCAweEQxLCAweDAwLAorMHg0NCwgMHgwMiwgMHgxMSwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MzYsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsCisweDgxLCAweDAwLCAweDM0LCAweDAzLCAweEQyLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLAorMHgxOCwgMHgwNCwgMHg0MCwgMHgzMywgMHhBMCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0OCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NUEsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MTQsCisweDAwLCAweDUwLCAweDBDLCAweDQwLCAweDQyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgyMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhFOCwgMHgyNCwgMHgwMCwgMHg5MywKKzB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsIDB4QkMsIDB4MjMsIDB4MzQsCisweDAxLCAweEMwLCAweDM3LCAweDAwLCAweDFGLCAweDAwLCAweDY0LCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg2QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNSwgMHg4MCwgMHg1QiwgMHg4MCwgMHg0RSwgMHgwMCwKKzB4MzIsIDB4MEYsIDB4QzgsIDB4MDcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsCisweDFGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEFGLCAweDIwLAorMHhCQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywKKzB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzIsIDB4MkYsIDB4MDAsIDB4M0YsCisweDAwLCAweERDLCAweDAwLCAweEYwLCAweDBBLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDgwLCAweEY4LAorMHgwRSwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhCMCwgMHg3RiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDcsIDB4NzAsIDB4MDMsIDB4QzAsIDB4N0QsIDB4MDIsIDB4RjMsIDB4MDksIDB4RkMsCisweDEwLCAweEYwLCAweDBCLCAweEMwLCAweDNDLCAweDAxLCAweEJGLCAweDIxLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLAorMHgzRiwgMHgwMCwgMHgzRiwgMHgxOCwgMHhDRCwgMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGQiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RTAsIDB4MEYsIDB4QzAsIDB4NEMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEYsCisweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDc3LCAweDAwLAorMHg1RCwgMHgwMSwgMHg0NCwgMHgwNywgMHgxMCwgMHhCMSwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwNCwgMHg3NCwgMHgwNiwKKzB4RDAsIDB4MjksIDB4NDEsIDB4M0QsIDB4MDAsIDB4REQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NzcsCisweDAwLCAweDFELCAweDgyLCAweDQ0LCAweDA3LCAweDEwLCAweDJGLCAweDQwLCAweDY3LCAweDAwLCAweDUxLCAweDAxLCAweDc0LAorMHgwNywgMHhEMCwgMHgxNSwgMHg0MCwgMHg0NCwgMHgwMCwgMHg1QiwgMHgwMSwgMHg0NCwgMHgwNSwgMHgxMCwgMHgxRCwgMHg0MCwKKzB4MDQsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4MEQsCisweDA4LCAweDA0LCAweDAzLCAweDUwLCAweDE0LCAweDY4LCAweDMxLCAweDAxLCAweEMxLCAweDAwLCAweDM0LCAweDIwLCAweEQwLAorMHg2QywgMHg0MCwgMHhCMSwgMHgwNCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgyMywgMHhEMCwgMHg0QywgMHg0MSwgMHgzMSwgMHgwMiwKKzB4MEQsIDB4MDUsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MkMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDIsCisweDUwLCAweDA4LCAweDQwLCAweDAxLCAweDAwLCAweDg1LCAweDIwLCAweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQ0LAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzNSwgMHg4MCwgMHg1RCwgMHgxNCwKKzB4NjUsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MEQsCisweDQwLCAweDM1LCAweDIwLCAweERELCAweDAxLCAweDc0LCAweDAzLCAweEQxLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDFELAorMHgwMCwgMHg2NCwgMHg0MywgMHgxMCwgMHgwRCwgMHg0NCwgMHg2NywgMHgwMCwgMHhENSwgMHgwNiwgMHg3NCwgMHgwMywgMHhEMSwKKzB4MEQsIDB4NTEsIDB4NDUsIDB4NDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4OEQsIDB4NDAsIDB4MEMsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDg4LCAweDM3LCAweDAwLCAweDlGLCAweDAxLCAweDZDLAorMHgwNywgMHg3MCwgMHgwMSwgMHhDMCwgMHg3NSwgMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgxMSwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsCisweDZDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweEU3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDNELAorMHhDMCwgMHhDMSwgMHg4NCwgMHhENywgMHgwMCwgMHg0QywgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4NkYsIDB4MDAsIDB4REMsIDB4MEIsCisweEYwLCAweDBGLCAweEMwLCAweDdGLCAweDAyLCAweEZGLCAweDAwLCAweEZDLCAweDBGLCAweEYwLCAweDBELCAweEUwLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNiwgMHgzRiwgMHg4MCwgMHg5RiwgMHgyOCwgMHhEQywKKzB4MjcsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4OTYsIDB4QzAsCisweDBFLCAweDAwLCAweEUzLCAweDAwLCAweEJDLCAweDA5LCAweEYwLCAweDFFLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDUsIDB4NzAsIDB4MEQsIDB4QzgsIDB4MzUsIDB4MDgsCisweEQzLCAweDgwLCAweDdDLCAweDA3LCAweEYxLCAweDBELCAweEMyLCAweDM0LCAweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDIzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHhBMywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgyOSwgMHhDMCwgMHgwNCwKKzB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweDVDLCAweDAwLCAweDM0LCAweDNGLCAweEQwLCAweDBELAorMHhDMCwgMHg3NCwgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHhEMCwgMHg5QywgMHg0OCwgMHg3QywgMHgwMSwgMHhEMSwKKzB4MDAsIDB4RjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NkUsIDB4MDMsIDB4QjAsCisweDRGLCAweDQwLCAweDI3LCAweDA4LCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDRELCAweEMwLCAweDA0LCAweDAwLAorMHhERCwgMHgwMCwgMHg0NCwgMHg5MywgMHgxMCwgMHgwRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MEYsIDB4OTAsIDB4MDgsIDB4NDAsCisweDM0LCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAwLCAweDUwLCAweDA4LCAweDAwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLAorMHgzNCwgMHgwMywgMHhEOCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHg5RCwgMHg0MCwgMHgwNCwgMHgwNCwgMHg5MCwgMHgyQywKKzB4NDEsIDB4MjMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzYsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDIsIDB4MDIsIDB4Q0QsCisweDAwLCAweDI0LCAweDAyLCAweDEwLCAweDAwLCAweDQwLCAweDBDLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHg3QSwgMHgwOCwgMHhBRCwgMHgyMSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxMCwgMHg0MCwgMHhGOCwKKzB4MDIsIDB4RTEsIDB4MEIsIDB4OTQsIDB4MjYsIDB4RDAsIDB4MUEsIDB4NDEsIDB4RjgsIDB4MDAsIDB4RTAsIDB4MDEsIDB4QjQsCisweDA3LCAweEQ4LCAweDNFLCAweDQwLCAweDc4LCAweDAwLCAweDZELCAweDAxLCAweDg0LCAweDA2LCAweDkwLCAweDFFLCAweDQwLAorMHg2MywgMHg4MCwgMHhFMSwgMHgwMSwgMHgzNCwgMHgyNywgMHgxMCwgMHgxQywgMHg0MCwgMHg0OCwgMHgwMCwgMHg0RCwgMHgwMSwKKzB4MjQsIDB4MDcsIDB4MTAsIDB4MTQsIDB4NDIsIDB4MTAsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDAwLCAweDMyLCAweDAwLCAweDBGLCAweDAwLCAweDNDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAyLAorMHhDMywgMHgwMCwgMHgxQywgMHgwMywgMHg3MCwgMHg4QywgMHg0MCwgMHgzNSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzQywgMHgyMywKKzB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4OEYsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MzAsIDB4OEMsIDB4QzAsIDB4QjMsCisweDgyLCAweEM3LCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDBDLCAweEMwLCAweDAyLCAweDAwLCAweDhGLCAweDAwLCAweDJDLAorMHgwMiwgMHgzMCwgMHgyQywgMHhDMCwgMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QTgsIDB4M0QsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkUsIDB4QTMsIDB4RjAsIDB4ODMsIDB4QzAsIDB4M0YsIDB4OTIsIDB4RkYsCisweDAwLCAweEVDLCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweEJGLCAweDA0LCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwgMHg3RiwgMHgwOCwgMHhCQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzUsIDB4OEYsIDB4RDAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDBGLCAweEUwLCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwMSwKKzB4MEMsIDB4MDQsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QjUsIDB4MDEsIDB4REIsIDB4MDAsIDB4N0MsIDB4N0IsIDB4RjAsIDB4RUQsCisweEMxLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweEI4LCAweDhELCAweEMxLCAweDI3LCAweDAwLCAweERGLAorMHgwMSwgMHg0QywgMHgwNSwgMHgxMCwgMHgwRCwgMHhDNCwgMHgwNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwKKzB4MTksIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4MzksCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQyLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEYxLCAweDAwLCAweDg1LAorMHgwMiwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzMywgMHgwMSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwKKzB4MzgsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4QTQsIDB4ODMsIDB4MTAsIDB4NEUsIDB4QzAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsCisweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDA4LCAweDAwLCAweEVELCAweDgwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLAorMHg0MCwgMHg0OCwgMHg2OCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4ODEsIDB4ODQsIDB4MDcsCisweDAwLCAweDFFLCAweDQxLCAweDdCLCAweDAwLCAweEUxLCAweDAzLCAweEI0LCAweDk3LCAweEQ4LCAweDVFLCAweDQwLCAweDdBLAorMHgwMCwgMHhFRCwgMHgwMSwgMHgwNSwgMHgwNywgMHgxNCwgMHg1RSwgMHg0NCwgMHg3QiwgMHgwMCwgMHhDNSwgMHgwMSwgMHgwNCwKKzB4MDcsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NEEsIDB4MDAsIDB4Q0QsIDB4MTEsIDB4MDQsIDB4NDcsIDB4MTAsIDB4MUMsIDB4NDAsCisweDEyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDMzLCAweEEwLCAweENELAorMHgxQSwgMHgzNCwgMHg4NiwgMHhEMCwgMHgwQywgMHg0MSwgMHgyMywgMHgwMiwgMHhDMSwgMHgwMCwgMHgwNCwgMHgyNywgMHg1QiwKKzB4MUQsIDB4NDIsIDB4MzMsIDB4NDAsIDB4NDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MzIsIDB4MDAsCisweENELCAweDA2LCAweDA0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweEIxLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDA3LAorMHg5NCwgMHgwQywgMHg1MCwgMHhGMiwgMHgwNCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMywgMHgxNCwgMHgwQywgMHg3OCwgMHg1QSwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDMsCisweDdDLCAweDAxLCAweEYwLCAweDc3LCAweDQwLCAweDU3LCAweDQwLCAweDUzLCAweDAwLCAweENDLCAweDA1LCAweDMwLCAweDA1LAorMHhDMCwgMHgxNywgMHgwMCwgMHg3MywgMHhDMSwgMHg3NCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDOCwgMHgxNiwgMHgxMCwgMHg3RiwKKzB4MDIsIDB4RUMsIDB4MTEsIDB4QjAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MTUsIDB4QjAsCisweDA3LCAweEMwLCAweERBLCAweDA5LCAweDdGLCAweDAzLCAweENDLCAweDA1LCAweDMwLCAweDI3LCAweEMwLCAweDVFLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgwRiwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDE3LCAweDAxLCAweDNDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LCAweEEwLCAweDFCLCAweDAwLAorMHgzRSwgMHgwNCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3NCwgMHgwMSwKKzB4QzAsIDB4ODUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDksIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLAorMHhGMCwgMHgwOCwgMHhENCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwKKzB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4RDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsCisweDgyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDQyLCAweEYwLCAweDA4LCAweEMwLAorMHgyNCwgMHgwMCwgMHg5MywgMHgxMCwgMHg0QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMSwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsCisweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDE5LCAweDQ4LCAweEE0LCAweDAwLAorMHg4MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NUMsIDB4MEEsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjQsCisweDAwLCAweDkxLCAweDAyLCAweDRDLCAweDBBLCAweDEwLCAweDI5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgwOSwKKzB4NDgsIDB4NjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4NTAsIDB4ODksIDB4NDAsIDB4NjIsIDB4ODQsIDB4OTksCisweDAwLCAweDQ0LCAweDA2LCAweDEwLCAweDE5LCAweDYzLCAweDY0LCAweDgwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgwOSwgMHg0MiwgMHgyNCwgMHgwNCwgMHg5MSwgMHgxMCwgMHg3NCwgMHg0MiwgMHhEMCwgMHgwOSwgMHg1MSwgMHgyNCwgMHgwMCwKKzB4OTksIDB4MzAsIDB4NDQsIDB4QzMsIDB4MTAsIDB4MDksIDB4NDEsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLAorMHgzNCwgMHg0MCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0QywgMHg0MCwgMHgyMCwgMHg4MSwgMHg5OSwgMHgwMCwKKzB4MDQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MjEsIDB4OEQsIDB4MDQsIDB4MDYsIDB4MTIsIDB4OTAsIDB4NEMsCisweDQ4LCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDE0LCAweDEyLCAweEQ4LCAweDQ4LCAweDYwLCAweDIwLCAweDAwLCAweDg5LAorMHhDNCwgMHgwNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg2MCwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODAsCisweDAyLCAweDEzLCAweDBBLCAweDc0LCAweDAwLCAweDcwLCAweEExLCAweEMwLCAweDg2LCAweDIyLCAweDE5LCAweDAwLCAweDQ1LAorMHgwMCwgMHgzMCwgMHhBMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwQSwgMHg0RCwgMHgwMCwgMHgzMCwgMHhBMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzgsIDB4MTQsIDB4MDAsIDB4MTMsIDB4MDAsCisweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHhBOCwgMHgyNywgMHgwMCwgMHhCRiwgMHg4OCwgMHhGRCwgMHgwMiwgMHhGMCwgMHg4QiwgMHg4MCwgMHgyRiwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4RkMsIDB4QTIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4NDIsIDB4QjcsIDB4MDAsIDB4N0MsIDB4MjIsCisweEY0LCAweDg5LCAweEMwLCAweDI3LCAweDIyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLCAweDc0LCAweDg5LCAweEQwLCAweDJGLAorMHgwMiwgMHhCRiwgMHgwOCwgMHhEQywgMHgyMiwgMHhGMSwgMHg4QiwgMHhDMCwgMHgyRiwgMHg0MCwgMHhCNywgMHgyOCwgMHhERCwKKzB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEE4LCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweEZFLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLAorMHgwMCwgMHhEQywgMHg1MiwgMHhCMCwgMHhDQSwgMHhDOCwgMHgyRSwgMHgwOCwgMHhCRiwgMHhBMCwgMHhEQywgMHg4MiwgMHgzMiwKKzB4NEIsIDB4QzIsIDB4NkYsIDB4MDEsIDB4REYsIDB4MEMsIDB4RkMsIDB4MDIsIDB4MzQsIDB4MEIsIDB4QzAsIDB4MjYsIDB4MDAsCisweDkzLCAweDA0LCAweDVDLCAweDUyLCAweEYwLCAweDQ5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHgzMCwgMHg0OSwgMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwKKzB4MDcsIDB4MDAsIDB4MUQsIDB4MDgsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MTQsCisweDc0LCAweDAwLCAweEQwLCAweEMxLCAweDQwLCAweDg0LCAweDA0LCAweDFELCAweDAwLCAweDVDLCAweDIwLCAweDEwLCAweDQxLAorMHg0MywgMHgwNywgMHgwMCwgMHgxRCwgMHgwQywgMHg3NCwgMHgwOCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgwNCwgMHg0MiwgMHgxMywKKzB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MjAsIDB4MTAsCisweDAzLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLAorMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwKKzB4MDIsIDB4OTAsIDB4NDgsIDB4NDAsIDB4MjIsIDB4MDMsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4QzgsIDB4NDAsCisweDIzLCAweDAyLCAweDhELCAweDQ0LCAweDM0LCAweDIyLCAweDEyLCAweDg4LCAweDQ4LCAweDI4LCAweDgwLCAweEExLCAweDA5LAorMHhCNCwgMHgwNiwgMHhEMCwgMHgxQSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhBRCwgMHg4OSwgMHhCNCwgMHgwNiwgMHgxMCwgMHg5QSwKKzB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsCisweDlELCAweDAwLCAweDc0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLAorMHhEMCwgMHgwRCwgMHg2MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QTQsIDB4MDAsIDB4QjksIDB4MDAsIDB4RTQsCisweDAyLCAweEQwLCAweDRCLCAweDQwLCAweDJDLCAweDAwLCAweEJDLCAweDQwLCAweEY0LCAweDAyLCAweDEwLCAweDhCLCAweDQwLAorMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NkEsIDB4OTAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHg2MCwgMHgwMCwgMHg5MywgMHgwQiwgMHg3QywgMHgwQSwKKzB4RjAsIDB4MzksIDB4RDAsIDB4NjQsIDB4MDQsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MEEsIDB4MzQsIDB4MzksIDB4QzAsIDB4MTcsCisweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDIwLAorMHg3QywgMHg0MiwgMHhGMCwgMHg0OSwgMHhDMCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhEMCwgMHg5OCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4MUMsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUYsCisweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAxLCAweDg3LCAweDAxLCAweDVDLCAweDE2LCAweEYwLAorMHgxOSwgMHhDMCwgMHg2NywgMHgwMSwgMHg5RSwgMHgwNSwgMHg1QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHg0QiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsCisweDgwLCAweEYyLCAweDAxLCAweEMyLCAweDA0LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLAorMHgwNywgMHgwNCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NEMsIDB4ODAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDAsCisweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDBDLCAweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDQzLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgyMCwgMHg1RCwgMHgwMCwgMHhEMCwgMHgxMSwKKzB4NzAsIDB4MDUsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MTEsIDB4NzQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4QzEsIDB4NUUsCisweDAwLCAweDUxLCAweDA1LCAweDQwLCAweDA1LCAweEQwLCAweDE3LCAweDQwLCAweDU0LCAweDAwLCAweDVELCAweDAwLCAweDQ0LAorMHgwMSwgMHgzMCwgMHgwNywgMHg0MCwgMHgxNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg1MCwgMHgwNSwgMHg1MCwKKzB4MTQsIDB4MTAsIDB4NUQsIDB4MjEsIDB4NTQsIDB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDBELCAweDUwLAorMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNiwgMHgxMCwgMHgzNCwgMHg1MSwgMHg3MSwgMHgwMCwKKzB4ODEsIDB4MDEsIDB4MzQsIDB4MjYsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NjAsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MjIsCisweDEwLCAweDg1LCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMyLAorMHgwMCwgMHhDOSwgMHgwMSwgMHgwNCwgMHgwMywgMHhEMCwgMHgxQywgMHg2MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODgsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MjEsIDB4ODQsIDB4MDMsIDB4NTAsIDB4MUUsCisweDQwLCAweDM4LCAweEEwLCAweEVELCAweDAwLCAweDM0LCAweDBGLCAweDEwLCAweDA2LCAweDQwLCAweDdBLCAweDQ0LCAweEExLAorMHgwMSwgMHg5NCwgMHgwMywgMHhEMCwgMHgxRSwgMHg0MSwgMHgzOCwgMHgwMCwgMHhDRCwgMHgwOSwgMHgwNCwgMHgwMiwgMHgxMCwKKzB4MDYsIDB4NDAsIDB4MzIsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDcsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MkEsIDB4MDAsCisweENELCAweDExLCAweDk0LCAweDAyLCAweEQwLCAweDBFLCAweDQxLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhDRiwgMHgwMSwgMHg4NSwgMHgwNywgMHg3MCwgMHgxQywgMHhEMCwKKzB4NTgsIDB4MDAsIDB4MkYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzQsIDB4MTYsIDB4QzAsIDB4NUQsIDB4MDAsIDB4QTEsIDB4MDEsCisweEJDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDc4LCAweDAwLCAweEVFLCAweDExLCAweDhELCAweDA2LCAweDM5LCAweDE0LAorMHhDMCwgMHg1QSwgMHgwMCwgMHg2RiwgMHgwMSwgMHgzQywgMHgwNSwgMHg3MCwgMHgxNCwgMHhDMCwgMHg1QSwgMHgwMCwgMHg2RCwKKzB4MDEsIDB4OEMsIDB4MDUsIDB4RjAsIDB4MTYsIDB4QzQsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMywgMHg3OCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg2QywKKzB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODIsIDB4N0UsIDB4MDIsIDB4NzQsIDB4MDcsIDB4QzQsCisweDE1LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAxLCAweEI0LCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDVGLCAweDIwLAorMHg2RCwgMHgwMCwgMHhGMCwgMHgwNSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4OEMsIDB4MTMsIDB4NzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsCisweEYzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDE3LCAweEMyLCAweDZGLCAweDEwLCAweEYyLCAweDAxLCAweEZDLCAweDA3LAorMHhGMCwgMHgxQiwgMHhDMCwgMHg3QywgMHgyMCwgMHhGNywgMHg4MSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxMywgMHhDMiwgMHg3OSwKKzB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzgsIDB4N0YsIDB4MDAsIDB4QkIsIDB4MDEsIDB4Q0MsCisweDg3LCAweDMwLCAweDFCLCAweEMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHgxOCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwOCwgMHg4QywgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgxRiwgMHgwMCwgMHhFMSwKKzB4MDgsIDB4ODQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NDAsIDB4MUIsIDB4MDEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBBLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDEwLCAweEI0LCAweDEzLCAweDEwLCAweDQyLCAweDQwLCAweDM4LCAweDAxLAorMHhFMSwgMHgwMCwgMHg5QywgMHgwMywgMHgxMCwgMHg0QSwgMHg0MCwgMHgyQiwgMHgyMCwgMHhBMSwgMHgwMCwgMHhBQywgMHgwMiwKKzB4MTAsIDB4MEEsIDB4NDAsIDB4NTQsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM5LCAweDAwLCAweEVELCAweDEwLCAweEE0LCAweDIzLCAweDUwLCAweDBFLCAweDQxLCAweDNCLCAweDQ0LCAweDYxLCAweDAwLAorMHg4NCwgMHgwMywgMHg1MCwgMHgwNiwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwMiwKKzB4NDAsIDB4MzgsIDB4MDAsIDB4RTUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MDIsIDB4NjAsIDB4MTksIDB4MTAsIDB4NjEsCisweDAwLCAweEI0LCAweDAxLCAweDkwLCAweDA2LCAweDQ0LCAweDFGLCAweDAyLCAweDAxLCAweDAwLCAweDg0LCAweDAxLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgzMSwKKzB4MjAsIDB4Q0QsIDB4MDMsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDQsCisweDRCLCAweDUwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweEMxLCAweDQzLCAweDM2LCAweDAzLCAweEQwLCAweDAwLCAweDQwLAorMHgzMCwgMHgwMCwgMHhDMSwgMHgwMywgMHgzNCwgMHgwQiwgMHgxMCwgMHgwMCwgMHg0MCwgMHg5MCwgMHg0MCwgMHg0MSwgMHg0MiwKKzB4MTQsIDB4MDEsIDB4OTAsIDB4MjAsIDB4NDAsIDB4ODMsIDB4MkUsIDB4MDEsIDB4MDIsIDB4MjQsIDB4MDgsIDB4MTAsIDB4MDAsCisweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLAorMHhERiwgMHgwMywgMHg2RCwgMHgwMywgMHg3MCwgMHgzRCwgMHhDMCwgMHg2NywgMHgwMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwQiwKKzB4NzAsIDB4MEQsIDB4QzIsIDB4MzcsIDB4NDAsIDB4OTMsIDB4MDEsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzAsCisweDAwLCAweEY3LCAweDIzLCAweDdDLCAweDBBLCAweDcwLCAweDA1LCAweEMwLCAweEExLCAweDAwLCAweDkzLCAweDAzLCAweDdDLAorMHgwNiwgMHhCMCwgMHgzRCwgMHhDMCwgMHhGNywgMHgwMCwgMHhEMywgMHhBMywgMHg0RCwgMHg4RiwgMHgzNCwgMHgxRCwgMHhEMCwKKzB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsCisweDA0LCAweDVDLCAweDBGLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweDVGLCAweDAwLCAweDNDLCAweDAzLCAweEIwLAorMHgwOSwgMHhDMCwgMHgzNywgMHgyMCwgMHg5RiwgMHgwOCwgMHg3QywgMHg4MywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4Q0YsIDB4MDQsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MjAsIDB4QzAsIDB4MjcsIDB4MDQsIDB4OEYsIDB4MTEsIDB4MUMsIDB4NDYsCisweDc0LCAweDE5LCAweEMxLCAweDI3LCAweDAwLCAweEQ3LCAweDAxLCAweDVDLCAweDA2LCAweEYwLCAweDFELCAweEMwLCAweDA3LAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzEsIDB4MEMsIDB4MDgsIDB4QkYsIDB4MDMsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEUsCisweEQwLCAweDE0LCAweDAwLCAweEJGLCAweDE5LCAweENDLCAweDE3LCAweDMwLCAweDg5LCAweEMwLCAweDM0LCAweDAwLCAweEY3LAorMHgwMCwgMHhDQywgMHg0MiwgMHhGMCwgMHgwNSwgMHhDMCwgMHg4RSwgMHgwMCwgMHgzNywgMHgwOCwgMHg2OCwgMHgyMCwgMHgzMCwKKzB4MDcsIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MTAsIDB4N0MsIDB4NDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MTMsIDB4MjIsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwRiwgMHhEMCwgMHgwRCwgMHhDMCwgMHg0NiwgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHgyNywgMHgxMCwgMHgzMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4OEQsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REIsIDB4MDAsCisweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDQ0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMiwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEYsCisweEQwLCAweDBELCAweDQwLCAweDI0LCAweDAxLCAweDlELCAweDEwLCAweDU0LCAweDAzLCAweDE0LCAweDFELCAweDQwLCAweDI0LAorMHgyMCwgMHg5RCwgMHgwMCwgMHg0NiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MSwgMHgzNiwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDgsIDB4MTEsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweDk4LCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NTAsIDB4MTIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MTAsIDB4MDAsCisweDlELCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDA0LCAweDQ4LCAweDMwLCAweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4ODAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgyNCwgMHgwMCwgMHg4RiwgMHgwMCwgMHg1RCwgMHgwMywgMHgxNCwgMHgwNSwgMHhDMCwgMHgyNCwgMHgyMCwgMHg5RSwKKzB4MDAsIDB4NEQsIDB4MDMsIDB4MzQsIDB4MDksIDB4RDAsIDB4MzQsIDB4MDAsIDB4RjcsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDA1LCAweEM4LCAweDE3LCAweDEwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4M0YsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsCisweDBELCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MEUsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RUMsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MEIsIDB4MDAsIDB4M0YsCisweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMywgMHhCMCwgMHgxQiwgMHhDMCwgMHgyRiwKKzB4MjEsIDB4RjMsIDB4MjQsIDB4RUMsIDB4MjUsIDB4RjAsIDB4MUYsIDB4RDAsIDB4M0MsIDB4MDAsIDB4RkIsIDB4ODgsIDB4Q0MsCisweDg0LCAweEIwLCAweDRGLCAweEMwLCAweDdGLCAweDIyLCAweDJGLCAweDAxLCAweEY0LCAweDA1LCAweDMwLCAweDBCLCAweEMxLAorMHhFRiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhFQywgMHgwNCwgMHgzMCwgMHgxMiwgMHhDMCwgMHg1RSwgMHgwOCwgMHgyRiwgMHgwMSwKKzB4Q0UsIDB4MEQsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MEQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDI3LCAweDEwLCAweDlELCAweDAxLCAweDQ0LCAweDBGLCAweDEwLCAweDE1LCAweDQwLCAweDY3LCAweDAwLAorMHhEMSwgMHgxNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHg0RCwgMHg0MCwgMHhCQywgMHgwNCwgMHhGMSwgMHgwRSwgMHg0NCwgMHgwNywKKzB4MTAsIDB4QkYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTcsIDB4OTQsIDB4NjQsIDB4MDUsIDB4MTAsIDB4MzksIDB4NDAsIDB4MzcsCisweDExLCAweDVELCAweDIxLCAweDQ0LCAweDA1LCAweDUxLCAweDE5LCAweDQwLCAweDc1LCAweDMwLCAweDFELCAweDIxLCAweDQ2LAorMHgwMiwgMHgxMCwgMHgxMSwgMHhDMCwgMHgwRCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4QTAsIDB4MjMsIDB4MDAsIDB4MEQsIDB4ODAsIDB4MDUsIDB4MEIsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4QzEsCisweDBDLCAweDI0LCAweDAyLCAweDUwLCAweDA4LCAweDQxLCAweEIwLCAweDgxLCAweEM5LCAweDA0LCAweDU0LCAweDA3LCAweDkwLAorMHgwQywgMHg0MCwgMHgzMywgMHgxMSwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0NCwgMHgzMSwgMHgwMSwKKzB4NDksIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTIsIDB4MEQsIDB4NDQsIDB4MzEsIDB4MDAsIDB4MUQsIDB4NDAsIDB4NjQsIDB4MTMsCisweDkwLCAweDA4LCAweDQwLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LAorMHg2NSwgMHgwMCwgMHg5RCwgMHgxMSwgMHg0NCwgMHgwMywgMHgxOCwgMHg2NSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NDIsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzQsIDB4MDgsIDB4QzEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MTAsIDB4MEQsCisweDQwLCAweDM3LCAweDAwLCAweDlELCAweDExLCAweDY0LCAweDAwLCAweDFDLCAweDBELCAweDQwLCAweDM3LCAweDEwLCAweDVELAorMHgxMSwgMHg0NCwgMHg0NSwgMHg1MCwgMHg4OSwgMHgwMCwgMHg3NSwgMHgwMCwgMHgxRCwgMHgxMCwgMHg2NCwgMHg0MywgMHg5NiwKKzB4MTEsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NDcsCisweDA0LCAweDlGLCAweDIxLCAweDQ0LCAweDAzLCAweEYyLCAweDA1LCAweEMwLCAweDMzLCAweDQwLCAweEQzLCAweDAwLCAweDZDLAorMHgwMywgMHhGMSwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg1NCwgMHgwNCwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4MTQsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzUsIDB4MDAsIDB4NUIsIDB4MDEsCisweDJDLCAweDBELCAweDMwLCAweDMxLCAweDgyLCAweDc3LCAweDAxLCAweDFELCAweDIyLCAweDY0LCAweDBGLCAweEIxLCAweDMxLAorMHhDMSwgMHg4MSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgyRCwgMHgwMCwKKzB4QUYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDIsIDB4RUYsIDB4ODAsIDB4RkMsIDB4ODIsCisweEYwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweEEwLCAweEYwLCAweDBGLCAweEMyLCAweDNGLAorMHgxMCwgMHgzNywgMHgwMCwgMHhFQywgMHhBNCwgMHg3MCwgMHg5QiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDEsIDB4RjAsIDB4MTMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDgsIDB4REQsIDB4MjcsIDB4NzAsIDB4MDMsIDB4QzAsCisweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDA1LCAweDAyLCAweDEzLAorMHgxMCwgMHg3RSwgMHgyMywgMHhCMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMywgMHhERiwgMHg4MCwgMHg3QywgMHgwMywgMHhGMSwKKzB4MDksIDB4QzAsIDB4MzUsIDB4ODAsIDB4REYsIDB4MDgsIDB4NEMsIDB4ODAsIDB4NzAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MDAsCisweDkzLCAweDAyLCAweDVDLCAweDA4LCAweEY4LCAweDBELCAweEMyLCAweDM3LCAweDAwLCAweDVGLCAweDBFLCAweDc4LCAweDFCLAorMHg3MCwgMHgyNSwgMHhDNCwgMHhBNSwgMHgwMCwgMHg1MywgMHgwMCwgMHg2QywgMHg0QiwgMHgzMSwgMHgwOSwgMHhDNCwgMHgwQiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RTQsIDB4MDIsIDB4OTEsIDB4MDAsCisweEY0LCAweDA3LCAweDEwLCAweDA1LCAweDQxLCAweDc3LCAweDAwLCAweEZELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LAorMHhDOCwgMHgzRSwgMHgyMCwgMHhGRiwgMHgwMCwgMHgwMCwgMHgyQywgMHgxMCwgMHgxRiwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NEMsIDB4MDEsIDB4NDQsIDB4MDUsIDB4QjAsCisweDA0LCAweDQwLCAweDI0LCAweDAwLCAweDRCLCAweDA0LCAweDI0LCAweDgzLCAweDE0LCAweDcxLCAweDQwLCAweDZGLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwKKzB4ODMsIDB4MTQsIDB4M0MsIDB4NDEsIDB4QTMsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDEsIDB4RDAsIDB4OUMsIDB4NDAsCisweDM1LCAweDA4LCAweENELCAweDAxLCAweDA0LCAweDA4LCAweDUwLCAweEJDLCAweDYwLCAweDMyLCAweDAwLCAweDA1LCAweDAwLAorMHgxNCwgMHgwMSwgMHhEMCwgMHg2OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg0OSwgMHgwMywgMHgxNCwgMHg4QywgMHhEMSwgMHhCNCwKKzB4NDEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDU4LCAweDAwLCAweDYxLCAweDAxLCAweEI0LCAweDA3LAorMHgxMCwgMHgxNiwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NiwgMHgwNiwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QSwKKzB4MDAsIDB4QzUsIDB4NDEsIDB4ODQsIDB4NDcsIDB4MTAsIDB4MUUsIDB4NjgsIDB4N0IsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsCisweDA1LCAweDUwLCAweDlBLCAweDQwLCAweDdCLCAweDAyLCAweDdELCAweDAxLCAweEM0LCAweDE0LCAweDkwLCAweDFBLCAweDQ4LAorMHg3OSwgMHgyMCwgMHgzOSwgMHgwOSwgMHg4NSwgMHgyNywgMHgxNSwgMHgxQSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzQsIDB4MDIsIDB4NDMsIDB4MDQsIDB4MzQsIDB4MDMsIDB4MTAsCisweDBDLCAweEMwLCAweDMzLCAweDEwLCAweERGLCAweDAwLCAweDFDLCAweDAyLCAweEYwLCAweDBDLCAweEMwLCAweDMxLCAweDAwLAorMHhDRCwgMHgwMCwgMHgwQywgMHgwMywgMHg3MCwgMHhDQywgMHhDMCwgMHgzNywgMHg0MiwgMHgwNSwgMHgwMCwgMHgxQywgMHgxMSwKKzB4RDAsIDB4MDgsIDB4QzAsIDB4MzMsIDB4MDAsIDB4NEIsIDB4MDAsIDB4MUMsIDB4NDAsIDB4RjAsIDB4OEMsIDB4QzAsIDB4MzEsCisweDAyLCAweEMzLCAweDAwLCAweDZDLCAweDIzLCAweDMwLCAweDg4LCAweEUwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgzRCwgMHg0MCwgMHg3RiwgMHgwMCwgMHhCQywgMHgwMywgMHg3MCwgMHgwNywKKzB4QzAsIDB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEMsIDB4QzAsIDB4QkYsIDB4MjAsIDB4REYsCisweDAwLCAweDNDLCAweDAzLCAweEMwLCAweDhGLCAweEM4LCAweDM3LCAweDA4LCAweEZGLCAweDhDLCAweDdDLCAweDAxLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHg0OCwgMHgxQywgMHgxMSwgMHhGMCwgMHg4OSwgMHhDMCwgMHgzQSwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDE3LCAweDAwLCAweERGLCAweDAxLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHhDNCwgMHg3NCwgMHgwMywgMHhEMSwgMHgwRSwKKzB4N0MsIDB4ODAsIDB4NzAsIDB4NkQsIDB4RTAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MUQsCisweEMwLCAweDM2LCAweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDA0LCAweEIwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweDk3LAorMHgwMCwgMHg0QywgMHgwMywgMHgzNCwgMHgwMSwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4ODAsIDB4MTksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MEIsIDB4QzAsIDB4MDYsIDB4NDAsIDB4QUIsCisweDIwLCAweEVELCAweDA0LCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDMxLCAweDAwLCAweEUxLCAweDEwLCAweEI0LAorMHgwMywgMHhEMCwgMHhFRSwgMHhDMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHg0RSwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4NjEsIDB4MDAsIDB4QTQsIDB4MDAsIDB4MTAsIDB4MEUsIDB4NjAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MDAsCisweDhELCAweDAzLCAweEIwLCAweDA2LCAweDQwLCAweDRGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NSwgMHgxNywgMHg1MCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwMSwKKzB4RUQsIDB4MDksIDB4QjQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4NDEsIDB4RTEsIDB4MDUsIDB4OTQsIDB4NDcsCisweDUwLCAweDFFLCAweDAyLCAweDdCLCAweDEwLCAweEVELCAweDAxLCAweEI0LCAweDA0LCAweEQyLCAweERDLCAweDAwLCAweDdBLAorMHgyNCwgMHg2RCwgMHgwMSwgMHhENiwgMHgwRCwgMHhEOCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwNCwgMHhFNSwgMHgwMSwgMHhGNCwKKzB4MDcsIDB4MTAsIDB4MUEsIDB4NjAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDI4LCAweDMzLCAweDAwLCAweENELCAweDFBLCAweDA0LCAweDAzLCAweEQwLCAweDE0LCAweDQwLCAweDczLCAweDAyLCAweENELAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgxMywgMHhEMCwKKzB4MEMsIDB4NDgsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDEsIDB4MzQsIDB4MDYsIDB4RDAsIDB4OEMsIDB4NDAsIDB4MzAsIDB4MDAsCisweDQ1LCAweDA4LCAweDM0LCAweDBELCAweEQwLCAweDhDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDAxLCAweDA0LCAweDAzLAorMHgxNywgMHgwQywgMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwKKzB4MUQsIDB4MDYsIDB4N0QsIDB4MDMsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MTcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsCisweEY0LCAweDJELCAweDcwLCAweDA0LCAweEM0LCAweDE0LCAweDEwLCAweDUzLCAweDgwLCAweEZDLCAweDBELCAweDcxLCAweDA1LAorMHhDMCwgMHgxNywgMHgwMCwgMHg3RiwgMHgwNywgMHhGQywgMHgxOSwgMHhGMCwgMHgxNSwgMHhDMCwgMHg1NiwgMHgwMCwgMHg2RiwKKzB4MDIsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MjcsIDB4QzgsIDB4MUYsIDB4MjAsIDB4NjcsIDB4MDcsIDB4RkMsIDB4MDEsIDB4MTAsCisweDk3LCAweEMyLCAweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMSwgMHg4NywgMHgwMCwgMHgxRiwgMHg4MCwgMHg3QywKKzB4MjAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsCisweDA1LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE5LCAweDUwLAorMHg2QywgMHgxOCwgMHgxMCwgMHgyMSwgMHhDMSwgMHhDNywgMHgwOCwgMHgxQiwgMHgzMCwgMHg3RSwgMHgwQywgMHhGMCwgMHg4MSwKKzB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsCisweDlGLCAweDQ0LCAweDdFLCAweDBBLCAweEYwLCAweDA5LCAweEQwLCAweDY0LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LAorMHgzMCwgMHgwOSwgMHhEMCwgMHgyNCwgMHg4MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywKKzB4MDAsIDB4OTMsIDB4QzAsIDB4NEMsIDB4NDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OTMsIDB4ODAsIDB4NUMsCisweDBBLCAweEYwLCAweDE5LCAweEMwLCAweDY1LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDI2LCAweDMwLCAweDI5LCAweEMwLAorMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMiwgMHg5RCwKKzB4NDcsIDB4NzQsIDB4MDYsIDB4RDAsIDB4NDgsIDB4NDAsIDB4RUMsIDB4MTAsIDB4OUQsIDB4MDAsIDB4MzQsIDB4MjYsIDB4MTAsCisweDA5LCAweEMwLCAweDI2LCAweDEwLCAweDlELCAweDAyLCAweDc0LCAweDFBLCAweEQwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLAorMHg5MSwgMHg0MCwgMHg0QywgMHgwMiwgMHg3OCwgMHgxQiwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgxMCwgMHg0NCwgMHgwRSwKKzB4RDAsIDB4MDgsIDB4NDIsIDB4MjAsIDB4MTAsIDB4OUIsIDB4NDAsIDB4MEMsIDB4MUUsIDB4NTQsIDB4MDksIDB4QzAsIDB4MDcsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsCisweDAwLCAweDY0LCAweDAyLCAweEQxLCAweDI5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAxLCAweDU0LCAweDAyLCAweDUwLAorMHg0RCwgMHg0MCwgMHgyNSwgMHgwMiwgMHg5NCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDUsIDB4OEQsIDB4MTQsIDB4MzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDA4LCAweDc0LCAweDBBLCAweDEwLCAweDI4LCAweDQwLAorMHgyMiwgMHgwMiwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMiwgMHg4MSwgMHgwOCwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDIsIDB4OTEsIDB4NDAsIDB4MDQsIDB4MDIsIDB4RDIsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDk5LCAweDAwLCAweDQ2LCAweDIyLCAweDUxLCAweDQ4LCAweDQ0LCAweDQzLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNiwgMHgwMSwgMHgxRiwgMHgwNCwgMHg3NCwgMHhEMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4NTQsIDB4MTAsIDB4MUYsIDB4MTYsIDB4N0UsIDB4MDAsIDB4MzQsIDB4MDEsIDB4NDAsIDB4ODQsCisweDA1LCAweDE5LCAweDk2LCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMxLCAweDg3LCAweDAwLCAweDEzLCAweDAyLCAweDZELAorMHg4MCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg4MywgMHg0MCwgMHgxMywgMHgwMCwgMHg1NCwgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwKKzB4MTUsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MDUsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDJGLCAweDI1LCAweEFGLCAweDIwLCAweDdDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDOCwgMHhBRiwgMHgwMCwgMHg5RCwgMHgwNCwgMHhGQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMCwgMHgyNywgMHgwOSwKKzB4OUYsIDB4MDQsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzIsIDB4MjcsIDB4NDEsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MDIsCisweDUwLCAweDJCLCAweEMwLCAweDJGLCAweDAxLCAweEJGLCAweDAwLCAweEI0LCAweDAyLCAweEYyLCAweDBCLCAweEMwLCAweDJGLAorMHgwMCwgMHhBNywgMHgwMCwgMHhCQywgMHgxMiwgMHhGNCwgMHg4QiwgMHhDMCwgMHg3NSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDUsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsCisweEQwLCAweDZDLCAweDA0LCAweDkxLCAweDI0LCAweEZDLCAweDBBLCAweEYwLCAweDJCLCAweEQwLCAweDI0LCAweDAwLCAweEJGLAorMHgwMCwgMHg5RSwgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHg4MiwgMHgzNCwKKzB4NUIsIDB4RDEsIDB4MjQsIDB4MDIsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RjIsIDB4MEIsIDB4QzAsIDB4MkUsIDB4ODAsCisweEE3LCAweDAwLCAweENFLCAweDgzLCAweDMwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgxMSwgMHgxRCwgMHgwOCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4ODQsIDB4MDAsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MDQsIDB4RDAsIDB4NTEsIDB4NDAsIDB4ODQsIDB4MDQsIDB4MEQsIDB4MTAsCisweDc2LCAweDAwLCAweEQxLCAweDAxLCAweDAwLCAweDA0LCAweDAxLCAweDFELCAweDA0LCAweDc0LCAweDAwLCAweDE5LCAweDIxLAorMHg0MCwgMHgwNCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg1QywgMHgwMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwNCwgMHgxMCwgMHgxRCwKKzB4MDAsIDB4MDUsIDB4MDAsIDB4QjQsIDB4MDEsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDhELCAweDAwLCAweDM0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLAorMHgwMCwgMHg4MSwgMHgwQywgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHg4MywgMHg4RCwgMHgwOCwgMHgxNCwKKzB4MDIsIDB4RDMsIDB4ODgsIDB4MDAsIDB4MjIsIDB4MDUsIDB4OEQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsCisweDIwLCAweDEwLCAweDhELCAweDAwLCAweDM2LCAweDgyLCAweEQwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDk1LCAweDAwLAorMHg1NCwgMHgwMiwgMHgxNCwgMHgwQywgMHg0MCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MkEsIDB4MjUsIDB4ODYsIDB4OUQsIDB4MjAsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDIwLCAweDc0LCAweDAyLCAweEQwLCAweDFELCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDQwLCAweDc0LCAweDQyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0NCwgMHgyNCwKKzB4MDEsIDB4OUQsIDB4MDIsIDB4NTUsIDB4MEIsIDB4RDEsIDB4ODksIDB4NDAsIDB4RTQsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NTQsCisweDJBLCAweDkwLCAweDJELCAweDQwLCAweDYwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHgwMiwgMHgyNSwgMHgxMCwgMHg5RiwgMHgxMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywKKzB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MkEsIDB4RjAsCisweDA5LCAweEMyLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDNFLCAweDNBLCAweDEwLCAweDk5LCAweEM4LCAweDI0LCAweDIwLAorMHg4RiwgMHg0QiwgMHg3QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHhBNiwgMHg4MCwgMHg4NywgMHgwMSwgMHg1NCwgMHgwMiwKKzB4MzEsIDB4MDksIDB4RTAsIDB4MTQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsCisweDI1LCAweDBDLCAweDlGLCAweDg0LCAweDdDLCAweDAyLCAweEY4LCAweDA5LCAweEUwLCAweDIzLCAweDQxLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MDYsIDB4RjgsIDB4MTksIDB4QzQsIDB4NjcsIDB4MDAsIDB4OUIsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEU4LCAweDI3LCAweDg4LCAweDlGLCAweDAwLCAweDZDLCAweDA2LCAweEQxLAorMHg0OCwgMHhEOCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4ODIsIDB4N0MsIDB4ODAsIDB4RjgsIDB4NDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsCisweDAwLCAweDcwLCAweDQxLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweEM4LCAweDcxLCAweDAxLCAweDQxLAorMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNywgMHgyMCwgMHgxRiwgMHgzMCwKKzB4NUMsIDB4MTAsIDB4NzAsIDB4QzEsIDB4QzgsIDB4ODcsIDB4MjAsIDB4MUYsIDB4MTAsIDB4NEMsIDB4MTAsIDB4MzIsIDB4NDEsCisweEM0LCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweERDLCAweDA0LAorMHg3RCwgMHgwNywgMHg3NCwgMHgxNSwgMHg3OCwgMHg3NiwgMHhDMCwgMHgxQywgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMSwKKzB4MTAsIDB4MTYsIDB4NDUsIDB4MTQsIDB4MDAsIDB4NzEsIDB4ODYsIDB4QzQsIDB4MDksIDB4MTIsIDB4MTYsIDB4NDAsIDB4MTcsCisweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDcwLCAweDM2LCAweDQwLCAweDE3LCAweDEwLCAweDdELCAweDAwLCAweEYwLAorMHgwRCwgMHgxMiwgMHgzNiwgMHg0OCwgMHhERiwgMHgwMiwgMHg3RCwgMHgwNCwgMHg4MCwgMHgxNSwgMHg1MCwgMHgwNywgMHg1MCwKKzB4NDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4RjIsIDB4MDAsIDB4OEQsCisweDA2LCAweDM0LCAweDA3LCAweDUwLCAweDE4LCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDM2LCAweDIzLCAweDUwLAorMHgwOCwgMHg0MCwgMHgzMiwgMHg0MCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgyRiwgMHg1MCwgMHhCQywgMHg0MCwgMHgzMywgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MjgsIDB4NDAsIDB4MzMsIDB4ODAsIDB4NEQsIDB4MEEsIDB4MzQsIDB4MkYsCisweDUwLCAweDFDLCAweDQwLCAweEQzLCAweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDBCLCAweDExLCAweDBDLCAweDQwLCAweDQwLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHg4MCwgMHhBRCwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4NTAsIDB4MDIsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MTcsIDB4MTgsIDB4MEUsCisweDQwLCAweDcwLCAweDAyLCAweEU5LCAweDAxLCAweEM0LCAweDA3LCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAxLCAweEVELAorMHgwOCwgMHhCNCwgMHgwMywgMHg1MCwgMHgyMiwgMHg0MCwgMHgzQiwgMHhCMCwgMHg2RCwgMHgwMCwgMHhCNiwgMHgwNywgMHgxMSwKKzB4MDYsIDB4NDAsIDB4MUIsIDB4OEMsIDB4RkQsIDB4MDAsIDB4ODUsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MTAsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLAorMHgwNywgMHg3MCwgMHgxMiwgMHhDMCwgMHg2OCwgMHgwMCwgMHhFMywgMHgwMSwgMHhGQywgMHgwRiwgMHg3MCwgMHgxQSwgMHhEMCwKKzB4N0EsIDB4MDEsIDB4RTksIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MUUsIDB4RTgsIDB4N0IsIDB4MDMsIDB4RUYsIDB4MDEsCisweEJDLCAweDA3LCAweDcwLCAweDEyLCAweEMwLCAweDdCLCAweDI1LCAweDZGLCAweDAxLCAweDlFLCAweDA2LCAweDcwLCAweDFBLAorMHhDMCwgMHg2QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNiwgMHgzNCwgMHgxRSwgMHhDMCwgMHg1MCwgMHg2MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsCisweDcwLCAweDAwLCAweEMwLCAweDIxLCAweDAwLCAweERGLCAweDQwLCAweDdDLCAweDAzLCAweEYyLCAweDBDLCAweEMwLCAweDM3LAorMHgyMCwgMHhENywgMHg4MCwgMHg3QywgMHgwMSwgMHhGMiwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMiwgMHhERiwgMHgxMCwgMHg3OCwKKzB4MDMsIDB4NzAsIDB4MDEsIDB4QzIsIDB4MzcsIDB4MUEsIDB4MUYsIDB4ODAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsCisweDI3LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEY2LCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg1RCwgMHgwMCwgMHhBMywgMHgwMSwgMHhDQywgMHgxMywgMHhGOCwKKzB4MDMsIDB4QzAsIDB4NkQsIDB4MDAsIDB4RkYsIDB4MTEsIDB4QkMsIDB4MDcsIDB4MjAsIDB4REIsIDB4QzAsIDB4N0MsIDB4MDAsCisweDdGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDlGLCAweEQwLCAweDdDLCAweDAwLCAweERGLCAweDA5LCAweEZDLCAweDA3LAorMHhGMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgyMCwgMHgyRiwgMHgwOSwgMHhFRSwgMHgxNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg1RiwKKzB4MDAsIDB4RkYsIDB4MDEsIDB4OEMsIDB4MDUsIDB4MzAsIDB4REIsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAzLCAweDc4LCAweDQyLAorMHg0MCwgMHgyOCwgMHgwMiwgMHhFRCwgMHgwMCwgMHhCNCwgMHgxMywgMHgxMCwgMHg4QSwgMHg1MCwgMHgzOCwgMHgxMSwgMHgyRCwKKzB4MDQsIDB4OEMsIDB4MUEsIDB4RDAsIDB4OEEsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDUsIDB4QjQsIDB4MDMsIDB4OTAsCisweDAyLCAweDQwLCAweDNCLCAweDAwLCAweDJELCAweDAwLCAweDlFLCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDlCLCAweDIyLAorMHhBRCwgMHgwNCwgMHhBQywgMHgwMSwgMHgxMCwgMHhDRSwgMHg0OCwgMHg1NSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4QTEsIDB4MDAsIDB4ODUsIDB4MjMsIDB4NTAsIDB4ODIsIDB4NDMsCisweDI5LCAweDAwLCAweEVELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDRCLCAweDQ4LCAweDM4LCAweDgwLCAweDZELCAweDgwLAorMHg4NCwgMHgwMywgMHhEMiwgMHgwNiwgMHgwMCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MTIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4OUIsIDB4MDAsIDB4RjUsCisweDEwLCAweEQ0LCAweDIwLCAweDEwLCAweEMyLCAweDQ0LCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgyOCwgMHhDMywgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHg1MCwgMHgzMCwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MjIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MDQsCisweDRDLCAweEQwLCAweDAwLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDA0LCAweDM0LCAweDQzLCAweEQwLCAweDAwLCAweDQwLAorMHg3NywgMHgwMCwgMHgwRCwgMHgxMiwgMHgxNCwgMHhDNiwgMHhEOSwgMHg4QywgMHg0MCwgMHgxMywgMHgwMCwgMHg4RCwgMHgyMywKKzB4MDUsIDB4MDMsIDB4MTQsIDB4MjQsIDB4NDAsIDB4MDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweEU1LCAweDQxLCAweDkzLCAweDBBLCAweDRDLCAweDAzLCAweDcwLCAweDM1LCAweEMwLCAweDM1LCAweDAwLAorMHhGRiwgMHgwMCwgMHg3NCwgMHgwMiwgMHgzNCwgMHgwOCwgMHhDMCwgMHgzQywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHg0RSwKKzB4RjAsIDB4MDksIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MTMsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4M0YsCisweDAxLCAweDVGLCAweDAxLCAweDRDLCAweDA3LCAweEYxLCAweEJELCAweEMwLCAweEI3LCAweDAwLCAweEQ3LCAweDAzLCAweDE0LAorMHg0RiwgMHgzMCwgMHg5NCwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4ODgsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MjEsIDB4QzAsIDB4QjcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDQyLCAweEYwLCAweDI5LCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDVELCAweDAyLCAweEYwLAorMHgwMCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgwMywgMHhCMCwgMHgyNSwgMHhFNCwgMHgzNywgMHgwMCwKKzB4NUYsIDB4MDEsIDB4NEQsIDB4MjMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4RjcsIDB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4MUIsCisweEYwLCAweDNELCAweEMwLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LAorMHgyNywgMHgwNCwgMHhGRiwgMHgwMiwgMHhGQywgMHgwMywgMHhGMCwgMHgxNywgMHhDMSwgMHg2QiwgMHgwMCwgMHhGNywgMHgwMCwKKzB4RkMsIDB4MDcsIDB4RDAsIDB4MUIsIDB4QzAsIDB4M0MsIDB4MDgsIDB4MUYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDNELCAweDgwLCAweEZGLCAweDgwLCAweENDLCAweDAzLCAweEY4LCAweDEzLCAweEMwLCAweDNELCAweDAwLCAweEYzLAorMHgwMCwgMHhGQywgMHgyNiwgMHhGMCwgMHgwMywgMHhDQywgMHgyRiwgMHgwMCwgMHhGNywgMHgxMCwgMHhDQywgMHgwMiwgMHgzMCwKKzB4MTEsIDB4QzgsIDB4MDQsIDB4MjYsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NjYsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDE3LCAweDAwLCAweEQxLCAweDgwLCAweDc0LAorMHgwNywgMHhEMCwgMHgzOSwgMHg1MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwOSwgMHg0NCwgMHgwQywgMHhEMCwgMHgxMSwgMHg0MCwKKzB4MzQsIDB4ODAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDgsIDB4MDAsIDB4QzEsIDB4MzQsIDB4NDAsIDB4MTEsIDB4MDMsCisweDcyLCAweDBFLCAweDcwLCAweDA1LCAweDQxLCAweDIzLCAweDAwLCAweENCLCAweDIyLCAweDQ0LCAweDY0LCAweDE0LCAweDM5LAorMHhDMCwgMHgwNiwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NiwgMHgwQywKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4NDUsIDB4NDEsIDB4QjcsIDB4MDEsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MTIsCisweEQwLCAweDgxLCAweDQwLCAweDM2LCAweDAwLCAweERELCAweDAyLCAweDQ0LCAweDA0LCAweEQyLCAweDE5LCAweDQxLCAweDM0LAorMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHg0NSwgMHg0MCwgMHgzNiwgMHgyMCwgMHg1MSwgMHgxMSwgMHg2NCwKKzB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTEsIDB4MDIsIDB4NDQsIDB4MDEsIDB4MTAsIDB4NDEsIDB4NDAsCisweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDAwLCAweDhELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDIsIDB4MDAsIDB4NDAsIDB4MzAsIDB4MDAsCisweENELCAweDEwLCAweDA0LCAweDAzLCAweEQwLCAweDA0LCAweDYwLCAweDMwLCAweDAwLCAweDQxLCAweDIwLCAweDM0LCAweDAxLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgzNywgMHg4MCwgMHgwOSwgMHgwMCwgMHg0NSwgMHgwMCwgMHgxMCwgMHgwQywgMHg0NCwgMHg0MiwKKzB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDAxLAorMHhEMCwgMHgzNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0NSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgzQywgMHgyMCwgMHhGRCwKKzB4MDAsIDB4NEQsIDB4MDMsIDB4RDAsIDB4MDUsIDB4QzAsIDB4M0YsIDB4MTAsIDB4NTMsIDB4MjAsIDB4NzQsIDB4ODMsIDB4RjAsCisweDAxLCAweEM4LCAweDM3LCAweDgwLCAweDU3LCAweDAwLCAweDRDLCAweDAwLCAweDMxLCAweDAxLCAweEMwLCAweDA0LCAweDQ0LAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MDYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDIsIDB4QzAsCisweDNELCAweDAwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEYwLCAweDAzLCAweDgyLCAweDNGLCAweDEwLCAweEZGLCAweDgwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwMywKKzB4QzAsIDB4M0YsIDB4MDAsIDB4MkQsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4ODAsIDB4MTQsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEYzLCAweDA5LCAweDhDLCAweDA3LAorMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgyNywgMHhGMCwgMHg5RiwgMHhDMCwgMHg3RiwKKzB4MDIsIDB4RkYsIDB4MDksIDB4RkMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0QsIDB4MDIsIDB4RUYsIDB4MDEsIDB4Q0MsCisweDA3LCAweEYwLCAweDFFLCAweDQwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLAorMHgzQywgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4NDAsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MDQsIDB4RDAsCisweDExLCAweDUyLCAweDA0LCAweDAwLCAweDBELCAweDAwLCAweDc0LCAweDEwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAxLAorMHgxRCwgMHgwNCwgMHg3NCwgMHgxMCwgMHhEMCwgMHg0MCwgMHhDMCwgMHgwNiwgMHgwMSwgMHgxRCwgMHg4MSwgMHg0NCwgMHgwNCwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDgsIDB4NTEsIDB4MjEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MTUsIDB4NDIsIDB4NzQsCisweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDA3LCAweDEwLCAweDE5LCAweDQ4LCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzNywgMHgwMCwgMHhDMSwgMHgwNCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NjAsIDB4MzAsIDB4MDUsIDB4Q0QsIDB4MTQsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzUsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHg1MCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwKKzB4QzUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDA1LCAweDAwLCAweDAxLCAweDQwLCAweDU0LCAweDAwLCAweEQwLCAweDAxLCAweDYwLAorMHgwNCwgMHgzMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgyMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NjQsIDB4ODAsIDB4QzAsIDB4MDEsCisweDQwLCAweDM2LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDQzLCAweEQwLCAweEFELCAweDQwLCAweDM2LCAweDA0LCAweEM1LAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsCisweDAwLCAweERGLCAweDgwLCAweDdDLCAweDgzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwKKzB4ODYsIDB4MDQsIDB4RDMsIDB4MDksIDB4NEMsIDB4MjUsIDB4RjAsIDB4M0QsIDB4QzAsIDB4MjYsIDB4MDAsIDB4RDcsIDB4MDksCisweDBELCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNywgMHg4OCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4RjQsIDB4MDAsIDB4RjEsIDB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsCisweEEwLCAweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYxLCAweDAzLCAweEM4LCAweDE5LAorMHgwMCwgMHhDRiwgMHgyMSwgMHhCQywgMHgwMSwgMHgzMCwgMHgxNiwgMHhDMiwgMHgzOSwgMHgwMiwgMHhGQiwgMHgwMCwgMHhGQywKKzB4MTMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDA4LCAweDM1LCAweDAwLCAweERGLCAweDA1LCAweDdDLCAweDAzLCAweDMyLCAweDBELCAweEMyLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg0QywgMHgwNywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NywgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwNywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4NzQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QjUsIDB4MDAsCisweDkzLCAweDAwLCAweDRDLCAweDBBLCAweDcwLCAweDBELCAweEMyLCAweEE0LCAweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MDQsIDB4MTAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MTQsIDB4QjAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsCisweDQ0LCAweDA0LCAweEMxLCAweEExLCAweDQyLCAweDA3LCAweDAwLCAweDFELCAweDAxLCAweDc0LCAweDg0LCAweEQwLCAweEUxLAorMHg0MCwgMHg0NCwgMHgwMCwgMHgwRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhCMCwgMHgwMCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwKKzB4ODAsIDB4NDQsIDB4MTMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MTAsIDB4REQsIDB4MEEsIDB4NDQsIDB4NDYsIDB4RDAsCisweDFELCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMwLAorMHgwMCwgMHhDRCwgMHgwMiwgMHgzNCwgMHgwMywgMHgxMCwgMHgzQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwKKzB4MUIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MTAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsCisweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDUwLCAweDBDLCAweDQ0LCAweDMwLCAweDAwLCAweEMxLCAweDAwLAorMHgwNCwgMHg4MywgMHgxNCwgMHgwOCwgMHg0MCwgMHgxMiwgMHgwMCwgMHhDNCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgxQywKKzB4NDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDgsIDB4MDAsCisweDJELCAweDA5LCAweEY0LCAweDI0LCAweDEwLCAweDEyLCAweDQwLCAweDRCLCAweDAwLCAweDJELCAweDAwLCAweDg0LCAweDI0LAorMHhEMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMCwgMHgyRCwgMHg0MSwgMHhCNCwgMHgwQywgMHhEMCwgMHgxMiwgMHg2MCwgMHhDOCwKKzB4MDAsIDB4MkQsIDB4MDEsIDB4QzQsIDB4MDQsIDB4RDIsIDB4MzIsIDB4NDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDEsIDB4MDUsCisweDA3LCAweDEwLCAweDFDLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA3LCAweEQxLCAweDFBLCAweDYwLAorMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwMCwgMHhDRiwKKzB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzMsIDB4MzMsIDB4MDIsIDB4Q0YsIDB4MDgsIDB4MEMsIDB4MDMsIDB4RjAsCisweDBDLCAweEMyLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLAorMHhDRiwgMHgwMCwgMHgwQywgMHgwMywgMHg3MCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMCwgMHhDMywgMHgwNCwgMHgwQywgMHgwMywKKzB4NzAsIDB4MEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4RDcsIDB4MDAsIDB4MEQsIDB4MDMsIDB4RjIsIDB4OEMsIDB4NTEsIDB4NDgsCisweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDBELCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDOCwgMHgwRiwgMHgwOCwgMHgzRiwgMHgwNCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsCisweDQwLCAweEJDLCAweDAwLCAweEIwLCAweDEzLCAweEM0LCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweEZFLCAweDAzLCAweEYyLAorMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQSwgMHhDMiwgMHgwQiwgMHhFMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MEQsCisweDA3LCAweDM0LCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDA3LCAweDNDLCAweDBELCAweEMwLAorMHg3NywgMHgwMCwgMHhENywgMHgwMSwgMHg0RCwgMHg4NywgMHgzNCwgMHgxRCwgMHhDMCwgMHg3NSwgMHg0MCwgMHhEMywgMHgwMCwKKzB4N0UsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4QjgsIDB4MDksCisweEMwLCAweDU0LCAweDAwLCAweERCLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQxLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5MCwgMHgwOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4MTgsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4M0QsIDB4MDAsIDB4RDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MEYsCisweDAwLCAweDMxLCAweDAwLCAweEM0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDBDLCAweDAwLCAweDIxLCAweDAwLCAweDlDLAorMHg4MCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MiwKKzB4MzgsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEM0LCAweDg3LCAweDEyLAorMHgxRSwgMHg2MCwgMHg3QiwgMHg4MCwgMHhFOSwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MiwgMHg3QiwgMHgyMCwKKzB4RTUsIDB4MDEsIDB4QTAsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTksIDB4MDEsIDB4OTQsIDB4MDcsCisweEQwLCAweDFGLCAweDQwLCAweDcyLCAweDA4LCAweEMxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDFDLCAweDQwLCAweDcwLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxQSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDE0LCAweDAwLCAweDE4LCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDAxLAorMHgwMCwgMHgyNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEMCwKKzB4MDAsIDB4NDAsIDB4MzMsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NTAsIDB4MzAsIDB4NTIsCisweDkxLCAweDQ4LCAweDA0LCAweDAyLCAweEQwLCAweDFDLCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4MTAsIDB4NTcsIDB4MDAsCisweDY0LCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVCLCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDA1LAorMHhDMCwgMHgxRSwgMHgwMCwgMHg3MywgMHgwMiwgMHhDQywgMHgwOSwgMHgzMCwgMHgwNywgMHhDMCwgMHg1QywgMHgwMCwgMHg1MywKKzB4MDEsIDB4NEMsIDB4MDEsIDB4RjIsIDB4MDUsIDB4QzEsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBGLAorMHgwMCwgMHgzRiwgMHgyMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywKKzB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4MEQsIDB4MjAsIDB4MzcsIDB4MDIsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4RTIsCisweDQxLCAweDAwLCAweDBGLCAweDEwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAyLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDI0LCAweDAxLCAweDlGLCAweDAxLCAweDVDLCAweDAyLAorMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgyMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MjAsIDB4OTMsIDB4MjAsIDB4MEMsIDB4MDIsIDB4MzQsIDB4MDgsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDUsIDB4NEMsCisweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHg5MCwgMHg0OSwgMHg0OCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MEEsIDB4RDksIDB4MzksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MEEsIDB4RDAsCisweEQ5LCAweDQwLCAweEE3LCAweDgwLCAweDlGLCAweDEyLCAweDM0LCAweDAyLCAweEIwLCAweDA5LCAweDQwLCAweEE3LCAweDIwLAorMHg5MSwgMHg4MiwgMHg0NCwgMHgwQSwgMHgzMCwgMHgyOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgwNiwKKzB4RDAsIDB4MDgsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsCisweDI0LCAweDAwLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEI1LCAweDAwLAorMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg2MCwgMHgyQywgMHgwMCwgMHhCRCwgMHgwOCwgMHhGNiwgMHgwNiwgMHhEMCwgMHgwQiwKKzB4NDAsIDB4NkYsIDB4MTAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4NTAsIDB4MUIsIDB4NDIsIDB4MjcsIDB4MDQsIDB4OTEsCisweDEwLCAweDY0LCAweDQyLCAweDAwLCAweDA5LCAweDQxLCAweDI0LCAweDg0LCAweDlELCAweDAwLCAweDY0LCAweDIyLCAweEQwLAorMHg4OSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyOCwKKzB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDIsIDB4OTEsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsCisweDA2LCAweEQwLCAweDBCLCAweDQyLCAweDI5LCAweDAwLCAweEFELCAweDAxLCAweEI0LCAweDA2LCAweEQwLCAweDBBLCAweDYwLAorMHg2QiwgMHgwMCwgMHhBNSwgMHgwMCwgMHhGNCwgMHgwMiwgMHhEMiwgMHgwQSwgMHg2MCwgMHgyMywgMHg0MSwgMHg4MSwgMHgwNCwKKzB4MjQsIDB4OTIsIDB4OTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4NDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDQyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA2LCAweDAwLAorMHgwRiwgMHgwQSwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgxMiwgMHgxNywgMHgwQSwgMHg3QywgMHgyOCwKKzB4RDAsIDB4QTUsIDB4RDAsIDB4ODQsIDB4MDIsIDB4MUQsIDB4MEEsIDB4NUMsIDB4MjgsIDB4RjAsIDB4QTAsIDB4QzAsIDB4ODcsCisweDAyLCAweDFELCAweDAwLCAweDdDLCAweDAwLCAweDYwLCAweDAzLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDY1LAorMHgwMCwgMHgzMiwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHg1RiwgMHgwQSwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDgsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDgsIDB4REMsIDB4MjIsCisweDcwLCAweDhCLCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweERELCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDc3LAorMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNywgMHgwMCwgMHhCMywgMHgwMCwKKzB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEEsCisweEMwLCAweDJELCAweDAyLCAweEI3LCAweDAwLCAweEZFLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDAwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg2RCwgMHgxMiwgMHgzMCwKKzB4NDksIDB4QzEsIDB4MjQsIDB4MDEsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NzMsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA1LCAweDAwLCAweDExLCAweDA0LCAweDQ1LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NSwgMHg1MCwgMHg3MCwgMHg0MSwgMHg0MCwKKzB4MDQsIDB4MDEsIDB4MTEsIDB4MTAsIDB4NzQsIDB4NDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDAsCisweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA1LCAweDAwLCAweDFELCAweDA4LCAweDQ0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwQywgMHgxMiwgMHgwMSwgMHgxMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjUsIDB4NDAsIDB4ODEsIDB4MTQsIDB4MDQsIDB4MDIsCisweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDlELCAweDAwLCAweDA0LCAweDEyLCAweEQwLCAweDQ4LCAweDQxLCAweDIxLAorMHgyMSwgMHg4NSwgMHgwNCwgMHgzMCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHhBRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MEIsIDB4NDAsIDB4NkEsIDB4MDIsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MjYsIDB4MTAsIDB4MUEsIDB4NDAsCisweDY4LCAweDAwLCAweDk5LCAweDA0LCAweDA1LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjQsIDB4ODAsIDB4OUQsIDB4NDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDgwLCAweDc0LCAweDAyLCAweEQyLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweEY0LCAweDgyLAorMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHgyQywKKzB4MTAsIDB4OTksIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDQ4LCAweDAyLCAweEYwLCAweDA4LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgyMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5NSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RTAsIDB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0UsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweEE2LCAweDAyLCAweDlGLCAweDAzLCAweDRDLCAweDJBLCAweDM0LCAweEI5LCAweEMwLCAweEE0LCAweDAwLAorMHg4QiwgMHhBMCwgMHg0QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjQsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDMsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MTksIDB4RDAsIDB4MjcsIDB4NDAsIDB4OTcsCisweDIwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MTMsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4ODEsIDB4RDEsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDYwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgzQywgMHgwMCwgMHhGMCwgMHgwMCwgMHhDMCwgMHgwMywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NEQsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDEwLCAweDAwLCAweDdELCAweDAwLCAweDc2LCAweDQ1LCAweEQwLCAweDA3LCAweEMwLCAweDE1LCAweDIwLAorMHg2NSwgMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgyNywgMHhEMCwgMHgxNiwgMHgwMCwgMHg3NywgMHgwMCwgMHhGNCwgMHgwOSwKKzB4RDIsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTQsIDB4MDQsIDB4QzAsIDB4MTUsCisweDAwLCAweDUxLCAweDAxLCAweDc0LCAweDAxLCAweEQwLCAweDE1LCAweDQwLCAweDU3LCAweDEwLCAweDdELCAweDQxLCAweEM0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4MzIsIDB4MDAsIDB4REQsIDB4NDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzEsIDB4ODAsIDB4NDksCisweDAwLCAweDM0LCAweDRCLCAweEQwLCAweDNELCAweDQwLCAweDM2LCAweDMwLCAweENELCAweDAwLCAweDM0LCAweDA3LCAweEQ4LAorMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMCwKKzB4QzEsIDB4MjEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsCisweEQwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLAorMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHg3OSwgMHgwMiwgMHg2RCwgMHgxMCwKKzB4QjYsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NTgsIDB4MkEsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDksIDB4MDIsCisweDQwLCAweDFCLCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDA3LCAweDEwLCAweDA2LCAweDQwLCAweDcxLCAweDQwLCAweEUxLAorMHgxMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MSwgMHgzQiwgMHgwNCwgMHhFRCwgMHgwMiwgMHg4NCwgMHg0MywgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsCisweDAwLCAweEFGLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDE2LCAweEMwLCAweDdELCAweDAwLCAweDZCLCAweDAxLCAweEJDLAorMHgwNiwgMHhGMCwgMHgxNiwgMHhEMCwgMHg3QSwgMHgwMCwgMHhBRiwgMHgwMSwgMHhCNCwgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwKKzB4NkIsIDB4MDAsIDB4NkYsIDB4MDEsIDB4QjgsIDB4MDcsIDB4MzAsIDB4MUEsIDB4QzAsIDB4NTksIDB4MDAsIDB4NjMsIDB4MDEsCisweEJDLCAweDA1LCAweEYwLCAweDE2LCAweEMwLCAweDVCLCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFFLAorMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzUsIDB4MjAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDA1LCAweEQwLCAweDI3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMiwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjgsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDdELCAweDAwLCAweEZGLAorMHgwMSwgMHhCQywgMHgwNywgMHhGOCwgMHg4NywgMHhDMCwgMHg3QywgMHgwMCwgMHhCMywgMHg4OSwgMHhDQywgMHgwNSwgMHhBMCwKKzB4MUIsIDB4QzAsIDB4N0YsIDB4MjAsIDB4RjMsIDB4MDEsIDB4REMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsCisweEYzLCAweDAxLCAweENDLCAweDA2LCAweEYyLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweENDLCAweDA3LAorMHhGMCwgMHgxQiwgMHhDMCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNSwgMHgzMCwgMHgxRiwgMHhDMCwgMHgxQiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsIDB4NkQsIDB4MDAsCisweDlDLCAweDAzLCAweDE4LCAweDBBLCAweDQwLCAweDM4LCAweDAwLCAweEExLCAweDAwLCAweEM0LCAweDAzLCAweDExLCAweDBBLAorMHg0MCwgMHgyQiwgMHgwMCwgMHg3MSwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHgwMiwgMHg0MCwgMHgxQywgMHgwMCwgMHhBMSwKKzB4MDAsIDB4ODQsIDB4MEEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsCisweDBBLCAweDQwLCAweDI4LCAweDEyLCAweEUxLCAweDAwLCAweEI0LCAweDAwLCAweEIwLCAweDBFLCAweDQwLCAweDU3LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4NTAsIDB4ODcsIDB4NDAsIDB4M0MsIDB4MDAsIDB4QjEsIDB4MDAsIDB4ODQsIDB4MjAsIDB4MTAsIDB4MDIsIDB4NDAsCisweEJGLCAweDAwLCAweEE5LCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDBGLCAweDQwLCAweDJBLCAweDAwLCAweDc5LCAweDAyLAorMHg4NCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgxQiwgMHgwMCwgMHgwRCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHg4MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4QTEsIDB4MDAsIDB4RjQsIDB4NDAsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweEYxLCAweDAwLCAweDFELCAweDAyLCAweDM0LCAweDQzLAorMHgxMCwgMHgwMCwgMHg0MSwgMHhCMCwgMHgwNCwgMHg4MSwgMHgwNCwgMHgwNCwgMHgzNCwgMHg5MSwgMHgzOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4MDksIDB4MEQsIDB4MDQsIDB4MzQsIDB4MTAsIDB4MDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4MDksIDB4MjAsIDB4MDQsCisweDA2LCAweEQwLCAweDEwLCAweDQwLCAweDEzLCAweDAwLCAweDBELCAweDEyLCAweDA0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgzNCwgMHg4NCwgMHg5MCwgMHgwQywgMHg0MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4QjUsIDB4MDAsIDB4REYsIDB4MDUsIDB4N0MsIDB4MDcsIDB4NTAsCisweDI0LCAweEMwLCAweDM4LCAweDAwLCAweDkzLCAweDAyLCAweDQ0LCAweDBCLCAweEIwLCAweDA1LCAweEMwLCAweDczLCAweDAwLAorMHhEOSwgMHgwMiwgMHg0NCwgMHgwQiwgMHgxMCwgMHgyQywgMHhDMCwgMHhCNiwgMHgwMCwgMHhDQiwgMHgwMCwgMHgwQywgMHg2OSwKKzB4RjEsIDB4MkQsIDB4NDEsIDB4NjcsIDB4MDAsIDB4REYsIDB4MDMsIDB4NEQsIDB4MDcsIDB4RjAsIDB4QkQsIDB4RDAsIDB4NzQsCisweDQwLCAweEQzLCAweDAwLCAweDNDLCAweDA1LCAweDMwLCAweDBELCAweEMwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNywgMHgwNiwgMHg5RiwgMHgxMCwgMHg1QywgMHgyMywgMHg3MCwgMHgxRCwKKzB4QzAsIDB4NzcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MDIsIDB4NzEsIDB4ODUsIDB4QzAsIDB4MzcsIDB4MjIsIDB4OTcsCisweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDNELCAweEMwLCAweDI1LCAweDAwLCAweDk3LCAweDA4LCAweDdDLCAweDAxLCAweEYwLAorMHgwNSwgMHhDMSwgMHg2MywgMHgwMCwgMHhERiwgMHg4MSwgMHg3QywgMHgwNiwgMHhGMCwgMHgxRCwgMHhDMiwgMHg3NywgMHgxNCwKKzB4REYsIDB4MDMsIDB4N0MsIDB4MDEsIDB4RjAsIDB4OEQsIDB4QzIsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweENDLCAweDBGLCAweEYwLCAweDA3LCAweEMwLAorMHgzRSwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgxNywgMHgzMiwgMHgwMywgMHhDNSwgMHgyQywgMHgwMCwgMHg3MywgMHgwMCwKKzB4Q0UsIDB4MDIsIDB4MzAsIDB4MTMsIDB4QzAsIDB4MUMsIDB4MDEsIDB4NzIsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4MzAsIDB4MEIsCisweEMwLCAweDBGLCAweDAyLCAweDczLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDA3LCAweEMwLCAweDFGLCAweDAwLCAweEZGLAorMHgwMCwgMHhDQywgMHgwMSwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MzQsCisweDIwLCAweDkxLCAweDA5LCAweDc0LCAweDA0LCAweDEwLCAweDEwLCAweDQxLCAweDI0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHhDNCwgMHgwMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwOSwgMHgxMCwgMHgwMSwgMHhDMCwKKzB4MDUsIDB4MDAsIDB4NTEsIDB4MjAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4REQsIDB4MDAsCisweDQ0LCAweDA1LCAweDEwLCAweDBELCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEOCwgMHg4NSwgMHg0MCwgMHgzNiwgMHgwMCwKKzB4OTEsIDB4MDIsIDB4MTQsIDB4MDEsIDB4MTgsIDB4MTUsIDB4NDAsIDB4MzQsIDB4ODEsIDB4QzksIDB4MDYsIDB4MDQsIDB4MDMsCisweDEwLCAweDZELCAweDQwLCAweDMyLCAweDgwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDBELCAweDQwLCAweDI3LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhDRCwgMHg4NiwgMHg0NCwKKzB4MDQsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDA1LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDM2LCAweDAwLCAweDgxLAorMHgwMCwgMHgzNCwgMHgwMiwgMHgxNCwgMHgwRCwgMHg1MCwgMHgzNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxNCwKKzB4MEQsIDB4NjAsIDB4MjIsIDB4NDAsIDB4OTUsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MjMsIDB4NDAsCisweDgxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA0LAorMHgxNCwgMHgwQywgMHg0MCwgMHg0MywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4MzYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzYsIDB4MDAsIDB4OTMsIDB4MDAsCisweDdDLCAweDAxLCAweDMwLCAweDAxLCAweEMwLCAweDI0LCAweDEwLCAweDVCLCAweDgwLCAweDQ2LCAweDgxLCAweDMwLCAweDAxLAorMHhDMCwgMHgxNiwgMHgwMCwgMHg1NywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MzAsCisweDBELCAweEMwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwNiwgMHhDMCwgMHgzOSwgMHgwMCwgMHhBRiwgMHg4MCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4ODAsIDB4M0YsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDIsIDB4QzAsCisweDBELCAweDAwLCAweDJCLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4MDAsCisweEZGLCAweDAxLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDVELCAweDAwLCAweDZGLCAweDAxLCAweENDLCAweDA2LAorMHhGMSwgMHgwRiwgMHhDMCwgMHg3QywgMHgwMCwgMHgzMywgMHgwMywgMHhFQywgMHgyNCwgMHhCMiwgMHhDRiwgMHhDOCwgMHgzQywKKzB4MjEsIDB4RkIsIDB4ODQsIDB4REMsIDB4ODcsIDB4QjAsIDB4MEYsIDB4NDAsIDB4NUMsIDB4MDIsIDB4M0YsIDB4MDgsIDB4QUMsCisweDg1LCAweEIwLCAweDBGLCAweEMyLCAweDVGLCAweDAwLCAweDM3LCAweDgwLCAweENELCAweDA2LCAweDkwLCAweDBCLCAweDgwLAorMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHhERCwKKzB4MDEsIDB4NzQsIDB4MDAsIDB4RDAsIDB4M0QsIDB4NDIsIDB4NjAsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDYsIDB4RDIsCisweDFELCAweDQwLCAweDdDLCAweDAwLCAweDExLCAweDIwLCAweDQ0LCAweDEwLCAweDEwLCAweEFGLCAweDQwLCAweDdDLCAweDAyLAorMHhGMSwgMHgwMiwgMHg0NCwgMHgwNywgMHgxNCwgMHg2RCwgMHg0MCwgMHgwNCwgMHgwMSwgMHg5RCwgMHgwNCwgMHg1NCwgMHg4NSwKKzB4MTAsIDB4OUYsIDB4MDAsIDB4NDcsIDB4NDAsIDB4OTMsIDB4OEIsIDB4NDQsIDB4NTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MEQsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHgwMCwgMHhEMCwgMHgyQywgMHg0MCwgMHgzMSwgMHgwMCwgMHg0RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwQywKKzB4NjAsIDB4MzAsIDB4MjAsIDB4MTAsIDB4MDQsIDB4NjQsIDB4MTAsIDB4OTAsIDB4NEMsIDB4NDgsIDB4MzAsIDB4MTAsIDB4QzksCisweDA4LCAweDM0LCAweDAzLCAweDAyLCAweDJDLCAweDQ1LCAweDEyLCAweDAxLCAweDBELCAweDAwLCAweDI0LCAweDAxLCAweEQwLAorMHgwQywgMHg0MiwgMHgzMywgMHgxMCwgMHgwOSwgMHgyMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwMCwgMHg0MCwgMHg0RCwgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDA0LCAweEMwLCAweDBELCAweDYwLCAweDI0LCAweDAwLCAweDFELCAweDA0LCAweDQ1LCAweDAyLCAweEQwLCAweDBELCAweDQwLAorMHgzNCwgMHgwOCwgMHgxMSwgMHgwMCwgMHg2NCwgMHg0NCwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzNCwgMHg4MCwgMHhEMSwgMHgwMCwKKzB4NjQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MDYsIDB4MDQsIDB4OEQsIDB4MTEsIDB4NzQsIDB4ODUsIDB4NTQsIDB4MEQsCisweDQyLCAweDA3LCAweDAwLCAweDU1LCAweDA4LCAweDQ0LCAweDAyLCAweDEwLCAweDExLCAweDQxLCAweDBELCAweDIwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg2NiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3OCwgMHg0RSwKKzB4RTAsIDB4MEQsIDB4QzAsIDB4MjUsIDB4MTAsIDB4NEYsIDB4MDcsIDB4NEMsIDB4MjIsIDB4RjAsIDB4OUQsIDB4NDAsIDB4MzQsCisweDQwLCAweDEzLCAweDBELCAweDJDLCAweDBDLCAweEIyLCAweDBELCAweEQwLCAweDM0LCAweDEwLCAweERCLCAweDAwLCAweDc0LAorMHgwMywgMHgzMCwgMHgwRCwgMHg1MCwgMHgwNiwgMHgyOCwgMHg5RSwgMHgwMSwgMHg2QywgMHgxNCwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MTMsIDB4MDAsIDB4MUIsIDB4MDMsIDB4NEMsIDB4MDYsIDB4MzAsIDB4MTksIDB4QzAsIDB4MjEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDJELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLAorMHgwRSwgMHhDMCwgMHgyRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwNiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4NzAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsIDB4REMsIDB4MDMsCisweEIwLCAweDBGLCAweEMyLCAweDBELCAweDEwLCAweEJELCAweDAwLCAweERDLCAweDAxLCAweEI0LCAweDBGLCAweEMwLCAweDhGLAorMHg1MCwgMHg2QiwgMHgwMCwgMHhGQywgMHgyNiwgMHhGNCwgMHgwQSwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODUsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4MzAsIDB4MEQsCisweEMwLCAweDM3LCAweDAwLCAweDU3LCAweDAyLCAweDRDLCAweDQyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAyLCAweERGLAorMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNCwgMHgwQSwgMHhERiwgMHgwMCwgMHg1QywgMHgyMywgMHg3MCwKKzB4MEQsIDB4QzEsIDB4MTUsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsIDB4NTAsIDB4MEQsIDB4QzksIDB4MzYsIDB4MDgsCisweDE3LCAweDEyLCAweDRELCAweDAzLCAweEYwLCAweDA5LCAweDgyLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHhERCwgMHg2MCwgMHg3MCwgMHgxOCwgMHgxMCwgMHgwRiwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4NTEsIDB4MDUsIDB4NDQsIDB4NEUsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweEFGLCAweDQwLCAweDM4LCAweDAyLCAweEZELCAweDAwLCAweDM0LCAweDJCLCAweEIwLCAweDJFLAorMHg0MCwgMHgwNCwgMHg0MCwgMHgxMSwgMHgwOCwgMHgyQywgMHgwMywgMHgxMCwgMHgyRiwgMHg0OCwgMHgwNCwgMHgwMiwgMHg1MSwKKzB4MDAsIDB4NDQsIDB4MTMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDIwLCAweEMwLCAweDA0LCAweENELCAweDAwLCAweDM0LCAweDBFLCAweDUwLCAweDBDLCAweDQwLCAweDEzLAorMHgwMCwgMHgwNSwgMHgwNiwgMHgwNSwgMHgwRSwgMHhEMCwgMHgwOCwgMHg0MCwgMHhGMywgMHgwNCwgMHgwRCwgMHgwMCwgMHgzNCwKKzB4MDAsIDB4RDAsIDB4MEMsIDB4NjAsIDB4NzAsIDB4MDAsIDB4Q0QsIDB4MDcsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDgsCisweDExLCAweDgwLCAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDNDLCAweDQwLCAweDkwLCAweDAwLCAweDQ5LCAweDAyLAorMHg0NCwgMHgxMywgMHhEMSwgMHg1MCwgMHg0NCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDEsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsCisweDMxLCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LAorMHhEMCwgMHgxQywgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgzMSwgMHhCNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg0OCwKKzB4ODAsIDB4RTUsIDB4MDEsIDB4RTQsIDB4MDQsIDB4MTAsIDB4OUMsIDB4NDAsIDB4NEMsIDB4MDEsIDB4QzksIDB4MDEsIDB4ODQsCisweDE2LCAweEQ4LCAweDlBLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgxQSwgMHg5MCwgMHgwMiwgMHhDRiwgMHgwMCwgMHg3QywgMHgyMywgMHg3MCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHgwNywKKzB4MDQsIDB4MEMsIDB4MDIsIDB4RjAsIDB4NEMsIDB4QzAsIDB4MzMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsCisweDhDLCAweDQwLCAweDMwLCAweDAyLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweERELCAweEMwLCAweDE1LCAweDJBLAorMHg1NywgMHgyNCwgMHgwQywgMHg2MSwgMHg3MCwgMHg4QywgMHhDOSwgMHgyMiwgMHg5MCwgMHg4OSwgMHgxMiwgMHgwQywgMHgwMywKKzB4RjAsIDB4MDAsIDB4QzEsIDB4NEIsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsCisweDNELCAweDA4LCAweEZGLCAweDAwLCAweEZDLCAweDEzLCAweEIwLCAweDBGLCAweEMxLCAweDJGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgyMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg3NywgMHgwMCwgMHhERiwgMHgwOCwgMHhGQywgMHgyMywgMHhGMCwgMHgyRCwKKzB4NTIsIDB4M0YsIDB4MjAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjQsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MjAsIDB4REIsCisweDAwLCAweDdDLCAweDgxLCAweEYwLCAweDhGLCAweEMyLCAweDBCLCAweDgxLCAweEY3LCAweDAwLCAweEYwLCAweDEyLCAweEYwLAorMHgwMywgMHhDMiwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDAxLCAweEYwLCAweDBELCAweEMwLAorMHhCNywgMHgwMCwgMHhERiwgMHgwOCwgMHgzQywgMHgwMywgMHgzMSwgMHgxRCwgMHhDOCwgMHgwNywgMHgxMCwgMHg5RiwgMHgwMCwKKzB4NEYsIDB4MDAsIDB4RjAsIDB4NEQsIDB4QzgsIDB4MTAsIDB4MDgsIDB4OUIsIDB4MDAsIDB4NEQsIDB4ODMsIDB4MzAsIDB4MDEsCisweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMywgMHg0RSwgMHg0MCwgMHgyQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg5QywgMHgwMiwKKzB4RDAsIDB4MEEsIDB4NjAsIDB4QkIsIDB4MTAsIDB4RkMsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4QkIsCisweDA0LCAweEVELCAweDBDLCAweEI0LCAweDAzLCAweDQwLCAweDJFLCAweDQwLCAweDBCLCAweDAwLCAweEVELCAweDIwLCAweDg0LAorMHgwMCwgMHhEMCwgMHhBRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhFNywgMHgwMCwgMHhDNCwgMHg4MywgMHgxMiwgMHgwRiwgMHg0MCwKKzB4NEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTksIDB4MTgsIDB4RTUsCisweDAxLCAweEI0LCAweDA3LCAweDUwLCAweDVFLCAweDQwLCAweDdCLCAweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA2LCAweDUwLAorMHgxRSwgMHg0MCwgMHg3QiwgMHgwMSwgMHhFRCwgMHgxMSwgMHg4NCwgMHgwNywgMHhEMCwgMHhERSwgMHg0MCwgMHg3QiwgMHgwMSwKKzB4RUQsIDB4ODEsIDB4QjQsIDB4MDcsIDB4MDAsIDB4NEUsIDB4NDAsIDB4NUIsIDB4MjAsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDQsCisweEQxLCAweDVDLCAweDUwLCAweDY5LCAweDAwLCAweDg1LCAweDAxLCAweDk0LCAweDBGLCAweDEwLCAweDE2LCAweDQwLCAweDEyLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHhCMywgMHg4MCwgMHhDRCwgMHg0MCwKKzB4MzQsIDB4MjcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MTEsIDB4OEQsIDB4MDMsIDB4MTQsIDB4MDcsIDB4RDAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAxLCAweDA0LCAweDQ3LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHg4MywgMHgwMCwgMHgwQywgMHg0NCwgMHhBMywgMHgwMiwgMHhERCwgMHgwMiwgMHgwNCwgMHgwNSwgMHhEMCwKKzB4MEMsIDB4NDQsIDB4MDEsIDB4MDAsIDB4QzUsIDB4MDcsIDB4MTQsIDB4ODcsIDB4MTAsIDB4NkMsIDB4NDAsIDB4NUEsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDIwLCAweDFELCAweDA0LCAweDVGLCAweDAwLCAweEZDLAorMHgwOSwgMHhGMCwgMHgwNSwgMHhDMCwgMHhERiwgMHgwMSwgMHg3RiwgMHg0NCwgMHg3NCwgMHg0NSwgMHhGOCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4N0YsIDB4MDIsIDB4Q0QsIDB4OTUsIDB4RjAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4ODAsCisweDNDLCAweDAxLCAweDMxLCAweDA1LCAweEMwLCAweDVGLCAweDAwLCAweDdGLCAweDAyLCAweDhDLCAweEJELCAweEYxLCAweDA1LAorMHhDMCwgMHgxRCwgMHgwMCwgMHg2NywgMHgwNywgMHg1QywgMHgwMSwgMHgzNiwgMHgyNywgMHhDNCwgMHg1RSwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDEwLCAweDcwLCAweDAwLCAweEY5LCAweDAxLCAweEM0LCAweDA3LAorMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHg0MiwgMHg3QywKKzB4MDgsIDB4RjQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MUQsIDB4ODIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QTAsCisweDg2LCAweDAwLCAweDE2LCAweDAwLCAweDY4LCAweDA4LCAweEYyLCAweDAxLCAweEQwLCAweDQ5LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMSwgMHg5NywgMHgwMCwgMHg3QywgMHg0RSwgMHhGOCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4ODIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjcsIDB4ODksCisweDkzLCAweDgwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDY0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDE2LAorMHgzMCwgMHgwOCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgzOSwgMHg0QywgMHgwMiwgMHgzNCwgMHgyOSwgMHhEOCwgMHgyNCwKKzB4NDAsIDB4OTEsIDB4MDksIDB4NEMsIDB4MEUsIDB4MzQsIDB4MDgsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY2LCAweDAxLCAweDlELCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDA5LAorMHg2MCwgMHgyMywgMHgyMCwgMHg5MSwgMHgwMywgMHg3NiwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHhFQiwgMHg4MSwgMHg4QiwKKzB4MDAsIDB4NkMsIDB4MDIsIDB4NTAsIDB4MTksIDB4RDAsIDB4NjQsIDB4MTIsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4QjAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDQzLCAweDQ1LCAweDJFLCAweDEwLCAweDM4LCAweDQ4LCAweEEwLCAweDExLAorMHg5MSwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxMiwgMHgyOSwgMHg0MCwgMHgwNSwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MTgsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDBFLCAweEQxLCAweDA5LCAweDQ4LCAweDI1LCAweDgwLCAweDkxLCAweDAwLAorMHgxNCwgMHgwMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg1NCwgMHgwQSwgMHg5MCwgMHgwOSwKKzB4NDQsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTUsCisweDAyLCAweDI1LCAweDAyLCAweDEwLCAweDQ5LCAweDYwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMiwgMHgyMCwgMHgwNSwgMHg4RCwgMHgwMCwgMHgzNCwgMHg1MiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBNywKKzB4MDgsIDB4ODEsIDB4MDAsIDB4MzYsIDB4MDIsIDB4REEsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDgsIDB4MDQsCisweDIyLCAweDEwLCAweDhDLCAweDYwLCAweDIyLCAweDgwLCAweDhELCAweDI0LCAweDM0LCAweDAyLCAweDk0LCAweDU4LCAweDQwLAorMHgyMiwgMHgwMCwgMHg4RCwgMHgwQywgMHg0NCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgyNCwgMHgwMCwgMHg4NSwgMHgwMCwKKzB4MjQsIDB4MjIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEI4LCAweDA2LCAweDExLCAweDFGLCAweDAwLCAweDVDLCAweDEwLCAweEQwLCAweDQxLCAweDQxLCAweDA3LCAweDQwLAorMHgxMywgMHgwMCwgMHg3NiwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0NywgMHg0MCwgMHgxMSwgMHgwMiwgMHg1NCwgMHgwOCwKKzB4MzQsIDB4NjEsIDB4QzEsIDB4MTQsIDB4MTUsIDB4MUYsIDB4OEEsIDB4N0MsIDB4MDAsIDB4QjQsIDB4QTEsIDB4QzQsIDB4ODQsCisweDAyLCAweDBGLCAweDAyLCAweDRDLCAweDAwLCAweDMwLCAweDQxLCAweEMxLCAweDA0LCAweDAwLCAweDE1LCAweDE0LCAweDZDLAorMHgwOSwgMHgzMCwgMHhBNSwgMHhDMCwgMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjgsIDB4MkYsIDB4MDUsIDB4OUYsIDB4MDAsIDB4RkMsIDB4NTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NkYsIDB4MjAsIDB4QkYsCisweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDJCLCAweEMwLCAweEE3LCAweDAwLCAweEJGLCAweDA0LCAweEZDLCAweDEyLCAweEYwLAorMHg0OSwgMHg0MiwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGNCwgMHg4OSwgMHhDMCwgMHgyRCwgMHgwMCwKKzB4QkYsIDB4MEMsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkIsIDB4MDAsIDB4REMsIDB4MTIsCisweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEE4LAorMHgyRiwgMHgwMSwgMHg5RiwgMHgwMCwgMHhGQywgMHgzMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgyMCwgMHhCRiwgMHgwMCwKKzB4Q0QsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzUsIDB4NkYsIDB4MDAsIDB4OUIsIDB4ODAsIDB4NkUsIDB4MDIsIDB4NzksIDB4OEIsCisweEMwLCAweDJGLCAweDAxLCAweEJCLCAweDE0LCAweEFDLCAweDgyLCAweDMwLCAweDBCLCAweENDLCAweDIxLCAweDAwLCAweEJGLAorMHgyOCwgMHhDQywgMHg4MiwgMHgzMSwgMHg0QiwgMHhDMSwgMHgyRSwgMHg2OCwgMHhBMywgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsCisweDA1LCAweDFELCAweDAwLCAweDcwLCAweDMxLCAweDE0LCAweDIxLCAweDQwLCAweDQ3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHg1QSwgMHgzMCwgMHg0NCwgMHhDMCwgMHhEOCwgMHg4MSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MDAsIDB4MTAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDQsIDB4NUQsIDB4MDgsCisweDRDLCAweDAwLCAweDExLCAweDAxLCAweDQwLCAweDA3LCAweDMwLCAweDExLCAweDAwLCAweDY0LCAweDgwLCAweEQwLCAweDAxLAorMHg0MCwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwMywKKzB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MDQsIDB4ODIsCisweEQyLCAweDA4LCAweDBBLCAweEEzLCAweDAwLCAweDg5LCAweDA0LCAweDA0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMiwgMHg4OSwgMHgxNCwgMHgxNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwKKzB4MDIsIDB4MTgsIDB4MDgsIDB4NDgsIDB4MjcsIDB4MjAsIDB4ODUsIDB4MDAsIDB4MzYsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweEE1LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDgsIDB4MjYsIDB4MjAsIDB4ODksIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsCisweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDY4LCAweDI1LCAweDEwLCAweDlELCAweDA0LCAweDQ2LCAweDAyLAorMHg5OSwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHhENSwgMHgwMCwgMHg2NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MSwgMHg2MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDdDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDJGLCAweDA2LCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5QiwgMHgwMiwgMHg2NSwgMHg0MiwgMHg3MiwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5QiwKKzB4MDAsIDB4NTQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MzMsIDB4OUYsIDB4MjEsIDB4NEMsIDB4NDYsIDB4MzAsCisweDA5LCAweEMwLCAweDIyLCAweDAwLCAweDk1LCAweEE3LCAweDdFLCAweDgyLCAweEUwLCAweDM5LCAweEMwLCAweDE3LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyNSwgMHgyNSwgMHg5RiwgMHg4MCwgMHgzQywKKzB4MDYsIDB4NzAsIDB4MDksIDB4RTIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4NTksIDB4QzAsCisweDI3LCAweDBDLCAweDk3LCAweDAyLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDUwLAorMHg1QywgMHgwMiwgMHgzMiwgMHgwOSwgMHhFOCwgMHgyNywgMHgxMCwgMHg4RiwgMHgwMSwgMHg1QywgMHgwQSwgMHg3NCwgMHgwOSwKKzB4QzEsIDB4QTYsIDB4MDAsIDB4OUIsIDB4MDUsIDB4N0UsIDB4MDIsIDB4RjAsIDB4NTksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDQwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg4MCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwMywKKzB4MDAsIDB4MTcsIDB4MDIsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MDAsIDB4MDEsIDB4MUYsIDB4MDAsIDB4NEMsCisweDAwLCAweEIwLCAweDgxLCAweEMxLCAweDA3LCAweDQwLCAweDE3LCAweDIyLCAweDVDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHg0MCwgMHgzMCwgMHgwMSwgMHg4MiwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4OUMsIDB4MDAsIDB4NUQsIDB4NDAsIDB4RjQsIDB4MDUsIDB4RDgsCisweDA1LCAweEMwLCAweDE1LCAweDIwLCAweDZDLCAweDAwLCAweEY0LCAweDQ5LCAweDEwLCAweDA1LCAweDQwLCAweDlGLCAweDgwLAorMHg1QiwgMHgwMCwgMHg3NiwgMHgwMSwgMHhEMCwgMHg4NywgMHg0MCwgMHg5QywgMHgwMCwgMHg3RCwgMHgwMiwgMHg4NCwgMHgwMSwKKzB4RjQsIDB4MjcsIDB4QzAsIDB4MTUsIDB4MDAsIDB4NzEsIDB4MDAsIDB4ODQsIDB4ODksIDB4MTAsIDB4NzcsIDB4NDAsIDB4REYsCisweDAwLCAweDcwLCAweDA3LCAweEM0LCAweDAxLCAweDE2LCAweDk3LCAweDQwLCAweDQzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHhGMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgyMywgMHhEMCwgMHgwQywKKzB4NDgsIDB4MzEsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MzYsIDB4MUYsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MTAsIDB4QzUsCisweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDNDLCAweDYwLCAweEIwLCAweDAwLCAweEQ1LCAweDBCLCAweDAwLCAweDAzLCAweDkxLAorMHgzQywgMHg0NCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMSwgMHgzNCwgMHgwQSwgMHg1MCwgMHgxNCwgMHg0MCwgMHhGMiwgMHgwMSwKKzB4QzEsIDB4MDcsIDB4MjQsIDB4MEIsIDB4MTIsIDB4OEMsIDB4NDQsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDA0LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgzOSwgMHgwMSwgMHg2RCwgMHgxMCwgMHhCNCwgMHgwNCwgMHgxOCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFMSwgMHg0NCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MzYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODUsIDB4MDMsIDB4RDQsIDB4MDYsCisweDYwLCAweDdELCAweDAyLCAweEUxLCAweDAyLCAweEU2LCAweDAyLCAweDEwLCAweDA2LCAweDQwLCAweEJCLCAweDIwLCAweEUxLAorMHg2MSwgMHhFNSwgMHg4RiwgMHg1MCwgMHgwNiwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDUsIDB4RDAsIDB4MUUsIDB4QzAsIDB4RjksCisweDAwLCAweDJCLCAweDAxLCAweEJDLCAweDA0LCAweEIxLCAweDFFLCAweEMwLCAweDczLCAweDAwLCAweEU1LCAweDM1LCAweEI0LAorMHgyRiwgMHhCMCwgMHgxRiwgMHhEMCwgMHg3OCwgMHgwMCwgMHhDRiwgMHg0MSwgMHg4QywgMHgwNSwgMHhCNCwgMHgxNiwgMHhDMCwKKzB4NzksIDB4MDMsIDB4RjMsIDB4MDEsIDB4QkQsIDB4MDQsIDB4NzAsIDB4MTYsIDB4QzAsIDB4N0IsIDB4NDAsIDB4MjMsIDB4MDEsCisweEFDLCAweDA3LCAweDMxLCAweDFFLCAweEM0LCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4MUUsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4REYsIDB4NEEsIDB4N0MsIDB4MUIsCisweEYwLCAweDA1LCAweEM4LCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEY2LCAweDA1LCAweEM2LCAweEI1LAorMHgwMSwgMHg1RSwgMHgwMCwgMHgxQywgMHgwMCwgMHg1MCwgMHgwNSwgMHhDMCwgMHgzMywgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywKKzB4MDMsIDB4QjAsIDB4MDksIDB4QzgsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDIwLCAweDVELCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDI3LCAweEY4LCAweDhGLCAweEMwLCAweDdCLCAweDAwLCAweDNCLAorMHgwMSwgMHhGQywgMHgwNCwgMHg3MCwgMHgxRiwgMHhDMCwgMHg1RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHhGRSwgMHgyNywgMHhCMCwKKzB4MUIsIDB4QzAsIDB4NzYsIDB4MDAsIDB4RkYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsIDB4OTMsIDB4QzQsIDB4N0YsIDB4MDAsCisweEIzLCAweDAxLCAweENDLCAweDE2LCAweEY4LCAweDk3LCAweEMwLCAweDdCLCAweDAwLCAweEZCLCAweDQxLCAweEY4LCAweDA0LAorMHgzNCwgMHg5QiwgMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwKKzB4MTksIDB4MjIsIDB4RTEsIDB4NDAsIDB4QjQsIDB4ODEsIDB4NzgsIDB4MEUsIDB4NDIsIDB4M0IsIDB4MDAsIDB4NjEsIDB4MDAsCisweEI0LCAweDAwLCAweEQwLCAweDBFLCAweDQ0LCAweDFCLCAweDIxLCAweEU2LCAweDA4LCAweEY0LCAweDIzLCAweDE0LCAweDBBLAorMHg0MCwgMHg3OCwgMHgwMCwgMHhCRCwgMHgwMCwgMHg4NCwgMHgyMywgMHhGMCwgMHgwMCwgMHg0MCwgMHgzQiwgMHgwMSwgMHhBMSwKKzB4MjQsIDB4QUMsIDB4MTIsIDB4QjAsIDB4MDYsIDB4QzAsIDB4M0IsIDB4MDYsIDB4RTEsIDB4MDgsIDB4QjQsIDB4MjAsIDB4QjAsCisweDAzLCAweDQ4LCAweDU1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LAorMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHg1OCwgMHg4RSwgMHg0MCwgMHg3RiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhCNCwKKzB4MDAsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MTksIDB4MDgsIDB4RUMsIDB4NDIsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsCisweDM4LCAweDAwLCAweDZELCAweDAwLCAweEE0LCAweDAxLCAweDEwLCAweDAyLCAweDYwLCAweDM5LCAweDI0LCAweEUxLCAweDgwLAorMHhCNCwgMHg3MiwgMHgxQywgMHgwNiwgMHg0NiwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHg0MCwgMHg1MCwgMHgwQSwKKzB4NDIsIDB4MjAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MjUsIDB4MDAsCisweEMxLCAweDIwLCAweDM0LCAweDA4LCAweDU4LCAweDBDLCAweDQwLCAweEYzLCAweDAwLCAweDQ5LCAweDExLCAweDM0LCAweDIwLAorMHhEOCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHg5MCwgMHgwMSwgMHg0MCwgMHgwMiwKKzB4ODAsIDB4MEQsIDB4MDAsIDB4MjQsIDB4MDEsIDB4OTAsIDB4MDAsIDB4NDAsIDB4RjMsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MzQsCisweDA2LCAweDkwLCAweDA0LCAweDQwLCAweEYxLCAweDAwLCAweEMxLCAweDAwLCAweDM2LCAweDA0LCAweDE4LCAweDM5LCAweDQwLAorMHgwOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHhBNSwgMHg0MCwgMHhEMywKKzB4MDAsIDB4N0MsIDB4NkUsIDB4NzAsIDB4MEQsIDB4NDAsIDB4RjcsIDB4NDAsIDB4MEIsIDB4MDcsIDB4N0MsIDB4MDAsIDB4NzAsCisweDBELCAweEMyLCAweDE1LCAweDAwLCAweEZGLCAweDAxLCAweEY0LCAweDRGLCAweDMwLCAweDBELCAweEMwLCAweDI0LCAweDAwLAorMHgxRiwgMHgwMCwgMHgyNCwgMHgwMiwgMHgzMCwgMHgwMSwgMHhDMCwgMHhGOSwgMHgwMCwgMHg1MywgMHhBMywgMHgzQywgMHgwMiwKKzB4MzAsIDB4MDQsIDB4NDAsIDB4NzcsIDB4MDgsIDB4REYsIDB4MjUsIDB4N0MsIDB4MDcsIDB4NTAsIDB4NjEsIDB4QzAsIDB4NTQsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDExLCAweERGLCAweDAwLAorMHg3QywgMHgwQSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4RDcsIDB4MDgsIDB4N0MsIDB4NDMsIDB4NzAsIDB4MDUsIDB4RDgsIDB4MjUsIDB4MTAsIDB4OUYsCisweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDA0LCAweERGLCAweDA4LCAweDY4LCAweDBBLCAweEY5LAorMHgyNSwgMHg4MCwgMHgzNywgMHgwMSwgMHgwRSwgMHgxMCwgMHg3QywgMHgwQiwgMHhGMiwgMHgyMSwgMHhDMCwgMHhCNywgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDBFLCAweEMwLCAweDNFLCAweDA0LCAweDMzLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLAorMHg3RiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMywgMHg3MCwgMHgyQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHgzQiwgMHgyMCwKKzB4RkMsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MjMsIDB4MTEsIDB4Q0MsIDB4NDIsIDB4NzYsIDB4ODcsCisweEMwLCAweDNDLCAweDAwLCAweDNGLCAweDAyLCAweEM0LCAweDA3LCAweEYwLCAweDAzLCAweEMxLCAweDA0LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg2NiwgMHgwOCwgMHhEMSwgMHg0MCwgMHg3NiwgMHgwNCwKKzB4RDAsIDB4MEQsIDB4NDgsIDB4MzUsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MTQsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MjcsCisweDgwLCAweERELCAweDgwLCAweDdDLCAweDAzLCAweEQwLCAweDExLCAweDQwLCAweEM0LCAweDQ0LCAweDkxLCAweDIxLCAweDdDLAorMHgwNywgMHhCMCwgMHg1MSwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMSwgMHgwQiwgMHg0NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0OCwKKzB4RjAsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NDQsIDB4MDAsIDB4RDIsIDB4MzEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEyLCAweDQ2LCAweDA0LCAweEQxLCAweDAwLCAweDc0LCAweDBFLCAweEQwLAorMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgxMSwgMHgzMCwgMHg2NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0OCwgMHgxNywgMHgwMSwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDIsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4OTEsIDB4ODMsIDB4NzYsIDB4NDYsCisweDkwLCAweDExLCAweDQwLCAweDM3LCAweDAwLCAweDExLCAweDAyLCAweDQ2LCAweDBFLCAweDUwLCAweDA1LCAweDQwLCAweDY0LAorMHg0NCwgMHhEMSwgMHgyMCwgMHg1NCwgMHgxOCwgMHhEMiwgMHgzOSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsCisweDQwLCAweDMxLCAweDAwLCAweDUxLCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDExLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg3MCwgMHgwMCwgMHgwMSwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHg5OSwKKzB4MDAsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MjQsIDB4MDAsCisweDAxLCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDAwLCAweDUyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwRCwgMHg0MCwKKzB4M0MsIDB4ODAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4NjAsIDB4MTcsIDB4MDAsIDB4RkQsIDB4MDAsCisweEVDLCAweDAzLCAweEY4LCAweDAwLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEIwLCAweDgxLAorMHhDMCwgMHgzQiwgMHg0MCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMiwgMHg3MCwgMHgwMSwgMHhDMCwgMHgyNCwgMHgxMCwgMHhEMywKKzB4MDAsIDB4MUMsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzQsIDB4MDQsIDB4NjQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEI4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMyLCAweDNELAorMHg0MCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywKKzB4MDMsIDB4RjAsIDB4MDMsIDB4MDAsIDB4MEYsIDB4MkEsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDMsIDB4NzAsIDB4MDMsIDB4QzAsCisweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDA3LCAweDQwLCAweDBGLCAweDQwLCAweDM3LCAweDAwLAorMHhFQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDOCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTgsIDB4N0YsIDB4MDAsIDB4M0UsIDB4MDAsIDB4RkMsIDB4MDQsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MkMsIDB4MDAsCisweEJGLCAweDI0LCAweENDLCAweDAzLCAweEYwLCAweDQzLCAweEMxLCAweDNELCAweDIxLCAweDNGLCAweEEwLCAweERDLCAweDEzLAorMHgzMCwgMHg5RSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg5OCwgMHgxNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg0QywKKzB4MDAsIDB4RkYsIDB4MDMsIDB4RkMsIDB4MDcsIDB4RjAsIDB4NEYsIDB4QzAsIDB4N0UsIDB4MDIsIDB4RkYsIDB4MDAsIDB4Q0MsCisweDAzLCAweDMwLCAweDgzLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgxMCwgMHgzNiwgMHgwNSwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwRCwgMHg1MCwgMHgyNCwgMHgwOCwgMHg5RCwKKzB4MDgsIDB4QzQsIDB4MkIsIDB4MTAsIDB4MzksIDB4NDQsIDB4N0MsIDB4MDIsIDB4OUQsIDB4MDEsIDB4QzQsIDB4MjMsIDB4MTEsCisweDFELCAweDQwLCAweEZGLCAweDAxLCAweDVELCAweDAxLCAweEM0LCAweDBGLCAweEQwLCAweDBELCAweDQwLCAweDQ0LCAweDAwLAorMHhERCwgMHgwMCwgMHg1QywgMHgwNywgMHhEMCwgMHhCRiwgMHg0MCwgMHgzNCwgMHgwMSwgMHhGNywgMHgwMywgMHhDNCwgMHgyRiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MEQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsCisweDMzLCAweDAwLCAweDBELCAweDAzLCAweDU0LCAweDAwLCAweDkwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDAwLAorMHgwNCwgMHg4MywgMHgxMCwgMHgwMSwgMHg2MCwgMHgzMCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxMCwgMHg0QywKKzB4NDAsIDB4MzIsIDB4MDYsIDB4ODksIDB4MDAsIDB4MDUsIDB4MjMsIDB4RDIsIDB4MEMsIDB4NDgsIDB4MDAsIDB4MjAsIDB4Q0QsCisweDA0LCAweDM2LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAxLCAweENELCAweDAyLCAweDA1LCAweDAzLCAweDE0LAorMHg0MCwgMHg0NCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzNSwKKzB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4NDYsIDB4OTQsIDB4MEQsIDB4NDAsIDB4RTUsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsCisweDAzLCAweDEwLCAweDE5LCAweDQwLCAweDM0LCAweDAwLCAweDFELCAweDAxLCAweDY0LCAweDAzLCAweDExLCAweDBELCAweDQwLAorMHgzNywgMHgyMCwgMHhEQywgMHgxMCwgMHg0NCwgMHgwMywgMHhEMCwgMHg4QywgMHg0MCwgMHg0NCwgMHgwMCwgMHhEQywgMHgwMCwKKzB4NTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4NDksCisweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLAorMHgxRiwgMHgwMSwgMHg3QywgMHgwQywgMHhCMCwgMHgwRCwgMHhDMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHg4MCwgMHgwQywgMHgwMywKKzB4QjQsIDB4MzUsIDB4QzAsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NkMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzIsIDB4MzYsCisweDIwLCAweERCLCAweDgwLCAweDVDLCAweDAzLCAweEUwLCAweDFELCAweDgwLCAweDQ0LCAweDA0LCAweDlGLCAweDA4LCAweDdDLAorMHgwNywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgxRCwgMHhDMCwKKzB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4MkYsCisweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDBGLCAweEMwLCAweDJFLCAweDAwLCAweDlGLCAweDAwLCAweEZELCAweDAzLCAweEIwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgyRiwgMHhDNiwgMHgzRiwgMHgwMCwKKzB4NjksIDB4MDgsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MUYsIDB4RDAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjcsCisweEYxLCAweDBFLCAweEM0LCAweDNGLCAweDAxLCAweERGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDE3LCAweEM4LCAweDFGLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwNCwgMHgxRiwgMHgyMSwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4QzMsIDB4MzAsIDB4MjUsCisweEMwLCAweDM0LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDEzLCAweEYwLCAweDBELCAweEQwLCAweDM0LCAweDAwLCAweDlGLAorMHgyMSwgMHg2QywgMHg0MywgMHgzMCwgMHgwRCwgMHhEMSwgMHg0NCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzIsIDB4MzYsIDB4MDAsIDB4Q0YsIDB4MDQsIDB4NEMsIDB4MTMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4OEIsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEI0LCAweDAwLCAweDFELCAweDAwLCAweDM0LAorMHgxMiwgMHhEMCwgMHhCRCwgMHg0MSwgMHgyNywgMHgwNCwgMHhEMSwgMHgwMCwgMHhENCwgMHgxMywgMHgxMCwgMHgwQywgMHg0NSwKKzB4M0MsIDB4MDAsIDB4MUQsIDB4MDAsIDB4RTQsIDB4MDMsIDB4RDIsIDB4MEQsIDB4NDAsIDB4M0MsIDB4MDAsIDB4REQsIDB4MDAsCisweEM0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDA0LCAweDAwLCAweEQxLCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDFGLAorMHg0MCwgMHgzNCwgMHgwMCwgMHhGRCwgMHg4MiwgMHhDNCwgMHgwQiwgMHhEMCwgMHgwNSwgMHg0MCwgMHg2RiwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsIDB4MDAsIDB4MEQsIDB4MjAsIDB4MzQsIDB4MDAsCisweEQwLCAweDFELCAweDQwLCAweDMzLCAweDAwLCAweDk0LCAweDYwLCAweDI0LCAweDAzLCAweDEwLCAweDA0LCAweDQwLCAweDMyLAorMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwKKzB4MjMsIDB4NTAsIDB4MkMsIDB4NDAsIDB4MDMsIDB4ODQsIDB4QzUsIDB4MTIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4OUMsIDB4NDAsCisweDMwLCAweDAwLCAweEM5LCAweDQ5LCAweDI0LCAweDI3LCAweEQwLCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgyRCwgMHgyMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4OUUsIDB4NDAsIDB4NkIsIDB4MDIsIDB4QTQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4N0EsIDB4MDAsCisweEVELCAweDgxLCAweEE0LCAweDA3LCAweEQwLCAweDFGLCAweDYwLCAweDdBLCAweDAwLCAweEM5LCAweDAzLCAweDg0LCAweDA3LAorMHg1MCwgMHgxRSwgMHg0MCwgMHg0QiwgMHg1MCwgMHhFNSwgMHg4OSwgMHhCNCwgMHgxNywgMHhEMSwgMHgxQywgMHg0MCwgMHg3OCwKKzB4MDAsIDB4RUQsIDB4ODEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4OUUsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDAwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDhDLAorMHhDMCwgMHgzNywgMHgwOCwgMHg4NywgMHgwMCwgMHg2QywgMHgxMywgMHgzMCwgMHgwNCwgMHhDMCwgMHgzMiwgMHgwMCwgMHg0RiwKKzB4MDIsIDB4M0MsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDMsIDB4NzAsCisweDBELCAweEMwLCAweDAzLCAweDAwLCAweEM3LCAweDA4LCAweDNDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLAorMHhDQiwgMHgwMCwgMHgyQywgMHgwMywgMHhGMCwgMHg4NCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsIDB4RTgsCisweDNGLCAweDQwLCAweEJCLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDNELCAweDAyLCAweEZGLCAweDAwLAorMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgyNCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhCMiwgMHgwRiwKKzB4QzAsIDB4MDgsIDB4MDIsIDB4RkIsIDB4MjgsIDB4RkMsIDB4OTMsIDB4RjAsIDB4MEYsIDB4RDAsIDB4M0QsIDB4MDAsIDB4RkYsCisweDAwLCAweERELCAweDAzLCAweEYyLCAweDhGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhCMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgxRCwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4NzAsIDB4MDUsIDB4QzQsIDB4NzcsIDB4MDEsIDB4OUIsIDB4MDAsIDB4N0MsCisweDRCLCAweEUwLCAweDFELCAweEMyLCAweDM1LCAweDA1LCAweENELCAweDAxLCAweDRDLCAweDFCLCAweEYwLCAweDBELCAweEMwLAorMHgwNywgMHgwMCwgMHhERiwgMHgwMSwgMHgxQywgMHgwNywgMHg3MCwgMHhDRCwgMHhDMCwgMHgzNywgMHgyMCwgMHhERiwgMHgwQSwKKzB4M0MsIDB4NEYsIDB4MzAsIDB4MDksIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDgwLCAweDM5LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAzLCAweDcwLCAweDBFLCAweDQwLCAweDFDLCAweDAwLAorMHhBMSwgMHgwMCwgMHhBQywgMHg1MywgMHgxMCwgMHgwRSwgMHg0MCwgMHhCQiwgMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0MsIDB4MDEsIDB4RTEsIDB4MDAsIDB4ODQsIDB4NTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MEIsCisweDAwLCAweEZELCAweDAwLCAweDhDLCAweDAzLCAweDEwLCAweDhFLCAweDQwLCAweDNCLCAweDAwLCAweEU3LCAweDEwLCAweEI0LAorMHgxMywgMHhCMCwgMHgwMCwgMHhDMCwgMHg0RSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4NzksIDB4MDAsIDB4NkQsIDB4MDEsIDB4OTQsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MEMsIDB4QzEsCisweDAxLCAweDA0LCAweDI3LCAweDUwLCAweDFFLCAweDQwLCAweDczLCAweDAxLCAweEUxLCAweDAxLCAweEI0LCAweDI3LCAweDUwLAorMHgzRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NSwgMHgyNywgMHhEMCwgMHgxRSwgMHg0MywgMHg0QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4NUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RTUsIDB4MjUsIDB4QjYsIDB4MzcsCisweDEwLCAweDFBLCAweDQwLCAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHg0QiwgMHg1MCwgMHgwQywgMHg2MCwgMHg3MCwgMHgwMSwgMHhDMSwgMHgwMSwKKzB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDEsIDB4MzMsIDB4ODAsIDB4QzEsIDB4MTAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MTgsCisweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweEYzLCAweDAwLCAweENELAorMHgwMSwgMHgwNCwgMHgwNiwgMHgxNCwgMHgwQywgMHg0MCwgMHgzNywgMHgxMCwgMHhDNSwgMHg4MCwgMHgzNiwgMHgwMywgMHg5MCwKKzB4NDEsIDB4NDAsIDB4NEEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTUsCisweDAwLCAweDdGLCAweDA1LCAweEZDLCAweDAxLCAweEYwLCAweDA1LCAweEQwLCAweDFDLCAweDAwLCAweDUzLCAweDQxLCAweDRDLAorMHgwMSwgMHg3MCwgMHgyNywgMHhDMCwgMHgxNywgMHg0MCwgMHg3MywgMHhDMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MTAsIDB4N0YsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MTUsIDB4QzAsIDB4NUYsIDB4MDEsIDB4NUYsIDB4MDEsCisweDVELCAweDE1LCAweDcwLCAweDA0LCAweEMyLCAweDU3LCAweDAxLCAweDQ3LCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDE3LAorMHhDMSwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4NSwgMHgwMCwKKzB4MUYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDgsIDB4M0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMSwgMHgxRiwgMHgwOCwgMHg1QywKKzB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzgsCisweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLAorMHgwNSwgMHg0QywgMHgwMiwgMHgzNiwgMHgwOSwgMHhDMCwgMHhBMywgMHg0MCwgMHg4MywgMHgwNSwgMHg0QywgMHgwNiwgMHhCMCwKKzB4MDgsIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlCLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDI2LAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5QywgMHgwMCwgMHg0OCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHg0MCwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjQsIDB4MDAsIDB4OUQsIDB4MDAsCisweDQ0LCAweDAyLCAweDEwLCAweDE5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDAxLCAweDdDLCAweDJBLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHhFMCwgMHgyNywgMHgwMCwgMHg5MSwKKzB4MTAsIDB4NzQsIDB4MUUsIDB4RDEsIDB4OTksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4NDIsIDB4NUMsIDB4MDIsIDB4RDAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDk1LCAweDgwLCAweDU0LCAweDFBLCAweEQwLCAweDA5LCAweEMwLCAweDA2LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwgMHg4RCwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4MTgsIDB4NDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MUQsIDB4NDAsCisweDI2LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDYwLCAweDIzLCAweDAwLCAweDk5LCAweDAxLAorMHg3NCwgMHgxMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHg1MCwgMHg4OSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MTgsIDB4NTQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDAyLAorMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMSwgMHg4MSwgMHgwNCwgMHgxNCwgMHgxMywgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwKKzB4MDEsIDB4OEQsIDB4MDQsIDB4MzYsIDB4MTYsIDB4RDEsIDB4MDgsIDB4NDIsIDB4MjEsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MzQsCisweDEyLCAweEQ4LCAweDA4LCAweDQwLCAweDYxLCAweDgwLCAweDhELCAweDAxLCAweDE0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLAorMHgyMiwgMHgzMCwgMHg4NSwgMHg0NCwgMHgxNiwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4OTYsIDB4MDIsIDB4MUYsIDB4MEEsIDB4NEQsIDB4MjgsIDB4MzAsCisweEEwLCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDBBLCAweDQ0LCAweDI4LCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLAorMHgxNywgMHgxMCwgMHg3QywgMHgwMCwgMHhGMCwgMHhBMCwgMHg0MCwgMHg4NywgMHgwMiwgMHgxQiwgMHgwMCwgMHg3NCwgMHgwMCwKKzB4RjAsIDB4QTEsIDB4QzgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODQsCisweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDAwLCAweEYyLCAweDIxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHg4OCwgMHgyNywgMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4NDgsIDB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzQsIDB4MjcsIDB4MDIsIDB4QkYsCisweDAwLCAweDdDLCAweDYyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LCAweDAyLCAweEJGLCAweDA4LCAweDdDLCAweDIyLCAweEYwLAorMHgwQiwgMHhEOCwgMHgyRSwgMHgwMCwgMHhCRiwgMHg0MCwgMHhEQywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMiwgMHgyRiwgMHgwNCwKKzB4OTMsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjIsIDB4OEIsIDB4QzEsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJELCAweDAwLCAweEJGLCAweDBDLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLAorMHgyQywgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywgMHg1MiwgMHgzNCwgMHg0RiwgMHg4MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4RjgsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjUsIDB4QkYsIDB4MDQsIDB4RDQsIDB4MDIsIDB4NzAsIDB4MEEsCisweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDRCLCAweEMwLCAweDI3LCAweDAwLCAweEEzLAorMHg4MCwgMHhCQywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg2MSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MEQsIDB4MkMsIDB4NDQsIDB4NDEsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MTQsCisweDAyLCAweDAxLCAweDE0LCAweDc0LCAweDEwLCAweDEzLCAweDgxLCAweDQwLCAweDg3LCAweDAwLCAweDFELCAweDAwLCAweDc0LAorMHgyMCwgMHhEMCwgMHg0MSwgMHg0MSwgMHgwNiwgMHgwMSwgMHgxRCwgMHgwOCwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwMSwgMHg0MSwKKzB4MDQsIDB4MDAsIDB4MUQsIDB4MTQsIDB4NzQsIDB4MDAsIDB4QzAsIDB4ODEsIDB4NDQsIDB4NDcsIDB4MDUsIDB4MUIsIDB4MDAsCisweDc0LCAweDIwLCAweEQwLCAweDExLCAweDQwLCAweDcxLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgyMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwNCwgMHgwNSwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHg0MCwKKzB4ODEsIDB4MDQsIDB4MzQsIDB4NTIsIDB4MTAsIDB4MDgsIDB4NDgsIDB4MjIsIDB4MDIsIDB4ODgsIDB4MDgsIDB4MzQsIDB4MDIsCisweEQwLCAweDQ4LCAweDQwLCAweDIxLCAweDA1LCAweDhELCAweDAxLCAweDE0LCAweDIyLCAweEQwLCAweDA4LCAweDQwLCAweDYxLAorMHgwMCwgMHg4RCwgMHgwNCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwOCwgMHgzNCwKKzB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NEIsIDB4ODgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA5LCAweDYwLCAweDI0LCAweDAxLCAweEQxLAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwQSwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MTksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDgsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NTAsIDB4MjUsIDB4MDEsCisweDlELCAweDAxLCAweDc0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDk4LCAweDAwLCAweDc0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4RDAsIDB4RTQsIDB4MDgsIDB4OTMsIDB4MDEsCisweDdDLCAweDAyLCAweDM0LCAweDY5LCAweEM4LCAweDI2LCAweDAwLCAweDlCLCAweDAzLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDQywgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg1QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTAsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI1LAorMHgwMCwgMHg5RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywKKzB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzgsCisweDI3LCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDQyLCAweDcwLCAweDQ5LCAweEMwLCAweDI2LCAweDA4LCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwKKzB4QzAsIDB4NTksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDEsCisweDFGLCAweDAwLCAweDRDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDg0LCAweDQwLCAweDEzLCAweDEwLCAweDRDLCAweDAwLAorMHgzMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4QjAsIDB4MTEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDExLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLAorMHg1MSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1QywgMHgwMCwgMHg1RCwKKzB4ODAsIDB4NDQsIDB4MDUsIDB4MzAsIDB4MDcsIDB4NDAsIDB4NTQsIDB4NDAsIDB4NzEsIDB4MDUsIDB4QzYsIDB4MjksIDB4MTAsCisweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDA5LCAweEQwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLAorMHg3RCwgMHgwQSwgMHhGNCwgMHgwMSwgMHg3MCwgMHgxNywgMHg0MCwgMHg5QywgMHgwMCwgMHg3RCwgMHgxMCwgMHg1QywgMHgwMSwKKzB4RDAsIDB4MTcsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NzEsIDB4MDcsIDB4QzQsIDB4MTksIDB4NTAsIDB4MDUsIDB4NDgsIDB4NTAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDcyLCAweDAyLCAweERELCAweDAwLAorMHgwNCwgMHgwMywgMHg1MCwgMHgxNSwgMHg0OSwgMHg3NiwgMHgyMCwgMHhDMSwgMHgwMiwgMHgyNCwgMHgwRiwgMHgxMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MzcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDBCLCAweDM0LCAweDA3LCAweDUwLCAweDlDLCAweDQyLCAweEEwLCAweDA0LCAweENELCAweDA1LCAweDM0LCAweDAzLCAweEQwLAorMHgxQywgMHg0MCwgMHgzNywgMHgwMCwgMHgwNSwgMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgwQywgMHg0MCwgMHg1MSwgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsCisweDBBLCAweDEwLCAweDJBLCAweDQwLCAweDMyLCAweDI0LCAweEUxLCAweDAxLCAweEE0LCAweDBBLCAweDEwLCAweDJFLCAweDQ4LAorMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHg4MywgMHhEMCwgMHg0RSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwMCwKKzB4QjQsIDB4MDksIDB4NDAsIDB4MEYsIDB4NDAsIDB4MTgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsCisweDQ5LCAweDNCLCAweDAwLCAweDI1LCAweDAwLCAweDg0LCAweDA0LCAweDUwLCAweDBFLCAweDQ4LCAweDEwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg2OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhDQywgMHgwNywKKzB4NzAsIDB4MUYsIDB4RDAsIDB4N0EsIDB4MDAsIDB4QTMsIDB4MDEsIDB4RTQsIDB4MDcsIDB4MzQsIDB4MUEsIDB4QzAsIDB4N0IsCisweDAwLCAweEVELCAweDAxLCAweEJDLCAweDA1LCAweEYwLCAweDdFLCAweDQxLCAweDdCLCAweDA1LCAweEFGLCAweDAxLCAweEI4LAorMHgwNSwgMHg3MCwgMHgxRSwgMHhDMCwgMHg0OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4QTUsIDB4MDAsIDB4OEMsIDB4MDYsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NTEsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweDBELCAweDAwLCAweDlGLCAweDAyLCAweDdELCAweDFBLCAweDc0LAorMHg2QiwgMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1RCwgMHgxQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4ODEsCisweDcwLCAweDBELCAweEQwLCAweDE3LCAweDA4LCAweERGLCAweDAwLCAweDVDLCAweDgyLCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHhEQSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4NEQsIDB4MDAsIDB4RjcsIDB4MDMsIDB4Q0MsIDB4MUIsIDB4NzAsIDB4M0YsCisweEMwLCAweDdDLCAweDAwLCAweDczLCAweDAxLCAweENELCAweDBGLCAweDMwLCAweDFCLCAweEMwLCAweDdGLCAweDAwLCAweEYzLAorMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhCMywgMHgwMSwgMHhDQywgMHg4NSwgMHhGMCwKKzB4MUYsIDB4QzAsIDB4NEMsIDB4MjAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MDAsCisweDIzLCAweDAxLCAweENDLCAweDA1LCAweEYwLCAweDFGLCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgwRCwgMHgwMCwgMHhGMSwgMHgwOCwgMHg4NCwgMHhDMywgMHgxOCwgMHgwQiwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MjIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsCisweEI0LCAweDIzLCAweDEwLCAweDBFLCAweEMwLCAweDM5LCAweDAyLCAweEUxLCAweDAyLCAweDg0LCAweDAwLCAweDcwLCAweDA3LAorMHg0MCwgMHgxOCwgMHgyMCwgMHhFRCwgMHg4MCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHgyNSwKKzB4MEEsIDB4QUMsIDB4MjgsIDB4RDAsIDB4MEUsIDB4QzAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweEVELCAweDAwLCAweEM0LCAweDIzLCAweDUwLCAweDBBLCAweDUwLCAweDI4LAorMHgwMCwgMHgyNSwgMHgwOCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwQSwgMHg0MCwgMHgzMywgMHgwMCwgMHhFMSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4QTQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsCisweDg4LCAweDA0LCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDAyLCAweDQwLCAweDNGLCAweDAwLCAweEExLCAweDAwLAorMHg5NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsIDB4ODksIDB4MDAsIDB4NDQsIDB4MEIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4RTQsIDB4MDEsCisweDA1LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDI4LCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDExLCAweDM0LCAweDAyLAorMHgxMCwgMHgwQywgMHg2OCwgMHgzMSwgMHgwMCwgMHg0MSwgMHg1MiwgMHgyNCwgMHgwMCwgMHg1MCwgMHgwQywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4REQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NzMsIDB4MDIsIDB4ODUsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDE5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBMCwgMHgyNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwQiwgMHg1MCwgMHgwNSwgMHhDMCwgMHg3NCwgMHg0MCwgMHgxNywKKzB4MDAsIDB4NDQsIDB4MDMsIDB4MzQsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDYsIDB4N0MsIDB4MDIsIDB4MzAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEQzLCAweDAyLCAweDZDLCAweDAxLCAweEYwLCAweDFELCAweEMwLCAweDQ0LCAweDAwLAorMHhERiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHgzRiwgMHgwMCwgMHg1MywgMHgwMCwgMHg1QywgMHgwMCwKKzB4RjAsIDB4MkYsIDB4QzAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsCisweDg3LCAweDAwLCAweEQ3LCAweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAyLCAweDFBLCAweDAyLAorMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgxRCwKKzB4QzAsIDB4MzcsIDB4MjAsIDB4MUYsIDB4MDMsIDB4NUMsIDB4MDEsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MDcsIDB4MjgsIDB4REYsCisweDAyLCAweDdDLCAweDA2LCAweEYwLCAweDA1LCAweENBLCAweDM3LCAweDAwLCAweDlGLCAweDAyLCAweDJDLCAweDBBLCAweEYwLAorMHgwRCwgMHhDMCwgMHgwNSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4NDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4NzQsIDB4MDEsIDB4MjMsIDB4MDEsIDB4QzQsCisweDAzLCAweDMwLCAweDBCLCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAwLCAweDMwLCAweDBGLCAweEMwLAorMHgzQiwgMHgwMCwgMHhCMywgMHgwMCwgMHg4RSwgMHgwMCwgMHgzMCwgMHgwQiwgMHhDMCwgMHgwRCwgMHgwMCwgMHg3QiwgMHgwMCwKKzB4Q0MsIDB4MDMsIDB4MzAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MTAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MEMsIDB4MzAsIDB4MEYsCisweEMxLCAweDAzLCAweDJBLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweEM2LCAweDI0LAorMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgxOSwgMHhDMCwgMHgzNiwgMHg0MCwgMHgxMSwgMHgwMywgMHg1NCwgMHgwRSwKKzB4NTAsIDB4MDksIDB4NTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4NEMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsCisweDAwLCAweDAxLCAweDAwLCAweDU0LCAweDBDLCAweDUxLCAweDA5LCAweDQwLCAweEMwLCAweDAwLCAweERCLCAweDAzLCAweDA0LAorMHgwNywgMHgxMCwgMHgxNSwgMHhDMCwgMHgzNSwgMHgwMCwgMHhDRCwgMHgwOCwgMHg1NCwgMHgwNiwgMHgxMCwgMHgwRCwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4ODAsIDB4REQsCisweDAwLCAweDQ0LCAweDAzLCAweDkwLCAweDE4LCAweDQwLCAweDI1LCAweDAwLCAweDUxLCAweDg4LCAweDU0LCAweDA3LCAweDEwLAorMHg4OSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NDYsIDB4NDUsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NDQsIDB4NDQsIDB4RDksIDB4MDMsIDB4NDQsIDB4MTIsCisweDEwLCAweDExLCAweDYwLCAweDM3LCAweDAwLCAweDVELCAweDAwLCAweDQ0LCAweDAxLCAweDEwLCAweDBELCAweDQwLCAweDA3LAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDgsCisweDQ4LCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDIwLCAweDQxLAorMHgwMCwgMHgxNiwgMHgwMCwgMHhEMCwgMHgwNCwgMHg0MCwgMHgwMCwgMHg0MCwgMHhDOSwgMHg4MCwgMHg0NSwgMHgwMiwgMHgxNCwKKzB4MTAsIDB4NjAsIDB4MzEsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweEZGLCAweDAwLCAweENELAorMHgwMywgMHgzNCwgMHgwQiwgMHhDMCwgMHgyNSwgMHgwMCwgMHgxMywgMHgwMCwgMHhEQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MTEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4NTMsIDB4MDAsCisweDQ0LCAweDAwLCAweEIwLCAweDBELCAweEM4LCAweDA1LCAweDQwLCAweDlCLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDAxLAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMywgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDMsCisweDcwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweDNGLCAweDAwLCAweEZFLCAweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjEsIDB4MDMsIDB4Q0EsCisweDM5LCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHg1MywgMHhGMCwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QUYsIDB4MDEsIDB4RkMsIDB4ODcsIDB4RjAsIDB4MUYsIDB4RDAsIDB4MEMsIDB4MDAsCisweEZGLCAweDAxLCAweENDLCAweDAzLCAweEYwLCAweDRGLCAweEMwLCAweDBELCAweDAyLCAweEIzLCAweDAxLCAweEVDLCAweDA3LAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwOCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNSwgMHhCNCwgMHgxQSwgMHhDMCwgMHg3QiwKKzB4MDAsIDB4MzMsIDB4MDQsIDB4QkMsIDB4MDIsIDB4MjAsIDB4MEIsIDB4QzgsIDB4MEMsIDB4MDgsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDFELCAweDAwLCAweEY0LCAweDBCLCAweEQwLCAweDExLAorMHg0MCwgMHg0NywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyMCwgMHgwMSwgMHhDQywKKzB4MTAsIDB4QzQsIDB4MkIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsCisweDExLCAweDQyLCAweDA3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDA3LCAweDEyLCAweDE5LCAweDQwLCAweDU3LCAweDIwLAorMHgxNSwgMHg4MywgMHg3NCwgMHgwNiwgMHg1MSwgMHgwMSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MDMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsCisweDAzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIwLCAweDA0LCAweENELCAweDA0LAorMHgwNSwgMHgwMywgMHhEMiwgMHg4QywgMHg0MiwgMHgyMywgMHgwOCwgMHhEMSwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4ODEsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsCisweDA4LCAweDM0LCAweDAyLCAweDE5LCAweDA4LCAweDQwLCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBOCwgMHg2NSwgMHgwMCwgMHgxRCwgMHgyMSwgMHg3NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg0MCwgMHg0NywKKzB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4RTQsIDB4MDAsIDB4Q0QsIDB4MjAsIDB4NDQsCisweDAzLCAweEQxLCAweDBELCAweDQwLCAweDYzLCAweDAwLCAweEQxLCAweDAzLCAweDU0LCAweDAzLCAweDkwLCAweDE5LCAweDQwLAorMHg2NywgMHgxMCwgMHhERCwgMHgwNCwgMHg3NCwgMHgwNiwgMHgxMSwgMHgxRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg1NSwgMHg5MCwKKzB4NzQsIDB4MDYsIDB4NTgsIDB4MTksIDB4NDIsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEwLCAweEU3LCAweDAwLCAweDlGLCAweDExLCAweDVDLCAweDAzLCAweEYxLCAweDE5LCAweEMwLCAweDY3LCAweDA0LAorMHhERiwgMHgwNSwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhDNCwgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4NDUsIDB4NDAsIDB4QzMsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MzksIDB4QzEsIDB4NjcsCisweDAwLCAweERGLCAweDAwLCAweDNDLCAweDBELCAweEI4LCAweDM5LCAweEMwLCAweDM3LCAweDAwLCAweDUzLCAweDAyLCAweDdDLAorMHgwNCwgMHgzMCwgMHgxMSwgMHhDMCwgMHg4MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4ODgsIDB4MkQsIDB4MDAsIDB4QkYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDhGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAyLCAweEZDLCAweDAzLCAweEYyLAorMHgwRiwgMHhFMCwgMHgyNywgMHg4MCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwRiwgMHgwMCwKKzB4RkYsIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4N0YsIDB4MDEsIDB4M0YsIDB4MDQsIDB4QkMsIDB4MDIsCisweEYwLCAweDAxLCAweEMxLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LAorMHgwNSwgMHgwMiwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMywgMHgzMCwgMHgyOSwgMHhDMCwgMHhBNywgMHgwMCwgMHhERiwgMHgwQSwKKzB4NkMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RDMsIDB4MDQsIDB4NEMsIDB4MTMsIDB4RjIsIDB4OEQsCisweEMyLCAweEE3LCAweDAwLCAweEQ3LCAweDAzLCAweDRDLCAweDQ3LCAweEYwLCAweDI5LCAweEMwLCAweDI0LCAweDA0LCAweERCLAorMHgwNCwgMHg0QywgMHgxOSwgMHg3MCwgMHgyRCwgMHhDNSwgMHgzNCwgMHgwMCwgMHg1NywgMHgwMiwgMHg3QywgMHg2MCwgMHg3NCwKKzB4MDEsIDB4QzAsIDB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsCisweDAwLCAweDlELCAweDE4LCAweEY0LCAweDJCLCAweDEwLCAweDAxLCAweDQwLCAweDI3LCAweDAwLCAweERELCAweDAwLCAweDQ0LAorMHgwMywgMHhEMCwgMHg4RCwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMSwgMHgwMiwgMHhDNCwgMHg0QiwgMHhEMCwgMHgyRiwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NTAsIDB4MEIsIDB4RjAsIDB4NDksIDB4MDAsIDB4ODUsIDB4MDAsIDB4REQsIDB4NDEsCisweDZDLCAweDRGLCAweDEwLCAweDBELCAweDQwLCAweDMwLCAweDAyLCAweDVCLCAweDAwLCAweDcwLCAweDBBLCAweDEwLCAweDIxLAorMHhDMCwgMHg0RSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgwMCwgMHgwNCwKKzB4MEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MjQsIDB4MDMsCisweDUwLCAweDNELCAweDQwLCAweDAzLCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDRDLCAweDQwLCAweDAyLAorMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHg4QiwgMHhEMCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHhDRCwgMHgwMiwgMHgwNCwKKzB4MEIsIDB4NTAsIDB4MjgsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MEQsIDB4MDcsIDB4MzQsIDB4MDQsIDB4RDQsIDB4MTksIDB4NDAsCisweDBDLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDU4LCAweDAwLCAweDZELAorMHgwMSwgMHhCNCwgMHgyNywgMHgxNCwgMHgxNiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHg4NywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4N0IsIDB4MTAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDgsIDB4NkIsIDB4NTAsCisweEY5LCAweDAxLCAweDk0LCAweDg3LCAweDU4LCAweDE2LCAweDUwLCAweDQ4LCAweDAyLCAweEZELCAweDExLCAweEU0LCAweDE3LAorMHgxMCwgMHgwRiwgMHg0MCwgMHg3RSwgMHg4QywgMHhBOSwgMHgwMSwgMHhCNCwgMHgyNCwgMHg5MCwgMHgxMiwgMHg0OCwgMHgzRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MUEsIDB4OTAsIDB4MDAsIDB4Q0YsIDB4MDAsCisweDNDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDJDLCAweDAzLCAweDcwLCAweDBDLAorMHhDMSwgMHgwMywgMHg0MCwgMHhDNSwgMHgwMCwgMHgwQywgMHgyMywgMHhGMCwgMHgwQywgMHg0MCwgMHgxMiwgMHgwMiwgMHhENywKKzB4MDAsIDB4MEMsIDB4MDMsIDB4RDAsIDB4ODAsIDB4QzAsIDB4MzAsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NzAsCisweDhDLCAweEMwLCAweDMyLCAweDAwLCAweENGLCAweDEwLCAweDNDLCAweDIyLCAweEY0LCAweDg4LCAweEM5LCAweDQ4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgxRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDE3LCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDhGLCAweEM4LCAweDFGLCAweDA4LCAweEY3LCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhGMCwgMHg0RiwKKzB4RTAsIDB4M0QsIDB4MDAsIDB4RkUsIDB4MDgsIDB4RkMsIDB4MjMsIDB4NzQsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDA4LCAweDVGLCAweDAxLCAweDRDLCAweDAzLAorMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgxNywKKzB4MDAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MUIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweDcwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweEMzLCAweDAwLCAweDJDLCAweDAzLCAweEIwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg0QywgMHg4MCwgMHgyMCwgMHgwOSwgMHhDMiwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODIsIDB4MzksIDB4MDAsIDB4NkQsIDB4MDAsIDB4QzQsIDB4MkIsIDB4MTAsCisweDBFLCAweDQwLCAweDFCLCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgzMywgMHhEMCwgMHgyRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MjAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4MDAsIDB4M0IsCisweDAwLCAweDhELCAweDAwLCAweDg0LCAweDAxLCAweEIwLCAweDAyLCAweDQwLCAweDRGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhDRCwgMHgwMywgMHhBNSwgMHgxNywgMHg1MCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MTEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDAsIDB4RUQsCisweDAxLCAweDk2LCAweDI3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDg4LCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLAorMHgzNiwgMHg0MCwgMHg3MywgMHgwMCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MTEsIDB4MTQsIDB4NDQsIDB4MTksIDB4M0UsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDczLCAweDAwLCAweENELCAweDAxLCAweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLAorMHgzMywgMHgwMCwgMHg0OSwgMHgwNSwgMHgzNCwgMHgwMywgMHhEMCwgMHgxOCwgMHg0MCwgMHhGMywgMHgwMCwgMHg4RCwgMHgwMSwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDIsIDB4NDUsIDB4MUEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NUMsCisweDQwLCAweDc3LCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDA3LCAweDUwLCAweDJDLCAweDYwLCAweEIzLCAweDAwLCAweENELAorMHg0NywgMHgxNCwgMHgwNywgMHg5MCwgMHgxQywgMHg0MCwgMHg1QiwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTAsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MDIsIDB4NkMsIDB4MDEsIDB4NzAsIDB4MjcsIDB4QzAsIDB4OUYsCisweDAwLCAweDdGLCAweDAxLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAxLCAweDVDLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHhERiwgMHgwMCwgMHg3RCwgMHgwMiwgMHg3QywgMHg4MSwgMHhGMSwgMHgzNywgMHhDMCwKKzB4REYsIDB4NDAsIDB4NDMsIDB4MDAsIDB4RUMsIDB4MDEsIDB4QjAsIDB4MjcsIDB4QzAsIDB4MUIsIDB4MDEsIDB4N0YsIDB4MjMsCisweDlELCAweEE1LCAweDIwLCAweEI3LCAweEMwLCAweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwOCwgMHg0NSwgMHgwMiwgMHgxRiwgMHgwMiwgMHgxQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MjEsIDB4QzgsIDB4MDcsIDB4MDYsIDB4MUYsIDB4MEEsIDB4N0MsIDB4MDAsCisweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDA0LCAweDFGLCAweDgwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LAorMHgwNiwgMHgxRiwgMHg0MiwgMHg3QywgMHgyOCwgMHhCMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHgwMCwgMHg2NCwKKzB4ODgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDE5LCAweDdDLCAweDA2LCAweDMwLCAweDA4LCAweEM1LCAweDI0LCAweDA0LCAweDlGLAorMHgwOCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5QiwgMHgwMSwgMHg3QywgMHgwMiwgMHgzMCwKKzB4MDksIDB4QzIsIDB4MjMsIDB4ODAsIDB4OTMsIDB4MDQsIDB4NEMsIDB4MDIsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsCisweDkzLCAweDAzLCAweDVDLCAweDAyLCAweDcxLCAweDU5LCAweEMwLCAweEE3LCAweDQwLCAweDgzLCAweDAwLCAweDRDLCAweDIyLAorMHgzMCwgMHgyOCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4NjQsIDB4MDAsIDB4OUQsIDB4MTIsIDB4NzQsIDB4MEEsIDB4MTQsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4MDEsCisweDc0LCAweDAyLCAweEQ4LCAweDQ5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDExLCAweDc0LCAweDBBLCAweDUwLCAweDI5LAorMHg0MCwgMHgyNywgMHhDMCwgMHg4QiwgMHgwMSwgMHg0NCwgMHg0QSwgMHhEMCwgMHgwOSwgMHg0NCwgMHhFNywgMHg0MCwgMHg5MSwKKzB4ODYsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MTksIDB4NDAsIDB4RTcsIDB4MTAsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MDYsIDB4MTQsCisweDM5LCAweDQxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDgwLCAweDI0LAorMHgyNSwgMHg5RCwgMHgwMCwgMHg3NCwgMHg2MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NzQsIDB4MEEsIDB4MTAsIDB4MDksIDB4NDAsCisweDM3LCAweDA4LCAweDkxLCAweDAwLCAweDQ0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAxLCAweDk5LCAweDAwLAorMHg1MCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHg5OSwgMHgwNCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwKKzB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4MjAsIDB4MDUsCisweDhELCAweDE0LCAweDM2LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDg1LCAweDgwLCAweDM0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4MSwgMHgwOCwgMHg3NCwgMHgxMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDEsIDB4OTEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDIsIDB4NDgsIDB4NDAsIDB4MzMsIDB4MDEsIDB4ODksIDB4MDAsIDB4NDQsCisweDAyLCAweDEwLCAweDA4LCAweDQ0LCAweDMzLCAweDAwLCAweDg5LCAweDAxLCAweDA1LCAweDkzLCAweDEwLCAweDQ4LCAweDUwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNiwgMHgwMSwgMHgxRiwKKzB4MDQsIDB4N0MsIDB4MjgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RDAsCisweEExLCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDAyLCAweDdDLCAweDI4LCAweDMwLCAweEU1LCAweEM1LCAweDg3LCAweDAyLAorMHgxMSwgMHgwMCwgMHg0QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgyMiwgMHgxQiwgMHgwMCwgMHg1QywgMHgwMCwKKzB4NzIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MTQsIDB4NEMsIDB4MDAsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzQsCisweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDJGLCAweDA1LCAweEJGLCAweDE0LAorMHg3NCwgMHhBMiwgMHhGMiwgMHg4QiwgMHhDMCwgMHgyRiwgMHgyMiwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MkYsIDB4MEEsIDB4QjcsIDB4MDQsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsCisweDAwLCAweDdELCAweDAyLCAweEYwLCAweDhGLCAweDAwLCAweDJGLCAweDAyLCAweEI3LCAweDgwLCAweEZDLCAweDAyLCAweDcwLAorMHgwQiwgMHhDMCwgMHgyRiwgMHgwOCwgMHhGNywgMHgwMCwgMHhGRCwgMHgyMywgMHhGMCwgMHg4QiwgMHhDMiwgMHg3NywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDUsIDB4QkYsIDB4MEMsIDB4RkMsCisweDgyLCAweDMyLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDhBLCAweEMwLAorMHgyNCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHgzMCwgMHg0QiwgMHhDMCwgMHgyNiwgMHgwNSwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4RTAsIDB4MkYsIDB4MDIsIDB4RkYsIDB4MDAsIDB4Q0QsIDB4MDIsIDB4QjAsIDB4MEYsCisweEMyLCAweDJGLCAweDQ4LCAweEIzLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEM0LCAweDc0LCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgxRCwgMHgwQywgMHg3NCwgMHg0OCwKKzB4MTAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDIsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4NDEsIDB4NDgsIDB4ODQsCisweDA0LCAweDFELCAweDEwLCAweDc0LCAweDIwLCAweDE0LCAweDQxLCAweDQxLCAweDA0LCAweDAxLCAweDU3LCAweDgwLCAweDc0LAorMHg0MCwgMHgxMCwgMHgwMSwgMHg2MCwgMHgwNywgMHgwMiwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MTcsIDB4NTAsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NjIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDhELCAweDA1LCAweDM2LCAweDMyLCAweDE0LAorMHg4OCwgMHg0MCwgMHg2MiwgMHg2MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg1MCwgMHgyMCwgMHgwMywKKzB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4Q0MsIDB4NDAsIDB4MjIsIDB4MDUsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MTMsCisweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDI0LCAweDAyLCAweDk0LCAweDE4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4NSwgMHg0MCwgMHgxNCwgMHgwMiwgMHhEMiwgMHgwOCwgMHg0MCwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDQsIDB4OUQsIDB4ODAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDUwLCAweDI2LCAweDAxLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweEE0LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwgMHg2NCwgMHgxMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4RTcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MTIsIDB4MTIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDgsCisweEQ1LCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDYyLCAweDI4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4NjYsIDB4MDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OUYsIDB4MDEsCisweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweEE2LCAweDA0LCAweDlGLCAweDAzLCAweDc0LCAweDAyLCAweDM0LCAweDI5LAorMHg0MCwgMHhBNywgMHgwMCwgMHg4RiwgMHgwMCwgMHgyQywgMHg4MiwgMHhCMCwgMHgyOSwgMHhDMCwgMHhBMywgMHgwMCwgMHg5NywKKzB4MDIsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MjksIDB4QzAsIDB4MTQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE2LCAweDA4LCAweDY1LCAweDBBLCAweDlGLCAweDE0LCAweDdDLCAweDAyLCAweEYyLCAweDQ4LCAweEMwLCAweDIxLAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4ODAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODIsCisweDI3LCAweDAwLCAweDlGLCAweDE4LCAweDVDLCAweDAyLCAweEQwLCAweDk5LCAweEMwLCAweEE3LCAweDY0LCAweDlCLCAweDAwLAorMHg3QywgMHg4RSwgMHg3OCwgMHgzOCwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDgsIDB4ODUsIDB4MDQsIDB4MUYsIDB4MDgsIDB4N0MsIDB4NDAsIDB4RjEsIDB4MDEsIDB4QzAsIDB4MDcsIDB4ODAsCisweDEzLCAweDIwLCAweDdDLCAweDAwLCAweEYyLCAweDQxLCAweEQwLCAweDg0LCAweDAwLCAweDFGLCAweDAwLCAweDBDLCAweDAwLAorMHgzMCwgMHgwMSwgMHhDMiwgMHg4NywgMHgwOCwgMHgxRiwgMHgwMiwgMHg3RSwgMHgwMCwgMHhGMiwgMHgyMSwgMHhGMCwgMHgwNCwKKzB4MEMsIDB4MUIsIDB4ODAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzksIDB4ODcsIDB4MDAsIDB4MDcsIDB4ODAsIDB4NEQsCisweDA4LCAweDMyLCAweDAxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHhEQywgMHgyMCwgMHg3RCwgMHgwMSwgMHhGNiwgMHgxRCwgMHg3MCwgMHgwNSwgMHg2MCwgMHgxNywgMHgwMCwgMHg1MSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MTYsIDB4MDAsIDB4N0QsIDB4MDUsIDB4Q0QsIDB4MTksIDB4MzAsCisweDI3LCAweDYwLCAweDE3LCAweDIwLCAweDVELCAweDAwLCAweEZDLCAweEE5LCAweDcyLCAweDQ1LCAweDYyLCAweDFDLCAweDExLAorMHg3MSwgMHgyNSwgMHhEQywgMHg4RCwgMHgxNCwgMHgyNywgMHhDMCwgMHg5RCwgMHgwMSwgMHg3MSwgMHg4OSwgMHhDQywgMHgwMSwKKzB4MTAsIDB4MzcsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsCisweEYyLCAweDAyLCAweENELCAweDAyLCAweDc0LCAweDAzLCAweDUyLCAweDBDLCAweDQ0LCAweDMzLCAweDAwLCAweDgxLCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgyRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMSwgMHgyNCwgMHgxRiwgMHgxMCwgMHgyQywKKzB4NDksIDB4MzMsIDB4MTAsIDB4OEQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTEsIDB4MTgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NDEsCisweDAxLCAweDM0LCAweDQwLCAweDEwLCAweDBDLCAweDQwLCAweEEzLCAweDIwLCAweEM1LCAweDA5LCAweDIwLCAweDA3LCAweDEwLAorMHgyQywgMHg0MSwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MzMsIDB4NDAsIDB4RTEsIDB4ODAsIDB4QjQsCisweDAzLCAweEQ4LCAweDBGLCAweDQxLCAweDM4LCAweDAwLCAweDZELCAweDAxLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQ4LAorMHgzQiwgMHgwMiwgMHhFRCwgMHg0MCwgMHhCNCwgMHgwMSwgMHg1MCwgMHgxRSwgMHg0OCwgMHg1OSwgMHgwMCwgMHg2MSwgMHg4MSwKKzB4RDQsIDB4NDIsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MkQsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MDQsIDB4NDYsIDB4MTAsIDB4MEUsCisweDQxLCAweDEwLCAweDA4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLAorMHg2RiwgMHgwMSwgMHhCNCwgMHgwNywgMHg3MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwOCwgMHhFMSwgMHgwMSwgMHhCQywgMHgwNywKKzB4RjAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4ODEsIDB4QkQsIDB4MDEsIDB4RUMsIDB4MDUsIDB4MzQsIDB4MUUsIDB4NDAsIDB4N0IsCisweDAyLCAweEVGLCAweDAxLCAweEI0LCAweDA3LCAweDcwLCAweDFFLCAweDQwLCAweDdDLCAweDQwLCAweDZCLCAweDAwLCAweEJDLAorMHgwNiwgMHgzMCwgMHgxQSwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFNywgMHgwMSwgMHhBQywgMHgwNywgMHgzNCwgMHgxNywgMHhDMCwKKzB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDgxLCAweDcwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDOCwgMHhCNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NUMsIDB4ODMsIDB4NzIsIDB4MEMsIDB4RTAsIDB4MTYsIDB4MDgsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDIsCisweEM0LCAweDAxLCAweEMwLCAweDIzLCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDgzLCAweEYwLCAweDAxLCAweEQwLCAweDQzLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzMCwgMHg3RCwgMHgwMCwgMHhGMywgMHgwMSwKKzB4Q0MsIDB4MTMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDEsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsCisweEMwLCAweDdGLCAweDA0LCAweEYzLCAweDAxLCAweENDLCAweDEzLCAweDMwLCAweDE3LCAweEMwLCAweDdDLCAweDAyLCAweEZGLAorMHg4OSwgMHhGQywgMHg4NywgMHgzMCwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMCwgMHg3MywgMHgwMSwgMHhGQywgMHgyNiwgMHhGMCwKKzB4MTcsIDB4QzgsIDB4NkIsIDB4MjAsIDB4QkIsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RDAsIDB4MTMsIDB4QzAsIDB4MUIsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDNELCAweDUwLCAweDcxLCAweDIwLCAweDg0LAorMHg4MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgyQSwgMHg0OCwKKzB4M0YsIDB4MDAsIDB4NjEsIDB4MDAsIDB4RDQsIDB4MDgsIDB4MTEsIDB4MEIsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RTksIDB4ODgsCisweERDLCAweDgyLCAweDEwLCAweENFLCAweDQwLCAweDNCLCAweDAxLCAweDYxLCAweDAwLCAweEI0LCAweDMyLCAweEQwLCAweDA2LAorMHg0MiwgMHgzQiwgMHgxMiwgMHgyMSwgMHgzMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHg0QSwgMHg0MiwgMHg1NywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4NjEsIDB4MDAsIDB4ODQsIDB4MjAsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDA5LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDg2LCAweDQwLCAweDNCLAorMHgwMCwgMHhCMSwgMHgwMCwgMHhBNCwgMHgyMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHgwOCwgMHhCNiwKKzB4MDMsIDB4MTAsIDB4MEUsIDB4NDksIDB4MkIsIDB4MDAsIDB4NjEsIDB4MTAsIDB4QjQsIDB4MDIsIDB4RDEsIDB4MDIsIDB4NDAsCisweDJGLCAweDAwLCAweDI5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDAyLCAweDQ0LCAweDIzLCAweDAyLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHhFMSwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNCwgMHgwMCwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MDMsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MzMsIDB4MDAsCisweDExLCAweDAwLCAweDM0LCAweDAwLCAweDE0LCAweDA5LCAweDUwLCAweEI2LCAweDEwLCAweENELCAweDAzLCAweDM0LCAweDAyLAorMHgxNCwgMHgzQywgMHg0MCwgMHhBMywgMHg0MCwgMHg0MSwgMHgwMSwgMHgzNCwgMHg0QSwgMHhEMCwgMHgyMCwgMHg0MCwgMHgyMywKKzB4MDIsIDB4MDEsIDB4MDMsIDB4MzQsIDB4NkYsIDB4RDAsIDB4MTEsIDB4NDEsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweEM1LCAweDAwLCAweDkzLCAweDA0LCAweDQ3LCAweDAyLCAweEYxLCAweDJELAorMHg4MCwgMHhGNywgMHgwMSwgMHhERiwgMHgwNywgMHg3NCwgMHgwMywgMHhGMCwgMHgwMSwgMHg0MCwgMHgzRiwgMHg0MiwgMHhEMywKKzB4MDAsIDB4NkMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4M0MsIDB4MDAsIDB4REYsIDB4MDUsIDB4NzQsIDB4MDIsIDB4MzAsCisweDFELCAweEM0LCAweDI3LCAweDAwLCAweDUzLCAweDAxLCAweDdDLCAweDEyLCAweEYwLCAweDI1LCAweEMwLCAweDczLCAweDAwLAorMHhEQiwgMHgwMywgMHg3QywgMHgwQiwgMHhGMiwgMHg2OSwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjcsIDB4MDMsIDB4OUYsIDB4MDAsIDB4N0UsIDB4MEEsIDB4RjAsIDB4MUQsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDM5LCAweEMwLCAweDc3LCAweDEwLCAweERGLCAweDAzLAorMHg1QywgMHgwQSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNSwgMHgwMCwgMHhEQiwgMHgxMCwgMHg1NCwgMHg4MCwgMHhGMCwgMHgwRCwKKzB4Q0QsIDB4MjcsIDB4MDEsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4ODUsIDB4QzEsIDB4QjcsIDB4MDQsIDB4REYsCisweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwOCwgMHgwQiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHg4MiwgMHhGMCwgMHgwRiwgMHhDMSwgMHgzRiwKKzB4MjQsIDB4RkYsIDB4MzAsIDB4RkMsIDB4MDMsIDB4RjIsIDB4MDMsIDB4QzQsIDB4M0IsIDB4MDAsIDB4NzMsIDB4MDUsIDB4OEQsCisweDAyLCAweDMwLCAweDAzLCAweEMyLCAweDNDLCAweDA0LCAweEYzLCAweDA0LCAweEZDLCAweDAwLCAweEYxLCAweDBFLCAweEMwLAorMHgwNiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgyNywgMHhDMCwgMHgzQywgMHg0MCwgMHhGMywgMHgwMiwKKzB4Q0MsIDB4MDEsIDB4RjEsIDB4MEIsIDB4QzAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgxLCAweDIwLCAweEM2LCAweDM0LCAweDkxLCAweDEzLCAweDVDLCAweDE2LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEOSwgMHgzOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg1MSwgMHgwNCwgMHg0NCwgMHgwRSwKKzB4MTAsIDB4NzEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsCisweDAwLCAweDVELCAweDAzLCAweDM0LCAweDE3LCAweDExLCAweDM0LCAweDQwLCAweEY0LCAweDA0LCAweDgxLCAweDAwLCAweDQ0LAorMHgwNywgMHhEMCwgMHg1OSwgMHg0OCwgMHg4NCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4QTAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsCisweDA0LCAweDc0LCAweDgzLCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDQwLCAweDQ0LCAweDA2LCAweDkwLAorMHgxMSwgMHg0MCwgMHgzNCwgMHgyMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHg0NiwgMHhEMCwgMHgxRCwgMHg0MCwgMHg2NiwgMHgwNCwKKzB4NUQsIDB4MTEsIDB4NzQsIDB4MDYsIDB4NTAsIDB4MjUsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MEUsCisweEQwLCAweDExLCAweDQwLCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHgyMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4NDgsIDB4ODEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MDgsCisweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQyLCAweDIwLCAweDAwLCAweDQ5LAorMHgwMCwgMHg3NCwgMHgwMiwgMHgxOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMSwgMHgyMCwgMHgwNCwgMHgwMiwgMHhEMCwKKzB4MDgsIDB4NDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDQwLCAweDEzLCAweDQwLCAweDdFLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDdFLAorMHgwMywgMHhEMCwgMHgwMSwgMHhDMiwgMHgzRiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwMSwgMHhDMCwKKzB4M0MsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDYsIDB4MDAsIDB4NUYsIDB4MDAsCisweDdDLCAweDAyLCAweDcwLCAweDA1LCAweEQwLCAweDM0LCAweDEwLCAweDUzLCAweDAwLCAweDRDLCAweDAwLCAweEYyLCAweDAxLAorMHhEMCwgMHgwNCwgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyRiwgMHgxMCwKKzB4QkYsIDB4MDAsIDB4REUsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzYsIDB4M0YsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDMsCisweEQwLCAweDAzLCAweEUwLCAweDNGLCAweDAwLCAweDJGLCAweDAwLCAweEY0LCAweDAwLCAweDcwLCAweDAzLCAweEQwLCAweDNGLAorMHgwMCwgMHhGNywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MDcsIDB4QzgsIDB4M0YsIDB4MDAsIDB4M0YsIDB4QTAsIDB4RkQsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsCisweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDNGLCAweDAwLCAweEIzLAorMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwKKzB4MEEsIDB4QzAsIDB4MEMsIDB4MDEsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEIsIDB4MDAsCisweEZCLCAweDA2LCAweEVDLCAweDA1LCAweDMwLCAweDRGLCAweEMxLCAweDJGLCAweDAwLCAweEYzLCAweDE0LCAweEZDLCAweDIzLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGNywgMHgwNCwgMHhDQywgMHgyMiwgMHgzNCwgMHgwMywgMHhDMCwgMHgwQywKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDcsIDB4MTAsIDB4OTEsIDB4ODAsCisweDQ0LCAweDAwLCAweDcwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDQzLCAweDEwLCAweDA5LAorMHg0OCwgMHg4NCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgyNywgMHgwMCwgMHhGOSwKKzB4MEIsIDB4NDQsIDB4NTUsIDB4MTUsIDB4MkYsIDB4NDAsIDB4NkYsIDB4MDAsIDB4RDEsIDB4MDMsIDB4NzAsIDB4M0IsIDB4RDAsCisweDM5LCAweDQwLCAweDQ3LCAweDQwLCAweEYxLCAweDAwLCAweDZDLCAweDBBLCAweDEwLCAweDE1LCAweDQwLCAweDBELCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwNSwgMHgwMSwgMHgyMCwgMHgxNCwKKzB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MEQsIDB4MjAsIDB4MTQsIDB4MTMsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAxLCAweDAyLCAweDAxLCAweDIwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQyLCAweDIzLCAweDAwLCAweEMxLCAweDA0LAorMHgyNCwgMHg4MSwgMHgxMCwgMHgwQywgMHg0QSwgMHgyNywgMHgwOCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMSwgMHg4OCwKKzB4NDAsIDB4MDMsIDB4MDAsIDB4QzUsIDB4MDgsIDB4NDQsIDB4QTIsIDB4MTMsIDB4MDgsIDB4NDYsIDB4NEMsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDA1LCAweDExLCAweDExLCAweDA0LCAweDU0LCAweDA0LAorMHhEMCwgMHgxMSwgMHg0MSwgMHg0NywgMHgwMCwgMHgxRCwgMHgxMSwgMHg3NCwgMHgwMywgMHgxMCwgMHgxNSwgMHg0MCwgMHg0MSwKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDQsIDB4RDIsIDB4MzEsIDB4NEMsIDB4RTcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsCisweDIxLCAweDEwLCAweDBELCAweDQwLCAweDI3LCAweDAxLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQ4LAorMHg4NywgMHgwMCwgMHhEMSwgMHgwMCwgMHg2NCwgMHg0NiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4NjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUQsIDB4NDYsIDB4RjAsCisweDM5LCAweEMwLCAweDQ3LCAweDAxLCAweDFGLCAweDAzLCAweDVDLCAweDAzLCAweDEwLCAweDI5LCAweEUxLCAweDQ1LCAweDQwLAorMHg5MywgMHgwNSwgMHg0QywgMHgwQywgMHhEMCwgMHgxOSwgMHhDMCwgMHhDNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg2QywgMHgxNywKKzB4MzAsIDB4MEQsIDB4NjAsIDB4MjMsIDB4NDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MDksIDB4QzAsIDB4QzcsCisweDAwLCAweEQ3LCAweDAwLCAweDBDLCAweDBFLCAweDMwLCAweEIxLCAweDgxLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg2OSwgMHg0MCwgMHg5RiwgMHgwMSwgMHhFQywgMHgwMCwgMHg3MCwgMHgwQiwKKzB4QzAsIDB4MEYsIDB4MDAsIDB4QUYsIDB4MjAsIDB4OEMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4RTIsIDB4MEUsIDB4MDAsIDB4QUYsCisweDAwLCAweEZELCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDA2LCAweEY4LAorMHgwRiwgMHhDMSwgMHg2RiwgMHgwMCwgMHhGMiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHg0MCwgMHg0RiwgMHgwMiwKKzB4RkYsIDB4MDAsIDB4REYsIDB4MDIsIDB4RjAsIDB4MDcsIDB4RTAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDgzLCAweDAwLCAweDRELCAweDBBLCAweEYwLCAweDIxLCAweEMwLAorMHgyNCwgMHg4MSwgMHgxRiwgMHgwMiwgMHg1QywgMHgwMywgMHgzMCwgMHhBNSwgMHhDMCwgMHg0NCwgMHgwMCwgMHgxQiwgMHgwMCwKKzB4N0MsIDB4MEEsIDB4MzIsIDB4MjksIDB4QzksIDB4QTYsIDB4NDIsIDB4QzMsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzQsIDB4MEQsCisweEMwLCAweDI3LCAweDgwLCAweEQzLCAweDA4LCAweDdDLCAweDAzLCAweDMwLCAweDQ5LCAweEMwLCAweDA3LCAweDEwLCAweERGLAorMHgwMCwgMHg0QywgMHgyMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MkMsIDB4MTQsIDB4OTEsIDB4MjAsIDB4NDQsIDB4MkEsIDB4RDAsIDB4ODksIDB4NDEsIDB4ODQsCisweDAwLCAweDFELCAweDA5LCAweEYwLCAweDAzLCAweDMwLCAweDg1LCAweDAwLCAweDI0LCAweDAwLCAweDExLCAweDFBLCAweDc0LAorMHg4MiwgMHgzMCwgMHgwMSwgMHg0MCwgMHhBNCwgMHgwMCwgMHhGQiwgMHg0MCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgwRiwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4RjEsIDB4MDEsIDB4RjQsIDB4MDMsIDB4NTAsIDB4NzksIDB4NDAsIDB4MDMsIDB4MDAsIDB4RkQsIDB4MjQsCisweDU0LCAweDAyLCAweEIwLCAweDFDLCAweDQwLCAweDZGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHgyMCwgMHgzMCwgMHgwOCwgMHg4MSwgMHgwMCwgMHgyMCwgMHgyNiwgMHhEMSwgMHgzOCwgMHg0MCwgMHg2MCwgMHgyMCwKKzB4OEQsIDB4MjAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MzksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDMsIDB4MTYsIDB4MDIsCisweDEwLCAweDIwLCAweDQwLCAweDA0LCAweDAxLCAweEMxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDNDLCAweDQwLCAweDMxLAorMHgwMCwgMHhDOCwgMHgwMSwgMHgxNCwgMHgwMywgMHg5MCwgMHgyOCwgMHg0MCwgMHgxMywgMHgwMCwgMHhEOSwgMHgwMCwgMHgwNiwKKzB4MDMsIDB4MTAsIDB4OEMsIDB4NDAsIDB4NUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAyLCAweDUwLCAweDAwLCAweEUxLCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDE2LCAweDYwLCAweDdBLCAweDIwLCAweEVELAorMHgwMSwgMHhCNCwgMHgwMywgMHg5MCwgMHgxRSwgMHg0MCwgMHg0MCwgMHgwMCwgMHhFMSwgMHg0MSwgMHhCNiwgMHgwRCwgMHg5NCwKKzB4MTYsIDB4NDIsIDB4NEEsIDB4MDAsIDB4QzksIDB4MDEsIDB4ODQsIDB4MDUsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweEU5LCAweDAxLCAweEI0LCAweDI3LCAweEQwLCAweDFBLCAweDQwLCAweDVCLCAweDAwLCAweENELCAweDAxLCAweDE2LCAweDI2LAorMHg5MCwgMHg5QSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwKKzB4MzAsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MEQsIDB4MDEsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MzAsIDB4MDQsIDB4Q0QsIDB4MzAsCisweDdDLCAweDIzLCAweDEwLCAweDA4LCAweEMwLCAweDAwLCAweDAxLCAweDBCLCAweDAwLCAweDdDLCAweDBCLCAweDMwLCAweDg4LAorMHhDMCwgMHgxMiwgMHgwMiwgMHhDMywgMHgwMCwgMHg1QywgMHgyMiwgMHgzMiwgMHgwQywgMHhDMSwgMHgyMywgMHgwMCwgMHhDOSwKKzB4MDgsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDgsIDB4QzAsIDB4MjMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsCisweDA0LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDFELAorMHgxNCwgMHg3RiwgMHgwMCwgMHhERCwgMHgwMSwgMHhGMiwgMHg4NywgMHhEMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywKKzB4MTMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4NzAsIDB4MEYsIDB4QzgsCisweDFELCAweDQwLCAweEZGLCAweDEwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweEFCLCAweDQyLCAweEY3LCAweDIwLAorMHhGQywgMHgwMywgMHg3MCwgMHgwQiwgMHhDOCwgMHgyRiwgMHgxMiwgMHhGQywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDRFLCAweDAzLCAweDMxLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAxLCAweENDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxRiwKKzB4MjAsIDB4REYsIDB4MDYsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MkQsIDB4QzEsIDB4QjYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsCisweDAzLCAweEE4LCAweDFELCAweEMwLCAweDE1LCAweDAwLCAweERGLCAweDA2LCAweDRELCAweDAxLCAweDMwLCAweDFELCAweEMwLAorMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyOSwgMHgwOSwgMHhFRCwKKzB4MjAsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDcsIDB4RDAsCisweDBDLCAweDQwLCAweDA4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQ4LCAweDBFLCAweDQwLCAweDNCLCAweDA4LAorMHhGRCwgMHgxMCwgMHhBQywgMHgwMCwgMHhEMCwgMHgyRSwgMHg0NCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMiwgMHhGNCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4MTgsIDB4MDAsIDB4RUQsIDB4MTYsIDB4QzQsIDB4MDIsIDB4QjAsIDB4MEEsIDB4QzAsIDB4NEUsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweEY5LCAweDAwLCAweEVELCAweDgxLAorMHg4NCwgMHgwNywgMHgxMSwgMHgxRSwgMHg0OCwgMHhGQiwgMHgwOCwgMHhFRCwgMHgxMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwKKzB4NDAsIDB4NDgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDEsIDB4RkIsIDB4MDAsIDB4RUQsCisweDA1LCAweDk0LCAweDQ0LCAweEQ5LCAweDVFLCAweDQwLCAweDczLCAweDAwLCAweEU1LCAweDA1LCAweEI0LCAweDA3LCAweDkwLAorMHgxQywgMHg0NCwgMHg3OSwgMHgwMCwgMHhFRCwgMHg0MSwgMHg4NCwgMHgwNywgMHgxMCwgMHgxNCwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4QjMsIDB4MDQsIDB4Q0QsIDB4MDIsIDB4MDUsCisweDgzLCAweDEyLCAweDZDLCAweDYwLCAweDczLCAweDEwLCAweENELCAweDAzLCAweDA0LCAweDAzLCAweEQwLCAweDFDLCAweDUwLAorMHgzMCwgMHgwMiwgMHhDMSwgMHgwOSwgMHgzNCwgMHgwQiwgMHhEMCwgMHgzQywgMHg0NCwgMHg3MywgMHgwMSwgMHhDRCwgMHg0MCwKKzB4MjQsIDB4MDQsIDB4RDgsIDB4MEMsIDB4NDAsIDB4NzMsIDB4ODAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsCisweDQyLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAyLCAweDkwLCAweDAwLCAweDUwLCAweDRBLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHg1RCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgwNSwKKzB4MzAsIDB4MjcsIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDgsIDB4NEQsIDB4MDEsIDB4RjAsIDB4MTcsIDB4QzEsIDB4NUMsCisweDQwLCAweDczLCAweDAxLCAweEZDLCAweDAxLCAweEYwLCAweDI3LCAweDQwLCAweDVGLCAweDAwLCAweDVGLCAweDAwLCAweERDLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1NiwgMHg0MSwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwgMHhDMCwKKzB4MUQsIDB4ODksIDB4NUYsIDB4MDAsIDB4OEMsIDB4MDEsIDB4MzAsIDB4MDcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDgxLCAweDA4LCAweDFGLCAweDEwLCAweDdDLCAweDI0LCAweEY0LAorMHhBMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHg0NywgMHgwOCwKKzB4MUYsIDB4MjYsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzIsIDB4ODcsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYyLCAweDAwLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDAzLAorMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4ODMsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MzAsIDB4ODksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLCAweDYwLCAweDAyLCAweDkzLAorMHgwMSwgMHg3QywgMHg0NiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5QiwgMHgwMCwgMHg0QywgMHg0MiwgMHhCMCwKKzB4MDksIDB4QzAsIDB4MjIsIDB4MDEsIDB4OTMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4OTAsIDB4NDksIDB4QzAsIDB4QTcsIDB4NDAsCisweDkzLCAweDAwLCAweDRELCAweDAyLCAweDE0LCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhFNCwgMHgyMSwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwRSwgMHgxNCwgMHgyOSwgMHhDMCwKKzB4MjUsIDB4MDIsIDB4OUQsIDB4MUIsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MTIsCisweDVDLCAweDIyLCAweEQyLCAweDE5LCAweDQwLCAweDY3LCAweDAwLCAweDkxLCAweDgwLCAweDQ0LCAweDAyLCAweDEwLCAweDI5LAorMHg0MSwgMHg2NCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgzOSwgMHg0MSwgMHg2NywgMHgwMCwgMHg5MSwKKzB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDY0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDIyLCAweDEwLCAweDA5LCAweDQxLCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5OSwgMHgwOCwgMHg3NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDEsIDB4OTksIDB4MDAsIDB4MDQsIDB4ODIsIDB4OTQsIDB4MDksIDB4NDAsCisweDI2LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLCAweDg5LCAweDQyLAorMHg0NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4MjAsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4ODIsCisweDhELCAweDEwLCAweDM0LCAweDEyLCAweEQwLCAweDU4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDEwLCAweDE0LCAweDQyLAorMHhEMCwgMHg3OCwgMHg0MSwgMHgzMywgMHgwNiwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwKKzB4MDEsIDB4ODUsIDB4MDQsIDB4MzQsIDB4NTIsIDB4NTksIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODksIDB4MDQsIDB4NDQsCisweDEyLCAweDUwLCAweDQ4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCOCwgMHg4NiwgMHg0MiwgMHgwMywgMHgwQSwgMHg0NSwgMHgzMSwgMHgzMCwgMHhFMSwgMHg0MCwgMHg5NywgMHgwNCwgMHgxRiwKKzB4MDgsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODAsIDB4MDIsIDB4MUIsIDB4MDYsIDB4N0MsIDB4MTksIDB4RjAsCisweDIxLCAweEMwLCAweDg3LCAweDAxLCAweDFCLCAweDFFLCAweDRDLCAweDI4LCAweEIxLCAweEExLCAweEMwLCAweDA2LCAweDQwLAorMHgxNywgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHg4MCwgMHgwNywgMHgwMCwgMHgwQiwgMHgwQSwgMHg0QywgMHgyOCwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsCisweDJGLCAweDBBLCAweEJGLCAweDA4LCAweEZDLCAweDBBLCAweEYyLCAweENCLCAweEMwLCAweDJELCAweDAwLCAweEJGLCAweDAwLAorMHg3QywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDOCwgMHgyRCwgMHgwMiwgMHhCNywgMHgxNCwgMHhEQywgMHg1MiwgMHhGMCwgMHgwQiwKKzB4QzIsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkQsIDB4ODMsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUIsCisweDA4LCAweDdDLCAweDAyLCAweDcwLCAweDhCLCAweEM4LCAweDJFLCAweDAyLCAweDk3LCAweDA4LCAweEZDLCAweDIyLCAweEIwLAorMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBOCwgMHgyRiwKKzB4MDUsIDB4RDMsIDB4NEMsIDB4Q0MsIDB4MDIsIDB4RjEsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDQsIDB4RkMsCisweDUyLCAweDMwLCAweENCLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDIyLCAweEYwLCAweDRCLCAweEMwLAorMHgyRCwgMHgwNSwgMHg5RiwgMHgwQywgMHg1QywgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwNSwKKzB4NUMsIDB4MTYsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4ODAsIDB4Q0QsIDB4MDIsIDB4MzEsIDB4MEIsCisweEMwLCAweDY0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLAorMHgxMSwgMHgwQywgMHg0NSwgMHg0OCwgMHhEMCwgMHgwMSwgMHg0MSwgMHgwNywgMHgwMiwgMHgxMSwgMHg1NCwgMHg3NCwgMHgwMCwKKzB4MzgsIDB4QzEsIDB4QzAsIDB4OTAsIDB4MDQsIDB4MTEsIDB4MTAsIDB4NDQsIDB4MjAsIDB4RDIsIDB4NDEsIDB4NDEsIDB4MDcsCisweDIxLCAweDFELCAweDBDLCAweDQ0LCAweDQwLCAweDQwLCAweDAxLCAweDQxLCAweDA0LCAweDAyLCAweDFCLCAweDAwLCAweDcwLAorMHg1NCwgMHgxMCwgMHgwMSwgMHhDMCwgMHg5NiwgMHgwMCwgMHgwMywgMHgxMCwgMHg0NSwgMHgyMCwgMHg1MCwgMHgwMSwgMHg0MCwKKzB4NzEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4ODEsCisweDA0LCAweDA0LCAweDMyLCAweEQwLCAweDg4LCAweDYwLCAweDIzLCAweDAwLCAweDgxLCAweDJDLCAweDM2LCAweDAyLCAweDE4LAorMHg0QywgMHg2MiwgMHgyMSwgMHg0QiwgMHg4MCwgMHgwOCwgMHgyNCwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMSwgMHgyRCwKKzB4OEQsIDB4NDQsIDB4NzQsIDB4MTIsIDB4ODAsIDB4ODgsIDB4NTAsIDB4MjAsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MTQsIDB4MEEsCisweDUwLCAweDBDLCAweDQ4LCAweDIyLCAweDEyLCAweDhELCAweDA4LCAweDI0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQ4LAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MSwgMHg4MiwKKzB4NDQsIDB4NDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDUsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NDksCisweDQwLCAweDI1LCAweDAxLCAweEQxLCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAyLCAweDhELAorMHgwMCwgMHg2NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwKKzB4MEQsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4NTAsIDB4MjksIDB4NDAsIDB4NjEsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDQyLCAweDkzLCAweDAwLCAweDRELAorMHgwMiwgMHhGMCwgMHg3OSwgMHhDMCwgMHg2NywgMHg0MCwgMHg5MywgMHgxMSwgMHg3QywgMHgwMiwgMHgzNCwgMHgzOSwgMHhDMSwKKzB4MjUsIDB4MDAsIDB4OTMsIDB4MTAsIDB4NkQsIDB4NEUsIDB4RjAsIDB4NjksIDB4QzAsIDB4RTUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDhBLCAweEIwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDk3LCAweDAwLCAweDVDLCAweDAyLCAweDcwLCAweDA5LAorMHhDMCwgMHhBNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg2RCwgMHgxQSwgMHgzMCwgMHgyOSwgMHhDMCwgMHgxNCwgMHhBMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MjYsCisweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDNDLCAweDAyLCAweEYwLCAweDE5LCAweEQwLCAweDI0LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHg4NCwgMHg5RiwgMHgwMCwgMHg1QywKKzB4MjIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDgsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsCisweDY3LCAweDgyLCAweDlGLCAweDAwLCAweDVELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDVCLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwRiwgMHgwMCwgMHg0RSwgMHg0OCwgMHhGMiwKKzB4NDEsIDB4RTQsIDB4ODcsIDB4MDEsIDB4MUYsIDB4MDgsIDB4N0MsIDB4ODAsIDB4NzAsIDB4MDAsIDB4QzAsIDB4ODQsIDB4MDAsCisweDEzLCAweDAxLCAweDdDLCAweDAwLCAweEY4LCAweDIxLCAweEM0LCAweDg3LCAweDA4LCAweDFGLCAweDAwLCAweDVDLCAweDA4LAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwMywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHg4NywKKzB4NDAsIDB4MTMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4RjAsIDB4QTAsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDFDLCAweDAwLCAweDVELCAweDIwLCAweEM2LCAweDFELCAweDcwLCAweDI3LAorMHg0MCwgMHg1RiwgMHgwNCwgMHg3RCwgMHgwOCwgMHg3NCwgMHgxNSwgMHhEMCwgMHgyNywgMHhDMCwgMHgxNCwgMHgwMCwgMHg3MSwKKzB4MDAsIDB4REMsIDB4MDksIDB4RjAsIDB4MzcsIDB4NjAsIDB4OUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzAsCisweDQ3LCAweDQwLCAweDE3LCAweDQwLCAweDUyLCAweDAwLCAweDVDLCAweDAxLCAweEQwLCAweDI2LCAweDQwLCAweDE3LCAweDA0LAorMHg3NCwgMHg4MiwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4RjIsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MEYsIDB4NTAsIDB4OEMsIDB4NDAsCisweDc3LCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDAzLCAweEQwLCAweDJDLCAweDQxLCAweDM2LCAweDAwLCAweEQxLCAweDIwLAorMHgzNCwgMHg0NywgMHhEMiwgMHgwQywgMHg0MSwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgxQywKKzB4NDAsIDB4MjMsIDB4MDgsIDB4ODgsIDB4MjAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MjAsIDB4NjAsIDB4NjMsIDB4MDAsIDB4OTAsCisweDEyLCAweDA1LCAweDAzLCAweEQwLCAweDFDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHg4MCwgMHhBOCwgMHgxMCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgwMSwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MjAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEIsIDB4NjAsIDB4MjgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4OTQsCisweDA5LCAweDEwLCAweDBFLCAweDQxLCAweDlCLCAweDA4LCAweENELCAweDA0LCAweEM0LCAweDEzLCAweDEyLCAweDA2LCAweDQwLAorMHgyQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNiwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHg2MywgMHgwMCwgMHhFNSwgMHgwMCwKKzB4ODQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NjAsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDE4LCAweDQ4LCAweDEwLCAweEZGLCAweDAxLCAweEE1LCAweDA3LCAweDcwLCAweDFFLCAweDQwLCAweDVCLCAweDAwLAorMHhFRCwgMHgwMSwgMHhCQywgMHg4NywgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QSwgMHg0MiwgMHhFMSwgMHgwMSwgMHhCQywgMHgwNywKKzB4RDAsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDksIDB4OUQsIDB4NUYsIDB4NzAsIDB4MTYsIDB4RTQsIDB4NzMsCisweDAwLCAweEFCLCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDEyLCAweDgwLCAweDdCLCAweDAwLCAweDIxLCAweDAxLCAweDhDLAorMHgwNywgMHhGMCwgMHgxRSwgMHhEMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QjgsIDB4MDUsIDB4MDAsIDB4REYsIDB4MTYsIDB4NUMsIDB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEExLCAweDQyLCAweEQxLCAweDM3LCAweDIwLCAweDFGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwOCwgMHgzQywgMHgxQiwgMHg3MCwgMHgwNSwgMHhDMCwgMHgzNywgMHg0MCwKKzB4RDMsIDB4MDAsIDB4NUMsIDB4ODMsIDB4RjAsIDB4MEQsIDB4ODAsIDB4MzcsIDB4MDAsIDB4NUIsIDB4MjAsIDB4N0MsIDB4MDIsCisweEYwLCAweDBDLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLAorMHg0RCwgMHgwMCwgMHhGNywgMHgzMSwgMHhDQywgMHgxMywgMHhGMCwgMHg5NywgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwKKzB4RkMsIDB4MDYsIDB4QjAsIDB4OUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDksIDB4RkMsIDB4MjcsIDB4RjAsIDB4MUYsCisweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDgxLCAweENDLCAweDA3LCAweDcwLCAweDlGLCAweEMwLCAweDZDLCAweDQwLCAweEI3LAorMHg0MSwgMHhDQywgMHgwNywgMHhCMCwgMHgxQSwgMHhDMCwgMHg2QywgMHgyMCwgMHhCRiwgMHgyMSwgMHhDQywgMHgwNywgMHhGMCwKKzB4MUIsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MEQsCisweDAwLCAweEVCLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgyMiwgMHhEMCwgMHhDNiwgMHg1MCwgMHgyOCwgMHgzMCwgMHg2MCwgMHgxOCwgMHg5QywgMHgyMywgMHhEMCwgMHgwRSwgMHhDMCwKKzB4MzksIDB4MDIsIDB4RUQsIDB4MDQsIDB4ODQsIDB4MTMsIDB4NDAsIDB4MDMsIDB4QzAsIDB4MkEsIDB4MDAsIDB4RTUsIDB4MDAsCisweEFDLCAweDIzLCAweDEwLCAweDBFLCAweEMyLCAweDJBLCAweDAwLCAweEU5LCAweDAwLCAweDg1LCAweDQyLCAweEQwLCAweDBFLAorMHg0MCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwKKzB4RTUsIDB4MTAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4MDYsIDB4NDIsIDB4MTgsIDB4MDQsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDIsCisweEQwLCAweDA2LCAweDQyLCAweDM4LCAweDAwLCAweDYxLCAweDgwLCAweEI0LCAweDAyLCAweEQwLCAweDhBLCAweDQwLCAweEJCLAorMHgwMCwgMHhFRCwgMHgyMCwgMHhDNCwgMHg0QiwgMHg0MiwgMHgwNiwgMHg0MCwgMHgzMiwgMHgwMCwgMHhBNSwgMHgwMCwgMHhBNCwKKzB4MDMsIDB4OTAsIDB4MDIsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QTUsIDB4MDgsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsCisweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDAxLCAweDAwLCAweEQxLAorMHgwMSwgMHgwNCwgMHgwMiwgMHhEMCwgMHgyOCwgMHg1MCwgMHg4MCwgMHgwNCwgMHg4RCwgMHg0NywgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDUsIDB4NTgsIDB4MzQsIDB4NDIsIDB4MDEsIDB4OTEsIDB4MTQsIDB4Q0UsIDB4RDAsIDB4MzksIDB4NDAsIDB4MDEsIDB4MjAsCisweENELCAweDAwLCAweDA0LCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDMyLCAweDQwLCAweEM1LCAweDAwLCAweDI0LCAweDAzLAorMHgxMCwgMHgwQywgMHg0MCwgMHgyMiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgyNCwgMHgwRSwgMHhEMCwgMHg4QywgMHg0MCwgMHgxQiwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MDUsIDB4MDYsIDB4RjUsIDB4MjAsCisweDRDLCAweDAyLCAweEYwLCAweEI5LCAweEMxLCAweEE0LCAweDAwLCAweDFGLCAweDA1LCAweDc0LCAweDgyLCAweEIwLCAweDA5LAorMHhDMCwgMHg3NCwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywgMHg0MiwgMHhEMCwgMHgzOSwgMHhDMSwgMHhCNywgMHgwMCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MDcsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MjYsIDB4NDAsIDB4ODUsIDB4MDAsIDB4RUMsIDB4MDMsIDB4QjAsCisweDAxLCAweEM4LCAweDI0LCAweDAwLCAweDU3LCAweDgwLCAweDZDLCAweDBFLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgwNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MjgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MTksIDB4QzAsCisweDI3LCAweDA0LCAweDlGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDE3LCAweDAwLCAweENGLCAweDAwLAorMHg3RCwgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgyMywgMHg0MCwgMHg5RSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MUMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDBCLCAweDAwLCAweEZCLCAweDAwLCAweENDLCAweDQyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4QjMsIDB4MDAsIDB4QjQsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4M0MsIDB4MDAsIDB4REYsIDB4MDAsIDB4Q0MsCisweDAzLCAweEYwLCAweDA2LCAweEMwLCAweEVDLCAweDAwLCAweDkzLCAweDA4LCAweDBDLCAweDAzLCAweDM0LCAweDUzLCAweDQwLAorMHgzOCwgMHgwMCwgMHhFMywgMHhDMCwgMHhDQywgMHg1NiwgMHgzMSwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4QzYsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MTQsIDB4RDAsCisweDM5LCAweDQwLCAweDQ3LCAweDAxLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweEM4LCAweDExLCAweDUwLCAweDM0LCAweDAwLAorMHgxRiwgMHg4MywgMHg3NCwgMHgwQywgMHgxMiwgMHgzMSwgMHg0NCwgMHhDNCwgMHgwQywgMHhERiwgMHgwMCwgMHg1NCwgMHgwMywKKzB4RjAsIDB4MjUsIDB4NDQsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDUsIDB4MDMsIDB4QjAsIDB4MDQsIDB4NDAsIDB4MzUsCisweDAwLCAweEQzLCAweDAzLCAweDU0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NiwgMHg0MCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNCwgMHhEMCwgMHgxMSwKKzB4NDAsIDB4NjcsIDB4MDAsIDB4MTEsIDB4MTEsIDB4NzYsIDB4MDYsIDB4RDEsIDB4MTksIDB4NTQsIDB4MzQsIDB4MDAsIDB4OTEsCisweDAxLCAweDc2LCAweDQ2LCAweDEwLCAweDM5LCAweDYwLCAweDY0LCAweDEwLCAweERELCAweDQwLCAweDQ0LCAweDAzLCAweEQwLAorMHgyNSwgMHg0MCwgMHgyNCwgMHgxOCwgMHg5MSwgMHg0MCwgMHg1NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNSwgMHg0MCwKKzB4RDEsIDB4MEEsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweEMxLCAweDQwLCAweDA0LCAweDAwLCAweEQwLCAweDAwLCAweDQyLAorMHgyMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDAsCisweDUwLCAweDIwLCAweDIwLCAweDgxLCAweDAwLCAweDE0LCAweDAzLCAweDkwLCAweDBDLCAweDQ4LCAweDIxLCAweDAwLCAweEM5LAorMHg4MCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0QywgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RDAsIDB4MDEsIDB4QzIsIDB4MjcsCisweDAwLCAweDEzLCAweDAwLCAweDdFLCAweDAyLCAweEMwLCAweDAzLCAweEMwLCAweDNDLCAweDQwLCAweDkxLCAweDAwLCAweDdDLAorMHgwMCwgMHgzOCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhGQywgMHgwMCwgMHhDQywgMHg4MywgMHhEMCwgMHgwNSwgMHhDMCwKKzB4MjQsIDB4NDAsIDB4OTMsIDB4NDAsIDB4NUMsIDB4MDMsIDB4MTAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4QzMsIDB4ODAsCisweDRDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDA3LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhCOCwgMHgwRCwgMHgwMCwgMHhGNywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHg0MCwKKzB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEI4LCAweDAzLCAweEYwLCAweDAzLCAweEM0LCAweDJGLAorMHg0MCwgMHhCRiwgMHgwMCwgMHhFQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4RTAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDgwLCAweDdGLCAweDAwLCAweEJGLCAweDIwLCAweENDLCAweDEzLCAweDcwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLCAweEYzLAorMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRiwgMHgwMSwgMHg4QywgMHgwNywgMHgzMCwKKzB4MUYsIDB4QzAsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsCisweEYzLCAweDAzLCAweEVDLCAweDA3LCAweEIwLCAweDE2LCAweEMwLCAweDVDLCAweDAwLCAweDJCLCAweDAxLCAweEVDLCAweDA1LAorMHgzMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwKKzB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RUMsIDB4MEIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MDAsCisweDQ0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDIwLCAweDQwLCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwKKzB4ODQsIDB4NEMsIDB4MDQsIDB4NTIsIDB4MUQsIDB4NDAsIDB4NTUsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NTQsIDB4MDMsIDB4QjQsCisweDAxLCAweDQwLCAweDBELCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLAorMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgyMywgMHhEMCwgMHgwQywgMHg2MCwgMHgzMywgMHgwMSwgMHhDMSwgMHgwMCwgMHg0NCwKKzB4ODMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDgsCisweDM0LCAweDgwLCAweEMxLCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDM1LCAweDAwLCAweEMxLCAweDA0LAorMHg2NCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0NCwgMHgxNiwgMHg4MCwgMHg1OSwgMHgwMCwgMHg2NiwgMHg4MywgMHg1QywgMHgwMCwKKzB4NDQsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsCisweDlELCAweDIxLCAweDQ0LCAweDAzLCAweDkxLCAweDAxLCAweDYwLCAweDAzLCAweDAwLCAweDExLCAweDAwLCAweDYwLCAweDAwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4ODAsIDB4MTksIDB4MjAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsCisweDAwLCAweDUwLCAweDFELCAweDRDLCAweDE3LCAweDA0LCAweDUxLCAweDEwLCAweDU0LCAweDBCLCAweERDLCAweDExLCAweDQwLAorMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwgMHgxRiwKKzB4MzMsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDRELCAweDAzLCAweDM0LCAweDBDLCAweEMwLCAweDMwLCAweDAwLAorMHhEMywgMHgyMCwgMHgwQywgMHgwMywgMHgxMCwgMHgwRCwgMHhDMCwgMHgzMSwgMHgwMCwgMHhEMywgMHgwMCwgMHgyQywgMHgwMywKKzB4QjAsIDB4MTgsIDB4QzAsIDB4OTIsIDB4MDAsIDB4OUIsIDB4MDEsIDB4MkMsIDB4MEIsIDB4NzAsIDB4NTksIDB4QzIsIDB4MDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDEwLCAweEFGLCAweDAwLAorMHhGQywgMHgwMywgMHg3MiwgMHgwMywgMHhDQiwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEUsIDB4MDQsIDB4MzcsCisweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDA0LCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLAorMHgwRiwgMHhDMCwgMHg4RCwgMHgxMCwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMywgMHhCMCwgMHgwOSwgMHhDMCwgMHgzRiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDYsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweEMwLAorMHgzNCwgMHgxQiwgMHhEMywgMHgwMCwgMHg0QywgMHg0NywgMHgzMCwgMHgxRCwgMHhDMCwgMHg3NywgMHgwMCwgMHhENywgMHgwMSwKKzB4N0MsIDB4NDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDIsIDB4REYsIDB4MDAsIDB4NEQsIDB4NDMsIDB4MzAsIDB4MEQsCisweEMwLCAweDM1LCAweDAwLCAweDlGLCAweDA2LCAweDRDLCAweDBCLCAweDMwLCAweDAxLCAweEMwLCAweDI5LCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg3NCwgMHgxMCwgMHg5RCwgMHgwOCwgMHhGNCwgMHgwMywKKzB4RDEsIDB4MjEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDMsIDB4MUMsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4QzQsCisweDAwLCAweDAxLCAweDAwLCAweDQ0LCAweDBDLCAweDEyLCAweDMxLCAweDQwLCAweDQ3LCAweDAwLCAweDE1LCAweDAzLCAweDc0LAorMHgwNCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxRCwgMHgwQiwgMHg0NiwgMHg0MCwgMHhCMiwgMHhBRCwgMHg0OCwKKzB4QzQsIDB4MjIsIDB4OEIsIDB4MDcsIDB4NkMsIDB4MEIsIDB4QTAsIDB4OTEsIDB4QzAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweEYyLCAweDAwLCAweDBELCAweDA5LCAweDc0LCAweDE3LCAweEQwLAorMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhERCwgMHgwNCwgMHgzNCwgMHgwQiwgMHhEMCwgMHgyQywgMHg0MCwgMHhGMCwgMHgwMCwKKzB4QzEsIDB4MEMsIDB4NTQsIDB4MDMsIDB4MTQsIDB4NEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDksIDB4MDQsIDB4MzQsIDB4MEIsCisweEQwLCAweDRDLCAweDQwLCAweEIwLCAweDIwLCAweEQ5LCAweDAwLCAweDA0LCAweDBCLCAweDEwLCAweDI0LCAweDQwLCAweDUzLAorMHgwMCwgMHhDMSwgMHgwMSwgMHgyNCwgMHgyMiwgMHg5MCwgMHg5OSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjQsIDB4NDcsIDB4RDgsIDB4MTMsCisweDQwLCAweDRBLCAweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRDLCAweDAwLCAweDIxLAorMHgwMSwgMHhDNCwgMHgwNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgyRCwgMHgwOCwgMHhCNCwgMHgwMCwgMHhEMCwKKzB4MTIsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MkQsIDB4MzEsIDB4ODQsIDB4MDQsIDB4OTAsIDB4OUYsIDB4NDQsIDB4NUUsIDB4MDgsCisweDc5LCAweDIxLCAweEE0LCAweDBGLCAweDkwLCAweDEyLCAweDQ4LCAweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwKKzB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDAsCisweDFDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDM3LCAweDgwLCAweEM5LCAweDAwLCAweDNDLCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgyMywgMHgzMCwgMHgwNCwgMHhDMCwgMHgxMywgMHgxNCwgMHhDMywKKzB4MDAsIDB4NEMsIDB4MjMsIDB4QjAsIDB4ODgsIDB4QzYsIDB4NEIsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDgzLCAweEYwLCAweDAyLCAweEMwLCAweDBELAorMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMiwgMHgzRiwgMHgwOCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzYsIDB4MDgsIDB4RkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4ODAsCisweDBGLCAweDAwLCAweDNFLCAweDAwLCAweEJDLCAweDg0LCAweEY5LCAweDBGLCAweEM4LCAweDE5LCAweDAwLCAweDdGLCAweDAwLAorMHhGQywgMHgyMywgMHhGMCwgMHgwMywgMHhDOCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4MzcsIDB4MTAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDA3LCAweDM0LCAweDFELCAweEQwLCAweDMwLCAweDAwLCAweEQzLCAweDAxLCAweDRELCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgxRCwgMHhEMCwgMHgzNCwKKzB4MDAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MUMsIDB4RDAsIDB4NTQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsCisweDAzLCAweEQxLCAweDA5LCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHg4OCwgMHgzOSwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgyQiwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyRCwKKzB4MDAsIDB4RjQsIDB4MDAsIDB4MTAsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsCisweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAzLCAweDQwLCAweDA4LCAweDEwLAorMHgyRCwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgxOCwgMHg0MCwgMHhFMSwgMHgwMCwgMHg5NCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsCisweDc5LCAweDAwLCAweEVELCAweDAzLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLAorMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3QywgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsCisweDAxLCAweEE1LCAweDA3LCAweEQwLCAweDFGLCAweDQ5LCAweDU4LCAweDgwLCAweEY1LCAweDAxLCAweDg0LCAweDA3LCAweEQwLAorMHgxRSwgMHg0MiwgMHgxMywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywKKzB4MDAsIDB4REQsIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDAwLCAweDQ0LAorMHgwNywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwMCwKKzB4MjQsIDB4MDAsIDB4RDAsIDB4NUMsIDB4NDQsIDB4RDAsIDB4MDEsIDB4QzUsIDB4MTMsIDB4MTQsIDB4NEYsIDB4RDgsIDB4NUQsCisweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLAorMHg3RiwgMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwKKzB4MzAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4NTAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsCisweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweDQ0LAorMHgwMSwgMHhEMCwgMHgyNywgMHhDMCwgMHhEQywgMHgwMCwgMHg2NywgMHgwNywgMHg4QywgMHgwMSwgMHhGMCwgMHg1NywgMHg0NCwKKzB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUYsCisweDEyLCAweDdDLCAweDAwLCAweEYyLCAweDIzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAyLCAweEZDLCAweDAwLCAweEYwLAorMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDIsIDB4RkMsIDB4ODAsIDB4RjMsIDB4MjMsIDB4QzAsIDB4OEYsIDB4MDAsIDB4M0YsIDB4MjIsIDB4REMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFCLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDIxLCAweEMwLCAweDRCLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwKKzB4NEMsIDB4MDYsIDB4RjAsIDB4OTksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDY3LCAweDQwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDY3LCAweDQwLCAweDkzLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMywgMHg0QywgMHgyMiwgMHhGMCwKKzB4NDksIDB4RTAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUUsIDB4MEEsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEE2LCAweDA0LCAweDlELCAweDEyLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgyOSwgMHg0MSwgMHgyMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgxOSwgMHg0MSwKKzB4MjcsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTEsIDB4MDIsCisweDc0LCAweDAyLCAweEQ4LCAweDM5LCAweDQwLCAweDI3LCAweDAxLCAweDlELCAweDAwLCAweDQ1LCAweDg2LCAweEQwLCAweDM5LAorMHg0MCwgMHg2NywgMHgxNCwgMHg5NywgMHgwQSwgMHg0NCwgMHgwQSwgMHg1NiwgMHg0OSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MkEsCisweEQwLCAweDA5LCAweDQwLCAweDJDLCAweDA4LCAweEIxLCAweDAwLCAweEY0LCAweDBFLCAweEQwLCAweDFCLCAweDQwLCAweEFGLAorMHgwMiwgMHhCMSwgMHgwMywgMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMiwgMHhCMSwgMHgwMiwgMHhGNCwKKzB4MEEsIDB4RDEsIDB4MUIsIDB4NDEsIDB4MkYsIDB4MDEsIDB4QTksIDB4MDAsIDB4QzYsIDB4MDIsIDB4OTEsIDB4MDksIDB4NDAsCisweDI1LCAweDAwLCAweDlELCAweDQyLCAweDU0LCAweDAyLCAweDE1LCAweDQ5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgxNCwgMHgyNSwgMHgxMiwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MkMsIDB4MDAsIDB4RTEsIDB4ODAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NEEsIDB4MkIsIDB4MDAsCisweEExLCAweDAwLCAweEI0LCAweDA2LCAweEQwLCAweDBFLCAweDQwLCAweDZCLCAweDAwLCAweEExLCAweDAwLCAweEI0LCAweDAyLAorMHhEMiwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwOCwgMHg4NCwgMHgwMiwgMHhEMiwgMHgwQywgMHg0QSwgMHgyMywKKzB4MDAsIDB4OTUsIDB4MDAsIDB4NjQsIDB4MDYsIDB4NTgsIDB4NDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDA0LCAweDZDLCAweDI4LCAweEYwLCAweEExLAorMHhDOCwgMHg4NCwgMHg0MiwgMHgxMywgMHgwQSwgMHg3QywgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywKKzB4MEEsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MjgsIDB4RDAsCisweEExLCAweEMwLCAweDg3LCAweDAyLCAweDBGLCAweDgyLCAweENDLCAweDAxLCAweEY4LCAweDAxLCAweENBLCAweDA1LCAweDAwLAorMHgxRiwgMHgwMCwgMHg1QywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDUsIDB4QkYsIDB4MTQsIDB4NUMsIDB4MjIsIDB4RjAsIDB4MDksIDB4RDAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDIwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RTAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QTcsCisweDQwLCAweERDLCAweDAyLCAweEYwLCAweDhCLCAweEQ0LCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHg4MCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgxNCwgMHhGQywgMHgzMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHgyNCwKKzB4MDAsIDB4QUYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDhCLCAweEM4LCAweDJGLCAweDA4LCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweDcwLCAweDBCLCAweEMwLAorMHgyRiwgMHgwMCwgMHhCMywgMHgyOCwgMHhDRSwgMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRSwgMHgwMCwgMHhCMywgMHgwMCwKKzB4RkMsIDB4MDIsIDB4QzEsIDB4MEIsIDB4QzIsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweDAwLCAweDA3LCAweDA1LCAweDFELCAweDA0LCAweDc0LCAweDMwLCAweDEwLCAweDAxLCAweDQxLCAweDA0LCAweDA0LAorMHgxRCwgMHgyMCwgMHg3NCwgMHg1MCwgMHhEMCwgMHg0MSwgMHg0QywgMHgwNywgMHgwMSwgMHgxMSwgMHgxMCwgMHg3NCwgMHg0MCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsIDB4NzQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDEsIDB4MDcsCisweDA0LCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDE2LCAweDAwLCAweDFCLCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTIsIDB4MjMsIDB4MjEsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsCisweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDQ4LCAweDQxLCAweDIzLCAweDAxLCAweDgxLCAweDA0LCAweDM0LCAweDAyLCAweEQwLAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4RCwgMHgxNCwgMHgzNCwgMHgxMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHgyNywgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDQsIDB4MjQsIDB4MDAsIDB4ODUsIDB4NDAsIDB4MzQsIDB4ODIsCisweEQxLCAweDA4LCAweDQwLCAweDQ4LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LAorMHgyNSwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwOSwgMHg1MCwgMHgyNCwgMHgyMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLCAweDkxLAorMHgwMCwgMHg2NCwgMHg4MiwgMHhEMSwgMHgxOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwQSwgMHhEOCwKKzB4MDksIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODgsIDB4MjcsCisweDAwLCAweDlELCAweDAxLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDAyLCAweEYwLCAweDA5LCAweDgwLCAweDIwLCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDQ5LAorMHhDQSwgMHgxNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYxLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNiwgMHgyNywgMHg1MCwgMHg5RiwgMHg4MCwgMHg1QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUIsIDB4MDAsIDB4N0UsIDB4MTIsIDB4RjAsIDB4NDksIDB4RDEsCisweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLAorMHgwNCwgMHgzQywgMHg0MCwgMHgzMCwgMHgwMSwgMHhEMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDYsIDB4MDAsCisweDFGLCAweDAxLCAweDdDLCAweDIwLCAweEYwLCAweDkxLCAweEMwLCAweDA3LCAweDA0LCAweDEzLCAweDgwLCAweDdDLCAweDQwLAorMHhGMCwgMHgxMSwgMHhDNCwgMHg4NCwgMHgwNCwgMHgxRiwgMHgxMCwgMHg1QywgMHg0OCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg1MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MTIsCisweEY0LCAweDAxLCAweDEyLCAweDE3LCAweEMwLCAweDE0LCAweDIwLCAweDcxLCAweDBBLCAweEVDLCAweDAxLCAweEQwLCAweDg3LAorMHg0OCwgMHg5RiwgMHg4MCwgMHg3RCwgMHgwMCwgMHhGNCwgMHg2RCwgMHhEMCwgMHgwNywgMHhDMCwgMHgxRSwgMHgwMCwgMHg3RCwKKzB4MDAsIDB4RjQsIDB4MjksIDB4NzAsIDB4MDcsIDB4QzAsIDB4OTksIDB4MDAsIDB4NzEsIDB4ODEsIDB4Q0MsIDB4MEQsIDB4RDEsCisweDE2LCAweDQ0LCAweDFDLCAweDIwLCAweDdELCAweDAyLCAweEM0LCAweDE1LCAweEMwLCAweDI3LCAweDQwLCAweDQzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhGMiwgMHgwMywgMHhDRCwgMHgwMSwgMHgzNCwKKzB4MDMsIDB4MTAsIDB4OUQsIDB4NDEsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MkMsIDB4NDgsCisweEI3LCAweDAxLCAweENELCAweDEwLCAweDM0LCAweDBCLCAweEQwLCAweDBDLCAweDQyLCAweDMwLCAweDAxLCAweENELCAweDAwLAorMHgzNCwgMHgwNywgMHhEMCwgMHgxQywgMHg0MCwgMHgzMSwgMHgwMCwgMHhEMSwgMHgwOCwgMHgxNCwgMHgwOSwgMHhEOCwgMHg5QywKKzB4NDAsIDB4MzEsIDB4MTAsIDB4MEQsIDB4MDEsIDB4MTQsIDB4MEYsIDB4RDAsIDB4OEQsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweDM0LCAweDAxLAorMHgxMCwgMHgwRiwgMHg0MCwgMHg3OCwgMHg0MSwgMHhGMSwgMHgwMSwgMHg4NCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0MSwgMHgzQiwKKzB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MUUsIDB4NjAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MTAsIDB4QjQsCisweDAxLCAweDUwLCAweDBFLCAweDQyLCAweDM5LCAweDQwLCAweDIxLCAweDAwLCAweEE0LCAweDA4LCAweEQwLCAweDBFLCAweDQwLAorMHgyOSwgMHgwMCwgMHg3RCwgMHgxMSwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTgsIDB4MDgsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsCisweDFFLCAweEMwLCAweDdDLCAweDA1LCAweEUzLCAweDAxLCAweDg0LCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDdCLCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNSwgMHhGMCwgMHgxRiwgMHg0MCwgMHg1OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywKKzB4RjAsIDB4MUUsIDB4QzAsIDB4N0QsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OUMsIDB4MDUsIDB4RjAsIDB4MEUsIDB4QzAsIDB4NjksCisweDEwLCAweDJGLCAweDAxLCAweDlDLCAweDA1LCAweEYyLCAweDFFLCAweEM0LCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCQSwgMHgxNSwgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGNCwgMHgwRCwKKzB4QzgsIDB4MzUsIDB4MjMsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA5LCAweEQ4LCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDNCwgMHgyNSwgMHg4MCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMiwgMHgwRCwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4OEYsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDdELCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDg3LCAweEY5LCAweDBGLCAweEMwLAorMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgyNSwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgwOSwKKzB4REMsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MEEsIDB4N0YsIDB4ODEsIDB4Q0MsIDB4ODcsIDB4RjAsIDB4MTcsCisweEMwLCAweDVGLCAweDIyLCAweEYzLCAweDAxLCAweENDLCAweDI1LCAweDMwLCAweDFBLCAweEMwLCAweDc4LCAweDAyLCAweDIzLAorMHgwMSwgMHhDQywgMHgwNiwgMHhGMCwgMHg5QiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4ODgsIDB4MzksIDB4MjIsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MTksIDB4RDgsIDB4NDYsIDB4NDAsIDB4M0IsCisweDA1LCAweEVELCAweDA0LCAweEI0LCAweDgzLCAweEQwLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweDZELCAweDAwLCAweEI0LAorMHg4OCwgMHhEMCwgMHgyRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgxOCwgMHg4NSwgMHgwQSwgMHhEMCwgMHhBRSwgMHg0MCwKKzB4MUYsIDB4MDMsIDB4MjEsIDB4ODQsIDB4QzQsIDB4MDEsIDB4QjAsIDB4NEEsIDB4NDAsIDB4QTgsIDB4MDIsIDB4MkYsIDB4MDAsCisweDk0LCAweDAyLCAweEQwLCAweDhBLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHg4MSwgMHhEMCwgMHg4QSwgMHg0MSwgMHgzOSwgMHgyMCwKKzB4NkQsIDB4OTAsIDB4QjQsIDB4MDgsIDB4RDEsIDB4MjMsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MjAsIDB4OTYsIDB4MjMsCisweEQwLCAweDBFLCAweDQwLCAweDFCLCAweDEwLCAweEZELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDIyLCAweDQwLCAweDNCLAorMHg2MCwgMHhCMSwgMHgwMCwgMHhENiwgMHgwMSwgMHgxMSwgMHgwRSwgMHg0OCwgMHgyOCwgMHgwMCwgMHgyNSwgMHgwQSwgMHg4NCwKKzB4NDAsIDB4RDAsIDB4OEEsIDB4NDEsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDI4LCAweDA1LCAweDAwLCAweDhELCAweDAzLCAweDc0LCAweDAwLCAweEQwLCAweDMwLCAweDQ0LCAweEYzLCAweDAwLCAweDFELAorMHgwMywgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhDMCwgMHgwMCwgMHgwRCwgMHgwMiwgMHg3NCwgMHgwQywgMHhEMCwKKzB4MzksIDB4MDAsIDB4RTcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MEUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4RTMsIDB4MDAsCisweDgxLCAweDAyLCAweDE0LCAweDA4LCAweDkwLCAweDFDLCAweDQ0LCAweDIwLCAweDA0LCAweDBELCAweDAwLCAweDU2LCAweDBDLAorMHhEMCwgMHgyOCwgMHg0MSwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgyOCwKKzB4MjUsIDB4MDAsIDB4MUYsIDB4MDYsIDB4N0UsIDB4MDIsIDB4RDgsIDB4OTEsIDB4QzgsIDB4QjksIDB4MDAsIDB4MUYsIDB4MDEsCisweDdDLCAweDE2LCAweEYwLCAweDU5LCAweEMwLCAweDg0LCAweDA0LCAweDFELCAweDA3LCAweDVDLCAweDA2LCAweEYwLCAweDE5LAorMHhDMCwgMHgyNywgMHgwNCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwNiwgMHhGMCwgMHg1OCwgMHhDMCwgMHg2NywgMHgwMiwgMHhDMywKKzB4MDAsIDB4MUMsIDB4NEQsIDB4MTAsIDB4OEMsIDB4RDAsIDB4RTAsIDB4MDEsIDB4MTcsIDB4MDAsIDB4NEMsIDB4MEUsIDB4RjAsCisweDAxLCAweEMwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHg4MiwgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywKKzB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDgsIDB4MUYsIDB4MDIsIDB4N0MsIDB4NkEsIDB4RjAsIDB4ODksIDB4QzEsCisweEE3LCAweDA0LCAweDlGLCAweDEwLCAweDdDLCAweDYwLCAweEYwLCAweDA5LCAweEM4LCAweDg3LCAweDAyLCAweDFGLCAweDIzLAorMHg2QywgMHgwMCwgMHhGMCwgMHg4RCwgMHhDMiwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkQsIDB4MDAsCisweDMzLCAweDEwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEUyLCAweDNGLCAweDA0LCAweEIzLCAweDAwLCAweENDLCAweDAwLAorMHgzOCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwNCwgMHhCRiwgMHgxMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwMywgMHhDMiwgMHgyQywKKzB4ODAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MkMsIDB4MDAsIDB4N0YsIDB4MTAsIDB4Q0MsCisweDQxLCAweDMxLCAweDBGLCAweEMwLCAweDJELCAweDEwLCAweDMzLCAweDAwLCAweEZDLCAweDQyLCAweDMwLCAweDBBLCAweEMwLAorMHgwNCwgMHgyNCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhFNiwgMHgwMCwgMHg5MSwKKzB4MDUsIDB4NzQsIDB4MDYsIDB4MTIsIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4ODEsIDB4NDQsIDB4MDQsIDB4QjgsCisweDE5LCAweDQ0LCAweDQ3LCAweDMwLCAweDlELCAweDQzLCAweDVDLCAweDBFLCAweDEwLCAweDMxLCAweDQwLCAweDY1LCAweDAwLAorMHgxRiwgMHgwMSwgMHg0NCwgMHgwQywgMHgxMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwMSwgMHg1RCwgMHgwMiwgMHg0QywgMHgwQywKKzB4NzAsIDB4M0QsIDB4NDAsIDB4RTQsIDB4MDAsIDB4OTUsIDB4MDEsIDB4NzQsIDB4MEMsIDB4MTIsIDB4NzEsIDB4NDAsIDB4MDQsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEM0LCAweDQwLCAweDExLCAweDAxLAorMHg3NCwgMHgwNiwgMHgxNCwgMHgzOSwgMHg0NCwgMHgzNywgMHgwMCwgMHgxMSwgMHgwMywgMHg0NCwgMHg0NiwgMHgxQSwgMHgxMSwKKzB4NDEsIDB4NjcsIDB4MDAsIDB4OUQsIDB4NDMsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDQsIDB4MTEsCisweDAxLCAweDQ0LCAweDA2LCAweDEwLCAweDE5LCAweDY0LCAweDY2LCAweDAwLCAweERELCAweDAyLCAweDQ0LCAweDQ1LCAweDEwLAorMHhBNSwgMHg0MCwgMHg2NiwgMHgyMCwgMHgxOSwgMHg4MSwgMHg3NCwgMHgwRSwgMHgxMSwgMHgxMSwgMHg1NCwgMHgwNCwgMHgwOCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDAwLCAweDY4LCAweDM3LCAweDAwLCAweDgxLCAweDAwLCAweDA1LCAweDAyLCAweDEwLCAweDAwLCAweDQwLAorMHg2MywgMHgwMCwgMHgwRCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgxNCwgMHgwOCwgMHg1MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgwMCwKKzB4MDUsIDB4MDIsIDB4MUMsIDB4MDksIDB4NjQsIDB4MDIsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4OTQsIDB4MEQsCisweDQwLCAweDAyLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDAwLCAweDQwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzAsIDB4MDksIDB4NjAsIDB4M0YsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MTQsIDB4MDEsIDB4QzAsIDB4MjcsCisweDIwLCAweDlGLCAweDAwLCAweDdFLCAweDgyLCAweDMwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDRDLAorMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhEMCwKKzB4MjcsIDB4MDgsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4RDAsIDB4MDQsIDB4NjQsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAwLCAweEYxLAorMHgwMywgMHhDMiwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDJGLCAweDQwLCAweENDLCAweDAwLCAweDU5LCAweDBGLCAweEM4LCAweDJELAorMHgwMCwgMHgzNywgMHg4MCwgMHhGQywgMHgwMiwgMHhGNCwgMHgwQiwgMHhDOCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDEsIDB4RUMsIDB4MDIsIDB4RjAsIDB4MEYsCisweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweEJFLCAweDA3LCAweEYwLCAweDAzLCAweEMxLCAweDNFLCAweDAwLCAweEEzLAorMHgwMSwgMHhEQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhBQywgMHgwMSwgMHhEQywgMHgzMywgMHgzNCwKKzB4M0YsIDB4QzAsIDB4MkYsIDB4ODAsIDB4QTMsIDB4MDEsIDB4RkMsIDB4NTMsIDB4RjAsIDB4ODMsIDB4QzAsIDB4NEYsIDB4MDAsCisweDMzLCAweDAxLCAweEJDLCAweDBDLCAweDMwLCAweDEzLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHgyNywgMHgxMiwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRiwgMHg0NCwKKzB4MDQsIDB4MTQsIDB4MUQsIDB4MDAsIDB4NTUsIDB4MDcsIDB4RDAsIDB4MjEsIDB4NTAsIDB4M0MsIDB4MDAsIDB4OTEsIDB4NDEsCisweDQ0LCAweDAyLCAweDEwLCAweDAxLCAweDQwLCAweDI3LCAweDIwLCAweDlELCAweDExLCAweDU0LCAweDNCLCAweDEwLCAweDRELAorMHg0MCwgMHgyNywgMHgyMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwRiwgMHhEMiwgMHgwQiwgMHg0MCwgMHgwNywgMHgwOCwgMHgxMSwKKzB4ODAsIDB4NzQsIDB4MDAsIDB4MTQsIDB4MDUsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDA1LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDIwLAorMHgwOCwgMHg4RCwgMHgwMCwgMHgzNSwgMHgwMiwgMHg1MCwgMHgwMCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgxNCwKKzB4MDIsIDB4MTAsIDB4MDgsIDB4NDQsIDB4MDMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NjAsCisweDIzLCAweDAwLCAweDgxLCAweDA0LCAweDM0LCAweDAzLCAweEQwLCAweDU4LCAweDQ4LCAweDIzLCAweDE1LCAweDgxLCAweDE0LAorMHgzNCwgMHgxMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4ODgsIDB4NjUsIDB4MTAsIDB4MUQsIDB4MDMsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsCisweDFELCAweDAxLCAweDU0LCAweDEyLCAweEQwLCAweDAwLCAweDQwLCAweDM1LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDA2LAorMHgxNCwgMHgxOSwgMHg0MCwgMHg0NywgMHgxNCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHgyNywKKzB4NDIsIDB4OTEsIDB4MjAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsCisweDA0LCAweDEwLCAweDA1LCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4OCwgMHg0NywgMHgwNCwgMHgxRiwgMHgwMSwgMHg0QywgMHg4RSwgMHhGMSwgMHgwRCwgMHhDOCwgMHg2NCwgMHgyMCwgMHgwRiwKKzB4NDMsIDB4N0QsIDB4MDcsIDB4NzAsIDB4NTUsIDB4QzAsIDB4MzUsIDB4NDAsIDB4QzMsIDB4MDAsIDB4NUMsIDB4MTQsIDB4MzAsCisweDU5LCAweEMwLCAweEU3LCAweDAwLCAweDhFLCAweDAwLCAweDVDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM3LCAweDIwLAorMHhEMSwgMHgyMCwgMHg3QywgMHgwMywgMHhGMiwgMHgxOSwgMHhDMiwgMHg0NywgMHgwMCwgMHgxMywgMHg4MSwgMHgzQywgMHgwMiwKKzB4MzQsIDB4MDEsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsCisweDJELCAweDA4LCAweDNGLCAweDAwLCAweEZDLCAweDQyLCAweEYwLCAweDBFLCAweEMwLCAweDJGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHg4NywgMHhDMCwgMHgzOCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHg0MiwgMHhGMCwgMHgwQiwKKzB4QzEsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDQsIDB4QkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4N0IsIDB4MjAsIDB4QkYsCisweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDA5LCAweEMwLCAweDRGLCAweDAyLCAweDNGLCAweDA5LCAweEZDLCAweDAyLCAweEYwLAorMHgwNywgMHhDMSwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgwNSwKKzB4MDAsIDB4MTMsIDB4MDIsIDB4NUQsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsCisweDgyLCAweDMwLCAweDI3LCAweEMwLCAweDM0LCAweDQ0LCAweEQzLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEM2LAorMHg4NywgMHgwNCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgyMCwKKzB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDEsCisweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLAorMHgwMSwgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgyRiwgMHhDNSwgMHgyNiwgMHgwMCwgMHg5QiwgMHgyMCwgMHg3NCwgMHgwMiwKKzB4QjAsIDB4NDUsIDB4NDAsIDB4N0MsIDB4NDAsIDB4RDEsIDB4MDEsIDB4NkMsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4ODcsCisweDAwLCAweDlELCAweDAwLCAweEM0LCAweDAzLCAweDEyLCAweDBELCAweDQwLCAweEI3LCAweDA2LCAweDkxLCAweDBBLCAweEM0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg1MCwgMHhFNCwgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwgMHg0MiwgMHgxMCwgMHgwNSwgMHg0MCwKKzB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4ODAsIDB4MDEsCisweDEyLCAweDA0LCAweDIwLCAweEQwLCAweDNDLCAweDQxLCAweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDI0LCAweDAzLCAweDEwLAorMHgwMCwgMHg0MCwgMHgzMCwgMHgyMCwgMHg4RCwgMHgxMywgMHgyNCwgMHgwOCwgMHg5MCwgMHgyMCwgMHg0MCwgMHg4MywgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4MDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MDQsIDB4MDMsCisweEMwLCAweDA4LCAweDQwLCAweDkwLCAweDE0LCAweDQxLCAweDEyLCAweDM0LCAweDg1LCAweDEwLCAweDA4LCAweDQwLCAweDFGLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHg2OCwgMHg0MCwgMHgyMSwgMHgwMSwKKzB4ODQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NUEsIDB4MDAsIDB4RTksIDB4MDEsIDB4RjQsIDB4MDcsIDB4OTAsIDB4MTAsCisweDU0LCAweDcwLCAweDI2LCAweEFELCAweDkxLCAweEE0LCAweDA1LCAweEQwLCAweDEyLCAweDA4LCAweDZCLCAweDAyLCAweEZELAorMHgwMSwgMHg4NCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhCNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwKKzB4OUEsIDB4NDAsIDB4NTgsIDB4MDIsIDB4NjEsIDB4ODEsIDB4RjQsIDB4MEQsIDB4MTIsIDB4OUUsIDB4NDAsIDB4MTMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDI0LCAweDAyLCAweDExLCAweDAwLCAweDFELAorMHgyMSwgMHhGMCwgMHgwQywgMHg0MCwgMHhCNCwgMHgwMCwgMHhDMywgMHgwMiwgMHgzQywgMHgwMywgMHgzMCwgMHg0MCwgMHhDMCwKKzB4MzAsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4ODQsIDB4QzAsIDB4MTMsIDB4OEEsIDB4Q0YsIDB4MDAsCisweDVDLCAweDAzLCAweDcwLCAweDBDLCAweEMwLCAweDI3LCAweDQwLCAweDgzLCAweDA4LCAweDBDLCAweDAzLCAweEYwLCAweDBDLAorMHhDMCwgMHgzNCwgMHgwMiwgMHhDMywgMHgwNCwgMHgzQywgMHgwMSwgMHgzMCwgMHgwOCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MkQsIDB4MDAsIDB4N0YsIDB4ODgsIDB4RkMsIDB4MDEsCisweEMwLCAweDBGLCAweEMxLCAweDFELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDAzLCAweEMwLCAweEJGLAorMHgwNiwgMHhGMywgMHgwOCwgMHhGQywgMHgyMSwgMHhGMCwgMHg4RiwgMHhDOCwgMHgzRiwgMHhBMiwgMHhGRiwgMHgwOCwgMHhGQywKKzB4MjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDIsIDB4QkIsIDB4MjAsIDB4RkQsIDB4NDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDNGLCAweDAyLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBGLCAweEMyLCAweDBCLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyRiwgMHgwMCwgMHgwRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwKKzB4NEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjgsIDB4MDEsIDB4QzAsIDB4QjYsIDB4NDAsCisweEQzLCAweDAxLCAweDdDLCAweDgxLCAweEYyLCAweDA1LCAweEM4LCAweDc3LCAweDAwLCAweDkzLCAweDAwLCAweDZDLCAweDIzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyOSwgMHhDMCwgMHg1NCwKKzB4MDAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDg4LCAweDI5LCAweDAwLCAweDJELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLAorMHg0MSwgMHgzQiwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwMywgMHg1MCwgMHgzOCwgMHgwMSwgMHhFMSwKKzB4MDAsIDB4ODQsIDB4MDMsIDB4RDEsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4QTEsIDB4MDAsIDB4OTQsIDB4ODMsIDB4MTAsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEExLCAweDAwLCAweEI2LCAweDEzLCAweEQwLCAweDhBLCAweDQwLCAweDE5LCAweDAwLAorMHg2MSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMiwgMHgwRSwgMHg0MCwgMHg0OCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjksIDB4MDAsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MEYsIDB4RDEsIDB4NUUsIDB4NDAsCisweDdCLCAweDAwLCAweEVELCAweDgxLCAweEI0LCAweDA3LCAweEQyLCAweDEyLCAweDQwLCAweDcxLCAweDAwLCAweEUxLCAweDExLAorMHg5NCwgMHgwNywgMHhEMCwgMHgxNiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhCOSwgMHg0MywgMHgyNCwgMHgwNywgMHg1MCwgMHgxRSwKKzB4NDAsIDB4NzMsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4MUMsIDB4NDEsIDB4NzgsIDB4MDAsIDB4RTEsCisweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFBLCAweDQwLCAweDBFLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgyOCwgMHg3MywgMHgxMCwgMHhDRCwgMHg0MCwgMHgwNCwgMHgwRiwgMHhEMCwgMHgwQywgMHg0MCwgMHhCMywKKzB4MDAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NjksIDB4NDAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDYsCisweDI3LCAweEQwLCAweDlELCAweDQwLCAweDMzLCAweDAwLCAweDk5LCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDBELCAweDQwLAorMHg3NywgMHgwMiwgMHg4OSwgMHgwOCwgMHgzNCwgMHgwMywgMHhEMCwgMHg2RCwgMHg0MiwgMHgzMSwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NTAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEE4LCAweDVELCAweDAxLCAweDdGLCAweDAyLCAweENELCAweDA1LCAweEYwLCAweDA1LCAweEMwLCAweDVGLCAweDA0LAorMHg3RCwgMHgwQiwgMHg3QywgMHg4MSwgMHhGMCwgMHgzNywgMHhDMCwgMHgxNSwgMHgwMCwgMHg1MywgMHgwMCwgMHhEQywgMHgwOSwKKzB4RjAsIDB4QTcsIDB4QzAsIDB4MUYsIDB4NDEsIDB4NUIsIDB4MDAsIDB4NkMsIDB4MDEsIDB4MzQsIDB4MDUsIDB4QzAsIDB4MTcsCisweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDM3LCAweEUwLCAweDE0LCAweDQwLCAweDUzLCAweDAwLCAweDRELAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1RSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MDAsIDB4MUYsCisweDBBLCAweDdDLCAweDAwLCAweEY4LCAweDgxLCAweDQwLCAweDA0LCAweDEwLCAweDFGLCAweDAyLCAweDVDLCAweDQ4LCAweEY4LAorMHgyMSwgMHhDMiwgMHgwNywgMHgwMSwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHhDMCwgMHg4NywgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDQsCisweEYwLCAweDAxLCAweEM4LCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LAorMHgyMywgMHgwMCwgMHg5QiwgMHgwMCwgMHg0RSwgMHg2MiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwNCwgMHg4NywgMHgwNCwKKzB4NEMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjQsIDB4MTAsIDB4OTMsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksCisweEMwLCAweDI0LCAweDAwLCAweDlFLCAweDgwLCAweDJDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDY0LCAweDA4LCAweDkzLAorMHgwNSwgMHg3OCwgMHgwNiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHgzMCwKKzB4MzksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsCisweDAwLCAweDgxLCAweDA0LCAweDQ0LCAweDBBLCAweEQwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDEwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHg0MCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgxNiwgMHhEMCwgMHgxOSwgMHg0MCwKKzB4QTQsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NEMsIDB4ODIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDEsIDB4OTEsIDB4MDEsCisweDc0LCAweDA2LCAweEQyLCAweDA5LCAweDQwLCAweEE0LCAweDIwLCAweDlELCAweDAzLCAweDQ0LCAweDAyLCAweDEyLCAweDA4LAorMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwOCwKKzB4OTksIDB4MDAsIDB4NDQsIDB4OEEsIDB4RDAsIDB4NjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4ODIsCisweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAyLCAweDk5LCAweDIxLCAweDU2LCAweDEyLCAweDkwLCAweDY5LCAweDQyLCAweDI0LAorMHg4NiwgMHg5RCwgMHgwMCwgMHg2NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHg5MSwgMHgwMCwgMHg3NCwKKzB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4QkQsIDB4MDQsIDB4QzQsIDB4MDIsIDB4MUMsIDB4MEYsIDB4NDAsCisweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAxLCAweDkxLAorMHgwMCwgMHgwNCwgMHg4MiwgMHhEMCwgMHg2OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhEMiwKKzB4NDgsIDB4NDAsIDB4MzAsIDB4MDEsIDB4QzksIDB4MDAsIDB4MzQsIDB4MUEsIDB4RDgsIDB4MDgsIDB4NDEsIDB4MjAsIDB4ODAsCisweDhELCAweDAwLCAweDA0LCAweDIyLCAweDEwLCAweDA4LCAweDUwLCAweDIwLCAweDAxLCAweDgxLCAweDAwLCAweDM0LCAweDEyLAorMHhEMCwgMHg0OCwgMHg0MCwgMHg2OSwgMHgwMCwgMHhBRCwgMHgwMSwgMHg4NCwgMHgwNiwgMHgwMCwgMHgwQiwgMHg0MCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MjIsIDB4MUIsIDB4MEEsCisweDQ1LCAweDE4LCAweEYwLCAweDIxLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDA2LCAweDRDLCAweDAwLCAweEYwLCAweEExLAorMHg1MCwgMHg4NCwgMHgwMiwgMHgxQiwgMHgwMCwgMHg1QywgMHgwOCwgMHhCMCwgMHg2MSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxRiwKKzB4MEEsIDB4NkMsIDB4NTgsIDB4NzEsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsCisweEExLCAweEMwLCAweDgzLCAweDAyLCAweDBGLCAweDRBLCAweDRDLCAweDI4LCAweDMwLCAweEEyLCAweEQwLCAweDc0LCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgxMiwgMHhCRiwgMHgwMCwgMHhGQywKKzB4NUEsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4NDYsIDB4RkQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsCisweDI3LCAweDIyLCAweEE3LCAweDIwLCAweEZDLCAweDBBLCAweEYwLCAweDRCLCAweEMzLCAweDJGLCAweDI3LCAweEFGLCAweDAwLAorMHg1QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyRiwgMHgwMiwgMHhCRCwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4QiwKKzB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDI3LCAweDA1LCAweEJGLCAweDA4LCAweEVDLCAweDAyLAorMHgzMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwNCwgMHg3QywgMHgwMiwgMHgzMCwgMHhDQSwgMHhDMCwgMHgyQywKKzB4MDAsIDB4ODMsIDB4NDAsIDB4RDAsIDB4MjIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MkYsIDB4MDUsIDB4OEYsIDB4ODgsIDB4NUMsCisweDgyLCAweEIwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDAwLCAweEZDLCAweDE2LCAweEYwLCAweDQ5LCAweEQwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgyMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDMsIDB4MDEsIDB4NUQsIDB4MDQsIDB4NDQsIDB4NDgsIDB4MTQsCisweDAxLCAweDQ5LCAweDA0LCAweDAyLCAweDE3LCAweDE0LCAweDc0LCAweDAwLCAweDE0LCAweEMxLCAweDQ0LCAweDgwLCAweDA0LAorMHgxMSwgMHgwMCwgMHg0NCwgMHgyMCwgMHhEMiwgMHg0MSwgMHg0OSwgMHgwNywgMHgyMSwgMHgxRCwgMHgwNCwgMHg0NCwgMHg0OCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDIsIDB4ODEsIDB4NDAsIDB4MTYsCisweDA0LCAweDVELCAweDkwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDcxLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHgyMywgMHgwNSwgMHg4RCwgMHgwNCwgMHgwNSwgMHgzMiwgMHgxMCwgMHg4OCwKKzB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4OEQsIDB4NzQsIDB4MDIsIDB4MTEsIDB4NTgsIDB4NDAsIDB4MjAsIDB4NDMsIDB4ODEsCisweDQwLCAweDE2LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIzLCAweDA1LCAweDhELCAweDI0LCAweDE0LCAweDMyLCAweDkwLAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwQSwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMSwKKzB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDA0LCAweDQ0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLAorMHhBNCwgMHgwMSwgMHg5NSwgMHg0MCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MiwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwKKzB4NDYsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDIwLCAweDc0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDI0LCAweDAwLCAweDhELAorMHgyMCwgMHg0NSwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHg2MSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MzAsIDB4MDksIDB4RDAsIDB4MjQsCisweDAwLCAweDlGLCAweDAxLCAweDNDLCAweDAyLCAweDMwLCAweDA5LCAweEYwLCAweDI0LCAweDAwLCAweDgzLCAweDAxLCAweDVDLAorMHgxQSwgMHhEMiwgMHgzOSwgMHhDNSwgMHgyNywgMHgyNCwgMHg5RSwgMHgwMCwgMHg1RSwgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwKKzB4NjcsIDB4NDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MDIsCisweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDE0LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNiwgMHg4MCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgwMCwgMHgxQywgMHgyNiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHgwMCwKKzB4OTcsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4ODIsIDB4N0MsIDB4QzIsCisweEYwLCAweDQ5LCAweEMwLCAweEU3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEU3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywKKzB4NDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDQ4LCAweEYwLCAweDAxLCAweEQzLCAweDA0LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0QywgMHgwOCwgMHhGMywKKzB4MjEsIDB4QzUsIDB4QzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFCLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg0LCAweDQxLCAweDEzLCAweDAyLCAweDRELCAweDAwLAorMHhGMCwgMHg0MSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwKKzB4MTQsIDB4MDAsIDB4NzEsIDB4MDcsIDB4QzUsIDB4MEQsIDB4NzAsIDB4MTcsIDB4NDAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDQsCisweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQyLCAweDU4LCAweDAwLCAweDUxLCAweDAwLCAweEQ0LCAweDA5LCAweEQwLCAweDI3LAorMHg0MCwgMHgxRiwgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMSwgMHg3OCwgMHgwNSwgMHg0MCwgMHg1RiwgMHgwMCwgMHg3MSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4MUUsIDB4MDAsIDB4NzEsIDB4MTEsIDB4ODQsIDB4MDUsIDB4RDIsCisweDI3LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLAorMHgwMCwgMHg5MSwgMHgwNywgMHgyNCwgMHgyRiwgMHg1MCwgMHgxQywgMHg0MCwgMHgzMCwgMHg4MCwgMHg0RCwgMHgxMSwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzIsIDB4MTAsIDB4QzksIDB4MDYsIDB4MDQsIDB4MDcsIDB4RDAsIDB4M0MsIDB4NDAsCisweDMzLCAweDgwLCAweERELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDM3LCAweDg2LCAweDhELCAweDAwLAorMHgzNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgyRiwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4NzgsIDB4MDAsCisweDIxLCAweDI0LCAweDg0LCAweDAzLCAweDUwLCAweDBFLCAweDQxLCAweDM4LCAweDAyLCAweDZELCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwQiwgMHg1MCwgMHgyOCwgMHgwNSwgMHg2OSwgMHgxMCwgMHhCNCwgMHgwOSwgMHhEMCwgMHgyRSwgMHg0MiwgMHgzQiwKKzB4MDQsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTEsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4MjUsIDB4MDAsIDB4QjQsCisweDAyLCAweEQyLCAweDRGLCAweDY0LCAweDdBLCAweDIwLCAweEUxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBBLCAweDYwLAorMHgxNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHgyMywKKzB4MDcsIDB4QUQsIDB4MDUsIDB4NzAsIDB4MTQsIDB4QzAsIDB4NzgsIDB4MDEsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsCisweDlFLCAweEMwLCAweDY4LCAweDQxLCAweEE5LCAweDA5LCAweDhDLCAweDA3LCAweEYzLCAweDFFLCAweEMwLCAweDdCLCAweDEwLAorMHhFRiwgMHgwMSwgMHg5NCwgMHgxNywgMHg3MCwgMHgzRSwgMHg4MCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywKKzB4RjAsIDB4NUUsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NTcsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweEI1LCAweDQyLCAweDBGLCAweDAwLAorMHg3QywgMHgwMSwgMHg3MiwgMHgwNSwgMHhDMCwgMHg3NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHg0OSwKKzB4RDAsIDB4MDcsIDB4MEEsIDB4MTcsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDA2LCAweDdDLCAweDAzLCAweDcwLCAweDFELCAweEMwLCAweDI3LCAweDQwLCAweDVCLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgxQywgMHhDMCwgMHgyNywgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4RkYsIDB4MDAsIDB4QjMsIDB4MDEsIDB4Q0MsCisweDIzLCAweEYwLCAweDVGLCAweEMyLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHg2QywgMHgwMCwgMHhGQiwgMHg0MSwgMHhDOCwgMHgyNywgMHgzMCwgMHgxNywgMHhDMCwgMHg1RiwgMHgyMCwgMHhGRiwgMHgxMywKKzB4REMsIDB4NDcsIDB4QjAsIDB4MUYsIDB4QzgsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDEsIDB4REMsIDB4MDYsIDB4MzAsIDB4MUYsCisweEQxLCAweDdDLCAweDAwLCAweEZGLCAweDgxLCAweEZDLCAweDg3LCAweEYwLCAweDFCLCAweEMwLCAweDAzLCAweDA4LCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzRCwgMHgwMCwgMHhBMSwgMHgwQSwgMHg4NCwgMHgwOSwKKzB4NzAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDQsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsIDB4MjgsCisweDEwLCAweDYxLCAweDA0LCAweEM0LCAweDIzLCAweDEwLCAweDg2LCAweDQwLCAweDNCLCAweDBBLCAweEVELCAweDAwLCAweEM0LAorMHgwMywgMHhCMiwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHhCMCwgMHgwRSwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4QUQsIDB4ODgsIDB4QjQsIDB4MjIsIDB4RDAsIDB4MDIsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDM5LCAweDAwLCAweDMxLCAweDAwLCAweDg0LCAweDIzLCAweEQ4LAorMHg0NiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHhGNCwgMHgwMywgMHg5MCwgMHgyRSwgMHg0MCwgMHgyMCwgMHgwMCwKKzB4QTEsIDB4MjAsIDB4ODYsIDB4MjIsIDB4OTgsIDB4MkEsIDB4NDAsIDB4OEIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsCisweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDIzLCAweDEwLCAweDBDLCAweDQwLCAweDE4LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MSwgMHgwMywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4MzMsIDB4MDQsIDB4MDEsIDB4MDMsIDB4NDUsIDB4MDAsIDB4NTAsIDB4MDEsCisweDQwLCAweEYzLCAweDAwLCAweDlELCAweDQwLCAweDM2LCAweDgzLCAweDkwLCAweDBDLCAweDQwLCAweDA0LCAweDAwLCAweDAxLAorMHgyMCwgMHgwNiwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0NCwgMHgyMywgMHgwOCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MDIsIDB4NEQsIDB4MDgsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MUMsIDB4NDAsIDB4MjAsIDB4MDAsCisweENELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDE0LCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhCRCwgMHg0MCwgMHg3MywgMHgxMSwgMHg0QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4M0YsIDB4MTAsIDB4NUYsIDB4MDMsIDB4NzQsIDB4ODMsIDB4QjQsIDB4MDksIDB4NDAsIDB4MkMsIDB4MDAsIDB4RDMsIDB4MDAsCisweDRDLCAweDFBLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDAzLCAweDMwLCAweDBGLAorMHg0MCwgMHgyNywgMHgwMCwgMHg1RiwgMHgwMCwgMHgxQywgMHgwMiwgMHgzMCwgMHhCRiwgMHhDMSwgMHgzNCwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MTQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDc3LCAweDAwLCAweDVGLCAweDA2LCAweDdDLCAweDYyLCAweEYwLCAweDA5LCAweEMwLCAweDM3LAorMHgwMSwgMHg1RiwgMHgwMSwgMHg3QywgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhENywgMHgwMiwgMHg3RCwKKzB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MEQsIDB4QzQsCisweDI3LCAweDAwLCAweDVGLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEUwLCAweDM3LCAweDAwLCAweERGLCAweDAyLAorMHg3QywgMHgwQiwgMHhGMSwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4M0YsIDB4MDAsIDB4NzMsIDB4MDgsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MEIsIDB4QzIsIDB4MzgsIDB4MDAsCisweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMxLCAweDFCLCAweEMwLCAweDJFLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDQwLAorMHhGMCwgMHgwQSwgMHhDNCwgMHgwOCwgMHgwMCwgMHhGMywgMHgwMCwgMHhCQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4N0YsIDB4MDEsIDB4NEMsIDB4MDYsIDB4MzAsIDB4MEUsIDB4QzgsIDB4M0MsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAzLCAweDMwLCAweDgzLCAweEMwLCAweDAwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgzNiwgMHgwMCwgMHg1MSwgMHgwMCwgMHg0NSwgMHgwQywgMHgxMSwgMHgzOSwgMHg0MSwgMHgzNCwgMHgwMCwgMHhEMSwKKzB4MDEsIDB4MkMsIDB4MDMsIDB4NTAsIDB4MDksIDB4NDAsIDB4NDQsIDB4MDAsIDB4QzEsIDB4MDIsIDB4N0MsIDB4MEMsIDB4RDAsCisweDMxLCAweEMwLCAweDQ2LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweEMwLCAweDY1LCAweDAwLAorMHg1RCwgMHgwMiwgMHg2QywgMHgwNiwgMHgxNCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwNCwgMHg3MCwgMHgwNywKKzB4MTAsIDB4MDksIDB4NDAsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTgsCisweDMwLCAweDQwLCAweDAxLCAweDAwLCAweDY0LCAweDA2LCAweDkwLCAweDExLCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAxLAorMHg0NCwgMHgwMywgMHgxOCwgMHg4OCwgMHg0MCwgMHgyNCwgMHgwMSwgMHhEMSwgMHgxNCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgxMSwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MDQsIDB4NDksCisweDA2LCAweDQ0LCAweDIyLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDIyLCAweERELCAweDQwLCAweDc0LCAweDBGLCAweDEwLAorMHgwRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NTYsIDB4MzAsIDB4NDAsIDB4QzEsIDB4MDAsIDB4NDUsCisweDAzLCAweDUwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLAorMHg2MCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHg0RCwgMHgwMCwKKzB4MjQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDgsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDUsCisweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNFLCAweDEwLAorMHgxMywgMHgwMCwgMHg0RCwgMHgwMiwgMHhCMCwgMHgwMSwgMHg0MiwgMHgzNCwgMHgwMCwgMHg5MywgMHgyMCwgMHg0NiwgMHgwMywKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MjYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RjEsIDB4MDksIDB4NDAsIDB4MDQsCisweDQwLCAweEUzLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLAorMHgwMiwgMHgzMCwgMHgwRCwgMHg5MCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwOSwgMHhEMCwKKzB4MDAsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OTgsIDB4M0YsIDB4MDAsIDB4MkYsCisweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDBCLCAweEM0LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLAorMHgwQiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMiwgMHgwRiwgMHgwMCwKKzB4RkYsIDB4MjAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDIsCisweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDA4LCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDE3LAorMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHhGRiwgMHgwMCwgMHhGRiwgMHgwOSwKKzB4RkMsIDB4MzIsIDB4RjAsIDB4NEYsIDB4RTEsIDB4MkQsIDB4MjEsIDB4RkYsIDB4MDksIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDFDLCAweENDLCAweDUyLCAweEYwLCAweDRGLCAweEMwLCAweDdDLCAweDgwLCAweEZGLAorMHgwMCwgMHhDQywgMHgxMywgMHhCMCwgMHgwRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHg4NCwgMHhCQywgMHgwNSwgMHgzMCwKKzB4MUYsIDB4QzAsIDB4N0MsIDB4NDAsIDB4RkIsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweENELCAweDAwLCAweDc0LAorMHgzQSwgMHhEMCwgMHgzRiwgMHg0MCwgMHhBNywgMHgwMywgMHhERCwgMHgwNCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgyRiwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4RkQsIDB4MDYsIDB4NDQsIDB4MUEsIDB4RDAsIDB4QkYsIDB4NDYsIDB4NzQsIDB4MDAsIDB4RkQsIDB4MDYsCisweEM0LCAweDNCLCAweDM0LCAweEFGLCAweDQwLCAweDc0LCAweDAwLCAweEZDLCAweDAyLCAweDc0LCAweDA1LCAweDEwLCAweDFELAorMHg0MCwgMHg3NCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg1NCwgMHgwMywgMHg1MiwgMHgwMSwgMHg0MCwgMHgwRCwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsCisweEQwLCAweDBDLCAweDQwLCAweDAzLCAweDA0LCAweENELCAweDA0LCAweDM0LCAweDAyLCAweEQwLCAweDhDLCAweDQwLCAweDMyLAorMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHg0MCwgMHhEMSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgxOCwgMHgwNCwKKzB4NDMsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDIsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsCisweDMxLCAweDAwLCAweDQ5LCAweDgwLCAweDA0LCAweDAxLCAweDgwLCAweDA4LCAweDYwLCAweDRDLCAweDgwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwQywgMHhEMCwKKzB4MEQsIDB4NDAsIDB4NDcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsCisweERELCAweDAwLCAweDQ1LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweDM0LCAweDEwLCAweERELCAweDAwLCAweDQ0LCAweDAzLAorMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgxNCwgMHhERCwgMHgwMCwgMHg3NCwgMHgyMSwgMHgxMCwgMHgwRCwgMHg2MCwgMHg3NCwKKzB4OTAsIDB4MTEsIDB4MDAsIDB4NTYsIDB4MDEsIDB4MDksIDB4MzEsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBDLCAweEYwLCAweDBELAorMHhDMCwgMHg2NywgMHgwNCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNCwgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhERiwKKzB4MjAsIDB4NEMsIDB4MUUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDgxLCAweDMxLCAweDJDLCAweEMwLCAweEYwLCAweDA0LAorMHhEQiwgMHgwMCwgMHg0QywgMHgxNiwgMHhBMCwgMHgzMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzIsCisweDJGLCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBGLCAweEQwLCAweDM1LCAweDAwLCAweERGLCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHg0MywgMHhGMCwgMHgwRiwKKzB4QzQsIDB4M0YsIDB4MDIsIDB4RkQsIDB4MDAsIDB4RjgsIDB4MDEsIDB4RjQsIDB4MkYsIDB4NDAsIDB4M0YsIDB4NDAsIDB4RkYsCisweDAwLCAweEZDLCAweDY3LCAweEYwLCAweDAyLCAweEMyLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHg4MCwgMHhERiwgMHgwMCwgMHg1QywgMHgwOCwgMHgzMCwgMHgwRCwgMHhDMCwgMHhBNCwKKzB4MDgsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4MzAsIDB4NUMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4NDAsIDB4NEMsCisweDQ4LCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDNDLCAweDgzLCAweEYwLCAweDBDLCAweEMwLAorMHgzNCwgMHgwNCwgMHhENywgMHg5MSwgMHg0QywgMHgxMywgMHg3NCwgMHgwRCwgMHhDNSwgMHgzNSwgMHgwMCwgMHhERiwgMHg4NCwKKzB4NEMsIDB4MDUsIDB4RTAsIDB4MjksIDB4ODEsIDB4MDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDA0LCAweDEwLCAweDBGLCAweDQwLCAweEU0LCAweDAyLAorMHhERCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhCMCwgMHgyRiwgMHg0MCwgMHgzRCwgMHgwMCwgMHhGMSwgMHgwMSwgMHg0NCwgMHgxNiwKKzB4RDAsIDB4MEYsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RjcsIDB4MDQsIDB4RjQsIDB4NEIsIDB4RDAsIDB4QUYsIDB4NDAsIDB4QjUsCisweDAwLCAweEYwLCAweDAyLCAweDA0LCAweDE1LCAweDEwLCAweDNELCAweDQ0LCAweDM0LCAweDEwLCAweEM5LCAweDgwLCAweDQ0LAorMHg4NSwgMHg5MCwgMHgzMSwgMHg0MSwgMHg2RCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4MjAsIDB4MzAsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4NEUsIDB4MTEsIDB4MEMsIDB4NDQsIDB4NDAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDJDLCAweDQwLCAweDMwLCAweDA4LCAweEMxLCAweDA0LCAweDI0LCAweDA0LCAweEQwLAorMHgwQywgMHg1MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwNywgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHhEMCwgMHgwMCwKKzB4QzUsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTAsIDB4MTQsIDB4NDAsIDB4ODMsIDB4NDEsIDB4QzEsIDB4MDIsIDB4NjQsIDB4MDAsCisweEQwLCAweDE4LCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NSwgMHgwNywgMHgxNCwgMHgxQywgMHg1MCwgMHg3OCwgMHgwNCwgMHhFRCwgMHgwMSwKKzB4ODUsIDB4MDYsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4ODAsIDB4RTEsIDB4MTEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MUMsCisweDQwLCAweDdDLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDU5LCAweDA2LCAweEU1LAorMHgwMSwgMHg4NCwgMHgwNSwgMHgxMCwgMHg5RSwgMHg0MCwgMHg3QSwgMHgwNywgMHhBMSwgMHgwMSwgMHhBNCwgMHgwNiwgMHg5MSwKKzB4MUEsIDB4NDAsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MTgsIDB4MzAsCisweDAwLCAweENELCAweDAwLCAweDFDLCAweDQzLCAweDMwLCAweDBDLCAweEMwLCAweDEwLCAweDAwLCAweERGLCAweDAwLCAweDA0LAorMHgwMywgMHgxMCwgMHgwRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgyQywgMHgyMSwgMHhGMCwgMHgwQywgMHhDMCwKKzB4MzYsIDB4MDIsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjIsIDB4MEQsIDB4RTAsIDB4MjAsIDB4MDAsIDB4RDcsIDB4MDAsCisweDBDLCAweDMzLCAweDMwLCAweDhDLCAweEMxLCAweDIzLCAweDAzLCAweDRCLCAweDIwLCAweDJDLCAweDIwLCAweEYwLCAweDA5LAorMHhDMCwgMHg0QiwgMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgzRCwgMHgxMCwKKzB4RkYsIDB4NDgsIDB4RkMsIDB4MjMsIDB4RjgsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsCisweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDEwLCAweEZGLCAweDAyLCAweDVELCAweDIxLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHhGNywgMHgxMCwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMSwgMHgyQSwgMHgwMCwgMHhGQiwgMHgwMiwgMHg3QywKKzB4MjEsIDB4RjIsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4MkYsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjIsIDB4OEIsIDB4QzQsCisweDA5LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDgwLCAweERGLAorMHgwMCwgMHg3RSwgMHgwMSwgMHgzMCwgMHg0RCwgMHhDMSwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4QUQsIDB4RDAsIDB4MzQsIDB4MDEsIDB4REYsIDB4MDIsIDB4NUMsIDB4MDMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDA0LCAweDdDLCAweDFCLCAweEY4LCAweDZELCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDBFLCAweDdDLCAweDAxLAorMHhGMCwgMHgxRCwgMHhDMCwgMHgyMiwgMHg0MCwgMHhDQiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgxMSwgMHg0MCwgMHg0MCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsCisweEY0LCAweDAzLCAweDEwLCAweDRFLCAweDQwLCAweDNCLCAweDAwLCAweEVDLCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDhFLAorMHg0MCwgMHhCOCwgMHgwNSwgMHhGRCwgMHgwNCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwKKzB4MEMsIDB4QjQsIDB4NTMsIDB4NzAsIDB4Q0UsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsCisweDBFLCAweDQwLCAweDI4LCAweDAwLCAweEVCLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDA2LCAweDQwLCAweDRDLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFNSwgMHgwMSwgMHhCNCwKKzB4ODcsIDB4OTIsIDB4REUsIDB4NDIsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4NUMsIDB4NDAsCisweDc4LCAweDAwLCAweEZELCAweDRELCAweDk0LCAweDA3LCAweEQwLCAweDVFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDA1LAorMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0NCwgMHg3RiwgMHgwMCwgMHhFMSwgMHgwNSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwKKzB4NDEsIDB4NkUsIDB4ODAsIDB4RjksIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NjAsIDB4MTAsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDQzLAorMHg5NCwgMHgwQywgMHg0MCwgMHhGMywgMHgwMSwgMHhDRCwgMHgwMCwgMHgzNiwgMHgzRiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwKKzB4MTAsIDB4REQsIDB4MDAsIDB4MDQsIDB4NDcsIDB4OTAsIDB4MEMsIDB4NDIsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDAzLCAweDUyLCAweDBDLCAweDQwLCAweEIzLCAweDAyLCAweEM1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDRDLCAweDQ2LAorMHg2MCwgMHhBMiwgMHhDOSwgMHgwOSwgMHg0NCwgMHgwMywgMHhDMCwgMHgxQywgMHg0MCwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTUsIDB4MDgsIDB4NUYsIDB4MDAsIDB4RjQsIDB4MTUsIDB4QjAsCisweDA1LCAweEMwLCAweDlGLCAweDAxLCAweDVGLCAweDAwLCAweEZDLCAweDAxLCAweEYyLCAweDA1LCAweEMwLCAweDE0LCAweDA4LAorMHg1RiwgMHgwMCwgMHhEQywgMHgxOSwgMHhGMywgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwKKzB4RjAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4NTMsIDB4MDAsIDB4RkMsIDB4MTUsIDB4RjAsIDB4MDcsIDB4Q0MsIDB4OUEsCisweDIwLCAweDZCLCAweDAyLCAweENELCAweDA5LCAweEYwLCAweDM3LCAweEQwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwQSwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsCisweDQwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLAorMHgyMSwgMHhDMCwgMHg4NywgMHgwMSwgMHgxRiwgMHgwMiwgMHg3RSwgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNCwKKzB4MUYsIDB4MTAsIDB4N0MsIDB4NDgsIDB4QjAsIDB4RTEsIDB4QzgsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDgwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHhBNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHg4MCwgMHg5RiwgMHgwOCwKKzB4MEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MEUsIDB4MzAsIDB4MDgsCisweEMwLCAweDI0LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDg2LCAweDcyLCAweDI5LCAweENBLCAweEE3LCAweDA4LCAweDk3LAorMHgwNSwgMHg1QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjQsIDB4MDgsIDB4OUQsIDB4MjAsIDB4NDQsIDB4MzYsIDB4MDQsIDB4MDksIDB4NDQsIDB4RTcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDI1LCAweDkwLCAweDlDLCAweDAxLCAweDQ0LAorMHgwQSwgMHgxNCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMywgMHg0NSwgMHgwQSwgMHhBNCwgMHgwOSwgMHg1MSwKKzB4QTAsIDB4MDAsIDB4OTAsIDB4MTIsIDB4MzQsIDB4MjYsIDB4MTAsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTksIDB4MDAsCisweDZDLCAweDhBLCAweDUwLCAweDE5LCAweDQxLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NSwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NDAsIDB4MDIsIDB4RDAsIDB4MDksIDB4MDAsIDB4MjQsIDB4MjAsIDB4OUMsIDB4MTAsIDB4NDQsIDB4MjIsCisweDEwLCAweDA5LCAweDQ0LCAweDI1LCAweDAwLCAweDlELCAweDE0LCAweDQ0LCAweDQyLCAweDkwLCAweDE5LCAweDQwLCAweDI0LAorMHgwNCwgMHg5NSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg0MCwgMHgwRCwgMHg0MSwgMHgyNiwgMHgwMCwgMHg5RCwgMHg0MiwgMHg1NCwKKzB4MTIsIDB4MTAsIDB4NDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDIwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDEyLCAweDExLCAweDQ4LCAweDQwLCAweDMzLCAweDAxLCAweDhELAorMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0RCwgMHg0QywgMHgyMSwgMHgxMSwgMHg4RCwgMHgwNCwgMHgwNCwgMHgxMywgMHgxMCwKKzB4NDgsIDB4NjAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MTIsIDB4OTAsIDB4NDgsIDB4NDQsIDB4MjQsIDB4MDAsCisweDgxLCAweDg0LCAweDc2LCAweDAyLCAweDFBLCAweDA4LCAweDQwLCAweDIzLCAweDg4LCAweDg5LCAweDgwLCAweDI0LCAweDAyLAorMHg1MCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzOCwKKzB4ODYsIDB4MEEsIDB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MEEsCisweDdDLCAweDAwLCAweEYwLCAweEExLCAweEMwLCAweDA0LCAweDAwLCAweDFELCAweDBBLCAweDRELCAweDI4LCAweDMyLCAweDAxLAorMHhDNCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgxNywKKzB4NEEsIDB4NUMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NUMsIDB4MjksIDB4MzAsCisweEExLCAweEMwLCAweDc3LCAweDgwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIyLCAweDI1LAorMHgwMCwgMHg5RiwgMHg0MCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMiwgMHg5RiwgMHgwMCwgMHhGQywKKzB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4NDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzIsCisweDI3LCAweDAwLCAweDlGLCAweDA4LCAweDdDLCAweDIyLCAweDcwLCAweDg5LCAweEMwLCAweDNCLCAweDAwLCAweDlGLCAweDA4LAorMHhGQywgMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCNywgMHg4MCwgMHhEQywgMHgwMiwgMHhGMSwgMHg4RiwKKzB4QzAsIDB4NzcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4ODAsIDB4MjcsIDB4MDAsCisweDlGLCAweDA4LCAweEZDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDJDLCAweDAyLCAweDkzLCAweDAwLCAweDdDLCAweDUyLAorMHhGMCwgMHhDQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHhCMCwgMHg0OSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4QkYsIDB4MEMsIDB4RkMsIDB4MDIsIDB4RTAsIDB4MEIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QjMsIDB4MDQsIDB4REMsCisweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJBLCAweDQwLCAweEIzLCAweDAwLCAweEJDLCAweDAzLCAweDMwLCAweDBCLCAweEMwLAorMHg3NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgxRCwKKzB4MDQsIDB4NzQsIDB4NDksIDB4MTAsIDB4MDEsIDB4NDQsIDB4MTQsIDB4NDIsIDB4MDEsIDB4MTQsIDB4NzQsIDB4MDAsIDB4RDAsCisweEMxLCAweDRDLCAweDg3LCAweDEwLCAweDFELCAweDUwLCAweDc0LCAweDIwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLAorMHgxRCwgMHgwQywgMHg3NCwgMHg0OCwgMHhEMCwgMHgwMSwgMHg0NSwgMHgwNywgMHgwMCwgMHgxMSwgMHgxNCwgMHg3NCwgMHgwMCwKKzB4RDAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NjMsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDhELCAweDA0LAorMHgzNCwgMHhCMiwgMHgxNCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNiwgMHgwMiwgMHhEMCwgMHg0OCwKKzB4NDgsIDB4MjMsIDB4ODIsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4MTQsIDB4ODgsIDB4NjAsIDB4MjMsIDB4MDAsIDB4OEQsCisweDA0LCAweDM0LCAweDMyLCAweEQwLCAweDg4LCAweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDBDLCAweDM2LCAweDAyLCAweDUyLAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHg0QiwgMHg4MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDEyLCAweDEwLCAweDA5LCAweDUwLCAweDI0LCAweDAxLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDA0LCAweDkxLCAweDAyLCAweDcwLCAweDEyLCAweDE5LCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3OCwgMHgwNiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NEUsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIyLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHg2NywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHg0MiwgMHhCMCwgMHhCOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NDYsIDB4MzQsIDB4MTksIDB4QzAsIDB4MTcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDA2LCAweEYwLAorMHgwOCwgMHhDMCwgMHg2NywgMHgwMCwgMHg5QywgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDAyLCAweDlGLCAweEIwLCAweDdDLCAweDQyLCAweEYwLCAweDE5LCAweDAyLCAweDI0LAorMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg5OSwgMHhDMSwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsCisweEMwLCAweEM3LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLAorMHgwMSwgMHg3QywgMHgzMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMSwgMHg1QywgMHgwNCwgMHhGMCwKKzB4MDEsIDB4QzgsIDB4ODYsIDB4MDksIDB4MTMsIDB4MDgsIDB4NkQsIDB4MDgsIDB4RTAsIDB4NDEsIDB4QzAsIDB4ODQsIDB4MDAsCisweDE3LCAweDQwLCAweDZDLCAweDEwLCAweDEwLCAweEExLCAweEMyLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHg4MCwgMHhGNCwgMHgxRCwgMHg3MCwgMHgwNSwgMHg0MCwKKzB4NUYsIDB4MjAsIDB4NUQsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MTAsIDB4MjcsIDB4NDAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDAsCisweEY0LCAweDBELCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDdELCAweDAxLCAweEM0LCAweDA1LCAweDcwLCAweDI3LAorMHg0MCwgMHgxOCwgMHgwMCwgMHg3MSwgMHg4MiwgMHhDNCwgMHgxOSwgMHhEMCwgMHgxNiwgMHg0MSwgMHgxOCwgMHgwMSwgMHg3MSwKKzB4MUIsIDB4RTQsIDB4NDUsIDB4MTAsIDB4MDcsIDB4NDAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDFGLCAweDU4LCAweDBDLCAweDQwLCAweDc3LAorMHgwMCwgMHhDOSwgMHgwMCwgMHgyNSwgMHgwMywgMHgxNCwgMHgyQywgMHg1MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMSwgMHg3NCwKKzB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MUMsIDB4NTAsCisweEIwLCAweDQyLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDJDLCAweDQwLCAweDUwLCAweDQwLCAweEM1LCAweDAyLAorMHg2NCwgMHgwNywgMHg5NCwgMHgxQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4ODAsIDB4MzgsIDB4MDIsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4NTgsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MEMsCisweEVELCAweDA1LCAweDA0LCAweDA3LCAweDEwLCAweDFFLCAweDQxLCAweDM4LCAweDAwLCAweDZELCAweDEwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMywgMHg4NCwgMHgwOSwgMHg1MCwgMHgzNiwgMHg0MCwgMHgzQywKKzB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MUMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4RTYsCisweDgyLCAweDkwLCAweDE2LCAweDQwLCAweDExLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgxOCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgxMSwgMHhCQywgMHgwNSwgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwKKzB4ODcsIDB4QUMsIDB4ODcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QkMsIDB4MDcsIDB4RjAsCisweDFFLCAweEMwLCAweDdCLCAweDAwLCAweENGLCAweDgxLCAweDlDLCAweDA3LCAweDc4LCAweDFGLCAweEMwLCAweDc4LCAweDAwLAorMHhDMywgMHg4MSwgMHg4QywgMHgwNywgMHhEQSwgMHgwQSwgMHhDNCwgMHg1OCwgMHgyMCwgMHhFNywgMHgyMSwgMHhBRSwgMHgwNywKKzB4QjEsIDB4MUIsIDB4QzQsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsCisweDM1LCAweDAxLCAweERGLCAweDA2LCAweDdFLCAweDAxLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDE2LAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MzEsIDB4MDAsIDB4NUYsCisweDAwLCAweDVDLCAweDAzLCAweEY4LCAweDBDLCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDcwLCAweDAyLCAweDcwLAorMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHhGRCwKKzB4MDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4ODEsIDB4RkMsCisweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLCAweEZGLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHg3RiwgMHgwMCwgMHhGNywgMHgwMSwgMHhDQywgMHgyNywgMHgzOCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHg3MywgMHgwMSwKKzB4OEMsIDB4ODcsIDB4QjgsIDB4OTcsIDB4QzAsIDB4NUMsIDB4MDAsIDB4RUYsIDB4MjEsIDB4Q0MsIDB4MDUsIDB4RjAsIDB4MTcsCisweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLAorMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4ODIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4N0QsIDB4MDgsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAwLCAweDdELCAweDA0LCAweDg0LCAweDAxLCAweDE0LCAweDRFLCAweDQwLCAweDNCLCAweDAxLCAweDNCLCAweDAwLCAweDg1LAorMHg0MywgMHgxMCwgMHhDRSwgMHg0MCwgMHgxOCwgMHgwMSwgMHhFRCwgMHgwOCwgMHg5NCwgMHg2MiwgMHhEMCwgMHg2MiwgMHg0MCwKKzB4NTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzksIDB4MDgsIDB4RTEsCisweDAwLCAweEI0LCAweDIzLCAweEQ4LCAweDBFLCAweDQwLCAweDlCLCAweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDIzLCAweEQwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHg4OCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwOSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RTUsIDB4ODAsIDB4OTQsIDB4MDMsIDB4MTgsIDB4MEEsIDB4NEMsIDB4M0IsIDB4MTAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweDkwLCAweDBGLCAweDQ0LCAweDg5LCAweDEwLCAweEVELCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBBLCAweDYxLCAweDYwLAorMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgzNSwgMHgwMCwgMHhDMSwgMHg0MCwKKzB4MzQsIDB4MUEsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NjcsIDB4QzAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDAsCisweDQwLCAweDMzLCAweDgwLCAweDBELCAweDAwLCAweDA1LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDEwLCAweDhELAorMHg0MCwgMHg0NCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg0MCwgMHgzMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxMCwKKzB4MkMsIDB4NDAsIDB4NTAsIDB4MTAsIDB4Q0QsIDB4MDEsIDB4MTQsIDB4MEEsIDB4RDgsIDB4MjAsIDB4NDIsIDB4MDgsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDNELCAweDAwLCAweEYzLCAweDAwLCAweDdDLAorMHgxNiwgMHhEMCwgMHgwRCwgMHhDNCwgMHg0NywgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywgMHgwQiwgMHhEMCwgMHgwMSwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MTcsIDB4MDAsCisweDVDLCAweDAyLCAweDMwLCAweDA5LCAweDAwLCAweDM3LCAweDAwLCAweDkxLCAweDAwLCAweDZDLCAweDhCLCAweEIwLCAweDJDLAorMHhDMSwgMHg1MCwgMHgwMSwgMHhERiwgMHgwMCwgMHg0MCwgMHgwOCwgMHhEMCwgMHg4OSwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDQzLCAweEYwLCAweDAxLCAweEMwLCAweDMzLAorMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgyMCwgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywKKzB4MEEsIDB4RjAsIDB4MDksIDB4RTAsIDB4QTcsIDB4MDgsIDB4OUYsIDB4NDIsIDB4NUMsIDB4NDMsIDB4RjIsIDB4MEQsIDB4RDAsCisweEI3LCAweDA4LCAweERGLCAweDJBLCAweDdDLCAweDA4LCAweEYwLCAweDI5LCAweEQwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4NDAsCisweEIzLCAweDAwLCAweDlDLCAweDAyLCAweDMwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweDdDLCAweDAyLAorMHhCMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgyMCwgMHhBRiwgMHgyMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMSwgMHgxRCwKKzB4MDAsIDB4QjYsIDB4MDAsIDB4Q0MsIDB4NDIsIDB4ODAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDBELAorMHg2MCwgMHg2NywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwKKzB4MDMsIDB4NUMsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4NDYsIDB4MTAsCisweDExLCAweDQxLCAweDY3LCAweDAxLCAweDE5LCAweDAxLCAweDA0LCAweDA2LCAweEIwLCAweDNELCAweDQwLCAweDc0LCAweDAxLAorMHgwMSwgMHg0NSwgMHg0NCwgMHg0RSwgMHg5MCwgMHgxOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzYsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NEEsCisweDQ3LCAweDA0LCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDM5LCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDExLAorMHg3NCwgMHgwNCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxOSwKKzB4NDAsIDB4NzcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDAsIDB4NDcsIDB4MTAsIDB4OEQsIDB4MDEsIDB4NTUsIDB4MDAsIDB4RDUsCisweDgxLCAweDQ0LCAweDg0LCAweDkwLCAweDExLCAweDQ4LCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNiwgMHhEMCwgMHgwQywgMHg0MCwgMHgwMywKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsCisweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweDkwLCAweDA4LCAweDY0LAorMHgzMywgMHgwMCwgMHg4OSwgMHgwMCwgMHg0NywgMHgwMSwgMHg5MCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwOCwgMHhENSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDQsIDB4NDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDM4LCAweDNBLCAweDAwLCAweEYzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweDQwLCAweDA3LCAweDAwLAorMHhGMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMCwgMHg1QywgMHgwMCwKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MzcsCisweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDE1LCAweDA4LCAweEQ3LCAweDAwLCAweDRELAorMHg4MCwgMHhCMCwgMHgwOSwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QjgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzQsIDB4MkYsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYyLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDAyLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwMywgMHhDMCwgMHgxQiwgMHg4MCwKKzB4M0YsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RDAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkUsIDB4MDIsCisweEYwLCAweDBCLCAweEMwLCAweDE3LCAweDQyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLAorMHg2RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHg0MCwgMHhGMCwgMHgwMiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHg0MCwKKzB4RUMsIDB4MDIsIDB4NzAsIDB4MUYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkIsIDB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MDMsCisweEMwLCAweDY4LCAweDAwLCAweEZGLCAweDAwLCAweENDLCAweDA3LCAweEIwLCAweDBGLCAweEMwLCAweDNFLCAweDA5LCAweEZGLAorMHgwMSwgMHhBQywgMHgwNywgMHhGMCwgMHg0RiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwKKzB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4MjEsCisweDAwLCAweEQxLCAweDEwLCAweDVDLCAweDAwLCAweEQwLCAweDExLCAweDQwLCAweDZDLCAweDA4LCAweDkxLCAweDBCLCAweDU4LAorMHgwMCwgMHgxMCwgMHgxRCwgMHhDMCwgMHhBNSwgMHgwNiwgMHhDMSwgMHgxMiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgxMSwgMHhDOCwKKzB4NjUsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NzQsIDB4MTIsIDB4REQsIDB4MDEsCisweDU0LCAweDA3LCAweEQyLCAweEJELCAweDQwLCAweDc3LCAweDQwLCAweDkxLCAweDEwLCAweDQ0LCAweDBCLCAweDEwLCAweDFELAorMHgwMCwgMHgwRiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHgzMywgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDQsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MjAsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDUwLCAweDBDLCAweDQwLCAweDIzLCAweDA5LCAweEMxLCAweDg0LCAweDM0LCAweDAyLCAweDEyLCAweDAwLCAweDQwLCAweDIwLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzUsIDB4ODAsIDB4OTUsIDB4ODQsIDB4MDQsIDB4NzAsIDB4MTQsIDB4MEMsIDB4NDAsCisweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHg0MSwgMHg0MCwgMHg2NCwgMHg0MCwgMHhEMSwgMHgwOCwgMHg3NCwgMHg0NCwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MjcsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjYsIDB4MDAsCisweERELCAweDAwLCAweDU0LCAweDgzLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweDFELCAweDAxLCAweDU0LCAweDEzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHg0MCwgMHhENSwgMHgxOCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHgwRiwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4MzYsIDB4MDAsIDB4RDMsIDB4MDAsCisweDdDLCAweDA0LCAweEYyLCAweDE0LCAweEQwLCAweDY0LCAweDAwLCAweDgzLCAweDgwLCAweDRDLCAweDBFLCAweDcwLCAweDBELAorMHhDMCwgMHgyNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgxRSwgMHgzMCwgMHgxNSwgMHhEMCwgMHgyNCwgMHgwMCwgMHhERiwKKzB4MDAsIDB4MEMsIDB4MDMsIDB4QjEsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4Q0YsIDB4ODEsIDB4NEMsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDMzLCAweDAwLCAweDg3LCAweDAzLCAweDRDLCAweDI3LCAweDMwLCAweDBELCAweEMwLCAweDAzLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywKKzB4NDAsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDgsIDB4QkYsIDB4MDAsIDB4OUMsIDB4MDIsIDB4RDAsIDB4MEYsIDB4QzAsCisweDIxLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAyLCAweEYwLCAweDk2LCAweEMwLCAweDZELCAweDAxLCAweEVGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwNywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAwLAorMHgzMCwgMHg4NSwgMHhDMCwgMHgyNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4M0EsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MjQsIDB4MjAsIDB4RDMsIDB4MDgsIDB4NEQsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHg5MywgMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyOCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDUsIDB4NzQsIDB4MTQsIDB4MTAsCisweDA3LCAweEMwLCAweEIyLCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDI4LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLAorMHhGMSwgMHgwMCwgMHg3QywgMHgwNiwgMHhEMSwgMHgwRCwgMHg0MywgMHgyNSwgMHgwMCwgMHhGNSwgMHgwMCwgMHg1NCwgMHgyRiwKKzB4RDAsIDB4MEYsIDB4NDAsIDB4N0MsIDB4MDAsIDB4NTEsIDB4MTEsIDB4N0MsIDB4MDIsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MzcsCisweDAwLCAweEQxLCAweDA0LCAweDJDLCAweDJGLCAweEQwLCAweDBGLCAweDUwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyNiwgMHgwMCwgMHhDMSwgMHgwMSwgMHgzNCwgMHgwQywgMHgxOCwgMHgxMCwKKzB4NDAsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDYsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4QzksCisweDQwLCAweDE0LCAweDBDLCAweEQwLCAweDA0LCAweDcwLCAweDIwLCAweDQwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQ4LAorMHgwQywgMHg0MCwgMHg3MSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxOCwgMHgxQywgMHg0MCwgMHgzMywgMHgwMCwKKzB4ODgsIDB4ODAsIDB4MTQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBGLCAweDgwLCAweDY4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDI0LCAweDE4LCAweDNCLCAweDQwLAorMHg2MiwgMHgwMCwgMHhBMCwgMHgwMSwgMHhCNCwgMHg0NSwgMHhEOCwgMHgxRSwgMHg0MiwgMHg2QiwgMHg2MCwgMHhFMSwgMHgwMywKKzB4QTQsIDB4MjYsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NkQsIDB4MDAsIDB4RTUsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQwLCAweDc5LCAweDAwLCAweEUxLCAweDAxLCAweEY0LCAweDA2LCAweDEwLCAweDFFLCAweDQwLCAweDdGLCAweDQwLCAweDQ5LAorMHg4MSwgMHhCNCwgMHg0NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDgsIDB4QzMsIDB4MDgsIDB4N0MsIDB4MjAsIDB4MzAsIDB4MDAsIDB4NDAsIDB4QTEsCisweDQwLCAweEMzLCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDIzLCAweDAwLCAweENGLCAweDAwLCAweDFDLAorMHgwMywgMHhGMCwgMHg4NCwgMHg0MiwgMHgyMCwgMHgwMiwgMHhDMywgMHgwMCwgMHgwQywgMHg0MywgMHhGMCwgMHgwRCwgMHg0OCwKKzB4MzEsIDB4NDQsIDB4QzMsIDB4ODgsIDB4M0UsIDB4MDIsIDB4NzEsIDB4MEMsIDB4QzEsIDB4MzMsIDB4MDAsIDB4MEIsIDB4MDAsCisweDFDLCAweDAxLCAweEYwLCAweDhDLCAweEMwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMCwgMHhDNCwgMHg4QiwgMHhDMCwgMHgxRiwgMHgwMiwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RjcsIDB4MTAsIDB4RkMsIDB4MDMsCisweEEwLCAweDg3LCAweEMwLCAweDJFLCAweDEwLCAweEZCLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNBLAorMHgwMiwgMHg3RiwgMHgwOCwgMHhEQywgMHgyMiwgMHhGNCwgMHg4RiwgMHhDMCwgMHgyRiwgMHg0MiwgMHhGNywgMHgwMCwgMHhDRSwKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdFLCAweDA0LCAweDMwLCAweDAxLCAweEMwLCAweDJDLCAweDAxLCAweDkzLAorMHgwMCwgMHhFQywgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNiwgMHgwMCwgMHhERiwgMHgwMCwgMHgxQywgMHgwMiwgMHgzMCwKKzB4MDUsIDB4QzAsIDB4MjYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4OEQsIDB4RTAsIDB4MzcsIDB4MDAsCisweEQzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweDEzLCAweDgxLCAweDRDLCAweDA3LAorMHgzNCwgMHgwRiwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwKKzB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjYsIDB4MDAsIDB4MTIsIDB4NjIsIDB4QzAsIDB4MzgsIDB4MDQsIDB4RTEsIDB4MDAsCisweEY0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDJCLCAweDAwLCAweEZCLCAweDAxLCAweDg0LCAweDAyLCAweDEwLCAweDA2LAorMHg0MCwgMHgzQiwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NSwgMHgwMywgMHhEMCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwKKzB4NDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QUQsIDB4MDMsIDB4MTAsCisweDFFLCAweDQwLCAweDRGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDc5LAorMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHg4NiwgMHgxMiwgMHgxMywgMHg0MCwgMHg2MCwgMHgwMCwgMHhFRCwgMHgyMSwgMHhCNCwKKzB4MEYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzMsIDB4MDAsIDB4RTUsIDB4MDUsIDB4RDQsIDB4MDcsIDB4RDksIDB4MTYsIDB4NDEsCisweDZCLCAweDAwLCAweEVELCAweDIxLCAweEE0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDcyLCAweDIwLCAweEUxLCAweDAzLAorMHhCNCwgMHgwNiwgMHhEMCwgMHgxQywgMHg0MCwgMHg3RSwgMHgwMCwgMHgyNSwgMHgwMywgMHg4NCwgMHgwNywgMHgxMCwgMHgxRSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4NzMsIDB4MDIsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDQ4LCAweDA2LCAweDUyLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweENGLAorMHg5MCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgxMywgMHg5MCwgMHg3QywgMHg0MCwgMHgyMywKKzB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NDksIDB4MDEsIDB4MzQsCisweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEM1LCAweDA0LCAweDI0LCAweDRCLCAweDEwLCAweDBDLCAweDQwLAorMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1NSwgMHgwMCwgMHg1RiwKKzB4MDAsIDB4RkMsIDB4NDksIDB4MzQsIDB4NDcsIDB4RDAsIDB4NUMsIDB4NDEsIDB4NUYsIDB4MTEsIDB4RkMsIDB4MDEsIDB4RjQsCisweDA1LCAweEMwLCAweDU3LCAweDAwLCAweDU3LCAweDAwLCAweERDLCAweDAxLCAweEUwLCAweDI3LCAweEUwLCAweDE3LCAweDAwLAorMHg1RiwgMHgwMCwgMHg2RSwgMHg4MSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg2MywgMHgwMSwgMHgzQywgMHgxNSwKKzB4RjIsIDB4MDUsIDB4RjAsIDB4NTQsIDB4MDEsIDB4NzcsIDB4MDMsIDB4QzQsIDB4MUQsIDB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLAorMHg3QywgMHhDMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwOCwgMHg3MiwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsCisweDQwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHgyMSwgMHhFMCwgMHgwNywgMHg0MCwgMHgxQSwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDOCwgMHg0QiwgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsCisweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDIwLCAweDAwLCAweDgzLCAweDAzLCAweDZDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLAorMHgyMywgMHg0MCwgMHg5MSwgMHgwMCwgMHgwNCwgMHgyNiwgMHgzNCwgMHgwOSwgMHgwMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4NjgsIDB4MDYsIDB4RDAsIDB4MDksIDB4RTAsIDB4RTcsIDB4MDgsIDB4OTMsIDB4NDUsIDB4NEMsIDB4MDYsIDB4MzIsIDB4MDksCisweEMwLCAweDI3LCAweDA4LCAweDkzLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyMiwgMHg0MCwgMHg5MSwgMHgwMSwgMHg3NCwgMHg4MiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4QTQsIDB4MDQsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MzYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk1LCAweDEyLCAweDZDLCAweDBBLCAweDEwLCAweDE5LCAweDQyLCAweDI3LCAweDAwLCAweDlELCAweDIwLCAweDQ0LAorMHgwNiwgMHhGMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMSwgMHg5QiwgMHgwMSwgMHg0NCwgMHgwNiwgMHhCMCwgMHgyOSwgMHg0NCwKKzB4MjMsIDB4NDAsIDB4OTMsIDB4MEUsIDB4NUMsIDB4MUUsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDIwLCAweDkxLCAweDAwLCAweDU0LCAweDA2LCAweEQyLAorMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwKKzB4OEQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4NTAsIDB4ODksIDB4NjQsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzUsIDB4MTIsCisweEQyLCAweDA5LCAweDAwLCAweDI3LCAweDgwLCAweDkxLCAweDAwLCAweDQ1LCAweDEyLCAweDUwLCAweDg5LCAweDQxLCAweDI3LAorMHgwMCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0NCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NDgsCisweDUwLCAweDIwLCAweDAxLCAweDgxLCAweDg0LCAweDA0LCAweDAyLCAweEQ4LCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDg5LAorMHgwNCwgMHgzNCwgMHgxMywgMHgwMCwgMHg0OCwgMHg2MCwgMHgyMywgMHgyMCwgMHg4RCwgMHgwNCwgMHgxNCwgMHgwMiwgMHg1MCwKKzB4QzgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODksIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsCisweDgxLCAweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDQ4LCAweDQ4LCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHg1MywgMHgwQSwgMHgxQywgMHgyOCwgMHhGMCwgMHgwNSwgMHg1MCwKKzB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzQsIDB4ODcsIDB4MDIsIDB4MUQsIDB4MEEsCisweDdDLCAweDI4LCAweDUwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFELCAweDBBLCAweDdDLCAweDgwLCAweEMyLCAweDYxLAorMHg0MCwgMHgwNywgMHgwNSwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwKKzB4OEEsIDB4MzgsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDIyLCAweEYyLCAweDhBLCAweEQwLCAweDJGLAorMHgwMiwgMHhCRiwgMHgwOCwgMHhGQywgMHg2MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHg5NywgMHgwOCwgMHhFQywKKzB4MjIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4OUIsIDB4MDgsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4Q0EsCisweDI3LCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEIwLCAweDg5LCAweEMyLCAweDJCLCAweDAwLCAweEE3LCAweDA4LAorMHhEQywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QTAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsCisweEJGLCAweDA0LCAweEZDLCAweDUyLCAweEIwLCAweDBCLCAweEMwLCAweDI3LCAweDQwLCAweEJCLCAweDAwLCAweEM4LCAweDIyLAorMHgzNCwgMHg0QiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwQywgMHhERCwgMHgwMiwgMHhCMCwgMHgxOSwgMHhDMCwgMHg2RiwKKzB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4NUIsIDB4QzAsIDB4MjAsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsCisweDIyLCAweDMwLCAweDRCLCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLAorMHgwOCwgMHgwNywgMHgwMSwgMHgxRCwgMHgwNCwgMHgzNiwgMHhDOSwgMHgxMCwgMHgwNSwgMHhFMiwgMHgwNCwgMHgwMiwgMHgxRCwKKzB4MDAsIDB4NzQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NTQsIDB4MjAsIDB4MTgsCisweDAxLCAweEUwLCAweDA2LCAweDgwLCAweDBELCAweDBDLCAweDQ0LCAweDAwLCAweDUwLCAweDExLCAweDQwLCAweDA3LCAweDAyLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHhBMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg0NCwgMHgyMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsCisweDIzLCAweDA1LCAweDhELCAweDA0LCAweDM0LCAweEIyLCAweDEwLCAweDg4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDA4LAorMHgzNCwgMHg1MiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHgwMCwgMHg4NSwgMHgwMCwgMHgwNCwgMHgwMiwgMHg1NCwgMHg4OCwKKzB4NDIsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MTQsIDB4MDIsIDB4MTAsIDB4NjgsIDB4NDEsIDB4MjMsIDB4MDAsIDB4ODEsCisweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI2LCAweDEwLCAweDg1LCAweDQ4LCAweDA0LCAweDA3LCAweDE0LAorMHg4OCwgMHg0MCwgMHg0QiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDQsIDB4OUQsIDB4MDEsIDB4NzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDg5LCAweDAwLCAweDU0LCAweDUyLCAweDEwLCAweDA5LCAweDQwLAorMHgyNiwgMHgwMSwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1MiwgMHgwOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwOCwKKzB4NzQsIDB4MTIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NjYsIDB4NDAsIDB4OTUsIDB4MDQsIDB4MDQsIDB4MDYsIDB4MTAsIDB4MDksCisweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3NCwgMHgwRSwgMHgzMCwgMHgyOSwgMHg1MCwgMHhFNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHg0NiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDEsIDB4MjYsCisweDgwLCAweDlELCAweDAwLCAweDVDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkyLCAweDAzLCAweDdDLAorMHgwNiwgMHhGMiwgMHgwOSwgMHhEMCwgMHgyMiwgMHgwMCwgMHg5NywgMHgwNywgMHg0RCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4NjUsIDB4MDIsIDB4OUYsCisweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDA1LCAweDlGLCAweDAwLCAweDdDLCAweDRFLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NywgMHgwMiwgMHg5NywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4ODAsIDB4MjMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsCisweEYwLCAweDA4LCAweEMwLCAweDI1LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDVCLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MTgsIDB4OTQsIDB4MzEsIDB4NTAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MjAsIDB4NzAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFELCAweDQ4LCAweDc4LCAweDQ4LCAweDMyLCAweDIxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg0QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4NDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDIsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDE0LCAweDAwLCAweDdELCAweDA0LCAweEY0LAorMHgwMSwgMHgzMCwgMHg0NiwgMHg0MCwgMHg1QywgMHgwMCwgMHg1MSwgMHgxMSwgMHhGNCwgMHgwOSwgMHg3MCwgMHg1NSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0QsIDB4MDAsIDB4RjQsIDB4MDksIDB4MTAsIDB4MTQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsCisweDg0LCAweDQxLCAweDcwLCAweDA1LCAweDQwLCAweDFGLCAweDAxLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDI3LAorMHg0MCwgMHgxNywgMHgwMCwgMHg3MiwgMHgwMCwgMHhDNCwgMHgwMSwgMHgxNCwgMHgwNSwgMHhDMSwgMHg1MiwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4NzQsIDB4MDMsCisweDEwLCAweDFDLCAweDYwLCAweEIwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDBCLCAweDU4LCAweDBDLCAweDQwLCAweDM3LAorMHgwMCwgMHg4RCwgMHgwMSwgMHg3NCwgMHgwOSwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMSwgMHgxNCwKKzB4OEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RjMsIDB4MDEsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MjQsIDB4NDAsCisweDMzLCAweDgwLCAweDQ5LCAweDBELCAweDA0LCAweDAyLCAweDEyLCAweDE4LCAweDAwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhBOSwgMHgwMCwgMHhCNCwgMHgxOCwgMHgxMCwKKzB4MDIsIDB4NDAsIDB4NzAsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0EsIDB4MDEsCisweDI5LCAweDAwLCAweEE0LCAweDAwLCAweDE0LCAweDBBLCAweDQxLCAweDNCLCAweDAwLCAweEVELCAweDAyLCAweDg0LCAweDAzLAorMHg0MCwgMHg0RSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MSwgMHgzRiwKKzB4MDAsIDB4NjEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MTYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAxLCAweEFELCAweDAxLCAweEJDLCAweDBFLCAweDMwLCAweDE0LAorMHhEMCwgMHg3OCwgMHgwMCwgMHhFMywgMHg0MSwgMHhCRSwgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMSwgMHg2RCwKKzB4MDEsIDB4M0MsIDB4MDUsIDB4MzAsIDB4MUEsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OUQsIDB4MDcsIDB4RDAsCisweDVFLCAweEMyLCAweDdCLCAweDAwLCAweEFCLCAweDAxLCAweEI0LCAweDA2LCAweEYwLCAweDE2LCAweEMwLCAweDdCLCAweDAwLAorMHhGOSwgMHgwMSwgMHg4RCwgMHgwNywgMHgzMCwgMHgxQSwgMHhDNCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4QjUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsCisweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdFLCAweDAzLCAweEMwLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweDVGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwOSwgMHg4MCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgwMywgMHg3MCwgMHg4RCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4NDAsIDB4REYsCisweDAwLCAweDNDLCAweDAwLCAweEY0LCAweDA5LCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhBMCwgMHhGRiwgMHgwNCwgMHhCMywgMHgwMSwgMHhGQywgMHgyMywgMHgzOCwgMHgwMywgMHhDMCwgMHg2QywKKzB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4NDAsIDB4N0YsIDB4MDYsIDB4RjMsIDB4MDEsIDB4Q0MsCisweDg1LCAweDMwLCAweDFCLCAweEUwLCAweDdGLCAweDAyLCAweEFGLCAweDAzLCAweENDLCAweDA2LCAweEYwLCAweDFGLCAweEMwLAorMHg0RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QywgMHg0MCwgMHhGQiwgMHg4MSwKKzB4RkMsIDB4MDYsIDB4MzEsIDB4MUEsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDNELCAweDAwLCAweEExLCAweDAwLCAweEI0LCAweDEzLCAweDE4LCAweDQyLCAweDAwLCAweDI4LCAweDQwLAorMHhFMSwgMHg1MCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHg2RiwgMHgwMCwgMHg5NCwgMHgwMiwKKzB4MTAsIDB4MEEsIDB4QzAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MjQsIDB4ODQsIDB4MDMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MUIsCisweDAwLCAweEFELCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDA2LCAweEMwLCAweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MzksIDB4MDAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MjIsIDB4MTgsIDB4ODMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4RTksCisweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDQwLCAweDYxLCAweDAwLCAweDA0LCAweDAxLCAweDkwLAorMHgwQSwgMHg0MCwgMHgzQiwgMHgyMCwgMHhBRCwgMHg0MCwgMHhBNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwKKzB4QUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0QsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MzQsIDB4MEIsCisweDEwLCAweDBBLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LAorMHgzMywgMHgwMCwgMHgxMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMiwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDOSwgMHgwMCwKKzB4MzQsIDB4MjYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4MjgsCisweDQwLCAweDcxLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwMiwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwNCwgMHg0MCwgMHgzMCwgMHgxMCwgMHg4MSwgMHgwMiwgMHgzNCwgMHgwMywgMHgxMSwKKzB4MDgsIDB4NDAsIDB4MTksIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4M0QsCisweDQwLCAweDkzLCAweDAwLCAweEZDLCAweDAzLCAweDE0LCAweDIxLCAweEMwLCAweEU0LCAweDAyLCAweERCLCAweDAxLCAweDc0LAorMHgyQSwgMHhGMCwgMHgwQywgMHhDMCwgMHgzRiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMSwgMHhCNCwgMHgwOSwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OEYsIDB4MTMsCisweDdDLCAweDAyLCAweEYwLCAweDA0LCAweEMwLCAweDM0LCAweDAwLCAweDUzLCAweDBCLCAweDdDLCAweDgyLCAweDMwLCAweDBELAorMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDAsIDB4RDAsIDB4RTcsIDB4MTAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4ODAsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAwLCAweDNDLCAweDQwLCAweDcwLCAweDA5LCAweEMwLCAweDM3LAorMHgwMiwgMHg5RiwgMHgwMCwgMHg1QywgMHg4MywgMHhGMiwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NzUsIDB4MDAsIDB4NDcsIDB4ODEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDNGLCAweDAwLCAweEJGLAorMHgwMCwgMHg4QywgMHgyMywgMHhCMCwgMHgwMywgMHhEMSwgMHgyOCwgMHgwMCwgMHhCMywgMHgwNSwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MzgsIDB4MDAsIDB4NkIsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4QjAsIDB4OEIsIDB4RTEsIDB4M0YsIDB4MDAsCisweEJGLCAweDAwLCAweENDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDRGLCAweDAwLCAweEJGLCAweDE0LCAweERDLCAweDBGLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHg4QywgMHgyMiwgMHgxMCwgMHg5RiwgMHhDMCwgMHgwNywKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDEsCisweDQ0LCAweDA0LCAweDkwLCAweDExLCAweDU4LCAweDQ0LCAweDA0LCAweDkxLCAweDAwLCAweDc2LCAweDA0LCAweEQwLCAweDBELAorMHhFMCwgMHgzNiwgMHgwMCwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NkMsIDB4NDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4OTcsIDB4MDIsIDB4REQsIDB4MDEsIDB4NkMsIDB4MDcsIDB4RDAsCisweDNELCAweEMwLCAweDMyLCAweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDA0LCAweDEwLCAweDFELCAweEMyLCAweDI1LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgxMCwgMHg5RCwgMHgwMSwgMHg0NCwKKzB4MDMsIDB4OTAsIDB4MTEsIDB4NDAsIDB4NDYsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDEsIDB4MTksIDB4NDIsCisweDM0LCAweDAwLCAweEQ5LCAweDAwLCAweDQ0LCAweDA1LCAweDlBLCAweDA5LCAweDQwLCAweDM3LCAweDIwLCAweDhELCAweDA4LAorMHg0NiwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MiwgMHgxNywgMHgwNCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwgMHgxRCwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAzLAorMHg5MCwgMHgxMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwOCwgMHg0MCwgMHgzMiwKKzB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NjAsIDB4MzEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsCisweDAzLCAweEQ4LCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDBDLCAweDQ4LAorMHgzNiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4M0UsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MDUsIDB4MDMsIDB4QjAsCisweDAxLCAweEMwLCAweDA2LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDM0LCAweDAwLAorMHg0QiwgMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwOSwgMHg0NCwgMHgzNywgMHgwMCwgMHhCRiwgMHgwMCwgMHg0NCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NTQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsCisweDAwLCAweEQzLCAweDAwLCAweDRELCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3OCwgMHgwMiwKKzB4QzAsIDB4MEQsIDB4MDAsIDB4RkYsIDB4NDAsIDB4RjYsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsCisweDAwLCAweEZELCAweDAwLCAweEYwLCAweDBCLCAweEM4LCAweDNFLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzQiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MTUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDI3LCAweEYwLCAweDFGLCAweEMwLAorMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwKKzB4Q0MsIDB4MDcsIDB4RjAsIDB4M0YsIDB4QzAsIDB4N0MsIDB4MDIsIDB4RkYsIDB4MjEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4OUYsCisweEMwLCAweDc4LCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDIyLCAweEYwLCAweDNGLCAweEMwLCAweDVFLCAweDEwLCAweEJCLAorMHgwMSwgMHhFQywgMHg4NCwgMHgzOCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MTAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4NDcsCisweDAwLCAweDExLCAweDA0LCAweDc0LCAweDA0LCAweEQwLCAweDExLCAweDQwLCAweDQ3LCAweDAwLCAweDFELCAweDA0LCAweDQ0LAorMHg4NCwgMHhEMCwgMHgwMSwgMHg0OCwgMHgwNCwgMHgwMSwgMHgxRCwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMiwgMHg0MSwgMHg0MCwKKzB4NDQsIDB4NDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MzgsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NTUsIDB4MDAsIDB4RDEsIDB4MDEsCisweDU0LCAweDAzLCAweEIwLCAweDAxLCAweDQwLCAweDBELCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHhBMCwgMHgzMywgMHgxMSwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4MywgMHhEMCwgMHg0QywgMHg0MSwgMHgzNywgMHgwMCwKKzB4QzEsIDB4MTAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsCisweEQwLCAweDRELCAweDQwLCAweDMwLCAweDAxLCAweEQ1LCAweEEwLCAweDY0LCAweDgzLCAweDEwLCAweDRDLCAweDQwLCAweDM1LAorMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgxMCwgMHhEMCwgMHg0QywgMHg0MCwgMHgzMCwgMHg2MCwgMHhEOSwgMHg0MCwgMHgyNCwKKzB4MDEsIDB4MTAsIDB4MDgsIDB4NDQsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEE4LCAweDA1LCAweDQwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQyLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLAorMHgwMCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MjAsCisweDE5LCAweDAwLCAweDc0LCAweDBDLCAweEQwLCAweDFDLCAweDQwLCAweDc1LCAweDAwLCAweEQxLCAweDAxLCAweDU0LCAweDBCLAorMHgxNSwgMHgxOSwgMHg0MSwgMHgwRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwKKzB4MzcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDAsCisweDdDLCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELAorMHhEMCwgMHgzNCwgMHgwMCwgMHhENywgMHgwMCwgMHg2QywgMHgwMywgMHgzMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhEQiwKKzB4MDAsIDB4N0MsIDB4MEUsIDB4RTAsIDB4MUQsIDB4QzAsIDB4QzAsIDB4MDQsIDB4Q0IsIDB4MDEsIDB4NkMsIDB4MDQsIDB4MTAsCisweDE5LCAweEMwLCAweDIwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDBELAorMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHg0MCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzQsCisweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYxLCAweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDM3LCAweDQwLAorMHg3QywgMHg0MiwgMHhGMCwgMHgwNywgMHhDMiwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHhBNCwgMHhGMCwgMHgwMCwKKzB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4NzUsIDB4MDEsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEQwLCAweDc0LCAweDAwLCAweEQzLCAweDAwLCAweDRELCAweDAzLAorMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwNywgMHgzMCwgMHg4RCwgMHhDMSwgMHgzNywKKzB4MTQsIDB4REYsIDB4MDEsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzYsIDB4MDQsIDB4RDMsIDB4NDAsIDB4NkMsCisweDI4LCAweDMwLCAweDA5LCAweEMwLCAweDM3LCAweDAxLCAweEQzLCAweDAwLCAweDdDLCAweEM4LCAweDIwLCAweDI5LCAweEM2LAorMHgyOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgwNCwgMHgwMCwgMHgxRCwKKzB4MEYsIDB4NzQsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NDIsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MEEsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDEzLCAweDc0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweEM3LCAweDEwLAorMHgwRCwgMHgwMCwgMHgzNCwgMHgwNCwgMHhEMCwgMHgzMSwgMHg0MCwgMHg4MywgMHgwMCwgMHgxMSwgMHhBNSwgMHg3NCwgMHgwOCwKKzB4MTAsIDB4MDUsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MTEsIDB4NzQsIDB4MEUsIDB4QjAsIDB4MDksIDB4NDAsIDB4NEMsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweEI0LCAweDAwLCAweENELCAweDAzLAorMHgzNCwgMHg0MywgMHgxMCwgMHg2QywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4NzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MkMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDdELCAweDQwLCAweDMzLCAweDgwLCAweEMxLCAweDgxLCAweDM0LCAweDBFLCAweEQwLAorMHgwQywgMHg0MCwgMHhCMywgMHgwMCwgMHhDMSwgMHgxMSwgMHg2NCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwQywgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4RjQsCisweDA0LCAweDEwLCAweDEzLCAweDQ4LCAweDRDLCAweDAwLCAweDIxLCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLAorMHg0QiwgMHgwNCwgMHgyMSwgMHgwMywgMHhGNCwgMHgwNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgxNCwgMHgyRCwgMHgwMSwKKzB4QjQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4NDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsIDB4MUUsCisweDQwLCAweDdGLCAweDAwLCAweDYxLCAweDAxLCAweEI0LCAweEE3LCAweDkwLCAweDEyLCAweDQwLCAweDNDLCAweDIwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHg5MiwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywKKzB4MzAsIDB4MEMsIDB4QzEsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MTAsIDB4MEMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzMsCisweDAwLCAweEMzLCAweDAwLCAweDFDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDFDLAorMHgwMywgMHhGMCwgMHgwQywgMHhDMSwgMHgzMywgMHgyMCwgMHhDMSwgMHgwMCwgMHgzRSwgMHgyMywgMHhGNCwgMHgwQywgMHhDMCwKKzB4MzMsIDB4ODAsIDB4QzMsIDB4MDgsIDB4N0MsIDB4NjMsIDB4MzAsIDB4ODAsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAwLCAweEYwLAorMHgwMiwgMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHg4MywgMHhDMCwgMHgwMywgMHgwMCwKKzB4MUYsIDB4NDAsIDB4QkMsIDB4MjAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDgxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDQxLCAweEZDLCAweEEzLCAweDIwLCAweDhGLCAweEM4LCAweDNCLAorMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwNywgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRCwgMHhEMCwgMHg3NCwgMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MUQsIDB4RDAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4ODAsCisweERGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgzMiwgMHg4OCwgMHgwOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwKKzB4MEIsIDB4MjAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MkQsIDB4MDAsCisweEI0LCAweDAwLCAweEQwLCAweDAzLCAweDQwLCAweDBDLCAweDAwLCAweDIxLCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAzLAorMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHg4MywgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgyMCwgMHg2RCwKKzB4NDAsIDB4RjQsIDB4MDEsIDB4MTAsIDB4MDIsIDB4NDAsIDB4NEYsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLAorMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4ODcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsCisweDc4LCAweDAwLCAweEYxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDIwLCAweEVELCAweDUxLAorMHhCNCwgMHg4NywgMHgxMCwgMHgxRSwgMHg0MSwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzYsIDB4MjgsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsCisweDBELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAyLCAweDEwLCAweDFELCAweDIwLCAweDM0LCAweDAwLAorMHhEMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OUIsIDB4RDAsIDB4MDQsIDB4NDIsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MDEsIDB4MzQsCisweDAzLCAweDExLCAweDJDLCAweDQxLCAweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorMHhBMCwgMHgxNSwgMHgwMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDNCwgMHgxMywgMHgwMCwgMHg1RiwKKzB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4RDAsIDB4MTYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RjAsCisweDA1LCAweEMyLCAweDE2LCAweDAwLCAweDUxLCAweDAwLCAweDNDLCAweDAxLCAweEYwLCAweDA1LCAweEM0LCAweDE0LCAweDQwLAorMHg1MywgMHgwMCwgMHhDQywgMHgwOSwgMHhEMSwgMHg4NywgMHg0MCwgMHgxRiwgMHgwMCwgMHg3RCwgMHgwMSwgMHhCQywgMHgwNSwKKzB4MTQsIDB4MjcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsCisweDBELCAweDA4LCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgyMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHhCMCwgMHgwMywKKzB4QzAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4M0YsCisweDAwLCAweDY1LCAweDIwLCAweEYwLCAweDgxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDM4LCAweEYwLAorMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwKKzB4MDIsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MEUsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDUsIDB4N0MsCisweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDY3LCAweDAyLCAweDlGLCAweDA4LCAweDZDLCAweDgyLCAweEYwLCAweDQ5LCAweEMwLAorMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwNSwKKzB4MEMsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDIsIDB4OUQsIDB4MDQsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksCisweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEU2LCAweDAwLAorMHg5RCwgMHgwMiwgMHg0NCwgMHgwRSwgMHhEOCwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5QiwgMHg0MywgMHgzNCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDIsIDB4NDQsIDB4MDIsIDB4RTAsIDB4MjksIDB4NDAsIDB4QTcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEIwLCAweDI5LCAweDQwLCAweDIzLCAweDEwLCAweDhCLCAweDAxLCAweDQ0LAorMHgxNiwgMHgxMCwgMHgwOSwgMHg0OCwgMHhBNywgMHgwNCwgMHg4RCwgMHgwMCwgMHg2QywgMHg0RSwgMHgxMCwgMHgwOSwgMHg0OCwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjQsIDB4MDAsIDB4QkQsCisweDUwLCAweEU2LCAweDAyLCAweEQwLCAweDhCLCAweDQxLCAweDZGLCAweDA4LCAweEI1LCAweDQwLCAweEY0LCAweDAyLCAweDEwLAorMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCRCwgMHgxMCwgMHhDNCwgMHgwNiwgMHhDMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMSwKKzB4QkQsIDB4MDgsIDB4RjQsIDB4MDYsIDB4MTAsIDB4OEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MDAsIDB4NDUsIDB4MjIsCisweDE4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweERDLCAweDAwLCAweDY0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDczLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHg2OCwgMHgwMCwgMHhBRCwgMHgwMCwKKzB4ODYsIDB4ODYsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4ODAsIDB4QTEsIDB4MDEsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEEsCisweDQwLCAweDJCLCAweDAwLCAweEE1LCAweDAwLCAweDg0LCAweDAyLCAweDUwLCAweDFBLCAweDQwLCAweDZCLCAweDAwLCAweEFELAorMHgwMCwgMHhCNCwgMHgwMiwgMHg5MCwgMHgxQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhCOSwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxNCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NTMsIDB4QTAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDFGLCAweDAwLCAweDZDLAorMHgyOCwgMHhEMCwgMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNSwgMHg0QSwgMHg3QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUQsIDB4MEEsIDB4NEQsIDB4MDAsIDB4RDAsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweDMwLCAweEExLCAweDQwLCAweDA3LCAweDAwLCAweDMzLCAweDAwLCAweDRDLCAweDI4LCAweDMwLCAweEExLAorMHhDMCwgMHgwNywgMHg4MCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHgzOSwgMHhBMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4ODIsCisweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQ4LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYxLCAweDA4LCAweEMwLCAweDI3LAorMHgwOCwgMHg5RiwgMHg0MCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4QTIsIDB4RjAsIDB4MEIsIDB4QzAsCisweDJGLCAweDAwLCAweEJGLCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDhGLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwKKzB4MEIsIDB4QzIsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MjgsCisweEJGLCAweDAwLCAweERDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDAyLAorMHhGMCwgMHgwQiwgMHg4MCwgMHgyRiwgMHgxMCwgMHhCRiwgMHgwMCwgMHhEQywgMHg1MiwgMHgzMCwgMHg4OCwgMHhDMiwgMHgyOSwKKzB4MDAsIDB4QjMsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDExLCAweDAwLCAweDc0LCAweDQwLCAweDEyLCAweDAxLAorMHg0OSwgMHgwNCwgMHgwMCwgMHgxRCwgMHgxNCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0OCwgMHgwNywgMHgyMCwgMHgxNywKKzB4MTAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4NDEsIDB4NDEsIDB4MDcsIDB4MDEsIDB4MUQsIDB4ODAsIDB4NzQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQ5LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDEwLCAweDEwLCAweDQxLCAweDQ0LCAweDA3LCAweDAwLAorMHgxMSwgMHgwMCwgMHg1QywgMHg4MSwgMHhEMiwgMHg0MSwgMHg0NSwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4ODEsIDB4NjAsIDB4MTQsIDB4MTIsIDB4MTQsIDB4MDgsIDB4NDAsCisweDIwLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDAwLAorMHgxNCwgMHgwMywgMHgxMCwgMHg0OCwgMHg0MCwgMHgzMywgMHg4NSwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4NTIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODksCisweDAwLCAweDE0LCAweDAyLCAweEQ5LCAweDQ4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg1MCwgMHgyNCwKKzB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsCisweDAyLCAweDUxLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDBELCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHg4OSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5OSwgMHgwMSwKKzB4NTAsIDB4MTIsIDB4RDAsIDB4MDksIDB4NjAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDkzLCAweDgwLCAweDVDLCAweDAyLCAweDMxLCAweDA5LCAweEMyLCAweDI0LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg1QywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDgwLCAweDVDLCAweDEyLCAweEI0LCAweDA5LCAweEMwLCAweEUxLCAweDQwLCAweDlCLCAweDAxLCAweDU4LAorMHgwNiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MDgsIDB4MjUsIDB4NDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjMsIDB4MDksIDB4NDAsIDB4MjcsIDB4MTAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDgwLCAweDI3LCAweDAwLCAweDk2LCAweDAwLCAweDcwLCAweDAyLCAweDcwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwNCwKKzB4OUYsIDB4QTAsIDB4N0MsIDB4MDIsIDB4MjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTYsIDB4MDAsIDB4NUMsIDB4NDIsCisweEYxLCAweDQ5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LAorMHgwNSwgMHgwNiwgMHgxRiwgMHgwMSwgMHg2QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMzLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDA4LCAweDEzLAorMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwOCwgMHgxNywgMHgwMCwgMHg2QywgMHgyOCwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NUMsCisweDAwLCAweDdELCAweDExLCAweEM0LCAweDBELCAweDcyLCAweDU3LCAweDQwLCAweDE0LCAweDA0LCAweDdGLCAweDQxLCAweDQ0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3RCwgMHgyMCwgMHgzNCwgMHgwMSwgMHg3MiwgMHgwNywgMHhDOSwKKzB4MUUsIDB4MDIsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NzAsIDB4RDcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4NTEsIDB4MDEsCisweEM0LCAweDE1LCAweDAwLCAweDA1LCAweDQwLCAweDFDLCAweDAwLCAweDcxLCAweDA1LCAweEU0LCAweDBELCAweEQwLCAweDA1LAorMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhGNiwgMHgwMCwKKzB4NEQsIDB4MjEsIDB4NjQsIDB4MkYsIDB4NTAsIDB4NEQsIDB4NDAsIDB4MjAsIDB4MjAsIDB4Q0QsIDB4MDQsIDB4MDQsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDBELCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweEIwLAorMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgyQywgMHg0MCwgMHhGMywgMHgwMCwgMHg4MSwgMHg4OSwgMHg0NCwKKzB4MTMsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDEsIDB4MjQsIDB4MEYsIDB4RDAsIDB4MEMsIDB4NDIsCisweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELAorMHgwMSwgMHg4NiwgMHgwMSwgMHg1MCwgMHgwRSwgMHg1MCwgMHgzOCwgMHgwMCwgMHhGNSwgMHgxMSwgMHg4NCwgMHgwMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NUEsIDB4NDAsCisweEU5LCAweDAwLCAweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQwLCAweDZCLCAweDQwLCAweEUxLCAweDAxLCAweEM2LCAweDAzLAorMHgxMCwgMHg1RiwgMHg0MCwgMHgyQywgMHgwOCwgMHg2MSwgMHgwMCwgMHhBNCwgMHgwMywgMHhEMiwgMHg0RSwgMHg2MCwgMHgwNywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsCisweEFDLCAweDA3LCAweDcwLCAweDFGLCAweEMwLCAweDc4LCAweDIwLCAweEVELCAweDAxLCAweDg1LCAweDA3LCAweEYwLCAweDFFLAorMHhDNiwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhFQiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4QjAsCisweDlFLCAweEMwLCAweDc5LCAweDAwLCAweDY1LCAweDQxLCAweEFDLCAweDA0LCAweEYwLCAweDVFLCAweEMwLCAweDQ3LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4NzEsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweERGLCAweDQwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDE3LCAweDEwLCAweEQ3LCAweDgwLAorMHg3QywgMHg4MywgMHg3MCwgMHgwRCwgMHhDMCwgMHgyMywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHg4RCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4OEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDVELCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDEzLAorMHhGMCwgMHg1RiwgMHhDMCwgMHg3QiwgMHg2MiwgMHg3MywgMHg0MSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwKKzB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RkIsIDB4MDksIDB4RUMsCisweDI3LCAweDMwLCAweDFFLCAweEMwLCAweDc4LCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLAorMHg0QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwOCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MTksIDB4MTYsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsCisweDA2LCAweDQwLCAweDNCLCAweDA2LCAweDY1LCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDhFLCAweDQwLCAweDNCLCAweDAyLAorMHg2MSwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMiwgMHg0NywgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHg4NCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDQsIDB4RTUsIDB4MDgsIDB4QjQsIDB4MjksIDB4RDAsIDB4MEYsIDB4NDAsIDB4MjksCisweDAyLCAweDZELCAweDAwLCAweEI0LCAweDIyLCAweEQwLCAweDBFLCAweEMwLCAweDU2LCAweDYwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgyMywgMHhEMCwgMHg0RSwKKzB4NDgsIDB4M0IsIDB4MTIsIDB4NjAsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MkUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4RTEsCisweDAwLCAweEI0LCAweDAzLCAweEMxLCAweDA2LCAweDYwLCAweDlDLCAweDAwLCAweEYxLCAweDgwLCAweEM2LCAweDAzLCAweDEwLAorMHg4NywgMHg0MCwgMHhCOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwKKzB4NkQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NjAsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDAxLCAweDAwLCAweENELCAweDEyLCAweDQ0LCAweDJDLCAweEQwLCAweEE4LCAweDQwLAorMHhCMywgMHgwNCwgMHgxMSwgMHgwMywgMHgzNCwgMHgwQiwgMHgxMCwgMHgwQywgMHg0MCwgMHhCMywgMHgwNCwgMHg5MSwgMHgwMywKKzB4MzQsIDB4MEIsIDB4OTAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTAsIDB4MDgsCisweDQxLCAweDMwLCAweDQwLCAweEM1LCAweDAxLCAweDc0LCAweDQwLCAweEQwLCAweDFDLCAweDQwLCAweDMxLCAweDEwLCAweDRELAorMHgwQSwgMHgzMCwgMHgwMiwgMHhDMSwgMHgyRCwgMHg0OCwgMHgxQSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTAsIDB4NjEsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MjIsIDB4RjAsIDB4MjEsIDB4QzAsIDB4RjcsCisweDAwLCAweDkzLCAweDExLCAweDdDLCAweDBCLCAweDM0LCAweDVDLCAweEMwLCAweDMzLCAweDAwLCAweDEzLCAweDAxLCAweDdDLAorMHgyMywgMHhGMCwgMHg3OSwgMHhEMCwgMHg2NCwgMHgwMSwgMHhDMywgMHgwOCwgMHg0QywgMHgyMywgMHgzMCwgMHg1MSwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NUYsIDB4QzAsIDB4MTAsIDB4MjAsIDB4Q0YsIDB4MjMsCisweDdDLCAweDA4LCAweEMwLCAweEJGLCAweDgwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgwOCwgMHgyNywgMHgyMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMSwgMHgyMSwgMHhDOCwgMHgzNywgMHgwMCwKKzB4OUYsIDB4MDIsIDB4N0MsIDB4MjMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MUYsIDB4MUEsIDB4N0MsIDB4MDcsCisweEYwLCAweDI5LCAweEM4LCAweDg3LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDA3LCAweEYwLCAweDIxLCAweEMwLCAweDg3LAorMHgwMCwgMHhERiwgMHgwOCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMiwgMHg1RiwgMHgwNCwgMHg3QywKKzB4M0EsIDB4RjEsIDB4OEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweDA4LCAweDBGLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDAzLCAweEMxLCAweDdDLCAweDA4LCAweDNGLAorMHg5MCwgMHhDQywgMHg0MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHgzMywgMHgwMCwgMHhDQywgMHgwNywgMHgzMCwKKzB4MDMsIDB4QzEsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDEyLCAweEZDLCAweDAwLCAweDMwLCAweDBGLCAweEMxLCAweDdGLCAweDAxLCAweDczLCAweDAxLCAweENDLCAweDAwLAorMHhGMSwgMHgwRCwgMHhDMCwgMHgxNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwKKzB4RTYsIDB4MDksIDB4RDAsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTIsIDB4MzAsIDB4NDIsIDB4MzQsIDB4MDgsIDB4OUQsIDB4MDMsCisweDRDLCAweDAzLCAweEQwLCAweDBELCAweDYwLCAweDM0LCAweDAwLCAweDExLCAweDI1LCAweDA0LCAweDA3LCAweDEyLCAweDM5LAorMHg0MCwgMHhDNywgMHgwMCwgMHhERCwgMHg4MCwgMHg2QywgMHgwMywgMHhEMCwgMHgxMSwgMHg0MCwgMHg4NywgMHgwMCwgMHhERCwKKzB4MDEsIDB4NzAsIDB4MEMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTEsIDB4MDgsIDB4N0QsIDB4NEMsIDB4RDIsCisweDBELCAweDRDLCAweDE0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDY2LAorMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNiwgMHg5OCwgMHgxOSwgMHg0MCwgMHgzNiwgMHgwMSwgMHg5RCwgMHgxMSwgMHg2NCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDQsIDB4MjMsIDB4MTAsIDB4MTksIDB4NDEsCisweDY3LCAweDA0LCAweERELCAweDA0LCAweDU0LCAweEEzLCAweEQxLCAweDE5LCAweDQwLCAweDM3LCAweDA0LCAweERELCAweDAwLAorMHg3NCwgMHgwNiwgMHgxOCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNCwgMHhEMCwgMHgwRCwKKzB4NTgsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAxLCAweDA0LCAweDAyLCAweDk0LCAweDAxLCAweDUwLCAweDMyLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDAwLCAweDI0LCAweDAyLCAweDkwLCAweDBDLCAweDQwLAorMHg0MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhEMywKKzB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzQsIDB4MzYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkQsIDB4MDMsIDB4RjAsCisweDBELCAweDQwLCAweDM0LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDAxLCAweEM0LCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMSwgMHgwMSwgMHg0MCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4MzQsIDB4MEYsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDk4LCAweDJGLCAweDAwLCAweEFGLCAweDAwLAorMHhGNCwgMHgwMiwgMHg3MCwgMHgwQiwgMHhDNCwgMHgzRCwgMHgxMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4ODAsIDB4M0IsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RUYsCisweDAwLCAweEI4LCAweDAzLCAweEYwLCAweDBCLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGOCwgMHgwRiwgMHhDMCwgMHgxNywgMHgyNCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MEIsIDB4ODAsIDB4MzMsIDB4MDAsIDB4RkMsCisweDEwLCAweDMwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDI3LCAweDMwLCAweDAzLCAweEM4LAorMHgyQywgMHgwNSwgMHhCNSwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHg4MywgMHhDMCwgMHgyRiwgMHgwMywgMHgzMywgMHgwMSwKKzB4Q0MsIDB4MDEsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MkYsIDB4MDEsIDB4M0YsIDB4MDEsIDB4Q0MsIDB4MjYsIDB4QjAsIDB4MEIsCisweEMwLCAweDdDLCAweDAwLCAweEJGLCAweDE0LCAweEZDLCAweDI3LCAweDMwLCAweDRGLCAweEMxLCAweDBDLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgxMCwgMHgxMSwgMHgwQSwgMHg3NCwgMHgyOCwKKzB4MTIsIDB4NEYsIDB4NDAsIDB4N0MsIDB4MTAsIDB4RDUsIDB4MDEsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NTAsIDB4RTQsCisweDA4LCAweDkxLCAweDA4LCAweDU0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLCAweEFGLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LAorMHgyQywgMHhEMCwgMHgxOSwgMHg0MCwgMHhFNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwKKzB4NzQsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MDMsIDB4MTAsIDB4M0QsIDB4NDAsIDB4MDQsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDIzLCAweDAwLCAweDAxLCAweDIwLCAweDM0LCAweDAwLCAweDUwLAorMHgwQywgMHg1MSwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsIDB4NDgsIDB4NDAsIDB4QjcsIDB4MjAsIDB4OTEsIDB4MTQsIDB4MTYsIDB4ODEsCisweDkwLCAweDBDLCAweDQyLCAweEIzLCAweDAwLCAweDFELCAweDAwLCAweDY0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDMwLAorMHgwMCwgMHgwOSwgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MjUsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4NDQsIDB4MTAsIDB4OEQsCisweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDAxLCAweDQwLCAweDI0LCAweDAxLCAweEQxLAorMHgyMCwgMHg1NCwgMHg0NiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMSwgMHg1NCwgMHg0MCwgMHhEMCwKKzB4MTUsIDB4NDAsIDB4NzcsIDB4MDAsIDB4MUQsIDB4MTEsIDB4NjQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDEsIDB4NzQsIDB4MDAsCisweERELCAweDQ0LCAweDc0LCAweDIzLCAweDEwLCAweDBELCAweDQwLCAweDFDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NywgMHg0MiwgMHgxMSwgMHg4MSwgMHg3QywgMHgwQywgMHgzNCwgMHgxRCwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NDksIDB4MDMsIDB4MzAsIDB4MTUsIDB4RDAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4ODAsCisweDRDLCAweDA2LCAweDMwLCAweDM5LCAweEMwLCAweDYzLCAweDQwLCAweDgzLCAweDAxLCAweDVELCAweDAxLCAweEYwLCAweDE5LAorMHhDMCwgMHg3NywgMHgwMCwgMHgwRiwgMHgwMSwgMHgyRCwgMHgwNywgMHhCMCwgMHgyOSwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MDEsIDB4N0UsIDB4MDYsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDg4LCAweDZELCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAwLCAweEUyLCAweDFFLCAweEUxLCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGOCwgMHgwMywgMHhGMCwgMHg0RSwgMHhFMCwgMHg2QiwgMHgwMCwgMHg4RiwgMHgyMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NjcsIDB4MjIsIDB4QkYsIDB4MTAsIDB4RUMsIDB4MjUsIDB4RjAsIDB4MEIsIDB4QzAsCisweDNGLCAweDA4LCAweDNGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDQ3LCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDgxLAorMHhGRSwgMHgwNiwgMHhGNCwgMHgwQywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDgsIDB4MjEsIDB4MDAsIDB4MTMsIDB4ODAsIDB4NkMsIDB4MTgsIDB4MzIsIDB4MEQsIDB4QzAsIDB4NzMsIDB4MDAsCisweEQzLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDA1LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDNBLAorMHgzNCwgMHgyRCwgMHhDMCwgMHgzQywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwgMHg3NywKKzB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MjMsIDB4MzAsIDB4MjQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsCisweDAyLCAweEYwLCAweDBELCAweEUwLCAweDBBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHg2QywgMHgwMSwgMHg5MSwgMHgwMSwgMHg0NCwgMHgwQywgMHgxMCwgMHgxRCwgMHhFNCwgMHgzRiwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NkMsIDB4MEEsIDB4MTIsCisweDBELCAweDQ4LCAweDI0LCAweDMwLCAweDlCLCAweDAwLCAweDcwLCAweDE1LCAweDExLCAweDA1LCAweDQwLCAweDM0LCAweDAwLAorMHgxRCwgMHgwMCwgMHg3NCwgMHgwNywgMHgxMCwgMHhBNSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHg4NCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MjAsCisweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDI0LCAweDg0LCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDQwLCAweEMxLCAweDgwLAorMHg3NCwgMHgwNywgMHg5MCwgMHgyMCwgMHg0MSwgMHgyMCwgMHg0MCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMywgMHg5MSwgMHgwOCwKKzB4NDAsIDB4MjEsIDB4MjAsIDB4ODEsIDB4MDIsIDB4MzAsIDB4NDEsIDB4MTYsIDB4MEMsIDB4NTIsIDB4MzMsIDB4MDAsIDB4NEQsCisweDAwLCAweDM0LCAweDA2LCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDhELCAweDAxLCAweDQ0LCAweDAyLCAweEQwLAorMHgwQywgMHg0MCwgMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2QywKKzB4MDAsIDB4MDEsIDB4MTEsIDB4ODQsIDB4NjQsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzksIDB4NDAsIDB4RTEsIDB4NjEsIDB4QjQsCisweDRFLCAweDkwLCAweDEyLCAweDUwLCAweDc4LCAweDAwLCAweEExLCAweDExLCAweEE0LCAweDI2LCAweDkwLCAweDBBLCAweDQwLAorMHg2OSwgMHgwMCwgMHhFOSwgMHgwMSwgMHhCNCwgMHgwNiwgMHgxMCwgMHgxRiwgMHg0MCwgMHg1QSwgMHgwMCwgMHg2RCwgMHgwMSwKKzB4QjQsIDB4MDYsIDB4MTAsIDB4MUEsIDB4NDAsIDB4NzgsIDB4MjAsIDB4OEQsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsCisweDQwLCAweDE5LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDE4LCAweDIwLCAweDAwLAorMHgwMywgMHgyMCwgMHg2RSwgMHgyMCwgMHgzNCwgMHgwOCwgMHg0MSwgMHgzMywgMHgwMCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMiwKKzB4OTAsIDB4MDEsIDB4QzEsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4MEMsIDB4MjMsIDB4QjQsIDB4ODksIDB4QzAsIDB4MzEsCisweDA5LCAweDgzLCAweDAwLCAweDNDLCAweDAwLCAweDMwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweDBGLCAweDAwLCAweDdDLAorMHgwMiwgMHgzNCwgMHgwOCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwOCwgMHgwRCwgMHgwMiwgMHhGMiwgMHgwQywgMHhEMCwKKzB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MkQsIDB4NDAsIDB4M0YsCisweDAwLCAweEY2LCAweDIwLCAweEY1LCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweDUwLAorMHgwMywgMHhDMCwgMHgzQiwgMHgwMiwgMHhGRiwgMHgwOCwgMHhGQywgMHhBMSwgMHg3MCwgMHhDQiwgMHhFMCwgMHhCRSwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MDYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsCisweEYwLCAweDhCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDBBLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwKKzB4Q0MsIDB4MDAsIDB4MzAsIDB4NTksIDB4QzgsIDB4MzAsIDB4MTMsIDB4RjcsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NzAsIDB4MDEsCisweEMwLCAweDI0LCAweDAwLCAweDlFLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDJELCAweEMxLCAweEFDLCAweDAwLCAweDkzLAorMHgwMCwgMHg3QywgMHgwMSwgMHhDMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwKKzB4MDUsIDB4RDAsIDB4MzAsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NTMsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweEE5LCAweDAwLCAweDIxLCAweEMwLCAweDg0LAorMHgwMiwgMHgxMSwgMHgwRSwgMHhDMSwgMHgzOCwgMHgwNCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDIsIDB4MjAsIDB4MDAsIDB4RTEsIDB4QzAsCisweEI0LCAweDAzLCAweEMwLCAweDBFLCAweEMwLCAweDM4LCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDAyLCAweDUwLCAweDBDLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhBNSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDEsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MDcsCisweDEwLCAweDE4LCAweDAwLCAweDc4LCAweDAxLCAweEU1LCAweDAxLCAweEI0LCAweDQ3LCAweEQxLCAweDEyLCAweDUwLCAweDZBLAorMHgwMCwgMHg4RCwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxQywgMHg0OCwgMHg3OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHhCNCwKKzB4MDUsIDB4RDAsIDB4MUYsIDB4NTAsIDB4NzgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4MTgsIDB4MUUsIDB4NDAsCisweDY4LCAweDAwLCAweEU5LCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhEMSwgMHg1MywgMHgwNCwgMHgwMywgMHgxMCwKKzB4MEMsIDB4NTAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzIsIDB4MDAsCisweENELCAweDQwLCAweDM0LCAweDJCLCAweDEwLCAweDVDLCAweDYwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwNCwgMHg0MCwgMHhGMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyNiwgMHg1MCwgMHg3QywgMHg0MiwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTQsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDFELCAweDAwLCAweDczLCAweDI3LCAweENDLCAweDBELCAweDM0LCAweDA1LAorMHhDOCwgMHgxMCwgMHgwMCwgMHg1NywgMHgyMCwgMHg3QywgMHgwNSwgMHhGMCwgMHgyNywgMHhDMSwgMHgxNiwgMHgwMCwgMHg1RiwKKzB4MDAsIDB4Q0MsIDB4MDUsIDB4MzQsIDB4NTcsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NzMsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsCisweDA3LCAweEMwLCAweDFDLCAweDAxLCAweDZCLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDc3LCAweEQwLCAweDE0LCAweDAwLAorMHg2QiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA1LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYyLCAweDAxLCAweEM1LCAweDA1LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHg0MCwgMHhGMCwgMHgwMCwgMHhDMCwgMHgwMywgMHg0MCwgMHgxRiwgMHgwNCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDUsIDB4MzAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RjQsIDB4MjEsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MTcsCisweDAxLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHg0QSwgMHgzMCwgMHg1OSwgMHhDMCwgMHhFNywKKzB4MDAsIDB4OEIsIDB4MDEsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MTksIDB4ODAsIDB4MjQsIDB4MTAsIDB4OEYsIDB4ODksIDB4NEMsCisweDAyLCAweDM4LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyMywgMHgwNCwgMHg5MywgMHgwMSwgMHg2RCwgMHgwMiwgMHgzMCwgMHg1OSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5MywgMHgwMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDIwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDBBLCAweDEwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg2QywgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDIwLCAweDlCLCAweDAwLCAweDJDLCAweDEyLCAweDUwLCAweDc5LCAweDUwLCAweDYwLCAweDAwLCAweDlCLCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMiwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjAsIDB4NDAsIDB4OTUsIDB4MjAsIDB4MDQsIDB4MEEsIDB4NTYsIDB4MjksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTksCisweEE4LCAweDY0LCAweDA2LCAweEQ4LCAweDg5LCAweDYwLCAweDI1LCAweEEwLCAweDlELCAweDAwLCAweDA0LCAweDAyLCAweDE0LAorMHgwRCwgMHg0MCwgMHgyNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEOCwgMHgwOSwgMHg0MCwgMHg3NywgMHgwMCwKKzB4OTEsIDB4MDgsIDB4NjYsIDB4OTIsIDB4MTIsIDB4MDgsIDB4NDIsIDB4MjUsIDB4QTAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgyMCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgwNCwgMHgxMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4MSwgMHgwNCwKKzB4MDAsIDB4MDYsIDB4RDAsIDB4NDgsIDB4NTAsIDB4MjEsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MjUsIDB4MTMsIDB4MTAsIDB4NDgsCisweDQwLCAweDIyLCAweDExLCAweEMxLCAweDAwLCAweDM2LCAweDEyLCAweEQwLCAweDA4LCAweDQyLCAweDIzLCAweDIxLCAweDk5LAorMHgwMCwgMHg2NCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHgyNSwgMHgwMCwgMHg4OSwgMHgwNCwgMHgwNSwgMHgwMiwgMHhEMCwKKzB4NDgsIDB4NDEsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4ODMsCisweDAyLCAweDA3LCAweDBBLCAweDBDLCAweDI4LCAweDcyLCAweEExLCAweDQwLCAweDA3LCAweDAwLCAweDVCLCAweDAwLCAweDZDLAorMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwQSwgMHg0QywgMHgyOCwgMHgxMCwgMHhBMSwgMHg1MCwKKzB4ODYsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDEsIDB4RDEsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsCisweDZELCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDA1LCAweDAwLCAweDFCLCAweDAwLCAweDRDLCAweDA4LCAweEYwLCAweDAxLAorMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgzRiwgMHgwMiwKKzB4QkYsIDB4MDgsIDB4RkQsIDB4MjIsIDB4QjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4NDIsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MDIsCisweEYwLCAweDhCLCAweEM4LCAweDJFLCAweDEyLCAweEJGLCAweDQ4LCAweEZDLCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDJELAorMHg0MiwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhCRCwKKzB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QkYsIDB4MDgsIDB4QkMsIDB4NDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDNGLCAweDA1LCAweEIzLAorMHgwQywgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBMywgMHgwNCwgMHg4QywgMHgwMiwgMHhGMCwKKzB4Q0IsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MjIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjQsIDB4MDUsCisweEFGLCAweDA4LCAweEZDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHhDQSwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4NTEsIDB4MEMsCisweDRDLCAweDQ4LCAweDE0LCAweDAxLCAweEMxLCAweDA0LCAweDAyLCAweDExLCAweDYwLCAweDQ0LCAweDEwLCAweDcwLCAweEMwLAorMHg0MCwgMHgwNSwgMHgwMCwgMHgxMSwgMHgxMCwgMHg0NCwgMHgyMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxRCwKKzB4MDQsIDB4NzQsIDB4MDgsIDB4QzAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MTAsIDB4RDIsCisweEMxLCAweDQwLCAweDA0LCAweDAwLCAweDU1LCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDAxLCAweDQwLCAweDczLCAweDYwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4MSwgMHgwNCwgMHgyNCwKKzB4MzIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MDQsIDB4NTIsIDB4RDIsIDB4NDgsIDB4NDAsCisweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDA2LCAweEQwLCAweDg4LCAweDQ0LCAweDIwLCAweDA1LCAweDhELCAweDA0LAorMHgzNCwgMHgyMiwgMHhEOCwgMHgxOCwgMHg0MCwgMHg2MywgMHgwMCwgMHg4RCwgMHgyMCwgMHgzNCwgMHg1MiwgMHhEMCwgMHg0OCwKKzB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MjgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDY1LCAweDU4LCAweDgxLCAweDAwLCAweDQ0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxMiwgMHg1MCwgMHgwOCwgMHg1MCwgMHgyNSwKKzB4MDAsIDB4OTEsIDB4MDQsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MjAsIDB4OUQsIDB4MjQsIDB4NzQsCisweDgzLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDA2LCAweDc0LCAweDAyLCAweEQwLCAweDQ5LCAweDQxLAorMHgyNCwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4ODIsIDB4NkQsIDB4MUEsIDB4MzIsCisweDA5LCAweEMwLCAweDI1LCAweDQwLCAweDkzLCAweDAwLCAweDRDLCAweDA2LCAweEYyLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHg5MywgMHgwMCwgMHg0QywgMHgwNiwgMHhGMCwgMHhCOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwNiwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsIDB4MjQsCisweDAyLCAweDkzLCAweDA5LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwKKzB4QzEsIDB4MjEsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4NDYsIDB4NzAsIDB4MDksIDB4NDAsIDB4MjYsIDB4NDAsIDB4OUYsCisweDAxLCAweDdDLCAweDBBLCAweEYwLCAweDE4LCAweEQwLCAweDY3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDEyLCAweEYwLAorMHgzOSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhEMCwgMHgyNywgMHg4MCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDg1LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLAorMHgwNCwgMHg0MCwgMHgxMywgMHgwNCwgMHg0QywgMHgyMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHg4MCwgMHgxRiwgMHgwMCwKKzB4NEMsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4ODIsIDB4NEMsIDB4ODQsIDB4QjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4NTEsIDB4MDAsIDB4RDQsIDB4MDEsIDB4MzQsIDB4MDcsIDB4NDAsIDB4MTQsCisweDAwLCAweDcxLCAweDAwLCAweEM0LCAweDAxLCAweDEwLCAweDA3LCAweDUwLCAweDEwLCAweDAwLCAweDVELCAweDEwLCAweEZDLAorMHgxMSwgMHgxMiwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg3MSwgMHgwMiwgMHhDMCwgMHgwNSwgMHgzMCwgMHgwNSwgMHg0MCwKKzB4NTcsIDB4MDQsIDB4NUQsIDB4MDEsIDB4RjQsIDB4NDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NUQsIDB4MDEsCisweDc0LCAweDAxLCAweDEwLCAweDA1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBMCwgMHgzNiwgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgyRCwgMHg0MCwgMHgzMCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MDQsIDB4MEYsIDB4RDQsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDcsCisweDEwLCAweDFDLCAweDQwLCAweDMwLCAweDIwLCAweEMxLCAweDEyLCAweDAwLCAweDAzLCAweDBDLCAweDBDLCAweDQwLCAweDIzLAorMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMSwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDgwLCAweDMwLCAweDA4LCAweEMxLCAweDAwLCAweDk0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDM4LCAweDAwLCAweEExLAorMHgwMiwgMHhDNCwgMHgwNywgMHhEMCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwNCwgMHhDRCwgMHgwMCwgMHhCNCwgMHgwNSwgMHgxMCwKKzB4MkMsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RjEsIDB4MDEsIDB4ODQsIDB4MEYsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEVELCAweDEwLCAweEI0LCAweDAxLCAweEQwLCAweDAzLCAweDQwLCAweDI4LCAweDAwLCAweEFELCAweDAyLCAweEI0LCAweDA3LAorMHgxMCwgMHgwRSwgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwKKzB4NzgsIDB4NDAsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4MzMsIDB4MTIsIDB4NTAsIDB4NjAsIDB4MjAsIDB4MjMsIDB4MDEsCisweDhELCAweDA3LCAweEYwLCAweDFBLCAweEMyLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEM4LCAweDg1LCAweDMwLCAweDFFLAorMHhEMCwgMHg3QywgMHg0MSwgMHhFMywgMHgwMSwgMHg4RCwgMHgwNiwgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4RDAsIDB4NzgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzQsCisweDFFLCAweEMwLCAweDQ3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweEI1LAorMHgwNSwgMHhERiwgMHgwMiwgMHg3QywgMHgwMiwgMHg3MCwgMHgwMCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxQywgMHgwMCwgMHg3QywKKzB4MDMsIDB4MzAsIDB4MjksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4ODEsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM1LCAweDAyLCAweERGLCAweDAwLCAweDNELCAweDAwLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0QsIDB4MDAsCisweEYzLCAweDAzLCAweENDLCAweDEzLCAweDMwLCAweDE3LCAweEMwLCAweDdDLCAweDEwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LAorMHhGMCwgMHgzRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNiwgMHgzMCwgMHgxQSwgMHhDMCwgMHg3RCwKKzB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsCisweDI3LCAweEYwLCAweDFCLCAweEQwLCAweDZDLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLAorMHgwQiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHg0MCwgMHhGMSwKKzB4MDAsIDB4ODYsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MzgsIDB4MDIsIDB4RTEsIDB4MDQsIDB4QjQsIDB4MDAsIDB4RDAsCisweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEIxLCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDhBLCAweDQzLCAweDM4LCAweDA4LAorMHhFRCwgMHgwMiwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMywKKzB4RDAsIDB4ODIsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NTcsCisweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIxLCAweDAyLCAweEUxLCAweDAwLAorMHg4NCwgMHgyMCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgyMCwgMHgwMCwgMHhBOSwgMHg0MCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MzgsIDB4MDYsIDB4QTEsIDB4MDAsIDB4ODQsIDB4NjAsIDB4MTAsIDB4MEIsIDB4NDAsIDB4MzgsIDB4MDQsIDB4RUQsCisweDAwLCAweDA0LCAweDAwLCAweDUwLCAweDJFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDIzLCAweEQ4LAorMHgwRSwgMHg0MCwgMHgzQSwgMHgwMCwgMHhBOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgyMywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4QzEsIDB4MEEsIDB4NDQsCisweDQyLCAweDEwLCAweDAwLCAweDQ4LCAweDMwLCAweDAwLCAweDg5LCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweEI5LCAweDQwLAorMHg3MCwgMHg0OCwgMHg5MSwgMHgwMSwgMHgwNCwgMHgwMSwgMHgxMCwgMHgyOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwgMHgxMCwKKzB4MDQsIDB4MjQsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4OTAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MkQsCisweDQwLCAweDMyLCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDgzLCAweEQyLCAweDBDLCAweDQwLCAweDVCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyNSwgMHgwMCwgMHhEMywgMHgwMywgMHg0RCwgMHgwQiwKKzB4MzAsIDB4MTAsIDB4QzAsIDB4MzQsIDB4NTAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4NDcsIDB4RjAsIDB4MkQsIDB4RDAsIDB4NjAsCisweDAwLCAweEQzLCAweDA1LCAweDRELCAweDBFLCAweDM0LCAweDE5LCAweEQwLCAweDdDLCAweDAwLCAweERGLCAweDAxLCAweDRELAorMHgyMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMiwgMHhDRiwgMHgwQSwgMHg3QywgMHgwMSwgMHhGMCwgMHhGNSwgMHhEMCwKKzB4NjYsIDB4MDAsIDB4OUYsIDB4MDksIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDc3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjEsIDB4MDgsIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDIsCisweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDI1LAorMHgwMiwgMHg5RiwgMHgwOCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkYsIDB4NDAsIDB4RjMsIDB4MTAsIDB4REMsIDB4MDQsIDB4MzAsIDB4MDMsCisweEMwLCAweEY4LCAweDAwLCAweDMzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMxLCAweEFDLCAweDQwLCAweEYzLAorMHgwMCwgMHg0QywgMHgwNCwgMHhGMCwgMHgwQiwgMHhFMCwgMHgzQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMCwgMHhEMCwKKzB4MEYsIDB4QzAsIDB4N0YsIDB4MDEsIDB4QjcsIDB4MDEsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4M0YsIDB4QzAsIDB4RUMsIDB4MDAsCisweEJGLCAweDAzLCAweENDLCAweDAzLCAweEYwLCAweDBGLCAweDQwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHg3MSwgMHg0MCwKKzB4NzQsIDB4MDAsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzEsIDB4NDEsIDB4MjQsIDB4NTAsIDB4RDEsIDB4MDgsCisweDQ0LCAweDAwLCAweEQwLCAweDk5LCAweDQwLCAweDM0LCAweDAwLCAweDlDLCAweDAzLCAweDQ0LCAweDBDLCAweEQwLCAweDBELAorMHg0OCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwOSwgMHg0NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NDUsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweEEwLCAweDY2LCAweDAwLCAweEQxLCAweDA4LCAweDc0LCAweDIzLCAweDkwLCAweDExLCAweDQwLCAweDM0LAorMHg4MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwKKzB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzYsIDB4MDAsIDB4NUQsIDB4MDEsIDB4NDQsIDB4MDYsIDB4RDEsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA3LCAweEQwLCAweDA1LCAweDQxLCAweDI0LCAweDAwLCAweERELCAweDAwLAorMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MzAsIDB4QzAsCisweEMxLCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDUwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAwLAorMHhEMCwgMHgwOCwgMHg0OCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEOCwgMHgwQywgMHg0MiwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4ODAsIDB4MzUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NzAsIDB4MjAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgyRSwgMHgwMCwgMHhGMywgMHgwMCwgMHgxQywgMHgwMCwgMHhCMCwgMHgwMSwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5MywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MEIsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4ODAsIDB4NEMsIDB4ODAsIDB4RjAsCisweDA5LCAweEQwLCAweDM0LCAweDAwLCAweDlGLCAweDAwLCAweDRELCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDIwLAorMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHhEMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsCisweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MjAsIDB4RkYsCisweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDOCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MEMsIDB4Q0MsIDB4MTIsIDB4RjAsIDB4MUYsIDB4QzAsIDB4QkUsIDB4MDksIDB4QkYsIDB4QzAsIDB4OUQsCisweDQwLCAweEIwLCAweDhGLCAweEMwLCAweDJGLCAweDAxLCAweEIzLCAweDEwLCAweERDLCAweEUyLCAweDMwLCAweDFGLCAweEMwLAorMHgzRiwgMHgwMSwgMHhGMywgMHgwMiwgMHhDQywgMHgwMiwgMHgzMywgMHgxNiwgMHhDNCwgMHgzQywgMHgwMCwgMHhFRiwgMHgwMSwKKzB4Q0MsIDB4MzMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NUEsIDB4MDAsIDB4RkIsIDB4MDEsIDB4QUMsIDB4MjcsIDB4QjAsIDB4MEIsCisweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwRSwgMHg0NCwgMHgxMiwgMHhEMCwgMHg0RCwgMHg0MCwgMHgzQywgMHgwMywgMHgxRCwgMHgwMywgMHg0NCwgMHgwRiwKKzB4MTAsIDB4MkYsIDB4NDAsIDB4MjcsIDB4MDUsIDB4RDEsIDB4MDYsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MUQsIDB4NDgsIDB4QkYsCisweDAwLCAweEYxLCAweDA2LCAweDQ0LCAweDJDLCAweDEwLCAweDA1LCAweDQxLCAweEJDLCAweDAyLCAweERELCAweDAxLCAweEQ0LAorMHgwQiwgMHgxMCwgMHgxRCwgMHg0MCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MEYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4QTMsIDB4MDUsIDB4OEQsCisweDAxLCAweDA2LCAweDYyLCAweEQwLCAweDA5LCAweDQxLCAweDMwLCAweDIwLCAweDhELCAweDA4LCAweDE1LCAweDAzLCAweDkyLAorMHhDQywgMHg0MCwgMHg0MywgMHgwMywgMHhDNSwgMHgxMCwgMHgzNCwgMHgxMCwgMHgxMiwgMHgwQywgMHg0MiwgMHhCMiwgMHgyNSwKKzB4QzEsIDB4OEMsIDB4MDQsIDB4MDQsIDB4NTAsIDB4MDEsIDB4NTAsIDB4MzAsIDB4MEMsIDB4NUQsIDB4MDAsIDB4MjQsIDB4MzMsCisweDEwLCAweDBDLCAweDQwLCAweDA2LCAweDAwLCAweEQ5LCAweEEwLCAweDY0LCAweDEyLCAweDkwLCAweDA4LCAweDQwLCAweDRGLAorMHg4MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg2NSwgMHgwMCwgMHgxRCwgMHgwMSwKKzB4NDQsIDB4MDYsIDB4RDAsIDB4MTksIDB4NTAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NTUsIDB4MEYsIDB4MTAsIDB4MEQsCisweDQyLCAweDY3LCAweDAwLCAweEQ1LCAweDAwLCAweDY0LCAweDBDLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLAorMHgwMCwgMHg0NCwgMHgwNCwgMHg0MCwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4NTksIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTgsIDB4MTEsIDB4NDEsIDB4MEYsIDB4QTAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDA0LCAweDFGLCAweDAxLCAweDRDLAorMHgxNCwgMHhGMCwgMHg1QywgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg1RCwgMHgwRiwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4NDcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDYsIDB4MzAsIDB4MEQsIDB4RTAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MjAsCisweDRDLCAweDA2LCAweDYwLCAweDA0LCAweEMwLCAweDM0LCAweDAwLCAweDlGLCAweDAxLCAweDZFLCAweDAzLCAweDMwLCAweDBDLAorMHhDMCwgMHg3NiwgMHgwMCwgMHhEQiwgMHgwNSwgMHgyQywgMHgwMywgMHhCMCwgMHgxOSwgMHg0NCwgMHgyMywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MTAsIDB4RkMsIDB4MDIsCisweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDA0LCAweDNGLCAweDQwLCAweEFDLCAweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDA3LAorMHgwQywgMHhFQiwgMHgwNSwgMHgxQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHgzQywKKzB4MDAsIDB4QjIsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4ODksIDB4OUMsIDB4MDMsIDB4RjAsIDB4NUYsIDB4QzgsCisweDNGLCAweDQwLCAweEY3LCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHhBNSwgMHg4MCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4ODAsIDB4NkMsIDB4MEIsIDB4M0MsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsCisweEQzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDBELCAweEMwLCAweDMyLCAweDAwLCAweERCLCAweDAwLCAweDRDLCAweDAyLAorMHgzMSwgMHgwRCwgMHhFMCwgMHgzNCwgMHgxMCwgMHg5MywgMHgwMiwgMHg0QywgMHgwMywgMHgzNCwgMHg0RCwgMHhDMCwgMHg3NCwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDEwLCAweDlCLCAweDA2LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgzRiwgMHgwMCwgMHg4MSwgMHgwQiwgMHg2OCwgMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwgMHhFNCwgMHgwMCwgMHhEMCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MTAsIDB4NDQsIDB4MDIsIDB4MDAsCisweDBELCAweEMwLCAweDNGLCAweDAwLCAweDgxLCAweDgxLCAweEM0LCAweDJCLCAweDEwLCAweDJELCAweDQwLCAweDcwLCAweDAwLAorMHgwNSwgMHgwNSwgMHg2QywgMHgyRiwgMHgxMCwgMHg0OSwgMHhDMCwgMHg2RSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MjQsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NjQsCisweEYzLCAweDAwLCAweDAxLCAweDAzLCAweDIwLCAweDA3LCAweDEwLCAweDVDLCAweDQ4LCAweEU0LCAweDAwLCAweEM1LCAweDAwLAorMHgzNCwgMHgwMCwgMHgxMSwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMiwgMHhENSwgMHgwMSwgMHgwNCwgMHgwMiwgMHg1MCwgMHgxNCwKKzB4NDAsIDB4NzAsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MjMsIDB4OTAsIDB4MkMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzEsCisweDAxLCAweDA0LCAweDA3LCAweDUwLCAweDYwLCAweDQ0LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHg4MCwgMHg1OCwgMHgwMCwgMHhFOSwgMHgwMSwgMHhBNCwgMHgwNSwgMHhEMCwgMHgxQSwgMHg2MCwgMHg3QiwKKzB4MDQsIDB4NjEsIDB4MDEsIDB4RTQsIDB4MDcsIDB4OTQsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTUsIDB4MDEsIDB4QjQsCisweDA3LCAweDEwLCAweDFFLCAweDAwLCAweEZCLCAweDAwLCAweEVELCAweDAzLCAweDg0LCAweDA3LCAweDU4LCAweDM3LCAweDQxLAorMHg3OSwgMHgwNCwgMHhGMSwgMHgwMCwgMHhBMCwgMHgwNywgMHg5MSwgMHgwRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhGNSwgMHgwMSwKKzB4RTQsIDB4MjcsIDB4MTgsIDB4MTIsIDB4NDgsIDB4M0UsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDEwLCAweDEwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAzLCAweEYwLCAweDA4LCAweEMwLCAweDM3LCAweDAwLAorMHg0MywgMHgxNCwgMHgyQywgMHg0MywgMHgxMCwgMHg4RCwgMHhDMSwgMHgxMCwgMHgwNCwgMHhDNywgMHgwMCwgMHgzNCwgMHgyMSwKKzB4MzAsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4ODgsIDB4MEMsIDB4MDEsIDB4NzAsIDB4MDAsIDB4NDAsIDB4MzQsCisweDAwLCAweEMzLCAweDE4LCAweDY0LCAweDEzLCAweEIwLCAweDhDLCAweDQwLCAweDEwLCAweDAwLCAweEMzLCAweDAwLCAweDBDLAorMHg0MiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg0OCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4OTgsIDB4M0QsIDB4MjAsIDB4RjcsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4NDAsIDB4RUYsCisweDAwLCAweEZDLCAweDIzLCAweEY1LCAweDBGLCAweEM0LCAweDM1LCAweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHhCRiwgMHgwMiwgMHhGMywgMHgwMCwgMHhGQywgMHgwMSwgMHhCMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MEMsIDB4REMsIDB4MDMsIDB4NzAsIDB4NEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkUsIDB4ODMsCisweDcwLCAweDA3LCAweEM4LCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLAorMHgzNywgMHg4MCwgMHg1QiwgMHgwMCwgMHg1QywgMHgwMSwgMHgzNCwgMHgwOSwgMHhDMCwgMHhCNywgMHgwNCwgMHhDRiwgMHg4MCwKKzB4NUMsIDB4MDMsIDB4RjgsIDB4NEQsIDB4QzksIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MEQsCisweEMwLCAweDM3LCAweDAzLCAweERGLCAweDAyLCAweDdFLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweEI2LCAweDAyLCAweERGLAorMHgwMCwgMHg1QywgMHg1QiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhDRiwgMHgyMCwgMHg0QywgMHgwMywgMHgyMiwKKzB4MDEsIDB4QzQsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MUQsCisweDA4LCAweDYzLCAweDAwLCAweEI0LCAweDAxLCAweDEwLCAweDBBLCAweDQwLCAweEJCLCAweDExLCAweDZELCAweDAwLCAweDk0LAorMHgwMywgMHgzMCwgMHg2RSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4MDEsIDB4RUQsIDB4NDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MzgsIDB4MDQsIDB4QUQsIDB4MDAsCisweEI0LCAweDBCLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDgwLCAweEQ0LCAweDgzLCAweDEwLCAweDA2LAorMHhDMCwgMHg0RSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4QjQsIDB4NDcsIDB4MTAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MTEsIDB4RDQsIDB4NDcsCisweDUwLCAweDFFLCAweDQ4LCAweDVCLCAweDAwLCAweEVELCAweDAxLCAweEE1LCAweDA1LCAweEQwLCAweDFFLCAweDQwLCAweDdCLAorMHgwMCwgMHhFRCwgMHgwOSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxRSwgMHg1NSwgMHg3OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwKKzB4MDcsIDB4RDAsIDB4MUIsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RjUsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MTQsIDB4MTgsIDB4NDAsCisweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDEwLCAweEMxLAorMHgwRCwgMHgzNCwgMHgwNywgMHg5MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMywgMHgxNCwgMHgwQiwgMHg5MCwKKzB4MEMsIDB4NDAsIDB4RjMsIDB4MDQsIDB4Q0QsIDB4MDgsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MjAsCisweENELCAweDAwLCAweDM0LCAweDI3LCAweEQwLCAweDRDLCAweDQwLCAweDMwLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAzLAorMHhEMCwgMHgxOCwgMHg0MCwgMHg3MCwgMHgwOCwgMHhDRCwgMHgwMSwgMHgxNCwgMHgwMywgMHgxMCwgMHhBRCwgMHg0MywgMHg1QSwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MUQsIDB4MDQsIDB4NzMsIDB4MDIsCisweEZDLCAweDAxLCAweDMwLCAweDI3LCAweEMwLCAweDE3LCAweDEwLCAweDdGLCAweDAyLCAweERELCAweEE5LCAweDc0LCAweDA1LAorMHhDMCwgMHg5RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhFQywgMHgxNSwgMHhGMCwgMHgwNSwgMHg0MCwgMHgxNywgMHg4MCwgMHg1RiwKKzB4MDAsIDB4RkMsIDB4MDksIDB4RjAsIDB4MzYsIDB4QzAsIDB4MTQsIDB4MDAsIDB4N0YsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjksCisweDE1LCAweEMyLCAweDFFLCAweDA0LCAweDY3LCAweDgxLCAweDQ0LCAweDAxLCAweDEwLCAweDI3LCAweEMwLCAweDVDLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg0NywgMHg0MCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4NDAsIDB4NzAsIDB4NDEsIDB4QzAsIDB4ODMsIDB4MDAsIDB4MUYsIDB4MTIsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzAsCisweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDVDLCAweDA0LCAweEYwLCAweDAxLCAweEMyLCAweDg3LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwQSwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MSwKKzB4QzAsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDgwLCAweDkzLCAweDA1LCAweDNDLCAweDAyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMiwgMHg4MywgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgyOCwgMHhDMCwgMHg2NCwKKzB4MDEsIDB4OUUsIDB4MDAsIDB4NzgsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4QTcsIDB4NDAsIDB4OUIsIDB4MDEsIDB4N0MsCisweDQyLCAweEYwLCAweDU5LCAweEMwLCAweDIwLCAweDAxLCAweDkzLCAweDQyLCAweDdDLCAweDgyLCAweEYwLCAweDM5LCAweEMwLAorMHgyNywgMHgwNCwgMHg5NywgMHgwOCwgMHg2QywgMHgxNiwgMHgzMCwgMHg4OSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsCisweDA5LCAweEMwLCAweEE3LCAweDA0LCAweDkxLCAweDg2LCAweDBDLCAweDAyLCAweEIwLCAweDA5LCAweDQwLCAweDY0LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3QywgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4NDksIDB4QzAsIDB4RTYsIDB4MDQsIDB4OTEsIDB4MjAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjMsCisweDQwLCAweDlCLCAweDQxLCAweDQ0LCAweDQ2LCAweDE0LCAweDM5LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NjAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjUsIDB4MjIsIDB4OTQsIDB4MDksIDB4NTgsIDB4MjYsIDB4MDAsIDB4OUQsCisweDAwLCAweDM2LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA4LCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg2MCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwKKzB4OTUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDgxLCAweDgxLCAweDA1LCAweDM0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLAorMHgyMSwgMHgwOSwgMHg4MSwgMHgwNCwgMHg0NCwgMHgxMiwgMHg5MCwgMHg1OCwgMHg0MCwgMHg2MiwgMHgwMSwgMHg4RCwgMHgwNCwKKzB4MTQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QzEsIDB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDksCisweDY4LCAweDIyLCAweDAxLCAweEMxLCAweDAwLCAweDM2LCAweDEyLCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDA4LCAweDk5LAorMHgwMCwgMHgwNSwgMHgyMiwgMHgxMCwgMHg0OCwgMHg1MCwgMHg0MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4MTEsIDB4MEEsIDB4M0MsIDB4MjgsIDB4MzAsIDB4QTEsIDB4NDAsIDB4ODcsCisweDAyLCAweDEzLCAweDQwLCAweDZDLCAweDAwLCAweEI0LCAweEExLCAweEM4LCAweDg2LCAweDAyLCAweDBGLCAweDBBLCAweDc0LAorMHgyOCwgMHgzNCwgMHgwMSwgMHg4NCwgMHg5NywgMHgwMiwgMHgxQiwgMHgwQSwgMHg3QywgMHgwMCwgMHhEMCwgMHhBMSwgMHhDMCwKKzB4ODQsIDB4NDIsIDB4MTMsIDB4NDAsIDB4N0MsIDB4MjksIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsCisweDRDLCAweDA4LCAweDMwLCAweEExLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHg5OCwgMHgyRiwgMHg0QSwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhENCwgMHgwQiwgMHhDMCwgMHgyNywgMHg2MiwKKzB4QkYsIDB4ODgsIDB4QkMsIDB4MjIsIDB4RjQsIDB4ODksIDB4QzAsIDB4MkQsIDB4MDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsCisweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAyLCAweDlGLCAweDA4LCAweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LAorMHgwMiwgMHhCRiwgMHg0MCwgMHg3QywgMHgyMiwgMHhEMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHg4MCwgMHhCRiwgMHgwMCwgMHhERSwKKzB4OTIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NzcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI3LCAweDAxLCAweEIzLCAweDE0LCAweDdDLCAweDMyLCAweDMwLCAweDA5LCAweEQwLCAweDJDLCAweDQwLCAweEEzLAorMHgwMCwgMHg5QywgMHgxMiwgMHgzMCwgMHg0QiwgMHhDMSwgMHgyQywgMHgwMywgMHg5RiwgMHgyNSwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MkQsIDB4MDEsIDB4QkYsIDB4MTQsIDB4NEMsIDB4MTIsIDB4NzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4NDAsCisweEIzLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEFCLCAweDAwLCAweDhDLCAweDAyLAorMHhGMCwgMHgwQiwgMHhDMCwgMHg3NiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwKKzB4MTcsIDB4MEQsIDB4MTEsIDB4NDQsIDB4NzQsIDB4QjAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDQsIDB4MDQsIDB4MTEsIDB4MDgsCisweDQ0LCAweDAwLCAweDkwLCAweDQxLCAweDQwLCAweDA0LCAweDAzLCAweDFELCAweDFBLCAweDc0LCAweDQwLCAweEQwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgyMCwgMHhEMCwgMHgwMSwgMHg0MywgMHgwNywgMHgwNCwgMHgxMSwKKzB4MDAsIDB4NzQsIDB4NTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4NDAsIDB4NDUsIDB4MDAsIDB4RDIsCisweDA1LCAweDQwLCAweDYwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLAorMHgwMywgMHg4MSwgMHgzNCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4MSwgMHgwMCwgMHg1NCwKKzB4MjcsIDB4OTAsIDB4NDgsIDB4NDEsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDIxLCAweDAzLCAweDhELCAweEI0LCAweDA0LCAweDgyLCAweDUwLCAweDQ4LCAweDQwLCAweDIzLCAweDAyLCAweEM1LCAweDAwLAorMHgzNCwgMHgzMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHg4MCwgMHg4OSwgMHgwMCwgMHgyNCwgMHg4MiwgMHhEMCwgMHgwQywKKzB4NDAsIDB4NEEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4NDAsCisweDkxLCAweDA2LCAweDc0LCAweDAyLCAweDEwLCAweDI5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDA0LCAweDQ0LCAweDAyLAorMHg5MCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgwOCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4OTUsIDB4MTAsIDB4NzQsCisweDgyLCAweEQwLCAweDhELCAweDQ0LCAweDY3LCAweDg4LCAweDkxLCAweDA4LCAweDY0LCAweDgyLCAweEQwLCAweDE5LCAweDQwLAorMHg2MiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5MywKKzB4ODIsIDB4N0MsIDB4MUUsIDB4MzEsIDB4MDksIDB4QzAsIDB4MjQsIDB4MTAsIDB4OTMsIDB4MDYsIDB4NUMsIDB4MEEsIDB4MzQsCisweDA5LCAweEM0LCAweDI0LCAweDAxLCAweDlFLCAweDAwLCAweDdDLCAweDMyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLAorMHg5RiwgMHgwMCwgMHg0QywgMHgxRSwgMHg3MCwgMHhFOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDQsIDB4NkUsIDB4MjYsIDB4RDIsIDB4MDksIDB4QzAsIDB4MTYsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweEUxLCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgxNiwgMHhGNiwgMHg5OSwgMHhDMCwgMHgyMywgMHgyOCwgMHg5RiwgMHgyMCwgMHg3QywgMHgxMiwgMHg3MCwgMHgwOSwKKzB4QzUsIDB4MjcsIDB4MEMsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MjcsIDB4QTAsIDB4OEYsCisweDAwLCAweDdELCAweDEyLCAweEYwLCAweDE5LCAweEMzLCAweDI3LCAweDAwLCAweDlCLCAweDAyLCAweDdDLCAweDQyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1RSwgMHgwNiwgMHhGMiwgMHgwOCwgMHhDMCwgMHg1OSwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsCisweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA2LCAweDAxLCAweDFGLCAweDAyLCAweDZDLCAweDAwLCAweEIwLCAweDAwLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxMywgMHgwMCwKKzB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDYsIDB4NDEsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzEsIDB4MDEsCisweEMxLCAweDA3LCAweDIwLCAweDFGLCAweDAyLCAweDRELCAweDAwLCAweDcwLCAweDAxLCAweEMxLCAweDUwLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwMiwgMHg3NCwgMHgwMSwKKzB4MTIsIDB4MDUsIDB4QzAsIDB4OUMsIDB4MDQsIDB4NkQsIDB4MjEsIDB4MDQsIDB4ODEsIDB4MTAsIDB4NTcsIDB4NDAsIDB4NUYsCisweDAxLCAweDVELCAweDgwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQyLCAweDFGLCAweDIwLCAweDcxLCAweDA4LCAweDc0LAorMHgwMSwgMHhEMCwgMHg1NywgMHhDMCwgMHgxQywgMHgwMSwgMHg3MSwgMHgwMCwgMHhDNCwgMHgwNSwgMHgxMCwgMHgyNywgMHhDMSwKKzB4OUQsIDB4MDQsIDB4NDEsIDB4MDUsIDB4QzQsIDB4QUQsIDB4MTAsIDB4MDcsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDEzLCAweDc0LCAweDAzLCAweDEwLAorMHgwRCwgMHg0MiwgMHgzMCwgMHgxMCwgMHhDRCwgMHgwNCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgzQywgMHg0MCwgMHg3MywgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDM0LCAweDgwLCAweDQ5LCAweDUwLCAweDA1LCAweDA3LCAweDEwLCAweDE4LCAweDQwLCAweEQzLAorMHgwMSwgMHhDNSwgMHgwMSwgMHgwNCwgMHgwNywgMHg1MCwgMHgwQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MzgsIDB4MDIsIDB4RUQsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MTQsIDB4NEUsCisweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAyLCAweEM0LCAweDAzLCAweDEwLCAweDBFLCAweDQyLCAweDNCLCAweDA4LCAweEVELAorMHgwQywgMHhCNiwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHhGMywgMHgwMCwgMHhFMSwgMHgxMCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4MzgsIDB4ODAsIDB4NjksIDB4MDEsIDB4ODQsIDB4NDUsIDB4MTIsIDB4MEEsIDB4NDAsIDB4MTksIDB4MDAsCisweEIxLCAweDAwLCAweEM0LCAweDQ1LCAweDEwLCAweDBBLCAweDQyLCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHg0NywgMHgzMCwgMHg1RSwgMHhDMiwKKzB4NzgsIDB4MTAsIDB4NkYsIDB4MDEsIDB4QUMsIDB4MDcsIDB4QjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsCisweEI0LCAweDE3LCAweEYwLCAweDFFLCAweDgwLCAweDdCLCAweDQwLCAweEUzLCAweDAxLCAweEI0LCAweDA3LCAweEYwLCAweDE3LAorMHhEMCwgMHg3MCwgMHgwMCwgMHhFQiwgMHgwMSwgMHhDQywgMHgwNywgMHgzNCwgMHgxQSwgMHhDMCwgMHg1QiwgMHgwMCwgMHhFNywKKzB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MTcsIDB4QzAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEE4LCAweDM1LCAweDA0LCAweERGLCAweDAwLCAweDdDLCAweDMzLCAweEYwLCAweDhELCAweEQwLCAweDE1LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDNCwgMHgzNywgMHgxMCwgMHhERiwgMHgwNiwgMHg3QywKKzB4NTMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MDUsIDB4QzAsCisweDM1LCAweDAwLCAweEM3LCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA5LCAweEM0LCAweDEzLCAweDAwLCAweDk3LCAweDAwLAorMHg3QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QTAsIDB4N0YsIDB4MDAsIDB4N0YsIDB4MjEsIDB4Q0MsIDB4MDcsIDB4RjgsIDB4QUUsIDB4QzAsIDB4NUYsIDB4MDgsCisweEVGLCAweDAxLCAweENDLCAweDA3LCAweDcwLCAweDlGLCAweEM0LCAweDVDLCAweDAyLCAweEYzLCAweDBCLCAweENDLCAweDQ3LAorMHgzMSwgMHgxRiwgMHg0MCwgMHg1RiwgMHgyMCwgMHg3RiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywKKzB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzEsIDB4OUIsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDEsIDB4Q0YsCisweDM2LCAweDMwLCAweERGLCAweEQwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHg4OCwgMHgzOSwgMHgwMCwgMHg3RCwgMHgxMCwgMHg4NCwgMHgyMywgMHhEOCwgMHg0RSwgMHgwNCwgMHhCOCwgMHgwMCwgMHhBRCwKKzB4MDQsIDB4ODEsIDB4MDMsIDB4MTAsIDB4QUYsIDB4NDAsIDB4MUMsIDB4MDIsIDB4RjEsIDB4MjAsIDB4RDUsIDB4MDMsIDB4MTQsCisweDBFLCAweDQwLCAweDFBLCAweDAxLCAweDZELCAweDA4LCAweDg1LCAweDAzLCAweEQwLCAweDhFLCAweDAwLCAweDM5LCAweDAyLAorMHhFRCwgMHgwMCwgMHhBNCwgMHgxMSwgMHgxMCwgMHg4QSwgMHg0MCwgMHhCQiwgMHgwMSwgMHhFRCwgMHgwNCwgMHhEQywgMHgyMCwKKzB4MTAsIDB4Q0EsIDB4NDAsIDB4NTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM5LCAweDAwLCAweDZELCAweDAwLCAweDg1LCAweDAzLCAweEQwLCAweDhGLCAweDQwLCAweDE5LCAweDAwLCAweDZELCAweDQwLAorMHhDMCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MiwgMHgxOCwgMHg2NCwgMHhFMSwgMHgwMCwgMHg4MCwgMHg0MywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4M0EsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MTgsIDB4MDAsIDB4RUQsCisweDAwLCAweDM0LCAweDAzLCAweDEyLCAweDBBLCAweDQ4LCAweDNCLCAweDI0LCAweEZELCAweDIwLCAweDg0LCAweDUyLCAweDEyLAorMHhDQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3MywKKzB4MTIsIDB4MEQsIDB4MDIsIDB4MDQsIDB4NEIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDgsIDB4MDQsCisweDZGLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDAwLCAweEMxLCAweDQwLCAweDA0LCAweDBGLCAweDEwLCAweDBDLCAweDQwLAorMHgyMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwRiwgMHhEMiwgMHgwMCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhDRCwgMHg4NSwKKzB4MjQsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NzMsIDB4MTEsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDQsIDB4MTAsIDB4MzgsCisweDQwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDNELCAweDAwLAorMHg5RiwgMHgwMCwgMHhDQywgMHgxRiwgMHhEMCwgMHgyRiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg4RiwgMHgyMCwgMHg0QywgMHgwRiwKKzB4NzQsIDB4MDEsIDB4RDIsIDB4RTQsIDB4MDAsIDB4RjMsIDB4MDAsIDB4QzQsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjYsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDBCLCAweEYwLCAweDM5LCAweEMxLCAweDA0LCAweDAwLCAweDRGLCAweDQ3LCAweDc0LAorMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHhGMywgMHgwMCwgMHhERiwgMHgwMCwgMHg0NCwgMHgwNywgMHgzNCwgMHgyMSwgMHg4MCwKKzB4NTQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MjEsIDB4OUYsCisweDEwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEE1LCAweDAwLCAweDlGLCAweDEwLCAweDdELCAweDAzLCAweEYwLAorMHgwOSwgMHhDMCwgMHhBNywgMHgwNCwgMHhERiwgMHgwMSwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg4NiwgMHgwMCwKKzB4OUYsIDB4MDIsIDB4N0MsIDB4MjMsIDB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4NUYsIDB4NDAsIDB4NkMsIDB4MDIsCisweEYwLCAweDI5LCAweEMwLCAweEI3LCAweDAwLCAweDlGLCAweDkwLCAweDVDLCAweDA5LCAweEYwLCAweEM5LCAweEMwLCAweDM3LAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHg4MCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MkYsIDB4MDAsIDB4MzMsIDB4ODksIDB4Q0MsIDB4MDcsIDB4MTAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEY0LCAweDQzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHg0MywgMHhDMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QjcsIDB4MDAsIDB4RkMsIDB4MDcsIDB4MzQsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MjQsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDgwLCAweDlELCAweDA3LCAweDc0LAorMHg4MywgMHhEMCwgMHgwRCwgMHg0MiwgMHhFNywgMHgyMCwgMHgxMSwgMHg4NywgMHgwNCwgMHgwNywgMHhCMCwgMHgzMSwgMHg0MCwKKzB4RTcsIDB4MDAsIDB4REQsIDB4MjAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDYsIDB4MDAsIDB4OTksIDB4MDEsCisweDc0LCAweDgzLCAweDkxLCAweDMwLCAweDQwLCAweEU1LCAweDAwLCAweERELCAweDAxLCAweDQ0LCAweDA2LCAweEQwLCAweDM5LAorMHg0MCwgMHg3NywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgzMSwgMHg0NCwgMHg4NywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4MjAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDMsCisweEQwLCAweDBELCAweDY0LCAweDQ3LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDIzLCAweDUwLCAweDExLCAweDQwLCAweDY3LAorMHgwNCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHhDNywgMHgwMCwgMHgxRCwgMHgwMywgMHg3NCwKKzB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4NDcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NTQsIDB4QzQsIDB4RDAsIDB4MUQsIDB4NDAsCisweDc3LCAweDAwLCAweEQ1LCAweDAxLCAweDM0LCAweDFBLCAweDEwLCAweDMxLCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NjAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDQsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MjAsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDA5LCAweDAwLCAweDM0LCAweDAzLAorMHg5MCwgMHgwOSwgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDNFLCAweDAwLCAweDFELCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDMCwgMHgwNywgMHgwOCwgMHg5MywgMHgwMCwgMHg0RCwgMHgwMywgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDA5LCAweEQwLCAweDA2LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLAorMHg5NywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDJGLCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAzLCAweEEwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEZFLCAweDAwLAorMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRSwgMHgwMCwgMHhCQSwgMHgwMCwgMHhGQywgMHgwMywgMHhCMCwgMHgwQSwKKzB4QzAsIDB4MkQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MkYsIDB4MDAsIDB4QkYsCisweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDBCLCAweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBMCwgMHgyRiwgMHg0MCwgMHgyMywgMHgxMCwgMHhDRCwgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHg0QywKKzB4NDAsIDB4MzMsIDB4ODEsIDB4Q0MsIDB4MjQsIDB4MzAsIDB4MTMsIDB4RDAsIDB4MkMsIDB4MDUsIDB4RjMsIDB4MDksIDB4REMsCisweDAwLCAweDMwLCAweDRFLCAweEMwLCAweDJDLCAweDAwLCAweDNGLCAweDAxLCAweENELCAweDA0LCAweEYxLCAweDEzLCAweEMwLAorMHg0QywgMHgwOCwgMHgzMywgMHgwMSwgMHhGQywgMHgwNCwgMHhCMCwgMHgxMywgMHhENCwgMHg0QywgMHg0MCwgMHhGMywgMHgwMCwKKzB4Q0QsIDB4MDcsIDB4RjAsIDB4NEYsIDB4QzEsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDUxLCAweDkyLCAweDA0LCAweDA4LCAweDEzLCAweDA5LCAweDQwLCAweDA0LCAweDA1LAorMHgxMSwgMHgxMCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgwMSwgMHg0MSwgMHhBNCwgMHgwNSwgMHhDMSwgMHgwNCwgMHg0NCwgMHgyQywKKzB4MTAsIDB4M0YsIDB4QzAsIDB4NjQsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MDUsIDB4QzAsIDB4MDQsCisweDIwLCAweDExLCAweDAxLCAweDc0LCAweDA0LCAweDEwLCAweDAxLCAweDYwLCAweDA0LCAweDAwLCAweEMxLCAweDAwLCAweDQ0LAorMHgwNywgMHhEMSwgMHgyRCwgMHg0MCwgMHgwQywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4QTAsIDB4MjcsIDB4MDAsIDB4MDEsIDB4MDUsIDB4MDYsIDB4MEMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODEsCisweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDQ4LCAweDQ4LCAweDIxLCAweDAwLCAweDgxLCAweDA0LCAweDM0LCAweDAwLCAweEQ0LAorMHg4QywgMHg0NCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMSwgMHhEMCwgMHgwMCwgMHg0MiwgMHg0NiwgMHgyMCwKKzB4MEQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MjQsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LAorMHgyNSwgMHgwMiwgMHg1MSwgMHg0NCwgMHgxNCwgMHgwNCwgMHgxNCwgMHgxRCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwKKzB4NTUsIDB4MDMsIDB4MTQsIDB4MDksIDB4NDAsIDB4NjQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NjQsIDB4MEMsIDB4QzAsIDB4MUQsCisweDQ0LCAweDc2LCAweDA0LCAweDhELCAweDAwLCAweDc0LCAweDg5LCAweEQwLCAweDA1LCAweDUwLCAweDA0LCAweDAwLCAweDE1LAorMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MUMsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NDMsCisweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDA0LCAweDMwLCAweDMxLCAweEMyLCAweDA0LCAweDAwLCAweDEzLCAweDAxLCAweDVDLAorMHgwMCwgMHgzMCwgMHgxMSwgMHhDMCwgMHhFNCwgMHgwNCwgMHhEMywgMHgwNCwgMHg3QywgMHgwQywgMHhGMCwgMHgzNSwgMHhDMCwKKzB4RTQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MTIsIDB4MDAsIDB4NTcsIDB4MDAsCisweDNDLCAweDAxLCAweEIwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweERCLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDFELAorMHhDMCwgMHgwOCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHg0RCwgMHgwMCwKKzB4N0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MTIsIDB4M0YsIDB4MDksIDB4RUMsIDB4MDEsCisweEYwLCAweDkzLCAweDgwLCAweDJGLCAweDUwLCAweEZGLCAweDAwLCAweDVDLCAweDAwLCAweDMwLCAweDA2LCAweEMwLCAweDI1LAorMHgwMCwgMHgzRiwgMHgwOCwgMHhDQywgMHgwMCwgMHhGMiwgMHgwNywgMHhDNCwgMHgxRiwgMHgwMCwgMHg3QiwgMHgwMCwgMHhGQywKKzB4ODEsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDIsIDB4RTcsIDB4MDgsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4RDQsCisweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDQwLCAweDMzLAorMHgwMCwgMHg0QywgMHgwMCwgMHgzMiwgMHgzMSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4NTMsIDB4MDQsIDB4NkMsIDB4ODgsIDB4QjAsIDB4MkQsIDB4QzAsIDB4MzQsIDB4MTEsCisweDk3LCAweDA1LCAweDdDLCAweDAxLCAweDMwLCAweDQxLCAweEMwLCAweDE3LCAweDAyLCAweDVCLCAweDEwLCAweDRDLCAweDAzLAorMHgzMCwgMHgxOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwNCwgMHg0QywgMHgwMywgMHhGMCwgMHgxNSwgMHhDMCwgMHgwOCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MjAsIDB4NDEsIDB4MDEsCisweDQ0LCAweDE0LCAweDEwLCAweEJELCAweDQwLCAweDY0LCAweDAwLCAweDlELCAweDBCLCAweDQ0LCAweDJGLCAweEQwLCAweEE4LAorMHhDMiwgMHgyNiwgMHgwMCwgMHhEMSwgMHg4MiwgMHgwNCwgMHgwMCwgMHgxMCwgMHhBRCwgMHg0MCwgMHhCNCwgMHgwMCwgMHg5MSwKKzB4MDMsIDB4NzAsIDB4MDksIDB4MTEsIDB4MzUsIDB4NDAsIDB4OTcsIDB4MDIsIDB4NTEsIDB4MTMsIDB4NDQsIDB4NDMsIDB4MTAsCisweEI5LCAweDQwLCAweDY0LCAweDAwLCAweDlELCAweDAyLCAweDQ1LCAweDEzLCAweEQwLCAweDE1LCAweDQwLCAweDZDLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgyMCwgMHgwMiwgMHgwMSwgMHgxQSwgMHgyMCwKKzB4MDAsIDB4MTQsIDB4MjEsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NjAsIDB4MkMsIDB4RDAsIDB4MTQsIDB4NDAsCisweDM0LCAweDQwLCAweEQxLCAweDAyLCAweDI0LCAweDAwLCAweEQwLCAweDJDLCAweDQwLCAweDAwLCAweDIwLCAweDQ1LCAweDAyLAorMHgzMCwgMHg2MiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4MCwgMHg0MSwgMHgwNCwgMHgwNCwgMHgxMCwgMHgwNCwKKzB4NDAsIDB4MTAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDY4LCAweDAwLCAweDMxLCAweDAxLCAweEE1LCAweDA0LAorMHgxMCwgMHgxQiwgMHg0MCwgMHg1OCwgMHgwMCwgMHg2RCwgMHgwMSwgMHhBNCwgMHgwNSwgMHhEMCwgMHgxNiwgMHg0MCwgMHg2QSwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MjQsIDB4NTAsIDB4OUUsIDB4NDAsIDB4NTgsIDB4MDAsIDB4NjEsIDB4MDEsIDB4QjYsCisweDA2LCAweDEwLCAweDFFLCAweDQwLCAweDZGLCAweDAwLCAweEIxLCAweDgxLCAweEM0LCAweDA0LCAweDEwLCAweDE2LCAweDQwLAorMHg1OCwgMHgwMCwgMHhFRCwgMHgwOSwgMHg4NCwgMHgwNywgMHhEMCwgMHgyRiwgMHg0MCwgMHg3NCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MDEsIDB4MDMsIDB4MDgsIDB4MjQsIDB4MDAsIDB4MzAsCisweDY0LCAweEMwLCAweDMwLCAweDAwLCAweERGLCAweDAwLCAweDJDLCAweDAyLCAweEYwLCAweDBDLCAweEMxLCAweDE0LCAweDIwLAorMHg4MywgMHgwMCwgMHgyQywgMHgyMCwgMHhGMiwgMHgwOCwgMHhEMCwgMHgxMCwgMHgwMCwgMHhDNywgMHgwMCwgMHgzQywgMHgwMywKKzB4MzAsIDB4NDgsIDB4QzEsIDB4MjMsIDB4MTAsIDB4ODMsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MzIsIDB4MEQsIDB4RDAsIDB4MzAsCisweDAwLCAweDhGLCAweDAwLCAweDBELCAweDAzLCAweEYwLCAweDhDLCAweEM4LCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgzRCwgMHg0MCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwRSwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDgsIDB4REQsIDB4MDMsIDB4RjIsIDB4OEUsIDB4QzQsIDB4MkYsIDB4MjAsIDB4RkYsCisweDAwLCAweEZDLCAweDIwLCAweEIwLCAweDBGLCAweEMyLCAweDFGLCAweDAyLCAweEZGLCAweDA4LCAweEJDLCAweDIzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhBNywgMHgwMCwgMHhCQywgMHgwMiwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4NEUsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweDM0LCAweDA1LCAweEMwLAorMHgxNCwgMHgwMCwgMHg1RiwgMHgwMSwgMHg0QywgMHgwMCwgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhDRiwgMHgwMCwKKzB4NEMsIDB4MDQsIDB4MzAsIDB4NEMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEQwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweERGLAorMHgwMCwgMHgwRCwgMHgwMywgMHgzMCwgMHgwQywgMHhEMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4ODAsIDB4MEQsIDB4MTAsIDB4MjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MTgsCisweDMwLCAweDZELCAweDAwLCAweDg0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDI4LCAweDAwLCAweEVELCAweDAwLCAweEFDLAorMHgwMCwgMHg5MCwgMHgwRSwgMHg0MywgMHgzOCwgMHg0OCwgMHg2MSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MiwKKzB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RkQsIDB4MDAsCisweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDYwLCAweDRDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNCwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NjAsIDB4NzgsIDB4MDAsIDB4RkQsIDB4MDEsIDB4MDQsIDB4NDAsCisweEQwLCAweDFBLCAweDQwLCAweDc4LCAweDAwLCAweEU5LCAweDIxLCAweEI2LCAweDA3LCAweEQwLCAweDFBLCAweDQwLCAweDc4LAorMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwKKzB4MDcsIDB4MTAsIDB4MTcsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDI4LCAweDMzLCAweDAyLCAweDgxLCAweDAwLCAweDc0LCAweDI3LCAweDEwLCAweDdDLCAweDQwLCAweDMwLCAweDAwLCAweENELAorMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MiwgMHgyMCwgMHgwMSwgMHhDRCwgMHg4MywgMHgyNCwgMHgwNywgMHhEMCwKKzB4MkMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MzQsIDB4MDAsCisweEMxLCAweDQwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDA5LCAweDA0LCAweDAzLAorMHgxNSwgMHgwNCwgMHg2MCwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwKKzB4MTksIDB4NDAsIDB4NzMsIDB4NDIsIDB4RkMsIDB4MDUsIDB4MzAsIDB4NTcsIDB4RDAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsCisweDRELCAweDAxLCAweEYwLCAweDA1LCAweEQwLCAweDFDLCAweDIwLCAweDdGLCAweDA1LCAweENDLCAweDA5LCAweDc0LCAweDI3LAorMHhDMCwgMHhEQywgMHgwMywgMHg1QiwgMHg4MCwgMHgzQywgMHgwMSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsCisweDI3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDg1LAorMHgxNCwgMHgwRiwgMHgyNCwgMHg3QywgMHgwNCwgMHhGNCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHg4MCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MTAsIDB4MzAsIDB4NjEsIDB4RDAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEQxLCAweDAxLCAweEM4LCAweDA3LCAweDQwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzEsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsCisweDkzLCAweDAxLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHgzMCwgMHg4OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNCwgMHgwQywgMHgwQSwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyMiwKKzB4NzAsIDB4OTMsIDB4ODAsIDB4N0MsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDIsIDB4OTMsIDB4MDUsIDB4N0MsCisweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgxMCwgMHg5MSwKKzB4MjgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjgsIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsCisweDM5LCAweDQwLCAweDI0LCAweDIwLCAweDgxLCAweDAwLCAweDZDLCAweDAyLCAweDEwLCAweDI4LCAweDQwLCAweEE0LCAweDAwLAorMHg5MSwgMHgwMiwgMHg1QywgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHhFNCwgMHgwOCwgMHg5MSwgMHgyMSwgMHg3NCwgMHg4MiwKKzB4RDAsIDB4MjksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDUsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDAsIDB4MDQsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQ2LCAweDkxLCAweDIwLAorMHg0NCwgMHgwMiwgMHgxMiwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMSwgMHhCRCwgMHgwNCwgMHhGNCwgMHgwMiwgMHgxOCwgMHgwQSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NjQsIDB4MDIsIDB4MTksIDB4MEQsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTEsCisweDAwLCAweEY0LCAweDIyLCAweDFDLCAweDBGLCAweDQwLCAweDJDLCAweDA0LCAweEIxLCAweDAwLCAweEY0LCAweDA2LCAweEQwLAorMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHg4RCwgMHgwQSwgMHg2NCwgMHgwMiwgMHgxMCwgMHgxOCwgMHg0MCwgMHg2MiwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjQsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MDQsCisweDEyLCAweDEwLCAweDQ4LCAweDUwLCAweDY4LCAweDAwLCAweEFELCAweDAxLCAweEI0LCAweDAyLCAweDEwLCAweDFBLCAweDQyLAorMHgyMCwgMHgwMSwgMHg5MSwgMHgwMCwgMHgyNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgzMiwgMHgwMSwgMHhBMSwgMHgwMSwKKzB4RDQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MjgsIDB4MjAsIDB4QTEsIDB4MDEsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MUEsCisweDQwLCAweDZCLCAweDAwLCAweDhELCAweDA0LCAweDI1LCAweDAyLCAweDEwLCAweDU4LCAweDUwLCAweDQyLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHg4NiwgMHgwMiwgMHg1MywgMHgwQSwgMHg0RCwgMHgyOCwKKzB4MzQsIDB4QTAsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MEYsIDB4MEEsIDB4N0MsIDB4MjksIDB4MzAsIDB4QTIsIDB4NDAsIDB4ODQsCisweDAyLCAweDEzLCAweDBBLCAweDZDLCAweDAwLCAweDMwLCAweDA1LCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDBBLCAweDdDLAorMHgwMCwgMHgzMCwgMHhBMCwgMHhEMCwgMHg4MCwgMHgwMiwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwgMHhDMCwKKzB4OEYsIDB4MDIsIDB4MUYsIDB4MEEsIDB4NkMsIDB4MDAsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzYsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDJGLCAweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLCAweEYwLAorMHg4QiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGNCwgMHgwOSwgMHhEMCwgMHgyRiwgMHg0MiwKKzB4QkYsIDB4ODAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjksIDB4ODIsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHhCRiwgMHgwOCwgMHg1QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDEsIDB4QTMsIDB4MTQsIDB4RkMsIDB4MzIsIDB4RjAsIDB4MEIsCisweEQwLCAweDJDLCAweDAwLCAweEIzLCAweDA4LCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDI2LCAweDE5LCAweEIzLAorMHgwMCwgMHhDQywgMHgwNiwgMHgzMCwgMHgxQiwgMHhDMSwgMHg2RSwgMHgwNCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwKKzB4MEIsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzEsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDIsCisweEJGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDhGLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxNywgMHg0NSwgMHgxMSwgMHgwNCwgMHg3NCwgMHgzMCwgMHhEMCwgMHgyMCwgMHg0MSwKKzB4MTQsIDB4NDQsIDB4NTEsIDB4MDAsIDB4NzQsIDB4NTAsIDB4MTAsIDB4NDEsIDB4NTAsIDB4MDQsIDB4MDIsIDB4MTMsIDB4MDAsCisweDZDLCAweDI4LCAweDE0LCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDVELCAweDA0LCAweDc0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MSwgMHgwNCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHg0NSwgMHg0MCwgMHgxNCwgMHgwMSwgMHgxRCwKKzB4MTIsIDB4NDUsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDQzLCAweDgxLCAweDE0LCAweDM0LCAweDEyLCAweEQwLCAweEM4LCAweDUwLCAweDIwLAorMHgxMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgxNiwgMHgxNCwgMHg0OCwgMHg0MSwgMHgyNCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgyNCwKKzB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4OTQsIDB4NzQsIDB4MDIsIDB4OTgsIDB4NDksIDB4NDAsCisweDIyLCAweDAwLCAweDkxLCAweDAwLCAweDE0LCAweDAyLCAweDkwLCAweDQ4LCAweDQxLCAweDIyLCAweDExLCAweDhELCAweDBDLAorMHgwNCwgMHgwMiwgMHhEMCwgMHgxOCwgMHg0MCwgMHg0OCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4NDksIDB4NDEsIDB4MjAsIDB4MDAsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDI5LCAweDQwLCAweEE0LCAweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDYyLAorMHg5OCwgMHgxOSwgMHg0NCwgMHgyNCwgMHgwMiwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg5QywgMHgwOSwgMHg1MCwgMHgyMiwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NTAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDgsIDB4NDQsCisweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHgwMCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNCwgMHgwMCwgMHg5MywKKzB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MTAsIDB4NkQsIDB4MEEsIDB4QjAsCisweDc5LCAweEMwLCAweDI2LCAweDEwLCAweDlGLCAweDAyLCAweDNDLCAweDAyLCAweEIwLCAweDA4LCAweEMyLCAweDI2LCAweDQwLAorMHg4MywgMHgwMCwgMHg1QywgMHg0MiwgMHhCNCwgMHgyOSwgMHhDMCwgMHhBNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MTksIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsCisweEU1LCAweDAwLCAweDlGLCAweDEwLCAweDdDLCAweEE2LCAweEYwLCAweDE4LCAweEQwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5NywgMHgxNSwgMHg3RSwgMHgwNiwgMHg3MCwgMHgwOSwKKzB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsIDB4NzIsIDB4MDksIDB4QzEsIDB4MjUsIDB4MDAsIDB4OUYsCisweDAwLCAweDZELCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI1LCAweDA0LCAweDlGLCAweDEwLCAweDdFLCAweDAyLCAweEYwLAorMHg0OSwgMHhEMSwgMHg1QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MSwKKzB4MDEsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MjAsIDB4MzQsIDB4ODEsIDB4QzAsIDB4ODYsIDB4NDQsIDB4MTMsIDB4MTIsIDB4NkQsCisweDA0LCAweEYwLCAweDgxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAyLCAweDRDLCAweDg4LCAweDMwLCAweDIwLCAweEMwLAorMHgwNCwgMHgwOCwgMHgxRiwgMHgwMiwgMHg0RCwgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwKKzB4N0MsIDB4NDAsIDB4RjAsIDB4MjEsIDB4RDAsIDB4ODQsIDB4NDAsIDB4MTMsIDB4MDgsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDFDLCAweDAwLAorMHg3MSwgMHg4MiwgMHg0NCwgMHgwNSwgMHgxMCwgMHgxNywgMHhDMCwgMHg5QywgMHgwMCwgMHg3MSwgMHgwMiwgMHg4NCwgMHgwNSwKKzB4RDAsIDB4MTYsIDB4NDAsIDB4MTAsIDB4MDAsIDB4N0QsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTQsIDB4MzcsIDB4NDAsIDB4OUMsCisweDAwLCAweDdELCAweDAzLCAweEM0LCAweDExLCAweEQwLCAweDE3LCAweEMwLCAweDFDLCAweDAwLCAweDcxLCAweDAwLCAweEIwLAorMHg0RCwgMHhEMCwgMHgwNywgMHg0MCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMSwgMHg0NSwgMHgwMSwgMHhEMCwgMHgxNywgMHg0MSwKKzB4NTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4NDAsIDB4ODEsCisweDAyLCAweDI0LCAweDA3LCAweDEwLCAweDBDLCAweDQwLCAweEIwLCAweDAwLCAweEMxLCAweDAyLCAweDA0LCAweDI3LCAweEQwLAorMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg1RCwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHhCOCwgMHg1MSwgMHhCMCwgMHgyMSwKKzB4Q0QsIDB4MDUsIDB4MDAsIDB4MDcsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MTMsIDB4MzQsIDB4MEIsCisweEQ4LCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweDkxLCAweDAzLCAweDA0LCAweDAyLCAweEQwLCAweDJDLCAweDQwLCAweDUwLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgyOCwgMHgwMCwgMHgzMSwgMHgwMSwKKzB4QTQsIDB4MDYsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsCisweDQyLCAweDM4LCAweDIxLCAweEVELCAweDAwLCAweDk0LCAweDAzLCAweDkwLCAweDA4LCAweDQwLCAweDE4LCAweDA0LCAweEVELAorMHgwMywgMHg4NCwgMHgwMSwgMHhEMSwgMHgyRiwgMHg1MCwgMHgzOCwgMHgwMCwgMHgyMSwgMHgxMCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MTQsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDVDLCAweDAyLCAweDYzLCAweDAxLCAweEVDLAorMHgwNywgMHgzMCwgMHgxRSwgMHhEMSwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxQSwgMHhEMCwKKzB4RjgsIDB4MjEsIDB4M0YsIDB4MDEsIDB4ODQsIDB4MDcsIDB4QjAsIDB4MTYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RkYsIDB4MjEsCisweDhDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDdDLCAweDQwLCAweDIzLCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFGLAorMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHg4NCwgMHgwNiwgMHhGMCwgMHgxRSwgMHhEMCwgMHg1NCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4OUQsIDB4MDAsIDB4MUYsIDB4ODAsIDB4NUQsIDB4MTIsCisweEYwLCAweDA3LCAweEMwLCAweDM1LCAweDA4LCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYyLCAweDAwLCAweEMwLCAweDc3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzUsIDB4MDgsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg3RCwgMHgwMCwgMHgyMywgMHgwMSwgMHhDQywgMHgzRiwgMHhGOCwKKzB4OEIsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4QjAsIDB4OUIsIDB4QzAsIDB4N0YsIDB4MDAsCisweEU3LCAweDAxLCAweDhDLCAweDg3LCAweDI0LCAweDFFLCAweEMwLCAweDVELCAweDAwLCAweEYzLCAweDAxLCAweEQ0LCAweDI1LAorMHhCMCwgMHgxRiwgMHhEOCwgMHg3QywgMHgwMCwgMHgzMiwgMHgwMSwgMHhGQywgMHgwNSwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywKKzB4MDAsIDB4NzMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MTcsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDI5LCAweDAwLCAweDIxLCAweDgyLCAweDg0LCAweDYyLCAweDMwLCAweDQ3LAorMHg0MCwgMHgzQywgMHgwMCwgMHhFMSwgMHgwMCwgMHhCQywgMHgwMiwgMHgxMCwgMHhDRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFQiwKKzB4MDAsIDB4QUMsIDB4MTMsIDB4MzAsIDB4MEUsIDB4NDAsIDB4OTgsIDB4NDAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDEsIDB4MTQsCisweDRCLCAweEMxLCAweDNDLCAweDAwLCAweDIxLCAweDA4LCAweEI0LCAweDA4LCAweEQwLCAweDJFLCAweDQwLCAweDNDLCAweDAwLAorMHhFMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHg4MiwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjEsIDB4MDAsIDB4MDQsIDB4MTMsIDB4NTAsIDB4OEEsIDB4NTAsCisweDM4LCAweDAwLCAweEU5LCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDBBLCAweDYwLCAweDMzLCAweDAwLCAweEI1LCAweDAwLAorMHhBNCwgMHg4MywgMHg4MCwgMHgwRiwgMHg1MCwgMHgzQiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg5NCwgMHgwMCwgMHg5NCwgMHgwRSwKKzB4NjAsIDB4MzgsIDB4MDAsIDB4MjksIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsCisweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDA2LCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgyOCwgMHg1MSwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwNSwgMHgwQSwgMHgxMiwgMHhCNSwgMHg0MSwgMHgzMCwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDQsIDB4NjAsIDB4RjMsIDB4NDAsIDB4ODksIDB4MDMsIDB4MjQsCisweDIzLCAweDEwLCAweDFDLCAweDQwLCAweDMyLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAxLCAweDkwLCAweDA4LCAweDQwLAorMHgzMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4MDUsIDB4MDIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDY1LCAweDQwLCAweDEzLCAweDA3LCAweDRDLCAweDBFLCAweDcwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLAorMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwOCwgMHhDMiwgMHgzRiwgMHgyMCwgMHgwNywgMHgwRCwgMHgwQywgMHgwQSwKKzB4QjAsIDB4NUQsIDB4QzAsIDB4NzMsIDB4MDQsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDIsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzQsCisweDAwLCAweDBCLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEQwLCAweDM0LCAweDAwLCAweDkzLCAweDA1LCAweDRDLAorMHgwMywgMHhGMCwgMHgwQywgMHhDMSwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDgsIDB4MjcsIDB4MDIsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTcsCisweDAwLCAweDVDLCAweDA3LCAweEYwLCAweDI5LCAweEMwLCAweDM3LCAweDA2LCAweDk3LCAweDAwLCAweDdDLCAweDQyLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNSwgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MiwgMHgyNSwgMHhDMCwgMHhBNSwgMHgwMCwKKzB4MTMsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LAorMHgwRiwgMHg2MCwgMHg3MywgMHgwMCwgMHhBQywgMHg0MiwgMHhCMCwgMHgwMywgMHhDMCwgMHgxQywgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4MzAsIDB4NEIsIDB4QzAsIDB4M0UsIDB4MDAsIDB4MzMsIDB4MDUsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4NEYsCisweDQwLCAweDM3LCAweDAwLCAweEYzLCAweDAwLCAweEVDLCAweDAyLCAweEUwLCAweDNGLCAweEMwLCAweDFDLCAweDAwLCAweDMxLAorMHgwMCwgMHhDQywgMHgwMSwgMHhGMCwgMHgwNywgMHg4MCwgMHg1QywgMHgwMCwgMHg1MywgMHgwMCwgMHhDQywgMHgwNywgMHhGMCwKKzB4M0YsIDB4RTAsIDB4MDAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4QzYsCisweDAwLCAweDExLCAweDIyLCAweDQ0LCAweDA2LCAweDEwLCAweDMxLCAweDQwLCAweDE0LCAweDAwLCAweDVELCAweDAxLCAweDM0LAorMHgwNywgMHgxMCwgMHg1OSwgMHg0MiwgMHgzMCwgMHg0MCwgMHg5MSwgMHg0MCwgMHg1NCwgMHgwMywgMHgxMCwgMHg3RCwgMHg0MCwKKzB4RjcsIDB4MDAsIDB4OUIsIDB4MDEsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MDUsIDB4NTAsIDB4MzQsIDB4MDAsIDB4MTEsIDB4MDcsCisweDRDLCAweDBDLCAweEQwLCAweDNELCAweDQwLCAweEQ0LCAweDAyLCAweEQxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDM5LAorMHg1MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhDMiwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4NjQsIDB4MTMsIDB4OTAsIDB4MTksIDB4NDEsIDB4NzYsIDB4MDAsIDB4REQsIDB4ODgsIDB4NzQsIDB4MDcsCisweDE0LCAweDA5LCAweDQ4LCAweDM0LCAweDAwLCAweDk5LCAweDQwLCAweDQ2LCAweDEyLCAweDEwLCAweDBELCAweDQ4LCAweDY3LAorMHgwMCwgMHhEMSwgMHgwNCwgMHg2NCwgMHgwNCwgMHhEMCwgMHgyQywgMHg0MCwgMHhCMiwgMHgwMSwgMHgxNSwgMHgwMSwgMHg2NCwKKzB4MDUsIDB4RDAsIDB4OEQsIDB4NDAsIDB4MzEsIDB4MDQsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MTMsIDB4RDAsIDB4MkQsIDB4NDAsCisweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg1MCwgMHg2MiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwNywgMHgxNCwKKzB4MDksIDB4NDIsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NjAsIDB4MjMsIDB4NDAsCisweEM5LCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDIyLCAweDgwLCAweDA1LCAweDgwLCAweDA0LCAweDAwLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MEUsIDB4MDAsIDB4NTMsIDB4MDAsCisweEVDLCAweDAzLCAweEIyLCAweDAzLCAweEQwLCAweDM2LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDAzLCAweDE0LCAweDA5LAorMHhEMCwgMHgzNiwgMHgwMCwgMHg5MiwgMHgwMCwgMHg0QywgMHgwMywgMHgzNCwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwgMHg0MywKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MTYsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsCisweDA0LCAweEQwLCAweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDAwLCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjEsIDB4MDMsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDEsIDB4RjQsIDB4MEIsIDB4QzAsCisweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLAorMHhCNCwgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHgzQiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4M0UsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDAyLAorMHhGMCwgMHgxRiwgMHhDOCwgMHgzRiwgMHgwMSwgMHhCRiwgMHgyMiwgMHhGQywgMHgwQSwgMHgzMCwgMHgwQiwgMHhDMCwgMHhCRiwKKzB4MDUsIDB4RUYsIDB4MDksIDB4RUMsIDB4MTAsIDB4QjAsIDB4M0YsIDB4QzAsIDB4QkQsIDB4MDAsIDB4QjMsIDB4MDQsIDB4Q0MsCisweDgyLCAweDMyLCAweDJGLCAweEM0LCAweDJGLCAweDQwLCAweEYyLCAweDAxLCAweENDLCAweDEzLCAweEYwLCAweDEyLCAweDQ0LAorMHg3QSwgMHgyMCwgMHgzMywgMHhDQywgMHhFQywgMHgwNiwgMHg5MCwgMHgxRiwgMHg0MCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MjYsIDB4RDAsCisweDFELCAweDQwLCAweEJGLCAweDA1LCAweDFELCAweDAyLCAweDc0LCAweDM4LCAweDEwLCAweEMxLCAweDQwLCAweEJGLCAweDAwLAorMHhERCwgMHgwMCwgMHg2NCwgMHgyQywgMHgwNCwgMHg0RCwgMHg0MCwgMHhCRiwgMHgwOCwgMHgxMSwgMHgxNCwgMHg3NCwgMHg0MCwKKzB4MTAsIDB4NkYsIDB4NDAsIDB4RTcsIDB4MDAsIDB4RDUsIDB4MDEsIDB4QzQsIDB4MEYsIDB4RDAsIDB4MTksIDB4NDAsIDB4NzQsCisweDAwLCAweDAxLCAweDIyLCAweDQ0LCAweDA2LCAweDEyLCAweDFELCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg4MCwgMHhEOCwgMHgwQywKKzB4NDAsIDB4QjMsIDB4MDAsIDB4OEQsIDB4MjYsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4MTEsIDB4Q0QsCisweDgwLCAweDI0LCAweDAyLCAweDAwLCAweDBDLCAweDQwLCAweDMxLCAweDgzLCAweDgxLCAweDhDLCAweDA0LCAweEIyLCAweDEyLAorMHgyQywgMHg2MCwgMHgwMywgMHg0MiwgMHhENSwgMHgwMCwgMHgxNCwgMHgyMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwKKzB4NDUsIDB4MjYsIDB4NjQsIDB4MDEsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NEUsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDI4LCAweDM1LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDBELCAweDQ0LAorMHgzNywgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0NCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwKKzB4NjYsIDB4ODQsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDYsIDB4MTgsIDB4MEQsCisweDQwLCAweDQ3LCAweDAwLCAweDU1LCAweDExLCAweDU0LCAweDAzLCAweEQwLCAweDE5LCAweDQzLCAweDM3LCAweDgwLCAweDExLAorMHgxOCwgMHg0NCwgMHgwRSwgMHgxMCwgMHgwRCwgMHg0MiwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MUUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweDlGLCAweDg3LCAweDdDLCAweEM0LCAweDMwLCAweDE5LCAweEMyLCAweDM3LCAweDE4LCAweERGLCAweDAwLCAweDZDLAorMHgwNCwgMHgzMCwgMHgwRCwgMHhDNCwgMHgzNSwgMHgwOCwgMHgxMywgMHgwMSwgMHg0QywgMHgxRSwgMHgzNCwgMHgwRCwgMHhDMiwKKzB4NjcsIDB4NDAsIDB4RDcsIDB4MDEsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MTksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTUsIDB4MDIsCisweDJDLCAweDBFLCAweEIwLCAweDBELCAweEMwLCAweDIyLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg4MiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg5MCwKKzB4M0YsIDB4OTAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDMsIDB4OUMsIDB4NDAsCisweDcwLCAweDBGLCAweEMwLCAweDM3LCAweDQwLCAweDNGLCAweDQwLCAweEZDLCAweDAwLCAweDcwLCAweDBGLCAweEMwLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwQywgMHgyRiwgMHgwMSwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDkzLAorMHgwMiwgMHg3QywgMHgwQSwgMHgzMCwgMHgwMSwgMHhDMCwgMHgzNCwgMHg0MCwgMHhEMywgMHgwNCwgMHg0RSwgMHgwMiwgMHhGMSwKKzB4MEQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4MTMsIDB4MDgsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsCisweEQzLCAweDIyLCAweDdDLCAweDAzLCAweDMwLCAweDI5LCAweEMwLCAweDM0LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDBELAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwKKzB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4RDEsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4OTEsIDB4ODAsCisweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDNDLCAweDI0LCAweERCLCAweDAyLCAweDY2LCAweDRBLCAweEQwLCAweDBELAorMHg0OCwgMHhCQywgMHg0MiwgMHgxQiwgMHg4QiwgMHg3NCwgMHgwMiwgMHhGMCwgMHgzRiwgMHhDMSwgMHg2MiwgMHgwMSwgMHg4QSwKKzB4MDQsIDB4RjAsIDB4MDMsIDB4QjEsIDB4QTgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MUIsIDB4MEUsIDB4NDQsIDB4MEYsIDB4RDAsCisweDBDLCAweDQwLCAweDZGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4RjAsIDB4MDksIDB4RDEsIDB4ODEsIDB4MjQsIDB4MEUsIDB4RDAsIDB4MEMsIDB4NDgsCisweDcwLCAweDAwLCAweDg5LCAweDAzLCAweDc0LCAweDAwLCAweEQwLCAweDZDLCAweDQyLCAweDAyLCAweDAxLCAweEM1LCAweDMwLAorMHgyMCwgMHgwNywgMHgwMCwgMHhCQywgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4NzgsIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweDYxLCAweDExLCAweEI0LCAweDA3LAorMHgxMCwgMHgxNiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgyNSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3OCwKKzB4MDAsIDB4NjEsIDB4MDEsIDB4QjQsIDB4MDUsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDA3LCAweDkwLCAweDBGLCAweDQwLCAweDc4LCAweDA0LCAweEU5LCAweDAxLCAweDg0LCAweDBFLCAweEQwLCAweDFFLCAweDQwLAorMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwKKzB4MDAsIDB4M0MsIDB4MDEsIDB4RDAsIDB4OEMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MTAsCisweDhELCAweEQwLCAweDM0LCAweDIyLCAweEMxLCAweDkwLCAweDA0LCAweDJCLCAweEQ4LCAweDBELCAweEQwLCAweDMwLCAweDA2LAorMHhDOSwgMHgwMCwgMHgzQywgMHgwMSwgMHhEMCwgMHg0RCwgMHhDMCwgMHgxMiwgMHgwMCwgMHhDMywgMHgwNCwgMHgyQywgMHg1MywKKzB4MzAsIDB4OEMsIDB4ODAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4RTQsIDB4MEMsIDB4ODMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NEIsCisweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGNCwgMHg4RiwKKzB4QzAsIDB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4NUQsIDB4QTEsIDB4RjgsIDB4MEYsIDB4QzAsIDB4QkYsIDB4MDAsIDB4RkYsCisweDgwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDFCLCAweDAyLCAweEZCLCAweDAwLCAweEIwLCAweDRCLCAweEYwLAorMHhDRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4ODAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAxLCAweDcwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDA1LCAweDMwLCAweDBELCAweEMyLAorMHhCNSwgMHgwMiwgMHhDRiwgMHgwMCwgMHg1RCwgMHgwMywgMHgzOCwgMHgxRCwgMHhDMCwgMHgzNSwgMHgwMSwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4NkQsIDB4QzAsIDB4MTAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4NkMsIDB4MTMsIDB4RjAsIDB4MDksCisweEMwLCAweDM3LCAweEEwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweEQwLCAweDBDLCAweEMwLCAweDQyLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4MDAsIDB4M0IsIDB4MTMsIDB4NkMsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDA0LCAweEVELCAweDAwLCAweDk0LCAweDAzLCAweDQxLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgwMSwgMHhEMCwgMHg4RiwgMHhDMCwgMHgzQSwgMHgwMCwgMHhFNSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MiwKKzB4M0IsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDc5LCAweDg4LCAweEU1LCAweDIxLCAweEI0LCAweDQ3LCAweEQwLAorMHgxRSwgMHg0NCwgMHg3QiwgMHgxMiwgMHhFQywgMHgwMSwgMHgzNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMSwKKzB4RUQsIDB4MjEsIDB4MTQsIDB4MDcsIDB4MDEsIDB4MUUsIDB4NEMsIDB4NzksIDB4MDIsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsCisweEQ4LCAweDVGLCAweDQwLCAweDc4LCAweDAwLCAweEY1LCAweDExLCAweEI0LCAweDE3LCAweEQwLCAweDNBLCAweDQwLCAweDdCLAorMHgwMCwgMHhFRCwgMHgyMSwgMHg4NCwgMHg0NywgMHhEMCwgMHgxRSwgMHg0OCwgMHgxMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MEYsIDB4RDAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAxLCAweDM0LCAweDAzLCAweDEwLCAweDlDLCAweDQwLCAweDMzLCAweDAwLCAweDhELAorMHhBMCwgMHgxNSwgMHgwNywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgxMCwgMHhERCwgMHgwMywgMHgzNCwgMHgwNywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4RjIsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4ODAsCisweERELCAweDBELCAweDA0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDVBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwOCwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4N0YsIDB4MEUsIDB4RjQsIDB4MDEsIDB4QjAsIDB4QTcsIDB4QzIsIDB4MTUsIDB4MDgsIDB4NEYsIDB4MDUsCisweERDLCAweDFELCAweDM1LCAweDA1LCAweEM0LCAweDE1LCAweDAwLCAweDdGLCAweDg1LCAweEZDLCAweEVELCAweEYwLCAweDA1LAorMHhDMCwgMHgxQywgMHg4MSwgMHg3NywgMHgwMSwgMHg3QywgMHgwMSwgMHhGMSwgMHgwNiwgMHhDMCwgMHgxNywgMHgwOCwgMHg3RCwKKzB4MDIsIDB4Q0QsIDB4MDUsIDB4RjAsIDB4MDQsIDB4QzAsIDB4NUUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMiwgMHg3OCwgMHgwNCwgMHg3NCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRSwgMHgwMCwgMHg3RCwKKzB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDYsIDB4N0MsIDB4MDAsIDB4QzAsIDB4MDAsIDB4QzAsCisweDg3LCAweDgxLCAweDFGLCAweDEwLCAweDY0LCAweDA4LCAweEYyLCAweDIxLCAweEMxLCAweDg3LCAweDIwLCAweDFGLCAweDAyLAorMHg3RCwgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0OSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsCisweDgzLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDI2LCAweDAyLCAweDlGLCAweDA0LCAweDBDLCAweDAyLAorMHgzNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5QywgMHgwOCwgMHgwQywgMHgwMiwgMHgzMCwgMHg1OSwgMHhDMCwgMHhBMCwKKzB4MjAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4ODYsIDB4RjAsIDB4MTksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsCisweDA2LCAweEYwLCAweDA5LCAweEQwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwKKzB4MDAsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MDksIDB4RDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NkMsIDB4NDIsIDB4NTAsCisweDA5LCAweDQwLCAweDI3LCAweDIxLCAweDlELCAweDAyLCAweDQ1LCAweDAyLCAweDE0LCAweDI5LCAweDUwLCAweEU0LCAweDQwLAorMHg4MSwgMHgxMywgMHg0NCwgMHg4NiwgMHhEMCwgMHg4OSwgMHg0MCwgMHg2NCwgMHgwOCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgxQSwKKzB4RDAsIDB4MTksIDB4NDAsIDB4MDQsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsCisweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDA4LAorMHg0NCwgMHgwMiwgMHhEOSwgMHgwQywgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NSwgMHgyMiwgMHg5MiwgMHgwOSwKKzB4NDQsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDIsIDB4NTYsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDgsIDB4MzQsIDB4MDQsIDB4OTEsCisweEE0LCAweDU0LCAweDJBLCAweEQxLCAweDI5LCAweDUwLCAweEE2LCAweDAwLCAweDlELCAweDBBLCAweDY0LCAweDIyLCAweEQwLAorMHg4OSwgMHg2MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MzEsIDB4ODEsIDB4MDQsIDB4MDQsCisweDEyLCAweEQ4LCAweDQ4LCAweDRDLCAweDIwLCAweDAxLCAweDhELCAweDAxLCAweDI0LCAweDEyLCAweDkwLCAweDA4LCAweDQwLAorMHgyMywgMHgyMSwgMHg4RCwgMHgyNCwgMHgxNiwgMHgxMiwgMHg1MCwgMHg0QywgMHgwNCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgyMCwKKzB4MDAsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3NCwgMHgwMCwgMHgzMCwgMHgwMSwgMHg0MCwgMHg4NywgMHgwQSwgMHg1MywgMHgwQSwgMHg0QywgMHgyOCwKKzB4RjAsIDB4QTEsIDB4QzIsIDB4OTQsIDB4MDIsIDB4MUYsIDB4MEEsIDB4NkMsIDB4MDAsIDB4MzAsIDB4QTAsIDB4QzAsIDB4ODcsCisweDAyLCAweDFGLCAweDBBLCAweDVDLCAweDI4LCAweDcwLCAweEExLCAweDgwLCAweDA0LCAweDEwLCAweDEyLCAweDAwLCAweDVDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRCwgMHgzNiwgMHg2RCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLCAweEYwLAorMHg4QiwgMHg0MCwgMHgyNywgMHgwMiwgMHhCRiwgMHgyMCwgMHhGRCwgMHgyMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwKKzB4QkYsIDB4MDgsIDB4RTgsIDB4MjIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MjIsCisweEYzLCAweDBCLCAweEMwLCAweDI1LCAweDAwLCAweEJGLCAweDA0LCAweERDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDc3LAorMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMCwKKzB4RkMsIDB4MTYsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTcsIDB4MjAsIDB4QkYsIDB4MjEsIDB4NkMsIDB4MTMsIDB4RjAsIDB4RDksCisweEM2LCAweEVGLCAweDA4LCAweEIzLCAweDAyLCAweENDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDZGLCAweDA0LCAweEIzLAorMHgwNywgMHg0QywgMHgxRSwgMHhGMCwgMHg1QiwgMHhDMCwgMHg2OCwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgxMiwgMHgzNCwKKzB4MEIsIDB4QzIsIDB4MkYsIDB4MjAsIDB4QkYsIDB4MDAsIDB4QzQsIDB4MDIsIDB4QjQsIDB4MEIsIDB4QzAsIDB4NzcsIDB4ODAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDc0LAorMHgyOCwgMHgxMCwgMHgwMSwgMHg0QywgMHg0NywgMHgwOCwgMHgxQywgMHgxNywgMHg0NSwgMHg1MSwgMHhEMCwgMHhGNSwgMHg0MCwKKzB4QzcsIDB4NDAsIDB4MTEsIDB4MDUsIDB4NTQsIDB4MDgsIDB4NzAsIDB4NTEsIDB4NDEsIDB4NDcsIDB4NDAsIDB4MTEsIDB4MDMsCisweDQ1LCAweDBELCAweEQwLCAweDcxLCAweDUxLCAweDg0LCAweDQwLCAweDE1LCAweDAwLCAweDc0LCAweDAwLCAweDExLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgyMCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgwMSwgMHg0MCwgMHg2MiwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsCisweDEwLCAweDA4LCAweDQwLCAweEEzLCAweDAxLCAweDhELCAweDAyLCAweDA0LCAweEIyLCAweEQwLCAweDA4LCAweDQwLCAweEEzLAorMHgwMSwgMHg4MSwgMHgwMCwgMHgyNSwgMHgwRSwgMHhDMSwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwNCwgMHg4MSwgMHgwNywgMHgyNCwKKzB4MzIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4QTIsIDB4MjAsIDB4ODEsIDB4NDAsIDB4MzQsIDB4MjIsIDB4NTAsIDB4MDgsIDB4NDAsCisweDIzLCAweDAwLCAweDhELCAweDAwLCAweDQ2LCAweDAzLCAweEQxLCAweDA4LCAweDQwLCAweDRCLCAweDgwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgyMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MTQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDgwLCAweDkxLCAweDQwLCAweDY0LCAweDEyLAorMHhEOCwgMHgwOSwgMHg2MCwgMHgyNiwgMHgwMSwgMHg5NSwgMHgwMiwgMHg2NCwgMHgwMiwgMHg1OCwgMHgwRCwgMHg0MCwgMHgyNywKKzB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDBBLCAweDM0LCAweDA5LAorMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHg0MiwgMHg0QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5MSwKKzB4MDgsIDB4NkQsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MjAsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MDYsIDB4NzAsCisweDA5LCAweDQyLCAweEE2LCAweEExLCAweDkzLCAweDIyLCAweDc0LCAweDAyLCAweDc4LCAweDA5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNiwgMHg0RCwgMHgwMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHgxNywgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDIyLCAweEYwLCAweDk5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDExLAorMHg1QywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgxMywgMHg1QywgMHgwNiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NjUsIDB4ODAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAxLCAweDdFLCAweDIyLCAweEI0LCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGOCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4ODAsIDB4MTMsIDB4MDYsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDcsIDB4ODAsIDB4MUYsIDB4MDAsIDB4NEMsCisweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDQ3LCAweDEwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweDM0LCAweDExLCAweEMwLAorMHg4NywgMHgwNCwgMHgxMywgMHgyNiwgMHgyQywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwNCwKKzB4N0MsIDB4NDgsIDB4MzAsIDB4ODEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDIwLCAweDE0LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweEMwLAorMHg3MCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHgwMCwgMHg1RiwgMHg4MCwgMHg2RiwgMHg0NiwgMHhDNSwgMHgwNSwKKzB4NzAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4ODEsIDB4NzQsIDB4MDEsIDB4MzAsIDB4NDcsIDB4NDAsIDB4MUIsCisweDAwLCAweDcxLCAweDAzLCAweENDLCAweDA5LCAweDYwLCAweDM3LCAweDQwLCAweDFDLCAweEEwLCAweDdELCAweDAyLCAweEI0LAorMHgwOSwgMHgxMCwgMHgwNSwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MTAsIDB4RDEsCisweDAzLCAweDM0LCAweDAzLCAweEQyLCAweDBDLCAweDQ4LCAweDc3LCAweDBBLCAweENELCAweDAzLCAweDA0LCAweDA3LCAweEQzLAorMHgwQywgMHg0NCwgMHgzNywgMHgwMCwgMHhDRCwgMHgwOCwgMHgzNiwgMHgwMywgMHgxMCwgMHgxRCwgMHg0MCwgMHhCMSwgMHg2MCwKKzB4MDEsIDB4MDIsIDB4MDQsIDB4MjMsIDB4RDAsIDB4M0MsIDB4NDAsIDB4ODEsIDB4MDQsIDB4REQsIDB4ODAsIDB4MzQsIDB4MEIsCisweDA0LCAweDFDLCAweDYwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLAorMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMiwKKzB4QjYsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTUsIDB4ODAsIDB4ODUsIDB4MDgsIDB4NTAsIDB4MEUsCisweDYwLCAweDlCLCAweDAwLCAweDZELCAweDQwLCAweDM2LCAweDA3LCAweDE4LCAweDBFLCAweDQwLCAweDNCLCAweDQwLCAweDIxLAorMHgxMCwgMHg4NiwgMHgwMywgMHg1MCwgMHgxNywgMHg0OSwgMHgwOCwgMHgwMCwgMHhBRCwgMHgwMiwgMHhCNiwgMHgwMywgMHgxMCwKKzB4MEUsIDB4NjAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsCisweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA2LCAweEQwLCAweDFFLCAweEMyLCAweDcxLCAweDAyLCAweDYxLCAweDAxLCAweEJDLAorMHgzRiwgMHhGMCwgMHhGRSwgMHhDMCwgMHg1QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4RCwgMHgwNSwgMHg3OCwgMHgzRSwgMHg0MSwKKzB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzIsIDB4NjksIDB4MDAsIDB4NjMsIDB4QTAsCisweDhDLCAweDA3LCAweEQxLCAweDEyLCAweEMwLCAweDQ5LCAweDAwLCAweEVELCAweDgxLCAweEJDLCAweDA2LCAweDM4LCAweDFFLAorMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsCisweEMwLCAweDBELCAweDQwLCAweDE3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAwLCAweEYxLCAweDJELCAweEMwLCAweDM3LAorMHgyMCwgMHg1RiwgMHg4MCwgMHg3QywgMHhCMywgMHhDMCwgMHgwRCwgMHhDOCwgMHgyNywgMHgwMCwgMHg0RiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjEsIDB4MEQsIDB4QzgsCisweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDAwLCAweEZGLAorMHgwMSwgMHhGQywgMHgxMywgMHhGOCwgMHg4RiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGNywgMHgwOSwgMHhDQywgMHg4NywgMHhGMCwKKzB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RUIsIDB4MDEsIDB4RUMsIDB4MDcsIDB4RjksIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsCisweEZGLCAweDA5LCAweENDLCAweDBGLCAweEIxLCAweDFGLCAweEMwLCAweDNCLCAweDAwLCAweDMzLCAweDAxLCAweEVFLCAweDI3LAorMHgzMCwgMHgxNywgMHhDMCwgMHg0RiwgMHgwMCwgMHg3RiwgMHg4MSwgMHhDQywgMHgwNSwgMHhDMCwgMHg5QSwgMHhDMCwgMHgxQSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDgsCisweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQ4LCAweDNCLCAweDAxLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQxLCAweDBFLAorMHg0RSwgMHgzOCwgMHg0MCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHg3OCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgwOCwgMHhGRCwKKzB4MDAsIDB4ODQsIDB4MTMsIDB4MTAsIDB4MEUsIDB4NDIsIDB4M0IsIDB4MDMsIDB4QTEsIDB4ODAsIDB4QkMsIDB4MDMsIDB4MTQsCisweDA2LCAweDQwLCAweDBCLCAweDA4LCAweDJELCAweDk4LCAweDg0LCAweDIwLCAweDkwLCAweDBBLCAweDQwLCAweDU0LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MEIsIDB4RDAsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MjgsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDFBLCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDQxLCAweEQwLCAweDBFLCAweDQ0LCAweDFCLCAweDAwLCAweEVELCAweDkwLAorMHhBNCwgMHhDMywgMHgxOCwgMHg4NiwgMHg0MCwgMHhBQiwgMHgwQSwgMHg2MSwgMHgwOCwgMHhBNCwgMHgwMSwgMHg1NCwgMHgwNiwKKzB4NDAsIDB4MEIsIDB4MDAsIDB4NkQsIDB4MDAsIDB4ODQsIDB4NDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MjIsIDB4MDEsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHgwMCwgMHgzMywgMHgxMCwgMHg5RCwgMHgwQiwgMHgyNCwgMHgyRiwgMHhEMCwgMHgxQywgMHg1QSwgMHgwMiwKKzB4MDAsIDB4QzEsIDB4NDAsIDB4MDUsIDB4MDEsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MDcsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MjQsCisweDA3LCAweDFBLCAweDA4LCAweDQwLCAweDYzLCAweEMwLCAweDQxLCAweDAwLCAweDE0LCAweDAxLCAweDUwLCAweDI0LCAweDQwLAorMHgxMywgMHgyMCwgMHgwRCwgMHgwMywgMHgwNSwgMHgwQywgMHg5MCwgMHgwQywgMHg0MCwgMHgwOCwgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4NDIsIDB4RDAsCisweDBELCAweEMwLCAweDNGLCAweDAwLCAweDlGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDFGLCAweEMwLCAweDI2LCAweDAwLAorMHhDMSwgMHgwMCwgMHg0QywgMHgyMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHhFQywgMHgwRiwKKzB4MTQsIDB4MDEsIDB4RTIsIDB4NzcsIDB4MDQsIDB4MTMsIDB4MDIsIDB4NjQsIDB4MDMsIDB4NTAsIDB4QTUsIDB4NDAsIDB4MDcsCisweDAwLCAweERGLCAweDAzLCAweDRDLCAweDBGLCAweEQwLCAweDBELCAweEMyLCAweDU2LCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwMywgMHhGMSwgMHgwRCwKKzB4NDAsIDB4MzcsIDB4MjAsIDB4OUYsIDB4MTAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4QTEsIDB4MTAsIDB4OTcsCisweDAxLCAweDdELCAweDAwLCAweDcwLCAweDBELCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDA0LCAweDVDLCAweDQzLCAweDcyLAorMHgyMSwgMHhFMCwgMHhBNywgMHg4MCwgMHgxRiwgMHgyOCwgMHg3NCwgMHgwMywgMHhBMCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4OUQsIDB4MDQsIDB4N0MsIDB4MEIsIDB4QjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEZGLCAweDIwLCAweEZDLCAweDAyLCAweEIwLCAweDBGLCAweEUwLAorMHgzQiwgMHhBMCwgMHgxQiwgMHgwMCwgMHhDRSwgMHg0MywgMHgzMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhGQiwgMHgwMCwKKzB4QUMsIDB4MDEsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QTMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEEsCisweEMwLCAweDI4LCAweDEwLCAweDczLCAweDU5LCAweDhDLCAweDAzLCAweDMyLCAweDQ3LCAweEMwLCAweDBDLCAweDAwLCAweEVELAorMHgwMiwgMHhDQywgMHg0NywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzcsCisweDk4LCAweDExLCAweDAxLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQyLCAweDY0LCAweDA4LCAweEQxLCAweDAxLCAweDZDLAorMHgwNCwgMHhCMCwgMHgwRCwgMHhDMiwgMHhFNywgMHgwNCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg0NCwKKzB4NjQsIDB4MDEsIDB4NDEsIDB4MDEsIDB4NkMsIDB4MDcsIDB4MTAsIDB4MjQsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MUQsIDB4MDAsCisweDA1LCAweDAxLCAweDEwLCAweDBELCAweDRFLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0OCwgMHgzNywgMHgyMCwKKzB4MTEsIDB4MDEsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NjAsIDB4NDQsIDB4MDAsIDB4RDEsIDB4MTEsIDB4NjQsIDB4MDcsCisweDkyLCAweDBELCAweDQyLCAweDY3LCAweDgwLCAweDExLCAweDAxLCAweDY0LCAweDgzLCAweDUwLCAweDExLCAweDQxLCAweDU2LAorMHgwMCwgMHgxOSwgMHgwMCwgMHg0NiwgMHgwNywgMHgxMCwgMHgwNSwgMHg0MCwgMHgwNCwgMHgwNCwgMHg1RCwgMHgwMCwgMHg0NCwKKzB4MUIsIDB4MTQsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDgxLAorMHgwMSwgMHgwNCwgMHgwMywgMHgxNCwgMHgwQywgMHg2MCwgMHgyMCwgMHgyMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg5MiwKKzB4MEMsIDB4NjAsIDB4MDEsIDB4OTAsIDB4MDEsIDB4MDEsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MjIsIDB4MDAsCisweENELCAweDAwLCAweDI0LCAweDAzLCAweDE0LCAweDA0LCAweDQwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MTEsIDB4MjAsCisweEM0LCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDA0LCAweDIwLCAweERCLCAweDAwLCAweDZELCAweDAxLCAweEIxLCAweDBGLAorMHg0MCwgMHgyNywgMHgxOCwgMHg5MywgMHgwMCwgMHhBQywgMHgwMywgMHg3MCwgMHgwMSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg1QiwKKzB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4RTAsIDB4MDQsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDBELCAweEMyLCAweDA3LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3OCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgxMCwgMHhCNywgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MTAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsCisweDJGLCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJELCAweDAwLCAweDczLCAweDAwLAorMHhCQywgMHgwMCwgMHhGMCwgMHgwNywgMHgwMCwgMHgwRiwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0IsIDB4MDAsCisweDMzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEEzLCAweDAwLCAweDhDLCAweDA2LAorMHhCMCwgMHgwMywgMHhDMCwgMHg2OCwgMHgwMiwgMHgzRiwgMHgwMSwgMHg4QywgMHgwNCwgMHg3MCwgMHgxQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4MzMsIDB4MEMsIDB4Q0MsIDB4MDQsIDB4QjAsIDB4MkIsIDB4MTAsIDB4NEMsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsCisweDAyLCAweDMwLCAweDBCLCAweEQwLCAweDRDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLAorMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgxNCwgMHgxMSwKKzB4MDAsIDB4QzQsIDB4MDMsIDB4MTEsIDB4NDksIDB4NDAsIDB4NkYsIDB4MDAsIDB4OTEsIDB4MEIsIDB4NDQsIDB4ODQsIDB4NTAsCisweDAxLCAweDQwLCAweDI0LCAweDIxLCAweDFELCAweDIxLCAweDQ0LCAweDg0LCAweDEwLCAweDE5LCAweDQwLCAweDNGLCAweDA0LAorMHgxMSwgMHgwMiwgMHg0NCwgMHgwNCwgMHgxMCwgMHgyRiwgMHg0MiwgMHgyNCwgMHgxMCwgMHhEMSwgMHgyMCwgMHg0NCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDEsIDB4NDQsIDB4MDAsIDB4OEIsIDB4MDAsIDB4NTQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MEMsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDM3LCAweDIxLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMywgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MjAsIDB4MTAsIDB4MUQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTIsIDB4MDgsIDB4NDIsIDB4MzMsIDB4ODIsIDB4ODEsCisweDAyLCAweDA0LCAweDAwLCAweDEyLCAweDY4LCAweDYwLCAweDAwLCAweDAwLCAweEQxLCAweDQwLCAweDA0LCAweDA2LCAweDUwLAorMHg1OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0RSwgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDgsIDB4NTEsIDB4MDEsIDB4NDQsCisweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDY3LCAweDQwLCAweEQxLCAweDAwLCAweDQ1LCAweDAwLCAweDUwLCAweDExLCAweDUwLAorMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg0NCwgMHgxMSwgMHgxOSwgMHg0MSwgMHgzNywgMHgwMCwgMHg5MSwgMHgwMCwKKzB4NDAsIDB4MDQsIDB4MTgsIDB4MEMsIDB4NjAsIDB4NDAsIDB4NDAsIDB4RDEsIDB4MDQsIDB4NDQsIDB4MDYsIDB4NTAsIDB4NDEsCisweDQwLCAweDQ0LCAweDIwLCAweEQ5LCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDBFLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3MywgMHgwMCwgMHgxMywgMHgxMywgMHg0RCwgMHgwMywKKzB4MzQsIDB4MDEsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MzksIDB4QzgsIDB4MjQsCisweDEwLCAweDBGLCAweDAzLCAweDRDLCAweDBDLCAweDcwLCAweDE5LCAweEM4LCAweDM3LCAweDQwLCAweDEzLCAweDA0LCAweDRDLAorMHgxOCwgMHgzNCwgMHgwOSwgMHhDMCwgMHhFNCwgMHgwMCwgMHhDMywgMHgwMCwgMHg0RCwgMHgwNiwgMHg3MCwgMHgxRCwgMHhDMCwKKzB4QzQsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RjAsIDB4NEQsIDB4RDAsIDB4MDIsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweEZELCAweDQwLCAweDJGLCAweDAwLCAweEJDLCAweDAzLCAweEYxLAorMHg5MywgMHhDMCwgMHgzNywgMHgwMCwgMHhBRiwgMHgwMiwgMHhGQywgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHgyRiwgMHgwMCwKKzB4M0YsIDB4MTAsIDB4RkMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzgsIDB4M0YsIDB4MjAsIDB4M0YsIDB4MjMsIDB4RkMsIDB4MDAsCisweDcwLCAweDlELCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEI0LCAweDFGLCAweEMwLCAweDBGLAorMHgwMCwgMHhBRiwgMHgwOSwgMHhEQywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgxRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NkQsIDB4MDMsIDB4MzIsIDB4MDksCisweEQwLCAweDI0LCAweDAwLCAweEQzLCAweDgwLCAweDRDLCAweDAzLCAweDM0LCAweDZELCAweEMwLCAweDI0LCAweDAwLCAweDEzLAorMHg0MiwgMHg3QywgMHgxMCwgMHgzMCwgMHgyOSwgMHhEMSwgMHgzMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0QywgMHgxOCwgMHgzMCwKKzB4MDksIDB4QzAsIDB4ODQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MTEsIDB4QzAsIDB4MDQsIDB4MDAsCisweERCLCAweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweEE4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHhDNCwgMHg0MywgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MTAsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4NDYsIDB4MTAsIDB4MkQsIDB4NTAsIDB4MzQsIDB4MDAsIDB4MTMsIDB4ODIsCisweDM0LCAweDA4LCAweDEwLCAweDc5LCAweDQwLCAweDdDLCAweDA0LCAweEI1LCAweDIwLCAweDJDLCAweDBDLCAweEIyLCAweEFELAorMHg0MCwgMHhDNCwgMHgwNiwgMHhEMSwgMHgwMSwgMHg3NCwgMHgyQSwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHhEQiwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDIwLCAweDMwLCAweDQwLCAweDgxLCAweDIxLCAweDA0LCAweDAzLCAweDE0LCAweDA4LCAweDA4LCAweDIwLAorMHg4OSwgMHg4MSwgMHgwMCwgMHgwNiwgMHgwNiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwOCwgMHgwMywgMHgzNCwKKzB4MEMsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MTQsIDB4MkMsIDB4OTQsIDB4OEMsIDB4NDAsCisweDAyLCAweDAwLCAweEMxLCAweDQxLCAweDM0LCAweDAyLCAweDkwLCAweDBDLCAweDQwLCAweDUyLCAweDQwLCAweEM5LCAweDAwLAorMHgwNSwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjEsIDB4MTksIDB4MDQsIDB4MDcsIDB4MTAsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MDAsCisweEIxLCAweDgxLCAweEM2LCAweDA0LCAweDEwLCAweDk2LCAweDQwLCAweDZDLCAweDQwLCAweDIxLCAweDIxLCAweEI0LCAweDQ0LAorMHgxOCwgMHgxNiwgMHg2MiwgMHg3OCwgMHgxMCwgMHgwRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHg5NCwgMHgxRSwgMHg0MCwgMHg2QSwKKzB4MDAsIDB4RTEsIDB4NTAsIDB4MzYsIDB4MDYsIDB4MTAsIDB4M0UsIDB4NTAsIDB4NEUsIDB4MDQsIDB4RTksIDB4MDEsIDB4ODYsCisweDA3LCAweEQwLCAweDE2LCAweDYwLCAweDNDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgxOCwgMHgzMCwgMHgwMCwgMHg4MywgMHgwOCwgMHgwRCwgMHgwMywgMHgxMCwgMHgwOCwgMHhDMCwgMHgyMCwgMHg0MCwgMHhDMywKKzB4MDAsIDB4MEQsIDB4MjIsIDB4MzAsIDB4MDQsIDB4NDgsIDB4MjAsIDB4QjIsIDB4MDksIDB4NTIsIDB4M0MsIDB4MjAsIDB4MzQsCisweDg4LCAweEMwLCAweDMwLCAweDAwLCAweDBCLCAweDAwLCAweDFDLCAweDAwLCAweDkwLCAweDBDLCAweEMwLCAweDg2LCAweDAwLAorMHhDMywgMHgwMCwgMHgzQywgMHgwMiwgMHhCMCwgMHgwMCwgMHhDMCwgMHg5MiwgMHgxMCwgMHhDQiwgMHgwNCwgMHgwQywgMHgwMywKKzB4RjAsIDB4MEMsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsCisweDNELCAweDAwLCAweEVGLCAweDY4LCAweEZFLCAweDBCLCAweEYwLCAweDBGLCAweEMwLCAweEJGLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgyMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMCwgMHhGMCwgMHg4RSwKKzB4QzAsIDB4M0IsIDB4MDAsIDB4QjcsIDB4ODAsIDB4QUQsIDB4MjIsIDB4RjAsIDB4OEYsIDB4QzAsIDB4MkQsIDB4NDAsIDB4RkYsCisweDA0LCAweEZDLCAweDAyLCAweEUwLCAweDBCLCAweEUwLCAweDA5LCAweDQwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwNywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywKKzB4MDAsIDB4RDcsIDB4NjAsIDB4NEMsIDB4MEIsIDB4MzQsIDB4MDEsIDB4QzAsIDB4NkYsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDA5LCAweEQwLCAweDI0LCAweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgzNywgMHg4MSwgMHgxMiwgMHgwOCwgMHgwQywgMHgwMCwgMHgzMSwgMHg0RCwgMHhDMCwgMHgyNCwgMHgwMCwgMHhEMywgMHgwMCwKKzB4NEMsIDB4MDIsIDB4QjAsIDB4MUQsIDB4RDAsIDB4NTQsIDB4MDAsIDB4RDMsIDB4QTAsIDB4NEMsIDB4ODMsIDB4RjAsIDB4MEQsCisweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDNELCAweDAwLAorMHhFMSwgMHgwMCwgMHgwNiwgMHgxMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4RDAsIDB4MEUsIDB4NDIsIDB4MjgsIDB4MjAsIDB4QTgsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0YsCisweDA1LCAweDMxLCAweDAwLCAweDg0LCAweDAwLCAweEQ0LCAweDBGLCAweDUxLCAweDJDLCAweDAwLCAweEUxLCAweDAwLCAweDA0LAorMHgwMiwgMHgxNCwgMHgwQywgMHg0MCwgMHgwOCwgMHg0MCwgMHhGMSwgMHgwMCwgMHg5NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0NCwKKzB4NEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4QzUsCisweDAxLCAweDg0LCAweDI3LCAweDAwLCAweDFFLCAweDQwLCAweDYzLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDQ3LCAweEQwLAorMHgzQywgMHg0MCwgMHg2OCwgMHgwOCwgMHhBQywgMHgxMSwgMHg4NCwgMHgwNSwgMHhEMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHg0MywKKzB4MjksIDB4MDUsIDB4QTUsIDB4MDQsIDB4OTgsIDB4MUUsIDB4NDAsIDB4NjgsIDB4ODAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsCisweDEwLCAweDEyLCAweDYwLCAweDVDLCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDA3LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgxMCwgMHhEMSwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NTMsIDB4MjIsIDB4QzksIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsIDB4MTUsCisweDQwLCAweDMwLCAweDAwLCAweEM5LCAweDgyLCAweDA0LCAweDZCLCAweEQwLCAweDJDLCAweDQwLCAweDMzLCAweDAwLCAweEQ5LAorMHgwMSwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg1MCwgMHhGMCwgMHg4MSwgMHg5MSwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwKKzB4MDgsIDB4NjAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4OTgsIDB4NDAsIDB4NEIsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDIwLCAweDE1LCAweDAwLCAweDc3LCAweDhBLCAweDRELAorMHg4MSwgMHgzMCwgMHg3NiwgMHhDMCwgMHg5RiwgMHgwMCwgMHg1RiwgMHgwMSwgMHhGQywgMHgwRCwgMHhGMSwgMHhCNywgMHhDMCwKKzB4MTQsIDB4MjAsIDB4N0YsIDB4NEIsIDB4Q0MsIDB4MEQsIDB4RjAsIDB4MjYsIDB4QzAsIDB4MTcsIDB4MTAsIDB4N0IsIDB4MDEsCisweEFDLCAweDA1LCAweDM0LCAweDA1LCAweEMyLCAweDlDLCAweDA0LCAweDUzLCAweDAxLCAweENDLCAweDA5LCAweDMwLCAweDA3LAorMHhDMSwgMHgxQywgMHgwMCwgMHg1MywgMHgwMCwgMHg0RCwgMHgwMSwgMHhGMiwgMHgyNywgMHhDMiwgMHg1RiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4MTAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMxLCAweDA3LCAweDAwLCAweDE3LCAweDA4LCAweDdDLCAweDEwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxQiwgMHgwMiwgMHg3RCwgMHgwOCwgMHhGMCwgMHg0MSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxNywgMHgwOCwgMHg1QywKKzB4MjgsIDB4NzAsIDB4MjAsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDgsIDB4N0QsIDB4NjAsIDB4NzAsIDB4MTEsIDB4QzAsCisweDQ3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAwLCAweEMxLCAweDRCLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgyNiwgMHgzMCwKKzB4MDksIDB4QzAsIDB4MjQsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsCisweDlGLCAweDA0LCAweDdDLCAweDgyLCAweEIwLCAweDA5LCAweEM0LCAweDI2LCAweDQwLCAweDkzLCAweDA0LCAweDRDLCAweDEyLAorMHgzNCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5MywgMHgwOCwgMHgwQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDIyLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDExLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHhBOSwgMHg0MSwgMHgyNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4MzQsIDB4MEEsIDB4MTAsIDB4NjksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MTYsIDB4MTAsCisweDE5LCAweEQwLCAweDIyLCAweDAwLCAweDkxLCAweDAyLCAweDQ1LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLAorMHg5RCwgMHgwOSwgMHg2QywgMHgwMiwgMHhEMCwgMHgwOSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MjAsIDB4NDQsIDB4MDIsIDB4MTEsIDB4MDksIDB4NDAsCisweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDBELCAweDUwLCAweDI1LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwNiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMiwgMHgwMiwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHgxNCwgMHg0OSwKKzB4NDgsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDIsIDB4NjQsIDB4MjIsIDB4MTgsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsCisweDAwLCAweDY1LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMCwgMHgyNCwgMHgwMCwgMHg4MSwgMHgwNCwgMHgyNCwgMHgxMiwgMHgxMCwgMHg0OSwgMHg0MCwgMHg2MSwKKzB4OTEsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4QzAsIDB4NDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MjAsIDB4NzQsCisweDAyLCAweDAwLCAweDA4LCAweDQyLCAweDIwLCAweDg5LCAweDgxLCAweDQ0LCAweDI2LCAweDAyLCAweDE4LCAweDQ4LCAweDQwLAorMHgyNiwgMHg0MCwgMHg4MSwgMHgwMCwgMHgyNCwgMHgxMiwgMHgxNCwgMHg1OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwKKzB4MjQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEI4LCAweDg2LCAweDAyLCAweDEzLCAweDBBLCAweDRDLCAweDI4LCAweDM0LCAweEExLCAweEQwLCAweDA1LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4NSwgMHgwMiwgMHg1RiwgMHgwMCwgMHg3NCwgMHgwMSwKKzB4QjEsIDB4MDEsIDB4QzgsIDB4OTYsIDB4NDIsIDB4MTMsIDB4MEEsIDB4NkQsIDB4MDAsIDB4MzAsIDB4QTUsIDB4NDAsIDB4ODQsCisweDBBLCAweDAzLCAweDRBLCAweDZDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDBBLCAweDZELAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjgsIDB4MkYsIDB4MTAsIDB4QkYsIDB4MDgsIDB4NUQsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4M0UsIDB4MDIsIDB4QkYsCisweDA4LCAweEY0LCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJFLCAweDAwLCAweEFGLCAweDAwLCAweEZDLCAweDAyLCAweEYyLAorMHgwQiwgMHgwMCwgMHgyNywgMHgwMiwgMHhCRiwgMHg4OCwgMHhEQywgMHg4MiwgMHhGMiwgMHg4QiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4REMsIDB4MjIsIDB4RDAsIDB4OEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MDIsCisweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEE4LAorMHgzQiwgMHgwMCwgMHhGMiwgMHgxNCwgMHhDQywgMHgzMiwgMHgzNCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHg5MywgMHgwMCwKKzB4Q0MsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsCisweEMwLCAweEVELCAweDAwLCAweEIzLCAweDAzLCAweENDLCAweDAyLCAweDMwLCAweDNCLCAweEMwLCAweDJDLCAweDAwLCAweEJGLAorMHg4OCwgMHhGQywgMHgxMiwgMHgzMCwgMHg0QSwgMHhDMSwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDUsCisweDA1LCAweDAxLCAweDA0LCAweDA0LCAweDMwLCAweDExLCAweDIxLCAweDQzLCAweDA0LCAweDA4LCAweDExLCAweDA4LCAweDQ0LAorMHgwMCwgMHhEMCwgMHg0MSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4QzQsIDB4MDgsIDB4NDEsIDB4NDMsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MzAsIDB4NDAsIDB4MDAsIDB4MDQsIDB4MUQsIDB4MDAsCisweDVDLCAweDUxLCAweDEwLCAweDQxLCAweDQyLCAweDA0LCAweDA4LCAweDBCLCAweDEyLCAweDU0LCAweDAwLCAweEQwLCAweDgxLAorMHg0MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyNSwgMHgwMSwKKzB4ODEsIDB4OTQsIDB4MDUsIDB4OTIsIDB4OTAsIDB4Q0MsIDB4NDAsIDB4MjAsIDB4MDIsIDB4OTEsIDB4MjAsIDB4MDQsIDB4MDIsCisweEQwLCAweDQ4LCAweDQxLCAweDIwLCAweDAwLCAweDgxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweEExLAorMHgwOSwgMHg4MSwgMHgwNiwgMHgwNCwgMHg4MiwgMHgxMCwgMHg2OCwgMHg0OCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MzIsIDB4MTAsIDB4NDgsIDB4NTEsIDB4MjAsIDB4MDAsIDB4ODksIDB4MEMsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDQ4LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDRBLCAweDkxLAorMHgxMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgzOSwgMHg0MCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAwLCAweDQ1LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDE0LCAweDAyLAorMHgxMCwgMHg2OSwgMHg0MCwgMHgyNCwgMHgyMCwgMHg4OSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjEsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDAyLCAweEIwLCAweDI5LCAweEQwLCAweEE0LCAweDAyLCAweDgzLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDA5LAorMHhDOSwgMHgyNCwgMHg0MCwgMHg5MywgMHgwMywgMHg3QywgMHg0RSwgMHgzNCwgMHg0OCwgMHhDMCwgMHgyNSwgMHg0MCwgMHg5MywKKzB4MEIsIDB4NEMsIDB4MDYsIDB4MjQsIDB4MDksIDB4RDAsIDB4NjQsIDB4MDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEUsIDB4MzQsCisweDA5LCAweEMwLCAweEE0LCAweDI0LCAweDlCLCAweDAxLCAweDRELCAweDAyLCAweEYwLCAweDA5LCAweEQwLCAweDE0LCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg2NSwgMHgxMCwgMHg5RiwgMHgwNCwgMHgzQywKKzB4NDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjEsIDB4NDgsIDB4QzAsCisweEU3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDA2LCAweEYxLCAweDA5LCAweEM4LCAweDIzLCAweDQwLCAweDlGLCAweDAxLAorMHg3QywgMHgwNiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgxMiwgMHhGMCwgMHgxOSwKKzB4QzEsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NUIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDgwLCAweDRDLCAweDAwLAorMHgzMCwgMHgwMCwgMHhDMCwgMHg4MywgMHg0MCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwKKzB4MDAsIDB4MUYsIDB4MTAsIDB4N0UsIDB4MDgsIDB4RjIsIDB4MDEsIDB4RDEsIDB4MDYsIDB4MDEsIDB4MDMsIDB4ODIsIDB4NEMsCisweDQwLCAweDMxLCAweDAxLCAweEMxLCAweEM2LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDA0LCAweDMwLCAweDIwLCAweEMwLAorMHg4NCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MTQsIDB4MDQsIDB4NTEsIDB4MDEsIDB4QzUsIDB4MDksIDB4MTAsCisweDA1LCAweEMwLCAweDVELCAweDAwLCAweDUxLCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDE3LCAweDYwLCAweDE0LCAweDAwLAorMHg3RCwgMHgwMywgMHhCNCwgMHgwMSwgMHhEMCwgMHgyNywgMHg0NCwgMHg1QywgMHgwMCwgMHg1QiwgMHgxMSwgMHhBQywgMHgxNSwKKzB4QjEsIDB4NTcsIDB4QzAsIDB4MUUsIDB4NDAsIDB4NzAsIDB4MDAsIDB4QzQsIDB4MTEsIDB4MTQsIDB4MzcsIDB4NDAsIDB4MTAsCisweDAwLCAweDVELCAweDExLCAweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDUwLCAweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHg0MCwgMHhEMSwgMHgwMCwgMHgyNCwgMHgwNywgMHgxMSwgMHgwQywKKzB4NDAsIDB4MzEsIDB4MDQsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NDgsIDB4MzQsIDB4MDAsIDB4Q0QsCisweDAyLCAweDM0LCAweDAyLCAweEQ4LCAweDJDLCAweDYwLCAweDMyLCAweDkwLCAweEM5LCAweDIxLCAweDA0LCAweDg3LCAweDU4LAorMHgwQywgMHg0MiwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwNCwgMHgwMywgMHgxMCwgMHgzQywgMHg0MCwgMHgyMCwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MDQsIDB4ODMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDNDLCAweDIwLCAweEExLCAweDEwLCAweEE1LCAweDFBLCAweDEwLCAweDBFLCAweDQwLAorMHgzMSwgMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwQSwgMHhEMCwgMHgwNCwgMHg0MSwgMHgzOCwgMHgwMSwgMHg2RCwgMHgwMiwKKzB4QjYsIDB4NDAsIDB4RDgsIDB4MDMsIDB4NDAsIDB4QUEsIDB4ODIsIDB4RTksIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDAsIDB4MEUsCisweDQwLCAweDdBLCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDAzLCAweDEwLCAweDBGLCAweDQxLCAweDI4LCAweDAwLCAweEVELAorMHgwMCwgMHg4NSwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsIDB4MDAsIDB4RTMsIDB4MDEsIDB4QUMsIDB4MTYsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NzksCisweDAwLCAweEUzLCAweDAxLCAweEJDLCAweDA2LCAweEQwLCAweDE2LCAweDQwLCAweEY4LCAweDAxLCAweDJELCAweDAxLCAweEI0LAorMHgwNSwgMHhGMCwgMHgxNiwgMHhEMCwgMHg3MiwgMHgwMCwgMHhBQiwgMHgwMSwgMHg4QywgMHgwNCwgMHg3NCwgMHg5RSwgMHhDMCwKKzB4NzgsIDB4MDAsIDB4RjMsIDB4ODEsIDB4Q0MsIDB4MDcsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NjgsIDB4MDAsIDB4QUYsIDB4MDEsCisweDg0LCAweDA3LCAweEYwLCAweDFDLCAweEMwLCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhCOCwgMHgzNSwgMHg0MCwgMHg5RiwgMHgxNCwgMHg1QywgMHgyMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4RDAsIDB4NzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NkMsIDB4MDAsCisweEYwLCAweDAwLCAweEQwLCAweDI1LCAweDIwLCAweDlGLCAweDAyLCAweDNDLCAweDAwLCAweEIxLCAweDA5LCAweEQwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3RCwgMHgwMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3RCwKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDIwLCAweDdELCAweDAwLCAweEZGLCAweDIxLCAweDhDLCAweDA2LCAweDM4LCAweDhGLCAweEMwLCAweDZELCAweDAwLCAweEYzLAorMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhEMCwgMHg3QywgMHgwMCwgMHgzRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwKKzB4MTMsIDB4QzAsIDB4NUYsIDB4MjAsIDB4RjcsIDB4MjMsIDB4Q0MsIDB4MDQsIDB4MzEsIDB4OUYsIDB4QzAsIDB4N0MsIDB4MDgsCisweEYzLCAweDAxLCAweDhDLCAweDA3LCAweDMxLCAweDBCLCAweEMwLCAweDZGLCAweDAwLCAweEVGLCAweDAzLCAweENDLCAweDA3LAorMHhGMiwgMHgxRiwgMHhDMiwgMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwKKzB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MzgsIDB4MEYsIDB4NDAsIDB4MDgsIDB4NDAsIDB4RTEsIDB4MDAsCisweEJDLCAweDAyLCAweEQwLCAweDI2LCAweDQwLCAweDM4LCAweDAyLCAweDZELCAweDEwLCAweEI0LCAweEEwLCAweEQwLCAweDgyLAorMHg0MCwgMHgwRiwgMHgxMCwgMHhFMSwgMHgwNCwgMHg5NCwgMHgxMCwgMHgxMCwgMHhFNiwgMHg0MSwgMHgzQywgMHgwMCwgMHhGMSwKKzB4MTAsIDB4ODQsIDB4ODMsIDB4MTQsIDB4OEEsIDB4NDAsIDB4MkIsIDB4MDQsIDB4RUQsIDB4MDgsIDB4ODQsIDB4MDMsIDB4RDAsCisweDBFLCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHg5MCwgMHg4RSwgMHg0MCwgMHgyOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4NDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MzgsIDB4MDQsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsCisweDJCLCAweDAyLCAweEVELCAweDgwLCAweEM0LCAweDAwLCAweDEwLCAweDA0LCAweDQwLCAweDM4LCAweDA0LCAweDYxLCAweDAwLAorMHhGNCwgMHgwMywgMHgxMCwgMHg4QSwgMHg0MSwgMHgyQiwgMHgwMiwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgyQywKKzB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzEsIDB4MDAsCisweENELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDFDLCAweDQwLCAweDAwLCAweDA0LCAweEMxLCAweDQ5LCAweDM0LCAweDAyLAorMHhEMCwgMHgyNSwgMHg0MCwgMHg3MCwgMHgwMCwgMHg0RCwgMHgwMSwgMHgzNCwgMHgwMCwgMHhEMiwgMHgxMCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4QzksIDB4MEEsIDB4MTQsIDB4QzgsIDB4MTQsIDB4MDQsIDB4NTAsIDB4RjAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MzQsCisweDBCLCAweDEwLCAweDE4LCAweDQwLCAweDIzLCAweDAwLCAweDlELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLAorMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNSwgMHgwMCwgMHhERiwKKzB4MDcsIDB4Q0MsIDB4MDIsIDB4QjAsIDB4NEQsIDB4QzAsIDB4RTUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsCisweDA1LCAweEQwLCAweDNDLCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMxLCAweDNGLCAweDAwLAorMHhERiwgMHgyMywgMHgwRCwgMHgwOCwgMHgzMCwgMHgxMSwgMHhDMCwgMHhGNCwgMHgwOCwgMHhEMywgMHgwMCwgMHg3QywgMHgyMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzQsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDM3LCAweDEwLCAweDlGLCAweDAwLAorMHg3RSwgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMiwgMHg2MywgMHgxMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHhDNSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MTAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsCisweDEwLCAweDdDLCAweDBDLCAweEYwLCAweDAwLCAweEMwLCAweDM3LCAweDA0LCAweERGLCAweDAwLCAweDQ0LCAweDBCLCAweEYwLAorMHgwQywgMHhDMSwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMiwgMHgwNywgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MTAsIDB4Q0MsCisweDA2LCAweDMwLCAweDBGLCAweEMwLCAweDA0LCAweDAwLCAweEYzLCAweDAwLCAweEZFLCAweDUyLCAweDMwLCAweDA1LCAweEMwLAorMHgzQywgMHgwMCwgMHgzNywgMHgxMCwgMHhGQywgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHg3QiwgMHgwMCwgMHg5MywgMHgwMCwKKzB4Q0MsIDB4MDAsIDB4QjAsIDB4MDMsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4ODMsIDB4MzIsIDB4OEYsCisweEMyLCAweEJDLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDA0LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgyMCwgMHg0NCwgMHgwQSwKKzB4MTAsIDB4MEMsIDB4NTAsIDB4QzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4NTAsIDB4MTUsIDB4NTAsIDB4MzUsCisweDAwLCAweDVELCAweDA3LCAweDc0LCAweDBDLCAweEQwLCAweDExLCAweEMwLCAweDM1LCAweDAyLCAweDgxLCAweDAwLCAweDQ0LAorMHg0QywgMHgxMSwgMHgzMSwgMHhDMCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0NCwgMHg0MywgMHgxMCwgMHgyMSwgMHg0MiwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDksIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDY2LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDI4LCAweDEwLAorMHgxOSwgMHg0MCwgMHhFNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxMSwgMHg0MCwgMHgzNiwgMHgwMCwKKzB4MUQsIDB4MDEsIDB4NzQsIDB4NDQsIDB4RDAsIDB4MzEsIDB4NDAsIDB4MTcsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4ODQsCisweDEwLCAweDExLCAweDAyLCAweEQzLCAweDAwLCAweEMxLCAweDExLCAweDA2LCAweDA0LCAweDEwLCAweDI5LCAweDQwLCAweDM2LAorMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDksCisweDQwLCAweDAyLCAweDQwLCAweEMxLCAweDAwLCAweDM0LCAweDgyLCAweDUwLCAweDAwLCAweDQwLCAweDMzLCAweDA4LCAweDRELAorMHg0MCwgMHgzNiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg4MCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDYsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NTAsIDB4MjIsIDB4MDAsCisweENELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgyNiwgMHgwMCwgMHhFRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzNCwgMHgwOSwgMHhDMCwKKzB4MDYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MzYsIDB4MDAsIDB4MTcsIDB4MDAsCisweDc0LCAweDAwLCAweEYyLCAweDAxLCAweEMyLCAweDI3LCAweDIwLCAweEYzLCAweDIwLCAweDRDLCAweDAwLCAweEIwLCAweDAzLAorMHhEMCwgMHgwNywgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDYsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEI4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDBELAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwNywgMHhDMCwgMHgzRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RDAsIDB4MDMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4QzIsCisweDNFLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJELCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MjcsIDB4MzAsIDB4MUYsIDB4QzgsIDB4N0YsIDB4MEEsCisweEZGLCAweDAxLCAweENDLCAweDI3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEYzLCAweDA5LCAweEZDLCAweDI3LAorMHhGMCwgMHgzRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgyNywgMHgzMCwgMHg5RiwgMHhDMCwgMHg3OCwKKzB4MDAsIDB4RkYsIDB4MDksIDB4Q0MsIDB4MDcsIDB4QjAsIDB4MTMsIDB4QzAsIDB4N0UsIDB4MDAsIDB4RUYsIDB4MDEsIDB4RkMsCisweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMSwgMHgxRCwKKzB4MDEsIDB4NDQsIDB4MDAsIDB4OTAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MTAsIDB4RDAsCisweDAxLCAweDQwLCAweDQ3LCAweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQ4LCAweDQ0LCAweDAwLAorMHgxRCwgMHgwMCwgMHg0NCwgMHg4NywgMHg1MSwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgxMywKKzB4MTAsIDB4MUQsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsCisweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLAorMHgwNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0OCwgMHgzNCwgMHgxNCwgMHhDMSwgMHgyMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg0QywKKzB4NDAsIDB4MzcsIDB4MDAsIDB4RDksIDB4MDAsIDB4NjQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsCisweDA0LCAweDI0LCAweDAzLCAweDEwLCAweDAxLCAweDQ4LCAweDMyLCAweDgwLCAweDhELCAweDAwLCAweDM0LCAweDQzLCAweDE5LAorMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsCisweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDgwLCAweEQwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg0MiwgMHgwNSwgMHgwOCwgMHgxRCwgMHgyMCwKKzB4NjQsIDB4MDcsIDB4NTAsIDB4MTEsIDB4NDEsIDB4MzQsIDB4ODAsIDB4MUQsIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTgsIDB4MEQsCisweDQyLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxOCwgMHhDRiwgMHgwMCwgMHg0QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsCisweDAwLCAweENCLCAweDAwLCAweDZDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDZELAorMHgwNywgMHgzMCwgMHgxMCwgMHhDMiwgMHgzNiwgMHgwMCwgMHg5RiwgMHgxMywgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMiwKKzB4MjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDQwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEYwLAorMHgwMywgMHhEMiwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMiwgMHgwRiwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjYsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MjAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDMsCisweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MEQsCisweEMyLCAweDM0LCAweDA0LCAweERGLCAweDAxLCAweDRDLCAweDQzLCAweEYwLCAweDBELCAweEUwLCAweDM3LCAweDAwLCAweERCLAorMHgwMSwgMHg0QywgMHgxMywgMHhGMCwgMHg4RCwgMHg4MCwgMHgzNCwgMHgwMiwgMHhEMywgMHgxOCwgMHg0QywgMHgwRSwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MkIsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgxMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MUQsIDB4ODAsIDB4NDQsIDB4OUMsIDB4RDAsIDB4NTEsIDB4NDAsIDB4QzcsIDB4MEEsIDB4MUQsIDB4MDAsCisweDA0LCAweDQ4LCAweEQwLCAweDIxLCAweDQwLCAweDQ0LCAweDIwLCAweDExLCAweEEwLCAweDJDLCAweDAyLCAweEQwLCAweEE1LAorMHg0MCwgMHg3NywgMHgwNCwgMHg5MSwgMHgwMCwgMHg2OCwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MEYsCisweDEwLCAweDFDLCAweDQwLCAweDMyLCAweDAyLCAweENELCAweDAwLCAweDA0LCAweDQzLCAweEQwLCAweDhDLCAweDQwLCAweEYwLAorMHgwOCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHg0QywgMHg0MCwgMHg3MywgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwKKzB4MEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDgsCisweDczLCAweDAwLCAweDg4LCAweDAwLCAweDA0LCAweDI3LCAweEQwLCAweDBDLCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwgMHg2NCwgMHgxMCwKKzB4MTIsIDB4NDAsIDB4QzgsIDB4MDAsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NTAsIDB4NDgsIDB4MDQsCisweDJELCAweDAzLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRCLCAweDAyLCAweDNELCAweDAxLCAweDg0LCAweDA0LAorMHhEMCwgMHgzMywgMHg0MCwgMHg0QywgMHgwMCwgMHgzMSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxNiwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4QjksIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDBDLAorMHhDMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHgwMCwgMHgwQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMiwgMHhERiwKKzB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDQsIDB4MEMsIDB4MjMsIDB4RjIsCisweDBELCAweDQwLCAweDMwLCAweDAwLCAweEMzLCAweDAwLCAweDJDLCAweDBCLCAweEYwLCAweDAwLCAweEMwLCAweDMzLCAweDAyLAorMHg4QiwgMHg4MCwgMHgwQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4ODIsIDB4ODAsCisweDBGLCAweDAyLCAweDJGLCAweDAwLCAweEZDLCAweDAwLCAweEYxLCAweDAyLCAweEMwLCAweDBGLCAweDA4LCAweDNGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHg4MywgMHhDMCwgMHgwRiwgMHgwOCwgMHgyRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywKKzB4RDAsIDB4MEYsIDB4MDAsIDB4MkYsIDB4MDksIDB4RkMsIDB4MDMsIDB4RjAsIDB4ODMsIDB4QzQsIDB4M0IsIDB4MDEsIDB4QjcsCisweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHgzNCwgMHgwRCwgMHhDMCwgMHg3NywKKzB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsCisweDA3LCAweDMwLCAweDFELCAweEQwLCAweDcwLCAweDAwLCAweEMzLCAweDAxLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgyMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEY0LCAweDAwLCAweDEwLCAweDAyLCAweDQ4LCAweDBGLCAweDAwLAorMHgyMSwgMHgwMCwgMHhGNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHhGNCwgMHgwMCwKKzB4MTMsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsCisweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDM4LCAweDAwLCAweEE5LCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsCisweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDAwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDU0LAorMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NzgsIDB4ODAsIDB4QUQsIDB4MTEsIDB4QjQsIDB4MDcsCisweEQwLCAweDFFLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg4MCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDE2LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELAorMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHg2QywgMHg0MCwgMHgzMCwgMHg4MCwgMHg4OSwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsCisweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDUzLCAweDAwLCAweDdDLAorMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwKKzB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NEQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsCisweEJDLCAweDk1LCAweEYwLCAweDI3LCAweEQwLCAweDE0LCAweDAwLCAweDZGLCAweDAyLCAweDdDLCAweDAxLCAweEQwLCAweDA1LAorMHhDMCwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4OTAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweDkwLCAweDAzLCAweEMwLCAweDBGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3QywKKzB4NDAsIDB4RTAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MUYsIDB4MTAsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDEsCisweDlGLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LAorMHg3MCwgMHg0OSwgMHhDMCwgMHhFNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDA0LCAweDlELCAweDAwLCAweDc0LCAweDJFLCAweEQwLCAweDA5LAorMHg0NiwgMHhBNywgMHgwMCwgMHg5RCwgMHgwMywgMHg3NCwgMHgyQSwgMHhEMCwgMHgyOSwgMHg0MCwgMHg2NywgMHg4MCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4NDMsIDB4NzQsIDB4QTIsIDB4MzAsCisweDM4LCAweDQwLCAweDI0LCAweDAxLCAweDlELCAweDgwLCAweDZDLCAweDBFLCAweEQxLCAweDA5LCAweDQwLCAweDA3LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MTIsIDB4RDAsIDB4NEIsIDB4NDAsIDB4NkYsIDB4MDAsIDB4QkQsIDB4MDEsIDB4RjQsIDB4MDIsIDB4RDAsIDB4MUIsIDB4NDAsCisweDZGLCAweDAwLCAweEJELCAweDA4LCAweEY0LCAweDAyLCAweEQwLCAweDhCLCAweDQwLCAweDJGLCAweDE4LCAweEJELCAweDAxLAorMHhGNCwgMHgwMiwgMHhEMCwgMHgxQiwgMHg0MSwgMHg2RiwgMHgwMCwgMHhCRCwgMHgwNCwgMHg2NCwgMHgwMiwgMHg1OCwgMHgwOSwKKzB4NDAsIDB4MjUsIDB4MDgsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweEI0LCAweDA2LAorMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwNiwgMHhEMiwgMHgwQSwgMHg0MCwgMHg2QiwKKzB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDgsIDB4NkIsIDB4MjAsIDB4QUQsIDB4QzAsIDB4QjQsCisweDA2LCAweEQwLCAweDBBLCAweDQ4LCAweDJCLCAweDAwLCAweEFELCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLAorMHgyMCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgyNSwgMHgyMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4RjAsCisweDAxLCAweEMyLCAweDg3LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDIyLAorMHgxRiwgMHgyQSwgMHg3QywgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3QywgMHgyOCwKKzB4RjAsIDB4QTEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4M0YsIDB4MEEsIDB4NkMsIDB4MDAsIDB4NzIsIDB4MDUsIDB4QzAsIDB4MDUsCisweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDA4LCAweEYwLCAweDAxLCAweEM4LCAweDc3LCAweEUwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwKKzB4Q0EsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDc0LCAweDgyLCAweEYxLCAweDA5LCAweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhGOCwgMHgwMiwgMHg3MiwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwKKzB4QkYsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjgsIDB4MDksIDB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEM2LAorMHhBQywgMHgxOCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHhBRiwgMHgyMCwgMHhCRiwgMHgwMiwKKzB4Q0MsIDB4MEEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjcsIDB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MkIsCisweEMwLCAweDJDLCAweDIwLCAweEJGLCAweDQ4LCAweEJDLCAweDAyLCAweDMwLCAweDBGLCAweEMwLCAweDJGLCAweDIwLCAweDlGLAorMHgwMCwgMHhGNCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MTQsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NDQsCisweDAwLCAweDFELCAweDAwLCAweDc0LCAweDE0LCAweEQwLCAweDAxLCAweDQ4LCAweDQ3LCAweDAxLCAweDFELCAweDgxLCAweDQ0LAorMHg5NCwgMHg5MCwgMHgxMSwgMHg1MiwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHg1MSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MUQsIDB4MDUsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsCisweDY0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg1MCwgMHgyMSwgMHgwMSwKKzB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QzUsIDB4MDQsIDB4MTUsIDB4MDMsCisweEQwLCAweDRELCAweDQxLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLCAweDA4LCAweDE0LCAweDMyLAorMHgyMCwgMHg4RCwgMHgwMCwgMHg3NiwgMHg4MiwgMHg1MCwgMHgwOCwgMHg0OCwgMHgyMywgMHgxMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEE4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4QzAsIDB4NzQsIDB4MDIsIDB4MTIsIDB4MDksIDB4MDAsIDB4MjQsIDB4MDAsCisweDlELCAweDAwLCAweDc0LCAweDEyLCAweDU0LCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDI0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNCwgMHg0MCwgMHg5NSwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4NEUsIDB4NzAsIDB4NjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4MTAsCisweDA5LCAweDQwLCAweDE3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsCisweDI3LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDI1LCAweDIwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgwNCwgMHg5RiwgMHgwNCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsCisweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdFLCAweDAwLAorMHgzNCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHg0NywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4NDEsIDB4QzIsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsCisweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLAorMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg1RCwKKzB4MDAsIDB4RjQsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4OUYsIDB4MDQsIDB4NUQsIDB4MDEsIDB4RjQsIDB4MjEsIDB4MTAsCisweDA1LCAweDAwLCAweERGLCAweDAyLCAweDcxLCAweDg4LCAweEYwLCAweDAxLCAweEQwLCAweDg2LCAweEMwLCAweDE5LCAweDAxLAorMHg1RCwgMHgxMSwgMHhGNCwgMHgwOSwgMHgxMCwgMHgzNywgMHg0OCwgMHgxNCwgMHgyMCwgMHg3QiwgMHg5MSwgMHg3NCwgMHgwMSwKKzB4MTAsIDB4QjcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4NDUsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHg0MywgMHhEMCwgMHgwOCwgMHg0MCwgMHhGMywgMHgwMCwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwOCwKKzB4NDAsIDB4RjMsIDB4MjAsIDB4RDAsIDB4MDIsIDB4MzQsIDB4MTMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4OEQsCisweDQwLCAweDc2LCAweDQzLCAweDE0LCAweDNELCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDA0LCAweDc0LCAweDAyLCAweDUwLAorMHgzMCwgMHg0OCwgMHg0MywgMHgwMCwgMHhDQywgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDA3LCAweDEwLCAweDBFLCAweDQwLAorMHg3QiwgMHgxNCwgMHhFMSwgMHg0MCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4MTIsIDB4MkUsIDB4NTAsIDB4NzgsIDB4MDAsIDB4RTksIDB4MDAsIDB4RjQsIDB4QzIsIDB4MDAsIDB4MDIsCisweDQxLCAweDBCLCAweDA0LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywKKzB4RjAsIDB4MUUsIDB4QzIsIDB4NUIsIDB4MDAsIDB4RUYsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzgsIDB4N0YsCisweDEwLCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEQwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweEZDLAorMHgwNywgMHgzMCwgMHgxNywgMHhDOCwgMHg3OCwgMHgwOCwgMHhFMywgMHgyMSwgMHhCQywgMHgwNywgMHg3MCwgMHgxNiwgMHhDMCwKKzB4NEIsIDB4MDAsIDB4RUYsIDB4MjEsIDB4QkMsIDB4MDUsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgxNywgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwKKzB4RDcsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsCisweEYzLCAweDA1LCAweEMwLCAweDMyLCAweDEwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEUwLCAweDA1LCAweEMwLCAweDA3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMSwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MUYsCisweEMwLCAweDdGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEZGLAorMHgyMSwgMHhCQywgMHg4NSwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMiwgMHhGMywgMHgwMSwgMHhGQywgMHgwNSwgMHhGMCwKKzB4NUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkMsIDB4MTYsIDB4RjAsIDB4MTcsIDB4QzQsIDB4NkQsIDB4MDAsCisweEZGLCAweDA5LCAweEY0LCAweDI3LCAweDMwLCAweDlGLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwOSwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4RTEsIDB4MjgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDgsCisweEI0LCAweDAzLCAweDEyLCAweDBGLCAweDQwLCAweDM4LCAweDA2LCAweEUxLCAweDE4LCAweEI0LCAweDQzLCAweEQwLCAweDA2LAorMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwQSwgMHhCNCwgMHgwMywgMHhEMCwgMHgwNywgMHg0MCwgMHgyOCwgMHgwMCwgMHhFRCwKKzB4MDgsIDB4RjQsIDB4MEIsIDB4MTQsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDhFLCAweDQwLCAweDFGLAorMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwOSwgMHhEMCwgMHg4RiwgMHg0MCwgMHgzOSwgMHgwMiwgMHg2RCwgMHgwMiwgMHhGNCwKKzB4MDksIDB4MTAsIDB4MjYsIDB4NDAsIDB4QkMsIDB4MDgsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4NEUsIDB4NDAsCisweDNCLCAweDAyLCAweEVELCAweDgwLCAweEI0LCAweDkzLCAweEQwLCAweDA3LCAweDQwLCAweDE5LCAweDAwLCAweEVELCAweDQwLAorMHhCNCwgMHgwMSwgMHgxMiwgMHgwRSwgMHg0MCwgMHgyMywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDgsIDB4RDAsIDB4MEMsIDB4NDEsIDB4MDcsIDB4MDEsCisweEMxLCAweDAxLCAweDM0LCAweDgyLCAweEQwLCAweDJDLCAweDRELCAweDY1LCAweDAyLCAweDhELCAweDg4LCAweDc0LCAweDI0LAorMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgzNCwgMHgwQywgMHhEMCwgMHgwMCwgMHg0MCwgMHg3MywKKzB4MDQsIDB4OUQsIDB4MEYsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MjQsIDB4NDAsIDB4MDAsIDB4MjAsIDB4Q0QsIDB4MDksIDB4NzQsCisweDAwLCAweDEwLCAweDBDLCAweDYwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgzNiwgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNywgMHgwMCwgMHhDMywKKzB4MTIsIDB4M0MsIDB4MTQsIDB4RjAsIDB4MkQsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsCisweDUxLCAweDQwLCAweDc0LCAweDgwLCAweEQzLCAweDA5LCAweDc0LCAweDI2LCAweEYwLCAweDE5LCAweEMwLCAweDMzLCAweDA0LAorMHgxRSwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxNCwgMHhDMCwgMHgwNSwgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwMiwKKzB4MzAsIDB4MEQsIDB4QzgsIDB4NzcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDFELCAweEM4LCAweEM3LCAweDIwLCAweERGLCAweDA0LAorMHg3QywgMHgwMCwgMHhGMCwgMHgxRCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgxRCwgMHg4MCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwMSwKKzB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDksIDB4NDEsIDB4MzcsIDB4MjAsIDB4OUYsCisweDAwLCAweDc4LCAweDAyLCAweEMwLCAweDE1LCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLAorMHgwRCwgMHhDMCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkMsIDB4MDAsIDB4RjMsIDB4MDUsIDB4RUMsCisweDAwLCAweEIwLCAweDVGLCAweEMwLCAweDBGLCAweDAwLCAweDMzLCAweDIwLCAweENDLCAweDAyLCAweDMwLCAweDAzLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHgwNCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgyMCwgMHgzMywgMHgyMCwKKzB4Q0MsIDB4MTcsIDB4RjAsIDB4MTcsIDB4RDEsIDB4MEMsIDB4MDAsIDB4RkYsIDB4MTAsIDB4RkMsIDB4MDAsIDB4MTAsIDB4MEYsCisweEMyLCAweDI3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMSwgMHgwQywgMHg0MCwgMHg0NCwgMHgwOCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNCwKKzB4MTAsIDB4MUQsIDB4NDAsIDB4NDcsIDB4MDEsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MzEsIDB4NDAsIDB4RjcsCisweDA0LCAweERELCAweDAxLCAweDc0LCAweDFFLCAweEQwLCAweDUxLCAweDQwLCAweDM3LCAweDIwLCAweDExLCAweDAzLCAweDQ0LAorMHgwMywgMHhEMCwgMHhDNSwgMHg0MCwgMHg0NCwgMHgwMSwgMHhERCwgMHgwMCwgMHg3NCwgMHgyQywgMHgxMCwgMHgwRCwgMHg0NiwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsCisweDAwLCAweDc0LCAweDA2LCAweEQwLCAweDFELCAweDQwLCAweDY0LCAweDA0LCAweEQxLCAweDAwLCAweDY0LCAweDBFLCAweDEwLAorMHgwRCwgMHg0MCwgMHg0NywgMHg4MCwgMHg5MSwgMHgwMywgMHg0NCwgMHgwQywgMHgxMCwgMHgxOSwgMHg0MiwgMHg3NywgMHgwMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDksIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDIsCisweEQwLCAweDA1LCAweDQwLCAweDQ0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDgyLCAweDQwLCAweDBELCAweDQwLCAweDA3LAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjAsIDB4NDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEMsCisweDQwLCAweDIzLCAweDYwLCAweDkxLCAweDAwLCAweDA0LCAweDAyLCAweDE2LCAweDA4LCAweDQwLCAweDMzLCAweDIwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwOCwgMHg4MSwgMHgyMCwgMHgwNSwgMHgwMiwgMHhEMCwKKzB4MDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MjAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgwRCwgMHhDMiwgMHgyNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMCwgMHgzMCwgMHgwRCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDEzLCAweDQwLCAweDRDLCAweDAzLCAweEYwLCAweDA1LAorMHhDMCwgMHgwNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3NCwgMHgwRCwgMHhDMCwgMHgwNywgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsCisweEYwLCAweDBGLCAweEM4LCAweDJCLCAweDA4LCAweEZGLCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMiwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEIwLCAweDBGLCAweEMwLCAweDE3LCAweDIyLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg0RiwgMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHgyNCwgMHgzMCwKKzB4MTMsIDB4QzAsIDB4MkMsIDB4MDIsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MDcsIDB4MzAsIDB4Q0YsIDB4QzAsIDB4MkMsIDB4NDAsCisweDMzLCAweDA4LCAweENDLCAweDIzLCAweDcyLCAweEM3LCAweEMwLCAweENFLCAweDAwLCAweDMzLCAweDA0LCAweERDLCAweDAwLAorMHgzMCwgMHgxMywgMHhDMCwgMHhDRiwgMHgwMCwgMHgzRiwgMHgwMSwgMHhFRCwgMHgwNCwgMHgzMCwgMHgxMywgMHhDMCwgMHg0QywKKzB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4MzAsIDB4MTMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAzLCAweDIxLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDA0LAorMHg0MCwgMHgyNCwgMHgwOSwgMHhGMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgzMCwgMHgyMSwgMHg0MCwgMHhCMCwgMHgwNSwgMHgwMSwKKzB4MjYsIDB4MDUsIDB4M0IsIDB4MzAsIDB4RTEsIDB4NDAsIDB4MDUsIDB4MjEsIDB4NTEsIDB4MEIsIDB4NDQsIDB4MTgsIDB4MTUsCisweDQxLCAweEMwLCAweDIzLCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDgyLCAweDEwLCAweDAxLCAweDQyLCAweDQ0LCAweDAwLAorMHgxMSwgMHg4MCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MDMsIDB4MDQsIDB4MTEsIDB4MDEsIDB4MDQsIDB4MTIsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDY0LCAweDUzLCAweDkwLCAweDNDLCAweDQ4LCAweDI0LCAweDAyLCAweDAxLCAweDA2LAorMHgyNSwgMHg4MywgMHhEMCwgMHgwNSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNCwgMHg0OCwgMHg5MCwgMHgwMCwKKzB4NDEsIDB4MDMsIDB4MDEsIDB4ODksIDB4MDAsIDB4NDQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4NDYsIDB4MDAsIDB4ODksCisweDAwLCAweDI0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQ1LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBOCwgMHgwNSwgMHgwMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwNSwgMHg0MCwgMHgwNCwKKzB4MTIsIDB4QzEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MTQsIDB4MDksIDB4NDAsIDB4MzQsIDB4MDIsIDB4MTEsIDB4MDEsIDB4NjQsCisweDA3LCAweDEwLCAweDAxLCAweDQwLCAweDQ1LCAweDA0LCAweDU5LCAweDIwLCAweDY0LCAweDQ0LCAweDkyLCAweDExLCAweDQyLAorMHgyNywgMHgwMCwgMHg4QywgMHgwMCwgMHg0NCwgMHgwMiwgMHg5OCwgMHgxMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg4OSwgMHgwMCwKKzB4MjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEwLCAweDM3LCAweDQwLCAweDQzLCAweDAwLCAweDRDLCAweDA0LCAweDMwLCAweDIxLCAweEMxLCAweDY0LCAweDAwLAorMHhEMywgMHgwMCwgMHgyRCwgMHgwMywgMHhCMCwgMHgwRCwgMHhDNCwgMHhDMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg2QywgMHgwNywKKzB4RjIsIDB4MEQsIDB4QzAsIDB4ODQsIDB4NDAsIDB4NUIsIDB4ODEsIDB4N0MsIDB4MEMsIDB4QjEsIDB4NTEsIDB4RTAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAxLCAweEIwLCAweDA4LCAweEMwLCAweDEyLCAweDE4LCAweDFCLCAweDAxLCAweDZDLAorMHgwNCwgMHgzMCwgMHgxMSwgMHhDMCwgMHgwOSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4ODgsIDB4M0QsIDB4MjAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MjQsIDB4RjAsIDB4MDcsIDB4QzAsIDB4NzMsIDB4MDAsIDB4RkYsCisweDAwLCAweERDLCAweDAyLCAweEYwLCAweDI2LCAweEMwLCAweDBGLCAweDMwLCAweDNGLCAweDIwLCAweDlDLCAweDAzLCAweEYwLAorMHgwNSwgMHhDMCwgMHgwRCwgMHgwMCwgMHg3NywgMHgwMywgMHhEQywgMHgwMCwgMHg3MiwgMHgwMywgMHhDMCwgMHgyRCwgMHgwMiwKKzB4M0YsIDB4MDgsIDB4REMsIDB4MDMsIDB4NzQsIDB4MEIsIDB4QzAsIDB4MUQsIDB4MTgsIDB4MzYsIDB4NDksIDB4REMsIDB4MjQsCisweEYwLCAweDkzLCAweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LAorMHg3NSwgMHgwMCwgMHg1MywgMHgxMCwgMHg0QywgMHgwNiwgMHgzMiwgMHgwMSwgMHhDQSwgMHgyNCwgMHgwMCwgMHhEMywgMHgwMCwKKzB4NEQsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NkMsIDB4MDIsIDB4MzAsIDB4MEQsCisweEMxLCAweDg2LCAweDAwLCAweDRGLCAweDUwLCAweENDLCAweDE4LCAweDMwLCAweDAxLCAweEM4LCAweDA3LCAweDQwLCAweDkzLAorMHgwNSwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgwNCwgMHg5MywgMHgxMSwgMHg0QywgMHg0NiwgMHgzMCwKKzB4NTksIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NzQsCisweDAwLCAweDUxLCAweDgwLCAweDQ0LCAweDA2LCAweDEyLCAweDA1LCAweDQwLCAweDM0LCAweDA5LCAweEYxLCAweDAwLCAweDQ0LAorMHgwQiwgMHgxMCwgMHhCRCwgMHg0MCwgMHhBNCwgMHgwMiwgMHgzNSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHg3QywgMHg0MCwKKzB4MDQsIDB4MDYsIDB4NUQsIDB4MTEsIDB4MkMsIDB4MDgsIDB4MTAsIDB4MTEsIDB4MDAsIDB4NjcsIDB4MDgsIDB4OUIsIDB4MjMsCisweDM0LCAweDJCLCAweEQwLCAweEE5LCAweDQwLCAweDk0LCAweDA0LCAweDkxLCAweDAzLCAweDQ0LCAweDBFLCAweDEwLCAweDM5LAorMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4ODksIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4NEIsCisweDE0LCAweDNDLCAweDQwLCAweEEwLCAweDAwLCAweDExLCAweDAwLCAweDI0LCAweDAzLCAweDE4LCAweDI0LCAweDQwLCAweDA2LAorMHgwOCwgMHg4RCwgMHgwMiwgMHgxNCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg0OCwgMHg1MywgMHgwMiwgMHg0NSwgMHgwMCwgMHgzNCwKKzB4MDAsIDB4RDAsIDB4MDQsIDB4NDAsIDB4NjEsIDB4MDAsIDB4NDEsIDB4MDIsIDB4MDQsIDB4MDksIDB4MTAsIDB4MDQsIDB4MDIsCisweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ4LCAweDAwLCAweEI5LAorMHgwOSwgMHg4NCwgMHgwRCwgMHgxMCwgMHgxRSwgMHg0MiwgMHhGOCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhDNCwgMHg4NywgMHgxNCwKKzB4MUMsIDB4NDEsIDB4NjgsIDB4MDIsIDB4QTUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4OTIsIDB4NTAsIDB4NDgsIDB4MjAsCisweEFELCAweDIxLCAweDM2LCAweDg0LCAweDE4LCAweDEyLCAweDQwLCAweDdCLCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDA2LAorMHhEMCwgMHg5NywgMHg0MCwgMHg2RCwgMHgwMCwgMHg2MSwgMHgwOSwgMHg4NCwgMHgyNSwgMHgxMCwgMHgxNiwgMHg0MCwgMHgxMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MDAsIDB4NDAsIDB4OEIsIDB4MDgsCisweDRDLCAweDEzLCAweDMwLCAweDA4LCAweEMwLCAweDAwLCAweDQyLCAweEQzLCAweDEwLCAweDBDLCAweDAzLCAweDMwLCAweDBDLAorMHg0MCwgMHgyMCwgMHgwMiwgMHg4MywgMHgwMCwgMHgyQywgMHgwMywgMHgxMiwgMHgwNCwgMHhDMiwgMHgwMiwgMHgwMCwgMHg4RiwKKzB4MDgsIDB4MUMsIDB4MTIsIDB4MzAsIDB4MDAsIDB4RTUsIDB4MTMsIDB4MDAsIDB4QzcsIDB4MDAsIDB4M0MsIDB4MjAsIDB4RjAsCisweDA0LCAweEMwLCAweDIxLCAweDAwLCAweEQzLCAweDA4LCAweDRDLCAweDIzLCAweDMwLCAweDBELCAweEMwLCAweDQ4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHhBNywgMHgwOCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4MUYsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RkQsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDNGLCAweDBBLCAweEJFLCAweDgwLCAweEZDLCAweDAzLCAweEY0LCAweDAzLCAweEMyLCAweDBGLCAweDAyLCAweEVGLCAweDIwLAorMHhFQywgMHgwMiwgMHhGMCwgMHg4MywgMHhDMCwgMHgzRiwgMHgwMiwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwNiwKKzB4QzAsIDB4MkEsIDB4MDIsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDVDLCAweDA1LAorMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwRCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywKKzB4MDAsIDB4MTMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MEQsIDB4RDgsIDB4MDUsIDB4MTAsIDB4MTMsIDB4MDAsIDB4N0MsCisweDAyLCAweDcwLCAweDAxLCAweEM0LCAweDEzLCAweDAwLCAweDUzLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEQwLAorMHgzNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0RSwgMHgwMSwgMHgzMCwgMHgxNSwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4ODAsIDB4ODQsIDB4MDEsIDB4MTAsCisweDBFLCAweDQwLCAweDM4LCAweDAwLCAweENELCAweDEwLCAweDg0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDJCLCAweDEwLAorMHg4MSwgMHgwNCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwNCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgyMSwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4MTEsIDB4MDYsIDB4NDgsIDB4M0IsIDB4MDAsIDB4NjEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDIsIDB4MEYsIDB4NDAsIDB4MzgsCisweDIwLCAweDZELCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDA2LCAweDQwLCAweDQ4LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHgxMCwgMHgxQSwKKzB4NTAsIDB4NjgsIDB4MDAsIDB4RUQsIDB4MDUsIDB4ODQsIDB4NDcsIDB4RDgsIDB4MUUsIDB4NDAsIDB4NkYsIDB4MDAsIDB4QTEsCisweDFELCAweDg1LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweEM5LCAweDE4LCAweEUxLCAweDAxLCAweEY0LCAweDBFLCAweDUwLAorMHgxMiwgMHg0MCwgMHg1QiwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMCwgMHgxRSwgMHg0MiwgMHg3OCwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4ODQsIDB4ODcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDczLCAweDAyLCAweERELCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLAorMHhCMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwgMHhBMywgMHgwMSwgMHhDMSwgMHg0MCwKKzB4MDQsIDB4MDksIDB4MTAsIDB4OEQsIDB4NDAsIDB4NzYsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MzQsIDB4MEYsIDB4MTAsIDB4ODgsCisweDQyLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELAorMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTAsIDB4OTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzQsIDB4MDUsIDB4QzAsIDB4MUMsCisweDAxLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDA3LCAweEMwLCAweERGLCAweDQ0LCAweDczLCAweDAwLCAweENDLAorMHgzMSwgMHgzMCwgMHgxNywgMHhDMiwgMHg5RCwgMHg0MCwgMHg3MywgMHgwNywgMHhGQywgMHgyOSwgMHg3MiwgMHgxNiwgMHhDMCwKKzB4MTcsIDB4NTAsIDB4NTMsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MTAsIDB4NUYsIDB4MDAsCisweDRELCAweDAxLCAweDM0LCAweDA1LCAweEQwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwOCwgMHgwNSwgMHgwNCwgMHgxRCwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDOCwgMHgwMywgMHgwNCwKKzB4MUYsIDB4NDAsIDB4N0QsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MjAsIDB4N0MsIDB4MDAsCisweEYyLCAweDExLCAweEQwLCAweDA3LCAweDA0LCAweDBGLCAweDEyLCAweDNDLCAweDA4LCAweEYxLCAweDQxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgxMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAyLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAyLCAweDkwLAorMHgwMSwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwKKzB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDUsIDB4NEMsIDB4MDYsIDB4MTAsIDB4MDksIDB4QzgsIDB4MjQsIDB4MDAsCisweDkzLCAweDAwLCAweDY0LCAweDBBLCAweDMwLCAweDA5LCAweEMwLCAweEU0LCAweDEwLCAweDlGLCAweDAyLCAweDRELCAweDBBLAorMHgzMCwgMHg1OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4QTYsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MEEsIDB4RDAsIDB4MDgsIDB4QzAsIDB4NjYsIDB4MDAsIDB4OTEsIDB4MDEsCisweDM0LCAweDFBLCAweDEyLCAweDA5LCAweDQ4LCAweEE0LCAweDAyLCAweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDEyLCAweDk5LAorMHg1MSwgMHgyNCwgMHgwOCwgMHg5MSwgMHgyNSwgMHg0NCwgMHhBNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5MSwKKzB4MDIsIDB4MDQsIDB4MEEsIDB4MTAsIDB4MjksIDB4NTAsIDB4NjQsIDB4MDgsIDB4OUQsIDB4NDIsIDB4NDQsIDB4MEEsIDB4MTAsCisweDM5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LAorMHg4MCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyNCwgMHg0MCwgMHg5NSwgMHgwOCwgMHg3NCwKKzB4MjIsIDB4MTQsIDB4MDksIDB4NDgsIDB4QjAsIDB4MDAsIDB4RDksIDB4MDQsIDB4MjQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDAsCisweDI0LCAweDQyLCAweEQxLCAweDAwLCAweDQ1LCAweDQyLCAweDUwLCAweDA5LCAweDUyLCAweDI0LCAweDQwLCAweEExLCAweDAwLAorMHhGNCwgMHgwMiwgMHgxMCwgMHgyQSwgMHg0MiwgMHgyQywgMHgwMCwgMHhBRCwgMHgwMCwgMHhBNCwgMHgwMiwgMHgxMCwgMHgwQiwKKzB4NDIsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NjgsIDB4MDAsCisweEVELCAweDAwLCAweDg0LCAweDA2LCAweEQwLCAweDBCLCAweDQwLCAweDIyLCAweDAxLCAweDg1LCAweDA0LCAweDc0LCAweDAyLAorMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgyNSwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg2MCwKKzB4MjAsIDB4ODEsIDB4ODQsIDB4MDUsIDB4MTIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QTEsIDB4MDEsIDB4RDQsCisweDAyLCAweDEwLCAweDBBLCAweDQyLCAweDY4LCAweDgwLCAweEFELCAweDAxLCAweEE0LCAweDA2LCAweDEwLCAweDFBLCAweDQwLAorMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHg4NiwgMHgwMiwgMHgxRiwKKzB4MEEsIDB4MEQsIDB4MjgsIDB4RjAsIDB4QTIsIDB4QzAsIDB4OTQsIDB4MDIsIDB4MTcsIDB4MEEsIDB4N0MsIDB4MjgsIDB4MzAsCisweEE1LCAweEQwLCAweDg0LCAweDAyLCAweDFCLCAweDBBLCAweDJDLCAweDI4LCAweDMxLCAweEExLCAweEQwLCAweDgwLCAweDIyLAorMHgxMywgMHgwMCwgMHg0QywgMHgyOCwgMHg3MCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxMywgMHgwQSwgMHg3QywgMHgyOSwKKzB4MzAsIDB4QTEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MEYsIDB4MEEsIDB4MkMsIDB4MjgsIDB4MzIsIDB4QTIsIDB4QzAsIDB4NzcsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHg5QiwgMHgwOCwgMHhFQywgMHgwMiwgMHhGNCwgMHg4QiwKKzB4QzgsIDB4MkIsIDB4MDIsIDB4QjcsIDB4MDgsIDB4REMsIDB4MjMsIDB4RjAsIDB4OEIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4QkYsCisweDY4LCAweEJDLCAweDIyLCAweEYwLCAweDBCLCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDIwLCAweDZDLCAweDAyLCAweEY0LAorMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHg2NywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4RjMsIDB4MjgsIDB4REMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDQyLCAweEIzLCAweDA0LCAweENDLCAweDAyLCAweDMwLCAweENGLCAweEMwLAorMHgyQiwgMHgwMCwgMHhBMywgMHgwNSwgMHg0RCwgMHgxNiwgMHgzMiwgMHg5QiwgMHhDMCwgMHhBRiwgMHgxMCwgMHhCMywgMHgwNSwKKzB4REMsIDB4MzYsIDB4MzAsIDB4MEIsIDB4QzQsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4OEIsCisweEMwLCAweDNDLCAweDE4LCAweEJGLCAweDQwLCAweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDYzLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgwMSwgMHgwNCwgMHg0NCwgMHg0MSwKKzB4RDAsIDB4MDEsIDB4NDEsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MTQsIDB4NDQsIDB4MTAsIDB4MTAsIDB4QzAsIDB4NDAsIDB4ODcsCisweDQ0LCAweDExLCAweDE3LCAweDQ0LCAweDVDLCAweDE0LCAweDMxLCAweDQ0LCAweDQ3LCAweDAwLCAweDExLCAweDIyLCAweDQ0LAorMHgwNCwgMHgxMCwgMHg1NSwgMHg0MSwgMHg0NCwgMHgwNSwgMHg1MSwgMHgxNCwgMHg3NCwgMHgxMCwgMHhEMCwgMHg0MSwgMHg1MCwKKzB4MDQsIDB4MDAsIDB4NUQsIDB4MTAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4NDUsIDB4NDEsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDQ1LCAweDgxLCAweDA0LCAweDE0LCAweDEyLCAweEQwLAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwQywgMHgyNCwgMHg1MiwgMHgxMCwgMHg0OCwgMHg0NCwgMHgyMywgMHgwMywKKzB4ODEsIDB4MDgsIDB4MDQsIDB4MjIsIDB4MTAsIDB4NjgsIDB4NDAsIDB4MjcsIDB4MDEsIDB4ODksIDB4MDgsIDB4MzQsIDB4MUEsCisweDE0LCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDg5LCAweDI0LCAweDM0LCAweDUyLCAweEQxLCAweDQ4LCAweDQwLCAweDIwLAorMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjEsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDIsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDY1LCAweDAyLCAweDE0LCAweDI5LCAweDQwLCAweEE3LCAweDAxLCAweDkxLAorMHgxMSwgMHg0NCwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5OSwgMHgwNiwgMHg2NCwgMHgwQSwgMHgxMCwKKzB4MTksIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg1QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4QTcsIDB4MDEsIDB4OTMsIDB4MDAsIDB4NkQsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDEsCisweDRDLCAweDBBLCAweDMwLCAweDY5LCAweEMwLCAweDIzLCAweDI0LCAweDlCLCAweDAwLCAweDdDLCAweDA2LCAweDMyLCAweDE4LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5QSwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHg4MCwgMHg5RiwKKzB4MDIsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MjksIDB4QzAsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDIzLAorMHgwMCwgMHg4RiwgMHgwMCwgMHg1QywgMHg0RSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0NCwgMHg4RiwgMHg0MCwgMHg3QywKKzB4MDIsIDB4RjIsIDB4MDksIDB4QzIsIDB4MjcsIDB4NDAsIDB4ODcsIDB4MDEsIDB4NTQsIDB4Q0EsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYxLCAweDA5LCAweEMwLCAweDI3LCAweDBDLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDgsIDB4MDUsIDB4MDQsIDB4MUYsIDB4MDQsIDB4NEMsIDB4MDgsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDEsCisweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDAwLCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDA4LAorMHgzMCwgMHgyMSwgMHhDMCwgMHg4NCwgMHgwMCwgMHgxMywgMHgwMSwgMHgwQywgMHgwMCwgMHhCNCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDYsIDB4NEQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDIsIDB4NEQsCisweDQ4LCAweDM0LCAweDIxLCAweEQwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHhEQywgMHgwMCwgMHg2RCwgMHgwMCwgMHhDNCwgMHgwNSwgMHgzMCwgMHgwNSwgMHg0MCwgMHgxQywgMHgwMCwgMHg1MSwKKzB4MDAsIDB4QzUsIDB4MDUsIDB4MTAsIDB4MDcsIDB4NDgsIDB4MUMsIDB4MDAsIDB4NTEsIDB4MjAsIDB4NDQsIDB4MDEsIDB4NTAsCisweDY3LCAweDQwLCAweDFDLCAweDQ4LCAweDcxLCAweDEwLCAweEVDLCAweDA5LCAweDEwLCAweDE1LCAweDQwLCAweDEzLCAweDAwLAorMHg3RCwgMHg4MywgMHhDNCwgMHgwMSwgMHgwMCwgMHgxNywgMHg0MCwgMHgxRiwgMHgwMCwgMHg3RCwgMHgwMCwgMHhDNCwgMHgwOSwKKzB4MTAsIDB4MDcsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsCisweEYyLCAweDAyLCAweDhELCAweDAyLCAweDA0LCAweDA3LCAweDUwLCAweDBDLCAweDQwLCAweEIwLCAweDQwLCAweEM1LCAweDAwLAorMHg0NCwgMHgwRiwgMHgxMCwgMHg4QywgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NSwgMHgwMywgMHgxOCwgMHg2QywKKzB4NDQsIDB4MzAsIDB4MjAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MzMsIDB4MDgsIDB4Q0QsCisweDAzLCAweDA0LCAweDA1LCAweDEwLCAweDg5LCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDBCLCAweDEwLAorMHgwQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwKKzB4MTAsIDB4MkQsIDB4MDQsIDB4ODQsIDB4NDcsIDB4NTAsIDB4REYsIDB4NDIsIDB4MDgsIDB4MDQsIDB4RTUsIDB4MDAsIDB4ODQsCisweDQxLCAweDEwLCAweDFFLCAweDQwLCAweDJDLCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDEzLCAweDUwLCAweDFFLCAweDUwLAorMHgzQywgMHgwNSwgMHg0MSwgMHgyMCwgMHhBNCwgMHgwQiwgMHgxMCwgMHgwRSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMywKKzB4ODQsIDB4MEQsIDB4MTEsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQ0LCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc5LCAweDAwLAorMHhBRiwgMHgwNywgMHhDRCwgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg0MCwgMHg0MCwgMHg4NywgMHg4OSwgMHg4QywgMHgwNCwKKzB4MzQsIDB4MUUsIDB4MTAsIDB4NzgsIDB4NDAsIDB4RTMsIDB4MzEsIDB4Q0MsIDB4MEYsIDB4MzQsIDB4MUUsIDB4QzAsIDB4RTgsCisweDAwLCAweDYzLCAweDAxLCAweDBDLCAweDA0LCAweDM0LCAweDFBLCAweEMwLCAweDdCLCAweDAwLCAweEZGLCAweDAxLCAweENDLAorMHgwNiwgMHgzNCwgMHgxMiwgMHhDMCwgMHg0QiwgMHgwMCwgMHhGRCwgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4MUYsCisweDIwLCAweDdDLCAweDAzLCAweDMwLCAweDJDLCAweEMwLCAweDA3LCAweDAwLCAweERCLCAweDA0LCAweDNDLCAweDAwLCAweEYyLAorMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwNiwgMHg3QywgMHg1QiwgMHhCMCwgMHg4OCwgMHhDMCwgMHgxMywgMHgwMCwKKzB4NUYsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QjcsIDB4MEQsIDB4REYsIDB4MDAsIDB4RkMsIDB4ODAsCisweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDIwLCAweDdDLCAweDAxLCAweEYwLCAweDA5LCAweEMyLCAweDQzLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg3RCwgMHgwMCwgMHgyRiwgMHgwMSwKKzB4REMsIDB4MTMsIDB4RjAsIDB4M0YsIDB4QzAsIDB4NEMsIDB4MTAsIDB4RjcsIDB4MDEsIDB4REMsIDB4MDQsIDB4MzAsIDB4MUYsCisweEM4LCAweDZDLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA3LCAweDMxLCAweDFCLCAweEQwLCAweDZELCAweDAwLCAweDczLAorMHgwMSwgMHg5RCwgMHgwNCwgMHhCMiwgMHg0RiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHhEQywgMHgwNSwgMHgzMCwKKzB4MUYsIDB4QzAsIDB4NEMsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDgsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLCAweDI3LCAweDAwLCAweDg0LAorMHgwQSwgMHhEMCwgMHg4RiwgMHg0MSwgMHgwQywgMHgwMCwgMHhFMSwgMHgwMCwgMHhFQywgMHgwMCwgMHgxMiwgMHg0QSwgMHg0MCwKKzB4MDgsIDB4MDIsIDB4RTAsIDB4MDAsIDB4ODQsIDB4MTMsIDB4QTEsIDB4MEIsIDB4NDAsIDB4MzgsIDB4MDAsIDB4NjEsIDB4MDgsCisweDg0LCAweDAyLCAweDUwLCAweDBGLCAweDQwLCAweDNDLCAweDAyLCAweEE3LCAweDAwLCAweEM0LCAweDIxLCAweDEyLCAweDA3LAorMHg0MCwgMHgwOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgyRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsIDB4OTQsIDB4MjMsCisweEQwLCAweDBFLCAweDQwLCAweDA4LCAweDAwLCAweDg1LCAweDAwLCAweDk0LCAweDQwLCAweDEwLCAweDBFLCAweDQwLCAweDNDLAorMHgwMCwgMHhFMSwgMHgwOCwgMHg4NCwgMHgwMywgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOSwgMHgwMiwgMHgyMSwgMHgwMCwgMHhENCwKKzB4MDAsIDB4MTQsIDB4MkUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4NjEsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MTAsIDB4MDYsIDB4NDAsCisweDA4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgzNSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwKKzB4MUMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTIsIDB4MzEsIDB4NDAsIDB4MzAsIDB4MDAsCisweEMxLCAweDAwLCAweDA1LCAweDgzLCAweDkwLCAweDEwLCAweDQwLCAweDEwLCAweDA0LCAweDQxLCAweDYxLCAweDA0LCAweDA0LAorMHg1NCwgMHg5QywgMHg0NCwgMHgzMCwgMHgwOCwgMHg5NSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM1LCAweDAwLCAweEZGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDFGLAorMHhEMCwgMHgyNCwgMHgwMCwgMHhENywgMHgwMCwgMHgxQywgMHgwNCwgMHgzMCwgMHg4RCwgMHhENSwgMHg2MCwgMHgwMCwgMHhEMywKKzB4MEEsIDB4Q0MsIDB4MEIsIDB4QjAsIDB4ODMsIDB4RDEsIDB4MzksIDB4NDgsIDB4MTMsIDB4MTAsIDB4NUQsIDB4MDIsIDB4MzAsCisweDBELCAweEM0LCAweEE0LCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDA5LCAweDMwLCAweDBELCAweEMwLCAweDAwLCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDA3LCAweDAyLCAweERGLCAweDIwLCAweDVDLCAweDA4LCAweEY0LCAweDJELCAweEMwLCAweEU3LCAweDQwLCAweERGLCAweDA4LAorMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMiwgMHgxRiwgMHgyMCwgMHg3QywgMHhBMiwgMHg3NCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDEsIDB4RDcsIDB4NDAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4MkQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwOCwgMHgxRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwKKzB4MDAsIDB4QjIsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MkMsIDB4NDAsIDB4OTcsIDB4MDAsIDB4N0MsCisweDQzLCAweDMyLCAweDUzLCAweEQwLCAweDJFLCAweDAwLCAweDEzLCAweDAwLCAweEZDLCAweDIwLCAweDIwLCAweDFGLCAweEMwLAorMHgyRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQywgMHgxMCwgMHg3MiwgMHgwMCwKKzB4RkMsIDB4MjcsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgxLCAweDAwLCAweDA2LCAweDA4LCAweDExLCAweDAwLCAweDQ1LCAweDBCLCAweEQwLCAweDBELCAweEM4LCAweDQ1LCAweDAwLAorMHhEMSwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMCwgMHhCRCwgMHg0MSwgMHg2NCwgMHgyMCwgMHg5MSwgMHgwOCwgMHgzNCwgMHgwMywKKzB4MTIsIDB4MDksIDB4NDAsIDB4MTUsIDB4MDAsIDB4MTEsIDB4MDEsIDB4N0MsIDB4MDAsIDB4NTAsIDB4MUQsIDB4NDAsIDB4NzcsCisweDAwLCAweERELCAweDA5LCAweDQ0LCAweDA0LCAweEQwLCAweDNELCAweDQ4LCAweEM0LCAweDA0LCAweEQxLCAweDAwLCAweDc0LAorMHgwNSwgMHhEMCwgMHhCRCwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4QTAsIDB4NzYsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NDQsIDB4MjMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDcsIDB4MDAsIDB4QzUsCisweDAwLCAweDQ0LCAweDBDLCAweDEwLCAweDBELCAweDQwLCAweEU1LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEyLAorMHgwMCwgMHg0MSwgMHgyNiwgMHgwMCwgMHgxMSwgMHgyMywgMHgzNCwgMHgwMCwgMHhEOCwgMHg0RCwgMHg0MCwgMHgyNywgMHgwMSwKKzB4REQsIDB4MDAsIDB4NjQsIDB4NDQsIDB4RDAsIDB4NkMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4RDUsIDB4MDEsIDB4NzQsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHg3MCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHhDNSwgMHgwMCwKKzB4MDQsIDB4ODAsIDB4MTQsIDB4MEMsIDB4NTAsIDB4MjEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4ODMsIDB4MTgsIDB4MDgsCisweDUwLCAweDMxLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgwMCwgMHg4MCwgMHg4NSwgMHgwMSwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MzYsCisweDAwLCAweDkzLCAweDgwLCAweDRDLCAweDgxLCAweEYwLCAweDBGLCAweEMwLCAweDA3LCAweDIwLCAweEI3LCAweDAwLCAweDRELAorMHgwMCwgMHgzMCwgMHgwQywgMHg0NCwgMHgyNSwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMSwgMHgwMSwgMHhDNCwKKzB4MjIsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzIsIDB4MkYsIDB4MDAsIDB4NEYsIDB4NDAsCisweDZDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDA0LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LAorMHhDNCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwKKzB4M0YsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkIsIDB4NDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDBGLCAweEMwLCAweDJBLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLCAweDQwLCAweDFGLAorMHg0MCwgMHgzRiwgMHgwMCwgMHhEOCwgMHgwMCwgMHg3MiwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MEYsIDB4QzgsIDB4MEYsIDB4MDgsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZGLAorMHgwMSwgMHhGQywgMHgxMywgMHgzMiwgMHg4QiwgMHhDMiwgMHgyQywgMHgwOSwgMHhGRiwgMHgwMSwgMHhGQywgMHg2MywgMHgzMCwKKzB4NEIsIDB4QzIsIDB4N0MsIDB4MDAsIDB4QkYsIDB4MDQsIDB4Q0MsIDB4ODIsIDB4MzAsIDB4MkYsIDB4QzEsIDB4N0MsIDB4MDAsCisweEYzLCAweDAxLCAweEZDLCAweDQzLCAweDMwLCAweDRGLCAweDUwLCAweDI4LCAweDAwLCAweEYzLCAweDAxLCAweEZFLCAweDA3LAorMHhCMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGOSwgMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwRiwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MDEsCisweEY0LCAweDYzLCAweDEwLCAweDgxLCAweDQ2LCAweEU0LCAweDBBLCAweERELCAweDQxLCAweEY0LCAweDBCLCAweDUwLCAweDkxLAorMHg0MiwgMHg3NCwgMHgwMCwgMHg5QywgMHgyMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyRiwgMHhDNCwgMHgzNCwgMHgwOCwgMHhENSwKKzB4MjEsIDB4RjQsIDB4MEYsIDB4NDEsIDB4OUYsIDB4NDAsIDB4QzQsIDB4MDIsIDB4RDEsIDB4MDEsIDB4NzQsIDB4MDcsIDB4MTAsCisweDE1LCAweDQwLCAweDc0LCAweDAwLCAweEQ5LCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDFELCAweDQwLCAweDBGLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgyOCwgMHhDRCwgMHg4MCwgMHgzNCwKKzB4MTMsIDB4MDAsIDB4MDgsIDB4NDgsIDB4NDAsIDB4MjAsIDB4Q0QsIDB4ODAsIDB4MzAsIDB4MDMsIDB4MTIsIDB4MTAsIDB4NDAsCisweDMwLCAweDEwLCAweDBELCAweDFDLCAweDA0LCAweDc2LCAweDEwLCAweDRDLCAweDQwLCAweDMzLCAweDA1LCAweEMxLCAweDQwLAorMHgzNCwgMHg4MywgMHg4MCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwOCwgMHhDMSwgMHg4MCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwRCwKKzB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLAorMHgxMSwgMHgxMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHhERCwgMHg0MCwgMHg2NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0MCwgMHgzNCwKKzB4MjAsIDB4MDksIDB4MDMsIDB4MDQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDQsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsCisweDAzLCAweDkwLCAweDBELCAweDQwLCAweDY0LCAweDA0LCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDE5LCAweDQwLAorMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHgwMCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzAsCisweDMxLCAweEMwLCAweDQ0LCAweDAwLCAweERGLCAweDQwLCAweDdDLCAweDAzLCAweDMyLCAweDE5LCAweEMwLCAweDM0LCAweDA4LAorMHg5RiwgMHgwMSwgMHg0QywgMHgwNCwgMHgzMCwgMHgwRCwgMHhDNiwgMHgzNywgMHgwMCwgMHhEMSwgMHg4MCwgMHg3QywgMHg4MywKKzB4QTAsIDB4MEQsIDB4QzAsIDB4NjQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDMsIDB4QjAsIDB4M0QsIDB4QzEsIDB4MzYsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDgzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMiwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4RkYsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDAsIDB4NDAsIDB4M0YsIDB4MDAsIDB4OUYsCisweDIwLCAweDdDLCAweDgwLCAweEYxLCAweDBGLCAweEMwLCAweDNFLCAweDAwLCAweEZELCAweDAwLCAweEZDLCAweDAzLCAweDcyLAorMHgwRiwgMHg0MCwgMHgwQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGQywgMHgwMywgMHhCMCwgMHgwRiwgMHg0MCwgMHgzRCwgMHgwMCwKKzB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweEE5LCAweEMwLAorMHgwNCwgMHgwMCwgMHhEMywgMHg2MCwgMHgyQywgMHg2MywgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5QiwgMHgyMCwKKzB4NEMsIDB4MDAsIDB4MzAsIDB4OEMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MEMsCisweEMwLCAweDI3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDIzLCAweEYxLCAweDJELCAweEMwLCAweDM3LCAweDEwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MzEsIDB4NDAsIDB4MjQsCisweDAwLCAweEQxLCAweDAwLCAweEY0LCAweDBCLCAweDEwLCAweDA5LCAweDQ0LCAweDM0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LAorMHgwMiwgMHgxMiwgMHhBRiwgMHg0MCwgMHg3NCwgMHgyMCwgMHhEMSwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4RDEsIDB4ODAsIDB4MzQsIDB4MEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsCisweEY0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNywgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxNCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDIsCisweDEwLCAweDJDLCAweDQwLCAweDM0LCAweDAyLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDAzLAorMHgwMCwgMHhDNSwgMHgyMCwgMHgzNCwgMHg0RiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDgwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDI3LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEUxLAorMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNSwgMHgxMCwKKzB4MUUsIDB4NDAsIDB4RjgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NUIsIDB4MDAsCisweEUxLCAweDAxLCAweEIwLCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LAorMHhEMCwgMHgxRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwKKzB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzAsIDB4MTAsIDB4MDgsIDB4QzMsIDB4MDgsCisweDdDLCAweDAzLCAweDMwLCAweDQ0LCAweEMwLCAweDMwLCAweDAyLCAweDRGLCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDhELAorMHhFMCwgMHgzNCwgMHgwMCwgMHhDMywgMHgwOCwgMHg3QywgMHgyMywgMHgzMCwgMHgwQywgMHhDMCwgMHgxMywgMHgwMCwgMHhDNywKKzB4MDAsIDB4M0MsIDB4MDMsIDB4RjEsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsCisweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDM1LAorMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQiwgMHhDMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MjAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDA4LCAweDdDLCAweDgzLCAweEI0LCAweDBELCAweEMxLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweEIzLCAweDMwLCAweDE1LCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDRCLAorMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgyOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHhBRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4NTMsIDB4RjAsIDB4MUQsIDB4QzQsIDB4MzQsIDB4MTAsIDB4RDMsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQzLCAweDRFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgxQiwgMHhEMCwgMHg0RSwgMHg0MSwgMHgxOCwgMHgwOCwgMHhFMSwgMHg4MCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MEIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NEYsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLAorMHhCMCwgMHgxNywgMHgxMCwgMHgxQywgMHg1MSwgMHg1OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4NkQsIDB4MjEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsCisweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFDLCAweDQwLCAweDcwLCAweDQwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLAorMHgxRSwgMHg0MSwgMHg3QiwgMHg4MCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NzQsCisweDgzLCAweDEwLCAweDNDLCAweDQ1LCAweEYwLCAweDAyLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQ4LCAweEJDLCAweDQwLAorMHgzMywgMHgwMCwgMHhERCwgMHgwMSwgMHgzNCwgMHgyQiwgMHhEMSwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4RDEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4N0MsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDYwLCAweDVCLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHhDMCwgMHg3QywgMHgwMSwKKzB4MzAsIDB4MTcsIDB4QzAsIDB4REMsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MTcsIDB4QzAsIDB4MTcsCisweDAwLCAweDdGLCAweDA1LCAweEZDLCAweDI1LCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1OCwgMHgwMSwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzNywgMHhDMCwKKzB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEY0LAorMHgwMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNiwgMHgxMCwKKzB4MUYsIDB4NDEsIDB4N0MsIDB4MDAsIDB4RTAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDAxLCAweEQwLCAweEM3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NTksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgxOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzYsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDQ0LCAweDAyLCAweEQwLCAweDY5LCAweEMwLCAweEE0LCAweDAxLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHhBNywgMHgxMiwgMHg5MSwgMHg0MCwgMHgwQywgMHg5QSwgMHgxMSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5RCwgMHg0MCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgyMCwgMHg0NCwKKzB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MEEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweEE3LCAweDAwLCAweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NTgsIDB4NDAsIDB4MjMsIDB4MDEsCisweDhELCAweDQwLCAweDM0LCAweDE2LCAweEQwLCAweDQ4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDQ0LCAweDA0LCAweDEyLAorMHhEMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHhEOCwgMHg0OCwgMHg0MCwgMHgyMywKKzB4MDEsIDB4OTEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NzQsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEQsIDB4MjgsIDB4RjEsCisweEExLCAweDQwLCAweDg0LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxNywgMHgwMCwgMHg0RCwgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEY0LCAweDhCLCAweEMwLCAweDJGLCAweDBBLCAweDlGLCAweDAwLAorMHg3QywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyNywgMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4OSwKKzB4RDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUYsCisweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg3NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MUUsIDB4RjAsIDB4REIsIDB4QzAsIDB4NjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4RkMsCisweDM2LCAweDM0LCAweDU5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA3LCAweDRDLCAweDFFLCAweEYxLCAweDdCLCAweEQwLAorMHhBQywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg1OSwgMHhDMCwgMHg2RiwgMHgwMSwgMHg5QiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwMCwgMHg3NCwgMHgzQywgMHhEMCwgMHhGNSwgMHg0MiwgMHg4NywgMHgwMiwgMHgxRCwgMHgwMCwgMHg3NCwgMHgzQywKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDUsIDB4NDQsIDB4MUQsIDB4RDAsIDB4NzEsIDB4NDAsIDB4NDQsCisweDAxLCAweDFELCAweDAwLCAweDc0LCAweDA4LCAweEQwLCAweDIxLCAweDQwLCAweDk3LCAweDAyLCAweDExLCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgyMCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsCisweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDEwLAorMHgyOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNiwgMHgwNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwgMHgyMCwgMHgwMCwKKzB4OEQsIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsCisweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDRCLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4NDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NjksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDI0LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHg4MCwgMHg3NCwgMHg4MiwgMHhEMCwKKzB4ODksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgxNiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgzOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NEMsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDIzLCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LAorMHg0MSwgMHgyNywgMHgyMCwgMHg5RCwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNywgMHg4MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI3LAorMHgwMCwgMHg4RiwgMHgwMCwgMHg3RCwgMHgxNiwgMHhGMSwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4Q0EsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweDgwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MDAsCisweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDgwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwNCwgMHgxNywgMHgwMCwgMHg3QywgMHg0MCwgMHhGMiwgMHgyMSwgMHhDMCwgMHgwNCwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDI3LAorMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgxOSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4QzcsIDB4NDAsIDB4OUYsIDB4ODMsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsCisweDA1LCAweDQwLCAweDVGLCAweDAxLCAweDUxLCAweDAwLCAweEY0LCAweDAxLCAweDcwLCAweDA1LCAweDQwLCAweDE0LCAweDAwLAorMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDEsCisweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDQ3LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MCwgMHhGMywgMHgwMCwgMHhDRCwgMHg0MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4NTMsIDB4MDgsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwgMHgwRSwgMHg0MSwgMHgzQiwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsCisweDEzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgxQiwgMHgwMCwgMHhFMSwgMHg0MCwgMHhCNCwgMHgwOSwgMHg1MCwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDIsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDE3LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDA4LAorMHhFRiwgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMiwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwRCwgMHhCQywgMHgzNywKKzB4RjAsIDB4MTYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4NDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NUIsCisweDAwLCAweEU3LCAweDAxLCAweEJDLCAweDA0LCAweEYwLCAweDBFLCAweEM0LCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEJDLAorMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4NTMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDA4LCAweDdDLCAweDAzLCAweEYwLAorMHgwNSwgMHhDNCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDOCwgMHgxMywgMHgxMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLAorMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHg2MywgMHhGMCwgMHgxNywgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwKKzB4RkMsIDB4MjcsIDB4RjMsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4ODEsIDB4RjgsIDB4NDcsIDB4MzAsIDB4MUYsCisweDQ4LCAweDVGLCAweDAyLCAweEZFLCAweDIxLCAweEZDLCAweDA3LCAweEQwLCAweDlGLCAweDgwLCAweDVELCAweDAwLCAweEYzLAorMHgwOSwgMHhGQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwOSwgMHhGQywgMHgwNywgMHhGMCwKKzB4MUYsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MzksCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDg2LCAweDQxLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgwMSwgMHhDMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHgxNCwgMHg4RSwgMHg0MCwKKzB4MUEsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDIsIDB4MUMsIDB4MDUsIDB4RTUsIDB4MDgsCisweEI0LCAweDA5LCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDhFLAorMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MjMsIDB4NTgsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDYsIDB4RUQsIDB4ODAsIDB4QjAsIDB4MDMsCisweEQxLCAweDhFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0NCwgMHgzRCwgMHgwMCwgMHhFNSwgMHg0MCwgMHhCNCwKKzB4ODEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MjAsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDIzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg5MCwKKzB4MUMsIDB4NDAsIDB4MzcsIDB4MTAsIDB4Q0QsIDB4MDIsIDB4NzQsIDB4MjcsIDB4MTAsIDB4MDgsIDB4MDgsIDB4MDIsIDB4MDAsCisweEM5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEM1LCAweDQwLCAweDM0LCAweDAxLAorMHhEMSwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwQiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAzLCAweDcwLCAweDE5LCAweEMwLCAweDc3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDJELAorMHhDMywgMHgzNywgMHgwMCwgMHhGRiwgMHg0NCwgMHhGQywgMHgwMywgMHgzMSwgMHgwOSwgMHg4MCwgMHgyNywgMHgxMCwgMHhERSwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDUsIDB4MDAsIDB4RDcsIDB4NDAsIDB4NzgsIDB4MDEsIDB4RDAsCisweDBELCAweEMxLCAweDM3LCAweDEwLCAweERELCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4NDksIDB4QzQsIDB4MzcsIDB4MDQsIDB4REYsIDB4MjAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzgsCisweDM3LCAweDEwLCAweERGLCAweDEwLCAweDdDLCAweDQzLCAweEYwLCAweDI5LCAweEM0LCAweDI2LCAweDIwLCAweERCLCAweDgwLAorMHg3QywgMHgwMywgMHhGMiwgMHgwRCwgMHhDMCwgMHg4NywgMHgwNCwgMHhERSwgMHgwMCwgMHg3QywgMHgwOSwgMHhGMSwgMHg0RCwKKzB4QzAsIDB4MzcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLAorMHhGMCwgMHgwMywgMHhDMCwgMHgzQiwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMSwgMHgzRiwKKzB4MDgsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsCisweDAzLCAweDM0LCAweDBGLCAweEMwLCAweDVGLCAweDAyLCAweEZGLCAweDAwLCAweEZDLCAweDA1LCAweEQwLCAweDBGLCAweEM0LAorMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDNCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsCisweDc5LCAweDQ4LCAweDM3LCAweDMwLCAweEQxLCAweDAwLCAweDc0LCAweDFDLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLAorMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgzMSwgMHg0MCwgMHg2NywgMHgwNCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywKKzB4MTAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDEsIDB4REQsIDB4NDAsIDB4NzQsIDB4OEQsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzQsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQ4LCAweDg3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4NDAsIDB4RDEsCisweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDExLCAweDQ4LCAweDQ3LCAweDIwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLAorMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHhEQywgMHgwMCwgMHg3NCwgMHgxMSwgMHhEMCwgMHgwRCwgMHg0MiwgMHgzNSwgMHgwMCwKKzB4REQsIDB4NDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQyLCAweDA4LCAweDQwLAorMHgzMywgMHgwMCwgMHhDMSwgMHg4MCwgMHgzNCwgMHgwMiwgMHgxNSwgMHgwQywgMHg0MCwgMHgzNywgMHgyMCwgMHhDMSwgMHhDMCwKKzB4MzQsIDB4MDMsIDB4MTQsIDB4MDgsIDB4NDQsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsCisweDQwLCAweDEzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAxLCAweEQwLCAweDBELCAweDQ0LCAweDMwLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0OCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QjAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MzcsCisweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEYzLCAweDAwLCAweEZDLAorMHgwMywgMHgzMCwgMHgwMSwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjgsIDB4MEQsIDB4QzAsIDB4MzUsIDB4ODAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDA3LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHg0MCwgMHgzRiwgMHgyMCwKKzB4RkYsIDB4QzAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4ODMsCisweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEY4LCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDFGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGQywKKzB4MDMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEEwLCAweDdGLCAweDAwLCAweEIzLCAweDAyLCAweENELCAweDI3LCAweDMwLCAweDBCLCAweEMwLCAweDBDLCAweDA1LCAweDNGLAorMHgwNCwgMHhGQywgMHgwNywgMHgzMCwgMHg0NywgMHhDOCwgMHgzRiwgMHgwNSwgMHhGRiwgMHgwNCwgMHhCQywgMHhEMywgMHgzMCwKKzB4OUIsIDB4QzAsIDB4MkMsIDB4MDEsIDB4MjMsIDB4ODksIDB4Q0MsIDB4MTIsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MkMsIDB4MDIsCisweDMzLCAweDA0LCAweEZDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLCAweDdDLCAweDE4LCAweEIzLCAweDAwLCAweENDLCAweDA0LAorMHhGMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwKKzB4MzcsIDB4MTEsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MUIsIDB4NTAsIDB4ODQsIDB4MTAsIDB4MUQsIDB4MEIsCisweDc0LCAweDA3LCAweDE0LCAweEJELCAweDQwLCAweEY3LCAweDAwLCAweEZELCAweDQ5LCAweEY0LCAweDBGLCAweDEyLCAweDQ4LAorMHg1MCwgMHhGQywgMHg0MCwgMHgxMSwgMHg4NCwgMHg0NCwgMHg0QSwgMHhEMCwgMHgzMSwgMHg0NCwgMHhBQywgMHgyMywgMHgxMywKKzB4MEEsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MDQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDMsIDB4NDUsIDB4MDUsIDB4RDAsCisweDFELCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLAorMHgwNCwgMHg5MSwgMHg4QywgMHgzNCwgMHgxMywgMHgxNCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsCisweEEwLCAweDAwLCAweDA1LCAweDAwLCAweDA0LCAweDBBLCAweEQyLCAweDIxLCAweDQwLCAweDIwLCAweDQxLCAweDgxLCAweDAwLAorMHgzNCwgMHgwMywgMHhEOCwgMHgwOCwgMHg2MCwgMHgzMiwgMHgxMCwgMHhDMSwgMHg4MiwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywKKzB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4NDAsCisweDkxLCAweDAxLCAweDY0LCAweDAzLCAweDEwLCAweDg5LCAweDQwLCAweDY0LCAweDAwLCAweDFDLCAweDExLCAweDc0LCAweDAzLAorMHgxMCwgMHgxRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxNCwgMHgwOSwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4MTUsIDB4MDEsIDB4NDUsIDB4NDIsIDB4RDAsIDB4NDksIDB4NDAsIDB4MjAsIDB4QzIsIDB4OTEsIDB4MDMsIDB4NzQsCisweDAzLCAweEQwLCAweDBELCAweDUwLCAweDM2LCAweDQwLCAweEQxLCAweDAxLCAweDQ2LCAweDA3LCAweEQwLCAweDBELCAweDQwLAorMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHg4MywKKzB4MDEsIDB4NkMsIDB4MDMsIDB4MzAsIDB4MDgsIDB4QzAsIDB4NDQsIDB4MjAsIDB4MUUsIDB4MDEsIDB4N0MsIDB4MDMsIDB4MzAsCisweDNELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweEMwLCAweDdDLCAweDAzLCAweDMwLCAweDk5LCAweEMwLCAweDI0LCAweDAyLAorMHgxNywgMHg4MSwgMHg0QywgMHgwMiwgMHhGMSwgMHgwMCwgMHhEMCwgMHgyNCwgMHgwMCwgMHgxMywgMHgwMSwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4RTAsIDB4MzYsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NEMsIDB4MDQsIDB4RjIsIDB4MEQsIDB4QzIsIDB4MEIsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEJGLCAweDAwLAorMHhEQywgMHgwMywgMHhGMCwgMHgxOSwgMHhDMCwgMHgwRiwgMHgxMCwgMHgzRiwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMSwgMHgwRCwKKzB4QzAsIDB4N0YsIDB4MTIsIDB4RkYsIDB4MTAsIDB4QkMsIDB4MDMsIDB4QzAsIDB4MEIsIDB4QzAsIDB4N0YsIDB4MjAsIDB4M0IsCisweDAwLCAweEY4LCAweDI2LCAweEUxLCAweDAzLCAweEMwLCAweDI3LCAweDAwLCAweDE0LCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHg1RiwgMHhDMCwgMHhCRCwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHg4MSwgMHhGMSwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NEMsCisweDEzLCAweEYwLCAweDA5LCAweEM0LCAweDI0LCAweDAwLCAweDEzLCAweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgyNCwgMHgwMCwgMHhERiwgMHg0MCwgMHg0QywgMHgwMywgMHhCMCwgMHgwOSwgMHhDOCwgMHgyMCwgMHg0MCwgMHgxMywgMHgwMiwKKzB4NkMsIDB4MEUsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDYsIDB4NkMsIDB4MDMsIDB4RDAsIDB4MDgsCisweEMwLCAweDM0LCAweDgwLCAweDVGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDBELCAweEMwLCAweDBCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQiwKKzB4RDAsIDB4MDksIDB4NTAsIDB4NjQsIDB4MDgsIDB4OTEsIDB4MDAsIDB4MzQsIDB4MkIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QjQsCisweDAyLCAweEZELCAweDA2LCAweEM1LCAweDZGLCAweDEwLCAweDQ5LCAweDU0LCAweEI0LCAweDAzLCAweDEwLCAweDI0LCAweDQ0LAorMHgwNiwgMHgxMCwgMHhCOSwgMHg0NSwgMHgzNywgMHgwMCwgMHg5MSwgMHg4MywgMHg0NCwgMHgwMywgMHhEMSwgMHhBRCwgMHg0MCwKKzB4QjQsIDB4MDIsIDB4REQsIDB4MDAsIDB4NzQsIDB4NDcsIDB4MTAsIDB4MUQsIDB4NDMsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDcyLCAweDAwLCAweEMxLCAweDAyLCAweDQ0LCAweDhCLCAweEQwLAorMHg2OCwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgxMiwgMHgyMCwKKzB4Q0QsIDB4MDIsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MDksIDB4NDgsIDB4RjAsIDB4MTAsIDB4MTEsIDB4MjAsIDB4MDQsIDB4NEEsCisweDkyLCAweDEwLCAweDQwLCAweDIzLCAweDIwLCAweDA5LCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDM2LAorMHgxMCwgMHhDNSwgMHgwOCwgMHgzNCwgMHgwNCwgMHgxMCwgMHgwQywgMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4NDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4OUUsCisweDQwLCAweDY4LCAweDA0LCAweDI1LCAweDAxLCAweEI0LCAweDA3LCAweEQxLCAweDFBLCAweDUwLCAweDU4LCAweDAwLCAweENELAorMHg4OSwgMHg4NCwgMHgwNywgMHgxMCwgMHg5QSwgMHg0MCwgMHg3OCwgMHgwMCwgMHgzMSwgMHgyOSwgMHg4NSwgMHgwNCwgMHgxMCwKKzB4MTIsIDB4NDAsIDB4NkIsIDB4MDgsIDB4QTksIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NTAsIDB4N0EsIDB4ODAsCisweEVELCAweDQxLCAweEI0LCAweDA1LCAweDEwLCAweDFFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwNCwgMHg1MywgMHgwMCwgMHgwRSwgMHgwMywgMHhGMCwgMHgwOCwgMHhEMCwKKzB4QTQsIDB4NDAsIDB4MDcsIDB4MDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDIsIDB4Q0YsIDB4MDAsCisweDBDLCAweDAzLCAweEIwLCAweDA4LCAweEMwLCAweDMwLCAweDAwLCAweDAzLCAweDRBLCAweDZDLCAweDAyLCAweEIwLCAweDAwLAorMHhDMCwgMHgzMywgMHg0MSwgMHhDQiwgMHgxMCwgMHgyQywgMHgyMywgMHhGMCwgMHgwQywgMHhEMCwgMHgzMiwgMHgwMiwgMHhDRiwKKzB4MDAsIDB4M0MsIDB4MDAsIDB4MzQsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEI4LCAweDM5LCAweDAwLCAweEZGLCAweDAwLCAweEZELCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLAorMHgxMCwgMHg3QiwgMHgwMCwgMHhGQywgMHgwMywgMHhGOCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEIsIDB4QzQsIDB4M0IsIDB4MDAsIDB4M0YsIDB4MjgsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsCisweDNGLCAweDAwLCAweEY3LCAweDAwLCAweEZDLCAweDgzLCAweEYwLCAweDBGLCAweEQwLCAweDNELCAweDAwLCAweEZGLCAweDA4LAorMHhCQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NDksIDB4RDAsIDB4MkMsIDB4MDAsCisweDMzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweERGLCAweDA0LCAweDVDLCAweDRGLAorMHgzMCwgMHgwOSwgMHhDMCwgMHhCNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMiwgMHhGMiwgMHgwMSwgMHhDMCwgMHhBNywKKzB4MDEsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHg4OCwgMHgzOSwgMHgwMCwgMHhBRCwgMHg0MCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4QywgMHg0NCwgMHgyOCwgMHgwMCwgMHgyQiwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4Q0QsIDB4MEUsIDB4MDQsIDB4MDMsIDB4MTAsCisweDBFLCAweDQwLCAweDMwLCAweDAyLCAweDYxLCAweDAwLCAweDg2LCAweDAwLCAweEQwLCAweDAyLCAweDQ0LCAweDIzLCAweDA0LAorMHhGMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwKKzB4RDAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsCisweDc5LCAweDAwLCAweEFELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFBLCAweDQwLCAweDYwLCAweDAwLCAweEExLCAweDQxLAorMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwNSwgMHg5NCwgMHgzNywgMHgxMCwgMHgzQiwKKzB4NDAsIDB4NzksIDB4MDgsIDB4MjksIDB4MTEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MTIsIDB4NDAsIDB4RkIsIDB4MDAsIDB4RTEsCisweDgxLCAweDk0LCAweDg3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA1LCAweEQwLAorMHgxRSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywKKzB4MTAsIDB4OEQsIDB4MDksIDB4MzQsIDB4MDMsIDB4RDAsIDB4OUMsIDB4NTAsIDB4NzAsIDB4MDAsIDB4QzksIDB4MDYsIDB4MzQsCisweDAzLCAweEQwLCAweDNDLCAweDQwLCAweEIzLCAweDA0LCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDE0LCAweDFDLCAweDQwLAorMHgzMCwgMHhDMCwgMHg5OSwgMHgwNiwgMHgwNSwgMHgwMSwgMHhEMSwgMHgwQywgMHg0NCwgMHg3MywgMHgyMCwgMHhDMSwgMHgwMywKKzB4MDQsIDB4MDMsIDB4RDEsIDB4MEQsIDB4NDEsIDB4NjMsIDB4MDAsIDB4Q0QsIDB4MDYsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsCisweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLAorMHg3RiwgMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHg1OCwgMHgwMSwgMHg3MywgMHgwMiwgMHg3QywgMHgwMSwKKzB4RjAsIDB4MTYsIDB4QzAsIDB4OUYsIDB4MTAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzQsIDB4MTUsCisweDAwLCAweDdCLCAweDAwLCAweENDLCAweDQ1LCAweEYxLCAweDA3LCAweEMwLCAweDE3LCAweDQ4LCAweDczLCAweDA1LCAweDVDLAorMHgwMSwgMHhGMCwgMHgyNywgMHhDMCwgMHg1NywgMHgwMCwgMHg3RiwgMHgwMiwgMHhGQywgMHgwNSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4NUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDA3LCAweDEwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHg4MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MTcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDEyLCAweDFGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5MywgMHgxMSwKKzB4NEMsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMxLCAweDIwLCAweDAwLCAweDgzLCAweDAwLCAweDZELCAweDBFLCAweEYwLCAweDU5LCAweEMwLCAweDIwLCAweDAwLCAweDkxLAorMHg0MCwgMHg0QywgMHgwMiwgMHgxMCwgMHg4OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg4MywgMHgwOCwgMHg0QywgMHgwMiwgMHhGMCwKKzB4MTksIDB4QzAsIDB4NjQsIDB4MDEsIDB4OTAsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4NDMsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEE2LCAweDAyLCAweDkxLCAweDAxLCAweDQ0LAorMHgwNiwgMHhEMCwgMHgzOSwgMHg0MSwgMHg2NCwgMHgxMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg1MCwKKzB4MjQsIDB4NDAsIDB4OTEsIDB4NDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDQsIDB4RTQsIDB4NDAsIDB4OTEsIDB4MDEsCisweDA0LCAweDAyLCAweDE1LCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDlCLCAweDAzLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LAorMHg0MCwgMHgyMCwgMHgyMCwgMHg5MSwgMHgwOSwgMHgzNCwgMHgwMiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjAsIDB4NDQsIDB4QzEsIDB4MDQsIDB4NDUsIDB4MDIsCisweEQwLCAweDQ5LCAweDQwLCAweDI0LCAweDAxLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDBELCAweDUwLCAweDM0LAorMHgxMCwgMHg5OSwgMHgwMCwgMHg2NSwgMHgwMiwgMHhDMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5NSwgMHgwNCwgMHg0NCwKKzB4MTIsIDB4NTEsIDB4MjksIDB4NTAsIDB4MjQsIDB4MjAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4NDksIDB4NTAsCisweDI0LCAweDQwLCAweERELCAweDgwLCAweDc0LCAweDEyLCAweDEwLCAweDg5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwNCwgMHgwNCwgMHgwMiwgMHhEMCwKKzB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDksIDB4NDAsIDB4MjAsIDB4MDEsCisweDg5LCAweDA0LCAweDA0LCAweDEzLCAweEQwLCAweDA4LCAweDQwLCAweDYwLCAweDgxLCAweDg1LCAweDIwLCAweDQ2LCAweDEyLAorMHg1MCwgMHg0OCwgMHg0MCwgMHgyNCwgMHgwMSwgMHhDOSwgMHgwNCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OEQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDEzLCAweDBBLCAweDRDLCAweDI5LCAweEYwLCAweDAxLAorMHhDMCwgMHg4NCwgMHgwMiwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxQiwKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RDIsIDB4QTEsIDB4QzAsIDB4MDQsIDB4MjAsIDB4MDcsIDB4MkEsIDB4NEMsIDB4MjgsIDB4NzAsCisweDAxLCAweEQwLCAweDg0LCAweDQyLCAweDEzLCAweDBBLCAweDRELCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDg0LCAweDAyLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEIsIDB4RDAsCisweDJGLCAweDQyLCAweEJGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEQwLCAweDJGLCAweDAyLCAweDk3LCAweDA4LAorMHg3QywgMHgyMiwgMHhGMCwgMHgwQSwgMHhEMCwgMHgyRiwgMHgyMiwgMHhCQiwgMHgwMCwgMHhGRCwgMHgyMiwgMHhCMCwgMHg4QiwKKzB4RDAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MTAsIDB4QjMsCisweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCNywgMHgwQywgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQywKKzB4MDIsIDB4QjMsIDB4MDQsIDB4M0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4Q0MsCisweDE2LCAweDMwLCAweDBBLCAweEMwLCAweDZDLCAweDI4LCAweEJGLCAweDAwLCAweENDLCAweDFFLCAweDMwLCAweDVCLCAweEMwLAorMHg2RiwgMHg0MSwgMHhCMywgMHgwNSwgMHhDQywgMHgwMiwgMHhGMCwgMHhDQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweDA4LCAweDA3LCAweDAxLCAweDExLCAweDBDLCAweDZDLCAweDQwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDAyLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHg4MSwgMHg0MCwgMHg4NCwgMHgxMCwgMHgzRCwgMHgwMiwgMHg0NSwgMHgwOCwKKzB4QjAsIDB4NTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MTUsIDB4NDUsIDB4MTQsIDB4MTAsIDB4MDEsIDB4NDAsIDB4QzMsCisweDE1LCAweDExLCAweDE0LCAweDQ0LCAweDEwLCAweEQxLCAweEMxLCAweDQwLCAweDA0LCAweDA0LCAweDExLCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4MjMsIDB4MDUsIDB4ODUsIDB4MDQsIDB4MDQsIDB4MTIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4NzAsIDB4NjAsIDB4ODEsCisweDA4LCAweEI0LCAweDAyLCAweEQwLCAweDFBLCAweDUwLCAweDZBLCAweDAyLCAweEFELCAweDAyLCAweDA0LCAweDIyLCAweDEwLAorMHgwOCwgMHg2MSwgMHhBMCwgMHgwMCwgMHg4RCwgMHg4MSwgMHgwNCwgMHgxQSwgMHg5MCwgMHgzOCwgMHg0MCwgMHgyMywgMHg0MiwKKzB4ODEsIDB4MDYsIDB4MDQsIDB4NTIsIDB4RDEsIDB4NTgsIDB4NDAsIDB4MjAsIDB4NDEsIDB4QzEsIDB4MDgsIDB4MzQsIDB4MDYsCisweEQwLCAweDBDLCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LAorMHgyMSwgMHgwMCwgMHg5MSwgMHgxMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHg4OSwgMHgxMCwgMHgyMCwgMHgwMSwgMHg5MSwgMHgwNCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkUsIDB4MDEsIDB4QkQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksCisweDYwLCAweDI0LCAweDAwLCAweDlELCAweDQwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLCAweDkxLAorMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgxMSwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsCisweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDA1LCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhEMCwKKzB4MjQsIDB4MjAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDYsIDB4QjAsIDB4MjksIDB4RTAsIDB4NjcsIDB4MDIsIDB4OTMsIDB4MDQsCisweDRELCAweDAyLCAweEYwLCAweDE5LCAweEQwLCAweDY0LCAweDAwLCAweDkzLCAweDAzLCAweDdDLCAweDAyLCAweEYyLCAweDA5LAorMHhEMCwgMHgxNCwgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MDIsCisweEYwLCAweDk4LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwOSwgMHg3QywgMHgwRSwgMHg3MCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsCisweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDBGLAorMHgwMywgMHg0RCwgMHgwNCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwKKzB4MTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MkMsIDB4MDAsIDB4RjgsIDB4MDEsIDB4QzEsIDB4MDYsIDB4MDQsCisweDEzLCAweDAwLCAweDBDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAyLCAweDEzLCAweDAyLCAweDdDLCAweDAwLAorMHhGMCwgMHg0MSwgMHhDMCwgMHg0NCwgMHgwMiwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg1MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4REMsIDB4MDAsIDB4N0QsIDB4MDEsCisweEM0LCAweDE1LCAweDcwLCAweDE2LCAweDQwLCAweDlDLCAweDAwLCAweDUxLCAweDAxLCAweDc0LCAweDAxLCAweDE0LCAweDA1LAorMHg0MCwgMHg1NywgMHgwMCwgMHg0MSwgMHgwMCwgMHhDNCwgMHg0MSwgMHhEMCwgMHgwNywgMHg0MCwgMHgxQywgMHgyMCwgMHg1MSwKKzB4MDQsIDB4QzQsIDB4MDksIDB4RDEsIDB4NTcsIDB4NDAsIDB4MTQsIDB4MTAsIDB4N0IsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsCisweDM3LCAweDQwLCAweDFDLCAweDAwLCAweDUxLCAweDAwLCAweDQ1LCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDUzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhFMiwgMHgwNCwgMHhDRCwgMHgwMSwgMHgwNCwKKzB4MDMsIDB4NTAsIDB4MUMsIDB4NDAsIDB4QjEsIDB4MDQsIDB4ODEsIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsCisweDczLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDEzLCAweEQwLCAweDJELCAweDQwLCAweDcyLCAweDAwLCAweEQxLCAweDQwLAorMHgwNCwgMHgyQSwgMHg1OCwgMHg3QywgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgzNCwgMHgyNywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDA0LCAweEZELCAweDEwLCAweDg0LCAweDAzLAorMHg1MCwgMHgwNiwgMHg0MSwgMHgyOSwgMHgwMSwgMHhBMSwgMHgxMCwgMHhCNCwgMHgwNSwgMHgxMCwgMHgwRSwgMHg0MCwgMHg1MywKKzB4MDQsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MEIsIDB4NDAsIDB4NEEsIDB4QzQsIDB4QTEsIDB4MDAsIDB4ODQsCisweDA1LCAweEQwLCAweDEyLCAweDQwLCAweDM4LCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDJFLCAweDQwLAorMHgzOCwgMHgwMCwgMHhDMSwgMHgwMSwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxNywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsCisweDEwLCAweEMwLCAweEZELCAweDQwLCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDdCLCAweDQwLAorMHhFMywgMHgwMSwgMHhBQywgMHgwNCwgMHhEMCwgMHgxQSwgMHhDMCwgMHg0MiwgMHgwMCwgMHhBMywgMHgwMSwgMHg4RCwgMHgwMiwKKzB4NzgsIDB4MTAsIDB4QzAsIDB4NzgsIDB4MDQsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsCisweDAwLCAweEUxLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFBLCAweEMwLCAweDU3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwMSwKKzB4RDAsIDB4MjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDA1LCAweDAwLCAweDhGLCAweDAyLCAweEZDLCAweDAwLCAweEYwLAorMHgwMSwgMHhEMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNywgMHg1MCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZCLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDIzLCAweEI0LCAweDEzLCAweEMwLAorMHg2QywgMHgyMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwKKzB4QkMsIDB4MDQsIDB4MzAsIDB4MUYsIDB4RDAsIDB4NEQsIDB4MDAsIDB4RjMsIDB4MDMsIDB4Q0MsIDB4MjQsIDB4RjAsIDB4MTMsCisweEMwLCAweDdGLCAweDA4LCAweEYzLCAweDAxLCAweERDLCAweDA2LCAweDMwLCAweDFGLCAweEMwLCAweDdDLCAweDEwLCAweEYzLAorMHg4MSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4ODAsIDB4QjksIDB4MDAsIDB4NzEsIDB4MDIsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MjgsCisweDAwLCAweEUxLCAweDAwLCAweEFDLCAweDAxLCAweEMwLCAweDA2LCAweEMwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwOCwgMHgwMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMSwgMHhBNSwgMHgwNCwgMHg5NCwgMHgwMCwgMHhEMCwgMHgwMiwgMHhDMCwKKzB4MzksIDB4MDAsIDB4RTUsIDB4MDIsIDB4QzQsIDB4MDIsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4RTEsIDB4MTQsCisweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgyMiwgMHgxOCwgMHgwMiwgMHg0MSwgMHgzOCwgMHgwMCwKKzB4QTEsIDB4MTAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MjYsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4OTQsIDB4MDAsCisweDEwLCAweDBBLCAweDQ1LCAweDA5LCAweDIwLCAweEUxLCAweDgwLCAweDg0LCAweDA4LCAweEQ4LCAweDAyLCAweDQwLCAweDMzLAorMHgwMCwgMHhFMSwgMHgwMCwgMHg5NCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MEIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisweDI4LCAweDEzLCAweDAwLCAweDQxLCAweDAwLCAweDQ0LCAweDAyLCAweDE0LCAweDAwLCAweDQwLCAweDIwLCAweDAyLCAweDgxLAorMHgwMSwgMHgyNCwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNCwKKzB4MTgsIDB4NDAsIDB4NDAsIDB4MEEsIDB4ODEsIDB4NTMsIDB4MTQsIDB4MDQsIDB4RDAsIDB4MzAsIDB4NDAsIDB4MzEsIDB4MjAsCisweEM1LCAweDAyLCAweDA0LCAweDAyLCAweDUwLCAweDJDLCAweDQwLCAweDUwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDIzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwKKzB4MjEsIDB4MDAsIDB4RDMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4MzQsIDB4MDEsIDB4RDAsIDB4MUMsIDB4NTAsIDB4ODMsIDB4MDMsCisweDRELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDc0LCAweDQwLCAweEQzLCAweDAwLCAweDVDLCAweDAwLCAweDMwLCAweDFELAorMHhDOCwgMHg0NSwgMHhFMCwgMHg5MywgMHgwNSwgMHgwQywgMHgxMiwgMHhGMCwgMHg2OSwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywKKzB4MDIsIDB4NUMsIDB4MDIsIDB4MzEsIDB4MEQsIDB4QzQsIDB4NzQsIDB4MjQsIDB4RDMsIDB4ODAsIDB4N0MsIDB4MDcsIDB4RjAsCisweDBELCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEE3LAorMHg0MCwgMHhERiwgMHg0MiwgMHg3QywgMHgwMywgMHg3MCwgMHgwMSwgMHhDMCwgMHg5NywgMHgwOCwgMHg5RiwgMHgxMCwgMHg1QywKKzB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTEsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDgsIDB4RjAsIDB4MEQsIDB4QzAsCisweDgzLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHg3NSwgMHhEMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4NkYsIDB4MjEsCisweEIzLCAweDkwLCAweENDLCAweDAzLCAweDMwLCAweDAwLCAweEMwLCAweDFDLCAweDAwLCAweERGLCAweDAwLCAweENDLCAweDA2LAorMHhGMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHg4QywgMHgwNCwgMHgzMCwgMHg0QiwgMHhDOCwgMHgwNCwKKzB4MDAsIDB4QkQsIDB4MDUsIDB4RkMsIDB4MDIsIDB4MTAsIDB4MDMsIDB4QzEsIDB4N0IsIDB4MDAsIDB4MzMsIDB4MTksIDB4Q0MsCisweDAyLCAweEYwLCAweDBBLCAweEMwLCAweDJDLCAweDAwLCAweEYxLCAweDEwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhFNiwgMHg0MCwgMHg5MSwKKzB4MDIsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MTEsIDB4NDAsIDB4OTQsIDB4MDIsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsCisweDA4LCAweDQwLCAweDE0LCAweDAwLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDQ5LCAweDQwLCAweEM0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg2NCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0MCwgMHgzNywgMHgxMiwgMHhENSwgMHgwMywgMHg0NCwgMHgwNiwKKzB4RDAsIDB4MTEsIDB4NTAsIDB4QTQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsCisweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDAwLCAweEMxLCAweDAxLAorMHg0NCwgMHgwNywgMHg5MiwgMHgxMSwgMHg0MCwgMHhBNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgyMiwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MjAsIDB4MTQsIDB4MDQsIDB4NDAsIDB4NDQsIDB4MDQsIDB4OTEsCisweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDExLCAweDQ0LCAweDI3LCAweDAwLCAweEMxLCAweDAwLCAweDQ0LCAweDEyLCAweEQwLAorMHg0RCwgMHg1MSwgMHg3MCwgMHgwMCwgMHhENSwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0OCwgMHgwNywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsCisweDA3LCAweDkwLCAweDEwLCAweDUwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDAwLCAweEQwLCAweDAwLCAweDQwLAorMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg1MCwgMHgwNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwKKzB4NjQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4NDAsIDB4QzUsIDB4MjAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MEMsCisweDQ4LCAweDMwLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyNiwgMHgwMCwgMHhEMywgMHg0MCwgMHg0QywgMHgwMywKKzB4QjQsIDB4MDEsIDB4QzAsIDB4MzAsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjQsCisweDIwLCAweEQzLCAweDAwLCAweDRELCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweEFCLCAweDAwLCAweDdDLAorMHgwMCwgMHhGNCwgMHgwMSwgMHhDOCwgMHgyRiwgMHg0MCwgMHgwMywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4ODAsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAxLCAweDcwLAorMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4OTEsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MTAsIDB4QkIsIDB4MDAsIDB4RUMsIDB4MDAsCisweDMwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4ODAsIDB4QzAsIDB4MEUsIDB4MDIsIDB4M0EsIDB4MDgsIDB4RTgsIDB4MjgsCisweEI4LCAweEEzLCAweEMwLCAweDhFLCAweDAyLCAweDNBLCAweDA4LCAweEVDLCAweDI4LCAweEEwLCAweDgzLCAweEUwLCAweDhFLAorMHg4MiwgMHgzQiwgMHgwQSwgMHhFQywgMHgyOCwgMHhBOCwgMHg4MywgMHhDMCwgMHg4RSwgMHg4MiwgMHgzQiwgMHgwRSwgMHhFNiwKKzB4MjgsIDB4QTAsIDB4ODMsIDB4RTAsIDB4OEUsIDB4ODIsIDB4M0IsIDB4MEEsIDB4RUMsIDB4MjAsIDB4QjgsIDB4ODMsIDB4RTAsCisweDBFLCAweDgyLCAweDNBLCAweDBBLCAweEVFLCAweDIwLCAweEIwLCAweDAzLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MywgMHgyMiwgMHgyMCwgMHg4RSwgMHg4MCwgMHgzQiwgMHgwMiwgMHhDQSwgMHgwOCwgMHhBOCwKKzB4MjMsIDB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RTgsIDB4MDgsIDB4QTgsIDB4MjMsIDB4RTAsIDB4OEUsIDB4MDAsCisweDEzLCAweDAyLCAweEU4LCAweDA4LCAweEE4LCAweDIzLCAweEEwLCAweDg0LCAweDAwLCAweDNCLCAweDAyLCAweEVDLCAweDA4LAorMHgyOCwgMHgyMywgMHhFMCwgMHg4QSwgMHgwMCwgMHgzOSwgMHgwMiwgMHhFOCwgMHgwOCwgMHhCQSwgMHgyMywgMHg0MCwgMHg4NCwKKzB4ODAsIDB4M0IsIDB4MDAsIDB4RUUsIDB4MDgsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIxLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQwLCAweDEwLCAweDIwLCAweDQxLAorMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHg4NCwgMHgwMSwgMHgxMiwKKzB4MDYsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDYsIDB4NDgsIDB4MTAsIDB4MDAsCisweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLAorMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODMsIDB4MDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDgsIDB4QTIsIDB4NjEsIDB4ODAsCisweDg2LCAweEEwLCAweDFBLCAweDAwLCAweDI4LCAweDA4LCAweEE4LCAweDAxLCAweDgwLCAweDA2LCAweDAwLCAweDFBLCAweDgwLAorMHg2OCwgMHgwOCwgMHhBQSwgMHgwMSwgMHg4MCwgMHg4NiwgMHgwMSwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwOCwgMHhBOCwgMHgwMCwKKzB4ODAsIDB4ODYsIDB4MDAsIDB4M0EsIDB4MDIsIDB4NjgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MEEsCisweDA0LCAweDYwLCAweDAwLCAweEEwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMCwgMHgxMiwgMHhBMCwgMHg0RSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBMCwgMHgxMywgMHhBMCwgMHg0RSwKKzB4ODEsIDB4M0EsIDB4MDEsIDB4RTgsIDB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsIDB4Q0UsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RTgsCisweDM0LCAweEE4LCAweDEzLCAweEEwLCAweENFLCAweDgwLCAweDNBLCAweDAxLCAweEVBLCAweDA0LCAweEE4LCAweDEzLCAweEEwLAorMHg0RSwgMHg4MCwgMHgyQSwgMHgwMSwgMHhBOCwgMHgwNCwgMHhBOCwgMHgxMiwgMHhBMCwgMHg0RSwgMHg4MCwgMHgzMiwgMHgwMSwKKzB4RUEsIDB4MDQsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsCisweDAyLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLAorMHgxOCwgMHgwMSwgMHg2MiwgMHgwMCwgMHg4MCwgMHg4MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxOCwgMHgwMCwgMHg0MiwgMHgwMCwKKzB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsCisweDAzLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLAorMHgwMCwgMHg4MCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg4MiwKKzB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MjAsIDB4ODQsIDB4ODAsIDB4MTAsCisweDA4LCAweDQyLCAweDEwLCAweDA4LCAweDExLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDBDLCAweDQyLCAweDA4LCAweDA4LAorMHgxMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgxMSwgMHgyMCwgMHgwNCwgMHg4MCwKKzB4MTAsIDB4MDQsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDQsCisweDA4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweEYyLCAweEEwLAorMHgwMiwgMHgwMywgMHgwQSwgMHgwNCwgMHgyOCwgMHgxQywgMHhBQSwgMHg1MCwgMHhBMCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwNiwKKzB4MkEsIDB4MTAsIDB4QTAsIDB4RDAsIDB4ODAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDQsIDB4MEEsIDB4MzAsIDB4QTAsIDB4NTAsCisweEEwLCAweDAyLCAweDAxLCAweDBBLCAweDBFLCAweDI4LCAweDEwLCAweEEwLCAweDUwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLAorMHgwNCwgMHgyQSwgMHgxNCwgMHhBMCwgMHg0MCwgMHg4MCwgMHgwMiwgMHgwMSwgMHgyQSwgMHgwNSwgMHgyOCwgMHgzQywgMHhBOCwKKzB4MDAsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4ODAsIDB4QzgsCisweDAwLCAweEEyLCAweDAzLCAweEE4LCAweDJFLCAweEEwLCAweDMyLCAweDgwLCAweEVBLCAweDAwLCAweEFBLCAweDAzLCAweDA4LAorMHgwQywgMHhBMCwgMHgzQSwgMHg4MCwgMHg2QSwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwQywgMHgyMCwgMHgzQSwgMHg4MCwKKzB4NkEsIDB4MDAsIDB4ODIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4QTAsIDB4M0EsIDB4ODAsIDB4RUEsIDB4MDEsIDB4QTIsIDB4MDMsCisweDA4LCAweDBFLCAweEEwLCAweDNBLCAweDgwLCAweEUwLCAweDAwLCAweEFBLCAweDAzLCAweDA4LCAweDFDLCAweDIwLCAweDAyLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwOCwgMHg4MCwKKzB4MzAsIDB4MDEsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDQsCisweDgwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDA4LCAweDAyLCAweDAwLCAweDgyLAorMHgwMCwgMHgxMCwgMHgwNiwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODIsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDE2LCAweDQwLCAweDE4LCAweDAwLCAweDYxLAorMHgwMCwgMHgwNCwgMHgyMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwNiwgMHgwMSwgMHgxMCwKKzB4MDQsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MTAsIDB4ODAsCisweDQxLCAweDAwLCAweDA2LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA2LCAweDAxLAorMHgxMCwgMHgwNCwgMHg2MCwgMHgxNCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHg4MiwgMHg4QywgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsIDB4QTAsIDB4MDYsIDB4ODAsIDB4OUEsIDB4MDAsCisweDZELCAweDAyLCAweEEwLCAweDAxLCAweEEwLCAweDI2LCAweDQwLCAweDlCLCAweDAwLCAweDRBLCAweDAwLCAweEIwLCAweDA5LAorMHg4OCwgMHgyNiwgMHg4MCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwMCwgMHg4MCwgMHgwOSwgMHhBMCwgMHgyNiwgMHg0MCwgMHg5MiwKKzB4MDAsIDB4NDgsIDB4MDAsIDB4QjAsIDB4MDksIDB4ODAsIDB4MjYsIDB4ODAsIDB4OUEsIDB4MDAsIDB4NEEsIDB4MDIsIDB4QTgsCisweDA5LCAweEEwLCAweDI0LCAweDgwLCAweDlCLCAweDAwLCAweDRBLCAweDAwLCAweEE4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMiwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQSwgMHgwMSwgMHg2OCwKKzB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4NDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkUsIDB4MDQsIDB4QTgsIDB4MDEsIDB4QzAsCisweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDZBLCAweDAwLCAweEIwLCAweDAxLCAweEUwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLAorMHg2RSwgMHgwNCwgMHhBOCwgMHgwMSwgMHhDOCwgMHgwNiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2RSwgMHgwMCwgMHhCMCwgMHgwMSwKKzB4RTAsIDB4NDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QjAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDQyLCAweDIwLCAweDBDLCAweDgxLCAweDMxLCAweDBDLCAweDgyLCAweDEwLAorMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMCwgMHgzMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwQywKKzB4MDEsIDB4MzAsIDB4MEMsIDB4QzIsIDB4MzAsIDB4MTAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsCisweDMwLCAweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDBDLCAweEMwLCAweDEwLCAweDA4LCAweDQzLCAweDAwLAorMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsCisweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLAorMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDgsIDB4MDgsCisweDAwLCAweDIwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHg0MCwgMHg4MCwgMHg0QywgMHgyMywgMHgzMiwgMHgwNCwgMHhDQSwgMHgxMCwgMHgyMCwgMHg0MywKKzB4ODAsIDB4MEMsIDB4MDMsIDB4MzIsIDB4MEMsIDB4Q0EsIDB4MTAsIDB4MjAsIDB4NDMsIDB4ODgsIDB4NEMsIDB4MjMsIDB4MzIsCisweDA1LCAweEM4LCAweDE0LCAweDIwLCAweDQzLCAweDgwLCAweDRDLCAweDgxLCAweDMyLCAweDA1LCAweENBLCAweDEwLCAweDIwLAorMHg0MywgMHg4MCwgMHg0OCwgMHgwMywgMHgzMiwgMHgwNSwgMHg4OCwgMHgxMCwgMHgyMCwgMHhEMywgMHhBMCwgMHgwQywgMHgwMywKKzB4MzIsIDB4MDQsIDB4Q0EsIDB4MTAsIDB4MjAsIDB4MDMsIDB4ODQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEyLCAweDQyLCAweEEwLCAweDA2LCAweDgzLCAweDNBLCAweDA0LCAweDZBLCAweDEwLCAweEE4LCAweDQxLCAweEEwLAorMHgwNiwgMHg4MywgMHgxQSwgMHgwQywgMHg0QSwgMHgzMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwgMHg4MSwgMHgxQSwgMHgwQywKKzB4NEEsIDB4MzAsIDB4QTgsIDB4NDEsIDB4ODAsIDB4MEUsIDB4ODMsIDB4MUEsIDB4MEMsIDB4NEEsIDB4MzAsIDB4ODgsIDB4NDEsCisweEEwLCAweDA2LCAweDAxLCAweDBBLCAweDBDLCAweDA4LCAweDEwLCAweEE4LCAweDQxLCAweEEwLCAweDA2LCAweDgzLCAweDFBLAorMHgwNCwgMHg2QSwgMHgxMCwgMHhBOCwgMHgwMSwgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTMsIDB4NDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTgsIDB4MDQsIDB4QzAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsCisweDAxLCAweDIwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDA0LCAweDQwLAorMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsCisweDQwLCAweDEwLCAweDAwLCAweDAxLCAweDhDLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLAorMHg0QSwgMHgyMCwgMHgyQywgMHg4MSwgMHgxMCwgMHgwQywgMHg4MiwgMHgxMiwgMHg4OCwgMHg0MSwgMHgyMCwgMHgyNiwgMHg4MSwKKzB4QjAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MjYsIDB4ODMsIDB4OTAsIDB4MDQsIDB4MDIsIDB4MTIsCisweDA4LCAweDQxLCAweDAwLCAweDI2LCAweDgxLCAweDkwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDI2LAorMHg4MywgMHg5MCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4OCwgMHhDOSwgMHgyMCwgMHgwQywgMHg4MSwgMHhCMCwgMHgwNCwgMHg2MiwKKzB4MTIsIDB4ODgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MDYsCisweDIwLCAweDFBLCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweEE4LCAweDA2LCAweEEwLCAweDFBLCAweDgwLCAweDYyLAorMHgwMCwgMHg4MCwgMHgwMSwgMHgyOCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwgMHg0MiwgMHgwMCwgMHgwQSwgMHgwMSwgMHhBMCwKKzB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NkEsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjgsIDB4MDYsIDB4QTAsIDB4MUEsIDB4ODAsCisweDZBLCAweDgwLCAweDA4LCAweDAxLCAweEE4LCAweDA2LCAweDgwLCAweDE4LCAweDgwLCAweDYyLCAweDAwLCAweEE4LCAweDAxLAorMHg4OCwgMHgwMiwgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4MCwKKzB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsCisweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLAorMHhBMCwgMHg4MiwgMHgwMSwgMHgyQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwKKzB4MDYsIDB4QUEsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4OEEsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQ4LCAweDgwLCAweDIwLAorMHg4MSwgMHgwMiwgMHg4NCwgMHgwOCwgMHgxMiwgMHgyMCwgMHg0MCwgMHg4MCwgMHgyMCwgMHg4MSwgMHg4MiwgMHgwNCwgMHgwOCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MjAsIDB4MDEsIDB4ODIsIDB4MDQsIDB4NEEsIDB4MTIsIDB4MjAsIDB4NDAsIDB4ODAsCisweDIwLCAweDAxLCAweDgyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDIwLCAweDAxLCAweDgyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0OCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4MiwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHgwMCwKKzB4MEMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NjIsIDB4QzAsIDB4ODAsIDB4MDEsCisweDAzLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEFFLCAweDE4LAorMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHg4MSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhBMCwgMHg2MiwgMHhDMCwgMHg4QSwKKzB4ODEsIDB4MjksIDB4MDYsIDB4QUUsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QTYsCisweDE4LCAweEIwLCAweDYyLCAweDYwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDAyLCAweDhDLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHg4MCwgMHg4RSwgMHgwMSwgMHgzQSwKKzB4MDYsIDB4RUUsIDB4MTgsIDB4QTQsIDB4NjMsIDB4ODAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RTgsIDB4MTgsIDB4QjAsCisweDYzLCAweDgwLCAweDhFLCAweDAxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDYzLCAweDgwLCAweDhFLCAweDgxLAorMHgzQSwgMHgwNiwgMHhFMCwgMHgxOCwgMHhCMCwgMHg2MywgMHg4MCwgMHg4RSwgMHg4MSwgMHgzQiwgMHgwNiwgMHhFOCwgMHgxOCwKKzB4QTgsIDB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4M0IsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweEMwLCAweDhFLCAweDAxLCAweDNBLCAweDA2LAorMHhFOCwgMHgxOCwgMHhCMCwgMHg2MywgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwgMHhDQywgMHgxOCwgMHhBMCwgMHg2MywKKzB4QzAsIDB4OEUsIDB4MDEsIDB4M0IsIDB4ODYsIDB4RUEsIDB4MTgsIDB4MzAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0IsCisweDA2LCAweENDLCAweDE4LCAweEEwLCAweDYzLCAweEMwLCAweDhFLCAweDAxLCAweDNCLCAweDA2LCAweEVDLCAweDE4LCAweEIwLAorMHg2MywgMHhFMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFRSwgMHgxOCwgMHhCMCwgMHgwMywgMHg4OCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4QTAsIDB4OEUsIDB4ODEsIDB4MzEsIDB4MDYsIDB4QzIsCisweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLCAweDgxLCAweDMwLCAweDA2LCAweEMyLCAweDE4LCAweDBBLCAweDYzLCAweEEwLAorMHg4RSwgMHgwMSwgMHgxMCwgMHgwNiwgMHhDNCwgMHgxOCwgMHgzMCwgMHg2MywgMHgwMCwgMHg4QywgMHgyMSwgMHgxMCwgMHgwNiwKKzB4QzAsIDB4MTgsIDB4MDgsIDB4NjEsIDB4QTAsIDB4OEUsIDB4QTEsIDB4MzgsIDB4ODYsIDB4ODAsIDB4MTgsIDB4QTgsIDB4NjMsCisweDAwLCAweDg0LCAweDgxLCAweDM4LCAweDA2LCAweEVFLCAweDE4LCAweEE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxQSwgMHgwNCwgMHhFOCwgMHgxMCwKKzB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4M0EsIDB4MDQsIDB4NDgsIDB4MTAsIDB4QTAsIDB4NDMsIDB4ODAsIDB4MDQsCisweDAxLCAweDEyLCAweDA0LCAweDY4LCAweDEwLCAweDIwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LAorMHgxMCwgMHgyMCwgMHg0MywgMHg4MCwgMHgwNCwgMHgwMSwgMHgzMiwgMHgwNCwgMHg2OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwKKzB4MDQsIDB4MDEsIDB4MzIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDgwLCAweDg2LCAweDAxLCAweDEyLCAweDA2LCAweDZBLCAweDE4LCAweEEwLAorMHg2MCwgMHg4OCwgMHg4NiwgMHg4MSwgMHgxQSwgMHgwNiwgMHg0OCwgMHgxOCwgMHhBOCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwKKzB4MDIsIDB4ODYsIDB4NDgsIDB4MTgsIDB4QTAsIDB4NjEsIDB4ODAsIDB4ODQsIDB4MDEsIDB4MUEsIDB4MDYsIDB4NDgsIDB4MTgsCisweEE4LCAweDYxLCAweDg4LCAweDg2LCAweDAxLCAweDFBLCAweDA2LCAweDQ4LCAweDE4LCAweEEwLCAweDYxLCAweDgwLCAweDg0LAorMHgwMSwgMHgxOCwgMHgwNiwgMHg2OCwgMHgxOCwgMHhBMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4MDIsIDB4QTAsIDB4MEUsIDB4ODAsIDB4M0EsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsCisweEEwLCAweDBBLCAweDgwLCAweDMyLCAweDAwLCAweEM4LCAweDAwLCAweEE4LCAweDAyLCAweEEwLCAweDBDLCAweDAwLCAweDMyLAorMHgwMCwgMHhDOCwgMHgwMCwgMHhBOCwgMHgwMywgMHhBMCwgMHgwQywgMHgwMCwgMHgzMiwgMHgwMCwgMHhDOCwgMHgwMCwgMHhBOCwKKzB4MDMsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MDAsIDB4RTgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MEMsIDB4ODAsCisweDMyLCAweDAwLCAweENBLCAweDAwLCAweEE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMiwgMHg0MiwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwKKzB4MDYsIDB4MDEsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsIDB4MEMsCisweDQwLCAweDEwLCAweDgwLCAweEMxLCAweDAwLCAweDA0LCAweDgzLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDgwLCAweEMxLAorMHgwMCwgMHgwNCwgMHg4MywgMHgxMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwKKzB4MDQsIDB4NjAsIDB4MTAsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEyLCAweDQyLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA0LAorMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MCwKKzB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsCisweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA1LAorMHg0MiwgMHgxMCwgMHgwOCwgMHgwMSwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwKKzB4NDIsIDB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MEMsIDB4QTgsIDB4MzAsIDB4QTgsIDB4NDIsIDB4QTAsIDB4MDIsIDB4MDMsCisweDJBLCAweDA0LCAweEFBLCAweDEwLCAweEEwLCAweEMwLCAweEEwLCAweDBBLCAweDgxLCAweDJBLCAweDg0LCAweEEwLCAweDEwLAorMHhBMCwgMHg0MCwgMHhBMCwgMHgwQSwgMHg4MSwgMHgyQSwgMHgwQywgMHhBQSwgMHgxMCwgMHhBMCwgMHg0MCwgMHhBOCwgMHgwQSwKKzB4ODEsIDB4MkEsIDB4MDQsIDB4MkEsIDB4MTAsIDB4QTgsIDB4NDIsIDB4QTAsIDB4MEEsIDB4ODEsIDB4MkEsIDB4MEMsIDB4QTgsCisweDEwLCAweEE4LCAweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwQywgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMywgMHgyQSwKKzB4MEMsIDB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDEsIDB4MkEsIDB4MDQsIDB4QTgsIDB4MzAsIDB4QTAsCisweEMyLCAweDgwLCAweDBBLCAweDAxLCAweDJBLCAweDBDLCAweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAxLAorMHgyQSwgMHgwNCwgMHhBOCwgMHgzMCwgMHhBMCwgMHg0MiwgMHg4MCwgMHgwQSwgMHgwMywgMHgyQSwgMHgwNSwgMHhBOCwgMHgzMCwKKzB4QTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4MDAsCisweDQyLCAweDgwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDEwLCAweDAwLCAweDAyLCAweDgwLCAweDA4LCAweDAwLAorMHgyMCwgMHgwNCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMiwgMHgwNCwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MDgsCisweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDYwLCAweDA0LCAweDgwLAorMHgwMSwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHg0MCwgMHgwMCwKKzB4MDEsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTQsIDB4MTAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MDEsIDB4MEMsIDB4NDQsCisweDEwLCAweDEwLCAweDUwLCAweDQwLCAweDAwLCAweDgxLCAweDAxLCAweDA0LCAweDAwLCAweDMwLCAweDAwLCAweDUwLCAweDAwLAorMHgwMCwgMHg4MSwgMHgwMSwgMHgwQywgMHgwNiwgMHgxMCwgMHgxMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNCwKKzB4NDYsIDB4MTQsIDB4MTAsIDB4NDAsIDB4NjAsIDB4NDQsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MzAsIDB4MTAsIDB4MDAsCisweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDAwLCAweEEwLCAweDA2LCAweDgwLAorMHgxQSwgMHgwMCwgMHg2RSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2QSwgMHgwMCwKKzB4QjgsIDB4MDEsIDB4QTAsIDB4MDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QTgsIDB4MDEsIDB4QTAsIDB4MDYsCisweDgwLCAweDFBLCAweDAwLCAweDY4LCAweDAwLCAweEIwLCAweDAxLCAweDgwLCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDZBLAorMHgwMCwgMHhBOCwgMHgwMSwgMHhBMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4OCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTIsCisweDAwLCAweEU4LCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDgwLCAweDNBLCAweDAwLCAweDRDLCAweDAwLCAweEEwLAorMHgwMywgMHhDMCwgMHgwNiwgMHg4MCwgMHgxMywgMHgwMCwgMHg0RSwgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MTMsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QTAsIDB4MDMsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MDAsCisweEIwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDNBLCAweDAwLCAweDZFLCAweDAwLCAweEIwLCAweDAxLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwQywgMHg4MCwgMHgxMSwgMHgwMCwKKzB4NjIsIDB4MDAsIDB4MDgsIDB4MDIsIDB4MjAsIDB4MEMsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NDIsIDB4MDAsIDB4OEEsIDB4MDEsCisweDIwLCAweDBDLCAweDAyLCAweDEwLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDBDLCAweDAyLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgyMCwgMHgwQywgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwKKzB4ODMsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTgsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJDLCAweDAwLCAweDkwLCAweDAwLCAweDQwLAorMHgwMiwgMHgwMCwgMHgwQiwgMHgwMCwgMHgyQywgMHgwMCwgMHg5MCwgMHgxMiwgMHg0MCwgMHgwMiwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4QTgsIDB4MDEsIDB4OTAsIDB4MTIsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MjEsIDB4MDIsIDB4QUMsIDB4MDgsIDB4OTAsIDB4MjIsCisweDQwLCAweDAyLCAweDAwLCAweDIxLCAweDAwLCAweEFDLCAweDA1LCAweDkwLCAweDIyLCAweDQwLCAweDA4LCAweDAwLCAweDJCLAorMHgwMiwgMHhBNCwgMHgwMCwgMHg5MCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4OEMsIDB4MDAsIDB4MzIsIDB4MEEsIDB4Q0EsIDB4MjgsCisweDIyLCAweEEzLCAweDgwLCAweDhDLCAweDAyLCAweDMyLCAweDA2LCAweDQ4LCAweDI4LCAweDI4LCAweEEyLCAweDg4LCAweDhDLAorMHg4MiwgMHgxMiwgMHgwMCwgMHg0OCwgMHgwOCwgMHgyMCwgMHhBMSwgMHg4MCwgMHg4QywgMHgwMywgMHgzMiwgMHgwMCwgMHg0OCwKKzB4MjgsIDB4MjgsIDB4QTIsIDB4ODAsIDB4OEMsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MDgsIDB4MzgsIDB4MjAsIDB4QTMsIDB4ODAsCisweDg0LCAweDgyLCAweDMyLCAweDAyLCAweENBLCAweDA4LCAweDIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHhBMCwgMHgxNiwgMHg4MywgMHg1QSwgMHgwQywgMHg0QSwgMHgzMSwgMHhBOCwKKzB4QzUsIDB4QTAsIDB4MTYsIDB4ODMsIDB4NUEsIDB4MEUsIDB4NjgsIDB4MzEsIDB4QTgsIDB4ODUsIDB4QTAsIDB4MTYsIDB4ODMsCisweDVBLCAweDBDLCAweDYwLCAweDMxLCAweEE4LCAweDg1LCAweEEwLCAweDE2LCAweDAzLCAweDVBLCAweDBDLCAweDZBLCAweDMxLAorMHhBOCwgMHhDNSwgMHhBMCwgMHgxNiwgMHgwMywgMHg1OCwgMHgwRSwgMHgyOCwgMHgzMSwgMHhBOCwgMHhFNCwgMHg4MCwgMHgxMiwKKzB4ODIsIDB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsIDB4QTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDA5LAorMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHhBNCwgMHgwMCwgMHg5MCwKKzB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4QTQsIDB4ODAsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MDIsIDB4MDAsCisweDMxLCAweDAwLCAweEE0LCAweDgwLCAweDgwLCAweDAwLCAweDQyLCAweDBDLCAweDAwLCAweDA5LCAweDIwLCAweDY0LCAweDAyLAorMHg5MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4NDIsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NDIsIDB4ODAsIDB4ODgsIDB4MTEsIDB4MjIsCisweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDIwLAorMHg2MCwgMHg4NCwgMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgyMSwKKzB4MjYsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsIDB4ODgsIDB4MjEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsCisweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMiwgMHgwQSwgMHgwOCwgMHgyQSwgMHgyMCwgMHgwOCwgMHgwMCwgMHhBOCwgMHgwMiwgMHhBMiwgMHgwQSwKKzB4ODQsIDB4MkEsIDB4MjAsIDB4QUEsIDB4ODAsIDB4QTAsIDB4MDIsIDB4QTYsIDB4MEEsIDB4MUMsIDB4MkEsIDB4MjgsIDB4QTgsCisweEMwLCAweEEwLCAweDAyLCAweEEyLCAweDBBLCAweDg4LCAweDJBLCAweDIwLCAweEFBLCAweDgwLCAweEEwLCAweDAyLCAweEEyLAorMHgwQSwgMHg4OCwgMHgyQSwgMHhBMCwgMHhBQSwgMHg4MCwgMHhBOSwgMHgwMiwgMHhBMiwgMHgwQSwgMHgxOCwgMHgyOCwgMHgyMCwKKzB4QTgsIDB4ODAsIDB4QTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDg0LCAweDQyLCAweDEwLCAweDBBLCAweDQxLCAweEE4LCAweDA0LCAweEEwLCAweDEyLCAweDgwLCAweDQyLCAweDEwLAorMHgyQSwgMHg0MSwgMHgyOCwgMHg4NCwgMHhBMSwgMHgxMCwgMHg4NCwgMHg0QSwgMHgxMCwgMHgyQSwgMHg2MSwgMHhBOCwgMHgwNCwKKzB4QTEsIDB4MTAsIDB4ODQsIDB4NEEsIDB4MTgsIDB4MkEsIDB4NjEsIDB4QTgsIDB4NDQsIDB4QTEsIDB4MTAsIDB4ODQsIDB4NEEsCisweDE0LCAweDJBLCAweDYxLCAweEE4LCAweDA0LCAweEExLCAweDEyLCAweDg0LCAweDRBLCAweDEwLCAweDJBLCAweDAxLCAweEE4LAorMHgwNCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKzB4ODAsIDB4NDAsIDB4ODEsIDB4MDIsIDB4OEQsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4ODMsIDB4MDIsCisweDA1LCAweDA4LCAweDE0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDA4LCAweDE0LCAweDIwLAorMHg1MCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyOCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwKKzB4MDIsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MjAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTQsCisweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweEMwLAorMHhDQSwgMHgwMCwgMHgyQiwgMHgwMywgMHhBNCwgMHgwQywgMHgxMCwgMHgzMiwgMHhDMCwgMHhDQSwgMHgwMCwgMHgwMSwgMHgwMywKKzB4MEMsIDB4MEMsIDB4QjAsIDB4MzIsIDB4NDAsIDB4QzAsIDB4ODAsIDB4MjEsIDB4MDMsIDB4ODYsIDB4MEMsIDB4QTEsIDB4MzIsCisweDAwLCAweEM4LCAweDgwLCAweDAxLCAweDAzLCAweDg2LCAweDBDLCAweEEwLCAweDMyLCAweDQwLCAweEM4LCAweDAwLCAweDIwLAorMHgwMywgMHg4NiwgMHgwQywgMHgxMCwgMHgzMCwgMHg2MCwgMHhDOCwgMHgyMCwgMHgyMSwgMHgwMywgMHg4NCwgMHgwQywgMHhCMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTIsIDB4NEUsCisweDgwLCAweDNBLCAweDA5LCAweEVFLCAweDA0LCAweEEwLCAweDEzLCAweDgwLCAweDRFLCAweDgyLCAweDNBLCAweDExLCAweEVBLAorMHgwNCwgMHhCOCwgMHgxMywgMHg5MCwgMHg0RSwgMHg5MCwgMHgzQSwgMHgyMSwgMHg2QSwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwKKzB4NEUsIDB4ODgsIDB4M0EsIDB4MjEsIDB4Q0EsIDB4MDQsIDB4QTgsIDB4MTMsIDB4MTAsIDB4NEMsIDB4ODQsIDB4MzIsIDB4MDEsCisweEU4LCAweDA0LCAweEE4LCAweDEzLCAweEEwLCAweDRFLCAweDgwLCAweDNCLCAweDAxLCAweEVBLCAweDA0LCAweEE5LCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgxMCwgMHgxMiwgMHgwMywKKzB4MDgsIDB4OEMsIDB4MjAsIDB4MzIsIDB4ODAsIDB4QzQsIDB4MDgsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsCisweDgyLCAweEMwLCAweDE4LCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLCAweDgwLCAweEMwLCAweDE4LCAweDAyLAorMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwgMHg4MiwgMHhDMCwgMHgxOCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwKKzB4MzAsIDB4ODYsIDB4QzAsIDB4MDAsIDB4MDIsIDB4MjMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLAorMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwKKzB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsCisweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLAorMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCNCwgMHhERiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwKKzB4RUQsIDB4QkYsIDB4MzQsIDB4RkIsIDB4RDIsIDB4RkUsIDB4Q0IsIDB4RkYsIDB4MEQsIDB4Q0QsIDB4QkUsIDB4N0MsIDB4REIsCisweEYwLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEVELCAweEJGLCAweDdDLCAweERCLCAweEYwLCAweEZGLCAweENCLCAweEZGLAorMHgyRiwgMHhDRCwgMHhCRSwgMHg3QywgMHhEQiwgMHhGMCwgMHhGRiwgMHhDQiwgMHhCNywgMHgyRiwgMHhERiwgMHgzNiwgMHg3QywKKzB4REIsIDB4RjAsIDB4NkQsIDB4NDMsIDB4QjMsIDB4MkYsIDB4RUQsIDB4MzcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweENDLCAweDNGLCAweDMyLCAweEYzLCAweEM4LCAweENDLCAweDIzLCAweEYzLAorMHhCRiwgMHhDQywgMHhGQywgMHgzMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyMywgMHgzMywgMHhCRiwgMHhGQywgMHgzQywgMHhGMiwKKzB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RjMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsCisweDMzLCAweEJGLCAweEZDLCAweDNDLCAweEYyLCAweEZGLCAweENCLCAweENGLCAweDJGLCAweDNGLCAweDhGLCAweEZDLCAweDNDLAorMHhGMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyRiwgMHhGMywgMHg4RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4REMsIDB4NzgsIDB4NzIsIDB4NjMsIDB4NDgsIDB4RUMsIDB4MjEsIDB4QjEsIDB4OUYsCisweERDLCAweDdFLCAweDEyLCAweDdCLCAweDQ4LCAweDhDLCAweDIxLCAweEI3LCAweDg3LCAweEM0LCAweDdFLCAweDEyLCAweDYzLAorMHg0OCwgMHg4QywgMHgyMSwgMHgzNywgMHg4NiwgMHhDNCwgMHg3RSwgMHgxMiwgMHg2MywgMHg0OCwgMHg4QywgMHgyMSwgMHhCNywKKzB4ODcsIDB4QzQsIDB4N0UsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsIDB4MjEsIDB4QjEsIDB4OUYsIDB4QzQsIDB4MTgsIDB4MTIsCisweDdCLCAweDQ4LCAweDhDLCAweDI3LCAweDM3LCAweDlFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwRSwgMHgwMiwgMHgzOSwgMHgwQSwgMHhFNCwgMHgyMCwgMHg5MCwgMHg4MywKKzB4MDAsIDB4MEUsIDB4MDIsIDB4MzksIDB4MDgsIDB4RTAsIDB4MjAsIDB4ODAsIDB4ODMsIDB4NDAsIDB4MEUsIDB4MDIsIDB4MzksCisweDA4LCAweEU0LCAweDIwLCAweDkwLCAweDgzLCAweDAwLCAweDBFLCAweDAyLCAweDM4LCAweDBBLCAweEU0LCAweDIwLCAweDgwLAorMHg4MywgMHg0MCwgMHgwRSwgMHgwMiwgMHgzOCwgMHgwNiwgMHhFNiwgMHgyMCwgMHg5MCwgMHhBMywgMHg0MCwgMHgwRSwgMHgwMiwKKzB4MzksIDB4MDgsIDB4RTQsIDB4MjgsIDB4OTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIwLCAweDYwLCAweDhFLCAweDAwLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEEwLCAweDIzLCAweEEwLAorMHg4RSwgMHgwMCwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhCOCwgMHgyMywgMHhBMCwgMHg4RSwgMHgwMCwgMHgzQSwgMHgwMiwKKzB4RTgsIDB4MDgsIDB4QTAsIDB4MjMsIDB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MjMsCisweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEVFLCAweDA4LCAweEE4LCAweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLAorMHgwMiwgMHhFQSwgMHgwOCwgMHhBOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDYsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsCisweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LAorMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwKKzB4MDQsIDB4MDEsIDB4MTIsIDB4MDYsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NjEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsCisweDQ4LCAweDE4LCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsCisweDgwLCAweDAxLCAweDI4LCAweDA2LCAweDgwLCAweDE4LCAweDAyLCAweDYwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LAorMHg4MCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwKKzB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDIwLCAweDRFLCAweDAwLCAweDM4LCAweDA1LCAweEUyLCAweDA0LCAweDgwLCAweDEzLCAweDIwLCAweDRFLCAweDAwLCAweDM4LAorMHgwOSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgxMywgMHgyMCwgMHg0RSwgMHgwMCwgMHgzOCwgMHgwMSwgMHhFMCwgMHgwNCwgMHg4MCwKKzB4MTMsIDB4MjAsIDB4NEUsIDB4ODIsIDB4MzgsIDB4MDUsIDB4RTIsIDB4MDQsIDB4ODgsIDB4MTIsIDB4MjAsIDB4NEUsIDB4ODAsCisweDM4LCAweEExLCAweEUyLCAweDA0LCAweDI4LCAweDUxLCAweDIwLCAweDRFLCAweDgwLCAweDMwLCAweDAxLCAweEUyLCAweDE0LAorMHg4OCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsCisweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDgxLAorMHgwMCwgMHgwNiwgMHgwMiwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwKKzB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDgsIDB4MTAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsCisweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDIwLCAweDI0LAorMHg4MCwgMHg5MCwgMHgwMSwgMHg0MiwgMHgwMiwgMHgwOCwgMHgyOSwgMHgyMCwgMHgyNCwgMHg4MCwgMHg5MCwgMHgwMiwgMHg0MiwKKzB4MDIsIDB4MDgsIDB4MTEsIDB4MjAsIDB4MjQsIDB4ODAsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDIsIDB4MDgsIDB4MDksIDB4MjAsCisweEE0LCAweDgwLCAweDkwLCAweDAxLCAweDQyLCAweDAyLCAweDA4LCAweDExLCAweDIwLCAweEE0LCAweDgwLCAweDkwLCAweDAxLAorMHg0MiwgMHgwNCwgMHgwOCwgMHgzOSwgMHgyMCwgMHg0NCwgMHg4MCwgMHgxOCwgMHgwMSwgMHg0MiwgMHgwNiwgMHgwOCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MTIsIDB4ODEsCisweDQ4LCAweDA1LCAweDIyLCAweDExLCAweDg4LCAweDQ0LCAweDAwLCAweDEyLCAweDgxLCAweDQ4LCAweDA0LCAweDIwLCAweDMxLAorMHg4MCwgMHg1NCwgMHgyMCwgMHgxMiwgMHg4MSwgMHg0OCwgMHgwNCwgMHgyMiwgMHgxMSwgMHg4OCwgMHhDNCwgMHgwMCwgMHgxMiwKKzB4MDMsIDB4NDgsIDB4MEQsIDB4MjIsIDB4MTEsIDB4ODAsIDB4NTQsIDB4MjAsIDB4MTIsIDB4MDEsIDB4NDgsIDB4MDUsIDB4MjAsCisweDE1LCAweDg4LCAweDU0LCAweDIwLCAweDUyLCAweDgxLCAweDY4LCAweDBELCAweDIyLCAweDFELCAweDg4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgzMCwgMHgwMCwgMHhDOCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjAsIDB4MDMsIDB4QTAsIDB4MEMsIDB4MDAsCisweDMyLCAweDAwLCAweEMwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweENBLCAweDAwLAorMHgyOCwgMHgwMywgMHg4MCwgMHgwQywgMHg4MCwgMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgwQywKKzB4ODAsIDB4NzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ODAsIDB4MUMsIDB4ODAsIDB4MDIsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDIwLCAweDJDLCAweDAwLCAweDkwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg5MCwgMHgwMywgMHg2MCwgMHgwMiwgMHgwOCwgMHgwMywKKzB4MDAsIDB4MjAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MTksIDB4MDAsIDB4RTIsIDB4MDAsIDB4ODgsCisweDAwLCAweDgwLCAweDA2LCAweDgwLCAweDAwLCAweDAwLCAweEUyLCAweDAxLCAweDg4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLAorMHgyOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwQSwgMHg4MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4NDAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDE4LCAweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwMCwgMHg4MiwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMiwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwKKzB4MDgsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MDQsCisweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAxLCAweDQwLCAweDA2LCAweDgwLCAweDE5LCAweDAwLCAweDYyLAorMHgwMCwgMHg5OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOSwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyMCwKKzB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDAyLCAweDAwLCAweDA2LCAweDAwLCAweDE5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLAorMHgxMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOSwgMHgwMSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwKKzB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MTEsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDQsCisweDgwLCAweDAxLCAweDQwLCAweDQ2LCAweDAwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA2LAorMHgwMCwgMHgxOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwgMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4NjAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDAsIDB4NDMsCisweDIwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDE4LCAweDQzLCAweDIwLCAweDBDLCAweDAxLCAweDMwLAorMHgwNCwgMHhDMCwgMHgxMCwgMHgwMCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwKKzB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsCisweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4NEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsCisweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLAorMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwKKzB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweEQwLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDA0LCAweEMwLCAweDM0LCAweDAwLCAweEMzLCAweDIwLCAweDRDLAorMHgwMywgMHgzMCwgMHgwQywgMHhDMiwgMHgzNCwgMHgwMCwgMHg0MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4QzMsIDB4MjAsIDB4MEMsIDB4ODMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MDAsCisweDBDLCAweDgzLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDAwLCAweDQzLCAweDAwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LAorMHhDMCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwKKzB4QzIsIDB4MjAsIDB4MEUsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NjIsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MDYsIDB4MDMsCisweDEwLCAweDBDLCAweDYyLCAweDMwLCAweDg4LCAweDQzLCAweDIwLCAweDA2LCAweDAzLCAweDE4LCAweDBDLCAweDQwLCAweDMwLAorMHgwMCwgMHhDMSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgzMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwKKzB4ODMsIDB4MTgsIDB4MDQsIDB4NjAsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsCisweDEwLCAweDg4LCAweDAxLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDQyLAorMHgwMCwgMHgwNiwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwOCwgMHg0MSwgMHgwMCwgMHgwQywgMHg4MSwgMHgxMCwKKzB4MDQsIDB4QzAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsCisweDQxLCAweDAwLCAweDA4LCAweDAxLCAweDMwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLCAweDA0LCAweDAxLAorMHgzMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4ODAsIDB4NDIsIDB4MjAsCisweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDBDLCAweDgxLCAweDEwLCAweDA0LAorMHhDMiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwKKzB4MjAsIDB4MEMsIDB4ODMsIDB4MzAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MzAsCisweDA0LCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDg4LAorMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwMiwgMHgwMCwgMHgwOCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsCisweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDIwLCAweDAwLCAweDgyLCAweDAwLCAweDA4LCAweDAyLCAweDAwLAorMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhBMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwQSwgMHgwMCwgMHgyMCwgMHgwMCwKKzB4QTAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjgsIDB4MDAsIDB4QTIsIDB4MDAsIDB4ODgsIDB4NDIsCisweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLAorMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwKKzB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsCisweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLAorMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MDEsIDB4MDIsCisweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDQ4LCAweDEwLCAweDI4LAorMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwKKzB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsCisweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg2MiwgMHhDMCwgMHg4QSwgMHg4MSwgMHgyQiwgMHgwNiwKKzB4QUMsIDB4MTgsIDB4QjgsIDB4NjIsIDB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsCisweEMwLCAweDhBLCAweDgxLCAweDJCLCAweDA2LCAweEFFLCAweDE4LCAweEI4LCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLAorMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwKKzB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MjksIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDIwLCAweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEUyLAorMHgxOCwgMHg4OCwgMHg2MywgMHg2MCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFNiwgMHgxOCwgMHg4OCwgMHg2MywgMHgyMCwKKzB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTIsIDB4MTgsIDB4ODgsIDB4NjMsIDB4NTAsIDB4OEUsIDB4ODEsIDB4MzksIDB4MDYsCisweEUyLCAweDE4LCAweDk4LCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDM5LCAweDA0LCAweEUyLCAweDE4LCAweDg4LCAweDYzLAorMHgyMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFMiwgMHgxOCwgMHg4OCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NjIsIDB4MDAsIDB4OEUsIDB4MDEsIDB4M0IsIDB4MDYsIDB4RTQsIDB4MTgsCisweEIwLCAweDYzLCAweDAwLCAweDhFLCAweDAxLCAweDM5LCAweDA2LCAweEUwLCAweDE4LCAweDgwLCAweDYzLCAweDQwLCAweDhFLAorMHgwMSwgMHgzOSwgMHgwNiwgMHhFQywgMHgxOCwgMHhCMCwgMHg2MywgMHg4MCwgMHg4RSwgMHgwMSwgMHgzOCwgMHgwNiwgMHhFNCwKKzB4MTgsIDB4ODAsIDB4NjMsIDB4NDAsIDB4OEUsIDB4MDEsIDB4MzgsIDB4MDYsIDB4RTQsIDB4MTgsIDB4OTAsIDB4NjMsIDB4NDAsCisweDBFLCAweDAxLCAweDM5LCAweDA2LCAweEU0LCAweDE4LCAweDkwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwQSwgMHhBMiwgMHg2MiwgMHg2MCwgMHg4QywgMHgwMSwgMHgzMCwgMHgwNiwgMHhFQSwgMHgxOCwgMHg4MCwKKzB4NjMsIDB4MjAsIDB4OEMsIDB4MDEsIDB4MzAsIDB4MDYsIDB4QzIsIDB4MTgsIDB4MTgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4MDEsCisweDMwLCAweDA2LCAweEMwLCAweDE4LCAweDAwLCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDMwLCAweDA2LCAweEVBLCAweDE4LAorMHgwOCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMCwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwKKzB4ODEsIDB4M0EsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4NDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDAwLCAweDQ4LCAweDAwLCAweDI0LCAweDAxLCAweDlBLCAweDA0LCAweDQ4LCAweDEyLCAweDIwLCAweDQ5LAorMHg4MCwgMHgyRSwgMHgwMSwgMHg5MCwgMHgwNCwgMHhFOCwgMHgxMiwgMHgwMCwgMHg0OSwgMHg4MCwgMHgyNCwgMHgwMSwgMHg5MCwKKzB4MDQsIDB4NjgsIDB4MTIsIDB4QTAsIDB4NDEsIDB4ODAsIDB4MkMsIDB4MDEsIDB4QkEsIDB4MDQsIDB4NDgsIDB4MTAsIDB4QTAsCisweDQzLCAweDgwLCAweDI0LCAweDAxLCAweEJBLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQ5LCAweDgwLCAweDA0LCAweDAxLAorMHg5MiwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MDYsIDB4NjAsIDB4MTgsIDB4MDAsIDB4NjEsIDB4MjAsCisweDg2LCAweDAxLCAweDEwLCAweDA2LCAweDYyLCAweDE4LCAweDAwLCAweDYxLCAweDAwLCAweDg2LCAweDAxLCAweDEwLCAweDA2LAorMHg0MCwgMHgxOCwgMHgwMCwgMHg2MSwgMHgyMCwgMHg4NiwgMHg4MSwgMHgxOCwgMHgwNiwgMHg2MCwgMHgxOCwgMHg4OCwgMHg2MSwKKzB4MDAsIDB4ODYsIDB4ODEsIDB4NTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODAsIDB4NjEsIDB4MDAsIDB4ODYsIDB4MDEsIDB4MTgsCisweDA2LCAweDYwLCAweDE4LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMiwgMHgwNiwgMHgyMCwgMHgxRSwgMHgwMCwgMHg3MCwgMHgwMCwgMHhDMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgyMCwgMHgxRSwKKzB4MDAsIDB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsIDB4MUMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4QzAsCisweDAxLCAweDAwLCAweDA3LCAweDIwLCAweDFDLCAweDgwLCAweDcwLCAweDAwLCAweEUyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLAorMHgxRSwgMHg4MCwgMHg3OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwgMHgxRSwgMHg4MCwgMHg3OCwgMHgwMCwKKzB4RTIsIDB4MDEsIDB4ODgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsCisweDRBLCAweDAwLCAweDI2LCAweDgzLCAweDkwLCAweDA0LCAweDQwLCAweDEyLCAweDA4LCAweDQ5LCAweDAwLCAweDI2LCAweDgxLAorMHg5MCwgMHgwNCwgMHg0MCwgMHgxMiwgMHg4MCwgMHg0OSwgMHgwMCwgMHgyNCwgMHg4MSwgMHg5MCwgMHgwNCwgMHg0MiwgMHgxMiwKKzB4MDgsIDB4NDEsIDB4MDAsIDB4MjQsIDB4MDEsIDB4OTAsIDB4MDQsIDB4NjAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MjYsCisweDAxLCAweDk4LCAweDA0LCAweDQwLCAweDEwLCAweDgwLCAweDQ5LCAweDAwLCAweDA2LCAweDAxLCAweDk4LCAweDA0LCAweDYwLAorMHgxMiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHg0MiwKKzB4MjAsIDB4MDQsIDB4ODEsIDB4MTgsIDB4MDUsIDB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTgsCisweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDUxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDg4LAorMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwKKzB4MTAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsCisweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDAwLAorMHgwMiwgMHg4MSwgMHgyOCwgMHgwQywgMHhBMiwgMHgzMCwgMHg4OCwgMHg0MiwgMHgwMCwgMHgwMiwgMHg4MywgMHgyOCwgMHgwQywKKzB4QTAsIDB4MTAsIDB4ODAsIDB4QzAsIDB4MjAsIDB4MEEsIDB4ODMsIDB4MjgsIDB4MEMsIDB4QTIsIDB4MzAsIDB4ODgsIDB4QzIsCisweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDA0LCAweDIyLCAweDEwLCAweDgwLCAweDQwLCAweDIwLCAweDAyLCAweDAxLCAweDA4LAorMHgwNCwgMHhBMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4MSwgMHgwOCwgMHgwNCwgMHgyMiwgMHgxMCwgMHg4OCwKKzB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MEEsCisweDAxLCAweDI4LCAweDA1LCAweEEwLCAweDEwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLCAweEEwLAorMHgxMCwgMHg4MCwgMHg1MiwgMHgwMCwgMHgwQSwgMHgwMSwgMHgyOCwgMHgwNCwgMHhBMCwgMHgxMCwgMHg4MCwgMHhDMiwgMHgwMCwKKzB4MEEsIDB4MDMsIDB4MjgsIDB4MEMsIDB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MEMsCisweDgwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDA0LCAweEEwLCAweDMwLCAweDgwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDQsCisweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwKKzB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDQwLCAweDAwLCAweDgxLCAweDAxLAorMHgwNCwgMHgwNCwgMHgxMCwgMHgxOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHg4MywgMHgwMSwgMHgwNSwgMHgwNCwgMHgxMCwgMHgxMCwKKzB4NDAsIDB4NDAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MDQsIDB4MDYsIDB4MTAsIDB4MTgsIDB4NTAsIDB4NDAsIDB4NDAsIDB4MDEsCisweDAxLCAweDBDLCAweDA0LCAweDEwLCAweDEwLCAweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA1LCAweDg0LCAweDEwLAorMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgwMCwgMHg4OCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsCisweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDYwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLAorMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHg2MCwgMHgwNiwgMHg4MCwgMHgxOSwKKzB4MDAsIDB4NjIsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTksIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsCisweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyNCwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwKKzB4MDIsIDB4MTAsIDB4MDksIDB4MDAsIDB4MkUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4RTAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsCisweDI2LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDJFLCAweDAwLCAweEI4LCAweDAwLAorMHg2NCwgMHgwMCwgMHg4MCwgMHgwQiwgMHg0MCwgMHgyNiwgMHgwMCwgMHhCOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHg5OCwgMHgwOSwKKzB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDA2LCAweDYwLCAweDE0LCAweDAwLCAweDUwLCAweDAwLCAweEMyLCAweDAxLAorMHgwMCwgMHgwNSwgMHgyMCwgMHgxNiwgMHgwMCwgMHg1MCwgMHgwMCwgMHg2MiwgMHgwMSwgMHgxOCwgMHgwNSwgMHgyMCwgMHgxQywKKzB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MTYsIDB4ODAsIDB4NTgsIDB4MDAsIDB4QzIsCisweDAxLCAweDg4LCAweDA1LCAweDI4LCAweDFDLCAweDgwLCAweDU4LCAweDAwLCAweEMyLCAweDAxLCAweDA4LCAweDA3LCAweDIwLAorMHgxQywgMHg4MCwgMHg3MCwgMHgwOCwgMHhDMiwgMHgwMSwgMHgwOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4MDAsCisweEExLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDBDLCAweDAyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyMCwKKzB4MDAsIDB4QTEsIDB4MDAsIDB4OEMsIDB4MDIsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjgsIDB4MDAsIDB4RTMsIDB4MDAsIDB4MUMsCisweDAyLCAweDMwLCAweDBBLCAweEMwLCAweDIwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhBNCwgMHgwMCwgMHg5MCwgMHgwMiwgMHhDMCwgMHgwQSwgMHgwMCwgMHhBOSwKKzB4MjAsIDB4QUMsIDB4MDAsIDB4QjAsIDB4MEEsIDB4QzIsIDB4MDgsIDB4MDAsIDB4MjksIDB4MDAsIDB4QUMsIDB4MDAsIDB4QjAsCisweDAyLCAweEMwLCAweDBBLCAweDAwLCAweEFCLCAweDIwLCAweEFDLCAweDgyLCAweEIwLCAweDA2LCAweEMwLCAweDI4LCAweDA4LAorMHhBQiwgMHgwMCwgMHhBQywgMHg4MiwgMHhCMCwgMHgwQSwgMHhDMCwgMHgzQSwgMHgwOCwgMHhBQiwgMHgwMCwgMHhBQywgMHgwMiwKKzB4QjAsIDB4MEUsIDB4QzAsIDB4MjgsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEyLCAweEMyLCAweDIwLCAweDA2LCAweDAzLCAweDE4LCAweDBDLCAweDYyLCAweDMwLCAweDgwLCAweEUxLCAweDIwLAorMHgwNiwgMHgwMywgMHgxOCwgMHgwQywgMHg2MiwgMHgzMCwgMHg4OCwgMHhDMSwgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgwQywKKzB4NjAsIDB4MzAsIDB4ODAsIDB4QzEsIDB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsIDB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4RTEsCisweDIwLCAweDA2LCAweDgzLCAweDE4LCAweDBDLCAweDYyLCAweDM4LCAweDgwLCAweEUxLCAweDIwLCAweDA2LCAweDgzLCAweDE4LAorMHgwRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHgwMSwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4ODAsIDB4MDIsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDQsCisweDgwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLAorMHgwMCwgMHgwOCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLAorMHgxMiwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4MCwgMHg4OCwgMHgxMSwgMHgyMCwgMHgwNiwgMHg4OCwKKzB4MTgsIDB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsCisweDg4LCAweDAxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDAxLCAweDYyLCAweDg0LCAweDg4LCAweDMxLCAweDIwLCAweDQ2LAorMHg4MCwgMHgxOCwgMHgyMCwgMHg2MiwgMHgwNCwgMHg4MCwgMHgxMSwgMHgyMCwgMHg0NiwgMHg4OCwgMHgxOCwgMHgwMSwgMHg2MiwKKzB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4MDIsCisweDAyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDgwLCAweDg4LCAweDIyLCAweDAwLCAweDBBLCAweDg4LCAweDI4LAorMHgwMCwgMHhBMCwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4OCwKKzB4MDIsIDB4MDIsIDB4MEEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4QTIsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjIsIDB4MEEsIDB4MDIsCisweDI4LCAweDIwLCAweEEyLCAweDgwLCAweDgwLCAweDAyLCAweDIwLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDAwLAorMHg4OCwgMHgwMiwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwgMHgwNCwKKzB4NDIsIDB4MTAsIDB4MjgsIDB4MDEsIDB4QTAsIDB4MDQsIDB4ODEsIDB4MTIsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MjgsIDB4NDEsCisweEEwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDRBLCAweDEwLCAweDI4LCAweDQxLCAweEEwLCAweDA0LCAweDgxLCAweDEyLAorMHgwNCwgMHg0QSwgMHgxMCwgMHgyOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwKKzB4MDEsIDB4QTAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweEEwLCAweDQwLAorMHgwMSwgMHgwMCwgMHgwNSwgMHgwOCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwMCwKKzB4MTQsIDB4MjgsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MjAsIDB4NTAsIDB4MDAsCisweDQwLCAweDAxLCAweDAwLCAweDg1LCAweDA4LCAweDM0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAzLCAweDAyLCAweDA1LAorMHgwMCwgMHgxNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODIsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4ODIsCisweDIxLCAweDBCLCAweEE0LCAweDJDLCAweDE4LCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDI4LCAweDBCLCAweDg0LCAweDJDLAorMHhCMCwgMHhCMiwgMHg0MCwgMHhDOCwgMHg4MiwgMHgyMSwgMHgwQiwgMHg4NiwgMHgyQywgMHg4MCwgMHhCMiwgMHg0MCwgMHhDOCwKKzB4MDIsIDB4MjEsIDB4MEIsIDB4QUMsIDB4MkMsIDB4QjAsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MkIsIDB4MEIsIDB4ODQsCisweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJCLCAweDBCLCAweEFDLCAweDJDLCAweEIwLCAweDAyLCAweDg4LAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxMiwgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwKKzB4MDEsIDB4RUEsIDB4MDQsIDB4ODgsIDB4MTMsIDB4NjAsIDB4NEUsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RTYsIDB4MDQsIDB4ODgsCisweDEzLCAweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweEE4LCAweDEzLCAweDYwLCAweDRFLCAweDAwLAorMHgzOSwgMHgwMSwgMHhFMiwgMHgyNCwgMHg5OCwgMHgxMywgMHgyMCwgMHg0RSwgMHg4MiwgMHgzOSwgMHgwMSwgMHhFMiwgMHgwNCwKKzB4ODgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODIsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDAwLCAweDAyLCAweDAzLCAweDA4LCAweDBDLAorMHgyMCwgMHgzMCwgMHg4MCwgMHhDMCwgMHgwMCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwgMHg4MCwgMHhDMCwKKzB4MTAsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzAsIDB4ODAsIDB4QzAsIDB4MDgsIDB4MDIsIDB4MDMsIDB4MDgsCisweDBDLCAweDIwLCAweDMxLCAweDgyLCAweEMwLCAweDE4LCAweDAyLCAweDQzLCAweDA4LCAweDBDLCAweDIwLCAweDMwLCAweDg2LAorMHhDMCwgMHgwMCwgMHgwMiwgMHg2MywgMHgwOCwgMHgwQywgMHgyMSwgMHgzMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsCisweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLAorMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwKKzB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsCisweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweERCLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDJGLCAweENELCAweDM2LAorMHhGQywgMHhERiwgMHhEMCwgMHg2QywgMHg0MywgMHhGQiwgMHgwRCwgMHhDRCwgMHgzNiwgMHgzNCwgMHhEQiwgMHhEMCwgMHg2QywKKzB4NDMsIDB4QjMsIDB4MEQsIDB4Q0QsIDB4MzYsIDB4MzQsIDB4REIsIDB4RDAsIDB4N0UsIDB4QzMsIDB4QjcsIDB4MkYsIDB4Q0QsCisweDM2LCAweDdDLCAweERCLCAweEYwLCAweDdGLCAweDQzLCAweEIzLCAweDJGLCAweERGLCAweDM2LCAweEZDLCAweEZGLCAweEQyLAorMHg2QywgMHhDMywgMHhCNywgMHgwRCwgMHhFRCwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MkYsIDB4MzMsIDB4OEYsIDB4RkMsCisweDNGLCAweDMyLCAweEYzLCAweEM4LCAweEZDLCAweDIzLCAweDMzLCAweDhGLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweEM4LAorMHhDQywgMHgyMywgMHgzMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwgMHhGRiwgMHhDOCwgMHhDRiwgMHgyRiwgMHgzMywgMHg4RiwKKzB4RkMsIDB4M0MsIDB4RjIsIDB4RkYsIDB4QzgsIDB4Q0MsIDB4MkYsIDB4M0YsIDB4OEYsIDB4RkMsIDB4RkYsIDB4MzIsIDB4RjMsCisweEM4LCAweENGLCAweDIzLCAweEYzLCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhEQywgMHgxOCwgMHgxMiwgMHg2MywgMHg0OCwgMHg4QywgMHgyNywgMHgzMSwgMHg4NiwgMHhEQywgMHgxRSwKKzB4MTIsIDB4NjMsIDB4NDgsIDB4RUMsIDB4MjEsIDB4MzcsIDB4ODYsIDB4QzQsIDB4NzgsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsCisweDIxLCAweDMxLCAweDg2LCAweEM0LCAweDFFLCAweDEyLCAweDdCLCAweEM4LCAweDhELCAweDI3LCAweEI3LCAweDg3LCAweERDLAorMHg3RSwgMHg3MiwgMHg3QiwgMHg0OCwgMHg4QywgMHgyNywgMHhCNywgMHg5RiwgMHhEQywgMHg3RSwgMHgxMiwgMHhGQiwgMHhDOSwKKzB4OEQsIDB4MjcsIDB4QjcsIDB4OUYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQwLCAweEUxLCAweDBDLCAweDg1LCAweDMzLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLAorMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4Q0UsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsCisweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweEUxLCAweDBDLCAweDg1LCAweDAwLCAweDE0LAorMHgwMiwgMHg1MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsCisweDA0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsCisweDBDLCAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDA0LCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwKKzB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsCisweDAwLCAweDAyLCAweDA0LCAweDA4LCAweDAwLCAweEUwLCAweDRDLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4Q0MsIDB4NDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDMzLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweEMxLAorMHgwQywgMHgwNCwgMHgwMCwgMHgxMCwgMHhDQywgMHg0MCwgMHgzMCwgMHgwMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MEMsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsCisweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4Q0MsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgzMCwgMHgxMywgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLAorMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwKKzB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsCisweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLAorMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwKKzB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsCisweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLAorMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHgyMCwgMHgwMCwgMHg4MCwgMHgzMywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MDgsCisweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLAorMHgwMCwgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHg0MywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MzMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLAorMHhDRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhFMSwgMHgwQywgMHg4NCwgMHgwMCwgMHgxMCwgMHhDRSwgMHg0MCwgMHgzOCwgMHgwMywKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MzMsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MzMsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDIsCisweDEwLCAweDAwLCAweDQwLCAweDIwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweENDLCAweDAwLCAweDAwLAorMHgwMCwgMHhDMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEYwLAorMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwKKzB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsCisweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLAorMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLAorMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsCisweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLAorMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLAorMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsCisweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLAorMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwKKzB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHhDRSwgMHg1NCwKKzB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MzMsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsCisweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDM4LCAweDUzLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLAorMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwKKzB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LAorMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsCisweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLAorMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwKKzB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsCisweDAyLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLAorMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHgyMCwgMHgwMCwgMHg4MCwgMHgzMywKKzB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4NDMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLAorMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNDLCAweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwgMHhGMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDA0LCAweDgwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgyMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDA0LCAweDgwLCAweDQwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MjIsIDB4MjUsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzAsIDB4MEMsIDB4MDAsCisweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MDUsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDg3LCAweEU4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDYxMF9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQ2MTBfZmlybXdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUwZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQ2MTBfZmlybXdhcmUuaApAQCAtMCwwICsxLDU0MDkgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgY29weXJpZ2h0IGJ5IE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAyMDAzLgorICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBkaXN0cmlidXRlLCBzZWxsLCBtb2RpZnksIHJldmVyc2UgZW5naW5lZXIgb3IgdXNlIHRoaXMKKyAgIGNvZGUgKG9yIHBhcnRzIG9mIGl0KSBmb3IgYW55IG90aGVyIHB1cnBvc2Ugb3IgdW5kZXIgYW55IG90aGVyIGNvbmRpdGlvbnMKKyAgIHRoYW4gc3RhdGVkIGJlbG93LgorCisgICAxKSBZb3UgYXJlIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBmaWxlIHRvZ2V0aGVyCisgICB3aXRoIGRldmljZSBkcml2ZXJzIGZvciB0aGUgTWVpbGhhdXMgTUUtNDAwMCwgYm9hcmQgZmFtaWx5LgorCisgICAyKSBEZXJpdmVkIHdvcmsgKGRldmljZSBkcml2ZXJzIHVzaW5nIHRoaXMgZmlsZSkgY2FuIGJlIHB1Ymxpc2hlZCB1bmRlcgorICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBBbnkgb3RoZXIgbGljZW5zZSB0ZXJtcyBoYXZlCisgICB0byBiZSBhZ3JlZWQgYnkgTWVpbGhhdXMgR21iSCBpbiB3cml0dGVuLgorCisgICAyKSBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7CisgICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gTWVpbGhhdXMgaXMgdW5kZXIKKyAgIG5vIG1lYW5zIGxpYWJsZSBmb3IgcHJvZHVjdHMgdXNpbmcgdGhpcyBmaWxlIG9yIHBhcnRzIG9mIGl0LgorCisgICAzKSBUaGUgY29weXJpZ2h0IG9mIHRoaXMgZmlsZSBoYXMgdG8gYmUgbWVudGlvbmVkIGluIGRlcml2ZWQgd29yay4KKworICAgNCkgSWYgdGhpcyBsaWNlbnNlIHRlcm1zIGFyZSBub3QgdmFsaWQgZHVlIHRvIGFueSBvdGhlciBsYXcKKyAgIG9yIHJlc3RyaWN0aW9ucyBpbXBvc2VkIG9uIHlvdSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byB1c2UKKyAgIHRoaXMgZmlsZSBpbiBhbnkgd2F5IGF0IGFsbC4KKyAqLworCisvKiBWZXJzaW9uIDAgb2YgTUUtNDYxMCBmaXJtd2FyZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgeGlsaW54X2Zpcm1fNDYxMFtdID0geworMHgwMCwgMHgwMSwgMHgxMSwgMHgwYywgMHgwMSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NTUsIDB4OTksIDB4QUEsIDB4NjYsIDB4MEMsIDB4MDAsCisweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDA2LCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHhEMCwgMHgwQywgMHg4MCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhGQywgMHhCNCwgMHgwQywgMHgwMCwgMHgwMywgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MEMsCisweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwQywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwQSwgMHgwMCwgMHg3QywgMHgyMCwgMHg0MCwgMHg1OCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwMSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEJGLCAweDU4LCAweDgwLCAweDU0LCAweDAwLAorMHg0NCwgMHgwMSwgMHgxOCwgMHgwNSwgMHg2MCwgMHgwNCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg2NiwgMHgwMCwgMHhEOCwgMHgwMCwKKzB4NjAsIDB4MEEsIDB4ODAsIDB4MkQsIDB4MDAsIDB4RjYsIDB4MDAsIDB4RDgsIDB4MDMsIDB4NjAsIDB4MEEsIDB4ODAsIDB4NjksCisweDAwLCAweEM2LCAweDAxLCAweDk4LCAweDA1LCAweDIwLCAweDE2LCAweEZDLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHhGRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgzMiwgMHhGMCwKKzB4MTMsIDB4QzAsIDB4NEYsIDB4MDAsIDB4RkIsIDB4MjgsIDB4QkMsIDB4MDQsIDB4QjAsIDB4MTcsIDB4QzAsIDB4NEUsIDB4MTIsCisweDFCLCAweDEwLCAweEZDLCAweDEzLCAweDMwLCAweDkzLCAweEMwLCAweDRCLCAweDAwLCAweDFGLCAweDAxLCAweEZDLCAweDI0LAorMHgzMCwgMHhDRiwgMHhFMiwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDgsIDB4MzcsIDB4MDEsIDB4OUQsIDB4MDYsIDB4NDQsIDB4MzAsIDB4RDEsIDB4MTEsIDB4NDAsIDB4NDcsIDB4MDAsCisweEZELCAweDBBLCAweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDE3LCAweDA5LCAweDExLCAweDQyLCAweEY0LCAweDBCLAorMHg1MCwgMHg0OSwgMHg0MCwgMHgwNiwgMHgwQywgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHg4RiwgMHg0MCwgMHgwNCwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MzMsIDB4MDAsCisweDhELCAweDE4LCAweDA1LCAweDE2LCAweERBLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDQwLCAweDc0LCAweDAzLAorMHg5MSwgMHgwQywgMHg0MCwgMHgzNSwgMHgwMSwgMHgwRCwgMHgyMCwgMHgzNCwgMHhBMywgMHgxMCwgMHg0OCwgMHg0MCwgMHgwMSwKKzB4MDEsIDB4Q0QsIDB4QTAsIDB4NzQsIDB4MTMsIDB4RDIsIDB4NEMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM0LCAweDAwLCAweDlELCAweDAxLCAweDQ0LCAweDg2LAorMHhEMCwgMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHhERCwgMHgwMCwgMHg2NCwgMHg4QSwgMHgxMCwgMHg4OSwgMHgwMiwgMHgzNywKKzB4MDAsIDB4MTUsIDB4MTAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MTksIDB4MDcsIDB4NDcsIDB4MjAsIDB4NUQsIDB4MDQsIDB4NzQsCisweEEzLCAweERBLCAweDBELCAweDQ4LCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBOCwgMHg3NywgMHgwMCwgMHgxRiwgMHg5MSwgMHg0QywgMHg4NiwgMHhFMCwgMHgxOSwgMHhDMCwgMHg1NywKKzB4MjEsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4ODAsIDB4MDYsIDB4OTEsIDB4MUIsIDB4MEIsIDB4N0MsCisweDAzLCAweDMxLCAweDMxLCAweEMwLCAweDQ3LCAweDAxLCAweDlGLCAweDQ0LCAweDdDLCAweDAyLCAweEQwLCAweDBELCAweDYwLAorMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwKKzB4MDIsIDB4M0UsIDB4NDAsIDB4RTgsIDB4MDAsIDB4RjAsIDB4MEIsIDB4NDAsIDB4OEYsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjQsCisweDQ4LCAweEYwLCAweDBCLCAweEMwLCAweDFGLCAweDgwLCAweDFBLCAweDIwLCAweEJDLCAweDAzLCAweEUxLCAweDBCLCAweEM4LAorMHgwRSwgMHgwMCwgMHgzRSwgMHgwMSwgMHhGOCwgMHgwMiwgMHgzMCwgMHgwRiwgMHhEMSwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsCisweDQ2LCAweDcwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDdDLCAweDIxLCAweDMwLCAweDBELCAweEM0LAorMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHg4MywgMHhCMCwgMHgyOSwgMHhDMCwgMHg4NCwgMHgwOCwgMHg5RiwgMHg0NCwKKzB4N0MsIDB4NDMsIDB4RjAsIDB4MEMsIDB4QzQsIDB4MEEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDBBLCAweDkwLCAweDA5LCAweDQwLAorMHg2NywgMHgwMCwgMHhGMCwgMHg4MCwgMHgzNCwgMHgwNCwgMHhCMCwgMHhCOSwgMHg0MCwgMHgzMiwgMHgwMCwgMHhEMSwgMHg0MSwKKzB4QzAsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MzQsIDB4NDMsIDB4RDAsIDB4M0YsCisweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLAorMHgzMiwgMHgxMCwgMHgxRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MCwgMHgxMCwgMHg0MCwgMHhBMywgMHg4NCwgMHhDOSwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzAsIDB4MjEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDQ5LCAweDgzLCAweDA0LCAweDg5LCAweEQ4LCAweDBDLCAweDQwLCAweDFDLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MiwgMHg3OCwgMHgwMiwgMHhFQywgMHg4MSwKKzB4QjQsIDB4MDUsIDB4OUEsIDB4OTIsIDB4NjAsIDB4NEIsIDB4OTAsIDB4RTEsIDB4QTksIDB4QjYsIDB4MDYsIDB4OTAsIDB4MUEsCisweDYwLCAweDdBLCAweDAwLCAweEUxLCAweDEzLCAweEE0LCAweDA3LCAweEMwLCAweDEyLCAweDQwLCAweDRGLCAweDAwLCAweDYxLAorMHgzNSwgMHhCNCwgMHgyNSwgMHhDMCwgMHg5RiwgMHg2MSwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MTAsIDB4NEQsIDB4MDAsIDB4MUMsIDB4QTEsIDB4NzgsIDB4ODAsCisweEUxLCAweDMzLCAweDI1LCAweENGLCAweDIwLCAweDNDLCAweDIzLCAweDMwLCAweDJDLCAweEMxLCAweDM0LCAweDA4LCAweDA3LAorMHgwNSwgMHgwRCwgMHgwMywgMHhCMCwgMHhDMCwgMHhFOCwgMHgxMCwgMHgyMiwgMHhDRiwgMHg0MSwgMHgzQywgMHgxNywgMHhGMiwKKzB4REQsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEIyLCAweDNELCAweDA4LCAweEZGLCAweDAwLCAweEZFLCAweEEzLCAweDgwLCAweDhGLCAweEMyLCAweDFCLCAweDAwLCAweEZGLAorMHg4MCwgMHhGRSwgMHgwMywgMHhGMCwgMHgwQiwgMHg0MCwgMHgzRiwgMHgxMCwgMHgzNywgMHgwOCwgMHhEQywgMHg2MywgMHhGMCwKKzB4ODcsIDB4QzYsIDB4M0YsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RkEsIDB4OEYsIDB4QzIsIDB4MDksIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDc3LCAweDAwLCAweDU3LAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxMSwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgxMCwgMHg1QywgMHgwMSwgMHhGMCwKKzB4MTgsIDB4QzAsIDB4NjYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MTMsIDB4RjAsIDB4MDEsIDB4QzgsIDB4MTcsIDB4MTAsCisweDlGLCAweDAwLCAweDdDLCAweDAzLCAweDMyLCAweEJELCAweEM1LCAweDU0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5OCwgMHgzRCwgMHgwMCwgMHg2MSwgMHg4MCwgMHhCNiwgMHgwMSwgMHhEMCwKKzB4MEEsIDB4NDgsIDB4MzgsIDB4MDAsIDB4RkQsIDB4MDYsIDB4ODQsIDB4MDMsIDB4RDIsIDB4MEEsIDB4NDAsIDB4MzksIDB4NDAsCisweEYxLCAweDgwLCAweDg2LCAweDQzLCAweEQwLCAweDBBLCAweDQ4LCAweDFCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLAorMHgxMCwgMHgwRiwgMHg0MCwgMHg0OCwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MDAsIDB4NzksIDB4ODAsIDB4RTUsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MTcsIDB4NDAsIDB4NzksIDB4MDgsCisweEVDLCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFGLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LAorMHhEMCwgMHgxRSwgMHg2MCwgMHg3OSwgMHgwMCwgMHhBRCwgMHgxMSwgMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHgwQywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjMsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQyLCAweDMxLCAweDAyLCAweENELCAweDAwLCAweDE0LCAweDRCLAorMHhEMSwgMHgwOCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwRCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywKKzB4MDEsIDB4Q0QsIDB4ODAsIDB4NzQsIDB4MEIsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE0LCAweDAxLCAweDc3LCAweDAzLCAweEZDLCAweDI5LAorMHhEMCwgMHgxNywgMHhDMSwgMHg1RCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg5QywgMHgxOSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxRSwKKzB4MDAsIDB4NzMsIDB4MDIsIDB4NEMsIDB4MDEsIDB4RjAsIDB4NDcsIDB4QzAsIDB4MUYsIDB4OEMsIDB4N0YsIDB4MDAsIDB4RkMsCisweDA5LCAweDcyLCAweDA1LCAweDQwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NiwKKzB4MDAsIDB4MEUsIDB4NDAsIDB4NjgsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4NDIsIDB4NUMsCisweDAwLCAweEIyLCAweDExLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDEwLCAweDdDLCAweDEwLCAweDgyLCAweDAxLCAweEMwLAorMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyNywKKzB4MDAsIDB4OEYsIDB4MTAsIDB4NTQsIDB4MEEsIDB4RjIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsCisweDA2LCAweEQwLCAweDk5LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDA0LCAweDVDLCAweDgyLCAweEUwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHg4OSwgMHhDMiwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MTAsIDB4OUMsIDB4MDAsIDB4NTQsCisweDAyLCAweEQwLCAweEI5LCAweDQwLCAweEU3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDZBLCAweDEwLCAweDE5LCAweDA0LAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NSwgMHgwMiwgMHhDMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MCwgMHgxMywKKzB4NzQsIDB4MjIsIDB4MTAsIDB4NTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LCAweDQwLAorMHhFNywgMHgwMCwgMHg5RCwgMHg4MCwgMHg0NSwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MSwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMiwKKzB4NDQsIDB4ODIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgyMCwgMHgwMiwgMHg4RCwgMHgxNCwgMHgxNCwgMHg1NiwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHg4RCwgMHgwMCwKKzB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4ODgsCisweDAwLCAweDIzLCAweDAyLCAweDgxLCAweDAwLCAweDMwLCAweDAyLCAweDE0LCAweDQ4LCAweDQ5LCAweDQzLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMCwgMHgxRiwgMHgyNCwKKzB4NEMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MUUsIDB4MTQsIDB4NEMsIDB4MDAsIDB4QjAsIDB4QTEsCisweEMyLCAweDgzLCAweDAwLCAweDFGLCAweDFFLCAweDRDLCAweDc4LCAweEYwLCAweDIxLCAweEMwLCAweDg3LCAweDAwLCAweDE3LAorMHgwQSwgMHgzQywgMHg4MSwgMHgzMCwgMHg0MSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjAsIDB4MkYsIDB4MDEsIDB4QkYsIDB4OTQsIDB4RkMsIDB4NTIsIDB4RjIsIDB4MEEsCisweEM4LCAweDJGLCAweDAwLCAweDlDLCAweDE0LCAweEZDLCAweDAyLCAweEIwLCAweDFGLCAweDgwLCAweDJGLCAweDAxLCAweEJGLAorMHg4MSwgMHg3MCwgMHgwNiwgMHhGMSwgMHg0RiwgMHhDMCwgMHgyRiwgMHg0MSwgMHhCRiwgMHgwMSwgMHhGQywgMHg1MywgMHhGMCwKKzB4NDksIDB4NDEsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksCisweDgwLCAweDIzLCAweDAwLCAweDk3LCAweDA4LCAweEYwLCAweDM3LCAweDMwLCAweDBBLCAweEMwLCAweDJGLCAweDIwLCAweDlGLAorMHgwQywgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHhBMiwgMHgwMCwgMHhCRiwgMHgxMCwgMHg0QywgMHgwMiwgMHhGMCwKKzB4MjksIDB4QzAsIDB4MjUsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjQsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAxLCAweDAxLAorMHgwNSwgMHg3NCwgMHgzRCwgMHhCMCwgMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMSwgMHhEMSwKKzB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDIsIDB4NTEsIDB4MjgsIDB4OTEsIDB4MDEsIDB4NDAsIDB4MTQsIDB4MTEsCisweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQ4LCAweDcxLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwNCwgMHg4NSwgMHg0MiwgMHgzNCwgMHgwMiwgMHg1OSwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OEQsIDB4MDIsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDIsIDB4MjIsIDB4MTAsCisweDhELCAweDAwLCAweDE2LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDIxLCAweDAwLCAweEM1LCAweDIwLCAweDc0LCAweDAyLAorMHgxMSwgMHgwOCwgMHg1MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTgsIDB4MjEsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NjAsIDB4MjcsIDB4MDgsCisweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDhELCAweDQyLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDU0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHg0MCwgMHg5NSwgMHgwNCwgMHg3NCwgMHgwMiwgMHg1MiwgMHgwOSwgMHg0MCwgMHg2MSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDgsCisweDk3LCAweDkzLCAweDc4LCAweDBBLCAweDc0LCAweDE5LCAweEMwLCAweEU3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDBBLAorMHhGMCwgMHgwOCwgMHhDOCwgMHhFNiwgMHgwMSwgMHg5RiwgMHhCOCwgMHg1QywgMHgwMiwgMHhGMCwgMHgyOCwgMHhDMiwgMHgyNSwKKzB4MDAsIDB4OTcsIDB4MDQsIDB4M0MsIDB4MEUsIDB4MjAsIDB4MDksIDB4QzQsIDB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweDY0LCAweDAyLCAweDlGLCAweDAwLCAweDNDLCAweDE2LAorMHhCMCwgMHgwOSwgMHhDNCwgMHhFNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDEsIDB4OUYsIDB4MDEsIDB4NjgsIDB4MDIsIDB4QjAsIDB4MjksIDB4QzQsIDB4MjcsIDB4MDEsIDB4OUIsIDB4MDAsIDB4N0MsCisweDBFLCAweEI0LCAweDA4LCAweDQwLCAweDUyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwOCwgMHhGMCwgMHg2MSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MTcsIDB4MDAsIDB4NEMsIDB4NDAsIDB4RjAsIDB4MjEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4NDIsIDB4NUMsCisweDAwLCAweDMwLCAweDIxLCAweEMwLCAweDg3LCAweDEwLCAweDFGLCAweDAwLCAweDRDLCAweDA4LCAweEYwLCAweDAxLCAweEQxLAorMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwKKzB4MDAsIDB4NTEsIDB4MDAsIDB4QzQsIDB4MEQsIDB4RDAsIDB4MzcsIDB4NDAsIDB4MUMsIDB4MDIsIDB4NTEsIDB4MjAsIDB4Q0MsCisweDQxLCAweEQyLCAweDA3LCAweDQ4LCAweDE0LCAweDAwLCAweDcxLCAweDQ5LCAweDQ0LCAweDgxLCAweDUwLCAweDA1LCAweDQwLAorMHgxNywgMHgwMCwgMHg3QywgMHg4MiwgMHhDNCwgMHg2OSwgMHhEMCwgMHgwNywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4NjAsIDB4QzEsIDB4NDAsIDB4MTQsCisweENGLCAweEMwLCAweEI0LCAweDQwLCAweDcyLCAweDAyLCAweEM1LCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDhDLCAweDQwLAorMHgzMCwgMHgxMCwgMHhDMSwgMHgwQiwgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHhDOSwgMHgwNCwKKzB4MDQsIDB4ODAsIDB4RDAsIDB4MzAsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDgyLCAweDNDLCAweDIyLCAweEUxLCAweDBELCAweDk0LCAweDQzLCAweEQwLCAweDEyLCAweDQwLAorMHg3RSwgMHgwMCwgMHhDMSwgMHgwMSwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHg3QywgMHg0MywgMHg2MSwgMHgwMCwKKzB4QTQsIDB4MjcsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4QUQsIDB4MjEsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MjMsCisweDQ0LCAweDEwLCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLAorMHg3OCwgMHgwMSwgMHhFMywgMHg5MSwgMHg5RCwgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg0QSwgMHgwMCwgMHhFNywgMHgwMSwKKzB4QUQsIDB4MDcsIDB4RTEsIDB4MTMsIDB4QzAsIDB4NzgsIDB4MDIsIDB4QTMsIDB4NjEsIDB4RkMsIDB4MzcsIDB4MzAsIDB4NUUsCisweEMxLCAweDdCLCAweDAwLCAweEJCLCAweDAxLCAweDhDLCAweDA2LCAweEZBLCAweDFCLCAweEMwLCAweDUwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHgzNSwgMHgwNCwgMHhERiwgMHg0MCwKKzB4NkMsIDB4MDMsIDB4RjMsIDB4MDEsIDB4QzAsIDB4MDAsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MDUsCisweDkwLCAweDM3LCAweDAxLCAweDFGLCAweDAwLCAweDVDLCAweDkzLCAweEYxLCAweEFELCAweDgwLCAweEI3LCAweDAzLCAweDlDLAorMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4REMsIDB4MjUsIDB4MzAsIDB4MUYsCisweEMwLCAweDdGLCAweDAwLCAweEY3LCAweDExLCAweEZDLCAweDI2LCAweDEwLCAweDFGLCAweEMwLCAweDdGLCAweDEwLCAweDdGLAorMHgwOSwgMHhDQywgMHg4NywgMHgzMCwgMHg5RiwgMHhDMCwgMHhGQywgMHg4QSwgMHhCRiwgMHgwRCwgMHhFQywgMHgyNCwgMHhGMSwKKzB4MTcsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDg4LCAweDM5LCAweDI0LCAweEVELCAweDAwLCAweEY0LCAweDAzLCAweEIwLCAweDRBLCAweDQ4LCAweDBCLCAweDAwLCAweEVELAorMHgwNCwgMHhCNCwgMHgyMSwgMHgxMCwgMHg0RSwgMHg0MiwgMHg3QiwgMHgwMSwgMHgyOSwgMHgwMSwgMHg4NCwgMHgwMywgMHhGMCwKKzB4MEUsIDB4NDQsIDB4MzgsIDB4MDAsIDB4OEQsIDB4NDMsIDB4MzQsIDB4MjEsIDB4RDAsIDB4ODQsIDB4NDAsIDB4NTcsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDM5LCAweDAwLCAweEVELAorMHgxMCwgMHg5NCwgMHgwMSwgMHg5OCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwNCwgMHhFRCwgMHg4MCwgMHhGNCwgMHgwMCwgMHg5MCwKKzB4MDIsIDB4NDEsIDB4M0IsIDB4MDEsIDB4MEQsIDB4MDgsIDB4OTQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDgsIDB4MzgsIDB4MjAsCisweDI1LCAweDAyLCAweEI0LCAweDIwLCAweEQ4LCAweDBFLCAweDQwLCAweDIzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHg3NCwgMHg0MiwgMHg5MCwKKzB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MkQsIDB4OTAsIDB4MTAsIDB4NDAsIDB4MzcsIDB4MDAsCisweDE5LCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDJELCAweDQwLCAweEIwLCAweDAwLCAweDBELCAweDA4LCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4ODgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4NUMsIDB4MDIsIDB4QjAsIDB4QTUsIDB4QzAsIDB4MjcsIDB4OTAsCisweEY3LCAweDAwLCAweDdDLCAweDI3LCAweEI2LCAweEI5LCAweEM4LCAweDNGLCAweDAwLCAweDlGLCAweDIwLCAweERDLCAweDAzLAorMHgzMCwgMHhBRiwgMHhDOCwgMHgzQywgMHgwOCwgMHg4RiwgMHgwMSwgMHg2QywgMHg4MywgMHhEMCwgMHgwRCwgMHhDOCwgMHg1NywKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsCisweERGLCAweDEwLCAweDdDLCAweDI4LCAweEYwLCAweDE1LCAweEMwLCAweEE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLAorMHg3MCwgMHgyMSwgMHhDMCwgMHg3NywgMHgwMCwgMHgxRSwgMHg0MiwgMHgyNSwgMHg4MywgMHhCMCwgMHg4RCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4MUQsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzQsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDNGLCAweDI4LCAweEZCLCAweDQwLCAweEZDLCAweDAyLAorMHgzMCwgMHgzNywgMHhDMCwgMHgyRiwgMHgwNCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxNiwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwKKzB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4NzEsIDB4MEYsIDB4RTAsIDB4M0MsIDB4MEMsIDB4QkYsIDB4MjAsIDB4REMsCisweDAzLCAweEYyLCAweDBCLCAweEMyLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhCMCwgMHgwNSwgMHhDMCwgMHhFNywKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEEsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MzYsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NkMsCisweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM1LCAweDAwLCAweDFDLCAweDAzLCAweDQwLCAweDA0LCAweEQwLCAweDM1LCAweDQwLAorMHg4NCwgMHgwNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTgsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MDQsIDB4REQsIDB4MDAsIDB4NjQsCisweDBBLCAweEQwLCAweDFCLCAweDQwLCAweDM3LCAweDAwLCAweDMxLCAweDA2LCAweEMwLCAweDAzLCAweDAwLCAweDBELCAweDQ0LAorMHgzNiwgMHgwMCwgMHhCRCwgMHgwMSwgMHg0NCwgMHhBMywgMHhEMCwgMHg2NCwgMHg1MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzYsCisweDAwLCAweDE4LCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQxLCAweDAwLCAweDQyLAorMHgzNiwgMHgyMSwgMHgxOSwgMHgyNCwgMHgyNCwgMHgwMywgMHgxNSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHgxRCwgMHgwNCwKKzB4MDQsIDB4QTYsIDB4RDAsIDB4MjgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNFLCAweDA4LCAweEZCLCAweDgwLCAweDdDLCAweDAwLCAweDE0LCAweDAxLCAweDQwLAorMHgyNywgMHgwOCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMiwgMHgzRiwgMHgwNSwgMHgxMywgMHgxNiwKKzB4OEMsIDB4MDMsIDB4NzAsIDB4MEUsIDB4RDAsIDB4M0MsIDB4MTAsIDB4MUYsIDB4MUMsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MjEsCisweEMwLCAweDA0LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEIwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHg0MCwgMHhGQywgMHgwMiwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHg0MCwKKzB4QkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MzYsIDB4MDAsIDB4MUYsIDB4MTQsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEM0LCAweDNGLCAweDAwLCAweDFGLCAweDA0LCAweEZELCAweDEwLCAweEYyLCAweDQzLCAweDAwLCAweDE3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RCwgMHgwMiwgMHhGQSwgMHgwMCwKKzB4RkMsIDB4MjAsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MjAsIDB4RjcsIDB4QTAsIDB4RUMsIDB4MDMsIDB4MzAsIDB4NEYsCisweEM0LCAweDBELCAweDEwLCAweDMzLCAweDAxLCAweEZDLCAweDI3LCAweEYxLCAweDMzLCAweEMwLCAweDNFLCAweDAwLCAweDJGLAorMHgwMSwgMHg2QywgMHg4MCwgMHhGMiwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MzcsIDB4MjAsIDB4RjEsIDB4ODIsIDB4MzQsIDB4M0EsIDB4MTAsIDB4M0YsCisweDQwLCAweEJFLCAweDE2LCAweEYxLCAweDg5LCAweEY0LCAweDBGLCAweDEwLCAweDlGLCAweEM4LCAweDQ1LCAweDMyLCAweDk1LAorMHgwMCwgMHg3NCwgMHgxMSwgMHhEMSwgMHg0MSwgMHg0MCwgMHgzRiwgMHgyMCwgMHgxRCwgMHg1NCwgMHg0NCwgMHgwNCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweDIwLCAweDMzLCAweDExLCAweEMxLCAweDM2LCAweDc0LCAweDAzLCAweDExLCAweDJDLCAweDQ0LCAweDMzLCAweDAxLCAweEM1LAorMHg4MCwgMHgzNCwgMHgyMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgxMywgMHg5MCwKKzB4MDAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4ODAsIDB4RDgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDc1LCAweDIwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgyMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHg4MywgMHgxMCwKKzB4MEQsIDB4NDAsIDB4OTcsIDB4MDAsIDB4OTQsIDB4MDQsIDB4NzQsIDB4MjEsIDB4RDAsIDB4MTEsIDB4NDMsIDB4M0YsIDB4MDAsCisweDFELCAweDEwLCAweEMwLCAweDYwLCAweEMwLCAweDNCLCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHg0MCwgMHhEQiwgMHgwMCwgMHgzQywgMHgwNiwgMHhCNCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NkUsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4ODMsIDB4MDAsCisweEQzLCAweDgwLCAweDdDLCAweDk3LCAweEYwLCAweDExLCAweEM4LCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAwLAorMHhGMSwgMHgzMSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MjAsCisweERGLCAweDAwLCAweEZBLCAweDQzLCAweEYwLCAweDBELCAweEMyLCAweDRELCAweDAxLCAweEZGLCAweDAxLCAweEZDLCAweDAxLAorMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwOSwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHg0MCwgMHgxRiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDEsCisweERGLCAweDA4LCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweERGLCAweDQwLCAweDNDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwOCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgyMSwgMHhDMCwgMHgzNywKKzB4MDQsIDB4REYsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEY0LCAweDA5LCAweEZELCAweEMxLCAweDc0LCAweDgzLAorMHg1MCwgMHgzRiwgMHg0NCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwQSwgMHhDNCwgMHg4RiwgMHhEMCwgMHgwRiwgMHg0MSwgMHgzNCwKKzB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4ODEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4RkYsIDB4MDAsIDB4MUMsIDB4MDAsIDB4NDQsCisweDEyLCAweEQwLCAweDM5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHhBMCwgMHg3NiwgMHgwMCwgMHhDOSwgMHg0NywgMHgzNCwgMHgwMywgMHgxOCwgMHgwQywgMHg0OSwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MkYsIDB4RDAsIDB4NUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4NDksIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDAwLCAweDQwLCAweEYzLCAweDAwLCAweDFELCAweDAwLCAweDE0LCAweDA0LCAweEQwLCAweDAwLCAweDAxLAorMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MjcsIDB4NTAsIDB4OUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MzUsIDB4ODUsCisweDA3LCAweEQwLCAweDVFLCAweDQwLCAweDY5LCAweDgwLCAweEVELCAweDAzLCAweEY0LCAweDA2LCAweDkwLCAweDkyLCAweDAyLAorMHg3QiwgMHgwMCwgMHgzRCwgMHgwMSwgMHg5NiwgMHgyNCwgMHhEMCwgMHg5QSwgMHg0OCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDIsIDB4Q0YsIDB4MDgsIDB4M0MsCisweDAzLCAweDNBLCAweDBDLCAweEMxLCAweDMzLCAweDAwLCAweENGLCAweDBELCAweDJDLCAweDAzLCAweEYwLCAweDVDLCAweEMwLAorMHgxMSwgMHgwMCwgMHg0QiwgMHgxMCwgMHgzQywgMHgwNiwgMHgzMCwgMHgwMCwgMHhDMiwgMHgzMywgMHgwNiwgMHhDRiwgMHgwMCwKKzB4MUMsIDB4MTQsIDB4RjAsIDB4MDAsIDB4QzEsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZFLCAweDAwLCAweEY4LCAweDAzLCAweEY4LCAweDBGLCAweEM5LAorMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgxQywgMHgwMCwgMHhGRiwgMHgwOCwKKzB4M0MsIDB4MDIsIDB4NzUsIDB4MDcsIDB4QzYsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUQsIDB4MjAsIDB4RjAsIDB4MEIsCisweEU4LCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLAorMHgzNywgMHgxMCwgMHhERSwgMHg0NCwgMHg3QywgMHgwMywgMHgzMCwgMHg1RCwgMHhDMiwgMHgzNCwgMHgxMSwgMHhEMywgMHgwNCwKKzB4N0MsIDB4MEIsIDB4RjMsIDB4M0QsIDB4RDEsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDEsCisweEQwLCAweEI0LCAweDA3LCAweENFLCAweDAwLCAweDRDLCAweDA0LCAweDMyLCAweDE5LCAweEMwLCAweDU0LCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOCwgMHgwMCwgMHhFRCwgMHg5NiwKKzB4RjQsIDB4MDMsIDB4QjAsIDB4MEMsIDB4NTUsIDB4MzgsIDB4MTQsIDB4RTEsIDB4MTYsIDB4QjQsIDB4NUIsIDB4RDAsIDB4NEMsCisweDQwLCAweDIwLCAweDEwLCAweEYxLCAweDgwLCAweDg0LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDM4LCAweDAxLCAweEVELAorMHgwMCwgMHg4NCwgMHgwMiwgMHgxMSwgMHgwQiwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDRBLCAweDcwLCAweDEzLCAweEUxLCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDVFLCAweDQwLCAweDc4LCAweDQwLCAweEUxLAorMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxNiwgMHg0MywgMHg3OCwgMHg4MSwgMHhGRCwgMHgwMSwgMHgwNCwgMHg4NCwgMHgxOCwKKzB4MUEsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDI4LCAweDIzLCAweDAyLCAweERELCAweDAwLCAweDM0LCAweDAzLCAweDkyLCAweDBDLCAweDQwLCAweDMwLCAweDQwLCAweEMxLAorMHgyMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0OCwgMHgzMCwgMHgwNCwgMHhDMSwgMHgwOCwgMHgwNCwgMHgwNywgMHhEMCwKKzB4MkMsIDB4NDEsIDB4MzAsIDB4MDAsIDB4REQsIDB4MTAsIDB4MDQsIDB4MEYsIDB4MTgsIDB4M0MsIDB4NDAsIDB4NEEsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDU1LCAweDAwLCAweDVGLAorMHg4MCwgMHhGQywgMHgyOSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg0MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4ODIsIDB4MUMsIDB4MDAsIDB4NzMsIDB4MDMsIDB4Q0QsIDB4MTUsIDB4RjAsIDB4MzcsIDB4QzAsIDB4MTQsIDB4MDAsCisweDdGLCAweDEyLCAweENDLCAweDE1LCAweDMwLCAweDE3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzgsIDB4ODcsIDB4MDAsCisweDFGLCAweDEwLCAweDdDLCAweDgwLCAweEYzLCAweDAxLCAweEMwLCAweDA3LCAweDMwLCAweDFGLCAweDAwLCAweDdELCAweDEwLAorMHhGMSwgMHg4MSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4NjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsCisweDk3LCAweDAxLCAweDVDLCAweDI2LCAweEYwLCAweDE5LCAweEMwLCAweDIzLCAweDAwLCAweDkwLCAweDgwLCAweDdDLCAweDAyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHhBNCwgMHgwMCwgMHg5RiwgMHgwNSwgMHg0QywgMHgxMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg0MywKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RTIsIDB4MjIsCisweDkxLCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDQ0LCAweDhBLAorMHhEMCwgMHg5OSwgMHg0NCwgMHgyNywgMHgwMiwgMHg5MSwgMHgwMiwgMHg3NCwgMHg4MiwgMHgxMiwgMHgwOCwgMHg0MiwgMHgyNCwKKzB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQ0LCAweDkxLCAweDIxLCAweDU0LCAweDAzLAorMHg1MCwgMHg0OSwgMHg0MSwgMHgyMywgMHgwMCwgMHg5NSwgMHg4NiwgMHg1NCwgMHgwQSwgMHhEMSwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTUsIDB4MDEsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweDQxLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMCwgMHgyNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg1NCwgMHg1MiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDIsIDB4ODEsIDB4ODAsIDB4MDAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NDAsIDB4ODUsIDB4MDEsIDB4MzQsCisweDIyLCAweDEwLCAweDg5LCAweDQyLCAweDYwLCAweDAxLCAweDhELCAweDA4LCAweDA0LCAweDEyLCAweEQwLCAweDQ4LCAweDQ4LAorMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwKKzB4MDAsIDB4MTMsIDB4OTQsIDB4NUMsIDB4MTAsIDB4NzQsIDB4NDEsIDB4QzEsIDB4ODcsIDB4MDUsIDB4MTYsIDB4OTQsIDB4NUMsCisweDUwLCAweEYxLCAweDQ1LCAweEMxLCAweDE3LCAweDA1LCAweDE3LCAweDBBLCAweDdDLCAweDA4LCAweDM0LCAweDIwLCAweEMwLAorMHhDNCwgMHgwMiwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwNCwgMHhGMCwgMHhCMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MDUsIDB4OUYsIDB4MzQsIDB4RkMsCisweDUyLCAweEIwLCAweDA5LCAweEMyLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyRiwgMHgwMCwgMHhCQiwgMHgwMSwgMHhGQywgMHgxMiwgMHhGMCwgMHg0QiwgMHhEMCwgMHg2NywgMHgwMiwgMHhCRiwgMHgwNCwKKzB4RkMsIDB4MjIsIDB4RjAsIDB4OUIsIDB4QzIsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAyLCAweEJGLCAweDg2LCAweDBDLCAweDE2LCAweEIwLCAweDRCLCAweEMwLAorMHgyNywgMHgwNSwgMHhCQiwgMHgwMCwgMHhEQywgMHg4MiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHhDMCwKKzB4N0MsIDB4MjIsIDB4MzAsIDB4MjksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MDIsIDB4Q0MsIDB4MDIsIDB4RTAsIDB4MEIsCisweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LAorMHg0NywgMHgwMSwgMHgxRCwgMHgwMSwgMHg0NCwgMHg1QywgMHgxMCwgMHgwMSwgMHg0MCwgMHg4NywgMHgwMSwgMHgxRCwgMHgwMCwKKzB4NDQsIDB4MDAsIDB4MTQsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQwLCAweDA3LCAweDAwLCAweDE1LCAweDA0LCAweDQ1LCAweDAwLCAweEQyLCAweDAxLCAweDQ4LCAweDcwLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNiwKKzB4MDQsIDB4MjIsIDB4OTIsIDB4MjgsIDB4NDAsIDB4MjMsIDB4MDQsIDB4OEQsIDB4MjIsIDB4MDQsIDB4OEEsIDB4MTAsIDB4MDgsCisweDUwLCAweEEwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDA4LCAweDYwLCAweDIzLCAweDEwLCAweDgxLAorMHgyMCwgMHgwNSwgMHg4MywgMHhEMCwgMHgwOSwgMHg2MCwgMHg0MiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MTAsIDB4MDksCisweDYwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ3LCAweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDI0LCAweDAxLCAweDlELAorMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHhBOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHgxNCwgMHg0NSwgMHgwRSwgMHhEMSwKKzB4NjksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDg4LCAweDY3LCAweDAyLCAweDlGLCAweDAwLCAweDRDLCAweDM2LCAweEIwLCAweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDlCLAorMHg0MCwgMHg1QywgMHgwMiwgMHgxMiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RSwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwKKzB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4ODMsIDB4MDEsIDB4NEMsIDB4MEUsIDB4RjIsIDB4MjksIDB4RDAsIDB4MTYsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDY1LCAweDEwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg1MCwgMHgzQywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAxLCAweDdELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDUxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0RCwgMHgwMCwgMHg1MCwKKzB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MDMsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4ODcsIDB4MDEsCisweDEzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDAxLCAweDAxLCAweDEzLCAweDAyLCAweDRDLCAweDAwLAorMHgzMCwgMHgyMSwgMHhDMSwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4REMsIDB4MDAsIDB4NzUsIDB4MTksIDB4NDQsIDB4MDEsIDB4NTAsIDB4MjcsIDB4QzAsIDB4MTYsIDB4NTAsCisweDcxLCAweDIzLCAweEY0LCAweDIxLCAweEQwLCAweDA2LCAweDQxLCAweDFGLCAweDIwLCAweDc1LCAweDAxLCAweDQ0LCAweDAxLAorMHhEMCwgMHgwNSwgMHg0OCwgMHgxRiwgMHgxOCwgMHg3NSwgMHgwQSwgMHg0NCwgMHgwMSwgMHgxMSwgMHgyNywgMHhDMCwgMHg1MiwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NzIsIDB4ODEsCisweEM5LCAweDAzLCAweDA0LCAweDAzLCAweDEwLCAweDlDLCAweDQxLCAweDMzLCAweDAwLCAweDgxLCAweDAzLCAweDM0LCAweDJCLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwgMHgxMSwgMHg0NCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHhGMSwKKzB4ODAsIDB4QzksIDB4MDEsIDB4MDQsIDB4MDMsIDB4MTIsIDB4OEQsIDB4NDAsIDB4NTIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDc4LCAweDA0LCAweEVELCAweDIwLCAweEM0LCAweDAzLAorMHg1MCwgMHgxQSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCMCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHg3QiwKKzB4NDgsIDB4RTUsIDB4MTEsIDB4ODQsIDB4MjMsIDB4QzAsIDB4OEUsIDB4NDAsIDB4MTMsIDB4MDQsIDB4RUQsIDB4MTAsIDB4QzQsCisweDA3LCAweDFDLCAweDBCLCAweDQwLCAweDE2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHgxMCwgMHg3QywgMHgwMCwgMHhGQiwgMHg4MSwgMHg4QywgMHg0NywgMHg3NCwgMHgxRSwgMHhDMCwgMHg3MywKKzB4MDEsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4NjcsIDB4ODEsIDB4ODQsCisweEQ3LCAweEYwLCAweDFFLCAweEMxLCAweDY5LCAweDIwLCAweEJCLCAweDAxLCAweDhELCAweDA3LCAweDMwLCAweDFCLCAweEMwLAorMHg1NiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwKKzB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MzMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4QjUsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYxLCAweDA5LCAweEMwLCAweDMzLCAweDAwLCAweDFCLCAweDAwLCAweDc1LCAweDAzLCAweEYyLCAweDZELCAweEMwLAorMHgwNywgMHgwMCwgMHg5NywgMHgwMCwgMHgzQywgMHgwMiwgMHhGMSwgMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NUYsIDB4MDAsIDB4N0YsIDB4MDEsIDB4RkMsCisweDA3LCAweDcwLCAweDFGLCAweEMwLCAweEZGLCAweDQ0LCAweEIzLCAweDA5LCAweDlDLCAweDI3LCAweDcwLCAweDlGLCAweEMwLAorMHg3RiwgMHgwMCwgMHhBMywgMHg0MSwgMHhFQywgMHgwNywgMHgzMSwgMHgxRCwgMHhDMCwgMHg0RiwgMHgwMCwgMHhGMywgMHgwMSwKKzB4Q0MsIDB4MDcsIDB4MzAsIDB4OUIsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDg4LCAweEI5LCAweDAwLCAweDZELCAweDAyLCAweEI0LCAweDAzLCAweEIwLCAweDBBLCAweDYwLAorMHgzQiwgMHgwMCwgMHhDMSwgMHgwOCwgMHhCNCwgMHg4MiwgMHgxMCwgMHgwNCwgMHg0OCwgMHgzQiwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4MDQsIDB4MzcsIDB4MTAsIDB4MUUsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkIsIDB4MTgsIDB4QzQsIDB4MjMsIDB4QjIsIDB4Q0EsCisweDUwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHgwMCwgMHg2RCwgMHgwOCwgMHhGNCwgMHgwMywgMHg1MCwgMHgwQSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhBOSwgMHg4MCwKKzB4OTQsIDB4MDIsIDB4NTAsIDB4MEUsIDB4NjAsIDB4MUIsIDB4MDIsIDB4MzksIDB4MDAsIDB4QzQsIDB4MTMsIDB4MTAsIDB4MEUsCisweDQxLCAweDBCLCAweDAwLCAweEIxLCAweDAwLCAweEM0LCAweDQzLCAweDUwLCAweDBBLCAweDQwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHg0MywgMHgyMCwgMHgwRCwgMHg4MCwKKzB4MzQsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MDgsIDB4NDksIDB4NDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDAsCisweDQ0LCAweDUzLCAweDQyLCAweDA5LCAweDAyLCAweDA0LCAweDAzLCAweDk0LCAweDFELCAweDQwLCAweDAxLCAweDAwLCAweDg5LAorMHgxMCwgMHgwNCwgMHgwNiwgMHhEOCwgMHg2MCwgMHg0MCwgMHgxMSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NjQsIDB4MDEsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzQsIDB4MDEsCisweEMwLCAweDNGLCAweDAwLCAweDlCLCAweDAwLCAweDVDLCAweDAyLCAweDUwLCAweDAxLCAweEMwLCAweDM3LCAweDA4LCAweDEzLAorMHgwMiwgMHhDQywgMHgwMywgMHgzMCwgMHhCRiwgMHg0MCwgMHgzNywgMHgwMCwgMHg1MywgMHgwMCwgMHg0RCwgMHhBQiwgMHg1MCwKKzB4MDksIDB4QzEsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweEE3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDQzLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LAorMHgyMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzMywgMHgwMCwgMHgxNywgMHg4MiwgMHg1QywgMHg0MywgMHg3MCwKKzB4MEQsIDB4QzAsIDB4ODcsIDB4MDAsIDB4NUYsIDB4QzIsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MjksIDB4ODgsIDB4MDYsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDIwLCAweDJGLAorMHg4MCwgMHhENCwgMHgwMywgMHgzQywgMHgwMiwgMHhDOCwgMHgzNCwgMHgwMCwgMHhCMywgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwKKzB4MkIsIDB4RTAsIDB4MjQsIDB4MjAsIDB4MzMsIDB4MTAsIDB4RjQsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MEMsIDB4MDAsCisweDdGLCAweDAwLCAweENDLCAweDI3LCAweEYwLCAweDA5LCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhFNiwgMHgwMCwgMHg5RCwgMHg0MywgMHgwNiwgMHgwMywgMHgxMCwKKzB4MTEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MTQsIDB4RDAsIDB4MTgsIDB4RTAsIDB4MjYsIDB4MDAsCisweDExLCAweDA0LCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDQ0LCAweDAxLCAweDQ3LCAweDg1LCAweDdDLCAweDAyLAorMHhEMCwgMHg1MSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4NDQsIDB4MDAsIDB4OUQsIDB4MjEsIDB4NDAsIDB4MDMsIDB4OTIsIDB4MzksIDB4NDQsIDB4MzQsIDB4MDAsCisweDkxLCAweDAwLCAweDU2LCAweDA2LCAweEQyLCAweDI1LCAweDQ4LCAweDc0LCAweDAwLCAweDMxLCAweDg0LCAweDc0LCAweDgzLAorMHhEOCwgMHgwRCwgMHg0MCwgMHg0QywgMHgwMCwgMHg5RCwgMHgwMSwgMHg0NSwgMHgwMiwgMHhEMCwgMHgxMywgMHg0MCwgMHgwNywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsCisweDhELCAweDIwLCAweDU0LCAweDAzLCAweDEyLCAweDA4LCAweDQwLCAweDMwLCAweDIwLCAweEMxLCAweDQwLCAweDE2LCAweDAyLAorMHhEMCwgMHgyNCwgMHg0NCwgMHgzMiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzMywgMHhEOCwgMHgwQywgMHg0NSwgMHgwMCwKKzB4MTAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDA2LCAweDA4LCAweDFGLCAweDAwLCAweEQ0LCAweDAzLAorMHgzMiwgMHgwOSwgMHhDMiwgMHgzQywgMHgwMCwgMHg5MywgMHgyQSwgMHg1NCwgMHgwMCwgMHhEOSwgMHgwRCwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MTMsIDB4MDAsIDB4RkMsIDB4OUIsIDB4QjEsIDB4MEYsIDB4QzAsIDB4MDQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsCisweDAyLCAweEYxLCAweDAxLCAweEMwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCMiwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhBRCwgMHgwMywgMHhGMSwgMHgwMywgMHhDMCwgMHgzRiwKKzB4MTAsIDB4N0YsIDB4MDQsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzYsIDB4MEYsIDB4NDAsIDB4M0YsIDB4MDAsIDB4M0MsCisweDBCLCAweEYwLCAweDBGLCAweEMwLCAweDBELCAweDEwLCAweEI3LCAweDAwLCAweEZDLCAweDEyLCAweEY4LCAweDAzLCAweEMwLAorMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgyRiwKKzB4MDEsIDB4QkYsIDB4MDgsIDB4RkMsIDB4NDMsIDB4MzAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MDUsIDB4M0YsIDB4MDMsIDB4REMsCisweDIzLCAweEYwLCAweDNCLCAweEQwLCAweDNDLCAweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDEzLCAweDMwLCAweDEzLCAweEMwLAorMHg3QywgMHgxMCwgMHgzRCwgMHg2MSwgMHhDQywgMHgxOCwgMHgzMCwgMHg0MywgMHhDMSwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTAsIDB4ODcsIDB4MUQsIDB4OUQsIDB4MDIsIDB4REMsCisweDBGLCAweDAwLCAweDZGLCAweDQwLCAweEJGLCAweDAxLCAweDFELCAweDA0LCAweEM0LCAweDBCLCAweDcwLCAweDBELCAweDQwLAorMHhGQywgMHgwMCwgMHhGMSwgMHgwMywgMHhGNCwgMHhBNywgMHgxMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgxRCwgMHgwMCwKKzB4MDQsIDB4QUIsIDB4MTAsIDB4MjksIDB4NTEsIDB4MEMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDIxLCAweDgyLCAweDBELCAweDA4LCAweDE0LCAweDAzLCAweDEwLCAweDZDLCAweDQ4LAorMHgzMywgMHgxNCwgMHg5RCwgMHgwMCwgMHgxNCwgMHgzMywgMHhEMiwgMHg0OCwgMHg2MCwgMHgzMCwgMHgwQSwgMHhDOSwgMHgwOCwKKzB4MzQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MzAsIDB4MjAsIDB4MUQsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MTAsIDB4NDAsCisweDQyLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLAorMHg0NywgMHgwMCwgMHg5RCwgMHgwMywgMHg1NCwgMHg4MywgMHgxNCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMSwKKzB4NDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NjAsIDB4MzQsIDB4MTAsIDB4RDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MTUsCisweDE4LCAweDI0LCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDgxLCAweDE2LCAweDAxLCAweDQxLCAweDBELCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhBOCwgMHhDNywgMHgwMCwgMHg5RiwgMHgwMSwKKzB4NUMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MEYsIDB4MDMsIDB4NUMsIDB4ODMsIDB4RjAsIDB4OEQsCisweEMwLCAweDMwLCAweDA4LCAweERCLCAweDYwLCAweDNDLCAweDAzLCAweDMwLCAweDIwLCAweEM0LCAweDM0LCAweDAwLCAweDBGLAorMHg1MywgMHg0QywgMHgyNCwgMHgzMCwgMHgxMSwgMHhDNCwgMHgyOSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjEsIDB4MEQsCisweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDFGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLAorMHg1MCwgMHhGMCwgMHg4MywgMHhGMCwgMHgwMywgMHhDOCwgMHg4RiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHhDNywgMHhGMCwKKzB4M0QsIDB4QzAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsCisweDA4LCAweEE1LCAweDAwLCAweDFGLCAweDAwLCAweDBDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDM1LCAweDAwLCAweDFGLAorMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MzQsIDB4MTAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MjIsIDB4MzQsIDB4MkMsIDB4QzAsIDB4MjgsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDY0LCAweDA0LCAweDlELAorMHgwMCwgMHhDNCwgMHgzQiwgMHhEMCwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGQywgMHgwMywgMHhEMCwKKzB4MEQsIDB4NDgsIDB4M0YsIDB4MDAsIDB4RjEsIDB4MDMsIDB4RjQsIDB4MkIsIDB4RDAsIDB4QTUsIDB4QzAsIDB4MjYsIDB4MDgsCisweDFELCAweDAwLCAweDQ0LCAweDBGLCAweDEwLCAweDNELCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhFMiwgMHgzNCwgMHgwRCwgMHg0MCwgMHgwNCwgMHgwNywgMHg5MCwKKzB4MEMsIDB4NDQsIDB4MzAsIDB4MDgsIDB4OEMsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDgsIDB4MzIsIDB4MDAsCisweEMwLCAweDAxLCAweDM0LCAweDI3LCAweEQwLCAweDIwLCAweDQwLCAweDMwLCAweDA0LCAweDBELCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwNCwgMHg0MSwgMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MEQsIDB4MDIsIDB4N0EsIDB4MDIsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4OUUsIDB4NDIsIDB4NzgsIDB4MDAsCisweEFELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDczLCAweDAyLCAweEU1LCAweDAxLCAweEI0LCAweDA3LAorMHhEMCwgMHgxNywgMHg0MCwgMHg1QiwgMHgwNCwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNiwgMHgxMiwgMHg5MiwgMHg0MSwgMHgzNCwKKzB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MzIsIDB4MDAsCisweDVGLCAweDA4LCAweDBELCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMxLCAweDAyLCAweDhGLCAweDA4LCAweDM0LCAweDAzLAorMHhGMCwgMHg0QywgMHhDMCwgMHgzMywgMHgwQSwgMHhDNywgMHgxMCwgMHgzQywgMHgwMywgMHhGMCwgMHhBMSwgMHhFMCwgMHgzMCwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4MEMsIDB4ODAsIDB4MzAsIDB4NTAsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEJBLCAweDNELCAweDIwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDMywgMHgzRiwgMHgwMCwgMHhCRiwgMHgyOCwgMHhGQywgMHgyMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwKKzB4MDIsIDB4REIsIDB4MTAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MDcsIDB4RTAsIDB4M0UsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEY4LCAweDgxLCAweEMyLCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBMCwgMHg1NywgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHg2RiwgMHhCMCwgMHg1RCwgMHhFMCwgMHhCNywKKzB4MTQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MTMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDMsIDB4RDMsIDB4MTUsIDB4NEMsCisweDUzLCAweEYwLCAweDA1LCAweEUwLCAweDc3LCAweDAwLCAweDUzLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDBELCAweEMwLAorMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5OCwgMHgxRCwKKzB4MDAsIDB4RUIsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTgsIDB4Q0YsIDB4NjAsIDB4QjgsIDB4MDEsIDB4RUQsIDB4MDAsIDB4QjQsCisweDRCLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAzLCAweEMxLCAweDA0LCAweDg0LCAweDFCLCAweEQwLCAweDA2LCAweDQwLAorMHgxQiwgMHgyMCwgMHg2MSwgMHgyMCwgMHhGNCwgMHgwMywgMHgxNCwgMHgwRiwgMHg0MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NzksIDB4MTQsIDB4NjEsIDB4MjEsIDB4MzYsCisweDA3LCAweDE4LCAweDVFLCAweDRDLCAweDc5LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDY0LAorMHg3MSwgMHgwMSwgMHhFMSwgMHg0MSwgMHg5NiwgMHgxNywgMHhEMCwgMHgxNiwgMHg0MCwgMHg3RiwgMHgwMCwgMHg2NSwgMHgwMSwKKzB4QjYsIDB4MDcsIDB4OTQsIDB4MUUsIDB4NDIsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDMzLCAweDAwLCAweEM5LCAweDBCLCAweDM0LCAweDgzLCAweDEwLCAweDBDLCAweDQwLAorMHgzMCwgMHgwMCwgMHhDRCwgMHgwNywgMHg3NCwgMHgwMywgMHhEMCwgMHg5QywgMHg2MCwgMHgzMywgMHg0MCwgMHhDMSwgMHgwMCwKKzB4MTUsIDB4MDMsIDB4RDEsIDB4MUMsIDB4NDIsIDB4MzMsIDB4MDAsIDB4QzQsIDB4MDYsIDB4MzQsIDB4MTcsIDB4OTAsIDB4OUMsCisweDQwLCAweDU4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LAorMHgxRiwgMHgwMCwgMHg3MywgMHgwMiwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwgMHhDMiwgMHgxNywgMHgwMCwgMHg3RiwgMHgxMCwKKzB4N0MsIDB4MDEsIDB4RjAsIDB4MTUsIDB4QzAsIDB4MTMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4NDYsCisweEMwLCAweDFGLCAweDAwLCAweDc3LCAweDEyLCAweEZBLCAweDFELCAweEIwLCAweEI3LCAweEM0LCAweDVDLCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwNCwKKzB4N0MsIDB4MDAsIDB4RjQsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDY0LCAweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDA3LCAweDQwLCAweDFCLAorMHgwMCwgMHg3QywgMHgwOCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4RTUsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweEEwLCAweDRDLCAweDAyLCAweDMyLCAweDA5LCAweEM4LCAweDI3LCAweDA5LCAweDkzLAorMHgwMCwgMHgzQywgMHg5MiwgMHgzMCwgMHgxOSwgMHhDMSwgMHgyNiwgMHgwMSwgMHg5RiwgMHgwMCwgMHgzQywgMHgwNiwgMHgzMCwKKzB4ODksIDB4QzAsIDB4NDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDI2LCAweDEwLCAweDlELCAweDgwLCAweDc0LCAweDMyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOSwgMHg5MSwgMHgyMywgMHg3NCwgMHg0RSwgMHgxNCwKKzB4OTksIDB4NDIsIDB4QTQsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEEsIDB4MTAsIDB4MjksIDB4NDQsIDB4MDQsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDM0LCAweDAwLCAweDlELAorMHgwMCwgMHg1NCwgMHgwMiwgMHhDMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1MCwKKzB4MDksIDB4NDIsIDB4MjUsIDB4NDAsIDB4OTEsIDB4MTgsIDB4NzQsIDB4MDIsIDB4OTAsIDB4MjksIDB4NDAsIDB4MjYsIDB4MDAsCisweDlELCAweDAwLCAweDc0LCAweDIyLCAweDA4LCAweDA4LCAweDQwLCAweDcxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHgzMCwgMHgwNSwgMHg4RCwgMHg1NCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4ODgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4OEQsIDB4ODgsIDB4MDUsIDB4MjIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsCisweDgxLCAweDAwLCAweDMwLCAweDAyLCAweDEwLCAweDA4LCAweDQyLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM2LCAweDIzLAorMHgxMCwgMHgwOCwgMHg0MCwgMHg1MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjAsIDB4MDYsIDB4MjEsIDB4MUYsIDB4MjQsIDB4NUMsIDB4RDAsIDB4RjAsIDB4NjEsIDB4QzUsIDB4ODcsIDB4MDUsCisweDFGLCAweDAyLCAweDRDLCAweDU4LCAweDcwLCAweDIxLCAweEMwLCAweDA1LCAweDA1LCAweDEzLCAweDM0LCAweDdDLCAweDUwLAorMHgzMCwgMHgwMSwgMHhDMCwgMHg4NiwgMHgwMiwgMHgxRiwgMHgwQSwgMHg3QywgMHg1OCwgMHgzNCwgMHg0NSwgMHhDMSwgMHg3NSwKKzB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4MkYsIDB4MDUsCisweEJGLCAweDM0LCAweDdDLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAxLCAweEJGLCAweDA0LCAweDdDLCAweDEyLAorMHhGNCwgMHg0QiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg2QiwKKzB4MDAsIDB4QkYsIDB4MjEsIDB4RkMsIDB4MTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAwLCAweDkzLCAweDAyLCAweERDLCAweDAyLAorMHhGMCwgMHg4OSwgMHhDMCwgMHhBNiwgMHgxNSwgMHg5QiwgMHgwMCwgMHg1QywgMHg0MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyRSwKKzB4MDQsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4QjIsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDgsIDB4OUYsIDB4MDAsIDB4Q0MsCisweEMyLCAweDMyLCAweDBCLCAweEQwLCAweDYwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHgxOCwgMHgwNywgMHgwMSwgMHgxQiwgMHg2MCwgMHg3NCwgMHhBOCwgMHhEMCwgMHhBMCwgMHg0MiwgMHg4NCwKKzB4MDAsIDB4MTEsIDB4MjAsIDB4NzQsIDB4MDgsIDB4MTAsIDB4NDEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTcsIDB4NEEsIDB4NDQsCisweDI4LCAweDEwLCAweDAxLCAweDQ0LCAweDA3LCAweDIwLCAweDFELCAweDAwLCAweDQ0LCAweDA4LCAweDE0LCAweDAxLCAweDQwLAorMHg3MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHhBMSwKKzB4ODQsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjIsIDB4MDEsIDB4ODUsIDB4MTQsIDB4MzQsCisweDUyLCAweDEyLCAweDA5LCAweDYxLCAweDIyLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHgzMywgMHg4MCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg2MiwgMHg0QSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTksIDB4ODAsIDB4NzQsCisweDAyLCAweEMwLCAweDA4LCAweDQwLCAweDI2LCAweDIwLCAweDk1LCAweDAyLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDRBLAorMHgyNCwgMHgwMCwgMHg5NSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHhBNywgMHgwMCwgMHg4RCwgMHgxNCwKKzB4NDUsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAxLCAweDkzLCAweDg3LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LAorMHgyNiwgMHgwOCwgMHg5NywgMHgwMCwgMHg1RSwgMHgwMiwgMHgxMCwgMHgwOCwgMHhDMCwgMHgyNiwgMHgyMCwgMHg5RiwgMHgyMCwKKzB4NUMsIDB4MDIsIDB4QjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUUsIDB4MjMsIDB4NEMsIDB4NDIsIDB4MzAsIDB4NDksCisweEMwLCAweDE2LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLAorMHg2MSwgMHgwMiwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyMSwgMHg0MCwgMHg5QiwgMHg4NCwKKzB4N0MsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4NDIsIDB4RDQsIDB4MzksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDIxLCAweDdDLCAweDAyLCAweEYwLCAweDQ4LCAweEMwLCAweDQ5LCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4NCwgMHgwNCwgMHgxRiwgMHgwMiwKKzB4NkMsIDB4MDAsIDB4RTAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4ODAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsCisweEMwLCAweDA1LCAweDA0LCAweDFGLCAweDEwLCAweDRDLCAweDAwLCAweDcwLCAweDExLCAweEMyLCAweDA3LCAweDAxLCAweDFGLAorMHhBMiwgMHgzQywgMHgyMCwgMHgxMCwgMHg0MSwgMHhDMiwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4REMsIDB4MDAsIDB4NUQsIDB4MjAsIDB4RDQsIDB4NjUsIDB4QzAsIDB4MDUsCisweDQwLCAweDE0LCAweDAwLCAweDUwLCAweDAwLCAweDc0LCAweDgxLCAweDEwLCAweDA1LCAweEMwLCAweDFDLCAweDAwLCAweDZELAorMHgyMCwgMHg4MCwgMHgwRCwgMHg3MCwgMHgwNywgMHg4MCwgMHgxRCwgMHgxMCwgMHg1RCwgMHg4MCwgMHhGNCwgMHgwMSwgMHgxMCwKKzB4MzcsIDB4NDIsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweEYyLCAweDAyLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDUwLCAweDMwLCAweDgwLCAweEMxLAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMCwgMHhDRCwgMHgwQSwgMHgwMCwgMHgwQiwgMHhEOCwKKzB4OEMsIDB4NDgsIDB4QjIsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzYsIDB4OTMsIDB4OTAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg4LCAweDM4LCAweDAwLCAweENELAorMHgwMSwgMHg5NCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHhDMiwgMHhFMSwgMHgwNCwgMHhCNCwgMHgyMywgMHgxMSwKKzB4MEUsIDB4NDAsIDB4MzgsIDB4ODAsIDB4OEQsIDB4MDAsIDB4ODUsIDB4MEIsIDB4RDgsIDB4MDYsIDB4NDAsIDB4MDksIDB4MjAsCisweEVELCAweDA0LCAweDM0LCAweDAwLCAweDk0LCAweDBBLCAweDQxLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwRCwgMHg4NCwgMHgwNCwgMHhGMCwKKzB4MUUsIDB4QzEsIDB4NzAsIDB4MDUsIDB4RTEsIDB4MEQsIDB4MzQsIDB4NTcsIDB4MzQsIDB4M0YsIDB4QzAsIDB4NzksIDB4MDAsCisweEFGLCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDE2LCAweEMwLCAweDZCLCAweDAwLCAweEVGLCAweDBCLCAweEJDLCAweDA3LAorMHhCMCwgMHgxNiwgMHhDMCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTIsIDB4MTUsIDB4MTAsIDB4REYsIDB4ODQsIDB4NUMsIDB4MDAsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDA0LCAweDdDLCAweDFCLCAweEYwLCAweDZELCAweEM5LCAweDM3LCAweDIwLCAweDFCLCAweDAwLCAweDdDLCAweDAwLAorMHg3OCwgMHgwNSwgMHhDMCwgMHgwNywgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3NCwgMHgwRCwgMHhDMCwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4N0QsIDB4MDAsCisweEZGLCAweDExLCAweDhDLCAweDI0LCAweDcwLCAweDFGLCAweEM1LCAweDdDLCAweDAwLCAweEYzLCAweDExLCAweEZDLCAweDA3LAorMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhCNywgMHgwNSwgMHhGQywgMHgwNywgMHhGOCwgMHg5NiwgMHhDMCwgMHg2QywKKzB4MDIsIDB4RjMsIDB4ODksIDB4Q0MsIDB4MDcsIDB4MjQsIDB4MUIsIDB4QzQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDA4LCAweDM5LCAweDIwLCAweEVELCAweDA0LCAweDg0LCAweDAwLAorMHgxOCwgMHgwRSwgMHg1MCwgMHgzOCwgMHgyMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgyMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4QTcsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MDYsIDB4NDgsIDB4MEQsIDB4MDIsIDB4RkIsIDB4NDAsIDB4ODUsCisweDAwLCAweEYwLCAweDg4LCAweEUxLCAweDU0LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHhFRCwgMHg4MCwgMHhBNCwgMHgwMCwgMHg1OCwgMHgwQywgMHg0MCwgMHgzOSwKKzB4MDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4QTUsIDB4MDQsIDB4QjQsCisweDAzLCAweEQwLCAweDAzLCAweDQ2LCAweDA4LCAweDgyLCAweEUxLCAweDAwLCAweDg0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHg2MSwKKzB4MDAsIDB4Q0QsIDB4NDEsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4NDIsIDB4MzQsCisweDAzLCAweDEyLCAweDhDLCAweDQwLCAweDEzLCAweDAwLCAweDA1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweEIwLCAweDQ0LAorMHgwMSwgMHgwMCwgMHhDOSwgMHgwMiwgMHgwNCwgMHg0MSwgMHhEMCwgMHgzNCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NDUsIDB4MjAsIDB4RkYsIDB4OUEsIDB4NkMsCisweDAwLCAweDQxLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDFGLCAweEMwLAorMHgzNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHg0NCwgMHgwMCwgMHgwNiwgMHhGMywgMHg0MiwKKzB4NEMsIDB4NEIsIDB4MzAsIDB4MjUsIDB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEE3LCAweDAxLCAweERGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgyMCwgMHhERiwgMHgwOCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHg5RiwgMHg4MCwKKzB4M0MsIDB4OEIsIDB4RjAsIDB4MDEsIDB4QzgsIDB4ODcsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4OTYsIDB4NjUsCisweEMwLCAweDA1LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LAorMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgxMCwKKzB4NUMsIDB4MDMsIDB4RTAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4RkMsIDB4ODMsIDB4MzAsIDB4MDMsCisweEMxLCAweDBELCAweDIwLCAweEYzLCAweDEwLCAweDdDLCAweDA3LCAweDMwLCAweDk3LCAweEMyLCAweDEzLCAweDIyLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHhDNiwgMHgwNCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQwLCAweDI3LCAweDAwLCAweDE5LCAweDAxLCAweDc0LCAweDE4LCAweDAwLCAweDMxLCAweEMwLCAweDQ3LCAweDAxLCAweEQxLAorMHgwMCwgMHg3NCwgMHgyMCwgMHgxMCwgMHgyOSwgMHg0MCwgMHgxNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4NDQsIDB4RDAsIDB4MEMsCisweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDgwLCAweDFELAorMHgwMywgMHg3NCwgMHgxMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHg0RiwgMHgwMCwgMHhGMSwgMHgwMCwgMHg3NCwgMHg0MywgMHgxOSwKKzB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDI4LCAweDIwLCAweDIwLCAweENELCAweDgwLCAweDI0LCAweDAwLCAweEQyLCAweDBDLCAweDQwLCAweDMwLCAweDIwLCAweEMxLAorMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHg4MCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDQsIDB4MDcsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTMsIDB4ODQsIDB4NDAsIDB4NDMsIDB4QTAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDA2LCAweDAwLCAweEVGLAorMHg4MCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzOCwgMHgwMCwgMHhGMywgMHgwMCwgMHhDNSwgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsCisweEYzLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDA5LCAweEM4LCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNCLCAweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEU4LCAweDBELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHg0MywgMHhDMCwgMHgxNywgMHgyMSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTgsIDB4M0YsIDB4MDQsIDB4QjMsIDB4MDgsIDB4Q0MsIDB4OTMsIDB4RjEsIDB4Q0YsIDB4QzAsIDB4M0MsIDB4NDIsCisweEYzLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDEzLCAweEMwLCAweDNELCAweDA1LCAweEY3LCAweDJDLCAweEZDLCAweDA0LAorMHhCMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwNiwgMHgzRiwgMHgwNCwgMHhFQywgMHgwMywgMHhGMCwgMHg4MywgMHhDMCwgMHgwRiwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4QkYsIDB4MDAsCisweDFCLCAweDA0LCAweEM0LCAweEFGLCAweEQwLCAweDZGLCAweDQwLCAweEJDLCAweDAzLCAweEYxLCAweDg0LCAweEY0LCAweDBGLAorMHgxMCwgMHgwOSwgMHhDNCwgMHg3RCwgMHgwOCwgMHhENSwgMHgwOCwgMHg3NCwgMHgwMCwgMHg1MCwgMHgyRiwgMHg0MiwgMHgzQywKKzB4MTAsIDB4MUQsIDB4MTIsIDB4QzQsIDB4ODcsIDB4RDAsIDB4NDAsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDA0LCAweDgxLCAweDIyLCAweDA0LCAweDAzLAorMHhEMCwgMHgyQywgMHg0NCwgMHgzMSwgMHgwMSwgMHhDMSwgMHgxOCwgMHgyNCwgMHgwQiwgMHg1MCwgMHgwNCwgMHg0MCwgMHgzMSwKKzB4MDAsIDB4QzUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MkMsIDB4NDQsIDB4MzMsIDB4MDEsIDB4OEQsIDB4MDYsIDB4MjQsCisweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBMCwgMHgzNCwgMHgzMCwgMHgwOSwgMHg0MSwgMHg0NiwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNSwKKzB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDQsIDB4MDAsIDB4NzQsCisweDIyLCAweDUwLCAweDBELCAweDQwLCAweDM1LCAweDAwLCAweERELCAweDAwLCAweEM0LCAweDAzLCAweEQwLCAweDMzLCAweDQwLAorMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywKKzB4MDAsIDB4OTMsIDB4MDMsIDB4NEMsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MjAsIDB4RDMsIDB4ODAsIDB4N0MsCisweDAzLCAweDcyLCAweDkxLCAweEM4LCAweDM1LCAweDAwLCAweEQ3LCAweDgwLCAweDdDLCAweDQ1LCAweEIwLCAweDBELCAweEMwLAorMHgzNywgMHgxOCwgMHgxRiwgMHhBMiwgMHg2QywgMHgwMywgMHhGMCwgMHgxMSwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4QkYsIDB4NDAsIDB4RkQsCisweDAzLCAweEYwLCAweDBELCAweEMyLCAweDM2LCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDAzLCAweEMxLAorMHgzRiwgMHgwMCwgMHhEOSwgMHgwMCwgMHhGQywgMHg0MSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRSwgMHgwOCwgMHhGQywgMHgwOSwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4ODAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDMxLCAweDAxLCAweDlGLCAweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgzMSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwKKzB4NEMsIDB4MjIsIDB4QjAsIDB4MEMsIDB4QzgsIDB4MzQsIDB4MDgsIDB4MDcsIDB4MDAsIDB4NUMsIDB4MDMsIDB4MzAsIDB4MjEsCisweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHhGQywgMHgwQywgMHg5RCwgMHgwMCwgMHhGQywgMHgwRiwgMHhEMCwgMHgwRiwgMHg0NCwgMHgzQywgMHgwMCwgMHhGMSwgMHgwMCwKKzB4RjQsIDB4MDcsIDB4RDAsIDB4MTUsIDB4QzIsIDB4MzksIDB4MDgsIDB4RjAsIDB4MDMsIDB4MkMsIDB4OEIsIDB4RDAsIDB4MEYsCisweDQ4LCAweDNDLCAweDAwLCAweEQ1LCAweDEwLCAweEM0LCAweDJGLCAweDEwLCAweDA5LCAweDQwLCAweDRDLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwRCwgMHgwMCwKKzB4MzQsIDB4NDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MUIsIDB4RDIsIDB4MTQsCisweDQ4LCAweDMyLCAweDAwLCAweEM4LCAweDg3LCAweDA0LCAweDBELCAweEQwLCAweDBDLCAweDAwLCAweDMxLCAweDAwLCAweDQxLAorMHgxMCwgMHgxNCwgMHgyMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODgsIDB4NzgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjQsIDB4NjcsIDB4RDAsIDB4OUUsCisweDQwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDczLCAweDQ4LCAweEVELAorMHgwMSwgMHhBNCwgMHgwNSwgMHhEMSwgMHgxRSwgMHg0MCwgMHg3MSwgMHgwMCwgMHhFNSwgMHgwMSwgMHhDNCwgMHgxNywgMHgxNCwKKzB4OTIsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDEwLCAweDMwLCAweDAyLCAweENGLCAweDBDLCAweDM0LCAweDAzLCAweEYwLCAweDBDLCAweDQ4LCAweDMxLCAweDAwLCAweEMzLAorMHgwMCwgMHgzQywgMHg0MywgMHhGMCwgMHgwNCwgMHhDMSwgMHgzMiwgMHgwMCwgMHhDRiwgMHgxMCwgMHgwQywgMHgwMCwgMHhCMCwKKzB4OEMsIDB4RDAsIDB4MzEsIDB4QTAsIDB4MTcsIDB4MjIsIDB4NUMsIDB4MTcsIDB4MzAsIDB4NTAsIDB4RDAsIDB4NDgsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDNELCAweDBDLCAweEZGLAorMHg4OCwgMHhEQywgMHg4MywgMHhGMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0QsIDB4MzAsIDB4RjMsIDB4MDgsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4QTAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDg5LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgyNCwgMHg1RiwgMHg0MCwgMHg3QywgMHg2RiwgMHgzMCwKKzB4QkQsIDB4QzAsIDB4RjQsIDB4MDUsIDB4RDMsIDB4NjgsIDB4MUMsIDB4NjMsIDB4NzAsIDB4MDEsIDB4RDAsIDB4MzYsIDB4MDEsCisweERGLCAweDQ5LCAweDRDLCAweDA1LCAweDMwLCAweDRELCAweEM5LCAweDM3LCAweDAzLCAweDFGLCAweDAwLCAweDRELCAweDYzLAorMHhGMCwgMHgxMSwgMHg4NCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4ODgsIDB4MzksIDB4MDEsIDB4NkQsIDB4NjAsIDB4MzYsIDB4MTMsIDB4MTAsIDB4NEUsIDB4NDAsIDB4QjgsIDB4MDEsCisweEUxLCAweDBDLCAweDg0LCAweDAzLCAweDEwLCAweDA3LCAweEMwLCAweEI4LCAweDA0LCAweEVELCAweDg0LCAweEFDLCAweDAxLAorMHgxMCwgMHg0RSwgMHg0OCwgMHgzQiwgMHgwNCwgMHhDRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHg0OCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDEsCisweEVELCAweDAzLCAweDk0LCAweDA3LCAweDE4LCAweDFFLCAweDUwLCAweDdBLCAweDAwLCAweEM1LCAweDAxLCAweDk0LCAweDE3LAorMHg1MCwgMHgxMiwgMHg0MSwgMHg3OCwgMHgwMCwgMHhDRCwgMHgwMSwgMHhDNCwgMHgwNCwgMHg5MiwgMHg5RSwgMHg0MiwgMHg3QiwKKzB4MDEsIDB4MkQsIDB4MjEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLAorMHgxNSwgMHgwQywgMHg2MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxMCwgMHgxNCwgMHg0MSwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4NDAsIDB4MjQsIDB4MjEsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MDQsCisweDAzLCAweEQwLCAweDhDLCAweDQwLCAweDQ5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg3RiwgMHgwQSwgMHg3QywgMHg4MSwgMHgzOCwgMHgwNSwgMHhDMCwgMHgxNiwKKzB4MDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDEsIDB4NzAsIDB4MjcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4Q0MsCisweDg1LCAweEIwLCAweDA1LCAweEMwLCAweDE3LCAweDEwLCAweDdGLCAweDA0LCAweDRDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLAorMHg1RCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNywKKzB4MDgsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MUMsCisweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDA1LCAweDgwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDc0LCAweDAxLCAweEMyLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMiwgMHg0MSwgMHg4MCwgMHg0QSwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsCisweDA2LCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA4LCAweDRDLCAweDE2LCAweDMwLCAweDM5LCAweEMwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5NywgMHgwOCwKKzB4NUMsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY2LCAweDBFLCAweDlELCAweDIwLCAweDc0LCAweDBBLCAweEQyLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMywgMHg0NCwgMHgwRSwgMHgxNSwgMHgwOCwgMHg0MCwgMHg2NCwgMHgyMCwgMHg5RCwgMHgxQiwKKzB4NzAsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MTEsIDB4MDQsIDB4QUUsIDB4MTAsIDB4MDksCisweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg2MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4RCwgMHgwMiwKKzB4NDQsIDB4NDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDksIDB4OUQsIDB4MDAsIDB4NzAsIDB4NDIsIDB4RDIsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAwLCAweDU0LCAweDBBLCAweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgxNCwKKzB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MjIsIDB4OEQsIDB4NDgsIDB4MDQsIDB4MDIsIDB4MTEsIDB4MDksCisweDQwLCAweDIxLCAweDEwLCAweDhELCAweDA4LCAweDM0LCAweDAyLCAweEQ4LCAweDA4LCAweDQwLCAweDIzLCAweDQwLCAweDgxLAorMHgwOCwgMHgwNCwgMHg5MiwgMHgxMCwgMHg0OCwgMHg0OCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDEsIDB4MUYsIDB4MDQsIDB4N0MsIDB4NTAsIDB4NzAsIDB4NjAsCisweEMxLCAweDgzLCAweDA1LCAweDFGLCAweDk2LCAweDRDLCAweDUwLCAweDMwLCAweEExLCAweEQwLCAweDA1LCAweDA1LCAweDFGLAorMHgxNiwgMHg3QywgMHgyOCwgMHhFMCwgMHhFMSwgMHhDOSwgMHgwNywgMHgxNSwgMHgxNywgMHgxNiwgMHg1QywgMHgwNCwgMHgzMCwKKzB4MTEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksCisweEE4LCAweDI3LCAweDI1LCAweEJGLCAweDM0LCAweDdFLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLAorMHgwNCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgxQiwgMHhDMCwgMHgyNiwgMHgyMCwgMHg5RiwgMHgwNCwgMHhCQywgMHgwNywgMHhGMCwKKzB4MTksIDB4QzAsIDB4MjcsIDB4MDUsIDB4QkYsIDB4MDQsIDB4N0MsIDB4MjIsIDB4RjQsIDB4Q0IsIDB4QzEsIDB4NjcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDJGLCAweDAzLCAweDkzLAorMHgwMywgMHhDQywgMHgxMiwgMHg3MCwgMHgyOSwgMHhDMCwgMHhBNSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHg0MiwgMHgzMCwKKzB4MEIsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MEIsCisweEIzLCAweDQwLCAweENDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHg0NywgMHgwMSwgMHgxQiwgMHg0MywgMHg2OCwgMHgyOCwgMHgxMCwKKzB4MDEsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MUQsIDB4MEUsIDB4NDUsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDAsIDB4ODUsIDB4MDIsCisweDExLCAweDIwLCAweDQ0LCAweDAwLCAweDEzLCAweDIxLCAweEMwLCAweDQ2LCAweDAxLCAweDFCLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHg0NCwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTIsIDB4QTMsIDB4MTAsIDB4ODEsIDB4MDYsIDB4MDQsIDB4MDIsIDB4NTAsIDB4NjgsIDB4NDAsIDB4MjEsIDB4ODEsCisweDhELCAweDkwLCAweDA2LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDIxLCAweDQwLCAweDgxLCAweDE2LCAweDQ0LCAweDAyLAorMHg5MCwgMHgyOCwgMHg0MCwgMHhBMCwgMHgwMSwgMHg4MSwgMHg0MCwgMHgwNSwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0MywKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MjAsCisweDk5LCAweDAyLCAweDY2LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDhELCAweDIwLCAweDQ2LCAweDAyLAorMHgwNCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxOCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MjAsIDB4ODksIDB4MDAsIDB4NDQsIDB4MDIsIDB4ODQsIDB4NjksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDIwLCAweDkzLCAweDIxLCAweDRDLCAweDAyLAorMHg3MCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg4MCwgMHg0QywgMHgwMiwgMHgzMiwgMHgwOSwgMHhDOCwgMHgyNywKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjEsIDB4MDksIDB4QzQsIDB4MjQsIDB4MTAsIDB4OTMsIDB4MTMsIDB4NEMsCisweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsCisweDI2LCAweEYxLCAweDA5LCAweEM0LCAweDI2LCAweEE4LCAweDlGLCAweDAzLCAweDNDLCAweDgyLCAweDcwLCAweDA5LCAweEMwLAorMHg1MywgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwKKzB4MDQsIDB4MUYsIDB4NDAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MDcsIDB4ODAsIDB4MTMsIDB4MTAsIDB4NUMsCisweDg0LCAweDcwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFGLCAweDIwLCAweDRDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgyNiwgMHg0QywgMHgwMCwgMHgzMCwgMHgyMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4NUMsIDB4MDQsIDB4NUQsIDB4MDAsIDB4ODQsCisweDAxLCAweEQwLCAweDA1LCAweDQ0LCAweDE3LCAweDQwLCAweDcxLCAweDgzLCAweEY0LCAweDAxLCAweEQwLCAweDA3LCAweDQwLAorMHgxNCwgMHgwMCwgMHg3RCwgMHgwMCwgMHg4NCwgMHhDNSwgMHgzNCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3RCwgMHgwMSwKKzB4QzQsIDB4MUQsIDB4NTAsIDB4MDUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEIyLCAweDIwLCAweENELCAweDIwLCAweDI0LCAweDJCLCAweEQxLCAweDBDLCAweDQwLAorMHgzMywgMHgwMCwgMHhDOSwgMHgwOCwgMHgxNCwgMHgwNywgMHg1MiwgMHgwRCwgMHgyMSwgMHg3MiwgMHg4MCwgMHhDRCwgMHgwMSwKKzB4MDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDcsIDB4NEYsIDB4NTAsIDB4MEMsCisweDQ2LCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgyLAorMHgzOCwgMHgwMCwgMHhDRCwgMHgwNCwgMHhBNCwgMHgwMSwgMHhEMCwgMHg0RSwgMHg0MCwgMHg3QiwgMHgwMiwgMHhFOSwgMHgwMCwKKzB4QjQsIDB4MEEsIDB4RDAsIDB4MjcsIDB4NDgsIDB4MzgsIDB4MDQsIDB4RUQsIDB4MDIsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDNCLCAweDAwLCAweEVELCAweDgyLCAweEM0LCAweDAzLCAweDUwLCAweDBFLCAweDQwLCAweDE3LCAweDA4LCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwNSwKKzB4QUQsIDB4MDcsIDB4RjAsIDB4NUUsIDB4QzAsIDB4N0YsIDB4MDEsIDB4NjksIDB4NDEsIDB4OUMsIDB4MDUsIDB4NzAsIDB4MUUsCisweEUwLCAweDdBLCAweDAwLCAweEZFLCAweDAxLCAweENELCAweDg0LCAweDMwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEZGLAorMHgwMSwgMHhDQywgMHgwNywgMHg3MCwgMHg5RSwgMHhDMiwgMHg1NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsIDB4REYsIDB4NDIsIDB4NUMsIDB4MDAsIDB4RjAsIDB4QUQsCisweEMwLCAweDM3LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA0LCAweEMwLCAweDM1LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMSwgMHgzNywgMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4NEQsIDB4QzAsIDB4NDMsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEEwLCAweDVGLCAweDAwLCAweEYzLCAweDUzLCAweEZDLCAweDI2LCAweDMwLCAweDNGLCAweEMwLCAweEZGLCAweDAwLCAweEZGLAorMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMCwgMHg3RiwgMHgyMiwgMHhCRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwKKzB4MUYsIDB4QzEsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzEsIDB4MDgsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweEJELCAweDAwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgwQSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgyMiwgMHg4MCwgMHgwMiwgMHhEMCwKKzB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MDgsIDB4ODQsIDB4MjMsIDB4RDIsIDB4MEUsIDB4NjAsIDB4M0QsIDB4MDAsCisweEVCLCAweDAwLCAweDA0LCAweDE1LCAweDEwLCAweERELCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgxOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHg5NCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4OEQsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4ODAsCisweEVELCAweDAwLCAweDg0LCAweDQxLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDA4LCAweDI0LCAweDEyLAorMHgxMCwgMHg0RSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4MjgsIDB4MDcsIDB4MTAsIDB4RDEsIDB4MTEsIDB4MzYsIDB4MDIsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODgsCisweDlELCAweDQwLCAweDA0LCAweDAyLCAweEQxLCAweDMwLCAweDQwLCAweDMzLCAweDA4LCAweDFELCAweDAwLCAweDA0LCAweDAwLAorMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMCwgMHgwOSwgMHgwNSwgMHgwNCwgMHg4MCwgMHgxOCwgMHgzQywgMHg1MCwgMHg1OCwKKzB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4MjQsIDB4MDAsCisweEYzLCAweDEzLCAweDdDLCAweDAyLCAweEIwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDlGLCAweDQwLCAweDRFLCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMSwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhEMSwgMHgwRiwgMHg0MCwgMHgzQywKKzB4MDAsIDB4MTMsIDB4MTMsIDB4MkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzEsIDB4NzQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweEE3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDAwLAorMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHg0MiwgMHgzRiwgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNywKKzB4MDAsIDB4NUYsIDB4ODIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MTAsIDB4MUYsIDB4QTIsIDB4N0MsCisweDAyLCAweEY1LCAweDRELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MSwgMHgwOSwgMHgyRiwgMHgxMCwgMHhGMywgMHgwMCwgMHg0NCwgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MzAsIDB4MEIsIDB4QzEsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsCisweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweDAzLCAweDAyLCAweENDLCAweDI1LCAweDMyLCAweDBGLCAweEMwLAorMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg2NiwKKzB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NDQsCisweDA2LCAweDUwLCAweDMxLCAweDQxLCAweDM3LCAweDAwLCAweDFELCAweDAyLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHg0NCwgMHg1MCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NTQsCisweDA2LCAweEQ4LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDVELCAweDAwLCAweDQ0LCAweDQ0LCAweDEwLCAweDEzLCAweDQwLAorMHgzNywgMHgxMiwgMHgxRCwgMHgwMCwgMHhFNCwgMHgwNiwgMHhEMCwgMHgwRiwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMSwgMHg1MCwKKzB4NDQsIDB4ODMsIDB4NTAsIDB4MEQsIDB4NDgsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDAyLCAweEQ4LCAweDBDLCAweDQwLAorMHgzMywgMHgwOCwgMHg0QywgMHgwMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHgwRCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MTAsIDB4NTEsIDB4NEMsCisweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDkwLAorMHgwNiwgMHgwMCwgMHhGMywgMHg0MCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NEMsIDB4MDAsIDB4MzIsIDB4MDEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MEUsCisweEM0LCAweDM3LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweDYwLCAweDMwLCAweEFGLCAweEMwLCAweDA3LCAweEMwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgyMCwgMHhGRiwgMHgwMCwKKzB4RUMsIDB4MDAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMyLCAweDJGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEUwLCAweDNGLCAweDAwLCAweDNGLAorMHg0MCwgMHg3QywgMHgxMCwgMHhFMCwgMHg2RCwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4M0YsIDB4MEIsIDB4RkYsIDB4MkMsIDB4RkMsIDB4MEEsIDB4RDAsIDB4OEYsCisweEMwLCAweDRDLCAweDAwLCAweDNGLCAweDQ5LCAweEVDLCAweDkzLCAweDMwLCAweDRGLCAweEMwLCAweDBGLCAweDEwLCAweDMzLAorMHgwMCwgMHhGQywgMHgyNCwgMHhCMCwgMHg0RiwgMHhDMCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMCwgMHg4QywgMHgwMywgMHhCMSwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDEwLCAweEJGLCAweDAxLCAweEZELCAweDA4LCAweDc0LCAweDhBLCAweEQwLCAweDZGLCAweDQ0LCAweDY0LCAweDAwLCAweDE5LAorMHgwMCwgMHhGNCwgMHgwRiwgMHg1MSwgMHhBRiwgMHg0MCwgMHgyNywgMHgxMiwgMHgxMSwgMHg0MSwgMHg3NCwgMHgxMiwgMHgxMCwKKzB4OUYsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RjEsIDB4NDIsIDB4NDQsIDB4ODcsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEE4LCAweEIzLCAweDAxLCAweENELAorMHgwMCwgMHgzNiwgMHgxQSwgMHhEMCwgMHgyQywgMHg1MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHg0NCwgMHgyNCwgMHgwQiwgMHgxMSwKKzB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODAsIDB4NzQsIDB4OTAsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzUsIDB4MDAsCisweEMxLCAweDAyLCAweDA0LCAweDA3LCAweDkwLCAweDAwLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4RTQsIDB4MDAsIDB4MTksIDB4MDEsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NjAsIDB4MDcsIDB4MDAsCisweDMxLCAweDAxLCAweDc0LCAweDBFLCAweDEwLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDg3LAorMHgwMCwgMHgxMSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4OEMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QzQsIDB4MzAsCisweDlGLCAweDAxLCAweDZDLCAweDAzLCAweDM0LCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDEyLCAweDA1LCAweDNDLCAweDBFLAorMHhCMSwgMHgwQywgMHhDMCwgMHg2MCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHg4MCwgMHhCMCwgMHgxOSwgMHhDMCwgMHgyMywKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYyLCAweDBFLCAweDQwLCAweDJGLCAweDA4LCAweDNELCAweDQwLCAweEZDLCAweDAzLAorMHhCMCwgMHgwRiwgMHhDMCwgMHg2QiwgMHhEMSwgMHhCRiwgMHg0MCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwRiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4RUYsIDB4MTAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDM1LCAweDA4LCAweERGLCAweDA1LCAweDdDLCAweDEwLAorMHg3MCwgMHgwRCwgMHhDNiwgMHgyNSwgMHgwMCwgMHg5RiwgMHhDMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDksIDB4MUYsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MDYsIDB4MDEsIDB4RDcsIDB4MDAsIDB4MEMsCisweDAxLCAweDMwLCAweDA5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgzQywgMHgyMCwgMHhGRCwgMHg0MiwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwRiwgMHg1MCwgMHg2NCwKKzB4MDAsIDB4MUQsIDB4ODAsIDB4RjAsIDB4MTMsIDB4RDAsIDB4QUYsIDB4NDAsIDB4QjcsIDB4MDEsIDB4OUQsIDB4MjMsIDB4NzQsCisweDAyLCAweEQwLCAweDNGLCAweDQwLCAweEE3LCAweDgwLCAweEYxLCAweDAxLCAweDU0LCAweDAxLCAweDE0LCAweDA5LCAweDQxLAorMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MkMsIDB4NTAsIDB4MEMsIDB4NDgsIDB4MDAsIDB4MDIsIDB4MDksIDB4NDAsIDB4MzAsCisweDAzLCAweEQwLCAweDFDLCAweDQwLCAweDEzLCAweDAwLCAweDBELCAweDBCLCAweDM0LCAweDAwLCAweDkwLCAweDNDLCAweDRDLAorMHhBMiwgMHgwOCwgMHhDRCwgMHg0MSwgMHgwNCwgMHgwMywgMHg1MSwgMHgwOCwgMHg0MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDA1LCAweEQxLCAweDFDLCAweDQwLCAweEM4LCAweDAwLCAweDJELCAweDAxLCAweEI2LCAweDBGLCAweEQwLCAweDFFLCAweDQxLAorMHg3QiwgMHgwMiwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3RiwgMHgwMCwgMHhFMSwgMHg0MSwKKzB4RDQsIDB4MkYsIDB4NTAsIDB4MTYsIDB4NjAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAyLCAweDMwLCAweDA4LCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDhDLCAweEMwLAorMHgwMSwgMHgwMCwgMHg4RiwgMHg4QSwgMHgzRSwgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHgxMywgMHgwMCwgMHg0RiwgMHgwMCwKKzB4M0MsIDB4ODAsIDB4RjEsIDB4MEMsIDB4QzEsIDB4MzIsIDB4MDAsIDB4RDcsIDB4MTAsIDB4MEMsIDB4MjMsIDB4NzAsIDB4NEMsCisweEMwLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LAorMHgzRCwgMHgyNCwgMHhGRiwgMHgwMCwgMHhGOCwgMHgwMywgMHhGMCwgMHgwRiwgMHg4MCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgyOCwKKzB4RkMsIDB4NjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4ODAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEYsCisweEU5LCAweDNCLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEI0LCAweDBELCAweEUwLCAweDBCLCAweDYwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHhGNywgMHgwNCwgMHhENywgMHgwMiwKKzB4N0MsIDB4MDUsIDB4MzAsIDB4Q0QsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MTMsIDB4RjEsIDB4Q0QsCisweEQwLCAweDA0LCAweDQwLCAweEQzLCAweDAxLCAweDRELCAweDAwLCAweEYwLCAweDZELCAweEMwLCAweDI3LCAweDgwLCAweEQ3LAorMHgwMiwgMHg3QywgMHgwMywgMHgzNCwgMHgxOCwgMHhDNCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4MzAsIDB4MDAsIDB4RTEsIDB4NTYsIDB4QjQsIDB4MDMsIDB4QjAsIDB4OEUsCisweDQ0LCAweDJCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDMzLCAweEQwLCAweDBGLCAweDQxLCAweDJDLCAweDAwLCAweEUxLAorMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHg0RSwgMHg0MSwgMHgzQiwgMHg4MCwgMHhFRCwgMHgwRSwgMHhCNCwgMHgwMywgMHhCMCwKKzB4MDYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAwLCAweDc4LCAweDAxLCAweEVELCAweDAxLCAweDM2LCAweDA1LCAweDEwLCAweDVFLCAweDQwLCAweDdCLCAweDE4LCAweEFELAorMHgwMSwgMHhBNCwgMHgxNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhDMSwgMHgwMSwgMHhBNCwgMHgwNiwgMHhEMCwKKzB4MUUsIDB4NDAsIDB4NUIsIDB4MDQsIDB4RUQsIDB4MjUsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLCAweEM5LAorMHgwMCwgMHgzNCwgMHg0MywgMHg5OCwgMHgwQywgMHg0MCwgMHgzMywgMHgyMiwgMHhDRCwgMHgwQSwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4QjIsIDB4MDMsIDB4QzEsIDB4MEEsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDEsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDZDLCAweDQwLCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHgxNywgMHgxMCwgMHg1RiwgMHgwMCwgMHhGQywgMHg4MSwgMHgzMCwKKzB4MDUsIDB4RTAsIDB4NUIsIDB4MDAsIDB4N0IsIDB4NjEsIDB4M0MsIDB4MDEsIDB4RjIsIDB4MDUsIDB4QzAsIDB4REUsIDB4MDAsCisweDczLCAweDAxLCAweEVDLCAweDA1LCAweEYwLCAweDA1LCAweENBLCAweDFCLCAweDAwLCAweDVGLCAweDAwLCAweEZDLCAweDAxLAorMHgzMCwgMHgwNywgMHhENCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTcsIDB4MDAsIDB4NzgsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzYsIDB4NDcsIDB4MDgsCisweDFGLCAweDEwLCAweDdDLCAweDAwLCAweEYwLCAweDIwLCAweEM4LCAweDAxLCAweDAwLCAweDFGLCAweDA0LCAweDVDLCAweDI0LAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwgMHhGMSwgMHgyMSwgMHhDMCwgMHg0QiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsCisweDhGLCAweDAxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDlCLCAweDIwLCAweDRDLCAweDgyLAorMHhCMCwgMHgxOSwgMHg4MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhFNSwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAzLCAweDQ1LCAweDhFLAorMHhEMCwgMHgwOSwgMHg0MCwgMHhFNywgMHgxMCwgMHg4MCwgMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHg0OSwgMHg1MCwgMHgyNCwKKzB4MDIsIDB4OTEsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MDAsIDB4OTEsIDB4MEIsIDB4MzQsCisweDAyLCAweDE0LCAweDI5LCAweDQ0LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgxOCwgMHg1NCwgMHgyQiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTgsIDB4MjAsIDB4NDQsIDB4NTIsIDB4OTIsIDB4NDksIDB4NDgsIDB4MjUsIDB4MDgsIDB4OTUsIDB4MzgsIDB4MzQsCisweDAyLCAweDAwLCAweDA5LCAweDQyLCAweDI3LCAweDQwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDFDLCAweDJELCAweDQwLAorMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwKKzB4MDAsIDB4ODksIDB4MTQsIDB4MTQsIDB4NTIsIDB4RDEsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OTEsIDB4NDgsIDB4MDAsCisweDAyLCAweDAwLCAweDA4LCAweDYwLCAweDIxLCAweDAwLCAweDg1LCAweDA0LCAweDM2LCAweDIyLCAweDE0LCAweDA4LCAweDQwLAorMHgyMywgMHgwMCwgMHhDMSwgMHgxNCwgMHgzNCwgMHg1NiwgMHgxMCwgMHg0OCwgMHg0MSwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDUsIDB4MUYsIDB4MDQsIDB4NUMsCisweDEwLCAweEYwLCAweDYxLCAweEMxLCAweDE3LCAweDAwLCAweDFBLCAweDAyLCAweDRDLCAweDUwLCAweEIwLCAweEUxLCAweEMxLAorMHg4NSwgMHg0NywgMHgxNywgMHgwMSwgMHg3QywgMHgwOCwgMHgyMCwgMHg0MSwgMHhDMSwgMHgxNSwgMHgwMCwgMHgxMywgMHgwRSwKKzB4N0MsIDB4MTAsIDB4MzAsIDB4NDEsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDA1LCAweDlGLCAweDE0LCAweEVDLCAweDUyLCAweEYwLCAweDQ5LCAweEMyLAorMHgyRiwgMHgxMCwgMHhCRiwgMHg0NCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMiwgMHg2RSwgMHgwMCwgMHhCQiwgMHgwOCwKKzB4RkMsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4OUYsIDB4ODEsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MEIsCisweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDAwLAorMHhBNywgMHgxMCwgMHhCRiwgMHgwNiwgMHhDQywgMHg0NiwgMHgxMCwgMHgyOSwgMHhDMCwgMHgyRCwgMHgwMCwgMHg5RiwgMHg4MiwKKzB4REMsIDB4MTIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDUsIDB4QjMsIDB4MDAsIDB4N0MsIDB4ODIsIDB4MzAsIDB4NEIsCisweEMxLCAweDJGLCAweDAwLCAweEIzLCAweDAwLCAweEJDLCAweDkzLCAweDMwLCAweDBCLCAweEMwLCAweDc3LCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4NywgMHgwMCwgMHgxMSwgMHgwQSwKKzB4NDUsIDB4MEMsIDB4QjAsIDB4RTAsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MTcsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4QTEsCisweDQwLCAweDg0LCAweDA4LCAweDExLCAweDAwLCAweDc0LCAweDUwLCAweDEwLCAweDIxLCAweDQwLCAweDE3LCAweDAwLCAweDExLAorMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0NCwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4QTEsIDB4MDEsIDB4ODUsIDB4MDQsIDB4MDQsIDB4NTIsIDB4NTgsIDB4NDgsCisweDQwLCAweDIzLCAweDAwLCAweDg5LCAweDAwLCAweDE0LCAweDBCLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDg1LAorMHg4MCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MiwgMHgyNSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4QSwgMHgxMCwKKzB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDI4LCAweDI1LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQxLCAweDA5LCAweDQwLCAweDI3LCAweDBDLCAweDk1LAorMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHgxMCwgMHgyNCwgMHgxNCwgMHg5NCwgMHgwNCwgMHg3NCwgMHgwQSwgMHgxNCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MTgsIDB4NDksIDB4NDAsIDB4NjMsIDB4MjgsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEEyLCAweDI3LCAweDEwLCAweDk3LAorMHgwMCwgMHg0OCwgMHgxQSwgMHg3MCwgMHgwOSwgMHhFMCwgMHhBNSwgMHgwMCwgMHg5RiwgMHg5MywgMHg1NCwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzQsIDB4RTQsIDB4NDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzMsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsCisweDkxLCAweDAwLCAweDdDLCAweDA2LCAweDM0LCAweDQ5LCAweDQyLCAweDE3LCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyMCwgMHgwMCwgMHg5RiwgMHg5MCwgMHg3QywgMHgxMiwgMHhCMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4MDksIDB4OTcsIDB4MjEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjMsIDB4MTEsCisweDlCLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQxLCAweDlGLCAweDIwLCAweDdDLCAweDA2LAorMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDgsIDB4RjIsIDB4MDEsIDB4QzAsIDB4ODYsIDB4MTQsCisweDFGLCAweDAyLCAweDRDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDg2LCAweDAzLCAweDFGLCAweDI4LCAweDdDLCAweDAwLAorMHhGMCwgMHgxMSwgMHhDNCwgMHgwNCwgMHgwMSwgMHgxMywgMHgxMCwgMHg3QywgMHg0MCwgMHgzMCwgMHgyMSwgMHhDMCwgMHg1MCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MTQsIDB4MDAsCisweDdELCAweDg1LCAweEM0LCAweDgxLCAweEQwLCAweDA1LCAweDU4LCAweERDLCAweDAwLCAweDVDLCAweDAwLCAweEVDLCAweDAxLAorMHhEMCwgMHgyNywgMHg0MSwgMHgxRiwgMHgxMCwgMHg3RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNywgMHg0MCwgMHhEOCwKKzB4NDAsIDB4NzMsIDB4MDIsIDB4QjQsIDB4MDksIDB4MTUsIDB4MDcsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDAwLCAweERELCAweDAzLCAweDc0LCAweDMzLAorMHhEMCwgMHgwQywgMHg0MCwgMHg3MSwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwQiwgMHhEMCwgMHgyQywgMHg0MSwgMHhCMiwKKzB4MDAsIDB4Q0MsIDB4MDQsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsCisweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywgMHhEMSwgMHg5RSwgMHg0MCwgMHg5OSwKKzB4MjgsIDB4RkQsIDB4MDgsIDB4QTAsIDB4MDMsIDB4REEsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjYsCisweDEzLCAweEQwLCAweDFFLCAweDUwLCAweDNDLCAweDA0LCAweEE5LCAweDAwLCAweEY0LCAweDAzLCAweDkwLCAweDFDLCAweDQxLAorMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwKKzB4MTAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjEsIDB4NUUsIDB4QzEsIDB4NkIsIDB4MDAsIDB4RkUsIDB4MTEsIDB4OEMsCisweDA2LCAweEMwLCAweDEyLCAweEMwLCAweDZBLCAweDAwLCAweEVGLCAweDIxLCAweEJDLCAweDQ3LCAweEYwLCAweDFDLCAweEUyLAorMHg1OCwgMHgwMCwgMHhBMywgMHgwMSwgMHhCQywgMHgwNywgMHhCMCwgMHgxRSwgMHhEMCwgMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4QjUsIDB4MDUsIDB4NUYsIDB4MDAsIDB4NkMsCisweDAxLCAweEYxLCAweDJELCAweEMwLCAweDA2LCAweDAwLCAweERGLCAweDA2LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgyNywgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgyQiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxMywgMHgwMCwgMHgxNywgMHg0MCwKKzB4N0MsIDB4MDMsIDB4NzQsIDB4MEQsIDB4RDAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDdELCAweDA0LCAweDczLCAweDAxLCAweENELCAweDI3LCAweDMwLCAweDFGLCAweEMyLAorMHg3RiwgMHgwMiwgMHhGNywgMHgwMSwgMHhDQywgMHgwNSwgMHhCNCwgMHg5RiwgMHhDOCwgMHg1RiwgMHg5MiwgMHg2RiwgMHgwOSwKKzB4REMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NTgsIDB4NDAsIDB4QjMsIDB4MDksIDB4Q0MsIDB4QTUsIDB4MzAsIDB4MUYsCisweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDA4LAorMHgzOSwgMHhBMCwgMHg2MSwgMHgwMCwgMHhBQywgMHgwMywgMHgxMCwgMHg0RSwgMHg0OCwgMHgyQiwgMHg4MiwgMHhFMSwgMHgwMCwKKzB4ODQsIDB4MDgsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RUQsIDB4MDgsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDYsCisweDUwLCAweDE4LCAweDAyLCAweEExLCAweDAwLCAweDg1LCAweDMzLCAweEIwLCAweDBBLCAweEM4LCAweDU2LCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhDMSwgMHgwOCwKKzB4OTQsIDB4NDMsIDB4MTgsIDB4MEUsIDB4NjAsIDB4MkYsIDB4ODQsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDYsCisweDA4LCAweDFCLCAweDAwLCAweDJELCAweDAwLCAweDk0LCAweDQzLCAweEQwLCAweDhFLCAweDQwLCAweDBFLCAweDAwLCAweDgxLAorMHg4MCwgMHhDNCwgMHgwMSwgMHgxOCwgMHgwRSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDIsIDB4MTgsIDB4MEQsCisweDQ0LCAweDYzLCAweDAwLCAweEM1LCAweDAyLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQ0LCAweDgzLCAweDAwLCAweDhELAorMHgwMiwgMHgwNCwgMHg0RiwgMHhEMCwgMHgwNCwgMHg0MCwgMHhDMiwgMHgwMiwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHg5MCwKKzB4QTgsIDB4NDAsIDB4MEEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEE4LCAweDNELCAweDAwLCAweDkzLCAweDAwLCAweDU0LCAweDI4LCAweDMwLCAweDBGLCAweEMwLCAweDY3LCAweDAwLCAweEY3LAorMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNiwgMHhEQywgMHgwRiwgMHhGMCwKKzB4MEMsIDB4NDAsIDB4NjIsIDB4MDgsIDB4OTEsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MTEsIDB4M0QsIDB4QzgsIDB4NTQsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDM3LCAweDAwLCAweDlGLAorMHgwMiwgMHg2NCwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHg4NywgMHgyOCwgMHhEQSwgMHgxMSwgMHg3QywgMHgwQSwgMHg3MCwKKzB4MDksIDB4QzAsIDB4ODcsIDB4MTAsIDB4REYsIDB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzQsIDB4MDUsIDB4MDQsCisweDlGLCAweEMwLCAweDZDLCAweDAzLCAweEYwLCAweDJELCAweEMyLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgzRiwgMHgwMCwgMHhCMywgMHg4MCwgMHg3QywgMHgwMCwgMHgzMSwKKzB4MEYsIDB4RTAsIDB4MEMsIDB4MDQsIDB4RjcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MkYsIDB4MDQsCisweDM3LCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDBDLCAweDQwLCAweEIyLCAweDAwLCAweEZDLCAweDAyLAorMHg3MCwgMHgwNSwgMHhDMSwgMHgwNSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MEQsIDB4NDgsIDB4NDQsIDB4MDEsCisweERELCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDExLCAweDQwLCAweDQ3LCAweDAwLCAweDRELCAweDAwLCAweDZDLCAweDAzLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwNywgMHg3NCwgMHgwMiwgMHgxMCwgMHg0NCwgMHg0MiwgMHg4NCwKKzB4MDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsCisweDExLCAweDAxLCAweDc0LCAweDA0LCAweDEwLCAweDBELCAweDQwLCAweDY0LCAweDE4LCAweERELCAweDAwLCAweDc0LCAweDA2LAorMHhEMCwgMHgxQiwgMHg2MCwgMHhDRiwgMHgwMCwgMHgxRCwgMHg1OCwgMHg0NCwgMHgwMywgMHhEMCwgMHgxRCwgMHg3MCwgMHhDNCwKKzB4MDAsIDB4MzUsIDB4ODEsIDB4NzQsIDB4MjEsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweDAxLCAweDAwLCAweDI0LCAweDAyLAorMHgxMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMiwKKzB4MjAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NjQsCisweDgzLCAweDE0LCAweDA4LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgxMCwgMHgzQSwgMHgwOCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwRiwgMHg0MCwgMHgwNCwKKzB4MTAsIDB4RTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4NjAsIDB4Q0MsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA0LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDcxLCAweDA1LCAweEMwLAorMHgwNSwgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgzOCwgMHgzRiwKKzB4MjAsIDB4QkYsIDB4ODAsIDB4RkUsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDgzLCAweEYwLCAweDAzLCAweEM4LAorMHgwRiwgMHgwMCwgMHgzQiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMiwgMHgxNywgMHg2MiwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4N0YsIDB4MDIsIDB4RkIsIDB4MDksIDB4QUMsCisweDA3LCAweEIwLCAweDFGLCAweEMwLCAweDdBLCAweDAwLCAweEZELCAweDIxLCAweEVDLCAweDA3LCAweEIwLCAweDFGLCAweEMwLAorMHg3QSwgMHgwOCwgMHhGQiwgMHg4OSwgMHhDQywgMHgwNywgMHhGMiwgMHgxRiwgMHhDMCwgMHg3RCwgMHgxMiwgMHhGQiwgMHgwOSwKKzB4RUMsIDB4ODcsIDB4MzMsIDB4MUUsIDB4RDIsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA3LCAweDAxLCAweDExLCAweDA0LCAweDQ0LCAweDA0LCAweDMwLCAweDExLCAweDQwLAorMHg0NCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg0NywgMHg0NCwgMHgwMCwgMHgwRCwgMHgwMCwKKzB4NDQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MDUsIDB4MzksIDB4MTEsIDB4MjQsIDB4NDQsIDB4MTAsIDB4QjIsIDB4MTEsCisweDQ0LCAweDBDLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgzNSwgMHgxOCwgMHhEOSwgMHg2MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhEOSwgMHhBMCwKKzB4NjQsIDB4NTMsIDB4OTIsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTAsIDB4MEMsCisweDQwLCAweDM2LCAweDAwLCAweERELCAweDA0LCAweDM0LCAweDQzLCAweDE5LCAweDBDLCAweDQwLCAweDRDLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwgMHgwNywgMHgwOCwgMHgxMSwgMHgwMCwKKzB4NDQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQwLCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA1LCAweDE4LCAweDE1LAorMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzIsIDB4MjAsIDB4Q0IsIDB4MjAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDM2LCAweDgwLCAweENGLCAweDAwLCAweDJDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweERCLAorMHgwMCwgMHg0QywgMHgwMywgMHhCMCwgMHgwQywgMHg4MCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMiwKKzB4MEMsIDB4QzgsIDB4MjAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDg4LCAweDBELCAweDAwLCAweDNGLCAweDgwLCAweEY4LCAweDQwLCAweDMwLCAweDAzLCAweEMzLCAweDBELCAweDgwLCAweDNFLAorMHgwMCwgMHhGOCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRSwgMHgwOCwgMHgzRCwgMHgwMCwgMHhGOCwgMHgwMCwgMHhCMCwKKzB4MDMsIDB4ODIsIDB4MEYsIDB4MDAsIDB4M0IsIDB4MzAsIDB4RTgsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDM1LCAweDAwLCAweEQ3LAorMHgwMCwgMHg2QywgMHgwMywgMHg3MSwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzYsIDB4MDQsIDB4REYsIDB4MDAsIDB4NUMsIDB4OTMsIDB4MzEsIDB4MEQsIDB4QzEsIDB4MzQsIDB4MDIsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMxLCAweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg4NCwgMHgwNiwgMHgxMSwgMHg0MCwgMHgzNCwgMHg0QywgMHgxMCwKKzB4MjAsIDB4NDEsIDB4ODMsIDB4MjQsIDB4MTAsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4QjAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAyLCAweDAwLCAweDA0LCAweDBDLCAweDEwLCAweDMxLCAweDQyLCAweDAzLCAweDAwLCAweDBDLCAweDAzLCAweDcwLCAweDgwLAorMHgxMCwgMHgyMSwgMHg0MCwgMHg2QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4MjAsIDB4NzAsIDB4MTAsIDB4QzUsIDB4ODAsIDB4MjQsIDB4MDcsIDB4NDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDEsCisweEM1LCAweDAwLCAweDI0LCAweDQ3LCAweDUwLCAweEFDLCAweDQwLCAweDMxLCAweDA4LCAweEM0LCAweDAwLCAweDE0LCAweDBCLAorMHgxNCwgMHgzQywgMHgwMCwgMHgzMCwgMHgwNCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5OCwgMHgyQywgMHg0MCwgMHgwRiwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4MDIsIDB4NEMsIDB4MEEsCisweDIxLCAweDA5LCAweEY0LCAweDA0LCAweDEwLCAweDEyLCAweDQwLCAweDRGLCAweDAwLCAweDI1LCAweDM3LCAweEY2LCAweDA0LAorMHgxMiwgMHgxMiwgMHg2MCwgMHg0OSwgMHgwMiwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MSwgMHg0QiwKKzB4MDIsIDB4MkQsIDB4MTEsIDB4QjQsIDB4MjQsIDB4ODAsIDB4MTIsIDB4NDIsIDB4M0UsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDAwLCAweEM3LCAweDAwLCAweDJDLCAweDIzLAorMHg1MSwgMHg4QywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwOCwgMHgzQywgMHg0MywgMHg3MCwgMHgwQywgMHhDNCwgMHgzMSwKKzB4MDYsIDB4QzcsIDB4MDAsIDB4MUMsIDB4NDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBDLCAweEU0LCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgzOCwgMHgwOSwgMHgyMCwgMHgzRiwgMHgwMCwgMHhGMCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMiwgMHgwRiwKKzB4MDAsIDB4M0IsIDB4MkMsIDB4QkMsIDB4MjAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEMsIDB4MDIsIDB4M0YsIDB4MDAsIDB4QkMsCisweDIwLCAweEY4LCAweDgzLCAweEMwLCAweDBGLCAweDAwLCAweDFGLCAweDAwLCAweEZDLCAweDAwLCAweDcxLCAweDExLCAweEM4LAorMHgwOSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHg3NywKKzB4MDAsIDB4QzMsIDB4NDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzMsIDB4MDAsIDB4QzcsIDB4MDEsIDB4NkMsCisweDA3LCAweDM2LCAweDBELCAweEM0LCAweDcwLCAweDAwLCAweERCLCAweDQwLCAweDZDLCAweDAzLCAweEYwLCAweDBDLCAweEQwLAorMHgzNCwgMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MEQsIDB4MDgsIDB4MkIsIDB4MDAsIDB4ODQsCisweDAwLCAweEQyLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDIxLCAweDYwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQyLAorMHgwOCwgMHgwMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHg5MCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4QjQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4NEYsIDB4NjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweEY5LCAweDAxLCAweEE2LCAweDA3LCAweEQ5LCAweDFFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhGNSwgMHgwMSwgMHhBNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgxMCwgMHhFOSwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NjAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4RDQsIDB4MDcsIDB4OTAsIDB4MUUsCisweDYwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLAorMHgwMywgMHgwMCwgMHgxOSwgMHgwMCwgMHgwNiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MiwgMHgwMywgMHgwMCwgMHgwNSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4MDAsCisweDYwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDVCLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHgxNSwgMHgwMCwgMHg1QiwgMHg4MCwKKzB4MkMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTcsIDB4NDAsIDB4NkMsIDB4MDEsIDB4MzAsIDB4MDUsCisweENBLCAweDE0LCAweDEwLCAweDVCLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDEwLCAweDAwLCAweDUzLAorMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4OEQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDgsIDB4RTAsIDB4MDMsCisweEMwLCAweDBGLCAweDIwLCAweDM5LCAweDIwLCAweEZDLCAweDA4LCAweEYwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDNGLAorMHg0MCwgMHhFNCwgMHg4MCwgMHhDMiwgMHgwMywgMHhDMCwgMHg4RiwgMHgwMCwgMHgzQiwgMHgyMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzAsIDB4NEIsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDIyLCAweDMwLCAweDQ5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLAorMHhDMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHg4MCwgMHhFNSwgMHgwOCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHg3MCwKKzB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4MDEsIDB4N0MsIDB4MTYsIDB4MzAsIDB4MDksIDB4ODAsIDB4NDEsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEU0LCAweDIzLCAweDlELAorMHgwMCwgMHg0NSwgMHgwQSwgMHgxMCwgMHgxOCwgMHg4MCwgMHgyNiwgMHgwMCwgMHg5QywgMHgxMSwgMHg3MCwgMHgwNiwgMHhEMCwKKzB4MjgsIDB4NDAsIDB4NjQsIDB4MDQsIDB4OEQsIDB4ODAsIDB4MDQsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4NjQsIDB4MDMsCisweDkxLCAweDAyLCAweDc0LCAweDBFLCAweDEwLCAweDE4LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg4MCwgMHhCRCwgMHg4MCwgMHhDNCwgMHgwMiwgMHg1MCwKKzB4MEIsIDB4NDAsIDB4MkMsIDB4MDEsIDB4QkMsIDB4MDgsIDB4RjAsIDB4MjIsIDB4RDIsIDB4MEIsIDB4NDEsIDB4MkQsIDB4MDAsCisweEJELCAweDAwLCAweEQ0LCAweDAyLCAweDQyLCAweDBCLCAweDQwLCAweDJDLCAweDAwLCAweEI1LCAweDBBLCAweEY0LCAweEMyLAorMHgwMCwgMHg0QiwgMHg0MCwgMHg3MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4MjksIDB4MDAsIDB4QUQsIDB4MDAsIDB4RDQsIDB4MDMsIDB4NTQsIDB4MUIsIDB4NDAsIDB4NkEsIDB4MjAsCisweEFDLCAweEEwLCAweEIwLCAweEEzLCAweEQxLCAweDhCLCAweDQwLCAweDI5LCAweDAwLCAweEJELCAweDY4LCAweEM0LCAweDAyLAorMHg1MSwgMHgwQiwgMHg0MCwgMHgyOCwgMHgwMiwgMHhBMSwgMHgwOCwgMHhCMCwgMHgyMiwgMHgxMSwgMHgwQiwgMHg0NCwgMHg1MSwKKzB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDcsIDB4MDgsCisweDFGLCAweDgwLCAweDRDLCAweDAwLCAweDc0LCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDM4LCAweDA4LAorMHhGMCwgMHgyMCwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgyMiwgMHg1QywgMHgwMCwgMHg3MiwgMHgwMSwgMHhEMCwgMHg4MCwKKzB4MDAsIDB4MTcsIDB4MDIsIDB4NzgsIDB4MDgsIDB4MzQsIDB4MDMsIDB4QzAsIDB4NzUsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDA1LCAweDlGLCAweDE0LCAweDZDLCAweDAyLAorMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0OSwgMHg4MCwgMHgyNiwKKzB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDQsIDB4M0MsCisweDEyLCAweEY0LCAweDA5LCAweEMwLCAweDY2LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxRCwgMHhBOCwgMHhBRiwgMHgwMCwgMHg5RiwgMHgwMiwgMHhGNCwgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyQiwKKzB4MDAsIDB4QkYsIDB4ODAsIDB4Q0MsIDB4ODIsIDB4RjAsIDB4MEIsIDB4RDAsIDB4MkMsIDB4MDAsIDB4OEIsIDB4ODIsIDB4OEMsCisweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJFLCAweDAwLCAweEFGLCAweDAwLCAweENELCAweDBBLCAweEIwLCAweDBBLCAweEMwLAorMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxMCwgMHg0NywKKzB4MDEsIDB4MEQsIDB4MDUsIDB4NzQsIDB4MDAsIDB4QjAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MUQsIDB4MDAsIDB4NkMsCisweDEwLCAweEQwLCAweDQxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDU0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLAorMHgwMCwgMHgwMSwgMHgxRCwgMHgwMCwgMHg0NSwgMHgxMCwgMHgxMCwgMHgwMSwgMHg0MiwgMHg3MCwgMHg2MCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTIsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDA4LCAweDlELCAweEEwLCAweDA0LCAweDQyLCAweEQwLCAweDA4LCAweDQxLAorMHgyNCwgMHgwMCwgMHg4OSwgMHgwMCwgMHg2NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMiwgMHgwNCwgMHg4RCwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NTAsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDEwLCAweDlELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEMsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LAorMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjAsIDB4MDAsIDB4OUIsIDB4MDAsIDB4MkMsIDB4MDIsIDB4QjAsIDB4MDgsCisweEMwLCAweDI2LCAweDAwLCAweDlFLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDE0LCAweDI4LCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjgsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDU4LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDEsIDB4MUYsIDB4MDAsIDB4NEQsIDB4MTAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDA0LCAweDE3LCAweDQwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LAorMHgwMCwgMHg1QywgMHg0MCwgMHgzMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg1QywgMHg5MCwgMHgzNCwKKzB4MDEsIDB4QzAsIDB4NDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweERDLCAweDAxLCAweDVELCAweDAwLCAweEM0LCAweDA1LCAweEQwLCAweDg3LCAweDQ4LCAweDVGLCAweDA0LCAweDcxLAorMHgwNywgMHhGNCwgMHgwMSwgMHgxMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwMiwgMHg1MSwgMHgwMCwgMHhDMCwgMHgxMSwgMHgxMCwKKzB4QjcsIDB4NDAsIDB4NUYsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MDYsIDB4NDAsIDB4NTAsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEIyLCAweDA4LCAweENELAorMHgwMCwgMHgxNCwgMHgwQSwgMHhEOCwgMHgyQywgMHg0MCwgMHhCMywgMHgwMCwgMHhENCwgMHgxMSwgMHgzNCwgMHgwNywgMHgxMCwKKzB4MUQsIDB4NDAsIDB4QTMsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MEUsIDB4MTQsIDB4MUMsIDB4NDAsIDB4NjMsIDB4MDAsCisweEM0LCAweDA1LCAweDE0LCAweDJCLCAweDE0LCAweDI0LCAweDQwLCAweDUxLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwOCwgMHhEMSwKKzB4MEUsIDB4NDAsIDB4N0YsIDB4MDAsIDB4NjEsIDB4ODAsIDB4QjAsIDB4MEYsIDB4MTAsIDB4MEUsIDB4NEQsIDB4MkYsIDB4MDAsCisweEYxLCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDZCLCAweDA0LCAweEY1LCAweDMwLCAweDg0LCAweDAzLAorMHgxNCwgMHgwNywgMHg0MCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MTgsIDB4NTksIDB4MDAsIDB4RUYsIDB4MDksIDB4OUMsIDB4MDUsIDB4RjEsIDB4MUEsIDB4QzAsIDB4NEIsIDB4MDAsCisweEU3LCAweDQxLCAweEZDLCAweDA3LCAweDM0LCAweDE2LCAweEMwLCAweDdCLCAweDAwLCAweEU3LCAweDc3LCAweDlDLCAweDA2LAorMHgzMCwgMHgxRSwgMHhDMiwgMHg3QiwgMHgwMCwgMHg2NywgMHhFMSwgMHhEQywgMHgwNiwgMHgzMCwgMHgxNiwgMHg4MCwgMHg0NSwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAwLCAweEYyLCAweDAxLCAweEM0LCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLAorMHhFMCwgMHgwNSwgMHhDMCwgMHgzMywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDNCwgMHgxNywKKzB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzgsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDdGLCAweDIyLCAweEZGLCAweDExLCAweEY4LCAweDA0LAorMHhGMCwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhBRiwgMHgwMSwgMHhEQywgMHg4NiwgMHgzMCwgMHg5RiwgMHhDOCwgMHg2QiwKKzB4MDAsIDB4RkIsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUIsIDB4RTQsIDB4NkYsIDB4MDAsIDB4QjMsIDB4MDksIDB4QzQsCisweDA3LCAweDMwLCAweDE2LCAweEM4LCAweDBBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCQywgMHg0MCwgMHhEOCwgMHg4QSwgMHg0MCwgMHgyQiwKKzB4MDEsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MjIsIDB4MTAsIDB4OEEsIDB4NDIsIDB4MkIsIDB4MDAsIDB4RTEsIDB4MDgsIDB4ODQsCisweDQyLCAweEQwLCAweDAyLCAweDQwLCAweDJCLCAweDAxLCAweEJCLCAweDBDLCAweEM0LCAweDEzLCAweEIwLCAweDBFLCAweDQwLAorMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMiwgMHgxOSwKKzB4MzAsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEEsIDB4NDgsIDB4MEIsIDB4ODAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDAzLCAweDk0LCAweDg2LCAweDQ0LCAweDNGLCAweDA0LCAweEU5LCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDhBLCAweDQxLAorMHgyQiwgMHgyNCwgMHgyMSwgMHg0MCwgMHhENSwgMHgwMCwgMHgxMSwgMHgwNywgMHg0MCwgMHgyMiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4ODMsIDB4MDAsIDB4Q0QsIDB4MDksIDB4MzYsCisweDg1LCAweEQwLCAweEEwLCAweDQwLCAweEUzLCAweDg0LCAweENELCAweDBDLCAweDc0LCAweDA4LCAweDkwLCAweDAxLCAweDQwLAorMHhEMywgMHgwMCwgMHhEMSwgMHg1MiwgMHgwNCwgMHgwNiwgMHhEMCwgMHgwMCwgMHg0OCwgMHhEMywgMHg4MCwgMHgwOSwgMHgwMywKKzB4MTQsIDB4MjgsIDB4OTAsIDB4QUMsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEEwLCAweEU1LCAweDJDLCAweEZGLCAweDBCLCAweDdDLCAweDJDLCAweEYwLCAweDMwLCAweEMwLAorMHg2NywgMHgwMSwgMHhERiwgMHgwMiwgMHg3QywgMHgxOSwgMHhCMCwgMHhEOSwgMHhDMCwgMHhBNywgMHgwMiwgMHhGQiwgMHg4NywKKzB4NEYsIDB4MDIsIDB4RTAsIDB4MkMsIDB4MDAsIDB4MDcsIDB4MDIsIDB4RDMsIDB4MTEsIDB4NUQsIDB4MEQsIDB4MzEsIDB4OTUsCisweEMwLCAweDU2LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LAorMHhBNywgMHgwMCwgMHhERSwgMHg2MCwgMHg1QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMiwKKzB4NDAsIDB4MDEsIDB4NzAsIDB4MjUsIDB4QzAsIDB4MjcsIDB4MjAsIDB4REYsIDB4ODAsIDB4N0MsIDB4Q0EsIDB4RjAsIDB4MDksCisweEM5LCAweDA3LCAweDAwLCAweERGLCAweDUyLCAweDY4LCAweDQxLCAweEYwLCAweDA1LCAweEMwLCAweEE3LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgyRiwgMHgxNCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDEsIDB4RjgsIDB4MDMsIDB4QzEsIDB4MEUsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4NDMsIDB4MzAsIDB4OEIsCisweEMwLCAweDZDLCAweDIwLCAweEZGLCAweDAwLCAweENELCAweDA2LCAweEYwLCAweDhGLCAweEM4LCAweDNDLCAweDAwLCAweDc3LAorMHgwNSwgMHhGQywgMHgwNywgMHgzNCwgMHgwMywgMHhDMCwgMHgxNSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MjAsIDB4NjYsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDgsIDB4RDgsIDB4MzEsCisweDQwLCAweDY0LCAweDAwLCAweDhELCAweDA1LCAweDQ0LCAweDA4LCAweDUwLCAweDA1LCAweDQwLCAweDM0LCAweDAwLCAweERFLAorMHgwMCwgMHg0NCwgMHg2MiwgMHhEMCwgMHgxOSwgMHg0NCwgMHg5MCwgMHgwMCwgMHg5MSwgMHgwNCwgMHg3NCwgMHg0QiwgMHgzMCwKKzB4MDAsIDB4NDAsIDB4MTQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDQ2LCAweDAwLCAweERELCAweDgwLCAweDc0LCAweDAwLCAweEQwLCAweDE5LCAweDAwLCAweDQ2LCAweDAwLCAweDFELAorMHgwOCwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwOSwgMHg0MSwgMHgyNSwgMHgwMiwgMHhEOSwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwKKzB4MDksIDB4NDAsIDB4ODQsIDB4MzAsIDB4OTUsIDB4MDAsIDB4MzAsIDB4MjAsIDB4MDIsIDB4NDUsIDB4NDAsIDB4MDUsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwOCwgMHg0NCwgMHg0MCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg1MCwKKzB4MDAsIDB4NTAsIDB4MjAsIDB4MTAsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4RDAsIDB4MDEsIDB4MTAsIDB4MDQsIDB4ODgsCisweDQxLCAweDAwLCAweDM0LCAweDAwLCAweDExLCAweDBDLCAweDQwLCAweDQwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxOSwgMHgwNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhEMCwKKzB4MDksIDB4QzAsIDB4MDYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MTAsCisweEVELCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDIwLCAweDIwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLAorMHgzNCwgMHgwMSwgMHhDMCwgMHgwNSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QjgsIDB4MkQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM0LCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLAorMHhGMSwgMHgwMywgMHhFMCwgMHgxRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwQiwgMHhEMCwgMHgxNywKKzB4MjQsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MkYsIDB4MDQsCisweEZGLCAweDAxLCAweEVDLCAweDUyLCAweEQwLCAweDFGLCAweEMwLCAweDNFLCAweDIxLCAweDJGLCAweDAxLCAweEZDLCAweDEzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwgMHg4QiwgMHgyMSwgMHhDRSwgMHgyMywgMHhCMCwgMHg2RiwgMHhDMCwgMHhCQywKKzB4MDksIDB4M0YsIDB4MDQsIDB4Q0MsIDB4OTMsIDB4MzMsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDg3LCAweDEwLCAweERELCAweDAwLCAweDc0LCAweDBFLAorMHhEOCwgMHgxRCwgMHg0MCwgMHg3RiwgMHgwQSwgMHg5RCwgMHgwMSwgMHhGNCwgMHgyRiwgMHgxMCwgMHgyRiwgMHg0NCwgMHg1NywKKzB4MTAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MzMsIDB4MTAsIDB4MkYsIDB4NDAsIDB4QkMsIDB4MDEsIDB4NUQsIDB4MDksIDB4QzQsCisweERCLCAweDEwLCAweDAxLCAweDQwLCAweDBGLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgwMywgMHgwNSwgMHhDRCwgMHg1NCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTgsIDB4MkMsIDB4NDAsIDB4MTQsIDB4MDAsIDB4REQsIDB4MDAsIDB4MTUsCisweDEzLCAweEQwLCAweDZDLCAweDQwLCAweEIxLCAweDA4LCAweDhELCAweDAwLCAweDU0LCAweDIzLCAweDEwLCAweDAwLCAweDQwLAorMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg0NSwKKzB4MDAsIDB4REQsIDB4MDQsIDB4NzQsIDB4ODQsIDB4RDEsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzQsCisweDAzLCAweDEwLCAweDBELCAweDQwLCAweDE3LCAweDAwLCAweDk1LCAweDAwLCAweDY0LCAweDAzLCAweDUwLCAweDBELCAweDRBLAorMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg1NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4NjcsIDB4MDAsIDB4REYsIDB4MjAsIDB4NkMsCisweDE0LCAweEQwLCAweDBELCAweEMwLCAweDM2LCAweDAwLCAweDVGLCAweEU4LCAweDdDLCAweDAzLCAweDMxLCAweDBELCAweEMwLAorMHg0MiwgMHgwMCwgMHg4QiwgMHg0MCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgxMCwgMHg0RSwgMHg1MiwKKzB4MUMsIDB4MDMsIDB4MTQsIDB4MTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBGLCAweDgwLCAweDA1LCAweDAwLCAweEZGLCAweDQxLCAweEZDLCAweDAyLCAweEYyLCAweDJGLCAweEMxLAorMHgzRiwgMHgwQywgMHg3RiwgMHgwMSwgMHhCMCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHg0RiwgMHgwMiwgMHhCOCwgMHg0MCwKKzB4RDgsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RkYsIDB4MDMsIDB4RUMsIDB4MjMsIDB4RjQsIDB4MDMsCisweDQwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LAorMHg2NSwgMHgwMSwgMHhEMywgMHgwMCwgMHg3QywgMHgwQywgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHg1QiwgMHgwMCwKKzB4NEMsIDB4NDMsIDB4RjAsIDB4OEQsIDB4QzAsIDB4OTcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NUMsIDB4MDMsIDB4RjEsIDB4MEQsCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDQzLCAweEYwLCAweDg5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgwNCwgMHgwMCwgMHhEMSwgMHgwQiwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4M0QsIDB4NDAsIDB4QkYsIDB4MjQsIDB4NTEsIDB4MEEsIDB4QzQsIDB4MUIsIDB4RDAsIDB4QkYsCisweDQwLCAweDE3LCAweDA2LCAweDlDLCAweDAwLCAweEM0LCAweDAzLCAweEQwLCAweDBGLCAweDA0LCAweDNDLCAweDEwLCAweERDLAorMHgwMSwgMHg0MCwgMHgwQiwgMHgxMCwgMHhCOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4QTAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MUMsCisweDQwLCAweDMzLCAweDAwLCAweDA5LCAweDBCLCAweDM0LCAweDAzLCAweEQwLCAweDFDLCAweDYwLCAweDgzLCAweDA4LCAweDg4LAorMHgwMSwgMHg1NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg0RCwgMHgxMywgMHgxMCwgMHgyRiwgMHg1MCwKKzB4MDgsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsCisweDAwLCAweDc4LCAweDQwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQ5LCAweDdCLCAweDAwLCAweEI1LAorMHgwOSwgMHhBNCwgMHg4NywgMHhEMCwgMHg1RSwgMHg0MCwgMHg0QiwgMHgwOSwgMHhBRCwgMHgyNSwgMHg4MCwgMHgwNywgMHhEMCwKKzB4MUMsIDB4NDAsIDB4NzgsIDB4MDAsIDB4Q0QsIDB4MjEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MTIsIDB4NDAsIDB4M0YsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDEwLCAweDAyLCAweEMzLAorMHgxOCwgMHgzQywgMHgyMywgMHhGOCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMSwgMHg4QiwgMHgwOCwgMHgyQywgMHgwMywgMHhGMCwKKzB4NUMsIDB4ODAsIDB4NDMsIDB4MDEsIDB4Q0YsIDB4MDUsIDB4MUMsIDB4MDMsIDB4RjAsIDB4NEMsIDB4QzAsIDB4MzEsIDB4MDAsCisweDRGLCAweDEwLCAweDVDLCAweDM3LCAweDcwLCAweDBDLCAweEMwLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgyMywgMHhGMCwKKzB4MEYsIDB4QzgsIDB4M0IsIDB4MDAsIDB4RkIsIDB4NjgsIDB4REMsIDB4MjMsIDB4RjAsIDB4MkYsIDB4QzEsIDB4MEYsIDB4MjAsCisweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDA4LCAweDdDLCAweEFCLAorMHg1MiwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzgsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDQsCisweDFGLCAweDAwLCAweDRDLCAweDYzLCAweEYwLCAweDRELCAweEM4LCAweDA2LCAweDA4LCAweDkzLCAweDAwLCAweDdDLCAweDAzLAorMHhGMSwgMHhGRCwgMHhDMCwgMHhCNiwgMHgwMSwgMHg1RiwgMHgwMSwgMHg2QywgMHgwQSwgMHgzMCwgMHgwRCwgMHhDMCwgMHg0MCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTAsIDB4MzksIDB4MDAsCisweEVELCAweDgwLCAweEI0LCAweDAzLCAweEMxLCAweDBFLCAweEMwLCAweDM5LCAweDAxLCAweEVELCAweDAwLCAweDg0LCAweDAzLAorMHhEMSwgMHg0RSwgMHg0MiwgMHgwQSwgMHgwMCwgMHhBNSwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMSwgMHgwRSwgMHg0MSwgMHgzOCwKKzB4MEQsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTIsIDB4MDYsIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDI4LCAweEVELCAweDIxLCAweEIwLCAweDA3LAorMHhEOSwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMywgMHhBRCwgMHgwMSwgMHhBNCwgMHgxNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg0QSwKKzB4MDgsIDB4RTEsIDB4MjEsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUMsIDB4NDAsIDB4N0EsIDB4MDIsIDB4N0QsIDB4MDEsIDB4QTQsCisweDA2LCAweDEwLCAweDFDLCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwMCwgMHgzNywgMHgwNCwgMHg5RCwgMHg0MSwgMHgzNCwgMHg0NywgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMSwKKzB4MDAsIDB4Q0QsIDB4MDgsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NjIsIDB4ODAsIDB4ODUsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAzLCAweDA0LCAweDAyLCAweDEwLCAweDJELCAweDQwLAorMHg1QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHg5RiwKKzB4MDAsIDB4NUQsIDB4MDEsIDB4RkUsIDB4MUQsIDB4RjAsIDB4MTUsIDB4RTEsIDB4MTYsIDB4MDAsIDB4NkYsIDB4MDMsIDB4NkYsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDVBLCAweDA0LCAweDUzLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxNiwgMHgwMCwgMHg3RiwgMHgxMCwgMHg2QywgMHg0NSwgMHgzMCwgMHg0NywgMHhDMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0UsCisweDAwLCAweEYwLCAweDAxLCAweEEwLCAweDA3LCAweDAwLCAweDFGLCAweDA0LCAweDVFLCAweDAwLCAweEYwLCAweDIwLCAweDA4LAorMHgwNywgMHgwMSwgMHgxRiwgMHg4MCwgMHg3QywgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgwMywgMHgyMCwgMHgxRCwgMHgyNCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4RDgsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLCAweDkzLCAweEMxLCAweDJDLCAweDgyLCAweEUxLCAweDE5LCAweEMwLAorMHgyNSwgMHgwOSwgMHg5RiwgMHgwMCwgMHg0QywgMHg5MiwgMHhEMCwgMHgxOSwgMHhDMCwgMHg2NCwgMHgxMCwgMHg5MywgMHgwOCwKKzB4M0MsIDB4MDIsIDB4NDAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OTMsIDB4ODAsIDB4N0MsIDB4MDIsIDB4NzUsIDB4MDksCisweEMxLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAorMHg2NiwgMHgwMCwgMHg5MSwgMHg4MSwgMHg0QywgMHgwMiwgMHgxMCwgMHg5OCwgMHgwMCwgMHhBNSwgMHgwMCwgMHg5RCwgMHgxOCwKKzB4NDUsIDB4MEEsIDB4RDAsIDB4QTksIDB4NTAsIDB4MjQsIDB4MDMsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTMsIDB4MDksCisweDQ0LCAweDI3LCAweDAwLCAweDkxLCAweDFCLCAweDM0LCAweDA2LCAweDEyLCAweDY5LCAweDUwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgzNCwgMHg4MiwgMHg5OSwgMHgwOCwKKzB4NjQsIDB4MDYsIDB4MTAsIDB4MDksIDB4MDAsIDB4QTQsIDB4MDAsIDB4OTksIDB4MDAsIDB4NTQsIDB4NDIsIDB4RDIsIDB4MDksCisweDQ1LCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLAorMHgwMCwgMHg3NCwgMHgxMiwgMHg1MSwgMHgwRCwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4MzAsIDB4MTUsIDB4QzEsIDB4MDAsIDB4MDQsIDB4NTIsIDB4MTIsIDB4MTksCisweDQyLCAweDIxLCAweDgwLCAweDhELCAweDQwLCAweDA2LCAweDgyLCAweEQwLCAweDA4LCAweDQwLCAweDI0LCAweDAwLCAweDg1LAorMHgwMCwgMHgzNCwgMHgyMiwgMHg1MCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMiwgMHg4MSwgMHgwMCwgMHg3MCwgMHhEMiwgMHgxMCwKKzB4NDgsIDB4NDEsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweDM4LCAweDA3LCAweDAxLCAweDFCLCAweDAwLCAweDZDLCAweDEwLCAweDcwLCAweDAxLCAweEMwLCAweDA1LCAweDA1LCAweDFCLAorMHg0MCwgMHg0OCwgMHhEMCwgMHhGMCwgMHhFMSwgMHhDMSwgMHgwNCwgMHgwMCwgMHg1MywgMHgwQSwgMHg3QywgMHg1OCwgMHg3MSwKKzB4NjEsIDB4QzEsIDB4ODcsIDB4MDUsIDB4MTMsIDB4MTQsIDB4MzgsIDB4MTEsIDB4NzAsIDB4NDEsIDB4QzAsIDB4NzQsIDB4RTAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDJELCAweDQ1LCAweEJGLAorMHgxNCwgMHhEQywgMHgwMiwgMHhCNCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhBQywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MTksIDB4QzAsIDB4MkIsIDB4MDgsIDB4QkYsIDB4MDEsIDB4N0MsIDB4MTIsIDB4QjEsIDB4NDksIDB4QzAsIDB4MjcsIDB4MTEsCisweEFGLCAweDAwLCAweEZDLCAweDUyLCAweEYwLCAweDRCLCAweEMxLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhCRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHg1MiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MkQsIDB4MDUsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsCisweEJGLCAweDgwLCAweDZDLCAweDAyLCAweDEwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLAorMHgzMiwgMHgwQiwgMHhEMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUIsIDB4QTQsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MDEsIDB4NDAsIDB4ODQsIDB4NDgsCisweDExLCAweDIwLCAweDQ0LCAweDAwLCAweEQyLCAweEExLCAweDQwLCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDQwLCAweDkwLAorMHgxMCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg2MCwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4QTEsIDB4MjEsCisweDgxLCAweDEwLCAweDMwLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweEQ1LCAweDAwLCAweDA0LCAweDBCLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHg4MCwgMHgzMCwgMHg0QSwgMHgxMSwgMHgyOCwgMHg0MSwgMHhBMiwKKzB4MDQsIDB4OEQsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4NDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDk5LCAweDA0LCAweDc0LCAweDAyLAorMHhEMCwgMHg0OSwgMHg0MCwgMHgyNiwgMHgwOCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhDMCwgMHgwOSwgMHg0MCwgMHgyNSwKKzB4MEQsIDB4OUQsIDB4ODAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDYsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NDQsCisweDAyLCAweDEwLCAweDBELCAweDQwLCAweDYwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHgyMCwgMHhFNSwgMHgwNiwgMHg5MywgMHg0MCwgMHg3OCwgMHgxQSwgMHhEMSwgMHgwOSwgMHhDMCwgMHgyNSwKKzB4MDAsIDB4OTcsIDB4MEYsIDB4NDUsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OEYsIDB4ODEsIDB4N0UsCisweDAyLCAweDM0LCAweDA5LCAweEQwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDQ5LCAweEMwLAorMHgxNSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4QzAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA1LCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNSwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMSwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MTAsIDB4NzgsCisweDA4LCAweEYwLCAweDAxLCAweEMxLCAweDAxLCAweDA0LCAweDFGLCAweDA0LCAweDdDLCAweDkwLCAweEIwLCAweDAxLCAweEMwLAorMHg4NCwgMHgwMCwgMHgxRiwgMHgxMCwgMHg0QywgMHgwMCwgMHhGMSwgMHgwMSwgMHhDMCwgMHgwNywgMHgxMCwgMHgwNywgMHgxMCwKKzB4M0MsIDB4MDQsIDB4MzAsIDB4MjEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweERDLCAweDAxLCAweDdELCAweDA3LCAweDc0LCAweDAxLCAweDEwLCAweDI2LCAweDQwLAorMHgxRiwgMHgxOSwgMHg2RCwgMHgwMCwgMHhGNCwgMHgwOSwgMHgxMCwgMHgwNywgMHg0MCwgMHhEQywgMHgwMiwgMHg3RCwgMHgwMywKKzB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NzEsIDB4NDUsIDB4RjQsIDB4NDEsIDB4MTEsIDB4MjcsCisweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHhGNiwgMHgwMSwgMHhDRCwgMHgwMywgMHgzNCwgMHgyMiwgMHg1OCwgMHgyQywgMHg0OCwgMHg3MywgMHgwMCwgMHhDQywgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MEEsIDB4MzIsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDMzLCAweDgwLCAweEM1LCAweDAwLCAweDM0LCAweDA0LCAweDkwLCAweEFELCAweDQwLCAweDQwLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwKKzB4QjQsIDB4MDcsIDB4NUEsIDB4MkEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjAsIDB4MDcsIDB4NTIsIDB4MEEsCisweDQwLCAweDk4LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDEzLCAweEQwLCAweDRFLCAweDQwLCAweDdCLCAweDgxLCAweEUxLAorMHgwMCwgMHhCNCwgMHgwMiwgMHg5MCwgMHgwNCwgMHg0NCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzksIDB4MDgsIDB4RUYsIDB4MDEsIDB4QkMsIDB4ODcsIDB4NzAsIDB4MUUsCisweEMwLCAweDVCLCAweDAwLCAweEVFLCAweDAxLCAweEJDLCAweDA2LCAweEYwLCAweDFGLCAweEMwLCAweDc4LCAweDAwLCAweEJGLAorMHgwMSwgMHg5QywgMHgwNywgMHhGMCwgMHhCRSwgMHhDNCwgMHg3RiwgMHgyMSwgMHhFNywgMHgwMSwgMHhGQywgMHgwNCwgMHhCMCwKKzB4MUUsIDB4RDAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEIyLCAweDM1LCAweDAwLCAweDVGLCAweDYwLCAweDNDLCAweDAzLCAweDM4LCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweERGLAorMHgwMCwgMHgzQywgMHgwMCwgMHhCMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgyQiwgMHhGMCwKKzB4NkQsIDB4QzgsIDB4QjcsIDB4MjAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4ODIsIDB4NzEsIDB4MDUsIDB4QzAsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDdELCAweDAyLCAweEZGLAorMHg4MSwgMHhDQywgMHgxNywgMHg3MSwgMHgxNywgMHhDMCwgMHg2RiwgMHgwMiwgMHhGRiwgMHg4MSwgMHhGQywgMHg4NSwgMHhGMCwKKzB4OUYsIDB4NDAsIDB4NzgsIDB4MDIsIDB4QjMsIDB4MjksIDB4RkUsIDB4MkYsIDB4QjAsIDB4MUYsIDB4RTAsIDB4RkYsIDB4MDQsCisweDczLCAweDA5LCAweEZDLCAweDI3LCAweEYxLCAweDVGLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgxOSwgMHgyNiwgMHg2RCwgMHgwOCwgMHhBQywgMHg4MywgMHhEMCwKKzB4MjIsIDB4NDAsIDB4OEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDgsIDB4RDAsIDB4MUEsIDB4NDAsIDB4OTgsIDB4MDAsCisweEExLCAweDAxLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweEMwLCAweDM5LCAweDAxLCAweEVCLCAweDAwLCAweDM0LCAweDA3LAorMHhEMCwgMHgwQSwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDgsIDB4MDgsIDB4MzksIDB4MTgsIDB4RkQsIDB4MDAsIDB4QTQsIDB4MTMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsCisweEVELCAweDEwLCAweEI0LCAweDIwLCAweEQwLCAweDBFLCAweDQwLCAweDJCLCAweDQwLCAweDIxLCAweDAwLCAweEI0LCAweDgzLAorMHg5MSwgMHgwRSwgMHg0MCwgMHgzOSwgMHgxMCwgMHg2MSwgMHgxMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHg0RSwgMHg0MCwgMHgyMywKKzB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MjEsIDB4MDAsCisweDFELCAweDAxLCAweDI2LCAweDA3LCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAzLCAweDM0LCAweDgwLAorMHhEMCwgMHgwMCwgMHg0MCwgMHhBMywgMHgwMCwgMHgwMSwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0OCwgMHgzMSwKKzB4ODAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4ODEsIDB4RDAsIDB4MjksIDB4NDAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDA0LCAweDAwLCAweDlGLCAweDAxLCAweDY0LCAweDBCLAorMHg3MSwgMHgwOSwgMHhDMCwgMHgyNywgMHg5MCwgMHgxRiwgMHgwMywgMHg3QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHgyNywKKzB4MjAsIDB4RDMsIDB4MTEsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4ODEsIDB4MDEsIDB4N0MsCisweDAxLCAweEQwLCAweDI5LCAweEMwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwRCwgMHgwMCwgMHg4NywgMHgwMSwgMHg5RiwgMHgwOCwgMHg3QywgMHgyMywgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4MUYsIDB4MzIsIDB4M0UsIDB4MEEsIDB4RjAsIDB4MDEsIDB4NDAsIDB4MTQsIDB4QTEsIDB4OUYsIDB4MDAsIDB4NzAsCisweDAzLCAweEQwLCAweDBELCAweEM4LCAweDM1LCAweDQwLCAweDlCLCAweDEwLCAweDc0LCAweDAxLCAweEUwLCAweDIxLCAweEMwLAorMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwOCwgMHgwQiwKKzB4MDAsIDB4QkIsIDB4MDAsIDB4OEMsIDB4NDMsIDB4QjAsIDB4MEIsIDB4QzQsIDB4MkIsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsCisweDAyLCAweDMyLCAweDAxLCAweEM0LCAweDJGLCAweDAxLCAweEJGLCAweDQwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEM0LAorMHgzQiwgMHgwMCwgMHgzNywgMHgwNSwgMHg5NCwgMHg4MSwgMHgzMywgMHgwMywgMHg4MSwgMHgwNCwgMHgyOCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4QzYsIDB4MjEsIDB4OTEsIDB4MDcsIDB4NDQsCisweDgzLCAweEIwLCAweDMxLCAweDQwLCAweEU3LCAweDAwLCAweEQxLCAweDA2LCAweDc0LCAweDA0LCAweDEwLCAweDMxLCAweDQ4LAorMHg3NywgMHgxMCwgMHg5QywgMHgwMSwgMHg3NCwgMHgwMywgMHg3MSwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMSwgMHgzMiwKKzB4NDQsIDB4MEIsIDB4MTAsIDB4MzEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDY0LCAweDAwLCAweDE5LCAweDAxLCAweDU0LCAweDA3LCAweDkwLCAweDE5LCAweDAwLAorMHg2NiwgMHgwMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwNiwgMHgxMCwgMHgxMywgMHg0MSwgMHgwNywgMHgwMCwgMHhCOSwgMHgwMSwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTQsIDB4NDcsIDB4NTAsIDB4MTksCisweDQwLCAweDA1LCAweDA4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgxNCwgMHgwMywgMHg5MCwgMHgwOCwgMHg2MiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4MTQsIDB4NDAsIDB4NDAsIDB4MTMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MEMsCisweDQwLCAweDMzLCAweDA4LCAweEMxLCAweDAwLCAweDE0LCAweDIwLCAweDEwLCAweDA4LCAweDQyLCAweDQxLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHgwOCwgMHg5QiwgMHgwMCwKKzB4NUUsIDB4MDMsIDB4QjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4RDEsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NDEsCisweEMwLCAweDA3LCAweDEwLCAweDFGLCAweDFDLCAweEVDLCAweDAzLCAweEYxLCAweDBGLCAweEU0LCAweDNCLCAweDAwLCAweDU3LAorMHgwMCwgMHg1QywgMHgxMiwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNSwgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4QTgsIDB4MkYsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4NzAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweEMxLCAweEMxLCAweDBGLCAweDA0LCAweDFGLAorMHgwNCwgMHhGQywgMHgwMywgMHg3MiwgMHgwRiwgMHhDNCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg2QywgMHgzMCwgMHhGMCwKKzB4MDMsIDB4QzQsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEEwLCAweDJELCAweDExLCAweEJGLCAweDAwLCAweEZDLCAweDEzLCAweEIyLCAweDkzLCAweEM4LCAweDNELCAweDExLCAweDEzLAorMHgwOCwgMHhEQywgMHgyMiwgMHgzMiwgMHg0RiwgMHhDOCwgMHgwRiwgMHgyMCwgMHg3QiwgMHg0MSwgMHhFQywgMHgwMywgMHhGMCwKKzB4MTcsIDB4QzAsIDB4M0MsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RUMsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzQsIDB4MEMsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQ3LCAweDAyLCAweDlDLAorMHg4QywgMHhGNCwgMHgyNywgMHgwNCwgMHgwOSwgMHg0QywgMHg3RCwgMHgyMiwgMHgxRCwgMHgwNCwgMHg3NCwgMHgxMiwgMHg1MCwKKzB4QUYsIDB4NDIsIDB4MDcsIDB4MDAsIDB4OTksIDB4ODEsIDB4NDQsIDB4MEIsIDB4RDAsIDB4MDksIDB4NDAsIDB4M0MsIDB4MTAsCisweDlELCAweDQwLCAweDQ0LCAweDAwLCAweDEwLCAweDExLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHgyMSwgMHgwOCwgMHgwRCwgMHg1MCwgMHgzNCwgMHgwMywgMHgxOCwKKzB4NTEsIDB4NDQsIDB4MzEsIDB4MDAsIDB4MEQsIDB4MjAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NjQsIDB4MDEsIDB4MDAsCisweDg5LCAweDAwLCAweDI0LCAweDBCLCAweEQwLCAweDAxLCAweDUwLCAweDMwLCAweDAwLCAweDlELCAweDAwLCAweDI0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHg0QywgMHg4MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTgsIDB4NDcsIDB4ODAsIDB4MUQsIDB4NTEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MzUsIDB4MDAsCisweDNELCAweDAyLCAweEY0LCAweDAyLCAweDUwLCAweDBELCAweDAwLCAweDRGLCAweDA4LCAweDg5LCAweDA4LCAweDQ0LCAweDAzLAorMHhEMiwgMHgxOSwgMHgwMCwgMHgzQywgMHgwMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0MiwgMHgwQywKKzB4QTAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NjcsIDB4MDAsCisweDlGLCAweDAzLCAweDdDLCAweDAzLCAweDMwLCAweDE4LCAweENDLCAweDM1LCAweDE4LCAweDFCLCAweDAxLCAweDVFLCAweDA2LAorMHgyMCwgMHgwRCwgMHhDMCwgMHhDNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg2QywgMHgwMywgMHhGMCwgMHgxQywgMHhDMCwgMHgzNCwKKzB4MjAsIDB4Q0YsIDB4MDEsIDB4NkMsIDB4ODQsIDB4MzAsIDB4MTEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDJELCAweDAwLCAweEJGLCAweDgwLCAweEJDLCAweDAzLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgzRSwgMHg4MCwgMHgxRCwgMHgwMywgMHhGQywgMHgyNiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjIsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAwLCAweEY0LCAweDA5LCAweEQwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgxOCwgMHg5MywgMHgwMSwgMHg3QywgMHhBMywgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NywKKzB4MDAsIDB4MUIsIDB4MDIsIDB4NEMsIDB4NDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAzLCAweDMwLCAweDA5LCAweDgwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMxLAorMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHg2NCwKKzB4MDQsIDB4OTEsIDB4MDIsIDB4RjQsIDB4MkYsIDB4RDAsIDB4MDEsIDB4NDAsIDB4QkYsIDB4MDAsIDB4MTEsIDB4ODAsIDB4NDUsCisweDQ3LCAweEQxLCAweDBGLCAweDQ0LCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLAorMHgzRiwgMHgwMCwgMHg1RCwgMHgwMCwgMHgzNCwgMHg0NCwgMHgxMCwgMHgzOCwgMHg1OCwgMHg2QywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MzAsIDB4MzYsCisweDBGLCAweEQ4LCAweDAwLCAweDQwLCAweDMzLCAweDAxLCAweDA5LCAweDAwLCAweDUwLCAweDBFLCAweEQwLCAweDlDLCAweDIyLAorMHg0MywgMHgwMiwgMHg0QywgMHg4MCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwNiwKKzB4MzQsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBGLCAweDAwLCAweDU4LCAweDAyLCAweEU5LCAweDgxLCAweEI0LCAweDA3LCAweEQwLCAweDFBLCAweDQwLAorMHg3QiwgMHgwMCwgMHgyMSwgMHgwOSwgMHg4NCwgMHgwNiwgMHhEMSwgMHg5RSwgMHg0MCwgMHg1QiwgMHgwMCwgMHhBRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4NDEsIDB4QjQsIDB4MDcsIDB4MTgsIDB4OUEsCisweDQwLCAweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDFBLAorMHgzMCwgMHgwMCwgMHg0QiwgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHg4MCwgMHhDMCwgMHgzMywgMHgwMCwgMHgwQiwgMHgwNSwKKzB4MEMsIDB4MDIsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NDMsIDB4MDEsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MjMsIDB4MzQsIDB4MDAsCisweDQwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAxLCAweDMwLCAweDA0LCAweEM4LCAweDQ4LCAweDY4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzMCwgMHgxOSwgMHgwMCwgMHhGMCwgMHg2MCwKKzB4RkMsIDB4NjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDIsIDB4RkYsIDB4MDgsIDB4RjAsIDB4MjMsIDB4RjAsIDB4MEYsCisweEM0LCAweDFGLCAweDAyLCAweEJGLCAweDAwLCAweEZDLCAweDgzLCAweEYwLCAweDBCLCAweEMwLCAweEJGLCAweDEwLCAweEZGLAorMHgwMCwgMHhCQywgMHgwMywgMHhGMSwgMHgwRCwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MTcsIDB4MTAsIDB4NTMsIDB4MDAsIDB4NzQsIDB4NUYsIDB4MzQsIDB4MDksCisweEMwLCAweDM3LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAyLCAweDMxLCAweDlELCAweDgwLCAweDc0LCAweDAwLCAweEQzLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHg4MiwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMiwgMHgzMCwKKzB4MTUsIDB4RDAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweDhBLCAweDM5LCAweDAwLCAweEUxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLCAweDBBLCAweDQwLCAweEJCLCAweDAzLCAweDhELAorMHg4MCwgMHg4NCwgMHgwMiwgMHgxMiwgMHg4QywgMHg0MiwgMHgzQywgMHgwOCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwKKzB4MEEsIDB4NDAsIDB4M0EsIDB4ODAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEMsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDQwLCAweDY5LAorMHgwMSwgMHhCNCwgMHgxNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHgxMSwgMHg5NCwgMHg0NiwgMHg5MCwKKzB4NUUsIDB4NDAsIDB4NjgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MzcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweDdELCAweDYxLCAweEE0LCAweDA3LCAweDE0LCAweDE0LCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHhCMywgMHgwMCwgMHhDOSwgMHgwMSwgMHgzNCwgMHgwMywgMHg1MCwKKzB4OEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4QzMsIDB4NTQsIDB4MDcsIDB4OTAsIDB4MEMsIDB4NTAsIDB4NzAsIDB4MDEsCisweDgxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDQ4LCAweDQwLCAweDM2LCAweDAwLCAweDRELCAweDA5LCAweDA0LCAweDAzLAorMHgxMCwgMHgxQywgMHg0MSwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTcsIDB4QTAsIDB4MUYsIDB4MjAsIDB4N0IsIDB4ODUsIDB4N0MsIDB4MDEsIDB4NzgsIDB4MTcsIDB4QzYsIDB4MTcsIDB4MDgsCisweDdGLCAweDAzLCAweDVDLCAweDA1LCAweEI2LCAweDA1LCAweEMwLCAweDVDLCAweDAxLCAweDczLCAweDAyLCAweDdDLCAweDAxLAorMHhCMCwgMHgzNywgMHhDMSwgMHgxNywgMHgwMCwgMHg3RiwgMHgwOSwgMHhBQywgMHgwMSwgMHgzMCwgMHg3NywgMHhDMCwgMHg1QywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MDUsIDB4MjQsCisweDE3LCAweDQ2LCAweDdDLCAweDAwLCAweEEwLCAweDAxLCAweEUwLCAweDgzLCAweDIwLCAweDFFLCAweEEwLCAweDZDLCAweDAwLAorMHg3MCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwKKzB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweEExLCAweDAwLCAweDkzLCAweDA4LCAweDdDLCAweDg2LAorMHhGMCwgMHgwOSwgMHhDMSwgMHgyNSwgMHgwOCwgMHg5MywgMHgxMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NDgsCisweDE2LCAweDMwLCAweDQ5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5NSwgMHgwMywgMHg3NCwgMHg2NiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MjAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEEsIDB4MTAsIDB4MzksIDB4NDQsIDB4QTcsIDB4MDIsIDB4OEQsIDB4MjAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDg1LCAweDQwLCAweDQ0LCAweDQyLCAweDEwLCAweDQ5LCAweDQwLAorMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgzNCwKKzB4MDAsIDB4OTEsIDB4ODIsIDB4NzQsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NTQsCisweDBBLCAweDEwLCAweDQ5LCAweDQ5LCAweEI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4QTUsIDB4ODUsIDB4MTQsIDB4MzQsCisweDgyLCAweEQwLCAweDg4LCAweDQwLCAweDMzLCAweDYwLCAweDgxLCAweDRDLCAweDA0LCAweDMyLCAweDE4LCAweDA4LCAweDQwLAorMHgyMywgMHgwMSwgMHg5RCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4NSwgMHgwMCwKKzB4MTQsIDB4RDIsIDB4MTAsIDB4NDgsIDB4NDEsIDB4NDMsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA3LCAweDAxLCAweDEzLCAweDI0LCAweDdDLCAweDUwLCAweEYwLCAweDIxLCAweEM0LAorMHgwNSwgMHgwNSwgMHgxMywgMHgwMywgMHgwOSwgMHgwQywgMHgzMCwgMHhFMSwgMHhDMSwgMHhDNywgMHgwMiwgMHgxRiwgMHgwMCwKKzB4NEQsIDB4NzgsIDB4RjAsIDB4QTEsIDB4QzgsIDB4QzcsIDB4MEEsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MTAsIDB4MzIsIDB4NDEsCisweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LAorMHgyQiwgMHgwMCwgMHhCRiwgMHgxNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwQywKKzB4RkMsIDB4MzIsIDB4RjQsIDB4MTksIDB4QzIsIDB4NkYsIDB4MDIsIDB4QkQsIDB4MDEsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MUIsCisweEMwLCAweDY3LCAweDAyLCAweEZGLCAweDE0LCAweEU0LCAweDUyLCAweEY0LCAweDBCLCAweEMwLCAweDc3LCAweDQwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHg3RiwgMHgwNCwgMHhCRiwgMHgwMiwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MkQsIDB4MjAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4NEIsCisweEMwLCAweDJDLCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEIzLAorMHgwMCwgMHhGQywgMHgwQSwgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NzQsIDB4MjgsIDB4RDAsIDB4MDAsCisweDQ4LCAweDg3LCAweDAyLCAweDFELCAweDA0LCAweDVDLCAweDEwLCAweDE0LCAweEExLCAweDUwLCAweDA0LCAweDAwLCAweDE1LAorMHgwMSwgMHg3NCwgMHgyOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxQiwgMHgwMCwgMHg3NCwgMHgxMCwgMHgxMCwKKzB4MDEsIDB4QzAsIDB4NjIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDIxLCAweDIwLCAweDhELCAweDg2LCAweDM0LCAweDAyLCAweEMwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELAorMHgxMCwgMHgzMCwgMHgxMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4MSwgMHgwMSwgMHgzNCwgMHgwMiwgMHgxNCwKKzB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4MDgsIDB4NDQsIDB4NDgsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweERELAorMHgwQSwgMHg3NCwgMHgwMiwgMHhDMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMiwgMHgxNCwgMHgyMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MzQsIDB4MDIsIDB4MTAsIDB4NDksIDB4NDQsIDB4MjUsIDB4MDAsCisweDk5LCAweDAwLCAweDM0LCAweDA2LCAweDE0LCAweDQ5LCAweDQwLCAweDYyLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwQSwgMHgyNSwgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhFMCwKKzB4MjksIDB4QzEsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDgsIDB4QzYsIDB4NjQsIDB4MDIsCisweEIzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDA2LAorMHgzMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTYsIDB4MDAsIDB4QTUsIDB4MjAsIDB4OUYsIDB4MjEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjcsIDB4MDQsCisweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMiwgMHgxOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOCwgMHhDMCwgMHg1QiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsCisweDFGLCAweDA0LCAweDZDLCAweDAwLCAweDcwLCAweDIxLCAweEMwLCAweDA0LCAweDAyLCAweDFGLCAweDAyLCAweDdDLCAweDAwLAorMHgzMSwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHg0MCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDgsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDQsIDB4MzAsIDB4QzEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweERDLCAweDBFLCAweDdELCAweDA2LCAweEY0LCAweDQxLAorMHgxMCwgMHgwNSwgMHg4MCwgMHg1RSwgMHgwMCwgMHg1RCwgMHg2MCwgMHhGNCwgMHg2RCwgMHgxMCwgMHgzNywgMHg0MCwgMHgxQywKKzB4MDAsIDB4NTEsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NzUsIDB4NDAsIDB4RjQsCisweDAxLCAweDEwLCAweDE3LCAweDQwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBMCwgMHhFMiwgMHgwMCwgMHhDRCwgMHg0MSwgMHgyNCwgMHgxNywgMHg4MCwgMHgwQywgMHg1OCwgMHhGMCwKKzB4MjAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MEYsIDB4OTAsIDB4MkMsIDB4NDEsIDB4NzQsIDB4MDQsIDB4QzEsIDB4MDAsIDB4MDQsCisweDAzLCAweEQxLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweDgxLCAweDEwLCAweDM0LCAweDAzLCAweDEwLCAweDJDLCAweDQwLAorMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OCwgMHgyOSwKKzB4ODAsIDB4RUQsIDB4ODAsIDB4QjQsIDB4MDcsIDB4OTQsIDB4REUsIDB4NDAsIDB4MjgsIDB4MjAsIDB4RUMsIDB4MDgsIDB4MzQsCisweDAzLCAweDkwLCAweDJDLCAweDUwLCAweDIwLCAweDA0LCAweEYxLCAweDQ1LCAweEE0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLAorMHgzQiwgMHgwMCwgMHgyNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMiwgMHgwQSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzksIDB4MDAsIDB4RUYsIDB4MDEsIDB4QUMsCisweDA1LCAweEIxLCAweDVFLCAweDQxLCAweDc4LCAweDAwLCAweEVGLCAweDA1LCAweEJDLCAweDA1LCAweEIwLCAweDFBLCAweEMwLAorMHg3OCwgMHgwMCwgMHhGMywgMHg0MywgMHg4QywgMHg1NywgMHhGMCwgMHgxRSwgMHhDMywgMHg3MywgMHgwMCwgMHhBMywgMHgwMSwKKzB4QkMsIDB4MDcsIDB4MzQsIDB4MTIsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM1LCAweDAwLCAweDVGLCAweDQwLCAweDNDLCAweDAwLCAweDMxLCAweDRELCAweEM4LAorMHgyNywgMHgwOCwgMHhERiwgMHgxMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwOSwgMHhDOCwgMHgzNywgMHg0MCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MTMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4QjcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjQsIDB4MDksCisweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLAorMHg2RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgwNiwgMHhGMCwgMHg5RiwgMHhDMCwgMHg1RiwgMHgwMiwgMHhGRiwgMHgwOSwKKzB4Q0MsIDB4MjcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4N0QsIDB4MDAsIDB4RUYsIDB4NDEsIDB4Q0MsIDB4ODcsIDB4NzAsIDB4MUYsCisweEMwLCAweEZDLCAweDAwLCAweEUzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEM4LCAweDFCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgyOSwgMHgyMCwgMHhGRCwgMHgwMCwKKzB4QUMsIDB4MUEsIDB4RDIsIDB4Q0UsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MEYsCisweEMwLCAweDIwLCAweDAxLCAweEVELCAweDI1LCAweEM0LCAweDA3LCAweDUwLCAweDBFLCAweEMxLCAweDNBLCAweDIwLCAweDZCLAorMHgwMCwgMHg5NCwgMHgwMywgMHhCMCwgMHgwQSwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDIsIDB4MEUsCisweDYwLCAweDBCLCAweDIwLCAweEVELCAweDAwLCAweDk2LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDFCLCAweDgwLCAweEZELAorMHgwNSwgMHhDNCwgMHgwMywgMHgxMSwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwgMHg0MywgMHgxMCwKKzB4MkUsIDB4NDAsIDB4MjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDI4LCAweEYxLCAweDA0LCAweDhELCAweDEzLCAweDM0LCAweDAyLCAweEQwLCAweDJELCAweDQwLCAweDIzLCAweDAwLCAweEM5LAorMHgwMywgMHg1NCwgMHgwNCwgMHhEMCwgMHgwMCwgMHg0MCwgMHhDMCwgMHgxMCwgMHhDRCwgMHgwNCwgMHgwNCwgMHgwMywgMHg1OCwKKzB4M0MsIDB4NDEsIDB4MzIsIDB4MDAsIDB4NTksIDB4MDAsIDB4MTQsIDB4MDcsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MEIsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDI1LCAweDEwLCAweDFGLAorMHgxMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgyRiwgMHhDMCwgMHgyNywgMHgwMCwgMHhGRiwgMHgwNSwgMHg1QywgMHg0NiwgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MDcsIDB4MDEsIDB4REYsIDB4MDcsIDB4Q0QsIDB4MDMsIDB4MzIsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDAsCisweDUzLCAweDAwLCAweDRDLCAweDA3LCAweDMwLCAweDI1LCAweEMwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMCwgMHg2NCwgMHgwOCwgMHhGMCwKKzB4Q0QsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4ODcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEUwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwMSwgMHhDMiwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODksIDB4MDksIDB4M0YsIDB4MTAsIDB4MkYsIDB4MDAsIDB4Q0MsIDB4ODAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDgsIDB4MDAsCisweEYzLCAweDEwLCAweEZDLCAweDIwLCAweDMwLCAweDAzLCAweEMwLCAweDBGLCAweDA0LCAweEZGLCAweDAwLCAweEJDLCAweDAzLAorMHgxMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgwMSwgMHg0QywgMHg2NSwgMHhGMCwgMHg5NywgMHhDMCwgMHgwNywKKzB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4QjYsIDB4MDAsCisweDFELCAweDIxLCAweDU0LCAweDA0LCAweEQwLCAweDBELCAweDQwLCAweEM0LCAweDAwLCAweEQxLCAweDQwLCAweDc0LCAweDAwLAorMHgxMCwgMHgyMSwgMHg0MCwgMHhDNiwgMHgwMSwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNSwKKzB4MDAsIDB4REQsIDB4MEIsIDB4NTQsIDB4MDAsIDB4RDAsIDB4MkQsIDB4NDQsIDB4ODcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI0LCAweDE0LCAweDFELCAweDAxLCAweDQ2LCAweDA2LAorMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgxMywgMHg0MSwgMHg0RiwKKzB4ODAsIDB4REQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4NTAsIDB4MEYsIDB4NDAsIDB4M0YsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NDQsCisweDAzLCAweDkwLCAweDI1LCAweDQwLCAweDA3LCAweDA4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMiwgMHgyMCwgMHgwMCwgMHg4RCwgMHg4MCwgMHgxNCwgMHgwMCwgMHhEOCwgMHgwQywgMHg0MCwgMHgyMCwKKzB4MDAsIDB4QzEsIDB4MjIsIDB4MzQsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MzQsCisweDEzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDA3LCAweEQwLCAweDAwLCAweDQwLAorMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCOCwgMHgwNiwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDQsIDB4MDAsIDB4RjEsIDB4MDIsIDB4NzQsCisweDEzLCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweEZGLCAweDEwLCAweEZDLCAweDUzLCAweDcwLCAweDBFLCAweEMwLAorMHgzQiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QjAsIDB4MUYsIDB4MDAsIDB4QkYsIDB4ODAsIDB4RjgsCisweDAwLCAweEYwLCAweDBGLCAweEMyLCAweDBGLCAweDAwLCAweEZGLCAweDIwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgwRSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMSwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LCAweEZDLCAweDAyLCAweDMwLCAweDRCLCAweEMxLAorMHgzRiwgMHgxMywgMHhGRiwgMHgwMCwgMHhDQywgMHgxMywgMHg3MCwgMHg4MywgMHhDMCwgMHgzQywgMHg0MCwgMHhGMywgMHgwMCwKKzB4QkMsIDB4MDYsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MkMsIDB4MTcsIDB4M0IsIDB4MEMsIDB4Q0MsIDB4MDAsIDB4QjAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LAorMHgzNywgMHgwMSwgMHhDRCwgMHgwNCwgMHg3NCwgMHhFQSwgMHgxMCwgMHg2OSwgMHhDOCwgMHhCRCwgMHgyMiwgMHhGRCwgMHhERSwKKzB4RDQsIDB4MkYsIDB4MTAsIDB4MDEsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDQsIDB4ODcsIDB4MTAsIDB4MUYsCisweDQwLCAweEE1LCAweDAxLCAweDExLCAweDBFLCAweDQ0LCAweDA4LCAweDEwLCAweDAxLCAweDQwLCAweDBGLCAweDYwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzMywgMHgwNCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4MDksIDB4Q0QsIDB4NDQsIDB4MTQsIDB4MDMsIDB4MTAsIDB4NTAsCisweDYwLCAweEIxLCAweDAwLCAweEM1LCAweDAyLCAweDE0LCAweDgyLCAweDkwLCAweDBELCAweDYwLCAweDM0LCAweDAxLCAweEM5LAorMHgwMCwgMHgwNCwgMHgwOCwgMHgxMiwgMHgwMCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDQsIDB4MzYsIDB4MEUsIDB4NTQsIDB4MTksCisweDQyLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDEyLCAweDQwLCAweDM1LCAweDAwLCAweEQ1LAorMHgyMCwgMHg1NSwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MCwgMHg1NSwgMHgwMCwgMHhDMSwgMHgxOCwgMHg0NSwgMHg2MywgMHgxMCwKKzB4MTEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEE4LCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDdDLCAweDA2LCAweDcwLCAweDMxLCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgxMSwgMHg0MCwgMHgzNSwgMHgwMCwgMHhENiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwKKzB4MEQsIDB4QzAsIDB4NjQsIDB4ODAsIDB4MUIsIDB4MDMsIDB4NEUsIDB4MDcsIDB4MzAsIDB4MTksIDB4QzAsIDB4MkIsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLCAweEZELCAweDIwLCAweEZGLAorMHg4MSwgMHg3RSwgMHgwMiwgMHhCMCwgMHgwMSwgMHhDNCwgMHgzRCwgMHgwMCwgMHhERiwgMHgwMCwgMHhCQywgMHg0MywgMHhCMCwKKzB4MEIsIDB4QzAsIDB4M0UsIDB4MTAsIDB4RkEsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDgwLCAweDdDLCAweDAxLCAweDcwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwOCwgMHgzOCwKKzB4MjEsIDB4QzAsIDB4MzQsIDB4MDgsIDB4RDcsIDB4QzAsIDB4NEMsIDB4MDMsIDB4NzAsIDB4MDEsIDB4RDEsIDB4MzAsIDB4MDAsCisweERGLCAweDg0LCAweDRELCAweDQyLCAweDMyLCAweDRELCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDEyLCAweDNDLCAweDAyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUIsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NkMsIDB4ODIsIDB4MTAsIDB4MTksIDB4NDEsIDB4M0MsIDB4MDAsCisweEYxLCAweDAwLCAweEM0LCAweDRCLCAweEQwLCAweDE5LCAweDQwLCAweDNDLCAweDAxLCAweEU3LCAweDAxLCAweDA0LCAweDQ2LAorMHgxMiwgMHgzRiwgMHhDMCwgMHgxMSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgxQiwgMHgxMCwgMHhCOSwgMHg0MSwgMHg0RiwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MzIsIDB4MDAsCisweENELCAweDAwLCAweDI0LCAweDAwLCAweDEwLCAweDU4LCAweDQwLCAweDMwLCAweDAwLCAweEQ1LCAweDAwLCAweDA0LCAweDBCLAorMHg1MCwgMHgyMCwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDOCwgMHgyQiwgMHgwNCwgMHgwQSwgMHgxMiwgMHgwRCwgMHg0NCwgMHgyMywKKzB4MTAsIDB4MDksIDB4MDgsIDB4MzQsIDB4NDAsIDB4OTAsIDB4MTgsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDA4LCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweEE0LCAweDA1LAorMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MSwgMHg3OCwKKzB4ODAsIDB4RTUsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDE1LCAweDkwLCAweDEyLCAweDQwLCAweDM3LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgxMCwgMHgzMiwgMHgwMCwgMHhDRSwgMHg0MCwgMHgyQywgMHgyMSwgMHgxMCwgMHg4NCwgMHhDMCwgMHgzNCwKKzB4MDIsIDB4QzcsIDB4MDgsIDB4MDYsIDB4MDMsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4NDAsIDB4MEMsCisweDAyLCAweDMwLCAweDBDLCAweEMxLCAweDIzLCAweDAwLCAweDBCLCAweDA0LCAweDNDLCAweDAyLCAweEIwLCAweDBDLCAweEMwLAorMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHgzRCwKKzB4MjAsIDB4RkYsIDB4ODAsIDB4REQsIDB4ODEsIDB4RjAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4RkUsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweEJELCAweDA0LCAweEVGLCAweDAwLCAweEZDLCAweDAzLCAweEY1LCAweDBGLCAweEMwLAorMHgxRiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgxMywgMHg3MiwgMHgwRiwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAxLCAweERGLCAweDA0LCAweDdDLCAweDEzLCAweEQxLCAweDExLCAweEQwLAorMHgzMCwgMHgwMSwgMHhEMywgMHgwOCwgMHg0QywgMHgwNiwgMHgzMCwgMHg1RCwgMHhDOCwgMHgyMCwgMHgwMCwgMHgxNywgMHgwMCwKKzB4NUMsIDB4MDAsIDB4QjQsIDB4MEQsIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweDg4LCAweDM4LCAweDEwLCAweEVELCAweDIwLCAweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHhCQiwgMHgwMywgMHhFRCwgMHgyOCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwQiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwKKzB4QUMsIDB4MDIsIDB4NTAsIDB4QUUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4NDAsIDB4QjQsIDB4MDEsIDB4MTAsIDB4MDYsCisweDQwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorMHg3OSwgMHg4MCwgMHhFRCwgMHg4MSwgMHg5NCwgMHgwNywgMHhEOCwgMHgxNiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwOSwKKzB4QjQsIDB4MjcsIDB4RDAsIDB4MTYsIDB4NDksIDB4NzgsIDB4MDEsIDB4RTEsIDB4MDUsIDB4OTQsIDB4MDYsIDB4OTAsIDB4NUUsCisweDU4LCAweDZDLCAweDQwLCAweDIxLCAweDAzLCAweDM0LCAweDA2LCAweDUwLCAweDFDLCAweDQwLCAweDEwLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgyMywgMHg4MCwgMHg4RCwgMHgwMCwKKzB4MzQsIDB4MDcsIDB4RDgsIDB4QUMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MkMsCisweDQwLCAweDMwLCAweDgwLCAweEMxLCAweDAwLCAweDM0LCAweDg2LCAweEQwLCAweDBDLCAweDQwLCAweDEwLCAweDAwLCAweEMxLAorMHgxMCwgMHg3NCwgMHgyRiwgMHg1MCwgMHgyRCwgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTcsIDB4MDEsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MEQsIDB4NzIsIDB4MTcsCisweENBLCAweDE3LCAweDA4LCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA3LCAweDQ4LCAweDE0LCAweDAwLCAweDQzLAorMHgwMCwgMHg1NCwgMHgwMSwgMHhCMCwgMHgwNSwgMHhDNCwgMHgxQywgMHgwMSwgMHg3MywgMHgwMywgMHhEQywgMHgyRCwgMHg3MCwKKzB4NDcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDA1LCAweDIwLCAweDFGLCAweDAwLCAweDdDLCAweDYwLCAweEY4LCAweDAxLCAweEMxLCAweDA3LCAweDAwLCAweDBGLAorMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHg0MSwgMHhDOCwgMHgwMywgMHg0MCwgMHgxRiwgMHgwMCwgMHg2NCwgMHgyMCwgMHg3MywKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MTksIDB4MDIsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MjEsIDB4RDAsIDB4NEIsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3OCwgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5QiwgMHgwMCwgMHg0QywgMHgwNiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjUsIDB4MDEsIDB4OTMsIDB4MDksIDB4NUMsIDB4MDIsIDB4RjAsIDB4OTksIDB4QzAsIDB4MjMsIDB4MDAsCisweDk3LCAweDI4LCAweDQ0LCAweDgyLCAweDMxLCAweDA5LCAweEMxLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MEUsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDAsCisweDkxLCAweDAzLCAweDQ0LCAweDAyLCAweEQwLCAweDM5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA3LCAweDQ0LCAweDBBLAorMHgxMCwgMHgyOSwgMHg1MSwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzAsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsCisweDlELCAweDAwLCAweDQ0LCAweDFBLCAweEQwLCAweDI5LCAweDAwLCAweDI3LCAweDQwLCAweDkxLCAweDAyLCAweDU0LCAweDAyLAorMHhEOCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwgMHg4NSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHg3MCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MjAsIDB4MDAsCisweDhELCAweDAwLCAweDM0LCAweDUyLCAweEQwLCAweDRDLCAweDQxLCAweDIzLCAweDAyLCAweDhELCAweDA4LCAweDA0LCAweDgyLAorMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgxNCwgMHgwNCwgMHgwMywgMHhEOSwgMHg0OCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MDgsIDB4MTQsIDB4ODIsIDB4MTQsIDB4NDgsIDB4NDEsIDB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDQwLCAweDdDLCAweDEwLAorMHhGMCwgMHg0MSwgMHhDMCwgMHg4NywgMHgwNSwgMHgxQiwgMHgxNiwgMHg0QywgMHg1MCwgMHhGMCwgMHgzMSwgMHhDMCwgMHgwNSwKKzB4MDUsIDB4MDMsIDB4MEUsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MTEsIDB4QzAsIDB4ODcsIDB4MDUsIDB4MTcsIDB4MTYsIDB4NUQsCisweDUxLCAweDMwLCAweDQxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgwRCwgMHhCRiwgMHgzNCwgMHhGQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHgyNywKKzB4MDEsIDB4OUYsIDB4MDQsIDB4N0QsIDB4ODIsIDB4RjAsIDB4Q0IsIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4QkMsCisweDAyLCAweEYwLCAweDg4LCAweEMwLCAweDJGLCAweDA0LCAweEJGLCAweDA0LCAweEVDLCAweDUyLCAweEY4LCAweDRCLCAweEMxLAorMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHhBNywKKzB4MDAsIDB4REYsIDB4MDIsIDB4NTQsIDB4MUUsIDB4RjAsIDB4MkIsIDB4QzAsIDB4MjUsIDB4MDEsIDB4OUYsIDB4NTQsIDB4RkMsCisweDEyLCAweDMwLCAweDhCLCAweEMwLCAweDJFLCAweDA1LCAweEIzLCAweDAxLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHhBNCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMiwgMHgwQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDMsIDB4MjAsIDB4MUQsIDB4MDEsIDB4NkUsCisweDA4LCAweDEwLCAweDg1LCAweDQwLCAweDAwLCAweDA1LCAweDBELCAweDA0LCAweDc0LCAweDgwLCAweDEwLCAweDAxLCAweDUwLAorMHg4NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg1NCwgMHgwMSwgMHgxRCwgMHg0MCwKKzB4NDQsIDB4MDAsIDB4QkEsIDB4MDUsIDB4QzAsIDB4NzIsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweEEwLCAweDIxLCAweDgxLCAweDlELCAweDAwLCAweDA0LCAweEIyLCAweDU4LCAweDQ4LCAweDQwLAorMHgyMSwgMHgwMiwgMHg4RCwgMHgxNCwgMHgzNCwgMHgwQSwgMHgxMiwgMHg0OCwgMHg0NCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgyMiwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NTAsIDB4MjEsIDB4MDEsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDgsCisweDQwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLAorMHgyNSwgMHg4MCwgMHg5RCwgMHgwMCwgMHg2NCwgMHg2MiwgMHg1OCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5QywgMHgwMCwKKzB4NzAsIDB4MDIsIDB4MDAsIDB4MEMsIDB4NjAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MEQsCisweDQwLCAweDI1LCAweDIyLCAweDlELCAweDgwLCAweDU0LCAweDJBLCAweDkwLCAweDA5LCAweDQwLCAweDYyLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHg2NywgMHgwMCwgMHg4RCwgMHg0MCwKKzB4NDQsIDB4MDYsIDB4NjgsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MTksCisweEM0LCAweDI2LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELAorMHgwRiwgMHg1QywgMHgwNiwgMHgzMCwgMHgyOSwgMHhDMCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjQsIDB4MDEsIDB4OUYsIDB4MDQsIDB4M0MsIDB4MDIsIDB4QjAsIDB4NTksCisweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweDdFLCAweDAyLCAweEY0LCAweDQ5LCAweEMwLCAweDIxLCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NiwgMHgwMCwgMHg5RiwgMHgxMSwgMHg2RCwgMHg0MiwgMHhGMiwKKzB4NDksIDB4QzEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDA1LCAweDQ4LCAweDFCLCAweDAwLCAweDdDLCAweDAwLCAweEI4LCAweDIxLCAweEMxLCAweDA3LCAweDAwLCAweDE3LAorMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg1QywgMHgyMCwgMHhGMCwKKzB4MTEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MDcsIDB4MjIsIDB4NEMsIDB4MDgsIDB4RTAsIDB4MjEsIDB4RDAsIDB4NDAsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDE0LCAweDAwLCAweDUxLAorMHgwMCwgMHg3NCwgMHgwMSwgMHhCOCwgMHgwNywgMHg0MCwgMHgxNywgMHgwMCwgMHg1MSwgMHgwMCwgMHhDNCwgMHgwOSwgMHhEMCwKKzB4MTcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NzMsIDB4ODEsIDB4QzQsIDB4MjksIDB4RDAsIDB4MDcsIDB4NDAsIDB4MTQsIDB4MDAsCisweDcxLCAweDAyLCAweEMwLCAweDQ1LCAweEQxLCAweDA3LCAweDQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDMSwgMHg4MCwgMHgzNCwgMHgwMywgMHg5MywKKzB4OEQsIDB4NDYsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MTcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjIsIDB4MzAsCisweDU5LCAweDhGLCAweDE0LCAweDAyLCAweEM4LCAweDFDLCAweDQwLCAweDMxLCAweDgwLCAweEM1LCAweDAzLCAweDQ1LCAweDBCLAorMHhEMCwgMHg4RCwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4ODgsIDB4NzgsIDB4MDksIDB4RTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDMsCisweEU0LCAweDBELCAweDkxLCAweDQzLCAweEQwLCAweDI4LCAweDQwLCAweDMwLCAweDAwLCAweDAxLCAweDAwLCAweEE0LCAweDAxLAorMHhEMSwgMHgwRSwgMHg0MSwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMiwgMHg4NCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgwNCwKKzB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzksIDB4MDQsCisweEUzLCAweDBELCAweEI0LCAweDBGLCAweDkwLCAweDFFLCAweEMwLCAweDdCLCAweDA0LCAweEU3LCAweDE1LCAweDlDLCAweDA3LAorMHhGMCwgMHgxNiwgMHhFMCwgMHg2QSwgMHgwMCwgMHgyQiwgMHgwMSwgMHg5QywgMHgwNCwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3RCwKKzB4MDAsIDB4NzcsIDB4MDEsIDB4OEQsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzQsIDB4NDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM1LCAweDIzLCAweEQ3LCAweDgwLCAweDdDLCAweDQzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMSwgMHhEQiwgMHgwNCwgMHg2QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMiwgMHgyNywKKzB4NDAsIDB4MUYsIDB4MjIsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MzcsIDB4MDgsIDB4NUYsIDB4MDAsIDB4N0MsCisweDAxLCAweEYyLCAweDA1LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMCwgMHg3RCwgMHgwMCwgMHhGMywgMHgxOSwgMHhGOCwgMHgyNywgMHg3OCwgMHg5RiwgMHhDMCwgMHg3RCwKKzB4MDAsIDB4RjMsIDB4MDEsIDB4QkMsIDB4MDYsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NkYsIDB4MDAsIDB4NjMsIDB4ODMsIDB4Q0MsCisweDA0LCAweEYwLCAweDE3LCAweEM0LCAweDc4LCAweDAwLCAweEIzLCAweDAxLCAweENFLCAweDI1LCAweDMwLCAweDFGLCAweEMwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwKKzB4MUEsIDB4RUIsIDB4MzgsIDB4QjQsIDB4MDMsIDB4NzAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsCisweDgwLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAxLCAweDY1LCAweDAwLCAweDg0LCAweDA4LCAweEQwLCAweDU2LCAweDQwLAorMHgzOSwgMHgwMCwgMHhBMSwgMHgwMiwgMHg4NCwgMHgyOCwgMHgxMCwgMHg2MiwgMHhDMCwgMHg1NiwgMHg2MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0QsIDB4MDQsIDB4RTEsIDB4ODgsIDB4QjQsCisweDAzLCAweEQ4LCAweDA2LCAweDQ1LCAweDMxLCAweDQwLCAweEU5LCAweDAwLCAweEI0LCAweDIzLCAweDkwLCAweDA2LCAweDQwLAorMHgyMywgMHg4MCwgMHhBOSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHg0QywgMHg0MCwgMHgzRSwgMHgwMCwgMHgwNSwgMHgwOCwKKzB4MDUsIDB4ODEsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDc1LCAweDAwLCAweEQ4LCAweDAwLCAweDc0LCAweDA3LCAweERBLCAweDE5LCAweDQxLAorMHgzMCwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMSwgMHg5MywgMHgyNSwgMHg0MCwgMHgyNywgMHgwMCwgMHgxRCwgMHgwMCwKKzB4MDQsIDB4MjAsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NzEsIDB4NDAsIDB4NDUsIDB4MDEsIDB4NDQsIDB4ODAsIDB4MTgsIDB4MjEsCisweDQwLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LAorMHg3RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgxMywgMHhGMCwgMHgwMSwgMHhDNCwgMHgzRCwgMHgwMCwgMHhGQiwgMHg4MCwKKzB4N0UsIDB4MDEsIDB4QjAsIDB4NUQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEQsIDB4ODQsIDB4RjAsIDB4MDksCisweEMwLCAweDdDLCAweDA0LCAweEQ1LCAweDEzLCAweDRDLCAweDNFLCAweDM2LCAweDI5LCAweEMwLCAweDU1LCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwgMHg0MCwKKzB4N0MsIDB4NDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4M0UsIDB4MDgsIDB4NzIsIDB4MDEsCisweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDM3LCAweDBDLCAweERBLAorMHgwNCwgMHg3QywgMHgwQSwgMHhGMCwgMHgyOSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0UsIDB4ODMsIDB4MzAsIDB4MDEsCisweEMwLCAweDM4LCAweDAwLCAweEYzLCAweDAwLCAweEZFLCAweDgzLCAweDMyLCAweDFGLCAweEMxLCAweDJDLCAweDEwLCAweDMzLAorMHgwMCwgMHhDQywgMHgxNCwgMHhGMCwgMHgwQiwgMHg4MCwgMHgzQiwgMHgwMCwgMHg2MywgMHgwOCwgMHhDQywgMHgwMiwgMHhGMCwKKzB4MDksIDB4RDEsIDB4MTAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsCisweDIwLCAweDM2LCAweDAwLCAweEQxLCAweDIwLCAweDQ0LCAweDAzLCAweDE4LCAweDExLCAweDQwLCAweDM1LCAweDAwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgxMiwgMHg1MCwgMHgyMSwgMHhDMCwgMHgyNiwgMHgwMCwgMHgxQiwgMHgyMywgMHg2QywgMHgwOSwgMHhEMCwKKzB4MjEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MTksIDB4NDAsIDB4MTQsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDEwLCAweEQxLAorMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwgMHg0MCwgMHhEMSwgMHgwMCwgMHg1NCwgMHgxMCwgMHg1MCwKKzB4NDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4MzEsIDB4MTEsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MTUsIDB4NDAsIDB4MzcsIDB4MDAsCisweDkxLCAweDAwLCAweDQ0LCAweDg2LCAweDUwLCAweDE5LCAweDQwLCAweDA0LCAweDA4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyQSwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHg4MywgMHgxMCwKKzB4MDgsIDB4NDgsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MzYsIDB4ODAsCisweDE5LCAweDAwLCAweDIwLCAweDAxLCAweEQwLCAweDQ0LCAweDQ0LCAweDMzLCAweDAwLCAweDAxLCAweDYwLCAweDA0LCAweDgyLAorMHgxMiwgMHgwOCwgMHg0MCwgMHg0MCwgMHhBMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MzAsIDB4M0MsIDB4MDgsIDB4RjMsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4M0MsIDB4MDAsCisweEYzLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDMzLCAweDAwLCAweDRDLCAweDAwLAorMHhGMSwgMHg0RCwgMHhDMSwgMHgzNywgMHg0MCwgMHgxMywgMHgwMCwgMHg0RCwgMHgwMiwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwMCwKKzB4QzQsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4QTgsIDB4M0IsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDQwLCAweEY0LCAweDAwLAorMHhGMSwgMHgwMywgMHhDOCwgMHgyRiwgMHgwMCwgMHgzRSwgMHgyMCwgMHhGQywgMHg4MSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzRiwKKzB4MjAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RTAsIDB4MDMsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDNCLCAweDA0LCAweEZGLCAweEMwLCAweEZDLCAweDQzLAorMHhCMiwgMHg0RiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhFRiwgMHgwNCwgMHhFQywgMHgyMywgMHhGMSwgMHgxMiwgMHhDMCwgMHgzNSwKKzB4MDMsIDB4N0IsIDB4MDEsIDB4RkMsIDB4NDIsIDB4QjAsIDB4MTMsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QkIsIDB4MDEsIDB4RUMsCisweDg2LCAweDMwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGRCwgMHgwQywgMHhGNCwgMHg4RiwgMHhEMCwgMHg5RiwgMHg0OCwgMHhGQywKKzB4MjIsIDB4REQsIDB4MDMsIDB4QzQsIDB4M0IsIDB4RDIsIDB4MTksIDB4NDAsIDB4QjQsIDB4MDEsIDB4OTEsIDB4RTEsIDB4NzQsCisweDBFLCAweDEwLCAweDA1LCAweDQzLCAweDc0LCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDAzLCAweDEzLCAweDExLCAweDQ4LAorMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MTgsIDB4Q0QsIDB4NTAsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4NDIsIDB4MjQsCisweDEzLCAweEQyLCAweDAxLCAweDYwLCAweEIxLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDQxLCAweDQwLAorMHgyMiwgMHgwMCwgMHg0RCwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzQsIDB4MDgsIDB4REQsIDB4MDAsIDB4NzQsCisweDgzLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDA4LCAweERELCAweDAwLCAweDQ0LCAweDgzLCAweEQwLCAweDExLCAweDQ4LAorMHgzNCwgMHgwOCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwNywgMHg1MSwgMHg4MSwgMHg0MSwgMHgzNCwgMHgwMCwgMHhENSwgMHgwOCwKKzB4NTYsIDB4OTEsIDB4MTAsIDB4MTksIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEEwLCAweDBELCAweEMwLAorMHgzNiwgMHgyMCwgMHhERiwgMHgyMCwgMHg2QywgMHgwMywgMHhGMiwgMHgzOCwgMHhDOCwgMHgzNSwgMHgzMCwgMHhEQiwgMHgwOCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MzUsIDB4ODYsIDB4NjIsIDB4MDAsIDB4Q0YsIDB4MDMsIDB4M0MsIDB4MDcsIDB4MzAsIDB4MTEsCisweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLAorMHgzRCwgMHgyNCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RTAsIDB4MEIsIDB4ODAsIDB4MzYsIDB4MDAsIDB4QjUsIDB4MDAsIDB4QkMsIDB4NDMsIDB4QjAsIDB4MTcsCisweEMwLCAweDdGLCAweDBBLCAweEZCLCAweDAwLCAweEVDLCAweDAxLCAweEYyLCAweDBCLCAweEMwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywgMHgwNCwKKzB4N0MsIDB4MDMsIDB4NzEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MjEsCisweEMwLCAweDM1LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDIxLCAweEMwLCAweDI3LCAweDAwLCAweDVGLAorMHgwMCwgMHg3QywgMHgxMSwgMHgzMCwgMHg4MSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4M0MsIDB4MDAsIDB4RjEsIDB4ODIsIDB4RjQsIDB4OEYsIDB4MTgsIDB4NUUsCisweDQ0LCAweEZGLCAweDI0LCAweEVELCAweDAyLCAweEM0LCAweDAzLCAweEQyLCAweDgxLCAweDQxLCAweDdDLCAweDAwLCAweDlCLAorMHgwMCwgMHg3NCwgMHgwRiwgMHhDMCwgMHgwMCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEQywgMHgwOSwgMHg0MCwgMHgwOSwgMHgxMCwKKzB4MDksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweEEwLCAweEYyLCAweDAwLCAweEM1LCAweDAxLCAweDM0LCAweDE3LCAweDUxLCAweDBDLCAweDQwLCAweEIyLCAweDA0LCAweENELAorMHgxMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzNywgMHgwMiwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwQiwgMHhDMCwKKzB4MDAsIDB4NEEsIDB4MzMsIDB4MTAsIDB4NEMsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MUYsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDc4LCAweDA2LCAweEUxLAorMHhCMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgyMCwgMHhFRCwgMHg4OSwgMHg5NCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDIsIDB4N0EsIDB4MDEsIDB4QTksIDB4ODEsIDB4QjQsIDB4ODcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NkIsIDB4MDAsCisweDZELCAweDMxLCAweEMwLCAweDA3LCAweDEwLCAweDEyLCAweDQwLCAweDFCLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwOCwgMHgzQywgMHg0MywgMHg1MCwKKzB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MjAsIDB4MUMsIDB4MDMsIDB4RjAsIDB4NDAsIDB4QzAsIDB4NzMsIDB4ODEsCisweEM3LCAweDAwLCAweDNDLCAweDMyLCAweEYwLCAweDQwLCAweEMwLCAweDMzLCAweDAwLCAweDRGLCAweDIyLCAweDFDLCAweDEyLAorMHgzMCwgMHg4NCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4NDAsIDB4QkMsIDB4MkIsIDB4QjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDkwLCAweEU0LCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNELCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDYzLAorMHhGMCwgMHgwNywgMHhDMCwgMHgyRiwgMHgwMiwgMHg2RiwgMHgwMCwgMHgxQywgMHgwMywgMHhGMCwgMHg4RCwgMHhDMiwgMHgwQiwKKzB4NDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NzMsIDB4MDEsCisweERCLCAweDBBLCAweDdDLCAweDk3LCAweDM5LCAweDZELCAweEMxLCAweEI3LCAweDAxLCAweERGLCAweDAwLCAweDVDLCAweDRCLAorMHg3MSwgMHgxOCwgMHhDMCwgMHgzNiwgMHgyMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHgzMiwKKzB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzYsIDB4MDUsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweEI5LCAweDA1LCAweEUxLCAweDU0LCAweEI0LCAweDEzLAorMHgxOCwgMHgyRSwgMHg2MCwgMHhCQiwgMHgwMywgMHhFRCwgMHgwNCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg2MCwgMHgzOCwKKzB4MDEsIDB4QTcsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MDcsIDB4NDIsIDB4MjgsIDB4MTAsIDB4NjEsIDB4MjAsIDB4QjQsCisweDAxLCAweDEwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFOSwgMHgwNSwgMHgzNCwgMHgyNywgMHgxMiwgMHg1RSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4Q0QsIDB4MDUsIDB4OTQsIDB4MjcsIDB4NTIsIDB4MUEsIDB4NjQsIDB4N0EsIDB4MDIsIDB4RUQsIDB4MDEsIDB4QjQsCisweDBFLCAweEQwLCAweDFFLCAweDQwLCAweDdBLCAweDIwLCAweDZELCAweDIxLCAweEY0LCAweDA3LCAweDEwLCAweDE2LCAweDQwLAorMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgzMywKKzB4MDgsIDB4QzEsIDB4MDAsIDB4MzQsIDB4ODMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4Q0QsIDB4MjAsIDB4MDQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweDg1LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDI1LCAweDQxLAorMHgyMCwgMHgwMCwgMHg0NSwgMHgwOCwgMHgzNCwgMHg4RiwgMHgxMCwgMHhFQywgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTUsIDB4MDAsIDB4NUIsIDB4MjAsIDB4N0MsCisweDAxLCAweDM1LCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDcwLCAweDI3LCAweEMyLAorMHgxNiwgMHgwMCwgMHg3RiwgMHgyMiwgMHg3QywgMHgwMSwgMHhGOCwgMHgyNywgMHhEMywgMHgxNiwgMHgyMCwgMHg2RiwgMHgyMCwKKzB4RjQsIDB4MEQsIDB4MzAsIDB4MTcsIDB4QzIsIDB4NUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEM0LAorMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxNywgMHgwNCwKKzB4N0MsIDB4MDgsIDB4RjIsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUEsIDB4MDIsIDB4NzQsIDB4NjAsIDB4RjAsIDB4MDEsCisweEMwLCAweDRCLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHgyNywgMHgwMiwgMHg5RiwgMHgwOSwgMHg3QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHg2NywgMHg4MCwgMHg4MywgMHgwOCwKKzB4NUMsIDB4MDIsIDB4MzAsIDB4OTksIDB4QzMsIDB4MjMsIDB4MDAsIDB4OTIsIDB4MDAsIDB4MEMsIDB4ODYsIDB4NzAsIDB4MDksCisweEMwLCAweDIxLCAweDAxLCAweDkzLCAweDA0LCAweDVDLCAweDA2LCAweDMyLCAweDA4LCAweEMyLCAweDQwLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFNiwgMHgwMCwgMHg5RCwgMHgwMywKKzB4NzQsIDB4MDIsIDB4RDAsIDB4QTksIDB4NDEsIDB4RTMsIDB4MDQsIDB4OUIsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAwLCAweEM0LCAweDBBLCAweEIwLCAweDA5LCAweDQwLCAweEE0LCAweDAwLCAweDk1LAorMHgwMCwgMHgwNCwgMHgwRSwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODgsIDB4MjQsIDB4MDQsIDB4OUQsIDB4MTAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDAxLCAweDkxLCAweDAwLCAweDE0LCAweDAyLCAweDE0LCAweDBELCAweDQxLCAweDI3LCAweDQxLCAweDk1LAorMHgwMCwgMHg1NCwgMHgxMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHhBNSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgxMiwgMHgxNCwKKzB4ODksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDIwLCAweDIwLCAweDA1LCAweDhELCAweDM0LCAweDM2LCAweDUyLCAweEQyLCAweDA4LCAweDQwLCAweDIzLCAweDQwLCAweDg5LAorMHhDMCwgMHgwNCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMCwgMHg5NSwgMHgwMiwgMHgxNCwgMHgwMywgMHg5MCwKKzB4ODgsIDB4NDAsIDB4MjAsIDB4MDUsIDB4OTQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4NDgsIDB4NDEsIDB4NDEsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAxLCAweDFGLAorMHgyNCwgMHg3QywgMHg5MSwgMHhGMCwgMHg0MSwgMHhDMSwgMHgwNywgMHgwNSwgMHgxMSwgMHg1NCwgMHg1QywgMHg1OCwgMHgzMCwKKzB4MDEsIDB4Q0EsIDB4MDcsIDB4MDUsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDQsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDEsCisweDUzLCAweDAwLCAweDVDLCAweDAwLCAweDMwLCAweDQ1LCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwgMHg1NCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjIsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MDAsCisweEJCLCAweDAxLCAweEVDLCAweDBBLCAweDcwLCAweDRCLCAweEM4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEFFLCAweDUyLAorMHhGNCwgMHgwQiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QTgsIDB4NkYsIDB4MDQsIDB4QkYsIDB4MzYsIDB4RkMsIDB4NDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkMsIDB4MDAsCisweEJGLCAweDkwLCAweDdGLCAweDMyLCAweEYwLCAweDBGLCAweEMwLCAweEFGLCAweDA0LCAweDlGLCAweDAyLCAweENELCAweDg2LAorMHgzNCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2NCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDAsCisweDFELCAweDAyLCAweDc0LCAweDA4LCAweEQwLCAweEExLCAweDUyLCAweDg0LCAweDAyLCAweDFELCAweDAyLCAweDQ0LCAweDAwLAorMHg3MCwgMHgwNSwgMHg0MCwgMHhDNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg4OCwgMHgxMCwgMHgwNSwgMHg0OCwgMHgwNCwKKzB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgxQSwgMHhEMCwgMHgwOCwgMHg2MiwgMHgyMywKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MEEsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NzQsCisweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNSwgMHgwMCwgMHg5RCwgMHhBMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwKKzB4MjAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDgsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsCisweDAyLCAweDExLCAweDg5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDI5LCAweDQwLAorMHg2MCwgMHgyOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywKKzB4MTAsIDB4OUYsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDgsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDJGLCAweDAwLCAweEJFLCAweDA3LCAweDRDLCAweDAyLCAweDMxLCAweDM5LCAweEMyLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgxNiwgMHgyMCwgMHgwOSwgMHhEMCwgMHgxNCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsCisweDQyLCAweEYwLCAweDA4LCAweEUwLCAweDI3LCAweDBDLCAweDhGLCAweDEwLCAweDdELCAweDAyLCAweEYwLCAweDM5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHg0QSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMywKKzB4N0MsIDB4MTYsIDB4RjQsIDB4NTksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAxLCAweDFGLCAweDAwLCAweDRDLCAweDIwLCAweDMwLCAweDQxLCAweEMwLAorMHgwNCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg1QywgMHg4MCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMiwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MjQsIDB4MUYsIDB4MjIsIDB4NUMsIDB4MDAsIDB4MzAsIDB4NDEsCisweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLAorMHhEQywgMHgwNCwgMHg3RCwgMHgwMCwgMHhDNCwgMHgwOSwgMHhGMCwgMHgxNywgMHg0NCwgMHhERCwgMHg0QywgMHg3MSwgMHgwMywKKzB4NDQsIDB4MDEsIDB4MTAsIDB4NzcsIDB4QzAsIDB4NTUsIDB4MDAsIDB4NUIsIDB4MDAsIDB4QjQsIDB4MTEsIDB4RDAsIDB4MDUsCisweDQwLCAweDVGLCAweDAwLCAweDdELCAweDAzLCAweEM0LCAweDAxLCAweDUwLCAweDM2LCAweDQwLCAweDUwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhFMiwgMHgwMCwgMHhDRCwgMHg0NSwKKzB4MTQsIDB4MEEsIDB4MTAsIDB4MjQsIDB4NDAsIDB4NzAsIDB4ODAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4NDgsCisweDQwLCAweDMzLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBELCAweDQyLCAweEEzLCAweDAwLCAweDhELAorMHgxMiwgMHgxNCwgMHgwMywgMHgxMCwgMHg4QywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDMsIDB4OTQsIDB4MDUsIDB4NTEsIDB4MjIsCisweDQwLCAweDYxLCAweDAwLCAweDgxLCAweDEwLCAweDg0LCAweDE3LCAweDE0LCAweDBBLCAweDQwLCAweEZELCAweDAxLCAweEVELAorMHgwNCwgMHhCNCwgMHgwMiwgMHhEMCwgMHg0RSwgMHgwMCwgMHgyQiwgMHgwNCwgMHhCRCwgMHgxMSwgMHg4NCwgMHgwMywgMHg1MiwKKzB4MDAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDEwLCAweDY4LCAweDAwLCAweENGLCAweDAxLCAweDE1LCAweDA0LCAweDEwLCAweDE2LCAweEUwLCAweDc4LCAweDg4LCAweEEzLAorMHgwMSwgMHhEQywgMHg0NywgMHgzMCwgMHgxRSwgMHhFOCwgMHg3RiwgMHgwMSwgMHhFNywgMHgwMywgMHhCQywgMHgwNiwgMHhGMCwKKzB4MUUsIDB4QzAsIDB4NkIsIDB4MDAsIDB4QUYsIDB4NDEsIDB4REMsIDB4MDcsIDB4MzIsIDB4MUUsIDB4QzAsIDB4NTAsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDVGLAorMHgwMCwgMHg2QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMCwgMHg3RSwgMHgyMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MTIsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2RiwgMHg0MCwgMHg3MywgMHg4MSwgMHhFNCwgMHgwNCwgMHhGMSwKKzB4MTcsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4ODAsCisweEU3LCAweDA5LCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMyLCAweDdDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LAorMHgzMCwgMHgxNywgMHhDMCwgMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4ODgsIDB4MjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4ODQsIDB4MTAsIDB4NzAsIDB4MDIsIDB4NDAsIDB4OTgsIDB4MDIsCisweEUxLCAweDgwLCAweEI0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDgxLCAweEUxLCAweDAwLCAweDg0LCAweDAyLAorMHhEMCwgMHg4RSwgMHhDMCwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgyMywgMHgxOCwgMHgyNiwgMHg0MCwgMHg1NCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweEUxLCAweDAwLCAweDg0LCAweDAwLCAweEQxLCAweDA4LCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDA4LCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MSwgMHgyQiwgMHgzMCwgMHhGNSwgMHgwMSwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHgyOCwKKzB4MDQsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4NTAsIDB4MjYsIDB4NDAsIDB4MjAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDEzLCAweDAwLCAweDExLCAweDQwLCAweDA0LCAweDAxLAorMHg1MCwgMHgwOCwgMHg0QywgMHgxMCwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4QzEsIDB4MDQsIDB4MDQsIDB4MDUsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MjIsIDB4ODAsIDB4NEQsIDB4MDAsIDB4MzYsCisweDBDLCAweDUwLCAweDBDLCAweDUyLCAweDE4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwNSwgMHhDNCwgMHgxNCwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MDksIDB4QzQsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDQsIDB4NEQsCisweDEyLCAweEYwLCAweDNGLCAweEMxLCAweDI0LCAweDAwLCAweDlGLCAweDBBLCAweDdDLCAweDBDLCAweDcwLCAweDI5LCAweEMwLAorMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywKKzB4MTAsIDB4OUYsIDB4ODIsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MDMsIDB4MDAsIDB4OTcsIDB4ODAsIDB4N0UsCisweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMxLAorMHhBNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg2MCwgMHhCNCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MEEsIDB4MkIsIDB4MjAsIDB4OTMsIDB4ODAsIDB4Q0MsCisweDAwLCAweDMwLCAweDA3LCAweEMwLCAweEFGLCAweDAwLCAweEEzLCAweDA5LCAweDhELCAweDAzLCAweDMyLCAweDBGLCAweEMxLAorMHg3NywgMHgwMCwgMHhGQiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzNCwgMHgwRiwgMHgwMCwgMHgyRSwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MkEsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDIxLCAweDM2LCAweDAwLCAweDkxLCAweDExLCAweDE0LCAweDQxLCAweDUxLCAweDk1LCAweDQwLAorMHhBNywgMHgwMCwgMHg5MSwgMHgwMiwgMHg0NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0NCwgMHg2NywgMHgwMiwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDIsIDB4MzAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4MzQsIDB4MUMsIDB4MTAsIDB4QkQsCisweDQ0LCAweDg3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLAorMHgyNCwgMHgxMCwgMHgxMSwgMHg4MSwgMHg2NCwgMHg4MCwgMHgxOCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg5MSwgMHgwMiwKKzB4NDQsIDB4MDMsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsCisweDQwLCAweDM2LCAweDAyLCAweERELCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MTYsIDB4ODAsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MDgsCisweDQ4LCAweEIzLCAweDIwLCAweENELCAweDAwLCAweDA1LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MjYsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweEQxLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDA4LCAweEZCLAorMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgxNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwKKzB4MDEsIDB4QzQsIDB4MDcsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEE4LCAweDFGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBCLCAweEMwLCAweDBGLCAweDAwLCAweDdGLAorMHg0MCwgMHhGQywgMHgwMywgMHhGMSwgMHgwNywgMHhDMCwgMHgyRiwgMHgwMSwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHg3MCwKKzB4MEUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDdCLCAweDIyLCAweEZCLAorMHgyOSwgMHhFQywgMHgyNywgMHhGMCwgMHg5RiwgMHhDNCwgMHg3QywgMHgwMiwgMHhFRiwgMHgwOSwgMHhDQywgMHgwNywgMHgzMCwKKzB4OUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0MsIDB4MDAsCisweEVGLCAweDA5LCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwNCwgMHg0QywgMHgwMCwgMHhEMSwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MzEsIDB4MUQsIDB4MDQsIDB4NDQsIDB4MDQsIDB4NTAsIDB4NDEsIDB4MDAsIDB4MDUsIDB4MDUsCisweDExLCAweDAwLCAweDVDLCAweDEwLCAweEQwLCAweDQxLCAweDQwLCAweDAwLCAweDI1LCAweDFELCAweDA0LCAweDQ0LCAweDAwLAorMHhEMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4RDksIDB4MDAsIDB4MjQsIDB4MTMsIDB4NTIsIDB4NEMsIDB4NDIsIDB4MzEsIDB4MDEsCisweENELCAweDA0LCAweDQ0LCAweDgzLCAweDUwLCAweDBELCAweDBBLCAweDMwLCAweDAwLCAweEQ1LCAweDAwLCAweDA0LCAweDQzLAorMHhEMCwgMHg0QywgMHg2MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0RCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MDcsIDB4MDAsCisweDExLCAweDAwLCAweDQwLCAweDgwLCAweEQwLCAweDAxLCAweDQwLCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDQ3LCAweDAwLAorMHg1MCwgMHgwMSwgMHg0OCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgyMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0OCwgMHgwNSwKKzB4MDAsIDB4MEQsIDB4MDAsIDB4NTQsIDB4MDAsIDB4QzAsIDB4MDEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM2LCAweDAwLCAweERCLCAweDAwLCAweDZDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHg0MCwgMHgwQywgMHgwMywgMHg3MCwgMHgwRCwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsCisweDAzLCAweEUwLCAweDBELCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHg0MCwgMHhGMywgMHgwMywgMHhENCwgMHgwRSwKKzB4MTAsIDB4M0YsIDB4MDAsIDB4RjgsIDB4NDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MjAsIDB4M0IsIDB4MDAsIDB4REMsCisweDAwLCAweEYxLCAweDAzLCAweEMwLCAweDBFLCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwKKzB4MDAsIDB4RDcsIDB4MDQsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4NjAsIDB4NUMsCisweDA3LCAweEIwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDEzLCAweEYwLCAweDBELCAweEMwLAorMHgzNCwgMHg0MCwgMHhEMywgMHgwNCwgMHg0QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBQiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTIsIDB4NzQsCisweDE0LCAweEQwLCAweDcxLCAweDYwLCAweDA3LCAweDAwLCAweDExLCAweDAwLCAweDZDLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHhDNywgMHgwMiwgMHgwRCwgMHgxMSwgMHg2QywgMHgxOCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgxMiwKKzB4NkMsIDB4MDAsIDB4RDAsIDB4QjEsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDIwLCAweEYwLCAweDEwLCAweEM1LCAweDgwLCAweDM0LCAweDAzLCAweEQxLCAweDBELCAweDQyLAorMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHgwQiwgMHg5MCwgMHgwQywgMHg0MCwgMHhCMywgMHgwMCwgMHhDNSwgMHgwMSwKKzB4MDQsIDB4MEYsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MEIsIDB4RDIsIDB4MUMsCisweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFGLCAweDAyLAorMHg0QywgMHgwMCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEOSwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMiwgMHgzOSwgMHgwMSwKKzB4QTQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDQsIDB4M0QsIDB4MDEsIDB4QTYsIDB4MjQsIDB4RDAsIDB4MTIsCisweDY4LCAweDRBLCAweDAwLCAweDMxLCAweDAxLCAweEE0LCAweDA0LCAweEQwLCAweDEyLCAweDUzLCAweDNDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwKKzB4M0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4NDgsIDB4MzMsIDB4MTAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4QjAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweEM3LCAweDAwLCAweDBDLCAweEEzLCAweEYxLCAweDBELCAweENDLCAweDMyLCAweDgwLCAweEMzLAorMHgwMCwgMHgwQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0OSwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjgsIDB4MDMsCisweDgwLCAweDBCLCAweDA4LCAweDM2LCAweDAwLCAweEJDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLAorMHgwMCwgMHhGQywgMHgyMCwgMHhEMiwgMHgwMywgMHhDMCwgMHgwRCwgMHgxMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGQSwKKzB4MTEsIDB4QzAsIDB4MDksIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEE4LCAweDc3LCAweDIwLCAweEQ3LCAweDQxLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDc0LCAweDAwLCAweEMzLAorMHgwMSwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMywgMHg3MCwKKzB4MUQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NEMsIDB4MDcsIDB4MzAsIDB4MUQsIDB4RDAsIDB4NDAsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDBELCAweDQ4LCAweDIxLAorMHg0MCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwOSwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5MCwgMHgwMCwgMHhEMCwKKzB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MzUsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsCisweDJCLCAweDQwLCAweDg0LCAweDAwLCAweEIwLCAweDAzLCAweEMwLCAweDRFLCAweDA4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhGOSwgMHgwMSwgMHhBNCwgMHgwNywgMHhDMiwKKzB4MUYsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RjUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0YsIDB4MDAsCisweEUxLCAweDAxLCAweDk0LCAweDA3LCAweDUwLCAweDFGLCAweDQ4LCAweDdDLCAweDgwLCAweEUxLCAweDAxLCAweEM0LCAweDA3LAorMHgxOCwgMHgxRSwgMHg0OCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTYsIDB4MjgsIDB4MDMsIDB4MDAsIDB4MDksIDB4MDAsIDB4NDAsIDB4MDAsIDB4RDgsIDB4MDAsIDB4NDIsIDB4MDEsIDB4MDAsCisweDA1LCAweDIwLCAweDE0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDA3LCAweDAwLCAweDA1LCAweDAwLCAweDE0LCAweDAwLAorMHg1MCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg1QSwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsIDB4MDAsCisweDVCLCAweDAwLCAweDZDLCAweDAxLCAweEQwLCAweDA0LCAweEMwLCAweDE0LCAweDAwLCAweDU3LCAweDAwLCAweDRDLCAweDAxLAorMHhGMCwgMHgwNSwgMHhDNCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHgxQywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwgMHgxNCwKKzB4MDgsIDB4NTMsIDB4NjAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4NDAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDhELCAweDAwLCAweDM3LCAweDAyLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwOCwgMHhGMCwgMHgwMywgMHhDOCwgMHgwRiwKKzB4MDAsIDB4M0YsIDB4MDIsIDB4RTQsIDB4MDgsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkQsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsCisweDE2LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweDkzLCAweDA0LCAweDc4LCAweDE2LCAweEYwLCAweDA5LCAweEMwLAorMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwKKzB4MDEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NDIsIDB4MTQsIDB4NTksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDBBLCAweEQwLCAweDA5LCAweDQwLCAweEE0LCAweDAwLCAweDkxLCAweDlBLCAweDc0LCAweDhFLCAweEIyLCAweDA5LCAweDQwLAorMHgyNywgMHgxMCwgMHg5MSwgMHgwMiwgMHg2NCwgMHgxNiwgMHhEMSwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4NkMsIDB4ODAsIDB4QkQsIDB4MDEsIDB4RTQsCisweDA2LCAweDEwLCAweDRCLCAweDQwLCAweDJELCAweDAwLCAweEJELCAweDAwLCAweEY0LCAweDBFLCAweEQwLCAweDBBLCAweDQwLAorMHgyQywgMHgwNCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgxMCwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDEsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDI4LCAweDAwLCAweEVDLCAweDAwLCAweEI0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLAorMHgyQiwgMHgyMiwgMHhBRCwgMHgwOCwgMHhCNCwgMHg4MiwgMHhEMCwgMHg4QSwgMHg2MCwgMHgyOCwgMHg0MiwgMHhBMSwgMHg0MCwKKzB4RjQsIDB4MDIsIDB4OTAsIDB4OEEsIDB4NDAsIDB4MkIsIDB4MEEsIDB4QTEsIDB4MDgsIDB4QTQsIDB4MDIsIDB4RDAsIDB4MEEsCisweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LAorMHgwNiwgMHgwMCwgMHgxRiwgMHg0MCwgMHg2QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRCwgMHgwMiwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4RDAsIDB4ODQsIDB4MDAsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MjEsCisweEMwLCAweDg3LCAweDA4LCAweDAzLCAweDIyLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEUwLCAweDc3LCAweEUwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwNSwgMHg4RCwgMHgxNCwKKzB4N0MsIDB4NTIsIDB4RjAsIDB4NDgsIDB4QzEsIDB4MjIsIDB4MDEsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksCisweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDgxLCAweDdDLCAweDUyLCAweEYwLCAweDQ4LCAweEMwLCAweDI3LCAweDAxLCAweDlGLAorMHgyNCwgMHgzQywgMHg1MiwgMHhGMCwgMHg0OSwgMHhDMSwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4QUYsIDB4MDAsIDB4QjcsIDB4MDIsIDB4REMsIDB4MEEsIDB4QjAsIDB4MkIsCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweERDLCAweDAyLCAweDMwLCAweDg5LCAweEMwLCAweDJGLCAweDEwLCAweEIzLAorMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHhBNywgMHgxMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhCMCwKKzB4MEIsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDAwLCAweDA1LCAweDAxLCAweDExLCAweDgxLCAweDQ0LCAweDAwLCAweDEwLCAweDQxLCAweDQwLCAweDA3LCAweDA1LCAweDFELAorMHgwMCwgMHg0NCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwMCwgMHg3NCwgMHg1MCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4NjMsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDIxLCAweDAxLCAweDg1LAorMHgwMCwgMHg1NCwgMHgxMiwgMHg5MCwgMHg0OCwgMHg0MCwgMHgyMywgMHg4MCwgMHg4RCwgMHgwNCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4NDgsIDB4NDAsIDB4MjMsIDB4NDQsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4ODAsCisweDhELCAweDAwLCAweDA2LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMywgMHgwOCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEMsIDB4MDAsIDB4NDUsIDB4ODIsIDB4NTAsIDB4MDksIDB4NDIsIDB4MjMsIDB4MDgsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHhEOCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MDAsIDB4MUMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDVDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkyLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDOCwgMHgxNywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODgsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEY4LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4ODAsIDB4N0QsIDB4NDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFELCAweDEwLCAweDdDLCAweDEwLAorMHhEMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg1QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNCwKKzB4MDAsIDB4MUIsIDB4NDksIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEI0LCAweDQxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBMCwgMHhEQywgMHgwMCwgMHg3RCwgMHgyMywgMHhGNCwgMHg5RCwgMHgxMCwgMHg5NywgMHg0MCwgMHgxNywKKzB4MDAsIDB4NUQsIDB4MDAsIDB4QjQsIDB4MjEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4N0QsIDB4MDEsIDB4RjQsCisweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE1LCAweDIwLCAweDdELCAweDAyLCAweEY0LCAweDA5LCAweDEwLCAweDA3LCAweDQwLAorMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhCNiwKKzB4MDYsIDB4REQsIDB4MEIsIDB4MzQsIDB4MDMsIDB4NTAsIDB4QUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4ODAsIDB4MTQsCisweDhGLCAweEQwLCAweDBDLCAweDUwLCAweDcwLCAweDgwLCAweEM5LCAweDIxLCAweDMyLCAweDI3LCAweEQwLCAweDBDLCAweDQwLAorMHgzMiwgMHgwMCwgMHhERCwgMHgxMiwgMHg3NCwgMHgyMywgMHgxMCwgMHgxQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsCisweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAzLCAweEVDLCAweDA0LCAweEI0LCAweDBBLCAweEMwLCAweDVFLCAweDQwLAorMHgzOCwgMHgwNCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg1RiwgMHg0MCwgMHgzQiwgMHgwMCwgMHgyRCwgMHgxMCwKKzB4QjQsIDB4MDMsIDB4MTAsIDB4MkUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc5LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA3LCAweDcwLCAweDFFLCAweEMwLAorMHg3QiwgMHgwNSwgMHhFQiwgMHg4OSwgMHg5QywgMHgwNywgMHg3MCwgMHhCRiwgMHhDMCwgMHg3OCwgMHgyMCwgMHgyQiwgMHgyMSwKKzB4QkMsIDB4MDcsIDB4RjAsIDB4M0UsIDB4QzAsIDB4N0EsIDB4MDUsIDB4RUYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzEsIDB4MUUsCisweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LAorMHgxNSwgMHgxMCwgMHg1RiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwRCwgMHg4MCwgMHhCNywgMHgwMSwgMHhERiwgMHgwQywKKzB4N0MsIDB4MDAsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsCisweDQxLCAweDM1LCAweDA4LCAweDFGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHg4OSwKKzB4RjgsIDB4MDUsIDB4NzAsIDB4MUYsIDB4QzIsIDB4N0QsIDB4MDAsIDB4RkIsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsCisweEMwLCAweDZGLCAweDAwLCAweEY3LCAweDAxLCAweENFLCAweDI1LCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDA0LCAweEYzLAorMHgwMSwgMHg4QywgMHgyNSwgMHgzMCwgMHgxRSwgMHhDMCwgMHgxOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDgsIDB4MzksIDB4MDQsIDB4RUQsIDB4MDgsIDB4RjQsIDB4MTEsIDB4MDAsIDB4MEUsCisweDQwLCAweDNGLCAweDAwLCAweEUwLCAweDEwLCAweEI0LCAweDQyLCAweEQwLCAweDhFLCAweDQxLCAweDNCLCAweDAwLCAweEY1LAorMHgwMiwgMHg5NCwgMHgwQiwgMHg1MCwgMHgwRSwgMHhDMCwgMHgzQiwgMHgwMCwgMHgzQiwgMHgwOCwgMHg4NSwgMHgzOSwgMHhCMCwKKzB4MEEsIDB4NDAsIDB4NTUsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsCisweDAwLCAweDM5LCAweDAyLCAweEVELCAweDA4LCAweEIwLCAweDAxLCAweEQxLCAweDA2LCAweDQwLCAweDM5LCAweDA0LCAweEU5LAorMHgwOCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyRiwgMHgwMCwgMHg3MSwgMHgwOCwgMHhDNCwgMHgwMSwgMHg5MCwKKzB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4RTksIDB4MDAsIDB4QzQsIDB4MDAsIDB4MTgsIDB4MDcsIDB4NDAsIDB4MjAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDIxLCAweDEwLCAweDlELAorMHgwMywgMHgzNCwgMHgwMCwgMHg5MCwgMHg4OSwgMHg0MCwgMHhGMiwgMHg4MCwgMHhDMSwgMHgwMiwgMHgzNCwgMHgwQywgMHhEMCwKKzB4MUMsIDB4NjAsIDB4NTcsIDB4MDAsIDB4MDUsIDB4MDYsIDB4MTQsIDB4MEUsIDB4RDgsIDB4MkMsIDB4NDAsIDB4QjEsIDB4MDAsCisweENELCAweDBBLCAweDAwLCAweEFDLCAweDk4LCAweDAwLCAweDQyLCAweDA5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhBMCwgMHhDNCwgMHgyMCwgMHgxRiwgMHg1MiwgMHg3QywgMHgwQSwgMHhEMCwKKzB4QTEsIDB4QzAsIDB4RkQsIDB4ODAsIDB4RkIsIDB4MDEsIDB4N0MsIDB4MkMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4RDcsIDB4MDEsCisweDkzLCAweDExLCAweDRDLCAweDEyLCAweEIwLCAweDNGLCAweDQxLCAweEJGLCAweDAwLCAweEM5LCAweDA4LCAweDQ4LCAweDBFLAorMHgxMCwgMHg5MSwgMHhDMCwgMHg3NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MEQsIDB4MDgsIDB4MjcsIDB4MjAsIDB4OUYsIDB4ODQsIDB4N0UsIDB4NjAsIDB4NzAsIDB4MjEsIDB4QzgsIDB4MzcsIDB4MDksCisweERGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDBELCAweEMxLCAweEE2LCAweDAwLCAweDlFLCAweDQwLCAweDdFLCAweDQwLAorMHg3MCwgMHgwRCwgMHhDMSwgMHgzNywgMHgyMiwgMHgxQiwgMHgwMCwgMHg3QywgMHgxQSwgMHhGMCwgMHg4OSwgMHhDNCwgMHg5NywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MEIsIDB4ODQsCisweDMzLCAweDgwLCAweENDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDNFLCAweDAwLCAweEY3LCAweDEwLCAweEY4LCAweDAwLAorMHhGMiwgMHgwRiwgMHhDMCwgMHgxQywgMHgwNCwgMHgzMywgMHg4MCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDQsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDQ2LCAweDA4LCAweDE3LCAweDExLCAweDRDLCAweDA2LAorMHhEMCwgMHgxMSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHg4MCwgMHg3NCwgMHgwNCwgMHhGMCwgMHgwQywgMHg0MCwgMHg4NSwKKzB4MDIsIDB4MTEsIDB4MDMsIDB4NjQsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDgsIDB4MUQsIDB4MTEsIDB4NkMsCisweDA0LCAweEQwLCAweDM4LCAweEM4LCAweDA2LCAweDA0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHg0NCwgMHgwNCwgMHgxMSwgMHgyMSwgMHg1NCwgMHgwNiwgMHhEOCwgMHgzOSwgMHg2NiwgMHgzMiwKKzB4MDAsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDQsIDB4MDQsIDB4MzEsIDB4MjEsIDB4NzQsCisweDA0LCAweEQ4LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDA4LCAweDQ0LCAweDA2LCAweEQwLCAweDMxLCAweDQwLAorMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwQSwgMHgyNCwKKzB4MDAsIDB4ODUsIDB4MDAsIDB4MDUsIDB4MDAsIDB4RDIsIDB4MDgsIDB4NjAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsCisweDAyLCAweEQwLCAweDBELCAweDQwLCAweDIxLCAweDIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweEQyLCAweDBDLCAweDQwLAorMHgzMywgMHgwMCwgMHgxRCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NUMsCisweDgyLCAweEY4LCAweDAxLCAweEMwLCAweDNFLCAweDAwLCAweEY2LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBGLCAweDQwLAorMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3NCwgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg5MCwgMHgxRiwgMHgwMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDg1LCAweEE4LCAweDJGLCAweDAwLCAweEI2LCAweDAwLCAweENDLCAweDAyLCAweEY4LCAweDBCLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRSwgMHg4MCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg0MCwgMHgzRiwgMHgwMCwKKzB4QTQsIDB4MDIsIDB4RjIsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LAorMHg3RiwgMHg0MCwgMHhGMywgMHg0NiwgMHhGQywgMHgwMywgMHgzMCwgMHg0RiwgMHhDMCwgMHg0RiwgMHgxMiwgMHgzQiwgMHg0QywKKzB4Q0MsIDB4MjMsIDB4MzAsIDB4NEYsIDB4QzIsIDB4MEMsIDB4ODAsIDB4M0YsIDB4MDEsIDB4RkMsIDB4MDcsIDB4NzEsIDB4OEYsCisweEMwLCAweDBGLCAweDA4LCAweDczLCAweDAxLCAweEZDLCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDBDLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxMCwgMHg3RCwgMHgwMCwgMHhFMSwgMHgwOCwKKzB4RjQsIDB4QUYsIDB4MTAsIDB4QkYsIDB4NDAsIDB4MjcsIDB4MDEsIDB4NUQsIDB4MDgsIDB4QzQsIDB4M0IsIDB4NTAsIDB4OUYsCisweDQwLCAweDQ0LCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDA3LCAweDEwLCAweDBGLCAweDQwLCAweDA3LCAweDAwLCAweEQ1LAorMHg4MSwgMHg3NCwgMHgwMCwgMHhCMSwgMHgwMSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MzMsIDB4MDAsIDB4QzQsIDB4MDQsIDB4MzQsIDB4MDMsIDB4NTUsIDB4MEMsCisweDQwLCAweDQzLCAweDAxLCAweDhELCAweDQ0LCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDUwLCAweDAwLCAweDAwLCAweDBELAorMHg4MCwgMHgzNCwgMHgwMywgMHgxMCwgMHg0QywgMHg0MCwgMHgwNywgMHgwMCwgMHg0MSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwKKzB4MDAsIDB4NDAsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEEwLCAweDM1LCAweDAwLCAweEQ1LCAweDAwLCAweDcwLCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDY3LCAweDAwLCAweDVELAorMHgxNCwgMHg1NCwgMHgwMywgMHgxMCwgMHgwRCwgMHgwMCwgMHg2QywgMHgwMCwgMHg1RCwgMHgxMCwgMHg3NCwgMHgwMywgMHgxMCwKKzB4MEYsIDB4NDAsIDB4NkYsIDB4MDAsIDB4RDUsIDB4MDQsIDB4NzAsIDB4MDYsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM2LCAweDAwLCAweEQ3LAorMHgwMCwgMHg3RSwgMHgwMywgMHg3MCwgMHgwRCwgMHhDNCwgMHg0NywgMHgwMCwgMHgxQiwgMHgwMywgMHg1RCwgMHgwMywgMHg3MCwKKzB4MEQsIDB4ODAsIDB4NDQsIDB4MjAsIDB4REQsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzQsIDB4MEQsIDB4QzQsIDB4NDcsIDB4MDAsCisweDkzLCAweDA2LCAweDc4LCAweDA0LCAweDcwLCAweDUxLCAweEMwLCAweDAxLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGQiwgMHgwMCwgMHhCQywgMHgwMywgMHhCMCwKKzB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4NkEsIDB4MjAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4ODQsIDB4MEYsIDB4MDgsCisweEZDLCAweDAwLCAweEZFLCAweDAzLCAweEUwLCAweDBGLCAweDgwLCAweDBGLCAweDAwLCAweEJGLCAweDAxLCAweEI4LCAweDAyLAorMHhCMCwgMHgwOSwgMHhDMiwgMHgzRSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDgsIDB4MzEsIDB4MTAsIDB4RDMsIDB4NDAsIDB4NUMsIDB4MDMsIDB4RjMsIDB4MEQsIDB4QzAsIDB4MDYsIDB4MDAsCisweDlGLCAweDAyLCAweDJDLCAweDAzLCAweDcwLCAweDRDLCAweEMwLCAweDI2LCAweDA0LCAweEQ3LCAweDIyLCAweDdDLCAweDEzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyOCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4MzQsIDB4MDAsCisweEYxLCAweDIwLCAweEM0LCAweDE3LCAweEQwLCAweDRGLCAweDQwLCAweDI0LCAweDAwLCAweDVELCAweDQwLCAweEMwLCAweDE3LAorMHgxMCwgMHg3RiwgMHg0MCwgMHhFNywgMHgwMCwgMHhERCwgMHgwNiwgMHg3MCwgMHgwMywgMHgxMSwgMHhBRiwgMHgxMCwgMHgyNCwKKzB4MDAsIDB4OUQsIDB4NDUsIDB4NDQsIDB4NDYsIDB4MTEsIDB4MTksIDB4MTEsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDcyLCAweDQwLCAweEM5LCAweDIwLCAweDI0LCAweDAzLAorMHhEMCwgMHg2QywgMHg0MCwgMHgyMiwgMHgwMCwgMHgwOCwgMHgyMCwgMHgyMCwgMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHhDMiwKKzB4ODgsIDB4ODQsIDB4MjAsIDB4MzAsIDB4MEIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDQsIDB4MDAsIDB4OEQsIDB4MjEsIDB4MjUsCisweDA0LCAweDE0LCAweDExLCAweDAyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwRiwgMHgwMCwgMHg3MCwgMHgwNCwgMHhFOSwgMHgwMSwgMHhCNCwgMHgxNywgMHhEOCwgMHgxRSwgMHg0MCwgMHg2QSwKKzB4MDgsIDB4QUQsIDB4MDUsIDB4QTQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NEEsIDB4NUIsIDB4MEEsIDB4RUQsIDB4NkIsIDB4MzQsCisweDA3LCAweDgxLCAweDlFLCAweDQyLCAweDU4LCAweDAwLCAweEFELCAweDAxLCAweEI2LCAweDA1LCAweDEwLCAweEI2LCAweDQwLAorMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwKKzB4MDAsIDB4Q0IsIDB4MDAsIDB4MkMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MjIsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NkMsCisweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDAyLCAweDA0LCAweDg3LCAweDA1LCAweDNDLCAweDQzLCAweDIwLCAweDBELCAweEMwLAorMHgxMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHg2QywgMHgwMSwgMHgzMCwgMHgwMCwgMHhDMCwgMHg0OCwgMHg2OCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4N0QsIDB4MDAsIDB4RjcsIDB4MTAsIDB4QzEsCisweDUzLCAweEYwLCAweDBFLCAweEMwLCAweDNELCAweDAwLCAweEJCLCAweDA0LCAweERDLCAweDBCLCAweDdBLCAweDhGLCAweEMxLAorMHgzRiwgMHgwOCwgMHhGRiwgMHgyOCwgMHhGQywgMHgwNywgMHg3MiwgMHgyRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwMCwKKzB4NEMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAzLCAweDVDLCAweDRGLCAweDMwLCAweDNELCAweEM5LAorMHgwNCwgMHgxMCwgMHg1RiwgMHg0MCwgMHg0QywgMHgzNywgMHgzMCwgMHgyRCwgMHhDMCwgMHg1NiwgMHg0MCwgMHhEQiwgMHgwMSwKKzB4NEMsIDB4MDMsIDB4QjMsIDB4MkQsIDB4QzIsIDB4MTQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MEQsCisweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDgwLAorMHgzOSwgMHgwMSwgMHhDRCwgMHgxNCwgMHgwMiwgMHgxMywgMHhCMCwgMHg0QywgMHg0QSwgMHgwOCwgMHgwMCwgMHhDQywgMHgwMCwKKzB4ODQsIDB4MTMsIDB4QjAsIDB4NEUsIDB4NDEsIDB4MUIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MEIsIDB4RDAsIDB4MEYsCisweDQwLCAweDE4LCAweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweEMwLCAweDRFLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMiwgMHhFRCwgMHgwMSwKKzB4OTQsIDB4MTcsIDB4MTAsIDB4OUUsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4MDQsIDB4MTcsIDB4MTAsIDB4MUUsCisweDQwLCAweDYxLCAweDg4LCAweEUxLCAweDIxLCAweDk2LCAweDE3LCAweEQwLCAweDlFLCAweDQ0LCAweDc4LCAweDAwLCAweEJELAorMHgwMSwgMHg4NSwgMHgwNSwgMHhEMCwgMHgxQywgMHg0MCwgMHgxMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MEMsCisweDQwLCAweDcxLCAweDAxLCAweENELCAweDg4LCAweDA0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLAorMHgzQSwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MiwgMHhGMCwgMHgwNCwgMHg4RCwgMHgwMywgMHg0NCwgMHgwQiwgMHhEMCwKKzB4OEQsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisweDIwLCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDMwLCAweDA1LCAweDQwLCAweERELCAweDAxLCAweDdGLAorMHhDMSwgMHg0RCwgMHgwMSwgMHgzMSwgMHgwNSwgMHhDMCwgMHg5RSwgMHgwNCwgMHg3MSwgMHgwMywgMHg1QywgMHgwMSwgMHhCMCwKKzB4MDUsIDB4QzQsIDB4REMsIDB4MDEsIDB4N0YsIDB4NTksIDB4Q0MsIDB4MDksIDB4RjAsIDB4QjcsIDB4NDAsIDB4NUQsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDAwLCAweDFGLAorMHgwMCwgMHg2NCwgMHgwMCwgMHhGMCwgMHgyMSwgMHg1MCwgMHgwNiwgMHgyMCwgMHgwQiwgMHg4MCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4ODYsIDB4MDQsIDB4MTcsIDB4MDAsIDB4NjgsIDB4MDgsIDB4QTIsIDB4MDEsIDB4RDAsIDB4MDcsIDB4MDgsCisweDFGLCAweDIyLCAweDdDLCAweDQ4LCAweEYwLCAweDAxLCAweEMwLCAweDRBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NkMsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzQsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDBBLCAweEQwLCAweDI5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDUwLCAweDAyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MjAsIDB4MkMsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4QTksIDB4NDAsIDB4MjcsIDB4MTAsCisweDk0LCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDI5LCAweDA0LCAweEE3LCAweDAxLCAweDlELCAweDExLCAweEY0LCAweDRFLAorMHhDMiwgMHgyOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwNCwgMHg0NCwgMHgyQSwgMHg1MCwgMHgwOSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsCisweDlELCAweDAwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkwLCAweDQwLCAweDY0LCAweDAyLAorMHhEMCwgMHgwOSwgMHgwMSwgMHgyNiwgMHg4MiwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMiwgMHhDMCwgMHgyOCwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OUMsIDB4ODAsIDB4NTQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDYsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIxLCAweDAwLCAweDhELCAweDQ4LCAweDM0LCAweDAyLAorMHhEMSwgMHgwOCwgMHg0MCwgMHgyMywgMHg2MiwgMHg4MSwgMHgwOCwgMHgwNCwgMHgwQSwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MjEsIDB4OEQsIDB4MjAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4ODAsIDB4MTAsCisweDUzLCAweDUyLCAweDQ4LCAweDQxLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxRCwgMHhCOCwgMHg0NiwgMHgwMCwgMHgxRiwgMHgzNiwgMHg3QywgMHg1MCwgMHhGMCwgMHg0NSwgMHhDMSwgMHg4NywKKzB4MDAsIDB4MTIsIDB4MTYsIDB4NkMsIDB4NTAsIDB4RjEsIDB4NDEsIDB4ODEsIDB4NDYsIDB4MDAsIDB4MEYsIDB4MEEsIDB4N0MsCisweDA0LCAweEYwLCAweDMxLCAweEM0LCAweEM0LCAweDAyLCAweDFGLCAweDAwLCAweDU4LCAweDEwLCAweDMwLCAweDQxLCAweEUyLAorMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHhBNywKKzB4MDAsIDB4OUYsIDB4MjQsIDB4NzgsIDB4ODIsIDB4RjAsIDB4MDksIDB4Q0EsIDB4MkYsIDB4MDEsIDB4RkMsIDB4MDQsIDB4N0MsCisweDA2LCAweEYxLCAweDA5LCAweDgwLCAweDJGLCAweDAyLCAweEJGLCAweDAxLCAweDdDLCAweDBBLCAweEIwLCAweEM5LCAweEMwLAorMHg2RiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhFQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhEMSwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4NkYsIDB4MDAsIDB4OUYsIDB4MTYsIDB4RkMsCisweDAyLCAweDM0LCAweDRCLCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAyLCAweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLAorMHgyQywgMHg2MCwgMHhCMywgMHgwMCwgMHhGQywgMHg0NiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHg4MCwKKzB4Q0QsIDB4ODIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDg3LCAweDAwLCAweDFELCAweDAyLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLAorMHgwNCwgMHgwMSwgMHgwRCwgMHg4QSwgMHg3NCwgMHgwNCwgMHhEMCwgMHhBMSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgxMSwgMHgwMCwKKzB4NzQsIDB4MDgsIDB4RDAsIDB4NDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDEsIDB4MDEsCisweDQyLCAweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLAorMHhBMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwQSwgMHgxMSwgMHgyQywgMHg0MCwgMHgyMCwgMHgyNCwgMHg4OSwgMHg0MCwKKzB4MzQsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MTAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDgsIDB4MDgsCisweDYxLCAweDIwLCAweDQwLCAweDk1LCAweDAwLCAweDE0LCAweDA2LCAweEQwLCAweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzAsIDB4MDIsIDB4MTIsIDB4MDksIDB4NDAsIDB4QTQsIDB4MEEsIDB4OUQsIDB4MjAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksCisweDEwLCAweDI0LCAweDEwLCAweDk1LCAweDIwLCAweDc0LCAweDgyLCAweEQwLCAweDA4LCAweDRDLCAweDI0LCAweDA0LCAweDk1LAorMHgwOCwgMHg1NCwgMHhBMywgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MkEsIDB4MjUsIDB4MjAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweEQwLCAweDY0LCAweDAwLCAweDlGLCAweDAyLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweEE0LCAweDA0LCAweDk3LAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHg1MCwgMHg2NCwgMHgwMiwgMHg4NywgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MTcsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdFLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDY3LCAweDIwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMywgMHgyNywgMHgwMiwgMHg5QiwgMHgxMCwgMHg3QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUEsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDE3LAorMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMiwgMHg2QywgMHgyMCwgMHhGMCwKKzB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsCisweDEzLCAweDA0LCAweDdDLCAweDA0LCAweDMwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgxNCwgMHgwNCwgMHg1MSwgMHgwMCwgMHgyQywgMHgwMSwgMHhEMCwKKzB4QTcsIDB4NDgsIDB4MTcsIDB4MDgsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MjYsIDB4NDAsIDB4NUIsIDB4MjAsCisweDdDLCAweDgzLCAweEM0LCAweDAxLCAweDExLCAweDA3LCAweDQxLCAweDE3LCAweDAwLCAweDcwLCAweDAwLCAweEY0LCAweDAxLAorMHgxMCwgMHgwNywgMHg0NCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MjcsIDB4OUEsIDB4MEMsIDB4NDQsIDB4MzMsIDB4MDAsCisweEMwLCAweDAwLCAweDI0LCAweDA3LCAweEQwLCAweDJDLCAweDQwLCAweDYzLCAweDIwLCAweENELCAweDAwLCAweDAwLCAweDAyLAorMHg5MCwgMHg1QywgMHg0MCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMywgMHgzMCwgMHgwMywgMHg5NCwgMHgxQywgMHg0MCwgMHg0MywKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzksIDB4MDAsCisweEUxLCAweDAxLCAweEE1LCAweDAzLCAweEQwLCAweDA2LCAweDQwLCAweDdCLCAweDAyLCAweEUxLCAweDQ5LCAweDg0LCAweDAyLAorMHhEMCwgMHgwNiwgMHg0MCwgMHhCQiwgMHg4MCwgMHg2RCwgMHgwMywgMHg4NCwgMHg0NiwgMHg5MiwgMHgwNiwgMHg0MCwgMHgzMywKKzB4MDAsIDB4RTEsIDB4MDIsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MjYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc5LCAweDAwLCAweEY3LCAweDA5LCAweDlDLCAweDA2LAorMHhCMCwgMHgxRSwgMHhDMCwgMHg3RiwgMHg0NSwgMHhFMiwgMHgxNSwgMHhBQywgMHgwNywgMHhGMCwgMHgxQSwgMHhDMCwgMHg2QiwKKzB4MjAsIDB4QkYsIDB4MDEsIDB4OEMsIDB4MDYsIDB4QTAsIDB4MUEsIDB4QzAsIDB4N0IsIDB4MDUsIDB4QTMsIDB4MDEsIDB4RkMsCisweDA3LCAweEIwLCAweDFFLCAweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhCOCwgMHgzMSwgMHgwMCwgMHhERiwgMHgwQywgMHg1QywgMHgwMiwgMHhGMSwgMHgwMSwgMHhDMCwgMHhCNywKKzB4MDEsIDB4REYsIDB4ODYsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MjYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsCisweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDM3LCAweDAxLCAweERGLCAweDgwLCAweDdDLCAweDAyLCAweDcyLCAweDA1LCAweEMwLAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwKKzB4MDAsIDB4RkYsIDB4MDEsIDB4REUsIDB4MjcsIDB4NzAsIDB4OUIsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MjEsIDB4REMsCisweDI3LCAweEYwLCAweDFGLCAweEMwLCAweDZGLCAweDAwLCAweDdCLCAweDA5LCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHg3QywgMHgyNiwgMHhCRiwgMHg4MSwgMHhGQywgMHgyNywgMHgzMSwgMHg5RiwgMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsCisweDAyLCAweEMwLCAweDIyLCAweDQyLCAweDNCLCAweDAwLCAweEU5LCAweDAwLCAweDgwLCAweDAyLCAweEQwLCAweDIyLCAweDQwLAorMHgzQiwgMHgwMCwgMHgxOSwgMHgwMSwgMHg5NCwgMHgwQSwgMHg1MCwgMHgwNiwgMHg0MCwgMHg3OSwgMHgwQSwgMHhFRCwgMHgwMCwKKzB4QjQsIDB4MzMsIDB4MzAsIDB4MjIsIDB4NDAsIDB4NTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDgyLCAweDUwLCAweDAyLCAweDAwLAorMHgzQiwgMHgwMCwgMHhFRCwgMHgwOCwgMHg5NCwgMHgwMywgMHhEMSwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHgzOSwgMHgxMCwKKzB4MjQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzgsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDksIDB4MTIsIDB4MEUsCisweDYwLCAweDYxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLAorMHgyMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHhGMywgMHgwMCwgMHhDRCwgMHgwMiwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDgsIDB4NzMsIDB4ODQsIDB4MDksIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDQsCisweDY0LCAweDMxLCAweDgyLCAweENELCAweDAwLCAweDM0LCAweDA0LCAweDExLCAweDAwLCAweDQwLCAweDA5LCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgxMCwgMHhGRiwgMHgwMCwKKzB4NTQsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4M0YsIDB4MDMsIDB4RkYsIDB4MDEsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MDksCisweEM4LCAweEE3LCAweDAxLCAweDlCLCAweDAxLCAweDY0LCAweDAyLCAweEIwLCAweDBELCAweENDLCAweEZDLCAweDEyLCAweDlELAorMHgwQSwgMHg3QywgMHg5MCwgMHgzMywgMHgxOSwgMHhDMiwgMHg3NSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MjksCisweEMwLCAweDM3LCAweDA4LCAweERCLCAweDE4LCAweDdFLCAweDAyLCAweEYyLCAweDAxLCAweDQwLCAweDM3LCAweDAwLCAweDFFLAorMHgwMCwgMHg1QywgMHgwQSwgMHgzOCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwOCwgMHg3NCwKKzB4ODEsIDB4NTAsIDB4MTYsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsCisweDA4LCAweDNGLCAweDEwLCAweERGLCAweDAwLCAweEZDLCAweDBCLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweERGLAorMHgwMCwgMHhGQywgMHgwNywgMHhGMSwgMHgwQSwgMHhDMCwgMHgyQywgMHg0MCwgMHgzMiwgMHgwMSwgMHhGQywgMHgwMiwgMHhGMiwKKzB4MUEsIDB4ODAsIDB4M0MsIDB4MDAsIDB4QjMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MjYsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweERELAorMHgwMCwgMHg2NCwgMHgwNywgMHhEMCwgMHgxOSwgMHg0MiwgMHgzMywgMHgwMCwgMHhEMSwgMHg4MCwgMHg3NCwgMHgwNywgMHhEMCwKKzB4MzksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDcsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MTksIDB4QzAsIDB4MzcsIDB4MDAsCisweDlCLCAweDE4LCAweDY0LCAweDBDLCAweEQwLCAweDMxLCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEOCwKKzB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MTMsIDB4RDAsIDB4MTEsIDB4NDAsIDB4QTYsIDB4MDAsCisweDM1LCAweDA4LCAweDc0LCAweDAzLCAweEM4LCAweDQ5LCAweDQ2LCAweDM5LCAweDAwLCAweDkxLCAweDAwLCAweDYwLCAweDA0LAorMHhEMCwgMHgxOSwgMHg0MCwgMHgwNywgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MzcsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDgyLCAweEQwLCAweDAwLCAweDQwLCAweDMwLCAweDgwLCAweDA1LCAweDAwLCAweDM0LCAweDAyLAorMHhEMCwgMHgwMCwgMHg0MCwgMHgzMiwgMHgwMSwgMHhDOSwgMHhBMCwgMHgyNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHg0MywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTgsIDB4MzYsIDB4MDAsCisweEZGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweDc0LCAweDAyLAorMHhEMSwgMHgwMSwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxNywgMHgwNCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzRCwKKzB4MDUsIDB4MTMsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MDcsIDB4NjQsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEI4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDAyLAorMHhGMCwgMHgwMywgMHhDQywgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGOCwgMHgwMiwgMHhGMiwgMHgwMywgMHg4OCwgMHgxRiwKKzB4MDAsIDB4MUIsIDB4MTYsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBQSwgMHg3QiwgMHgxMiwgMHhFRiwgMHgwOSwgMHhFQywgMHgwNywgMHhCMCwgMHg5RSwgMHhDMCwgMHg3QSwKKzB4MDAsIDB4RjcsIDB4MDksIDB4RUMsIDB4MDcsIDB4RjAsIDB4M0YsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RjcsIDB4MjksIDB4Q0MsCisweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweEE3LCAweEIwLCAweDFGLCAweEMwLAorMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHgwNywKKzB4MDAsIDB4MUQsIDB4NDQsIDB4NDQsIDB4MDQsIDB4MzIsIDB4MDEsIDB4NDAsIDB4NDQsIDB4MjAsIDB4MTEsIDB4MDQsIDB4NEMsCisweDEwLCAweDEwLCAweDAxLCAweEMwLCAweDQ0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDEwLCAweEQwLCAweDAxLCAweDQwLAorMHg0NCwgMHgxMCwgMHgxMSwgMHgyMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgxMSwgMHhDMCwgMHgwRSwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzMsIDB4MTEsIDB4REQsIDB4MDAsIDB4MjQsCisweDAzLCAweDkxLCAweDRELCAweDQyLCAweDMzLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDQzLCAweEQwLCAweDRDLCAweDQwLAorMHgzMiwgMHgwMCwgMHhDNSwgMHg0NCwgMHgxNCwgMHg0MywgMHhEMCwgMHgwQywgMHg2MiwgMHgzMiwgMHgwMCwgMHhDMSwgMHg4MCwKKzB4MzQsIDB4MTMsIDB4OTAsIDB4MEQsIDB4NDIsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDU0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLAorMHgwNSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwNSwgMHgwMCwKKzB4NTQsIDB4MDAsIDB4REEsIDB4MDEsIDB4NDQsIDB4MDQsIDB4NDAsIDB4MTEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTEsIDB4MDEsCisweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLAorMHgzNywgMHgwOCwgMHhERiwgMHg4MCwgMHg2QywgMHg4MywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RTAsIDB4MEQsCisweEMwLCAweDMyLCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEIxLCAweDBDLCAweEMwLCAweDIxLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RUMsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzgsIDB4MEUsIDB4MjAsIDB4M0UsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBDLCAweDA4LCAweDNCLCAweDAwLCAweEVDLCAweDAwLCAweEYyLCAweDAzLCAweEMwLCAweDBFLCAweDAwLCAweDNGLAorMHgwMCwgMHhFNCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MzUsIDB4MjAsIDB4RDcsIDB4QzgsIDB4NUMsIDB4ODMsIDB4QzAsIDB4MEQsCisweEMwLCAweDM1LCAweDAxLCAweEQ3LCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDM2LCAweDAwLCAweEQ3LAorMHgwMCwgMHg3QywgMHgxMywgMHgzMCwgMHg0RCwgMHhDNCwgMHgzNiwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4RDAsIDB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweEEwLCAweEM0LCAweDAwLCAweDAxLCAweDgzLCAweDA0LCAweDA0LCAweDEwLCAweEUwLCAweDQwLCAweDgwLCAweDAwLCAweDExLAorMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgxMSwgMHgwMCwgMHg3NCwgMHg0OCwgMHhCMCwKKzB4NTAsIDB4NDAsIDB4QzcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzAsIDB4MjQsIDB4RDEsIDB4MDEsIDB4NDAsIDB4NEQsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweEIwLCAweDA0LCAweEM1LAorMHg1MywgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MiwgMHgzMSwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwKKzB4MEQsIDB4MDAsIDB4MzIsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MEYsIDB4OTIsIDB4M0MsIDB4NDQsIDB4QjIsIDB4MDksCisweEM1LCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHgwOCwgMHg0QywgMHgwNiwgMHgzMSwgMHgwMSwgMHhDNCwgMHgwNCwgMHgxMSwKKzB4MTMsIDB4NDAsIDB4NDgsIDB4MDgsIDB4MjUsIDB4MDEsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDAsCisweDIxLCAweDAxLCAweEY0LCAweDA0LCAweEQyLCAweDkyLCAweDQwLCAweDRCLCAweDBDLCAweDIxLCAweDAxLCAweEI0LCAweDE0LAorMHhEMCwgMHg5MiwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDgsIDB4MUMsIDB4NjMsIDB4NzIsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDIsCisweEQ1LCAweDAwLCAweDFDLCAweDEzLCAweEYwLCAweDRDLCAweEMwLCAweDMyLCAweDAxLCAweEM3LCAweDI4LCAweDNDLCAweDIzLAorMHhCMCwgMHg4QywgMHhDMCwgMHgzMiwgMHgwMCwgMHhDNiwgMHgwMCwgMHgzQywgMHg2MywgMHhGMiwgMHg4QywgMHhDMCwgMHg0QSwKKzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MEQsIDB4MDAsCisweDNGLCAweDAwLCAweEJDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDBBLCAweDNCLCAweDA4LCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwOCwgMHhCQywgMHhBMCwgMHhBMCwgMHg4MSwgMHhDMCwgMHgwQiwKKzB4MTAsIDB4MUYsIDB4MDAsIDB4RkMsIDB4MzAsIDB4RjAsIDB4OTAsIDB4QzAsIDB4MDksIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAwLCAweEQzLCAweDAwLCAweDdFLCAweDAzLAorMHg3MCwgMHgwRCwgMHg4MCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzMCwKKzB4MDAsIDB4REEsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsCisweDAzLCAweDM0LCAweDBELCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHg4MCwgMHgwRCwgMHgwOCwgMHgyMCwgMHgwMCwgMHhCMiwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0MCwgMHgwQiwKKzB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4NTAsIDB4MDIsIDB4QzAsIDB4MDksIDB4MDAsIDB4MjEsIDB4QTAsIDB4QjQsCisweDAwLCAweEQwLCAweDAyLCAweEM0LCAweDBBLCAweDAwLCAweDJCLCAweDgwLCAweEI0LCAweDAwLCAweDEwLCAweDAyLCAweEMwLAorMHg0RSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMiwgMHg3OSwKKzB4MjAsIDB4RTksIDB4MDEsIDB4OTQsIDB4ODcsIDB4RDAsIDB4MUUsIDB4NjAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsCisweDA3LCAweEQwLCAweDFGLCAweDQwLCAweDdCLCAweDAwLCAweEU5LCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFGLCAweDQwLAorMHg3RSwgMHgwMCwgMHhFOSwgMHgyMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MDIsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsCisweDAwLCAweEQyLCAweDAxLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLAorMHgwMSwgMHg4MCwgMHgwRCwgMHgwMCwgMHgzNCwgMHg4MCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgwMCwKKzB4MzYsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NUEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDExLCAweDAwLCAweDVCLCAweDAwLCAweDc4LCAweDAxLCAweDcwLCAweDA1LCAweEUwLAorMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3RSwgMHgwMSwgMHhCMSwgMHgwNCwgMHhDMCwgMHgxNiwgMHgwMCwgMHg1QiwgMHgyMCwKKzB4NUMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTQsIDB4MDAsIDB4NUIsIDB4MjAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsCisweEMwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LAorMHg4RiwgMHg0MCwgMHgzNywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhFMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkEsIDB4MDAsIDB4NzAsIDB4MjMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RjQsIDB4MDgsIDB4RjAsIDB4MjMsCisweEMwLCAweDhGLCAweDAwLCAweDNGLCAweDQwLCAweEY0LCAweDA4LCAweEYwLCAweDAzLCAweEMwLCAweDRCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMSwgMHg5NywgMHgwMCwKKzB4N0MsIDB4MTYsIDB4NTAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4QTAsIDB4N0MsIDB4MDIsIDB4MzMsIDB4MDksCisweEMyLCAweDI1LCAweDIwLCAweDkzLCAweDQwLCAweDc0LCAweDAyLCAweDAyLCAweDA5LCAweDU0LCAweEE0LCAweDAwLCAweDk3LAorMHgwMCwgMHg3QywgMHgwNiwgMHgzMiwgMHgyOSwgMHhDMiwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OTEsIDB4MDUsIDB4MzQsIDB4ODYsIDB4MTAsIDB4MzksCisweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDEwLCAweEEwLCAweDA0LCAweDkxLAorMHgwMCwgMHgzNCwgMHgwNiwgMHhCMiwgMHgyOCwgMHg0MCwgMHhFMCwgMHgwOCwgMHg5NSwgMHgwMCwgMHgzMCwgMHgwNiwgMHg1MSwKKzB4MDgsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI0LCAweDAwLCAweEI1LCAweDA0LCAweEY0LCAweDAyLCAweDUwLCAweDZCLCAweDQwLCAweDJELCAweDAwLCAweEJELAorMHg4MCwgMHhENCwgMHg4MiwgMHgxOCwgMHgwQiwgMHg0MSwgMHgyQywgMHhDMCwgMHhCMSwgMHgwMCwgMHhENCwgMHgxMiwgMHgxMCwKKzB4MkIsIDB4NDAsIDB4MkQsIDB4OTAsIDB4QjAsIDB4ODAsIDB4RjQsIDB4MjIsIDB4MTIsIDB4MEIsIDB4NDIsIDB4NjAsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDNELCAweDAwLCAweEExLAorMHgwMCwgMHhGNCwgMHgwMiwgMHg1MCwgMHgwQSwgMHg0MCwgMHgyOCwgMHgyMCwgMHhBQywgMHgyOCwgMHhCNCwgMHgyMiwgMHg1MCwKKzB4MEEsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QTEsIDB4QzgsIDB4RjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkQsIDB4MDAsCisweEE0LCAweDAwLCAweEY0LCAweDIzLCAweDUwLCAweDBFLCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzOCwgMHgwNiwgMHgwMCwgMHgxNywgMHg4MCwgMHg3QywgMHgwMCwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUMsIDB4MDIsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsCisweDEzLCAweDAyLCAweDVDLCAweDAwLCAweDMyLCAweEExLCAweEMwLCAweDE1LCAweDAwLCAweDE3LCAweDBBLCAweDM4LCAweDA4LAorMHgzMCwgMHgwMywgMHhDOCwgMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjAsIDB4MjUsIDB4MDUsIDB4OUYsIDB4MzQsIDB4N0MsIDB4MDIsIDB4QjAsIDB4NDksIDB4QzEsIDB4MjcsIDB4MDAsCisweDlGLCAweDA0LCAweDJDLCAweDEyLCAweEYwLCAweDQ4LCAweEM5LCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDUyLAorMHhCMCwgMHgxOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg3NywKKzB4NDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4ODAsIDB4MkYsIDB4MDAsCisweEJGLCAweDA4LCAweERDLCAweDAyLCAweEY4LCAweDBCLCAweEMyLCAweDJGLCAweDAwLCAweDhGLCAweDAyLCAweDdDLCAweDAyLAorMHgzNCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHg5MywgMHgwMCwgMHhGQywgMHgwQSwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyQywKKzB4NDAsIDB4ODMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDQ3LCAweDAxLCAweDFELCAweDI1LCAweDQ0LCAweDAwLAorMHhEMSwgMHg0MSwgMHg0MSwgMHgwNywgMHgwMCwgMHgxRCwgMHgwNCwgMHg3NCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwNSwKKzB4MDgsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4QjAsIDB4MDEsIDB4NDIsIDB4MDQsIDB4MDAsIDB4MTEsIDB4NDAsIDB4NDQsCisweDAwLCAweDExLCAweDAxLCAweDQwLCAweDYxLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgzMSwgMHgxNSwgMHg4RCwgMHg0NCwgMHgxMCwgMHgwMiwgMHhEOCwgMHgwQywgMHg0MCwgMHgyMywKKzB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4NDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MTQsIDB4MzQsCisweDAyLCAweDEwLCAweDA4LCAweDUwLCAweDIwLCAweDgwLCAweDgxLCAweDIwLCAweDE1LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyQSwgMHgyNSwKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDAyLCAweDExLCAweDA5LCAweDQwLCAweDI1LCAweDIwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDkwLCAweDA4LCAweDYwLAorMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjIsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MDAsIDB4NUMsCisweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHgyMCwgMHgwOCwgMHg5MywgMHg4MCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgwMCwgMHg5MywgMHgwMCwKKzB4NUMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDQsIDB4OUYsIDB4MDAsIDB4NkMsIDB4NDIsIDB4MzAsIDB4MDksCisweDQwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LAorMHgwNSwgMHgwMCwgMHgxNywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDNCwgMHgwNywgMHgwMSwgMHgxNywgMHgwMCwKKzB4NEMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzMsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4NDAsIDB4QjAsIDB4MDEsCisweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMxLCAweDUxLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxQywgMHgwMiwgMHg3RCwgMHhEOCwKKzB4NDQsIDB4MDEsIDB4NzAsIDB4MjcsIDB4NDAsIDB4OUYsIDB4MDAsIDB4NTEsIDB4MjAsIDB4NkMsIDB4MDEsIDB4RDAsIDB4NzYsCisweDQyLCAweERGLCAweDAwLCAweDVELCAweDQwLCAweEVDLCAweDBELCAweDExLCAweDI3LCAweDQwLCAweDFDLCAweDAwLCAweDU5LAorMHgwMCwgMHhENCwgMHgwMSwgMHgxNCwgMHgwNiwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4MDAsIDB4RDUsIDB4NDAsIDB4MDQsIDB4MjYsIDB4RDAsIDB4MEMsCisweDQwLCAweEEzLCAweDAwLCAweEM1LCAweDAwLCAweDQ0LCAweDAzLCAweDU4LCAweDBDLCAweDQ4LCAweEYzLCAweDAzLCAweENELAorMHgwMCwgMHg0NiwgMHgwNywgMHg5MCwgMHgyQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0MCwgMHgwRiwgMHgwMCwKKzB4M0MsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDgwLCAweDM4LCAweDIwLCAweEVELCAweDQwLCAweDg1LCAweDAzLCAweDU4LCAweDBFLCAweDY4LCAweEVGLCAweDAwLCAweEY1LAorMHgwOSwgMHhBNCwgMHgyMywgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhGRCwgMHg0NSwgMHhBNCwgMHgwQiwgMHgxMCwKKzB4MDIsIDB4NDEsIDB4MkEsIDB4MDQsIDB4RjksIDB4MDQsIDB4OTYsIDB4MEIsIDB4MTIsIDB4MEUsIDB4NDUsIDB4MTAsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDU5LCAweDAwLCAweDc3LAorMHgwMSwgMHg4QywgMHgwNywgMHhGMSwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFNywgMHgxNSwgMHg4QywgMHgwNywgMHg3MCwKKzB4MTYsIDB4ODAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsIDB4REMsIDB4MDUsIDB4QjAsIDB4MUUsIDB4RDAsIDB4NUEsIDB4MDgsCisweEVGLCAweDA3LCAweENDLCAweDA2LCAweDMwLCAweDFFLCAweEMwLCAweDUxLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHg0MCwgMHg3QywgMHg4MywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MjMsIDB4MDAsIDB4REIsIDB4MDYsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsCisweENGLCAweDA4LCAweDdFLCAweDgzLCAweEYwLCAweDYwLCAweEQ1LCAweDE1LCAweDIwLCAweERCLCAweDA2LCAweDdDLCAweDAyLAorMHhEMCwgMHgwQywgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4MjAsIDB4N0QsIDB4MEEsIDB4RkYsIDB4MDEsIDB4REMsIDB4QTcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsCisweEU3LCAweDAxLCAweDhDLCAweDBGLCAweEIwLCAweDEzLCAweEM4LCAweDdCLCAweDAwLCAweEYzLCAweDAzLCAweENDLCAweDA3LAorMHgzMCwgMHgxQiwgMHhEMCwgMHg3OCwgMHhBMiwgMHhGQiwgMHgwMywgMHhDQywgMHgwNywgMHhGMCwgMHgxQSwgMHhDMCwgMHgxOCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsCisweEVDLCAweDE4LCAweEI0LCAweDgzLCAweEQwLCAweDBFLCAweDQyLCAweDNCLCAweDI4LCAweEUxLCAweDEwLCAweDk0LCAweDAzLAorMHg1MCwgMHgyMiwgMHg0NCwgMHgzQiwgMHgwNiwgMHhFNSwgMHgwMCwgMHhENCwgMHgwMywgMHg1MCwgMHg0MywgMHg0MCwgMHgyOCwKKzB4MDIsIDB4RTEsIDB4MDQsIDB4ODQsIDB4MTMsIDB4NzEsIDB4NEEsIDB4NDgsIDB4NTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDM5LCAweDEwLCAweEVELCAweDAwLCAweDk0LCAweDAzLAorMHhDMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwNCwgMHhGNSwgMHgwMCwgMHhFNCwgMHg0MywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzRiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4RDQsIDB4MDEsIDB4NTAsIDB4MEEsIDB4NjEsIDB4MTgsIDB4ODQsIDB4RTEsIDB4QjAsIDB4ODQsCisweDQyLCAweEQyLCAweDBBLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgyOCwgMHg2NSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNiwgMHgxMywgMHhEMCwgMHgzOSwgMHg0MCwgMHhGMywKKzB4MDAsIDB4QzUsIDB4MDMsIDB4MzQsIDB4MEIsIDB4NTAsIDB4QTAsIDB4NDAsIDB4RjMsIDB4MDAsIDB4REQsIDB4MDIsIDB4MTQsCisweDJBLCAweDUwLCAweDM4LCAweDYyLCAweDQwLCAweDA0LCAweEM5LCAweDUzLCAweDA1LCAweDA0LCAweDUwLCAweDI4LCAweDQwLAorMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhFNSwKKzB4MTAsIDB4OUYsIDB4MDEsIDB4NUMsIDB4NDMsIDB4RDAsIDB4QTEsIDB4QzQsIDB4MDcsIDB4MDIsIDB4RjcsIDB4MDEsIDB4RUMsCisweDA3LCAweDMwLCAweEIxLCAweEM4LCAweEI3LCAweDAwLCAweEZGLCAweDAxLCAweDVFLCAweDBFLCAweDEwLCAweDk5LCAweEM0LAorMHg0NCwgMHgwMCwgMHhFQiwgMHgwMCwgMHgwQywgMHg4MSwgMHhGMywgMHgzRCwgMHhDNiwgMHg1NCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjcsIDB4MDYsIDB4OUYsIDB4MDQsIDB4N0MsCisweDAzLCAweEYwLCAweDgxLCAweEMwLCAweEE3LCAweDEwLCAweERBLCAweDAwLCAweDVDLCAweDQzLCAweDc4LCAweDIxLCAweDgwLAorMHgzNywgMHgwQywgMHhENywgMHhCOCwgMHg3OCwgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHg0MCwgMHhENywgMHgwMCwKKzB4N0MsIDB4ODEsIDB4NzAsIDB4QUQsIDB4QzEsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDBGLCAweDAwLCAweDNCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLAorMHgwRSwgMHgwMCwgMHhGMywgMHgxMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwMywgMHg0MCwgMHgzRSwgMHgwMCwgMHhGMywgMHgwMCwKKzB4RkMsIDB4NDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RDQsIDB4NTQsIDB4MzAsIDB4MEYsCisweEMwLCAweDA0LCAweDI4LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLAorMHhDNiwgMHgwMCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwgMHg2MCwgMHgwMSwgMHhEQiwgMHgwMCwKKzB4NTQsIDB4MDMsIDB4RDAsIDB4MTEsIDB4NDAsIDB4RDMsIDB4MDAsIDB4REIsIDB4MDAsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MTgsCisweEMwLCAweDgzLCAweDIwLCAweEQxLCAweDAwLCAweDU0LCAweDg5LCAweDUxLCAweDRDLCAweDUwLCAweDg0LCAweDA0LCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhDNiwgMHgwMCwgMHgxOSwgMHgwMywKKzB4NzQsIDB4MTMsIDB4RDgsIDB4MzEsIDB4NDAsIDB4NjYsIDB4MDAsIDB4QzEsIDB4ODAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MTEsCisweDQwLCAweDY2LCAweDA0LCAweEQxLCAweDAwLCAweDQ0LCAweEM2LCAweDkwLCAweDFCLCAweDQwLCAweDA0LCAweDA2LCAweEY1LAorMHgwMCwgMHg0MCwgMHgwOSwgMHg1MCwgMHg0NSwgMHg0OCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4MDAsCisweDQwLCAweDI0LCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDI3LCAweDAwLCAweEM5LAorMHgwMCwgMHgwNCwgMHg4MiwgMHhDMiwgMHgxOSwgMHg0MCwgMHgwMiwgMHhBMCwgMHhEMSwgMHg0MCwgMHg1NCwgMHgwMiwgMHg1MCwKKzB4MDQsIDB4NDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDE4LCAweDA2LCAweDEwLCAweDFCLCAweDAwLCAweDdDLCAweDAzLCAweERBLCAweDAxLCAweEMwLCAweDI2LCAweDAwLCAweEYzLAorMHgwMCwgMHhDNCwgMHgwMywgMHhGMCwgMHgwMSwgMHhDNCwgMHgyNiwgMHgwMCwgMHhGMywgMHgwMCwgMHg1RCwgMHgwMCwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MDQsIDB4MDAsIDB4RTcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4MDksIDB4RDAsIDB4MDQsIDB4NjAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEI4LCAweDJGLCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhFMCwKKzB4MDMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEIsIDB4QzIsIDB4MEYsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBCLCAweEM0LCAweDE3LCAweDYyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg2RiwgMHgwMCwgMHhCRiwgMHgxMCwgMHhGQywgMHgwNSwgMHgzMCwKKzB4MTYsIDB4QzgsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MTQsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MTcsIDB4QzAsIDB4MkMsIDB4MDAsCisweDYzLCAweDAxLCAweEZDLCAweDBGLCAweDMwLCAweDRCLCAweEMwLCAweDVGLCAweDAwLCAweEYzLCAweDAxLCAweEJDLCAweDAyLAorMHhCMCwgMHgxRiwgMHhDOCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4NjcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDUsIDB4MDAsIDB4MTksIDB4NDAsIDB4RkYsIDB4MzAsCisweEZELCAweDAzLCAweDc0LCAweDBELCAweDEwLCAweDFELCAweDQyLCAweEU0LCAweDAwLCAweDk1LCAweDAxLCAweEY0LCAweDEzLAorMHgxMiwgMHgxOSwgMHg0MCwgMHg3NywgMHgwMCwgMHhGMSwgMHg0MSwgMHg3NCwgMHgwMiwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwRiwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsCisweDhELCAweDQwLCAweDc0LCAweDAwLCAweDAwLCAweDA4LCAweDQwLCAweEIzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDA4LAorMHgxNCwgMHgwRCwgMHg0OCwgMHhCMCwgMHgxMCwgMHg4NCwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHg4QywgMHg0MCwgMHgyMywKKzB4MDAsIDB4QzEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LCAweDM1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDEwLAorMHgxOCwgMHgwOSwgMHg0MCwgMHgzNywgMHgyMCwgMHhERCwgMHgwMCwgMHg3NiwgMHgyMywgMHgxMCwgMHgwRCwgMHg0OCwgMHgzMCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4MDQsIDB4MjMsIDB4MDAsIDB4RDEsIDB4NDAsIDB4NzQsCisweDA2LCAweDUwLCAweDBELCAweDQyLCAweDBGLCAweEEwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMCwgMHg3NywgMHgwMCwgMHg5RiwgMHgwMSwgMHgzQywgMHgwOSwgMHgzMCwgMHgwRCwgMHhDMiwgMHgzNywKKzB4MDAsIDB4REYsIDB4NjAsIDB4NUMsIDB4MTMsIDB4MzEsIDB4MDgsIDB4QzgsIDB4NjQsIDB4MDIsIDB4RDMsIDB4MDAsIDB4N0MsCisweDAzLCAweDM0LCAweDBELCAweEMwLCAweEQ3LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDE3LCAweEIyLCAweDZELCAweEMwLAorMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgzRCwKKzB4MjEsIDB4OUYsIDB4MDQsIDB4RkMsIDB4NDUsIDB4RjQsIDB4MEIsIDB4QzIsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDJCLCAweEQwLCAweDNGLCAweDQwLCAweEZELCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHg3RiwgMHgwMSwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMywgMHhGMSwgMHgyMywgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NUMsCisweDA5LCAweEI4LCAweDBELCAweEMxLCAweDM0LCAweDAwLCAweERCLCAweDUwLCAweDdDLCAweDAxLCAweEIwLCAweDBELCAweEMwLAorMHgyNywgMHg4MCwgMHg5RSwgMHgwNCwgMHgwQywgMHgwMywgMHhEMCwgMHgwRCwgMHhDNCwgMHhCNywgMHgwOCwgMHhERiwgMHg0MCwKKzB4N0MsIDB4MTMsIDB4MzIsIDB4MEQsIDB4QzIsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDM0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDBELCAweEYwLCAweDI5LCAweDQwLAorMHgzQywgMHgwMCwgMHhGRCwgMHgwMSwgMHgzNCwgMHgwQiwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzNywgMHg4MCwgMHg5RiwgMHgxMiwKKzB4NDQsIDB4MkIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MTEsIDB4MzQsIDB4MDMsIDB4QjAsIDB4MUQsCisweDQxLCAweDZGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLAorMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwQywgMHhEMCwgMHhCNCwgMHg1MCwgMHg3MCwgMHgwMSwgMHhDRCwgMHgwMiwKKzB4MjAsIDB4MTAsIDB4OTIsIDB4MDAsIDB4NEMsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MDEsIDB4MjQsIDB4MjMsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDA4LCAweDFDLCAweDBDLCAweDQwLCAweDBGLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4ODQsIDB4NDQsIDB4NTAsIDB4MUIsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4MzQsIDB4MDYsIDB4MTAsIDB4MUEsCisweDQwLCAweDdCLCAweDAwLCAweEI1LCAweDA5LCAweEE2LCAweDk3LCAweEQwLCAweDFBLCAweDQwLCAweDZCLCAweDAwLCAweEVELAorMHgwMSwgMHhGNCwgMHg4NiwgMHg5MCwgMHgxMiwgMHg0MCwgMHg3RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4MDQsIDB4Q0YsIDB4MDgsIDB4MUMsIDB4MDAsIDB4REEsIDB4MDgsCisweEM4LCAweDMwLCAweDE0LCAweENCLCAweDEwLCAweDJDLCAweDIwLCAweEIwLCAweDQ4LCAweEMwLCAweDIzLCAweDAyLCAweDhELAorMHgwMCwgMHgyQywgMHgyMywgMHhGMCwgMHg4QywgMHg0MCwgMHhBMywgMHgwMCwgMHhDRiwgMHg4QywgMHgzRSwgMHgwMCwgMHgzMCwKKzB4MEMsIDB4QzAsIDB4NEIsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDM4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLAorMHgxMiwgMHhGNCwgMHgyMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhERCwgMHgzNywgMHhGMCwKKzB4MEYsIDB4MDAsIDB4MkYsIDB4MDAsIDB4REYsIDB4MjksIDB4N0UsIDB4MjIsIDB4RjQsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMzLCAweDAwLCAweEQzLAorMHg0OCwgMHg3QywgMHgwMCwgMHg2MCwgMHgwQywgMHhDMCwgMHhCNCwgMHgwNCwgMHhERiwgMHgwNCwgMHg1QywgMHgwMCwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDcsIDB4MDEsIDB4NkMsIDB4MjcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFMSwgMHhDMCwgMHhCNCwgMHgwMCwgMHhEMCwKKzB4MEEsIDB4NDQsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MzgsIDB4MDAsCisweEVELCAweDAwLCAweDA0LCAweDEzLCAweDEwLCAweDBFLCAweDQwLCAweDJCLCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAyLAorMHg1MCwgMHgwMiwgMHg0MCwgMHg0QywgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4NzksIDB4MTAsIDB4RTEsIDB4MDUsIDB4QjQsIDB4NDQsIDB4RDgsIDB4MUYsIDB4NTEsIDB4NzgsIDB4MTMsCisweEU5LCAweDA1LCAweDk0LCAweDI1LCAweEQwLCAweDNBLCAweDQwLCAweEU4LCAweDAyLCAweEFELCAweDAxLCAweEE0LCAweDA3LAorMHg5MCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwNCwgMHhFRCwgMHgwOSwgMHhGNCwgMHgwQywgMHgxMCwgMHgwMiwgMHg0MCwgMHgxMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsCisweEMxLCAweDAxLCAweDM0LCAweDE2LCAweEQwLCAweDM4LCAweDQwLCAweDMwLCAweDEwLCAweENELCAweDAwLCAweDM0LCAweDA3LAorMHhEMCwgMHgxOCwgMHg0MSwgMHg3MCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHg5QywgMHg0MCwgMHg2MywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDYsIDB4NTAsIDB4OEMsIDB4NDAsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDIwLCAweDE1LCAweDAwLCAweDQzLCAweDExLCAweEZDLCAweDA1LAorMHhGMCwgMHgzNiwgMHhDMCwgMHgxNCwgMHgyMCwgMHg0RiwgMHgwMCwgMHhEQywgMHgxNSwgMHhGMSwgMHgyNywgMHhENCwgMHgxNCwKKzB4MDAsIDB4NzcsIDB4MUIsIDB4NkMsIDB4MDEsIDB4QjUsIDB4MTUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4QkMsCisweDAxLCAweDM0LCAweDM3LCAweEM0LCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHg0MiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywKKzB4MjAsIDB4MUYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDA4LCAweDcxLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDIyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NDUsIDB4MDYsIDB4NTAsIDB4MTksIDB4RDEsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDgsIDB4NUMsCisweDQyLCAweEYwLCAweDA5LCAweDQwLCAweDIyLCAweDQwLCAweDkzLCAweDAyLCAweDdDLCAweDE2LCAweEYwLCAweDI5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5MywgMHg4MiwgMHg3QywgMHgwNiwgMHgzNCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjAsIDB4MDAsIDB4QjEsIDB4MDMsIDB4NDQsCisweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDIwLCAweDEzLCAweDkxLCAweDQwLCAweEM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgyQywgMHgwMCwgMHg5MSwgMHg0MCwgMHhGNCwgMHgwRSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMiwgMHgyMCwgMHhCMSwgMHg4MywKKzB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQwLCAweDkxLCAweDA4LCAweDU0LCAweDFCLCAweEQwLCAweDY5LCAweDQwLAorMHgyNCwgMHgwMCwgMHg5MSwgMHg1MCwgMHg1MCwgMHgxQSwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwKKzB4NzQsIDB4MEEsIDB4RDgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NzQsIDB4NTIsIDB4MTAsIDB4MDksCisweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLAorMHgyMSwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MjgsIDB4NDAsIDB4QTAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MEEsIDB4ODAsIDB4MDgsCisweDQwLCAweEE2LCAweDAwLCAweDgxLCAweDAwLCAweDc0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNywgMHgwMCwgMHg1MywgMHgwMSwKKzB4NUMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDUsIDB4MTIsIDB4MTQsIDB4NUMsIDB4MDQsIDB4RjAsIDB4MDAsCisweEMwLCAweDQ3LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDA3LCAweDQwLCAweDUzLAorMHg4MSwgMHg3QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHg3NywgMHhFMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDIsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsCisweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDQwLCAweEZDLCAweDBBLCAweEYxLCAweDFCLCAweEMwLCAweEVGLCAweDAwLCAweEVGLAorMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwgMHgyQiwgMHgwMCwgMHg2RSwgMHgyMCwgMHg5RiwgMHg4MiwgMHhCQywgMHg1QSwgMHhFMCwKKzB4MEIsIDB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEEwLCAweDI5LCAweDAwLCAweEJGLCAweDAxLCAweENDLCAweDAyLCAweDM0LCAweDBCLCAweEQwLCAweDJDLCAweDQwLCAweEEzLAorMHgwMCwgMHhCQywgMHg0NiwgMHhCMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHhCQiwgMHgwMCwgMHhDNCwgMHgxNiwgMHgyNCwKKzB4NUIsIDB4QzAsIDB4QTcsIDB4MTAsIDB4QjMsIDB4MTUsIDB4Q0QsIDB4NDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAwLCAweDFELAorMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwNSwgMHg0MCwgMHg4NSwgMHgwMiwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwOCwgMHgzMCwKKzB4NTUsIDB4NDEsIDB4QzMsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NTQsIDB4MTQsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NDcsIDB4MDgsCisweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDExLCAweDAxLCAweDQwLCAweDYwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMiwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMiwgMHgxNCwgMHgwMiwgMHg5MCwKKzB4MDgsIDB4NjgsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDQsCisweDk5LCAweDAwLCAweDA0LCAweDRBLCAweDEwLCAweDI4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDIwLCAweDA0LCAweDUyLAorMHg5MSwgMHgwOSwgMHg0MiwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NjQsIDB4MjQsIDB4MDAsCisweDkwLCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDg5LCAweDRDLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDE0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgxOSwgMHg0MCwgMHg2MCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4NjUsIDB4MDIsCisweDhGLCAweDA5LCAweDVDLCAweDEyLCAweEIwLCAweDE4LCAweDQwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDRBLAorMHhCMCwgMHgzQiwgMHhDMCwgMHg2RiwgMHgwMCwgMHg5QiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHhFRiwKKzB4MDEsIDB4OTMsIDB4ODAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4NDksIDB4RDAsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDZELCAweDEyLAorMHhGMCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyMywKKzB4MDEsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4NjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweDcxLCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgxMCwgMHgxMywgMHgwOCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4QzEsIDB4MTMsIDB4MDgsIDB4MUMsIDB4MTAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsCisweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweDMxLCAweDAxLCAweEMwLAorMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhEQywKKzB4MDYsIDB4NzEsIDB4MDAsIDB4QjAsIDB4MUQsIDB4NTAsIDB4MDcsIDB4NDIsIDB4MUIsIDB4ODAsIDB4NzEsIDB4MDEsIDB4QzQsCisweDBELCAweDEwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDcxLCAweDAyLCAweEY0LCAweDYxLCAweEIwLCAweDA1LCAweDQwLAorMHgxNywgMHgwMCwgMHg2RCwgMHgwMCwgMHhGNCwgMHgwMSwgMHgxMSwgMHgwNCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4RTIsIDB4MDAsIDB4ODEsIDB4MTAsIDB4MzQsCisweDFFLCAweDE4LCAweDA0LCAweDQwLCAweDIzLCAweDEwLCAweDg1LCAweDUxLCAweDE0LCAweDBELCAweDEwLCAweDBDLCAweDQwLAorMHgzMywgMHgwMCwgMHhEOSwgMHgxMywgMHgzNCwgMHgwNiwgMHgxNCwgMHgxQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgxMCwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDgyLCAweDdDLCAweDAwLCAweEExLCAweDAwLCAweEY0LCAweDAzLCAweDUwLCAweDA2LCAweDQwLAorMHgzMywgMHgwMCwgMHhBNSwgMHgwMSwgMHg4NCwgMHgwOSwgMHgxMSwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMywgMHhFMSwgMHgwMiwKKzB4QjQsIDB4MzMsIDB4OTAsIDB4MEUsIDB4NjEsIDB4M0IsIDB4MDksIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MEUsCisweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LAorMHg2OCwgMHgwMCwgMHhBMywgMHgwMSwgMHhCQywgMHgwNiwgMHgzMCwgMHgxNiwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFNSwgMHgwMSwKKzB4OUMsIDB4MDUsIDB4MzAsIDB4M0UsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUIsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUUsCisweEMwLCAweEZCLCAweDAwLCAweEFGLCAweDAxLCAweDNDLCAweDAxLCAweDMwLCAweDFBLCAweEMwLCAweDUzLCAweDYwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHg0MCwgMHg5RCwgMHgwMCwKKzB4M0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsCisweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4NkQsIDB4MDAsIDB4QkIsIDB4MjEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MTcsCisweEMwLCAweDZGLCAweDAwLCAweEIzLCAweDAxLCAweERFLCAweDA3LCAweDMxLCAweDlFLCAweEM4LCAweDdDLCAweDAwLCAweEFFLAorMHgwMSwgMHhFQywgMHgwNywgMHhGOCwgMHg5RiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhCMywgMHg0MSwgMHhDQywgMHgwNiwgMHgzMCwKKzB4MUIsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDEwLCAweDI5LCAweDAwLCAweEFELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDA4LCAweEExLAorMHgwMCwgMHg4NCwgMHgxMywgMHhCMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMiwgMHg4NCwgMHgwMywgMHhEMCwKKzB4MEUsIDB4QzAsIDB4M0EsIDB4MDIsIDB4QTEsIDB4MDAsIDB4OTQsIDB4MDIsIDB4QjAsIDB4MEUsIDB4NDQsIDB4NTQsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDI5LCAweDAwLCAweEFELAorMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgyMywgMHgwMCwgMHhBMSwgMHgwMCwgMHhENCwgMHgwMSwgMHgxMSwKKzB4MUYsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDQsIDB4N0MsIDB4MDAsCisweDgxLCAweDAwLCAweDg0LCAweDAxLCAweDUwLCAweDBCLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMSwgMHgzNCwgMHg0MSwgMHhEMCwKKzB4MDQsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MzMsIDB4OTAsIDB4MkMsIDB4NDEsIDB4MzAsIDB4MjAsCisweENELCAweDBDLCAweDA0LCAweDAxLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDA0LCAweEMxLCAweDAwLCAweDU0LCAweDAzLAorMHhEMCwgMHgzQywgMHg0MCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QTgsIDB4MjUsIDB4MTAsIDB4REYsIDB4MTEsIDB4N0MsIDB4OEEsIDB4RjAsIDB4OEQsIDB4QzEsIDB4MjcsIDB4MDAsCisweDkzLCAweDAwLCAweDVDLCAweDA1LCAweDMxLCAweDBELCAweEQwLCAweDM0LCAweDAxLCAweDRGLCAweDAyLCAweDZDLCAweDAxLAorMHhGMSwgMHgwQywgMHhDMCwgMHhCNCwgMHg0MCwgMHg5MywgMHgwMCwgMHg0QywgMHhBQSwgMHg3MCwgMHgyOSwgMHhDMCwgMHg3NCwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDI1LCAweEMwLCAweDM3LCAweDAwLCAweDhGLCAweDAwLCAweDdFLCAweDAxLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwOSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDZGLCAweDAwLCAweEFGLCAweDAwLCAweERDLCAweDAyLAorMHgzNCwgMHgxRiwgMHgwMCwgMHg2RiwgMHgwMCwgMHhERiwgMHgwMCwgMHhFQywgMHg4OSwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4NzAsIDB4NEQsIDB4RDAsIDB4M0MsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDBCLCAweEMxLCAweDA3LCAweDI2LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMSwgMHgyMCwgMHgzNiwgMHgxMCwgMHg5RCwgMHgwMywgMHgwNCwgMHgwMiwgMHgxMCwgMHg4OSwgMHg0MywgMHgzNywKKzB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDUsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDMsIDB4NDQsCisweDE5LCAweDEwLCAweDBELCAweDQyLCAweDM0LCAweDAwLCAweENELCAweDAyLCAweDQ0LCAweDA2LCAweDEwLCAweDE5LCAweDQwLAorMHgyNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNiwKKzB4MDEsIDB4REQsIDB4MDYsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NjAsCisweDAzLCAweEQwLCAweDBELCAweDQ0LCAweDM3LCAweDAwLCAweERELCAweDAxLCAweDA0LCAweDg1LCAweDUwLCAweDBELCAweDQwLAorMHgzNCwgMHgxMCwgMHg5RCwgMHg1MCwgMHg0NCwgMHgwNiwgMHgxMCwgMHg0OSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDAzLCAweDEwLCAweDA0LCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLAorMHgzMywgMHg4MCwgMHhERCwgMHhBMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHhDMCwKKzB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDQsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDE4LCAweDI2LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDAyLCAweDMwLCAweDBELCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwKKzB4NEMsIDB4MDEsIDB4NzAsIDB4MDksIDB4ODAsIDB4M0MsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDksCisweEMwLCAweDA3LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LAorMHgxRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgwMCwKKzB4QkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkQsIDB4MDEsIDB4RDAsIDB4MEIsCisweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweEJDLCAweDAyLCAweEYwLCAweDBBLCAweEM0LCAweDE3LCAweDYyLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhCMywgMHgwQywKKzB4REMsIDB4MDAsIDB4MzAsIDB4NEYsIDB4QzAsIDB4M0MsIDB4MDEsIDB4RjMsIDB4MTgsIDB4RkMsIDB4MzIsIDB4NzAsIDB4MTcsCisweEMwLCAweDdGLCAweDAwLCAweDVCLCAweDAxLCAweDhDLCAweDA2LCAweDMyLCAweDFBLCAweEMyLCAweDdFLCAweDAwLCAweDNCLAorMHgwOCwgMHhDRCwgMHgwMCwgMHhCMCwgMHgwMywgMHhDMiwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4MzcsIDB4MDEsIDB4OTEsIDB4OEUsIDB4NDQsIDB4MjcsIDB4MTAsIDB4M0YsCisweDQwLCAweEJDLCAweDQwLCAweEY1LCAweDI2LCAweDc0LCAweDM4LCAweDEwLCAweDA1LCAweDQ0LCAweDc3LCAweDAwLCAweDUzLAorMHgwMSwgMHg1NCwgMHgwNSwgMHg1MiwgMHgxOSwgMHg0MCwgMHg1NSwgMHgwMCwgMHgxMSwgMHgwNiwgMHg0NCwgMHg4MiwgMHgxMCwKKzB4MDEsIDB4QzAsIDB4MEUsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweEEwLCAweDMzLCAweDA0LCAweDgxLCAweDAwLCAweDU0LCAweDAzLCAweDEwLCAweDJDLCAweDQ0LCAweEIyLCAweDA1LCAweEMxLAorMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHg0NCwgMHg0MSwgMHgzMSwgMHgwMCwgMHg0RCwgMHgwMCwgMHg1NCwgMHgwMywgMHgxMCwKKzB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4ODksIDB4MDIsIDB4MDQsIDB4MjEsIDB4RDAsIDB4MTAsIDB4NDIsIDB4NEYsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMxLCAweDAwLCAweDkxLAorMHgwMSwgMHg0NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHg4NCwgMHgxMCwKKzB4MDUsIDB4NDEsIDB4MzcsIDB4MDEsIDB4NTEsIDB4MDEsIDB4NTQsIDB4MDksIDB4NTAsIDB4MUQsIDB4MDAsIDB4MzUsIDB4MDAsCisweDExLCAweDAyLCAweDQ0LCAweDgzLCAweDUxLCAweDExLCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgzNiwgMHgwMCwgMHgxMywgMHgwNywgMHgxMCwgMHgxNywgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MzYsIDB4MDgsIDB4RDMsIDB4NDAsIDB4N0MsIDB4NDQsIDB4NTAsIDB4QjEsIDB4RTAsIDB4MzUsIDB4MjAsCisweDVCLCAweDA3LCAweDVDLCAweDBCLCAweDMwLCAweDE4LCAweDgwLCAweDM2LCAweDAwLCAweDFCLCAweDAyLCAweDRDLCAweDI4LAorMHhGNCwgMHgxOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MEYsIDB4ODAsIDB4M0QsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjQsIDB4MEYsIDB4QzAsIDB4MzksIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDEzLCAweEMwLCAweDdGLCAweDAwLCAweDc5LCAweDEwLCAweEZDLCAweDEzLAorMHhFMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMiwgMHhCQywgMHgwNCwgMHhCMCwgMHgwMiwgMHhDMCwgMHgxRSwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsCisweDFGLCAweDA0LCAweDRDLCAweDAzLCAweDcwLCAweDBDLCAweEUxLCAweDM1LCAweDA0LCAweEQ3LCAweDA4LCAweDRDLCAweDAyLAorMHg3MCwgMHgyNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMiwgMHg1QywgMHgwQiwgMHhCMCwgMHg0OSwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4NUIsIDB4MDAsIDB4NEMsIDB4NDksIDB4MzQsIDB4MDksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDM0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAzLAorMHgxMSwgMHgxRiwgMHhDNCwgMHhGQywgMHgwNCwgMHhGMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHgwNSwgMHg0MCwgMHg3MCwKKzB4MDAsIDB4NEIsIDB4NDEsIDB4NjgsIDB4MkYsIDB4QjAsIDB4MkQsIDB4NDAsIDB4QjAsIDB4MDEsIDB4NTEsIDB4MDAsIDB4NDQsCisweDg5LCAweDAwLCAweDE5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHgzMiwgMHgwMCwgMHgxRCwgMHgwMCwgMHgzNCwgMHg4MywgMHg1MCwgMHgxQywgMHg0MCwgMHg3MywKKzB4ODAsIDB4QzEsIDB4MjYsIDB4NjQsIDB4MEUsIDB4MTAsIDB4MDAsIDB4NDgsIDB4MzEsIDB4MDAsIDB4QzUsIDB4MDMsIDB4NzAsCisweDBGLCAweDkwLCAweDAwLCAweDQ4LCAweDMxLCAweDIxLCAweDU5LCAweDBGLCAweDA0LCAweDI0LCAweDEwLCAweDA4LCAweDYwLAorMHgwRiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHg3QSwKKzB4ODAsIDB4NkQsIDB4NTEsIDB4OTUsIDB4NDcsIDB4MTAsIDB4OUUsIDB4NDEsIDB4NzAsIDB4ODAsIDB4RTEsIDB4ODEsIDB4QTYsCisweDA3LCAweDE0LCAweDEyLCAweDAwLCAweDc4LCAweDAwLCAweDY5LCAweDA1LCAweEI0LCAweDQ3LCAweDk5LCAweERBLCAweDQwLAorMHg1RCwgMHgwMCwgMHhBMSwgMHg0OSwgMHgwNCwgMHgyNiwgMHgxMCwgMHgzMiwgMHg0MSwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MjAsIDB4MUMsCisweDAzLCAweDUwLCAweDhDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDJDLCAweDEzLCAweDMwLCAweDQxLCAweEMwLAorMHgzMywgMHgyNCwgMHg0NywgMHgxNSwgMHgzQywgMHgwMywgMHhCMCwgMHg1QywgMHhDOCwgMHgyMSwgMHgwOCwgMHg4QiwgMHgwNSwKKzB4MEQsIDB4MDgsIDB4MzAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDIwLCAweEZGLCAweDAwLCAweEU4LCAweDAzLCAweEYwLCAweEFFLCAweEMwLAorMHgzRiwgMHg0MCwgMHhGQiwgMHgwMCwgMHhERCwgMHgwMywgMHhGMSwgMHgwMywgMHhDMCwgMHgzQiwgMHgwMCwgMHg0NSwgMHg4MCwKKzB4RUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0EsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjQsIDB4OEYsCisweEMwLCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLAorMHg3NywgMHgyMCwgMHg1MywgMHgyMCwgMHg3RSwgMHg4MywgMHhGMCwgMHhDRCwgMHhDMCwgMHgzNCwgMHgxMSwgMHhERiwgMHg0NCwKKzB4NUMsIDB4MDEsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MzIsIDB4MDAsIDB4MUIsIDB4MDAsIDB4MUMsIDB4MDMsIDB4NzAsIDB4MEQsCisweEMyLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDRELCAweDAzLCAweDMwLCAweDBELCAweEMyLCAweDQwLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5OCwgMHgzRCwgMHgwMCwgMHg2MSwgMHgwMCwKKzB4QjQsIDB4ODMsIDB4MTQsIDB4MEUsIDB4NDAsIDB4QjgsIDB4MDUsIDB4RkQsIDB4MTYsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDIsCisweDQwLCAweDM4LCAweDgwLCAweDI3LCAweDQwLCAweDg0LCAweDAzLCAweDExLCAweDBFLCAweDQwLCAweDE4LCAweDAwLCAweEVELAorMHgwMCwgMHg4NSwgMHgwMywgMHgxMCwgMHgwNywgMHg0MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTEsIDB4MDEsIDB4RjYsIDB4ODcsIDB4RDIsIDB4NEUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDMzLCAweDQwLCAweDdCLCAweDAwLCAweDMxLAorMHgwMSwgMHg5NCwgMHgwNywgMHg1OCwgMHgxRiwgMHg0MSwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHgwNCwgMHgwNywgMHg1NCwKKzB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDIwLCAweDMzLCAweDAwLCAweEMxLCAweDQzLCAweDM2LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweERELAorMHgwMCwgMHg0NCwgMHgxRiwgMHhEMCwgMHg0OCwgMHg2MCwgMHgyMSwgMHgwMiwgMHgwNSwgMHgwMSwgMHgwNiwgMHgwRiwgMHgxMCwKKzB4M0MsIDB4NDAsIDB4NzIsIDB4MDAsIDB4Q0QsIDB4MTksIDB4MDQsIDB4MjMsIDB4NTAsIDB4MkQsIDB4NDAsIDB4NTgsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDcxLAorMHgwNSwgMHhGQywgMHg0OSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhEQywgMHgwRCwgMHhGMCwKKzB4MTcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NjMsIDB4MDIsIDB4OUMsIDB4NkQsIDB4NzAsIDB4MjcsIDB4RTAsIDB4MUUsIDB4MDksCisweDdGLCAweDAyLCAweENDLCAweDI1LCAweDcwLCAweDg3LCAweEMwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgzMCwgMHg3QywgMHgxMCwgMHg3NCwKKzB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDgsCisweDE3LCAweDU4LCAweDdDLCAweDAwLCAweEYwLCAweDYxLCAweEMwLCAweDg1LCAweDAwLCAweDFFLCAweDgyLCAweDNDLCAweDAwLAorMHg5MCwgMHgyMSwgMHhEMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4NjcsIDB4MDEsCisweDlGLCAweDAxLCAweDY4LCAweDA2LCAweDMyLCAweDA5LCAweEMyLCAweDI3LCAweDAwLCAweDkyLCAweDIwLCAweDVDLCAweDA2LAorMHg3MCwgMHgxOSwgMHhEMCwgMHgyNCwgMHgwMCwgMHg4QSwgMHgwNSwgMHg0NCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMiwgMHg0MCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsCisweDlELCAweDExLCAweDM0LCAweDAyLCAweDEwLCAweDU5LCAweDQwLCAweEU3LCAweDAwLCAweDlELCAweDhCLCAweDQ0LCAweDA2LAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwOCwgMHg0NCwgMHg4QSwgMHgxMCwgMHg4OCwgMHg0MCwgMHhFNCwKKzB4MjAsIDB4OUQsIDB4MDcsIDB4NDQsIDB4MEEsIDB4NTAsIDB4MjksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDA4LCAweDc0LCAweDEyLAorMHg1MCwgMHg4OSwgMHg0MiwgMHgyNywgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHg1MiwgMHg1MCwgMHgwOSwgMHg0OCwgMHgyNywKKzB4NDAsIDB4OUQsIDB4OTAsIDB4NTQsIDB4QTIsIDB4NTMsIDB4MEQsIDB4NjEsIDB4NjQsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NTQsCisweDJBLCAweDUxLCAweDM5LCAweDQwLCAweDcwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgyOCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgxNCwgMHg3NCwgMHg1MiwgMHgxNSwgMHg0OCwgMHg0MSwgMHgyMywKKzB4MjUsIDB4Q0QsIDB4MTQsIDB4MTQsIDB4NTIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDQsCisweDAyLCAweDExLCAweDA4LCAweDYwLCAweDIwLCAweDAwLCAweDhELCAweDA4LCAweDE0LCAweDAyLCAweDUwLCAweDQ4LCAweDUxLAorMHg1MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzMCwgMHgwNiwKKzB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MTAsIDB4NzAsIDB4NDEsIDB4QzgsIDB4MDcsIDB4MDEsIDB4MUYsIDB4MDQsIDB4N0MsCisweDEwLCAweDcwLCAweDAxLCAweEM4LCAweDA3LCAweDA4LCAweDE3LCAweDAwLCAweDU4LCAweDAxLCAweDcyLCAweDAxLCAweEQwLAorMHgxNCwgMHgwMCwgMHgwQiwgMHgxNiwgMHg1QywgMHg1MCwgMHg3MCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTgsIDB4MjUsIDB4MDUsIDB4QkYsIDB4MzQsIDB4QkMsCisweDAyLCAweEY2LCAweDA4LCAweEMwLCAweDI3LCAweDA1LCAweDlGLCAweDE0LCAweEU0LCAweDUyLCAweEI0LCAweDRBLCAweEMxLAorMHgyRiwgMHgxMCwgMHhBQiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwNCwKKzB4RUQsIDB4NTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLCAweEJGLCAweDExLCAweEJDLCAweDAyLCAweEM0LCAweDBCLCAweEMwLAorMHg2RSwgMHgwMSwgMHhCRiwgMHg1NCwgMHhGQywgMHgzMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyOSwgMHg5MCwgMHhCMywgMHgwMCwKKzB4QUQsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjcsIDB4MDAsIDB4Q0MsIDB4MTIsIDB4MzYsIDB4MEYsCisweEMwLCAweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LAorMHg0NywgMHgwNSwgMHgxRCwgMHg4NywgMHg3NCwgMHgwMCwgMHgxMCwgMHg4MSwgMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwKKzB4N0MsIDB4MzAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MDcsIDB4ODAsIDB4NTUsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTIsIDB4MDUsCisweDU0LCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ1LCAweDI4LCAweDU0LCAweDAxLCAweDQwLCAweDczLCAweDYwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHgyMSwgMHgwMCwgMHhDRCwgMHgxMCwKKzB4NzQsIDB4MjcsIDB4QzAsIDB4MEMsIDB4NDAsIDB4QTMsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MTMsIDB4RDIsIDB4MDgsCisweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAwLCAweDI0LCAweDAzLCAweDkwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDg1LAorMHg4MCwgMHgwNCwgMHgwMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzYsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEMyLCAweDA5LCAweDQ4LCAweDI3LCAweDAxLCAweDk1LAorMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOSwgMHg0NCwgMHhBNCwgMHgwMiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyMiwgMHg1MCwKKzB4MDksIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEE4LCAweDI3LCAweDAwLCAweDlELCAweDAxLCAweDNDLCAweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDA4LCAweDlGLAorMHg0MCwgMHg3QSwgMHg0MiwgMHhGMCwgMHhCOSwgMHhDMCwgMHgyMSwgMHg4MCwgMHg5MSwgMHgwMCwgMHgyQywgMHgwMiwgMHhCMCwKKzB4MTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTcsIDB4MDQsIDB4NEMsIDB4MDIsIDB4MzAsIDB4NDksIDB4QzAsIDB4MTcsIDB4MjgsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI1LCAweDIwLCAweDlGLAorMHgwNCwgMHg3QywgMHgxNiwgMHhGNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwQywgMHg5RiwgMHgyMCwgMHg1RSwgMHg1MiwgMHhGMCwKKzB4MTksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzEsIDB4MjcsIDB4MDAsCisweDlGLCAweDUzLCAweDdDLCAweDAyLCAweEYwLCAweDQ5LCAweEMxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHg0MiwgMHg3QywgMHgwMCwgMHg3MCwKKzB4MTEsIDB4Q0MsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDEyLCAweDMwLCAweDRDLCAweDQwLCAweDcwLCAweDAxLCAweEMwLCAweDg1LCAweDA5LCAweDBGLCAweDhBLCAweDVDLCAweDAwLAorMHgzNCwgMHgyMSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MEEsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4NDAsIDB4OUYsIDB4MDAsCisweDcxLCAweDgwLCAweEM0LCAweDAxLCAweEQwLCAweDA1LCAweEMwLCAweDlGLCAweDAwLCAweDYxLCAweDQxLCAweEM1LCAweDA5LAorMHgxMCwgMHgwNiwgMHg0MiwgMHg1OCwgMHgwOCwgMHg3RCwgMHgyMSwgMHhDNCwgMHgwOSwgMHgxMCwgMHgwNywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDAwLCAweDQ4LCAweDczLCAweDgwLCAweEM5LCAweDExLCAweDE0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHhCMywgMHgwNiwgMHhDMSwgMHg4OCwgMHgwNCwgMHgwMywgMHg1MSwgMHgyQywgMHg0MCwgMHgzMSwKKzB4MDIsIDB4Q0QsIDB4MDEsIDB4NTQsIDB4NDMsIDB4OTAsIDB4MkMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg4LCAweDM4LCAweDAxLCAweEVELCAweDgwLCAweEY0LCAweDAzLAorMHgxNCwgMHgwMiwgMHg0MCwgMHhGQiwgMHgwMCwgMHhFMSwgMHgwMywgMHg5NCwgMHgwMywgMHhEMCwgMHg4RSwgMHg2NCwgMHgyQiwKKzB4NDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDQsIDB4MTgsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QzQsCisweDAzLCAweDkxLCAweDFDLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHg4MSwgMHhCNCwgMHgwNywgMHg3MCwgMHgxMiwgMHhDQSwgMHg3RiwKKzB4MDAsIDB4NEIsIDB4MDEsIDB4OUQsIDB4MDUsIDB4RjIsIDB4MUUsIDB4QzgsIDB4N0IsIDB4ODAsIDB4NjIsIDB4MDEsIDB4OEMsCisweDA3LCAweDcwLCAweDFFLCAweEU4LCAweDY5LCAweDIwLCAweEZGLCAweDAxLCAweERDLCAweDg1LCAweEIwLCAweDFFLCAweEQwLAorMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHhCNSwKKzB4MEEsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI1LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLCAweDQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwOSwgMHhDMiwgMHg0MCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4RkQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsCisweDg3LCAweEIwLCAweDE3LCAweDgwLCAweDVGLCAweDAwLCAweEZGLCAweDQxLCAweEZDLCAweDA3LCAweEY5LCAweDlFLCAweEMwLAorMHg1OCwgMHgwMCwgMHg3MywgMHg4MSwgMHg4QywgMHg4NiwgMHhCMCwgMHg5RSwgMHhDMCwgMHg3RCwgMHgwOCwgMHhERiwgMHgwMSwKKzB4RkMsIDB4MDcsIDB4MzQsIDB4MTcsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LCAweDAwLCAweDdELCAweDA4LCAweDg0LCAweDIzLCAweDEwLCAweDgyLCAweDQwLAorMHgxQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg2MiwgMHgxOCwgMHgwMSwgMHg2QiwgMHgwNCwKKzB4ODQsIDB4MjIsIDB4MTAsIDB4MUMsIDB4QzAsIDB4MkEsIDB4MDQsIDB4OEQsIDB4MEQsIDB4QjQsIDB4MjksIDB4QjQsIDB4MDcsCisweDQwLCAweDU0LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhDNCwgMHgwMywgMHg5MCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2RCwgMHgwMCwKKzB4QjQsIDB4MDEsIDB4RDAsIDB4MEYsIDB4NUEsIDB4MTgsIDB4MjAsIDB4NzEsIDB4MDAsIDB4RjQsIDB4NDMsIDB4RDAsIDB4NEYsCisweDQwLCAweDJCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweDkwLCAweDBFLCAweDQwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgzMSwgMHg4MCwgMHg4RCwgMHgyMiwKKzB4MDQsIDB4MEIsIDB4MTksIDB4MDgsIDB4NDAsIDB4MDcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDgsIDB4RDEsIDB4MkMsCisweDQwLCAweDUwLCAweDAwLCAweDQ5LCAweDAwLCAweDM0LCAweDRBLCAweDUxLCAweDNDLCAweDQwLCAweEUzLCAweDA0LCAweDBELAorMHgxMCwgMHgzNCwgMHgwMCwgMHg5MCwgMHgyOCwgMHg1MSwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4M0QsIDB4MTAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4MEIsIDB4QjAsIDB4MDEsCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDFBLCAweEYwLCAweDJGLCAweEMwLCAweDMwLCAweDA0LCAweEMxLAorMHgyMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwQywgMHhDQywgMHhBMywgMHgwMCwgMHg1RCwgMHgyMCwgMHg3QywgMHgwQSwgMHg5MCwKKzB4MjksIDB4NDgsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDM3LCAweDI4LCAweDlGLCAweDBDLCAweDdELCAweDIzLCAweEYwLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweDFGLAorMHgwMiwgMHg3QywgMHg0QSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHhDMCwgMHhENywgMHg1MCwgMHg0OSwgMHgwQSwgMHhBMCwKKzB4Q0QsIDB4MDAsIDB4QTYsIDB4MDAsIDB4MEYsIDB4MDgsIDB4NzgsIDB4MTIsIDB4NzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDEwLCAweDJGLAorMHgwMCwgMHhFQywgMHg0NywgMHhCMCwgMHgwMiwgMHhEMCwgMHgyQywgMHgwMCwgMHgzMywgMHgwMCwgMHhCQywgMHg4MCwgMHhCMCwKKzB4MEYsIDB4QzMsIDB4M0YsIDB4MDAsIDB4N0YsIDB4QzAsIDB4RUMsIDB4ODAsIDB4NzEsIDB4MEIsIDB4QzAsIDB4MkUsIDB4MDgsCisweDczLCAweDAwLCAweDBELCAweDAyLCAweDE0LCAweDBBLCAweEQwLCAweDExLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgyNSwgMHgwNCwgMHgyNywgMHgxMCwKKzB4MjEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MTEsIDB4MDUsIDB4NzQsIDB4MTYsIDB4MTIsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MTAsCisweEQ1LCAweDAxLCAweDA0LCAweDI0LCAweDEwLCAweDE5LCAweDQ1LCAweEU0LCAweDAxLCAweDU1LCAweDBBLCAweDQ0LCAweDA2LAorMHg1NCwgMHg3MSwgMHg0MiwgMHgxNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4ODEsIDB4NjQsIDB4MDMsIDB4OTAsIDB4MDUsIDB4NDksIDB4QzQsIDB4ODAsCisweDkxLCAweDAxLCAweDc2LCAweDA2LCAweDkwLCAweDBELCAweDQwLCAweEI3LCAweDAwLCAweDU1LCAweDAxLCAweDY2LCAweDhBLAorMHg1MCwgMHgxRCwgMHg2MCwgMHg2NiwgMHg4MCwgMHg1NSwgMHgwMiwgMHg0NCwgMHgwNiwgMHg1NCwgMHgxMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDgsCisweDBELCAweDAwLCAweDQ0LCAweDAzLCAweDE0LCAweDAwLCAweDQwLCAweDAwLCAweDQ4LCAweDgxLCAweDQwLCAweDM2LCAweDAyLAorMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHgxMSwgMHgwOCwgMHg0NCwgMHgwMiwgMHgxMCwgMHg0RCwgMHg2MCwgMHgwNCwKKzB4QzAsIDB4MDUsIDB4MDYsIDB4MDQsIDB4MDAsIDB4NTgsIDB4MDAsIDB4NDAsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDNFLCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDgzLAorMHhCMCwgMHgwMSwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHgwRCwgMHhDOCwgMHgzNywKKzB4NDAsIDB4MUYsIDB4MDIsIDB4NkMsIDB4MDIsIDB4NzAsIDB4RTksIDB4QzMsIDB4MjYsIDB4ODAsIDB4OTMsIDB4MTYsIDB4NEMsCisweDAyLCAweDcwLCAweDA5LCAweEMyLCAweDAxLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4NSwgMHhBMCwgMHgzRiwgMHgyMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDgsIDB4MkYsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDQxLCAweEMwLCAweDJGLCAweDAwLCAweDNGLCAweDA0LCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwKKzB4MDAsIDB4NjMsIDB4MDQsIDB4Q0MsIDB4MzIsIDB4NzIsIDB4MUYsIDB4QzgsIDB4MkMsIDB4MDMsIDB4NzIsIDB4MDEsIDB4Q0MsCisweDA1LCAweDcwLCAweDBCLCAweEMwLCAweDNELCAweDAwLCAweEJCLCAweDgwLCAweEVDLCAweDA0LCAweEQwLCAweDlCLCAweEQwLAorMHg1QywgMHg0QSwgMHhGMywgMHgwMSwgMHhDQywgMHgxMiwgMHhGMSwgMHgxNywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4N0YsIDB4MDAsIDB4NTEsIDB4MDMsIDB4NDQsCisweEIyLCAweDEyLCAweDFGLCAweDQwLCAweDI0LCAweDEzLCAweEQxLCAweDAxLCAweDQ0LCAweDA3LCAweDEwLCAweDNELCAweDQwLAorMHhGQywgMHgwMCwgMHhCMSwgMHgwMywgMHg0NCwgMHg4MCwgMHhEMCwgMHg0NSwgMHg0MCwgMHgwNCwgMHgwMSwgMHhGMSwgMHgyMSwKKzB4NDQsIDB4MjYsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MDUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweDU1LCAweDAyLCAweDA0LCAweDEyLCAweDUwLCAweDBDLCAweDQwLAorMHgyMSwgMHgwMSwgMHg5MSwgMHgwMCwgMHgxNiwgMHgwMiwgMHg1MCwgMHg4OCwgMHg0MCwgMHgzMSwgMHgwMiwgMHg4OSwgMHgwOCwKKzB4MjQsIDB4MDAsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MzAsIDB4ODgsIDB4QzEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4RDIsIDB4MDgsCisweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LAorMHgzNSwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHg4MiwgMHg1MCwgMHgwRCwgMHg0MCwgMHgyNSwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4MTAsIDB4MjIsIDB4MDAsIDB4MDksIDB4NDAsIDB4MzUsIDB4ODAsIDB4OTUsIDB4MDQsIDB4NDQsIDB4MDYsIDB4QzAsIDB4ODEsCisweDAwLCAweDM0LCAweDA0LCAweEQxLCAweDQwLCAweDU0LCAweDEyLCAweEQwLCAweDBDLCAweDQwLCAweDBELCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzMywgMHg0MCwgMHhDNywgMHgwMCwKKzB4NEMsIDB4MjYsIDB4NzEsIDB4MEQsIDB4RDAsIDB4NjQsIDB4MDAsIDB4ODMsIDB4ODAsIDB4NUMsIDB4MDcsIDB4NzAsIDB4MDUsCisweEMwLCAweDM1LCAweDAwLCAweDlCLCAweDAwLCAweDZDLCAweDRDLCAweEYwLCAweDA5LCAweEM4LCAweDI0LCAweDAwLCAweEQzLAorMHgwMCwgMHg1QywgMHgwNywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MTAsIDB4N0IsIDB4MDksIDB4RkMsIDB4MDMsIDB4QjMsIDB4MEYsCisweEMwLCAweDNFLCAweDQxLCAweEJGLCAweDAwLCAweEVELCAweDgzLCAweEYwLCAweDlGLCAweDgyLCAweDM2LCAweDIwLCAweDlCLAorMHgwMSwgMHhGQywgMHgwMCwgMHhGMCwgMHgxRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRCwgMHg4MCwgMHhFQywgMHgwMiwgMHhGMiwKKzB4OEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDA4LCAweDM1LCAweDEyLCAweERGLCAweDBBLCAweDRELCAweDAzLCAweEYwLCAweDhDLCAweEM0LCAweDM0LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMCwgMHhDMCwgMHg3MywgMHgwMCwgMHg4QiwgMHgwMCwgMHg1QywgMHgwOCwgMHhGMCwKKzB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjIsIDB4MDksIDB4QzIsIDB4MDgsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEyLCAweDM0LCAweDAwLCAweERELAorMHg4MCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwKKzB4MEIsIDB4MDIsIDB4M0YsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MDQsCisweERELCAweDAwLCAweDc0LCAweDAyLCAweEQyLCAweDBELCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwgMHgwQywgMHg0QywgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NTEsIDB4MzQsIDB4MDIsIDB4NEQsIDB4MDAsIDB4MzAsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzIsIDB4MDAsCisweDgxLCAweDAwLCAweDE0LCAweDAwLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweENELCAweDIwLCAweDM0LCAweDJFLAorMHhEMCwgMHgwMCwgMHg1MCwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4NkQsIDB4NDEsIDB4ODQsIDB4NDYsIDB4RDAsIDB4MUUsIDB4NDgsIDB4NjgsIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDA2LCAweEQwLCAweDFFLCAweDQyLCAweDdCLCAweDYwLCAweEExLCAweDIxLCAweDg0LCAweDg0LAorMHhEMCwgMHg1RSwgMHg0MSwgMHg2QiwgMHgwMCwgMHhFQywgMHg4MSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxQiwgMHg0MCwgMHgxOCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsCisweENGLCAweDAwLCAweDBDLCAweDAyLCAweEYyLCAweDBDLCAweEMwLCAweDIwLCAweDAwLCAweDhGLCAweDAwLCAweDNDLCAweDEyLAorMHhGMCwgMHg0OCwgMHhDMCwgMHgzMywgMHgwMCwgMHg4MywgMHgxMCwgMHgxQywgMHg4MCwgMHhGOCwgMHgwOCwgMHhFMCwgMHgzMywKKzB4MDAsIDB4Q0YsIDB4NDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDdELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDQyLAorMHhGMCwgMHgxRSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4QjcsIDB4MDAsIDB4RUMsIDB4MjIsIDB4RjIsIDB4NEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkUsIDB4MDEsIDB4RkMsCisweDQzLCAweEYwLCAweDA5LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMSwgMHhBMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4ODUsIDB4QzAsIDB4RjAsIDB4MjIsIDB4REIsIDB4MTQsIDB4NzQsCisweDAwLCAweEUwLCAweDFDLCAweEMwLCAweDI0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLAorMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHhCOSwKKzB4MDAsIDB4NkQsIDB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjYsCisweDAyLCAweEQwLCAweDRFLCAweDUwLCAweDM4LCAweDA0LCAweEExLCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLAorMHgyOCwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4ODksIDB4RUQsIDB4MDksIDB4QjQsCisweDA3LCAweEQwLCAweDlFLCAweDQwLCAweDc5LCAweDAzLCAweEFELCAweDAxLCAweEI0LCAweDA2LCAweEQwLCAweDE0LCAweDYyLAorMHg3OCwgMHgwMSwgMHhFOSwgMHgxMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHgxRiwgMHg0MCwgMHg2OSwgMHg4OCwgMHhFRCwgMHgwRCwKKzB4QjQsIDB4NTcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweDhELCAweEEwLCAweDM0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLAorMHg3MywgMHgxMCwgMHg4RCwgMHgwQiwgMHgzNCwgMHgyQSwgMHhEMCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMSwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4REMsIDB4NDAsIDB4MjEsIDB4MjMsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDgsCisweDQxLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LAorMHgxMSwgMHgwMCwgMHg3RiwgMHgyMCwgMHg3QywgMHgxMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgyNCwgMHg3RiwgMHgwMiwKKzB4RkMsIDB4MEQsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NUIsIDB4MDEsIDB4RkMsIDB4MzEsIDB4RjAsIDB4MDcsCisweEQwLCAweDlELCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDI3LCAweEMwLCAweDVGLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMSwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTAsIDB4NzAsIDB4NDAsIDB4RjAsIDB4ODAsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweDgwLCAweDA2LCAweDI4LCAweDFGLAorMHg4MCwgMHg3OCwgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MzksCisweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDRELCAweDAyLCAweDMyLCAweDA5LCAweEMzLCAweDY0LCAweDAwLCAweDhGLAorMHgwMSwgMHg0QywgMHgwMiwgMHhGMSwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg0QywgMHgwNiwgMHgzMCwKKzB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDJFLCAweDAwLCAweEIxLCAweDAzLCAweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDZGLCAweDAwLCAweDlELAorMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4NjcsIDB4MDgsIDB4QkQsIDB4MDAsIDB4ODQsIDB4MEUsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDQsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweEQxLAorMHgwOCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NTAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MjcsIDB4MDAsCisweDhELCAweDAwLCAweDQ0LCAweDFBLCAweDEwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwQSwgMHhEMCwKKzB4MDgsIDB4NDIsIDB4QTMsIDB4MDgsIDB4OEQsIDB4MDIsIDB4NDQsIDB4MEEsIDB4MTAsIDB4NjgsIDB4NDEsIDB4MjAsIDB4MDUsCisweDhELCAweDE0LCAweDA1LCAweDAyLCAweEQwLCAweDI4LCAweDQwLCAweEEzLCAweDA4LCAweDhELCAweDAyLCAweDA1LCAweDAyLAorMHgxMCwgMHgyOSwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjAsIDB4NTYsIDB4NDAsIDB4NTMsIDB4MDEsIDB4N0MsIDB4MDQsIDB4RjAsIDB4MTEsIDB4QzAsIDB4NDcsIDB4MDAsCisweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDM0LCAweDQxLCAweEMwLCAweDA0LCAweDAxLCAweDFGLCAweDA0LCAweDRDLCAweDI4LAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHgwNCwgMHgzNCwgMHgwMSwgMHhEMCwgMHg3NCwKKzB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4QTcsIDB4MDAsCisweEJGLCAweDAyLCAweEZDLCAweDBFLCAweEYwLCAweDI5LCAweEMwLCAweEVGLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA2LAorMHhGMCwgMHgxQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHg4MCwgMHhGQywgMHgwNiwgMHhGMCwgMHgxQiwgMHhDMCwgMHg2RiwKKzB4MDgsIDB4OUYsIDB4MjMsIDB4RkMsIDB4MEEsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDZGLCAweDAwLCAweEZCLCAweDExLCAweENELCAweDE2LAorMHhGMCwgMHgxQiwgMHhDMCwgMHg2RiwgMHgwMSwgMHg5MywgMHgwMCwgMHg2QywgMHgwQSwgMHgyMCwgMHg1OSwgMHg4MCwgMHg2RCwKKzB4MDEsIDB4QTMsIDB4MDUsIDB4MEMsIDB4MDIsIDB4RjAsIDB4MkIsIDB4QzgsIDB4MkIsIDB4MDAsIDB4OUQsIDB4ODUsIDB4Q0MsCisweDA2LCAweDMwLCAweDI5LCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxMSwgMHg0MiwgMHg0NCwgMHgxNCwgMHhEMCwgMHgyMSwgMHg0MCwgMHhDNywKKzB4MDMsIDB4NTEsIDB4MTUsIDB4NjQsIDB4MDQsIDB4MTAsIDB4MzAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NTQsCisweDAwLCAweEQwLCAweDUxLCAweDQwLCAweDU3LCAweDAwLCAweDFELCAweDA3LCAweDQ0LCAweDI4LCAweDEwLCAweDExLCAweDQwLAorMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhBMywKKzB4MDAsIDB4ODksIDB4MDAsIDB4MDQsIDB4NEEsIDB4RDAsIDB4MjgsIDB4NDIsIDB4MjMsIDB4MDQsIDB4ODEsIDB4MjAsIDB4MjQsCisweDAyLCAweDEwLCAweEM4LCAweDYxLCAweEEzLCAweDAwLCAweDgxLCAweDAyLCAweDA0LCAweDAyLCAweDUwLCAweDQ4LCAweDYwLAorMHgzMywgMHgwNSwgMHg4RCwgMHgxMiwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweDQyLCAweDI3LCAweDYwLCAweDkxLCAweDA4LCAweDI0LCAweDAyLCAweDEwLCAweDA5LCAweDQyLAorMHgyNiwgMHgwMCwgMHg5MSwgMHgwNCwgMHg1NCwgMHgwQSwgMHhEMCwgMHg4OSwgMHg0MiwgMHgyNywgMHgwMSwgMHg5RCwgMHgwMCwKKzB4NTQsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDAwLCAweDlCLCAweDBFLCAweENDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLAorMHgyRiwgMHgwMCwgMHhCMywgMHgwMywgMHhFQywgMHgxMiwgMHgzMCwgMHgxQiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwKKzB4NEMsIDB4MDYsIDB4RTAsIDB4MUIsIDB4QzAsIDB4RUYsIDB4MjAsIDB4QkYsIDB4MDAsIDB4NUQsIDB4MDIsIDB4RjAsIDB4NkIsCisweEMwLCAweDE3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLAorMHgyNSwgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgyMSwKKzB4N0MsIDB4MTIsIDB4RjQsIDB4MzgsIDB4RDAsIDB4MjEsIDB4NDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjIsIDB4MDksCisweEMwLCAweDY3LCAweDA4LCAweDlGLCAweDAwLCAweDJDLCAweDgyLCAweDM0LCAweDM5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMSwgMHgwMSwgMHgwRiwgMHgwMCwKKzB4NEQsIDB4ODAsIDB4MzAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA0LCAweDEwLCAweDE3LCAweDAwLCAweDRDLCAweDA4LCAweDcyLCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDAzLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4REMsIDB4MjAsIDB4N0QsIDB4MDAsIDB4NDQsIDB4MDUsIDB4MTAsIDB4MDcsCisweDQwLCAweDE3LCAweDA0LCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweEMwLCAweDE2LCAweDAwLCAweDQxLAorMHgxMSwgMHg0NCwgMHgwMSwgMHgxMCwgMHgxNSwgMHg0MywgMHgxNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweEUyLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDA3LCAweDEwLCAweDA4LCAweDQyLCAweDM3LCAweDAwLCAweENELAorMHgwMCwgMHgzMCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHg4NSwgMHgwMSwgMHgwNSwgMHgwMywgMHg1MCwKKzB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDIsIDB4QzAsIDB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweEI4LCAweDAwLCAweEFELAorMHgwMCwgMHgwNCwgMHg3NywgMHgxNCwgMHgwRSwgMHg0MCwgMHgyQiwgMHg4MiwgMHhFRCwgMHgwNCwgMHhCNCwgMHgxMywgMHhEMCwKKzB4NEUsIDB4NDAsIDB4MkEsIDB4MDAsIDB4RjUsIDB4MDAsIDB4QzQsIDB4MDcsIDB4NTAsIDB4REUsIDB4NDAsIDB4N0UsIDB4MDEsCisweEUxLCAweDBDLCAweEI0LCAweDAzLCAweEQxLCAweDRFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg2OCwgMHgwMCwgMHhBRiwgMHgwMSwgMHg4NCwgMHgwNiwgMHgzMCwKKzB4MUEsIDB4QzAsIDB4N0IsIDB4MDEsIDB4RUYsIDB4MDMsIDB4QkMsIDB4MEYsIDB4RjAsIDB4NUUsIDB4QzAsIDB4NkEsIDB4MDAsCisweEU3LCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDFGLCAweDgwLCAweEZBLCAweDAwLCAweEUzLCAweDAxLCAweEJDLCAweDA2LAorMHhGMCwgMHgzRSwgMHhDMCwgMHg1MywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEUwLCAweDhELCAweEM0LCAweDIzLCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDYzLAorMHhCOCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkYsIDB4MDAsCisweEIzLCAweDAxLCAweEZDLCAweDg3LCAweDMwLCAweDFCLCAweDgwLCAweDdGLCAweDAyLCAweEUzLCAweDAxLCAweDhDLCAweDA3LAorMHgzMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgwMSwgMHhGRiwgMHgwMSwgMHhFQywgMHgwNywgMHgzMCwgMHgxQiwgMHhDMCwgMHg3OCwKKzB4MjgsIDB4RjMsIDB4MjEsIDB4RkMsIDB4MDYsIDB4MzAsIDB4MUUsIDB4QzgsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDI5LCAweDQwLCAweEExLCAweDAwLCAweEY0LCAweDAzLAorMHgxNCwgMHgwQSwgMHg0MCwgMHgyQiwgMHg0OCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgyMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgyOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QzQsIDB4NDMsIDB4QjAsIDB4MEEsIDB4QzAsIDB4M0EsIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsCisweDBCLCAweDEwLCAweDhFLCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBMSwgMHgxMCwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQiwKKzB4ODAsIDB4RjEsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MjgsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4QTQsCisweDAzLCAweDEwLCAweDBCLCAweDQxLCAweDNELCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDYyLCAweDE0LCAweDFGLCAweDQwLAorMHgyMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgxMywKKzB4MDAsIDB4ODEsIDB4MDEsIDB4MzQsIDB4ODYsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NjMsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MDQsCisweDBCLCAweDE4LCAweDNDLCAweDQwLCAweDIxLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDE3LCAweDkwLCAweDNDLCAweDQzLAorMHg2NywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHgxMCwgMHgxQywgMHg0MCwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDMsIDB4N0MsCisweDEzLCAweDMwLCAweDA5LCAweEMyLCAweDc3LCAweDA0LCAweEQzLCAweDA0LCAweDQ1LCAweDJCLCAweDM0LCAweDZELCAweEMwLAorMHgyNCwgMHgwMCwgMHhERiwgMHgxMSwgMHhFQywgMHgwMywgMHgzMCwgMHgzQywgMHhDMCwgMHg2NSwgMHg0NCwgMHhEMywgMHgyMCwKKzB4M0MsIDB4MDIsIDB4MzAsIDB4NkQsIDB4RDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDJELCAweEMwLAorMHgyNywgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERCwgMHg0MCwKKzB4N0MsIDB4ODMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4NEQsCisweEMwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LAorMHgyRiwgMHgwMCwgMHhCRiwgMHgxMCwgMHg4QywgMHgwNiwgMHgzMSwgMHgwQiwgMHhEMCwgMHhCNCwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4RUYsIDB4MDAsIDB4RkYsIDB4ODUsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4NEYsCisweEMwLCAweEVDLCAweDAwLCAweEYzLCAweDAwLCAweDRDLCAweDE2LCAweDMwLCAweDBGLCAweEMwLCAweDA0LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMywKKzB4NDQsIDB4MDIsIDB4MTEsIDB4MjQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4REQsIDB4NDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQyLCAweDY3LCAweDIwLCAweENELCAweDAxLCAweDQ0LCAweDAzLCAweDEwLCAweDE5LCAweDQ4LCAweDc0LCAweDIwLCAweEQxLAorMHgwMCwgMHg0NCwgMHgwMSwgMHgwMCwgMHgwRCwgMHg0MCwgMHg4NCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4MDAsIDB4REQsIDB4MDYsIDB4NDQsIDB4QTMsIDB4MTQsIDB4MDksCisweDQxLCAweDM0LCAweDAwLCAweENELCAweDAwLCAweDY0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDEwLCAweERELAorMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHg0MCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MEMsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweENELAorMHgwMCwgMHgwNSwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHg4MCwgMHhERCwgMHg0MCwgMHgwNCwgMHgwMywgMHgxNCwKKzB4MDksIDB4NTAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MDIsIDB4MTYsIDB4MEMsIDB4NTQsIDB4NDAsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI2LCAweDAwLCAweDFGLAorMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwOSwgMHhDQSwgMHgyNCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsCisweEYzLCAweDAwLCAweDRELCAweDAyLCAweDMwLCAweDBGLCAweEMwLCAweDA0LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhFRCwgMHgwMiwgMHhGMCwKKzB4MDcsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MkYsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RjcsIDB4MEMsIDB4Q0MsIDB4MUIsIDB4NzAsIDB4M0EsIDB4QzAsIDB4RUMsIDB4MDAsCisweEJCLCAweDA0LCAweEZDLCAweDAzLCAweDMwLCAweDFFLCAweEMwLCAweDNFLCAweDAwLCAweEE3LCAweDAxLCAweDhDLCAweDA2LAorMHgzMCwgMHgxQiwgMHhDMCwgMHg3RSwgMHgxMiwgMHhCRiwgMHgwNCwgMHhDQywgMHgwNywgMHhGMCwgMHgwMywgMHhDNCwgMHgwRSwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsCisweEYxLCAweDhFLCAweEM0LCAweDNCLCAweDEwLCAweDQ5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDBFLCAweEY0LCAweDJGLAorMHg1MCwgMHgxOSwgMHg0MCwgMHhGNCwgMHgwMCwgMHg1RCwgMHgwMSwgMHg0NCwgMHg1MCwgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4QzksIDB4MTQsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEyLCAweDMzLCAweDIwLCAweEM1LCAweDA0LCAweDA0LCAweDEzLAorMHg1MCwgMHg0OSwgMHg0MCwgMHgzMCwgMHgwMSwgMHgwOSwgMHgxMCwgMHgxNCwgMHgwMywgMHgxMiwgMHgwOCwgMHg2MCwgMHgzMiwKKzB4MDIsIDB4Q0QsIDB4ODAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MEMsIDB4MDQsCisweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NiwgMHgwMywgMHgxMCwgMHgxOSwgMHg0MSwgMHg3MCwKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODQsIDB4NDYsCisweDg0LCAweDEwLCAweDA5LCAweDQwLCAweDM1LCAweDAwLCAweDk5LCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDE5LCAweDQxLAorMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhBOCwgMHgzNiwKKzB4MDgsIDB4RDcsIDB4MDAsIDB4NDgsIDB4MDMsIDB4NzAsIDB4MzksIDB4QzAsIDB4NDQsIDB4MDEsIDB4OUIsIDB4MDUsIDB4NUMsCisweDgzLCAweDMwLCAweDE5LCAweEMwLCAweDM2LCAweDgwLCAweEQ3LCAweDAwLCAweDRDLCAweDRFLCAweDMxLCAweDA4LCAweEMwLAorMHgzNywgMHgwMiwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwNywgMHhGMCwgMHgzMCwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODIsIDB4M0QsIDB4MTAsIDB4RUYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDgwLCAweEZDLCAweDQzLCAweEYwLCAweDBCLCAweEMwLAorMHgzRiwgMHhBNCwgMHhGRiwgMHgwMSwgMHhGRCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMiwgMHgzRSwgMHgwMCwgMHhFRiwgMHgwMiwKKzB4RkMsIDB4OEYsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDIxLCAweEMwLAorMHgzNSwgMHgwMCwgMHg5NywgMHgwOCwgMHgwQywgMHgwMywgMHg3MCwgMHgwMSwgMHhDMCwgMHgzNCwgMHgwMiwgMHhENywgMHgxMCwKKzB4NEMsIDB4MDAsIDB4QjEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDQsIDB4RDMsIDB4MTgsIDB4NDQsIDB4MDMsIDB4RjAsIDB4MjEsCisweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHg3MCwgMHgwMCwgMHhGRCwgMHgwRiwgMHhGNCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMywKKzB4QzQsIDB4NEYsIDB4MzAsIDB4QzAsIDB4QzAsIDB4M0MsIDB4MDgsIDB4QzEsIDB4MTEsIDB4MkMsIDB4MDAsIDB4MTAsIDB4OEQsCisweDQwLCAweEY0LCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDBCLCAweEQwLCAweEIxLCAweDQwLCAweDRDLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3MiwgMHgwMCwgMHhDRCwgMHgwMywKKzB4NzQsIDB4MDcsIDB4NTAsIDB4MDgsIDB4NDQsIDB4MzEsIDB4MDAsIDB4MDUsIDB4MTIsIDB4MTQsIDB4MEIsIDB4RDAsIDB4MTgsCisweDQwLCAweEYwLCAweDIwLCAweEM1LCAweDAwLCAweDI0LCAweDAyLCAweEQyLCAweDAwLCAweDA2LCAweEYzLCAweDAwLCAweDg5LAorMHgwMSwgMHgwNCwgMHgzNywgMHhEMCwgMHg5MCwgMHg0MCwgMHgxRCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODIsIDB4NzgsIDB4MDQsIDB4RUQsIDB4ODEsIDB4QjQsIDB4NEYsIDB4RDAsIDB4MUIsCisweDQ4LCAweDdELCAweDA4LCAweEUxLCAweDA5LCAweDk1LCAweDA3LCAweDAwLCAweDlCLCAweDQwLCAweDc4LCAweDAwLCAweDYxLAorMHgwMSwgMHhFNCwgMHgwNCwgMHgxMCwgMHg5QSwgMHg0MCwgMHg3OCwgMHgwNiwgMHhBRCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEOSwKKzB4MUEsIDB4NDgsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDEwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDcwLCAweDA4LCAweDQwLCAweDMxLCAweDAwLCAweDU3LAorMHgwMCwgMHgxQywgMHgwMywgMHhGMCwgMHg4OCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwgMHgyQywgMHgwMCwgMHhCMCwKKzB4MDAsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OEIsIDB4MEMsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NDksIDB4NDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEIwLCAweDNELCAweDAwLCAweEZGLAorMHgwMiwgMHhGQywgMHg0QiwgMHhGMCwgMHg4QiwgMHg4MCwgMHgzQSwgMHgwMiwgMHhGRiwgMHgwMCwgMHhBQywgMHg2MywgMHhGMSwKKzB4OEIsIDB4RDAsIDB4M0IsIDB4MDAsIDB4RkYsIDB4NDgsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEEsIDB4QzIsIDB4M0YsIDB4MDAsCisweDk3LCAweDI4LCAweEZELCAweDAzLCAweEYwLCAweDhFLCAweEMwLCAweDA5LCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwQywgMHg3QywgMHgwQiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4NTcsIDB4MDEsIDB4NEMsIDB4MUIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MzQsIDB4MTIsCisweENGLCAweDAwLCAweDRDLCAweDAzLCAweEIwLCAweDAxLCAweEMwLCAweDc2LCAweDkwLCAweERCLCAweDAwLCAweDdDLCAweDgzLAorMHgzMCwgMHgwNSwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEYsIDB4NDQsIDB4MzgsIDB4MDAsCisweEUxLCAweDAwLCAweDg0LCAweDMzLCAweEQ4LCAweDBBLCAweDQyLCAweDM4LCAweDAwLCAweEVELCAweEEwLCAweDg0LCAweDgxLAorMHgxNCwgMHgwRSwgMHg0NCwgMHgzOSwgMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHg0OCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDIsIDB4NzksIDB4MDAsCisweEVELCAweDA1LCAweEI0LCAweDA3LCAweEQwLCAweDFBLCAweDU0LCAweDdDLCAweDAwLCAweDQ1LCAweDAxLCAweDg0LCAweDE3LAorMHhDMCwgMHgxMywgMHg0OCwgMHg3OCwgMHgwMSwgMHhFQywgMHgwMSwgMHhDNSwgMHgwNSwgMHgxMiwgMHgxNiwgMHg0MCwgMHg3RCwKKzB4ODAsIDB4RTEsIDB4QTEsIDB4RjQsIDB4OEYsIDB4MTEsIDB4MUMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLAorMHhEOCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMywgMHgwNCwgMHgwMywgMHhEMCwgMHg4MCwgMHg0MCwgMHgzMCwKKzB4MjAsIDB4Q0QsIDB4MDUsIDB4MDQsIDB4MTUsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzUsIDB4MDgsIDB4NzQsCisweDA2LCAweDUwLCAweDJDLCAweDQxLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhEMCwgMHg0NywgMHhDMCwgMHg5OCwKKzB4MDAsIDB4NzcsIDB4NDksIDB4NEMsIDB4MDEsIDB4RjAsIDB4QTcsIDB4QzgsIDB4MTQsIDB4MDAsIDB4N0YsIDB4MDcsIDB4OEMsCisweDE1LCAweDMwLCAweDQ3LCAweEMwLCAweDU1LCAweDAwLCAweDVCLCAweDIxLCAweDdDLCAweDAxLCAweDEwLCAweDI3LCAweEQxLAorMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4ODIsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDEsIDB4MUYsIDB4QTgsIDB4N0QsCisweDA4LCAweEQwLCAweDIxLCAweEQ0LCAweDg3LCAweDAwLCAweDFGLCAweDQwLCAweDdDLCAweDAwLCAweDcwLCAweDIxLCAweEMwLAorMHgwNSwgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDMsIDB4M0MsCisweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDA4LCAweDk3LCAweDAxLCAweDdDLCAweDEyLCAweEYyLCAweDI5LCAweEMwLAorMHgyNiwgMHgwMCwgMHg5RiwgMHgwOCwgMHg1QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg4RiwgMHgwOSwKKzB4NEQsIDB4MDIsIDB4MzAsIDB4NDgsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDBBLCAweDEwLCAweDA5LCAweDQwLAorMHgyNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgxQSwgMHhEMCwgMHgwOCwgMHg0MSwgMHhFNCwgMHgwMSwgMHg4RCwgMHg2MCwKKzB4NDQsIDB4MDIsIDB4MTIsIDB4NjgsIDB4NDAsIDB4MjQsIDB4MDMsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MzAsIDB4MjksCisweDUwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHg0NiwgMHg1MCwgMHgwOCwgMHg0MiwgMHgyNCwgMHgwMCwgMHg5NSwgMHgwOCwKKzB4NzQsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NTIsIDB4MEQsCisweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDBBLCAweDEwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgxNCwKKzB4MzQsIDB4NTIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MEEsIDB4QzEsIDB4OTQsIDB4MzAsIDB4RDIsIDB4RDAsIDB4MDksCisweDQwLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDE5LCAweDA5LCAweDcwLCAweDIwLCAweDEwLCAweDhELAorMHgwOCwgMHgwNCwgMHgwMiwgMHgxNCwgMHg0QywgMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MTAsIDB4NzAsIDB4MDEsCisweEQwLCAweDg0LCAweDAwLCAweDE3LCAweDA0LCAweDc4LCAweDEwLCAweEYwLCAweDAxLCAweEM0LCAweDA3LCAweDA1LCAweDFELAorMHg0MCwgMHg1QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgxNiwgMHg0QywgMHgwMCwgMHgzMCwKKzB4NDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksCisweEIwLCAweDI3LCAweDAwLCAweDlGLCAweDE0LCAweDdDLCAweDUyLCAweEIxLCAweDRCLCAweEMxLCAweDJCLCAweDAxLCAweEJGLAorMHg5NCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwQSwgMHhDMCwgMHgyNiwgMHgxMCwgMHhGRSwgMHgwMCwgMHhCQywgMHg1MywgMHhGMCwKKzB4MEEsIDB4QzAsIDB4MkIsIDB4MTUsIDB4QkYsIDB4MDQsIDB4QkMsIDB4NTIsIDB4NzAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDJGLCAweDAwLCAweEJGLAorMHgwMSwgMHhDQywgMHg1RSwgMHhFMCwgMHgyOCwgMHhDMCwgMHhBNywgMHgwMCwgMHhCNywgMHgwOSwgMHhFQywgMHgxMiwgMHg3MCwKKzB4MEEsIDB4QzAsIDB4MkYsIDB4MDQsIDB4QUQsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4QUUsIDB4MDAsCisweEJCLCAweDAwLCAweENELCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwRiwgMHg0NCwgMHgwOCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MEIsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDAsCisweDE5LCAweDAwLCAweDQ0LCAweDEwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAxLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MTAsIDB4MDQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NjcsIDB4MDAsCisweDg1LCAweDA0LCAweDI0LCAweDBCLCAweDUwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweDk5LCAweDAwLCAweDA0LCAweDQyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyMiwgMHgwMSwgMHg4OSwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0MywKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsCisweDlELCAweDYwLCAweDQ0LCAweDAyLCAweEM4LCAweDA5LCAweDQxLCAweDI3LCAweDAyLCAweDkxLCAweDAwLCAweDY0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwOSwgMHgwMCwgMHg2NCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLAorMHhDMSwgMHgzOSwgMHhDOCwgMHg2NywgMHgwMCwgMHg5NSwgMHg1MSwgMHg2QywgMHgwMiwgMHg3MCwgMHg3OSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUIsIDB4MDEsIDB4NEMsIDB4MEUsIDB4MzAsIDB4MTksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsCisweDA2LCAweEIwLCAweDA5LCAweEMxLCAweDE3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4OEYsIDB4MDUsIDB4MUMsIDB4MDIsIDB4RjAsIDB4OTksIDB4QzQsIDB4MjcsIDB4MjQsIDB4OUIsIDB4MDMsIDB4N0QsCisweDEyLCAweEY0LCAweDk5LCAweEMzLCAweDI3LCAweDAwLCAweDlGLCAweDEzLCAweDdDLCAweEQ2LCAweEYwLCAweDQ5LCAweEMxLAorMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNCwKKzB4MDAsIDB4MEYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjQsIDB4MjEsIDB4QzIsIDB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsCisweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFGLCAweDAyLCAweDVDLCAweDA4LCAweDMxLCAweDAxLCAweEMwLAorMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4NTQsIDB4MDQsIDB4N0QsIDB4MDAsIDB4RjQsCisweDYxLCAweDEwLCAweDA1LCAweEMwLCAweDEyLCAweDAwLCAweDcxLCAweDA3LCAweEM0LCAweDA5LCAweEQwLCAweDI3LCAweDQwLAorMHgxQywgMHgwMCwgMHg2RCwgMHg2MCwgMHg0NCwgMHgwMSwgMHgxMiwgMHgzNiwgMHg0MSwgMHgxQywgMHgwMSwgMHg3RCwgMHg0NywKKzB4QzQsIDB4ODUsIDB4NTAsIDB4MjcsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDgwLCAweENELCAweDAwLCAweDM0LCAweDBGLCAweDEwLCAweDBDLCAweDQwLAorMHgzMCwgMHgwMCwgMHhDMSwgMHgwNywgMHgyNCwgMHgwOSwgMHhEMSwgMHhDNCwgMHg0MCwgMHhCMywgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MTQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDgsIDB4MzUsIDB4MDksIDB4REQsIDB4MDMsIDB4NDUsIDB4QUYsIDB4MTAsIDB4QUMsCisweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg4LAorMHgyOCwgMHgwMCwgMHg2RCwgMHg4MiwgMHhCNCwgMHgwNywgMHgxMCwgMHhERiwgMHg0MCwgMHgzQSwgMHgwMywgMHhFMSwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4RDAsIDB4MTMsIDB4NDgsIDB4MzksIDB4ODAsIDB4N0QsIDB4ODAsIDB4RDQsIDB4MTMsIDB4MUMsIDB4MDIsCisweDQwLCAweDM5LCAweDEwLCAweEVELCAweDIwLCAweEM0LCAweDAzLCAweDQxLCAweDFDLCAweDQwLCAweDEwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg2OCwgMHgwMCwgMHhFRiwgMHgwMSwKKzB4M0MsIDB4MDUsIDB4MzAsIDB4REUsIDB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDEsIDB4QUMsIDB4MDcsIDB4RjAsIDB4MUUsCisweEMwLCAweDVCLCAweDAwLCAweEFGLCAweDAxLCAweDlDLCAweDE3LCAweDMwLCAweDEyLCAweEQwLCAweDc5LCAweDkwLCAweEJGLAorMHgwMSwgMHhDQywgMHgwNywgMHgyMCwgMHgxRSwgMHhDMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzEsIDB4MEQsCisweEM4LCAweEI3LCAweDA1LCAweDVGLCAweDIwLCAweDcwLCAweDAzLCAweEYxLCAweDAxLCAweEMwLCAweDE2LCAweDAwLCAweDVGLAorMHg4MCwgMHgyQywgMHg2QiwgMHhGMCwgMHgwMSwgMHhEMCwgMHgzNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MEQsIDB4RDAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEEwLCAweDZGLCAweDAyLCAweEY3LCAweDA5LCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDc4LCAweDAwLCAweEZCLAorMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3RSwgMHgwMCwgMHhCQiwgMHgwMSwgMHhDQywgMHgxNywgMHhCMCwKKzB4OTcsIDB4QzAsIDB4N0MsIDB4MDgsIDB4N0YsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4RjEsIDB4MUYsIDB4QzAsIDB4MEIsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDI5LCAweDAwLCAweDZELAorMHg0OCwgMHhCMCwgMHgwMywgMHhEMCwgMHg0RSwgMHhDMCwgMHgzQiwgMHgwMSwgMHg2MSwgMHgyMiwgMHhCNCwgMHg4QiwgMHhEMCwKKzB4NDYsIDB4NDAsIDB4QjgsIDB4MDgsIDB4NzEsIDB4MDAsIDB4RkMsIDB4MTMsIDB4MTAsIDB4QzYsIDB4NDAsIDB4MzgsIDB4MDAsCisweDZELCAweDQ4LCAweDg0LCAweDAwLCAweEQwLCAweDQyLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOSwgMHgyMCwgMHhFNSwgMHg0MCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MEYsIDB4NDAsIDB4M0MsIDB4MTAsIDB4RTksIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDcsIDB4NDEsIDB4MUIsIDB4MDIsCisweEI5LCAweDA4LCAweEE0LCAweDczLCAweDkyLCAweDA2LCAweDQxLCAweDE4LCAweDAwLCAweDJELCAweDAwLCAweEE0LCAweDYxLAorMHhEMCwgMHgwRSwgMHg2MCwgMHgyMywgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4MjgsIDB4MjMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4RUMsIDB4NjAsIDB4QjIsIDB4MDQsCisweDA5LCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDEwLCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDIzLCAweDM2LCAweDBGLAorMHgxMiwgMHgzNCwgMHg0MSwgMHgyMCwgMHgyMCwgMHgwRCwgMHgwOSwgMHg2MCwgMHgwNCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgxQiwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4QTgsIDB4MjUsIDB4MDAsCisweDk3LCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweDlCLCAweDAyLCAweDdDLCAweDAzLAorMHhGMCwgMHgwNSwgMHg4MCwgMHgzNywgMHgwMCwgMHg0QiwgMHgwNSwgMHhFQywgMHgwNywgMHhCMCwgMHgzNCwgMHhEMCwgMHgwNCwKKzB4ODAsIDB4REYsIDB4MDEsIDB4NkQsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDgsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDI3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHg5NywgMHgwRSwgMHg3NCwgMHgwQiwgMHhFMCwgMHgwMSwgMHhBMCwgMHgzNiwKKzB4MTAsIDB4NUYsIDB4MDIsIDB4NUMsIDB4MTMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4ODcsIDB4MEEsIDB4REYsIDB4MDIsIDB4NUMsCisweDAyLCAweEYwLCAweDBELCAweEM4LCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MSwgMHgwOCwgMHhBRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRSwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4MDcsIDB4QzgsIDB4MTcsIDB4MjAsIDB4M0IsIDB4MTgsIDB4Q0MsCisweDAzLCAweEIyLCAweDA3LCAweEQwLCAweDBFLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDAyLCAweDMwLCAweDIzLCAweEMxLAorMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMSwgMHgyNiwKKzB4MjAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MEMsIDB4QzAsIDB4MzYsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsCisweDBGLCAweEQwLCAweDMxLCAweDQyLCAweEQ3LCAweDAwLCAweDVELCAweDUyLCAweDA0LCAweDAzLCAweDEwLCAweDM1LCAweDQwLAorMHg0NCwgMHgwNCwgMHgxRCwgMHgwMywgMHg3NCwgMHg4QywgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NywgMHgwMiwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4ODAsIDB4OUQsIDB4MzEsIDB4NjQsCisweDBDLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDA3LCAweDUwLCAweDE1LCAweDQxLAorMHg3NywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NywgMHgwMywgMHg5MCwgMHgxRCwgMHg0MSwgMHg2NCwgMHgwMCwgMHg1RCwgMHg5NCwKKzB4NzQsIDB4NDYsIDB4MTAsIDB4MkQsIDB4NDgsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDBELCAweDQwLAorMHgzMiwgMHgwMCwgMHg4RCwgMHgyMCwgMHgzNCwgMHg4MywgMHhEMCwgMHgwMCwgMHg0MCwgMHgyMywgMHgwMCwgMHg0RCwgMHgwMCwKKzB4NDYsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MjYsIDB4ODIsIDB4MUMsIDB4MDAsCisweDQwLCAweDQzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLAorMHgyNCwgMHgwMCwgMHg5RiwgMHg4MCwgMHg2QywgMHgwMCwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4NzAsIDB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4QjQsIDB4MDUsCisweEMwLCAweDA0LCAweDAwLCAweDRGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDAxLCAweEM0LCAweDA3LCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCMCwgMHgyRiwgMHgwMCwgMHhCRSwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDIsCisweEMwLCAweDNGLCAweDIwLCAweDdGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDA2LCAweEMwLCAweDJGLCAweDAwLCAweDNGLAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhFMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RUMsIDB4MzIsIDB4RjIsIDB4QzcsCisweEM4LCAweDVGLCAweDAyLCAweDMzLCAweEExLCAweEZDLCAweDA3LCAweDMwLCAweDZCLCAweEM4LCAweDNGLCAweDA4LCAweEIzLAorMHgwMCwgMHhFQywgMHgwNCwgMHgxMCwgMHgxQiwgMHhDOCwgMHgxRiwgMHgwMywgMHhGRCwgMHgwOSwgMHhDQywgMHg4MiwgMHgzMiwKKzB4MUYsIDB4QzYsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDA4LCAweDdGLCAweDAwLCAweERELCAweDgxLCAweDc0LCAweDMyLCAweEQyLCAweEM1LCAweDQwLCAweDA3LCAweDExLCAweEQxLAorMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHg2OSwgMHg0OCwgMHhGRiwgMHgwMCwgMHg5NSwgMHgwMywgMHg3NCwgMHgwNCwgMHgxMCwKKzB4MUQsIDB4NDAsIDB4OTcsIDB4MDEsIDB4RUQsIDB4MDQsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MEYsIDB4NjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHg0NCwgMHg0MCwgMHgzNywgMHgwMSwgMHhDNSwgMHgwMSwgMHgxNCwgMHg4MywgMHgxMCwKKzB4MjgsIDB4NDAsIDB4MzMsIDB4MEEsIDB4MDEsIDB4MDgsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4OTMsIDB4MDAsCisweENELCAweDAwLCAweDE0LCAweDIyLCAweDFBLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHg4MiwgMHhEMCwKKzB4NjUsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDIsIDB4MzcsIDB4MDgsCisweDk1LCAweDIwLCAweDc0LCAweDA0LCAweDEwLCAweDFELCAweDQyLCAweDM3LCAweDA5LCAweERDLCAweDAwLCAweDU0LCAweDEzLAorMHgxMCwgMHgwRCwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDUsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjMsIDB4MDEsCisweEQ3LCAweDIxLCAweDNDLCAweDAzLCAweDM0LCAweDFELCAweEMwLCAweDM3LCAweDEwLCAweDkzLCAweDgwLCAweDI4LCAweDBDLAorMHgzMiwgMHgxRCwgMHhDMSwgMHg1NywgMHgwMCwgMHhERiwgMHg4MCwgMHg1QywgMHg4NiwgMHgzMSwgMHgwRCwgMHhDMCwgMHgwQiwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsCisweEZFLCAweDAwLCAweEZDLCAweDIzLCAweEYxLCAweDBGLCAweEMwLCAweEJGLCAweDQwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLAorMHhBMCwgMHgzQiwgMHhDMCwgMHgzNywgMHgwNCwgMHhCRiwgMHgyMywgMHhGMCwgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMSwgMHgxRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4MkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzQsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDA3LAorMHg3MCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHg4MCwgMHg3QywgMHg0MywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzMywKKzB4NDIsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDgsIDB4QzMsIDB4MDAsIDB4NEMsCisweDQzLCAweDcwLCAweDBELCAweEMxLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHhCNCwKKzB4MDgsIDB4REEsIDB4MDEsIDB4NzQsIDB4MDcsIDB4MDAsIDB4NEQsIDB4NDYsIDB4QkYsIDB4MDAsIDB4QjEsIDB4MDAsIDB4NDQsCisweDQ4LCAweEQwLCAweDJELCAweDQwLCAweDc3LCAweDA0LCAweEQxLCAweDAwLCAweDQwLCAweDBGLCAweDEwLCAweDNELCAweDQwLAorMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MTAsIDB4OUMsIDB4NDAsIDB4NjAsIDB4MjYsIDB4QzUsIDB4MDEsIDB4MjQsCisweDI3LCAweDEwLCAweDA4LCAweDAwLCAweEYzLCAweDAwLCAweDg5LCAweDAxLCAweDM1LCAweDQ0LCAweEQwLCAweDJDLCAweDQwLAorMHgzMywgMHgwMCwgMHhDNSwgMHgyOSwgMHgwNCwgMHgyRiwgMHg5MCwgMHhCQywgMHg0MiwgMHgwRiwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjYsCisweDA2LCAweDEwLCAweDE0LCAweDU4LCAweDY4LCAweDEwLCAweEVELCAweDUxLCAweDM0LCAweDA3LCAweDEwLCAweDFBLCAweDQyLAorMHg3QiwgMHgxMCwgMHg4OSwgMHgwMSwgMHg5NCwgMHgwNCwgMHhEMCwgMHgxRSwgMHg0MCwgMHg1QiwgMHhDMiwgMHhFNSwgMHgwMywKKzB4ODQsIDB4MDYsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NzcsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDAwLCAweDdFLCAweDAyLCAweDcwLCAweDA0LCAweEMwLAorMHgyMCwgMHg4MiwgMHhDNywgMHg4MCwgMHgyQywgMHgxMywgMHgzOCwgMHgwQywgMHhFMCwgMHgzMywgMHgwMCwgMHgwQiwgMHg5MCwKKzB4MUMsIDB4MzAsIDB4RjAsIDB4MEMsIDB4QzAsIDB4QjcsIDB4QTAsIDB4QzcsIDB4ODAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsCisweEMwLCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LAorMHg3OSwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGNCwgMHgwMiwgMHhGOCwgMHgwNywgMHhDOCwgMHgyQiwgMHgwOCwgMHhGQiwgMHgwOCwKKzB4RkMsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QjcsIDB4MTAsIDB4RUMsIDB4QTAsIDB4RjAsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAxLCAweDdFLCAweDIzLCAweDcwLCAweDFELCAweEMxLCAweDBCLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4ODMsIDB4RjAsIDB4OEQsIDB4ODAsIDB4MjcsIDB4MDAsIDB4REYsIDB4NDAsIDB4N0UsIDB4ODMsIDB4RjAsIDB4ODksCisweDQwLCAweDM3LCAweDAzLCAweDlGLCAweDAwLCAweDZFLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDE3LCAweDEwLCAweEQzLAorMHgwMCwgMHg3RSwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MUIsIDB4RDAsIDB4MEUsCisweDQwLCAweDJCLCAweDAwLCAweEVELCAweDAwLCAweEI2LCAweDBCLCAweEQwLCAweDRBLCAweDQ0LCAweDNCLCAweDAyLCAweDhELAorMHgwNCwgMHg4NCwgMHg4MCwgMHhEMCwgMHgwRSwgMHg0MCwgMHg5MywgMHgwMSwgMHhFMSwgMHgwNCwgMHhCNCwgMHg4MiwgMHhEOCwKKzB4NEMsIDB4NDAsIDB4NEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDAwLCAweDc5LCAweDAyLCAweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFFLCAweDYwLCAweDZCLCAweDI0LCAweEVELAorMHgwMSwgMHhCNCwgMHg5NywgMHhEMCwgMHg1RSwgMHg2MiwgMHg3QiwgMHgxOCwgMHgyRCwgMHgwMSwgMHhBNCwgMHhDNCwgMHhEMiwKKzB4MUUsIDB4NDEsIDB4RkIsIDB4MDAsIDB4RTEsIDB4MEQsIDB4QjQsIDB4MkYsIDB4RDEsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDEwLCAweDRELAorMHgwNywgMHg3NCwgMHgwNywgMHhEMCwgMHgzOCwgMHg0OSwgMHhFMywgMHgyMCwgMHhDRCwgMHgwNSwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MUMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MEYsIDB4RDAsIDB4NzQsIDB4NDAsIDB4NjMsIDB4NDAsCisweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDU5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg3RiwgMHgxMCwgMHg3QywgMHg0MSwgMHhGMCwKKzB4MTcsIDB4QzAsIDB4REYsIDB4MDAsIDB4N0YsIDB4MDQsIDB4M0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsCisweDdGLCAweDExLCAweEFDLCAweDA1LCAweEYwLCAweDI3LCAweEM4LCAweERGLCAweDA4LCAweDUzLCAweDgwLCAweDdDLCAweDAxLAorMHhGMSwgMHgwNCwgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDAsIDB4ODcsIDB4MDgsIDB4MUYsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzgsIDB4ODcsIDB4MDAsCisweDFDLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDgxLCAweDgyLCAweDAyLCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDEwLAorMHhGMCwgMHgyMSwgMHhDMCwgMHgwMywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3NCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDOCwgMHg0QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjcsIDB4MDIsCisweDlGLCAweDAwLCAweDdDLCAweDA2LCAweDMwLCAweDQ5LCAweEMwLCAweDY3LCAweDA0LCAweDlGLCAweEM4LCAweDdDLCAweDAyLAorMHgzMSwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg0RCwgMHg4QSwgMHgzMCwgMHg0OSwgMHhDMCwgMHg2NywKKzB4MDQsIDB4OTMsIDB4MDgsIDB4NEMsIDB4MjIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEVFLCAweDAwLCAweDlELCAweDQwLCAweEYwLCAweDA2LAorMHgxMCwgMHgwQiwgMHg0MCwgMHhBNywgMHgwMiwgMHg5RCwgMHgwMSwgMHhGNCwgMHgwQSwgMHgxMCwgMHg5QiwgMHg0MCwgMHgyNywKKzB4MDEsIDB4OUIsIDB4ODAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MjksIDB4NDQsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MDMsIDB4ODQsCisweDAyLCAweDEwLCAweDBCLCAweDAwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwNCwgMHg5RCwgMHg4MCwgMHg3MCwgMHgyMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NDQsCisweDQzLCAweDE0LCAweDI5LCAweDQwLCAweDI3LCAweDAyLCAweDgwLCAweDAwLCAweDQ0LCAweEMyLCAweDEwLCAweDA5LCAweDQwLAorMHg3MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwKKzB4MTgsIDB4OEQsIDB4NDIsIDB4MzQsIDB4MEEsIDB4MTQsIDB4MjgsIDB4NDQsIDB4QjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzYsCisweDAyLCAweDExLCAweDI4LCAweDQwLCAweDIzLCAweDQ1LCAweDg5LCAweDE0LCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHhBMywgMHgwMCwgMHg4MSwgMHgwMiwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg1MCwgMHhBMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4NDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDA0LCAweDEyLCAweDExLCAweEMyLCAweDA3LCAweDEwLCAweDFGLCAweDAwLCAweDdDLCAweDA0LCAweDM0LCAweDExLCAweEMwLAorMHgwNywgMHgwMSwgMHgxMywgMHgwNCwgMHg0QywgMHgwMCwgMHgzMiwgMHgwMSwgMHhDMCwgMHg0NywgMHg0MCwgMHg1MywgMHgwMSwKKzB4NEMsIDB4MDQsIDB4MzQsIDB4MTEsIDB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweEE3LCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDhFLCAweEYwLCAweDNCLCAweEMwLAorMHg3RiwgMHgyMCwgMHhCRSwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgzQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhGNywgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4RUYsIDB4MDAsIDB4OUMsIDB4MjMsIDB4RkQsIDB4MEEsIDB4RjAsIDB4MjksCisweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHg2QiwgMHgwMCwgMHg5MywgMHg4MiwgMHhGQywgMHgxNiwgMHhGMCwgMHg3QiwgMHhDMSwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwKKzB4RkMsIDB4MDYsIDB4RjAsIDB4N0IsIDB4QzEsIDB4NkMsIDB4MDEsIDB4QkUsIDB4ODEsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsCisweEQwLCAweEVDLCAweDAxLCAweEJGLCAweDA3LCAweEZDLCAweDE2LCAweEYwLCAweDFCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHg4NywgMHgwMCwgMHg1MSwgMHgwNSwKKzB4NzQsIDB4NTQsIDB4RDAsIDB4MzEsIDB4NDAsIDB4NDAsIDB4MDUsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MzEsCisweDQ0LCAweDA1LCAweDAwLCAweDFELCAweDBBLCAweDQ0LCAweDAxLCAweEQwLCAweDAxLCAweDQwLCAweDQ0LCAweDIwLCAweDFELAorMHgwMywgMHg3NCwgMHgyOCwgMHhEMiwgMHgwMSwgMHg0OCwgMHg3MCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QTMsIDB4NDAsIDB4ODUsIDB4NDQsIDB4MzYsIDB4MEEsIDB4RDgsIDB4NDksCisweDQwLCAweDIyLCAweDAwLCAweDgxLCAweDIxLCAweDM0LCAweDBBLCAweEQxLCAweDQ4LCAweDQwLCAweEEwLCAweDAwLCAweDhELAorMHhBMCwgMHgwNCwgMHgwMiwgMHhEMSwgMHgwOCwgMHg2MCwgMHhBMiwgMHgxMSwgMHhDRCwgMHgwNiwgMHgzNCwgMHg4MiwgMHhEMCwKKzB4MjgsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEE4LCAweDI1LCAweDgwLCAweDk1LCAweDAxLCAweDc0LCAweDgyLCAweEQwLCAweDE5LCAweDQxLCAweDIyLCAweDQwLCAweDkxLAorMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDEsIDB4MjYsIDB4MDUsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLCAweEI3LAorMHgwMCwgMHhGQywgMHgwNiwgMHhGMiwgMHgwQSwgMHhEMCwgMHhBRSwgMHgxMCwgMHg5MywgMHgwQiwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MjQsIDB4MjAsIDB4OUYsIDB4MDMsIDB4NEMsIDB4OEUsIDB4RjAsIDB4MDgsIDB4QzAsIDB4RUUsIDB4MDAsCisweEJGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA4LCAweEQwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjcsIDB4MEMsCisweDhGLCAweDQ5LCAweDdELCAweDEyLCAweEYxLCAweDQ5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDUyLAorMHhGMCwgMHgwOSwgMHg4MSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDgsIDB4MDEsIDB4MDEsIDB4MTMsIDB4MDIsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsCisweDFCLCAweDA4LCAweDdDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDE3LCAweDg4LCAweDdDLCAweDAwLAorMHhGMSwgMHgyMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxQiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0MywKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4REMsIDB4MDAsCisweDUwLCAweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDA1LCAweDQyLCAweDVDLCAweDAyLCAweDUxLCAweDAwLCAweEY0LCAweDA1LAorMHhEMCwgMHgxNSwgMHg0MSwgMHgxQywgMHgwMCwgMHg1MSwgMHg4MSwgMHhGNCwgMHgwNSwgMHhEMCwgMHgwNywgMHg0MSwgMHgxNCwKKzB4MDQsIDB4NzEsIDB4NDAsIDB4RjQsIDB4MEQsIDB4RDAsIDB4MjcsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEUyLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDA3LAorMHg5MCwgMHg5QywgMHg0MCwgMHgyMCwgMHgyMiwgMHg4OSwgMHgyMCwgMHgzNCwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHhCMCwKKzB4MEEsIDB4ODUsIDB4MDEsIDB4MzQsIDB4MjMsIDB4RDAsIDB4MDgsIDB4NDMsIDB4NzMsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzQsCisweDBFLCAweEQwLCAweEE4LCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHg4MCwgMHhBOCwgMHgwMCwgMHhFOSwgMHgwNCwgMHgzNCwgMHgwRSwgMHg5MCwgMHhDQSwgMHg1MCwgMHgzOCwKKzB4MDEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MEEsIDB4RDAsIDB4MEUsIDB4NzAsIDB4NDgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDdBLCAweDAwLCAweDYxLCAweDAwLCAweEI0LCAweDQyLCAweEQxLCAweDBBLCAweDYwLAorMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg2OCwKKzB4MDAsIDB4RUIsIDB4MDcsIDB4QkMsIDB4MDcsIDB4QjAsIDB4MUMsIDB4QzAsIDB4RDgsIDB4MDAsIDB4RUIsIDB4MDEsIDB4QkMsCisweDA2LCAweEYwLCAweDVGLCAweEMwLCAweDU4LCAweDAwLCAweEU3LCAweDAxLCAweEJDLCAweDA0LCAweEYxLCAweDE2LCAweEMyLAorMHg3MywgMHgwMCwgMHhFQiwgMHgwNywgMHhCQywgMHgwNiwgMHhGMCwgMHgxQSwgMHhDMCwgMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4NDAsIDB4RDcsIDB4MDAsIDB4N0MsCisweDAyLCAweDc0LCAweDA5LCAweEMwLCAweDE3LCAweDAwLCAweERFLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgwMywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwNCwgMHhDNiwgMHgzNSwgMHgwMiwgMHg1RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RkEsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDdGLCAweDAwLCAweEYzLCAweDAxLCAweERDLCAweDQ3LCAweDMwLCAweDFGLCAweEMyLAorMHg3OCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxQiwgMHg0MSwgMHg0RCwgMHgwMCwgMHhGMSwgMHgwOSwKKzB4Q0MsIDB4MDYsIDB4RTAsIDB4MTYsIDB4RTAsIDB4NkMsIDB4MDEsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4OUIsCisweEMyLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LAorMHhCOSwgMHgxMCwgMHhFMSwgMHgxMCwgMHg4NCwgMHgwMiwgMHgxMiwgMHgwQiwgMHg0MSwgMHgzOCwgMHgyMCwgMHhFMSwgMHgwMCwKKzB4QjQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MDgsIDB4MDEsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDAsIDB4RDEsIDB4MEUsCisweEQwLCAweDJDLCAweDQxLCAweDYxLCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDhBLCAweDQwLCAweDU3LCAweDYwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhGOSwgMHgwMSwKKzB4OTQsIDB4MDMsIDB4MTQsIDB4OEUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEEsCisweDQwLCAweDA4LCAweDAwLCAweEY5LCAweDAwLCAweEE0LCAweDAwLCAweEQwLCAweDhFLCAweDQxLCAweDI4LCAweDEzLCAweEUxLAorMHgwMCwgMHhENCwgMHgyMywgMHg5MCwgMHgwQSwgMHg0NCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MjMsIDB4MDAsIDB4QzksIDB4MDIsIDB4MDYsIDB4MDYsIDB4MTAsIDB4MDksCisweDQyLCAweDEwLCAweDAwLCAweEMxLCAweDA2LCAweDM0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweEM5LAorMHgwMSwgMHgyNiwgMHg0QywgMHhEMCwgMHgwQywgMHg0MiwgMHgyMCwgMHgwNCwgMHg0MSwgMHgwMCwgMHgxNCwgMHg4MSwgMHg5MCwKKzB4MDgsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEE4LCAweDI1LCAweDAwLCAweERCLCAweDAwLCAweDVDLCAweDAzLCAweDMwLCAweDFELCAweEMwLCAweDc0LCAweDQ4LCAweEQzLAorMHgxMywgMHg3QywgMHgwMiwgMHhCNCwgMHgxRCwgMHhDMCwgMHgwNSwgMHgwMCwgMHhDQiwgMHgwMSwgMHg2QywgMHg0NiwgMHhGMCwKKzB4MUQsIDB4RTAsIDB4NzQsIDB4MDAsIDB4RDMsIDB4NDAsIDB4MUQsIDB4MDYsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDQwLCAweEQ3LAorMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhEMCwgMHgzNywgMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHg3MCwKKzB4OEQsIDB4RDAsIDB4MDcsIDB4MDAsIDB4RDcsIDB4MEMsIDB4NUQsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzksIDB4MzUsIDB4MDIsCisweDRGLCAweDAwLCAweDY0LCAweDIyLCAweDc0LCAweDI5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgxMCwgMHg0QywgMHgwQiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4NUMsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RUMsIDB4MEUsIDB4RjAsIDB4OEMsIDB4QzAsIDB4MDQsIDB4MDAsCisweEZGLCAweDA4LCAweENDLCAweDAwLCAweEYwLCAweDg3LCAweEMwLCAweDdFLCAweDIwLCAweEYzLCAweDA4LCAweENDLCAweDAyLAorMHgzMywgMHgyRiwgMHhDNiwgMHgxMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MjYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4ODcsIDB4RDAsIDB4MTksIDB4QzAsIDB4RjYsIDB4MDAsCisweENELCAweDA5LCAweDQ0LCAweDAwLCAweEQyLCAweDE5LCAweDQwLCAweDQ0LCAweDA0LCAweERDLCAweDIwLCAweDZDLCAweDA0LAorMHg5MCwgMHgwNCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhEMywgMHgwMiwgMHg0NCwgMHgwMiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgxNywKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4ODIsCisweENELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDRELCAweDUwLCAweEI0LCAweDAyLCAweERELCAweDAwLCAweDY0LCAweDAzLAorMHhEOCwgMHgwOSwgMHg0MCwgMHg0NCwgMHgyMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgwNSwgMHg0NCwgMHgyNCwKKzB4MDEsIDB4RDAsIDB4MTAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDEsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLAorMHhEMCwgMHgwQywgMHg0MCwgMHgxMiwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MjYsIDB4MDAsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4NDAsIDB4NDEsIDB4MDAsIDB4MDUsCisweDAyLCAweDFDLCAweDA0LCAweDQ0LCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhCMCwgMHgxNiwgMHgwMCwgMHhGRiwgMHg0MCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgxNCwKKzB4MjAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzQsIDB4MDQsIDB4MDgsIDB4REYsIDB4MDAsIDB4NEMsCisweDAwLCAweEYwLCAweDBELCAweEMwLCAweDI2LCAweDEwLCAweDUzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMyLAorMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwKKzB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAxLCAweEYwLCAweDBCLCAweEQwLCAweDBGLCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHg3NywgMHg0MCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDksIDB4REMsCisweDA2LCAweEYyLCAweDFGLCAweEMwLCAweDdELCAweDAwLCAweEUzLCAweDAxLCAweERDLCAweDEyLCAweDMwLCAweDEzLCAweEMwLAorMHg0RSwgMHgxMCwgMHhCMywgMHgwMCwgMHhEQywgMHgzMiwgMHg3MCwgMHgyQiwgMHhDMCwgMHhCQywgMHgwMCwgMHhCMywgMHgyMCwKKzB4RkMsIDB4MTAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDc3LCAweDAwLCAweERELCAweDA0LCAweDQ0LCAweDA2LCAweDEwLCAweDFELCAweDQwLAorMHg3NCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwRSwgMHgxMCwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwMCwgMHg1MSwgMHg0MywKKzB4NDQsIDB4QjIsIDB4MTAsIDB4QTEsIDB4NDAsIDB4QkMsIDB4MDMsIDB4MTEsIDB4MzIsIDB4NzQsIDB4MjYsIDB4NTAsIDB4MTEsCisweDQwLCAweDBDLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwNCwgMHgxNCwgMHgwMywgMHg1OCwgMHgwQywgMHg0MCwgMHgyNywgMHgwMCwgMHhENSwgMHgwMCwKKzB4MTcsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MDYsIDB4MDgsIDB4ODEsIDB4MjgsIDB4MTYsIDB4MTIsIDB4RDgsIDB4NDAsCisweDQwLCAweDMwLCAweDAwLCAweDA1LCAweDg2LCAweDM0LCAweDAwLCAweDE4LCAweDA4LCAweDYwLCAweDRFLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwNCwKKzB4NTQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDYsIDB4MjYsIDB4MDAsIDB4RDUsIDB4MTEsIDB4NDQsIDB4MEMsIDB4MTIsIDB4MTEsCisweDQwLCAweDc0LCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDQ2LCAweDE4LCAweDEwLCAweDQwLCAweDM2LCAweDAwLCAweDE1LAorMHgwMSwgMHg3NCwgMHg0MywgMHg1MiwgMHgxOSwgMHg0MSwgMHgwQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDgsIDB4REYsIDB4MDAsIDB4MUUsIDB4MDYsIDB4NzAsIDB4RDUsCisweEMwLCAweEQzLCAweDAwLCAweEM3LCAweDAzLCAweDVDLCAweDBDLCAweDMwLCAweDMwLCAweEM0LCAweDUyLCAweDA0LCAweDkyLAorMHgwNywgMHg1RCwgMHgwNCwgMHg3MCwgMHgzOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5NywgMHg2MSwgMHg3QywgMHg4RCwgMHgzMCwKKzB4MzksIDB4QzAsIDB4MkEsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDgwLCAweDNELCAweDMwLCAweEZGLCAweDAxLCAweEVDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDdELCAweDAyLCAweEZCLAorMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHg2RiwgMHgyMCwgMHhCQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4RDAsIDB4M0QsIDB4MDAsIDB4M0IsIDB4MjAsIDB4RkMsIDB4MjQsIDB4RjEsIDB4MEIsIDB4QzAsIDB4MUYsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDM1LCAweDAwLCAweERGLAorMHgwMCwgMHg1QywgMHgwMywgMHhCMCwgMHg0OSwgMHhDMCwgMHhBNSwgMHgwMCwgMHhEQiwgMHgwMiwgMHg0QywgMHgwMCwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4MTcsIDB4MDIsIDB4RDcsIDB4MDUsIDB4NkMsIDB4MDIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MzcsIDB4NDQsCisweDkzLCAweDAyLCAweDZDLCAweDBCLCAweEYwLCAweDI5LCAweEM0LCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHg0RCwgMHg0MCwgMHgwRiwgMHgxNSwKKzB4MzgsIDB4NDAsIDB4MjQsIDB4MTAsIDB4OTEsIDB4MDAsIDB4MkMsIDB4NDQsIDB4RDEsIDB4QjEsIDB4NDQsIDB4NTQsIDB4MTAsCisweEQxLCAweDAxLCAweDc0LCAweEIyLCAweEQyLCAweDAxLCAweDRBLCAweEZGLCAweDAwLCAweDkwLCAweDMwLCAweDM0LCAweDgzLAorMHhEMSwgMHgwOCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4QTAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDAsIDB4MTQsIDB4MjYsIDB4MTAsIDB4OUMsIDB4NDgsIDB4MzEsIDB4MDAsCisweENDLCAweDA4LCAweDI1LCAweDAyLCAweEQwLCAweDEwLCAweDQwLCAweDExLCAweDAwLCAweDg1LCAweDAyLCAweDM0LCAweDAwLAorMHhEMCwgMHgwOCwgMHg0MiwgMHgzNiwgMHgwMCwgMHg4NSwgMHgyNSwgMHgyNCwgMHgwMCwgMHhEMCwgMHhCMCwgMHg0MSwgMHgwRCwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4N0EsIDB4MDAsCisweEZELCAweDAxLCAweEM0LCAweDFFLCAweDE4LCAweDlGLCAweDQwLCAweDdDLCAweDEwLCAweEY1LCAweDQxLCAweEI0LCAweDA3LAorMHhEMCwgMHgxMiwgMHgwMCwgMHg1OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHgwMCwgMHg3MywKKzB4MDQsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDEsIDB4MTYsIDB4MDAsIDB4MzQsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDFDLCAweDAyLAorMHgzMCwgMHg4QywgMHhDMCwgMHhCMSwgMHgwMCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHhGMCwgMHhFMCwgMHhDMywgMHgxMSwKKzB4MDAsIDB4ODcsIDB4MDAsIDB4MjgsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MzIsIDB4MzAsIDB4NDcsIDB4MDAsIDB4MkMsCisweDAzLCAweEYwLCAweDAwLCAweEMwLCAweDQ5LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhBMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgxMiwgMHg3MCwgMHg4RSwgMHhDMCwgMHgzQiwKKzB4MDIsIDB4RkIsIDB4ODgsIDB4RUMsIDB4MjMsIDB4RjAsIDB4ODIsIDB4QzAsIDB4MTksIDB4MDAsIDB4QkIsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLCAweDdCLCAweDQwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEMwLAorMHgwOSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDYsIDB4NzAsIDB4MEQsIDB4RTAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NDQsCisweDAxLCAweEIyLCAweDA1LCAweEMyLCAweDEzLCAweDAwLCAweENCLCAweDAwLCAweDZDLCAweDA1LCAweDcyLCAweDBELCAweEMyLAorMHhCNywgMHgwMywgMHhERCwgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgxNSwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MzksIDB4MTAsIDB4RUMsIDB4MDAsIDB4QjQsCisweDgyLCAweDEwLCAweDBFLCAweDUyLCAweDM4LCAweDAwLCAweDZELCAweDAwLCAweDk0LCAweDAzLCAweDkwLCAweDA2LCAweDQwLAorMHgxQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhDNSwgMHgwMSwgMHgxMCwgMHgwRSwgMHg0OCwgMHgzQiwgMHgwNSwgMHhFRCwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4OTAsIDB4MEUsIDB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDIwLCAweEFDLCAweDkxLCAweEI0LCAweDA2LCAweEQwLCAweDFGLCAweDQ4LAorMHg3OSwgMHgyMCwgMHhGRCwgMHgwMSwgMHhCNCwgMHg0NywgMHg5MCwgMHgxRSwgMHg2MCwgMHg1QiwgMHgwMCwgMHhFOSwgMHgwMSwKKzB4QTQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4QjQsIDB4MDcsIDB4RDgsIDB4MTQsCisweDY0LCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHg0MCwgMHhEMCwgMHg1QywgMHg0MCwgMHgzMSwgMHgwMCwgMHhDRCwgMHgwNSwKKzB4MzQsIDB4MDMsIDB4OTgsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDgsIDB4QzEsIDB4MDgsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MkMsCisweDQxLCAweDMzLCAweDg4LCAweERELCAweDAwLCAweDE0LCAweDFGLCAweDkwLCAweDJDLCAweDQwLCAweDU4LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMSwKKzB4RkMsIDB4MDksIDB4RjAsIDB4MDcsIDB4NDAsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MDEsIDB4RkMsIDB4MDEsIDB4QjAsIDB4NzcsCisweEMwLCAweDVCLCAweDAwLCAweDZCLCAweDAxLCAweEVDLCAweDI5LCAweDcwLCAweDA3LCAweEMwLCAweDE3LCAweDAwLCAweDdGLAorMHgwOCwgMHhGQywgMHgwMSwgMHhGMCwgMHg0NywgMHg0MCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4QzIsIDB4N0MsIDB4MDAsIDB4MDAsIDB4QTEsCisweDgwLCAweDA2LCAweDAxLCAweDFDLCAweDA4LCAweDU4LCAweDAwLCAweEMzLCAweDAxLCAweDg4LCAweDA3LCAweDAyLCAweDFGLAorMHg0MiwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgyMCwgMHgxRiwgMHg0MCwgMHg2MCwgMHgyMCwgMHhCMCwKKzB4MDEsIDB4RDAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDEyLCAweEY5LCAweDA5LCAweEM4LCAweDI1LCAweDAwLCAweDlGLAorMHgwNCwgMHgxQywgMHg1NiwgMHgzMSwgMHg4OSwgMHhDMywgMHgyNywgMHgwNCwgMHg5NywgMHgwNSwgMHg0MCwgMHgwNiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NEMsIDB4ODIsIDB4RjMsIDB4MzksIDB4QzEsIDB4NDMsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELAorMHgwMywgMHg3NCwgMHgwQSwgMHhEOCwgMHg0OCwgMHg0MCwgMHgyNCwgMHgxMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwNiwgMHgxNCwKKzB4MTksIDB4NDQsIDB4RTcsIDB4ODEsIDB4OUIsIDB4MTIsIDB4NDQsIDB4MEUsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MjAsCisweDlELCAweDBFLCAweDQ0LCAweDAyLCAweDc4LCAweDM5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQiwgMHg5OCwKKzB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NTYsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDgsIDB4NjcsIDB4MDAsCisweDk1LCAweDAwLCAweDU0LCAweDFBLCAweEQwLCAweDBELCAweDYwLCAweDI3LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAyLAorMHg1MCwgMHgyOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MjgsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsCisweDhELCAweDgwLCAweDE0LCAweEQyLCAweDUwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDEwLCAweDUyLAorMHhEMCwgMHg0OCwgMHg2MSwgMHgzMywgMHgwRCwgMHg4RCwgMHgxNCwgMHgxNCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg0MSwgMHg1MywKKzB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzAsIDB4MDQsIDB4MDAsCisweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDkwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDgwLCAweDVDLCAweDEwLAorMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxNCwgMHgxNCwgMHg0RCwgMHgxMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywKKzB4MDEsIDB4MUYsIDB4MDQsIDB4NEQsIDB4NTAsIDB4NzAsIDB4NDEsIDB4RTIsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDI3LCAweDAwLCAweEJGLCAweDk0LCAweEZDLCAweDAyLAorMHhDMCwgMHgwRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhBRiwgMHg4MCwgMHhFQywgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4NDEsIDB4MjcsIDB4MDUsIDB4QkYsIDB4MTQsIDB4RUMsCisweDAyLCAweDcwLCAweDBCLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwOCwgMHhGQywgMHgwMiwgMHg3OSwgMHgwQSwgMHhDMCwgMHgyNSwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDYsIDB4QjEsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REQsCisweDEyLCAweEYwLCAweDk5LCAweEMwLCAweDZELCAweDAzLCAweEI5LCAweDBELCAweEY4LCAweDAyLCAweDMwLCAweDBCLCAweEM4LAorMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgwNywKKzB4MDAsIDB4MUQsIDB4NDEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsCisweDI4LCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDQwLCAweDQ0LCAweDEwLCAweEQwLCAweEIxLCAweDQwLAorMHhDNCwgMHgwMywgMHgxMSwgMHgwRiwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg1MCwgMHg3MCwgMHg2MCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4NzQsCisweDAyLCAweEQ0LCAweDA4LCAweDQwLCAweDIxLCAweDIwLCAweDlELCAweDAwLCAweDE3LCAweDAyLCAweDkwLCAweDA4LCAweDQwLAorMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzNiwgMHg2MiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDgsIDB4NDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI1LCAweDAwLCAweDlELCAweDgwLCAweDc0LCAweDQyLCAweDEyLCAweDA5LCAweDQ0LAorMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHg1MiwgMHg0NiwgMHgwMCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4OEUsIDB4RDAsIDB4MDksIDB4NjEsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LAorMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3OCwgMHgwQSwgMHhGMiwgMHgwOCwgMHhDMCwgMHgyNSwgMHg4MCwgMHg5RiwgMHgwNCwKKzB4NUMsIDB4MEEsIDB4QjIsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MTksIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksCisweEMwLCAweDI1LCAweDIwLCAweDlBLCAweDAzLCAweDdFLCAweDE2LCAweDIwLCAweDA5LCAweEU1LCAweDE1LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MTIsIDB4RjAsIDB4MjksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MjgsIDB4MkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDkwLCAweDRDLCAweDAyLCAweEYwLCAweDQ4LCAweEM0LCAweDI3LCAweDAwLCAweDlGLAorMHg4OSwgMHg3RSwgMHgyMiwgMHhGMiwgMHgwOCwgMHhFMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MTgsIDB4QjIsIDB4NDEsCisweEMwLCAweDA0LCAweDIwLCAweDFGLCAweDA2LCAweDRDLCAweDI4LCAweEYyLCAweDYxLCAweEMwLCAweDA1LCAweDAyLCAweDFGLAorMHgwMiwgMHg2QywgMHgwOCwgMHhCMCwgMHgyMSwgMHhDMiwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMiwgMHgxQywgMHgwOCwgMHgzMCwKKzB4MjEsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweDE0LCAweDAwLCAweDdELCAweDExLCAweEIwLCAweDBELCAweDEwLCAweDE3LCAweDU4LCAweDE0LCAweDAwLCAweDZELAorMHgwMywgMHg0NSwgMHgwNSwgMHhEMCwgMHgxNywgMHg0NCwgMHg5RiwgMHgwMiwgMHg2RCwgMHgwMCwgMHhDMCwgMHgwMSwgMHgxMCwKKzB4MDUsIDB4NDAsIDB4OUYsIDB4MDIsIDB4N0QsIDB4ODAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MjcsIDB4MDAsIDB4NTAsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHg4QSwgMHg5MCwgMHhBQywgMHgwNCwgMHgzMCwgMHgwMCwgMHg0NSwgMHgwMiwgMHgxMiwgMHgwNiwgMHhEMSwKKzB4MkMsIDB4NDAsIDB4OTEsIDB4MDAsIDB4Q0QsIDB4MjIsIDB4MjQsIDB4MTcsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4QTIsCisweENELCAweDA4LCAweDE2LCAweEE3LCAweDEwLCAweDRDLCAweDUwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhGNCwgMHgwQSwgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MTAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NjEsIDB4MUIsIDB4ODAsCisweEZELCAweDMwLCAweEEwLCAweDQ3LCAweDkwLCAweDRFLCAweDQwLCAweDNCLCAweEEwLCAweDZELCAweDAxLCAweDg0LCAweDAzLAorMHg1MCwgMHgyQywgMHg0MCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4QjAsIDB4MUUsIDB4QzAsIDB4NzgsIDB4MjAsCisweDZGLCAweDAxLCAweDlDLCAweDA3LCAweEYwLCAweDFFLCAweEUwLCAweDU5LCAweDAwLCAweEVGLCAweDAxLCAweEU4LCAweDA3LAorMHhCMCwgMHhCRSwgMHhDMCwgMHg3QiwgMHgyMCwgMHhGRiwgMHgyMSwgMHgxQywgMHgwNywgMHgzNCwgMHgxRSwgMHhDMCwgMHg0NCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweDRGLCAweDAwLCAweDRELCAweDgzLAorMHhGMCwgMHgwRCwgMHhFMCwgMHgxNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg1QywgMHgwMywgMHg3MCwgMHg2RCwgMHhDNCwgMHgxNywKKzB4MDgsIDB4NUUsIDB4NDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDdELCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LAorMHgzMCwgMHgxNywgMHhDMCwgMHg3RCwgMHgwMCwgMHg3RiwgMHgwMSwgMHhEQywgMHgyNywgMHhGMSwgMHg5RiwgMHhDMCwgMHg1RiwKKzB4MDAsIDB4RUYsIDB4MDEsIDB4RUMsIDB4ODUsIDB4QjAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDIsIDB4RjMsIDB4NEQsIDB4QzgsCisweDA3LCAweDIwLCAweDFGLCAweEMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwMCwgMHg2RCwgMHg0MiwgMHhCNCwgMHgxMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzOCwKKzB4MDAsIDB4MjksIDB4NDQsIDB4ODAsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4NkQsIDB4MDIsIDB4OTQsCisweDAxLCAweEQwLCAweDBFLCAweDQzLCAweDFBLCAweDAwLCAweEUxLCAweDE4LCAweDg0LCAweDUzLCAweDEwLCAweDA3LCAweDQxLAorMHg1NSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTgsIDB4MkUsIDB4NTAsIDB4QjksIDB4MDAsIDB4NkQsIDB4QjIsIDB4ODAsCisweDQzLCAweEQwLCAweDBFLCAweDQyLCAweDFCLCAweDA0LCAweEVELCAweDE4LCAweDk1LCAweDAxLCAweDkwLCAweDBFLCAweDQyLAorMHgzQSwgMHgzMCwgMHhFMSwgMHg0NCwgMHhCNSwgMHgwMywgMHgxQywgMHgwRiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDBBLCAweDE4LCAweDBDLCAweDU4LCAweDMxLCAweDA4LCAweDQ5LCAweDAxLCAweDA0LCAweDA3LCAweEQwLCAweDA4LCAweDQwLAorMHhEMywgMHgwMCwgMHg0RCwgMHgwMywgMHgwNCwgMHg5QywgMHhEMCwgMHgxRCwgMHg0OCwgMHgwMiwgMHg4MCwgMHg5MSwgMHgwMSwKKzB4MzQsIDB4MTMsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweDlGLCAweDAwLCAweDc0LCAweDBCLCAweDMwLCAweDJELCAweEMwLAorMHgzMSwgMHgwMCwgMHhDRiwgMHgwMiwgMHg0RCwgMHgyMywgMHhGMiwgMHgwRCwgMHhDMCwgMHhENywgMHgwMCwgMHhDRiwgMHgwOSwKKzB4NUMsIDB4MUEsIDB4QjAsIDB4M0YsIDB4NDAsIDB4MjYsIDB4MjAsIDB4OTEsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MkQsCisweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgzNywgMHgwMCwgMHgxRiwgMHgwMSwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhEQiwgMHgwMiwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4NkQsIDB4QzQsIDB4MTcsIDB4MDEsIDB4REYsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MEQsCisweEMxLCAweDI2LCAweDAwLCAweDFGLCAweDAyLCAweDRDLCAweDAyLCAweEYxLCAweDRELCAweEMwLCAweDA3LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgwOCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDgsIDB4NzcsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RTAsIDB4OUYsCisweEQwLCAweDFDLCAweDAwLCAweEY5LCAweDAwLCAweDhELCAweDAyLCAweEIwLCAweDBGLCAweEMwLCAweDI0LCAweDAwLCAweDlGLAorMHgxMCwgMHg0OCwgMHg4MiwgMHhEMCwgMHgwNywgMHhDMCwgMHgxMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDAsIDB4MUQsIDB4MDMsIDB4NzQsIDB4ODYsIDB4RDIsIDB4M0MsCisweDQxLCAweDM0LCAweDAwLCAweDUxLCAweDIxLCAweDQ0LCAweDAzLCAweEQwLCAweDVDLCAweDQwLCAweDU0LCAweDA4LCAweERELAorMHg0MywgMHg0NCwgMHg0RSwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxRCwgMHgwNywgMHg2QywgMHhBMiwgMHhEMiwKKzB4MDEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDM0LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDFELCAweDQwLCAweDM1LCAweDAwLCAweDU1LAorMHgwMywgMHg0NSwgMHgwNywgMHhEMiwgMHgwRCwgMHg0MiwgMHg1NSwgMHgwNCwgMHg5RCwgMHg4MSwgMHg1NCwgMHgwNiwgMHg5MCwKKzB4MEQsIDB4NTAsIDB4QzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NTQsIDB4MDMsIDB4RDAsIDB4ODksIDB4NDEsIDB4MDcsIDB4MDgsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDAwLCAweDBELAorMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwKKzB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTgsIDB4MEMsIDB4NDAsIDB4MDAsIDB4MDAsCisweDFELCAweDAwLCAweDM2LCAweDgzLCAweEQwLCAweDAwLCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMSwgMHgzNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NDgsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MTAsCisweDVCLCAweDAwLCAweDQ4LCAweDAyLCAweEIwLCAweDBGLCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwMSwgMHhDOCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QTAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RjAsIDB4MEEsIDB4QzAsIDB4M0YsIDB4MjAsCisweDZGLCAweDAwLCAweEZDLCAweDAzLCAweEUwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweDdFLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywKKzB4MjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4N0YsIDB4MDAsCisweEVGLCAweDA5LCAweENDLCAweDI3LCAweEYyLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEZGLCAweDAxLCAweEJDLCAweDI3LAorMHhGMCwgMHgzRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhFRSwgMHgwOSwgMHhDQywgMHgwNywgMHgzMSwgMHgxRSwgMHhDMCwgMHg3QywKKzB4MDAsIDB4RjMsIDB4MDksIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDQ3LCAweDEwLCAweDFELCAweDQ0LCAweDQ0LCAweDEwLAorMHhEMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0OCwgMHg0NywKKzB4MDAsIDB4MUQsIDB4NDQsIDB4NDQsIDB4MDQsIDB4NTAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4ODQsIDB4NzQsCisweDA0LCAweDE0LCAweDExLCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwKKzB4MDgsIDB4Q0MsIDB4ODAsIDB4MzYsIDB4MTMsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDAzLCAweDExLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDgwLCAweDc0LCAweDAzLCAweDE4LCAweDBDLCAweDQwLAorMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwNSwKKzB4MDAsIDB4MUQsIDB4MDAsIDB4NTQsIDB4ODAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MTgsIDB4MUQsIDB4MDAsIDB4NzQsCisweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDBELCAweDAwLCAweDQ1LCAweDAwLCAweDUwLCAweDAxLCAweDQwLAorMHgwNCwgMHgwMCwgMHgxMSwgMHg2MCwgMHg3NiwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4NUMsCisweDAzLCAweEYyLCAweDBELCAweEQwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHg4MywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMCwKKzB4M0MsIDB4ODMsIDB4MzEsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHhCMCwKKzB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4RDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEQxLCAweDFGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHg4MCwKKzB4NEMsIDB4MjMsIDB4MzQsIDB4OEQsIDB4QzAsIDB4NzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsCisweEMwLCAweDM0LCAweDAxLCAweEQzLCAweDAwLCAweDRDLCAweDgzLCAweEYwLCAweDBELCAweEMwLCAweDBCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwMCwKKzB4NDAsIDB4NDAsIDB4MTAsIDB4MTAsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MUEsIDB4MDUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MTEsCisweEMwLCAweDg2LCAweDAwLCAweDFELCAweDAzLCAweDA0LCAweDA0LCAweDEwLCAweDExLCAweDQwLCAweDg1LCAweDA4LCAweDExLAorMHgxMSwgMHg2RSwgMHgyQywgMHhEMCwgMHgzMCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsIDB4NzIsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDYsIDB4MDcsIDB4MDAsIDB4OUMsCisweDQwLCAweDcwLCAweDgwLCAweEMxLCAweDAxLCAweDIwLCAweDg3LCAweDEwLCAweDBDLCAweDQyLCAweDMwLCAweDA0LCAweENELAorMHgyMCwgMHgwNCwgMHgyMywgMHgxQSwgMHgxQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHg4MSwgMHgyNCwgMHgwNywgMHhEMCwKKzB4M0MsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDgwLCAweDQ4LCAweDAyLCAweDNELCAweDAxLCAweDg0LCAweDA0LCAweDEwLCAweDkyLCAweDQwLCAweDQ4LCAweDAwLCAweDM5LAorMHgwMSwgMHhFNCwgMHgwNCwgMHgxMCwgMHgzMywgMHg0MCwgMHg0QSwgMHgyMCwgMHgyRCwgMHg5MSwgMHg4NSwgMHgxNCwgMHgxOCwKKzB4MTMsIDB4NDEsIDB4NDksIDB4MDAsIDB4MjEsIDB4MDEsIDB4QTQsIDB4NDQsIDB4RDAsIDB4MTIsIDB4NDEsIDB4MUIsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLAorMHg4MCwgMHg0NCwgMHgyMywgMHgzNCwgMHgwQywgMHhDMCwgMHgzMCwgMHgyNiwgMHhDMywgMHgwMCwgMHgyRCwgMHgyMywgMHgzMCwKKzB4MEMsIDB4NDAsIDB4MzAsIDB4MjAsIDB4Q0YsIDB4NDQsIDB4MEUsIDB4MDMsIDB4MzQsIDB4MEMsIDB4QzAsIDB4MzAsIDB4NDAsCisweEQzLCAweDA4LCAweDI1LCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgwRCwgMHgwOCwgMHgzRiwgMHg4MCwgMHhGRCwgMHgwMCwgMHhGMCwKKzB4MDIsIDB4QzAsIDB4MEIsIDB4ODAsIDB4MkYsIDB4MDAsIDB4REMsIDB4MjAsIDB4RjAsIDB4ODIsIDB4RTAsIDB4MEYsIDB4MDIsCisweDNGLCAweDAwLCAweEJDLCAweDEwLCAweEYwLCAweDAzLCAweEMwLCAweDBCLCAweDAwLCAweDNGLCAweDAwLCAweDVFLCAweDAwLAorMHhGMCwgMHgxMywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4MzMsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDczLCAweDAwLCAweEQzLCAweDAwLCAweDFDLCAweDAzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhEMywgMHgwMCwgMHg3RSwgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHg1NCwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MDksIDB4MjAsCisweDIxLCAweDIwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDA4LCAweDEwLCAweDJELCAweDQwLCAweEI0LCAweDAwLAorMHhEMCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHg1MiwgMHgwMiwgMHg0MCwgMHgwQiwKKzB4MDAsIDB4MjEsIDB4MDAsIDB4QjYsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDAsIDB4NDgsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEU1LCAweEMxLCAweEI0LCAweDA3LAorMHhEOCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0QSwgMHg3QiwKKzB4ODgsIDB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4OTQsIDB4MUUsIDB4NDAsIDB4N0YsIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsCisweDg3LCAweEQyLCAweDFFLCAweDUyLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgyOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEOSwgMHgwMCwgMHg1NiwgMHgwMCwKKzB4MDgsIDB4MEQsIDB4ODAsIDB4NzYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweEQwLCAweDAwLCAweDQ4LCAweDAzLCAweDA4LCAweDA5LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLAorMHg0OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxMSwKKzB4MDAsIDB4NTcsIDB4MDAsIDB4M0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTAsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsCisweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDE3LCAweDQwLCAweDQzLCAweDAwLCAweDFDLCAweDAxLCAweEI0LCAweDA1LCAweEMwLAorMHgxNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEY0LCAweDAwLCAweEYwLCAweDAzLCAweEM0LAorMHg4RiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwOCwgMHg3MCwgMHgyMywgMHhDMCwgMHg4RiwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDkzLCAweDA5LCAweDdDLCAweDI2LCAweDMwLCAweDE5LCAweEMwLAorMHg2NywgMHgwMCwgMHg5MywgMHgwOCwgMHg3QywgMHgwQSwgMHgzMSwgMHgxOSwgMHhDOCwgMHg2NiwgMHgwMiwgMHg5RiwgMHg4MCwKKzB4NkMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTIsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAorMHgyNiwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHg1MSwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMSwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MzksCisweDQ4LCAweDIzLCAweDAyLCAweDkxLCAweDAxLCAweDc0LCAweDBFLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMSwgMHhCMSwgMHg4MCwKKzB4RjQsIDB4MDIsIDB4MTAsIDB4OEIsIDB4NDAsIDB4MkYsIDB4MDEsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsCisweDQwLCAweDJFLCAweDIwLCAweEJELCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDhCLCAweDQwLCAweDJGLCAweDgwLCAweEI1LAorMHgwMCwgMHhGNCwgMHg1MiwgMHhEMCwgMHgwQiwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MkMsIDB4MDAsIDB4QTEsIDB4MDIsIDB4RjQsIDB4MEEsIDB4NTAsIDB4MEEsCisweDQwLCAweDJGLCAweDAwLCAweEExLCAweDAwLCAweEI0LCAweDBBLCAweDA0LCAweDFBLCAweDQwLCAweDJBLCAweDAwLCAweEJELAorMHgwMCwgMHg4NSwgMHgwMiwgMHgxOCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBNSwgMHgwMiwgMHhCNCwgMHgwMiwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEIwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEM4LCAweDA3LCAweDQwLCAweDEzLAorMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgwRiwgMHg0MCwgMHg0QywgMHgwMCwgMHgzMiwKKzB4MDEsIDB4QzIsIDB4MTcsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4NzcsIDB4QzAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDQwLCAweDlGLAorMHgwMSwgMHg3QywgMHg4NiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMiwKKzB4NDksIDB4NDEsIDB4MjUsIDB4MjAsIDB4OUYsIDB4MTQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlCLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MkIsIDB4MjAsCisweEFGLCAweDQyLCAweDhELCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDI4LCAweDAwLCAweEIzLCAweDAyLCAweENDLCAweDAyLAorMHhGMCwgMHgwQSwgMHhDMCwgMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MTUsIDB4NDQsIDB4NTQsIDB4RDAsIDB4MDEsIDB4NDgsIDB4MDcsIDB4MDAsCisweDFELCAweDAwLCAweDc0LCAweDE0LCAweDEwLCAweDUxLCAweDQxLCAweDA3LCAweDAwLCAweDFELCAweDgxLCAweDQ0LCAweDAwLAorMHg1MCwgMHgwMSwgMHg0OCwgMHgwNCwgMHgxMCwgMHgxNSwgMHgwMSwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MSwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsCisweDhELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQ4LCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDQyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHhBMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwOCwgMHg1MiwgMHgyMCwKKzB4MDAsIDB4RDEsIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0NCwgMHgyNywKKzB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4ODIsIDB4NTAsIDB4MDksIDB4NDYsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYxLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDRCwgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsCisweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDIwLCAweDA4LCAweEEzLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgxNCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NEMsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEQwLAorMHgwNCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0QywgMHgxMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywgMHgwMCwKKzB4N0MsIDB4MDQsIDB4MzAsIDB4MDEsIDB4QzEsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LCAweDAwLCAweDVELCAweDIwLCAweDQ0LCAweDAxLCAweEQxLCAweDA1LCAweDQwLAorMHgxNywgMHgxMCwgMHg1RCwgMHgwMSwgMHg3MCwgMHgwMSwgMHhEMCwgMHgwNywgMHg0MCwgMHhEQywgMHgwMCwgMHg3MSwgMHg4MSwKKzB4OTQsIDB4MDEsIDB4NTAsIDB4MTYsIDB4NDEsIDB4MUYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RjQsIDB4MDUsIDB4MTEsIDB4MjYsCisweDUwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLAorMHg2MiwgMHgwMCwgMHhERCwgMHgwOCwgMHgwNCwgMHgwNywgMHhEMCwgMHg4OCwgMHg0OCwgMHgzMywgMHgwMCwgMHg4RCwgMHg4MCwKKzB4NzQsIDB4MDMsIDB4NTAsIDB4MDQsIDB4NDAsIDB4QTAsIDB4MDYsIDB4QzksIDB4MTEsIDB4MDYsIDB4MDEsIDB4MTAsIDB4NEMsCisweDQ4LCAweDMzLCAweDBDLCAweEMxLCAweDgwLCAweDM0LCAweDA1LCAweDkwLCAweDE4LCAweDQ0LCAweDUwLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwOCwKKzB4ODQsIDB4NTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MTAsIDB4QjQsIDB4NDMsIDB4RDAsIDB4MUYsCisweDQwLCAweDVDLCAweDIwLCAweEY5LCAweDUwLCAweEQ0LCAweDgwLCAweDUwLCAweDBBLCAweDQwLCAweDFGLCAweDIwLCAweEUxLAorMHgwOCwgMHhGNCwgMHg0NywgMHg5MSwgMHgyQiwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RkYsIDB4MDUsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUUsCisweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDg3LCAweDcwLCAweDFFLCAweEMwLCAweDQ4LCAweDAwLCAweEVCLAorMHgwMSwgMHg4QywgMHgwNywgMHgzMCwgMHgxMiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhBMywgMHg4MSwgMHhCQywgMHgwNywgMHhCNCwKKzB4MUEsIDB4QzAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEI4LCAweDM1LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDIzLCAweEYxLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwNiwgMHgwMCwgMHhENywgMHgwMCwgMHg3OCwgMHgwMiwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDdGLCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwNiwgMHgzMCwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhFMywgMHgwMSwgMHg4QywgMHg0NywgMHgzMCwKKzB4MTcsIDB4QzAsIDB4NEYsIDB4MDAsIDB4M0YsIDB4MDEsIDB4OUMsIDB4MDQsIDB4NzAsIDB4MTYsIDB4QzQsIDB4NUMsIDB4MDAsCisweEVGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFCLCAweEMyLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHgzOSwgMHgwNCwgMHhBRCwgMHgwQywgMHhCNCwgMHgwMiwgMHgxMSwKKzB4OEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MEIsIDB4MTAsCisweDZELCAweDBBLCAweDg1LCAweDYwLCAweDU1LCAweDg2LCAweEMwLCAweDlBLCAweDEwLCAweEVELCAweDAwLCAweDg0LCAweDAzLAorMHhEMCwgMHgwQSwgMHg0NCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDgsIDB4RjQsIDB4MDIsIDB4MTAsIDB4OEUsIDB4NDAsIDB4M0YsIDB4MDQsCisweEUxLCAweDEwLCAweEU0LCAweDAzLCAweDEwLCAweDBFLCAweDQxLCAweDBCLCAweDAwLCAweDJELCAweDEwLCAweDk0LCAweDAwLAorMHhEMCwgMHgwNywgMHg0MSwgMHgzQSwgMHgwMCwgMHhCRCwgMHgwQSwgMHhBNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MSwgMHgyMywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4MzMsIDB4MDAsCisweDhELCAweDAzLCAweDc0LCAweDBBLCAweDEwLCAweDVDLCAweDQwLCAweEUzLCAweDAwLCAweEMxLCAweDQxLCAweDI0LCAweDBFLAorMHgxMCwgMHgxRCwgMHg0MCwgMHg4MywgMHgwMiwgMHg1RCwgMHgwMywgMHgwNCwgMHgwNCwgMHhEMCwgMHgxNCwgMHg0MCwgMHg3MiwKKzB4MTAsIDB4OUQsIDB4MDEsIDB4MjQsIDB4MEIsIDB4RDEsIDB4MTgsIDB4NDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDg5LCAweDdDLCAweDAzLAorMHgzMCwgMHgyRCwgMHhDMCwgMHg3NywgMHg0MCwgMHhEMywgMHgwMSwgMHg2QywgMHg0NiwgMHgzNCwgMHgxOSwgMHhDMCwgMHg4MywKKzB4MDAsIDB4NUYsIDB4NDEsIDB4MUMsIDB4MDgsIDB4RjAsIDB4QjEsIDB4QzAsIDB4NzYsIDB4MDQsIDB4REYsIDB4MTEsIDB4MkMsCisweDAyLCAweEYwLCAweDFELCAweEMyLCAweDc3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg3OCwgMHgxNywgMHhGMCwgMHg4RCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MTAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MDcsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsCisweDQ4LCAweDYwLCAweDAxLCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDBGLCAweEYwLCAweDJELCAweEMxLAorMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwKKzB4MDYsIDB4RjMsIDB4MDQsIDB4RkMsIDB4MEIsIDB4MzAsIDB4OUYsIDB4QzgsIDB4M0YsIDB4MDQsIDB4RkYsIDB4ODAsIDB4Q0MsCisweDU2LCAweEYwLCAweDBGLCAweEQwLCAweDBDLCAweDAwLCAweDczLCAweDEwLCAweENDLCAweDAwLCAweEIwLCAweDAzLCAweEMwLAorMHgyRiwgMHgwNCwgMHhCMiwgMHgwMywgMHhDOCwgMHg0MywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyNCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NzIsIDB4NDAsIDB4OTEsIDB4MDEsIDB4NzQsCisweDA2LCAweDEwLCAweDFELCAweDQ0LCAweDM3LCAweDA4LCAweENELCAweDQwLCAweDQ0LCAweDA2LCAweEQwLCAweDNELCAweDQwLAorMHg0NCwgMHgzMCwgMHhERiwgMHhDMCwgMHg0NSwgMHgwNCwgMHgxMCwgMHg3MSwgMHg0NCwgMHg2MywgMHgxMCwgMHhEMSwgMHgwMSwKKzB4NDQsIDB4MTcsIDB4QjAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDAwLCAweDkxLCAweDgwLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHhERCwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MSwgMHg0NiwgMHgwMCwgMHgxMSwgMHgwMCwKKzB4NDQsIDB4MEMsIDB4OUEsIDB4MTUsIDB4NDIsIDB4NzcsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzcsIDB4MDcsIDB4MDAsIDB4NDksCisweDQxLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHgzNCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxNCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwKKzB4MDYsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDQsIDB4MjgsIDB4NDUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDQsCisweDQwLCAweDMzLCAweDYwLCAweDg1LCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDA0LCAweDQwLCAweDQzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzNiwgMHgwMCwgMHhEMywgMHgwMCwKKzB4N0MsIDB4MDMsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MEQsCisweEMwLCAweDA0LCAweDAwLCAweDAxLCAweDgwLCAweDRDLCAweDAwLCAweEI0LCAweDA1LCAweEMwLCAweDI3LCAweDAwLCAweDk3LAorMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgwNywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjEsIDB4MEYsCisweEMwLCAweDJCLCAweDEwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweDgwLCAweDBGLCAweDIwLCAweDdGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwNywgMHhDMCwgMHgyRiwgMHgwMCwgMHhCQiwgMHg0MCwgMHhDQywgMHg4MywgMHhGMCwKKzB4MDcsIDB4QzQsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweEEwLCAweDdGLCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDFCLCAweEQwLCAweDI4LCAweDAxLCAweEE3LAorMHgwMSwgMHhGQywgMHgzMiwgMHgzMCwgMHgxQSwgMHhDMCwgMHgzQywgMHgwMCwgMHhCMywgMHgxNCwgMHhFQywgMHgxMiwgMHgzMCwKKzB4OEIsIDB4QzAsIDB4M0QsIDB4MEMsIDB4QkYsIDB4MDgsIDB4Q0MsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDc3LCAweDAwLCAweDlELAorMHgwMSwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg0MiwgMHg2NCwgMHgwMCwgMHg1MSwgMHgwMSwgMHg0NCwgMHgwQSwgMHgxMCwKKzB4MTksIDB4NDAsIDB4RkMsIDB4MTIsIDB4OTEsIDB4MDIsIDB4NDQsIDB4M0EsIDB4MTAsIDB4NDksIDB4NDAsIDB4QkMsIDB4MDAsCisweDlELCAweDAwLCAweDQ0LCAweDJBLCAweEQwLCAweDBELCAweDQ0LCAweDBGLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzMSwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHg4NSwgMHg1MCwKKzB4MDQsIDB4NDgsIDB4MDAsIDB4ODIsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NTAsIDB4MDksIDB4NDAsIDB4MzIsIDB4MDAsCisweDg1LCAweDAwLCAweDM0LCAweDQwLCAweDUwLCAweDg4LCAweDQyLCAweDMxLCAweDI0LCAweDA5LCAweDA2LCAweDA0LCAweDAwLAorMHhEMCwgMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MTEsIDB4NDUsIDB4MDUsIDB4MTAsIDB4MTEsIDB4NDQsIDB4NDQsIDB4MDAsCisweEQxLCAweDAzLCAweDA0LCAweDhDLCAweDExLCAweDg5LCAweDQwLCAweDM2LCAweDgwLCAweDk0LCAweDQxLCAweDE0LCAweDA0LAorMHg1MCwgMHgxOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHgwRCwgMHgxMSwgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHgyMCwgMHgwRiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsCisweENGLCAweDAxLCAweDBDLCAweDA0LCAweDcwLCAweDEwLCAweDQwLCAweDQ0LCAweDIwLCAweEM3LCAweDAzLCAweDVDLCAweDBFLAorMHg3MCwgMHg0MCwgMHhEMCwgMHgzMiwgMHgwOCwgMHgxNywgMHhBMywgMHg3QywgMHg5NiwgMHg3MSwgMHgxMSwgMHhDMCwgMHgzNSwKKzB4MTAsIDB4MUYsIDB4MDMsIDB4NEUsIDB4MEUsIDB4RjgsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgyQiwgMHgwMCwgMHg3RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwgMHgzRCwKKzB4NjAsIDB4OUIsIDB4MDAsIDB4RUMsIDB4MDIsIDB4QjAsIDB4MDAsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4QTAsIDB4RkYsCisweDAyLCAweEYwLCAweDBELCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMywgMHg0QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgwNywKKzB4MjQsIDB4RDMsIDB4MDQsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MjEsIDB4QzAsIDB4MzYsIDB4MDEsIDB4MTcsIDB4MDAsIDB4NUMsCisweDgyLCAweEYwLCAweDI5LCAweEMwLCAweDc2LCAweDA0LCAweDEzLCAweDAyLCAweDdDLCAweDA2LCAweDMwLCAweDBELCAweEMyLAorMHhBOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwKKzB4MDgsIDB4REMsIDB4MDEsIDB4NDYsIDB4MDUsIDB4MTAsIDB4NDEsIDB4NDgsIDB4MjcsIDB4MDAsIDB4NTEsIDB4ODEsIDB4NDQsCisweDAyLCAweDEwLCAweDE5LCAweEM0LCAweEJFLCAweDAwLCAweDlCLCAweDAwLCAweDQ0LCAweDAyLCAweEQxLCAweDA5LCAweDQ4LAorMHhCQywgMHgwMCwgMHgxMSwgMHg4MCwgMHg3NCwgMHgyMiwgMHgxMCwgMHgwRiwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzIsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MDYsCisweDMzLCAweDEwLCAweDA0LCAweDQwLCAweDIzLCAweDAyLCAweDQ5LCAweDAyLCAweDE0LCAweDAwLCAweDEwLCAweDJDLCAweDUxLAorMHgzMywgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHhCMiwgMHgwMCwgMHg4MSwgMHg4MCwKKzB4MzQsIDB4MDAsIDB4MTEsIDB4MEMsIDB4NDgsIDB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBELCAweDA4LCAweDdBLCAweDAwLCAweEZELCAweDAxLCAweDg0LCAweDA3LCAweDExLCAweDEyLCAweDQwLAorMHg3QiwgMHgxMCwgMHg3OSwgMHgxMSwgMHg5NCwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MSwgMHg3QiwgMHgwMCwgMHg2QywgMHgwMSwKKzB4OTQsIDB4MDcsIDB4RDgsIDB4MUUsIDB4NDAsIDB4NzAsIDB4NDIsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NUMsIDB4MUUsCisweDQwLCAweDM3LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLAorMHgzMiwgMHgwMCwgMHhDRiwgMHgwMCwgMHgwNCwgMHgyMSwgMHgxMiwgMHg4NCwgMHhDMCwgMHgzMywgMHgwMSwgMHhDQiwgMHgwMCwKKzB4MUMsIDB4MjEsIDB4MzAsIDB4NEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4QzcsIDB4RTgsIDB4MUMsIDB4ODEsIDB4RjAsIDB4MjQsCisweEMwLCAweDMyLCAweDAyLCAweEMzLCAweDAwLCAweDdDLCAweDExLCAweDMwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4ODEsIDB4RjAsIDB4ODMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsCisweENDLCAweDNBLCAweDAwLCAweEZCLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweEJGLCAweDAyLCAweEZGLAorMHg0OCwgMHhGQywgMHgwMSwgMHhCMCwgMHgwRiwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTIsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDUsCisweEMyLCAweDEzLCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDFELCAweEMwLCAweDM2LCAweDAwLCAweDVGLAorMHg0MCwgMHg3QywgMHgwMSwgMHg3MCwgMHgxNSwgMHhDMCwgMHgzNCwgMHgwMSwgMHg1MywgMHgwMSwgMHg0RCwgMHgwMSwgMHgxMCwKKzB4MEQsIDB4QzQsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweDk4LCAweDM5LCAweDA4LCAweEVELCAweDAwLCAweDg0LCAweDAxLCAweEQwLCAweDAyLCAweDQwLCAweDNCLCAweDAwLCAweDYxLAorMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQSwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MDcsIDB4NTAsIDB4QkMsIDB4MDAsIDB4RjEsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTAsIDB4NEUsIDB4NDAsIDB4NEYsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEZELAorMHgxMSwgMHhBNiwgMHgwNSwgMHhEMCwgMHgxNiwgMHg0MCwgMHg1QiwgMHgwNCwgMHg2NSwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMCwKKzB4MEEsIDB4NTAsIDB4N0EsIDB4OTMsIDB4NkQsIDB4MDEsIDB4QjQsIDB4MDUsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4NDEsCisweEU1LCAweDAzLCAweDg0LCAweDA3LCAweDEwLCAweDlFLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHgwMCwgMHg0RCwgMHgxMiwgMHgwNiwgMHhCRCwgMHhEMCwKKzB4MjAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MDEsIDB4NzQsIDB4NDcsIDB4RDAsIDB4RUMsIDB4NDAsIDB4MzIsIDB4ODAsCisweENELCAweDBBLCAweDM0LCAweDJCLCAweEQwLCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDhCLAorMHgxMCwgMHgwQywgMHg0MCwgMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTcsIDB4QTgsIDB4MTcsIDB4MDAsIDB4NkYsIDB4MDIsIDB4RUMsIDB4MDksIDB4RjIsIDB4MDcsIDB4QzAsIDB4MUIsIDB4MEEsCisweDc3LCAweDA3LCAweEZDLCAweDE1LCAweEYwLCAweDA2LCAweEMwLCAweDE2LCAweDAwLCAweDdGLCAweDIxLCAweEY0LCAweDJELAorMHg3OCwgMHg4NywgMHhDMSwgMHgxNCwgMHgwMCwgMHg3NywgMHgwMCwgMHhDQywgMHgzOSwgMHgzMCwgMHgwNSwgMHhDMCwgMHg1RiwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsCisweDFGLCAweDgyLCAweDdELCAweDAwLCAweEYzLCAweDAxLCAweDAxLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDAwLAorMHhDMCwgMHgyMSwgMHhDMCwgMHgwNSwgMHgyMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MTksIDB4MDQsIDB4N0MsIDB4MDgsIDB4RjQsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDA0LCAweDVDLCAweDBFLAorMHhGMCwgMHg0OSwgMHhDNCwgMHgyNCwgMHgwOCwgMHg5QiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMCwgMHg5OSwgMHgwMiwgMHg2NywKKzB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OTcsIDB4ODAsIDB4M0MsCisweDBFLCAweDcwLCAweDQ5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgxQSwgMHhEMCwgMHg3OCwgMHg0NCwgMHgyNCwKKzB4MTAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjksIDB4NDQsIDB4QTQsIDB4MDgsIDB4OUQsIDB4MDAsIDB4NzQsCisweDgyLCAweEQxLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDkxLCAweDgwLCAweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLAorMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDQsIDB4MzQsIDB4MjAsIDB4OTksIDB4MDgsIDB4NDQsCisweDAyLCAweDEwLCAweDA5LCAweDYwLCAweDI3LCAweDA0LCAweERELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMSwgMHg5NSwgMHgwMCwgMHg3NCwgMHg0MiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDAyLCAweEQwLCAweDA5LCAweDQ4LCAweDIwLCAweDA1LCAweDgxLCAweDAwLCAweDA0LCAweDUyLCAweDEwLCAweDBDLCAweDQwLAorMHgyMSwgMHgxNSwgMHg4RCwgMHgxNCwgMHgzNCwgMHg1MiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgzMywgMHgwNSwgMHg4MSwgMHgxNCwKKzB4MzQsIDB4NTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNCwgMHgwMSwgMHgxQiwgMHgwMCwgMHg0QywgMHgxMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMSwgMHgxRiwgMHgwNiwKKzB4N0MsIDB4MTAsIDB4RjAsIDB4NDEsIDB4QzgsIDB4MDcsIDB4MDEsIDB4MTcsIDB4MDQsIDB4N0MsIDB4MTAsIDB4NzAsIDB4MDEsCisweEM0LCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLAorMHgyNywgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMiwgMHgwQiwgMHhEMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4NTIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4QkYsIDB4MTAsIDB4RkMsIDB4NTIsIDB4RjAsIDB4NEIsCisweEMxLCAweDI3LCAweDA1LCAweEJGLCAweDE0LCAweEZDLCAweDUyLCAweEYwLCAweDY5LCAweEMzLCAweDY3LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MCwgMHgyNSwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NkYsIDB4NjAsIDB4QjMsIDB4MDAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MEEsCisweEMwLCAweDJELCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDUyLCAweDMwLCAweDM5LCAweEMxLCAweEFGLCAweDAwLCAweDlGLAorMHgwOSwgMHhDQywgMHgwNiwgMHhGMCwgMHg1QiwgMHhFMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsCisweDQwLCAweDA3LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDJDLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLAorMHgwMSwgMHg3NCwgMHgxOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg0NywgMHgwOSwgMHgxRCwgMHgwQiwgMHg0NCwgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDIwLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDg1LAorMHgwMSwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBMywgMHg4MCwgMHg4MSwgMHgyNiwgMHgzNCwgMHg0MiwgMHgxNCwKKzB4MDgsIDB4NDAsIDB4QTMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MEEsIDB4RDAsIDB4NjgsIDB4NDEsIDB4NEIsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDlELAorMHgwMCwgMHg0NiwgMHgwNiwgMHhEMywgMHgxOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5NSwgMHgwNCwgMHg3NiwgMHgxMiwgMHhEMiwKKzB4NDksIDB4NDAsIDB4MjQsIDB4QzAsIDB4OTEsIDB4MDIsIDB4NzQsIDB4ODIsIDB4MDAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsCisweDlELCAweDAyLCAweDQ0LCAweDAyLCAweEQyLCAweDA5LCAweDQ4LCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg4RiwgMHgwMiwgMHg0NCwgMHgxNiwgMHhGMiwKKzB4MzksIDB4QzEsIDB4QTcsIDB4MDAsIDB4OTcsIDB4MDIsIDB4N0MsIDB4MTYsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsCisweDkzLCAweEMyLCAweDdDLCAweDEyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDRELCAweDZFLAorMHhEOCwgMHgwOSwgMHg0OCwgMHgxNywgMHgyOCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjMsIDB4MDIsCisweDlCLCAweEEwLCAweDdDLCAweDAyLCAweEYxLCAweDE5LCAweEMwLCAweDI3LCAweDIwLCAweDlGLCAweDA1LCAweDdDLCAweDE2LAorMHhGMCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgwMSwgMHg3QywgMHg0NiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsCisweDFGLCAweDA0LCAweDZDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LAorMHhGMCwgMHgwMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMiwgMHgwNCwKKzB4MDQsIDB4MUYsIDB4MDIsIDB4NEMsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDdELCAweDAyLCAweEM0LCAweDQ1LAorMHhDMiwgMHgwNywgMHgwMCwgMHgxRiwgMHgyMCwgMHg3RCwgMHgyMSwgMHg3QywgMHgwMSwgMHhEMCwgMHgxNiwgMHg1OCwgMHgxQywKKzB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDEsIDB4MDUsIDB4QzAsIDB4MUUsIDB4MDQsIDB4NUQsIDB4MDAsIDB4QzQsCisweDg5LCAweDEwLCAweDA1LCAweDUwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHg4RCwgMHg4QiwgMHgyNCwgMHgwNiwgMHhDOCwgMHhDQywgMHgwMCwgMHg1MywKKzB4MDQsIDB4MEMsIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDEsIDB4RDQsIDB4NDAsIDB4NDAsIDB4MDAsIDB4QzUsIDB4MDAsIDB4NzQsCisweDAzLCAweEQwLCAweDBDLCAweDYwLCAweDcyLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDBCLCAweDE1LCAweDhDLCAweDQwLAorMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgzOCwKKzB4MDAsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4QkIsIDB4ODAsIDB4MkQsIDB4ODIsIDB4OTQsCisweDAzLCAweEQwLCAweDA3LCAweDQwLCAweDg4LCAweDAwLCAweEVELCAweDI0LCAweEI0LCAweDIzLCAweEQwLCAweDFGLCAweDQwLAorMHgzQSwgMHgwMCwgMHhGRCwgMHg4MCwgMHgwNCwgMHgwNywgMHgxMiwgMHgxRSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzksIDB4MDAsIDB4QUYsIDB4MDEsIDB4QUMsCisweDA2LCAweEYwLCAweDFBLCAweEM4LCAweDVCLCAweDAwLCAweDJGLCAweDAxLCAweEIwLCAweDA3LCAweEYwLCAweDEyLCAweENBLAorMHg3OCwgMHgwMCwgMHhFNywgMHhBMywgMHhCQywgMHg4NywgMHhGMCwgMHg3RiwgMHhDNCwgMHg1QSwgMHgwMCwgMHhGRiwgMHgwRiwKKzB4ODksIDB4MDcsIDB4MzIsIDB4MUYsIDB4QzAsIDB4NDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDhGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLAorMHgzNywgMHgwMCwgMHgxRiwgMHg4MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgxMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MEIsIDB4RjAsIDB4MkQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4QTQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsCisweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHg3RCwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgyNiwgMHhGMCwgMHg5QiwgMHhDMCwgMHg2RiwgMHgwMiwgMHgzMywgMHgwOSwKKzB4REMsIDB4RUYsIDB4NzMsIDB4MTcsIDB4QzgsIDB4NUMsIDB4MjIsIDB4RkQsIDB4MDksIDB4RkMsIDB4MEYsIDB4RjEsIDB4M0YsCisweEMwLCAweDdGLCAweDAyLCAweEY3LCAweDgxLCAweERDLCAweDA1LCAweDEwLCAweDlCLCAweEMwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwMCwgMHhBRCwgMHg0OCwKKzB4ODUsIDB4MjIsIDB4RDAsIDB4MEEsIDB4MDAsIDB4M0IsIDB4MDAsIDB4MjEsIDB4QzAsIDB4ODQsIDB4RTMsIDB4MTAsIDB4ODYsCisweDQxLCAweDk4LCAweDAwLCAweEVELCAweDE4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLAorMHgwMCwgMHhGNCwgMHgxMSwgMHgxMiwgMHhDQiwgMHg0MCwgMHg1NSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MkQsIDB4MTAsIDB4ODQsIDB4MkEsIDB4RDgsIDB4MEEsCisweDYxLCAweDJCLCAweDYwLCAweDMxLCAweDUwLCAweDk0LCAweDIzLCAweDUxLCAweDA2LCAweDUwLCAweDNBLCAweDk4LCAweEVELAorMHgwOCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MSwgMHgxQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHg5NCwgMHg0MywgMHg5OSwKKzB4MEYsIDB4NDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDIwLCAweDMxLCAweDAwLCAweDBELCAweDQ3LCAweDA0LCAweDAwLCAweEQ4LCAweDU4LCAweDQwLCAweEIzLCAweDAyLCAweDAxLAorMHg1MywgMHgwNCwgMHgwNywgMHg1OCwgMHgzNCwgMHg0MCwgMHgxMiwgMHg4MCwgMHhDRCwgMHg0MSwgMHgyNCwgMHgzMywgMHhEMCwKKzB4M0MsIDB4NDAsIDB4MjMsIDB4NTAsIDB4QzEsIDB4NDIsIDB4MzQsIDB4NDYsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MTEsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDEwLCAweDlELAorMHgwMCwgMHg0QywgMHgwMiwgMHhEMCwgMHgxOSwgMHhDMCwgMHg5MywgMHg0MCwgMHgxMywgMHgwMSwgMHhEQywgMHgwQiwgMHg3MCwKKzB4MDUsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RkYsIDB4MDMsIDB4RkMsIDB4MEIsIDB4RjgsIDB4M0YsIDB4QzQsIDB4MjcsIDB4MDAsCisweEYzLCAweDBGLCAweDVDLCAweDAyLCAweEI0LCAweDBELCAweDQwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTMsIDB4OTAsIDB4NDUsIDB4QzAsIDB4MDUsIDB4MDAsCisweERGLCAweDEwLCAweDc0LCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLAorMHg3MCwgMHgwRCwgMHg4OCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODQsIDB4MDgsIDB4M0UsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QzAsIDB4MDMsIDB4QzgsIDB4MUYsIDB4MDAsCisweDNCLCAweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDE4LCAweDAwLCAweEZBLCAweDAwLCAweEFDLCAweDAzLAorMHhCMCwgMHgwRiwgMHhDOCwgMHgwNiwgMHgxMCwgMHhFRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwRiwgMHg4MCwgMHgxMywKKzB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDAsCisweDlELCAweDAxLCAweDc0LCAweDA1LCAweEQwLCAweDExLCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDgzLCAweDc0LCAweDAzLAorMHhEMCwgMHgxNCwgMHg0MCwgMHg5NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHhDNCwKKzB4MDQsIDB4REQsIDB4MDAsIDB4NDQsIDB4MUMsIDB4RDIsIDB4MEQsIDB4NDIsIDB4MTcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDA2LAorMHhEMCwgMHg2OSwgMHg0MCwgMHgyNywgMHgwMCwgMHgxOSwgMHgxMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzNSwgMHg2MCwgMHgxNCwKKzB4MDAsIDB4RDUsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4NjUsIDB4MDAsIDB4REQsIDB4MjAsIDB4NTQsCisweDA0LCAweEQ4LCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywKKzB4MDAsIDB4MDAsIDB4MjAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDYwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA2LCAweDAwLCAweEQ4LCAweDA4LCAweDQwLAorMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzNiwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUIsIDB4MjAsIDB4RkMsCisweDAzLCAweEYyLCAweDA1LCAweEQwLCAweDE0LCAweDEwLCAweEQ3LCAweDAwLCAweEVDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLAorMHgwNCwgMHgxMCwgMHhGRiwgMHgyMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDOCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QTgsIDB4M0YsIDB4MDAsIDB4MkYsIDB4MDAsIDB4RkMsCisweDgwLCAweEYxLCAweDBCLCAweEMwLCAweDNCLCAweDAwLCAweDJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLAorMHgxRiwgMHgyMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgyMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4RTAsIDB4MTcsIDB4MjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDVGLCAweDQwLCAweEIzLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDE3LCAweEMwLAorMHg3RiwgMHgwMCwgMHg3MywgMHg4MSwgMHhGQywgMHgxMCwgMHhGMSwgMHhDMywgMHhDMCwgMHgyQywgMHgwMiwgMHgzMywgMHg4MSwKKzB4Q0MsIDB4MjMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4NDgsIDB4MTAsIDB4QkYsIDB4MjAsIDB4RkMsIDB4MDUsIDB4MzAsIDB4MUYsCisweEMwLCAweDBDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LAorMHg3NywgMHgwOCwgMHg5MSwgMHg0QiwgMHg3NCwgMHgyRSwgMHhEMiwgMHgxOSwgMHgwMCwgMHg3RiwgMHgwMCwgMHg1MSwgMHgwMSwKKzB4NzQsIDB4MkMsIDB4RDAsIDB4RTEsIDB4NDAsIDB4QTQsIDB4MDEsIDB4MTEsIDB4MDEsIDB4QzQsIDB4MUIsIDB4NTEsIDB4QkIsCisweDQ4LCAweDY0LCAweDAwLCAweDhELCAweDRFLCAweDc0LCAweDA3LCAweDEwLCAweDBGLCAweDQ4LCAweDA0LCAweDYwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgyMywgMHgwMCwgMHg4MSwgMHg0MCwKKzB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDksCisweDQwLCAweEEwLCAweDgwLCAweDE1LCAweDAwLCAweDA0LCAweDFCLCAweDEwLCAweDBDLCAweDQwLCAweDAwLCAweDAwLCAweDhELAorMHgxMCwgMHgzNCwgMHg4MiwgMHgxMCwgMHgwQywgMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MjUsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MEQsCisweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDgyLCAweDc0LCAweDA0LCAweEQwLCAweDA5LCAweDQ4LCAweDI1LCAweDg0LCAweDExLAorMHgwMSwgMHg0NSwgMHgwNywgMHg1MywgMHg4OSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5RCwgMHg0MCwgMHgzNCwgMHg0MywgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDg4LCAweDIzLCAweDAwLCAweEQzLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweDQ0LCAweDMzLCAweDQwLCAweEQzLAorMHgwMCwgMHg3QywgMHgwQywgMHhGMCwgMHg4OCwgMHhDMCwgMHg2NCwgMHg0MCwgMHgxMywgMHg4MSwgMHg0QywgMHgwNSwgMHgzMCwKKzB4MUQsIDB4OTAsIDB4NDQsIDB4MDAsIDB4OUUsIDB4NDAsIDB4N0MsIDB4MkQsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweEFELCAweDAwLCAweEJGLAorMHg4MSwgMHhGQywgMHgxMywgMHhEMCwgMHg0QiwgMHg0OCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwOSwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MUIsIDB4QzAsIDB4NkUsIDB4MkEsIDB4M0UsIDB4MTAsIDB4QkMsIDB4ODMsIDB4RjAsIDB4MDksIDB4QzQsIDB4MkYsIDB4MjgsCisweEJGLCAweDAwLCAweEY0LCAweDAzLCAweEYxLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMiwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDksIDB4RTAsIDB4MjQsIDB4MjAsCisweDFCLCAweDAxLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEM4LCAweDA0LCAweDQ0LCAweEQzLCAweDAwLCAweDRDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDNSwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDIsCisweDk1LCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweDBCLCAweDQyLCAweDY0LCAweDA0LCAweDAxLCAweDAzLCAweDVDLCAweEFGLAorMHg1MSwgMHgxOCwgMHhDMCwgMHhFNiwgMHgxOCwgMHhEMSwgMHgwMSwgMHg2QywgMHgwMywgMHhEMCwgMHg2RCwgMHg0MCwgMHg0QywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MTIsIDB4MDQsCisweDgxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEwLAorMHgxMiwgMHgwMCwgMHgwMSwgMHg2NCwgMHg4OCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwRiwgMHg1MSwgMHhCQywgMHg0MSwgMHg4MSwKKzB4MTAsIDB4ODUsIDB4MTEsIDB4MDQsIDB4ODIsIDB4RDIsIDB4MkQsIDB4NDIsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDgyLCAweEExLCAweDIxLCAweEI0LCAweDE2LAorMHhEMCwgMHgxQSwgMHg0MCwgMHg3MywgMHgwOCwgMHhBNSwgMHgwMSwgMHhCNCwgMHgwNCwgMHgxOCwgMHg5MiwgMHg0MCwgMHg2OCwKKzB4MDgsIDB4MjksIDB4MDEsIDB4MTQsIDB4MjcsIDB4NTIsIDB4MUUsIDB4NjQsIDB4NkYsIDB4MDAsIDB4QTUsIDB4MjksIDB4QTQsCisweDA2LCAweEQwLCAweDFFLCAweDQwLCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgxMCwgMHgyMCwgMHgwMCwgMHhDMywgMHgwOCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOCwgMHg0MiwgMHgzMywKKzB4MDIsIDB4ODMsIDB4MDAsIDB4MzQsIDB4NDgsIDB4MzAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4MEIsIDB4MDAsIDB4M0MsCisweDQzLCAweDcwLCAweDBDLCAweEMwLCAweDAxLCAweDA0LCAweDg3LCAweDUwLCAweDBBLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgyOSwKKzB4NDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4N0QsIDB4MDgsIDB4QkYsIDB4MDAsIDB4RkMsCisweDAwLCAweEQwLCAweDBFLCAweDUyLCAweDJCLCAweDAwLCAweDM3LCAweDAwLCAweEZDLCAweDBCLCAweEYwLCAweDBGLCAweEUwLAorMHgzRSwgMHgxMCwgMHg5QiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgxRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4NzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsCisweDIzLCAweDMwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweEZDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLAorMHgwNiwgMHgxMCwgMHg5MywgMHg4MCwgMHgzQywgMHgwOCwgMHgzNCwgMHg0RCwgMHhFMSwgMHgwNywgMHgwOCwgMHg5RiwgMHgwMSwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4RDAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEExLCAweDA0LCAweEI0LCAweDEzLCAweDEwLCAweDBBLCAweDQwLAorMHhCQiwgMHgyOCwgMHhFQywgMHgyMCwgMHhCNCwgMHg4MiwgMHhEMCwgMHg2RSwgMHg0OCwgMHgwOCwgMHgwMCwgMHhBMSwgMHgwMCwKKzB4QjQsIDB4MDIsIDB4NTAsIDB4MEUsIDB4NEEsIDB4M0IsIDB4MDAsIDB4QkQsIDB4NDAsIDB4QkMsIDB4MDIsIDB4RDAsIDB4NEUsCisweDQwLCAweDQ4LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHhFRCwgMHgwMCwgMHhFOSwgMHgwOSwgMHgzNCwgMHgwRiwgMHgxMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMSwgMHhBRCwgMHgwMSwKKzB4QjQsIDB4MDQsIDB4RDAsIDB4MTgsIDB4NDAsIDB4NDgsIDB4MDAsIDB4QTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsCisweDQwLCAweDZCLCAweDEwLCAweEVELCAweDAxLCAweEE0LCAweDA2LCAweEQwLCAweDlFLCAweDUwLCAweDBDLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHhFMywgMHgwMCwgMHhDOSwgMHg4OCwKKzB4MzQsIDB4MDcsIDB4MTAsIDB4MjgsIDB4NDEsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MjMsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEQsCisweDQwLCAweDE0LCAweDAyLCAweEMxLCAweDAxLCAweDM0LCAweENCLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDA0LCAweENELAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg1MCwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4REQsIDB4MjAsIDB4NUIsIDB4MjEsIDB4N0MsIDB4MDUsIDB4MzQsIDB4MDcsCisweEMwLCAweDE3LCAweDAwLCAweDdGLCAweDAzLCAweEZDLCAweDAxLCAweEYxLCAweDA3LCAweEMwLCAweDVDLCAweDQwLCAweDczLAorMHgwNSwgMHhCQywgMHgxRCwgMHhCMCwgMHgwNSwgMHhDNCwgMHhERiwgMHgyMSwgMHg1RiwgMHgwMCwgMHhFQywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDg3LCAweDQxLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwOCwgMHg2QywgMHgzMCwgMHhGMCwgMHgzMSwgMHhEMCwgMHg0NSwgMHgwMCwgMHgxRiwgMHgwMSwgMHg3QywgMHgwMCwgMHg3MCwKKzB4MjEsIDB4QzAsIDB4ODcsIDB4MTAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzgsIDB4NEIsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDhGLAorMHg4MCwgMHg0QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgxMCwgMHg0QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjYsIDB4MDEsIDB4OUIsIDB4MDEsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDA0LCAweDdDLCAweDgyLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHhCRCwgMHgwMCwgMHg4NSwgMHgwMiwgMHgxMCwKKzB4MDgsIDB4QzAsIDB4MkMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MEEsIDB4RDIsIDB4MjksIDB4NDAsIDB4RTQsIDB4MjAsCisweDgxLCAweDRGLCAweDU0LCAweDAyLCAweEIwLCAweEQ5LCAweDQ2LCAweEE3LCAweDFFLCAweDlELCAweDAwLCAweDM0LCAweDAyLAorMHgxMCwgMHg2QiwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTAsIDB4MjQsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4NjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDhELCAweDAwLCAweDQwLCAweDJBLCAweEQwLCAweDE5LCAweDYwLCAweDI2LCAweDAwLCAweEQxLCAweDIwLCAweDQ0LCAweDJBLAorMHg4MCwgMHgwOSwgMHgyMCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MTAsCisweDhELCAweDAyLCAweDA0LCAweDAyLCAweDEwLCAweDI5LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAyLCAweDE0LCAweDUyLAorMHhEMCwgMHg0OCwgMHg0MSwgMHgyMCwgMHgwRCwgMHg5MSwgMHgyMCwgMHg1NCwgMHg1MiwgMHg5OCwgMHg0OCwgMHg0OSwgMHgyMywKKzB4MDAsIDB4OEQsIDB4OTUsIDB4NzYsIDB4MEEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAxLCAweDRDLCAweDg0LAorMHgzMCwgMHgwMSwgMHhEMCwgMHg0NCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0QywgMHgxMCwgMHhGMCwgMHg0NSwgMHhEMCwgMHgxMiwKKzB4MDEsIDB4MTMsIDB4MDAsIDB4NEMsIDB4OTAsIDB4QjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjQsIDB4N0MsCisweDAwLCAweDM0LCAweDEwLCAweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHgzQiwgMHgxMCwgMHhCRiwgMHgwMywgMHhGQywgMHgwQSwgMHhDMCwgMHgxRiwgMHhDMCwgMHhBNSwKKzB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzMsIDB4MkYsIDB4NDUsIDB4QkYsIDB4MDAsIDB4RkMsCisweDUyLCAweDgwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDE0LCAweEZDLCAweDA2LCAweEYwLCAweDY5LCAweEMxLAorMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwKKzB4MDAsIDB4OUYsIDB4MDcsIDB4Q0MsIDB4ODYsIDB4MzQsIDB4MjksIDB4QzAsIDB4NkMsIDB4MDQsIDB4OEYsIDB4MDAsIDB4RkMsCisweDA2LCAweEYwLCAweDVGLCAweEMwLCAweDZDLCAweDA1LCAweEJCLCAweDQwLCAweENDLCAweDA2LCAweDMwLCAweDFCLCAweEMyLAorMHgyQywgMHgwOCwgMHhGMywgMHgwNSwgMHg0QywgMHgwQSwgMHhGMCwgMHg3QiwgMHhDMCwgMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsCisweDgwLCAweDEwLCAweDExLCAweDUwLCAweDg0LCAweDAwLCAweDFELCAweDIxLCAweDc0LCAweDIwLCAweEQwLCAweDUwLCAweEMxLAorMHg0MiwgMHgwMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHg2RCwgMHg1MCwgMHgwMSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHg1NSwKKzB4NDQsIDB4MDUsIDB4RDAsIDB4NjEsIDB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDAyLCAweDA1LCAweDBBLCAweDEwLCAweDA4LCAweDQwLAorMHgyMiwgMHgwMCwgMHg4RCwgMHgxNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMCwgMHgwNSwgMHg4NSwgMHgwMCwKKzB4MDUsIDB4OTIsIDB4NTgsIDB4ODgsIDB4NDAsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MDgsIDB4MDQsIDB4ODIsIDB4RDAsIDB4ODgsCisweDQwLCAweDQyLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LAorMHgyNSwgMHg4MCwgMHg4RCwgMHgwMSwgMHg0NCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5RCwgMHg4MCwKKzB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MjYsIDB4MjAsIDB4OTUsIDB4MDgsIDB4MDQsIDB4MDIsIDB4NTgsIDB4MDksCisweDQwLCAweDM0LCAweDAyLCAweDkxLCAweDAwLCAweDQ1LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHg2NywgMHgwMCwgMHhCRiwgMHg4MCwKKzB4NEMsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzAsIDB4MjYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksCisweEMwLCAweDY0LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDg2LCAweDcyLCAweDA5LCAweENBLCAweDY0LCAweDIwLCAweDkzLAorMHgyMSwgMHhDQywgMHgwRSwgMHhGMCwgMHgwOSwgMHhEMCwgMHgxNiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4NDksCisweEMwLCAweDI1LCAweDA0LCAweDlGLCAweDAzLCAweDdDLCAweDA2LCAweEYwLCAweDU4LCAweEQwLCAweDI3LCAweDAyLCAweDkzLAorMHgyMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHgwMCwgMHg4RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhEMCwKKzB4MDksIDB4QzAsIDB4NTEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDQwLCAweDEzLAorMHgwMiwgMHg0RCwgMHgwMCwgMHgzMiwgMHgyMSwgMHhGMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0NCwgMHg0QywgMHgyMCwgMHgzNCwKKzB4NDEsIDB4QzAsIDB4MDQsIDB4MEEsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzYsIDB4NTAsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDVDLCAweDAwLCAweDUxLAorMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxRiwgMHg4MCwgMHg1MSwgMHgwMCwgMHhDNCwgMHgwOSwgMHg1MCwKKzB4MjcsIDB4NTAsIDB4MUQsIDB4MDAsIDB4NjEsIDB4RDIsIDB4QzQsIDB4MDUsIDB4MjAsIDB4MDcsIDB4NDAsIDB4MTgsIDB4MDAsCisweDc1LCAweDA4LCAweDZDLCAweDAxLCAweEQwLCAweDE3LCAweEQwLCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg2MiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MjMsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MDQsIDB4NEEsIDB4MTAsIDB4M0MsIDB4NDksIDB4MzAsIDB4MDAsCisweEMwLCAweDAxLCAweDA1LCAweDE3LCAweDE5LCAweDI4LCAweDQwLCAweDMwLCAweDg0LCAweEMxLCAweDAxLCAweDA0LCAweDAzLAorMHhEMCwgMHgxOSwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4ODAsIDB4RkMsIDB4MDAsIDB4RTksIDB4MDQsIDB4QjQsIDB4NDIsIDB4RDAsIDB4NEUsIDB4NDAsIDB4RkIsIDB4MDAsCisweEY1LCAweDI1LCAweDg0LCAweDQ2LCAweDUwLCAweDZFLCAweDY4LCAweDY5LCAweDIxLCAweDIxLCAweDIwLCAweDg0LCAweDAxLAorMHgxOCwgMHgwNiwgMHg0MSwgMHgzOCwgMHgwMCwgMHhFNSwgMHgxMCwgMHhBNiwgMHgxMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxMiwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NjgsIDB4MDAsCisweEVCLCAweDA3LCAweEJDLCAweDA2LCAweEYwLCAweDNFLCAweEMwLCAweDZCLCAweDAwLCAweEUxLCAweDAzLCAweDhDLCAweDA2LAorMHgzMiwgMHg3MiwgMHg0MCwgMHgyOCwgMHg0MSwgMHgyMywgMHgwMSwgMHg4NCwgMHgwNywgMHgzMiwgMHgxMCwgMHhDMCwgMHg3OCwKKzB4MDAsIDB4RTMsIDB4MDEsIDB4OEMsIDB4MEYsIDB4RjAsIDB4MTAsIDB4QzAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDMxLCAweDQwLCAweEQ3LCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhEQiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwMSwgMHhEOCwgMHgyNywKKzB4MDIsIDB4MEYsIDB4MjAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDIsIDB4MzMsIDB4MTAsIDB4NUYsIDB4MTIsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMiwgMHg2RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg2QywKKzB4MDAsIDB4RUYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzIsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MTAsIDB4MjMsIDB4MDEsIDB4OEMsCisweDA1LCAweDMwLCAweDEzLCAweEMwLCAweDdGLCAweDA4LCAweDdGLCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgyOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDIsIDB4MEUsIDB4NDAsIDB4QTgsIDB4MDAsIDB4RUQsIDB4MDgsIDB4ODQsCisweDAzLCAweEIwLCAweDJGLCAweDQwLCAweDI4LCAweDAxLCAweDIxLCAweDgwLCAweDk0LCAweDAwLCAweDUyLCAweDAyLCAweDQwLAorMHgzQiwgMHgwQSwgMHg2RCwgMHgwNCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsCisweDAzLCAweEQwLCAweDFGLCAweDQwLCAweDI4LCAweDAwLCAweEZELCAweDAxLCAweDg0LCAweDIyLCAweDEwLCAweDhFLCAweDQwLAorMHgyQywgMHgxMCwgMHgzOSwgMHgwOCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHgyRCwgMHgwMCwKKzB4RjQsIDB4MDcsIDB4MTAsIDB4MDYsIDB4NDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDIzLCAweDAxLCAweENELCAweDAwLCAweDA0LCAweDA3LCAweEQwLCAweDBDLCAweDQxLAorMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNiwgMHg0NSwgMHg5MCwgMHgxQywgMHg0MCwgMHgyMCwgMHgwMCwgMHgwOSwgMHgwMSwKKzB4MTYsIDB4MTksIDB4NTAsIDB4OTAsIDB4NDAsIDB4QjMsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MzQsIDB4NkYsIDB4MTAsIDB4MEMsCisweDQwLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LAorMHhBNSwgMHgwMCwgMHhERiwgMHgwNCwgMHg0QywgMHgxMiwgMHhGMCwgMHgwRCwgMHhEMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwKKzB4NEQsIDB4MTIsIDB4MzAsIDB4MUIsIDB4QzAsIDB4M0MsIDB4NDEsIDB4MUIsIDB4MDUsIDB4NEMsIDB4MDEsIDB4MzQsIDB4MDEsCisweEMwLCAweDQ3LCAweDEyLCAweDlGLCAweDAwLCAweDdDLCAweDBGLCAweDM2LCAweDAxLCAweEM4LCAweDU3LCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhCNywgMHgwMCwgMHhERiwgMHg0MCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MzMsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODAsCisweEMwLCAweEE3LCAweDAwLCAweDE3LCAweDQwLCAweDdDLCAweDA4LCAweEYxLCAweDAwLCAweEMwLCAweEQ3LCAweDAwLCAweDFGLAorMHg0MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDQywgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4NkYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4OEMsIDB4MEUsIDB4MzAsIDB4MEYsCisweEMwLCAweDJDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDMzLCAweEM0LCAweDBDLCAweDAwLCAweDMzLAorMHgwMCwgMHhCQywgMHgwOSwgMHgzMCwgMHgwMywgMHhDMCwgMHgxQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwKKzB4MEIsIDB4RDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsCisweDIwLCAweEQ2LCAweDEwLCAweERELCAweDQwLCAweDQ0LCAweDRBLCAweDEwLCAweDBELCAweDQwLCAweEY1LCAweDUwLCAweEQxLAorMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgzMSwgMHg0MiwgMHgwMSwgMHgwOCwgMHgxMSwgMHgyMywgMHg3NCwgMHgwRCwgMHgxMCwKKzB4NTEsIDB4QzAsIDB4QjYsIDB4MDAsIDB4MUQsIDB4NjEsIDB4NDQsIDB4MDMsIDB4MTEsIDB4MkQsIDB4NDAsIDB4MDQsIDB4MDIsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEE0LCAweDAxLCAweERELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgyNCwgMHgwMiwgMHhDMSwgMHgyMCwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MEQsIDB4NDAsIDB4QjQsIDB4OTAsIDB4MTksIDB4NTEsIDB4NzQsIDB4MDksIDB4MTAsIDB4MTEsIDB4MDAsIDB4MTQsIDB4MDIsCisweDFELCAweDAzLCAweDA1LCAweDgzLCAweDEwLCAweDI0LCAweDQwLCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNCwKKzB4MEMsIDB4NDAsIDB4MTEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MjUsIDB4MDAsCisweDAxLCAweDAwLCAweDM0LCAweDAxLCAweDE0LCAweDAwLCAweDYwLCAweDMyLCAweDAwLCAweDFELCAweDAwLCAweDA0LCAweDAzLAorMHgxMCwgMHgwQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QjAsIDB4MjYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4NEQsIDB4MDEsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MjQsIDB4MDAsCisweEYzLCAweDAwLCAweDQ1LCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAxLAorMHgzMCwgMHgwMSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhDQywgMHgwMywgMHgzNCwgMHgwRCwgMHhDOCwgMHgwNCwKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDgxLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAxLAorMHhFMiwgMHgwNywgMHg5OCwgMHgwRiwgMHg0MCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZCLCAweDEwLCAweDlDLCAweDA3LAorMHhGMCwgMHgxRiwgMHhDMCwgMHg0RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNSwgMHhGMCwgMHgxNywgMHhDOCwgMHgyRSwKKzB4MTAsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDgsIDB4QjYsIDB4MDAsIDB4RkMsCisweDI3LCAweDcwLCAweDAyLCAweEMwLCAweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwOCwgMHg3NywgMHgwMCwgMHhGRCwgMHgwMywgMHg0NCwgMHgwNiwgMHgxMCwgMHgxRCwgMHg0MCwgMHg0NywKKzB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MUQsIDB4NDAsIDB4RTQsIDB4MDIsIDB4MUQsIDB4MDQsIDB4RjQsCisweDVCLCAweDEwLCAweDAxLCAweDQwLCAweDQ3LCAweDA4LCAweDlELCAweDAxLCAweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQwLAorMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4OEQsIDB4NDAsIDB4NzQsCisweDUxLCAweDkwLCAweDA1LCAweDQ4LCAweDAyLCAweDAwLCAweDBELCAweDEyLCAweDM0LCAweDFCLCAweDEwLCAweDRDLCAweDQ5LAorMHgzMywgMHgwMCwgMHgwRCwgMHgwMiwgMHgzNCwgMHgxMywgMHhEMCwgMHgwMCwgMHg0MCwgMHg0RSwgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MjAsIDB4NDAsCisweDA3LCAweDEwLCAweDBELCAweDQwLCAweDY3LCAweDAwLCAweERELCAweDIzLCAweDc0LCAweDgxLCAweDE0LCAweDFELCAweDQxLAorMHg0NCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMywgMHgxNCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwOCwgMHg5RCwgMHg1MSwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDEsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDg4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDU0LCAweDFGLCAweEYwLCAweDBELCAweEMwLAorMHg0NywgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgxOSwgMHhGMCwgMHgxNCwgMHhDMCwgMHhDNiwgMHgwMCwgMHg5RiwgMHgwNywKKzB4NzQsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MTcsIDB4MDEsIDB4N0MsIDB4MDMsIDB4NzksIDB4MzksCisweEMwLCAweDIyLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLAorMHgzQywgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsCisweEM0LCAweDBGLCAweDMwLCAweDFGLCAweDIwLCAweEZFLCAweEE3LCAweEYwLCAweDBCLCAweDQwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NUMsIDB4NDksIDB4QjAsIDB4MjUsCisweEMwLCAweDA2LCAweDAwLCAweDlCLCAweDAwLCAweDRFLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweDE3LAorMHgwMiwgMHg0QywgMHgxMywgMHhGMiwgMHgyOSwgMHhDNSwgMHgyOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4RkQsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MEQsCisweEMwLCAweDA3LCAweDAwLCAweERELCAweDA1LCAweDA0LCAweDFELCAweDEwLCAweDBELCAweDQwLCAweDY0LCAweDAwLCAweDExLAorMHgwMCwgMHhFQywgMHg2MywgMHhEMCwgMHg3MSwgMHg0MCwgMHg4NCwgMHgwQiwgMHgxMSwgMHgwMSwgMHg0NCwgMHg0MywgMHhEMCwKKzB4MTgsIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDNCLCAweDEwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweENELAorMHgwMCwgMHgxNCwgMHgwQiwgMHg5NCwgMHgwMCwgMHg0MiwgMHg2MiwgMHgwMCwgMHg4OSwgMHg4MCwgMHg1NCwgMHgwNywgMHhEMCwKKzB4NEMsIDB4NDAsIDB4RjEsIDB4MTAsIDB4ODUsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4QjAsIDB4NDAsIDB4MEQsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDgwLCAweEVELAorMHg0MSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg0OSwgMHgzMCwgMHhFRCwgMHhDOSwgMHg5NCwgMHgwNiwgMHgxMCwKKzB4MTcsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RjAsIDB4NDksIDB4QjQsIDB4MDcsIDB4RDAsIDB4MTMsIDB4NDAsIDB4NDgsIDB4MDAsCisweEUxLCAweDExLCAweDg0LCAweDA3LCAweEQwLCAweDE2LCAweDQwLCAweDNFLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMSwgMHgzMCwKKzB4OEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MzMsIDB4QjAsIDB4MDAsIDB4QzAsIDB4MzIsIDB4MDQsCisweDVCLCAweDgwLCAweDE0LCAweDAzLCAweEYyLCAweDBDLCAweEQwLCAweDMwLCAweDAzLCAweDQ2LCAweDA4LCAweDBELCAweDAzLAorMHhGMCwgMHgwMCwgMHhDMCwgMHg0OSwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzIsIDB4MzcsIDB4MDAsCisweENGLCAweDAwLCAweDZDLCAweEEzLCAweEYwLCAweDBDLCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDZDLCAweDQzLAorMHhGMCwgMHg4MCwgMHhDMCwgMHgwMywgMHgwQSwgMHhERiwgMHgwOCwgMHg3QywgMHgyMywgMHhGMCwgMHg4RCwgMHhDMCwgMHgwOSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsCisweERGLCAweDFFLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEM0LCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAxLAorMHhGMCwgMHgxNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHg0RiwgMHg3MSwgMHgwRCwgMHhDOCwgMHgzNCwKKzB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzQsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0OCwgMHgwQiwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwKKzB4MDgsIDB4RkQsIDB4ODAsIDB4MDQsIDB4MDMsIDB4MTIsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsCisweDAzLCAweEQwLCAweDA2LCAweDYwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwgMHgwNywgMHgxNCwgMHgxRSwgMHg0MCwgMHg0QiwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MTcsIDB4NTAsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODUsCisweDA3LCAweDUwLCAweDFGLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDg3LCAweEQwLCAweDFDLCAweDQwLAorMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4NEYsIDB4OTAsIDB4MEMsIDB4NDgsIDB4QzMsIDB4ODMsIDB4Q0QsIDB4MTIsIDB4MDQsCisweDRCLCAweEQwLCAweDdDLCAweDQwLCAweEIwLCAweDBDLCAweENELCAweDAyLCAweDA0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLAorMHgwMCwgMHgwMCwgMHhDRCwgMHg4OCwgMHgzMCwgMHgyMiwgMHhEMCwgMHgxQywgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4QkMsCisweDQ5LCAweDMwLCAweDA1LCAweEMyLCAweDlGLCAweDAwLCAweDZGLCAweDAyLCAweDlDLCAweDA5LCAweEYwLCAweDI3LCAweEM4LAorMHgxQywgMHgwMCwgMHg3RiwgMHgwMCwgMHg0QywgMHgwMSwgMHg3MCwgMHgwNSwgMHhEMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgyMSwKKzB4N0MsIDB4MDUsIDB4RDAsIDB4MjcsIDB4NDAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgxOCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4OEYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsCisweEQxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwKKzB4NkMsIDB4MjYsIDB4NzEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUUsIDB4MDAsIDB4NEMsIDB4MTYsIDB4RjAsIDB4MDksCisweEMwLCAweDI1LCAweDIwLCAweDkzLCAweDM4LCAweDc4LCAweDBFLCAweEYyLCAweDE4LCAweEMwLCAweDQwLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NDQsIDB4MDYsIDB4MTEsIDB4MDksCisweDQ0LCAweDI3LCAweDAwLCAweDlELCAweDgwLCAweDQ0LCAweDhFLCAweEQxLCAweDI5LCAweDQwLCAweDIwLCAweDA0LCAweDkxLAorMHgwMSwgMHg3NCwgMHgwNiwgMHhEMCwgMHg4OSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MUMsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDY0LCAweDQyLCAweDQwLCAweDA5LCAweDQyLCAweDM3LCAweDgwLCAweDhELAorMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MSwgMHgyRCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg3NCwgMHg0MiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweDIwLCAweDAwLCAweDhELCAweDE0LCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwNSwgMHg4RCwgMHgzNCwgMHgwNCwgMHg1MiwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MkMsIDB4MjAsIDB4ODEsIDB4MTQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NTEsIDB4NTAsIDB4QTAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA2LCAweDAwLCAweDFGLAorMHgwNCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMCwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MjEsIDB4MUYsIDB4MDQsIDB4NEMsIDB4MTEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MEQsIDB4MDAsCisweDEzLCAweEM0LCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4RUYsIDB4ODAsIDB4RkMsIDB4NTIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsCisweEJGLCAweDE0LCAweDdELCAweDUyLCAweEYwLCAweDQ4LCAweEM1LCAweDI3LCAweDAwLCAweEJGLCAweDQwLCAweEZDLCAweDUyLAorMHhGMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NjAsCisweEIzLCAweDAwLCAweDlDLCAweDBBLCAweDcwLCAweDA5LCAweEMwLCAweDNELCAweDAwLCAweDkzLCAweDAyLCAweENDLCAweEM2LAorMHhGMCwgMHgyQiwgMHhDMiwgMHgyRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhDQywgMHgwQSwgMHhEMCwgMHgwQiwgMHhDMCwgMHg2NywKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsCisweDFELCAweDBBLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDA0LAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDc0LCAweDAyLAorMHg5MCwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg1MiwgMHgwOSwgMHg0MCwgMHhBMSwKKzB4MDAsIDB4ODEsIDB4MjIsIDB4MDQsIDB4NDIsIDB4RDIsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsCisweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MUEsIDB4MTIsIDB4MjksIDB4NDIsIDB4MjQsIDB4NDAsIDB4OTEsIDB4ODAsIDB4NDUsCisweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDA4LCAweDlELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDI5LCAweDQwLAorMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzQsIDB4RTMsIDB4MDQsIDB4OTMsIDB4MDIsIDB4NUMsCisweDBFLCAweDcwLCAweDA4LCAweEMwLCAweEU1LCAweDA0LCAweDkyLCAweDFCLCAweDQ4LCAweDAyLCAweEUwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgxOSwgMHg0RCwgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNywgMHgyOCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDY3LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMSwgMHg4RiwgMHgyMSwgMHg3QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg4RiwgMHgwMSwKKzB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg0MCwgMHgzMSwgMHgyMSwgMHhDOCwgMHg4NywgMHgwMCwgMHgxRSwgMHgwMiwKKzB4N0MsIDB4MDAsIDB4MzIsIDB4ODEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MUYsIDB4ODAsIDB4NEMsIDB4MDAsIDB4MzQsIDB4MDEsCisweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLAorMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgxMCwgMHg2RCwgMHg4MCwKKzB4QjQsIDB4MDUsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4MTAsIDB4MjcsCisweDQwLCAweERDLCAweDAwLCAweDVELCAweDA1LCAweEM0LCAweDYxLCAweDEyLCAweDA3LCAweDQwLCAweDUzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MjQsIDB4MDUsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MEMsIDB4MzQsIDB4MEYsIDB4MTQsIDB4MEMsCisweDQwLCAweDMzLCAweDAyLCAweENELCAweDAwLCAweDM0LCAweDFGLCAweDUwLCAweDJDLCAweDQ0LCAweEQwLCAweDIwLCAweDhELAorMHgwMCwgMHgwNCwgMHgwRiwgMHgxMCwgMHgyQywgMHg0MSwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MEIsIDB4RDAsIDB4MEUsCisweDQwLCAweDNCLCAweDgwLCAweEFELCAweDAwLCAweEY0LCAweDQzLCAweDEwLCAweDBFLCAweDQwLCAweDJCLCAweDAwLCAweEVELAorMHg0OCwgMHhCNCwgMHg0NywgMHg1MCwgMHgxRSwgMHg1MCwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwNSwgMHgxMCwKKzB4MkUsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDEwLCAweDc4LCAweDAwLCAweENGLCAweDAxLCAweEFDLCAweDA1LCAweEYwLCAweDFFLCAweEM0LCAweDdCLCAweDEwLCAweEFGLAorMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHg4RCwgMHhGQywgMHgwNywgMHg3MCwKKzB4MTcsIDB4QzAsIDB4NzgsIDB4MDgsIDB4RUUsIDB4MDEsIDB4Q0QsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4NDcsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4NDIsIDB4N0MsIDB4MDMsIDB4QjQsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweENGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEM4LCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHg4NSwgMHhGMCwKKzB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4MkYsIDB4MDksIDB4OEMsIDB4MDUsIDB4RjAsIDB4OUYsIDB4QzIsIDB4NkQsIDB4MDIsCisweEZCLCAweDA5LCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDIwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LAorMHgzMCwgMHgxRiwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweDJELCAweDEwLCAweDg0LCAweDAxLCAweDEyLCAweDBFLCAweDQwLCAweDM4LCAweDA0LCAweEU5LCAweDAwLCAweDg0LCAweDExLAorMHgxMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgxMSwgMHgxOCwgMHgwQSwgMHg0MCwgMHg1NCwKKzB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDM5LCAweDIwLCAweDNELCAweDAwLCAweEM1LCAweDAxLAorMHhEMCwgMHgwRiwgMHgwOSwgMHgyOSwgMHgwMCwgMHhFRCwgMHg0MCwgMHg5NiwgMHg4MywgMHgxNCwgMHgwNiwgMHg0MCwgMHgzQiwKKzB4MDIsIDB4RUQsIDB4MDAsIDB4RjQsIDB4ODMsIDB4MTAsIDB4MEUsIDB4NDEsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDQwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHg2NCwgMHhCMywgMHgwNCwgMHgwRCwgMHgwNywgMHgwNCwgMHgwQywgMHg5MCwgMHgzQywgMHg0MCwgMHg3MCwKKzB4MDAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4QTEsIDB4NDQsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDIsIDB4NjQsCisweDI0LCAweDEwLCAweDEwLCAweDQwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NywKKzB4MTQsIDB4OUYsIDB4MDMsIDB4MEMsIDB4NEUsIDB4RjAsIDB4OUQsIDB4QzAsIDB4RjUsIDB4MDAsIDB4RkYsIDB4MTIsIDB4NzgsCisweDAwLCAweDMwLCAweDM5LCAweDQwLCAweDczLCAweDAxLCAweERELCAweDEwLCAweDdDLCAweDAyLCAweDE0LCAweDFELCAweEMwLAorMHg1NiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4OUYsIDB4MDIsIDB4N0MsCisweDA4LCAweDcwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERCLCAweDA0LCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweEM0LAorMHgzNywgMHgwMCwgMHhERiwgMHgzMCwgMHg2QywgMHg4MiwgMHhGMCwgMHg2RCwgMHhDMCwgMHhBNywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsCisweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDA4LCAweEJGLCAweDAwLCAweERDLCAweDQyLCAweDcwLCAweDBGLCAweEMwLAorMHgzRCwgMHgwNCwgMHhERiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMCwgMHgwMywgMHgwMSwgMHgzQywgMHgyNCwgMHhGMiwgMHg4MCwKKzB4RkMsIDB4MDAsIDB4MzAsIDB4MDksIDB4RTAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDFGLCAweEQwLCAweDBELCAweEMwLAorMHgzNSwgMHgwMCwgMHg4RCwgMHg0MSwgMHg0NiwgMHgxNiwgMHgxMCwgMHgwQywgMHg0NiwgMHgyNCwgMHgyMCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MEUsIDB4RDAsIDB4MTksIDB4QzEsIDB4RjYsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MzAsIDB4NDEsCisweDQwLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLAorMHgzNCwgMHg4MCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNywgMHhEMCwgMHgwRCwgMHg0OCwgMHgzNSwgMHgxMCwgMHg5RCwgMHgwMywKKzB4NTQsIDB4MDYsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTQsIDB4MEMsIDB4RDAsIDB4MTksCisweDYwLCAweDc1LCAweDEwLCAweEQ1LCAweDA0LCAweDc0LCAweDA2LCAweDEwLCAweDg1LCAweDQwLCAweDA1LCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHg4MCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MzEsIDB4MDAsIDB4REQsIDB4MjAsIDB4NDQsIDB4MDAsIDB4MTgsIDB4MEQsCisweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDA5LCAweDQ4LCAweDI3LCAweDgwLCAweEM1LAorMHgwMCwgMHgzNCwgMHgwMiwgMHg5MywgMHgwMCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDM1LCAweDAwLCAweDlGLCAweDAwLCAweDU0LCAweDAyLCAweDcwLCAweDBELCAweEMwLCAweDI1LCAweDIwLCAweEZELAorMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNSwgMHg4MCwgMHhENywgMHg4MCwgMHg3QywgMHgwMiwgMHgyNCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4QzQsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEI4LCAweDNGLCAweDEwLCAweEZGLCAweDIwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEM0LCAweDNELCAweDAwLCAweEJGLAorMHg4MCwgMHhGNCwgMHgwMiwgMHhGMiwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MkUsIDB4NDAsIDB4RkIsIDB4MDAsIDB4QkMsIDB4MDIsIDB4NzAsIDB4MDMsIDB4QzgsIDB4MTcsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDVGLCAweDAwLCAweDdGLAorMHg0MSwgMHhGQywgMHg4NSwgMHhGMCwgMHgxQiwgMHhDMCwgMHg1QywgMHgwMiwgMHhBRiwgMHgxNCwgMHhDQywgMHgwNCwgMHhGMCwKKzB4QzMsIDB4QzAsIDB4MEMsIDB4MDQsIDB4QjMsIDB4MTAsIDB4Q0MsIDB4MEMsIDB4MzAsIDB4OEIsIDB4QzAsIDB4M0YsIDB4MDAsCisweEIzLCAweDE0LCAweENDLCAweDUzLCAweDMwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg1NywgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNSwgMHhEMSwKKzB4MTUsIDB4NDQsIDB4MTQsIDB4MjEsIDB4RkQsIDB4MDMsIDB4NDQsIDB4MTAsIDB4RDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDEsCisweEFCLCAweDA2LCAweDQ0LCAweDAwLCAweDEwLCAweEU5LCAweDQwLCAweDc3LCAweDAwLCAweEI1LCAweDA2LCAweEQ0LCAweDBGLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MjAsCisweENELCAweDAwLCAweDE2LCAweDQwLCAweEQyLCAweDAxLCAweDUwLCAweDA0LCAweDQ0LCAweDgxLCAweDEwLCAweDA1LCAweDEwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMCwgMHgwNCwgMHgwMywgMHhEMCwgMHg0OCwgMHg0MSwgMHg0NCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDEsCisweDlELCAweDA0LCAweDc0LCAweDAyLCAweEQwLCAweDg1LCAweDQwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDU1LCAweDA0LAorMHhEMCwgMHgwMSwgMHg0NiwgMHg2NCwgMHgwMCwgMHg5OSwgMHg0OCwgMHg0NCwgMHgwNCwgMHgxMCwgMHgzMSwgMHg0OCwgMHgzNywKKzB4MDAsIDB4QzUsIDB4MDAsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweEE3LCAweDAxLCAweERGLCAweDAxLCAweDdDLCAweDI3LAorMHhGMCwgMHgwRCwgMHhEMCwgMHg3NCwgMHgxMiwgMHg4RiwgMHgwMCwgMHg1QywgMHg0NCwgMHhGMCwgMHgyMCwgMHhDMSwgMHhDMCwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MTQsIDB4MzQsIDB4MUQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4ODAsIDB4NEMsCisweDAzLCAweEY0LCAweDM5LCAweEQwLCAweDA4LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHg2RCwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGOCwgMHgwNywgMHhGMCwgMHgwRiwgMHhDOCwgMHgzRiwKKzB4MDAsIDB4RjgsIDB4MTAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsCisweDQwLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDEwLCAweDlGLCAweDA5LCAweEI4LCAweDgzLCAweDMwLCAweDNCLCAweEMwLAorMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4ODAsIDB4NEMsCisweDAwLCAweDMyLCAweDAxLCAweEQwLCAweDhDLCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDI1LCAweEMwLAorMHgzNCwgMHgwMCwgMHhEMywgMHgwNCwgMHg0RCwgMHgwMywgMHhGMCwgMHgyOCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUMsIDB4MDAsIDB4NzAsCisweDAyLCAweEQwLCAweDBDLCAweDYwLCAweDY3LCAweDAwLCAweERELCAweDAzLCAweDQwLCAweDJDLCAweDEwLCAweDAzLCAweDQwLAorMHg2NCwgMHgwMCwgMHg5MSwgMHgwRiwgMHg2RCwgMHgwOCwgMHg5MSwgMHhCNSwgMHg0MCwgMHhCQywgMHg0MCwgMHhENSwgMHgxMywKKzB4QzQsIDB4MDMsIDB4QzAsIDB4NDksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDIwLCAweDRELCAweDgwLCAweDM0LCAweDAyLCAweEMwLCAweDA0LCAweDQ4LAorMHg2MywgMHgwMCwgMHg4RCwgMHgwMSwgMHgyNCwgMHgwNCwgMHgxMCwgMHgwOCwgMHg0MiwgMHg0MCwgMHgwMCwgMHg5MSwgMHgwMSwKKzB4NDQsIDB4MDQsIDB4RDEsIDB4MTgsIDB4NDAsIDB4QjAsIDB4MDQsIDB4QzEsIDB4MDIsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLAorMHg2OCwgMHgwMCwgMHhFRCwgMHgyMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxNiwgMHg0MCwgMHg2QiwgMHgwNiwgMHhFRCwgMHgxMSwKKzB4QTUsIDB4NDQsIDB4MTQsIDB4OTgsIDB4NTAsIDB4NkMsIDB4MDQsIDB4RTEsIDB4MDksIDB4QTQsIDB4MDQsIDB4OTAsIDB4MUUsCisweDQwLCAweDc4LCAweDAyLCAweEU1LCAweDIxLCAweDg0LCAweDA3LCAweEQxLCAweDE2LCAweDQwLCAweDEzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHg4RiwgMHgwMCwKKzB4M0MsIDB4MDIsIDB4RjAsIDB4MDQsIDB4NDAsIDB4MjMsIDB4MEEsIDB4Q0YsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MzIsIDB4ODgsCisweEM4LCAweDgwLCAweDQwLCAweEMzLCAweDA4LCAweDBDLCAweDQwLCAweEYyLCAweDhELCAweEQxLCAweDMwLCAweDAyLCAweEMzLAorMHgwMCwgMHgwRCwgMHgwMywgMHhGMCwgMHgwNCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4QkYsIDB4ODAsIDB4RjAsIDB4MDIsIDB4RjAsIDB4MDcsCisweEMwLCAweDJGLCAweDBBLCAweEZGLCAweDAyLCAweERDLCAweDAwLCAweEYwLCAweDhCLCAweEQwLCAweDNCLCAweDQyLCAweEZGLAorMHgwOCwgMHhGNCwgMHgwMCwgMHhCMCwgMHg4RiwgMHhDMCwgMHgzQiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHg0MywgMHhGMCwKKzB4ODcsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEEwLCAweDY3LCAweDAwLCAweEQzLCAweDIwLCAweDdDLCAweDA3LCAweDM0LCAweDA1LCAweEMwLCAweDcwLCAweDAwLCAweDkzLAorMHgwNiwgMHg1QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhEMCwgMHgwMCwgMHgxMCwgMHg5MywgMHg4NiwgMHg0RCwgMHgwNCwgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDQsIDB4MEQsIDB4MTMsIDB4MzEsIDB4MDUsIDB4QzAsIDB4NTQsIDB4MDAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDI5LCAweDAwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwNiwgMHhDMCwgMHgzQSwgMHgxMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwKKzB4NDMsIDB4NDAsIDB4MjksIDB4MDAsIDB4RUIsIDB4MDgsIDB4ODQsIDB4MDEsIDB4NTEsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDEsCisweEYxLCAweDA4LCAweDk0LCAweDQzLCAweDEwLCAweDBGLCAweEMwLCAweDRBLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2RCwgMHgwMCwgMHhBMSwgMHgwMSwgMHhGNiwgMHgwNiwgMHgxMCwKKzB4MTYsIDB4NDAsIDB4NkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4M0EsIDB4NDAsIDB4NEMsIDB4MDAsCisweEMxLCAweDAxLCAweEM2LCAweDA0LCAweDEwLCAweDNFLCAweDQwLCAweDczLCAweDAyLCAweEU5LCAweDAxLCAweDg0LCAweDAzLAorMHgxMCwgMHgxRSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MjgsIDB4NjMsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MzYsIDB4MTYsIDB4MTAsIDB4MTQsIDB4NDQsIDB4MjIsIDB4MDIsCisweEMxLCAweDAwLCAweDI0LCAweDBCLCAweEQxLCAweDBELCAweDQxLCAweDMwLCAweDA4LCAweEM5LCAweDAwLCAweDA0LCAweDFGLAorMHg1MCwgMHgxRCwgMHg0MCwgMHgzMywgMHgxMCwgMHhEOSwgMHgwMCwgMHgxNSwgMHgwMywgMHgxMCwgMHhFQywgMHg0MCwgMHg0QSwKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MUQsIDB4MDEsCisweDczLCAweDgwLCAweEZDLCAweDA1LCAweDMzLCAweEU3LCAweENDLCAweERDLCAweDQwLCAweDUzLCAweEMwLCAweEJDLCAweDE1LAorMHhGMSwgMHgyNywgMHhEMCwgMHgxQywgMHgwOCwgMHg1MywgMHgwMCwgMHhDRCwgMHgwNSwgMHgzMiwgMHgxNywgMHhDMCwgMHgxNywKKzB4NDAsIDB4NUIsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MzcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDU0LCAweDFGLCAweDAwLCAweDdDLCAweDIwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyNCwgMHgxRiwgMHgwMiwgMHg1QywgMHg0OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MjAsIDB4N0MsCisweDgwLCAweEYwLCAweDAwLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4MDUsIDB4NEMsIDB4MEUsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MjAsIDB4OEEsIDB4MDEsIDB4NkMsCisweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDYwLCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDIyLCAweEYwLCAweDg5LCAweEMyLAorMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzAsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OEMsIDB4MDAsIDB4NDQsCisweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDY1LCAweDA4LCAweDlCLCAweDAxLCAweDZDLCAweDAyLCAweEQwLCAweEE5LCAweDQxLAorMHhFNCwgMHgwMSwgMHg5MSwgMHgwMiwgMHg0NSwgMHgwNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NzAsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweDlDLCAweDEwLCAweDQ0LCAweDAyLCAweDE0LCAweDA5LCAweDQwLAorMHgyNCwgMHgwMiwgMHg5RCwgMHg0OCwgMHg2NSwgMHgxMiwgMHhEMiwgMHgwOSwgMHg0MCwgMHgyNCwgMHg0MiwgMHg5MSwgMHgxNCwKKzB4NDQsIDB4ODIsIDB4RDAsIDB4MEQsIDB4NDQsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweEEwLCAweDEwLCAweDhELCAweDAyLCAweDM0LCAweDBBLCAweEQwLCAweDI4LCAweDQwLAorMHgyMSwgMHgxMCwgMHg5RCwgMHgxNCwgMHg0NiwgMHgwMiwgMHgxOCwgMHg0OCwgMHg0NSwgMHgyMSwgMHg0NSwgMHhDRCwgMHgxNCwKKzB4MjQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NzEsIDB4MjAsIDB4ODUsIDB4ODEsIDB4MTQsIDB4MDQsIDB4NTIsIDB4RDAsIDB4NDgsCisweDQxLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLAorMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgxMCwgMHgxRiwgMHgwNCwKKzB4NEMsIDB4MDAsIDB4MzAsIDB4NDEsIDB4QzQsIDB4MTQsIDB4MjEsIDB4MUYsIDB4NDQsIDB4NkMsIDB4MDAsIDB4RjEsIDB4NDEsCisweEMwLCAweDA0LCAweDAxLCAweDEzLCAweEM0LCAweDRDLCAweDEwLCAweEYwLCAweDQxLCAweEQwLCAweDc0LCAweEMwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHg3QiwgMHgwMCwgMHhGRiwgMHgwMSwKKzB4QkMsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MkYsIDB4MDUsIDB4QUUsIDB4MDAsIDB4RkQsIDB4NTIsIDB4RjEsIDB4NEYsCisweEMxLCAweDJGLCAweDQ1LCAweEJCLCAweDE0LCAweEJDLCAweDUyLCAweEYwLCAweDRCLCAweEMxLCAweDI3LCAweDQwLCAweEJGLAorMHgxNCwgMHg3QywgMHgwMiwgMHhGMiwgMHg0QiwgMHhDMSwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4QTcsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MjgsCisweEMwLCAweEFGLCAweDAwLCAweEFGLCAweDAxLCAweERDLCAweDBBLCAweEYwLCAweDM5LCAweEMwLCAweEVELCAweDA1LCAweEIzLAorMHgwMywgMHhEQywgMHgwMiwgMHgzMiwgMHg1QiwgMHhDMSwgMHgyQywgMHgwMCwgMHhCMywgMHgwMSwgMHhDQywgMHgwNiwgMHgzMCwKKzB4NkEsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsCisweDA4LCAweDQ3LCAweDAxLCAweDFCLCAweDAxLCAweDZDLCAweDE0LCAweEIwLCAweDUxLCAweDQwLCAweDQ3LCAweDAwLCAweDFELAorMHgwMiwgMHg0NSwgMHgwNCwgMHhEMSwgMHgxMCwgMHg0MCwgMHhDMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NSwgMHgxNCwgMHgxMCwKKzB4NzUsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MDUsIDB4NTQsIDB4MDAsIDB4MTAsIDB4NjEsIDB4NDAsIDB4NzAsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDgxLAorMHgyMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwOCwgMHg4RCwgMHgwMiwgMHgxNCwgMHgxMiwgMHhEMCwKKzB4MjgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MTQsIDB4NDYsIDB4MTAsIDB4MDgsIDB4NDksIDB4MjEsIDB4MDAsCisweDgxLCAweDEyLCAweDA0LCAweDBBLCAweDEwLCAweDI4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyMSwgMHgwMCwgMHg4OSwgMHgwMCwgMHgyNCwgMHg0MiwgMHg5MCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NDQsIDB4MTIsIDB4RDAsIDB4MTksIDB4NDAsIDB4QTQsIDB4MDAsCisweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkwLCAweDA0LCAweDU0LCAweDAyLAorMHgxMCwgMHgzOSwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QTgsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4QTcsIDB4MDQsCisweDlGLCAweDAxLCAweDVDLCAweDAyLCAweEYwLCAweDI5LCAweEM4LCAweDI1LCAweDQwLCAweDk3LCAweDAwLCAweDVDLCAweDBBLAorMHgzNCwgMHgwOSwgMHhDOCwgMHgyNSwgMHg0MCwgMHg5MywgMHgwMCwgMHg0RCwgMHgwMiwgMHgzNCwgMHgyOSwgMHhEMCwgMHgxNCwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4NjUsIDB4MDAsCisweDlGLCAweDAzLCAweDdDLCAweDBBLCAweEUwLCAweDA5LCAweEMwLCAweEE3LCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOCwgMHhDNCwgMHgyNywgMHgwMSwgMHg4QiwgMHg0NSwgMHg3QywgMHgwMiwgMHhGMCwgMHg5OCwgMHhFMCwgMHgyMSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweDA4LAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgxMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgwNCwKKzB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDQsIDB4MDMsIDB4ODAsIDB4N0MsCisweDAwLCAweDM0LCAweDIwLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgxMCwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg1NCwKKzB4MDEsIDB4NzUsIDB4MDIsIDB4QzQsIDB4MDUsIDB4RDAsIDB4MDUsIDB4NTAsIDB4RDgsIDB4NDAsIDB4NzUsIDB4MDAsIDB4QzQsCisweDExLCAweDEwLCAweDQ3LCAweDUwLCAweDFDLCAweDAwLCAweDcxLCAweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDE1LCAweDQwLAorMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MEEsIDB4MjQsCisweDI2LCAweEQwLCAweDBDLCAweDQ0LCAweEYwLCAweDg2LCAweEM0LCAweDA5LCAweDY1LCAweDA3LCAweDUwLCAweDBDLCAweDAwLAorMHhGMCwgMHgwMCwgMHhDNSwgMHgyMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgxQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4M0MsIDB4MDEsIDB4RjEsIDB4MDQsIDB4ODQsCisweEEzLCAweEQwLCAweDFGLCAweDQwLCAweDc4LCAweDAwLCAweDI1LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDRFLCAweDQwLAorMHgyOCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg4NSwgMHgxMywgMHg1MCwgMHgwQSwgMHg0MCwgMHg5MCwgMHgwMCwgMHhBNSwgMHgwMCwKKzB4QjAsIDB4MDIsIDB4MTAsIDB4MEYsIDB4NDEsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAwLCAweEUzLCAweDA3LCAweDhDLCAweDE3LCAweEYwLCAweDdFLCAweEQwLAorMHg2QywgMHgwMCwgMHhBMywgMHgwMSwgMHhBQywgMHgwNSwgMHhGMCwgMHgzRSwgMHhDMSwgMHg2OCwgMHgwMCwgMHg3NywgMHgwMSwKKzB4RUQsIDB4MEYsIDB4NzQsIDB4MTMsIDB4ODQsIDB4NDgsIDB4MDAsIDB4QTcsIDB4MDEsIDB4M0MsIDB4MDYsIDB4MzAsIDB4MUUsCisweEMwLCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LAorMHgzMSwgMHg0MCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4RkQsIDB4MDAsIDB4RjAsIDB4MkQsIDB4QzAsIDB4MjcsIDB4MDIsIDB4NUQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4OTAsIDB4MDEsCisweEMwLCAweDA3LCAweDQwLCAweDFCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3RiwgMHgwNCwgMHhGMywgMHgwMSwKKzB4Q0MsIDB4MjcsIDB4M0MsIDB4MUYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4MzcsIDB4MDEsIDB4REMsIDB4MDYsIDB4NzIsIDB4MUYsCisweEMwLCAweDZELCAweDAwLCAweEY3LCAweDgxLCAweENDLCAweDA2LCAweDMxLCAweDFCLCAweEMwLCAweDRDLCAweDEwLCAweEUzLAorMHgwMSwgMHhDQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4QUMsIDB4MjMsIDB4MTgsIDB4NEUsCisweDQwLCAweDNCLCAweDAwLCAweDIxLCAweDA0LCAweDg0LCAweDgwLCAweEQwLCAweDRFLCAweDQwLCAweDJDLCAweDAwLCAweDYxLAorMHgwMiwgMHg4QywgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgwOSwgMHgwMCwgMHhBQiwgMHgwMCwgMHg5NCwgMHgwMiwgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDAwLCAweDc5LCAweDAwLCAweEUxLCAweDExLCAweDg0LCAweDA3LCAweDEyLCAweDFFLCAweDQwLCAweDNCLCAweDAwLCAweDA1LAorMHgwMCwgMHg5MCwgMHgwMCwgMHg1MCwgMHgwRSwgMHg0NCwgMHgwOSwgMHgwNCwgMHgzRCwgMHgxMCwgMHg4NCwgMHgwMywgMHgxMCwKKzB4MDIsIDB4NDEsIDB4MEEsIDB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MkUsIDB4NDAsIDB4MDMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDMzLCAweDQwLCAweEMxLAorMHgxMCwgMHgyNCwgMHgwMywgMHgxMSwgMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwQywgMHhEMCwKKzB4OEMsIDB4NDAsIDB4ODAsIDB4MDEsIDB4MDksIDB4NDAsIDB4MjQsIDB4MEYsIDB4MTEsIDB4MTEsIDB4NDQsIDB4MDMsIDB4MDAsCisweDA5LCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwKKzB4M0QsIDB4QzAsIDB4MzcsIDB4MDAsIDB4ODcsIDB4MDAsIDB4NUMsIDB4MUUsIDB4NzAsIDB4MUYsIDB4QzAsIDB4NEQsIDB4MDAsCisweDlGLCAweDAwLCAweENELCAweDEzLCAweDM0LCAweDA5LCAweEMwLCAweDA2LCAweDA4LCAweEQzLCAweDAwLCAweDRDLCAweDAzLAorMHhGMywgMHgwRCwgMHhDNCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MDAsCisweDFGLCAweDA4LCAweDdDLCAweDQwLCAweEYwLCAweDBELCAweEM0LCAweDgzLCAweDAwLCAweDQ3LCAweDAwLCAweDVDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgxMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHg4RCwgMHhDNCwgMHgwNywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEIzLCAweDQwLCAweEVDLCAweDAwLAorMHgzMCwgMHgwRCwgMHhDMCwgMHg0RCwgMHgwMCwgMHhCMywgMHgwMiwgMHhDQywgMHg0MywgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MTYsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLAorMHgxNCwgMHgwRCwgMHg0NCwgMHg3MywgMHgwMiwgMHg5MSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgxNCwgMHgwRCwgMHg1MCwgMHgwNCwKKzB4ODYsIDB4NTEsIDB4MDIsIDB4NkMsIDB4M0MsIDB4NTAsIDB4MzEsIDB4NDAsIDB4QzUsIDB4MDEsIDB4MUQsIDB4MDEsIDB4NDQsCisweDAyLCAweEIwLCAweDA5LCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NjQsIDB4MDYsIDB4MTAsIDB4MEMsIDB4NEEsIDB4MDQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDQsCisweDAyLCAweDUwLCAweDM5LCAweDQwLCAweDQ1LCAweDEwLCAweERELCAweDA0LCAweDQwLCAweDAzLCAweDExLCAweDFELCAweDQwLAorMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NDUsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDQsCisweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDAxLCAweDgwLCAweDQxLCAweDAwLCAweDI0LCAweDAwLCAweDQwLCAweDAwLCAweDQwLAorMHgwMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMywgMHg4MCwgMHgwQywgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4M0EsIDB4MTAsIDB4RUYsIDB4MDAsIDB4OEMsCisweDAzLCAweDMwLCAweDBGLCAweDQwLCAweDM3LCAweDAwLCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweDM4LCAweDBGLCAweEQwLAorMHgwNCwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwRCwgMHgwMywgMHg2MSwgMHgwMSwgMHg4MCwgMHgwNSwgMHgyMCwgMHg5RiwgMHgwMCwKKzB4NEQsIDB4MDIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgyMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMSwgMHgwRiwgMHhDMCwgMHgwRSwgMHgwMCwgMHgyRSwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEYsCisweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEExLAorMHg4MiwgMHhDMCwgMHgwRSwgMHgwMiwgMHgzQiwgMHgwOCwgMHhFMCwgMHgyOCwgMHhCMCwgMHg4MywgMHhFMCwgMHgwRSwgMHg4MiwKKzB4MzgsIDB4MDgsIDB4RUMsIDB4MjAsIDB4OTAsIDB4ODMsIDB4QzgsIDB4MEUsIDB4MDIsIDB4MUIsIDB4MDgsIDB4RUMsIDB4MjgsCisweEE4LCAweDgzLCAweEEwLCAweDBFLCAweDAyLCAweDNBLCAweDA4LCAweENDLCAweDIwLCAweDk4LCAweDAzLCAweDhDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgyMiwgMHhBMCwgMHg4RSwgMHhBMCwKKzB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTAsIDB4MjMsIDB4MjAsIDB4OEUsIDB4QTAsIDB4M0IsIDB4MDIsIDB4RUEsIDB4MDgsCisweEE4LCAweDIzLCAweEEwLCAweDhFLCAweEEwLCAweDMyLCAweDAyLCAweDRBLCAweDA4LCAweEE4LCAweDIzLCAweDg4LCAweDhFLAorMHg4MCwgMHgzQSwgMHgwMiwgMHhDQSwgMHgwOCwgMHhBOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTgsCisweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxOCwgMHgyMCwgMHg0MSwgMHhBMCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4MDEsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDIxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDFBLCAweDAwLCAweDY4LCAweDAwLCAweEEwLCAweDAxLCAweEEwLCAweDBFLAorMHgyMCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgyOCwKKzB4MTAsIDB4QTgsIDB4MDEsIDB4ODgsIDB4MDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDEyLCAweEEwLCAweDRFLAorMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgxNCwgMHhBMCwgMHgxMywgMHhBMCwgMHg0QSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwKKzB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsIDB4NEUsIDB4ODIsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QTAsIDB4MTMsIDB4ODAsCisweDRBLCAweDgwLCAweDNBLCAweDAxLCAweEVBLCAweDBDLCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwKKzB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsCisweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLAorMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTMsIDB4MjAsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MTEsIDB4MjAsCisweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDA0LCAweDA4LCAweDExLCAweDIwLCAweEMwLCAweDgwLCAweDEwLCAweDAxLAorMHg0MiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwNCwgMHgwOCwgMHgwMSwKKzB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4RDIsIDB4QTAsCisweDAyLCAweDAxLCAweDBBLCAweDA1LCAweDJBLCAweDEwLCAweEE4LCAweDUwLCAweDgwLCAweDAyLCAweDAxLCAweDBBLCAweDA3LAorMHgyQSwgMHgxQywgMHhBOCwgMHg1MCwgMHhBMCwgMHg0MiwgMHg4MywgMHgwQSwgMHgwNSwgMHgyQSwgMHgxMCwgMHhBMCwgMHg1MCwKKzB4ODgsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDUsIDB4MkEsIDB4M0MsIDB4QTAsIDB4MDAsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLCAweDMwLCAweDgwLCAweEM4LCAweDAwLCAweEFBLCAweDAzLAorMHhBOCwgMHgwRSwgMHgyMCwgMHgzOCwgMHg4MCwgMHhFMCwgMHgwMCwgMHhBQSwgMHgwNywgMHgwOCwgMHgxRSwgMHhBMCwgMHgzMiwKKzB4ODAsIDB4Q0EsIDB4MDAsIDB4MjIsIDB4MDMsIDB4QTgsIDB4MEMsIDB4QTAsIDB4M0EsIDB4QTAsIDB4Q0EsIDB4MDAsIDB4MkEsCisweDAzLCAweEE4LCAweDBDLCAweDIwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHg3MiwgMHgwMCwgMHg0OCwgMHgyMCwgMHgxOCwgMHg4MCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4NDAsIDB4MjAsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MjAsCisweDAwLCAweDIwLCAweDA0LCAweDgwLCAweDAwLCAweDA4LCAweDQyLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA4LCAweDAwLAorMHg4MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgxNiwKKzB4NDAsIDB4MTgsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MUEsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MjAsIDB4NDEsCisweDgwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDYxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHg4MiwgMHg4QywgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsIDB4QTAsIDB4MDYsIDB4ODAsIDB4OUEsCisweDAwLCAweDZBLCAweDAyLCAweDI4LCAweDA5LCAweEEwLCAweDI0LCAweDAwLCAweDlCLCAweDAwLCAweDQ4LCAweDAyLCAweEE4LAorMHgwMSwgMHhBMCwgMHgwNiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QSwgMHgwMCwgMHhCOCwgMHgwOSwgMHhBMCwgMHgwNiwgMHhBMCwKKzB4MUIsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QTgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAwLCAweEMwLCAweDQ2LCAweDAwLCAweDFBLCAweDAwLCAweDZDLCAweDAwLCAweEJDLAorMHgwMSwgMHg5MCwgMHg0NiwgMHgwMCwgMHgxQiwgMHgwMCwgMHg2QywgMHgwMCwgMHhBOCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgyMCwKKzB4MUIsIDB4ODAsIDB4NkMsIDB4MDQsIDB4QTAsIDB4MDEsIDB4RTgsIDB4NDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkMsIDB4MDAsCisweDMyLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLAorMHg0MiwgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwOCwgMHg4MSwKKzB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MTgsIDB4NDMsIDB4MjgsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MzAsCisweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDAzLCAweDhDLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LAorMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDAsIDB4ODAsIDB4MEMsIDB4ODMsIDB4MzIsIDB4MDQsIDB4QzgsIDB4MzQsCisweDI4LCAweDQzLCAweDgwLCAweDBDLCAweDgzLCAweDMyLCAweDA0LCAweEM4LCAweDEwLCAweDIwLCAweDQzLCAweDgwLCAweDBDLAorMHgwMSwgMHgzMiwgMHgwNCwgMHhDOCwgMHgxMCwgMHgyOCwgMHg0MywgMHg4MCwgMHgwQywgMHg4MywgMHgzMiwgMHgwNCwgMHhDOCwKKzB4MTAsIDB4MjAsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEzLCAweDQyLCAweEEwLCAweDA2LCAweDgzLCAweDFBLCAweDA0LCAweDZBLCAweDMwLCAweEE4LCAweDQxLCAweEEwLCAweDA2LAorMHg4MywgMHgxQSwgMHgwNCwgMHg2QSwgMHgxMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwgMHg4MSwgMHgxQSwgMHgwNCwgMHg2QSwKKzB4MzAsIDB4QTgsIDB4NDEsIDB4ODAsIDB4MEUsIDB4ODMsIDB4MEEsIDB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4MDEsIDB4OEMsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDQyLCAweDAwLCAweDA0LAorMHgwMSwgMHgzMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMCwKKzB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsCisweDAwLCAweDAxLCAweDMwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg0QSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgzMCwgMHgwNCwgMHg2MiwKKzB4MTIsIDB4MDgsIDB4NEIsIDB4MjAsIDB4MDYsIDB4ODEsIDB4QjAsIDB4MDQsIDB4NjIsIDB4MTIsIDB4ODgsIDB4NDEsIDB4MjAsCisweDI2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQzLCAweDAwLCAweDA2LCAweDgxLCAweDMwLCAweDA0LAorMHg2MiwgMHgxMiwgMHg4OCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjMsIDB4MDYsIDB4QTAsIDB4MUEsIDB4MDAsIDB4NjIsIDB4MDAsIDB4QUEsIDB4MDEsIDB4MjAsIDB4MDQsIDB4QTAsCisweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDhBLCAweDAxLCAweEEwLCAweDA2LCAweEEwLCAweDFBLCAweDgwLCAweDZBLCAweDgwLAorMHhBQSwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHhBQSwgMHgwMSwgMHhBOCwgMHgwMiwKKzB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NjAsIDB4ODAsCisweDgyLCAweDAxLCAweDJBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LAorMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwKKzB4QTAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQ4LCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHg0OCwgMHgxMiwgMHgyMCwgMHg0OSwgMHhBMCwgMHgwMCwgMHgwMSwgMHg5MiwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyOCwgMHg0MSwKKzB4ODAsIDB4MjAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MDIsCisweDA0LCAweDA4LCAweDEyLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMywgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgwMSwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MywKKzB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4OEMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkEsCisweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweDhDLCAweDE4LCAweEIwLAorMHgwMiwgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg2MiwKKzB4QTAsIDB4OEUsIDB4MDEsIDB4M0IsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4M0EsCisweDA2LCAweDY4LCAweDE4LCAweDg4LCAweDYzLCAweEEwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweDk4LAorMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzQiwgMHgwNiwgMHhDQSwgMHgxOCwgMHg4OCwgMHgwMywgMHg4QywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4ODAsIDB4OEUsIDB4MDEsIDB4M0EsCisweDA2LCAweEVDLCAweDE4LCAweEEwLCAweDYxLCAweEMwLCAweDhFLCAweDAxLCAweDNBLCAweDA2LCAweEU4LCAweDE4LCAweEEwLAorMHg2MywgMHhFMCwgMHg4RSwgMHgwMSwgMHgxQiwgMHgwNiwgMHhFMCwgMHgxOCwgMHhBMCwgMHg2MywgMHhDMCwgMHg4RSwgMHgwMSwKKzB4M0EsIDB4MDYsIDB4RUUsIDB4MTgsIDB4QjAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweEEwLCAweDhFLCAweDgxLCAweDMyLCAweDA2LCAweEVBLCAweDE4LCAweDA4LAorMHg2MywgMHhBMCwgMHg4RSwgMHhBMSwgMHgzOCwgMHg4NiwgMHhFQSwgMHgxOCwgMHgyOCwgMHg2MSwgMHgyMCwgMHg4RSwgMHg4MSwKKzB4MzIsIDB4ODYsIDB4RTgsIDB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4QTEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsCisweEE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxQSwgMHg4NCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwKKzB4MzIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjIsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsCisweDIwLCAweDQxLCAweDg4LCAweDA0LCAweDAxLCAweDNBLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4MCwgMHg4NiwgMHg4MSwKKzB4MUEsIDB4MDYsIDB4NjgsIDB4MTgsIDB4QTAsIDB4NjEsIDB4ODAsIDB4ODYsIDB4ODEsIDB4MTgsIDB4MDYsIDB4NjgsIDB4MTgsCisweEEwLCAweDYxLCAweDgwLCAweDg0LCAweDAxLCAweDFBLCAweDA2LCAweDY4LCAweDE4LCAweEE4LCAweDYxLCAweDgwLCAweDg2LAorMHg4MSwgMHgxQSwgMHgwNiwgMHg2QSwgMHgxOCwgMHhBMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MDIsIDB4QTAsIDB4MEUsIDB4ODAsIDB4M0EsIDB4MDAsIDB4Q0EsIDB4MDAsCisweDIyLCAweDAzLCAweEEwLCAweDBDLCAweDgwLCAweDMyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweDgwLCAweDBFLAorMHg4MCwgMHgyQSwgMHgwMCwgMHhFQSwgMHgwMCwgMHhBOCwgMHgwMywgMHhBMCwgMHgwRSwgMHg4MCwgMHgzQSwgMHgwMCwgMHhFOCwKKzB4MDAsIDB4QTgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEyLCAweDQyLCAweDAwLCAweDA2LCAweDAxLCAweDA4LCAweDA0LCAweDQwLCAweDEwLCAweDA4LCAweDQxLCAweDAwLCAweDA0LAorMHgwMSwgMHgwMCwgMHgwQywgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwgMHg2MCwKKzB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NjAsIDB4MTAsIDB4ODAsIDB4MDEsIDB4ODgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDQyLCAweDIwLCAweDA0LAorMHg4MSwgMHgxMCwgMHgwNCwgMHgyMiwgMHgxMCwgMHg4OCwgMHg1MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNSwgMHg2MiwKKzB4MTAsIDB4MDgsIDB4NDEsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsIDB4MjAsCisweDA2LCAweDgxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDA4LCAweDAxLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHhBMCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwQywgMHhBQSwKKzB4MzAsIDB4QTgsIDB4QzIsIDB4QTAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MDQsIDB4QUEsIDB4MzAsIDB4QTgsIDB4NDIsIDB4QTAsCisweDAyLCAweDgxLCAweDBBLCAweDA0LCAweDJBLCAweDEwLCAweEEwLCAweEMwLCAweEEwLCAweDAyLCAweDIxLCAweDBBLCAweDA0LAorMHgyOCwgMHgxMCwgMHhBOCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MTAsIDB4QTAsIDB4NTIsIDB4ODAsCisweDBBLCAweDAzLCAweDJBLCAweDA1LCAweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAxLCAweDJBLCAweDBDLAorMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMywgMHgyQSwgMHgwQywgMHhBOCwgMHgxMCwgMHhBMCwgMHgwMiwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDgwLAorMHgyMCwgMHgwMCwgMHg4OCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgyMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MiwgMHgwMCwKKzB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDQyLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA0LAorMHgwNCwgMHgxMCwgMHgxMCwgMHg0MSwgMHg0MCwgMHg0NCwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgxNCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MTAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsCisweDA0LCAweDA0LCAweDEwLCAweDEwLCAweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMiwgMHgwMiwgMHhFMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2OCwgMHgwMCwgMHhBOCwgMHgwMSwKKzB4QTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QTgsIDB4MDEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MUEsCisweDAwLCAweDZFLCAweDAwLCAweEI4LCAweDAxLCAweEEwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDZBLCAweDAwLCAweEE4LAorMHgwMSwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMiwKKzB4QzAsIDB4MDYsIDB4MDAsIDB4M0IsIDB4MDAsIDB4NkMsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4M0EsCisweDAwLCAweDY4LCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFBLCAweDAwLCAweDZDLCAweDAwLCAweEEwLAorMHgwMywgMHhDMCwgMHgwNiwgMHgwMCwgMHgzQSwgMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MEMsIDB4ODAsIDB4MTgsCisweDAwLCAweEMyLCAweDAwLCAweDA4LCAweDAxLCAweDI4LCAweDBDLCAweDgwLCAweDE4LCAweDgwLCAweEMwLCAweDAwLCAweDA4LAorMHgwMywgMHgyMCwgMHgwQywgMHg4MiwgMHgzOCwgMHgwMCwgMHhDMiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyMCwgMHgwQywgMHg4MCwKKzB4MTgsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJDLCAweDAwLCAweDEwLCAweDAwLCAweEMwLCAweDAyLCAweDAwLAorMHg2MywgMHgwMCwgMHgyQywgMHgwMCwgMHgxMCwgMHgwMCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MTAsIDB4MDAsIDB4QzAsIDB4MDIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MkMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgyMCwgMHg4MCwgMHg4QywgMHg4MiwgMHgzMiwgMHgwQSwgMHhDOCwgMHgwOCwgMHgyMCwgMHgyMSwgMHg4MCwgMHg4QywgMHg4MiwKKzB4MzIsIDB4MDIsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTMsIDB4ODAsIDB4OEMsIDB4MDIsIDB4MjIsIDB4MEEsIDB4QzgsIDB4MjgsCisweDI4LCAweEEzLCAweDgwLCAweDhDLCAweDgyLCAweDMyLCAweDBBLCAweEM4LCAweDA4LCAweDIwLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHhBMCwgMHgxNiwgMHg4MywKKzB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsIDB4QTAsIDB4QzQsIDB4QTAsIDB4MTYsIDB4ODMsIDB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsCisweEE4LCAweEM1LCAweEEwLCAweDE2LCAweDgzLCAweDRBLCAweDBDLCAweDZBLCAweDMxLCAweEE4LCAweEU1LCAweEEwLCAweDE2LAorMHg4MywgMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwgMHhBOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDIsCisweDA4LCAweDIxLCAweDAwLCAweDY0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIyLCAweDQ2LCAweDg4LCAweDE4LCAweDIxLCAweDYyLCAweDgwLCAweDhBLCAweDAxLCAweDI2LCAweDA2LAorMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4MCwgMHg4OCwgMHgxMSwgMHgyMiwgMHg0NiwgMHg4OCwgMHgxOCwgMHgyMSwgMHg2MiwKKzB4ODQsIDB4ODgsIDB4MDEsIDB4MjIsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MjEsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDBBLAorMHgwOCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHg4OCwgMHgwMiwgMHhBMiwgMHgwQSwgMHgwOCwgMHgyQSwgMHgyMCwgMHhBQSwKKzB4MDAsIDB4QUEsIDB4MDIsIDB4QTIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QUEsIDB4ODAsIDB4QTAsIDB4MDIsIDB4QTYsCisweDBBLCAweDA4LCAweDJBLCAweDIwLCAweEFBLCAweDgwLCAweEE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHgyOCwKKzB4NDQsIDB4QTEsIDB4MTAsIDB4OEMsIDB4NEEsIDB4MTAsIDB4MkEsIDB4NDEsIDB4MjgsIDB4MDQsIDB4QTEsIDB4MTAsIDB4MDQsCisweDQyLCAweDEwLCAweDBBLCAweDQxLCAweDI4LCAweDg0LCAweDgxLCAweDEwLCAweDg0LCAweDRBLCAweDEwLCAweDBBLCAweDQxLAorMHgyMCwgMHgwNCwgMHhBMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsCisweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLCAweDE0LCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LAorMHgwOCwgMHgxNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4QzAsCisweENBLCAweDIwLCAweDJCLCAweDAzLCAweDhDLCAweDBDLCAweDMwLCAweDMyLCAweDQwLCAweEMwLCAweDAwLCAweDAxLCAweDAzLAorMHg4OCwgMHgwQywgMHgzMCwgMHgzMiwgMHhDMCwgMHhDQSwgMHgwMCwgMHgyQiwgMHgwMywgMHhBQywgMHgwQywgMHhCMCwgMHgzMiwKKzB4NDAsIDB4QzAsIDB4MDAsIDB4MkIsIDB4MDMsIDB4QUMsIDB4MEMsIDB4QjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE0LCAweDRFLCAweDgwLCAweDNBLCAweDAxLAorMHhFQSwgMHgwNCwgMHhCOCwgMHgxMywgMHhBMCwgMHg0RSwgMHg4MCwgMHgzQiwgMHg0MSwgMHhFQSwgMHgwNCwgMHhBOCwgMHgxMywKKzB4QTAsIDB4NEUsIDB4ODQsIDB4M0IsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QjgsIDB4MTMsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0IsCisweDAxLCAweEUyLCAweDQ0LCAweEE4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgxMCwgMHgxMiwgMHgyMywgMHgwOCwgMHg4QywgMHgyMSwgMHgzMCwgMHg4MCwgMHhDMCwKKzB4MTAsIDB4MDIsIDB4MjMsIDB4MDgsIDB4MEMsIDB4MjEsIDB4MzAsIDB4ODQsIDB4QzQsIDB4MTgsIDB4MTIsIDB4NDMsIDB4NDgsCisweDhDLCAweDIxLCAweDMxLCAweDgyLCAweEMwLCAweDE4LCAweDEyLCAweEEzLCAweDQ4LCAweDhDLCAweDIxLCAweDMxLCAweDg0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsCisweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLAorMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEI0LCAweERGLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDBELCAweENELCAweEJFLAorMHg3QywgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhGQiwgMHgwRCwgMHhFRCwgMHgzNywgMHgzNCwgMHhEQiwgMHhEMCwgMHg3RSwKKzB4NDMsIDB4QjMsIDB4MEQsIDB4Q0QsIDB4QkUsIDB4N0MsIDB4REIsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MEQsIDB4RUQsCisweDM3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhDQywgMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHgzMywgMHhCRiwgMHhGQywgMHgzQywgMHgzMiwgMHhGMywKKzB4QzgsIDB4RkMsIDB4MjMsIDB4RjMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RkYsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4MzMsCisweEJGLCAweEZDLCAweDNDLCAweDMyLCAweEYzLCAweEM4LCAweENDLCAweDIzLCAweEYzLCAweDhGLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhEQywgMHg3OCwgMHg3MiwgMHg3QiwKKzB4NDgsIDB4RUMsIDB4MjcsIDB4MzEsIDB4ODYsIDB4QzQsIDB4NzgsIDB4MTIsIDB4N0IsIDB4NDgsIDB4OEMsIDB4MjcsIDB4QjEsCisweDlGLCAweERDLCAweDdFLCAweDcyLCAweEUzLCAweEM5LCAweEVELCAweDI3LCAweEI3LCAweDg3LCAweEM0LCAweDdFLCAweDcyLAorMHg3QiwgMHhDOCwgMHhFRCwgMHgyNywgMHgzNywgMHg5RSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OEUsIDB4MDIsIDB4MzksIDB4MDgsIDB4RTQsIDB4MjAsCisweDgwLCAweDgzLCAweDQwLCAweDBFLCAweDAyLCAweDM5LCAweDA4LCAweEU0LCAweDIwLCAweDkwLCAweDgzLCAweDQwLCAweDBFLAorMHgwMiwgMHgzOSwgMHgwOCwgMHhFMCwgMHgyMCwgMHg5MCwgMHg4MywgMHg0MCwgMHg4RSwgMHgwMiwgMHgzOSwgMHgwQSwgMHhFMCwKKzB4MjgsIDB4ODAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweEEwLCAweDhFLCAweDgxLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEE4LCAweDIzLCAweEEwLCAweDhFLAorMHg4MCwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwgMHgwMiwgMHhFQSwKKzB4MDgsIDB4QUEsIDB4MjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QjgsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsCisweDg0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDE4LCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwKKzB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjAsCisweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLAorMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4ODgsIDB4OTMsIDB4MjAsCisweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDEzLCAweDIwLCAweDRBLCAweDgwLCAweDM4LCAweDAxLAorMHhFMiwgMHgwNCwgMHg4OCwgMHgxMywgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLAorMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4MjgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDY0LCAweDgwLCAweDEwLCAweDAxLAorMHg0MiwgMHgwQSwgMHgwOCwgMHgzMSwgMHgyMCwgMHg0NCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwQywgMHgwOCwgMHgwOSwKKzB4MjAsIDB4NDQsIDB4ODAsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MjAsIDB4NjQsIDB4ODAsIDB4OTAsCisweDAwLCAweDQyLCAweDAyLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhENCwgMHgyMCwgMHg1MiwgMHg4MSwgMHg0OCwgMHgwNSwgMHgyMiwgMHgxMSwgMHg4MCwgMHg1NCwKKzB4MjAsIDB4NTIsIDB4ODEsIDB4NDgsIDB4MDUsIDB4MjIsIDB4MTUsIDB4ODgsIDB4NDQsIDB4MDAsIDB4NTIsIDB4ODEsIDB4NDgsCisweDA0LCAweDIwLCAweDE1LCAweDg4LCAweDU0LCAweDIwLCAweDUyLCAweDgxLCAweDQ4LCAweDBDLCAweDIwLCAweDExLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgzMCwKKzB4MDAsIDB4QzgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4M0MsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDBDLCAweDgwLCAweDMyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDBDLCAweDgwLAorMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsCisweDAwLCAweDIwLCAweDBFLCAweDgwLCAweDIwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDgwLAorMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg4OCwgMHgwMSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwKKzB4ODgsIDB4MDEsIDB4MjAsIDB4MEEsIDB4MDgsIDB4MDIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDIwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLAorMHgwMiwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwKKzB4MTAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsCisweDg4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgwNiwgMHgwMCwKKzB4MTksIDB4MDAsIDB4NjQsIDB4MDQsIDB4ODAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDAsCisweDkwLCAweDExLCAweDAwLCAweDA2LCAweDAwLCAweDE5LCAweDAxLCAweDYwLCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA2LAorMHgwMCwgMHgxOSwgMHgwMSwgMHg2MiwgMHgwMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsCisweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDQzLCAweDI4LCAweDBDLAorMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwKKzB4MTAsIDB4MTgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLAorMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDAwLCAweDBDLAorMHgwMSwgMHgzMCwgMHgwNCwgMHhDMCwgMHgzMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMCwKKzB4MTAsIDB4MDAsIDB4QzMsIDB4MjAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MEMsIDB4QzIsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsCisweDBDLCAweDAxLCAweDMwLCAweDBDLCAweEMyLCAweDM0LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwKKzB4MzAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsIDB4QzEsIDB4MjAsCisweDA2LCAweDgxLCAweDE4LCAweDBDLCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDBDLAorMHg2MCwgMHgxMCwgMHg4OCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4ODAsIDB4NDIsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsCisweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDBDLCAweDAxLCAweDEwLCAweDA0LAorMHhDMCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHhDMCwgMHgxMCwgMHg4MCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4ODAsIDB4NDIsIDB4MjAsCisweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LAorMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwQywgMHg4MSwgMHgxOCwgMHgwNCwgMHhDMiwgMHgxMCwgMHg4OCwgMHg0MSwKKzB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LCAweDAwLAorMHhBMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyOCwgMHgwMCwgMHhBMiwgMHgwMCwgMHg4OCwgMHgwMiwKKzB4MDAsIDB4MDgsIDB4ODAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjgsCisweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDQyLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwKKzB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsCisweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4ODEsIDB4MDIsCisweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsCisweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLAorMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwKKzB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDIwLCAweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEUyLCAweDE4LCAweDk4LAorMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwgMHgxOCwgMHg4OCwgMHg2MywgMHg0MCwgMHg4RSwgMHg4MSwKKzB4MzgsIDB4MDYsIDB4RTYsIDB4MTgsIDB4ODgsIDB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4ODYsIDB4RTYsIDB4MTgsCisweDg4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLAorMHg2MiwgMHg0MCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwgMHhBMCwgMHg2MywgMHg0MCwgMHg4RSwgMHgwMSwKKzB4MzksIDB4MDYsIDB4RTQsIDB4MTgsIDB4OTAsIDB4NjMsIDB4MDAsIDB4OEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTAsIDB4MTgsCisweDkwLCAweDYzLCAweDQwLCAweDhFLCAweDAxLCAweDM5LCAweDA2LCAweEUwLCAweDE4LCAweDgwLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHhBMiwgMHg2MiwgMHhBMCwgMHg4RSwgMHg4MSwKKzB4M0EsIDB4MDYsIDB4RTgsIDB4MTgsIDB4ODgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4QTEsIDB4M0EsIDB4MDYsIDB4RUEsIDB4MTgsCisweEE4LCAweDYzLCAweDIwLCAweDhDLCAweDgxLCAweDNBLCAweDA2LCAweEMyLCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLAorMHg4MSwgMHgzQSwgMHgwNiwgMHhDMiwgMHgxOCwgMHgxOCwgMHg0MywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTIsCisweDIwLCAweDRCLCAweDgwLCAweDI0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEyLCAweDIwLCAweDQxLCAweDgwLCAweDBFLAorMHgwMSwgMHgxMiwgMHgwNCwgMHhFOCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHhFOCwKKzB4MTIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDYwLCAweDAwLCAweDg2LCAweDAxLCAweDE4LCAweDA2LCAweDYwLCAweDE4LCAweDg4LCAweDYxLCAweDAwLCAweDg2LAorMHgwMSwgMHgxOCwgMHgwNiwgMHg2MCwgMHgxOCwgMHg4MCwgMHg2MSwgMHgyMCwgMHg4NiwgMHgwMSwgMHgxOCwgMHgwNiwgMHg2MiwKKzB4MTgsIDB4ODAsIDB4NjEsIDB4MDAsIDB4ODYsIDB4MDEsIDB4MTgsIDB4MDYsIDB4NjIsIDB4MTgsIDB4MDAsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDA2LCAweDIwLCAweDFFLAorMHg4MCwgMHg3MCwgMHgwMCwgMHhFMiwgMHgwMSwgMHgwOCwgMHgwNywgMHgyMCwgMHgxRSwgMHg4MCwgMHg3MCwgMHgwMCwgMHhFMiwKKzB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsIDB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsCisweDFFLCAweDgwLCAweDc4LCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHg0QSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxMCwgMHgwNCwgMHg2MCwKKzB4MTIsIDB4MDAsIDB4NDksIDB4MDAsIDB4MjYsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NjAsIDB4MTIsIDB4ODAsIDB4NDEsIDB4MDAsCisweDA2LCAweDAxLCAweDE4LCAweDA0LCAweDQwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA2LCAweDAxLCAweDE4LCAweDA0LAorMHg0MCwgMHgxMiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4ODAsIDB4NDIsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NDIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsCisweDQ0LCAweDgxLCAweDE4LCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LAorMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4MjAsCisweDAyLCAweDgzLCAweDI4LCAweDA0LCAweDIyLCAweDMwLCAweDgwLCAweDQyLCAweDIwLCAweDAyLCAweDgzLCAweDI4LCAweDA0LAorMHgyMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgwMCwgMHgwMiwgMHg4MSwgMHgwOCwgMHgwQywgMHhBMCwgMHgxMCwgMHg4OCwgMHg0MCwKKzB4MjAsIDB4MDIsIDB4ODEsIDB4MDgsIDB4MEMsIDB4QTAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLAorMHhBMCwgMHgzMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHg0QSwgMHgwMSwgMHgyOCwgMHgwQywgMHhBMCwgMHgzMCwgMHg4MCwgMHhDMiwKKzB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MEMsIDB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsCisweDBDLCAweEEwLCAweDEwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwMCwgMHg4MCwgMHgxMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsCisweDAwLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDA0LCAweDg4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwKKzB4NDAsIDB4NDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsCisweDA0LCAweDA0LCAweDEwLCAweDEwLCAweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA1LCAweDA0LCAweDEwLCAweDEwLAorMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwNCwgMHgxMCwgMHgxMCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsCisweDAwLCAweDY2LCAweDAwLCAweDk4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LAorMHgwMSwgMHg2MCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwKKzB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDY0LCAweDAyLCAweDgwLAorMHgwQiwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4OTgsIDB4MDAsIDB4RTAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4ODAsIDB4OTksIDB4MDAsIDB4RTAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLAorMHgwNiwgMHgyMCwgMHgxQywgMHg4MCwgMHg3MCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwNSwgMHgyMCwgMHgxQywgMHg4MiwKKzB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MjAsIDB4MTYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjIsIDB4MDEsCisweDA4LCAweDA3LCAweDI4LCAweDFDLCAweDAwLCAweDcwLCAweDAwLCAweDYyLCAweDAxLCAweDE4LCAweDAxLCAweDg4LCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwQywgMHgwMiwKKzB4MzAsIDB4MEUsIDB4QzAsIDB4MjAsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MjAsCisweDAwLCAweDgzLCAweDAwLCAweDA0LCAweDAyLCAweDMwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgzLCAweDAwLCAweDBDLAorMHgwMiwgMHgzMCwgMHgwQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4QUMsIDB4MDIsIDB4QjAsIDB4MEEsIDB4QzAsIDB4MkEsCisweDA4LCAweEFCLCAweDAwLCAweEFDLCAweDAyLCAweEIwLCAweDBBLCAweEMwLCAweDI4LCAweDAwLCAweEEzLCAweDIwLCAweDhDLAorMHgwMiwgMHhCMCwgMHgwQSwgMHhDMiwgMHgyOCwgMHgwMCwgMHhBMywgMHgwMCwgMHg4QywgMHg4MiwgMHhCMCwgMHgxRSwgMHhDMiwKKzB4MDgsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEEyLCAweEMyLCAweDIwLCAweDA2LCAweDgzLCAweDE4LCAweDBFLCAweDYyLCAweDMwLCAweDg4LCAweEUxLCAweDIwLCAweDA2LAorMHg4MywgMHgxOCwgMHgwRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHhDMSwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwQywgMHg2MiwKKzB4MzAsIDB4ODgsIDB4QzEsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MTgsIDB4MUUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4ODgsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDAwLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxMiwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgwMSwgMHg2MiwKKzB4ODAsIDB4ODgsIDB4MTEsIDB4MjAsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MTEsIDB4MjIsCisweDQ2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDExLCAweDIyLCAweDQ2LCAweDA4LCAweDE4LCAweDQwLAorMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QTIsIDB4MDIsIDB4MjIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDAwLCAweDg4LCAweDAyLCAweDAyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLAorMHhBMCwgMHg4MCwgMHg4OCwgMHgwMiwgMHgyMiwgMHgwQSwgMHgwOCwgMHgyOCwgMHgyMCwgMHhBMCwgMHg0MCwgMHg4MCwgMHgwMiwKKzB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDQsCisweDQyLCAweDAwLCAweDI4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDEyLCAweDA0LCAweDQyLCAweDEwLCAweDBBLCAweDQxLAorMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHhBMCwgMHgwNCwgMHg4MSwgMHgxMCwKKzB4MDQsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4QTAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LAorMHgwOCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwgMHg1MCwKKzB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsCisweDZELCAweDAwLCAweDk0LCAweDI4LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhBMiwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyMSwgMHgwQiwgMHhBQywgMHgyQywgMHgxMCwgMHhCMiwKKzB4QzAsIDB4Q0EsIDB4MDIsIDB4MjMsIDB4MEIsIDB4QUMsIDB4MkMsIDB4QjAsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MkEsCisweDBCLCAweDg0LCAweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJBLCAweDJCLCAweDg0LCAweDZDLCAweEIwLAorMHgwMiwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxMiwKKzB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4OTgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsCisweDAxLCAweEUyLCAweDA0LCAweDgwLCAweDEzLCAweDYwLCAweDRFLCAweDgwLCAweDM5LCAweDAxLCAweEU2LCAweDA0LCAweDg4LAorMHgxMywgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwOSwgMHhFNiwgMHgwMCwgMHg4OSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MTAsIDB4MDIsIDB4MjMsIDB4MDgsCisweDhDLCAweDIxLCAweDMwLCAweDgwLCAweEMwLCAweDEwLCAweDAyLCAweDQzLCAweDA4LCAweDhDLCAweDIxLCAweDMxLCAweDg0LAorMHhDNCwgMHgwOCwgMHgxMiwgMHg2MywgMHgwOCwgMHg4QywgMHgyMCwgMHgzMSwgMHg4NiwgMHhDNCwgMHgxOCwgMHgxMiwgMHgyMywKKzB4MDgsIDB4OEMsIDB4MjAsIDB4MzEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLAorMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwKKzB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsCisweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHhEQiwgMHhEMCwgMHhFQywKKzB4Q0IsIDB4QjcsIDB4MEQsIDB4RUQsIDB4MzcsIDB4RkMsIDB4REYsIDB4RDAsIDB4NkMsIDB4QzMsIDB4QjcsIDB4MEQsIDB4RUQsCisweDM3LCAweDM0LCAweERCLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDBELCAweENELCAweDM2LCAweDM0LCAweERCLCAweEQwLAorMHhFQywgMHhDQiwgMHhCNywgMHgyRiwgMHhFRCwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RjMsIDB4Q0IsIDB4Q0YsIDB4MjMsIDB4RjMsCisweDhGLCAweEZDLCAweDNGLCAweDMyLCAweEYzLCAweEM4LCAweENGLCAweDIzLCAweEYzLCAweDhGLCAweENDLCAweDNDLCAweDMyLAorMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHgzMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwgMHhGMywgMHhDQiwgMHhDRiwgMHgyRiwKKzB4RjMsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweERDLCAweDc4LCAweDEyLCAweEZCLCAweEM5LCAweEVELCAweDI3LCAweEIxLCAweDg3LCAweERDLCAweDdFLCAweDEyLAorMHhFMywgMHhDOSwgMHhFRCwgMHgyNywgMHhCNywgMHg5RiwgMHhEQywgMHgxRSwgMHg3MiwgMHhGQiwgMHg0OSwgMHhFQywgMHgyMSwKKzB4QjcsIDB4OUYsIDB4REMsIDB4N0UsIDB4NzIsIDB4RkIsIDB4NDksIDB4RUMsIDB4MjEsIDB4MzcsIDB4ODYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIxLCAweDAwLAorMHg4NSwgMHgzMywgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHhDRSwKKzB4NTAsIDB4MzAsIDB4NDMsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MzgsIDB4NDMsIDB4RTEsCisweDBDLCAweDg1LCAweDAwLCAweDE0LCAweENFLCAweDUwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsCisweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDA4LCAweDAwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgxOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsCisweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLAorMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgxOCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisweDAwLCAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLAorMHhDRSwgMHgwMCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywKKzB4RTAsIDB4NEMsIDB4ODAsIDB4MDAsIDB4MDEsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHhDQywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgzMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgzMCwgMHgwMywKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MzMsIDB4MTAsIDB4Q0MsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweENDLCAweDQwLCAweDMwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwKKzB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweENDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDMwLAorMHgxMywgMHgwMCwgMHg0MCwgMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4MzAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDM4LAorMHg1MywgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwKKzB4MzMsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsCisweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDg2LCAweDA0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHg4NiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsCisweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLAorMHg4MCwgMHgwMCwgMHgwMCwgMHhDRSwgMHgwMCwgMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwKKzB4MDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgzMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMywgMHgyMSwgMHgwMCwgMHg4NCwgMHgzMywgMHgxMCwgMHhDRSwKKzB4NDAsIDB4MzgsIDB4MDMsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAwLAorMHhDQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNDLCAweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEYwLCAweEYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsCisweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LAorMHgwMiwgMHg1MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsCisweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAxLAorMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLAorMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwKKzB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwKKzB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwKKzB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MzMsIDB4MTUsIDB4MDIsIDB4NTQsCisweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwKKzB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLCAweDIwLCAweDAwLAorMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwKKzB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4NDMsIDB4MjAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGMCwgMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4ODAsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweEMyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDA0LCAweDgwLCAweDQwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHhBNCwgMHgwNywgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QzAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDBDLCAweDAwLCAweDA1LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg1QSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5OTNkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIFNMSUNPU1MKKwl0cmlzdGF0ZSAiQWxhY3JpdGVjaCBHaWdhYml0IElTLU5JQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBORVRERVZfMTAwMAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFsYWNyaXRlY2gncyBJUy1OSUMgZ2lnYWJpdCBldGhlcm5ldCBjYXJkcy4KKworCSAgVGhpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CisJICAgIE1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorCSAgICBPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCSAgICBLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc2xpY29zcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjOWU5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19TTElDT1NTKSArPSBzbGljb3NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDViMTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQ6CisKKwlNb2phdmUgY2FyZHMgKHNpbmdsZSBwb3J0IFBDSSBHaWdhYml0KSBib3RoIGNvcHBlciBhbmQgZmliZXIKKwlPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCUthbGFoYXJpIGNhcmRzIChkdWFsIGFuZCBxdWFkIHBvcnQgUENJLWUgR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCitUaGUgZHJpdmVyIHdhcyBhY3R1YWxseSB0ZXN0ZWQgb24gT2FzaXMgYW5kIEthbGFoYXJpIGNhcmRzLgorCitUT0RPOgorCS0gbW92ZSBmaXJtd2FyZSBsb2FkaW5nIHRvIHJlcXVlc3RfZmlybXdhcmUoKQorCS0gcmVtb3ZlIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9mIHN0cnVjdHVyZXMKKwktIGFueSByZW1haW5pbmcgc3BhcnNlIGFuZCBjaGVja3BhdGNoLnBsIHdhcm5pbmdzCisJLSBhbnkgbmV0ZGV2IHJlY29tbWVuZGVkIGNoYW5nZXMKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0bzoKKyAgICAgICAgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK2FuZCBDYzogTGlvciBEb3RhbiA8bGlvZG90QGdtYWlsLmNvbT4gYW5kIENocmlzdG9waGVyIEhhcnJlcgorPGNoYXJyZXJAYWxhY3JpdGVjaC5jb20+IGFzIHdlbGwgYXMgdGhleSBhcmUgYWxzbyBhYmxlIHRvIHRlc3Qgb3V0IGFueQorY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ0MzJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oCkBAIC0wLDAgKzEsODIxNSBAQAorI2RlZmluZSBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjIyIgorI2RlZmluZSBNT0pBVkVfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE1OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgTVNlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE1TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBNb2phdmVVQ29kZVsyXVs2NTUzNl0gPQoreworCXsKKwkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MWYsIDB4ZTksIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTksCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHg0MCwgMHhlOSwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDExLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGQ5LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjYsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4OTUsIDB4ZTgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjIsIDB4NTAsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGE1LCAweGE1LCAweDAwLCAweGE2LCAweGI0LCAweGE3LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweGEyLCAweDUwLAorCTB4YjUsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHgwMCwgMHhkYSwgMHhiNSwgMHhhYiwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDAwLCAweGEyLCAweDUwLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGVkLCAweDhiLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NDYsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGVmLCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZTMsIDB4OGYsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGYxLCAweGRiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTksIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhlOSwgMHhlMywgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlYiwgMHhkYiwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhkYiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGNmLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGE3LAorCTB4YjQsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGI1LCAweDhiLCAweDAxLCAweDAwLAorCTB4NjIsIDB4MDAsIDB4MjYsIDB4NGMsIDB4YjUsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDAwLCAweDAwLCAweDUyLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4NGIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4ZjcsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhlZiwgMHhkZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGRmLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGU1LCAweDAxLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweGRhLAorCTB4YjMsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGQ1LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDdiLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NWQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlNywgMHg4YiwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHhlNywgMHg5NywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVlLAorCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTUsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlNSwgMHhlMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweDhmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGU1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHgyMiwgMHhmNSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweGQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZWIsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhkNCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGUzLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZGQsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGU5LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhkZCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGRmLCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA0LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLCAweGI3LCAweDAwLCAweDEzLCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGNhLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweGQzLCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDYsIDB4ZmUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhlMywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYSwgMHhiMywgMHhjMywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAwLCAweDAwLCAweDQyLCAweDhkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGViLCAweDAxLCAweDAwLCAweGU0LCAweDAwLCAweDg0LCAweDk2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHg4MywgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhjMywgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGI1LCAweGJmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhiOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGI4LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweGI5LCAweGViLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjgsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4ZGMsCisJMHhiOSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDkxLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4MSwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweGEwLCAweGRjLAorCTB4YjksIDB4NmIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweGRhLCAweDhiLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDQ0LCAweDg5LCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDBjLCAweDAxLCAweGEwLCAweGRhLCAweDhiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4OTAsIDB4NDQsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwKKwkweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweDhiLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ZjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHhjZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAxLCAweDQwLCAweGRhLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGRhLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgwMSwgMHg5ZiwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDEsIDB4OWYsIDB4OTQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4YjQsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjksIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDEsIDB4MDAsIDB4NDksCisJMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAxLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweDIyLCAweDRiLAorCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDUxLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YWYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4NWYsIDB4MDEsIDB4MjIsIDB4Y2MsIDB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhiYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LAorCTB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDFhLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAorCTB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgyMiwgMHg0MCwKKwkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4ZmYsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhYSwgMHgwMSwgMHhhMiwgMHg0YywKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MjIsIDB4NDEsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZTAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0NCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGIzLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OWYsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM0LCAweDAxLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhjMywgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4NmYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NTIsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4YzcsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDAxLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkMSwgMHgwMSwgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NTMsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRhLCAweDAxLCAweDIyLCAweGRlLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMSwgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQzLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsCisJMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlNywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweGVkLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMSwgMHg4NCwgMHg0MSwKKwkweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGZhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweGRkLAorCTB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLCAweGE3LCAweGNiLCAweDAxLCAweDAwLAorCTB4YzUsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4YmEsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhhOCwgMHhiMSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0ZCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY1LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDVkLCAweDAyLCAweDAwLCAweGM3LAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1ZCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVkLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGJhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMiwgMHhiOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDIsIDB4YmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDMxLCAweDAyLCAweGJjLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMiwgMHhiZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM1LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDIsIDB4YmYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAyLCAweGM4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwMiwgMHhjYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDIsIDB4Y2IsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQzLCAweDAyLCAweGNkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwMiwgMHhjZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ3LCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjUsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDgxLCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDllLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI5LCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4Y2MsCisJMHg4NSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDAyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGM2LCAweDAyLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMiwgMHg4MCwgMHhhNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4ODAsIDB4YTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDAyLCAweDIwLCAweDRmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwMiwgMHgyMCwgMHg0NywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMiwgMHhhMiwgMHhhNSwKKwkweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUzLCAweDAyLCAweDFmLCAweDkxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwMiwgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLAorCTB4ZTgsIDB4MDIsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsCisJMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwYywKKwkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDRkLCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NGYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZiwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAzLCAweDAwLCAweDBjLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQzLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDMsIDB4MjIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAorCTB4MzksIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMywgMHhhMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgyMSwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTgsCisJMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDIwLCAweDRmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDVhLAorCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgxNCwgMHgyMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwMywgMHgyMiwgMHhmMCwKKwkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDU4LCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDE0LCAweDIwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAzLCAweGEyLCAweGYwLAorCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg4LCAweGUwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDMsIDB4YTIsIDB4NDIsIDB4MjEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDQ0LCAweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMywgMHhhMiwgMHhmMCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg5LCAweGUwLCAweDAxLCAweDAwLCAweGUwLCAweDAwLCAweDgwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQxLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjIsCisJMHg4NiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDAzLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDhmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDksIDB4MDMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDVjLAorCTB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMywgMHgyMiwgMHg1ZiwKKwkweDhkLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmYsIDB4NDYsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMywgMHhhMCwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZkLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4NTUsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMywgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHgwMywgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDMsIDB4MjIsIDB4NWEsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDgzLCAweDAzLCAweGEyLCAweDQxLAorCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDBmLCAweDAwLCAweGJjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCisJeworCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAorCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGU2LCAweDg5LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHhkZSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgxOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2IsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDcxLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDk3LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDkzLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YWYsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4MCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDczLCAweDgwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODAsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4OTEsIDB4ODEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2MsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDg0LCAweDgwLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwKKwkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsCisJMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLAorCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODAsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKKwkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHgwMCwgMHgyMCwKKwkweDQyLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDliLCAweDgwLCAweGE4LCAweGIxLCAweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4MCwgMHgxNCwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwKKwkweDgzLCAweGY0LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLAorCTB4N2YsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwKKwkweDdmLCAweDgwLCAweDFmLCAweDVjLCAweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDllLCAweDgzLCAweDFkLCAweGM2LAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDNkLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweDliLCAweGIzLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NTgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDgzLCAweDAwLCAweGJiLAorCTB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE1LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhmLCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwKKwkweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDRlLCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MjIsIDB4NDIsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4MCwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDgwLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVlLCAweDgwLCAweDFmLCAweGNhLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAorCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGFlLCAweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDUsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgxLCAweGEyLCAweDQwLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGQxLCAweDAxLCAweDAwLCAweDBkLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDIxLCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4NjAsIDB4NDAsIDB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4NDEsCisJMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDJmLCAweDgxLCAweGEyLCAweDQyLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4Y2EsIDB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLAorCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg2ZiwKKwkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzUsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDQyLCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDIyLCAweDViLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweGY1LCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhjYSwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDVmLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDVlLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDgxLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDYxLCAweDgxLCAweGEyLCAweDRmLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4YzQsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MGMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3YSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2YsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4MSwgMHgyMiwgMHg0MywKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGExLCAweDgxLCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjAsIDB4ODEsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDgxLCAweDIyLCAweDRhLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4ODEsIDB4MjIsIDB4NGQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgyMiwgMHg0ZiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4ODEsIDB4MjIsIDB4NGUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MSwgMHgyMiwgMHg0NSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGFkLCAweDgxLCAweDIyLCAweDQ0LAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MSwgMHgyMiwgMHg0MywgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDIyLCAweDQyLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4ODEsIDB4MjIsIDB4NGIsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YWYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGFlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAorCTB4YzQsIDB4ODEsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MDAsIDB4MGIsCisJMHg3ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg3ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGEyLCAweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODEsIDB4OWYsIDB4ODUsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDgxLCAweDE0LCAweGY3LCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweGQxLCAweDgxLCAweGEyLCAweDQ5LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4MSwgMHgxNSwgMHhmOCwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4MSwgMHhhMiwgMHg0YSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4ODEsIDB4YTIsIDB4YzgsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGVmLCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDQyLCAweDQwLAorCTB4ZjEsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwgMHg2YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwKKwkweGIxLCAweGIzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDgxLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHg3NSwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ5LCAweDAwLCAweDAwLCAweDQxLAorCTB4YjMsIDB4NzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhiMywgMHhmMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGIzLCAweGZiLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGE2LCAweGI4LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDIsCisJMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGViLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4MiwgMHgxMCwgMHhkYSwgMHhiNSwgMHg2YiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDE1LCAweDgyLCAweDA0LCAweDQwLCAweDJkLCAweDAxLCAweDAwLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI1LCAweDAxLCAweDAwLCAweDQyLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDMwLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM5LCAweDgyLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwKKwkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDgsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4ODIsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4MjIsIDB4NDUsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MiwgMHgyMiwgMHgyMCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHgyMiwgMHg0NSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MiwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTgsIDB4ODIsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODIsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGFhLCAweDgyLCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweGE3LCAweDgyLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGI0LCAweGIzLCAweDAxLCAweDAwLAorCTB4YjgsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MjAsIDB4MjAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDgyLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKKwkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MiwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlNywgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDgzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzMsIDB4ODMsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDgzLCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4MywgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4MywgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODMsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODMsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4MywgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGEyLCAweDRiLCAweGI3LCAweDZmLCAweDAwLCAweDAwLAorCTB4OWQsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MmYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweDIyLCAweDQwLAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDgwLCAweDgzLCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MywgMHgyMiwgMHg0MiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4ODMsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg5YSwgMHg4MywgMHgyMiwgMHg1MSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MywgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODMsIDB4MjIsIDB4NDAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZlLAorCTB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDEsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODMsIDB4MjIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFhLCAweDgzLCAweDIyLCAweDRjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDgzLCAweDIyLCAweDUwLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNywgMHg4MywgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHg4MywgMHgyMiwgMHg1YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGFlLCAweDgzLCAweGEyLCAweDQyLAorCTB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHhjYSwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjksIDB4ODMsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4ODMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGNhLCAweDgzLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNmLCAweDgzLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4MywgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODMsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MywgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmOCwgMHgwMCwgMHg0OCwgMHg5MCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MywgMHgyMiwgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNywgMHg4MywgMHhhMiwgMHg0MSwKKwkweDkzLCAweDUwLCAweDAwLCAweDAwLCAweGU1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4NDcsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg4MywgMHgyMCwgMHgxOCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDRlLCAweGQzLCAweDAxLCAweDAwLCAweDVlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmMsIDB4MDMsIDB4MDAsIDB4NDIsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NCwgMHgyMiwgMHhhNywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NCwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHhhMiwgMHg0MSwKKwkweDAxLCAweDdkLCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDIyLCAweDU4LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDMzLCAweGM0LAorCTB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODQsIDB4YTEsIDB4YWQsIDB4OWQsIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4ODQsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODQsIDB4YTIsIDB4NDAsCisJMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDg0LCAweDIyLCAweDVlLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDg0LCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4ODUsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NCwgMHhhMiwgMHg1ZiwgMHg1OSwgMHgyNywgMHgwMCwgMHgwMCwKKwkweDM1LCAweDg0LCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDNjLCAweDg0LCAweGEyLCAweDVlLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODQsIDB4MjIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDg0LCAweGE4LCAweGIxLCAweDM2LCAweDMwLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDg2LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweDM0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg4NCwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg1MiwgMHgyMSwKKwkweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLCAweDJmLCAweGMzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NCwgMHgwMCwgMHgzNCwgMHgxMywgMHg4NCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU1LCAweDg0LCAweDAwLCAweDQzLAorCTB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4NGUsIDB4ODQsIDB4MjIsIDB4NTksIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NCwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDRiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDg0LCAweDIxLCAweGFjLAorCTB4OWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MWYsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMCwgMHg1ZiwgMHg5ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDU4LCAweDkxLCAweDAxLCAweDAwLCAweDU2LCAweDg0LCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDIyLCAweDQ0LAorCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODQsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg1YiwgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4NCwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWEsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODksIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg5LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LAorCTB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODQsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDg5LCAweDFmLCAweGE1LCAweDgyLCAweDZmLCAweDAwLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MzMsIDB4NDAsCisJMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDczLCAweDg0LCAweGEwLCAweGNlLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweGEwLCAweGNkLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NCwgMHgyMiwgMHhiNSwKKwkweDgxLCAweDE0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzcsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsCisJMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4NCwgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLAorCTB4OTAsIDB4ODQsIDB4YTYsIDB4NDIsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTcsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NCwgMHg0NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDg0LCAweGE4LCAweGIxLAorCTB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4MWQsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5MSwgMHg4NCwgMHgwMCwgMHg1OCwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwKKwkweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg0LCAweDIzLCAweDRiLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDg0LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4NCwgMHg4MywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4NCwgMHgwMCwgMHg0YiwgMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NCwgMHhhMiwgMHhmOCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDg0LCAweGEyLCAweGY4LCAweDEwLCAweDZjLCAweDAwLCAweDAwLCAweGFjLCAweDg0LCAweGEyLCAweGYwLAorCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI4LCAweDg0LCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDFmLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM1LCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAorCTB4YzMsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMzLCAweDg0LCAweDQ3LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4MWYsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGQzLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2IsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk2LCAweDAwLCAweDVmLCAweDAxLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDg0LCAweDIyLCAweDQwLAorCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODQsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ4LCAweDg0LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NCwgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDhiLCAweDAwLCAweDQ1LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0YiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHgwNywgMHgyZSwgMHg0NywgMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4NCwgMHgyMiwgMHgxNywKKwkweDk2LCAweDA0LCAweDAwLCAweDAwLCAweGZkLCAweDg0LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZmQsIDB4ODQsIDB4MjMsIDB4YTIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODUsIDB4MDAsIDB4NWMsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg1LCAweDIyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDg1LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxZCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODUsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg4NSwgMHgwMCwgMHhmMiwgMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg4NSwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NGEsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4NSwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBhLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDFjLCAweDg1LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDFjLCAweDg1LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDcsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4NSwgMHgyMiwgMHhhMSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDg1LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4NWIsIDB4ODUsIDB4YTMsIDB4OTIsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDE1LCAweDhhLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDg1LCAweDIyLCAweDVjLAorCTB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4ODUsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDJkLCAweDg1LCAweGEyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4ODUsIDB4MDAsIDB4NWUsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDg1LCAweGE4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg4NSwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NDksIDB4ODUsIDB4MjgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU2LCAweDg1LCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDU5LCAweDg1LCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVkLCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDg1LCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg4NSwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODUsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODUsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweGYzLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4NSwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NSwgMHhhMiwgMHg0MCwKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDg1LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc0LCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2UsIDB4NDMsIDB4MjcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDI3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODUsIDB4YTMsIDB4MGIsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLAorCTB4MzksIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDdmLCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweDgyLCAweDQxLCAweDIzLCAweDQwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4NSwgMHgyMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDRjLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDg1LCAweDY4LCAweDFiLCAweDI4LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4ODUsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg4NSwgMHgyMiwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODUsIDB4YTIsIDB4MTQsCisJMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDg1LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDJiLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4NSwgMHgyMiwgMHgxYiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDE1LCAweGUwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4NSwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGMwLCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODUsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDk1LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJlLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODUsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGQ3LCAweDg1LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDIwLCAweDFkLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGRjLCAweDg1LCAweGEzLCAweDQwLAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4NjAsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMywKKwkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NSwgMHgyMiwgMHgxMywgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODUsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LAorCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODYsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDBhLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDg2LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDg2LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDk3LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDg2LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGMsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4NiwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI0LCAweDg2LCAweDg1LCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4NiwgMHg0NiwgMHg0NywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODYsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWUsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU0LCAweDg2LCAweDAxLCAweGZiLAorCTB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODYsIDB4ODcsIDB4ZmIsIDB4MjIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODYsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzZSwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDQ5LCAweDg2LCAweDIyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4NiwgMHhhNiwgMHg1ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4MjEsIDB4MDQsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODYsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0YiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDg2LCAweDAwLCAweDQzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDg2LCAweDAwLCAweGZiLAorCTB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4NiwgMHgwMCwgMHg1YSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDg2LCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTYsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDhiLCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY1LCAweDg2LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODYsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg1MywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NjgsIDB4ODYsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDZjLCAweDg2LCAweGEwLCAweDkxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcwLCAweDg2LCAweDIwLCAweDkxLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweGEwLCAweDBhLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4YTAsIDB4NDIsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTQsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDg2LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NiwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDg2LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODYsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NiwgMHg0MywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk0LCAweDg2LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4ODYsIDB4ODYsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDg2LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGMsCisJMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGEwLCAweDg2LCAweDMwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NiwgMHgyMiwgMHg0MCwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGFmLCAweDg2LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDIsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDg2LCAweDQ3LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDEsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGU0LCAweDg2LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyNCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg2LCAweDIyLCAweDA4LAorCTB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4NiwgMHhhYSwgMHg0MSwKKwkweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODYsIDB4MjYsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODYsIDB4YTIsIDB4NDAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4NiwgMHgwMCwgMHg0MSwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MiwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIxLCAweDM4LCAweDk2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODYsIDB4YTIsIDB4NDQsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDIwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4NiwgMHhhOCwgMHg0MiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDg2LCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDg2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4OTIsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHgwOCwKKwkweDJlLCAweDMwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDAwLCAweDQxLCAweDI3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgwYSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODYsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4NywgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHgwNywKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODYsIDB4YTMsIDB4NDAsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg4NiwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODYsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDAxLCAweDJkLCAweDQwLAorCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4ODgsIDB4MjIsIDB4MGYsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODcsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODcsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4ODcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg4NywgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NWYsIDB4ODcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQzLCAweDg3LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODcsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRhLCAweDg3LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg4NywgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDg3LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZCwgMHg4NywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDg3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDRjLAorCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg4NywgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3OSwgMHg4NywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwMywKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJhLCAweGYyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDIyLCAweDQwLAorCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDg3LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODcsIDB4MjIsIDB4MGIsCisJMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NywgMHgyMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTEsIDB4ODcsIDB4YTAsIDB4NDYsIDB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLAorCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODcsIDB4YTAsIDB4NDEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDg3LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweGEwLCAweDQzLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODcsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg4NywgMHhhMCwgMHg0MSwgMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ODcsIDB4MjIsIDB4NDgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ4LCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweGE3LCAweDg3LCAweDkwLCAweDQ4LAorCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI2LCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiYywgMHg4NywgMHg4NywgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg3LCAweGEwLCAweDA3LCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ1LCAweDg3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg4LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGVhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDBiLCAweDg4LCAweDIzLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDEzLCAweDg4LCAweDIyLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDg4LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjEsIDB4ODgsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4OCwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDExLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODgsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDU0LCAweDg4LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODgsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODgsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1MywgMHg4OCwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNkLCAweDg4LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4OCwgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDg3LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLAorCTB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ODgsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NywgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDcxLCAweDg4LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmQsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHhmMywgMHgzOCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyMCwgMHg1MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweDQwLCAweDNmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDFkLAorCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OCwgMHhhMCwgMHhmYywgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDg4LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4OCwgMHhhMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODgsIDB4YTAsIDB4NDEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLCAweDgxLCAweDg0LCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODgsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDE5LAorCTB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4YSwgMHg4OCwgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLCAweDMyLCAweGMwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODgsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODgsIDB4YTAsIDB4MWMsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDg4LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMywgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIxLCAweDg4LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmIsIDB4OTUsIDB4MDAsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4ODgsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMxLCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGM4LCAweDg4LCAweDIyLCAweDlmLAorCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDNmLCAweGMzLCAweDAxLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4OCwgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNmLCAweDg4LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4MWUsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4OCwgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDg4LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAwLCAweGE2LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDFmLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4OCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg4OCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGVjLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODgsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg4OCwgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweDAwLCAweDk0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODksIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDg5LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDg5LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg5LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg5LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODksIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4OSwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDg5LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDI3LCAweDg5LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4OSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDg5LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODksIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDMxLCAweDg5LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzgsIDB4ODksIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4NGMsCisJMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDg5LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg5LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDAzLAorCTB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg4OSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRiLCAweDg5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg5LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OSwgMHgyMiwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjUsIDB4ODksIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4OSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZlLCAweDg5LCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODksIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4YTIsIDB4NWYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODksIDB4MjIsIDB4NDgsCisJMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDFmLCAweGYwLAorCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODksIDB4MjMsIDB4NDEsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODksIDB4MjIsIDB4MGEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDhhLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODksIDB4MjIsIDB4ZjAsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgyLCAweGUwLCAweDAxLCAweDAwLCAweDg4LCAweDg5LCAweGEzLCAweDQxLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDIwLCAweDRjLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgyMiwgMHgwYSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDksCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDg5LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHg5NywgMHg4OSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4ODksIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NCwgMHgyMiwgMHg0MCwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDg5LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg4NCwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzksIDB4ODksIDB4MWQsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4OSwgMHgyMiwgMHg1YiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVkLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE5LCAweDg5LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWIsIDB4ODksIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODksIDB4MjIsIDB4NTcsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDg5LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4YjcsIDB4ODksIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4OSwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweGJhLCAweDg5LCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDg5LCAweGEyLCAweDQwLCAweDg2LCAweDA0LCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4OWMsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGMzLCAweDg5LCAweDUyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDA1LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGQwLCAweDg5LCAweDIyLCAweDU0LAorCTB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODksIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwgMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODksIDB4MGYsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDUwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4ODksIDB4OTksIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4OSwgMHg5YiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg5LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODksIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDU4LAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI2LCAweDA1LCAweDQ3LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0NCwgMHhmMCwgMHg0MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhmMiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHg2ZiwKKwkweDk3LCAweDMzLCAweDAxLCAweDAwLCAweGViLCAweDg5LCAweDIyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4OWIsIDB4ODAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4MjIsIDB4NTksCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU2LCAweDg5LCAweDI4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGVjLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4YzAsIDB4OTUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4OSwgMHgyMiwgMHg1ZCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjIsIDB4ODksIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHhjNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODksIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4OSwgMHg0MywgMHg1ZiwgMHg3ZiwgMHgxMywgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhiZiwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDdmLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4N2YsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4MDAsIDB4YmYsCisJMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDYsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAzLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTUsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDYyLCAweDk1LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OGEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDk1LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg5NSwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgxYywgMHg4YSwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxZCwgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZkLCAweDhhLCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDUxLCAweDhhLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4OGEsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4YSwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDUxLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MWMsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1MSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ4LCAweDhhLCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDMsIDB4OGEsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCisJMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGMsIDB4OGEsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDVkLCAweDhhLCAweDIyLCAweDQxLAorCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4YSwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDhhLCAweDgzLCAweDQxLAorCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg4YSwgMHgyMywgMHg0MCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhhLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwKKwkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGEsIDB4YTAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDgwLCAweDhhLCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4NzYsIDB4OGEsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDhhLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDcyLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4NzcsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGEsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4YSwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg4YSwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4ZCwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDliLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI5LCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGYsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGZjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5MCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBmLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkwLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4NmUsIDB4OGIsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDksCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzEsIDB4OTIsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNSwgMHg5MiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDkyLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZlLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTQsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDk0LCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OGEsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDhkLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNiLCAweDhkLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKKwkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDhkLCAweDIwLCAweDRiLAorCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAzLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDhlLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDBkLCAweDhlLCAweDIwLCAweGYwLAorCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEzLCAweDhlLCAweGE4LCAweDQ0LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDhlLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDhlLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4MjIsIDB4NDQsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4ZSwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhlLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4ZSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OGUsIDB4YTIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGUsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg4ZSwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHg4ZSwgMHgyMiwgMHgwYSwKKwkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDRkLCAweDhlLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OGUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDhlLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OGUsIDB4YTAsIDB4NDMsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5NywgMHgwMCwgMHg0NywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZSwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZSwgMHgyMiwgMHg0NSwKKwkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDgyLCAweDhlLCAweDIyLCAweDQ4LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGUsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk5LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDhlLCAweGEyLCAweDQ0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4ZSwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDk5LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjksIDB4OTYsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MjIsIDB4NGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKKwkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGUsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGNiLCAweDhlLCAweDIwLCAweDk0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweGU0LCAweDMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OGUsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQ2LCAweDhlLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTUsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OGUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZSwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhlLCAweDAwLCAweDAyLAorCTB4ZjAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OGUsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg4ZSwgMHg2OCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU5LCAweDhlLCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhlLCAweGE4LCAweDEzLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg4ZiwgMHhhMiwgMHgwMiwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweGY5LCAweDhlLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZiwgMHgyMiwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhmLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZiwgMHgyMiwgMHgwNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OGYsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGYsIDB4MGQsCisJMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZSwgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDhmLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDQ2LAorCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg4ZiwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgwMCwgMHgxMCwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4ZiwgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweDIyLCAweDQ5LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHgxOCwgMHg4YywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0YywKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDUyLCAweDhmLCAweDAwLCAweDAwLCAweDkyLCAweGIwLCAweDAwLCAweDAwLAorCTB4NDksIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MWUsCisJMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDhmLCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4ZiwgMHg0MywgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAwLCAweDFlLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OGYsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OGYsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4ZiwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4ZiwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OGEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY1LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGYsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDcyLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OGYsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZiwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2EsIDB4OGYsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg4MSwgMHg4ZiwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDgyLCAweDhmLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGYsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGYsIDB4NDMsIDB4NDgsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDk1LCAweDhmLCAweDIyLCAweDQ4LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgxYiwgMHg0NywKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGYsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4ZiwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NCwKKwkweDgzLCAweDcwLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDhhLCAweDIzLCAweDQxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGFhLCAweDhhLCAweDAwLCAweDQ3LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4ZSwgMHhhMiwgMHg0MCwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDhmLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4N2UsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLAorCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhmLCAweGEyLCAweDUwLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4ZiwgMHhhMCwgMHg0MywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGRlLCAweDhmLCAweDIyLCAweDQ3LAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4ZiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OGYsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweGRjLCAweDhmLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4ZiwgMHhhMywgMHg0MCwKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OGYsIDB4MjAsIDB4NGMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDAwLCAweDIwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY1LCAweDk3LCAweDAwLCAweDQ2LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTMsIDB4OTAsIDB4OTAsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAorCTB4ZTUsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MCwgMHg4MCwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQyLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg5MCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg5MCwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDUwLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5MCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDViLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTAsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5MCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDkwLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDkwLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDc2LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwKKwkweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5MCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDkwLCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgxYiwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDg3LCAweDkwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MjIsIDB4MDYsCisJMHg5MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsIDB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MCwgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg5MCwgMHg0MiwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDFhLCAweDVkLAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4MTAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmIsIDB4ZmIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTAsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4OTAsIDB4NDIsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWQsIDB4OGYsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDkwLCAweDQ3LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTAsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgxZiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5MCwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDQ2LCAweDk3LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTAsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRhLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhlNiwgMHg5MCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGY1LCAweDkwLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTAsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg5MCwgMHgyMiwgMHhmMywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0MiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsCisJMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MCwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA2LCAweDkxLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDExLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFkLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgzZCwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDkxLCAweDAwLCAweDQyLCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDM4LCAweDkxLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MywgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5MSwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGIsIDB4OTEsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDBiLAorCTB4OTksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4NTAsIDB4OTksIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHg2MiwgMHgwMSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweGYwLCAweDIyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZiwgMHg0MSwgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTEsIDB4MjMsIDB4MGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZkLCAweDkxLCAweDI2LCAweDExLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDJmLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZjQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlNCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDc5LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDdhLCAweDkxLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjMsIDB4MDAsIDB4YTYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDgyLCAweDkxLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4OTEsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMiwgMHg5MSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc0LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OTEsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5MSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjEsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmIsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzAsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDBhLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweDAwLCAweDQxLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGUxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGZiLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4OTIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDkyLCAweDIwLCAweDAxLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJmLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4OGUsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGRjLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ4LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTIsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4ODcsIDB4NDIsCisJMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweGU3LCAweDkxLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDkyLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTIsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDRjLCAweDkyLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5MiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0ZCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTIsIDB4MjIsIDB4NDIsIDB4OTYsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkyLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5MiwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDZhLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweGUxLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OTIsIDB4NDcsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OTIsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdjLCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDk2LCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5MiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDAwLCAweDVmLCAweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDU1LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHg0MywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDMxLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTIsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5MiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNjLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDc0LCAweDk2LCAweDAwLCAweGYyLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDkyLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTgsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQ1LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA3LCAweDg0LCAweDk0LCAweDAxLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQxLCAweGU3LCAweDQxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MGEsCisJMHgyYywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDkzLCAweDI2LCAweDQ3LAorCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5MywgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDAyLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MywgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTMsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MTYsIDB4OTMsIDB4MjIsIDB4MDYsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxYywgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgzNCwgMHg5MywgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDkzLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5MywgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5MywgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDkzLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDkzLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTMsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MywgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk1LCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHg5MywgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTMsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGE0LCAweDkzLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTMsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTMsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg5MywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDkzLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5MywgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDkxLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5MywgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTMsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQzLCAweDkzLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5MywgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHg5MywgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGRlLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MywgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGVhLCAweDkzLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDkzLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg5MywgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDk0LCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDEwLCAweDk0LCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmIsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MjcsIDB4OTQsIDB4MjYsIDB4NDcsCisJMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDk0LCAweDIzLCAweDRiLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDRiLAorCTB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsIDB4MDQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5NCwgMHgyMiwgMHgwNiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg5NCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDRiLCAweDk0LCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDU5LCAweDk0LCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUxLCAweDk0LCAweGEyLCAweDE2LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLAorCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5MywgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NSwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDkzLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5NCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQ1LAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc3LCAweDk0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5NiwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5NCwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OWMsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDk1LCAweDk0LCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDg3LCAweDkxLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTQsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0YywgMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDM0LCAweGMzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDExLAorCTB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNhLCAweDk0LCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ZTUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDUwLAorCTB4NDMsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5NCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDk0LCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDcsCisJMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5NCwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NSwgMHhhMiwgMHg0YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4OTQsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGYzLCAweDk0LCAweDIyLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4OTUsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTQsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDk0LCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRhLCAweDk1LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDRhLCAweDk1LCAweGEyLCAweDQxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDRhLCAweDk1LCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NGEsIDB4OTUsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk1LCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg5NSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHg5NSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDE1LCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk1LCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDFlLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMiwgMHhmMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk1LCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTUsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk1LCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5NSwgMHgyMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDJiLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDk1LCAweDIyLCAweDBhLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDcsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRkLCAweDk1LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZCwgMHg5NSwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0YywKKwkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTUsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKKwkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDk1LCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDk1LCAweGEyLCAweDRiLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTUsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc3LCAweDk1LCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDg1LCAweDk1LCAweDEzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHg5NSwgMHg0NCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGMyLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NSwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgyMiwgMHgxMiwKKwkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDUxLCAweDk4LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDk1LCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTUsIDB4MjIsIDB4NTAsCisJMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDk3LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NSwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDk1LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDkxLCAweDk1LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTcsIDB4MDAsIDB4ZjIsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIzLCAweDk1LCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4YmMsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTUsIDB4MDAsIDB4NDIsCisJMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDk1LCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAorCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHgyOCwgMHhiMSwKKwkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweGMwLCAweDk1LCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTUsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjNywgMHg5NSwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTUsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkNywgMHg5NSwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDk1LCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGQ3LCAweDk1LCAweDIyLCAweDRjLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NSwgMHhhOCwgMHhiMSwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGU4LCAweDk1LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGYxLCAweDk1LCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY2LCAweDk1LCAweDgzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwgMHgxMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg5NiwgMHgyMiwgMHg0MCwgMHhmNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NiwgMHgyMiwgMHgxMSwgMHgxZSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk2LCAweGEwLCAweGYwLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4YTAsIDB4ZjQsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUyLCAweDQzLCAweGQxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTYsIDB4MzAsIDB4NDcsCisJMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5NiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MzEsIDB4OTYsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDk2LCAweGEyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg5NiwgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQxLCAweDk2LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5NiwgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTYsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDk2LCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NiwgMHgxOCwgMHg0YSwKKwkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTYsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDUxLCAweDk2LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU5LCAweDk2LCAweDIyLCAweDQ1LAorCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5OSwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NiwgMHhhMiwgMHgzYiwKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTksIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MSwgMHg5NiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDhkLCAweDk2LCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDk2LCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhhYywgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5NiwgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NiwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDVjLAorCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDk2LCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDk2LCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDk2LCAweGEyLCAweGE1LAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5NiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5NiwgMHg5ZiwgMHg0MSwKKwkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5NywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDk3LCAweDAwLCAweDQxLAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTcsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTcsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTcsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg5NywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NywgMHhhMiwgMHg4YSwKKwkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDk3LCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKKwkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NywgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NywgMHg0NSwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTcsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTcsIDB4NDUsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NywgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHg0NiwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDk3LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDVhLCAweDk3LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDk3LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg5NywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmMsIDB4OTcsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTcsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDk3LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NywgMHgyNiwgMHg0NywgMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDc0LCAweDk3LCAweDIzLCAweDRiLCAweDA0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk3LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDllLCAweDk3LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NywgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg5NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg5NywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTcsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDJmLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1YywgMHg5NywgMHgyMCwgMHgxNSwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDk3LCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4OTcsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg5NywgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NywgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGRhLCAweDk0LCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQxLAorCTB4YTMsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTcsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NywgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGU0LCAweDk3LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDAsIDB4OTcsIDB4YTIsIDB4MDYsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTcsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOCwgMHg5NywgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg0OCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTcsIDB4YTAsIDB4NDgsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAorCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGRmLCAweDk3LCAweDY0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZiwgMHg5NywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsCisJMHgzMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJkLCAweDQ2LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5OCwgMHgwMCwgMHgzMCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGYyLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YSwgMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweGY2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDk4LCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwKKwkweDgyLCAweGM4LCAweDAxLCAweDAwLCAweDBlLCAweDk4LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk4LCAweDQyLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTgsIDB4MjYsIDB4MzAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTgsIDB4OTAsIDB4NGMsCisJMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDgwLCAweDQ5LCAweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5OCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDI5LCAweDk4LCAweGEyLCAweDQwLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDk3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTgsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDk4LCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLAorCTB4MTksIDB4N2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDQxLCAweDk4LCAweDIwLCAweDRjLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5OCwgMHgyMCwgMHhmMiwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5OCwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTgsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZjMsIDB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsCisJMHg4MiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OCwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4ODIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5OCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NGIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDUwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg1NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NWIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDYwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg2NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NmIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDcwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg3NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4N2EsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDQzLCAweDU3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDU3LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc2LCAweDk4LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4N2IsIDB4OTgsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5OCwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweDIyLCAweDU3LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MjAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDliLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4OTcsIDB4OTgsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDljLCAweDk4LCAweDIyLCAweGYyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5OCwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk4LCAweDIzLCAweGYwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgyMCwgMHg1MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNSwgMHg5OCwgMHhhMywgMHg5MiwKKwkweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDk4LCAweDAwLCAweDQ0LCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwOCwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDcsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5OCwgMHgwMCwgMHg0NCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBmLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGQsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweGNiLCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5OCwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4OTgsIDB4MjMsIDB4NDEsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg5LCAweDBjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhkZiwgMHg5OCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLAorCTB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OCwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwKKwkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTgsIDB4MDAsIDB4NDEsIDB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4OTksIDB4YTMsIDB4NWYsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDk5LCAweDIyLCAweGYyLCAweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDA5LCAweDk5LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGEsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsIDB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTksIDB4MWYsIDB4NDQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE4LCAweDk5LCAweDYyLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsIDB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5OSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk5LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTksIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OTksIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDk5LCAweDlmLCAweDQyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5OSwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHg5OSwgMHgwMCwgMHgwYSwKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTksIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5OSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5OSwgMHgyMiwgMHg0OSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5OSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDA4LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTksIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg5NywgMHgwMCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDU4LCAweDk5LCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTksIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg5OSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDFiLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDk5LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk5LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4NjUsIDB4OTksIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiNiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4N2MsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk5LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE3LCAweDk5LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTksIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmIsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDk5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5OSwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5OSwgMHg4NSwgMHg0MSwKKwkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5YywgMHg0YiwgMHg4MiwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGMyLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NGIsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDgwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRmLCAweDk5LCAweDgwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OTksIDB4MDAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDRmLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg5OSwgMHgyMCwgMHg0YiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDQ3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHgwMCwgMHg0MSwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweGYxLCAweDk5LCAweGEyLCAweGE1LCAweDgwLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZhLCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OTksIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2OCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDIsIDB4YTIsIDB4ZjgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDI0LCAweDlhLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OWEsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDlhLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDMzLCAweDlhLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OWEsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDJkLCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDlhLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4NDEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OWYsIDB4MjIsIDB4NDAsCisJMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgxOSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE5LCAweDQxLCAweDdiLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAorCTB4YzQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHhhMiwgMHhjOCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweDRkLCAweDlhLCAweGNjLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OWYsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHg5ZiwgMHhhMiwgMHg0MSwgMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDlmLCAweDgwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5ZiwgMHgwMCwgMHg0MiwgMHhjZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzksIDB4OWYsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHg0ZCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwKKwkweDQwLCAweGIxLCAweDAxLCAweDAwLCAweGQ5LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OWEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1YTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2JyY3Z1Y29kZS5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjE1IgorCitzdGF0aWMgdTMyIEdCUmN2VUNvZGVMZW4gPSA1MTI7CisKK3N0YXRpYyB1OCBHQlJjdlVDb2RlWzI1NjBdID0KK3sKKzB4NDcsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjcsIDB4NWIsIDB4MDksCisweDMwLCAweDAwLCAweGI2LCAweDVmLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDNiLAorMHg3OCwgMHgzYSwgMHgwMCwgMHgxYywgMHhhMiwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHg3MCwKKzB4MTgsIDB4YjMsIDB4N2IsIDB4YTksIDB4YWEsIDB4MWUsIDB4YjQsIDB4N2IsIDB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsCisweDFkLCAweDA2LCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDY0LCAweDA4LCAweDBjLCAweDMxLCAweDU2LCAweDcwLCAweDA0LAorMHgwYywgMHgzMSwgMHg1NiwgMHg4MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0NiwKKzB4YTAsIDB4MDAsIDB4MDksIDB4MjUsIDB4NTEsIDB4YzAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGUsIDB4YjAsIDB4MDAsIDB4ZTksCisweDI0LCAweDUxLCAweGMwLCAweDA0LCAweGNjLCAweGIzLCAweDAwLCAweDFjLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLAorMHgxYywgMHgwNiwgMHg1NiwgMHg0MiwgMHhkNCwgMHgwOCwgMHgwNywgMHg5ZCwgMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywKKzB4MDIsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4MDYsIDB4NTYsIDB4NWEsIDB4YzAsIDB4MDQsCisweGEwLCAweDMwLCAweDZjLCAweDAzLCAweDAwLCAweGFjLCAweDMwLCAweDZkLCAweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLAorMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHg2MCwgMHg4ZSwgMHg0MSwgMHg1NCwgMHgwOSwgMHgyOSwKKzB4MjUsIDB4NmQsIDB4MDMsIDB4MDAsIDB4ODAsIDB4OGUsIDB4NDEsIDB4NTQsIDB4MDksIDB4OGMsIDB4MzAsIDB4OGQsIDB4MDAsCisweDA0LCAweDQ3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLAorMHg2MCwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2MSwgMHhjMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2ZCwgMHgwMywgMHgwMCwKKzB4NmMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NGQsIDB4MzQsIDB4MDIsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsCisweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGM4LCAweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MCwgMHg1NCwKKzB4MDksIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4N2IsIDB4ZmIsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDBkLCAweDAwLCAweDFjLCAweGI0LCAweDdiLCAweGZkLCAweDAzLCAweDFjLCAweDgwLCAweDBlLCAweDQwLCAweDU0LCAweDA5LAorMHhlMCwgMHhmYiwgMHgwNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZTgsIDB4NzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MDQsIDB4MDAsCisweDAwLCAweGEwLCAweDkzLCAweDAwLCAweDYxLCAweDc2LCAweGExLCAweGMzLCAweDA0LCAweGMwLCAweDhkLCAweDQxLCAweDU0LAorMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhjMCwgMHgxZiwgMHhhMCwgMHhmZCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywKKzB4MDUsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4MDMsIDB4MDAsIDB4M2MsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsCisweGMwLCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDc0LCAweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDQyLAorMHg1NCwgMHgwOSwgMHg1YiwgMHg4MCwgMHg3NiwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsCisweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDdmLCAweDFjLCAweGEwLCAweDAxLCAweDljLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHhhMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywKKzB4ZjUsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4ZjYsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsCisweDU0LCAweDA5LCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLAorMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsCisweDQyLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLAorMHhhMCwgMHgzZCwgMHhhNiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwKKzB4MDAsIDB4MWMsIDB4YjUsIDB4M2UsIDB4YWUsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsCisweDJjLCAweDg0LCAweDAzLCAweDAwLCAweGI5LCAweDNhLCAweDlhLCAweDAxLCAweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLAorMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhkYiwgMHg4MywgMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwKKzB4MWQsIDB4YzEsIDB4MDQsIDB4YjksIDB4M2IsIDB4ODksIDB4YzEsIDB4MDQsIDB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsCisweDZiLCAweDJjLCAweDMxLCAweGMxLCAweDA0LCAweDAwLCAweDAwLCAweDc0LCAweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc1LAorMHhjMSwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg1NCwKKzB4ZDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDksIDB4MjUsIDB4YWQsIDB4MDEsIDB4MDAsIDB4YWIsIDB4MmMsIDB4N2QsIDB4YzEsCisweDA0LCAweGE3LCAweDFkLCAweDZkLCAweDAzLCAweDAwLCAweGNjLCAweDMzLCAweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLAorMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwKKzB4YWUsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsCisweDAzLCAweDFjLCAweDk5LCAweDNhLCAweDAyLCAweDAwLCAweDFjLCAweGJiLCAweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgzOCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwKKzB4MWMsIDB4YzcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4MGEsIDB4MDYsIDB4MWMsIDB4MjcsIDB4MWQsCisweDAxLCAweDAwLCAweDFjLCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LAorMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwKKzB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YTAsCisweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLCAweDFjLCAweDUzLCAweDBmLCAweDQyLCAweDU0LAorMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwKKzB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLAorMHg1NCwgMHgwOSwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg1NCwgMHgxMiwgMHgwMCwgMHhjYiwKKzB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsCisweDEwLCAweGE2LCAweDdiLCAweGYxLCAweDA1LCAweDFjLCAweDAwLCAweDAwLCAweDg4LCAweGMyLCAweDA0LCAweGE2LCAweDdiLAorMHhmMSwgMHgwNSwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwNCwgMHhjYiwgMHgyZiwgMHgwNSwgMHgwMCwgMHgxYywKKzB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWMsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsCisweDU0LCAweDA5LCAweGMwLCAweDgzLCAweGYxLCAweDMyLCAweDFjLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDA0LCAweDQ2LAorMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHhjMCwgMHg4MywgMHhmMSwgMHgzMiwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDQsIDB4NDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsCisweGEwLCAweDAyLCAweDA0LCAweDQ2LCAweDdhLCAweGRhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LAorMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4YjMsIDB4N2IsIDB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4NDAsIDB4NTQsIDB4MDksIDB4YzAsCisweDAzLCAweDljLCAweDAwLCAweDFjLCAweDgwLCAweDAwLCAweGYwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAyLAorMHgwNCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywKKzB4MmIsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4OTUsIDB4MTMsIDB4MDQsCisweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGE2LCAweDdiLCAweGE5LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLAorMHgwMCwgMHgxYywgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4YWIsIDB4MmQsIDB4ZjEsIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4Y2QsIDB4YzIsCisweDA0LCAweDhiLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLAorMHhhOSwgMHgwMywgMHgxMCwgMHhjYiwgMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywKKzB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4ZGEsCisweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE1LCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHgyOCwgMHgwMywgMHgwNCwgMHg0NiwgMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHg0MSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4NDIsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLAorMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwKKzB4MDAsIDB4MWMsIDB4NzUsIDB4NTYsIDB4OTYsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsCisweDFjLCAweDVkLCAweDAzLCAweDA0LCAweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweGE5LCAweDAzLAorMHgxMCwgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwKKzB4NmMsIDB4YzMsIDB4MDQsIDB4YjksIDB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsIDB4MDQsCisweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLAorMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwKKzB4MmYsIDB4MGQsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweDAwLCAweDAwLAorMHhhMCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywKKzB4YzAsIDB4MWQsIDB4ZjAsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZjgsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsIDB4NTYsCisweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDE5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLCAweGMwLAorMHgxYywgMHgyYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhmNCwKKzB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NmMsIDB4MTQsIDB4MDQsIDB4NjAsIDB4YjcsCisweGU2LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywgMHgxZSwKKzB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzQsIDB4MDQsIDB4YzAsCisweDFkLCAweGFjLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLCAweDAwLAorMHgxYywgMHgxYiwgMHg3NCwgMHgwZCwgMHhmNCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwKKzB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4YjEsIDB4YzMsIDB4MDQsCisweGE2LCAweDdiLCAweGMxLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweGUwLCAweDFjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwKKzB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDE4LCAweDFkLCAweGM3LCAweDlmLAorMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywKKzB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsCisweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGEwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGEwLAorMHhlZSwgMHhiNiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwOSwgMHgwNCwKKzB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGM1LCAweDA0LAorMHgwMCwgMHgwMCwgMHg4OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxNSwKKzB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NjQsIDB4YzQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODgsIDB4NDQsIDB4MDAsIDB4ODAsCisweDFkLCAweDhjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDlkLCAweDA0LCAweDAwLCAweGNlLCAweDc2LCAweDAxLCAweDAwLAorMHgxYywgMHhlZiwgMHg3NiwgMHhhZCwgMHhjNCwgMHgwNCwgMHhhNCwgMHg3NywgMHg5ZCwgMHgyNCwgMHgwOSwgMHhlNCwgMHg3NiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NTQsIDB4MDQsCisweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLAorMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjYywgMHgzMCwgMHg1MSwgMHhjNSwgMHgwNCwgMHhlYiwKKzB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4NTksIDB4MDEsIDB4MDAsCisweDFjLCAweGY1LCAweDc3LCAweDM5LCAweGM1LCAweDA0LCAweGUwLCAweDMwLCAweGVjLCAweDA0LCAweDAwLCAweDAwLCAweDRjLAorMHhjMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHgwNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHgwMCwKKzB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsCisweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE5LCAweDAyLCAweDFjLCAweGViLAorMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMiwKKzB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGM1LCAweGM0LCAweDA0LCAweDAwLCAweDdiLCAweDAwLCAweDgwLCAweDFjLAorMHhhZSwgMHg3NywgMHg1MSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhkMywgMHg4YiwgMHgwMCwKKzB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsIDB4NjAsIDB4NGMsIDB4ZDAsIDB4MDQsIDB4MDAsIDB4YzAsCisweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGMwLCAweDA0LCAweDAwLCAweDgwLCAweDI1LCAweGMwLCAweDA0LAorMHgwMCwgMHhiNSwgMHg1YiwgMHhjMSwgMHgwNCwgMHgwNCwgMHg2OSwgMHgyNiwgMHgwMSwgMHgwMCwgMHgxYywgMHg2YSwgMHgyYiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTksIDB4MjUsIDB4NTEsIDB4MDUsIDB4MDAsCisweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LCAweDExLCAweDA1LCAweDAwLCAweGI0LCAweDVmLCAweDAxLAorMHg0MCwgMHgxOCwgMHgwNywgMHg5ZCwgMHg1NCwgMHg1NSwgMHgwNCwgMHhiNywgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NiwKKzB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4MzMsIDB4MDEsIDB4NjAsCisweDE4LCAweGE0LCAweDJmLCAweDAxLCAweDYwLCAweDE4LCAweDY0LCAweDc3LCAweDAxLCAweDYwLCAweDE4LCAweDI0LCAweDc3LAorMHgwMSwgMHg2MCwgMHgxOCwgMHg0NCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHg2NCwgMHg4OCwgMHgwMywgMHgwMCwgMHgxYywKKzB4YTQsIDB4M2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NzcsIDB4MDEsCisweDAwLCAweDFjLCAweGQzLCAweGNmLCAweDNiLCAweDAwLCAweDFjLCAweDUzLCAweDRmLCAweDAyLCAweDAwLCAweDFjLCAweGQzLAorMHhjZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHhkYSwgMHhjZiwgMHgwYiwgMHgwMCwgMHgxYywgMHhkNSwgMHg1NywgMHgwZiwgMHgwMCwKKzB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4NTMsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MjksCisweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGMwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDU1LCAweDA0LAorMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4ZjUsIDB4NTUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGM0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhjYiwgMHgyZiwKKzB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsCisweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDIwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLAorMHgwMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHg4OSwgMHgyNSwgMHg2ZCwgMHhjMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsCisweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLAorMHgwNCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwKKzB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsIDB4NjgsIDB4YzAsIDB4MDQsIDB4NDAsIDB4MWMsIDB4OTgsCisweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDZkLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGMwLCAweGMwLCAweDA0LCAweDI3LAorMHgxZCwgMHhlZCwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCkBAIC0wLDAgKzEsNjg1MCBAQAorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMToyMiIKKyNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDk5LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDJmLCAweDgxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg5MSwgMHg2ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MCwgMHhhMiwgMHg0MiwKKwkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAorCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGQzLCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4MDAsIDB4MjAsCisJMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUyLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCisJMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4MiwgMHgxZSwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4ODAsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGYyLCAweDgwLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4YzYsIDB4OGYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZSwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywKKwkweDgxLCAweGYwLCAweDAxLCAweDAwLCAweGY2LCAweDgwLCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MiwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDc1LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDAzLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDliLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDlmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDlmLCAweDgxLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4MiwgMHgwMCwgMHhiYiwgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MiwgMHgwMCwgMHhjYSwKKwkweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDRkLCAweGIzLCAweDAwLCAweDAwLCAweDcwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MSwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4MSwgMHgyMiwgMHg0MSwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDJhLCAweDgxLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmMsIDB4ODEsIDB4MWYsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQxLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDJmLCAweDljLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4MzksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmYsIDB4OTksIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4NjMsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYwLCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4MSwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDIyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDYwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQxLCAweDc2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDY1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg2MCwgMHg0MCwgMHg5NSwgMHg4MywgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ODUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0ZSwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4MSwgMHgzNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg4MSwgMHgyMiwgMHg0MSwgMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweGNiLCAweDAxLCAweDAwLCAweDY4LCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODEsIDB4YTIsIDB4NDIsCisJMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwgMHg2OSwgMHg5NywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjAsIDB4NDMsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHg2NywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDIyLCAweDQwLCAweDY1LCAweDZmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAorCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4MSwgMHgyMiwgMHg1YiwKKwkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4MSwgMHg5ZiwgMHg4NSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAorCTB4ZGQsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODEsIDB4YTIsIDB4NGYsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMyLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNkLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDIyLCAweDQzLAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhkNSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGVjLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGY2LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4ODIsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDRhLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MiwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODIsIDB4MjIsIDB4NGUsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDgyLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4MiwgMHgyMiwgMHg0MywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKKwkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDMzLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDgyLCAweGEyLCAweDU0LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4MiwgMHhhMiwgMHgwNiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzgsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MiwgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg1LCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg2LCAweDgyLCAweDIyLCAweDU0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMCwgMHg0MywKKwkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCisJMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDU3LCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OGEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWIsIDB4ODIsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDgyLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MiwgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YTksIDB4ODIsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDgyLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDgyLCAweGEwLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDgyLCAweDAwLCAweDUwLAorCTB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4MiwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDFlLCAweGE0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4Y2YsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg4MiwgMHhhMSwgMHhhZCwgMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweGFiLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4YTIsIDB4NDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OCwgMHgwMCwgMHg1ZiwKKwkweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweDVlLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4N2QsIDB4ODgsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODIsIDB4MjIsIDB4NTQsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5MiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MiwgMHhhMiwgMHg1ZiwKKwkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGU3LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODIsIDB4MjIsIDB4NWMsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGU4LCAweDgyLCAweGE4LCAweGIxLAorCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDg1LCAweDE3LCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLAorCTB4ZmIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlZiwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGY3LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAorCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDgzLCAweDAwLCAweDM0LCAweDEzLCAweDg0LCAweDAwLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDgyLCAweDMzLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MywgMHgwMiwgMHhlNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDgzLCAweDgzLCAweGU1LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDhlLCAweDgyLCAweDAwLCAweDQyLAorCTB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODIsIDB4MDAsIDB4NDIsIDB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4MywgMHgyMiwgMHg0NiwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKKwkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODMsIDB4MjIsIDB4NDQsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGFjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDExLCAweDgzLCAweDIyLCAweDVhLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwZSwgMHg4MywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwKKwkweDExLCAweGM5LCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4ODMsIDB4MjIsIDB4NDQsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NDIsIDB4YTUsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZiwgMHg4NywgMHgyMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDY1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MjIsIDB4NDgsCisJMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLAorCTB4MzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4ODMsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsCisJMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MywgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDRkLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZCwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsCisJMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ODMsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE3LCAweDgzLCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDVjLCAweDgzLCAweGE2LCAweDQyLAorCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OTYsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4MDAsIDB4NTgsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgxNywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRhLCAweGMxLCAweDAwLCAweDE3LCAweDk2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MywgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDZkLCAweDgzLCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODMsIDB4MjIsIDB4NTUsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NzMsIDB4ODMsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LAorCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsCisJMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdjLCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDhkLCAweDgzLCAweDIyLCAweDU4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MywgMHhhMiwgMHhmMywKKwkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLAorCTB4OGQsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4MywgMHg3NywgMHg0MSwKKwkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDkzLCAweDgzLCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDkzLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQzLCAweDgzLCAweDc3LCAweDQxLAorCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDliLCAweDgzLCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGExLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDgzLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NiwgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGE5LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsCisJMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDgzLCAweDIzLCAweGEyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDg0LCAweDAwLCAweDVjLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg4MywgMHgyMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgzLCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHg3MiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAorCTB4ZjUsIDB4ODMsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MDAsIDB4ZjIsCisJMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MjIsIDB4NGEsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NCwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODQsIDB4NjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsCisJMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweGExLCAweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDg0LCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4NCwgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg0LCAweDIyLCAweDVjLCAweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhMiwgMHg0MywKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NCwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM0LCAweDg0LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4M2EsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4NCwgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDg0LCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NCwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTQsIDB4ODQsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweGE3LCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWUsIDB4ODQsIDB4YTcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4NCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDg0LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLCAweDM5LCAweGIwLCAweDAxLCAweDAwLAorCTB4NmQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgxNiwgMHgzMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDcwLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg3YywgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NCwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGI3LCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MCwgMHgyYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGFkLCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgyMiwgMHgxYiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM2LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjMywgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQwLAorCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4Y2QsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKKwkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NCwgMHgyMiwgMHgxMywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg1LCAweDIyLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NSwgMHgyMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODUsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg1LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDg1LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDg1LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRiLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHg4NSwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDJmLCAweDg1LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NSwgMHg2NCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDg1LCAweGE4LCAweDFiLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4NzQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwNSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDA5LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODUsIDB4MDEsIDB4ZmIsCisJMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODUsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDg1LCAweGE2LCAweDVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjksIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NSwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4NSwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDZlLCAweDg1LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGExLCAweDg4LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4NSwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwKKwkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODUsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDY5LCAweDg5LCAweDAwLCAweDUzLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDU0LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg4NSwgMHhhMiwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4YTAsIDB4OTEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweGEwLCAweDQyLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMywgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4ODUsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDg1LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGIzLCAweDg1LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDg1LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODUsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYywgMHg4NSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDg1LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjEsIDB4ODUsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDg1LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweDA5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDg1LCAweDY2LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDEsCisJMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDI0LCAweGM4LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGVhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ5LAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg4NiwgMHgyNiwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDg2LCAweDAwLCAweDQxLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NSwgMHhhMiwgMHg0NCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDg2LCAweGE4LCAweDQyLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGY2LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDkyLAorCTB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDc4LCAweDk4LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJkLCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTMsIDB4MDcsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODcsIDB4MjIsIDB4MGYsCisJMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQzLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMiwKKwkweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDY2LCAweDg2LCAweGEzLCAweDA3LAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ODYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDczLCAweDg2LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDczLCAweDg2LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk5LCAweDg2LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDg2LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODYsIDB4YTMsIDB4MTIsCisJMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4NiwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAorCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg3LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4NiwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDg2LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGI4LCAweDg2LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGEzLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODYsIDB4YTIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweDIzLCAweDA3LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhNCwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODYsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDg2LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweGQ4LCAweDg2LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGRiLCAweDg2LCAweGEwLCAweDQxLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMCwgMHg0MywKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4ODYsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDg2LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDIyLCAweDQ4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4NiwgMHg5MCwgMHg0OCwKKwkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAorCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgxNywKKwkweDk4LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4ODcsIDB4YTAsIDB4MDcsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDA3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4NywgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LAorCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUyLAorCTB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDc5LCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4NGQsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTksIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDY1LCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NywgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc1LCAweDg3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzksIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4OGMsIDB4ODcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDk4LCAweDAwLCAweDQxLCAweDNmLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg3LCAweDIyLCAweDUwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGEzLCAweDg3LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4OWUsIDB4ODcsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDBlLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4NywgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4ODcsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDkxLCAweDZjLCAweDAwLCAweDAwLCAweGMxLCAweDg3LCAweDIyLCAweDQ4LAorCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NywgMHgxZiwgMHhmMCwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDg3LCAweDIyLCAweDBhLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQyLCAweDg3LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgyMCwgMHg0YywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ5LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4NywgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODMsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4MjIsIDB4NDYsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHhhMiwgMHg0MSwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYywgMHg4NywgMHgyMiwgMHg0MCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGUwLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODcsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDk0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyZSwgMHg5NCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDgzLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDg4LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGMsIDB4NTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQzLCAweDg4LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODgsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4OCwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDQzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODgsIDB4YTAsIDB4NDgsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4OCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4OCwgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg0ZiwgMHg4OCwgMHgyMiwgMHg0MSwgMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4OCwgMHg4MywgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4ODgsIDB4MjMsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODgsIDB4YTIsIDB4NDEsCisJMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCisJMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDg4LCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDZjLCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjgsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzksIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODEsIDB4ODgsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NCwgMHg4OCwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4OCwgMHgyMiwgMHg1MCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDU3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg4OCwgMHgwMCwgMHg0YiwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGUxLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDhjLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQyLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAorCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDAwLCAweDAwLCAweDQ3LCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODksIDB4MDAsIDB4NGIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRkLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgxLCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVhLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJmLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDkzLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE2LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY3LCAweDkzLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4YiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODUsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkOSwgMHg4YiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4MWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA1LCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LAorCTB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OGMsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDhjLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OGMsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OGMsIDB4YTIsIDB4NGMsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDhjLCAweDIwLCAweGYwLCAweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDMsCisJMHg4MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJiLCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDhjLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4YywgMHgyMiwgMHg0NCwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4YywgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OGMsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU5LCAweDhjLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDJmLCAweDQ5LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NTksIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDVjLCAweDhjLCAweGEyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGMsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc2LCAweDhjLCAweDIyLCAweDBhLCAweDE2LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4YywgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHgxMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4NDEsCisJMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDgzLCAweDhjLCAweGEwLCAweDQzLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDhjLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlkLCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHg4YywgMHgyMiwgMHg0NSwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCisJMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4YywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGI5LCAweDhjLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4YywgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhjLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGRjLCAweDhjLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweGUxLCAweDhjLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDJkLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4ZCwgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MGMsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OGQsIDB4YTMsIDB4MDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDIwLCAweDAyLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4ZCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4ZCwgMHhhMywgMHgwMSwKKwkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4ZCwgMHhhOCwgMHgxMywKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDUxLCAweDhkLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGQsIDB4YTIsIDB4MDIsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4ZCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDhkLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGQsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJjLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM5LCAweDhkLCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4M2UsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDhkLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OGQsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDhkLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDU3LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGQsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4ZCwgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZlLCAweDhkLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDcyLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwKKwkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OGQsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZCwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTEsIDB4OGQsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGI0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OGQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZCwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OGQsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZCwgMHg0NSwgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OGQsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGQsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgxZCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk4LCAweDAwLCAweDQ4LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDIzLCAweDQxLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKKwkweGU2LCAweDZkLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweGJlLCAweDA2LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE1LCAweDhjLCAweGEyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGRiLCAweDhkLCAweDIyLCAweDQ3LAorCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNSwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDVkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsCisJMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4ZCwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDksIDB4OGUsIDB4MjIsIDB4NDcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4ZSwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDIzLCAweDQxLAorCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5OCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhlLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OGUsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4ZSwgMHgyMCwgMHg0YywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAorCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCisJMHg5NiwgMHhjYywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ2LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NywgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDQ2LCAweDhlLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGUsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhlLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAorCTB4NjYsIDB4OGUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDhlLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZSwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAorCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4ZSwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YywgMHg4ZSwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkzLCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDhlLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTksIDB4OGUsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZSwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGEwLCAweDhlLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFmLCAweDhlLCAweGE4LCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4ZSwgMHhhMCwgMHg0MywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg4YywgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsCisJMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTMsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg4ZSwgMHg0MiwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzgsIDB4OGMsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGU3LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVhLCAweDhlLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGQsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDhlLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OGUsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg4ZSwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk2LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhmLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGYsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHg4ZiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4OGYsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OGYsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OGYsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYxLCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZiwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg0LCAweDhmLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDhmLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OGYsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDhmLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4ZiwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDIyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4OTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMSwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGYsIDB4MjMsIDB4MGIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhiZSwgMHg4ZiwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweGU0LCAweGNkLCAweDAxLCAweDAwLAorCTB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGYsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OGYsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQzLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKKwkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFmLCAweDkwLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFhLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDkwLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2EsIDB4OTAsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDQzLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YiwgMHg5MCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTAsIDB4MjIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDkwLCAweGEyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCisJMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NmQsIDB4OTAsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZTYsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MCwgMHhhOCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjIsIDB4OTAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGIyLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGJhLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDUxLCAweDkxLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg5MCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MCwgMHhhMiwgMHgxNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMiwgMHg5MCwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDkwLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg5MCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGRjLCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDc1LCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHhhOCwgMHg0MCwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OTAsIDB4NjUsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGQsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTAsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHgzMSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGQsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTksIDB4OTEsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTEsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgzMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAorCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5MSwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDksIDB4OTEsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDkxLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywKKwkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTEsIDB4ODQsIDB4NDgsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLAorCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MSwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDgzLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGE4LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MSwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjcsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTEsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YmQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywKKwkweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MjAsIDB4MTYsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ5LCAweDkxLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4ODQsIDB4NDUsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmMCwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDkyLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTIsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxYiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg5MiwgMHgyMywgMHgwZCwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDkyLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MiwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5MiwgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDkyLCAweGEyLCAweGYzLAorCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDMxLCAweDkyLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKKwkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDNiLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDkyLCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MiwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgyZCwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTIsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDkyLCAweDIyLCAweDQwLCAweDFiLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTIsIDB4YTgsIDB4MTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDkyLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDdlLCAweDkyLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MiwgMHgyMiwgMHg0MCwKKwkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDkyLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MiwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTQsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDkyLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTIsIDB4MjcsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDAwLCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQzLCAweDkyLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGM1LCAweDkyLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzUsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTIsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBiLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDkzLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDFmLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDkzLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzksIDB4OTMsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRhLCAweDkzLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGYsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcyLCAweDkzLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg3NywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAorCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MywgMHg4NSwgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsCisJMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4YTUsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGYwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGEzLCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5MywgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQ3LAorCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OTMsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YTIsIDB4NGMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYSwgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDkzLCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MywgMHgyMiwgMHhmMCwKKwkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDk0LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI5LCAweDkzLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MywgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDkzLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDIzLCAweGYwLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5MywgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MGUsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTMsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDk0LCAweDFmLCAweDEyLAorCTB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY3LCAweDkzLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTMsIDB4MjIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MywgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGU2LCAweDkzLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDkzLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MywgMHgyMiwgMHgwYSwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZDksIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRjLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweGUzLCAweDkzLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTMsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTMsIDB4MjIsIDB4NDMsCisJMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHhhMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZkLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDkzLCAweDIwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDksIDB4OTQsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4OTQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDExLCAweDk0LCAweDAwLCAweDRjLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDMwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGEsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDk0LCAweGEyLCAweGYzLAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTQsIDB4MjIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5NCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsCisJMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzYiwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHg5NCwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCisJMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4OTQsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTQsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwgMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODUsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDE1LCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTQsIDB4NjAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhjMiwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OTQsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsCisJMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg1ZiwKKwkweDhiLCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NzksIDB4OTQsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5NCwgMHgwYiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4OTQsIDB4MjIsIDB4NTAsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDEwLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NCwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk0LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDk0LCAweGE4LCAweDA1LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDk0LCAweDAwLCAweDQyLCAweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKKwkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDk0LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTQsIDB4MjgsIDB4YjEsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NCwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NCwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywKKwkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsCisJMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLAorCTB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5NCwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweDRjLCAweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5NCwgMHhhOCwgMHhiMSwgMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDQ5LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKKwkweGVhLCAweDk0LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAorCTB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5NCwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDk5LCAweDAwLCAweDBkLCAweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTUsIDB4MzAsIDB4NDcsIDB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MWUsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDFmLCAweDk1LCAweDQwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHg5NSwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweDAwLCAweDNiLAorCTB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDJmLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwKKwkweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgyMiwgMHg0NSwKKwkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTUsIDB4MzEsIDB4NWYsCisJMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDQ0LCAweDdmLCAweDAwLCAweDAwLAorCTB4NWMsIDB4OTUsIDB4MTgsIDB4NGEsIDB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRiLAorCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwKKwkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDJmLCAweDdlLCAweGQ5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDZhLCAweDk1LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDRlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDcsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NSwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDk1LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCisJMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0YSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLCAweGU2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5NSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDk1LCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDNhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NSwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyNiwgMHg0NiwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGMsCisJMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk1LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGRlLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjIsIDB4NDAsCisJMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQxLAorCTB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTUsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NiwgMHhhMiwgMHhhNSwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDk2LCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAorCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODIsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4OWYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsCisJMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweGE1LCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAorCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDk5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDk5LCAweDgwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIxLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NiwgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5NiwgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDYwLCAweDk2LCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OTYsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKKwkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NiwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDk1LAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5NiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk2LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwKKwkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDk2LCAweDYzLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDk3LCAweGYwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjcsIDB4OTYsIDB4MjIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OTYsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OTYsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMyLCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTYsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg5NiwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk2LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDk2LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweGY3LCAweDk2LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NiwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZGEsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDJmLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NiwgMHgyMCwgMHgxNSwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg5NiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NiwgMHgwMCwgMHgwMiwKKwkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NywgMHgwMCwgMHg0MSwKKwkweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDM2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxNCwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhjNCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjEsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk3LCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTcsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHg5NywgMHhhMiwgMHgwNiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5NywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI2LCAweDk3LCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDQ4LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDJmLCAweDk3LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzksIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwKKwkweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLAorCTB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDVkLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsCisJMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk3LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDc4LCAweDk3LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLAorCTB4NzgsIDB4OTcsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MjAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhmLCAweDk3LCAweDIyLCAweDVmLCAweDgxLCAweDdjLCAweDAwLCAweDAwLCAweDhjLCAweDk3LCAweGEyLCAweDQwLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk3LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTcsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg5NywgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDk3LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDAyLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGE1LCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTcsIDB4MjAsIDB4NGMsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk3LCAweDIwLCAweGYyLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGI2LCAweDk3LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MzAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKKwkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTcsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwNSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDhhLCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGQ5LCAweDk3LCAweDljLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHgxNCwKKwkweDgyLCAweDUwLCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGUsIDB4OTcsIDB4MjIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTcsIDB4MjMsIDB4ZjAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTcsIDB4MjMsIDB4OTIsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5NywgMHg2OCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGJkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NywgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGY3LCAweDk3LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHg5NywgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk3LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5OCwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQxLCAweDI0LCAweGVjLCAweDAwLCAweDAwLAorCTB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsCisJMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwgMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDBmLCAweDk4LCAweGEzLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCisJMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MiwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk4LCAweDlmLCAweDQxLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwKKwkweDNlLCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDEyLCAweGUwLCAweGVkLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDk4LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0YywgMHg5OCwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5OCwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDk4LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTgsIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDk4LCAweDFmLCAweDQ0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5OCwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTgsIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTAsIDB4ZjIsCisJMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLAorCTB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OTgsIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OTgsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5OCwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDk4LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTgsIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHgyMiwgMHg0MCwKKwkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4YTAsIDB4NDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCisJMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5OCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDk4LCAweDI4LCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTgsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgxZCwgMHg0NiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDk4LCAweDk4LCAweDIyLCAweDVmLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDk4LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTIsIDB4OTgsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDJlLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg5OCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDk4LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDk4LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwKKwkweDU3LCAweGI1LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsCisJMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LAorCTB4MjEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5OSwgMHg2YSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDk5LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweDExLCAweDk5LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5OSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDk5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzhjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2Rvd25sb2FkLmgKQEAgLTAsMCArMSw2ODQ4IEBACisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgorI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCisKK3N0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOworc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKKwkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAorfTsKKworc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDJmLCAweDgxLCAweDAxLCAweDAwLCAweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhhMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA0LCAweDgwLCAweDk0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4OTksIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweDAwLCAweDIwLCAweDQyLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsCisJMHhkYiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDgwLCAweGE4LCAweGIxLAorCTB4OGMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4MCwgMHgxNCwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGM2LCAweDgzLCAweGY0LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MjIsIDB4NGYsIDB4ODMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzIsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDk3LCAweGEzLCAweDAxLCAweDAwLCAweGMyLCAweDgwLCAweDFmLCAweDVjLAorCTB4OTcsIDB4NTMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODIsIDB4MWUsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywgMHg4MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHg2MywgMHhiMywgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0OCwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUzLCAweDgxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NzEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAorCTB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg3ZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4ODgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDgxLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDc3LCAweGIzLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODEsIDB4MjIsIDB4NDIsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MSwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgxZSwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgxLCAweDFmLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDIsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJmLCAweDliLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsCisJMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwKKwkweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDYwLCAweDQwLAorCTB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDViLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDEsIDB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MSwKKwkweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDYzLCAweDgxLCAweGEyLCAweDQyLCAweDY3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGNhLAorCTB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg2ZiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDg1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM1LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDc3LCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDdhLCAweDgxLCAweDIyLCAweDViLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmZCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweDliLCAweDAxLCAweDAwLCAweDBkLCAweDAxLCAweDAwLCAweGNhLCAweGM1LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg2ZiwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YzcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjYiwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQyLAorCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA5LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweGE2LCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDgxLCAweDlmLCAweDg1LAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODMsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg4MSwgMHgyMiwgMHgzMCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MiwgMHg4MSwgMHhhMiwgMHg0ZiwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YTgsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGE1LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YWQsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGJiLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODEsIDB4MjIsIDB4NDMsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGMwLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKKwkweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg4MywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGU0LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMywgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MiwgMHgyMiwgMHg0NCwKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NGEsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4MjIsIDB4NGYsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg4MSwgMHgyMiwgMHg0ZSwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmQsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAxLCAweDgyLCAweDIyLCAweDQzLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDgyLCAweDIyLCAweDRiLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODIsIDB4OWYsIDB4ODUsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MiwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDgyLCAweGEyLCAweDQ5LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODIsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MiwgMHhhMiwgMHg0YSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDIwLCAweDgyLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgyLCAweDQyLCAweDQwLCAweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDQwLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhiYiwgMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDJiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDNjLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NDIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTcsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4MiwgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDZlLCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3NiwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDY4LCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDczLCAweDgyLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzksIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDkxLCAweDgyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4MiwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDgyLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg5LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4MiwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4OTIsIDB4ODIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MiwgMHhhMCwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDgyLCAweDAwLCAweDUwLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4ODIsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg4MiwgMHgzMywgMHhjNCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MiwgMHhhMSwgMHhhZCwKKwkweDlkLCAweDIwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHhhYiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDgyLCAweGEyLCAweDQwLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDgyLCAweDIyLCAweDVmLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZSwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDgyLCAweDIyLCAweDU0LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4NCwgMHhhMiwgMHg1ZiwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNhLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDgyLCAweGEyLCAweDVmLAorCTB4NTksIDB4MjcsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODIsIDB4YTIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHg4MiwgMHhhMiwgMHg1ZSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MiwgMHgyMiwgMHg1YywKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGRiLCAweDgyLCAweDM3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2EsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg4MiwgMHgzNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDgyLCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4ODIsIDB4NTIsIDB4MjEsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDEsCisJMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDExLCAweDgzLCAweDAwLCAweDM0LAorCTB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRiLCAweDgyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDgyLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODIsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MCwKKwkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDIyLCAweDQ0LCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZTUsIDB4ODIsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODIsIDB4YTIsIDB4NDAsCisJMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgxYSwgMHg0MCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDgwLCAweGEyLCAweDQwLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODcsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NywgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhhMiwgMHg1YiwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksCisJMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgzMywgMHg0MCwgMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGZkLCAweDgyLCAweGEwLCAweGNlLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODMsIDB4YTAsIDB4Y2QsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDgzLCAweDIyLCAweGI1LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4MmYsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODMsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhiNCwgMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE1LCAweDJlLCAweDQwLCAweDY5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LAorCTB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MywgMHhhOCwgMHhhMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDgyLCAweDAwLCAweDg4LCAweDllLCAweGIzLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweGEyLCAweDQxLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDgzLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweDA5LCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODMsIDB4YTYsIDB4NDIsCisJMHgxMywgMHg2MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDgzLCAweDYxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTYsIDB4ODMsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHg3MSwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MywgMHgwMCwgMHg1OCwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIzLCAweDRiLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDI1LCAweDgzLCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4ODUsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDgzLCAweDIyLCAweDU1LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDMsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4MywgMHgwMCwgMHg0YiwKKwkweDQ0LCAweGMxLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDI4LCAweGYwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgyOCwgMHgzYywgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDM5LCAweDgzLCAweGEyLCAweGY4LCAweDBlLCAweDMwLCAweDAwLCAweDAwLAorCTB4NDksIDB4ODMsIDB4MjIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgzLCAweGEyLCAweGY4LCAweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGY4LAorCTB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODMsIDB4YTIsIDB4ZjAsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4MywgMHgyMiwgMHg1OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDIsIDB4ODMsIDB4YTIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhlNiwgMHg5NSwgMHgwMSwgMHgwMCwgMHg0NywgMHg4MywgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDc1LCAweGYzLAorCTB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ3LCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MjIsIDB4NTgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg4MywgMHg3NywgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4ODMsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODMsIDB4MjIsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDgzLCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4MywgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDY1LCAweDgzLCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjIsIDB4ODMsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRiLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDUwLAorCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzksIDB4ODMsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDJlLCAweDQ3LAorCTB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4MywgMHgyMywgMHhhMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MDAsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHg4MywgMHgwMCwgMHg1YywKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MywgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDk3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4NzIsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDgzLCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDAwLCAweGYyLAorCTB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDIyLCAweDRhLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4ODMsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg4MywgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4NCwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODMsIDB4NjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc5LCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLCAweGIyLCAweDgzLCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MywgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg4MywgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MywgMHgyMiwgMHg1YywgMHgxNywgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDgzLCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg4MywgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ5LCAweDgzLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NGMsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODMsIDB4YTgsIDB4NTQsCisJMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgyOCwgMHg1NCwKKwkweDE3LCAweDEwLCAweDAwLCAweDAwLCAweGQ1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODMsIDB4MjIsIDB4NTAsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGRlLCAweDgzLCAweGEyLCAweDQxLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRmLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4MywgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MCwgMHg5MSwgMHgwMCwgMHgwMSwKKwkweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODMsIDB4YTIsIDB4NGIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODMsIDB4MzUsIDB4MDEsIDB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHgyOCwgMHhiMSwKKwkweDMwLCAweDMwLCAweDAwLCAweDAwLCAweGYwLCAweDgzLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHg4MywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDgzLCAweGE4LCAweGIxLAorCTB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODMsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHhhMywgMHgwYiwKKwkweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDg0LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4NCwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQzLAorCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODQsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDVhLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDg0LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MjIsIDB4MWIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM5LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg0LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg2NywgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NCwgMHhhMywgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDg0LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCisJMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4ODQsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdhLCAweDg0LCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDkzLCAweDg0LCAweDIyLCAweDQyLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODQsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YSwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODQsIDB4MjIsIDB4M2EsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhNywgMHg4NCwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHg4NCwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRjLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODQsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5MSwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODQsIDB4NjQsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NCwgMHhhOCwgMHgxYiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDc0LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NCwgMHgwMSwgMHhmYiwgMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDg1LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGRhLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweGQyLCAweDg0LCAweGE2LCAweDVmLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NCwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGRmLCAweDg0LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NCwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweGU3LCAweDg0LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg4NCwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsCisJMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDg0LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDUzLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NCwgMHhhMiwgMHgwYSwKKwkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDVkLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4NCwgMHhhMCwgMHg5MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NSwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMCwgMHg0MiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU0LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDEzLCAweDg1LCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4ODUsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YTIsIDB4NTQsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NSwgMHgyMiwgMHg1NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODUsIDB4MjIsIDB4NTMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg1LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDk2LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODUsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNCwgMHg4NSwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4NSwgMHgxZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLCAweDMxLCAweGMzLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODUsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLCAweGUwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLCAweDNkLCAweDg1LCAweDIyLCAweDQwLAorCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4NSwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODUsIDB4NjYsIDB4MWIsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc2LCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLCAweDcwLCAweDg1LCAweDIzLCAweDkyLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODUsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg4NSwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4NSwgMHgyMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDEyLAorCTB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODUsIDB4YWEsIDB4NDEsIDB4MjcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NSwgMHgyNiwgMHg0MCwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg1LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDYzLCAweDg1LCAweDAwLCAweDQxLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDVjLCAweDg1LCAweGEyLCAweDQ0LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4YTgsIDB4NDIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4NTUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY3LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4N2QsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHg4NSwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTUsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDg1LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4OTEsIDB4ODUsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg1LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODUsIDB4YTMsIDB4MDcsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4NSwgMHhhMywgMHg0MCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4OGIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZSwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDg2LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLCAweGEyLCAweDg1LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGEyLCAweDg1LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGMwLCAweDA2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTQsCisJMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDA1LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg4NSwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODUsIDB4YTMsIDB4MDcsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiOSwgMHg4NSwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODUsIDB4MjIsIDB4NDAsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODUsIDB4MjIsIDB4NDIsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjMiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAorCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweGQxLCAweDg1LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4ODUsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZSwgMHg4NSwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGUyLCAweDg1LCAweDAwLCAweDBkLAorCTB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTQsIDB4ODUsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU1LCAweDg1LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NiwgMHgyMiwgMHgwZCwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDA2LCAweDg2LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODUsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDg1LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDg1LCAweDFmLCAweGYwLAorCTB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4NiwgMHhhOCwgMHg0NiwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODUsIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsCisJMHgwYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDdmLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg2LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4NDMsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODYsIDB4YTAsIDB4NDYsCisJMHgwZiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDg2LCAweDIyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGYsIDB4YTIsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4NiwgMHhhMCwgMHg0MSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDg2LCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDMsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NiwgMHgyMCwgMHg0NSwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYSwgMHg4NiwgMHhhMCwgMHg0MSwKKwkweDBlLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODYsIDB4YTIsIDB4NDEsCisJMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ4LAorCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzEsIDB4ODYsIDB4OTAsIDB4NDgsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDkzLCAweGE0LCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGNkLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ0LCAweDg2LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDg2LCAweGEwLCAweDA3LAorCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDg2LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDYzLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDg2LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODYsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDg2LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDgxLCAweDg2LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg2LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGI1LCAweDg2LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4ODYsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDg2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDg2LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MywgMHg4NiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDg2LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OWUsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4NiwgMHgxZiwgMHhmMCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MjMsIDB4MDcsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4YTgsIDB4NDYsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg2LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGM1LCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGQyLCAweDg2LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ODYsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGMsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTIsIDB4NWYsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg4NiwgMHgyMiwgMHg0OCwgMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4ODYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODYsIDB4MjMsIDB4NDEsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQ4LCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NiwgMHgyMiwgMHgwYSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODYsIDB4MjIsIDB4ZjAsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYzLCAweDgyLCAweGUwLCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEzLCAweDQxLAorCTB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MjAsIDB4NGMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsCisJMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg4NywgMHgwMCwgMHg0OSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDg3LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MTMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDA1LCAweDg3LCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4MiwgMHgyMiwgMHg0MCwKKwkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MGIsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MiwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDExLCAweDg3LCAweDIyLCAweDQwLAorCTB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NywgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg4MCwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MiwgMHgyMiwgMHgwMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFjLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MWEsIDB4MDIsCisJMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyNiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzksIDB4OTIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODcsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDM5LCAweDkyLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDMxLCAweDg3LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDU2LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDJmLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ODIsIDB4ODcsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjksIDB4NDEsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NywgMHg2MCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDRlLCAweDg3LCAweDA1LCAweGMyLCAweDI0LCAweDMwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHg3MCwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4YTAsIDB4NDgsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4NywgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwKKwkweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MWEsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4NywgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODcsIDB4MjIsIDB4NDEsCisJMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDg3LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDE3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODcsIDB4ODMsIDB4NDEsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIzLCAweDQwLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzcsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LAorCTB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NywgMHhhMCwgMHhhYSwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjYsIDB4NTQsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4NywgMHg4NywgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDhiLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4ODcsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4NywgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBkLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsCisJMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5NCwgMHgyZiwgMHg1NSwKKwkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4YTIsIDB4NDEsIDB4ZTUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NywgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg3LCAweGEyLCAweDkzLCAweDU3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NTcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWIsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY5LCAweDgyLCAweGEyLCAweDQxLCAweDFkLCAweDUzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGFjLCAweDg3LCAweDIyLCAweDQwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHhiNSwgMHg1MywgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNiwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgyLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAorCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDg3LCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGU2LCAweDhhLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhiLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjEsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4YywgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDhkLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGMsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDcsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGQsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk0LCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdmLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4OCwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZCwgMHgwMCwgMHg0OSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFkLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZhLCAweDkwLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGYsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4NywgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhhLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgxZiwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGYsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGRmLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkYywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGEzLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHgwNiwgMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGIsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDhiLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4YiwgMHg0NCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDhiLCAweGEyLCAweDRjLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGIsIDB4MDAsIDB4NGMsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGIsIDB4MjAsIDB4ZjAsCisJMHg1NiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg1NiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OGIsIDB4YTgsIDB4NDQsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGIsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGIsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4YiwgMHgyMiwgMHg0NCwKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDhiLCAweDIzLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4OGIsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDg2LCAweDAwLCAweDJmLCAweDQ5LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDUzLCAweDhiLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4YiwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NWEsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MmYsIDB4NDYsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4YiwgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDhiLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDhiLCAweDIyLCAweDBhLAorCTB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhiLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHg4YiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKKwkweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4YiwgMHhhMCwgMHg0MywKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYywgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ODEsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4YiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDUxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDhkLCAweDhiLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDkyLCAweDhiLCAweDIyLCAweDQ1LAorCTB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGIsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDBhLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJhLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4YiwgMHgyMywgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGIsIDB4YTIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkzLCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhiLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDYwLCAweDAwLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4ODUsIDB4MTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4YiwgMHgwMCwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDU3LCAweDkzLCAweDAwLCAweDQwLAorCTB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweGYwLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2OCwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHg0MCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDhiLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlYywgMHg4YiwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGU5LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGY0LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OGIsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDhiLCAweDIwLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4YiwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4YiwgMHgwMCwgMHgwNiwKKwkweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4YiwgMHhhOCwgMHgxMywgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMywgMHg4YywgMHgyMiwgMHgwMiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDJkLCAweDAyLCAweDBjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MjMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJmLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDI0LCAweDhjLCAweDIyLCAweDAxLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OGMsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE2LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg4YywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4YywgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OGMsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4YywgMHhhMiwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDhmLCAweDBkLCAweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4YiwgMHgwMCwgMHhhMSwKKwkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZTIsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MzYsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAwLCAweDIwLCAweDAxLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGMsIDB4MDAsIDB4NWYsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDM3LCAweDhjLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNlLCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQyLCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NGEsIDB4OGMsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRlLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NTUsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4YywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDUyLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHhmOCwKKwkweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDhjLCAweGEyLCAweDQxLCAweDNiLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OGMsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MWUsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGMsIDB4MjIsIDB4NWYsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4YywgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZmLCAweDhjLCAweDg1LCAweGNhLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTUsIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDhjLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGMsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4YywgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MWQsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YTIsIDB4OGMsIDB4YTIsIDB4NDEsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgyMywgMHg0MSwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJmLCAweDg3LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4YiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGIwLCAweDhjLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDkzLCAweDhiLCAweDAwLCAweDQ4LAorCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4YywgMHhhMiwgMHg1MCwKKwkweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDIyLCAweDQ3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGMsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDhjLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4YywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGMsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhjLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OGMsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4YywgMHhhMywgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhjLCAweDIwLCAweDRjLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLAorCTB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDRhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDcsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4OGQsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHg4ZCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4OGQsIDB4MzcsIDB4NWMsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDhkLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4ZCwgMHhhMCwgMHgxNCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDQ4LCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDZlLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4ZCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDhkLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKKwkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTksIDB4OGQsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHg4ZCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDYwLCAweDhkLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4ZCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZmLCAweDhkLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDhkLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweGI0LCAweDhiLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGQsIDB4YTAsIDB4NDMsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkxLCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OGQsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDljLCAweDhkLCAweGEwLCAweDQzLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhkLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MSwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEyLCAweDhkLCAweDQyLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4OWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDhjLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg4ZCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGIyLCAweDhkLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODIsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGQsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGJiLCAweDhkLCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGQsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGRiLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUzLCAweDhkLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTksIDB4OGQsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDhlLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBlLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhlLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDhlLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4ZSwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGUsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDhlLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKKwkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDRhLCAweDhlLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YiwgMHg4ZSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4ZSwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4ZSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDczLCAweDhlLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDhlLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4ZSwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4YTAsIDB4OGUsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDhlLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDljLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OGUsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE5LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYywgMHg4ZSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGI2LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OGUsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGJjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OGUsIDB4MDMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhlLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4YTIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZhLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg4ZSwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDhlLCAweGE4LCAweDAwLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0OCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhmLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDg3LCAweDQyLAorCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OGYsIDB4MjIsIDB4MDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg4ZiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwKKwkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDMxLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDhmLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDhmLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGYsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NSwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDY0LCAweDhmLCAweDY1LCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZjLCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDZlLCAweDhmLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhmLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGUsIDB4OGYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk4LCAweDhmLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4OTYsIDB4OGYsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDhmLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OGYsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDk0LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGYsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzksIDB4OTQsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4ZiwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlOCwgMHg4ZiwgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OGYsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDkwLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgxNiwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MCwgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4OTAsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MCwgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkwLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDNlLCAweDkwLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ2LCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTAsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRkLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5MCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDY3LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzEsIDB4OTAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDg2LCAweDkwLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTAsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3YiwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4OSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTYsIDB4OTAsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg5MCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5MCwgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhlLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDkwLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTAsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI1LCAweDkwLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MCwgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGMwLCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGNjLCAweDkwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDkwLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg5MCwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNywgMHg5MCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGU5LCAweDkwLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweGVmLCAweDkwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDdkLCAweDk1LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGYyLCAweDkwLCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTEsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5MywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5MCwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4OTEsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTksIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzEsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTEsIDB4OTEsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDkxLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDYzLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MywgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDkxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDJkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzNywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAxLAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MSwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0OCwKKwkweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDk4LCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCisJMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0NywKKwkweDE5LCAweDEwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDJkLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDkxLCAweGEyLCAweDRiLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE4LCAweDkyLCAweGEyLCAweDRjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHg5MSwgMHhhMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTEsIDB4MjIsIDB4ZjAsCisJMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgxZiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRmLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxNiwgMHg5MiwgMHgyMCwgMHg0MiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDViLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MSwgMHgyMywgMHhmMCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGQyLCAweDkxLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTcsIDB4OTIsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTIsIDB4YTIsIDB4NDEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUxLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUyLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTIsIDB4MWYsIDB4MTIsIDB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5MiwgMHhhMCwgMHgwMSwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNSwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTIsIDB4YTIsIDB4NDYsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MSwgMHgyMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRlLCAweDkxLCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkxLCAweDAzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDkxLCAweDIyLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGU1LCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgyLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4OTEsIDB4MjAsIDB4OTEsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweGVlLCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY4LCAweDkxLCAweGEyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweGEyLCAweGYyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4YTAsIDB4OTEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5MiwgMHhhMiwgMHhmMCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4OTIsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY2LCAweDkxLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHg5MiwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTIsIDB4MjIsIDB4MGEsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDExLCAweDkyLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWEsIDB4OTIsIDB4MDAsIDB4NDMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDEsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0MiwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDkyLCAweDAwLCAweDQ0LCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDRjLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJhLCAweDQxLAorCTB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg5MiwgMHgyMiwgMHg1YSwKKwkweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTIsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweGE1LCAweDg1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkyLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTIsIDB4YTIsIDB4NGIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MiwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDBmLAorCTB4NWUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDRhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg0ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg1ZCwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDUzLCAweDkyLCAweDYwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YzIsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhMiwgMHg0NSwgMHgyNSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkyLCAweDMxLCAweDIwLCAweDg1LCAweDMwLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDIyLCAweDEyLAorCTB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDQsIDB4MTEsIDB4MTIsIDB4NDgsIDB4MDMsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OTIsIDB4MGIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHgyMiwgMHg1MCwKKwkweDg1LCAweDcwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MTAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNywgMHgzZiwgMHg0MywgMHgxMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDhhLCAweDg4LCAweDAxLCAweDAwLCAweDZlLCAweDkyLCAweDMwLCAweGExLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OTIsIDB4MjIsIDB4NDUsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0NSwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYSwgMHg5NCwgMHgwMCwgMHhmMiwKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4YTgsIDB4MDUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg5MiwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDZhLCAweGIxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4NDIsCisJMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg5MiwgMHgzNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweDI4LCAweGIxLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4OTIsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweGE4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MiwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsIDB4MTEsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5MiwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDkyLCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MiwgMHg0OCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4OTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OTIsIDB4MjIsIDB4NGMsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE4LCAweDkyLCAweGE4LCAweGIxLAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4NDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjIsIDB4MWEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGIxLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTIsIDB4MjIsIDB4MGQsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxYSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGJhLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTIsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDJkLCAweDAxLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDE3LCAweDNkLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4YTEsIDB4MTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5MiwgMHgzMCwgMHg0NywKKwkweDE3LCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5MiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGViLCAweDkyLCAweGEyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5MiwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY1LCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTIsIDB4YTIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIxLCAweGEyLCAweDk1LCAweDIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NGEsIDB4NDQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2UsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDkyLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDkzLCAweDQwLCAweDA4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTMsIDB4MjIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHg5MywgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDkzLCAweDMxLCAweDVmLCAweDk3LCAweDA0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4NGIsIDB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5MywgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTMsIDB4YTIsIDB4M2IsCisJMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDkzLCAweDE4LCAweDRhLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5MywgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDBmLCAweDk4LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHhhNywgMHg1ZSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDkzLCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDUsCisJMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDliLCAweDA0LCAweDAwLCAweDRhLCAweDQ0LCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNmLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDkzLCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDVhLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhlNiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDRjLCAweDAyLCAweGQwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTMsIDB4YWEsIDB4NDEsIDB4M2IsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDFkLCAweDA0LCAweGNjLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTMsIDB4MjYsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDdhLCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDc5LCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweGEyLCAweDQxLAorCTB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDcyLCAweDkzLCAweGE4LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDY3LCAweDkzLCAweDAwLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHgxYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdiLCAweDkzLCAweDIyLCAweDQwLCAweDNiLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NWMsCisJMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgwMCwgMHg0MSwgMHgzYiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDhkLCAweDQ3LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDVmLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTUsIDB4OTMsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTMsIDB4YTIsIDB4YTUsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDkzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTMsIDB4OTMsIDB4YTAsIDB4YTUsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkzLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorCTB4OTgsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHg4MCwgMHgwMCwKKwkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweGNiLCAweDkzLCAweDlmLCAweDQxLAorCTB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHhhMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkzLCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTMsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg5MywgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5MywgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5MywgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDkzLCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDkzLCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4OTMsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA2LCAweDE0LCAweGVjLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDIyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MmEsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk0LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NCwgMHg2MywgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk0LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMzLCAweDk0LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDQzLCAweDk0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MywgMHg5NCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4OTQsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTQsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDk0LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NCwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5NCwgMHhhMiwgMHgwMiwKKwkweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDcyLCAweDk0LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NGUsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU2LCAweDk0LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5NCwgMHgyMiwgMHgxNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDcxLCAweDk0LCAweGEyLCAweDAyLAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4OTQsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MjAsIDB4MTUsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZlLCAweDk0LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDdiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQxLCAweGEzLCAweDQxLCAweDAxLCAweDAwLAorCTB4N2YsIDB4OTQsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTQsIDB4YTAsIDB4ZjAsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLAorCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE0LCAweDk0LCAweGEyLCAweDA2LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTQsIDB4MjIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5YywgMHg5NCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDk0LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4OTQsIDB4YTAsIDB4NDgsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTQsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsIDB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsCisJMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NSwgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5NCwgMHhhMCwgMHhmMCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsCisJMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGRlLCAweDk0LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk0LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHg0MywgMHgzMCwKKwkweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweGVjLCAweDk0LCAweDI2LCAweDMwLAorCTB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTQsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwKKwkweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5NCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZCwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZkLCAweDk0LCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NSwgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTUsIDB4MjAsIDB4ZjIsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4MWQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGYzLAorCTB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsIDB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg5NSwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDgyLCAweGVjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJhLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4MWMsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsCisJMHg4YSwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4YiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg5NSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDE0LCAweDgyLCAweDUwLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4OTUsIDB4MjIsIDB4ZjIsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDk1LCAweDlmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NSwgMHgyMywgMHg5MiwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweGM5LCAweDA0LCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4OSwgMHgwMCwgMHg0YSwgMHg5NCwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHg2OCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDk1LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk1LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5NSwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsIDB4MzgsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk1LCAweGEzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg5NSwgMHgyMiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAorCTB4NmUsIDB4OTUsIDB4MjMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweGEwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NSwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTUsIDB4MDAsIDB4NDEsCisJMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDJmLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwgMHgzZSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwKKwkweGUwLCAweGVkLCAweDAwLCAweDAwLCAweGM4LCAweDAwLCAweDIwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTUsIDB4YTMsIDB4NWYsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDIyLCAweGYyLAorCTB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4OTUsIDB4MWYsIDB4NDMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDlmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ0LCAweDg0LCAweGY0LCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmUsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5NSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGExLCAweDk1LCAweGEyLCAweDQwLCAweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk1LCAweDYyLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg4LCAweGU0LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsCisJMHg4NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk1LCAweDIwLCAweDQzLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHg0MywgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDAwLCAweDJkLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDk1LCAweGEyLCAweDEyLAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NSwgMHhhMCwgMHhmMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MmQsIDB4MTIsIDB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTUsIDB4YTMsIDB4NDEsCisJMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg5NSwgMHhhMywgMHg0MiwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGJlLCAweDk1LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTUsIDB4YTAsIDB4MTcsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDk1LCAweDIyLCAweDQwLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLAorCTB4MGMsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHg5NSwgMHhhMCwgMHg0MSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLAorCTB4ODcsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLCAweGQxLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGQ3LCAweDk1LCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDdlLCAweDk0LCAweDFkLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MmYsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMiwgMHg5NSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDk2LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsCisJMHgwNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGQwLCAweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTUsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTUsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDNiLCAweDk2LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGM4LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg5NSwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NiwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsCisJMHgzYywgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDUzLCAweGIzLCAweDAxLCAweDAwLCAweDJiLCAweDk2LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MmIsIDB4OTYsIDB4YTIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHgxZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LAorCTB4M2EsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHgwNSwgMHgwMCwgMHg0MCwgMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDRkLCAweGIzLCAweDAxLCAweDAwLCAweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LCAweDIxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc3JjdnVjb2RlLmgKQEAgLTAsMCArMSwyMDUgQEAKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTA6MjgiCisKK3N0YXRpYyB1MzIgT2FzaXNSY3ZVQ29kZUxlbiA9IDUxMjsKKworc3RhdGljIHU4IE9hc2lzUmN2VUNvZGVbMjU2MF0gPQoreworMHg0NywgMHg3NSwgMHgwMSwgMHgwMCwgMHgwNCwgMHhhMCwgMHgxMywgMHgwMSwgMHgwMCwgMHgxYywgMHhiNywgMHg1YiwgMHgwOSwKKzB4MzAsIDB4MDAsIDB4YjYsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4M2IsCisweDc4LCAweDNhLCAweDAwLCAweDFjLCAweGEyLCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDcwLAorMHgxOCwgMHhhZCwgMHg3YiwgMHhmMSwgMHhmZiwgMHgxYywgMHhiMywgMHg3YiwgMHhhOSwgMHhhYSwgMHgxZSwgMHhiNCwgMHg3YiwKKzB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsIDB4MGQsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4NjQsIDB4MDgsCisweDBjLCAweDMxLCAweDVhLCAweDcwLCAweDA0LCAweDBjLCAweDMxLCAweDVhLCAweDgwLCAweDA0LCAweDBjLCAweDMxLCAweDRlLAorMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHhhMCwgMHgwMCwgMHgwOSwgMHgyNSwgMHg1NSwgMHhjMCwgMHgwNCwgMHgwYywKKzB4MzEsIDB4NTIsIDB4YjAsIDB4MDAsIDB4ZTksIDB4MjQsIDB4NTUsIDB4YzAsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4MDAsIDB4MWMsCisweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDA2LCAweDU2LCAweDMyLCAweGQ0LCAweDA4LCAweDA3LCAweDlkLAorMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKKzB4MDYsIDB4NTYsIDB4NWUsIDB4YzAsIDB4MDQsIDB4YTAsIDB4MzAsIDB4NTQsIDB4MDMsIDB4MDAsIDB4YWMsIDB4MzAsIDB4NTUsCisweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweDYwLAorMHg4ZSwgMHgzMSwgMHg1NCwgMHgwOSwgMHgyOSwgMHgyNSwgMHg1NSwgMHgwMywgMHgwMCwgMHg4MCwgMHg4ZSwgMHgzMSwgMHg1NCwKKzB4MDksIDB4OGMsIDB4MzAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsCisweDMxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDY1LCAweGMwLCAweDA0LAorMHg0NywgMHgxYywgMHg1NSwgMHgwMywgMHgwMCwgMHg2YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg0ZCwgMHgzNCwgMHgwMiwKKzB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzgsCisweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDY0LCAweDAwLAorMHgwNCwgMHhhMCwgMHgwZiwgMHgzMCwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHg3YiwgMHhmYiwKKzB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDAsIDB4MWMsIDB4YjQsIDB4N2IsIDB4ZmQsIDB4MDMsIDB4MWMsCisweDgwLCAweDBlLCAweDMwLCAweDU0LCAweDA5LCAweGUwLCAweGZiLCAweDA1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDhjLAorMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhlYywgMHg3MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4ZWMsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTMsIDB4MDAsIDB4NjEsIDB4NzYsIDB4OGQsIDB4YzMsCisweDA0LCAweGMwLCAweDhkLCAweDMxLCAweDU0LCAweDA5LCAweGUwLCAweDdiLCAweDAwLCAweGMwLCAweDFmLCAweGEwLCAweGZkLAorMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywgMHgwNSwgMHgwMCwgMHgxYywgMHhkNCwgMHgwMywgMHgwMCwgMHgzYywgMHgxYywKKzB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NWMsCisweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDMyLCAweDU0LCAweDA5LCAweDViLCAweDgwLCAweDVlLCAweDEzLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4N2YsIDB4MWMsIDB4YTAsIDB4MDEsCisweGEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywgMHhmNSwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHhlNiwKKzB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjUsCisweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDdhLCAweDdlLCAweDAyLCAweDAwLAorMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsCisweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDNkLCAweGFhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHhiNSwgMHgzZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwKKzB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsIDB4MmMsIDB4NmMsIDB4MDMsIDB4MDAsIDB4YjksIDB4M2EsIDB4OWUsIDB4MDEsCisweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLCAweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGRiLCAweDgzLAorMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgyMSwgMHhjMSwgMHgwNCwgMHhiOSwgMHgzYiwgMHg4ZCwgMHhjMSwgMHgwNCwKKzB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmIsIDB4MmMsIDB4MzUsIDB4YzEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsCisweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc5LCAweGMxLCAweDA0LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLAorMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg1NCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgxYywgMHg0OSwgMHgyNSwgMHhiMSwgMHgwMSwKKzB4MDAsIDB4YWIsIDB4MmMsIDB4ODEsIDB4YzEsIDB4MDQsIDB4YTcsIDB4MWQsIDB4NTUsIDB4MDMsIDB4MDAsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLAorMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhZSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4OTksIDB4M2EsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YmIsCisweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZjLCAweDAxLAorMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwKKzB4ZmEsIDB4MDUsIDB4MWMsIDB4MjcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLAorMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywKKzB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsCisweDFjLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLAorMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwKKzB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsCisweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDAwLCAweDNkLCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHg1OCwgMHgxMiwgMHgwMCwgMHhjYiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDUsIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweGM3LCAweDFjLCAweGM5LCAweDAyLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHg1MywgMHgwNywgMHgwMiwgMHgwMCwgMHgxYywgMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHgzMiwKKzB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTksIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDQsIDB4NDYsCisweDdhLCAweGNhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LAorMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiMywgMHg3YiwKKzB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4MzAsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4OWMsIDB4MDAsIDB4MWMsCisweDgwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywgMHgyYiwgMHgwMCwgMHgxYywgMHhkNCwKKzB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4N2QsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsCisweDAwLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweDgwLCAweDJjLAorMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2YywgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwKKzB4YWIsIDB4MmQsIDB4ZDksIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4YjUsIDB4YzIsIDB4MDQsIDB4OGIsIDB4MmQsIDB4MDEsCisweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGNiLAorMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywKKzB4MDAsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsCisweDMyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE5LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDA0LAorMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4MmEsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweDI4LCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDI4LCAweDEzLAorMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwgMHgwMCwgMHgxYywgMHg3NSwgMHg1NiwKKzB4N2UsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsIDB4MWMsIDB4NDUsIDB4MDMsIDB4MDQsCisweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweDgwLCAweDJjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHhiOSwKKzB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsCisweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwZCwgMHgwNCwgMHgxYywKKzB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsCisweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDFjLCAweGM3LAorMHg5YywgMHg4YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4YywgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwKKzB4MWMsIDB4YzAsIDB4MWQsIDB4ZGMsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsCisweDQ2LCAweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDA5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLAorMHhjMCwgMHgxYywgMHgxYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZjQsIDB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NWMsIDB4MTQsIDB4MDQsIDB4NjAsCisweGI3LCAweGQyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLAorMHgxYywgMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywKKzB4MGUsIDB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NWMsIDB4YzQsIDB4MDQsCisweGMwLCAweDFkLCAweDk4LCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDY4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLAorMHgwMCwgMHgxYywgMHgxYiwgMHg3NCwgMHhmZCwgMHhmMywgMHgwNCwgMHhhNiwgMHg3YiwgMHhmMSwgMHgwMywgMHgxYywgMHhhMCwKKzB4MGYsIDB4NjksIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsCisweDFjLCAweDA3LCAweDFkLCAweDlkLCAweGMzLCAweDA0LCAweGE2LCAweDdiLCAweGFkLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg2OCwgMHhjNCwgMHgwNCwgMHhlMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwKKzB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YWMsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGFjLCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLAorMHgyZiwgMHgwMSwgMHgxOCwgMHgxZCwgMHhjNywgMHg5ZiwgMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhhYywgMHhjMywKKzB4MDQsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGFjLCAweGMzLCAweDA0LAorMHhhMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhhMCwgMHhlZSwgMHhhMiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywKKzB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDQsIDB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGFjLCAweGMzLCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywKKzB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTUsIDB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NTQsIDB4YzQsIDB4MDQsCisweDAwLCAweDAwLCAweDc4LCAweDQ0LCAweDAwLCAweDgwLCAweDFkLCAweDdjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDhkLAorMHgwNCwgMHgwMCwgMHhjZSwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHhlZiwgMHg3NiwgMHg5ZCwgMHhjNCwgMHgwNCwgMHhhNCwKKzB4NzcsIDB4OGQsIDB4MjQsIDB4MDksIDB4ZTQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDk4LCAweDU0LCAweDA0LCAweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LAorMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4Y2MsIDB4MzAsIDB4NDUsIDB4YzUsIDB4MDQsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsCisweDAwLCAweDFjLCAweGMwLCAweDU5LCAweDAxLCAweDAwLCAweDFjLCAweGY1LCAweDc3LCAweDI5LCAweGM1LCAweDA0LCAweGUwLAorMHgzMCwgMHhkYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0YywgMHhiMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHhmNCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDQsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgxOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywKKzB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsCisweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LAorMHgwNCwgMHgwMCwgMHg3YiwgMHgwMCwgMHg4MCwgMHgxYywgMHhhZSwgMHg3NywgMHg0NSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4YzAsIDB4MDQsIDB4ZDMsIDB4OGIsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsCisweDYwLCAweDRjLCAweGMwLCAweDA0LCAweDAwLCAweGMwLCAweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGIwLAorMHgwNCwgMHgwMCwgMHg4MCwgMHgyNSwgMHhiMCwgMHgwNCwgMHgwMCwgMHhiNSwgMHg1YiwgMHhiMSwgMHgwNCwgMHgwNCwgMHg2OSwKKzB4MjYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsCisweDFjLCAweGE5LCAweDI1LCAweDQ1LCAweDA1LCAweDAwLCAweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LAorMHgwMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgyNCwgMHgwNCwgMHhiNCwgMHg1ZiwgMHgwMSwgMHg0MCwgMHgxOCwKKzB4MDcsIDB4OWQsIDB4NDgsIDB4NTUsIDB4MDQsIDB4YjcsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTYsIDB4NzYsIDB4MDEsCisweDAwLCAweDFjLCAweDQ3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDMzLCAweDAxLCAweDYwLCAweDE4LCAweGE0LAorMHgyZiwgMHgwMSwgMHg2MCwgMHgxOCwgMHg2NCwgMHg3NywgMHgwMSwgMHg2MCwgMHgxOCwgMHgyNCwgMHg3NywgMHgwMSwgMHg2MCwKKzB4MTgsIDB4NDQsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2YsCisweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDNiLCAweDAxLCAweDAwLCAweDFjLCAweDUzLCAweDdiLCAweDAwLCAweGMwLCAweDFjLAorMHhkMywgMHhjZiwgMHgxYiwgMHgwMCwgMHgxYywgMHg1MywgMHg0ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHhkYSwgMHhjZiwgMHgwMCwKKzB4YzAsIDB4MWYsIDB4ZDUsIDB4NTcsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsCisweDUzLCAweDBmLCAweDAwLCAweDFjLCAweGUwLCAweDI5LCAweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGIwLCAweDA1LAorMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsCisweGY1LCAweDU1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGI0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLAorMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsCisweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLAorMHgwMSwgMHgyMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxMCwKKzB4ODksIDB4MjUsIDB4NjEsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLAorMHgwMCwgMHg2MCwgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsCisweDZjLCAweGMwLCAweDA0LCAweDQwLCAweDFjLCAweDljLCAweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDU1LCAweGMzLCAweDA0LAorMHgwMCwgMHgwMCwgMHhjNCwgMHhjMCwgMHgwNCwgMHgyNywgMHgxZCwgMHhmMSwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwKKzB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWRjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpYy5oCisgKgorICogVGhpcyBpcyB0aGUgYmFzZSBzZXQgb2YgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19TTElDX0RSSVZFUl9IX18KKyNkZWZpbmUgX19TTElDX0RSSVZFUl9IX18KKworCitzdHJ1Y3Qgc2xpY19zcGlubG9jayB7CisJc3BpbmxvY2tfdAlsb2NrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCisjZGVmaW5lIFNMSUNfUlNQUV9QQUdFU19HQiAgICAgICAgMTAKKyNkZWZpbmUgU0xJQ19SU1BRX0JVRlNJTlBBR0UgICAgICAoUEFHRV9TSVpFIC8gU0xJQ19SU1BCVUZfU0laRSkKKworc3RydWN0IHNsaWNfcnNwcXVldWUgeworICAgIHUzMiAgICAgICAgICAgICBvZmZzZXQ7CisgICAgdTMyICAgICAgICAgICAgIHBhZ2VpbmRleDsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX3BhZ2VzOworICAgIHN0cnVjdCBzbGljX3JzcGJ1ZiAqcnNwYnVmOworICAgIHUzMiAqdmFkZHJbU0xJQ19SU1BRX1BBR0VTX0dCXTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBhZGRyW1NMSUNfUlNQUV9QQUdFU19HQl07Cit9OworCisjZGVmaW5lIFNMSUNfUkNWUV9FWFBBTlNJT04gICAgICAgICAxCisjZGVmaW5lIFNMSUNfUkNWUV9FTlRSSUVTICAgICAgICAgICAoMjU2ICogU0xJQ19SQ1ZRX0VYUEFOU0lPTikKKyNkZWZpbmUgU0xJQ19SQ1ZRX01JTkVOVFJJRVMgICAgICAgIChTTElDX1JDVlFfRU5UUklFUyAvIDIpCisjZGVmaW5lIFNMSUNfUkNWUV9NQVhfUFJPQ0VTU19JU1IgICAoKFNMSUNfUkNWUV9FTlRSSUVTICogNCkpCisjZGVmaW5lIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWUV9GSUxMRU5UUklFUyAgICAgICAoMTYgKiBTTElDX1JDVlFfRVhQQU5TSU9OKQorI2RlZmluZSBTTElDX1JDVlFfRklMTFRIUkVTSCAgICAgICAgKFNMSUNfUkNWUV9FTlRSSUVTIC0gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKQorCitzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSB7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKmhlYWQ7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKnRhaWw7CisgICAgdTMyICAgICAgICAgICAgY291bnQ7CisgICAgdTMyICAgICAgICAgICAgc2l6ZTsKKyAgICB1MzIgICAgICAgICAgICBlcnJvcnM7Cit9OworCitzdHJ1Y3Qgc2xpY19yY3ZidWZfaW5mbyB7CisgICAgdTMyICAgICBpZDsKKyAgICB1MzIgICAgIHN0YXJ0dGltZTsKKyAgICB1MzIgICAgIHN0b3B0aW1lOworICAgIHUzMiAgICAgc2xpY3dvcmxkOworICAgIHUzMiAgICAgbGFzdHRpbWU7CisgICAgdTMyICAgICBsYXN0aWQ7Cit9OworLyoKKyBTTElDIEhhbmRsZSBzdHJ1Y3R1cmUuICBVc2VkIHRvIHJlc3RyaWN0IGhhbmRsZSB2YWx1ZXMgdG8KKyAzMiBiaXRzIGJ5IHVzaW5nIGFuIGluZGV4IHJhdGhlciB0aGFuIGFuIGFkZHJlc3MuCisgU2ltcGxpZmllcyB1Y29kZSBpbiA2NC1iaXQgc3lzdGVtcworKi8KK3N0cnVjdCBzbGljX2hhbmRsZV93b3JkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1c2hvcnQgICAgICBpbmRleDsKKwkJCXVzaG9ydCAgICAgIGJvdHRvbWJpdHM7IC8qIHRvIGRlbm90ZSBudW0gYnVmcyB0byBjYXJkICovCisJCX0gIHBhcnRzOworCQl1MzIgICAgICAgICB3aG9sZTsKKwl9ICBoYW5kbGU7Cit9OworCitzdHJ1Y3Qgc2xpY19oYW5kbGUgeworICAgIHN0cnVjdCBzbGljX2hhbmRsZV93b3JkICB0b2tlbjsgIC8qIHRva2VuIHBhc3NlZCBiZXR3ZWVuIGhvc3QgYW5kIGNhcmQqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgIHZvaWQgKmFkZHJlc3M7ICAgIC8qIGFjdHVhbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpvdGhlcl9oYW5kbGU7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpuZXh0OworfTsKKworI2RlZmluZSBTTElDX0hBTkRMRV9GUkVFICAgICAgICAweDAwMDAKKyNkZWZpbmUgU0xJQ19IQU5ETEVfREFUQSAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNMSUNfSEFORExFX0NNRCAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTTElDX0hBTkRMRV9DT05URVhUICAgICAweDAwMDMKKyNkZWZpbmUgU0xJQ19IQU5ETEVfVEVBTSAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgaGFuZGxlX2luZGV4ICAgICAgICBoYW5kbGUucGFydHMuaW5kZXgKKyNkZWZpbmUgaGFuZGxlX2JvdHRvbSAgICAgICBoYW5kbGUucGFydHMuYm90dG9tYml0cworI2RlZmluZSBoYW5kbGVfdG9rZW4gICAgICAgIGhhbmRsZS53aG9sZQorCisjZGVmaW5lIFNMSUNfSE9TVENNRF9TSVpFICAgIDUxMgorCitzdHJ1Y3Qgc2xpY19ob3N0Y21kIHsKKyAgICBzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICBjbWQ2NDsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIHR5cGU7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgICAgICAgICAqc2tiOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJsOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJoOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgYnVzeTsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIGNtZHNpemU7CisgICAgdXNob3J0ICAgICAgICAgICAgICAgICAgICAgbnVtYnVmczsKKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgICAgKnBzbGljX2hhbmRsZTsvKiBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGNvbW1hbmQgKi8KKyAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICAgICpuZXh0OworICAgIHN0cnVjdCBzbGljX2hvc3RjbWQgICAgKm5leHRfYWxsOworfTsKKworI2RlZmluZSBTTElDX0NNRFFfQ01EU0lOUEFHRSAgICAoUEFHRV9TSVpFIC8gU0xJQ19IT1NUQ01EX1NJWkUpCisjZGVmaW5lIFNMSUNfQ01EX0RVTUIgICAgICAgICAgICAzCisjZGVmaW5lIFNMSUNfQ01EUV9JTklUQ01EUyAgICAgICAyNTYKKyNkZWZpbmUgU0xJQ19DTURRX01BWENNRFMgICAgICAgIDI1NgorI2RlZmluZSBTTElDX0NNRFFfTUFYT1VUU1RBTkQgICAgU0xJQ19DTURRX01BWENNRFMKKyNkZWZpbmUgU0xJQ19DTURRX01BWFBBR0VTICAgICAgIChTTElDX0NNRFFfTUFYQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorI2RlZmluZSBTTElDX0NNRFFfSU5JVFBBR0VTICAgICAgKFNMSUNfQ01EUV9JTklUQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorCitzdHJ1Y3Qgc2xpY19jbWRxbWVtIHsKKwlpbnQgcGFnZWNudDsKKwl1MzIgKnBhZ2VzW1NMSUNfQ01EUV9NQVhQQUdFU107CisJZG1hX2FkZHJfdCBkbWFfcGFnZXNbU0xJQ19DTURRX01BWFBBR0VTXTsKK307CisKK3N0cnVjdCBzbGljX2NtZHF1ZXVlIHsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoZWFkOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKnRhaWw7CisJaW50IGNvdW50OworCXN0cnVjdCBzbGljX3NwaW5sb2NrIGxvY2s7Cit9OworCisjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKKyN1bmRlZiBTVEFUVVNfU1VDQ0VTUworI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKKyNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKKyNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKKyNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKKworI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorLyoKK0R1bXAgYnVmZmVyIHNpemUKKworVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKK2dpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KK01vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworanVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyovCisjZGVmaW5lIERVTVBfQlVGX1NJWkUgICAgICAgICAgICAgICAweDNDMDAKKyNlbmRpZgorCisKK3N0cnVjdCBtY2FzdF9hZGRyZXNzIHsKKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNl07CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm5leHQ7Cit9OworCisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FSRF9GQUlMICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDQVJEX1NMRUVQICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURBUFRfRkxBR1NfUEVORElOR0xJTktET1dOICAgICAweDAwMDQKKyNkZWZpbmUgQURBUFRfRkxBR1NfRklCRVJNRURJQSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9DS1NfQUxMT0NFRCAgICAgICAweDAwMTAKKyNkZWZpbmUgQURBUFRfRkxBR1NfSU5UX1JFR0lTVEVSRUQgICAgICAweDAwMjAKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9BRF9USU1FUl9TRVQgICAgICAweDAwNDAKKyNkZWZpbmUgQURBUFRfRkxBR1NfU1RBVFNfVElNRVJfU0VUICAgICAweDAwODAKKyNkZWZpbmUgQURBUFRfRkxBR1NfUkVTRVRfVElNRVJfU0VUICAgICAweDAxMDAKKworI2RlZmluZSBMSU5LX0RPV04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTktfMTBNQiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfMTAwME1CICAgICAgICAgICAgMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgU0xJQ19EVVBMRVgoeCkgICAgKCh4ID09IExJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4ID09IExJTktfMTAwTUIpID8gIjEwME1iIiA6ICgoeCA9PSBMSU5LXzEwMDBNQikgP1wKKwkJCQkiMTAwME1iIiA6ICIgMTBNYiIpKQorI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHggPT0gTElOS19ET1dOKSA/ICJEb3duIiA6ICJVcCAgIikKKyNkZWZpbmUgU0xJQ19BREFQVEVSX1NUQVRFKHgpICgoeCA9PSBBREFQVF9VUCkgPyAiVVAiIDogIkRvd24iKQorI2RlZmluZSBTTElDX0NBUkRfU1RBVEUoeCkgICAgKCh4ID09IENBUkRfVVApID8gIlVQIiA6ICJEb3duIikKKworc3RydWN0IHNsaWNfaWZhY2Vfc3RhdHMgeworICAgIC8qCisgICAgICogU3RhdHMKKyAgICAgKi8KKyAgICB1NjQgICAgICAgIHhtdF9ieXRlczsKKyAgICB1NjQgICAgICAgIHhtdF91Y2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9tY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9iY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9lcnJvcnM7CisgICAgdTY0ICAgICAgICB4bXRfZGlzY2FyZHM7CisgICAgdTY0ICAgICAgICB4bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICB4bWl0X2V4Y2Vzc194bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICByY3ZfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfbWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfYmNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfZXJyb3JzOworICAgIHU2NCAgICAgICAgcmN2X2Rpc2NhcmRzOworfTsKKworc3RydWN0IHNsaWNjcF9zdGF0cyB7CisgICAgdTY0ICAgICAgICB4bWl0X3RjcF9zZWdzOworICAgIHU2NCAgICAgICAgeG1pdF90Y3BfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX3NlZ3M7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX2J5dGVzOworfTsKKworc3RydWN0IHNsaWNuZXRfc3RhdHMgeworICAgIHN0cnVjdCBzbGljY3Bfc3RhdHMgICAgICAgIHRjcDsKKyAgICBzdHJ1Y3Qgc2xpY19pZmFjZV9zdGF0cyAgICAgIGlmYWNlOworfTsKKworI2RlZmluZSBTTElDX0xPQURUSU1FUl9QRVJJT0QgICAgIDEKKyNkZWZpbmUgU0xJQ19JTlRBR0dfREVGQVVMVCAgICAgICAyMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzAgICAgICAgICAgICAgMAorI2RlZmluZSBTTElDX0xPQURfMSAgICAgICAgICAgICAgIDgwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzIgICAgICAgICAgICAgICAxMDAwMAorI2RlZmluZSBTTElDX0xPQURfMyAgICAgICAgICAgICAgIDEyMDAwCisjZGVmaW5lIFNMSUNfTE9BRF80ICAgICAgICAgICAgICAgMTQwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzUgICAgICAgICAgICAgICAxNjAwMAorI2RlZmluZSBTTElDX0lOVEFHR18xICAgICAgICAgICAgIDUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzIgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzMgICAgICAgICAgICAgMTUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzQgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzUgICAgICAgICAgICAgMjUwCisjZGVmaW5lIFNMSUNfTE9BRF8xR0IgICAgICAgICAgICAgMzAwMAorI2RlZmluZSBTTElDX0xPQURfMkdCICAgICAgICAgICAgIDYwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzNHQiAgICAgICAgICAgICAxMjAwMAorI2RlZmluZSBTTElDX0xPQURfNEdCICAgICAgICAgICAgIDI0MDAwCisjZGVmaW5lIFNMSUNfTE9BRF81R0IgICAgICAgICAgICAgNDgwMDAKKyNkZWZpbmUgU0xJQ19JTlRBR0dfMUdCICAgICAgICAgICA1MAorI2RlZmluZSBTTElDX0lOVEFHR18yR0IgICAgICAgICAgIDc1CisjZGVmaW5lIFNMSUNfSU5UQUdHXzNHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzRHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzVHQiAgICAgICAgICAgMTAwCisKK3N0cnVjdCBldGhlcl9oZWFkZXIgeworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfZGhvc3RbNl07CisgICAgdW5zaWduZWQgY2hhciAgICBldGhlcl9zaG9zdFs2XTsKKyAgICB1c2hvcnQgICBldGhlcl90eXBlOworfTsKKworc3RydWN0IHNsaWNjYXJkIHsKKyAgICB1aW50ICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKyAgICB1aW50ICAgICAgICAgICAgICBzdGF0ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBjYXJkbnVtOworICAgIHVpbnQgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBhZGFwdGVyc19hY3RpdmF0ZWQ7CisgICAgdWludCAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgIGFkYXB0ZXJzX3NsZWVwaW5nOworICAgIHVpbnQgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgIGV2ZW50czsKKyAgICB1MzIgICAgICAgICAgIGxvYWRsZXZlbF9jdXJyZW50OworICAgIHUzMiAgICAgICAgICAgbG9hZDsKKyAgICB1aW50ICAgICAgICAgICAgICByZXNldF9pbl9wcm9ncmVzczsKKyAgICB1MzIgICAgICAgICAgIHBpbmdzdGF0dXM7CisgICAgdTMyICAgICAgICAgICBiYWRfcGluZ3N0YXR1czsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCBsb2FkdGltZXI7CisgICAgdTMyICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgdWludCAgICAgICAgICAgICAgY29uZmlnX3NldDsKKyAgICBzdHJ1Y3Qgc2xpY19jb25maWcgIGNvbmZpZzsKKyAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfZGlyOworICAgIHN0cnVjdCBkZW50cnkgICAgICAqZGVidWdmc19jYXJkaW5mbzsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKm1hc3RlcjsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBzbGljY2FyZCAqbmV4dDsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHN0YXR1czsgICAgICAgICAgIC8qIFJlc3VsdCBvZiBkdW1wIFVQUiAqLworICAgIHZvaWQgKmNtZGJ1ZmZlcjsKKworICAgIHVsb25nICAgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzbDsKKyAgICB1MzIgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXNoOworCisgICAgdTMyICAgICAgICAgICAgIGR1bXBfY291bnQ7CisgICAgc3RydWN0IHRhc2tfc3RydWN0ICpkdW1wX3Rhc2tfaWQ7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBfd2FpdF9jb3VudDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGR1bXB0aHJlYWRfcnVubmluZzsgLyogaGFzIGEgZHVtcCB0aHJlYWQgYmVlbiBpbml0J2QgICovCisgICAgdWludCAgICAgICAgICAgICAgICBkdW1wX3JlcXVlc3RlZDsgICAgIC8qIDAgbm8sIDEgPSByZXFzdGQgMj1jdXJyIDM9ZG9uZSAqLworICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9zdGFydDsKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfY29tcGxldGU7CisgICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX2RlbHRhOworICAgIHZvaWQgKmR1bXBidWZmZXI7CisgICAgdWxvbmcgICAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2w7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2g7CisgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICBkdW1wX3dxOworICAgIHN0cnVjdCBmaWxlICAgICAgICAqZHVtcGhhbmRsZTsKKyAgICBtbV9zZWdtZW50X3QgICAgICAgIGR1bXBmaWxlX2ZzOworI2VuZGlmCisgICAgdTMyICAgICAgICAgICAgIGRlYnVnX2l4OworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX3R5cGVbMzJdOworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX29mZnNldFszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZVszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZWhbMzJdOworfTsKKworI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKKyNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAorI2RlZmluZSBOVU1fQ0ZHX1JFR19VTE9OR1MgIChOVU1fQ0ZHX1JFR1MgLyBzaXplb2YodTMyKSkKKworc3RydWN0IHBoeXNjYXJkIHsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBwaHlzY2FyZCAqbmV4dDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGFkYXB0ZXJzX2FsbG9jZDsKKworIC8qICB0aGUgZm9sbG93aW5nIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkCisgICAgdTMyICAgICAgICAgICAgICAgYnJpZGdlX2J1c251bTsKKyAgICB1MzIgICAgICAgICAgICAgICBicmlkZ2VfY2ZnW05VTV9DRkdfU1BBQ0VTXVtOVU1fQ0ZHX1JFR19VTE9OR1NdOworICovCit9OworCitzdHJ1Y3QgYmFzZV9kcml2ZXIgeworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrIGRyaXZlcl9sb2NrOworICAgIHUzMiAgICAgICAgICAgICAgbnVtX3NsaWNfY2FyZHM7CisgICAgdTMyICAgICAgICAgICAgICBudW1fc2xpY19wb3J0czsKKyAgICB1MzIgICAgICAgICAgICAgIG51bV9zbGljX3BvcnRzX2FjdGl2ZTsKKyAgICB1MzIgICAgICAgICAgICAgIGR5bmFtaWNfaW50YWdnOworICAgIHN0cnVjdCBzbGljY2FyZCAgKnNsaWNfY2FyZDsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQgICpwaHlzX2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICAgY2FyZG51bWludXNlW1NMSUNfTUFYX0NBUkRTXTsKK307CisKK3N0cnVjdCBzbGljX3NobWVtIHsKKyAgICB2b2xhdGlsZSB1MzIgICAgICAgICAgaXNyOworICAgIHZvbGF0aWxlIHUzMiAgICAgICAgICBsaW5rc3RhdHVzOworICAgIHZvbGF0aWxlIHN0cnVjdCBzbGljX3N0YXRzICAgICBpbmljc3RhdHM7Cit9OworCitzdHJ1Y3Qgc2xpY19yZWdfcGFyYW1zIHsKKyAgICB1MzIgICAgICAgbGlua3NwZWVkOworICAgIHUzMiAgICAgICBsaW5rZHVwbGV4OworICAgIHUzMiAgICAgICBmYWlsX29uX2JhZF9lZXByb207Cit9OworCitzdHJ1Y3Qgc2xpY191cHIgeworICAgIHVpbnQgICAgICAgICAgICAgICBhZGFwdGVyOworICAgIHUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0OworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhOworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhX2g7CisgICAgdTMyICAgICAgICAgICAgdXByX2J1ZmZlcjsKKyAgICB1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2g7CisgICAgc3RydWN0IHNsaWNfdXByICpuZXh0OworfTsKKworc3RydWN0IHNsaWNfaWZldmVudHMgeworICAgIHVpbnQgICAgICAgIG9mbG93ODAyOworICAgIHVpbnQgICAgICAgIHVmbG93ODAyOworICAgIHVpbnQgICAgICAgIFRwcnRvZmxvdzsKKyAgICB1aW50ICAgICAgICByY3ZlYXJseTsKKyAgICB1aW50ICAgICAgICBCdWZvdjsKKyAgICB1aW50ICAgICAgICBDYXJyZTsKKyAgICB1aW50ICAgICAgICBMb25nZTsKKyAgICB1aW50ICAgICAgICBJbnZwOworICAgIHVpbnQgICAgICAgIENyYzsKKyAgICB1aW50ICAgICAgICBEcmJsOworICAgIHVpbnQgICAgICAgIENvZGU7CisgICAgdWludCAgICAgICAgSXBIbGVuOworICAgIHVpbnQgICAgICAgIElwTGVuOworICAgIHVpbnQgICAgICAgIElwQ3N1bTsKKyAgICB1aW50ICAgICAgICBUcENzdW07CisgICAgdWludCAgICAgICAgVHBIbGVuOworfTsKKworc3RydWN0IGFkYXB0ZXIgeworICAgIHZvaWQgKmlmcDsKKyAgICBzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwb3J0OworICAgIHN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwaHlzcG9ydDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRpbmRleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5ldGRldjsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5leHRfbmV0ZGV2aWNlOworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICBhZGFwdGVyX2xvY2s7CisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIHJlc2V0X2xvY2s7CisgICAgc3RydWN0IHBjaV9kZXYgICAgICpwY2lkZXY7CisgICAgdWludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgICBzbG90bnVtYmVyOworICAgIHVpbnQgICAgICAgICAgICAgICAgZnVuY3Rpb25udW1iZXI7CisgICAgdXNob3J0ICAgICAgICAgICAgICB2ZW5kaWQ7CisgICAgdXNob3J0ICAgICAgICAgICAgICBkZXZpZDsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOworICAgIHUzMiAgICAgICAgICAgICBpcnE7CisgICAgdm9pZCBfX2lvbWVtICptZW1vcnliYXNlOworICAgIHUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CisgICAgdTMyICAgICAgICAgICAgIGRyYW1iYXNlOworICAgIHUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOworICAgIHVpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGVkOworICAgIHUzMiAgICAgICAgICAgICBpbnRycmVnaXN0ZXJlZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgICAgY3VyYWRkcnVwcGVyOworICAgIHN0cnVjdCBzbGljX3NobWVtICAgICAgKnBzaG1lbTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBoeXNfc2htZW07CisgICAgdTMyICAgICAgICAgICAgIGlzcmNvcHk7CisgICAgX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICAgICAgICpzbGljX3JlZ3M7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBtYWNhZGRyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBjdXJybWFjYWRkcls2XTsKKyAgICB1MzIgICAgICAgICAgICAgbWFjb3B0czsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIGRldmZsYWdzX3ByZXY7CisgICAgdTY0ICAgICAgICAgICAgIG1jYXN0bWFzazsKKyAgICBzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAgICptY2FzdGFkZHJzOworICAgIHN0cnVjdCBzbGljX3VwciAgICp1cHJfbGlzdDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIHVwcl9idXN5OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CisgICAgc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBzdGF0c3RpbWVyc2V0OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgbG9hZHRpbWVyOworICAgIHUzMiAgICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2VudHJ5OworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICB1cHJfbG9jazsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgYml0NjRyZWdsb2NrOworICAgIHN0cnVjdCBzbGljX3JzcHF1ZXVlICAgICByc3BxdWV1ZTsKKyAgICBzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAgICAgcmN2cXVldWU7CisgICAgc3RydWN0IHNsaWNfY21kcXVldWUgICAgIGNtZHFfZnJlZTsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAgICAgY21kcV9kb25lOworICAgIHN0cnVjdCBzbGljX2NtZHF1ZXVlICAgICBjbWRxX2FsbDsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxbWVtICAgICAgY21kcW1lbTsKKyAgICAvKgorICAgICAqICBTTElDIEhhbmRsZXMKKyAgICAqLworICAgIHN0cnVjdCBzbGljX2hhbmRsZSBzbGljX2hhbmRsZXNbU0xJQ19DTURRX01BWENNRFMrMV07IC8qIE9iamVjdCBoYW5kbGVzKi8KKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgLyogRnJlZSBvYmplY3QgaGFuZGxlcyovCisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIGhhbmRsZV9sb2NrOyAgICAgICAgICAgLyogT2JqZWN0IGhhbmRsZSBsaXN0IGxvY2sqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgc2xpY19oYW5kbGVfaXg7CisKKyAgICB1MzIgICAgICAgICAgICAgeG1pdHFfZnVsbDsKKyAgICB1MzIgICAgICAgICAgICAgYWxsX3JlZ193cml0ZXM7CisgICAgdTMyICAgICAgICAgICAgIGljcl9yZWdfd3JpdGVzOworICAgIHUzMiAgICAgICAgICAgICBpc3JfcmVnX3dyaXRlczsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcnhfZXJyb3JzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfZHJvcHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB4bWl0X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIGxpbmtldmVudF9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB1cHJfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfY29tcGxldGVzOworICAgIHUzMiAgICAgICAgICAgICB0eF9kcm9wczsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2Jyb2FkY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9tdWx0aWNhc3RzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfdW5pY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIGludGFnZ19wZXJpb2Q7CisgICAgc3RydWN0IGluaWNwbV9zdGF0ZSAgICAqaW5pY3BtX2luZm87CisgICAgdm9pZCAqcGluaWNwbV9pbmZvOworICAgIHN0cnVjdCBzbGljX3JlZ19wYXJhbXMgICByZWdfcGFyYW1zOworICAgIHN0cnVjdCBzbGljX2lmZXZlbnRzICBpZl9ldmVudHM7CisgICAgc3RydWN0IHNsaWNfc3RhdHMgICAgICAgIGluaWNzdGF0c19wcmV2OworICAgIHN0cnVjdCBzbGljbmV0X3N0YXRzICAgICBzbGljX3N0YXRzOworICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworfTsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjZGVmaW5lIFNMSUNfRFVNUF9SRVFVRVNURUQgICAgICAxCisjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCisjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2xpY19jcmFzaF9pbmZvIHsKKyAgICB1c2hvcnQgIGNwdV9pZDsKKyAgICB1c2hvcnQgIGNyYXNoX3BjOworfTsKKworI2RlZmluZSBDUkFTSF9JTkZPX09GRlNFVCAgIDB4MTU1QworCisjZW5kaWYKKworI2RlZmluZSBVUERBVEVfU1RBVFMobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChuZXdzdGF0KSA8IChvbGRzdGF0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgKyAoMHhGRkZGRkZGRiAtIG9sZHN0YXQgKyAxKSk7ICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBVUERBVEVfU1RBVFNfR0IobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIFwKKwkweDAwMDAwMDAwRkZGRkZGRkYpCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiBcCisJMHgwMDAwMDAwMEZGRkZGRkZGKQorI2Vsc2UKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCisjZW5kaWYKKworI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCisjZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQorI2RlZmluZSBTSU9DU0xJQ1RSQUNFRFVNUCAgICAgICAgKFNJT0NERVZQUklWQVRFKzExKQorCisjZW5kaWYgLyogIF9fU0xJQ19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjNjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNfb3MuaApAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY19vcy5oCisgKgorICogVGhlc2UgYXJlIHRoZSBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9ucyByZXF1aXJlZCBmb3IgdGhlIFNMSUNPU1MKKyAqIGRyaXZlciwgd2hpY2ggc2hvdWxkIGFsbG93IGZvciBncmVhdGVyIHBvcnRhYmlsaXR5IHRvIG90aGVyIE9TZXMuCisgKi8KKyNpZm5kZWYgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKyNkZWZpbmUgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKworI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIFNMSUNfU0VDU19UT19KSUZGUyh4KSAgKCh4KSAqIEhaKQorI2RlZmluZSBTTElDX01TX1RPX0pJRkZJRVMoeCkgIChTTElDX1NFQ1NfVE9fSklGRlMoKHgpKSAvIDEwMDApCisKKyNpZmRlZiBERUJVR19SRUdJU1RFUl9UUkFDRQorI2RlZmluZSBXUklURV9SRUcocmVnLCB2YWx1ZSwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAwOyAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX29mZnNldFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSBcCisJCSgodW5zaWduZWQgY2hhciAqKSgmcmVnKSkgLSBcCisJCSgodW5zaWduZWQgY2hhciAqKWFkYXB0ZXItPnNsaWNfcmVncyk7IFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsdWU7ICBcCisJCWlmIChhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9PSAzMikgXAorCQkJYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKTsgICAgICAgICAgICBcCisJfQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAxOyAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfb2Zmc2V0W2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IFwKKwkJKCh1bnNpZ25lZCBjaGFyICopKCZyZWcpKSAtIFwKKwkJKCh1bnNpZ25lZCBjaGFyICopYWRhcHRlci0+c2xpY19yZWdzKTsgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gdmFsdWU7ICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVoW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsaDsgIFwKKwkJaWYgKGFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID09IDMyKSBcCisJCQlhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19yZWc2NF93cml0ZSgoYSksICgmcmVnKSwgKHZhbHVlKSwgKCZyZWdoKSwgKHZhbGgpLCBcCisJCQkJKGZsdXNoKSk7XAorCX0KKyNlbHNlCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsIHZhbHVlLCBmbHVzaCkgXAorCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgXAorCXNsaWNfcmVnNjRfd3JpdGUoKGEpLCAoJnJlZyksICh2YWx1ZSksICgmcmVnaCksICh2YWxoKSwgKGZsdXNoKSkKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNidWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDVlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNidWlsZC5oCisgKgorICogVGhlIGZvbGxvd2luZyBjb250YWlucyB0aGUgY29tcGlsZXIgZGlyZWN0aXZlIHN3aXRjaGVzIHVzZWQgZm9yCisgKiBkaWZmZXJlbnQgU0xJQyBidWlsZCBvcHRpb25zLiAgVGhleSBjYW4gYWxsIGJlIHNldCBpbiB0aGUgTWFrZWZpbGUKKyAqIGJ1dCB0aGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgaGVyZS4KKyAqLworI2lmbmRlZiBfU0xJQ19CVUlMRF9IXworI2RlZmluZSBfU0xJQ19CVUlMRF9IXworCisjaWZuZGVmIFNMSUNfUFJPRFVDVElPTl9CVUlMRAorI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19GQUlMVVJFX1JFU0VUCisjZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkJCTEKKyNlbmRpZgorI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2lmbmRlZiBTTElDX0FTU0VSVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19NQ0FTVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfTUNBU1RfRU5BQkxFRAkJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAorI2RlZmluZSBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAkJMQorI2VuZGlmCisjaWZuZGVmIEFUS19ERUJVRworI2RlZmluZSBBVEtfREVCVUcJCQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAorI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCQkxCisjZW5kaWYKKyNpZm5kZWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKKyNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KKyNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKKyNlbmRpZgorI2lmbmRlZiBTVEFUU19USU1FUl9JTlRFUlZBTAorI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKKyNlbmRpZgorI2lmbmRlZiBQSU5HX1RJTUVSX0lOVEVSVkFMCisjZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkxCisjZW5kaWYKKworI2VuZGlmICAgLyogX1NMSUNfQlVJTERfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkYmcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljZGJnLmgKKyAqCisgKiBBbGwgZGVidWcgYW5kIGFzc2VydGlvbi1iYXNlZCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBpbmNsdWRlZAorICogaW4gdGhpcyBmaWxlIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfREVCVUdfSF8KKyNkZWZpbmUgX1NMSUNfREVCVUdfSF8KKworI2lmZGVmIFNMSUNfREVGQVVMVF9MT0dfTEVWRUwKKyNlbHNlCisjZGVmaW5lIFNMSUNMRVZFTCAgIEtFUk5fREVCVUcKKyNlbmRpZgorI2RlZmluZSBTTElDX0RJU1BMQVkgICAgICAgICAgICAgIHByaW50aworI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikgICBTTElDX0RJU1BMQVkoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCisKKyNkZWZpbmUgU0xJQ19ERUJVR19NRVNTQUdFIDEKKyNpZiBTTElDX0RFQlVHX01FU1NBR0UKKy8qI2RlZmluZSBEQkdfTVNHKG4sIGFyZ3MuLi4pICAgICAgU0xJQ19ESVNQTEFZKFNMSUNMRVZFTCBuLCAjI2FyZ3MpKi8KKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2Vsc2UKKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWYgU0xJQ19BU1NFUlRfRU5BQkxFRAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKDEpCisjZWxzZQorI2RlZmluZSBWQUxJRF9BRERSRVNTKHApICAoKCh1MzIpKHApICYgMHg4MDAwMDAwMCkgfHwgKCh1MzIpKHApID09IDApKQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAorCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19hc3NlcnRfZmFpbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVE1TRworI2RlZmluZSBBU1NFUlRNU0coYSxtc2cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMiXAorCQkJImxpbmUgJWQ6ICVzXG4iLFwKKwkJCV9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18sIChtc2cpKTsgICAgICAgICAgICBcCisJCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkKKyNlbmRpZgorI2lmbmRlZiBBU1NFUlRNU0cKKyNkZWZpbmUgQVNTRVJUTVNHKGEsIG1zZykKKyNlbmRpZgorI2VuZGlmIC8qIFNMSUNfQVNTRVJUX0VOQUJMRUQgICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2R1bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogTk8gTElDRU5TRSBUTyBBTlkgQUxBQ1JJVEVDSCBQQVRFTlQgQ0xBSU0gSVMgR1JBTlRFRCBCWSBBTlkgQ09QWVJJR0hUCisgKiBMSUNFTlNFIFRPIFRISVMgT1IgT1RIRVIgU09GVFdBUkUuIFRISVMgU09GVFdBUkUgTUFZIEJFIENPVkVSRUQgQlkKKyAqIEFMQUNSSVRFQ0ggUEFURU5UUyBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFUuUy4gUEFURU5UIE5PUy4gNiwyMjYsNjgwLAorICogNiwyNDcsMDYwLCA2LDMzNCwxNTMsIDYsMzg5LDQ3OSwgNiwzOTMsNDg3LCA2LDQyNywxNzEsIDYsNDI3LDE3MworICogYW5kIDYsNDM0LDYyMC4KKyAqIFRISVMgU09GVFdBUkUgSVMgTk9UIFNVQkpFQ1QgVE8gVEhFIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChHUEwpLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQKKyAqIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlCisgKiBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlcgorICogZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqLworI2lmbmRlZiBfU0xJQ19EVU1QX0hfCisjZGVmaW5lIF9TTElDX0RVTVBfSF8KKworI2RlZmluZSBERUJVR19TVUNDRVNTICAgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVdGlsaXR5IHByb2Nlc3NvciByZWdpc3RlciBsb2NhdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVVRJTElUWV9SRVNFVCAgICAgICAweDAKKyNkZWZpbmUgVVRJTElUWV9JU1BfQUREUiAgICAweDQgICAgIC8qIEludGVycnVwdCBzdGF0dXMgUG9pbnRlciAqLworI2RlZmluZSBVVElMSVRZX0lTUl9BRERSICAgIDB4OCAgICAgLyogSW50ZXJydXB0IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0lDUl9BRERSICAgIDB4YyAgICAgLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9DUFJfQUREUiAgICAweDEwICAgIC8qIENvbW1hbmQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0RQUl9BRERSICAgIDB4MTQgICAgLyogRGF0YSBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVUSUxJVFlfRE1QX1RSUSAgICAgMHgxOCAgICAvKiBEdW1wIHF1ZXVlIG9udG8gQUxVIGZvciBhbmFseXNlciAqLworI2RlZmluZSBVVElMSVRZX1VQUF9BRERSICAgIDB4MWMgICAgLyogQml0cyA2My0zMiBvZiBjbWQvZGF0YSBwb2ludGVyICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSVNSX0NDICAgICAgICAgMHgxMDAwMDAwMCAgLyogQ29tbWFuZCBjb21wbGV0ZSAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0VSUiAgICAgICAgMHgwMTAwMDAwMCAgLyogQ29tbWFuZCBFcnJvciAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0NNRF9NQVNLICAgMHgxMTAwMDAwMCAgLyogQ29tbWFuZCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTTElDX0lTUl9UUEggICAgICAgIDB4MDAwODAwMDAgIC8qIFRyYW5zbWl0IHByb2Nlc3NvciBoYWx0ZWQgLSBhc3luYyAqLworI2RlZmluZSBTTElDX0lTUl9SUEggICAgICAgIDB4MDAwNDAwMDAgIC8qIFJlY2VpdmUgcHJvY2Vzc29yIGhhbHRlZCAtIGFzeW5jICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgQ29udHJvbCByZWdpc3RlciB2YWx1ZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSUNSX09GRiAgICAgICAgMCAgICAgICAgICAgLyogSW50ZXJydXB0cyBkaXNhYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9PTiAgICAgICAgIDEgICAgICAgICAgIC8qIEludGVycnVwdHMgZW5hYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9NQVNLICAgICAgIDIgICAgICAgICAgIC8qIEludGVycnVwdHMgbWFza2VkICovCisKKyNkZWZpbmUgV1JJVEVfRFJFRyhyZWcsIHZhbHVlLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdyaXRlbCgodmFsdWUpLCAocmVnKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGZsdXNoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1hbmQgRm9ybWF0CisgKgorICogRWFjaCBjb21tYW5kIGNvbnRhaW5zIGEgY29tbWFuZCBieXRlIHdoaWNoIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAqCisgKiAgYml0czogICA3LTMgICAgIDIgICAgICAgMS0wCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgY29tbWFuZCAgICAgQWx0LiBQcm9jICAgUHJvY2Vzc29yCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIE1hY3JvIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBieXRlIGdpdmVuIHRoZSBjb21tYW5kLCBBbHQuIFByb2MsIGFuZAorICogUHJvY2Vzc29yIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGUgbWFjcm8gYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZXMgYXJlCisgKiBwcmVzaGlmdGVkLiAgVGhhdCBpcywgdGhlIHZhbHVlcyBmb3IgYWx0LiBwcm9jIGFyZSAwIGZvciB0cmFuc21pdCBhbmQKKyAqIDQgZm9yIHJlY2VpdmUuCisgKi8KKyNkZWZpbmUgQ09NTUFORF9CWVRFKGNvbW1hbmQsIGFsdF9wcm9jLCBwcm9jKSAoKGNvbW1hbmQpIHwgKGFsdF9wcm9jKSB8IChwcm9jKSkKKworLyoKKyAqIENvbW1hbmQgdmFsdWVzCisgKi8KKyNkZWZpbmUgQ01EX0hBTFQgICAgICAgIDB4MCAgICAgLyogU2VuZCBhIGhhbHQgdG8gdGhlIElOSUMgKi8KKyNkZWZpbmUgQ01EX1JVTiAgICAgICAgIDB4OCAgICAgLyogU3RhcnQgdGhlIGhhbHRlZCBJTklDICovCisjZGVmaW5lIENNRF9TVEVQICAgICAgICAweDEwICAgIC8qIFNpbmdsZSBzdGVwIHRoZSBpbmljICovCisjZGVmaW5lIENNRF9CUkVBSyAgICAgICAweDE4ICAgIC8qIFNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfUkVTRVRfQlJFQUsgMHgyMCAgICAvKiBSZXNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY21kICovCisjZGVmaW5lIENNRF9EVU1QICAgICAgICAweDI4ICAgIC8qIER1bXAgSU5JQyBtZW1vcnkgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfTE9BRCAgICAgICAgMHgzMCAgICAvKiBMb2FkIElOSUMgbWVtb3J5IC0gOCBieXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX01BUCAgICAgICAgIDB4MzggICAgLyogTWFwIG91dCBhIFJPTSBpbnN0cnVjdGlvbiAtIDggQkMgKi8KKyNkZWZpbmUgQ01EX0NBTV9PUFMgICAgIDB4MzggICAgLyogcGVyZm9ybSBvcHMgb24gc3BlY2lmaWMgQ0FNICovCisjZGVmaW5lIENNRF9YTVQgICAgICAgICAweDQwICAgIC8qIFRyYW5zbWl0IGZyYW1lICovCisjZGVmaW5lIENNRF9SQ1YgICAgICAgICAweDQ4ICAgIC8qIFJlY2VpdmUgZnJhbWUgKi8KKworLyoKKyAqIEFsdC4gUHJvYyB2YWx1ZXMKKyAqCisgKiBXaGVuIHRoZSBwcm9jIHZhbHVlIGlzIHNldCB0byB0aGUgdXRpbGl0eSBwcm9jZXNzb3IsIHRoZSBBbHQuIFByb2MKKyAqIHNwZWNpZmllcyB3aGljaCBwcm9jZXNzb3IgaGFuZGxlcyB0aGUgZGVidWdnaW5nLgorICovCisjZGVmaW5lIEFMVF9QUk9DX1RSQU5TTUlUICAgMHgwCisjZGVmaW5lIEFMVF9QUk9DX1JFQ0VJVkUgICAgMHg0CisKKy8qCisgKiBQcm9jIHZhbHVlcworICovCisjZGVmaW5lIFBST0NfSU5WQUxJRCAgICAgICAgMHgwCisjZGVmaW5lIFBST0NfTk9ORSAgICAgICAgICAgMHgwICAvKiBHaWdhYml0IHVzZSAqLworI2RlZmluZSBQUk9DX1RSQU5TTUlUICAgICAgIDB4MQorI2RlZmluZSBQUk9DX1JFQ0VJVkUgICAgICAgIDB4MgorI2RlZmluZSBQUk9DX1VUSUxJVFkgICAgICAgIDB4MworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogOCBieXRlIGNvbW1hbmQgc3RydWN0dXJlIGRlZmluaXRpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEJyZWFrIGFuZCBSZXNldCBCcmVhayBjb21tYW5kIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQlJFQUsgeworICAgIHVuc2lnbmVkIGNoYXIgICAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgICAgcmVzdmQ7CisgICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIE51bWJlciBvZiBleGVjdXRpb25zIGJlZm9yZSBicmVhayAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIEFkZHJlc3Mgb2YgYnJlYWsgcG9pbnQgKi8KK307CisKKy8qCisgKiBEdW1wIGFuZCBMb2FkIGNvbW1hbmQgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBkdW1wX2NtZCB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY21kOyAgICAgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBkZXNjOyAgICAgICAvKiBEZXNjcmlwdG9yIHZhbHVlcyAtIGRlZmluZWQgYmVsb3cgKi8KKyAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogbnVtYmVyIG9mIDQgYnl0ZSB3b3JkcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgZHVtcCBvciBsb2FkICovCit9OworCisvKgorICogUmVjZWl2ZSBvciBUcmFuc21pdCBhIGZyYW1lLgorICovCitzdHJ1Y3QgUkNWX09SX1hNVF9GUkFNRSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBNYWNJZDsgICAgICAvKiBNYWMgSUQgb2YgaW50ZXJmYWNlIC0gdHJhbnNtaXQgb25seSAqLworICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBMZW5ndGggb2YgZnJhbWUgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICBwYWQ7ICAgICAgICAvKiBub3QgdXNlZCAqLworfTsKKworLyoKKyAqIFZhbHVlcyBvZiBkZXNjIGZpZWxkIGluIERVTVBfT1JfTE9BRCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBERVNDX1JGSUxFICAgICAgICAgIDB4MCAgICAgLyogUmVnaXN0ZXIgZmlsZSAqLworI2RlZmluZSBERVNDX1NSQU0gICAgICAgICAgIDB4MSAgICAgLyogU1JBTSAqLworI2RlZmluZSBERVNDX0RSQU0gICAgICAgICAgIDB4MiAgICAgLyogRFJBTSAqLworI2RlZmluZSBERVNDX1FVRVVFICAgICAgICAgIDB4MyAgICAgLyogcXVldWVzICovCisjZGVmaW5lIERFU0NfUkVHICAgICAgICAgICAgMHg0ICAgICAvKiBHZW5lcmFsIHJlZ2lzdGVycyAocGMsIHN0YXR1cywgZXRjKSAqLworI2RlZmluZSBERVNDX1NFTlNFICAgICAgICAgIDB4NSAgICAgLyogU2Vuc2UgcmVnaXN0ZXIgKi8KKworLyogRGVzY3JpcHRvciBmaWVsZCBkZWZpbml0aW9ucyBmb3IgQ01EX0RVTVBfQ0FNICovCisjZGVmaW5lIERVTVBfQ0FNX0EgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVNUF9DQU1fQiAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIC8qIHVudXNlZCBhdCBwcmVzZW50ICovCisjZGVmaW5lIERVTVBfQ0FNX0MgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFVNUF9DQU1fRCAgICAgICAgICAgICAgMworI2RlZmluZSBTRUFSQ0hfQ0FNX0EgICAgICAgICAgICA0CisjZGVmaW5lIFNFQVJDSF9DQU1fQyAgICAgICAgICAgIDUKKworLyoKKyAqIE1hcCBjb21tYW5kIHRvIHJlcGxhY2UgYSBjb21tYW5kIGluIFJPTSB3aXRoIGEgY29tbWFuZCBpbiBXQ1MKKyAqLworc3RydWN0IE1BUCB7CisgICAgdW5zaWduZWQgY2hhciAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgIG5vdF91c2VkWzNdOworICAgIHVzaG9ydCAgbWFwX3RvOyAgICAgLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBpbiBXQ1MgKi8KKyAgICB1c2hvcnQgIG1hcF9vdXQ7ICAgIC8qIEluc3RydWN0aW9uIGFkZHJlc3MgaW4gUk9NICovCit9OworCisvKgorICogTWlzYyBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNMSUNfTUFYX1FVRVVFICAgICAgIDMyIC8qIFRvdGFsICMgb2YgcXVldWVzIG9uIHRoZSBJTklDICgwLTMxKSovCisjZGVmaW5lIFNMSUNfNE1BWF9SRUcgICAgICAgNTEyIC8qIFRvdGFsICMgb2YgNC1wb3J0IGZpbGUtcmVnaXN0ZXJzICAgICovCisjZGVmaW5lIFNMSUNfMU1BWF9SRUcgICAgICAgMzg0IC8qIFRvdGFsICMgb2YgZmlsZS1yZWdpc3RlcnMgICAgICAgICAgICovCisjZGVmaW5lIFNMSUNfR0JNQVhfUkVHICAgICAxMDI0IC8qIFRvdGFsICMgb2YgR2JpdCBmaWxlLXJlZ2lzdGVycyAgICAgICovCisjZGVmaW5lIFNMSUNfTlVNX1JFRyAgICAgICAgIDMyIC8qIG5vbi1maWxlLXJlZ2lzdGVycyA9IE5VTV9SRUcgaW4gdG0tc2ltYmEuaCAqLworI2RlZmluZSBTTElDX0dCX0NBTUFfU1pFICAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUJfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUFCX1NaRSAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUNfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTURfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUNEX1NaRSAgICAzMgorCisvKgorICogQ29yZWR1bXAgaGVhZGVyIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQ09SRV9RIHsKKyAgICB1MzIgICBxdWV1ZU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBxdWV1ZSAqLworICAgIHUzMiAgIHF1ZXVlc2l6ZTsgICAgICAgICAgLyogc2l6ZSBvZiBxdWV1ZSAqLworfTsKKworI2RlZmluZSBEUklWRVJfTkFNRV9TSVpFICAgIDMyCisKK3N0cnVjdCBzbGljY29yZV9oZHIgeworICAgIHVuc2lnbmVkIGNoYXIgZHJpdmVyX3ZlcnNpb25bRFJJVkVSX05BTUVfU0laRV07IC8qIERyaXZlciB2ZXJzaW9uIHN0cmluZyAqLworICAgIHUzMiAgIFJjdlJlZ09mZjsgICAgICAgICAgLyogT2Zmc2V0IG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgUmN2UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnT2ZmOyAgICAgICAgICAvKiBPZmZzZXQgb2YgdHJhbnNtaXQgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHRyYW5zbWl0IHJlZ2lzdGVycyAqLworICAgIHUzMiAgIEZpbGVSZWdPZmY7ICAgICAgICAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVyIGZpbGUgKi8KKyAgICB1MzIgICBGaWxlUmVnc2l6ZTsgICAgICAgIC8qIHNpemUgb2YgcmVnaXN0ZXIgZmlsZSAqLworICAgIHUzMiAgIFNyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIFNyYW0gKi8KKyAgICB1MzIgICBTcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgU3JhbSAqLworICAgIHUzMiAgIERyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIERyYW0gKi8KKyAgICB1MzIgICBEcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgRHJhbSAqLworICAgIENPUkVfUSAgICBxdWV1ZXNbU0xJQ19NQVhfUVVFVUVdOyAvKiBzaXplIGFuZCBvZmZzZXRzIG9mIHF1ZXVlcyAqLworICAgIHUzMiAgIENhbUFNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBBIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtQVNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBBICovCisgICAgdTMyICAgQ2FtQk1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEIgY29udGVudHMgKi8KKyAgICB1MzIgICBDYW1CU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEIgKi8KKyAgICB1MzIgICBDYW1DTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQyBjb250ZW50cyAqLworICAgIHUzMiAgIENhbUNTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQyAqLworICAgIHUzMiAgIENhbURNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBEIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtRFNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBEICovCit9OworCisvKgorICogZGVmaW5pdGlvbnMgbmVlZGVkIGZvciBvdXIga2VybmVsLW1vZGUgZ2RiIHN0dWIuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlZmluaXRpb25zICYgVHlwZWRlZnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQlVGTUFYICAgICAgMHgyMDAwMCAvKiAxMjhrIC0gc2l6ZSBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyICovCisjZGVmaW5lIEJVRk1BWFAyICAgIDUgICAgICAgLyogMioqNSAoMzIpIDRLIHBhZ2VzICovCisKKyNkZWZpbmUgSU9DVExfU0lNQkFfQlJFQUsgICAgICAgICAgIF9JT1coJ3MnLCAwLCB1bnNpZ25lZCBsb25nKQorLyogI2RlZmluZSBJT0NUTF9TSU1CQV9JTklUICAgICAgICAgICAgX0lPVygncycsIDEsIHVuc2lnbmVkIGxvbmcpICovCisjZGVmaW5lIElPQ1RMX1NJTUJBX0tJTExfVEdUX1BST0MgICBfSU9XKCdzJywgMiwgdW5zaWduZWQgbG9uZykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR2xvYmFsIHZhcmlhYmxlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUSFJFQURSRUNFSVZFICAgMSAgIC8qIGJpdCAwIG9mIFN0b3BwZWRUaHJlYWRzICovCisjZGVmaW5lIFRIUkVBRFRSQU5TTUlUICAyICAgLyogYml0IDEgb2YgU3RvcHBlZFRocmVhZHMgKi8KKyNkZWZpbmUgVEhSRUFEQk9USCAgICAgIDMgICAvKiBiaXQgMCBhbmQgMS4uICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RVTVBfSCAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzZTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCkBAIC0wLDAgKzEsODQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNody5oCisgKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gb3VyIGhhcmR3YXJlLgorICovCisjaWZuZGVmIF9fU0xJQ0hXX0hfXworI2RlZmluZSBfX1NMSUNIV19IX18KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0ggICAgMHgxMzlBCisjZGVmaW5lIFNMSUNfMUdCX0RFVklDRV9JRCAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0xJQ18yR0JfREVWSUNFX0lEICAgICAgICAgIDB4MDAwNyAgLypPYXNpcyBEZXZpY2UgSUQgKi8KKworI2RlZmluZSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEICAgMHgwMDA4CisKKyNkZWZpbmUgU0xJQ19OQlJfTUFDUyAgICAgIDQKKworI2RlZmluZSBTTElDX1JDVkJVRl9TSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFICAgIDM0CisjZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFICAgIDAKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUgICAgKFNMSUNfUkNWQlVGX1NJWkUgLSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgK1wKKwkJCQkJU0xJQ19SQ1ZCVUZfVEFJTFNJWkUpKQorCisjZGVmaW5lIFZHQlNUQVRfWFBFUlIgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9YRVJSU0hGVCAgICAgICAgMjUKKyNkZWZpbmUgVkdCU1RBVF9YQ1NFUlIgICAgICAgICAgMHgyMworI2RlZmluZSBWR0JTVEFUX1hVRkxPVyAgICAgICAgICAweDIyCisjZGVmaW5lIFZHQlNUQVRfWEhMRU4gICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVkdCU1RBVF9ORVRFUlIgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWR0JTVEFUX05FUlJTSEZUICAgICAgICAxNgorI2RlZmluZSBWR0JTVEFUX05FUlJNU0sgICAgICAgICAweDFmZgorI2RlZmluZSBWR0JTVEFUX05DU0VSUiAgICAgICAgICAweDEwMworI2RlZmluZSBWR0JTVEFUX05VRkxPVyAgICAgICAgICAweDEwMgorI2RlZmluZSBWR0JTVEFUX05ITEVOICAgICAgICAgICAweDEwMAorI2RlZmluZSBWR0JTVEFUX0xOS0VSUiAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFZHQlNUQVRfTEVSUk1TSyAgICAgICAgIDB4ZmYKKyNkZWZpbmUgVkdCU1RBVF9MREVBUkxZICAgICAgICAgMHg4NgorI2RlZmluZSBWR0JTVEFUX0xCT0ZMTyAgICAgICAgICAweDg1CisjZGVmaW5lIFZHQlNUQVRfTENPREVSUiAgICAgICAgIDB4ODQKKyNkZWZpbmUgVkdCU1RBVF9MREJMTkJMICAgICAgICAgMHg4MworI2RlZmluZSBWR0JTVEFUX0xDUkNFUlIgICAgICAgICAweDgyCisjZGVmaW5lIFZHQlNUQVRfTE9GTE8gICAgICAgICAgIDB4ODEKKyNkZWZpbmUgVkdCU1RBVF9MVUZMTyAgICAgICAgICAgMHg4MAorI2RlZmluZSBJUkhERFJfRkxFTl9NU0sgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIElSSEREUl9TVkFMSUQgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVJIRERSX0VSUiAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUXzgwMk9FICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRfVFBPRkxPICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfODAyVUUgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9SQ1ZFICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0JVRkYgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ0FSUkUgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9MT05HRSAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1BSRUEgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ1JDICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9EUkJMICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NPREUgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfVFBDU1VNICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9UUEhMRU4gICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQQ1NVTSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBMRVJSICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUEhFUlIgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNMSUNfTUFYNjRfQkNOVCAgICAgICAgIDIzCisjZGVmaW5lIFNMSUNfTUFYMzJfQkNOVCAgICAgICAgIDI2CisjZGVmaW5lIElIQ01EX1hNVF9SRVEgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSUhGTEdfSUZTSEZUICAgICAgICAgICAgMgorI2RlZmluZSBTTElDX1JTUEJVRl9TSVpFICAgICAgICAzMgorCisjZGVmaW5lIFNMSUNfUkVTRVRfTUFHSUMgICAgICAgIDB4REVBRAorI2RlZmluZSBJQ1JfSU5UX09GRiAgICAgICAgICAgICAwCisjZGVmaW5lIElDUl9JTlRfT04gICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUNSX0lOVF9NQVNLICAgICAgICAgICAgMgorCisjZGVmaW5lIElTUl9FUlIgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVNSX1JDViAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJU1JfQ01EICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElTUl9JTyAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQyAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJU1JfTEVWRU5UICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIElTUl9STUlTUyAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQ0VSUiAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJU1JfWERST1AgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIElTUl9VUENCU1kgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX0VWTVNLICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBJU1JfUElOR01BU0sgICAgICAgICAgICAweDAwNzAwMDAwCisjZGVmaW5lIElTUl9QSU5HRFNNQVNLICAgICAgICAgIDB4MDA3MTAwMDAKKyNkZWZpbmUgSVNSX1VQQ01BU0sgICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBTTElDX1dDU19TVEFSVCAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4gICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0ggICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfUE1fTUFYUEFUVEVSTlMgICAgIDYKKyNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRSAgICAgMTI4CisjZGVmaW5lIFNMSUNfUE1DQVBTX1dBS0VPTkxBTiAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJQ1JfUkVHX1BDUiAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBNSUlDUl9SRUdfNCAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIE1JSUNSX1JFR185ICAgICAgICAgICAgIDB4MDAwOTAwMDAKKyNkZWZpbmUgTUlJQ1JfUkVHXzE2ICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBQQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgUENSX1BPV0VSRE9XTiAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwMCAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUENSX0FVVE9ORUcgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBDUl9BVVRPTkVHX1JTVCAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQQ1JfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxMDAKKyNkZWZpbmUgUFNSX0xJTktVUCAgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgUEFSX0FEVjEwMEZEICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFBBUl9BRFYxMDBIRCAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQQVJfQURWMTBGRCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUEFSX0FEVjEwSEQgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0UgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBQQVJfODAyXzMgICAgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBQQVJfQURWMTAwMFhGRCAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYSEQgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0VfRklCRVIgICAgIDB4MDE4MAorCisjZGVmaW5lIFBHQ19BRFYxMDAwRkQgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQR0NfQURWMTAwMEhEICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgU0VFUV9MSU5LRkFJTCAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFNFRVFfU1BFRUQgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBTRUVRX0RVUExFWCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgVERLX0RVUExFWCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFRES19TUEVFRCAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPTiAgICAgICAweDAwNjgKKyNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST0ZGICAgICAgMHgwMDA4CisjZGVmaW5lIE1SVl9TUEVFRF8xMDAwICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBNUlZfU1BFRURfMTAwICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE1SVl9GVUxMRFVQTEVYICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNUlZfTElOS1VQICAgICAgICAgICAgICAweDA0MDAKKworI2RlZmluZSBHSUdfTElOS1VQICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0lHX0ZVTExEVVBMRVggICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdJR19TUEVFRF9NQVNLICAgICAgICAgIDB4MDAwQworI2RlZmluZSBHSUdfU1BFRURfMTAwMCAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgR0lHX1NQRUVEXzEwMCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdJR19TUEVFRF8xMCAgICAgICAgICAgIDB4MDAwMAorCisjZGVmaW5lIE1DUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTUNSX0NSQ0VOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBNQ1JfRlVMTEQgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIE1DUl9QQUQgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgTUNSX1JFVFJZTEFURSAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBNQ1JfQk9MX1NISUZUICAgICAgICAgICAyMQorI2RlZmluZSBNQ1JfSVBHMV9TSElGVCAgICAgICAgICAxNAorI2RlZmluZSBNQ1JfSVBHMl9TSElGVCAgICAgICAgICA3CisjZGVmaW5lIE1DUl9JUEczX1NISUZUICAgICAgICAgIDAKKyNkZWZpbmUgR01DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHTUNSX0dCSVQgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdNQ1JfRlVMTEQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR01DUl9HQVBCQl9TSElGVCAgICAgICAgMTQKKyNkZWZpbmUgR01DUl9HQVBSMV9TSElGVCAgICAgICAgNworI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUICAgICAgICAwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwMCAgICAgICAgIDB4NjAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAwICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAgICAgICAgICAweDQwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwICAgICAgICAgIDB4NzAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAgICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMCAgICAgICAgICAweDQwCisjZGVmaW5lIFhDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgWENSX1hNVEVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBYQ1JfUEFVU0VFTiAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFhDUl9MT0FEUk5HICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZBTEwgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkJBRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfQ1RMRU4gICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJDUl9BRERSQUVOICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1hDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHWENSX1hNVEVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdYQ1JfUEFVU0VFTiAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWQUxMICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZCQUQgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUkNSX0NUTEVOICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdSQ1JfQUREUkFFTiAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVCAgICAgMTcKKyNkZWZpbmUgR1JDUl9IQVNIU0laRSAgICAgICAgICAgMTQKKworI2RlZmluZSBTTElDX0VFUFJPTV9JRCAgICAgICAgMHhBNUE1CisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMkdCICAgICAoNjQgKiAxMDI0KQorI2RlZmluZSBTTElDX1NSQU1fU0laRTFHQiAgICAgKDMyICogMTAyNCkKKyNkZWZpbmUgU0xJQ19IT1NUSURfREVGQVVMVCAgIDB4RkZGRiAgICAgIC8qIHVuaW5pdGlhbGl6ZWQgaG9zdGlkICovCisjZGVmaW5lIFNMSUNfTkJSX01BQ1MgICAgICAgICA0CisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgIDAKKyNlbHNlCisjdW5kZWYgIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZW5kaWYKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZWxzZQorI3VuZGVmICBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZW5kaWYKKworc3RydWN0IHNsaWNfcmN2YnVmIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQxWzZdOworICAgIHVzaG9ydCAgICBwYWQyOworICAgIHUzMiAgIHBhZDM7CisgICAgdTMyICAgcGFkNDsKKyAgICB1MzIgICBidWZmZXI7CisgICAgdTMyICAgbGVuZ3RoOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQ1OworICAgIHVzaG9ydCAgICBwYWQ2OworICAgIHVuc2lnbmVkIGNoYXIgICAgIGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOworfTsKKworIHN0cnVjdCBzbGljX2hkZHJfd2RzIHsKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisJdTMyICAgIGZyYW1lX3N0YXR1czsKKwl1MzIgICAgZnJhbWVfc3RhdHVzX2I7CisJdTMyICAgIHRpbWVfc3RhbXA7CisJdTMyICAgIGNoZWNrc3VtOworICAgIH0gaGRyc18xNHBvcnQ7CisgICAgc3RydWN0IHsKKwl1MzIgICAgZnJhbWVfc3RhdHVzOworCXVzaG9ydCAgICAgQnl0ZUNudDsKKwl1c2hvcnQgICAgIFRwQ2hrc3VtOworCXVzaG9ydCAgICAgQ3R4SGFzaDsKKwl1c2hvcnQgICAgIE1hY0hhc2g7CisJdTMyICAgIEJ1ZkxuazsKKyAgICB9IGhkcnNfZ2JpdDsKKyAgfSB1MDsKK307CisKKyNkZWZpbmUgZnJhbWVfc3RhdHVzMTQgICAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0ICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKKyNkZWZpbmUgZnJhbWVfc3RhdHVzR0IgICAgICAgIHUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKKworc3RydWN0IHNsaWNfaG9zdDY0c2cgeworCXUzMiAgICAgICAgcGFkZHJsOworCXUzMiAgICAgICAgcGFkZHJoOworCXUzMiAgICAgICAgbGVuZ3RoOworfTsKKworc3RydWN0IHNsaWNfaG9zdDY0X2NtZCB7CisgICAgdTMyICAgICAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgICAgIFJTVkQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGNvbW1hbmQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGZsYWdzOworICAgIHVuaW9uIHsKKwl1c2hvcnQgICAgICAgICAgcnN2MTsKKwl1c2hvcnQgICAgICAgICAgcnN2MjsKKyAgICB9IHUwOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgICAgICB0b3RsZW47CisJCXN0cnVjdCBzbGljX2hvc3Q2NHNnICAgIGJ1ZnNbU0xJQ19NQVg2NF9CQ05UXTsKKwl9IHNsaWNfYnVmZmVyczsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3Qgc2xpY19yc3BidWYgeworICAgIHUzMiAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgcGFkMDsKKyAgICB1MzIgICBwYWQxOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQyWzRdOworCit9OworCitzdHJ1Y3Qgc2xpY19yZWdzIHsKKwl1MzIJc2xpY19yZXNldDsJCS8qIFJlc2V0IFJlZ2lzdGVyICovCisJdTMyCXBhZDA7CisKKwl1MzIJc2xpY19pY3I7CQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworCXUzMglwYWQyOworI2RlZmluZSBTTElDX0lDUgkJMHgwMDA4CisKKwl1MzIJc2xpY19pc3A7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJcGFkMTsKKyNkZWZpbmUgU0xJQ19JU1AJCTB4MDAxMAorCisgICAgdTMyCXNsaWNfaXNyOwkJLyogSW50ZXJydXB0IHN0YXR1cyAqLworCXUzMglwYWQzOworI2RlZmluZSBTTElDX0lTUgkJMHgwMDE4CisKKyAgICB1MzIJc2xpY19oYmFyOwkJLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkNDsKKwkvKiAzMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgaGRyIGJ1ZmZlcnMKKwkgICAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJICAgQnVmZmVycyBhcmUgMjU2IGJ5dGVzIGxvbmcgb24gMjU2LWJ5dGUgYm91bmRhcmllcy4gKi8KKyNkZWZpbmUgU0xJQ19IQkFSCQkweDAwMjAKKyNkZWZpbmUgU0xJQ19IQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgorCisgICAgdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KKwl1MzIJCXBhZDU7CisKKwkvKiA0IHNldHMgb2YgcmVnaXN0ZXJzOyBCdWZmZXJzIGFyZSAySyBieXRlcyBsb25nIDIgcGVyIDRLIHBhZ2UuICovCisjZGVmaW5lIFNMSUNfREJBUgkJMHgwMDI4CisjZGVmaW5lIFNMSUNfREJBUl9TSVpFCQkyMDQ4CisKKyAgICB1MzIJc2xpY19jYmFyOwkJIAkvKiBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuKi8KKwkvKiAxIHBlciBYTVQgaW50ZXJmYWNlCisJICAgMzEtNSAtIHBoeSBhZGRyIG9mIGhvc3QgY29tbWFuZCBidWZmZXIKKwkgICAgNC0wIC0gbGVuZ3RoIG9mIGNtZCBpbiBtdWx0aXBsZXMgb2YgMzIgYnl0ZXMKKwkgICBCdWZmZXJzIGFyZSAzMiBieXRlcyB1cCB0byA1MTIgYnl0ZXMgbG9uZyAqLworI2RlZmluZSBTTElDX0NCQVIJCTB4MDAzMAorI2RlZmluZSBTTElDX0NCQVJfTEVOX01TSwkweDAwMDAwMDFGCisjZGVmaW5lIFNMSUNfQ0JBUl9BTElHTgkJMHgwMDAwMDAyMAorCisJdTMyCXNsaWNfd2NzOwkJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCisjZGVmaW5lCVNMSUNfV0NTCQkweDAwMzQKKyNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQJCTB4ODAwMDAwMDAJLypTdGFydCB0aGUgU0xJQyAoSnVtcCB0byBXQ1MpKi8KKyNkZWZpbmUgU0xJQ19XQ1NfQ09NUEFSRQkweDQwMDAwMDAwCS8qIENvbXBhcmUgd2l0aCB2YWx1ZSBpbiBXQ1MqLworCisgICAgdTMyCXNsaWNfcmJhcjsJCS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkNzsKKwkgLyozMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgcmVzcG9uc2UgYnVmZmVycworCSAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJIEJ1ZmZlcnMgYXJlIDMyIGJ5dGVzIGxvbmcgb24gMzItYnl0ZSBib3VuZGFyaWVzLiovCisjZGVmaW5lIFNMSUNfUkJBUgkJMHgwMDM4CisjZGVmaW5lIFNMSUNfUkJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xJQ19SQkFSX1NJWkUJCTMyCisKKwl1MzIJc2xpY19zdGF0czsJCS8qIHJlYWQgc3RhdGlzdGljcyAoVVBSKSAqLworCXUzMgkJcGFkODsKKyNkZWZpbmUJU0xJQ19SU1RBVAkJMHgwMDQwCisKKwl1MzIJc2xpY19ybHNyOwkJCS8qIHJlYWQgbGluayBzdGF0dXMgKi8KKwl1MzIJCXBhZDk7CisjZGVmaW5lIFNMSUNfTFNUQVQJCTB4MDA0OAorCisJdTMyCXNsaWNfd21jZmc7CQkJLyogV3JpdGUgTWFjIENvbmZpZyAqLworCXUzMgkJcGFkMTA7CisjZGVmaW5lCVNMSUNfV01DRkcJCTB4MDA1MAorCisJdTMyCXNsaWNfd3BoeTsJCQkvKiBXcml0ZSBwaHkgcmVnaXN0ZXIgKi8KKwl1MzIJCXBhZDExOworI2RlZmluZSBTTElDX1dQSFkJCTB4MDA1OAorCisJdTMyCXNsaWNfcmNiYXI7CQkJLypSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCisJdTMyCQlwYWQxMjsKKyNkZWZpbmUJU0xJQ19SQ0JBUgkJMHgwMDYwCisKKwl1MzIJc2xpY19yY29uZmlnOwkJLyogUmVhZCBTTElDIENvbmZpZyovCisJdTMyCQlwYWQxMzsKKyNkZWZpbmUgU0xJQ19SQ09ORklHCTB4MDA2OAorCisJdTMyCXNsaWNfaW50YWdnOwkJLyogSW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRpbWUqLworCXUzMgkJcGFkMTQ7CisjZGVmaW5lIFNMSUNfSU5UQUdHCQkweDAwNzAKKworCXUzMglzbGljX3d4Y2ZnOwkJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KKwl1MzIJCXBhZDE2OworI2RlZmluZQlTTElDX1dYQ0ZHCQkweDAwNzgKKworCXUzMglzbGljX3dyY2ZnOwkJLyogV3JpdGUgUkNWIGNvbmZpZyByZWcqLworCXUzMgkJcGFkMTc7CisjZGVmaW5lCVNMSUNfV1JDRkcJCTB4MDA4MAorCisJdTMyCXNsaWNfd3JhZGRyYWw7CQkvKiBXcml0ZSByY3YgYWRkciBhIGxvdyovCisJdTMyCQlwYWQxODsKKyNkZWZpbmUJU0xJQ19XUkFERFJBTAkweDAwODgKKworCXUzMglzbGljX3dyYWRkcmFoOwkJLyogV3JpdGUgcmN2IGFkZHIgYSBoaWdoKi8KKwl1MzIJCXBhZDE5OworI2RlZmluZQlTTElDX1dSQUREUkFICTB4MDA5MAorCisJdTMyCXNsaWNfd3JhZGRyYmw7CQkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCisJdTMyCQlwYWQyMDsKKyNkZWZpbmUJU0xJQ19XUkFERFJCTAkweDAwOTgKKworCXUzMglzbGljX3dyYWRkcmJoOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KKwl1MzIJCXBhZDIxOworI2RlZmluZQlTTElDX1dSQUREUkJICTB4MDBhMAorCisJdTMyCXNsaWNfbWNhc3Rsb3c7CQkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJCXBhZDIyOworI2RlZmluZQlTTElDX01DQVNUTE9XCTB4MDBhOAorCisJdTMyCXNsaWNfbWNhc3RoaWdoOwkJLyogSGlnaCBiaXRzIG9mIG1jYXN0IG1hc2sqLworCXUzMgkJcGFkMjM7CisjZGVmaW5lCVNMSUNfTUNBU1RISUdICTB4MDBiMAorCisJdTMyCXNsaWNfcGluZzsJCQkvKiBQaW5nIHRoZSBjYXJkKi8KKwl1MzIJCXBhZDI0OworI2RlZmluZSBTTElDX1BJTkcJCTB4MDBiOAorCisJdTMyCXNsaWNfZHVtcF9jbWQ7CQkvKiBEdW1wIGNvbW1hbmQgKi8KKwl1MzIJCXBhZDI1OworI2RlZmluZSBTTElDX0RVTVBfQ01ECTB4MDBjMAorCisJdTMyCXNsaWNfZHVtcF9kYXRhOwkJLyogRHVtcCBkYXRhIHBvaW50ZXIgKi8KKwl1MzIJCXBhZDI2OworI2RlZmluZSBTTElDX0RVTVBfREFUQQkweDAwYzgKKworCXUzMglzbGljX3BjaXN0YXR1czsJLyogUmVhZCBjYXJkJ3MgcGNpX3N0YXR1cyByZWdpc3RlciAqLworCXUzMgkJcGFkMjc7CisjZGVmaW5lCVNMSUNfUENJU1RBVFVTCTB4MDBkMAorCisJdTMyCXNsaWNfd3Job3N0aWQ7CQkvKiBXcml0ZSBob3N0aWQgZmllbGQgKi8KKwl1MzIJCXBhZDI4OworI2RlZmluZSBTTElDX1dSSE9TVElECQkgMHgwMGQ4CisjZGVmaW5lIFNMSUNfUkRIT1NUSURfMUdCCSAweDE1NTQKKyNkZWZpbmUgU0xJQ19SREhPU1RJRF8yR0IJIDB4MTU1NAorCisJdTMyCXNsaWNfbG93X3Bvd2VyOwkvKiBQdXQgY2FyZCBpbiBhIGxvdyBwb3dlciBzdGF0ZSAqLworCXUzMgkJcGFkMjk7CisjZGVmaW5lIFNMSUNfTE9XX1BPV0VSCTB4MDBlMAorCisJdTMyCXNsaWNfcXVpZXNjZTsJLyogZm9yY2Ugc2xpYyBpbnRvIHF1aWVzY2VudCBzdGF0ZQorCQkJCQkgYmVmb3JlIHNvZnQgcmVzZXQgKi8KKwl1MzIJCXBhZDMwOworI2RlZmluZSBTTElDX1FVSUVTQ0UJMHgwMGU4CisKKwl1MzIJc2xpY19yZXNldF9pZmFjZTsJLyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLworCXUzMgkJcGFkMzE7CisjZGVmaW5lIFNMSUNfUkVTRVRfSUZBQ0UgMHgwMGYwCisKKyAgICB1MzIJc2xpY19hZGRyX3VwcGVyOwkvKiBCaXRzIDYzLTMyIGZvciBob3N0IGkvZiBhZGRycyAqLworCXUzMgkJcGFkMzI7CisjZGVmaW5lIFNMSUNfQUREUl9VUFBFUgkweDAwZjggLypSZWdpc3RlciBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBpdCBoYXMgY2hhbmdlZCovCisKKyAgICB1MzIJc2xpY19oYmFyNjQ7CQkvKiA2NCBiaXQgSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkMzM7CisjZGVmaW5lIFNMSUNfSEJBUjY0CQkweDAxMDAKKworICAgIHUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCisJdTMyCQlwYWQzNDsKKyNkZWZpbmUgU0xJQ19EQkFSNjQJCTB4MDEwOAorCisgICAgdTMyCXNsaWNfY2JhcjY0OwkgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCisJdTMyCQlwYWQzNTsKKyNkZWZpbmUgU0xJQ19DQkFSNjQJCTB4MDExMAorCisgICAgdTMyCXNsaWNfcmJhcjY0OwkJLyogNjQgYml0IFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkMzY7CisjZGVmaW5lIFNMSUNfUkJBUjY0CQkweDAxMTgKKworCXUzMglzbGljX3JjYmFyNjQ7CQkvKiA2NCBiaXQgUmN2IENtZCBidWYgYWRkciByZWcqLworCXUzMgkJcGFkMzc7CisjZGVmaW5lCVNMSUNfUkNCQVI2NAkweDAxMjAKKworCXUzMglzbGljX3N0YXRzNjQ7CQkvKnJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikqLworCXUzMgkJcGFkMzg7CisjZGVmaW5lCVNMSUNfUlNUQVQ2NAkweDAxMjgKKworCXUzMglzbGljX3Jjdl93Y3M7CS8qRG93bmxvYWQgR2lnYWJpdCBSQ1Ygc2VxdWVuY2VyIHVjb2RlKi8KKwl1MzIJCXBhZDM5OworI2RlZmluZSBTTElDX1JDVl9XQ1MJMHgwMTMwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNICTB4ODAwMDAwMDAKKworCXUzMglzbGljX3dydmxhbmlkOwkJLyogV3JpdGUgVmxhbklkIGZpZWxkICovCisJdTMyCQlwYWQ0MDsKKyNkZWZpbmUgU0xJQ19XUlZMQU5JRAkweDAxMzgKKworCXUzMglzbGljX3JlYWRfeGZfaW5mbzsgIC8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLworCXUzMgkJcGFkNDE7CisjZGVmaW5lIFNMSUNfUkVBRF9YRl9JTkZPIAkweDAxNDAKKworCXUzMglzbGljX3dyaXRlX3hmX2luZm87IC8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJCXBhZDQyOworI2RlZmluZSBTTElDX1dSSVRFX1hGX0lORk8gCTB4MDE0OAorCisJdTMyCVJTVkQxOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQzOworCisJdTMyCVJTVkQyOyAJICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ0OworCisJdTMyCVJTVkQzOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ1OworCisJdTMyCVJTVkQ0OyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ2OworCisJdTMyCXNsaWNfdGlja3NfcGVyX3NlYzsgLyogV3JpdGUgY2FyZCB0aWNrcyBwZXIgc2Vjb25kICovCisJdTMyCQlwYWQ0NzsKKyNkZWZpbmUgU0xJQ19USUNLU19QRVJfU0VDCTB4MDE3MAorCit9OworCitlbnVtIFVQUl9SRVFVRVNUIHsKKyAgICBTTElDX1VQUl9TVEFUUywKKyAgICBTTElDX1VQUl9STFNSLAorICAgIFNMSUNfVVBSX1dDRkcsCisgICAgU0xJQ19VUFJfUkNPTkZJRywKKyAgICBTTElDX1VQUl9SUEhZLAorICAgIFNMSUNfVVBSX0VOTEIsCisgICAgU0xJQ19VUFJfRU5DVCwKKyAgICBTTElDX1VQUl9QRFdOLAorICAgIFNMSUNfVVBSX1BJTkcsCisgICAgU0xJQ19VUFJfRFVNUCwKK307CisKK3N0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4geworICAgIHUzMiAgICBwYXR0ZXJubGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBwYXR0ZXJuW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworfTsKKworc3RydWN0IGluaWNwbV9zdGF0ZSB7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcmNhcHM7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcnN0YXRlOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9saW5rc3RhdHVzOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9tYWdpY3BhY2tldDsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfZnJhbWVwYXR0ZXJuOworICAgIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gICAgd2FrZXBhdHRlcm5bU0xJQ19QTV9NQVhQQVRURVJOU107Cit9OworCitzdHJ1Y3Qgc2xpY3BtX3BhY2tldF9wYXR0ZXJuIHsKKyAgICB1MzIgICAgIHByaW9yaXR5OworICAgIHUzMiAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICBtYXNrc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5vZmZzZXQ7CisgICAgdTMyICAgICBwYXR0ZXJuc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5mbGFnczsKK307CisKK2VudW0gc2xpY3BtX3Bvd2VyX3N0YXRlIHsKKyAgICBzbGljcG1fc3RhdGVfdW5zcGVjaWZpZWQgPSAwLAorICAgIHNsaWNwbV9zdGF0ZV9kMCwKKyAgICBzbGljcG1fc3RhdGVfZDEsCisgICAgc2xpY3BtX3N0YXRlX2QyLAorICAgIHNsaWNwbV9zdGF0ZV9kMywKKyAgICBzbGljcG1fc3RhdGVfbWF4aW11bQorfTsKKworc3RydWN0IHNsaWNwbV93YWtldXBfY2FwYWJpbGl0aWVzIHsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX21hZ2ljX3BhY2tldF93YWtldXA7CisgICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9wYXR0ZXJuX3dha2V1cDsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX2xpbmtfY2hhbmdlX3dha2V1cDsKK307CisKK3N0cnVjdCBzbGljX3BucF9jYXBhYmlsaXRpZXMgeworCXUzMiBmbGFnczsKKwlzdHJ1Y3Qgc2xpY3BtX3dha2V1cF9jYXBhYmlsaXRpZXMgd2FrZXVwX2NhcGFiaWxpdGllczsKK307CisKK3N0cnVjdCB4bXRfc3RhdHMgeworCXUzMiB4bWl0X3RjcF9ieXRlczsKKwl1MzIgeG1pdF90Y3Bfc2VnczsKKwl1MzIgeG1pdF9ieXRlczsKKwl1MzIgeG1pdF9jb2xsaXNpb25zOworCXUzMiB4bWl0X3VuaWNhc3RzOworCXUzMiB4bWl0X290aGVyX2Vycm9yOworCXUzMiB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zOworfTsKKworc3RydWN0IHJjdl9zdGF0cyB7CisJdTMyIHJjdl90Y3BfYnl0ZXM7CisJdTMyIHJjdl90Y3Bfc2VnczsKKwl1MzIgcmN2X2J5dGVzOworCXUzMiByY3ZfdW5pY2FzdHM7CisJdTMyIHJjdl9vdGhlcl9lcnJvcjsKKwl1MzIgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHhtdF9zdGF0c2diIHsKKwl1NjQgeG1pdF90Y3BfYnl0ZXM7CisJdTY0IHhtaXRfdGNwX3NlZ3M7CisJdTY0IHhtaXRfYnl0ZXM7CisJdTY0IHhtaXRfY29sbGlzaW9uczsKKwl1NjQgeG1pdF91bmljYXN0czsKKwl1NjQgeG1pdF9vdGhlcl9lcnJvcjsKKwl1NjQgeG1pdF9leGNlc3NfY29sbGlzaW9uczsKK307CisKK3N0cnVjdCByY3Zfc3RhdHNnYiB7CisJdTY0IHJjdl90Y3BfYnl0ZXM7CisJdTY0IHJjdl90Y3Bfc2VnczsKKwl1NjQgcmN2X2J5dGVzOworCXU2NCByY3ZfdW5pY2FzdHM7CisJdTY0IHJjdl9vdGhlcl9lcnJvcjsKKwl1NjQgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHNsaWNfc3RhdHMgeworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzICB4bXQxMDA7CisJCXN0cnVjdCByY3Zfc3RhdHMgIHJjdjEwMDsKKwl9IHN0YXRzXzEwMDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzZ2IgICAgIHhtdEdCOworCQlzdHJ1Y3QgcmN2X3N0YXRzZ2IgICAgIHJjdkdCOworCX0gc3RhdHNfR0I7CisgICAgfSB1OworfTsKKworI2RlZmluZSB4bWl0X3RjcF9zZWdzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3Bfc2VncworI2RlZmluZSB4bWl0X3RjcF9ieXRlczEwMCAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlczEwMCAgICAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zMTAwICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yMTAwICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9vdGhlcl9lcnJvcgorI2RlZmluZSB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zMTAwICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9leGNlc3NfY29sbGlzaW9ucworI2RlZmluZSByY3ZfdGNwX3NlZ3MxMDAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXMxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfYnl0ZXMKKyNkZWZpbmUgcmN2X3VuaWNhc3RzMTAwICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3IxMDAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfZHJvcHMKKyNkZWZpbmUgeG1pdF90Y3Bfc2Vnc19nYiAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9zZWdzCisjZGVmaW5lIHhtaXRfdGNwX2J5dGVzX2diICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlc19nYiAgICAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X2J5dGVzCisjZGVmaW5lIHhtaXRfY29sbGlzaW9uc19nYiAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHNfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yX2diICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uc19nYiAgdS5zdGF0c19HQi54bXRHQi54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCisKKyNkZWZpbmUgcmN2X3RjcF9zZWdzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKKyNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYiAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0c19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCisjZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYiAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCisKK3N0cnVjdCBzbGljX2NvbmZpZ19tYWMgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG1hY2FkZHJBWzZdOworfTsKKworI2RlZmluZSBBVEtfRlJVX0ZPUk1BVCAgICAgICAgMHgwMAorI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQgICAgMHgwMQorI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQgICAgMHgwMgorI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQgICAgMHgwMworI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQgICAgMHgwNAorI2RlZmluZSBOT19GUlVfRk9STUFUICAgICAgICAgMHhGRgorCitzdHJ1Y3QgYXRrX2ZydSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VyaWFsWzE0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMV9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGNvbW1vZGl0eTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzdXBwbGllclsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBkYXRlWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcXVlbmNlWzNdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFsxM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMl9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhcnRbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbNV07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVszXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbN107Cit9OworCitzdHJ1Y3QgdmVuZG9yM19mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworfTsKKworc3RydWN0IHZlbmRvcjRfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBudW1iZXJbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFydFs4XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICB2ZXJzaW9uWzhdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKK307CisKK3VuaW9uIG9lbWZydSB7CisgICAgc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7CisgICAgc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisgICAgc3RydWN0IHZlbmRvcjNfZnJ1ICAgdmVuZG9yM19mcnU7CisgICAgc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7Cit9OworCisvKgorICAgU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKKyovCitzdHJ1Y3Qgc2xpY19lZXByb20geworCXVzaG9ydAkJSWQ7CQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLworCXVzaG9ydAkJRWVjb2RlU2l6ZTsJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAwMiBGbGFzaCBzaXplICovCisJdXNob3J0CQlFZXByb21TaXplOwkvKiAwMyBFRVBST00gU2l6ZSAqLworCXVzaG9ydAkJVmVuZG9ySWQ7CS8qIDA0IFZlbmRvciBJRCAqLworCXVzaG9ydAkJRGV2aWNlSWQ7CS8qIDA1IERldmljZSBJRCAqLworCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uSWQ7CS8qIDA2IFJldmlzaW9uIElEICovCisJdW5zaWduZWQgY2hhcgkJQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlICovCisJdW5zaWduZWQgY2hhcgkJRGJnSW50UGluOwkvKiAwOCBEZWJ1ZyBJbnRlcnJ1cHQgcGluICovCisJdW5zaWduZWQgY2hhcgkJTmV0SW50UGluMDsJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDA5IE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVBjaVN0YXR1czsJLyogMTAgUENJIFN0YXR1cyAqLworCXVzaG9ydAkJU3ViU3lzVklkOwkvKiAxMSBTdWJzeXN0ZW0gVmVuZG9yIElkICovCisJdXNob3J0CQlTdWJTeXNJZDsJLyogMTIgU3Vic3lzdGVtIElEICovCisJdXNob3J0CQlEYmdEZXZJZDsJLyogMTMgRGVidWcgRGV2aWNlIElkICovCisJdXNob3J0CQlEcmFtUm9tRm47CS8qIDE0IERyYW0vUm9tIGZ1bmN0aW9uICovCisJdXNob3J0CQlEU2l6ZTJQY2k7CS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNjRLKSAqLworCXVzaG9ydAlSU2l6ZTJQY2k7CS8qIDE2IFJPTSBleHRlbnNpb24gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNGspICovCisJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4xOy8qIDE3IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAxCisJCQkJICAgIChzaW1iYS9sZW9uZSBvbmx5KSAqLworCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMjsgLypOZXR3b3JrIEludGVyZmFjZSBQaW4gMiAoc2ltYmEvbGVvbmUgb25seSkqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4zOy8qMTggTmV0d29yayBJbnRlcmZhY2UgUGluIDMKKwkJCQkJICAgKHNpbWJhIG9ubHkpKi8KKwkJdW5zaWduZWQgY2hhciBGcmVlVGltZTsvKkZyZWVUaW1lIHNldHRpbmcgKGxlb25lL21vamF2ZSBvbmx5KSAqLworCX0gdTE7CisJdW5zaWduZWQgY2hhcglUQkljdGw7CS8qICAgIDEwLWJpdCBpbnRlcmZhY2UgY29udHJvbCAoTW9qYXZlIG9ubHkpICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogMTkgRFJBTSBzaXplIChieXRlcyAqIDY0aykgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBNYWMgSW50ZXJmYWNlIFNwZWNpZmljIHBvcnRpb25zICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCU1hY0luZm9bU0xJQ19OQlJfTUFDU107CisJCX0gbWFjOwkJCQkvKiBNQUMgYWNjZXNzIGZvciBhbGwgYm9hcmRzICovCisJCXN0cnVjdCB7CisJCQkvKiB1c2UgYWJvdmUgc3RydWN0IGZvciBNQUMgYWNjZXNzICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCXBhZFtTTElDX05CUl9NQUNTIC0gMV07CisJCQl1c2hvcnQJCURldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCQl1bnNpZ25lZCBjaGFyCUludFBpbjI7CS8qIEludGVycnVwdCBwaW4gZm9yCisJCQkJCQkJICAgMm5kIFBDSSBmdW5jdGlvbiAqLworCQkJdW5zaWduZWQgY2hhcglDbGFzc0NvZGUyWzNdOwkvKiBDbGFzcyBDb2RlIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCX0gbW9qYXZlOwkvKiAybmQgZnVuY3Rpb24gYWNjZXNzIGZvciBnaWdhYml0IGJvYXJkICovCisJfSB1MjsKKwl1c2hvcnQJCUNmZ0J5dGU2OwkvKiBDb25maWcgQnl0ZSA2ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVzaG9ydAkJTndDbGtDdHJsczsJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KKwl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwlzdHJ1Y3QgYXRrX2ZydSAgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBja3N1bSBieXRlcworCQkJCSAqKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kICovCit9OworCisvKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE9hc2lzICovCitzdHJ1Y3Qgb3NsaWNfZWVwcm9tIHsKKwl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdXNob3J0CQlFZWNvZGVTaXplOwkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdXNob3J0CQlGbGFzaENvbmZpZzA7CS8qIDAyIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAwICovCisJdXNob3J0CQlGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCisJdXNob3J0CQlWZW5kb3JJZDsJLyogMDQgVmVuZG9yIElEICovCisJdXNob3J0CQlEZXZpY2VJZDsJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLworCXVuc2lnbmVkIGNoYXIJUmV2aXNpb25JZDsJLyogMDYgUmV2aXNpb24gSUQgKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KKwl1bnNpZ25lZCBjaGFyCUludFBpbjE7CS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCisJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCisJdW5zaWduZWQgY2hhcglJbnRQaW4wOwkvKiAgICBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMCovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEzIFN1YnN5c3RlbSBJRCAqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLworCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KKwl1c2hvcnQJCVJTaXplMlBjaTsJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8KKwkJCQkJCVBDSSAoYnl0ZXMgLyA0SykgKi8KKwl1c2hvcnQJCURldmljZUlkMTsJLyogMTcgRGV2aWNlIElkIChmdW5jdGlvbiAxKSAqLworCXVzaG9ydAkJRGV2aWNlSWQyOwkvKiAxOCBEZXZpY2UgSWQgKGZ1bmN0aW9uIDIpICovCisJdXNob3J0CQlDZmdCeXRlNjsJLyogMTkgRGV2aWNlIFN0YXR1cyBDb25maWcgQnl0ZXMgNi03ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogMjAgUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGNoYXIJCU1TSUNhcGFiOwkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgY2hhcgkJQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCisJdXNob3J0CQlQY2lTdGF0dXNMb3c7CS8qIDIyIFBDSSBTdGF0dXMgYml0cyAxNTowICovCisJdXNob3J0CQlQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KKwl1c2hvcnQJCURyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KKwl1c2hvcnQJCURyYW1Db25maWdIaWdoOwkvKiAyNSBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAzMToxNiAqLworCXVzaG9ydAkJRHJhbVNpemU7CS8qIDI2IERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCisJdXNob3J0CQlHcGlvVGJpQ3RsOy8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCisJdXNob3J0CQlFZXByb21TaXplOwkJLyogMjggRUVQUk9NIFNpemUgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bMl07CS8qIDI5IE1BQyBhZGRyZXNzZXMgKDIgcG9ydHMpICovCisJdW5zaWduZWQgY2hhcglGcnVGb3JtYXQ7CS8qIDM1IEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1ICAgIE9lbUZydTsgICAgICAgICAvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgY2hhcglQYWRbNF07CS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNoZWNrc3VtIGJ5dGVzCisJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kCisJCQkJICovCit9OworCisjZGVmaW5lCU1BWF9FRUNPREVfU0laRQlzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKQorI2RlZmluZSBNSU5fRUVDT0RFX1NJWkUJMHg2MgkvKiBjb2RlIHNpemUgd2l0aG91dCBvcHRpb25hbCBPRU0gRlJVIHN0dWZmICovCisKKy8qIFNMSUMgQ09ORklHIHN0cnVjdHVyZQorCisgVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIENBUkQgc3RydWN0dXJlIGFuZCBpcyB2YWxpZCBmb3IgYWxsCisgYm9hcmQgdHlwZXMuICBJdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgYXBwcm9wcmlhdGUgRUVQUk9NIHN0cnVjdHVyZQorIGJ5IFNsaWNHZXRDb25maWdEYXRhKCkuCisqLworc3RydWN0IHNsaWNfY29uZmlnIHsKKwlib29sIEVlcHJvbVZhbGlkOwkvKiBWYWxpZCBFRVBST00gZmxhZyAoY2hlY2tzdW0gZ29vZD8pICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bU0xJQ19OQlJfTUFDU107IC8qIE1BQyBhZGRyZXNzZXMgKi8KKwl1bnNpZ25lZCBjaGFyCQlGcnVGb3JtYXQ7CS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24geworCQlzdHJ1Y3QgdmVuZG9yMV9mcnUgICB2ZW5kb3IxX2ZydTsKKwkJc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisJCXN0cnVjdCB2ZW5kb3IzX2ZydSAgIHZlbmRvcjNfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yNF9mcnUgICB2ZW5kb3I0X2ZydTsKKwl9IE9lbUZydTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjg4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaW5jLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY2luYy5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvdGhlciBpbmNsdWRlIGZpbGVzIGFuZCBwcm90b3R5cGUgZGVmaW5pdGlvbnMKKyAqIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfSU5DTFVERV9IXworI2RlZmluZSBfU0xJQ19JTkNMVURFX0hfCisKKyNpbmNsdWRlICJzbGljX29zLmgiCisjaW5jbHVkZSAic2xpY2RiZy5oIgorI2luY2x1ZGUgInNsaWNody5oIgorI2luY2x1ZGUgInNsaWMuaCIKKworc3RhdGljIGludCBzbGljX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICAqcGNpZGV2LAorCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgICplbnQpOworc3RhdGljIHZvaWQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCk7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCAgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgICAgKmFkYXB0ZXIsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAgICpza2IsCisJCQl2b2lkICpjbWQsCisJCQl1MzIgICAgICAgICAgIHNrYnR5cGUsCisJCQl1MzIgICAgICAgICAgIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIHVpbnQgZmx1c2gpOworc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCXUzMiB2YWx1ZSwgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKTsKKworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcik7CitzdGF0aWMgaW50ICAgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JzcHF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBzbGljX3JzcGJ1ZiAqc2xpY19yc3BxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFtZW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxbWVtX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiAqc2xpY19jbWRxbWVtX2FkZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCAgIHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpzbGljX2NtZHFfZ2V0ZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiBzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkICBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1Zik7CitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpOworc3RhdGljIGludCAgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2lmX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgIHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGxpbmtzcGVlZCwKKwkJCXUzMiBsaW5rZHVwbGV4KTsKK3N0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcyk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX21jYXN0X2dldF9tYWNfaGFzaChjaGFyICptYWNhZGRyKTsKK3N0YXRpYyB2b2lkICBzbGljX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAorCQkJdTMyIGNvbmZpZ2gpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNvbnRleHQpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9waW5nKHVsb25nIGRldik7CitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpOworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKTsKKy8qIHVwciAqLworc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIElzcik7CitzdGF0aWMgaW50ICBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICAgICphZGFwdGVyLAorCQkJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3QsCisJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhX2gsCisJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyLAorCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyBpbnQgIHNsaWNfdXByX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgICAgICAqYWRhcHRlciwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdCwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YV9oLAorCQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXIsCisJCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X2luaXRfY3JjMzIodm9pZCk7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorc3RhdGljIGludCAgIHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCk7CitzdGF0aWMgdWludCAgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FyZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIGJvb2wgcmVzdW1lKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2hhbHQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOworc3RhdGljIHUzMiBzbGljX2R1bXBfcmVnKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2RhdGEoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYWRkciwKKwkJCXVzaG9ydCBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGJ1Zl9waHlzLAorCQkJdTMyIGJ1Zl9waHlzaCwgdTMyIHF1ZXVlKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2xvYWRfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgZGF0YSwKKwkJCQl1MzIgcXVldWUpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FtKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGFkZHIsCisJCQl1MzIgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYyk7CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3Jlc3VtZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9zZW5kX2NtZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBjbWRfcGh5cywKKwkJCQl1MzIgY21kX3BoeXNoLCB1MzIgYnVmX3BoeXMsCisJCQkJdTMyIGJ1Zl9waHlzaCk7CisKKyNkZWZpbmUgY3JlYXRlX2ZpbGUoeCkgICAgICAgICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSB3cml0ZV9maWxlKHcsIHgsIHksIHopIFNUQVRVU19TVUNDRVNTCisjZGVmaW5lIGNsb3NlX2ZpbGUoeCkgICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKKyNkZWZpbmUgcmVhZF9maWxlKHcsIHgsIHksIHopICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSBvcGVuX2ZpbGUoeCkgICAgICAgICAgIFNUQVRVU19TVUNDRVNTCisKKy8qIFBBR0VfU0laRSAqIDE2ICovCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFICAgICAgICAgMHhGRkZGCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFX0hBTEYgICAgMHg3RkZFCisjZW5kaWYKKworI2VuZGlmIC8qIF9TTElDX0lOQ0xVREVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFhYzRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC0wLDAgKzEsNTkzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0ICAyMDAwLTIwMDYgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljb3NzLmMKKyAqCisgKiBUaGUgU0xJQ09TUyBkcml2ZXIgZm9yIEFsYWNyaXRlY2gncyBJUy1OSUMgcHJvZHVjdHMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydDoKKyAqCisgKiAgICAgIE1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorICogICAgICBPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorICogICAgICBLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKyAqCisgKiBUaGUgZHJpdmVyIHdhcyBhY3V0YWxseSB0ZXN0ZWQgb24gT2FzaXMgYW5kIEthbGFoYXJpIGNhcmRzLgorICoKKyAqCisgKiBOT1RFOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCwgbm9uLWFjY2VsZXJhdGVkIHZlcnNpb24gb2YgQWxhY3JpdGVjaCdzCisgKiAgICAgICBJUy1OSUMgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNkZWZpbmUgU0xJQ19EVU1QX0VOQUJMRUQgICAgICAgICAgICAgICAwCisjZGVmaW5lIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZICAgICAgICAgMQorI2RlZmluZSBERUJVR19NSUNST0NPREUgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19QUk9EVUNUSU9OX0JVSUxECSAgICAgICAgMQorI2RlZmluZSBTTElDX0ZBSUxVUkVfUkVTRVQJICAgICAgICAgICAgMQorI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19BU1NFUlRfRU5BQkxFRAkJICAgICAgICAxCisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQJMAorI2RlZmluZSBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAkJICAgIDEKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJMAorI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCTEKKyNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJMQorI2RlZmluZSBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTEKKyNkZWZpbmUgU1RBVFNfVElNRVJfSU5URVJWQUwJCQkyCisjZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkgICAgMQorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2RlZmluZSBTTElDX0VUSFRPT0xfU1VQUE9SVCAgICAgMQorCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgInNsaWNpbmMuaCIKKyNpbmNsdWRlICJnYmRvd25sb2FkLmgiCisjaW5jbHVkZSAiZ2JyY3Z1Y29kZS5oIgorI2luY2x1ZGUgIm9hc2lzcmN2dWNvZGUuaCIKKworI2lmZGVmIERFQlVHX01JQ1JPQ09ERQorI2luY2x1ZGUgIm9hc2lzZGJnZG93bmxvYWQuaCIKKyNlbHNlCisjaW5jbHVkZSAib2FzaXNkb3dubG9hZC5oIgorI2VuZGlmCisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorI2luY2x1ZGUgInNsaWNkdW1wLmgiCisjZW5kaWYKKworI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlQgIDAKKworc3RhdGljIHVpbnQgc2xpY19maXJzdF9pbml0ID0gMTsKK3N0YXRpYyBjaGFyICpzbGljX2Jhbm5lciA9ICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyICJcCisJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKVxuIjsKKworc3RhdGljIGNoYXIgKnNsaWNfcHJvY192ZXJzaW9uID0gIjIuMC4zNTEgIDIwMDYvMDcvMTQgMTI6MjY6MDAiOworc3RhdGljIGNoYXIgKnNsaWNfcHJvZHVjdF9uYW1lID0gIlNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyICJcCisJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7CitzdGF0aWMgY2hhciAqc2xpY192ZW5kb3IgPSAiQWxhY3JpdGVjaCwgSW5jLiI7CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1ZyA9IDE7CitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmhlYWRfbmV0ZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGJhc2VfZHJpdmVyIHNsaWNfZ2xvYmFsID0geyB7fSwgMCwgMCwgMCwgMSwgTlVMTCwgTlVMTCB9Oworc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CitzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnOworc3RhdGljIGludCBlcnJvcm1zZzsKK3N0YXRpYyBpbnQgZ29vZG1zZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2NvdW50Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnNsaWNfZGVidWdmczsKKworI2RlZmluZSBEUlZfTkFNRSAgICAgICAgICAic2xpY29zcyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICAgIjIuMC4xIgorI2RlZmluZSBEUlZfQVVUSE9SICAgICAgICAiQWxhY3JpdGVjaCwgSW5jLiBFbmdpbmVlcmluZyIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICAgIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgIlwKKwkJIk5vbi1BY2NlbGVyYXRlZCBEcml2ZXIiCisjZGVmaW5lIERSVl9DT1BZUklHSFQgICAgICJDb3B5cmlnaHQgIDIwMDAtMjAwNiBBbGFjcml0ZWNoLCBJbmMuICJcCisJCSJBbGwgcmlnaHRzIHJlc2VydmVkLiIKKyNkZWZpbmUgUEZYCQkgICBEUlZfTkFNRSAiICIKKworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCittb2R1bGVfcGFyYW0oZHluYW1pY19pbnRhZ2csIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaW50YWdnLCAiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gU2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGludGFnZ19kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50YWdnX2RlbGF5LCAidVNlYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gRGVsYXkiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNsaWNfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe1BDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwKKwkgU0xJQ18xR0JfREVWSUNFX0lELAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJe1BDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwKKwkgU0xJQ18yR0JfREVWSUNFX0lELAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsaWNfcGNpX3RibCk7CisKKyNkZWZpbmUgU0xJQ19HRVRfU0xJQ19IQU5ETEUoX2FkYXB0ZXIsIF9wc2xpY19oYW5kbGUpICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlICA9ICBfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoX3BzbGljX2hhbmRsZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlBU1NFUlQoX3BzbGljX2hhbmRsZS0+dHlwZSA9PSBTTElDX0hBTkRMRV9GUkVFKTsgICAgICAgICAgICAgICAgXAorCV9hZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBfcHNsaWNfaGFuZGxlLT5uZXh0OyAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICBcCisJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0xJQ19GUkVFX1NMSUNfSEFORExFKF9hZGFwdGVyLCBfcHNsaWNfaGFuZGxlKSAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlLT50eXBlID0gU0xJQ19IQU5ETEVfRlJFRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlLT5uZXh0ID0gX2FkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgICAgICAgIFwKKyAgICBfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gX3BzbGljX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19pbml0KHZvaWQpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jbGVhbnVwKHZvaWQpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfZGVzdHJveShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfZGVzdHJveShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKQoreworCXdyaXRlbCh2YWx1ZSwgcmVnKTsKKwlpZiAoZmx1c2gpCisJCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzY0X3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnLAorCQkJICAgICAgIHUzMiB2YWx1ZSwKKwkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZ2gsIHUzMiBwYWRkcmgsIHVpbnQgZmx1c2gpCit7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJaWYgKHBhZGRyaCAhPSBhZGFwdGVyLT5jdXJhZGRydXBwZXIpIHsKKwkJYWRhcHRlci0+Y3VyYWRkcnVwcGVyID0gcGFkZHJoOworCQl3cml0ZWwocGFkZHJoLCByZWdoKTsKKwl9CisJd3JpdGVsKHZhbHVlLCByZWcpOworCWlmIChmbHVzaCkKKwkJbWIoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCit7CisJaWYgKHNsaWNfZmlyc3RfaW5pdCkgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzbGljX2ZpcnN0X2luaXQgc2V0IGppZmZpZXNbJWx4XVxuIiwKKwkJCV9fZnVuY19fLCBqaWZmaWVzKTsKKwkJc2xpY19maXJzdF9pbml0ID0gMDsKKwkJc3Bpbl9sb2NrX2luaXQoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2spOworCQlzbGljX2RlYnVnX2luaXQoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGJnX21hY2FkZHJzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCURCR19NU0coIiAgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCURCR19NU0coIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm1hY2FkZHJbMF0sCisJCWFkYXB0ZXItPm1hY2FkZHJbMV0sIGFkYXB0ZXItPm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sIGFkYXB0ZXItPm1hY2FkZHJbNV0pOworCXJldHVybjsKK30KKworI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCitzdGF0aWMgdm9pZCBzbGljX2RiZ19yZWdpc3Rlcl90cmFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCXVpbnQgaTsKKworCURCR19FUlJPUigiRHVtcCBSZWdpc3RlciBXcml0ZSBUcmFjZTogY3Vycl9peCA9PSAlZFxuIiwgY2FyZC0+ZGVidWdfaXgpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCURCR19FUlJPUigiJTJkICVkICU0eCAleCAleFxuIiwKKwkJCSAgaSwgY2FyZC0+cmVnX3R5cGVbaV0sIGNhcmQtPnJlZ19vZmZzZXRbaV0sCisJCQkgIGNhcmQtPnJlZ192YWx1ZVtpXSwgY2FyZC0+cmVnX3ZhbHVlaFtpXSk7CisJfQorfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnksCisJCQkgICAgICB2b2lkIF9faW9tZW0gKm1lbWFkZHIsIGludCBjaGlwX2lkeCkKK3sKKwl1c2hvcnQgaW5kZXg7CisJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpOworLyoKKyAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICAgbmV0ZGV2IFslcF1cbiAgICBhZGFwdGVyWyVwXVxuICAgICIKKwkgICAgInBjaWRldiBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBuZXRkZXYsIGFkYXB0ZXIsIHBjaWRldik7Ki8KKy8qCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsqLworCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKKwlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKKwlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKKwlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKKwlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKKwlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisJYWRhcHRlci0+c2xpY19yZWdzID0gKF9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqKW1lbWFkZHI7CisJYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7CisvKglhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7Ki8KKwlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOworCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OworCWFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OworCWFkYXB0ZXItPnBvcnQgPSAwOwkvKmFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOyovCisJYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKKwlhZGFwdGVyLT5tZW1vcnliYXNlID0gbWVtYWRkcjsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dXByX2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXNldF9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrKTsKKworCWFkYXB0ZXItPmNhcmRfc2l6ZSA9IDE7CisJLyoKKwkgIEluaXRpYWxpemUgc2xpY19oYW5kbGUgYXJyYXkKKwkqLworCUFTU0VSVChTTElDX0NNRFFfTUFYQ01EUyA8PSAweEZGRkYpOworCS8qCisJIFN0YXJ0IHdpdGggMS4gIDAgaXMgYW4gaW52YWxpZCBob3N0IGhhbmRsZS4KKwkqLworCWZvciAoaW5kZXggPSAxLCBwc2xpY19oYW5kbGUgPSAmYWRhcHRlci0+c2xpY19oYW5kbGVzWzFdOworCSAgICAgaW5kZXggPCBTTElDX0NNRFFfTUFYQ01EUzsgaW5kZXgrKywgcHNsaWNfaGFuZGxlKyspIHsKKworCQlwc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV9pbmRleCA9IGluZGV4OworCQlwc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9GUkVFOworCQlwc2xpY19oYW5kbGUtPm5leHQgPSBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7CisJCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZTsKKwl9CisvKgorICAgIERCR19NU0coIi4uLi4uLi4uLlxuaXhbJWRdIHBoYW5kbGVbJXBdIHBmcmVlWyVwXSBuZXh0WyVwXVxuIiwKKwlpbmRleCwgcHNsaWNfaGFuZGxlLCBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMsIHBzbGljX2hhbmRsZS0+bmV4dCk7Ki8KKwlhZGFwdGVyLT5wc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKikKKwkJCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0gKiksCisJCQkJCSZhZGFwdGVyLT4KKwkJCQkJcGh5c19zaG1lbSk7CisvKgorICAgICAgREJHX01TRygic2xpY29zczogJXMgKCVzKVxuICAgcHNobWVtICAgIFslcF1cbiAgIHBoeXNfc2htZW1bJXBdXG4iXAorCQkic2xpY19yZWdzIFslcF1cbiIsIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBzaG1lbSwKKwkJKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5zbGljX3JlZ3MpOworKi8KKwlBU1NFUlQoYWRhcHRlci0+cHNobWVtKTsKKworCW1lbXNldChhZGFwdGVyLT5wc2htZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSkpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbGljX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnkpCit7CisJc3RhdGljIGludCBjYXJkc19mb3VuZDsKKwlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwl2b2lkIF9faW9tZW0gKm1lbW1hcHBlZF9pb2FkZHIgPSBOVUxMOworCXUzMiBzdGF0dXMgPSAwOworCXVsb25nIG1taW9fc3RhcnQgPSAwOworCXVsb25nIG1taW9fbGVuID0gMDsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOworCisJREJHX01TRygic2xpY29zczogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKKwkJX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKKworCURCR19NU0coIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKKwkJcHJpbnRrKHNsaWNfYmFubmVyKTsKKwkJcHJpbnRrKHNsaWNfcHJvY192ZXJzaW9uKTsKKwl9CisKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzY0QklUX01BU0spOworCWlmICghZXJyKSB7CisJCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzY0QklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCWlmIChlcnIpIHsKKwkJCURCR19NU0cKKwkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCisJCQkgICAgIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0KKworCURCR19NU0coIkNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uc1xuIik7CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOworCWlmIChlcnIpIHsKKwkJREJHX01TRygicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlEQkdfTVNHKCJjYWxsIHBjaV9zZXRfbWFzdGVyXG4iKTsKKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJREJHX01TRygiY2FsbCBhbGxvY19ldGhlcmRldlxuIik7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc2xpY19wcm9iZTsKKwl9CisJREJHX01TRygiYWxsb2NfZXRoZXJkZXYgZm9yIHNsaWMgbmV0ZGV2WyVwXVxuIiwgbmV0ZGV2KTsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19NU0coInNsaWNvc3M6IGNhbGwgaW9yZW1hcChtbWlvX3N0YXJ0WyVseF0sIG1taW9fbGVuWyVseF0pXG4iLAorCQltbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKy8qICBtZW1tYXBwZWRfaW9hZGRyID0gICh1MzIpaW9yZW1hcF9ub2NhY2hlKG1taW9fc3RhcnQsIG1taW9fbGVuKTsqLworCW1lbW1hcHBlZF9pb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAorCQltZW1tYXBwZWRfaW9hZGRyKTsKKwlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKKwkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJICBfX2Z1bmNfXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgZm91bmQgQWxhY3JpdGVjaCBTTElDT1NTIFBDSSwgTU1JTyBhdCAlcCwgIlwKKwkgICAgInN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsCisJICAgICBfX2Z1bmNfXywgbWVtbWFwcGVkX2lvYWRkciwgbW1pb19zdGFydCwgbW1pb19sZW4sIHBjaWRldi0+aXJxKTsKKworCXNsaWNfY29uZmlnX3BjaShwY2lkZXYpOworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJc2xpY19pbml0X2FkYXB0ZXIobmV0ZGV2LAorCQkJICBwY2lkZXYsIHBjaV90YmxfZW50cnksIG1lbW1hcHBlZF9pb2FkZHIsIGNhcmRzX2ZvdW5kKTsKKworCXN0YXR1cyA9IHNsaWNfY2FyZF9sb2NhdGUoYWRhcHRlcik7CisJaWYgKHN0YXR1cykgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCBsb2NhdGUgY2FyZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCWlmICghYWRhcHRlci0+YWxsb2NhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCsrOworCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOworCX0KKworCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQ6ICAgICAgICAgICAgICVwXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+Y2FyZCk7CisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlclslZF0gPT0gWyVwXVxuIiwgX19mdW5jX18sCisJCSh1aW50KSBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQgWyVkXVxuIiwgX19mdW5jX18sCisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkIFslZF1cbiIsIF9fZnVuY19fLAorCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOworCisJc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOworCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX0VSUk9SKCJzbGljX2NhcmRfaW5pdCBGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwl9IGVsc2UgeworCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKKwl9CisKKwluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPm1lbW9yeWJhc2U7CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CisJbmV0ZGV2LT5vcGVuID0gc2xpY19lbnRyeV9vcGVuOworCW5ldGRldi0+c3RvcCA9IHNsaWNfZW50cnlfaGFsdDsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNsaWNfeG1pdF9zdGFydDsKKwluZXRkZXYtPmRvX2lvY3RsID0gc2xpY19pb2N0bDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNsaWNfbWFjX3NldF9hZGRyZXNzOworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKwluZXRkZXYtPmdldF9zdGF0cyA9IHNsaWNfZ2V0X3N0YXRzOworI2VuZGlmCisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbGljX21jYXN0X3NldF9saXN0OworCisJc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShhZGFwdGVyKTsKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJREJHX0VSUk9SKCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19NU0cKKwkgICAgKCJzbGljb3NzOiBhZGRyIDB4JWx4LCBpcnEgJWQsIE1BQyBhZGRyICJcCisJICAgICAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJICAgICBtbWlvX3N0YXJ0LCAvKnBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApLCAqLyBwY2lkZXYtPmlycSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sCisJICAgICBuZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCWNhcmRzX2ZvdW5kKys7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBzdGF0dXNbJXhdIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCisJCV9fZnVuY19fLCBzdGF0dXMsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnJfb3V0X3VubWFwOgorCWlvdW5tYXAobWVtbWFwcGVkX2lvYWRkcik7CisKK2Vycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCitlcnJfb3V0X2V4aXRfc2xpY19wcm9iZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7CisJREJHX0VSUk9SKCIlcyBFWElUIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTMyIGxvY2tlZCA9IDA7CisJaW50IHN0YXR1czsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlBU1NFUlQoY2FyZCk7CisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzIGFkYXB0ZXItPmFjdGl2YXRlZFslZF0gY2FyZC0+YWRhcHRlcnNbJXhdICJcCisJICAgICAiYWxsb2NkWyV4XVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPmFjdGl2YXRlZCwKKwkgICAgIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwKKwkgICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzICglcyk6IFtqaWZmaWVzWyVseF0gY3B1ICVkXSBkZXZbJXBdIGFkYXB0WyVwXSAiXAorCSAgICAgInBvcnRbJWRdIGNhcmRbJXBdXG4iLAorCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCSAgICAgYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0LCBjYXJkKTsKKworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlsb2NrZWQgPSAxOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCsrOworCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJc3RhdHVzID0gc2xpY19pZl9pbml0KGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOworCQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwkJfQorCQlpZiAobG9ja2VkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCQkJbG9ja2VkID0gMDsKKwkJfQorCQlyZXR1cm4gc3RhdHVzOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBzZXQgY2FyZC0+bWFzdGVyWyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWNhcmQtPm1hc3RlciwgYWRhcHRlcik7CisJaWYgKCFjYXJkLT5tYXN0ZXIpCisJCWNhcmQtPm1hc3RlciA9IGFkYXB0ZXI7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwlpZiAoIShjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5kdW1wX3dxKTsKKyNlbmRpZgorCisJaWYgKGxvY2tlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJCWxvY2tlZCA9IDA7CisJfQorI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKCEoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSkgeworCQlEQkdfTVNHKCJhdHRlbXB0IHRvIGluaXRpYWxpemUgZHVtcCB0aHJlYWRcbiIpOworCQlzdGF0dXMgPSBzbGljX2luaXRfZHVtcF90aHJlYWQoY2FyZCk7CisJCS8qCisJCUV2ZW4gaWYgdGhlIGR1bXAgdGhyZWFkIGZhaWxzLCB3ZSB3aWxsIGNvbnRpbnVlIGF0IHRoaXMgcG9pbnQKKwkJKi8KKwl9CisjZW5kaWYKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNsaWNfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1aW50IG1taW9fbGVuID0gMDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgZGV2LAorCQlhZGFwdGVyKTsKKwlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKKwlzbGljX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7CisJREJHX01TRygic2xpY29zczogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fZnVuY19fKTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisJREJHX01TRygic2xpY29zczogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19mdW5jX18sCisJCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisJREJHX01TRygic2xpY29zczogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fZnVuY19fLAorCQkodWludCkgZGV2LT5iYXNlX2FkZHIpOworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKKwlBU1NFUlQoYWRhcHRlci0+Y2FyZCk7CisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLS07CisJYWRhcHRlci0+YWxsb2NhdGVkID0gMDsKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgaW5pdFsleF0gYWxsb2NbJXhdIGNhcmRbJXBdIGFkYXB0ZXJbJXBdXG4iLAorCSAgICAgX19mdW5jX18sIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLAorCSAgICAgY2FyZCwgYWRhcHRlcik7CisJaWYgKCFjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpIHsKKwkJc3RydWN0IHNsaWNjYXJkICpjdXJyX2NhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJCWlmIChjdXJyX2NhcmQgPT0gY2FyZCkgeworCQkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZC0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChjdXJyX2NhcmQtPm5leHQgIT0gY2FyZCkKKwkJCQljdXJyX2NhcmQgPSBjdXJyX2NhcmQtPm5leHQ7CisJCQlBU1NFUlQoY3Vycl9jYXJkKTsKKwkJCWN1cnJfY2FyZC0+bmV4dCA9IGNhcmQtPm5leHQ7CisJCX0KKwkJQVNTRVJUKHNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMtLTsKKwkJc2xpY19jYXJkX2NsZWFudXAoY2FyZCk7CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJa2ZyZWUoZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCUFTU0VSVChjYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGFjdHZ0ZFslZF0gYWxsb2NbJWRdIHN0YXRlWyV4XSBhZGFwdFslcF1cbiIsCisJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwKKwkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLCBjYXJkLT5zdGF0ZSwgYWRhcHRlcik7CisJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKKwlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJYWRhcHRlci0+dXByX2xpc3QgPSBOVUxMOworCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKKwkJX19mdW5jX18sIGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+c3RhdGUpOworCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPmNhcmRpbmRleF0gPT0gYWRhcHRlcik7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMrKzsKKwlhZGFwdGVyLT5pY3JfcmVnX3dyaXRlcysrOworCXNsaWNfY29uZmlnX2NsZWFyKGFkYXB0ZXIpOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgZGV2WyVwXSBhZGFwdFslcF0gY2FyZFslcF1cbiIsCisJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGRldiwgYWRhcHRlciwgY2FyZCk7CisJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7CisJfQorI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAorCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmVzZXRfaWZhY2UsIDAsIEZMVVNIKTsKKyNlbmRpZgorCS8qCisJICogIFJlc2V0IHRoZSBhZGFwdGVyJ3MgcnNwLCBjbWQsIGFuZCByY3YgcXVldWVzCisJICovCisJc2xpY19jbWRxX3Jlc2V0KGFkYXB0ZXIpOworCXNsaWNfcnNwcXVldWVfcmVzZXQoYWRhcHRlcik7CisJc2xpY19yY3ZxdWV1ZV9yZXNldChhZGFwdGVyKTsKKworI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAorCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKSB7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCQlpZiAoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSB7CisJCQl1aW50IHN0YXR1czsKKwkJCURCR19NU0coImF0dGVtcHQgdG8gdGVybWluYXRlIGR1bXAgdGhyZWFkIHBpZFsleF1cbiIsCisJCQkJY2FyZC0+ZHVtcF90YXNrX2lkKTsKKwkJCXN0YXR1cyA9IGtpbGxfcHJvYyhjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCwgU0lHS0lMTCwgMSk7CisKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJaW50IGNvdW50ID0gMTAgKiAxMDA7CisJCQkJd2hpbGUgKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyAmJiAtLWNvdW50KSB7CisJCQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQkJCX0KKworCQkJCWlmICghY291bnQpIHsKKwkJCQkJREJHX01TRworCQkJCQkgICAgKCJzbGljbW9uIHRocmVhZCBjbGVhbnVwIEZBSUxFRCBcCisJCQkJCSAgICAgcGlkWyV4XVxuIiwKKwkJCQkJICAgICBjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCk7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBpbml0aWF0ZSBDQVJEX0hBTFRcbiIsIF9fZnVuY19fLAorCQkJZGV2LT5uYW1lKTsKKworCQlzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKKwl9CisjZW5kaWYKKworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVFxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJQVNTRVJUKHJxKTsKKy8qCisgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsKKyovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgorCQl7CisJCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKQorCQkJCQkJCW5ldGRldl9wcml2KGRldik7CisJCQl1MzIgZGF0YVs3XTsKKwkJCXUzMiBpbnRhZ2c7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCBnZXR0aW5nIGluaXRpYWwgXAorCQkJCSAgICAgcGFyYW1zXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWludGFnZyA9IGRhdGFbMF07CisJCQlwcmludGsoS0VSTl9FTUVSRworCQkJICAgICAgICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaW50YWdnKTsKKwkJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOworCQkJcmV0dXJuIDA7CisJCX0KKyNpZmRlZiBTTElDX1VTRVJfUkVRVUVTVF9EVU1QX0VOQUJMRUQKKwljYXNlIFNJT0NTTElDRFVNUENBUkQ6CisJCXsKKwkJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopCisJCQkJCQkJZGV2LT5wcml2OworCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkOworCisJCQlBU1NFUlQoYWRhcHRlcik7CisJCQlBU1NFUlQoYWRhcHRlci0+Y2FyZCkKKwkJCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX0RVTVBfQ0FSRFxuIik7CisKKwkJCWlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfRE9ORSkgeworCQkJCXByaW50ayhTTElDTEVWRUwKKwkJCQkgICAgICAgIlNMSUMgQ2FyZCBkdW1wIHRvIGJlIG92ZXJ3cml0dGVuXG4iKTsKKwkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQl9IGVsc2UgaWYgKChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKQorCQkJCSAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PQorCQkJCSAgICAgICBTTElDX0RVTVBfSU5fUFJPR1JFU1MpKSB7CisJCQkJcHJpbnRrKFNMSUNMRVZFTAorCQkJCSAgICAgICAiU0xJQyBDYXJkIGR1bXAgUmVxdWVzdGVkIGJ1dCBhbHJlYWR5IFwKKwkJCQkJaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKFNMSUNMRVZFTAorCQkJCSAgICAgICAiU0xJQyBDYXJkICMlZCBEdW1wIFJlcXVlc3RlZFxuIiwKKwkJCQkgICAgICAgY2FyZC0+Y2FyZG51bSk7CisJCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfUkVRVUVTVEVEOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCisjaWZkZWYgU0xJQ19UUkFDRV9EVU1QX0VOQUJMRUQKKwljYXNlIFNJT0NTTElDVFJBQ0VEVU1QOgorCQl7CisJCQl1bG9uZyBkYXRhWzddOworCQkJdWxvbmcgdmFsdWU7CisKKwkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfVFJBQ0VfRFVNUFxuIik7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgXAorCQkJCSAgICAgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCXZhbHVlID0gZGF0YVswXTsKKwkJCWlmICh0cmFjZW1vbl9yZXF1ZXN0ID09IFNMSUNfRFVNUF9ET05FKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CisJCQkJdHJhY2Vtb25fcmVxdWVzdCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQkJdHJhY2Vtb25fcmVxdWVzdF90eXBlID0gdmFsdWU7CisJCQkJdHJhY2Vtb25fdGltZXN0YW1wID0gamlmZmllczsKKwkJCX0gZWxzZSBpZiAoKHRyYWNlbW9uX3JlcXVlc3QgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkgfHwKKwkJCQkgICAodHJhY2Vtb25fcmVxdWVzdCA9PQorCQkJCSAgICBTTElDX0RVTVBfSU5fUFJPR1JFU1MpKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZCBidXQgXAorCQkJCSAgICAgYWxyZWFkeSBpbiBwcm9ncmVzcy4uLiBpZ25vcmVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkXG4iKTsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0ID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0X3R5cGUgPSB2YWx1ZTsKKwkJCQl0cmFjZW1vbl90aW1lc3RhbXAgPSBqaWZmaWVzOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorI2lmIFNMSUNfRVRIVE9PTF9TVVBQT1JUCisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJeworCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKKwkJCQkJCQluZXRkZXZfcHJpdihkZXYpOworCQkJc3RydWN0IGV0aHRvb2xfY21kIGRhdGE7CisJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKworCQkJQVNTRVJUKGFkYXB0ZXIpOworLyogICAgICAgICAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgU0lPQ0VUSFRPT0xcbiIsIF9fZnVuY19fKTsgKi8KKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmZWNtZCwgcnEtPmlmcl9kYXRhLCBzaXplb2YoZWNtZCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9HU0VUKSB7CisJCQkJZGF0YS5zdXBwb3J0ZWQgPQorCQkJCSAgICAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX01JSSk7CisJCQkJZGF0YS5wb3J0ID0gUE9SVF9NSUk7CisJCQkJZGF0YS50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJCQkJZGF0YS5waHlfYWRkcmVzcyA9IDA7CisJCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQllbHNlCisJCQkJCWRhdGEuc3BlZWQgPSAwOworCisJCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQllbHNlCisJCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCQlkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCQlkYXRhLm1heHR4cGt0ID0gMTsKKwkJCQlkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCQlpZiAoY29weV90b191c2VyCisJCQkJICAgIChycS0+aWZyX2RhdGEsICZkYXRhLCBzaXplb2YoZGF0YSkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJfSBlbHNlIGlmIChlY21kLmNtZCA9PSBFVEhUT09MX1NTRVQpIHsKKwkJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQkJCXJldHVybiAtRVBFUk07CisKKwkJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCisJCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7CisJCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJCWVsc2UKKwkJCQkJZGF0YS5zcGVlZCA9IDA7CisKKwkJCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQorCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJCWVsc2UKKwkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJCWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJCWRhdGEubWF4dHhwa3QgPSAxOworCQkJCWRhdGEubWF4cnhwa3QgPSAxOworCQkJCWlmICgoZWNtZC5zcGVlZCAhPSBkYXRhLnNwZWVkKSB8fAorCQkJCSAgICAoZWNtZC5kdXBsZXggIT0gZGF0YS5kdXBsZXgpKSB7CisJCQkJCXUzMiBzcGVlZDsKKwkJCQkJdTMyIGR1cGxleDsKKworCQkJCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJCQkJc3BlZWQgPSAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCIlczogc2xpYyBFVEhUT09MIHNldCBcCisJCQkJCQkgICAgIGxpbmsgc3BlZWQ9PTEwTUIiLAorCQkJCQkJICAgICBkZXYtPm5hbWUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3BlZWQgPSBQQ1JfU1BFRURfMTAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCIlczogc2xpYyBFVEhUT09MIHNldCBcCisJCQkJCQkgICAgbGluayBzcGVlZD09MTAwTUIiLAorCQkJCQkJICAgICBkZXYtPm5hbWUpOworCQkJCQl9CisJCQkJCWlmIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgeworCQkJCQkJZHVwbGV4ID0gUENSX0RVUExFWF9GVUxMOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCI6IGR1cGxleD09RlVMTFxuIik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkdXBsZXggPSAwOworCQkJCQkJU0xJQ19ESVNQTEFZCisJCQkJCQkgICAgKCI6IGR1cGxleD09SEFMRlxuIik7CisJCQkJCX0KKwkJCQkJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLAorCQkJCQkJCSBzcGVlZCwgZHVwbGV4KTsKKwkJCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisvKiAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX2Z1bmNfXywgY21kKTsgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworI2RlZmluZSAgWE1JVF9GQUlMX0xJTktfU1RBVEUgICAgICAgICAgICAgICAxCisjZGVmaW5lICBYTUlUX0ZBSUxfWkVST19MRU5HVEggICAgICAgICAgICAgIDIKKyNkZWZpbmUgIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwgICAgICAgICAgICAgMworCitzdGF0aWMgdm9pZCBzbGljX3htaXRfYnVpbGRfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICppaGNtZDsKKwl1bG9uZyBwaHlzX2FkZHI7CisKKwlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKKworCWloY21kLT5mbGFncyA9IChhZGFwdGVyLT5wb3J0IDw8IElIRkxHX0lGU0hGVCk7CisJaWhjbWQtPmNvbW1hbmQgPSBJSENNRF9YTVRfUkVROworCWloY21kLT51LnNsaWNfYnVmZmVycy50b3RsZW4gPSBza2ItPmxlbjsKKwlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5wYWRkcmwgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2FkZHIpOworCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLnBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOworCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLmxlbmd0aCA9IHNrYi0+bGVuOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwloY21kLT5jbWRzaXplID0gKHUzMikgKCgoKHU2NCkmaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMV0gLQorCQkJCSAgICAgKHU2NCkgaGNtZCkgKyAzMSkgPj4gNSk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJaGNtZC0+Y21kc2l6ZSA9ICgoKCh1MzIpICZpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1sxXSAtCisJCQkgICAodTMyKSBoY21kKSArIDMxKSA+PiA1KTsKKyNlbHNlCisJU3RvcCBDb21waWxhdGlvbjsKKyNlbmRpZgorfQorCisjZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAorCitzdGF0aWMgaW50IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCA9IE5VTEw7CisJdTMyIHN0YXR1cyA9IDA7CisJdTMyIHNrYnR5cGUgPSBOT1JNQUxfRVRIRlJBTUU7CisJdm9pZCAqb2ZmbG9hZGNtZCA9IE5VTEw7CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlBU1NFUlQoY2FyZCk7CisvKgorICAgIERCR19FUlJPUigieG1pdF9zdGFydCAoJXMpIEVOVEVSIHNrYlslcF0gbGVuWyVkXSBsaW5rc3RhdGVbJXhdIHN0YXRlWyV4XVxuIiwKKwlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHNrYiwgc2tiLT5sZW4sIGFkYXB0ZXItPmxpbmtzdGF0ZSwKKwkgYWRhcHRlci0+c3RhdGUpOworKi8KKwlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB8fAorCSAgICAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHx8IChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSkgeworCQlzdGF0dXMgPSBYTUlUX0ZBSUxfTElOS19TVEFURTsKKwkJZ290byB4bWl0X2ZhaWw7CisKKwl9IGVsc2UgaWYgKHNrYi0+bGVuID09IDApIHsKKwkJc3RhdHVzID0gWE1JVF9GQUlMX1pFUk9fTEVOR1RIOworCQlnb3RvIHhtaXRfZmFpbDsKKwl9CisKKwlpZiAoc2tidHlwZSA9PSBOT1JNQUxfRVRIRlJBTUUpIHsKKwkJaGNtZCA9IHNsaWNfY21kcV9nZXRmcmVlKGFkYXB0ZXIpOworCQlpZiAoIWhjbWQpIHsKKwkJCWFkYXB0ZXItPnhtaXRxX2Z1bGwgPSAxOworCQkJc3RhdHVzID0gWE1JVF9GQUlMX0hPU1RDTURfRkFJTDsKKwkJCWdvdG8geG1pdF9mYWlsOworCQl9CisJCUFTU0VSVChoY21kLT5wc2xpY19oYW5kbGUpOworCQlBU1NFUlQoaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9PQorCQkgICAgICAgaGNtZC0+cHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW4pOworCQloY21kLT5za2IgPSBza2I7CisJCWhjbWQtPmJ1c3kgPSAxOworCQloY21kLT50eXBlID0gU0xJQ19DTURfRFVNQjsKKwkJaWYgKHNrYnR5cGUgPT0gTk9STUFMX0VUSEZSQU1FKQorCQkJc2xpY194bWl0X2J1aWxkX3JlcXVlc3QoYWRhcHRlciwgaGNtZCwgc2tiKTsKKwl9CisJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cysrOworCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisjaWZkZWYgREVCVUdfRFVNUAorCWlmIChhZGFwdGVyLT5raWxsX2NhcmQpIHsKKwkJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCBpaGNtZDsKKworCQlpaGNtZCA9ICZoY21kLT5jbWQ2NDsKKworCQlpaGNtZC0+ZmxhZ3MgfD0gMHg0MDsKKwkJYWRhcHRlci0+a2lsbF9jYXJkID0gMDsJLyogb25seSBkbyB0aGlzIG9uY2UgKi8KKwl9CisjZW5kaWYKKwlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyLAorCQkJICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksIERPTlRfRkxVU0gpOworCX0gZWxzZSB7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKKwkJCSAgICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkgICAgaGNtZC0+cGFkZHJoLCBET05UX0ZMVVNIKTsKKwl9Cit4bWl0X2RvbmU6CisJcmV0dXJuIDA7Cit4bWl0X2ZhaWw6CisJc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOworCWdvdG8geG1pdF9kb25lOworfQorCitzdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKQoreworCWlmIChhZGFwdGVyLT54bWl0cV9mdWxsKQorCQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7CisJaWYgKChjbWQgPT0gTlVMTCkgJiYgKHN0YXR1cyA8PSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMKSkgeworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIFhNSVRfRkFJTF9MSU5LX1NUQVRFOgorCQkJREJHX0VSUk9SCisJCQkgICAgKCIoJXMpIHJlamVjdCB4bWl0IHNrYlslcDogJXhdIGxpbmtzdGF0ZVslc10gXAorCQkJICAgICBhZGFwdGVyWyVzOiVkXSBjYXJkWyVzOiVkXVxuIiwKKwkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+cGt0X3R5cGUsCisJCQkgICAgIFNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCisJCQkgICAgIFNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksIGFkYXB0ZXItPnN0YXRlLAorCQkJICAgICBTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAorCQkJICAgICBhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6CisJCQlEQkdfRVJST1IKKwkJCSAgICAoInhtaXRfc3RhcnQgc2tiLT5sZW4gPT0gMCBza2JbJXBdIHR5cGVbJXhdISEhISBcbiIsCisJCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMOgorCQkJREJHX0VSUk9SCisJCQkgICAgKCJ4bWl0X3N0YXJ0IHNrYlslcF0gdHlwZVsleF0gTm8gaG9zdCBjb21tYW5kcyBcCisJCQkgICAgIGF2YWlsYWJsZSAhISEhIFxuIiwKKwkJCSAgICAgc2tiLCBza2ItPnBrdF90eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQl9CisJfQorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhZGFwdGVyLT5zdGF0cy50eF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZV9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYpCit7CisJc3RydWN0IHNsaWNfaGRkcl93ZHMgKmhkciA9IChzdHJ1Y3Qgc2xpY19oZGRyX3dkcyAqKXJjdmJ1Zi0+ZGF0YTsKKworCWlmIChhZGFwdGVyLT5kZXZpZCAhPSBTTElDXzFHQl9ERVZJQ0VfSUQpIHsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzMTQgJiBWUkhTVEFUXzgwMk9FKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLm9mbG93ODAyKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1czE0ICYgVlJIU1RBVF9UUE9GTE8pCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBydG9mbG93Kys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl84MDJVRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy51ZmxvdzgwMisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfUkNWRSkgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5Kys7CisJCQlhZGFwdGVyLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9CVUZGKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NBUlJFKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ2FycmUrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0xPTkdFKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkxvbmdlKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9QUkVBKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkludnArKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NSQykgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYysrOworCQkJYWRhcHRlci0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9EUkJMKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NPREUpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBITEVOKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBMRVJSKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9JUEhFUlIpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7CisJfSBlbHNlIHsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX1hQRVJSKSB7CisJCQl1MzIgeGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9YRVJSU0hGVDsKKworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YSExFTikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX05FVEVSUikgeworCQkJdTMyIG5lcnIgPQorCQkJICAgIChoZHItPgorCQkJICAgICBmcmFtZV9zdGF0dXNHQiA+PiBWR0JTVEFUX05FUlJTSEZUKSAmCisJCQkgICAgVkdCU1RBVF9ORVJSTVNLOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCQlpZiAobmVyciA9PSBWR0JTVEFUX05ITEVOKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4rKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfTE5LRVJSKSB7CisJCQl1MzIgbGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xFUlJNU0s7CisKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTERFQVJMWSkKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTEJPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MQ09ERVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Db2RlKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xEQkxOQkwpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTENSQ0VSUikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ3JjKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MVUZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgVENQX09GRkxPQURfRlJBTUVfUFVTSEZMQUcgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTV9GQVNUX1BBVEggICAgICAgICAgICAgICAgIDB4MDA0MAorCitzdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWY7CisJdTMyIGZyYW1lcyA9IDA7CisKKwl3aGlsZSAoKHNrYiA9IHNsaWNfcmN2cXVldWVfZ2V0bmV4dChhZGFwdGVyKSkpIHsKKwkJdTMyIHJ4X2J5dGVzOworCisJCUFTU0VSVChza2ItPmhlYWQpOworCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQlhZGFwdGVyLT5jYXJkLT5ldmVudHMrKzsKKwkJaWYgKHJjdmJ1Zi0+c3RhdHVzICYgSVJIRERSX0VSUikgeworCQkJYWRhcHRlci0+cnhfZXJyb3JzKys7CisJCQlzbGljX3Jjdl9oYW5kbGVfZXJyb3IoYWRhcHRlciwgcmN2YnVmKTsKKwkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzbGljX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKKwkJCQkJcmN2YnVmLT5kYXRhKSkgeworI2lmIDAKKwkJCURCR19NU0cKKwkJCSAgICAoInNsaWNvc3M6ICVzICglcykgZHJvcCBmcmFtZSBkdWUgdG8gbWFjIGZpbHRlclxuIiwKKwkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisjZW5kaWYKKwkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNrYl9wdWxsKHNrYiwgU0xJQ19SQ1ZCVUZfSEVBRFNJWkUpOworCQlyeF9ieXRlcyA9IChyY3ZidWYtPmxlbmd0aCAmIElSSEREUl9GTEVOX01TSyk7CisJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCWFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7CisjaWYgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisjZW5kaWYKKworCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOworCQluZXRpZl9yeChza2IpOworCisJCSsrZnJhbWVzOworI2lmIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQKKwkJaWYgKGZyYW1lcyA+PSBTTElDX1JDVlFfTUFYX1BST0NFU1NfSVNSKSB7CisJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcysrOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlhZGFwdGVyLT5tYXhfaXNyX3JjdnMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl9yY3ZzLCBmcmFtZXMpOworfQorCitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKKwlzdHJ1Y3Qgc2xpY19yc3BidWYgKnJzcGJ1ZjsKKwl1MzIgZnJhbWVzID0gMDsKKwlzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCBzbGljX2hhbmRsZV93b3JkOworCisJZG8geworCQlyc3BidWYgPSBzbGljX3JzcHF1ZXVlX2dldG5leHQoYWRhcHRlcik7CisJCWlmICghcnNwYnVmKQorCQkJYnJlYWs7CisJCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzKys7CisJCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOworCQkvKgorCQkgR2V0IHRoZSBjb21wbGV0ZSBob3N0IGNvbW1hbmQgYnVmZmVyCisJCSovCisJCXNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX3Rva2VuID0gcnNwYnVmLT5ob3N0aGFuZGxlOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXgpOworCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXggPD0gU0xJQ19DTURRX01BWENNRFMpOworCQloY21kID0KKwkJICAgIChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopCisJCQlhZGFwdGVyLT5zbGljX2hhbmRsZXNbc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXhdLgorCQkJCQkJCQkJYWRkcmVzczsKKy8qICAgICAgaGNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopIHJzcGJ1Zi0+aG9zdGhhbmRsZTsgKi8KKwkJQVNTRVJUKGhjbWQpOworCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlID09CisJCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XSk7CisvKgorICAgICAgREJHX0VSUk9SKCJ4bWl0X2NvbXBsZXRlICglcykgICBoY21kWyVwXSAgaG9zdGhhbmRsZVsleF1cbiIsCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaGNtZCwgaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSk7CisgICAgICBEQkdfRVJST1IoIiAgICBza2JbJXBdIGxlbiAlZCAgaGNtZHR5cGVbJXhdXG4iLCBoY21kLT5za2IsCisJCWhjbWQtPnNrYi0+bGVuLCBoY21kLT50eXBlKTsKKyovCisJCWlmIChoY21kLT50eXBlID09IFNMSUNfQ01EX0RVTUIpIHsKKwkJCWlmIChoY21kLT5za2IpCisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaGNtZC0+c2tiKTsKKwkJCXNsaWNfY21kcV9wdXRkb25lX2lycShhZGFwdGVyLCBoY21kKTsKKwkJfQorCQlyc3BidWYtPnN0YXR1cyA9IDA7CisJCXJzcGJ1Zi0+aG9zdGhhbmRsZSA9IDA7CisJCWZyYW1lcysrOworCX0gd2hpbGUgKDEpOworCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl94bWl0cywgZnJhbWVzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNsaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaXNyOworCisJaWYgKChhZGFwdGVyLT5wc2htZW0pICYmIChhZGFwdGVyLT5wc2htZW0tPmlzcikpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfTUFTSywgRkxVU0gpOworCQlpc3IgPSBhZGFwdGVyLT5pc3Jjb3B5ID0gYWRhcHRlci0+cHNobWVtLT5pc3I7CisJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJYWRhcHRlci0+bnVtX2lzcnMrKzsKKwkJc3dpdGNoIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSkgeworCQljYXNlIENBUkRfVVA6CisJCQlpZiAoaXNyICYgfklTUl9JTykgeworCQkJCWlmIChpc3IgJiBJU1JfRVJSKSB7CisJCQkJCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMrKzsKKwkJCQkJaWYgKGlzciAmIElTUl9STUlTUykgeworCQkJCQkJaW50IGNvdW50OworCQkJCQkJaW50IHByZV9jb3VudDsKKwkJCQkJCWludCBlcnJvcnM7CisKKwkJCQkJCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0KKwkJCQkJCSAgICAmYWRhcHRlci0+cmN2cXVldWU7CisKKwkJCQkJCWFkYXB0ZXItPgorCQkJCQkJICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHMrKzsKKwkJCQkJCWlmICghcmN2cS0+ZXJyb3JzKQorCQkJCQkJCXJjdl9jb3VudCA9IHJjdnEtPmNvdW50OworCQkJCQkJcHJlX2NvdW50ID0gcmN2cS0+Y291bnQ7CisJCQkJCQllcnJvcnMgPSByY3ZxLT5lcnJvcnM7CisKKwkJCQkJCXdoaWxlIChyY3ZxLT5jb3VudCA8CisJCQkJCQkgICAgICAgU0xJQ19SQ1ZRX0ZJTExUSFJFU0gpIHsKKwkJCQkJCQljb3VudCA9CisJCQkJCQkJICAgIHNsaWNfcmN2cXVldWVfZmlsbAorCQkJCQkJCSAgICAoYWRhcHRlcik7CisJCQkJCQkJaWYgKCFjb3VudCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdfTVNHCisJCQkJCQkgICAgKCIoJXMpOiBbJXhdIElTUl9STUlTUyBcCisJCQkJCQkgICAgIGluaXRpYWxbJXhdIHByZVsleF0gXAorCQkJCQkJICAgICBlcnJvcnNbJXhdIFwKKwkJCQkJCSAgICAgcG9zdF9jb3VudFsleF1cbiIsCisJCQkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkJCSAgICAgaXNyLCByY3ZfY291bnQsIHByZV9jb3VudCwKKwkJCQkJCSAgICAgZXJyb3JzLCByY3ZxLT5jb3VudCk7CisJCQkJCX0gZWxzZSBpZiAoaXNyICYgSVNSX1hEUk9QKSB7CisJCQkJCQlEQkdfRVJST1IKKwkJCQkJCSAgICAoImlzciAmIElTUl9FUlIgWyV4XSBcCisJCQkJCQkgICAgIElTUl9YRFJPUCBcbiIsCisJCQkJCQkgICAgIGlzcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlEQkdfRVJST1IKKwkJCQkJCSAgICAoImlzciAmIElTUl9FUlIgWyV4XVxuIiwKKwkJCQkJCSAgICAgaXNyKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChpc3IgJiBJU1JfTEVWRU5UKSB7CisJCQkJCS8qREJHX01TRygiJXMgKCVzKSAgSVNSX0xFVkVOVCBcbiIsCisJCQkJCSAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyovCisJCQkJCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzKys7CisJCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCQkJCX0KKworCQkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKKwkJCQkgICAgKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQkJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cysrOworCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaXNyICYgSVNSX1JDVikgeworCQkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY19yY3ZfaGFuZGxlcihhZGFwdGVyKTsKKwkJCX0KKworCQkJaWYgKGlzciAmIElTUl9DTUQpIHsKKwkJCQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMrKzsKKwkJCQlzbGljX3htaXRfY29tcGxldGUoYWRhcHRlcik7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENBUkRfRE9XTjoKKwkJCWlmICgoaXNyICYgSVNSX1VQQykgfHwKKwkJCSAgICAoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7CisJCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMrKzsKKwkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKKwkJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMgKz0gMjsKKwkJYWRhcHRlci0+aXNyX3JlZ193cml0ZXMrKzsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5mYWxzZV9pbnRlcnJ1cHRzKys7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHNsaWNfbGlua19ldmVudF9oYW5kbGVyIC0KKyAqCisgKiBJbml0aWF0ZSBhIGxpbmsgY29uZmlndXJhdGlvbiBzZXF1ZW5jZS4gIFRoZSBsaW5rIGNvbmZpZ3VyYXRpb24gYmVnaW5zCisgKiBieSBpc3N1aW5nIGEgUkVBRF9MSU5LX1NUQVRVUyBjb21tYW5kIHRvIHRoZSBVdGlsaXR5IFByb2Nlc3NvciBvbiB0aGUKKyAqIFNMSUMuICBTaW5jZSB0aGUgY29tbWFuZCBmaW5pc2hlcyBhc3luY2hyb25vdXNseSwgdGhlIHNsaWNfdXByX2NvbWxldGUKKyAqIHJvdXRpbmUgd2lsbCBmb2xsb3cgaXQgdXAgd2l0aGEgVVAgY29uZmlndXJhdGlvbiB3cml0ZSBjb21tYW5kLCB3aGljaAorICogd2lsbCBhbHNvIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5LgorICoKKyAqLworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB7CisJCS8qIEFkYXB0ZXIgaXMgbm90IG9wZXJhdGlvbmFsLiAgSWdub3JlLiAgKi8KKwkJcmV0dXJuOworCX0KKworCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisvKgorICAgIERCR19NU0coInNsaWNfZXZlbnRfaGFuZGxlciAgcHNobWVtLT5saW5rc3RhdHVzWyV4XSAgcHNobWVtWyVwXVxuICAgXAorCSZsaW5rc3RhdHVzWyVwXSAmaXNyWyVwXVxuIiwgYWRhcHRlci0+cHNobWVtLT5saW5rc3RhdHVzLCBwc2htZW0sCisJJnBzaG1lbS0+bGlua3N0YXR1cywgJnBzaG1lbS0+aXNyKTsKKyovCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgU0xJQ19VUFJfUkxTUiwKKwkJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgMCwgMCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9STFNSLAorCQkodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAkvKiBubyA0R0Igd3JhcCBndWFyYW50ZWVkICovCisJCQkJICAwLCAwLCAwKTsKKyNlbHNlCisJU3RvcCBjb21waWxhdGlvbjsKKyNlbmRpZgorCUFTU0VSVCgoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB8fCAoc3RhdHVzID09IFNUQVRVU19QRU5ESU5HKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9jbGVhbnVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdICIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlpZiAoYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJREJHX01TRygiRlJFRV9JUlEgIik7CisJCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMDsKKwkJZnJlZV9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsIGFkYXB0ZXItPm5ldGRldik7CisKKwl9CisJaWYgKGFkYXB0ZXItPnBzaG1lbSkgeworCQlEQkdfTVNHKCJGUkVFX1NITUVNICIpOworCQlEQkdfTVNHKCJhZGFwdGVyWyVwXSBwb3J0ICVkIHBzaG1lbVslcF0gRnJlZVNobWVtICIsCisJCQlhZGFwdGVyLCBhZGFwdGVyLT5wb3J0LCAodm9pZCAqKSBhZGFwdGVyLT5wc2htZW0pOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtICopLAorCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOworCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOworCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7CisJfQorI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKKwlpZiAoYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgeworCQlEQkdfTVNHKCJzdGF0c3RpbWVyICIpOworCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMDsKKwkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwl9CisjZW5kaWYKKyNpZiAhU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKKy8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVEKi8KKwlpZiAoYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7CisJCURCR19NU0coInBpbmd0aW1lciAiKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMDsKKwkJZGVsX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCX0KKyNlbmRpZgorCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKKwlzbGljX2NtZHFfZnJlZShhZGFwdGVyKTsKKwlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7CisKKwlEQkdfTVNHKCJcbiIpOworfQorCisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJc3RhdHMtPmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKKwlzdGF0cy0+cnhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzOworCXN0YXRzLT50eF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnM7CisJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKKwlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKKwlzdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKKwlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gMDsKKwlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisJcmV0dXJuICZhZGFwdGVyLT5zdGF0czsKK30KKyNlbmRpZgorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQoreworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKKwlib29sIGVxdWFsYWRkcjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwl3aGlsZSAobWxpc3QpIHsKKwkJRVRIRVJfRVFfQUREUihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcywgZXF1YWxhZGRyKTsKKwkJaWYgKGVxdWFsYWRkcikKKwkJCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwkJbWxpc3QgPSBtbGlzdC0+bmV4dDsKKwl9CisKKwkvKiBEb2Vzbid0IGFscmVhZHkgZXhpc3QuICBBbGxvY2F0ZSBhIHN0cnVjdHVyZSB0byBob2xkIGl0ICovCisJbWNhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jYXN0X2FkZHJlc3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAobWNhZGRyID09IE5VTEwpCisJCXJldHVybiAxOworCisJbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7CisKKwltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gb2J0YWluIHRoZSBDUkMgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3MuCisgKiBUaGlzIGlzIGEgc3RhbmRhcmQgZXRoZXJuZXQgQ1JDIGluIHRoYXQgaXQgaXMgYSAzMi1iaXQsIHJlZmxlY3RlZCBDUkMgdXNpbmcKKyAqIHRoZSBwb2x5bm9taWFsOgorICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNSArCisgKiAgIHheNCArIHheMiArIHheMS4KKyAqCisgKiBBZnRlciB0aGUgQ1JDIGZvciB0aGUgNiBieXRlcyBpcyBnZW5lcmF0ZWQgKGJ1dCBiZWZvcmUgdGhlIHZhbHVlIGlzCisgKiBjb21wbGVtZW50ZWQpLAorICogd2UgbXVzdCB0aGVuIHRyYW5zcG9zZSB0aGUgdmFsdWUgYW5kIHJldHVybiBiaXRzIDMwLTIzLgorICoKKyAqLworc3RhdGljIHUzMiBzbGljX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkNzIGZvciBhbGwgcG9zc2libGUgYnl0ZSB2YWx1ZXMgKi8KK3N0YXRpYyB1MzIgc2xpY19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgKi8KKworLyoKKyAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKKyAqLworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9pbml0X2NyYzMyKHZvaWQpCit7CisJdTMyIGM7CQkvKiAgQ1JDIHNoaXQgcmVnICAgICAgICAgICAgICAgICAqLworCXUzMiBlID0gMDsJCS8qICBQb2x5IFgtb3IgcGF0dGVybiAgICAgICAgICAgICovCisJaW50IGk7CQkJLyogIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgazsJCQkvKiAgYnl0ZSBiZWluZyBzaGlmdGVkIGludG8gY3JjICAqLworCisJc3RhdGljIGludCBwW10gPSB7IDAsIDEsIDIsIDQsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDE2LCAyMiwgMjMsIDI2IH07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHApIC8gc2l6ZW9mKGludCk7IGkrKykKKwkJZSB8PSAxTCA8PCAoMzEgLSBwW2ldKTsKKworCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykgeworCQljID0gaTsKKwkJZm9yIChrID0gODsgazsgay0tKQorCQkJYyA9IGMgJiAxID8gKGMgPj4gMSkgXiBlIDogYyA+PiAxOworCQlzbGljX2NyY190YWJsZVtpXSA9IGM7CisJfQorfQorCisvKgorICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX21jYXN0X2dldF9tYWNfaGFzaChjaGFyICptYWNhZGRyKQoreworCXUzMiBjcmM7CisJY2hhciAqcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG1hY2hhc2ggPSAwOworCisJaWYgKCFzbGljX2NyY19pbml0KSB7CisJCXNsaWNfbWNhc3RfaW5pdF9jcmMzMigpOworCQlzbGljX2NyY19pbml0ID0gMTsKKwl9CisKKwljcmMgPSAweEZGRkZGRkZGOwkvKiBQcmVsb2FkIHNoaWZ0IHJlZ2lzdGVyLCBwZXIgY3JjLTMyIHNwZWMgKi8KKwlmb3IgKGkgPSAwLCBwID0gbWFjYWRkcjsgaSA8IDY7ICsrcCwgKytpKQorCQljcmMgPSAoY3JjID4+IDgpIF4gc2xpY19jcmNfdGFibGVbKGNyYyBeICpwKSAmIDB4RkZdOworCisJLyogUmV0dXJuIGJpdHMgMS04LCB0cmFuc3Bvc2VkICovCisJZm9yIChpID0gMTsgaSA8IDk7IGkrKykKKwkJbWFjaGFzaCB8PSAoKChjcmMgPj4gaSkgJiAxKSA8PCAoOCAtIGkpKTsKKworCXJldHVybiBtYWNoYXNoOworfQorCitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCit7CisJdW5zaWduZWQgY2hhciBjcmNwb2x5OworCisJLyogR2V0IHRoZSBDUkMgcG9seW5vbWlhbCBmb3IgdGhlIG1hYyBhZGRyZXNzICovCisJY3JjcG9seSA9IHNsaWNfbWNhc3RfZ2V0X21hY19oYXNoKGFkZHJlc3MpOworCisJLyogV2Ugb25seSBoYXZlIHNwYWNlIG9uIHRoZSBTTElDIGZvciA2NCBlbnRyaWVzLiAgTG9wCisJICogb2ZmIHRoZSB0b3AgdHdvIGJpdHMuICgyXjYgPSA2NCkKKwkgKi8KKwljcmNwb2x5ICY9IDB4M0Y7CisKKwkvKiBPUiBpbiB0aGUgbmV3IGJpdCBpbnRvIG91ciA2NCBiaXQgbWFzay4gKi8KKwlhZGFwdGVyLT5tY2FzdG1hc2sgfD0gKHU2NCkgMSA8PCBjcmNwb2x5OworfQorCitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlpbnQgaTsKKwljaGFyICphZGRyZXNzZXM7CisJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5tY19saXN0OworCWludCBtY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisKKwlBU1NFUlQoYWRhcHRlcik7CisKKwlmb3IgKGkgPSAxOyBpIDw9IG1jX2NvdW50OyBpKyspIHsKKwkJYWRkcmVzc2VzID0gKGNoYXIgKikgJm1jX2xpc3QtPmRtaV9hZGRyOworCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikgeworCQkJc3RhdHVzID0gc2xpY19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzbGljX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CisJfQorCisJREJHX01TRygiJXMgYS0+ZGV2ZmxhZ3NfcHJldlsleF0gZGV2LT5mbGFnc1sleF0gc3RhdHVzWyV4XVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXItPmRldmZsYWdzX3ByZXYsIGRldi0+ZmxhZ3MsIHN0YXR1cyk7CisJaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgeworCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCQlpZiAoZGV2LT5mbGFncykgeworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCX0KKwkJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7CisJCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm1hY29wdHMpOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykKKwkJCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCURCR19NU0coIiVzIEVOVEVSICglcykgbWFjb3B0c1sleF0gbWFza1slbGx4XVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgKHVpbnQpIGFkYXB0ZXItPm1hY29wdHMsCisJCWFkYXB0ZXItPm1jYXN0bWFzayk7CisKKwlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKKwkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvcgorCQkgKiBwcm9taXNjdW91cyBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZQorCQkgKiBNaWNyb2NvZGUgZnJvbSBoYXZpbmcgdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDCisJCSAqIGNvbmZpZ3VyYXRpb24uCisJCSAqLworLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIG1hY29wdHMgPSBNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQ1xuXAorCQlTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7CisvKiAgICAgICAgREJHX01TRygiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsCisJCV9mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7ICovCisJfSBlbHNlIHsKKwkJLyogQ29tbWl0IG91ciBtdWx0aWNhc3QgbWFzdCB0byB0aGUgU0xJQyBieSB3cml0aW5nIHRvIHRoZQorCQkgKiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrIHJlZ2lzdGVycworCQkgKi8KKwkJREJHX01TRygiJXMgKCVzKSBXUklURSBtY2FzdGxvd1sleF0gbWNhc3RoaWdoWyV4XVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkoKHVsb25nKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRikpLAorCQkJKCh1bG9uZykgKChhZGFwdGVyLT5tY2FzdG1hc2sgPj4gMzIpICYgMHhGRkZGRkZGRikpKTsKKworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LAorCQkJICAodTMyKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGhpZ2gsCisJCQkgICh1MzIpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLAorCQkJICBGTFVTSCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX3RpbWVyX3BpbmcodWxvbmcgZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKworCUFTU0VSVChkZXYpOworCWFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikoKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldiktPnByaXY7CisJQVNTRVJUKGFkYXB0ZXIpOworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCUFTU0VSVChjYXJkKTsKKyNpZiAhU0xJQ19EVU1QX0VOQUJMRUQKKy8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEKi8KKwlpZiAoKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkpIHsKKwkJaW50IHN0YXR1czsKKworCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKKwkJCWlmIChlcnJvcm1zZysrIDwgNSkgeworCQkJCURCR19NU0cKKwkJCQkgICAgKCIlcyAoJXMpIENBUkQgSEFTIENSQVNIRUQgIFBJTkdfc3RhdHVzID09IFwKKwkJCQkgICAgICV4IEVSUk9STVNHIyAlZFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7CisJCQl9CisJCQkvKiAgIEFTU0VSVChjYXJkLT5waW5nc3RhdHVzID09IElTUl9QSU5HTUFTSyk7ICovCisJCX0gZWxzZSB7CisJCQlpZiAoZ29vZG1zZysrIDwgNSkgeworCQkJCURCR19NU0cKKwkJCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIFBJTkdfc3RhdHVzID09ICV4IFwKKwkJCQkgICAgIEdPT0QhISEhISEhISBtc2cjICVkXG4iLAorCQkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkgICAgIGNhcmQtPnBpbmdzdGF0dXMsIGVycm9ybXNnKTsKKwkJCX0KKwkJfQorCQljYXJkLT5waW5nc3RhdHVzID0gMDsKKwkJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLCAwLCAwLCAwLCAwKTsKKworCQlBU1NFUlQoc3RhdHVzID09IDApOworCX0gZWxzZSB7CisJCURCR19NU0coInNsaWNvc3MgJXMgKCVzKSBhZGFwdGVyWyVwXSBOT1QgVVAhISEhXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJfQorI2VuZGlmCisJYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQorCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19pZl9zdG9wX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2xpY19pZl9zdGFydF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworfQorCisvKgorICogIHNsaWNfaWZfaW5pdAorICoKKyAqICBQZXJmb3JtIGluaXRpYWxpemF0aW9uIG9mIG91ciBzbGljIGludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCBzdGF0dXMgPSAwOworCisJQVNTRVJUKGNhcmQpOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgc3RhdGVzWyVkOiVkOiVkOiVkXSBmbGFnc1sleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsIGFkYXB0ZXItPmxpbmtzdGF0ZSwKKwkJY2FyZC0+c3RhdGUsIGRldi0+ZmxhZ3MpOworCisJLyogYWRhcHRlciBzaG91bGQgYmUgZG93biBhdCB0aGlzIHBvaW50ICovCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKKwkJREJHX0VSUk9SKCJzbGljX2lmX2luaXQgYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlBU1NFUlQoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTik7CisKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCWlmIChkZXYtPmZsYWdzKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX2Z1bmNfXywKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlEQkdfTVNHKCJCQ0FTVCAiKTsKKwkJfQorCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJREJHX01TRygiUFJPTUlTQyAiKTsKKwkJfQorCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQlEQkdfTVNHKCJBTExfTUNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCURCR19NU0coIk1DQVNUICIpOworCQl9CisJCURCR19NU0coIlxuIik7CisJfQorCXN0YXR1cyA9IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUgorCQkgICAgKCJzbGljX2lmX2luaXQ6IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyBGQUlMRUQgJXhcbiIsCisJCSAgICAgc3RhdHVzKTsKKwkJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCFhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgY2FsbCBzbGljX3JzcHF1ZXVlX2luaXRcbiIsIF9fZnVuY19fKTsKKwkJaWYgKHNsaWNfcnNwcXVldWVfaW5pdChhZGFwdGVyKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlEQkdfTVNHCisJCSAgICAoInNsaWNvc3M6ICVzIGNhbGwgc2xpY19jbWRxX2luaXQgYWRhcHRlclslcF0gcG9ydCAlZCBcbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOworCQlpZiAoc2xpY19jbWRxX2luaXQoYWRhcHRlcikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfcmN2cXVldWVfaW5pdCBhZGFwdGVyWyVwXSBcCisJCSAgICAgcG9ydCAlZCBcbiIsIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0KTsKKwkJaWYgKHNsaWNfcmN2cXVldWVfaW5pdChhZGFwdGVyKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQgPSAxOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBkaXNhYmxlIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCW1kZWxheSgxKTsKKworCWlmICghYWRhcHRlci0+aXNwX2luaXRpYWxpemVkKSB7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsCisJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAodTMyKSAwLCBET05UX0ZMVVNIKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsICh1MzIpICZwc2htZW0tPmlzciwgRkxVU0gpOworI2Vsc2UKKwkJU3RvcCBDb21waWxhdGlvbnMKKyNlbmRpZgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKwkJYWRhcHRlci0+aXNwX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOworCWlmICghY2FyZC0+bG9hZHRpbWVyc2V0KSB7CisJCWluaXRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisJCWNhcmQtPmxvYWR0aW1lci5leHBpcmVzID0KKwkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU0xJQ19MT0FEVElNRVJfUEVSSU9EKTsKKwkJY2FyZC0+bG9hZHRpbWVyLmRhdGEgPSAodWxvbmcpIGNhcmQ7CisJCWNhcmQtPmxvYWR0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2xvYWRfY2hlY2s7CisJCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKKworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAxOworCX0KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECisJaWYgKCFhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGdldHN0YXRzX3RpbWVyKHNsaWMpXG4iLAorCQkJX19mdW5jX18pOworCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0KKwkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOworCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmRhdGEgPSAodWxvbmcpIGFkYXB0ZXItPm5ldGRldjsKKwkJYWRhcHRlci0+c3RhdHN0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2dldF9zdGF0czsKKwkJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDE7CisJfQorI2VuZGlmCisjaWYgIVNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECisvKiNpZiBTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRCovCisJaWYgKCFhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgc3RhcnQgY2FyZF9waW5nX3RpbWVyKHNsaWMpXG4iLAorCQkJX19mdW5jX18pOworCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCQlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCQlhZGFwdGVyLT5waW5ndGltZXIuZGF0YSA9ICh1bG9uZykgZGV2OworCQlhZGFwdGVyLT5waW5ndGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9waW5nOworCQlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CisJCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDE7CisJCWFkYXB0ZXItPmNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7CisJfQorI2VuZGlmCisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCURCR19NU0coInNsaWNvc3M6ICVzIEVOQUJMRSBpbnRlcnJ1cHRzKHNsaWMpXG4iLCBfX2Z1bmNfXyk7CisJYWRhcHRlci0+aXNyY29weSA9IDA7CisJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT04sIEZMVVNIKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGNhbGwgc2xpY19saW5rX2NvbmZpZyhzbGljKVxuIiwgX19mdW5jX18pOworCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgTElOS19BVVRPU1BFRUQsIExJTktfQVVUT0QpOworCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCisJaWYgKGFkYXB0ZXItPnNsaWNfcmVncykKKwkJaW91bm1hcChhZGFwdGVyLT5zbGljX3JlZ3MpOworCWFkYXB0ZXItPnNsaWNfcmVncyA9IE5VTEw7CisjZW5kaWYKK30KKworc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCURCR19NU0cKKwkJICAgICgic2xpY29zczogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIHNobWVtWyVwXSBcCisJCSAgICAgcGh5c19zaG1lbVslcF0gZGV2LT5pcnFbJXhdICV4XG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCisJCSAgICAgKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwKKwkJICAgICBOUl9JUlFTKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCQkJICAgICAmc2xpY19pbnRlcnJ1cHQsCisJCQkJICAgICBJUlFGX1NIQVJFRCwKKwkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCisJCWlmIChyZXR2YWwpIHsKKwkJCURCR19FUlJPUigic2xpY29zczogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOworCQlEQkdfTVNHCisJCSAgICAoInNsaWNvc3M6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBzaG1lbVslcF0gXAorCQkgICAgIHBzaG1lbVslcF0gZGV2LT5pcnFbJXhdXG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCisJCSAgICAgKHZvaWQgKilhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwl1MTYgcGNpX2NvbW1hbmQ7CisJdTE2IG5ld19jb21tYW5kOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgUENJIGNvbW1hbmRbJTQuNHhdXG4iLCBfX2Z1bmNfXywgcGNpX2NvbW1hbmQpOworCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUgorCSAgICB8IFBDSV9DT01NQU5EX01FTU9SWQorCSAgICB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEUKKwkgICAgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfRkFTVF9CQUNLOworCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkgeworCQlEQkdfTVNHKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAorCQkJX19mdW5jX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCBuZXdfY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCXNsaWNfaW5pdF9jbGVhbnVwKGFkYXB0ZXIpOworCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworfQorCisvKgorICogIHNsaWNfbGlua19jb25maWcKKyAqCisgKiAgV3JpdGUgcGh5IGNvbnRyb2wgdG8gY29uZmlndXJlIGxpbmsgZHVwbGV4L3NwZWVkCisgKgorICovCitzdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkgICAgICB1MzIgbGlua3NwZWVkLCB1MzIgbGlua2R1cGxleCkKK3sKKwl1MzIgc3BlZWQ7CisJdTMyIGR1cGxleDsKKwl1MzIgcGh5X2NvbmZpZzsKKwl1MzIgcGh5X2FkdnJlZzsKKwl1MzIgcGh5X2djdGxyZWc7CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHsKKwkJREJHX01TRworCQkgICAgKCIlcyAoJXMpIEFEQVBUIE5vdCB1cCB5ZXQsIFJldHVybiEgc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgbGlua3NwZWVkLAorCQkgICAgIGxpbmtkdXBsZXgpOworCQlyZXR1cm47CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzICglcykgc2xpY19saW5rX2NvbmZpZzogc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGxpbmtzcGVlZCwgbGlua2R1cGxleCk7CisKKwlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKKwkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOworCisJaWYgKGxpbmtzcGVlZCA+IExJTktfMTAwME1CKQorCQlsaW5rc3BlZWQgPSBMSU5LX0FVVE9TUEVFRDsKKwlpZiAobGlua2R1cGxleCA+IExJTktfQVVUT0QpCisJCWxpbmtkdXBsZXggPSBMSU5LX0FVVE9EOworCisJaWYgKChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHx8IChsaW5rc3BlZWQgPT0gTElOS18xMDAwTUIpKSB7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIEFEQVBUX0ZMQUdTX0ZJQkVSTUVESUEpIHsKKwkJCS8qICBXZSd2ZSBnb3QgYSBmaWJlciBnaWdhYml0IGludGVyZmFjZSwgYW5kIHJlZ2lzdGVyCisJCQkgKiAgNCBpcyBkaWZmZXJlbnQgaW4gZmliZXIgbW9kZSB0aGFuIGluIGNvcHBlciBtb2RlCisJCQkgKi8KKworCQkJLyogYWR2ZXJ0aXNlIEZEIG9ubHkgQDEwMDAgTWIgKi8KKwkJCXBoeV9hZHZyZWcgPSAoTUlJQ1JfUkVHXzQgfCAoUEFSX0FEVjEwMDBYRkQpKTsKKwkJCS8qIGVuYWJsZSBQQVVTRSBmcmFtZXMgICAgICAgICovCisJCQlwaHlfYWR2cmVnIHw9IFBBUl9BU1lNUEFVU0VfRklCRVI7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9hZHZyZWcsCisJCQkJICBGTFVTSCk7CisKKwkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKKwkJCQkvKiByZXNldCBwaHksIGVuYWJsZSBhdXRvLW5lZyAgKi8KKwkJCQlwaHlfY29uZmlnID0KKwkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAorCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9BVVRPTkVHIHwKKwkJCQkgICAgICBQQ1JfQVVUT05FR19SU1QpKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJfSBlbHNlIHsJLyogZm9yY2VkIDEwMDAgTWIgRkQqLworCQkJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsKKwkJCQkgICB0aGlzIG1heSBub3Qgd29yaykgKi8KKwkJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCBQQ1JfUE9XRVJET1dOKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywKKwkJCQkgICB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAgKi8KKwkJCQltZGVsYXkoMTApOworCisJCQkJLyogZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkL2R1cGxleCwKKwkJCQkgICBzb2Z0IHJlc2V0IHBoeSwgcG93ZXJ1cCAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CisJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX1NQRUVEXzEwMDAgfAorCQkJCSAgICAgIFBDUl9EVVBMRVhfRlVMTCkpOworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKKwkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQl9CisJCX0gZWxzZSB7CS8qIGNvcHBlciBnaWdhYml0ICovCisKKwkJCS8qIEF1dG8tTmVnb3RpYXRlIG9yIDEwMDAgTWIgbXVzdCBiZSBhdXRvIG5lZ290aWF0ZWQKKwkJCSAqIFdlJ3ZlIGdvdCBhIGNvcHBlciBnaWdhYml0IGludGVyZmFjZSwgYW5kCisJCQkgKiByZWdpc3RlciA0IGlzIGRpZmZlcmVudCBpbiBjb3BwZXIgbW9kZSB0aGFuCisJCQkgKiBpbiBmaWJlciBtb2RlCisJCQkgKi8KKwkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKKwkJCQkvKiBhZHZlcnRpc2UgMTAvMTAwIE1iIG1vZGVzICAgKi8KKwkJCQlwaHlfYWR2cmVnID0KKwkJCQkgICAgKE1JSUNSX1JFR180IHwKKwkJCQkgICAgIChQQVJfQURWMTAwRkQgfCBQQVJfQURWMTAwSEQgfCBQQVJfQURWMTBGRAorCQkJCSAgICAgIHwgUEFSX0FEVjEwSEQpKTsKKwkJCX0gZWxzZSB7CisJCQkvKiBsaW5rc3BlZWQgPT0gTElOS18xMDAwTUIgLQorCQkJICAgZG9uJ3QgYWR2ZXJ0aXNlIDEwLzEwMCBNYiBtb2RlcyAgKi8KKwkJCQlwaHlfYWR2cmVnID0gTUlJQ1JfUkVHXzQ7CisJCQl9CisJCQkvKiBlbmFibGUgUEFVU0UgZnJhbWVzICAqLworCQkJcGh5X2FkdnJlZyB8PSBQQVJfQVNZTVBBVVNFOworCQkJLyogcmVxdWlyZWQgYnkgdGhlIENpY2FkYSBQSFkgICovCisJCQlwaHlfYWR2cmVnIHw9IFBBUl84MDJfMzsKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2FkdnJlZywKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIGFkdmVydGlzZSBGRCBvbmx5IEAxMDAwIE1iICAqLworCQkJcGh5X2djdGxyZWcgPSAoTUlJQ1JfUkVHXzkgfCAoUEdDX0FEVjEwMDBGRCkpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfZ2N0bHJlZywKKwkJCQkgIEZMVVNIKTsKKworCQkJaWYgKGFkYXB0ZXItPnN1YnN5c2lkICE9IFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQpIHsKKwkJCQkvKiBpZiBhIE1hcnZlbGwgUEhZCisJCQkJICAgZW5hYmxlIGF1dG8gY3Jvc3NvdmVyICovCisJCQkJcGh5X2NvbmZpZyA9CisJCQkJICAgIChNSUlDUl9SRUdfMTYgfCAoTVJWX1JFRzE2X1hPVkVST04pKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCisJCQkJLyogcmVzZXQgcGh5LCBlbmFibGUgYXV0by1uZWcgICovCisJCQkJcGh5X2NvbmZpZyA9CisJCQkJICAgIChNSUlDUl9SRUdfUENSIHwKKwkJCQkgICAgIChQQ1JfUkVTRVQgfCBQQ1JfQVVUT05FRyB8CisJCQkJICAgICAgUENSX0FVVE9ORUdfUlNUKSk7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCX0gZWxzZSB7CS8qIGl0J3MgYSBDaWNhZGEgUEhZICAqLworCQkJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBhdXRvLW5lZyAoZG9uJ3QgcmVzZXQpICAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CisJCQkJICAgICAoUENSX0FVVE9ORUcgfCBQQ1JfQVVUT05FR19SU1QpKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogRm9yY2VkIDEwLzEwMCAgKi8KKwkJaWYgKGxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQlzcGVlZCA9IDA7CisJCWVsc2UKKwkJCXNwZWVkID0gUENSX1NQRUVEXzEwMDsKKwkJaWYgKGxpbmtkdXBsZXggPT0gTElOS19IQUxGRCkKKwkJCWR1cGxleCA9IDA7CisJCWVsc2UKKwkJCWR1cGxleCA9IFBDUl9EVVBMRVhfRlVMTDsKKworCQlpZiAoYWRhcHRlci0+c3Vic3lzaWQgIT0gU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCkgeworCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQorCQkJICAgZGlzYWJsZSBhdXRvIGNyb3Nzb3ZlciAgKi8KKwkJCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHXzE2IHwgKE1SVl9SRUcxNl9YT1ZFUk9GRikpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLAorCQkJCSAgRkxVU0gpOworCQl9CisKKwkJLyogcG93ZXIgZG93biBwaHkgdG8gYnJlYWsgbGluayAodGhpcyBtYXkgbm90IHdvcmspICAqLworCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoUENSX1BPV0VSRE9XTiB8IHNwZWVkIHwgZHVwbGV4KSk7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOworCisJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywgdHJ5IHRvIGdldCBhd2F5IHdpdGggMTAgbXMgKi8KKwkJbWRlbGF5KDEwKTsKKworCQlpZiAoYWRhcHRlci0+c3Vic3lzaWQgIT0gU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCkgeworCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQorCQkJICAgZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkLAorCQkJICAgc29mdCByZXNldCBwaHksIHBvd2VydXAgKi8KKwkJCXBoeV9jb25maWcgPQorCQkJICAgIChNSUlDUl9SRUdfUENSIHwgKFBDUl9SRVNFVCB8IHNwZWVkIHwgZHVwbGV4KSk7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCisJCQkJICBGTFVTSCk7CisJCX0gZWxzZSB7CS8qIGl0J3MgYSBDaWNhZGEgUEhZICAqLworCQkJLyogZGlzYWJsZSBhdXRvLW5lZywgc2V0IHNwZWVkLCBwb3dlcnVwICAqLworCQkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKHNwZWVkIHwgZHVwbGV4KSk7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCisJCQkJICBGTFVTSCk7CisJCX0KKwl9CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgKCVzKSBFWElUIHNsaWNfbGlua19jb25maWcgOiBzdGF0ZVslZF0gXAorCSAgICBwaHlfY29uZmlnWyV4XVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c3RhdGUsCisJICAgIHBoeV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKGNhcmQtPmR1bXBidWZmZXIpIHsKKwkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzID0gMDsKKwkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCA9IDA7CisJCWNhcmQtPmR1bXBidWZmZXJfcGh5c2ggPSAwOworCQlrZnJlZShjYXJkLT5kdW1wYnVmZmVyKTsKKwkJY2FyZC0+ZHVtcGJ1ZmZlciA9IE5VTEw7CisJfQorCWlmIChjYXJkLT5jbWRidWZmZXIpIHsKKwkJY2FyZC0+Y21kYnVmZmVyX3BoeXMgPSAwOworCQljYXJkLT5jbWRidWZmZXJfcGh5c2wgPSAwOworCQljYXJkLT5jbWRidWZmZXJfcGh5c2ggPSAwOworCQlrZnJlZShjYXJkLT5jbWRidWZmZXIpOworCQljYXJkLT5jbWRidWZmZXIgPSBOVUxMOworCX0KKyNlbmRpZgorCisJaWYgKGNhcmQtPmxvYWR0aW1lcnNldCkgeworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAwOworCQlkZWxfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisJfQorCisJc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koY2FyZCk7CisKKwlrZnJlZShjYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXUzMiBjb2RlYWRkcjsKKwl1bnNpZ25lZCBjaGFyICppbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIHJjdnVjb2RlbGVuID0gMDsKKworCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhciAqKSZPYXNpc1JjdlVDb2RlWzBdOworCQlyY3Z1Y29kZWxlbiA9IE9hc2lzUmN2VUNvZGVMZW47CisJCWJyZWFrOworCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQlpbnN0cnVjdGlvbiA9ICh1bnNpZ25lZCBjaGFyICopJkdCUmN2VUNvZGVbMF07CisJCXJjdnVjb2RlbGVuID0gR0JSY3ZVQ29kZUxlbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwl9CisKKwkvKiBzdGFydCBkb3dubG9hZCAqLworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfQkVHSU4sIEZMVVNIKTsKKworCS8qIGRvd25sb2FkIHRoZSByY3Ygc2VxdWVuY2VyIHVjb2RlICovCisJZm9yIChjb2RlYWRkciA9IDA7IGNvZGVhZGRyIDwgcmN2dWNvZGVsZW47IGNvZGVhZGRyKyspIHsKKwkJLyogd3JpdGUgb3V0IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBjb2RlYWRkciwgRkxVU0gpOworCisJCS8qIHdyaXRlIG91dCB0aGUgaW5zdHJ1Y3Rpb24gZGF0YSBsb3cgYWRkciAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsCisJCQkgICh1MzIpICoodTMyICopIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCWluc3RydWN0aW9uICs9IDQ7CisKKwkJLyogd3JpdGUgb3V0IHRoZSBpbnN0cnVjdGlvbiBkYXRhIGhpZ2ggYWRkciAqLworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsICh1MzIpICppbnN0cnVjdGlvbiwKKwkJCSAgRkxVU0gpOworCQlpbnN0cnVjdGlvbiArPSAxOworCX0KKworCS8qIGRvd25sb2FkIGZpbmlzaGVkICovCisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBTTElDX1JDVldDU19GSU5JU0gsIEZMVVNIKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc2VjdGlvbjsKKwlpbnQgdGhpc3NlY3Rpb25zaXplOworCWludCBjb2RlYWRkcjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwl1MzIgKmluc3RydWN0aW9uID0gTlVMTDsKKwl1MzIgKmxhc3RpbnN0cnVjdCA9IE5VTEw7CisJdTMyICpzdGFydGluc3RydWN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpuZXh0aW5zdHJ1Y3Q7CisJdTMyIGJhc2VhZGRyZXNzOworCXUzMiBmYWlsdXJlOworCXUzMiBpOworCXUzMiBudW1zZWN0cyA9IDA7CisJdTMyIHNlY3RzaXplWzNdOworCXUzMiBzZWN0c3RhcnRbM107CisKKy8qICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzICglcykgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdIFwKKwlqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLAorCSAgICBhZGFwdGVyLT5jYXJkLCBhZGFwdGVyLT5kZXZpZCxqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAqLworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorLyogICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMkdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCisJX19mdW5jX18sICh1aW50KSBPTnVtU2VjdGlvbnMpOyAqLworCQludW1zZWN0cyA9IE9OdW1TZWN0aW9uczsKKwkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKKwkJCXNlY3RzaXplW2ldID0gT1NlY3Rpb25TaXplW2ldOworCQkJc2VjdHN0YXJ0W2ldID0gT1NlY3Rpb25TdGFydFtpXTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKy8qICAgICAgICAgICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMUdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCisJCV9fZnVuY19fLCAodWludCkgTU51bVNlY3Rpb25zKTsgKi8KKwkJbnVtc2VjdHMgPSBNTnVtU2VjdGlvbnM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCQlzZWN0c2l6ZVtpXSA9IE1TZWN0aW9uU2l6ZVtpXTsKKwkJCXNlY3RzdGFydFtpXSA9IE1TZWN0aW9uU3RhcnRbaV07CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwl9CisKKwlBU1NFUlQobnVtc2VjdHMgPD0gMyk7CisKKwlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgbnVtc2VjdHM7IHNlY3Rpb24rKykgeworCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopICZPYXNpc1VDb2RlW3NlY3Rpb25dWzBdOworCQkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07CisJCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOworCQkJbGFzdGluc3RydWN0ID0KKwkJCSAgICAodTMyICopICZPYXNpc1VDb2RlW3NlY3Rpb25dW3NlY3RzaXplW3NlY3Rpb25dIC0KKwkJCQkJCQkgICAgIDhdOworCQkJYnJlYWs7CisJCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopICZNb2phdmVVQ29kZVtzZWN0aW9uXVswXTsKKwkJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKwkJCWxhc3RpbnN0cnVjdCA9CisJCQkgICAgKHUzMiAqKSAmTW9qYXZlVUNvZGVbc2VjdGlvbl1bc2VjdHNpemVbc2VjdGlvbl0KKwkJCQkJCQkgICAgICAtIDhdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOworCisJCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHRoaXNzZWN0aW9uc2l6ZTsgY29kZWFkZHIrKykgeworCQkJc3RhcnRpbnN0cnVjdCA9IGluc3RydWN0aW9uOworCQkJbmV4dGluc3RydWN0ID0gKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24pICsgODsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgYmFzZWFkZHJlc3MgKyBjb2RlYWRkciwKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQl9CisJfQorCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IG51bXNlY3RzOyBzZWN0aW9uKyspIHsKKwkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSZPYXNpc1VDb2RlW3NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopJk1vamF2ZVVDb2RlW3NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQlpZiAoYmFzZWFkZHJlc3MgPCAweDgwMDApCisJCQljb250aW51ZTsKKwkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKworLyogICAgICAgIERCR19NU0cgKCJzbGljb3NzOiBDT01QQVJFIHNlY3RvblsleF0gYmFzZWFkZHJbJXhdIHNlY3Ruc2l6ZVsleF1cbiIsCisJCSh1aW50KXNlY3Rpb24sYmFzZWFkZHJlc3MsdGhpc3NlY3Rpb25zaXplKTsqLworCisJCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHRoaXNzZWN0aW9uc2l6ZTsgY29kZWFkZHIrKykgeworCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLAorCQkJCSAgU0xJQ19XQ1NfQ09NUEFSRSB8IChiYXNlYWRkcmVzcyArIGNvZGVhZGRyKSwKKwkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7CisjZWxzZQorCQkJaW5zdHJ1Y3Rpb24rKzsKKyNlbmRpZgorCQkJLyogQ2hlY2sgU1JBTSBsb2NhdGlvbiB6ZXJvLiBJZiBpdCBpcyBub24temVyby4gQWJvcnQuKi8KKwkJCWZhaWx1cmUgPSByZWFkbCgodTMyIF9faW9tZW0gKikmc2xpY19yZWdzLT5zbGljX3Jlc2V0KTsKKwkJCWlmIChmYWlsdXJlKSB7CisJCQkJREJHX01TRworCQkJCSAgICAoInNsaWNvc3M6ICVzIEZBSUxVUkUgRVhJVCBjb2RlYWRkclsleF0gXAorCQkJCSAgICB0aGlzc2VjdGlvbnNpemVbJXhdIGZhaWx1cmVbJXhdXG4iLAorCQkJCSAgICAgX19mdW5jX18sIGNvZGVhZGRyLCB0aGlzc2VjdGlvbnNpemUsCisJCQkJICAgICBmYWlsdXJlKTsKKworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJfQorLyogICAgREJHX01TRyAoInNsaWNvc3M6IENvbXBhcmUgZG9uZVxuIik7Ki8KKworCS8qIEV2ZXJ5dGhpbmcgT0ssIGtpY2sgb2ZmIHRoZSBjYXJkICovCisJbWRlbGF5KDEwKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgU0xJQ19XQ1NfU1RBUlQsIEZMVVNIKTsKKworCS8qIHN0YWxsIGZvciAyMCBtcywgbG9uZyBlbm91Z2ggZm9yIHVjb2RlIHRvIGluaXQgY2FyZAorCSAgIGFuZCByZWFjaCBtYWlubG9vcCAqLworCW1kZWxheSgyMCk7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF0gY2FyZFslcF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisvKiAgREJHX01TRyAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLAorICAgIF9fZnVuY19fLCBjYXJkLT5jb25maWdfc2V0LCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLT5waHlzcG9ydCwKKyAgICBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7CisKKyAgICBzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KKworCWlmICgoYWRhcHRlci0+Y2FyZCkgJiYgKGNhcmQtPmNvbmZpZ19zZXQpKSB7CisJCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLAorCQkgICAgICAgY2FyZC0+Y29uZmlnLk1hY0luZm9bYWRhcHRlci0+ZnVuY3Rpb25udW1iZXJdLm1hY2FkZHJBLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKKy8qICAgICAgREJHX01TRyAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLAorCV9fZnVuY19fKTsKKwlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsqLworCQlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAorCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclszXSB8fAorCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSkpIHsKKwkJCW1lbWNweShhZGFwdGVyLT5jdXJybWFjYWRkciwgYWRhcHRlci0+bWFjYWRkciwgNik7CisJCX0KKwkJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLAorCQkJICAgICAgIDYpOworCQl9CisJfQorLyogIERCR19NU0cgKCIlcyBFWElUIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5wb3J0KTsKKyAgICBzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KK30KKworc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ludGFnZywgdmFsdWUsIEZMVVNIKTsKKwlhZGFwdGVyLT5jYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJc3RydWN0IHNsaWNfZWVwcm9tICpwZWVwcm9tOworCXN0cnVjdCBvc2xpY19lZXByb20gKnBPZWVwcm9tOworCWRtYV9hZGRyX3QgcGh5c19jb25maWc7CisJdTMyIHBoeXNfY29uZmlnaDsKKwl1MzIgcGh5c19jb25maWdsOworCXUzMiBpID0gMDsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCBzdGF0dXM7CisJdWludCBtYWNhZGRycyA9IGNhcmQtPmNhcmRfc2l6ZTsKKwl1c2hvcnQgZWVjb2Rlc2l6ZTsKKwl1c2hvcnQgZHJhbXNpemU7CisJdXNob3J0IGVlX2Noa3N1bTsKKwl1c2hvcnQgY2FsY19jaGtzdW07CisJc3RydWN0IHNsaWNfY29uZmlnX21hYyAqcG1hYzsKKwl1bnNpZ25lZCBjaGFyIGZydWZvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIG9lbWZydWZvcm1hdDsKKwlzdHJ1Y3QgYXRrX2ZydSAqcGF0a2ZydTsKKwl1bmlvbiBvZW1mcnUgKnBvZW1mcnU7CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgRU5URVIgY2FyZFslcF0gYWRhcHRlclslcF0gY2FyZC0+c3RhdGVbJXhdIFwKKwkgICAgc2l6ZVslZF1cbiIsIF9fZnVuY19fLCBjYXJkLCBhZGFwdGVyLCBjYXJkLT5zdGF0ZSwgY2FyZC0+Y2FyZF9zaXplKTsKKworCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgZXhjZXB0IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJc2xpY19zb2Z0X3Jlc2V0KGFkYXB0ZXIpOworCisJLyogRG93bmxvYWQgdGhlIG1pY3JvY29kZSAqLworCXN0YXR1cyA9IHNsaWNfY2FyZF9kb3dubG9hZChhZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJTTElDIGRvd25sb2FkIGZhaWxlZCBidXMgJWQgc2xvdCAlZFxuIiwKKwkJCSAgKHVpbnQpIGFkYXB0ZXItPmJ1c251bWJlciwKKwkJCSAgKHVpbnQpIGFkYXB0ZXItPnNsb3RudW1iZXIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWlmICghY2FyZC0+Y29uZmlnX3NldCkgeworCQlwZWVwcm9tID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkJCSAgICAgICAmcGh5c19jb25maWcpOworCisJCXBoeXNfY29uZmlnbCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfY29uZmlnKTsKKwkJcGh5c19jb25maWdoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBoeXNfY29uZmlnKTsKKworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFZXByb20gaW5mbyAgYWRhcHRlciBbJXBdXG4gICAgIgorCQkJInNpemUgICAgICAgIFsleF1cbiAgICBwZWVwcm9tICAgICBbJXBdXG4gICAgIgorCQkJInBoeXNfY29uZmlnIFslcF1cbiAgICBwaHlzX2NvbmZpZ2xbJXhdXG4gICAgIgorCQkJInBoeXNfY29uZmlnaFsleF1cbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlciwKKwkJCSh1MzIpc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQlwZWVwcm9tLCAodm9pZCAqKSBwaHlzX2NvbmZpZywgcGh5c19jb25maWdsLAorCQkJcGh5c19jb25maWdoKTsKKwkJaWYgKCFwZWVwcm9tKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIlNMSUMgZWVwcm9tIHJlYWQgZmFpbGVkIHRvIGdldCBtZW1vcnkgYnVzICVkIFwKKwkJCSAgICBzbG90ICVkXG4iLAorCQkJICAgICAodWludCkgYWRhcHRlci0+YnVzbnVtYmVyLAorCQkJICAgICAodWludCkgYWRhcHRlci0+c2xvdG51bWJlcik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChwZWVwcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSk7CisJCX0KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJCW1kZWxheSgxKTsKKwkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCisJCXNsaWNfY29uZmlnX2dldChhZGFwdGVyLCBwaHlzX2NvbmZpZ2wsIHBoeXNfY29uZmlnaCk7CisKKwkJZm9yICg7OykgeworCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSB7CisJCQkJREJHX01TRygiJXMgc2htZW1bJXBdIHNobWVtLT5pc3JbJXhdXG4iLAorCQkJCQlfX2Z1bmNfXywgYWRhcHRlci0+cHNobWVtLAorCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7CisKKwkJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IgJiBJU1JfVVBDKSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCQkJICAgIDAsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkgICAgMCwgRkxVU0gpOworCQkJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzciwgMCwKKwkJCQkJCSAgRkxVU0gpOworCisJCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCisJCQkJCQkgIEZMVVNIKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW1kZWxheSgxKTsKKwkJCQlpKys7CisJCQkJaWYgKGkgPiA1MDAwKSB7CisJCQkJCURCR19FUlJPUgorCQkJCQkgICAgKCJTTElDOiAlZCBjb25maWcgZGF0YSBmZXRjaCB0aW1lZFwKKwkJCQkJICAgICAgb3V0IVxuIiwgYWRhcHRlci0+cG9ydCk7CisJCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKKwkJCQkJCV9fZnVuY19fLCBhZGFwdGVyLT5wc2htZW0sCisJCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7CisJCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCSAgICAwLCBGTFVTSCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwkJLyogT2FzaXMgY2FyZCAqLworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQlwT2VlcHJvbSA9IChzdHJ1Y3Qgb3NsaWNfZWVwcm9tICopIHBlZXByb207CisJCQllZWNvZGVzaXplID0gcE9lZXByb20tPkVlY29kZVNpemU7CisJCQlkcmFtc2l6ZSA9IHBPZWVwcm9tLT5EcmFtU2l6ZTsKKwkJCXBtYWMgPSBwT2VlcHJvbS0+TWFjSW5mbzsKKwkJCWZydWZvcm1hdCA9IHBPZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBPZWVwcm9tLT5BdGtGcnU7CisJCQlvZW1mcnVmb3JtYXQgPSBwT2VlcHJvbS0+T2VtRnJ1Rm9ybWF0OworCQkJcG9lbWZydSA9ICZwT2VlcHJvbS0+T2VtRnJ1OworCQkJbWFjYWRkcnMgPSAyOworCQkJLyogTWlub3Iga2x1ZGdlIGZvciBPYXNpcyBjYXJkCisJCQkgICAgIGdldCAyIE1BQyBhZGRyZXNzZXMgZnJvbSB0aGUKKwkJCSAgICAgRUVQUk9NIHRvIGVuc3VyZSB0aGF0IGZ1bmN0aW9uIDEKKwkJCSAgICAgZ2V0cyB0aGUgUG9ydCAxIE1BQyBhZGRyZXNzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGV4dHJhY3QgRUVQUk9NIGRhdGEgYW5kIHBvaW50ZXJzIHRvIEVFUFJPTSBkYXRhICovCisJCQllZWNvZGVzaXplID0gcGVlcHJvbS0+RWVjb2RlU2l6ZTsKKwkJCWRyYW1zaXplID0gcGVlcHJvbS0+RHJhbVNpemU7CisJCQlwbWFjID0gcGVlcHJvbS0+dTIubWFjLk1hY0luZm87CisJCQlmcnVmb3JtYXQgPSBwZWVwcm9tLT5GcnVGb3JtYXQ7CisJCQlwYXRrZnJ1ID0gJnBlZXByb20tPkF0a0ZydTsKKwkJCW9lbWZydWZvcm1hdCA9IHBlZXByb20tPk9lbUZydUZvcm1hdDsKKwkJCXBvZW1mcnUgPSAmcGVlcHJvbS0+T2VtRnJ1OworCQkJYnJlYWs7CisJCX0KKworCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBGQUxTRTsKKworCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLworCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgorCQkgICAgKGVlY29kZXNpemUgPj0gTUlOX0VFQ09ERV9TSVpFKSkgeworCisJCQllZV9jaGtzdW0gPQorCQkJICAgICoodTE2ICopICgoY2hhciAqKSBwZWVwcm9tICsgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGNhbGN1bGF0ZSB0aGUgRUVQUk9NIGNoZWNrc3VtCisJCQkqLworCQkJY2FsY19jaGtzdW0gPQorCQkJICAgIH5zbGljX2VlcHJvbV9ja3N1bSgoY2hhciAqKSBwZWVwcm9tLAorCQkJCQkgICAgICAgKGVlY29kZXNpemUgLSAyKSk7CisJCQkvKgorCQkJICAgIGlmIHRoZSB1Y2RvZSBjaGtzdW0gZmxhZyBiaXQgd29ya2VkLAorCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzaGl0CisJCQkqLworCQkJaWYgKGVlX2Noa3N1bSA9PSBjYWxjX2Noa3N1bSkKKwkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBUUlVFOworCQl9CisJCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KKwkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7CisKKwkJLyogIGNvcHkgaW4gdGhlIE1BQyBhZGRyZXNzKGVzKSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWFjYWRkcnM7IGkrKykgeworCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKKwkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKKwkJfQorLyogICAgICBEQkdfTVNHICgiJXMgRUVQUk9NIENoZWNrc3VtIEdvb2Q/ICVkICBNYWNBZGRyZXNzXG4iLF9fZnVuY19fLAorCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpOyAqLworCisJCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OworCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5BdGtGcnUsIHBhdGtmcnUsCisJCQkJCQlzaXplb2Yoc3RydWN0IGF0a19mcnUpKTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCisJCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyJWQgWyVwXSBzaXplWyV4XSBGUkVFIHBlZXByb21bJXBdIFwKKwkJICAgICBwaHlzX2NvbmZpZ1slcF1cbiIsCisJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIsCisJCSAgICAgKHUzMikgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksIHBlZXByb20sCisJCSAgICAgKHZvaWQgKikgcGh5c19jb25maWcpOworCisJCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKKwkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKKwkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19pc3AsCisJCQkJICAgIDAsIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBGTFVTSCk7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gIEVFUFJPTSBpbnZhbGlkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJY2FyZC0+Y29uZmlnX3NldCA9IDE7CisJfQorCisJaWYgKHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihhZGFwdGVyKSkgeworCQlEQkdfRVJST1IoIiVzIHVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIiwKKwkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpIHsKKwkJREJHX01TRworCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltFTkFCTEVEXTogc2xpYyVkIFwKKwkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAorCQkgICAgIGNhcmQtPmNhcmRudW0sIDApOworCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7CisJfSBlbHNlIHsKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZ19kZWxheSk7CisJCURCR19NU0cKKwkJICAgICgiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb25bRElTQUJMRURdOiBzbGljJWQgXAorCQkgICAgIFNFVCBpbnRhZ2cgdG8gJWRcbiIsCisJCSAgICAgY2FyZC0+Y2FyZG51bSwgaW50YWdnX2RlbGF5KTsKKwl9CisKKwkvKgorCSAqICBJbml0aWFsaXplIHBpbmcgc3RhdHVzIHRvICJvayIKKwkgKi8KKwljYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOworCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwlpZiAoIWNhcmQtPmR1bXBidWZmZXIpIHsKKwkJY2FyZC0+ZHVtcGJ1ZmZlciA9IGttYWxsb2MoRFVNUF9QQUdFX1NJWkUsIEdGUF9BVE9NSUMpOworCisJCUFTU0VSVChjYXJkLT5kdW1wYnVmZmVyKTsKKwkJaWYgKGNhcmQtPmR1bXBidWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKgorCSAqICBTbWVhciB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgYW5kIHRoZW4gb2J0YWluCisJICogIHRoZSBQSFlTSUNBTCBhZGRyZXNzIG9mIHRoaXMgc3RydWN0dXJlCisJICovCisJbWVtc2V0KGNhcmQtPmR1bXBidWZmZXIsIDAsIERVTVBfUEFHRV9TSVpFKTsKKwljYXJkLT5kdW1wYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX2J1cyhjYXJkLT5kdW1wYnVmZmVyKTsKKwljYXJkLT5kdW1wYnVmZmVyX3BoeXNoID0gU0xJQ19HRVRfQUREUl9ISUdIKGNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCA9IFNMSUNfR0VUX0FERFJfTE9XKGNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisKKwkvKgorCSAqICBBbGxvY2F0ZSBDT01NQU5EIEJVRkZFUgorCSAqLworCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7CisJCWNhcmQtPmNtZGJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkdW1wX2NtZCksIEdGUF9BVE9NSUMpOworCisJCUFTU0VSVChjYXJkLT5jbWRidWZmZXIpOworCQlpZiAoY2FyZC0+Y21kYnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiAgU21lYXIgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGFuZCB0aGVuIG9idGFpbgorCSAqICB0aGUgUEhZU0lDQUwgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdHVyZQorCSAqLworCW1lbXNldChjYXJkLT5jbWRidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZHVtcF9jbWQpKTsKKwljYXJkLT5jbWRidWZmZXJfcGh5cyA9IHZpcnRfdG9fYnVzKGNhcmQtPmNtZGJ1ZmZlcik7CisJY2FyZC0+Y21kYnVmZmVyX3BoeXNoID0gU0xJQ19HRVRfQUREUl9ISUdIKGNhcmQtPmNtZGJ1ZmZlcl9waHlzKTsKKwljYXJkLT5jbWRidWZmZXJfcGh5c2wgPSBTTElDX0dFVF9BRERSX0xPVyhjYXJkLT5jbWRidWZmZXJfcGh5cyk7CisjZW5kaWYKKworCS8qCisJICogTGFzdGx5LCBtYXJrIG91ciBjYXJkIHN0YXRlIGFzIHVwIGFuZCByZXR1cm4gc3VjY2VzcworCSAqLworCWNhcmQtPnN0YXRlID0gQ0FSRF9VUDsKKwljYXJkLT5yZXNldF9pbl9wcm9ncmVzcyA9IDA7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBjYXJkWyVwXSBhZGFwdGVyWyVwXSBjYXJkLT5zdGF0ZVsleF1cbiIsCisJCV9fZnVuY19fLCBjYXJkLCBhZGFwdGVyLCBjYXJkLT5zdGF0ZSk7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJc3RydWN0IHBoeXNjYXJkICpwaHlzY2FyZCA9IHNsaWNfZ2xvYmFsLnBoeXNfY2FyZDsKKwl1c2hvcnQgY2FyZF9ob3N0aWQ7CisJdTE2IF9faW9tZW0gKmhvc3RpZF9yZWc7CisJdWludCBpOworCXVpbnQgcmRob3N0aWRfb2Zmc2V0ID0gMDsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGFkYXB0ZXJbJXBdIHNsb3RbJXhdIGJ1c1sleF0gcG9ydFsleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5zbG90bnVtYmVyLCBhZGFwdGVyLT5idXNudW1iZXIsCisJCWFkYXB0ZXItPnBvcnQpOworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzJHQjsKKwkJYnJlYWs7CisJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6CisJCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMUdCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCX0KKworCWhvc3RpZF9yZWcgPQorCSAgICAodTE2IF9faW9tZW0gKikgKCgodTggX19pb21lbSAqKSAoYWRhcHRlci0+c2xpY19yZWdzKSkgKworCSAgICByZGhvc3RpZF9vZmZzZXQpOworCURCR19NU0coInNsaWNvc3M6ICVzICpob3N0aWRfcmVnWyVwXSA9PSAiLCBfX2Z1bmNfXywgaG9zdGlkX3JlZyk7CisKKwkvKiByZWFkIHRoZSAxNiBiaXQgaG9zdGlkIGZyb20gU1JBTSAqLworCWNhcmRfaG9zdGlkID0gKHVzaG9ydCkgcmVhZHcoaG9zdGlkX3JlZyk7CisJREJHX01TRygiIGNhcmRfaG9zdGlkWyV4XVxuIiwgY2FyZF9ob3N0aWQpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyBjYXJkIHN0cnVjdHVyZSBpZiBuZWVkIGJlICovCisJaWYgKGNhcmRfaG9zdGlkID09IFNMSUNfSE9TVElEX0RFRkFVTFQpIHsKKwkJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljY2FyZCksIEdGUF9LRVJORUwpOworCQlpZiAoY2FyZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKKwkJc2xpY19nbG9iYWwuc2xpY19jYXJkID0gY2FyZDsKKyNpZiBEQkcKKwkJaWYgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkgeworCQkJREJHX01TRworCQkJICAgICgiU0xJQ09TUyA9PT4gSW5pdGlhbGl6ZSAyIFBvcnQgR2lnYWJpdCBTZXJ2ZXIgXAorCQkJICAgICBhbmQgU3RvcmFnZSBBY2NlbGVyYXRvclxuIik7CisJCX0gZWxzZSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJTTElDT1NTID09PiBJbml0aWFsaXplIDEgUG9ydCBHaWdhYml0IFNlcnZlciBcCisJCQkgICAgIGFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yXG4iKTsKKwkJfQorI2VuZGlmCisJCWNhcmQtPmJ1c251bWJlciA9IGFkYXB0ZXItPmJ1c251bWJlcjsKKwkJY2FyZC0+c2xvdG51bWJlciA9IGFkYXB0ZXItPnNsb3RudW1iZXI7CisKKwkJLyogRmluZCBhbiBhdmFpbGFibGUgY2FyZG51bSAqLworCQlmb3IgKGkgPSAwOyBpIDwgU0xJQ19NQVhfQ0FSRFM7IGkrKykgeworCQkJaWYgKHNsaWNfZ2xvYmFsLmNhcmRudW1pbnVzZVtpXSA9PSAwKSB7CisJCQkJc2xpY19nbG9iYWwuY2FyZG51bWludXNlW2ldID0gMTsKKwkJCQljYXJkLT5jYXJkbnVtID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcysrOworCQlEQkdfTVNHKCJcbkNBUkROVU0gPT0gJWQgIFRvdGFsICVkICBDYXJkWyVwXVxuXG4iLAorCQkJY2FyZC0+Y2FyZG51bSwgc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMsIGNhcmQpOworCisJCXNsaWNfZGVidWdfY2FyZF9jcmVhdGUoY2FyZCk7CisJfSBlbHNlIHsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBDQVJEIGFscmVhZHkgYWxsb2NhdGVkLCBmaW5kIHRoZSBcCisJCSAgICAgY29ycmVjdCBjYXJkXG4iLCBfX2Z1bmNfXyk7CisJCS8qIENhcmQgZXhpc3RzLCBmaW5kIHRoZSBjYXJkIHRoaXMgYWRhcHRlciBiZWxvbmdzIHRvICovCisJCXdoaWxlIChjYXJkKSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJzbGljb3NzOiAlcyBjYXJkWyVwXSBzbG90WyV4XSBidXNbJXhdIFwKKwkJCSAgICAgIGFkYXB0cG9ydFslcF0gaG9zdGlkWyV4XSBjYXJkbnVtWyV4XVxuIiwKKwkJCSAgICAgX19mdW5jX18sIGNhcmQsIGNhcmQtPnNsb3RudW1iZXIsCisJCQkgICAgIGNhcmQtPmJ1c251bWJlciwgY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSwKKwkJCSAgICAgY2FyZF9ob3N0aWQsIGNhcmQtPmNhcmRudW0pOworCisJCQlpZiAoY2FyZC0+Y2FyZG51bSA9PSBjYXJkX2hvc3RpZCkKKwkJCQlicmVhazsKKwkJCWNhcmQgPSBjYXJkLT5uZXh0OworCQl9CisJfQorCisJQVNTRVJUKGNhcmQpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCS8qIFB1dCB0aGUgYWRhcHRlciBpbiB0aGUgY2FyZCdzIGFkYXB0ZXIgbGlzdCAqLworCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID09IE5VTEwpOworCWlmICghY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSkgeworCQljYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID0gYWRhcHRlcjsKKwkJYWRhcHRlci0+Y2FyZCA9IGNhcmQ7CisJfQorCisJY2FyZC0+Y2FyZF9zaXplID0gMTsJLyogb25lIHBvcnQgcGVyICpsb2dpY2FsKiBjYXJkICovCisKKwl3aGlsZSAocGh5c2NhcmQpIHsKKwkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX1BPUlRTOyBpKyspIHsKKwkJCWlmICghcGh5c2NhcmQtPmFkYXB0ZXJbaV0pCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJQVNTRVJUKGkgIT0gU0xJQ19NQVhfUE9SVFMpOworCQlpZiAocGh5c2NhcmQtPmFkYXB0ZXJbaV0tPnNsb3RudW1iZXIgPT0gYWRhcHRlci0+c2xvdG51bWJlcikKKwkJCWJyZWFrOworCQlwaHlzY2FyZCA9IHBoeXNjYXJkLT5uZXh0OworCX0KKwlpZiAoIXBoeXNjYXJkKSB7CisJCS8qIG5vIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHRoaXMgcGh5c2ljYWwgY2FyZCB5ZXQgKi8KKwkJcGh5c2NhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQgKiksIEdGUF9BVE9NSUMpOworCQlBU1NFUlQocGh5c2NhcmQpOworCQltZW1zZXQocGh5c2NhcmQsIDAsIHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQgKikpOworCisJCURCR19NU0cKKwkJICAgICgiXG4lcyBBbGxvY2F0ZSBhIFBIWVNJQ0FMY2FyZDpcbiAgICBQSFlTSUNBTF9DYXJkWyVwXVxuXAorCQkgICAgIExvZ2ljYWxDYXJkICBbJXBdXG4gICAgYWRhcHRlciAgICAgIFslcF1cbiIsCisJCSAgICAgX19mdW5jX18sIHBoeXNjYXJkLCBjYXJkLCBhZGFwdGVyKTsKKworCQlwaHlzY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnBoeXNfY2FyZDsKKwkJc2xpY19nbG9iYWwucGh5c19jYXJkID0gcGh5c2NhcmQ7CisJCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgPSAxOworCX0gZWxzZSB7CisJCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QrKzsKKwl9CisJLyogTm90ZSAtIHRoaXMgaXMgWkVSTyByZWxhdGl2ZSAqLworCWFkYXB0ZXItPnBoeXNwb3J0ID0gcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCAtIDE7CisKKwlBU1NFUlQocGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID09IE5VTEwpOworCXBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9IGFkYXB0ZXI7CisJYWRhcHRlci0+cGh5c2NhcmQgPSBwaHlzY2FyZDsKKwlEQkdfTVNHKCIgICAgUEhZU0lDQUxfUG9ydCAlZCAgICBMb2dpY2FsX1BvcnQgICVkXG4iLCBhZGFwdGVyLT5waHlzcG9ydCwKKwkJYWRhcHRlci0+cG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIFFVSUVTQ0UgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkKTsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CisJCW1kZWxheSgxKTsKKwl9CisvKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XVxuIiwKKwlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkLAorCSAgIGFkYXB0ZXItPmRldmlkKTsgKi8KKworCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsIEZMVVNIKTsKKwltZGVsYXkoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKQoreworCXUzMiB2YWx1ZTsKKwl1MzIgUmNyUmVzZXQ7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfaW50ZXJmYWNlX2VuYWJsZVslcF0oJWQpXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLAorCQlhZGFwdGVyLT5jYXJkaW5kZXgpOworCisJaWYgKGxpbmtjaGFuZ2UpIHsKKwkJLyogU2V0dXAgTUFDICovCisJCXNsaWNfbWFjX2NvbmZpZyhhZGFwdGVyKTsKKwkJUmNyUmVzZXQgPSBHUkNSX1JFU0VUOworCX0gZWxzZSB7CisJCXNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKGFkYXB0ZXIpOworCQlSY3JSZXNldCA9IDA7CisJfQorCisJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkgeworCQkvKiBzZXR1cCB4bXRjZmcgKi8KKwkJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgKi8KKwkJCSBHWENSX1hNVEVOIHwJLyogRW5hYmxlIHRyYW5zbWl0ICAqLworCQkJIEdYQ1JfUEFVU0VFTik7CS8qIEVuYWJsZSBwYXVzZSAgICAgKi8KKworCQlEQkdfTVNHKCJzbGljb3NzOiBGRFggYWRhcHRbJXBdIHNldCB4bXRjZmcgdG8gWyV4XVxuIiwgYWRhcHRlciwKKwkJCXZhbHVlKTsKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193eGNmZywgdmFsdWUsIEZMVVNIKTsKKworCQkvKiBTZXR1cCByY3ZjZmcgbGFzdCAqLworCQl2YWx1ZSA9IChSY3JSZXNldCB8CS8qIFJlc2V0LCBpZiBsaW5rY2hhbmdlICovCisJCQkgR1JDUl9DVExFTiB8CS8qIEVuYWJsZSBDVEwgZnJhbWVzICAgICovCisJCQkgR1JDUl9BRERSQUVOIHwJLyogQWRkcmVzcyBBIGVuYWJsZSAgICAgKi8KKwkJCSBHUkNSX1JDVkJBRCB8CS8qIFJjdiBiYWQgZnJhbWVzICAgICAgICovCisJCQkgKEdSQ1JfSEFTSFNJWkUgPDwgR1JDUl9IQVNIU0laRV9TSElGVCkpOworCX0gZWxzZSB7CisJCS8qIHNldHVwIHhtdGNmZyAqLworCQl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAqLworCQkJIEdYQ1JfWE1URU4pOwkvKiBFbmFibGUgdHJhbnNtaXQgICovCisKKwkJREJHX01TRygic2xpY29zczogSERYIGFkYXB0WyVwXSBzZXQgeG10Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsCisJCQl2YWx1ZSk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KKwkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLworCQkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICAgICovCisJCQkgR1JDUl9SQ1ZCQUQgfAkvKiBSY3YgYmFkIGZyYW1lcyAgICAgICAqLworCQkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQkvKiBPbmx5IGVuYWJsZSByZWNlaXZlIGlmIHdlIGFyZSByZXN0YXJ0aW5nIG9yIHJ1bm5pbmcgKi8KKwkJdmFsdWUgfD0gR1JDUl9SQ1ZFTjsKKwl9CisKKwlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIE1BQ19QUk9NSVNDKQorCQl2YWx1ZSB8PSBHUkNSX1JDVkFMTDsKKworCURCR19NU0coInNsaWNvc3M6IGFkYXB0WyVwXSBzZXQgcmN2Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsIHZhbHVlKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworfQorCisvKgorICogIFR1cm4gb2ZmIFJDViBhbmQgWE1ULCBwb3dlciBkb3duIFBIWQorICovCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJdTMyIHBoeV9jb25maWc7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwkvKiBTZXR1cCB4bXRjZmcgKi8KKwl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICovCisJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgKi8KKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwl2YWx1ZSA9IChHUkNSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAgKi8KKwkJIEdSQ1JfQ1RMRU4gfAkvKiBFbmFibGUgQ1RMIGZyYW1lcyAqLworCQkgR1JDUl9BRERSQUVOIHwJLyogQWRkcmVzcyBBIGVuYWJsZSAgKi8KKwkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKKworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkvKiBwb3dlciBkb3duIHBoeSAqLworCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHX1BDUiB8IChQQ1JfUE9XRVJET1dOKSk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKKwkJCQkJCQl1MzIgY29uZmlnX2gpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgIFNMSUNfVVBSX1JDT05GSUcsCisJCQkJICAodTMyKSBjb25maWcsICh1MzIpIGNvbmZpZ19oLCAwLCAwKTsKKwlBU1NFUlQoc3RhdHVzID09IDApOworfQorCitzdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJdTMyIHZhbHVlMjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCXZhbHVlID0gKih1MzIgKikgJmFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdOworCXZhbHVlID0gbnRvaGwodmFsdWUpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKKworCXZhbHVlMiA9ICh1MzIpICgoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gPDwgOCB8CisJCQkgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdKSAmIDB4RkZGRik7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFoLCB2YWx1ZTIsIEZMVVNIKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKKworCURCR19NU0coIiVzIHZhbHVlMVsleF0gdmFsdWUyWyV4XSBDYWxsIHNsaWNfbWNhc3Rfc2V0X21hc2tcbiIsCisJCV9fZnVuY19fLCB2YWx1ZSwgdmFsdWUyKTsKKwlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworCS8qIFdyaXRlIG91ciBtdWx0aWNhc3QgbWFzayBvdXQgdG8gdGhlIGNhcmQuICBUaGlzIGlzIGRvbmUgKi8KKwkvKiBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBzbGljX21jYXN0X2FkZHJfc2V0IHJvdXRpbmUgICAgICovCisJLyogYmVjYXVzZSBBTExfTUNBU1QgbWF5IGhhdmUgYmVlbiBlbmFibGVkIG9yIGRpc2FibGVkICAgICAqLworCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwkvKiBTZXR1cCBHTUFDIGdhcHMgKi8KKwlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIxXzEwMDAgPDwgR01DUl9HQVBSMV9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIyXzEwMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0gZWxzZSB7CisJCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMCA8PCBHTUNSX0dBUEJCX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjFfMTAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMl8xMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOworCX0KKworCS8qIGVuYWJsZSBHTUlJICovCisJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikKKwkJdmFsdWUgfD0gR01DUl9HQklUOworCisJLyogZW5hYmxlIGZ1bGxkdXBsZXggKi8KKwlpZiAoKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkgICAgfHwgKGFkYXB0ZXItPm1hY29wdHMgJiBNQUNfTE9PUEJBQ0spKSB7CisJCXZhbHVlIHw9IEdNQ1JfRlVMTEQ7CisJfQorCisJLyogd3JpdGUgbWFjIGNvbmZpZyAqLworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd21jZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkvKiBzZXR1cCBtYWMgYWRkcmVzc2VzICovCisJc2xpY19tYWNfYWRkcmVzc19jb25maWcoYWRhcHRlcik7Cit9CisKK3N0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKQoreworCXUzMiBvcHRzID0gYWRhcHRlci0+bWFjb3B0czsKKwl1MzIgKmRob3N0NCA9ICh1MzIgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzBdOworCXUxNiAqZGhvc3QyID0gKHUxNiAqKSZldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbNF07CisJYm9vbCBlcXVhbGFkZHI7CisKKwlpZiAob3B0cyAmIE1BQ19QUk9NSVNDKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgUFJPTUlTQ1VPVVMuIEFjY2VwdCBmcmFtZVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlpZiAoKCpkaG9zdDQgPT0gMHhGRkZGRkZGRikgJiYgKCpkaG9zdDIgPT0gMHhGRkZGKSkgeworCQlpZiAob3B0cyAmIE1BQ19CQ0FTVCkgeworCQkJYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMrKzsKKwkJCXJldHVybiBUUlVFOworCQl9IGVsc2UgeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJaWYgKGV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpIHsKKwkJaWYgKG9wdHMgJiBNQUNfQUxMTUNBU1QpIHsKKwkJCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzKys7CisJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCXJldHVybiBUUlVFOworCQl9CisJCWlmIChvcHRzICYgTUFDX01DQVNUKSB7CisJCQlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKworCQkJd2hpbGUgKG1jYWRkcikgeworCQkJCUVUSEVSX0VRX0FERFIobWNhZGRyLT5hZGRyZXNzLAorCQkJCQkgICAgICBldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3QsCisJCQkJCSAgICAgIGVxdWFsYWRkcik7CisJCQkJaWYgKGVxdWFsYWRkcikgeworCQkJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOworCQkJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQkJfQorCQkJCW1jYWRkciA9IG1jYWRkci0+bmV4dDsKKwkJCX0KKwkJCXJldHVybiBGQUxTRTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKwlpZiAob3B0cyAmIE1BQ19ESVJFQ1RFRCkgeworCQlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMrKzsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKKworfQorCitzdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOworCisJREJHX01TRygiJXMgRU5URVIgKCVzKVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgbmV3ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKworCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBzbGljX3RpbWVyX2dldF9zdGF0cworICoKKyAqIFRpbWVyIGZ1bmN0aW9uIHVzZWQgdG8gc3VjayB0aGUgc3RhdGlzdGljcyBvdXQgb2YgdGhlIGNhcmQgZXZlcnkKKyAqIDUwIHNlY29uZHMgb3Igd2hhdGV2ZXIgU1RBVFNfVElNRVJfSU5URVJWQUwgaXMgc2V0IHRvLgorICoKKyAqLworI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfZ2V0X3N0YXRzKHVsb25nIGRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCUFTU0VSVChkZXYpOworCWFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikoKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2KS0+cHJpdjsKKwlBU1NFUlQoYWRhcHRlcik7CisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQpOworCisJaWYgKChjYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSAmJgorCSAgICAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApICYmIChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkpIHsKKwkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgU0xJQ19VUFJfU1RBVFMsCisJCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmluaWNzdGF0cyksCisJCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pbmljc3RhdHMpLCAwLCAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSBTTElDX1VQUl9TVEFUUywKKwkJCQkgKHUzMikgJnBzaG1lbS0+aW5pY3N0YXRzLCAwLCAwLCAwKTsKKyNlbHNlCisJCVN0b3AgY29tcGlsYXRpb247CisjZW5kaWYKKwl9IGVsc2UgeworLyoJCURCR19NU0cgKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBsaW5rc3RhdGVbJXhdIE5PVCBVUCFcbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+bGlua3N0YXRlKTsgKi8KKwl9CisJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0gamlmZmllcyArCisJICAgIFNMSUNfU0VDU19UT19KSUZGUyhTVEFUU19USU1FUl9JTlRFUlZBTCk7CisJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKK30KKyNlbmRpZgorc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNhcmRhZGRyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IChzdHJ1Y3Qgc2xpY2NhcmQgKiljYXJkYWRkcjsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKKwl1MzIgbG9hZCA9IGNhcmQtPmV2ZW50czsKKwl1MzIgbGV2ZWwgPSAwOworCisJaWYgKChhZGFwdGVyKSAmJiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApICYmCisJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSAmJiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpKSB7CisJCWlmIChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzFHQl9ERVZJQ0VfSUQpIHsKKwkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDAwTUIpCisJCQkJbGV2ZWwgPSAxMDA7CisJCQllbHNlIHsKKwkJCQlpZiAobG9hZCA+IFNMSUNfTE9BRF81KQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzU7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF80KQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzQ7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8zKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzM7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8yKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzI7CisJCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8xKQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzE7CisJCQkJZWxzZQorCQkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzA7CisJCQl9CisJCQlpZiAoY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgIT0gbGV2ZWwpIHsKKwkJCQljYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IGxldmVsOworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaW50YWdnLAorCQkJCQkgIGxldmVsLCBGTFVTSCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobG9hZCA+IFNMSUNfTE9BRF81KQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfNTsKKwkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfNCkKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzQ7CisJCQllbHNlIGlmIChsb2FkID4gU0xJQ19MT0FEXzMpCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18zOworCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8yKQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfMjsKKwkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMSkKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzE7CisJCQllbHNlCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18wOworCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CisJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKKwkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJfQorCQl9CisJfQorCWNhcmQtPmV2ZW50cyA9IDA7CisJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQorCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJYWRkX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpCit7CisJdTMyIGNwdWlkOworCXUzMiBjdXJyX3BpZDsKKwljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljdXJyX3BpZCA9IGN1cnJlbnQtPnBpZDsKKworCURCR19FUlJPUigiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIHUzMiB1cHJfcmVxdWVzdCwKKwkJCSAgIHUzMiB1cHJfZGF0YSwKKwkJCSAgIHUzMiB1cHJfZGF0YV9oLAorCQkJICAgdTMyIHVwcl9idWZmZXIsIHUzMiB1cHJfYnVmZmVyX2gpCit7CisJc3RydWN0IHNsaWNfdXByICp1cHI7CisJc3RydWN0IHNsaWNfdXByICp1cHJxdWV1ZTsKKworCXVwciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljX3VwciksIEdGUF9BVE9NSUMpOworCWlmICghdXByKSB7CisJCURCR19NU0coIiVzIENPVUxEIE5PVCBBTExPQ0FURSBVUFIgTUVNXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVwci0+YWRhcHRlciA9IGFkYXB0ZXItPnBvcnQ7CisJdXByLT51cHJfcmVxdWVzdCA9IHVwcl9yZXF1ZXN0OworCXVwci0+dXByX2RhdGEgPSB1cHJfZGF0YTsKKwl1cHItPnVwcl9idWZmZXIgPSB1cHJfYnVmZmVyOworCXVwci0+dXByX2RhdGFfaCA9IHVwcl9kYXRhX2g7CisJdXByLT51cHJfYnVmZmVyX2ggPSB1cHJfYnVmZmVyX2g7CisJdXByLT5uZXh0ID0gTlVMTDsKKwlpZiAoYWRhcHRlci0+dXByX2xpc3QpIHsKKwkJdXBycXVldWUgPSBhZGFwdGVyLT51cHJfbGlzdDsKKworCQl3aGlsZSAodXBycXVldWUtPm5leHQpCisJCQl1cHJxdWV1ZSA9IHVwcnF1ZXVlLT5uZXh0OworCQl1cHJxdWV1ZS0+bmV4dCA9IHVwcjsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT51cHJfbGlzdCA9IHVwcjsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgdTMyIHVwcl9yZXF1ZXN0LAorCQkgICAgIHUzMiB1cHJfZGF0YSwKKwkJICAgICB1MzIgdXByX2RhdGFfaCwKKwkJICAgICB1MzIgdXByX2J1ZmZlciwgdTMyIHVwcl9idWZmZXJfaCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssIGFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKKwlzdGF0dXMgPSBzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJCXVwcl9yZXF1ZXN0LAorCQkJCQl1cHJfZGF0YSwKKwkJCQkJdXByX2RhdGFfaCwgdXByX2J1ZmZlciwgdXByX2J1ZmZlcl9oKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJc2xpY191cHJfc3RhcnQoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywKKwkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJcmV0dXJuIFNUQVRVU19QRU5ESU5HOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJc3RydWN0IHNsaWNfdXByICp1cHI7CisKKy8qICAgIGlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCkgeworCURCR19NU0coIkVOVEVSIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUgRHVtcCBpbiBwcm9ncmVzcyBJU1JbJXhdXG4iLAorCQlpc3IpOworICAgICAgfSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CisJaWYgKCF1cHIpIHsKKwkJQVNTRVJUKDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJCXJldHVybjsKKwl9CisJYWRhcHRlci0+dXByX2xpc3QgPSB1cHItPm5leHQ7CisJdXByLT5uZXh0ID0gTlVMTDsKKwlhZGFwdGVyLT51cHJfYnVzeSA9IDA7CisJQVNTRVJUKGFkYXB0ZXItPnBvcnQgPT0gdXByLT5hZGFwdGVyKTsKKwlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKKwljYXNlIFNMSUNfVVBSX1NUQVRTOgorCQl7CisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorCQkJc3RydWN0IHNsaWNfc3RhdHMgKnNsaWNzdGF0cyA9CisJCQkgICAgKHN0cnVjdCBzbGljX3N0YXRzICopICZhZGFwdGVyLT5wc2htZW0tPmluaWNzdGF0czsKKwkJCXN0cnVjdCBzbGljX3N0YXRzICpuZXdzdGF0cyA9IHNsaWNzdGF0czsKKwkJCXN0cnVjdCBzbGljX3N0YXRzICAqb2xkID0gJmFkYXB0ZXItPmluaWNzdGF0c19wcmV2OworCQkJc3RydWN0IHNsaWNuZXRfc3RhdHMgKnN0c3QgPSAmYWRhcHRlci0+c2xpY19zdGF0czsKKyNlbmRpZgorCQkJaWYgKGlzciAmIElTUl9VUENFUlIpIHsKKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCJTTElDX1VQUl9TVEFUUyBjb21tYW5kIGZhaWxlZCBpc3JbJXhdXG4iLAorCQkJCSAgICAgaXNyKTsKKworCQkJCWJyZWFrOworCQkJfQorI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKy8qCQkJREJHX01TRyAoInNsaWNvc3M6ICVzIHJjdiAlbHg6JWx4OiVseDolbHg6JWx4ICVseCAlbHggIgorCQkJCSJ4bXQgJWx4OiVseDolbHg6JWx4OiVseCAlbHggJWx4XG4iLAorCQkJCSBfX2Z1bmNfXywKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdW5pY2FzdHMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdGNwX2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl90Y3Bfc2VnczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3IxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X2Ryb3BzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdW5pY2FzdHMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX2J5dGVzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX3NlZ3MxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcjEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2NvbGxpc2lvbnMxMDApOyovCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX3NlZ3MsCisJCQkJCW5ld3N0YXRzLT54bWl0X3RjcF9zZWdzX2diLAorCQkJCQlvbGQtPnhtaXRfdGNwX3NlZ3NfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX2J5dGVzLAorCQkJCQluZXdzdGF0cy0+eG1pdF90Y3BfYnl0ZXNfZ2IsCisJCQkJCW9sZC0+eG1pdF90Y3BfYnl0ZXNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnJjdl90Y3Bfc2VncywKKwkJCQkJbmV3c3RhdHMtPnJjdl90Y3Bfc2Vnc19nYiwKKwkJCQkJb2xkLT5yY3ZfdGNwX3NlZ3NfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnJjdl90Y3BfYnl0ZXMsCisJCQkJCW5ld3N0YXRzLT5yY3ZfdGNwX2J5dGVzX2diLAorCQkJCQlvbGQtPnJjdl90Y3BfYnl0ZXNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2J5dGVzLAorCQkJCQluZXdzdGF0cy0+eG1pdF9ieXRlc19nYiwKKwkJCQkJb2xkLT54bWl0X2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnhtdF91Y2FzdCwKKwkJCQkJbmV3c3RhdHMtPnhtaXRfdW5pY2FzdHNfZ2IsCisJCQkJCW9sZC0+eG1pdF91bmljYXN0c19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS5yY3ZfYnl0ZXMsCisJCQkJCW5ld3N0YXRzLT5yY3ZfYnl0ZXNfZ2IsCisJCQkJCW9sZC0+cmN2X2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl91Y2FzdCwKKwkJCQkJbmV3c3RhdHMtPnJjdl91bmljYXN0c19nYiwKKwkJCQkJb2xkLT5yY3ZfdW5pY2FzdHNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2Vycm9ycywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfY29sbGlzaW9uc19nYiwKKwkJCQkJb2xkLT54bWl0X2NvbGxpc2lvbnNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2Vycm9ycywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IsCisJCQkJCW9sZC0+eG1pdF9leGNlc3NfY29sbGlzaW9uc19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS54bXRfZXJyb3JzLAorCQkJCQluZXdzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcl9nYiwKKwkJCQkJb2xkLT54bWl0X290aGVyX2Vycm9yX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl9lcnJvcnMsCisJCQkJCW5ld3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3JfZ2IsCisJCQkJCW9sZC0+cmN2X290aGVyX2Vycm9yX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnJjdl9kaXNjYXJkcywKKwkJCQkJbmV3c3RhdHMtPnJjdl9kcm9wc19nYiwKKwkJCQkJb2xkLT5yY3ZfZHJvcHNfZ2IpOworCisJCQlpZiAobmV3c3RhdHMtPnJjdl9kcm9wc19nYiA+IG9sZC0+cmN2X2Ryb3BzX2diKSB7CisJCQkJYWRhcHRlci0+cmN2X2Ryb3BzICs9CisJCQkJICAgIChuZXdzdGF0cy0+cmN2X2Ryb3BzX2diIC0KKwkJCQkgICAgIG9sZC0+cmN2X2Ryb3BzX2diKTsKKwkJCX0KKwkJCW1lbWNweShvbGQsIG5ld3N0YXRzLCBzaXplb2Yoc3RydWN0IHNsaWNfc3RhdHMpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwljYXNlIFNMSUNfVVBSX1JMU1I6CisJCXNsaWNfbGlua191cHJfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9SQ09ORklHOgorCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX1JQSFk6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9FTkxCOgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCWNhc2UgU0xJQ19VUFJfRU5DVDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX1BEV046CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9QSU5HOgorCQljYXJkLT5waW5nc3RhdHVzIHw9IChpc3IgJiBJU1JfUElOR0RTTUFTSyk7CisJCWJyZWFrOworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJY2FzZSBTTElDX1VQUl9EVU1QOgorCQljYXJkLT5kdW1wc3RhdHVzIHw9IChpc3IgJiBJU1JfVVBDTUFTSyk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCX0KKwlrZnJlZSh1cHIpOworCXNsaWNfdXByX3N0YXJ0KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY191cHIgKnVwcjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKy8qCisgICAgY2hhciAqIHB0cjE7CisgICAgY2hhciAqIHB0cjI7CisgICAgdWludCBjbWRvZmZzZXQ7CisqLworCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OworCWlmICghdXByKQorCQlyZXR1cm47CisJaWYgKGFkYXB0ZXItPnVwcl9idXN5KQorCQlyZXR1cm47CisJYWRhcHRlci0+dXByX2J1c3kgPSAxOworCisJc3dpdGNoICh1cHItPnVwcl9yZXF1ZXN0KSB7CisJY2FzZSBTTElDX1VQUl9TVEFUUzoKKwkJaWYgKHVwci0+dXByX2RhdGFfaCA9PSAwKSB7CisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLCBGTFVTSCk7CisJCX0gZWxzZSB7CisJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfc3RhdHM2NCwKKwkJCQkgICAgdXByLT51cHJfZGF0YSwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJICAgIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTElDX1VQUl9STFNSOgorCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJICAgIHNsaWNfcmVncy0+c2xpY19ybHNyLAorCQkJICAgIHVwci0+dXByX2RhdGEsCisJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlicmVhazsKKworCWNhc2UgU0xJQ19VUFJfUkNPTkZJRzoKKwkJREJHX01TRygiJXMgU0xJQ19VUFJfUkNPTkZJRyEhISFcbiIsIF9fZnVuY19fKTsKKwkJREJHX01TRygiV1JJVEVfUkVHNjQgYWRhcHRlclslcF1cbiIKKwkJCSIgICAgYS0+c2xpY19yZWdzWyVwXSBzbGljX3JlZ3NbJXBdXG4iCisJCQkiICAgICZzbGljX3Jjb25maWdbJXBdICZzbGljX2FkZHJfdXBwZXJbJXBdXG4iCisJCQkiICAgIHVwclslcF1cbiIKKwkJCSIgICAgdXByZGF0YVsleF0gdXByZGF0YWhbJXhdXG4iLAorCQkJYWRhcHRlciwgYWRhcHRlci0+c2xpY19yZWdzLCBzbGljX3JlZ3MsCisJCQkmc2xpY19yZWdzLT5zbGljX3Jjb25maWcsICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCXVwciwgdXByLT51cHJfZGF0YSwgdXByLT51cHJfZGF0YV9oKTsKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfcmNvbmZpZywKKwkJCSAgICB1cHItPnVwcl9kYXRhLAorCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJYnJlYWs7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwljYXNlIFNMSUNfVVBSX0RVTVA6CisjaWYgMAorCQlEQkdfTVNHKCIlcyBTTElDX1VQUl9EVU1QISEhIVxuIiwgX19mdW5jX18pOworCQlEQkdfTVNHKCJXUklURV9SRUc2NCBhZGFwdGVyWyVwXVxuIgorCQkJICIgICAgdXByX2J1ZmZlclsleF0gICB1cHJfYnVmZmVyaFsleF1cbiIKKwkJCSAiICAgIHVwcl9kYXRhWyV4XSAgICAgdXByX2RhdGFoWyV4XVxuIgorCQkJICIgICAgY21kYnVmZlslcF0gY21kYnVmZlBbJXBdXG4iCisJCQkgIiAgICBkdW1wYnVmZlslcF0gZHVtcGJ1ZmZQWyVwXVxuIiwKKwkJCSBhZGFwdGVyLCB1cHItPnVwcl9idWZmZXIsIHVwci0+dXByX2J1ZmZlcl9oLAorCQkJIHVwci0+dXByX2RhdGEsIHVwci0+dXByX2RhdGFfaCwKKwkJCSBhZGFwdGVyLT5jYXJkLT5jbWRidWZmZXIsCisJCQkgKHZvaWQgKilhZGFwdGVyLT5jYXJkLT5jbWRidWZmZXJfcGh5cywKKwkJCSBhZGFwdGVyLT5jYXJkLT5kdW1wYnVmZmVyLCAoCisJCQkgdm9pZCAqKWFkYXB0ZXItPmNhcmQtPmR1bXBidWZmZXJfcGh5cyk7CisKKwkJcHRyMSA9IChjaGFyICopc2xpY19yZWdzOworCQlwdHIyID0gKGNoYXIgKikoJnNsaWNfcmVncy0+c2xpY19kdW1wX2NtZCk7CisJCWNtZG9mZnNldCA9IHB0cjIgLSBwdHIxOworCQlEQkdfTVNHKCJzbGljX2R1bXBfY21kIHJlZ2lzdGVyIG9mZnNldCBbJXhdXG4iLCBjbWRvZmZzZXQpOworI2VuZGlmCisJCWlmICh1cHItPnVwcl9idWZmZXIgfHwgdXByLT51cHJfYnVmZmVyX2gpIHsKKwkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19kdW1wX2RhdGEsCisJCQkJICAgIHVwci0+dXByX2J1ZmZlciwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJICAgIHVwci0+dXByX2J1ZmZlcl9oLCBGTFVTSCk7CisJCX0KKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfZHVtcF9jbWQsCisJCQkgICAgdXByLT51cHJfZGF0YSwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBTTElDX1VQUl9QSU5HOgorCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3BpbmcsIDEsIEZMVVNIKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcikKK3sKKwl1MzIgbGlua3N0YXR1cyA9IGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1czsKKwl1aW50IGxpbmt1cDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7CisKKwlEQkdfTVNHKCIlczogJXMgSVNSWyV4XSBsaW5rc3RhdHVzWyV4XVxuICAgYWRhcHRlclslcF0oJWQpXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpc3IsIGxpbmtzdGF0dXMsIGFkYXB0ZXIsCisJCWFkYXB0ZXItPmNhcmRpbmRleCk7CisKKwlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+bGlua3N0YXR1cyksCisJCQkJICAgICAgIDAsIDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgICh1MzIpICZwc2htZW0tPmxpbmtzdGF0dXMsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfSElHSChwc2htZW0pLCAwLCAwKTsKKyNlbHNlCisJCVN0b3AgQ29tcGlsYXRpb247CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApCisJCXJldHVybjsKKworCUFTU0VSVCgoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKQorCSAgICAgICB8fCAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSk7CisKKwlsaW5rdXAgPSBsaW5rc3RhdHVzICYgR0lHX0xJTktVUCA/IExJTktfVVAgOiBMSU5LX0RPV047CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkgeworCQlsaW5rc3BlZWQgPSBMSU5LXzEwMDBNQjsKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBHSUdBQklUIFNwZWVkPT0xMDAwTUIgICIsCisJCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKSB7CisJCWxpbmtzcGVlZCA9IExJTktfMTAwTUI7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwTUIgICIsIF9fZnVuY19fLAorCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlsaW5rc3BlZWQgPSBMSU5LXzEwTUI7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTBNQiAgIiwgX19mdW5jX18sCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKwlpZiAobGlua3N0YXR1cyAmIEdJR19GVUxMRFVQTEVYKSB7CisJCWxpbmtkdXBsZXggPSBMSU5LX0ZVTExEOworCQlEQkdfTVNHKCIgRHVwbGV4ID09IEZVTExcbiIpOworCX0gZWxzZSB7CisJCWxpbmtkdXBsZXggPSBMSU5LX0hBTEZEOworCQlEQkdfTVNHKCIgRHVwbGV4ID09IEhBTEZcbiIpOworCX0KKworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTikgJiYgKGxpbmt1cCA9PSBMSU5LX0RPV04pKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgcGh5c3BvcnQoJWQpIGxpbmsgc3RpbGwgZG93blxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBoeXNwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKKwkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgorCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKKwkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwb3J0KCVkKSBsaW5rIHN0aWxsIHVwXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCQlyZXR1cm47CisJfQorCisJLyogbGluayBoYXMgY2hhbmdlZCBhdCB0aGlzIHBvaW50ICovCisKKwkvKiBsaW5rIGhhcyBnb25lIGZyb20gdXAgdG8gZG93biAqLworCWlmIChsaW5rdXAgPT0gTElOS19ET1dOKSB7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX01TRygic2xpY29zczogJXMgJWQgTGlua0Rvd24hXG4iLCBfX2Z1bmNfXywKKwkJCWFkYXB0ZXItPnBoeXNwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxpbmsgaGFzIGdvbmUgZnJvbSBkb3duIHRvIHVwICovCisJYWRhcHRlci0+bGlua3NwZWVkID0gbGlua3NwZWVkOworCWFkYXB0ZXItPmxpbmtkdXBsZXggPSBsaW5rZHVwbGV4OworCisJaWYgKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB7CisJCS8qIHNldHVwIHRoZSBtYWMgKi8KKwkJREJHX01TRygiJXMgY2FsbCBzbGljX2NvbmZpZ19zZXRcbiIsIF9fZnVuY19fKTsKKwkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX1VQOworCQlEQkdfTVNHKCJcbiglcykgTGluayBVUDogQ0FMTCBzbGljX2lmX3N0YXJ0X3F1ZXVlIiwKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCXNsaWNfaWZfc3RhcnRfcXVldWUoYWRhcHRlcik7CisJfQorI2lmIDEKKwlzd2l0Y2ggKGxpbmtzcGVlZCkgeworCWNhc2UgTElOS18xMDAwTUI6CisJCURCR19NU0cKKwkJICAgICgiXG4oJXMpIExJTksgVVAhOiBHSUdBQklUIFNQRUVEID09IDEwMDBNQiAgZHVwbGV4WyV4XVxuIiwKKwkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwljYXNlIExJTktfMTAwTUI6CisJCURCR19NU0coIlxuKCVzKSBMSU5LIFVQITogU1BFRUQgPT0gMTAwTUIgIGR1cGxleFsleF1cbiIsCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkdfTVNHKCJcbiglcykgTElOSyBVUCE6IFNQRUVEID09IDEwTUIgIGR1cGxleFsleF1cbiIsCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOworCQlicmVhazsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqICB0aGlzIGlzIGhlcmUgdG8gY2hlY2tzdW0gdGhlIGVlcHJvbSwgdGhlcmUgaXMgc29tZSB1Y29kZSBidWcKKyAqICB3aGljaCBwcmV2ZW5zIHVzIGZyb20gdXNpbmcgdGhlIHVjb2RlIHJlc3VsdC4KKyAqICByZW1vdmUgdGhpcyBvbmNlIHVjb2RlIGlzIGZpeGVkLgorICovCitzdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pCit7CisjZGVmaW5lIEFERENBUlJZKHgpICAoeCA+IDY1NTM1ID8geCAtPSA2NTUzNSA6IHgpCisjZGVmaW5lIFJFRFVDRSB7bF91dGlsLmwgPSBzdW07IHN1bSA9IGxfdXRpbC5zWzBdICsgbF91dGlsLnNbMV07IEFERENBUlJZKHN1bSk7XAorCQl9CisKKwl1MTYgKnc7CisJdTMyIHN1bSA9IDA7CisJdTMyIGJ5dGVfc3dhcHBlZCA9IDA7CisJdTMyIHdfaW50OworCisJdW5pb24geworCQljaGFyIGNbMl07CisJCXVzaG9ydCBzOworCX0gc191dGlsOworCisJdW5pb24geworCQl1c2hvcnQgc1syXTsKKwkJaW50IGw7CisJfSBsX3V0aWw7CisKKwlsX3V0aWwubCA9IDA7CisJc191dGlsLnMgPSAwOworCisJdyA9ICh1MTYgKiltOworI2lmZGVmIENPTkZJR19YODZfNjQKKwl3X2ludCA9ICh1MzIpICgodWxvbmcpIHcgJiAweDAwMDAwMDAwRkZGRkZGRkYpOworI2Vsc2UKKwl3X2ludCA9ICh1MzIpICh3KTsKKyNlbmRpZgorCWlmICgoMSAmIHdfaW50KSAmJiAobGVuID4gMCkpIHsKKwkJUkVEVUNFOworCQlzdW0gPDw9IDg7CisJCXNfdXRpbC5jWzBdID0gKih1bnNpZ25lZCBjaGFyICopdzsKKwkJdyA9ICh1MTYgKikoKGNoYXIgKil3ICsgMSk7CisJCWxlbi0tOworCQlieXRlX3N3YXBwZWQgPSAxOworCX0KKworCS8qIFVucm9sbCB0aGUgbG9vcCB0byBtYWtlIG92ZXJoZWFkIGZyb20gYnJhbmNoZXMgJmMgc21hbGwuICovCisJd2hpbGUgKChsZW4gLT0gMzIpID49IDApIHsKKwkJc3VtICs9IHdbMF07CisJCXN1bSArPSB3WzFdOworCQlzdW0gKz0gd1syXTsKKwkJc3VtICs9IHdbM107CisJCXN1bSArPSB3WzRdOworCQlzdW0gKz0gd1s1XTsKKwkJc3VtICs9IHdbNl07CisJCXN1bSArPSB3WzddOworCQlzdW0gKz0gd1s4XTsKKwkJc3VtICs9IHdbOV07CisJCXN1bSArPSB3WzEwXTsKKwkJc3VtICs9IHdbMTFdOworCQlzdW0gKz0gd1sxMl07CisJCXN1bSArPSB3WzEzXTsKKwkJc3VtICs9IHdbMTRdOworCQlzdW0gKz0gd1sxNV07CisJCXcgPSAodTE2ICopKCh1bG9uZykgdyArIDE2KTsJLyogdmVyaWZ5ICovCisJfQorCWxlbiArPSAzMjsKKwl3aGlsZSAoKGxlbiAtPSA4KSA+PSAwKSB7CisJCXN1bSArPSB3WzBdOworCQlzdW0gKz0gd1sxXTsKKwkJc3VtICs9IHdbMl07CisJCXN1bSArPSB3WzNdOworCQl3ID0gKHUxNiAqKSgodWxvbmcpIHcgKyA0KTsJLyogdmVyaWZ5ICovCisJfQorCWxlbiArPSA4OworCWlmIChsZW4gIT0gMCB8fCBieXRlX3N3YXBwZWQgIT0gMCkgeworCQlSRURVQ0U7CisJCXdoaWxlICgobGVuIC09IDIpID49IDApCisJCQlzdW0gKz0gKncrKzsJLyogdmVyaWZ5ICovCisJCWlmIChieXRlX3N3YXBwZWQpIHsKKwkJCVJFRFVDRTsKKwkJCXN1bSA8PD0gODsKKwkJCWJ5dGVfc3dhcHBlZCA9IDA7CisJCQlpZiAobGVuID09IC0xKSB7CisJCQkJc191dGlsLmNbMV0gPSAqKGNoYXIgKikgdzsKKwkJCQlzdW0gKz0gc191dGlsLnM7CisJCQkJbGVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJbGVuID0gLTE7CisJCQl9CisKKwkJfSBlbHNlIGlmIChsZW4gPT0gLTEpIHsKKwkJCXNfdXRpbC5jWzBdID0gKihjaGFyICopIHc7CisJCX0KKworCQlpZiAobGVuID09IC0xKSB7CisJCQlzX3V0aWwuY1sxXSA9IDA7CisJCQlzdW0gKz0gc191dGlsLnM7CisJCX0KKwl9CisJUkVEVUNFOworCXJldHVybiAodXNob3J0KSBzdW07Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXUzMiBwYWRkcmggPSAwOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCW1lbXNldChyc3BxLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfcnNwcXVldWUpKTsKKworCXJzcHEtPm51bV9wYWdlcyA9IFNMSUNfUlNQUV9QQUdFU19HQjsKKworCWZvciAoaSA9IDA7IGkgPCByc3BxLT5udW1fcGFnZXM7IGkrKykgeworCQlyc3BxLT52YWRkcltpXSA9CisJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKKwkJCQkJICZyc3BxLT5wYWRkcltpXSk7CisJCWlmICghcnNwcS0+dmFkZHJbaV0pIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgicnNwcXVldWVfaW5pdF9mYWlsZWQgIHBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKKwkJCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKKwkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkJfQorI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJCUFTU0VSVCgoKHUzMikgcnNwcS0+dmFkZHJbaV0gJiAweEZGRkZGMDAwKSA9PQorCQkgICAgICAgKHUzMikgcnNwcS0+dmFkZHJbaV0pOworCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnBhZGRyW2ldICYgMHhGRkZGRjAwMCkgPT0KKwkJICAgICAgICh1MzIpIHJzcHEtPnBhZGRyW2ldKTsKKyNlbmRpZgorCQltZW1zZXQocnNwcS0+dmFkZHJbaV0sIDAsIFBBR0VfU0laRSk7CisvKiAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgVVBMT0FEIFJTUEJVRkYgUGFnZSBwYWdlaXhbJXhdIHBhZGRyWyVwXSAiCisJCQkidmFkZHJbJXBdXG4iLAorCQkJX19mdW5jX18sIGksICh2b2lkICopcnNwcS0+cGFkZHJbaV0sIHJzcHEtPnZhZGRyW2ldKTsgKi8KKworCQlpZiAocGFkZHJoID09IDApIHsKKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmJhciwKKwkJCQkgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQkgIERPTlRfRkxVU0gpOworCQl9IGVsc2UgeworCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCQkgICAgKHJzcHEtPnBhZGRyW2ldIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgICAgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJfQorCX0KKwlyc3BxLT5vZmZzZXQgPSAwOworCXJzcHEtPnBhZ2VpbmRleCA9IDA7CisJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKXJzcHEtPnZhZGRyWzBdOworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKKwlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CisJQVNTRVJUKHJzcHEpOworCisJREJHX01TRygic2xpY29zczogTm90aGluZyB0byBkby4gcnNwcVslcF1cbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WyV4XVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlaXhbJXhdXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcGJ1ZlslcF1cbiIsCisJCXJzcHEsIHJzcHEtPm9mZnNldCwgcnNwcS0+cGFnZWluZGV4LCByc3BxLT5yc3BidWYpOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGFkYXB0ZXJbJXBdIHBvcnQgJWQgcnNwcVslcF0gRnJlZVJTUFFcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgcnNwcSk7CisJZm9yIChpID0gMDsgaSA8IHJzcHEtPm51bV9wYWdlczsgaSsrKSB7CisJCWlmIChyc3BxLT52YWRkcltpXSkgeworCQkJREJHX01TRworCQkJICAgICgic2xpY29zczogIHBjaV9mcmVlX2NvbnNpc3RlbnQgcnNwcS0+dmFkZHJbJXBdIFwKKwkJCSAgICBwYWRkclslcF1cbiIsCisJCQkgICAgIHJzcHEtPnZhZGRyW2ldLCAodm9pZCAqKSByc3BxLT5wYWRkcltpXSk7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgUEFHRV9TSVpFLAorCQkJCQkgICAgcnNwcS0+dmFkZHJbaV0sIHJzcHEtPnBhZGRyW2ldKTsKKwkJfQorCQlyc3BxLT52YWRkcltpXSA9IE5VTEw7CisJCXJzcHEtPnBhZGRyW2ldID0gMDsKKwl9CisJcnNwcS0+b2Zmc2V0ID0gMDsKKwlyc3BxLT5wYWdlaW5kZXggPSAwOworCXJzcHEtPnJzcGJ1ZiA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKKwlzdHJ1Y3Qgc2xpY19yc3BidWYgKmJ1ZjsKKworCWlmICghKHJzcHEtPnJzcGJ1Zi0+c3RhdHVzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWYgPSByc3BxLT5yc3BidWY7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKGJ1Zi0+c3RhdHVzICYgMHhGRkZGRkZFMCkgPT0gMCk7CisjZW5kaWYKKwlBU1NFUlQoYnVmLT5ob3N0aGFuZGxlKTsKKwlpZiAoKytyc3BxLT5vZmZzZXQgPCBTTElDX1JTUFFfQlVGU0lOUEFHRSkgeworCQlyc3BxLT5yc3BidWYrKzsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnJzcGJ1ZiAmIDB4RkZGRkZGRTApID09CisJCSAgICAgICAodTMyKSByc3BxLT5yc3BidWYpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJQVNTRVJUKHJzcHEtPm9mZnNldCA9PSBTTElDX1JTUFFfQlVGU0lOUEFHRSk7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCSAgICAocnNwcS0+CisJCQkgICAgIHBhZGRyW3JzcHEtPnBhZ2VpbmRleF0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlyc3BxLT5wYWdlaW5kZXggPSAoKytyc3BxLT5wYWdlaW5kZXgpICUgcnNwcS0+bnVtX3BhZ2VzOworCQlyc3BxLT5vZmZzZXQgPSAwOworCQlyc3BxLT5yc3BidWYgPSAoc3RydWN0IHNsaWNfcnNwYnVmICopCisJCQkJCQlyc3BxLT52YWRkcltyc3BxLT5wYWdlaW5kZXhdOworI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJCUFTU0VSVCgoKHUzMikgcnNwcS0+cnNwYnVmICYgMHhGRkZGRjAwMCkgPT0KKwkJICAgICAgICh1MzIpIHJzcHEtPnJzcGJ1Zik7CisjZW5kaWYKKwl9CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKCh1MzIpIGJ1ZiAmIDB4RkZGRkZGRTApID09ICh1MzIpIGJ1Zik7CisjZW5kaWYKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFtZW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxbWVtICpjbWRxbWVtID0gJmFkYXB0ZXItPmNtZHFtZW07CisKKwltZW1zZXQoY21kcW1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHFtZW0pKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxbWVtX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOworCWludCBpOworCisJREJHX01TRygic2xpY29zczogKCVzKSBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWUgQ01EUSBNZW1vcnlcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgY21kcW1lbSk7CisJZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9NQVhQQUdFUzsgaSsrKSB7CisJCWlmIChjbWRxbWVtLT5wYWdlc1tpXSkgeworCQkJREJHX01TRygic2xpY29zczogJXMgRGVhbGxvY2F0ZSBwYWdlICBDbWRRUGFnZVslcF1cbiIsCisJCQkJX19mdW5jX18sICh2b2lkICopIGNtZHFtZW0tPnBhZ2VzW2ldKTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgUEFHRV9TSVpFLAorCQkJCQkgICAgKHZvaWQgKikgY21kcW1lbS0+cGFnZXNbaV0sCisJCQkJCSAgICBjbWRxbWVtLT5kbWFfcGFnZXNbaV0pOworCQl9CisJfQorCW1lbXNldChjbWRxbWVtLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcW1lbSkpOworfQorCitzdGF0aWMgdTMyICpzbGljX2NtZHFtZW1fYWRkcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxbWVtICpjbWRxbWVtID0gJmFkYXB0ZXItPmNtZHFtZW07CisJdTMyICpwYWdlYWRkcjsKKworCWlmIChjbWRxbWVtLT5wYWdlY250ID49IFNMSUNfQ01EUV9NQVhQQUdFUykKKwkJcmV0dXJuIE5VTEw7CisJcGFnZWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCVBBR0VfU0laRSwKKwkJCQkJJmNtZHFtZW0tPmRtYV9wYWdlc1tjbWRxbWVtLT5wYWdlY250XSk7CisJaWYgKCFwYWdlYWRkcikKKwkJcmV0dXJuIE5VTEw7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOworI2VuZGlmCisJY21kcW1lbS0+cGFnZXNbY21kcW1lbS0+cGFnZWNudF0gPSBwYWdlYWRkcjsKKwljbWRxbWVtLT5wYWdlY250Kys7CisJcmV0dXJuIHBhZ2VhZGRyOworfQorCitzdGF0aWMgaW50IHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXUzMiAqcGFnZWFkZHI7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2RvbmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2FsbC5sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jayk7CisJc2xpY19jbWRxbWVtX2luaXQoYWRhcHRlcik7CisJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOworCWZvciAoaSA9IDA7IGkgPCBTTElDX0NNRFFfSU5JVFBBR0VTOyBpKyspIHsKKwkJcGFnZWFkZHIgPSBzbGljX2NtZHFtZW1fYWRkcGFnZShhZGFwdGVyKTsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHBhZ2VhZGRyICYgMHhGRkZGRjAwMCkgPT0gKHUzMikgcGFnZWFkZHIpOworI2VuZGlmCisJCWlmICghcGFnZWFkZHIpIHsKKwkJCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOworCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQl9CisJCXNsaWNfY21kcV9hZGRjbWRwYWdlKGFkYXB0ZXIsIHBhZ2VhZGRyKTsKKwl9CisJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOworCURCR19NU0coInNsaWNvc3M6ICVzIHJlc2V0IHNsaWNfaGFuZGxlX2l4IHRvIE9ORVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBwb3J0ICVkIEZyZWVDb21tYW5kc0Zyb20gQ01EUVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0KTsKKwljbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCXdoaWxlIChjbWQpIHsKKwkJaWYgKGNtZC0+YnVzeSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRlbXBza2I7CisKKwkJCXRlbXBza2IgPSBjbWQtPnNrYjsKKwkJCWlmICh0ZW1wc2tiKSB7CisJCQkJY21kLT5za2IgPSBOVUxMOworCQkJCWRldl9rZnJlZV9za2JfaXJxKHRlbXBza2IpOworCQkJfQorCQl9CisJCWNtZCA9IGNtZC0+bmV4dF9hbGw7CisJfQorCW1lbXNldCgmYWRhcHRlci0+Y21kcV9hbGwsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCW1lbXNldCgmYWRhcHRlci0+Y21kcV9mcmVlLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZG9uZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJc2xpY19jbWRxbWVtX2ZyZWUoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIG91dHN0YW5kaW5nOworCisJREJHX01TRygiJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKKwkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKKwlvdXRzdGFuZGluZyA9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50IC0gYWRhcHRlci0+Y21kcV9kb25lLmNvdW50OworCW91dHN0YW5kaW5nIC09IGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudDsKKwloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoaGNtZCkgeworCQlpZiAoaGNtZC0+YnVzeSkgeworCQkJc2tiID0gaGNtZC0+c2tiOworCQkJQVNTRVJUKHNrYik7CisJCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBoY21kWyVwXSBza2JbJXBdICIsIF9fZnVuY19fLAorCQkJCWhjbWQsIHNrYik7CisJCQloY21kLT5idXN5ID0gMDsKKwkJCWhjbWQtPnNrYiA9IE5VTEw7CisJCQlEQkdfTVNHKCIgRnJlZSBTS0JcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJfQorCQloY21kID0gaGNtZC0+bmV4dF9hbGw7CisJfQorCWFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCA9IDA7CisJYWRhcHRlci0+Y21kcV9mcmVlLmhlYWQgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZnJlZS50YWlsID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUuY291bnQgPSAwOworCWFkYXB0ZXItPmNtZHFfZG9uZS5oZWFkID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUudGFpbCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9mcmVlLmhlYWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCWhjbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCXdoaWxlIChoY21kKSB7CisJCWFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCsrOworCQloY21kLT5uZXh0ID0gaGNtZC0+bmV4dF9hbGw7CisJCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKKwl9CisJaWYgKGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCAhPSBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCkgeworCQlEQkdfRVJST1IoIiVzIGZyZWVfY291bnQgJWQgIT0gYWxsIGNvdW50ICVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50LCBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOworCURCR19NU0coIiVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqcHJldjsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICp0YWlsOworCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpjbWRxOworCWludCBjbWRjbnQ7CisJdm9pZCAqY21kYWRkcjsKKwl1bG9uZyBwaHlzX2FkZHI7CisJdTMyIHBoeXNfYWRkcmw7CisJdTMyIHBoeXNfYWRkcmg7CisJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CisKKwljbWRhZGRyID0gcGFnZTsKKwljbWQgPSAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKWNtZGFkZHI7CisvKiAgREJHX01TRygiQ01EUSBQYWdlIGFkZHJbJXBdIGl4WyVkXSBwZnJlZVslcF1cbiIsIGNtZGFkZHIsIHNsaWNfaGFuZGxlX2l4LAorICAgIGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyk7ICovCisJY21kY250ID0gMDsKKworCXBoeXNfYWRkciA9IHZpcnRfdG9fYnVzKCh2b2lkICopcGFnZSk7CisJcGh5c19hZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfYWRkcik7CisJcGh5c19hZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOworCisJcHJldiA9IE5VTEw7CisJdGFpbCA9IGNtZDsKKwl3aGlsZSAoKGNtZGNudCA8IFNMSUNfQ01EUV9DTURTSU5QQUdFKSAmJgorCSAgICAgICAoYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPCAyNTYpKSB7CisJCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgU0xJQ19IQU5ETEUgZm9yIHRoaXMgY29tbWFuZCAqLworCQlTTElDX0dFVF9TTElDX0hBTkRMRShhZGFwdGVyLCBwc2xpY19oYW5kbGUpOworCQlpZiAocHNsaWNfaGFuZGxlID09IE5VTEwpCisJCQlBU1NFUlQoMCk7CisJCUFTU0VSVChwc2xpY19oYW5kbGUgPT0KKwkJICAgICAgICZhZGFwdGVyLT5zbGljX2hhbmRsZXNbcHNsaWNfaGFuZGxlLT50b2tlbi4KKwkJCQkJICAgICAgaGFuZGxlX2luZGV4XSk7CisJCXBzbGljX2hhbmRsZS0+dHlwZSA9IFNMSUNfSEFORExFX0NNRDsKKwkJcHNsaWNfaGFuZGxlLT5hZGRyZXNzID0gKHZvaWQgKikgY21kOworCQlwc2xpY19oYW5kbGUtPm9mZnNldCA9ICh1c2hvcnQpIGFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4Kys7CisJCXBzbGljX2hhbmRsZS0+b3RoZXJfaGFuZGxlID0gTlVMTDsKKwkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gTlVMTDsKKworCQljbWQtPnBzbGljX2hhbmRsZSA9IHBzbGljX2hhbmRsZTsKKwkJY21kLT5jbWQ2NC5ob3N0aGFuZGxlID0gcHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW47CisJCWNtZC0+YnVzeSA9IEZBTFNFOworCQljbWQtPnBhZGRybCA9IHBoeXNfYWRkcmw7CisJCWNtZC0+cGFkZHJoID0gcGh5c19hZGRyaDsKKwkJY21kLT5uZXh0X2FsbCA9IHByZXY7CisJCWNtZC0+bmV4dCA9IHByZXY7CisJCXByZXYgPSBjbWQ7CisJCXBoeXNfYWRkcmwgKz0gU0xJQ19IT1NUQ01EX1NJWkU7CisJCWNtZGFkZHIgKz0gU0xJQ19IT1NUQ01EX1NJWkU7CisKKwkJY21kID0gKHN0cnVjdCBzbGljX2hvc3RjbWQgKiljbWRhZGRyOworCQljbWRjbnQrKzsKKwl9CisKKwljbWRxID0gJmFkYXB0ZXItPmNtZHFfYWxsOworCWNtZHEtPmNvdW50ICs9IGNtZGNudDsJLyogIFNMSUNfQ01EUV9DTURTSU5QQUdFOyAgIG1vb2t0b2RvICovCisJdGFpbC0+bmV4dF9hbGwgPSBjbWRxLT5oZWFkOworCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKKwljbWRxLT5oZWFkID0gcHJldjsKKwljbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKKwljbWRxLT5jb3VudCArPSBjbWRjbnQ7CS8qICBTTElDX0NNRFFfQ01EU0lOUEFHRTsgICBtb29rdG9kbyAqLworCXRhaWwtPm5leHQgPSBjbWRxLT5oZWFkOworCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKKwljbWRxLT5oZWFkID0gcHJldjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcXVldWUgKmNtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCA9IE5VTEw7CisKK2xvY2tfYW5kX3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOworcmV0cnk6CisJY21kID0gY21kcS0+aGVhZDsKKwlpZiAoY21kKSB7CisJCWNtZHEtPmhlYWQgPSBjbWQtPm5leHQ7CisJCWNtZHEtPmNvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZHEtPmxvY2subG9jaywgY21kcS0+bG9jay5mbGFncyk7CisJfSBlbHNlIHsKKwkJc2xpY19jbWRxX2dldGRvbmUoYWRhcHRlcik7CisJCWNtZCA9IGNtZHEtPmhlYWQ7CisJCWlmIChjbWQpIHsKKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSB7CisJCQl1MzIgKnBhZ2VhZGRyOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssCisJCQkJCQljbWRxLT5sb2NrLmZsYWdzKTsKKwkJCXBhZ2VhZGRyID0gc2xpY19jbWRxbWVtX2FkZHBhZ2UoYWRhcHRlcik7CisJCQlpZiAocGFnZWFkZHIpIHsKKwkJCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CisJCQkJZ290byBsb2NrX2FuZF9yZXRyeTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gY21kOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZG9uZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZG9uZTsKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqZnJlZV9jbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKworCUFTU0VSVChmcmVlX2NtZHEtPmhlYWQgPT0gTlVMTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOworCUFTU0VSVChWQUxJRF9BRERSRVNTKGRvbmVfY21kcS0+aGVhZCkpOworCisJZnJlZV9jbWRxLT5oZWFkID0gZG9uZV9jbWRxLT5oZWFkOworCWZyZWVfY21kcS0+Y291bnQgPSBkb25lX2NtZHEtPmNvdW50OworCWRvbmVfY21kcS0+aGVhZCA9IE5VTEw7CisJZG9uZV9jbWRxLT50YWlsID0gTlVMTDsKKwlkb25lX2NtZHEtPmNvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb25lX2NtZHEtPmxvY2subG9jaywgZG9uZV9jbWRxLT5sb2NrLmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqY21kcSA9ICZhZGFwdGVyLT5jbWRxX2RvbmU7CisKKwlzcGluX2xvY2soJmNtZHEtPmxvY2subG9jayk7CisJY21kLT5idXN5ID0gMDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhjbWRxLT5oZWFkKSk7CisJY21kLT5uZXh0ID0gY21kcS0+aGVhZDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhjbWQpKTsKKwljbWRxLT5oZWFkID0gY21kOworCWNtZHEtPmNvdW50Kys7CisJaWYgKChhZGFwdGVyLT54bWl0cV9mdWxsKSAmJiAoY21kcS0+Y291bnQgPiAxMCkpCisJCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwlzcGluX3VubG9jaygmY21kcS0+bG9jay5sb2NrKTsKK30KKworc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGNvdW50OworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCisJREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CisJcmN2cS0+dGFpbCA9IE5VTEw7CisJcmN2cS0+aGVhZCA9IE5VTEw7CisJcmN2cS0+c2l6ZSA9IFNMSUNfUkNWUV9FTlRSSUVTOworCXJjdnEtPmVycm9ycyA9IDA7CisJcmN2cS0+Y291bnQgPSAwOworCWkgPSAoU0xJQ19SQ1ZRX0VOVFJJRVMgLyBTTElDX1JDVlFfRklMTEVOVFJJRVMpOworCWNvdW50ID0gMDsKKwl3aGlsZSAoaSkgeworCQljb3VudCArPSBzbGljX3JjdnF1ZXVlX2ZpbGwoYWRhcHRlcik7CisJCWktLTsKKwl9CisJaWYgKHJjdnEtPmNvdW50IDwgU0xJQ19SQ1ZRX01JTkVOVFJJRVMpIHsKKwkJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOworCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJfQorCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCUFTU0VSVChyY3ZxKTsKKworCURCR19NU0coInNsaWNvc3M6IE5vdGhpbmcgdG8gZG8uIHJjdnFbJXBdXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50WyV4XVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkWyVwXVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsWyVwXVxuIiwKKwkJcmN2cSwgcmN2cS0+Y291bnQsIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwpOworCisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAocmN2cS0+aGVhZCkgeworCQlza2IgPSByY3ZxLT5oZWFkOworCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKwlyY3ZxLT50YWlsID0gTlVMTDsKKwlyY3ZxLT5oZWFkID0gTlVMTDsKKwlyY3ZxLT5jb3VudCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWY7CisJaW50IGNvdW50OworCisJaWYgKHJjdnEtPmNvdW50KSB7CisJCXNrYiA9IHJjdnEtPmhlYWQ7CisJCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJCUFTU0VSVChyY3ZidWYpOworCisJCWlmIChyY3ZidWYtPnN0YXR1cyAmIElSSEREUl9TVkFMSUQpIHsKKwkJCXJjdnEtPmhlYWQgPSByY3ZxLT5oZWFkLT5uZXh0OworCQkJc2tiLT5uZXh0ID0gTlVMTDsKKwkJCXJjdnEtPmNvdW50LS07CisJCX0gZWxzZSB7CisJCQlza2IgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJREJHX0VSUk9SKCJSY3ZRIEVtcHR5ISEgYWRhcHRlclslcF0gcmN2cVslcF0gY291bnRbJXhdXG4iLAorCQkJICBhZGFwdGVyLCByY3ZxLCByY3ZxLT5jb3VudCk7CisJCXNrYiA9IE5VTEw7CisJfQorCXdoaWxlIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CisJCWNvdW50ID0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOworCQlpZiAoIWNvdW50KQorCQkJYnJlYWs7CisJfQorCWlmIChza2IpCisJCXJjdnEtPmVycm9ycyA9IDA7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCAqcGFkZHI7CisJdTMyIHBhZGRybDsKKwl1MzIgcGFkZHJoOworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCWludCBpID0gMDsKKworCXdoaWxlIChpIDwgU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKSB7CisJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworI2lmZGVmIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZCityZXRyeV9yY3ZxZmlsbDoKKyNlbmRpZgorCQlza2IgPSBhbGxvY19za2IoU0xJQ19SQ1ZRX1JDVkJVRlNJWkUsIEdGUF9BVE9NSUMpOworCQlpZiAoc2tiKSB7CisJCQlwYWRkciA9ICh2b2lkICopcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJCSAgc2tiLT5kYXRhLAorCQkJCQkJCSAgU0xJQ19SQ1ZRX1JDVkJVRlNJWkUsCisJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGFkZHIpOworCQkJcGFkZHJoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBhZGRyKTsKKworCQkJc2tiLT5sZW4gPSBTTElDX1JDVkJVRl9IRUFEU0laRTsKKwkJCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJCQlyY3ZidWYtPnN0YXR1cyA9IDA7CisJCQlza2ItPm5leHQgPSBOVUxMOworI2lmZGVmIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZCisJCQlpZiAocGFkZHJsID09IDApIHsKKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgIgorCQkJCSAgICAgInNrYlslcF0gICBQUk9CTEVNXG4iCisJCQkJICAgICAiICAgICAgICAgc2tiZGF0YVslcF1cbiIKKwkJCQkgICAgICIgICAgICAgICBza2JsZW5bJXhdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJsWyV4XVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsCisJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLAorCQkJCSAgICAgcGFkZHJoKTsKKwkJCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCisJCQkJCSAgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iCisJCQkJCSAgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwKKwkJCQkJICByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLCByY3ZxLT5jb3VudCk7CisJCQkJREJHX0VSUk9SKCJTS0lQIFRISVMgU0tCISEhISEhISFcbiIpOworCQkJCWdvdG8gcmV0cnlfcmN2cWZpbGw7CisJCQl9CisjZWxzZQorCQkJaWYgKHBhZGRybCA9PSAwKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiXG5cbiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCAiCisJCQkJICAgICAic2tiWyVwXSAgR0lWRSBUTyBDQVJEIEFOWVdBWVxuIgorCQkJCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgcGFkZHJsWyV4XVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsCisJCQkJICAgICBza2ItPmRhdGEsIHBhZGRyLCBwYWRkcmwsIHBhZGRyaCk7CisJCQl9CisjZW5kaWYKKwkJCWlmIChwYWRkcmggPT0gMCkgeworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwKKwkJCQkJICAodTMyKSBwYWRkcmwsIERPTlRfRkxVU0gpOworCQkJfSBlbHNlIHsKKwkJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKKwkJCQkJICAgICh1MzIpIHBhZGRybCwKKwkJCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQkgICAgKHUzMikgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJCX0KKwkJCWlmIChyY3ZxLT5oZWFkKQorCQkJCXJjdnEtPnRhaWwtPm5leHQgPSBza2I7CisJCQllbHNlCisJCQkJcmN2cS0+aGVhZCA9IHNrYjsKKwkJCXJjdnEtPnRhaWwgPSBza2I7CisJCQlyY3ZxLT5jb3VudCsrOworCQkJaSsrOworCQl9IGVsc2UgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCIlcyBzbGljX3JjdnF1ZXVlX2ZpbGwgY291bGQgb25seSBnZXQgWyVkXSAiCisJCQkgICAgICJza2J1ZmZzXG4iLAorCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGkpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwl2b2lkICpwYWRkcjsKKwl1MzIgcGFkZHJsOworCXUzMiBwYWRkcmg7CisJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCisJQVNTRVJUKHNrYi0+bGVuID09IFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKKworCXBhZGRyID0gKHZvaWQgKilwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+aGVhZCwKKwkJCQkgIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXJjdmJ1Zi0+c3RhdHVzID0gMDsKKwlza2ItPm5leHQgPSBOVUxMOworCisJcGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGFkZHIpOworCXBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwYWRkcik7CisKKwlpZiAocGFkZHJsID09IDApIHsKKwkJREJHX0VSUk9SCisJCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCBza2JbJXBdICAgUFJPQkxFTVxuIgorCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIiAiICAgICAgICAgc2tibGVuWyV4XVxuIgorCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIgIiAgICAgICAgIHBhZGRybFsleF1cbiIKKwkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwgc2tiLT5kYXRhLAorCQkgICAgIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOworCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCisJCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgorCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLCByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLAorCQkJICByY3ZxLT5jb3VudCk7CisJfQorCWlmIChwYWRkcmggPT0gMCkgeworCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsICh1MzIpIHBhZGRybCwKKwkJCSAgRE9OVF9GTFVTSCk7CisJfSBlbHNlIHsKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhcjY0LAorCQkJICAgIHBhZGRybCwKKwkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCSAgICBwYWRkcmgsIERPTlRfRkxVU0gpOworCX0KKwlpZiAocmN2cS0+aGVhZCkKKwkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKKwllbHNlCisJCXJjdnEtPmhlYWQgPSBza2I7CisJcmN2cS0+dGFpbCA9IHNrYjsKKwlyY3ZxLT5jb3VudCsrOworCXJldHVybiByY3ZxLT5jb3VudDsKK30KKworc3RhdGljIGludCBzbGljX2RlYnVnX2NhcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKyNpZmRlZiBNT09LVE9ETworCWludCBpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2xpY19jb25maWcgKmNvbmZpZyA9ICZjYXJkLT5jb25maWc7CisJdW5zaWduZWQgY2hhciAqZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5hdGtfZnJ1KTsKKwl1bnNpZ25lZCBjaGFyICpvZW1mcnUgPSAodW5zaWduZWQgY2hhciAqKSgmY2FyZC0+Y29uZmlnLk9lbUZydSk7CisjZW5kaWYKKworCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXMiLCBzbGljX3Byb2NfdmVyc2lvbik7CisJc2VxX3ByaW50ZihzZXEsICJNaWNyb2NvZGUgdmVyc2lvbnM6ICAgICAgICAgICBcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgIEdpZ2FiaXQgKGdiKSAgICAgICAgIDogJXMgJXNcbiIsCisJCSAgICBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcsIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUpOworCXNlcV9wcmludGYoc2VxLCAiICAgIEdpZ2FiaXQgUmVjZWl2ZXIgICAgIDogJXMgJXNcbiIsCisJCSAgICBHQl9SQ1ZVQ09ERV9WRVJTX1NUUklORywgR0JfUkNWVUNPREVfVkVSU19EQVRFKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6ICVzXG4iLCBzbGljX3ZlbmRvcik7CisJc2VxX3ByaW50ZihzZXEsICJQcm9kdWN0IE5hbWUgICAgICAgICAgICAgOiAlc1xuIiwgc2xpY19wcm9kdWN0X25hbWUpOworI2lmZGVmIE1PT0tUT0RPCisJc2VxX3ByaW50ZihzZXEsICJWZW5kb3JJZCAgICAgICAgICAgICAgICAgOiAlNC40WFxuIiwKKwkJICAgIGNvbmZpZy0+VmVuZG9ySWQpOworCXNlcV9wcmludGYoc2VxLCAiRGV2aWNlSWQgICAgICAgICAgICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBjb25maWctPkRldmljZUlkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlJldmlzaW9uSWQgICAgICAgICAgICAgICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5SZXZpc2lvbklkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkJ1cyAgICAjICAgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5idXNudW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiRGV2aWNlICMgICAgICAgICAgICAgICAgIDogJWRcbiIsIGNhcmQtPnNsb3RudW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiSW50ZXJmYWNlcyAgICAgICAgICAgICAgIDogJWRcbiIsIGNhcmQtPmNhcmRfc2l6ZSk7CisJc2VxX3ByaW50ZihzZXEsICIgICAgIEluaXRpYWxpemVkICAgICAgICAgOiAlZFxuIiwKKwkJICAgIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCk7CisJc2VxX3ByaW50ZihzZXEsICIgICAgIEFsbG9jYXRlZCAgICAgICAgICAgOiAlZFxuIiwKKwkJICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJQVNTRVJUKGNhcmQtPmNhcmRfc2l6ZSA8PSBTTElDX05CUl9NQUNTKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiICAgICBNQUMlZCA6ICUyLjJYICUyLjJYICUyLjJYICUyLjJYICUyLjJYICUyLjJYXG4iLAorCQkJICAgaSwgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzBdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzFdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzJdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzNdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzRdLAorCQkJICAgY29uZmlnLT5tYWNpbmZvW2ldLm1hY2FkZHJBWzVdKTsKKwl9CisJc2VxX3ByaW50ZihzZXEsICIgICAgIElGICBJbml0IFN0YXRlIER1cGxleC9TcGVlZCBpcnFcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkOyBpKyspIHsKKwkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisKKwkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCWlmIChhZGFwdGVyKSB7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICAgJWQgICAlZCAgICVzICAlcyAgJXMgICAgMHglWFxuIiwKKwkJCQkgICAgYWRhcHRlci0+cGh5c3BvcnQsIGFkYXB0ZXItPnN0YXRlLAorCQkJCSAgICBTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJCSAgICBTTElDX0RVUExFWChhZGFwdGVyLT5saW5rZHVwbGV4KSwKKwkJCQkgICAgU0xJQ19TUEVFRChhZGFwdGVyLT5saW5rc3BlZWQpLAorCQkJCSAgICAodWludCkgYWRhcHRlci0+aXJxKTsKKwkJfQorCX0KKwlzZXFfcHJpbnRmKHNlcSwgIkdlbmVyYXRpb24gIyAgICAgICAgICAgICA6ICU0LjRYXG4iLCBjYXJkLT5nZW5udW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiUmN2USBtYXggZW50cmllcyAgICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBTTElDX1JDVlFfRU5UUklFUyk7CisJc2VxX3ByaW50ZihzZXEsICJQaW5nIFN0YXR1cyAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJICAgIGNhcmQtPnBpbmdzdGF0dXMpOworCXNlcV9wcmludGYoc2VxLCAiTWluaW11bSBncmFudCAgICAgICAgICAgIDogJTIuMnhcbiIsCisJCSAgICBjb25maWctPk1pbkdyYW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgIk1heGltdW0gTGF0ZW5jeSAgICAgICAgICA6ICUyLjJ4XG4iLCBjb25maWctPk1heExhdCk7CisJc2VxX3ByaW50ZihzZXEsICJQY2lTdGF0dXMgICAgICAgICAgICAgICAgOiAlNC40eFxuIiwKKwkJICAgIGNvbmZpZy0+UGNpc3RhdHVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkRlYnVnIERldmljZSBJZCAgICAgICAgICA6ICU0LjR4XG4iLAorCQkgICAgY29uZmlnLT5EYmdEZXZJZCk7CisJc2VxX3ByaW50ZihzZXEsICJEUkFNIFJPTSBGdW5jdGlvbiAgICAgICAgOiAlNC40eFxuIiwKKwkJICAgIGNvbmZpZy0+RHJhbVJvbUZuKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAxICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAyICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk5ldHdvcmsgaW50ZXJmYWNlIFBpbiAzICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5OZXRJbnRQaW4xKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlBNIGNhcGFiaWxpdGllcyAgICAgICAgICA6ICU0LjRYXG4iLAorCQkgICAgY29uZmlnLT5QTUVDYXBhYik7CisJc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIENsb2NrIENvbnRyb2xzICAgOiAlNC40WFxuIiwKKwkJICAgIGNvbmZpZy0+TndDbGtDdHJscyk7CisKKwlzd2l0Y2ggKGNvbmZpZy0+RnJ1Rm9ybWF0KSB7CisJY2FzZSBBVEtfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6IEFsYWNyaXRlY2gsIEluYy5cbiIpOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIkFzc2VtYmx5ICMgICAgICAgICAgICAgICA6ICVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgZnJ1WzBdLCBmcnVbMV0sIGZydVsyXSwgZnJ1WzNdLCBmcnVbNF0sCisJCQkJICAgIGZydVs1XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIlJldmlzaW9uICMgICAgICAgICAgICAgICA6ICVjJWNcbiIsCisJCQkJICAgIGZydVs2XSwgZnJ1WzddKTsKKworCQkJaWYgKGNvbmZpZy0+T0VNRnJ1Rm9ybWF0ID09IFZFTkRPUjRfRlJVX0ZPUk1BVCkgeworCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCQkgICAgIlNlcmlhbCAgICMgICAgICAgICAgICAgICA6ICIKKwkJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWNcbiIsCisJCQkJCSAgICBmcnVbOF0sIGZydVs5XSwgZnJ1WzEwXSwKKwkJCQkJICAgIGZydVsxMV0sIGZydVsxMl0sIGZydVsxM10sCisJCQkJCSAgICBmcnVbMTZdLCBmcnVbMTddLCBmcnVbMThdLAorCQkJCQkgICAgZnJ1WzE5XSwgZnJ1WzIwXSwgZnJ1WzIxXSk7CisJCQl9IGVsc2UgeworCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCQkgICAgIlNlcmlhbCAgICMgICAgICAgICAgICAgICA6ICIKKwkJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCQkgICAgZnJ1WzhdLCBmcnVbOV0sIGZydVsxMF0sCisJCQkJCSAgICBmcnVbMTFdLCBmcnVbMTJdLCBmcnVbMTNdLAorCQkJCQkgICAgZnJ1WzE0XSwgZnJ1WzE1XSwgZnJ1WzE2XSwKKwkJCQkJICAgIGZydVsxN10sIGZydVsxOF0sIGZydVsxOV0sCisJCQkJCSAgICBmcnVbMjBdLCBmcnVbMjFdKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICAiVmVuZG9yICAgICAgICAgICAgICAgICAgIDogQWxhY3JpdGVjaCwgSW5jLlxuIik7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICAiU2VyaWFsICAgIyAgICAgICAgICAgICAgIDogRW1wdHkgRlJVXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChjb25maWctPk9FTUZydUZvcm1hdCkgeworCWNhc2UgVkVORE9SMV9GUlVfRk9STUFUOgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOworCQkJc2VxX3ByaW50ZihzZXEsICIgICAgQ29tbW9kaXR5ICMgICAgICAgICAgOiAlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzBdKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIEFzc2VtYmx5ICMgICAgICAgICAgIDogJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxXSwgb2VtZnJ1WzJdLCBvZW1mcnVbM10sIG9lbWZydVs0XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBSZXZpc2lvbiAjICAgICAgICAgICA6ICVjJWNcbiIsCisJCQkJICAgIG9lbWZydVs1XSwgb2VtZnJ1WzZdKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIFN1cHBsaWVyICMgICAgICAgICAgIDogJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzddLCBvZW1mcnVbOF0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRGF0ZSAgICAgICAgICAgICAgICAgOiAlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOV0sIG9lbWZydVsxMF0pOworCQkJc2VxX3NwcmludGYoc2VxLAorCQkJCSAgICAiICAgIFNlcXVlbmNlICMgICAgICAgICAgIDogJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMTFdLCBvZW1mcnVbMTJdLCBvZW1mcnVbMTNdKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZFTkRPUjJfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsICJGUlUgSW5mb3JtYXRpb246XG4iKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIFBhcnQgICAgICMgICAgICAgICAgIDogIgorCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzBdLCBvZW1mcnVbMV0sIG9lbWZydVsyXSwKKwkJCQkgICAgb2VtZnJ1WzNdLCBvZW1mcnVbNF0sIG9lbWZydVs1XSwKKwkJCQkgICAgb2VtZnJ1WzZdLCBvZW1mcnVbN10pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgU3VwcGxpZXIgIyAgICAgICAgICAgOiAlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOF0sIG9lbWZydVs5XSwgb2VtZnJ1WzEwXSwKKwkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBEYXRlICAgICAgICAgICAgICAgICA6ICVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzEzXSwgb2VtZnJ1WzE0XSwgb2VtZnJ1WzE1XSk7CisJCQlzZXFfc3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgU2VxdWVuY2UgIyAgICAgICAgICAgOiAlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzE2XSwgb2VtZnJ1WzE3XSwgb2VtZnJ1WzE4XSwKKwkJCQkgICAgb2VtZnJ1WzE5XSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWRU5ET1IzX0ZSVV9GT1JNQVQ6CisJCXsKKwkJCXNlcV9wcmludGYoc2VxLCAiRlJVIEluZm9ybWF0aW9uOlxuIik7CisJCX0KKworCWNhc2UgVkVORE9SNF9GUlVfRk9STUFUOgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRlJVIE51bWJlciAgICAgICAgICAgOiAiCisJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMF0sIG9lbWZydVsxXSwgb2VtZnJ1WzJdLAorCQkJCSAgICBvZW1mcnVbM10sIG9lbWZydVs0XSwgb2VtZnJ1WzVdLAorCQkJCSAgICBvZW1mcnVbNl0sIG9lbWZydVs3XSk7CisJCQlzZXFfc3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgUGFydCBOdW1iZXIgICAgICAgICAgOiAiCisJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbOF0sIG9lbWZydVs5XSwgb2VtZnJ1WzEwXSwKKwkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSwgb2VtZnJ1WzEzXSwKKwkJCQkgICAgb2VtZnJ1WzE0XSwgb2VtZnJ1WzE1XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBFQyBMZXZlbCAgICAgICAgICAgICA6ICIKKwkJCQkgICAgIiVjJWMlYyVjJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxNl0sIG9lbWZydVsxN10sIG9lbWZydVsxOF0sCisJCQkJICAgIG9lbWZydVsxOV0sIG9lbWZydVsyMF0sIG9lbWZydVsyMV0sCisJCQkJICAgIG9lbWZydVsyMl0sIG9lbWZydVsyM10pOworCQkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19hZGFwdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CisKKwlpZiAoKGFkYXB0ZXItPm5ldGRldikgJiYgKGFkYXB0ZXItPm5ldGRldi0+bmFtZSkpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpbnRlcmZhY2UgICAgICAgICAgOiAlc1xuIiwKKwkJCSAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IHN0YXR1cyAgICAgICAgICAgICA6ICVzXG4iLAorCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IHBvcnQgICAgICAgICAgICAgICA6ICVkXG4iLAorCQlhZGFwdGVyLT5waHlzcG9ydCk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBzcGVlZCAgICAgICAgICAgICAgOiAlc1xuIiwKKwkJU0xJQ19TUEVFRChhZGFwdGVyLT5saW5rc3BlZWQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IGR1cGxleCAgICAgICAgICAgICA6ICVzXG4iLAorCQlTTElDX0RVUExFWChhZGFwdGVyLT5saW5rZHVwbGV4KSk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpcnEgICAgICAgICAgICAgICAgOiAweCVYXG4iLAorCQkodWludCkgYWRhcHRlci0+aXJxKTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IEludGVycnVwdCBBZ2cgRGVsYXk6ICVkIHVzZWNcbiIsCisJCWFkYXB0ZXItPmNhcmQtPmxvYWRsZXZlbF9jdXJyZW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IFJjdlEgbWF4IGVudHJpZXMgICA6ICU0LjRYXG4iLAorCQlTTElDX1JDVlFfRU5UUklFUyk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBSY3ZRIGN1cnJlbnQgICAgICAgOiAlNC40WFxuIiwKKwkJICAgIGFkYXB0ZXItPnJjdnF1ZXVlLmNvdW50KTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBwYWNrZXRzICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCSAgICBhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBieXRlcyAgICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCSAgICBhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogYnJvYWRjYXN0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogbXVsdGljYXN0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogdW5pY2FzdHMgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZfdW5pY2FzdHMpOworCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGVycm9ycyAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkgICAgKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBNaXNzZWQgZXJyb3JzICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJICAgICh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Rpc2NhcmRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBkcm9wcyAgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCSh1MzIpIGFkYXB0ZXItPnJjdl9kcm9wcyk7CisJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogcGFja2V0cyAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogYnl0ZXMgICAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkJYWRhcHRlci0+c3RhdHMudHhfYnl0ZXMpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGVycm9ycyAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bXRfZXJyb3JzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBtdWx0aWNhc3RzICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCisJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGNvbGxpc2lvbiBlcnJvcnMgICAgICAgICA6ICU4LjhYXG4iLAorCQkJKHUzMikgYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bWl0X2NvbGxpc2lvbnMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogTWF4IHJjdiBmcmFtZXMvaXNyICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+bWF4X2lzcl9yY3ZzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IFJjdiBpbnRlcnJ1cHQgeWllbGRzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRfeWllbGRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IE1heCB4bWl0IGNvbXBsZXRlL2lzciAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogZXJyb3IgaW50ZXJydXB0cyAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBlcnJvciBybWlzcyBpbnRlcnJ1cHRzICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5lcnJvcl9ybWlzc19pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IHJjdiBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IHhtaXQgaW50ZXJydXB0cyAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPnhtaXRfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBsaW5rIGV2ZW50IGludGVycnVwdHMgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBVUFIgaW50ZXJydXB0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBpbnRlcnJ1cHQgY291bnQgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5udW1faXNycyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBmYWxzZSBpbnRlcnJ1cHRzICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5mYWxzZV9pbnRlcnJ1cHRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IEFsbCByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IElDUiByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmljcl9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IElTUiByZWdpc3RlciB3cml0ZXMgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlzcl9yZWdfd3JpdGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBvdmVyZmxvdyA4MDIgZXJyb3JzICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMik7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogdHJhbnNwb3J0IG92ZXJmbG93IGVycm9yczogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBydG9mbG93KTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiB1bmRlcmZsb3cgZXJyb3JzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy51ZmxvdzgwMik7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogcmVjZWl2ZSBlYXJseSAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGJ1ZmZlciBvdmVyZmxvd3MgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92KTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBjYXJyaWVyIGVycm9ycyAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DYXJyZSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogTG9uZyAgICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuTG9uZ2UpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGludmFsaWQgcHJlYW1ibGVzICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkludnApOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IENSQyBlcnJvcnMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYyk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogZHJpYmJsZSBuaWJibGVzICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuRHJibCk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogQ29kZSB2aW9sYXRpb25zICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogVENQIGNoZWNrc3VtIGVycm9ycyAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBDc3VtKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBUQ1AgaGVhZGVyIHNob3J0IGVycm9ycyAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4pOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGNoZWNrc3VtIGVycm9ycyAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogSVAgZnJhbWUgaW5jb21wbGV0ZXMgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBMZW4pOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGhlYWRlcnMgc2hvcnRzICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbik7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19hZGFwdGVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNsaWNfZGVidWdfYWRhcHRlcl9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBzbGljX2RlYnVnX2NhcmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2xpY19kZWJ1Z19jYXJkX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbGljX2RlYnVnX2FkYXB0ZXJfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc2xpY19kZWJ1Z19hZGFwdGVyX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNsaWNfZGVidWdfY2FyZF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzbGljX2RlYnVnX2NhcmRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNoYXIgICAgbmFtZVs3XTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJaWYgKCFjYXJkLT5kZWJ1Z2ZzX2RpcikKKwkJcmV0dXJuOworCisJc3ByaW50ZihuYW1lLCAicG9ydCVkIiwgYWRhcHRlci0+cG9ydCk7CisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JUlVHTywKKwkJCQljYXJkLT5kZWJ1Z2ZzX2RpciwgYWRhcHRlciwKKwkJCQkmc2xpY19kZWJ1Z19hZGFwdGVyX2ZvcHMpOworCWlmICghZCB8fCBJU19FUlIoZCkpCisJCXByX2luZm8oUEZYICIlczogZGVidWdmcyBjcmVhdGUgZmFpbGVkXG4iLCBuYW1lKTsKKwllbHNlCisJCWFkYXB0ZXItPmRlYnVnZnNfZW50cnkgPSBkOworfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfZGVzdHJveShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZGVidWdmc19lbnRyeSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5KTsKKwkJYWRhcHRlci0+ZGVidWdmc19lbnRyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWNoYXIgICAgbmFtZVtJRk5BTVNJWl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJzbGljJWQiLCBjYXJkLT5jYXJkbnVtKTsKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHNsaWNfZGVidWdmcyk7CisJaWYgKCFkIHx8IElTX0VSUihkKSkKKwkJcHJfaW5mbyhQRlggIiVzOiBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkXG4iLAorCQkJCW5hbWUpOworCWVsc2UgeworCQljYXJkLT5kZWJ1Z2ZzX2RpciA9IGQ7CisJCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjYXJkaW5mbyIsIFNfSVJVR08sCisJCQkJc2xpY19kZWJ1Z2ZzLCBjYXJkLAorCQkJCSZzbGljX2RlYnVnX2NhcmRfZm9wcyk7CisJCWlmICghZCB8fCBJU19FUlIoZCkpCisJCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGZhaWxlZFxuIiwKKwkJCQkJbmFtZSk7CisJCWVsc2UKKwkJCWNhcmQtPmRlYnVnZnNfY2FyZGluZm8gPSBkOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCisJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQlpZiAoYWRhcHRlcikKKwkJCXNsaWNfZGVidWdfYWRhcHRlcl9kZXN0cm95KGFkYXB0ZXIpOworCX0KKwlpZiAoY2FyZC0+ZGVidWdmc19jYXJkaW5mbykgeworCQlkZWJ1Z2ZzX3JlbW92ZShjYXJkLT5kZWJ1Z2ZzX2NhcmRpbmZvKTsKKwkJY2FyZC0+ZGVidWdmc19jYXJkaW5mbyA9IE5VTEw7CisJfQorCWlmIChjYXJkLT5kZWJ1Z2ZzX2RpcikgeworCQlkZWJ1Z2ZzX3JlbW92ZShjYXJkLT5kZWJ1Z2ZzX2Rpcik7CisJCWNhcmQtPmRlYnVnZnNfZGlyID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmVudDsKKworCWVudCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2xpYyIsIE5VTEwpOworCWlmICghZW50IHx8IElTX0VSUihlbnQpKSB7CisJCXByX2luZm8oUEZYICJkZWJ1Z2ZzIGNyZWF0ZSBkaXJlY3RvcnkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNsaWNfZGVidWdmcyA9IGVudDsKK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jbGVhbnVwKHZvaWQpCit7CisJaWYgKHNsaWNfZGVidWdmcykgeworCQlkZWJ1Z2ZzX3JlbW92ZShzbGljX2RlYnVnZnMpOworCQlzbGljX2RlYnVnZnMgPSBOVUxMOworCX0KK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gRHVtcCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKwordm9pZCAqc2xpY19kdW1wX2hhbmRsZTsJCS8qIHRocmVhZCBoYW5kbGUgKi8KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKKyAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KKyAqLworc3RhdGljIGludCBzbGljX2R1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSwgdTMyIGZpbGVfb2Zmc2V0KQoreworCWlmIChTTElDaGFuZGxlLT5mX3BvcyAhPSBmaWxlX29mZnNldCkgeworCQkvKkRCR19NU0coInNsaWNfZHVtcF9zZWVrICBub3cgbmVlZGVkIFsleCA6ICV4XVxuIiwKKwkJCSh1MzIpU0xJQ2hhbmRsZS0+Zl9wb3MsICh1MzIpZmlsZV9vZmZzZXQpOyAqLworCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+bGxzZWVrKSB7CisJCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+CisJCQkgICAgbGxzZWVrKFNMSUNoYW5kbGUsIGZpbGVfb2Zmc2V0LCAwKSAhPSBmaWxlX29mZnNldCkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCVNMSUNoYW5kbGUtPmZfcG9zID0gZmlsZV9vZmZzZXQ7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kdW1wX3dyaXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJCSAgIGNvbnN0IHZvaWQgKmFkZHIsIGludCBzaXplLCB1MzIgZmlsZV9vZmZzZXQpCit7CisJaW50IHIgPSAxOworCXUzMiByZXN1bHQgPSAwOworCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gY2FyZC0+ZHVtcGhhbmRsZTsKKworI2lmZGVmIEhJU1RPUklDQUwJCS8qIGxlZ2FjeSAqLworCWRvd24oJlNMSUNoYW5kbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisjZW5kaWYKKwlpZiAoc2l6ZSkgeworCQlzbGljX2R1bXBfc2VlayhTTElDaGFuZGxlLCBmaWxlX29mZnNldCk7CisKKwkJcmVzdWx0ID0KKwkJICAgIFNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKFNMSUNoYW5kbGUsIGFkZHIsIHNpemUsCisJCQkJCSAgICAmU0xJQ2hhbmRsZS0+Zl9wb3MpOworCisJCXIgPSByZXN1bHQgPT0gc2l6ZTsKKwl9CisKKwljYXJkLT5kdW1wdGltZV9jb21wbGV0ZSA9IGppZmZpZXM7CisJY2FyZC0+ZHVtcHRpbWVfZGVsdGEgPSBjYXJkLT5kdW1wdGltZV9jb21wbGV0ZSAtIGNhcmQtPmR1bXB0aW1lX3N0YXJ0OworCWNhcmQtPmR1bXB0aW1lX3N0YXJ0ID0gamlmZmllczsKKworI2lmZGVmIEhJU1RPUklDQUwKKwl1cCgmU0xJQ2hhbmRsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKKyNlbmRpZgorCWlmICghcikgeworCQlEQkdfRVJST1IoIiVzOiBhZGRyWyVwXSBzaXplWyV4XSByZXN1bHRbJXhdIGZpbGVfb2Zmc2V0WyV4XVxuIiwKKwkJCSAgX19mdW5jX18sIGFkZHIsIHNpemUsIHJlc3VsdCwgZmlsZV9vZmZzZXQpOworCX0KKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHVpbnQgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwljYXJkLT5kdW1wX3Rhc2tfaWQgPSBrdGhyZWFkX3J1bihzbGljX2R1bXBfdGhyZWFkLCAodm9pZCAqKWNhcmQsIDApOworCisvKiAgREJHX01TRygiY3JlYXRlIHNsaWNfZHVtcF90aHJlYWQgZHVtcF9waWRbJXhdXG4iLCBjYXJkLT5kdW1wX3BpZCk7ICovCisJaWYgKElTX0VSUihjYXJkLT5kdW1wX3Rhc2tfaWQpKSB7CisJCURCR19NU0coImNyZWF0ZSBzbGljX2R1bXBfdGhyZWFkIEZBSUxFRCBcbiIpOworCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY29udGV4dDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgYWRhcHRlciAqZHVtcF9hZGFwdGVyID0gTlVMTDsKKwl1MzIgZHVtcF9jb21wbGV0ZSA9IDA7CisJdTMyIGRlbGF5ID0gU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCXN0cnVjdCBzbGljX3JlZ3MgKnByZWdzOworCXUzMiBpOworCXN0cnVjdCBzbGljX3VwciAqdXByLCAqdXBybmV4dDsKKwl1MzIgZHVtcF9jYXJkOworCisJQVNTRVJUKGNhcmQpOworCisJY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMTsKKworI2lmZGVmIEhJU1RPUklDQUwKKwlsb2NrX2tlcm5lbCgpOworCS8qCisJICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKKwkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCisJICovCisJZXhpdF9maWxlcyhjdXJyZW50KTsJLyogZGFlbW9uaXplIGRvZXNuJ3QgZG8gZXhpdF9maWxlcyAqLworCWN1cnJlbnQtPmZpbGVzID0gaW5pdF90YXNrLmZpbGVzOworCWF0b21pY19pbmMoJmN1cnJlbnQtPmZpbGVzLT5jb3VudCk7CisjZW5kaWYKKworCWRhZW1vbml6ZSgiJXMiLCAic2xpY21vbiIpOworCisJLyogU2V0dXAgYSBuaWNlIG5hbWUgKi8KKwlzdHJjcHkoY3VycmVudC0+Y29tbSwgInNsaWNtb24iKTsKKwlEQkdfRVJST1IKKwkgICAgKCJzbGljX2R1bXBfdGhyZWFkW3NsaWNtb25dIGRhZW1vbiBpcyBhbGl2ZSBjYXJkWyVwXSBwaWRbJXhdXG4iLAorCSAgICAgY2FyZCwgY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQpOworCisJLyoKKwkgKiAgICBTZW5kIG1lIGEgc2lnbmFsIHRvIGdldCBtZSB0byBkaWUgKGZvciBkZWJ1Z2dpbmcpCisJICovCisJZG8geworCQkvKgorCQkgKiBJZiBjYXJkIHN0YXRlIGlzIG5vdCBzZXQgdG8gdXAsIHNraXAKKwkJICovCisJCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSB7CisJCQlpZiAoY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQorCQkJCWdvdG8gd2FpdDsKKwkJCWVsc2UKKwkJCQlnb3RvIGVuZF90aHJlYWQ7CisJCX0KKwkJLyoKKwkJICogICAgQ2hlY2sgdGhlIHJlc3VsdHMgb2Ygb3VyIGxhc3QgcGluZy4KKwkJICovCisJCWR1bXBfY2FyZCA9IDA7CisjaWZkZWYgU0xJQ19GQUlMVVJFX0RVTVAKKwkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gc3RhdHVzICIKKwkJCSAgICAgIiV4OiBEVU1QIFRIRSBDQVJEIVxuIiwKKwkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY2FyZC0+cGluZ3N0YXR1cyk7CisJCQlkdW1wX2NhcmQgPSAxOworCQl9CisjZWxzZQorCQkvKgorCQkgKiAgQ2F1c2UgYSBjYXJkIFJFU0VUIGluc3RlYWQ/CisJCSAqLworCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKKwkJCS8qIHRvZG8uIGRvIHdlIHdhbnQgdG8gcmVzZXQgdGhlIGNhcmQgaW4gcHJvZHVjdGlvbiAqLworCQkJLyogREJHX01TRygiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtICIKKwkJCSAgIHN0YXR1cyAleDogUkVTRVQgVEhFIENBUkQhXG4iLCBjYXJkLT5jYXJkbnVtLAorCQkJICAgY2FyZC0+cGluZ3N0YXR1cyk7ICovCisJCQlEQkdfRVJST1IKKwkJCSAgICAoIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSBzdGF0dXMgJXg6ICIKKwkJCSAgICAgIkRVTVAgVEhFIENBUkQhXG4iLAorCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjYXJkLT5waW5nc3RhdHVzKTsKKwkJCWR1bXBfY2FyZCA9IDE7CisJCX0KKyNlbmRpZgorCQlpZiAoKGR1bXBfY2FyZCkKKwkJICAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSkgeworCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHsKKwkJCQlEQkdfRVJST1IKKwkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkIFJlcXVlc3RlZDogQ2FyZCAleFxuIiwKKwkJCQkgICAgIGNhcmQtPmNhcmRudW0pOworCQkJfQorCQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQkJdXNob3J0IGNwdWlkID0gMDsKKwkJCQl1c2hvcnQgY3Jhc2hwYyA9IDA7CisKKwkJCQlpZiAoY2FyZC0+YWRhcHRlclswXSkgeworCQkJCQlpZiAoKGNhcmQtPmFkYXB0ZXJbMF0pLT5tZW1vcnlsZW5ndGggPj0KKwkJCQkJICAgIENSQVNIX0lORk9fT0ZGU0VUICsKKwkJCQkJICAgIHNpemVvZihzbGljX2NyYXNoX2luZm8pKSB7CisJCQkJCQljaGFyICpjcmFzaHB0cjsKKwkJCQkJCXBfc2xpY19jcmFzaF9pbmZvIGNyYXNoaW5mbzsKKworCQkJCQkJY3Jhc2hwdHIgPQorCQkJCQkJICAgICgoY2hhciAqKWNhcmQtPmFkYXB0ZXJbMF0tPgorCQkJCQkJICAgICBzbGljX3JlZ3MpICsKKwkJCQkJCSAgICBDUkFTSF9JTkZPX09GRlNFVDsKKwkJCQkJCWNyYXNoaW5mbyA9CisJCQkJCQkgICAgKHBfc2xpY19jcmFzaF9pbmZvKQorCQkJCQkJICAgIGNyYXNocHRyOworCQkJCQkJY3B1aWQgPSBjcmFzaGluZm8tPmNwdV9pZDsKKwkJCQkJCWNyYXNocGMgPSBjcmFzaGluZm8tPmNyYXNoX3BjOworCQkJCQl9CisJCQkJfQorCQkJCURCR19FUlJPUgorCQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkOiBDYXJkICV4IGNyYXNoZWQgIgorCQkJCSAgICAgImFuZCBmYWlsZWQgdG8gYW5zd2VyIFBJTkcuICIKKwkJCQkgICAgICJDUFVJRFsleF0gUENbJXhdXG4gIiwKKwkJCQkgICAgIGNhcmQtPmNhcmRudW0sIGNwdWlkLCBjcmFzaHBjKTsKKwkJCX0KKworCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfSU5fUFJPR1JFU1M7CisKKwkJCS8qCisJCQkgKiBTZXQgdGhlIGNhcmQgc3RhdGUgdG8gRE9XTiBhbmQgdGhlIGFkYXB0ZXIgc3RhdGVzCisJCQkgKiB0byBSRVNFVC5UaGV5IHdpbGwgY2hlY2sgdGhpcyBpbiBTaW1iYUNoZWNrRm9ySGFuZworCQkJICogYW5kIGluaXRpYXRlIGludGVyZmFjZSByZXNldCAod2hpY2ggaW4gdHVybiB3aWxsCisJCQkgKiByZWluaXRpYWxpemUgdGhlIGNhcmQpLgorCQkJICovCisJCQljYXJkLT5zdGF0ZSA9IENBUkRfRE9XTjsKKworCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCQkJaWYgKGFkYXB0ZXIpIHsKKwkJCQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCisJCQkJCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgeworCQkJCQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9SRVNFVDsKKwkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJCQkJCURCR19FUlJPUgorCQkJCQkJICAgICgiW3NsaWNtb25dOiBTTElDIENhcmRbJWRdICIKKwkJCQkJCSAgICAgIlBvcnRbJWRdIGFkYXB0ZXJbJXBdICIKKwkJCQkJCSAgICAgImRvd25cbiIsCisJCQkJCQkgICAgICh1aW50KSBjYXJkLT5jYXJkbnVtLAorCQkJCQkJICAgICAodWludCkgaSwgYWRhcHRlcik7CisJCQkJCX0KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECisJCQkJCS8qIGZyZWUgc3RhdHMgdGltZXIgKi8KKwkJCQkJaWYgKGFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKKwkJCQkJCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAwOworCQkJCQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKKwkJCQkJfQorI2VuZGlmCisJCQkJfQorCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKKwkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKKwkJCQlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5hY3RpdmF0ZWQpKSB7CisJCQkJCXByZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCQkJCQlkdW1wX2FkYXB0ZXIgPSBhZGFwdGVyOworCisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSBkdW1wIHN0YXR1cyBpcyB6ZXJvLCB0aGVuCisJCQkJCSAqIHRoZSB1dGlsaXR5IHByb2Nlc3NvciBoYXMgY3Jhc2hlZC4KKwkJCQkJICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYW55IHBlbmRpbmcKKwkJCQkJICogdXRpbGl0eXByb2Nlc3NvciByZXF1ZXN0cyB3aWxsIG5vdAorCQkJCQkgKiBjb21wbGV0ZSBhbmQgb3VyIGR1bXAgY29tbWFuZHMgd2lsbAorCQkJCQkgKiBub3QgYmUgaXNzdWVkLgorCQkJCQkgKgorCQkJCQkgKiBUbyBhdm9pZCB0aGlzIHdlIHdpbGwgY2xlYXIgYW55CisJCQkJCSAqIHBlbmRpbmcgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdHMKKwkJCQkJICogbm93LgorCQkJCQkgKi8KKwkJCQkJaWYgKCFjYXJkLT5waW5nc3RhdHVzKSB7CisJCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgKKwkJCQkJCSAgICAmYWRhcHRlci0+dXByX2xvY2subG9jaywKKwkJCQkJCSAgICBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJCQkJCQl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKKwkJCQkJCXdoaWxlICh1cHIpIHsKKwkJCQkJCQl1cHJuZXh0ID0gdXByLT5uZXh0OworCQkJCQkJCWtmcmVlKHVwcik7CisJCQkJCQkJdXByID0gdXBybmV4dDsKKwkJCQkJCX0KKwkJCQkJCWFkYXB0ZXItPnVwcl9saXN0ID0gMDsKKwkJCQkJCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKKwkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQkgICAgJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJCQkgICAgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCQkJCQl9CisKKwkJCQkJc2xpY19kdW1wX2NhcmQoY2FyZCwgRkFMU0UpOworCQkJCQlkdW1wX2NvbXBsZXRlID0gMTsKKwkJCQl9CisKKwkJCQlpZiAoZHVtcF9jb21wbGV0ZSkgeworCQkJCQlEQkdfRVJST1IoIlNMSUMgRHVtcCBDb21wbGV0ZVxuIik7CisJCQkJCS8qICBPbmx5IGR1bXAgdGhlIGNhcmQgb25lIHRpbWUgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZHVtcF9hZGFwdGVyKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgic2xpYyBkdW1wIGNvbXBsZXRlZC4gIgorCQkJCSAgICAgIlJlZW5hYmxlIGludGVyZmFjZXNcbiIpOworCQkJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGR1bXBfYWRhcHRlcik7CisKKwkJCQkvKgorCQkJCSAqICBSZWVuYWJsZSB0aGUgYWRhcHRlcnMgdGhhdCB3ZXJlIHJlc2V0CisJCQkJICovCisJCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQkJCQlpZiAoYWRhcHRlcikgeworCQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRlID09CisJCQkJCQkgICAgQURBUFRfUkVTRVQpIHsKKwkJCQkJCQlEQkdfRVJST1IKKwkJCQkJCQkgICAgKCJzbGljZHVtcDogU0xJQyAiCisJCQkJCSAgICJDYXJkWyVkXSBQb3J0WyVkXSBhZGFwdGVyWyVwXSAiCisJCQkJCSAgICJicmluZyBVUFxuIiwKKwkJCQkJCQkgICAgICh1aW50KSBjYXJkLT4KKwkJCQkJCQkgICAgIGNhcmRudW0sICh1aW50KSBpLAorCQkJCQkJCSAgICAgYWRhcHRlcik7CisJCQkJCQkJYWRhcHRlci0+c3RhdGUgPQorCQkJCQkJCSAgICBBREFQVF9ET1dOOworCQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9CisJCQkJCQkJICAgIExJTktfRE9XTjsKKwkJCQkJCQlzbGljX2VudHJ5X29wZW4KKwkJCQkJCQkgICAgKGFkYXB0ZXItPm5ldGRldik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9ET05FOworCQkJfQorCQl9IGVsc2UgeworCQkvKiBpZiBwaW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgfHwgZHVtcF9yZXF1ZXN0ZWQuLi5FTFNFCisJCSAqICAgIFdlIHJlY2VpdmVkIGEgdmFsaWQgcGluZyByZXNwb25zZS4KKwkJICogICAgQ2xlYXIgdGhlIFBpbmdzdGF0dXMgZmllbGQsIGZpbmQgYSB2YWxpZCBhZGFwdGVyCisJCSAqICAgIHN0cnVjdHVyZSBhbmQgc2VuZCBhbm90aGVyIHBpbmcuCisJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCQkJaWYgKGFkYXB0ZXIgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSkgeworCQkJCQljYXJkLT5waW5nc3RhdHVzID0gMDsKKwkJCQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLAorCQkJCQkJCSAwLCAwLCAwLCAwKTsKKwkJCQkJYnJlYWs7CS8qIE9ubHkgaXNzdWUgb25lIHBlciBjYXJkICovCisJCQkJfQorCQkJfQorCQl9Cit3YWl0OgorCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLCBkZWxheSk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworZW5kX3RocmVhZDoKKy8qICBEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX3RocmVhZCBjYXJkWyVwXSBwaWRbJXhdIEVORElOR1xuIiwKKyAgICBjYXJkLCBjYXJkLT5kdW1wX3BpZCk7ICovCisJY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gb3VyIGR1bXAgaW5kZXggZmlsZS4gIFRoaXMKKyAqIHZhbHVlIGlzIHVzZWQgYXMgb3VyIHN1ZmZpeCBmb3Igb3VyIGR1bXAgcGF0aC4gIFRoZQorICogdmFsdWUgaXMgaW5jcmVtZW50ZWQgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgZmlsZQorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgY2hhciBpbmRleCA9IDA7CisjaWZkZWYgU0xJQ19EVU1QX0lOREVYX1NVUFBPUlQKKwl1MzIgc3RhdHVzOworCXZvaWQgKkZpbGVIYW5kbGU7CisJdTMyIG9mZnNldDsKKworCW9mZnNldCA9IDA7CisKKwkvKgorCSAqIE9wZW4gdGhlIGluZGV4IGZpbGUuICBJZiBvbmUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0CisJICovCisJc3RhdHVzID0gY3JlYXRlX2ZpbGUoJkZpbGVIYW5kbGUpOworCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAwOworCisJc3RhdHVzID0gcmVhZF9maWxlKEZpbGVIYW5kbGUsICZpbmRleCwgMSwgJm9mZnNldCk7CisKKwlpbmRleCsrOworCisJc3RhdHVzID0gd3JpdGVfZmlsZShGaWxlSGFuZGxlLCAmaW5kZXgsIDEsICZvZmZzZXQpOworCisJY2xvc2VfZmlsZShGaWxlSGFuZGxlKTsKKyNlbHNlCisJaW5kZXggPSAwOworI2VuZGlmCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgc3RydWN0IGZpbGUgKnNsaWNfZHVtcF9vcGVuX2ZpbGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCWNoYXIgU0xJQ2ZpbGVbNTBdOworCisJY2FyZC0+ZHVtcGZpbGVfZnMgPSBnZXRfZnMoKTsKKworCXNldF9mcyhLRVJORUxfRFMpOworCisJbWVtc2V0KFNMSUNmaWxlLCAwLCBzaXplb2YoU0xJQ2ZpbGUpKTsKKwlzcHJpbnRmKFNMSUNmaWxlLCAiL3Zhci90bXAvc2xpYyVkLWR1bXAtJWQiLCBjYXJkLT5jYXJkbnVtLAorCQkodWludCkgY2FyZC0+ZHVtcF9jb3VudCk7CisJY2FyZC0+ZHVtcF9jb3VudCsrOworCisJU0xJQ2hhbmRsZSA9CisJICAgIGZpbHBfb3BlbihTTElDZmlsZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fU1lOQyB8IE9fTEFSR0VGSUxFLCAwNjY2KTsKKworCURCR19NU0coIltzbGljbW9uXTogRHVtcCBDYXJkICMlZCB0byBmaWxlOiAlcyBcbiIsIGNhcmQtPmNhcmRudW0sCisJCVNMSUNmaWxlKTsKKworLyogIERCR19NU0coIltzbGljbW9uXSBmaWxwX29wZW4gJXMgU0xJQ2hhbmRsZVslcF1cbiIsIFNMSUNmaWxlLCBTTElDaGFuZGxlKTsqLworCisJaWYgKElTX0VSUihTTElDaGFuZGxlKSkKKwkJZ290byBlbmRfc2xpY2R1bXA7CisKKwlkZW50cnkgPSBTTElDaGFuZGxlLT5mX2RlbnRyeTsKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworLyogIERCR19NU0coIltzbGljbW9uXSBpbm9kZVslcF0gaV9ubGlua1sleF0gaV9tb2RlWyV4XSBpX29wWyVwXSBpX2ZvcFslcF1cbiIKKwkJImZfb3AtPndyaXRlWyVwXVxuIiwKKwkJaW5vZGUsIGlub2RlLT5pX25saW5rLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9vcCwKKwkJaW5vZGUtPmlfZm9wLCBTTElDaGFuZGxlLT5mX29wLT53cml0ZSk7ICovCisJaWYgKGlub2RlLT5pX25saW5rID4gMSkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsJLyogbXVsdGlwbGUgbGlua3MgLSBkb24ndCBkdW1wICovCisjaWZkZWYgSElTVE9SSUNBTAorCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsKKyNlbmRpZgorCWlmICghaW5vZGUtPmlfb3AgfHwgIWlub2RlLT5pX2ZvcCkKKwkJZ290byBjbG9zZV9zbGljZHVtcDsKKworCWlmICghU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUpCisJCWdvdG8gY2xvc2Vfc2xpY2R1bXA7CisKKwkvKgorCSAqICBJZiB3ZSBnb3QgaGVyZSB3ZSBoYXZlIFNVQ0NFU1NGVUxMWSBPUEVORUQgdGhlIGR1bXAgZmlsZQorCSAqLworLyogIERCR19NU0coIm9wZW5lZCAlcyBTTElDaGFuZGxlWyVwXVxuIiwgU0xJQ2ZpbGUsIFNMSUNoYW5kbGUpOyAqLworCXJldHVybiBTTElDaGFuZGxlOworCitjbG9zZV9zbGljZHVtcDoKKwlEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX29wZW5fZmlsZSBmYWlsZWQgY2xvc2UgU0xJQ2hhbmRsZVslcF1cbiIsCisJCVNMSUNoYW5kbGUpOworCWZpbHBfY2xvc2UoU0xJQ2hhbmRsZSwgTlVMTCk7CisKK2VuZF9zbGljZHVtcDoKKwlzZXRfZnMoY2FyZC0+ZHVtcGZpbGVfZnMpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZHVtcF9jbG9zZV9maWxlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKworLyogIERCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfQ0xPU0VfZmlsZSBjbG9zZSBTTElDaGFuZGxlWyVwXVxuIiwKKyAgIGNhcmQtPmR1bXBoYW5kbGUpOyAqLworCisJZmlscF9jbG9zZShjYXJkLT5kdW1waGFuZGxlLCBOVUxMKTsKKworCXNldF9mcyhjYXJkLT5kdW1wZmlsZV9mcyk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSkKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKKwl1MzIgc3RhdHVzOworCXUzMiBxdWV1ZTsKKwl1MzIgbGVuLCBvZmZzZXQ7CisJdTMyIHNyYW1fc2l6ZSwgZHJhbV9zaXplLCByZWdzOworCXN0cnVjdCBzbGljY29yZV9oZHIgY29yZWhkcjsKKwl1MzIgZmlsZV9vZmZzZXQ7CisJY2hhciAqbmFtZXN0cjsKKwl1MzIgaTsKKwl1MzIgbWF4X3F1ZXVlcyA9IDA7CisJdTMyIHJlc3VsdDsKKworCWNhcmQtPmR1bXBoYW5kbGUgPSBzbGljX2R1bXBfb3Blbl9maWxlKGNhcmQpOworCisJaWYgKGNhcmQtPmR1bXBoYW5kbGUgPT0gTlVMTCkgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gQ2FudCBjcmVhdGUgRHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7CisJCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBkdW1wXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7CisJCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgY21kIG1lbW9yeSBmb3IgZHVtcFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogV3JpdGUgdGhlIGZpbGUgdmVyc2lvbiB0byB0aGUgY29yZSBoZWFkZXIuCisJICovCisJbmFtZXN0ciA9IHNsaWNfcHJvY192ZXJzaW9uOworCWZvciAoaSA9IDA7IGkgPCAoRFJJVkVSX05BTUVfU0laRSAtIDEpOyBpKyssIG5hbWVzdHIrKykgeworCQlpZiAoIW5hbWVzdHIpCisJCQlicmVhazsKKwkJY29yZWhkci5kcml2ZXJfdmVyc2lvbltpXSA9ICpuYW1lc3RyOworCX0KKwljb3JlaGRyLmRyaXZlcl92ZXJzaW9uW2ldID0gMDsKKworCWZpbGVfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgZm9sbG93aW5nIGRlYnVnIGNvbW1hbmRzIHRvIHRoZSBTTElDOgorCSAqICAgICAgICAtIEhhbHQgYm90aCByZWNlaXZlIGFuZCB0cmFuc21pdAorCSAqICAgICAgICAtIER1bXAgcmVjZWl2ZSByZWdpc3RlcnMKKwkgKiAgICAgICAgLSBEdW1wIHRyYW5zbWl0IHJlZ2lzdGVycworCSAqICAgICAgICAtIER1bXAgc3JhbQorCSAqICAgICAgICAtIER1bXAgZHJhbQorCSAqICAgICAgICAtIER1bXAgcXVldWVzCisJICovCisJREJHX01TRygic2xpY0R1bXAgSEFMVCBSZWNlaXZlIFByb2Nlc3NvclxuIik7CisJY2FyZC0+ZHVtcHRpbWVfc3RhcnQgPSBqaWZmaWVzOworCisJc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19SRUNFSVZFKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUgorCQkgICAgKCJDYW50IGhhbHQgcmVjZWl2ZSBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZCBzdGF0dXNbJXhdXG4iLAorCQkgICAgIHN0YXR1cyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlEQkdfTVNHKCJzbGljRHVtcCBIQUxUIFRyYW5zbWl0IFByb2Nlc3NvclxuIik7CisJc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IoIkNhbnQgaGFsdCB0cmFuc21pdCBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEdW1wIHJlY2VpdmUgcmVncyAqLworCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19SRUNFSVZFKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigiQ2FudCBkdW1wIHJlY2VpdmUgcmVnaXN0ZXJzIC0gZHVtcCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJREJHX01TRygic2xpY0R1bXAgV3JpdGUgUmVjZWl2ZSBSRUdTIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKKwkJKFNMSUNfTlVNX1JFRyAqIDQpLCBmaWxlX29mZnNldCk7CisKKwlyZXN1bHQgPQorCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgU0xJQ19OVU1fUkVHICogNCwKKwkJCSAgICBmaWxlX29mZnNldCk7CisJaWYgKCFyZXN1bHQpIHsKKwkJREJHX0VSUk9SCisJCSAgICAoIkNhbnQgd3JpdGUgcmN2IHJlZ2lzdGVycyB0byBkdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb3JlaGRyLlJjdlJlZ09mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuUmN2UmVnc2l6ZSA9IFNMSUNfTlVNX1JFRyAqIDQ7CisJZmlsZV9vZmZzZXQgKz0gU0xJQ19OVU1fUkVHICogNDsKKworCS8qIER1bXAgdHJhbnNtaXQgcmVncyAqLworCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IoIkNhbnQgZHVtcCB0cmFuc21pdCByZWdpc3RlcnMgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBYTUlUIFJFR1MgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAorCQkoU0xJQ19OVU1fUkVHICogNCksIGZpbGVfb2Zmc2V0KTsKKworCXJlc3VsdCA9CisJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBTTElDX05VTV9SRUcgKiA0LAorCQkJICAgIGZpbGVfb2Zmc2V0KTsKKwlpZiAoIXJlc3VsdCkgeworCQlEQkdfRVJST1IKKwkJICAgICgiQ2FudCB3cml0ZSB4bXQgcmVnaXN0ZXJzIHRvIGR1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCWNvcmVoZHIuWG10UmVnT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5YbXRSZWdzaXplID0gU0xJQ19OVU1fUkVHICogNDsKKwlmaWxlX29mZnNldCArPSBTTElDX05VTV9SRUcgKiA0OworCisJcmVncyA9IFNMSUNfR0JNQVhfUkVHOworCisJY29yZWhkci5GaWxlUmVnT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5GaWxlUmVnc2l6ZSA9IHJlZ3MgKiA0OworCisJZm9yIChvZmZzZXQgPSAwOyByZWdzOykgeworCQlsZW4gPSBNSU4ocmVncywgMTYpOwkvKiBDYW4gb25seSB4ZnIgMTYgcmVncyBhdCBhIHRpbWUgKi8KKworCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19SRklMRSk7CisKKwkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJREJHX0VSUk9SKCJDYW50IGR1bXAgcmVnaXN0ZXIgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFJlZ2lzdGVyRmlsZSBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCQkobGVuICogNCksIGZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiAqIDQsCisJCQkJICAgIGZpbGVfb2Zmc2V0KTsKKwkJaWYgKCFyZXN1bHQpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiQ2FudCB3cml0ZSByZWdpc3RlciBmaWxlIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbiAqIDQ7CisJCW9mZnNldCArPSBsZW47CisJCXJlZ3MgLT0gbGVuOworCX0KKworCWRyYW1fc2l6ZSA9IGNhcmQtPmNvbmZpZy5EcmFtU2l6ZSAqIDB4MTAwMDA7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCXNyYW1fc2l6ZSA9IFNMSUNfU1JBTV9TSVpFMkdCOworCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJc3JhbV9zaXplID0gU0xJQ19TUkFNX1NJWkUxR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNyYW1fc2l6ZSA9IDA7CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJfQorCisJY29yZWhkci5TcmFtT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5TcmFtc2l6ZSA9IHNyYW1fc2l6ZTsKKworCWZvciAob2Zmc2V0ID0gMDsgc3JhbV9zaXplOykgeworCQlsZW4gPSBNSU4oc3JhbV9zaXplLCBEVU1QX0JVRl9TSVpFKTsKKwkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfU1JBTSk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiW3NsaWNtb25dIENhbnQgZHVtcCBTUkFNIGF0IG9mZnNldCAleCAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iLCAodWludCkgb2Zmc2V0KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCURCR19NU0coIltzbGljbW9uXSBzbGljRHVtcCBXcml0ZSBTUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCQlsZW4sIGZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBTUkFNIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbjsKKwkJb2Zmc2V0ICs9IGxlbjsKKwkJc3JhbV9zaXplIC09IGxlbjsKKwl9CisKKwljb3JlaGRyLkRyYW1PZmYgPSBmaWxlX29mZnNldDsKKwljb3JlaGRyLkRyYW1zaXplID0gZHJhbV9zaXplOworCisJZm9yIChvZmZzZXQgPSAwOyBkcmFtX3NpemU7KSB7CisJCWxlbiA9IE1JTihkcmFtX3NpemUsIERVTVBfQlVGX1NJWkUpOworCisJCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX0RSQU0pOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIltzbGljbW9uXSBDYW50IGR1bXAgZHJhbSBhdCBvZmZzZXQgJXggLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIiwgKHVpbnQpIG9mZnNldCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBEUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsIGxlbiwKKwkJCWZpbGVfb2Zmc2V0KTsKKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBEUkFNIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbGVfb2Zmc2V0ICs9IGxlbjsKKwkJb2Zmc2V0ICs9IGxlbjsKKwkJZHJhbV9zaXplIC09IGxlbjsKKwl9CisKKwltYXhfcXVldWVzID0gU0xJQ19NQVhfUVVFVUU7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBtYXhfcXVldWVzOyBxdWV1ZSsrKSB7CisJCXUzMiAqcWFycmF5ID0gKHUzMiAqKSBjYXJkLT5kdW1wYnVmZmVyOworCQl1MzIgcWFycmF5X3BoeXNsID0gY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbDsKKwkJdTMyIHFhcnJheV9waHlzaCA9IGNhcmQtPmR1bXBidWZmZXJfcGh5c2g7CisJCXUzMiBxc3RhcnQ7CisJCXUzMiBxZGVsdGE7CisJCXUzMiBxdG90YWwgPSAwOworCisJCURCR19NU0coIltzbGljbW9uXSBTdGFydCBEdW1wIG9mIFFVRVVFICMweCV4XG4iLCAodWludCkgcXVldWUpOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKERVTVBfQlVGX1NJWkUgPj4gMik7IG9mZnNldCsrKSB7CisJCQlxc3RhcnQgPSBqaWZmaWVzOworCQkJcWRlbHRhID0gMDsKKworCQkJc3RhdHVzID0gc2xpY19kdW1wX3F1ZXVlKGNhcmQsCisJCQkJCQkgcWFycmF5X3BoeXNsLAorCQkJCQkJIHFhcnJheV9waHlzaCwgcXVldWUpOworCQkJcWFycmF5X3BoeXNsICs9IDQ7CisKKwkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7CisJCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKKwkJCQlxdG90YWwgKz0gcWRlbHRhOworCQkJfQorCQl9CisKKwkJaWYgKG9mZnNldCkKKwkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKKwkJZWxzZQorCQkJcWRlbHRhID0gMDsKKworLyogICAgICAgIERCR19NU0coIiAgIHNsaWNEdW1wIFdyaXRlIFFVRVVFICMweCV4IGxlblsleF0gb2Zmc2V0WyV4XSAiCisJCSJhdmdqaWZmc1sleF1cbiIsIHF1ZXVlLCAob2Zmc2V0KjQpLCBmaWxlX29mZnNldCwgcWRlbHRhKTsgKi8KKworCQlyZXN1bHQgPQorCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIG9mZnNldCAqIDQsCisJCQkJICAgIGZpbGVfb2Zmc2V0KTsKKworCQlpZiAoIXJlc3VsdCkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBRVUVVRVMgdG8gZHVtcCBmaWxlIC0gIgorCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29yZWhkci5xdWV1ZXNbcXVldWVdLnF1ZXVlT2ZmID0gZmlsZV9vZmZzZXQ7CisJCWNvcmVoZHIucXVldWVzW3F1ZXVlXS5xdWV1ZXNpemUgPSBvZmZzZXQgKiA0OworCQlmaWxlX29mZnNldCArPSBvZmZzZXQgKiA0OworCisvKiAgICAgIERCR19NU0coIiAgICBSZWxvYWQgUVVFVUUgIzB4JXggZWxlbWVudHNbJXhdXG4iLCAodWludClxdWV1ZSwgb2Zmc2V0KTsqLworCQkvKgorCQkgKiBGaWxsIHRoZSBxdWV1ZSBiYWNrIHVwCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCXFzdGFydCA9IGppZmZpZXM7CisJCQlxZGVsdGEgPSAwOworCisJCQlzdGF0dXMgPSBzbGljX2R1bXBfbG9hZF9xdWV1ZShjYXJkLCBxYXJyYXlbaV0sIHF1ZXVlKTsKKwkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7CisJCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKKwkJCQlxdG90YWwgKz0gcWRlbHRhOworCQkJfQorCQl9CisKKwkJaWYgKG9mZnNldCkKKwkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKKwkJZWxzZQorCQkJcWRlbHRhID0gMDsKKworLyogICAgICBEQkdfTVNHKCIgICBSZWxvYWQgRE9ORSBhdmdqaWZmc1sleF1cbiIsIHFkZWx0YSk7ICovCisKKwkJcmVzdW1lID0gMTsKKwl9CisKKwlsZW4gPSBTTElDX0dCX0NBTUFCX1NaRSAqIDQ7CisJc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0EpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwlpZiAocmVzdWx0KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0EgZGF0YSB0byBkdW1wIGZpbGUgLSAiCisJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwljb3JlaGRyLkNhbUFNT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5DYW1BU2l6ZSA9IGxlbjsKKwlmaWxlX29mZnNldCArPSBsZW47CisKKwlsZW4gPSBTTElDX0dCX0NBTUNEX1NaRSAqIDQ7CisJc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0MpOworCWlmIChzdGF0dXMpIHsKKwkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQyAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwlpZiAocmVzdWx0KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0MgZGF0YSB0byBkdW1wIGZpbGUgLSAiCisJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwljb3JlaGRyLkNhbUNNT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5DYW1DU2l6ZSA9IGxlbjsKKwlmaWxlX29mZnNldCArPSBsZW47CisKK2RvbmU6CisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGNvcmUgaGVhZGVyCisJICovCisJZmlsZV9vZmZzZXQgPSAwOworCURCR19NU0coIltzbGljbW9uXSBXcml0ZSBDb3JlSGVhZGVyIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKKwkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSwgZmlsZV9vZmZzZXQpOworCisJcmVzdWx0ID0KKwkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsICZjb3JlaGRyLCBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkciksCisJCQkgICAgZmlsZV9vZmZzZXQpOworCURCR19NU0coIltzbGljbW9uXSBjb3JlaGRyICB4b2ZmWyV4XSB4c3pbJXhdXG4iCisJCSIgICAgcm9mZlsleF0gcnN6WyV4XSBmaWxlb2ZmWyV4XSBmaWxlc3pbJXhdXG4iCisJCSIgICAgc3JhbW9mZlsleF0gc3JhbXN6WyV4XSwgZHJhbW9mZlsleF0gZHJhbXN6WyV4XVxuIgorCQkiICAgIGNvcmVoZHJfb2Zmc2V0WyV4XVxuIiwgY29yZWhkci5YbXRSZWdPZmYsCisJCWNvcmVoZHIuWG10UmVnc2l6ZSwgY29yZWhkci5SY3ZSZWdPZmYsIGNvcmVoZHIuUmN2UmVnc2l6ZSwKKwkJY29yZWhkci5GaWxlUmVnT2ZmLCBjb3JlaGRyLkZpbGVSZWdzaXplLCBjb3JlaGRyLlNyYW1PZmYsCisJCWNvcmVoZHIuU3JhbXNpemUsIGNvcmVoZHIuRHJhbU9mZiwgY29yZWhkci5EcmFtc2l6ZSwKKwkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSk7CisJZm9yIChpID0gMDsgaSA8IG1heF9xdWV1ZXM7IGkrKykgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gIFFVRVVFIDB4JXggIG9mZnNldFsleF0gc2l6ZVsleF1cbiIsCisJCQkodWludCkgaSwgY29yZWhkci5xdWV1ZXNbaV0ucXVldWVPZmYsCisJCQljb3JlaGRyLnF1ZXVlc1tpXS5xdWV1ZXNpemUpOworCisJfQorCisJc2xpY19kdW1wX2Nsb3NlX2ZpbGUoY2FyZCk7CisKKwlpZiAocmVzdW1lKSB7CisJCURCR19NU0coInNsaWNEdW1wIFJFU1RBUlQgUkVDRUlWRSBhbmQgWE1JVCBQUk9DRVNTT1JTXG5cbiIpOworCQlzbGljX2R1bXBfcmVzdW1lKGNhcmQsIFBST0NfUkVDRUlWRSk7CisJCXNsaWNfZHVtcF9yZXN1bWUoY2FyZCwgUFJPQ19UUkFOU01JVCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKK3sKKwl1bnNpZ25lZCBjaGFyICpjbWQgPSBjYXJkLT5jbWRidWZmZXI7CisKKwkqY21kID0gQ09NTUFORF9CWVRFKENNRF9IQUxULCAwLCBwcm9jKTsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZCA9IGNhcmQtPmNtZGJ1ZmZlcjsKKworCSpjbWQgPSBDT01NQU5EX0JZVEUoQ01EX1JVTiwgMCwgcHJvYyk7CisKKwlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOworCisJZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBwcm9jKTsKKwlkdW1wLT5kZXNjID0gREVTQ19SRUc7CisJZHVtcC0+Y291bnQgPSAwOworCWR1bXAtPmFkZHIgPSAwOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCisJCSAgICAgICB1MzIgYWRkciwgdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgUFJPQ19SRUNFSVZFKTsKKwlkdW1wLT5kZXNjID0gZGVzYzsKKwlkdW1wLT5jb3VudCA9IGNvdW50OworCWR1bXAtPmFkZHIgPSBhZGRyOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLAorCQkJdTMyIGFkZHIsIHUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSkKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOworCisJZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBQUk9DX1JFQ0VJVkUpOworCWR1bXAtPmRlc2MgPSBERVNDX1FVRVVFOworCWR1bXAtPmNvdW50ID0gMTsKKwlkdW1wLT5hZGRyID0gcXVldWU7CisKKwlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKKwkJCQkgICBhZGRyLCBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAorCQkJCXUzMiBxdWV1ZSkKK3sKKwlzdHJ1Y3QgZHVtcF9jbWQgKmxvYWQgPSAoc3RydWN0IGR1bXBfY21kICopIGNhcmQtPmNtZGJ1ZmZlcjsKKworCWxvYWQtPmNtZCA9IENPTU1BTkRfQllURShDTURfTE9BRCwgMCwgUFJPQ19SRUNFSVZFKTsKKwlsb2FkLT5kZXNjID0gREVTQ19RVUVVRTsKKwlsb2FkLT5jb3VudCA9ICh1c2hvcnQpIHF1ZXVlOworCWxvYWQtPmFkZHIgPSBkYXRhOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOworfQorCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLAorCQkgICAgICB1MzIgYWRkciwgdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfQ0FNX09QUywgMCwgUFJPQ19OT05FKTsKKwlkdW1wLT5kZXNjID0gZGVzYzsKKwlkdW1wLT5jb3VudCA9IGNvdW50OworCWR1bXAtPmFkZHIgPSAwOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgYWRkciwgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJCSAgIHUzMiBjbWRfcGh5c2wsCisJCQkgICB1MzIgY21kX3BoeXNoLAorCQkJICAgdTMyIGJ1Zl9waHlzbCwgdTMyIGJ1Zl9waHlzaCkKK3sKKwl1bG9uZyB0aW1lb3V0ID0gU0xJQ19NU19UT19KSUZGSUVTKDUwMCk7CS8qIDUwMCBtc2VjICovCisJdTMyIGF0dGVtcHRzID0gNTsKKwl1MzIgZGVsYXkgPSBTTElDX01TX1RPX0pJRkZJRVMoMTApOwkvKiAxMCBtc2VjICovCisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJZG8geworCQkvKgorCQkgKiBaZXJvIHRoZSBEdW1wc3RhdHVzIGZpZWxkIG9mIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorCQkgKi8KKwkJY2FyZC0+ZHVtcHN0YXR1cyA9IDA7CisJCS8qCisJCSAqIElzc3VlIHRoZSBkdW1wIGNvbW1hbmQgdmlhIGEgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdC4KKwkJICoKKwkJICogS2x1ZGdlOiBXZSB1c2UgdGhlIEluZm9ybWF0aW9uYnVmZmVyIHBhcmFtZXRlciB0byBob2xkCisJCSAqIHRoZSBidWZmZXIgYWRkcmVzcworCQkgKi8KKwkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9EVU1QLCBjbWRfcGh5c2wsIGNtZF9waHlzaCwKKwkJCQkgYnVmX3BoeXNsLCBidWZfcGh5c2gpOworCisJCXRpbWVvdXQgKz0gamlmZmllczsKKwkJLyoKKwkJICogU3BpbiB1bnRpbCBjb21wbGV0aW9uIG9yIHRpbWVvdXQuCisJCSAqLworCQl3aGlsZSAoIWNhcmQtPmR1bXBzdGF0dXMpIHsKKwkJCWludCBudW1fc2xlZXBzID0gMDsKKworCQkJaWYgKGppZmZpZXMgPiB0aW1lb3V0KSB7CisJCQkJLyoKKwkJCQkgKiAgQ29tcGxldGUgdGhlIHRpbWVkLW91dCBEVU1QIFVQUiByZXF1ZXN0LgorCQkJCSAqLworCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiJXM6IFRJTUVEIE9VVCBudW1fc2xlZXBzWyV4XSAiCisJCQkJICAgICAic3RhdHVzWyV4XVxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBudW1fc2xlZXBzLCBTVEFUVVNfRkFJTFVSRSk7CisKKwkJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJCQl9CisJCQludW1fc2xlZXBzKys7CisJCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLAorCQkJCQkJCSAgICBkZWxheSk7CisJCX0KKworCQlpZiAoY2FyZC0+ZHVtcHN0YXR1cyAmIElTUl9VUENFUlIpIHsKKwkJCS8qCisJCQkgKiBFcnJvciAob3IgcXVldWUgZW1wdHkpCisJCQkgKi8KKy8qICAgICAgICAgIERCR19FUlJPUigiW3NsaWNtb25dICVzOiBEVU1QX1NUQVRVUyAmIElTUl9VUENFUlIgc3RhdHVzWyV4XVxuIiwKKwkJX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsgKi8KKworCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQl9IGVsc2UgaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDQlNZKSB7CisJCQkvKgorCQkJICogUmV0cnkKKwkJCSAqLworCQkJREJHX0VSUk9SKCIlczogSVNSX1VQQ0JVU1kgYXR0ZW1wdFsleF1cbiIsIF9fZnVuY19fLAorCQkJCSAgYXR0ZW1wdHMpOworCisJCQlhdHRlbXB0cy0tOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHN1Y2Nlc3MKKwkJCSAqLworCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCQl9CisKKwl9IHdoaWxlIChhdHRlbXB0cyk7CisKKwlEQkdfRVJST1IoIiVzOiBHQVZFIFVQIEFGVEVSIFNFVkVSQUwgQVRURU1QVFMgc3RhdHVzWyV4XVxuIiwKKwkJICBfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOworCisJLyoKKwkgKiBHYXZlIHVwIGFmdGVyIHNldmVyYWwgYXR0ZW1wdHMKKwkgKi8KKwlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Cit9CisKKyNlbmRpZgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2xpY19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBzbGljX3BjaV90YmwsCisJLnByb2JlID0gc2xpY19lbnRyeV9wcm9iZSwKKwkucmVtb3ZlID0gc2xpY19lbnRyeV9yZW1vdmUsCisjaWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKwkuc3VzcGVuZCA9IHNsaWNwbV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbGljcG1fcmVzdW1lLAorI2VuZGlmCisvKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgc2xpY19tb2R1bGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lkZXY7CisJaW50IHJldDsKKworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBjcHUgJWRcbiIsIF9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAqLworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJaWYgKGRlYnVnID49IDAgJiYgc2xpY19kZWJ1ZyAhPSBkZWJ1ZykKKwkJcHJpbnRrKFNMSUNMRVZFTCAic2xpY29zczogZGVidWcgbGV2ZWwgaXMgJWQuXG4iLCBkZWJ1Zyk7CisJaWYgKGRlYnVnID49IDApCisJCXNsaWNfZGVidWcgPSBkZWJ1ZzsKKworCXBjaWRldiA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKXNsaWNfZHJpdmVyLmlkX3RhYmxlOworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHBjaV9tb2R1bGVfaW5pdCBqaWZmaWVzWyVseF0gY3B1ICMlZFxuIiwKKwlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKworLyogIERCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWZ0ZXIgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdICIKKwkgICAgImNwdSAjJWQgc3RhdHVzWyV4XVxuIixfX2Z1bmNfXywgamlmZmllcywKKwkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOyAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNsaWNfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsgKi8KKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKwlzbGljX2RlYnVnX2NsZWFudXAoKTsKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOyAqLworfQorCittb2R1bGVfaW5pdChzbGljX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNsaWNfbW9kdWxlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0YWdpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZTU4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworc3RhdGljIGludCBfX2luaXQgc3RhZ2luZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGFnaW5nX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoc3RhZ2luZ19pbml0KTsKK21vZHVsZV9leGl0KHN0YWdpbmdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdyZWcgS3JvYWgtSGFydG1hbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFnaW5nIENvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTZjZjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTWEcKKwl0cmlzdGF0ZSAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgTkVUREVWXzEwMDAwCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkCisJICAxMEdiZSBuZXR3b3JrIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ4ZmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU1hHKQkrPSBzeGcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDFkZGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorVGhpcyBpcyB0aGUgcm91Z2ggY3V0IGF0IGEgZHJpdmVyIGZvciB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kKK05vbi1BY2NlbGVyYXRlZCAxMEdiZSBuZXR3b3JrIGRyaXZlci4KKworVE9ETzoKKwktIGxpbmRlbnQgdGhlIGNvZGUKKwktIHJlbW92ZSB0eXBlZGVmcworCS0gcmVtb3ZlIHdyYXBwZXJzCisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBjYXJkIG5lZWRzCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+Citmb3IgYW55IGNsZWFudXBzIHRoYXQgeW91IGRvIHRvIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODY1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKQEAgLTAsMCArMSw0ODU0IEBACisjZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX1NUUklORwkiJFJldmlzaW9uOiAxLjEgJCIKKyNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfREFURSAgCSIkRGF0ZTogMjAwOC8wNi8yNyAxMjo1ODoyNyAkIgorI2RlZmluZSBTQUhBUkFfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgdTMyIFNOdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgU1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMGUyNzQsIDB4MDAwMDAwMGMsCit9OworCitzdGF0aWMgdTMyIFNTZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwMWZmZiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFNhaGFyYVVDb2RlWzJdWzU3OTcyXSA9Cit7Cit7CisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGIyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgxZSwgMHg4MCwgMHhlOSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMywgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAzLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg1ZiwgMHgzZiwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGZmLCAweGZjLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDhhLCAweDExLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhjMCwgMHgwMSwgMHgzMiwKKwkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDRkLCAweDI4LCAweDFhLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NWYsIDB4MGEsIDB4ZjYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGUsIDB4ODAsIDB4MTgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhjMCwgMHgyMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NSwgMHgyMSwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAyLCAweGMwLCAweDIyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg5MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweGU5LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MWUsIDB4YzAsIDB4ZTcsIDB4OWEsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI4LCAweDAxLCAweDAwLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDE3LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4MTgsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgxLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHg1NywgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDVhLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGIwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhmYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHhiZCwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiZCwKKwkweDAwLCAweDAwLCAweDc2LCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHg3NiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDZiLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODUsIDB4ODAsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDYzLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiOCwgMHhmZiwgMHg4NSwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDIxLCAweGZmLCAweDM4LAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NGQsIDB4ODAsIDB4M2EsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwZCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ4LCAweDQxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODYsIDB4OTgsIDB4NjcsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDhiLCAweDgwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHg4MCwgMHg3MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDkwLCAweDk5LCAweDg2LCAweDJjLCAweDI4LCAweGRlLCAweDgyLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTgsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHhjNSwgMHg4MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGM1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDNhLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4M2EsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHg5MCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMiwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHg4NywgMHgwMCwgMHg5NSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg3ZCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDlhLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MGYsIDB4OTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNiwgMHhiOCwKKwkweDAxLCAweDAwLCAweGE1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4ODcsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMCwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDk4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweGE4LCAweDQyLCAweDNkLCAweDcyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4ODAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4Y2QsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweDMwLAorCTB4ODAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHhhMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweGZjLCAweGI2LAorCTB4ODcsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhiOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHg2MSwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YjgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweGUxLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDA0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwOCwgMHg4OSwgMHg4ZCwgMHg3MiwgMHgzMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE5LCAweGRjLCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHg4MCwgMHgyMiwgMHgyNCwgMHg3YywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHhkMiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4ZTAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MjksIDB4YzEsIDB4NzIsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHg5MCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMxLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4OTcsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhhMCwgMHgwNCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4ODEsIDB4ODAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4MDAsIDB4MjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDU5LCAweGMwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NzgsIDB4MTksIDB4YzAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwNCwgMHgwMSwgMHhlYywgMHgwNiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4MDksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGMwLCAweDI5LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4M2QsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmNCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MywgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDJiLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4MjgsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNkLCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHhkOSwgMHhjNSwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgzYywgMHhiOCwgMHgxYywgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDI4LCAweGMwLCAweDgzLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiOCwgMHhlMCwgMHg4MywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDI5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg3OCwgMHhhMCwgMHg4MSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDEsIDB4MDYsIDB4M2EsIDB4MDAsIDB4ODAsIDB4YjIsIDB4NWMsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg4OSwgMHhjMSwgMHg3MiwgMHgzNywKKwkweDA3LCAweDAwLCAweDUwLCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDA0LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweGQ3LCAweGUwLCAweDcyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDY0LCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDczLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MjksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4ZjcsIDB4ZTAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg4MywgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhmMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDA4LCAweDM4LCAweDgxLCAweDgwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDNiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MDEsIDB4YjksIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4M2IsIDB4M2EsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmEsIDB4ODMsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGY0LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZSwgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDdhLCAweGU4LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDYwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhlOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDU0LCAweGE4LCAweDVjLCAweDE2LCAweDM4LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmMsIDB4YTgsIDB4ZGMsIDB4MTYsIDB4MzgsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHg0ZCwgMHg4NSwgMHgzYSwKKwkweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTQsIDB4YTksIDB4OWMsIDB4ODcsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgxOCwgMHg4MCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGJiLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg3OCwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGQwLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRjLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyOCwgMHgwMCwgMHg4NCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTQsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4MGQsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYxLCAweDg1LCAweDNhLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YjgsIDB4NjAsIDB4ODUsIDB4M2MsCisJMHgwNCwgMHgwMCwgMHhmMiwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzQsIDB4MDgsIDB4ODAsIDB4NzUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA4LCAweGExLCAweDgyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjIsIDB4NjAsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDdjLCAweDA4LCAweDgwLCAweDc1LCAweDMyLAorCTB4MDksIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDQsIDB4MWEsIDB4MDAsIDB4NzAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHg4NywgMHhjZCwgMHg3NCwgMHgzMSwKKwkweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MjgsIDB4NDAsIDB4ODYsIDB4M2EsCisJMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweGUxLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHgwNywgMHg0MCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDhmLCAweDAxLCAweDAwLCAweDc0LCAweDE4LCAweDQwLCAweDg3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHhmNywgMHhhMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweGEwLCAweDg2LCAweDNhLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDUwLCAweDA3LCAweDgwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHhjNywgMHhlMSwgMHg3NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDc4LCAweGEwLCAweDg0LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTEsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDU4LCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTgsIDB4YTEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDYwLCAweDg1LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDIxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NjEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjEsIDB4ODAsIDB4M2EsCisJMHgwNywgMHgwMCwgMHgyNywgMHgwMiwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHgzYywKKwkweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNkLCAweDAyLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDcxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDIsIDB4OTAsIDB4MTksIDB4MDAsIDB4MDQsIDB4ZTksIDB4NWMsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDgwLCAweDg2LCAweDMyLAorCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDQwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDUsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDViLCAweDAyLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg1YiwgMHgwMiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQ1LCAweDgxLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg3MiwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YmQsCisJMHg3NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgwZCwgMHg5MCwgMHgzYSwKKwkweDJlLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYiwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDM3LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzgsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg0MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA1LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDA0LCAweDAxLCAweDE0LCAweDU5LCAweGMwLCAweDZlLCAweGQ3LAorCTB4MDIsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MDQsIDB4YjgsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MSwgMHgwMiwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDg1LCAweDJmLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAorCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKKwkweDFiLCAweDAwLCAweGFmLCAweDAyLCAweDM4LCAweDAxLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDc5LCAweDBiLCAweDE0LCAweDM4LAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4NWIsIDB4OTEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHhiZSwgMHgwMiwgMHgzOCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI2LCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGJhLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjksIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDBhLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MGIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4MGMsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDAyLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4YTQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIyLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHhiOSwKKwkweDEwLCAweDAwLCAweGQ0LCAweDAyLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDk4LAorCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4YjksCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4ODUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg4NSwgMHhiYywKKwkweDAwLCAweDAwLCAweGRmLCAweDAyLCAweDM2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MGUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4OGMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg5NCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDk4LCAweDI4LCAweDgwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MzgsIDB4MjIsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwMiwgMHgwNCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4ZWUsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4OTksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgxNCwgMHgxMCwgMHhmNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAyLCAweGYyLAorCTB4MGQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwOSwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGZiLCAweDAyLCAweDMzLCAweDE1LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCisJMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwZCwgMHg3NCwgMHgzYywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDMxLCAweDAwLCAweDdjLCAweDA4LCAweDAwLCAweDc1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhmYywgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4OCwgMHgxOCwgMHgwMCwgMHg3NSwgMHg5YywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDc0LCAweDM4LCAweGEyLCAweDc1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4ODMsIDB4MWIsIDB4MDAsIDB4NzgsIDB4MDgsIDB4YzAsIDB4NzQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGYyLCAweDAyLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4NCwgMHhkMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODcsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHg5ZiwgMHg3OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDlmLCAweDk5LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4OWYsIDB4NjgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4NWIsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4YTQsIDB4YjIsIDB4NWIsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDE3LCAweDAzLCAweDA4LCAweDAxLCAweDAwLCAweDA0LCAweGU4LCAweGE1LCAweDc1LCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDYsIDB4YjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAyLCAweGQ0LCAweDAxLCAweDgwLCAweDkyLCAweGZiLCAweDZlLCAweGJjLAorCTB4MTUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDFjLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzIsIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDIxLCAweDAzLCAweDA2LCAweGE4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDgwLCAweGJjLAorCTB4MTMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHg5ZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHgyOSwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCisJMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweGMwLCAweDI5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKKwkweDA5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDMsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDFmLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MWUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCisJMHgwZCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4YjgsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDFkLCAweDAwLCAweDQ5LCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGUwLCAweDAwLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOCwgMHgwNSwgMHgyOCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgzNSwgMHgwMCwgMHg1NCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDFkLCAweDQxLCAweDAyLCAweDVjLCAweGY4LCAweDAxLCAweDY4LCAweGI0LAorCTB4NDEsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4OTEsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDJmLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDMsIDB4MDYsIDB4YTksIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDlmLCAweDg4LCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDQsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg2YywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDgwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgzMCwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MTIsIDB4NzAsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgzMSwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHg0ZCwgMHg4MSwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwMywgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MjUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgyNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGQ4LCAweDFlLCAweDgwLCAweGVkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDMsIDB4YjcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgzYiwgMHhlZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDFlLCAweDAwLCAweGVlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MGUsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MWUsIDB4MDAsIDB4ZWIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjYywgMHgwMiwgMHg4MCwgMHg2YywgMHgzMiwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgzNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGM1LCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgxMiwgMHhjMCwgMHgyYywgMHgzYSwKKwkweDAwLCAweDAwLCAweDk1LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDlmLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKKwkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHg5OSwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwMywgMHg4YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgwMywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDcwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgxNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4NjQsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYSwKKwkweDI1LCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGYzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDEzLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweGJjLAorCTB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHgzYSwKKwkweDRjLCAweDAwLCAweDFhLCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJkLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YWUsIDB4MGQsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweGNjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4ODAsIDB4MDAsIDB4M2EsCisJMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjksIDB4NDAsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDk3LCAweGI2LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4MDAsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJjLCAweDA0LCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDM2LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKKwkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZmUsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNlLCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4OTcsIDB4YmMsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweGZlLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNiwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHg2NCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgzMywgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDExLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHg1YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg5MCwgMHgzYSwKKwkweDBkLCAweDAwLCAweDdjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAorCTB4MGQsIDB4MDAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCisJMHgwZCwgMHgwMCwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweGEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHhiMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCisJMHhkOCwgMHgwMCwgMHhmNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGZmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHg0MCwgMHg5MCwgMHg5NywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDI0LCAweDE2LCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgzMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDMzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4M2YsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MDAsIDB4YjAsCisJMHgwMiwgMHgwMCwgMHg4MCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHhiMCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4OTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKKwkweGYxLCAweDBmLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMiwgMHgwMCwgMHg5OCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDliLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MWYsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDBhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MGYsIDB4ODEsIDB4ZmMsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHgwMCwgMHg5MCwgMHgzYywKKwkweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweGRiLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgxMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDFmLCAweDQwLCAweDkwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4YTQsIDB4OTcsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZSwgMHg4MCwgMHhlZSwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGYyLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgxZSwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YzAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjQsIDB4ZjYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDQwLCAweDgwLCAweGZjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3OSwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAyLCAweDAwLCAweGZjLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgxZiwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKKwkweGVhLCAweDA1LCAweDA1LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDAsIDB4MTUsIDB4MzIsCisJMHgwMCwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGYwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwYiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHg5NSwKKwkweDM2LCAweDIzLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4ODAsIDB4MTQsIDB4MzIsCisJMHgwMCwgMHhmOCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGMwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDhmLCAweDRkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4NjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg3YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZmLCAweDgwLCAweGZjLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg1ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4NDAsIDB4OTAsIDB4YjAsCisJMHg4MCwgMHgwMSwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4ZCwgMHhmYywgMHg5MSwKKwkweDAwLCAweDAwLCAweDE5LCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDFjLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDIwLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDQwLCAweDkwLCAweGI2LAorCTB4ZjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHg5NSwKKwkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwMiwgMHhmNSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweGY1LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MjUsIDB4ZjUsIDB4YjUsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgxZiwgMHgyNCwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDAwLCAweGY1LCAweDljLAorCTB4ODAsIDB4MDEsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHhmNSwgMHgzYSwKKwkweDhjLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAzLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwNSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGU0LCAweDZlLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgxNywgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDUsIDB4MDQsIDB4MTksIDB4ODYsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNSwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIyLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNiwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIxLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4ZGMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgxLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MiwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MGEsIDB4MzIsCisJMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NjksIDB4MDUsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NiwgMHgwNCwgMHgxOSwgMHg4MCwgMHg2YywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDBjLCAweGY3LCAweDdmLCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4ODYsIDB4ODAsIDB4NzIsIDB4ODIsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhhOCwgMHg0MiwgMHg4MCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDEyLCAweDAwLCAweDcwLCAweDM4LCAweDAyLCAweDAwLCAweDdjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDM0LCAweDAyLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODIsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHg5NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMywgMHgwMCwgMHg4MCwgMHgwNSwgMHgyMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMCwgMHhlZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAorCTB4NDAsIDB4N2UsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHg4MCwgMHgwNywgMHgzMiwKKwkweDY0LCAweDAwLCAweDhmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4NjQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZWQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweGEwLCAweDhjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDMzLCAweDdiLCAweGVjLCAweDM5LAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZSwgMHhjMCwgMHhlYywgMHgzNywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDFjLCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgzZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDM1LCAweDAwLCAweDljLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHhjZCwgMHg4MSwgMHgzYywKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDFjLCAweDAxLCAweDE0LCAweDU5LCAweGU0LCAweDZlLCAweGQ5LAorCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTgsIDB4MDEsIDB4ODAsIDB4OTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MTQsIDB4NzksIDB4ZTAsIDB4NmUsIDB4ZDksCisJMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKKwkweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhmMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgyOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4M2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg0NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1ZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDgzLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhiMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhjYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhlNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDBhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgxYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDI1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgzNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4NTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1NywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDVjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NjEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg2NiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDZiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3NSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDdhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4N2YsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDg5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5MywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDk4LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3OSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDg2LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGNjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDMxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwNywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAorCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA4LCAweDAwLCAweGE3LCAweDA3LCAweDFkLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDBmLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKKwkweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI3LCAweDA3LCAweGI3LCAweDEwLCAweDAyLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhmZiwgMHg4MCwgMHhmYywgMHg5NCwKKwkweDAwLCAweDAwLCAweGJjLCAweDA3LCAweDlmLCAweDk5LCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDQwLCAweGMyLCAweDA3LCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDkyLAorCTB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg4MCwgMHgwMywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDgwLCAweDMyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDI0LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMywgMHgwNywgMHg4MCwgMHgwZSwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDM0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQ5LCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCisJMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKKwkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MjAsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHhlYywgMHg4NiwgMHhjZCwgMHg5MSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAyLCAweGU4LCAweDg2LCAweDI0LCAweDkwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4OTYsIDB4MjQsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUzLCAweDA3LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmOSwgMHgwNywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MmMsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YzAsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDNiLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDE3LCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4NzgsIDB4Y2EsIDB4ZTksIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDUwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGUwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNmLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgwOCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ2LCAweDA4LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHgzNSwKKwkweDAwLCAweDAwLCAweDI4LCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4MjgsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDViLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MWQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDYyLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDJhLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDc0LCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDEwLCAweDA0LCAweDc3LCAweDA4LCAweDM3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGIxLAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdjLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDFkLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDgsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFlLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4YWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDQwLCAweDAwLCAweDljLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwMiwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGI3LCAweDAxLCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhhZSwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzYywgMHgxOCwgMHgyMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDNjLCAweDg4LCAweGRiLCAweDgzLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDEsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNywgMHgyMCwgMHg3OCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweGY2LCAweDIwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjgsIDB4NjAsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDJlLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCisJMHgzMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGI4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDA0LCAweGQxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MjYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MTAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4OWEsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDgsIDB4MjMsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDA4LCAweDAwLCAweGQ4LCAweDA4LCAweDFkLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwOCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4ODcsIDB4OGQsIDB4ODUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgxMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGMsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTcsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDM1LCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGY2LCAweDA4LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDJmLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDgsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDYsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MTcsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDEzLCAweDA5LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4NzksIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDksIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHhhYSwgMHgwNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2EsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwOSwgMHgwNCwgMHhkNCwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4MjUsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDM5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMiwgMHgwMCwgMHgzZiwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAorCTB4MDAsIDB4YzAsIDB4NDgsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhhMiwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4ZTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAyLCAweDAwLCAweDU5LCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU1LCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDk0LAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4NGMsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVlLCAweDA5LCAweDEyLCAweDM4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDksIDB4MTIsIDB4NDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwOSwgMHgxMiwgMHg0OCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDYxLCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwOSwgMHgxMiwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDA5LCAweDEyLCAweDI4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAzLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHgzZCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NTMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDZhLCAweDA5LCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDc0LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgxNCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDEwLCAweDAwLCAweDgyLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MmMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDI5LCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgzYywgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4YzAsIDB4OTksIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgyYywgMHhmOCwgMHgwMSwgMHgwYiwgMHhiNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDAyLCAweDBkLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDksIDB4MjcsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyYywgMHhlOCwgMHhjMCwgMHg4MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFiLCAweDA5LCAweDIzLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweGIyLAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MTAsIDB4MDAsIDB4YjYsIDB4MDksIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4YjksCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4YjcsIDB4YzEsIDB4ODIsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHg0MCwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweGQyLCAweDAxLCAweDAwLCAweDk0LCAweDFlLCAweDQwLCAweGU5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDA5LCAweDllLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgyYSwgMHgzMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAorCTB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgzOCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MTgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHhhNiwgMHgyMCwgMHgwMCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBhLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDExLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE0LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBkLCAweDBhLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDBkLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI3LCAweDBhLCAweDAwLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDNlLCAweDUxLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHg2MCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDdiLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNhLCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHhjMCwgMHgzZSwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGEsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDFmLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgyYSwgMHhhOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDYxLCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MTgsIDB4MDAsIDB4NWEsIDB4MGEsIDB4MmUsIDB4NDksIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgwYSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg3NiwgMHgwMCwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4ODAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCisJMHgxYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDBjLCAweDAwLCAweGExLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDcyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MmEsIDB4MDAsIDB4NzgsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgwLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg4NiwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4M2YsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRhLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweGIwLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWUsIDB4MGEsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFjLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJjLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDQwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhlMCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDBhLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MmEsIDB4MTEsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweGM2LCAweDBhLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwOCwgMHgwMCwgMHhjYSwgMHgwYSwgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4MWQsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGQzLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHgyMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGU0LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwYSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVhLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGVjLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY1LAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGY4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwYSwgMHgyOSwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDAxLCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4OWMsCisJMHgyYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDUsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MCwgMHhkOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg2MCwgMHg4MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjAsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg2OCwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgxNywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNjLCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDM0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHhmNSwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE1LCAweDAyLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgzYywgMHgwMCwgMHhhNSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg0YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NWMsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDM5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKKwkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDZlLCAweDBiLCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4NzQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdhLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDdjLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgzYiwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MGIsIDB4MjcsIDB4MDksIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCisJMHgwMCwgMHhjMCwgMHg5NSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgyMCwgMHg4MCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKKwkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHhjYSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGFlLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGIsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGM1LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgwYiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweGQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHhkYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI5LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGY2LCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHhjMCwgMHhmNywgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGIsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGZmLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDA3LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDA2LCAweDBjLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHgwYywgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDA4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgwYywgMHgyMywgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwYywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGMsIDB4MjksIDB4MzEsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgyYSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGU0LCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDc4LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4OCwgMHgwZCwgMHg4YiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGI0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4OTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4NDMsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgzYywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKKwkweDE4LCAweDAwLCAweDRlLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYywgMHgyOCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHgwYywgMHgwMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NjIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg0OCwgMHg2MiwgMHg4YiwgMHhiYSwKKwkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHg4NywgMHgwYywgMHg4NiwgMHg0MCwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCisJMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg3MiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MjAsIDB4ODAsIDB4NjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMSwgMHgwYiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDgxLCAweDBjLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDEsIDB4NzAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDkzLCAweDBjLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKKwkweGI3LCAweDAwLCAweDVhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4OGMsIDB4MGMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGEyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGMsIDB4MjMsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDkwLCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMSwgMHg3MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDgsIDB4MDAsIDB4OTcsIDB4MGMsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhhZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDY2LCAweDAwLCAweDAwLCAweDM0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4MzksCisJMHgxYiwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGI2LCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhiZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDFmLCAweDIwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4ODAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweDQ4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCisJMHgwNSwgMHgwMCwgMHhkZSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYwLCAweDgwLCAweDM5LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4OGMsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmUsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA1LCAweDAwLCAweDFkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKKwkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgyMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHhjZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NDMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGQsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MmQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDVjLCAweDBkLCAweDA0LCAweDk4LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MzYsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZDUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU4LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDgsIDB4NTksIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4OWMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHgzYSwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDE5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweGMwLCAweGFkLCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4YmMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweDM4LCAweDg4LCAweDFiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NDgsIDB4MDEsIDB4MjgsIDB4ODgsIDB4MDQsIDB4NmUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg3MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NjIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHg4MSwgMHg5MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMiwgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMSwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHhmMCwgMHhlMSwgMHgwZCwgMHgxZCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhhOCwgMHgwZCwgMHg2OCwgMHhiMSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4NDAsIDB4MDIsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGRlLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwZCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBkLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhlNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDAxLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4MGIsIDB4MmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMywgMHg4MSwgMHg5NywgMHgzNCwKKwkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDI5LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDJjLCAweDMyLAorCTB4ZDksIDB4MDIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHg0NiwgMHgwMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4YmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwZSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHg4MSwgMHg2OCwgMHhiNiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDYxLCAweDgwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHg4OCwgMHhlNiwgMHgyMSwgMHg5MSwgMHg3OSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE5LCAweGEwLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZmYsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYywgMHgwZSwgMHgyYywgMHg0MSwgMHgwMiwgMHg3OCwgMHhmOSwgMHg4MSwgMHg2OCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDI5LCAweDFhLCAweGZmLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjksIDB4MWIsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4OCwgMHgxNiwgMHhhMCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDI3LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OGEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg3NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MjMsIDB4MGUsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NzksIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxZiwgMHg0MCwgMHhmNSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4M2YsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGE0LCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4OTAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4NjEsIDB4OTMsIDB4NzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwZSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MCwgMHhiYywKKwkweDI2LCAweDAwLCAweDJlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4OTIsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEwLCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDkyLCAweDdhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4ODksIDB4OWIsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4NzQsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4OSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDA4LCAweDVkLCAweDAxLCAweGVjLCAweDE2LCAweDQwLCAweDg5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MGIsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg4NywgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGExLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MSwgMHhiYywKKwkweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4OWIsIDB4OTEsIDB4ZDksCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDg5LCAweDBkLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4ODksIDB4NWIsIDB4OTEsIDB4ZDIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDJkLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGUsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MzAsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY2LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDI0LCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHg3ZiwgMHg5MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTQsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4YTQsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg1YywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHhhNCwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgzOCwgMHg1MCwgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MjgsIDB4MDEsIDB4NzgsIDB4ZTksIDB4MjUsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg2OSwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGUsIDB4MzgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZiwgMHgwZSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDc3LCAweDBlLCAweDM4LCAweDUxLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDcyLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4NTAsIDB4MDEsIDB4ODAsIDB4YTIsIDB4NWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3ZiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgyNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MjQsIDB4MDAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhmMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDhjLCAweGI2LCAweGMxLCAweDY4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4OTAsIDB4M2EsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MiwgMHgwZCwgMHg5MSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDEyLCAweGE0LCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OTksIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4MDEsIDB4N2MsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHg3OCwgMHhiOSwgMHgzZiwgMHg3YywgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MTksIDB4MDAsIDB4OTEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDk0LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHhhNSwgMHgwZSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHhjZCwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIzLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweGI2LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHg3YywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDFiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ZTAsIDB4ODMsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4MzIsCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHg4NiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGIzLCAweGU0LCAweDM5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweDc2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHgyMCwgMHgwMCwgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQ5LCAweDBlLCAweDAwLCAweDE2LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4ZSwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkZiwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDk3LCAweGJjLAorCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAzLCAweDAwLCAweDM4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhkOCwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweGU0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDUsIDB4MzAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGY3LCAweDBlLCAweDMyLCAweDBmLCAweDAxLCAweGJjLCAweDA4LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGY2LCAweDBlLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YTAsIDB4ZWEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MDEsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBlLCAweDgyLCAweDMyLAorCTB4MDAsIDB4ZTAsIDB4MDMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4MDAsIDB4ODIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDYwLCAweDM4LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYzLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhjZSwgMHgyYywgMHgzMiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDBkLCAweDkwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxMCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgwMSwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE4LCAweDBmLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MWQsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4YiwgMHhlYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAorCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDExLCAweDAxLCAweDgwLCAweDgyLCAweDBkLCAweDZlLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHgwZCwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJiLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDAyLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDU4LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NTksIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NSwgMHgwZiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDY0LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg2ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDg0LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhkLCAweDBmLCAweDJmLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwZiwgMHgyMywgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg5OSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MTksIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHg3NSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGVlLCAweDA1LCAweGFmLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweGY1LCAweGJjLAorCTB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwOSwgMHg5MiwKKwkweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MDksIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHg5NywgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDUyLCAweDgyLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDgsIDB4YjEsIDB4MGYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJhLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKKwkweDAwLCAweDAwLCAweGJiLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDRkLCAweDkyLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODksIDB4NGQsIDB4OTIsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHhiMiwgMHhlNCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDliLCAweDhkLCAweGI3LCAweGU0LCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDU5LCAweDAwLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MGYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MGYsIDB4ODYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODAsIDB4MmYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHhjMywgMHgwNywgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDkyLCAweGJjLAorCTB4NDQsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4ZDIsCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHhjMCwgMHhlOCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGYxLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmNiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmOSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGZkLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweGI3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI1LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDkyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4OTIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHg4MywgMHgzOSwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweGExLCAweDk3LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MzYsIDB4NTEsIDB4MDEsIDB4ZTgsIDB4MTYsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MzgsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NTcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg5MiwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE5LCAweGEwLCAweDJjLCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTAsIDB4OWQsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgxMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MTAsIDB4MmMsIDB4Y2QsIDB4MDEsIDB4MTgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjOSwgMHhjMSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDY3LCAweDEwLCAweDNiLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGI5LCAweGMxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgxMCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNywgMHhlMCwgMHg5MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgxMCwgMHgzOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDEwLCAweDNiLCAweDIxLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDc4LCAweDI5LCAweDAwLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDQ5LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2YsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgxMCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4YTEsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4NzYsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4OTIsCisJMHgxNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHg2NSwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDEwLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGE0LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDdhLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHg4MCwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKKwkweDAwLCAweDAwLCAweGI3LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2IsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgzYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDEwLCAweDJlLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODEsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhkNSwgMHgxMCwgMHgyNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODAsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAwLCAweGU3LCAweGEwLCAweDkyLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRmLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgxMCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGEsIDB4OTEsIDB4MzksCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzOSwgMHgwYiwgMHg5MSwgMHgzOSwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDU5LCAweDBhLCAweDkxLCAweDM5LAorCTB4MDksIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NjksIDB4MGIsIDB4OTEsIDB4YjksCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NiwgMHhhOCwgMHg4MiwgMHg4ZCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDAwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHg4MCwgMHhlYiwgMHgxMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweGVjLCAweDEwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4ODYsIDB4OGQsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MTAsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MTAsIDB4ODAsIDB4MzksIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4ZTAsIDB4ZmQsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4NmUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhmZCwgMHgxMCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMiwgMHhhNSwgMHgyZiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhiYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MTEsIDB4MzMsIDB4Y2QsIDB4MDEsIDB4YmMsIDB4MDgsIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHgyMiwgMHhlZSwgMHhkYywKKwkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDQsIDB4YjgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg5ZiwgMHg3MSwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDI0LCAweGVlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTksIDB4ODAsIDB4OTIsIDB4ZGYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI4LCAweDExLCAweDA2LCAweDgwLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YmMsCisJMHhlZSwgMHgwNSwgMHgyMCwgMHgxMSwgMHgwNiwgMHgwYywgMHgwMiwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDkwLCAweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4NDAsIDB4M2MsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHg5YSwKKwkweDYwLCAweDg5LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjMsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4OGYsIDB4OTAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhMSwgMHg4OSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHhjMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweGMwLCAweDg5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTEsIDB4MDQsIDB4NzksIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4NzUsCisJMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDNjLCAweDExLCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MTEsIDB4M2MsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDhiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHgzZCwgMHgxMSwgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4NywgMHhkMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGQ4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhlMCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4YjAsIDB4MDEsIDB4ODAsIDB4ZDIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDQ5LCAweDExLCAweDA2LCAweDY4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgxMSwgMHgzNywgMHhiMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgxMSwgMHgwNCwgMHhjMSwgMHgwMSwgMHg4NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDJjLCAweDg5LCAweDhkLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4MmMsIDB4YTksIDB4ZGIsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgyOSwgMHhjMCwgMHg5MiwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE5LCAweGZiLCAweDkyLCAweDNmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4ODAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOSwgMHhlNCwgMHg5MiwgMHgzZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDI2LCAweGZiLCAweDkyLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDI4LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4Y2QsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhiYywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4OCwgMHhlMSwgMHg4YiwgMHhiYywKKwkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDA0LCAweDBjLCAweDAyLCAweDQwLCAweGE4LCAweGRiLCAweDhiLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MWIsIDB4ODQsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgxMSwgMHgwNCwgMHhiMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4N2MsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDhiLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKKwkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKKwkweDM5LCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKKwkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCisJMHgwNywgMHgwMCwgMHg3OSwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCisJMHgzYSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4ODQsIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOSwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MGYsIDB4NDAsIDB4MTgsIDB4MzIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDVmLCAweGNhLCAweGY5LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHg5OCwgMHgxMSwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDEsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmIsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHhjZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGNkLCAweGIwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NWIsIDB4Y2EsIDB4YjAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHhmZSwgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgxNiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDBkLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAorCTB4MDYsIDB4MDAsIDB4YzIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKKwkweDIwLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZiLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhkMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHhmOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGI3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDMyLAorCTB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUwLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDIsIDB4MDAsIDB4ZjIsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MWYsIDB4NDAsIDB4ZmIsIDB4MzUsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGIsIDB4YzEsIDB4YjAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZjksIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhiNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGZmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBjLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGZhLCAweGIyLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDFiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4ZiwgMHg0ZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwYiwgMHgwMCwgMHgxNCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDI3LCAweDAwLCAweDE4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyMCwgMHgwMCwgMHgxZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGZhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg1YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGY5LCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4M2EsCisJMHgwZiwgMHgwMCwgMHgyYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTIsIDB4ODQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NzMsIDB4M2UsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAorCTB4NzAsIDB4MDAsIDB4M2IsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4YzAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg3MywgMHg3ZSwgMHhmYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwZSwgMHgwMCwgMHg1MywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDNmLCAweGMwLCAweGY5LCAweDlhLAorCTB4MWMsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZiwgMHhjZCwgMHhmOSwgMHhkYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDBlLCAweDAwLCAweDViLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg5YSwKKwkweDI2LCAweDAwLCAweDU3LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHg0MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDI5LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4NmIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDcxLCAweDEyLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDcsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4MjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxZiwgMHgwMCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDkyLAorCTB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MWYsIDB4MDAsIDB4N2EsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4MjksIDB4YmMsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDc2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDgyLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhhLCAweGZhLCAweGJjLAorCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg4MiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGEzLCAweDNlLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NDAsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOCwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4YzAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDlmLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJiLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweGZiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGIxLCAweDEyLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI1LCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgxMiwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4YjgsCisJMHgwMiwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit7CisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjYmVlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKQEAgLTAsMCArMSwzNjI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnLmMKKyAqCisgKiBUaGUgU1hHIGRyaXZlciBmb3IgQWxhY3JpdGVjaCdzIDEwR2JlIHByb2R1Y3RzLgorICoKKyAqIE5PVEU6IFRoaXMgaXMgdGhlIHN0YW5kYXJkLCBub24tYWNjZWxlcmF0ZWQgdmVyc2lvbiBvZiBBbGFjcml0ZWNoJ3MKKyAqICAgICAgIElTLU5JQyBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKworI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRAkJMAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkwCisjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKKyNkZWZpbmUgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTAKKyNkZWZpbmUgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCisjZGVmaW5lIFZQQ0kJCQkJMAorI2RlZmluZSBEQkcJCQkJMQorI2RlZmluZSBBVEtfREVCVUcJCQkxCisKKyNpbmNsdWRlICJzeGdfb3MuaCIKKyNpbmNsdWRlICJzeGdody5oIgorI2luY2x1ZGUgInN4Z2hpZi5oIgorI2luY2x1ZGUgInN4Zy5oIgorI2luY2x1ZGUgInN4Z2RiZy5oIgorCisjaW5jbHVkZSAic3hncGh5Y29kZS5oIgorI2luY2x1ZGUgInNhaGFyYWRiZ2Rvd25sb2FkLmgiCisKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIFNpemUsCisJCQkJICAgICAgU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpOworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgKlJjdkJsb2NrLAorCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgdTMyIExlbmd0aCk7CitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICAgIFBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsLAorCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCQkgICAgIHUzMiBMZW5ndGgpOworCitzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKKworc3RhdGljIGludCBzeGdfZW50cnlfb3BlbihwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19pb2N0bChwX25ldF9kZXZpY2UgZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIHN4Z19kdW1iX3NnbChQU0NBVFRFUl9HQVRIRVJfTElTVCBwU2dsLCBQU1hHX1NDQVRURVJfR0FUSEVSIFN4Z1NnbCk7CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCk7CitzdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBSc3NJZCk7CitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIFBTWEdfRVZFTlQgRXZlbnQpOworc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cyk7CitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgcF9ldGhlcl9oZWFkZXIgRXRoZXJIZHIsIHVzaG9ydCBsZW5ndGgpOworCisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHBfbmV0X2RldmljZSBkZXYpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpOworCitzdGF0aWMgdm9pZCBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworCitzdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbWFzayhwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKKworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpOworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcGh5X2luaXQocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBTWEdfTElOS19TVEFURSBzeGdfZ2V0X2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOworc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKTsKK3N0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSk7CitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3QocF9uZXRfZGV2aWNlIGRldik7CisKKyNkZWZpbmUgWFhYVE9ETyAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3hnX2ZpcnN0X2luaXQgPSAxOworc3RhdGljIGNoYXIgKnN4Z19iYW5uZXIgPQorICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIDEwR2JlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCitzdGF0aWMgaW50IHN4Z19kZWJ1ZyA9IDE7CitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgcF9uZXRfZGV2aWNlIGhlYWRfbmV0ZGV2aWNlID0gTlVMTDsKKworc3RhdGljIHN4Z2Jhc2VfZHJpdmVyX3Qgc3hnX2dsb2JhbCA9IHsKKwkuZHluYW1pY19pbnRhZ2cgPSAxLAorfTsKK3N0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOworc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZyA9IDA7CisKKyNkZWZpbmUgRFJWX05BTUUJInN4ZyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC4xIgorI2RlZmluZSBEUlZfQVVUSE9SCSJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIERyaXZlciIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZHluYW1pY19pbnRhZ2csIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaW50YWdnLCAiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gU2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGludGFnZ19kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50YWdnX2RlbGF5LCAidVNlYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gRGVsYXkiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN4Z19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX0RFVklDRShTWEdfVkVORE9SX0lELCBTWEdfREVWSUNFX0lEKX0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN4Z19wY2lfdGJsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKK3sKKwl3cml0ZWwodmFsdWUsIHJlZyk7CisJaWYgKGZsdXNoKQorCQltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzY0X3dyaXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCQkJCSAgIHU2NCB2YWx1ZSwgdTMyIGNwdSkKK3sKKwl1MzIgdmFsdWVfaGlnaCA9ICh1MzIpICh2YWx1ZSA+PiAzMik7CisJdTMyIHZhbHVlX2xvdyA9ICh1MzIpICh2YWx1ZSAmIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKKwl3cml0ZWwodmFsdWVfaGlnaCwgKHZvaWQgX19pb21lbSAqKSgmYWRhcHRlci0+VWNvZGVSZWdzW2NwdV0uVXBwZXIpKTsKKwl3cml0ZWwodmFsdWVfbG93LCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPkJpdDY0UmVnTG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeGdfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlpZiAoc3hnX2ZpcnN0X2luaXQpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIHN4Z19maXJzdF9pbml0IHNldCBqaWZmaWVzWyVseF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisJCXN4Z19maXJzdF9pbml0ID0gMDsKKwkJc3Bpbl9sb2NrX2luaXQoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2spOworCX0KK30KKworc3RhdGljIHZvaWQgc3hnX2RiZ19tYWNhZGRycyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCURCR19FUlJPUigiICAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwlEQkdfRVJST1IoIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5tYWNhZGRyWzFdLCBhZGFwdGVyLT5tYWNhZGRyWzJdLAorCQkgIGFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+bWFjYWRkcls1XSk7CisJcmV0dXJuOworfQorCisvLyBTWEcgR2xvYmFscworc3RhdGljIFNYR19EUklWRVIgU3hnRHJpdmVyOworCisjaWZkZWYgIEFUS0RCRworc3RhdGljIHN4Z190cmFjZV9idWZmZXJfdCBMU3hnVHJhY2VCdWZmZXI7CisjZW5kaWYgLyogQVRLREJHICovCitzdGF0aWMgc3hnX3RyYWNlX2J1ZmZlcl90ICpTeGdUcmFjZUJ1ZmZlciA9IE5VTEw7CisKKy8qCisgKiBzeGdfZG93bmxvYWRfbWljcm9jb2RlCisgKgorICogRG93bmxvYWQgTWljcm9jb2RlIHRvIFNhaGFyYSBhZGFwdGVyCisgKgorICogQXJndW1lbnRzIC0KKyAqCQlhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQlVY29kZVNlbAktIG1pY3JvY29kZSBmaWxlIHNlbGVjdGlvbgorICoKKyAqIFJldHVybgorICoJaW50CisgKi8KK3N0YXRpYyBib29sIHN4Z19kb3dubG9hZF9taWNyb2NvZGUocF9hZGFwdGVyX3QgYWRhcHRlciwgU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBTZWN0aW9uOworCXUzMiBUaGlzU2VjdGlvblNpemU7CisJdTMyICpJbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIEJhc2VBZGRyZXNzLCBBZGRyZXNzT2Zmc2V0LCBBZGRyZXNzOworLy8gICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZTsKKwl1MzIgVmFsdWVSZWFkOworCXUzMiBpOworCXUzMiBudW1TZWN0aW9ucyA9IDA7CisJdTMyIHNlY3Rpb25TaXplWzE2XTsKKwl1MzIgc2VjdGlvblN0YXJ0WzE2XTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRubGRVY29kIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgkvLyBTYWhhcmEgb3BlcmF0aW9uYWwgdWNvZGUKKwkJbnVtU2VjdGlvbnMgPSBTTnVtU2VjdGlvbnM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1TZWN0aW9uczsgaSsrKSB7CisJCQlzZWN0aW9uU2l6ZVtpXSA9IFNTZWN0aW9uU2l6ZVtpXTsKKwkJCXNlY3Rpb25TdGFydFtpXSA9IFNTZWN0aW9uU3RhcnRbaV07CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBXb2FoLCBiaWcgZXJyb3Igd2l0aCB0aGUgbWljcm9jb2RlIVxuIik7CisJCWJyZWFrOworCX0KKworCURCR19FUlJPUigic3hnOiBSRVNFVCBUSEUgQ0FSRFxuIik7CisJLy8gRmlyc3QsIHJlc2V0IHRoZSBjYXJkCisJV1JJVEVfUkVHKEh3UmVncy0+UmVzZXQsIDB4REVBRCwgRkxVU0gpOworCisJLy8gRG93bmxvYWQgZWFjaCBzZWN0aW9uIG9mIHRoZSBtaWNyb2NvZGUgYXMgc3BlY2lmaWVkIGluCisJLy8gaXRzIGRvd25sb2FkIGZpbGUuICBUaGUgKmRvd25sb2FkLmMgZmlsZSBpcyBnZW5lcmF0ZWQgdXNpbmcKKwkvLyB0aGUgc2FoYXJhb2JqdG9jIGZhY2lsaXR5IHdoaWNoIGNvbnZlcnRzIHRoZSBtZXRhc3RlcCAub2JqCisJLy8gZmlsZSB0byBhIC5jIGZpbGUgd2hpY2ggY29udGFpbnMgYSB0d28gZGltZW50aW9uYWwgYXJyYXkuCisJZm9yIChTZWN0aW9uID0gMDsgU2VjdGlvbiA8IG51bVNlY3Rpb25zOyBTZWN0aW9uKyspIHsKKwkJREJHX0VSUk9SKCJzeGc6IFNFQ1RJT04gIyAlZFxuIiwgU2VjdGlvbik7CisJCXN3aXRjaCAoVWNvZGVTZWwpIHsKKwkJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgorCQkJSW5zdHJ1Y3Rpb24gPSAodTMyICopICYgU2FoYXJhVUNvZGVbU2VjdGlvbl1bMF07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJCWJyZWFrOworCQl9CisJCUJhc2VBZGRyZXNzID0gc2VjdGlvblN0YXJ0W1NlY3Rpb25dOworCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwkvLyBTaXplIGluIGluc3RydWN0aW9ucworCQlmb3IgKEFkZHJlc3NPZmZzZXQgPSAwOyBBZGRyZXNzT2Zmc2V0IDwgVGhpc1NlY3Rpb25TaXplOworCQkgICAgIEFkZHJlc3NPZmZzZXQrKykgeworCQkJQWRkcmVzcyA9IEJhc2VBZGRyZXNzICsgQWRkcmVzc09mZnNldDsKKwkJCUFTU0VSVCgoQWRkcmVzcyAmIH5NSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSAwKTsKKwkJCS8vIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgMzEgLSAwCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csICpJbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJLy8gV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA2My0zMgorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCAqKEluc3RydWN0aW9uICsgMSksCisJCQkJICBGTFVTSCk7CisJCQkvLyBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDk1LTY0CisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFIaWdoLCAqKEluc3RydWN0aW9uICsgMiksCisJCQkJICBGTFVTSCk7CisJCQkvLyBXcml0ZSBpbnN0cnVjdGlvbiBhZGRyZXNzIHdpdGggdGhlIFdSSVRFIGJpdCBzZXQKKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKKwkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUpLCBGTFVTSCk7CisJCQkvLyBTYWhhcmEgYnVnIGluIHRoZSB1Y29kZSBkb3dubG9hZCBsb2dpYyAtIHRoZSB3cml0ZSB0byBEYXRhTG93CisJCQkvLyBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgZ2V0IGNvcnJ1cHRlZC4gIFRvIGF2b2lkIHRoaXMsCisJCQkvLyB3cml0ZSB0byBEYXRhTG93IGFnYWluIGZvciB0aGlzIGluc3RydWN0aW9uICh3aGljaCBtYXkgZ2V0CisJCQkvLyBjb3JydXB0ZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciksIHRoZW4gaW5jcmVtZW50IHRoZSBhZGRyZXNzCisJCQkvLyBhbmQgd3JpdGUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIERhdGFMb3cuICBUaGF0CisJCQkvLyB3cml0ZSBzaG91bGQgc3VjY2VlZC4KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBUUlVFKTsKKwkJCS8vIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24KKwkJCUluc3RydWN0aW9uICs9IDM7CisJCX0KKwl9CisJLy8gTm93IHJlcGVhdCB0aGUgZW50aXJlIG9wZXJhdGlvbiByZWFkaW5nIHRoZSBpbnN0cnVjdGlvbiBiYWNrIGFuZAorCS8vIGNoZWNraW5nIGZvciBwYXJpdHkgZXJyb3JzCisJZm9yIChTZWN0aW9uID0gMDsgU2VjdGlvbiA8IG51bVNlY3Rpb25zOyBTZWN0aW9uKyspIHsKKwkJREJHX0VSUk9SKCJzeGc6IGNoZWNrIFNFQ1RJT04gIyAlZFxuIiwgU2VjdGlvbik7CisJCXN3aXRjaCAoVWNvZGVTZWwpIHsKKwkJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgorCQkJSW5zdHJ1Y3Rpb24gPSAodTMyICopICYgU2FoYXJhVUNvZGVbU2VjdGlvbl1bMF07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJCWJyZWFrOworCQl9CisJCUJhc2VBZGRyZXNzID0gc2VjdGlvblN0YXJ0W1NlY3Rpb25dOworCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwkvLyBTaXplIGluIGluc3RydWN0aW9ucworCQlmb3IgKEFkZHJlc3NPZmZzZXQgPSAwOyBBZGRyZXNzT2Zmc2V0IDwgVGhpc1NlY3Rpb25TaXplOworCQkgICAgIEFkZHJlc3NPZmZzZXQrKykgeworCQkJQWRkcmVzcyA9IEJhc2VBZGRyZXNzICsgQWRkcmVzc09mZnNldDsKKwkJCS8vIFdyaXRlIHRoZSBhZGRyZXNzIHdpdGggdGhlIFJFQUQgYml0IHNldAorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVBZGRyLAorCQkJCSAgKEFkZHJlc3MgfCBNSUNST0NPREVfQUREUkVTU19SRUFEKSwgRkxVU0gpOworCQkJLy8gUmVhZCBpdCBiYWNrIGFuZCBjaGVjayBwYXJpdHkgYml0LgorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZUFkZHIsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICYgTUlDUk9DT0RFX0FERFJFU1NfUEFSSVRZKSB7CisJCQkJREJHX0VSUk9SKCJzeGc6ICVzIFBBUklUWSBFUlJPUlxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCisJCQkJcmV0dXJuIChGQUxTRSk7CS8vIFBhcml0eSBlcnJvcgorCQkJfQorCQkJQVNTRVJUKChWYWx1ZVJlYWQgJiBNSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSBBZGRyZXNzKTsKKwkJCS8vIFJlYWQgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kIGNvbXBhcmUKKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqSW5zdHJ1Y3Rpb24pIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBMT1dcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLy8gTWlzY29tcGFyZQorCQkJfQorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICE9ICooSW5zdHJ1Y3Rpb24gKyAxKSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIE1JRERMRVxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybiAoRkFMU0UpOwkvLyBNaXNjb21wYXJlCisJCQl9CisJCQlSRUFEX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICE9ICooSW5zdHJ1Y3Rpb24gKyAyKSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIEhJR0hcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLy8gTWlzY29tcGFyZQorCQkJfQorCQkJLy8gQWR2YW5jZSAzIHUzMlMgdG8gc3RhcnQgb2YgbmV4dCBpbnN0cnVjdGlvbgorCQkJSW5zdHJ1Y3Rpb24gKz0gMzsKKwkJfQorCX0KKworCS8vIEV2ZXJ5dGhpbmcgT0ssIEdvLgorCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwgTUlDUk9DT0RFX0FERFJFU1NfR08sIEZMVVNIKTsKKworCS8vIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZQorCS8vIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworCQl1ZGVsYXkoNTApOworCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ2FyZFVwLCBWYWx1ZVJlYWQpOworCQlpZiAoVmFsdWVSZWFkID09IDB4Q0FGRSkgeworCQkJREJHX0VSUk9SKCJzeGc6ICVzIEJPTyBZQSAweENBRkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSAxMDAwMCkgeworCQlEQkdfRVJST1IoInN4ZzogJXMgVElNRU9VVFxuIiwgX19GVU5DVElPTl9fKTsKKworCQlyZXR1cm4gKEZBTFNFKTsJLy8gVGltZW91dAorCX0KKwkvLyBOb3cgd3JpdGUgdGhlIExvYWRTeW5jIHJlZ2lzdGVyLiAgVGhpcyBpcyB1c2VkIHRvCisJLy8gc3luY2hyb25pemUgd2l0aCB0aGUgY2FyZCBzbyBpdCBjYW4gc2NyaWJibGUgb24gdGhlIG1lbW9yeQorCS8vIHRoYXQgY29udGFpbmVkIDB4Q0FGRSBmcm9tIHRoZSAiQ2FyZFVwIiBzdGVwIGFib3ZlCisJaWYgKFVjb2RlU2VsID09IFNYR19VQ09ERV9TQUhBUkEpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Mb2FkU3luYywgMCwgRkxVU0gpOworCX0KKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEbmxkVWNkIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoVFJVRSk7Cit9CisKKy8qCisgKiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBsb2NrcworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBpOworCXUzMiBSc3NJZHMsIElzckNvdW50OworLy8gICAgICBQU1hHX1hNVF9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbXRSaW5nOworLy8gICAgICBQU1hHX1JDVl9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZSaW5nOworCisJREJHX0VSUk9SKCIlcyBFTlRFUlxuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jUmVzIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIFdpbmRvd3MgdGVsbHMgdXMgaG93IG1hbnkgQ1BVcyBpdCBwbGFucyB0byB1c2UgZm9yCisJLy8gUlNTCisJUnNzSWRzID0gU1hHX1JTU19DUFVfQ09VTlQoYWRhcHRlcik7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5Nc2lFbmFibGVkID8gUnNzSWRzIDogMTsKKworCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIHNwaW5sb2Nrc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEFsbG9jYXRlIHNwaW5sb2NrcyBhbmQgaW5pdGlhbGl6ZSBsaXN0aGVhZHMgZmlyc3QuCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+U2dsUUxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkJpdDY0UmVnTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKworCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIGxpc3RzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKworCS8vIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkKKwkvLyB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzCisJLy8gYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuCisJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IFRSVUU7CisJLy8gTWFpbiBhbGxvY2F0aW9uIGxvb3AuICBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieQorCS8vIHRoZSBtaWNyb2NvZGUgYW5kIGJhY2sgb2ZmIGlmIG1lbW9yeSBhbGxvY2F0aW9uCisJLy8gZmFpbHMuICBJZiB3ZSBoaXQgYSBtaW5pbXVtLCBmYWlsLgorCisJZm9yICg7OykgeworCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFhtdFJpbmdzIHNpemVbJWx4XVxuIiwgX19GVU5DVElPTl9fLAorCQkJICAoc2l6ZW9mKFNYR19YTVRfUklORykgKiAxKSk7CisKKwkJLy8gU3RhcnQgd2l0aCBiaWcgaXRlbXMgZmlyc3QgLSByZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncy4gIEF0IHRoZSBtb21lbnQKKwkJLy8gSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQgYWRqdXN0IHRoZSBudW1iZXIgb2YKKwkJLy8gVENCcyBpZiB3ZSBmYWlsLiAgTGF0ZXIgd2UgbWlnaHQgY29uc2lkZXIgcmVkdWNpbmcgdGhlIHJpbmcgc2l6ZSBhcyB3ZWxsLi4KKwkJYWRhcHRlci0+WG10UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkJIHNpemVvZihTWEdfWE1UX1JJTkcpICoKKwkJCQkJCQkgMSwKKwkJCQkJCQkgJmFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCURCR19FUlJPUigiJXMgWG10UmluZ3NbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPlhtdFJpbmdzKTsKKworCQlpZiAoIWFkYXB0ZXItPlhtdFJpbmdzKSB7CisJCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJCX0KKwkJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdzLCAwLCBzaXplb2YoU1hHX1hNVF9SSU5HKSAqIDEpOworCisJCURCR19FUlJPUigiJXMgQWxsb2NhdGUgUmN2UmluZ3Mgc2l6ZVslbHhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkgIChzaXplb2YoU1hHX1JDVl9SSU5HKSAqIDEpKTsKKwkJYWRhcHRlci0+UmN2UmluZ3MgPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgc2l6ZW9mKFNYR19SQ1ZfUklORykgKiAxLAorCQkJCQkgJmFkYXB0ZXItPlBSY3ZSaW5ncyk7CisJCURCR19FUlJPUigiJXMgUmN2UmluZ3NbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPlJjdlJpbmdzKTsKKwkJaWYgKCFhZGFwdGVyLT5SY3ZSaW5ncykgeworCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCQl9CisJCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKFNYR19SQ1ZfUklORykgKiAxKTsKKwkJYnJlYWs7CisKKwkgICAgICBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOgorCQkvLyBhbiBhbGxvY2F0aW9uIGZhaWxlZC4gIEZyZWUgYW55IHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbnMuCisJCWlmIChhZGFwdGVyLT5YbXRSaW5ncykgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICBzaXplb2YoU1hHX1hNVF9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBhZGFwdGVyLT5YbXRSaW5ncywKKwkJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCQlhZGFwdGVyLT5YbXRSaW5ncyA9IE5VTEw7CisJCX0KKwkJaWYgKGFkYXB0ZXItPlJjdlJpbmdzKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgIHNpemVvZihTWEdfUkNWX1JJTkcpICogNDA5NiwKKwkJCQkJICAgIGFkYXB0ZXItPlJjdlJpbmdzLAorCQkJCQkgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKKwkJCWFkYXB0ZXItPlJjdlJpbmdzID0gTlVMTDsKKwkJfQorCQkvLyBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLi4uLgorCX0KKworCURCR19FUlJPUigiJXMgSW5pdGlhbGl6ZSBSQ1YgWkVSTyBhbmQgWE1UIFpFUk8gcmluZ3NcbiIsIF9fRlVOQ1RJT05fXyk7CisJLy8gSW5pdGlhbGl6ZSByY3YgemVybyBhbmQgeG10IHplcm8gcmluZ3MKKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywgU1hHX1JDVl9SSU5HX1NJWkUpOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CisKKwkvLyBTYW5pdHkgY2hlY2sgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZSBmb3JtYXQKKwlBU1NFUlQoKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKKwlBU1NFUlQoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgPT0KKwkgICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUpOworCisJLy8gQWxsb2NhdGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXZSBhbGxvY2F0ZSBhIGJsb2NrIG9mIGJ1ZmZlcnMgYW5kCisJLy8gYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sKKwlmb3IgKGkgPSAwOyBpIDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUzsKKwkgICAgIGkgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHsKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgorCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7CisJfQorCS8vIE5CTCByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGluIHRoZSAnQWxsb2NhdGVDb21wbGV0ZScgcm91dGluZSwgd2hpY2gKKwkvLyBkb2Vzbid0IHJldHVybiBzdGF0dXMuICBNYWtlIHN1cmUgd2UgZ290IHRoZSBudW1iZXIgb2YgYnVmZmVycyB3ZSByZXF1ZXN0ZWQKKwlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUykgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKKwkJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCisJCQkgIDApOworCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOworCX0KKworCURCR19FUlJPUigiJXMgQWxsb2NhdGUgRXZlbnRSaW5ncyBzaXplWyVseF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICAoc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcykpOworCisJLy8gQWxsb2NhdGUgZXZlbnQgcXVldWVzLgorCWFkYXB0ZXItPkV2ZW50UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2YoU1hHX0VWRU5UX1JJTkcpICoKKwkJCQkJCSAgIFJzc0lkcywKKwkJCQkJCSAgICZhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisKKwlpZiAoIWFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKKwkJLy8gQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZSBhbGxvY2F0aW9ucworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y4IiwKKwkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKwkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKKwkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCX0KKwltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcyk7CisKKwlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIElTUiBzaXplWyV4XVxuIiwgX19GVU5DVElPTl9fLCBJc3JDb3VudCk7CisJLy8gQWxsb2NhdGUgSVNSCisJYWRhcHRlci0+SXNyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgSXNyQ291bnQsICZhZGFwdGVyLT5QSXNyKTsKKwlpZiAoIWFkYXB0ZXItPklzcikgeworCQkvLyBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zCisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBUmVzRjkiLAorCQkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOworCQlzdGF0dXMgPSBTVEFUVVNfUkVTT1VSQ0VTOworCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJfQorCW1lbXNldChhZGFwdGVyLT5Jc3IsIDAsIHNpemVvZih1MzIpICogSXNyQ291bnQpOworCisJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBzaGFyZWQgWE1UIHJpbmcgemVybyBpbmRleCBsb2NhdGlvbiBzaXplWyVseF1cbiIsCisJCSAgX19GVU5DVElPTl9fLCBzaXplb2YodTMyKSk7CisKKwkvLyBBbGxvY2F0ZSBzaGFyZWQgWE1UIHJpbmcgemVybyBpbmRleCBsb2NhdGlvbgorCWFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXggPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkJIHNpemVvZih1MzIpLAorCQkJCQkJCSAmYWRhcHRlci0+CisJCQkJCQkJIFBYbXRSaW5nWmVyb0luZGV4KTsKKwlpZiAoIWFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGMTAiLAorCQkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOworCQlzdGF0dXMgPSBTVEFUVVNfUkVTT1VSQ0VTOworCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJfQorCW1lbXNldChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LCAwLCBzaXplb2YodTMyKSk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxjUmVzUyIsCisJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKworCURCR19FUlJPUigiJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19jb25maWdfcGNpIC0KKyAqCisgKiBTZXQgdXAgUENJIENvbmZpZ3VyYXRpb24gc3BhY2UKKyAqCisgKiBBcmd1bWVudHMgLQorICoJCXBjaWRldgkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqLworc3RhdGljIHZvaWQgc3hnX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwl1MTYgcGNpX2NvbW1hbmQ7CisJdTE2IG5ld19jb21tYW5kOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19GVU5DVElPTl9fLCBwY2lfY29tbWFuZCk7CisJLy8gU2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IChQQ0lfQ09NTUFORF9NRU1PUlkgfAkvLyBNZW1vcnkgU3BhY2UgRW5hYmxlCisJCQkJICAgICBQQ0lfQ09NTUFORF9NQVNURVIgfAkvLyBCdXMgbWFzdGVyIGVuYWJsZQorCQkJCSAgICAgUENJX0NPTU1BTkRfSU5WQUxJREFURSB8CS8vIE1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZQorCQkJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwJLy8gUGFyaXR5IGVycm9yIHJlc3BvbnNlCisJCQkJICAgICBQQ0lfQ09NTUFORF9TRVJSIHwJLy8gU3lzdGVtIEVSUgorCQkJCSAgICAgUENJX0NPTU1BTkRfRkFTVF9CQUNLKTsJLy8gRmFzdCBiYWNrLXRvLWJhY2sKKwlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKKwkJREJHX0VSUk9SKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCBuZXdfY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnkpCit7CisJc3RhdGljIGludCBkaWRfdmVyc2lvbiA9IDA7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXBfYWRhcHRlcl90IGFkYXB0ZXI7CisJdm9pZCBfX2lvbWVtICptZW1tYXBwZWRfaW9hZGRyOworCXUzMiBzdGF0dXMgPSAwOworCXVsb25nIG1taW9fc3RhcnQgPSAwOworCXVsb25nIG1taW9fbGVuID0gMDsKKworCURCR19FUlJPUigic3hnOiAlcyAyLjYgVkVSU0lPTiBFTlRFUiBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCS8vIEluaXRpYWxpemUgdHJhY2UgYnVmZmVyCisjaWZkZWYgQVRLREJHCisJU3hnVHJhY2VCdWZmZXIgPSAmTFN4Z1RyYWNlQnVmZmVyOworCVNYR19UUkFDRV9JTklUKFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSk7CisjZW5kaWYKKworCXN4Z19nbG9iYWwuZHluYW1pY19pbnRhZ2cgPSBkeW5hbWljX2ludGFnZzsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7CisKKwlEQkdfRVJST1IoIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CisJaWYgKGVycikgeworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChzeGdfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgc3hnX2Jhbm5lcik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBEUlZfVkVSU0lPTik7CisJfQorCisJaWYgKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKKwkJREJHX0VSUk9SKCJwY2lfc2V0X2RtYV9tYXNrKERNQV82NEJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSykpKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCisJCQkgICAgIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfMzJCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfQorCisJREJHX0VSUk9SKCJDYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbnNcbiIpOworCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lkZXYsIERSVl9OQU1FKTsKKwlpZiAoZXJyKSB7CisJCURCR19FUlJPUigicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlEQkdfRVJST1IoImNhbGwgcGNpX3NldF9tYXN0ZXJcbiIpOworCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwlEQkdfRVJST1IoImNhbGwgYWxsb2NfZXRoZXJkZXZcbiIpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihhZGFwdGVyX3QpKTsKKwlpZiAoIW5ldGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdF9zeGdfcHJvYmU7CisJfQorCURCR19FUlJPUigiYWxsb2NfZXRoZXJkZXYgZm9yIHNsaWMgbmV0ZGV2WyVwXVxuIiwgbmV0ZGV2KTsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19FUlJPUigic3hnOiBjYWxsIGlvcmVtYXAobW1pb19zdGFydFslbHhdLCBtbWlvX2xlblslbHhdKVxuIiwKKwkJICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJREJHX0VSUk9SKCJzeGc6ICVzIE1FTU1BUFBFRF9JT0FERFIgWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfRVJST1IKKwkgICAgKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgc3RhcnRbJWx4XSBsZW5bJWx4XSwgSVJRICVkLlxuIiwKKwkgICAgIF9fZnVuY19fLCBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LCBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOworCisJYWRhcHRlci0+SHdSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOworCWFkYXB0ZXItPmJhc2VfYWRkciA9IG1lbW1hcHBlZF9pb2FkZHI7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMik7CisKKwlEQkdfRVJST1IoInN4ZzogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCURCR19FUlJPUigic3hnOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCAiCisJCSAgInN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsIF9fZnVuY19fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisKKwlhZGFwdGVyLT5VY29kZVJlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CisKKwlhZGFwdGVyLT5TdGF0ZSA9IFNYR19TVEFURV9JTklUSUFMSVpJTkc7CisJLy8gTWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBhZGFwdGVycyBhbmNob3JlZCBieQorCS8vIHRoZSBnbG9iYWwgU3hnRHJpdmVyIHN0cnVjdHVyZS4KKwlhZGFwdGVyLT5OZXh0ID0gU3hnRHJpdmVyLkFkYXB0ZXJzOworCVN4Z0RyaXZlci5BZGFwdGVycyA9IGFkYXB0ZXI7CisJYWRhcHRlci0+QWRhcHRlcklEID0gKytTeGdEcml2ZXIuQWRhcHRlcklEOworCisJLy8gSW5pdGlhbGl6ZSBDUkMgdGFibGUgdXNlZCB0byBkZXRlcm1pbmUgbXVsdGljYXN0IGhhc2gKKwlzeGdfbWNhc3RfaW5pdF9jcmMzMigpOworCisJYWRhcHRlci0+SnVtYm9FbmFibGVkID0gRkFMU0U7CisJYWRhcHRlci0+UnNzRW5hYmxlZCA9IEZBTFNFOworCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpIHsKKwkJYWRhcHRlci0+RnJhbWVTaXplID0gSlVNQk9NQVhGUkFNRTsKKwkJYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEVUSEVSTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFOworCX0KKworLy8gICAgc3RhdHVzID0gU1hHX1JFQURfRUVQUk9NKGFkYXB0ZXIpOworLy8gICAgaWYgKCFzdGF0dXMpIHsKKy8vICAgICAgICBnb3RvIHN4Z19pbml0X2JhZDsKKy8vICAgIH0KKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfY29uZmlnX3BjaVxuIiwgX19GVU5DVElPTl9fKTsKKwlzeGdfY29uZmlnX3BjaShwY2lkZXYpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19jb25maWdfcGNpXG4iLCBfX0ZVTkNUSU9OX18pOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pbml0X2RyaXZlclxuIiwgX19GVU5DVElPTl9fKTsKKwlzeGdfaW5pdF9kcml2ZXIoKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfaW5pdF9kcml2ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CisJYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7CisJYWRhcHRlci0+c3Vic3lzaWQgPSBwY2lfdGJsX2VudHJ5LT5zdWJkZXZpY2U7CisJYWRhcHRlci0+YnVzbnVtYmVyID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlhZGFwdGVyLT5zbG90bnVtYmVyID0gKChwY2lkZXYtPmRldmZuID4+IDMpICYgMHgxRik7CisJYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIgPSAocGNpZGV2LT5kZXZmbiAmIDB4Nyk7CisJYWRhcHRlci0+bWVtb3J5bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCWFkYXB0ZXItPmlycSA9IHBjaWRldi0+aXJxOworCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7CisJaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CisvLyAgICAgIGFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OworCWFkYXB0ZXItPnBvcnQgPSAwOwkvL2FkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOworCWFkYXB0ZXItPmNhcmRpbmRleCA9IGFkYXB0ZXItPnBvcnQ7CisKKwkvLyBBbGxvY2F0ZSBtZW1vcnkgYW5kIG90aGVyIHJlc291cmNlcworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2FsbG9jYXRlX3Jlc291cmNlcyBzdGF0dXMgJXhcbiIsCisJCSAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfZG93bmxvYWRfbWljcm9jb2RlXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChzeGdfZG93bmxvYWRfbWljcm9jb2RlKGFkYXB0ZXIsIFNYR19VQ09ERV9TQUhBUkEpKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQlzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRkFJTDsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCQlEQkdfRVJST1IoInN4Z19kb3dubG9hZF9taWNyb2NvZGUgRkFJTEVEIHN0YXR1c1sleF1cbiIsIHN0YXR1cyk7CisJfQorCisJbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5iYXNlX2FkZHI7CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CisJbmV0ZGV2LT5vcGVuID0gc3hnX2VudHJ5X29wZW47CisJbmV0ZGV2LT5zdG9wID0gc3hnX2VudHJ5X2hhbHQ7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzeGdfc2VuZF9wYWNrZXRzOworCW5ldGRldi0+ZG9faW9jdGwgPSBzeGdfaW9jdGw7CisjaWYgWFhYVE9ETworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gc3hnX21hY19zZXRfYWRkcmVzczsKKyNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBzeGdfZ2V0X3N0YXRzOworI2VuZGlmCisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzeGdfbWNhc3Rfc2V0X2xpc3Q7CisjZW5kaWYKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworLy8gIHN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaWRldikpOworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7CisJCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLiAlc1xuIiwKKwkJCSAgbmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19FUlJPUgorCSAgICAoInN4ZzogJXMgYWRkciAweCVseCwgaXJxICVkLCBNQUMgYWRkciAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2LT5iYXNlX2FkZHIsIHBjaWRldi0+aXJxLCBuZXRkZXYtPmRldl9hZGRyWzBdLAorCSAgICAgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisvL3N4Z19pbml0X2JhZDoKKwlBU1NFUlQoc3RhdHVzID09IEZBTFNFKTsKKy8vICAgICAgc3hnX2ZyZWVfYWRhcHRlcihhZGFwdGVyKTsKKworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkgIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gc3RhdHVzOworCisgICAgICBlcnJfb3V0X3VubWFwOgorCWlvdW5tYXAoKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyKTsKKworICAgICAgZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKyAgICAgIGVycl9vdXRfZXhpdF9zeGdfcHJvYmU6CisKKwlEQkdfRVJST1IoIiVzIEVYSVQgamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMSU5FIEJBU0UgSW50ZXJydXB0IHJvdXRpbmVzLi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogc3hnX2Rpc2FibGVfaW50ZXJydXB0CisgKgorICogRGlzYWJsZUludGVycnVwdCBIYW5kbGVyCisgKgorICogQXJndW1lbnRzOgorICoKKyAqICAgYWRhcHRlcjoJT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19kaXNhYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRpc0ludHIiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkLCAwLCAwKTsKKwkvLyBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMKKwlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7CisJQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOworCS8vCisJLy8gVHVybiBvZmYgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIHRoZSBpY3IgcmVnaXN0ZXIuCisJLy8KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX0RJU0FCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEaXNJbnRyIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7Cit9CisKKy8qCisgKgorICogc3hnX2VuYWJsZV9pbnRlcnJ1cHQKKyAqCisgKiBFbmFibGVJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKiAgIGFkYXB0ZXI6CU91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZW5hYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkVuSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOworCS8vIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cworCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7CisJLy8KKwkvLyBUdXJuIG9uIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLgorCS8vCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9FTkFCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhFbkludHIiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19pc3IgLSBQcm9jZXNzIGFuIGxpbmUtYmFzZWQgaW50ZXJydXB0CisgKgorICogQXJndW1lbnRzOgorICogCQlDb250ZXh0CQkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQlRdWV1ZURlZmF1bHQgCS0gT3V0cHV0IHBhcmFtZXRlciB0byBxdWV1ZSB0byBkZWZhdWx0IENQVQorICoJCVRhcmdldENwdXMJCS0gT3V0cHV0IGJpdG1hcCB0byBzY2hlZHVsZSBEUEMncworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlUUlVFIGlmIG91ciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXBfbmV0X2RldmljZSBkZXYgPSAocF9uZXRfZGV2aWNlKSBkZXZfaWQ7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICBDcHVNYXNrID0gMCwgaTsKKworCWFkYXB0ZXItPlN0YXRzLk51bUludHMrKzsKKwlpZiAoYWRhcHRlci0+SXNyWzBdID09IDApIHsKKwkJLy8gVGhlIFNMSUMgZHJpdmVyIHVzZWQgdG8gZXhwZXJpZW5jZSBhIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzCisJCS8vIGR1ZSB0byB0aGUgZGVsYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXNraW5nIG9mIHRoZSBpbnRlcnJ1cHQKKwkJLy8gKHdlJ2QgYm91bmNlIGJhY2sgaW4gaGVyZSkuICBJZiB3ZSBzZWUgdGhhdCBhZ2FpbiB3aXRoIFNhaGFyYSwKKwkJLy8gYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlciB0aGUgV1JJVEVfUkVHIGJlbG93LgorCQlhZGFwdGVyLT5TdGF0cy5GYWxzZUludHMrKzsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwkvLworCS8vIE1vdmUgdGhlIElzciBjb250ZW50cyBhbmQgY2xlYXIgdGhlIHZhbHVlIGluCisJLy8gc2hhcmVkIG1lbW9yeSwgYW5kIG1hc2sgaW50ZXJydXB0cworCS8vCisJYWRhcHRlci0+SXNyQ29weVswXSA9IGFkYXB0ZXItPklzclswXTsKKwlhZGFwdGVyLT5Jc3JbMF0gPSAwOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfTUFTSyksIFRSVUUpOworLy8gICAgICBBU1NFUlQoYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcgPT0gMCk7CisjaWYgWFhYVE9ETwkJCS8vIFJTUyBTdHVmZgorCS8vIElmIFJTUyBpcyBlbmFibGVkIGFuZCB0aGUgSVNSIHNwZWNpZmllcworCS8vIFNYR19JU1JfRVZFTlQsIHRoZW4gc2NoZWR1bGUgRFBDJ3MKKwkvLyBiYXNlZCBvbiBldmVudCBxdWV1ZXMuCisJaWYgKGFkYXB0ZXItPlJzc0VuYWJsZWQgJiYgKGFkYXB0ZXItPklzckNvcHlbMF0gJiBTWEdfSVNSX0VWRU5UKSkgeworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Qcm9jZXNzb3JJbmZvLlJzc0NwdUNvdW50OworCQkgICAgIGkrKykgeworCQkJUFNYR19FVkVOVF9SSU5HIEV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOworCQkJUFNYR19FVkVOVCBFdmVudCA9CisJCQkgICAgJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbaV1dOworCQkJdW5zaWduZWQgY2hhciBDcHUgPQorCQkJICAgIGFkYXB0ZXItPlJzc1N5c3RlbUluZm8tPlJzc0lkVG9DcHVbaV07CisJCQlpZiAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19WQUxJRCkgeworCQkJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nKys7CisJCQkJQ3B1TWFzayB8PSAoMSA8PCBDcHUpOworCQkJfQorCQl9CisJfQorCS8vIE5vdywgZWl0aGVyIHNjaGVkdWxlIHRoZSBDUFVzIHNwZWNpZmllZCBieSB0aGUgQ3B1TWFzaywKKwkvLyBvciBxdWV1ZSBkZWZhdWx0CisJaWYgKENwdU1hc2spIHsKKwkJKlF1ZXVlRGVmYXVsdCA9IEZBTFNFOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nID0gMTsKKwkJKlF1ZXVlRGVmYXVsdCA9IFRSVUU7CisJfQorCSpUYXJnZXRDcHVzID0gQ3B1TWFzazsKKyNlbmRpZgorCS8vCisJLy8gIFRoZXJlIGFyZSBubyBEUENzIGluIExpbnV4LCBzbyBjYWxsIHRoZSBoYW5kbGVyIG5vdworCS8vCisJc3hnX2hhbmRsZV9pbnRlcnJ1cHQoYWRhcHRlcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisvLyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsKKwl1MzIgTmV3SXNyOworCisJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQlEQkdfRVJST1IoIkVudGVyIHN4Z19oYW5kbGVfaW50ZXJydXB0IElTUlsleF1cbiIsCisJCQkgIGFkYXB0ZXItPklzckNvcHlbMF0pOworCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJIbmRsSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SXNyQ29weVswXSwgMCwgMCk7CisJLy8gRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzCisJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOworCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+SXNyQ29weVswXSk7CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJLy8gQWx3YXlzIHByb2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLgorCXN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKGFkYXB0ZXIsCisJCQkJKGFkYXB0ZXItPlJzc0VuYWJsZWQgPyAvKlJzc0lkICovIDAgOiAwKSk7CisKKyNpZiBYWFhUT0RPCQkJLy8gUlNTIHN0dWZmCisJaWYgKC0tYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcpIHsKKwkJLy8gV2UncmUgZG9uZS4KKwkJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEUENzUGVuZCIsCisJCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLy8KKwkvLyBMYXN0IChvciBvbmx5KSBEUEMgcHJvY2Vzc2VzIHRoZSBJU1IgYW5kIGNsZWFycyB0aGUgaW50ZXJydXB0LgorCS8vCisJTmV3SXNyID0gc3hnX3Byb2Nlc3NfaXNyKGFkYXB0ZXIsIDApOworCS8vCisJLy8gUmVlbmFibGUgaW50ZXJydXB0cworCS8vCisJYWRhcHRlci0+SXNyQ29weVswXSA9IDA7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ2xlYXJJc3IiLAorCQkgIGFkYXB0ZXIsIE5ld0lzciwgMCwgMCk7CisKKwlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJFeGl0IHN4Z19oYW5kbGVfaW50ZXJydXB0MiBhZnRlciBlbmFibGluZyBpbnRlcnJ1cHRcbiIpOworCX0KKworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCBOZXdJc3IsIFRSVUUpOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEhuZGxJbnQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19wcm9jZXNzX2lzciAtIFByb2Nlc3MgYW4gaW50ZXJydXB0LiAgQ2FsbGVkIGZyb20gdGhlIGxpbmUtYmFzZWQgYW5kCisgKgkJCW1lc3NhZ2UgYmFzZWQgaW50ZXJydXB0IERQQyByb3V0aW5lcworICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJYWRhcHRlcgkJCS0gT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgkJUXVldWUJCQktIFRoZSBJU1IgdGhhdCBuZWVkcyBwcm9jZXNzaW5nCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUKKyAqLworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCkKK3sKKwl1MzIgSXNyID0gYWRhcHRlci0+SXNyQ29weVtNZXNzYWdlSWRdOworCXUzMiBOZXdJc3IgPSAwOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUHJvY0lzciIsCisJCSAgYWRhcHRlciwgSXNyLCAwLCAwKTsKKworCS8vIEVycm9yCisJaWYgKElzciAmIFNYR19JU1JfRVJSKSB7CisJCWlmIChJc3IgJiBTWEdfSVNSX1BEUUYpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLlBkcUZ1bGwrKzsKKwkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBQRFFGISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJLy8gTm8gaG9zdCBidWZmZXIKKwkJaWYgKElzciAmIFNYR19JU1JfUk1JU1MpIHsKKwkJCS8vIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgU0xJQyBkcml2ZXIgd2hpY2gKKwkJCS8vIGF0dGVtcHRzIHRvIHByb2Nlc3MgbW9yZSByZWNlaXZlIGV2ZW50cyBwZXIgRFBDCisJCQkvLyBpZiB3ZSBzdGFydCB0byBmYWxsIGJlaGluZC4gIFdlJ2xsIHByb2JhYmx5CisJCQkvLyBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUsIGJ1dCBob2xkCisJCQkvLyBvZmYgZm9yIG5vdy4gIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjb2RlIG1vcmUKKwkJCS8vIGNvbXBsaWNhdGVkIHRoYW4gc3RyaWN0bHkgbmVlZGVkLgorCQkJYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIrKzsKKwkJCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKKwkJCQlEQkdfRVJST1IoIiVzOiBTWEdfSVNSX0VSUiAgUk1JU1MhIVxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9CisJCS8vIENhcmQgY3Jhc2gKKwkJaWYgKElzciAmIFNYR19JU1JfREVBRCkgeworCQkJLy8gU2V0IGFzaWRlIHRoZSBjcmFzaCBpbmZvIGFuZCBzZXQgdGhlIGFkYXB0ZXIgc3RhdGUgdG8gUkVTRVQKKwkJCWFkYXB0ZXItPkNyYXNoQ3B1ID0KKwkJCSAgICAodW5zaWduZWQgY2hhcikoKElzciAmIFNYR19JU1JfQ1BVKSA+PgorCQkJCQkgICAgU1hHX0lTUl9DUFVfU0hJRlQpOworCQkJYWRhcHRlci0+Q3Jhc2hMb2NhdGlvbiA9ICh1c2hvcnQpIChJc3IgJiBTWEdfSVNSX0NSQVNIKTsKKwkJCWFkYXB0ZXItPkRlYWQgPSBUUlVFOworCQkJREJHX0VSUk9SKCIlczogSVNSX0RFQUQgJXgsIENQVTogJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkgIGFkYXB0ZXItPkNyYXNoTG9jYXRpb24sIGFkYXB0ZXItPkNyYXNoQ3B1KTsKKwkJfQorCQkvLyBFdmVudCByaW5nIGZ1bGwKKwkJaWYgKElzciAmIFNYR19JU1JfRVJGVUxMKSB7CisJCQkvLyBTYW1lIGlzc3VlIGFzIFJNSVNTLCByZWFsbHkuICBUaGlzIG1lYW5zIHRoZQorCQkJLy8gaG9zdCBpcyBmYWxsaW5nIGJlaGluZCB0aGUgY2FyZC4gIE5lZWQgdG8gaW5jcmVhc2UKKwkJCS8vIGV2ZW50IHJpbmcgc2l6ZSwgcHJvY2VzcyBtb3JlIGV2ZW50cyBwZXIgaW50ZXJydXB0LAorCQkJLy8gYW5kL29yIHJlZHVjZS9yZW1vdmUgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uLgorCQkJYWRhcHRlci0+U3RhdHMuRXZlbnRSaW5nRnVsbCsrOworCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIEVWRU5UIFJJTkcgRlVMTCEhXG4iLAorCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJfQorCQkvLyBUcmFuc21pdCBkcm9wIC0gbm8gRFJBTSBidWZmZXJzIG9yIFhNVCBlcnJvcgorCQlpZiAoSXNyICYgU1hHX0lTUl9YRFJPUCkgeworCQkJYWRhcHRlci0+U3RhdHMuWG10RHJvcHMrKzsKKwkJCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFhEUk9QISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CisJLy8gU2xvd3BhdGggc2VuZCBjb21wbGV0aW9ucworCWlmIChJc3IgJiBTWEdfSVNSX1NQU0VORCkgeworCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOworCX0KKwkvLyBEdW1wCisJaWYgKElzciAmIFNYR19JU1JfVVBDKSB7CisJCUFTU0VSVChhZGFwdGVyLT5EdW1wQ21kUnVubmluZyk7CS8vIE1heWJlIGNoYW5nZSB3aGVuIGRlYnVnIGlzIGFkZGVkLi4KKwkJYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcgPSBGQUxTRTsKKwl9CisJLy8gTGluayBldmVudAorCWlmIChJc3IgJiBTWEdfSVNSX0xJTkspIHsKKwkJc3hnX2xpbmtfZXZlbnQoYWRhcHRlcik7CisJfQorCS8vIERlYnVnIC0gYnJlYWtwb2ludCBoaXQKKwlpZiAoSXNyICYgU1hHX0lTUl9CUkVBSykgeworCQkvLyBBdCB0aGUgbW9tZW50IEFHREIgaXNuJ3Qgd3JpdHRlbiB0byBzdXBwb3J0IGludGVyYWN0aXZlCisJCS8vIGRlYnVnIHNlc3Npb25zLiAgV2hlbiBpdCBpcywgdGhpcyBpbnRlcnJ1cHQgd2lsbCBiZSB1c2VkCisJCS8vIHRvIHNpZ25hbCBBR0RCIHRoYXQgaXQgaGFzIGhpdCBhIGJyZWFrcG9pbnQuICBGb3Igbm93LCBBU1NFUlQuCisJCUFTU0VSVCgwKTsKKwl9CisJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCisJaWYgKElzciAmIFNYR19JU1JfUElORykgeworCQlhZGFwdGVyLT5QaW5nT3V0c3RhbmRpbmcgPSBGQUxTRTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWFByb2NJc3IiLAorCQkgIGFkYXB0ZXIsIElzciwgTmV3SXNyLCAwKTsKKworCXJldHVybiAoTmV3SXNyKTsKK30KKworLyoKKyAqCisgKiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSAtIFByb2Nlc3Mgb3VyIGV2ZW50IHF1ZXVlCisgKgorICogQXJndW1lbnRzOgorICogCQktIGFkYXB0ZXIJLSBBZGFwdGVyIHN0cnVjdHVyZQorICoJCS0gUnNzSWQJCS0gVGhlIGV2ZW50IHF1ZXVlIHJlcXVpcmluZyBwcm9jZXNzaW5nCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUuCisgKi8KK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIFJzc0lkKQoreworCVBTWEdfRVZFTlRfUklORyBFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tSc3NJZF07CisJUFNYR19FVkVOVCBFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CisJdTMyIEV2ZW50c1Byb2Nlc3NlZCA9IDAsIEJhdGNoZXMgPSAwOworCXUzMiBudW1fc2ticyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKyNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCisJc3RydWN0IHNrX2J1ZmYgKnByZXZfc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqSW5kaWNhdGlvbkxpc3RbU1hHX1JDVl9BUlJBWVNJWkVdOworCXUzMiBJbmRleDsKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKyNlbmRpZgorCXUzMiBSZXR1cm5TdGF0dXMgPSAwOworCisJQVNTRVJUKChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUlVOTklORykgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9QQVVTSU5HKSB8fAorCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1BBVVNFRCkgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9IQUxUSU5HKSk7CisJLy8gV2UgbWF5IHN0aWxsIGhhdmUgdW5wcm9jZXNzZWQgZXZlbnRzIG9uIHRoZSBxdWV1ZSBpZgorCS8vIHRoZSBjYXJkIGNyYXNoZWQuICBEb24ndCBwcm9jZXNzIHRoZW0uCisJaWYgKGFkYXB0ZXItPkRlYWQpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJLy8gSW4gdGhlb3J5IHRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHByb2Nlc3NvciB0aGF0CisJLy8gYWNjZXNzZXMgdGhpcyBxdWV1ZSwgYW5kIG9ubHkgYXQgaW50ZXJydXB0LURQQyB0aW1lLiAgU28KKwkvLyB3ZSBzaG91bGRuJ3QgbmVlZCBhIGxvY2sgZm9yIGFueSBvZiB0aGlzLgorCXdoaWxlIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkV2ZW50IiwKKwkJCSAgRXZlbnQsIEV2ZW50LT5Db2RlLCBFdmVudC0+U3RhdHVzLAorCQkJICBhZGFwdGVyLT5OZXh0RXZlbnQpOworCQlzd2l0Y2ggKEV2ZW50LT5Db2RlKSB7CisJCWNhc2UgRVZFTlRfQ09ERV9CVUZGRVJTOgorCQkJQVNTRVJUKCEoRXZlbnQtPkNvbW1hbmRJbmRleCAmIDB4RkYwMCkpOwkvLyBTWEdfUklOR19JTkZPIEhlYWQgJiBUYWlsID09IHVuc2lnbmVkIGNoYXIKKwkJCS8vCisJCQlzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MoYWRhcHRlciwKKwkJCQkJCSAgICAgICBFdmVudC0+Q29tbWFuZEluZGV4KTsKKwkJCS8vCisJCQlicmVhazsKKwkJY2FzZSBFVkVOVF9DT0RFX1NMT1dSQ1Y6CisJCQktLWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQ7CisJCQlpZiAoKHNrYiA9IHN4Z19zbG93X3JlY2VpdmUoYWRhcHRlciwgRXZlbnQpKSkgeworCQkJCXUzMiByeF9ieXRlczsKKyNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCisJCQkJLy8gQWRkIGl0IHRvIG91ciBpbmRpY2F0aW9uIGxpc3QKKwkJCQlTWEdfQUREX1JDVl9QQUNLRVQoYWRhcHRlciwgc2tiLCBwcmV2X3NrYiwKKwkJCQkJCSAgIEluZGljYXRpb25MaXN0LCBudW1fc2ticyk7CisJCQkJLy8gIEluIExpbnV4LCB3ZSBqdXN0IHBhc3MgdXAgZWFjaCBza2IgdG8gdGhlIHByb3RvY29sIGFib3ZlIGF0IHRoaXMgcG9pbnQsCisJCQkJLy8gIHRoZXJlIGlzIG5vIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LgorI2Vsc2UKKy8vIENIRUNLICAgICAgICAgICAgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7CisJCQkJcnhfYnl0ZXMgPSBFdmVudC0+TGVuZ3RoOwkvLyAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOworCQkJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOworI2lmIFNYR19PRkZMT0FEX0lQX0NIRUNLU1VNCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKyNlbmRpZgorCQkJCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKKwkJCQluZXRpZl9yeChza2IpOworI2VuZGlmCisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCR19FUlJPUigiJXM6IEVSUk9SICBJbnZhbGlkIEV2ZW50Q29kZSAlZFxuIiwKKwkJCQkgIF9fRlVOQ1RJT05fXywgRXZlbnQtPkNvZGUpOworLy8gICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOworCQl9CisJCS8vIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc3RvY2sgY2FyZCByZWNlaXZlIGJ1ZmZlcnMuCisJCS8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRvIG5vdGUgaGVyZToKKwkJLy8gICAgICBGaXJzdCAtIFRoaXMgdGVzdCBpcyBub3QgU01QIHNhZmUuICBUaGUKKwkJLy8gICAgICAgICAgICAgIGFkYXB0ZXItPkJ1ZmZlcnNPbkNhcmQgZmllbGQgaXMgcHJvdGVjdGVkIHZpYSBhdG9taWMgaW50ZXJsb2NrZWQgY2FsbHMsIGJ1dAorCQkvLyAgICAgICAgICAgICAgd2UgZG8gbm90IHByb3RlY3QgaXQgd2l0aCByZXNwZWN0IHRvIHRoZXNlIHRlc3RzLiAgVGhlIG9ubHkgd2F5IHRvIGRvIHRoYXQKKwkJLy8gICAgICBpcyB3aXRoIGEgbG9jaywgYW5kIEkgZG9uJ3Qgd2FudCB0byBncmFiIGEgbG9jayBldmVyeSB0aW1lIHdlIGFkanVzdCB0aGUKKwkJLy8gICAgICBCdWZmZXJzT25DYXJkIGNvdW50LiAgSW5zdGVhZCwgd2UgYWxsb3cgdGhlIGJ1ZmZlciByZXBsZW5pc2htZW50IHRvIGJlIG9mZgorCQkvLyAgICAgIG9uY2UgaW4gYSB3aGlsZS4gIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhlIGNhcmQgaXMgZ2l2ZW4gb25lCisJCS8vICAgICAgbW9yZS1vci1sZXNzIGRlc2NyaXB0b3IgYmxvY2sgdGhhbiB0aGUgYXJiaXRyYXJ5IHZhbHVlIHdlJ3ZlIGNob3Nlbi4KKwkJLy8gICAgICBObyBiaWcgZGVhbAorCQkvLyAgICAgIEluIHNob3J0IERPIE5PVCBBREQgQSBMT0NLIEhFUkUsIE9SIFdIRVJFIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgYWRqdXN0ZWQuCisJCS8vICAgICAgU2Vjb25kIC0gV2UgZXhwZWN0IHRoaXMgdGVzdCB0byByYXJlbHkgZXZhbHVhdGUgdG8gdHJ1ZS4gIFdlIGF0dGVtcHQgdG8KKwkJLy8gICAgICByZWZpbGwgZGVzY3JpcHRvciBibG9ja3MgYXMgdGhleSBhcmUgcmV0dXJuZWQgdG8gdXMKKwkJLy8gICAgICAoc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKSwgc28gVGhlIG9ubHkgdGltZSB0aGlzIHNob3VsZCBldmFsdWF0ZQorCQkvLyAgICAgIHRvIHRydWUgaXMgd2hlbiBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgZmFpbGVkIHRvIGFsbG9jYXRlCisJCS8vICAgICAgICAgICAgICByZWNlaXZlIGJ1ZmZlcnMuCisJCWlmIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKwkJfQorCQkvLyBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoaXMgdG8gemVyby4KKwkJLy8gQnV0IGNsZWFyaW5nIHRoZSB0b3AgYml0IHNhdmVzIHBvdGVudGlhbCBkZWJ1ZyBpbmZvLi4uCisJCUV2ZW50LT5TdGF0dXMgJj0gfkVWRU5UX1NUQVRVU19WQUxJRDsKKwkJLy8gQWR2YW5jdCB0byB0aGUgbmV4dCBldmVudAorCQlTWEdfQURWQU5DRV9JTkRFWChhZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdLCBFVkVOVF9SSU5HX1NJWkUpOworCQlFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CisJCUV2ZW50c1Byb2Nlc3NlZCsrOworCQlpZiAoRXZlbnRzUHJvY2Vzc2VkID09IEVWRU5UX1JJTkdfQkFUQ0gpIHsKKwkJCS8vIFJlbGVhc2UgYSBiYXRjaCBvZiBldmVudHMgYmFjayB0byB0aGUgY2FyZAorCQkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJCSAgRVZFTlRfUklOR19CQVRDSCwgRkFMU0UpOworCQkJRXZlbnRzUHJvY2Vzc2VkID0gMDsKKwkJCS8vIElmIHdlJ3ZlIHByb2Nlc3NlZCBvdXIgYmF0Y2ggbGltaXQsIGJyZWFrIG91dCBvZiB0aGUKKwkJCS8vIGxvb3AgYW5kIHJldHVybiBTWEdfSVNSX0VWRU5UIHRvIGFycmFuZ2UgZm9yIHVzIHRvCisJCQkvLyBiZSBjYWxsZWQgYWdhaW4KKwkJCWlmIChCYXRjaGVzKysgPT0gRVZFTlRfQkFUQ0hfTElNSVQpIHsKKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9OT0lTWSwgIkV2dExpbWl0IiwgQmF0Y2hlcywKKwkJCQkJICBhZGFwdGVyLT5OZXh0RXZlbnQsIDAsIDApOworCQkJCVJldHVyblN0YXR1cyA9IFNYR19JU1JfRVZFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCS8vCisJLy8gSW5kaWNhdGUgYW55IHJlY2VpdmVkIGR1bWItbmljIGZyYW1lcworCS8vCisJU1hHX0lORElDQVRFX1BBQ0tFVFMoYWRhcHRlciwgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKKyNlbmRpZgorCS8vCisJLy8gUmVsZWFzZSBldmVudHMgYmFjayB0byB0aGUgY2FyZC4KKwkvLworCWlmIChFdmVudHNQcm9jZXNzZWQpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWFByY0V2bnQiLAorCQkgIEJhdGNoZXMsIEV2ZW50c1Byb2Nlc3NlZCwgYWRhcHRlci0+TmV4dEV2ZW50LCBudW1fc2ticyk7CisKKwlyZXR1cm4gKFJldHVyblN0YXR1cyk7Cit9CisKKy8qCisgKiBzeGdfY29tcGxldGVfc2xvd19zZW5kIC0gQ29tcGxldGUgc2xvd3BhdGggb3IgZHVtYi1uaWMgc2VuZHMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19YTVRfUklORyBYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOworCVBTWEdfUklOR19JTkZPIFhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKKwl1MzIgKkNvbnRleHRUeXBlOworCVBTWEdfQ01EIFhtdENtZDsKKworCS8vIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4KKwkvLyBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nCisJLy8gdGhyb3VnaCB0aGlzIGxvb3AuIEJlICp2ZXJ5KiBjYXJlZnVsLgorCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZHMiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisKKwl3aGlsZSAoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKKwkJLy8gTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kCisJCS8vIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorCQlTWEdfUkVUVVJOX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBDb250ZXh0VHlwZSk7CisJCUFTU0VSVChDb250ZXh0VHlwZSk7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZCIsCisJCQkgIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgWG10Q21kLCAwKTsKKwkJLy8gQ2xlYXIgdGhlIFNHTCBmaWVsZC4KKwkJWG10Q21kLT5TZ2wgPSAwOworCisJCXN3aXRjaCAoKkNvbnRleHRUeXBlKSB7CisJCWNhc2UgU1hHX1NHTF9EVU1COgorCQkJeworCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJLy8gRHVtYi1uaWMgc2VuZC4gIENvbW1hbmQgY29udGV4dCBpcyB0aGUgZHVtYi1uaWMgU0dMCisJCQkJc2tiID0gKHN0cnVjdCBza19idWZmICopQ29udGV4dFR5cGU7CisJCQkJLy8gQ29tcGxldGUgdGhlIHNlbmQKKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9JTVBPUlRBTlQsICJEbVNuZENtcCIsIHNrYiwgMCwKKwkJCQkJICAwLCAwKTsKKwkJCQlBU1NFUlQoYWRhcHRlci0+U3RhdHMuWG10UUxlbik7CisJCQkJYWRhcHRlci0+U3RhdHMuWG10UUxlbi0tOwkvLyB3aXRoaW4gWG10WmVyb0xvY2sKKwkJCQlhZGFwdGVyLT5TdGF0cy5YbXRPaysrOworCQkJCS8vIE5vdyBkcm9wIHRoZSBsb2NrIGFuZCBjb21wbGV0ZSB0aGUgc2VuZCBiYWNrIHRvCisJCQkJLy8gTWljcm9zb2Z0LiAgV2UgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGJlY2F1c2UKKwkJCQkvLyBNaWNyb3NvZnQgY2FuIGNvbWUgYmFjayB3aXRoIGEgY2hpbW5leSBzZW5kLCB3aGljaAorCQkJCS8vIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJpcCBpbiBTeGdUY3BPdXB1dAorCQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQkJCS8vIGFuZCByZWFjcXVpcmUuLgorCQkJCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7Cit9CisKKy8qCisgKiBzeGdfc2xvd19yZWNlaXZlCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJRXZlbnQJCS0gUmVjZWl2ZSBldmVudAorICoKKyAqIFJldHVybgorICoJIHNrYgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUocF9hZGFwdGVyX3QgYWRhcHRlciwgUFNYR19FVkVOVCBFdmVudCkKK3sKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCisJUmN2RGF0YUJ1ZmZlckhkciA9IChQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIpIEV2ZW50LT5Ib3N0SGFuZGxlOworCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyKTsKKwlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPT0gU1hHX0JVRkZFUl9PTkNBUkQpOworCUFTU0VSVChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpID09CisJICAgICAgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiU2xvd1JjdiIsIEV2ZW50LAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlLAorCQkgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwkvLyBEcm9wIHJjdiBmcmFtZXMgaW4gbm9uLXJ1bm5pbmcgc3RhdGUKKwlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CisJY2FzZSBTWEdfU1RBVEVfUlVOTklORzoKKwkJYnJlYWs7CisJY2FzZSBTWEdfU1RBVEVfUEFVU0lORzoKKwljYXNlIFNYR19TVEFURV9QQVVTRUQ6CisJY2FzZSBTWEdfU1RBVEVfSEFMVElORzoKKwkJZ290byBkcm9wOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJZ290byBkcm9wOworCX0KKworCS8vIENoYW5nZSBidWZmZXIgc3RhdGUgdG8gVVBTVFJFQU0KKwlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CisJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfUkNWRVJSKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkVycm9yIiwKKwkJCSAgRXZlbnQsIEV2ZW50LT5TdGF0dXMsIEV2ZW50LT5Ib3N0SGFuZGxlLCAwKTsKKwkJLy8gWFhYVE9ETyAtIFJlbW92ZSB0aGlzIHByaW50IGxhdGVyCisJCURCR19FUlJPUigiU1hHOiBSZWNlaXZlIGVycm9yICV4XG4iLCAqKHUzMiAqKQorCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKTsKKwkJc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKGFkYXB0ZXIsICoodTMyICopCisJCQkJICAgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTgorCQkJCSAgICAgIChSY3ZEYXRhQnVmZmVySGRyKSk7CisJCWdvdG8gZHJvcDsKKwl9CisjaWYgWFhYVE9ETwkJCS8vIFZMQU4gc3R1ZmYKKwkvLyBJZiB0aGVyZSdzIGEgVkxBTiB0YWcsIGV4dHJhY3QgaXQgYW5kIHZhbGlkYXRlIGl0CisJaWYgKCgocF9ldGhlcl9oZWFkZXIpIChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKSktPgorCSAgICBFdGhlclR5cGUgPT0gRVRIRVJUWVBFX1ZMQU4pIHsKKwkJaWYgKFN4Z0V4dHJhY3RWbGFuSGVhZGVyKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KSAhPQorCQkgICAgU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwKKwkJCQkgICJCYWRWbGFuIiwgRXZlbnQsCisJCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJCSAgRXZlbnQtPkxlbmd0aCwgMCk7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisjZW5kaWYKKwkvLworCS8vIER1bWItbmljIGZyYW1lLiAgU2VlIGlmIGl0IHBhc3NlcyBvdXIgbWFjIGZpbHRlciBhbmQgdXBkYXRlIHN0YXRzCisJLy8KKwlpZiAoIXN4Z19tYWNfZmlsdGVyKGFkYXB0ZXIsIChwX2V0aGVyX2hlYWRlcikKKwkJCSAgICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJICAgIEV2ZW50LT5MZW5ndGgpKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkZpbHRyIiwKKwkJCSAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCisJCQkgIEV2ZW50LT5MZW5ndGgsIDApOworCQlnb3RvIGRyb3A7CisJfQorCisJUGFja2V0ID0gUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1iUmN2IiwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLCBQYWNrZXQsIEV2ZW50LT5MZW5ndGgsIDApOworCS8vCisJLy8gTGFzdGx5IGFkanVzdCB0aGUgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoLgorCS8vCisJU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKFBhY2tldCwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpOworCisJcmV0dXJuIChQYWNrZXQpOworCisgICAgICBkcm9wOgorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRyb3BSY3YiLAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50LT5MZW5ndGgsIDAsIDApOworCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIHN4Z19wcm9jZXNzX3Jjdl9lcnJvciAtIHByb2Nlc3MgcmVjZWl2ZSBlcnJvciBhbmQgdXBkYXRlCisgKiBzdGF0cworICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJRXJyb3JTdGF0dXMJLSA0LWJ5dGUgcmVjZWl2ZSBlcnJvciBzdGF0dXMKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfcHJvY2Vzc19yY3ZfZXJyb3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIEVycm9yU3RhdHVzKQoreworCXUzMiBFcnJvcjsKKworCWFkYXB0ZXItPlN0YXRzLlJjdkVycm9ycysrOworCisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SKSB7CisJCUVycm9yID0gRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0Q3N1bSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0VWZsb3crKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU46CisJCQlhZGFwdGVyLT5TdGF0cy5UcmFuc3BvcnRIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IpIHsKKwkJRXJyb3IgPSBFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfQ1NVTToKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtDc3VtKys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTmV0d29ya1VmbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1BBUklUWSkgeworCQlhZGFwdGVyLT5TdGF0cy5QYXJpdHkrKzsKKwl9CisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19FUlJPUikgeworCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLOworCQlzd2l0Y2ggKEVycm9yKSB7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rUGFyaXR5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0Vhcmx5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0J1Zk9mbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rQ29kZSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0RyaWJibGUrKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0NyYysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtPZmxvdysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtVZmxvdysrOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBzeGdfbWFjX2ZpbHRlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJcGV0aGVyCQktIEV0aGVybmV0IGhlYWRlcgorICoJCWxlbmd0aAkJLSBGcmFtZSBsZW5ndGgKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAorICovCitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLCBwX2V0aGVyX2hlYWRlciBFdGhlckhkciwKKwkJCSAgIHVzaG9ydCBsZW5ndGgpCit7CisJYm9vbCBFcXVhbEFkZHI7CisKKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCS8vIGJyb2FkY2FzdAorCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19CQ0FTVCkgeworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdFBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyArPSBsZW5ndGg7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCXJldHVybiAoVFJVRSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBtdWx0aWNhc3QKKwkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfQUxMTUNBU1QpIHsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2TWNhc3RQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKFRSVUUpOworCQkJfQorCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19NQ0FTVCkgeworCQkJCVBTWEdfTVVMVElDQVNUX0FERFJFU1MgTXVsdGljYXN0QWRkcnMgPQorCQkJCSAgICBhZGFwdGVyLT5NdWx0aWNhc3RBZGRyczsKKwkJCQl3aGlsZSAoTXVsdGljYXN0QWRkcnMpIHsKKwkJCQkJRVRIRVJfRVFfQUREUihNdWx0aWNhc3RBZGRycy0+QWRkcmVzcywKKwkJCQkJCSAgICAgIEV0aGVySGRyLT5ldGhlcl9kaG9zdCwKKwkJCQkJCSAgICAgIEVxdWFsQWRkcik7CisJCQkJCWlmIChFcXVhbEFkZHIpIHsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdFBrdHMrKzsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0KKwkJCQkJCSAgICBsZW5ndGg7CisJCQkJCQlyZXR1cm4gKFRSVUUpOworCQkJCQl9CisJCQkJCU11bHRpY2FzdEFkZHJzID0gTXVsdGljYXN0QWRkcnMtPk5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfRElSRUNURUQpIHsKKwkJLy8gTm90IGJyb2FkY2FzdCBvciBtdWx0aWNhc3QuICBNdXN0IGJlIGRpcmVjdGVkIGF0IHVzIG9yCisJCS8vIHRoZSBjYXJkIGlzIGluIHByb21pc2N1b3VzIG1vZGUuICBFaXRoZXIgd2F5LCBjb25zaWRlciBpdAorCQkvLyBvdXJzIGlmIE1BQ19ESVJFQ1RFRCBpcyBzZXQKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2VWNhc3RCeXRlcyArPSBsZW5ndGg7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CisJCXJldHVybiAoVFJVRSk7CisJfQorCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfUFJPTUlTQykgeworCQkvLyBXaGF0ZXZlciBpdCBpcywga2VlcCBpdC4KKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJcmV0dXJuIChUUlVFKTsKKwl9CisJYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIGludCBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCURCR19FUlJPUgorCQkgICAgKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF0gJXhcbiIsCisJCSAgICAgX19GVU5DVElPTl9fLCBhZGFwdGVyLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwgTlJfSVJRUyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywKKwkJCQkgICAgICAgc3hnX2dsb2JhbC5mbGFncyk7CisKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCQkJICAgICAmc3hnX2lzciwKKwkJCQkgICAgIElSUUZfU0hBUkVELAorCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQlEQkdfRVJST1IoInN4ZzogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCXJldHVybiAocmV0dmFsKTsKKwkJfQorCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7CisJCWFkYXB0ZXItPkludFJlZ2lzdGVyZWQgPSBUUlVFOworCQkvLyBEaXNhYmxlIFJTUyB3aXRoIGxpbmUtYmFzZWQgaW50ZXJydXB0cworCQlhZGFwdGVyLT5Nc2lFbmFibGVkID0gRkFMU0U7CisJCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlciwgYWRhcHRlci0+bmV0ZGV2LT5pcnEpOworCX0KKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQgc3hnX2RlcmVnaXN0ZXJfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXIpOworI2lmIFhYWFRPRE8KKwlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKKyNlbmRpZgorCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKy8qCisgKiAgc3hnX2lmX2luaXQKKyAqCisgKiAgUGVyZm9ybSBpbml0aWFsaXphdGlvbiBvZiBvdXIgc2xpYyBpbnRlcmZhY2UuCisgKgorICovCitzdGF0aWMgaW50IHN4Z19pZl9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJcF9uZXRfZGV2aWNlIGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZDolZF0gZmxhZ3NbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkgIGFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsCisJCSAgYWRhcHRlci0+bGlua3N0YXRlLCBkZXYtPmZsYWdzKTsKKworCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7CisJCURCR19FUlJPUigic3hnX2lmX2luaXQgYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIik7CisJCXJldHVybiAoLUVJTyk7CisJfQorCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKKworCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJaWYgKGRldi0+ZmxhZ3MpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX0ZVTkNUSU9OX18sCisJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlEQkdfRVJST1IoIkJDQVNUICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7CisJCQlEQkdfRVJST1IoIlBST01JU0MgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJREJHX0VSUk9SKCJBTExfTUNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCURCR19FUlJPUigiTUNBU1QgIik7CisJCX0KKwkJREJHX0VSUk9SKCJcbiIpOworCX0KKwlzdGF0dXMgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludGVycnVwdCBGQUlMRUQgJXhcbiIsCisJCQkgIHN0YXR1cyk7CisJCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7CisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCURCR19FUlJPUigic3hnOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHBfbmV0X2RldmljZSBkZXYpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzOworCisJQVNTRVJUKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgYWRhcHRlci0+YWN0aXZhdGVkKTsKKwlEQkdfRVJST1IKKwkgICAgKCJzeGc6ICVzICglcyk6IFtqaWZmaWVzWyVseF0gY3B1ICVkXSBkZXZbJXBdIGFkYXB0WyVwXSBwb3J0WyVkXVxuIiwKKwkgICAgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCisJICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCXN4Z19nbG9iYWwubnVtX3N4Z19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJLy8gSW5pdGlhbGl6ZSB0aGUgYWRhcHRlcgorCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRpYWxpemVfYWRhcHRlciBzdGF0dXNbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pZl9pbml0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSBzeGdfaWZfaW5pdChhZGFwdGVyKTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2lmX2luaXQgc3RhdHVzWyV4XVxuIiwgX19GVU5DVElPTl9fLAorCQkJICBzdGF0dXMpOworCX0KKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQkJc3hnX2dsb2JhbC5udW1fc3hnX3BvcnRzX2FjdGl2ZS0tOworCQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLAorCQkJCSAgICAgICBzeGdfZ2xvYmFsLmZsYWdzKTsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKwlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIEFMTCBJTlRFUlJVUFRTXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gRW5hYmxlIGludGVycnVwdHMKKwlTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzeGdfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJcF9uZXRfZGV2aWNlIGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbW1pb19sZW4gPSAwOworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIGRldlslcF0gYWRhcHRlclslcF1cbiIsIF9fRlVOQ1RJT05fXywgZGV2LAorCQkgIGFkYXB0ZXIpOworCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwlzeGdfdW5tYXBfbW1pb19zcGFjZShhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fRlVOQ1RJT05fXyk7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDApIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICAodW5zaWduZWQgaW50KWRldi0+YmFzZV9hZGRyKTsKKwlpb3VubWFwKChjaGFyICopZGV2LT5iYXNlX2FkZHIpOworCisJREJHX0VSUk9SKCJzeGc6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCWtmcmVlKGRldik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldikKK3sKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9ET1dOOworCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBzZXQgYWRhcHRlclslcF0gc3RhdGUgdG8gQURBUFRfRE9XTiglZClcbiIsCisJCSAgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPnN0YXRlKTsKKworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVYSVRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlBU1NFUlQocnEpOworLy8gICAgICBEQkdfRVJST1IoInN4ZzogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19GVU5DVElPTl9fLCBjbWQsIHJxLCBkZXYpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKKwkJeworLy8gICAgICAgICAgICAgICAgICAgICAgcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCXUzMiBkYXRhWzddOworCQkJdTMyIGludGFnZzsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiY29weV9mcm9tX3VzZXIgRkFJTEVEICBnZXR0aW5nIGluaXRpYWwgcGFyYW1zXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWludGFnZyA9IGRhdGFbMF07CisJCQlwcmludGsoS0VSTl9FTUVSRworCQkJICAgICAgICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGludGFnZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJZGVmYXVsdDoKKy8vICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCisKKy8qCisgKgorICogc3hnX3NlbmRfcGFja2V0cyAtIFNlbmQgYSBza2IgcGFja2V0CisgKgorICogQXJndW1lbnRzOgorICoJCQlza2IgICAgICAgICAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gc2VuZAorICoJCQlkZXYgICAgICAgICAgICAgICAgICAgICAtIE91ciBsaW51eCBuZXQgZGV2aWNlIHRoYXQgcmVmcyBvdXIgYWRhcHRlcgorICoKKyAqIFJldHVybjoKKyAqCQkwICAgcmVnYXJkbGVzcyBvZiBvdXRjb21lICAgIFhYWFRPRE8gcmVmZXIgdG8gZTEwMDAgZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJdTMyIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19zZW5kX3BhY2tldHMgc2tiWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCQkgIHNrYik7CisJLy8gQ2hlY2sgdGhlIGFkYXB0ZXIgc3RhdGUKKwlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CisJY2FzZSBTWEdfU1RBVEVfSU5JVElBTElaSU5HOgorCWNhc2UgU1hHX1NUQVRFX0hBTFRFRDoKKwljYXNlIFNYR19TVEFURV9TSFVURE9XTjoKKwkJQVNTRVJUKDApOwkvLyB1bmV4cGVjdGVkCisJCS8vIGZhbGwgdGhyb3VnaAorCWNhc2UgU1hHX1NUQVRFX1JFU0VUVElORzoKKwljYXNlIFNYR19TVEFURV9TTEVFUDoKKwljYXNlIFNYR19TVEFURV9CT09URElBRzoKKwljYXNlIFNYR19TVEFURV9ESUFHOgorCWNhc2UgU1hHX1NUQVRFX0hBTFRJTkc6CisJCXN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOworCQlicmVhazsKKwljYXNlIFNYR19TVEFURV9SVU5OSU5HOgorCQlpZiAoYWRhcHRlci0+TGlua1N0YXRlICE9IFNYR19MSU5LX1VQKSB7CisJCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCXN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOworCX0KKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8geG1pdF9mYWlsOworCX0KKwkvLyBzZW5kIGEgcGFja2V0CisJc3RhdHVzID0gc3hnX3RyYW5zbWl0X3BhY2tldChhZGFwdGVyLCBza2IpOworCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZ290byB4bWl0X2RvbmU7CisJfQorCisgICAgICB4bWl0X2ZhaWw6CisJLy8gcmVqZWN0ICYgY29tcGxldGUgYWxsIHRoZSBwYWNrZXRzIGlmIHRoZXkgY2FudCBiZSBzZW50CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworI2lmIFhYWFRPRE8KKy8vICAgICAgc3hnX3NlbmRfcGFja2V0c19mYWlsKGFkYXB0ZXIsIHNrYiwgc3RhdHVzKTsKKyNlbHNlCisJCVNYR19EUk9QX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQlhZGFwdGVyLT5zdGF0cy50eF9kcm9wcGVkKys7CisjZW5kaWYKKwl9CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX3NlbmRfcGFja2V0cyBzdGF0dXNbJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgc3RhdHVzKTsKKworICAgICAgeG1pdF9kb25lOgorCXJldHVybiAwOworfQorCisvKgorICogc3hnX3RyYW5zbWl0X3BhY2tldAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGEgc2luZ2xlIHBhY2tldC4KKyAqCisgKiBBcmd1bWVudHMgLQorICoJCWFkYXB0ZXIJCQktIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIHNrYiAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gYmUgc2VudAorICoKKyAqIFJldHVybiAtCisgKiAJCVNUQVRVUyBvZiBzZW5kCisgKi8KK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCVBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBTZ2w7CisJUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2w7CisJdm9pZCAqU2dsQnVmZmVyOworCXUzMiBTZ2xCdWZmZXJMZW5ndGg7CisKKwkvLyBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZAorCS8vIHN4Z19kdW1iX3NnbCByb3V0aW5lLgorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZW5kIiwKKwkJICBhZGFwdGVyLCBza2IsIDAsIDApOworCisJLy8gQWxsb2NhdGUgYSBTR0wgYnVmZmVyCisJU1hHX0dFVF9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCk7CisJaWYgKCFTeGdTZ2wpIHsKKwkJYWRhcHRlci0+U3RhdHMuTm9TZ2xCdWYrKzsKKwkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlNuZFBrdEYxIiwKKwkJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKKwkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKKwl9CisJQVNTRVJUKFN4Z1NnbC0+YWRhcHRlciA9PSBhZGFwdGVyKTsKKwlTZ2xCdWZmZXIgPSBTWEdfU0dMX0JVRkZFUihTeGdTZ2wpOworCVNnbEJ1ZmZlckxlbmd0aCA9IFNYR19TR0xfQlVGX1NJWkU7CisJU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPSAwOworCVN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9IDA7CisJU3hnU2dsLT5UeXBlID0gU1hHX1NHTF9EVU1COworCVN4Z1NnbC0+RHVtYlBhY2tldCA9IHNrYjsKKwlwU2dsID0gTlVMTDsKKworCS8vIENhbGwgdGhlIGNvbW1vbiBzeGdfZHVtYl9zZ2wgcm91dGluZSB0byBjb21wbGV0ZSB0aGUgc2VuZC4KKwlzeGdfZHVtYl9zZ2wocFNnbCwgU3hnU2dsKTsKKwkvLyBSZXR1cm4gc3VjY2VzcyAgIHN4Z19kdW1iX3NnbCAob3Igc29tZXRoaW5nIGxhdGVyKSB3aWxsIGNvbXBsZXRlIGl0LgorCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2R1bWJfc2dsCisgKgorICogQXJndW1lbnRzOgorICoJCXBTZ2wgICAgIC0KKyAqCQlTeGdTZ2wgICAtIFNYR19TQ0FUVEVSX0dBVEhFUgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woUFNDQVRURVJfR0FUSEVSX0xJU1QgcFNnbCwgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IFN4Z1NnbC0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gU3hnU2dsLT5EdW1iUGFja2V0OworCS8vIEZvciBub3csIGFsbCBkdW1iLW5pYyBzZW5kcyBnbyBvbiBSU1MgcXVldWUgemVybworCVBTWEdfWE1UX1JJTkcgWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJUFNYR19DTUQgWG10Q21kID0gTlVMTDsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ID0gMDsKKwl1MzIgRGF0YUxlbmd0aCA9IHNrYi0+bGVuOworLy8gIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmTGVuOworLy8gICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgU2dsT2Zmc2V0OworCXU2NCBwaHlzX2FkZHI7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2dsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIDAsIDApOworCisJLy8gU2V0IGFzaWRlIGEgcG9pbnRlciB0byB0aGUgc2dsCisJU3hnU2dsLT5wU2dsID0gcFNnbDsKKworCS8vIFNhbml0eSBjaGVjayB0aGF0IG91ciBTR0wgZm9ybWF0IGlzIGFzIHdlIGV4cGVjdC4KKwlBU1NFUlQoc2l6ZW9mKFNYR19YNjRfU0dFKSA9PSBzaXplb2YoU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCkpOworCS8vIFNob3VsZG4ndCBiZSBhIHZsYW4gdGFnIG9uIHRoaXMgZnJhbWUKKwlBU1NFUlQoU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPT0gMCk7CisJQVNTRVJUKFN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9PSAwKTsKKworCS8vIEZyb20gaGVyZSBiZWxvdyB3ZSB3b3JrIHdpdGggdGhlIFNHTCBwbGFjZWQgaW4gb3VyCisJLy8gYnVmZmVyLgorCisJU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyA9IDE7CisKKwkvLyBHcmFiIHRoZSBzcGlubG9jayBhbmQgYWNxdWlyZSBhIGNvbW1hbmQKKwlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOworCWlmIChYbXRDbWQgPT0gTlVMTCkgeworCQkvLyBDYWxsIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQgdG8gc2VlIGlmIHdlIGNhbgorCQkvLyBmcmVlIHVwIGFueSBYbXRSaW5nWmVybyBlbnRyaWVzIGFuZCB0aGVuIHRyeSBhZ2FpbgorCQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOworCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKKwkJaWYgKFhtdENtZCA9PSBOVUxMKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5YbXRaZXJvRnVsbCsrOworCQkJZ290byBhYm9ydGNtZDsKKwkJfQorCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iQ21kIiwKKwkJICBYbXRDbWQsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisJLy8gVXBkYXRlIHN0YXRzCisJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFBrdHMrKzsKKwlhZGFwdGVyLT5TdGF0cy5EdW1iWG10Qnl0ZXMgKz0gRGF0YUxlbmd0aDsKKyNpZiBYWFhUT0RPCQkJLy8gU3RhdHMgc3R1ZmYKKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdFBrdHMrKzsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdEJ5dGVzICs9IERhdGFMZW5ndGg7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RQa3RzKys7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCQl9CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10VWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCX0KKyNlbmRpZgorCS8vIEZpbGwgaW4gdGhlIGNvbW1hbmQKKwkvLyBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldAorCXBoeXNfYWRkciA9CisJICAgIHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFNYR19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7CisJWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIDw8IDMyOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9CisJICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyB8IFNYR19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKKy8vICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXhdLkFkZHJlc3M7CisvLyAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcy5Mb3dQYXJ0ICs9IE1kbE9mZnNldDsKKwlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aCA9IERhdGFMZW5ndGg7CisJLy8gU2V0IGEgcG9pbnRlciB0byB0aGUgcmVtYWluaW5nIFNHTCBlbnRyaWVzCisvLyAgICAgIFhtdENtZC0+U2dsID0gU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3M7CisJLy8gQWR2YW5jZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU3hnU2dsIHN0cnVjdHVyZSB0bworCS8vIHRoZSBzZWNvbmQgU0dFCisvLyAgICAgIFNnbE9mZnNldCA9ICh1MzIpKCh1MzIgKikoJlN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4KzFdKSAtCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopU3hnU2dsKTsKKy8vICAgICAgWG10Q21kLT5TZ2wuTG93UGFydCArPSBTZ2xPZmZzZXQ7CisJWG10Q21kLT5CdWZmZXIuU2dlT2Zmc2V0ID0gMDsKKwkvLyBOb3RlIC0gVG90YWxMZW5ndGggbWlnaHQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBNU1MgYmVsb3cuLgorCVhtdENtZC0+QnVmZmVyLlRvdGFsTGVuZ3RoID0gRGF0YUxlbmd0aDsKKwlYbXRDbWQtPlNnRW50cmllcyA9IDE7CS8vKHVzaG9ydCkoU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyAtIEluZGV4KTsKKwlYbXRDbWQtPkZsYWdzID0gMDsKKwkvLworCS8vIEFkdmFuY2UgdHJhbnNtaXQgY21kIGRlc2NyaXB0ZXIgYnkgMS4KKwkvLyBOT1RFIC0gU2VlIGNvbW1lbnRzIGluIFN4Z1RjcE91dHB1dCB3aGVyZSB3ZSB3cml0ZQorCS8vIHRvIHRoZSBYbXRDbWQgcmVnaXN0ZXIgcmVnYXJkaW5nIENQVSBJRCB2YWx1ZXMgYW5kL29yCisJLy8gbXVsdGlwbGUgY29tbWFuZHMuCisJLy8KKwkvLworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10Q21kLCAxLCBUUlVFKTsKKwkvLworCS8vCisJYWRhcHRlci0+U3RhdHMuWG10UUxlbisrOwkvLyBTdGF0cyB3aXRoaW4gbG9jaworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWER1bVNnbDIiLAorCQkgIFhtdENtZCwgcFNnbCwgU3hnU2dsLCAwKTsKKwlyZXR1cm47CisKKyAgICAgIGFib3J0Y21kOgorCS8vIE5PVEUgLSBPbmx5IGp1bXAgdG8gdGhpcyBsYWJlbCBBRlRFUiBncmFiYmluZyB0aGUKKwkvLyBYbXRaZXJvTG9jaywgYW5kIERPIE5PVCBEUk9QIElUIGJldHdlZW4gdGhlCisJLy8gY29tbWFuZCBhbGxvY2F0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGFib3J0LgorCWlmIChYbXRDbWQpIHsKKwkJU1hHX0FCT1JUX0NNRChYbXRSaW5nSW5mbyk7CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisKKy8vIGZhaWxzZ2w6CisJLy8gSnVtcCB0byB0aGlzIGxhYmVsIGlmIGZhaWx1cmUgb2NjdXJzIGJlZm9yZSB0aGUKKwkvLyBYbXRaZXJvTG9jayBpcyBncmFiYmVkCisJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkR1bVNHRmFsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCk7CisKKwlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIFN4Z1NnbC0+RHVtYlBhY2tldCk7CS8vIFN4Z1NnbC0+RHVtYlBhY2tldCBpcyB0aGUgc2tiCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeGdfaW5pdGlhbGl6ZV9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgbGluayBzdHVmZgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBWYWx1ZTsKKwl1MzIgQ29uZmlnRGF0YTsKKwl1MzIgTWF4RnJhbWU7CisJaW50IHN0YXR1czsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluaXRMaW5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIFJlc2V0IFBIWSBhbmQgWEdYUyBtb2R1bGUKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBMU19TRVJERVNfUE9XRVJfRE9XTiwgVFJVRSk7CisKKwkvLyBSZXNldCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJV1JJVEVfUkVHKEh3UmVncy0+WG10Q29uZmlnLCBYTVRfQ09ORklHX1JFU0VULCBUUlVFKTsKKworCS8vIFJlc2V0IHJlY2VpdmUgY29uZmlndXJhdGlvbiByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPlJjdkNvbmZpZywgUkNWX0NPTkZJR19SRVNFVCwgVFJVRSk7CisKKwkvLyBSZXNldCBhbGwgTUFDIG1vZHVsZXMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQsIFRSVUUpOworCisJLy8gTGluayBhZGRyZXNzIDAKKwkvLyBYWFhUT0RPIC0gVGhpcyBhc3N1bWVzIHRoZSBNQUMgYWRkcmVzcyAoMGE6MGI6MGM6MGQ6MGU6MGYpCisJLy8gaXMgc3RvcmVkIHdpdGggdGhlIGZpcnN0IG5pYmJsZSAoMGEpIGluIHRoZSBieXRlIDAKKwkvLyBvZiB0aGUgTWFjIGFkZHJlc3MuICBQb3NzaWJseSByZXZlcnNlPworCVZhbHVlID0gKih1MzIgKikgYWRhcHRlci0+TWFjQWRkcjsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczBMb3csIFZhbHVlLCBUUlVFKTsKKwkvLyBhbHNvIHdyaXRlIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgTUFDLiAgRW5kaWFuIGlzIHJldmVyc2VkLgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NMb3csIG50b2hsKFZhbHVlKSwgVFJVRSk7CisJVmFsdWUgPSAoKih1MTYgKikgJiBhZGFwdGVyLT5NYWNBZGRyWzRdICYgMHgwMDAwRkZGRik7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MwSGlnaCwgVmFsdWUgfCBMSU5LX0FERFJFU1NfRU5BQkxFLCBUUlVFKTsKKwkvLyBlbmRpYW4gc3dhcCBmb3IgdGhlIE1BQyAocHV0IGhpZ2ggYnl0ZXMgaW4gYml0cyBbMzE6MTZdLCBzd2FwcGVkKQorCVZhbHVlID0gbnRvaGwoVmFsdWUpOworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NIaWdoLCBWYWx1ZSwgVFJVRSk7CisJLy8gTGluayBhZGRyZXNzIDEKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczFMb3csIDAsIFRSVUUpOworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMUhpZ2gsIDAsIFRSVUUpOworCS8vIExpbmsgYWRkcmVzcyAyCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MyTG93LCAwLCBUUlVFKTsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczJIaWdoLCAwLCBUUlVFKTsKKwkvLyBMaW5rIGFkZHJlc3MgMworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzM0xvdywgMCwgVFJVRSk7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MzSGlnaCwgMCwgVFJVRSk7CisKKwkvLyBFbmFibGUgTUFDIG1vZHVsZXMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCAwLCBUUlVFKTsKKworCS8vIENvbmZpZ3VyZSBNQUMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCAoQVhHTUFDX0NGRzFfWE1UX1BBVVNFIHwJLy8gQWxsb3cgc2VuZGluZyBvZiBwYXVzZQorCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9YTVRfRU4gfAkvLyBFbmFibGUgWE1UCisJCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9QQVVTRSB8CS8vIEVuYWJsZSBkZXRlY3Rpb24gb2YgcGF1c2UKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfUkNWX0VOIHwJLy8gRW5hYmxlIHJlY2VpdmUKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUIHwJLy8gc2hvcnQgZnJhbWUgZGV0ZWN0aW9uCisJCQkJICAgICAgIEFYR01BQ19DRkcxX0NIRUNLX0xFTiB8CS8vIFZlcmlmeSBmcmFtZSBsZW5ndGgKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfR0VOX0ZDUyB8CS8vIEdlbmVyYXRlIEZDUworCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9QQURfNjQpLAkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCisJCSAgVFJVRSk7CisKKwkvLyBTZXQgQVhHTUFDIG1heCBmcmFtZSBsZW5ndGggaWYganVtYm8uICBOb3QgbmVlZGVkIGZvciBzdGFuZGFyZCBNVFUKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkKSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY01heEZyYW1lTGVuLCBBWEdNQUNfTUFYRlJBTUVfSlVNQk8sIFRSVUUpOworCX0KKwkvLyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0KKwkvLyBUaGUgdmFsdWUgcGxhY2VkIGluIHRoZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sgcG9ydGlvbgorCS8vIChib3R0b20gYml0cykgb2YgdGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUKKwkvLyBNREMgZnJlcXVlbmN5IGFzIHNwZWNpZmllZCBpbiB0aGUgQS1YR01BQyBEZXNpZ24gRG9jdW1lbnQuCisJLy8gVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSB6ZXJvLiAgVGhlIGZvbGxvd2luZyB2YWx1ZSAoNjIgb3IgMHgzRSkKKwkvLyBpcyBiYXNlZCBvbiBvdXIgTUFDIHRyYW5zbWl0IGNsb2NrIGZyZXF1ZW5jeSAoTVRDTEspIG9mIDMxMi41IE1Iei4KKwkvLyBHaXZlbiBhIG1heGltdW0gTURJTyBjbG9jayBmcmVxdWVuY3kgb2YgMi41IE1IeiAoc2VlIHRoZSBQSFkgc3BlYyksCisJLy8gd2UgZ2V0OiAgMzEyLjUvKDIqKFgrMSkpIDwgMi41ICA9PT4gWCA9IDYyLgorCS8vIFRoaXMgdmFsdWUgaGFwcGVucyB0byBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlciwKKwkvLyBzbyB3ZSByZWFsbHkgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDNFLCBUUlVFKTsKKworCS8vIFBvd2VyIHVwIGFuZCBlbmFibGUgUEhZIGFuZCBYQVVJL1hHWFMvU2VyZGVzIGxvZ2ljCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua1N0YXR1cywKKwkJICAoTFNfUEhZX0NMUl9SRVNFVCB8CisJCSAgIExTX1hHWFNfRU5BQkxFIHwKKwkJICAgTFNfWEdYU19DVEwgfCBMU19QSFlfQ0xLX0VOIHwgTFNfQVRUTl9BTEFSTSksIFRSVUUpOworCURCR19FUlJPUigiQWZ0ZXIgUG93ZXIgVXAgYW5kIGVuYWJsZSBQSFkgaW4gc3hnX2luaXRpYWxpemVfbGlua1xuIik7CisKKwkvLyBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuCisJLy8gSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0byBjbGVhci4KKwltZGVsYXkoMTAwKTsKKworCS8vIFZlcmlmeSB0aGUgUEhZIGhhcyBjb21lIHVwIGJ5IGNoZWNraW5nIHRoYXQgdGhlIFJlc2V0IGJpdCBoYXMgY2xlYXJlZC4KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICBQSFlfUE1BX0NPTlRST0wxLAkvLyBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCWlmIChWYWx1ZSAmIFBNQV9DT05UUk9MMV9SRVNFVCkJLy8gcmVzZXQgY29tcGxldGUgaWYgYml0IGlzIDAKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBUaGUgU0VSREVTIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBub3cgLSBjb25maXJtCisJUkVBRF9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBWYWx1ZSk7CisJaWYgKFZhbHVlICYgTFNfU0VSREVTX0RPV04pCS8vIHZlcmlmeSBTRVJERVMgaXMgaW5pdGlhbGl6ZWQKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBUaGUgWEFVSSBsaW5rIHNob3VsZCBhbHNvIGJlIHVwIC0gY29uZmlybQorCWlmICghKFZhbHVlICYgTFNfWEFVSV9MSU5LX1VQKSkJLy8gdmVyaWZ5IFhBVUkgbGluayBpcyB1cAorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8vIEluaXRpYWxpemUgdGhlIFBIWQorCXN0YXR1cyA9IHN4Z19waHlfaW5pdChhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8vIEVuYWJsZSB0aGUgTGluayBBbGFybQorCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICAgTEFTSV9DT05UUk9MLAkvLyBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsJLy8gZW5hYmxlIGxpbmsgYWxhcm0gYml0CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBYWFhUT0RPIC0gdGVtcG9yYXJ5IC0gdmVyaWZ5IGJpdCBpcyBzZXQKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICBMQVNJX0NPTlRST0wsCS8vIExBU0kgY29udHJvbCByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJaWYgKCEoVmFsdWUgJiBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpKSB7CisJCURCR19FUlJPUigiRXJyb3IhICBMQVNJIENvbnRyb2wgQWxhcm0gRW5hYmxlIGJpdCBub3Qgc2V0IVxuIik7CisJfQorCS8vIEVuYWJsZSByZWNlaXZlCisJTWF4RnJhbWUgPSBhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPyBKVU1CT01BWEZSQU1FIDogRVRIRVJNQVhGUkFNRTsKKwlDb25maWdEYXRhID0gKFJDVl9DT05GSUdfRU5BQkxFIHwKKwkJICAgICAgUkNWX0NPTkZJR19FTlBBUlNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19SQ1ZCQUQgfAorCQkgICAgICBSQ1ZfQ09ORklHX1JDVlBBVVNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19UWklQVjYgfAorCQkgICAgICBSQ1ZfQ09ORklHX1RaSVBWNCB8CisJCSAgICAgIFJDVl9DT05GSUdfSEFTSF8xNiB8CisJCSAgICAgIFJDVl9DT05GSUdfU09DS0VUIHwgUkNWX0NPTkZJR19CVUZTSVpFKE1heEZyYW1lKSk7CisJV1JJVEVfUkVHKEh3UmVncy0+UmN2Q29uZmlnLCBDb25maWdEYXRhLCBUUlVFKTsKKworCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19FTkFCTEUsIFRSVUUpOworCisJLy8gTWFyayB0aGUgbGluayBhcyBkb3duLiAgV2UnbGwgZ2V0IGEgbGluayBldmVudCB3aGVuIGl0IGNvbWVzIHVwLgorCXN4Z19saW5rX3N0YXRlKGFkYXB0ZXIsIFNYR19MSU5LX0RPV04pOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXRMbmsiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3BoeV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgUEhZCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX3BoeV9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFZhbHVlOworCVBQSFlfVUNPREUgcDsKKwlpbnQgc3RhdHVzOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIFJlYWQgYSByZWdpc3RlciB0byBpZGVudGlmeSB0aGUgUEhZIHR5cGUKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICAweEMyMDUsCS8vIFBIWSBJRCByZWdpc3RlciAoPykKKwkJCQkgICAmVmFsdWUpOwkvLyAgICBYWFhUT0RPIC0gYWRkIGRlZgorCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCisJaWYgKFZhbHVlID09IDB4MDAxMikgewkvLyAweDAwMTIgPT0gQUVMMjAwNUMgUEhZKD8pIC0gWFhYVE9ETyAtIGFkZCBkZWYKKwkJREJHX0VSUk9SCisJCSAgICAoIkFFTDIwMDVDIFBIWSBkZXRlY3RlZC4gIERvd25sb2FkaW5nIFBIWSBtaWNyb2NvZGUuXG4iKTsKKworCQkvLyBJbml0aWFsaXplIEFFTDIwMDVDIFBIWSBhbmQgZG93bmxvYWQgUEhZIG1pY3JvY29kZQorCQlmb3IgKHAgPSBQaHlVY29kZTsgcC0+QWRkciAhPSAweEZGRkY7IHArKykgeworCQkJaWYgKHAtPkFkZHIgPT0gMCkgeworCQkJCS8vIGlmIGFkZHJlc3MgPT0gMCwgZGF0YSA9PSBzbGVlcCB0aW1lIGluIG1zCisJCQkJbWRlbGF5KHAtPkRhdGEpOworCQkJfSBlbHNlIHsKKwkJCQkvLyB3cml0ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKKwkJCQlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJCQkJICAgIHAtPkFkZHIsCS8vIFBIWSBhZGRyZXNzCisJCQkJCQkJICAgIHAtPkRhdGEpOwkvLyBQSFkgZGF0YQorCQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQkJfQorCQl9CisJfQorCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2xpbmtfZXZlbnQgLSBQcm9jZXNzIGEgbGluayBldmVudCBub3RpZmljYXRpb24gZnJvbSB0aGUgY2FyZAorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2xpbmtfZXZlbnQocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCVNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZTsKKwlpbnQgc3RhdHVzOworCXUzMiBWYWx1ZTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkxpbmtFdm50IiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gQ2hlY2sgdGhlIExpbmsgU3RhdHVzIHJlZ2lzdGVyLiAgV2Ugc2hvdWxkIGhhdmUgYSBMaW5rIEFsYXJtLgorCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOworCWlmIChWYWx1ZSAmIExTX0xJTktfQUxBUk0pIHsKKwkJLy8gV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZQorCQkvLyBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykKKwkJbWRlbGF5KDEwKTsKKworCQkvLyBOb3cgY2xlYXIgdGhlIGFsYXJtIGJ5IHJlYWRpbmcgdGhlIExBU0kgc3RhdHVzIHJlZ2lzdGVyLgorCQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkJICAgTEFTSV9TVEFUVVMsCS8vIExBU0kgc3RhdHVzIHJlZ2lzdGVyCisJCQkJCSAgICZWYWx1ZSk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBMQVNJIFN0YXR1cyBNRElPIHJlZ2lzdGVyIVxuIik7CisJCQlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBTWEdfTElOS19ET1dOKTsKKy8vICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKwkJfQorCQlBU1NFUlQoVmFsdWUgJiBMQVNJX1NUQVRVU19MU19BTEFSTSk7CisKKwkJLy8gTm93IGdldCBhbmQgc2V0IHRoZSBsaW5rIHN0YXRlCisJCUxpbmtTdGF0ZSA9IHN4Z19nZXRfbGlua19zdGF0ZShhZGFwdGVyKTsKKwkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKKwkJREJHX0VSUk9SKCJTWEc6IExpbmsgQWxhcm0gb2NjdXJyZWQuICBMaW5rIGlzICVzXG4iLAorCQkJICAoKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgPyAiVVAiIDogIkRPV04iKSk7CisJfSBlbHNlIHsKKwkJLy8gWFhYVE9ETyAtIEFzc3VtaW5nIExpbmsgQXR0ZW50aW9uIGlzIG9ubHkgYmVpbmcgZ2VuZXJhdGVkIGZvciB0aGUKKwkJLy8gTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpLCB0aGVuIGl0J3MKKwkJLy8gaW1wb3NzaWJsZSB0byBnZXQgaGVyZS4gIFlldCB3ZSd2ZSBnb3R0ZW4gaGVyZSB0d2ljZSAodW5kZXIgZXh0cmVtZQorCQkvLyBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kIGRvd24gbWFueSB0aW1lcyBhIHNlY29uZCkuCisJCS8vIE5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KKwkJREJHX0VSUk9SKCJTWEc6IHN4Z19saW5rX2V2ZW50OiBDYW4ndCBnZXQgaGVyZSFcbiIpOworCQlEQkdfRVJST1IoIlNYRzogTGluayBTdGF0dXMgPT0gMHglMDhYLlxuIiwgVmFsdWUpOworLy8gICAgICAgICAgICAgIEFTU0VSVCgwKTsKKwl9CisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCit9CisKKy8qCisgKiBzeGdfZ2V0X2xpbmtfc3RhdGUgLSBEZXRlcm1pbmUgaWYgdGhlIGxpbmsgaXMgdXAgb3IgZG93bgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCUxpbmsgU3RhdGUKKyAqLworc3RhdGljIFNYR19MSU5LX1NUQVRFIHN4Z19nZXRfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCWludCBzdGF0dXM7CisJdTMyIFZhbHVlOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkdldExpbmsiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLy8gUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZgorCS8vIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgUEhZX1BNQV9SQ1ZfREVULAkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdCBpcyAwLCB0aGVuIHRoZSBsaW5rIGlzIGRvd24KKwlpZiAoIShWYWx1ZSAmIFBNQV9SQ1ZfREVURUNUKSkKKwkJcmV0dXJuIChTWEdfTElOS19ET1dOKTsKKworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QQ1MsCS8vIFBIWSBQQ1MgbW9kdWxlCisJCQkJICAgUEhZX1BDU18xMEdfU1RBVFVTMSwJLy8gUENTIDEwR0JBU0UtUiBTdGF0dXMgMSByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBQQ1MgaXMgbm90IGxvY2tlZCB0byByZWNlaXZlIGJsb2NrcywgdGhlbiB0aGUgbGluayBpcyBkb3duCisJaWYgKCEoVmFsdWUgJiBQQ1NfMTBCX0JMT0NLX0xPQ0spKQorCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOworCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1hTLAkvLyBQSFkgWFMgbW9kdWxlCisJCQkJICAgUEhZX1hTX0xBTkVfU1RBVFVTLAkvLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBYUyB0cmFuc21pdCBsYW5lcyBhcmUgbm90IGFsaWduZWQsIHRoZW4gdGhlIGxpbmsgaXMgZG93bgorCWlmICghKFZhbHVlICYgWFNfTEFORV9BTElHTikpCisJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CisKKwkvLyBBbGwgMyBiaXRzIGFyZSB0cnVlLCBzbyB0aGUgbGluayBpcyB1cAorCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1hHX0xJTktfVVApOworCisgICAgICBiYWQ6CisJLy8gQW4gZXJyb3Igb2NjdXJyZWQgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyLiAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyIVxuIik7CisJQVNTRVJUKDApOworCXJldHVybiAoU1hHX0xJTktfRE9XTik7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19pbmRpY2F0ZV9saW5rX3N0YXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICAgIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSkKK3sKKwlpZiAoYWRhcHRlci0+TGlua1N0YXRlID09IFNYR19MSU5LX1VQKSB7CisJCURCR19FUlJPUigiJXM6IExJTksgbm93IFVQLCBjYWxsIG5ldGlmX3N0YXJ0X3F1ZXVlXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0gZWxzZSB7CisJCURCR19FUlJPUigiJXM6IExJTksgbm93IERPV04sIGNhbGwgbmV0aWZfc3RvcF9xdWV1ZVxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0KK30KKworLyoKKyAqIHN4Z19saW5rX3N0YXRlIC0gU2V0IHRoZSBsaW5rIHN0YXRlIGFuZCBpZiBuZWNlc3NhcnksIGluZGljYXRlLgorICoJVGhpcyByb3V0aW5lIHRoZSBjZW50cmFsIHBvaW50IG9mIHByb2Nlc3NpbmcgZm9yIGFsbCBsaW5rIHN0YXRlIGNoYW5nZXMuCisgKglOb3RoaW5nIGVsc2UgaW4gdGhlIGRyaXZlciBzaG91bGQgYWx0ZXIgdGhlIGxpbmsgc3RhdGUgb3IgcGVyZm9ybQorICoJbGluayBzdGF0ZSBpbmRpY2F0aW9ucworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCUxpbmtTdGF0ZSAJLSBUaGUgbGluayBzdGF0ZQorICoKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpCit7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkxua0lORENUIiwKKwkJICBhZGFwdGVyLCBMaW5rU3RhdGUsIGFkYXB0ZXItPkxpbmtTdGF0ZSwgYWRhcHRlci0+U3RhdGUpOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEhvbGQgdGhlIGFkYXB0ZXIgbG9jayBkdXJpbmcgdGhpcyByb3V0aW5lLiAgTWF5YmUgbW92ZQorCS8vIHRoZSBsb2NrIHRvIHRoZSBjYWxsZXIuCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJaWYgKExpbmtTdGF0ZSA9PSBhZGFwdGVyLT5MaW5rU3RhdGUpIHsKKwkJLy8gTm90aGluZyBjaGFuZ2VkLi4KKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJREJHX0VSUk9SKCJFWElUICMwICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCS8vIFNhdmUgdGhlIGFkYXB0ZXIgc3RhdGUKKwlhZGFwdGVyLT5MaW5rU3RhdGUgPSBMaW5rU3RhdGU7CisKKwkvLyBEcm9wIHRoZSBsb2NrIGFuZCBpbmRpY2F0ZSBsaW5rIHN0YXRlCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwlEQkdfRVJST1IoIkVYSVQgIzEgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzeGdfaW5kaWNhdGVfbGlua19zdGF0ZShhZGFwdGVyLCBMaW5rU3RhdGUpOworfQorCisvKgorICogc3hnX3dyaXRlX21kaW9fcmVnIC0gV3JpdGUgdG8gYSByZWdpc3RlciBvbiB0aGUgTURJTyBidXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCisgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCisgKiAgVmFsdWUJCS0gdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1ESU8gcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z193cml0ZV9tZGlvX3JlZyhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgVmFsdWUpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgQWRkck9wOwkJLy8gQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpCisJdTMyIFdyaXRlT3A7CQkvLyBXcml0ZSBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpCisJdTMyIENtZDsJCS8vIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykKKwl1MzIgVmFsdWVSZWFkOworCXUzMiBUaW1lb3V0OworCisvLyAgREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLy8gRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGgKKwlEZXZBZGRyICY9IDB4MDAxRjsJLy8gNS1iaXQgZmllbGQKKwlSZWdBZGRyICY9IDB4RkZGRjsJLy8gMTYtYml0IGZpZWxkCisJVmFsdWUgJj0gMHhGRkZGOwkvLyAxNi1iaXQgZmllbGQKKworCS8vIFNldCBNSUlNIGZpZWxkIHJlZ2lzdGVyIGJpdHMgZm9yIGFuIE1JSU0gYWRkcmVzcyBvcGVyYXRpb24KKwlBZGRyT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKSB8IFJlZ0FkZHI7CisKKwkvLyBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIHdyaXRlIG9wZXJhdGlvbgorCVdyaXRlT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX1dSSVRFIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBWYWx1ZTsKKworCS8vIFNldCBNSUlNIGNvbW1hbmQgcmVnaXN0ZXIgYml0cyB0byBleGVjdXRlIGFuIE1JSU0gY29tbWFuZAorCUNtZCA9IEFYR01BQ19BTUlJTV9DTURfU1RBUlQgfCBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT047CisKKwkvLyBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdCAoaW4gY2FzZSBpdCdzIG5vdCAwKQorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8vIE1JSU0gd3JpdGUgdG8gc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgTURJTyByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIEFkZHJPcCwgVFJVRSk7CisKKwkvLyBXcml0ZSB0byBNSUlNIENvbW1hbmQgUmVnaXN0ZXIgdG8gZXhlY3V0ZSB0byBhZGRyZXNzIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLy8gUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvLyBNSUlNIHdyaXRlIHRvIHNldCB1cCBhbiBNRElPIHdyaXRlIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIFdyaXRlT3AsIFRSVUUpOworCisJLy8gV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdGhlIHdyaXRlIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisvLyAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfcmVhZF9tZGlvX3JlZyAtIFJlYWQgYSByZWdpc3RlciBvbiB0aGUgTURJTyBidXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCisgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCisgKiAgcFZhbHVlCQktIHBvaW50ZXIgdG8gd2hlcmUgdG8gcHV0IGRhdGEgcmVhZCBmcm9tIHRoZSBNRElPIHJlZ2lzdGVyCisgKgorICogUmV0dXJuCisgKglzdGF0dXMKKyAqLworc3RhdGljIGludCBzeGdfcmVhZF9tZGlvX3JlZyhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiAqcFZhbHVlKQoreworCVBTWEdfSFdfUkVHUyBId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJdTMyIEFkZHJPcDsJCS8vIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKQorCXUzMiBSZWFkT3A7CQkvLyBSZWFkIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykKKwl1MzIgQ21kOwkJLy8gQ29tbWFuZCAod3JpdHRlbiB0byBNSUlNIGNvbW1hbmQgcmVnKQorCXUzMiBWYWx1ZVJlYWQ7CisJdTMyIFRpbWVvdXQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJXcnRNRElPIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKy8vICBEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGgKKwlEZXZBZGRyICY9IDB4MDAxRjsJLy8gNS1iaXQgZmllbGQKKwlSZWdBZGRyICY9IDB4RkZGRjsJLy8gMTYtYml0IGZpZWxkCisKKwkvLyBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIGFkZHJlc3Mgb3BlcmF0aW9uCisJQWRkck9wID0gKE1JSU1fUE9SVF9OVU0gPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQpIHwKKwkgICAgKERldkFkZHIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVCkgfAorCSAgICAoTUlJTV9UQV8xMEdCIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVCkgfAorCSAgICAoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBSZWdBZGRyOworCisJLy8gU2V0IE1JSU0gZmllbGQgcmVnaXN0ZXIgYml0cyBmb3IgYW4gTUlJTSByZWFkIG9wZXJhdGlvbgorCVJlYWRPcCA9IChNSUlNX1BPUlRfTlVNIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUKSB8CisJICAgIChEZXZBZGRyIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfU0hJRlQpIHwKKwkgICAgKE1JSU1fVEFfMTBHQiA8PCBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQpIHwKKwkgICAgKE1JSU1fT1BfUkVBRCA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpOworCisJLy8gU2V0IE1JSU0gY29tbWFuZCByZWdpc3RlciBiaXRzIHRvIGV4ZWN1dGUgYW4gTUlJTSBjb21tYW5kCisJQ21kID0gQVhHTUFDX0FNSUlNX0NNRF9TVEFSVCB8IEFYR01BQ19BTUlJTV9DTURfMTBHX09QRVJBVElPTjsKKworCS8vIFJlc2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyIGNvbW1hbmQgYml0IChpbiBjYXNlIGl0J3Mgbm90IDApCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIDAsIFRSVUUpOworCisJLy8gTUlJTSB3cml0ZSB0byBzZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHNwZWNpZmllZCBNRElPIHJlZ2lzdGVyCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgQWRkck9wLCBUUlVFKTsKKworCS8vIFdyaXRlIHRvIE1JSU0gQ29tbWFuZCBSZWdpc3RlciB0byBleGVjdXRlIHRvIGFkZHJlc3Mgb3BlcmF0aW9uCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIENtZCwgVFJVRSk7CisKKwkvLyBQb2xsIEFNSUlNIEluZGljYXRvciByZWdpc3RlciB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJVGltZW91dCA9IFNYR19MSU5LX1RJTUVPVVQ7CisJZG8geworCQl1ZGVsYXkoMTAwKTsJLy8gVGltZW91dCBpbiAxMDB1cyB1bml0cworCQlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltSW5kaWNhdG9yLCBWYWx1ZVJlYWQpOworCQlpZiAoLS1UaW1lb3V0ID09IDApIHsKKwkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJfSB3aGlsZSAoVmFsdWVSZWFkICYgQVhHTUFDX0FNSUlNX0lORENfQlVTWSk7CisKKwkvLyBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdAorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8vIE1JSU0gd3JpdGUgdG8gc2V0IHVwIGFuIE1ESU8gcmVnaXN0ZXIgcmVhZCBvcGVyYXRpb24KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCBSZWFkT3AsIFRSVUUpOworCisJLy8gV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdGhlIHJlYWQgb3BlcmF0aW9uCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIENtZCwgVFJVRSk7CisKKwkvLyBQb2xsIEFNSUlNIEluZGljYXRvciByZWdpc3RlciB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJVGltZW91dCA9IFNYR19MSU5LX1RJTUVPVVQ7CisJZG8geworCQl1ZGVsYXkoMTAwKTsJLy8gVGltZW91dCBpbiAxMDB1cyB1bml0cworCQlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltSW5kaWNhdG9yLCBWYWx1ZVJlYWQpOworCQlpZiAoLS1UaW1lb3V0ID09IDApIHsKKwkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJfSB3aGlsZSAoVmFsdWVSZWFkICYgQVhHTUFDX0FNSUlNX0lORENfQlVTWSk7CisKKwkvLyBSZWFkIHRoZSBNRElPIHJlZ2lzdGVyIGRhdGEgYmFjayBmcm9tIHRoZSBmaWVsZCByZWdpc3RlcgorCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgKnBWYWx1ZSk7CisJKnBWYWx1ZSAmPSAweEZGRkY7CS8vIGRhdGEgaXMgaW4gdGhlIGxvd2VyIDE2IGJpdHMKKworLy8gIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzeGdfbWNhc3RfYWRkX2xpc3QocF9hZGFwdGVyX3QgYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwlwX21jYXN0X2FkZHJlc3NfdCBtY2FkZHIsIG1saXN0OworCWJvb2wgZXF1YWxhZGRyOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCisJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCXdoaWxlIChtbGlzdCkgeworCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOworCQlpZiAoZXF1YWxhZGRyKSB7CisJCQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKKwkJfQorCQltbGlzdCA9IG1saXN0LT5uZXh0OworCX0KKworCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KKwltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihtY2FzdF9hZGRyZXNzX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAobWNhZGRyID09IE5VTEwpCisJCXJldHVybiAxOworCisJbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7CisKKwltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBvYnRhaW4gdGhlIENSQyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcy4KKyAqIFRoaXMgaXMgYSBzdGFuZGFyZCBldGhlcm5ldCBDUkMgaW4gdGhhdCBpdCBpcyBhIDMyLWJpdCwgcmVmbGVjdGVkIENSQyB1c2luZworICogdGhlIHBvbHlub21pYWw6CisgKiAgIHheMzIgKyB4XjI2ICsgeF4yMyArIHheMjIgKyB4XjE2ICsgeF4xMiArIHheMTEgKyB4XjEwICsgeF44ICsgeF43ICsgeF41ICsgeF40ICsgeF4yICsgeF4xLgorICoKKyAqIEFmdGVyIHRoZSBDUkMgZm9yIHRoZSA2IGJ5dGVzIGlzIGdlbmVyYXRlZCAoYnV0IGJlZm9yZSB0aGUgdmFsdWUgaXMgY29tcGxlbWVudGVkKSwKKyAqIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KKyAqCisgKi8KK3N0YXRpYyB1MzIgc3hnX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKgorICogIENvbnRydWN0IHRoZSBDUkMzMiB0YWJsZQorICovCitzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKQoreworCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgICAgICAgICAgICAgICAgICovCisJdTMyIGUgPSAwOwkJLyogIFBvbHkgWC1vciBwYXR0ZXJuICAgICAgICAgICAgKi8KKwlpbnQgaTsJCQkvKiAgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworCWludCBrOwkJCS8qICBieXRlIGJlaW5nIHNoaWZ0ZWQgaW50byBjcmMgICovCisKKwlzdGF0aWMgaW50IHBbXSA9IHsgMCwgMSwgMiwgNCwgNSwgNywgOCwgMTAsIDExLCAxMiwgMTYsIDIyLCAyMywgMjYgfTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocCkgLyBzaXplb2YoaW50KTsgaSsrKSB7CisJCWUgfD0gMUwgPDwgKDMxIC0gcFtpXSk7CisJfQorCisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisJCWMgPSBpOworCQlmb3IgKGsgPSA4OyBrOyBrLS0pIHsKKwkJCWMgPSBjICYgMSA/IChjID4+IDEpIF4gZSA6IGMgPj4gMTsKKwkJfQorCQlzeGdfY3JjX3RhYmxlW2ldID0gYzsKKwl9Cit9CisKKy8qCisgKiAgUmV0dXJuIHRoZSBNQUMgaGFzdCBhcyBkZXNjcmliZWQgYWJvdmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN4Z19tY2FzdF9nZXRfbWFjX2hhc2goY2hhciAqbWFjYWRkcikKK3sKKwl1MzIgY3JjOworCWNoYXIgKnA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBtYWNoYXNoID0gMDsKKworCWlmICghc3hnX2NyY19pbml0KSB7CisJCXN4Z19tY2FzdF9pbml0X2NyYzMyKCk7CisJCXN4Z19jcmNfaW5pdCA9IDE7CisJfQorCisJY3JjID0gMHhGRkZGRkZGRjsJLyogUHJlbG9hZCBzaGlmdCByZWdpc3RlciwgcGVyIGNyYy0zMiBzcGVjICovCisJZm9yIChpID0gMCwgcCA9IG1hY2FkZHI7IGkgPCA2OyArK3AsICsraSkgeworCQljcmMgPSAoY3JjID4+IDgpIF4gc3hnX2NyY190YWJsZVsoY3JjIF4gKnApICYgMHhGRl07CisJfQorCisJLyogUmV0dXJuIGJpdHMgMS04LCB0cmFuc3Bvc2VkICovCisJZm9yIChpID0gMTsgaSA8IDk7IGkrKykgeworCQltYWNoYXNoIHw9ICgoKGNyYyA+PiBpKSAmIDEpIDw8ICg4IC0gaSkpOworCX0KKworCXJldHVybiAobWFjaGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfYml0KHBfYWRhcHRlcl90IGFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCit7CisJdW5zaWduZWQgY2hhciBjcmNwb2x5OworCisJLyogR2V0IHRoZSBDUkMgcG9seW5vbWlhbCBmb3IgdGhlIG1hYyBhZGRyZXNzICovCisJY3JjcG9seSA9IHN4Z19tY2FzdF9nZXRfbWFjX2hhc2goYWRkcmVzcyk7CisKKwkvKiBXZSBvbmx5IGhhdmUgc3BhY2Ugb24gdGhlIFNMSUMgZm9yIDY0IGVudHJpZXMuICBMb3AKKwkgKiBvZmYgdGhlIHRvcCB0d28gYml0cy4gKDJeNiA9IDY0KQorCSAqLworCWNyY3BvbHkgJj0gMHgzRjsKKworCS8qIE9SIGluIHRoZSBuZXcgYml0IGludG8gb3VyIDY0IGJpdCBtYXNrLiAqLworCWFkYXB0ZXItPk11bHRpY2FzdE1hc2sgfD0gKHU2NCkgMSA8PCBjcmNwb2x5OworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3QocF9uZXRfZGV2aWNlIGRldikKK3sKKyNpZiBYWFhUT0RPCisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJaW50IGk7CisJY2hhciAqYWRkcmVzc2VzOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCisJQVNTRVJUKGFkYXB0ZXIpOworCisJZm9yIChpID0gMTsgaSA8PSBtY19jb3VudDsgaSsrKSB7CisJCWFkZHJlc3NlcyA9IChjaGFyICopJm1jX2xpc3QtPmRtaV9hZGRyOworCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikgeworCQkJc3RhdHVzID0gc3hnX21jYXN0X2FkZF9saXN0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc3hnX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CisJfQorCisJREJHX0VSUk9SKCIlcyBhLT5kZXZmbGFnc19wcmV2WyV4XSBkZXYtPmZsYWdzWyV4XSBzdGF0dXNbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKKwlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7CisJCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJCWlmIChkZXYtPmZsYWdzKSB7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJfQorCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgeworCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQkJfQorCQl9CisJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCQlEQkdfRVJST1IoIiVzIGNhbGwgc3hnX2NvbmZpZ19zZXQgYWRhcHRlci0+bWFjb3B0c1sleF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bWFjb3B0cyk7CisJCXN4Z19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCX0gZWxzZSB7CisJCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCXN4Z19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9tYXNrKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19VQ09ERV9SRUdTIHN4Z19yZWdzID0gYWRhcHRlci0+VWNvZGVSZWdzOworCisJREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1bnNpZ25lZCBpbnQpYWRhcHRlci0+TWFjRmlsdGVyLAorCQkgIGFkYXB0ZXItPk11bHRpY2FzdE1hc2spOworCisJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKKwkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvciBwcm9taXNjdW91cworCQkgKiBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZSBNaWNyb2NvZGUgZnJvbSBoYXZpbmcKKwkJICogdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDIGNvbmZpZ3VyYXRpb24uCisJCSAqLworLy8gICAgICAgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcbiAgICAgIFNMVVQgTU9ERSEhIVxuIixfX0ZVTkNUSU9OX18pOworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0TG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RIaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7CisvLyAgICAgICAgREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIHRvIHNsaWNfcmVncyBzbGljX21jYXN0bG93JmhpZ2ggMHhGRkZGRkZGRlxuIixfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwl9IGVsc2UgeworCQkvKiBDb21taXQgb3VyIG11bHRpY2FzdCBtYXN0IHRvIHRoZSBTTElDIGJ5IHdyaXRpbmcgdG8gdGhlIG11bHRpY2FzdAorCQkgKiBhZGRyZXNzIG1hc2sgcmVnaXN0ZXJzCisJCSAqLworCQlEQkdfRVJST1IoIiVzICglcykgV1JJVEUgbWNhc3Rsb3dbJWx4XSBtY2FzdGhpZ2hbJWx4XVxuIiwKKwkJCSAgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkgICgodWxvbmcpIChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrICYgMHhGRkZGRkZGRikpLAorCQkJICAoKHVsb25nKQorCQkJICAgKChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpKSk7CisKKwkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdExvdywKKwkJCSAgKHUzMikgKGFkYXB0ZXItPk11bHRpY2FzdE1hc2sgJiAweEZGRkZGRkZGKSwgRkxVU0gpOworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0SGlnaCwKKwkJCSAgKHUzMikgKChhZGFwdGVyLT4KKwkJCQkgIE11bHRpY2FzdE1hc2sgPj4gMzIpICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN4Z191bm1hcF9tbWlvX3NwYWNlKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisjaWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKKy8vICAgICAgaWYgKGFkYXB0ZXItPlJlZ3MpIHsKKy8vICAgICAgICAgICAgICBpb3VubWFwKGFkYXB0ZXItPlJlZ3MpOworLy8gICAgICB9CisvLyAgICAgIGFkYXB0ZXItPnNsaWNfcmVncyA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmIFhYWFRPRE8KKy8qCisgKiBTeGdGcmVlUmVzb3VyY2VzIC0gRnJlZSBldmVyeXRoaW5nIGFsbG9jYXRlZCBpbiBTeGdBbGxvY2F0ZVJlc291cmNlcworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCW5vbmUKKyAqLwordm9pZCBTeGdGcmVlUmVzb3VyY2VzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFJzc0lkcywgSXNyQ291bnQ7CisJUFRDUF9PQkpFQ1QgVGNwT2JqZWN0OworCXUzMiBpOworCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGcmVlUmVzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKKworCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOworCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisKKwlpZiAoYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9PSBGQUxTRSkgeworCQkvLyBObyBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSwgaW5jbHVkaW5nIHNwaW5sb2NrcywKKwkJLy8gb3IgbGlzdGhlYWQgaW5pdGlhbGl6YXRpb25zLiAgUmV0dXJuLgorCQlyZXR1cm47CisJfQorCisJaWYgKCEoSXNMaXN0RW1wdHkoJmFkYXB0ZXItPkFsbFJjdkJsb2NrcykpKSB7CisJCVN4Z0ZyZWVSY3ZCbG9ja3MoYWRhcHRlcik7CisJfQorCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKSkpIHsKKwkJU3hnRnJlZVNnbEJ1ZmZlcnMoYWRhcHRlcik7CisJfQorCS8vIEZyZWUgZXZlbnQgcXVldWVzLgorCWlmIChhZGFwdGVyLT5FdmVudFJpbmdzKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YoU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzLAorCQkJCSAgICBhZGFwdGVyLT5FdmVudFJpbmdzLCBhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisJfQorCWlmIChhZGFwdGVyLT5Jc3IpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCisJCQkJICAgIGFkYXB0ZXItPklzciwgYWRhcHRlci0+UElzcik7CisJfQorCWlmIChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4KSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YodTMyKSwKKwkJCQkgICAgYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCwKKwkJCQkgICAgYWRhcHRlci0+UFhtdFJpbmdaZXJvSW5kZXgpOworCX0KKwlpZiAoYWRhcHRlci0+SW5kaXJlY3Rpb25UYWJsZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgU1hHX01BWF9SU1NfVEFCTEVfU0laRSwKKwkJCQkgICAgYWRhcHRlci0+SW5kaXJlY3Rpb25UYWJsZSwKKwkJCQkgICAgYWRhcHRlci0+UEluZGlyZWN0aW9uVGFibGUpOworCX0KKworCVNYR19GUkVFX1BBQ0tFVF9QT09MKGFkYXB0ZXItPlBhY2tldFBvb2xIYW5kbGUpOworCVNYR19GUkVFX0JVRkZFUl9QT09MKGFkYXB0ZXItPkJ1ZmZlclBvb2xIYW5kbGUpOworCisJLy8gVW5tYXAgcmVnaXN0ZXIgc3BhY2VzCisJU3hnVW5tYXBSZXNvdXJjZXMoYWRhcHRlcik7CisKKwkvLyBEZXJlZ2lzdGVyIERNQQorCWlmIChhZGFwdGVyLT5EbWFIYW5kbGUpIHsKKwkJU1hHX0RFUkVHSVNURVJfRE1BKGFkYXB0ZXItPkRtYUhhbmRsZSk7CisJfQorCS8vIERlcmVnaXN0ZXIgaW50ZXJydXB0CisJU3hnRGVyZWdpc3RlckludGVycnVwdChhZGFwdGVyKTsKKworCS8vIFBvc3NpYmx5IGZyZWUgc3lzdGVtIGluZm8gKDUuMiBvbmx5KQorCVNYR19SRUxFQVNFX1NZU1RFTV9JTkZPKGFkYXB0ZXIpOworCisJU3hnRGlhZ0ZyZWVSZXNvdXJjZXMoYWRhcHRlcik7CisKKwlTeGdGcmVlTUNhc3RBZGRycyhhZGFwdGVyKTsKKworCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJlc2V0VGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lciwgVGltZXJDYW5jZWxsZWQpOworCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5SZXNldFRpbWVyKTsKKwl9CisJaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+UnNzVGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UnNzVGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKKwkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UnNzVGltZXIpOworCX0KKwlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5PZmZsb2FkVGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+T2ZmbG9hZFRpbWVyLCBUaW1lckNhbmNlbGxlZCk7CisJCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lcik7CisJfQorCisJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IEZBTFNFOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZyZWVSZXMiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPk1heFRjYnMsIDAsIDApOworfQorI2VuZGlmCisKKy8qCisgKiBzeGdfYWxsb2NhdGVfY29tcGxldGUgLQorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGhhcyBjb21wbGV0ZWQuCisgKgorICogQXJndW1lbnRzIC0KKyAqCXBfYWRhcHRlcl90ICAgIAktIE91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJVmlydHVhbEFkZHJlc3MJLSBNZW1vcnkgdmlydHVhbCBhZGRyZXNzCisgKglQaHlzaWNhbEFkZHJlc3MJLSBNZW1vcnkgcGh5c2ljYWwgYWRkcmVzcworICoJTGVuZ3RoCQktIExlbmd0aCBvZiBtZW1vcnkgYWxsb2NhdGVkIChvciAwKQorICoJQ29udGV4dAkJLSBUaGUgdHlwZSBvZiBidWZmZXIgYWxsb2NhdGVkCisgKgorICogUmV0dXJuCisgKglOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfY29tcGxldGUocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgIHZvaWQgKlZpcnR1YWxBZGRyZXNzLAorCQkJCSAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJICB1MzIgTGVuZ3RoLCBTWEdfQlVGRkVSX1RZUEUgQ29udGV4dCkKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGxvY0NtcCIsCisJCSAgYWRhcHRlciwgVmlydHVhbEFkZHJlc3MsIExlbmd0aCwgQ29udGV4dCk7CisJQVNTRVJUKGFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZyk7CisJLS1hZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmc7CisKKwlzd2l0Y2ggKENvbnRleHQpIHsKKworCWNhc2UgU1hHX0JVRkZFUl9UWVBFX1JDVjoKKwkJc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKGFkYXB0ZXIsCisJCQkJCSAgICAgICBWaXJ0dWFsQWRkcmVzcywKKwkJCQkJICAgICAgIFBoeXNpY2FsQWRkcmVzcywgTGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSBTWEdfQlVGRkVSX1RZUEVfU0dMOgorCQlzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShhZGFwdGVyLCAoUFNYR19TQ0FUVEVSX0dBVEhFUikKKwkJCQkJCSBWaXJ0dWFsQWRkcmVzcywKKwkJCQkJCSBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7CisJCWJyZWFrOworCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxvY0NtcCIsCisJCSAgYWRhcHRlciwgVmlydHVhbEFkZHJlc3MsIExlbmd0aCwgQ29udGV4dCk7Cit9CisKKy8qCisgKiBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeSAtIFNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lIHVzZWQgZm9yCisgKgkJc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKglTaXplCQktIGJsb2NrIHNpemUgdG8gYWxsb2NhdGUKKyAqCUJ1ZmZlclR5cGUJLSBUeXBlIG9mIGJ1ZmZlciB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybgorICoJaW50CisgKi8KK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgICAgICB1MzIgU2l6ZSwgU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpCdWZmZXI7CisJZG1hX2FkZHJfdCBwQnVmZmVyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NNZW0iLAorCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOworCS8vIEdyYWIgdGhlIGFkYXB0ZXIgbG9jayBhbmQgY2hlY2sgdGhlIHN0YXRlLgorCS8vIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyIHRoYW4gSU5JVElBTElaSU5HIG9yCisJLy8gUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudAorCS8vIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZQorCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCisJLy8gSW5jcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCS8vIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcworCSsrYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisKKwkvLyBBdCBpbml0aWFsaXphdGlvbiB0aW1lIGFsbG9jYXRlIHJlc291cmNlcyBzeW5jaHJvbm91c2x5LgorCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgU2l6ZSwgJnBCdWZmZXIpOworCWlmIChCdWZmZXIgPT0gTlVMTCkgeworCQlzcGluX2xvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJLy8gRGVjcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCQkvLyB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMKKwkJLS1hZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmc7CisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsY01lbUYxIiwKKwkJCSAgYWRhcHRlciwgU2l6ZSwgQnVmZmVyVHlwZSwgMCk7CisJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CisJfQorCXN4Z19hbGxvY2F0ZV9jb21wbGV0ZShhZGFwdGVyLCBCdWZmZXIsIHBCdWZmZXIsIFNpemUsIEJ1ZmZlclR5cGUpOworCXN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NNZW0iLAorCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIHN0YXR1cyk7CisJcmV0dXJuIChzdGF0dXMpOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlIC0gQ29tcGxldGUgYSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgYWxsb2NhdGlvbgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJUmN2QmxvY2sJCQktIHJlY2VpdmUgYmxvY2sgdmlydHVhbCBhZGRyZXNzCisgKglQaHlzaWNhbEFkZHJlc3MJCS0gUGh5c2ljYWwgYWRkcmVzcworICoJTGVuZ3RoCQkJCS0gTWVtb3J5IGxlbmd0aAorICoKKyAqIFJldHVybgorICoKKyAqLworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHZvaWQgKlJjdkJsb2NrLAorCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgdTMyIExlbmd0aCkKK3sKKwl1MzIgaTsKKwl1MzIgQnVmZmVyU2l6ZSA9IGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplOworCXU2NCBQYWRkcjsKKwlQU1hHX1JDVl9CTE9DS19IRFIgUmN2QmxvY2tIZHI7CisJdW5zaWduZWQgY2hhciAqUmN2RGF0YUJ1ZmZlcjsKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLIFJjdkRlc2NyaXB0b3JCbG9jazsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiBSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFJjdkJsayIsCisJCSAgYWRhcHRlciwgUmN2QmxvY2ssIExlbmd0aCwgMCk7CisJaWYgKFJjdkJsb2NrID09IE5VTEwpIHsKKwkJZ290byBmYWlsOworCX0KKwltZW1zZXQoUmN2QmxvY2ssIDAsIExlbmd0aCk7CisJQVNTRVJUKChCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKKwkgICAgICAgKEJ1ZmZlclNpemUgPT0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRSkpOworCUFTU0VSVChMZW5ndGggPT0gU1hHX1JDVl9CTE9DS19TSVpFKEJ1ZmZlclNpemUpKTsKKwkvLyBGaXJzdCwgaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVkIHBvb2wgb2YgcmVjZWl2ZSBkYXRhCisJLy8gYnVmZmVycy4gIFRoaXMgaW5pdGlhbGl6YXRpb24gcmVxdWlyZXMgTkJML05CL01ETCBhbGxvY2F0aW9ucywKKwkvLyBJZiBhbnkgb2YgdGhlbSBmYWlsLCBmcmVlIHRoZSBibG9jayBhbmQgcmV0dXJuIHdpdGhvdXQKKwkvLyBxdWV1ZWluZyB0aGUgc2hhcmVkIG1lbW9yeQorCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKyNpZiAwCisJZm9yIChpID0gMCwgUGFkZHIgPSAqUGh5c2ljYWxBZGRyZXNzOworCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCSAgICAgaSsrLCBQYWRkci5Mb3dQYXJ0ICs9IEJ1ZmZlclNpemUsIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkKKyNlbmRpZgorCQlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKKwkJICAgICBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJCSAgICAgaSsrLCBQYWRkciArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJCS8vCisJCQlSY3ZEYXRhQnVmZmVySGRyID0KKwkJCSAgICAoUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKSAoUmN2RGF0YUJ1ZmZlciArCisJCQkJCQkJU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFJfT0ZGU0VUCisJCQkJCQkJKEJ1ZmZlclNpemUpKTsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzID0gUmN2RGF0YUJ1ZmZlcjsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzcyA9IFBhZGRyOworCQkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX1VQU1RSRUFNOwkvLyBGb3IgRlJFRSBtYWNybyBhc3NlcnRpb24KKwkJCVJjdkRhdGFCdWZmZXJIZHItPlNpemUgPQorCQkJICAgIFNYR19SQ1ZfQlVGRkVSX0RBVEFfU0laRShCdWZmZXJTaXplKTsKKworCQkJU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7CisJCQlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9PSBOVUxMKQorCQkJCWdvdG8gZmFpbDsKKworCQl9CisKKwkvLyBQbGFjZSB0aGlzIGVudGlyZSBibG9jayBvZiBtZW1vcnkgb24gdGhlIEFsbFJjdkJsb2NrcyBxdWV1ZSBzbyBpdCBjYW4gYmUKKwkvLyBmcmVlIGxhdGVyCisJUmN2QmxvY2tIZHIgPQorCSAgICAoUFNYR19SQ1ZfQkxPQ0tfSERSKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCisJCQkJICBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoQnVmZmVyU2l6ZSkpOworCVJjdkJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkJsb2NrOworCVJjdkJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQaHlzaWNhbEFkZHJlc3M7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCsrOworCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MsICZSY3ZCbG9ja0hkci0+QWxsTGlzdCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKworCS8vIE5vdyBmcmVlIHRoZSBjb250YWluZWQgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgdGhhdCB3ZSBpbml0aWFsaXplZCBhYm92ZQorCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKKwkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7CisJCVJjdkRhdGFCdWZmZXJIZHIgPSAoUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKSAoUmN2RGF0YUJ1ZmZlciArCisJCQkJCQkJICAgICAgIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCSAgICAgICAoQnVmZmVyU2l6ZSkpOworCQlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCX0KKworCS8vIExvY2F0ZSB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgcHV0IGl0IG9uIGEgc2VwYXJhdGUgZnJlZSBxdWV1ZQorCVJjdkRlc2NyaXB0b3JCbG9jayA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCisJCQkJCSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUCisJCQkJCSAoQnVmZmVyU2l6ZSkpOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCQkgICAgIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFJfT0ZGU0VUCisJCQkJCSAgICAgKEJ1ZmZlclNpemUpKTsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzID0gUmN2RGVzY3JpcHRvckJsb2NrOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGFkZHI7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFJCbGsiLAorCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOworCXJldHVybjsKKyAgICAgIGZhaWw6CisJLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcworCWlmIChSY3ZCbG9jaykgeworCQlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisJCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkJICAgICBpKyssIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkgeworCQkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkgICAgKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQlTWEdfRlJFRV9SQ1ZfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHIpOworCQl9CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBMZW5ndGgsIFJjdkJsb2NrLCBQaHlzaWNhbEFkZHJlc3MpOworCX0KKwlEQkdfRVJST1IoIiVzOiBPVVQgT0YgUkVTT1VSQ0VTXG4iLCBfX0ZVTkNUSU9OX18pOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJSY3ZBRmFpbCIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKwlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUgLSBDb21wbGV0ZSBhIFNHTCBidWZmZXIgYWxsb2NhdGlvbgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJU3hnU2dsCQkJCS0gU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcgorICoJUGh5c2ljYWxBZGRyZXNzCQktIFBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKKyAqCisgKiBSZXR1cm4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgICAgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgICAgdTMyIExlbmd0aCkKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFNnbENtcCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworCXNwaW5fbG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCWFkYXB0ZXItPkFsbFNnbEJ1ZmZlckNvdW50Kys7CisJbWVtc2V0KFN4Z1NnbCwgMCwgc2l6ZW9mKFNYR19TQ0FUVEVSX0dBVEhFUikpOworCVN4Z1NnbC0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwkvKiAqUGh5c2ljYWxBZGRyZXNzOyAqLworCVN4Z1NnbC0+YWRhcHRlciA9IGFkYXB0ZXI7CS8vIEluaXRpYWxpemUgYmFja3BvaW50ZXIgb25jZQorCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzLCAmU3hnU2dsLT5BbGxMaXN0KTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCVN4Z1NnbC0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CisJU1hHX0ZSRUVfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIE5VTEwpOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFNnbCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZW1wX21hY19hZGRyZXNzWzZdID0KKyAgICB7IDB4MDAsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MTIsIDB4NjkgfTsKKworc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworLy8gIERCR19FUlJPUiAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sCisvLyAgICAgICAgICAgICBjYXJkLT5jb25maWdfc2V0LCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLT5waHlzcG9ydCwgYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIpOworLy8KKy8vICBzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCisJbWVtY3B5KGFkYXB0ZXItPm1hY2FkZHIsIHRlbXBfbWFjX2FkZHJlc3MsIHNpemVvZihTWEdfQ09ORklHX01BQykpOworLy8gICAgICBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwgX19GVU5DVElPTl9fKTsKKy8vICAgICAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdIHx8CisJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdIHx8IGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKSkgeworCQltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkYXB0ZXItPm1hY2FkZHIsIDYpOworCX0KKwlpZiAoYWRhcHRlci0+bmV0ZGV2KSB7CisJCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwgNik7CisJfQorLy8gIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5wb3J0KTsKKwlzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCit9CisKK3N0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpCit7CisjaWYgWFhYVE9ETworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOworCisJREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghYWRhcHRlcikgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBuZXcgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCisJc3hnX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKiogIFNYRyBEUklWRVIgRlVOQ1RJT05TICAoYmVsb3cpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3hnX2luaXRpYWxpemVfYWRhcHRlciAtIEluaXRpYWxpemUgYWRhcHRlcgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwl1MzIgUnNzSWRzLCBJc3JDb3VudDsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5pdEFkcHQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJUnNzSWRzID0gMTsJCS8vICBYWFhUT0RPICBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJLy8gU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvCisJLy8gbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdAorCUFTU0VSVChzaXplb2YoU1hHX1VDT0RFX1JFR1MpID09IFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUpOworCisJLy8gRGlzYWJsZSBpbnRlcnJ1cHRzCisJU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoYWRhcHRlcik7CisKKwkvLyBTZXQgTVRVCisJQVNTRVJUKChhZGFwdGVyLT5GcmFtZVNpemUgPT0gRVRIRVJNQVhGUkFNRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPkZyYW1lU2l6ZSA9PSBKVU1CT01BWEZSQU1FKSk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5MaW5rTXR1LCBhZGFwdGVyLT5GcmFtZVNpemUsIFRSVUUpOworCisJLy8gU2V0IGV2ZW50IHJpbmcgYmFzZSBhZGRyZXNzIGFuZCBzaXplCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5FdmVudEJhc2UsIGFkYXB0ZXItPlBFdmVudFJpbmdzLCAwKTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkV2ZW50U2l6ZSwgRVZFTlRfUklOR19TSVpFLCBUUlVFKTsKKworCS8vIFBlci1JU1IgaW5pdGlhbGl6YXRpb24KKwlmb3IgKGkgPSAwOyBpIDwgSXNyQ291bnQ7IGkrKykgeworCQl1NjQgQWRkcjsKKwkJLy8gU2V0IGludGVycnVwdCBzdGF0dXMgcG9pbnRlcgorCQlBZGRyID0gYWRhcHRlci0+UElzciArIChpICogc2l6ZW9mKHUzMikpOworCQlXUklURV9SRUc2NChhZGFwdGVyLCBhZGFwdGVyLT5VY29kZVJlZ3NbaV0uSXNwLCBBZGRyLCBpKTsKKwl9CisKKwkvLyBYTVQgcmluZyB6ZXJvIGluZGV4CisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5TUFNlbmRJbmRleCwKKwkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4LCAwKTsKKworCS8vIFBlci1SU1MgaW5pdGlhbGl6YXRpb24KKwlmb3IgKGkgPSAwOyBpIDwgUnNzSWRzOyBpKyspIHsKKwkJLy8gUmVsZWFzZSBhbGwgZXZlbnQgcmluZyBlbnRyaWVzIHRvIHRoZSBNaWNyb2NvZGUKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tpXS5FdmVudFJlbGVhc2UsIEVWRU5UX1JJTkdfU0laRSwKKwkJCSAgVFJVRSk7CisJfQorCisJLy8gVHJhbnNtaXQgcmluZyBiYXNlIGFuZCBzaXplCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5YbXRCYXNlLCBhZGFwdGVyLT5QWG10UmluZ3MsIDApOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10U2l6ZSwgU1hHX1hNVF9SSU5HX1NJWkUsIFRSVUUpOworCisJLy8gUmVjZWl2ZSByaW5nIGJhc2UgYW5kIHNpemUKKwlXUklURV9SRUc2NChhZGFwdGVyLAorCQkgICAgYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkJhc2UsIGFkYXB0ZXItPlBSY3ZSaW5ncywgMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZTaXplLCBTWEdfUkNWX1JJTkdfU0laRSwgVFJVRSk7CisKKwkvLyBQb3B1bGF0ZSB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycworCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKworCS8vIEluaXRpYWxpemUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMuICBBdCB0aGUgbW9tZW50CisJLy8gd2UgYWx3YXlzIGVuYWJsZSBJUCBhbmQgVENQIHJlY2VpdmUgY2hlY2tzdW1zIG9uIHRoZSBjYXJkLgorCS8vIERlcGVuZGluZyBvbiB0aGUgY2hlY2tzdW0gY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisJLy8gdXNlciwgd2UgY2FuIGNob29zZSB0byByZXBvcnQgb3IgaWdub3JlIHRoZSBjaGVja3N1bQorCS8vIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLgorCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmVjZWl2ZUNoZWNrc3VtLAorCQkgIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVELCBUUlVFKTsKKworCS8vIEluaXRpYWxpemUgdGhlIE1BQywgWEFVSQorCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9saW5rXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2xpbmsoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRpYWxpemVfbGluayBzdGF0dXNbJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisJLy8gSW5pdGlhbGl6ZSBEZWFkIHRvIEZBTFNFLgorCS8vIFNsaWNDaGVja0Zvckhhbmcgb3IgU2xpY0R1bXBUaHJlYWQgd2lsbCB0YWtlIGl0IGZyb20gaGVyZS4KKwlhZGFwdGVyLT5EZWFkID0gRkFMU0U7CisJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYSW5pdCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfZmlsbF9kZXNjcmlwdG9yX2Jsb2NrIC0gUG9wdWxhdGUgYSBkZXNjcmlwdG9yIGJsb2NrIGFuZCBnaXZlIGl0IHRvCisgKiB0aGUgY2FyZC4gIFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgdGhlIFJjdlFMb2NrCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogIFJjdkRlc2NyaXB0b3JCbG9ja0hkcgktIERlc2NyaXB0b3IgYmxvY2sgdG8gZmlsbAorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCSAgICAgUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIKKwkJCQkgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcikKK3sKKwl1MzIgaTsKKwlQU1hHX1JJTkdfSU5GTyBSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBSY3ZEZXNjcmlwdG9yQmxvY2s7CisJUFNYR19DTUQgUmluZ0Rlc2NyaXB0b3JDbWQ7CisJUFNYR19SQ1ZfUklORyBSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkZpbEJsayIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworCisJQVNTRVJUKFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisKKwkvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gZmlsbCB0aGUgZGVzY3JpcHRvciBibG9jaywKKwkvLyByZXR1cm4gZmFpbHVyZQorCWlmICgoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHx8CisJICAgIFNYR19SSU5HX0ZVTEwoUmN2UmluZ0luZm8pKSB7CisJCWFkYXB0ZXItPlN0YXRzLk5vTWVtKys7CisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCX0KKwkvLyBHZXQgYSByaW5nIGRlc2NyaXB0b3IgY29tbWFuZAorCVNYR19HRVRfQ01EKFJpbmdaZXJvLAorCQkgICAgUmN2UmluZ0luZm8sIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCUFTU0VSVChSaW5nRGVzY3JpcHRvckNtZCk7CisJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfT05DQVJEOworCVJjdkRlc2NyaXB0b3JCbG9jayA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSBSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzOworCisJLy8gRmlsbCBpbiB0aGUgZGVzY3JpcHRvciBibG9jaworCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsgaSsrKSB7CisJCVNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CisJCVNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKKwkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKKwkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5WaXJ0dWFsQWRkcmVzcyA9CisJCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uUGh5c2ljYWxBZGRyZXNzID0KKwkJICAgIFJjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzczsKKwl9CisJLy8gQWRkIHRoZSBkZXNjcmlwdG9yIGJsb2NrIHRvIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nIDAKKwlSaW5nRGVzY3JpcHRvckNtZC0+U2dsID0gUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3M7CisKKwkvLyBSY3ZCdWZmZXJzT25DYXJkIGlzIG5vdCBwcm90ZWN0ZWQgdmlhIHRoZSByZWNlaXZlIGxvY2sgKHNlZQorCS8vIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKSBXZSBkb24ndCB3YW50IHRvIGdyYXAgYSBsb2NrIGV2ZXJ5IHRpbWUgYQorCS8vIGJ1ZmZlciBpcyByZXR1cm5lZCB0byB1cywgc28gd2UgdXNlIGF0b21pYyBpbnRlcmxvY2tlZCBmdW5jdGlvbnMKKwkvLyBpbnN0ZWFkLgorCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEc2NCbGsiLAorCQkgIFJjdkRlc2NyaXB0b3JCbG9ja0hkciwKKwkJICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsKTsKKworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2Q21kLCAxLCB0cnVlKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRmlsQmxrIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfc3RvY2tfcmN2X2J1ZmZlcnMgLSBTdG9jayB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiU3RvY2tCdWYiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCisJCSAgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKwkvLyBGaXJzdCwgc2VlIGlmIHdlJ3ZlIGdvdCBsZXNzIHRoYW4gb3VyIG1pbmltdW0gdGhyZXNob2xkIG9mCisJLy8gcmVjZWl2ZSBidWZmZXJzLCB0aGVyZSBpc24ndCBhbiBhbGxvY2F0aW9uIGluIHByb2dyZXNzLCBhbmQKKwkvLyB3ZSBoYXZlbid0IGV4Y2VlZGVkIG91ciBtYXhpbXVtLi4gZ2V0IGFub3RoZXIgYmxvY2sgb2YgYnVmZmVycworCS8vIE5vbmUgb2YgdGhpcyBuZWVkcyB0byBiZSBTTVAgc2FmZS4gIEl0J3Mgcm91bmQgbnVtYmVycy4KKwlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUykgJiYKKwkgICAgKGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPCBTWEdfTUFYX1JDVl9CTE9DS1MpICYmCisJICAgIChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcgPT0gMCkpIHsKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgorCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7CisJfQorCS8vIE5vdyBncmFiIHRoZSBSY3ZRTG9jayBsb2NrIGFuZCBwcm9jZWVkCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJd2hpbGUgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBTWEdfUkNWX0RBVEFfQlVGRkVSUykgeworCQlQTElTVF9FTlRSWSBfcGxlOworCisJCS8vIEdldCBhIGRlc2NyaXB0b3IgYmxvY2sKKwkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0gTlVMTDsKKwkJaWYgKGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50KSB7CisJCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJmFkYXB0ZXItPkZyZWVSY3ZCbG9ja3MpOworCQkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0KKwkJCSAgICBjb250YWluZXJfb2YoX3BsZSwgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiwKKwkJCQkJIEZyZWVMaXN0KTsKKwkJCWFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LS07CisJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOworCQl9CisKKwkJaWYgKFJjdkRlc2NyaXB0b3JCbG9ja0hkciA9PSBOVUxMKSB7CisJCQkvLyBCYWlsIG91dC4uCisJCQlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRmlsbCBpbiB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgZ2l2ZSBpdCB0byB0aGUgY2FyZAorCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpID09CisJCSAgICBTVEFUVVNfRkFJTFVSRSkgeworCQkJLy8gRnJlZSB0aGUgZGVzY3JpcHRvciBibG9jaworCQkJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwKKwkJCQkJCSAgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGaWxCbGtzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7Cit9CisKKy8qCisgKiBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgLSBSZXR1cm4gZGVzY3JpcHRvciBibG9ja3MgdGhhdCBoYXZlIGJlZW4KKyAqIGNvbXBsZXRlZCBieSB0aGUgbWljcm9jb2RlCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJSW5kZXgJCS0gV2hlcmUgdGhlIG1pY3JvY29kZSBpcyB1cCB0bworICoKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkJICAgdW5zaWduZWQgY2hhciBJbmRleCkKK3sKKwlQU1hHX1JDVl9SSU5HIFJpbmdaZXJvID0gJmFkYXB0ZXItPlJjdlJpbmdzWzBdOworCVBTWEdfUklOR19JTkZPIFJjdlJpbmdJbmZvID0gJmFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbzsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiBSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJUFNYR19DTUQgUmluZ0Rlc2NyaXB0b3JDbWQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBSQmxrcyIsCisJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CisKKwkvLyBOb3cgZ3JhYiB0aGUgUmN2UUxvY2sgbG9jayBhbmQgcHJvY2VlZAorCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCUFTU0VSVChJbmRleCAhPSBSY3ZSaW5nSW5mby0+VGFpbCk7CisJd2hpbGUgKFJjdlJpbmdJbmZvLT5UYWlsICE9IEluZGV4KSB7CisJCS8vCisJCS8vIExvY2F0ZSB0aGUgY3VycmVudCBDbWQgKHJpbmcgZGVzY3JpcHRvciBlbnRyeSksIGFuZAorCQkvLyBhc3NvY2lhdGVkIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaywgYW5kIGFkdmFuY2UKKwkJLy8gdGhlIHRhaWwKKwkJLy8KKwkJU1hHX1JFVFVSTl9DTUQoUmluZ1plcm8sCisJCQkgICAgICAgUmN2UmluZ0luZm8sCisJCQkgICAgICAgUmluZ0Rlc2NyaXB0b3JDbWQsIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFJCbGsiLAorCQkJICBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwsCisJCQkgIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJCS8vIENsZWFyIHRoZSBTR0wgZmllbGQKKwkJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IDA7CisJCS8vIEF0dGVtcHQgdG8gcmVmaWxsIGl0IGFuZCBoYW5kIGl0IHJpZ2h0IGJhY2sgdG8gdGhlCisJCS8vIGNhcmQuICBJZiB3ZSBmYWlsIHRvIHJlZmlsbCBpdCwgZnJlZSB0aGUgZGVzY3JpcHRvciBibG9jaworCQkvLyBoZWFkZXIuICBUaGUgY2FyZCB3aWxsIGJlIHJlc3RvY2tlZCBsYXRlciB2aWEgdGhlCisJCS8vIFJjdkJ1ZmZlcnNPbkNhcmQgdGVzdAorCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpID09CisJCSAgICBTVEFUVVNfRkFJTFVSRSkgeworCQkJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwKKwkJCQkJCSAgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQ1JCbGtzIiwKKwkJICBhZGFwdGVyLCBJbmRleCwgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN4Z19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBzeGdfcGNpX3RibCwKKwkucHJvYmUgPSBzeGdfZW50cnlfcHJvYmUsCisJLnJlbW92ZSA9IHN4Z19lbnRyeV9yZW1vdmUsCisjaWYgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAorCS5zdXNwZW5kID0gc3hncG1fc3VzcGVuZCwKKwkucmVzdW1lID0gc3hncG1fcmVzdW1lLAorI2VuZGlmCisvKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgc3hnX21vZHVsZV9pbml0KHZvaWQpCit7CisJc3hnX2luaXRfZHJpdmVyKCk7CisKKwlpZiAoZGVidWcgPj0gMCkKKwkJc3hnX2RlYnVnID0gZGVidWc7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3hnX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeGdfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnN4Z19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzeGdfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc3hnX21vZHVsZV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NGNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCkBAIC0wLDAgKzEsNzczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAkSWQ6IHN4Zy5oLHYgMS4zIDIwMDgvMDcvMjQgMTc6MjU6MDggY2hyaXMgRXhwICQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Zy5oCisgKgorICogVGhpcyBpcyB0aGUgYmFzZSBzZXQgb2YgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgU1hHIGRyaXZlci4KKyAqLworI2lmbmRlZiBfX1NYR19EUklWRVJfSF9fCisjZGVmaW5lIF9fU1hHX0RSSVZFUl9IX18KKworI2RlZmluZSBwX25ldF9kZXZpY2Ugc3RydWN0IG5ldF9kZXZpY2UgKgorLy8gU1hHX1NUQVRTIC0gUHJvYmFibHkgbW92ZSB0aGVzZSB0byBzb21lcGxhY2Ugd2hlcmUKKy8vIHRoZSBzbGljc3RhdCAoc3hnc3RhdD8pIHByb2dyYW0gY2FuIGdldCB0aGVtLgordHlwZWRlZiBzdHJ1Y3QgX1NYR19TVEFUUyB7CisJLy8gWG10CisJdTMyCQkJCVhtdE5CTDsJCQkJLy8gT2ZmbG9hZCBzZW5kIE5CTCBjb3VudAorCXU2NAkJCQlEdW1iWG10Qnl0ZXM7CQkvLyBEdW1ibmljIHNlbmQgYnl0ZXMKKwl1NjQJCQkJU2xvd1htdEJ5dGVzOwkJLy8gU2xvd3BhdGggc2VuZCBieXRlcworCXU2NAkJCQlGYXN0WG10Qnl0ZXM7CQkvLyBGYXN0cGF0aCBzZW5kIGJ5dGVzCisJdTY0CQkJCUR1bWJYbXRQa3RzOwkJLy8gRHVtYm5pYyBzZW5kIHBhY2tldHMKKwl1NjQJCQkJU2xvd1htdFBrdHM7CQkvLyBTbG93cGF0aCBzZW5kIHBhY2tldHMKKwl1NjQJCQkJRmFzdFhtdFBrdHM7CQkvLyBGYXN0cGF0aCBzZW5kIHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdFVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cworICAgIHU2NAkJCQlEdW1iWG10TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cworICAgIHU2NAkJCQlEdW1iWG10QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCisgICAgdTY0CQkJCUR1bWJYbXRVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJRHVtYlhtdE1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJRHVtYlhtdEJjYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJWG10RXJyb3JzOwkJCS8vIE9JRF9HRU5fWE1JVF9FUlJPUgorICAgIHU2NAkJCQlYbXREaXNjYXJkczsJCS8vIE9JRF9HRU5fWE1JVF9ESVNDQVJEUworCXU2NAkJCQlYbXRPazsJCQkJLy8gT0lEX0dFTl9YTUlUX09LCisJdTY0CQkJCVhtdFFMZW47CQkJLy8gT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEgKKwl1NjQJCQkJWG10WmVyb0Z1bGw7CQkvLyBUcmFuc21pdCByaW5nIHplcm8gZnVsbAorCS8vIFJjdgorCXUzMgkJCQlSY3ZOQkw7CQkJCS8vIE9mZmxvYWQgcmVjaWV2ZSBOQkwgY291bnQKKwl1NjQJCQkJRHVtYlJjdkJ5dGVzOwkJLy8gZHVtYm5pYyByZWN2IGJ5dGVzCisgICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVgorICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2TWNhc3RCeXRlczsJLy8gT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWCisgICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YKKwl1NjQJCQkJU2xvd1JjdkJ5dGVzOwkJLy8gU2xvd3BhdGggcmVjdiBieXRlcworCXU2NAkJCQlGYXN0UmN2Qnl0ZXM7CQkvLyBGYXN0cGF0aCByZWN2IGJ5dGVzCisgICAgdTY0CQkJCUR1bWJSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCisJdTY0CQkJCUR1bWJSY3ZUY3BQa3RzOwkJLy8gU2VlIFN4Z0NvbGxlY3RTdGF0cworICAgIHU2NAkJCQlEdW1iUmN2VWNhc3RQa3RzOwkvLyBkaXJlY3RlZCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJSY3ZNY2FzdFBrdHM7CS8vIE11bHRpY2FzdCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJSY3ZCY2FzdFBrdHM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YKKwl1NjQJCQkJU2xvd1JjdlBrdHM7CQkvLyBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YKKyAgICB1NjQJCQkJUmN2RXJyb3JzOwkJCS8vIE9JRF9HRU5fUkNWX0VSUk9SCisgICAgdTY0CQkJCVJjdkRpc2NhcmRzOwkJLy8gT0lEX0dFTl9SQ1ZfRElTQ0FSRFMKKwl1NjQJCQkJUmN2Tm9CdWZmZXI7CQkvLyBPSURfR0VOX1JDVl9OT19CVUZGRVIKKyAgICB1NjQgCQkJUGRxRnVsbDsJCQkvLyBQcm9jZXNzZWQgRGF0YSBRdWV1ZSBGdWxsCisJdTY0CQkJCUV2ZW50UmluZ0Z1bGw7CQkvLyBFdmVudCByaW5nIGZ1bGwKKwkvLyBWZXJib3NlIHN0YXRzCisJdTY0CQkJCU1heFNlbmRzOwkJCS8vIE1heCBzZW5kcyBvdXRzdGFuZGluZworCXU2NAkJCQlOb1NnbEJ1ZjsJCQkvLyBTR0wgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZQorCXU2NAkJCQlTZ2xGYWlsOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKKwl1NjQJCQkJU2dsQXN5bmM7CQkJLy8gTkRJUyBTR0wgZmFpbHVyZQorCXU2NAkJCQlOb01lbTsJCQkJLy8gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorCXU2NAkJCQlOdW1JbnRzOwkJCS8vIEludGVycnVwdHMKKwl1NjQJCQkJRmFsc2VJbnRzOwkJCS8vIEludGVycnVwdCB3aXRoIElTUiA9PSAwCisJdTY0CQkJCVhtdERyb3BzOwkJCS8vIE5vIHNhaGFyYSBEUkFNIGJ1ZmZlciBmb3IgeG10CisJLy8gU2FoYXJhIHJlY2VpdmUgc3RhdHVzCisJdTY0CQkJCVRyYW5zcG9ydENzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQorCXU2NAkJCQlUcmFuc3BvcnRVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVworCXU2NAkJCQlUcmFuc3BvcnRIZHJMZW47CS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4KKwl1NjQJCQkJTmV0d29ya0NzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU06CisJdTY0CQkJCU5ldHdvcmtVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1c6CisJdTY0CQkJCU5ldHdvcmtIZHJMZW47CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKKwl1NjQJCQkJUGFyaXR5OwkJCQkvLyBTWEdfUkNWX1NUQVRVU19QQVJJVFkKKwl1NjQJCQkJTGlua1Bhcml0eTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWToKKwl1NjQJCQkJTGlua0Vhcmx5OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFk6CisJdTY0CQkJCUxpbmtCdWZPZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1c6CisJdTY0CQkJCUxpbmtDb2RlOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERToKKwl1NjQJCQkJTGlua0RyaWJibGU7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEU6CisJdTY0CQkJCUxpbmtDcmM7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19DUkM6CisJdTY0CQkJCUxpbmtPZmxvdzsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XOgorCXU2NAkJCQlMaW5rVWZsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKK30gU1hHX1NUQVRTLCAqUFNYR19TVEFUUzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRFVNQi1OSUMgU2VuZCBwYXRoIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTWEdfQ09NUExFVEVfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKKyAgICBkZXZfa2ZyZWVfc2tiX2lycShfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTWEdfRFJPUF9EVU1CX1NFTkQoX3BBZGFwdCwgX3NrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIAlcCisJQVNTRVJUKF9za2IpOwkJCQkJCQkJCQkJCQkgICAgCQkJXAorICAgIGRldl9rZnJlZV9za2IoX3NrYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLyBMb2NhdGUgY3VycmVudCByZWNlaXZlIGhlYWRlciBidWZmZXIgbG9jYXRpb24uICBVc2UgdGhpcworLy8gaW5zdGVhZCBvZiBSY3ZEYXRhSGRyLT5WaXJ0dWFsQWRkcmVzcyBzaW5jZSB0aGUgZGF0YQorLy8gbWF5IGhhdmUgYmVlbiBvZmZzZXQgYnkgU1hHX0FEVkFOQ0VfTURMX09GRlNFVAorI2RlZmluZSBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKF9SY3ZEYXRhSGRyKSAgICAgICAgKF9SY3ZEYXRhSGRyKS0+c2tiLT5kYXRhCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIER1bWItTklDIHJlY2VpdmUgcHJvY2Vzc2luZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUCisjZGVmaW5lIFBTWEdfUEFDS0VUICAgICAgIHN0cnVjdCBza19idWZmICoKKy8vIEluZGljYXRpb25zIGFycmF5IHNpemUKKyNkZWZpbmUgU1hHX1JDVl9BUlJBWVNJWkUJNjQKKworI2RlZmluZSBTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQlcCisJc3RydWN0IHNrX2J1ZmYgKiBza2I7CQkJCQkJCQkJCQkJICAgIFwKKyAgICBza2IgPSBhbGxvY19za2IoMjA0OCwgR0ZQX0FUT01JQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHNrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBza2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQkJCQlcCisJaWYoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKSB7CQkJCQkJCQkJCQlcCisJCWRldl9rZnJlZV9za2IoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKTsJCQkJCQkgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8gTWFjcm8gdG8gYWRkIGEgTkRJU19QQUNLRVQgdG8gYW4gaW5kaWNhdGlvbiBhcnJheQorLy8gSWYgd2UgZmlsbCB1cCBvdXIgYXJyYXkgb2YgcGFja2V0IHBvaW50ZXJzLCB0aGVuIGluZGljYXRlIHRoaXMKKy8vIGJsb2NrIHVwIG5vdyBhbmQgc3RhcnQgb24gYSBuZXcgb25lLgorI2RlZmluZQlTWEdfQUREX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1BhY2tldCwgX1ByZXZQYWNrZXQsIF9JbmRpY2F0aW9uTGlzdCwgX051bVBhY2tldHMpIHsgXAorCShfSW5kaWNhdGlvbkxpc3QpW19OdW1QYWNrZXRzXSA9IChfUGFja2V0KTsJCQkJCQkJCQkJXAorCShfTnVtUGFja2V0cykrKzsJCQkJCQkJCQkJCQkJCQkJXAorCWlmKChfTnVtUGFja2V0cykgPT0gU1hHX1JDVl9BUlJBWVNJWkUpIHsJCQkJCQkJCQkJXAorCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCQkJCVwKKwkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJCVwKKyAgICAgICAgbmV0aWZfcngoKF9JbmRpY2F0aW9uTGlzdCksKF9OdW1QYWNrZXRzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfSU5ESUNBVEVfUEFDS0VUUyhfcEFkYXB0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7CQkJXAorCWlmKF9OdW1QYWNrZXRzKSB7CQkJCQkJCQkJCQkJCQkJXAorCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCQkJXAorCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJCQkJCQkJCQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX1JFSU5JQVRJQUxJWkVfUEFDS0VUKF9QYWNrZXQpCQkJCQkJCQkJCVwKKwl7fSAgLypfTmRpc1JlaW5pdGlhbGl6ZVBhY2tldChfUGFja2V0KSovICAvKiAgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdpdGggYW4gc2tiICovCisKKy8vIERlZmluaXRpb25zIHRvIGluaXRpYWxpemUgRHVtYi1uaWMgUmVjZWl2ZSBOQkxzCisjZGVmaW5lIFNYR19SQ1ZfUEFDS0VUX0JVRkZFUl9IRFIoX1BhY2tldCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKSgoX1BhY2tldCktPk1pbmlwb3J0UmVzZXJ2ZWRFeCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorCisjZGVmaW5lIFNYR19SQ1ZfU0VUX0NIRUNLU1VNX0lORk8oX1BhY2tldCwgX0NwaSkJXAorCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgVGNwSXBDaGVja3N1bVBhY2tldEluZm8pID0gKFBWT0lEKShfQ3BpKQorCisjZGVmaW5lIFNYR19SQ1ZfU0VUX1RPRVBMSVRaKF9QYWNrZXQsIF9Ub2VwbGl0eiwgX1R5cGUsIF9GdW5jdGlvbikgewkJXAorCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1ZBTFVFKChfUGFja2V0KSwgKF9Ub2VwbGl0eikpOwkJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9UWVBFKChfUGFja2V0KSwgKF9UeXBlKSk7CQkJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9GVU5DVElPTigoX1BhY2tldCksIChfRnVuY3Rpb24pKTsJCQkJCVwKK30KKworI2RlZmluZSBTWEdfUkNWX1NFVF9WTEFOX0lORk8oX1BhY2tldCwgX1ZsYW5JZCwgX1ByaW9yaXR5KSB7CQkJCQlcCisJTkRJU19QQUNLRVRfODAyMVFfSU5GTwlfUGFja2V0ODAyMXFJbmZvOwkJCQkJCQkJCVwKKwlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5WbGFuSWQgPSAoX1ZsYW5JZCk7CQkJCQkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVXNlclByaW9yaXR5ID0gKF9Qcmlvcml0eSk7CQkJCQkJXAorCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgSWVlZTgwMjFRTmV0QnVmZmVyTGlzdEluZm8pID0gCVwKKwkJX1BhY2tldDgwMjFxSW5mby5WYWx1ZTsJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19BREpVU1RfUkNWX1BBQ0tFVChfUGFja2V0LCBfUmN2RGF0YUJ1ZmZlckhkciwgX0V2ZW50KSB7CQkJXAorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJSY3YiLAkJCVwKKwkJCSAgIChfUmN2RGF0YUJ1ZmZlckhkciksIChfUGFja2V0KSwJCQkJCQkJCVwKKwkJCSAgIChfRXZlbnQpLT5TdGF0dXMsIDApOwkgICAgICAgICAgICAgICAgICAgIAkJCQlcCisJQVNTRVJUKChfRXZlbnQpLT5MZW5ndGggPD0gKF9SY3ZEYXRhQnVmZmVySGRyKS0+U2l6ZSk7CQkJCQlcCisgICAgUGFja2V0LT5sZW4gPSAoX0V2ZW50KS0+TGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNYWNyb3MgdG8gZnJlZSBhIHJlY2VpdmUgZGF0YSBidWZmZXIgYW5kIHJlY2VpdmUgZGF0YSBkZXNjcmlwdG9yIGJsb2NrCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBOT1RFIC0gTG9jayBtdXN0IGJlIGhlbGQgd2l0aCBSQ1YgbWFjcm9zCisjZGVmaW5lIFNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQkJCVwKKwlQTElTVF9FTlRSWSAgICAgCQkJCV9wbGU7CQkJCQkJCQkJCVwKKwlfSGRyID0gTlVMTDsJCQkJCQkJCQkJCQkJCQkJXAorCWlmKChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KSB7CQkJCQkJCQkJCQlcCisJCUFTU0VSVCghKElzTGlzdEVtcHR5KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzKSkpOwkJCQkJCVwKKwkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzKTsJICAgIAkJCQlcCisJCShfSGRyKSA9IGNvbnRhaW5lcl9vZihfcGxlLCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiwgRnJlZUxpc3QpOwkgICAgICAgIFwKKwkJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQtLTsJCQkJCQkJCQkJXAorCQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJSdG5ESGRyIiwJCQlcCisJCQkgICAoX0hkciksIChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LAkJCQkJCVwKKwkJCSAgIChfSGRyKS0+U3RhdGUsIChfSGRyKS0+VmlydHVhbEFkZHJlc3MpOwkJCQkJCVwKKy8qCVNYR19SRVNUT1JFX01ETF9PRkZTRVQoX0hkcik7CSovCQkJCQkJCQkJCVwKKwkoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCsrOwkJCQkJCQkJCQlcCisJQVNTRVJUKCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpOyBcCisJQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMsICYoKF9IZHIpLT5GcmVlTGlzdCkpOwkJXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQlcCisJQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCisJKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCsrOwkJCQkJCQkJCQkJXAorCUFTU0VSVCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCk7CVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tzLCAmKF9IZHIpLT5GcmVlTGlzdCk7CQkJXAorfQorCisvLyBTR0wgbWFjcm9zCisjZGVmaW5lIFNYR19GUkVFX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCwgX05CKSB7CVwKKwlzcGluX2xvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorCShfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50Kys7CQlcCisJQVNTRVJUKChfcEFkYXB0KS0+QWxsU2dsQnVmZmVyQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpO1wKKwlBU1NFUlQoISgoX1NnbCktPlN0YXRlICYgU1hHX0JVRkZFUl9GUkVFKSk7CVwKKwkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzLCAmKF9TZ2wpLT5GcmVlTGlzdCk7CVwKKwlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQlcCit9CisKKy8vIEdldCBhbiBTR0wgYnVmZmVyIGZyb20gdGhlIGZyZWUgcXVldWUuICBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIG1hY3JvCisvLyBhdHRlbXB0cyB0byBrZWVwIGFoZWFkIG9mIGJ1ZmZlciBkZXBsZXRpb24gYnkgYWxsb2NhdGluZyBtb3JlIHdoZW4KKy8vIHdlIGhpdCBhIG1pbmltdW0gdGhyZXNob2xkLiAgTm90ZSB0aGF0IHdlIGRvbid0IGdyYWIgdGhlIGxvY2sKKy8vIHVudGlsIGFmdGVyIHRoYXQuICBXZSdyZSBkZWFsaW5nIHdpdGggcm91bmQgbnVtYmVycyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvLAorLy8gYW5kIG5vdCBncmFiYmluZyBpdCBhdm9pZHMgYSBwb3NzaWJsZSBkb3VibGUtdHJpcC4KKyNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wpIHsJCQkJXAorCVBMSVNUX0VOVFJZIF9wbGU7CQkJCQkJXAorCWlmICgoX3BBZGFwdC0+RnJlZVNnbEJ1ZmZlckNvdW50IDwgU1hHX01JTl9TR0xfQlVGRkVSUykgJiYJXAorCSAgIChfcEFkYXB0LT5BbGxTZ2xCdWZmZXJDb3VudCA8IFNYR19NQVhfU0dMX0JVRkZFUlMpICYmCVwKKwkgICAoX3BBZGFwdC0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CQkJXAorCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShfcEFkYXB0LAkJCVwKKwkJCShzaXplb2YoU1hHX1NDQVRURVJfR0FUSEVSKSArIFNYR19TR0xfQlVGX1NJWkUpLFwKKwkJCVNYR19CVUZGRVJfVFlQRV9TR0wpOwkJCQlcCisJfQkJCQkJCQkJXAorCV9TZ2wgPSBOVUxMOwkJCQkJCQlcCisJc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCQkJXAorCWlmKChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KSB7CQkJCVwKKwkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlcnMpKSk7CVwKKwkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzKTsJXAorCQkoX1NnbCkgPSBjb250YWluZXJfb2YoX3BsZSwgU1hHX1NDQVRURVJfR0FUSEVSLCBGcmVlTGlzdCk7IFwKKyAgICAgICAgICAgIChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50LS07CQkJCVwKKwkJQVNTRVJUKChfU2dsKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCVwKKwkJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfQlVTWTsJCQlcCisJCShfU2dsKS0+cFNnbCA9IE5VTEw7CQkJCQlcCisJfQkJCQkJCQkJXAorCXNwaW5fdW5sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCQkJXAorfQorCisvLworLy8gU1hHX01VTFRJQ0FTVF9BRERSRVNTCisvLworLy8gTGlua2VkIGxpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KK3R5cGVkZWYgc3RydWN0IF9TWEdfTVVMVElDQVNUX0FERFJFU1MgeworCXVuc2lnbmVkIGNoYXIJCQkJCQkJQWRkcmVzc1s2XTsKKwlzdHJ1Y3QgX1NYR19NVUxUSUNBU1RfQUREUkVTUwkqTmV4dDsKK30gU1hHX01VTFRJQ0FTVF9BRERSRVNTLCAqUFNYR19NVUxUSUNBU1RfQUREUkVTUzsKKworLy8gU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgorLy8gVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKKy8vIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAorLy8gTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCisvLyBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCit0eXBlZGVmIHN0cnVjdCBfU1hHX0JVRkZFUl9RVUVVRSB7CisJdTMyCQkJCQkJVHlwZTsJCQkvLyBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cKKwl1MzIJCQkJCQlEaXJlY3Rpb247CQkvLyBYbXQgb3IgUmN2CisJdTMyCQkJCQkJQnl0ZXM7CQkJLy8gQnl0ZSBjb3VudAorCXUzMiAqICAgICAgICAJCQlIZWFkOwkJCS8vIFNlbmQgcXVldWUgaGVhZAorCXUzMiAqICAgICAgICAJCQlUYWlsOwkJCS8vIFNlbmQgcXVldWUgdGFpbAorLy8JUE5FVF9CVUZGRVJfTElTVAkJCU5leHROQkw7CQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CTAorLy8JUE5FVF9CVUZGRVIJCQkJCU5leHROQjsJCQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CCit9IFNYR19CVUZGRVJfUVVFVUUsICpQU1hHX0JVRkZFUl9RVUVVRTsKKworI2RlZmluZQkJU1hHX1NMT1dfU0VORF9CVUZGRVIJMAorI2RlZmluZQkJU1hHX0ZBU1RfU0VORF9CVUZGRVIJMQorI2RlZmluZSAJU1hHX1JFQ0VJVkVfQlVGRkVSCQkyCisKKyNkZWZpbmUgU1hHX0lOSVRfQlVGRkVSKF9CdWZmZXIsIF9UeXBlKSB7IAkJCQkJCVwKKwkoX0J1ZmZlciktPlR5cGUgPSAoX1R5cGUpOwkJCQkJCQkJCVwKKwlpZigoX1R5cGUpID09IFNYR19SRUNFSVZFX0JVRkZFUikgewkJCQkJCQlcCisJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gMDsJCQkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQkJCQkJCQlcCisJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gTkRJU19TR19MSVNUX1dSSVRFX1RPX0RFVklDRTsJXAorCX0JCQkJCQkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5CeXRlcyA9IDA7CQkJCQkJCQkJCVwKKwkoX0J1ZmZlciktPkhlYWQgPSBOVUxMOwkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgU1hHX1JTU19DUFVfQ09VTlQoX3BBZGFwdCkgCQkJCQkJCQlcCisJKChfcEFkYXB0KS0+UnNzRW5hYmxlZCAJPyAgTlJfQ1BVUyA6IDEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEFkYXB0ZXIgc3RhdGVzIC0gVGhlc2Ugc3RhdGVzIGNsb3NlbHkgbWF0Y2ggdGhlIGFkYXB0ZXIgc3RhdGVzCisvLyBkb2N1bWVudGVkIGluIHRoZSBEREsgKHdpdGggYSBmZXcgZXhjZXB0aW9ucykuCit0eXBlZGVmIGVudW0gX1NYR19TVEFURSB7CisJU1hHX1NUQVRFX0lOSVRJQUxJWklORywJCQkvLyBJbml0aWFsaXppbmcKKwlTWEdfU1RBVEVfQk9PVERJQUcsCQkJCS8vIEJvb3QtRGlhZ25vc3RpYyBtb2RlCisJU1hHX1NUQVRFX1BBVVNJTkcsCQkJCS8vIFBhdXNpbmcKKwlTWEdfU1RBVEVfUEFVU0VELAkJCQkvLyBQYXVzZWQKKwlTWEdfU1RBVEVfUlVOTklORywJCQkJLy8gUnVubmluZworCVNYR19TVEFURV9SRVNFVFRJTkcsCQkJLy8gUmVzZXQgaW4gcHJvZ3Jlc3MKKwlTWEdfU1RBVEVfU0xFRVAsCQkJCS8vIFNsZWVwaW5nCisJU1hHX1NUQVRFX0RJQUcsCQkJCQkvLyBEaWFnbm9zdGljIG1vZGUKKwlTWEdfU1RBVEVfSEFMVElORywJCQkJLy8gSGFsdGluZworCVNYR19TVEFURV9IQUxURUQsCQkJCS8vIERvd24gb3Igbm90LWluaXRpYWxpemVkCisJU1hHX1NUQVRFX1NIVVRET1dOCQkJCS8vIHNodXRkb3duCit9IFNYR19TVEFURSwgKlBTWEdfU1RBVEU7CisKKy8vIExpbmsgc3RhdGUKK3R5cGVkZWYgZW51bSBfU1hHX0xJTktfU1RBVEUgeworCVNYR19MSU5LX0RPV04sCisJU1hHX0xJTktfVVAKK30gU1hHX0xJTktfU1RBVEUsICpQU1hHX0xJTktfU1RBVEU7CisKKy8vIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cworI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLy8gMTAgU2Vjb25kcyAtIFJFRFVDRSEKKworCisvLyBNaWNyb2NvZGUgZmlsZSBzZWxlY3Rpb24gY29kZXMKK3R5cGVkZWYgZW51bSBfU1hHX1VDT0RFX1NFTCB7CisJU1hHX1VDT0RFX1NBSEFSQSwJCQkJLy8gU2FoYXJhIHVjb2RlCisJU1hHX1VDT0RFX1NESUFHQ1BVLAkJCQkvLyBTYWhhcmEgQ1BVIGRpYWdub3N0aWMgdWNvZGUKKwlTWEdfVUNPREVfU0RJQUdTWVMJCQkJLy8gU2FoYXJhIHN5c3RlbSBkaWFnbm9zdGljIHVjb2RlCit9IFNYR19VQ09ERV9TRUw7CisKKworI2RlZmluZSBTWEdfRElTQUJMRV9BTExfSU5URVJSVVBUUyhfcGFkYXB0KSBzeGdfZGlzYWJsZV9pbnRlcnJ1cHQoX3BhZGFwdCkKKyNkZWZpbmUgU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhfcGFkYXB0KSBzeGdfZW5hYmxlX2ludGVycnVwdChfcGFkYXB0KQorCisvLyBUaGlzIHByb2JhYmx5IGxpdmVzIGluIGEgcHJvdG8uaCBmaWxlLiAgTW92ZSBsYXRlcgorI2RlZmluZSBTWEdfTVVMVElDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpCisjZGVmaW5lIFNYR19CUk9BRENBU1RfUEFDS0VUKF9wZXRoZXIpICgoKih1MzIgKikoX3BldGhlciktPmV0aGVyX2Rob3N0ID09IDB4RkZGRkZGRkYpICYmIFwKKwkJCQkoKih1MTYgKikmKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFs0XSA9PSAweEZGRkYpKQorCisvLyBGb3IgRGJnUHJpbnRzCisjZGVmaW5lIFNYR19JRCAgICAgIERQRkxUUl9JSFZORVRXT1JLX0lECisjZGVmaW5lIFNYR19FUlJPUiAgIERQRkxUUl9FUlJPUl9MRVZFTAorCisvLworLy8gU1hHX0RSSVZFUiBzdHJ1Y3R1cmUgLQorLy8KKy8vIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeGcgZHJpdmVyLiAgVGhlcmUgaXMgb25seQorLy8gb25lIG9mIHRoZXNlLCBhbmQgaXQgaXMgZGVmaW5lZCBhcyBhIGdsb2JhbC4KK3R5cGVkZWYgc3RydWN0IF9TWEdfRFJJVkVSIHsKKwlzdHJ1Y3QgX2FkYXB0ZXJfdAkqQWRhcHRlcnM7CQkvLyBMaW5rZWQgbGlzdCBvZiBhZGFwdGVycworCXVzaG9ydAkJCQlBZGFwdGVySUQ7CQkvLyBNYWludGFpbiB1bmlxdWUgYWRhcHRlciBJRAorfSBTWEdfRFJJVkVSLCAqUFNYR19EUklWRVI7CisKKyNpZmRlZiBTVEFUVVNfU1VDQ0VTUworI3VuZGVmIFNUQVRVU19TVUNDRVNTCisjZW5kaWYKKworI2RlZmluZSBTVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgMAorI2RlZmluZSBTVEFUVVNfUEVORElORyAgICAgICAgICAgICAgMAorI2RlZmluZSBTVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAtMQorI2RlZmluZSBTVEFUVVNfRVJST1IgICAgICAgICAgICAgICAtMgorI2RlZmluZSBTVEFUVVNfTk9UX1NVUFBPUlRFRCAgICAgICAtMworI2RlZmluZSBTVEFUVVNfQlVGRkVSX1RPT19TSE9SVCAgICAtNAorI2RlZmluZSBTVEFUVVNfUkVTT1VSQ0VTICAgICAgICAgICAtNQorCisjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgorI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisvLyBEdW1wIGJ1ZmZlciBzaXplCisvLworLy8gVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKKy8vIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KKy8vIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworLy8ganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAorI2VuZGlmCisKKyNkZWZpbmUgTUlOKGEsIGIpICgodTMyKShhKSA8ICh1MzIpKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBNQVgoYSwgYikgKCh1MzIpKGEpID4gKHUzMikoYikgPyAoYSkgOiAoYikpCisKK3R5cGVkZWYgc3RydWN0IF9tY2FzdF9hZGRyZXNzX3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1s2XTsKKyAgICBzdHJ1Y3QgX21jYXN0X2FkZHJlc3NfdCAgICpuZXh0OworfSAgbWNhc3RfYWRkcmVzc190LCAqcF9tY2FzdF9hZGRyZXNzX3Q7CisKKyNkZWZpbmUgQ0FSRF9ET1dOICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENBUkRfVVAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQVJEX0ZBSUwgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FSRF9ESUFHICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENBUkRfU0xFRVAgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIEFEQVBUX0RPV04gICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBREFQVF9VUCAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQURBUFRfRkFJTCAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFEQVBUX1JFU0VUICAgICAgICAgICAgMHgwMworI2RlZmluZSBBREFQVF9TTEVFUCAgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBBREFQVF9GTEFHU19CT09UVElNRSAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBREFQVF9GTEFHU19JUzY0QklUICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBBREFQVF9GTEFHU19QRU5ESU5HTElOS0RPV04gICAgIDB4MDAwNAorI2RlZmluZSBBREFQVF9GTEFHU19GSUJFUk1FRElBICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBBREFQVF9GTEFHU19MT0NLU19BTExPQ0VEICAgICAgIDB4MDAxMAorI2RlZmluZSBBREFQVF9GTEFHU19JTlRfUkVHSVNURVJFRCAgICAgIDB4MDAyMAorI2RlZmluZSBBREFQVF9GTEFHU19MT0FEX1RJTUVSX1NFVCAgICAgIDB4MDA0MAorI2RlZmluZSBBREFQVF9GTEFHU19TVEFUU19USU1FUl9TRVQgICAgIDB4MDA4MAorI2RlZmluZSBBREFQVF9GTEFHU19SRVNFVF9USU1FUl9TRVQgICAgIDB4MDEwMAorCisjZGVmaW5lIExJTktfRE9XTiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LX0NPTkZJRyAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19VUCAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTElOS18xME1CICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExJTktfMTAwTUIgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMSU5LX0FVVE9TUEVFRCAgICAgICAgIDB4MDIKKyNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgICAgICAweDAzCisjZGVmaW5lIExJTktfMTAwMDBNQiAgICAgICAgICAgMHgwNAorCisjZGVmaW5lIExJTktfSEFMRkQgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LX0ZVTExEICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPRCAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTUFDX0RJUkVDVEVEICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1BQ19CQ0FTVCAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNQUNfTUNBU1QgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDX1BST01JU0MgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1BQ19MT09QQkFDSyAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBNQUNfQUxMTUNBU1QgICAgIDB4MDAwMDAwMjAKKworI2RlZmluZSBTTElDX0RVUExFWCh4KSAgICAoKHg9PUxJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4PT1MSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAoKHg9PUxJTktfMTAwME1CKSA/ICIxMDAwTWIiIDogIiAxME1iIikpCisjZGVmaW5lIFNMSUNfTElOS1NUQVRFKHgpICgoeD09TElOS19ET1dOKSA/ICJEb3duIiA6ICJVcCAgIikKKyNkZWZpbmUgU0xJQ19BREFQVEVSX1NUQVRFKHgpICgoeD09QURBUFRfVVApID8gIlVQIiA6ICJEb3duIikKKyNkZWZpbmUgU0xJQ19DQVJEX1NUQVRFKHgpICAgICgoeD09Q0FSRF9VUCkgPyAiVVAiIDogIkRvd24iKQorCisKK3R5cGVkZWYgc3RydWN0IF9ldGhlcl9oZWFkZXIKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgIGV0aGVyX2Rob3N0WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfc2hvc3RbNl07CisgICAgdXNob3J0ICAgZXRoZXJfdHlwZTsKK30gZXRoZXJfaGVhZGVyLCAqcF9ldGhlcl9oZWFkZXI7CisKKworI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKKyNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAorCit0eXBlZGVmIHN0cnVjdCBfcGh5c2NhcmRfdAoreworICAgIHN0cnVjdCBfYWRhcHRlcl90ICAqYWRhcHRlcltTTElDX01BWF9QT1JUU107CisgICAgc3RydWN0IF9waHlzY2FyZF90ICpuZXh0OworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhZGFwdGVyc19hbGxvY2Q7Cit9IHBoeXNjYXJkX3QsICpwX3BoeXNjYXJkX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zeGdiYXNlX2RyaXZlcgoreworCXNwaW5sb2NrX3QJZHJpdmVyX2xvY2s7CisJdW5zaWduZWQgbG9uZwlmbGFnczsJLyogaXJxc2F2ZSBmb3Igc3BpbmxvY2sgKi8KKwl1MzIJCW51bV9zeGdfY2FyZHM7CisJdTMyCQludW1fc3hnX3BvcnRzOworCXUzMgkJbnVtX3N4Z19wb3J0c19hY3RpdmU7CisJdTMyCQlkeW5hbWljX2ludGFnZzsKKwlwX3BoeXNjYXJkX3QJcGh5c19jYXJkOworfSBzeGdiYXNlX2RyaXZlcl90OworCisKK3R5cGVkZWYgc3RydWN0IF9hZGFwdGVyX3QKK3sKKwl2b2lkICogICAgICAgICAgICAgICBpZnA7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBvcnQ7CisJcF9waHlzY2FyZF90ICAgICAgICBwaHlzY2FyZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcGh5c3BvcnQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNhcmRpbmRleDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2FyZF9zaXplOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjaGlwaWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGJ1c251bWJlcjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZnVuY3Rpb25udW1iZXI7CisJdXNob3J0ICAgICAgICAgICAgICB2ZW5kaWQ7CisJdXNob3J0ICAgICAgICAgICAgICBkZXZpZDsKKwl1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOworCXUzMiAgICAgICAgICAgICBpcnE7CisKKwl2b2lkICogICAgICAgICAgICAgICBzeGdfYWRhcHRlcjsKKwl1MzIgICAgICAgICAgICAgbkJ1c3lTZW5kOworCisJdm9pZCBfX2lvbWVtICoJYmFzZV9hZGRyOworCXUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CisJdTMyICAgICAgICAgICAgIGRyYW1iYXNlOworCXUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBxdWV1ZXNfaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFsbG9jYXRlZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGVkOworCXUzMiAgICAgICAgICAgICBpbnRycmVnaXN0ZXJlZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgaXNwX2luaXRpYWxpemVkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBnZW5udW1iZXI7CisJdTMyICAgICAgICAgICAgIGN1cmFkZHJ1cHBlcjsKKwl1MzIgICAgICAgICAgICAgaXNyY29weTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgc3RhdGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua3NwZWVkOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rZHVwbGV4OworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBmbGFnczsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbWFjYWRkcls2XTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgY3Vycm1hY2FkZHJbNl07CisJdTMyICAgICAgICAgICAgIG1hY29wdHM7CisJdXNob3J0ICAgICAgICAgICAgICBkZXZmbGFnc19wcmV2OworCXU2NCAgICAgICAgICAgICBtY2FzdG1hc2s7CisJcF9tY2FzdF9hZGRyZXNzX3QgICBtY2FzdGFkZHJzOworCXN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOworCXUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CisJc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOworCXUzMiAgICAgICAgICAgICBzdGF0c3RpbWVyc2V0OworCXN0cnVjdCB0aW1lcl9saXN0ICAgdnBjaV90aW1lcjsKKwl1MzIgICAgICAgICAgICAgdnBjaV90aW1lcnNldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIGxvYWR0aW1lcjsKKwl1MzIgICAgICAgICAgICAgbG9hZHRpbWVyc2V0OworCisJdTMyICAgICAgICAgICAgIHhtaXRxX2Z1bGw7CisJdTMyICAgICAgICAgICAgIGFsbF9yZWdfd3JpdGVzOworCXUzMiAgICAgICAgICAgICBpY3JfcmVnX3dyaXRlczsKKwl1MzIgICAgICAgICAgICAgaXNyX3JlZ193cml0ZXM7CisJdTMyICAgICAgICAgICAgIGVycm9yX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHJ4X2Vycm9yczsKKwl1MzIgICAgICAgICAgICAgcmN2X2Ryb3BzOworCXUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgeG1pdF9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBsaW5rZXZlbnRfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgdXByX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIG51bV9pc3JzOworCXUzMiAgICAgICAgICAgICBmYWxzZV9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICB0eF9wYWNrZXRzOworCXUzMiAgICAgICAgICAgICB4bWl0X2NvbXBsZXRlczsKKwl1MzIgICAgICAgICAgICAgdHhfZHJvcHM7CisJdTMyICAgICAgICAgICAgIHJjdl9icm9hZGNhc3RzOworCXUzMiAgICAgICAgICAgICByY3ZfbXVsdGljYXN0czsKKwl1MzIgICAgICAgICAgICAgcmN2X3VuaWNhc3RzOworCXUzMiAgICAgICAgICAgICBtYXhfaXNyX3JjdnM7CisJdTMyICAgICAgICAgICAgIG1heF9pc3JfeG1pdHM7CisJdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRfeWllbGRzOworCXUzMiAgICAgICAgICAgICBpbnRhZ2dfcGVyaW9kOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXUzMiAqCQkJCQlNaW5pcG9ydEhhbmRsZTsJCS8vIE91ciBtaW5pcG9ydCBoYW5kbGUKKwlTWEdfU1RBVEUJCQkJCVN0YXRlOwkJCQkvLyBBZGFwdGVyIHN0YXRlCisJU1hHX0xJTktfU1RBVEUJCQkJTGlua1N0YXRlOwkJCS8vIExpbmsgc3RhdGUKKwl1NjQJCQkJCQlMaW5rU3BlZWQ7CQkJLy8gTGluayBTcGVlZAorCXUzMgkJCQkJCVBvd2VyU3RhdGU7CQkJLy8gTkRJUyBwb3dlciBzdGF0ZQorCXN0cnVjdCBfYWRhcHRlcl90ICAgCQkqTmV4dDsJCQkJLy8gTGlua2VkIGxpc3QKKwl1c2hvcnQJCQkJCQlBZGFwdGVySUQ7CQkJLy8gMS4ubgorCXVuc2lnbmVkIGNoYXIJCQkJCQlNYWNBZGRyWzZdOwkJCS8vIE91ciBwZXJtYW5lbnQgSFcgbWFjIGFkZHJlc3MKKwl1bnNpZ25lZCBjaGFyCQkJCQkJQ3Vyck1hY0FkZHJbNl07CQkvLyBPdXIgQ3VycmVudCBtYWMgYWRkcmVzcworCXBfbmV0X2RldmljZSAgICAgICAgICAgICAgICBuZXRkZXY7CisJcF9uZXRfZGV2aWNlICAgICAgICAgICAgICAgIG5leHRfbmV0ZGV2aWNlOworCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgKiBwY2lkZXY7CisKKwlQU1hHX01VTFRJQ0FTVF9BRERSRVNTCQlNdWx0aWNhc3RBZGRyczsJCS8vIE11bHRpY2FzdCBsaXN0CisJdTY0ICAgICAJCQkJTXVsdGljYXN0TWFzazsJCS8vIE11bHRpY2FzdCBtYXNrCisJdTMyICoJCQkJCUludGVycnVwdEhhbmRsZTsJLy8gUmVnaXN0ZXIgSW50ZXJydXB0IGhhbmRsZQorCXUzMgkJCQkJCUludGVycnVwdExldmVsOwkJLy8gRnJvbSBSZXNvdXJjZSBsaXN0CisJdTMyCQkJCQkJSW50ZXJydXB0VmVjdG9yOwkvLyBGcm9tIFJlc291cmNlIGxpc3QKKwlzcGlubG9ja190CUFkYXB0ZXJMb2NrOwkvKiBTZXJpYWxpemUgYWNjZXNzIGFkYXB0ZXIgcm91dGluZXMgKi8KKwlzcGlubG9ja190CUJpdDY0UmVnTG9jazsJLyogRm9yIHdyaXRpbmcgNjQtYml0IGFkZHJlc3NlcyAqLworCVBTWEdfSFdfUkVHUwkJCQlId1JlZ3M7CQkJCS8vIFNhaGFyYSBIVyBSZWdpc3RlciBNZW1vcnkgKEJBUjAvMSkKKwlQU1hHX1VDT0RFX1JFR1MJCQkJVWNvZGVSZWdzOwkJCS8vIE1pY3JvY29kZSBSZWdpc3RlciBNZW1vcnkgKEJBUjIvMykKKwlQU1hHX1RDQl9SRUdTCQkJCVRjYlJlZ3M7CQkJLy8gU2FtZSBhcyBVY29kZSByZWdzIC0gU2VlIHN4Z2h3LmgKKwl1c2hvcnQJCQkJCQlSZXNldERwY0NvdW50OwkJLy8gRm9yIHRpbWVvdXQKKwl1c2hvcnQJCQkJCQlSc3NEcGNDb3VudDsJCS8vIEZvciB0aW1lb3V0CisJdXNob3J0CQkJCQkJVmVuZG9ySUQ7CQkJLy8gVmVuZG9yIElECisJdXNob3J0CQkJCQkJRGV2aWNlSUQ7CQkJLy8gRGV2aWNlIElECisJdXNob3J0CQkJCQkJU3ViU3lzdGVtSUQ7CQkvLyBTdWItU3lzdGVtIElECisJdXNob3J0CQkJCQkJRnJhbWVTaXplOwkJCS8vIE1heGltdW0gZnJhbWUgc2l6ZQorCXUzMiAqCQkJCQlEbWFIYW5kbGU7CQkJLy8gTkRJUyBETUEgaGFuZGxlCisJdTMyICoJCQkJCVBhY2tldFBvb2xIYW5kbGU7CS8vIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0CisJdTMyICoJCQkJCUJ1ZmZlclBvb2xIYW5kbGU7CS8vIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0CisJdTMyCQkJCQkJTWFjRmlsdGVyOwkJCS8vIE5ESVMgTUFDIEZpbHRlcgorCXVzaG9ydAkJCQkJCUlwSWQ7CQkJCS8vIEZvciBzbG93cGF0aAorCVBTWEdfRVZFTlRfUklORwkJCQlFdmVudFJpbmdzOwkJCS8vIEhvc3QgZXZlbnQgcmluZ3MuICAxL0NQVSB0byAxNiBtYXgKKwlkbWFfYWRkcl90ICAgICAgICAgICAgICAJUEV2ZW50UmluZ3M7CQkvLyBQaHlzaWNhbCBhZGRyZXNzCisJdTMyCQkJCQkJTmV4dEV2ZW50W1NYR19NQVhfUlNTXTsJLy8gQ3VycmVudCBsb2NhdGlvbiBpbiByaW5nCisJZG1hX2FkZHJfdCAgICAgICAgICAJCVBUY2JCdWZmZXJzOwkJLy8gVENCIEJ1ZmZlcnMgLSBwaHlzaWNhbCBhZGRyZXNzCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUFRjYkNvbXBCdWZmZXJzOwkvLyBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgLSBwaHlzIGFkZHIKKwlQU1hHX1hNVF9SSU5HCQkJCVhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzCisJZG1hX2FkZHJfdAkJICAgICAgICAgICAgUFhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcworCVNYR19SSU5HX0lORk8JCQkJWG10UmluZ1plcm9JbmZvOwkvLyBUcmFuc21pdCByaW5nIDAgaW5mbworCXNwaW5sb2NrX3QJWG10WmVyb0xvY2s7CS8qIFRyYW5zbWl0IHJpbmcgMCBsb2NrICovCisJdTMyICoJCQkJCVhtdFJpbmdaZXJvSW5kZXg7CS8vIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4CisJZG1hX2FkZHJfdCAgICAgICAgICAJCVBYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAtIHBoeXNpY2FsCisJTElTVF9FTlRSWQkJCQkJRnJlZVByb3RvY29sSGVhZGVyczsvLyBGcmVlIHByb3RvY29sIGhlYWRlcnMKKwl1MzIJCQkJCQlGcmVlUHJvdG9IZHJDb3VudDsJLy8gQ291bnQKKwl2b2lkICoJCQkJCQlQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcgorCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcnMgLSBwaHlzCisKKwlQU1hHX1JDVl9SSU5HCQkJCVJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUmN2UmluZ3M7CQkJLy8gUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKKwlTWEdfUklOR19JTkZPCQkJCVJjdlJpbmdaZXJvSW5mbzsJLy8gUmVjZWl2ZSByaW5nIDAgaW5mbworCisJdTMyICoJCQkJCUlzcjsJCQkJLy8gSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBJc3I7CQkJCS8vIElTUiAtIHBoeXNpY2FsIGFkZHJlc3MKKwl1MzIJCQkJCQlJc3JDb3B5W1NYR19NQVhfUlNTXTsJLy8gQ29weSBvZiBJU1IKKwl1c2hvcnQJCQkJCQlJbnRlcnJ1cHRzRW5hYmxlZDsJLy8gQml0bWFzayBvZiBlbmFibGVkIHZlY3RvcnMKKwl1bnNpZ25lZCBjaGFyICoJCQkJCQlJbmRpcmVjdGlvblRhYmxlOwkvLyBSU1MgaW5kaXJlY3Rpb24gdGFibGUKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQSW5kaXJlY3Rpb25UYWJsZTsJLy8gUGh5c2ljYWwgYWRkcmVzcworCXVzaG9ydAkJCQkJCVJzc1RhYmxlU2l6ZTsJCS8vIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMKKwl1c2hvcnQJCQkJCQlIYXNoS2V5U2l6ZTsJCS8vIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMKKwl1bnNpZ25lZCBjaGFyCQkJCQkJSGFzaFNlY3JldEtleVs0MF07CS8vIHJzcyBrZXkKKwl1MzIJCQkJCQlIYXNoSW5mb3JtYXRpb247CisJLy8gUmVjZWl2ZSBidWZmZXIgcXVldWVzCisJc3BpbmxvY2tfdAlSY3ZRTG9jazsJLyogUmVjZWl2ZSBRdWV1ZSBMb2NrICovCisJTElTVF9FTlRSWQkJCQkJRnJlZVJjdkJ1ZmZlcnM7CQkvLyBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZQorCUxJU1RfRU5UUlkJCQkJCUZyZWVSY3ZCbG9ja3M7CQkvLyBGcmVlIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBRCisJTElTVF9FTlRSWQkJCQkJQWxsUmN2QmxvY2tzOwkJLy8gQWxsIFNYR19SQ1ZfQkxPQ0tzCisJdXNob3J0CQkJCQkJRnJlZVJjdkJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgZnJlZSByY3YgZGF0YSBidWZmZXJzCisJdXNob3J0CQkJCQkJRnJlZVJjdkJsb2NrQ291bnQ7CS8vICMgb2YgZnJlZSByY3YgZGVzY3JpcHRvciBibG9ja3MKKwl1c2hvcnQJCQkJCQlBbGxSY3ZCbG9ja0NvdW50OwkvLyBOdW1iZXIgb2YgdG90YWwgcmVjZWl2ZSBibG9ja3MKKwl1c2hvcnQJCQkJCQlSZWNlaXZlQnVmZmVyU2l6ZTsJLy8gU1hHX1JDVl9EQVRBL0pVTUJPX0JVRkZFUl9TSVpFIG9ubHkKKwl1MzIJCQkJCQlBbGxvY2F0aW9uc1BlbmRpbmc7CS8vIFJlY2VpdmUgYWxsb2NhdGlvbiBwZW5kaW5nCisJdTMyCQkJCQkJUmN2QnVmZmVyc09uQ2FyZDsJLy8gU1hHX0RBVEFfQlVGRkVSUyBvd25lZCBieSBjYXJkCisJLy8gU0dMIGJ1ZmZlcnMKKwlzcGlubG9ja190CVNnbFFMb2NrOwkvKiBTR0wgUXVldWUgTG9jayAqLworCUxJU1RfRU5UUlkJCQkJCUZyZWVTZ2xCdWZmZXJzOwkJLy8gRnJlZSBTWEdfU0NBVFRFUl9HQVRIRVIKKwlMSVNUX0VOVFJZCQkJCQlBbGxTZ2xCdWZmZXJzOwkJLy8gQWxsIFNYR19TQ0FUVEVSX0dBVEhFUgorCXVzaG9ydAkJCQkJCUZyZWVTZ2xCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIGZyZWUgU0dMIGJ1ZmZlcnMKKwl1c2hvcnQJCQkJCQlBbGxTZ2xCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIHRvdGFsIFNHTCBidWZmZXJzCisJdTMyCQkJCQkJQ3VycmVudFRpbWU7CQkvLyBUaWNrIGNvdW50CisJdTMyCQkJCQkJRmFzdHBhdGhDb25uZWN0aW9uczsvLyAjIG9mIGZhc3RwYXRoIGNvbm5lY3Rpb25zCisJLy8gVmFyaW91cyBzaW5nbGUtYml0IGZsYWdzOgorCXUzMgkJCQkJCUJhc2ljQWxsb2NhdGlvbnM6MTsJLy8gTG9ja3MgYW5kIGxpc3RoZWFkcworCXUzMgkJCQkJCUludFJlZ2lzdGVyZWQ6MTsJLy8gSW50ZXJydXB0IHJlZ2lzdGVyZWQKKwl1MzIJCQkJCQlQaW5nT3V0c3RhbmRpbmc6MTsJLy8gUGluZyBvdXRzdGFuZGluZyB0byBjYXJkCisJdTMyCQkJCQkJRGVhZDoxOwkJCQkvLyBDYXJkIGRlYWQKKwl1MzIJCQkJCQlEdW1wRHJpdmVyOjE7CQkvLyBPSURfU0xJQ19EUklWRVJfRFVNUCByZXF1ZXN0CisJdTMyCQkJCQkJRHVtcENhcmQ6MTsJCQkvLyBPSURfU0xJQ19DQVJEX0RVTVAgcmVxdWVzdAorCXUzMgkJCQkJCUR1bXBDbWRSdW5uaW5nOjE7CS8vIER1bXAgY29tbWFuZCBpbiBwcm9ncmVzcworCXUzMgkJCQkJCURlYnVnUnVubmluZzoxOwkJLy8gQUdEQiBkZWJ1ZyBpbiBwcm9ncmVzcworCXUzMgkJCQkJCUp1bWJvRW5hYmxlZDoxOwkJLy8gSnVtYm8gZnJhbWVzIGVuYWJsZWQKKwl1MzIJCQkJCQlNc2lFbmFibGVkOjE7CQkvLyBNU0kgaW50ZXJydXB0IGVuYWJsZWQKKwl1MzIJCQkJCQlSc3NFbmFibGVkOjE7CQkvLyBSU1MgRW5hYmxlZAorCXUzMgkJCQkJCUZhaWxPbkJhZEVlcHJvbToxOwkvLyBGYWlsIG9uIEJhZCBFZXByb20KKwl1MzIJCQkJCQlEaWFnU3RhcnQ6MTsJCS8vIEluaXQgYWRhcHRlciBmb3IgZGlhZ25vc3RpYyBzdGFydAorCS8vIFN0YXRzCisJdTMyCQkJCQkJUGVuZGluZ1JjdkNvdW50OwkvLyBPdXRzdGFuZGluZyByY3YgaW5kaWNhdGlvbnMKKwl1MzIJCQkJCQlQZW5kaW5nWG10Q291bnQ7CS8vIE91dHN0YW5kaW5nIHNlbmQgcmVxdWVzdHMKKwlTWEdfU1RBVFMJCQkJCVN0YXRzOwkJCQkvLyBTdGF0aXN0aWNzCisJdTMyCQkJCQkJUmVhc3NCdWZzOwkJCS8vIE51bWJlciBvZiByZWFzc2VtYmx5IGJ1ZmZlcnMKKwkvLyBDYXJkIENyYXNoIEluZm8KKwl1c2hvcnQJCQkJCQlDcmFzaExvY2F0aW9uOwkJLy8gTWljcm9jb2RlIGNyYXNoIGxvY2F0aW9uCisJdW5zaWduZWQgY2hhcgkJCQkJCUNyYXNoQ3B1OwkJCS8vIFNhaGFyYSBDUFUgSUQKKwkvLyBEaWFnbm9zdGljcworCS8vCVBESUFHX0NNRAkJCQkJRGlhZ0NtZHM7CQkJLy8gTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgY29tbWFuZHMKKwkvLwlQRElBR19CVUZGRVIJCQkJRGlhZ0J1ZmZlcnM7CQkvLyBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBidWZmZXJzCisJLy8JUERJQUdfUkVRCQkJCQlEaWFnUmVxUTsJCQkvLyBMaXN0IG9mIG91dHN0YW5kaW5nIChhc3luY2hyb25vdXMpIGRpYWcgcmVxdWVzdHMKKwkvLwl1MzIJCQkJCQlEaWFnQ21kVGltZW91dDsJCS8vIFRpbWUgb3V0IGZvciBkaWFnIGNtZHMgKHNlY29uZHMpIFhYWFRPRE8gLSByZXBsYWNlIHdpdGggU1hHX1BBUkFNIHZhcj8KKwkvLwl1bnNpZ25lZCBjaGFyCQkJCQkJRGlhZ0RtYURlc2NbRE1BX0NQVV9DVFhTXTsJCS8vIEZyZWUgRE1BIGRlc2NyaXB0b3JzIGJpdCBmaWVsZCAoMzIgQ1BVIGN0eCAqIDggRE1BIGN0eCkKKworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIFB1dCBwcmVwcm9jZXNzb3ItY29uZGl0aW9uYWwgZmllbGRzIGF0IHRoZSBlbmQgc28gd2UgZG9uJ3QKKwkvLyBoYXZlIHRvIHJlY29tcGlsZSBzeGdkYmcgZXZlcnl0aW1lIHdlIHJlY29uZmlndXJlIHRoZSBkcml2ZXIKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwl2b2lkICoJCQkJCQlQZW5kaW5nU2V0UnNzOwkJLy8gUGVuZGluZyBSU1MgcGFyYW1ldGVyIGNoYW5nZQorCXUzMgkJCQkJCUlQdjRIZHJTaXplOwkJLy8gU2hhcmVkIDUuMi82LjAgZW5jYXAgcGFyYW0KKwl1bnNpZ25lZCBjaGFyICogICAgICAgICAgCQkJSW50ZXJydXB0SW5mbzsJCS8vIEFsbG9jYXRlZCBieSB1cyBkdXJpbmcgQWRkRGV2aWNlCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCXUzMgkJCQkJCUFkZHJVcHBlcjsJCQkvLyBVcHBlciAzMiBiaXRzIG9mIDY0LWJpdCByZWdpc3RlcgorI2VuZGlmCisJLy8jaWYgU1hHX0ZBSUxVUkVfRFVNUAorCS8vCU5ESVNfRVZFTlQJCQkJCUR1bXBUaHJlYWRFdmVudDsJLy8gc3luY3Jvbml6ZSBkdW1wIHRocmVhZAorCS8vCUJPT0xFQU4JCQkJCQlEdW1wVGhyZWFkUnVubmluZzsJLy8gdGVybWluYXRpb24gZmxhZworCS8vCVBTWEdfRFVNUF9DTUQJCQkJRHVtcEJ1ZmZlcjsJCQkvLyA2OGsgLSBDbWQgYW5kIEJ1ZmZlcgorCS8vCWRtYV9hZGRyX3QJCVBEdW1wQnVmZmVyOwkJLy8gUGh5c2ljYWwgYWRkcmVzcworCS8vI2VuZGlmIC8vIFNYR19GQUlMVVJFX0RVTVAKKworfSBhZGFwdGVyX3QsICpwX2FkYXB0ZXJfdDsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjZGVmaW5lIFNMSUNfRFVNUF9SRVFVRVNURUQgICAgICAxCisjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCisjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfc2xpY19jcmFzaF9pbmZvIHsKKyAgICB1c2hvcnQgIGNwdV9pZDsKKyAgICB1c2hvcnQgIGNyYXNoX3BjOworfSBzbGljX2NyYXNoX2luZm8sICpwX3NsaWNfY3Jhc2hfaW5mbzsKKworI2RlZmluZSBDUkFTSF9JTkZPX09GRlNFVCAgIDB4MTU1QworCisjZW5kaWYKKworI2RlZmluZSBVUERBVEVfU1RBVFMobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChuZXdzdGF0KSA8IChvbGRzdGF0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpICsgKDB4RkZGRkZGRkYgLSBvbGRzdGF0ICsgMSkpOyAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgLSAob2xkc3RhdCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVQREFURV9TVEFUU19HQihsYXJnZXN0YXQsIG5ld3N0YXQsIG9sZHN0YXQpICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBFVEhFUk1BWEZSQU1FICAgMTUxNAorI2RlZmluZSBKVU1CT01BWEZSQU1FICAgOTAxNAorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAodTMyKSgodTY0KShfYWRkcikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKSgoKHU2NCkoX2FkZHIpID4+IDMyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKKyNlbHNlCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKTAKKyNlbmRpZgorCisjZGVmaW5lIEZMVVNIICAgICAgIFRSVUUKKyNkZWZpbmUgRE9OVF9GTFVTSCAgRkFMU0UKKworI2RlZmluZSBTSU9DU0xJQ0RVTVBDQVJEICAgICAgICAgU0lPQ0RFVlBSSVZBVEUrOQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgU0lPQ0RFVlBSSVZBVEUrMTAKKyNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIFNJT0NERVZQUklWQVRFKzExCisKKyNlbmRpZiAvKiAgX19TWEdfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYjBmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzeGdfb3MuaAorICoKKyAqIFRoZXNlIGFyZSB0aGUgTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBTTElDT1NTCisgKiBkcml2ZXIsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JlYXRlciBwb3J0YWJpbGl0eSB0byBvdGhlciBPU2VzLgorICovCisjaWZuZGVmIF9TTElDX09TX1NQRUNJRklDX0hfCisjZGVmaW5lIF9TTElDX09TX1NQRUNJRklDX0hfCisKKyNkZWZpbmUgRkFMU0UJKDApCisjZGVmaW5lIFRSVUUJKDEpCisKKwordHlwZWRlZiBzdHJ1Y3QgX0xJU1RfRU5UUlkgeworCXN0cnVjdCBfTElTVF9FTlRSWSAqbmxlX2ZsaW5rOworCXN0cnVjdCBfTElTVF9FTlRSWSAqbmxlX2JsaW5rOworfSBsaXN0X2VudHJ5LCBMSVNUX0VOVFJZLCAqUExJU1RfRU5UUlk7CisKKyNkZWZpbmUgSW5pdGlhbGl6ZUxpc3RIZWFkKGwpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAobCktPm5sZV9ibGluayA9IChsKQorCisjZGVmaW5lIElzTGlzdEVtcHR5KGgpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoaCktPm5sZV9mbGluayA9PSAoaCkpCisKKyNkZWZpbmUgUmVtb3ZlRW50cnlMaXN0KGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqZjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmID0gKGUpLT5ubGVfZmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiID0gKGUpLT5ubGVfYmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmLT5ubGVfYmxpbmsgPSBiOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworLyogVGhlc2UgdHdvIGhhdmUgdG8gYmUgaW5saW5lZCBzaW5jZSB0aGV5IHJldHVybiB0aGluZ3MuICovCisKK3N0YXRpYyBfX2lubGluZSBQTElTVF9FTlRSWQorUmVtb3ZlSGVhZExpc3QobGlzdF9lbnRyeSAqbCkKK3sKKyAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmY7CisgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICplOworCisgICAgICAgIGUgPSBsLT5ubGVfZmxpbms7CisgICAgICAgIGYgPSBlLT5ubGVfZmxpbms7CisgICAgICAgIGwtPm5sZV9mbGluayA9IGY7CisgICAgICAgIGYtPm5sZV9ibGluayA9IGw7CisKKyAgICAgICAgcmV0dXJuIChlKTsKK30KKworc3RhdGljIF9faW5saW5lIFBMSVNUX0VOVFJZCitSZW1vdmVUYWlsTGlzdChsaXN0X2VudHJ5ICpsKQoreworICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsKKyAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmU7CisKKyAgICAgICAgZSA9IGwtPm5sZV9ibGluazsKKyAgICAgICAgYiA9IGUtPm5sZV9ibGluazsKKyAgICAgICAgbC0+bmxlX2JsaW5rID0gYjsKKyAgICAgICAgYi0+bmxlX2ZsaW5rID0gbDsKKworICAgICAgICByZXR1cm4gKGUpOworfQorCisKKyNkZWZpbmUgSW5zZXJ0VGFpbExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiID0gKGwpLT5ubGVfYmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IChsKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAobCktPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJbnNlcnRIZWFkTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYgPSAobCktPm5sZV9mbGluazsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gbDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChsKS0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgQVRLX0RFQlVHICAxCisKKyNpZiBBVEtfREVCVUcKKyNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorI2RlZmluZSBTTElDX1RJTUVTVEFNUCh2YWx1ZSkKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKiogIFNYRyBERUZJTkVTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmICBBVEtEQkcKKyNkZWZpbmUgU1hHX1RJTUVTVEFNUCh2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2YWx1ZSA9IHRpbWV2LnR2X3NlYyoxMDAwMDAwICsgdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpCisjZW5kaWYKKworI2RlZmluZSBXUklURV9SRUcocmVnLHZhbHVlLGZsdXNoKSAgICAgICAgICAgICAgICAgIHN4Z19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpCisjZGVmaW5lIFdSSVRFX1JFRzY0KGEscmVnLHZhbHVlLGNwdSkgICAgICAgICAgICAgICAgc3hnX3JlZzY0X3dyaXRlKChhKSwoJnJlZyksKHZhbHVlKSwoY3B1KSkKKyNkZWZpbmUgUkVBRF9SRUcocmVnLHZhbHVlKSAgICh2YWx1ZSkgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKCZyZWcpKQorCisjZW5kaWYgIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmI2YzdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaApAQCAtMCwwICsxLDE5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IKkgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogJElkOiBzeGdkYmcuaCx2IDEuMSAyMDA4LzA2LzI3IDEyOjQ5OjI4IG1vb2sgRXhwICQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Z2RiZy5oCisgKgorICogQWxsIGRlYnVnIGFuZCBhc3NlcnRpb24tYmFzZWQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaW5jbHVkZWQKKyAqIGluIHRoaXMgZmlsZSBmb3IgdGhlIFNYR09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NYR19ERUJVR19IXworI2RlZmluZSBfU1hHX0RFQlVHX0hfCisKKyNkZWZpbmUgQVRLREJHICAxCisjZGVmaW5lIEFUS19UUkFDRV9FTkFCTEVEIDEKKworI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQorCisjaWZkZWYgQVNTRVJUCisjdW5kZWYgQVNTRVJUCisjZW5kaWYKKworI2lmZGVmIFNYR19BU1NFUlRfRU5BQkxFRAorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAorICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpCisjZW5kaWYKKyNlbmRpZiAvKiBTWEdfQVNTRVJUX0VOQUJMRUQgICovCisKKworI2lmZGVmIEFUS0RCRworLyoKKyAqICBHbG9iYWwgZm9yIHRpbWVyIGdyYW51bGFyaXR5OyBldmVyeSBkcml2ZXIgbXVzdCBoYXZlIGFuIGluc3RhbmNlCisgKiAgb2YgdGhpcyBpbml0aWFsaXplZCB0byAwCisgKi8KKworZXh0ZXJuIHVsb25nIEFUS1RpbWVyRGl2OworCisvKgorICogdHJhY2VfZW50cnlfdCAtCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiBlbnRyeSBpbiB0aGUgdHJhY2UgYnVmZmVyLiAgVGhlCisgKiBmaXJzdCBmZXcgZmllbGRzIG1lYW4gdGhlIHNhbWUgZnJvbSBlbnRyeSB0byBlbnRyeSwgd2hpbGUKKyAqIHRoZSBtZWFuaW5nIG9mIGxhc3Qgc2V2ZXJhbCBmaWVsZHMgY2hhbmdlIHRvIHN1aXQgdGhlCisgKiBuZWVkcyBvZiB0aGUgdHJhY2UgZW50cnkuICBUeXBpY2FsbHkgdGhleSBhcmUgZnVuY3Rpb24gY2FsbAorICogcGFyYW1ldGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3RyYWNlX2VudHJ5X3MgeworICAgICAgICBjaGFyICAgICAgbmFtZVs4XTsgICAgICAgIC8qIDggY2hhcmFjdGVyIG5hbWUgLSBsaWtlICdzJ2knbSdiJ2EncidjJ3YnICovCisgICAgICAgIHUzMiAgIHRpbWU7ICAgICAgICAgICAvKiBDdXJyZW50IGNsb2NrIHRpYyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBjcHU7ICAgICAgICAgICAgLyogQ3VycmVudCBDUFUgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgaXJxbDsgICAgICAgICAgIC8qIEN1cnJlbnQgSVJRTCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBkcml2ZXI7ICAgICAgICAgLyogVGhlIGRyaXZlciB3aGljaCBhZGRlZCB0aGUgdHJhY2UgY2FsbCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQyOyAgICAgICAgICAgLyogcGFkIHRvIDQgYnl0ZSBib3VuZGFyeSAtIHdpbGwgcHJvYmFibHkgZ2V0IHVzZWQgKi8KKyAgICAgICAgdTMyICAgYXJnMTsgICAgICAgICAgIC8qIENhbGxlciBhcmcxICovCisgICAgICAgIHUzMiAgIGFyZzI7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMiAqLworICAgICAgICB1MzIgICBhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KKyAgICAgICAgdTMyICAgYXJnNDsgICAgICAgICAgIC8qIENhbGxlciBhcmc0ICovCit9IHRyYWNlX2VudHJ5X3QsICpwdHJhY2VfZW50cnlfdDsKKworLyoKKyAqIERyaXZlciB0eXBlcyBmb3IgZHJpdmVyIGZpZWxkIGluIHRyYWNlX2VudHJ5X3QKKyAqLworI2RlZmluZSBUUkFDRV9TWEcgICAgICAgICAgICAgMQorI2RlZmluZSBUUkFDRV9WUENJICAgICAgICAgICAgMgorI2RlZmluZSBUUkFDRV9TTElDICAgICAgICAgICAgMworCisjZGVmaW5lIFRSQUNFX0VOVFJJRVMgICAxMDI0CisKK3R5cGVkZWYgc3RydWN0IF9zeGdfdHJhY2VfYnVmZmVyX3QKK3sKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBzaXplOyAgICAgICAgICAgICAgICAgIC8qIGFpZCBmb3Igd2luZGJnIGV4dGVuc2lvbiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIGluOyAgICAgICAgICAgICAgICAgICAgLyogV2hlcmUgdG8gYWRkICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgbGV2ZWw7ICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IFRyYWNlIGxldmVsICovCisJc3BpbmxvY2tfdAlsb2NrOyAgICAgICAgICAgICAgICAgIC8qIEZvciBNUCB0cmFjaW5nICovCisgICAgICAgIHRyYWNlX2VudHJ5X3QgICAgICAgICAgIGVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworfSBzeGdfdHJhY2VfYnVmZmVyX3Q7CisKKy8qCisgKiBUaGUgdHJhY2UgbGV2ZWxzCisgKgorICogWFhYIEF0IHRoZSBtb21lbnQgSSBhbSBvbmx5IGRlZmluaW5nIGNyaXRpY2FsLCBpbXBvcnRhbnQsIGFuZCBub2lzeS4KKyAqIEkgYW0gbGVhdmluZyByb29tIGZvciBtb3JlIGlmIGFueW9uZSB3YW50cyB0aGVtLgorICovCisjZGVmaW5lIFRSQUNFX05PTkUgICAgICAgICAgICAgIDAgICAvKiBGb3IgdHJhY2UgbGV2ZWwgLSBpZiBubyB0cmFjaW5nIHdhbnRlZCAqLworI2RlZmluZSBUUkFDRV9DUklUSUNBTCAgICAgICAgICAxICAgLyogbWluaW1hbCB0cmFjaW5nIC0gb25seSBjcml0aWNhbCBzdHVmZiAqLworI2RlZmluZSBUUkFDRV9JTVBPUlRBTlQgICAgICAgICA1ICAgLyogbW9yZSB0cmFjaW5nIC0gYW55dGhpbmcgaW1wb3J0YW50ICovCisjZGVmaW5lIFRSQUNFX05PSVNZICAgICAgICAgICAgIDEwICAvKiBFdmVyeXRoaW5nIGluIHRoZSB3b3JsZCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIG1hY3JvcyB0aGVtc2VsdmVzIC0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIEFUS19UUkFDRV9FTkFCTEVECisjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQkJCQlcCit7CQkJCQkJCQlcCisJbWVtc2V0KChidWZmZXIpLCAwLCBzaXplb2Yoc3hnX3RyYWNlX2J1ZmZlcl90KSk7CVwKKwkoYnVmZmVyKS0+bGV2ZWwgPSAodGxldmVsKTsJCQkJXAorCShidWZmZXIpLT5zaXplID0gVFJBQ0VfRU5UUklFUzsJCQkJXAorCXNwaW5fbG9ja19pbml0KCYoYnVmZmVyKS0+bG9jayk7CQkJXAorfQorI2Vsc2UKKyNkZWZpbmUgU1hHX1RSQUNFX0lOSVQoYnVmZmVyLCB0bGV2ZWwpCisjZW5kaWYKKworLyoKKyAqIFRoZSB0cmFjZSBtYWNyby4gIFRoaXMgaXMgYWN0aXZlIG9ubHkgaWYgQVRLX1RSQUNFX0VOQUJMRUQgaXMgc2V0LgorICovCisjaWYgQVRLX1RSQUNFX0VOQUJMRUQKKyNkZWZpbmUgU1hHX1RSQUNFKHRkcml2ZXIsIGJ1ZmZlciwgdGxldmVsLCB0bmFtZSwgYTEsIGEyLCBhMywgYTQpIHsgICAgICAgIFwKKyAgICAgICAgaWYgKChidWZmZXIpICYmICgoYnVmZmVyKS0+bGV2ZWwgPj0gKHRsZXZlbCkpKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9pcnFsID0gMDsgICAgLyogPz8/Pz8/IEZJWCBUSElTICAqLyAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHB0cmFjZV9lbnRyeV90ICB0cmFjZV9lbnRyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5ID0gJihidWZmZXIpLT5lbnRyaWVzWyhidWZmZXIpLT5pbl07ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG1lbXNldCh0cmFjZV9lbnRyeS0+bmFtZSwgMCwgOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gc3RybGVuKHRuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG1lbWNweSh0cmFjZV9lbnRyeS0+bmFtZSwgKHRuYW1lKSwgdHJhY2VfbGVuKTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPnRpbWUgPSB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+Y3B1ID0gKHVuc2lnbmVkIGNoYXIpKHNtcF9wcm9jZXNzb3JfaWQoKSAmIDB4RkYpOyAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmRyaXZlciA9ICh0ZHJpdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcxID0gKHVsb25nKShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzIgPSAodWxvbmcpKGEyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmc0ID0gKHVsb25nKShhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyKS0+aW4gPT0gVFJBQ0VfRU5UUklFUykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYgIC8qICBfU1hHX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyNmNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKQEAgLTAsMCArMSw4NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgqSAxOTk3LTIwMDcgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogJElkOiBzeGdoaWYuaCx2IDEuNSAyMDA4LzA3LzI0IDE5OjE4OjIyIGNocmlzIEV4cCAkCisgKgorICogc3hnaGlmLmg6CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIEFsYWNyaXRlY2ggU2FoYXJhIGhvc3QgaW50ZXJmYWNlCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVDT0RFIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfU1hHX1VDT0RFX1JFR1MgeworCS8vIEFkZHJlc3MgMCAtIDB4M0YgPSBDb21tYW5kIGNvZGVzIDAtMTUgZm9yIFRDQiAwLiAgRXhjb2RlIDAKKwl1MzIJCUljcjsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAwIC0gSW50IGNvbnRyb2wKKwl1MzIJCVJzdmRSZWcxOwkJLy8gQ29kZSA9IDEgLSBUT0UgLU5BCisJdTMyCQlSc3ZkUmVnMjsJCS8vIENvZGUgPSAyIC0gVE9FIC1OQQorCXUzMgkJUnN2ZFJlZzM7CQkvLyBDb2RlID0gMyAtIFRPRSAtTkEKKwl1MzIJCVJzdmRSZWc0OwkJLy8gQ29kZSA9IDQgLSBUT0UgLU5BCisJdTMyCQlSc3ZkUmVnNTsJCS8vIENvZGUgPSA1IC0gVE9FIC1OQQorCXUzMgkJQ2FyZFVwOwkJCS8vIENvZGUgPSA2IC0gTWljcm9jb2RlIGluaXRpYWxpemVkIHdoZW4gMQorCXUzMgkJUnN2ZFJlZzc7CQkvLyBDb2RlID0gNyAtIFRPRSAtTkEKKwl1MzIJCUNvZGVOb3RVc2VkWzhdOwkJLy8gQ29kZXMgOC0xNSBub3QgdXNlZC4gIEV4Q29kZSA9IDAKKwkvLyBUaGlzIGJyaW5ncyB1cyB0byBFeENvZGUgMSBhdCBhZGRyZXNzIDB4NDAgPSBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIKKwl1MzIJCUlzcDsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxCisJdTMyCQlQYWRFeDFbMTVdOwkJLy8gQ29kZXMgMS0xNSBub3QgdXNlZCB3aXRoIGV4dGVuZGVkIGNvZGVzCisJLy8gRXhDb2RlIDIgPSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisJdTMyCQlJc3I7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMgorCXUzMgkJUGFkRXgyWzE1XTsKKwkvLyBFeENvZGUgMyA9IEV2ZW50IGJhc2UgcmVnaXN0ZXIuICBMb2NhdGlvbiBvZiBldmVudCByaW5ncworCXUzMgkJRXZlbnRCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMworCXUzMgkJUGFkRXgzWzE1XTsKKwkvLyBFeENvZGUgNCA9IEV2ZW50IHJpbmcgc2l6ZQorCXUzMgkJRXZlbnRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNAorCXUzMgkJUGFkRXg0WzE1XTsKKwkvLyBFeENvZGUgNSA9IFRDQiBCdWZmZXJzIGJhc2UgYWRkcmVzcworCXUzMgkJVGNiQmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDUKKwl1MzIJCVBhZEV4NVsxNV07CisJLy8gRXhDb2RlIDYgPSBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzCisJdTMyCQlUY2JDb21wQmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDYKKwl1MzIJCVBhZEV4NlsxNV07CisJLy8gRXhDb2RlIDcgPSBUcmFuc21pdCByaW5nIGJhc2UgYWRkcmVzcworCXUzMgkJWG10QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcKKwl1MzIJCVBhZEV4N1sxNV07CisJLy8gRXhDb2RlIDggPSBUcmFuc21pdCByaW5nIHNpemUKKwl1MzIJCVhtdFNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA4CisJdTMyCQlQYWRFeDhbMTVdOworCS8vIEV4Q29kZSA5ID0gUmVjZWl2ZSByaW5nIGJhc2UgYWRkcmVzcworCXUzMgkJUmN2QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDkKKwl1MzIJCVBhZEV4OVsxNV07CisJLy8gRXhDb2RlIDEwID0gUmVjZWl2ZSByaW5nIHNpemUKKwl1MzIJCVJjdlNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMAorCXUzMgkJUGFkRXgxMFsxNV07CisJLy8gRXhDb2RlIDExID0gUmVhZCBFRVBST00gQ29uZmlnCisJdTMyCQlDb25maWc7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTEKKwl1MzIJCVBhZEV4MTFbMTVdOworCS8vIEV4Q29kZSAxMiA9IE11bHRpY2FzdCBiaXRzIDMxOjAKKwl1MzIJCU1jYXN0TG93OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTIKKwl1MzIJCVBhZEV4MTJbMTVdOworCS8vIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyCisJdTMyCQlNY2FzdEhpZ2g7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMworCXUzMgkJUGFkRXgxM1sxNV07CisJLy8gRXhDb2RlIDE0ID0gUGluZworCXUzMgkJUGluZzsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNAorCXUzMgkJUGFkRXgxNFsxNV07CisJLy8gRXhDb2RlIDE1ID0gTGluayBNVFUKKwl1MzIJCUxpbmtNdHU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNQorCXUzMgkJUGFkRXgxNVsxNV07CisJLy8gRXhDb2RlIDE2ID0gRG93bmxvYWQgc3luY2hyb25pemF0aW9uCisJdTMyCQlMb2FkU3luYzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE2CisJdTMyCQlQYWRFeDE2WzE1XTsKKwkvLyBFeENvZGUgMTcgPSBVcHBlciBEUkFNIGFkZHJlc3MgYml0cyBvbiAzMi1iaXQgc3lzdGVtcworCXUzMgkJVXBwZXI7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTcKKwl1MzIJCVBhZEV4MTdbMTVdOworCS8vIEV4Q29kZSAxOCA9IFNsb3dwYXRoIFNlbmQgSW5kZXggQWRkcmVzcworCXUzMgkJU1BTZW5kSW5kZXg7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOAorCXUzMgkJUGFkRXgxOFsxNV07CisJdTMyCQlSc3ZkWEY7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTkKKwl1MzIJCVBhZEV4MTlbMTVdOworCS8vIEV4Q29kZSAyMCA9IEFnZ3JlZ2F0aW9uCisJdTMyCQlBZ2dyZWdhdGlvbjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIwCisJdTMyCQlQYWRFeDIwWzE1XTsKKwkvLyBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyCisJdTMyCQlQdXNoVGlja3M7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMQorCXUzMgkJUGFkRXgyMVsxNV07CisJLy8gRXhDb2RlIDIyID0gVE9FIE5BCisJdTMyCQlBY2tGcmVxdWVuY3k7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMgorCXUzMgkJUGFkRXgyMlsxNV07CisJLy8gRXhDb2RlIDIzID0gVE9FIE5BCisJdTMyCQlSc3ZkUmVnMjM7CisJdTMyCQlQYWRFeDIzWzE1XTsKKwkvLyBFeENvZGUgMjQgPSBUT0UgTkEKKwl1MzIJCVJzdmRSZWcyNDsKKwl1MzIJCVBhZEV4MjRbMTVdOworCS8vIEV4Q29kZSAyNSA9IFRPRSBOQQorCXUzMgkJUnN2ZFJlZzI1OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjUKKwl1MzIJCVBhZEV4MjVbMTVdOworCS8vIEV4Q29kZSAyNiA9IFJlY2VpdmUgY2hlY2tzdW0gcmVxdWlyZW1lbnRzCisJdTMyCQlSZWNlaXZlQ2hlY2tzdW07CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI2CisJdTMyCQlQYWRFeDI2WzE1XTsKKwkvLyBFeENvZGUgMjcgPSBSU1MgUmVxdWlyZW1lbnRzCisJdTMyCQlSc3M7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcKKwl1MzIJCVBhZEV4MjdbMTVdOworCS8vIEV4Q29kZSAyOCA9IFJTUyBUYWJsZQorCXUzMgkJUnNzVGFibGU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOAorCXUzMgkJUGFkRXgyOFsxNV07CisJLy8gRXhDb2RlIDI5ID0gRXZlbnQgcmluZyByZWxlYXNlIGVudHJpZXMKKwl1MzIJCUV2ZW50UmVsZWFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI5CisJdTMyCQlQYWRFeDI5WzE1XTsKKwkvLyBFeENvZGUgMzAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJsaXN0IGNvbW1hbmRzIG9uIHJpbmcgMAorCXUzMgkJUmN2Q21kOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMwCisJdTMyCQlQYWRFeDMwWzE1XTsKKwkvLyBFeENvZGUgMzEgPSBzbG93cGF0aCB0cmFuc21pdCBjb21tYW5kIC0gRGF0YVszMTowXSA9IDEKKwl1MzIJCVhtdENtZDsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMQorCXUzMgkJUGFkRXgzMVsxNV07CisJLy8gRXhDb2RlIDMyID0gRHVtcCBjb21tYW5kCisJdTMyCQlEdW1wQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzIKKwl1MzIJCVBhZEV4MzJbMTVdOworCS8vIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQKKwl1MzIJCURlYnVnQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzMKKwl1MzIJCVBhZEV4MzNbMTVdOworCS8vIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2CisJLy8gd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KKwkvLyBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKKwkvLyBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCisJLy8gdGhlIGZvbGxvd2luZyBmaWVsZAorCXUzMgkJUGFkVG9OZXh0Q3B1Wzk0XVsxNl07CS8vIDk0ID0gMTI4IC0gMzQgKDM0ID0gRXhjb2RlcyAwIC0gMzMpCit9IFNYR19VQ09ERV9SRUdTLCAqUFNYR19VQ09ERV9SRUdTOworCisvLyBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAoMCkgdmFsdWVzCisjZGVmaW5lIFNYR19JQ1JfRElTQUJMRQkJCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTWEdfSUNSX0VOQUJMRQkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBTWEdfSUNSX01BU0sJCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1hHX0lDUl9NU0dJRF9NQVNLCQkJCTB4RkZGRjAwMDAKKyNkZWZpbmUgU1hHX0lDUl9NU0dJRF9TSElGVAkJCTE2CisjZGVmaW5lIFNYR19JQ1IoX01lc3NhZ2VJZCwgX0RhdGEpCVwKKwkoKCgoX01lc3NhZ2VJZCkgPDwgU1hHX0lDUl9NU0dJRF9TSElGVCkgJglcCisJICBTWEdfSUNSX01TR0lEX01BU0spIHwgKF9EYXRhKSkKKworLy8gVGhlIE1pY3JvY29kZSBzdXBwb3J0cyB1cCB0byAxNiBSU1MgcXVldWVzCisjZGVmaW5lIFNYR19NQVhfUlNTCQkJCTE2CisjZGVmaW5lIFNYR19NQVhfUlNTX1RBQkxFX1NJWkUJMjU2CQkvLyAyNTYtYnl0ZSBtYXgKKworI2RlZmluZSBTWEdfUlNTX1RDUDYJCQkJMHgwMDAwMDAwMQkvLyBSU1MgVENQIG92ZXIgSVB2NgorI2RlZmluZSBTWEdfUlNTX1RDUDQJCQkJMHgwMDAwMDAwMgkvLyBSU1MgVENQIG92ZXIgSVB2NAorI2RlZmluZSBTWEdfUlNTX0xFR0FDWQkJCQkweDAwMDAwMDA0CS8vIExpbmUtYmFzZSBpbnRlcnJ1cHRzCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0laRQkJCTB4MDAwMEZGMDAJLy8gVGFibGUgc2l6ZSBtYXNrCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0hJRlQJCQk4CisjZGVmaW5lCVNYR19SU1NfQkFTRV9DUFUJCQkweDAwRkYwMDAwCS8vIEJhc2UgQ1BVIChub3QgdXNlZCkKKyNkZWZpbmUgU1hHX1JTU19CQVNFX1NISUZUCQkJMTYKKworI2RlZmluZSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRAkJMHgwMDAwMDAwMQkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKKyNkZWZpbmUgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVECTB4MDAwMDAwMDIJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisKKyNkZWZpbmUgU1hHX1hNVF9DUFVJRF9TSElGVAkJCTE2CisKKyNpZiBWUENJCisjZGVmaW5lIFNYR19DSEVDS19GT1JfSEFOR19USU1FCQkzMDAwCisjZWxzZQorI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJNQorI2VuZGlmCisKKy8qCisgKiBUQ0IgcmVnaXN0ZXJzIC0gVGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgcmVnaXN0ZXIgbWVtb3J5IGFyZWEgYXMgVUNPREVfUkVHUworICogYWJvdmUsIGJ1dCBkZWZpbmVkIGRpZmZlcmVudGx5LiAgQml0cyAxNzowNiBvZiB0aGUgYWRkcmVzcyBkZWZpbmUgdGhlIFRDQiwKKyAqIHdoaWNoIG1lYW5zIGVhY2ggVENCIGFyZWEgb2NjdXBpZXMgMHg0MCAoNjQpIGJ5dGVzLCBvciAxNiB1MzJTLiAgV2hhdCByZWFsbHkKKyAqIGlzIGhhcHBlbmluZyBpcyB0aGF0IHRoZXNlIHJlZ2lzdGVycyBvY2N1cHkgdGhlICJQYWRFeFsxNV0iIGFyZWFzIGluIHRoZQorICogU1hHX1VDT0RFX1JFR1MgZGVmaW5pdGlvbiBhYm92ZQorICovCit0eXBlZGVmIHN0cnVjdCBfU1hHX1RDQl9SRUdTIHsKKwl1MzIJCUV4Q29kZTsJCS8qIEV4dGVuZGVkIGNvZGVzIC0gc2VlIFNYR19VQ09ERV9SRUdTICovCisJdTMyCQlYbXQ7CQkvKiBDb2RlID0gMSAtICMgb2YgWG10IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KKwl1MzIJCVJjdjsJCS8qIENvZGUgPSAyIC0gIyBvZiBSY3YgZGVzY3JpcHRvcnMgYWRkZWQgdG8gcmluZyAqLworCXUzMgkJUnN2ZDE7CQkvKiBDb2RlID0gMyAtIFRPRSBOQSAqLworCXUzMgkJUnN2ZDI7CQkvKiBDb2RlID0gNCAtIFRPRSBOQSAqLworCXUzMgkJUnN2ZDM7CQkvKiBDb2RlID0gNSAtIFRPRSBOQSAqLworCXUzMgkJSW52YWxpZDsJLyogQ29kZSA9IDYgLSBSZXNlcnZlZCBmb3IgIkNhcmRVcCIgc2VlIGFib3ZlICovCisJdTMyCQlSc3ZkNDsJCS8qIENvZGUgPSA3IC0gVE9FIE5BICovCisJdTMyCQlSc3ZkNTsJCS8qIENvZGUgPSA4IC0gVE9FIE5BICovCisJdTMyCQlQYWRbN107CQkvKiBDb2RlcyA4LTE1IC0gTm90IHVzZWQuICovCit9IFNYR19UQ0JfUkVHUywgKlBTWEdfVENCX1JFR1M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElTUiBGb3JtYXQKKyAqICAgICAgICAgICAgICAgIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgICAgICAgICAgICAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgfF9fX198X19fX3xfX19ffF9fX198X19fX3xfX19ffF9fX198X19fX3wKKyAqICAgICAgICAgICAgICAgICBeXl5eIF5eXl4gXl5eXiBeXl5eIFwgICAgICAgICAgICAgICAgIC8KKyAqICAgICAgICAgICBFUlIgLS18fHx8IHx8fHwgfHx8fCB8fHx8ICAtLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICBFVkVOVCAtLS18fHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfAorICogICAgICAgICAgICAgICAtLS0tfHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfC0tIENyYXNoIEFkZHJlc3MKKyAqICAgICAgICAgICBVUEMgLS0tLS18IHx8fHwgfHx8fCB8fHx8CisgKiAgICAgICAgTEVWRU5UIC0tLS0tLS18fHx8IHx8fHwgfHx8fAorICogICAgICAgICAgUERRRiAtLS0tLS0tLXx8fCB8fHx8IHx8fHwKKyAqICAgICAgICAgUk1JU1MgLS0tLS0tLS0tfHwgfHx8fCB8fHx8CisgKiAgICAgICAgIEJSRUFLIC0tLS0tLS0tLS18IHx8fHwgfHx8fAorICogICAgICAgSEJFQVRPSyAtLS0tLS0tLS0tLS18fHx8IHx8fHwKKyAqICAgICAgIE5PSEJFQVQgLS0tLS0tLS0tLS0tLXx8fCB8fHx8CisgKiAgICAgICAgRVJGVUxMIC0tLS0tLS0tLS0tLS0tfHwgfHx8fAorICogICAgICAgICBYRFJPUCAtLS0tLS0tLS0tLS0tLS18IHx8fHwKKyAqICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS18fHx8CisgKiAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tfHx8fC0tXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fC0tLXwtQ3B1SWQgb2YgY3Jhc2gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0vCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSVNSX0VSUgkJMHg4MDAwMDAwMAkvLyBFcnJvcgorI2RlZmluZSBTWEdfSVNSX0VWRU5UCQkweDQwMDAwMDAwCS8vIEV2ZW50IHJpbmcgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9OT05FMQkJMHgyMDAwMDAwMAkvLyBOb3QgdXNlZAorI2RlZmluZSBTWEdfSVNSX1VQQwkJMHgxMDAwMDAwMAkvLyBEdW1wL2RlYnVnIGNvbW1hbmQgY29tcGxldGUKKyNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8vIExpbmsgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8vIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwKKyNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvLyBEcm9wIC0gbm8gaG9zdCBidWYKKyNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvLyBCcmVha3BvaW50IGhpdAorI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCisjZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvLyBDYXJkIGNyYXNoCisjZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8vIEV2ZW50IHJpbmcgZnVsbAorI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8vIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIKKyNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLy8gU2xvdyBzZW5kIGNvbXBsZXRlCisjZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8vIERlYWQgQ1BVIG1hc2sKKyNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJCTE2CS8vIERlYWQgQ1BVIHNoaWZ0CisjZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLy8gQ3Jhc2ggYWRkcmVzcyBtYXNrCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFdmVudCBSaW5nIGVudHJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCisgKiAgfDwtLS0tLS0tLS0tLS0gICAgUGFkIDAgICAgLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDAJCTB4MDAKKyAqICB8PC0tLS0tLS0tLS0tLSAgICBQYWQgMSAgICAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198NAkJMHgwNAorICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAyICAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3w4IAkJMHgwOAorICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAwIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxMgkJMHgwYworICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAxIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxNgkJMHgxMAorICogIHw8LS0tLS0tLS0tLS0tLSBUb2VwbGl0eiAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyMAkJMHgxNAorICogIHw8LS0tLS0gTGVuZ3RoIC0tLS0+fDwtLS0tLS0gVENCIElkIC0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAorICogIHw8LS0tLS0gU3RhdHVzIC0tLS0+fEV2bnQgQ29kZXxGbHNoIENvZGV8CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICogICBeICAgICAgICAgICAgICAgICAgIF5eXl4gXl5eXgorICogICB8LSBWQUxJRCAgICAgICAgICAgIHx8fHwgfHx8fC0gUkJVRkMKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHx8fC0tIFNMT1dSCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fCB8fC0tLSBVTlVTRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHwtLS0tIEZBU1RDCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fC0tLS0tLSBGQVNUUgorICogICAgICAgICAgICAgICAgICAgICAgIHx8fC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICB8fC0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLQorICoKKyAqIFNsb3dwYXRoIHN0YXR1czoKKyAqICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgfDwtLS0tLSBTdGF0dXMgLS0tLT58RXZudCBDb2RlfEZsc2ggQ29kZXwKKyAqICB8X19fX19fX19ffENtZCBJbmRleHxfX19fX19fX198X19fX19fX19ffDI4CQkweDFjCisgKiAgICBeXl4gXl5eXgorICogICAgfHx8IHx8fHwtIElTVENQSVA2CisgKiAgICB8fHwgfHx8LS0gSVBPTkxZCisgKiAgICB8fHwgfHwtLS0gUkNWRVJSCisgKiAgICB8fHwgfC0tLS0gSVBDQkFECisgKiAgICB8fHwtLS0tLS0gVENQQ0JBRAorICogICAgfHwtLS0tLS0tIElTVENQSVAKKyAqICAgIHwtLS0tLS0tLSBTQ0VSUgorICoKKyAqLworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0VWRU5UIHsKKwl1MzIJCQlQYWRbMV07CQkvLyBub3QgdXNlZAorCXUzMgkJCVNuZFVuYTsJCS8vIFNuZFVuYSB2YWx1ZQorCXUzMgkJCVJlc2lkOwkJLy8gcmVjZWl2ZSBNREwgcmVzaWQKKwl1bmlvbiB7CisJCXZvaWQgKgkJSG9zdEhhbmRsZTsJLy8gUmVjZWl2ZSBob3N0IGhhbmRsZQorCQl1MzIJCVJzdmQxOwkJLy8gVE9FIE5BCisJCXN0cnVjdCB7CisJCQl1MzIJTm90VXNlZDsKKwkJCXUzMglSc3ZkMjsJCS8vIFRPRSBOQQorCQl9IEZsdXNoOworCX07CisJdTMyCQkJVG9lcGxpdHo7CS8vIFJTUyBUb2VwbGl0eiBoYXNoCisJdW5pb24geworCQl1c2hvcnQJCVJzdmQzOwkJLy8gVE9FIE5BCisJCXVzaG9ydAkJSGRyT2Zmc2V0OwkvLyBTbG93cGF0aAorCX07CisJdXNob3J0CQkJTGVuZ3RoOwkJLy8KKwl1bnNpZ25lZCBjaGFyIAkJUnN2ZDQ7CQkvLyBUT0UgTkEKKwl1bnNpZ25lZCBjaGFyIAkJQ29kZTsJCS8vIEV2ZW50IGNvZGUKKwl1bnNpZ25lZCBjaGFyCQlDb21tYW5kSW5kZXg7CS8vIE5ldyByaW5nIGluZGV4CisJdW5zaWduZWQgY2hhcgkJU3RhdHVzOwkJLy8gRXZlbnQgc3RhdHVzCit9IFNYR19FVkVOVCwgKlBTWEdfRVZFTlQ7CisjcHJhZ21hIHBhY2socG9wKQorCisvLyBFdmVudCBjb2RlIGRlZmluaXRpb25zCisjZGVmaW5lIEVWRU5UX0NPREVfQlVGRkVSUwkweDAxCS8vIFJlY2VpdmUgYnVmZmVyIGxpc3QgY29tbWFuZCAocmluZyAwKQorI2RlZmluZSBFVkVOVF9DT0RFX1NMT1dSQ1YJMHgwMgkvLyBTbG93cGF0aCByZWNlaXZlCisjZGVmaW5lIEVWRU5UX0NPREVfVU5VU0VECTB4MDQJLy8gV2FzIHNsb3dwYXRoIGNvbW1hbmRzIGNvbXBsZXRlCisKKy8vIFN0YXR1cyB2YWx1ZXMKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1ZBTElECTB4ODAJLy8gRW50cnkgdmFsaWQKKworLy8gU2xvd3BhdGggc3RhdHVzCisjZGVmaW5lIEVWRU5UX1NUQVRVU19FUlJPUgkweDQwCS8vIENvbXBsZXRlZCB3aXRoIGVycm9yLiBJbmRleCBpbiBuZXh0IGJ5dGUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNAkweDIwCS8vIFRDUElQdjQgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUEJBRAkweDEwCS8vIEJhZCBUQ1AgY2hlY2tzdW0KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0lQQkFECTB4MDgJLy8gQmFkIElQIGNoZWNrc3VtCisjZGVmaW5lIEVWRU5UX1NUQVRVU19SQ1ZFUlIJMHgwNAkvLyBTbG93cGF0aCByZWNlaXZlIGVycm9yCisjZGVmaW5lIEVWRU5UX1NUQVRVU19JUE9OTFkJMHgwMgkvLyBJUCBmcmFtZQorI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVA2CTB4MDEJLy8gVENQSVB2NiBmcmFtZQorI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVAJMHgyMQkvLyBDb21iaW5hdGlvbiBvZiB2NCBhbmQgdjYKKworLy8gRXZlbnQgcmluZworLy8gU2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIsIGJldHdlZW4gMTI4IGFuZCAxNmsKKyNkZWZpbmUgRVZFTlRfUklOR19TSVpFCQk0MDk2CS8vID8/CisjZGVmaW5lIEVWRU5UX1JJTkdfQkFUQ0gJMTYJCS8vIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4KKyNkZWZpbmUgRVZFTlRfQkFUQ0hfTElNSVQJMjU2CSAgICAvLyBTdG9wIHByb2Nlc3NpbmcgZXZlbnRzIGFmdGVyIDI1NiAoMTYgKiAxNikKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19FVkVOVF9SSU5HIHsKKwlTWEdfRVZFTlQJUmluZ1tFVkVOVF9SSU5HX1NJWkVdOworfVNYR19FVkVOVF9SSU5HLCAqUFNYR19FVkVOVF9SSU5HOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENCIEJ1ZmZlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTWF4aW11bSBudW1iZXIgb2YgVENCUyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUvbWljcm9jb2RlCisjZGVmaW5lIFNYR19NQVhfVENCCQk0MDk2CisvLyBNaW5pbXVtIFRDQnMgYmVmb3JlIHdlIGZhaWwgaW5pdGlhbGl6YXRpb24KKyNkZWZpbmUgU1hHX01JTl9UQ0IJCTUxMgorLy8gVENCIEhhc2gKKy8vIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKKy8vIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfU0hJRlQJNAorI2RlZmluZSBTWEdfVENCX1BFUl9CVUNLRVQJCTE2CisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUX01BU0sJCTB4RkYwCS8vIEJ1Y2tldCBwb3J0aW9uIG9mIFRDQiBJRAorI2RlZmluZSBTWEdfVENCX0VMRU1FTlRfTUFTSwkweDAwRgkvLyBFbGVtZW50IHdpdGhpbiBidWNrZXQKKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRTCQkJMjU2CQkvLyAyNTYgKiAxNiA9IDRrCisKKyNkZWZpbmUgU1hHX1RDQl9CVUZGRVJfU0laRQk1MTIJLy8gQVNTRVJUIGZvcm1hdCBpcyBjb3JyZWN0CisKKyNkZWZpbmUgU1hHX1RDQl9SQ1ZRX1NJWkUJCTczNgorCisjZGVmaW5lIFNYR19UQ0JfQ09NUE9TSVRFX0JVRkZFUl9TSVpFCTEwMjQKKworI2RlZmluZSBTWEdfTE9DQVRFX1RDUF9GUkFNRV9IRFIoX1RjcE9iamVjdCwgX0lQdjYpCQkJCQkJCVwKKwkoKChfVGNwT2JqZWN0KS0+VmxhbklkKSA/CQkJCQkJCQkJCQkJXAorCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IHllcyAqLwkJCQkJCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5TeGdUY3AJCQk6CVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuU3hnVGNwKQkJCTogCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSBObyAqLwkJCQkJCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXA2LlN4Z1RjcAkJCQk6IAlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuU3hnVGNwKSkKKworI2RlZmluZSBTWEdfTE9DQVRFX0lQX0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQkJCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLklwCQkJCTogCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwLklwCisKKyNkZWZpbmUgU1hHX0xPQ0FURV9JUDZfRlJBTUVfSERSKF9UY3BPYmplY3QpCQkJCQkJCQlcCisJKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCQkJCQkJCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcDYuSXAJCQkJOgkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuSXAKKworCisjaWYgREJHCisvLyBIb3JyaWJsZSBrbHVkZ2UgdG8gZGlzdGluZ3Vpc2ggZHVtYi1uaWMsIHNsb3dwYXRoLCBhbmQKKy8vIGZhc3RwYXRoIHRyYWZmaWMuICBEZWNyZW1lbnQgdGhlIEhvcExpbWl0IGJ5IG9uZQorLy8gZm9yIHNsb3dwYXRoLCB0d28gZm9yIGZhc3RwYXRoLiAgVGhpcyBhc3N1bWVzIHRoZSBsaW1pdCBpcyBtZWFzdXJhYmx5CisvLyBncmVhdGVyIHRoYW4gdHdvLCB3aGljaCBJIHRoaW5rIGlzIHJlYXNvbmFibGUuCisvLyBPYnZpb3VzbHkgdGhpcyBpcyBEQkcgb25seS4gIE1heWJlIHJlbW92ZSBsYXRlciwgb3IgI2lmIDAgc28gd2UKKy8vIGNhbiBzZXQgaXQgd2hlbiBuZWVkZWQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKSB7CQkJCQkJCQlcCisJUElQVjZfSERSCQlfSXA2RnJhbWVIZHI7CQkJCQkJCQkJCQkJXAorCWlmKChfVGNwT2JqZWN0KS0+SVB2NikgewkJCQkJCQkJCQkJCQlcCisJCV9JcDZGcmFtZUhkciA9IFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUigoX1RjcE9iamVjdCkpOwkJCQkJXAorCQlpZihfRmFzdFBhdGgpIHsJCQkJCQkJCQkJCQkJCQlcCisJCQlfSXA2RnJhbWVIZHItPkhvcExpbWl0ID0gKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDI7CVwKKwkJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAxOwlcCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisjZWxzZQorLy8gRG8gbm90aGluZyB3aXRoIGZyZWUgYnVpbGQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgYW5kIHRyYW5zbWl0IHJpbmdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfTUFYX1JJTkdfU0laRQkyNTYKKyNkZWZpbmUgU1hHX1hNVF9SSU5HX1NJWkUJMTI4CQkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfUkNWX1JJTkdfU0laRQkxMjgJCS8vIFN0YXJ0IHdpdGggMTI4CisjZGVmaW5lIFNYR19NQVhfRU5UUklFUyAgICAgNDA5NgorCisvLyBTdHJ1Y3R1cmUgYW5kIG1hY3JvcyB0byBtYW5hZ2UgYSByaW5nCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JJTkdfSU5GTyB7CisJdW5zaWduZWQgY2hhcgkJCUhlYWQ7CQkvLyBXaGVyZSB3ZSBhZGQgZW50cmllcyAtIE5vdGUgdW5zaWduZWQgY2hhcjpSSU5HX1NJWkUKKwl1bnNpZ25lZCBjaGFyCQkJVGFpbDsJCS8vIFdoZXJlIHdlIHB1bGwgb2ZmIGNvbXBsZXRlZCBlbnRyaWVzCisJdXNob3J0CQkJU2l6ZTsJCS8vIFJpbmcgc2l6ZSAtIE11c3QgYmUgbXVsdGlwbGUgb2YgMgorCXZvaWQgKgkJCUNvbnRleHRbU1hHX01BWF9SSU5HX1NJWkVdOwkvLyBTaGFkb3cgcmluZworfSBTWEdfUklOR19JTkZPLCAqUFNYR19SSU5HX0lORk87CisKKyNkZWZpbmUgU1hHX0lOSVRJQUxJWkVfUklORyhfcmluZywgX3NpemUpIHsJCQkJCQkJXAorCShfcmluZykuSGVhZCA9IDA7CQkJCQkJCQkJCQkJXAorCShfcmluZykuVGFpbCA9IDA7CQkJCQkJCQkJCQkJXAorCShfcmluZykuU2l6ZSA9IChfc2l6ZSk7CQkJCQkJCQkJCQlcCit9CisjZGVmaW5lIFNYR19BRFZBTkNFX0lOREVYKF9pbmRleCwgX3NpemUpICgoX2luZGV4KSA9ICgoX2luZGV4KSArIDEpICYgKChfc2l6ZSkgLSAxKSkKKyNkZWZpbmUgU1hHX1BSRVZJT1VTX0lOREVYKF9pbmRleCwgX3NpemUpICgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKKyNkZWZpbmUgU1hHX1JJTkdfRU1QVFkoX3JpbmcpICgoX3JpbmcpLT5IZWFkID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0ZVTEwoX3JpbmcpICgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKChfcmluZyktPlNpemUpKQorI2RlZmluZSBTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmcpICgoX3JpbmcpLT5IZWFkID0JCQkJXAorCQkJCQkJCQkJICBTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJCQkJXAorCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQkJCQlcCisJU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCQkJXAorfQorLy8gU2V0IGNtZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgcmluZyBlbnRyeSwgc2V0IHRoZSBzaGFkb3cgY29udGV4dAorLy8gZW50cnkgYW5kIGFkdmFuY2UgdGhlIHJpbmcuCisvLyBUaGUgYXBwcm9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgbWFjcm8KKyNkZWZpbmUgU1hHX0dFVF9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQkJXAorCWlmKFNYR19SSU5HX0ZVTEwoX3JpbmdpbmZvKSkgewkJCQkJCQkJCVwKKwkJKF9jbWQpID0gTlVMTDsJCQkJCQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCVwKKwkJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5IZWFkXTsJCQlcCisJCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9ICh2b2lkICopKF9jb250ZXh0KTtcCisJCVNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZ2luZm8pOwkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKy8vIEFib3J0IHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjb21tYW5kIGJ5IHJldHJlYXRpbmcgdGhlIGhlYWQuCisvLyBOT1RFIC0gVGhlIGFwcG9wcmlhdGUgbG9jayBNVVNUIE5PVCBCRSBEUk9QUEVEIGJldHdlZW4gdGhlIFNYR19HRVRfQ01ECisvLyBhbmQgU1hHX0FCT1JUX0NNRCBjYWxscy4KKyNkZWZpbmUgU1hHX0FCT1JUX0NNRChfcmluZ2luZm8pIHsJCQkJCQkJCQlcCisJQVNTRVJUKCEoU1hHX1JJTkdfRU1QVFkoX3JpbmdpbmZvKSkpOwkJCQkJCQlcCisJU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5naW5mbyk7CQkJCQkJCQlcCisJKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPkhlYWRdID0gTlVMTDsJCQkJCVwKK30KKworLy8gRm9yIHRoZSBnaXZlbiByaW5nLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0YWlsIGNtZCBhbmQgY29udGV4dCwKKy8vIGNsZWFyIHRoZSBjb250ZXh0IGFuZCBhZHZhbmNlIHRoZSB0YWlsCisjZGVmaW5lIFNYR19SRVRVUk5fQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJXAorCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQkJCVwKKwkoX2NvbnRleHQpID0gKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPlRhaWxdOyAgICAgICAJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXSA9IE5VTEw7CQkJCQlcCisJU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5naW5mbyk7CQkJCQkJCQlcCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBIb3N0IENvbW1hbmQgQnVmZmVyIC0gY29tbWFuZHMgdG8gSU5JQyB2aWEgdGhlIENtZCBSaW5ncworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIDMxICAgICAgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgIDAKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX19fX19fLgorICogIHw8LS0tLS0tLS0tLS0tLS0gU2dsIExvdyAtLS0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wwCQkweDAwCisgKiAgfDwtLS0tLS0tLS0tLS0tLSBTZ2wgSGlnaCAtLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDQJCTB4MDQKKyAqICB8PC0tLS0tLS0tLS0tLS0gIFNnZSAwIExvdyAgLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198OCAJCTB4MDgKKyAqICB8PC0tLS0tLS0tLS0tLS0gIFNnZSAwIEhpZ2ggLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTIJCTB4MGMKKyAqICB8PC0tLS0tLS0tLS0tLSAgU2dlIDAgTGVuZ3RoIC0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTYJCTB4MTAKKyAqICB8PC0tLS0tLS0tLS0tIFdpbmRvdyBVcGRhdGUgLS0tLS0tLS0tLS0+fAorICogIHw8LS0tLS0tLS0gU1AgMXN0IFNHRSBvZmZzZXQgLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyMAkJMHgxNAorICogIHw8LS0tLS0tLS0tLS0gVG90YWwgTGVuZ3RoIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAorICogIHw8LS0tLS0gTENudCAtLS0tLS0+fDwtLS0tLSBGbGFncyAtLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICovCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ01EIHsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgIAkJCVNnbDsJCQkvLyBQaHlzaWNhbCBhZGRyZXNzIG9mIFNHTAorCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWRtYTY0X2FkZHJfdCAgICAgICAgICAJRmlyc3RTZ2VBZGRyZXNzOy8vIEFkZHJlc3Mgb2YgZmlyc3QgU0dFCisJCQl1MzIJCQkJCUZpcnN0U2dlTGVuZ3RoOwkvLyBMZW5ndGggb2YgZmlyc3QgU0dFCisJCQl1bmlvbiB7CisJCQkJdTMyCQkJCVJzdmQxOwkgICAgICAgIC8vIFRPRSBOQQorCQkJCXUzMgkJCQlTZ2VPZmZzZXQ7CQkvLyBTbG93cGF0aCAtIDJuZCBTR0Ugb2Zmc2V0CisJCQkJdTMyCQkJCVJlc2lkOwkJCS8vIE1ETCBjb21wbGV0aW9uIC0gY2xvYmJlcnMgdXBkYXRlCisJCQl9OworCQkJdW5pb24geworCQkJCXUzMgkJCQlUb3RhbExlbmd0aDsJLy8gVG90YWwgdHJhbnNmZXIgbGVuZ3RoCisJCQkJdTMyCQkJCU1zczsJCQkvLyBMU08gTVNTCisJCQl9OworCQl9IEJ1ZmZlcjsKKwl9OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIJCQkJCUZsYWdzOjQ7CQkvLyBzbG93cGF0aCBmbGFncworCQkJdW5zaWduZWQgY2hhcgkJCQkJSXBIbDo0OwkJCS8vIElwIGhlYWRlciBsZW5ndGggKD4+MikKKwkJCXVuc2lnbmVkIGNoYXIJCQkJCU1hY0xlbjsJCQkvLyBNYWMgaGVhZGVyIGxlbgorCQl9IENzdW1GbGFnczsKKwkJc3RydWN0IHsKKwkJCXVzaG9ydAkJCQkJRmxhZ3M6NDsJCS8vIHNsb3dwYXRoIGZsYWdzCisJCQl1c2hvcnQJCQkJCVRjcEhkck9mZjo3OwkvLyBUQ1AKKwkJCXVzaG9ydAkJCQkJTWFjTGVuOjU7CQkvLyBNYWMgaGVhZGVyIGxlbgorCQl9IExzb0ZsYWdzOworCQl1c2hvcnQJCQkJCQlGbGFnczsJCQkvLyBmbGFncworCX07CisJdW5pb24geworCQl1c2hvcnQJCQkJCQlTZ0VudHJpZXM7CQkvLyBTRyBlbnRyeSBjb3VudCBpbmNsdWRpbmcgZmlyc3Qgc2dlCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyCQkJCQlTdGF0dXM7CQkgICAgLy8gQ29waWVkIGZyb20gZXZlbnQgc3RhdHVzCisJCQl1bnNpZ25lZCBjaGFyCQkJCQlOb3RVc2VkOworCQl9IFN0YXR1czsKKwl9OworfSBTWEdfQ01ELCAqUFNYR19DTUQ7CisjcHJhZ21hIHBhY2socG9wKQorCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9WTEFOX0hEUiB7CisJdXNob3J0CVZsYW5UY2k7CisJdXNob3J0CVZsYW5UcGlkOworfSBWTEFOX0hEUiwgKlBWTEFOX0hEUjsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qCisgKiBTbG93cGF0aCBGbGFnczoKKyAqCisgKgorICogTFNTIEZsYWdzOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLi0tLSBUQ1AgTGFyZ2Ugc2VnbWVudCBzZW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8uLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8uLS0tCisgKiAgMyAgICAgICAgICAgICAgICAgICAxICAgICAxICAgICAgIC8vLy8KKyAqICAxICAgICAgICAgICAgICAgICAgIDUgICAgIDAgICAgICB8fHx8CisgKiAgLl9fX19fX19fX19fX19fX19fX18uX19fX19fX19fX19fdnZ2di4KKyAqICB8ICAgICAgICAgICAgICAgICAgIHxNQUMgfCAgVENQIHwgICAgfAorICogIHwgICAgICBMQ250ICAgICAgICAgfGhsZW58aGRyb2ZmfEZsZ3N8CisgKiAgfF9fX19fX19fX19fX19fX19fX198fHx8fHx8fHx8fHx8X19fX3wKKyAqCisgKgorICogQ2hlY2tzdW0gRmxhZ3MKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8uLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8uLS0tIENoZWNrc3VtIFRDUAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLi0tLSBDaGVja3N1bSBJUAorICogIDMgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAvLy8vIE5vIGJpdHMgLSBub3JtYWwgc2VuZAorICogIDEgICAgICAgICAgICAgICAgICAgNSAgICAgICAgICA3ICAgIHx8fHwKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX192dnZ2LgorICogIHwgICAgICAgICAgICAgICAgICAgfCBPZmZsb2FkIHwgSVAgfCAgICB8CisgKiAgfCAgICAgIExDbnQgICAgICAgICB8TUFDIGhsZW4gfEhsZW58Rmxnc3wKKyAqICB8X19fX19fX19fX19fX19fX19fX3xfX19ffF9fX198X19fX3xfX19ffAorICoKKyAqLworLy8gU2xvd3BhdGggQ01EIGZsYWdzCisjZGVmaW5lIFNYR19TTE9XQ01EX0NTVU1fSVAJCQkweDAxCQkvLyBDaGVja3N1bSBJUAorI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX1RDUAkJMHgwMgkJLy8gQ2hlY2tzdW0gVENQCisjZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCQkweDA0CQkvLyBMYXJnZSBzZWdtZW50IHNlbmQKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19YTVRfUklORyB7CisJU1hHX0NNRAkJRGVzY3JpcHRvcnNbU1hHX1hNVF9SSU5HX1NJWkVdOworfSBTWEdfWE1UX1JJTkcsICpQU1hHX1hNVF9SSU5HOworCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9SSU5HIHsKKwlTWEdfQ01ECQlEZXNjcmlwdG9yc1tTWEdfUkNWX1JJTkdfU0laRV07Cit9IFNYR19SQ1ZfUklORywgKlBTWEdfUkNWX1JJTkc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNoYXJlIG1lbW9yeSBidWZmZXIgdHlwZXMgLSBVc2VkIHRvIGlkZW50aWZ5IGFzeW5jaHJvbm91cworICogc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlTWEdfQlVGRkVSX1RZUEVfUkNWLAkJLy8gUmVjZWl2ZSBidWZmZXIKKwlTWEdfQlVGRkVSX1RZUEVfU0dMCQkJLy8gU0dMIGJ1ZmZlcgorfSBTWEdfQlVGRkVSX1RZUEU7CisKKy8vIFN0YXRlIGZvciBTWEcgYnVmZmVycworI2RlZmluZSBTWEdfQlVGRkVSX0ZSRUUJCTB4MDEKKyNkZWZpbmUgU1hHX0JVRkZFUl9CVVNZCQkweDAyCisjZGVmaW5lIFNYR19CVUZGRVJfT05DQVJECTB4MDQKKyNkZWZpbmUgU1hHX0JVRkZFUl9VUFNUUkVBTQkweDA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgZGF0YSBidWZmZXJzCisgKgorICogUmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgYXJlIGdpdmVuIHRvIHRoZSBTYWhhcmEgY2FyZCAxMjggYXQgYSB0aW1lLgorICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZmlsbGluZyBpbiBhICJyZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2siCisgKiB3aXRoIDEyOCAicmVjZWl2ZSBkZXNjcmlwdG9ycyIuICBFYWNoIGRlc2NyaXB0b3IgY29uc2lzdHMgb2YKKyAqIGEgcGh5c2ljYWwgYWRkcmVzcywgd2hpY2ggdGhlIGNhcmQgdXNlcyBhcyB0aGUgYWRkcmVzcyB0bworICogRE1BIGRhdGEgaW50bywgYW5kIGEgdmlydHVhbCBhZGRyZXNzLCB3aGljaCBpcyBnaXZlbiBiYWNrCisgKiB0byB0aGUgaG9zdCBpbiB0aGUgIkhvc3RIYW5kbGUiIHBvcnRpb24gb2YgYW4gZXZlbnQuCisgKiBUaGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGRhdGEgc3RydWN0dXJlIGlzIGRlZmluZWQgYmVsb3cKKyAqIGFzIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sKKyAqIGlzIGRlZmluZWQgYXMgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLgorICoKKyAqIFRoaXMgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGlzIGdpdmVuIHRvIHRoZSBjYXJkIGJ5IGZpbGxpbmcKKyAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBTWEdfQ01EIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQorICogd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLgorICoKKyAqIEJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9ja3MKKyAqIHJlcXVpcmUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFpbnRhaW4gdGhlbQorICogb24gYSBmcmVlIHF1ZXVlIGFuZCBjb250YWluIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgorICogYW5kIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFNpbmNlIGJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaworICogbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjYXJkLCBib3RoIG11c3QgYmUgYWxsb2NhdGVkIG91dCBvZgorICogc2hhcmVkIG1lbW9yeS4gIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVzY3JpcHRvcgorICogYmxvY2sgYXZhaWxhYmxlIGZvciBldmVyeSAxMjggYnVmZmVycywgd2UgYWxsb2NhdGUgYWxsIG9mCisgKiB0aGVzZSByZXNvdXJjZXMgdG9nZXRoZXIgaW4gYSBzaW5nbGUgYmxvY2suICBUaGlzIGVudGlyZQorICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIFNYR19SQ1ZfQkxPQ0tfSERSLCB3aG8ncyBzb2xlIHB1cnBvc2UKKyAqIGlzIHRvIG1haW50YWluIGFkZHJlc3MgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUgZW50aXJlIGJsb2NrCisgKiBjYW4gYmUgZnJlZSBsYXRlci4KKyAqCisgKiBGdXJ0aGVyIGNvbXBsaWNhdGluZyBtYXR0ZXJzIGlzIHRoZSBmYWN0IHRoYXQgdGhlIHJlY2VpdmUKKyAqIGJ1ZmZlcnMgbXVzdCBiZSB2YXJpYWJsZSBpbiBsZW5ndGggaW4gb3JkZXIgdG8gYWNjb21vZGF0ZQorICoganVtYm8gZnJhbWUgY29uZmlndXJhdGlvbnMuICBXZSBjb25maWd1cmUgdGhlIGJ1ZmZlcgorICogbGVuZ3RoIHNvIHRoYXQgdGhlIGJ1ZmZlciBhbmQgaXQncyBjb3JyZXNwb25kaW5nIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCisgKiBzdHJ1Y3R1cmUgYWRkIHVwIHRvIGFuIGV2ZW4gYm91bmRhcnkuICBUaGVuIHdlIHBsYWNlIHRoZQorICogcmVtYWluaW5nIGRhdGEgc3RydWN0dXJlcyBhZnRlciAxMjggb2YgdGhlbSBhcyBzaG93biBpbgorICogdGhlIGZvbGxvd2luZyBkaWFncmFtOgorICoKKyAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICBWYXJpYWJsZSBsZW5ndGggcmVjZWl2ZSBidWZmZXIgIzEgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAjMSAgICAgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCA8PT0gRXZlbiAyayBvciAxMGsgYm91bmRhcnkKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAuLi4gcmVwZWF0IDItMTI4IC4uICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgICAgICAgICAgIHwKKyAqIHwgIENvbnRhaW5zIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SICogMTI4IHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgU1hHX1JDVl9CTE9DS19IRFIgICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqCisgKiBNZW1vcnkgY29uc3VtcHRpb246CisgKgkgIE5vbi1qdW1ibzoKKyAqICAgICAgQnVmZmVycyBhbmQgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgPSAyayAqIDEyOCA9IDI1NmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MjU4ay9ibG9jaworICoKKyAqCSAgSnVtYm86CisgKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMTBrICogMTI4ID0gMTI4MGsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MTI4MmsvYmxvY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSUwkJCTQwOTYJLy8gQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQKKyNkZWZpbmUgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUwk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzCisjZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1JDVl9CTE9DS1MJCQkJMTI4CQkvLyA9IDE2Mzg0IHJlY2VpdmUgYnVmZmVycworCisvLyBSZWNlaXZlIGJ1ZmZlciBoZWFkZXIKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiB7CisJZG1hX2FkZHJfdCAgICAgICAgICAJCQlQaHlzaWNhbEFkZHJlc3M7CS8vIEJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzCisJLy8gTm90ZSAtIERPIE5PVCBVU0UgdGhlIFZpcnR1YWxBZGRyZXNzIGZpZWxkIHRvIGxvY2F0ZSBkYXRhLgorCS8vIFVzZSB0aGUgc3hnLmg6U1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTiBtYWNybyBpbnN0ZWFkLgorCXZvaWQgKlZpcnR1YWxBZGRyZXNzOwkJLy8gU3RhcnQgb2YgYnVmZmVyCisJTElTVF9FTlRSWQkJCQkJCUZyZWVMaXN0OwkJCS8vIEZyZWUgcXVldWUgb2YgYnVmZmVycworCXN0cnVjdCBfU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIJKk5leHQ7CQkJCS8vIEZhc3RwYXRoIGRhdGEgYnVmZmVyIHF1ZXVlCisJdTMyCQkJCQkJCVNpemU7CQkJCS8vIEJ1ZmZlciBzaXplCisJdTMyCQkJCQkJCUJ5dGVPZmZzZXQ7CQkJLy8gU2VlIFNYR19SRVNUT1JFX01ETF9PRkZTRVQKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCVN0YXRlOwkJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIJCQkJCQkJU3RhdHVzOwkJCQkvLyBFdmVudCBzdGF0dXMgKHRvIGxvZyBQVVNIKQorCXN0cnVjdCBza19idWZmICAgICAgICAgICAgICAgICogc2tiOwkJCQkvLyBEb3VibGUgbWFwcGVkIChuYmwgYW5kIHBrdCkKK30gU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIsICpQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFI7CisKKy8vIFN4Z1Nsb3dSZWNlaXZlIHVzZXMgdGhlIFBBQ0tFVCAoc2tiKSBjb250YWluZWQKKy8vIGluIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiB3aGVuIGluZGljYXRpbmcgZHVtYi1uaWMgZGF0YQorI2RlZmluZSBTeGdEdW1iUmN2UGFja2V0CSAgICAgICAgc2tiCisKKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0hEUl9TSVpFCQkJMjU2CQkvLyBTcGFjZSBmb3IgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFCQkyMDQ4CS8vIE5vbiBqdW1ibyA9IDJrIGluY2x1ZGluZyBIRFIKKyNkZWZpbmUgU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRQkJMTAyNDAJLy8ganVtYm8gPSAxMGsgaW5jbHVkaW5nIEhEUgorCisvLyBSZWNlaXZlIGRhdGEgZGVzY3JpcHRvcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREFUQV9ERVNDUklQVE9SIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBza19idWZmICAgICoJVmlydHVhbEFkZHJlc3M7CQkJLy8gSG9zdCBoYW5kbGUKKwkJdTY0IAkJCUZvcmNlVG84Qnl0ZXM7CQkJLy8gRm9yY2UgeDg2IHRvIDgtYnl0ZSBib3VuZGFyeQorCX07CisJZG1hX2FkZHJfdCAgICAgICAgICAgICAJUGh5c2ljYWxBZGRyZXNzOworfSBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiwgKlBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUjsKKworLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLCQkxMjgKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUJCTIwNDgJLy8gRm9yIHNhbml0eSBjaGVjawordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyB7CisJU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IJCURlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKK30gU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLCAqUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSzsKKworLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgeworCXZvaWQgKgkJCQkJVmlydHVhbEFkZHJlc3M7CQkJLy8gU3RhcnQgb2YgMmsgYnVmZmVyCisJZG1hX2FkZHJfdAkgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3M7CQkvLyAuLmFuZCBpdCdzIHBoeXNpY2FsIGFkZHJlc3MKKwlMSVNUX0VOVFJZCQkJCUZyZWVMaXN0OwkJCQkvLyBGcmVlIHF1ZXVlIG9mIGRlc2NyaXB0b3IgYmxvY2tzCisJdW5zaWduZWQgY2hhcgkJCQkJU3RhdGU7CQkJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorfSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSLCAqUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFI7CisKKy8vIFJlY2VpdmUgYmxvY2sgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9CTE9DS19IRFIgeworCXZvaWQgKgkJCQkJVmlydHVhbEFkZHJlc3M7CQkJLy8gU3RhcnQgb2YgdmlydHVhbCBtZW1vcnkKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzczsJCS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcworCUxJU1RfRU5UUlkJCQkJQWxsTGlzdDsJCQkJLy8gUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTCit9IFNYR19SQ1ZfQkxPQ0tfSERSLCAqUFNYR19SQ1ZfQkxPQ0tfSERSOworCisvLyBNYWNyb3MgdG8gZGV0ZXJtaW5lIGRhdGEgc3RydWN0dXJlIG9mZnNldHMgaW50byByZWNlaXZlIGJsb2NrCisjZGVmaW5lIFNYR19SQ1ZfQkxPQ0tfU0laRShfQnVmZmVyc2l6ZSkgCQkJCQlcCisJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9CTE9DS19IRFIpKSkKKyNkZWZpbmUgU1hHX1JDVl9CVUZGRVJfREFUQV9TSVpFKF9CdWZmZXJzaXplKQkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19PRkZTRVQoX0J1ZmZlcnNpemUpCQlcCisJKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpKQorI2RlZmluZSBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikpKQorCisvLyBVc2UgdGhlIG1pbmlwb3J0IHJlc2VydmVkIHBvcnRpb24gb2YgdGhlIE5CTCB0byBsb2NhdGUKKy8vIG91ciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBzdHJ1Y3R1cmUuCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9OQkxfUkVTRVJWRUQgeworCVBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUglSY3ZEYXRhQnVmZmVySGRyOworCXZvaWQgKgkJCQkJCUF2YWlsYWJsZTsKK30gU1hHX1JDVl9OQkxfUkVTRVJWRUQsICpQU1hHX1JDVl9OQkxfUkVTRVJWRUQ7CisKKyNkZWZpbmUgU1hHX1JDVl9OQkxfQlVGRkVSX0hEUihfTkJMKSAoKChQU1hHX1JDVl9OQkxfUkVTRVJWRUQpTkVUX0JVRkZFUl9MSVNUX01JTklQT1JUX1JFU0VSVkVEKF9OQkwpKS0+UmN2RGF0YUJ1ZmZlckhkcikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2NhdHRlciBnYXRoZXIgbGlzdCBidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNYR19JTklUSUFMX1NHTF9CVUZGRVJTCQk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycworI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCQkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1NHTF9CVUZGRVJTCQkJMTYzODQJLy8gTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpCisKKworLy8gU2VsZiBpZGVudGlmeWluZyBzdHJ1Y3R1cmUgdHlwZQordHlwZWRlZiBlbnVtIF9TWEdfU0dMX1RZUEUgeworCVNYR19TR0xfRFVNQiwJCQkJLy8gRHVtYiBOSUMgU0dMCisJU1hHX1NHTF9TTE9XLAkJCQkvLyBTbG93cGF0aCBwcm90b2NvbCBoZWFkZXIgLSBzZWUgYmVsb3cKKwlTWEdfU0dMX0NISU1ORVkJCQkJLy8gQ2hpbW5leSBvZmZsb2FkIFNHTAorfSBTWEdfU0dMX1RZUEUsIFBTWEdfU0dMX1RZUEU7CisKKy8vIE5vdGUgLSB0aGUgZGVzY3JpcHRpb24gYmVsb3cgaXMgTWljcm9zb2Z0IHNwZWNpZmljCisvLworLy8gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgdG8gYWxsb2NhdGUKKy8vIGZvciB0aGUgU0NBVFRFUl9HQVRIRVJfTElTVCBwb3J0aW9uIG9mIHRoZSBTWEdfU0NBVFRFUl9HQVRIRVIgZGF0YSBzdHJ1Y3R1cmUuCisvLyBUaGUgZm9sbG93aW5nIGNvbnNpZGVyYXRpb25zIGFwcGx5IHdoZW4gc2V0dGluZyB0aGlzIHZhbHVlOgorLy8gLSBGaXJzdCwgdGhlIFNhaGFyYSBjYXJkIGlzIGRlc2lnbmVkIHRvIHJlYWQgdGhlIE1pY3Jvc29mdCBTR0wgc3RydWN0dXJlCisvLyAJIHN0cmFpZ2h0IG91dCBvZiBob3N0IG1lbW9yeS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgU0dMIG11c3QgcmVzaWRlIGluCisvLwkgc2hhcmVkIG1lbW9yeS4gIElmIHRoZSBsZW5ndGggaGVyZSBpcyBzbWFsbGVyIHRoYW4gdGhlIFNHTCBmb3IgdGhlCisvLwkgTkVUX0JVRkZFUiwgdGhlbiBORElTIHdpbGwgYWxsb2NhdGUgaXRzIG93biBidWZmZXIuICBUaGUgYnVmZmVyCisvLwkgdGhhdCBORElTIGFsbG9jYXRlcyBpcyBub3QgaW4gc2hhcmVkIG1lbW9yeSwgc28gd2hlbiB0aGlzIGhhcHBlbnMsCisvLwkgdGhlIFNHTCB3aWxsIG5lZWQgdG8gYmUgY29waWVkIHRvIGEgc2V0IG9mIFNYR19TQ0FUVEVSX0dBVEhFUiBidWZmZXJzLgorLy8JIEluIG90aGVyIHdvcmRzLi4gd2UgZG9uJ3Qgd2FudCB0aGlzIHZhbHVlIHRvIGJlIHRvbyBzbWFsbC4KKy8vIC0gT24gdGhlIG90aGVyIGhhbmQuLiB3ZSdyZSBhbGxvY2F0aW5nIHVwIHRvIDE2ayBvZiB0aGVzZSB0aGluZ3MuICBJZgorLy8JIHdlIG1ha2UgdGhpcyB0b28gYmlnLCB3ZSBzdGFydCB0byBjb25zdW1lIGEgdG9uIG9mIG1lbW9yeS4uCisvLyBBdCB0aGUgbW9tZW50LCBJJ20gZ29pbmcgdG8gbGltaXQgdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIHRvIDE1MC4KKy8vIElmIGVhY2ggZW50cnkgbWFwcyByb3VnaGx5IDRrLCB0aGVuIHRoaXMgc2hvdWxkIGNvdmVyIHJvdWdobHkgNjAwa0IKKy8vIE5FVF9CVUZGRVJzLiAgRnVydGhlcm1vcmUsIHNpbmNlIGVhY2ggZW50cnkgaXMgMjQgYnl0ZXMsIHRoZSB0b3RhbAorLy8gU0dFIHBvcnRpb24gb2YgdGhlIHN0cnVjdHVyZSBjb25zdW1lcyAzNjAwIGJ5dGVzLCB3aGljaCBzaG91bGQgYWxsb3cKKy8vIHRoZSBlbnRpcmUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSB0byByZXNpZGUgY29tZm9ydGFibHkgd2l0aGluCisvLyBhIDRrIGJsb2NrLCBwcm92aWRpbmcgdGhlIHJlbWFpbmluZyBmaWVsZHMgc3RheSB1bmRlciA1MDAgYnl0ZXMuCisvLworLy8gU28gd2l0aCAxNTAgZW50cmllcywgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBzdHJ1Y3R1cmUgYmVjb21lcyByb3VnaGx5CisvLyA0ay4gIEF0IDE2ayBvZiB0aGVtLCB0aGF0IGFtb3VudHMgdG8gNjRNIG9mIHNoYXJlZCBtZW1vcnkuICBBIHRvbiwgYnV0CisvLyBtYW5hZ2VhYmxlLgorI2RlZmluZSBTWEdfU0dMX0VOVFJJRVMJCTE1MAorCisvLyBUaGUgdWNvZGUgZXhwZWN0cyBhbiBORElTIFNHTCBzdHJ1Y3R1cmUgdGhhdAorLy8gaXMgZm9ybWF0dGVkIGZvciBhbiB4NjQgc3lzdGVtLiAgV2hlbiBydW5uaW5nCisvLyBvbiBhbiB4NjQgc3lzdGVtLCB3ZSBjYW4gc2ltcGx5IGhhbmQgdGhlIE5ESVMgU0dMCisvLyB0byB0aGUgY2FyZCBkaXJlY3RseS4gIEZvciB4ODYgc3lzdGVtcyB3ZSBtdXN0IHJlY29uc3RydWN0CisvLyB0aGUgU0dMLiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiB4NjQKKy8vIGZvcm1hdHRlZCBTR0wgZW50cnkKK3R5cGVkZWYgc3RydWN0IF9TWEdfWDY0X1NHRSB7CisgICAgZG1hNjRfYWRkcl90ICAgICAgCUFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKKyAgICB1MzIJCQkJTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAorCXUzMgkJCQlDb21waWxlclBhZDsvLyBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzCisgICAgdTY0IAkJCVJlc2VydmVkOwkvLyB1MzIgKiBpbiB3ZG0uaC4gIEZvcmNlIHRvIDggYnl0ZXMKK30gU1hHX1g2NF9TR0UsICpQU1hHX1g2NF9TR0U7CisKK3R5cGVkZWYgc3RydWN0IF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIHsKKyAgICBkbWE2NF9hZGRyX3QgICAgICAJQWRkcmVzczsJLy8gc2FtZSBhcyB3ZG0uaAorICAgIHUzMgkJCQlMZW5ndGg7CQkvLyBzYW1lIGFzIHdkbS5oCisJdTMyCQkJCUNvbXBpbGVyUGFkOy8vIFRoZSBjb21waWxlciBwYWRzIHRvIDgtYnl0ZXMKKyAgICB1NjQgCQkJUmVzZXJ2ZWQ7CS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcworfSBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5ULCAqUFNDQVRURVJfR0FUSEVSX0VMRU1FTlQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgX1NDQVRURVJfR0FUSEVSX0xJU1QgeworICAgIHUzMgkJCQkJTnVtYmVyT2ZFbGVtZW50czsKKyAgICB1MzIgKgkJCQlSZXNlcnZlZDsKKyAgICBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UCUVsZW1lbnRzW107Cit9IFNDQVRURVJfR0FUSEVSX0xJU1QsICpQU0NBVFRFUl9HQVRIRVJfTElTVDsKKworLy8gVGhlIGNhcmQgZG9lc24ndCBjYXJlIGFib3V0IGFueXRoaW5nIGV4Y2VwdCBlbGVtZW50cywgc28KKy8vIHdlIGNhbiBsZWF2ZSB0aGUgdTMyICogcmVzZXJ2ZWQgZmllbGQgYWxvbmUgaW4gdGhlIGZvbGxvd2luZworLy8gU0dMIHN0cnVjdHVyZS4gIEJ1dCByZWRlZmluZSBmcm9tIHdkbS5oOlNDQVRURVJfR0FUSEVSX0xJU1Qgc28KKy8vIHdlIGNhbiBzcGVjaWZ5IFNYR19YNjRfU0dFIGFuZCBkZWZpbmUgYSBmaXhlZCBudW1iZXIgb2YgZWxlbWVudHMKK3R5cGVkZWYgc3RydWN0IF9TWEdfWDY0X1NHTCB7CisgICAgdTMyCQkJCQlOdW1iZXJPZkVsZW1lbnRzOworICAgIHUzMiAqCQkJCVJlc2VydmVkOworICAgIFNYR19YNjRfU0dFCQkJCUVsZW1lbnRzW1NYR19TR0xfRU5UUklFU107Cit9IFNYR19YNjRfU0dMLCAqUFNYR19YNjRfU0dMOworCit0eXBlZGVmIHN0cnVjdCBfU1hHX1NDQVRURVJfR0FUSEVSIHsKKwlTWEdfU0dMX1RZUEUJCQkJCQlUeXBlOwkJCS8vIEZJUlNUISBEdW1iLW5pYyBvciBvZmZsb2FkCisJdm9pZCAqICAgCQkJCQkJCWFkYXB0ZXI7CQkvLyBCYWNrIHBvaW50ZXIgdG8gYWRhcHRlcgorCUxJU1RfRU5UUlkJCQkJCQkJRnJlZUxpc3Q7CQkvLyBGcmVlIFNYR19TQ0FUVEVSX0dBVEhFUiBibG9ja3MKKwlMSVNUX0VOVFJZCQkJCQkJCUFsbExpc3Q7CQkvLyBBbGwgU1hHX1NDQVRURVJfR0FUSEVSIGJsb2NrcworCWRtYV9hZGRyX3QJCQkJICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzOy8vIHBoeXNpY2FsIGFkZHJlc3MKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCQlTdGF0ZTsJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIJCQkJCQkJCUNtZEluZGV4OwkJLy8gQ29tbWFuZCByaW5nIGluZGV4CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgICAgICAgICAgICoJRHVtYlBhY2tldDsJCS8vIEFzc29jaWF0ZWQgUGFja2V0CisJdTMyCQkJCQkJCQlEaXJlY3Rpb247CQkvLyBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zCisJdTMyCQkJCQkJCQlDdXJPZmZzZXQ7CQkvLyBDdXJyZW50IFNHTCBvZmZzZXQKKwl1MzIJCQkJCQkJCVNnbFJlZjsJCQkvLyBTR0wgcmVmZXJlbmNlIGNvdW50CisJVkxBTl9IRFIJCQkJCQkJVmxhblRhZzsJCS8vIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMCisJUFNDQVRURVJfR0FUSEVSX0xJU1QgICAJCQkJcFNnbDsJCQkvLyBTR0wgQWRkci4gUG9zc2libHkgJlNnbAorCVNYR19YNjRfU0dMCQkJCQkJCVNnbDsJCQkvLyBTR0wgaGFuZGVkIHRvIGNhcmQKK30gU1hHX1NDQVRURVJfR0FUSEVSLCAqUFNYR19TQ0FUVEVSX0dBVEhFUjsKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSgmX1N4Z1NnbC0+U2dsKQorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJc2l6ZW9mKFNYR19YNjRfU0dMKQorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorLy8gRm9yY2UgTkRJUyB0byBnaXZlIHVzIGl0J3Mgb3duIGJ1ZmZlciBzbyB3ZSBjYW4gcmVmb3JtYXQgdG8gb3VyIG93bgorI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJMAorI2Vsc2UKKyAgICBTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRmNmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oCkBAIC0wLDAgKzEsNzM0IEBACisvKgorICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqICRJZDogc3hnaHcuaCx2IDEuMiAyMDA4LzA3LzI0IDE3OjI0OjIzIGNocmlzIEV4cCAkCisgKgorICogc3hnaHcuaDoKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZQorICogQWxhY3JpdGVjaCBTYWhhcmEgaGFyZHdhcmUKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25maWd1cmF0aW9uIHNwYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vICBQQ0kgVmVuZG9yIElECisjZGVmaW5lIFNYR19WRU5ET1JfSUQJCQkweDEzOUEJLy8gQWxhY3JpdGVjaCdzIFZlbmRvciBJRAorCisvLyAgUENJIERldmljZSBJRAorI2RlZmluZSBTWEdfREVWSUNFX0lECQkJMHgwMDA5CS8vIFNhaGFyYSBEZXZpY2UgSUQKKworLy8KKy8vIFN1YnN5c3RlbSBJRHMuCisvLworLy8gVGhlIHN1YnN5c3RlbSBJRCB2YWx1ZSBpcyBicm9rZW4gaW50byBiaXQgZmllbGRzIGFzIGZvbGxvd3M6CisvLwkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KKy8vCQlCaXRzIFsxMTo4XSAgLSBPRU0gYW5kL29yIG9wZXJhdGluZyBzeXN0ZW0uCisvLwkJQml0cyBbNzowXSAgIC0gQmFzZSBTSUQuCisvLworLy8gU1NJRCBmaWVsZCAoYml0KSBtYXNrcworI2RlZmluZSBTU0lEX0JBU0VfTUFTSwkJCQkJMHgwMEZGCS8vIEJhc2Ugc3Vic3lzdGVtIElEIG1hc2sKKyNkZWZpbmUgU1NJRF9PRU1fTUFTSwkJCQkJMHgwRjAwCS8vIFN1YnN5c3RlbSBPRU0gbWFzaworI2RlZmluZSBTU0lEX0ZVTkNfTUFTSwkJCQkJMHhGMDAwCS8vIFN1YnN5c3RlbSBmdW5jdGlvbiBtYXNrCisKKy8vIEJhc2UgU1NJRCdzCisjZGVmaW5lIFNTSURfU0FIQVJBX1BST1RPCQkJCTB4MDAxOAkvLyAxMDAwMjIgU2FoYXJhIHByb3RvdHlwZSAoWGVuUGFrKSBib2FyZAorI2RlZmluZSBTU0lEX1NBSEFSQV9GSUJFUgkJCQkweDAwMTkJLy8gMTAwMDIzIFNhaGFyYSAxLXBvcnQgZmliZXIgYm9hcmQKKyNkZWZpbmUgU1NJRF9TQUhBUkFfQ09QUEVSCQkJCTB4MDAxQQkvLyAxMDAwMjQgU2FoYXJhIDEtcG9ydCBjb3BwZXIgYm9hcmQKKworLy8gVXNlZnVsIFNTSUQgbWFjcm9zCisjZGVmaW5lCVNTSURfQkFTRShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykJCS8vIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMKKyNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9PRU1fTUFTSykJCS8vIGlzb2xhdGUgU1NJRCBPRU0gYml0cworI2RlZmluZQlTU0lEX0ZVTkMoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCQkvLyBpc29sYXRlIFNTSUQgZnVuY3Rpb24gYml0cworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSFcgUmVnaXN0ZXIgU3BhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSFdSRUdfTUVNU0laRQkweDQwMDAJCS8vIDE2aworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9TWEdfSFdfUkVHUyB7CisJdTMyCQlSZXNldDsJCQkJLy8gV3JpdGUgMHhkZWFkIHRvIGludm9rZSBzb2Z0IHJlc2V0CisJdTMyCQlQYWQxOwkJCQkvLyBObyByZWdpc3RlciBkZWZpbmVkIGF0IG9mZnNldCA0CisJdTMyCQlJbnRlcnJ1cHRNYXNrMDsJCS8vIERlYXNzZXJ0IGxlZ2FjeSBpbnRlcnJ1cHQgb24gZnVuY3Rpb24gMAorCXUzMgkJSW50ZXJydXB0TWFzazE7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDEKKwl1MzIJCVVjb2RlRGF0YUxvdzsJCS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDMxLTAKKwl1MzIJCVVjb2RlRGF0YU1pZGRsZTsJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIKKwl1MzIJCVVjb2RlRGF0YUhpZ2g7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NAorCXUzMgkJVWNvZGVBZGRyOwkJCS8vIFN0b3JlIG1pY3JvY29kZSBhZGRyZXNzIC0gU2VlIGZsYWdzIGJlbG93CisJdTMyCQlQYWRUbzB4ODBbMjRdOwkJLy8gUGFkIHRvIFhjdiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworCXUzMgkJTWFjQ29uZmlnMDsJCQkvLyAweDgwIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorCXUzMgkJTWFjQ29uZmlnMTsJCQkvLyAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorCXUzMgkJTWFjQ29uZmlnMjsJCQkvLyAweDg4IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgorCXUzMgkJTWFjQ29uZmlnMzsJCQkvLyAweDhDIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMworCXUzMgkJTWFjQWRkcmVzc0xvdzsJCS8vIDB4OTAgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyAxLTQKKwl1MzIJCU1hY0FkZHJlc3NIaWdoOwkJLy8gMHg5NCAtIEFYR01BQyBNQUMgU3RhdGlvbiBBZGRyZXNzIC0gb2N0ZXRzIDUtNgorCXUzMgkJTWFjUmVzZXJ2ZWQxWzJdOwkvLyAweDk4IC0gQVhHTUFDIFJlc2VydmVkCisJdTMyCQlNYWNNYXhGcmFtZUxlbjsJCS8vIDB4QTAgLSBBWEdNQUMgTWF4aW11bSBGcmFtZSBMZW5ndGgKKwl1MzIJCU1hY1Jlc2VydmVkMlsyXTsJLy8gMHhBNCAtIEFYR01BQyBSZXNlcnZlZAorCXUzMgkJTWFjUmV2aXNpb247CQkvLyAweEFDIC0gQVhHTUFDIFJldmlzaW9uIExldmVsIFJlZ2lzdGVyCisJdTMyCQlNYWNSZXNlcnZlZDNbNF07CS8vIDB4QjAgLSBBWEdNQUMgUmVzZXJ2ZWQKKwl1MzIJCU1hY0FtaWltQ21kOwkJLy8gMHhDMCAtIEFYR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyCisJdTMyCQlNYWNBbWlpbUZpZWxkOwkJLy8gMHhDNCAtIEFYR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1Db25maWc7CQkvLyAweEM4IC0gQVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltTGluazsJCS8vIDB4Q0MgLSBBWEdNQUMgQU1JSU0gTGluayBGYWlsIFZlY3RvciBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1JbmRpY2F0b3I7CS8vIDB4RDAgLSBBWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdG9yCisJdTMyCQlQYWRUbzB4MTAwWzExXTsJCS8vIDB4RDQgLSAweDEwMCAtIFBhZAorCXUzMgkJWG10Q29uZmlnOwkJCS8vIDB4MTAwIC0gVHJhbnNtaXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorCXUzMgkJUmN2Q29uZmlnOwkJCS8vIDB4MTA0IC0gUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKwl1MzIJCUxpbmtBZGRyZXNzMExvdzsJLy8gMHgxMDggLSBMaW5rIGFkZHJlc3MgMAorCXUzMgkJTGlua0FkZHJlc3MwSGlnaDsJLy8gMHgxMEMgLSBMaW5rIGFkZHJlc3MgMAorCXUzMgkJTGlua0FkZHJlc3MxTG93OwkvLyAweDExMCAtIExpbmsgYWRkcmVzcyAxCisJdTMyCQlMaW5rQWRkcmVzczFIaWdoOwkvLyAweDExNCAtIExpbmsgYWRkcmVzcyAxCisJdTMyCQlMaW5rQWRkcmVzczJMb3c7CS8vIDB4MTE4IC0gTGluayBhZGRyZXNzIDIKKwl1MzIJCUxpbmtBZGRyZXNzMkhpZ2g7CS8vIDB4MTFDIC0gTGluayBhZGRyZXNzIDIKKwl1MzIJCUxpbmtBZGRyZXNzM0xvdzsJLy8gMHgxMjAgLSBMaW5rIGFkZHJlc3MgMworCXUzMgkJTGlua0FkZHJlc3MzSGlnaDsJLy8gMHgxMjQgLSBMaW5rIGFkZHJlc3MgMworCXUzMgkJVG9lcGxpdHpLZXlbMTBdOwkvLyAweDEyOCAtIDB4MTUwIC0gVG9lcGxpdHoga2V5CisJdTMyCQlTb2NrZXRLZXlbMTBdOwkJLy8gMHgxNTAgLSAweDE3OCAtIFNvY2tldCBLZXkKKwl1MzIJCUxpbmtTdGF0dXM7CQkJLy8gMHgxNzggLSBMaW5rIHN0YXR1cworCXUzMgkJQ2xlYXJTdGF0czsJCQkvLyAweDE3QyAtIENsZWFyIFN0YXRzCisJdTMyCQlYbXRFcnJvcnNMb3c7CQkvLyAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzCisJdTMyCQlYbXRFcnJvcnNIaWdoOwkJLy8gMHgxODQgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycworCXUzMgkJWG10RnJhbWVzTG93OwkJLy8gMHgxODggLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlYbXRGcmFtZXNIaWdoOwkJLy8gMHgxOEMgLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlYbXRCeXRlc0xvdzsJCS8vIDB4MTkwIC0gVHJhbnNtaXQgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlYbXRCeXRlc0hpZ2g7CQkvLyAweDE5NCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJWG10VGNwU2VnbWVudHNMb3c7CS8vIDB4MTk4IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVhtdFRjcFNlZ21lbnRzSGlnaDsJLy8gMHgxOUMgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJWG10VGNwQnl0ZXNMb3c7CQkvLyAweDFBMCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlYbXRUY3BCeXRlc0hpZ2g7CS8vIDB4MUE0IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1AgYnl0ZXMKKwl1MzIJCVJjdkVycm9yc0xvdzsJCS8vIDB4MUE4IC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycworCXUzMgkJUmN2RXJyb3JzSGlnaDsJCS8vIDB4MUFDIC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycworCXUzMgkJUmN2RnJhbWVzTG93OwkJLy8gMHgxQjAgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKKwl1MzIJCVJjdkZyYW1lc0hpZ2g7CQkvLyAweDFCNCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJUmN2Qnl0ZXNMb3c7CQkvLyAweDFCOCAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlSY3ZCeXRlc0hpZ2g7CQkvLyAweDFCQyAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlSY3ZUY3BTZWdtZW50c0xvdzsJLy8gMHgxQzAgLSBSZWNlaXZlIHN0YXRzIC0gVENQIHNlZ21lbnRzCisJdTMyCQlSY3ZUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MUM0IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJUmN2VGNwQnl0ZXNMb3c7CQkvLyAweDFDOCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1AgYnl0ZXMKKwl1MzIJCVJjdlRjcEJ5dGVzSGlnaDsJLy8gMHgxQ0MgLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlQYWRUbzB4MjAwWzEyXTsJCS8vIDB4MUQwIC0gMHgyMDAgLSBQYWQKKwl1MzIJCVNvZnR3YXJlWzE5MjBdOwkJLy8gMHgyMDAgLSAweDIwMDAgLSBTb2Z0d2FyZSBkZWZpbmVkIChub3QgdXNlZCkKKwl1MzIJCU1zaXhUYWJsZVsxMDI0XTsJLy8gMHgyMDAwIC0gMHgzMDAwIC0gTVNJWCBUYWJsZQorCXUzMgkJTXNpeEJpdEFycmF5WzEwMjRdOwkvLyAweDMwMDAgLSAweDQwMDAgLSBNU0lYIFBlbmRpbmcgQml0IEFycmF5Cit9IFNYR19IV19SRUdTLCAqUFNYR19IV19SRUdTOworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8gTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLy8gU3RhcnQgbWljcm9jb2RlCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8vIFN0b3JlIG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8vIFJlYWQgbWljcm9jb2RlCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwCS8vIFBhcml0eSBlcnJvciBkZXRlY3RlZAorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19NQVNLCQkweDAwMDAxRkZGCS8vIEFkZHJlc3MgYml0cworCisvLyBMaW5rIEFkZHJlc3MgUmVnaXN0ZXJzCisjZGVmaW5lIExJTktfQUREUkVTU19FTkFCTEUJCQkweDgwMDAwMDAwCS8vIEFwcGxpZWQgdG8gbGluayBhZGRyZXNzIGhpZ2gKKworLy8gTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUKKyNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLy8gMjU2aworCisvLyBTYWhhcmEgbWljcm9jb2RlIHJlZ2lzdGVyIGFkZHJlc3MgZm9ybWF0LiAgVGhlIGNvbW1hbmQgY29kZSwKKy8vIGV4dGVuZGVkIGNvbW1hbmQgY29kZSwgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc29yIGFyZSBlbmNvZGVkIGluCisvLyB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKKyNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJCS8vIEJhc2UgY29tbWFuZCBjb2RlCisjZGVmaW5lIFNYR19BRERSRVNTX0NPREVfTUFTSwkJMHgwMDAwMDAzQworI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfU0hJRlQJNgkJCS8vIEV4dGVuZGVkIChvciBzdWIpIGNvbW1hbmQgY29kZQorI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfTUFTSwkJMHgwMDAwMUZDMAorI2RlZmluZQlTWEdfQUREUkVTU19DUFVJRF9TSElGVAkJMTMJCQkvLyBDUFUKKyNkZWZpbmUgU1hHX0FERFJFU1NfQ1BVSURfTUFTSwkJMHgwMDAzRTAwMAorI2RlZmluZSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVCTB4MDAwMDIwMDAJLy8gVXNlZCB0byBzYW5pdHkgY2hlY2sgVUNPREVfUkVHUyBzdHJ1Y3R1cmUKKworLy8gU2FoYXJhIHJlY2VpdmUgc2VxdWVuY2VyIHN0YXR1cyB2YWx1ZXMKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQVRUTgkJCQkJMHg4MDAwMDAwMAkvLyBBdHRlbnRpb24KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0sJCTB4M0YwMDAwMDAJLy8gVHJhbnNwb3J0IG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SCQkweDIwMDAwMDAwCS8vIFRyYW5zcG9ydCBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQkJMHgyMzAwMDAwMAkvLyBUcmFuc3BvcnQgY2tzdW0gZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XCQkweDIyMDAwMDAwCS8vIFRyYW5zcG9ydCB1bmRlcmZsb3cKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hEUkxFTgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgaGVhZGVyIGxlbmd0aAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAJLy8gVHJhbnNwb3J0IGZsYWdzIGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9PUFRTCQkweDA4MDAwMDAwCS8vIFRyYW5zcG9ydCBvcHRpb25zIGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TRVNTX01BU0sJMHgwNzAwMDAwMAkvLyBUcmFuc3BvcnQgRERQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ERFAJCTB4MDYwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfaVNDU0kJCTB4MDUwMDAwMDAJLy8gVHJhbnNwb3J0IGlTQ1NJCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ORlMJCTB4MDQwMDAwMDAJLy8gVHJhbnNwb3J0IE5GUworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRlRQCQkweDAzMDAwMDAwCS8vIFRyYW5zcG9ydCBGVFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hUVFAJCTB4MDIwMDAwMDAJLy8gVHJhbnNwb3J0IEhUVFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1NNQgkJMHgwMTAwMDAwMAkvLyBUcmFuc3BvcnQgU01CCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSwkJCTB4MDBGRjAwMDAJLy8gTmV0d29yayBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAJLy8gTmV0d29yayBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCQkweDAwODMwMDAwCS8vIE5ldHdvcmsgY2tzdW0gZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRkxPVwkJMHgwMDgyMDAwMAkvLyBOZXR3b3JrIHVuZGVyZmxvdyBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTgkJMHgwMDgwMDAwMAkvLyBOZXR3b3JrIGhlYWRlciBsZW5ndGgKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkxPVwkJMHgwMDQwMDAwMAkvLyBOZXR3b3JrIG92ZXJmbG93IGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUNBU1QJCTB4MDAyMDAwMDAJLy8gTmV0d29yayBtdWx0aWNhc3QgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PUFRJT05TCQkweDAwMTAwMDAwCS8vIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GRlNFVAkJMHgwMDA4MDAwMAkvLyBOZXR3b3JrIG9mZnNldCBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0ZSQUdNRU5UCQkweDAwMDQwMDAwCS8vIE5ldHdvcmsgZnJhZ21lbnQgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UUkFOU19NQVNLCTB4MDAwMzAwMDAJLy8gTmV0d29yayB0cmFuc3BvcnQgdHlwZSBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVURQCQkJMHgwMDAyMDAwMAkvLyBVRFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCQkweDAwMDEwMDAwCS8vIFRDUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19JUE9OTFkJCQkJMHgwMDAwODAwMAkvLyBJUC1vbmx5IG5vdCBUQ1AKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSQkJCQkweDAwMDA2MDAwCS8vIFJlY2VpdmUgcHJpb3JpdHkKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSV9TSEZUCQkJCQkxMwkvLyBSZWNlaXZlIHByaW9yaXR5IHNoaWZ0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BBUklUWQkJCQkweDAwMDAxMDAwCS8vIE1BQyBSZWNlaXZlIFJBTSBwYXJpdHkgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQVNLCQkJMHgwMDAwMEYwMAkvLyBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19ECQkJMHgwMDAwMEIwMAkvLyBMaW5rIGFkZHJlc3MgRAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCQkweDAwMDAwQTAwCS8vIExpbmsgYWRkcmVzcyBDCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQgkJCTB4MDAwMDA5MDAJLy8gTGluayBhZGRyZXNzIEIKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19BCQkJMHgwMDAwMDgwMAkvLyBMaW5rIGFkZHJlc3MgQQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCS8vIExpbmsgYWRkcmVzcyBicm9hZGNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQ0FTVAkJMHgwMDAwMDIwMAkvLyBMaW5rIGFkZHJlc3MgbXVsdGljYXN0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQ01DQVNUCQkweDAwMDAwMTAwCS8vIExpbmsgY29udHJvbCBtdWx0aWNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRVJST1IJCQkweDAwMDAwMDgwCS8vIExpbmsgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZCQkJMHgwMDAwMDA4NwkvLyBSY3ZNYWNRIHBhcml0eSBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZCQkJMHgwMDAwMDA4NgkvLyBEYXRhIGVhcmx5CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1cJCTB4MDAwMDAwODUJLy8gQnVmZmVyIG92ZXJmbG93CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERQkJCTB4MDAwMDAwODQJLy8gTGluayBjb2RlIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRQkJCTB4MDAwMDAwODMJLy8gRHJpYmJsZSBuaWJibGUKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkJMHgwMDAwMDA4MgkvLyBDUkMgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVwkJCTB4MDAwMDAwODEJLy8gTGluayBvdmVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1VGTE9XCQkJMHgwMDAwMDA4MAkvLyBMaW5rIHVuZGVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCQkweDAwMDAwMDIwCS8vIDgwMi4zCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfU05BUAkJCTB4MDAwMDAwMTAJLy8gU25hcAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1ZMQU4JCQkweDAwMDAwMDA4CS8vIFZMQU4KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19UWVBFX01BU0sJCTB4MDAwMDAwMDcJLy8gTmV0d29yayB0eXBlIG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT05UUk9MCQkJMHgwMDAwMDAwMwkvLyBDb250cm9sIHBhY2tldAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCQkweDAwMDAwMDAyCS8vIElQdjYgcGFja2V0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfSVBWNAkJCTB4MDAwMDAwMDEJLy8gSVB2NCBwYWNrZXQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2FoYXJhIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZQlSQ1ZfQ09ORklHX1JFU0VUCQkJMHg4MDAwMDAwMAkvLyBSY3ZDb25maWcgcmVnaXN0ZXIgcmVzZXQKKyNkZWZpbmUJUkNWX0NPTkZJR19FTkFCTEUJCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYworI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCQkweDIwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBwYXJzZXIKKyNkZWZpbmUJUkNWX0NPTkZJR19TT0NLRVQJCQkweDEwMDAwMDAwCS8vIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWQkFECQkJMHgwODAwMDAwMAkvLyBSZWNlaXZlIGFsbCBiYWQgZnJhbWVzCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJCTB4MDQwMDAwMDAJLy8gUmVjZWl2ZSBhbGwgY29udHJvbCBmcmFtZXMKKyNkZWZpbmUJUkNWX0NPTkZJR19SQ1ZQQVVTRQkJCTB4MDIwMDAwMDAJLy8gRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0bgorI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNgkJCTB4MDEwMDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY2IHRvZXBsaXR6CisjZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkJMHgwMDgwMDAwMAkvLyBJbmNsdWRlIFRDUCBwb3J0IHcvIElQdjQgdG9lcGxpdHoKKyNkZWZpbmUJUkNWX0NPTkZJR19GTFVTSAkJCTB4MDA0MDAwMDAJLy8gRmx1c2ggYnVmZmVycworI2RlZmluZQlSQ1ZfQ09ORklHX1BSSU9SSVRZX01BU0sJMHgwMDMwMDAwMAkvLyBQcmlvcml0eSBsZXZlbAorI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfTUFTSwkJMHgwMDAzMDAwMAkvLyBIYXNoIGRlcHRoCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF84CQkJMHgwMDAwMDAwMAkvLyBIYXNoIGRlcHRoIDgKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkJMHgwMDAxMDAwMAkvLyBIYXNoIGRlcHRoIDE2CisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF80CQkJMHgwMDAyMDAwMAkvLyBIYXNoIGRlcHRoIDQKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzIJCQkweDAwMDMwMDAwCS8vIEhhc2ggZGVwdGggMgorI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkYwCS8vIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4KKyNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkJMHgwMDAwMDAwOAkvLyBEaXNhYmxlIHNvY2tldCBkZXRlY3Rpb24gb24gYXR0bgorLy8gTWFjcm8gdG8gZGV0ZXJtaW5lIFJDVl9DT05GSUdfQlVGTEVOIGJhc2VkIG9uIG1heGltdW0gZnJhbWUgc2l6ZS4KKy8vIFdlIGFkZCAxOCBieXRlcyBmb3IgU2FoYXJhIHJlY2VpdmUgc3RhdHVzIGFuZCBwYWRkaW5nLCBwbHVzIDQgYnl0ZXMgZm9yIENSQywKKy8vIGFuZCByb3VuZCB1cCB0byBuZWFyZXN0IDE2IGJ5dGUgYm91bmRhcnkKKyNkZWZpbmUgUkNWX0NPTkZJR19CVUZTSVpFKF9NYXhGcmFtZSkgKCgoKF9NYXhGcmFtZSkgKyAyMikgKyAxNSkgJiBSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLKQorCisjZGVmaW5lCVhNVF9DT05GSUdfUkVTRVQJCQkweDgwMDAwMDAwCS8vIFhtdENvbmZpZyByZWdpc3RlciByZXNldAorI2RlZmluZQlYTVRfQ09ORklHX0VOQUJMRQkJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRyYW5zbWl0IGxvZ2ljCisjZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAkvLyBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAkvLyBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwCS8vIEludmVydCBNQUMgUkFNIHBhcml0eQorI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQS1YR01BQyBSZWdpc3RlcnMgLSBPY2N1cHkgMHg4MCAtIDB4RDQgb2YgdGhlIFNYR19IV19SRUdTCisgKgorICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIGF4Z21hYy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIFN1YiBtb2R1bGUgcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMAkJLy8gUmVjZWl2ZSBmdW5jdGlvbiByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMAkJLy8gVHJhbnNtaXQgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwCQkvLyBNSUkgTWFuYWdlbWVudCByZXNldAorCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEFsbG93IHRoZSBzZW5kaW5nIG9mIFBhdXNlIGZyYW1lcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCQkweDQwMDAwMDAwCQkvLyBFbmFibGUgdHJhbnNtaXQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1BBVVNFCQkweDIwMDAwMDAwCQkvLyBBbGxvdyB0aGUgZGV0ZWN0aW9uIG9mIFBhdXNlIGZyYW1lcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRU4JCQkweDEwMDAwMDAwCQkvLyBFbmFibGUgcmVjZWl2ZQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfU1RBVEUJCTB4MDQwMDAwMDAJCS8vIEN1cnJlbnQgdHJhbnNtaXQgc3RhdGUgLSBSRUFEIE9OTFkKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUQVRFCQkweDAxMDAwMDAwCQkvLyBDdXJyZW50IHJlY2VpdmUgc3RhdGUgLSBSRUFEIE9OTFkKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE9GRl9TSE9SVAkJMHgwMDAwMTAwMAkJLy8gT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MxCQkweDAwMDAwNDAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMSA0LWJ5dGUgd29yZAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMgkJMHgwMDAwMDgwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDIgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MzCQkweDAwMDAwQzAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMyA0LWJ5dGUgd29yZHMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzEJCTB4MDAwMDAxMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDEgNC1ieXRlIHdvcmQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzIJCTB4MDAwMDAyMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDIgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAzIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QS1RfT1ZFUlJJREUJMHgwMDAwMDA4MAkJLy8gUGVyLXBhY2tldCBvdmVycmlkZSBlbmFibGUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfU1dBUAkJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUCTB4MDAwMDAwMjAJCS8vIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfU1RSSUNUCQkweDAwMDAwMDEwCQkvLyBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIKKyNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCisjZGVmaW5lIEFYR01BQ19DRkcxX0dFTl9GQ1MJCQkweDAwMDAwMDA0CQkvLyBHZW5lcmF0ZSBGQ1MKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX01BU0sJCTB4MDAwMDAwMDMJCS8vIE1hc2sgZm9yIHBhZCBiaXRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82NAkJCTB4MDAwMDAwMDEJCS8vIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIJCS8vIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY4CQkJMHgwMDAwMDAwMwkJLy8gUGFkIHRvIDY4IGJ5dGVzCisKKy8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCisjZGVmaW5lIEFYR01BQ19DRkcyX0dFTl9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gR2VuZXJhdGUgc2luZ2xlIHBhdXNlIGZyYW1lICh0ZXN0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAJCS8vIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX0FVVE8JCQkweDA0MDAwMDAwCQkvLyBBdXRvIGxpbmsgZmF1bHQgc2VxdWVuY2UKKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfUkVNT1RFCQkweDAyMDAwMDAwCQkvLyBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9MT0NBTAkJMHgwMTAwMDAwMAkJLy8gTG9jYWwgbGluayBmYXVsdCAoUkVBRCBPTkxZKQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfTUFTSwkJMHgwMDFGMDAwMAkJLy8gSW50ZXIgcGFja2V0IGdhcAorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfU0hJRlQJCTE2CisjZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMAkJLy8gUGF1c2UgdHJhbnNtaXQgbW9kdWxlCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19FWFRFTgkJMHgwMDAwMDAyMAkJLy8gRW5hYmxlIElQRyBleHRlbnNpb24gYWxnb3JpdGhtCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR0VYX01BU0sJCTB4MDAwMDAwMUYJCS8vIElQRyBleHRlbnNpb24KKworLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAJCS8vIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCQkvLyBSZWNlaXZlIGZyYW1lIGRvbid0IGNhcmUgZmlsdGVyCisKKy8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9UV08JCTB4MDBGRjAwMDAJCS8vIFNlY29uZCBvY3RldAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJCS8vIFRoaXJkIG9jdGV0CisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKKworLy8gQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgNS02CisjZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX0ZJVkUJMHhGRjAwMDAwMAkJLy8gRmlmdGggb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfU0lYCTB4MDBGRjAwMDAJCS8vIFNpeHRoIG9jdGV0CisKKy8vIEEtWEdNQUMgTWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVAkJCTB4M0ZGRjAwMDAJCS8vIE1heGltdW0gdHJhbnNtaXQgZnJhbWUgbGVuZ3RoCisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVRfU0hJRlQJMTYKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1JDVgkJCTB4MDAwMEZGRkYJCS8vIE1heGltdW0gcmVjZWl2ZSBmcmFtZSBsZW5ndGgKKy8vIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KKy8vIEZvciBqdW1ibywgSSdsbCBqdXN0IHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlLiAgVGhpcworLy8gdmFsdWUgc2V0cyB0aGUgcmVjZWl2ZSBieXRlIGNvdW50IHRvIDkwMzYgKDB4MjM0QykgYW5kIHRoZQorLy8gdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgorLy8gYnl0ZXMgb2YgcGFkZGluZyBiZXlvbmQgdGhlIGp1bWJvIE1UVSBvZiA5MDE0CisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9KVU1CTwkJMHgwOEQzMjM0QworCisvLyBBLVhHTUFDIFJldmlzaW9uIGxldmVsCisjZGVmaW5lIEFYR01BQ19SRVZJU0lPTl9NQVNLCQkweDAwMDBGRkZGCQkvLyBSZXZpc2lvbiBsZXZlbAorCisvLyBBLVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9TVEFSVAkJMHgwMDAwMDAwOAkJLy8gQ29tbWFuZCBzdGFydAorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJCS8vIENvbW1hbmQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFdyaXRlCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1JFQUQJCTIJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX1NJTkdMRQkJMwkJLy8gTW9uaXRvciBzaW5nbGUgUEhZCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9NVUxUSVBMRQk0CQkvLyBNb25pdG9yIG11bHRpcGxlIGNvbnRpZ3VvdXMgUEhZcworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT04JCTUJCS8vIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYJCS8vIENsZWFyIExpbmsgRmFpbCBCaXQgaW4gTUlJTQorCisvLyBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkJLy8gMi1iaXQgU1QgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1NUX1NISUZUCQkJMzAKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCQkvLyAyLWJpdCBPUCBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQJCQkyOAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIDB4MEY4MDAwMDAJCS8vIFBvcnQgYWRkcmVzcyBmaWVsZCAoaHN0cGh5YWR4IGluIHNwZWMpCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUCQkyMworI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIJMHgwMDdDMDAwMAkJLy8gRGV2aWNlIGFkZHJlc3MgZmllbGQgKGhzdHJlZ2FkeCBpbiBzcGVjKQorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUCQkxOAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEEJCTB4MDAwMzAwMDAJCS8vIDItYml0IFRBIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVAkJCTE2CisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9EQVRBCQkweDAwMDBGRkZGCQkvLyBEYXRhIGZpZWxkCisKKy8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9PUCBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorI2RlZmluZQlNSUlNX09QX0FERFIJCQkJCQkwCQkvLyBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbgorI2RlZmluZQlNSUlNX09QX1dSSVRFCQkJCQkJMQkJLy8gTUlJTSBXcml0ZSByZWdpc3RlciBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9SRUFECQkJCQkJMgkJLy8gTUlJTSBSZWFkIHJlZ2lzdGVyIG9wZXJhdGlvbgorI2RlZmluZQlNSUlNX09QX0FERFJfU0hJRlQJKE1JSU1fT1BfQUREUiA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpCisKKy8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9QT1JUX05VTQkJCQkJCTEJCS8vIEFsbCBTYWhhcmEgTUlJTSBtb2R1bGVzIHVzZSBwb3J0IDEKKworLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lCU1JSU1fREVWX1BIWV9QTUEJCQkJCTEJCS8vIFBIWSBQTUEvUE1EIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKKyNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCQkJMwkJLy8gUEhZIFBDUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJCQkJCTQJCS8vIFBIWSBYUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lCU1JSU1fREVWX1hHWFMJCQkJCQk1CQkvLyBYR1hTIE1JSU0gZGV2aWNlIG51bWJlcgorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfVEEgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9UQV8xMEdCCQkJCQkJMgkJLy8gc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbgorCisvLyBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19OT1BSRUFNCTB4MDAwMDAwODAJCS8vIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sJMHgwMDAwMDA3RgkJLy8gaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0CisKKy8vIEEtWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0xJTksJCTB4MDAwMDAwMTAJCS8vIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTVBIWQkJMHgwMDAwMDAwOAkJLy8gTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CQkvLyBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NT04JCTB4MDAwMDAwMDIJCS8vIFNpbmdsZSBvciBtdWx0aXBsZSBtb25pdG9yIGNtZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCQkvLyBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZQorCisvLyBMaW5rIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZQlMU19QSFlfQ0xSX1JFU0VUCQkJMHg4MDAwMDAwMAkJLy8gQ2xlYXIgcmVzZXQgc2lnbmFsIHRvIFBIWQorI2RlZmluZQlMU19TRVJERVNfUE9XRVJfRE9XTgkJMHg0MDAwMDAwMAkJLy8gUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcworI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJCQkweDIwMDAwMDAwCQkvLyBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYworI2RlZmluZQlMU19YR1hTX0NUTAkJCQkJMHgxMDAwMDAwMAkJLy8gSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwCisjZGVmaW5lCUxTX1NFUkRFU19ET1dOCQkJCTB4MDgwMDAwMDAJCS8vIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCisjZGVmaW5lCUxTX1RSQUNFX0RPV04JCQkJMHgwNDAwMDAwMAkJLy8gV2hlbiAwLCBUcmFjZSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCisjZGVmaW5lCUxTX1BIWV9DTEtfMjVNSFoJCQkweDAyMDAwMDAwCQkvLyBTZXQgUEhZIGNsb2NrIHRvIDI1IE1IeiAoZWxzZSAxNTYuMTI1IE1IeikKKyNkZWZpbmUJTFNfUEhZX0NMS19FTgkJCQkweDAxMDAwMDAwCQkvLyBFbmFibGUgY2xvY2sgdG8gUEhZCisjZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJCQkweDAwMDAwMDEwCQkvLyBYQVVJIGxpbmsgaXMgdXAKKyNkZWZpbmUJTFNfWEFVSV9MSU5LX0NITkcJCQkweDAwMDAwMDA4CQkvLyBYQVVJIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkCisjZGVmaW5lCUxTX0xJTktfQUxBUk0JCQkJMHgwMDAwMDAwNAkJLy8gTGluayBhbGFybSBwaW4KKyNkZWZpbmUJTFNfQVRUTl9DVFJMX01BU0sJCQkweDAwMDAwMDAzCQkvLyBNYXNrIGxpbmsgYXR0ZW50aW9uIGNvbnRyb2wgYml0cworI2RlZmluZQlMU19BVFROX0FMQVJNCQkJCTB4MDAwMDAwMDAJCS8vIDAwID0+IEF0dG4gb24gbGluayBhbGFybQorI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCQkvLyAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZQorI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkJCTB4MDAwMDAwMDIJCS8vIDEwID0+IEF0dG4gb24gbGluayBzdGF0dXMgY2hhbmdlCisjZGVmaW5lCUxTX0FUVE5fTk9ORQkJCQkweDAwMDAwMDAzCQkvLyAxMSA9PiBubyBBdHRuCisKKy8vIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycworI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCQkJMHg4MDAwMDAwMAkJLy8gRW5hYmxlIHRoaXMgbGluayBhZGRyZXNzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogWEdYUyBYQVVJIFhHTUlJIEV4dGVuZGVyIHJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBteGd4cy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBYR1hTIFJlZ2lzdGVyIE1hcAorI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMQkJMHgwMDAxCQkJLy8gWFMgU3RhdHVzIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0xPVwkJMHgwMDAyCQkJLy8gWFMgRGV2aWNlIElEIChsb3cpCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICQkweDAwMDMJCQkvLyBYUyBEZXZpY2UgSUQgKGhpZ2gpCisjZGVmaW5lIFhHWFNfQUREUkVTU19TUEVFRAkJCTB4MDAwNAkJCS8vIFhTIFNwZWVkIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9MT1cJCTB4MDAwNQkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQorI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0hJR0gJCTB4MDAwNgkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkJMHgwMDA4CQkJLy8gWFMgU3RhdHVzIDIKKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX2xPVwkJMHgwMDBFCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCisjZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9ISUdICQkweDAwMEYJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKKyNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkJCS8vIDEwRyBYR1hTIExhbmUgU3RhdHVzCisjZGVmaW5lIFhHWFNfQUREUkVTU19URVNUX0NUUkwJCTB4MDAxOQkJCS8vIDEwRyBYR1hTIFRlc3QgQ29udHJvbAorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8xCQkweDgwMDAJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMQorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCQkweDgwMDEJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMgorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkxCQkweDgwMDIJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMQorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkyCQkweDgwMDMJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMgorCisvLyBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJCQkweDgwMDAJCQkvLyBSZXNldCAtIHNlbGYgY2xlYXJpbmcKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT09QQkFDSwkJMHg0MDAwCQkJLy8gRW5hYmxlIGxvb3BiYWNrCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQxCQkweDIwMDAJCQkvLyAwID0gdW5zcGVjaWZpZWQsIDEgPSAxMEdiKworI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPV1BPV0VSCQkweDA0MDAJCQkvLyAxID0gTG93IHBvd2VyIG1vZGUKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDIJCTB4MDA0MAkJCS8vIFNhbWUgYXMgU1BFRUQxICg/KQorI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVECQkJMHgwMDNDCQkJLy8gRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykKKworLy8gWFMgU3RhdHVzIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9GQVVMVAkJCTB4MDA4MAkJCS8vIEZhdWx0IGRldGVjdGVkCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9MSU5LCQkJMHgwMDA0CQkJLy8gMSA9IExpbmsgdXAKKyNkZWZpbmUgWEdYU19TVEFUVVMxX0xPV1BPV0VSCQkweDAwMDIJCQkvLyAxID0gTG93IHBvd2VyIHN1cHBvcnRlZAorCisvLyBYUyBTcGVlZCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19TUEVFRF8xMEcJCQkJMHgwMDAxCQkJLy8gMSA9IDEwRyBjYXBhYmxlCisKKy8vIFhTIERldmljZXMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfREVWSUNFU19EVEUJCQkweDAwMjAJCQkvLyBEVEUgWFMgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfUEhZCQkJMHgwMDEwCQkJLy8gUEhZIFhTIFByZXNlbnQKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkJCTB4MDAwOAkJCS8vIFBDUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19XSVMJCQkweDAwMDQJCQkvLyBXSVMgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfUE1ECQkJMHgwMDAyCQkJLy8gUE1EL1BNQSBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkJMHgwMDAxCQkJLy8gQ2xhdXNlIDIyIHJlZ2lzdGVycyBwcmVzZW50CisKKy8vIFhTIERldmljZXMgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjIJCTB4ODAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMgorI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMQkJMHg0MDAwCQkJLy8gVmVuZG9yIHNwZWNpZmljIGRldmljZSAxCisKKy8vIFhTIFN0YXR1cyAyIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX01BU0sJCTB4QzAwMAkJCS8vIERldmljZSBwcmVzZW50IG1hc2sKKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9SRVNQT05ECTB4ODAwMAkJCS8vIERldmljZSByZXNwb25kaW5nCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJCTB4MDgwMAkJCS8vIFRyYW5zbWl0IGZhdWx0CisjZGVmaW5lIFhHWFNfU1RBVFVTMl9SQ1ZfRkFVTFQJCTB4MDQwMAkJCS8vIFJlY2VpdmUgZmF1bHQKKworLy8gWFMgUGFja2FnZSBJRCBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfT1JHCQkJMHhGQzAwCQkJLy8gT3JnYW5pemF0aW9uYWxseSBVbmlxdWUKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkJCTB4MDNGMAkJCS8vIE1hbnVmYWN0dXJlciBNb2RlbAorI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfUkVWCQkJMHgwMDBGCQkJLy8gUmV2aXNpb24gTnVtYmVyCisKKy8vIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX0xBTkVfUEhZCQkJCTB4MTAwMAkJCS8vIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzCisjZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCQkJMHgwODAwCQkJLy8gUGF0dGVybiB0ZXN0aW5nIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19MQU5FX0xPT1BCQUNLCQkJMHgwNDAwCQkJLy8gUEhZIGxvb3BiYWNrIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkJCTB4MDAwOAkJCS8vIExhbmUgMyBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJCQkweDAwMDQJCQkvLyBMYW5lIDIgc3luYworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzEJCQkJMHgwMDAyCQkJLy8gTGFuZSAxIHN5bmMKKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkJCTB4MDAwMQkJCS8vIExhbmUgMCBzeW5jCisKKy8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkJCS8vIFRlc3QgcGF0dGVybiBlbmFibGVkCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01BU0sJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCQkweDAwMDIJCQkvLyBUZXN0IHBhdHRlcm4gLSBtaXhlZAorI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9MT1cJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGxvdworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV4dGVybmFsIE1ESU8gQnVzIFJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBQSFkvWEVOUEFLL0lFRUUgc3BlY3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBMQVNJIChMaW5rIEFsYXJtIFN0YXR1cyBJbnRlcnJ1cHQpIFJlZ2lzdGVycyAobG9jYXRlZCBpbiBNSUlNX0RFVl9QSFlfUE1BIGRldmljZSkKKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9DT05UUk9MCQkweDkwMDAJCQkvLyBMQVNJIFJYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9DT05UUk9MCQkweDkwMDEJCQkvLyBMQVNJIFRYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9DT05UUk9MCQkJCTB4OTAwMgkJCS8vIExBU0kgQ29udHJvbAorI2RlZmluZSBMQVNJX1JYX0FMQVJNX1NUQVRVUwkJMHg5MDAzCQkJLy8gTEFTSSBSWF9BTEFSTSBTdGF0dXMKKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9TVEFUVVMJCTB4OTAwNAkJCS8vIExBU0kgVFhfQUxBUk0gU3RhdHVzCisjZGVmaW5lIExBU0lfU1RBVFVTCQkJCQkweDkwMDUJCQkvLyBMQVNJIFN0YXR1cworCisvLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQJCQkvLyBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cworI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCQkJLy8gRW5hYmxlIFRYX0FMQVJNIGludGVycnVwdHMKKyNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCisKKy8vIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCisjZGVmaW5lCUxBU0lfU1RBVFVTX1RYX0FMQVJNCQkweDAwMDIJCQkvLyBUWF9BTEFSTSBzdGF0dXMKKyNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JCTB4MDAwMQkJCS8vIExpbmsgU3RhdHVzCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQTUEvUE1EIChkZXZpY2UgMSkKKyNkZWZpbmUJUEhZX1BNQV9DT05UUk9MMQkJCTB4MDAwMAkJCS8vIFBNQS9QTUQgQ29udHJvbCAxCisjZGVmaW5lCVBIWV9QTUFfU1RBVFVTMQkJCQkweDAwMDEJCQkvLyBQTUEvUE1EIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9QTUFfUkNWX0RFVAkJCQkweDAwMEEJCQkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdAorCQkvLyBvdGhlciBQTUEvUE1EIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKQorI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCQkJMHgwMDAwCQkJLy8gUENTIENvbnRyb2wgMQorI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCQkJMHgwMDAxCQkJLy8gUENTIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9QQ1NfMTBHX1NUQVRVUzEJCQkweDAwMjAJCQkvLyBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxCisJCS8vIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorCisvLyBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KQorI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCQkJMHgwMDAwCQkJLy8gWFMgQ29udHJvbCAxCisjZGVmaW5lCVBIWV9YU19TVEFUVVMxCQkJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkJCTB4MDAxOAkJCS8vIFhTIExhbmUgU3RhdHVzCisJCS8vIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWV9QTUFfQ09OVFJPTDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVBNQV9DT05UUk9MMV9SRVNFVAkJCTB4ODAwMAkJCS8vIFBNQS9QTUQgcmVzZXQKKworLy8gUEhZX1BNQV9SQ1ZfREVUIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlQTUFfUkNWX0RFVEVDVAkJCQkweDAwMDEJCQkvLyBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdAorCisvLyBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJCQkweDAwMDEJCQkvLyBQQ1MgMTBHQkFTRS1SIGxvY2tlZCB0byByZWNlaXZlIGJsb2NrcworCisvLyBQSFlfWFNfTEFORV9TVEFUVVMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVhTX0xBTkVfQUxJR04JCQkJMHgxMDAwCQkJLy8gWFMgdHJhbnNtaXQgbGFuZXMgYWxpZ25lZAorCisvLyBQSFkgTWljcm9jb2RlIGRvd25sb2FkIGRhdGEgc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCBfUEhZX1VDT0RFIHsKKwl1c2hvcnQJQWRkcjsKKwl1c2hvcnQJRGF0YTsKK30gUEhZX1VDT0RFLCAqUFBIWV9VQ09ERTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zbWl0IFNlcXVlbmNlciBDb21tYW5kIERlc2NyaXB0b3IgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGxhY2VkIGluIEdSQU0uICBUaGUgYWRkcmVzcyBvZiB0aGlzIGRlc2NyaXB0b3IKKy8vIChhbG9uZyB3aXRoIGEgY291cGxlIG9mIGNvbnRyb2wgYml0cykgaXMgcHVzaGVkIG9udG8gdGhlIFB4aENtZFEgb3IgUHhsQ21kUQorLy8gKFByb3h5IGhpZ2ggb3IgbG93IGNvbW1hbmQgcXVldWUpLiAgVGhpcyBkYXRhIGlzIHJlYWQgYnkgdGhlIFByb3h5IFNlcXVlbmNlciwKKy8vIHdoaWNoIHB1c2hlcyBpdCBvbnRvIHRoZSBYbXRDbWRRLCB3aGljaCBpcyAoZXZlbnR1YWxseSkgcmVhZCBieSB0aGUgVHJhbnNtaXQKKy8vIFNlcXVlbmNlciwgY2F1c2luZyBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZC4gIE5vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCBmb3IKKy8vIGFsbCBjb21tYW5kcyAtIHNlZSB0aGUgU2FoYXJhIHNwZWMgZm9yIGRldGFpbHMuICBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKKy8vIG9ubHkgdmFsaWQgd2hlbiBjb21waWxlZCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZS4KKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1hNVF9ERVNDIHsKKwl1c2hvcnQJWG10TGVuOwkJCS8vIHdvcmQgMCwgYml0cyBbMTU6MF0gLSAgdHJhbnNtaXQgbGVuZ3RoCisJdW5zaWduZWQgY2hhcglYbXRDdGw7CQkJLy8gd29yZCAwLCBiaXRzIFsyMzoxNl0gLSB0cmFuc21pdCBjb250cm9sIGJ5dGUKKwl1bnNpZ25lZCBjaGFyCUNtZDsJCQkvLyB3b3JkIDAsIGJpdHMgWzMxOjI0XSAtIHRyYW5zbWl0IGNvbW1hbmQgcGx1cyBtaXNjLgorCXUzMglYbXRCdWZJZDsJCS8vIHdvcmQgMSwgYml0cyBbMzE6MF0gLSAgdHJhbnNtaXQgYnVmZmVyIElECisJdW5zaWduZWQgY2hhcglUY3BTdHJ0OwkJLy8gd29yZCAyLCBiaXRzIFs3OjBdIC0gICBieXRlIGFkZHJlc3Mgb2YgVENQIGhlYWRlcgorCXVuc2lnbmVkIGNoYXIJSXBTdHJ0OwkJCS8vIHdvcmQgMiwgYml0cyBbMTU6OF0gLSAgYnl0ZSBhZGRyZXNzIG9mIElQIGhlYWRlcgorCXVzaG9ydAlJcENrU3VtOwkJLy8gd29yZCAyLCBiaXRzIFszMToxNl0gLSBwYXJ0aWFsIElQIGNoZWNrc3VtCisJdXNob3J0CVRjcENrU3VtOwkJLy8gd29yZCAzLCBiaXRzIFsxNTowXSAtICBwYXJ0aWFsIFRDUCBjaGVja3N1bQorCXVzaG9ydAlSc3ZkMTsJCQkvLyB3b3JkIDMsIGJpdHMgWzMxOjE2XSAtIFBBRAorCXUzMglSc3ZkMjsJCQkvLyB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkMzsJCQkvLyB3b3JkIDUsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkNDsJCSAgICAvLyB3b3JkIDYsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkNTsJCSAgICAvLyB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRAorfSBYTVRfREVTQywgKlBYTVRfREVTQzsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8vIFhNVF9ERVNDIENtZCBieXRlIGRlZmluaXRpb25zCisJCS8vIGNvbW1hbmQgY29kZXMKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCQkvLyByYXcgc2VuZCBkZXNjcmlwdG9yCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCQkvLyBjaGVja3N1bSBpbnNlcnQgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfRk9STUFUCQkJMgkJLy8gZm9ybWF0IGRlc2NyaXB0b3IKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1BSSU1FCQkJMwkJLy8gcHJpbWUgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CQkvLyBjb21hbmQgY29kZSBzaGlmdCAoc2hpZnQgdG8gYml0cyBbMzE6MzBdIGluIHdvcmQgMCkKKwkJLy8gc2hpZnRlZCBjb21tYW5kIGNvZGVzCisjZGVmaW5lIFhNVF9SQVdfU0VORAkJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJCShYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX0ZPUk1BVAkJCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX1BSSU1FCQkJKFhNVF9ERVNDX0NNRF9QUklNRSAgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorCisvLyBYTVRfREVTQyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKKy8vIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQorI2RlZmluZQlYTVRfQ1RMX1BBVVNFX0ZSQU1FCQkJMHg4MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCisjZGVmaW5lCVhNVF9DVExfQ09OVFJPTF9GUkFNRQkJMHg0MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCisjZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8vIHBlciBwYWNrZXQgcXVhbGlmaWVyCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvLyBkbyBub3QgcGFkIGZyYW1lCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCQkweDA4CS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFX1ZMQU5fNjgJMHgxMAkvLyBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMsIGFuZCBWTEFOIGZyYW1lcyB0byA2OCBieXRlcworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY4CQkJMHgxOAkvLyBwYWQgZnJhbWUgdG8gNjggYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9HRU5fRkNTCQkJCTB4MDQJLy8gZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzAJCQkweDAwCS8vIGRvIG5vdCBkZWxheSBGQ1MgY2FsY3V0aW9uCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzEJCQkweDAxCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAxICg0LWJ5dGUpIHdvcmQKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMgkJCTB4MDIJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDIgKDQtYnl0ZSkgd29yZHMKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMwkJCTB4MDMJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDMgKDQtYnl0ZSkgd29yZHMKKworLy8gWE1UX0RFU0MgWG10QnVmSWQgZGVmaW5pdGlvbgorI2RlZmluZSBYTVRfQlVGX0lEX1NIRlQJCTgJCQkvLyBUaGUgWG10IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcKKwkJCQkJCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUkNWX0VWVFFfUkJGSURfTUFTSwkJMHgwMDAwRkZGRgkvLyBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElECisKKy8vIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24KKyNkZWZpbmUgUkNWX0JVRl9JRF9TSEZUCQk1CQkJLy8gVGhlIFJjdiBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCisJCQkJCQkJCQkJLy8gdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcyBieSAzMiAob3IgPDwgNSkKKworLy8gRm9ybWF0IG9mIHRoZSAxOCBieXRlIFJlY2VpdmUgQnVmZmVyIHJldHVybmVkIGJ5IHRoZQorLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgZm9yIHJlY2VpdmVkIHBhY2tldHMKKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1JDVl9CVUZfSERSIHsKKwl1MzIJU3RhdHVzOwkJCQkvLyBTdGF0dXMgd29yZCBmcm9tIFJjdiBTZXEgUGFyc2VyCisJdXNob3J0CUxlbmd0aDsJCQkJLy8gUmN2IHBhY2tldCBieXRlIGNvdW50CisJdW5pb24geworCQl1c2hvcnQJCVRjcENzdW07CS8vIFRDUCBjaGVja3N1bQorCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhcglUY3BDc3VtTDsJLy8gbG93ZXIgOCBiaXRzIG9mIHRoZSBUQ1AgY2hlY2tzdW0KKwkJCXVuc2lnbmVkIGNoYXIJTGlua0hhc2g7CS8vIExpbmsgaGFzaCAobXVsdGljYXN0IGZyYW1lcyBvbmx5KQorCQl9OworCX07CisJdXNob3J0CVNrdEhhc2g7CQkJLy8gU29ja2V0IGhhc2gKKwl1bnNpZ25lZCBjaGFyCVRjcEhkck9mZnNldDsJCS8vIFRDUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0CisJdW5zaWduZWQgY2hhcglJcEhkck9mZnNldDsJCS8vIElQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQKKwl1MzIJVHB6SGFzaDsJCQkvLyBUb2VwbGl0eiBoYXNoCisJdXNob3J0CVJlc2VydmVkOwkJCS8vIFJlc2VydmVkCit9IFJDVl9CVUZfSERSLCAqUFJDVl9CVUZfSERSOworI3ByYWdtYSBwYWNrKHBvcCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFF1ZXVlIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEluZ3Jlc3MgKHJlYWQgb25seSkgcXVldWUgbnVtYmVycworI2RlZmluZSBQWFlfQlVGX1EJCTAJCS8vIFByb3h5IEJ1ZmZlciBRdWV1ZQorI2RlZmluZSBIU1RfRVZUX1EJCTEJCS8vIEhvc3QgRXZlbnQgUXVldWUKKyNkZWZpbmUgWE1UX0JVRl9RCQkyCQkvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUKKyNkZWZpbmUgU0tUX0VWTF9RCQkzCQkvLyBSY3ZTcXIgU29ja2V0IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZQorI2RlZmluZSBSQ1ZfRVZMX1EJCTQJCS8vIFJjdlNxciBSY3YgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIFNLVF9FVkhfUQkJNQkJLy8gUmN2U3FyIFNvY2tldCBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIFJDVl9FVkhfUQkJNgkJLy8gUmN2U3FyIFJjdiBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIERNQV9SU1BfUQkJNwkJLy8gRG1hIFJlc3BvbnNlIFF1ZXVlIC0gb25lIHBlciBDUFUgY29udGV4dAorLy8gTG9jYWwgKHJlYWQvd3JpdGUpIHF1ZXVlIG51bWJlcnMKKyNkZWZpbmUgTE9DQUxfQV9RCQk4CQkvLyBTcGFyZSBsb2NhbCBRdWV1ZQorI2RlZmluZSBMT0NBTF9CX1EJCTkJCS8vIFNwYXJlIGxvY2FsIFF1ZXVlCisjZGVmaW5lIExPQ0FMX0NfUQkJMTAJCS8vIFNwYXJlIGxvY2FsIFF1ZXVlCisjZGVmaW5lIEZTTV9FVlRfUQkJMTEJCS8vIEZpbml0ZS1TdGF0ZS1NYWNoaW5lIEV2ZW50IFF1ZXVlCisjZGVmaW5lIFNCRl9QQUxfUQkJMTIJCS8vIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAobG93KSBRdWV1ZQorI2RlZmluZSBTQkZfUEFIX1EJCTEzCQkvLyBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlCisjZGVmaW5lIFNCRl9WQUxfUQkJMTQJCS8vIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChsb3cpIFF1ZXVlCisjZGVmaW5lIFNCRl9WQUhfUQkJMTUJCS8vIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZQorLy8gRWdyZXNzICh3cml0ZSBvbmx5KSBxdWV1ZSBudW1iZXJzCisjZGVmaW5lIEgyR19DTURfUQkJMTYJCS8vIEhvc3QgdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIEgyRF9DTURfUQkJMTcJCS8vIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBHMkhfQ01EX1EJCTE4CQkvLyBHbGJSYW0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBHMkRfQ01EX1EJCTE5CQkvLyBHbGJSYW0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBEMkhfQ01EX1EJCTIwCQkvLyBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRDJHX0NNRF9RCQkyMQkJLy8gRFJBTSB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRDJEX0NNRF9RCQkyMgkJLy8gRFJBTSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFBYTF9DTURfUQkJMjMJCS8vIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFBYSF9DTURfUQkJMjQJCS8vIEhpZ2ggUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBSU1FfQ01EX1EJCTI1CQkvLyBSZWNlaXZlIFNlcXVlbmNlciBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFJDVl9CVUZfUQkJMjYJCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlCisKKy8vIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFByb3h5IENvbW1hbmQgcXVldWVzIChQWExfQ01EX1EgYW5kIFBYSF9DTURfUSkKKyNkZWZpbmUgUFhZX0NPUFlfRU4JCTB4MDAyMDAwMDAJCS8vIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlCisjZGVmaW5lIFBYWV9TSVpFXzE2CQkweDAwMDAwMDAwCQkvLyBjb3B5IDE2IGJ5dGVzCisjZGVmaW5lIFBYWV9TSVpFXzMyCQkweDAwMTAwMDAwCQkvLyBjb3B5IDMyIGJ5dGVzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU1hHIEVFUFJPTS9GbGFzaCBDb25maWd1cmF0aW9uIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKworLy8KK3R5cGVkZWYgc3RydWN0IF9IV19DRkdfREFUQSB7CisJdXNob3J0CQlBZGRyOworCXVuaW9uIHsKKwkJdXNob3J0CURhdGE7CisJCXVzaG9ydAlDaGVja3N1bTsKKwl9OworfSBIV19DRkdfREFUQSwgKlBIV19DRkdfREFUQTsKKworLy8KKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCSgoMTI4L3NpemVvZihIV19DRkdfREFUQSkpIC0gNCkKKworLy8gTUFDIGFkZHJlc3MKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ09ORklHX01BQyB7CisJdW5zaWduZWQgY2hhcgkJTWFjQWRkcls2XTsJCQkvLyBNQUMgQWRkcmVzcworfSBTWEdfQ09ORklHX01BQywgKlBTWEdfQ09ORklHX01BQzsKKworLy8KK3R5cGVkZWYgc3RydWN0IF9BVEtfRlJVIHsKKwl1bnNpZ25lZCBjaGFyCQlQYXJ0TnVtWzZdOworCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIJCVNlcmlhbFsxNF07Cit9IEFUS19GUlUsICpQQVRLX0ZSVTsKKworLy8gT0VNIEZSVSBGb3JtYXQgdHlwZXMKKyNkZWZpbmUJQVRLX0ZSVV9GT1JNQVQJCTB4MDAwMAorI2RlZmluZSBDUFFfRlJVX0ZPUk1BVAkJMHgwMDAxCisjZGVmaW5lIERFTExfRlJVX0ZPUk1BVAkJMHgwMDAyCisjZGVmaW5lIEhQX0ZSVV9GT1JNQVQJCTB4MDAwMworI2RlZmluZSBJQk1fRlJVX0ZPUk1BVAkJMHgwMDA0CisjZGVmaW5lIEVNQ19GUlVfRk9STUFUCQkweDAwMDUKKyNkZWZpbmUgTk9fRlJVX0ZPUk1BVAkJMHhGRkZGCisKKy8vIEVFUFJPTS9GbGFzaCBGb3JtYXQKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ09ORklHIHsKKwkvLworCS8vIFNlY3Rpb24gMSAoMTI4IGJ5dGVzKQorCS8vCisJdXNob3J0CQkJTWFnaWNXb3JkOwkJCS8vIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JworCXVzaG9ydAkJCVNwaUNsa3M7CQkJLy8gU1BJIGJ1cyBjbG9jayBkaXZpZGVycworCUhXX0NGR19EQVRBCQlId0NmZ1tOVU1fSFdfQ0ZHX0VOVFJJRVNdOworCS8vCisJLy8KKwkvLworCXVzaG9ydAkJCVZlcnNpb247CQkJLy8gRUVQUk9NIGZvcm1hdCB2ZXJzaW9uCisJU1hHX0NPTkZJR19NQUMJTWFjQWRkcls0XTsJCQkvLyBzcGFjZSBmb3IgNCBNQUMgYWRkcmVzc2VzCisJQVRLX0ZSVQkJCUF0a0ZydTsJCQkJLy8gRlJVIGluZm9ybWF0aW9uCisJdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkJLy8gT0VNIEZSVSBmb3JtYXQgdHlwZQorCXVuc2lnbmVkIGNoYXIJCQlPZW1GcnVbNzZdOwkJCS8vIE9FTSBGUlUgaW5mb3JtYXRpb24gKG9wdGlvbmFsKQorCXVzaG9ydAkJCUNoZWNrc3VtOwkJCS8vIENoZWNrc3VtIG9mIHNlY3Rpb24gMgorCS8vIENTIGluZm8gWFhYVE9ETworfSBTWEdfQ09ORklHLCAqUFNYR19DT05GSUc7CisjcHJhZ21hIHBhY2socG9wKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pc2NlbGxhbmVvdXMgSGFyZHdhcmUgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gU2FoYXJhIChBU0lDIGxldmVsKSBkZWZpbmVzCisjZGVmaW5lIFNBSEFSQV9HUkFNX1NJWkUJCQkweDAyMDAwMAkJLy8gR1JBTSBzaXplIC0gMTI4IEtCCisjZGVmaW5lIFNBSEFSQV9EUkFNX1NJWkUJCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgorI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCQkJMHgwMDQwMDAJCS8vIFFSQU0gc2l6ZSAtIDE2SyBlbnRyaWVzICg2NCBLQikKKyNkZWZpbmUgU0FIQVJBX1dDU19TSVpFCQkJCTB4MDAyMDAwCQkvLyBXQ1MgLSA4SyBpbnN0cnVjdGlvbnMgKHggMTA4IGJpdHMpCisKKy8vIEFyYWJpYSAoYm9hcmQgbGV2ZWwpIGRlZmluZXMKKyNkZWZpbmUJRkxBU0hfU0laRQkJCQkweDA4MDAwMAkJLy8gNTEyIEtCICg0IE1iKQorI2RlZmluZQlFRVBST01fU0laRV9YRk1SCQk1MTIJCQkJLy8gdHJ1ZSBFRVBST00gc2l6ZSAoYnl0ZXMpLCBpbmNsdWRpbmcgeGZtciBhcmVhCisjZGVmaW5lCUVFUFJPTV9TSVpFX05PX1hGTVIJCTI1NgkJCQkvLyBFRVBST00gc2l6ZSBleGNsdWRpbmcgeGZtciBhcmVhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaApAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDA4IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIHN4Z3BoeWNvZGUuaDoKKyAqCisgKiBUaGlzIGZpbGUgUEhZIG1pY3JvY29kZSBhbmQgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gZGF0YS4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEhZIE1pY3JvY29kZQorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29udGFpbnMgYm90aCBQSFkgbWljcm9jb2RlIGFuZCBQSFkgcmVnaXN0ZXIKKyAqIGluaXRpYWxpemF0aW9uIGRhdGEuICBJdCBpcyBzcGVjaWZpYyB0byBib3RoIHRoZSBQSFkgYW5kIHRoZQorICogdHlwZSBvZiB0cmFuc2NlaXZlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERvd25sb2FkIGZvciBBRUwyMDA1QyBQSFkgd2l0aCBTUi9MUiB0cmFuc2NlaXZlciAoMTBHQkFTRS1TUiBvciAxMEdCQVNFLUxSKQorICovCitzdGF0aWMgUEhZX1VDT0RFIFBoeVVjb2RlW10gPSB7CisJLyoKKwkgKiBOT1RFOiAgQW4gYWRkcmVzcyBvZiAwIGlzIGEgc3BlY2lhbCBjYXNlLiAgV2hlbiB0aGUgZG93bmxvYWQgcm91dGluZQorCSAqIHNlZXMgYW4gYWRkcmVzcyBvZiAwLCBpdCBkb2VzIG5vdCB3cml0ZSB0byB0aGUgUEhZLiAgSW5zdGVhZCwgaXQKKwkgKiBkZWxheXMgdGhlIGRvd25sb2FkLiAgVGhlIGxlbmd0aCBvZiB0aGUgZGVsYXkgKGluIG1zKSBpcyBnaXZlbiBpbgorCSAqIHRoZSBkYXRhIGZpZWxkLgorCSAqCisJICogRGVsYXlzIGFyZSByZXF1aXJlZCBhdCBjZXJ0YWluIHBvaW50cy4KKwkgKi8KKworCS8qCisJICogUGxhdGZvcm0tc3BlY2lmaWMgTURJTyBQYXRjaGVzOgorCSAqIChpbmNsdWRlIHBhdGNoZXMgZm9yIDEwRyBSWCBwb2xhcml0eSBmbGlwLCA1ME1oeiBTeW50aCwgZXRjKQorCSAqLworCS8qIEFkZHIsIERhdGEgKi8KKwl7MHhjMDE3LCAweGZlYjB9LAkvKiBmbGlwIFJYX0xPUyBwb2xhcml0eSAobWFuZGF0b3J5ICovCisJCQkJLyogIHBhdGNoIGZvciBTRlArIGFwcGxpY2F0aW9ucykgKi8KKwl7MHhDMDAxLCAweDA0Mjh9LAkvKiBmbGlwIFJYIHNlcmlhbCBwb2xhcml0eSAqLworCisJezB4YzAxMywgMHhmMzQxfSwJLyogaW52ZXJ0IGx4bWl0IGNsb2NrIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHg4MDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHhjMjEwLCAweDgxMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4ODAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHgwMDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHgwMDAwLCAweDAwMzJ9LAkvKiB3YWl0IGZvciA1MG1zIGZvciBkYXRhcGF0aCByZXNldCB0byAqLworCQkJCS8qIGNvbXBsZXRlLiAobWFuZGF0b3J5IHBhdGNoKSAqLworCisJLyogQ29uZmlndXJlIHRoZSBMRUQncyAqLworCXsweGMyMTQsIDB4MDA5OX0sCS8qIGNvbmZpZ3VyZSB0aGUgTEVEIGRyaXZlcnMgKi8KKwl7MHhjMjE2LCAweDVmNWZ9LAkvKiBjb25maWd1cmUgdGhlIEFjdGl2aXR5IExFRCAqLworCXsweGMyMTcsIDB4MzNmZn0sCS8qIGNvbmZpZ3VyZSB0aGUgTGluayBMRUQgKi8KKworCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1ESU8gUGF0Y2hlczogKi8KKwl7MHhjMDEwLCAweDQ0OGF9LAkvKiAoYml0IDE0KSBtYXNrIG91dCBoaWdoIEJFUiBpbnB1dCBmcm9tIHRoZSAqLworCQkJCS8qIExPUyBzaWduYWwgaW4gMS4wMDBBICovCisJCQkJLyogKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkqLworCXsweGMwMDMsIDB4MDE4MX0sCS8qIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gKi8KKwkJCQkvKiAxLkMwMDUgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkgKi8KKworCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjogKi8KKwl7MHhjMDRhLCAweDUyMDB9LAkvKiBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlICovCisJezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlICovCisJCQkJLyogd3JpdGluZyBpbiBjb2RlLiAqLworCisJLyogY29kZSBibG9jayBzdGFydHMgaGVyZTogKi8KKwl7MHhjYzAwLCAweDIwMDl9LAorCXsweGNjMDEsIDB4MzAwOX0sCisJezB4Y2MwMiwgMHgyN2ZmfSwKKwl7MHhjYzAzLCAweDMwMGZ9LAorCXsweGNjMDQsIDB4MjAwY30sCisJezB4Y2MwNSwgMHgzMDBjfSwKKwl7MHhjYzA2LCAweDIwYzR9LAorCXsweGNjMDcsIDB4M2MwNH0sCisJezB4Y2MwOCwgMHg2NDM3fSwKKwl7MHhjYzA5LCAweDIwYzR9LAorCXsweGNjMGEsIDB4M2MwNH0sCisJezB4Y2MwYiwgMHg2NDM3fSwKKwl7MHhjYzBjLCAweDI1YzR9LAorCXsweGNjMGQsIDB4M2M1NH0sCisJezB4Y2MwZSwgMHg2NzI0fSwKKwl7MHhjYzBmLCAweDI1YzR9LAorCXsweGNjMTAsIDB4M2M1NH0sCisJezB4Y2MxMSwgMHg2NzI0fSwKKwl7MHhjYzEyLCAweDIwNDJ9LAorCXsweGNjMTMsIDB4MzAxMn0sCisJezB4Y2MxNCwgMHgxMDAyfSwKKwl7MHhjYzE1LCAweDI0ODJ9LAorCXsweGNjMTYsIDB4MzAxMn0sCisJezB4Y2MxNywgMHgxMDAyfSwKKwl7MHhjYzE4LCAweDJhMzJ9LAorCXsweGNjMTksIDB4MzAwMn0sCisJezB4Y2MxYSwgMHgxMDAyfSwKKwl7MHhjYzFiLCAweDIwMGR9LAorCXsweGNjMWMsIDB4MzA0ZH0sCisJezB4Y2MxZCwgMHgyODYyfSwKKwl7MHhjYzFlLCAweDMwMTJ9LAorCXsweGNjMWYsIDB4MTAwMn0sCisJezB4Y2MyMCwgMHgyOTgyfSwKKwl7MHhjYzIxLCAweDMwMDJ9LAorCXsweGNjMjIsIDB4MTAwMn0sCisJezB4Y2MyMywgMHg2MjhmfSwKKwl7MHhjYzI0LCAweDIwYTR9LAorCXsweGNjMjUsIDB4MzAwNH0sCisJezB4Y2MyNiwgMHg2NDM4fSwKKwl7MHhjYzI3LCAweDIwYTR9LAorCXsweGNjMjgsIDB4MzAwNH0sCisJezB4Y2MyOSwgMHg2NDM4fSwKKwl7MHhjYzJhLCAweDIwMTV9LAorCXsweGNjMmIsIDB4MzAwNX0sCisJezB4Y2MyYywgMHg1ODUzfSwKKwl7MHhjYzJkLCAweDJiZDJ9LAorCXsweGNjMmUsIDB4MzAwMn0sCisJezB4Y2MyZiwgMHgxMzQyfSwKKwl7MHhjYzMwLCAweDIwMGN9LAorCXsweGNjMzEsIDB4MzAwY30sCisJezB4Y2MzMiwgMHgyZmY3fSwKKwl7MHhjYzMzLCAweDMwZjd9LAorCXsweGNjMzQsIDB4MjBjNH0sCisJezB4Y2MzNSwgMHgzYzA0fSwKKwl7MHhjYzM2LCAweDY3MjR9LAorCXsweGNjMzcsIDB4MjBjNH0sCisJezB4Y2MzOCwgMHgzYzA0fSwKKwl7MHhjYzM5LCAweDY3MjR9LAorCXsweGNjM2EsIDB4MmQzMn0sCisJezB4Y2MzYiwgMHgzMDAyfSwKKwl7MHhjYzNjLCAweDEwMDJ9LAorCXsweGNjM2QsIDB4MjAwOH0sCisJezB4Y2MzZSwgMHgzMDA4fSwKKwl7MHhjYzNmLCAweDVjODN9LAorCXsweGNjNDAsIDB4MmQ1Mn0sCisJezB4Y2M0MSwgMHgzMDAyfSwKKwl7MHhjYzQyLCAweDEzNTJ9LAorCXsweGNjNDMsIDB4MjAwOH0sCisJezB4Y2M0NCwgMHgzMDA4fSwKKwl7MHhjYzQ1LCAweDVjODN9LAorCXsweGNjNDYsIDB4MmQzMn0sCisJezB4Y2M0NywgMHgzMDAyfSwKKwl7MHhjYzQ4LCAweDEzNTJ9LAorCXsweGNjNDksIDB4MjAxY30sCisJezB4Y2M0YSwgMHgzMDBjfSwKKwl7MHhjYzRiLCAweDIwMGR9LAorCXsweGNjNGMsIDB4MzEwZH0sCisJezB4Y2M0ZCwgMHgyODYyfSwKKwl7MHhjYzRlLCAweDMwMTJ9LAorCXsweGNjNGYsIDB4MTAwMn0sCisJezB4Y2M1MCwgMHgyZWQyfSwKKwl7MHhjYzUxLCAweDMwMDJ9LAorCXsweGNjNTIsIDB4MTM0Mn0sCisJezB4Y2M1MywgMHg2ZjcyfSwKKwl7MHhjYzU0LCAweDEwMDJ9LAorCXsweGNjNTUsIDB4NjI4Zn0sCisJezB4Y2M1NiwgMHgyNTE0fSwKKwl7MHhjYzU3LCAweDNjNjR9LAorCXsweGNjNTgsIDB4NjQzNn0sCisJezB4Y2M1OSwgMHgyNTE0fSwKKwl7MHhjYzVhLCAweDNjNjR9LAorCXsweGNjNWIsIDB4NjQzNn0sCisJezB4Y2M1YywgMHgyZmE0fSwKKwl7MHhjYzVkLCAweDNjZDR9LAorCXsweGNjNWUsIDB4NjYyNH0sCisJezB4Y2M1ZiwgMHgyZmE0fSwKKwl7MHhjYzYwLCAweDNjZDR9LAorCXsweGNjNjEsIDB4NjYyNH0sCisJezB4Y2M2MiwgMHgyZjQ1fSwKKwl7MHhjYzYzLCAweDMwMTV9LAorCXsweGNjNjQsIDB4NTY1M30sCisJezB4Y2M2NSwgMHgyZWIyfSwKKwl7MHhjYzY2LCAweDMwMDJ9LAorCXsweGNjNjcsIDB4MTNkMn0sCisJezB4Y2M2OCwgMHgyZWQyfSwKKwl7MHhjYzY5LCAweDMwMDJ9LAorCXsweGNjNmEsIDB4MTAwMn0sCisJezB4Y2M2YiwgMHg2ZjcyfSwKKwl7MHhjYzZjLCAweDEwMDJ9LAorCXsweGNjNmQsIDB4NjI4Zn0sCisJezB4Y2M2ZSwgMHgyNjAyfSwKKwl7MHhjYzZmLCAweDMwMTJ9LAorCXsweGNjNzAsIDB4MTAwMn0sCisJezB4Y2M3MSwgMHgyMDBkfSwKKwl7MHhjYzcyLCAweDMyMGR9LAorCXsweGNjNzMsIDB4Mjg2Mn0sCisJezB4Y2M3NCwgMHgzMDEyfSwKKwl7MHhjYzc1LCAweDEwMDJ9LAorCXsweGNjNzYsIDB4MjVjNH0sCisJezB4Y2M3NywgMHgzYzU0fSwKKwl7MHhjYzc4LCAweDY0Mzd9LAorCXsweGNjNzksIDB4MjVjNH0sCisJezB4Y2M3YSwgMHgzYzU0fSwKKwl7MHhjYzdiLCAweDY0Mzd9LAorCXsweGNjN2MsIDB4MjBjNH0sCisJezB4Y2M3ZCwgMHgzYzA0fSwKKwl7MHhjYzdlLCAweDY3MjR9LAorCXsweGNjN2YsIDB4MjBjNH0sCisJezB4Y2M4MCwgMHgzYzA0fSwKKwl7MHhjYzgxLCAweDY3MjR9LAorCXsweGNjODIsIDB4NmY3Mn0sCisJezB4Y2M4MywgMHgxMDAyfSwKKwl7MHhjYzg0LCAweDYyOGZ9LAorCXsweGNjODUsIDB4MjZmMn0sCisJezB4Y2M4NiwgMHgzMDEyfSwKKwl7MHhjYzg3LCAweDEwMDJ9LAorCXsweGNjODgsIDB4YzUwM30sCisJezB4Y2M4OSwgMHhkNWQ1fSwKKwl7MHhjYzhhLCAweGM2MDB9LAorCXsweGNjOGIsIDB4MmE2ZH0sCisJezB4Y2M4YywgMHhjNjAxfSwKKwl7MHhjYzhkLCAweDJhNGN9LAorCXsweGNjOGUsIDB4YzYwMn0sCisJezB4Y2M4ZiwgMHgwMTExfSwKKwl7MHhjYzkwLCAweGM2MGN9LAorCXsweGNjOTEsIDB4NTkwMH0sCisJezB4Y2M5MiwgMHhjNzEwfSwKKwl7MHhjYzkzLCAweDA3MDB9LAorCXsweGNjOTQsIDB4YzcxOH0sCisJezB4Y2M5NSwgMHgwNzAwfSwKKwl7MHhjYzk2LCAweGM3MjB9LAorCXsweGNjOTcsIDB4NDcwMH0sCisJezB4Y2M5OCwgMHhjODAxfSwKKwl7MHhjYzk5LCAweDdmNTB9LAorCXsweGNjOWEsIDB4YzgwMn0sCisJezB4Y2M5YiwgMHg3NzYwfSwKKwl7MHhjYzljLCAweGM4MDN9LAorCXsweGNjOWQsIDB4N2ZjZX0sCisJezB4Y2M5ZSwgMHhjODA0fSwKKwl7MHhjYzlmLCAweDU3MDB9LAorCXsweGNjYTAsIDB4YzgwNX0sCisJezB4Y2NhMSwgMHg1ZjExfSwKKwl7MHhjY2EyLCAweGM4MDZ9LAorCXsweGNjYTMsIDB4NDc1MX0sCisJezB4Y2NhNCwgMHhjODA3fSwKKwl7MHhjY2E1LCAweDU3ZTF9LAorCXsweGNjYTYsIDB4YzgwOH0sCisJezB4Y2NhNywgMHgyNzAwfSwKKwl7MHhjY2E4LCAweGM4MDl9LAorCXsweGNjYTksIDB4MDAwMH0sCisJezB4Y2NhYSwgMHhjODIxfSwKKwl7MHhjY2FiLCAweDAwMDJ9LAorCXsweGNjYWMsIDB4YzgyMn0sCisJezB4Y2NhZCwgMHgwMDE0fSwKKwl7MHhjY2FlLCAweGM4MzJ9LAorCXsweGNjYWYsIDB4MTE4Nn0sCisJezB4Y2NiMCwgMHhjODQ3fSwKKwl7MHhjY2IxLCAweDFlMDJ9LAorCXsweGNjYjIsIDB4YzAxM30sCisJezB4Y2NiMywgMHhmMzQxfSwKKwl7MHhjY2I0LCAweGMwMWF9LAorCXsweGNjYjUsIDB4MDQ0Nn0sCisJezB4Y2NiNiwgMHhjMDI0fSwKKwl7MHhjY2I3LCAweDEwMDB9LAorCXsweGNjYjgsIDB4YzAyNX0sCisJezB4Y2NiOSwgMHgwYTAwfSwKKwl7MHhjY2JhLCAweGMwMjZ9LAorCXsweGNjYmIsIDB4MGMwY30sCisJezB4Y2NiYywgMHhjMDI3fSwKKwl7MHhjY2JkLCAweDBjMGN9LAorCXsweGNjYmUsIDB4YzAyOX0sCisJezB4Y2NiZiwgMHgwMGEwfSwKKwl7MHhjY2MwLCAweGMwMzB9LAorCXsweGNjYzEsIDB4MGEwMH0sCisJezB4Y2NjMiwgMHhjMDNjfSwKKwl7MHhjY2MzLCAweDAwMWN9LAorCXsweGNjYzQsIDB4YzAwNX0sCisJezB4Y2NjNSwgMHg3YTA2fSwKKwl7MHhjY2M2LCAweDAwMDB9LAorCXsweGNjYzcsIDB4MDAwMH0sCisJezB4Y2NjOCwgMHg2MjhmfSwKKwl7MHhjY2M5LCAweDI2ZjJ9LAorCXsweGNjY2EsIDB4MzAxMn0sCisJezB4Y2NjYiwgMHgxMDAyfSwKKwl7MHhjY2NjLCAweGM2MjB9LAorCXsweGNjY2QsIDB4MDAwMH0sCisJezB4Y2NjZSwgMHhjNjIxfSwKKwl7MHhjY2NmLCAweDAwM2Z9LAorCXsweGNjZDAsIDB4YzYyMn0sCisJezB4Y2NkMSwgMHgwMDAwfSwKKwl7MHhjY2QyLCAweGM2MjN9LAorCXsweGNjZDMsIDB4MDAwMH0sCisJezB4Y2NkNCwgMHhjNjI0fSwKKwl7MHhjY2Q1LCAweDAwMDB9LAorCXsweGNjZDYsIDB4YzYyNX0sCisJezB4Y2NkNywgMHgwMDAwfSwKKwl7MHhjY2Q4LCAweGM2Mjd9LAorCXsweGNjZDksIDB4MDAwMH0sCisJezB4Y2NkYSwgMHhjNjI4fSwKKwl7MHhjY2RiLCAweDAwMDB9LAorCXsweGNjZGMsIDB4YzYyY30sCisJezB4Y2NkZCwgMHgwMDAwfSwKKwl7MHhjY2RlLCAweDAwMDB9LAorCXsweGNjZGYsIDB4MDAwMH0sCisJezB4Y2NlMCwgMHg2MjhmfSwKKwl7MHhjY2UxLCAweGQwMTl9LAorCXsweGNjZTIsIDB4MjZmMn0sCisJezB4Y2NlMywgMHgzMDEyfSwKKwl7MHhjY2U0LCAweDEwMDJ9LAorCXsweGNjZTUsIDB4YzIxMH0sCisJezB4Y2NlNiwgMHg4MDAwfSwKKwl7MHhjY2U3LCAweGMyMTB9LAorCXsweGNjZTgsIDB4ODAxMH0sCisJezB4Y2NlOSwgMHhjMjEwfSwKKwl7MHhjY2VhLCAweDgwMDB9LAorCXsweGNjZWIsIDB4YzIxMH0sCisJezB4Y2NlYywgMHgwMDAwfSwKKwl7MHhjY2VkLCAweDAwMDB9LAorCXsweGNjZWUsIDB4MDAwMH0sCisJezB4Y2NlZiwgMHg4MjIxfSwKKwl7MHhjY2YwLCAweDI3NTJ9LAorCXsweGNjZjEsIDB4MzAxMn0sCisJezB4Y2NmMiwgMHgxMDAyfSwKKwl7MHhjY2YzLCAweDZmNzJ9LAorCXsweGNjZjQsIDB4MTAwMn0sCisJezB4Y2NmNSwgMHgyODA2fSwKKwl7MHhjY2Y2LCAweDMwMDZ9LAorCXsweGNjZjcsIDB4MjAwN30sCisJezB4Y2NmOCwgMHgzY2M3fSwKKwl7MHhjY2Y5LCAweGUxNjF9LAorCXsweGNjZmEsIDB4YzE3MX0sCisJezB4Y2NmYiwgMHg2MTM0fSwKKwl7MHhjY2ZjLCAweDYxMzV9LAorCXsweGNjZmQsIDB4NTQ1M30sCisJezB4Y2NmZSwgMHgyODU4fSwKKwl7MHhjY2ZmLCAweDMwMTh9LAorCXsweGNkMDAsIDB4MTM0OH0sCisJezB4Y2QwMSwgMHg2NTI0fSwKKwl7MHhjZDAyLCAweDI3Yjh9LAorCXsweGNkMDMsIDB4MzAxOH0sCisJezB4Y2QwNCwgMHgxMDA4fSwKKwl7MHhjZDA1LCAweDEwMDJ9LAorCXsweGNkMDYsIDB4NjI4Zn0sCisJezB4Y2QwNywgMHg1ZGQzfSwKKwl7MHhjZDA4LCAweDI5MDZ9LAorCXsweGNkMDksIDB4MzAxNn0sCisJezB4Y2QwYSwgMHgxMzA2fSwKKwl7MHhjZDBiLCAweDJmZjd9LAorCXsweGNkMGMsIDB4MzBmN30sCisJezB4Y2QwZCwgMHg2MGI3fSwKKwl7MHhjZDBlLCAweGRmZmR9LAorCXsweGNkMGYsIDB4MDAwOH0sCisJezB4Y2QxMCwgMHg2ZjcyfSwKKwl7MHhjZDExLCAweDEwMDJ9LAorCXsweGNkMTIsIDB4MDAwMH0sCisJezB4Y2RmZiwgMHgwYTAxfSwKKwkvKiBlbmQgb2YgY29kZSBibG9jayAqLworCisJLyogVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0gKi8KKwl7MHhjYTAwLCAweDAwODB9LAorCXsweGNhMTIsIDB4MDAwMH0sCisJezB4MDAwMCwgMHgwMDBBfSwJLyogd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZSAqLworCXsweGZmZmYsIDB4ZmZmZn0JLyogdGFibGUgdGVybWluYXRvciAqLworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyNjIzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCkBAIC0wLDAgKzEsMzYgQEAKK2NvbmZpZyBVU0JfSVBfQ09NTU9OCisJdHJpc3RhdGUgIlVTQiBJUCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyBwdXNoaW5nIFVTQiBwYWNrZXRzIG92ZXIgSVAgdG8gYWxsb3cgcmVtb3RlCisJICBtYWNoaW5lcyBhY2Nlc3MgdG8gVVNCIGRldmljZXMgZGlyZWN0bHkuICBGb3IgbW9yZSBkZXRhaWxzLAorCSAgYW5kIGxpbmtzIHRvIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eSBwcm9ncmFtcyB0byBsZXQgdGhpcyB3b3JrCisJICBwcm9wZXJseSwgc2VlIGh0dHA6Ly91c2JpcC5uYWlzdC5qcC8KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiaXBfY29tbW9uX21vZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFVTQl9JUF9WSENJX0hDRAorCXRyaXN0YXRlICJVU0IgSVAgY2xpZW50IGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJIFRoaXMgZW5hYmxlcyB0aGUgVVNCIElQIGhvc3QgY29udHJvbGxlciBkcml2ZXIgd2hpY2ggd2lsbAorCSBydW4gb24gdGhlIGNsaWVudCBtYWNoaW5lLgorCisJIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmhjaV9oY2QuCisKK2NvbmZpZyBVU0JfSVBfSE9TVAorCXRyaXN0YXRlICJVU0IgSVAgaG9zdCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfSVBfQ09NTU9OCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSBUaGlzIGVuYWJsZXMgdGhlIFVTQiBJUCBkZXZpY2UgZHJpdmVyIHdoaWNoIHdpbGwgcnVuIG9uIHRoZQorCSBob3N0IG1hY2hpbmUuCisKKwkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzlmNDIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKK29iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKSArPSB1c2JpcF9jb21tb25fbW9kLm8KK3VzYmlwX2NvbW1vbl9tb2Qtb2JqcyA6PSB1c2JpcF9jb21tb24ubyB1c2JpcF9ldmVudC5vCisKK29iai0kKENPTkZJR19VU0JfSVBfVkhDSV9IQ0QpICs9IHZoY2ktaGNkLm8KK3ZoY2ktaGNkLW9ianMgOj0gdmhjaV9zeXNmcy5vIHZoY2lfdHgubyB2aGNpX3J4Lm8gdmhjaV9oY2QubworCitvYmotJChDT05GSUdfVVNCX0lQX0hPU1QpICs9IHVzYmlwLm8KK3VzYmlwLW9ianMgOj0gc3R1Yl9kZXYubyBzdHViX21haW4ubyBzdHViX3J4Lm8gc3R1Yl90eC5vCisKK2lmZXEgKCQoQ09ORklHX1VTQl9ERUJVRykseSkKKwlFWFRSQV9DRkxBR1MgKz0gLURERUJVRworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWJlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvUkVBRE1FCkBAIC0wLDAgKzEsNiBAQAorVE9ETzoKKwktIG1vcmUgZGlzY3Vzc2lvbiBhYm91dCB0aGUgcHJvdG9jb2wKKwktIHRlc3RpbmcKKwktIHJldmlldyBvZiB0aGUgdXNlcnNwYWNlIGludGVyZmFjZQorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIGZvciB0aGlzIGNvZGUgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDFhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisKK3N0cnVjdCBzdHViX2RldmljZSB7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlIHVkOworCV9fdTMyIGRldmlkOworCisJLyoKKwkgKiBzdHViX3ByaXYgcHJlc2VydmVzIHByaXZhdGUgZGF0YSBvZiBlYWNoIHVyYi4KKwkgKiBJdCBpcyBhbGxvY2F0ZWQgYXMgc3R1Yl9wcml2X2NhY2hlIGFuZCBhc3NpZ25lZCB0byB1cmItPmNvbnRleHQuCisJICoKKwkgKiBzdHViX3ByaXYgaXMgYWx3YXlzIGxpbmtlZCB0byBhbnkgb25lIG9mIDMgbGlzdHM7CisJICoJcHJpdl9pbml0OiBsaW5rZWQgdG8gdGhpcyB1bnRpbCB0aGUgY29tbGV0aW9uIG9mIGEgdXJiLgorCSAqCXByaXZfdHggIDogbGlua2VkIHRvIHRoaXMgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSB1cmIuCisJICoJcHJpdl9mcmVlOiBsaW5rZWQgdG8gdGhpcyBhZnRlciB0aGUgc2VuZGluZyBvZiB0aGUgcmVzdWx0LgorCSAqCisJICogQW55IG9mIHRoZXNlIGxpc3Qgb3BlcmF0aW9ucyBzaG91bGQgYmUgbG9ja2VkIGJ5IHByaXZfbG9jay4KKwkgKi8KKwlzcGlubG9ja190IHByaXZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfaW5pdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfdHg7CisJc3RydWN0IGxpc3RfaGVhZCBwcml2X2ZyZWU7CisKKwkvKiBzZWUgY29tbWVudHMgZm9yIHVubGlua2luZyBpbiBzdHViX3J4LmMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua19mcmVlOworCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0eF93YWl0cTsKK307CisKKy8qIHByaXZhdGUgZGF0YSBpbnRvIHVyYi0+cHJpdiAqLworc3RydWN0IHN0dWJfcHJpdiB7CisJdW5zaWduZWQgbG9uZyBzZXFudW07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpbnQgdW5saW5raW5nOworfTsKKworc3RydWN0IHN0dWJfdW5saW5rIHsKKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJX191MzIgc3RhdHVzOworfTsKKworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnN0dWJfcHJpdl9jYWNoZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHJvdG90eXBlIGRlY2xhcmF0aW9ucyAqLworCisvKiBzdHViX3R4LmMgKi8KK3ZvaWQgc3R1Yl9jb21wbGV0ZShzdHJ1Y3QgdXJiICopOwordm9pZCBzdHViX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKik7CisKKy8qIHN0dWJfZGV2LmMgKi8KK2V4dGVybiBzdHJ1Y3QgdXNiX2RyaXZlciBzdHViX2RyaXZlcjsKKworLyogc3R1Yl9yeC5jICovCit2b2lkIHN0dWJfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqKTsKK3ZvaWQgc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICosIF9fdTMyLCBfX3UzMik7CisKKy8qIHN0dWJfbWFpbi5jICovCitpbnQgbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpOwordm9pZCBzdHViX2RldmljZV9jbGVhbnVwX3VyYnMoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorCisKKworc3RhdGljIGludCBzdHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKKworCisvKgorICogRGVmaW5lIGRldmljZSBJRHMgaGVyZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGxpbWl0IGV4cG9ydGFibGUgZGV2aWNlcy4KKyAqIEluIHRoZSBtb3N0IGNhc2VzLCB3aWxkIGNhcmQgbWF0Y2hpbmcgd2lsbCBiZSBvayBiZWNhdXNlIGRyaXZlciBiaW5kaW5nIGNhbgorICogYmUgY2hhbmdlZCBkeW5hbWljYWxseSBieSBhIHVzZXJsYW5kIHByb2dyYW0uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdHViX3RhYmxlW10gPSB7CisjaWYgMAorCS8qIGp1c3QgYW4gZXhhbXBsZSAqLworCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4MDMwMSkgfSwgICAvKiBNYWMgMSBidXR0b24gbW91c2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDMwLCAweDAwMDkpIH0sICAgLyogUGxhdCBIb21lIEtleWJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MDU5YiwgMHgwMDAxKSB9LCAgIC8qIElvbWVnYSBVU0IgWmlwIDEwMCAqLworCXsgVVNCX0RFVklDRSgweDA0YjMsIDB4NDQyNykgfSwgICAvKiBJQk0gVVNCIENELVJPTSAqLworCXsgVVNCX0RFVklDRSgweDA1YTksIDB4YTUxMSkgfSwgICAvKiBMaWZlVmlldyBVU0IgY2FtICovCisJeyBVU0JfREVWSUNFKDB4NTVhYSwgMHgwMjAxKSB9LCAgIC8qIEltYXRpb24gY2FyZCByZWFkZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZkLCAweDA4NzApIH0sICAgLyogUWNhbSBFeHByZXNzKFFWLTMwKSAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDEwMSkgfSwgICAvKiBJTy1EQVRBIEhEIDEyMEdCICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTA0KSB9LCAgIC8qIElPLURBVEEgVVNCLUVUL1RYICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwMjAxKSB9LCAgIC8qIElPLURBVEEgVVNCLUVUL1RYICovCisJeyBVU0JfREVWSUNFKDB4MDhiYiwgMHgyNzAyKSB9LCAgIC8qIE9OS1lPIFVTQiBTcGVha2VyICovCisJeyBVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGIyKSB9LCAgIC8qIExvZ2ljb29sIFFjYW0gNDAwMCBQcm8gKi8KKyNlbmRpZgorCS8qIG1hZ2ljIGZvciB3aWxkIGNhcmQgKi8KKwl7IC5kcml2ZXJfaW5mbyA9IDEgfSwKKwl7IDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3R1Yl90YWJsZSk7CisKK3N0cnVjdCB1c2JfZHJpdmVyIHN0dWJfZHJpdmVyID0geworCS5uYW1lCQk9ICJ1c2JpcCIsCisJLnByb2JlCQk9IHN0dWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBzdHViX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gc3R1Yl90YWJsZSwKK307CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGVmaW5lIHN5c2ZzIGVudHJpZXMgZm9yIGEgdXNiaXAtYm91bmQgZGV2aWNlICovCisKKworLyoKKyAqIHVzYmlwX3N0YXR1cyBzaG93cyBzdGF0dXMgb2YgdXNiaXAgYXMgbG9uZyBhcyB0aGlzIGRyaXZlciBpcyBib3VuZCB0byB0aGUKKyAqIHRhcmdldCBkZXZpY2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHN0YXR1czsKKworCWlmICghc2RldikgeworCQlkZXZfZXJyKGRldiwgInNkZXYgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisJc3RhdHVzID0gc2Rldi0+dWQuc3RhdHVzOworCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBzdGF0dXMpOworfQorc3RhdGljIERFVklDRV9BVFRSKHVzYmlwX3N0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOworCisvKgorICogdXNiaXBfc29ja2ZkIGdldHMgYSBzb2NrZXQgZGVzY3JpcHRvciBvZiBhbiBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbiB0aGF0CisgKiBpcyB1c2VkIHRvIHRyYW5zZmVyIHVzYmlwIHJlcXVlc3RzIGJ5IGtlcm5lbCB0aHJlYWRzLiAtMSBpcyBhIG1hZ2ljIG51bWJlcgorICogYnkgd2hpY2ggdXNiaXAgY29ubmVjdGlvbiBpcyBmaW5pc2hlZC4KKyAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfc29ja2ZkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNvY2tmZCA9IDA7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoZGV2LCAic2RldiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNvY2tmZCk7CisKKwlpZiAoc29ja2ZkICE9IC0xKSB7CisJCWRldl9pbmZvKGRldiwgInN0dWIgdXBcbiIpOworCisJCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisKKwkJaWYgKHNkZXYtPnVkLnN0YXR1cyAhPSBTREVWX1NUX0FWQUlMQUJMRSkgeworCQkJZGV2X2VycihkZXYsICJub3QgcmVhZHlcbiIpOworCQkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzb2NrZXQgPSBzb2NrZmRfdG9fc29ja2V0KHNvY2tmZCk7CisJCWlmICghc29ja2V0KSB7CisJCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisjaWYgMAorCQlzZXRub2RlbGF5KHNvY2tldCk7CisJCXNldGtlZXBhbGl2ZShzb2NrZXQpOworCQlzZXRyZXVzZShzb2NrZXQpOworI2VuZGlmCisKKwkJc2Rldi0+dWQudGNwX3NvY2tldCA9IHNvY2tldDsKKworCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisKKwkJdXNiaXBfc3RhcnRfdGhyZWFkcygmc2Rldi0+dWQpOworCisJCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisJCXNkZXYtPnVkLnN0YXR1cyA9IFNERVZfU1RfVVNFRDsKKwkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJfSBlbHNlIHsKKwkJZGV2X2luZm8oZGV2LCAic3R1YiBkb3duXG4iKTsKKworCQlzcGluX2xvY2soJnNkZXYtPnVkLmxvY2spOworCQlpZiAoc2Rldi0+dWQuc3RhdHVzICE9IFNERVZfU1RfVVNFRCkgeworCQkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRE9XTik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKHVzYmlwX3NvY2tmZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfc29ja2ZkKTsKKworc3RhdGljIGludCBzdHViX2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zdGF0dXM7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zb2NrZmQ7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfZGVidWcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RlYnVnOworCisJcmV0dXJuIDA7CisKK2Vycl9kZWJ1ZzoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKKworZXJyX3NvY2tmZDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKKworZXJyX3N0YXR1czoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdHViX3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3N0YXR1cyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3NvY2tmZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX2RlYnVnKTsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGNhbGxlZCBieSBhbiBldmVudCBoYW5kbGVyIHRocmVhZCAqLworCitzdGF0aWMgdm9pZCBzdHViX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKworCS8qCisJICogV2hlbiByZW1vdmluZyBhbiBleHBvcnRlZCBkZXZpY2UsIGtlcm5lbCBwYW5pYyBzb21ldGltZXMgb2NjdXJyZWQKKwkgKiBhbmQgdGhlbiBFSVAgd2FzIHNrX3dhaXRfZGF0YSBvZiBzdHViX3J4IHRocmVhZC4gSXMgdGhpcyBiZWNhdXNlCisJICogc2tfd2FpdF9kYXRhIHJldHVybmVkIHRob3VnaCBzdHViX3J4IHRocmVhZCB3YXMgYWxyZWFkeSBmaW5pc2hlZCBieQorCSAqIHN0ZXAgMT8KKwkgKi8KKwlpZiAodWQtPnRjcF9zb2NrZXQpIHsKKwkJdWRiZygic2h1dGRvd24gdGNwX3NvY2tldCAlcFxuIiwgdWQtPnRjcF9zb2NrZXQpOworCQlrZXJuZWxfc29ja19zaHV0ZG93bih1ZC0+dGNwX3NvY2tldCwgU0hVVF9SRFdSKTsKKwl9CisKKwkvKiAxLiBzdG9wIHRocmVhZHMgKi8KKwl1c2JpcF9zdG9wX3RocmVhZHModWQpOworCisJLyogMi4gY2xvc2UgdGhlIHNvY2tldCAqLworCS8qCisJICogdGNwX3NvY2tldCBpcyBmcmVlZCBhZnRlciB0aHJlYWRzIGFyZSBraWxsZWQuCisJICogU28gdXNiaXBfeG1pdCBkbyBub3QgdG91Y2ggTlVMTCBzb2NrZXQuCisJICovCisJaWYgKHVkLT50Y3Bfc29ja2V0KSB7CisJCXNvY2tfcmVsZWFzZSh1ZC0+dGNwX3NvY2tldCk7CisJCXVkLT50Y3Bfc29ja2V0ID0gTlVMTDsKKwl9CisKKwkvKiAzLiBmcmVlIHVzZWQgZGF0YSAqLworCXN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzZGV2KTsKKworCS8qIDQuIGZyZWUgc3R1Yl91bmxpbmsgKi8KKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rLCAqdG1wOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZzZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwKKwkJCQkJCSAmc2Rldi0+dW5saW5rX2ZyZWUsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlpbnQgcmV0OworCisJdWRiZygiZGV2aWNlIHJlc2V0Iik7CisJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1ZGV2LCBzZGV2LT5pbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKKworCQlzcGluX2xvY2soJnVkLT5sb2NrKTsKKwkJdWQtPnN0YXR1cyA9IFNERVZfU1RfRVJST1I7CisJCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisKKwkJcmV0dXJuOworCX0KKworCS8qIHRyeSB0byByZXNldCB0aGUgZGV2aWNlICovCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9FUlJPUjsKKworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9BVkFJTEFCTEU7CisKKwl9CisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfdW51c2FibGUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJdWQtPnN0YXR1cyA9IFNERVZfU1RfRVJST1I7CisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHN0dWJfZGV2aWNlX2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0CisgKiBAaW50ZXJmYWNlOiB1c2JfaW50ZXJmYWNlIG9mIGEgbmV3IGRldmljZQorICoKKyAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0LgorICovCitzdGF0aWMgc3RydWN0IHN0dWJfZGV2aWNlICpzdHViX2RldmljZV9hbGxvYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwlpbnQgYnVzbnVtID0gaW50ZXJmYWNlX3RvX2J1c251bShpbnRlcmZhY2UpOworCWludCBkZXZudW0gPSBpbnRlcmZhY2VfdG9fZGV2bnVtKGludGVyZmFjZSk7CisKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgImFsbG9jYXRpbmcgc3R1YiBkZXZpY2UiKTsKKworCS8qIHllcywgaXQncyBhIG5ldyBkZXZpY2UgKi8KKwlzZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0dWJfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibm8gbWVtb3J5IGZvciBzdHViX2RldmljZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKworCS8qCisJICogZGV2aWQgaXMgZGVmaW5lZCB3aXRoIGRldm51bSB3aGVuIHRoaXMgZHJpdmVyIGlzIGZpcnN0IGFsbG9jYXRlZC4KKwkgKiBkZXZudW0gbWF5IGNoYW5nZSBsYXRlciBpZiBhIGRldmljZSBpcyByZXNldC4gSG93ZXZlciwgZGV2aWQgbmV2ZXIKKwkgKiBjaGFuZ2VzIGR1cmluZyBhIHVzYmlwIGNvbm5lY3Rpb24uCisJICovCisJc2Rldi0+ZGV2aWQgICAgID0gKGJ1c251bSA8PCAxNikgfCBkZXZudW07CisKKwl1c2JpcF90YXNrX2luaXQoJnNkZXYtPnVkLnRjcF9yeCwgInN0dWJfcngiLCBzdHViX3J4X2xvb3ApOworCXVzYmlwX3Rhc2tfaW5pdCgmc2Rldi0+dWQudGNwX3R4LCAic3R1Yl90eCIsIHN0dWJfdHhfbG9vcCk7CisKKwlzZGV2LT51ZC5zaWRlID0gVVNCSVBfU1RVQjsKKwlzZGV2LT51ZC5zdGF0dXMgPSBTREVWX1NUX0FWQUlMQUJMRTsKKwkvKiBzZGV2LT51ZC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOyAqLworCXNwaW5fbG9ja19pbml0KCZzZGV2LT51ZC5sb2NrKTsKKwlzZGV2LT51ZC50Y3Bfc29ja2V0ID0gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5wcml2X2luaXQpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5wcml2X3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl9mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+dW5saW5rX2ZyZWUpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT51bmxpbmtfdHgpOworCS8qIHNkZXYtPnByaXZfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmc2Rldi0+cHJpdl9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkZXYtPnR4X3dhaXRxKTsKKworCXNkZXYtPnVkLmVoX29wcy5zaHV0ZG93biA9IHN0dWJfc2h1dGRvd25fY29ubmVjdGlvbjsKKwlzZGV2LT51ZC5laF9vcHMucmVzZXQgICAgPSBzdHViX2RldmljZV9yZXNldDsKKwlzZGV2LT51ZC5laF9vcHMudW51c2FibGUgPSBzdHViX2RldmljZV91bnVzYWJsZTsKKworCXVzYmlwX3N0YXJ0X2VoKCZzZGV2LT51ZCk7CisKKwl1ZGJnKCJyZWdpc3RlciBuZXcgaW50ZXJmYWNlXG4iKTsKKwlyZXR1cm4gc2RldjsKK30KKworc3RhdGljIGludCBzdHViX2RldmljZV9mcmVlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoc2Rldik7CisJdWRiZygia2ZyZWUgdWRldiBva1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogSWYgYSB1c2IgZGV2aWNlIGhhcyBtdWx0aXBsZSBhY3RpdmUgaW50ZXJmYWNlcywgdGhpcyBkcml2ZXIgaXMgYm91bmQgdG8gYWxsCisgKiB0aGUgYWN0aXZlIGludGVyZmFjZXMuIEhvd2V2ZXIsIHVzYmlwIGV4cG9ydHMgKmEqIHVzYiBkZXZpY2UgKGkuZS4sIG5vdCAqYW4qCisgKiBhY3RpdmUgaW50ZXJmYWNlKS4gQ3VycmVudGx5LCBhIHVzZXJsYW5kIHByb2dyYW0gbXVzdCBlbnN1cmUgdGhhdCBpdAorICogbG9va3MgYXQgdGhlIHVzYmlwJ3Mgc3lzZnMgZW50cmllcyBvZiBvbmx5IHRoZSBmaXJzdCBhY3RpdmUgaW50ZXJmYWNlLgorICoKKyAqIFRPRE86IHVzZSAic3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyIiB0byBiaW5kIGEgdXNiIGRldmljZS4KKyAqIEhvd2V2ZXIsIGl0IHNlZW1zIGl0IGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQgaW4gbWFpbmxpbmUga2VybmVsIHlldAorICogKDIuNi4xOS4yKS4KKyAqLworc3RhdGljIGludCBzdHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBOVUxMOworCWNoYXIgKnVkZXZfYnVzaWQgPSBpbnRlcmZhY2UtPmRldi5wYXJlbnQtPmJ1c19pZDsKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcoJmludGVyZmFjZS0+ZGV2LCAiRW50ZXJcbiIpOworCisJLyogY2hlY2sgd2Ugc2hvdWxkIGNsYWltIG9yIG5vdCBieSBidXNpZF90YWJsZSAqLworCWlmIChtYXRjaF9idXNpZCh1ZGV2X2J1c2lkKSkgeworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCQkgInRoaXMgZGV2aWNlICVzIGlzIG5vdCBpbiBtYXRjaF9idXNpZCB0YWJsZS4gc2tpcCFcbiIsCisJCQkgdWRldl9idXNpZCk7CisKKwkJLyoKKwkJICogUmV0dXJuIHZhbHVlIHNob3VsZCBiZSBFTk9ERVYgb3IgRU5PWElPIHRvIGNvbnRpbnVlIHRyeWluZworCQkgKiBvdGhlciBtYXRjaGVkIGRyaXZlcnMgYnkgdGhlIGRyaXZlciBjb3JlLgorCQkgKiBTZWUgZHJpdmVyX3Byb2JlX2RldmljZSgpIGluIGRyaXZlci9iYXNlL2RkLmMKKwkJICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAgVVNCX0NMQVNTX0hVQikgeworCQl1ZGJnKCJ0aGlzIGRldmljZSAlcyBpcyBhIHVzYiBodWIgZGV2aWNlLiBza2lwIVxuIiwKKwkJCQkJCQkJdWRldl9idXNpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghc3RyY21wKHVkZXYtPmJ1cy0+YnVzX25hbWUsICJ2aGNpX2hjZCIpKSB7CisJCXVkYmcoInRoaXMgZGV2aWNlICVzIGlzIGF0dGFjaGVkIG9uIHZoY2lfaGNkLiBza2lwIVxuIiwKKwkJCQkJCQkJdWRldl9idXNpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIG9rLiB0aGlzIGlzIG15IGRldmljZS4gKi8KKwlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2MoaW50ZXJmYWNlKTsKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCL0lQIFN0dWI6IHJlZ2lzdGVyIGEgbmV3IGludGVyZmFjZSAiCisJCSAiKGJ1cyAldSBkZXYgJXUgaWZuICV1KVxuIiwgdWRldi0+YnVzLT5idXNudW0sIHVkZXYtPmRldm51bSwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwkvKiBzZXQgcHJpdmF0ZSBkYXRhIHRvIHVzYl9pbnRlcmZhY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc2Rldik7CisKKwllcnIgPSBzdHViX2FkZF9maWxlcygmaW50ZXJmYWNlLT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAorCQkJdWRldl9idXNpZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGNhbGxlZCBpbiB1c2JfZGlzY29ubmVjdCgpIG9yIHVzYl9kZXJlZ2lzdGVyKCkKKyAqIGJ1dCBvbmx5IGlmIGFjdGNvbmZpZyhhY3RpdmUgY29uZmlndXJhdGlvbikgZXhpc3RzCisgKi8KK3N0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCXVkYmcoIkVudGVyXG4iKTsKKworCS8qIGdldCBzdHViX2RldmljZSAqLworCWlmICghc2RldikgeworCQllcnIoIiBjb3VsZCBub3QgZ2V0IGRldmljZSBmcm9tIGludGVmYWNlIGRhdGEiKTsKKwkJLyogQlVHKCk7ICovCisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKworCS8qCisJICogTk9URToKKwkgKiByeC90eCB0aHJlYWRzIGFyZSBpbnZva2VkIGZvciBlYWNoIHVzYl9kZXZpY2UuCisJICovCisJc3R1Yl9yZW1vdmVfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKKworCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KKwl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX1JFTU9WRUQpOworCisJLyogMi4gd2FpdCBmb3IgdGhlIHN0b3Agb2YgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKwl1c2JpcF9zdG9wX2VoKCZzZGV2LT51ZCk7CisKKwkvKiAzLiBmcmVlIHNkZXYgKi8KKwlzdHViX2RldmljZV9mcmVlKHNkZXYpOworCisKKwl1ZGJnKCJieWVcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjVkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInN0dWIuaCIKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUYWthaGlybyBIaXJvZnVjaGkiCisjZGVmaW5lIERSSVZFUl9ERVNDICJTdHViIERyaXZlciBmb3IgVVNCL0lQIgorCisvKiBzdHViX3ByaXYgaXMgYWxsb2NhdGVkIGZyb20gc3R1Yl9wcml2X2NhY2hlICovCitzdHJ1Y3Qga21lbV9jYWNoZSAqc3R1Yl9wcml2X2NhY2hlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEZWZpbmUgc3lzZnMgZW50cmllcyBmb3IgdGhlIHVzYmlwIGRyaXZlciAqLworCisKKy8qCisgKiBidXNpZF90YWJsZXMgZGVmaW5lcyBtYXRjaGluZyBidXNpZHMgdGhhdCB1c2JpcCBjYW4gZ3JhYi4gQSB1c2VyIGNhbiBjaGFuZ2UKKyAqIGR5bmFtaWNhbGx5IHdoYXQgZGV2aWNlIGlzIGxvY2FsbHkgdXNlZCBhbmQgd2hhdCBkZXZpY2UgaXMgZXhwb3J0ZWQgdG8gYQorICogcmVtb3RlIGhvc3QuCisgKi8KKyNkZWZpbmUgTUFYX0JVU0lEIDE2CitzdGF0aWMgY2hhciBidXNpZF90YWJsZVtNQVhfQlVTSURdW0JVU19JRF9TSVpFXTsKK3N0YXRpYyBzcGlubG9ja190IGJ1c2lkX3RhYmxlX2xvY2s7CisKKworaW50IG1hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQorCQkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTX0lEX1NJWkUpKSB7CisJCQkJLyogYWxyZWFkeSByZWdpc3RlcmQgKi8KKwkJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpCit7CisJaW50IGk7CisJY2hhciAqb3V0ID0gYnVmOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJXMgIiwgYnVzaWRfdGFibGVbaV0pOworCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgYWRkX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJaWYgKCFtYXRjaF9idXNpZChidXNpZCkpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKCFidXNpZF90YWJsZVtpXVswXSkgeworCQkJc3RybmNweShidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU19JRF9TSVpFKTsKKwkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGVsX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTX0lEX1NJWkUpKSB7CisJCQkvKiBmb3VuZCAqLworCQkJbWVtc2V0KGJ1c2lkX3RhYmxlW2ldLCAwLCBCVVNfSURfU0laRSk7CisJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkKK3sKKwlpbnQgbGVuOworCWNoYXIgYnVzaWRbQlVTX0lEX1NJWkVdOworCisJaWYgKGNvdW50IDwgNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdHJubGVuKCkgZG9lcyBub3QgaW5jbHVkZSBcMCAqLworCWxlbiA9IHN0cm5sZW4oYnVmICsgNCwgQlVTX0lEX1NJWkUpOworCisJLyogYnVzaWQgbmVlZHMgdG8gaW5jbHVkZSBcMCB0ZXJtaW5hdGlvbiAqLworCWlmICghKGxlbiA8IEJVU19JRF9TSVpFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGJ1c2lkLCBidWYgKyA0LCBCVVNfSURfU0laRSk7CisKKworCWlmICghc3RybmNtcChidWYsICJhZGQgIiwgNCkpIHsKKwkJaWYgKGFkZF9tYXRjaF9idXNpZChidXNpZCkgPCAwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVsc2UgeworCQkJdWRiZygiYWRkIGJ1c2lkICVzXG4iLCBidXNpZCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgImRlbCAiLCA0KSkgeworCQlpZiAoZGVsX21hdGNoX2J1c2lkKGJ1c2lkKSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZWxzZSB7CisJCQl1ZGJnKCJkZWwgYnVzaWQgJXNcbiIsIGJ1c2lkKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKG1hdGNoX2J1c2lkLCBTX0lSVVNSfFNfSVdVU1IsIHNob3dfbWF0Y2hfYnVzaWQsCisJCQkJCQkJc3RvcmVfbWF0Y2hfYnVzaWQpOworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2xlYW51cCBmdW5jdGlvbnMgdXNlZCB0byBmcmVlIHByaXZhdGUgZGF0YSAqLworCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X3BvcF9mcm9tX2xpc3RoZWFkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RoZWFkKQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBsaXN0aGVhZCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJCXJldHVybiBwcml2OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X3BvcChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcHJpdiA9IHN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZCgmc2Rldi0+cHJpdl9pbml0KTsKKwlpZiAocHJpdikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJcHJpdiA9IHN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZCgmc2Rldi0+cHJpdl90eCk7CisJaWYgKHByaXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXByaXYgPSBzdHViX3ByaXZfcG9wX2Zyb21fbGlzdGhlYWQoJnNkZXYtPnByaXZfZnJlZSk7CisJaWYgKHByaXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKworCXVkYmcoImZyZWUgc2RldiAlcFxuIiwgc2Rldik7CisKKwl3aGlsZSAoKHByaXYgPSBzdHViX3ByaXZfcG9wKHNkZXYpKSkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CisKKwkJdWRiZygiICAgZnJlZSB1cmIgJXBcbiIsIHVyYik7CisJCXVzYl9raWxsX3VyYih1cmIpOworCisJCWttZW1fY2FjaGVfZnJlZShzdHViX3ByaXZfY2FjaGUsIHByaXYpOworCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQorCQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJCWlmICh1cmItPnNldHVwX3BhY2tldCAhPSBOVUxMKQorCQkJa2ZyZWUodXJiLT5zZXR1cF9wYWNrZXQpOworCisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc3R1Yl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXN0dWJfcHJpdl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzdHViX3ByaXYiLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzdHViX3ByaXYpLCAwLAorCQkJCQkgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKworCWlmICghc3R1Yl9wcml2X2NhY2hlKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogY3JlYXRlIHN0dWJfcHJpdl9jYWNoZSBlcnJvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc3R1Yl9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IHVzYl9yZWdpc3RlciBmYWlsZWQgJWRcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGVycm9yX3VzYl9yZWdpc3RlcjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisKKwltZW1zZXQoYnVzaWRfdGFibGUsIDAsIHNpemVvZihidXNpZF90YWJsZSkpOworCXNwaW5fbG9ja19pbml0KCZidXNpZF90YWJsZV9sb2NrKTsKKworCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc3R1Yl9kcml2ZXIuZHJ2d3JhcC5kcml2ZXIsCisJCQkJICZkcml2ZXJfYXR0cl9tYXRjaF9idXNpZCk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBjcmVhdGUgZHJpdmVyIHN5c2ZzXG4iKTsKKwkJZ290byBlcnJvcl9jcmVhdGVfZmlsZTsKKwl9CisKKwlyZXR1cm4gcmV0OworZXJyb3JfY3JlYXRlX2ZpbGU6CisJdXNiX2RlcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKK2Vycm9yX3VzYl9yZWdpc3RlcjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3R1Yl9wcml2X2NhY2hlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0dWJfZXhpdCh2b2lkKQoreworCWRyaXZlcl9yZW1vdmVfZmlsZSgmc3R1Yl9kcml2ZXIuZHJ2d3JhcC5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfbWF0Y2hfYnVzaWQpOworCisJLyoKKwkgKiBkZXJlZ2lzdGVyKCkgY2FsbHMgc3R1Yl9kaXNjb25uZWN0KCkgZm9yIGFsbCBkZXZpY2VzLiBEZXZpY2UKKwkgKiBzcGVjaWZpYyBkYXRhIGlzIGNsZWFyZWQgaW4gc3R1Yl9kaXNjb25uZWN0KCkuCisJICovCisJdXNiX2RlcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShzdHViX3ByaXZfY2FjaGUpOworfQorCittb2R1bGVfaW5pdCh1c2Jfc3R1Yl9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zdHViX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2U4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorI2luY2x1ZGUgIi4uLy4uL3VzYi9jb3JlL2hjZC5oIgorCisKK3N0YXRpYyBpbnQgaXNfY2xlYXJfaGFsdF9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJIHJldHVybiAocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUpICYmCisJCSAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSAmJgorCQkgKHJlcS0+d1ZhbHVlID09IFVTQl9FTkRQT0lOVF9IQUxUKTsKK30KKworc3RhdGljIGludCBpc19zZXRfaW50ZXJmYWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwlyZXR1cm4gKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfSU5URVJGQUNFKSAmJgorCQkgICAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKworCXJldHVybiAocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OKSAmJgorCQkgICAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmVzZXRfZGV2aWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCV9fdTE2IHZhbHVlOworCV9fdTE2IGluZGV4OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJdmFsdWUgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisJaW5kZXggPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCk7CisKKwlpZiAoKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfRkVBVFVSRSkgJiYKKwkJCShyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUlRfUE9SVCkgJiYKKwkJCSh2YWx1ZSA9IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSB7CisJCWRiZ19zdHViX3J4KCJyZXNldF9kZXZpY2VfY21kLCBwb3J0ICV1XG4iLCBpbmRleCk7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0d2Vha19jbGVhcl9oYWx0X2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCWludCB0YXJnZXRfZW5kcDsKKwlpbnQgdGFyZ2V0X2RpcjsKKwlpbnQgdGFyZ2V0X3BpcGU7CisJaW50IHJldDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJLyoKKwkgKiBUaGUgc3RhbGxlZCBlbmRwb2ludCBpcyBzcGVjaWZpZWQgaW4gdGhlIHdJbmRleCB2YWx1ZS4gVGhlIGVuZHBvaW50CisJICogb2YgdGhlIHVyYiBpcyB0aGUgdGFyZ2V0IG9mIHRoaXMgY2xlYXJfaGFsdCByZXF1ZXN0IChpLmUuLCBjb250cm9sCisJICogZW5kcG9pbnQpLgorCSAqLworCXRhcmdldF9lbmRwID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpICYgMHgwMDBmOworCisJLyogdGhlIHN0YWxsZWQgZW5kcG9pbnQgZGlyZWN0aW9uIGlzIElOIG9yIE9VVD8uIFVTQl9ESVJfSU4gaXMgMHg4MC4gICovCisJdGFyZ2V0X2RpciA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KSAmIDB4MDA4MDsKKworCWlmICh0YXJnZXRfZGlyKQorCQl0YXJnZXRfcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1cmItPmRldiwgdGFyZ2V0X2VuZHApOworCWVsc2UKKwkJdGFyZ2V0X3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXJiLT5kZXYsIHRhcmdldF9lbmRwKTsKKworCXJldCA9IHVzYl9jbGVhcl9oYWx0KHVyYi0+ZGV2LCB0YXJnZXRfcGlwZSk7CisJaWYgKHJldCA8IDApCisJCXVpbmZvKCJjbGVhcl9oYWx0IGVycm9yOiBkZXZudW0gJWQgZW5kcCAlZCwgJWRcbiIsCisJCQkJdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHAsIHJldCk7CisJZWxzZQorCQl1aW5mbygiY2xlYXJfaGFsdCBkb25lOiBkZXZudW0gJWQgZW5kcCAlZFxuIiwKKwkJCQl1cmItPmRldi0+ZGV2bnVtLCB0YXJnZXRfZW5kcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3ZWFrX3NldF9pbnRlcmZhY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgYWx0ZXJuYXRlOworCV9fdTE2IGludGVyZmFjZTsKKwlpbnQgcmV0OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJYWx0ZXJuYXRlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCWludGVyZmFjZSA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KTsKKworCWRiZ19zdHViX3J4KCJzZXRfaW50ZXJmYWNlOiBpbmYgJXUgYWx0ICV1XG4iLCBpbnRlcmZhY2UsIGFsdGVybmF0ZSk7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1cmItPmRldiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpOworCWlmIChyZXQgPCAwKQorCQl1aW5mbygic2V0X2ludGVyZmFjZSBlcnJvcjogaW5mICV1IGFsdCAldSwgJWRcbiIsCisJCQkJaW50ZXJmYWNlLCBhbHRlcm5hdGUsIHJldCk7CisJZWxzZQorCQl1aW5mbygic2V0X2ludGVyZmFjZSBkb25lOiBpbmYgJXUgYWx0ICV1XG4iLAorCQkJCQkJCWludGVyZmFjZSwKKwkJCQkJCQlhbHRlcm5hdGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2Vha19zZXRfY29uZmlndXJhdGlvbl9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlfX3UxNiBjb25maWc7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwljb25maWcgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisKKwkvKgorCSAqIEkgaGF2ZSBuZXZlciBzZWVuIGEgbXVsdGktY29uZmlnIGRldmljZS4gVmVyeSByYXJlLgorCSAqIEZvciBtb3N0IGRldmljZXMsIHRoaXMgd2lsbCBiZSBjYWxsZWQgdG8gY2hvb3NlIGEgZGVmYXVsdAorCSAqIGNvbmZpZ3VyYXRpb24gb25seSBvbmNlIGluIGFuIGluaXRpYWxpemF0aW9uIHBoYXNlLgorCSAqCisJICogc2V0X2NvbmZpZ3VyYXRpb24gbWF5IGNoYW5nZSBhIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGV2aWNlCisJICogZHJpdmVycyB3aWxsIGJlIHVuYm91bmQgYW5kIGFzc2lnbmVkIGZvciBhIG5ldyBkZXZpY2UgY29uZmlndXJhdGlvbi4KKwkgKiBUaGlzIG1lYW5zIHRoaXMgdXNiaXAgZHJpdmVyIHdpbGwgYmUgYWxzbyB1bmJvdW5kIHdoZW4gY2FsbGVkLCB0aGVuCisJICogZXZlbnR1YWxseSByZWFzc2lnbmVkIHRvIHRoZSBkZXZpY2UgYXMgZmFyIGFzIGRyaXZlciBtYXRjaGluZworCSAqIGNvbmRpdGlvbiBpcyBrZXB0LgorCSAqCisJICogVW5mb3J0dW5hdGVsbHksIGFuIGV4aXN0aW5nIHVzYmlwIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkCisJICogZHVlIHRvIHRoaXMgZHJpdmVyIHVuYmluZGluZy4gU28sIHNraXAgaGVyZS4KKwkgKiBBIHVzZXIgbWF5IG5lZWQgdG8gc2V0IGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIHZhbHVlIGJlZm9yZQorCSAqIGV4cG9ydGluZyB0aGUgZGV2aWNlLgorCSAqLworCXVpbmZvKCJzZXRfY29uZmlndXJhdGlvbiAoJWQpIHRvICVzXG4iLCBjb25maWcsIHVyYi0+ZGV2LT5kZXYuYnVzX2lkKTsKKwl1aW5mbygiYnV0LCBza2lwIVxuIik7CisKKwlyZXR1cm4gMDsKKwkvKiByZXR1cm4gdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1cmItPmRldiwgY29uZmlnKTsgKi8KK30KKworc3RhdGljIGludCB0d2Vha19yZXNldF9kZXZpY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgdmFsdWU7CisJX191MTYgaW5kZXg7CisJaW50IHJldDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCXZhbHVlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCWluZGV4ID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOworCisJdWluZm8oInJlc2V0X2RldmljZSAocG9ydCAlZCkgdG8gJXNcbiIsIGluZGV4LCB1cmItPmRldi0+ZGV2LmJ1c19pZCk7CisKKwkvKiBhbGwgaW50ZXJmYWNlcyBzaG91bGQgYmUgb3duZWQgYnkgdXNiaXAgZHJpdmVyLCBzbyBqdXN0IHJlc2V0IGl0LiAgKi8KKwlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVyYi0+ZGV2LCBOVUxMKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAibG9jayBmb3IgcmVzZXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHRyeSB0byByZXNldCB0aGUgZGV2aWNlICovCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1cmItPmRldik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCisJdXNiX3VubG9ja19kZXZpY2UodXJiLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNsZWFyX2hhbHQsIHNldF9pbnRlcmZhY2UsIGFuZCBzZXRfY29uZmlndXJhdGlvbiByZXF1aXJlIHNwZWNpYWwgdHJpY2tzLgorICovCitzdGF0aWMgdm9pZCB0d2Vha19zcGVjaWFsX3JlcXVlc3RzKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoIXVyYiB8fCAhdXJiLT5zZXR1cF9wYWNrZXQpCisJCXJldHVybjsKKworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0NPTlRST0wpCisJCXJldHVybjsKKworCWlmIChpc19jbGVhcl9oYWx0X2NtZCh1cmIpKQorCQkvKiB0d2VhayBjbGVhcl9oYWx0ICovCisJCSB0d2Vha19jbGVhcl9oYWx0X2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfc2V0X2ludGVyZmFjZV9jbWQodXJiKSkKKwkJLyogdHdlYWsgc2V0X2ludGVyZmFjZSAqLworCQl0d2Vha19zZXRfaW50ZXJmYWNlX2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHVyYikpCisJCS8qIHR3ZWFrIHNldF9jb25maWd1cmF0aW9uICovCisJCXR3ZWFrX3NldF9jb25maWd1cmF0aW9uX2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfcmVzZXRfZGV2aWNlX2NtZCh1cmIpKQorCQl0d2Vha19yZXNldF9kZXZpY2VfY21kKHVyYik7CisJZWxzZQorCQlkYmdfc3R1Yl9yeCgibm8gbmVlZCB0byB0d2Vha1xuIik7Cit9CisKKy8qCisgKiBzdHViX3JlY3ZfdW5saW5rKCkgdW5saW5rcyB0aGUgVVJCIGJ5IGEgY2FsbCB0byB1c2JfdW5saW5rX3VyYigpLgorICogQnkgdW5saW5raW5nIHRoZSB1cmIgYXN5bmNocm9ub3VzbHksIHN0dWJfcnggY2FuIGNvbnRpbnVvdXNseQorICogcHJvY2VzcyBjb21pbmcgdXJicy4gIEV2ZW4gaWYgdGhlIHVyYiBpcyB1bmxpbmtlZCwgaXRzIGNvbXBsZXRpb24KKyAqIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW5kIHN0dWJfdHggd2lsbCBzZW5kIGEgcmV0dXJuIHBkdS4KKyAqCisgKiBTZWUgYWxzbyBjb21tZW50cyBhYm91dCB1bmxpbmtpbmcgc3RyYXRlZ3kgaW4gdmhjaV9oY2QuYy4KKyAqLworc3RhdGljIGludCBzdHViX3JlY3ZfY21kX3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsCisJCQkJCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdGhlYWQgPSAmc2Rldi0+cHJpdl9pbml0OworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJZm9yIChwdHIgPSBsaXN0aGVhZC0+bmV4dDsgcHRyICE9IGxpc3RoZWFkOyBwdHIgPSBwdHItPm5leHQpIHsKKwkJcHJpdiA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3Qgc3R1Yl9wcml2LCBsaXN0KTsKKwkJaWYgKHByaXYtPnNlcW51bSA9PSBwZHUtPnUuY21kX3VubGluay5zZXFudW0pIHsKKwkJCWludCByZXQ7CisKKwkJCWRldl9pbmZvKCZwcml2LT51cmItPmRldi0+ZGV2LCAidW5saW5rIHVyYiAlcFxuIiwKKwkJCQkgcHJpdi0+dXJiKTsKKworCQkJLyoKKwkJCSAqIFRoaXMgbWF0Y2hlZCB1cmIgaXMgbm90IGNvbXBsZXRlZCB5ZXQgKGkuZS4sIGJlIGluCisJCQkgKiBmbGlnaHQgaW4gdXNiIGhjZCBoYXJkd2FyZS9kcml2ZXIpLiBOb3cgd2UgYXJlCisJCQkgKiBjYW5jZWxsaW5nIGl0LiBUaGUgdW5saW5raW5nIGZsYWcgbWVhbnMgdGhhdCB3ZSBhcmUKKwkJCSAqIG5vdyBub3QgZ29pbmcgdG8gcmV0dXJuIHRoZSBub3JtYWwgcmVzdWx0IHBkdSBvZiBhCisJCQkgKiBzdWJtaXNzaW9uIHJlcXVlc3QsIGJ1dCBnb2luZyB0byByZXR1cm4gYSByZXN1bHQgcGR1CisJCQkgKiBvZiB0aGUgdW5saW5rIHJlcXVlc3QuCisJCQkgKi8KKwkJCXByaXYtPnVubGlua2luZyA9IDE7CisKKwkJCS8qCisJCQkgKiBJbiB0aGUgY2FzZSB0aGF0IHVubGlua2luZyBmbGFnIGlzIG9uLCBwcmV2LT5zZXFudW0KKwkJCSAqIGlzIGNoYW5nZWQgZnJvbSB0aGUgc2VxbnVtIG9mIHRoZSBjYW5jZWxsaW5nIHVyYiB0bworCQkJICogdGhlIHNlcW51bSBvZiB0aGUgdW5saW5rIHJlcXVlc3QuIFRoaXMgd2lsbCBiZSB1c2VkCisJCQkgKiB0byBtYWtlIHRoZSByZXN1bHQgcGR1IG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4KKwkJCSAqLworCQkJcHJpdi0+c2VxbnVtID0gcGR1LT5iYXNlLnNlcW51bTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwkJCS8qCisJCQkgKiB1c2JfdW5saW5rX3VyYigpIGlzIG5vdyBvdXQgb2Ygc3BpbmxvY2tpbmcgdG8gYXZvaWQKKwkJCSAqIHNwaW5sb2NrIHJlY3Vyc2lvbiBzaW5jZSBzdHViX2NvbXBsZXRlKCkgaXMKKwkJCSAqIHNvbWV0aW1lcyBjYWxsZWQgaW4gdGhpcyBjb250ZXh0IGJ1dCBub3QgaW4gdGhlCisJCQkgKiBpbnRlcnJ1cHQgY29udGV4dC4gIElmIHN0dWJfY29tcGxldGUoKSBpcyBleGVjdXRlZAorCQkJICogYmVmb3JlIHdlIGNhbGwgdXNiX3VubGlua191cmIoKSwgdXNiX3VubGlua191cmIoKQorCQkJICogd2lsbCByZXR1cm4gYW4gZXJyb3IgdmFsdWUuIEluIHRoaXMgY2FzZSwgc3R1Yl90eAorCQkJICogd2lsbCByZXR1cm4gdGhlIHJlc3VsdCBwZHUgb2YgdGhpcyB1bmxpbmsgcmVxdWVzdAorCQkJICogdGhvdWdoIHN1Ym1pc3Npb24gaXMgY29tcGxldGVkIGFuZCBhY3R1YWwgdW5saW5raW5nCisJCQkgKiBpcyBub3QgZXhlY3V0ZWQuIE9LPworCQkJICovCisJCQkvKiBJbiB0aGUgYWJvdmUgY2FzZSwgdXJiLT5zdGF0dXMgaXMgbm90IC1FQ09OTlJFU0VULAorCQkJICogc28gYSBkcml2ZXIgaW4gYSBjbGllbnQgaG9zdCB3aWxsIGtub3cgdGhlIGZhaWx1cmUKKwkJCSAqIG9mIHRoZSB1bmxpbmsgcmVxdWVzdCA/CisJCQkgKi8KKwkJCXJldCA9IHVzYl91bmxpbmtfdXJiKHByaXYtPnVyYik7CisJCQlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykKKwkJCQlkZXZfZXJyKCZwcml2LT51cmItPmRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHVubGluayBhIHVyYiAlcCwgcmV0ICVkXG4iLAorCQkJCQlwcml2LT51cmIsIHJldCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRiZ19zdHViX3J4KCJzZXFudW0gJWQgaXMgbm90IHBlbmRpbmdcbiIsIHBkdS0+dS5jbWRfdW5saW5rLnNlcW51bSk7CisKKwkvKgorCSAqIFRoZSB1cmIgb2YgdGhlIHVubGluayB0YXJnZXQgaXMgbm90IGZvdW5kIGluIHByaXZfaW5pdCBxdWV1ZS4gSXQgd2FzCisJICogYWxyZWFkeSBjb21wbGV0ZWQgYW5kIGl0cyByZXN1bHRzIGlzL3dhcyBnb2luZyB0byBiZSBzZW50IGJ5IGEKKwkgKiBDTURfUkVUIHBkdS4gSW4gdGhpcyBjYXNlLCB1c2JfdW5saW5rX3VyYigpIGlzIG5vdCBuZWVkZWQuIFdlIG9ubHkKKwkgKiByZXR1cm4gdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGlzIHVubGluayByZXF1ZXN0IHRvIHZoY2lfaGNkLgorCSAqLworCXN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHNkZXYsIHBkdS0+YmFzZS5zZXFudW0sIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhbGlkX3JlcXVlc3Qoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7CisKKwlpZiAocGR1LT5iYXNlLmRldmlkID09IHNkZXYtPmRldmlkKSB7CisJCXNwaW5fbG9jaygmdWQtPmxvY2spOworCQlpZiAodWQtPnN0YXR1cyA9PSBTREVWX1NUX1VTRUQpIHsKKwkJCS8qIEEgcmVxdWVzdCBpcyB2YWxpZC4gKi8KKwkJCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzcGluX3VubG9jaygmdWQtPmxvY2spOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X2FsbG9jKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKKwkJCQkJIHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnNkZXYtPnVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlwcml2ID0ga21lbV9jYWNoZV9hbGxvYyhzdHViX3ByaXZfY2FjaGUsIEdGUF9BVE9NSUMpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImFsbG9jIHN0dWJfcHJpdlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9wcml2KSk7CisKKwlwcml2LT5zZXFudW0gPSBwZHUtPmJhc2Uuc2VxbnVtOworCXByaXYtPnNkZXYgPSBzZGV2OworCisJLyoKKwkgKiBBZnRlciBhIHN0dWJfcHJpdiBpcyBsaW5rZWQgdG8gYSBsaXN0X2hlYWQsCisJICogb3VyIGVycm9yIGhhbmRsZXIgY2FuIGZyZWUgYWxsb2NhdGVkIGRhdGEuCisJICovCisJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGlzdCwgJnNkZXYtPnByaXZfaW5pdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwcml2OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmdldF9lcF9mcm9tX2VwbnVtKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlpbnQgZXBudW0wKQoreworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZzsKKwlpbnQgaSA9IDAsIGogPSAwOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSBOVUxMOworCWludCBlcG51bTsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKGVwbnVtMCA9PSAwKQorCQlyZXR1cm4gJnVkZXYtPmVwMDsKKworCWNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKKwlpZiAoIWNvbmZpZykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqc2V0dGluZzsKKworCQlzZXR0aW5nID0gY29uZmlnLT5pbnRlcmZhY2VbaV0tPmN1cl9hbHRzZXR0aW5nOworCisJCWZvciAoaiA9IDA7IGogPCBzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGorKykgeworCQkJZXAgPSAmc2V0dGluZy0+ZW5kcG9pbnRbal07CisJCQllcG51bSA9IChlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg3Zik7CisKKwkJCWlmIChlcG51bSA9PSBlcG51bTApIHsKKwkJCQkvKiB1aW5mbygiZm91bmQgZXBudW0gJWRcbiIsIGVwbnVtMCk7ICovCisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGZvdW5kKQorCQlyZXR1cm4gZXA7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IGdldF9waXBlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwgaW50IGVwbnVtLCBpbnQgZGlyKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQgPSBOVUxMOworCisJZXAgPSBnZXRfZXBfZnJvbV9lcG51bSh1ZGV2LCBlcG51bSk7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm5vIHN1Y2ggZW5kcG9pbnQ/LCAlZFxuIiwKKwkJCWVwbnVtKTsKKwkJQlVHKCk7CisJfQorCisJZXBkID0gJmVwLT5kZXNjOworCisKKyNpZiAwCisJLyogZXBudW0gMCBpcyBhbHdheXMgY29udHJvbCAqLworCWlmIChlcG51bSA9PSAwKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kY3RybHBpcGUodWRldiwgMCk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCk7CisJfQorI2VuZGlmCisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kY3RybHBpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmN0cmxwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kYnVsa3BpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkpIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRpbnRwaXBlKHVkZXYsIGVwbnVtKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kaXNvY3BpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwkvKiBOT1QgUkVBQ0hFRCAqLworCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiZ2V0IHBpcGUsIGVwbnVtICVkXG4iLCBlcG51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0dWJfcmVjdl9jbWRfc3VibWl0KHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKKwkJCQkgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCWludCByZXQ7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlpbnQgcGlwZSA9IGdldF9waXBlKHNkZXYsIHBkdS0+YmFzZS5lcCwgcGR1LT5iYXNlLmRpcmVjdGlvbik7CisKKworCXByaXYgPSBzdHViX3ByaXZfYWxsb2Moc2RldiwgcGR1KTsKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKworCS8qIHNldHVwIGEgdXJiICovCisJaWYgKHVzYl9waXBlaXNvYyhwaXBlKSkKKwkJcHJpdi0+dXJiID0gdXNiX2FsbG9jX3VyYihwZHUtPnUuY21kX3N1Ym1pdC5udW1iZXJfb2ZfcGFja2V0cywKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlwcml2LT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT51cmIpIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJtYWxsb2MgdXJiXG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgcHJpdi0+dXJiLT50cmFuc2Zlcl9idWZmZXIgKi8KKwlpZiAocGR1LT51LmNtZF9zdWJtaXQudHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJcHJpdi0+dXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJa3phbGxvYyhwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT51cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJtYWxsb2MgeF9idWZmXG4iKTsKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogc2V0IHByaXYtPnVyYi0+c2V0dXBfcGFja2V0ICovCisJcHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQpIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJhbGxvY2F0ZSBzZXR1cF9wYWNrZXRcbiIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkocHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQsICZwZHUtPnUuY21kX3N1Ym1pdC5zZXR1cCwgOCk7CisKKwkvKiBzZXQgb3RoZXIgbWVtYmVycyBmcm9tIHRoZSBiYXNlIGhlYWRlciBvZiBwZHUgKi8KKwlwcml2LT51cmItPmNvbnRleHQgICAgICAgICAgICAgICAgPSAodm9pZCAqKSBwcml2OworCXByaXYtPnVyYi0+ZGV2ICAgICAgICAgICAgICAgICAgICA9IHVkZXY7CisJcHJpdi0+dXJiLT5waXBlICAgICAgICAgICAgICAgICAgID0gcGlwZTsKKwlwcml2LT51cmItPmNvbXBsZXRlICAgICAgICAgICAgICAgPSBzdHViX2NvbXBsZXRlOworCisJdXNiaXBfcGFja19wZHUocGR1LCBwcml2LT51cmIsIFVTQklQX0NNRF9TVUJNSVQsIDApOworCisKKwlpZiAodXNiaXBfcmVjdl94YnVmZih1ZCwgcHJpdi0+dXJiKSA8IDApCisJCXJldHVybjsKKworCWlmICh1c2JpcF9yZWN2X2lzbyh1ZCwgcHJpdi0+dXJiKSA8IDApCisJCXJldHVybjsKKworCS8qIG5vIG5lZWQgdG8gc3VibWl0IGFuIGludGVyY2VwdGVkIHJlcXVlc3QsIGJ1dCBoYXJtbGVzcz8gKi8KKwl0d2Vha19zcGVjaWFsX3JlcXVlc3RzKHByaXYtPnVyYik7CisKKwkvKiB1cmIgaXMgbm93IHJlYWR5IHRvIHN1Ym1pdCAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnVyYiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmV0ID09IDApCisJCWRiZ19zdHViX3J4KCJzdWJtaXQgdXJiIG9rLCBzZXFudW0gJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCWVsc2UgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgInN1Ym1pdF91cmIgZXJyb3IsICVkXG4iLCByZXQpOworCQl1c2JpcF9kdW1wX2hlYWRlcihwZHUpOworCQl1c2JpcF9kdW1wX3VyYihwcml2LT51cmIpOworCisJCS8qCisJCSAqIFBlc3NpbWlzdGljLgorCQkgKiBUaGlzIGNvbm5lY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuCisJCSAqLworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfU1VCTUlUKTsKKwl9CisKKwlkYmdfc3R1Yl9yeCgiTGVhdmVcbiIpOworCXJldHVybjsKK30KKworLyogcmVjdiBhIHBkdSAqLworc3RhdGljIHZvaWQgc3R1Yl9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZGV2LT5pbnRlcmZhY2UtPmRldjsKKworCWRiZ19zdHViX3J4KCJFbnRlclxuIik7CisKKwltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOworCisJLyogMS4gcmVjZWl2ZSBhIHBkdSBoZWFkZXIgKi8KKwlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCAoY2hhciAqKSAmcGR1LCBzaXplb2YocGR1KSwgMCk7CisJaWYgKHJldCAhPSBzaXplb2YocGR1KSkgeworCQlkZXZfZXJyKGRldiwgInJlY3YgYSBoZWFkZXIsICVkXG4iLCByZXQpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJcmV0dXJuOworCX0KKworCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1LCAwKTsKKworCWlmIChkYmdfZmxhZ19zdHViX3J4KQorCQl1c2JpcF9kdW1wX2hlYWRlcigmcGR1KTsKKworCWlmICghdmFsaWRfcmVxdWVzdChzZGV2LCAmcGR1KSkgeworCQlkZXZfZXJyKGRldiwgInJlY3YgaW52YWxpZCByZXF1ZXN0XG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHBkdS5iYXNlLmNvbW1hbmQpIHsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCXN0dWJfcmVjdl9jbWRfdW5saW5rKHNkZXYsICZwZHUpOworCQlicmVhazsKKworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJc3R1Yl9yZWN2X2NtZF9zdWJtaXQoc2RldiwgJnBkdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAqLworCQlkZXZfZXJyKGRldiwgInVua25vd24gcGR1XG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKK30KKwordm9pZCBzdHViX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfcngpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlkYmdfc3R1Yl9yeCgic2lnbmFsIGNhdWdodCFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodXNiaXBfZXZlbnRfaGFwcGVuZCh1ZCkpCisJCQlicmVhazsKKworCQlzdHViX3J4X3BkdSh1ZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1NjNjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJzdHViLmgiCisKKworc3RhdGljIHZvaWQgc3R1Yl9mcmVlX3ByaXZfYW5kX3VyYihzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2KQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKworCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCWttZW1fY2FjaGVfZnJlZShzdHViX3ByaXZfY2FjaGUsIHByaXYpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorCisvKiBiZSBpbiBzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncykgKi8KK3ZvaWQgc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBfX3UzMiBzZXFudW0sCisJCQkgICAgIF9fdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluazsKKworCXVubGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHViX3VubGluayksIEdGUF9BVE9NSUMpOworCWlmICghdW5saW5rKSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2Mgc3R1Yl91bmxpbmtcbiIpOworCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwl1bmxpbmstPnNlcW51bSA9IHNlcW51bTsKKwl1bmxpbmstPnN0YXR1cyA9IHN0YXR1czsKKworCWxpc3RfYWRkX3RhaWwoJnVubGluay0+bGlzdCwgJnNkZXYtPnVubGlua190eCk7Cit9CisKKy8qKgorICogc3R1Yl9jb21wbGV0ZSAtIGNvbXBsZXRpb24gaGFuZGxlciBvZiBhIHVzYmlwIHVyYgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIGNvbXBsZXRlZAorICogQHJlZ3M6CisgKgorICogV2hlbiBhIHVyYiBoYXMgY29tcGxldGVkLCB0aGUgVVNCIGNvcmUgZHJpdmVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gbW9zdGx5IGluCisgKiB0aGUgaW50ZXJydXB0IGNvbnRleHQuIFRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGEgdXJiLCB0aGUgY29tcGxldGVkIHVyYiBpcworICogbGlua2VkIHRvIHRoZSBwZW5kaW5nIGxpc3Qgb2YgcmV0dXJuaW5nLgorICoKKyAqLwordm9pZCBzdHViX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHByaXYtPnNkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ19zdHViX3R4KCJjb21wbGV0ZSEgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIE9LICovCisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwkJdWluZm8oInN0b3BwZWQgYnkgYSBjYWxsIG9mIHVzYl9raWxsX3VyYigpIGJlY2F1c2Ugb2YiCisJCQkJCSJjbGVhbmluZyB1cCBhIHZpcnR1YWwgY29ubmVjdGlvblxuIik7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCQl1aW5mbygidW5saW5rZWQgYnkgYSBjYWxsIG9mIHVzYl91bmxpbmtfdXJiKClcbiIpOworCQlicmVhazsKKwljYXNlIC1FUElQRToKKwkJdWluZm8oImVuZHBvaW50ICVkIGlzIHN0YWxsZWRcbiIsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSk7CisJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoKKwkJdWluZm8oImRldmljZSByZW1vdmVkP1xuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVpbmZvKCJ1cmIgY29tcGxldGlvbiB3aXRoIG5vbi16ZXJvIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCX0KKworCS8qIGxpbmsgYSB1cmIgdG8gdGhlIHF1ZXVlIG9mIHR4LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT51bmxpbmtpbmcpIHsKKwkJc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc2RldiwgcHJpdi0+c2VxbnVtLCB1cmItPnN0YXR1cyk7CisJCXN0dWJfZnJlZV9wcml2X2FuZF91cmIocHJpdik7CisJfSBlbHNlCisJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmc2Rldi0+cHJpdl90eCk7CisKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJLyogd2FrZSB1cCB0eF90aHJlYWQgKi8KKwl3YWtlX3VwKCZzZGV2LT50eF93YWl0cSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIGZpbGwgUERVICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9iYXNlX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLAorCQlfX3UzMiBjb21tYW5kLCBfX3UzMiBzZXFudW0pCit7CisJYmFzZS0+Y29tbWFuZCA9IGNvbW1hbmQ7CisJYmFzZS0+c2VxbnVtICA9IHNlcW51bTsKKwliYXNlLT5kZXZpZCAgID0gMDsKKwliYXNlLT5lcCAgICAgID0gMDsKKwliYXNlLT5kaXJlY3Rpb24gICA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JldF9zdWJtaXRfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnJwZHUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OworCisJc2V0dXBfYmFzZV9wZHUoJnJwZHUtPmJhc2UsIFVTQklQX1JFVF9TVUJNSVQsIHByaXYtPnNlcW51bSk7CisKKwl1c2JpcF9wYWNrX3BkdShycGR1LCB1cmIsIFVTQklQX1JFVF9TVUJNSVQsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZXRfdW5saW5rX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpycGR1LAorCQlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaykKK3sKKwlzZXR1cF9iYXNlX3BkdSgmcnBkdS0+YmFzZSwgVVNCSVBfUkVUX1VOTElOSywgdW5saW5rLT5zZXFudW0pOworCisJcnBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyA9IHVubGluay0+c3RhdHVzOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzZW5kIFJFVF9TVUJNSVQgKi8KKworc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKmRlcXVldWVfZnJvbV9wcml2X3R4KHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmc2Rldi0+cHJpdl90eCwgbGlzdCkgeworCQlsaXN0X21vdmVfdGFpbCgmcHJpdi0+bGlzdCwgJnNkZXYtPnByaXZfZnJlZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHN0dWJfc2VuZF9yZXRfc3VibWl0KHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgocHJpdiA9IGRlcXVldWVfZnJvbV9wcml2X3R4KHNkZXYpKSAhPSBOVUxMKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCQl2b2lkICppc29fYnVmZmVyID0gTlVMTDsKKworCQl0eHNpemUgPSAwOworCQltZW1zZXQoJnBkdV9oZWFkZXIsIDAsIHNpemVvZihwZHVfaGVhZGVyKSk7CisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCW1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKwkJZGJnX3N0dWJfdHgoInNldHVwIHR4ZGF0YSB1cmIgJXBcbiIsIHVyYik7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJc2V0dXBfcmV0X3N1Ym1pdF9wZHUoJnBkdV9oZWFkZXIsIHVyYik7CisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQkvKiAyLiBzZXR1cCB0cmFuc2ZlciBidWZmZXIgKi8KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXR4c2l6ZSArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKworCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXNzaXplX3QgbGVuID0gMDsKKworCQkJaXNvX2J1ZmZlciA9IHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSh1cmIsICZsZW4pOworCQkJaWYgKCFpc29fYnVmZmVyKSB7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwKKwkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9IGlzb19idWZmZXI7CisJCQlpb3ZbMl0uaW92X2xlbiAgPSBsZW47CisJCQl0eHNpemUgKz0gbGVuOworCQl9CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2coc2Rldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LAorCQkJCSAgICAgMywgdHhzaXplKTsKKwkJaWYgKHJldCAhPSB0eHNpemUpIHsKKwkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJCSJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLAorCQkJCXJldCwgdHhzaXplKTsKKwkJCWtmcmVlKGlzb19idWZmZXIpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCWRiZ19zdHViX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmc2Rldi0+cHJpdl9mcmVlLCBsaXN0KSB7CisJCXN0dWJfZnJlZV9wcml2X2FuZF91cmIocHJpdik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc2VuZCBSRVRfVU5MSU5LICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl91bmxpbmsgKmRlcXVldWVfZnJvbV91bmxpbmtfdHgoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZzZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnVubGluay0+bGlzdCwgJnNkZXYtPnVubGlua19mcmVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiB1bmxpbms7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IHN0dWJfc2VuZF9yZXRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92WzFdOworCXNpemVfdCB0eHNpemU7CisKKwlzaXplX3QgdG90YWxfc2l6ZSA9IDA7CisKKwl3aGlsZSAoKHVubGluayA9IGRlcXVldWVfZnJvbV91bmxpbmtfdHgoc2RldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfc3R1Yl90eCgic2V0dXAgcmV0IHVubGluayAlbHVcbiIsIHVubGluay0+c2VxbnVtKTsKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJc2V0dXBfcmV0X3VubGlua19wZHUoJnBkdV9oZWFkZXIsIHVubGluayk7CisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhzZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsCisJCQkJICAgICAxLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsCisJCQkJInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsCisJCQkJcmV0LCB0eHNpemUpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKworCQlkYmdfc3R1Yl90eCgic2VuZCB0eGRhdGFcbiIpOworCisJCXRvdGFsX3NpemUgKz0gdHhzaXplOworCX0KKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX2ZyZWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHN0dWJfdHhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF90eCk7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3N0dWJfdHgoInNpZ25hbCBjYXRjaGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogc2VuZF9yZXRfc3VibWl0IGNvbWVzIGVhcmxpZXIgdGhhbiBzZW5kX3JldF91bmxpbmsuICBzdHViX3J4CisJCSAqIGxvb2tzIGF0IG9ubHkgcHJpdl9pbml0IHF1ZXVlLiBJZiB0aGUgY29tcGxldGlvbiBvZiBhIFVSQiBpcworCQkgKiBlYXJsaWVyIHRoYW4gdGhlIHJlY2VpdmUgb2YgQ01EX1VOTElOSywgcHJpdiBpcyBtb3ZlZCB0bworCQkgKiBwcml2X3R4IHF1ZXVlIGFuZCBzdHViX3J4IGRvZXMgbm90IGZpbmQgdGhlIHRhcmdldCBwcml2LiBJbgorCQkgKiB0aGlzIGNhc2UsIHZoY2lfcnggcmVjZWl2ZXMgdGhlIHJlc3VsdCBvZiB0aGUgc3VibWl0IHJlcXVlc3QKKwkJICogYW5kIHRoZW4gcmVjZWl2ZXMgdGhlIHJlc3VsdCBvZiB0aGUgdW5saW5rIHJlcXVlc3QuIFRoZQorCQkgKiByZXN1bHQgb2YgdGhlIHN1Ym1pdCBpcyBnaXZlbiBiYWNrIHRvIHRoZSB1c2Jjb3JlIGFzIHRoZQorCQkgKiBjb21wbGV0aW9uIG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4gVGhlIHJlcXVlc3Qgb2YgdGhlCisJCSAqIHVubGluayBpcyBpZ25vcmVkLiBUaGlzIGlzIG9rIGJlY2F1c2UgYSBkcml2ZXIgd2hvIGNhbGxzCisJCSAqIHVzYl91bmxpbmtfdXJiKCkgdW5kZXJzdGFuZHMgdGhlIHVubGluayB3YXMgdG9vIGxhdGUgYnkKKwkJICogZ2V0dGluZyB0aGUgc3RhdHVzIG9mIHRoZSBnaXZlbi1iYWNrZWQgVVJCIHdoaWNoIGhhcyB0aGUKKwkJICogc3RhdHVzIG9mIHVzYl9zdWJtaXRfdXJiKCkuCisJCSAqLworCQlpZiAoc3R1Yl9zZW5kX3JldF9zdWJtaXQoc2RldikgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0dWJfc2VuZF9yZXRfdW5saW5rKHNkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZGV2LT50eF93YWl0cSwKKwkJCQkoIWxpc3RfZW1wdHkoJnNkZXYtPnByaXZfdHgpIHx8CisJCQkJICFsaXN0X2VtcHR5KCZzZGV2LT51bmxpbmtfdHgpKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKQEAgLTAsMCArMSw5OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKworLyogdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUYWthaGlybyBIaXJvZnVjaGkgPGhpcm9mdWNoaSBfYXRfIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJ1c2JpcCBjb21tb24gZHJpdmVyIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogZGVidWcgcm91dGluZXMgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKK3Vuc2lnbmVkIGxvbmcgdXNiaXBfZGVidWdfZmxhZyA9IDB4ZmZmZmZmZmY7CisjZWxzZQordW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnOworI2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9kZWJ1Z19mbGFnKTsKKworCisvKiBGSVhNRSAqLworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfdXNiaXBfZGVidWc7CitFWFBPUlRfU1lNQk9MX0dQTChkZXZfYXR0cl91c2JpcF9kZWJ1Zyk7CisKKworc3RhdGljIHNzaXplX3Qgc2hvd19mbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHVzYmlwX2RlYnVnX2ZsYWcpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNzY2FuZihidWYsICIlbHgiLCAmZmxhZyk7CisJdXNiaXBfZGVidWdfZmxhZyA9IGZsYWc7CisKKwlyZXR1cm4gY291bnQ7Cit9CitERVZJQ0VfQVRUUih1c2JpcF9kZWJ1ZywgKFNfSVJVR08gfCBTX0lXVVNSKSwgc2hvd19mbGFnLCBzdG9yZV9mbGFnKTsKKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9idWZmZXIoY2hhciAqYnVmZiwgaW50IGJ1ZmZsZW4pCit7CisJaW50IGk7CisKKwlpZiAoYnVmZmxlbiA+IDEyOCkgeworCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJCWlmIChpJTI0ID09IDApCisJCQkJcHJpbnRrKCIgICAiKTsKKwkJCXByaW50aygiJTAyeCAiLCAodW5zaWduZWQgY2hhcikgYnVmZltpXSk7CisJCQlpZiAoaSU0ID09IDMpCisJCQkJcHJpbnRrKCJ8ICIpOworCQkJaWYgKGklMjQgPT0gMjMpCisJCQkJcHJpbnRrKCJcbiIpOworCQl9CisJCXByaW50aygiLi4uICglZCBieXRlKVxuIiwgYnVmZmxlbik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmxlbjsgaSsrKSB7CisJCWlmIChpJTI0ID09IDApCisJCQlwcmludGsoIiAgICIpOworCQlwcmludGsoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpIGJ1ZmZbaV0pOworCQlpZiAoaSU0ID09IDMpCisJCQlwcmludGsoInwgIik7CisJCWlmIChpJTI0ID09IDIzKQorCQkJcHJpbnRrKCJcbiIpOworCX0KKwlwcmludGsoIlxuIik7CisKK30KKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9waXBlKHVuc2lnbmVkIGludCBwKQoreworCXVuc2lnbmVkIGNoYXIgdHlwZSA9IHVzYl9waXBldHlwZShwKTsKKwl1bnNpZ25lZCBjaGFyIGVwID0gdXNiX3BpcGVlbmRwb2ludChwKTsKKwl1bnNpZ25lZCBjaGFyIGRldiA9IHVzYl9waXBlZGV2aWNlKHApOworCXVuc2lnbmVkIGNoYXIgZGlyID0gdXNiX3BpcGVpbihwKTsKKworCXByaW50aygiZGV2KCVkKSAiLCBkZXYpOworCXByaW50aygiZXAoJWQpICIsICBlcCk7CisJcHJpbnRrKCIlcyAiLCBkaXIgPyAiSU4iIDogIk9VVCIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlwcmludGsoIiVzICIsICJJU08iKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJcHJpbnRrKCIlcyAiLCAiSU5UIik7CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlwcmludGsoIiVzICIsICJDVEwiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0JVTEs6CisJCXByaW50aygiJXMgIiwgIkJMSyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIkVSUiIpOworCX0KKworCXByaW50aygiXG4iKTsKKworfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3VzYl9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKwlpbnQgaTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIGRldm51bSglZCkgZGV2cGF0aCglcykiLAorCQl1ZGV2LT5kZXZudW0sIHVkZXYtPmRldnBhdGgpOworCisJc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXByaW50aygiIFNQRF9ISUdIIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXByaW50aygiIFNQRF9GVUxMIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJcHJpbnRrKCIgU1BEX0xPVyIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9VTktOT1dOOgorCQlwcmludGsoIiBTUERfVU5LTk9XTiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiBTUERfRVJST1IiKTsKKwl9CisKKwlwcmludGsoIiB0dCAlcCwgdHRwb3J0ICVkIiwgdWRldi0+dHQsIHVkZXYtPnR0cG9ydCk7CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgICAgICAgICAgICAgICIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwcmludGsoIiAlMnUiLCBpKTsKKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICB0b2dnbGUwKElOKSA6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXByaW50aygiICUydSIsICh1ZGV2LT50b2dnbGVbMF0gJiAoMSA8PCBpKSkgPyAxIDogMCk7CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgdG9nZ2xlMShPVVQpOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwcmludGsoIiAlMnUiLCAodWRldi0+dG9nZ2xlWzFdICYgKDEgPDwgaSkpID8gMSA6IDApOworCXByaW50aygiXG4iKTsKKworCisJZGV2X2RiZyhkZXYsICIgICAgICAgZXBtYXhwX2luICAgOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh1ZGV2LT5lcF9pbltpXSkKKwkJCXByaW50aygiICUydSIsCisJCQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmVwX2luW2ldLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJfQorCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIGVwbWF4cF9vdXQgIDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodWRldi0+ZXBfb3V0W2ldKQorCQkJcHJpbnRrKCIgJTJ1IiwKKwkJCSAgICAgbGUxNl90b19jcHUodWRldi0+ZXBfb3V0W2ldLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJfQorCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAicGFyZW50ICVwLCBidXMgJXBcbiIsIHVkZXYtPnBhcmVudCwgdWRldi0+YnVzKTsKKworCWRldl9kYmcoZGV2LCAiZGVzY3JpcHRvciAlcCwgY29uZmlnICVwLCBhY3Rjb25maWcgJXAsICIKKwkJInJhd2Rlc2NyaXB0b3JzICVwXG4iLCAmdWRldi0+ZGVzY3JpcHRvciwgdWRldi0+Y29uZmlnLAorCQl1ZGV2LT5hY3Rjb25maWcsIHVkZXYtPnJhd2Rlc2NyaXB0b3JzKTsKKworCWRldl9kYmcoZGV2LCAiaGF2ZV9sYW5naWQgJWQsIHN0cmluZ19sYW5naWQgJWRcbiIsCisJCXVkZXYtPmhhdmVfbGFuZ2lkLCB1ZGV2LT5zdHJpbmdfbGFuZ2lkKTsKKworCWRldl9kYmcoZGV2LCAibWF4Y2hpbGQgJWQsIGNoaWxkcmVuICVwXG4iLAorCQl1ZGV2LT5tYXhjaGlsZCwgdWRldi0+Y2hpbGRyZW4pOworfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3JlcXVlc3RfdHlwZShfX3U4IHJ0KQoreworCXN3aXRjaCAocnQgJiBVU0JfUkVDSVBfTUFTSykgeworCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKKwkJcHJpbnRrKCJERVZJQ0UiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgorCQlwcmludGsoIklOVEVSRiIpOworCQlicmVhazsKKwljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJcHJpbnRrKCJFTkRQT0kiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVDSVBfT1RIRVI6CisJCXByaW50aygiT1RIRVIgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiLS0tLS0tIik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3VzYl9jdHJscmVxdWVzdChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQpCit7CisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKCIgICAgICAlcyA6IG51bGwgcG9pbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50aygiICAgICAgICIpOworCXByaW50aygiYlJlcXVlc3RUeXBlKCUwMlgpICIsIGNtZC0+YlJlcXVlc3RUeXBlKTsKKwlwcmludGsoImJSZXF1ZXN0KCUwMlgpICIgLCBjbWQtPmJSZXF1ZXN0KTsKKwlwcmludGsoIndWYWx1ZSglMDRYKSAiLCBjbWQtPndWYWx1ZSk7CisJcHJpbnRrKCJ3SW5kZXgoJTA0WCkgIiwgY21kLT53SW5kZXgpOworCXByaW50aygid0xlbmd0aCglMDRYKSAiLCBjbWQtPndMZW5ndGgpOworCisJcHJpbnRrKCJcbiAgICAgICAiKTsKKworCWlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9TVEFOREFSRCkgeworCQlwcmludGsoIlNUQU5EQVJEICIpOworCQlzd2l0Y2ggKGNtZC0+YlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCQlwcmludGsoIkdFVF9TVEFUVVMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJCXByaW50aygiQ0xFQVJfRkVBVCIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJCXByaW50aygiU0VUX0ZFQVQgICIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCXByaW50aygiU0VUX0FERFJSUyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJCXByaW50aygiR0VUX0RFU0NSSSIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfREVTQ1JJUFRPUjoKKwkJCXByaW50aygiU0VUX0RFU0NSSSIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJCXByaW50aygiR0VUX0NPTkZJRyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJCXByaW50aygiU0VUX0NPTkZJRyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgorCQkJcHJpbnRrKCJHRVRfSU5URVJGIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCQlwcmludGsoIlNFVF9JTlRFUkYiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU1lOQ0hfRlJBTUU6CisJCQlwcmludGsoIlNZTkNfRlJBTUUiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJSRVEoJTAyWCkgIiwgY21kLT5iUmVxdWVzdCk7CisJCX0KKworCQlwcmludGsoIiAiKTsKKwkJdXNiaXBfZHVtcF9yZXF1ZXN0X3R5cGUoY21kLT5iUmVxdWVzdFR5cGUpOworCisJfSBlbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9DTEFTUykKKwkJcHJpbnRrKCJDTEFTUyAgICIpOworCisJZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfVkVORE9SKQorCQlwcmludGsoIlZFTkRPUiAgIik7CisKKwllbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9SRVNFUlZFRCkKKwkJcHJpbnRrKCJSRVNFUlZFRCIpOworCisJcHJpbnRrKCJcbiIpOworfQorCit2b2lkIHVzYmlwX2R1bXBfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoIXVyYikgeworCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjolczogdXJiOiBudWxsIHBvaW50ZXIhIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCF1cmItPmRldikgeworCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjolczogdXJiLT5kZXY6IG51bGwgcG9pbnRlciEhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIiAgIHVyYiAgICAgICAgICAgICAgICAgICA6JXBcbiIsIHVyYik7CisJZGV2X2RiZyhkZXYsICIgICBkZXYgICAgICAgICAgICAgICAgICAgOiVwXG4iLCB1cmItPmRldik7CisKKwl1c2JpcF9kdW1wX3VzYl9kZXZpY2UodXJiLT5kZXYpOworCisJZGV2X2RiZyhkZXYsICIgICBwaXBlICAgICAgICAgICAgICAgICAgOiUwOHggIiwgdXJiLT5waXBlKTsKKworCXVzYmlwX2R1bXBfcGlwZSh1cmItPnBpcGUpOworCisJZGV2X2RiZyhkZXYsICIgICBzdGF0dXMgICAgICAgICAgICAgICAgOiVkXG4iLCB1cmItPnN0YXR1cyk7CisJZGV2X2RiZyhkZXYsICIgICB0cmFuc2Zlcl9mbGFncyAgICAgICAgOiUwOFhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfYnVmZmVyICAgICAgIDolcFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDolZFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlkZXZfZGJnKGRldiwgIiAgIGFjdHVhbF9sZW5ndGggICAgICAgICA6JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2RiZyhkZXYsICIgICBzZXR1cF9wYWNrZXQgICAgICAgICAgOiVwXG4iLCB1cmItPnNldHVwX3BhY2tldCk7CisKKwlpZiAodXJiLT5zZXR1cF9wYWNrZXQgJiYgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKQorCQkJdXNiaXBfZHVtcF91c2JfY3RybHJlcXVlc3QoCisJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+c2V0dXBfcGFja2V0KTsKKworCWRldl9kYmcoZGV2LCAiICAgc3RhcnRfZnJhbWUgICAgICAgICAgIDolZFxuIiwgdXJiLT5zdGFydF9mcmFtZSk7CisJZGV2X2RiZyhkZXYsICIgICBudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkXG4iLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwlkZXZfZGJnKGRldiwgIiAgIGludGVydmFsICAgICAgICAgICAgICA6JWRcbiIsIHVyYi0+aW50ZXJ2YWwpOworCWRldl9kYmcoZGV2LCAiICAgZXJyb3JfY291bnQgICAgICAgICAgIDolZFxuIiwgdXJiLT5lcnJvcl9jb3VudCk7CisJZGV2X2RiZyhkZXYsICIgICBjb250ZXh0ICAgICAgICAgICAgICAgOiVwXG4iLCB1cmItPmNvbnRleHQpOworCWRldl9kYmcoZGV2LCAiICAgY29tcGxldGUgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5jb21wbGV0ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9kdW1wX3VyYik7CisKK3ZvaWQgdXNiaXBfZHVtcF9oZWFkZXIoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXVkYmcoIkJBU0U6IGNtZCAldSBzZXEgJXUgZGV2aWQgJXUgZGlyICV1IGVwICV1XG4iLAorCQkJcGR1LT5iYXNlLmNvbW1hbmQsCisJCQlwZHUtPmJhc2Uuc2VxbnVtLAorCQkJcGR1LT5iYXNlLmRldmlkLAorCQkJcGR1LT5iYXNlLmRpcmVjdGlvbiwKKwkJCXBkdS0+YmFzZS5lcCk7CisKKwlzd2l0Y2ggKHBkdS0+YmFzZS5jb21tYW5kKSB7CisJY2FzZSBVU0JJUF9DTURfU1VCTUlUOgorCQl1ZGJnKCJDTURfU1VCTUlUOiB4X2ZsYWdzICV1IHhfbGVuICV1IHNmICV1ICNwICV1IGl2ICV1XG4iLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2ZsYWdzLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQuc3RhcnRfZnJhbWUsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQubnVtYmVyX29mX3BhY2tldHMsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQuaW50ZXJ2YWwpOworCQkJCWJyZWFrOworCWNhc2UgVVNCSVBfQ01EX1VOTElOSzoKKwkJdWRiZygiQ01EX1VOTElOSzogc2VxICV1XG4iLCBwZHUtPnUuY21kX3VubGluay5zZXFudW0pOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9TVUJNSVQ6CisJCXVkYmcoIlJFVF9TVUJNSVQ6IHN0ICVkIGFsICV1IHNmICVkIGVjICVkXG4iLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LnN0YXR1cywKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5hY3R1YWxfbGVuZ3RoLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LnN0YXJ0X2ZyYW1lLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LmVycm9yX2NvdW50KTsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCXVkYmcoIlJFVF9VTkxJTks6IHN0YXR1cyAlZFxuIiwgcGR1LT51LnJldF91bmxpbmsuc3RhdHVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UIFJFQUNIRUQgKi8KKwkJdWRiZygiVU5LTk9XTlxuIik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZHVtcF9oZWFkZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB0aHJlYWQgcm91dGluZXMgKi8KKworaW50IHVzYmlwX3RocmVhZCh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqdXQgPSBwYXJhbTsKKworCWlmICghdXQpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9ja19rZXJuZWwoKTsKKwlkYWVtb25pemUodXQtPm5hbWUpOworCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKKwl1dC0+dGhyZWFkID0gY3VycmVudDsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBzcnYucmIgbXVzdCB3YWl0IGZvciByeF90aHJlYWQgc3RhcnRpbmcgKi8KKwljb21wbGV0ZSgmdXQtPnRocmVhZF9kb25lKTsKKworCS8qIHN0YXJ0IG9mIHdoaWxlIGxvb3AgKi8KKwl1dC0+bG9vcF9vcHModXQpOworCisJLyogZW5kIG9mIGxvb3AgKi8KKwl1dC0+dGhyZWFkID0gTlVMTDsKKworCWNvbXBsZXRlX2FuZF9leGl0KCZ1dC0+dGhyZWFkX2RvbmUsIDApOworfQorCit2b2lkIHVzYmlwX3N0YXJ0X3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJLyoKKwkgKiB0aHJlYWRzIGFyZSBpbnZva2VkIHBlciBvbmUgZGV2aWNlIChwZXIgb25lIGNvbm5lY3Rpb24pLgorCSAqLworCWtlcm5lbF90aHJlYWQodXNiaXBfdGhyZWFkLCAodm9pZCAqKSZ1ZC0+dGNwX3J4LCAwKTsKKwlrZXJuZWxfdGhyZWFkKHVzYmlwX3RocmVhZCwgKHZvaWQgKikmdWQtPnRjcF90eCwgMCk7CisKKwkvKiBjb25maXJtIHRocmVhZHMgYXJlIHN0YXJ0aW5nICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF9yeC50aHJlYWRfZG9uZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF90eC50aHJlYWRfZG9uZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdGFydF90aHJlYWRzKTsKKwordm9pZCB1c2JpcF9zdG9wX3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJLyoga2lsbCB0aHJlYWRzIHJlbGF0ZWQgdG8gdGhpcyBzZGV2LCBpZiB2LmMuIGV4aXN0cyAqLworCWlmICh1ZC0+dGNwX3J4LnRocmVhZCAhPSBOVUxMKSB7CisJCXNlbmRfc2lnKFNJR0tJTEwsIHVkLT50Y3BfcngudGhyZWFkLCAxKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF9yeC50aHJlYWRfZG9uZSk7CisJCXVkYmcoInJ4X3RocmVhZCBmb3IgdWQgJXAgaGFzIGZpbmlzaGVkXG4iLCB1ZCk7CisJfQorCisJaWYgKHVkLT50Y3BfdHgudGhyZWFkICE9IE5VTEwpIHsKKwkJc2VuZF9zaWcoU0lHS0lMTCwgdWQtPnRjcF90eC50aHJlYWQsIDEpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1ZC0+dGNwX3R4LnRocmVhZF9kb25lKTsKKwkJdWRiZygidHhfdGhyZWFkIGZvciB1ZCAlcCBoYXMgZmluaXNoZWRcbiIsIHVkKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdG9wX3RocmVhZHMpOworCit2b2lkIHVzYmlwX3Rhc2tfaW5pdChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQsIGNoYXIgKm5hbWUsCisJCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKikpCit7CisJdXQtPnRocmVhZCA9IE5VTEw7CisJaW5pdF9jb21wbGV0aW9uKCZ1dC0+dGhyZWFkX2RvbmUpOworCXV0LT5uYW1lID0gbmFtZTsKKwl1dC0+bG9vcF9vcHMgPSBsb29wX29wczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3Rhc2tfaW5pdCk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHNvY2tldCByb3V0aW5lcyAqLworCisgLyogIFNlbmQvcmVjZWl2ZSBtZXNzYWdlcyBvdmVyIFRDUC9JUC4gSSByZWZlciBkcml2ZXJzL2Jsb2NrL25iZC5jICovCitpbnQgdXNiaXBfeG1pdChpbnQgc2VuZCwgc3RydWN0IHNvY2tldCAqc29jaywgY2hhciAqYnVmLAorCSAgICAgICBpbnQgc2l6ZSwgaW50IG1zZ19mbGFncykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgdG90YWwgPSAwOworCisJLyogZm9yIGJsb2NrcyBvZiBpZiAoZGJnX2ZsYWdfeG1pdCkgKi8KKwljaGFyICpicCA9IGJ1ZjsKKwlpbnQgb3NpemUgPSBzaXplOworCisJZGJnX3htaXQoImVudGVyXG4iKTsKKworCWlmICghc29jayB8fCAhYnVmIHx8ICFzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgYXJnLCBzb2NrICVwIGJ1ZmYgJXAgc2l6ZSAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzb2NrLCBidWYsIHNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCWlmIChkYmdfZmxhZ194bWl0KSB7CisJCWlmIChzZW5kKSB7CisJCQlpZiAoIWluX2ludGVycnVwdCgpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlLTEwczoiLCBjdXJyZW50LT5jb21tKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiaW50ZXJ1cHQgIDoiKTsKKworCQkJcHJpbnRrKCIlczogc2VuZGluZy4uLiAsIHNvY2sgJXAsIGJ1ZiAlcCwgIgorCQkJICAgICAgICJzaXplICVkLCBtc2dfZmxhZ3MgJWRcbiIsIF9fZnVuY19fLAorCQkJICAgICAgIHNvY2ssIGJ1Ziwgc2l6ZSwgbXNnX2ZsYWdzKTsKKwkJCXVzYmlwX2R1bXBfYnVmZmVyKGJ1Ziwgc2l6ZSk7CisJCX0KKwl9CisKKworCWRvIHsKKwkJc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKKwkJaW92Lmlvdl9iYXNlICAgID0gYnVmOworCQlpb3YuaW92X2xlbiAgICAgPSBzaXplOworCQltc2cubXNnX25hbWUgICAgPSBOVUxMOworCQltc2cubXNnX25hbWVsZW4gPSAwOworCQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCQltc2cubXNnX25hbWVsZW4gICAgPSAwOworCQltc2cubXNnX2ZsYWdzICAgICAgPSBtc2dfZmxhZ3MgfCBNU0dfTk9TSUdOQUw7CisKKwkJaWYgKHNlbmQpCisJCQlyZXN1bHQgPSBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBzaXplKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSwKKwkJCQkJCQkJTVNHX1dBSVRBTEwpOworCisJCWlmIChyZXN1bHQgPD0gMCkgeworCQkJdWRiZygidXNiaXBfeG1pdDogJXMgc29jayAlcCBidWYgJXAgc2l6ZSAldSByZXQgJWQiCisJCQkJCSIgdG90YWwgJWRcbiIsCisJCQkJCXNlbmQgPyAic2VuZCIgOiAicmVjZWl2ZSIsIHNvY2ssIGJ1ZiwKKwkJCQkJc2l6ZSwgcmVzdWx0LCB0b3RhbCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXNpemUgLT0gcmVzdWx0OworCQlidWYgKz0gcmVzdWx0OworCQl0b3RhbCArPSByZXN1bHQ7CisKKwl9IHdoaWxlIChzaXplID4gMCk7CisKKworCWlmIChkYmdfZmxhZ194bWl0KSB7CisJCWlmICghc2VuZCkgeworCQkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6IiwgY3VycmVudC0+Y29tbSk7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImludGVydXB0ICA6Iik7CisKKwkJCXByaW50aygidXNiaXBfeG1pdDogcmVjZWl2aW5nLi4uLlxuIik7CisJCQl1c2JpcF9kdW1wX2J1ZmZlcihicCwgb3NpemUpOworCQkJcHJpbnRrKCJ1c2JpcF94bWl0OiByZWNlaXZlZCwgb3NpemUgJWQgcmV0ICVkIHNpemUgJWQgIgorCQkJCQkidG90YWwgJWRcbiIsIG9zaXplLCByZXN1bHQsIHNpemUsCisJCQkJCXRvdGFsKTsKKwkJfQorCisJCWlmIChzZW5kKQorCQkJcHJpbnRrKCJ1c2JpcF94bWl0OiBzZW5kLCB0b3RhbCAlZFxuIiwgdG90YWwpOworCX0KKworCXJldHVybiB0b3RhbDsKKworZXJyOgorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF94bWl0KTsKKworCisvKiBub3cgYSB1c3JsYW5kIHV0aWxpdHkgc2hvdWxkIHNldCBvcHRpb25zLiAqLworI2lmIDAKK2ludCBzZXRxdWlja2FjayhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJbW1fc2VnbWVudF90IG9sZGZzOworCWludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfUVVJQ0tBQ0ssCisJCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOworCXNldF9mcyhvbGRmcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2V0bm9kZWxheShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJbW1fc2VnbWVudF90IG9sZGZzOworCWludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKwkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7CisJc2V0X2ZzKG9sZGZzKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzZXRrZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAorCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKKwlzZXRfZnMob2xkZnMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzZXRyZXVzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJc29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOworfQorI2VuZGlmCisKK3N0cnVjdCBzb2NrZXQgKnNvY2tmZF90b19zb2NrZXQodW5zaWduZWQgaW50IHNvY2tmZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQ7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWZpbGUgPSBmZ2V0KHNvY2tmZCk7CisJaWYgKCFmaWxlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgc29ja2ZkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoIWlub2RlIHx8ICFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzb2NrZXQgPSBTT0NLRVRfSShpbm9kZSk7CisKKwlyZXR1cm4gc29ja2V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja2ZkX3RvX3NvY2tldCk7CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcGR1IHJvdXRpbmVzICovCisKKy8qIHRoZXJlIG1heSBiZSBtb3JlIGNhc2VzIHRvIHR3ZWFrIHRoZSBmbGFncy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHdlYWtfdHJhbnNmZXJfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQoreworCisJaWYgKGZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApCisJCS8qCisJCSAqIHZoY2lfaGNkIGRvZXMgbm90IHByb3ZpZGUgRE1BLW1hcHBlZCBJL08uIFRoZSB1cHBlcgorCQkgKiBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byBzZXQgdGhpcyBmbGFnLiBUaGUgcmVtb3RlCisJCSAqIHVzYmlwLmtvIGRvZXMgbm90IHN0aWxsIHBlcmZvcm0gRE1BLW1hcHBlZCBJL08gZm9yCisJCSAqIERNQS1jYXBsYWJsZSBob3N0IGNvbnRyb2xsZXJzLiBTbywgY2xlYXIgdGhpcyBmbGFnLgorCQkgKi8KKwkJZmxhZ3MgJj0gflVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJaWYgKGZsYWdzICYgVVJCX05PX1NFVFVQX0RNQV9NQVApCisJCWZsYWdzICY9IH5VUkJfTk9fU0VUVVBfRE1BX01BUDsKKworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIHZvaWQgdXNiaXBfcGFja19jbWRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLAorCQkJCQkJCQlpbnQgcGFjaykKK3sKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF9zdWJtaXQgKnNwZHUgPSAmcGR1LT51LmNtZF9zdWJtaXQ7CisKKwkvKgorCSAqIFNvbWUgbWVtYmVycyBhcmUgbm90IHN0aWxsIGltcGxlbWVudGVkIGluIHVzYmlwLiBJIGhvcGUgdGhpcyBpc3N1ZQorCSAqIHdpbGwgYmUgZGlzY3Vzc2VkIHdoZW4gdXNiaXAgaXMgcG9ydGVkIHRvIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCSAqLworCWlmIChwYWNrKSB7CisJCS8qIHZoY2lfdHguYyAqLworCQlzcGR1LT50cmFuc2Zlcl9mbGFncyA9CisJCQkJdHdlYWtfdHJhbnNmZXJfZmxhZ3ModXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCXNwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXNwZHUtPnN0YXJ0X2ZyYW1lCQk9IHVyYi0+c3RhcnRfZnJhbWU7CisJCXNwZHUtPm51bWJlcl9vZl9wYWNrZXRzCQk9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCXNwZHUtPmludGVydmFsCQkJPSB1cmItPmludGVydmFsOworCX0gZWxzZSAgeworCQkvKiBzdHViX3J4LmMgKi8KKwkJdXJiLT50cmFuc2Zlcl9mbGFncyAgICAgICAgID0gc3BkdS0+dHJhbnNmZXJfZmxhZ3M7CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc3BkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJdXJiLT5zdGFydF9mcmFtZSAgICAgICAgICAgID0gc3BkdS0+c3RhcnRfZnJhbWU7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgICAgICA9IHNwZHUtPm51bWJlcl9vZl9wYWNrZXRzOworCQl1cmItPmludGVydmFsICAgICAgICAgICAgICAgPSBzcGR1LT5pbnRlcnZhbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfcmV0X3N1Ym1pdChzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0ICpycGR1ID0gJnBkdS0+dS5yZXRfc3VibWl0OworCisJaWYgKHBhY2spIHsKKwkJLyogc3R1Yl90eC5jICovCisKKwkJcnBkdS0+c3RhdHVzCQk9IHVyYi0+c3RhdHVzOworCQlycGR1LT5hY3R1YWxfbGVuZ3RoCT0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlycGR1LT5zdGFydF9mcmFtZQk9IHVyYi0+c3RhcnRfZnJhbWU7CisJCXJwZHUtPmVycm9yX2NvdW50CT0gdXJiLT5lcnJvcl9jb3VudDsKKwl9IGVsc2UgeworCQkvKiB2aGNpX3J4LmMgKi8KKworCQl1cmItPnN0YXR1cwkJPSBycGR1LT5zdGF0dXM7CisJCXVyYi0+YWN0dWFsX2xlbmd0aAk9IHJwZHUtPmFjdHVhbF9sZW5ndGg7CisJCXVyYi0+c3RhcnRfZnJhbWUJPSBycGR1LT5zdGFydF9mcmFtZTsKKwkJdXJiLT5lcnJvcl9jb3VudAk9IHJwZHUtPmVycm9yX2NvdW50OworCX0KK30KKworCit2b2lkIHVzYmlwX3BhY2tfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgY21kLAorCQkJCQkJCQlpbnQgcGFjaykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJdXNiaXBfcGFja19jbWRfc3VibWl0KHBkdSwgdXJiLCBwYWNrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQl1c2JpcF9wYWNrX3JldF9zdWJtaXQocGR1LCB1cmIsIHBhY2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gY29tbWFuZCIpOworCQkvKiBOT1RSRUFDSEVEICovCisJCS8qIEJVRygpOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3BhY2tfcGR1KTsKKworCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9iYXNpYyhzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLCBpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQliYXNlLT5jb21tYW5kCT0gY3B1X3RvX2JlMzIoYmFzZS0+Y29tbWFuZCk7CisJCWJhc2UtPnNlcW51bQk9IGNwdV90b19iZTMyKGJhc2UtPnNlcW51bSk7CisJCWJhc2UtPmRldmlkCT0gY3B1X3RvX2JlMzIoYmFzZS0+ZGV2aWQpOworCQliYXNlLT5kaXJlY3Rpb24JPSBjcHVfdG9fYmUzMihiYXNlLT5kaXJlY3Rpb24pOworCQliYXNlLT5lcAk9IGNwdV90b19iZTMyKGJhc2UtPmVwKTsKKwl9IGVsc2UgeworCQliYXNlLT5jb21tYW5kCT0gYmUzMl90b19jcHUoYmFzZS0+Y29tbWFuZCk7CisJCWJhc2UtPnNlcW51bQk9IGJlMzJfdG9fY3B1KGJhc2UtPnNlcW51bSk7CisJCWJhc2UtPmRldmlkCT0gYmUzMl90b19jcHUoYmFzZS0+ZGV2aWQpOworCQliYXNlLT5kaXJlY3Rpb24JPSBiZTMyX3RvX2NwdShiYXNlLT5kaXJlY3Rpb24pOworCQliYXNlLT5lcAk9IGJlMzJfdG9fY3B1KGJhc2UtPmVwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX2NtZF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKSB7CisJCXBkdS0+dHJhbnNmZXJfZmxhZ3MgPSBjcHVfdG9fYmUzMihwZHUtPnRyYW5zZmVyX2ZsYWdzKTsKKworCQljcHVfdG9fYmUzMnMoJnBkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWNwdV90b19iZTMycygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWNwdV90b19iZTMycygmcGR1LT5pbnRlcnZhbCk7CisJfSBlbHNlIHsKKwkJcGR1LT50cmFuc2Zlcl9mbGFncyA9IGJlMzJfdG9fY3B1KHBkdS0+dHJhbnNmZXJfZmxhZ3MpOworCisJCWJlMzJfdG9fY3B1cygmcGR1LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXJ0X2ZyYW1lKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPmludGVydmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX3JldF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0ICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKSB7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGF0dXMpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWNwdV90b19iZTMycygmcGR1LT5lcnJvcl9jb3VudCk7CisJfSBlbHNlIHsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXR1cyk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5hY3R1YWxfbGVuZ3RoKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXJ0X2ZyYW1lKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPmVycm9yX2NvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX2NtZF91bmxpbmsoc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKQorCQlwZHUtPnNlcW51bSA9IGNwdV90b19iZTMyKHBkdS0+c2VxbnVtKTsKKwllbHNlCisJCXBkdS0+c2VxbnVtID0gYmUzMl90b19jcHUocGR1LT5zZXFudW0pOworfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9yZXRfdW5saW5rKHN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluayAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPnN0YXR1cyk7CisJZWxzZQorCQliZTMyX3RvX2NwdXMoJnBkdS0+c3RhdHVzKTsKK30KKwordm9pZCB1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBpbnQgc2VuZCkKK3sKKwlfX3UzMiBjbWQgPSAwOworCisJaWYgKHNlbmQpCisJCWNtZCA9IHBkdS0+YmFzZS5jb21tYW5kOworCisJY29ycmVjdF9lbmRpYW5fYmFzaWMoJnBkdS0+YmFzZSwgc2VuZCk7CisKKwlpZiAoIXNlbmQpCisJCWNtZCA9IHBkdS0+YmFzZS5jb21tYW5kOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CisJCWNvcnJlY3RfZW5kaWFuX2NtZF9zdWJtaXQoJnBkdS0+dS5jbWRfc3VibWl0LCBzZW5kKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQljb3JyZWN0X2VuZGlhbl9yZXRfc3VibWl0KCZwZHUtPnUucmV0X3N1Ym1pdCwgc2VuZCk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfQ01EX1VOTElOSzoKKwkJY29ycmVjdF9lbmRpYW5fY21kX3VubGluaygmcGR1LT51LmNtZF91bmxpbmssIHNlbmQpOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCWNvcnJlY3RfZW5kaWFuX3JldF91bmxpbmsoJnBkdS0+dS5yZXRfdW5saW5rLCBzZW5kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAqLworCQllcnIoInVua25vd24gY29tbWFuZCBpbiBwZHUgaGVhZGVyOiAlZCIsIGNtZCk7CisJCS8qIEJVRygpOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbik7CisKK3N0YXRpYyB2b2lkIHVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oCisJCQkJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvLAorCQkJCWludCBzZW5kKQoreworCS8qIGRvZXMgbm90IG5lZWQgYWxsIG1lbWJlcnMuIGJ1dCBjb3B5IGFsbCBzaW1wbHkuICovCisJaWYgKHNlbmQpIHsKKwkJaXNvLT5vZmZzZXQJPSBjcHVfdG9fYmUzMihpc28tPm9mZnNldCk7CisJCWlzby0+bGVuZ3RoCT0gY3B1X3RvX2JlMzIoaXNvLT5sZW5ndGgpOworCQlpc28tPnN0YXR1cwk9IGNwdV90b19iZTMyKGlzby0+c3RhdHVzKTsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoID0gY3B1X3RvX2JlMzIoaXNvLT5hY3R1YWxfbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlpc28tPm9mZnNldAk9IGJlMzJfdG9fY3B1KGlzby0+b2Zmc2V0KTsKKwkJaXNvLT5sZW5ndGgJPSBiZTMyX3RvX2NwdShpc28tPmxlbmd0aCk7CisJCWlzby0+c3RhdHVzCT0gYmUzMl90b19jcHUoaXNvLT5zdGF0dXMpOworCQlpc28tPmFjdHVhbF9sZW5ndGggPSBiZTMyX3RvX2NwdShpc28tPmFjdHVhbF9sZW5ndGgpOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiaXBfcGFja19pc28oc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvLAorCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqdWlzbywgaW50IHBhY2spCit7CisJaWYgKHBhY2spIHsKKwkJaXNvLT5vZmZzZXQJCT0gdWlzby0+b2Zmc2V0OworCQlpc28tPmxlbmd0aAkJPSB1aXNvLT5sZW5ndGg7CisJCWlzby0+c3RhdHVzCQk9IHVpc28tPnN0YXR1czsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoCT0gdWlzby0+YWN0dWFsX2xlbmd0aDsKKwl9IGVsc2UgeworCQl1aXNvLT5vZmZzZXQJCT0gaXNvLT5vZmZzZXQ7CisJCXVpc28tPmxlbmd0aAkJPSBpc28tPmxlbmd0aDsKKwkJdWlzby0+c3RhdHVzCQk9IGlzby0+c3RhdHVzOworCQl1aXNvLT5hY3R1YWxfbGVuZ3RoCT0gaXNvLT5hY3R1YWxfbGVuZ3RoOworCX0KK30KKworCisvKiBtdXN0IGZyZWUgYnVmZmVyICovCit2b2lkICp1c2JpcF9hbGxvY19pc29fZGVzY19wZHUoc3RydWN0IHVyYiAqdXJiLCBzc2l6ZV90ICpidWZmbGVuKQoreworCXZvaWQgKmJ1ZmY7CisJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvOworCWludCBucCA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJc3NpemVfdCBzaXplID0gbnAgKiBzaXplb2YoKmlzbyk7CisJaW50IGk7CisKKwlidWZmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKKwkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKKworCQl1c2JpcF9wYWNrX2lzbyhpc28sICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldLCAxKTsKKwkJdXNiaXBfaXNvX3Bha2NldF9jb3JyZWN0X2VuZGlhbihpc28sIDEpOworCX0KKworCSpidWZmbGVuID0gc2l6ZTsKKworCXJldHVybiBidWZmOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KTsKKworLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KK2ludCB1c2JpcF9yZWN2X2lzbyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXZvaWQgKmJ1ZmY7CisJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvOworCWludCBucCA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJaW50IHNpemUgPSBucCAqIHNpemVvZigqaXNvKTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKCF1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBteSBCbHVldG9vdGggZG9uZ2xlIGdldHMgSVNPIFVSQnMgd2hpY2ggYXJlIG5wID0gMCAqLworCWlmIChucCA9PSAwKSB7CisJCS8qIHVpbmZvKCJpc28gbnAgPT0gMFxuIik7ICovCisJCS8qIHVzYmlwX2R1bXBfdXJiKHVyYik7ICovCisJCXJldHVybiAwOworCX0KKworCWJ1ZmYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCBidWZmLCBzaXplLCAwKTsKKwlpZiAocmV0ICE9IHNpemUpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgInJlY3YgaXNvX2ZyYW1lX2Rlc2NyaXB0b3IsICVkXG4iLAorCQkJcmV0KTsKKwkJa2ZyZWUoYnVmZik7CisKKwkJaWYgKHVkLT5zaWRlID09IFVTQklQX1NUVUIpCisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJZWxzZQorCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnA7IGkrKykgeworCQlpc28gPSBidWZmICsgKGkgKiBzaXplb2YoKmlzbykpOworCisJCXVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oaXNvLCAwKTsKKwkJdXNiaXBfcGFja19pc28oaXNvLCAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXSwgMCk7CisJfQorCisKKwlrZnJlZShidWZmKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X2lzbyk7CisKKworLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KK2ludCB1c2JpcF9yZWN2X3hidWZmKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKworCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKSB7CisJCS8qIHN0dWJfcnguYyAqLworCQkvKiB0aGUgZGlyZWN0aW9uIG9mIHVyYiBtdXN0IGJlIE9VVC4gKi8KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkKKwkJCXJldHVybiAwOworCisJCXNpemUgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJfSBlbHNlIHsKKwkJLyogdmhjaV9yeC5jICovCisJCS8qIHRoZSBkaXJlY3Rpb24gb2YgdXJiIG11c3QgYmUgSU4uICovCisJCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKQorCQkJcmV0dXJuIDA7CisKKwkJc2l6ZSA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKKwkvKiBubyBuZWVkIHRvIHJlY3YgeGJ1ZmYgKi8KKwlpZiAoIShzaXplID4gMCkpCisJCXJldHVybiAwOworCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSBzaXplLCAwKTsKKwlpZiAocmV0ICE9IHNpemUpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgInJlY3YgeGJ1ZiwgJWRcbiIsIHJldCk7CisJCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKSB7CisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC1FUElQRTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X3hidWZmKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2JpcF9jb21tb25faW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiIiBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmlwX2NvbW1vbl9leGl0KHZvaWQpCit7CisJcmV0dXJuOworfQorCisKKworCittb2R1bGVfaW5pdCh1c2JpcF9jb21tb25faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JpcF9jb21tb25fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTg2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpZm5kZWYgX19WSENJX0NPTU1PTl9ICisjZGVmaW5lIF9fVkhDSV9DT01NT05fSAorCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBkZWZpbmUgbWFjcm9zIHRvIHByaW50IG1lc3NhZ2VzCisgKi8KKworLyoqCisgKiB1ZGJnIC0gcHJpbnQgZGVidWcgbWVzc2FnZXMgaWYgQ09ORklHX1VTQl9ERUJVRyBpcyBkZWZpbmVkCisgKiBAZm10OgorICogQGFyZ3M6CisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKworI2RlZmluZSB1ZGJnKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6KCVzLCVkKSAlczogIiBmbXQsCQlcCisJCQkoaW5faW50ZXJydXB0KCkgPyAiaW50ZXJydXB0IiA6IChjdXJyZW50KS0+Y29tbSksXAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlICAvKiBDT05GSUdfVVNCX0RFQlVHICovCisKKyNkZWZpbmUgdWRiZyhmbXQsIGFyZ3MuLi4pCQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0RFQlVHICovCisKKworZW51bSB7CisJdXNiaXBfZGVidWdfeG1pdAk9ICgxIDw8IDApLAorCXVzYmlwX2RlYnVnX3N5c2ZzCT0gKDEgPDwgMSksCisJdXNiaXBfZGVidWdfdXJiCQk9ICgxIDw8IDIpLAorCXVzYmlwX2RlYnVnX2VoCQk9ICgxIDw8IDMpLAorCisJdXNiaXBfZGVidWdfc3R1Yl9jbXAJPSAoMSA8PCA4KSwKKwl1c2JpcF9kZWJ1Z19zdHViX2Rldgk9ICgxIDw8IDkpLAorCXVzYmlwX2RlYnVnX3N0dWJfcngJPSAoMSA8PCAxMCksCisJdXNiaXBfZGVidWdfc3R1Yl90eAk9ICgxIDw8IDExKSwKKworCXVzYmlwX2RlYnVnX3ZoY2lfcmgJPSAoMSA8PCA4KSwKKwl1c2JpcF9kZWJ1Z192aGNpX2hjCT0gKDEgPDwgOSksCisJdXNiaXBfZGVidWdfdmhjaV9yeAk9ICgxIDw8IDEwKSwKKwl1c2JpcF9kZWJ1Z192aGNpX3R4CT0gKDEgPDwgMTEpLAorCXVzYmlwX2RlYnVnX3ZoY2lfc3lzZnMgID0gKDEgPDwgMTIpCit9OworCisjZGVmaW5lIGRiZ19mbGFnX3htaXQJCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfeG1pdCkKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV9yaAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfcmgpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfaGMJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX2hjKQorI2RlZmluZSBkYmdfZmxhZ192aGNpX3J4CSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9yeCkKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV90eAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfdHgpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfc3lzZnMJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3N5c2ZzKQorI2RlZmluZSBkYmdfZmxhZ19zdHViX3J4CSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfc3R1Yl9yeCkKKyNkZWZpbmUgZGJnX2ZsYWdfc3R1Yl90eAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3N0dWJfdHgpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWc7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfdXNiaXBfZGVidWc7CisKKyNkZWZpbmUgZGJnX3dpdGhfZmxhZyhmbGFnLCBmbXQsIGFyZ3MuLi4pCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGZsYWcgJiB1c2JpcF9kZWJ1Z19mbGFnKQkJXAorCQkJdWRiZyhmbXQgLCAjI2FyZ3MpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGJnX3N5c2ZzKGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N5c2ZzLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ194bWl0KGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3htaXQsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3VyYihmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z191cmIsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX2VoKGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX2VoLCBmbXQgLCAjI2FyZ3MpCisKKyNkZWZpbmUgZGJnX3ZoY2lfcmgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3JoLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX2hjKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9oYywgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9yeChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfcngsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3ZoY2lfdHgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3R4LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX3N5c2ZzKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9zeXNmcywgZm10ICwgIyNhcmdzKQorCisjZGVmaW5lIGRiZ19zdHViX2NtcChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfY21wLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ19zdHViX3J4KGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfc3R1Yl9yeCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfc3R1Yl90eChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfdHgsIGZtdCAsICMjYXJncykKKworCisvKioKKyAqIHVlcnIgLSBwcmludCBlcnJvciBtZXNzYWdlcworICogQGZtdDoKKyAqIEBhcmdzOgorICovCisjZGVmaW5lIHVlcnIoZm10LCBhcmdzLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiJS0xMHM6ICoqKkVSUk9SKioqICglcywlZCkgJXM6ICIgZm10LAlcCisJCQkoaW5faW50ZXJydXB0KCkgPyAiaW50ZXJydXB0IiA6IChjdXJyZW50KS0+Y29tbSksXAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogdWluZm8gLSBwcmludCBpbmZvcm1hdGlvbiBtZXNzYWdlcworICogQGZtdDoKKyAqIEBhcmdzOgorICovCisjZGVmaW5lIHVpbmZvKGZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXNiaXA6ICIgZm10ICwgIyMgYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVU0IvSVAgcmVxdWVzdCBoZWFkZXJzLgorICogQ3VycmVudGx5LCB3ZSBkZWZpbmUgNCByZXF1ZXN0IHR5cGVzOgorICoKKyAqICAtIENNRF9TVUJNSVQgdHJhbnNmZXJzIGEgVVNCIHJlcXVlc3QsIGNvcnJlc3BvbmRpbmcgdG8gdXNiX3N1Ym1pdF91cmIoKS4KKyAqICAgIChjbGllbnQgdG8gc2VydmVyKQorICogIC0gUkVUX1JFVFVSTiB0cmFuc2ZlcnMgdGhlIHJlc3VsdCBvZiBDTURfU1VCTUlULgorICogICAgKHNlcnZlciB0byBjbGllbnQpCisgKiAgLSBDTURfVU5MSU5LIHRyYW5zZmVycyBhbiB1bmxpbmsgcmVxdWVzdCBvZiBhIHBlbmRpbmcgVVNCIHJlcXVlc3QuCisgKiAgICAoY2xpZW50IHRvIHNlcnZlcikKKyAqICAtIFJFVF9VTkxJTksgdHJhbnNmZXJzIHRoZSByZXN1bHQgb2YgQ01EX1VOTElOSy4KKyAqICAgIChzZXJ2ZXIgdG8gY2xpZW50KQorICoKKyAqIE5vdGU6IFRoZSBiZWxvdyByZXF1ZXN0IGZvcm1hdHMgYXJlIGJhc2VkIG9uIHRoZSBVU0Igc3Vic3lzdGVtIG9mIExpbnV4LiBJdHMKKyAqIGRldGFpbHMgd2lsbCBiZSBkZWZpbmVkIHdoZW4gb3RoZXIgaW1wbGVtZW50YXRpb25zIGNvbWUuCisgKgorICoKKyAqLworCisvKgorICogQSBiYXNpYyBoZWFkZXIgZm9sbG93ZWQgYnkgb3RoZXIgYWRkaXRpb25hbCBoZWFkZXJzLgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljIHsKKyNkZWZpbmUgVVNCSVBfQ01EX1NVQk1JVAkweDAwMDEKKyNkZWZpbmUgVVNCSVBfQ01EX1VOTElOSwkweDAwMDIKKyNkZWZpbmUgVVNCSVBfUkVUX1NVQk1JVAkweDAwMDMKKyNkZWZpbmUgVVNCSVBfUkVUX1VOTElOSwkweDAwMDQKKwlfX3UzMiBjb21tYW5kOworCisJIC8qIHNlcXVlbmNpYWwgbnVtYmVyIHdoaWNoIGlkZW50aWZpZXMgcmVxdWVzdHMuCisJICAqIGluY3JlbWVudGVkIHBlciBjb25uZWN0aW9ucyAqLworCV9fdTMyIHNlcW51bTsKKworCS8qIGRldmlkIGlzIHVzZWQgdG8gc3BlY2lmeSBhIHJlbW90ZSBVU0IgZGV2aWNlIHVuaXF1ZWx5IGluc3RlYWQKKwkgKiBvZiBidXNudW0gYW5kIGRldm51bSBpbiBMaW51eC4gSW4gdGhlIGNhc2Ugb2YgTGludXggc3R1Yl9kcml2ZXIsCisJICogdGhpcyB2YWx1ZSBpcyAoKGJ1c251bSA8PCAxNikgfCBkZXZudW0pICovCisJX191MzIgZGV2aWQ7CisKKyNkZWZpbmUgVVNCSVBfRElSX09VVAkwCisjZGVmaW5lIFVTQklQX0RJUl9JTiAJMQorCV9fdTMyIGRpcmVjdGlvbjsKKwlfX3UzMiBlcDsgICAgIC8qIGVuZHBvaW50IG51bWJlciAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBDTURfU1VCTUlUIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0IHsKKwkvKiB0aGVzZSB2YWx1ZXMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBpbiBhIFVSQi4gKi8KKworCS8qIHRoZSBzYW1lIGluIGEgVVJCLiAqLworCV9fdTMyIHRyYW5zZmVyX2ZsYWdzOworCisJLyogc2V0IHRoZSBmb2xsb3dpbmcgZGF0YSBzaXplIChvdXQpLAorCSAqIG9yIGV4cGVjdGVkIHJlYWRpbmcgZGF0YSBzaXplIChpbikgKi8KKwlfX3MzMiB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJLyogaXQgaXMgZGlmZmljdWx0IGZvciB1c2JpcCB0byBzeW5jIGZyYW1lcyAocmVzZXJ2ZWQgb25seT8pICovCisJX19zMzIgc3RhcnRfZnJhbWU7CisKKwkvKiB0aGUgbnVtYmVyIG9mIGlzbyBkZXNjcmlwdG9ycyB0aGF0IGZvbGxvd3MgdGhpcyBoZWFkZXIgKi8KKwlfX3MzMiBudW1iZXJfb2ZfcGFja2V0czsKKworCS8qIHRoZSBtYXhpbXVtIHRpbWUgd2l0aGluIHdoaWNoIHRoaXMgcmVxdWVzdCB3b3JrcyBpbiBhIGhvc3QKKwkgKiBjb250cm9sbGVyIG9mIGEgc2VydmVyIHNpZGUgKi8KKwlfX3MzMiBpbnRlcnZhbDsKKworCS8qIHNldCBzZXR1cCBwYWNrZXQgZGF0YSBmb3IgYSBDVFJMIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBjaGFyIHNldHVwWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfU1VCTUlUIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0IHsKKwlfX3MzMiBzdGF0dXM7CisJX19zMzIgYWN0dWFsX2xlbmd0aDsgLyogcmV0dXJuZWQgZGF0YSBsZW5ndGggKi8KKwlfX3MzMiBzdGFydF9mcmFtZTsgLyogSVNPIGFuZCBJTlQgKi8KKwlfX3MzMiBudW1iZXJfb2ZfcGFja2V0czsgIC8qIElTTyBvbmx5ICovCisJX19zMzIgZXJyb3JfY291bnQ7IC8qIElTTyBvbmx5ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEFuIGFkZGl0aW9uYWwgaGVhZGVyIGZvciBhIENNRF9VTkxJTksgcGFja2V0LgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsgeworCV9fdTMyIHNlcW51bTsgLyogVVJCJ3Mgc2VxbnVtIHdoaWNoIHdpbGwgYmUgdW5saW5rZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfVU5MSU5LIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rIHsKKwlfX3MzMiBzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiB0aGUgc2FtZSBhcyB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGJ1dCBwYWNrZWQgZm9yIHBkdSAqLworc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciB7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIGxlbmd0aDsgICAgICAgICAgICAvKiBleHBlY3RlZCBsZW5ndGggKi8KKwlfX3UzMiBhY3R1YWxfbGVuZ3RoOworCV9fdTMyIHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBBbGwgdXNiaXAgcGFja2V0cyB1c2UgYSBjb21tb24gaGVhZGVyIHRvIGtlZXAgY29kZSBzaW1wbGUuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXIgeworCXN0cnVjdCB1c2JpcF9oZWFkZXJfYmFzaWMgYmFzZTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0CWNtZF9zdWJtaXQ7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdAlyZXRfc3VibWl0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsJY21kX3VubGluazsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rCXJldF91bmxpbms7CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworaW50IHVzYmlwX3htaXQoaW50LCBzdHJ1Y3Qgc29ja2V0ICosIGNoYXIgKiwgaW50LCBpbnQpOworaW50IHVzYmlwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIGludCk7CisKKworc3RhdGljIGlubGluZSBpbnQgaW50ZXJmYWNlX3RvX2J1c251bShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXJldHVybiB1ZGV2LT5idXMtPmJ1c251bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW50ZXJmYWNlX3RvX2Rldm51bShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXJldHVybiB1ZGV2LT5kZXZudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19pbmZudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlyZXR1cm4gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworfQorCisjaWYgMAoraW50IHNldG5vZGVsYXkoc3RydWN0IHNvY2tldCAqKTsKK2ludCBzZXRxdWlja2FjayhzdHJ1Y3Qgc29ja2V0ICopOworaW50IHNldGtlZXBhbGl2ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpOwordm9pZCBzZXRyZXVzZShzdHJ1Y3Qgc29ja2V0ICopOworI2VuZGlmCisKK3N0cnVjdCBzb2NrZXQgKnNvY2tmZF90b19zb2NrZXQodW5zaWduZWQgaW50KTsKK2ludCBzZXRfc29ja2FkZHIoc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MpOworCit2b2lkIHVzYmlwX2R1bXBfdXJiKHN0cnVjdCB1cmIgKnB1cmIpOwordm9pZCB1c2JpcF9kdW1wX2hlYWRlcihzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpOworCisKK3N0cnVjdCB1c2JpcF9kZXZpY2U7CisKK3N0cnVjdCB1c2JpcF90YXNrIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiB0aHJlYWRfZG9uZTsKKwljaGFyICpuYW1lOworCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKik7Cit9OworCitlbnVtIHVzYmlwX3NpZGUgeworCVVTQklQX1ZIQ0ksCisJVVNCSVBfU1RVQiwKK307CisKK2VudW0gdXNiaXBfc3RhdHVzIHsKKwkvKiBzZGV2IGlzIGF2YWlsYWJsZS4gKi8KKwlTREVWX1NUX0FWQUlMQUJMRSA9IDB4MDEsCisJLyogc2RldiBpcyBub3cgdXNlZC4gKi8KKwlTREVWX1NUX1VTRUQsCisJLyogc2RldiBpcyB1bnVzYWJsZSBiZWNhdXNlIG9mIGEgZmF0YWwgZXJyb3IuICovCisJU0RFVl9TVF9FUlJPUiwKKworCS8qIHZkZXYgZG9lcyBub3QgY29ubmVjdCBhIHJlbW90ZSBkZXZpY2UuICovCisJVkRFVl9TVF9OVUxMLAorCS8qIHZkZXYgaXMgdXNlZCwgYnV0IHRoZSBVU0IgYWRkcmVzcyBpcyBub3QgYXNzaWduZWQgeWV0ICovCisJVkRFVl9TVF9OT1RBU1NJR05FRCwKKwlWREVWX1NUX1VTRUQsCisJVkRFVl9TVF9FUlJPUgorfTsKKworLyogYSBjb21tb24gc3RydWN0dXJlIGZvciBzdHViX2RldmljZSBhbmQgdmhjaV9kZXZpY2UgKi8KK3N0cnVjdCB1c2JpcF9kZXZpY2UgeworCWVudW0gdXNiaXBfc2lkZSBzaWRlOworCisJZW51bSB1c2JpcF9zdGF0dXMgc3RhdHVzOworCisJLyogbG9jayBmb3Igc3RhdHVzICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IHNvY2tldCAqdGNwX3NvY2tldDsKKworCXN0cnVjdCB1c2JpcF90YXNrIHRjcF9yeDsKKwlzdHJ1Y3QgdXNiaXBfdGFzayB0Y3BfdHg7CisKKwkvKiBldmVudCBoYW5kbGVyICovCisjZGVmaW5lIFVTQklQX0VIX1NIVVRET1dOCSgxIDw8IDApCisjZGVmaW5lIFVTQklQX0VIX0JZRQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCSVBfRUhfUkVTRVQJCSgxIDw8IDIpCisjZGVmaW5lIFVTQklQX0VIX1VOVVNBQkxFCSgxIDw8IDMpCisKKyNkZWZpbmUgU0RFVl9FVkVOVF9SRU1PVkVECShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUIHwgVVNCSVBfRUhfQllFKQorI2RlZmluZQlTREVWX0VWRU5UX0RPV04JCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlTREVWX0VWRU5UX0VSUk9SX1RDUAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJU0RFVl9FVkVOVF9FUlJPUl9TVUJNSVQJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1VOVVNBQkxFKQorCisjZGVmaW5lCVZERVZfRVZFTlRfUkVNT1ZFRAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9CWUUpCisjZGVmaW5lCVZERVZfRVZFTlRfRE9XTgkJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVZERVZfRVZFTlRfRVJST1JfVENQCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlWREVWX0VWRU5UX0VSUk9SX01BTExPQwkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9VTlVTQUJMRSkKKworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisJc3RydWN0IHVzYmlwX3Rhc2sgZWg7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZWhfd2FpdHE7CisKKwlzdHJ1Y3QgZWhfb3BzIHsKKwkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdXNiaXBfZGV2aWNlICopOworCQl2b2lkICgqcmVzZXQpKHN0cnVjdCB1c2JpcF9kZXZpY2UgKik7CisJCXZvaWQgKCp1bnVzYWJsZSkoc3RydWN0IHVzYmlwX2RldmljZSAqKTsKKwl9IGVoX29wczsKK307CisKKwordm9pZCB1c2JpcF90YXNrX2luaXQoc3RydWN0IHVzYmlwX3Rhc2sgKnV0LCBjaGFyICosCisJCQkJdm9pZCAoKmxvb3Bfb3BzKShzdHJ1Y3QgdXNiaXBfdGFzayAqKSk7CisKK3ZvaWQgdXNiaXBfc3RhcnRfdGhyZWFkcyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX3N0b3BfdGhyZWFkcyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7CitpbnQgdXNiaXBfdGhyZWFkKHZvaWQgKnBhcmFtKTsKKwordm9pZCB1c2JpcF9wYWNrX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGNtZCwKKwkJCQkJCQkJaW50IHBhY2spOworCit2b2lkIHVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbihzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIGludCBzZW5kKTsKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl94YnVmZihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKTsKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl9pc28oc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYik7Cit2b2lkICp1c2JpcF9hbGxvY19pc29fZGVzY19wZHUoc3RydWN0IHVyYiAqdXJiLCBzc2l6ZV90ICpidWZmbGVuKTsKKworCisvKiB1c2JpcF9ldmVudC5jICovCit2b2lkIHVzYmlwX3N0YXJ0X2VoKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKTsKK3ZvaWQgdXNiaXBfc3RvcF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX2V2ZW50X2FkZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgdW5zaWduZWQgbG9uZyBldmVudCk7CitpbnQgdXNiaXBfZXZlbnRfaGFwcGVuZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTg1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorCitzdGF0aWMgaW50IGV2ZW50X2hhbmRsZXIoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJZGJnX2VoKCJlbnRlclxuIik7CisKKwkvKgorCSAqIEV2ZW50cyBhcmUgaGFuZGxlZCBieSBvbmx5IHRoaXMgdGhyZWFkLgorCSAqLworCXdoaWxlICh1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSkgeworCQlkYmdfZWgoInBlbmRpbmcgZXZlbnQgJWx4XG4iLCB1ZC0+ZXZlbnQpOworCisJCS8qCisJCSAqIE5PVEU6IHNodXRkb3duIG11c3QgY29tZSBmaXJzdC4KKwkJICogU2h1dGRvd24gdGhlIGRldmljZS4KKwkJICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9TSFVURE9XTikgeworCQkJdWQtPmVoX29wcy5zaHV0ZG93bih1ZCk7CisKKwkJCXVkLT5ldmVudCAmPSB+VVNCSVBfRUhfU0hVVERPV047CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RvcCB0aGUgZXJyb3IgaGFuZGxlci4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX0JZRSkKKwkJCXJldHVybiAtMTsKKworCQkvKiBSZXNldCB0aGUgZGV2aWNlLiAqLworCQlpZiAodWQtPmV2ZW50ICYgVVNCSVBfRUhfUkVTRVQpIHsKKwkJCXVkLT5laF9vcHMucmVzZXQodWQpOworCisJCQl1ZC0+ZXZlbnQgJj0gflVTQklQX0VIX1JFU0VUOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIE1hcmsgdGhlIGRldmljZSBhcyB1bnVzYWJsZS4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1VOVVNBQkxFKSB7CisJCQl1ZC0+ZWhfb3BzLnVudXNhYmxlKHVkKTsKKworCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9VTlVTQUJMRTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBOT1RSRUFDSEVEICovCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gZXZlbnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldmVudF9oYW5kbGVyX2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCBlaCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWRiZ19laCgic2lnbmFsIGNhdGNoZWQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGV2ZW50X2hhbmRsZXIodWQpIDwgMCkKKwkJCWJyZWFrOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1ZC0+ZWhfd2FpdHEsIHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKTsKKwkJZGJnX2VoKCJ3YWtldXBcbiIpOworCX0KK30KKwordm9pZCB1c2JpcF9zdGFydF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqZWggPSAmdWQtPmVoOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmdWQtPmVoX3dhaXRxKTsKKwl1ZC0+ZXZlbnQgPSAwOworCisJdXNiaXBfdGFza19pbml0KGVoLCAidXNiaXBfZWgiLCBldmVudF9oYW5kbGVyX2xvb3ApOworCisJa2VybmVsX3RocmVhZCh1c2JpcF90aHJlYWQsICh2b2lkICopZWgsIDApOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZWgtPnRocmVhZF9kb25lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3N0YXJ0X2VoKTsKKwordm9pZCB1c2JpcF9zdG9wX2VoKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCB1c2JpcF90YXNrICplaCA9ICZ1ZC0+ZWg7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZlaC0+dGhyZWFkX2RvbmUpOworCWRiZ19laCgidXNiaXBfZWggaGFzIGZpbmlzaGVkXG4iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3N0b3BfZWgpOworCit2b2lkIHVzYmlwX2V2ZW50X2FkZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgdW5zaWduZWQgbG9uZyBldmVudCkKK3sKKwlzcGluX2xvY2soJnVkLT5sb2NrKTsKKworCXVkLT5ldmVudCB8PSBldmVudDsKKworCXdha2VfdXAoJnVkLT5laF93YWl0cSk7CisKKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZXZlbnRfYWRkKTsKKworaW50IHVzYmlwX2V2ZW50X2hhcHBlbmQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJaW50IGhhcHBlbmQgPSAwOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwlpZiAodWQtPmV2ZW50ICE9IDApCisJCWhhcHBlbmQgPSAxOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKworCXJldHVybiBoYXBwZW5kOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZXZlbnRfaGFwcGVuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM3NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIi4uLy4uL3VzYi9jb3JlL2hjZC5oIgorCisKK3N0cnVjdCB2aGNpX2RldmljZSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwkvKgorCSAqIGRldmlkIHNwZWNpZmllcyBhIHJlbW90ZSB1c2IgZGV2aWNlIHVuaXF1ZWx5IGluc3RlYWQKKwkgKiBvZiBjb21iaW5hdGlvbiBvZiBidXNudW0gYW5kIGRldm51bS4KKwkgKi8KKwlfX3UzMiBkZXZpZDsKKworCS8qIHNwZWVkIG9mIGEgcmVtb3RlIGRldmljZSAqLworCWVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZDsKKworCS8qICB2aGNpIHJvb3QtaHViIHBvcnQgdG8gd2hpY2ggdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgICovCisJX191MzIgcmhwb3J0OworCisJc3RydWN0IHVzYmlwX2RldmljZSB1ZDsKKworCisJLyogbG9jayBmb3IgdGhlIGJlbG93IGxpbmsgbGlzdHMgKi8KKwlzcGlubG9ja190IHByaXZfbG9jazsKKworCS8qIHZoY2lfcHJpdiBpcyBsaW5rZWQgdG8gb25lIG9mIHRoZW0uICovCisJc3RydWN0IGxpc3RfaGVhZCBwcml2X3R4OworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl9yeDsKKworCS8qIHZoY2lfdW5saW5rIGlzIGxpbmtlZCB0byBvbmUgb2YgdGhlbSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3R4OworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3J4OworCisJLyogdmhjaV90eCB0aHJlYWQgc2xlZXBzIGZvciB0aGlzIHF1ZXVlICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHFfdHg7Cit9OworCisKKy8qIHVyYi0+aGNwcml2LCB1c2UgY29udGFpbmVyX29mKCkgKi8KK3N0cnVjdCB2aGNpX3ByaXYgeworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCisKK3N0cnVjdCB2aGNpX3VubGluayB7CisJLyogc2VxbnVtIG9mIHRoaXMgcmVxdWVzdCAqLworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogc2VxbnVtIG9mIHRoZSB1bmxpbmsgdGFyZ2V0ICovCisJdW5zaWduZWQgbG9uZyB1bmxpbmtfc2VxbnVtOworfTsKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgcG9ydHMgaXMgbGVzcyB0aGFuIDE2ID8KKyAqIFVTQl9NQVhDSElMRFJFTiBpcyBzdGF0aWNhbGx5IGRlZmluZWQgdG8gMTYgaW4gdXNiLmguICBJdHMgbWF4aW11bSB2YWx1ZQorICogd291bGQgYmUgMzEgYmVjYXVzZSB0aGUgZXZlbnRfYml0c1sxXSBvZiBzdHJ1Y3QgdXNiX2h1YiBpcyBkZWZpbmVkIGFzCisgKiB1bnNpZ25lZCBsb25nIGluIGh1Yi5oCisgKi8KKyNkZWZpbmUgVkhDSV9OUE9SVFMgOAorCisvKiBmb3IgdXNiX2J1cy5oY3ByaXYgKi8KK3N0cnVjdCB2aGNpX2hjZCB7CisJc3BpbmxvY2tfdAlsb2NrOworCisJdTMyCXBvcnRfc3RhdHVzW1ZIQ0lfTlBPUlRTXTsKKworCXVuc2lnbmVkCXJlc3VtaW5nOjE7CisJdW5zaWduZWQgbG9uZwlyZV90aW1lb3V0OworCisJYXRvbWljX3Qgc2VxbnVtOworCisJLyoKKwkgKiBOT1RFOgorCSAqIHdJbmRleCBzaG93cyB0aGUgcG9ydCBudW1iZXIgYW5kIGJlZ2lucyBmcm9tIDEuCisJICogQnV0LCB0aGUgaW5kZXggb2YgdGhpcyBhcnJheSBiZWdpbnMgZnJvbSAwLgorCSAqLworCXN0cnVjdCB2aGNpX2RldmljZSB2ZGV2W1ZIQ0lfTlBPUlRTXTsKKworCS8qIHZoY2lfZGV2aWNlIHdoaWNoIGhhcyBub3QgYmVlbiBhc3NpZ2VkIGl0cyBhZGRyZXNzIHlldCAqLworCWludCBwZW5kaW5nX3BvcnQ7Cit9OworCisKK2V4dGVybiBzdHJ1Y3QgdmhjaV9oY2QgKnRoZV9jb250cm9sbGVyOworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JvdXA7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHByb3RvdHlwZSBkZWNsYXJhdGlvbiAqLworCisvKiB2aGNpX2hjZC5jICovCit2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpOwordm9pZCByaF9wb3J0X2Rpc2Nvbm5lY3QoaW50IHJocG9ydCk7Cit2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpOwordm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKKworI2RlZmluZSBoYXJkd2FyZQkJKCZ0aGVfY29udHJvbGxlci0+cGRldi5kZXYpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZoY2lfZGV2aWNlICpwb3J0X3RvX3ZkZXYoX191MzIgcG9ydCkKK3sKKwlyZXR1cm4gJnRoZV9jb250cm9sbGVyLT52ZGV2W3BvcnRdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2hjZCAqaGNkX3RvX3ZoY2koc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCB2aGNpX2hjZCAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKnZoY2lfdG9faGNkKHN0cnVjdCB2aGNpX2hjZCAqdmhjaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHZoY2ksIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdmhjaV9kZXYoc3RydWN0IHZoY2lfaGNkICp2aGNpKQoreworCXJldHVybiB2aGNpX3RvX2hjZCh2aGNpKS0+c2VsZi5jb250cm9sbGVyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjVhMmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTAsMCArMSwxMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGFrYWhpcm8gSGlyb2Z1Y2hpIgorI2RlZmluZSBEUklWRVJfREVTQyAiVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIERyaXZlciBmb3IgVVNCL0lQIgorI2RlZmluZSBEUklWRVJfTElDRU5DRSAiR1BMIgorTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5DRSk7CisKKworCisvKgorICogVE9ETworICoJLSB1cGRhdGUgcm9vdCBodWIgZW11bGF0aW9uCisgKgktIG1vdmUgdGhlIGVtdWxhdGlvbiBjb2RlIHRvIHVzZXJsYW5kID8KKyAqCQlwb3J0aW5nIHRvIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zCisgKgkJbWluaW1pemUga2VybmVsIGNvZGUKKyAqCS0gYWRkIHN1c3BlbmQvcmVzdW1lIGNvZGUKKyAqCS0gY2xlYW4gdXAgZXZlcnl0aGluZworICovCisKKworLyogU2VlIHVzYiBnYWRnZXQgZHVtbXkgaGNkICovCisKKworc3RhdGljIGludCB2aGNpX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmZik7CitzdGF0aWMgaW50IHZoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCXUxNiB3SW5kZXgsIGNoYXIgKmJ1ZmYsIHUxNiB3TGVuZ3RoKTsKK3N0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCQkJZ2ZwX3QgbWVtX2ZsYWdzKTsKK3N0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICp2aGNpX2hjZCk7CitzdGF0aWMgdm9pZCB2aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCk7CitzdGF0aWMgaW50IHZoY2lfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2aGNpX2hjZCI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gIlVTQi9JUCBWaXJ0dWFsIEhvc3QgQ29udG9yb2xsZXIiOworCitzdHJ1Y3QgdmhjaV9oY2QgKnRoZV9jb250cm9sbGVyOworCitzdGF0aWMgY29uc3QgY2hhciAqYml0X2Rlc2NbXSA9IHsKKwkiQ09OTkVDVElPTiIsCQkvKjAqLworCSJFTkFCTEUiLAkJLyoxKi8KKwkiU1VTUEVORCIsCQkvKjIqLworCSJPVkVSX0NVUlJFTlQiLAkJLyozKi8KKwkiUkVTRVQiLAkJLyo0Ki8KKwkiUjUiLAkJLyo1Ki8KKwkiUjYiLAkJLyo2Ki8KKwkiUjciLAkJLyo3Ki8KKwkiUE9XRVIiLAkJLyo4Ki8KKwkiTE9XU1BFRUQiLAkJLyo5Ki8KKwkiSElHSFNQRUVEIiwJCS8qMTAqLworCSJQT1JUX1RFU1QiLAkJLyoxMSovCisJIklORElDQVRPUiIsCQkvKjEyKi8KKwkiUjEzIiwJCS8qMTMqLworCSJSMTQiLAkJLyoxNCovCisJIlIxNSIsCQkvKjE1Ki8KKwkiQ19DT05ORUNUSU9OIiwJCS8qMTYqLworCSJDX0VOQUJMRSIsCQkvKjE3Ki8KKwkiQ19TVVNQRU5EIiwJCS8qMTgqLworCSJDX09WRVJfQ1VSUkVOVCIsCS8qMTkqLworCSJDX1JFU0VUIiwJCS8qMjAqLworCSJSMjEiLAkJLyoyMSovCisJIlIyMiIsCQkvKjIyKi8KKwkiUjIzIiwJCS8qMjMqLworCSJSMjQiLAkJLyoyNCovCisJIlIyNSIsCQkvKjI1Ki8KKwkiUjI2IiwJCS8qMjYqLworCSJSMjciLAkJLyoyNyovCisJIlIyOCIsCQkvKjI4Ki8KKwkiUjI5IiwJCS8qMjkqLworCSJSMzAiLAkJLyozMCovCisJIlIzMSIsCQkvKjMxKi8KK307CisKKworc3RhdGljIHZvaWQgZHVtcF9wb3J0X3N0YXR1cyh1MzIgc3RhdHVzKQoreworCWludCBpID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICJzdGF0dXMgJTA4eDoiLCBzdGF0dXMpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkKKwkJCXByaW50aygiICVzIiwgYml0X2Rlc2NbaV0pOworCX0KKworCXByaW50aygiXG4iKTsKK30KKworCisKK3ZvaWQgcmhfcG9ydF9jb25uZWN0KGludCByaHBvcnQsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZGJnX3ZoY2lfcmgoInJoX3BvcnRfY29ubmVjdCAlZFxuIiwgcmhwb3J0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCisJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOworCSAqIHRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzID0gVkRFVl9DT05ORUNUOworCSAqIHNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOyAqLworCisJdGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCA9IHJocG9ydDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSk7Cit9CisKK3ZvaWQgcmhfcG9ydF9kaXNjb25uZWN0KGludCByaHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ192aGNpX3JoKCJyaF9wb3J0X2Rpc2Nvbm5lY3QgJWRcbiIsIHJocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkvKiBzdG9wX2FjdGl2aXR5KGR1bSwgZHJpdmVyKTsgKi8KKwl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPSB+VVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOworCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKworCisJLyogbm90IHlldCBjb21wbGV0ZSB0aGUgZGlzY29ubmVjdGlvbgorCSAqIHNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJICogdmRldi0+dWQuc3RhdHVzID0gVkhDX1NUX0RJU0NPTk5FQ1Q7CisJICogc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOyAqLworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgUE9SVF9DX01BU0sgXAorCSgoVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQgXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfUkVTRVQpIDw8IDE2KQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3RseSB0aGUgc2FtZSBhcyBkdW1teV9oY2QuYzpkdW1teV9odWJfc3RhdHVzKCkgd2l0aG91dAorICogc3VzcGVuZC9yZXN1bWUgc3VwcG9ydC4gQnV0LCBpdCBpcyBtb2RpZmllZCB0byBwcm92aWRlIG11bHRpcGxlIHBvcnRzLgorICoKKyAqIEBidWY6IGEgYml0bWFwIHRvIHNob3cgd2hpY2ggcG9ydCBzdGF0dXMgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICBiaXQgIDA6IHJlc2VydmVkIG9yIHVzZWQgZm9yIGFub3RoZXIgcHVycG9zZT8KKyAqICBiaXQgIDE6IHRoZSBzdGF0dXMgb2YgcG9ydCAwIGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICAyOiB0aGUgc3RhdHVzIG9mIHBvcnQgMSBoYXMgYmVlbiBjaGFuZ2VkLgorICogIC4uLgorICogIGJpdCAgNzogdGhlIHN0YXR1cyBvZiBwb3J0IDYgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICBiaXQgIDg6IHRoZSBzdGF0dXMgb2YgcG9ydCA3IGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgLi4uCisgKiAgYml0IDE1OiB0aGUgc3RhdHVzIG9mIHBvcnQgMTQgaGFzIGJlZW4gY2hhbmdlZC4KKyAqCisgKiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIGlzIDMxICggcG9ydCAwIHRvIHBvcnQgMzApID8KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhY3R1YWwgdHJhbnNmZXJlZCBsZW5ndGggaW4gYnl0ZS4gSWYgbm90aGluZyBoYXMKKyAqIGJlZW4gY2hhbmdlZCwgcmV0dXJuIDAuIEluIHRoZSBjYXNlIHRoYXQgdGhlIG51bWJlciBvZiBwb3J0cyBpcyBsZXNzIHRoYW4gb3IKKyAqIGVxdWFsIHRvIDYgKFZIQ0lfTlBPUlRTPT03KSwgcmV0dXJuIDEuCisgKgorICovCitzdGF0aWMgaW50IHZoY2lfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZoY2lfaGNkCSp2aGNpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAwOworCisJLyogdGhlIGVub3VnaCBidWZmZXIgaXMgYWxsb2NhdGVkIGFjY29yZGluZyB0byBVU0JfTUFYQ0hJTERSRU4gKi8KKwl1bnNpZ25lZCBsb25nCSpldmVudF9iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikgYnVmOworCWludAkJcmhwb3J0OworCWludAkJY2hhbmdlZCA9IDA7CisKKworCSpldmVudF9iaXRzID0gMDsKKworCXZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZoY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgeworCQlkYmdfdmhjaV9yaCgiaHcgYWNjZXNzaWJsZSBmbGFnIGluIG9uP1xuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjaGVjayBwc2V1ZG8gc3RhdHVzIHJlZ2lzdGVyIGZvciBlYWNoIHBvcnQgKi8KKwlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlpZiAoKHZoY2ktPnBvcnRfc3RhdHVzW3JocG9ydF0gJiBQT1JUX0NfTUFTSykpIHsKKwkJCS8qIFRoZSBzdGF0dXMgb2YgYSBwb3J0IGhhcyBiZWVuIGNoYW5nZWQsICovCisJCQlkYmdfdmhjaV9yaCgicG9ydCAlZCBpcyBjaGFuZ2VkXG4iLCByaHBvcnQpOworCisJCQkqZXZlbnRfYml0cyB8PSAxIDw8IChyaHBvcnQgKyAxKTsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisJfQorCisJdWluZm8oImNoYW5nZWQgJWRcbiIsIGNoYW5nZWQpOworCisJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKQorCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOworCisJaWYgKGNoYW5nZWQpCisJCXJldHZhbCA9IDEgKyAoVkhDSV9OUE9SVFMgLyA4KTsKKwllbHNlCisJCXJldHZhbCA9IDA7CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFNlZSBodWJfY29uZmlndXJlIGluIGh1Yi5jICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHViX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7CisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IChfX2ZvcmNlIF9fdTE2KQorCQkoX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpKTsKKwlkZXNjLT5iTmJyUG9ydHMgPSBWSENJX05QT1JUUzsKKwlkZXNjLT5iaXRtYXBbMF0gPSAweGZmOworCWRlc2MtPmJpdG1hcFsxXSA9IDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCSAgICB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCB2aGNpX2hjZAkqZHVtOworCWludCAgICAgICAgICAgICByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlpbnQJCXJocG9ydDsKKworCXUzMiBwcmV2X3BvcnRfc3RhdHVzW1ZIQ0lfTlBPUlRTXTsKKworCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qCisJICogTk9URToKKwkgKiB3SW5kZXggc2hvd3MgdGhlIHBvcnQgbnVtYmVyIGFuZCBiZWdpbnMgZnJvbSAxLgorCSAqLworCWRiZ192aGNpX3JoKCJ0eXBlUmVxICV4IHdWYWx1ZSAleCB3SW5kZXggJXhcbiIsIHR5cGVSZXEsIHdWYWx1ZSwKKwkJCQkJCQkJd0luZGV4KTsKKwlpZiAod0luZGV4ID4gVkhDSV9OUE9SVFMpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsIF9fZnVuY19fLCB3SW5kZXgpOworCXJocG9ydCA9ICgoX191OCkod0luZGV4ICYgMHgwMGZmKSkgLSAxOworCisJZHVtID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCS8qIHN0b3JlIG9sZCBzdGF0dXMgYW5kIGNvbXBhcmUgbm93IGFuZCBvbGQgbGF0ZXIgKi8KKwlpZiAoZGJnX2ZsYWdfdmhjaV9yaCkgeworCQlpbnQgaSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKQorCQkJcHJldl9wb3J0X3N0YXR1c1tpXSA9IGR1bS0+cG9ydF9zdGF0dXNbaV07CisJfQorCisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCWRiZ192aGNpX3JoKCIgQ2xlYXJIdWJGZWF0dXJlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmIChkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpIHsKKwkJCQkvKiAyMG1zZWMgc2lnbmFsaW5nICovCisJCQkJZHVtLT5yZXN1bWluZyA9IDE7CisJCQkJZHVtLT5yZV90aW1lb3V0ID0KKwkJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWRiZ192aGNpX3JoKCIgQ2xlYXJQb3J0RmVhdHVyZTogVVNCX1BPUlRfRkVBVF9QT1dFUlxuIik7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPSAwOworCQkJLyogZHVtLT5hZGRyZXNzID0gMDsgKi8KKwkJCS8qIGR1bS0+aGRldiA9IDA7ICovCisJCQlkdW0tPnJlc3VtaW5nID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCWRiZ192aGNpX3JoKCIgQ2xlYXJQb3J0RmVhdHVyZTogIgorCQkJCQkiVVNCX1BPUlRfRkVBVF9DX1JFU0VUXG4iKTsKKwkJCXN3aXRjaCAoZHVtLT52ZGV2W3JocG9ydF0uc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQlVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQlVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6IGRlZmF1bHQgJXhcbiIsIHdWYWx1ZSk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0gfigxIDw8IHdWYWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlkYmdfdmhjaV9yaCgiIEdldEh1YkRlc2NyaXB0b3JcbiIpOworCQlodWJfZGVzY3JpcHRvcigoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJZGJnX3ZoY2lfcmgoIiBHZXRIdWJTdGF0dXNcbiIpOworCQkqKF9fbGUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCQlicmVhazsKKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWRiZ192aGNpX3JoKCIgR2V0UG9ydFN0YXR1cyBwb3J0ICV4XG4iLCB3SW5kZXgpOworCQlpZiAod0luZGV4ID4gVkhDSV9OUE9SVFMgfHwgd0luZGV4IDwgMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwb3J0IG51bWJlciAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgd0luZGV4KTsKKwkJCXJldHZhbCA9IC1FUElQRTsKKwkJfQorCisJCS8qIHdlIGRvIG5vIGNhcmUgb2YgcmVzdW1lLiAqLworCisJCS8qIHdob2V2ZXIgcmVzZXRzIG9yIHJlc3VtZXMgbXVzdCBHZXRQb3J0U3RhdHVzIHRvCisJCSAqIGNvbXBsZXRlIGl0ISEKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCWlmIChkdW0tPnJlc3VtaW5nICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IHlldFxuIiwgX19mdW5jX18pOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPQorCQkJCQl+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCWR1bS0+cmVzdW1pbmcgPSAwOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKwkJCS8qIGlmIChkdW0tPmRyaXZlciAmJiBkdW0tPmRyaXZlci0+cmVzdW1lKSB7CisJCQkgKglzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQkgKglkdW0tPmRyaXZlci0+cmVzdW1lICgmZHVtLT5nYWRnZXQpOworCQkJICoJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCSAqIH0gKi8KKwkJfQorCisJCWlmICgoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCkpICE9CisJCQkJMCAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPQorCQkJCQkJfigxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKworCQkJaWYgKGR1bS0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyA9PQorCQkJCQkJCVZERVZfU1RfTk9UQVNTSUdORUQpIHsKKwkJCQlkYmdfdmhjaV9yaCgiIGVuYWJsZSByaHBvcnQgJWQgKHN0YXR1cyAldSlcbiIsCisJCQkJCQlyaHBvcnQsCisJCQkJCQlkdW0tPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMpOworCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOworCQkJfQorI2lmIDAKKwkJCWlmIChkdW0tPmRyaXZlcikgeworCisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQkJVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQkJLyogZ2l2ZSBpdCB0aGUgYmVzdCBzcGVlZCB3ZSBhZ3JlZSBvbiAqLworCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gZHVtLT5kcml2ZXItPnNwZWVkOworCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gNjQ7CisJCQkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQlVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJCQkJZHVtLT5nYWRnZXQuZXAwLT5tYXhwYWNrZXQgPSA4OworCQkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCisJCX0KKwkJKCh1MTYgKikgYnVmKVswXSA9IGNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJCSgodTE2ICopIGJ1ZilbMV0gPQorCQkJCWNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSA+PiAxNik7CisKKwkJZGJnX3ZoY2lfcmgoIiBHZXRQb3J0U3RhdHVzIGJ5ZSAleCAleFxuIiwgKCh1MTYgKilidWYpWzBdLAorCQkJCQkJCSgodTE2ICopYnVmKVsxXSk7CisJCWJyZWFrOworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJZGJnX3ZoY2lfcmgoIiBTZXRIdWJGZWF0dXJlXG4iKTsKKwkJcmV0dmFsID0gLUVQSVBFOworCQlicmVhazsKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWRiZ192aGNpX3JoKCIgU2V0UG9ydEZlYXR1cmU6ICIKKwkJCQkJIlVTQl9QT1JUX0ZFQVRfU1VTUEVORFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgeWV0XG4iLCBfX2Z1bmNfXyk7CisjaWYgMAorCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQkJaWYgKGR1bS0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQkJc3Bpbl91bmxvY2soJmR1bS0+bG9jayk7CisJCQkJZHVtLT5kcml2ZXItPnN1c3BlbmQoJmR1bS0+Z2FkZ2V0KTsKKwkJCQlzcGluX2xvY2soJmR1bS0+bG9jayk7CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlkYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiBVU0JfUE9SVF9GRUFUX1JFU0VUXG4iKTsKKwkJCS8qIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBkaXNjb25uZWN0IGZpcnN0ICovCisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJCX4oVVNCX1BPUlRfU1RBVF9FTkFCTEUgfAorCQkJCQkJICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8CisJCQkJCQkgIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisjaWYgMAorCQkJCWlmIChkdW0tPmRyaXZlcikgeworCQkJCQlkZXZfZGJnKGhhcmR3YXJlLCAiZGlzY29ubmVjdFxuIik7CisJCQkJCXN0b3BfYWN0aXZpdHkoZHVtLCBkdW0tPmRyaXZlcik7CisJCQkJfQorI2VuZGlmCisKKwkJCQkvKiBGSVhNRSB0ZXN0IHRoYXQgY29kZSBwYXRoISAqLworCQkJfQorCQkJLyogNTBtc2VjIHJlc2V0IHNpZ25hbGluZyAqLworCQkJZHVtLT5yZV90aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJZGJnX3ZoY2lfcmgoIiBTZXRQb3J0RmVhdHVyZTogZGVmYXVsdCAlZFxuIiwgd1ZhbHVlKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSAoMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGVmYXVsdDogbm8gc3VjaCByZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7CisJCS8qIGRldl9kYmcgKGhhcmR3YXJlLAorCQkgKgkJImh1YiBjb250cm9sIHJlcSUwNHggdiUwNHggaSUwNHggbCVkXG4iLAorCQkgKgkJdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOyAqLworCisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKworCWlmIChkYmdfZmxhZ192aGNpX3JoKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJwb3J0ICVkXG4iLCByaHBvcnQpOworCQlkdW1wX3BvcnRfc3RhdHVzKHByZXZfcG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJCWR1bXBfcG9ydF9zdGF0dXMoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdKTsKKwl9CisJZGJnX3ZoY2lfcmgoIiBieWVcbiIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB2aGNpX2RldmljZSAqZ2V0X3ZkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGk7CisKKwlpZiAoIXVkZXYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IFZIQ0lfTlBPUlRTOyBpKyspCisJCWlmICh0aGVfY29udHJvbGxlci0+dmRldltpXS51ZGV2ID09IHVkZXYpCisJCQlyZXR1cm4gcG9ydF90b192ZGV2KGkpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfdHhfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBnZXRfdmRldih1cmItPmRldik7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlpZiAoIXZkZXYpIHsKKwkJZXJyKCJjb3VsZCBub3QgZ2V0IHZpcnR1YWwgZGV2aWNlIik7CisJCS8qIEJVRygpOyAqLworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZoY2lfcHJpdiksIEdGUF9BVE9NSUMpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAibWFsbG9jIHZoY2lfcHJpdlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7CisJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsIFZERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPnNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKTsKKwlpZiAocHJpdi0+c2VxbnVtID09IDB4ZmZmZikKKwkJdWluZm8oInNlcW51bSBtYXhcbiIpOworCisJcHJpdi0+dmRldiA9IHZkZXY7CisJcHJpdi0+dXJiID0gdXJiOworCisJdXJiLT5oY3ByaXYgPSAodm9pZCAqKSBwcml2OworCisKKwlsaXN0X2FkZF90YWlsKCZwcml2LT5saXN0LCAmdmRldi0+cHJpdl90eCk7CisKKwl3YWtlX3VwKCZ2ZGV2LT53YWl0cV90eCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnKTsKK30KKworc3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCSAgICBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ192aGNpX2hjKCJlbnRlciwgdXNiX2hjZCAlcCB1cmIgJXAgbWVtX2ZsYWdzICVkXG4iLAorCQkgICAgaGNkLCB1cmIsIG1lbV9mbGFncyk7CisKKwkvKiBwYXRjaCB0byB1c2Jfc2dfaW5pdCgpIGlzIGluIDIuNS42MCAqLworCUJVR19PTighdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJLyogY2hlY2sgSEMgaXMgYWN0aXZlIG9yIG5vdCAqLworCWlmICghSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlkZXZfZXJyKGRldiwgIkhDIGlzIG5vdCBydW5uaW5nXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlkZXZfZXJyKGRldiwgIlVSQiBhbHJlYWR5IHVubGlua2VkISwgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiB1cmItPnN0YXR1czsKKwl9CisKKwlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKKwlpZiAocmV0KQorCQlnb3RvIG5vX25lZWRfdW5saW5rOworCisJLyoKKwkgKiBUaGUgZW51bWVsYXRpb24gcHJvY2VzcyBpcyBhcyBmb2xsb3dzOworCSAqCisJICogIDEuIEdldF9EZXNjcmlwdG9yIHJlcXVlc3QgdG8gRGV2QWRkcnMoMCkgRW5kUG9pbnQoMCkKKwkgKiAgICAgdG8gZ2V0IG1heCBwYWNrZXQgbGVuZ3RoIG9mIGRlZmF1bHQgcGlwZQorCSAqCisJICogIDIuIFNldF9BZGRyZXNzIHJlcXVlc3QgdG8gRGV2QWRkcigwKSBFbmRQb2ludCgwKQorCSAqCisJICovCisKKwlpZiAodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSA9PSAwKSB7CisJCV9fdTggdHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJscmVxID0KKwkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0KKwkJCQlwb3J0X3RvX3ZkZXYodGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCk7CisKKwkJaWYgKHR5cGUgIT0gUElQRV9DT05UUk9MIHx8ICFjdHJscmVxKSB7CisJCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVxdWVzdCB0byBkZXZudW0gMFxuIik7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKwkJfQorCisJCXN3aXRjaCAoY3RybHJlcS0+YlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkJLyogc2V0X2FkZHJlc3MgbWF5IGNvbWUgd2hlbiBhIGRldmljZSBpcyByZXNldCAqLworCQkJZGV2X2luZm8oZGV2LCAiU2V0QWRkcmVzcyBSZXF1ZXN0ICglZCkgdG8gcG9ydCAlZFxuIiwKKwkJCQkgY3RybHJlcS0+d1ZhbHVlLCB2ZGV2LT5yaHBvcnQpOworCisJCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisKKwkJCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJCQl2ZGV2LT51ZC5zdGF0dXMgPSBWREVWX1NUX1VTRUQ7CisJCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisKKwkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCQkvKiBUaGlzIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gKi8KKwkJCQkvKiBJZiBub3QgLUVJTlBST0dSRVNTLCBwb3NzaWJseSB1bmxpbmtlZC4gKi8KKwkJCQl1cmItPnN0YXR1cyA9IDA7CisJCQl9CisKKwkJCWdvdG8gbm9fbmVlZF94bWl0OworCisJCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJCWlmIChjdHJscmVxLT53VmFsdWUgPT0gKFVTQl9EVF9ERVZJQ0UgPDwgOCkpCisJCQkJZGJnX3ZoY2lfaGMoIk5vdCB5ZXQ/OiAiCisJCQkJCQkiR2V0X0Rlc2NyaXB0b3IgdG8gZGV2aWNlIDAgIgorCQkJCQkJIihnZXQgbWF4IHBpcGUgc2l6ZSlcbiIpOworCisJCQkvKiBGSVhNRTogcmVmZXJlbmNlIGNvdW50PyAodXNiX2dldF9kZXYoKSkgKi8KKwkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWdvdG8gb3V0OworCisJCWRlZmF1bHQ6CisJCQkvKiBOT1QgUkVBQ0hFRCAqLworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDAgYlJlcXVlc3QgJXUsICIKKwkJCQkid1ZhbHVlICV1XG4iLCBjdHJscmVxLT5iUmVxdWVzdCwKKwkJCQljdHJscmVxLT53VmFsdWUpOworCQkJcmV0ID0gIC1FSU5WQUw7CisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKwkJfQorCisJfQorCitvdXQ6CisJdmhjaV90eF91cmIodXJiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKKworbm9fbmVlZF94bWl0OgorCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKK25vX25lZWRfdW5saW5rOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2aGNpX3J4IGdpdmVzIGJhY2sgdGhlIHVyYiBhZnRlciByZWNlaXZpbmcgdGhlIHJlcGx5IG9mIHRoZSB1cmIuICBJZiBhbgorICogdW5saW5rIHBkdSBpcyBzZW50IG9yIG5vdCwgdmhjaV9yeCByZWNlaXZlcyBhIG5vcm1hbCByZXR1cm4gcGR1IGFuZCBnaXZlcworICogYmFjayBpdHMgdXJiLiBGb3IgdGhlIGRyaXZlciB1bmxpbmtpbmcgdGhlIHVyYiwgdGhlIGNvbnRlbnQgb2YgdGhlIHVyYiBpcworICogbm90IGltcG9ydGFudCwgYnV0IHRoZSBjYWxsaW5nIHRvIGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgaXMgaW1wb3J0YW50OyB0aGUKKyAqIGNvbXBsZXRpb24gb2YgdW5saW5raW5nIGlzIG5vdGlmaWVkIGJ5IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisgKgorICoKKyAqIENMSUVOVCBTSURFCisgKgorICogLSBXaGVuIHZoY2lfaGNkIHJlY2VpdmVzIFJFVF9TVUJNSVQsCisgKgorICoJLSBjYXNlIDFhKS4gdGhlIHVyYiBvZiB0aGUgcGR1IGlzIG5vdCB1bmxpbmtpbmcuCisgKgkJLSBub3JtYWwgY2FzZQorICoJCT0+IGp1c3QgZ2l2ZSBiYWNrIHRoZSB1cmIKKyAqCisgKgktIGNhc2UgMWIpLiB0aGUgdXJiIG9mIHRoZSBwZHUgaXMgdW5saW5raW5nLgorICoJCS0gdXNiaXAua28gd2lsbCByZXR1cm4gYSByZXBseSBvZiB0aGUgdW5saW5raW5nIHJlcXVlc3QuCisgKgkJPT4gZ2l2ZSBiYWNrIHRoZSB1cmIgbm93IGFuZCBnbyB0byBjYXNlIDJiKS4KKyAqCisgKiAtIFdoZW4gdmhjaV9oY2QgcmVjZWl2ZXMgUkVUX1VOTElOSywKKyAqCisgKgktIGNhc2UgMmEpLiBhIHN1Ym1pdCByZXF1ZXN0IGlzIHN0aWxsIHBlbmRpbmcgaW4gdmhjaV9oY2QuCisgKgkJLSB1cmIgd2FzIHJlYWxseSBwZW5kaW5nIGluIHVzYmlwLmtvIGFuZCB1cmJfdW5saW5rX3VyYigpIHdhcworICoJCSAgY29tcGxldGVkIHRoZXJlLgorICoJCT0+IGZyZWUgYSBwZW5kaW5nIHN1Ym1pdCByZXF1ZXN0CisgKgkJPT4gbm90aWZ5IHVubGluayBjb21wbGV0ZW5lc3MgYnkgZ2l2aW5nIGJhY2sgdGhlIHVyYgorICoKKyAqCS0gY2FzZSAyYikuIGEgc3VibWl0IHJlcXVlc3QgaXMgKm5vdCogcGVuZGluZyBpbiB2aGNpX2hjZC4KKyAqCQktIHVyYiB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrIHRvIHRoZSBjb3JlIGRyaXZlci4KKyAqCQk9PiBkbyBub3QgZ2l2ZSBiYWNrIHRoZSB1cmIKKyAqCisgKgorICogU0VSVkVSIFNJREUKKyAqCisgKiAtIFdoZW4gdXNiaXAgcmVjZWl2ZXMgQ01EX1VOTElOSywKKyAqCisgKgktIGNhc2UgM2EpLiB0aGUgdXJiIG9mIHRoZSB1bmxpbmsgcmVxdWVzdCBpcyBub3cgaW4gc3VibWlzc2lvbi4KKyAqCQk9PiBkbyB1c2JfdW5saW5rX3VyYigpLgorICoJCT0+IGFmdGVyIHRoZSB1bmxpbmsgaXMgY29tcGxldGVkLCBzZW5kIFJFVF9VTkxJTksuCisgKgorICoJLSBjYXNlIDNiKS4gdGhlIHVyYiBvZiB0aGUgdW5saW5rIHJlcXVlc3QgaXMgbm90IGluIHN1Ym1pc3Npb24uCisgKgkJLSBtYXkgYmUgYWxyZWFkeSBjb21wbGV0ZWQgb3IgbmV2ZXIgYmUgcmVjZWl2ZWQKKyAqCQk9PiBzZW5kIFJFVF9VTkxJTksKKyAqCisgKi8KK3N0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2OworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKKworCXVpbmZvKCJ2aGNpX2hjZDogZGVxdWV1ZSBhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlwcml2ID0gdXJiLT5oY3ByaXY7CisJaWYgKCFwcml2KSB7CisJCS8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISBvciB3aWxsIGJlIHNvb24gZ2l2ZW4gYmFjayBieQorCQkgKiB2aGNpX3J4LiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl7CisJCWludCByZXQgPSAwOworCQlyZXQgPSB1c2JfaGNkX2NoZWNrX3VubGlua191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCSAvKiBzZW5kIHVubGluayByZXF1ZXN0IGhlcmU/ICovCisJdmRldiA9IHByaXYtPnZkZXY7CisKKwlpZiAoIXZkZXYtPnVkLnRjcF9zb2NrZXQpIHsKKwkJLyogdGNwIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MyOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisKKwkJdWluZm8oInZoY2lfaGNkOiBkZXZpY2UgJXAgc2VlbXMgdG8gYmUgZGlzY29ubmVjdGVkXG4iLCB2ZGV2KTsKKwkJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCQlrZnJlZShwcml2KTsKKwkJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKworCX0gZWxzZSB7CisJCS8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MyOworCQlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluazsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCisJCS8qIHNldHVwIENNRF9VTkxJTksgcGR1ICovCisJCXVubGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX3VubGluayksIEdGUF9BVE9NSUMpOworCQlpZiAoIXVubGluaykgeworCQkJdWVycigibWFsbG9jIHZoY2lfdW5saW5rXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXVubGluay0+c2VxbnVtID0gYXRvbWljX2luY19yZXR1cm4oJnRoZV9jb250cm9sbGVyLT5zZXFudW0pOworCQlpZiAodW5saW5rLT5zZXFudW0gPT0gMHhmZmZmKQorCQkJdWluZm8oInNlcW51bSBtYXhcbiIpOworCisJCXVubGluay0+dW5saW5rX3NlcW51bSA9IHByaXYtPnNlcW51bTsKKworCQl1aW5mbygidmhjaV9oY2Q6IGRldmljZSAlcCBzZWVtcyB0byBiZSBzdGlsbCBjb25uZWN0ZWRcbiIsCisJCQkJCQkJCQl2ZGV2KTsKKworCQkvKiBzZW5kIGNtZF91bmxpbmsgYW5kIHRyeSB0byBjYW5jZWwgdGhlIHBlbmRpbmcgVVJCIGluIHRoZQorCQkgKiBwZWVyICovCisJCWxpc3RfYWRkX3RhaWwoJnVubGluay0+bGlzdCwgJnZkZXYtPnVubGlua190eCk7CisJCXdha2VfdXAoJnZkZXYtPndhaXRxX3R4KTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisJfQorCisKKwkvKgorCSAqIElmIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlLCB3ZSBoYXZlIHNlbnQgQ01EX1VOTElOSy4KKwkgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi4KKwkgKiBPdGhlcndpc2UsIHdlIGdpdmUgYmFjayBpdCBoZXJlLgorCSAqLworCWlmICghdmRldi0+dWQudGNwX3NvY2tldCkgeworCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KKwkJdWluZm8oInZoY2lfaGNkOiB2aGNpX3VyYl9kZXF1ZXVlKCkgZ2l2ZXMgYmFjayB1cmIgJXBcbiIsIHVyYik7CisKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlkYmdfdmhjaV9oYygibGVhdmVcbiIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgeworCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJa2ZyZWUodW5saW5rKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7Cit9CisKKy8qCisgKiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgb25seSBvbmUgY29udGV4dCBiZWdpbnMgY2xlYW51cC4KKyAqIFRoaXMgaXMgd2h5IGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIGJlY29tZSBzaW1wbGUuCisgKiBXZSBkbyBub3Qgd2FudCB0byBjb25zaWRlciByYWNlIGNvbmRpdGlvbiBhcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIHZvaWQgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKwkvKiBuZWVkIHRoaXM/IHNlZSBzdHViX2Rldi5jICovCisJaWYgKHVkLT50Y3Bfc29ja2V0KSB7CisJCXVkYmcoInNodXRkb3duIHRjcF9zb2NrZXQgJXBcbiIsIHVkLT50Y3Bfc29ja2V0KTsKKwkJa2VybmVsX3NvY2tfc2h1dGRvd24odWQtPnRjcF9zb2NrZXQsIFNIVVRfUkRXUik7CisJfQorCisJdXNiaXBfc3RvcF90aHJlYWRzKCZ2ZGV2LT51ZCk7CisJdWluZm8oInN0b3AgdGhyZWFkc1xuIik7CisKKwkvKiBhY3RpdmUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KKwlpZiAodmRldi0+dWQudGNwX3NvY2tldCAhPSBOVUxMKSB7CisJCXNvY2tfcmVsZWFzZSh2ZGV2LT51ZC50Y3Bfc29ja2V0KTsKKwkJdmRldi0+dWQudGNwX3NvY2tldCA9IE5VTEw7CisJfQorCXVpbmZvKCJyZWxlYXNlIHNvY2tldFxuIik7CisKKwl2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cCh2ZGV2KTsKKworCS8qCisJICogcmhfcG9ydF9kaXNjb25uZWN0KCkgaXMgYSB0cmlnZ2VyIG9mIC4uLgorCSAqICAgdXNiX2Rpc2FibGVfZGV2aWNlKCk6CisJICoJZGlzYWJsZSBhbGwgdGhlIGVuZHBvaW50cyBmb3IgYSBVU0IgZGV2aWNlLgorCSAqICAgdXNiX2Rpc2FibGVfZW5kcG9pbnQoKToKKwkgKglkaXNhYmxlIGVuZHBvaW50cy4gcGVuZGluZyB1cmJzIGFyZSB1bmxpbmtlZChkZXF1ZXVlZCkuCisJICoKKwkgKiBOT1RFOiBBZnRlciBjYWxsaW5nIHJoX3BvcnRfZGlzY29ubmVjdCgpLCB0aGUgVVNCIGRldmljZSBkcml2ZXJzIG9mIGEKKwkgKiBkZXRlY2hlZCBkZXZpY2Ugc2hvdWxkIHJlbGVhc2UgdXNlZCB1cmJzIGluIGEgY2xlYW51cCBmdW5jdGlvbihpLmUuCisJICogeHh4X2Rpc2Nvbm5lY3QoKSkuIFRoZXJlZm9yZSwgdmhjaV9oY2QgZG9lcyBub3QgbmVlZCB0byByZWxlYXNlCisJICogcHVzaGVkIHVyYnMgYW5kIHRoZWlyIHByaXZhdGUgZGF0YSBpbiB0aGlzIGZ1bmN0aW9uLgorCSAqCisJICogTk9URTogdmhjaV9kZXF1ZXVlKCkgbXVzdCBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gV2hlbiBzaHV0ZG93bmluZworCSAqIGEgY29ubmVjdGlvbiwgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uKCkgZXhwZWN0cyB2aGNpX2RlcXVldWUoKQorCSAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mCisJICogdGhlIGNsZWFudXAgZnVuY3Rpb24gb2YgYSBVU0IgZHJpdmVyLiBXaGVuIHVubGlua2luZyBhIHVyYiB3aXRoIGFuCisJICogYWN0aXZlIGNvbm5lY3Rpb24sIHZoY2lfZGVxdWV1ZSgpIGRvZXMgbm90IGdpdmUgYmFjayB0aGUgdXJiIHdoaWNoCisJICogaXMgYWN0dWFsbHkgZ2l2ZW4gYmFjayBieSB2aGNpX3J4IGFmdGVyIHJlY2VpdmluZyBpdHMgcmV0dXJuIHBkdS4KKwkgKgorCSAqLworCXJoX3BvcnRfZGlzY29ubmVjdCh2ZGV2LT5yaHBvcnQpOworCisJdWluZm8oImRpc2Nvbm5lY3QgZGV2aWNlXG4iKTsKK30KKworCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl2ZGV2LT5zcGVlZCAgPSAwOworCXZkZXYtPmRldmlkICA9IDA7CisKKwl1ZC0+dGNwX3NvY2tldCA9IE5VTEw7CisKKwl1ZC0+c3RhdHVzID0gVkRFVl9TVF9OVUxMOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW51c2FibGUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl1ZC0+c3RhdHVzID0gVkRFVl9TVF9FUlJPUjsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX2luaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQoreworCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoKnZkZXYpKTsKKworCXVzYmlwX3Rhc2tfaW5pdCgmdmRldi0+dWQudGNwX3J4LCAidmhjaV9yeCIsIHZoY2lfcnhfbG9vcCk7CisJdXNiaXBfdGFza19pbml0KCZ2ZGV2LT51ZC50Y3BfdHgsICJ2aGNpX3R4IiwgdmhjaV90eF9sb29wKTsKKworCXZkZXYtPnVkLnNpZGUgICA9IFVTQklQX1ZIQ0k7CisJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9OVUxMOworCS8qIHZkZXYtPnVkLmxvY2sgICA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmdmRldi0+dWQubG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+cHJpdl9yeCk7CisJSU5JVF9MSVNUX0hFQUQoJnZkZXYtPnByaXZfdHgpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT51bmxpbmtfdHgpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT51bmxpbmtfcngpOworCS8qIHZkZXYtPnByaXZfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmdmRldi0+cHJpdl9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZkZXYtPndhaXRxX3R4KTsKKworCXZkZXYtPnVkLmVoX29wcy5zaHV0ZG93biA9IHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbjsKKwl2ZGV2LT51ZC5laF9vcHMucmVzZXQgPSB2aGNpX2RldmljZV9yZXNldDsKKwl2ZGV2LT51ZC5laF9vcHMudW51c2FibGUgPSB2aGNpX2RldmljZV91bnVzYWJsZTsKKworCXVzYmlwX3N0YXJ0X2VoKCZ2ZGV2LT51ZCk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHZoY2lfaGNkICp2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKwlpbnQgcmhwb3J0OworCWludCBlcnIgPSAwOworCisJZGJnX3ZoY2lfaGMoImVudGVyIHZoY2lfc3RhcnRcbiIpOworCisKKwkvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSBvZiB1c2JfaGNkICovCisKKwlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSAmdmhjaS0+dmRldltyaHBvcnRdOworCQl2aGNpX2RldmljZV9pbml0KHZkZXYpOworCQl2ZGV2LT5yaHBvcnQgPSByaHBvcnQ7CisJfQorCisJYXRvbWljX3NldCgmdmhjaS0+c2VxbnVtLCAwKTsKKwlzcGluX2xvY2tfaW5pdCgmdmhjaS0+bG9jayk7CisKKworCisJaGNkLT5wb3dlcl9idWRnZXQgPSAwOyAvKiBubyBsaW1pdCAqLworCWhjZC0+c3RhdGUgID0gSENfU1RBVEVfUlVOTklORzsKKwloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOworCisKKwkvKiB2aGNpX2hjZCBpcyBub3cgcmVhZHkgdG8gYmUgY29udHJvbGxlZCB0aHJvdWdoIHN5c2ZzICovCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ2aGNpX2Rldih2aGNpKS0+a29iaiwgJmRldl9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCXVlcnIoImNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJocG9ydCA9IDA7CisKKwlkYmdfdmhjaV9oYygic3RvcCBWSENJIGNvbnRyb2xsZXJcbiIpOworCisKKwkvKiAxLiByZW1vdmUgdGhlIHVzZXJsYW5kIGludGVyZmFjZSBvZiB2aGNpX2hjZCAqLworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdmhjaV9kZXYodmhjaSktPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisKKwkvKiAyLiBzaHV0ZG93biBhbGwgdGhlIHBvcnRzIG9mIHZoY2lfaGNkICovCisJZm9yIChyaHBvcnQgPSAwIDsgcmhwb3J0IDwgVkhDSV9OUE9SVFM7IHJocG9ydCsrKSB7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9ICZ2aGNpLT52ZGV2W3JocG9ydF07CisKKwkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9SRU1PVkVEKTsKKwkJdXNiaXBfc3RvcF9laCgmdmRldi0+dWQpOworCX0KKworCisJdWluZm8oInZoY2lfc3RvcCBkb25lXG4iKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2aGNpX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwl1ZXJyKCJOb3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIEZJWE1FOiBzdXNwZW5kL3Jlc3VtZSAqLworc3RhdGljIGludCB2aGNpX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHZoY2lfaGNkICp2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCWRldl9kYmcoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnEoJnZoY2ktPmxvY2spOworCS8qIHZoY2ktPnJoX3N0YXRlID0gRFVNTVlfUkhfU1VTUEVOREVEOworCSAqIHNldF9saW5rX3N0YXRlKHZoY2kpOyAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZoY2lfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJjID0gMDsKKworCWRldl9kYmcoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnEoJnZoY2ktPmxvY2spOworCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJCXJjID0gLUVTSFVURE9XTjsKKwl9IGVsc2UgeworCQkvKiB2aGNpLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1JVTk5JTkc7CisJCSAqIHNldF9saW5rX3N0YXRlKHZoY2kpOworCQkgKiBpZiAoIWxpc3RfZW1wdHkoJnZoY2ktPnVyYnBfbGlzdCkpCisJCSAqCW1vZF90aW1lcigmdmhjaS0+dGltZXIsIGppZmZpZXMpOyAqLworCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZSB2aGNpX2J1c19zdXNwZW5kICAgICAgTlVMTAorI2RlZmluZSB2aGNpX2J1c19yZXN1bWUgICAgICAgTlVMTAorI2VuZGlmCisKKworCitzdGF0aWMgc3RydWN0IGhjX2RyaXZlciB2aGNpX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24JPSBkcml2ZXJfbmFtZSwKKwkucHJvZHVjdF9kZXNjCT0gZHJpdmVyX2Rlc2MsCisJLmhjZF9wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZoY2lfaGNkKSwKKworCS5mbGFncwkJPSBIQ0RfVVNCMiwKKworCS5zdGFydAkJPSB2aGNpX3N0YXJ0LAorCS5zdG9wIAkJPSB2aGNpX3N0b3AsCisKKwkudXJiX2VucXVldWUJPSB2aGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQk9IHZoY2lfdXJiX2RlcXVldWUsCisKKwkuZ2V0X2ZyYW1lX251bWJlciA9IHZoY2lfZ2V0X2ZyYW1lX251bWJlciwKKworCS5odWJfc3RhdHVzX2RhdGEgPSB2aGNpX2h1Yl9zdGF0dXMsCisJLmh1Yl9jb250cm9sICAgID0gdmhjaV9odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQJPSB2aGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCT0gdmhjaV9idXNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCB2aGNpX2hjZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldDsKKworCXVpbmZvKCJwcm92aW5nLi4uXG4iKTsKKworCWRiZ192aGNpX2hjKCJuYW1lICVzIGlkICVkXG4iLCBwZGV2LT5uYW1lLCBwZGV2LT5pZCk7CisKKwkvKiB3aWxsIGJlIHJlbW92ZWQgKi8KKwlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2aGNpX2hjZCBETUEgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkLgorCSAqIE91ciBwcml2YXRlIGRhdGEgaXMgYWxzbyBhbGxvY2F0ZWQgYXV0b21hdGljYWxseS4KKwkgKi8KKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmdmhjaV9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWlmICghaGNkKSB7CisJCXVlcnIoImNyZWF0ZSBoY2QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisKKwkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgdmhjaV9oY2QgKi8KKwl0aGVfY29udHJvbGxlciA9IGhjZF90b192aGNpKGhjZCk7CisKKwkvKgorCSAqIEZpbmlzaCBnZW5lcmljIEhDRCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdGVyLgorCSAqIENhbGwgdGhlIGRyaXZlcidzIHJlc2V0KCkgYW5kIHN0YXJ0KCkgcm91dGluZXMuCisJICovCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCAwLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJdWVycigidXNiX2FkZF9oY2QgZmFpbGVkICVkXG4iLCByZXQpOworCQl1c2JfcHV0X2hjZChoY2QpOworCQl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZoY2lfaGNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2Q7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERpc2Nvbm5lY3RzIHRoZSByb290IGh1YiwKKwkgKiB0aGVuIHJldmVyc2VzIHRoZSBlZmZlY3RzIG9mIHVzYl9hZGRfaGNkKCksCisJICogaW52b2tpbmcgdGhlIEhDRCdzIHN0b3AoKSBtZXRob2RzLgorCSAqLworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7CisKKworCXJldHVybiAwOworfQorCisKKworI2lmZGVmIENPTkZJR19QTQorCisvKiB3aGF0IHNob3VsZCBoYXBwZW4gZm9yIFVTQi9JUCB1bmRlciBzdXNwZW5kL3Jlc3VtZT8gKi8KK3N0YXRpYyBpbnQgdmhjaV9oY2Rfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmhwb3J0ID0gMDsKKwlpbnQgY29ubmVjdGVkID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspCisJCWlmICh0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmCisJCQkJCQlVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pCisJCQljb25uZWN0ZWQgKz0gMTsKKworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwlpZiAoY29ubmVjdGVkID4gMCkgeworCQl1aW5mbygiV2UgaGF2ZSAlZCBhY3RpdmUgY29ubmVjdGlvbiVzLiBEbyBub3Qgc3VzcGVuZC5cbiIsCisJCQkJY29ubmVjdGVkLCAoY29ubmVjdGVkID09IDEgPyAiIiA6ICJzIikpOworCQlyZXQgPSAgLUVCVVNZOworCX0gZWxzZSB7CisJCXVpbmZvKCJzdXNwZW5kIHZoY2lfaGNkIik7CisJCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aGNpX2hjZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMoaGNkKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lIHZoY2lfaGNkX3N1c3BlbmQJTlVMTAorI2RlZmluZSB2aGNpX2hjZF9yZXN1bWUJCU5VTEwKKworI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmhjaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gdmhjaV9oY2RfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHZoY2lfaGNkX3JlbW92ZSksCisJLnN1c3BlbmQgPSB2aGNpX2hjZF9zdXNwZW5kLAorCS5yZXN1bWUJPSB2aGNpX2hjZF9yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGUgVkhDSSAnZGV2aWNlJyBpcyAndmlydHVhbCc7IG5vdCBhIHJlYWwgcGx1ZyZwbGF5IGhhcmR3YXJlLgorICogV2UgbmVlZCB0byBhZGQgdGhpcyB2aXJ0dWFsIGRldmljZSBhcyBhIHBsYXRmb3JtIGRldmljZSBhcmJpdHJhcmlseToKKyAqCTEuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpCisgKi8KK3N0YXRpYyB2b2lkIHRoZV9wZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGhlX3BkZXYgPSB7CisJLyogc2hvdWxkIGJlIHRoZSBzYW1lIG5hbWUgYXMgZHJpdmVyX25hbWUgKi8KKwkubmFtZSA9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCS5pZCA9IC0xLAorCS5kZXYgPSB7CisJCS8qIC5kcml2ZXIgPSAmdmhjaV9kcml2ZXIsICovCisJCS5yZWxlYXNlID0gdGhlX3BkZXZfcmVsZWFzZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdmhjaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWRiZ192aGNpX2hjKCJlbnRlclxuIik7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwKKwkgICAgICAgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RyaXZlcl9yZWdpc3RlcjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdGhlX3BkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXI7CisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gcmV0OworCisJLyogZXJyb3Igb2NjdXJyZWQgKi8KK2Vycl9wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZoY2lfZHJpdmVyKTsKKworZXJyX2RyaXZlcl9yZWdpc3RlcjoKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQodmhjaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHZoY2lfY2xlYW51cCh2b2lkKQoreworCWRiZ192aGNpX2hjKCJlbnRlclxuIik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdGhlX3BkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKK30KK21vZHVsZV9leGl0KHZoY2lfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNjY2FmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInZoY2kuaCIKKworCisvKiBnZXQgVVJCIGZyb20gdHJhbnNtaXR0ZWQgdXJiIHF1ZXVlICovCitzdGF0aWMgc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJICAgIF9fdTMyIHNlcW51bSkKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZ2ZGV2LT5wcml2X3J4LCBsaXN0KSB7CisJCWlmIChwcml2LT5zZXFudW0gPT0gc2VxbnVtKSB7CisJCQl1cmIgPSBwcml2LT51cmI7CisJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCQkJZGJnX3ZoY2lfcngoImZpbmQgdXJiICVwIHZ1cmIgJXAgc2VxbnVtICV1XG4iLAorCQkJCSAgICB1cmIsIHByaXYsIHNlcW51bSk7CisKKwkJCS8qIFRPRE86IGZpeCBsb2dpYyBoZXJlIHRvIGltcHJvdmUgaW5kZW50IHNpdHV0YXRpb24gKi8KKwkJCWlmIChzdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQkJaWYgKHN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCQkJICAgICBzdGF0dXMgPT0gLUVDT05OUkVTRVQpCisJCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LAorCQkJCQkJICJ1cmIgJXAgd2FzIHVubGlua2VkICIKKwkJCQkJCSAiJXNzeW5jaHJvbnVvdXNseS5cbiIsIHVyYiwKKwkJCQkJCSBzdGF0dXMgPT0gLUVOT0VOVCA/ICIiIDogImEiKTsKKwkJCQllbHNlCisJCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LAorCQkJCQkJICJ1cmIgJXAgbWF5IGJlIGluIGEgZXJyb3IsICIKKwkJCQkJCSAic3RhdHVzICVkXG4iLCB1cmIsIHN0YXR1cyk7CisJCQl9CisKKwkJCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwkJCWtmcmVlKHByaXYpOworCQkJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF9zdWJtaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnZkZXYtPnVkOworCXN0cnVjdCB1cmIgKnVyYjsKKworCisJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHBkdS0+YmFzZS5zZXFudW0pOworCisKKwlpZiAoIXVyYikgeworCQl1ZXJyKCJjYW5ub3QgZmluZCBhIHVyYiBvZiBzZXFudW0gJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCQl1aW5mbygibWF4IHNlcW51bSAlZFxuIiwgYXRvbWljX3JlYWQoJnRoZV9jb250cm9sbGVyLT5zZXFudW0pKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKworCS8qIHVucGFjayB0aGUgcGR1IHRvIGEgdXJiICovCisJdXNiaXBfcGFja19wZHUocGR1LCB1cmIsIFVTQklQX1JFVF9TVUJNSVQsIDApOworCisKKwkvKiByZWN2IHRyYW5zZmVyIGJ1ZmZlciAqLworCWlmICh1c2JpcF9yZWN2X3hidWZmKHVkLCB1cmIpIDwgMCkKKwkJcmV0dXJuOworCisKKwkvKiByZWN2IGlzb19wYWNrZXRfZGVzY3JpcHRvciAqLworCWlmICh1c2JpcF9yZWN2X2lzbyh1ZCwgdXJiKSA8IDApCisJCXJldHVybjsKKworCisJaWYgKGRiZ19mbGFnX3ZoY2lfcngpCisJCXVzYmlwX2R1bXBfdXJiKHVyYik7CisKKworCWRiZ192aGNpX3J4KCJub3cgZ2l2ZWJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIpOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCisKKwlkYmdfdmhjaV9yeCgiTGVhdmVcbiIpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV91bmxpbmsgKmRlcXVldWVfcGVuZGluZ191bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJdWluZm8oInVubGluay0+c2VxbnVtICVsdVxuIiwgdW5saW5rLT5zZXFudW0pOworCQlpZiAodW5saW5rLT5zZXFudW0gPT0gcGR1LT5iYXNlLnNlcW51bSkgeworCQkJZGJnX3ZoY2lfcngoImZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcbiIsCisJCQkJCQkJdW5saW5rLT5zZXFudW0pOworCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisKKwkJCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCQkJcmV0dXJuIHVubGluazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXVzYmlwX2R1bXBfaGVhZGVyKHBkdSk7CisKKwl1bmxpbmsgPSBkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHZkZXYsIHBkdSk7CisJaWYgKCF1bmxpbmspIHsKKwkJdWluZm8oImNhbm5vdCBmaW5kIHRoZSBwZW5kaW5nIHVubGluayAldVxuIiwgcGR1LT5iYXNlLnNlcW51bSk7CisJCXJldHVybjsKKwl9CisKKwl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwlpZiAoIXVyYikgeworCQkvKgorCQkgKiBJIGdldCB0aGUgcmVzdWx0IG9mIGEgdW5saW5rIHJlcXVlc3QuIEJ1dCwgaXQgc2VlbXMgdGhhdCBJCisJCSAqIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHJlc3VsdCBvZiBpdHMgc3VibWl0IHJlc3VsdCBhbmQgZ2F2ZQorCQkgKiBiYWNrIHRoZSBVUkIuCisJCSAqLworCQl1aW5mbygidGhlIHVyYiAoc2VxbnVtICVkKSB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrZWRcbiIsCisJCQkJCQkJcGR1LT5iYXNlLnNlcW51bSk7CisJfSBlbHNlIHsKKwkJZGJnX3ZoY2lfcngoIm5vdyBnaXZlYmFjayB1cmIgJXBcbiIsIHVyYik7CisKKwkJLyogSWYgdW5saW5rIGlzIHN1Y2NlZWQsIHN0YXR1cyBpcyAtRUNPTk5SRVNFVCAqLworCQl1cmItPnN0YXR1cyA9IHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1czsKKwkJdWluZm8oIiVkXG4iLCB1cmItPnN0YXR1cyk7CisKKwkJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOworCX0KKworCWtmcmVlKHVubGluayk7CisKKwlyZXR1cm47Cit9CisKKy8qIHJlY3YgYSBwZHUgKi8KK3N0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWludCByZXQ7CisJc3RydWN0IHVzYmlwX2hlYWRlciBwZHU7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3QgdmhjaV9kZXZpY2UsIHVkKTsKKworCisJZGJnX3ZoY2lfcngoIkVudGVyXG4iKTsKKworCW1lbXNldCgmcGR1LCAwLCBzaXplb2YocGR1KSk7CisKKworCS8qIDEuIHJlY2VpdmUgYSBwZHUgaGVhZGVyICovCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKikgJnBkdSwgc2l6ZW9mKHBkdSksIDApOworCWlmIChyZXQgIT0gc2l6ZW9mKHBkdSkpIHsKKwkJdWVycigicmVjZWl2aW5nIHBkdSBmYWlsZWQhIHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKKwkJCQlyZXQsIHNpemVvZihwZHUpKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdSwgMCk7CisKKwlpZiAoZGJnX2ZsYWdfdmhjaV9yeCkKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisKKwlzd2l0Y2ggKHBkdS5iYXNlLmNvbW1hbmQpIHsKKwljYXNlIFVTQklQX1JFVF9TVUJNSVQ6CisJCXZoY2lfcmVjdl9yZXRfc3VibWl0KHZkZXYsICZwZHUpOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCXZoY2lfcmVjdl9yZXRfdW5saW5rKHZkZXYsICZwZHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOT1RSRUFDSEVEICovCisJCXVlcnIoInVua25vd24gcGR1ICV1XG4iLCBwZHUuYmFzZS5jb21tYW5kKTsKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF9yeCk7CisKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3ZoY2lfcngoInNpZ25hbCBjYXRjaGVkIVxuIik7CisJCQlicmVhazsKKwkJfQorCisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJdmhjaV9yeF9wZHUodWQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjMjg1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisvKiBUT0RPOiByZWZpbmUgbG9ja2luZyA/Ki8KKworLyogU3lzZnMgZW50cnkgdG8gc2hvdyBwb3J0IHN0YXR1cyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKm91dCkKK3sKKwljaGFyICpzID0gb3V0OworCWludCBpID0gMDsKKworCWlmICghdGhlX2NvbnRyb2xsZXIgfHwgIW91dCkKKwkJQlVHKCk7CisKKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCS8qCisJICogb3V0cHV0IGV4YW1wbGU6CisJICogcHJ0IHN0YSBzcGQgZGV2IHNvY2tldCAgICAgICAgICAgbG9jYWxfYnVzaWQKKwkgKiAwMDAgMDA0IDAwMCAwMDAgICAgICAgICBjNWE3YmI4MCAxLTIuMworCSAqIDAwMSAwMDQgMDAwIDAwMCAgICAgICAgIGQ4Y2VlOTgwIDItMy40CisJICoKKwkgKiBJUCBhZGRyZXNzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhIHNvY2tldCBwb2ludGVyIGFkZHJlc3MgYnkgbG9va2luZworCSAqIHVwIC9wcm9jL25ldC97dGNwLHRjcDZ9LiBBbHNvLCBhIHVzZXJsYW5kIHByb2dyYW0gbWF5IHJlbWVtYmVyIGEKKwkgKiBwb3J0IG51bWJlciBhbmQgaXRzIHBlZXIgSVAgYWRkcmVzcy4KKwkgKi8KKwlvdXQgKz0gc3ByaW50ZihvdXQsICJwcnQgc3RhIHNwZCBidXMgZGV2IHNvY2tldCAgICAgICAgICAgIgorCQkgICAgICAgImxvY2FsX2J1c2lkXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHBvcnRfdG9fdmRldihpKTsKKworCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwM3UgJTAzdSAiLCBpLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCWlmICh2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9VU0VEKSB7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDN1ICUwOHggIiwKKwkJCQkJdmRldi0+c3BlZWQsIHZkZXYtPmRldmlkKTsKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUxNnAgIiwgdmRldi0+dWQudGNwX3NvY2tldCk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsIHZkZXYtPnVkZXYtPmRldi5idXNfaWQpOworCisJCX0gZWxzZQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiMDAwIDAwMCAwMDAgMDAwMDAwMDAwMDAwMDAwMCAwLTAiKTsKKworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwl9CisKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJcmV0dXJuIG91dCAtIHM7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CisKKy8qIFN5c2ZzIGVudHJ5IHRvIHNodXRkb3duIGEgdmlydHVhbCBjb25uZWN0aW9uICovCitzdGF0aWMgaW50IHZoY2lfcG9ydF9kaXNjb25uZWN0KF9fdTMyIHJocG9ydCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisKKwlkYmdfdmhjaV9zeXNmcygiZW50ZXJcbiIpOworCisJLyogbG9jayAqLworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdmRldiA9IHBvcnRfdG9fdmRldihyaHBvcnQpOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCkgeworCQl1ZXJyKCJub3QgY29ubmVjdGVkICVkXG4iLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCS8qIHVubG9jayAqLworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdW5sb2NrICovCisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0RPV04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBlcnI7CisJX191MzIgcmhwb3J0ID0gMDsKKworCXNzY2FuZihidWYsICIldSIsICZyaHBvcnQpOworCisJLyogY2hlY2sgcmhwb3J0ICovCisJaWYgKHJocG9ydCA+PSBWSENJX05QT1JUUykgeworCQl1ZXJyKCJpbnZhbGlkIHBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHZoY2lfcG9ydF9kaXNjb25uZWN0KHJocG9ydCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZGJnX3ZoY2lfc3lzZnMoIkxlYXZlXG4iKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0YWNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9kZXRhY2gpOworCisvKiBTeXNmcyBlbnRyeSB0byBlc3RhYmxpc2ggYSB2aXJ0dWFsIGNvbm5lY3Rpb24gKi8KK3N0YXRpYyBpbnQgdmFsaWRfYXJncyhfX3UzMiByaHBvcnQsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwkvKiBjaGVjayByaHBvcnQgKi8KKwlpZiAoKHJocG9ydCA8IDApIHx8IChyaHBvcnQgPj0gVkhDSV9OUE9SVFMpKSB7CisJCXVlcnIoInBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHNwZWVkICovCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVlcnIoInNwZWVkICVkXG4iLCBzcGVlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVG8gc3RhcnQgYSBuZXcgVVNCL0lQIGF0dGFjaG1lbnQsIGEgdXNlcmxhbmQgcHJvZ3JhbSBuZWVkcyB0byBzZXR1cCBhIFRDUAorICogY29ubmVjdGlvbiBhbmQgdGhlbiB3cml0ZSBpdHMgc29ja2V0IGRlc2NyaXB0b3Igd2l0aCByZW1vdGUgZGV2aWNlCisgKiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgc3lzZnMgZmlsZS4KKyAqCisgKiBBIHJlbW90ZSBkZXZpY2UgaXMgdmlydHVhbGx5IGF0dGFjaGVkIHRvIHRoZSByb290LWh1YiBwb3J0IG9mIEByaHBvcnQgd2l0aAorICogQHNwZWVkLiBAZGV2aWQgaXMgZW1iZWRkZWQgaW50byBhIHJlcXVlc3QgdG8gc3BlY2lmeSB0aGUgcmVtb3RlIGRldmljZSBpbiBhCisgKiBzZXJ2ZXIgaG9zdC4KKyAqCisgKiB3cml0ZSgpIHJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCWludCBzb2NrZmQgPSAwOworCV9fdTMyIHJocG9ydCA9IDAsIGRldmlkID0gMCwgc3BlZWQgPSAwOworCisJLyoKKwkgKiBAcmhwb3J0OiBwb3J0IG51bWJlciBvZiB2aGNpX2hjZAorCSAqIEBzb2NrZmQ6IHNvY2tldCBkZXNjcmlwdG9yIG9mIGFuIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uCisJICogQGRldmlkOiB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgaW4gYSByZW1vdGUgaG9zdAorCSAqIEBzcGVlZDogdXNiIGRldmljZSBzcGVlZCBpbiBhIHJlbW90ZSBob3N0CisJICovCisJc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1ICV1IiwgJnJocG9ydCwgJnNvY2tmZCwgJmRldmlkLCAmc3BlZWQpOworCisJZGJnX3ZoY2lfc3lzZnMoInJocG9ydCgldSkgc29ja2ZkKCV1KSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKworCS8qIGNoZWNrIHJlY2VpdmVkIHBhcmFtZXRlcnMgKi8KKwlpZiAodmFsaWRfYXJncyhyaHBvcnQsIHNwZWVkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2hlY2sgc29ja2ZkICovCisJc29ja2V0ID0gc29ja2ZkX3RvX3NvY2tldChzb2NrZmQpOworCWlmICghc29ja2V0KQorCQlyZXR1cm4gIC1FSU5WQUw7CisKKwkvKiBub3cgbmVlZCBsb2NrIHVudGlsIHNldHRpbmcgdmRldiBzdGF0dXMgYXMgdXNlZCAqLworCisJLyogYmVnaW4gYSBsb2NrICovCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl2ZGV2ID0gcG9ydF90b192ZGV2KHJocG9ydCk7CisKKwlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJaWYgKHZkZXYtPnVkLnN0YXR1cyAhPSBWREVWX1NUX05VTEwpIHsKKwkJLyogZW5kIG9mIHRoZSBsb2NrICovCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1ZXJyKCJwb3J0ICVkIGFscmVhZHkgdXNlZFxuIiwgcmhwb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWluZm8oInJocG9ydCgldSkgc29ja2ZkKCVkKSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKwl2ZGV2LT5kZXZpZCAgICAgICAgID0gZGV2aWQ7CisJdmRldi0+c3BlZWQgICAgICAgICA9IHNwZWVkOworCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBzb2NrZXQ7CisJdmRldi0+dWQuc3RhdHVzICAgICA9IFZERVZfU1RfTk9UQVNTSUdORUQ7CisKKwlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKwkvKiBlbmQgdGhlIGxvY2sgKi8KKworCS8qCisJICogdGhpcyBmdW5jdGlvbiB3aWxsIHNsZWVwLCBzbyBzaG91bGQgYmUgb3V0IG9mIHRoZSBsb2NrLiBidXQsIGl0J3Mgb2sKKwkgKiBiZWNhdXNlIHdlIGFscmVhZHkgbWFya2VkIHZkZXYgYXMgYmVpbmcgdXNlZC4gcmVhbGx5PworCSAqLworCXVzYmlwX3N0YXJ0X3RocmVhZHMoJnZkZXYtPnVkKTsKKworCXJoX3BvcnRfY29ubmVjdChyaHBvcnQsIHNwZWVkKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhdHRhY2gsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2RldGFjaC5hdHRyLAorCSZkZXZfYXR0cl9hdHRhY2guYXR0ciwKKwkmZGV2X2F0dHJfdXNiaXBfZGVidWcuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NTJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKworc3RhdGljIHZvaWQgc2V0dXBfY21kX3N1Ym1pdF9wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1cCwgIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gKChzdHJ1Y3QgdmhjaV9wcml2ICopdXJiLT5oY3ByaXYpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHByaXYtPnZkZXY7CisKKwlkYmdfdmhjaV90eCgiVVJCLCBsb2NhbCBkZXZudW0gJXUsIHJlbW90ZSBkZXZpZCAldVxuIiwKKwkJCQl1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCB2ZGV2LT5kZXZpZCk7CisKKwlwZHVwLT5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfU1VCTUlUOworCXBkdXAtPmJhc2Uuc2VxbnVtICA9IHByaXYtPnNlcW51bTsKKwlwZHVwLT5iYXNlLmRldmlkICAgPSB2ZGV2LT5kZXZpZDsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQlwZHVwLT5iYXNlLmRpcmVjdGlvbiA9IFVTQklQX0RJUl9JTjsKKwllbHNlCisJCXBkdXAtPmJhc2UuZGlyZWN0aW9uID0gVVNCSVBfRElSX09VVDsKKwlwZHVwLT5iYXNlLmVwICAgICAgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKwl1c2JpcF9wYWNrX3BkdShwZHVwLCB1cmIsIFVTQklQX0NNRF9TVUJNSVQsIDEpOworCisJaWYgKHVyYi0+c2V0dXBfcGFja2V0KQorCQltZW1jcHkocGR1cC0+dS5jbWRfc3VibWl0LnNldHVwLCB1cmItPnNldHVwX3BhY2tldCwgOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV9wcml2ICpkZXF1ZXVlX2Zyb21fcHJpdl90eChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnZkZXYtPnByaXZfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZ2ZGV2LT5wcml2X3J4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gTlVMTDsKKworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdlszXTsKKwlzaXplX3QgdHhzaXplOworCisJc2l6ZV90IHRvdGFsX3NpemUgPSAwOworCisJd2hpbGUgKChwcml2ID0gZGVxdWV1ZV9mcm9tX3ByaXZfdHgodmRldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisJCXZvaWQgKmlzb19idWZmZXIgPSBOVUxMOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfdmhjaV90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLworCQlzZXR1cF9jbWRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKKwkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKKworCQlpb3ZbMF0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCisJCS8qIDIuIHNldHVwIHRyYW5zZmVyIGJ1ZmZlciAqLworCQlpZiAoIXVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXR4c2l6ZSArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCX0KKworCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXNzaXplX3QgbGVuID0gMDsKKworCQkJaXNvX2J1ZmZlciA9IHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSh1cmIsICZsZW4pOworCQkJaWYgKCFpc29fYnVmZmVyKSB7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwKKwkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9IGlzb19idWZmZXI7CisJCQlpb3ZbMl0uaW92X2xlbiAgPSBsZW47CisJCQl0eHNpemUgKz0gbGVuOworCQl9CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2codmRldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LCAzLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJdWVycigic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwgcmV0LAorCQkJCQkJCQl0eHNpemUpOworCQkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlrZnJlZShpc29fYnVmZmVyKTsKKwkJZGJnX3ZoY2lfdHgoInNlbmQgdHhkYXRhXG4iKTsKKworCQl0b3RhbF9zaXplICs9IHR4c2l6ZTsKKwl9CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZ1bmxpbmstPmxpc3QsICZ2ZGV2LT51bmxpbmtfcngpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHVubGluazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluayA9IE5VTEw7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgodW5saW5rID0gZGVxdWV1ZV9mcm9tX3VubGlua190eCh2ZGV2KSkgIT0gTlVMTCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisKKwkJdHhzaXplID0gMDsKKwkJbWVtc2V0KCZwZHVfaGVhZGVyLCAwLCBzaXplb2YocGR1X2hlYWRlcikpOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQltZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisJCWRiZ192aGNpX3R4KCJzZXR1cCBjbWQgdW5saW5rLCAlbHUgXG4iLCB1bmxpbmstPnNlcW51bSk7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJcGR1X2hlYWRlci5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfVU5MSU5LOworCQlwZHVfaGVhZGVyLmJhc2Uuc2VxbnVtICA9IHVubGluay0+c2VxbnVtOworCQlwZHVfaGVhZGVyLmJhc2UuZGV2aWQJPSB2ZGV2LT5kZXZpZDsKKwkJcGR1X2hlYWRlci5iYXNlLmVwCT0gMDsKKwkJcGR1X2hlYWRlci51LmNtZF91bmxpbmsuc2VxbnVtID0gdW5saW5rLT51bmxpbmtfc2VxbnVtOworCisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyh2ZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsIDEsIHR4c2l6ZSk7CisJCWlmIChyZXQgIT0gdHhzaXplKSB7CisJCQl1ZXJyKCJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLCByZXQsCisJCQkJCQkJCXR4c2l6ZSk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCisJCWRiZ192aGNpX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfdHgpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXVpbmZvKCJ2aGNpX3R4IHNpZ25hbCBjYXRjaGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZoY2lfc2VuZF9jbWRfc3VibWl0KHZkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCWlmICh2aGNpX3NlbmRfY21kX3VubGluayh2ZGV2KSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmRldi0+d2FpdHFfdHgsCisJCQkJKCFsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3R4KSB8fAorCQkJCSAhbGlzdF9lbXB0eSgmdmRldi0+dW5saW5rX3R4KSkpOworCisJCWRiZ192aGNpX3R4KCJwZW5kaW5nIHVyYnMgPywgbm93IHdha2UgdXBcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDcyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIFczNVVORAorCXRyaXN0YXRlICJXaW5ib25kIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMICYmICE0S1NUQUNLUworCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHdpbmJvbmQgd2lmaSBjYXJkIG9uIHNvbWUgS29oamluc2hhIG5vdGVib29rcworCSAgQ2hlY2sgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3dpbmJvbmRwb3J0LyBmb3IgbmV3IHZlcnNpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljOThiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKwlEUklWRVJfRElSPS4vbGludXgKKwordzM1dW5kLW9ianMgOj0gJChEUklWRVJfRElSKS93YnVzYi5vICQoRFJJVkVSX0RJUikvd2IzNXJlZy5vICQoRFJJVkVSX0RJUikvd2IzNXJ4Lm8gJChEUklWRVJfRElSKS93YjM1dHgubyBcCisJbWRzLm8gXAorCW1sbWV0eHJ4Lm8gXAorCW10by5vCVwKKwlwaHlfY2FsaWJyYXRpb24ubwlcCisJcmVnLm8JCQlcCisJcnhpc3IubwkJCVwKKwlzbWVfYXBpLm8JCVwKKwl3YmhhbC5vCQkJXAorCXdibGludXgubwkJXAorCisKK29iai0kKENPTkZJR19XMzVVTkQpICs9IHczNXVuZC5vCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3YjZiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL1JFQURNRQpAQCAtMCwwICsxLDEwIEBACitUT0RPOgorCS0gc3BhcnNlIGNsZWFudXBzCisJLSBjaGVja3BhdGNoIGNsZWFudXBzCisJLSBrZXJuZWxkb2MgY2xlYW51cHMKKwktIHJlbW92ZSB0eXBlZGVmcworCS0gcmVtb3ZlIHVudXNlZCBpb2N0bHMKKwktIHVzZSBjZmc4MDIxMSBmb3IgcmVndWxhdG9yeSBzdHVmZgorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAorUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTcwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9hZGFwdGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIEFEQVBURVIuSCAtCisvLyBXaW5kb3dzIE5ESVMgZ2xvYmFsIHZhcmlhYmxlICdBZGFwdGVyJyB0eXBlZGVmCisvLworI2RlZmluZSBNQVhfQU5TSV9TVFJJTkcJCTQwCit0eXBlZGVmIHN0cnVjdCBXQjMyX0FEQVBURVIKK3sKKwl1MzIgQWRhcHRlckluZGV4OyAvLyAyMDA2MDcwMy40IEFkZCBmb3IgdXNpbmcgcEFkYXB0ZXJDb250ZXh0IGdsb2JhbCBBZGFwdGVyIHBvaW50CisKKwlXQl9MT0NBTERFU0NSSVBUCXNMb2NhbFBhcmE7CQkvLyBNeXNlbGYgY29ubmVjdGVkIHBhcmFtZXRlcnMKKwlQV0JfQlNTREVTQ1JJUFRJT04JYXNCU1NEZXNjcmlwdEVsZW1lbnQ7CisKKwlNTE1FX0ZSQU1FCQlzTWxtZUZyYW1lOwkJLy8gY29ubmVjdCB0byBwZWVyU1RBIHBhcmFtZXRlcnMKKworCU1UT19QQVJBTUVURVJTCQlzTXRvUGFyYTsgLy8gTVRPX3N0cnVjdCAuLi4KKwlod19kYXRhX3QJCQlzSHdEYXRhOyAvL0ZvciBIQUwKKwlNRFMJCQkJCU1kczsKKworCVdCTElOVVgJCVdiTGludXg7CisgICAgICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOworCisJdTgJTGlua05hbWVbTUFYX0FOU0lfU1RSSU5HXTsKK30gV0IzMl9BREFQVEVSLCBBREFQVEVSLCAqUFdCMzJfQURBUFRFUiwgKlBBREFQVEVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1N2JjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIEJTUyBkZXNjcmlwdG9yIERhdGFCYXNlIG1hbmFnZW1lbnQgZ2xvYmFsIGZ1bmN0aW9uCisvLworCit2b2lkIHZCU1NkZXNjcmlwdGlvbkluaXQoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdkJTU2ZvdW5kTGlzdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTggYm9DaGFuRmlsdGVyKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggQ2hhbk5vKTsKK3UxNiB3QlNTYWxsb2NhdGVFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTE2IHdCU1NHZXRFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2U2ltcGxlSG91c2VLZWVwaW5nKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit1MTYgd0JTU2hvdXNlS2VlcGluZyhQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBDbGVhckJTU2Rlc2NwdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiBpKTsKK3UxNiB3QlNTZmluZEJzc0lEKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKnBiQnNzaWQpOwordTE2IHdCU1NmaW5kRGVkaWNhdGVDYW5kaWRhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NzaWQsIHU4ICpwYkJzc2lkKTsKK3UxNiB3QlNTZmluZE1BQ2FkZHIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcGJNYWNBZGRyKTsKK3UxNiB3QlNTc2VhcmNoTUFDYWRkcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIsIHU4IGJhbmQpOwordTE2IHdCU1NhZGRTY2FuRGF0YShQV0IzMl9BREFQVEVSLCB1MTYsIHBzUlhEQVRBKTsKK3UxNiB3QlNTVXBkYXRlU2NhbkRhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0Jzc0lkeCwgcHNSWERBVEEgcHNSY3ZEYXRhKTsKK3UxNiB3QlNTY3JlYXRlSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3ZvaWQgRGVzaXJlZFJhdGUyQlNTZGVzY3JpcHRvcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEsCisJCQkJCQkJIHU4ICpwQmFzaWNSYXRlU2V0LCB1OCBCYXNpY1JhdGVDb3VudCwKKwkJCQkJCQkgdTggKnBPcGVyYXRpb25SYXRlU2V0LCB1OCBPcGVyYXRpb25SYXRlQ291bnQpOwordm9pZCBEZXNpcmVkUmF0ZTJJbmZvRWxlbWVudChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4CSphZGRyLCB1MTYgKmlGaWxkT2Zmc2V0LAorCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCisJCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKK3ZvaWQgQlNTQWRkSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3Vuc2lnbmVkIGNoYXIgYm9DbXBNYWNBZGRyKCBQVUNIQVIsIFBVQ0hBUiApOwordW5zaWduZWQgY2hhciBib0NtcFNTSUQoc3RydWN0IFNTSURfRWxlbWVudCAqcHNTU0lEMSwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTU0lEMik7Cit1MTYgd0JTU2ZpbmRTU0lEKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkKTsKK3UxNiB3Um9hbWluZ1F1ZXJ5KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSYXRlVG9CaXRtYXAoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgaW5kZXgpOwordTggYlJhdGVUb0JpdG1hcEluZGV4KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggYlJhdGUpOwordTggYkJpdG1hcFRvUmF0ZSh1OCBpKTsKK3Vuc2lnbmVkIGNoYXIgYm9Jc0VSUHN0YShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiBpKTsKK3Vuc2lnbmVkIGNoYXIgYm9DaGVja0Nvbm5lY3QoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3Vuc2lnbmVkIGNoYXIgYm9DaGVja1NpZ25hbChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBBZGRJQlNTSWUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEgKTsvL2FkZGVkIGJ5IHdzIGZvciBXUEFfTm9uZTA2LzAxLzA0Cit2b2lkIEJzc1NjYW5VcFRvRGF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBCc3NVcFRvRGF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBSYXRlU29ydCh1OCAqUmF0ZUFycmF5LCB1OCBudW0sIHU4IG1vZGUpOwordm9pZCBSYXRlUmVTb3J0Rm9yU1JhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqUmF0ZUFycmF5LCB1OCBudW0pOwordm9pZCBBc3NlbWJsZV9JRShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiB3QnNzSWR4KTsKK3ZvaWQgU2V0TWF4VHhSYXRlKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKK3ZvaWQgQ3JlYXRlV3BhSUUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYqIGlGaWxkT2Zmc2V0LCBQVUNIQVIgbXNnLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKKwkJCQkgc3RydWN0IEFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keSogbXNnQm9keSwgdTE2IGlNU2luZGV4KTsgLy9hZGRlZCBieSBXUyAwNS8xNC8wNQorCisjaWZkZWYgX1dQQTJfCit2b2lkIENyZWF0ZVJzbklFKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2KiBpRmlsZE9mZnNldCwgUFVDSEFSIG1zZywgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJIHN0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkqIG1zZ0JvZHksIHUxNiBpTVNpbmRleCk7Ly9hZGRlZCBieSBXUyAwNS8xNC8wNQorCit1MTYgU2VhcmNoUG1raWQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKKwkJCQkgICBzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudCAqIEFzc29SZXFfUE1LSUQgKTsKKyNlbmRpZgorCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTUwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oCkBAIC0wLDAgKzEsMTU2IEBACisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLwlic3Nkc2NwdC5jCisvLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlCisvLwloaXN0b3J5IDoKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlCU1MgZGVzY3JpcHRvciBkYXRhIGJhc2Ugd2lsbCBzdG9yZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHN0YXRpb25zIGF0IHRoZQorLy8JCXN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBUaGUgZmlyc3QgZW50cnkoIHBzQlNTKDApICkgd2lsbCBub3QgYmUgdXNlZCBhbmQgdGhlCisvLwkJc2Vjb25kIG9uZSggcHNCU1MoMSkgKSB3aWxsIGJlIHVzZWQgZm9yIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy8jZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJMTAKKyNkZWZpbmUgTUFYX0FDQ19SU1NJX0NPVU5UCQk2CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEJTUyBEZXNjcmlwdGlvbiBzZXQgRWxlbWVudCAsIHRvIHN0b3JlIHNjYW4gcmVjZWl2ZWQgQmVhY29uIGluZm9ybWF0aW9uCisvLworLy8gT3VyJ3MgZGlmZmVycyBzbGlnaHRseSBmcm9tIHRoZSBzcGVjcy4gVGhlIHNwZWNpZnkgYSBQSFlfUGFyYW1ldGVyX1NldC4KKy8vIFNpbmNlIHdlJ3JlIG9ubHkgZG9pbmcgYSBEUyBkZXNpZ24gcmlnaHQgbm93LCB3ZSBqdXN0IGhhdmUgYSBEUyBzdHJ1Y3R1cmUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3R5cGVkZWYgc3RydWN0IEJTU0Rlc2NyaXB0aW9uRWxlbWVudAoreworCXUzMgkJU2xvdFZhbGlkOworCXUzMgkJUG93ZXJTYXZlTW9kZTsKKwlSWExBWUVSMQlSeExheWVyMTsKKworICAgIHU4CQlhYlBlZXJBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07IC8vIHBlZXIgTUFDIEFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4gNi1PQ1RFVCB2YWx1ZQorICAgIHUzMgkJZHdCZ1NjYW5TdGFtcDsJCS8vIEJnU2NhbiBTZXF1ZW5jZSBDb3VudGVyIHN0YW1wLCByZWNvcmQgcHNST0FNLT5kd1NjYW5Db3VudGVyLgorCisJdTE2CQlCZWFjb25fUGVyaW9kOworCXUxNgkJd0FUSU1fV2luZG93OworCisgICAgdTgJCWFiQnNzSURbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsJCQkJLy8gNkIKKworICAgIHU4CQliQnNzVHlwZTsKKyAgICB1OAkJRFRJTV9QZXJpb2Q7ICAgICAgICAvLyAxIG9jdGV0IHVzdWFsbHkgZnJvbSBUSU0gZWxlbWVudCwgaWYgcHJlc2VudAorCXU4CQlib0luVGltZXJIYW5kbGVyOworCXU4CQlib0VSUDsJCQkvLyBhbmFseXNpcyBFUlAgb3IgKGV4dGVuZGVkKSBzdXBwb3J0ZWQgcmF0ZSBlbGVtZW50CisKKwl1OAkJVGltZXN0YW1wWzhdOworCXU4CQlCYXNpY1JhdGVbMzJdOworCXU4CQlPcGVyYXRpb25hbFJhdGVbMzJdOworCXUzMgkJZHdCYXNpY1JhdGVCaXRtYXA7CQkJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQKKwl1MzIJCWR3T3BlcmF0aW9uYWxSYXRlQml0bWFwOwkvL2JpdCBtYXAsIHJldHJpZXZlIGZyb20gU3VwcG9ydGVkUmF0ZVNldCBhbmQKKwkJCQkJCQkJCQkvLyBFeHRlbmRlZFN1cHBvcnRlZFJhdGVTZXQKKwkvLyBGb3IgUlNTSSBjYWxjdWxhdGluZworCXUzMgkJSGFsUnNzaVtNQVhfQUNDX1JTU0lfQ09VTlRdOyAvLyBFbmNvZGUuIEl0IG11c3QgdXNlIE1BQ1JPIG9mIEhBTCB0byBnZXQgdGhlIExOQSBhbmQgQUdDIGRhdGEKKwl1MzIJCUhhbFJzc2lJbmRleDsKKworCS8vLy9Gcm9tIGJlYWNvbi9wcm9iZSByZXNwb25zZQorICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgU1NJRDsJCQkJLy8gMzRCCisJdTgJcmVzZXJ2ZWRfMVsgMiBdOworCisgICAgc3RydWN0IENhcGFiaWxpdHlfSW5mb3JtYXRpb25fRWxlbWVudCAgIENhcGFiaWxpdHlJbmZvcm1hdGlvbjsgIC8vIDJCCisJdTgJcmVzZXJ2ZWRfMlsgMiBdOworCisgICAgc3RydWN0IENGX1BhcmFtZXRlcl9TZXRfRWxlbWVudCAgICBDRl9QYXJhbWV0ZXJfU2V0OwkJLy8gOEIKKyAgICBzdHJ1Y3QgSUJTU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgIElCU1NfUGFyYW1ldGVyX1NldDsJCS8vIDRCCisgICAgc3RydWN0IFRJTV9FbGVtZW50ICAgICAgICAgICAgICAgICBUSU1fRWxlbWVudF9TZXQ7IAkJCS8vIDI1NkIKKworICAgIHN0cnVjdCBEU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgRFNfUGFyYW1ldGVyX1NldDsJCS8vIDNCCisJdTgJcmVzZXJ2ZWRfMzsKKworCXN0cnVjdCBFUlBfSW5mb3JtYXRpb25fRWxlbWVudAkJRVJQX0luZm9ybWF0aW9uX1NldDsJLy8gM0IKKwl1OAlyZXNlcnZlZF80OworCisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50ICAgICBTdXBwb3J0ZWRSYXRlU2V0OwkJCS8vIDEwQgorCXU4CXJlc2VydmVkXzVbMl07CisKKwlzdHJ1Y3QgRXh0ZW5kZWRfU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQJRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0OwkvLyAyNTdCCisJdTgJcmVzZXJ2ZWRfNlszXTsKKworCXU4CWJhbmQ7CisJdTgJcmVzZXJ2ZWRfN1szXTsKKworCS8vIGZvciBNTE1FIG1vZHVsZQorICAgIHUxNgkJd1N0YXRlOwkJCS8vIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0KKwl1MTYJCXdJbmRleDsJCQkvLyBUSElTIEJTUyBlbGVtZW50IGVudHJ5IGluZGV4CisKKwl2b2lkKglwc0FkYXB0ZXI7CQkvLyBwb2ludGVyIHRvIFRISVMgQWRhcHRlcgorCU9TX1RJTUVSCW5UaW1lcjsgIC8vIE1MTUUgdGltZXIKKworICAgIC8vIEF1dGhlbnRpY2F0aW9uCisgICAgdTE2CQl3QXV0aEFsZ287ICAgICAgLy8gcGVlciBNQUMgTUxNRSB1c2UgQXV0aCBhbGdvcml0aG0sIGRlZmF1bHQgT1BFTl9BVVRICisgICAgdTE2CQl3QXV0aFNlcU51bTsgICAgLy8gY3VycmVudCBsb2NhbCBNQUMgc2VuZG91dCBBdXRoUmVxIHNlcXVlbmNlIG51bWJlcgorCisJdTgJCWF1dGhfY2hhbGxlbmdlVGV4dFsxMjhdOworCisJLy8vL0ZvciBYUDoKKyAgICB1MzIJCWllc19sZW47CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50IGxlbmd0aAorICAgIHU4CQlpZXNbMjU2XTsJCS8vIGluZm9ybWF0aW9uIGVsZW1lbnQKKworCS8vLy9Gb3IgV1BBCisJdTgJUnNuSWVfVHlwZVsyXTsJCS8vYWRkZWQgYnkgd3MgZm9yIGRpc3Rpbmd1aXNoIFdQQSBhbmQgV1BBMiAwNS8xNC8wNAorCXU4CVJzbkllX2xlbjsKKyAgICB1OAlSc25fTnVtOworCisgICAgLy8gdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyxhZGRkZWQgYnkgd3MgMDkvMDUvMDQKKwlTVUlURV9TRUxFQ1RPUgkJCWdyb3VwX2NpcGhlcjsgLy8gNEIKKwlTVUlURV9TRUxFQ1RPUgkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07CisJU1VJVEVfU0VMRUNUT1IJCQlhdXRoX2tleV9tZ3Rfc3VpdGVzW1dMQU5fTUFYX0FVVEhfS0VZX01HVF9TVUlURV9MSVNUX0NPVU5UXTsKKworCXUxNgkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKKwl1MTYJCQkJCWF1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKKworCXU4CQkJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXJlc2VydmVkXzhbMl07CisKKwlzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudCAgcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKKwl1OAkJCQkJcmVzZXJ2ZWRfOVsyXTsKKworICAgIC8vdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyBmb3IgV1BBMgorICAgICNpZmRlZiBfV1BBMl8KKwl1MzIJCQkJCXByZV9hdXRoOwkJLy9hZGRlZCBieSBXUyBmb3IgZGlzdGluZ3Vpc2ggZm9yIDA1LzA0LzA0CisgICAgU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2dyb3VwX2NpcGhlcjsgLy8gNEIKKwlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZXNbV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UXTsKKwlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07CisKKwl1MTYJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKKwl1MTYJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX2NvdW50OworCisJdTgJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKKwl1OAkJCQkJd3BhMl9hdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXJlc2VydmVkXzEwWzJdOworCisJc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHdwYTJfcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKKwl1OAkJCQkJcmVzZXJ2ZWRfMTFbMl07CisgICAgI2VuZGlmIC8vZW5kaWYgX1dQQTJfCisKKwkvL0ZvciBSZXBsYXkgcHJvdGVjdGlvbgorLy8JdTgJCVBhaXJ3aXNlVFNDWzZdOworLy8JdTgJCUdyb3VwVFNDWzZdOworCisJLy8vL0ZvciB1cC10by1kYXRlCisJdTMyCQlTY2FuVGltZVN0YW1wOwkvL2ZvciB0aGUgZGVjaXNpb24gd2hldGhlciB0aGUgc3RhdGlvbi9BUChtYXkgZXhpc3QgYXQKKwkJCQkJCQkvL2RpZmZlcmVudCBjaGFubmVscykgaGFzIGxlZnQuIEl0IG11c3QgYmUgZGV0ZWN0ZWQgYnkKKwkJCQkJCQkvL3NjYW5uaW5nLiBMb2NhbCBkZXZpY2UgbWF5IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQuCisJdTMyCQlCc3NUaW1lU3RhbXA7CS8vT25seSBmb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAoZXhpc3QgaW4KKwkJCQkJCQkvL3RoZSBzYW1lIGNoYW5uZWwsIGFuZCBubyBzY2FubmluZykgaWYgbG9jYWwgZGV2aWNlIGhhcworCQkJCQkJCS8vY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4KKworCS8vIDIwMDYxMTA4IEFkZCBmb3Igc3RvcmluZyBXUFNfSUUuIFtFIGlkXVtMZW5ndGhdW09VSV1bRGF0YV0KKwl1OAkJV1BTX0lFX0RhdGFbTUFYX0lFX0FQUEVORF9TSVpFXTsKKwl1MTYJCVdQU19JRV9sZW5ndGg7CisJdTE2CQlXUFNfSUVfbGVuZ3RoX3RtcDsgLy8gRm9yIHZlcmlmeSB0aGVyZSBpcyBhbiBXUFNfSUUgaW4gQmVhY29uIG9yIHByb2JlIHJlc3BvbnNlCisKK30gV0JfQlNTREVTQ1JJUFRJT04sICpQV0JfQlNTREVTQ1JJUFRJT047CisKKyNkZWZpbmUgd0JTU0Nvbm5lY3RlZFNUQShBZGFwdGVyKSAgICAgICAgICAgICBcCisgICAgKCh1MTYpKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCkKKworI2RlZmluZSBwc0JTUyhpKQkJCSgmKEFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50WyhpKV0pKQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWU1MDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vIFJvdGF0aW9uIGZ1bmN0aW9ucyBvbiAzMiBiaXQgdmFsdWVzCisjZGVmaW5lIFJPTDMyKCBBLCBuICkgXAorICAgICggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgICYgKCAoMVVMIDw8IChuKSkgLSAxICkgKSApCisKKyNkZWZpbmUgUk9SMzIoIEEsIG4gKSAgIFJPTDMyKCAoQSksIDMyLShuKSApCisKKwordHlwZWRlZiBzdHJ1Y3QgdGtpcAoreworICAgIHUzMglLMCwgSzE7CQkvLyBLZXkKKwl1bmlvbgorCXsKKwkJc3RydWN0IC8vIEN1cnJlbnQgc3RhdGUKKwkJeworCQkJdTMyCUw7CisJCQl1MzIJUjsKKwkJfTsKKwkJdTgJTFJbOF07CisJfTsKKwl1bmlvbgorCXsKKwkJdTMyCU07CQkvLyBNZXNzYWdlIGFjY3VtdWxhdG9yIChzaW5nbGUgd29yZCkKKwkJdTgJTWJbNF07CisJfTsKKwlzMzIJCWJ5dGVzX2luX007CS8vICMgYnl0ZXMgaW4gTQorfSB0a2lwX3Q7CisKKy8vdm9pZCBfYXBwZW5kX2RhdGEoIFBVQ0hBUiBwRGF0YSwgdTE2IHNpemUsIHRraXBfdCAqcCApOwordm9pZCBNZHNfTWljR2V0KCAgdm9pZCogQWRhcHRlciwgIHZvaWQqIHBSeExheWVyMSwgIFBVQ0hBUiBwS2V5LCAgUFVDSEFSIHBNaWMgKTsKK3ZvaWQgTWRzX01pY0ZpbGwoICB2b2lkKiBBZGFwdGVyLCAgdm9pZCogcERlcywgIFBVQ0hBUiBYbWl0QnVmQWRkcmVzcyApOworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwNmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmgKQEAgLTAsMCArMSwxMjUgQEAKKworI2lmbmRlZiBfX0dMXzgwMjExX0hfXworI2RlZmluZSBfX0dMXzgwMjExX0hfXworCisvKioqKioqKioqKioqKioqKioqIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQlNTIFR5cGUgKi8KK2VudW0geworICAgIFdMQU5fQlNTVFlQRV9JTkZSQVNUUlVDVFVSRSAgICAgICAgID0gMCwKKyAgICBXTEFOX0JTU1RZUEVfSU5ERVBFTkRFTlQsCisgICAgV0xBTl9CU1NUWVBFX0FOWV9CU1MsCit9OworCisKKworLyogUHJlYW1ibGVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjAzPiAqLwordHlwZWRlZiBlbnVtIHByZWFtYmxlX3R5cGUgeworICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVCwKKyAgICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORywKK30gICAgcHJlYW1ibGVfdHlwZV9lOworCisKKy8qIFNsb3RfVGltZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDg+ICovCit0eXBlZGVmIGVudW0gc2xvdF90aW1lX3R5cGUgeworICAgIFdMQU5fU0xPVF9USU1FX1RZUEVfTE9ORywKKyAgICBXTEFOX1NMT1RfVElNRV9UWVBFX1NIT1JULAorfSAgICBzbG90X3RpbWVfdHlwZV9lOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVuY3J5cHRpb24gTW9kZSAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRVBfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIFdFUF82NCwKKyAgICBXRVBfMTI4LAorCisgICAgRU5DUllQVF9ESVNBQkxFLAorICAgIEVOQ1JZUFRfV0VQLAorICAgIEVOQ1JZUFRfV0VQX05PS0VZLAorICAgIEVOQ1JZUFRfVEtJUCwKKyAgICBFTkNSWVBUX1RLSVBfTk9LRVksCisgICAgRU5DUllQVF9DQ01QLAorICAgIEVOQ1JZUFRfQ0NNUF9OT0tFWSwKK30gICAgZW5jcnlwdGlvbl9tb2RlX2U7CisKK3R5cGVkZWYgZW51bSBfV0xBTl9SQURJTyB7CisgICAgV0xBTl9SQURJT19PTiwKKyAgICBXTEFOX1JBRElPX09GRiwKKyAgICBXTEFOX1JBRElPX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IFdMQU5fUkFESU87CisKK3R5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX1NUQVRVUyB7CisJV0xBTl9SQURJTyBIV1N0YXR1czsKKwlXTEFOX1JBRElPIFNXU3RhdHVzOworfSBXTEFOX1JBRElPX1NUQVRVUzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAyMDA0MTAyMSAxLjEuODEuMTAwMCB5YmppYW5nCisvLyBhZGQgZm9yIHJhZGlvIG5vdGlmaWNhdGlvbgordHlwZWRlZgordm9pZCAoKlJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSKSgKKwl2b2lkICpEYXRhLAorCXZvaWQgKlJhZGlvU3RhdHVzQnVmZmVyLAorCXUzMiBSYWRpb1N0YXR1c0J1ZmZlckxlbgorCSk7CisKK3R5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX05PVElGSUNBVElPTgoreworICAgIFJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSIFJhZGlvQ2hhbmdlSGFuZGxlcjsKKyAgICB2b2lkICpEYXRhOworfSBXTEFOX1JBRElPX05PVElGSUNBVElPTjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAyMDA0MTEwMiAxLjEuOTEuMTAwMCB5YmppYW5nCisvLyBhZGQgZm9yIE9JRF84MDJfMTFfQ1VTVF9SRUdJT05fQ0FQQUJJTElUSUVTIGFuZCBPSURfODAyXzExX09JRF9SRUdJT04KK3R5cGVkZWYgZW51bSBfV0xBTl9SRUdJT05fQ09ERQoreworCVdMQU5fUkVHSU9OX1VOS05PV04sCisJV0xBTl9SRUdJT05fRVVST1BFLAorCVdMQU5fUkVHSU9OX0pBUEFOLAorCVdMQU5fUkVHSU9OX1VTQSwKKwlXTEFOX1JFR0lPTl9GUkFOQ0UsCisJV0xBTl9SRUdJT05fU1BBSU4sCisJV0xBTl9SRUdJT05fSVNSQUVMLAorCVdMQU5fUkVHSU9OX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IFdMQU5fUkVHSU9OX0NPREU7CisKKyNkZWZpbmUgUkVHSU9OX05BTUVfTUFYX0xFTkdUSCAgIDI1NgorCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0hBTk5FTFMKK3sKKwl1MzIgTGVuZ3RoOworCXUzMiBOYW1lTGVuZ3RoOworCXU4IE5hbWVbUkVHSU9OX05BTUVfTUFYX0xFTkdUSF07CisJV0xBTl9SRUdJT05fQ09ERSBDb2RlOworCXUzMiBGcmVxdWVuY3lbMV07Cit9IFdMQU5fUkVHSU9OX0NIQU5ORUxTOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0FQQUJJTElUSUVTCit7CisJdTMyIE51bWJlck9mSXRlbXM7CisJV0xBTl9SRUdJT05fQ0hBTk5FTFMgUmVnaW9uWzFdOworfSBXTEFOX1JFR0lPTl9DQVBBQklMSVRJRVM7CisKK3R5cGVkZWYgc3RydWN0IF9yZWdpb25fbmFtZV9tYXAgeworCVdMQU5fUkVHSU9OX0NPREUgcmVnaW9uOworCXU4ICpuYW1lOworCXUzMiAqY2hhbm5lbHM7Cit9IHJlZ2lvbl9uYW1lX21hcDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIE1BQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XQorI2RlZmluZSBNQUNTVFIgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIgorCisvLyBUT0RPOiAwNjI3IGtldmluCisjZGVmaW5lIE1JQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XSwgKGEpWzZdLCAoYSlbN10KKyNkZWZpbmUgTUlDU1RSICIlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgiCisKKyNkZWZpbmUgTUlDS0VZMlNUUihhKSAgIE1JQzJTVFIoYSkKKyNkZWZpbmUgTUlDS0VZU1RSICAgICAgIE1JQ1NUUgorCisKKyNlbmRpZiAvKiBfX0dMXzgwMjExX0hfXyAqLworLyoqKiBlbmQgb2YgZmlsZSAqKiovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIzNWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmgKQEAgLTAsMCArMSw2NzggQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIElPQ1RMUy5IIC0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBEZWZpbmUgdGhlIElPQ1RMIGNvZGVzLgorLy8KKy8vICBSZXZpc2lvbiBoaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmbmRlZiBfSU9DVExTX0gKKyNkZWZpbmUgX0lPQ1RMU19ICisKKy8vIFBENDMgS2VlcCBpdCAtIFVzZWQgd2l0aCB0aGUgV2luMzMgYXBwbGljYXRpb24KKy8vICNpbmNsdWRlIDx3aW5pb2N0bC5oPgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAyMDA0MDEwOCBBREQgdGhlIGZvbGxvdyBmb3IgdGVzdAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBJTkZPUk1BVElPTl9MRU5HVEggc2l6ZW9mKHVuc2lnbmVkIGludCkKKworI2RlZmluZSBXQjMyX0lPQ1RMX0lOREVYICAweDA5MDAgLy/CrcOXwqfEj8S9SMWkS8W5xbDFvWUvLworCisjZGVmaW5lIFdiMzJfUmVnaXN0ZXJSZWFkCQkJQ1RMX0NPREUoCVwKKwkJCUZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAwLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9SZWdpc3RlcldyaXRlCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZW5kUGFja2V0CQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMiwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfUXVlcnlTZW5kUmVzdWx0CQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDMsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1NldEZyYWdtZW50VGhyZXNob2xkCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2V0TGlua1N0YXR1cwkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA1LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZXRCdWxrSW4JCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDYsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX0xvb3BiYWNrVGVzdAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNywJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRUVQcm9tUmVhZAkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDgsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0VFUHJvbVdyaXRlCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA5LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9GbGFzaFJlYWREYXRhCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hXcml0ZQkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDExLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9GbGFzaFdyaXRlQnVyc3QJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTIsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdGFydAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTMsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdG9wCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxNCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfVHhCdXJzdFN0YXR1cwkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTUsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gRm9yIElPQ1RMIGludGVyZmFjZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTElOS05BTUVfU1RSSU5HICAgICAiXFxEb3NEZXZpY2VzXFxXMzVVTkQiCisjZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgIlxcRGV2aWNlXFxXMzVVTkQiCisjZGVmaW5lIEFQUExJQ0FUSU9OX0xJTksJIlxcXFwuXFxXMzVVTkQiCisKKyNkZWZpbmUgV0JfSU9DVExfSU5ERVggICAgICAweDA4MDAKKyNkZWZpbmUgV0JfSU9DVExfVFNfSU5ERVggICBXQl9JT0NUTF9JTkRFWCArIDYwCisjZGVmaW5lIFdCX0lPQ1RMX0RVVF9JTkRFWCAgV0JfSU9DVExfVFNfSU5ERVggKyA0MAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJT0NUTFMgZGVmaW5lZCBmb3IgRFVUIChEZXZpY2UgVW5kZXIgVGVzdCkKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUworLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFTdGF0aW9uSUQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExU3RhdGlvbklELiBEZW1vIG9ubHkuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19BRERSRVNTICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NfREVTQ1JJUFRJT04KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGluZm8uIG9mIHRoZSBjdXJyZW50IGNvbm5lY3RlZCBCU1MuCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURQorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCB0cmFuc21pc3Npb24gcmF0ZS4KKy8vIFNldCAgOiBTZXQgdGhlIHRyYW5zbWlzc2lvbiByYXRlIG9mIHRoZSBUeCBwYWNrZXRzLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFICAgICAgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IFNUQSBzdGF0ZS4gKFdCX1NUQVNUQVRFIHR5cGUpCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1VSUkVOVF9TVEFfU1RBVEUgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8vLy8vLy8vLy8gMTAvMzEvMDInIEFkZGVkIC8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVJUX0lCU1NfUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogU3RhcnQgYSBuZXcgSUJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogU3luY2hyb25pemUgd2l0aCB0aGUgc2VsZWN0ZWQgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVCAgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IEF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBEZUF1dGhlbnRpY2F0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RFQVVUSEVOX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDksICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRUFTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFJlQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IERpc0Fzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xECisvLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMVJUU1RocmVzaG9sZAorLy8gU2V0ICA6IFNldCB0aGUgZG90MTFSVFNUaHJlc29sZAorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xEICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTMsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlNT0RFCisvLyBRdWVyeTogR2V0IHRoZSBXRVAga2V5IG1vZGUuCisvLyBTZXQgIDogU2V0IHRoZSBXRVAga2V5IG1vZGU6IGRpc2FibGUvNjQgYml0cy8xMjggYml0cworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERSAgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlWQUxVRQorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogZmlsbCBpbiB0aGUgV0VQIGtleSB2YWx1ZQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JFU0VUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBSZXNldCBTL1cgYW5kIEgvVworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVCAgICAgICAgICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFNldCBQb3dlciBTYXZlIE1vZGUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUE9XRVJfU0FWRSAgICBDVExfQ09ERSggICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4KKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6CisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1RfU0NBTiBDVExfQ09ERSggICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVAorLy8gUXVlcnk6IFJldHVybiB0aGUgQlNTIGluZm8gb2YgQlNTcyBpbiB0aGUgbGFzdCBzY2FubmluZyBwcm9jZXNzCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVCAgICBDVExfQ09ERSggICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTCisvLyBRdWVyeTogUmV0dXJuIHRoZSBzdGF0aXN0aWNzIG9mIFR4L1J4LgorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVRJU1RJQ1MgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTgorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBtb2RlIHRvIGFjY2VwdCBiZWFjb24gb3Igbm90LgorLy8gU2V0ICA6IEVuYWJsZSBvciBkaXNhYmxlIGFsbG93aW5nIHRoZSBIVy1NQUMgdG8gcGFzcyB0aGUgYmVhY29uIHRvIHRoZSBTVy1NQUMKKy8vIEFyZ3VtZW50czogdW5zaWduZWQgY2hhcgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BQ0NFUFRfQkVBQ09OICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHJvYW1pbmcgZnVuY3Rpb24gc3RhdHVzCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIHJvYW1pbmcgZnVuY3Rpb24uCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUk9BTUlORyAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9EVE8KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyhEYXRhIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uKQorLy8gICAgICAgIGZ1bmN0aW9uIHN0YXR1cyAoVFJVRSBvciBGQUxTRSkKKy8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgRFRPIGZ1bmN0aW9uLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE8gICAgICAgICAgICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjMsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZCisvLyBRdWVyeTogUmV0dXJuIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBzdGF0dXMuIChUUlVFL09OIG9yIEZBTFNFL09GRikKKy8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgYW50ZW5uYSBkaXZlcnNpdHkuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vLS0tLS0tLS0tLS0tLS0gbmV3IGFkZGVkIGZvciBhK2IrZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuIChNT0RFXzgwMl8xMV9CRywgTU9ERV84MDJfMTFfQSwKKy8vCQkJIE1PREVfODAyXzExX0FCRywgTU9ERV84MDJfMTFfQkdfSUJTUykKKy8vIFNldCAgOiBTZXQgdGhlIE1BQyBvcGVyYXRpb24gbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHggcmF0ZSB3aGljaCBmb2xsb3dzIHRoZSBkZWZpbml0aW9uIGluIHNwZWMuIChmb3IKKy8vCQkJZXhhbXBsZSwgNS41TSA9PiAweDBiKQorLy8gU2V0ICA6IE5vbmUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9QUkVBTUJMRV9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBwcmVhbWJsZSBtb2RlLiAoYXV0byBvciBsb25nKQorLy8gU2V0ICA6IFNldCB0aGUgcHJlYW1ibGUgbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjcsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NMT1RfVElNRV9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBzbG90IHRpbWUgbW9kZS4gKGF1dG8gb3IgbG9uZykKKy8vIFNldCAgOiBTZXQgdGhlIHNsb3QgdGltZSBtb2RlLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUworLy8gUXVlcnk6CisvLyBTZXQgIDogTk9ORQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUyBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjksICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgdHggcmF0ZSBtb2RlLiAoUkFURV9BVVRPLCBSQVRFXzFNLCAuLiwgUkFURV81NE0sIFJBVEVfTUFYKQorLy8gU2V0ICA6IFNldCB0aGUgdHggcmF0ZSBtb2RlLiAgKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9NT0RFIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyBwYXJhbWV0ZXJzCisvLyBTZXQgIDogU2V0IHRoZSBEVE8gcGFyYW1ldGVycworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE9fUEFSQSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRworLy8gUXVlcnk6IFJldHVybiBldmVudCBsb2cKKy8vIFNldCAgOiBSZXNldCBldmVudCBsb2cKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRVZFTlRfTE9HIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4KKy8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKKy8vIFNldCAgOiBTZXQgQ1dNaW4gdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4gQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9DV01BWAorLy8gUXVlcnk6IE5PTkUoSXQgd2lsbCBiZSBvYnRhaW5lZCBieSBJT0NUTF9XQl84MDJfMTFfRFVUX0FEVkFOQ0VfU1RBVFVTKQorLy8gU2V0ICA6IFNldCBDV01heCB2YWx1ZQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9DV01BWCBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSU9DVExzIGZvciBUZXN0aW5nCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRworLy8gUXVlcnk6IE5vbmUKKy8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIEN4eCByZWdpc3Rlci4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9DWFhfUkVHCisvLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgQ3h4IHJlZ2lzdGVyLgorLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHCisvLyBRdWVyeTogTm9uZQorLy8gU2V0ICA6IFdyaXRlIHRoZSB2YWx1ZSB0byBvbmUgb2YgRHh4IHJlZ2lzdGVyLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0RYWF9SRUcKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBEeHggcmVnaXN0ZXIuCisvLyBTZXQgIDogV3JpdGUgdGhlIHJlZyBuby4gKDB4MDAsIDB4MDQsIDB4MDggZXRjKQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gW1RTXQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9SQVRFICAgICAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0NVUlJFTlRfQ0hBTk5FTCAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BQkxFX1NFUU5PICAgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19FTkFMQkVfQUNLRURQQUNLRVQgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lOSElCSVRfQ1JDICAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkVTRVRfUkNWX0NPVU5URVIgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfVFhfVFJJR0dFUiAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0ZBSUxFRF9UWF9DT1VOVCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gW1RTMV0KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1RYX1BPV0VSICAgICAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTU9ERV9FTkFCTEUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRElTQUJMRQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQU5URU5OQQkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FEQVBURVJfSU5GTwkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTUFDX0FERFJFU1MJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU0lECQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkZfUEFSQU1FVEVSCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GSUxURVIJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DQUxJQlJBVElPTgkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQlNTX01PREUJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfU1NJRAkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lCU1NfQ0hBTk5FTAkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gc2V0L3F1ZXJ5IHRoZSBzbG90IHRpbWUgdmFsdWUoc2hvcnQgb3IgbG9uZyBzbG90IHRpbWUpCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NMT1RfVElNRQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUlhfU1RBVElTVElDUwkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZW5kaWYgIC8vICNpZm5kZWYgX0lPQ1RMU19ICisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjAwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8vCisvLyBjb21tb24uaAorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgT1MgZGVwZW5kYW50IGRlZmluaXRpb24gYW5kIGZ1bmN0aW9uLgorLy8gRXZlcnkgT1MgaGFzIHRoaXMgZmlsZSBpbmRpdmlkdWFsLgorLy8KKworI2RlZmluZSBEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggX0EgKQorCisjaWZuZGVmIENPTU1PTl9ERUYKKyNkZWZpbmUgQ09NTU9OX0RFRgorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvL25lZWQgZm9yIGtlcm5lbCBhbGVydAorI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+IC8vbWVtb3J5IGFsbG9jYXRlCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ly9uZWVkIGZvciBpbml0IGFuZCBleGl0IG1vZHVsZXMgbWFyY28KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKworLy8jZGVmaW5lIERFQlVHX0VOQUJMRUQgIDEKKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tb24gdHlwZSBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit0eXBlZGVmIHU4KiAgICAgICAgICAgIFBVQ0hBUjsKK3R5cGVkZWYgczgqICAgICAgICAgICAgUENIQVI7Cit0eXBlZGVmIHU4KiAgICAgICAgICAgIFBCT09MRUFOOwordHlwZWRlZiB1MTYqICAgICAgICAgICBQVVNIT1JUOwordHlwZWRlZiB1MzIqICAgICAgICAgICBQVUxPTkc7Cit0eXBlZGVmIHMxNiogICBQU0hPUlQ7CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIElHTk9SRSAgICAgIDIKKyNkZWZpbmUJU1VDQ0VTUyAgICAgMQorI2RlZmluZQlGQUlMVVJFICAgICAwCisKKworI2lmbmRlZiB0cnVlCisjZGVmaW5lIHRydWUgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIGZhbHNlCisjZGVmaW5lIGZhbHNlICAgICAgIDAKKyNlbmRpZgorCisvLyBQRDQzIDIwMDIxMTA4CisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAgICAgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX01FRElBX0NPTk5FQ1QgMQorI2RlZmluZSBTVEFUVVNfTUVESUFfRElTQ09OTkVDVCAwCisKKyNpZm5kZWYgQklUCisjZGVmaW5lIEJJVCh4KSAgICAgICAgICAgICAgICAgICgxIDw8ICh4KSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB1cmIgKiBQVVJCOworCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIGZ1bmN0aW9uIGRlZmluaXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgYWJzCisjZGVmaW5lIGFicyhfVCkJCQkJCQkJKChfVCkgPCAwID8gLV9UIDogX1QpCisjZW5kaWYKKyNkZWZpbmUgREVCVUdfRU5BQkxFRAorI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgorI2lmZGVmIERFQlVHX0VOQUJMRUQKKyNkZWZpbmUgV0JERUJVRyggX00gKQlwcmludGsgX00KKyNlbHNlCisjZGVmaW5lIFdCREVCVUcoIF9NICkJMAorI2VuZGlmCisKKyNkZWZpbmUgT1NfRElTQ09OTkVDVEVECTAKKyNkZWZpbmUgT1NfQ09OTkVDVEVECTEKKworCisjZGVmaW5lIE9TX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkKKyNkZWZpbmUgT1NfUE1LSURfU1RBVFVTX0VWRU5UKCBfQSApCisKKworLyogVWZmLCBubywgbG9uZ3MgYXJlIG5vdCBhdG9taWMgb24gYWxsIGFyY2hpdGVjdHVyZXMgTGludXgKKyAqIHN1cHBvcnRzLiBUaGlzIHNob3VsZCByZWFsbHkgdXNlIGF0b21pY190ICovCisKKyNkZWZpbmUgT1NfQVRPTUlDCQkJdTMyCisjZGVmaW5lIE9TX0FUT01JQ19SRUFEKCBfQSwgX1YgKQlfVgorI2RlZmluZSBPU19BVE9NSUNfSU5DKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNJbmMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19BVE9NSUNfREVDKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNEZWMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19NRU1PUllfQ0xFQVIoIF9BLCBfUyApCW1lbXNldCggKFBVQ0hBUilfQSwwLF9TKQorI2RlZmluZSBPU19NRU1PUllfQ09NUEFSRSggX0EsIF9CLCBfUyApCShtZW1jbXAoX0EsX0IsX1MpPyAwIDogMSkgLy8gRGVmaW5pdGlvbiBpcyByZXZlcnNlIHdpdGggTmRpcyAxOiB0aGUgc2FtZSAwOiBkaWZmZXJlbnQKKworCisjZGVmaW5lIE9TX1NQSU5fTE9DSwkJCQlzcGlubG9ja190CisjZGVmaW5lIE9TX1NQSU5fTE9DS19BTExPQ0FURSggX1MgKQkJc3Bpbl9sb2NrX2luaXQoIF9TICk7CisjZGVmaW5lIE9TX1NQSU5fTE9DS19GUkVFKCBfUyApCisjZGVmaW5lIE9TX1NQSU5fTE9DS19BQ1FVSVJFRCggX1MgKQkJc3Bpbl9sb2NrX2lycSggX1MgKQorI2RlZmluZSBPU19TUElOX0xPQ0tfUkVMRUFTRUQoIF9TICkJCXNwaW5fdW5sb2NrX2lycSggX1MgKTsKKworI2RlZmluZSBPU19USU1FUglzdHJ1Y3QgdGltZXJfbGlzdAorI2RlZmluZSBPU19USU1FUl9JTklUSUFMKCBfVCwgX0YsIF9QICkJCQlcCit7CQkJCQkJCVwKKwlpbml0X3RpbWVyKCBfVCApOwkJCQlcCisJKF9UKS0+ZnVuY3Rpb24gPSAodm9pZCAqKV9GIyNfMWE7CQlcCisJKF9UKS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKV9QOwkJCVwKK30KKworLy8gX1MgOiBNaWxsaXNlY29uZAorLy8gMjAwNjA0MjAgQXQgbGVhc3QgMSBsYXJnZSB0aGFuIGppZmZpZXMKKyNkZWZpbmUgT1NfVElNRVJfU0VUKCBfVCwgX1MgKQkJCQkJXAorewkJCQkJCQkJXAorCShfVCktPmV4cGlyZXMgPSBqaWZmaWVzICsgKChfUypIWis5OTkpLzEwMDApO1wKKwlhZGRfdGltZXIoIF9UICk7CQkJCQlcCit9CisjZGVmaW5lIE9TX1RJTUVSX0NBTkNFTCggX1QsIF9CICkJCWRlbF90aW1lcl9zeW5jKCBfVCApCisjZGVmaW5lIE9TX1RJTUVSX0dFVF9TWVNfVElNRSggX1QgKQkJKCpfVD1qaWZmaWVzKQorCisKKyNlbmRpZiAvLyBDT01NT05fREVGCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvc3lzZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ZDYzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oCkBAIC0wLDAgKzEsNzMgQEAKKworCisvLworLy8gV2luYm9uZCBXTEFOIFN5c3RlbSBDb25maWd1cmF0aW9uIGRlZmluZXMKKy8vCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDdXJyZW50IGRpcmVjdG9yeSBpcyBMaW51eAorLy8gVGhlIGRlZmluaXRpb24gV0JfTElOVVggaXMgYSBrZXl3b3JkIGZvciB0aGlzIE9TCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBTWVNfREVGX0gKKyNkZWZpbmUgU1lTX0RFRl9ICisjZGVmaW5lIFdCX0xJTlVYCisjZGVmaW5lIFdCX0xJTlVYX1dQQV9QU0sKKworCisvLyNkZWZpbmUgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKyNkZWZpbmUgX1VTRV9GQUxMQkFDS19SQVRFXworLy8jZGVmaW5lIEFOVERJVl9ERUZBVUxUX09OCisKKyNkZWZpbmUgX1dQQTJfCS8vIDIwMDYxMTIyIEl0J3MgbmVlZGVkIGZvciBjdXJyZW50IExpbnV4IGRyaXZlcgorCisKKyNpZm5kZWYgX1dQQV9QU0tfREVCVUcKKyN1bmRlZiAgX1dQQV9QU0tfREVCVUcKKyNlbmRpZgorCisvLyBkZWJ1ZyBwcmludCBvcHRpb25zLCBtYXJrIHdoYXQgZGVidWcgeW91IGRvbid0IG5lZWQKKworI2lmZGVmIEZVTExfREVCVUcKKyNkZWZpbmUgX1BFX1NUQVRFX0RVTVBfCisjZGVmaW5lIF9QRV9UWF9EVU1QXworI2RlZmluZSBfUEVfUlhfRFVNUF8KKyNkZWZpbmUgX1BFX09JRF9EVU1QXworI2RlZmluZSBfUEVfRFRPX0RVTVBfCisjZGVmaW5lIF9QRV9SRUdfRFVNUF8KKyNkZWZpbmUgX1BFX1VTQl9JTklfRFVNUF8KKyNlbmRpZgorCisKKworI2luY2x1ZGUgImNvbW1vbi5oIgkvLyBJbmRpdmlkdWFsIGZpbGUgZGVwZW5kcyBvbiBPUworCisjaW5jbHVkZSAiLi4vd2IzNV92ZXIuaCIKKyNpbmNsdWRlICIuLi9tYWNfc3RydWN0dXJlcy5oIgorI2luY2x1ZGUgIi4uL2RzX3RraXAuaCIKKyNpbmNsdWRlICIuLi9sb2NhbHBhcmEuaCIKKyNpbmNsdWRlICIuLi9zbWVfcy5oIgorI2luY2x1ZGUgIi4uL3NjYW5fcy5oIgorI2luY2x1ZGUgIi4uL21kc19zLmgiCisjaW5jbHVkZSAiLi4vbWxtZV9zLmgiCisjaW5jbHVkZSAiLi4vYnNzZHNjcHQuaCIKKyNpbmNsdWRlICIuLi9zbWVfYXBpLmgiCisjaW5jbHVkZSAiLi4vZ2xfODAyMTEuaCIKKyNpbmNsdWRlICIuLi9tdG8uaCIKKyNpbmNsdWRlICIuLi93YmxpbnV4X3MuaCIKKyNpbmNsdWRlICIuLi93YmhhbF9zLmgiCisKKworI2luY2x1ZGUgIi4uL2FkYXB0ZXIuaCIKKworI2luY2x1ZGUgIi4uL21sbWVfbWliLmgiCisjaW5jbHVkZSAiLi4vbWRzX2YuaCIKKyNpbmNsdWRlICIuLi9ic3NfZi5oIgorI2luY2x1ZGUgIi4uL21sbWV0eHJ4X2YuaCIKKyNpbmNsdWRlICIuLi9tdG9fZi5oIgorI2luY2x1ZGUgIi4uL3diaGFsX2YuaCIKKyNpbmNsdWRlICIuLi93YmxpbnV4X2YuaCIKKy8vIEtlcm5lbCBUaW1lciByZXNvbHV0aW9uLCBORElTIGlzIDEwbXMsIDEwMDAwdXMKKyNkZWZpbmUgTUlOX1RJTUVPVVRfVkFMCSgxMCkgLy9tcworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGI0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnLmMKQEAgLTAsMCArMSw3NDcgQEAKKyNpbmNsdWRlICJzeXNkZWYuaCIKKworZXh0ZXJuIHZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSk7CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CisvLyBSZWdpc3Rlck5vIDogc3RhcnQgYmFzZQorLy8gcFJlZ2lzdGVyRGF0YSA6IGRhdGEgcG9pbnQKKy8vIE51bWJlck9mRGF0YSA6IG51bWJlciBvZiByZWdpc3RlciBkYXRhCisvLyBGbGFnIDogQVVUT19JTkNSRU1FTlQgLSBSZWdpc3Rlck5vIHdpbGwgYXV0byBpbmNyZW1lbnQgNAorLy8JCSAgTk9fSU5DUkVNRU5UIC0gRnVuY3Rpb24gd2lsbCB3cml0ZSBkYXRhIGludG8gdGhlIHNhbWUgcmVnaXN0ZXIKK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfQnVyc3RXcml0ZShwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCBQVUxPTkcgcFJlZ2lzdGVyRGF0YSwgdTggTnVtYmVyT2ZEYXRhLCB1OCBGbGFnKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKwlzdHJ1Y3QgICAgICB1c2JfY3RybHJlcXVlc3QgKmRyOworCXUxNgkJaSwgRGF0YVNpemUgPSBOdW1iZXJPZkRhdGEqNDsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gVHJ5aW5nIHRvIHVzZSBidXJzdCB3cml0ZSBmdW5jdGlvbiBpZiB1c2UgbmV3IGhhcmR3YXJlCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgRGF0YVNpemUgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYoIHBVcmIgJiYgcFJlZ1F1ZXVlICkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDI7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+cEJ1ZmZlciA9IChQVUxPTkcpKChQVUNIQVIpcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQltZW1jcHkoIHBSZWdRdWV1ZS0+cEJ1ZmZlciwgcFJlZ2lzdGVyRGF0YSwgRGF0YVNpemUgKTsKKwkJLy90aGUgZnVuY3Rpb24gZm9yIHJldmVyc2luZyByZWdpc3RlciBkYXRhIGZyb20gbGl0dGxlIGVuZGlhbiB0byBiaWcgZW5kaWFuCisJCWZvciggaT0wOyBpPE51bWJlck9mRGF0YSA7IGkrKyApCisJCQlwUmVnUXVldWUtPnBCdWZmZXJbaV0gPSBjcHVfdG9fbGUzMiggcFJlZ1F1ZXVlLT5wQnVmZmVyW2ldICk7CisKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpICsgRGF0YVNpemUpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDA0OyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggRmxhZyApOyAvLyAwOiBSZWdpc3RlciBudW1iZXIgYXV0by1pbmNyZW1lbnQsIDE6IE5vIGF1dG8gaW5jcmVtZW50CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggUmVnaXN0ZXJObyApOworCQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KCBEYXRhU2l6ZSApOworCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKworCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCWlmIChwV2IzNVJlZy0+cFJlZ0ZpcnN0ID09IE5VTEwpCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQlpZiAocFVyYikKKwkJCXVzYl9mcmVlX3VyYihwVXJiKTsKKwkJaWYgKHBSZWdRdWV1ZSkKKwkJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQKK1diMzVSZWdfVXBkYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzd2l0Y2ggKFJlZ2lzdGVyTm8pIHsKKwljYXNlIDB4M2IwOiBwV2IzNVJlZy0+VTFCMCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgzYmM6IHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg0MDA6IHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MDA6IHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MDQ6IHBXYjM1UmVnLT5NMDRfTXVsdGljYXN0QWRkcmVzczEgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODA4OiBwV2IzNVJlZy0+TTA4X011bHRpY2FzdEFkZHJlc3MyID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyNDogcFdiMzVSZWctPk0yNF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyODogcFdiMzVSZWctPk0yOF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyYzogcFdiMzVSZWctPk0yQ19NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgzODogcFdiMzVSZWctPk0zOF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0MDogcFdiMzVSZWctPk00MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0NDogcFdiMzVSZWctPk00NF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0ODogcFdiMzVSZWctPk00OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0YzogcFdiMzVSZWctPk00Q19NYWNTdGF0dXMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODYwOiBwV2IzNVJlZy0+TTYwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODY4OiBwV2IzNVJlZy0+TTY4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODcwOiBwV2IzNVJlZy0+TTcwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODc0OiBwV2IzNVJlZy0+TTc0X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODc4OiBwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg3QzogcFdiMzVSZWctPk03Q19NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4MDogcFdiMzVSZWctPk04MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4NDogcFdiMzVSZWctPk04NF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4ODogcFdiMzVSZWctPk04OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg5ODogcFdiMzVSZWctPk05OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMGM6IHBXYjM1UmVnLT5CQjBDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMmM6IHBXYjM1UmVnLT5CQjJDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMzA6IHBXYjM1UmVnLT5CQjMwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwM2M6IHBXYjM1UmVnLT5CQjNDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNDg6IHBXYjM1UmVnLT5CQjQ4ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNGM6IHBXYjM1UmVnLT5CQjRDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTA6IHBXYjM1UmVnLT5CQjUwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTQ6IHBXYjM1UmVnLT5CQjU0ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTg6IHBXYjM1UmVnLT5CQjU4ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNWM6IHBXYjM1UmVnLT5CQjVDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNjA6IHBXYjM1UmVnLT5CQjYwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJfQorfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAordW5zaWduZWQgY2hhcgorV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCWludCByZXQgPSAtMTsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJUmVnaXN0ZXJWYWx1ZSA9IGNwdV90b19sZTMyKFJlZ2lzdGVyVmFsdWUpOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVzYiBtZXNzYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMTsKKworCS8vIDIwMDYwNzE3LjUgV2FpdCB1bnRpbCBFUDBWTSBzdG9wCisJd2hpbGUgKHBXYjM1UmVnLT5FUDB2bV9zdGF0ZSAhPSBWTV9TVE9QKQorCQlPU19TTEVFUCgxMDAwMCk7CisKKwkvLyBTeW5jIElvQ2FsbERyaXZlcgorCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKCBwSHdEYXRhLT5XYlVzYi51ZGV2LAorCQkJICAgICAgIHVzYl9zbmRjdHJscGlwZSggcEh3RGF0YS0+V2JVc2IudWRldiwgMCApLAorCQkJICAgICAgIDB4MDMsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgICAweDAsUmVnaXN0ZXJObywgJlJlZ2lzdGVyVmFsdWUsIDQsIEhaKjEwMCApOworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMDsKKworCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisKKwlpZiAocmV0IDwgMCkgeworCQkjaWZkZWYgX1BFX1JFR19EVU1QXworCQlXQkRFQlVHKCgiRVAwIFdyaXRlIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJI2VuZGlmCisKKwkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gVFJVRSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKKy8vIEZBTFNFIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfV3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCVBVUkIJCXBVcmIgPSBOVUxMOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlID0gTlVMTDsKKwl1MTYJCVVyYlNpemU7CisKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVyYiByZXF1ZXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQyggKHZvaWQqICopJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmIChwVXJiICYmIHBSZWdRdWV1ZSkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDE7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+VkFMVUUgPSBjcHVfdG9fbGUzMihSZWdpc3RlclZhbHVlKTsKKwkJcFJlZ1F1ZXVlLT5SRVNFUlZFRF9WQUxJRCA9IEZBTFNFOworCQlkciA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopKChQVUNIQVIpcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SfFVTQl9ESVJfT1VUIHxVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDAzOyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDApOworCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoNCk7CisKKwkJLy8gRW50ZXIgdGhlIHNlbmRpbmcgcXVldWUKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCWlmIChwV2IzNVJlZy0+cFJlZ0ZpcnN0ID09IE5VTEwpCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQlpZiAocFVyYikKKwkJCXVzYl9mcmVlX3VyYihwVXJiKTsKKwkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworLy9UaGlzIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIGEgdXNlciBkZWZpbmVkIHZhbHVlLiBXaGVuIGl0IGNvbXBsZXRlcywKKy8vdGhpcyB2YWx1ZSBpcyB1c2VmdWwuIEZvciBleGFtcGxlLCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCB3aWxsIHVzZSBpdC4KKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0Cit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoIHBod19kYXRhX3QgcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sIHUzMiBSZWdpc3RlclZhbHVlLAorCQkJCVBDSEFSIHBWYWx1ZSwgczggTGVuKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVyYiByZXF1ZXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQygodm9pZCogKikgJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmIChwVXJiICYmIHBSZWdRdWV1ZSkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDE7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+VkFMVUUgPSBjcHVfdG9fbGUzMihSZWdpc3RlclZhbHVlKTsKKwkJLy9OT1RFIDogVXNlcnMgbXVzdCBndWFyYW50ZWUgdGhlIHNpemUgb2YgdmFsdWUgd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIgc2l6ZS4KKwkJbWVtY3B5KHBSZWdRdWV1ZS0+UkVTRVJWRUQsIHBWYWx1ZSwgTGVuKTsKKwkJcFJlZ1F1ZXVlLT5SRVNFUlZFRF9WQUxJRCA9IFRSVUU7CisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKFBVQ0hBUilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSk7CisJCWRyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9PVVQgfFVTQl9SRUNJUF9ERVZJQ0U7CisJCWRyLT5iUmVxdWVzdCA9IDB4MDM7IC8vIFVTQiBvciB2ZW5kb3ItZGVmaW5lZCByZXF1ZXN0IGNvZGUsIGJ1cnN0IG1vZGUKKwkJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MCk7CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihSZWdpc3Rlck5vKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNig0KTsKKworCQkvLyBFbnRlciB0aGUgc2VuZGluZyBxdWV1ZQorCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEICgmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiggcFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMICkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCAoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIocFVyYik7CisJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CisvLyBwUmVnaXN0ZXJWYWx1ZSA6IEl0IG11c3QgYmUgYSByZXNpZGVudCBidWZmZXIgZHVlIHRvIGFzeW5jaHJvbm91cyByZWFkIHJlZ2lzdGVyLgordW5zaWduZWQgY2hhcgorV2IzNVJlZ19SZWFkU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIFBVTE9ORyBwUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQVUxPTkcJcGx0bXAgPSBwUmVnaXN0ZXJWYWx1ZTsKKwlpbnQgcmV0ID0gLTE7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIFJlYWQgdGhlIHJlZ2lzdGVyIGJ5IHNlbmQgdXNiIG1lc3NhZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXBXYjM1UmVnLT5TeW5jSW9QYXVzZSA9IDE7CisKKwkvLyAyMDA2MDcxNy41IFdhaXQgdW50aWwgRVAwVk0gc3RvcAorCXdoaWxlIChwV2IzNVJlZy0+RVAwdm1fc3RhdGUgIT0gVk1fU1RPUCkKKwkJT1NfU0xFRVAoMTAwMDApOworCisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDApLAorCQkJICAgICAgIDB4MDEsIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU4sCisJCQkgICAgICAgMHgwLCBSZWdpc3Rlck5vLCBwbHRtcCwgNCwgSFoqMTAwICk7CisKKwkqcFJlZ2lzdGVyVmFsdWUgPSBjcHVfdG9fbGUzMigqcGx0bXApOworCisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKworCVdiMzVSZWdfVXBkYXRlKCBwSHdEYXRhLCBSZWdpc3Rlck5vLCAqcFJlZ2lzdGVyVmFsdWUgKTsKKwlwV2IzNVJlZy0+U3luY0lvUGF1c2UgPSAwOworCisJV2IzNVJlZ19FUDBWTV9zdGFydCggcEh3RGF0YSApOworCisJaWYgKHJldCA8IDApIHsKKwkJI2lmZGVmIF9QRV9SRUdfRFVNUF8KKwkJV0JERUJVRygoIkVQMCBSZWFkIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJI2VuZGlmCisKKwkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gVFJVRSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKKy8vIEZBTFNFIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKKy8vIHBSZWdpc3RlclZhbHVlIDogSXQgbXVzdCBiZSBhIHJlc2lkZW50IGJ1ZmZlciBkdWUgdG8gYXN5bmNocm9ub3VzIHJlYWQgcmVnaXN0ZXIuCit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1JlYWQocGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgIFBVTE9ORyBwUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICogZHI7CisJUFVSQgkJcFVyYjsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKwl1MTYJCVVyYlNpemU7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIHVwZGF0ZSB0aGUgdmFyaWFibGUgYnkgc2VuZCBVcmIgdG8gcmVhZCByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVcmJTaXplID0gc2l6ZW9mKFJFR19RVUVVRSkgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYoIHBVcmIgJiYgcFJlZ1F1ZXVlICkKKwl7CisJCXBSZWdRdWV1ZS0+RElSRUNUID0gMDsvLyByZWFkIHJlZ2lzdGVyCisJCXBSZWdRdWV1ZS0+SU5ERVggPSBSZWdpc3Rlck5vOworCQlwUmVnUXVldWUtPnBCdWZmZXIgPSBwUmVnaXN0ZXJWYWx1ZTsKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpKTsKKwkJZHItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU47CisJCWRyLT5iUmVxdWVzdCA9IDB4MDE7IC8vIFVTQiBvciB2ZW5kb3ItZGVmaW5lZCByZXF1ZXN0IGNvZGUsIGJ1cnN0IG1vZGUKKwkJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MCk7CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNiAoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYgKDQpOworCisJCS8vIEVudGVyIHRoZSBzZW5kaW5nIHF1ZXVlCisJCXBSZWdRdWV1ZS0+TmV4dCA9IE5VTEw7CisJCXBSZWdRdWV1ZS0+cFVzYlJlcSA9IGRyOworCQlwUmVnUXVldWUtPnBVcmIgPSBwVXJiOworCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQgKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiggcFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMICkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQkvLyBTdGFydCBFUDBWTQorCQlXYjM1UmVnX0VQMFZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIoIHBVcmIgKTsKKwkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworCit2b2lkCitXYjM1UmVnX0VQMFZNX3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKE9TX0FUT01JQ19JTkMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50KSA9PSAxKSB7CisJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVSZWdfRVAwVk0ocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7Cit9CisKK3ZvaWQKK1diMzVSZWdfRVAwVk0ocGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBVUkIJCXBVcmI7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJUFVMT05HCQlwQnVmZmVyOworCWludAkJCXJldCA9IC0xOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlOworCisKKwlpZiAocFdiMzVSZWctPlN5bmNJb1BhdXNlKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCWdvdG8gY2xlYW51cDsKKworCS8vIEdldCB0aGUgcmVnaXN0ZXIgZGF0YSBhbmQgc2VuZCB0byBVU0IgdGhyb3VnaCBJcnAKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwlpZiAoIXBSZWdRdWV1ZSkKKwkJZ290byBjbGVhbnVwOworCisJLy8gR2V0IGFuIFVyYiwgc2VuZCBpdAorCXBVcmIgPSAoUFVSQilwUmVnUXVldWUtPnBVcmI7CisKKwlkciA9IHBSZWdRdWV1ZS0+cFVzYlJlcTsKKwlwVXJiID0gcFJlZ1F1ZXVlLT5wVXJiOworCXBCdWZmZXIgPSBwUmVnUXVldWUtPnBCdWZmZXI7CisJaWYgKHBSZWdRdWV1ZS0+RElSRUNUID09IDEpIC8vIG91dHB1dAorCQlwQnVmZmVyID0gJnBSZWdRdWV1ZS0+VkFMVUU7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYiggcFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgICAgIFJFR19ESVJFQ1RJT04ocEh3RGF0YS0+V2JVc2IudWRldixwUmVnUXVldWUpLAorCQkJICAgICAgKFBVQ0hBUilkcixwQnVmZmVyLGNwdV90b19sZTE2KGRyLT53TGVuZ3RoKSwKKwkJCSAgICAgIFdiMzVSZWdfRVAwVk1fY29tcGxldGUsICh2b2lkKilwSHdEYXRhKTsKKworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisKKwlyZXQgPSB3Yl91c2Jfc3VibWl0X3VyYiggcFVyYiApOworCisJaWYgKHJldCA8IDApIHsKKyNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCVdCREVCVUcoKCJFUDAgSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKyNlbmRpZgorCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmV0dXJuOworCisgY2xlYW51cDoKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7Cit9CisKKwordm9pZAorV2IzNVJlZ19FUDBWTV9jb21wbGV0ZShQVVJCIHBVcmIpCit7CisJcGh3X2RhdGFfdCAgcEh3RGF0YSA9IChwaHdfZGF0YV90KXBVcmItPmNvbnRleHQ7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKworCisJLy8gVmFyaWFibGUgc2V0dGluZworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKwlwV2IzNVJlZy0+RVAwVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKSB7IC8vIExldCBXYldsYW5IYWx0IHRvIGhhbmRsZSBzdXJwcmlzZSByZW1vdmUKKwkJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UmVnLT5SZWdGaXJlQ291bnQgKTsKKwl9IGVsc2UgeworCQkvLyBDb21wbGV0ZSB0byBzZW5kLCByZW1vdmUgdGhlIFVSQiBmcm9tIHRoZSBmaXJzdAorCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCXBSZWdRdWV1ZSA9IHBXYjM1UmVnLT5wUmVnRmlyc3Q7CisJCWlmIChwUmVnUXVldWUgPT0gcFdiMzVSZWctPnBSZWdMYXN0KQorCQkJcFdiMzVSZWctPnBSZWdMYXN0ID0gTlVMTDsKKwkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBXYjM1UmVnLT5wUmVnRmlyc3QtPk5leHQ7CisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQlpZiAocFdiMzVSZWctPkVQMFZNX3N0YXR1cykgeworI2lmZGVmIF9QRV9SRUdfRFVNUF8KKwkJCVdCREVCVUcoKCJFUDAgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCQlEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggcFdiMzVSZWctPkVQMFZNX3N0YXR1cyApOworI2VuZGlmCisJCQlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOworCQl9IGVsc2UgeworCQkJLy8gU3VjY2Vzcy4gVXBkYXRlIHRoZSByZXN1bHQKKworCQkJLy8gU3RhcnQgdGhlIG5leHQgc2VuZAorCQkJV2IzNVJlZ19FUDBWTShwSHdEYXRhKTsKKwkJfQorCisgICAJCWtmcmVlKHBSZWdRdWV1ZSk7CisJfQorCisJdXNiX2ZyZWVfdXJiKHBVcmIpOworfQorCisKK3ZvaWQKK1diMzVSZWdfZGVzdHJveShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQVVJCCQlwVXJiOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlOworCisKKwlVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZShwSHdEYXRhKTsKKworCS8vIFdhaXQgZm9yIFJlZyBvcGVyYXRpb24gY29tcGxldGVkCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKKwl9IHdoaWxlIChwV2IzNVJlZy0+RVAwdm1fc3RhdGUgIT0gVk1fU1RPUCk7CisJT1NfU0xFRVAoMTAwMDApOyAgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYgorCisJLy8gUmVsZWFzZSBhbGwgdGhlIGRhdGEgaW4gUmVnUXVldWUKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwl3aGlsZSAocFJlZ1F1ZXVlKSB7CisJCWlmIChwUmVnUXVldWUgPT0gcFdiMzVSZWctPnBSZWdMYXN0KQorCQkJcFdiMzVSZWctPnBSZWdMYXN0ID0gTlVMTDsKKwkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBXYjM1UmVnLT5wUmVnRmlyc3QtPk5leHQ7CisKKwkJcFVyYiA9IHBSZWdRdWV1ZS0+cFVyYjsKKwkJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFVyYikgeworCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJfSBlbHNlIHsKKwkJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCQlXQkRFQlVHKCgiRVAwIHF1ZXVlIHJlbGVhc2UgZXJyb3JcbiIpKTsKKwkJCSNlbmRpZgorCQl9CisJCU9TX1NQSU5fTE9DS19BQ1FVSVJFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQlwUmVnUXVldWUgPSBwV2IzNVJlZy0+cFJlZ0ZpcnN0OworCX0KKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkvLyBGcmVlIHJlc291cmNlCisJT1NfU1BJTl9MT0NLX0ZSRUUoICAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gcGFzc2l2ZS1sZXZlbCBvbmx5LgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZz0mcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIgbHRtcDsKKwl1MzIgU29mdHdhcmVTZXQsIFZDT190cmltLCBUeFZnYSwgUmVnaW9uX1NjYW5JbnRlcnZhbDsKKworCS8vIFNwaW4gbG9jayBpcyBhY3F1aXJlZCBmb3IgcmVhZCBhbmQgd3JpdGUgSVJQIGNvbW1hbmQKKwlPU19TUElOX0xPQ0tfQUxMT0NBVEUoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkvLyBHZXR0aW5nIFJGIG1vZHVsZSB0eXBlIGZyb20gRUVQUk9NIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwZDAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCisJLy9VcGRhdGUgUkYgbW9kdWxlIHR5cGUgYW5kIGRldGVybWluZSB0aGUgUEhZIHR5cGUgYnkgaW5mIG9yIEVFUFJPTQorCXBXYjM1UmVnLT5FRVBST01QaHlUeXBlID0gKHU4KSggbHRtcCAmIDB4ZmYgKTsKKwkvLyAwIFYgTUFYMjgyNSwgMSBWIE1BWDI4MjcsIDIgViBNQVgyODI4LCAzIFYgTUFYMjgyOQorCS8vIDE2ViBBTDIyMzAsIDE3IC0gQUw3MjMwLCAxOCAtIEFMMjIzMFMKKwkvLyAzMiBSZXNlcnZlZAorCS8vIDMzIC0gVzg5UkYyNDIoVHhWR0EgMH4xOSksIDM0IC0gVzg5UkYyNDIoVHhWR0EgMH4zNCkKKwlpZiAocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgIT0gUkZfREVDSURFX0JZX0lORikgeworCQlpZiggKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjUpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fMjgyNykJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV8yODI4KQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjkpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fVjEpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfQUlST0hBXzIyMzApCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfQUlST0hBXzIyMzBTKSAgICB8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX0FJUk9IQV83MjMwKQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX1dCXzI0MikJCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfV0JfMjQyXzEpKQorCQkJcEh3RGF0YS0+cGh5X3R5cGUgPSBwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZTsKKwl9CisKKwkvLyBQb3dlciBPbiBwcm9jZWR1cmUgcnVubmluZy4gVGhlIHJlbGF0aXZlIHBhcmFtZXRlciB3aWxsIGJlIHNldCBhY2NvcmRpbmcgdG8gcGh5X3R5cGUKKwlVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCBwSHdEYXRhICk7CisKKwkvLyBSZWFkaW5nIE1BQyBhZGRyZXNzCisJVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoIHBId0RhdGEgKTsKKworCS8vIFJlYWQgVkNPIHRyaW0gZm9yIFJGIHBhcmFtZXRlcgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgyMDAwMDAgKTsKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZWQ09fdHJpbSApOworCisJLy8gUmVhZCBBbnRlbm5hIE9uL09mZiBvZiBzb2Z0d2FyZSBmbGFnCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODIxMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlNvZnR3YXJlU2V0ICk7CisKKwkvLyBSZWFkIFRYVkdBCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODEwMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlR4VmdhICk7CisKKwkvLyBHZXQgU2NhbiBpbnRlcnZhbCBzZXR0aW5nIGZyb20gRUVQUk9NIG9mZnNldCAweDFjCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODFkMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlJlZ2lvbl9TY2FuSW50ZXJ2YWwgKTsKKworCS8vIFVwZGF0ZSBFdGhlcm5ldCBhZGRyZXNzCisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7CisKKwkvLyBVcGRhdGUgc29mdHdhcmUgdmFyaWFibGUKKwlwSHdEYXRhLT5Tb2Z0d2FyZVNldCA9ICh1MTYpKFNvZnR3YXJlU2V0ICYgMHhmZmZmKTsKKwlUeFZnYSAmPSAweDAwMDAwMGZmOworCXBId0RhdGEtPlBvd2VySW5kZXhGcm9tRUVQUk9NID0gKHU4KVR4VmdhOworCXBId0RhdGEtPlZDT190cmltID0gKHU4KVZDT190cmltICYgMHhmZjsKKwlpZiAocEh3RGF0YS0+VkNPX3RyaW0gPT0gMHhmZikKKwkJcEh3RGF0YS0+VkNPX3RyaW0gPSAweDI4OworCisJcFdiMzVSZWctPkVFUFJPTVJlZ2lvbiA9ICh1OCkoUmVnaW9uX1NjYW5JbnRlcnZhbD4+OCk7IC8vIDIwMDYwNzIwCisJaWYoIHBXYjM1UmVnLT5FRVBST01SZWdpb248MSB8fCBwV2IzNVJlZy0+RUVQUk9NUmVnaW9uPjYgKQorCQlwV2IzNVJlZy0+RUVQUk9NUmVnaW9uID0gUkVHSU9OX0FVVE87CisKKwkvL0ZvciBHZXQgVHggVkdBIGZyb20gRUVQUk9NIDIwMDYwMzE1LjUgbW92ZSBoZXJlCisJR2V0VHhWZ2FGcm9tRUVQUk9NKCBwSHdEYXRhICk7CisKKwkvLyBTZXQgU2NhbiBJbnRlcnZhbAorCXBId0RhdGEtPlNjYW5fSW50ZXJ2YWwgPSAodTgpKFJlZ2lvbl9TY2FuSW50ZXJ2YWwgJiAweGZmKSAqIDEwOworCWlmICgocEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA9PSAyNTUwKSB8fCAocEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA8IDEwKSkgLy8gSXMgZGVmYXVsdCBzZXR0aW5nIDB4ZmYgKiAxMAorCQlwSHdEYXRhLT5TY2FuX0ludGVydmFsID0gU0NBTl9NQVhfQ0hOTF9USU1FOworCisJLy8gSW5pdGlhbCByZWdpc3RlcgorCVJGU3ludGhlc2l6ZXJfaW5pdGlhbChwSHdEYXRhKTsKKworCUJCUHJvY2Vzc29yX2luaXRpYWwocEh3RGF0YSk7IC8vIEFzeW5jIHdyaXRlLCBtdXN0IHdhaXQgdW50aWwgY29tcGxldGUKKworCVdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKHBId0RhdGEpOworCisJTXh4X2luaXRpYWwocEh3RGF0YSk7CisJRHh4X2luaXRpYWwocEh3RGF0YSk7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKwllbHNlCisJCXJldHVybiBUUlVFOyAvLyBJbml0aWFsIGZhaWwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENhcmRDb21wdXRlQ3JjIC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgUnVucyB0aGUgQVVUT0RJTiBJSSBDUkMgYWxnb3JpdGhtIG9uIGJ1ZmZlciBCdWZmZXIgb2YgbGVuZ3RoLCBMZW5ndGguCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEJ1ZmZlciAtIHRoZSBpbnB1dCBidWZmZXIKKy8vICAgIExlbmd0aCAtIHRoZSBsZW5ndGggb2YgQnVmZmVyCisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIFRoZSAzMi1iaXQgQ1JDIHZhbHVlLgorLy8KKy8vICBOb3RlOgorLy8gICAgVGhpcyBpcyBhZGFwdGVkIGZyb20gdGhlIGNvbW1lbnRzIGluIHRoZSBhc3NlbWJseSBsYW5ndWFnZQorLy8gICAgdmVyc2lvbiBpbiBfR0VOUkVRLkFTTSBvZiB0aGUgRFdCIE5FMTAwMC8yMDAwIGRyaXZlci4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordTMyCitDYXJkQ29tcHV0ZUNyYyhQVUNIQVIgQnVmZmVyLCB1MzIgTGVuZ3RoKQoreworICAgIHUzMiBDcmMsIENhcnJ5OworICAgIHUzMiAgaSwgajsKKyAgICB1OCBDdXJCeXRlOworCisgICAgQ3JjID0gMHhmZmZmZmZmZjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBMZW5ndGg7IGkrKykgeworCisgICAgICAgIEN1ckJ5dGUgPSBCdWZmZXJbaV07CisKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCisgICAgICAgICAgICBDYXJyeSAgICAgPSAoKENyYyAmIDB4ODAwMDAwMDApID8gMSA6IDApIF4gKEN1ckJ5dGUgJiAweDAxKTsKKyAgICAgICAgICAgIENyYyAgICAgPDw9IDE7CisgICAgICAgICAgICBDdXJCeXRlID4+PSAxOworCisgICAgICAgICAgICBpZiAoQ2FycnkpIHsKKyAgICAgICAgICAgICAgICBDcmMgPShDcmMgXiAweDA0YzExZGI2KSB8IENhcnJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENyYzsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQml0UmV2ZXJzZSAtLQorLy8gICBSZXZlcnNlIHRoZSBiaXRzIGluIHRoZSBpbnB1dCBhcmd1bWVudCwgZHdEYXRhLCB3aGljaCBpcworLy8gICByZWdhcmRlZCBhcyBhIHN0cmluZyBvZiBiaXRzIHdpdGggdGhlIGxlbmd0aCwgRGF0YUxlbmd0aC4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIGR3RGF0YSAgICAgOgorLy8gICBEYXRhTGVuZ3RoIDoKKy8vCisvLyBSZXR1cm46CisvLyAgIFRoZSBjb252ZXJ0ZWQgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordTMyIEJpdFJldmVyc2UoIHUzMiBkd0RhdGEsIHUzMiBEYXRhTGVuZ3RoKQoreworCXUzMiAgIEhhbGZMZW5ndGgsIGksIGo7CisJdTMyICAgQml0QSwgQml0QjsKKworCWlmICggRGF0YUxlbmd0aCA8PSAwKSAgICAgICByZXR1cm4gMDsgICAvLyBObyBjb252ZXJzaW9uIGlzIGRvbmUuCisJZHdEYXRhID0gZHdEYXRhICYgKDB4ZmZmZmZmZmYgPj4gKDMyIC0gRGF0YUxlbmd0aCkpOworCisJSGFsZkxlbmd0aCA9IERhdGFMZW5ndGggLyAyOworCWZvciAoIGkgPSAwLCBqID0gRGF0YUxlbmd0aC0xIDsgaSA8IEhhbGZMZW5ndGg7IGkrKywgai0tKQorCXsKKwkJQml0QSA9IEdldEJpdCggZHdEYXRhLCBpKTsKKwkJQml0QiA9IEdldEJpdCggZHdEYXRhLCBqKTsKKwkJaWYgKEJpdEEgJiYgIUJpdEIpIHsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGkpOworCQkJZHdEYXRhID0gU2V0Qml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UgaWYgKCFCaXRBICYmIEJpdEIpIHsKKwkJCWR3RGF0YSA9IFNldEJpdCggZHdEYXRhLCBpKTsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UKKwkJeworCQkJLy8gRG8gbm90aGluZyBzaW5jZSB0aGVzZSB0d28gYml0cyBhcmUgb2YgdGhlIHNhdmUgdmFsdWVzLgorCQl9CisJfQorCisJcmV0dXJuIGR3RGF0YTsKK30KKwordm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyIEJCM2MsIEJCNTQ7CisKKwlpZiAoKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgfHwKKwkJKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0Ml8xKSkgeworCQlwaHlfY2FsaWJyYXRpb25fd2luYm9uZCAoIHBId0RhdGEsIDI0MTIgKTsgLy8gU3luYyBvcGVyYXRpb24KKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgxMDNjLCAmQkIzYyApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDEwNTQsICZCQjU0ICk7CisKKwkJcEh3RGF0YS0+QkIzY19jYWwgPSBCQjNjOworCQlwSHdEYXRhLT5CQjU0X2NhbCA9IEJCNTQ7CisKKwkJUkZTeW50aGVzaXplcl9pbml0aWFsKHBId0RhdGEpOworCQlCQlByb2Nlc3Nvcl9pbml0aWFsKHBId0RhdGEpOyAvLyBBc3luYyBvcGVyYXRpb24KKworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDNjLCBCQjNjICk7CisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTQsIEJCNTQgKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGUyOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmgKQEAgLTAsMCArMSw1NiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1UmVnX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBNeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBSRlN5bnRoZXNpemVyX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKy8vdm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBzOCBDaGFubmVsICk7Cit2b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjEzLjEKKy8vdm9pZCBSRl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjI2LjUuYyBBZGQKK3U4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3ZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7IC8vIDIwMDYwNjE5LjUgQWRkCisKKyNkZWZpbmUgUkZXcml0ZUNvbnRyb2xEYXRhKCBfQSwgX1YgKSBXYjM1UmVnX1dyaXRlKCBfQSwgMHgwODY0LCBfViApCisKK3ZvaWQgV2IzNVJlZ19kZXN0cm95KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgUFVMT05HIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICBQVUxPTkcgcFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggIHBod19kYXRhX3QgcEh3RGF0YSwKKwkJCQkJCQkJIHUxNiBSZWdpc3Rlck5vLAorCQkJCQkJCQkgdTMyIFJlZ2lzdGVyVmFsdWUsCisJCQkJCQkJCSBQQ0hBUiBwVmFsdWUsCisJCQkJCQkJCSBzOAlMZW4pOwordW5zaWduZWQgY2hhciBXYjM1UmVnX0J1cnN0V3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIFBVTE9ORyBwUmVnaXN0ZXJEYXRhLCAgdTggTnVtYmVyT2ZEYXRhLCAgdTggRmxhZyApOworCit2b2lkIFdiMzVSZWdfRVAwVk0oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19FUDBWTV9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlKCAgUFVSQiBwVXJiICk7CisKK3UzMiBCaXRSZXZlcnNlKCB1MzIgZHdEYXRhLCB1MzIgRGF0YUxlbmd0aCk7CisKK3ZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW01BQ19BRERSX0xFTkdUSF0sICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApOwordTMyIENhcmRDb21wdXRlQ3JjKCAgUFVDSEFSIEJ1ZmZlciwgIHUzMiBMZW5ndGggKTsKKwordm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX1VwZGF0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTk1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX3MuaApAQCAtMCwwICsxLDE3MCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisJCQkJSEFMIHNldHRpbmcgZnVuY3Rpb24KKworCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCXxVeHh8IAl8RHh4fAl8TXh4fAl8QkJ8CXxSRnwKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJfAkJCQkJfAorCQlXYjM1UmVnX1JlYWQJCVdiMzVSZWdfV3JpdGUKKworCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJV2JVc2JfQ2FsbFVTQkRBU3luYwkJCQkJc3VwcGxpZWQgQnkgV2JVc2IgbW9kdWxlCisqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2RlZmluZSAgICAgR2V0Qml0KCBkd0RhdGEsIGkpICAgICAgKCBkd0RhdGEgJiAoMHgwMDAwMDAwMSA8PCBpKSkKKyNkZWZpbmUgICAgIFNldEJpdCggZHdEYXRhLCBpKSAgICAgICggZHdEYXRhIHwgKDB4MDAwMDAwMDEgPDwgaSkpCisjZGVmaW5lICAgICBDbGVhckJpdCggZHdEYXRhLCBpKSAgICAoIGR3RGF0YSAmIH4oMHgwMDAwMDAwMSA8PCBpKSkKKworI2RlZmluZQkJSUdOT1JFX0lOQ1JFTUVOVAkwCisjZGVmaW5lCQlBVVRPX0lOQ1JFTUVOVAkJMAorI2RlZmluZQkJTk9fSU5DUkVNRU5UCQkxCisjZGVmaW5lIFJFR19ESVJFQ1RJT04oX3gsX3kpICAgKChfeSktPkRJUkVDVCA9PTAgPyB1c2JfcmN2Y3RybHBpcGUoX3gsMCkgOiB1c2Jfc25kY3RybHBpcGUoX3gsMCkpCisjZGVmaW5lIFJFR19CVUZfU0laRShfeCkgICAgICAgKChfeCktPmJSZXF1ZXN0PT0gMHgwNCA/IGNwdV90b19sZTE2KChfeCktPndMZW5ndGgpIDogNCkKKworLy8gMjAwNjA2MTMuMiBBZGQgdGhlIGZvbGxvdyBkZWZpbml0aW9uCisjZGVmaW5lIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCCQkweDAwMzM0NDdjCisjZGVmaW5lIEJCNENfREVGQVVMVF9BTDIyMzBfMTFCCQkweDBBMDBGRUZGCisjZGVmaW5lIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHCQkweDAwMzMyQzFCCisjZGVmaW5lIEJCNENfREVGQVVMVF9BTDIyMzBfMTFHCQkweDBBMDBGRUZGCisKKworI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCCQkweDAwMjkyMzE1CS8vYmFja29mZiAgMmRCCisjZGVmaW5lIEJCNENfREVGQVVMVF9XQjI0Ml8xMUIJCTB4MDgwMEZFRkYJLy9iYWNrb2ZmICAyZEIKKy8vI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCCQkweDAwMjAxQjExCS8vYmFja29mZiAgNGRCCisvLyNkZWZpbmUgQkI0Q19ERUZBVUxUX1dCMjQyXzExQgkJMHgwNjAwRkYwMAkvL2JhY2tvZmYgIDRkQgorI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHCQkweDAwNDUzQjI0CisjZGVmaW5lIEJCNENfREVGQVVMVF9XQjI0Ml8xMUcJCTB4MEUwMEZFRkYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIERlZmF1bHQgc2V0dGluZyBmb3IgTXh4CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBERUZBVUxUX0NXTUlOCQkJCQkzMQkJLy8oTTJDKSBDV21pbi4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTMxLgorI2RlZmluZSBERUZBVUxUX0NXTUFYCQkJCQkxMDIzCS8vKE0yQykgQ1dtYXguIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xMDIzLgorI2RlZmluZSBERUZBVUxUX0FJRAkJCQkJCTEJCS8vKE0zNCkgQUlELiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDEtMjAwNy4KKworI2lmZGVmIF9VU0VfRkFMTEJBQ0tfUkFURV8KKyNkZWZpbmUgREVGQVVMVF9SQVRFX1JFVFJZX0xJTUlUCQkyCQkvLyhNMzgpIGFzIG5hbWVkCisjZWxzZQorI2RlZmluZSBERUZBVUxUX1JBVEVfUkVUUllfTElNSVQJCTcJCS8vKE0zOCkgYXMgbmFtZWQKKyNlbmRpZgorCisjZGVmaW5lIERFRkFVTFRfTE9OR19SRVRSWV9MSU1JVAkJNwkJLy8oTTM4KSBMb25nUmV0cnlMaW1pdC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTE1LgorI2RlZmluZSBERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUCQk3CQkvLyhNMzgpIFNob3J0UmV0cnlMaW1pdC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTE1LgorI2RlZmluZSBERUZBVUxUX1BJRlNUCQkJCQkyNQkJLy8oTTNDKSBQSUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9FSUZTVAkJCQkJMzU0CQkvLyhNM0MpIEVJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTEwNDg1NzUuCisjZGVmaW5lIERFRkFVTFRfRElGU1QJCQkJCTQ1CQkvLyhNM0MpIERJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1NJRlNUCQkJCQk1CQkvLyhNM0MpIFNJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX09TSUZTVAkJCQkJMTAJCS8vKE0zQykgT3JpZ2luYWwgU0lGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTUuCisjZGVmaW5lIERFRkFVTFRfQVRJTVdECQkJCQkwCQkvLyhNNDApIEFUSU0gV2luZG93LiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfU0xPVF9USU1FCQkJCTIwCQkvLyhNNDApICgkKSBTbG90VGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTI1NS4KKyNkZWZpbmUgREVGQVVMVF9NQVhfVFhfTVNEVV9MSUZFX1RJTUUJNTEyCS8vKE00NCkgTWF4VHhNU0RVTGlmZVRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC00Mjk0OTY3Mjk1LgorI2RlZmluZSBERUZBVUxUX0JFQUNPTl9JTlRFUlZBTAkJCTUwMAkJLy8oTTQ4KSBCZWFjb24gSW50ZXJ2YWwuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9QUk9CRV9ERUxBWV9USU1FCQkyMDAJCS8vKE00OCkgUHJvYmUgRGVsYXkgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1BST1RPQ09MX1ZFUlNJT04JCTAJCS8vKE00QykKKyNkZWZpbmUgREVGQVVMVF9NQUNfUE9XRVJfU1RBVEUJCQkyCQkvLyhNNEMpIDI6IE1BQyBhdCBwb3dlciBhY3RpdmUKKyNkZWZpbmUgREVGQVVMVF9EVElNX0FMRVJUX1RJTUUJCQkwCisKKwordHlwZWRlZiBzdHJ1Y3QgX1JFR19RVUVVRQoreworICAgIHN0cnVjdCAgdXJiICpwVXJiOworCXZvaWQqCXBVc2JSZXE7CisJdm9pZCoJTmV4dDsKKwl1bmlvbgorCXsKKwkJdTMyCVZBTFVFOworCQlQVUxPTkcJcEJ1ZmZlcjsKKwl9OworCXU4CVJFU0VSVkVEWzRdOy8vIHNwYWNlIHJlc2VydmVkIGZvciBjb21tdW5pY2F0aW9uCisKKyAgICB1MTYJSU5ERVg7IC8vIEZvciBzdG9yaW5nIHRoZSByZWdpc3RlciBpbmRleAorICAgIHU4CVJFU0VSVkVEX1ZBTElEOwkvL0luZGljYXRlIHdoZXRoZXIgdGhlIFJFU0VSVkVEIHNwYWNlIGlzIHZhbGlkIGF0IHRoaXMgY29tbWFuZC4KKwl1OAlESVJFQ1Q7IC8vIDA6SW4gICAxOk91dAorCit9IFJFR19RVUVVRSwgKlBSRUdfUVVFVUU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNQVhfU1EzX0ZJTFRFUl9TSVpFCQk1Cit0eXBlZGVmIHN0cnVjdCBfV0IzNVJFRworeworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIFJlZ2lzdGVyIEJhbmsgYmFja3VwCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTMyCVUxQjA7CQkJLy9iaXQxNiByZWNvcmQgdGhlIGgvdyByYWRpbyBvbi9vZmYgc3RhdHVzCisJdTMyCVUxQkNfTEVEQ29uZmlndXJlOworCXUzMglEMDBfRG1hQ29udHJvbDsKKwl1MzIJTTAwX01hY0NvbnRyb2w7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyCU0wNF9NdWx0aWNhc3RBZGRyZXNzMTsKKwkJCXUzMglNMDhfTXVsdGljYXN0QWRkcmVzczI7CisJCX07CisJCXU4CQlNdWx0aWNhc3RbOF07CS8vIGNvbnRlbnRzIG9mIGNhcmQgbXVsdGljYXN0IHJlZ2lzdGVycworCX07CisKKwl1MzIJTTI0X01hY0NvbnRyb2w7CisJdTMyCU0yOF9NYWNDb250cm9sOworCXUzMglNMkNfTWFjQ29udHJvbDsKKwl1MzIJTTM4X01hY0NvbnRyb2w7CisJdTMyCU0zQ19NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNDBfTWFjQ29udHJvbDsKKwl1MzIJTTQ0X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU00OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNENfTWFjU3RhdHVzOworCXUzMglNNjBfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTY4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU03MF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNzRfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTc4X0VSUEluZm9ybWF0aW9uOy8vOTMwMjA2LjIuYgorCXUzMglNN0NfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTgwX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU04NF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNODhfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTk4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisKKwkvL1syMDA0MDcyMiBXS10KKwkvL0Jhc2ViYW5kIHJlZ2lzdGVyCisJdTMyCUJCMEM7CS8vIFVzZWQgZm9yIExOQSBjYWxjdWxhdGlvbgorCXUzMglCQjJDOwkvLworCXUzMglCQjMwOwkvLzExYiBhY3F1aXNpdGlvbiBjb250cm9sIHJlZ2lzdGVyCisJdTMyCUJCM0M7CisJdTMyCUJCNDg7CS8vIDIwMDUxMjIxLjEuYSAyMDA2MDYxMy4xIEZpeCBPQlcgaXNzdWUgb2YgMTFiLzExZyByYXRlCisJdTMyCUJCNEM7CS8vIDIwMDYwNjEzLjEgIEZpeCBPQlcgaXNzdWUgb2YgMTFiLzExZyByYXRlCisJdTMyCUJCNTA7CS8vbW9kZSBjb250cm9sIHJlZ2lzdGVyCisJdTMyCUJCNTQ7CisJdTMyIAlCQjU4OwkvL0lRX0FMUEhBCisJdTMyCUJCNUM7CS8vIEZvciB0ZXN0CisJdTMyCUJCNjA7CS8vIGZvciBXVE8gcmVhZCB2YWx1ZQorCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gVk0KKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0KKwlPU19TUElOX0xPQ0sJRVAwVk1fc3Bpbl9sb2NrOyAvLyA0QgorCXUzMgkgICAgICAgIEVQMFZNX3N0YXR1czsvLyQkCisJUFJFR19RVUVVRQkgICAgcFJlZ0ZpcnN0OworCVBSRUdfUVVFVUUJICAgIHBSZWdMYXN0OworCU9TX0FUT01JQyAgICAgICBSZWdGaXJlQ291bnQ7CisKKwkvLyBIYXJkd2FyZSBzdGF0dXMKKwl1OAlFUDB2bV9zdGF0ZTsKKwl1OAltYWNfcG93ZXJfc2F2ZTsKKwl1OAlFRVBST01QaHlUeXBlOyAvLyAwIH4gMTUgZm9yIE1heGltICgwIMSEViBNQVgyODI1LCAxIMSEViBNQVgyODI3LCAyIMSEViBNQVgyODI4LCAzIMSEViBNQVgyODI5KSwKKwkJCQkJCSAgIC8vIDE2IH4gMzEgZm9yIEFpcm9oYSAoMTYgxIRWIEFMMjIzMCwgMTEgLSBBTDcyMzApCisJCQkJCQkgICAvLyAzMiB+IFJlc2VydmVkCisJCQkJCQkgICAvLyAzMyB+IDQ3IEZvciBXQjI0MiAoIDMzIC0gV0IyNDIsIDM0IC0gV0IyNDIgd2l0aCBuZXcgVHh2Z2EgMC41IGRiIHN0ZXApCisJCQkJCQkgICAvLyA0OCB+IDI1NSBBUkUgUkVTRVJWRUQuCisJdTgJRUVQUk9NUmVnaW9uOwkvL1JlZ2lvbiBzZXR0aW5nIGluIEVFUFJPTQorCisJdTMyCVN5bmNJb1BhdXNlOyAvLyBJZiB1c2VyIHVzZSB0aGUgU3luYyBJbyB0byBhY2Nlc3MgSHcsIHRoZW4gcGF1c2UgdGhlIGFzeW5jIGFjY2VzcworCisJdTgJTE5BVmFsdWVbNF07IC8vVGFibGUgZm9yIHNwZWVkIHVwIHJ1bm5pbmcKKwl1MzIJU1EzX2ZpbHRlcltNQVhfU1EzX0ZJTFRFUl9TSVpFXTsKKwl1MzIJU1EzX2luZGV4OworCit9IFdCMzVSRUcsICpQV0IzNVJFRzsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTU3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnguYwpAQCAtMCwwICsxLDMzNyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgV2IzNVJ4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBQcm9jZXNzaW5nIHRoZSBSeCBtZXNzYWdlIGZyb20gZG93biBsYXllcgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgInN5c2RlZi5oIgorCisKK3ZvaWQgV2IzNVJ4X3N0YXJ0KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCisJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIHRoZSBXYjM1UngoKSBmdW5jdGlvbgorCWlmIChPU19BVE9NSUNfSU5DKHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyKSA9PSAxKSB7CisJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJV2IzNVJ4KHBId0RhdGEpOworCX0gZWxzZQorCQlPU19BVE9NSUNfREVDKHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjYW5ub3QgcmVlbnRyYWluCit2b2lkIFdiMzVSeCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSWAlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlQVUNIQVIJcFJ4QnVmZmVyQWRkcmVzczsKKwlQVVJCCXBVcmIgPSAoUFVSQilwV2IzNVJ4LT5SeFVyYjsKKwlpbnQJcmV0djsKKwl1MzIJUnhCdWZmZXJJZDsKKworCS8vCisJLy8gSXNzdWluZyBVUkIKKwkvLworCWRvIHsKKwkJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCkKKwkJCWJyZWFrOworCisJCWlmIChwV2IzNVJ4LT5yeF9oYWx0KQorCQkJYnJlYWs7CisKKwkJLy8gR2V0IFJ4QnVmZmVyJ3MgSUQKKwkJUnhCdWZmZXJJZCA9IHBXYjM1UngtPlJ4QnVmZmVySWQ7CisJCWlmICghcFdiMzVSeC0+UnhPd25lcltSeEJ1ZmZlcklkXSkgeworCQkJLy8gSXQncyBpbXBvc3NpYmxlIHRvIHJ1biBoZXJlLgorCQkJI2lmZGVmIF9QRV9SWF9EVU1QXworCQkJV0JERUJVRygoIlJ4IGRyaXZlciBmaWZvIHVuYXZhaWxhYmxlXG4iKSk7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVXBkYXRlIGJ1ZmZlciBwb2ludCwgdGhlbiBzdGFydCB0byBidWxraW4gdGhlIGRhdGEgZnJvbSBVU0IKKwkJcFdiMzVSeC0+UnhCdWZmZXJJZCsrOworCQlwV2IzNVJ4LT5SeEJ1ZmZlcklkICU9IE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUjsKKworCQlwV2IzNVJ4LT5DdXJyZW50UnhCdWZmZXJJZCA9IFJ4QnVmZmVySWQ7CisKKwkJaWYgKDEgIT0gT1NfTUVNT1JZX0FMTE9DKCh2b2lkKiAqKSZwV2IzNVJ4LT5wRFJ4LCBNQVhfVVNCX1JYX0JVRkZFUikpIHsKKwkJCXByaW50aygidzM1dW5kOiBSeCBtZW1vcnkgYWxsb2MgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXBSeEJ1ZmZlckFkZHJlc3MgPSBwV2IzNVJ4LT5wRFJ4OworCisJCXVzYl9maWxsX2J1bGtfdXJiKHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUocEh3RGF0YS0+V2JVc2IudWRldiwgMyksCisJCQkJICBwUnhCdWZmZXJBZGRyZXNzLCBNQVhfVVNCX1JYX0JVRkZFUiwKKwkJCQkgIFdiMzVSeF9Db21wbGV0ZSwgcEh3RGF0YSk7CisKKwkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCisJCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYihwVXJiKTsKKworCQlpZiAocmV0diAhPSAwKSB7CisJCQlwcmludGsoIlJ4IFVSQiBzZW5kaW5nIGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybjsKKwl9IHdoaWxlKEZBTFNFKTsKKworCS8vIFZNIHN0b3AKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIgKTsKK30KKwordm9pZCBXYjM1UnhfQ29tcGxldGUoUFVSQiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJUFdCMzVSWAkJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJUFVDSEFSCQlwUnhCdWZmZXJBZGRyZXNzOworCXUzMgkJU2l6ZUNoZWNrOworCXUxNgkJQnVsa0xlbmd0aDsKKwl1MzIJCVJ4QnVmZmVySWQ7CisJUjAwX0RFU0NSSVBUT1IgCVIwMDsKKworCS8vIFZhcmlhYmxlIHNldHRpbmcKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKwlwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgPSBwVXJiLT5zdGF0dXM7Ly9TdG9yZSB0aGUgbGFzdCByZXN1bHQgb2YgSXJwCisKKwlkbyB7CisJCVJ4QnVmZmVySWQgPSBwV2IzNVJ4LT5DdXJyZW50UnhCdWZmZXJJZDsKKworCQlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKwkJQnVsa0xlbmd0aCA9ICh1MTYpcFVyYi0+YWN0dWFsX2xlbmd0aDsKKworCQkvLyBUaGUgSVJQIGlzIGNvbXBsZXRlZAorCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKworCQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKSAvLyBNdXN0IGJlIGhlcmUsIG9yIFJ4QnVmZmVySWQgaXMgaW52YWxpZAorCQkJYnJlYWs7CisKKwkJaWYgKHBXYjM1UngtPnJ4X2hhbHQpCisJCQlicmVhazsKKworCQkvLyBTdGFydCB0byBwcm9jZXNzIHRoZSBkYXRhIG9ubHkgaW4gc3VjY2Vzc2Z1bCBjb25kaXRpb24KKwkJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMDsgLy8gU2V0IHRoZSBvd25lciB0byBkcml2ZXIKKwkJUjAwLnZhbHVlID0gbGUzMl90b19jcHUoKihQVUxPTkcpcFJ4QnVmZmVyQWRkcmVzcyk7CisKKwkJLy8gVGhlIFVSQiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKKwkJaWYgKHBXYjM1UngtPkVQM1ZNX3N0YXR1cyAhPSAwKSB7CisJCQkjaWZkZWYgX1BFX1VTQl9TVEFURV9EVU1QXworCQkJV0JERUJVRygoIkVQMyBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJCURlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCBwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgKTsKKwkJCSNlbmRpZgorCQkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJYnJlYWs7CisJCX0KKworCQkvLyAyMDA2MDIyMCBGb3IgcmVjb3ZlcmluZy4gY2hlY2sgaWYgb3BlcmF0aW5nIGluIHNpbmdsZSBVU0IgbW9kZQorCQlpZiAoIUhBTF9VU0JfTU9ERV9CVVJTVChwSHdEYXRhKSkgeworCQkJU2l6ZUNoZWNrID0gUjAwLlIwMF9yZWNlaXZlX2J5dGVfY291bnQ7ICAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJCQlpZiAoKFNpemVDaGVjayAmIDB4MDMpID4gMCkKKwkJCQlTaXplQ2hlY2sgLT0gNDsKKwkJCVNpemVDaGVjayA9IChTaXplQ2hlY2sgKyAzKSAmIH4weDAzOworCQkJU2l6ZUNoZWNrICs9IDEyOyAvLyA4ICsgNCBiYWRiZWVmCisJCQlpZiAoKEJ1bGtMZW5ndGggPiAxNjAwKSB8fAorCQkJCShTaXplQ2hlY2sgPiAxNjAwKSB8fAorCQkJCShCdWxrTGVuZ3RoICE9IFNpemVDaGVjaykgfHwKKwkJCQkoQnVsa0xlbmd0aCA9PSAwKSkgeyAvLyBBZGQgZm9yIGZhaWwgVXJiCisJCQkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJCXBXYjM1UngtPkVwM0Vycm9yQ291bnQyKys7CisJCQl9CisJCX0KKworCQkvLyBJbmRpY2F0aW5nIHRoZSByZWNlaXZpbmcgZGF0YQorCQlwV2IzNVJ4LT5CeXRlUmVjZWl2ZWQgKz0gQnVsa0xlbmd0aDsKKwkJcFdiMzVSeC0+UnhCdWZmZXJTaXplWyBSeEJ1ZmZlcklkIF0gPSBCdWxrTGVuZ3RoOworCisJCWlmICghcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdKQorCQkJV2IzNVJ4X2luZGljYXRlKHBId0RhdGEpOworCisJCWtmcmVlKHBXYjM1UngtPnBEUngpOworCQkvLyBEbyB0aGUgbmV4dCByZWNlaXZlCisJCVdiMzVSeChwSHdEYXRhKTsKKwkJcmV0dXJuOworCisJfSB3aGlsZShGQUxTRSk7CisKKwlwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0gPSAxOyAvLyBTZXQgdGhlIG93bmVyIHRvIGhhcmR3YXJlCisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIgKTsKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1UnhfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKworCS8vIEluaXRpYWwgdGhlIEJ1ZmZlciBRdWV1ZQorCVdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCBwSHdEYXRhICk7CisKKwlwV2IzNVJ4LT5SeFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJcmV0dXJuICghIXBXYjM1UngtPlJ4VXJiKTsKK30KKwordm9pZCBXYjM1Unhfc3RvcChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKworCS8vIENhbmNlbGluZyB0aGUgSXJwIGlmIGFscmVhZHkgc2VuZHMgaXQgb3V0LgorCWlmIChwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKSB7CisJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVJ4LT5SeFVyYiApOyAvLyBPbmx5IHVzZSB1bmxpbmssIGxldCBXYjM1UnhfZGVzdHJveSB0byBmcmVlIHRoZW0KKwkJI2lmZGVmIF9QRV9SWF9EVU1QXworCQlXQkRFQlVHKCgiRVAzIFJ4IHN0b3BcbiIpKTsKKwkJI2VuZGlmCisJfQorfQorCisvLyBOZWVkcyBwcm9jZXNzIGNvbnRleHQKK3ZvaWQgV2IzNVJ4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwlkbyB7CisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYQorCX0gd2hpbGUgKHBXYjM1UngtPkVQM3ZtX3N0YXRlICE9IFZNX1NUT1ApOworCU9TX1NMRUVQKDEwMDAwKTsgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZXhpdCA5NDA2MjMuMS5iCisKKwlpZiAocFdiMzVSeC0+UnhVcmIpCisJCXVzYl9mcmVlX3VyYiggcFdiMzVSeC0+UnhVcmIgKTsKKwkjaWZkZWYgX1BFX1JYX0RVTVBfCisJV0JERUJVRygoIldiMzVSeF9kZXN0cm95IE9LXG4iKSk7CisJI2VuZGlmCit9CisKK3ZvaWQgV2IzNVJ4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJdTMyCWk7CisKKwlwV2IzNVJ4LT5CeXRlUmVjZWl2ZWQgPSAwOworCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4ID0gMDsKKwlwV2IzNVJ4LT5SeEJ1ZmZlcklkID0gMDsKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJcFdiMzVSeC0+cnhfaGFsdCA9IDA7CisKKwkvLyBJbml0aWFsIHRoZSBRdWV1ZS4gVGhlIGxhc3QgYnVmZmVyIGlzIHJlc2VydmVkIGZvciB1c2VkIGlmIHRoZSBSeCByZXNvdXJjZSBpcyB1bmF2YWlsYWJsZS4KKwlmb3IoIGk9MDsgaTxNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7IGkrKyApCisJCXBXYjM1UngtPlJ4T3duZXJbaV0gPSAxOworfQorCit2b2lkIFdiMzVSeF9hZGp1c3QoUERFU0NSSVBUT1IgcFJ4RGVzKQoreworCVBVTE9ORwlwUnhCdWZmZXJBZGRyZXNzOworCXUzMglEZWNyeXB0aW9uTWV0aG9kOworCXUzMglpOworCXUxNglCdWZmZXJTaXplOworCisJRGVjcnlwdGlvbk1ldGhvZCA9IHBSeERlcy0+UjAxLlIwMV9kZWNyeXB0aW9uX21ldGhvZDsKKwlwUnhCdWZmZXJBZGRyZXNzID0gcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXTsKKwlCdWZmZXJTaXplID0gcFJ4RGVzLT5idWZmZXJfc2l6ZVswXTsKKworCS8vIEFkanVzdCB0aGUgbGFzdCBwYXJ0IG9mIGRhdGEuIE9ubHkgZGF0YSBsZWZ0CisJQnVmZmVyU2l6ZSAtPSA0OyAvLyBGb3IgQ1JDLTMyCisJaWYgKERlY3J5cHRpb25NZXRob2QpCisJCUJ1ZmZlclNpemUgLT0gNDsKKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAzKSAvLyBGb3IgQ0NNUAorCQlCdWZmZXJTaXplIC09IDQ7CisKKwkvLyBBZGp1c3QgdGhlIElWIGZpZWxkIHdoaWNoIGFmdGVyIDgwMi4xMSBoZWFkZXIgYW5kIElDViBmaWVsZC4KKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAxKSAvLyBGb3IgV0VQCisJeworCQlmb3IoIGk9NjsgaT4wOyBpLS0gKQorCQkJcFJ4QnVmZmVyQWRkcmVzc1tpXSA9IHBSeEJ1ZmZlckFkZHJlc3NbaS0xXTsKKwkJcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3MgKyAxOworCQlCdWZmZXJTaXplIC09IDQ7IC8vIDQgYnl0ZSBmb3IgSVYKKwl9CisJZWxzZSBpZiggRGVjcnlwdGlvbk1ldGhvZCApIC8vIEZvciBUS0lQIGFuZCBDQ01QCisJeworCQlmb3IgKGk9NzsgaT4xOyBpLS0pCisJCQlwUnhCdWZmZXJBZGRyZXNzW2ldID0gcFJ4QnVmZmVyQWRkcmVzc1tpLTJdOworCQlwUnhEZXMtPmJ1ZmZlcl9hZGRyZXNzWzBdID0gcFJ4QnVmZmVyQWRkcmVzcyArIDI7Ly9VcGRhdGUgdGhlIGRlc2NyaXB0b3IsIHNoaWZ0IDggYnl0ZQorCQlCdWZmZXJTaXplIC09IDg7IC8vIDggYnl0ZSBmb3IgSVYgKyBJQ1YKKwl9CisJcFJ4RGVzLT5idWZmZXJfc2l6ZVswXSA9IEJ1ZmZlclNpemU7Cit9CisKK2V4dGVybiB2b2lkIHBhY2tldF9jYW1lKGNoYXIgKnBSeEJ1ZmZlckFkZHJlc3MsIGludCBQYWNrZXRTaXplKTsKKworCit1MTYgV2IzNVJ4X2luZGljYXRlKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlERVNDUklQVE9SCVJ4RGVzOworCVBXQjM1UlgJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJUFVDSEFSCQlwUnhCdWZmZXJBZGRyZXNzOworCXUxNgkJUGFja2V0U2l6ZTsKKwl1MTYJCXN0bXAsIEJ1ZmZlclNpemUsIHN0bXAyID0gMDsKKwl1MzIJCVJ4QnVmZmVySWQ7CisKKwkvLyBPbmx5IG9uZSB0aHJlYWQgYmUgYWxsb3dlZCB0byBydW4gaW50byB0aGUgZm9sbG93aW5nCisJZG8geworCQlSeEJ1ZmZlcklkID0gcFdiMzVSeC0+UnhQcm9jZXNzSW5kZXg7CisJCWlmIChwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0pIC8vT3duZXIgYnkgVk0KKwkJCWJyZWFrOworCisJCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4Kys7CisJCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4ICU9IE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUjsKKworCQlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKwkJQnVmZmVyU2l6ZSA9IHBXYjM1UngtPlJ4QnVmZmVyU2l6ZVsgUnhCdWZmZXJJZCBdOworCisJCS8vIFBhcnNlIHRoZSBidWxraW4gYnVmZmVyCisJCXdoaWxlIChCdWZmZXJTaXplID49IDQpIHsKKwkJCWlmICgoY3B1X3RvX2xlMzIoKihQVUxPTkcpcFJ4QnVmZmVyQWRkcmVzcykgJiAweDBmZmZmZmZmKSA9PSBSWF9FTkRfVEFHKSAvL0lzIGVuZGluZz8gOTIxMDAyLjkuYQorCQkJCWJyZWFrOworCisJCQkvLyBHZXQgdGhlIFIwMCBSMDEgZmlyc3QKKwkJCVJ4RGVzLlIwMC52YWx1ZSA9IGxlMzJfdG9fY3B1KCooUFVMT05HKXBSeEJ1ZmZlckFkZHJlc3MpOworCQkJUGFja2V0U2l6ZSA9ICh1MTYpUnhEZXMuUjAwLlIwMF9yZWNlaXZlX2J5dGVfY291bnQ7CisJCQlSeERlcy5SMDEudmFsdWUgPSBsZTMyX3RvX2NwdSgqKChQVUxPTkcpKHBSeEJ1ZmZlckFkZHJlc3MrNCkpKTsKKwkJCS8vIEZvciBuZXcgRE1BIDRrCisJCQlpZiAoKFBhY2tldFNpemUgJiAweDAzKSA+IDApCisJCQkJUGFja2V0U2l6ZSAtPSA0OworCisJCQkvLyBCYXNpYyBjaGVjayBmb3IgUnggbGVuZ3RoLiBJcyBsZW5ndGggdmFsaWQ/CisJCQlpZiAoUGFja2V0U2l6ZSA+IE1BWF9QQUNLRVRfU0laRSkgeworCQkJCSNpZmRlZiBfUEVfUlhfRFVNUF8KKwkJCQlXQkRFQlVHKCgiU2VyaW91cyBFUlJPUiA6IFJ4IGRhdGEgc2l6ZSB0b28gbG9uZywgc2l6ZSA9JWRcbiIsIFBhY2tldFNpemUpKTsKKwkJCQkjZW5kaWYKKworCQkJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCQlwV2IzNVJ4LT5FcDNFcnJvckNvdW50MisrOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvLyBTdGFydCB0byBwcm9jZXNzIFJ4IGJ1ZmZlcgorLy8JCQlSeERlcy5EZXNjcmlwdG9yX0lEID0gUnhCdWZmZXJJZDsgLy8gRHVlIHRvIHN5bmNocm9ub3VzIGluZGljYXRlLCB0aGUgZmllbGQgZG9lc24ndCBuZWNlc3NhcnkgdG8gdXNlLgorCQkJQnVmZmVyU2l6ZSAtPSA4OyAvL3N1YnRyYWN0IDggYnl0ZSBmb3IgMzUncyBVU0IgaGVhZGVyIGxlbmd0aAorCQkJcFJ4QnVmZmVyQWRkcmVzcyArPSA4OworCisJCQlSeERlcy5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3M7CisJCQlSeERlcy5idWZmZXJfc2l6ZVswXSA9IFBhY2tldFNpemU7CisJCQlSeERlcy5idWZmZXJfbnVtYmVyID0gMTsKKwkJCVJ4RGVzLmJ1ZmZlcl9zdGFydF9pbmRleCA9IDA7CisJCQlSeERlcy5idWZmZXJfdG90YWxfc2l6ZSA9IFJ4RGVzLmJ1ZmZlcl9zaXplWzBdOworCQkJV2IzNVJ4X2FkanVzdCgmUnhEZXMpOworCisJCQlwYWNrZXRfY2FtZShwUnhCdWZmZXJBZGRyZXNzLCBQYWNrZXRTaXplKTsKKworCQkJLy8gTW92ZSBSeEJ1ZmZlciBwb2ludCB0byB0aGUgbmV4dAorCQkJc3RtcCA9IFBhY2tldFNpemUgKyAzOworCQkJc3RtcCAmPSB+MHgwMzsgLy8gNG4gYWxpZ25tZW50CisJCQlwUnhCdWZmZXJBZGRyZXNzICs9IHN0bXA7CisJCQlCdWZmZXJTaXplIC09IHN0bXA7CisJCQlzdG1wMiArPSBzdG1wOworCQl9CisKKwkJLy8gUmVjbGFpbSByZXNvdXJjZQorCQlwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0gPSAxOworCX0gd2hpbGUoVFJVRSk7CisKKwlyZXR1cm4gc3RtcDI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhM2U3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmgKQEAgLTAsMCArMSwxNyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAkJV2IzNVJ4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIJCVdiMzVSeF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3UxNgkJV2IzNVJ4X2luZGljYXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfYWRqdXN0KCAgUERFU0NSSVBUT1IgcFJ4RGVzICk7Cit2b2lkCQlXYjM1Unhfc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKwordm9pZAkJV2IzNVJ4KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfQ29tcGxldGUoICBQVVJCIHBVcmIgKTsKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiODMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmgKQEAgLTAsMCArMSw0OCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyB3YjM1cnguaCAtLQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIERlZmluaXRpb24gZm9yIHRoaXMgbW9kdWxlIHVzZWQKKyNkZWZpbmUgTUFYX1VTQl9SWF9CVUZGRVIJNDA5NgkvLyBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIDQwOTYgOTMxMTMwLjQuZgorCisjZGVmaW5lIE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUglFVEhFUk5FVF9SWF9ERVNDUklQVE9SUwkJLy8gTWF4aW11bSAyNTQsIDI1NSBpcyBSRVNFUlZFRCBJRAorI2RlZmluZSBSWF9JTlRFUkZBQ0UJCQkJMAkvLyBJbnRlcmZhY2UgMQorI2RlZmluZSBSWF9QSVBFCQkJCQkJMgkvLyBQaXBlIDMKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFCQkJCTE2MDAgLy8xNTY4CS8vIDggKyAxNTMyICsgNCArIDI0KElWIEVJViBNSUMgSUNWIENSQykgZm9yIGNoZWNrIERNQSBkYXRhIDkzMTEzMC40LmcKKyNkZWZpbmUgUlhfRU5EX1RBRwkJCQkJMHgwYmFkYmVlZgorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX1dCMzVSWAoreworCXUzMgkJCUJ5dGVSZWNlaXZlZDsvLyBGb3IgY2FsY3VsYXRpbmcgdGhyb3VnaHB1dCBvZiBCdWxrSW4KKwlPU19BVE9NSUMJCVJ4RmlyZUNvdW50ZXI7Ly8gRG9lcyBXYjM1UnggbW9kdWxlIGZpcmU/CisKKwl1OAlSeEJ1ZmZlclsgTUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSIF1bICgoTUFYX1VTQl9SWF9CVUZGRVIrMykgJiB+MHgwMyApIF07CisJdTE2CVJ4QnVmZmVyU2l6ZVsgKChNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIrMSkgJiB+MHgwMSkgXTsKKwl1OAlSeE93bmVyWyAoKE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUiszKSAmIH4weDAzICkgXTsvL093bmVyc2hpcCBvZiBidWZmZXIgIDA6IFNXIDE6SFcKKworCXUzMglSeFByb2Nlc3NJbmRleDsvL1RoZSBuZXh0IGluZGV4IHRvIHByb2Nlc3MKKwl1MzIJUnhCdWZmZXJJZDsKKwl1MzIJRVAzdm1fc3RhdGU7CisKKwl1MzIJcnhfaGFsdDsgLy8gRm9yIFZNIHN0b3BwaW5nCisKKwl1MTYJTW9yZURhdGFTaXplOworCXUxNglQYWNrZXRTaXplOworCisJdTMyCUN1cnJlbnRSeEJ1ZmZlcklkOyAvLyBGb3IgY29tcGxldGUgcm91dGluZSB1c2FnZQorCXUzMglSeDNVcmJDYW5jZWw7CisKKwl1MzIJTGFzdFIxOyAvLyBGb3IgUlNTSSByZXBvcnRpbmcKKwlzdHJ1Y3QgdXJiICoJCQkJUnhVcmI7CisJdTMyCQlFcDNFcnJvckNvdW50MjsgLy8gMjAwNjA2MjUuMSBVc2JkIGZvciBSeCBETUEgZXJyb3IgY291bnQKKworCWludAkJRVAzVk1fc3RhdHVzOworCVBVQ0hBUglwRFJ4OworCit9IFdCMzVSWCwgKlBXQjM1Ulg7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjE5YzNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4LmMKQEAgLTAsMCArMSwzMTMgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENvcHlyaWdodCAoYykgMTk5Ni0yMDAyIFdpbmJvbmQgRWxlY3Ryb25pYyBDb3Jwb3JhdGlvbgorLy8KKy8vICBNb2R1bGUgTmFtZToKKy8vICAgIFdiMzVUeC5jCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgUHJvY2Vzc2luZyB0aGUgVHggbWVzc2FnZSBhbmQgcHV0IGludG8gZG93biBsYXllcgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgInN5c2RlZi5oIgorCisKK3Vuc2lnbmVkIGNoYXIKK1diMzVUeF9nZXRfdHhfYnVmZmVyKHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSICpwQnVmZmVyICkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJKnBCdWZmZXIgPSBwV2IzNVR4LT5UeEJ1ZmZlclswXTsKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBXYjM1VHhfc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyhwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhGaXJlQ291bnRlcikgPT0gMSkgeworCQlwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVUeChwSHdEYXRhKTsKKwl9IGVsc2UKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4RmlyZUNvdW50ZXIgKTsKK30KKworCit2b2lkIFdiMzVUeChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisJUFVDSEFSCQlwVHhCdWZmZXJBZGRyZXNzOworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXN0cnVjdCB1cmIgKglwVXJiID0gKHN0cnVjdCB1cmIgKilwV2IzNVR4LT5UeDRVcmI7CisJaW50ICAgICAgICAgCXJldHY7CisJdTMyCQlTZW5kSW5kZXg7CisKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChwV2IzNVR4LT50eF9oYWx0KQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBPd25lcnNoaXAgY2hlY2tpbmcKKwlTZW5kSW5kZXggPSBwV2IzNVR4LT5UeFNlbmRJbmRleDsKKwlpZiAoIXBNZHMtPlR4T3duZXJbU2VuZEluZGV4XSkgLy9ObyBtb3JlIGRhdGEgbmVlZCB0byBiZSBzZW50LCByZXR1cm4gaW1tZWRpYXRlbHkKKwkJZ290byBjbGVhbnVwOworCisJcFR4QnVmZmVyQWRkcmVzcyA9IHBXYjM1VHgtPlR4QnVmZmVyW1NlbmRJbmRleF07CisJLy8KKwkvLyBJc3N1aW5nIFVSQgorCS8vCisJdXNiX2ZpbGxfYnVsa191cmIocFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDQpLAorCQkJICBwVHhCdWZmZXJBZGRyZXNzLCBwTWRzLT5UeEJ1ZmZlclNpemVbIFNlbmRJbmRleCBdLAorCQkJICBXYjM1VHhfY29tcGxldGUsIHBId0RhdGEpOworCisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYiggcFVyYiApOworCWlmIChyZXR2PDApIHsKKwkJcHJpbnRrKCJFUDQgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLy8gQ2hlY2sgaWYgZHJpdmVyIG5lZWRzIGlzc3VlIElycCBmb3IgRVAyCisJcFdiMzVUeC0+VHhGaWxsQ291bnQgKz0gcE1kcy0+VHhDb3VudEluQnVmZmVyW1NlbmRJbmRleF07CisJaWYgKHBXYjM1VHgtPlR4RmlsbENvdW50ID4gMTIpCisJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCisJcFdiMzVUeC0+Qnl0ZVRyYW5zZmVyICs9IHBNZHMtPlR4QnVmZmVyU2l6ZVtTZW5kSW5kZXhdOworCXJldHVybjsKKworIGNsZWFudXA6CisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7Cit9CisKKwordm9pZCBXYjM1VHhfY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhID0gcFVyYi0+Y29udGV4dDsKKwlQQURBUFRFUglBZGFwdGVyID0gKFBBREFQVEVSKXBId0RhdGEtPkFkYXB0ZXI7CisJUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJUE1EUwkJcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisKKwlwcmludGsoIndiMzU6IHR4IGNvbXBsZXRlXG4iKTsKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVUeC0+RVA0Vk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOyAvL1N0b3JlIHRoZSBsYXN0IHJlc3VsdCBvZiBJcnAKKwlwTWRzLT5UeE93bmVyWyBwV2IzNVR4LT5UeFNlbmRJbmRleCBdID0gMDsvLyBTZXQgdGhlIG93bmVyLiBGcmVlIHRoZSBvd25lciBiaXQgYWx3YXlzLgorCXBXYjM1VHgtPlR4U2VuZEluZGV4Kys7CisJcFdiMzVUeC0+VHhTZW5kSW5kZXggJT0gTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSOworCisJZG8geworCQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKSAvLyBMZXQgV2JXbGFuSGFsdCB0byBoYW5kbGUgc3VycHJpc2UgcmVtb3ZlCisJCQlicmVhazsKKworCQlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJCWJyZWFrOworCisJCS8vIFRoZSBVUkIgaXMgY29tcGxldGVkLCBjaGVjayB0aGUgcmVzdWx0CisJCWlmIChwV2IzNVR4LT5FUDRWTV9zdGF0dXMgIT0gMCkgeworCQkJcHJpbnRrKCJVUkIgc3VibWlzc2lvbiBmYWlsZWRcbiIpOworCQkJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworCQkJYnJlYWs7IC8vIEV4aXQgd2hpbGUoRkFMU0UpOworCQl9CisKKwkJTWRzX1R4KEFkYXB0ZXIpOworCQlXYjM1VHgocEh3RGF0YSk7CisJCXJldHVybjsKKwl9IHdoaWxlKEZBTFNFKTsKKworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7CisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworfQorCit2b2lkIFdiMzVUeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHhTZW5kSW5kZXggPSAwOworCXBXYjM1VHgtPnR4X2hhbHQgPSAwOworfQorCit1bnNpZ25lZCBjaGFyIFdiMzVUeF9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHg0VXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4NFVyYikKKwkJcmV0dXJuIEZBTFNFOworCisJcFdiMzVUeC0+VHgyVXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4MlVyYikKKwl7CisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBUcnlpbmcgdG8gY2FuY2VsaW5nIHRoZSBUcnAgb2YgRVAyCisJaWYgKHBXYjM1VHgtPkVQMnZtX3N0YXRlID09IFZNX1JVTk5JTkcpCisJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVR4X2Rlc3Ryb3QgdG8gZnJlZSB0aGVtCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJFUDIgVHggc3RvcFxuIikpOworCSNlbmRpZgorCisJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgSXJwIG9mIEVQNAorCWlmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQorCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQorCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiRVA0IFR4IHN0b3BcbiIpKTsKKwkjZW5kaWYKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBXYWl0IGZvciBWTSBzdG9wCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7ICAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5hCisJfSB3aGlsZSggKHBXYjM1VHgtPkVQMnZtX3N0YXRlICE9IFZNX1NUT1ApICYmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSAhPSBWTV9TVE9QKSApOworCU9TX1NMRUVQKDEwMDAwKTsgIC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmIKKworCWlmIChwV2IzNVR4LT5UeDRVcmIpCisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisKKwlpZiAocFdiMzVUeC0+VHgyVXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1VHgtPlR4MlVyYiApOworCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJXYjM1VHhfZGVzdHJveSBPS1xuIikpOworCSNlbmRpZgorfQorCit2b2lkIFdiMzVUeF9DdXJyZW50VGltZShwaHdfZGF0YV90IHBId0RhdGEsIHUzMiBUaW1lQ291bnQpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwl1bnNpZ25lZCBjaGFyIFRyaWdnZXIgPSBGQUxTRTsKKworCWlmIChwV2IzNVR4LT5UeFRpbWVyID4gVGltZUNvdW50KQorCQlUcmlnZ2VyID0gVFJVRTsKKwllbHNlIGlmIChUaW1lQ291bnQgPiAocFdiMzVUeC0+VHhUaW1lcis1MDApKQorCQlUcmlnZ2VyID0gVFJVRTsKKworCWlmIChUcmlnZ2VyKSB7CisJCXBXYjM1VHgtPlR4VGltZXIgPSBUaW1lQ291bnQ7CisJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCX0KK30KKwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKSA9PSAxKSB7CisJCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJV2IzNVR4X0VQMlZNKCBwSHdEYXRhICk7CisJfQorCWVsc2UKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKTsKK30KKworCit2b2lkIFdiMzVUeF9FUDJWTShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHgyVXJiOworCVBVTE9ORwlwbHRtcCA9IChQVUxPTkcpcFdiMzVUeC0+RVAyX2J1ZjsKKwlpbnQJCXJldHY7CisKKwlkbyB7CisJCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCQlicmVhazsKKworCQlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJCWJyZWFrOworCisJCS8vCisJCS8vIElzc3VpbmcgVVJCCisJCS8vCisJCXVzYl9maWxsX2ludF91cmIoIHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsIHVzYl9yY3ZpbnRwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsMiksCisJCQkJICBwbHRtcCwgTUFYX0lOVEVSUlVQVF9MRU5HVEgsIFdiMzVUeF9FUDJWTV9jb21wbGV0ZSwgcEh3RGF0YSwgMzIpOworCisJCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJcmV0diA9IHdiX3VzYl9zdWJtaXRfdXJiKCBwVXJiICk7CisKKwkJaWYocmV0diA8IDApIHsKKwkJCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwkJCVdCREVCVUcoKCJFUDIgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm47CisKKwl9IHdoaWxlKEZBTFNFKTsKKworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCApOworfQorCisKK3ZvaWQgV2IzNVR4X0VQMlZNX2NvbXBsZXRlKHN0cnVjdCB1cmIgKiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJVDAyX0RFU0NSSVBUT1IJVDAyLCBUU1RBVFVTOworCVBBREFQVEVSCUFkYXB0ZXIgPSAoUEFEQVBURVIpcEh3RGF0YS0+QWRhcHRlcjsKKwlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlQVUxPTkcJCXBsdG1wID0gKFBVTE9ORylwV2IzNVR4LT5FUDJfYnVmOworCXUzMgkJaTsKKwl1MTYJCUludGVycnVwdEluTGVuZ3RoOworCisKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVUeC0+RVAydm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVUeC0+RVAyVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisJZG8geworCQkvLyBGb3IgTGludXggMi40LiBJbnRlcnJ1cHQgd2lsbCBhbHdheXMgdHJpZ2dlcgorCQlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wICkgLy8gTGV0IFdiV2xhbkhhbHQgdG8gaGFuZGxlIHN1cnByaXNlIHJlbW92ZQorCQkJYnJlYWs7CisKKwkJaWYoIHBXYjM1VHgtPnR4X2hhbHQgKQorCQkJYnJlYWs7CisKKwkJLy9UaGUgVXJiIGlzIGNvbXBsZXRlZCwgY2hlY2sgdGhlIHJlc3VsdAorCQlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKKwkJCVdCREVCVUcoKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCQlwV2IzNVR4LT5FUDJ2bV9zdGF0ZT0gVk1fU1RPUDsKKwkJCWJyZWFrOyAvLyBFeGl0IHdoaWxlKEZBTFNFKTsKKwkJfQorCisJCS8vIFVwZGF0ZSB0aGUgVHggcmVzdWx0CisJCUludGVycnVwdEluTGVuZ3RoID0gcFVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJLy8gTW9kaWZ5IGZvciBtaW5pbXVtIG1lbW9yeSBhY2Nlc3MgYW5kIERXT1JEIGFsaWdubWVudC4KKwkJVDAyLnZhbHVlID0gY3B1X3RvX2xlMzIocGx0bXBbMF0pID4+IDg7IC8vIFszMTo4XSAtPiBbMjQ6MF0KKwkJSW50ZXJydXB0SW5MZW5ndGggLT0gMTsvLyAyMDA1MTIyMS4xLmMgTW9kaWZ5IHRoZSBmb2xsb3cgZm9yIG1vcmUgc3RhYmxlCisJCUludGVycnVwdEluTGVuZ3RoID4+PSAyOyAvLyBJbnRlcnJ1cHRJbkxlbmd0aC80CisJCWZvciAoaT0xOyBpPD1JbnRlcnJ1cHRJbkxlbmd0aDsgaSsrKSB7CisJCQlUMDIudmFsdWUgfD0gKChjcHVfdG9fbGUzMihwbHRtcFtpXSkgJiAweGZmKSA8PCAyNCk7CisKKwkJCVRTVEFUVVMudmFsdWUgPSBUMDIudmFsdWU7ICAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCQlNZHNfU2VuZENvbXBsZXRlKCBBZGFwdGVyLCAmVFNUQVRVUyApOworCQkJVDAyLnZhbHVlID0gY3B1X3RvX2xlMzIocGx0bXBbaV0pID4+IDg7CisJCX0KKworCQlyZXR1cm47CisJfSB3aGlsZShGQUxTRSk7CisKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCApOworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fU1RPUDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwNWE4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKQEAgLTAsMCArMSwyMCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiAqcEJ1ZmZlciApOworCit2b2lkIFdiMzVUeF9FUDJWTSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X0VQMlZNX2NvbXBsZXRlKCAgUFVSQiBwdXJiICk7CisKK3ZvaWQgV2IzNVR4X3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfY29tcGxldGUoICBQVVJCIHB1cmIgKTsKK3ZvaWQgV2IzNVR4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKwordm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgVGltZUNvdW50ICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MzI1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKQEAgLTAsMCArMSw0NyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIElTODlDMzUgVHggcmVsYXRlZCBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBUWF9JTlRFUkZBQ0UJCQkwCS8vIEludGVyZmFjZSAxCisjZGVmaW5lIFRYX1BJUEUJCQkJCTMJLy8gZW5kcG9pbnQgNAorI2RlZmluZSBUWF9JTlRFUlJVUFQJCQkxCS8vIGVuZHBvaW50IDIKKyNkZWZpbmUgTUFYX0lOVEVSUlVQVF9MRU5HVEgJNjQJLy8gSXQgbXVzdCBiZSA2NCBmb3IgRVAyIGhhcmR3YXJlCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCit0eXBlZGVmIHN0cnVjdCBfV0IzNVRYCit7CisJLy8gRm9yIFR4IGJ1ZmZlcgorCXU4CVR4QnVmZmVyWyBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgXVsgTUFYX1VTQl9UWF9CVUZGRVIgXTsKKworCS8vIEZvciBJbnRlcnJ1cHQgcGlwZQorCXU4CUVQMl9idWZbTUFYX0lOVEVSUlVQVF9MRU5HVEhdOworCisJT1NfQVRPTUlDCVR4UmVzdWx0Q291bnQ7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQMiA5MzExMzAuNC5tCisJT1NfQVRPTUlDCVR4RmlyZUNvdW50ZXI7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQNCA5MzExMzAuNC5uCisJdTMyCQkJQnl0ZVRyYW5zZmVyOworCisJdTMyCSAgICBUeFNlbmRJbmRleDsvLyBUaGUgbmV4dCBpbmRleCBvZiBNZHMgYXJyYXkgdG8gYmUgc2VudAorCXUzMgkgICAgRVAydm1fc3RhdGU7IC8vIGZvciBFUDJ2bSBzdGF0ZQorCXUzMgkgICAgRVA0dm1fc3RhdGU7IC8vIGZvciBFUDR2bSBzdGF0ZQorCXUzMgkgICAgdHhfaGFsdDsgLy8gU3RvcHBpbmcgVk0KKworCXN0cnVjdCB1cmIgKgkJCQlUeDRVcmI7CisJc3RydWN0IHVyYiAqCQkJCVR4MlVyYjsKKworCWludAkJRVAyVk1fc3RhdHVzOworCWludAkJRVA0Vk1fc3RhdHVzOworCisJdTMyCVR4RmlsbENvdW50OyAvLyAyMDA2MDkyOAorCXUzMglUeFRpbWVyOyAvLyAyMDA2MDkyOCBBZGQgaWYgc2VuZGluZyBwYWNrZXQgbm90IGdyZWF0IHRoYW4gMTMKKworfSBXQjM1VFgsICpQV0IzNVRYOworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWQ1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICoKKyAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCisgKi8KKyNpbmNsdWRlICJzeXNkZWYuaCIKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHZlbmRvciBJRCBhbmQgcHJvZHVjdCBJRCBjYW4gaW50byBoZXJlIGZvciBvdGhlcnMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgSWRfVGFibGVbXSA9Cit7CisgIHtVU0JfREVWSUNFKCAweDA0MTYsIDB4MDAzNSApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjAxICl9LAorICB7VVNCX0RFVklDRSggMHgxOEU4LCAweDYyMDYgKX0sCisgIHtVU0JfREVWSUNFKCAweDE4RTgsIDB4NjIxNyApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjMwICl9LAorICB7VVNCX0RFVklDRSggMHgxOEU4LCAweDYyMzMgKX0sCisgIHtVU0JfREVWSUNFKCAweDExMzEsIDB4MjAzNSApfSwKKyAgeyAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIElkX1RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdiMzVfZHJpdmVyID0geworCS5uYW1lID0JCSJ3MzV1bmQiLAorCS5wcm9iZSA9CXdiMzVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB3YjM1X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gSWRfVGFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdic29mdF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2Jzb2Z0X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKK307CisKK2ludCB3YnNvZnRfZW5hYmxlZDsKK3N0cnVjdCBpZWVlODAyMTFfaHcgKm15X2RldjsKK1BBREFQVEVSIG15X2FkYXB0ZXI7CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlwcmludGsoIndic29mdF9hZGQgaW50ZXJmYWNlIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdic29mdF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXByaW50aygid2Jzb2Z0X3JlbW92ZSBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKK30KKworc3RhdGljIGludCB3YnNvZnRfbm9wKHZvaWQpCit7CisJcHJpbnRrKCJ3YnNvZnRfbm9wIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdic29mdF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCit7CisJdW5zaWduZWQgaW50IGJpdF9uciwgbmV3X2ZsYWdzOworCXUzMiBtY19maWx0ZXJbMl07CisJaW50IGk7CisKKwluZXdfZmxhZ3MgPSAwOworCisJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgeworCQluZXdfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTOworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSB+MDsKKwl9IGVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtY19jb3VudCA+IDMyKSkgeworCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSB+MDsKKwl9IGVsc2UgeworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQkJaWYgKCFtY2xpc3QpCisJCQkJYnJlYWs7CisJCQlwcmludGsoIlNob3VsZCBjYWxsIGV0aGVyX2NyYyBoZXJlXG4iKTsKKwkJCS8vYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwkJCWJpdF9uciA9IDA7CisKKwkJCWJpdF9uciAmPSAweDNGOworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJCX0KKwl9CisKKwlkZXYtPmZsYWdzICY9IH5JRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCisJKnRvdGFsX2ZsYWdzID0gbmV3X2ZsYWdzOworfQorCitzdGF0aWMgaW50IHdic29mdF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3sKKwljaGFyICpidWZmZXIgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlwcmludGsoIlNlbmRpbmcgZnJhbWUgJWQgYnl0ZXNcbiIsIHNrYi0+bGVuKTsKKwltZW1jcHkoYnVmZmVyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlpZiAoMSA9PSBNTE1FU2VuZEZyYW1lKG15X2FkYXB0ZXIsIGJ1ZmZlciwgc2tiLT5sZW4sIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQpKQorCQlwcmludGsoImZyYW1lIHNlbnQgb2sgKCVkIGJ5dGVzKT9cbiIsIHNrYi0+bGVuKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKK3N0YXRpYyBpbnQgd2Jzb2Z0X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwl3YnNvZnRfZW5hYmxlZCA9IDE7CisJcHJpbnRrKCJ3YnNvZnRfc3RhcnQgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCUNoYW5JbmZvIGNoOworCXByaW50aygid2Jzb2Z0X2NvbmZpZyBjYWxsZWRcbiIpOworCisJY2guYmFuZCA9IDE7CisJY2guQ2hhbk5vID0gMTsJLyogU2hvdWxkIHVzZSBjaGFubmVsX251bSwgb3Igc29tZXRoaW5nLCBhcyB0aGF0IGlzIGFscmVhZHkgcHJlLXRyYW5zbGF0ZWQgKi8KKworCisJaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNoKTsKKwloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNvbmYtPmJlYWNvbl9pbnQpOworLy8JaGFsX3NldF9jYXBfaW5mbygmbXlfYWRhcHRlci0+c0h3RGF0YSwgPz8gKTsKKy8vIGhhbF9zZXRfc3NpZChwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcHNzaWQsICB1OCBzc2lkX2xlbik7ID8/CisJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCZteV9hZGFwdGVyLT5zSHdEYXRhLCAxKTsKKwloYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cygmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCgmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfYWNjZXB0X2JlYWNvbigmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfcmFkaW9fbW9kZSgmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDApOworCS8vaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICkKKwkvL2hhbF9zZXRfcmZfcG93ZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBQb3dlckluZGV4KQorCisKKy8vCWhhbF9zdGFydF9ic3MoJm15X2FkYXB0ZXItPnNId0RhdGEsIFdMQU5fQlNTVFlQRV9JTkZSQVNUUlVDVFVSRSk7CT8/CisKKy8vdm9pZCBoYWxfc2V0X3JhdGVzKHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIHBic3NfcmF0ZXMsCisvLwkJICAgdTggbGVuZ3RoLCB1bnNpZ25lZCBjaGFyIGJhc2ljX3JhdGVfc2V0KQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJcHJpbnRrKCJ3YnNvZnRfY29uZmlnX2ludGVyZmFjZSBjYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IHdic29mdF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlwcmludGsoIndic29mdF9nZXRfdHNmIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3YnNvZnRfb3BzID0geworCS50eAkJCT0gd2Jzb2Z0X3R4LAorCS5zdGFydAkJCT0gd2Jzb2Z0X3N0YXJ0LAkJLyogU3RhcnQgY2FuIGJlIHByZXR0eSBtdWNoIGVtcHR5IGFzIHdlIGRvIFdiV0xhbkluaXRpYWxpemUoKSBkdXJpbmcgcHJvYmU/ICovCisJLnN0b3AJCQk9IHdic29mdF9ub3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gd2Jzb2Z0X2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJPSB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSB3YnNvZnRfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlCT0gd2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2UsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKKwkuZ2V0X3N0YXRzCQk9IHdic29mdF9ub3AsCisJLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfbm9wLAorCS5nZXRfdHNmCQk9IHdic29mdF9nZXRfdHNmLAorLy8gY29uZl90eDogaGFsX3NldF9jd21pbigpL2hhbF9zZXRfY3dtYXg7Cit9OworCitzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgeworfTsKKworCitpbnQgX19pbml0IHdiMzVfaW5pdCh2b2lkKQoreworCXByaW50aygiW3czNXVuZF1kcml2ZXIgaW5pdFxuIik7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmd2IzNV9kcml2ZXIpOworfQorCit2b2lkIF9fZXhpdCB3YjM1X2V4aXQodm9pZCkKK3sKKwlwcmludGsoIlt3MzV1bmRdZHJpdmVyIGV4aXRcbiIpOworCXVzYl9kZXJlZ2lzdGVyKCAmd2IzNV9kcml2ZXIgKTsKK30KKworbW9kdWxlX2luaXQod2IzNV9pbml0KTsKK21vZHVsZV9leGl0KHdiMzVfZXhpdCk7CisKKy8vIFVzYiBrZXJuZWwgc3Vic3lzdGVtIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBuZXcgZGV2aWNlIGlzIHBsdWdnZWQgaW50by4KK2ludCB3YjM1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpCit7CisJUEFEQVBURVIJQWRhcHRlcjsKKwlQV0JMSU5VWAlwV2JMaW51eDsKKwlQV0JVU0IJCXBXYlVzYjsKKyAgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50CWksIHJldCA9IC0xOworCXUzMglsdG1wOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXVzYl9nZXRfZGV2KHVkZXYpOworCisJcHJpbnRrKCJbdzM1dW5kXXdiMzVfcHJvYmUgLT5cbiIpOworCisJZG8geworCQlmb3IgKGk9MDsgaTwoc2l6ZW9mKElkX1RhYmxlKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpKTsgaSsrICkgeworCQkJaWYgKCh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IElkX1RhYmxlW2ldLmlkVmVuZG9yKSAmJgorCQkJCSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBJZF9UYWJsZVtpXS5pZFByb2R1Y3QpKSB7CisJCQkJcHJpbnRrKCJbdzM1dW5kXUZvdW5kIHN1cHBvcnRlZCBoYXJkd2FyZVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChpID09IChzaXplb2YoSWRfVGFibGUpL3NpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9pZCkpKSkgeworCQkJI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJCQlXQkRFQlVHKCgiW3czNXVuZF0gVGhpcyBpcyBub3QgdGhlIG9uZSB3ZSBhcmUgaW50ZXJlc3RlZCBhYm91dFxuIikpOworCQkJI2VuZGlmCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8vIDIwMDYwNjMwLjIgQ2hlY2sgdGhlIGRldmljZSBpZiBpdCBhbHJlYWR5IGJlIG9wZW5lZAorCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKCB1ZGV2LCAwICksCisJCQkJICAgICAgMHgwMSwgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0V8VVNCX0RJUl9JTiwKKwkJCQkgICAgICAweDAsIDB4NDAwLCAmbHRtcCwgNCwgSFoqMTAwICk7CisJCWlmKCByZXQgPCAwICkKKwkJCWJyZWFrOworCisJCWx0bXAgPSBjcHVfdG9fbGUzMihsdG1wKTsKKwkJaWYgKGx0bXApICAvLyBJcyBhbHJlYWR5IGluaXRpYWxpemVkPworCQkJYnJlYWs7CisKKworCQlBZGFwdGVyID0ga3phbGxvYyhzaXplb2YoQURBUFRFUiksIEdGUF9LRVJORUwpOworCisJCW15X2FkYXB0ZXIgPSBBZGFwdGVyOworCQlwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCQlwV2JVc2IgPSAmQWRhcHRlci0+c0h3RGF0YS5XYlVzYjsKKwkJcFdiVXNiLT51ZGV2ID0gdWRldjsKKworCSAgICAgICAgaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJICAgICAgICBlbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwkJaWYgKGVuZHBvaW50WzJdLndNYXhQYWNrZXRTaXplID09IDUxMikgeworCQkJcHJpbnRrKCJbdzM1dW5kXSBXb3JraW5nIG9uIFVTQiAyLjBcbiIpOworCQkJcFdiVXNiLT5Jc1VzYjIwID0gMTsKKwkJfQorCisJCWlmICghV2JXTGFuSW5pdGlhbGl6ZShBZGFwdGVyKSkgeworCQkJcHJpbnRrKCJbdzM1dW5kXVdiV0xhbkluaXRpYWxpemUgZmFpbFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdjsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwkJCWludCByZXM7CisKKwkJCWRldiA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmd2Jzb2Z0X29wcyk7CisKKwkJCWlmICghZGV2KSB7CisJCQkJcHJpbnRrKCJ3MzV1bmQ6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIgKTsKKwkJCQlCVUcoKTsKKwkJCX0KKworCQkJbXlfZGV2ID0gZGV2OworCisJCQlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZ1ZGV2LT5kZXYpOworCQkJeworCQkJCXBod19kYXRhX3QgcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQkJCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CisJCQkJaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhwSHdEYXRhLCBkZXZfYWRkcik7CisJCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBkZXZfYWRkcik7CisJCQl9CisKKworCQkJZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IDEyOwkvKiBGSVhNRSAqLworCQkJZGV2LT5mbGFncyA9IDA7CisKKwkJCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CisvLwkJCWRldi0+bWF4X3Jzc2kgPSAxMDA7CisKKwkJCWRldi0+cXVldWVzID0gMTsKKworCQkJc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKKworCQkJYmFuZC5jaGFubmVscyA9IHdic29mdF9jaGFubmVsczsKKwkJCWJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Jzb2Z0X2NoYW5uZWxzKTsKKwkJCWJhbmQuYml0cmF0ZXMgPSB3YnNvZnRfcmF0ZXM7CisJCQliYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyk7CisKKwkJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmQ7CisjaWYgMAorCQkJd2Jzb2Z0X21vZGVzWzBdLm51bV9jaGFubmVscyA9IDE7CisJCQl3YnNvZnRfbW9kZXNbMF0uY2hhbm5lbHMgPSB3YnNvZnRfY2hhbm5lbHM7CisJCQl3YnNvZnRfbW9kZXNbMF0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKKwkJCXdic29mdF9tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyk7CisJCQl3YnNvZnRfbW9kZXNbMF0ucmF0ZXMgPSB3YnNvZnRfcmF0ZXM7CisKKwkJCXJlcyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmd2Jzb2Z0X21vZGVzWzBdKTsKKwkJCUJVR19PTihyZXMpOworI2VuZGlmCisKKwkJCXJlcyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOworCQkJQlVHX09OKHJlcyk7CisJCX0KKworCQl1c2Jfc2V0X2ludGZkYXRhKCBpbnRmLCBBZGFwdGVyICk7CisKKwkJcHJpbnRrKCJbdzM1dW5kXSBfcHJvYmUgT0tcbiIpOworCQlyZXR1cm4gMDsKKworCX0gd2hpbGUoRkFMU0UpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgcGFja2V0X2NhbWUoY2hhciAqcFJ4QnVmZmVyQWRkcmVzcywgaW50IFBhY2tldFNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7MH07CisKKwlpZiAoIXdic29mdF9lbmFibGVkKQorCQlyZXR1cm47CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKFBhY2tldFNpemUpOworCWlmICghc2tiKSB7CisJCXByaW50aygiTm90IGVub3VnaCBtZW1vcnkgZm9yIHBhY2tldCwgRklYTUVcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHNrYl9wdXQoc2tiLCBQYWNrZXRTaXplKSwKKwkgICAgICAgcFJ4QnVmZmVyQWRkcmVzcywKKwkgICAgICAgUGFja2V0U2l6ZSk7CisKKy8qCisJcnhfc3RhdHVzLnJhdGUgPSAxMDsKKwlyeF9zdGF0dXMuY2hhbm5lbCA9IDE7CisJcnhfc3RhdHVzLmZyZXEgPSAxMjM0NTsKKwlyeF9zdGF0dXMucGh5bW9kZSA9IE1PREVfSUVFRTgwMjExQjsKKyovCisKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShteV9kZXYsIHNrYiwgJnJ4X3N0YXR1cyk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK1diVXNiX2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCXJldHVybiAxOworfQorCisKK3ZvaWQKK1diVXNiX2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworfQorCitpbnQgd2IzNV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJUEFEQVBURVIgQWRhcHRlciA9IChQQURBUFRFUiluZXRkZXYtPnByaXY7CisJcGh3X2RhdGFfdCBwSHdEYXRhID0gJkFkYXB0ZXItPnNId0RhdGE7CisKKyAgICAgICAgbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCS8vVE9ETyA6IHB1dCBoZXJlIHRlbXBvcmFyaWx5CisJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KHBId0RhdGEsIDEpOyAvLyBvcGVuIGFjY2VwdCBicm9hZGNhc3QKKworCXJldHVybiAwOworfQorCitpbnQgd2IzNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3YjM1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJUFdCTElOVVggcFdiTGludXg7CisJUEFEQVBURVIgQWRhcHRlciA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworICAgICAgICBwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCisJLy8gQ2FyZCByZW1vdmUKKwlXYldsYW5IYWx0KEFkYXB0ZXIpOworCit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9mLmgKQEAgLTAsMCArMSwzNCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9mLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK2ludCB3YjM1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgd2IzNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3Vuc2lnbmVkIGNoYXIgV2JVc2JfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpOwordm9pZCBXYlVzYl9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSk7Cit1bnNpZ25lZCBjaGFyIFdiV0xhbkluaXRpYWxpemUoUEFEQVBURVIgQWRhcHRlcik7CisjZGVmaW5lCVdiVXNiX1N0b3AoIF9BICkKKworaW50IHdiMzVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3ZvaWQgd2IzNV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCisjZGVmaW5lIHdiX3VzYl9zdWJtaXRfdXJiKF9BKSB1c2Jfc3VibWl0X3VyYihfQSwgR0ZQX0FUT01JQykKKyNkZWZpbmUgd2JfdXNiX2FsbG9jX3VyYihfQSkgdXNiX2FsbG9jX3VyYihfQSwgR0ZQX0FUT01JQykKKworI2RlZmluZSBXYlVzYl9DaGVja0ZvckhhbmcoIF9QICkKKyNkZWZpbmUgV2JVc2JfRGV0ZWN0U3RhcnQoIF9QLCBfSSApCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzFkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9zLmgKQEAgLTAsMCArMSw0MiBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9zLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNkZWZpbmUgT1NfU0xFRVAoIF9NVCApCXsgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgXAorCQkJICBzY2hlZHVsZV90aW1lb3V0KCBfTVQqSFovMTAwMDAwMCApOyB9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBSV19DT05URVhUIC0tCisvLworLy8gIFVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCBpbyBpcnBzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgX1JXX0NPTlRFWFQKK3sKKwl2b2lkKgkJCXBId0RhdGE7CisJUFVSQgkJCXBVcmI7CisJdm9pZCoJCQlwQ2FsbEJhY2tGdW5jdGlvblBhcmFtZXRlcjsKK30gUldfQ09OVEVYVCwgKlBSV19DT05URVhUOworCisKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk9yaWdpbmFsIGJ5OiBKZWZmIExlZTxZWV9MZWVAaXNzYy5jb20udHc+IEFkYXB0ZWQgdG8gMi42LnggYnkgQ29zdGFudGlubyBMZWFuZHJvIChSeGFydCBEZXNrdG9wKSA8bGVfY29zdGFudGlub0BwaXhhcnRhcmdlbnRpbmEuY29tLmFyPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAiSVM4OUMzNSA4MDIuMTFiZyBXTEFOIFVTQiBEcml2ZXIiCisKKworCit0eXBlZGVmIHN0cnVjdCBfV0JVU0IgeworCXUzMglJc1VzYjIwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXUzMglEZXRlY3RDb3VudDsKK30gV0JVU0IsICpQV0JVU0I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xvY2FscGFyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaApAQCAtMCwwICsxLDI3NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBMb2NhbFBhcmEuaCAtCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vRGVmaW5lIHRoZSBsb2NhbCBhYmlsaXR5CisKKyNkZWZpbmUgTE9DQUxfREVGQVVMVF9CRUFDT05fUEVSSU9ECQkJMTAwCQkvL21zCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfQVRJTV9XSU5ET1cJCQkwCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfRVJQX0NBUEFCSUxJVFkJCTB4MDQzMQkvLzB4MDAwMToJRVNTCisJCQkJCQkJCQkJCQkJLy8weDAwMTA6CVByaXZhY3kKKwkJCQkJCQkJCQkJCQkvLzB4MDAyMDoJc2hvcnQgcHJlYW1ibGUKKwkJCQkJCQkJCQkJCQkvLzB4MDQwMDoJc2hvcnQgc2xvdCB0aW1lCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMCQk1CisKKy8vI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMQkJLy8gY2hhbm5lbCAxLi4xMQorI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMwkJLy8gY2hhbm5lbCAxLi4xMworI2RlZmluZSBMT0NBTF9ERUZBVUxUXzVfQ0hBTk5FTF9OVU0JCQk4CQkvLyBjaGFubmVsIDM2Li42NAorCisjZGVmaW5lIExPQ0FMX1VTQV8yNF9DSEFOTkVMX05VTQkJCTExCisjZGVmaW5lIExPQ0FMX1VTQV81X0NIQU5ORUxfTlVNCQkJCTEyCisjZGVmaW5lIExPQ0FMX0VVUk9QRV8yNF9DSEFOTkVMX05VTQkJCTEzCisjZGVmaW5lIExPQ0FMX0VVUk9QRV81X0NIQU5ORUxfTlVNCQkJMTkKKyNkZWZpbmUgTE9DQUxfSkFQQU5fMjRfQ0hBTk5FTF9OVU0JCQkxNAorI2RlZmluZSBMT0NBTF9KQVBBTl81X0NIQU5ORUxfTlVNCQkJMTEKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl8yNF9DSEFOTkVMX05VTQkJMTQKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl81X0NIQU5ORUxfTlVNCQkJMzQJLy9ub3QgaW5jbHVkZSAxNjUKKworCisjZGVmaW5lIHBzTE9DQUwJCQkoJihBZGFwdGVyLT5zTG9jYWxQYXJhKSkKKworI2RlZmluZSBNT0RFXzgwMl8xMV9CRwkJCTAKKyNkZWZpbmUgTU9ERV84MDJfMTFfQQkJCTEKKyNkZWZpbmUgTU9ERV84MDJfMTFfQUJHCQkJMgorI2RlZmluZSBNT0RFXzgwMl8xMV9CR19JQlNTCQkzCisjZGVmaW5lIE1PREVfODAyXzExX0IJCQk0CisjZGVmaW5lIE1PREVfQVVUTwkJCQkyNTUKKworI2RlZmluZSBCQU5EX1RZUEVfRFNTUwkJCTAKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fMjQJCTEKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fNQkJMgorCisvL3JlZmVyIEJpdG1hcDJSYXRlVmFsdWUgdGFibGUKKyNkZWZpbmUgTE9DQUxfQUxMX1NVUFBPUlRFRF9SQVRFU19CSVRNQVAJCTB4MTMwYzFhNjYJLy90aGUgYml0bWFwIHZhbHVlIG9mIGFsbCB0aGUgSC9XIHN1cHBvcnRlZCByYXRlcworCQkJCQkJCQkJCQkJCQkJLy8xLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMX09GRE1fU1VQUE9SVEVEX1JBVEVTX0JJVE1BUAkJMHgxMzBjMTI0MAkvL3RoZSBiaXRtYXAgdmFsdWUgb2YgYWxsIHRoZSBIL1cgc3VwcG9ydGVkIHJhdGVzCisJCQkJCQkJCQkJCQkJCQkvL2V4Y2VwdCB0byBub24tT0ZETSByYXRlcworCQkJCQkJCQkJCQkJCQkJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisKKyNkZWZpbmUgTE9DQUxfMTFCX1NVUFBPUlRFRF9SQVRFX0JJVE1BUAkJCTB4ODI2CisjZGVmaW5lIExPQ0FMXzExQl9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDgyNgorI2RlZmluZSBMT0NBTF8xMUJfT1BFUkFUSU9OX1JBVEVfQklUTUFQCQkJMHg4MjYKKyNkZWZpbmUgTE9DQUxfMTFHX0JBU0lDX1JBVEVfQklUTUFQCQkJCTB4ODI2CQkvLzEsIDIsIDUuNSwgMTEKKyNkZWZpbmUgTE9DQUxfMTFHX09QRVJBVElPTl9SQVRFX0JJVE1BUAkJCTB4MTMwYzEyNDAJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMXzExQV9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDAxMDAxMDQwCS8vNiwgMTIsIDI0CisjZGVmaW5lIExPQ0FMXzExQV9PUEVSQVRJT05fUkFURV9CSVRNQVAJCQkweDEyMGMwMjAwCS8vOSwgMTgsIDM2LCA0OCwgNTQKKworCisKKyNkZWZpbmUgUFdSX0FDVElWRQkJMAorI2RlZmluZSBQV1JfU0FWRQkJMQorI2RlZmluZSBQV1JfVFhfSURMRV9DWUNMRQkJCTYKKworLy9iUHJlYW1ibGVNb2RlIGFuZCBiU2xvdFRpbWVNb2RlCisjZGVmaW5lIEFVVE9fTU9ERQkJCTAKKyNkZWZpbmUgTE9OR19NT0RFCQkJMQorCisvL1JlZ2lvbiBkZWZpbml0aW9uCisjZGVmaW5lIFJFR0lPTl9BVVRPCQkJMHhmZgorI2RlZmluZSBSRUdJT05fVU5LTk9XTgkJMAorI2RlZmluZSBSRUdJT05fRVVST1BFCQkxCS8vRVRTSQorI2RlZmluZSBSRUdJT05fSkFQQU4JCTIJLy9NS0sKKyNkZWZpbmUgUkVHSU9OX1VTQQkJCTMJLy9GQ0MKKyNkZWZpbmUJUkVHSU9OX0ZSQU5DRQkJNAkvL0ZSQU5DRQorI2RlZmluZSBSRUdJT05fU1BBSU4JCTUJLy9TUEFJTgorI2RlZmluZSBSRUdJT05fSVNSQUVMCQk2CS8vSVNSQUVMCisvLyNkZWZpbmUgUkVHSU9OX0NBTkFEQQkJNwkvL0lDCisKKyNkZWZpbmUgTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UCQkzMgorI2RlZmluZSBNQVhfUE1LSURfQ2FuZGlkYXRlTGlzdCAgICAgICAgIDE2CisKKy8vSGlnaCBieXRlIDogRXZlbnQgbnVtYmVyLCAgbG93IGJ5dGUgOiByZWFzb24KKy8vRXZlbnQgZGVmaW5pdGlvbgorLy8tLSBTTUUvTUxNRSBldmVudAorI2RlZmluZSBFVkVOVF9SQ1ZfREVBVVRICQkJCQkweDAxMDAKKyNkZWZpbmUgRVZFTlRfSk9JTl9GQUlMCQkJCQkJMHgwMjAwCisjZGVmaW5lIEVWRU5UX0FVVEhfRkFJTAkJCQkJCTB4MDMwMAorI2RlZmluZSBFVkVOVF9BU1NPQ19GQUlMCQkJCQkweDA0MDAKKyNkZWZpbmUgRVZFTlRfTE9TVF9TSUdOQUwJCQkJCTB4MDUwMAorI2RlZmluZSBFVkVOVF9CU1NfREVTQ1JJUFRfTEFDSwkJCQkweDA2MDAKKyNkZWZpbmUgRVZFTlRfQ09VTlRFUk1FQVNVUkUJCQkJMHgwNzAwCisjZGVmaW5lIEVWRU5UX0pPSU5fRklMVEVSCQkJCQkweDA4MDAKKy8vLS0gVFgvUlggZXZlbnQKKyNkZWZpbmUgRVZFTlRfUlhfQlVGRl9VTkFWQUlMQUJMRQkJCTB4NDEwMAorCisjZGVmaW5lIEVWRU5UX0NPTk5FQ1QJCQkJCQkweDgxMDAKKyNkZWZpbmUgRVZFTlRfRElTQ09OTkVDVAkJCQkJMHg4MjAwCisjZGVmaW5lIEVWRU5UX1NDQU5fUkVRCQkJCQkJMHg4MzAwCisKKy8vUmVhc29uIG9mIEV2ZW50CisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfQkFTSUNfUkFURQkJMHgwMDAxCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfUFJJVkFDWQkJCTB4MDAwMgorI2RlZmluZSBFVkVOVF9SRUFTT05fRklMVEVSX0FVVEhfTU9ERQkJMHgwMDAzCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9USU1FT1VUCQkJCTB4MDBmZgorCisvLyAyMDA2MTEwOCBXUFMgSUUgYnVmZmVyCisjZGVmaW5lIE1BWF9JRV9BUFBFTkRfU0laRQkJCQkJMjU2ICsgNCAvLyBEdWUgdG8gW0UgaWRdW0xlbmd0aF1bT1VJXVtEYXRhXSBtYXkgMjU3IGJ5dGVzCisKK3R5cGVkZWYgc3RydWN0IF9FVkVOVExPRworeworCXUxNgkJQ291bnQ7CQkJLy9Ub3RhbCBjb3VudCBmcm9tIHN0YXJ0CisJdTE2CQlpbmRleDsJCQkvL0J1ZmZlciBpbmRleCwgMCB+IDYzCisJdTMyCQlFdmVudFZhbHVlWzY0XTsJLy9CWVRFIDN+MiA6IGNvdW50LCBCWVRFIDEgOiBFdmVudCwgQllURSAwIDogcmVhc29uCit9IEV2ZW50X0xvZywgKnBFdmVudF9Mb2c7CisKK3R5cGVkZWYgc3RydWN0IF9DaGFuSW5mbworeworCXU4CQliYW5kOworCXU4CQlDaGFuTm87Cit9IENoYW5JbmZvLCAqcENoYW5JbmZvOworCit0eXBlZGVmIHN0cnVjdCBfQ0hBTl9MSVNUCit7CisJdTE2CQkJCUNvdW50OworCUNoYW5JbmZvCQlDaGFubmVsWzUwXTsgLy8gMTAwQgorfSBDSEFOX0xJU1QsICpwc0NIQU5fTElTVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JhZGlvT2ZmCit7CisJdTgJCQlib0h3UmFkaW9PZmY7CisJdTgJCQlib1N3UmFkaW9PZmY7Cit9IFJhZGlvT2ZmLCAqcHNSYWRpb09mZjsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IExPQ0FMX1BBUkEKK3sKKwl1OAkJCVBlcm1hbmVudEFkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsgCS8vIHJlYWQgZnJvbSBFUFJPTSwgbWFudWZhY3R1cmUgc2V0IGZvciBlYWNoIE5ldENhcmQKKyAgICB1OCAgICAJCVRoaXNNYWNBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJLy8gdGhlIGRyaXZlciB3aWxsIHVzZSBhY3R1YWxseS4KKworCXUzMgkJCU1UVXNpemU7CQkJCS8vIEluZCB0byBVcGxheWVyLCBNYXggdHJhbnNtaXNzaW9uIHVuaXQgc2l6ZQorCisJdTgJCQlyZWdpb25fSU5GOwkvL3JlZ2lvbiBzZXR0aW5nIGZyb20gSU5GCisJdTgJCQlyZWdpb247CQkvL3JlYWwgcmVnaW9uIHNldHRpbmcgb2YgdGhlIGRldmljZQorCXU4CQkJUmVzZXJ2ZWRfMVsyXTsKKworICAgIC8vLy8gcG93ZXItc2F2ZSB2YXJpYWJsZXMKKyAgICB1OCAgCQkgIAlpUG93ZXJTYXZlTW9kZTsgICAgIC8vIDAgaW5kaWNhdGVzIGl0IGlzIG9uLCAxIGluZGljYXRlcyBpdCBpcyBvZmYKKwl1OAkJCVNodXREb3duZWQ7CisJdTgJCQlBVElNbW9kZTsKKwl1OAkJCUV4Y2x1ZGVVbmVuY3J5cHRlZDsKKworCXUxNgkJCUNoZWNrQ291bnRGb3JQUzsJLy9Vbml0IGltZSBjb3VudCBmb3IgdGhlIGRlY2lzaW9uIHRvIGVudGVyIFBTIG1vZGUKKwl1OAkJCWJvSGFzVHhBY3Rpdml0eTsJLy90eCBhY3Rpdml0eSBoYXMgb2NjdXJyZWQKKwl1OAkJCWJvTWFjUHNWYWxpZDsJCS8vUG93ZXIgc2F2ZSBtb2RlIG9idGFpbmVkIGZyb20gSC9XIGlzIHZhbGlkIG9yIG5vdAorCisJLy8vLyBSYXRlCisJdTgJCQlUeFJhdGVNb2RlOwkJCQkvLyBJbml0aWFsLCBpbnB1dCBmcm9tIFJlZ2lzdHJ5LCBtYXkgYmUgdXBkYXRlZCBieSBHVUkKKwkJCQkJCQkJCQkJLy9UeCBSYXRlIE1vZGU6IGF1dG8oRFRPIG9uKSwgbWF4LCAxTSwgMk0sIC4uCisJdTgJCQlDdXJyZW50VHhSYXRlOwkJCS8vIFRoZSBjdXJyZW50IFR4IHJhdGUKKwl1OAkJCUN1cnJlbnRUeFJhdGVGb3JNbmc7CS8vIFRoZSBjdXJyZW50IFR4IHJhdGUgZm9yIG1hbmFnZW1lbnQgZnJhbWVzCisJCQkJCQkJCQkJLy8gSXQgd2lsbCBiZSBkZWNpZGVkIGJlZm9yZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgorCXU4CQkJQ3VycmVudFR4RmFsbGJhY2tSYXRlOworCisJLy9mb3IgUmF0ZSBoYW5kbGVyCisJdTgJCQlCUmF0ZVNldFszMl07CQkJLy9iYXNpYyByYXRlIHNldAorCXU4CQkJU1JhdGVTZXRbMzJdOwkJCS8vc3VwcG9ydCByYXRlIHNldAorCisJdTgJCQlOdW1PZkJSYXRlOworCXU4CQkJTnVtT2ZTUmF0ZTsKKwl1OAkJCU51bU9mRHNzc1JhdGVJblNSYXRlOwkvL251bWJlciBvZiBEU1NTIHJhdGVzIGluIHN1cHBvcnRlZCByYXRlIHNldAorCXU4CQkJcmVzZXJ2ZWQxOworCisJdTMyCQkJZHdCYXNpY1JhdGVCaXRtYXA7CQkvL2JpdCBtYXAgb2YgYmFzaWMgcmF0ZXMKKwl1MzIJCQlkd1N1cHBvcnRSYXRlQml0bWFwOwkvL2JpdCBtYXAgb2YgYWxsIHN1cHBvcnQgcmF0ZXMgaW5jbHVkaW5nCisJCQkJCQkJCQkJLy9iYXNpYyBhbmQgb3BlcmF0aW9uYWwgcmF0ZXMKKworCS8vLy9Gb3IgU01FL01MTUUgaGFuZGxlcgorCXUxNgkJCXdPbGRTVEFpbmRleDsJCQkvLyB2YWxpZCB3aGVuIGJvSGFuZG92ZXI9VFJVRSwgc3RvcmUgb2xkIGNvbm5lY3RlZCBTVEEgaW5kZXgKKwl1MTYJCQl3Q29ubmVjdGVkU1RBaW5kZXg7CQkvLyBJbmRleCBvZiBwZWVybHkgY29ubmVjdGVkIEFQIG9yIElCU1MgaW4KKwkJCQkJCQkJCQkvLyB0aGUgZGVzY3JpcHRpb25zZXQuCisgICAgdTE2CQkJQXNzb2NpYXRpb25fSUQ7ICAgICAJLy8gVGhlIEFzc29jaWF0aW9uIElEIGluIHRoZSAoUmUpQXNzb2NpYXRpb24KKyAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgIAkvLyBSZXNwb25zZSBmcmFtZS4KKyAgICB1MTYJCQlMaXN0ZW5JbnRlcnZhbDsgICAgIAkvLyBUaGUgbGlzdGVuIGludGVydmFsIHdoZW4gU01FIGludm9raW5nIE1MTUVfCisgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJLy8gKFJlKUFzc29jaWF0ZV9SZXF1ZXN0KCkuCisKKwlSYWRpb09mZgkJUmFkaW9PZmZTdGF0dXM7CisJdTgJCQlSZXNlcnZlZDBbMl07CisKKwl1OAkJCWJvTXNSYWRpb09mZjsJCQkvLyBOZGlzIGRlbWFuZHMgdG8gYmUgdHJ1ZSB3aGVuIHNldCBEaXNhc3NvYy4gT0lEIGFuZCBiZSBmYWxzZSB3aGVuIHNldCBTU0lEIE9JRC4KKwl1OAkJCWJvQW50ZW5uYURpdmVyc2l0eTsJCS8vVFJVRS9PTiBvciBGQUxTRS9PRkYKKwl1OAkJCWJBbnRlbm5hTm87CQkJCS8vd2hpY2ggYW50ZW5uYQorCXU4CQkJYkNvbm5lY3RGbGFnOwkJCS8vdGhlIGNvbm5lY3Qgc3RhdHVzIGZsYWcgZm9yIHJvYW1pbmcgdGFzaworCisJdTgJCQlSb2FtU3RhdHVzOworCXU4CQkJcmVzZXJ2ZWQ3WzNdOworCisJQ2hhbkluZm8JQ3VycmVudENoYW47CQkJLy9DdXJyZW50IGNoYW5uZWwgbm8uIGFuZCBjaGFubmVsIGJhbmQuIEl0IG1heSBiZSBjaGFuZ2VkIGJ5IHNjYW5uaW5nLgorCXU4CQkJYm9IYW5kb3ZlcjsJCQkJLy8gUm9hbWluZywgSG5hZG92ZXIgdG8gb3RoZXIgQVAuCisJdTgJCQlib0NDQWJ1c3k7CisKKwl1MTYJCQlDV01heDsJCQkJCS8vIEl0IG1heSBub3QgYmUgdGhlIHJlYWwgdmFsdWUgdGhhdCBIL1cgdXNlZAorCXU4CQkJQ1dNaW47CQkJCQkvLyAyNTU6IHNldCBhY2NvcmRpbmcgdG8gODAyLjExIHNwZWMuCisJdTgJCQlyZXNlcnZlZDI7CisKKwkvLzExRzoKKwl1OAkJCWJNYWNPcGVyYXRpb25Nb2RlOwkJLy8gb3BlcmF0aW9uIGluIDgwMi4xMWIgb3IgODAyLjExZworCXU4CQkJYlNsb3RUaW1lTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYlByZWFtYmxlTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYm9Ob25FUlBwcmVzZW50OworCisJdTgJCQlib1Byb3RlY3RNZWNoYW5pc207CS8vIEgvVyB3aWxsIHRha2UgdGhlIG5lY2Vzc2FyeSBhY3Rpb24gYmFzZWQgb24gdGhpcyB2YXJpYWJsZQorCXU4CQkJYm9TaG9ydFByZWFtYmxlOwkvLyBIL1cgd2lsbCB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uIGJhc2VkIG9uIHRoaXMgdmFyaWFibGUKKwl1OAkJCWJvU2hvcnRTbG90VGltZTsJLy8gSC9XIHdpbGwgdGFrZSB0aGUgbmVjZXNzYXJ5IGFjdGlvbiBiYXNlZCBvbiB0aGlzIHZhcmlhYmxlCisJdTgJCQlyZXNlcnZlZF8zOworCisJdTMyICAgICAgIAlSU05fSUVfQml0bWFwOwkJLy9hZGRlZCBieSBXUworCXUzMiAgICAgIAkJUlNOX09VSV9UeXBlOwkJLy9hZGRlZCBieSBXUworCisJLy9Gb3IgdGhlIEJTU0lECisJdTgJCQlId0Jzc2lkW01BQ19BRERSX0xFTkdUSCArIDJdOworCXUzMgkJCUh3QnNzaWRWYWxpZDsKKworCS8vRm9yIHNjYW4gbGlzdAorCXU4CQkJQnNzTGlzdENvdW50OwkJCQkJCQkvL1RvdGFsIGNvdW50IG9mIHZhbGlkIGRlc2NyaXB0b3IgaW5kZXhlcworCXU4CQkJYm9SZWNlaXZlVW5jb3JyZWN0SW5mbzsJLy9pbXBvcnRhbnQgc2V0dGluZ3MgaW4gYmVhY29uL3Byb2JlIHJlc3AuIGhhdmUgYmVlbiBjaGFuZ2VkCisJdTgJCQlOb09mSm9pbmVySW5JYnNzOworCXU4CQkJcmVzZXJ2ZWRfNDsKKworCXU4CQkJQnNzTGlzdEluZGV4WyAoTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UKzMpICYgfjB4MDMgXTsJLy9TdG9yZSB0aGUgdmFsaWQgZGVzY3JpcHRvciBpbmRleGVzIG9idGFpbmVkIGZyb20gc2Nhbm5pbmdzCisJdTgJCQlKb2luZXJJbklic3NbIChNQVhfQlNTX0RFU0NSSVBUX0VMRU1FTlQrMykgJiB+MHgwMyBdOwkvL3NhdmUgdGhlIEJzc0Rlc2NyaXB0b3IgaW5kZXggaW4gdGhpcworCQkJCQkJCQkJCQkJCQkvL0lCU1MuIFRoZSBpbmRleCAwIGlzIGxvY2FsIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkJCQkJLy8ocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS4KKwkJCQkJCQkJCQkJCQkJLy9JZiBDT05ORUNURUQgOiBOb09mSm9pbmVySW5JYnNzID49MgorCQkJCQkJCQkJCQkJCQkvLwkJZWxzZSAgIDogTm9PZkpvaW5lckluSWJzcyA8PTEKKworCS8vLy8gR2VuZXJhbCBTdGF0aXN0aWNzLCBjb3VudCBhdCBSeF9oYW5kbGVyIG9yIFR4X2NhbGxiYWNrIGludGVycnVwdCBoYW5kbGVyCisgICAgdTY0IAlHU19YTUlUX09LOwkJCQkvLyBHb29kIEZyYW1lcyBUcmFuc21pdHRlZAorICAgIHU2NCAJR1NfUkNWX09LOwkJCQkvLyBHb29kIEZyYW1lcyBSZWNlaXZlZAorCXUzMgkJR1NfUkNWX0VSUk9SOwkJCS8vIEZyYW1lcyByZWNlaXZlZCB3aXRoIGNyYyBlcnJvcgorCXUzMgkJR1NfWE1JVF9FUlJPUjsJCQkvLyBCYWQgRnJhbWVzIFRyYW5zbWl0dGVkCisJdTMyCQlHU19SQ1ZfTk9fQlVGRkVSOwkJLy8gUmVjZWl2ZSBCdWZmZXIgdW5kZXJydW4KKwl1MzIJCUdTX1hNSVRfT05FX0NPTExJU0lPTjsJLy8gb25lIGNvbGxpc2lvbgorCXUzMgkJR1NfWE1JVF9NT1JFX0NPTExJU0lPTlM7Ly8gbW9yZSBjb2xsaXNpb25zCisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBTdGF0aXN0aWNzIChubyBtYXR0ZXIgd2hldGhlciBpdCBoYWQgZG9uZSBzdWNjZXNzZnVsbHkpIC13a2NoZW4KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICB1MzIJCSAgIAlfTnVtUnhNU0RVOworICAgIHUzMgkgICAJCV9OdW1UeE1TRFU7CisgICAgdTMyCSAgIAkJX2RvdDExV0VQRXhjbHVkZWRDb3VudDsKKyAgICB1MzIJICAgCQlfZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CisgICAgdTMyCSAgIAkJX2RvdDExRnJhbWVEdXBsaWNhdGVDb3VudDsKKworCUNoYW5JbmZvCUlic3NDaGFuU2V0dGluZzsJLy8gMkIuIFN0YXJ0IElCU1MgQ2hhbm5lbCBzZXR0aW5nIGJ5IHJlZ2lzdHJ5IG9yIFdXVS4KKwl1OAkJcmVzZXJ2ZWRfNVsyXTsJCS8vSXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIGNvbnNpZGVyaW5nIFJGIHR5cGUsCisJCQkJCQkJCQkvL3JlZ2lvbiBhbmQgbW9kdWxhdGlvbiB0eXBlLgorCisJQ0hBTl9MSVNUCXNTdXBwb3J0Q2hhbkxpc3Q7CS8vIDg2Qi4gSXQgd2lsbCBiZSBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gUkYgdHlwZSBhbmQgcmVnaW9uCisJdTgJCXJlc2VydmVkXzZbMl07CQkvL3R3byB2YXJpYWJsZXMgYXJlIGZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiBhZGRlZCBieSB3cyAwMi8wMi8wNAorCisgICAgdTMyCSAgICAgIGJXZXBLZXlFcnJvcjsKKyAgICB1MzIgICAgICAgICBiVG9TZWxmUGFja2V0UmVjZWl2ZWQ7CisgICAgdTMyICAgICAgICAgV2VwS2V5RGV0ZWN0VGltZXJDb3VudDsKKworCUV2ZW50X0xvZwlFdmVudExvZzsKKworCXUxNgkJU2lnbmFsTG9zdFRoOworCXUxNgkJU2lnbmFsUm9hbVRoOworCisJLy8gMjAwNjExMDggV1BTIElFIEFwcGVuZAorCXU4CQlJRV9BcHBlbmRfZGF0YVtNQVhfSUVfQVBQRU5EX1NJWkVdOworCXUxNgkJSUVfQXBwZW5kX3NpemU7CisJdTE2CQlyZXNlcnZlZF83OworCit9IFdCX0xPQ0FMREVTQ1JJUFQsICpQV0JfTE9DQUxERVNDUklQVDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzFkMmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApAQCAtMCwwICsxLDY3MCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBNQUNfU3RydWN0dXJlcy5oCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgU1ctTUFDLgorLy8KKy8vIFJldmlzaW9uIEhpc3RveQorLy89PT09PT09PT09PT09PT09PQorLy8gMC4xICAgICAgMjAwMiAgICAgICAgVU4wMAorLy8gMC4yICAgICAgMjAwMjEwMDQgICAgUEQ0MyBDQ0xpdTYKKy8vICAgICAgICAgIDIwMDIxMDE4ICAgIFBENDMgQ0NMaXU2CisvLyAgICAgICAgICAgICAgICAgICAgICBBZGQgZW51bV9UeFJhdGUgdHlwZQorLy8gICAgICAgICAgICAgICAgICAgICAgTW9kaWZ5IGVudW1fU1RBU3RhdGUgdHlwZQorLy8gMC4zICAgICAgMjAwMjEwMjMgICAgUEUyMyBDWUxpdSB1cGRhdGUgTUFDIHNlc3Npb24gc3RydWN0CisvLyAgICAgICAgICAyMDAyMTEwOAorLy8gICAgICAgICAgMjAwMjExMjIgICAgUEQ0MyBBdXN0aW4KKy8vICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZWQgc29tZSB1bnVzZWQuCisvLyAgICAgICAgICAyMDAyMTEyOSAgICBQRDQzIEF1c3RpbgorLy8JCQkyMDAzMDYxNwlpbmNyZWFzZSB0aGUgODAyLjExZyBkZWZpbml0aW9uCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworI2lmbmRlZiBfTUFDX1N0cnVjdHVyZXNfSF8KKyNkZWZpbmUgX01BQ19TdHJ1Y3R1cmVzX0hfCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNvbWUgbWlzY2VsbGFuZW91cyBkZWZpbml0aW9ucworLy8tLS0tLQorI2RlZmluZSBNQVhfQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBNQUNfQUREUl9MRU5HVEggICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1BWF9XRVBfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAgIDE2ICAvLyAxMjggYml0cworI2RlZmluZQlNQVhfODAyXzExX0ZSQUdNRU5UX05VTUJFUgkJMTAgLy8gQnkgc3BlYworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyA4MDIuMTEgRnJhbWUgZGVmaW5lCisvLy0tLS0tCisjZGVmaW5lIE1BU0tfUFJPVE9DT0xfVkVSU0lPTl9UWVBFCTB4MEYKKyNkZWZpbmUgTUFTS19GUkFHTUVOVF9OVU1CRVIJCTB4MDAwRgorI2RlZmluZSBTRVFVRU5DRV9OVU1CRVJfU0hJRlQJCTQKKyNkZWZpbmUgRElGRkVSXzExX1RPXzMJCQkJMTgKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX0RVUkFUSU9OX09GRlNFVAkJMgorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8xMV9UWVBFX09GRlNFVAkJCTMwIC8vVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUvLworI2RlZmluZSBET1RfMTFfREFUQV9PRkZTRVQgICAgICAgICAgMjQKKyNkZWZpbmUgRE9UXzExX0RBX09GRlNFVAkJCTQKKyNkZWZpbmUgRE9UXzNfVFlQRV9BUlAJCQkJMHg4MEYzCisjZGVmaW5lIERPVF8zX1RZUEVfSVBYCQkJCTB4ODEzNworI2RlZmluZSBET1RfM19UWVBFX09GRlNFVAkJCTEyCisKKworI2RlZmluZSBFVEhFUk5FVF9IRUFERVJfU0laRQkJCTE0CisjZGVmaW5lIE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRQkJMTUxNAorCisKKy8vLS0tLS0gIG1hbmFnZW1lbnQgOiBUeXBlIG9mIEJpdHMgKDIsIDMpIGFuZCBTdWJ0eXBlIG9mIEJpdHMgKDQsIDUsIDYsIDcpCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BU1NPQ19SRVFVRVNUICAgIDB4MDAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FTU09DX1JFU1BPTlNFICAgMHgxMAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUkVBU1NPQ19SRVFVRVNUICAweDIwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9SRUFTU09DX1JFU1BPTlNFIDB4MzAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFUVVFU1QgICAgMHg0MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUFJPQkVfUkVTUE9OU0UgICAweDUwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9CRUFDT04gICAgICAgICAgIDB4ODAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FUSU0gICAgICAgICAgICAgMHg5MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfRElTQVNTT0NJQVRJT04gICAweEEwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BVVRIRU5USUNBVElPTiAgIDB4QjAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0RFQVVUSEVOVElDQVRJT04gMHhDMAorCisvLy0tLS0tICBjb250cm9sIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX1BTUE9MTCAgICAgICAgICAweEE0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfUlRTICAgICAgICAgICAgIDB4QjQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DVFMgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX0FDSyAgICAgICAgICAgICAweEQ0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfQ0ZFTkQgICAgICAgICAgIDB4RTQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DRkVORF9DRkFDSyAgICAgMHhGNAorCisvLy0tLS0tICBkYXRhIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0sgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRlBPTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGQUNLX0NGUE9MTCAgICAgICAweDM4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfTlVMTCAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRkFDS19OVUxMICAgICAgICAgMHg1OAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGUE9MTF9OVUxMICAgICAgICAweDY4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMX05VTEwgIDB4NzgKKworLy8tLS0tLSAgRnJhbWUgVHlwZSBvZiBCaXRzICgyLCAzKQorI2RlZmluZSBNQUNfVFlQRV9NQU5BR0VNRU5UICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUFDX1RZUEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorCisvLy0tLS0tIGRlZmluaXRpb25zIGZvciBNYW5hZ2VtZW50IEZyYW1lIEVsZW1lbnQgSUQgKDEgQllURSkKKyNkZWZpbmUgRUxFTUVOVF9JRF9TU0lEICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFTEVNRU5UX0lEX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAxCisjZGVmaW5lIEVMRU1FTlRfSURfRkhfUEFSQU1FVEVSX1NFVCAgICAgICAgIDIKKyNkZWZpbmUgRUxFTUVOVF9JRF9EU19QQVJBTUVURVJfU0VUICAgICAgICAgMworI2RlZmluZSBFTEVNRU5UX0lEX0NGX1BBUkFNRVRFUl9TRVQgICAgICAgICA0CisjZGVmaW5lIEVMRU1FTlRfSURfVElNICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRUxFTUVOVF9JRF9JQlNTX1BBUkFNRVRFUl9TRVQgICAgICAgNgorLy8gN34xNSByZXNlcnZlcmQKKyNkZWZpbmUgRUxFTUVOVF9JRF9DSEFMTEVOR0VfVEVYVCAgICAgICAgICAgMTYKKy8vIDE3fjMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24KKy8vIDMyfjI1NSByZXNlcnZlZAorLy8tLSAgMTFHICAtLQorI2RlZmluZSBFTEVNRU5UX0lEX0VSUF9JTkZPUk1BVElPTgkJCTQyCisjZGVmaW5lIEVMRU1FTlRfSURfRVhURU5ERURfU1VQUE9SVEVEX1JBVEVTIDUwCisKKy8vLS0gIFdQQSAgLS0KKworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEJCQkJCTIyMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEyCQkJCSAgICA0OAorI2VuZGlmIC8vZW5kaWYgV1BBMgorCisjZGVmaW5lIFdMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVCAgICAoKHUxNikgNikKKyNkZWZpbmUgV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlQgICgodTE2KSAyKQorCisjaWZkZWYgV0JfTElOVVgKKyNkZWZpbmUgVU5BTElHTkVECisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fUG93ZXJNYW5hZ2VtZW50TW9kZQoreworICAgIEFDVElWRSA9IDAsCisgICAgUE9XRVJfU0FWRQorfSBXQl9QTV9Nb2RlLCAqUFdCX1BNX01PREU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIFJlYXNvbiBDb2RlIChUYWJsZSAxOCk6IGluZGljYXRlIHRoZSByZWFzb24gb2YgRGlzQXNzb2MsIERlQXV0aGVuCisvLyAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIFJFQVNPTl9SRUFTRVJFRCAgICAgICAgICAgICAwCisjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRElFRCAgICAgICAgICAxCisjZGVmaW5lIFJFQVNPTl9QUkVBVVRIX0lOVkFMSUQgICAgICAyCisjZGVmaW5lIERFQVVUSF9SRUFTT05fTEVGVF9CU1MgICAgICAzCisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfSU5BQ1RJVkUgICA0CisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfQlVTWSAgICAgICA1CisjZGVmaW5lIFJFQVNPTl9DTEFTUzJfRlJBTUVfRlJPTV9OT05BVVRIX1NUQSAgICA2CisjZGVmaW5lIFJFQVNPTl9DTEFTUzNfRlJBTUVfRlJPTV9OT05BU1NPX1NUQSAgICA3CisjZGVmaW5lIERJU0FTU19SRUFTT05fTEVGVF9CU1MgICAgICA4CisjZGVmaW5lIFJFQVNPTl9OT1RfQVVUSF9ZRVQgICAgICAgICA5CisvLzgwMi4xMWkgZGVmaW5lCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFCQkJCQkJMTMKKyNkZWZpbmUgUkVBU09OX01JQ19FUlJPUgkJCQkJCTE0CisjZGVmaW5lIFJFQVNPTl80V0FZX0hBTkRTSEFLRV9USU1FT1VUCQkJMTUKKyNkZWZpbmUgUkVBU09OX0dST1VQS0VZX1VQREFURV9USU1FT1VUCQkJMTYKKyNkZWZpbmUgUkVBU09OX0lFX0RJRkZfNFdBWV9BU1NPQwkJCQkxNworI2RlZmluZSBSRUFTT05fSU5WQUxJRF9NVUxUSUNBU1RfQ0lQSEVSCQkJMTgKKyNkZWZpbmUgUkVBU09OX0lOVkFMSURfVU5JQ0FTVF9DSVBIRVIJCQkxOQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9BS01QCQkJCQkJMjAKKyNkZWZpbmUgUkVBU09OX1VOU1VQUE9SVEVEX1JTTklFX1ZFUlNJT04JCTIxCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTklFX0NBUEFCSUxJVFkJCQkyMgorI2RlZmluZSBSRUFTT05fODAyXzFYX0FVVEhfRkFJTAkJCQkJMjMKKyNkZWZpbmUJUkVBU09OX0NJUEhFUl9SRUpFQ1RfUEVSX1NFQ19QT0xJQ1kJCTE0CisKKy8qCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBlbnVtX01NUERVUmVzdWx0Q29kZSAtLQorLy8gICBTdGF0dXMgY29kZSAoMiBPY3RzKSBpbiB0aGUgTU1QRFUncyBmcmFtZSBib2R5LiBUYWJsZS4xOQorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2VudW0gZW51bV9NTVBEVVJlc3VsdENvZGUKK3sKKy8vICAgIFNVQ0NFU1MgICA9IDAsICAgICAgLy8gUmVkZWZpbmVkCisgICAgVU5TUEVDSUZJRURfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisKKyAgICAvLyAyIC0gOSBSZXNlcnZlZAorCisgICAgTk9UX1NVUFBST1RfQ0FQQUJJTElUSUVTICAgICAgICAgICAgICAgICAgICA9IDEwLAorCisgICAgLy9SRUFTU09DSUFUSU9OX0RFTklFRAorICAgIC8vCisgICAgUkVBU1NPQ19ERU5JRURfVU5BQkxFX0NGTV9BU1NPQ19FWElTVCAgICAgICA9IDExLAorCisgICAgLy9BU1NPQ0lBVElPTl9ERU5JRURfTk9UX0lOX1NUQU5EQVJECisgICAgLy8KKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9JTl9TVEFOREFSRCAgICAgICAgID0gMTIsCisgICAgUEVFUl9OT1RfU1VQUE9SVF9BVVRIX0FMR09SSVRITSAgICAgICAgICAgICA9IDEzLAorICAgIEFVVEhfU0VRTlVNX09VVF9PRl9FWFBFQ1QgICAgICAgICAgICAgICAgICAgPSAxNCwKKyAgICBBVVRIX1JFSkVDVF9SRUFTT05fQ0hBTExFTkdFX0ZBSUwgICAgICAgICAgID0gMTUsCisgICAgQVVUSF9SRUpFQ1RfUkVBU09OX1dBSVRfVElNRU9VVCAgICAgICAgICAgICA9IDE2LAorICAgIEFTU09DX0RFTklFRF9SRUFTT05fQVBfQlVTWSAgICAgICAgICAgICAgICAgPSAxNywKKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9TVVBQT1JUX0JBU0lDX1JBVEUgID0gMTgKK30gV0JfTU1QRFVSRVNVTFRDT0RFLCAqUFdCX01NUERVUkVTVUxUQ09ERTsKKyovCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIGVudW1fVHhSYXRlIC0tCisvLyAgIERlZmluZSB0aGUgdHJhbnNtaXNzaW9uIGNvbnN0YW50cyBiYXNlZCBvbiBXODlDMzIgTUFDCisvLyAgIHRhcmdldCBzcGVjaWZpY2F0aW9uLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fVHhSYXRlCit7CisgICAgVFhSQVRFXzFNICAgICAgICAgICAgICAgPSAwLAorICAgIFRYUkFURV8yTUxPTkcgICAgICAgICAgID0gMiwKKyAgICBUWFJBVEVfMk1TSE9SVCAgICAgICAgICA9IDMsCisgICAgVFhSQVRFXzU1TUxPTkcgICAgICAgICAgPSA0LAorICAgIFRYUkFURV81NU1TSE9SVCAgICAgICAgID0gNSwKKyAgICBUWFJBVEVfMTFNTE9ORyAgICAgICAgICA9IDYsCisgICAgVFhSQVRFXzExTVNIT1JUICAgICAgICAgPSA3LAorICAgIFRYUkFURV9BVVRPICAgICAgICAgICAgID0gMjU1ICAgICAgICAgICAvLyBQRDQzIDIwMDIxMTA4Cit9IFdCX1RYUkFURSwgKlBXQl9UWFJBVEU7CisKKworI2RlZmluZQlSQVRFX0JJVE1BUF8xTQkJCQkxCisjZGVmaW5lCVJBVEVfQklUTUFQXzJNCQkJCTIKKyNkZWZpbmUJUkFURV9CSVRNQVBfNWRvdDVNCQkJNQorI2RlZmluZSBSQVRFX0JJVE1BUF82TQkJCQk2CisjZGVmaW5lIFJBVEVfQklUTUFQXzlNCQkJCTkKKyNkZWZpbmUgUkFURV9CSVRNQVBfMTFNCQkJCTExCisjZGVmaW5lIFJBVEVfQklUTUFQXzEyTQkJCQkxMgorI2RlZmluZSBSQVRFX0JJVE1BUF8xOE0JCQkJMTgKKyNkZWZpbmUgUkFURV9CSVRNQVBfMjJNCQkJCTIyCisjZGVmaW5lIFJBVEVfQklUTUFQXzI0TQkJCQkyNAorI2RlZmluZSBSQVRFX0JJVE1BUF8zM00JCQkJMTcKKyNkZWZpbmUgUkFURV9CSVRNQVBfMzZNCQkJCTE5CisjZGVmaW5lIFJBVEVfQklUTUFQXzQ4TQkJCQkyNQorI2RlZmluZSBSQVRFX0JJVE1BUF81NE0JCQkJMjgKKworI2RlZmluZSBSQVRFX0FVVE8JCQkJCTAKKyNkZWZpbmUgUkFURV8xTQkJCQkJCTIKKyNkZWZpbmUgUkFURV8yTQkJCQkJCTQKKyNkZWZpbmUgUkFURV81ZG90NU0JCQkJCTExCisjZGVmaW5lIFJBVEVfNk0JCQkJCQkxMgorI2RlZmluZSBSQVRFXzlNCQkJCQkJMTgKKyNkZWZpbmUgUkFURV8xMU0JCQkJCTIyCisjZGVmaW5lIFJBVEVfMTJNCQkJCQkyNAorI2RlZmluZSBSQVRFXzE4TQkJCQkJMzYKKyNkZWZpbmUgUkFURV8yMk0JCQkJCTQ0CisjZGVmaW5lIFJBVEVfMjRNCQkJCQk0OAorI2RlZmluZSBSQVRFXzMzTQkJCQkJNjYKKyNkZWZpbmUgUkFURV8zNk0JCQkJCTcyCisjZGVmaW5lIFJBVEVfNDhNCQkJCQk5NgorI2RlZmluZSBSQVRFXzU0TQkJCQkJMTA4CisjZGVmaW5lIFJBVEVfTUFYCQkJCQkyNTUKKworLy9DQVBBQklMSVRZCisjZGVmaW5lIENBUEFCSUxJVFlfRVNTX0JJVAkJCQkweDAwMDEKKyNkZWZpbmUgQ0FQQUJJTElUWV9JQlNTX0JJVAkJCQkweDAwMDIKKyNkZWZpbmUgQ0FQQUJJTElUWV9DRl9QT0xMX0JJVAkJCTB4MDAwNAorI2RlZmluZSBDQVBBQklMSVRZX0NGX1BPTExfUkVRX0JJVAkJMHgwMDA4CisjZGVmaW5lIENBUEFCSUxJVFlfUFJJVkFDWV9CSVQJCQkweDAwMTAKKyNkZWZpbmUgQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRV9CSVQJMHgwMDIwCisjZGVmaW5lIENBUEFCSUxJVFlfUEJDQ19CSVQJCQkJMHgwMDQwCisjZGVmaW5lIENBUEFCSUxJVFlfQ0hBTl9BR0lMSVRZX0JJVAkJMHgwMDgwCisjZGVmaW5lIENBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FX0JJVAkweDA0MDAKKyNkZWZpbmUgQ0FQQUJJTElUWV9EU1NTX09GRE1fQklUCQkweDIwMDAKKworCitzdHJ1Y3QgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisgIHVuaW9uCisgIHsKKyAgCXUxNiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd1ZhbHVlOworICAgICNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICAvLy0tICAxMUcgIC0tCisJdTgJUmVzZXJ2ZWQzIDogMjsKKwl1OAlEU1NTX09GRE0gOiAxOworCXU4CVJlc2VydmVkMiA6IDI7CisJdTgJU2hvcnRfU2xvdF9UaW1lIDogMTsKKwl1OCAgICBSZXNlcnZlZDEgOiAyOworCXU4ICAgIENoYW5uZWxfQWdpbGl0eSA6IDE7CisJdTggICAgUEJDQyA6IDE7CisJdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisJdTggICAgQ0ZfUHJpdmFjeSA6IDE7CisJdTggICAgQ0ZfUG9sbF9SZXF1ZXN0IDogMTsKKwl1OCAgICBDRl9Qb2xsYWJsZSA6IDE7CisJdTggICAgSUJTUyA6IDE7CisJdTggICAgRVNTIDogMTsKKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBDYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICB1OCAgICBFU1MgOiAxOworICAgICAgICB1OCAgICBJQlNTIDogMTsKKyAgICAgICAgdTggICAgQ0ZfUG9sbGFibGUgOiAxOworICAgICAgICB1OCAgICBDRl9Qb2xsX1JlcXVlc3QgOiAxOworICAgICAgICB1OCAgICBDRl9Qcml2YWN5IDogMTsKKyAgICAgICAgdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisgICAgICAgIHU4ICAgIFBCQ0MgOiAxOworICAgICAgICB1OCAgICBDaGFubmVsX0FnaWxpdHkgOiAxOworICAgICAgICB1OCAgICBSZXNlcnZlZDEgOiAyOworCQkvLy0tICAxMUcgIC0tCisJCXU4CVNob3J0X1Nsb3RfVGltZSA6IDE7CisJCXU4CVJlc2VydmVkMiA6IDI7CisJCXU4CURTU1NfT0ZETSA6IDE7CisJCXU4CVJlc2VydmVkMyA6IDI7CisgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgQ2FwYWJpbGl0eTsKKyAgICAjZW5kaWYKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgRkhfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgRHdlbGxfVGltZVsyXTsKKyAgICB1OCAgICBIb3BfU2V0OworICAgIHU4ICAgIEhvcF9QYXR0ZXJuOworICAgIHU4ICAgIEhvcF9JbmRleDsKK307CisKK3N0cnVjdCBEU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBDdXJyZW50X0NoYW5uZWw7Cit9OworCitzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTdXBwb3J0ZWRSYXRlc1s4XTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBTU0lEX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTU0lEWzMyXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworCitzdHJ1Y3QgQ0ZfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQ0ZQX0NvdW50OworICAgIHU4ICAgIENGUF9QZXJpb2Q7CisgICAgdTggICAgQ0ZQX01heER1cmF0aW9uWzJdOyAgICAgLy8gaW4gVGltZSBVbml0cworICAgIHU4ICAgIENGUF9EdXJSZW1haW5pbmdbMl07ICAgIC8vIGluIHRpbWUgdW5pdHMKK307CisKK3N0cnVjdCBUSU1fRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIERUSU1fQ291bnQ7CisgICAgdTggICAgRFRJTV9QZXJpb2Q7CisgICAgdTggICAgQml0bWFwX0NvbnRyb2w7CisgICAgdTggICAgUGFydGlhbF9WaXJ0dWFsX0JpdG1hcFsyNTFdOworfTsKKworc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQVRJTV9XaW5kb3dbMl07Cit9OworCitzdHJ1Y3QgQ2hhbGxlbmdlX1RleHRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIENoYWxsZW5nZV9UZXh0WzI1M107Cit9OworCitzdHJ1Y3QgUEhZX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworLy8gIGludCAgICAgYVNsb3RUaW1lOworLy8gIGludCAgICAgYVNpZnNUaW1lOworICAgIHMzMiAgICAgYUNDQVRpbWU7CisgICAgczMyICAgICBhUnhUeFR1cm5hcm91bmRUaW1lOworICAgIHMzMiAgICAgYVR4UExDUERlbGF5OworICAgIHMzMiAgICAgUnhQTENQRGVsYXk7CisgICAgczMyICAgICBhUnhUeFN3aXRjaFRpbWU7CisgICAgczMyICAgICBhVHhSYW1wT250aW1lOworICAgIHMzMiAgICAgYVR4UmFtcE9mZlRpbWU7CisgICAgczMyICAgICBhVHhSRkRlbGF5OworICAgIHMzMiAgICAgYVJ4UkZEZWxheTsKKyAgICBzMzIgICAgIGFBaXJQcm9wYWdhdGlvblRpbWU7CisgICAgczMyICAgICBhTUFDUHJvY2Vzc2luZ0RlbGF5OworICAgIHMzMiAgICAgYVByZWFtYmxlTGVuZ3RoOworICAgIHMzMiAgICAgYVBMQ1BIZWFkZXJMZW5ndGg7CisgICAgczMyICAgICBhTVBEVUR1cmF0aW9uRmFjdG9yOworICAgIHMzMiAgICAgYU1QRFVNYXhMZW5ndGg7CisvLyAgaW50ICAgICBhQ1dtaW47CisvLyAgaW50ICAgICBhQ1dtYXg7Cit9OworCisvLy0tICAxMUcgIC0tCitzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICAjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgCXU4CVJlc2VydmVkOjU7ICAgLy8yMDA2MDkyNiBhZGQgYnkgYW5zb24KKyAgICAgICB1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVVzZV9Qcm90ZWN0aW9uOjE7CisgICAgICAgdTgJTm9uRVJQX1ByZXNlbnQ6MTsKKyAgICAjZWxzZQorCXU4CU5vbkVSUF9QcmVzZW50OjE7CisJdTgJVXNlX1Byb3RlY3Rpb246MTsKKwl1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVJlc2VydmVkOjU7CisgICAgI2VuZGlmCit9OworCitzdHJ1Y3QgRXh0ZW5kZWRfU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICB1OAlFeHRlbmRlZFN1cHBvcnRlZFJhdGVzWzI1NV07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvL1dQQSg4MDIuMTFpIGRyYWZ0IDMuMCkKKyNkZWZpbmUgVkVSU0lPTl9XUEEJCQkJMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBWRVJTSU9OX1dQQTIgICAgICAgICAgICAxCisjZW5kaWYgLy9lbmQgZGVmICBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQQkJCQkJMHgwMEYyNTAwMAkvL1dQQTIuMCBPVUk9MDA6NTA6RjIsIHRoZSBNU0IgaXMgcmVzZXJ2ZWQgZm9yIHN1aXRlIHR5cGUKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAkvLyBmb3Igd3BhMiBjaGFuZ2UgdG8gMHgwMEFDT0YwNCBieSBXcyAyNi8wNC8wNAorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBPVUlfV1BBX0FERElUSU9OQUwJCTB4MDEKKyNkZWZpbmUgV0xBTl9NSU5fUlNOX1dQQV9MRU5HVEggICAgICAgICAgICAgICAgIDYgLy9hZGRlZCBieSB3cyAwOS8xMC8wNAorI2lmZGVmIF9XUEEyXworI2RlZmluZSBXTEFOX01JTl9SU05fV1BBMl9MRU5HVEggICAgICAgICAgICAgICAgMiAvLyBGaXggdG8gMiAwOS8xNC8wNQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBvdWlfd3BhICAgICAgICAgICAgICAgICAgKHUzMikoT1VJX1dQQXxPVUlfV1BBX0FERElUSU9OQUwpCisKKyNkZWZpbmUgV1BBX09VSV9CSUcgICAgKCh1MzIpIDB4MDFGMjUwMDApLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorI2RlZmluZSBXUEFfT1VJX0xJVFRMRSAgKCh1MzIpIDB4MDFGMjUwMDEpLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorCisjZGVmaW5lIFdQQV9XUFNfT1VJCQkJCWNwdV90b19sZTMyKDB4MDRGMjUwMDApIC8vIDIwMDYxMTA4IEZvciBXUFMuIEl0J3MgbGl0dGxlIGVuZGlhbi4gQmlnIGVuZGlhbiBpcyAweDAwNTBGMjA0CisKKy8vLS0tLS1XUEEyLS0tLS0KKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV1BBMl9PVUlfQklHICAgICgodTMyKTB4MDFBQzBGMDApCisjZGVmaW5lIFdQQTJfT1VJX0xJVFRMRSAoKHUzMikweDAxQUMwRjAxKQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworLy9BdXRoZW50aWNhdGlvbiBzdWl0ZQorI2RlZmluZSBPVUlfQVVUSF9XUEFfTk9ORSAgICAgICAgICAgMHgwMCAvL2ZvciBXUEFfTk9ORQorI2RlZmluZSBPVUlfQVVUSF84MDIxWAkJCQkweDAxCisjZGVmaW5lIE9VSV9BVVRIX1BTSwkJCQkweDAyCisvL0NpcGhlciBzdWl0ZQorI2RlZmluZSBPVUlfQ0lQSEVSX0dST1VQX0tFWSAgICAgICAgMHgwMCAgLy9hZGRlZCBieSB3cyAwNS8yMS8wNAorI2RlZmluZSBPVUlfQ0lQSEVSX1dFUF80MAkJCTB4MDEKKyNkZWZpbmUgT1VJX0NJUEhFUl9US0lQCQkJCTB4MDIKKyNkZWZpbmUgT1VJX0NJUEhFUl9DQ01QCQkJCTB4MDQKKyNkZWZpbmUgT1VJX0NJUEhFUl9XRVBfMTA0CQkJMHgwNQorCit0eXBlZGVmIHN0cnVjdCBfU1VJVEVfU0VMRUNUT1JfCit7CisJdW5pb24KKwl7CisJCXU4CVZhbHVlWzRdOworCQlzdHJ1Y3QgX1NVSVRfCisJCXsKKwkJCXU4CU9VSVszXTsKKwkJCXU4CVR5cGU7CisJCX1TdWl0U2VsZWN0b3I7CisJfTsKK31TVUlURV9TRUxFQ1RPUjsKKworLy8tLSAgV1BBICAtLQorc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwlVTkFMSUdORUQgU1VJVEVfU0VMRUNUT1IJT3VpV1BBQWRkaXRpb25hbDsvL1dQQSB2ZXJzaW9uIDIuMCBhZGRpdGlvbmFsIGZpZWxkLCBhbmQgc2hvdWxkIGJlIDAwOjUwOkYyOjAxCisJdTE2CQkJCQlWZXJzaW9uOworCVNVSVRFX1NFTEVDVE9SCQlHcm91cEtleVN1aXRlOworCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OworCVNVSVRFX1NFTEVDVE9SCQlQYWlyd2lzZUtleVN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCBSU05fQXV0aF9TdWJfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlBdXRoS2V5TW5ndFN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJQXV0aEtleU1uZ3RTdWl0ZVsxXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vLS0gIFdQQTIgIC0tCitzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudAoreworICB1bmlvbgorICB7CisJdTE2CV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQl3VmFsdWU7CisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXwkgLy8yMDA2MDkyNyBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKyAgICBzdHJ1Y3QgX1JTTl9DYXBhYmlsaXR5CisgICAgeworICAgIAl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBOb19QYWlyd2lzZSA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOworICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eQorICAgIHsKKyAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aCA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgTm9fUGFpcndpc2UgOiAxOworICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisgICAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CisgICAgI2VuZGlmCisKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKworI2lmZGVmIF9XUEEyXwordHlwZWRlZiBzdHJ1Y3QgX1BNS0lECit7CisgIHU4IHBWYWx1ZVsxNl07Cit9UE1LSUQ7CisKK3N0cnVjdAlXUEEyX1JTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwl1MTYJCQkJCVZlcnNpb247CisJU1VJVEVfU0VMRUNUT1IJCUdyb3VwS2V5U3VpdGU7CisJdTE2CQkJCQlQYWlyd2lzZUtleVN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJCVBhaXJ3aXNlS2V5U3VpdGVbMV07CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBXUEEyX1JTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTE2CQkJCUF1dGhLZXlNbmd0U3VpdGVDb3VudDsKKwlTVUlURV9TRUxFQ1RPUglBdXRoS2V5TW5ndFN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlQTUtJRF9Db3VudDsKKwlQTUtJRCBwbWtpZCBbMTZdIDsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvL2VuZGRlZiBfV1BBMl8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNQUMgRnJhbWUgc3RydWN0dXJlIChkaWZmZXJlbnQgdHlwZSkgYW5kIHN1YmZpZWxkIHN0cnVjdHVyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0cnVjdCBNQUNfZnJhbWVfY29udHJvbAoreworICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOyAvLyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBbUHJvdG9jb2wgVmVyc2lvbiwgQ29udHJvbCBUeXBlLCBDb250cm9sIFN1YnR5cGVdCisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbgorICAgIHU4ICAgIG9yZGVyOjE7CisgICAgdTggICAgV0VQOjE7CisgICAgdTggICAgbW9yZV9kYXRhOjE7CisgICAgdTggICAgcHdyX21ndDoxOworICAgIHU4ICAgIHJldHJ5OjE7CisgICAgdTggICAgbW9yZV9mcmFnOjE7CisgICAgdTggICAgZnJvbV9kczoxOworICAgIHU4ICAgIHRvX2RzOjE7CisgICAgI2Vsc2UKKyAgICB1OCAgICB0b19kczoxOworICAgIHU4ICAgIGZyb21fZHM6MTsKKyAgICB1OCAgICBtb3JlX2ZyYWc6MTsKKyAgICB1OCAgICByZXRyeToxOworICAgIHU4ICAgIHB3cl9tZ3Q6MTsKKyAgICB1OCAgICBtb3JlX2RhdGE6MTsKKyAgICB1OCAgICBXRVA6MTsKKyAgICB1OCAgICBvcmRlcjoxOworICAgICNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBNYW5hZ2VtZW50X0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsgLy8gMkIsIFRvRFMsRnJvbURTLE1vcmVGcmFnLE1vcmVEYXRhLE9yZGVyPTAKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlEQVtNQUNfQUREUl9MRU5HVEhdOwkJCS8vIEFkZHIxCisgICAgdTgJCVNBW01BQ19BRERSX0xFTkdUSF07CQkJLy8gQWRkcjIKKyAgICB1OAkJQlNTSURbTUFDX0FERFJfTEVOR1RIXTsJCQkvLyBBZGRyMworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICAvLyBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgPD0gMzI1IGJ5dGVzCisgICAgLy8gRkNTIDQgYnl0ZXMKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vIFNXLU1BQyBkb24ndCBUeC9SeCBDb250cm9sLUZyYW1lLCBIVy1NQUMgZG8gaXQuCitzdHJ1Y3QgQ29udHJvbF9GcmFtZSB7CisgICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8vIFRvRFMsRnJvbURTLE1vcmVGcmFnLFJldHJ5LE1vcmVEYXRhLFdFUCxPcmRlcj0wCisgICAgdTE2CQlkdXJhdGlvbjsKKyAgICB1OAkJUkFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1OAkJVEFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1MTYJCUZDUzsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBEYXRhX0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlBZGRyMVtNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyMltNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyM1tNQUNfQUREUl9MRU5HVEhdOworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICB1OAkJQWRkcjRbTUFDX0FERFJfTEVOR1RIXTsgLy8gb25seSBleGlzdCB3aGVuIFRvRFM9RnJvbURTPTEKKyAgICAvLyBEYXRhIEZyYW1lIEJvZHkgPD0gMjMxMgorICAgIC8vIEZDUworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERpc2Fzc29jaWF0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgcmVhc29uQ29kZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgbGlzdGVuSW50ZXJ2YWw7CisgICAgdTggICAgIEN1cnJlbnRfQVBfQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdOy8vZm9yIHJlYXNzb2NpYXRpb24gb25seQorICAgIC8vIFNTSUQgKDIrMzIgYnl0ZXMpCisgICAgLy8gU3VwcG9ydGVkX1JhdGVzICgyKzggYnl0ZXMpCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgQXNzb2NpYXRpb25fUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBzdGF0dXNDb2RlOworICAgIHUxNiAgICBBc3NvY2lhdGlvbl9JRDsKKyAgICBzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQgc3VwcG9ydGVkUmF0ZXM7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKnN0cnVjdCBSZWFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBsaXN0ZW5JbnRlcnZhbDsKKyAgICB1OCAgICAgQ3VycmVudF9BUF9BZGRyZXNzW01BQ19BRERSX0xFTkdUSF07CisgICAgLy8gU1NJRCAoMiszMiBieXRlcykKKyAgICAvLyBTdXBwb3J0ZWRfUmF0ZXMgKDIrOCBieXRlcykKK307Ki8KKy8vIGVsaW1pbmF0ZWQgYnkgV1MgMDcvMjIvMDQgY29tYm9pbmVkIHdpdGggYXNzb2NpYXRlaW9uIHJlcXVlc3QgZnJhbWUuCisKK3N0cnVjdCBSZWFzc29jaWF0aW9uX1Jlc3BvbnNlX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICB1MTYgICAgQXNzb2NpYXRpb25fSUQ7CisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50IHN1cHBvcnRlZFJhdGVzOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERlYXV0aGVudGljYXRpb25fRnJhbWVfQm9keQoreworICAgIHUxNiAgICByZWFzb25Db2RlOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUHJvYmVfUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBUaW1lc3RhbXA7CisgICAgdTE2ICAgIEJlYWNvbl9JbnRlcnZhbDsKKyAgICB1MTYgICAgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbjsKKyAgICAvLyBTU0lECisgICAgLy8gU3VwcG9ydGVkX1JhdGVzCisgICAgLy8gUEhZIHBhcmFtZXRlciBTZXQgKERTIFBhcmFtZXRlcnMpCisgICAgLy8gQ0YgcGFyYW1ldGVyIFNldAorICAgIC8vIElCU1MgcGFyYW1ldGVyIFNldAorfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IEF1dGhlbnRpY2F0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgYWxnb3JpdGhtTnVtYmVyOworICAgIHUxNiAgICBzZXF1ZW5jZU51bWJlcjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICAvLyBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCisJLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OyAvLyB3a2NoZW4gYWRkZWQKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2VuZGlmIC8vIF9NQUNfU3RydWN0dXJlX0hfCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U2Mzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKQEAgLTAsMCArMSw2MzAgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZAorTWRzX3Jlc2V0X2Rlc2NyaXB0b3IoUEFEQVBURVIgQWRhcHRlcikKK3sKKwlQTURTIHBNZHMgPSAmQWRhcHRlci0+TWRzOworCisJcE1kcy0+VHhQYXVzZSA9IDA7CisJcE1kcy0+VHhUaHJlYWRDb3VudCA9IDA7CisJcE1kcy0+VHhGaWxsSW5kZXggPSAwOworCXBNZHMtPlR4RGVzSW5kZXggPSAwOworCXBNZHMtPlNjYW5UeFBhdXNlID0gMDsKKwltZW1zZXQocE1kcy0+VHhPd25lciwgMCwgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAzKSAmIH4weDAzKSk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK01kc19pbml0aWFsKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUE1EUyBwTWRzID0gJkFkYXB0ZXItPk1kczsKKworCXBNZHMtPlR4UGF1c2UgPSBGQUxTRTsKKwlwTWRzLT5UeFJUU1RocmVzaG9sZCA9IERFRkFVTFRfUlRTVGhyZXNob2xkOworCXBNZHMtPlR4RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKworCXZSeFRpbWVySW5pdChBZGFwdGVyKTsvL2ZvciBXUEEgY291bnRlcm1lYXN1cmUKKworCXJldHVybiBoYWxfZ2V0X3R4X2J1ZmZlciggJkFkYXB0ZXItPnNId0RhdGEsICZwTWRzLT5wVHhCdWZmZXIgKTsKK30KKwordm9pZAorTWRzX0Rlc3Ryb3koUEFEQVBURVIgQWRhcHRlcikKK3sKKwl2UnhUaW1lclN0b3AoQWRhcHRlcik7Cit9CisKK3ZvaWQKK01kc19UeChQQURBUFRFUiBBZGFwdGVyKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCURFU0NSSVBUT1IJVHhEZXM7CisJUERFU0NSSVBUT1IJcFR4RGVzID0gJlR4RGVzOworCVBVQ0hBUgkJWG1pdEJ1ZkFkZHJlc3M7CisJdTE2CQlYbWl0QnVmU2l6ZSwgUGFja2V0U2l6ZSwgc3RtcCwgQ3VycmVudFNpemUsIEZyYWdtZW50VGhyZXNob2xkOworCXU4CQlGaWxsSW5kZXgsIFR4RGVzSW5kZXgsIEZyYWdtZW50Q291bnQsIEZpbGxDb3VudDsKKwl1bnNpZ25lZCBjaGFyCUJ1ZmZlckZpbGxlZCA9IEZBTFNFLCBNSUNBZGQgPSAwOworCisKKwlpZiAocE1kcy0+VHhQYXVzZSkKKwkJcmV0dXJuOworCWlmICghaGFsX2RyaXZlcl9pbml0X09LKHBId0RhdGEpKQorCQlyZXR1cm47CisKKwkvL09ubHkgb25lIHRocmVhZCBjYW4gYmUgcnVuIGhlcmUKKwlpZiAoIU9TX0FUT01JQ19JTkMoIEFkYXB0ZXIsICZwTWRzLT5UeFRocmVhZENvdW50KSA9PSAxKQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBTdGFydCB0byBmaWxsIHRoZSBkYXRhCisJZG8geworCQlGaWxsSW5kZXggPSBwTWRzLT5UeEZpbGxJbmRleDsKKwkJaWYgKHBNZHMtPlR4T3duZXJbRmlsbEluZGV4XSkgeyAvLyBJcyBvd25lZCBieSBzb2Z0d2FyZSAwOlllcyAxOk5vCisjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQlXQkRFQlVHKCgiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIikpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCVhtaXRCdWZBZGRyZXNzID0gcE1kcy0+cFR4QnVmZmVyICsgKE1BWF9VU0JfVFhfQlVGRkVSICogRmlsbEluZGV4KTsgLy9HZXQgYnVmZmVyCisJCVhtaXRCdWZTaXplID0gMDsKKwkJRmlsbENvdW50ID0gMDsKKwkJZG8geworCQkJUGFja2V0U2l6ZSA9IEFkYXB0ZXItPnNNbG1lRnJhbWUubGVuOworCQkJaWYgKCFQYWNrZXRTaXplKQorCQkJCWJyZWFrOworCisJCQkvL0ZvciBDaGVjayB0aGUgYnVmZmVyIHJlc291cmNlCisJCQlGcmFnbWVudFRocmVzaG9sZCA9IENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xEOworCQkJLy85MzExMzAuNS5iCisJCQlGcmFnbWVudENvdW50ID0gUGFja2V0U2l6ZS9GcmFnbWVudFRocmVzaG9sZCArIDE7CisJCQlzdG1wID0gUGFja2V0U2l6ZSArIEZyYWdtZW50Q291bnQqMzIgKyA4Oy8vOTMxMTMwLjUuYyA4Ok1JQworCQkJaWYgKChYbWl0QnVmU2l6ZSArIHN0bXApID49IE1BWF9VU0JfVFhfQlVGRkVSKSB7CisJCQkJcHJpbnRrKCJbTWRzX1R4XSBFeGNlc3MgbWF4IHR4IGJ1ZmZlci5cbiIpOworCQkJCWJyZWFrOyAvLyBidWZmZXIgaXMgbm90IGVub3VnaAorCQkJfQorCisKKwkJCS8vCisJCQkvLyBTdGFydCB0cmFuc21pdHRpbmcKKwkJCS8vCisJCQlCdWZmZXJGaWxsZWQgPSBUUlVFOworCisJCQkvKiBMZWF2ZXMgZmlyc3QgdTggaW50YWN0ICovCisJCQltZW1zZXQoKFBVQ0hBUilwVHhEZXMgKyAxLCAwLCBzaXplb2YoREVTQ1JJUFRPUikgLSAxKTsKKworCQkJVHhEZXNJbmRleCA9IHBNZHMtPlR4RGVzSW5kZXg7Ly9HZXQgdGhlIGN1cnJlbnQgSUQKKwkJCXBUeERlcy0+RGVzY3JpcHRvcl9JRCA9IFR4RGVzSW5kZXg7CisJCQlwTWRzLT5UeERlc0Zyb21bIFR4RGVzSW5kZXggXSA9IDI7Ly9TdG9yaW5nIHRoZSBpbmZvcm1hdGlvbiBvZiBzb3VyY2UgY29tbWluZyBmcm9tCisJCQlwTWRzLT5UeERlc0luZGV4Kys7CisJCQlwTWRzLT5UeERlc0luZGV4ICU9IE1BWF9VU0JfVFhfREVTQ1JJUFRPUjsKKworCQkJTUxNRV9HZXROZXh0UGFja2V0KCBBZGFwdGVyLCBwVHhEZXMgKTsKKworCQkJLy8gQ29weSBoZWFkZXIuIDhieXRlIFVTQiArIDI0Ynl0ZSA4MDIuMTFIZHIuIFNldCBUeFJhdGUsIFByZWFtYmxlIHR5cGUKKwkJCU1kc19IZWFkZXJDb3B5KCBBZGFwdGVyLCBwVHhEZXMsIFhtaXRCdWZBZGRyZXNzICk7CisKKwkJCS8vIEZvciBzcGVlZCB1cCBLZXkgc2V0dGluZworCQkJaWYgKHBUeERlcy0+RWFwRml4KSB7CisjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQkJV0JERUJVRygoIjM1OiBFUEEgNHRoIGZyYW1lIGRldGVjdGVkLiBTaXplID0gJWRcbiIsIFBhY2tldFNpemUpKTsKKyNlbmRpZgorCQkJCXBId0RhdGEtPklzS2V5UHJlU2V0ID0gMTsKKwkJCX0KKworCQkJLy8gQ29weSAoZnJhZ21lbnQpIGZyYW1lIGJvZHksIGFuZCBzZXQgVVNCLCA4MDIuMTEgaGRyIGZsYWcKKwkJCUN1cnJlbnRTaXplID0gTWRzX0JvZHlDb3B5KEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MpOworCisJCQkvLyBTZXQgUlRTL0NUUyBhbmQgTm9ybWFsIGR1cmF0aW9uIGZpZWxkIGludG8gYnVmZmVyCisJCQlNZHNfRHVyYXRpb25TZXQoQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyk7CisKKwkJCS8vCisJCQkvLyBDYWxjdWxhdGlvbiBNSUMgZnJvbSBidWZmZXIgd2hpY2ggbWF5YmUgZnJhZ21lbnQsIHRoZW4gZmlsbCBpbnRvIHRlbXBvcmFyeSBhZGRyZXNzIDggYnl0ZQorCQkJLy8gOTMxMTMwLjUuZQorCQkJaWYgKE1JQ0FkZCkKKwkJCQlNZHNfTWljRmlsbCggQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOworCisJCQkvL1NoaWZ0IHRvIHRoZSBuZXh0IGFkZHJlc3MKKwkJCVhtaXRCdWZTaXplICs9IEN1cnJlbnRTaXplOworCQkJWG1pdEJ1ZkFkZHJlc3MgKz0gQ3VycmVudFNpemU7CisKKyNpZmRlZiBfSUJTU19CRUFDT05fU0VRX1NUSUNLXworCQkJaWYgKChYbWl0QnVmQWRkcmVzc1sgRE9UXzExX0RBX09GRlNFVCs4IF0gJiAweGZjKSAhPSBNQUNfU1VCVFlQRV9NTkdNTlRfUFJPQkVfUkVRVUVTVCkgLy8gKzggZm9yIFVTQiBoZHIKKyNlbmRpZgorCQkJCXBNZHMtPlR4VG9nZ2xlID0gVFJVRTsKKworCQkJLy8gR2V0IHBhY2tldCB0byB0cmFuc21pdCBjb21wbGV0ZWQsIDE6VEVTVFNUQSAyOk1MTUUgMzogTmRpcyBkYXRhCisJCQlNTE1FX1NlbmRDb21wbGV0ZShBZGFwdGVyLCAwLCBUUlVFKTsKKworCQkJLy8gU29mdHdhcmUgVFNDIGNvdW50IDIwMDYwMjE0CisJCQlwTWRzLT5UeFRzYysrOworCQkJaWYgKHBNZHMtPlR4VHNjID09IDApCisJCQkJcE1kcy0+VHhUc2NfMisrOworCisJCQlGaWxsQ291bnQrKzsgLy8gMjAwNjA5MjgKKwkJfSB3aGlsZSAoSEFMX1VTQl9NT0RFX0JVUlNUKHBId0RhdGEpKTsgLy8gRW5kIG9mIG11bHRpcGxlIE1TRFUgY29weSBsb29wLiBGQUxTRSA9IHNpbmdsZSBUUlVFID0gbXVsdGlwbGUgc2VuZGluZworCisJCS8vIE1vdmUgdG8gdGhlIG5leHQgb25lLCBpZiBuZWNlc3NhcnkKKwkJaWYgKEJ1ZmZlckZpbGxlZCkgeworCQkJLy8gc2l6ZSBzZXR0aW5nCisJCQlwTWRzLT5UeEJ1ZmZlclNpemVbIEZpbGxJbmRleCBdID0gWG1pdEJ1ZlNpemU7CisKKwkJCS8vIDIwMDYwOTI4IHNldCBUeCBjb3VudAorCQkJcE1kcy0+VHhDb3VudEluQnVmZmVyW0ZpbGxJbmRleF0gPSBGaWxsQ291bnQ7CisKKwkJCS8vIFNldCBvd25lciBmbGFnCisJCQlwTWRzLT5UeE93bmVyW0ZpbGxJbmRleF0gPSAxOworCisJCQlwTWRzLT5UeEZpbGxJbmRleCsrOworCQkJcE1kcy0+VHhGaWxsSW5kZXggJT0gTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSOworCQkJQnVmZmVyRmlsbGVkID0gRkFMU0U7CisJCX0gZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKCFQYWNrZXRTaXplKSAvLyBObyBtb3JlIHBrIGZvciB0cmFuc21pdHRpbmcKKwkJCWJyZWFrOworCisJfSB3aGlsZShUUlVFKTsKKworCS8vCisJLy8gU3RhcnQgdG8gc2VuZCBieSBsb3dlciBtb2R1bGUKKwkvLworCWlmICghcEh3RGF0YS0+SXNLZXlQcmVTZXQpCisJCVdiMzVUeF9zdGFydChwSHdEYXRhKTsKKworIGNsZWFudXA6CisJT1NfQVRPTUlDX0RFQyggQWRhcHRlciwgJnBNZHMtPlR4VGhyZWFkQ291bnQgKTsKK30KKwordm9pZAorTWRzX1NlbmRDb21wbGV0ZShQQURBUFRFUiBBZGFwdGVyLCBQVDAyX0RFU0NSSVBUT1IgcFQwMikKK3sKKwlQTURTCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXBod19kYXRhX3QJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCXU4CVBhY2tldElkID0gKHU4KXBUMDItPlQwMl9UeF9Qa3RJRDsKKwl1bnNpZ25lZCBjaGFyCVNlbmRPSyA9IFRSVUU7CisJdTgJUmV0cnlDb3VudCwgVHhSYXRlOworCisJaWYgKHBUMDItPlQwMl9JZ25vcmVSZXN1bHQpIC8vIERvbid0IGNhcmUgdGhlIHJlc3VsdAorCQlyZXR1cm47CisJaWYgKHBUMDItPlQwMl9Jc0xhc3RNcGR1KSB7CisJCS8vVE9ETzogRFRPIC0tIGdldCB0aGUgcmV0cnkgY291bnQgYW5kIGZyYWdtZW50IGNvdW50CisJCS8vIFR4IHJhdGUKKwkJVHhSYXRlID0gcE1kcy0+VHhSYXRlWyBQYWNrZXRJZCBdWyAwIF07CisJCVJldHJ5Q291bnQgPSAodTgpcFQwMi0+VDAyX01QRFVfQ250OworCQlpZiAocFQwMi0+dmFsdWUgJiBGTEFHX0VSUk9SX1RYX01BU0spIHsKKwkJCVNlbmRPSyA9IEZBTFNFOworCisJCQlpZiAocFQwMi0+VDAyX3RyYW5zbWl0X2Fib3J0IHx8IHBUMDItPlQwMl9vdXRfb2ZfTWF4VHhNU0RVTGlmdFRpbWUpIHsKKwkJCQkvL3JldHJ5IGVycm9yCisJCQkJcEh3RGF0YS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IChSZXRyeUNvdW50KzEpOworCQkJCS8vW2ZvciB0eCBkZWJ1Z10KKwkJCQlpZiAoUmV0cnlDb3VudDw3KQorCQkJCQlwSHdEYXRhLT50eF9yZXRyeV9jb3VudFtSZXRyeUNvdW50XSArPSBSZXRyeUNvdW50OworCQkJCWVsc2UKKwkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbN10gKz0gUmV0cnlDb3VudDsKKwkJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCQkJV0JERUJVRygoImR0b190eF9yZXRyeV9jb3VudCA9JWRcbiIsIHBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCkpOworCQkJCSNlbmRpZgorCQkJCU1UT19TZXRUeENvdW50KEFkYXB0ZXIsIFR4UmF0ZSwgUmV0cnlDb3VudCk7CisJCQl9CisJCQlwSHdEYXRhLT5kdG9fdHhfZnJhZ19jb3VudCArPSAoUmV0cnlDb3VudCsxKTsKKworCQkJLy9bZm9yIHR4IGRlYnVnXQorCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVCkKKwkJCQlwSHdEYXRhLT50eF9UQlRUX3N0YXJ0X2NvdW50Kys7CisJCQlpZiAocFQwMi0+VDAyX3RyYW5zbWl0X3dpdGhvdXRfZW5jcnlwdGlvbl9kdWVfdG9fd2VwX29uX2ZhbHNlKQorCQkJCXBId0RhdGEtPnR4X1dlcE9uX2ZhbHNlX2NvdW50Kys7CisJCQlpZiAocFQwMi0+VDAyX2Rpc2NhcmRfZHVlX3RvX251bGxfd2VwX2tleSkKKwkJCQlwSHdEYXRhLT50eF9OdWxsX2tleV9jb3VudCsrOworCQl9IGVsc2UgeworCQkJaWYgKHBUMDItPlQwMl9lZmZlY3RpdmVfdHJhbnNtaXNzaW9uX3JhdGUpCisJCQkJcEh3RGF0YS0+dHhfRVRSX2NvdW50Kys7CisJCQlNVE9fU2V0VHhDb3VudChBZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOworCQl9CisKKwkJLy8gQ2xlYXIgc2VuZCByZXN1bHQgYnVmZmVyCisJCXBNZHMtPlR4UmVzdWx0WyBQYWNrZXRJZCBdID0gMDsKKwl9IGVsc2UKKwkJcE1kcy0+VHhSZXN1bHRbIFBhY2tldElkIF0gfD0gKCh1MTYpKHBUMDItPnZhbHVlICYgMHgwZmZmZikpOworfQorCit2b2lkCitNZHNfSGVhZGVyQ29weShQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzLCBQVUNIQVIgVGFyZ2V0QnVmZmVyKQoreworCVBNRFMJcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisJUFVDSEFSCXNyY19idWZmZXIgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1swXTsvLzkzMTEzMC41LmcKKwlQVDAwX0RFU0NSSVBUT1IJcFQwMDsKKwlQVDAxX0RFU0NSSVBUT1IJcFQwMTsKKwl1MTYJc3RtcDsKKwl1OAlpLCBjdG1wMSwgY3RtcDIsIGN0bXBmOworCXUxNglGcmFnbWVudFRocmVzaG9sZCA9IENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xEOworCisKKwlzdG1wID0gcERlcy0+YnVmZmVyX3RvdGFsX3NpemU7CisJLy8KKwkvLyBTZXQgVVNCIGhlYWRlciA4IGJ5dGUKKwkvLworCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKVRhcmdldEJ1ZmZlcjsKKwlUYXJnZXRCdWZmZXIgKz0gNDsKKwlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUilUYXJnZXRCdWZmZXI7CisJVGFyZ2V0QnVmZmVyICs9IDQ7CisKKwlwVDAwLT52YWx1ZSA9IDA7Ly8gQ2xlYXIKKwlwVDAxLT52YWx1ZSA9IDA7Ly8gQ2xlYXIKKworCXBUMDAtPlQwMF90eF9wYWNrZXRfaWQgPSBwRGVzLT5EZXNjcmlwdG9yX0lEOy8vIFNldCBwYWNrZXQgSUQKKwlwVDAwLT5UMDBfaGVhZGVyX2xlbmd0aCA9IDI0Oy8vIFNldCBoZWFkZXIgbGVuZ3RoCisJcFQwMS0+VDAxX3JldHJ5X2Fib3J0X2ViYWJsZSA9IDE7Ly85MjEwMTMgOTMxMTMwLjUuaAorCisJLy8gS2V5IElEIHNldHVwCisJcFQwMS0+VDAxX3dlcF9pZCA9IDA7CisKKwlGcmFnbWVudFRocmVzaG9sZCA9IERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEOwkvL0RvIG5vdCBmcmFnbWVudAorCS8vIENvcHkgZnVsbCBkYXRhLCB0aGUgMSdzdCBidWZmZXIgY29udGFpbiBhbGwgdGhlIGRhdGEgOTMxMTMwLjUuagorCW1lbWNweSggVGFyZ2V0QnVmZmVyLCBzcmNfYnVmZmVyLCBET1RfMTFfTUFDX0hFQURFUl9TSVpFICk7Ly8gQ29weSBoZWFkZXIKKwlwRGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHNyY19idWZmZXIgKyBET1RfMTFfTUFDX0hFQURFUl9TSVpFOworCXBEZXMtPmJ1ZmZlcl90b3RhbF9zaXplIC09IERPVF8xMV9NQUNfSEVBREVSX1NJWkU7CisJcERlcy0+YnVmZmVyX3NpemVbMF0gPSBwRGVzLT5idWZmZXJfdG90YWxfc2l6ZTsKKworCS8vIFNldCBmcmFnbWVudCB0aHJlc2hvbGQKKwlGcmFnbWVudFRocmVzaG9sZCAtPSAoRE9UXzExX01BQ19IRUFERVJfU0laRSArIDQpOworCXBEZXMtPkZyYWdtZW50VGhyZXNob2xkID0gRnJhZ21lbnRUaHJlc2hvbGQ7CisKKwkvLyBTZXQgbW9yZSBmcmFnIGJpdAorCVRhcmdldEJ1ZmZlclsxXSB8PSAweDA0Oy8vIFNldCBtb3JlIGZyYWcgYml0CisKKwkvLworCS8vIFNldCB0eCByYXRlCisJLy8KKwlzdG1wID0gKihQVVNIT1JUKShUYXJnZXRCdWZmZXIrMzApOyAvLyAybiBhbGlnbm1lbnQgYWRkcmVzcworCisJLy9Vc2UgYmFzaWMgcmF0ZQorCWN0bXAxID0gY3RtcGYgPSBDVVJSRU5UX1RYX1JBVEVfRk9SX01ORzsKKworCXBEZXMtPlR4UmF0ZSA9IGN0bXAxOworCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiVHggcmF0ZSA9JXhcbiIsIGN0bXAxKSk7CisJI2VuZGlmCisKKwlwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlID0gKGN0bXAxJTMpID8gMCA6IDE7CisKKwlmb3IoIGk9MDsgaTwyOyBpKysgKSB7CisJCWlmKCBpID09IDEgKQorCQkJY3RtcDEgPSBjdG1wZjsKKworCQlwTWRzLT5UeFJhdGVbcERlcy0+RGVzY3JpcHRvcl9JRF1baV0gPSBjdG1wMTsgLy8gYmFja3VwIHRoZSB0YSByYXRlIGFuZCBmYWxsIGJhY2sgcmF0ZQorCisJCWlmKCBjdG1wMSA9PSAxMDgpIGN0bXAyID0gNzsKKwkJZWxzZSBpZiggY3RtcDEgPT0gOTYgKSBjdG1wMiA9IDY7IC8vIFJhdGUgY29udmVydCBmb3IgVVNCCisJCWVsc2UgaWYoIGN0bXAxID09IDcyICkgY3RtcDIgPSA1OworCQllbHNlIGlmKCBjdG1wMSA9PSA0OCApIGN0bXAyID0gNDsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMzYgKSBjdG1wMiA9IDM7CisJCWVsc2UgaWYoIGN0bXAxID09IDI0ICkgY3RtcDIgPSAyOworCQllbHNlIGlmKCBjdG1wMSA9PSAxOCApIGN0bXAyID0gMTsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMTIgKSBjdG1wMiA9IDA7CisJCWVsc2UgaWYoIGN0bXAxID09IDIyICkgY3RtcDIgPSAzOworCQllbHNlIGlmKCBjdG1wMSA9PSAxMSApIGN0bXAyID0gMjsKKwkJZWxzZSBpZiggY3RtcDEgPT0gNCAgKSBjdG1wMiA9IDE7CisJCWVsc2UgY3RtcDIgPSAwOyAvLyBpZiggY3RtcDEgPT0gMiAgKSBvciBkZWZhdWx0CisKKwkJaWYoIGkgPT0gMCApCisJCQlwVDAxLT5UMDFfdHJhbnNtaXRfcmF0ZSA9IGN0bXAyOworCQllbHNlCisJCQlwVDAxLT5UMDFfZmFsbF9iYWNrX3JhdGUgPSBjdG1wMjsKKwl9CisKKwkvLworCS8vIFNldCBwcmVhbWJsZSB0eXBlCisJLy8KKwlpZiAoKHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgPT0gMCkgJiYgKHBUMDEtPlQwMV90cmFuc21pdF9yYXRlID09IDApKQkvLyBSQVRFXzFNCisJCXBEZXMtPlByZWFtYmxlTW9kZSA9ICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORzsKKwllbHNlCisJCXBEZXMtPlByZWFtYmxlTW9kZSA9ICBDVVJSRU5UX1BSRUFNQkxFX01PREU7CisJcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCA9IHBEZXMtPlByZWFtYmxlTW9kZTsJLy8gU2V0IHByZWFtYmxlCisKK30KKworLy8gVGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgNG4gc2l6ZSBvZiB1c2IgcGsKK3UxNgorTWRzX0JvZHlDb3B5KFBBREFQVEVSIEFkYXB0ZXIsIFBERVNDUklQVE9SIHBEZXMsIFBVQ0hBUiBUYXJnZXRCdWZmZXIpCit7CisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUE1EUwlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlQVUNIQVIJYnVmZmVyLCBzcmNfYnVmZmVyLCBwY3RtcDsKKwl1MTYJU2l6ZSA9IDA7CisJdTE2CVNpemVMZWZ0LCBDb3B5U2l6ZSwgQ29weUxlZnQsIHN0bXA7CisJdTgJYnVmX2luZGV4LCBGcmFnbWVudENvdW50ID0gMDsKKworCisJLy8gQ29weSBmcmFnbWVudCBib2R5CisJYnVmZmVyID0gVGFyZ2V0QnVmZmVyOyAvLyBzaGlmdCA4QiB1c2IgKyAyNEIgODAyLjExCisJU2l6ZUxlZnQgPSBwRGVzLT5idWZmZXJfdG90YWxfc2l6ZTsKKwlidWZfaW5kZXggPSBwRGVzLT5idWZmZXJfc3RhcnRfaW5kZXg7CisKKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilidWZmZXI7CisJd2hpbGUgKFNpemVMZWZ0KSB7CisJCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKWJ1ZmZlcjsKKwkJQ29weVNpemUgPSBTaXplTGVmdDsKKwkJaWYgKFNpemVMZWZ0ID4gcERlcy0+RnJhZ21lbnRUaHJlc2hvbGQpIHsKKwkJCUNvcHlTaXplID0gcERlcy0+RnJhZ21lbnRUaHJlc2hvbGQ7CisJCQlwVDAwLT5UMDBfZnJhbWVfbGVuZ3RoID0gMjQgKyBDb3B5U2l6ZTsvL1NldCBVU0IgbGVuZ3RoCisJCX0gZWxzZQorCQkJcFQwMC0+VDAwX2ZyYW1lX2xlbmd0aCA9IDI0ICsgU2l6ZUxlZnQ7Ly9TZXQgVVNCIGxlbmd0aAorCisJCVNpemVMZWZ0IC09IENvcHlTaXplOworCisJCS8vIDEgQnl0ZSBvcGVyYXRpb24KKwkJcGN0bXAgPSAoUFVDSEFSKSggYnVmZmVyICsgOCArIERPVF8xMV9TRVFVRU5DRV9PRkZTRVQgKTsKKwkJKnBjdG1wICY9IDB4ZjA7CisJCSpwY3RtcCB8PSBGcmFnbWVudENvdW50Oy8vOTMxMTMwLjUubQorCQlpZiggIUZyYWdtZW50Q291bnQgKQorCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAxOworCisJCWJ1ZmZlciArPSAzMjsgLy8gOEIgdXNiICsgMjRCIDgwMi4xMSBoZWFkZXIKKwkJU2l6ZSArPSAzMjsKKworCQkvLyBDb3B5IGludG8gYnVmZmVyCisJCXN0bXAgPSBDb3B5U2l6ZSArIDM7CisJCXN0bXAgJj0gfjB4MDM7Ly80biBBbGlnbm1lbnQKKwkJU2l6ZSArPSBzdG1wOy8vIEN1cnJlbnQgNG4gb2Zmc2V0IG9mIG1wZHUKKworCQl3aGlsZSAoQ29weVNpemUpIHsKKwkJCS8vIENvcHkgYm9keQorCQkJc3JjX2J1ZmZlciA9IHBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF07CisJCQlDb3B5TGVmdCA9IENvcHlTaXplOworCQkJaWYgKENvcHlTaXplID49IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF0pIHsKKwkJCQlDb3B5TGVmdCA9IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF07CisKKwkJCQkvLyBHZXQgdGhlIG5leHQgYnVmZmVyIG9mIGRlc2NyaXB0b3IKKwkJCQlidWZfaW5kZXgrKzsKKwkJCQlidWZfaW5kZXggJT0gTUFYX0RFU0NSSVBUT1JfQlVGRkVSX0lOREVYOworCQkJfSBlbHNlIHsKKwkJCQlQVUNIQVIJcGN0bXAgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1tidWZfaW5kZXhdOworCQkJCXBjdG1wICs9IENvcHlTaXplOworCQkJCXBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF0gPSBwY3RtcDsKKwkJCQlwRGVzLT5idWZmZXJfc2l6ZVtidWZfaW5kZXhdIC09IENvcHlTaXplOworCQkJfQorCisJCQltZW1jcHkoYnVmZmVyLCBzcmNfYnVmZmVyLCBDb3B5TGVmdCk7CisJCQlidWZmZXIgKz0gQ29weUxlZnQ7CisJCQlDb3B5U2l6ZSAtPSBDb3B5TGVmdDsKKwkJfQorCisJCS8vIDkzMTEzMC41Lm4KKwkJaWYgKHBNZHMtPk1pY0FkZCkgeworCQkJaWYgKCFTaXplTGVmdCkgeworCQkJCXBNZHMtPk1pY1dyaXRlQWRkcmVzc1sgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gYnVmZmVyIC0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY1dyaXRlU2l6ZVsgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY0FkZCA9IDA7CisJCQl9CisJCQllbHNlIGlmKCBTaXplTGVmdCA8IDggKSAvLzkzMTEzMC41LnAKKwkJCXsKKwkJCQlwTWRzLT5NaWNBZGQgPSBTaXplTGVmdDsKKwkJCQlwTWRzLT5NaWNXcml0ZUFkZHJlc3NbIHBNZHMtPk1pY1dyaXRlSW5kZXggXSA9IGJ1ZmZlciAtICggOCAtIFNpemVMZWZ0ICk7CisJCQkJcE1kcy0+TWljV3JpdGVTaXplWyBwTWRzLT5NaWNXcml0ZUluZGV4IF0gPSA4IC0gU2l6ZUxlZnQ7CisJCQkJcE1kcy0+TWljV3JpdGVJbmRleCsrOworCQkJfQorCQl9CisKKwkJLy8gRG9lcyBpdCBuZWVkIHRvIGdlbmVyYXRlIHRoZSBuZXcgaGVhZGVyIGZvciBuZXh0IG1wZHU/CisJCWlmIChTaXplTGVmdCkgeworCQkJYnVmZmVyID0gVGFyZ2V0QnVmZmVyICsgU2l6ZTsgLy8gR2V0IHRoZSBuZXh0IDRuIHN0YXJ0IGFkZHJlc3MKKwkJCW1lbWNweSggYnVmZmVyLCBUYXJnZXRCdWZmZXIsIDMyICk7Ly9Db3B5IDhCIFVTQiArMjRCIDgwMi4xMQorCQkJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAwOworCQl9CisKKwkJRnJhZ21lbnRDb3VudCsrOworCX0KKworCXBUMDAtPlQwMF9sYXN0X21wZHUgPSAxOworCXBUMDAtPlQwMF9Jc0xhc3RNcGR1ID0gMTsKKwlidWZmZXIgPSAoUFVDSEFSKXBUMDAgKyA4OyAvLyArOCBmb3IgVVNCIGhkcgorCWJ1ZmZlclsxXSAmPSB+MHgwNDsgLy8gQ2xlYXIgbW9yZSBmcmFnIGJpdCBvZiA4MDIuMTEgZnJhbWUgY29udHJvbAorCXBEZXMtPkZyYWdtZW50Q291bnQgPSBGcmFnbWVudENvdW50OyAvLyBVcGRhdGUgdGhlIGNvcnJlY3QgZnJhZ21lbnQgbnVtYmVyCisJcmV0dXJuIFNpemU7Cit9CisKKwordm9pZAorTWRzX0R1cmF0aW9uU2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMsICBQVUNIQVIgYnVmZmVyICkKK3sKKwlQVDAwX0RFU0NSSVBUT1IJcFQwMDsKKwlQVDAxX0RFU0NSSVBUT1IJcFQwMTsKKwl1MTYJRHVyYXRpb24sIE5leHRCb2R5TGVuLCBPZmZzZXRTaXplOworCXU4CVJhdGUsIGk7CisJdW5zaWduZWQgY2hhcglDVFNfb24gPSBGQUxTRSwgUlRTX29uID0gRkFMU0U7CisJUFQwMF9ERVNDUklQVE9SIHBOZXh0VDAwOworCXUxNiBCb2R5TGVuOworCXVuc2lnbmVkIGNoYXIgYm9Hcm91cEFkZHIgPSBGQUxTRTsKKworCisJT2Zmc2V0U2l6ZSA9IHBEZXMtPkZyYWdtZW50VGhyZXNob2xkICsgMzIgKyAzOworCU9mZnNldFNpemUgJj0gfjB4MDM7CisJUmF0ZSA9IHBEZXMtPlR4UmF0ZSA+PiAxOworCWlmICghUmF0ZSkKKwkJUmF0ZSA9IDE7CisKKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilidWZmZXI7CisJcFQwMSA9IChQVDAxX0RFU0NSSVBUT1IpKGJ1ZmZlcis0KTsKKwlwTmV4dFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpKGJ1ZmZlcitPZmZzZXRTaXplKTsKKworCWlmKCBidWZmZXJbIERPVF8xMV9EQV9PRkZTRVQrOCBdICYgMHgxICkgLy8gKzggZm9yIFVTQiBoZHIKKwkJYm9Hcm91cEFkZHIgPSBUUlVFOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gU2V0IFJUUy9DVFMgbWVjaGFuaXNtCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJaWYgKCFib0dyb3VwQWRkcikKKwl7CisJCS8vTk9URSA6IElmIHRoZSBwcm90ZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIE1TRFUgd2lsbCBiZSBmcmFnbWVudGVkLAorCQkvLwkJIHRoZSB0eCByYXRlcyBvZiBNUERVcyB3aWxsIGFsbCBiZSBEU1NTIHJhdGVzLiBTbyBpdCB3aWxsIG5vdCB1c2UKKwkJLy8JCSBDVFMtdG8tc2VsZiBpbiB0aGlzIGNhc2UuIENUUy1Uby1zZWxmIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gd2l0aG91dAorCQkvLwkJIGZyYWdtZW50YXRpb24uIC0tIDIwMDUwMTEyCisJCUJvZHlMZW4gPSAodTE2KXBUMDAtPlQwMF9mcmFtZV9sZW5ndGg7CS8vaW5jbHVkZSA4MDIuMTEgaGVhZGVyCisJCUJvZHlMZW4gKz0gNDsJLy9DUkMKKworCQlpZiggQm9keUxlbiA+PSBDVVJSRU5UX1JUU19USFJFU0hPTEQgKQorCQkJUlRTX29uID0gVFJVRTsgLy8gVXNpbmcgUlRTCisJCWVsc2UKKwkJeworCQkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKSAvLyBJcyB1c2luZyBPRkRNCisJCQl7CisJCQkJaWYoIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00gKSAvLyBJcyB1c2luZyBwcm90ZWN0CisJCQkJCUNUU19vbiA9IFRSVUU7IC8vIFVzaW5nIENUUworCQkJfQorCQl9CisJfQorCisJaWYoIFJUU19vbiB8fCBDVFNfb24gKQorCXsKKwkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUpIC8vIElzIHVzaW5nIE9GRE0KKwkJeworCQkJLy9DVFMgZHVyYXRpb24KKwkJCS8vIDIgU0lGUyArIERBVEEgdHJhbnNtaXQgdGltZSArIDEgQUNLCisJCQkvLyBBQ0sgUmF0ZSA6IDI0IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCUR1cmF0aW9uID0gMipERUZBVUxUX1NJRlNUSU1FICsKKwkJCQkJICAgMipQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTiArCisJCQkJCSAgICgoQm9keUxlbio4ICsgMjIgKyBSYXRlKjQgLSAxKS8oUmF0ZSo0KSkqVHN5bSArCisJCQkJCSAgICgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW07CisJCX0KKwkJZWxzZQkvL0RTU1MKKwkJeworCQkJLy9DVFMgZHVyYXRpb24KKwkJCS8vIDIgU0lGUyArIERBVEEgdHJhbnNtaXQgdGltZSArIDEgQUNLCisJCQkvLyBSYXRlIDogPz8gTWVnYSBicHMKKwkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQlEdXJhdGlvbiA9IExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUqMjsKKwkJCWVsc2UKKwkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjI7CisKKwkJCUR1cmF0aW9uICs9ICggKChCb2R5TGVuICsgMTQpKjggKyBSYXRlLTEpIC8gUmF0ZSArCisJCQkJCQlERUZBVUxUX1NJRlNUSU1FKjIgKTsKKwkJfQorCisJCWlmKCBSVFNfb24gKQorCQl7CisJCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApIC8vIElzIHVzaW5nIE9GRE0KKwkJCXsKKwkJCQkvL0NUUyArIDEgU0lGUyArIENUUyBkdXJhdGlvbgorCQkJCS8vQ1RTIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJCS8vQ1RTIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQkJRHVyYXRpb24gKz0gKERFRkFVTFRfU0lGU1RJTUUgKworCQkJCQkJCQlQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTiArCisJCQkJCQkJCSgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW0pOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vQ1RTICsgMSBTSUZTICsgQ1RTIGR1cmF0aW9uCisJCQkJLy9DVFMgUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkJLy9DVFMgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCQlEdXJhdGlvbiArPSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCQkJCWVsc2UKKwkJCQkJRHVyYXRpb24gKz0gU0hPUlRfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUU7CisKKwkJCQlEdXJhdGlvbiArPSAoICgoMTEyICsgUmF0ZS0xKSAvIFJhdGUpICsgREVGQVVMVF9TSUZTVElNRSApOworCQkJfQorCQl9CisKKwkJLy8gU2V0IHRoZSB2YWx1ZSBpbnRvIFVTQiBkZXNjcmlwdG9yCisJCXBUMDEtPlQwMV9hZGRfcnRzID0gUlRTX29uID8gMSA6IDA7CisJCXBUMDEtPlQwMV9hZGRfY3RzID0gQ1RTX29uID8gMSA6IDA7CisJCXBUMDEtPlQwMV9ydHNfY3RzX2R1cmF0aW9uID0gRHVyYXRpb247CisJfQorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gRmlsbCB0aGUgbW9yZSBmcmFnbWVudCBkZXNjcmlwdG9yCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJaWYoIGJvR3JvdXBBZGRyICkKKwkJRHVyYXRpb24gPSAwOworCWVsc2UKKwl7CisJCWZvciggaT1wRGVzLT5GcmFnbWVudENvdW50LTE7IGk+MDsgaS0tICkKKwkJeworCQkJTmV4dEJvZHlMZW4gPSAodTE2KXBOZXh0VDAwLT5UMDBfZnJhbWVfbGVuZ3RoOworCQkJTmV4dEJvZHlMZW4gKz0gNDsJLy9DUkMKKworCQkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKQorCQkJeworCQkJCS8vT0ZETQorCQkJCS8vIGRhdGEgdHJhbnNtaXQgdGltZSArIDMgU0lGUyArIDIgQUNLCisJCQkJLy8gUmF0ZSA6ID8/TWVnYSBicHMKKwkJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMsIHR4IHJhdGUgPSAyNE0KKwkJCQlEdXJhdGlvbiA9IFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OICogMzsKKwkJCQlEdXJhdGlvbiArPSAoKChOZXh0Qm9keUxlbio4ICsgMjIgKyBSYXRlKjQgLSAxKS8oUmF0ZSo0KSkgKiBUc3ltICsKKwkJCQkJCQkoKCgyKjE0KSo4ICsgMjIgKyA5NSkvOTYpKlRzeW0gKworCQkJCQkJCURFRkFVTFRfU0lGU1RJTUUqMyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy9EU1NTCisJCQkJLy8gZGF0YSB0cmFuc21pdCB0aW1lICsgMiBBQ0sgKyAzIFNJRlMKKwkJCQkvLyBSYXRlIDogPz9NZWdhIGJwcworCQkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJCS8vVE9ETyA6CisJCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQkJRHVyYXRpb24gPSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjM7CisJCQkJZWxzZQorCQkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjM7CisKKwkJCQlEdXJhdGlvbiArPSAoICgoTmV4dEJvZHlMZW4gKyAoMioxNCkpKjggKyBSYXRlLTEpIC8gUmF0ZSArCisJCQkJCQkJREVGQVVMVF9TSUZTVElNRSozICk7CisJCQl9CisKKwkJCSgoUFVTSE9SVClidWZmZXIpWzVdID0gY3B1X3RvX2xlMTYoRHVyYXRpb24pOy8vIDQgVVNIT1IgZm9yIHNraXAgOEIgVVNCLCAyVVNIT1JUPUZDICsgRHVyYXRpb24KKworCQkJLy8tLS0tMjAwNjEwMDkgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCQlwTmV4dFQwMC0+dmFsdWUgPSBjcHVfdG9fbGUzMihwTmV4dFQwMC0+dmFsdWUpOworCQkJcFQwMS0+dmFsdWUgPSBjcHVfdG9fbGUzMiggcFQwMS0+dmFsdWUgKTsKKwkJCS8vLS0tLWVuZCAyMDA2MTAwOSBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKworCQkJYnVmZmVyICs9IE9mZnNldFNpemU7CisJCQlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUikoYnVmZmVyKzQpOworCQkJaWYgKGkgIT0gMSkJLy9UaGUgbGFzdCBmcmFnbWVudCB3aWxsIG5vdCBoYXZlIHRoZSBuZXh0IGZyYWdtZW50CisJCQkJcE5leHRUMDAgPSAoUFQwMF9ERVNDUklQVE9SKShidWZmZXIrT2Zmc2V0U2l6ZSk7CisJCX0KKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gRmlsbCB0aGUgbGFzdCBmcmFnbWVudCBkZXNjcmlwdG9yCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApCisJCXsKKwkJCS8vT0ZETQorCQkJLy8gMSBTSUZTICsgMSBBQ0sKKwkJCS8vIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQlEdXJhdGlvbiA9IFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OOworCQkJLy9UaGUgVHggcmF0ZSBvZiBBQ0sgdXNlIDI0TQorCQkJRHVyYXRpb24gKz0gKCgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW0gKyBERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBEU1NTCisJCQkvLyAxIEFDSyArIDEgU0lGUworCQkJLy8gUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMoMTEyIGJpdHMpCisJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCUR1cmF0aW9uID0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKwkJCWVsc2UKKwkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCisJCQlEdXJhdGlvbiArPSAoICgxMTIgKyBSYXRlLTEpL1JhdGUgKwlERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwl9CisKKwkoKFBVU0hPUlQpYnVmZmVyKVs1XSA9IGNwdV90b19sZTE2KER1cmF0aW9uKTsvLyA0IFVTSE9SIGZvciBza2lwIDhCIFVTQiwgMlVTSE9SVD1GQyArIER1cmF0aW9uCisJcFQwMC0+dmFsdWUgPSBjcHVfdG9fbGUzMihwVDAwLT52YWx1ZSk7CisJcFQwMS0+dmFsdWUgPSBjcHVfdG9fbGUzMihwVDAxLT52YWx1ZSk7CisJLy8tLWVuZCAyMDA2MTAwOSBhZGQKKworfQorCit2b2lkIE1EU19FdGhlcm5ldFBhY2tldFJlY2VpdmUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSApCit7CisJCU9TX1JFQ0VJVkVfUEFDS0VUX0lORElDQVRFKCBBZGFwdGVyLCBwUnhMYXllcjEgKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTExODhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaApAQCAtMCwwICsxLDMzIEBACit1bnNpZ25lZCBjaGFyIE1kc19pbml0aWFsKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNZHNfRGVzdHJveSggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX1R4KCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNZHNfSGVhZGVyQ29weSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgUFVDSEFSIFRhcmdldEJ1ZmZlciApOwordTE2IE1kc19Cb2R5Q29weSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgUFVDSEFSIFRhcmdldEJ1ZmZlciApOwordm9pZCBNZHNfRHVyYXRpb25TZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIFBVQ0hBUiBUYXJnZXRCdWZmZXIgKTsKK3ZvaWQgTWRzX1NlbmRDb21wbGV0ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQVDAyX0RFU0NSSVBUT1IgcFQwMiApOwordm9pZCBNZHNfTXBkdVByb2Nlc3MoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcFJ4RGVzICk7Cit2b2lkIE1kc19yZXNldF9kZXNjcmlwdG9yKCAgUEFEQVBURVIgQWRhcHRlciApOworZXh0ZXJuIHZvaWQgRGF0YURtcCh1OCAqcGRhdGEsIHUzMiBsZW4sIHUzMiBvZmZzZXQpOworCisKK3ZvaWQgdlJ4VGltZXJJbml0KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSeFRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSk7Cit2b2lkIFJ4VGltZXJIYW5kbGVyXzFhKCBQQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdlJ4VGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIFJ4VGltZXJIYW5kbGVyKCB2b2lkKgkJCVN5c3RlbVNwZWNpZmljMSwKKwkJCQkJICAgUFdCMzJfQURBUFRFUiAJQWRhcHRlciwKKwkJCQkJICAgdm9pZCoJCQlTeXN0ZW1TcGVjaWZpYzIsCisJCQkJCSAgIHZvaWQqCQkJU3lzdGVtU3BlY2lmaWMzKTsKKworCisvLyBGb3IgQXN5bmNocm9ub3VzIGluZGljYXRpbmcuIFRoZSByb3V0aW5lIGNvbGxvY2F0ZXMgd2l0aCBVU0IuCit2b2lkIE1kc19Nc2R1UHJvY2VzcyggIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEsICB1OCBTbG90SW5kZXgpOworCisvLyBGb3IgZGF0YSBmcmFtZSBzZW5kaW5nIDIwMDYwODAyCit1MTYgTURTX0dldFBhY2tldFNpemUoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIE1EU19HZXROZXh0UGFja2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3ZvaWQgTURTX0dldE5leHRQYWNrZXRDb21wbGV0ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIE1EU19TZW5kUmVzdWx0KCAgUEFEQVBURVIgQWRhcHRlciwgIHU4IFBhY2tldElkLCAgdW5zaWduZWQgY2hhciBTZW5kT0sgKTsKK3ZvaWQgTURTX0V0aGVybmV0UGFja2V0UmVjZWl2ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczODI3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKQEAgLTAsMCArMSwxODMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIE1BWF9VU0JfVFhfREVTQ1JJUFRPUgkJMTUJCS8vIElTODlDMzUgYWJpbGl0eQorI2RlZmluZSBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIJNAkJLy8gVmlydHVhbCBwcmUtYnVmZmVyIG51bWJlciBvZiBNQVhfVVNCX1RYX0JVRkZFUgorI2RlZmluZSBNQVhfVVNCX1RYX0JVRkZFUgkJCTQwOTYJLy8gSVM4OUMzNSBhYmlsaXR5IDRuIGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgaGFyZHdhcmUKKworI2RlZmluZSBNRFNfRVZFTlRfSU5ESUNBVEUoIF9BLCBfQiwgX0YgKQlPU19FVkVOVF9JTkRJQ0FURSggX0EsIF9CLCBfRiApCisjZGVmaW5lIEFVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUgkJCTAJCS8vIF9GIGZsYWcgc2V0dGluZworI2RlZmluZSBBVVRIX1JFUVVFU1RfR1JPVVBfRVJST1IJCQkxCQkvLyBfRiBmbGFnIHNldHRpbmcKKworLy8gRm9yIHZhcmlhYmxlIHNldHRpbmcKKyNkZWZpbmUgQ1VSUkVOVF9CU1NfVFlQRQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5iQnNzVHlwZQorI2RlZmluZSBDVVJSRU5UX1dFUF9NT0RFCQkJCXBzU01FLT5fZG90MTFQcml2YWN5SW52b2tlZAorI2RlZmluZSBDVVJSRU5UX0JTU0lECQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5hYkJzc0lECisjZGVmaW5lIENVUlJFTlRfREVTSVJFRF9XUEFfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEFfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBUFNLX0FVVEgpKQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBMl9FTkFCTEUJCSgocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBMlBTS19BVVRIKSkKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisjZGVmaW5lIENVUlJFTlRfUEFJUldJU0VfS0VZX09LCQkJcHNTTUUtPnBhaXJ3aXNlX2tleV9vaworLy9bMjAwNDA3MTIgV1NdCisjZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZX09LCQkJcHNTTUUtPmdyb3VwX2tleV9vaworI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWQkJCXBzU01FLT50eF9taWNfa2V5CisjZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZCQkJCXBzU01FLT5ncm91cF90eF9taWNfa2V5CisjZGVmaW5lIENVUlJFTlRfRU5DUllQVF9TVEFUVVMJCQlwc1NNRS0+ZW5jcnlwdF9zdGF0dXMKKyNkZWZpbmUgQ1VSUkVOVF9XRVBfSUQJCQkJCUFkYXB0ZXItPnNTbWVQYXJhLl9kb3QxMVdFUERlZmF1bHRLZXlJRAorI2RlZmluZSBDVVJSRU5UX0NPTlRST0xfUE9SVF9CTE9DSwkJKCBwc1NNRS0+d3BhX29rIT0xIHx8IChBZGFwdGVyLT5NZHMuYm9Db3VudGVyTWVhc3VyZUJsb2NrPT0xICYmIChDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTPT1FTkNSWVBUX1RLSVApKSApCisjZGVmaW5lIENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xECQkoQWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgJiB+MHgxKQorI2RlZmluZSBDVVJSRU5UX1BSRUFNQkxFX01PREUJCQlwc0xPQ0FMLT5ib1Nob3J0UHJlYW1ibGU/V0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JUOldMQU5fUFJFQU1CTEVfVFlQRV9MT05HCisjZGVmaW5lIENVUlJFTlRfTElOS19PTgkJCQkJT1NfTElOS19TVEFUVVMKKyNkZWZpbmUgQ1VSUkVOVF9UWF9SQVRFCQkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkN1cnJlbnRUeFJhdGUKKyNkZWZpbmUgQ1VSUkVOVF9GQUxMX0JBQ0tfVFhfUkFURQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhGYWxsYmFja1JhdGUKKyNkZWZpbmUgQ1VSUkVOVF9UWF9SQVRFX0ZPUl9NTkcJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkN1cnJlbnRUeFJhdGVGb3JNbmcKKyNkZWZpbmUgQ1VSUkVOVF9QUk9URUNUX01FQ0hBTklTTQkJcHNMT0NBTC0+Ym9Qcm90ZWN0TWVjaGFuaXNtCisjZGVmaW5lIENVUlJFTlRfUlRTX1RIUkVTSE9MRAkJCUFkYXB0ZXItPk1kcy5UeFJUU1RocmVzaG9sZAorCisjZGVmaW5lIE1JQl9HU19YTUlUX09LX0lOQwkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1hNSVRfT0srKworI2RlZmluZSBNSUJfR1NfUkNWX09LX0lOQwkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1JDVl9PSysrCisjZGVmaW5lIE1JQl9HU19YTUlUX0VSUk9SX0lOQwkJCUFkYXB0ZXItPnNMb2NhbFBhcmEuR1NfWE1JVF9FUlJPUgorCisvLy0tLS0tLS0tLS0gVFggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRVRIRVJORVRfVFhfREVTQ1JJUFRPUlMgICAgICAgICBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIKKworLy8tLS0tLS0tLS0tIFJYIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBFVEhFUk5FVF9SWF9ERVNDUklQVE9SUwkJCTgJLy9JdCdzIG5vdCBuZWNlc3NhcnkgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIDIgaW4gc3luYyBpbmRpY2F0ZQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvbmZpZ3JhdGlvbiBkZWZhdWx0IHZhbHVlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgREVGQVVMVF9NVUxUSUNBU1RMSVNUTUFYCQkzMiAJCS8vIHN0YW5kYXJkCisjZGVmaW5lIERFRkFVTFRfVFhfQlVSU1RMRU5HVEgJCQkzIAkJLy8gMzIgTG9uZ3dvcmRzCisjZGVmaW5lIERFRkFVTFRfUlhfQlVSU1RMRU5HVEgJCQkzIAkJLy8gMzIgTG9uZ3dvcmRzCisjZGVmaW5lIERFRkFVTFRfVFhfVEhSRVNIT0xECQkJMCAJCS8vIEZ1bGwgUGFja2V0CisjZGVmaW5lIERFRkFVTFRfUlhfVEhSRVNIT0xECQkJMCAJCS8vIEZ1bGwgUGFja2V0CisjZGVmaW5lIERFRkFVTFRfTUFYVFhSQVRFCQkJCTYgCQkvLyAxMSBNYnBzIChMb25nKQorI2RlZmluZSBERUZBVUxUX0NIQU5ORUwJCQkJCTMgCQkvLyBDaGVubmVsIDMKKyNkZWZpbmUgREVGQVVMVF9SVFNUaHJlc2hvbGQJCQkyMzQ3IAkvLyBEaXNhYmxlIFJUUworLy8jZGVmaW5lIERFRkFVTFRfUE1FCQkJCQkJMSAJCS8vIEVuYWJsZQorI2RlZmluZSBERUZBVUxUX1BNRQkJCQkJCTAgCQkvLyBEaXNhYmxlCisjZGVmaW5lIERFRkFVTFRfU0lGU1RJTUUJCQkJMTAKKyNkZWZpbmUgREVGQVVMVF9BQ0tUSU1FXzFNTCAgICAgICAgICAgICAzMDQgICAgIC8vIDE0OCs0NCsxMTIgOTExMjIwIGJ5IExDQworI2RlZmluZSBERUZBVUxUX0FDS1RJTUVfMk1MICAgICAgICAgICAgIDI0OCAgICAgLy8gMTQ4KzQ0KzU2IDkxMTIyMCBieSBMQ0MKKyNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQgICAgICAyMzQ2IAkvLyBObyBmcmFnbWVudAorI2RlZmluZSBERUZBVUxUX1BSRUFNQkxFX0xFTkdUSAkJCTcyCisjZGVmaW5lIERFRkFVTFRfUExDUEhFQURFUlRJTUVfTEVOR1RICTI0CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMC45NiBzZWMgc2luY2UgdGltZSB1bml0IG9mIHRoZSBSMDMgZm9yIHRoZSBjdXJyZW50LCBXODlDMzIgaXMgYWJvdXQgNjBucworIGluc3RlYWQgb2YgOTYwIG5zLiBUaGlzIHNoYWxsIGJlIGZpeGVkIGluIHRoZSBmdXR1cmUgVzg5QzMyCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERFRkFVTFRfTUFYX1JFQ0VJVkVfVElNRSAgICAgICAgMTY0NDAwMDAKKworI2RlZmluZSBSWF9CVUZfU0laRQkJCQkJCTIzNTIgICAgICAgIC8vIDYwMCAJLy8gRm9yIDMwMSBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKyNkZWZpbmUgTUFYX1JYX0RFU0NSSVBUT1JTICAgICAgICAgICAgICAxOCAgICAgICAgIC8vIFJ4IExheWVyIDIKKyNkZWZpbmUgTUFYX0JVRkZFUl9RVUVVRQk4IC8vIFRoZSB2YWx1ZSBpcyBhbHdheXMgZXF1YWwgOCBkdWUgdG8gTkRJU19QQUNLRVQncyBNaW5pcG9ydFJlc2VydmVkIGZpZWxkIHNpemUKKworCisvLyBGb3IgYnJhbmQtbmV3IHJ4IHN5c3RlbQorI2RlZmluZSBNRFNfSURfSUdOT1JFCQkJCUVUSEVSTkVUX1JYX0RFU0NSSVBUT1JTCisKKy8vIEZvciBUeCBQYWNrZXQgc3RhdHVzIGNsYXNzaWZ5CisjZGVmaW5lIFBBQ0tFVF9GUkVFX1RPX1VTRQkJCQkJCTAKKyNkZWZpbmUgUEFDS0VUX0NPTUVfRlJPTV9ORElTCQkJCQkweDA4CisjZGVmaW5lIFBBQ0tFVF9DT01FX0ZST01fTUxNRQkJCQkJMHg4MAorI2RlZmluZSBQQUNLRVRfU0VORF9DT01QTEVURQkJCQkJMHhmZgorCit0eXBlZGVmIHN0cnVjdCBfTURTCit7CisJLy8gRm9yIFR4IHVzYWdlCisJdTgJVHhPd25lclsgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAzKSAmIH4weDAzKSBdOworCVBVQ0hBUglwVHhCdWZmZXI7CisJdTE2CVR4QnVmZmVyU2l6ZVsgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAxKSAmIH4weDAxKSBdOworCXU4CVR4RGVzRnJvbVsgKChNQVhfVVNCX1RYX0RFU0NSSVBUT1IgKyAzKSAmIH4weDAzKSBdOy8vOTMxMTMwLjQudSAvLyAxOiBNTE1FIDI6IE5ESVMgY29udHJvbCAzOiBORElTIGRhdGEKKwl1OAlUeENvdW50SW5CdWZmZXJbICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SICsgMykgJiB+MHgwMykgXTsgLy8gMjAwNjA5MjgKKworCXU4CVR4RmlsbEluZGV4Oy8vdGhlIG5leHQgaW5kZXggb2YgVHhCdWZmZXIgY2FuIGJlIHVzZWQKKwl1OAlUeERlc0luZGV4Oy8vVGhlIG5leHQgaW5kZXggb2YgVHhEZXMgY2FuIGJlIHVzZWQKKwl1OAlTY2FuVHhQYXVzZTsJLy9kYXRhIFR4IHBhdXNlIGJlY2F1c2UgdGhlIHNjYW5uaW5nIGlzIHByb2dyZXNzaW5nLCBidXQgcHJvYmUgcmVxdWVzdCBUeCB3b24ndC4KKwl1OAlUeFBhdXNlOy8vRm9yIHBhdXNlIHRoZSBNZHNfVHggbW9kdWx0CisKKwlPU19BVE9NSUMJVHhUaHJlYWRDb3VudDsvL0ZvciB0aHJlYWQgY291bnRpbmcgOTMxMTMwLjQudgorLy85NTAzMDEgZGVsZXRlIGR1ZSB0byBIVworLy8JT1NfQVRPTUlDCVR4Q29uY3VycmVudENvdW50Oy8vOTMxMTMwLjQudworCisJdTE2CVR4UmVzdWx0WyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUiArIDEpICYgfjB4MDEpIF07Ly9Db2xsZWN0IHRoZSBzZW5kaW5nIHJlc3VsdCBvZiBNcGR1CisKKwl1OAlNaWNSZWR1bmRhbnRbOF07IC8vIEZvciB0bXAgdXNlCisJUFVDSEFSCU1pY1dyaXRlQWRkcmVzc1syXTsgLy9UaGUgc3RhcnQgYWRkcmVzcyB0byBmaWxsIHRoZSBNaWMsIHVzZSAyIHBvaW50IGR1ZSB0byBNaWMgbWF5YmUgZnJhZ21lbnQKKworCXUxNglNaWNXcml0ZVNpemVbMl07IC8vOTMxMTMwLjQueAorCisJdTE2CU1pY0FkZDsgLy8gSWYgd2FudCB0byBhZGQgdGhlIE1pYywgdGhpcyB2YXJpYWJsZSBlcXVhbCB0byA4CisJdTE2CU1pY1dyaXRlSW5kZXg7Ly9UaGUgbnVtYmVyIG9mIE1pY1dyaXRlQWRkcmVzcyA5MzExMzAuNC55CisKKwl1OAlUeFJhdGVbICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SKzEpJn4weDAxKSBdWzJdOyAvLyBbMF0gY3VycmVudCB0eCByYXRlLCBbMV0gZmFsbCBiYWNrIHJhdGUKKwl1OAlUeEluZm9bICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SKzEpJn4weDAxKSBdOwkvL1N0b3JlIGluZm9ybWF0aW9uIGZvciBjYWxsYmFjayBmdW5jdGlvbgorCisJLy9XS0NIRU4gYWRkZWQgZm9yIHNjYW5uaW5nIG1lY2hhbmlzbQorCXU4CVR4VG9nZ2xlOwkJLy9JdCBpcyBUUlVFIGlmIHRoZXJlIGFyZSB0eCBhY3Rpdml0aWVzIGluIHNvbWUgdGltZSBpbnRlcnZhbAorCXU4CVJlc2VydmVkX1szXTsKKworCS8vLS0tLS0tLS0tLSBmb3IgVHggUGFyYW1ldGVyCisJdTE2CVR4RnJhZ21lbnRUaHJlc2hvbGQ7ICAgIAkvLyBGb3IgZnJhbWUgYm9keSBvbmx5CisJdTE2CVR4UlRTVGhyZXNob2xkOworCisJdTMyCQlNYXhSZWNlaXZlVGltZTsvLzkxMTIyMC4zIEFkZAorCisJLy8gZGVwZW5kIG9uIE9TLAorCXUzMgkJCQkJTXVsdGljYXN0TGlzdE5vOworCXUzMgkJCQkJUGFja2V0RmlsdGVyOyAvLyBTZXR0aW5nIGJ5IE5ESVMsIHRoZSBjdXJyZW50IHBhY2tldCBmaWx0ZXIgaW4gdXNlLgorCXU4CQkJCQlNdWx0aWNhc3RBZGRyZXNzZXNBcnJheVtERUZBVUxUX01VTFRJQ0FTVExJU1RNQVhdW01BQ19BRERSX0xFTkdUSF07CisKKwkvL0NPVU5URVJNRUFTVVJFCisJdTgJCWJNSUNmYWlsQ291bnQ7CisJdTgJCWJvQ291bnRlck1lYXN1cmVCbG9jazsKKwl1OAkJcmVzZXJ2ZWRfNFsyXTsKKworCS8vTkRJU19NSU5JUE9SVF9USU1FUgluVGltZXI7CisJT1NfVElNRVIJblRpbWVyOworCisJdTMyCVR4VHNjOyAvLyAyMDA2MDIxNAorCXUzMglUeFRzY18yOyAvLyAyMDA2MDIxNAorCit9IE1EUywgKlBNRFM7CisKKwordHlwZWRlZiBzdHJ1Y3QgX1J4QnVmZmVyCit7CisgICAgUFVDSEFSICBwQnVmZmVyQWRkcmVzczsgICAgIC8vIFBvaW50ZXIgdGhlIHJlY2VpdmVkIGRhdGEgYnVmZmVyLgorCXUxNglCdWZmZXJTaXplOworCXU4CVJFU0VSVkVEOworCXU4CUJ1ZmZlckluZGV4Oy8vIE9ubHkgMSBieXRlCit9IFJYQlVGRkVSLCAqUFJYQlVGRkVSOworCisvLworLy8gUmV2ZWl2ZSBMYXllciAxIEZvcm1hdC4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgX1JYTEFZRVIxCit7CisgICAgdTE2ICBTZXF1ZW5jZU51bWJlcjsgICAgIC8vIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0LgorCXUxNglCdWZmZXJUb3RhbFNpemU7CisKKwl1MzIJSW5Vc2VkOworICAgIHUzMiAgIERlY3J5cHRpb25NZXRob2Q7ICAgLy8gVGhlIGRlc2lyZWQgZGVmcmFnbWVudCBudW1iZXIgb2YgdGhlIG5leHQgaW5jb21pbmcgcGFja2V0LgorCisJdTgJRGVGcmFnbWVudE51bWJlcjsKKwl1OAlGcmFtZVR5cGU7CisgICAgdTgJVHlwZUVuY2Fwc3VsYXRlZDsKKwl1OAlCdWZmZXJOdW1iZXI7CisKKwl1MzIJRmlyc3RGcmFtZUFycml2ZWRUaW1lOworCisJUlhCVUZGRVIJQnVmZmVyUXVldWVbIE1BWF9CVUZGRVJfUVVFVUUgXTsKKworCXU4CQlMYXN0RnJhbWVUeXBlOyAvLyAyMDA2MTAwNCBmb3IgZml4IGludGVsIDM5NDUgJ3MgYnVnCisJdTgJCVJFU0VSVkVEWzNdOyAgLy9AQCBhbnNvbgorCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy8gRm9yIGJyYW5kLW5ldyBSeCBzeXN0ZW0KKwl1OAlSZXNlcnZlZEJ1ZmZlclsgMjQwMCBdOy8vSWYgQnVmZmVyIElEIGlzIHJlc2VydmVkIG9uZSwgaXQgbXVzdCBjb3B5IHRoZSBkYXRhIGludG8gdGhpcyBhcmVhCisJUFVDSEFSCVJlc2VydmVkQnVmZmVyUG9pbnQ7Ly8gUG9pbnQgdG8gdGhlIG5leHQgYXZhaWxhYmUgYWRkcmVzcyBvZiByZXNlcnZlZCBidWZmZXIKKworfVJYTEFZRVIxLCAqIFBSWExBWUVSMTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc1OTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaApAQCAtMCwwICsxLDg0IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNTE1FTUlCLkggLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEdldCBhbmQgU2V0IHNvbWUgb2YgTUxNRSBNSUIgYXR0cmlidXRlcy4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgIDIwMDMwMTE3ICBQRDQzIEF1c3RpbiBMaXUKKy8vICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCByZWxlYXNlCisvLworLy8gIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmbmRlZiBfTUxNRV9NSUJfSAorI2RlZmluZSBfTUxNRV9NSUJfSAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1MTUVTZXRFeGNsdWRlVW5lbmNyeXB0ZWQgLS0KKy8vCisvLyBEZXNjcmlwdGlvbjoKKy8vICAgU2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIEFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KKy8vICAgRXhVbmVuY3J5cHRlZCAgLSB1bnNpZ25lZCBjaGFyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkKEFkYXB0ZXIsIEV4VW5lbmNyeXB0ZWQpICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCA9IEV4VW5lbmNyeXB0ZWQ7ICAgICAgICAgICAgIFwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIEdldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgY3VycmVudCBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkKEFkYXB0ZXIpICgodW5zaWduZWQgY2hhcikgKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCkKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIFNldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLyAgIFJlY2VpdmVMaWZlVGltZS0gdTMyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lKEFkYXB0ZXIsIFJlY2VpdmVMaWZlVGltZSkgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQWRhcHRlciktPk1kcy5NYXhSZWNlaXZlVGltZSA9IFJlY2VpdmVMaWZlVGltZTsgICAgICAgICAgICAgICAgXAorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1MTUVTZXRNYXhSZWNlaXZlTGlmZVRpbWUgLS0KKy8vCisvLyBEZXNjcmlwdGlvbjoKKy8vICAgR2V0IHRoZSBkb3QxMU1heFJlY2VpdmVMaWZlVGltZSB2YWx1ZS4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIEFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KKy8vCisvLyBSZXR1cm4gdmFsdWVzOgorLy8gICB1MzIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRUdldE1heFJlY2VpdmVMaWZlVGltZShBZGFwdGVyKSAoKHUzMikgKEFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUpCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwOTRmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCkBAIC0wLDAgKzEsMTk1IEBACisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLwlNbG1lLmgKKy8vCQlEZWZpbmUgdGhlIHJlbGF0ZWQgZGVmaW5pdGlvbnMgb2YgTUxNRSBtb2R1bGUKKy8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNkZWZpbmUgQVVUSF9SRUpFQ1RfUkVBU09OX0NIQUxMRU5HRV9GQUlMCQkxCisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FIG1vZHVsZQorI2RlZmluZSBJTkFDVElWRQkJCTB4MAorI2RlZmluZSBJRExFX1NDQU4JCQkweDEKKworLy89PT09PT0gdGhlIHN0YXRlIG9mIE1MTUUvRVNTIG1vZHVsZQorI2RlZmluZSBTVEFURV8xCQkJCTB4MgorI2RlZmluZSBBVVRIX1JFUQkJCTB4MworI2RlZmluZSBBVVRIX1dFUAkJCTB4NAorI2RlZmluZSBTVEFURV8yCQkJCTB4NQorI2RlZmluZSBBU1NPQ19SRVEJCQkweDYKKyNkZWZpbmUgU1RBVEVfMwkJCQkweDcKKworLy89PT09PT0gdGhlIHN0YXRlIG9mIE1MTUUvSUJTUyBtb2R1bGUKKyNkZWZpbmUgSUJTU19KT0lOX1NZTkMJCTB4OAorI2RlZmluZSBJQlNTX0FVVEhfUkVRCQkweDkKKyNkZWZpbmUgSUJTU19BVVRIX0NIQU5MR0UJMHhhCisjZGVmaW5lIElCU1NfQVVUSF9XRVAJCTB4YgorI2RlZmluZSBJQlNTX0FVVEhfSU5ECQkweGMKKyNkZWZpbmUgSUJTU19TVEFURV8yCQkweGQKKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vZGVwZW5kIG9uIEQ1QyhNQUMgdGltaW5nIGNvbnRyb2wgMDMgcmVnaXN0ZXIpOiBNYXhUeE1TRFVMaWZlVGltZSBkZWZhdWx0IDB4ODAwMDB1cworI2RlZmluZSBBVVRIX0ZBSUxfVElNRU9VVAkJNTUwCisjZGVmaW5lIEFTU09DX0ZBSUxfVElNRU9VVAkJNTUwCisjZGVmaW5lIFJFQVNTT0NfRkFJTF9USU1FT1VUCTU1MAorCisKKworLy8KKy8vIE1MTUUgdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkUsIHZhcmlhYmxlcworLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgZW51bV9SZXN1bHRDb2RlIC0tCisvLyAgUmVzdWx0IGNvZGUgcmV0dXJuZWQgZnJvbSBNTE1FIHRvIFNNRS4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQRDQzIDIwMDMwODI5IE1vZGlmaWxlZAorLy8jZGVmaW5lCVNVQ0NFU1MJCQkJCQkJCTAKKyNkZWZpbmUgTUxNRV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgMCAvL2ZvbGxvdyBzcGVjLgorI2RlZmluZQlJTlZBTElEX1BBUkFNRVRFUlMJCQkJCTEgLy9Ob3QgZm9sbG93aW5nIHNwZWMuCisjZGVmaW5lCU5PVF9TVVBQUE9SVEVECQkJCQkJMgorI2RlZmluZQlUSU1FT1VUCQkJCQkJCQkzCisjZGVmaW5lCVRPT19NQU5ZX1NJTVVMVEFORU9VU19SRVFVRVNUUwkJNAorI2RlZmluZSBSRUZVU0VECQkJCQkJCQk1CisjZGVmaW5lCUJTU19BTFJFQURZX1NUQVJURURfT1JfSk9JTkVECQk2CisjZGVmaW5lCVRSQU5TTUlUX0ZSQU1FX0ZBSUwJCQkJCTcKKyNkZWZpbmUJTk9fQlNTX0ZPVU5ECQkJCQkJOAorI2RlZmluZSBSRVRSWQkJCQkJCQkJOQorI2RlZmluZSBHSVZFX1VQCQkJCQkJCQkxMAorCisKKyNkZWZpbmUgT1BFTl9BVVRICQkJCQkJCTAKKyNkZWZpbmUgU0hBUkVfQVVUSAkJCQkJCQkxCisjZGVmaW5lIEFOWV9BVVRICQkJCQkJCTIKKyNkZWZpbmUgV1BBX0FVVEgJCQkJCQkJMwkvL2ZvciBXUEEKKyNkZWZpbmUgV1BBUFNLX0FVVEgJCQkJCQkJNAorI2RlZmluZSBXUEFOT05FX0FVVEgJCQkJCQk1CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gYWRkZWQgYnkgd3MgMDQvMTkvMDQKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV1BBMl9BVVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgNi8vZm9yIFdQQTIKKyNkZWZpbmUgV1BBMlBTS19BVVRIICAgICAgICAgICAgICAgICAgICAgICAgNworI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgTUxNRSBtb2R1bGUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy9mcm9tIFNNRQorCisjZGVmaW5lIE1MTUVNU0dfQVVUSF9SRVEJCQkJMHgwYgorI2RlZmluZSBNTE1FTVNHX0RFQVVUSF9SRVEJCQkJMHgwYworI2RlZmluZSBNTE1FTVNHX0FTU09DX1JFUQkJCQkweDBkCisjZGVmaW5lIE1MTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwZQorI2RlZmluZSBNTE1FTVNHX0RJU0FTU09DX1JFUQkJCTB4MGYKKyNkZWZpbmUgTUxNRU1TR19TVEFSVF9JQlNTX1JFUQkJCTB4MTAKKyNkZWZpbmUgTUxNRU1TR19JQlNTX05FVF9DRk0JCQkweDExCisKKy8vZnJvbSBSWCA6CisjZGVmaW5lIE1MTUVNU0dfUkNWX01MTUVGUkFNRQkJCTB4MjAKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfQVNTT0NSU1AJCQkweDIyCisjZGVmaW5lIE1MTUVNU0dfUkNWX1JFQVNTT0NSU1AJCQkweDI0CisjZGVmaW5lIE1MTUVNU0dfUkNWX0RJU0FTU09DCQkJMHgyYgorI2RlZmluZSBNTE1FTVNHX1JDVl9BVVRICQkJCTB4MmMKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfREVBVVRICQkJCTB4MmQKKworCisvL2Zyb20gVFggY2FsbGJhY2sKKyNkZWZpbmUgTUxNRU1TR19UWF9DQUxMQkFDSwkJCQkweDQwCisjZGVmaW5lIE1MTUVNU0dfQVNTT0NSRVFfQ0FMTEJBQ0sJCTB4NDEKKyNkZWZpbmUgTUxNRU1TR19SRUFTU09DUkVRX0NBTExCQUNLCQkweDQzCisjZGVmaW5lIE1MTUVNU0dfRElTQVNTT0NfQ0FMTEJBQ0sJCTB4NGEKKyNkZWZpbmUgTUxNRU1TR19BVVRIX0NBTExCQUNLCQkJMHg0YworI2RlZmluZSBNTE1FTVNHX0RFQVVUSF9DQUxMQkFDSwkJCTB4NGQKKworLy8jZGVmaW5lIE1MTUVNU0dfSk9JTl9GQUlMCQkJCTQKKy8vI2RlZmluZSBNTE1FTVNHX0FVVEhFTl9GQUlMCQkJMTgKKyNkZWZpbmUgTUxNRU1TR19USU1FT1VUCQkJCQkweDUwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9HbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzCisjZGVmaW5lIE1BWF9OVU1fVFhfTU1QRFUJMgorI2RlZmluZSBNQVhfTU1QRFVfU0laRQkJMTUxMgorI2RlZmluZSBNQVhfTlVNX1JYX01NUERVCTYKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vTUFDUk8KKyNkZWZpbmUgYm9NTE1FX0luYWN0aXZlU3RhdGUoX0FBXykJKF9BQV8tPndTdGF0ZT09SU5BQ1RJVkUpCisjZGVmaW5lIGJvTUxNRV9JZGxlU2NhblN0YXRlKF9CQl8pCShfQkJfLT53U3RhdGU9PUlETEVfU0NBTikKKyNkZWZpbmUgYm9NTE1FX0ZvdW5kU1RBaW5mbyhfQ0NfKQkoX0NDXy0+d1N0YXRlPj1JRExFX1NDQU4pCisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0ZSQU1FCit7CisJLy9ORElTX1BBQ0tFVAkJTUxNRV9QYWNrZXQ7CisJUENIQVIJCQlwTU1QRFU7CisJdTE2CQkJbGVuOworCXU4CQkJRGF0YVR5cGU7CisJdTgJCQlJc0luVXNlZDsKKworCU9TX1NQSU5fTE9DSwlNTE1FU3BpbkxvY2s7CisKKyAgICB1OAkJVHhNTVBEVVtNQVhfTlVNX1RYX01NUERVXVtNQVhfTU1QRFVfU0laRV07CisJdTgJCVR4TU1QRFVJblVzZVsgKE1BWF9OVU1fVFhfTU1QRFUrMykgJiB+MHgwMyBdOworCisJdTE2CQl3TnVtVHhNTVBEVTsKKwl1MTYJCXdOdW1UeE1NUERVRGlzY2FyZGVkOworCisgICAgdTgJCVJ4TU1QRFVbTUFYX05VTV9SWF9NTVBEVV1bTUFYX01NUERVX1NJWkVdOworICAgIHU4CSAJU2F2ZVJ4QnVmU2xvdEluVXNlWyAoTUFYX05VTV9SWF9NTVBEVSszKSAmIH4weDAzIF07CisKKwl1MTYJCXdOdW1SeE1NUERVOworCXUxNgkJd051bVJ4TU1QRFVEaXNjYXJkZWQ7CisKKwl1MTYJCXdOdW1SeE1NUERVSW5NTE1FOyAJLy8gTnVtYmVyIG9mIHRoZSBSeCBNTVBEVQorCXUxNgkJcmVzZXJ2ZWRfMTsJCQkvLyAgaW4gTUxNRS4KKyAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgIC8vICBleGNsdWRpbmcgdGhlIGRpc2NhcmRlZAorfSBNTE1FX0ZSQU1FLCAqcHNNTE1FX0ZSQU1FOworCit0eXBlZGVmIHN0cnVjdCBfQVVUSFJFUSB7CisKKwl1OCAJcGVlck1BQ2FkZHJbTUFDX0FERFJfTEVOR1RIXTsKKwl1MTYJd0F1dGhBbGdvcml0aG07CisKK30gTUxNRV9BVVRIUkVRX1BBUkEsICpwc01MTUVfQVVUSFJFUV9QQVJBOworCitzdHJ1Y3QgX1JlYXNvbl9Db2RlIHsKKworCXU4CXBlZXJNQUNhZGRyW01BQ19BRERSX0xFTkdUSF07CisJdTE2CXdSZWFzb25Db2RlOworfTsKK3R5cGVkZWYgc3RydWN0IF9SZWFzb25fQ29kZSBNTE1FX0RFQVVUSFJFUV9QQVJBLCAqcHNNTE1FX0RFQVVUSFJFUV9QQVJBOwordHlwZWRlZiBzdHJ1Y3QgX1JlYXNvbl9Db2RlIE1MTUVfRElTQVNTT0NSRVFfUEFSQSwgKnBzTUxNRV9ESVNBU1NPQ1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfQVNTT0NSRVEgeworICB1OCAgICAgICBQZWVyU1RBQWRkcltNQUNfQUREUl9MRU5HVEhdOworICB1MTYgICAgICAgQ2FwYWJpbGl0eUluZm87CisgIHUxNiAgICAgICBMaXN0ZW5JbnRlcnZhbDsKKworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBNTE1FX0FTU09DUkVRX1BBUkEsICpwc01MTUVfQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JFQVNTT0NSRVEgeworICB1OCAgICAgICBOZXdBUEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgdTE2ICAgICAgIENhcGFiaWxpdHlJbmZvOworICB1MTYgICAgICAgTGlzdGVuSW50ZXJ2YWw7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgTUxNRV9SRUFTU09DUkVRX1BBUkEsICpwc01MTUVfUkVBU1NPQ1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRUNBTExCQUNLIHsKKworICB1OCAJKnBzRnJhbWVQdHI7CisgIHU4CQliUmVzdWx0OworCit9IE1MTUVfVFhDQUxMQkFDSywgKnBzTUxNRV9UWENBTExCQUNLOworCit0eXBlZGVmIHN0cnVjdCBfUlhEQVRBCit7CisJczMyCQlGcmFtZUxlbmd0aDsKKwl1OAlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnBiRnJhbWVQdHI7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgUlhEQVRBLCAqcHNSWERBVEE7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMDkxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgTUxNRVR4UnguQworLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNRFMgKE1BQyBEYXRhIFNlcnZpY2UpIGFuZCBNTE1FLgorLy8KKy8vICBSZXZpc2lvbiBIaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAyMDAyMDkgICAgICBVTjIwIEplbm5pZmVyIFh1CisvLyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJlbGVhc2UKKy8vICAgICAgICAgIDIwMDIxMTA4ICAgIFBENDMgQXVzdGluIExpdQorLy8gICAgICAgICAgMjAwMzAxMTcgICAgUEQ0MyBBdXN0aW4gTGl1CisvLyAgICAgICAgICAgICAgICAgICAgICBEZWxldGVkIE1MTUVSZXR1cm5QYWNrZXQgYW5kIE1MTUVQcm9jVGhyZWFkKCkKKy8vCisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQgTUxNRVJlc2V0VHhSeChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJczMyICAgICBpOworCisJLy8gUmVzZXQgdGhlIGludGVyZmFjZSBiZXR3ZWVuIE1EUyBhbmQgTUxNRQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RYX01NUERVOyBpKyspCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fUlhfTU1QRFU7IGkrKykKKwkJQWRhcHRlci0+c01sbWVGcmFtZS5TYXZlUnhCdWZTbG90SW5Vc2VbaV0gPSBGQUxTRTsKKworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVJ4TU1QRFVJbk1MTUUgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0NDQWJ1c3kgICAgPSBGQUxTRTsKKwlBZGFwdGVyLT5zTG9jYWxQYXJhLmlQb3dlclNhdmVNb2RlICAgICA9IFBXUl9BQ1RJVkU7ICAgICAvLyBQb3dlciBhY3RpdmUKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8JRnVuY3Rpb246CisvLyAgICBNTE1FR2V0TU1QRFVCdWZmZXIoKQorLy8KKy8vCURlc2NyaXB0aW9uOgorLy8gICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIGFuIGF2YWlsYWJsZSBkYXRhIGJ1ZmZlciB3aXRoCisvLyAgICB0aGUgc2l6ZSBNQVhfTU1QRFVfU0laRSBmb3IgYSBNTVBEVS4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRhcHRlciAgIC0gcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8KKy8vCVJldHVybiB2YWx1ZToKKy8vICAgIE5VTEwgICAgIDogTm8gYXZhaWxhYmxlIGRhdGEgYnVmZmVyIGF2YWlsYWJsZQorLy8gICAgT3RoZXJ3aXNlOiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBGSVhNRTogU2hvdWxkIHRoaXMganVzdCBiZSByZXBsYWNlZCB3aXRoIGttYWxsb2MoKSBhbmQga2ZyZWUoKT8gKi8KK3U4ICpNTE1FR2V0TU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCXMzMiBpOworCXU4ICpyZXR1cm5WYWw7CisKKwlmb3IgKGkgPSAwOyBpPCBNQVhfTlVNX1RYX01NUERVOyBpKyspIHsKKwkJaWYgKEFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID09IEZBTFNFKQorCQkJYnJlYWs7CisJfQorCWlmIChpID49IE1BWF9OVU1fVFhfTU1QRFUpIHJldHVybiBOVUxMOworCisJcmV0dXJuVmFsID0gKHU4ICopJihBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVbaV0pOworCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gVFJVRTsKKworCXJldHVybiByZXR1cm5WYWw7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3U4IE1MTUVTZW5kRnJhbWUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcE1NUERVLCB1MTYgbGVuLCB1OCBEYXRhVHlwZSkKKy8qCURhdGFUeXBlIDogRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVCwgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UsCisJCQkJRlJBTUVfVFlQRV84MDJfMTFfREFUQSAqLworeworCWlmIChBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkICE9IFBBQ0tFVF9GUkVFX1RPX1VTRSkgeworCQlBZGFwdGVyLT5zTWxtZUZyYW1lLndOdW1UeE1NUERVRGlzY2FyZGVkKys7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQWRhcHRlci0+c01sbWVGcmFtZS5Jc0luVXNlZCA9IFBBQ0tFVF9DT01FX0ZST01fTUxNRTsKKworCS8vIEtlZXAgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSA9IHBNTVBEVTsKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlID0gRGF0YVR5cGU7CisJLy8gbGVuIG11c3QgYmUgdGhlIGxhc3Qgc2V0dGluZyBkdWUgdG8gUVVFUllfU0laRV9TRUNPTkQgb2YgTWRzCisJQWRhcHRlci0+c01sbWVGcmFtZS5sZW4gPSBsZW47CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSsrOworCisJLy8gSC9XIHdpbGwgZW50ZXIgcG93ZXIgc2F2ZSBieSBzZXQgdGhlIHJlZ2lzdGVyLiBTL1cgZG9uJ3Qgc2VuZCBudWxsIGZyYW1lCisJLy93aXRoIFBXUk1ndCBiaXQgZW5ibGVkIHRvIGVudGVyIHBvd2VyIHNhdmUgbm93LgorCisJLy8gVHJhbnNtaXQgTkRJUyBwYWNrZXQKKwlNZHNfVHgoQWRhcHRlcik7CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK01MTUVfR2V0TmV4dFBhY2tldChQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzKQoreworI2RlZmluZSBERVNDUklQVE9SX0FERF9CVUZGRVIoIF9ELCBfQSwgX1MgKSBcCit7XAorCV9ELT5JbnRlcm5hbFVzZWQgPSBfRC0+YnVmZmVyX3N0YXJ0X2luZGV4ICsgX0QtPmJ1ZmZlcl9udW1iZXI7IFwKKwlfRC0+SW50ZXJuYWxVc2VkICU9IE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWDsgXAorCV9ELT5idWZmZXJfYWRkcmVzc1sgX0QtPkludGVybmFsVXNlZCBdID0gX0E7IFwKKwlfRC0+YnVmZmVyX3NpemVbIF9ELT5JbnRlcm5hbFVzZWQgXSA9IF9TOyBcCisJX0QtPmJ1ZmZlcl90b3RhbF9zaXplICs9IF9TOyBcCisJX0QtPmJ1ZmZlcl9udW1iZXIrKztcCit9CisKKwlERVNDUklQVE9SX0FERF9CVUZGRVIoIHBEZXMsIEFkYXB0ZXItPnNNbG1lRnJhbWUucE1NUERVLCBBZGFwdGVyLT5zTWxtZUZyYW1lLmxlbiApOworCXBEZXMtPlR5cGUgPSBBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlOworfQorCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQQ0hBUiBwRGF0YSkKK3sKKwlpbnQgaTsKKworCS8vIFJlY2xhaW0gdGhlIGRhdGEgYnVmZmVyCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVFhfTU1QRFU7IGkrKykgeworCQlpZiAocERhdGEgPT0gKFBDSEFSKSYoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVW2ldKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVSW5Vc2VbaV0pCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZWxzZSAgeworCQkvLyBTb21ldGhpbmcgd3JvbmcKKwkJLy8gUEQ0MyBBZGQgZGVidWcgY29kZSBoZXJlPz8/CisJfQorfQorCit2b2lkCitNTE1FX1NlbmRDb21wbGV0ZShQQURBUFRFUiBBZGFwdGVyLCB1OCBQYWNrZXRJRCwgdW5zaWduZWQgY2hhciBTZW5kT0spCit7CisJTUxNRV9UWENBTExCQUNLCVR4Q2FsbGJhY2s7CisKKyAgICAvLyBSZWNsYWltIHRoZSBkYXRhIGJ1ZmZlcgorCUFkYXB0ZXItPnNNbG1lRnJhbWUubGVuID0gMDsKKwlNTE1FZnJlZU1NUERVQnVmZmVyKCBBZGFwdGVyLCBBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSApOworCisKKwlUeENhbGxiYWNrLmJSZXN1bHQgPSBNTE1FX1NVQ0NFU1M7CisKKwkvLyBSZXR1cm4gcmVzb3VyY2UKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkID0gUEFDS0VUX0ZSRUVfVE9fVVNFOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGUyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeF9mLmgKQEAgLTAsMCArMSw1MiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FVHhSeC5IIC0tCisvLworLy8gICBGdW5jdGlvbnMgZGVmaW5lZCBpbiBNTE1FVHhSeC5jLgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMiBXaW5ib25kIEVsZWN0cmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIF9NTE1FVFhSWF9ICisjZGVmaW5lIF9NTE1FVFhSWF9ICisKK3ZvaWQKK01MTUVQcm9jVGhyZWFkKAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIKKwkpOworCit2b2lkIE1MTUVSZXNldFR4UngoIFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKK3U4ICoKK01MTUVHZXRNTVBEVUJ1ZmZlcigKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyCisgICApOworCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIFBDSEFSIHBEYXRhKTsKKwordm9pZCBNTE1FX0dldE5leHRQYWNrZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordTggTUxNRVNlbmRGcmFtZSggUFdCMzJfQURBUFRFUiBBZGFwdGVyLAorCQkJCQl1OAkqcE1NUERVLAorCQkJCQl1MTYJbGVuLAorCQkJCQkgdTgJRGF0YVR5cGUpOworCit2b2lkCitNTE1FX1NlbmRDb21wbGV0ZSggIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIHU4IFBhY2tldElELCAgdW5zaWduZWQgY2hhciBTZW5kT0sgKTsKKwordm9pZAorTUxNRVJjdkZyYW1lKAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIsCisgICAgIFBSWEJVRkZFUiAgICAgICAgcFJ4QnVmZmVyQXJyYXksCisgICAgIHU4ICAgICAgICAgICAgTnVtT2ZCdWZmZXIsCisgICAgIHU4ICAgICAgICAgICAgUmV0dXJuU2xvdEluZGV4CisJKTsKKwordm9pZAorTUxNRVJldHVyblBhY2tldCgKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyLAorICAgICBQVUNIQVIgICAgICAgICAgIHBSeEJ1ZmVyCisgICApOworI2lmZGVmIF9JQlNTX0JFQUNPTl9TRVFfU1RJQ0tfCitzOCBTZW5kQkNOdWxsRGF0YShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiB3SWR4KTsKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY2MGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKQEAgLTAsMCArMSwxMjI5IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNVE8uQyAtCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgTUFDIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uIGZvciBXODlDMzMgODAyLjExZyBXTEFOIFNUQS4KKy8vCisvLyAgICBUaGUgZm9sbG93aW5nIE1JQiBhdHRyaWJ1dGVzIG9yIGludGVybmFsIHZhcmlhYmxlcyB3aWxsIGJlIGFmZmVjdGVkCisvLyAgICB3aGlsZSB0aGUgTVRPIGlzIGJlaW5nIGV4ZWN1dGVkOgorLy8gICAgICAgZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorLy8gICAgICAgZG90MTFSVFNUaHJlc2hvbGQsCisvLyAgICAgICB0cmFuc21pc3Npb24gcmF0ZSBhbmQgUExDUCBwcmVhbWJsZSB0eXBlLAorLy8gICAgICAgQ0NBIG1vZGUsCisvLyAgICAgICBhbnRlbm5hIGRpdmVyc2l0eS4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgIDIwMDMxMjI3ICBVTjIwIFBldGUgQ2hhbworLy8gICAgICAgICAgICAgICAgICAgICBGaXJzdCBkcmFmdAorLy8gIDIwMDMxMjI5ICAgICAgICAgICBUdXJibyAgICAgICAgICAgICAgICBjb3B5IGZyb20gUEQ0MworLy8gIDIwMDQwMjEwICAgICAgICAgICBLZXZpbiAgICAgICAgICAgICAgICByZXZpc2VkCisvLyAgQ29weXJpZ2h0IChjKSAyMDAzIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCisvLyBEZWNsYXJlIFNRMyB0byByYXRlIGFuZCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCB0YWJsZQorLy8gRGVjbGFyZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZHMgdGFibGUKKyNkZWZpbmUgTVRPX01BWF9TUTNfTEVWRUxTICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1UT19NQVhfRlJBR19USF9MRVZFTFMgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUyAgICAgICAgICAgICAgICAxMgorCit1MTYgTVRPX0ZyYWdfVGhfVGJsW01UT19NQVhfRlJBR19USF9MRVZFTFNdID0KK3sKKyAgICAyNTYsIDM4NCwgNTEyLCA3NjgsIDE1MzYKK307CisKK3U4ICBNVE9fU1EzX0xldmVsW01UT19NQVhfU1EzX0xFVkVMU10gPQoreworICAgIDAsIDI2LCAzMCwgMzIsIDM0LCAzNSwgMzcsIDQyLCA0NCwgNDYsIDU0LCA2MiwgNzgsIDgxCit9OwordTggIE1UT19TUTN0b1JhdGVbTVRPX01BWF9TUTNfTEVWRUxTXSA9Cit7CisgICAgMCwgMSwgMSwgMiwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OwordTggIE1UT19TUTN0b0ZyYWdbTVRPX01BWF9TUTNfTEVWRUxTXSA9Cit7CisgICAgMCwgMiwgMiwgMywgMywgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNAorfTsKKworLy8gT25lIEV4Y2hhbmdlIFRpbWUgdGFibGUKKy8vCit1MTYgTVRPX09uZV9FeGNoYW5nZV9UaW1lX1RibF9sW01UT19NQVhfRlJBR19USF9MRVZFTFNdW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworICAgIHsgMjU1NCwgMTQ3NCwgIDgyMiwgICAgMCwgICAgMCwgIDYzNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgeyAzNTc4LCAxOTg2LCAxMDA5LCAgICAwLCAgICAwLCAgNzI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfSwKKyAgICB7IDQ2MDIsIDI0OTgsIDExOTUsICAgIDAsICAgIDAsICA4MjIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9LAorICAgIHsgNjY1MCwgMzUyMiwgMTU2NywgICAgMCwgICAgMCwgMTAwOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgezEyNzk0LCA2NTk0LCAyNjg0LCAgICAwLCAgICAwLCAxNTY3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfQorfTsKKwordTE2IE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfc1tNVE9fTUFYX0ZSQUdfVEhfTEVWRUxTXVtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKyAgICB7ICAgIDAsIDEyODIsICA2MzAsICA0MDQsICAyODgsICA0NDQsICAyMzIsICAxNzIsICAxNDQsICAxMTYsICAxMDAsICAgOTZ9LAorICAgIHsgICAgMCwgMTc5NCwgIDgxNywgIDU3MiwgIDQwMCwgIDUzNywgIDMxNiwgIDIyOCwgIDE4OCwgIDE0NCwgIDEyNCwgIDExNn0sCisgICAgeyAgICAwLCAyMzA2LCAxMDAzLCAgNzQ0LCAgNTE2LCAgNjMwLCAgNDAwLCAgMjg4LCAgMjI4LCAgMTcyLCAgMTQ0LCAgMTM2fSwKKyAgICB7ICAgIDAsIDMzMzAsIDEzNzUsIDEwODQsICA3NDQsICA4MTcsICA1NzIsICA0MDAsICAzMTYsICAyMjgsICAxODgsICAxNzJ9LAorICAgIHsgICAgMCwgNjQwMiwgMjQ5MiwgMjEwOCwgMTQyNCwgMTM3NSwgMTA4NCwgIDc0MCwgIDU3MiwgIDQwMCwgIDMxNiwgIDI4NH0KK307CisKKyNkZWZpbmUgTVRPX09ORV9FWENIQU5HRV9USU1FKHByZWFtYmxlX3R5cGUsIGZyYWdfdGhfbHZsLCBkYXRhX3JhdGVfbHZsKSBcCisgICAgICAgICAgICAocHJlYW1ibGVfdHlwZSkgPyAgIE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfc1tmcmFnX3RoX2x2bF1bZGF0YV9yYXRlX2x2bF0gOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfbFtmcmFnX3RoX2x2bF1bZGF0YV9yYXRlX2x2bF0KKworLy8gRGVjbGFyZSBkYXRhIHJhdGUgdGFibGUKKy8vVGhlIGZvbGxvd2luZyB0YWJsZSB3aWxsIGJlIGNoYW5nZWQgYXQgYW55dGltZSBpZiB0aGUgb3ByYXRpb24gcmF0ZSBzdXBwb3J0ZWQgYnkgQVAgZG9uJ3QKKy8vbWF0Y2ggdGhlIHRhYmxlCit1OCAgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisgICAgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4Cit9OworCisvL1RoZSBTdGFyZGFyZF9EYXRhX1JhdGVfVGJsIGFuZCBMZXZlbDJQZXJUYmwgdGFibGUgaXMgdXNlZCB0byBpbmRpcmVjdGx5IHJldHJlaXZlIFBFUgorLy9pbmZvcm1hdGlvbiBmcm9tIFJhdGVfUEVSX1RCTAorLy9UaGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBBUCBjYW4gc3VwcG9ydCBmdWxsIHJhdGUgc2V0Lgorc3RhdGljIHU4ICBTdGFyZGFyZF9EYXRhX1JhdGVfVGJsW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworCTIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOAorfTsKK3N0YXRpYyB1OCAgTGV2ZWwyUGVyVGJsW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKKy8vSG93IG1hbnkga2luZCBvZiB0eCByYXRlIGNhbiBiZSBzdXBwb3J0ZWQgYnkgQVAKKy8vRFRPIHdpbGwgY2hhbmdlIFJhdGUgYmV0d2VlbiBNVE9fRGF0YV9SYXRlX1RibFswXSBhbmQgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwtMV0KK3N0YXRpYyB1OCAgTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgPSBNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFM7CisvL1Ntb290aGVkIFBFUiB0YWJsZSBmb3IgZWFjaCBkaWZmZXJlbnQgUkFURSBiYXNlZCBvbiBwYWNrZXQgbGVuZ3RoIG9mIDE1MTQKK3N0YXRpYyBpbnQgUmF0ZV9QRVJfVEJMWzkxXVtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0geworLy8gICAgICAgIDFNICAgIDJNICAgIDUuNU0gIDExTSAgIDZNICAgIDlNICAgIDEyTSAgICAgMThNICAgIDI0TSAgICAzNk0gICAgNDhNICAgNTRNCisvKiAwJSAgKi97IDkzLCAgIDE3NywgIDQyMCwgIDUzOCwgIDY5MCwgIDc3NCwgIDEwMDEsICAxNDAxLCAgMTc2OCwgIDIzNTgsICAyODM4LCAgMzAzOX0sCisvKiAxJSAgKi97IDkyLCAgIDE3NiwgIDQxNiwgIDUzMywgIDY4MywgIDc2NywgIDk5MiwgICAxMzg5LCAgMTc1MiwgIDIzMzYsICAyODExLCAgMzAxMH0sCisvKiAyJSAgKi97IDkxLCAgIDE3NCwgIDQxMiwgIDUyOCwgIDY3NSwgIDc2MCwgIDk4MywgICAxMzc2LCAgMTczNSwgIDIzMTMsICAyNzgzLCAgMjk3OX0sCisvKiAzJSAgKi97IDkwLCAgIDE3MiwgIDQwNywgIDUyMywgIDY2NywgIDc1MywgIDk3MywgICAxMzYzLCAgMTcxOSwgIDIyOTAsICAyNzU1LCAgMjk0OH0sCisvKiA0JSAgKi97IDkwLCAgIDE3MCwgIDQwMywgIDUxOCwgIDY1OSwgIDc0NiwgIDk2NCwgICAxMzUwLCAgMTcwMSwgIDIyNjYsICAyNzI2LCAgMjkxNn0sCisvKiA1JSAgKi97IDg5LCAgIDE2OSwgIDM5OCwgIDUxMiwgIDY1MSwgIDczOCwgIDk1NCwgICAxMzM2LCAgMTY4NCwgIDIyNDIsICAyNjk2LCAgMjg4NH0sCisvKiA2JSAgKi97IDg4LCAgIDE2NywgIDM5NCwgIDUwNywgIDY0MywgIDczMSwgIDk0NCwgICAxMzIyLCAgMTY2NiwgIDIyMTcsICAyNjY1LCAgMjg1MX0sCisvKiA3JSAgKi97IDg3LCAgIDE2NSwgIDM4OSwgIDUwMiwgIDYzNSwgIDcyMywgIDkzNSwgICAxMzA4LCAgMTY0OCwgIDIxOTIsICAyNjM0LCAgMjgxN30sCisvKiA4JSAgKi97IDg2LCAgIDE2MywgIDM4NCwgIDQ5NywgIDYyNiwgIDcxNiwgIDkyNCwgICAxMjk0LCAgMTYyOSwgIDIxNjYsICAyNjAyLCAgMjc4Mn0sCisvKiA5JSAgKi97IDg1LCAgIDE2MSwgIDM4MCwgIDQ5MSwgIDYxOCwgIDcwOCwgIDkxNCwgICAxMjc5LCAgMTYxMSwgIDIxNDAsICAyNTcwLCAgMjc0N30sCisvKiAxMCUgKi97IDg0LCAgIDE2MCwgIDM3NSwgIDQ4NiwgIDYwOSwgIDcwMCwgIDkwNCwgICAxMjY1LCAgMTU5MSwgIDIxMTMsICAyNTM3LCAgMjcxMX0sCisvKiAxMSUgKi97IDgzLCAgIDE1OCwgIDM3MCwgIDQ4MCwgIDYwMCwgIDY5MiwgIDg5NCwgICAxMjUwLCAgMTU3MiwgIDIwODYsICAyNTAzLCAgMjY3NX0sCisvKiAxMiUgKi97IDgyLCAgIDE1NiwgIDM2NSwgIDQ3NSwgIDU5MiwgIDY4NCwgIDg4MywgICAxMjM0LCAgMTU1MiwgIDIwNTksICAyNDY5LCAgMjYzOH0sCisvKiAxMyUgKi97IDgxLCAgIDE1NCwgIDM2MCwgIDQ2OSwgIDU4MywgIDY3NiwgIDg3MiwgICAxMjE5LCAgMTUzMiwgIDIwMzEsICAyNDM1LCAgMjYwMH0sCisvKiAxNCUgKi97IDgwLCAgIDE1MiwgIDM1NSwgIDQ2NCwgIDU3NCwgIDY2OCwgIDg2MiwgICAxMjA0LCAgMTUxMiwgIDIwMDMsICAyNDAwLCAgMjU2Mn0sCisvKiAxNSUgKi97IDc5LCAgIDE1MCwgIDM1MCwgIDQ1OCwgIDU2NSwgIDY2MCwgIDg1MSwgICAxMTg4LCAgMTQ5MiwgIDE5NzQsICAyMzY1LCAgMjUyNH0sCisvKiAxNiUgKi97IDc4LCAgIDE0OCwgIDM0NSwgIDQ1MywgIDU1NiwgIDY1MiwgIDg0MCwgICAxMTcyLCAgMTQ3MSwgIDE5NDUsICAyMzI5LCAgMjQ4NX0sCisvKiAxNyUgKi97IDc3LCAgIDE0NiwgIDM0MCwgIDQ0NywgIDU0NywgIDY0MywgIDgyOSwgICAxMTU2LCAgMTQ1MCwgIDE5MTYsICAyMjkzLCAgMjQ0Nn0sCisvKiAxOCUgKi97IDc2LCAgIDE0NCwgIDMzNSwgIDQ0MSwgIDUzOCwgIDYzNSwgIDgxOCwgICAxMTQwLCAgMTQyOSwgIDE4ODcsICAyMjU2LCAgMjQwNn0sCisvKiAxOSUgKi97IDc1LCAgIDE0MywgIDMzMCwgIDQzNiwgIDUyOSwgIDYyNywgIDgwNywgICAxMTI0LCAgMTQwOCwgIDE4NTcsICAyMjE5LCAgMjM2Nn0sCisvKiAyMCUgKi97IDc0LCAgIDE0MSwgIDMyNSwgIDQzMCwgIDUyMCwgIDYxOCwgIDc5NSwgICAxMTA3LCAgMTM4NiwgIDE4MjcsICAyMTgyLCAgMjMyNn0sCisvKiAyMSUgKi97IDczLCAgIDEzOSwgIDMyMCwgIDQyNCwgIDUxMCwgIDYxMCwgIDc4NCwgICAxMDkxLCAgMTM2NSwgIDE3OTcsICAyMTQ1LCAgMjI4NX0sCisvKiAyMiUgKi97IDcyLCAgIDEzNywgIDMxNCwgIDQxOCwgIDUwMSwgIDYwMSwgIDc3MiwgICAxMDc0LCAgMTM0MywgIDE3NjYsICAyMTA3LCAgMjI0NH0sCisvKiAyMyUgKi97IDcxLCAgIDEzNSwgIDMwOSwgIDQxMiwgIDQ5MiwgIDU5MiwgIDc2MSwgICAxMDU3LCAgMTMyMSwgIDE3MzYsICAyMDY5LCAgMjIwM30sCisvKiAyNCUgKi97IDcwLCAgIDEzMywgIDMwNCwgIDQwNywgIDQ4MiwgIDU4NCwgIDc0OSwgICAxMDQwLCAgMTI5OSwgIDE3MDUsICAyMDMxLCAgMjE2MX0sCisvKiAyNSUgKi97IDY5LCAgIDEzMSwgIDI5OSwgIDQwMSwgIDQ3MywgIDU3NSwgIDczOCwgICAxMDIzLCAgMTI3NywgIDE2NzQsICAxOTkyLCAgMjEyMH0sCisvKiAyNiUgKi97IDY4LCAgIDEyOSwgIDI5MywgIDM5NSwgIDQ2NCwgIDU2NiwgIDcyNiwgICAxMDA2LCAgMTI1NCwgIDE2NDIsICAxOTUzLCAgMjA3OH0sCisvKiAyNyUgKi97IDY3LCAgIDEyNywgIDI4OCwgIDM4OSwgIDQ1NCwgIDU1NywgIDcxNCwgICA5ODksICAgMTIzMiwgIDE2MTEsICAxOTE1LCAgMjAzNX0sCisvKiAyOCUgKi97IDY2LCAgIDEyNSwgIDI4MywgIDM4MywgIDQ0NSwgIDU0OSwgIDcwMywgICA5NzIsICAgMTIwOSwgIDE1NzksICAxODc2LCAgMTk5M30sCisvKiAyOSUgKi97IDY1LCAgIDEyMywgIDI3OCwgIDM3NywgIDQzNiwgIDU0MCwgIDY5MSwgICA5NTUsICAgMTE4NywgIDE1NDgsICAxODM2LCAgMTk1MX0sCisvKiAzMCUgKi97IDY0LCAgIDEyMSwgIDI3MiwgIDM3MSwgIDQyNiwgIDUzMSwgIDY3OSwgICA5MzcsICAgMTE2NCwgIDE1MTYsICAxNzk3LCAgMTkwOH0sCisvKiAzMSUgKi97IDYzLCAgIDExOSwgIDI2NywgIDM2NSwgIDQxNywgIDUyMiwgIDY2NywgICA5MjAsICAgMTE0MSwgIDE0ODQsICAxNzU4LCAgMTg2Nn0sCisvKiAzMiUgKi97IDYyLCAgIDExNywgIDI2MiwgIDM1OSwgIDQwNywgIDUxMywgIDY1NSwgICA5MDIsICAgMTExOCwgIDE0NTMsICAxNzE5LCAgMTgyM30sCisvKiAzMyUgKi97IDYxLCAgIDExNSwgIDI1NiwgIDM1MywgIDM5OCwgIDUwNCwgIDY0MywgICA4ODUsICAgMTA5NSwgIDE0MjEsICAxNjc5LCAgMTc4MX0sCisvKiAzNCUgKi97IDYwLCAgIDExMywgIDI1MSwgIDM0NywgIDM4OSwgIDQ5NSwgIDYzMSwgICA4NjcsICAgMTA3MiwgIDEzODksICAxNjQwLCAgMTczOH0sCisvKiAzNSUgKi97IDU5LCAgIDExMSwgIDI0NiwgIDM0MSwgIDM3OSwgIDQ4NiwgIDYxOSwgICA4NTAsICAgMTA0OSwgIDEzNTcsICAxNjAwLCAgMTY5NX0sCisvKiAzNiUgKi97IDU4LCAgIDEwOCwgIDI0MCwgIDMzNSwgIDM3MCwgIDQ3NywgIDYwNywgICA4MzIsICAgMTAyNywgIDEzMjUsICAxNTYxLCAgMTY1M30sCisvKiAzNyUgKi97IDU3LCAgIDEwNiwgIDIzNSwgIDMyOSwgIDM2MSwgIDQ2OCwgIDU5NSwgICA4MTUsICAgMTAwNCwgIDEyOTMsICAxNTIyLCAgMTYxMH0sCisvKiAzOCUgKi97IDU2LCAgIDEwNCwgIDIzMCwgIDMyMywgIDM1MSwgIDQ1OSwgIDU4NCwgICA3OTcsICAgOTgxLCAgIDEyNjEsICAxNDgzLCAgMTU2OH0sCisvKiAzOSUgKi97IDU1LCAgIDEwMiwgIDIyNCwgIDMxNywgIDM0MiwgIDQ1MCwgIDU3MiwgICA3ODAsICAgOTU4LCAgIDEyMzAsICAxNDQzLCAgMTUyNn0sCisvKiA0MCUgKi97IDU0LCAgIDEwMCwgIDIxOSwgIDMxMSwgIDMzMywgIDQ0MSwgIDU2MCwgICA3NjIsICAgOTM1LCAgIDExOTgsICAxNDA0LCAgMTQ4NH0sCisvKiA0MSUgKi97IDUzLCAgIDk4LCAgIDIxNCwgIDMwNSwgIDMyNCwgIDQzMiwgIDU0OCwgICA3NDQsICAgOTEyLCAgIDExNjYsICAxMzY2LCAgMTQ0Mn0sCisvKiA0MiUgKi97IDUyLCAgIDk2LCAgIDIwOSwgIDI5OSwgIDMxNSwgIDQyMywgIDUzNiwgICA3MjcsICAgODg5LCAgIDExMzUsICAxMzI3LCAgMTQwMH0sCisvKiA0MyUgKi97IDUxLCAgIDk0LCAgIDIwMywgIDI5MywgIDMwNiwgIDQxNCwgIDUyNCwgICA3MDksICAgODY2LCAgIDExMDQsICAxMjg5LCAgMTM1OH0sCisvKiA0NCUgKi97IDUwLCAgIDkyLCAgIDE5OCwgIDI4NywgIDI5NywgIDQwNSwgIDUxMiwgICA2OTIsICAgODQ0LCAgIDEwNzIsICAxMjUwLCAgMTMxN30sCisvKiA0NSUgKi97IDQ5LCAgIDkwLCAgIDE5MywgIDI4MSwgIDI4OCwgIDM5NiwgIDUwMCwgICA2NzUsICAgODIxLCAgIDEwNDEsICAxMjEyLCAgMTI3Nn0sCisvKiA0NiUgKi97IDQ4LCAgIDg4LCAgIDE4OCwgIDI3NSwgIDI3OSwgIDM4NywgIDQ4OCwgICA2NTcsICAgNzk5LCAgIDEwMTEsICAxMTc0LCAgMTIzNn0sCisvKiA0NyUgKi97IDQ3LCAgIDg2LCAgIDE4MywgIDI2OSwgIDI3MSwgIDM3OCwgIDQ3NiwgICA2NDAsICAgNzc3LCAgIDk4MCwgICAxMTM3LCAgMTE5NX0sCisvKiA0OCUgKi97IDQ2LCAgIDg0LCAgIDE3OCwgIDI2MiwgIDI2MiwgIDM2OSwgIDQ2NCwgICA2MjMsICAgNzU0LCAgIDk0OSwgICAxMTAwLCAgMTE1NX0sCisvKiA0OSUgKi97IDQ1LCAgIDgyLCAgIDE3MywgIDI1NiwgIDI1NCwgIDM2MCwgIDQ1MiwgICA2MDYsICAgNzMyLCAgIDkxOSwgICAxMDYzLCAgMTExNn0sCisvKiA1MCUgKi97IDQ0LCAgIDgwLCAgIDE2OCwgIDI1MSwgIDI0NSwgIDM1MSwgIDQ0MSwgICA1ODksICAgNzEwLCAgIDg4OSwgICAxMDI2LCAgMTA3Nn0sCisvKiA1MSUgKi97IDQzLCAgIDc4LCAgIDE2MywgIDI0NSwgIDIzNywgIDM0MiwgIDQyOSwgICA1NzIsICAgNjg5LCAgIDg2MCwgICA5OTAsICAgMTAzOH0sCisvKiA1MiUgKi97IDQyLCAgIDc2LCAgIDE1OCwgIDIzOSwgIDIyOCwgIDMzMywgIDQxNywgICA1NTUsICAgNjY3LCAgIDgzMCwgICA5NTUsICAgOTk5fSwKKy8qIDUzJSAqL3sgNDEsICAgNzQsICAgMTUzLCAgMjMzLCAgMjIwLCAgMzI0LCAgNDA2LCAgIDUzOCwgICA2NDUsICAgODAxLCAgIDkxOSwgICA5NjF9LAorLyogNTQlICoveyA0MCwgICA3MiwgICAxNDgsICAyMjcsICAyMTIsICAzMTUsICAzOTQsICAgNTIyLCAgIDYyNCwgICA3NzMsICAgODg0LCAgIDkyNH0sCisvKiA1NSUgKi97IDM5LCAgIDcwLCAgIDE0MywgIDIyMSwgIDIwNCwgIDMwNywgIDM4MywgICA1MDUsICAgNjAzLCAgIDc0NCwgICA4NTAsICAgODg3fSwKKy8qIDU2JSAqL3sgMzgsICAgNjgsICAgMTM4LCAgMjE1LCAgMTk2LCAgMjk4LCAgMzcxLCAgIDQ4OSwgICA1ODIsICAgNzE2LCAgIDgxNiwgICA4NTF9LAorLyogNTclICoveyAzNywgICA2NywgICAxMzQsICAyMDksICAxODksICAyODksICAzNjAsICAgNDczLCAgIDU2MiwgICA2ODgsICAgNzgzLCAgIDgxNX0sCisvKiA1OCUgKi97IDM2LCAgIDY1LCAgIDEyOSwgIDIwMywgIDE4MSwgIDI4MSwgIDM0OSwgICA0NTcsICAgNTQxLCAgIDY2MSwgICA3NTAsICAgNzgwfSwKKy8qIDU5JSAqL3sgMzUsICAgNjMsICAgMTI0LCAgMTk3LCAgMTc0LCAgMjcyLCAgMzM4LCAgIDQ0MSwgICA1MjEsICAgNjM0LCAgIDcxNywgICA3NDV9LAorLyogNjAlICoveyAzNCwgICA2MSwgICAxMjAsICAxOTIsICAxNjYsICAyNjQsICAzMjcsICAgNDI1LCAgIDUwMSwgICA2MDgsICAgNjg2LCAgIDcxMn0sCisvKiA2MSUgKi97IDMzLCAgIDU5LCAgIDExNSwgIDE4NiwgIDE1OSwgIDI1NSwgIDMxNiwgICA0MDksICAgNDgyLCAgIDU4MiwgICA2NTUsICAgNjc4fSwKKy8qIDYyJSAqL3sgMzIsICAgNTcsICAgMTExLCAgMTgwLCAgMTUyLCAgMjQ3LCAgMzA1LCAgIDM5NCwgICA0NjIsICAgNTU2LCAgIDYyNCwgICA2NDZ9LAorLyogNjMlICoveyAzMSwgICA1NSwgICAxMDcsICAxNzQsICAxNDUsICAyMzgsICAyOTQsICAgMzc5LCAgIDQ0MywgICA1MzEsICAgNTk0LCAgIDYxNH0sCisvKiA2NCUgKi97IDMwLCAgIDUzLCAgIDEwMiwgIDE2OSwgIDEzOCwgIDIzMCwgIDI4MywgICAzNjQsICAgNDI1LCAgIDUwNiwgICA1NjUsICAgNTgzfSwKKy8qIDY1JSAqL3sgMjksICAgNTIsICAgOTgsICAgMTYzLCAgMTMyLCAgMjIyLCAgMjczLCAgIDM0OSwgICA0MDYsICAgNDgyLCAgIDUzNiwgICA1NTN9LAorLyogNjYlICoveyAyOCwgICA1MCwgICA5NCwgICAxNTgsICAxMjUsICAyMTQsICAyNjIsICAgMzM0LCAgIDM4OCwgICA0NTksICAgNTA4LCAgIDUyM30sCisvKiA2NyUgKi97IDI3LCAgIDQ4LCAgIDkwLCAgIDE1MiwgIDExOSwgIDIwNiwgIDI1MiwgICAzMjAsICAgMzcwLCAgIDQzNiwgICA0ODEsICAgNDk1fSwKKy8qIDY4JSAqL3sgMjYsICAgNDYsICAgODYsICAgMTQ3LCAgMTEzLCAgMTk4LCAgMjQyLCAgIDMwNiwgICAzNTMsICAgNDEzLCAgIDQ1NSwgICA0Njd9LAorLyogNjklICoveyAyNiwgICA0NCwgICA4MiwgICAxNDEsICAxMDcsICAxOTAsICAyMzEsICAgMjkyLCAgIDMzNiwgICAzOTEsICAgNDI5LCAgIDQ0MH0sCisvKiA3MCUgKi97IDI1LCAgIDQzLCAgIDc4LCAgIDEzNiwgIDEwMSwgIDE4MiwgIDIyMSwgICAyNzgsICAgMzE5LCAgIDM3MCwgICA0MDUsICAgNDE0fSwKKy8qIDcxJSAqL3sgMjQsICAgNDEsICAgNzQsICAgMTMwLCAgOTUsICAgMTc0LCAgMjEyLCAgIDI2NSwgICAzMDMsICAgMzUwLCAgIDM4MSwgICAzODl9LAorLyogNzIlICoveyAyMywgICAzOSwgICA3MSwgICAxMjUsICA5MCwgICAxNjcsICAyMDIsICAgMjUyLCAgIDI4NywgICAzMjksICAgMzU4LCAgIDM2NX0sCisvKiA3MyUgKi97IDIyLCAgIDM3LCAgIDY3LCAgIDExOSwgIDg1LCAgIDE1OSwgIDE5MiwgICAyMzksICAgMjcxLCAgIDMxMCwgICAzMzUsICAgMzQyfSwKKy8qIDc0JSAqL3sgMjEsICAgMzYsICAgNjMsICAgMTE0LCAgODAsICAgMTUxLCAgMTgzLCAgIDIyNiwgICAyNTYsICAgMjkxLCAgIDMxNCwgICAzMjB9LAorLyogNzUlICoveyAyMCwgICAzNCwgICA2MCwgICAxMDksICA3NSwgICAxNDQsICAxNzQsICAgMjE0LCAgIDI0MSwgICAyNzMsICAgMjk0LCAgIDI5OH0sCisvKiA3NiUgKi97IDE5LCAgIDMyLCAgIDU3LCAgIDEwNCwgIDcwLCAgIDEzNywgIDE2NCwgICAyMDIsICAgMjI3LCAgIDI1NiwgICAyNzQsICAgMjc4fSwKKy8qIDc3JSAqL3sgMTgsICAgMzEsICAgNTMsICAgOTksICAgNjYsICAgMTMwLCAgMTU1LCAgIDE5MCwgICAyMTMsICAgMjM5LCAgIDI1NiwgICAyNTl9LAorLyogNzglICoveyAxNywgICAyOSwgICA1MCwgICA5NCwgICA2MiwgICAxMjIsICAxNDYsICAgMTc4LCAgIDIwMCwgICAyMjMsICAgMjM4LCAgIDI0MX0sCisvKiA3OSUgKi97IDE2LCAgIDI4LCAgIDQ3LCAgIDg5LCAgIDU4LCAgIDExNSwgIDEzOCwgICAxNjcsICAgMTg3LCAgIDIwOCwgICAyMjIsICAgMjI1fSwKKy8qIDgwJSAqL3sgMTYsICAgMjYsICAgNDQsICAgODQsICAgNTQsICAgMTA5LCAgMTI5LCAgIDE1NiwgICAxNzUsICAgMTk0LCAgIDIwNiwgICAyMDl9LAorLyogODElICoveyAxNSwgICAyNCwgICA0MSwgICA3OSwgICA1MCwgICAxMDIsICAxMjEsICAgMTQ2LCAgIDE2MywgICAxODAsICAgMTkyLCAgIDE5NH0sCisvKiA4MiUgKi97IDE0LCAgIDIzLCAgIDM5LCAgIDc0LCAgIDQ3LCAgIDk1LCAgIDExMywgICAxMzYsICAgMTUxLCAgIDE2NywgICAxNzgsICAgMTgxfSwKKy8qIDgzJSAqL3sgMTMsICAgMjEsICAgMzYsICAgNjksICAgNDQsICAgODksICAgMTA1LCAgIDEyNiwgICAxNDAsICAgMTU1LCAgIDE2NiwgICAxNjl9LAorLyogODQlICoveyAxMiwgICAyMCwgICAzMywgICA2NCwgICA0MSwgICA4MiwgICA5NywgICAgMTE2LCAgIDEzMCwgICAxNDQsICAgMTU1LCAgIDE1OH0sCisvKiA4NSUgKi97IDExLCAgIDE5LCAgIDMxLCAgIDYwLCAgIDM5LCAgIDc2LCAgIDg5LCAgICAxMDcsICAgMTIwLCAgIDEzNCwgICAxNDUsICAgMTQ5fSwKKy8qIDg2JSAqL3sgMTEsICAgMTcsICAgMjksICAgNTUsICAgMzYsICAgNzAsICAgODIsICAgIDk4LCAgICAxMTAsICAgMTI1LCAgIDEzNiwgICAxNDB9LAorLyogODclICoveyAxMCwgICAxNiwgICAyNiwgICA1MSwgICAzNCwgICA2NCwgICA3NSwgICAgOTAsICAgIDEwMiwgICAxMTYsICAgMTI4LCAgIDEzM30sCisvKiA4OCUgKi97IDksICAgIDE0LCAgIDI0LCAgIDQ2LCAgIDMyLCAgIDU4LCAgIDY4LCAgICA4MSwgICAgOTMsICAgIDEwOCwgICAxMjEsICAgMTI4fSwKKy8qIDg5JSAqL3sgOCwgICAgMTMsICAgMjIsICAgNDIsICAgMzEsICAgNTIsICAgNjEsICAgIDc0LCAgICA4NiwgICAgMTAyLCAgIDExNiwgICAxMjR9LAorLyogOTAlICoveyA3LCAgICAxMiwgICAyMSwgICAzNywgICAyOSwgICA0NiwgICA1NCwgICAgNjYsICAgIDc5LCAgICA5NiwgICAgMTEyLCAgIDEyMX0KK307CisKKyNkZWZpbmUgUlNTSUJVRl9OVU0gMTAKKyNkZWZpbmUgUlNTSTJSQVRFX1NJWkUgOQorCitzdGF0aWMgVFhSRVRSWV9SRUMgVHhSYXRlUmVjPXtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFMgLSAxLCAwfTsgICAvL25ldyByZWNvcmQ9PlR4UmF0ZVJlYworc3RhdGljIGludCBUeFJldHJ5UmF0ZTsKKy8vc3RhdGljIGludCBTUTMsIEJTU19QS19DTlQsIE5JRExFU0xPVCwgU0xPVF9DTlQsIElOVEVSRl9DTlQsIEdBUF9DTlQsIERTX0VWTTsKK3N0YXRpYyBzMzIgUlNTSUJ1ZltSU1NJQlVGX05VTV09ey03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MH07CitzdGF0aWMgczMyIFJTU0lTbW9vdGhlZD0tNzAwOworc3RhdGljIGludCBSU1NJQnVmSW5kZXg9MDsKK3N0YXRpYyB1OCBtYXhfcnNzaV9yYXRlOworc3RhdGljIGludCByYXRlX3RibFsxM10gPSB7MCwxLDIsNSwxMSw2LDksMTIsMTgsMjQsMzYsNDgsNTR9OworLy9bV0tDSEVOXXN0YXRpYyBjb3JlX2RhdGFfdCAqcE1UT2NvcmVfZGF0YT1OVUxMOworCitzdGF0aWMgaW50IFRvdGFsVHhQa3QgPSAwOworc3RhdGljIGludCBUb3RhbFR4UGt0UmV0cnkgPSAwOworc3RhdGljIGludCBUeFBrdFBlckFudFszXSA9IHswLDAsMH07CitzdGF0aWMgaW50IFJYUlNTSUFOVFszXSA9ey03MCwtNzAsLTcwfTsKK3N0YXRpYyBpbnQgVHhQa3RSZXRyeVBlckFudFszXSA9IHswLDAsMH07CisvL3N0YXRpYyBpbnQgVHhEb21pbmF0ZUZsYWc9RkFMU0U7CitzdGF0aWMgdTggb2xkX2FudGVubmFbNF09ezEgLDAgLDEgLDB9Oworc3RhdGljIGludCByZXRyeXJhdGVfcmVjW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU107Ly90aGlzIHJlY29yZCB0aGUgcmV0cnkgcmF0ZSBhdCBkaWZmZXJlbnQgZGF0YSByYXRlCisKK3N0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdCA9IDA7CitzdGF0aWMgaW50IFBlcmlvZFRvdGFsVHhQa3RSZXRyeSA9IDA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJczMyIFJTU0k7CisJdTggIFR4UmF0ZTsKK31SU1NJMlJBVEU7CisKK3N0YXRpYyBSU1NJMlJBVEUgUlNTSTJSYXRlVGJsW1JTU0kyUkFURV9TSVpFXSA9Cit7CisJey03NDAsIDEwOH0sICAvLyA1NE0KKwl7LTc2MCwgOTZ9LCAgLy8gNDhNCisJey04MjAsIDcyfSwgIC8vIDM2TQorCXstODUwLCA0OH0sICAvLyAyNE0KKwl7LTg3MCwgMzZ9LCAgLy8gMThNCisJey04OTAsIDI0fSwgIC8vIDEyTQorCXstOTAwLCAxMn0sICAvLyA2TQorCXstOTIwLCAxMX0sIC8vIDUuNU0KKwl7LTk1MCwgNH0sIC8vIDJNCit9Oworc3RhdGljIHU4IHVudG9nZ2xlY291bnQ7CitzdGF0aWMgdTggbGFzdF9yYXRlX2FudDsgLy90aGlzIGlzIHVzZWQgZm9yIGFudGVubmEgYmFja29mZi1oaAorCit1OAlib1NwYXJzZVR4VHJhZmZpYyA9IEZBTFNFOworCit2b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgQW50ZW5uYVRvZ2dsZUluaXRpYXRvcihNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIEFudGVubmFUb2dnbGVTdGF0ZShNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIFR4UHdyQ29udHJvbChNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIEdldEZyZXNoQW50ZW5uYURhdGEoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBUeFJhdGVSZWR1Y3Rpb25DdHJsKE1UT19GVU5DX0lOUFVUKTsKKy8qKiAxLjEuMzEuMTAwMCBUdXJibyBtb2RpZnkgKi8KKy8vdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKGludCB0eXBlKTsKK3ZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShNVE9fRlVOQ19JTlBVVCwgdTggKnBSYXRlQXJyYXksIHU4IEFycmF5U2l6ZSk7Cit2b2lkIE1UT19TZXRUeENvdW50KE1UT19GVU5DX0lOUFVULCB1OCB0MCwgdTggaW5kZXgpOwordm9pZCBNVE9fVHhGYWlsZWQoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBTbW9vdGhSU1NJKHMzMiBuZXdfcnNzaSk7Cit2b2lkIGhhbF9nZXRfZHRvX3BhcmEoTVRPX0ZVTkNfSU5QVVQsIGNoYXIgKmJ1ZmZlcik7Cit1OCBDYWxjTmV3UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTggb2xkX3JhdGUsIHUzMiByZXRyeV9jbnQsIHUzMiB0eF9mcmFnX2NudCk7Cit1OCBHZXRNYXhSYXRlTGV2ZWxGcm9tUlNTSSh2b2lkKTsKK3U4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShNVE9fRlVOQ19JTlBVVCk7CitpbnQgRGl2aWRlKGludCBhLCBpbnQgYik7Cit2b2lkIG11bHRpYWdjKE1UT19GVU5DX0lOUFVULCB1OCBoaWdoX2dhaW5fbW9kZSk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPX0luaXQgLS0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBTZXQgRFRPIFR4IFJhdGUgU2NvcGUgYmVjYXVzZSBkaWZmZXJlbnQgQVAgY291bGQgaGF2ZSBkaWZmZXJlbnQgUmF0ZSBzZXQuCisvLyAgICBBZnRlciBvdXIgc3RhaW9uIGpvaW4gd2l0aCBBUCwgTE0gY29yZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplCisvLyAgICBUeCBSYXRlIHRhYmxlLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBwUmF0ZUFycmF5ICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgVHggUmF0ZSBBcnJheSBieSB0aGUgZm9sbG93aW5nIG9yZGVyCisvLyAgICAgICAgICAgICAgICAgICAgLSAyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgKKy8vICAgICAgICAgICAgICAgICAgICAtIERUTyB3b24ndCBjaGVjayB3aGV0aGVyIHJhdGUgb3JkZXIgaXMgaW52YWxpZCBvciBub3QKKy8vICAgIEFycmF5U2l6ZSAgICAgICAtIFRoZSBhcnJheSBzaXplIHRvIGluZGljYXRlIGhvdyBtYW55IHR4IHJhdGUgd2UgY2FuIGNob29zZQorLy8KKy8vICBzYW1wbGUgY29kZToKKy8vCXsKKy8vCQl1OCBSYXRlQXJyYXlbNF0gPSB7MiwgNCwgMTEsIDIyfTsKKy8vCQlNVE9fU2V0RFRPUmF0ZVJhbmdlKFJhdGVBcnJheSwgNCk7CisvLwl9CisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKE1UT19GVU5DX0lOUFVULHU4ICpwUmF0ZUFycmF5LCB1OCBBcnJheVNpemUpCit7CisJdTgJaSwgaj0wOworCisJZm9yKGk9MDtpPEFycmF5U2l6ZTtpKyspCisJeworCQlpZihwUmF0ZUFycmF5W2ldID09IDIyKQorCQkJYnJlYWs7CisJfQorCWlmKGkgPCBBcnJheVNpemUpIC8vd2UgbmVlZCBhZGp1c3QgdGhlIG9yZGVyIG9mIHJhdGUgbGlzdCBiZWNhdXNlIDExTWJwcyByYXRlIGV4aXN0cworCXsKKwkJZm9yKDtpPjA7aS0tKQorCQl7CisJCQlpZihwUmF0ZUFycmF5W2ktMV0gPD0gMTEpCisJCQkJYnJlYWs7CisJCQlwUmF0ZUFycmF5W2ldID0gcFJhdGVBcnJheVtpLTFdOworCQl9CisJCXBSYXRlQXJyYXlbaV0gPSAyMjsKKwkJTVRPX09GRE1fUkFURV9MRVZFTCgpID0gaTsKKwl9CisJZWxzZQorCXsKKwkJZm9yKGk9MDsgaTxBcnJheVNpemU7IGkrKykKKwkJeworCQkJaWYgKHBSYXRlQXJyYXlbaV0gPj0gMTIpCisJCQkJYnJlYWs7CisJCX0KKwkJTVRPX09GRE1fUkFURV9MRVZFTCgpID0gaTsKKwl9CisKKwlmb3IoaT0wO2k8QXJyYXlTaXplO2krKykKKwl7CisJCU1UT19EYXRhX1JhdGVfVGJsW2ldID0gcFJhdGVBcnJheVtpXTsKKwkJZm9yKDtqPE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUztqKyspCisJCXsKKwkJCWlmKFN0YXJkYXJkX0RhdGFfUmF0ZV9UYmxbal0gPT0gcFJhdGVBcnJheVtpXSkKKwkJCQlicmVhazsKKwkJfQorCQlMZXZlbDJQZXJUYmxbaV0gPSBqOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW01UT106T3AgUmF0ZVslZF06ICVkXG4iLGksIE1UT19EYXRhX1JhdGVfVGJsW2ldKSk7CisJCSNlbmRpZgorCX0KKwlNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCA9IEFycmF5U2l6ZTsKKwlpZiggTVRPX0RBVEEoKS5SYXRlUG9saWN5ICkgLy8gMCBtZWFucyB0aGF0IG5vIHJlZ2lzdHJ5IHNldHRpbmcKKwl7CisJCWlmKCBNVE9fREFUQSgpLlJhdGVQb2xpY3kgPT0gMSApCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IDA7CS8vYXNjZW50CisJCWVsc2UKKwkJCVR4UmF0ZVJlYy50eF9yYXRlID0gTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLTEgOwkvL2Rlc2NlbnQKKwl9CisJZWxzZQorCXsKKwkJaWYoIE1UT19JTklUVFhSQVRFX01PREUgKQorCQkJVHhSYXRlUmVjLnR4X3JhdGUgPSAwOwkvL2FzY2VudAorCQllbHNlCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0xIDsJLy9kZXNjZW50CisJfQorCVR4UmF0ZVJlYy50eF9yZXRyeV9yYXRlID0gMDsKKwkvL3NldCBkZWZhdWx0IHJhdGUgZm9yIGluaXRpYWwgdXNlCisJTVRPX1JBVEVfTEVWRUwoKSA9IFR4UmF0ZVJlYy50eF9yYXRlOworCU1UT19GQUxMQkFDS19SQVRFX0xFVkVMKCkgPSBNVE9fUkFURV9MRVZFTCgpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1UT19Jbml0IC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgSW5pdGlhbGl6ZSBNVE8gcGFyYW1ldGVycy4KKy8vCisvLyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkYXB0ZXIgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBNaW5pcG9ydCBBZGFwdGVyIENvbnRleHQKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKQoreworICAgIGludCBpOworCS8vV0JERUJVRygoIltNVE9dIC0+IE1UT19Jbml0KClcbiIpKTsKKwkvL1tXS0NIRU5dcE1UT2NvcmVfZGF0YSA9IHBjb3JlX2RhdGE7CisvLyAyMDA0MDUxMCBUdXJibyBhZGQgZm9yIGdsb2JhbCB2YXJpYWJsZQorICAgIE1UT19UTVJfQ05UKCkgICAgICAgPSAwOworICAgIE1UT19UT0dHTEVfU1RBVEUoKSAgPSBUT0dHTEVfU1RBVEVfSURMRTsKKyAgICBNVE9fVFhfUkFURV9SRURVQ1RJT05fU1RBVEUoKSA9IFJBVEVfQ0hHU1RBVEVfSURMRTsKKyAgICBNVE9fQkFDS09GRl9UTVIoKSAgID0gMDsKKyAgICBNVE9fTEFTVF9SQVRFKCkgICAgID0gMTE7CisgICAgTVRPX0NPX0VGRklDRU5UKCkgICA9IDA7CisKKyAgICAvL01UT19USF9GSVhBTlQoKSAgICAgPSBNVE9fREVGQVVMVF9USF9GSVhBTlQ7CisgICAgTVRPX1RIX0NOVCgpICAgICAgICA9IE1UT19ERUZBVUxUX1RIX0NOVDsKKyAgICBNVE9fVEhfU1EzKCkgICAgICAgID0gTVRPX0RFRkFVTFRfVEhfU1EzOworICAgIE1UT19USF9JRExFX1NMT1QoKSAgPSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1Q7CisgICAgTVRPX1RIX1BSX0lOVEVSRigpICA9IE1UT19ERUZBVUxUX1RIX1BSX0lOVEVSRjsKKworICAgIE1UT19UTVJfQUdJTkcoKSAgICAgPSBNVE9fREVGQVVMVF9UTVJfQUdJTkc7CisgICAgTVRPX1RNUl9QRVJJT0RJQygpICA9IE1UT19ERUZBVUxUX1RNUl9QRVJJT0RJQzsKKworICAgIC8vW1dLQ0hFTl1NVE9fQ0NBX01PREVfU0VUVVAoKT0gKHU4KSBoYWxfZ2V0X2NjYV9tb2RlKE1UT19IQUwoKSk7CisgICAgLy9bV0tDSEVOXU1UT19DQ0FfTU9ERSgpICAgICAgPSBNVE9fQ0NBX01PREVfU0VUVVAoKTsKKworICAgIC8vTVRPX1BSRUFNQkxFX1RZUEUoKSA9IE1UT19QUkVBTUJMRV9MT05HOworICAgIE1UT19QUkVBTUJMRV9UWVBFKCkgPSBNVE9fUFJFQU1CTEVfU0hPUlQ7ICAgLy8gZm9yIHRlc3QKKworICAgIE1UT19BTlRfU0VMKCkgICAgICAgPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSk7CisgICAgTVRPX0FOVF9NQUMoKSAgICAgICA9IE1UT19BTlRfU0VMKCk7CisgICAgTVRPX0NOVF9BTlQoMCkgICAgICA9IDA7CisgICAgTVRPX0NOVF9BTlQoMSkgICAgICA9IDA7CisgICAgTVRPX1NRX0FOVCgwKSAgICAgICA9IDA7CisgICAgTVRPX1NRX0FOVCgxKSAgICAgICA9IDA7CisgICAgTVRPX0FOVF9ESVZFUlNJVFkoKSA9IE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PTjsKKyAgICAvL0NhcmRTZXRfQW50ZW5uYURpdmVyc2l0eShBZGFwdGVyLCBNVE9fQU5UX0RJVkVSU0lUWSgpKTsKKyAgICAvL1BMTUVTZXRBbnRlbm5hRGl2ZXJzaXR5KCBBZGFwdGVyLCBNVE9fQU5UX0RJVkVSU0lUWSgpKTsKKworICAgIE1UT19BR0lOR19USU1FT1VUKCkgPSAwOy8vTVRPX1RNUl9BR0lORygpIC8gTVRPX1RNUl9QRVJJT0RJQygpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB0aGUgdmFsdWVzIHNldCBieSB1c2VyCisgICAgLy8KKyAgICAvL01UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICA9IDEwOworICAgIE1UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICA9IDA7CisJTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKQk9IE1UT19SQVRFX0xFVkVMKCk7CisgICAgTVRPX0ZSQUdfVEhfTEVWRUwoKSAgICAgICAgID0gNDsKKyAgICAvKiogMS4xLjIzLjEwMDAgVHVyYm8gbW9kaWZ5IGZyb20gLTEgdG8gKzEKKwlNVE9fUlRTX1RIUkVTSE9MRCgpICAgICAgICAgPSBNVE9fRlJBR19USCgpIC0gMTsKKyAgICBNVE9fUlRTX1RIUkVTSE9MRF9TRVRVUCgpICAgPSBNVE9fRlJBR19USCgpIC0gMTsKKwkqLworCU1UT19SVFNfVEhSRVNIT0xEKCkgICAgICAgICA9IE1UT19GUkFHX1RIKCkgKyAxOworICAgIE1UT19SVFNfVEhSRVNIT0xEX1NFVFVQKCkgICA9IE1UT19GUkFHX1RIKCkgKyAxOworICAgIC8vIDEuMS4yMy4xMDAwIFR1cmJvIGFkZCBmb3IgbXRvIGNoYW5nZSBwcmVhbWJsZSBmcm9tIDAgdG8gMQorCU1UT19SQVRFX0NIQU5HRV9FTkFCTEUoKSAgICA9IDE7CisgICAgTVRPX0ZSQUdfQ0hBTkdFX0VOQUJMRSgpICAgID0gMDsgICAgICAgICAgLy8gMS4xLjI5LjEwMDAgVHVyYm8gYWRkIGRvbid0IHN1cHBvcnQgZnJhZworCS8vVGhlIGRlZmF1bHQgdmFsdWQgb2YgQU5URElWX0RFRkFVTFRfT04gd2lsbCBiZSBkZWNpZGVkIGJ5IEVFUFJPTQorCS8vI2lmZGVmIEFOVERJVl9ERUZBVUxUX09OCisgICAgLy9NVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAgPSAxOworCS8vI2Vsc2UKKyAgICAvL01UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICA9IDA7CisJLy8jZW5kaWYKKyAgICBNVE9fUE9XRVJfQ0hBTkdFX0VOQUJMRSgpICAgPSAxOworCU1UT19QUkVBTUJMRV9DSEFOR0VfRU5BQkxFKCk9IDE7CisgICAgTVRPX1JUU19DSEFOR0VfRU5BQkxFKCkgICAgID0gMDsgICAgICAgICAgLy8gMS4xLjI5LjEwMDAgVHVyYm8gYWRkIGRvbid0IHN1cHBvcnQgZnJhZworICAgIC8vIDIwMDQwNTEyIFR1cmJvIGFkZAorCS8vb2xkX2FudGVubmFbMF0gPSAxOworCS8vb2xkX2FudGVubmFbMV0gPSAwOworCS8vb2xkX2FudGVubmFbMl0gPSAxOworCS8vb2xkX2FudGVubmFbM10gPSAwOworCWZvciAoaT0wO2k8TVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTO2krKykKKwkJcmV0cnlyYXRlX3JlY1tpXT01OworCisJTVRPX1RYRkxPV0NPVU5UKCkgPSAwOworCS8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisJLy9NVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCkgPSA1MDsKKwlNVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCkgPSAxMDsKKwlNVE9QQVJBX1JTU0lfVEhfRk9SX0FOVERJVigpID0gMTA7CisJTVRPUEFSQV9UWENPVU5UX1RIX0ZPUl9DQUxDX1JBVEUoKSA9IDUwOworCU1UT1BBUkFfVFhSQVRFX0lOQ19USCgpCT0gMTA7CisJTVRPUEFSQV9UWFJBVEVfREVDX1RIKCkgPSAzMDsKKwlNVE9QQVJBX1RYUkFURV9FUV9USCgpID0gNDA7CisJTVRPUEFSQV9UWFJBVEVfQkFDS09GRigpID0gMTI7CisJTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKSA9IDY7CisJaWYgKCBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTSA9PSAweGZmKQorCXsKKwkJc3dpdGNoKCBNVE9fSEFMKCktPnBoeV90eXBlKQorCQl7CisJCQljYXNlIFJGX0FJUk9IQV8yMjMwOgorCQkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSA0NjsgLy8gTUFYLTggLy8gQEAgT25seSBmb3IgQUwgMjIzMAorCQkJCWJyZWFrOworCQkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKwkJCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IDQ5OworCQkJCWJyZWFrOworCQkJY2FzZSBSRl9XQl8yNDI6CisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSAxMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkZfV0JfMjQyXzE6CisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSAyNDsgLy8gLT4xMCAyMDA2MDMxNi4xIG1vZGlmeQorCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UJLy9mb2xsb3cgdGhlIHNldHRpbmcgZnJvbSBFRVBST00KKwkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTTsKKwloYWxfc2V0X3JmX3Bvd2VyKE1UT19IQUwoKSwgKHU4KU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpKTsKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLy8gRm9yIFJTU0kgdHVybmluZyAyMDA2MDgwOC40IENhbmNlbCBsb2FkIGZyb20gRUVQUk9NCisJTVRPX0RBVEEoKS5SU1NJX2hpZ2ggPSAtNDE7CisJTVRPX0RBVEEoKS5SU1NJX2xvdyA9IC02MDsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLworc3RhdGljIHUzMiBEVE9fUnhfSW5mb1sxM11bM107CitzdGF0aWMgdTMyIERUT19SeENSQ0ZhaWxfSW5mb1sxM11bM107CitzdGF0aWMgdTMyIEFudGVubmFUb2dnbGVCa29mZlRpbWVyPTU7Cit0eXBlZGVmIHN0cnVjdHsKKwlpbnQgUnhSYXRlOworCWludCBSeFJhdGVQa3RzOworCWludCBpbmRleDsKK31SWFJBVEVfQU5UOworUlhSQVRFX0FOVCBSeFJhdGVQZWFrQW50WzNdOworCisjZGVmaW5lIEFOVDAgICAgMAorI2RlZmluZSBBTlQxICAgIDEKKyNkZWZpbmUgT0xEX0FOVCAyCisKK3ZvaWQgU2VhcmNoUGVha1J4UmF0ZShpbnQgaW5kZXgpCit7CisJaW50IGk7CisJUnhSYXRlUGVha0FudFtpbmRleF0uUnhSYXRlUGt0cz0wOworCS8vRmluZCBvdXQgdGhlIGJlc3QgcnggcmF0ZSB3aGljaCBpcyB1c2VkIG9uIGRpZmZlcmVudCBhbnRlbm5hCisJZm9yKGk9MTtpPDEzO2krKykKKwl7CisJCWlmKERUT19SeF9JbmZvW2ldW2luZGV4XSA+ICh1MzIpIFJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZVBrdHMpCisJCXsKKwkJCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZVBrdHMgPSBEVE9fUnhfSW5mb1tpXVtpbmRleF07CisJCQlSeFJhdGVQZWFrQW50W2luZGV4XS5SeFJhdGUgPSByYXRlX3RibFtpXTsKKwkJCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLmluZGV4ID0gaTsKKwkJfQorCX0KK30KKwordm9pZCBSZXNldERUT19SeEluZm8oaW50IGluZGV4LCBNVE9fRlVOQ19JTlBVVCkKK3sKKwlpbnQgaTsKKworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIlJlc2V0RFRPcnhcbiIpKTsKKwkjZW5kaWYKKworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeF9JbmZvW2ldW2luZGV4XSA9IE1UT19IQUwoKS0+cnhfb2tfY291bnRbaV07CisKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdID0gTVRPX0hBTCgpLT5yeF9lcnJfY291bnRbaV07CisKKwlUb3RhbFR4UGt0ID0gMDsKKwlUb3RhbFR4UGt0UmV0cnkgPSAwOworfQorCit2b2lkIEdldERUT19SeEluZm8oaW50IGluZGV4LCBNVE9fRlVOQ19JTlBVVCkKK3sKKwlpbnQgaTsKKworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIkdldERUT3J4XG4iKSk7CisJI2VuZGlmCisKKwkvL1BERUJVRygoIltNVE9dOkRUT19SeF9JbmZvWyVkXT0lZCwgcnhfb2tfY291bnQ9JWRcbiIsIGluZGV4LCBEVE9fUnhfSW5mb1swXVtpbmRleF0sIHBod19kYXRhLT5yeF9va19jb3VudFswXSkpOworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeF9JbmZvW2ldW2luZGV4XSA9IGFicyhNVE9fSEFMKCktPnJ4X29rX2NvdW50W2ldIC0gRFRPX1J4X0luZm9baV1baW5kZXhdKTsKKwlpZihEVE9fUnhfSW5mb1swXVtpbmRleF09PTApIERUT19SeF9JbmZvWzBdW2luZGV4XSA9IDE7CisKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdID0gTVRPX0hBTCgpLT5yeF9lcnJfY291bnRbaV0gLSBEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdOworCisJVHhQa3RQZXJBbnRbaW5kZXhdID0gVG90YWxUeFBrdDsKKwlUeFBrdFJldHJ5UGVyQW50W2luZGV4XSA9IFRvdGFsVHhQa3RSZXRyeTsKKwlUb3RhbFR4UGt0ID0gMDsKKwlUb3RhbFR4UGt0UmV0cnkgPSAwOworfQorCit2b2lkIE91dHB1dERlYnVnSW5mbyhpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQoreworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltISERUT106VG90YWwgUnggKCVkKVx0XHQoJWQpIFxuICIsIERUT19SeF9JbmZvWzBdW2luZGV4MV0sIERUT19SeF9JbmZvWzBdW2luZGV4Ml0pKTsKKyAgICBXQkRFQlVHKCgiW0hIRFRPXTpSRUNFSVZFIFJTU0k6ICglZClcdFx0KCVkKSBcbiAiLCBSWFJTU0lBTlRbaW5kZXgxXSwgUlhSU1NJQU5UW2luZGV4Ml0pKTsKKwlXQkRFQlVHKCgiW0hIRFRPXTpUWCBwYWNrZXQgY29ycmVjdCByYXRlOiAoJWQpJSVcdFx0KCVkKSUlIFxuICIsRGl2aWRlKFR4UGt0UGVyQW50W2luZGV4MV0qMTAwLFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSksIERpdmlkZShUeFBrdFBlckFudFtpbmRleDJdKjEwMCxUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0pKSk7CisJI2VuZGlmCisJeworCQlpbnQgdG1wMSwgdG1wMjsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHggKCVkKVx0XHQoJWQpIFxuICIsIFR4UGt0UGVyQW50W2luZGV4MV0sIFR4UGt0UGVyQW50W2luZGV4Ml0pKTsKKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHggcmV0cnkgKCVkKVx0XHQoJWQpIFxuICIsIFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSwgVHhQa3RSZXRyeVBlckFudFtpbmRleDJdKSk7CisJCSNlbmRpZgorCQl0bXAxID0gVHhQa3RQZXJBbnRbaW5kZXgxXSArIERUT19SeF9JbmZvWzBdW2luZGV4MV07CisJCXRtcDIgPSBUeFBrdFBlckFudFtpbmRleDJdICsgRFRPX1J4X0luZm9bMF1baW5kZXgyXTsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHgrUlggKCVkKVx0XHQoJWQpIFxuICIsIHRtcDEsIHRtcDIpKTsKKwkJI2VuZGlmCisJfQorfQorCit1bnNpZ25lZCBjaGFyIFR4RG9taW5hdGUoaW50IGluZGV4KQoreworCWludCB0bXA7CisKKwl0bXAgPSBUeFBrdFBlckFudFtpbmRleF0gKyBEVE9fUnhfSW5mb1swXVtpbmRleF07CisKKwlpZihEaXZpZGUoVHhQa3RQZXJBbnRbaW5kZXhdKjEwMCwgdG1wKSA+IDQwKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKwordW5zaWduZWQgY2hhciBDbXBUeFJldHJ5UmF0ZShpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQoreworCWludCB0eF9yZXRyeV9yYXRlMSwgdHhfcmV0cnlfcmF0ZTI7CisJdHhfcmV0cnlfcmF0ZTEgPSBEaXZpZGUoKFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSAtIFR4UGt0UGVyQW50W2luZGV4MV0pKjEwMCwgVHhQa3RSZXRyeVBlckFudFtpbmRleDFdKTsKKwl0eF9yZXRyeV9yYXRlMiA9IERpdmlkZSgoVHhQa3RSZXRyeVBlckFudFtpbmRleDJdIC0gVHhQa3RQZXJBbnRbaW5kZXgyXSkqMTAwLCBUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0pOworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltNVE9dOlR4UmV0cnkgQW50MDogKCVkJSUpICBBbnQxOiAoJWQlJSkgXG4gIiwgdHhfcmV0cnlfcmF0ZTEsIHR4X3JldHJ5X3JhdGUyKSk7CisJI2VuZGlmCisKKwlpZih0eF9yZXRyeV9yYXRlMSA+IHR4X3JldHJ5X3JhdGUyKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBHZXRGcmVzaEFudGVubmFEYXRhKE1UT19GVU5DX0lOUFVUKQoreworICAgIHU4ICAgICAgeDsKKworCXggPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSk7CisJLy9oYWxfZ2V0X2Jzc19wa19jbnQoTVRPX0hBTCgpKTsKKwkvL2hhbF9nZXRfZXN0X3NxMyhNVE9fSEFMKCksIDEpOworCW9sZF9hbnRlbm5hWzBdID0geDsKKwkvL2lmIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIGZvciB0aW1lcgorCVJlc2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwlpZihBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcikKKwkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyLS07CisJaWYgKGFicyhsYXN0X3JhdGVfYW50LU1UT19SQVRFX0xFVkVMKCkpPjEpICAvL2JhY2tvZmYgdGltZXIgcmVzZXQKKwkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MDsKKworCWlmIChNVE9fQU5UX0RJVkVSU0lUWSgpICE9IE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PTiB8fAorCQlNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAhPSAxKQorCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTE7CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW0hIRFRPXToqKmxhc3QgZGF0YSByYXRlPSVkLG5vdyBkYXRhIHJhdGU9JWQqKmFudGVubmEgdG9nZ2xlIHRpbWVyPSVkIixsYXN0X3JhdGVfYW50LE1UT19SQVRFX0xFVkVMKCksQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXIpKTsKKwkjZW5kaWYKKwlsYXN0X3JhdGVfYW50PU1UT19SQVRFX0xFVkVMKCk7CisJaWYoQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9PTApCisJeworCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfV0FJVDA7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9dOj09PXN0YXRlIGlzIHN0YXJ0aW5nPT1mb3IgYW50ZW5uYSB0b2dnbGU9PT0iKSk7CisJCSNlbmRpZgorCX0KKwllbHNlCisJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9JRExFOworCisJaWYgKChNVE9fQkFDS09GRl9UTVIoKSE9MCkmJihNVE9fUkFURV9MRVZFTCgpPk1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0gMykpCisJeworCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfSURMRTsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106PT09dGhlIGRhdGEgcmF0ZSBpcyAlZCAoZ29vZClhbmQgd2lsbCBub3QgdG9vZ2xlICA9PT0iLE1UT19EQVRBX1JBVEUoKT4+MSkpOworCQkjZW5kaWYKKwl9CisKKworfQorCitpbnQgV0JfUENSWzJdOyAvL3BhY2tldCBjb3JyZWN0IHJhdGUKKwordm9pZCBBbnRlbm5hVG9nZ2xlU3RhdGUoTVRPX0ZVTkNfSU5QVVQpCit7CisgICAgaW50IGRlY2lkZWFudGZsYWcgPSAwOworCXU4ICAgICAgeDsKKwlzMzIgICAgIHJzc2k7CisKKwlpZihNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAhPSAxKQorCQlyZXR1cm47CisJeCA9IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpKTsKKwlzd2l0Y2goTVRPX1RPR0dMRV9TVEFURSgpKQorCXsKKworCSAgIC8vTWlzc2luZy4uLi4uCisJICAgY2FzZSBUT0dHTEVfU1RBVEVfSURMRToKKwkgY2FzZSBUT0dHTEVfU1RBVEVfQktPRkY6CisJICAgICAgICAgICAgIGJyZWFrOzsKKworCQljYXNlIFRPR0dMRV9TVEFURV9XQUlUMDovLz09PT09PT09CisJICAgICAgICAgICAgICAgR2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwkJCXNtZV9nZXRfcnNzaShNVE9fRlVOQ19JTlBVVF9EQVRBLCAmcnNzaSk7CisJCQlSWFJTU0lBTlRbeF0gPSByc3NpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dICoqd2FpdDA9PT09IENvbGxlY3RpbmcgQW50JWQtLXJzc2k9JWRcbiIsIHgsUlhSU1NJQU5UW3hdKSk7CisJCQkjZW5kaWYKKworCQkJLy9jaGFuZ2UgYW50ZW5uYSBhbmQgcmVzZXQgdGhlIGRhdGEgYXQgY2hhbmdlZCBhbnRlbm5hCisJCQl4ID0gKH54KSAmIDB4MDE7CisJCQlNVE9fQU5UX1NFTCgpID0geDsKKwkJCWhhbF9zZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpLCBNVE9fQU5UX1NFTCgpKTsKKwkJCUxPQ0FMX0FOVEVOTkFfTk8oKSA9IHg7CisKKwkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9XQUlUMTsvL2dvIHRvIHdhaXQxCisJCQlSZXNldERUT19SeEluZm8oeCwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJCQlicmVhazsKKwkJY2FzZSBUT0dHTEVfU1RBVEVfV0FJVDE6Ly89PT09PXdhaXQxCisJCQkvL01UT19DTlRfQU5UKHgpID0gaGFsX2dldF9ic3NfcGtfY250KE1UT19IQUwoKSk7CisJCQkvL1JYUlNTSUFOVFt4XSA9IGhhbF9nZXRfcnNzaShNVE9fSEFMKCkpOworCQkJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKwkJCVJYUlNTSUFOVFt4XSA9IHJzc2k7CisJCQlHZXREVE9fUnhJbmZvKHgsIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dICoqd2FpdDE9PT09IENvbGxlY3RpbmcgQW50JWQtLXJzc2k9JWRcbiIsIHgsUlhSU1NJQU5UW3hdKSk7CisJCQkjZW5kaWYKKwkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9NQUtFREVTSVNJT047CisJCQlicmVhazsKKwkJY2FzZSBUT0dHTEVfU1RBVEVfTUFLRURFU0lTSU9OOgorCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOkFudC0tMC0tLS0tLS0tLS0tLS0tLS0tMS0tLVxuIikpOworCQkJT3V0cHV0RGVidWdJbmZvKEFOVDAsQU5UMSk7CisJCQkjZW5kaWYKKwkJCS8vUERFQlVHKCgiW0hIRFRPXSAqKmRlY2lzaW9uPT09PVxuICIpKTsKKworCQkJLy89PT09PWZvbGxvd2luZyBpcyB0aGUgZGVjaXNpb24gcHJvZHVyY2UKKwkJCS8vCisJCQkvLyAgICBmaXJzdDogY29tcGFyZSB0aGUgcnNzaSBpZiBkaWZmZXJlbmNlID4xMAorCQkJLy8gICAgICAgICAgIHNlbGVjdCB0aGUgbGFyZ2VyIG9uZQorCQkJLy8gICAgICAgICAgICxvdGhlcnMgZ28gdG8gc2Vjb25kCisJCQkvLyAgICBzZWNvbmQ6IGNvbWFwcmUgdGhlIHR4K3J4IHBhY2tldCBjb3VudCBpZiBkaWZmZXJlbmNlID4xMDAKKwkJCS8vICAgICAgICAgICAgdXNlIGxhcmdlciB0b3RhbCBwYWNrZXRzIGFudGVubmEKKwkJCS8vICAgIHRoaXJkOjpjb21wYXJlIHRoZSB0eCBQRVIgaWYgcGFja2V0cz4yMAorCQkJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkaWZmZXJlbmNlID41JSB1c2luZyB0aGUgYmlnZ2VyIG9uZQorCQkJLy8KKwkJCS8vICAgIGZvdXJ0aDpjb21wYXJlIHRoZSBSWCBQRVIgaWYgcGFja2V0cz4yMAorCQkJLy8gICAgICAgICAgICAgICAgICAgIGlmIFBFUiBkaWZmZXJlbmNlIDw1JQorCQkJLy8gICAgICAgICAgICAgICAgICAgdXNpbmcgb2xkIGFudGVubmEKKwkJCS8vCisJCQkvLworCQkJaWYgKGFicyhSWFJTU0lBTlRbQU5UMF0tUlhSU1NJQU5UW0FOVDFdKSA+IE1UT1BBUkFfUlNTSV9USF9GT1JfQU5URElWKCkpLy89PT09cnNzaV90aAorCQkJeworCQkJCWlmIChSWFJTU0lBTlRbQU5UMF0+UlhSU1NJQU5UW0FOVDFdKQorCQkJCXsKKwkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKwkJCQl9CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiU2VsZWN0IGFudGVubmEgYnkgUlNTSVxuIikpOworCQkJCSNlbmRpZgorCQkJfQorCQkJZWxzZSBpZiAgKGFicyhUeFBrdFBlckFudFtBTlQwXSArIERUT19SeF9JbmZvWzBdW0FOVDBdLVR4UGt0UGVyQW50W0FOVDFdLURUT19SeF9JbmZvWzBdW0FOVDFdKTw1MCkvLz09PT09dG90YWwgcGFja2V0X3RoCisJCQl7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiVG90YWwgdHgvcnggaXMgY2xvc2VcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlpZiAoVHhEb21pbmF0ZShBTlQwKSAmJiBUeERvbWluYXRlKEFOVDEpKQorCQkJCXsKKwkJCQkJaWYgKChUeFBrdFBlckFudFtBTlQwXT4xMCkgJiYgKFR4UGt0UGVyQW50W0FOVDFdPjEwKSkvLz09PT10eCBwYWNrZXRfdGgKKwkJCQkJeworCQkJCQkJV0JfUENSW0FOVDBdPURpdmlkZShUeFBrdFBlckFudFtBTlQwXSoxMDAsVHhQa3RSZXRyeVBlckFudFtBTlQwXSk7CisJCQkJCQlXQl9QQ1JbQU5UMV09RGl2aWRlKFR4UGt0UGVyQW50W0FOVDFdKjEwMCxUeFBrdFJldHJ5UGVyQW50W0FOVDFdKTsKKwkJCQkJCWlmIChhYnMoV0JfUENSW0FOVDBdLVdCX1BDUltBTlQxXSk+NSkvLyB0eCBQRVJfdGgKKwkJCQkJCXsKKwkJCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQkJCVdCREVCVUcoKCJEZWNpZGUgYnkgVHggY29ycmVjdCByYXRlXG4iKSk7CisJCQkJCQkJI2VuZGlmCisJCQkJCQkJaWYgKFdCX1BDUltBTlQwXT5XQl9QQ1JbQU5UMV0pCisJCQkJCQkJeworCQkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQwOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlkZWNpZGVhbnRmbGFnPTA7CisJCQkJCQkJdW50b2dnbGVjb3VudCsrOworCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICgoRFRPX1J4X0luZm9bMF1bQU5UMF0+MTApJiYoRFRPX1J4X0luZm9bMF1bQU5UMV0+MTApKS8vcnggcGFja2V0IHRoCisJCQkJeworCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQlXQkRFQlVHKCgiRGVjaWRlIGJ5IFJ4XG4iKSk7CisJCQkJCSNlbmRpZgorCQkJCQlpZiAoYWJzKERUT19SeF9JbmZvWzBdW0FOVDBdIC0gRFRPX1J4X0luZm9bMF1bQU5UMV0pPjUwKQorCQkJCQl7CisJCQkJCQlpZiAoRFRPX1J4X0luZm9bMF1bQU5UMF0gPiBEVE9fUnhfSW5mb1swXVtBTlQxXSkKKwkJCQkJCXsKKwkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJZGVjaWRlYW50ZmxhZz0wOworCQkJCQkJdW50b2dnbGVjb3VudCsrOworCQkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKChUeFBrdFBlckFudFtBTlQwXStEVE9fUnhfSW5mb1swXVtBTlQwXSk+KFR4UGt0UGVyQW50W0FOVDFdK0RUT19SeF9JbmZvWzBdW0FOVDFdKSkvL3VzZSBtb3JlIHBhY2tla3RzCisJCQl7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiZGVjaWRlIGJ5IHRvdGFsIHR4L3J4IDogQU5UIDBcbiIpKTsKKwkJCQkjZW5kaWYKKworCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCJkZWNpZGUgYnkgdG90YWwgdHgvcnggOiBBTlQgMVxuIikpOworCQkJCSNlbmRpZgorCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKworCQkJfQorCQkJLy90aGlzIGlzIGZvcmNlIGFudCB0b2dnbGUKKwkJCWlmIChkZWNpZGVhbnRmbGFnPT0xKQorCQkJCXVudG9nZ2xlY291bnQ9MDsKKworCQkJdW50b2dnbGVjb3VudD11bnRvZ2dsZWNvdW50JTQ7CisJCQlpZiAodW50b2dnbGVjb3VudD09MykgLy9jaGFuZ2UgYW50ZW5uYQorCQkJCU1UT19BTlRfTUFDKCkgPSAoKH5vbGRfYW50ZW5uYVswXSkgJiAweDEpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOj09PT09PT09PT09PT09PT09PXVudG9nZ2xlLWNvdW50PSVkIix1bnRvZ2dsZWNvdW50KSk7CisJCQkjZW5kaWYKKworCisKKworCQkJLy9QREVCVUcoKCJbSEhEVE9dICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipEVE8gRU5BQkxFPSVkIixNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSkpOworCQkJaWYoTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgPT0gMSkKKwkJCXsKKwkJCQkJTVRPX0FOVF9TRUwoKSA9IE1UT19BTlRfTUFDKCk7CisJCQkJCWhhbF9zZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpLCBNVE9fQU5UX1NFTCgpKTsKKwkJCQkJTE9DQUxfQU5URU5OQV9OTygpID0gTVRPX0FOVF9TRUwoKTsKKwkJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQkJV0JERUJVRygoIltISERUT10gPT1kZWNpc2lvbj09KioqKioqKmFudGZsYWc9JWQqKioqKioqKioqKioqKioqKipzZWxlY3RlZCBhbnRlbm5hPSVkXG4iLGRlY2lkZWFudGZsYWcsTVRPX0FOVF9TRUwoKSkpOworCQkJCQkjZW5kaWYKKwkJCX0KKwkJCWlmIChkZWNpZGVhbnRmbGFnKQorCQkJeworCQkJCW9sZF9hbnRlbm5hWzNdPW9sZF9hbnRlbm5hWzJdOy8vc3RvcmUgYW50ZW5uYSBpbmZvCisJCQkJb2xkX2FudGVubmFbMl09b2xkX2FudGVubmFbMV07CisJCQkJb2xkX2FudGVubmFbMV09b2xkX2FudGVubmFbMF07CisJCQkJb2xkX2FudGVubmFbMF09IE1UT19BTlRfTUFDKCk7CisJCQl9CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT106KipvbGQgYW50ZW5uYT1bJWRdWyVkXVslZF1bJWRdXG4iLG9sZF9hbnRlbm5hWzBdLG9sZF9hbnRlbm5hWzFdLG9sZF9hbnRlbm5hWzJdLG9sZF9hbnRlbm5hWzNdKSk7CisJCQkjZW5kaWYKKwkJCWlmIChvbGRfYW50ZW5uYVswXSE9b2xkX2FudGVubmFbMV0pCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MDsKKwkJCWVsc2UgaWYgKG9sZF9hbnRlbm5hWzFdIT1vbGRfYW50ZW5uYVsyXSkKKwkJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0xOworCQkJZWxzZSBpZiAob2xkX2FudGVubmFbMl0hPW9sZF9hbnRlbm5hWzNdKQorCQkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTI7CisJCQllbHNlCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9NDsKKworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOioqYmFjayBvZmYgdGltZXI9JWQiLEFudGVubmFUb2dnbGVCa29mZlRpbWVyKSk7CisJCQkjZW5kaWYKKworCQkJUmVzZXREVE9fUnhJbmZvKE1UT19BTlRfTUFDKCksIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJaWYgKEFudGVubmFUb2dnbGVCa29mZlRpbWVyPT0wICYmIGRlY2lkZWFudGZsYWcpCisJCQkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX1dBSVQwOworCQkJZWxzZQorCQkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9JRExFOworCQkJYnJlYWs7CisJfQorCit9CisKK3ZvaWQgbXVsdGlhZ2MoTVRPX0ZVTkNfSU5QVVQsIHU4IGhpZ2hfZ2Fpbl9tb2RlICkKK3sKKwlzMzIJCXJzc2k7CisJaHdfZGF0YV90CSpwSHdEYXRhID0gTVRPX0hBTCgpOworCisJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKworCWlmKCAoUkZfV0JfMjQyID09IHBId0RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcEh3RGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKwl7CisJCWlmIChoaWdoX2dhaW5fbW9kZT09MSkKKwkJeworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MjIzMCk7CisJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA2QzQzNDQwKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAwQywgMHhGMkYzMjIzMiApOyAvLyA5NDA5MTYgMHhmOGY1MjIzMCApOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDIwLCAweDA0Y2IzNDQwICk7IC8vIDk0MDkxNSAweDA2QzQzNDQwCisJCX0KKwkJZWxzZSBpZiAoaGlnaF9nYWluX21vZGU9PTApCisJCXsKKwkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4RUVFRTAwMEQpOworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNmM0MTQ0MCk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMEMsIDB4RUVFRTAwMEQgKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAyMCwgMHgwNGNiMTQ0MCApOyAvLyA5NDA5MTUgMHgwNmM0MTQ0MAorCQl9CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9BR0NdICoqcnNzaT0lZCwgaGlnaCBnYWluIG1vZGU9JWQiLCByc3NpLCBoaWdoX2dhaW5fbW9kZSkpOworCQkjZW5kaWYKKwl9Cit9CisKK3ZvaWQgVHhQd3JDb250cm9sKE1UT19GVU5DX0lOUFVUKQoreworICAgIHMzMiAgICAgcnNzaTsKKwlod19kYXRhX3QJKnBId0RhdGEgPSBNVE9fSEFMKCk7CisKKwlzbWVfZ2V0X3Jzc2koTVRPX0ZVTkNfSU5QVVRfREFUQSwgJnJzc2kpOworCWlmKCAoUkZfV0JfMjQyID09IHBId0RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcEh3RGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKwl7CisJCXN0YXRpYyB1OCBoaWdoX2dhaW5fbW9kZTsgLy90aGlzIGlzIGZvciB3aW5ib25kIFJGIHN3aXRjaCBMTkEKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGRpZmZlcmVudCByZWdpc3RlciBzZXR0aW5nCisKKwkJaWYgKGhpZ2hfZ2Fpbl9tb2RlPT0xKQorCQl7CisJCQlpZiggcnNzaSA+IE1UT19EQVRBKCkuUlNTSV9oaWdoICkKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUyMjMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQxNjQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0wOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTE4MzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDNFNDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTE7CisJCQl9CisJCX0KKwkJZWxzZSAvL2lmIChoaWdoX2dhaW5fbW9kZT09MCkKKwkJeworCQkJaWYoIHJzc2kgPCBNVE9fREFUQSgpLlJTU0lfbG93ICkKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUxODMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQzRTQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0xOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTIyMzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDE2NDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTA7CisJCQl9CisJCX0KKworCQkvLyBBbHdheXMgaGlnaCBnYWluIDIwMDUxMDE0LiBVc2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvbmx5LgorCQltdWx0aWFnYyhNVE9fRlVOQ19JTlBVVF9EQVRBLCBoaWdoX2dhaW5fbW9kZSk7CisJfQorfQorCisKK3U4IENhbGNOZXdSYXRlKE1UT19GVU5DX0lOUFVULCB1OCBvbGRfcmF0ZSwgdTMyIHJldHJ5X2NudCwgdTMyIHR4X2ZyYWdfY250KQoreworCWludCBpOworCXU4IG5ld19yYXRlOworICAgIHUzMiByZXRyeV9yYXRlOworCWludCBUeFRocm91cHV0MSwgVHhUaHJvdXB1dDIsIFR4VGhyb3VwdXQzLCBCZXN0VGhyb3VwaHQ7CisKKwlpZih0eF9mcmFnX2NudCA8IE1UT1BBUkFfVFhDT1VOVF9USF9GT1JfQ0FMQ19SQVRFKCkpIC8vdG9vIGZldyBwYWNrZXRzIHRyYW5zbWl0CisJeworCQlyZXR1cm4gMHhmZjsKKwl9CisJcmV0cnlfcmF0ZSA9IERpdmlkZShyZXRyeV9jbnQgKiAxMDAsIHR4X2ZyYWdfY250KTsKKworCWlmKHJldHJ5X3JhdGUgPiA5MCkgcmV0cnlfcmF0ZSA9IDkwOyAvL2Fsd2F5cyB0cnVuY2F0ZSB0byA5MCUgZHVlIHRvIGxvb2t1cCB0YWJsZSBzaXplCisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiIyMjIyMgQ3VycmVudCBsZXZlbCA9JWQsIFJldHJ5IGNvdW50ID0lZCwgRnJhZyBjb3VudCA9JWRcbiIsCisJCQkJCQlvbGRfcmF0ZSwgcmV0cnlfY250LCB0eF9mcmFnX2NudCkpOworCVdCREVCVUcoKCIqIyMqIFJldHJ5IHJhdGUgPSVkLCB0aHJvdWdocHV0ID0lZFxuIiwKKwkJCQkJCXJldHJ5X3JhdGUsIFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtvbGRfcmF0ZV0pKTsKKwlXQkRFQlVHKCgiVHhSYXRlUmVjLnR4X3JhdGUgPSVkLCBSZXRyeSByYXRlID0gJWQsIHRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCQkJCVR4UmF0ZVJlYy50eF9yYXRlLCBUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZSwKKwkJCQkJCVJhdGVfUEVSX1RCTFtUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW1R4UmF0ZVJlYy50eF9yYXRlXV0pKTsKKwlXQkRFQlVHKCgib2xkX3JhdGUtMSA9JWQsIFJldHJ5IHJhdGUgPSAlZCwgdGhyb3VnaHB1dCA9ICVkXG4iLAorCQkJCQkJb2xkX3JhdGUtMSwgcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXSwKKwkJCQkJCVJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdXVtvbGRfcmF0ZS0xXSkpOworCVdCREVCVUcoKCJvbGRfcmF0ZSsxID0lZCwgUmV0cnkgcmF0ZSA9ICVkLCB0aHJvdWdocHV0ID0gJWRcbiIsCisJCQkJCQlvbGRfcmF0ZSsxLCByZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdLAorCQkJCQkJUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW29sZF9yYXRlKzFdKSk7CisJI2VuZGlmCisKKwkvL2ZvbGxvd2luZyBpcyBmb3IgcmVjb3JkIHRoZSByZXRyeSByYXRlIGF0IHRoZSBkaWZmZXJlbnQgZGF0YSByYXRlCisJaWYgKGFicyhyZXRyeV9yYXRlLXJldHJ5cmF0ZV9yZWNbb2xkX3JhdGVdKTw1MCkvLy0tLXRoZSBwZXIgVEgKKwkJcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZV0gPSByZXRyeV9yYXRlOyAvL3VwZGF0ZSByZXRyeSByYXRlCisJZWxzZQorCXsKKwkJZm9yIChpPTA7aTxNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbDtpKyspIC8vcmVzZXQgYWxsIHJldHJ5IHJhdGUKKwkJCXJldHJ5cmF0ZV9yZWNbaV09MDsKKwkJcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZV0gPSByZXRyeV9yYXRlOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiUmVzZXQgcmV0cnkgcmF0ZSB0YWJsZVxuIikpOworCQkjZW5kaWYKKwl9CisKKwlpZihUeFJhdGVSZWMudHhfcmF0ZSA+IG9sZF9yYXRlKSAgIC8vRGVjcmVhc2UgVHggUmF0ZQorCXsKKwkJVHhUaHJvdXB1dDEgPSBSYXRlX1BFUl9UQkxbVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtUeFJhdGVSZWMudHhfcmF0ZV1dOworCQlUeFRocm91cHV0MiA9IFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGVdXTsKKwkJaWYoVHhUaHJvdXB1dDEgPiBUeFRocm91cHV0MikKKwkJeworCQkJbmV3X3JhdGUgPSBUeFJhdGVSZWMudHhfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQxOworCQl9CisJCWVsc2UKKwkJeworCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQyOworCQl9CisJCWlmKChvbGRfcmF0ZSA+IDApICYmKHJldHJ5X3JhdGU+TVRPUEFSQV9UWFJBVEVfREVDX1RIKCkpKSAgIC8vTWluIFJhdGUKKwkJeworCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlLTFdXTsKKwkJCWlmKEJlc3RUaHJvdXBodCA8IFR4VGhyb3VwdXQzKQorCQkJeworCQkJCW5ld19yYXRlID0gb2xkX3JhdGUgLSAxOworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIi0tLS0tLS0tXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZihUeFJhdGVSZWMudHhfcmF0ZSA8IG9sZF9yYXRlKSAgLy9JbmNyZWFzZSBUeCBSYXRlCisJeworCQlUeFRocm91cHV0MSA9IFJhdGVfUEVSX1RCTFtUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW1R4UmF0ZVJlYy50eF9yYXRlXV07CisJCVR4VGhyb3VwdXQyID0gUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtvbGRfcmF0ZV1dOworCQlpZihUeFRocm91cHV0MSA+IFR4VGhyb3VwdXQyKQorCQl7CisJCQluZXdfcmF0ZSA9IFR4UmF0ZVJlYy50eF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDE7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXdfcmF0ZSA9IG9sZF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDI7CisJCX0KKwkJaWYgKChvbGRfcmF0ZSA8IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0gMSkmJihyZXRyeV9yYXRlPE1UT1BBUkFfVFhSQVRFX0lOQ19USCgpKSkKKwkJeworCQkJLy9UeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJaWYgKHJldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0gPiBNVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpKQorCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0tTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCWVsc2UKKwkJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQl7CisJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSArIDE7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiKysrKysrKysrK1xuIikpOworCQkJCSNlbmRpZgorCQkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQzOworCQkJfQorCQl9CisJfQorCWVsc2UgIC8vVHggUmF0ZSBubyBjaGFuZ2UKKwl7CisJCVR4VGhyb3VwdXQyID0gUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtvbGRfcmF0ZV1dOworCQluZXdfcmF0ZSA9IG9sZF9yYXRlOworCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MjsKKworCQlpZiAocmV0cnlfcmF0ZSA8TVRPUEFSQV9UWFJBVEVfRVFfVEgoKSkgICAgLy90aCBmb3IgY2hhbmdlIGhpZ2hlciByYXRlCisJCXsKKwkJCWlmKG9sZF9yYXRlIDwgTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLSAxKQorCQkJeworCQkJCS8vVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCQlpZiAocmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXSA+IE1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCkpCisJCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0tTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCQllbHNlCisJCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQkJeworCQkJCQluZXdfcmF0ZSA9IG9sZF9yYXRlICsgMTsKKwkJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJCVdCREVCVUcoKCI9KysrKysrKysrK1xuIikpOworCQkJCQkjZW5kaWYKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQlpZihvbGRfcmF0ZSA+IDApICAgLy9NaW4gUmF0ZQorCQl7CisJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUtMV1dOworCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQl7CisJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSAtIDE7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiPS0tLS0tLS0tXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIUxPQ0FMX0lTX0lCU1NfTU9ERSgpKQorCXsKKwltYXhfcnNzaV9yYXRlID0gR2V0TWF4UmF0ZUxldmVsRnJvbVJTU0koKTsKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbTVRPXTpSU1NJMlJhdGU9JWRcbiIsIE1UT19EYXRhX1JhdGVfVGJsW21heF9yc3NpX3JhdGVdKSk7CisJI2VuZGlmCisJaWYobmV3X3JhdGUgPiBtYXhfcnNzaV9yYXRlKQorCQluZXdfcmF0ZSA9IG1heF9yc3NpX3JhdGU7CisJfQorCisJLy9zYXZlIG5ldyByYXRlOworCVR4UmF0ZVJlYy50eF9yYXRlID0gb2xkX3JhdGU7CisJVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGUgPSAodTgpIHJldHJ5X3JhdGU7CisJVHhSZXRyeVJhdGUgPSByZXRyeV9yYXRlOworCXJldHVybiBuZXdfcmF0ZTsKK30KKwordm9pZCBTbW9vdGhSU1NJKHMzMiBuZXdfcnNzaSkKK3sKKwlSU1NJU21vb3RoZWQgPSBSU1NJU21vb3RoZWQgKyBuZXdfcnNzaSAtIFJTU0lCdWZbUlNTSUJ1ZkluZGV4XTsKKwlSU1NJQnVmW1JTU0lCdWZJbmRleF0gPSBuZXdfcnNzaTsKKwlSU1NJQnVmSW5kZXggPSAoUlNTSUJ1ZkluZGV4ICsgMSkgJSAxMDsKK30KKwordTggR2V0TWF4UmF0ZUxldmVsRnJvbVJTU0kodm9pZCkKK3sKKwl1OCBpOworCXU4IFR4UmF0ZTsKKworCWZvcihpPTA7aTxSU1NJMlJBVEVfU0laRTtpKyspCisJeworCQlpZihSU1NJU21vb3RoZWQgPiBSU1NJMlJhdGVUYmxbaV0uUlNTSSkKKwkJCWJyZWFrOworCX0KKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbTVRPXTpSU1NJPSVkXG4iLCBEaXZpZGUoUlNTSVNtb290aGVkLCAxMCkpKTsKKwkjZW5kaWYKKwlpZihpIDwgUlNTSTJSQVRFX1NJWkUpCisJCVR4UmF0ZSA9IFJTU0kyUmF0ZVRibFtpXS5UeFJhdGU7CisJZWxzZQorCQlUeFJhdGUgPSAyOyAgLy9kaXZpZGVkIGJ5IDIgPSAxTWJwcworCisJZm9yKGk9TVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwtMTtpPjA7aS0tKQorCXsKKwkJaWYoVHhSYXRlID49TVRPX0RhdGFfUmF0ZV9UYmxbaV0pCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgRGVzY3JpcHRpb246CisvLyAgICAgIElmIHdlIGVuYWJsZSBEVE8sIHdlIHdpbGwgaWdub3JlIHRoZSB0eCBjb3VudCB3aXRoIGRpZmZlcmVudCB0eCByYXRlIGZyb20KKy8vICAgICAgRFRPIHJhdGUuIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHdlIGFkanVzdCBEVE8gdHggcmF0ZSwgdGhlcmUgY291bGQgYmUgc29tZQorLy8gICAgICBwYWNrZXRzIGluIHRoZSB0eCBxdWV1ZSB3aXRoIHByZXZpb3VzIHR4IHJhdGUKK3ZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHR4X3JhdGUsIHU4IGluZGV4KQoreworCU1UT19UWEZMT1dDT1VOVCgpKys7CisJaWYgKChNVE9fRU5BQkxFPT0xKSAmJiAoTVRPX1JBVEVfQ0hBTkdFX0VOQUJMRSgpPT0xKSkKKwl7CisJCWlmKHR4X3JhdGUgPT0gTVRPX0RBVEFfUkFURSgpKQorCQl7CisJCQlpZiAoaW5kZXggPT0gMCkKKwkJCXsKKwkJCQlpZiAoYm9TcGFyc2VUeFRyYWZmaWMpCisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gTVRPUEFSQV9QRVJJT0RJQ19DSEVDS19DWUNMRSgpOworCQkJCWVsc2UKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAxOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChpbmRleDw4KQorCQkJCXsKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gaW5kZXg7CisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSA3OworCQkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IDc7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYoTVRPX0RBVEFfUkFURSgpPjQ4ICYmIHR4X3JhdGUgPT00OCkKKwkJey8vQUxGUkVECisJCQlpZiAoaW5kZXg8MykgLy9mb3IgcmVkdWNpaW5nIGRhdGEgcmF0ZSBzY2hlbWUgLAorCQkJCSAgICAgICAgIC8vZG8gbm90IGNhbGN1IGRpZmZlcmVudCBkYXRhIHJhdGUKKwkJCQkJCSAvLzMgaXMgdGhlIHJlZHVjaW5nIGRhdGEgcmF0ZSBhdCByZXRyeQorCQkJeworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IGluZGV4OworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IDM7CisJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAzOworCQkJfQorCisJCX0KKwl9CisJZWxzZQorCXsKKwkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gaW5kZXg7CisJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCX0KKwlUb3RhbFR4UGt0ICsrOworCVRvdGFsVHhQa3RSZXRyeSArPSAoaW5kZXgrMSk7CisKKwlQZXJpb2RUb3RhbFR4UGt0ICsrOworCVBlcmlvZFRvdGFsVHhQa3RSZXRyeSArPSAoaW5kZXgrMSk7Cit9CisKK3U4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShNVE9fRlVOQ19JTlBVVCkKK3sKKwlyZXR1cm4gTVRPX0RBVEFfRkFMTEJBQ0tfUkFURSgpOworfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPX1R4RmFpbGVkIC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgRmFpbHVyZSBvZiB0cmFuc21pdHRpbmcgYSBwYWNrZXQgaW5kaWNhdGVzIHRoYXQgY2VydGFpbiBNVE8gcGFybWV0ZXJzCisvLyAgICBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBOSUMganVzdCBmYWlsZWQKKy8vICAgIHRvIHRyYW5zbWl0IGEgcGFja2V0IG9yIHdoZW4gTVNEVUxpZmVUaW1lIGV4cGlyZWQuCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkYXB0ZXIgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBNaW5pcG9ydCBBZGFwdGVyIENvbnRleHQKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIE1UT19UeEZhaWxlZChNVE9fRlVOQ19JTlBVVCkKK3sKKwlyZXR1cm47Cit9CisKK2ludCBEaXZpZGUoaW50IGEsIGludCBiKQoreworCWlmIChiPT0wKSBiPTE7CisJcmV0dXJuIGEvYjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzkzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaApAQCAtMCwwICsxLDI2NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1UTy5ICisvLworLy8gUmV2aXNpb24gaGlzdG9yeQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICAgICAgIDIwMDMwMTEwICAgIFVOMjAgUGV0ZSBDaGFvCisvLyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJlbGVhc2UKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgX19NVE9fSF9fCisjZGVmaW5lIF9fTVRPX0hfXworCisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX0NOVCAgICAgICAgICAgICAgNQorI2RlZmluZSBNVE9fREVGQVVMVF9USF9TUTMgICAgICAgICAgICAgIDExMiAgLy9PTEQgSVMgMTMgcmVmZXJlbmNlIEpvaG5YdQorI2RlZmluZSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1QgICAgICAgIDE1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX1BSX0lOVEVSRiAgICAgICAgMzAKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVE1SX0FHSU5HICAgICAgICAgICAyNSAgLy8gdW5pdDogc2xvdCB0aW1lICAxMCByZWZlcmVuY2UgSm9oblh1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RNUl9QRVJJT0RJQyAgICAgICAgNSAgIC8vIHVuaXQ6IHNsb3QgdGltZQorCisjZGVmaW5lIE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PRkYgICAgICAgMAorI2RlZmluZSBNVE9fQU5URU5OQV9ESVZFUlNJVFlfT04gICAgICAgIDEKKworLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KKy8vI2RlZmluZSBNVE9fUFJFQU1CTEVfTE9ORyAgICAgICAgICAgICAgIDAKKy8vI2RlZmluZSBNVE9fUFJFQU1CTEVfU0hPUlQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX0xPTkcgICAgICAgICAgICAgICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORworI2RlZmluZSBNVE9fUFJFQU1CTEVfU0hPUlQgICAgICAgICAgICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVAorCit0eXBlZGVmIGVudW0geworICAgIFRPR0dMRV9TVEFURV9JRExFICAgICAgICAgICAgID0gMCwKKyAgICBUT0dHTEVfU1RBVEVfV0FJVDAgICAgICAgICAgICA9IDEsCisgICAgVE9HR0xFX1NUQVRFX1dBSVQxICAgICAgICAgICAgPSAyLAorICAgIFRPR0dMRV9TVEFURV9NQUtFREVTSVNJT04gICAgID0gMywKKwlUT0dHTEVfU1RBVEVfQktPRkYgICAgICAgICAgICA9IDQKK30gVE9HR0xFX1NUQVRFOworCit0eXBlZGVmIGVudW0geworICAgIFJBVEVfQ0hHU1RBVEVfSURMRSAgICAgICAgID0gMCwKKyAgICBSQVRFX0NIR1NUQVRFX0NBTENVTEFURSAgICA9IDEsCisgICAgUkFURV9DSEdTVEFURV9CQUNLT0ZGCSAgID0gMgorfSBUWF9SQVRFX1JFRFVDVElPTl9TVEFURTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBzdHJ1Y3QgX01UT1BhcmFtZXRlcnMgLS0KKy8vCisvLyAgIERlZmluZXMgdGhlIHBhcmFtZXRlcnMgdXNlZCBpbiB0aGUgTUFDIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uIGFsZ29yaXRobQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCBfTVRPX1BBUkFNRVRFUlMKK3sKKwl1OCAgICAgIFRoX0ZpeGFudDsKKwl1OCAgICAgIFRoX0NudDsKKwl1OCAgICAgIFRoX1NRMzsKKwl1OCAgICAgIFRoX0lkbGVTbG90OworCisJdTE2ICAgICBUbXJfQWdpbmc7CisJdTggICAgICBUaF9QckludGVyZjsKKwl1OCAgICAgIFRtcl9QZXJpb2RpYzsKKworCS8vLS0tLS0tLS0tICAgICAgICB3a2NoZW4gYWRkZWQgICAgICAtLS0tLS0tLS0tLS0tCisJdTMyCQlUeEZsb3dDb3VudDsJLy90byBqdWRnZSB3aGF0IGtpbmQgdGhlIHR4IGZsb3coc3BhcnNlIG9yIGJ1c3kpIGlzCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisJdTE2CQlEVE9fUGVyaW9kaWNDaGVja0N5Y2xlOworCXUxNgkJRFRPX1Jzc2lUaEZvckFudERpdjsKKworCXUxNgkJRFRPX1R4Q291bnRUaEZvckNhbGNOZXdSYXRlOworCXUxNgkJRFRPX1R4UmF0ZUluY1RoOworCisJdTE2CQlEVE9fVHhSYXRlRGVjVGg7CisJdTE2CQlEVE9fVHhSYXRlRXFUaDsKKworCXUxNgkJRFRPX1R4UmF0ZUJhY2tPZmY7CisJdTE2CQlEVE9fVHhSZXRyeVJhdGVSZWR1Y2U7CisKKwl1MTYJCURUT19UeFBvd2VySW5kZXg7CS8vMCB+IDMxCisJdTE2CQlyZXNlcnZlZF8xOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwl1OCAgICAgIFBvd2VyQ2hhbmdlRW5hYmxlOworCXU4ICAgICAgQW50RGl2ZXJzaXR5RW5hYmxlOworCXU4ICAgICAgQW50X21hYzsKKwl1OCAgICAgIEFudF9kaXY7CisKKwl1OCAgICAgIENDQV9Nb2RlOworCXU4ICAgICAgQ0NBX01vZGVfU2V0dXA7CisJdTggICAgICBQcmVhbWJsZV9UeXBlOworCXU4ICAgICAgUHJlYW1ibGVDaGFuZ2VFbmFibGU7CisKKwl1OCAgICAgIERhdGFSYXRlTGV2ZWw7CisJdTggICAgICBEYXRhUmF0ZUNoYW5nZUVuYWJsZTsKKwl1OCAgICAgIEZyYWdUaHJlc2hvbGRMZXZlbDsKKwl1OCAgICAgIEZyYWdUaHJlc2hvbGRDaGFuZ2VFbmFibGU7CisKKwl1MTYgICAgIFJUU1RocmVzaG9sZDsKKwl1MTYgICAgIFJUU1RocmVzaG9sZF9TZXR1cDsKKworCXUzMiAgICAgQXZnSWRsZVNsb3Q7CisJdTMyICAgICBQcl9JbnRlcmY7CisJdTMyICAgICBBdmdHYXBCdHduSW50ZXJmOworCisJdTgJICAgUlRTQ2hhbmdlRW5hYmxlOworCXU4ICAgICAgQW50X3NlbDsKKwl1OCAgICAgIGFnaW5nX3RpbWVvdXQ7CisJdTgJICAgcmVzZXJ2ZWRfMjsKKworCXUzMiAgICAgQ250X0FudFsyXTsKKwl1MzIgICAgIFNRX0FudFsyXTsKKworLy8gMjAwNDA1MTAgcmVtb3ZlIGZyb20gZ2xvYmUgdmFpcmFibGUKKwl1MzIgICAgICAgICAgICAgICAgICAgICBUbXJDbnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgQmFja29mZlRtcjsKKwlUT0dHTEVfU1RBVEUgICAgICAgICAgICBUb2dnbGVTdGF0ZTsKKwlUWF9SQVRFX1JFRFVDVElPTl9TVEFURSBUeFJhdGVSZWR1Y3Rpb25TdGF0ZTsKKworCXU4ICAgICAgICAgICAgICAgICAgICAgIExhc3RfUmF0ZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBDb19lZmZpY2VudDsKKwl1OAkJRmFsbGJhY2tSYXRlTGV2ZWw7CisJdTgJCU9mZG1SYXRlTGV2ZWw7CisKKwl1OAkJUmF0ZVBvbGljeTsKKwl1OAkJcmVzZXJ2ZWRfM1szXTsKKworCS8vIEZvciBSU1NJIHR1cm5pbmcKKwlzMzIJCVJTU0lfaGlnaDsKKwlzMzIJCVJTU0lfbG93OworCit9IE1UT19QQVJBTUVURVJTLCAqUE1UT19QQVJBTUVURVJTOworCisKKyNkZWZpbmUgTVRPX0ZVTkNfSU5QVVQgICAgICAgICAgICAgIFBXQjMyX0FEQVBURVIJQWRhcHRlcgorI2RlZmluZSBNVE9fRlVOQ19JTlBVVF9EQVRBICAgICAgICAgQWRhcHRlcgorI2RlZmluZSBNVE9fREFUQSgpICAgICAgICAgICAgICAgICAgKEFkYXB0ZXItPnNNdG9QYXJhKQorI2RlZmluZSBNVE9fSEFMKCkgICAgICAgICAgICAgICAgICAgKCZBZGFwdGVyLT5zSHdEYXRhKQorI2RlZmluZSBNVE9fU0VUX1BSRUFNQkxFX1RZUEUoeCkgICAgLy8gMjAwNDA1MTEgVHVyYm8gbWFyayBMTV9QUkVBTUJMRV9UWVBFKCZwY29yZV9kYXRhLT5sbV9kYXRhKSA9ICh4KQorI2RlZmluZSBNVE9fRU5BQkxFCQkJCQkoQWRhcHRlci0+c0xvY2FsUGFyYS5UeFJhdGVNb2RlID09IFJBVEVfQVVUTykKKyNkZWZpbmUgTVRPX1RYUE9XRVJfRlJPTV9FRVBST00JCShBZGFwdGVyLT5zSHdEYXRhLlBvd2VySW5kZXhGcm9tRUVQUk9NKQorI2RlZmluZSBMT0NBTF9BTlRFTk5BX05PKCkJCQkoQWRhcHRlci0+c0xvY2FsUGFyYS5iQW50ZW5uYU5vKQorI2RlZmluZSBMT0NBTF9JU19DT05ORUNURUQoKQkJKEFkYXB0ZXItPnNMb2NhbFBhcmEud0Nvbm5lY3RlZFNUQWluZGV4ICE9IDApCisjZGVmaW5lIExPQ0FMX0lTX0lCU1NfTU9ERSgpCQkoQWRhcHRlci0+YXNCU1NEZXNjcmlwdEVsZW1lbnRbQWRhcHRlci0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXhdLmJCc3NUeXBlID09IElCU1NfTkVUKQorI2RlZmluZSBNVE9fSU5JVFRYUkFURV9NT0RFCQkJKEFkYXB0ZXItPnNId0RhdGEuU29mdHdhcmVTZXQmMHgyKQkvL2JpdCAxCisvLyAyMDA0MDUxMCBUdXJibyBhZGQKKyNkZWZpbmUgTVRPX1RNUl9DTlQoKSAgICAgICAgICAgICAgIE1UT19EQVRBKCkuVG1yQ250CisjZGVmaW5lIE1UT19UT0dHTEVfU1RBVEUoKSAgICAgICAgICBNVE9fREFUQSgpLlRvZ2dsZVN0YXRlCisjZGVmaW5lIE1UT19UWF9SQVRFX1JFRFVDVElPTl9TVEFURSgpIE1UT19EQVRBKCkuVHhSYXRlUmVkdWN0aW9uU3RhdGUKKyNkZWZpbmUgTVRPX0JBQ0tPRkZfVE1SKCkgICAgICAgICAgIE1UT19EQVRBKCkuQmFja29mZlRtcgorI2RlZmluZSBNVE9fTEFTVF9SQVRFKCkgICAgICAgICAgICAgTVRPX0RBVEEoKS5MYXN0X1JhdGUKKyNkZWZpbmUgTVRPX0NPX0VGRklDRU5UKCkgICAgICAgICAgIE1UT19EQVRBKCkuQ29fZWZmaWNlbnQKKworI2RlZmluZSBNVE9fVEhfQ05UKCkgICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5UaF9DbnQKKyNkZWZpbmUgTVRPX1RIX1NRMygpICAgICAgICAgICAgICAgIE1UT19EQVRBKCkuVGhfU1EzCisjZGVmaW5lIE1UT19USF9JRExFX1NMT1QoKSAgICAgICAgICBNVE9fREFUQSgpLlRoX0lkbGVTbG90CisjZGVmaW5lIE1UT19USF9QUl9JTlRFUkYoKSAgICAgICAgICBNVE9fREFUQSgpLlRoX1BySW50ZXJmCisKKyNkZWZpbmUgTVRPX1RNUl9BR0lORygpICAgICAgICAgICAgIE1UT19EQVRBKCkuVG1yX0FnaW5nCisjZGVmaW5lIE1UT19UTVJfUEVSSU9ESUMoKSAgICAgICAgICBNVE9fREFUQSgpLlRtcl9QZXJpb2RpYworCisjZGVmaW5lIE1UT19QT1dFUl9DSEFOR0VfRU5BQkxFKCkgICBNVE9fREFUQSgpLlBvd2VyQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICBBZGFwdGVyLT5zTG9jYWxQYXJhLmJvQW50ZW5uYURpdmVyc2l0eQorI2RlZmluZSBNVE9fQU5UX01BQygpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5BbnRfbWFjCisjZGVmaW5lIE1UT19BTlRfRElWRVJTSVRZKCkgICAgICAgICBNVE9fREFUQSgpLkFudF9kaXYKKyNkZWZpbmUgTVRPX0NDQV9NT0RFKCkgICAgICAgICAgICAgIE1UT19EQVRBKCkuQ0NBX01vZGUKKyNkZWZpbmUgTVRPX0NDQV9NT0RFX1NFVFVQKCkgICAgICAgIE1UT19EQVRBKCkuQ0NBX01vZGVfU2V0dXAKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX1RZUEUoKSAgICAgICAgIE1UT19EQVRBKCkuUHJlYW1ibGVfVHlwZQorI2RlZmluZSBNVE9fUFJFQU1CTEVfQ0hBTkdFX0VOQUJMRSgpICAgICAgICAgTVRPX0RBVEEoKS5QcmVhbWJsZUNoYW5nZUVuYWJsZQorCisjZGVmaW5lIE1UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICBNVE9fREFUQSgpLkRhdGFSYXRlTGV2ZWwKKyNkZWZpbmUgTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKQlNVE9fREFUQSgpLkZhbGxiYWNrUmF0ZUxldmVsCisjZGVmaW5lIE1UT19PRkRNX1JBVEVfTEVWRUwoKQkJTVRPX0RBVEEoKS5PZmRtUmF0ZUxldmVsCisjZGVmaW5lIE1UT19SQVRFX0NIQU5HRV9FTkFCTEUoKSAgICBNVE9fREFUQSgpLkRhdGFSYXRlQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19GUkFHX1RIX0xFVkVMKCkgICAgICAgICBNVE9fREFUQSgpLkZyYWdUaHJlc2hvbGRMZXZlbAorI2RlZmluZSBNVE9fRlJBR19DSEFOR0VfRU5BQkxFKCkgICAgTVRPX0RBVEEoKS5GcmFnVGhyZXNob2xkQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19SVFNfVEhSRVNIT0xEKCkgICAgICAgICBNVE9fREFUQSgpLlJUU1RocmVzaG9sZAorI2RlZmluZSBNVE9fUlRTX0NIQU5HRV9FTkFCTEUoKSAgICAgTVRPX0RBVEEoKS5SVFNDaGFuZ2VFbmFibGUKKyNkZWZpbmUgTVRPX1JUU19USFJFU0hPTERfU0VUVVAoKSAgIE1UT19EQVRBKCkuUlRTVGhyZXNob2xkX1NldHVwCisKKyNkZWZpbmUgTVRPX0FWR19JRExFX1NMT1QoKSAgICAgICAgIE1UT19EQVRBKCkuQXZnSWRsZVNsb3QKKyNkZWZpbmUgTVRPX1BSX0lOVEVSRigpICAgICAgICAgICAgIE1UT19EQVRBKCkuUHJfSW50ZXJmCisjZGVmaW5lIE1UT19BVkdfR0FQX0JUV05fSU5URVJGKCkgICBNVE9fREFUQSgpLkF2Z0dhcEJ0d25JbnRlcmYKKworI2RlZmluZSBNVE9fQU5UX1NFTCgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5BbnRfc2VsCisjZGVmaW5lIE1UT19DTlRfQU5UKHgpICAgICAgICAgICAgICBNVE9fREFUQSgpLkNudF9BbnRbKHgpXQorI2RlZmluZSBNVE9fU1FfQU5UKHgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5TUV9BbnRbKHgpXQorI2RlZmluZSBNVE9fQUdJTkdfVElNRU9VVCgpICAgICAgICAgTVRPX0RBVEEoKS5hZ2luZ190aW1lb3V0CisKKworI2RlZmluZSBNVE9fVFhGTE9XQ09VTlQoKQkJCU1UT19EQVRBKCkuVHhGbG93Q291bnQKKy8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisjZGVmaW5lCU1UT1BBUkFfUEVSSU9ESUNfQ0hFQ0tfQ1lDTEUoKQkJTVRPX0RBVEEoKS5EVE9fUGVyaW9kaWNDaGVja0N5Y2xlCisjZGVmaW5lCU1UT1BBUkFfUlNTSV9USF9GT1JfQU5URElWKCkJCU1UT19EQVRBKCkuRFRPX1Jzc2lUaEZvckFudERpdgorI2RlZmluZQlNVE9QQVJBX1RYQ09VTlRfVEhfRk9SX0NBTENfUkFURSgpCU1UT19EQVRBKCkuRFRPX1R4Q291bnRUaEZvckNhbGNOZXdSYXRlCisjZGVmaW5lCU1UT1BBUkFfVFhSQVRFX0lOQ19USCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlSW5jVGgKKyNkZWZpbmUJTVRPUEFSQV9UWFJBVEVfREVDX1RIKCkJCQlNVE9fREFUQSgpLkRUT19UeFJhdGVEZWNUaAorI2RlZmluZSBNVE9QQVJBX1RYUkFURV9FUV9USCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlRXFUaAorI2RlZmluZQlNVE9QQVJBX1RYUkFURV9CQUNLT0ZGKCkJCU1UT19EQVRBKCkuRFRPX1R4UmF0ZUJhY2tPZmYKKyNkZWZpbmUJTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKQkJTVRPX0RBVEEoKS5EVE9fVHhSZXRyeVJhdGVSZWR1Y2UKKyNkZWZpbmUgTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkJCQlNVE9fREFUQSgpLkRUT19UeFBvd2VySW5kZXgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworZXh0ZXJuIHU4ICAgTVRPX0RhdGFfUmF0ZV9UYmxbXTsKK2V4dGVybiB1MTYgIE1UT19GcmFnX1RoX1RibFtdOworCisjZGVmaW5lIE1UT19EQVRBX1JBVEUoKSAgICAgICAgICBNVE9fRGF0YV9SYXRlX1RibFtNVE9fUkFURV9MRVZFTCgpXQorI2RlZmluZSBNVE9fREFUQV9GQUxMQkFDS19SQVRFKCkgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKV0JLy9uZXh0IGxldmVsCisjZGVmaW5lIE1UT19GUkFHX1RIKCkgICAgICAgICAgICBNVE9fRnJhZ19UaF9UYmxbTVRPX0ZSQUdfVEhfTEVWRUwoKV0KKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IHR4X3JhdGU7CisJdTggdHhfcmV0cnlfcmF0ZTsKK30gVFhSRVRSWV9SRUM7CisKK3R5cGVkZWYgc3RydWN0IF9TVEFUSVNUSUNTX0lORk8geworCXUzMiAgIFJhdGU1NE07CisJdTMyICAgUmF0ZTQ4TTsKKwl1MzIgICBSYXRlMzZNOworCXUzMiAgIFJhdGUyNE07CisJdTMyICAgUmF0ZTE4TTsKKwl1MzIgICBSYXRlMTJNOworCXUzMiAgIFJhdGU5TTsKKwl1MzIgICBSYXRlNk07CisJdTMyICAgUmF0ZTExTVM7CisJdTMyICAgUmF0ZTExTUw7CisJdTMyICAgUmF0ZTU1TVM7CisJdTMyICAgUmF0ZTU1TUw7CisJdTMyICAgUmF0ZTJNUzsKKwl1MzIgICBSYXRlMk1MOworCXUzMiAgIFJhdGUxTTsKKwl1MzIgICBSYXRlNTRNT0s7CisJdTMyICAgUmF0ZTQ4TU9LOworCXUzMiAgIFJhdGUzNk1PSzsKKwl1MzIgICBSYXRlMjRNT0s7CisJdTMyICAgUmF0ZTE4TU9LOworCXUzMiAgIFJhdGUxMk1PSzsKKwl1MzIgICBSYXRlOU1PSzsKKwl1MzIgICBSYXRlNk1PSzsKKwl1MzIgICBSYXRlMTFNU09LOworCXUzMiAgIFJhdGUxMU1MT0s7CisJdTMyICAgUmF0ZTU1TVNPSzsKKwl1MzIgICBSYXRlNTVNTE9LOworCXUzMiAgIFJhdGUyTVNPSzsKKwl1MzIgICBSYXRlMk1MT0s7CisJdTMyICAgUmF0ZTFNT0s7CisJdTMyICAgU1EzOworCXMzMiAgIFJTU0lBVkc7CisJczMyICAgUlNTSU1BWDsKKwlzMzIgICBUWFJBVEU7CisJczMyICAgVHhSZXRyeVJhdGU7CisJczMyICAgQlNTX1BLX0NOVDsKKwlzMzIgICBOSURMRVNMT1Q7CisJczMyICAgU0xPVF9DTlQ7CisJczMyICAgSU5URVJGX0NOVDsKKwlzMzIgICBHQVBfQ05UOworCXMzMiAgIERTX0VWTTsKKwlzMzIgICBSY3ZCZWFjb25OdW07CisJczMyICAgUlhSQVRFOworCXMzMiAgIFJ4Qnl0ZXM7CisJczMyICAgVHhCeXRlczsKKwlzMzIgICBBbnRlbm5hOworfSBTVEFUSVNUSUNTX0lORk8sICpQU1RBVElTVElDU19JTkZPOworCisjZW5kaWYgLy9fX01UT19IX18KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGIzZGYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaApAQCAtMCwwICsxLDcgQEAKK2V4dGVybiB2b2lkIE1UT19Jbml0KFBXQjMyX0FEQVBURVIpOworZXh0ZXJuIHZvaWQgTVRPX1BlcmlvZGljVGltZXJFeHBpcmVkKFBXQjMyX0FEQVBURVIpOworZXh0ZXJuIHZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShQV0IzMl9BREFQVEVSLCB1OCAqLCB1OCk7CitleHRlcm4gdTggTVRPX0dldFR4UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTMyIGZwZHVfbGVuKTsKK2V4dGVybiB1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpOworZXh0ZXJuIHZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0ZmY0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgImxpbnV4L3N5c2RlZi5oIgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmE2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpAQCAtMCwwICsxLDE3NTkgQEAKKy8qCisgKiBwaHlfMzAyX2NhbGlicmF0aW9uLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4KKyAqCisgKiBtb2RpZmljYXRpb24gaGlzdG9yeQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAwLjAxLjAwMSwgMjAwMy0wNC0xNiwgS2V2aW4gICAgICBjcmVhdGVkCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqKiogSU5DTFVERSBGSUxFUyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInBoeV9jYWxpYnJhdGlvbi5oIgorCisKKy8qKioqKioqKioqKioqKioqKiogREVCVUcgQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqIExPQ0FMIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTE9PUF9USU1FUyAgICAgIDIwCisjZGVmaW5lIFVTICAgICAgICAgICAgICAxMDAwLy9NSUNST1NFQ09ORAorCisjZGVmaW5lIEFHX0NPTlNUICAgICAgICAwLjYwNzI1MjkzNTAKKyNkZWZpbmUgRklYRUQoWCkgICAgICAgICgoczMyKSgoWCkgKiAzMjc2OC4wKSkKKyNkZWZpbmUgREVHMlJBRChYKSAgICAgIDAuMDE3NDUzICogKFgpCisKKy8qKioqKioqKioqKioqKioqKiogTE9DQUwgVFlQRSBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzMzIgICAgICAgICBmaXhlZDsgLyogMTYuMTYgZml4ZWQtcG9pbnQgKi8KKworc3RhdGljIGNvbnN0IGZpeGVkIEFuZ2xlc1tdPQoreworICAgIEZJWEVEKERFRzJSQUQoNDUuMCkpLCAgICBGSVhFRChERUcyUkFEKDI2LjU2NSkpLCAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCisgICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksIEZJWEVEKERFRzJSQUQoMy41NzYzMykpLCBGSVhFRChERUcyUkFEKDEuNzg5OTEpKSwKKyAgICBGSVhFRChERUcyUkFEKDAuODk1MTc0KSksRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLEZJWEVEKERFRzJSQUQoMC4yMjM4MTEpKSwKKyAgICBGSVhFRChERUcyUkFEKDAuMTExOTA2KSksRklYRUQoREVHMlJBRCgwLjA1NTk1MykpLEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQorfTsKKworLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKiovCisvL3ZvaWQgICAgX3BoeV9yZl93cml0ZV9kZWxheShod19kYXRhX3QgKnBod19kYXRhKTsKKy8vdm9pZCAgICBwaHlfaW5pdF9yZihod19kYXRhX3QgKnBod19kYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKiBGVU5DVElPTiBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3MzMiBfczEzX3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIHZhbCA9IChkYXRhICYgMHgwRkZGKTsKKworICAgIGlmICgoZGF0YSAmIEJJVCgxMikpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRjAwMDsKKyAgICB9CisKKyAgICByZXR1cm4gKChzMzIpIHZhbCk7Cit9CisKK3UzMiBfczMyX3RvX3MxMyhzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gNDA5NSkKKyAgICB7CisgICAgICAgIGRhdGEgPSA0MDk1OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTQwOTYpCisgICAgeworICAgICAgICBkYXRhID0gLTQwOTY7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MUZGRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zNF90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MDAwNyk7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoMykpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkZGODsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zNChzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gNykKKyAgICB7CisgICAgICAgIGRhdGEgPSA3OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTgpCisgICAgeworICAgICAgICBkYXRhID0gLTg7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MDAwRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zNV90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MDAwRik7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoNCkpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkZGMDsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zNShzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gMTUpCisgICAgeworICAgICAgICBkYXRhID0gMTU7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtMTYpCisgICAgeworICAgICAgICBkYXRhID0gLTE2OworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDAwMUY7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfczZfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHMzMiAgICAgdmFsOworCisgICAgdmFsID0gKGRhdGEgJiAweDAwMUYpOworCisgICAgaWYgKChkYXRhICYgQklUKDUpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkZGRTA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKwordTMyIF9zMzJfdG9fczYoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDMxKQorICAgIHsKKyAgICAgICAgZGF0YSA9IDMxOworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTMyKQorICAgIHsKKyAgICAgICAgZGF0YSA9IC0zMjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMDNGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX3M5X3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICBzMzIgICAgIHZhbDsKKworICAgIHZhbCA9IGRhdGEgJiAweDAwRkY7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoOCkpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkYwMDsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zOShzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gMjU1KQorICAgIHsKKyAgICAgICAgZGF0YSA9IDI1NTsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC0yNTYpCisgICAgeworICAgICAgICBkYXRhID0gLTI1NjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMUZGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX2Zsb29yKHMzMiBuKQoreworICAgIGlmIChuID4gMCkKKyAgICB7CisgICAgICAgIG4gKz0gNTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbiAtPSA1OworICAgIH0KKworICAgIHJldHVybiAobi8xMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCisvLyBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7CisvLyBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7Cit1MzIgX3NxcnQodTMyIHNxc3VtKQoreworICAgIHUzMiAgICAgc3FfcnQ7CisKKyAgICBpbnQgICAgIGcwLCBnMSwgZzIsIGczLCBnNDsKKyAgICBpbnQgICAgIHNlZWQ7CisgICAgaW50ICAgICBuZXh0OworICAgIGludCAgICAgc3RlcDsKKworICAgIGc0ID0gIHNxc3VtIC8gMTAwMDAwMDAwOworICAgIGczID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwKSAvMTAwMDAwMDsKKyAgICBnMiA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDApIC8xMDAwMDsKKyAgICBnMSA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCkgLzEwMDsKKyAgICBnMCA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCAtIGcxKjEwMCk7CisKKyAgICBuZXh0ID0gZzQ7CisgICAgc3RlcCA9IDA7CisgICAgc2VlZCA9IDA7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgCXN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc2VlZCAqIDEwMDAwOworICAgIG5leHQgPSAobmV4dC0oc2VlZCpzdGVwKSkqMTAwICsgZzM7CisKKyAgICBzdGVwID0gMDsKKyAgICBzZWVkID0gMiAqIHNlZWQgKiAxMDsKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXAgKiAxMDAwOworICAgIG5leHQgPSAobmV4dCAtIHNlZWQgKiBzdGVwKSAqIDEwMCArIGcyOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgICAgIHN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTAwOworICAgIG5leHQgPSAobmV4dCAtIHNlZWQgKiBzdGVwKSAqIDEwMCArIGcxOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXAgKiAxMDsKKyAgICBuZXh0ID0gKG5leHQgLSBzZWVkKiBzdGVwKSAqIDEwMCArIGcwOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXA7CisKKyAgICByZXR1cm4gc3FfcnQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBfc2luX2NvcyhzMzIgYW5nbGUsIHMzMiAqc2luLCBzMzIgKmNvcykKK3sKKyAgICBmaXhlZCAgICAgICBYLCBZLCBUYXJnZXRBbmdsZSwgQ3VyckFuZ2xlOworICAgIHVuc2lnbmVkICAgIFN0ZXA7CisKKyAgICBYPUZJWEVEKEFHX0NPTlNUKTsgICAgICAvLyBBR19DT05TVCAqIGNvcygwKQorICAgIFk9MDsgICAgICAgICAgICAgICAgICAgIC8vIEFHX0NPTlNUICogc2luKDApCisgICAgVGFyZ2V0QW5nbGU9YWJzKGFuZ2xlKTsKKyAgICBDdXJyQW5nbGU9MDsKKworICAgIGZvciAoU3RlcD0wOyBTdGVwIDwgMTI7IFN0ZXArKykKKyAgICB7CisgICAgICAgIGZpeGVkIE5ld1g7CisKKyAgICAgICAgaWYoVGFyZ2V0QW5nbGUgPiBDdXJyQW5nbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5ld1g9WCAtIChZID4+IFN0ZXApOworICAgICAgICAgICAgWT0oWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYPU5ld1g7CisgICAgICAgICAgICBDdXJyQW5nbGUgKz0gQW5nbGVzW1N0ZXBdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTmV3WD1YICsgKFkgPj4gU3RlcCk7CisgICAgICAgICAgICBZPS0oWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYPU5ld1g7CisgICAgICAgICAgICBDdXJyQW5nbGUgLT0gQW5nbGVzW1N0ZXBdOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFuZ2xlID4gMCkKKyAgICB7CisgICAgICAgICpjb3MgPSBYOworICAgICAgICAqc2luID0gWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKmNvcyA9IFg7CisgICAgICAgICpzaW4gPSAtWTsKKyAgICB9Cit9CisKKwordm9pZCBfcmVzZXRfcnhfY2FsKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICB2YWw7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJdmFsICY9IDB4RkZGRjAwMDA7CisJfQorCWVsc2UgLy8gMm5kLWN1dAorCXsKKwkJdmFsICY9IDB4MDAwMDAzRkY7CisJfQorCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7Cit9CisKKworLy8gKioqKioqKioqKioqZm9yIHdpbmJvbmQgY2FsaWJyYXRpb24qKioqKioqKioKKy8vCisKKy8vCisvLworLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIF9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3sKKyAgICB1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisgICAgdTMyICAgICByZWdfYV9hY3FfY3RybDsKKyAgICB1MzIgICAgIHJlZ19iX2FjcV9jdHJsOworICAgIHUzMiAgICAgdmFsOworCisgICAgUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzFdX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb24oKVxuIikpOworICAgIHBoeV9pbml0X3JmKHBod19kYXRhKTsKKworICAgIC8vIHNldCBjYWxpYnJhdGlvbiBjaGFubmVsCisgICAgaWYoIChSRl9XQl8yNDIgPT0gcGh3X2RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcGh3X2RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisgICAgeworICAgICAgICBpZiAoKGZyZXF1ZW5jeSA+PSAyNDEyKSAmJiAoZnJlcXVlbmN5IDw9IDI0ODQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB3ODlyZjI0MiBjaGFuZ2UgZnJlcXVlbmN5IHRvIDIzOTBNaHoKKyAgICAgICAgICAgIFBIWV9ERUJVRygoIltDQUxdIFc4OVJGMjQyLzExRy9DaGFubmVsPTIzOTBNaHpcbiIpKTsKKwkJCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7CisKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisJeworCisJfQorCisJLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnZhbCk7CisJdmFsICY9IH4oMHgwM0ZGKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgdmFsKTsKKworCS8vIHJlc2V0IHRoZSBUWCBhbmQgUlggSVEgY2FsaWJyYXRpb24gZGF0YQorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAwKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgMCk7CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgMHgzMDMwMzAzMCk7IC8vIElRX0FscGhhIENoYW5nZWQKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJLy8gYi4gVHVybiBvZmYgQkIgUlgKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7CisJcmVnX2FfYWNxX2N0cmwgfD0gTUFTS19BTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCByZWdfYV9hY3FfY3RybCk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJcmVnX2JfYWNxX2N0cmwgfD0gTUFTS19CTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCByZWdfYl9hY3FfY3RybCk7CisKKwkvLyBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCisJLy8gZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KKwkvLyAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CisJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOworCisJdmFsIHw9IE1BU0tfQURDX0RDX0NBTF9TVFI7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsgLy8gKk1VU1QqIHdhaXQgZm9yIGEgd2hpbGUKKworCS8vIGUuIFRoZSByZXN1bHQgYXJlIHNob3duIGluICJhZGNfZGNfY2FsX2lbODowXSBhbmQgYWRjX2RjX2NhbF9xWzg6MF0iCisjaWZkZWYgX0RFQlVHCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19PRkZTRVRfUkVBRCwgJnZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgUkVHX09GRlNFVF9SRUFEID0gMHglMDhYXG4iLCB2YWwpKTsKKworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFkY19kY19jYWxfaSA9ICVkICgweCUwNFgpXG4iLAorCQkJICAgX3M5X3RvX3MzMih2YWwmMHgwMDAwMDFGRiksIHZhbCYweDAwMDAwMUZGKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYWRjX2RjX2NhbF9xID0gJWQgKDB4JTA0WClcbiIsCisJCQkgICBfczlfdG9fczMyKCh2YWwmMHgwMDAzRkUwMCk+PjkpLCAodmFsJjB4MDAwM0ZFMDApPj45KSk7CisjZW5kaWYKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmdmFsKTsKKwl2YWwgJj0gfk1BU0tfQURDX0RDX0NBTF9TVFI7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CisKKwkvLyBmLiBUdXJuIG9uIEJCIFJYCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7CisJcmVnX2FfYWNxX2N0cmwgJj0gfk1BU0tfQU1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOworCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJcmVnX2JfYWNxX2N0cmwgJj0gfk1BU0tfQk1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQl9BQ1FfQ1RSTCwgcmVnX2JfYWNxX2N0cmwpOworCisJLy8gZy4gRW5hYmxlIEFHQworCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOworCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOworCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgcmVnX2RjX2NhbmNlbDsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2k7CisJczMyICAgICBpcWNhbF9pbWFnZV9xOworCXUzMiAgICAgc3FzdW07CisJczMyICAgICBtYWdfMDsKKwlzMzIgICAgIG1hZ18xOworCXMzMiAgICAgZml4X2NhbmNlbF9kY19pID0gMDsKKwl1MzIgICAgIHZhbDsKKwlpbnQgICAgIGxvb3A7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbMl1fdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb24oKVxuIikpOworCisJLy8gYS4gU2V0IHRvICJUWCBjYWxpYnJhdGlvbiBtb2RlIgorCisJLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUUzRkMyKTsKKwkvLzB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0CisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOTAxRDYpOworCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNDhBKTsKKyAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4OTBDKTsKKwkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCisJLy8gYS4gRGlzYWJsZSBBR0MKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnJlZ19hZ2NfY3RybDMpOworCXJlZ19hZ2NfY3RybDMgJj0gfkJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzIHw9IChNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCAmdmFsKTsKKwl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CisKKwkvLyBiLiBzZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0IGlxY2FsX3RvbmVbMzoyXSB0byAwCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCisJLy8gbW9kZT0yLCB0b25lPTAKKwkvL3JlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8Mik7CisKKwkvLyBtb2RlPTIsIHRvbmU9MQorCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyfCgxPDwyKSk7CisKKwkvLyBtb2RlPTIsIHRvbmU9MgorCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MnwoMjw8MikpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb29wKSk7CisKKwkJLy8gYy4KKwkJLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDNGRik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMCA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzA9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18wLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZC4KKwkJcmVnX2RjX2NhbmNlbCB8PSAoMSA8PCBDQU5DRUxfRENfSV9TSElGVCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMSA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzE9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18xLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZS4gQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IERDIG9mZnNldCBjYW5jZWxsYXRpb24gdmFsdWUgZm9yIEkKKwkJaWYgKG1hZ18wICE9IG1hZ18xKQorCQl7CisJCQlmaXhfY2FuY2VsX2RjX2kgPSAobWFnXzAqMTAwMDApIC8gKG1hZ18wKjEwMDAwIC0gbWFnXzEqMTAwMDApOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1hZ18wID09IG1hZ18xKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOworCQkJfQorCisJCQlmaXhfY2FuY2VsX2RjX2kgPSAwOworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogZml4X2NhbmNlbF9kY19pID0gJWQgKDB4JTA0WClcbiIsCisJCQkJICAgZml4X2NhbmNlbF9kY19pLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkpKTsKKworCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIGxvb3AgPj0gMTkgKQorCSAgIGZpeF9jYW5jZWxfZGNfaSA9IDA7CisKKwlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKKwlyZWdfZGNfY2FuY2VsIHw9IChfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkgPDwgQ0FOQ0VMX0RDX0lfU0hJRlQpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisJLy8gZy4KKwlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhKQoreworCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICByZWdfZGNfY2FuY2VsOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX3E7CisJdTMyICAgICBzcXN1bTsKKwlzMzIgICAgIG1hZ18wOworCXMzMiAgICAgbWFnXzE7CisJczMyICAgICBmaXhfY2FuY2VsX2RjX3EgPSAwOworCXUzMiAgICAgdmFsOworCWludCAgICAgbG9vcDsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFszXV90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uKClcbiIpKTsKKwkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOworCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5MDFENik7CisJLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM0OEEpOworICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgwNjg5MEMpOworCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisKKwkvLyBhLiBEaXNhYmxlIEFHQworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CisJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOworCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsICZ2YWwpOworCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKKworCS8vIGEuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCS8vcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9NT0RFKTsKKwlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDMpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb29wKSk7CisKKwkJLy8gYi4KKwkJLy8gcmVzZXQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDAxRik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMCA9IF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzA9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18wLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gYy4KKwkJcmVnX2RjX2NhbmNlbCB8PSAoMSA8PCBDQU5DRUxfRENfUV9TSElGVCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMSA9IF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzE9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18xLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZC4gQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IERDIG9mZnNldCBjYW5jZWxsYXRpb24gdmFsdWUgZm9yIEkKKwkJaWYgKG1hZ18wICE9IG1hZ18xKQorCQl7CisJCQlmaXhfY2FuY2VsX2RjX3EgPSAobWFnXzAqMTAwMDApIC8gKG1hZ18wKjEwMDAwIC0gbWFnXzEqMTAwMDApOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1hZ18wID09IG1hZ18xKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOworCQkJfQorCisJCQlmaXhfY2FuY2VsX2RjX3EgPSAwOworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogZml4X2NhbmNlbF9kY19xID0gJWQgKDB4JTA0WClcbiIsCisJCQkJICAgZml4X2NhbmNlbF9kY19xLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkpKTsKKworCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIGxvb3AgPj0gMTkgKQorCSAgIGZpeF9jYW5jZWxfZGNfcSA9IDA7CisKKwlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKKwlyZWdfZGNfY2FuY2VsIHw9IChfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkgPDwgQ0FOQ0VMX0RDX1FfU0hJRlQpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisKKwkvLyBmLgorCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKK30KKworLy8yMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkKK3U4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwKKwkJCQkJCSAgIHMzMiBhXzJfdGhyZXNob2xkLAorCQkJCQkJICAgczMyIGJfMl90aHJlc2hvbGQpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXMzMiAgICAgaXFfbWFnXzBfdHg7CisJczMyICAgICBpcWNhbF90b25lX2kwOworCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaTsKKwlzMzIgICAgIGlxY2FsX3RvbmVfcTsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgcm90X2lfYjsKKwlzMzIgICAgIHJvdF9xX2I7CisJczMyICAgICB0eF9jYWxfZmx0X2JbNF07CisJczMyICAgICB0eF9jYWxbNF07CisJczMyICAgICB0eF9jYWxfcmVnWzRdOworCXMzMiAgICAgYV8yLCBiXzI7CisJczMyICAgICBzaW5fYiwgc2luXzJiOworCXMzMiAgICAgY29zX2IsIGNvc18yYjsKKwlzMzIgICAgIGRpdmlzb3I7CisJczMyICAgICB0ZW1wMSwgdGVtcDI7CisJdTMyICAgICB2YWw7CisJdTE2ICAgICBsb29wOworCXMzMiAgICAgaXFjYWxfdG9uZV9pX2F2ZyxpcWNhbF90b25lX3FfYXZnOworCXU4ICAgICAgdmVyaWZ5X2NvdW50OworCWludCBjYXB0dXJlX3RpbWU7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcCgpXG4iKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYV8yX3RocmVzaG9sZCA9ICVkXG4iLCBhXzJfdGhyZXNob2xkKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYl8yX3RocmVzaG9sZCA9ICVkXG4iLCBiXzJfdGhyZXNob2xkKSk7CisKKwl2ZXJpZnlfY291bnQgPSAwOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwlsb29wID0gTE9PUF9USU1FUzsKKworCXdoaWxlIChsb29wID4gMCkKKwl7CisJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD5cbiIsIChMT09QX1RJTUVTLWxvb3ArMSkpKTsKKworCQlpcWNhbF90b25lX2lfYXZnPTA7CisJCWlxY2FsX3RvbmVfcV9hdmc9MDsKKwkJaWYoICFod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgMHgwMCkgKSAvLyAyMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIDA7CisJCWZvcihjYXB0dXJlX3RpbWU9MDtjYXB0dXJlX3RpbWU8MTA7Y2FwdHVyZV90aW1lKyspCisJCXsKKwkJCS8vIGEuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKwkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfSVFDQUxfTU9ERTsKKwkJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMik7CisJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDJ8Mjw8Mik7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJLy8gYi4KKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJaXFjYWxfdG9uZV9pMCA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQkJaXFjYWxfdG9uZV9xMCA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kwPSVkLCBpcWNhbF90b25lX3EwPSVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaTAsIGlxY2FsX3RvbmVfcTApKTsKKworCQkJc3FzdW0gPSBpcWNhbF90b25lX2kwKmlxY2FsX3RvbmVfaTAgKworCQkJaXFjYWxfdG9uZV9xMCppcWNhbF90b25lX3EwOworCQkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKKworCQkJLy8gYy4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCS8vIGQuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAzKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQkvLyBlLgorCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQlpcWNhbF90b25lX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJCWlxY2FsX3RvbmVfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kgPSAlZCwgaXFjYWxfdG9uZV9xID0gJWRcbiIsCisJCQlpcWNhbF90b25lX2ksIGlxY2FsX3RvbmVfcSkpOworCQkJaWYoIGNhcHR1cmVfdGltZSA9PSAwKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlxY2FsX3RvbmVfaV9hdmc9KCBpcWNhbF90b25lX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfaSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfcV9hdmc9KCBpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfcSkvY2FwdHVyZV90aW1lOworCQkJfQorCQl9CisKKwkJaXFjYWxfdG9uZV9pID0gaXFjYWxfdG9uZV9pX2F2ZzsKKwkJaXFjYWxfdG9uZV9xID0gaXFjYWxfdG9uZV9xX2F2ZzsKKworCisJCXJvdF9pX2IgPSAoaXFjYWxfdG9uZV9pICogaXFjYWxfdG9uZV9pMCArCisJCQkJICAgaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xMCkgLyAxMDI0OworCQlyb3RfcV9iID0gKGlxY2FsX3RvbmVfaSAqIGlxY2FsX3RvbmVfcTAgKiAoLTEpICsKKwkJCQkgICBpcWNhbF90b25lX3EgKiBpcWNhbF90b25lX2kwKSAvIDEwMjQ7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pX2IgPSAlZCwgcm90X3FfYiA9ICVkXG4iLAorCQkJCSAgIHJvdF9pX2IsIHJvdF9xX2IpKTsKKworCQkvLyBmLgorCQlkaXZpc29yID0gKChpcV9tYWdfMF90eCAqIGlxX21hZ18wX3R4ICogMikvMTAyNCAtIHJvdF9pX2IpICogMjsKKworCQlpZiAoZGl2aXNvciA9PSAwKQorCQl7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIGRpdmlzb3I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCWFfMiA9IChyb3RfaV9iICogMzI3NjgpIC8gZGl2aXNvcjsKKwkJYl8yID0gKHJvdF9xX2IgKiAoLTMyNzY4KSkgLyBkaXZpc29yOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBFUFNJTE9OLzIgPSAlZFxuIiwgYV8yKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIFRIRVRBLzIgICA9ICVkXG4iLCBiXzIpKTsKKworCQlwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyID0gYV8yOworCQlwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMiA9IGJfMjsKKworCQkvL2lmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpCisJCS8vaWYgKChhYnMoYV8yKSA8IDIwMCkgJiYgKGFicyhiXzIpIDwgMjAwKSkKKwkJaWYgKChhYnMoYV8yKSA8IGFfMl90aHJlc2hvbGQpICYmIChhYnMoYl8yKSA8IGJfMl90aHJlc2hvbGQpKQorCQl7CisJCQl2ZXJpZnlfY291bnQrKzsKKworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBWRVJJRlkgT0sgIyAlZCAhIVxuIiwgdmVyaWZ5X2NvdW50KSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiAoRVBTLFRIRVRBKSBPSyAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJdmVyaWZ5X2NvdW50ID0gMDsKKwkJfQorCisJCV9zaW5fY29zKGJfMiwgJnNpbl9iLCAmY29zX2IpOworCQlfc2luX2NvcyhiXzIqMiwgJnNpbl8yYiwgJmNvc18yYik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiLzIpPSVkLCBjb3MoYi8yKT0lZFxuIiwgc2luX2IsIGNvc19iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiKT0lZCwgY29zKGIpPSVkXG4iLCBzaW5fMmIsIGNvc18yYikpOworCisJCWlmIChjb3NfMmIgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBjb3MoYik9MCAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8vIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwCisJCXRlbXAxID0gKDQxOTQzMDQwL2Nvc18yYikqY29zX2I7CisKKwkJLy90ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJdGVtcDIgPSAoNDE5NDMwNDAqNC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKworCQl0eF9jYWxfZmx0X2JbMF0gPSBfZmxvb3IodGVtcDEvKDMyNzY4K2FfMikpOworCQl0eF9jYWxfZmx0X2JbMV0gPSBfZmxvb3IodGVtcDIvKDMyNzY4K2FfMikpOworCQl0eF9jYWxfZmx0X2JbMl0gPSBfZmxvb3IodGVtcDIvKDMyNzY4LWFfMikpOworCQl0eF9jYWxfZmx0X2JbM10gPSBfZmxvb3IodGVtcDEvKDMyNzY4LWFfMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiB0eF9jYWxfZmx0X2JbMF0gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9mbHRfYlsxXSA9ICVkXG4iLCB0eF9jYWxfZmx0X2JbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX2ZsdF9iWzJdID0gJWRcbiIsIHR4X2NhbF9mbHRfYlsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzNdKSk7CisKKwkJdHhfY2FsWzJdID0gdHhfY2FsX2ZsdF9iWzJdOworCQl0eF9jYWxbMl0gPSB0eF9jYWxbMl0gKzM7CisJCXR4X2NhbFsxXSA9IHR4X2NhbFsyXTsKKwkJdHhfY2FsWzNdID0gdHhfY2FsX2ZsdF9iWzNdIC0gMTI4OworCQl0eF9jYWxbMF0gPSAtdHhfY2FsWzNdKzE7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzBdID0gJWRcbiIsIHR4X2NhbFswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMV0gPSAlZFxuIiwgdHhfY2FsWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFsyXSA9ICVkXG4iLCB0eF9jYWxbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzNdID0gJWRcbiIsIHR4X2NhbFszXSkpOworCisJCS8vaWYgKCh0eF9jYWxbMF0gPT0gMCkgJiYgKHR4X2NhbFsxXSA9PSAwKSAmJgorCQkvLyAgICAodHhfY2FsWzJdID09IDApICYmICh0eF9jYWxbM10gPT0gMCkpCisJCS8veworCQkvLyAgICBQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKioqKipcbiIpKTsKKwkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gQ09NUExFVEUgISFcbiIpKTsKKwkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCS8vICAgIHJldHVybiAwOworCQkvL30KKworCQkvLyBnLgorCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXR4X2NhbF9yZWdbMF0gPSBfczRfdG9fczMyKCh2YWwgJiAweEYwMDAwMDAwKSA+PiAyOCk7CisJCQl0eF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwRjAwMDAwMCkgPj4gMjQpOworCQkJdHhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDBGMDAwMDApID4+IDIwKTsKKwkJCXR4X2NhbF9yZWdbM10gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMEYwMDAwKSA+PiAxNik7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJdHhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJCXR4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCQl0eF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQkJdHhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogdHhfY2FsX3JlZ1swXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMV0gPSAlZFxuIiwgdHhfY2FsX3JlZ1sxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzJdID0gJWRcbiIsIHR4X2NhbF9yZWdbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1szXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzNdKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJaWYgKCgodHhfY2FsX3JlZ1swXT09NykgfHwgKHR4X2NhbF9yZWdbMF09PSgtOCkpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXT09NykgfHwgKHR4X2NhbF9yZWdbM109PSgtOCkpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWlmICgoKHR4X2NhbF9yZWdbMF09PTMxKSB8fCAodHhfY2FsX3JlZ1swXT09KC0zMikpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXT09MzEpIHx8ICh0eF9jYWxfcmVnWzNdPT0oLTMyKSkpKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXR4X2NhbFswXSA9IHR4X2NhbFswXSArIHR4X2NhbF9yZWdbMF07CisJCXR4X2NhbFsxXSA9IHR4X2NhbFsxXSArIHR4X2NhbF9yZWdbMV07CisJCXR4X2NhbFsyXSA9IHR4X2NhbFsyXSArIHR4X2NhbF9yZWdbMl07CisJCXR4X2NhbFszXSA9IHR4X2NhbFszXSArIHR4X2NhbF9yZWdbM107CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFwcGx5IHR4X2NhbFswXSA9ICVkXG4iLCB0eF9jYWxbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzFdID0gJWRcbiIsIHR4X2NhbFsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbMl0gPSAlZFxuIiwgdHhfY2FsWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHR4X2NhbFszXSA9ICVkXG4iLCB0eF9jYWxbM10pKTsKKworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczQodHhfY2FsWzBdKSA8PCAyOCl8CisJCQkJCShfczMyX3RvX3M0KHR4X2NhbFsxXSkgPDwgMjQpfAorCQkJCQkoX3MzMl90b19zNCh0eF9jYWxbMl0pIDw8IDIwKXwKKwkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzNdKSA8PCAxNikpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczUodHhfY2FsWzBdKSA8PCAyNyl8CisJCQkJCShfczMyX3RvX3M2KHR4X2NhbFsxXSkgPDwgMjEpfAorCQkJCQkoX3MzMl90b19zNih0eF9jYWxbMl0pIDw8IDE1KXwKKwkJCQkJKF9zMzJfdG9fczUodHhfY2FsWzNdKSA8PCAxMCkpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBUWF9JUV9DQUxJQlJBVElPTiA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkJbG9vcC0tOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIF90eF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICByZWdfYWdjX2N0cmwzOworI2lmZGVmIF9ERUJVRworCXMzMiAgICAgdHhfY2FsX3JlZ1s0XTsKKworI2VuZGlmCisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgdmFsOworCXU4ICAgICAgcmVzdWx0OworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzRdX3R4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKKworCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7CisJLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTlCREQ2KTsgLy8gMjAwNjA2MTIuMS5hIDB4MTkwNUQ2KTsKKwkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzYwQSk7IC8vMHgyNEM2MEEgKGhpZ2ggdGVtcGVyYXR1cmUpCisgICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDM0ODgwQyk7IC8vIDIwMDYwNjEyLjEuYSAweDA2ODkwQyk7CisJLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMCwgKDA8PDI0KXwweEZERjFDMCk7CisJLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZmKS5TZW5kIHRlc3QgcGF0dGVybgorCS8vOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg2ZykuIFNlYXJjaCBSWEdDTCBvcHRpbWFsIHZhbHVlCisJLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZoKS4gQ2FjdWxhdGUgVFgtcGF0aCBJUSBpbWJhbGFuY2UgYW5kIHNldHRpbmcgVFggcGF0aCBJUSBjb21wZW5zYXRpb24gdGFibGUKKwkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7CisKKwlPU19TTEVFUCgzMDAwMCk7IC8vIDIwMDYwNjEyLjEuYSAzMG1zIGRlbGF5LiBBZGQgdGhlIGZvbGxvdyAyIGxpbmVzCisJLy9UbyBhZGp1c3QgVFhWR0EgdG8gZml0IGlxX21hZ18wIHJhbmdlIGZyb20gMTI1MCB+IDE3NTAKKwlhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyggcGh3X2RhdGEgKTsKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTUwLCAxMDApOworCisJaWYgKHJlc3VsdCA+IDApCisJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQl9CisKKwkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMzAwLCAyMDApOworCisJCWlmIChyZXN1bHQgPiAwKQorCQl7CisJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQkJeworCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCX0KKwkJCWVsc2UgLy8gMm5kLWN1dAorCQkJeworCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCX0KKworCQkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNTAwLCA0MDApOworCQkJaWYgKHJlc3VsdCA+IDApCisJCQl7CisJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJCQl7CisJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQkJCX0KKwkJCQllbHNlIC8vIDJuZC1jdXQKKwkJCQl7CisJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQkJCX0KKworCisJCQkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNzAwLCA1MDApOworCisJCQkJaWYgKHJlc3VsdCA+IDApCisJCQkJeworCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uPiAqKioqKioqKioqKioqKlxuIikpOworCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiBGQUlMVVJFICEhXG4iKSk7CisJCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisKKwkJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJCQkJeworCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCQkJfQorCQkJCQllbHNlIC8vIDJuZC1jdXQKKwkJCQkJeworCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCS8vIGcuIEVuYWJsZSBBR0MKKwkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwlyZWdfYWdjX2N0cmwzIHw9IEJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzICY9IH4oTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKyNpZmRlZiBfREVCVUcKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJdHhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4RjAwMDAwMDApID4+IDI4KTsKKwkJdHhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MEYwMDAwMDApID4+IDI0KTsKKwkJdHhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDBGMDAwMDApID4+IDIwKTsKKwkJdHhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwRjAwMDApID4+IDE2KTsKKwl9CisJZWxzZSAvLyAybmQtY3V0CisJeworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOworCQl0eF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQl0eF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQl0eF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQl0eF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCisJfQorCisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogdHhfY2FsX3JlZ1swXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzBdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1sxXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzFdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1syXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzJdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1szXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzNdKSk7CisjZW5kaWYKKworCisJLy8gZm9yIHRlc3QgLSBCRU4KKwkvLyBSRiBDb250cm9sIE92ZXJyaWRlCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUxNiBmYWN0b3IsIHUzMiBmcmVxdWVuY3kpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXMzMiAgICAgaXFjYWxfdG9uZV9pOworCXMzMiAgICAgaXFjYWxfdG9uZV9xOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX3E7CisJczMyICAgICByb3RfdG9uZV9pX2I7CisJczMyICAgICByb3RfdG9uZV9xX2I7CisJczMyICAgICByb3RfaW1hZ2VfaV9iOworCXMzMiAgICAgcm90X2ltYWdlX3FfYjsKKwlzMzIgICAgIHJ4X2NhbF9mbHRfYls0XTsKKwlzMzIgICAgIHJ4X2NhbFs0XTsKKwlzMzIgICAgIHJ4X2NhbF9yZWdbNF07CisJczMyICAgICBhXzIsIGJfMjsKKwlzMzIgICAgIHNpbl9iLCBzaW5fMmI7CisJczMyICAgICBjb3NfYiwgY29zXzJiOworCXMzMiAgICAgdGVtcDEsIHRlbXAyOworCXUzMiAgICAgdmFsOworCXUxNiAgICAgbG9vcDsKKworCXUzMiAgICAgcHdyX3RvbmU7CisJdTMyICAgICBwd3JfaW1hZ2U7CisJdTggICAgICB2ZXJpZnlfY291bnQ7CisKKwlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLGlxY2FsX2ltYWdlX3FfYXZnOworCXUxNgkJY2FwdHVyZV90aW1lOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uX2xvb3AoKVxuIikpOworCVBIWV9ERUJVRygoIltDQUxdICoqIGZhY3RvciA9ICVkXG4iLCBmYWN0b3IpKTsKKworCisvLyBSRiBDb250cm9sIE92ZXJyaWRlCisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsICZ2YWwpOworCXZhbCB8PSBCSVQoMTkpOworCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCB2YWwpOworCisvLyBSRl9DdHJsCisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsICZ2YWwpOworCXZhbCB8PSBCSVQoMCk7CisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsIHZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gKiogUkZfQ1RSTCgweEU0KSA9IDB4JTA4WCIsIHZhbCkpOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4NDQ0NDQ0NDQpOyAvLyBJUV9BbHBoYQorCisJLy8gYi4KKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJdmVyaWZ5X2NvdW50ID0gMDsKKworCS8vZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykKKwkvL2ZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJbG9vcCA9IExPT1BfVElNRVM7CisJd2hpbGUgKGxvb3AgPiAwKQorCXsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPlxuIiwgKExPT1BfVElNRVMtbG9vcCsxKSkpOworCQlpcWNhbF90b25lX2lfYXZnPTA7CisJCWlxY2FsX3RvbmVfcV9hdmc9MDsKKwkJaXFjYWxfaW1hZ2VfaV9hdmc9MDsKKwkJaXFjYWxfaW1hZ2VfcV9hdmc9MDsKKwkJY2FwdHVyZV90aW1lPTA7CisKKwkJZm9yKGNhcHR1cmVfdGltZT0wOyBjYXB0dXJlX3RpbWU8MTA7IGNhcHR1cmVfdGltZSsrKQorCQl7CisJCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQlpZiggIWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKSApLy8yMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIDA7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsgIC8vU2hvdWxkIGJlIHJlYWQgb3V0IGFmdGVyIDQ1MHVzCisKKwkJLy8gYy4KKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF90b25lX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfdG9uZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pID0gJWQsIGlxY2FsX3RvbmVfcSA9ICVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaSwgaXFjYWxfdG9uZV9xKSk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF9pbWFnZV9pID0gJWQsIGlxY2FsX2ltYWdlX3EgPSAlZFxuIiwKKwkJCQkgICBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisJCQlpZiggY2FwdHVyZV90aW1lID09IDApCisJCQl7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaXFjYWxfaW1hZ2VfaV9hdmc9KCBpcWNhbF9pbWFnZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF9pbWFnZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfaW1hZ2VfcV9hdmc9KCBpcWNhbF9pbWFnZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF9pbWFnZV9xKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9pX2F2Zz0oIGlxY2FsX3RvbmVfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2Zz0oIGlxY2FsX3RvbmVfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9xKS9jYXB0dXJlX3RpbWU7CisJCQl9CisJCX0KKworCisJCWlxY2FsX2ltYWdlX2kgPSBpcWNhbF9pbWFnZV9pX2F2ZzsKKwkJaXFjYWxfaW1hZ2VfcSA9IGlxY2FsX2ltYWdlX3FfYXZnOworCQlpcWNhbF90b25lX2kgPSBpcWNhbF90b25lX2lfYXZnOworCQlpcWNhbF90b25lX3EgPSBpcWNhbF90b25lX3FfYXZnOworCisJCS8vIGQuCisJCXJvdF90b25lX2lfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX2kgKworCQkJCQkJaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xKSAvIDEwMjQ7CisJCXJvdF90b25lX3FfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX3EgKiAoLTEpICsKKwkJCQkJCWlxY2FsX3RvbmVfcSAqIGlxY2FsX3RvbmVfaSkgLyAxMDI0OworCQlyb3RfaW1hZ2VfaV9iID0gKGlxY2FsX2ltYWdlX2kgKiBpcWNhbF90b25lX2kgLQorCQkJCQkJIGlxY2FsX2ltYWdlX3EgKiBpcWNhbF90b25lX3EpIC8gMTAyNDsKKwkJcm90X2ltYWdlX3FfYiA9IChpcWNhbF9pbWFnZV9pICogaXFjYWxfdG9uZV9xICsKKwkJCQkJCSBpcWNhbF9pbWFnZV9xICogaXFjYWxfdG9uZV9pKSAvIDEwMjQ7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X3RvbmVfaV9iICA9ICVkXG4iLCByb3RfdG9uZV9pX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X3RvbmVfcV9iICA9ICVkXG4iLCByb3RfdG9uZV9xX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X2ltYWdlX2lfYiA9ICVkXG4iLCByb3RfaW1hZ2VfaV9iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pbWFnZV9xX2IgPSAlZFxuIiwgcm90X2ltYWdlX3FfYikpOworCisJCS8vIGYuCisJCWlmIChyb3RfdG9uZV9pX2IgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiByb3RfdG9uZV9pX2I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCWFfMiA9IChyb3RfaW1hZ2VfaV9iICogMzI3NjgpIC8gcm90X3RvbmVfaV9iIC0KKwkJCXBod19kYXRhLT5pcV9yc2RsX2dhaW5fdHhfZDI7CisJCWJfMiA9IChyb3RfaW1hZ2VfcV9iICogMzI3NjgpIC8gcm90X3RvbmVfaV9iIC0KKwkJCXBod19kYXRhLT5pcV9yc2RsX3BoYXNlX3R4X2QyOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxX3JzZGxfZ2Fpbl90eF9kMiA9ICVkXG4iLCBwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxX3JzZGxfcGhhc2VfdHhfZDI9ICVkXG4iLCBwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBFUFNJTE9OLzIgPSAlZFxuIiwgYV8yKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIFRIRVRBLzIgICA9ICVkXG4iLCBiXzIpKTsKKworCQlfc2luX2NvcyhiXzIsICZzaW5fYiwgJmNvc19iKTsKKwkJX3Npbl9jb3MoYl8yKjIsICZzaW5fMmIsICZjb3NfMmIpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYi8yKT0lZCwgY29zKGIvMik9JWRcbiIsIHNpbl9iLCBjb3NfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYik9JWQsIGNvcyhiKT0lZFxuIiwgc2luXzJiLCBjb3NfMmIpKTsKKworCQlpZiAoY29zXzJiID09IDApCisJCXsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gRVJST1IgKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogY29zKGIpPTAgISFcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQkvLyAxMjgwICogMzI3NjggPSA0MTk0MzA0MAorCQl0ZW1wMSA9ICg0MTk0MzA0MC9jb3NfMmIpKmNvc19iOworCisJCS8vdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwKjQvY29zXzJiKSpzaW5fYiooLTEpOworCQl9CisKKwkJcnhfY2FsX2ZsdF9iWzBdID0gX2Zsb29yKHRlbXAxLygzMjc2OCthXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzFdID0gX2Zsb29yKHRlbXAyLygzMjc2OC1hXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzJdID0gX2Zsb29yKHRlbXAyLygzMjc2OCthXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzNdID0gX2Zsb29yKHRlbXAxLygzMjc2OC1hXzIpKTsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxfZmx0X2JbMF0gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9mbHRfYlsxXSA9ICVkXG4iLCByeF9jYWxfZmx0X2JbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX2ZsdF9iWzJdID0gJWRcbiIsIHJ4X2NhbF9mbHRfYlsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzNdKSk7CisKKwkJcnhfY2FsWzBdID0gcnhfY2FsX2ZsdF9iWzBdIC0gMTI4OworCQlyeF9jYWxbMV0gPSByeF9jYWxfZmx0X2JbMV07CisJCXJ4X2NhbFsyXSA9IHJ4X2NhbF9mbHRfYlsyXTsKKwkJcnhfY2FsWzNdID0gcnhfY2FsX2ZsdF9iWzNdIC0gMTI4OworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxbMF0gPSAlZFxuIiwgcnhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbFsxXSA9ICVkXG4iLCByeF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CisKKwkJLy8gZS4KKwkJcHdyX3RvbmUgPSAoaXFjYWxfdG9uZV9pKmlxY2FsX3RvbmVfaSArIGlxY2FsX3RvbmVfcSppcWNhbF90b25lX3EpOworCQlwd3JfaW1hZ2UgPSAoaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xKSpmYWN0b3I7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcHdyX3RvbmUgID0gJWRcbiIsIHB3cl90b25lKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHB3cl9pbWFnZSAgPSAlZFxuIiwgcHdyX2ltYWdlKSk7CisKKwkJaWYgKHB3cl90b25lID4gcHdyX2ltYWdlKQorCQl7CisJCQl2ZXJpZnlfY291bnQrKzsKKworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBWRVJJRlkgT0sgIyAlZCAhIVxuIiwgdmVyaWZ5X2NvdW50KSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBPSyAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisJCS8vIGcuCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJCXJ4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwRjAwKSA+PiAgOCk7CisJCQlyeF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDBGMCkgPj4gIDQpOworCQkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJcnhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJCXJ4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQkJcnhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKwkJfQorCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbF9yZWdbMF0gPSAlZFxuIiwgcnhfY2FsX3JlZ1swXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzFdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1syXSA9ICVkXG4iLCByeF9jYWxfcmVnWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOworCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCWlmICgoKHJ4X2NhbF9yZWdbMF09PTcpIHx8IChyeF9jYWxfcmVnWzBdPT0oLTgpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM109PTcpIHx8IChyeF9jYWxfcmVnWzNdPT0oLTgpKSkpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlpZiAoKChyeF9jYWxfcmVnWzBdPT0zMSkgfHwgKHJ4X2NhbF9yZWdbMF09PSgtMzIpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM109PTMxKSB8fCAocnhfY2FsX3JlZ1szXT09KC0zMikpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlyeF9jYWxbMF0gPSByeF9jYWxbMF0gKyByeF9jYWxfcmVnWzBdOworCQlyeF9jYWxbMV0gPSByeF9jYWxbMV0gKyByeF9jYWxfcmVnWzFdOworCQlyeF9jYWxbMl0gPSByeF9jYWxbMl0gKyByeF9jYWxfcmVnWzJdOworCQlyeF9jYWxbM10gPSByeF9jYWxbM10gKyByeF9jYWxfcmVnWzNdOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhcHBseSByeF9jYWxbMF0gPSAlZFxuIiwgcnhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHJ4X2NhbFsxXSA9ICVkXG4iLCByeF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczQocnhfY2FsWzBdKSA8PCAxMil8CisJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFsxXSkgPDwgIDgpfAorCQkJCQkoX3MzMl90b19zNChyeF9jYWxbMl0pIDw8ICA0KXwKKwkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzNdKSkpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJdmFsIHw9ICgoX3MzMl90b19zNShyeF9jYWxbMF0pIDw8IDI3KXwKKwkJCQkJKF9zMzJfdG9fczYocnhfY2FsWzFdKSA8PCAyMSl8CisJCQkJCShfczMyX3RvX3M2KHJ4X2NhbFsyXSkgPDwgMTUpfAorCQkJCQkoX3MzMl90b19zNShyeF9jYWxbM10pIDw8IDEwKSk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKworCQkJaWYoIGxvb3AgPT0gMyApCisJCQlyZXR1cm4gMDsKKwkJfQorCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlsb29wLS07CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3J4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3sKKy8vIGZpZ28gMjAwNTA1MjMgbWFya2VkIHRoc2kgZmxhZyBmb3IgY2FuJ3QgY29tcGlsZSBmb3IgcmVsZXNhc2UKKyNpZmRlZiBfREVCVUcKKwlzMzIgICAgIHJ4X2NhbF9yZWdbNF07CisJdTMyICAgICB2YWw7CisjZW5kaWYKKworCXU4ICAgICAgcmVzdWx0OworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKKy8vIGEuIFNldCBSRklDIHRvICJSWCBjYWxpYnJhdGlvbiBtb2RlIgorCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFJYIHBhdGggSVEgaW1iYWxhbmNlIGNhbGlicmF0aW9uIGxvb3AKKwkvLwkweDAxIDB4RkZCRkMyICA7IDNGRUZGICA7IENhbGlicmF0aW9uICg3YSkuIGVuYWJsZSBSWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUZCRkMyKTsKKwkvLwkweDBCIDB4MUEwMUQ2ICA7IDA2ODE3ICA7IENhbGlicmF0aW9uICg3YikuIGVuYWJsZSBSWCBJL1EgY2FsIGxvb3AgU1cxIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDFBMDVENik7CisJLy8weDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8IHBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwpOworCS8vMHgwNiAweDA2ODQwQyAgOyAwMUExMCAgOyBDYWxpYnJhdGlvbiAoN2QpLiBSWEdDSD0wMDsgUlhHQ0w9MDEwIDAwMCAoUlhWR0EpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgwNjgzNEMpOworCS8vMHgwMCAweEZGRjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoN2UpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGRkYxQzApOworCisJLy8gIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2YpLiBTZW5kIHRlc3QgcGF0dGVybgorCS8vCTsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2cpLiBTZWFyY2ggUlhHQ0wgb3B0aW1hbCB2YWx1ZQorCS8vCTsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2gpLiBDYWN1bGF0ZSBSWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBSWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZQorCisJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTI1ODksIGZyZXF1ZW5jeSk7CisKKwlpZiAocmVzdWx0ID4gMCkKKwl7CisJCV9yZXNldF9yeF9jYWwocGh3X2RhdGEpOworCQlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA3OTQzLCBmcmVxdWVuY3kpOworCisJCWlmIChyZXN1bHQgPiAwKQorCQl7CisJCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKKwkJCXJlc3VsdCA9IF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDUwMTEsIGZyZXF1ZW5jeSk7CisKKwkJCWlmIChyZXN1bHQgPiAwKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb24+ICoqKioqKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogUlhfSVFfQ0FMSUJSQVRJT04gRkFJTFVSRSAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKyNpZmRlZiBfREVCVUcKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJcnhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDBGMDApID4+ICA4KTsKKwkJcnhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwRjApID4+ICA0KTsKKwkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKKwl9CisJZWxzZSAvLyAybmQtY3V0CisJeworCQlyeF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQlyeF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCX0KKworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbF9yZWdbMF0gPSAlZFxuIiwgcnhfY2FsX3JlZ1swXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMV0gPSAlZFxuIiwgcnhfY2FsX3JlZ1sxXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMl0gPSAlZFxuIiwgcnhfY2FsX3JlZ1syXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOworI2VuZGlmCisKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgaXFfYWxwaGE7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBwaHlfY2FsaWJyYXRpb25fd2luYm9uZCgpXG4iKSk7CisKKwkvLyAyMDA0MDcwMSAxLjEuMjUuMTAwMCBrZXZpbgorCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCAmbWFjX2N0cmwpOworCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCAmcmZfY3RybCk7CisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsICZpcV9hbHBoYSk7CisKKworCisJX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSwgZnJlcXVlbmN5KTsKKwkvL190eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhKTsKKwkvL190eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOworCisJX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOworCV9yeF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOworCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsgLy8gc2V0IHdoZW4gZmluaXNoCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkvLyBpLiBTZXQgUkZJQyB0byAiTm9ybWFsIG1vZGUiCisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsIG1hY19jdHJsKTsKKwlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgcmZfY3RybCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIGlxX2FscGhhKTsKKworCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlwaHlfaW5pdF9yZihwaHdfZGF0YSk7CisKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKK3sKKyAgIHUzMiBsdG1wPTA7CisKKyAgICBzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV9WMTogLy8gMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI3OgorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMTggKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyODoKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjk6CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAyMCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKHZhbHVlJjB4ZmZmZmZmKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOgorCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMjQgKTsKKwkJCWJyZWFrOworCX0KKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKK30KKworLy8gMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbAordW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhod19kYXRhX3QgKnBod19kYXRhKQoreworCWludCBpbml0X3R4dmdhID0gMDsKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICB2YWw7CisJczMyICAgICBpcWNhbF90b25lX2kwOworCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgaXFfbWFnXzBfdHg7CisJdTgJCXJlZ19zdGF0ZTsKKwlpbnQJCWN1cnJlbnRfdHh2Z2E7CisKKworCXJlZ19zdGF0ZSA9IDA7CisJZm9yKCBpbml0X3R4dmdhPTA7IGluaXRfdHh2Z2E8MTA7IGluaXRfdHh2Z2ErKykKKwl7CisJCWN1cnJlbnRfdHh2Z2EgPSAoIDB4MjRDNDBBfChpbml0X3R4dmdhPDw2KSApOworCQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICgoNTw8MjQpfGN1cnJlbnRfdHh2Z2EpICk7CisJCXBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwgPSBjdXJyZW50X3R4dmdhOworCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKDMwMDAwKTsvL1NsZWVwKDMwKTsKKwkJT1NfU0xFRVAoMzAwMDApOyAvLyAyMDA2MDYxMi4xLmEKKworCQlpZiggIWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCkgKSAvLyAyMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIEZBTFNFOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCQkvLyBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CisJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMik7CisJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMnwyPDwyKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKwkJT1NfU0xFRVAoMSk7IC8vIDIwMDYwNjEyLjEuYQorCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKDMwMCk7Ly9TbGVlcCgzMCk7CisJCU9TX1NMRUVQKDMwMCk7IC8vIDIwMDYwNjEyLjEuYQorCisJCS8vIGIuCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oVVMpOworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbigzMDApOy8vU2xlZXAoMzApOworCQlPU19TTEVFUCgzMDApOyAvLyAyMDA2MDYxMi4xLmEKKworCQlpcWNhbF90b25lX2kwID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX3RvbmVfcTAgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kwPSVkLCBpcWNhbF90b25lX3EwPSVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaTAsIGlxY2FsX3RvbmVfcTApKTsKKworCQlzcXN1bSA9IGlxY2FsX3RvbmVfaTAqaXFjYWxfdG9uZV9pMCArIGlxY2FsX3RvbmVfcTAqaXFjYWxfdG9uZV9xMDsKKwkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGF1dG9fYWRqdXN0X3R4dmdhX2Zvcl9pcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKKworCQlpZiggaXFfbWFnXzBfdHg+PTcwMCAmJiBpcV9tYWdfMF90eDw9MTc1MCApCisJCQlicmVhazsKKwkJZWxzZSBpZihpcV9tYWdfMF90eCA+IDE3NTApCisJCXsKKwkJCWluaXRfdHh2Z2E9LTI7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKworCX0KKworCWlmKCBpcV9tYWdfMF90eD49NzAwICYmIGlxX21hZ18wX3R4PD0xNzUwICkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaApAQCAtMCwwICsxLDEwMSBAQAorLy8gMjAwMzEyMjkgVHVyYm8gYWRkCisjZGVmaW5lIFJFR19BR0NfQ1RSTDEgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgUkVHX0FHQ19DVFJMMiAgICAgICAgICAgICAgIDB4MTAwNAorI2RlZmluZSBSRUdfQUdDX0NUUkwzICAgICAgICAgICAgICAgMHgxMDA4CisjZGVmaW5lIFJFR19BR0NfQ1RSTDQgICAgICAgICAgICAgICAweDEwMEMKKyNkZWZpbmUgUkVHX0FHQ19DVFJMNSAgICAgICAgICAgICAgIDB4MTAxMAorI2RlZmluZSBSRUdfQUdDX0NUUkw2ICAgICAgICAgICAgICAgMHgxMDE0CisjZGVmaW5lIFJFR19BR0NfQ1RSTDcgICAgICAgICAgICAgICAweDEwMTgKKyNkZWZpbmUgUkVHX0FHQ19DVFJMOCAgICAgICAgICAgICAgIDB4MTAxQworI2RlZmluZSBSRUdfQUdDX0NUUkw5ICAgICAgICAgICAgICAgMHgxMDIwCisjZGVmaW5lIFJFR19BR0NfQ1RSTDEwICAgICAgICAgICAgICAweDEwMjQKKyNkZWZpbmUgUkVHX0NDQV9DVFJMICAgICAgICAgICAgICAgIDB4MTAyOAorI2RlZmluZSBSRUdfQV9BQ1FfQ1RSTCAgICAgICAgICAgICAgMHgxMDJDCisjZGVmaW5lIFJFR19CX0FDUV9DVFJMICAgICAgICAgICAgICAweDEwMzAKKyNkZWZpbmUgUkVHX0FfVFhSWF9DVFJMICAgICAgICAgICAgIDB4MTAzNAorI2RlZmluZSBSRUdfQl9UWFJYX0NUUkwgICAgICAgICAgICAgMHgxMDM4CisjZGVmaW5lIFJFR19BX1RYX0NPRUYzICAgICAgICAgICAgICAweDEwM0MKKyNkZWZpbmUgUkVHX0FfVFhfQ09FRjIgICAgICAgICAgICAgIDB4MTA0MAorI2RlZmluZSBSRUdfQV9UWF9DT0VGMSAgICAgICAgICAgICAgMHgxMDQ0CisjZGVmaW5lIFJFR19CX1RYX0NPRUYyICAgICAgICAgICAgICAweDEwNDgKKyNkZWZpbmUgUkVHX0JfVFhfQ09FRjEgICAgICAgICAgICAgIDB4MTA0QworI2RlZmluZSBSRUdfTU9ERV9DVFJMICAgICAgICAgICAgICAgMHgxMDUwCisjZGVmaW5lIFJFR19DQUxJQl9EQVRBICAgICAgICAgICAgICAweDEwNTQKKyNkZWZpbmUgUkVHX0lRX0FMUEhBICAgICAgICAgICAgICAgIDB4MTA1OAorI2RlZmluZSBSRUdfRENfQ0FOQ0VMICAgICAgICAgICAgICAgMHgxMDVDCisjZGVmaW5lIFJFR19XVE9fUkVBRCAgICAgICAgICAgICAgICAweDEwNjAKKyNkZWZpbmUgUkVHX09GRlNFVF9SRUFEICAgICAgICAgICAgIDB4MTA2NAorI2RlZmluZSBSRUdfQ0FMSUJfUkVBRDEgICAgICAgICAgICAgMHgxMDY4CisjZGVmaW5lIFJFR19DQUxJQl9SRUFEMiAgICAgICAgICAgICAweDEwNkMKKyNkZWZpbmUgUkVHX0FfRlJFUV9FU1QgICAgICAgICAgICAgIDB4MTA3MAorCisKKworCisvLyAgMjAwMzExMDEgVHVyYm8gYWRkCisjZGVmaW5lIE1BU0tfQU1FUl9PRkZfUkVHICAgICAgICAgIEJJVCgzMSkKKworI2RlZmluZSBNQVNLX0JNRVJfT0ZGX1JFRyAgICAgICAgICBCSVQoMzEpCisKKyNkZWZpbmUgTUFTS19MTkFfRklYX0dBSU4gICAgICAgICAgKEJJVCgzKXxCSVQoNCkpCisjZGVmaW5lIE1BU0tfQUdDX0ZJWCAgICAgICAgICAgICAgIEJJVCgxKQorCisjZGVmaW5lIE1BU0tfQUdDX0ZJWF9HQUlOICAgICAgICAgIDB4RkYwMAorCisjZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9TVFIgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgTUFTS19DQUxJQl9TVEFSVCAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9TRUwgICAgICAgIChCSVQoMyl8QklUKDIpKQorI2RlZmluZSBNQVNLX0lRQ0FMX01PREUgICAgICAgICAgICAoQklUKDEpfEJJVCgwKSkKKworI2RlZmluZSBNQVNLX1RYX0NBTF8wICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIFRYX0NBTF8wX1NISUZUICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1BU0tfVFhfQ0FMXzEgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgVFhfQ0FMXzFfU0hJRlQgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTUFTS19UWF9DQUxfMiAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBUWF9DQUxfMl9TSElGVCAgICAgICAgICAgICAyMAorI2RlZmluZSBNQVNLX1RYX0NBTF8zICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIFRYX0NBTF8zX1NISUZUICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1BU0tfUlhfQ0FMXzAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgUlhfQ0FMXzBfU0hJRlQgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTUFTS19SWF9DQUxfMSAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBSWF9DQUxfMV9TSElGVCAgICAgICAgICAgICA4CisjZGVmaW5lIE1BU0tfUlhfQ0FMXzIgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgUlhfQ0FMXzJfU0hJRlQgICAgICAgICAgICAgNAorI2RlZmluZSBNQVNLX1JYX0NBTF8zICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFJYX0NBTF8zX1NISUZUICAgICAgICAgICAgIDAKKworI2RlZmluZSBNQVNLX0NBTkNFTF9EQ19JICAgICAgICAgICAweDNFMAorI2RlZmluZSBDQU5DRUxfRENfSV9TSElGVCAgICAgICAgICA1CisjZGVmaW5lIE1BU0tfQ0FOQ0VMX0RDX1EgICAgICAgICAgIDB4MDFGCisjZGVmaW5lIENBTkNFTF9EQ19RX1NISUZUICAgICAgICAgIDAKKworLy8gTEEyMDA0MDIxMCBrZXZpbgorLy8jZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9JKHgpICAgICAgICgoKHgpJjB4MUZFMDApPj45KQorLy8jZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9RKHgpICAgICAgICgoeCkmMHgxRkYpCisjZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9JKHgpICAgICAgICgoKHgpJjB4MDAwM0ZFMDApPj45KQorI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfUSh4KSAgICAgICAoKHgpJjB4MDAwMDAxRkYpCisKKy8vIExBMjAwNDAyMTAga2V2aW4gKFR1cmJvIGhhcyB3cm9uZyBkZWZpbml0aW9uKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9JICAgICAgICAgIDB4N0ZGQzAwMAorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfSSh4KSAgICAgICgoeCk+PjEzKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9RICAgICAgICAgIDB4MUZGRgorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfUSh4KSAgICAgICgoeCk+PjApCisjZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9JICAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgU0hJRlRfSVFDQUxfVE9ORV9JKHgpICAgICAgKCh4KT4+MCkKKyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX1EgICAgICAgICAgMHgwM0ZGRTAwMAorI2RlZmluZSBTSElGVF9JUUNBTF9UT05FX1EoeCkgICAgICAoKHgpPj4xMykKKworLy8gTEEyMDA0MDIxMCBrZXZpbiAoVHVyYm8gaGFzIHdyb25nIGRlZmluaXRpb24pCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9JICAgICAgICAgMHg3RkZDMDAwCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfSSh4KSAgICAgKCh4KT4+MTMpCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9RICAgICAgICAgMHgxRkZGCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfUSh4KSAgICAgKCh4KT4+MCkKKworLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfSSAgICAgICAgIDB4MDAwMDFGRkYKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9JKHgpICAgICAoKHgpPj4wKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfUSAgICAgICAgIDB4MDNGRkUwMDAKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9RKHgpICAgICAoKHgpPj4xMykKKwordm9pZCBwaHlfc2V0X3JmX2RhdGEoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgaW5kZXgsICB1MzIgdmFsdWUgKTsKKyNkZWZpbmUgcGh5X2luaXRfcmYoIF9BICkJLy9SRlN5bnRoZXNpemVyX2luaXRpYWwoIF9BICkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc1YzdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKQEAgLTAsMCArMSwyNjgzIEBACisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gT3JpZ2luYWwgUGh5LmgKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7IEZvciBNQVhJTTI4MjUvNi83IFZlci4gMzMxIG9yIG1vcmUKKzsgRWRpdGVkIGJ5IFRpZ2VyLCBTZXAtMTctMjAwMworOyByZXZpc2VkIGJ5IEJlbiwgU2VwLTE4LTIwMDMKKworMHgwMCAweDAwMGEyCisweDAxIDB4MjFjYzAKKzsweDAyIDB4MTM4MDIKKzB4MDIgMHgxMzgzYQorCis7Y2hhbm5lMSAwMSA7IDB4MDMgMHgzMDE0MiA7IDB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDAyIDsweDAzIDB4MzIxNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDAzIDsweDAzIDB4MzIxNDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDA0IDsweDAzIDB4MzIxNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDA1IDsweDAzIDB4MzExNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDA2IDsKKzB4MDMgMHgzMTE0MzsKKzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDA3IDsweDAzIDB4MzExNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDA4IDsweDAzIDB4MzMxNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDA5IDsweDAzIDB4MzMxNDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDEwIDsweDAzIDB4MzMxNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDExIDsweDAzIDB4MzA5NDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDEyIDsweDAzIDB4MzA5NDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDEzIDsweDAzIDB4MzA5NDIgOzB4MDQgMHgwYjMzMzsKKworMHgwNSAweDI4OTg2CisweDA2IDB4MTgwMDgKKzB4MDcgMHgzODQwMAorMHgwOCAweDA1MTAwOyAxMDAgSHogREMKKzsweDA4IDB4MDU5MDA7IDMwIEtIeiBEQworMHgwOSAweDI0ZjA4CisweDBhIDB4MTdlMDAsIDB4MTdlYTAKKzB4MGIgMHgzN2Q4MAorMHgwYyAweDBjOTAwIC8vIDB4MGNhMDAgKGxhZ2VyIHBvd2VyIDlkYiB0aGFuIDB4MGMwMDApLCAweDBjMDAwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1BWDI4MjUgKHB1cmUgYi9nKQordTMyIG1heDI4MjVfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxY2MwLAorICAgICgweDAyPDwxOCl8MHgxMzgwNiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODlBNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4MDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MGMxMDAgICAvLyAxMWE6IDB4MGMzMDAsIDExZzogMHgwYzEwMAorfTsKKwordTMyIG1heDI4MjVfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MTgpfDB4MzI5NDEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSAvLyAxNCAoMjQ4NE1IeikgaGhtb2RpZnkKK307CisKK3UzMiBtYXgyODI1X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTUFYMjgyNyAoYS9iL2cpCit1MzIgbWF4MjgyN19yZl9kYXRhW10gPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjFjYzAsCisgICAgKDB4MDI8PDE4KXwweDEzODA2LAorICAgICgweDAzPDwxOCl8MHgzMDE0MiwKKyAgICAoMHgwNDw8MTgpfDB4MGIzMzMsCisgICAgKDB4MDU8PDE4KXwweDI4OUE2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4MzgwMDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTAwLAorICAgICgweDA5PDwxOCl8MHgyNGYwOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3ZDgwLAorICAgICgweDBDPDwxOCl8MHgwYzEwMCAgIC8vIDExYTogMHgwYzMwMCwgMTFnOiAweDBjMTAwCit9OworCit1MzIgbWF4MjgyN19jaGFubmVsX2RhdGFfMjRbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwxOCl8MHgzMjk0MSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9ICAvLyAxNCAoMjQ4NE1IeikgaGhtb2RpZnkKK307CisKK3UzMiBtYXgyODI3X2NoYW5uZWxfZGF0YV81MFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMzY2MzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgMzYKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDAKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDQKKyAgICB7KDB4MDM8PDE4KXwweDMyMmMxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDgKKyAgICB7KDB4MDM8PDE4KXwweDMxMmMxLCAoMHgwNDw8MTgpfDB4MGE2NjYsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNTIKKyAgICB7KDB4MDM8PDE4KXwweDMzMmMzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNTYKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNjAKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyQTlBNn0gLy8gY2hhbm5lbCA2NAorfTsKKwordTMyIG1heDI4MjdfcG93ZXJfZGF0YV8yNFtdID0geygweDBDPDwxOCl8MHgwQzAwMCwgKDB4MEM8PDE4KXwweDBENjAwLCAoMHgwQzw8MTgpfDB4MEMxMDB9OwordTMyIG1heDI4MjdfcG93ZXJfZGF0YV81MFtdID0geygweDBDPDwxOCl8MHgwQzQwMCwgKDB4MEM8PDE4KXwweDBENTAwLCAoMHgwQzw8MTgpfDB4MEMzMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1BWDI4MjggKGEvYi9nKQordTMyIG1heDI4MjhfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxY2MwLAorICAgICgweDAyPDwxOCl8MHgxMzgwNiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODlBNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4MDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MGMxMDAgICAvLyAxMWE6IDB4MGMzMDAsIDExZzogMHgwYzEwMAorfTsKKwordTMyIG1heDI4MjhfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MTgpfDB4MzI5NDEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSAgLy8gMTQgKDI0ODRNSHopIGhobW9kaWZ5Cit9OworCit1MzIgbWF4MjgyOF9jaGFubmVsX2RhdGFfNTBbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzM2NjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDM2CisgICAgeygweDAzPDwxOCl8MHgzMDJjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQwCisgICAgeygweDAzPDwxOCl8MHgzMDJjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQ0CisgICAgeygweDAzPDwxOCl8MHgzMjJjMSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQ4CisgICAgeygweDAzPDwxOCl8MHgzMTJjMSwgKDB4MDQ8PDE4KXwweDBhNjY2LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDUyCisgICAgeygweDAzPDwxOCl8MHgzMzJjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDU2CisgICAgeygweDAzPDwxOCl8MHgzMGFjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDYwCisgICAgeygweDAzPDwxOCl8MHgzMGFjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9IC8vIGNoYW5uZWwgNjQKK307CisKK3UzMiBtYXgyODI4X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07Cit1MzIgbWF4MjgyOF9wb3dlcl9kYXRhXzUwW10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIExBMjAwNDA3Mjgga2V2aW4KKy8vIE1BWDI4MjkgKGEvYi9nKQordTMyIG1heDI4MjlfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIzNTIwLAorICAgICgweDAyPDwxOCl8MHgxMzgwMiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODkwNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDNCNTAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MEYzMDAgLy9UWFZHQT01MSwgKE1BWC02IGRCKQorfTsKKwordTMyIG1heDI4MjlfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMzw8MTgpfDB4MzAxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAxICgyNDEyTUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAyICgyNDE3TUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAzICgyNDIyTUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA0ICgyNDI3TUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA1ICgyNDMyTUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA2ICgyNDM3TUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA3ICgyNDQyTUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA4ICgyNDQ3TUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA5ICgyNDUyTUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEwICgyNDU3TUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDExICgyNDYyTUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEyICgyNDY3TUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEzICgyNDcyTUh6KQorICAgIHsoMzw8MTgpfDB4MzI5NDEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDE0ICgyNDg0TUh6KSBoaC1tb2RpZnkKK307CisKK3UzMiBtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtdWzRdID0KK3sKKyAgICAgezM2LCAoMzw8MTgpfDB4MzNjYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMzYgKDUuMTgwR0h6KQorICAgICB7NDAsICgzPDwxOCl8MHgzMDJjMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA0MCAoNS4yMDBHSHopCisgICAgIHs0NCwgKDM8PDE4KXwweDMwMmMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDQ0ICg1LjIyMEdIeikKKyAgICAgezQ4LCAoMzw8MTgpfDB4MzIyYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNDggKDUuMjQwR0h6KQorICAgICB7NTIsICgzPDwxOCl8MHgzMTJjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA1MiAoNS4yNjBHSHopCisgICAgIHs1NiwgKDM8PDE4KXwweDMzMmMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDU2ICg1LjI4MEdIeikKKyAgICAgezYwLCAoMzw8MTgpfDB4MzBhYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNjAgKDUuMzAwR0h6KQorICAgICB7NjQsICgzPDwxOCl8MHgzMGFjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA2NCAoNS4zMjBHSHopCisKKyAgICB7MTAwLCAoMzw8MTgpfDB4MzBlYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTAwICg1LjUwMEdIeikKKyAgICB7MTA0LCAoMzw8MTgpfDB4MzBlYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTA0ICg1LjUyMEdIeikKKyAgICB7MTA4LCAoMzw8MTgpfDB4MzJlYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTA4ICg1LjU0MEdIeikKKyAgICB7MTEyLCAoMzw8MTgpfDB4MzFlYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTEyICg1LjU2MEdIeikKKyAgICB7MTE2LCAoMzw8MTgpfDB4MzNlYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTE2ICg1LjU4MEdIeikKKyAgICB7MTIwLCAoMzw8MTgpfDB4MzAxYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTIwICg1LjYwMEdIeikKKyAgICB7MTI0LCAoMzw8MTgpfDB4MzAxYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTI0ICg1LjYyMEdIeikKKyAgICB7MTI4LCAoMzw8MTgpfDB4MzIxYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTI4ICg1LjY0MEdIeikKKyAgICB7MTMyLCAoMzw8MTgpfDB4MzExYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTMyICg1LjY2MEdIeikKKyAgICB7MTM2LCAoMzw8MTgpfDB4MzMxYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTM2ICg1LjY4MEdIeikKKyAgICB7MTQwLCAoMzw8MTgpfDB4MzA5YzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTQwICg1LjcwMEdIeikKKworICAgIHsxNDksICgzPDwxOCl8MHgzMjljMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNDkgKDUuNzQ1R0h6KQorICAgIHsxNTMsICgzPDwxOCl8MHgzMTljMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNTMgKDUuNzY1R0h6KQorICAgIHsxNTcsICgzPDwxOCl8MHgzMzljMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNTcgKDUuNzg1R0h6KQorICAgIHsxNjEsICgzPDwxOCl8MHgzMDVjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNjEgKDUuODA1R0h6KQorCisgICAgLy8gSmFwYW4KKyAgICB7IDE4NCwgKDM8PDE4KXwweDMwOGMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE4NCAoNC45MjBHSHopCisgICAgeyAxODgsICgzPDwxOCl8MHgzMjhjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAxODggKDQuOTQwR0h6KQorICAgIHsgMTkyLCAoMzw8MTgpfDB4MzE4YzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMTkyICg0Ljk2MEdIeikKKyAgICB7IDE5NiwgKDM8PDE4KXwweDMzOGMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE5NiAoNC45ODBHSHopCisgICAgeyAgIDgsICgzPDwxOCl8MHgzMjRjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgIDggKDUuMDQwR0h6KQorICAgIHsgIDEyLCAoMzw8MTgpfDB4MzE0YzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDEyICg1LjA2MEdIeikKKyAgICB7ICAxNiwgKDM8PDE4KXwweDMzNGMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAxNiAoNS4wODBHSHopCisgICAgeyAgMzQsICgzPDwxOCl8MHgzMWNjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgMzQgKDUuMTcwR0h6KQorICAgIHsgIDM4LCAoMzw8MTgpfDB4MzNjYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDM4ICg1LjE5MEdIeikKKyAgICB7ICA0MiwgKDM8PDE4KXwweDMwMmMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICA0MiAoNS4yMTBHSHopCisgICAgeyAgNDYsICgzPDwxOCl8MHgzMjJjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgNDYgKDUuMjMwR0h6KQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7IEZvciBNQVhJTTI4MjUvNi83IFZlci4gMzE3IG9yIGxlc3MKKzsgRWRpdGVkIGJ5IFRpZ2VyLCBTZXAtMTctMjAwMyAgZm9yIDIuNEdoeiBjaGFubmVscworOyBVcGRhdGVkIGJ5IFRpZ2VyLCBTZXAtMjItMjAwMyBmb3IgNS4wR2h6IGNoYW5uZWxzCis7IENvcnJlY3RlZCBieSBUaWdlciwgU2VwLTIzLTIwMDMsIGZvciAweDAzIGFuZCAweDA0IG9mIDUuMEdoeiBjaGFubmVscworCisweDAwIDB4MDAwODAKKzB4MDEgMHgyMTRjMAorMHgwMiAweDEzODAyCisKKzsyLjRHSHogQ2hhbm5lbHMKKztjaGFubmUxIDAxICgyLjQxMkdIeik7IDB4MDMgMHgzMDE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwMiAoMi40MTdHSHopOyAweDAzIDB4MzIxNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDMgKDIuNDIyR0h6KTsgMHgwMyAweDMyMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDA0ICgyLjQyN0dIeik7IDB4MDMgMHgzMjE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwNSAoMi40MzJHSHopOyAweDAzIDB4MzExNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDYgKDIuNDM3R0h6KTsgMHgwMyAweDMxMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDA3ICgyLjQ0MkdIeik7IDB4MDMgMHgzMTE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwOCAoMi40NDdHSHopOyAweDAzIDB4MzMxNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDkgKDIuNDUyR0h6KTsgMHgwMyAweDMzMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDEwICgyLjQ1N0dIeik7IDB4MDMgMHgzMzE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAxMSAoMi40NjJHSHopOyAweDAzIDB4MzA5NDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMTIgKDIuNDY3R0h6KTsgMHgwMyAweDMwOTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDEzICgyLjQ3MkdIeik7IDB4MDMgMHgzMDk0MyA7MHgwNCAweDBhY2NjCisKKzs1LjBHaHogQ2hhbm5lbHMKKztjaGFubmVsIDM2ICg1LjE4MEdIeik7IDB4MDMgMHgzM2NjMCA7MHgwNCAweDBiMzMzCis7Y2hhbm5lbCA0MCAoNS4yMDBHSHopOyAweDAzIDB4MzAyYzAgOzB4MDQgMHgwODAwMAorO2NoYW5uZWwgNDQgKDUuMjIwR0h6KTsgMHgwMyAweDMwMmMyIDsweDA0IDB4MGIzMzMKKztjaGFubmVsIDQ4ICg1LjI0MEdIeik7IDB4MDMgMHgzMjJjMSA7MHgwNCAweDA5OTk5Cis7Y2hhbm5lbCA1MiAoNS4yNjBHSHopOyAweDAzIDB4MzEyYzEgOzB4MDQgMHgwYTY2NgorO2NoYW5uZWwgNTYgKDUuMjgwR0h6KTsgMHgwMyAweDMzMmMzIDsweDA0IDB4MDhjY2MKKztjaGFubmVsIDYwICg1LjMwMEdIeik7IDB4MDMgMHgzMGFjMCA7MHgwNCAweDA4MDAwCis7Y2hhbm5lbCA2NCAoNS4zMjBHSHopOyAweDAzIDB4MzBhYzIgOzB4MDQgMHgwODMzMworCis7Mi40R0h6IGJhbmQgOzB4MDUgMHgyODk4NjsKKzs1LjBHSHogYmFuZAorMHgwNSAweDJhOTg2CisKKzB4MDYgMHgxODAwOAorMHgwNyAweDM4NDAwCisweDA4IDB4MDUxMDgKKzB4MDkgMHgyN2ZmOAorMHgwYSAweDE0MDAwCisweDBiIDB4MzdmOTkKKzB4MGMgMHgwYzAwMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgbWF4aW1fMzE3X3JmX2RhdGFbXSAgICAgPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjE0YzAsCisgICAgKDB4MDI8PDE4KXwweDEzODAyLAorICAgICgweDAzPDwxOCl8MHgzMDE0MywKKyAgICAoMHgwNDw8MTgpfDB4MGFjY2MsCisgICAgKDB4MDU8PDE4KXwweDI4OTg2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4Mzg0MDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTA4LAorICAgICgweDA5PDwxOCl8MHgyN2ZmOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3Zjk5LAorICAgICgweDBDPDwxOCl8MHgwYzAwMAorfTsKKwordTMyIG1heGltXzMxN19jaGFubmVsX2RhdGFfMjRbXVszXSAgICA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9IC8vIGNoYW5uZTEgMTMKK307CisKK3UzMiBtYXhpbV8zMTdfY2hhbm5lbF9kYXRhXzUwW11bM10gICAgPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzNjYzAsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCAzNgorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0MAorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0NAorICAgIHsoMHgwMzw8MTgpfDB4MzIyYzEsICgweDA0PDwxOCl8MHgwOTY2NiwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0OAorICAgIHsoMHgwMzw8MTgpfDB4MzEyYzIsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA1MgorICAgIHsoMHgwMzw8MTgpfDB4MzMyYzAsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJhOTllfSwgLy8gY2hhbm5lbCA1NgorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJhOTllfSwgLy8gY2hhbm5lbCA2MAorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDJhOTllfSAvLyBjaGFubmVsIDY0Cit9OworCit1MzIgbWF4aW1fMzE3X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07Cit1MzIgbWF4aW1fMzE3X3Bvd2VyX2RhdGFfNTBbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOztBTDIyMzAgTVAgKE1hc3MgUHJvZHVjdGlvbiBWZXJzaW9uKQorOztSRiBSZWdpc3RlcnMgU2V0dGluZyBmb3IgQWlyb2hhIEFMMjIzMCBzaWxpY29uIGFmdGVyIEp1bmUgMXN0LCAyMDA0Cis7O1VwZGF0ZWQgYnkgVGlnZXIgSHVhbmcgKEp1bmUgMXN0LCAyMDA0KQorOzsyMC1iaXQgbGVuZ3RoIGFuZCBMU0IgZmlyc3QKKworOztDaDAxICgyNDEyTUh6KSA7MHgwMCAweDA5RUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDIgKDI0MTdNSHopIDsweDAwIDB4MDlFRkMgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwMyAoMjQyMk1IeikgOzB4MDAgMHgwOUU3QyA7MHgwMSAweDhDQ0NDOworOztDaDA0ICgyNDI3TUh6KSA7MHgwMCAweDA5RTdDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMDUgKDI0MzJNSHopIDsweDAwIDB4MDVFRkMgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gwNiAoMjQzN01IeikgOzB4MDAgMHgwNUVGQyA7MHgwMSAweDhDQ0NEOworOztDaDA3ICgyNDQyTUh6KSA7MHgwMCAweDA1RTdDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDggKDI0NDdNSHopIDsweDAwIDB4MDVFN0MgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwOSAoMjQ1Mk1IeikgOzB4MDAgMHgwREVGQyA7MHgwMSAweDhDQ0NDOworOztDaDEwICgyNDU3TUh6KSA7MHgwMCAweDBERUZDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMTEgKDI0NjJNSHopIDsweDAwIDB4MERFN0MgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gxMiAoMjQ2N01IeikgOzB4MDAgMHgwREU3QyA7MHgwMSAweDhDQ0NEOworOztDaDEzICgyNDcyTUh6KSA7MHgwMCAweDAzRUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMTQgKDI0ODRNaHopIDsweDAwIDB4MDNFN0MgOzB4MDEgMHg4NjY2NjsKKworMHgwMiAweDQwMUQ4OyBSWERDT0MgQlcgMTAwSHogZm9yIFJYSFAgbG93Cis7OzB4MDIgMHg0ODFEQzsgUlhEQ09DIEJXIDMwS2h6IGZvciBSWEhQIGxvdworCisweDAzIDB4Q0ZGRjAKKzB4MDQgMHgyMzgwMAorMHgwNSAweEEzQjcyCisweDA2IDB4NkRBMDEKKzB4MDcgMHhFMTY4OAorMHgwOCAweDExNjAwCisweDA5IDB4OTlFMDIKKzB4MEEgMHg1RERCMAorMHgwQiAweEQ5OTAwCisweDBDIDB4M0ZGQkQKKzB4MEQgMHhCMDAwMAorMHgwRiAweEYwMEEwCisKKztSRiBDYWxpYnJhdGlvbiBmb3IgQWlyb2hhIEFMMjIzMAorO0VkaXQgYnkgQmVuIENoYW5nICgwMS8zMC8wNCkKKztVcGRhdGVkIGJ5IFRpZ2VyIEh1YW5nICgwMy8wMy8wNCkKKzB4MGYgMHhmMDBhMCA7IEluaXRpYWwgU2V0dGluZworMHgwZiAweGYwMGIwIDsgQWN0aXZhdGUgVFggRENDCisweDBmIDB4ZjAyYTAgOyBBY3RpdmF0ZSBQaGFzZSBDYWxpYnJhdGlvbgorMHgwZiAweGYwMGUwIDsgQWN0aXZhdGUgRmlsdGVyIFJDIENhbGlicmF0aW9uCisweDBmIDB4ZjAwYTAgOyBSZXN0b3JlIEluaXRpYWwgU2V0dGluZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3UzMiBhbDIyMzBfcmZfZGF0YVtdICAgICA9Cit7CisgICAgKDB4MDA8PDIwKXwweDA5RUZDLAorICAgICgweDAxPDwyMCl8MHg4Q0NDQywKKyAgICAoMHgwMjw8MjApfDB4NDAwNTgsLy8gMjAwNjA2MjcgQW5zb24gMHg0MDFEOCwKKyAgICAoMHgwMzw8MjApfDB4Q0ZGRjAsCisgICAgKDB4MDQ8PDIwKXwweDI0MTAwLC8vIDIwMDYwNjI3IEFuc29uIDB4MjM4MDAsCisgICAgKDB4MDU8PDIwKXwweEEzQjJGLC8vIDIwMDYwNjI3IEFuc29uIDB4QTNCNzIKKyAgICAoMHgwNjw8MjApfDB4NkRBMDEsCisgICAgKDB4MDc8PDIwKXwweEUzNjI4LC8vIDIwMDYwNjI3IEFuc29uIDB4RTE2ODgsCisgICAgKDB4MDg8PDIwKXwweDExNjAwLAorICAgICgweDA5PDwyMCl8MHg5REMwMiwvLyAyMDA2MDYyNyBBbm9zbiAweDk3NjAyLC8vMHg5OUUwMiwgLy8weDlBRTAyCisgICAgKDB4MEE8PDIwKXwweDVkZGIwLCAvLyA5NDEyMDYgRm9yIFFDT00gaW50ZXJmZXJlbmNlIDB4NTg4YjAsLy8weDVEREIwLCA5NDA2MDEgYWRqIDB4NWFhMzAgZm9yIGJsdWV0b290aAorICAgICgweDBCPDwyMCl8MHhEOTkwMCwKKyAgICAoMHgwQzw8MjApfDB4M0ZGQkQsCisgICAgKDB4MEQ8PDIwKXwweEIwMDAwLAorICAgICgweDBGPDwyMCl8MHhGMDFBMCAvLyAyMDA2MDYyNyBBbnNvbiAweEYwMEEwCit9OworCit1MzIgYWwyMjMwc19yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MjApfDB4MDlFRkMsCisgICAgKDB4MDE8PDIwKXwweDhDQ0NDLAorICAgICgweDAyPDwyMCl8MHg0MDA1OCwvLyAyMDA2MDQxOSAweDQwMUQ4LAorICAgICgweDAzPDwyMCl8MHhDRkZGMCwKKyAgICAoMHgwNDw8MjApfDB4MjQxMDAsLy8gMjAwNjA0MTkgMHgyMzgwMCwKKyAgICAoMHgwNTw8MjApfDB4QTNCMkYsLy8gMjAwNjA0MTkgMHhBM0I3MiwKKyAgICAoMHgwNjw8MjApfDB4NkRBMDEsCisgICAgKDB4MDc8PDIwKXwweEUzNjI4LC8vIDIwMDYwNDE5IDB4RTE2ODgsCisgICAgKDB4MDg8PDIwKXwweDExNjAwLAorICAgICgweDA5PDwyMCl8MHg5REMwMiwvLyAyMDA2MDQxOSAweDk3NjAyLC8vMHg5OUUwMiwgLy8weDlBRTAyCisgICAgKDB4MEE8PDIwKXwweDVEREIwLC8vIDk0MTIwNiBGb3IgUUNPTSBpbnRlcmZlcmVuY2UgMHg1ODhiMCwvLzB4NUREQjAsIDk0MDYwMSBhZGogMHg1YWEzMCBmb3IgYmx1ZXRvb3RoCisgICAgKDB4MEI8PDIwKXwweEQ5OTAwLAorICAgICgweDBDPDwyMCl8MHgzRkZCRCwKKyAgICAoMHgwRDw8MjApfDB4QjAwMDAsCisgICAgKDB4MEY8PDIwKXwweEYwMUEwIC8vIDIwMDYwNDE5IDB4RjAwQTAKK307CisKK3UzMiBhbDIyMzBfY2hhbm5lbF9kYXRhXzI0W11bMl0gPQoreworICAgIHsoMHgwMDw8MjApfDB4MDlFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDA8PDIwKXwweDA5RUZDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAwPDwyMCl8MHgwOUU3QywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMDw8MjApfDB4MDlFN0MsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDA8PDIwKXwweDA1RUZDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAwPDwyMCl8MHgwNUVGQywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMDw8MjApfDB4MDVFN0MsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDA8PDIwKXwweDA1RTdDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAwPDwyMCl8MHgwREVGQywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMDw8MjApfDB4MERFRkMsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDA8PDIwKXwweDBERTdDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAwPDwyMCl8MHgwREU3QywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMDw8MjApfDB4MDNFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDA8PDIwKXwweDAzRTdDLCAoMHgwMTw8MjApfDB4ODY2NjZ9IC8vIGNoYW5uZTEgMTQKK307CisKKy8vIEN1cnJlbnQgc2V0dGluZy4gdTMyIGFpcm9oYV9wb3dlcl9kYXRhXzI0W10gPSB7KDB4MDk8PDIwKXwweDkwMjAyLCAoMHgwOTw8MjApfDB4OTY2MDIsICgweDA5PDwyMCl8MHg5NzYwMn07CisjZGVmaW5lIEFJUk9IQV9UWFZHQV9MT1dfSU5ERVgJCTMxCQkvLyBJbmRleCBmb3IgMHg5MDIwMgorI2RlZmluZSBBSVJPSEFfVFhWR0FfTUlERExFX0lOREVYCTEyCQkvLyBJbmRleCBmb3IgMHg5NjYwMgorI2RlZmluZSBBSVJPSEFfVFhWR0FfSElHSF9JTkRFWAkJOAkJLy8gSW5kZXggZm9yIDB4OTc2MDIgMS4wLjI0LjAgMS4wLjI4LjAKKy8qCit1MzIgYWlyb2hhX3Bvd2VyX2RhdGFfMjRbXSA9Cit7CisgICAgMHg5RkUwMiwgICAgICAgICAgLy8gTWF4IC0gMCBkQgorICAgIDB4OUJFMDIsICAgICAgICAgIC8vIE1heCAtIDEgZEIKKyAgICAweDlERTAyLCAgICAgICAgICAvLyBNYXggLSAyIGRCCisgICAgMHg5OUUwMiwgICAgICAgICAgLy8gTWF4IC0gMyBkQgorICAgIDB4OUVFMDIsICAgICAgICAgIC8vIE1heCAtIDQgZEIKKyAgICAweDlBRTAyLCAgICAgICAgICAvLyBNYXggLSA1IGRCCisgICAgMHg5Q0UwMiwgICAgICAgICAgLy8gTWF4IC0gNiBkQgorICAgIDB4OThFMDIsICAgICAgICAgIC8vIE1heCAtIDcgZEIKKyAgICAweDk3NjAyLCAgICAgICAgICAvLyBNYXggLSA4IGRCCisgICAgMHg5MzYwMiwgICAgICAgICAgLy8gTWF4IC0gOSBkQgorICAgIDB4OTU2MDIsICAgICAgICAgIC8vIE1heCAtIDEwIGRCCisgICAgMHg5MTYwMiwgICAgICAgICAgLy8gTWF4IC0gMTEgZEIKKyAgICAweDk2NjAyLCAgICAgICAgICAvLyBNYXggLSAxMiBkQgorICAgIDB4OTI2MDIsICAgICAgICAgIC8vIE1heCAtIDEzIGRCCisgICAgMHg5NDYwMiwgICAgICAgICAgLy8gTWF4IC0gMTQgZEIKKyAgICAweDkwNjAyLCAgICAgICAgICAvLyBNYXggLSAxNSBkQgorICAgIDB4OTdBMDIsICAgICAgICAgIC8vIE1heCAtIDE2IGRCCisgICAgMHg5M0EwMiwgICAgICAgICAgLy8gTWF4IC0gMTcgZEIKKyAgICAweDk1QTAyLCAgICAgICAgICAvLyBNYXggLSAxOCBkQgorICAgIDB4OTFBMDIsICAgICAgICAgIC8vIE1heCAtIDE5IGRCCisgICAgMHg5NkEwMiwgICAgICAgICAgLy8gTWF4IC0gMjAgZEIKKyAgICAweDkyQTAyLCAgICAgICAgICAvLyBNYXggLSAyMSBkQgorICAgIDB4OTRBMDIsICAgICAgICAgIC8vIE1heCAtIDIyIGRCCisgICAgMHg5MEEwMiwgICAgICAgICAgLy8gTWF4IC0gMjMgZEIKKyAgICAweDk3MjAyLCAgICAgICAgICAvLyBNYXggLSAyNCBkQgorICAgIDB4OTMyMDIsICAgICAgICAgIC8vIE1heCAtIDI1IGRCCisgICAgMHg5NTIwMiwgICAgICAgICAgLy8gTWF4IC0gMjYgZEIKKyAgICAweDkxMjAyLCAgICAgICAgICAvLyBNYXggLSAyNyBkQgorICAgIDB4OTYyMDIsICAgICAgICAgIC8vIE1heCAtIDI4IGRCCisgICAgMHg5MjIwMiwgICAgICAgICAgLy8gTWF4IC0gMjkgZEIKKyAgICAweDk0MjAyLCAgICAgICAgICAvLyBNYXggLSAzMCBkQgorICAgIDB4OTAyMDIgICAgICAgICAgIC8vIE1heCAtIDMxIGRCCit9OworKi8KKworLy8gMjAwNDA5MjcgMS4xLjY5LjEwMDAgeWJqaWFuZworLy8gZnJvbSBKb2huCit1MzIgYWwyMjMwX3R4dmdhX2RhdGFbXVsyXSA9Cit7CisJLy92YWx1ZQksIGluZGV4CisJezB4MDkwMjAyLCAwfSwKKwl7MHgwOTQyMDIsIDJ9LAorCXsweDA5MjIwMiwgNH0sCisJezB4MDk2MjAyLCA2fSwKKwl7MHgwOTEyMDIsIDh9LAorCXsweDA5NTIwMiwgMTB9LAorCXsweDA5MzIwMiwgMTJ9LAorCXsweDA5NzIwMiwgMTR9LAorCXsweDA5MEEwMiwgMTZ9LAorCXsweDA5NEEwMiwgMTh9LAorCXsweDA5MkEwMiwgMjB9LAorCXsweDA5NkEwMiwgMjJ9LAorCXsweDA5MUEwMiwgMjR9LAorCXsweDA5NUEwMiwgMjZ9LAorCXsweDA5M0EwMiwgMjh9LAorCXsweDA5N0EwMiwgMzB9LAorCXsweDA5MDYwMiwgMzJ9LAorCXsweDA5NDYwMiwgMzR9LAorCXsweDA5MjYwMiwgMzZ9LAorCXsweDA5NjYwMiwgMzh9LAorCXsweDA5MTYwMiwgNDB9LAorCXsweDA5NTYwMiwgNDJ9LAorCXsweDA5MzYwMiwgNDR9LAorCXsweDA5NzYwMiwgNDZ9LAorCXsweDA5MEUwMiwgNDh9LAorCXsweDA5OEUwMiwgNDl9LAorCXsweDA5NEUwMiwgNTB9LAorCXsweDA5Q0UwMiwgNTF9LAorCXsweDA5MkUwMiwgNTJ9LAorCXsweDA5QUUwMiwgNTN9LAorCXsweDA5NkUwMiwgNTR9LAorCXsweDA5RUUwMiwgNTV9LAorCXsweDA5MUUwMiwgNTZ9LAorCXsweDA5OUUwMiwgNTd9LAorCXsweDA5NUUwMiwgNTh9LAorCXsweDA5REUwMiwgNTl9LAorCXsweDA5M0UwMiwgNjB9LAorCXsweDA5QkUwMiwgNjF9LAorCXsweDA5N0UwMiwgNjJ9LAorCXsweDA5RkUwMiwgNjN9Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3IgQWlyb2hhIEFMNzIzMCwgMi40R2h6IGJhbmQKKy8vIEVkaXQgYnkgVGlnZXIsIChNYXJjaCwgOSwgMjAwNSkKKy8vIDI0Yml0LCBNU0IgZmlyc3QKKworLy9jaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVyczoKK3UzMiBhbDcyMzBfcmZfZGF0YV8yNFtdCT0KK3sKKwkoMHgwMDw8MjQpfDB4MDAzNzkwLAorCSgweDAxPDwyNCl8MHgxMzMzMzEsCisJKDB4MDI8PDI0KXwweDg0MUZGMiwKKwkoMHgwMzw8MjQpfDB4M0ZERkEzLAorCSgweDA0PDwyNCl8MHg3RkQ3ODQsCisJKDB4MDU8PDI0KXwweDgwMkI1NSwKKwkoMHgwNjw8MjQpfDB4NTZBRjM2LAorCSgweDA3PDwyNCl8MHhDRTAyMDcsCisJKDB4MDg8PDI0KXwweDZFQkMwOCwKKwkoMHgwOTw8MjQpfDB4MjIxQkI5LAorCSgweDBBPDwyNCl8MHhFMDAwMEEsCisJKDB4MEI8PDI0KXwweDA4MDcxQiwKKwkoMHgwQzw8MjQpfDB4MDAwQTNDLAorCSgweDBEPDwyNCl8MHhGRkZGRkQsCisJKDB4MEU8PDI0KXwweDAwMDAwRSwKKwkoMHgwRjw8MjQpfDB4MUFCQThGCit9OworCit1MzIgYWw3MjMwX2NoYW5uZWxfZGF0YV8yNFtdWzJdID0KK3sKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdDMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMTMKKwl7KDB4MDA8PDI0KXwweDAwMzdDMCwgKDB4MDE8PDI0KXwweDA2NjY2MX0gIC8vIGNoYW5uZWwgMTQKK307CisKKy8vY2hhbm5lbCBpbmRlcGVuZGVudCByZWdpc3RlcnM6Cit1MzIgYWw3MjMwX3JmX2RhdGFfNTBbXQk9Cit7CisJKDB4MDA8PDI0KXwweDBGRjUyMCwKKwkoMHgwMTw8MjQpfDB4MDAwMDAxLAorCSgweDAyPDwyNCl8MHg0NTFGRTIsCisJKDB4MDM8PDI0KXwweDVGREZBMywKKwkoMHgwNDw8MjQpfDB4NkZENzg0LAorCSgweDA1PDwyNCl8MHg4NTNGNTUsCisJKDB4MDY8PDI0KXwweDU2QUYzNiwKKwkoMHgwNzw8MjQpfDB4Q0UwMjA3LAorCSgweDA4PDwyNCl8MHg2RUJDMDgsCisJKDB4MDk8PDI0KXwweDIyMUJCOSwKKwkoMHgwQTw8MjQpfDB4RTA2MDBBLAorCSgweDBCPDwyNCl8MHgwODA0NEIsCisJKDB4MEM8PDI0KXwweDAwMTQzQywKKwkoMHgwRDw8MjQpfDB4RkZGRkZELAorCSgweDBFPDwyNCl8MHgwMDAwMEUsCisJKDB4MEY8PDI0KXwweDEyQkFDRiAvLzVHaHogZGVmYXVsdCBzdGF0ZQorfTsKKwordTMyIGFsNzIzMF9jaGFubmVsX2RhdGFfNVtdWzRdID0KK3sKKwkvL2NoYW5uZWwgZGVwZW5kZW50IHJlZ2lzdGVyczogMHgwMCwgMHgwMSBhbmQgMHgwNAorCS8vMTFKID09PT09PT09PT09CisJezE4NCwgKDB4MDA8PDI0KXwweDBGRjUyMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTg0CisJezE4OCwgKDB4MDA8PDI0KXwweDBGRjUyMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTg4CisJezE5MiwgKDB4MDA8PDI0KXwweDBGRjUzMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTkyCisJezE5NiwgKDB4MDA8PDI0KXwweDBGRjUzMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTk2CisJezgsICAgKDB4MDA8PDI0KXwweDBGRjU0MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDA4CisJezEyLCAgKDB4MDA8PDI0KXwweDBGRjU0MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDEyCisJezE2LCAgKDB4MDA8PDI0KXwweDBGRjU1MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDE2CisJezM0LCAgKDB4MDA8PDI0KXwweDBGRjU2MCwgKDB4MDE8PDI0KXwweDA1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM0CisJezM4LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDEwMDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM4CisJezQyLCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDFBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQyCisJezQ2LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDA1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ2CisJLy8xMSBBL0ggPT09PT09PT09CisJezM2LCAgKDB4MDA8PDI0KXwweDBGRjU2MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM2CisJezQwLCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQwCisJezQ0LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ0CisJezQ4LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ4CisJezUyLCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDUyCisJezU2LCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDU2CisJezYwLCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDYwCisJezY0LCAgKDB4MDA8PDI0KXwweDBGRjU5MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDY0CisJezEwMCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTAwCisJezEwNCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTA0CisJezEwOCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTA4CisJezExMiwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTEyCisJezExNiwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTE2CisJezEyMCwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTIwCisJezEyNCwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTI0CisJezEyOCwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTI4CisJezEzMiwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTMyCisJezEzNiwgKDB4MDA8PDI0KXwweDBGRjVGMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTM2CisJezE0MCwgKDB4MDA8PDI0KXwweDBGRjVGMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTQwCisJezE0OSwgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDE4MDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTQ5CisJezE1MywgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDAyQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTUzCisJezE1NywgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDBENTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTU3CisJezE2MSwgKDB4MDA8PDI0KXwweDBGRjYxMCwgKDB4MDE8PDI0KXwweDE4MDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTYxCisJezE2NSwgKDB4MDA8PDI0KXwweDBGRjYxMCwgKDB4MDE8PDI0KXwweDAyQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0gIC8vIGNoYW5uZWwgMTY1Cit9OworCisvLzsgUkYgQ2FsaWJyYXRpb24gPD09PSBSZWdpc3RlciAweDBGCisvLzB4MEYgMHgxQUJBOEY7IHN0YXJ0IGZyb20gMi40R2h6IGRlZmF1bHQgc3RhdGUKKy8vMHgwRiAweDlBQkE4RjsgVFhEQyBjb21wZW5zYXRpb24KKy8vMHgwRiAweDNBQkE4RjsgUlhGSUwgYWRqdXN0bWVudAorLy8weDBGIDB4MUFCQThGOyByZXN0b3JlIDIuNEdoeiBkZWZhdWx0IHN0YXRlCisKKy8vO1RYVkdBIE1hcHBpbmcgVGFibGUgPD09PSBSZWdpc3RlciAweDBCCit1MzIgYWw3MjMwX3R4dmdhX2RhdGFbXVsyXSA9Cit7CisJezB4MDgwNDBCLCAwfSwgLy9UWFZHQT0wOworCXsweDA4MDQxQiwgMX0sIC8vVFhWR0E9MTsKKwl7MHgwODA0MkIsIDJ9LCAvL1RYVkdBPTI7CisJezB4MDgwNDNCLCAzfSwgLy9UWFZHQT0zOworCXsweDA4MDQ0QiwgNH0sIC8vVFhWR0E9NDsKKwl7MHgwODA0NUIsIDV9LCAvL1RYVkdBPTU7CisJezB4MDgwNDZCLCA2fSwgLy9UWFZHQT02OworCXsweDA4MDQ3QiwgN30sIC8vVFhWR0E9NzsKKwl7MHgwODA0OEIsIDh9LCAvL1RYVkdBPTg7CisJezB4MDgwNDlCLCA5fSwgLy9UWFZHQT05OworCXsweDA4MDRBQiwgMTB9LCAvL1RYVkdBPTEwOworCXsweDA4MDRCQiwgMTF9LCAvL1RYVkdBPTExOworCXsweDA4MDRDQiwgMTJ9LCAvL1RYVkdBPTEyOworCXsweDA4MDREQiwgMTN9LCAvL1RYVkdBPTEzOworCXsweDA4MDRFQiwgMTR9LCAvL1RYVkdBPTE0OworCXsweDA4MDRGQiwgMTV9LCAvL1RYVkdBPTE1OworCXsweDA4MDUwQiwgMTZ9LCAvL1RYVkdBPTE2OworCXsweDA4MDUxQiwgMTd9LCAvL1RYVkdBPTE3OworCXsweDA4MDUyQiwgMTh9LCAvL1RYVkdBPTE4OworCXsweDA4MDUzQiwgMTl9LCAvL1RYVkdBPTE5OworCXsweDA4MDU0QiwgMjB9LCAvL1RYVkdBPTIwOworCXsweDA4MDU1QiwgMjF9LCAvL1RYVkdBPTIxOworCXsweDA4MDU2QiwgMjJ9LCAvL1RYVkdBPTIyOworCXsweDA4MDU3QiwgMjN9LCAvL1RYVkdBPTIzOworCXsweDA4MDU4QiwgMjR9LCAvL1RYVkdBPTI0OworCXsweDA4MDU5QiwgMjV9LCAvL1RYVkdBPTI1OworCXsweDA4MDVBQiwgMjZ9LCAvL1RYVkdBPTI2OworCXsweDA4MDVCQiwgMjd9LCAvL1RYVkdBPTI3OworCXsweDA4MDVDQiwgMjh9LCAvL1RYVkdBPTI4OworCXsweDA4MDVEQiwgMjl9LCAvL1RYVkdBPTI5OworCXsweDA4MDVFQiwgMzB9LCAvL1RYVkdBPTMwOworCXsweDA4MDVGQiwgMzF9LCAvL1RYVkdBPTMxOworCXsweDA4MDYwQiwgMzJ9LCAvL1RYVkdBPTMyOworCXsweDA4MDYxQiwgMzN9LCAvL1RYVkdBPTMzOworCXsweDA4MDYyQiwgMzR9LCAvL1RYVkdBPTM0OworCXsweDA4MDYzQiwgMzV9LCAvL1RYVkdBPTM1OworCXsweDA4MDY0QiwgMzZ9LCAvL1RYVkdBPTM2OworCXsweDA4MDY1QiwgMzd9LCAvL1RYVkdBPTM3OworCXsweDA4MDY2QiwgMzh9LCAvL1RYVkdBPTM4OworCXsweDA4MDY3QiwgMzl9LCAvL1RYVkdBPTM5OworCXsweDA4MDY4QiwgNDB9LCAvL1RYVkdBPTQwOworCXsweDA4MDY5QiwgNDF9LCAvL1RYVkdBPTQxOworCXsweDA4MDZBQiwgNDJ9LCAvL1RYVkdBPTQyOworCXsweDA4MDZCQiwgNDN9LCAvL1RYVkdBPTQzOworCXsweDA4MDZDQiwgNDR9LCAvL1RYVkdBPTQ0OworCXsweDA4MDZEQiwgNDV9LCAvL1RYVkdBPTQ1OworCXsweDA4MDZFQiwgNDZ9LCAvL1RYVkdBPTQ2OworCXsweDA4MDZGQiwgNDd9LCAvL1RYVkdBPTQ3OworCXsweDA4MDcwQiwgNDh9LCAvL1RYVkdBPTQ4OworCXsweDA4MDcxQiwgNDl9LCAvL1RYVkdBPTQ5OworCXsweDA4MDcyQiwgNTB9LCAvL1RYVkdBPTUwOworCXsweDA4MDczQiwgNTF9LCAvL1RYVkdBPTUxOworCXsweDA4MDc0QiwgNTJ9LCAvL1RYVkdBPTUyOworCXsweDA4MDc1QiwgNTN9LCAvL1RYVkdBPTUzOworCXsweDA4MDc2QiwgNTR9LCAvL1RYVkdBPTU0OworCXsweDA4MDc3QiwgNTV9LCAvL1RYVkdBPTU1OworCXsweDA4MDc4QiwgNTZ9LCAvL1RYVkdBPTU2OworCXsweDA4MDc5QiwgNTd9LCAvL1RYVkdBPTU3OworCXsweDA4MDdBQiwgNTh9LCAvL1RYVkdBPTU4OworCXsweDA4MDdCQiwgNTl9LCAvL1RYVkdBPTU5OworCXsweDA4MDdDQiwgNjB9LCAvL1RYVkdBPTYwOworCXsweDA4MDdEQiwgNjF9LCAvL1RYVkdBPTYxOworCXsweDA4MDdFQiwgNjJ9LCAvL1RYVkdBPTYyOworCXsweDA4MDdGQiwgNjN9LCAvL1RYVkdBPTYzOworfTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisvLzsgVzg5UkYyNDIgUkZJQyBTUEkgcHJvZ3JhbW1pbmcgaW5pdGlhbCBkYXRhCisvLzsgV2luYm9uZCBXTEFOIDExZyBSRklDIEJCLVNQSSByZWdpc3RlciAtLSB2ZXJzaW9uIEZBNTk3NkEgcmV2IDEuM2IKKy8vOyBVcGRhdGUgRGF0ZTogT2NvdGJlciAzLCAyMDA1IGJ5IFBQMTAgSHNpYW5nLVRlIEhvCisvLzsKKy8vOyBWZXJzaW9uIDEuM2IgcmV2aXNpb24gaXRlbXM6IChPY3QuIDEsIDIwMDUgYnkgSFRIbykgZm9yIEZBNTk3NkEKK3UzMiB3ODlyZjI0Ml9yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MjQpfDB4Rjg2MTAwLCAvLyAyMDA2MDcyMSAweEY4NjEwMCwgLy87IDNFMTg0OyBNT0RBICAoMHgwMCkgLS0gTm9ybWFsIG1vZGUgOyBjYWxpYnJhdGlvbiBvZmYKKyAgICAoMHgwMTw8MjQpfDB4RUZGRkMyLCAvLzsgM0JGRkY7IE1PREIgICgweDAxKSAtLSB0dXJuIG9mZiBSU1NJLCBhbmQgb3RoZXIgY2lyY3VpdHMgYXJlIHR1cm5lZCBvbgorICAgICgweDAyPDwyNCl8MHgxMDI1MDQsIC8vOyAwNDA5NDsgRlNFVCAgKDB4MDIpIC0tIGRlZmF1bHQgMjBNSHogY3J5c3RhbCA7IEljbXA9MS41bUEKKyAgICAoMHgwMzw8MjQpfDB4MDI2Mjg2LCAvLzsgMDA5OEE7IEZDSE4gICgweDAzKSAtLSBkZWZhdWx0IENINywgMjQ0Mk1IegorICAgICgweDA0PDwyNCl8MHgwMDAyMDgsIC8vIDIwMDYwNjEyLjEuYSAweDAwMDJDOCwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgwMDAzODgKKwkJCQkJCSAvLzsgMDIwMDg7IEZDQUwgICgweDA0KSAtLSBYVEFMIEZyZXEgVHJpbT0wMDEwMDAgKHNvY2tldCBib2FyZCMxKTsgRkE1OTc2QVlHX3YxLjNDCisgICAgKDB4MDU8PDI0KXwweDI0QzYwQSwgLy8gMjAwNjA2MTIuMS5hIDB4MjRDNThBLCAvLyA5NDEwMDMgMHgyNEM0OEEsIC8vIDIwMDUwODE4LjIgMHgyNDg0OEEsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MjRDNDhBCisJCQkJCQkgLy87IDA5MzE2OyBHQU5BICAoMHgwNSkgLS0gVFggVkdBIGRlZmF1bHQgKFRYVkdBPTB4MTgoMTIpKSAmIFRYR1BLPTExMCA7IEZBNTk3NkFfMS4zRAorICAgICgweDA2PDwyNCl8MHgzNDMyQ0MsIC8vIDk0MTAwMyAweDI2QzM0QywgLy8gMjAwNTA4MTggMHgwNkI0MEMKKwkJCQkJCSAvLzsgMEQwQ0I7IEdBTkIgICgweDA2KSAtLSBSWERDKERDIG9mZnNldCkgb247IExOQT0xMTsgUlhWR0E9MDAxMDExKDExKSA7IFJYRkxTVz0xMSgwMTAwMDEpOyBSWEdQSz0wMDsgUlhHQ0Y9MDA7IC01MGRCbSBpbnB1dAorICAgICgweDA3PDwyNCl8MHgwQzY4Q0UsIC8vIDIwMDUwODE4LjIgMHgwQzY2Q0UsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MEM2OENFCisJCQkJCQkgLy87IDAzMUEzOyBGSUxUICAoMHgwNykgLS0gVFgvUlggZmlsdGVyIHdpdGggYXV0by10dW5pbmc7IFRGTEJXPTAxMTsgUkZMQlc9MTAwCisgICAgKDB4MDg8PDI0KXwweDEwMDAxMCwgLy87IDA0MDAwOyBUQ0FMICAoMHgwOCkgLS0gLy9mb3IgTE8KKyAgICAoMHgwOTw8MjQpfDB4MDA0MDEyLCAvLyAyMDA2MDYxMi4xLmEgMHg2RTQwMTIsIC8vIDB4MDA0MDEyLAorCQkJCQkJIC8vOyAxQjkwMDsgUkNBTEEgKDB4MDkpIC0tIEZBU1RTPTExOyBIUERFPTAxICgxMDBuc2VjKTsgU0VIUD0xIChzZWxlY3QgQjAgcGluPVJYSFApOyBSWEhQPTEgKFR1cm4gb24gUlhIUCBmdW5jdGlvbikoRkE1OTc2QV8xLjNDKQorICAgICgweDBBPDwyNCl8MHg3MDQwMTQsIC8vOyAxQzEwMDsgUkNBTEIgKDB4MEEpCisgICAgKDB4MEI8PDI0KXwweDE4QkRENiwgLy8gOTQxMDAzIDB4MTgwNUQ2LCAvLyAyMDA1MDgxOC4yIDB4MTgwMUQ2LCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDE4MDVENgorCQkJCQkJIC8vOyAwNjJGNzsgSVFDQUwgKDB4MEIpIC0tIFR1cm4gb24gTE8gcGhhc2UgdHVuZXI9MDExMSAmIFJYLUxPIHBoYXNlID0gMDExMTsgRkE1OTc2QV8xLjNCICgyMDA1LzA5LzI5KQorICAgICgweDBDPDwyNCl8MHg1NzU1NTgsIC8vIDIwMDUwODE4LjIgMHg1NTU1NTgsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4NTc1NTU4CisJCQkJCQkgLy87IDE1RDU1IDsgSUJTQSAgKDB4MEMpIC0tIElGUHJlID0xMSA7IFRDNTM3NkFfdjEuM0EgZm9yIGNvcm5lcgorICAgICgweDBEPDwyNCl8MHg1NTU0NUEsIC8vIDIwMDYwNjEyLjEuYSAweDU1NTU1QSwKKwkJCQkJCSAvLzsgMTU1NTUgOyBJQlNCICAoMHgwRCkKKyAgICAoMHgwRTw8MjQpfDB4NTU1N0RDLCAvLyAyMDA2MDYxMi4xLmEgMHg1NTU1NUMsIC8vIDk0MTAwMyAweDU1NTdEQywKKwkJCQkJCSAvLzsgMTU1NUYgOyBJQlNDICAoMHgwRSkgLS0gSVJMTkEgJiBJUkxOQiAoUFRBVCAmIENvbnN0IGN1cnJlbnQpPTAxLzAxOyBGQTU5NzZCXzEuM0YgKDIwMDUvMTEvMjUpCisJKDB4MTA8PDI0KXwweDAwMEMyMCwgLy8gOTQxMDAzIDB4MDAwMDIwLCAvLyAyMDA1MDgxOAorCQkJCQkJIC8vOyAwMDAzMCA7IFRNT0RBICgweDEwKSAtLSBMTkFfZ2Fpbl9zdGVwPTAwMTEgOyBMTkE9MTUvMTZkQgorCSgweDExPDwyNCl8MHgwQzAwMjIsIC8vIDk0MTAwMyAweDAzMDAyMiAgLy8gMjAwNTA4MTguMiAweDAzMDAyMiAgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgwQzAwMjIKKwkJCQkJCSAvLzsgMDMwMDAgOyBUTU9EQiAoMHgxMSkgLS0gVHVybiBPTiBSWC1RIHBhdGggVGVzdCBTd2l0Y2g7IFRvIGltcHJvdmUgSVEgcGF0aCBncm91cCBkZWxheSAoRkE1OTc2QV8xLjNDKQorCSgweDEyPDwyNCl8MHgwMDAwMjQgIC8vIDIwMDYwNjEyLjEuYSAweDAwMTgyNCAgLy8gOTQxMDAzIGFkZAorCQkJCQkJIC8vOyBUTU9EQyAoMHgxMikgLS0gVHVybiBPRkYgVGVtcGVhcnVyZSBzZW5zb3IKK307CisKK3UzMiB3ODlyZjI0Ml9jaGFubmVsX2RhdGFfMjRbXVsyXSA9Cit7CisgICAgeygweDAzPDwyNCl8MHgwMjVCMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwyNCl8MHgwMjVDNDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwyNCl8MHgwMjVEODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwyNCl8MHgwMjVFQzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwyNCl8MHgwMjYwMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwyNCl8MHgwMjYxNDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwyNCl8MHgwMjYyODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwyNCl8MHgwMjYzQzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwyNCl8MHgwMjY1MDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwyNCl8MHgwMjY2NDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwyNCl8MHgwMjY3ODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwyNCl8MHgwMjY4QzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwyNCl8MHgwMjZBMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwyNCl8MHgwMjZEMDYsICgweDA0PDwyNCl8MHgwODA0MDh9ICAvLyBjaGFubmUxIDE0Cit9OworCit1MzIgdzg5cmYyNDJfcG93ZXJfZGF0YV8yNFtdID0geygweDA1PDwyNCl8MHgyNEM0OEEsICgweDA1PDwyNCl8MHgyNEM0OEEsICgweDA1PDwyNCl8MHgyNEM0OEF9OworCisvLyAyMDA2MDMxNS42IEVubGFyZ2UgZm9yIG5ldyBzY2FsZQorLy8gMjAwNjAzMTYuNiAyMDA2MDYxOS4yLmEgYWRkIG1hcHBpbmcgYXJyYXkKK3UzMiB3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tdWzJdID0KK3sKKwl7MCwgMH0gLCAvLyBOZXcgPC0+IE9sZAorCXsxLCAxfSAsCisJezIsIDJ9ICwKKwl7MywgM30gLAorCXs0LCA0fSAsCisJezYsIDV9ICwKKwl7OCwgNiB9LAorCXsxMCwgNyB9LAorCXsxMiwgOCB9LAorCXsxNCwgOSB9LAorCXsxNiwgMTB9LAorCXsxOCwgMTF9LAorCXsyMCwgMTJ9LAorCXsyMiwgMTN9LAorCXsyNCwgMTR9LAorCXsyNiwgMTV9LAorCXsyOCwgMTZ9LAorCXszMCwgMTd9LAorCXszMiwgMTh9LAorCXszNCwgMTl9LAorCisKK307CisKKy8vIDIwMDYwNjE5LjMgbW9kaWZ5IGZyb20gQnJ1Y2UncyBtYWlsCit1MzIgdzg5cmYyNDJfdHh2Z2FfZGF0YVtdWzVdID0KK3sKKwkvL2xvdyBnYWluIG1vZGUKKwl7ICgweDA1PDwyNCl8MHgyNEMwMEEsIDAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMxMzEgfSwvLyAgOyBtaW4gZ2FpbgorCXsgKDB4MDU8PDI0KXwweDI0QzgwQSwgMSwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzA0QSwgMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LC8vICAoZGVmYXVsdCkgKzE0ZEJtIChBTlQpCisJeyAoMHgwNTw8MjQpfDB4MjRDODRBLCAzLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMTMxIH0sCisKKwkvL1RYVkdBPTB4MTAKKwl7ICgweDA1PDwyNCl8MHgyNEM0MEEsIDQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NjA2MDM4MzggfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM0MEEsIDUsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NjU2NTNCM0IgfSwKKworCS8vVFhWR0E9MHgxMQorCXsgKDB4MDU8PDI0KXwweDI0QzQ0QSwgNiwgMHgwMDI0MUYxMywgMHgwNzAwRkZGRiwgMHg1ODU4MzMzMyB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzQ0QSwgNywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RTVFMzczNyB9LAorCisJLy9UWFZHQT0weDEyCisJeyAoMHgwNTw8MjQpfDB4MjRDNDhBLCA4LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNDhBLCA5LCAweDAwMjQxRjEzLCAweDA3MDBGRkZGLCAweDU5NTkzNDM0IH0sCisKKwkvL1RYVkdBPTB4MTMKKwl7ICgweDA1PDwyNCl8MHgyNEM0Q0EsIDEwLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMDMwIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNENBLCAxMSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1NjU2MzIzMiB9LAorCisJLy9UWFZHQT0weDE0CisJeyAoMHgwNTw8MjQpfDB4MjRDNTBBLCAxMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1NDU0MzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzUwQSwgMTMsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTg1ODM0MzQgfSwKKworCS8vVFhWR0E9MHgxNQorCXsgKDB4MDU8PDI0KXwweDI0QzU0QSwgMTQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTQ1NDMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM1NEEsIDE1LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDU5NTkzNDM0IH0sCisKKwkvL1RYVkdBPTB4MTYKKwl7ICgweDA1PDwyNCl8MHgyNEM1OEEsIDE2LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU1NTUzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNThBLCAxNywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1QjVCMzUzNSB9LAorCisJLy9UWFZHQT0weDE3CisJeyAoMHgwNTw8MjQpfDB4MjRDNUNBLCAxOCwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MTUxMkYyRiB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzVDQSwgMTksIDB4MDAyNDFGMTMsIDB4MDcwMEZGRkYsIDB4NTU1NTMxMzEgfSwKKworCS8vVFhWR0E9MHgxOAorCXsgKDB4MDU8PDI0KXwweDI0QzYwQSwgMjAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NEY0RjJFMkUgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2MEEsIDIxLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisKKwkvL1RYVkdBPTB4MTkKKwl7ICgweDA1PDwyNCl8MHgyNEM2NEEsIDIyLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDRFNEUyRDJEIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNjRBLCAyMywgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MzUzMzAzMCB9LAorCisJLy9UWFZHQT0weDFBCisJeyAoMHgwNTw8MjQpfDB4MjRDNjhBLCAyNCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MDUwMkUyRSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzY4QSwgMjUsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTU1NTMxMzEgfSwKKworCS8vVFhWR0E9MHgxQgorCXsgKDB4MDU8PDI0KXwweDI0QzZDQSwgMjYsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTM1MzMwMzAgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2Q0EsIDI3LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVBNUEzNDM0IH0sCisKKwkvL1RYVkdBPTB4MUMKKwl7ICgweDA1PDwyNCl8MHgyNEM3MEEsIDI4LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU1NTUzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNzBBLCAyOSwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RDVEMzYzNiB9LAorCisJLy9UWFZHQT0weDFECisJeyAoMHgwNTw8MjQpfDB4MjRDNzRBLCAzMCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RjVGMzczNyB9LAorCXsgKDB4MDU8PDI0KXwweDI0Qzc0QSwgMzEsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NjU2NTNCM0IgfSwKKworCS8vVFhWR0E9MHgxRQorCXsgKDB4MDU8PDI0KXwweDI0Qzc4QSwgMzIsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NjY2NjNCM0IgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM3OEEsIDMzLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDcwNzA0MTQxIH0sCisKKwkvL1RYVkdBPTB4MUYKKwl7ICgweDA1PDwyNCl8MHgyNEM3Q0EsIDM0LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDcyNzI0MjQyIH0KK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIFV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzIC0tCisvLworLy8gIFJvdXRpbmUgRGVzY3JpcHRpb246CisvLyAgICBSZWFkcyBpbiB0aGUgRXRoZXJuZXQgYWRkcmVzcyBmcm9tIHRoZSBJQy4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgcEh3RGF0YSAgICAgICAgLSBUaGUgcEh3RGF0YSBzdHJ1Y3R1cmUKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8KKy8vICAgIFRoZSBhZGRyZXNzIGlzIHN0b3JlZCBpbiBFdGhlcm5ldElEQWRkci4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCXUzMglsdG1wOworCisJLy8gUmVhZGluZyBFdGhlcm5ldCBhZGRyZXNzIGZyb20gRUVQUk9NIGFuZCBzZXQgaW50byBoYXJkd2FyZSBkdWUgdG8gTUFDIGFkZHJlc3MgbWF5YmUgY2hhbmdlLgorCS8vIE9ubHkgdW5wbHVnIGFuZCBwbHVnIGFnYWluIGNhbiBtYWtlIGhhcmR3YXJlIHJlYWQgRUVQUk9NIGFnYWluLiAyMDA2MDcyNworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMDAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVClwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMTAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDIpID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMjAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDQpID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDYpID0gMDsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2U4LCBjcHVfdG9fbGUzMigqKFBVTE9ORylwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzKSApOyAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNlYywgY3B1X3RvX2xlMzIoKihQVUxPTkcpKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MrNCkpICk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENhcmRHZXRNdWx0aWNhc3RCaXQgLS0KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEZvciBhIGdpdmVuIG11bHRpY2FzdCBhZGRyZXNzLCByZXR1cm5zIHRoZSBieXRlIGFuZCBiaXQgaW4gdGhlIGNhcmQgbXVsdGljYXN0IHJlZ2lzdGVycyB0aGF0IGl0IGhhc2hlcyB0by4KKy8vICAgIENhbGxzIENhcmRDb21wdXRlQ3JjKCkgdG8gZGV0ZXJtaW5lIHRoZSBDUkMgdmFsdWUuCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRkcmVzcyAtIHRoZSBhZGRyZXNzCisvLyAgICBCeXRlIC0gdGhlIGJ5dGUgdGhhdCBpdCBoYXNoZXMgdG8KKy8vICAgIFZhbHVlIC0gd2lsbCBoYXZlIGEgMSBpbiB0aGUgcmVsZXZhbnQgYml0CisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCisJCQkJCQkgICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApCit7CisgICAgdTMyIENyYzsKKyAgICB1MzIgQml0TnVtYmVyOworCisgICAgLy8gRmlyc3QgY29tcHV0ZSB0aGUgQ1JDLgorICAgIENyYyA9IENhcmRDb21wdXRlQ3JjKEFkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisKKwkvLyBUaGUgY29tcHV0ZWQgQ1JDIGlzIGJpdDB+MzEgZnJvbSBsZWZ0IHRvIHJpZ2h0CisJLy9BdCBmaXJzdCB3ZSBzaG91bGQgZG8gcmlnaHQgc2hpZnQgMjViaXRzLCBhbmQgcmVhZCA3Yml0cyBieSB1c2luZyAnJicsIDJeNz0xMjgKKwlCaXROdW1iZXIgPSAodTMyKSAoKENyYyA+PiAyNikgJiAweDNmKTsKKworCSpCeXRlICA9ICh1OCkgKEJpdE51bWJlciA+PiAzKTsvLyA5MDA1MTQgb3JpZ2luYWwgKEJpdE51bWJlciAvIDgpCisJKlZhbHVlID0gKHU4KSAoKHU4KTEgPDwgKEJpdE51bWJlciAlIDgpKTsKK30KKwordm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwl1MzIJbHRtcCwgbG9vcDsKKworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA8PSBSRl9NQVhJTV9WMSApCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4ZmZmZmZmMzggKTsKKwllbHNlCisJeworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Y0LCAweEZGNTgwN0ZGICk7Ly8gMjAwNjA3MjEgRm9yIE5FVyBJQyAweEZGNTgwN0ZGCisKKwkJLy8gMjAwNjA1MTEuMSBGaXggdGhlIGZvbGxvd2luZyA0IHN0ZXBzIGZvciBSeCBvZiBSRiAyMjMwIGluaXRpYWwgZmFpbAorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweDgwICk7Ly8gcmVndWxhdG9yIG9uIG9ubHkKKwkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YjggKTsvLyBSRUdfT04gUkZfUlNUTiBvbiwgYW5kCisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCisJCWx0bXAgPSAweDQ5Njg7CisJCWlmKCAocEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfV0JfMjQyKSB8fAorCQkJKFJGX1dCXzI0Ml8xID09IHBId0RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisJCQlsdG1wID0gMHg0NDY4OworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2QwLCBsdG1wICk7CisKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhhMCApOy8vIFBMTF9QRCBSRUZfUEQgc2V0IHRvIDAKKworCQlPU19TTEVFUCgyMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2QwLCAmbHRtcCApOworCQlsb29wID0gNTAwOyAvLyBXYWl0IGZvciA1IHNlY29uZCAyMDA2MTEwMQorCQl3aGlsZSggIShsdG1wICYgMHgyMCkgJiYgbG9vcC0tICkKKwkJeworCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCQlpZiggIVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNkMCwgJmx0bXAgKSApCisJCQkJYnJlYWs7CisJCX0KKworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGUwICk7Ly8gTUxLX0VOCisJfQorCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMSApOy8vIFJlc2V0IGhhcmR3YXJlIGZpcnN0CisJT1NfU0xFRVAoMTAwMDApOyAvLyBBZGQgdGhpcyAyMDA1MTIyMS4xLmIKKworCS8vIFNldCBidXJzdCB3cml0ZSBkZWxheQorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZjgsIDB4N2ZmICk7Cit9CisKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKK3sKKwl1OAlpOworCisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCXsKKwkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDcyMzBfcmZfZGF0YV8yNFtpXTsKKwkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9yZl9kYXRhXzI0W2ldJjB4ZmZmZmZmKTsKKwl9Cit9CisKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wLCBjaGFyIG51bWJlcikKK3sKKwl1OAlpOworCisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCXsKKwkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDcyMzBfcmZfZGF0YV81MFtpXTsKKwkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9yZl9kYXRhXzUwW2ldJjB4ZmZmZmZmKTsKKwl9Cit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBSRlN5bnRoZXNpemVyX2luaXRpYWwgLS0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorUkZTeW50aGVzaXplcl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwl1MzIJYWx0bXBbMzJdOworCVBVTE9ORwlwbHRtcCA9IGFsdG1wOworCXUzMglsdG1wOworCXU4CW51bWJlcj0weDAwOyAvLyBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVyIHZhbGUKKwl1OAlpOworCisJLy8KKwkvLyBiaXRbMzFdICAgICAgU1BJIEVuYWJsZS4KKwkvLyAgICAgICAgICAgICAgMT1wZXJmb3JtIHN5bnRoZXNpemVyIHByb2dyYW0gb3BlcmF0aW9uLiBUaGlzIGJpdCB3aWxsCisJLy8gICAgICAgICAgICAgIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKwkvLyBiaXRbMzBdICAgICAgU1BJIFIvVyBDb250cm9sCisJLy8gICAgICAgICAgICAgIDA9d3JpdGUsICAgIDE9cmVhZAorCS8vIGJpdFsyOToyNF0gICBTUEkgRGF0YSBGb3JtYXQgTGVuZ3RoCisJLy8gYml0WzE3OjQgXSAgIFJGIERhdGEgYml0cy4KKwkvLyBiaXRbMyA6MCBdICAgUkYgYWRkcmVzcy4KKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJY2FzZSBSRl9NQVhJTV8yODI1OgorCWNhc2UgUkZfTUFYSU1fVjE6IC8vIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKQorCQludW1iZXIgPSBzaXplb2YobWF4MjgyNV9yZl9kYXRhKS9zaXplb2YobWF4MjgyNV9yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjVfcmZfZGF0YVtpXTsvLyBCYWNrdXAgUmYgcGFyYW1ldGVyCisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI1X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyNzoKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjdfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjdfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI3X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyODoKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjhfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjhfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI4X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI4X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyOToKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjlfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjlfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI5X3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCW51bWJlciA9IHNpemVvZihhbDIyMzBfcmZfZGF0YSkvc2l6ZW9mKGFsMjIzMF9yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IGFsMjIzMF9yZl9kYXRhW2ldOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggYWwyMjMwX3JmX2RhdGFbaV0sIDIwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfQUlST0hBXzIyMzBTOgorCQludW1iZXIgPSBzaXplb2YoYWwyMjMwc19yZl9kYXRhKS9zaXplb2YoYWwyMjMwc19yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IGFsMjIzMHNfcmZfZGF0YVtpXTsKKwkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMHNfcmZfZGF0YVtpXSwgMjApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKworCQkvL1N0YXJ0IHRvIGZpbGwgUkYgcGFyYW1ldGVycywgUExMX09OIHNob3VsZCBiZSBwdWxsZWQgbG93LgorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKyNlbmRpZgorCisJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKKwkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOworCQlicmVhazsKKworCWNhc2UgUkZfV0JfMjQyOgorCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisJCW51bWJlciA9IHNpemVvZih3ODlyZjI0Ml9yZl9kYXRhKS9zaXplb2Yodzg5cmYyNDJfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJbHRtcCA9IHc4OXJmMjQyX3JmX2RhdGFbaV07CisJCQlpZiggaSA9PSA0ICkgLy8gVXBkYXRlIHRoZSBWQ08gdHJpbSBmcm9tIEVFUFJPTQorCQkJeworCQkJCWx0bXAgJj0gfjB4ZmYwOyAvLyBNYXNrIGJpdDQgfmJpdDExCisJCQkJbHRtcCB8PSBwSHdEYXRhLT5WQ09fdHJpbTw8NDsKKwkJCX0KKworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBsdG1wOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggbHRtcCwgMjQpOworCQl9CisJCWJyZWFrOworCX0KKworCXBId0RhdGEtPnBoeV9udW1iZXIgPSBudW1iZXI7CisKKwkgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUuIEhlcmUgdXNlIDEyCisJaWYoIG51bWJlciA+IDEyICkgeworCQkvL1diMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMTIsIE5PX0lOQ1JFTUVOVCApOworCQlmb3IoIGk9MDsgaTwxMjsgaSsrICkgLy8gRm9yIEFsMjIzMAorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXBbaV0gKTsKKworCQlwbHRtcCArPSAxMjsKKwkJbnVtYmVyIC09IDEyOworCX0KKworCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHg4NjQsIHBsdG1wW2ldICk7CisKKwkvLyAyMDA2MDYzMC4xIENhbGlicmF0aW9uIG9ubHkgMSB0aW1lCisJaWYoIHBId0RhdGEtPkNhbE9uZVRpbWUgKQorCQlyZXR1cm47CisJcEh3RGF0YS0+Q2FsT25lVGltZSA9IDE7CisKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisKKwkJCS8vIDIwMDYwNTExLjEgLS0tIE1vZGlmeWluZyB0aGUgZm9sbG93IHN0ZXAgZm9yIFJ4IGlzc3VlLS0tLS0tLS0tLS0tLS0tLS0KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDc8PDIwKXwweEUxNjhFLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgxMDAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF9yZl9kYXRhWzddLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgxMDAwMCk7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisKKwkJCS8vIDIwMDYwNTExLjEgLS0tIE1vZGlmeWluZyB0aGUgZm9sbG93IHN0ZXAgZm9yIFJ4IGlzc3VlLS0tLS0tLS0tLS0tLS0tLS0KKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4ODAgKTsvLyByZWd1bGF0b3Igb24gb25seQorCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YTAgKTsvLyBQTExfUEQgUkVGX1BEIHNldCB0byAwCisJCQlPU19TTEVFUCgxMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhlMCApOy8vIE1MS19FTgorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMSApOy8vIFJlc2V0IGhhcmR3YXJlIGZpcnN0CisJCQlPU19TTEVFUCgxMDAwMCk7IC8vIEFkZCB0aGlzIDIwMDUxMjIxLjEuYgorCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkJLy8gVGhlIGZvbGxvdyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSBidXJzdC13cml0ZSBtb2RlCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxQTApOyAvL1JhaXNlIEluaXRpYWwgU2V0dGluZworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjApIHwgMHhGMDFBMCwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQlsdG1wID0gcEh3RGF0YS0+V2IzNVJlZy5CQjVDICYgMHhmZmZmZjAwMDsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIGx0bXAgKTsKKwkJCXBId0RhdGEtPldiMzVSZWcuQkI1MCB8PSAweDEzOy8vKE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsvLzIwMDYwMzE1LjEgbW9kaWZ5CisgICAgICAgIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDUwLCBwSHdEYXRhLT5XYjM1UmVnLkJCNTApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAweDBGLCAoMHgwRjw8MjApIHwgMHhGMDFCMCk7IC8vQWN0aXZhdGUgRmlsdGVyIENhbC4KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxQjAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxZTApOyAvL0FjdGl2YXRlIFRYIERDQworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjApIHwgMHhGMDFFMCwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAweDBGLCAoMHgwRjw8MjApIHwgMHhGMDFBMCk7IC8vUmVzb3RyZSBJbml0aWFsIFNldHRpbmcKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxQTAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworLy8JCQkvL0ZvcmNlIFRYSShRKVAoTikgdG8gbm9ybWFsIGNvbnRyb2wKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIHBId0RhdGEtPldiMzVSZWcuQkI1QyApOworCQkJcEh3RGF0YS0+V2IzNVJlZy5CQjUwICY9IH4weDEzOy8vKE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsKKyAgICAgICAgCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTAsIHBId0RhdGEtPldiMzVSZWcuQkI1MCk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV83MjMwOgorCisJCQkvL1JGIHBhcmFtZXRlcnMgaGF2ZSBmaWxsZWQgY29tcGxldGVseSwgUExMX09OIHNob3VsZCBiZQorCQkJLy9wdWxsZWQgaGlnaAorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOworCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJV0JERUJVRygoIiogUExMX09OICAgIGhpZ2hcbiIpKTsKKwkJCSNlbmRpZgorCisJCQkvLzIuNEdIegorCQkJLy9sdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MUFCQThGOworCQkJLy9XYjM1UmVnX1dyaXRlU3luYyBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vT1NfU0xFRVAoMTAwMCk7IC8vIFNsZWVwIDEgbXMKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHg5QUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgzQUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgxQUJBOEY7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKworCQkJLy81R0h6CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCQlXQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisJCQkjZW5kaWYKKworCQkJbnVtYmVyID0gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwKS9zaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOworCQkJLy8gV3JpdGUgdG8gcmVnaXN0ZXIuIG51bWJlciBtdXN0IGxlc3MgYW5kIGVxdWFsIHRoYW4gMTYKKwkJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBwbHRtcFtpXSApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKKwkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBoaWdoXG4iKSk7CisJCQkjZW5kaWYKKworCQkJLy9sdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MTJCQUNGOworCQkJLy9XYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4OUFCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4M0FCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MTJCQUNGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOworCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9XQl8yNDI6CisJCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisKKwkJCS8vCisJCQkvLyA7IFZlcnNpb24gMS4zQiByZXZpc2lvbiBpdGVtczogZm9yIEZBNTk3NkEgLCBPY3RvYmVyIDMsIDIwMDUgYnkgSFRIbworCQkJLy8KKwkJCWx0bXAgPSBwSHdEYXRhLT5XYjM1UmVnLkJCNUMgJiAweGZmZmZmMDAwOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1YywgbHRtcCApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1OCwgMCApOworCQkJcEh3RGF0YS0+V2IzNVJlZy5CQjUwIHw9IDB4MzsvLyhNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7Ly8yMDA2MDYzMAorCSAgICAgIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDUwLCBwSHdEYXRhLT5XYjM1UmVnLkJCNTApOworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICgxKS4gVkNPIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbgorCQkJLy9DYWxpYnJhdGlvbiAoMWEuMCkuIFN5bnRoZXNpemVyIHJlc2V0IChIVEhvIGNvcnJlY3RlZCAyMDA1LzA1LzEwKQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjQpIHwgMHgwMDEwMUUsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKCA1MDAwICk7IC8vIFNsZWVwIDVtcworCQkJLy9DYWxpYnJhdGlvbiAoMWEpLiBWQ08gZnJlcXVlbmN5IGNhbGlicmF0aW9uIG1vZGUgOyB3YWl0aW5nIDJtc2VjIFZDTyBjYWxpYnJhdGlvbiB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZFNjljMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDIwMDAgKTsgLy8gU2xlZXAgMm1zCisKKwkJCS8vLS0tLS0gQ2FsaWJyYXRpb24gKDIpLiBUWCBiYXNlYmFuZCBHbS1DIGZpbHRlciBhdXRvLXR1bmluZworCQkJLy9DYWxpYnJhdGlvbiAoMmEpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RjhFQkMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgyYi4wKS4gVFggZmlsdGVyIGF1dG8tdHVuaW5nIEJXOiBURkxCVz0xMDEgKFRDNTM3NkEgZGVmYXVsdCkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDc8PDI0KSB8IDB4MEM2OENFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgyYikuIHNlbmQgVFggcmVzZXQgc2lnbmFsIChIVEhvIGNvcnJlY3RlZCBNYXkgMTAsIDIwMDUpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDBGPDwyNCkgfCAweDAwMjAxRSwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoMmMpLiB0dXJuLW9uIFRYIEdtLUMgZmlsdGVyIGF1dG8tdHVuaW5nCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZDRUJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDE1MCApOyAvLyBTbGVlcCAxNTAgdXMKKwkJCS8vdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEY4RUJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICgzKS4gUlggYmFzZWJhbmQgR20tQyBmaWx0ZXIgYXV0by10dW5pbmcKKwkJCS8vQ2FsaWJyYXRpb24gKDNhKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoM2IuMCkuIFJYIGZpbHRlciBhdXRvLXR1bmluZyBCVzogUkZMQlc9MTAwIChUQzUzNzZBK2Nvcm5lciBkZWZhdWx0OyBKdWx5IDI2LCAyMDA1KQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwNzw8MjQpIHwgMHgwQzY4Q0UsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDNiKS4gc2VuZCBSWCByZXNldCBzaWduYWwgKEhUSG8gY29ycmVjdGVkIE1heSAxMCwgMjAwNSkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDI0KSB8IDB4MDA0MDFFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgzYykuIHR1cm4tb24gUlggR20tQyBmaWx0ZXIgYXV0by10dW5pbmcKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkVFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCggMTUwICk7IC8vIFNsZWVwIDE1MCB1cworCQkJLy9DYWxpYnJhdGlvbiAoM2UpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vLS0tLS0gQ2FsaWJyYXRpb24gKDQpLiBUWCBMTyBsZWFrYWdlIGNhbGlicmF0aW9uCisJCQkvL0NhbGlicmF0aW9uICg0YSkuIFRYIExPIGxlYWthZ2UgY2FsaWJyYXRpb24KKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkQ2QkMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCggMTUwICk7IC8vIFNsZWVwIDE1MCB1cworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICg1KS4gUlggREMgb2Zmc2V0IGNhbGlicmF0aW9uCisJCQkvL0NhbGlicmF0aW9uICg1YSkuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbCBhbmQgc2V0IHRvIFJYIFNXIERDIGNhbGlyYXRpb24gbW9kZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDViKS4gdHVybiBvZmYgQUdDIHNlcnZvLWxvb3AgJiBSU1NJCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAxPDwyNCkgfCAweEVCRkZDMiwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgZm9yIExOQT0xMSAtLS0tLS0tLQorCQkJLy9DYWxpYnJhdGlvbiAoNWMtaCkuIFJYIERDIG9mZnNldCBjdXJyZW50IGJpYXMgT047ICYgTE5BPTExOyBSWFZHQT0xMTExMTEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDY8PDI0KSB8IDB4MzQzRkNDLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZCkuIHR1cm4gb24gUlggREMgb2Zmc2V0IGNhbCBmdW5jdGlvbjsgYW5kIHdhaXRpbmcgMiBtc2VjIGNhbCB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZGNkRDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMjAwMCk7IC8vIFNsZWVwIDJtcworCQkJLy9DYWxpYnJhdGlvbiAoNWYpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vOyBmb3IgTE5BPTEwIC0tLS0tLS0tCisJCQkvL0NhbGlicmF0aW9uICg1Yy1tKS4gUlggREMgb2Zmc2V0IGN1cnJlbnQgYmlhcyBPTjsgJiBMTkE9MTA7IFJYVkdBPTExMTExMQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwNjw8MjQpIHwgMHgzNDJGQ0MsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDVkKS4gdHVybiBvbiBSWCBEQyBvZmZzZXQgY2FsIGZ1bmN0aW9uOyBhbmQgd2FpdGluZyAyIG1zZWMgY2FsIHRpbWUKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkY2REMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgyMDAwKTsgLy8gU2xlZXAgMm1zCisJCQkvL0NhbGlicmF0aW9uICg1ZikuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJLy87IGZvciBMTkE9MDEgLS0tLS0tLS0KKwkJCS8vQ2FsaWJyYXRpb24gKDVjLW0pLiBSWCBEQyBvZmZzZXQgY3VycmVudCBiaWFzIE9OOyAmIExOQT0wMTsgUlhWR0E9MTExMTExCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA2PDwyNCkgfCAweDM0MUZDQywgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoNWQpLiB0dXJuIG9uIFJYIERDIG9mZnNldCBjYWwgZnVuY3Rpb247IGFuZCB3YWl0aW5nIDIgbXNlYyBjYWwgdGltZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGRjZEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDIwMDApOyAvLyBTbGVlcCAybXMKKwkJCS8vQ2FsaWJyYXRpb24gKDVmKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgZm9yIExOQT0wMCAtLS0tLS0tLQorCQkJLy9DYWxpYnJhdGlvbiAoNWMtbCkuIFJYIERDIG9mZnNldCBjdXJyZW50IGJpYXMgT047ICYgTE5BPTAwOyBSWFZHQT0xMTExMTEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDY8PDI0KSB8IDB4MzQwRkNDLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZCkuIHR1cm4gb24gUlggREMgb2Zmc2V0IGNhbCBmdW5jdGlvbjsgYW5kIHdhaXRpbmcgMiBtc2VjIGNhbCB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZGNkRDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMjAwMCk7IC8vIFNsZWVwIDJtcworCQkJLy9DYWxpYnJhdGlvbiAoNWYpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZykuIHR1cm4gb24gQUdDIHNlcnZvLWxvb3AKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDE8PDI0KSB8IDB4RUZGRkMyLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFN3aXRjaCBSRiBjaGlwIHRvIG5vcm1hbCBtb2RlCisJCQkvLzB4MDAgMHhGODYxMDAgOyAzRTE4NCAgIDsgU3dpdGNoIFJGIGNoaXAgdG8gbm9ybWFsIG1vZGUKKy8vCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBAQCAyMDA2MDcyMQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGODYxMDAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOyAvLyBTbGVlcCA1IG1zCisKKy8vCQkJLy93cml0ZSBiYWNrCisvLwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIHBId0RhdGEtPldiMzVSZWcuQkI1QyApOworLy8JCQlwSHdEYXRhLT5XYjM1UmVnLkJCNTAgJj0gfjB4MTM7Ly8oTUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOyAvLyAyMDA2MDMxNS4xIGZpeAorLy8gICAgICAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1MCwgcEh3RGF0YS0+V2IzNVJlZy5CQjUwKTsKKy8vCQkJT1NfU0xFRVAoMTAwMCk7IC8vIFNsZWVwIDEgbXMKKwkJCWJyZWFrOworCX0KK30KKwordm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglwbHRtcFsxMl07CisKKwlwbHRtcFswXSA9IDB4MTZBODMzN0E7IC8vIDB4MTZhNTIxNWY7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwlwbHRtcFsxXSA9IDB4OUFGRjlBQTY7IC8vIDB4OWFmZjljYTY7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwlwbHRtcFsyXSA9IDB4NTVEMDBBMDQ7IC8vIDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwlwbHRtcFszXSA9IDB4RkZGNzIwMzE7IC8vIDB4RmZGZjIxMzg7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwlwV2IzNVJlZy0+QkIwQyA9IDB4RkZGNzIwMzE7CisJcGx0bXBbNF0gPSAweDBGYWNEQ0M1OyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vIDIwMDUwOTI3IDB4MEZhY0RDQjcKKwlwbHRtcFs1XSA9IDB4MDBDQUEzMzM7IC8vIDB4MDBlYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwlwbHRtcFs2XSA9IDB4RjIyMTExMTE7IC8vIDB4MTExMTExMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwlwbHRtcFs4XSA9IDB4MDY0NDM0NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwlwbHRtcFs5XSA9IDB4QTgwMDJBNzk7IC8vIDB4YTkwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJcGx0bXBbMTBdID0gMHg0MDAwMDUyODsgLy8gMjAwNTA5MjcgMHg0MDAwMDIyOAorCXBsdG1wWzExXSA9IDB4MjMyRDdGMzA7IC8vIDB4MjM0NTdmMzA7Ly8gMHgxMDJjIEFfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyRDdGMzA7CisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCXBsdG1wWzBdID0gMHgwMDAwMmM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJjNTQ7CisJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwlwbHRtcFs2XSA9IDB4MDAzMzJDMUI7IC8vIDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJcGx0bXBbN10gPSAweDBBMDBGRUZGOyAvLyAweDBFMDBGRUZGOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlcgorCXBsdG1wWzhdID0gMHgyQjEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCXBXYjM1UmVnLT5CQjUwID0gMHgyQjEwNjIwODsKKwlwbHRtcFs5XSA9IDA7IC8vIDB4MTA1NAorCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwlwbHRtcFsxMF0gPSAweDUyNTI0MjQyOyAvLyAweDY0NjQ1MjUyOyAvLyAweDEwNTggSVFfQWxwaGEKKwlwV2IzNVJlZy0+QkI1OCA9IDB4NTI1MjQyNDI7CisJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKK30KKwordm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfNTAwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglwbHRtcFsxMl07CisKKwlwbHRtcFswXSA9IDB4MTZBQTY2Nzg7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwlwbHRtcFsxXSA9IDB4OUFGRkEwQjI7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwlwbHRtcFsyXSA9IDB4NTVEMDBBMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwlwbHRtcFszXSA9IDB4RUZGRjIzM0U7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwlwV2IzNVJlZy0+QkIwQyA9IDB4RUZGRjIzM0U7CisJcGx0bXBbNF0gPSAweDBGYWNEQ0M1OyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vIDIwMDUwOTI3IDB4MEZhY0RDQjcKKwlwbHRtcFs1XSA9IDB4MDBDQUEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwlwbHRtcFs2XSA9IDB4RjI0MzIxMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwlwbHRtcFs4XSA9IDB4MDVDNDM0NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJcGx0bXBbMTBdID0gMHg0MDAwMDUyODsgLy8gMjAwNTA5MjcgMHg0MDAwMDIyOAorCXBsdG1wWzExXSA9IDB4MjMyRkRGMzA7Ly8gMHgxMDJjIEFfQUNRX0N0cmwKKwlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyRkRGMzA7CisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCXBsdG1wWzBdID0gMHg4MDAwMkM3QzsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCXBsdG1wWzZdID0gMHgwMDMzMkMxQjsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwlwbHRtcFs3XSA9IDB4MEEwMEZFRkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJcGx0bXBbOF0gPSAweDJCMTA3MjA4OyAvLyAweDEwNTAgTU9ERV9DdHJsCisJcFdiMzVSZWctPkJCNTAgPSAweDJCMTA3MjA4OworCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJcFdiMzVSZWctPkJCNTQgPSAweDAwMDAwMDAwOworCXBsdG1wWzEwXSA9IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCXBXYjM1UmVnLT5CQjU4ID0gMHg1MjUyNDI0MjsKKwlwbHRtcFsxMV0gPSAweEFBMEFDMDAwOyAvLyAweDEwNWMgRENfQ2FuY2VsCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBCQlByb2Nlc3NvclBvd2VydXBJbml0IC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgSW5pdGlhbGl6ZSB0aGUgQmFzZWJhbmQgcHJvY2Vzc29yLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBwSHdEYXRhICAgIC0gSGFuZGxlIG9mIHRoZSBVU0IgRGV2aWNlLgorLy8KKy8vICBSZXR1cm4gdmFsdWVzOgorLy8gICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJaSwgcGx0bXBbMTJdOworCisgICAgc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisgICAgeworCQljYXNlIFJGX01BWElNX1YxOiAvLyBJbml0aWFsaXpuZyB0aGUgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKKworCQkJcGx0bXBbMF0gPSAweDE2RjQ3RTc3OyAvLyAweDEwMDAgQUdDX0N0cmwxCisJCQlwbHRtcFsxXSA9IDB4OUFGRkFFQTQ7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NUQwMEEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEVGRkYxQTM0OyAvLyAweDEwMGMgQUdDX0N0cmw0CisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4RUZGRjFBMzQ7CisJCQlwbHRtcFs0XSA9IDB4MEZBQkUwQjc7IC8vIDB4MTAxMCBBR0NfQ3RybDUKKwkJCXBsdG1wWzVdID0gMHgwMENBQTMzMjsgLy8gMHgxMDE0IEFHQ19DdHJsNgorCQkJcGx0bXBbNl0gPSAweEY2NjMyMTExOyAvLyAweDEwMTggQUdDX0N0cmw3CisJCQlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwkJCXBsdG1wWzhdID0gMHgwNENDMzY0MDsgLy8gMHgxMDIwIEFHQ19DdHJsOQorCQkJcGx0bXBbOV0gPSAweDAwMDAyQTc5OyAvLyAweDEwMjQgQUdDX0N0cmwxMAorCQkJcGx0bXBbMTBdID0gKHBId0RhdGEtPnBoeV90eXBlPT0zKSA/IDB4NDAwMDBhMjggOiAweDQwMDAwMjI4OyAvLyAweDEwMjggTUFYSU1fMzMxKGIzMT0wKSArIFdCUkZfVjEoYjExPTEpIDogTUFYSU1fMzMxKGIzMT0wKSArIFdCUkZfVjIoYjExPTApCisJCQlwbHRtcFsxMV0gPSAweDIzMkZERjMwOyAvLyAweDEwMmMgQV9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMkZERjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjZDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs3XSA9IDB4MEUwMEZFRkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDY0NjQ2NDY0OyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg2NDY0NjQ2NDsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisKKwkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy9bMjAwNDA3MjIgV0tdCisJCS8vT25seSBmb3IgYmFzZWJhbmQgdmVyc2lvbiAyCisvLwkJY2FzZSBSRl9NQVhJTV8zMTc6CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV8yODI3OgorCQljYXNlIFJGX01BWElNXzI4Mjg6CisKKwkJCXBsdG1wWzBdID0gMHgxNmI0N2U3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZWE0OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhlZmZmMWEzNDsgLy8gMHgxMDBjIEFHQ19DdHJsNAorCQkJcFdiMzVSZWctPkJCMEMgPSAweGVmZmYxYTM0OworCQkJcGx0bXBbNF0gPSAweDBmYWJlMGI3OyAvLyAweDEwMTAgQUdDX0N0cmw1CisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzI7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwkJCXBsdG1wWzZdID0gMHhmNjYzMjExMTsgLy8gMHgxMDE4IEFHQ19DdHJsNworCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDQzM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4NDAwMDAxMjg7IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzExXSA9IDB4MjMyZmRmMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZmRmMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCNkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gMHgwMDQ1M0IyNDsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzddID0gMHgwRDAwRkRGRjsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjA4OworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDY0NjQ7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDY0NjQ2NDY0OworCQkJcGx0bXBbMTFdID0gMHhBQTI4QzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjk6CisKKwkJCXBsdG1wWzBdID0gMHgxNmI0N2U3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZWE0OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhmNGZmMTYzMjsgLy8gMHhlZmZmMWEzNDsgLy8gMHgxMDBjIEFHQ19DdHJsNCBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4ZjRmZjE2MzI7IC8vIDB4ZWZmZjFhMzQ7IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzRdID0gMHgwZmFiZTBiNzsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4Zjg2MzIxMTI7IC8vIDB4ZjY2MzIxMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDQzM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4NDAwMDAxMjg7IG1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzExXSA9IDB4MjMyZmRmMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZmRmMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDViMmM4NzY5OyAvLyAweDVCNkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSAweDAwMmMyNjE3OyAvLyAweDAwNDUzQjI0OyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlciBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFs3XSA9IDB4MDgwMGZlZmY7IC8vIDB4MEQwMEZERkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjA4OworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDRhNGE7IC8vIDB4NjQ2NDY0NjQ7IC8vIDB4MTA1OCBJUV9BbHBoYSBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwV2IzNVJlZy0+QkI1OCA9IDB4NjQ2NDY0NjQ7CisJCQlwbHRtcFsxMV0gPSAweEFBMjhDMDAwOyAvLyAweDEwNWMgRENfQ2FuY2VsCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNzAsIDB4MDAwMDAwNDUgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisKKwkJCXBsdG1wWzBdID0gMFgxNjc2NEE3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQkJLy8weDE2NzY1QTc3CisJCQlwbHRtcFsxXSA9IDB4OWFmZmFmYjI7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NWQwMGEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEZGRmQyMDNjOyAvLyAweEZGRmIyMDNhOyAvLyAweDEwMGMgQUdDX0N0cmw0IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhGRkZkMjAzYzsKKwkJCXBsdG1wWzRdID0gMFgwRkJGRENjNTsgLy8gMFgwRkJGRENBMDsgLy8gMHgxMDEwIEFHQ19DdHJsNSAvLzB4MEZCMkUwQjcgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDAwY2FhMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzZdID0gMFhGNjYzMjExMTsgLy8gMFhGMTYzMjExMjsgLy8gMHgxMDE4IEFHQ19DdHJsNwkJLy8weGY2NjMyMTEyIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0QzQzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAwWDQwMDAwNTI4OwkJCQkJCQkvLzB4NDAwMDAyMjgKKwkJCXBsdG1wWzExXSA9IDB4MjMyZGZGMzA7IC8vIDB4MjMyQTlGMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCS8vMHgyMzJhOTczMAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMmRmRjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCS8vMHg1QjZDODc2OQorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIgMjAwNjA2MTMuMgorCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMjAwNTEyMjEgY2gxNCAyMDA2MDYxMy4yCisJCQlwbHRtcFs3XSA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAyMDA2MDYxMy4xIDIwMDYwNjEzLjIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTI0MjQyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV8yMjMwUzogLy8gMjAwNjA0MjAgQWRkIHRoaXMKKworCQkJcGx0bXBbMF0gPSAwWDE2NzY0QTc3OyAvLyAweDEwMDAgQUdDX0N0cmwxCQkvLzB4MTY3NjVBNzcKKwkJCXBsdG1wWzFdID0gMHg5YWZmYWZiMjsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4RkZGZDIwM2M7IC8vIDB4RkZGYjIwM2E7IC8vIDB4MTAwYyBBR0NfQ3RybDQgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcFdiMzVSZWctPkJCMEMgPSAweEZGRmQyMDNjOworCQkJcGx0bXBbNF0gPSAwWDBGQkZEQ2M1OyAvLyAwWDBGQkZEQ0EwOyAvLyAweDEwMTAgQUdDX0N0cmw1IC8vMHgwRkIyRTBCNyBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uCisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzI7IC8vIDB4MDBjYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbNl0gPSAwWEY2NjMyMTExOyAvLyAwWEYxNjMyMTEyOyAvLyAweDEwMTggQUdDX0N0cmw3CQkvLzB4ZjY2MzIxMTIgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDNDM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDBYNDAwMDA1Mjg7CQkJCQkJCS8vMHg0MDAwMDIyOAorCQkJcGx0bXBbMTFdID0gMHgyMzJkZkYzMDsgLy8gMHgyMzJBOUYzMDsgLy8gMHgxMDJjIEFfQUNRX0N0cmwJLy8weDIzMmE5NzMwCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjMyZGZGMzA7IC8vTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbiwgYW50ZW5uYSAxCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwJLy8weDVCNkM4NzY5CisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAyMDA1MTIyMSBjaDE0IDIwMDYwNjEzLjIKKwkJCXBsdG1wWzddID0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDIwMDYwNjEzLjEKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjMyMzI7IC8vIDIwMDYwNDE5IDB4NTI1MjQyNDI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTIzMjMyOyAvLyAyMDA2MDQxOSAweDUyNTI0MjQyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV83MjMwOgorLyoKKwkJCXBsdG1wWzBdID0gMHgxNmE4NGE3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlhZmZhZmIyOyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhGRkZiMjAzYTsgLy8gMHgxMDBjIEFHQ19DdHJsNAorCQkJcFdiMzVSZWctPkJCMGMgPSAweEZGRmIyMDNhOworCQkJcGx0bXBbNF0gPSAweDBGQkZEQ0I3OyAvLyAweDEwMTAgQUdDX0N0cmw1CisJCQlwbHRtcFs1XSA9IDB4MDBjYWEzMzM7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwkJCXBsdG1wWzZdID0gMHhmNjYzMjExMjsgLy8gMHgxMDE4IEFHQ19DdHJsNworCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDNDM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDAyMjg7CisJCQlwbHRtcFsxMV0gPSAweDIzMkE5RjMwOy8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyYyA9IDB4MjMyQTlGMzA7CisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNjID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gMHgwMDQ1M0IyNDsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzddID0gMHgwRTAwRkVGRjsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIKKwkJCXBsdG1wWzhdID0gMHgyNzEwNjIwMDsgLy8gMHgxMDUwIE1PREVfQ3RybAorCQkJcFdiMzVSZWctPkJCNTAgPSAweDI3MTA2MjAwOworCQkJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzEwXSA9IDB4NjQ2NDUyNTI7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDY0NjQ1MjUyOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKyovCisJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggcEh3RGF0YSApOworCisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNzAsIDB4MDAwMDAwNDUgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOgorCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCisJCQlwbHRtcFswXSA9IDB4MTZBODUyNUQ7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwkJCXBsdG1wWzFdID0gMHg5QUZGOUFCQTsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1RDAwQTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4RUVFOTFDMzI7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhFRUU5MUMzMjsKKwkJCXBsdG1wWzRdID0gMHgwRkFDRENDNTsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwMEFBMzQ0OyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4MjIyMjIyMjE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0Q0MzNDQwOyAvLyAyMDA1MTAxOCAweDAzQ0IzNDQwOyAvLyAweDEwMjAgQUdDX0N0cmw5IDIwMDUxMDE0IDB4MDNDMzM0NDAKKwkJCXBsdG1wWzldID0gMHhBOTAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDB4MTAyOAorCQkJcGx0bXBbMTFdID0gMHgyMzQ1N0YzMDsgLy8gMHgxMDJjIEFfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjJDID0gMHgyMzQ1N0YzMDsKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCXBsdG1wWzBdID0gMHgwMDAwMkM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjMwID0gMHgwMDAwMkM1NDsKKwkJCXBsdG1wWzFdID0gMHgwMEMwRDZDNTsgLy8gMHgxMDM0IEFfVFhSWF9DdHJsCisJCQlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCQkJcGx0bXBbM10gPSBwSHdEYXRhLT5CQjNjX2NhbDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gcEh3RGF0YS0+QkIzY19jYWw7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjQ4ID0gQkI0OF9ERUZBVUxUX1dCMjQyXzExRzsgLy8gMjAwNjA2MTMuMSAyMDA2MDYxMy4yCisJCQlwbHRtcFs3XSA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRzsgLy8gMjAwNjA2MTMuMSAyMDA2MDYxMy4yCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gcEh3RGF0YS0+QkI1NF9jYWw7IC8vIDB4MTA1NAorCQkJcFdiMzVSZWctPkJCNTQgPSBwSHdEYXRhLT5CQjU0X2NhbDsKKwkJCXBsdG1wWzEwXSA9IDB4NTI1MjMxMzE7IC8vIDB4MTA1OCBJUV9BbHBoYQorCQkJcFdiMzVSZWctPkJCNTggPSAweDUyNTIzMTMxOworCQkJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMjAwNjA4MjUgMHhBQTJBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKyAgICB9CisKKwkvLyBGaWxsIHRoZSBMTkEgdGFibGUKKwlwV2IzNVJlZy0+TE5BVmFsdWVbMF0gPSAodTgpKHBXYjM1UmVnLT5CQjBDICYgMHhmZik7CisJcFdiMzVSZWctPkxOQVZhbHVlWzFdID0gMDsKKwlwV2IzNVJlZy0+TE5BVmFsdWVbMl0gPSAodTgpKChwV2IzNVJlZy0+QkIwQyAmIDB4ZmYwMCk+PjgpOworCXBXYjM1UmVnLT5MTkFWYWx1ZVszXSA9IDA7CisKKwkvLyBGaWxsIFNRMyB0YWJsZQorCWZvciggaT0wOyBpPE1BWF9TUTNfRklMVEVSX1NJWkU7IGkrKyApCisJCXBXYjM1UmVnLT5TUTNfZmlsdGVyW2ldID0gMHgyZjsgLy8gaGFsZiBvZiBCaXQgMCB+IDYKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCit7CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsgLy8gMjAwNjA2MjAuMSBNb2RpZnkKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCit7CisJdTgJaW5kZXggPSAxMDA7CisKKwlpZiAocEh3RGF0YS0+VHhWZ2FGb3IyNFtDaGFubmVsLkNoYW5ObyAtIDFdICE9IDB4ZmYpIC8vIDIwMDYwNjIwLjEgQWRkCisJCWluZGV4ID0gcEh3RGF0YS0+VHhWZ2FGb3IyNFtDaGFubmVsLkNoYW5ObyAtIDFdOworCisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOworfQorCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQoreworCXU4CWksIGluZGV4ID0gMTAwOworCisJc3dpdGNoICggQ2hhbm5lbC5iYW5kICkKKwl7CisJCWNhc2UgQkFORF9UWVBFX0RTU1M6CisJCWNhc2UgQkFORF9UWVBFX09GRE1fMjQ6CisJCQl7CisJCQkJaWYgKHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXSAhPSAweGZmKQorCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJBTkRfVFlQRV9PRkRNXzU6CisJCQl7CisJCQkJZm9yIChpID0wOyBpPDM1OyBpKyspCisJCQkJeworCQkJCQlpZiAoQ2hhbm5lbC5DaGFuTm8gPT0gcEh3RGF0YS0+VHhWZ2FGb3I1MFtpXS5DaGFuTm8pCisJCQkJCXsKKwkJCQkJCWlmIChwSHdEYXRhLT5UeFZnYUZvcjUwW2ldLlR4VmdhVmFsdWUgIT0gMHhmZikKKwkJCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yNTBbaV0uVHhWZ2FWYWx1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQoreworCXU4CWluZGV4ID0gMTAwOworCisJc3dpdGNoICggQ2hhbm5lbC5iYW5kICkKKwl7CisJCWNhc2UgQkFORF9UWVBFX0RTU1M6CisJCWNhc2UgQkFORF9UWVBFX09GRE1fMjQ6CisJCQl7CisJCQkJaWYgKHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXSAhPSAweGZmKQorCQkJCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJBTkRfVFlQRV9PRkRNXzU6CisJCQlicmVhazsKKwl9CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBTd2l0aGNoIHRoZSBSRiBjaGFubmVsLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgcEh3RGF0YSAgICAtIEhhbmRsZSBvZiB0aGUgVVNCIERldmljZS4KKy8vICAgQ2hhbm5lbCAgICAtIFRoZSBjaGFubmVsIG5vLgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK1JGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCXBsdG1wWzE2XTsgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUKKwl1MzIJY291bnQsIGx0bXA7CisJdTgJaSwgaiwgbnVtYmVyOworCXU4CUNobmxUbXA7CisKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV9WMTogLy8gMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpCisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxMworCQkJeworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjVfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjc6CisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxMworCQkJeworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjdfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCWVsc2UgaWYoIENoYW5uZWwuYmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81ICkgLy8gY2hhbm5lbCAzNiB+IDY0CisJCQl7CisJCQkJQ2hubFRtcCA9IChDaGFubmVsLkNoYW5ObyAtIDM2KSAvIDQ7CisJCQkJZm9yKCBpPTA7IGk8MzsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyN19jaGFubmVsX2RhdGFfNTBbQ2hubFRtcF1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyODoKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDEzCisJCQl7CisJCQkJZm9yKCBpPTA7IGk8MzsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJZWxzZSBpZiggQ2hhbm5lbC5iYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKSAvLyBjaGFubmVsIDM2IH4gNjQKKwkJCXsKKwkJCQlDaG5sVG1wID0gKENoYW5uZWwuQ2hhbk5vIC0gMzYpIC8gNDsKKwkJCQlmb3IgKCBpID0gMDsgaSA8IDM7IGkrKykKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9jaGFubmVsX2RhdGFfNTBbQ2hubFRtcF1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyOToKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCkKKwkJCXsKKwkJCQlmb3IoIGk9MDsgaTwzOyBpKysgKQorCQkJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X2NoYW5uZWxfZGF0YV8yNFtDaGFubmVsLkNoYW5Oby0xXVtpXSwgMTgpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMywgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQllbHNlIGlmKCBDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApCisJCQl7CisJCQkJY291bnQgPSBzaXplb2YobWF4MjgyOV9jaGFubmVsX2RhdGFfNTApIC8gc2l6ZW9mKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwWzBdKTsKKworCQkJCWZvciggaT0wOyBpPGNvdW50OyBpKysgKQorCQkJCXsKKwkJCQkJaWYoIG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwW2ldWzBdID09IENoYW5uZWwuQ2hhbk5vICkKKwkJCQkJeworCQkJCQkJZm9yKCBqPTA7IGo8MzsgaisrICkKKwkJCQkJCQlwbHRtcFtqXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtpXVtqKzFdLCAxOCk7CisJCQkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCisJCQkJCQlpZiggKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwW2ldWzNdICYgMHgzRkZGRikgPT0gMHgyQTk0NiApCisJCQkJCQl7CisJCQkJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoNTw8MTgpfDB4MkE5MDYsIDE4KTsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgICAgLy8gMHgyQTlDNgorCQkJCQkJeworCQkJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggKDU8PDE4KXwweDJBOTg2LCAxOCk7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggcEh3RGF0YSwgQ2hhbm5lbCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxNAorCQkJeworCQkJCWZvciggaT0wOyBpPDI7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDIwKTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDIsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsMjIzMCggcEh3RGF0YSwgQ2hhbm5lbCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKworCQkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KKwkJCS8vV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7CisJCQkvL1dCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKworCQkJLy9DaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVycworCQkJaWYoIENoYW5uZWwuYmFuZCAhPSBwSHdEYXRhLT5iYW5kKQorCQkJeworCQkJCWlmIChDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQpCisJCQkJeworCQkJCQkvL1VwZGF0ZSBCQiByZWdpc3RlcgorCQkJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMChwSHdEYXRhKTsKKworCQkJCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpL3NpemVvZihhbDcyMzBfcmZfZGF0YV8yNFswXSk7CisJCQkJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy9VcGRhdGUgQkIgcmVnaXN0ZXIKKwkJCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAocEh3RGF0YSk7CisKKwkJCQkJbnVtYmVyID0gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwKS9zaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQkJCQlTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAocEh3RGF0YSwgcGx0bXAsIG51bWJlcik7CisJCQkJfQorCisJCQkJLy8gV3JpdGUgdG8gcmVnaXN0ZXIuIG51bWJlciBtdXN0IGxlc3MgYW5kIGVxdWFsIHRoYW4gMTYKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIG51bWJlciwgTk9fSU5DUkVNRU5UICk7CisJCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJCVdCREVCVUcoKCJCYW5kIGNoYW5nZWRcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCX0KKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDE0CisJCQl7CisJCQkJZm9yKCBpPTA7IGk8MjsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0mMHhmZmZmZmYpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMiwgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQllbHNlIGlmKCBDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApCisJCQl7CisJCQkJLy9VcGRhdGUgUmVnMTIKKwkJCQlpZiAoKENoYW5uZWwuQ2hhbk5vID4gNjQpICYmIChDaGFubmVsLkNoYW5ObyA8PSAxNjUpKQorCQkJCXsKKwkJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDAwMTQzYzsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkJfQorCQkJCWVsc2UJLy9yZWcxMiA9IDB4MDAxNDdjIGF0IENoYW5uZWwgNDkyMCB+IDUzMjAKKwkJCQl7CisJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgwMDE0N2M7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJCX0KKworCQkJCWNvdW50ID0gc2l6ZW9mKGFsNzIzMF9jaGFubmVsX2RhdGFfNSkgLyBzaXplb2YoYWw3MjMwX2NoYW5uZWxfZGF0YV81WzBdKTsKKworCQkJCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJCQkJeworCQkJCQlpZiAoYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldWzBdID09IENoYW5uZWwuQ2hhbk5vKQorCQkJCQl7CisJCQkJCQlmb3IoIGo9MDsgajwzOyBqKysgKQorCQkJCQkJCXBsdG1wW2pdID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICggYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldW2orMV0mMHhmZmZmZmYpOworCQkJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAocEh3RGF0YSwgQ2hhbm5lbCk7CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjoKKwkJY2FzZSBSRl9XQl8yNDJfMTogLy8gMjAwNjA2MTkuNSBBZGQKKworCQkJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApIC8vIGNoYW5uZWwgMSB+IDE0CisJCQl7CisJCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB3ODlyZjI0Ml9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1bMF0sIDI0KTsKKwkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDg2NCwgbHRtcCApOworCQkJfQorCQkJc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKHBId0RhdGEsIENoYW5uZWwpOworCQkJYnJlYWs7CisJfQorCisJaWYoIENoYW5uZWwuYmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApCisJeworICAgICAgICAvLyBCQjogc2VsZWN0IDIuNCBHSHosIGJpdFsxMi0xMV09MDAKKwkJcFdiMzVSZWctPkJCNTAgJj0gfihCSVQoMTEpfEJJVCgxMikpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNTAsIHBXYjM1UmVnLT5CQjUwICk7IC8vIE1PREVfQ3RybAorICAgICAgICAvLyBNQUM6IHNlbGVjdCAyLjQgR0h6LCBiaXRbNV09MAorCQlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uICY9IH5CSVQoNSk7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworICAgICAgICAvLyBlbmFibGUgMTFiIEJhc2ViYW5kCisJCXBXYjM1UmVnLT5CQjMwICY9IH5CSVQoMzEpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBXYjM1UmVnLT5CQjMwICk7CisJfQorCWVsc2UgaWYoIChDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSkgKQorCXsKKyAgICAgICAgLy8gQkI6IHNlbGVjdCA1IEdIegorCQlwV2IzNVJlZy0+QkI1MCAmPSB+KEJJVCgxMSl8QklUKDEyKSk7CisJCWlmIChDaGFubmVsLkNoYW5ObyA8PTY0ICkKKwkJCXBXYjM1UmVnLT5CQjUwIHw9IEJJVCgxMik7CQkJCS8vIDEwLTUuMjVHSHoKKwkJZWxzZSBpZiAoKENoYW5uZWwuQ2hhbk5vID49IDEwMCkgJiYgKENoYW5uZWwuQ2hhbk5vIDw9IDEyNCkpCisJCQlwV2IzNVJlZy0+QkI1MCB8PSBCSVQoMTEpOwkJCQkvLyAwMS01LjQ4R0h6CisJCWVsc2UgaWYgKChDaGFubmVsLkNoYW5ObyA+PTEyOCkgJiYgKENoYW5uZWwuQ2hhbk5vIDw9IDE2MSkpCisJCQlwV2IzNVJlZy0+QkI1MCB8PSAoQklUKDEyKXxCSVQoMTEpKTsJLy8gMTEtNS43NzVHSHoKKwkJZWxzZQkvL0NoYW4gMTg0IH4gMTk2IHdpbGwgdXNlIGJpdFsxMi0xMV0gPSAxMCBpbiB2ZXJzaW9uIHNoLXNyYy0xLjIuMjUKKwkJCXBXYjM1UmVnLT5CQjUwIHw9IEJJVCgxMik7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA1MCwgcFdiMzVSZWctPkJCNTAgKTsgLy8gTU9ERV9DdHJsCisKKwkJLy8oMSkgTTc4IHNob3VsZCBhbHdheSB1c2UgMi40RyBzZXR0aW5nIHdoZW4gdXNpbmcgUkZfQUlST0hBXzcyMzAKKwkJLy8oMikgQkIzMCBoYXMgYmVlbiB1cGRhdGVkIHByZXZpb3VzbHkuCisJCWlmIChwSHdEYXRhLT5waHlfdHlwZSAhPSBSRl9BSVJPSEFfNzIzMCkKKwkJeworICAgIAkgICAgLy8gTUFDOiBzZWxlY3QgNSBHSHosIGJpdFs1XT0xCisJCQlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uIHw9IEJJVCg1KTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworCisgICAgCSAgICAvLyBkaXNhYmxlIDExYiBCYXNlYmFuZAorCQkJcFdiMzVSZWctPkJCMzAgfD0gQklUKDMxKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcFdiMzVSZWctPkJCMzAgKTsKKwkJfQorCX0KK30KKworLy9TZXQgdGhlIHR4IHBvd2VyIGRpcmVjdGx5IGZyb20gRFVUIEdVSSwgbm90IGZyb20gdGhlIEVFUFJPTS4gUmV0dXJuIHRoZSBjdXJyZW50IHNldHRpbmcKK3U4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKQoreworCXUzMglCYW5kID0gcEh3RGF0YS0+YmFuZDsKKwl1OAlpbmRleD0wOworCisJaWYoIHBId0RhdGEtPnBvd2VyX2luZGV4ID09IFBvd2VySW5kZXggKSAvLyAyMDA2MDYyMC4xIEFkZAorCQlyZXR1cm4gUG93ZXJJbmRleDsKKworCWlmIChSRl9NQVhJTV8yODI1ID09IHBId0RhdGEtPnBoeV90eXBlKQorCXsKKwkJLy8gQ2hhbm5lbCAxIC0gMTMKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJfQorCWVsc2UgaWYgKFJGX01BWElNXzI4MjcgPT0gcEh3RGF0YS0+cGh5X3R5cGUpCisJeworCQlpZiggQmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApICAgIC8vIENoYW5uZWwgMSAtIDEzCisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwkJZWxzZS8vIGlmKCBCYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKSAgLy8gQ2hhbm5lbCAzNiAtIDY0CisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwl9CisJZWxzZSBpZiAoUkZfTUFYSU1fMjgyOCA9PSBwSHdEYXRhLT5waHlfdHlwZSkKKwl7CisJCWlmKCBCYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0ICkgICAgLy8gQ2hhbm5lbCAxIC0gMTMKKwkJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQllbHNlLy8gaWYoIEJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApICAvLyBDaGFubmVsIDM2IC0gNjQKKwkJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCX0KKwllbHNlIGlmKCBSRl9BSVJPSEFfMjIzMCA9PSBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQkvL1Bvd2VyIGluZGV4OiAwIH4gNjMgLy8gQ2hhbm5lbCAxIC0gMTQKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OClhbDIyMzBfdHh2Z2FfZGF0YVtpbmRleF1bMV07CisJfQorCWVsc2UgaWYoIFJGX0FJUk9IQV8yMjMwUyA9PSBwSHdEYXRhLT5waHlfdHlwZSApIC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJeworCQkvL1Bvd2VyIGluZGV4OiAwIH4gNjMgLy8gQ2hhbm5lbCAxIC0gMTQKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OClhbDIyMzBfdHh2Z2FfZGF0YVtpbmRleF1bMV07CisJfQorCWVsc2UgaWYoIFJGX0FJUk9IQV83MjMwID09IHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCS8vUG93ZXIgaW5kZXg6IDAgfiA2MworCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJCWluZGV4ID0gKHU4KWFsNzIzMF90eHZnYV9kYXRhW2luZGV4XVsxXTsKKwl9CisJZWxzZSBpZiggKFJGX1dCXzI0MiA9PSBwSHdEYXRhLT5waHlfdHlwZSkgfHwKKwkJIChSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCXsKKwkJLy9Qb3dlciBpbmRleDogMCB+IDE5IGZvciBvcmlnaW5hbC4gTmV3IHJhbmdlIGlzIDAgfiAzMworCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJCWluZGV4ID0gKHU4KXc4OXJmMjQyX3R4dmdhX2RhdGFbaW5kZXhdWzFdOworCX0KKworCXBId0RhdGEtPnBvd2VyX2luZGV4ID0gaW5kZXg7ICAvLyBCYWNrdXAgY3VycmVudAorCXJldHVybiBpbmRleDsKK30KKworLy8tLSBTdWIgZnVuY3Rpb24KK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI4X3Bvd2VyX2RhdGFfMjRbaW5kZXhdLCAxOCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF81MFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9wb3dlcl9kYXRhXzUwW2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfMjRQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjdfcG93ZXJfZGF0YV8yNFtpbmRleF0sIDE4KTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpbmRleDsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X3Bvd2VyX2RhdGFfNTBbaW5kZXhdLCAxOCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyNV9wb3dlcl9kYXRhXzI0W2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwl1OAkJaSxjb3VudDsKKworCWNvdW50ID0gc2l6ZW9mKGFsMjIzMF90eHZnYV9kYXRhKSAvIHNpemVvZihhbDIyMzBfdHh2Z2FfZGF0YVswXSk7CisJZm9yIChpPTA7IGk8Y291bnQ7IGkrKykKKwl7CisJCWlmIChhbDIyMzBfdHh2Z2FfZGF0YVtpXVsxXSA+PSBpbmRleCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBjb3VudCkKKwkJaS0tOworCisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF90eHZnYV9kYXRhW2ldWzBdLCAyMCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaTsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJdTgJCWksY291bnQ7CisKKwkvL1Bvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhaXJvaGFfcG93ZXJfZGF0YV8yNFtpbmRleF0sIDIwKTsKKwljb3VudCA9IHNpemVvZihhbDcyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWw3MjMwX3R4dmdhX2RhdGFbMF0pOworCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJeworCQlpZiAoYWw3MjMwX3R4dmdhX2RhdGFbaV1bMV0gPj0gaW5kZXgpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY291bnQpCisJCWktLTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF90eHZnYV9kYXRhW2ldWzBdJjB4ZmZmZmZmKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpOworfQorCit1OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCXU4CQlpLGNvdW50OworCisJY291bnQgPSBzaXplb2Yodzg5cmYyNDJfdHh2Z2FfZGF0YSkgLyBzaXplb2Yodzg5cmYyNDJfdHh2Z2FfZGF0YVswXSk7CisJZm9yIChpPTA7IGk8Y291bnQ7IGkrKykKKwl7CisJCWlmICh3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IGNvdW50KQorCQlpLS07CisKKwkvLyBTZXQgVHhWZ2EgaW50byBSRgorCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzBdLCAyNCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKworCS8vIFVwZGF0ZSBCQjQ4IEJCNEMgQkI1OCBmb3IgaGlnaCBwcmVjaXNpb24gdHh2Z2EKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bMl0gKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bM10gKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNTgsIHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bNF0gKTsKKworLy8gUmYgdmdhIDAgfiAzIGZvciB0ZW1wZXJhdHVyZSBjb21wZW5zYXRlLiBJdCB3aWxsIGFmZmVjdCB0aGUgc2NhbiBCc3MuCisvLyBUaGUgaSB2YWx1ZSBlcXVhbHMgdG8gOCBvciA3IHVzdWFsbHkuIFNvIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzZXR1cCB0aGlzIFJGIHJlZ2lzdGVyLgorLy8JaWYoIGkgPD0gMyApCisvLwkJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoIDB4MDAwMDI0LCAyNCApOworLy8JZWxzZQorLy8JCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAweDAwMTgyNCwgMjQgKTsKKy8vCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIER4eF9pbml0aWFsIC0tCisvLyBNeHhfaW5pdGlhbCAtLQorCS8vCisvLyAgUm91dGluZSBEZXNjcmlwdGlvbjoKKy8vCQlJbml0aWFsIHRoZSBoYXJkd2FyZSBzZXR0aW5nIGFuZCBtb2R1bGUgdmFyaWFibGUKKwkvLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCS8vIE9sZCBJQzpTaW5nbGUgbW9kZSBvbmx5LgorCS8vIE5ldyBJQzogb3BlcmF0aW9uIGRlY2lkZSBieSBTb2Z0d2FyZSBzZXQgYml0WzRdLiAxOm11bHRpcGxlIDA6IHNpbmdsZQorCXBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IDB4YzAwMDAwMDQ7CS8vVHhvbiwgUnhvbiwgbXVsdGlwbGUgUnggZm9yIG5ldyA0ayBETUEKKwkJCQkJCQkJCQkJLy9UeG9uLCBSeG9uLCBzaW5nbGUgUnggZm9yIG9sZCA4ayBBU0lDCisJaWYoICFIQUxfVVNCX01PREVfQlVSU1QoIHBId0RhdGEgKSApCisJCXBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IDB4YzAwMDAwMDA7Ly9UeG9uLCBSeG9uLCBzaW5nbGUgUnggZm9yIG5ldyA0ayBETUEKKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA0MDAsIHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCApOworfQorCit2b2lkIE14eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMgkJdG1wOworCXUzMgkJcGx0bXBbMTFdOworCXUxNglpOworCisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEluaXRpYWwgTXh4IHJlZ2lzdGVyCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCS8vIE0wMCBiaXQgc2V0CisjaWZkZWYgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKwlwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgPSAwOyAvLyBTb2x2ZSBiZWFjb24gc2VxdWVuY2UgbnVtYmVyIHN0b3AgYnkgc29mdHdhcmUKKyNlbHNlCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sID0gMHg4MDAwMDAwMDsgLy8gU29sdmUgYmVhY29uIHNlcXVlbmNlIG51bWJlciBzdG9wIGJ5IGhhcmR3YXJlCisjZW5kaWYKKworCS8vIE0yNCBkaXNhYmxlIGVudGVyIHBvd2VyIHNhdmUsIEJCIFJ4T24gYW5kIGVuYWJsZSBOQVYgYXR0YWNrCisJcFdiMzVSZWctPk0yNF9NYWNDb250cm9sID0gMHgwODA0MDA0MjsKKwlwbHRtcFswXSA9IHBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbDsKKworCXBsdG1wWzFdID0gMDsgLy8gU2tpcCBNMjgsIGJlY2F1c2Ugbm8gaW5pdGlhbGl6ZSB2YWx1ZSBpcyByZXF1aXJlZC4KKworCS8vIE0yQyBDV21pbiBhbmQgQ1dtYXggc2V0dGluZworCXBId0RhdGEtPmN3bWluID0gREVGQVVMVF9DV01JTjsKKwlwSHdEYXRhLT5jd21heCA9IERFRkFVTFRfQ1dNQVg7CisJcFdiMzVSZWctPk0yQ19NYWNDb250cm9sID0gREVGQVVMVF9DV01JTiA8PCAxMDsKKwlwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgfD0gREVGQVVMVF9DV01BWDsKKwlwbHRtcFsyXSA9IHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbDsKKworCS8vIE0zMCBCU1NJRAorCXBsdG1wWzNdID0gKihQVUxPTkcpcEh3RGF0YS0+YnNzaWQ7CisKKwkvLyBNMzQKKwlwSHdEYXRhLT5BSUQgPSBERUZBVUxUX0FJRDsKKwl0bXAgPSAqKFBVU0hPUlQpKHBId0RhdGEtPmJzc2lkKzQpOworCXRtcCB8PSBERUZBVUxUX0FJRCA8PCAxNjsKKwlwbHRtcFs0XSA9IHRtcDsKKworCS8vIE0zOAorCXBXYjM1UmVnLT5NMzhfTWFjQ29udHJvbCA9IChERUZBVUxUX1JBVEVfUkVUUllfTElNSVQ8PDgpIHwgKERFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCA8PCA0KSB8IERFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQ7CisJcGx0bXBbNV0gPSBwV2IzNVJlZy0+TTM4X01hY0NvbnRyb2w7CisKKwkvLyBNM0MKKwl0bXAgPSAoREVGQVVMVF9QSUZTVCA8PCAyNikgfCAoREVGQVVMVF9FSUZTVCA8PCAxNikgfCAoREVGQVVMVF9ESUZTVCA8PCA4KSB8IChERUZBVUxUX1NJRlNUIDw8IDQpIHwgREVGQVVMVF9PU0lGU1QgOworCXBXYjM1UmVnLT5NM0NfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs2XSA9IHRtcDsKKworCS8vIE00MAorCXBId0RhdGEtPnNsb3RfdGltZV9zZWxlY3QgPSBERUZBVUxUX1NMT1RfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9BVElNV0QgPDwgMTYpIHwgREVGQVVMVF9TTE9UX1RJTUU7CisJcFdiMzVSZWctPk00MF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzddID0gdG1wOworCisJLy8gTTQ0CisJdG1wID0gREVGQVVMVF9NQVhfVFhfTVNEVV9MSUZFX1RJTUUgPDwgMTA7IC8vICoxMDI0CisJcFdiMzVSZWctPk00NF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzhdID0gdG1wOworCisJLy8gTTQ4CisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gREVGQVVMVF9CRUFDT05fSU5URVJWQUw7CisJcEh3RGF0YS0+UHJvYmVEZWxheSA9IERFRkFVTFRfUFJPQkVfREVMQVlfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9CRUFDT05fSU5URVJWQUwgPDwgMTYpIHwgREVGQVVMVF9QUk9CRV9ERUxBWV9USU1FOworCXBXYjM1UmVnLT5NNDhfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs5XSA9IHRtcDsKKworCS8vTTRDCisJcFdiMzVSZWctPk00Q19NYWNTdGF0dXMgPSAoREVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OIDw8IDMwKSB8IChERUZBVUxUX01BQ19QT1dFUl9TVEFURSA8PCAyOCkgfCAoREVGQVVMVF9EVElNX0FMRVJUX1RJTUUgPDwgMjQpOworCXBsdG1wWzEwXSA9IHBXYjM1UmVnLT5NNENfTWFjU3RhdHVzOworCisJLy8gQnVyc3Qgd3JpdGUKKwkvL1diMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODI0LCBwbHRtcCwgMTEsIEFVVE9fSU5DUkVNRU5UICk7CisJZm9yKCBpPTA7IGk8MTE7IGkrKyApCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4MjQgKyBpKjQsIHBsdG1wW2ldICk7CisKKwkvLyBNNjAKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODYwLCAweDEyNDgxMjQ4ICk7CisJcFdiMzVSZWctPk02MF9NYWNDb250cm9sID0gMHgxMjQ4MTI0ODsKKworCS8vIE02OAorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjgsIDB4MDAwNTA5MDAgKTsgLy8gMjAwNTEwMTggMHgwMDBGMEYwMCApOyAvLyA5NDA5MzAgMHgwMDEzMTMwMAorCXBXYjM1UmVnLT5NNjhfTWFjQ29udHJvbCA9IDB4MDAwNTA5MDA7CisKKwkvLyBNOTgKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODk4LCAweGZmZmY4ODg4ICk7CisJcFdiMzVSZWctPk05OF9NYWNDb250cm9sID0gMHhmZmZmODg4ODsKK30KKworCit2b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwkvLyBTVywgUE1VIHJlc2V0IGFuZCB0dXJuIG9mZiBjbG9jaworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDMgKTsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2YwLCAweGY5ICk7Cit9CisKKy8vRGVjaWRlIHRoZSBUeFZnYSBvZiBldmVyeSBjaGFubmVsCit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCQlpLCBqLCBsdG1wOworCXUxNgkJVmFsdWVbTUFYX1RYVkdBX0VFUFJPTV07CisJUFVDSEFSCQlwY3RtcDsKKwl1OAkJY3RtcD0wOworCisJLy8gR2V0IHRoZSBlbnRpcmUgVHhWZ2Egc2V0dGluZyBpbiBFRVBST00KKwlmb3IoIGk9MDsgaTxNQVhfVFhWR0FfRUVQUk9NOyBpKysgKQorCXsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODEwMDAwMCArIDB4MDAwMTAwMDAqaSApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZsdG1wICk7CisJCVZhbHVlW2ldID0gKHUxNikoIGx0bXAgJiAweGZmZmYgKTsgLy8gR2V0IDE2IGJpdCBhdmFpbGFibGUKKwkJVmFsdWVbaV0gPSBjcHVfdG9fbGUxNiggVmFsdWVbaV0gKTsgLy8gWzc6MF0yNDEyIFs3OjBdMjQxNyAuLi4uCisJfQorCisJLy8gQWRqdXN0IHRoZSBmaWxlZCB3aGljaCBmaWxscyB3aXRoIHJlc2VydmVkIHZhbHVlLgorCXBjdG1wID0gKFBVQ0hBUilWYWx1ZTsKKwlmb3IoIGk9MDsgaTwoTUFYX1RYVkdBX0VFUFJPTSoyKTsgaSsrICkKKwl7CisJCWlmKCBwY3RtcFtpXSAhPSAweGZmICkKKwkJCWN0bXAgPSBwY3RtcFtpXTsKKwkJZWxzZQorCQkJcGN0bXBbaV0gPSBjdG1wOworCX0KKworCS8vIEFkanVzdCBXQl8yNDIgdG8gV0JfMjQyXzEgVHhWZ2Egc2NhbGUKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfV0JfMjQyICkKKwl7CisJCWZvciggaT0wOyBpPDQ7IGkrKyApIC8vIE9ubHkgMjQxMiAyNDM3IDI0NjIgMjQ4NCBjYXNlIG11c3QgYmUgbW9kaWZpZWQKKwkJeworCQkJZm9yKCBqPTA7IGo8KHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZykvc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nWzBdKSk7IGorKyApCisJCQl7CisJCQkJaWYoIHBjdG1wW2ldIDwgKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2pdWzFdICkKKwkJCQl7CisJCQkJCXBjdG1wW2ldID0gKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2pdWzBdOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmKCBqID09IChzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpL3NpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpICkKKwkJCQlwY3RtcFtpXSA9ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqLTFdWzBdOworCQl9CisJfQorCisJLy8gMjAwNjA2MjEgQWRkCisJbWVtY3B5KCBwSHdEYXRhLT5UeFZnYVNldHRpbmdJbkVFUFJPTSwgcGN0bXAsIE1BWF9UWFZHQV9FRVBST00qMiApOyAvL01BWF9UWFZHQV9FRVBST00gaXMgdTE2IGNvdW50CisJRUVQUk9NVHhWZ2FBZGp1c3QoIHBId0RhdGEgKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFmZmVjdCB0aGUgVHhWZ2EgcGFyYW1ldGVyIGluIEhBTC4gSWYgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwKKy8vIG9yIFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCBiZSBjYWxsZWQsIG5ldyBUeFZnYSB3aWxsIHRha2UgZWZmZWN0LgorLy8gVHhWZ2FTZXR0aW5nSW5FRVBST00gb2Ygc0h3RGF0YSBpcyBhbiB1OCBhcnJheSBwb2ludCB0byBFRVBST00gY29udGFpbiBmb3IgSVM4OUMzNQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHVzZSBkZWZhdWx0IFR4VmdhU2V0dGluZ0luRUVQUk9NIGRhdGEgdG8gY2FsY3VsYXRlIG5ldyBUeFZnYS4KK3ZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBwaHdfZGF0YV90IHBId0RhdGEgKSAvLyAyMDA2MDYxOS41IEFkZAoreworCVBVQ0hBUgkJcFR4VmdhID0gcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST007CisJczE2CQlpLCBzdG1wOworCisJLy8tLSAyLjRHIC0tIDIwMDYwNzA0LjIgUmVxdWVzdCBmcm9tIFRpZ2VyCisJLy9jaGFubmVsIDEgfiA1CisJc3RtcCA9IHBUeFZnYVsxXSAtIHBUeFZnYVswXTsKKwlmb3IoIGk9MDsgaTw1OyBpKysgKQorCQlwSHdEYXRhLT5UeFZnYUZvcjI0W2ldID0gcFR4VmdhWzBdICsgc3RtcCppLzQ7CisJLy9jaGFubmVsIDYgfiAxMAorCXN0bXAgPSBwVHhWZ2FbMl0gLSBwVHhWZ2FbMV07CisJZm9yKCBpPTU7IGk8MTA7IGkrKyApCisJCXBId0RhdGEtPlR4VmdhRm9yMjRbaV0gPSBwVHhWZ2FbMV0gKyBzdG1wKihpLTUpLzQ7CisJLy9jaGFubmVsIDExIH4gMTMKKwlzdG1wID0gcFR4VmdhWzNdIC0gcFR4VmdhWzJdOworCWZvciggaT0xMDsgaTwxMzsgaSsrICkKKwkJcEh3RGF0YS0+VHhWZ2FGb3IyNFtpXSA9IHBUeFZnYVsyXSArIHN0bXAqKGktMTApLzI7CisJLy9jaGFubmVsIDE0CisJcEh3RGF0YS0+VHhWZ2FGb3IyNFsxM10gPSBwVHhWZ2FbM107CisKKwkvLy0tIDVHIC0tCisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV83MjMwICkKKwl7CisJCS8vY2hhbm5lbCAxODQKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFswXS5DaGFuTm8gPSAxODQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs0XTsKKwkJLy9jaGFubmVsIDE5NgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzNdLkNoYW5ObyA9IDE5NjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMV0uQ2hhbk5vID0gMTg4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzJdLkNoYW5ObyA9IDE5MjsKKwkJc3RtcCA9IHBUeFZnYVs1XSAtIHBUeFZnYVs0XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs2XS5DaGFuTm8gPSAxNjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzZdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzRdLkNoYW5ObyA9IDg7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs1XS5DaGFuTm8gPSAxMjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs1XS5UeFZnYVZhbHVlID0gcFR4VmdhWzZdOworCisJCS8vY2hhbm5lbCAzNgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzhdLkNoYW5ObyA9IDM2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzhdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbN107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbN10uQ2hhbk5vID0gMzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbN10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs3XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs5XS5DaGFuTm8gPSAzODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzddOworCisJCS8vY2hhbm5lbCA0MAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEwXS5DaGFuTm8gPSA0MDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs4XTsKKwkJLy9jaGFubmVsIDQ4CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTRdLkNoYW5ObyA9IDQ4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzldOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTFdLkNoYW5ObyA9IDQyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEyXS5DaGFuTm8gPSA0NDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxM10uQ2hhbk5vID0gNDY7CisJCXN0bXAgPSBwVHhWZ2FbOV0gLSBwVHhWZ2FbOF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTNdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wLzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTJdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs5XSAtIHN0bXAqMy80OworCisJCS8vY2hhbm5lbCA1MgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE1XS5DaGFuTm8gPSA1MjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMF07CisJCS8vY2hhbm5lbCA2NAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE4XS5DaGFuTm8gPSA2NDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMV07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNl0uQ2hhbk5vID0gNTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTddLkNoYW5ObyA9IDYwOworCQlzdG1wID0gcFR4VmdhWzExXSAtIHBUeFZnYVsxMF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTFdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzExXSAtIHN0bXAqMi8zOworCisJCS8vY2hhbm5lbCAxMDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOV0uQ2hhbk5vID0gMTAwOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzEyXTsKKwkJLy9jaGFubmVsIDExMgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIyXS5DaGFuTm8gPSAxMTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjJdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTNdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjBdLkNoYW5ObyA9IDEwNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMV0uQ2hhbk5vID0gMTA4OworCQlzdG1wID0gcFR4VmdhWzEzXSAtIHBUeFZnYVsxMl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTNdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIwXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXSAtIHN0bXAqMi8zOworCisJCS8vY2hhbm5lbCAxMjgKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNl0uQ2hhbk5vID0gMTI4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIzXS5DaGFuTm8gPSAxMTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjRdLkNoYW5ObyA9IDEyMDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNV0uQ2hhbk5vID0gMTI0OworCQlzdG1wID0gcFR4VmdhWzE0XSAtIHBUeFZnYVsxM107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjVdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTRdIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAqMi80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAqMy80OworCisJCS8vY2hhbm5lbCAxNDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOV0uQ2hhbk5vID0gMTQwOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE1XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI3XS5DaGFuTm8gPSAxMzI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjhdLkNoYW5ObyA9IDEzNjsKKwkJc3RtcCA9IHBUeFZnYVsxNV0gLSBwVHhWZ2FbMTRdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI4XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE1XSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyN10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTQ5CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzBdLkNoYW5ObyA9IDE0OTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNl07CisJCS8vY2hhbm5lbCAxNjUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszNF0uQ2hhbk5vID0gMTY1OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzM0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMxXS5DaGFuTm8gPSAxNTM7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzJdLkNoYW5ObyA9IDE1NzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszM10uQ2hhbk5vID0gMTYxOworCQlzdG1wID0gcFR4VmdhWzE3XSAtIHBUeFZnYVsxNl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzNdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTddIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAqMi80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAqMy80OworCX0KKworCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwlXQkRFQlVHKCgiIFR4VmdhRm9yMjQgOiBcbiIpKTsKKwlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yMjQsIDE0ICwwKTsKKwlXQkRFQlVHKCgiIFR4VmdhRm9yNTAgOiBcbiIpKTsKKwlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yNTAsIDcwICwwKTsKKwkjZW5kaWYKK30KKwordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdW5zaWduZWQgY2hhcgkJSXMxMWJSYXRlOworCisJSXMxMWJSYXRlID0gKHJhdGUgJSA2KSA/IDEgOiAwOworCXN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQorCXsKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQlpZiggSXMxMWJSYXRlICkKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUIpICkKKwkJCQl7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUIgKTsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDRjLCBCQjRDX0RFRkFVTFRfQUwyMjMwXzExQiApOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUcpICkKKwkJCQl7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUcgKTsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDRjLCBCQjRDX0RFRkFVTFRfQUwyMjMwXzExRyApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOiAvLyAyMDA2MDYyMyBUaGUgZml4IG9ubHkgZm9yIG9sZCBUeFZHQSBzZXR0aW5nCisJCQlpZiggSXMxMWJSYXRlICkKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUIpICYmCisJCQkJCShwV2IzNVJlZy0+QkI0QyAhPSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFCKSApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUI7CisJCQkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExQjsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDQ4LCBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX1dCMjQyXzExQiApOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUcpICYmCisJCQkJCShwV2IzNVJlZy0+QkI0QyAhPSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFHKSApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUc7CisJCQkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRzsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDQ4LCBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX1dCMjQyXzExRyApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCX0KK30KKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcnhpc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlOTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit2b2lkIHZSeFRpbWVySW5pdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJT1NfVElNRVJfSU5JVElBTCgmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCAodm9pZCopIFJ4VGltZXJIYW5kbGVyLCAodm9pZCopIEFkYXB0ZXIpOworfQorCit2b2lkIHZSeFRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSkKK3sKKwlpZiAodGltZW91dF92YWx1ZTxNSU5fVElNRU9VVF9WQUwpCisJCXRpbWVvdXRfdmFsdWU9TUlOX1RJTUVPVVRfVkFMOworCisJT1NfVElNRVJfU0VUKCAmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCB0aW1lb3V0X3ZhbHVlICk7Cit9CisKK3ZvaWQgdlJ4VGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcikKK3sKKwlPU19USU1FUl9DQU5DRUwoICYoQWRhcHRlci0+TWRzLm5UaW1lciksIDAgKTsKK30KKwordm9pZCBSeFRpbWVySGFuZGxlcl8xYSggUEFEQVBURVIgQWRhcHRlcikKK3sKKwlSeFRpbWVySGFuZGxlcihOVUxMLCBBZGFwdGVyLCBOVUxMLCBOVUxMKTsKK30KKwordm9pZCBSeFRpbWVySGFuZGxlcih2b2lkKiBTeXN0ZW1TcGVjaWZpYzEsIFBXQjMyX0FEQVBURVIgQWRhcHRlciwKKwkJICAgIHZvaWQqIFN5c3RlbVNwZWNpZmljMiwgdm9pZCogU3lzdGVtU3BlY2lmaWMzKQoreworCVdBUk5fT04oMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWIwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaApAQCAtMCwwICsxLDExNSBAQAorLy8KKy8vIFNDQU4gdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkVTLCB2YXJpYWJsZXMKKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgU0NBTiBtb2R1bGUKKyNkZWZpbmUgU0NBTk1TR19TQ0FOX1JFUQkJCTB4MDEKKyNkZWZpbmUgU0NBTk1TR19CRUFDT04JCQkJMHgwMgorI2RlZmluZSBTQ0FOTVNHX1BST0JFX1JFU1BPTlNFCQkweDAzCisjZGVmaW5lIFNDQU5NU0dfVElNRU9VVAkJCQkweDA0CisjZGVmaW5lIFNDQU5NU0dfVFhQUk9CRV9GQUlMCQkweDA1CisjZGVmaW5lIFNDQU5NU0dfRU5BQkxFX0JHU0NBTgkJMHgwNgorI2RlZmluZSBTQ0FOTVNHX1NUT1BfU0NBTgkJCTB4MDcKKworLy8gQlNTIFR5cGUgPT5jb25mb3JtIHRvCisvLyBJQlNTICAgICAgICAgICAgIDogVG9EUy9Gcm9tRFMgPSAwMAorLy8gSW5mcmFzdHJ1Y3R1cmUgICA6IFRvRFMvRnJvbURTID0gMDEKKyNkZWZpbmUgSUJTU19ORVQJCQkwCisjZGVmaW5lIEVTU19ORVQJCQkJMQorI2RlZmluZSBBTllCU1NfTkVUCQkJMgorCisvLyBTY2FuIFR5cGUKKyNkZWZpbmUgQUNUSVZFX1NDQU4JCQkwCisjZGVmaW5lIFBBU1NJVkVfU0NBTgkJMQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vR2xvYmFsIGRhdGEgc3RydWN0dXJlcywgSW5pdGlhbCBTY2FuICYgQmFja2dyb3VuZCBTY2FuCit0eXBlZGVmIHN0cnVjdCBfU0NBTl9SRVFfUEFSQQkvL21hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ0FOIHJlcXVlc3QKK3sKKwl1MzIJCQkJU2NhblR5cGU7CQkJLy9wYXNzaXZlL2FjdGl2ZSBzY2FuCisKKwlDSEFOX0xJU1QJCXNDaGFubmVsTGlzdDsJLy8gODZCCisJdTgJCQlyZXNlcnZlZF8xWzJdOworCisJc3RydWN0IFNTSURfRWxlbWVudAlzU1NJRDsgLy8gMzRCLiBzY2FuIG9ubHkgZm9yIHRoaXMgU1NJRAorCXU4CQkJcmVzZXJ2ZWRfMlsyXTsKKworfSBTQ0FOX1JFUV9QQVJBLCAqcHNTQ0FOX1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfU0NBTl9QQVJBTUVURVJTCit7CisJdTE2CQkJCXdTdGF0ZTsKKwl1MTYJCQkJaUN1cnJlbnRDaGFubmVsSW5kZXg7CisKKwlTQ0FOX1JFUV9QQVJBCXNTY2FuUmVxOworCisJdTgJCQkJQlNTSURbTUFDX0FERFJfTEVOR1RIICsgMl07CQkvL3NjYW4gb25seSBmb3IgdGhpcyBCU1NJRAorCisJdTMyCQkJCUJzc1R5cGU7CQkJCQkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgQlNTIHR5cGUKKworCS8vc3RydWN0IFNTSURfRWxlbWVudAlzU1NJRDsJCQkJCQkvL3NjYW4gb25seSBmb3IgdGhpcyBTU0lECisJdTE2CQkJCVByb2JlRGVsYXk7CisJdTE2CQkJCU1pbkNoYW5uZWxUaW1lOworCisJdTE2CQkJCU1heENoYW5uZWxUaW1lOworCXUxNgkJCQlyZXNlcnZlZF8xOworCisgICAgczMyCQkJCWlCZ1NjYW5QZXJpb2Q7CQkJCS8vIFhQOiA1IHNlYworCisgICAgdTgJCQkJYm9CZ1NjYW47CQkJCQkvLyBXYjogZW5hYmxlIEJHIHNjYW4sIEZvciBYUCwgdGhpcyB2YWx1ZSBtdXN0IGJlIEZBTFNFCisgICAgdTgJCQkJYm9GYXN0U2NhbjsJCQkJCS8vIFdiOiByZXNlcnZlZAorCXU4CQkJCWJvQ0NBYnVzeTsJCQkJCS8vIFdiOiBIV01BQyBDQ0EgYnVzeSBzdGF0dXMKKwl1OAkJCQlyZXNlcnZlZF8yOworCisJLy9ORElTX01JTklQT1JUX1RJTUVSCW5UaW1lcjsKKwlPU19USU1FUgkJCW5UaW1lcjsKKworCXUzMgkJCQlTY2FuVGltZVN0YW1wOwkJCS8vSW5jcmVhc2UgMSBwZXIgYmFja2dyb3VuZCBzY2FuKDEgbWludXRlKQorCXUzMgkJCQlCc3NUaW1lU3RhbXA7CQkJLy9JbmNyZWFzZSAxIHBlciBjb25uZWN0IHN0YXR1cyBjaGVjaworCXUzMgkJCQlSeE51bVBlckFudGVubmFbMl07CQkvLworCisJdTgJCQkJQW50ZW5uYVRvZ2dsZTsJCQkvLworCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7CisJdTggCQkJCWJvVGltZXJBY3RpdmU7CQkJCS8vIFdiOiByZXNlcnZlZAorCXU4CQkJCWJvU2F2ZTsKKworCXUzMgkJCQlCU2NhbkVuYWJsZTsgLy8gQmFja2dyb3VuZCBzY2FuIGVuYWJsZS4gRGVmYXVsdCBpcyBPbgorCit9IFNDQU5fUEFSQU1FVEVSUywgKnBzU0NBTl9QQVJBTUVURVJTOworCisvLyBFbmNhcHN1bGF0ZSAnQWRhcHRlcicgZGF0YSBzdHJ1Y3R1cmUKKyNkZWZpbmUgcHNTQ0FOCQkJKCYoQWRhcHRlci0+c1NjYW5QYXJhKSkKKyNkZWZpbmUgcHNTQ0FOUkVRCQkJKCYoQWRhcHRlci0+c1NjYW5QYXJhLnNTY2FuUmVxKSkKKworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8Jc2Nhbi5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIHNjYW4gbW9kdWxlCisvLwloaXN0b3J5IC0tIDAxLzE0LzAzJyBjcmVhdGVkCisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisvL0RlZmluZSB0aGUgc3RhdGUgb2Ygc2NhbiBtb2R1bGUKKyNkZWZpbmUgU0NBTl9JTkFDVElWRQkJCQkJCTAKKyNkZWZpbmUgV0FJVF9QUk9CRV9ERUxBWQkJCQkJMQorI2RlZmluZSBXQUlUX1JFU1BPTlNFX01JTgkJCQkJMgorI2RlZmluZSBXQUlUX1JFU1BPTlNFX01BWF9BQ1RJVkUJCQkzCisjZGVmaW5lIFdBSVRfQkVBQ09OX01BWF9QQVNTSVZFCQkJCTQKKyNkZWZpbmUgU0NBTl9DT01QTEVURQkJCQkJCTUKKyNkZWZpbmUgQkdfU0NBTgkJCQkJCQkJNgorI2RlZmluZSBCR19TQ0FOTklORwkJCQkJCQk3CisKKworLy8gVGhlIHZhbHVlIHdpbGwgbG9hZCBmcm9tIEVFUFJPTQorLy8gSWYgMHhmZiBpcyBzZXQgaW4gRUVQT00sIHRoZSBkcml2ZXIgd2lsbCB1c2UgU0NBTl9NQVhfQ0hOTF9USU1FIGluc3RlYWQuCisvLyBUaGUgZGVmaW5pdGlvbiBpcyBpbiBXYkhhbC5oCisvLwkjZGVmaW5lIFNDQU5fTUFYX0NITkxfVElNRQkJCQkoNTApCisKKworCisvLyBzdGF0aWMgZnVuY3Rpb25zCisKKy8vc3RhdGljIHZvaWQgU2NhblRpbWVySGFuZGxlcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworLy9zdGF0aWMgdm9pZCB2U2NhblRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUglBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSk7CisvL3N0YXRpYyB2b2lkIHZTY2FuVGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGU5M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5jCkBAIC0wLDAgKzEsMTMgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBzbWVfYXBpLmMKKy8vCisvLyBDb3B5cmlnaHQoQykgMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuCisvLworLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3M4IHNtZV9nZXRfcnNzaSh2b2lkICpwY29yZV9kYXRhLCBzMzIgKnByc3NpKQoreworICAgICAgIEJVRygpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNmIyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBzbWVfYXBpLmgKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuCisgKgorICogbW9kaWZpY2F0aW9uIGhpc3RvcnkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMS4wMC4wMDEsIDIwMDMtMDQtMjEsIEtldmluICAgICAgIGNyZWF0ZWQKKyAqIDEuMDAuMDAyLCAyMDAzLTA1LTE0LCBQRDQzICYgUEUyMCBtb2RpZmllZAorICoKKyAqLworCisjaWZuZGVmIF9fU01FX0FQSV9IX18KKyNkZWZpbmUgX19TTUVfQVBJX0hfXworCisvKioqKioqKioqKioqKioqKioqIElOQ0xVREUgRklMRVMgU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vI2luY2x1ZGUgIkdMXGdsX2NvcmUuaCIKKworLyoqKioqKioqKioqKioqKioqKiBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIF9JTkxJTkUgICAgICBfX2lubGluZQorCisjZGVmaW5lIE1FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCAgICAwCisjZGVmaW5lIE1FRElBX1NUQVRFX0NPTk5FQ1RFRCAgICAgICAxCisKKy8vQVJSQVkgQ0hFQ0sKKyNkZWZpbmUgTUFYX1BPV0VSX1RPX0RCIDMyCisKKy8qKioqKioqKioqKioqKioqKiogVFlQRSBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqIEVYUE9SVEVEIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKi8KKworLy8gT0lEXzgwMl8xMV9CU1NJRAorczggc21lX2dldF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsvL05vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsKKworLy8gT0lEXzgwMl8xMV9TU0lECitzOCBzbWVfZ2V0X3NzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzc2lkLCB1OCAqcHNzaWRfbGVuKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggKnBzc2lkX2xlbik7Ly8gTm90IHVzZQorczggc21lX3NldF9kZXNpcmVkX3NzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzc2lkLCB1OCBzc2lkX2xlbik7CisKKy8vIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQorczggc21lX2dldF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc190eXBlKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc190eXBlKTsvL05vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCBic3NfdHlwZSk7CisKKy8vIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQKK3M4IHNtZV9nZXRfZnJhZ21lbnRfdGhyZXNob2xkKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiAqcHRocmVzaG9sZCk7CitzOCBzbWVfc2V0X2ZyYWdtZW50X3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgdGhyZXNob2xkKTsKKworLy8gT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECitzOCBzbWVfZ2V0X3J0c190aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpwdGhyZXNob2xkKTsKK3M4IHNtZV9zZXRfcnRzX3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgdGhyZXNob2xkKTsKKworLy8gT0lEXzgwMl8xMV9SU1NJCitzOCBzbWVfZ2V0X3Jzc2kodm9pZCAqcGNvcmVfZGF0YSwgczMyICpwcnNzaSk7CisKKy8vIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgorczggc21lX2dldF9iZWFjb25fcGVyaW9kKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiAqcGJlYWNvbl9wZXJpb2QpOworczggc21lX3NldF9iZWFjb25fcGVyaW9kKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiBiZWFjb25fcGVyaW9kKTsKKworczggc21lX2dldF9hdGltX3dpbmRvdyh2b2lkICpwY29yZV9kYXRhLCB1MTYgKnBhdGltX3dpbmRvdyk7CitzOCBzbWVfc2V0X2F0aW1fd2luZG93KHZvaWQgKnBjb3JlX2RhdGEsIHUxNiBhdGltX3dpbmRvdyk7CisKK3M4IHNtZV9nZXRfY3VycmVudF9jaGFubmVsKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwY3VycmVudF9jaGFubmVsKTsKK3M4IHNtZV9nZXRfY3VycmVudF9iYW5kKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwY3VycmVudF9iYW5kKTsKK3M4IHNtZV9zZXRfY3VycmVudF9jaGFubmVsKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGN1cnJlbnRfY2hhbm5lbCk7CisKKy8vIE9JRF84MDJfMTFfQlNTSURfTElTVAorczggc21lX2dldF9zY2FuX2Jzc19jb3VudCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGNvdW50KTsKK3M4IHNtZV9nZXRfc2Nhbl9ic3Modm9pZCAqcGNvcmVfZGF0YSwgdTggaW5kZXgsIHZvaWQgKipwcGJzcyk7CisKK3M4IHNtZV9nZXRfY29ubmVjdGVkX2Jzcyh2b2lkICpwY29yZV9kYXRhLCB2b2lkICoqcHBic3Nfbm93KTsKKworLy8gT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCitzOCBzbWVfZ2V0X2F1dGhfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGF1dGhfbW9kZSk7CitzOCBzbWVfc2V0X2F1dGhfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBhdXRoX21vZGUpOworCisvLyBPSURfODAyXzExX1dFUF9TVEFUVVMgLyBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCitzOCBzbWVfZ2V0X3dlcF9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwd2VwX21vZGUpOworczggc21lX3NldF93ZXBfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCB3ZXBfbW9kZSk7CisvL3M4IHNtZV9nZXRfZW5jcnlwdGlvbl9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzdGF0dXMpOworLy9zOCBzbWVfc2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHN0YXR1cyk7CisKKy8vID8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisvLyBPSURfR0VOX1ZFTkRPUl9JRAorLy8gT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCitzOCBzbWVfZ2V0X3Blcm1hbmVudF9tYWNfYWRkcih2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKKworLy8gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUworczggc21lX2dldF9jdXJyZW50X21hY19hZGRyKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwbWFjX2FkZHIpOworCisvLyBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UKK3M4IHNtZV9nZXRfbmV0d29ya190eXBlX2luX3VzZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHR5cGUpOworczggc21lX3NldF9uZXR3b3JrX3R5cGVfaW5fdXNlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHR5cGUpOworCisvLyBPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUworczggc21lX2dldF9zdXBwb3J0ZWRfcmF0ZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHJhdGVzKTsKKworLy8gT0lEXzgwMl8xMV9BRERfV0VQCisvLzEyLzI5LzAzJyB3a2NoZW4KK3M4IHNtZV9zZXRfYWRkX3dlcCh2b2lkICpwY29yZV9kYXRhLCB1MzIga2V5X2luZGV4LCB1MzIga2V5X2xlbiwKKwkJCQkJIHU4ICpBZGRyZXNzLCB1OCAqa2V5KTsKKworLy8gT0lEXzgwMl8xMV9SRU1PVkVfV0VQCitzOCBzbWVfc2V0X3JlbW92ZV93ZXAodm9pZCAqcGNyZV9kYXRhLCB1MzIga2V5X2luZGV4KTsKKworLy8gT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUKK3M4IHNtZV9zZXRfZGlzYXNzb2NpYXRlKHZvaWQgKnBjb3JlX2RhdGEpOworCisvLyBPSURfODAyXzExX1BPV0VSX01PREUKK3M4IHNtZV9nZXRfcG93ZXJfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1vZGUpOworczggc21lX3NldF9wb3dlcl9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IG1vZGUpOworCisvLyBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgorczggc21lX3NldF9ic3NpZF9saXN0X3NjYW4odm9pZCAqcGNvcmVfZGF0YSwgdm9pZCAqcHNjYW5fcGFyYSk7CisKKy8vIE9JRF84MDJfMTFfUkVMT0FEX0RFRkFVTFRTCitzOCBzbWVfc2V0X3JlbG9hZF9kZWZhdWx0cyh2b2lkICpwY29yZV9kYXRhLCB1OCByZWxvYWRfdHlwZSk7CisKKworLy8gVGhlIGZvbGxvd2luZyBTTUUgQVBJIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgV1BBCisvLworLy8gTWFuZGF0b3J5IE9JRHMgZm9yIFdQQQorLy8KKworLy8gT0lEXzgwMl8xMV9BRERfS0VZCisvL3M4IHNtZV9zZXRfYWRkX2tleSh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9LRVkgKnBrZXkpOworCisvLyBPSURfODAyXzExX1JFTU9WRV9LRVkKKy8vczggc21lX3NldF9yZW1vdmVfa2V5KHZvaWQgKnBjb3JlX2RhdGEsIE5ESVNfODAyXzExX1JFTU9WRV9LRVkgKnBrZXkpOworCisvLyBPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCisvL3M4IHNtZV9zZXRfYXNzb2NpYXRpb25faW5mb3JtYXRpb24odm9pZCAqcGNvcmVfZGF0YSwKKy8vICAgICAgICAgICAgICAgICAgICBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiAqcGluZm8pOworCisvLyBPSURfODAyXzExX1RFU1QKKy8vczggc21lX3NldF90ZXN0KHZvaWQgKnBjb3JlX2RhdGEsIE5ESVNfODAyXzExX1RFU1QgKnB0ZXN0X2RhdGEpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KKy8qCisvLyBUaGUgbGVmdCBPSURzCisKKy8vIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQKKy8vIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwKKy8vIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSCisvLyBPSURfODAyXzExX05VTUJFUl9PRl9BTlRFTk5BUworLy8gT0lEXzgwMl8xMV9SWF9BTlRFTk5BX1NFTEVDVEVECisvLyBPSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQKKy8vIE9JRF84MDJfMTFfU1RBVElTVElDUworLy8gT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCisvLyBPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBub25lLXN0YW5kYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworczggc21lX2dldF9jb25uZWN0X3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHN0YXR1cyk7CisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLy9zOCBzbWVfZ2V0X3NjYW5fdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNjYW5fdHlwZSk7CisvL3M4IHNtZV9zZXRfc2Nhbl90eXBlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHNjYW5fdHlwZSk7CisKKy8vczggc21lX2dldF9zY2FuX2NoYW5uZWxfbGlzdCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNjYW5fdHlwZSk7CisvL3M4IHNtZV9zZXRfc2Nhbl9jaGFubmVsX2xpc3Qodm9pZCAqcGNvcmVfZGF0YSwgdTggc2Nhbl90eXBlKTsKKworCit2b2lkIHNtZV9nZXRfZW5jcnlwdGlvbl9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKkVuY3J5cHRTdGF0dXMpOwordm9pZCBzbWVfc2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IEVuY3J5cHRTdGF0dXMpOworczggc21lX2FkZF9rZXkodm9pZAkJKnBjb3JlX2RhdGEsCisJCQkJCXUzMgkJa2V5X2luZGV4LAorCQkJCQl1OAkJa2V5X2xlbiwKKwkJCQkJdTgJCWtleV90eXBlLAorCQkJCQl1OAkJKmtleV9ic3NpZCwKKwkJCQkJLy91OAkJKmtleV9yc2MsCisJCQkJCXU4CQkqcHR4X3RzYywKKwkJCQkJdTgJCSpwcnhfdHNjLAorCQkJCQl1OAkJKmtleV9tYXRlcmlhbCk7Cit2b2lkIHNtZV9yZW1vdmVfZGVmYXVsdF9rZXkodm9pZCAqcGNvcmVfZGF0YSwgaW50IGluZGV4KTsKK3ZvaWQgc21lX3JlbW92ZV9tYXBwaW5nX2tleSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKK3ZvaWQgc21lX2NsZWFyX2FsbF9tYXBwaW5nX2tleSh2b2lkICpwY29yZV9kYXRhKTsKK3ZvaWQgc21lX2NsZWFyX2FsbF9kZWZhdWx0X2tleSh2b2lkICpwY29yZV9kYXRhKTsKKworCisKK3M4IHNtZV9zZXRfcHJlYW1ibGVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKK3M4IHNtZV9nZXRfcHJlYW1ibGVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqbW9kZSk7CitzOCBzbWVfZ2V0X3ByZWFtYmxlX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnR5cGUpOworczggc21lX3NldF9zbG90dGltZV9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IG1vZGUpOworczggc21lX2dldF9zbG90dGltZV9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICptb2RlKTsKK3M4IHNtZV9nZXRfc2xvdHRpbWVfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqdHlwZSk7CitzOCBzbWVfc2V0X3R4cmF0ZV9wb2xpY3kodm9pZCAqcGNvcmVfZGF0YSwgdTggcG9saWN5KTsKK3M4IHNtZV9nZXRfdHhyYXRlX3BvbGljeSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG9saWN5KTsKK3M4IHNtZV9nZXRfY3dtaW5fdmFsdWUodm9pZCAqcGNvcmVfZGF0YSwgdTggKmN3bWluKTsKK3M4IHNtZV9nZXRfY3dtYXhfdmFsdWUodm9pZCAqcGNvcmVfZGF0YSwgdTE2ICpjd21heCk7CitzOCBzbWVfZ2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKiBwTXNSYWRpb09mZik7CitzOCBzbWVfc2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYm9Nc1JhZGlvT2ZmKTsKK3M4IHNtZV9nZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBwc1JhZGlvT2ZmIHBSYWRpb09mZkRhdGEpOworczggc21lX3NldF9yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIFJhZGlvT2ZmIFJhZGlvT2ZmRGF0YSk7CisKK3ZvaWQgc21lX2dldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4UG93ZXIpOwordTggc21lX3NldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgVHhQb3dlcik7Cit2b2lkIHNtZV9nZXRfYW50ZW5uYV9jb3VudCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKkFudGVubmFDb3VudCk7Cit2b2lkIHNtZV9nZXRfcnhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlJ4QW50ZW5uYSk7Cit1OCBzbWVfc2V0X3J4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFJ4QW50ZW5uYSk7Cit2b2lkIHNtZV9nZXRfdHhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4QW50ZW5uYSk7CitzOCBzbWVfc2V0X3R4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4QW50ZW5uYSk7CitzOCBzbWVfc2V0X0lCU1NfY2hhbih2b2lkICpwY29yZV9kYXRhLCBDaGFuSW5mbyBjaGFuKTsKKworLy8yMDA2MTEwOCBXUFMKK3M4IHNtZV9zZXRfSUVfYXBwZW5kKHZvaWQgKnBjb3JlX2RhdGEsIFBVQ0hBUiBidWZmZXIsIHUxNiBidWZfbGVuKTsKKworCisKKworLy89PT09PT09PT09PT09PT09PT0gTG9jYWwgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT0KKy8vI2lmZGVmIF9IU0lOQ0hVCisvL3ZvaWQgZHJ2X3RyYW5zbGF0ZV9yc3NpKCk7ICAgLy8gSFcgUlNTSSBiaXQgLT4gTkRJUyBSU1NJIHJlcHJlc2VudGF0aW9uCisvL3ZvaWQgZHJ2X3RyYW5zbGF0ZV9ic3NfZGVzY3JpcHRpb24oKTsgLy8gTG9jYWwgYnNzIGRlc2MgLT4gTkRJUyBic3MgZGVzYworLy92b2lkIGRydl90cmFuc2xhdGVfY2hhbm5lbCh1OCBOZXR3b3JrVHlwZSwgdTggQ2hhbm5lbE51bWJlciwgdTMyICpmcmVxKTsgLy8gY2hhbm5lbCBudW1iZXIgLT4gY2hhbm5lbCAvZnJlcS4KKy8vI2VuZGlmIF9IU0lOQ0hVCisvLworc3RhdGljIGNvbnN0IHUzMiBQb3dlckRiVG9Nd1tdID0KK3sKKwk1NiwJLy9tVywgTUFYIC0gMCwJMTcuNSBkYm0KKwk0MCwJLy9tVywgTUFYIC0gMSwJMTYuMCBkYm0KKwkzMCwJLy9tVywgTUFYIC0gMiwJMTQuOCBkYm0KKwkyMCwJLy9tVywgTUFYIC0gMywJMTMuMCBkYm0KKwkxNSwJLy9tVywgTUFYIC0gNCwJMTEuOCBkYm0KKwkxMiwJLy9tVywgTUFYIC0gNSwJMTAuNiBkYm0KKwk5LAkvL21XLCBNQVggLSA2LAkgOS40IGRibQorCTcsCS8vbVcsIE1BWCAtIDcsCSA4LjMgZGJtCisJNSwJLy9tVywgTUFYIC0gOCwJIDYuNCBkYm0KKwk0LAkvL21XLCBNQVggLSA5LAkgNS4zIGRibQorCTMsCS8vbVcsIE1BWCAtIDEwLCAgNC4wIGRibQorCTIsCS8vbVcsIE1BWCAtIDExLCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxMiwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTMsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE0LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNSwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTYsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE3LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxOCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMTksICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIwLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMSwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjIsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIzLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjUsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI2LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNywgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjgsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI5LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAzMCwgID8gZGJtCisJMQkvL21XLCBNQVggLSAzMSwgID8gZGJtCit9OworCisKKworCisKKyNlbmRpZiAvKiBfX1NNRV9BUElfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkMmZiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKQEAgLTAsMCArMSwyMjggQEAKKy8vCisvLyBTTUVfUy5IIC0KKy8vIFNNRSB0YXNrIGdsb2JhbCBDT05TVEFOVFMsIFNUUlVDVFVSRVMsIHZhcmlhYmxlcworLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vZGVmaW5lIHRoZSBtc2cgdHlwZSBvZiBTTUUgbW9kdWxlCisvLyAweDAwfjB4MUYgOiBNU0cgZnJvbSBHVUkgZGlzcGF0Y2gKKy8vIDB4MjB+MHgzRiA6IE1TRyBmcm9tIE1MTUUKKy8vIDB4NDB+MHg1RiA6IE1TRyBmcm9tIFNDQU4KKy8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCisvLyAweDcwfjB4N0YgOiBNU0cgZnJvbSBST0FNSU5HCisvLyAweDgwfjB4OEYgOiBNU0cgZnJvbSBJU1IKKy8vIDB4OTAJCSA6IE1TRyBUaW1lT3V0CisKKy8vIGZyb20gR1VJCisjZGVmaW5lIFNNRU1TR19TQ0FOX1JFUQkJCQkJMHgwMQorLy8jZGVmaW5lIFNNRU1TR19QQVNTSVZFX1NDQU5fUkVRCQkJMHgwMgorI2RlZmluZSBTTUVNU0dfSk9JTl9SRVEJCQkJCTB4MDMKKyNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1MJCQkJMHgwNAorI2RlZmluZSBTTUVNU0dfRElTQ09OTkVDVF9SRVEJCQkweDA1CisjZGVmaW5lIFNNRU1TR19BVVRIRU5fUkVRCQkJCTB4MDYKKyNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX1JFUQkJCQkweDA3CisjZGVmaW5lIFNNRU1TR19BU1NPQ19SRVEJCQkJMHgwOAorI2RlZmluZSBTTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwOQorI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfUkVRCQkJCTB4MGEKKyNkZWZpbmUgU01FTVNHX1BPV0VSU0FWRV9SRVEJCQkweDBiCisKKworLy8gZnJvbSBNTE1FCisjZGVmaW5lIFNNRU1TR19BVVRIRU5fQ0ZNCQkJCTB4MjEKKyNkZWZpbmUgU01FTVNHX0FVVEhFTl9JTkQJCQkJMHgyMgorI2RlZmluZSBTTUVNU0dfQVNTT0NfQ0ZNCQkJCTB4MjMKKyNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX0lORAkJCQkweDI0CisjZGVmaW5lIFNNRU1TR19ESVNBU1NPQ19JTkQJCQkJMHgyNQorLy8gZnJvbSBTQ0FOCisjZGVmaW5lIFNNRU1TR19TQ0FOX0NGTQkJCQkJMHg0MQorI2RlZmluZSBTTUVNU0dfU1RBUlRfSUJTU19DRk0JCQkweDQyCisvLyBmcm9tIE1UTywgZnVuY3Rpb24gY2FsbCB0byBzZXQgU01FIHBhcmFtZXRlcnMKKworLy8gMHg2MH4weDZGIDogTVNHIGZyb20gVFgvUlgKKy8vI2RlZmluZSBTTUVNU0dfSUJTU19KT0lOX1VQREFURV9CU1NJRAkweDYxCisjZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9NSUNGQUlMX1RJTUVPVVQJCTB4NjIKKyNkZWZpbmUgU01FTVNHX0NPVU5URVJNRUFTVVJFX0JMT0NLX1RJTUVPVVQJMHg2MworLy8gZnJvbSBST0FNSU5HCisjZGVmaW5lIFNNRU1TR19IQU5ET1ZFUl9KT0lOX1JFUQkJMHg3MQorI2RlZmluZSBTTUVNU0dfRU5EX1JPQU1JTkcJCQkJMHg3MgorI2RlZmluZSBTTUVNU0dfU0NBTl9KT0lOX1JFUQkJCTB4NzMKKy8vIGZyb20gSVNSCisjZGVmaW5lIFNNRU1TR19UU0ZfU1lOQ19JTkQJCQkJMHg4MQorLy8gZnJvbSBUaW1lT3V0CisjZGVmaW5lIFNNRU1TR19USU1FT1VUCQkJCQkweDkxCisKKworCisjZGVmaW5lIE1BWF9QTUtJRF9BY2N1bnQgICAgICAgICAgICAgICAgMTYKKy8vQGFkZGVkIGJ5IHdzIDA0LzIyLzA1CisjZGVmaW5lIENpcGhlcl9EaXNhYmxlZCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDaXBoZXJfV2VwICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ2lwaGVyX1RraXAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENpcGhlcl9DY21wICAgICAgICAgICAgICAgICAgICAgNAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9Db25zdGFudHMKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMKKworI2RlZmluZSBOVU1PRldFUEVOVFJJRVMgICAgIDY0CisKK3R5cGVkZWYgZW51bSBfV0VQS2V5TW9kZQoreworICAgIFdFUEtFWV9ESVNBQkxFRCA9IDAsCisgICAgV0VQS0VZXzY0ICAgICAgID0gMSwKKyAgICBXRVBLRVlfMTI4ICAgICAgPSAyCisKK30gV0VQS0VZTU9ERSwgKnBXRVBLRVlNT0RFOworCisjaWZkZWYgX1dQQTJfCisKK3R5cGVkZWYgc3RydWN0IF9CU1NJbmZvCit7CisgIHU4ICAgICAgICBQcmVBdXRoQnNzSURbNl07CisgIFBNS0lEICAgICAgICBwbWtpZF92YWx1ZTsKK31CU1NJRF9JbmZvOworCit0eXBlZGVmIHN0cnVjdCBfUE1LSURfVGFibGUgLy9hZGRlZCBieSB3cyAwNS8wNS8wNAoreworICAgdTMyICBMZW5ndGg7CisgICB1MzIgIEJTU0lESW5mb0NvdW50OworICAgQlNTSURfSW5mbyBCU1NJREluZm9bMTZdOworCit9IFBNS0lEX1RhYmxlOworCisjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworCisjZGVmaW5lIE1BWF9CQVNJQ19SQVRFX1NFVCAgICAgICAgICAxNQorI2RlZmluZSBNQVhfT1BUX1JBVEVfU0VUICAgICAgICAgICAgTUFYX0JBU0lDX1JBVEVfU0VUCisKKwordHlwZWRlZiBzdHJ1Y3QgX1NNRV9QQVJBTUVURVJTCit7CisgICAgdTE2CQkJCXdTdGF0ZTsKKwl1OAkJCQlib0RVVG1vZGU7CisJdTgJCQkJYkRlc2lyZWRQb3dlclNhdmU7CisKKwkvLyBTTUUgdGltZXIgYW5kIHRpbWVvdXQgdmFsdWUKKwkvL05ESVNfTUlOSVBPUlRfVElNRVIJblRpbWVyOworCU9TX1RJTUVSCQkJblRpbWVyOworCisJdTgJCQkJYm9JblRpbWVySGFuZGxlcjsKKwl1OCAJCQkJYm9BdXRoUmV0cnlBY3RpdmU7CisJdTgJCQkJcmVzZXJ2ZWRfMFsyXTsKKworCXUzMgkJCQlBdXRoZW5SZXRyeVRpbWVyVmFsOwkvLyBOT1RFOiBBc3NvYyBkb24ndCBmYWlsIHRpbWVvdXQKKwl1MzIJCQkJSm9pbkZhaWxUaW1lclZhbDsJCS8vIDEwKkJlYWNvbi1JbnRlcnZhbAorCisJLy9SYXRlcworCXU4CQkJCUJTU0Jhc2ljUmF0ZVNldFsoTUFYX0JBU0lDX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAgICAvLyBCU1MgYmFzaWMgcmF0ZSBzZXQKKwl1OAkJCQlPcGVyYXRpb25hbFJhdGVTZXRbKE1BWF9PUFRfUkFURV9TRVQgKyAzKSAmIH4weDAzIF07IC8vIE9wZXJhdGlvbmFsIHJhdGUgc2V0CisKKwl1OAkJCQlOdW1PZkJTU0Jhc2ljUmF0ZTsKKwl1OAkJCQlOdW1PZk9wZXJhdGlvbmFsUmF0ZTsKKwl1OAkJCQlyZXNlcnZlZF8xWzJdOworCisJdTMyCQkJCUJhc2ljUmF0ZUJpdG1hcDsKKwl1MzIJCQkJT3BSYXRlQml0bWFwOworCisJLy8gU3lzdGVtIHBhcmFtZXRlcnMgU2V0IGJ5IEdVSQorCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhcnQgSUJTUyBwYXJhbWV0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KKwl1MzIJCQkJYm9TdGFydElCU1M7CQkJLy9TdGFydCBJQlNTIHRvZ2dsZQorCisJdTE2CQkJCXdCZWFjb25QZXJpb2Q7CisJdTE2CQkJCXdBVElNX1dpbmRvdzsKKworCUNoYW5JbmZvCQkJSWJzc0NoYW47IC8vIDJCCS8vY2hhbm5lbCBzZXR0aW5nIHdoZW4gc3RhcnQgSUJTUworCXU4CQkJCXJlc2VydmVkXzJbMl07CisKKyAgICAvLyBKb2luIHJlbGF0ZWQKKwl1MTYJCQkJd0Rlc2lyZWRKb2luQlNTOwkJLy8gQlNTIGluZGV4IHdoaWNoIGRlc2lyZSB0byBqb2luCisJdTgJCQkJYm9Kb2luUmVxOwkJCQkvL0pvaW4gcmVxdWVzdCB0b2dnbGUKKwl1OAkJCQliRGVzaXJlZEJTU1R5cGU7CQkvL2ZvciBKb2luIHJlcXVlc3QKKworICAgIHUxNgkJCQl3Q2FwYWJpbGl0eUluZm87ICAgICAgICAvLyBVc2VkIHdoZW4gaW52b2tpbmcgdGhlIE1MTUVfQXNzb2NpYXRlX3JlcXVlc3QoKS4KKwl1MTYJCQkJd05vbkVSUGNhcGFiaWxpdHlJbmZvOworCisgICAgc3RydWN0IFNTSURfRWxlbWVudCBzRGVzaXJlZFNTSUQ7IC8vIDM0IEIKKwl1OAkJCQlyZXNlcnZlZF8zWzJdOworCisJdTggICAgCQkJYWJEZXNpcmVkQlNTSURbTUFDX0FERFJfTEVOR1RIICsgMl07CisKKwl1OAkJCQliSm9pblNjYW5Db3VudDsJCQkvLyB0aGUgdGltZSBvZiBzY2FuLWpvaW4gYWN0aW9uIG5lZWQgdG8gZG8KKwl1OAkJCQliRGVzaXJlZEF1dGhNb2RlOyAgICAgICAvLyBBVVRIX09QRU5fU1lTVEVNIG9yIEFVVEhfU0hBUkVEX0tFWQorCXU4CQkJCXJlc2VydmVkXzRbMl07CisKKyAgICAvLyBFbmNyeXB0aW9uIHBhcmFtZXRlcnMKKwl1OCAgICAgCQkJX2RvdDExUHJpdmFjeUludm9rZWQ7CisgICAgdTggICAgICAgICAgICAgCV9kb3QxMVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZDsKKwl1OAkJCQlyZXNlcnZlZF81WzJdOworCisgICAgLy9AIHdzIGFkZGVkCisgICAgdTgJCQkJRGVzaXJlZEVuY3J5cHQ7CisJdTgJCQkJZW5jcnlwdF9zdGF0dXM7CS8vRU5DUllQVF9ESVNBQkxFLCBFTkNSWVBUX1dFUCwgRU5DUllQVF9XRVBfTk9LRVksIEVOQ1JZUFRfVEtJUCwgLi4uCisJdTgJCQkJa2V5X2xlbmd0aDsKKwl1OAkJCQlwYWlyd2lzZV9rZXlfb2s7CisKKwl1OAkJCQlncm91cF9rZXlfb2s7CisgICAgdTgJCQkJd3BhX29rOyAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGUgY29udHJvbCBwb3J0IG9mIDgwMi4xeCBpcyBvcGVuIG9yIGNsb3NlCisJdTgJCQkJcGFpcndpc2Vfa2V5X3R5cGU7CisJdTgJCQkJZ3JvdXBfa2V5X3R5cGU7CisKKyAgICB1MzIgICAgICAgICAgICAgICBfZG90MTFXRVBEZWZhdWx0S2V5SUQ7CisKKwl1OCAgICAgICAgICAgICAgCXR4X21pY19rZXlbOF07ICAgICAgLy8gVE9ETzogMDYyNyBrZXZpbi1US0lQCisJdTggICAgICAgICAgICAgIAlyeF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAorCXU4CQkJCWdyb3VwX3R4X21pY19rZXlbOF07CisJdTgJCQkJZ3JvdXBfcnhfbWljX2tleVs4XTsKKworLy8JI2lmZGVmIF9XUEFfCisJdTgJCQkJQXNzb2NSZXFWYXJJRVsyMDBdOworCXU4CQkJCUFzc29jUmVzcFZhcklFWzIwMF07CisKKwl1MTYJCQkJQXNzb2NSZXFWYXJMZW47CisJdTE2CQkJCUFzc29jUmVzcFZhckxlbjsKKwl1OAkJCQlib1JlYXNzb2M7CQkJCS8vdXNlIGFzc29jLiBvciByZWFzc29jLgorCXU4CQkJCXJlc2VydmVkXzZbM107CisJdTE2CQkJCUFzc29jUmVzcENhcGFiaWxpdHk7CisJdTE2CQkJCUFzc29jUmVzcFN0YXR1czsKKy8vCSNlbmRpZgorCisJI2lmZGVmIF9XUEEyXworICAgIHU4ICAgICAgICAgICAgICAgUG1rSWRUYWJsZVsyNTZdOworICAgIHUzMiAgICAgICAgICAgICAgIFBta2lkVGFibGVJbmRleDsKKwkjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworCit9IFNNRV9QQVJBTUVURVJTLCAqUFNNRV9QQVJBTUVURVJTOworCisjZGVmaW5lIHBzU01FCQkJKCYoQWRhcHRlci0+c1NtZVBhcmEpKQorCisjZGVmaW5lIHdTTUVHZXRDdXJyZW50U1RBU3RhdGUoQWRhcHRlcikJCSgodTE2KShBZGFwdGVyKS0+c1NtZVBhcmEud1N0YXRlKQorCisKKworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JU21lTW9kdWxlLmgKKy8vCQlEZWZpbmUgdGhlIHJlbGF0ZWQgZGVmaW5pdGlvbnMgb2YgU01FIG1vZHVsZQorLy8JaGlzdG9yeSAtLSAwMS8xNC8wMycgY3JlYXRlZAorLy8KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy9EZWZpbmUgdGhlIHN0YXRlIG9mIFNNRSBtb2R1bGUKKyNkZWZpbmUgRElTQUJMRUQJCQkJCQkwCisjZGVmaW5lIElOSVRfU0NBTgkJCQkJCTEKKyNkZWZpbmUgU0NBTl9SRUFEWQkJCQkJCTIKKyNkZWZpbmUgU1RBUlRfSUJTUwkJCQkJCTMKKyNkZWZpbmUgSk9JTl9QRU5ESU5HCQkJCQk0CisjZGVmaW5lIEpPSU5fQ0ZNCQkJCQkJNQorI2RlZmluZSBBVVRIRU5USUNBVEVfUEVORElORwkJCTYKKyNkZWZpbmUgQVVUSEVOVElDQVRFRAkJCQkJNworI2RlZmluZSBDT05ORUNURUQJCQkJCQk4CisvLyNkZWZpbmUgRUFQX1NUQVJUSU5HCQkJCQk5CisvLyNkZWZpbmUgRUFQT0xfQVVUSEVOX1BFTkRJTkcJCQkxMAorLy8jZGVmaW5lIFNFQ1VSRV9DT05ORUNURUQJCQkJMTEKKworCisvLyBTdGF0aWMgZnVuY3Rpb24KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzM2JjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIE9ubHkgZGVmaW5lIG9uZSBvZiBmb2xsb3cKKy8vCisKKyNpZmRlZiBXQl9XSU4KKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAxLDAwLDQ3LDAwCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjEuMDAuNDcuMDAiCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMTAwCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCisjZW5kaWYKKworI2lmZGVmIFdCX0NFCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMiwwMCw0NywwMAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIyLjAwLjQ3LjAwIgorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDIwMAorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAorI2VuZGlmCisKKyNpZmRlZiBXQl9MSU5VWAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDMsMDAsNDcsMDAKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMy4wMC40Ny4wMCIKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAzMDAKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKKyNlbmRpZgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNDQyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKQEAgLTAsMCArMSw4NzggQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIGN1cnJlbnRfYWRkcmVzcyApCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBjdXJyZW50X2FkZHJlc3MsIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKK30KKwordm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIGN1cnJlbnRfYWRkcmVzcyApCit7CisJdTMyIGx0bXBbMl07CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBjdXJyZW50X2FkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyApOworCisJbHRtcFswXT0gY3B1X3RvX2xlMzIoICooUFVMT05HKXBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICk7CisJbHRtcFsxXT0gY3B1X3RvX2xlMzIoICooUFVMT05HKShwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcyArIDQpICkgJiAweGZmZmY7CisKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDNlOCwgbHRtcCwgMiwgQVVUT19JTkNSRU1FTlQgKTsKK30KKwordm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiBwZXRoZXJuZXRfYWRkcmVzcyApCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBwZXRoZXJuZXRfYWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgNiApOworfQorCit1OCBoYWxfaW5pdF9oYXJkd2FyZShwaHdfZGF0YV90IHBId0RhdGEsIFBXQjMyX0FEQVBURVIgQWRhcHRlcikKK3sKKwl1MTYgU29mdHdhcmVTZXQ7CisJcEh3RGF0YS0+QWRhcHRlciA9IEFkYXB0ZXI7CisKKwkvLyBJbml0aWFsIHRoZSB2YXJpYWJsZQorCXBId0RhdGEtPk1heFJlY2VpdmVMaWZlVGltZSA9IERFRkFVTFRfTVNEVV9MSUZFX1RJTUU7IC8vIFNldHRpbmcgUnggbWF4aW11bSBNU0RVIGxpZmUgdGltZQorCXBId0RhdGEtPkZyYWdtZW50VGhyZXNob2xkID0gREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQ7IC8vIFNldHRpbmcgZGVmYXVsdCBmcmFnbWVudCB0aHJlc2hvbGQKKworCWlmIChXYlVzYl9pbml0aWFsKHBId0RhdGEpKSB7CisJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDE7CisJCWlmKCBXYjM1UmVnX2luaXRpYWwocEh3RGF0YSkpIHsKKwkJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDI7CisJCQlpZiAoV2IzNVR4X2luaXRpYWwocEh3RGF0YSkpIHsKKwkJCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSAzOworCQkJCWlmIChXYjM1UnhfaW5pdGlhbChwSHdEYXRhKSkgeworCQkJCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSA0OworCQkJCQlPU19USU1FUl9JTklUSUFMKCAmcEh3RGF0YS0+TEVEVGltZXIsIGhhbF9sZWRfY29udHJvbCwgcEh3RGF0YSApOworCQkJCQlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgMTAwMCApOyAvLyAyMDA2MDYyMworCisJCQkJCS8vCisJCQkJCS8vIEZvciByZXN0cmljdCB0byB2ZW5kb3IncyBoYXJkd2FyZQorCQkJCQkvLworCQkJCQlTb2Z0d2FyZVNldCA9IGhhbF9zb2Z0d2FyZV9zZXQoIHBId0RhdGEgKTsKKworCQkJCQkjaWZkZWYgVmVuZG9yMgorCQkJCQkvLyBUcnkgdG8gbWFrZSBzdXJlIHRoZSBFRVBST00gY29udGFpbgorCQkJCQlTb2Z0d2FyZVNldCA+Pj0gODsKKwkJCQkJaWYoIFNvZnR3YXJlU2V0ICE9IDB4ODIgKQorCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkjZW5kaWYKKworCQkJCQlXYjM1Unhfc3RhcnQoIHBId0RhdGEgKTsKKwkJCQkJV2IzNVR4X0VQMlZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOworCXJldHVybiBGQUxTRTsKK30KKworCit2b2lkIGhhbF9oYWx0KHBod19kYXRhX3QgcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEpCit7CisJc3dpdGNoKCBwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgKQorCXsKKwkJY2FzZSA0OgorCQljYXNlIDM6IE9TX1RJTUVSX0NBTkNFTCggJnBId0RhdGEtPkxFRFRpbWVyLCAmY2FuY2VsICk7CisJCQlPU19TTEVFUCgxMDAwMDApOyAvLyBXYWl0IGZvciBUaW1lciBEUEMgZXhpdCA5NDA2MjMuMgorCQkJV2IzNVJ4X2Rlc3Ryb3koIHBId0RhdGEgKTsgLy8gUmVsZWFzZSB0aGUgUngKKwkJY2FzZSAyOiBXYjM1VHhfZGVzdHJveSggcEh3RGF0YSApOyAvLyBSZWxlYXNlIHRoZSBUeAorCQljYXNlIDE6IFdiMzVSZWdfZGVzdHJveSggcEh3RGF0YSApOyAvLyBSZWxlYXNlIHRoZSBXYjM1IFJlZ2lzc3RlciByZXNvdXJjZXMKKwkJCQlXYlVzYl9kZXN0cm95KCBwSHdEYXRhICk7Ly8gUmVsZWFzZSB0aGUgV2JVc2IKKwl9Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfcmF0ZXMocGh3X2RhdGFfdCBwSHdEYXRhLCBQVUNIQVIgcGJzc19yYXRlcywKKwkJICAgdTggbGVuZ3RoLCB1bnNpZ25lZCBjaGFyIGJhc2ljX3JhdGVfc2V0KQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCQl0bXAsIHRtcDE7CisJdTgJCVJhdGVbMTJdPXsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4IH07CisJdTgJCVN1cHBvcnRlZFJhdGVbMTZdOworCXU4CQlpLCBqLCBrLCBDb3VudDEsIENvdW50MiwgQnl0ZTsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCWlmIChiYXNpY19yYXRlX3NldCkgeworCQlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4MDAwZmZmMDA7CisJCXRtcDEgPSAweDAwMDAwMTAwOworCX0gZWxzZSB7CisJCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZmYwMDAwMDsKKwkJdG1wMSA9IDB4MDAxMDAwMDA7CisJfQorCisJdG1wID0gMDsKKwlmb3IgKGk9MDsgaTxsZW5ndGg7IGkrKykgeworCQlCeXRlID0gcGJzc19yYXRlc1tpXSAmIDB4N2Y7CisJCWZvciAoaj0wOyBqPDEyOyBqKyspIHsKKwkJCWlmKCBCeXRlID09IFJhdGVbal0gKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogPCAxMikKKwkJCXRtcCB8PSAodG1wMTw8aik7CisJfQorCisJcFdiMzVSZWctPk0yOF9NYWNDb250cm9sIHw9IHRtcDsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MjgsIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCApOworCisJLy8gOTMwMjA2LjIuYyBNNzggc2V0dGluZworCWogPSBrID0gQ291bnQxID0gQ291bnQyID0gMDsKKwltZW1zZXQoIFN1cHBvcnRlZFJhdGUsIDAsIDE2ICk7CisJdG1wID0gMHgwMDEwMDAwMDsKKwl0bXAxID0gMHgwMDAwMDEwMDsKKwlmb3IgKGk9MDsgaTwxMjsgaSsrKSB7IC8vIEdldCB0aGUgc3VwcG9ydGVkIHJhdGUKKwkJaWYgKHRtcCAmIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCkgeworCQkJU3VwcG9ydGVkUmF0ZVtqXSA9IFJhdGVbaV07CisKKwkJCWlmICh0bXAxICYgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sKQorCQkJCVN1cHBvcnRlZFJhdGVbal0gfD0gMHg4MDsKKworCQkJaWYgKGspCisJCQkJQ291bnQyKys7CisJCQllbHNlCisJCQkJQ291bnQxKys7CisKKwkJCWorKzsKKwkJfQorCisJCWlmIChpPT00ICYmIGs9PTApIHsKKwkJCWlmKCAhKHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmIDB4MDAwZmYwMDApICkgLy8gaWYgYmFzaWMgcmF0ZSBpbiAxMWcgZG9tYWluKQorCQkJeworCQkJCWsgPSAxOworCQkJCWogPSA4OworCQkJfQorCQl9CisKKwkJdG1wIDw8PSAxOworCQl0bXAxIDw8PSAxOworCX0KKworCS8vIEZpbGwgZGF0YSBpbnRvIHN1cHBvcnQgcmF0ZSB1bnRpbCBidWZmZXIgZnVsbAorCS8vLS0tMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJZm9yIChpPTA7IGk8NDsgaSsrKQorCQkqKFBVTE9ORykoU3VwcG9ydGVkUmF0ZSsoaTw8MikpID0gY3B1X3RvX2xlMzIoICooUFVMT05HKShTdXBwb3J0ZWRSYXRlKyhpPDwyKSkgKTsKKwkvLy0tLSBlbmQgMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLDB4MDg3YywgKFBVTE9ORylTdXBwb3J0ZWRSYXRlLCA0LCBBVVRPX0lOQ1JFTUVOVCApOworCXBXYjM1UmVnLT5NN0NfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzBdOworCXBXYjM1UmVnLT5NODBfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzFdOworCXBXYjM1UmVnLT5NODRfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzJdOworCXBXYjM1UmVnLT5NODhfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzNdOworCisJLy8gRmlsbCBsZW5ndGgKKwl0bXAgPSBDb3VudDE8PDI4IHwgQ291bnQyPDwyNDsKKwlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uICY9IH4weGZmMDAwMDAwOworCXBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gfD0gdG1wOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICkKK3sKKwl1MzIJdG1wOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKKwl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7CisJdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODQ4LCB0bXAgKTsKK30KKworCit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApCisJCXJldHVybjsKKworCXByaW50aygiR29pbmcgdG8gY2hhbm5lbDogJWQvJWRcbiIsIGNoYW5uZWwuYmFuZCwgY2hhbm5lbC5DaGFuTm8pOworCisJUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCBwSHdEYXRhLCBjaGFubmVsICk7Ly8gU3dpdGNoIGNoYW5uZWwKKwlwSHdEYXRhLT5DaGFubmVsID0gY2hhbm5lbC5DaGFuTm87CisJcEh3RGF0YS0+YmFuZCA9IGNoYW5uZWwuYmFuZDsKKwkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJV0JERUJVRygoIlNldCBjaGFubmVsIGlzICVkLCBiYW5kID0lZFxuIiwgcEh3RGF0YS0+Q2hhbm5lbCwgcEh3RGF0YS0+YmFuZCkpOworCSNlbmRpZgorCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZjsgLy8gQ2xlYW4gY2hhbm5lbCBpbmZvcm1hdGlvbiBmaWVsZAorCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCB8PSBjaGFubmVsLkNoYW5ObzsKKwlXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoIHBId0RhdGEsIDB4MDgyOCwgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sLAorCQkJCQkoUENIQVIpJmNoYW5uZWwsIHNpemVvZihDaGFuSW5mbykpOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKK3sKKwloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggcEh3RGF0YSwgY2hhbm5lbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX2dldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyAqY2hhbm5lbCApCit7CisJY2hhbm5lbC0+Q2hhbk5vID0gcEh3RGF0YS0+Q2hhbm5lbDsKKwljaGFubmVsLT5iYW5kID0gcEh3RGF0YS0+YmFuZDsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmPSB+MHgwMjAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCisJaWYgKGVuYWJsZSkKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDIwMDAwMDA7Ly9UaGUgSFcgdmFsdWUKKworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7Cit9CisKKy8vZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyB0byBiZSByZWNlaXZlZCB0ZW1wb3JhcnkuCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkgcmV0dXJuOworCWlmIChlbmFibGUpIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDA0MDAwMDA7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7CisJfSBlbHNlIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sJj1+MHgwMDQwMDAwMDsKKwkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKKwl9Cit9CisKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYgKGVuYWJsZSkgIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKK30KKwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvLyAyMDA0MDEwOCBkZWJ1ZworCWlmKCAhZW5hYmxlICkvL0R1ZSB0byBTTUUgYW5kIE1MTUUgYXJlIG5vdCBzdWl0YWJsZSBmb3IgMzUKKwkJcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYoIGVuYWJsZSApCisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9tdWx0aWNhc3RfYWRkcmVzcyggcGh3X2RhdGFfdCBwSHdEYXRhLCBQVUNIQVIgYWRkcmVzcywgdTggbnVtYmVyICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXU4CQlCeXRlLCBCaXQ7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvL0VyYXNlcyBhbmQgcmVmaWxscyB0aGUgY2FyZCBtdWx0aWNhc3QgcmVnaXN0ZXJzLiBVc2VkIHdoZW4gYW4gYWRkcmVzcworCS8vICAgIGhhcyBiZWVuIGRlbGV0ZWQgYW5kIGFsbCBiaXRzIG11c3QgYmUgcmVjb21wdXRlZC4KKwlwV2IzNVJlZy0+TTA0X011bHRpY2FzdEFkZHJlc3MxID0gMDsKKwlwV2IzNVJlZy0+TTA4X011bHRpY2FzdEFkZHJlc3MyID0gMDsKKworCXdoaWxlKCBudW1iZXIgKQorCXsKKwkJbnVtYmVyLS07CisJCUNhcmRHZXRNdWx0aWNhc3RCaXQoIChhZGRyZXNzKyhudW1iZXIqRVRIX0xFTkdUSF9PRl9BRERSRVNTKSksICZCeXRlLCAmQml0KTsKKwkJcFdiMzVSZWctPk11bHRpY2FzdFtCeXRlXSB8PSBCaXQ7CisJfQorCisJLy8gVXBkYXRpbmcgcmVnaXN0ZXIKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDgwNCwgKFBVTE9ORylwV2IzNVJlZy0+TXVsdGljYXN0LCAyLCBBVVRPX0lOQ1JFTUVOVCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3U4IGhhbF9nZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAwOworCisJaWYoIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmIDB4MDQwMDAwMDAgKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCit1bnNpZ25lZCBjaGFyIGhhbF9yZXNldF9oYXJkd2FyZSggcGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkKiBwcGEgKQoreworCS8vIE5vdCBpbXBsZW1lbnQgeWV0CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlwSHdEYXRhLT5XYjM1UngucnhfaGFsdCA9IDE7CisJV2IzNVJ4X3N0b3AoIHBId0RhdGEgKTsKKworCXBId0RhdGEtPldiMzVUeC50eF9oYWx0ID0gMTsKKwlXYjM1VHhfc3RvcCggcEh3RGF0YSApOworCisJcFdiMzVSZWctPkQwMF9EbWFDb250cm9sICY9IH4weGMwMDAwMDAwOy8vVHggT2ZmLCBSeCBPZmYKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA0MDAsIHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCApOworCisJV2JVc2JfU3RvcCggcEh3RGF0YSApOyAvLyAyMDA1MTIzMCBBZGQuNAorfQorCit1bnNpZ25lZCBjaGFyIGhhbF9pZGxlKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBXQlVTQglwV2JVc2IgPSAmcEh3RGF0YS0+V2JVc2I7CisKKwlpZiggIXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICYmICggcFdiVXNiLT5EZXRlY3RDb3VudCB8fCBwV2IzNVJlZy0+RVAwdm1fc3RhdGUhPVZNX1NUT1AgKSApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9jd21pbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4CWN3aW5fbWluICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcEh3RGF0YS0+Y3dtaW4gPSBjd2luX21pbjsKKwlwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgJj0gfjB4N2MwMDsJLy9iaXQgMTAgfiAxNAorCXBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCB8PSAocEh3RGF0YS0+Y3dtaW48PDEwKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MmMsIHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCApOworfQorCitzMzIgaGFsX2dldF9yc3NpKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICpIYWxSc3NpQXJyeSwgIHU4IENvdW50ICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVIwMV9ERVNDUklQVE9SCXIwMTsKKwlzMzIgbHRtcCA9IDAsIHRtcDsKKwl1OAlpOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuIC0yMDA7CisJaWYoIENvdW50ID4gTUFYX0FDQ19SU1NJX0NPVU5UICkgLy8gQmVjYXVzZSB0aGUgVFMgbWF5IHVzZSB0aGlzIGZ1bnRpb24KKwkJQ291bnQgPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisKKwkvLyBSU1NJID0gQzEgKyBDMiAqIChhZ2Nfc3RhdGVbNzowXSArIG9mZnNldF9tYXAobG5hX3N0YXRlWzE6MF0pKQorCS8vIEMxID0gLTE5NSwgQzIgPSAwLjY2ID0gODUvMTI4CisJZm9yIChpPTA7IGk8Q291bnQ7IGkrKykKKwl7CisJCXIwMS52YWx1ZSA9IEhhbFJzc2lBcnJ5W2ldOworCQl0bXAgPSAoKCggcjAxLlIwMV9BR0Nfc3RhdGUgKyBwV2IzNVJlZy0+TE5BVmFsdWVbcjAxLlIwMV9MTkFfc3RhdGVdKSAqIDg1ICkgPj43ICkgLSAxOTU7CisJCWx0bXAgKz0gdG1wOworCX0KKwlsdG1wIC89IENvdW50OworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfMjIzMCApIGx0bXAgLT0gNTsgLy8gMTA7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwUyApIGx0bXAgLT0gNTsgLy8gMTA7IDIwMDYwNDIwIEFkZCB0aGlzCisKKwkvL2lmKCBsdG1wIDwgLTIwMCApIGx0bXAgPSAtMjAwOworCWlmKCBsdG1wIDwgLTExMCApIGx0bXAgPSAtMTEwOy8vIDEuMC4yNC4wIEZvciBOSlJDCisKKwlyZXR1cm4gbHRtcDsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorczMyIGhhbF9nZXRfcnNzaV9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgaWR4LCAgdTggQ291bnQgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUjAxX0RFU0NSSVBUT1IJcjAxOworCXMzMiBsdG1wID0gMCwgdG1wOworCXU4CWksIGo7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisvLwl1MzIgKkhhbFJzc2lBcnJ5ID0gcHNCU1MoaWR4KS0+SGFsUnNzaTsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAtMjAwOworCWlmKCBDb3VudCA+IE1BWF9BQ0NfUlNTSV9DT1VOVCApIC8vIEJlY2F1c2UgdGhlIFRTIG1heSB1c2UgdGhpcyBmdW50aW9uCisJCUNvdW50ID0gTUFYX0FDQ19SU1NJX0NPVU5UOworCisJLy8gUlNTSSA9IEMxICsgQzIgKiAoYWdjX3N0YXRlWzc6MF0gKyBvZmZzZXRfbWFwKGxuYV9zdGF0ZVsxOjBdKSkKKwkvLyBDMSA9IC0xOTUsIEMyID0gMC42NiA9IDg1LzEyOAorI2lmIDAKKwlmb3IgKGk9MDsgaTxDb3VudDsgaSsrKQorCXsKKwkJcjAxLnZhbHVlID0gSGFsUnNzaUFycnlbaV07CisJCXRtcCA9ICgoKCByMDEuUjAxX0FHQ19zdGF0ZSArIHBXYjM1UmVnLT5MTkFWYWx1ZVtyMDEuUjAxX0xOQV9zdGF0ZV0pICogODUgKSA+PjcgKSAtIDE5NTsKKwkJbHRtcCArPSB0bXA7CisJfQorI2Vsc2UKKwlpZiAocHNCU1MoaWR4KS0+SGFsUnNzaUluZGV4ID09IDApCisJCXBzQlNTKGlkeCktPkhhbFJzc2lJbmRleCA9IE1BWF9BQ0NfUlNTSV9DT1VOVDsKKwlqID0gKHU4KXBzQlNTKGlkeCktPkhhbFJzc2lJbmRleC0xOworCisJZm9yIChpPTA7IGk8Q291bnQ7IGkrKykKKwl7CisJCXIwMS52YWx1ZSA9IHBzQlNTKGlkeCktPkhhbFJzc2lbal07CisJCXRtcCA9ICgoKCByMDEuUjAxX0FHQ19zdGF0ZSArIHBXYjM1UmVnLT5MTkFWYWx1ZVtyMDEuUjAxX0xOQV9zdGF0ZV0pICogODUgKSA+PjcgKSAtIDE5NTsKKwkJbHRtcCArPSB0bXA7CisJCWlmIChqID09IDApCisJCXsKKwkJCWogPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisJCX0KKwkJai0tOworCX0KKyNlbmRpZgorCWx0bXAgLz0gQ291bnQ7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwICkgbHRtcCAtPSA1OyAvLyAxMDsKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfQUlST0hBXzIyMzBTICkgbHRtcCAtPSA1OyAvLyAxMDsgMjAwNjA0MjAgQWRkIHRoaXMKKworCS8vaWYoIGx0bXAgPCAtMjAwICkgbHRtcCA9IC0yMDA7CisJaWYoIGx0bXAgPCAtMTEwICkgbHRtcCA9IC0xMTA7Ly8gMS4wLjI0LjAgRm9yIE5KUkMKKworCXJldHVybiBsdG1wOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfbGVkX2NvbnRyb2xfMWEoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCWhhbF9sZWRfY29udHJvbCggTlVMTCwgcEh3RGF0YSwgTlVMTCwgTlVMTCApOworfQorCit2b2lkIGhhbF9sZWRfY29udHJvbCggIHZvaWQqIFMxLCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdm9pZCogUzMsICB2b2lkKiBTNCApCit7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJTEVEU2V0ID0gKHBId0RhdGEtPlNvZnR3YXJlU2V0ICYgSEFMX0xFRF9TRVRfTUFTSykgPj4gSEFMX0xFRF9TRVRfU0hJRlQ7CisJdTgJTEVEZ3JheVsyMF0gPSB7IDAsMyw0LDYsOCwxMCwxMSwxMiwxMywxNCwxNSwxNCwxMywxMiwxMSwxMCw4LDYsNCwyIH07CisJdTgJTEVEZ3JheTJbMzBdID0geyA3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE1LDE0LDEzLDEyLDExLDEwLDksOCB9OworCXUzMglUaW1lSW50ZXJ2YWwgPSA1MDAsIGx0bXAsIGx0bXAyOworICAgICAgICBsdG1wPTA7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlpZiggcEh3RGF0YS0+TEVEX2NvbnRyb2wgKSB7CisJCWx0bXAyID0gcEh3RGF0YS0+TEVEX2NvbnRyb2wgJiAweGZmOworCQlpZiggbHRtcDIgPT0gNSApIC8vIDUgaXMgV1BTIG1vZGUKKwkJeworCQkJVGltZUludGVydmFsID0gMTAwOworCQkJbHRtcDIgPSAocEh3RGF0YS0+TEVEX2NvbnRyb2w+PjgpICYgMHhmZjsKKwkJCXN3aXRjaCggbHRtcDIgKQorCQkJeworCQkJCWNhc2UgMTogLy8gWzAuMiBPbl1bMC4xIE9mZl0uLi4KKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICU9IDM7CisJCQkJCWx0bXAgPSAweDEwMTA7IC8vIExlZCAxICYgMCBHcmVlbiBhbmQgUmVkCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPT0gMiApIC8vIFR1cm4gb2ZmCisJCQkJCQlsdG1wID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOiAvLyBbMC4xIE9uXVswLjEgT2ZmXS4uLgorCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgJT0gMjsKKwkJCQkJbHRtcCA9IDB4MDAxMDsgLy8gTGVkIDAgcmVkIGNvbG9yCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgKSAvLyBUdXJuIG9mZgorCQkJCQkJbHRtcCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzogLy8gWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjEgT25dWzAuMSBPZmZdWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjUgT2ZmXS4uLgorCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgJT0gMTU7CisJCQkJCWx0bXAgPSAweDAwMTA7IC8vIExlZCAwIHJlZCBjb2xvcgorCQkJCQlpZiggKHBId0RhdGEtPkxFRF9CbGlua2luZyA+PSA5KSB8fCAocEh3RGF0YS0+TEVEX0JsaW5raW5nJTIpICkgLy8gVHVybiBvZmYgMC42IHNlYworCQkJCQkJbHRtcCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNDogLy8gWzMwMCBPbl1bIG9mZiBdCisJCQkJCWx0bXAgPSAweDEwMDA7IC8vIExlZCAxIEdyZWVuIGNvbG9yCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPj0gMzAwMCApCisJCQkJCQlsdG1wID0gMDsgLy8gbGVkIG1heWJlIG9uIGFmdGVyIDMwMHNlYyAqIDMyYml0IGNvdW50ZXIgb3ZlcmxhcC4KKwkJCQkJYnJlYWs7CisJCQl9CisJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcrKzsKKworCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlID0gbHRtcDsKKwkJCWlmKCBMRURTZXQgIT0gNyApIC8vIE9ubHkgMTExIG1vZGUgaGFzIDIgTEVEcyBvbiBQQ0IuCisJCQl7CisJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IChsdG1wICYweGZmKTw8ODsgLy8gQ29weSBMRUQgcmVzdWx0IHRvIGVhY2ggTEVEIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gKGx0bXAgJjB4ZmYwMCk+Pjg7CisJCQl9CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQl9CisJfQorCWVsc2UgaWYoIHBId0RhdGEtPkN1cnJlbnRSYWRpb1N3IHx8IHBId0RhdGEtPkN1cnJlbnRSYWRpb0h3ICkgLy8gSWYgcmFkaW8gb2ZmCisJeworCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMDEwICkKKwkJeworCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwMTA7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQl9CisJfQorCWVsc2UKKwl7CisJCXN3aXRjaCggTEVEU2V0ICkKKwkJeworCQkJY2FzZSA0OiAvLyBbMTAwXSBPbmx5IDEgTGVkIGJlIHBsYWNlZCBvbiBQQ0IgYW5kIHVzZSBwaW4gMjEgb2YgSUMuIFVzZSBMRURfMCBmb3Igc2hvd2luZworCQkJCWlmKCAhcEh3RGF0YS0+TEVEX0xpbmtPbiApIC8vIEJsaW5rIG9ubHkgaWYgbm90IExpbmsgT24KKwkJCQl7CisJCQkJCS8vIEJsaW5raW5nIGlmIHNjYW5uaW5nIGlzIG9uIHByb2dyZXNzCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfU2Nhbm5pbmcgKQorCQkJCQl7CisJCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9uCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy9UdXJuIE9mZiBMRURfMAorCQkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBUdXJuIE9uIExFRF8wCisJCQkJCWlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCkgPT0gMCApCisJCQkJCXsKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNjogLy8gWzExMF0gT25seSAxIExlZCBiZSBwbGFjZWQgb24gUENCIGFuZCB1c2UgcGluIDIxIG9mIElDLiBVc2UgTEVEXzAgZm9yIHNob3dpbmcKKwkJCQlpZiggIXBId0RhdGEtPkxFRF9MaW5rT24gKSAvLyBCbGluayBvbmx5IGlmIG5vdCBMaW5rIE9uCisJCQkJeworCQkJCQkvLyBCbGlua2luZyBpZiBzY2FubmluZyBpcyBvbiBwcm9ncmVzcworCQkJCQlpZiggcEh3RGF0YS0+TEVEX1NjYW5uaW5nICkKKwkJCQkJeworCQkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA9PSAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4ZjsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPbgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDE7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxZjsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIDIwMDYwOTAxIEdyYXkgYmxpbmtpbmcgaWYgaW4gZGlzY29ubmVjdCBzdGF0ZSBhbmQgbm90IHNjYW5uaW5nCisJCQkJCQlsdG1wID0gcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlOworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDFmOworCQkJCQkJaWYoIExFRGdyYXkyWyhwSHdEYXRhLT5MRURfQmxpbmtpbmclMzApXSApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IExFRGdyYXkyWyAocEh3RGF0YS0+TEVEX0JsaW5raW5nJTMwKSBdOworCQkJCQkJfQorCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nKys7CisJCQkJCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICE9IGx0bXAgKQorCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJVGltZUludGVydmFsID0gMTAwOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIFR1cm4gT24gTEVEXzAKKwkJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwKSA9PSAwICkKKwkJCQkJeworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSA1OiAvLyBbMTAxXSBPbmx5IDEgTGVkIGJlIHBsYWNlZCBvbiBQQ0IgYW5kIHVzZSBMRURfMSBmb3Igc2hvd2luZworCQkJCWlmKCAhcEh3RGF0YS0+TEVEX0xpbmtPbiApIC8vIEJsaW5rIG9ubHkgaWYgbm90IExpbmsgT24KKwkJCQl7CisJCQkJCS8vIEJsaW5raW5nIGlmIHNjYW5uaW5nIGlzIG9uIHByb2dyZXNzCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfU2Nhbm5pbmcgKQorCQkJCQl7CisJCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwMDA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT24KKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAxOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPZmYKKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vVHVybiBPZmYgTEVEXzEKKwkJCQkJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwMDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDAwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9mZgorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIElzIHRyYW5zbWl0dGluZy9yZWNlaXZpbmcgPz8KKwkJCQkJaWYoIChPU19DVVJSRU5UX1JYX0JZVEUoIEFkYXB0ZXIgKSAhPSBwSHdEYXRhLT5SeEJ5dGVDb3VudExhc3QgKSB8fAorCQkJCQkJKE9TX0NVUlJFTlRfVFhfQllURSggQWRhcHRlciApICE9IHBId0RhdGEtPlR4Qnl0ZUNvdW50TGFzdCApICkKKwkJCQkJeworCQkJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MzAwMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MzAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPbgorCQkJCQkJfQorCisJCQkJCQkvLyBVcGRhdGUgdmFyaWFibGUKKwkJCQkJCXBId0RhdGEtPlJ4Qnl0ZUNvdW50TGFzdCA9IE9TX0NVUlJFTlRfUlhfQllURSggQWRhcHRlciApOworCQkJCQkJcEh3RGF0YS0+VHhCeXRlQ291bnRMYXN0ID0gT1NfQ1VSUkVOVF9UWF9CWVRFKCBBZGFwdGVyICk7CisJCQkJCQlUaW1lSW50ZXJ2YWwgPSAyMDA7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyBUdXJuIE9uIExFRF8xIGFuZCBibGlua2luZyBpZiB0cmFuc21pdHRpbmcvcmVjZWl2aW5nCisJCQkJCQkgaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MTAwMCApCisJCQkJCQkgeworCQkJCQkJCSBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MzAwMDsKKwkJCQkJCQkgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTAwMDsKKwkJCQkJCQkgV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT24KKwkJCQkJCSB9CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6IC8vIERlZmF1bHQgc2V0dGluZy4gMiBMRUQgYmUgcGxhY2VkIG9uIFBDQi4gTEVEXzA6IExpbmsgT24gTEVEXzEgQWN0aXZlCisJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MzAwMCApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgzMDAwOy8vIExFRF8xIGlzIGFsd2F5cyBvbiBhbmQgZXZlbnQgZW5hYmxlCisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCQkJfQorCisJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyApCisJCQkJeworCQkJCQkvLyBHcmF5IGJsaW5raW5nCisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgwZjsKKwkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSBMRURncmF5WyAocEh3RGF0YS0+TEVEX0JsaW5raW5nLTEpJTIwIF07CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisKKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICs9IDI7CisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPCA0MCApCisJCQkJCQlUaW1lSW50ZXJ2YWwgPSAxMDA7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMDsgLy8gU3RvcCBibGlua2luZworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDBmOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiggcEh3RGF0YS0+TEVEX0xpbmtPbiApCisJCQkJeworCQkJCQlpZiggIShwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwKSApIC8vIENoZWNrIHRoZSBMRURfMAorCQkJCQl7CisJCQkJCQkvL1RyeSB0byB0dXJuIE9OIExFRF8wIGFmdGVyIGdyYXkgYmxpbmtpbmcKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsgLy9TdGFydCBibGlua2luZworCQkJCQkJVGltZUludGVydmFsID0gNTA7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAgKSAvLyBDaGVjayB0aGUgTEVEXzAKKwkJCQkJeworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCS8vMjAwNjA4MjguMSBBY3RpdmUgc2VuZCBudWxsIHBhY2tldCB0byBhdm9pZCBBUCBkaXNjb25uZWN0CisJCWlmKCBwSHdEYXRhLT5MRURfTGlua09uICkKKwkJeworCQkJcEh3RGF0YS0+TnVsbFBhY2tldENvdW50ICs9IFRpbWVJbnRlcnZhbDsKKwkJCWlmKCBwSHdEYXRhLT5OdWxsUGFja2V0Q291bnQgPj0gREVGQVVMVF9OVUxMX1BBQ0tFVF9DT1VOVCApCisJCQl7CisJCQkJcEh3RGF0YS0+TnVsbFBhY2tldENvdW50ID0gMDsKKwkJCX0KKwkJfQorCX0KKworCXBId0RhdGEtPnRpbWVfY291bnQgKz0gVGltZUludGVydmFsOworCVdiMzVUeF9DdXJyZW50VGltZSggcEh3RGF0YSwgcEh3RGF0YS0+dGltZV9jb3VudCApOyAvLyAyMDA2MDkyOCBhZGQKKwlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgVGltZUludGVydmFsICk7IC8vIDIwMDYwNjIzLjEKK30KKworCit2b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQaHlUeXBlICkKK3sKKwlwSHdEYXRhLT5waHlfdHlwZSA9IFBoeVR5cGU7Cit9CisKK3ZvaWQgaGFsX2dldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpQaHlUeXBlICkKK3sKKwkqUGh5VHlwZSA9IHBId0RhdGEtPnBoeV90eXBlOworfQorCit2b2lkIGhhbF9yZXNldF9jb3VudGVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlwSHdEYXRhLT5kdG9fdHhfcmV0cnlfY291bnQgPSAwOworCXBId0RhdGEtPmR0b190eF9mcmFnX2NvdW50ID0gMDsKKwltZW1zZXQoIHBId0RhdGEtPnR4X3JldHJ5X2NvdW50LCAwLCA4KTsKK30KKwordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgcmFkaW9fb2ZmKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlpZiAocmFkaW9fb2ZmKQkvL2Rpc2FibGUgQmFzZWJhbmQgcmVjZWl2ZSBvZmYKKwl7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb1N3ID0gMTsgLy8gb2ZmCisJCXBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCAmPSAweGZmZmZmZmJmOworCX0KKwllbHNlCisJeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9TdyA9IDA7IC8vIG9uCisJCXBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCB8PSAweDAwMDAwMDQwOworCX0KKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MjQsIHBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCApOworfQorCit1OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKChwV2IzNVJlZy0+QkIyQyAmIEJJVCgxMSkpID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3ZvaWQgaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICkKK3sKKworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiAobnVtYmVyID09IDEpIHsKKwkJcFdiMzVSZWctPkJCMkMgfD0gQklUKDExKTsKKwl9IGVsc2UgeworCQlwV2IzNVJlZy0+QkIyQyAmPSB+QklUKDExKTsKKwl9CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDJjLCBwV2IzNVJlZy0+QkIyQyApOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCVdCREVCVUcoKCJDdXJyZW50IGFudGVubmEgbnVtYmVyIDogJWRcbiIsIG51bWJlcikpOworI2VuZGlmCit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8wIDogcmFkaW8gb247IDE6IHJhZGlvIG9mZgordTggaGFsX2dldF9od19yYWRpb19vZmYoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm4gMTsKKworCS8vcmVhZCB0aGUgYml0MTYgb2YgcmVnaXN0ZXIgVTFCMAorCVdiMzVSZWdfUmVhZCggcEh3RGF0YSwgMHgzYjAsICZwV2IzNVJlZy0+VTFCMCApOworCWlmICgocFdiMzVSZWctPlUxQjAgJiAweDAwMDEwMDAwKSkgeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9IdyA9IDE7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb0h3ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorfQorCit1bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICBQVUxPTkcgcFZhbHVlICkKK3sKKwlpZiggbnVtYmVyIDwgMHgxMDAwICkKKwkJbnVtYmVyICs9IDB4MTAwMDsKKwlyZXR1cm4gV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgbnVtYmVyLCBwVmFsdWUgKTsKK30KKwordW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICkKK3sKKwl1bnNpZ25lZCBjaGFyCXJldDsKKworCWlmKCBudW1iZXIgPCAweDEwMDAgKQorCQludW1iZXIgKz0gMHgxMDAwOworCXJldCA9IFdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCBudW1iZXIsIHZhbHVlICk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBoYWxfc2Nhbl9zdGF0dXNfaW5kaWNhdGUocGh3X2RhdGFfdCBwSHdEYXRhLCB1bnNpZ25lZCBjaGFyIElzT25Qcm9ncmVzcykKK3sKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisJcEh3RGF0YS0+TEVEX1NjYW5uaW5nID0gSXNPblByb2dyZXNzID8gMSA6IDA7Cit9CisKK3ZvaWQgaGFsX3N5c3RlbV9wb3dlcl9jaGFuZ2UocGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgUG93ZXJTdGF0ZSkKK3sKKwlpZiggUG93ZXJTdGF0ZSAhPSAwICkKKwl7CisJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKKwkJaWYoIHBId0RhdGEtPldiVXNiLklzVXNiMjAgKQorCQkJaGFsX3N0b3AoIHBId0RhdGEgKTsKKwl9CisJZWxzZQorCXsKKwkJaWYoICFwSHdEYXRhLT5XYlVzYi5Jc1VzYjIwICkKKwkJCWhhbF9zdG9wKCBwSHdEYXRhICk7CisJfQorfQorCit2b2lkIGhhbF9zdXJwcmlzZV9yZW1vdmUoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBBREFQVEVSIEFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCWlmIChPU19BVE9NSUNfSU5DKCBBZGFwdGVyLCAmcEh3RGF0YS0+U3VycHJpc2VSZW1vdmVDb3VudCApID09IDEpIHsKKwkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQlXQkRFQlVHKCgiQ2FsbGluZyBoYWxfc3VycHJpc2VfcmVtb3ZlXG4iKSk7CisJCSNlbmRpZgorCQlPU19TVE9QKCBBZGFwdGVyICk7CisJfQorfQorCit2b2lkIGhhbF9yYXRlX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSApIC8vIE5vdGlmeSB0aGUgSEFMIHJhdGUgaXMgY2hhbmdpbmcgMjAwNjA2MTMuMQoreworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCXU4CQlyYXRlID0gQ1VSUkVOVF9UWF9SQVRFOworCisJQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCBwSHdEYXRhLCByYXRlICk7Cit9CisKK3ZvaWQgaGFsX3NldF9yZl9wb3dlcihwaHdfZGF0YV90IHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCit7CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBQb3dlckluZGV4ICk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9MRUQocGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgTW9kZSkgLy8gMjAwNjExMDggZm9yIFdQUyBsZWQgY29udHJvbAoreworCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJcEh3RGF0YS0+TEVEX2NvbnRyb2wgPSBNb2RlOworCU9TX1RJTUVSX1NFVCggJnBId0RhdGEtPkxFRFRpbWVyLCAxMCApOyAvLyAyMDA2MDYyMworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNWY5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX2YuaApAQCAtMCwwICsxLDEyMiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIERldmljZSByZWxhdGVkIGluY2x1ZGUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZkZWYgV0JfTElOVVgKKwkjaW5jbHVkZSAibGludXgvd2J1c2JfZi5oIgorCSNpbmNsdWRlICJsaW51eC93YjM1cmVnX2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXR4X2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXJ4X2YuaCIKKyNlbHNlCisJI2luY2x1ZGUgIndidXNiX2YuaCIKKwkjaW5jbHVkZSAid2IzNXJlZ19mLmgiCisJI2luY2x1ZGUgIndiMzV0eF9mLmgiCisJI2luY2x1ZGUgIndiMzVyeF9mLmgiCisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBoYWxfcmVtb3ZlX21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBtYWNfYWRkciApOwordm9pZCBoYWxfcmVtb3ZlX2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4ICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IEFkYXB0ZXIsICBQVUNIQVIgcG1hY19hZGRyLCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICBQVUNIQVIgcHR4X3RzYywgIFBVQ0hBUiBwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgUFVDSEFSIHBrZXlfZGF0YSApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBBZGFwdGVyLCAgdTggaW5kZXgsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIFBVQ0hBUiBwdHhfdHNjLCAgUFVDSEFSIHByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICBQVUNIQVIgcGtleV9kYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9ncm91cF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgY3VycmVudF9hZGRyZXNzICk7Cit2b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBjdXJyZW50X2FkZHJlc3MgKTsKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBwZXRoZXJuZXRfYWRkcmVzcyApOwordW5zaWduZWQgY2hhciBoYWxfaW5pdF9oYXJkd2FyZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgaGFsX3NldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHBvd2VyX3NhdmUsICB1bnNpZ25lZCBjaGFyIHdha2V1cCwgIHVuc2lnbmVkIGNoYXIgZHRpbSApOwordm9pZCBoYWxfZ2V0X3Bvd2VyX3NhdmVfbW9kZSggIHBod19kYXRhX3QgcEh3RGF0YSwgICBQQk9PTEVBTiBwaW5fcHdyX3NhdmUgKTsKK3ZvaWQgaGFsX3NldF9zbG90X3RpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCB0eXBlICk7CisjZGVmaW5lIGhhbF9zZXRfYXRpbV93aW5kb3coIF9BLCBfQVRNICkKK3ZvaWQgaGFsX3NldF9yYXRlcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBwYnNzX3JhdGVzLCAgdTggbGVuZ3RoLCAgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCApOworI2RlZmluZSBoYWxfc2V0X2Jhc2ljX3JhdGVzKCBfQSwgX1IsIF9MICkgaGFsX3NldF9yYXRlcyggX0EsIF9SLCBfTCwgVFJVRSApCisjZGVmaW5lIGhhbF9zZXRfb3BfcmF0ZXMoIF9BLCBfUiwgX0wgKSBoYWxfc2V0X3JhdGVzKCBfQSwgX1IsIF9MLCBGQUxTRSApCit2b2lkIGhhbF9zdGFydF9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBtYWNfb3BfbW9kZSApOwordm9pZCBoYWxfam9pbl9yZXF1ZXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggYnNzX3R5cGUgKTsgLy8gMDpCU1MgU1RBIDE6SUJTUyBTVEEvLwordm9pZCBoYWxfc3RvcF9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfcmVzdW1lX3N5bmNfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhKTsKK3ZvaWQgaGFsX3NldF9haWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYWlkICk7Cit2b2lkIGhhbF9zZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGJzc2lkICk7Cit2b2lkIGhhbF9nZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGJzc2lkICk7Cit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICk7Cit2b2lkIGhhbF9zZXRfbGlzdGVuX2ludGVydmFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGxpc3Rlbl9pbnRlcnZhbCApOwordm9pZCBoYWxfc2V0X2NhcF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGNhcGFiaWxpdHlfaW5mbyApOwordm9pZCBoYWxfc2V0X3NzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcHNzaWQsICB1OCBzc2lkX2xlbiApOwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICk7Cit2b2lkIGhhbF9nZXRfY3VycmVudF9jaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gKmNoYW5uZWwgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9tdWx0aWNhc3RfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBhZGRyZXNzLCAgdTggbnVtYmVyICk7Cit1OCBoYWxfZ2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2hhbHQoICBwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhICk7Cit2b2lkIGhhbF9zdGFydF90eDAoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKTsKK3ZvaWQgaGFsX2dldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpQaHlUeXBlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9yZXNldF9oYXJkd2FyZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHZvaWQqIHBwYSApOwordm9pZCBoYWxfc2V0X2N3bWluKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTgJY3dpbl9taW4gKTsKKyNkZWZpbmUgaGFsX2dldF9jd21pbiggX0EgKSAoIChfQSktPmN3bWluICkKK3ZvaWQgaGFsX3NldF9jd21heCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBjd2luX21heCApOworI2RlZmluZSBoYWxfZ2V0X2N3bWF4KCBfQSApICggKF9BKS0+Y3dtYXggKQordm9pZCBoYWxfc2V0X3Jzbl93cGEoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgKiBSU05fSUVfQml0bWFwICwgdTMyICogUlNOX09VSV90eXBlICwgdW5zaWduZWQgY2hhciBiRGVzaXJlZEF1dGhNb2RlKTsKKy8vczMyIGhhbF9nZXRfcnNzaSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBIYWxSc3NpICk7CitzMzIgaGFsX2dldF9yc3NpKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICpIYWxSc3NpQXJyeSwgIHU4IENvdW50ICk7CitzMzIgaGFsX2dldF9yc3NpX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBpZHgsICB1OCBDb3VudCApOwordm9pZCBoYWxfc2V0X2Nvbm5lY3RfaW5mbyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgYm9Db25uZWN0ICk7Cit1OCBoYWxfZ2V0X2VzdF9zcTMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBDb3VudCApOwordm9pZCBoYWxfbGVkX2NvbnRyb2xfMWEoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2xlZF9jb250cm9sKCAgdm9pZCogUzEsICBwaHdfZGF0YV90IHBId0RhdGEsICB2b2lkKiBTMywgIHZvaWQqIFM0ICk7Cit2b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQordm9pZCBoYWxfcmVzZXRfY291bnRlciggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwordm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICk7Cit1MzIgaGFsX2dldF9ic3NfcGtfY250KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisjZGVmaW5lIGhhbF9nZXRfcmVnaW9uX2Zyb21fRUVQUk9NKCBfQSApICggKF9BKS0+V2IzNVJlZy5FRVBST01SZWdpb24gKQordm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cwkJKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlKTsKKyNkZWZpbmUgaGFsX2dldF90eF9idWZmZXIoIF9BLCBfQiApIFdiMzVUeF9nZXRfdHhfYnVmZmVyKCBfQSwgX0IgKQordTggaGFsX2dldF9od19yYWRpb19vZmYJCQkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKyNkZWZpbmUgaGFsX3NvZnR3YXJlX3NldCggX0EgKQkJKF9BLT5Tb2Z0d2FyZVNldCkKKyNkZWZpbmUgaGFsX2RyaXZlcl9pbml0X09LKCBfQSApCShfQS0+SXNJbml0T0spCisjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2hpZ2goIF9BICkgKF9BLT5SU1NJX2hpZ2gpCisjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2xvdyggX0EgKSAoX0EtPlJTU0lfbG93KQorI2RlZmluZSBoYWxfc2Nhbl9pbnRlcnZhbCggX0EgKQkJKF9BLT5TY2FuX0ludGVydmFsKQordm9pZCBoYWxfc2Nhbl9zdGF0dXNfaW5kaWNhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IHN0YXR1cyk7CS8vIDA6IGNvbXBsZXRlLCAxOiBpbiBwcm9ncmVzcwordm9pZCBoYWxfc3lzdGVtX3Bvd2VyX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIFBvd2VyU3RhdGUgKTsgLy8gMjAwNTEyMzAgLT1EMCAxPUQxIC4uCit2b2lkIGhhbF9zdXJwcmlzZV9yZW1vdmUoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKworI2RlZmluZSBQSFlfREVCVUcoIG1zZywgYXJncy4uLiApCisKKworCit2b2lkIGhhbF9yYXRlX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSApOyAvLyBOb3RpZnkgdGhlIEhBTCByYXRlIGlzIGNoYW5naW5nIDIwMDYwNjEzLjEKK3Vuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIFBVTE9ORyBwVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApOworI2RlZmluZSBoYWxfZ2V0X3RpbWVfY291bnQoIF9QICkJKF9QLT50aW1lX2NvdW50LzEwKQkvLyByZXR1cm4gMTAwbXMgY291bnQKKyNkZWZpbmUgaGFsX2RldGVjdF9lcnJvciggX1AgKQkJKF9QLT5XYlVzYi5EZXRlY3RDb3VudCkKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9MRUQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgTW9kZSApOyAvLyAyMDA2MTEwOCBmb3IgV1BTIGxlZCBjb250cm9sCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIGZvbGxvdyBmdW5jdGlvbiBpcyB1bnVzZWQgZm9yIElTODlDMzUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBoYWxfZGlzYWJsZV9pbnRlcnJ1cHQoX0EpCisjZGVmaW5lIGhhbF9lbmFibGVfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfZ2V0X2ludGVycnVwdF90eXBlKCBfQSkKKyNkZWZpbmUgaGFsX2dldF9jbGVhcl9pbnRlcnJ1cHQoX0EpCisjZGVmaW5lIGhhbF9pYnNzX2Rpc2Nvbm5lY3QoX0EpIGhhbF9zdG9wX3N5bmNfYnNzKF9BKQorI2RlZmluZSBoYWxfam9pbl9yZXF1ZXN0X3N0b3AoX0EpCit1bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisjZGVmaW5lIHBhX3N0YWxsX2V4ZWN1dGlvbiggX0EgKQkvL09TX1NMRUVQKCAxICkKKyNkZWZpbmUgaHdfZ2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQorI2RlZmluZSBod19zZXRfY3h4X3JlZyggX0EsIF9CLCBfQyApCisjZGVmaW5lIGh3X2dldF9keHhfcmVnKCBfQSwgX0IsIF9DICkJaGFsX2dldF9keHhfcmVnKCBfQSwgX0IsIChQVUxPTkcpX0MgKQorI2RlZmluZSBod19zZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9zZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyKV9DICkKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4NjJmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaApAQCAtMCwwICsxLDYxNSBAQAorLy9bMjAwNDA3MjIgV0tdCisjZGVmaW5lIEhBTF9MRURfU0VUX01BU0sJCTB4MDAxYwkvLzIwMDYwOTAxIEV4dGVuZAorI2RlZmluZSBIQUxfTEVEX1NFVF9TSElGVAkJMgorCisvL3N1cHBvcnRlZCBSRiB0eXBlCisjZGVmaW5lIFJGX01BWElNXzI4MjUJCTAKKyNkZWZpbmUgUkZfTUFYSU1fMjgyNwkJMQorI2RlZmluZSBSRl9NQVhJTV8yODI4CQkyCisjZGVmaW5lIFJGX01BWElNXzI4MjkJCTMKKyNkZWZpbmUgUkZfTUFYSU1fVjEJCQkxNQorI2RlZmluZSBSRl9BSVJPSEFfMjIzMAkJMTYKKyNkZWZpbmUgUkZfQUlST0hBXzcyMzAJCTE3CisjZGVmaW5lIFJGX0FJUk9IQV8yMjMwUwkJMTgJLy8gMjAwNjA0MjAgQWRkIHRoaXMKKy8vICNkZWZpbmUgUkZfUkZNRF8yOTU5CQkzMgkvLyAyMDA2MDYyNiBSZW1vdmUgYWxsIGFib3V0IFJGTUQKKyNkZWZpbmUgUkZfV0JfMjQyCQkJMzMKKyNkZWZpbmUgUkZfV0JfMjQyXzEJCQkzNAkvLyAyMDA2MDYxOS41IEFkZAorI2RlZmluZSBSRl9ERUNJREVfQllfSU5GCTI1NQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3cgZGVmaW5lIGNvbm5lY3QgdG8gdXBwZXIgbGF5ZXIKKy8vCVVzZXIgbXVzdCBtb2RpZnkgZm9yIGNvbm5lY3Rpb24gYmV0d2VlbiBIQUwgYW5kIHVwcGVyIGxheWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tb24gZGVmaW5lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBIQUxfVVNCX01PREVfQlVSU1QoIF9IICkJKF9ILT5Tb2Z0d2FyZVNldCAmIDB4MjAgKSAvLyBCaXQgNSAyMDA2MDkwMSBNb2RpZnkKKworLy8gU2NhbiBpbnRlcnZhbAorI2RlZmluZSBTQ0FOX01BWF9DSE5MX1RJTUUJCQkJKDUwKQorCisvLyBGb3IgVHhMMiBGcmFtZSB0eXByIHJlY29nbmlzZQorI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8zX0RBVEEJCQkwCisjZGVmaW5lIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQJCTEKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UgIDIKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfQ09OVFJPTAkJMworI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8xMV9EQVRBCQkJNAorI2RlZmluZSBGUkFNRV9UWVBFX1BST01JU0NVT1VTCQkJNQorCisvLyBUaGUgZm9sbG93IGRlZmluaXRpb24gaXMgdXNlZCBmb3IgY29udmVydCB0aGUgZnJhbWUtLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8zX1RZUEVfT0ZGU0VUCQkJMTIKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAgLy9UaGUgc3RhcnQgb2Zmc2V0IG9mIDgwMi4xMSBGcmFtZS4gVHlwZSBlbmNhcHN1bGF0dWluLgorI2RlZmluZSBERUZBVUxUX1NJRlNUSU1FCQkJMTAKKyNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQJCTIzNDYgLy8gTm8gZnJhZ21lbnQKKyNkZWZpbmUgREVGQVVMVF9NU0RVX0xJRkVfVElNRQkJCTB4ZmZmZgorCisjZGVmaW5lIExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUJCQkJCQkoMTQ0KzQ4KQorI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSAJCQkJCSg3MisyNCkKKyNkZWZpbmUgUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04JCQkJKDE2KzQrNikKKyNkZWZpbmUgVHN5bSA0CisKKy8vICBGcmFtZSBUeXBlIG9mIEJpdHMgKDIsIDMpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BQ19UWVBFX01BTkFHRU1FTlQJCQkweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wJCQkweDA0CisjZGVmaW5lIE1BQ19UWVBFX0RBVEEJCQkJMHgwOAorI2RlZmluZSBNQVNLX0ZSQUdNRU5UX05VTUJFUgkJMHgwMDBGCisjZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkJNAorCisjZGVmaW5lICBIQUxfV09MX1RZUEVfV0FLRVVQX0ZSQU1FCQkweDAxCisjZGVmaW5lICBIQUxfV09MX1RZUEVfTUFHSUNfUEFDS0VUCQkweDAyCisKKy8vIDIwMDQwMTA2IEFEREVECisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDQwICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDEwNCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBTF9LRVlUWVBFX1RLSVAgICAgICAgICAgICAgICAgICAgICAgICAyIC8vIDEyOCBiaXQga2V5CisjZGVmaW5lIEhBTF9LRVlUWVBFX0FFU19DQ01QICAgICAgICAgICAgICAgICAgICAzIC8vIDEyOCBiaXQga2V5CisKKy8vIEZvciBWTSBzdGF0ZQorZW51bSB7CisJVk1fU1RPUCA9IDAsCisJVk1fUlVOTklORywKKwlWTV9DT01QTEVURUQKK307CisKKy8vIEJlIHVzZWQgZm9yIDgwMi4xMSBtYWMgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfTUFDX0ZSQU1FX0NPTlRST0wgeworCXU4CW1hY19mcmFtZV9pbmZvOyAvLyB0aGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHByb3RvdmwgdmVyc2lvbiwgdHlwZSBhbmQgc3VidHlwZQorCXU4CXRvX2RzOjE7CisJdTgJZnJvbV9kczoxOworCXU4CW1vcmVfZnJhZzoxOworCXU4CXJldHJ5OjE7CisJdTgJcHdyX21ndDoxOworCXU4CW1vcmVfZGF0YToxOworCXU4CVdFUDoxOworCXU4CW9yZGVyOjE7Cit9IE1BQ19GUkFNRV9DT05UUk9MLCAqUE1BQ19GUkFNRV9DT05UUk9MOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOb3JtYWwgS2V5IHRhYmxlIGZvcm1hdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIG9yZGVyIG9mIEtFWSBpbmRleCBpcyBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWCA+IEdST1VQX0tFWV9TVEFSVF9JTkRFWAorI2RlZmluZSBNQVhfS0VZX1RBQkxFCQkJCTI0CS8vIDI0IGVudHJ5IGZvciBzdG9yaW5nIGtleSBkYXRhCisjZGVmaW5lIEdST1VQX0tFWV9TVEFSVF9JTkRFWAkJNAorI2RlZmluZSBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWAkJOAordHlwZWRlZiBzdHJ1Y3QgX0tFWV9UQUJMRQoreworCXUzMglEVzBfVmFsaWQ6MTsKKwl1MzIJRFcwX051bGxLZXk6MTsKKwl1MzIJRFcwX1NlY3VyaXR5X01vZGU6MjsvLzA6V0VQIDQwIGJpdCAxOldFUCAxMDQgYml0IDI6VEtJUCAxMjggYml0IDM6Q0NNUCAxMjggYml0CisJdTMyCURXMF9XRVBPTjoxOworCXUzMglEVzBfUkVTRVJWRUQ6MTE7CisJdTMyCURXMF9BZGRyZXNzMToxNjsKKworCXUzMglEVzFfQWRkcmVzczI7CisKKwl1MzIJRFcyX1J4U2VxdWVuY2VDb3VudDE7CisKKwl1MzIJRFczX1J4U2VxdWVuY2VDb3VudDI6MTY7CisJdTMyCURXM19SRVNFUlZFRDoxNjsKKworCXUzMglEVzRfVHhTZXF1ZW5jZUNvdW50MTsKKworCXUzMglEVzVfVHhTZXF1ZW5jZUNvdW50MjoxNjsKKwl1MzIJRFc1X1JFU0VSVkVEOjE2OworCit9IEtFWV9UQUJMRSwgKlBLRVlfVEFCTEU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIAkJCSBEZXNjcmlwdG9yCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWAk4CS8vIEhhdmUgdG8gbXVsdGlwbGUgb2YgMgorLy8jZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCWNwdV90b19sZTMyKDB4MDAwMDAwYmYpIC8vMjAwNjEwMDkgbWFya2VkIGJ5IGFuc29uJ3MgZW5kaWFuCisjZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCTB4MDAwMDAwYmYgIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKy8vI2RlZmluZSBGTEFHX0VSUk9SX1JYX01BU0sJCQkweDAwMDAwYzNmCisvLyNkZWZpbmUgRkxBR19FUlJPUl9SWF9NQVNLCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDgzZikJLy8yMDA2MTAwOSBtYXJrZWQgYnkgYW5zb24ncyBlbmRpYW4KKwkJCQkJCQkJCS8vRG9uJ3QgY2FyZSByZXBsYXkgZXJyb3IsCisJCQkJCQkJCQkJCQkvL2l0IGlzIGhhbmRsZWQgYnkgUy9XCisjZGVmaW5lIEZMQUdfRVJST1JfUlhfTUFTSwkJCTB4MDAwMDA4M2YJLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCisjZGVmaW5lIEZMQUdfQkFORF9SWF9NQVNLCQkJMHgxMDAwMDAwMAkvL0JpdCAyOAorCit0eXBlZGVmIHN0cnVjdCBfUjAwX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAwX3BhY2tldF9vcl9idWZmZXJfc3RhdHVzOjE7CisJCQl1MzIJUjAwX3BhY2tldF9pbl9maWZvOjE7CisJCQl1MzIJUjAwX1JFU0VSVkVEOjI7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfcmVjZWl2ZV90aW1lX2luZGV4OjE2OworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVIwMF9yZWNlaXZlX3RpbWVfaW5kZXg6MTY7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfUkVTRVJWRUQ6MjsKKwkJCXUzMglSMDBfcGFja2V0X2luX2ZpZm86MTsKKwkJCXUzMglSMDBfcGFja2V0X29yX2J1ZmZlcl9zdGF0dXM6MTsKKwkJfTsKKwkJI2VuZGlmCisJfTsKK30gUjAwX0RFU0NSSVBUT1IsICpQUjAwX0RFU0NSSVBUT1I7CisKK3R5cGVkZWYgc3RydWN0IF9UMDBfREVTQ1JJUFRPUgoreworCXVuaW9uCisJeworCQl1MzIJdmFsdWU7CisJCSNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX2xhc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX0lzTGFzdE1wZHU6MTsvLyAwOiBub3QgICAxOlllcyBmb3Igc29mdHdhcmUgdXNlZAorCQkJdTMyCVQwMF9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX3R4X3BhY2tldF9pZDo0Oy8vOTMwNTE5LjQuZSA5MzA4MTAuMy5jCisJCQl1MzIJVDAwX1JFU0VSVkVEOjQ7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfZnJhbWVfbGVuZ3RoOjEyOworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMF9mcmFtZV9sZW5ndGg6MTI7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfUkVTRVJWRUQ6NDsKKwkJCXUzMglUMDBfdHhfcGFja2V0X2lkOjQ7Ly85MzA1MTkuNC5lIDkzMDgxMC4zLmMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX0lnbm9yZVJlc3VsdDoxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nLiAwNTAxMTEgTW9kaWZ5IGZvciBUUworCQkJdTMyCVQwMF9Jc0xhc3RNcGR1OjE7Ly8gMDogbm90ICAgMTpZZXMgZm9yIHNvZnR3YXJlIHVzZWQKKwkJCXUzMglUMDBfbGFzdF9tcGR1OjE7IC8vIGZvciBoYXJkd2FyZSB1c2UKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMF9ERVNDUklQVE9SLCAqUFQwMF9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfUjAxX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAxX1JFU0VSVkVEOjM7CisJCQl1MzIJUjAxX21vZF90eXBlOjE7CisJCQl1MzIJUjAxX3ByZV90eXBlOjE7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9BR0Nfc3RhdGU6ODsKKwkJCXUzMglSMDFfTE5BX3N0YXRlOjI7CisJCQl1MzIJUjAxX2RlY3J5cHRpb25fbWV0aG9kOjI7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9yZXBsYXk6MTsKKwkJCXUzMglSMDFfYnJvYWRjYXN0X2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9kaXJlY3RlZF9mcmFtZToxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2ZyYW1lX3JlY2VpdmVfZHVyaW5nX2F0aW1fd2luZG93OjE7CisJCQl1MzIJUjAxX3Byb3RvY29sX3ZlcnNpb25fZXJyb3I6MTsKKwkJCXUzMglSMDFfYXV0aGVudGljYXRpb25fZnJhbWVfaWN2X2Vycm9yOjE7CisJCQl1MzIJUjAxX251bGxfa2V5X3RvX2F1dGhlbnRpY2F0aW9uX2ZyYW1lOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9jcmNfZXJyb3I6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglSMDFfY3JjX2Vycm9yOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9udWxsX2tleV90b19hdXRoZW50aWNhdGlvbl9mcmFtZToxOworCQkJdTMyCVIwMV9hdXRoZW50aWNhdGlvbl9mcmFtZV9pY3ZfZXJyb3I6MTsKKwkJCXUzMglSMDFfcHJvdG9jb2xfdmVyc2lvbl9lcnJvcjoxOworCQkJdTMyCVIwMV9mcmFtZV9yZWNlaXZlX2R1cmluZ19hdGltX3dpbmRvdzoxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2RpcmVjdGVkX2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9icm9hZGNhc3RfZnJhbWU6MTsKKwkJCXUzMglSMDFfcmVwbGF5OjE7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9kZWNyeXB0aW9uX21ldGhvZDoyOworCQkJdTMyCVIwMV9MTkFfc3RhdGU6MjsKKwkJCXUzMglSMDFfQUdDX3N0YXRlOjg7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9wcmVfdHlwZToxOworCQkJdTMyCVIwMV9tb2RfdHlwZToxOworCQkJdTMyCVIwMV9SRVNFUlZFRDozOworCQl9OworCQkjZW5kaWYKKwl9OworfSBSMDFfREVTQ1JJUFRPUiwgKlBSMDFfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1QwMV9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX2FkZF9ydHM6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfcGxjcF9oZWFkZXJfbGVuZ3RoOjE7CisJCQl1MzIJVDAxX3RyYW5zbWl0X3JhdGU6MzsKKwkJCXUzMglUMDFfd2VwX2lkOjI7CisJCQl1MzIJVDAxX2FkZF9jaGFsbGVuZ2VfdGV4dDoxOworCQkJdTMyCVQwMV9pbmhpYml0X2NyYzoxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfcmV0cnlfYWJvcnRfZWJhYmxlOjE7CisJCX07CisJCSNlbHNlCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3JldHJ5X2Fib3J0X2ViYWJsZToxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfaW5oaWJpdF9jcmM6MTsKKwkJCXUzMglUMDFfYWRkX2NoYWxsZW5nZV90ZXh0OjE7CisJCQl1MzIJVDAxX3dlcF9pZDoyOworCQkJdTMyCVQwMV90cmFuc21pdF9yYXRlOjM7CisJCQl1MzIJVDAxX3BsY3BfaGVhZGVyX2xlbmd0aDoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9hZGRfcnRzOjE7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMV9ERVNDUklQVE9SLCAqUFQwMV9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfVDAyX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYxMDA5IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMl9Jc0xhc3RNcGR1OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfSWdub3JlUmVzdWx0OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcuIDA1MDExMSBNb2RpZnkgZm9yIFRTCisJCQl1MzIJVDAyX1JFU0VSVkVEX0lEOjI7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfUlRTX0NudDo0OworCQkJdTMyCVQwMl9SRVNFUlZFRDo3OworCQkJdTMyCVQwMl90cmFuc21pdF9jb21wbGV0ZToxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVDoxOworCQkJdTMyCVQwMl9lZmZlY3RpdmVfdHJhbnNtaXNzaW9uX3JhdGU6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZGlzY2FyZF9kdWVfdG9fbnVsbF93ZXBfa2V5OjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEXzE6MTsKKwkJCXUzMglUMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0OjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2ZhaWw6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDJfdHJhbnNtaXRfZmFpbDoxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydDoxOworCQkJdTMyCVQwMl9vdXRfb2ZfTWF4VHhNU0RVTGlmdFRpbWU6MTsKKwkJCXUzMglUMDJfUkVTRVJWRURfMToxOworCQkJdTMyCVQwMl9kaXNjYXJkX2R1ZV90b19udWxsX3dlcF9rZXk6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0X2R1ZV90b19UQlRUOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2NvbXBsZXRlOjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEOjc7CisJCQl1MzIJVDAyX1JUU19DbnQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfUkVTRVJWRURfSUQ6MjsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZworCQkJdTMyCVQwMl9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDJfSXNMYXN0TXBkdToxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMl9ERVNDUklQVE9SLCAqUFQwMl9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfREVTQ1JJUFRPUiB7CQkvLyBTa2lwIGxlbmd0aCA9IDggRFdPUkQKKwkvLyBJRCBmb3IgZGVzY3JpcHRvciAtLS0sIFRoZSBmaWVsZCBkb2Vzbid0IGJlIGNsZWFyZCBpbiB0aGUgb3BlcmF0aW9uIG9mIERlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CURlc2NyaXB0b3JfSUQ7CisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVGhlIGFib3ZlIHJlZ2lvbiBkb2Vzbid0IGJlIGNsZWFyZWQgYnkgREVTQ1JJUFRPUl9SRVNFVC0tLS0tLQorCXU4CVJFU0VSVkVEWzNdOworCisJdTE2CUZyYWdtZW50VGhyZXNob2xkOworCXU4CUludGVybmFsVXNlZDsvL09ubHkgY2FuIGJlIHVzZWQgYnkgb3BlcmF0aW9uIG9mIGRlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CVR5cGU7Ly8gMDogODAyLjMJMTo4MDIuMTEgZGF0YSBmcmFtZQkyOjgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lCisKKwl1OAlQcmVhbWJsZU1vZGU7Ly8gMDogc2hvcnQgMTpsb25nCisJdTgJVHhSYXRlOworCXU4CUZyYWdtZW50Q291bnQ7CisJdTgJRWFwRml4OyAvLyBGb3Igc3BlZWQgdXAga2V5IGluc3RhbGwKKworCS8vIEZvciBSMDAgYW5kIFQwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdW5pb24KKwl7CisJCVIwMF9ERVNDUklQVE9SCVIwMDsKKwkJVDAwX0RFU0NSSVBUT1IJVDAwOworCX07CisKKwkvLyBGb3IgUjAxIGFuZCBUMDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXVuaW9uCisJeworCQlSMDFfREVTQ1JJUFRPUglSMDE7CisJCVQwMV9ERVNDUklQVE9SCVQwMTsKKwl9OworCisJLy8gRm9yIFIwMiBhbmQgVDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl1bmlvbgorCXsKKwkJdTMyCQkJUjAyOworCQlUMDJfREVTQ1JJUFRPUglUMDI7CisJfTsKKworCS8vIEZvciBSMDMgYW5kIFQwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gRm9yIHNvZnR3YXJlIHVzZWQKKwl1bmlvbgorCXsKKwkJdTMyCVIwMzsKKwkJdTMyCVQwMzsKKwkJc3RydWN0CisJCXsKKwkJCXU4CWJ1ZmZlcl9udW1iZXI7CisJCQl1OAlidWZmZXJfc3RhcnRfaW5kZXg7CisJCQl1MTYJYnVmZmVyX3RvdGFsX3NpemU7CisJCX07CisJfTsKKworCS8vIEZvciBzdG9yaW5nIHRoZSBidWZmZXIKKwl1MTYJYnVmZmVyX3NpemVbIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWCBdOworCXZvaWQqCWJ1ZmZlcl9hZGRyZXNzWyBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVggXTsvLzkzMTEzMC40LnEKKworfSBERVNDUklQVE9SLCAqUERFU0NSSVBUT1I7CisKKworI2RlZmluZSBERUZBVUxUX05VTExfUEFDS0VUX0NPVU5UCQkxODAwMDAJLy8yMDA2MDgyOC4xIEFkZC4gMTgwIHNlY29uZHMKKworI2RlZmluZSBNQVhfVFhWR0FfRUVQUk9NCTkJLy9Ib3cgbWFueSB3b3JkKHUxNikgb2YgRUVQUk9NIHdpbGwgYmUgdXNlZCBmb3IgVHhWR0EKKyNkZWZpbmUgTUFYX1JGX1BBUkFNRVRFUgkzMgorCit0eXBlZGVmIHN0cnVjdCBfVFhWR0FfRk9SXzUwIHsKKwl1OAlDaGFuTm87CisJdTgJVHhWZ2FWYWx1ZTsKK30gVFhWR0FfRk9SXzUwOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZXZpY2UgcmVsYXRlZCBpbmNsdWRlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjaW5jbHVkZSAibGludXgvd2J1c2Jfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzVyZWdfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzV0eF9zLmgiCisjaW5jbHVkZSAibGludXgvd2IzNXJ4X3MuaCIKKworCisvLyBGb3IgSGFsIHVzaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX0hXX0RBVEFfVAoreworCS8vIEZvciBjb21wYXRpYmxlIHdpdGggMzMKKwl1MzIJcmV2aXNpb247CisJdTMyCUJCM2NfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFR4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisJdTMyCUJCNTRfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFJ4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisKKworCS8vIEZvciBzdXJwcmlzZSByZW1vdmUKKwl1MzIJU3VycHJpc2VSZW1vdmU7IC8vIDA6IE5vcm1hbCAxOiBTdXJwcmlzZSByZW1vdmUKKwl1OAlJbml0aWFsUmVzb3VyY2U7CisJdTgJSXNLZXlQcmVTZXQ7CisJdTgJQ2FsT25lVGltZTsgLy8gMjAwNjA2MzAuMQorCisJdTgJVkNPX3RyaW07CisKKwkvLyBGb3IgRml4IDEnc3QgRE1BIGJ1ZworCXUzMglGcmFnQ291bnQ7CisJdTMyCURNQUZpeDsgLy9WMV9ETUFfRklYIFRoZSB2YXJpYWJsZSBjYW4gYmUgcmVtb3ZlZCBpZiBkcml2ZXIgd2FudCB0byBzYXZlIG1lbSBzcGFjZSBmb3IgVjIuCisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEZvciBVU0IgZHJpdmVyLCBoYWwgbmVlZCBtb3JlIHZhcmlhYmxlcy4gRHVlIHRvCisJLy8JMS4gTkRJUy1XRE0gb3BlcmF0aW9uCisJLy8JMi4gVGhlIFNNRSwgTUxNRSBhbmQgT0xEIE1EUyBuZWVkIEFkYXB0ZXIgc3RydWN0dXJlLCBidXQgdGhlIGRyaXZlciB1bmRlciBIQUwgZG9lc24ndAorCS8vCQloYXZlIHRoYXQgcGFyYW1ldGVyIHdoZW4gcmVjZWl2aW5nIGFuZCBpbmRpY2F0aW5nIHBhY2tldC4KKwkvLwkJVGhlIE1EUyBtdXN0IGlucHV0IHRoZSBBZGFwdGVyIHBvaW50ZXIgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgaGFsX2luaXRfaGFyZHdhcmUuCisJLy8JCVRoZSBmdW5jdGlvbiB1c2FnZSBpcyBkaWZmZXJlbnQgdGhhbiBQQ0kgZHJpdmVyLgorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdm9pZCogQWRhcHRlcjsKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciBNQUMgYWRkcmVzcworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwl1OAkJUGVybWFuZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIGluIHVzZWQuICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciA4MDIuMTEKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVBVQ0hBUglic3NpZF9wb2ludGVyOyAvLyBVc2VkIGJ5IGhhbF9nZXRfYnNzaWQgZm9yIHJldHVybiB2YWx1ZQorCXU4CWJzc2lkWzhdOy8vIE9ubHkgNiBieXRlIHdpbGwgYmUgdXNlZC4gOCBieXRlIGlzIHJlcXVpcmVkIGZvciByZWFkIGJ1ZmZlcgorCXU4CXNzaWRbMzJdOy8vIG1heGltdW0gc3NpZCBsZW5ndGggaXMgMzIgYnl0ZQorCisJdTE2CUFJRDsKKwl1OAlzc2lkX2xlbmd0aDsKKwl1OAlDaGFubmVsOworCisJdTE2CUxpc3RlbkludGVydmFsOworCXUxNglDYXBhYmlsaXR5SW5mb3JtYXRpb247CisKKwl1MTYJQmVhY29uUGVyaW9kOworCXUxNglQcm9iZURlbGF5OworCisJdTgJYnNzX3R5cGU7Ly8gMDogSUJTU19ORVQgb3IgMTpFU1NfTkVUCisJdTgJcHJlYW1ibGU7Ly8gMDogc2hvcnQgcHJlYW1ibGUsIDE6IGxvbmcgcHJlYW1ibGUKKwl1OAlzbG90X3RpbWVfc2VsZWN0Oy8vIDkgb3IgMjAgdmFsdWUKKwl1OAlwaHlfdHlwZTsvLyBQaHkgc2VsZWN0CisKKwl1MzIJcGh5X3BhcmFbTUFYX1JGX1BBUkFNRVRFUl07CisJdTMyCXBoeV9udW1iZXI7CisKKwl1MzIJQ3VycmVudFJhZGlvU3c7IC8vIDIwMDYwMzIwLjIgMDpPbiAxOk9mZgorCXUzMglDdXJyZW50UmFkaW9IdzsgLy8gMjAwNjA4MjUgMDpPbiAxOk9mZgorCisJUFVDSEFSCXBvd2VyX3NhdmVfcG9pbnQ7ICAvLyBVc2VkIGJ5IGhhbF9nZXRfcG93ZXJfc2F2ZV9tb2RlIGZvciByZXR1cm4gdmFsdWUKKwl1OAljd21pbjsKKwl1OAlkZXNpcmVkX3Bvd2VyX3NhdmU7CisJdTgJZHRpbTsvLyBJcyBydW5uaW5nIGR0aW0KKwl1OAltYXBwaW5nX2tleV9yZXBsYWNlX2luZGV4Oy8vSW4gS2V5IHRhYmxlLCB0aGUgbmV4dCBpbmRleCBiZSByZXBsYWNlZCA5MzExMzAuNC5yCisKKwl1MTYJTWF4UmVjZWl2ZUxpZmVUaW1lOworCXUxNglGcmFnbWVudFRocmVzaG9sZDsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGRfdG1wOworCXUxNgljd21heDsKKworCXU4CUtleV9zbG90W01BWF9LRVlfVEFCTEVdWzhdOyAvL093bmVyc2hpcCByZWNvcmQgZm9yIGtleSBzbG90LiBGb3IgQWxpZ25tZW50CisJdTMyCUtleV9jb250ZW50W01BWF9LRVlfVEFCTEVdWzEyXTsgLy8gMTBEVyBmb3IgZWFjaCBlbnRyeSArIDIgZm9yIGJ1cnN0IGNvbW1hbmQoIE9mZiBhbmQgT24gdmFsaWQgYml0KQorCXU4CUN1cnJlbnREZWZhdWx0S2V5SW5kZXg7CisJdTMyCUN1cnJlbnREZWZhdWx0S2V5TGVuZ3RoOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBWYXJpYWJsZSBmb3IgZWFjaCBtb2R1bGUKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVdCVVNCCQlXYlVzYjsgLy8gTmVlZCBXYlVzYi5oCisJV0IzNVJFRwkJV2IzNVJlZzsgLy8gTmVlZCBXYjM1UmVnLmgKKwlXQjM1VFgJCVdiMzVUeDsgLy8gTmVlZCBXYjM1VHguaAorCVdCMzVSWAkJV2IzNVJ4OyAvLyBOZWVkIFdiMzVSeC5oCisKKwlPU19USU1FUglMRURUaW1lcjsvLyBGb3IgTEVECisKKwl1MzIJCUxFRHBvaW50Oy8vIEZvciBMRUQKKworICAgIHUzMiAgICAgICAgIGR0b190eF9yZXRyeV9jb3VudDsgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIGR0b190eF9mcmFnX2NvdW50OyAgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIHJ4X29rX2NvdW50WzEzXTsgICAgLy8gaW5kZXg9MDogdG90YWwgcnggb2sKKyAgICAvL3UzMiAgICAgICAgIHJ4X29rX2J5dGVzWzEzXTsgICAgLy8gaW5kZXg9MCwgdG90YWwgcnggb2sgYnl0ZXMKKyAgICB1MzIgICAgICAgICByeF9lcnJfY291bnRbMTNdOyAgIC8vIGluZGV4PTA6IHRvdGFsIHJ4IGVycgorCisJLy9mb3IgVHggZGVidWcKKwl1MzIJCQl0eF9UQlRUX3N0YXJ0X2NvdW50OworCXUzMgkJCXR4X0VUUl9jb3VudDsKKwl1MzIJCQl0eF9XZXBPbl9mYWxzZV9jb3VudDsKKwl1MzIJCQl0eF9OdWxsX2tleV9jb3VudDsKKwl1MzIJCQl0eF9yZXRyeV9jb3VudFs4XTsKKworCXU4CQlQb3dlckluZGV4RnJvbUVFUFJPTTsgLy8gRm9yIDI0MTJNSHoKKwl1OAkJcG93ZXJfaW5kZXg7CisJdTgJCUlzV2FpdEpvaW5Db21wbGV0ZTsJLy8gVFJVRTogc2V0IGpvaW4gcmVxdWVzdAorCXU4CQliYW5kOworCisJdTE2CQlTb2Z0d2FyZVNldDsKKwl1MTYJCVJlc2VydmVkX3M7CisKKwl1MzIJCUlzSW5pdE9LOyAvLyAwOiBEcml2ZXIgc3RhcnRpbmcgICAxOiBEcml2ZXIgaW5pdCBPSworCisJLy8gRm9yIFBoeSBjYWxpYnJhdGlvbgorICAgIHMzMgkJaXFfcnNkbF9nYWluX3R4X2QyOworICAgIHMzMgkJaXFfcnNkbF9waGFzZV90eF9kMjsKKwl1MzIJCXR4dmdhX3NldHRpbmdfZm9yX2NhbDsgLy8gMjAwNjA3MDMuMSBBZGQKKworCXU4CQlUeFZnYVNldHRpbmdJbkVFUFJPTVsgKCgoTUFYX1RYVkdBX0VFUFJPTSoyKSszKSAmIH4weDAzKSBdOyAvLyAyMDA2MDYyMSBGb3IgYmFja3VwIEVFUFJPTSB2YWx1ZQorCXU4CQlUeFZnYUZvcjI0WzE2XTsgLy8gTWF4IGlzIDE0LCAyIGZvciBhbGlnbm1lbnQKKwlUWFZHQV9GT1JfNTAJVHhWZ2FGb3I1MFszNl07CS8vIDM1IGNoYW5uZWxzIGluIDVHLiAzNXgyID0gNzAgYnl0ZS4gMiBmb3IgYWxpZ25tZW50cworCisJdTE2CQlTY2FuX0ludGVydmFsOworCXUxNgkJUkVTRVJWRUQ2OworCisJLy8gTEVEIGNvbnRyb2wKKwl1MzIJCUxFRF9jb250cm9sOworCQkvLyBMRURfY29udHJvbCA0IGJ5dGU6IEdyYXlfTGVkXzFbM10JCUdyYXlfTGVkXzBbMl0JCUxlZFsxXQkJCUxlZFswXQorCQkvLyBHcmF5X0xlZAorCQkvLwkJRm9yIExlZCBncmF5IHNldHRpbmcKKwkJLy8gTGVkCisJCS8vCQkwOiBub3JtYWwgY29udHJvbCwgTEVEIGJlaGF2aW9yIHdpbGwgZGVjaWRlIGJ5IEVFUFJPTSBzZXR0aW5nCisJCS8vCQkxOiBUdXJuIG9mZiBzcGVjaWZpYyBMRUQKKwkJLy8JCTI6IEFsd2F5cyBvbiBzcGVjaWZpYyBMRUQKKwkJLy8JCTM6IHNsb3cgYmxpbmtpbmcgc3BlY2lmaWMgTEVECisJCS8vCQk0OiBmYXN0IGJsaW5raW5nIHNwZWNpZmljIExFRAorCQkvLwkJNTogV1BTIGxlZCBjb250cm9sIGlzIHNldC4gTGVkMCBpcyBSZWQsIExlZDEgaWQgR3JlZW4KKwkJLy8JCQlMZWRbMV0gaXMgcGFyYW1ldGVyIGZvciBXUFMgTEVEIG1vZGUKKwkJLy8JCQkJIC8vIDE6SW5Qcm9ncmVzcyAgMjogRXJyb3IgMzogU2Vzc2lvbiBvdmVybGFwIDQ6IFN1Y2Nlc3MgMjAwNjExMDggY29udHJvbAorCisJdTMyCQlMRURfTGlua09uOwkJLy9UdXJuIExFRCBvbiBjb250cm9sCisJdTMyCQlMRURfU2Nhbm5pbmc7CS8vIExldCBMRUQgaW4gc2NhbiBwcm9jZXNzIGNvbnRyb2wKKwl1MzIJCUxFRF9CbGlua2luZzsgLy8gVGVtcCB2YXJpYWJsZSBmb3Igc2hpbmluZworCXUzMgkJUnhCeXRlQ291bnRMYXN0OworCXUzMgkJVHhCeXRlQ291bnRMYXN0OworCisJczMyCQlTdXJwcmlzZVJlbW92ZUNvdW50OworCisJLy8gRm9yIGdsb2JhbCB0aW1lcgorCXUzMgkJdGltZV9jb3VudDsvL1RJQ0tfVElNRV8xMDBtcyAxID0gMTAwbXMKKworCS8vIEZvciBlcnJvciByZWNvdmVyCisJdTMyCQlId1N0b3A7CisKKwkvLyAyMDA2MDgyOC4xIGZvciBhdm9pZCBBUCBkaXNjb25uZWN0CisJdTMyCQlOdWxsUGFja2V0Q291bnQ7CisKK30gaHdfZGF0YV90LCAqcGh3X2RhdGFfdDsKKworLy8gVGhlIG1hcHBpbmcgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3IgZmllbGQKK3R5cGVkZWYgc3RydWN0IF9IQUxfUkFURQoreworCS8vIERTU1MKKwl1MzIJUkVTRVJWRURfMDsKKwl1MzIgICBOdW1SYXRlMk1TOworCXUzMiAgIE51bVJhdGU1NU1TOworCXUzMiAgIE51bVJhdGUxMU1TOworCisJdTMyCVJFU0VSVkVEXzFbNF07CisKKwl1MzIgICBOdW1SYXRlMU07CisJdTMyICAgTnVtUmF0ZTJNTDsKKwl1MzIgICBOdW1SYXRlNTVNTDsKKwl1MzIgICBOdW1SYXRlMTFNTDsKKworCXUzMglSRVNFUlZFRF8yWzRdOworCisJLy8gT0ZETQorCXUzMiAgIE51bVJhdGU2TTsKKwl1MzIgICBOdW1SYXRlOU07CisJdTMyICAgTnVtUmF0ZTEyTTsKKwl1MzIgICBOdW1SYXRlMThNOworCXUzMiAgIE51bVJhdGUyNE07CisJdTMyICAgTnVtUmF0ZTM2TTsKKwl1MzIgICBOdW1SYXRlNDhNOworCXUzMiAgIE51bVJhdGU1NE07Cit9IEhBTF9SQVRFLCAqUEhBTF9SQVRFOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFkZTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eC5jCkBAIC0wLDAgKzEsMjc3IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNSBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YmxpbnV4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCByZWxlYXRlZCByb3V0aW5lcworLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit1MzIKK1dCTElOVVhfTWVtb3J5QWxsb2Modm9pZCogKlZpcnR1YWxBZGRyZXNzLCB1MzIgTGVuZ3RoKQoreworCSpWaXJ0dWFsQWRkcmVzcyA9IGt6YWxsb2MoIExlbmd0aCwgR0ZQX0FUT01JQyApOyAvL0dGUF9LRVJORUwgaXMgbm90IHN1aXRhYmxlCisKKwlpZiAoKlZpcnR1YWxBZGRyZXNzID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzMzIKK0VuY2FwQXRvbWljSW5jKFBBREFQVEVSIEFkYXB0ZXIsIHZvaWQqIHBBdG9taWMpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwl1MzIJbHRtcDsKKwlQVUxPTkcJcGx0bXAgPSAoUFVMT05HKXBBdG9taWM7CisJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJKCpwbHRtcCkrKzsKKwlsdG1wID0gKCpwbHRtcCk7CisJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJcmV0dXJuIGx0bXA7Cit9CisKK3MzMgorRW5jYXBBdG9taWNEZWMoUEFEQVBURVIgQWRhcHRlciwgdm9pZCogcEF0b21pYykKK3sKKwlQV0JMSU5VWCBwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCXUzMglsdG1wOworCVBVTE9ORwlwbHRtcCA9IChQVUxPTkcpcEF0b21pYzsKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwkoKnBsdG1wKS0tOworCWx0bXAgPSAoKnBsdG1wKTsKKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwlyZXR1cm4gbHRtcDsKK30KKwordW5zaWduZWQgY2hhcgorV0JMSU5VWF9Jbml0aWFsKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCU9TX1NQSU5fTE9DS19BTExPQ0FURSggJnBXYkxpbnV4LT5TcGluTG9jayApOworCU9TX1NQSU5fTE9DS19BTExPQ0FURSggJnBXYkxpbnV4LT5BdG9taWNTcGluTG9jayApOworCXJldHVybiBUUlVFOworfQorCit2b2lkCitXQkxpbnV4X1JlY2VpdmVQYWNrZXQoUEFEQVBURVIgQWRhcHRlciwgUFJYTEFZRVIxIHBSeExheWVyMSkKK3sKKwlCVUcoKTsKK30KKworCit2b2lkCitXQkxJTlVYX0dldE5leHRQYWNrZXQoUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMpCit7CisJQlVHKCk7Cit9CisKK3ZvaWQKK1dCTElOVVhfR2V0TmV4dFBhY2tldENvbXBsZXRlZChQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzKQoreworCUJVRygpOworfQorCit2b2lkCitXQkxJTlVYX0Rlc3Ryb3koUEFEQVBURVIgQWRhcHRlcikKK3sKKwlXQkxJTlVYX3N0b3AoIEFkYXB0ZXIgKTsKKwlPU19TUElOX0xPQ0tfRlJFRSggJnBXYk5kaXMtPlNwaW5Mb2NrICk7CisjaWZkZWYgX1BFX1VTQl9JTklfRFVNUF8KKwlXQkRFQlVHKCgiW3czNXVuZF0gdW5yZWdpc3Rlcl9uZXRkZXYhXG4iKSk7CisjZW5kaWYKK30KKwordm9pZAorV0JMSU5VWF9zdG9wKCAgUEFEQVBURVIgQWRhcHRlciApCit7CisJUFdCTElOVVgJcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFNrYjsKKworCWlmIChPU19BVE9NSUNfSU5DKCBBZGFwdGVyLCAmcFdiTGludXgtPlRocmVhZENvdW50ICkgPT0gMSkgeworCQkvLyBTaHV0ZG93biBtb2R1bGUgaW1tZWRpYXRlbHkKKwkJcFdiTGludXgtPnNodXRkb3duID0gMTsKKworCQl3aGlsZSAocFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdKSB7CisJCQkvLyBUcnlpbmcgdG8gZnJlZSB0aGUgdW4tc2VuZGluZyBwYWNrZXQKKwkJCXBTa2IgPSBwV2JMaW51eC0+c2tiX2FycmF5WyBwV2JMaW51eC0+c2tiX0dldEluZGV4IF07CisJCQlwV2JMaW51eC0+c2tiX2FycmF5WyBwV2JMaW51eC0+c2tiX0dldEluZGV4IF0gPSBOVUxMOworCQkJaWYoIGluX2lycSgpICkKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycSggcFNrYiApOworCQkJZWxzZQorCQkJCWRldl9rZnJlZV9za2IoIHBTa2IgKTsKKworCQkJcFdiTGludXgtPnNrYl9HZXRJbmRleCsrOworCQkJcFdiTGludXgtPnNrYl9HZXRJbmRleCAlPSBXQkxJTlVYX1BBQ0tFVF9BUlJBWV9TSVpFOworCQl9CisKKyNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJV0JERUJVRygoICJbdzM1dW5kXSBTS0JfUkVMRUFTRSBPS1xuIiApKTsKKyNlbmRpZgorCX0KKworCU9TX0FUT01JQ19ERUMoIEFkYXB0ZXIsICZwV2JMaW51eC0+VGhyZWFkQ291bnQgKTsKK30KKwordm9pZAorV2JXbGFuSGFsdCggIFBBREFQVEVSIEFkYXB0ZXIgKQoreworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQWRhcHRlci0+c0xvY2FsUGFyYS5TaHV0RG93bmVkID0gVFJVRTsKKworCU1kc19EZXN0cm95KCBBZGFwdGVyICk7CisKKwkvLyBUdXJuIG9mZiBSeCBhbmQgVHggaGFyZHdhcmUgYWJpbGl0eQorCWhhbF9zdG9wKCAmQWRhcHRlci0+c0h3RGF0YSApOworI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJV0JERUJVRygoIlt3MzV1bmRdIEhhbF9zdG9wIE8uSy5cbiIpKTsKKyNlbmRpZgorCU9TX1NMRUVQKDEwMDAwMCk7Ly8gV2FpdGluZyBJcnAgY29tcGxldGVkCisKKwkvLyBEZXN0cm95IHRoZSBORElTIG1vZHVsZQorCVdCTElOVVhfRGVzdHJveSggQWRhcHRlciApOworCisJLy8gSGFsdCB0aGUgSEFMCisJaGFsX2hhbHQoJkFkYXB0ZXItPnNId0RhdGEsIE5VTEwpOworfQorCit1bnNpZ25lZCBjaGFyCitXYldMYW5Jbml0aWFsaXplKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhOworCVBVQ0hBUgkJcE1hY0FkZHIsIHBNYWNBZGRyMjsKKwl1MzIJCUluaXRTdGVwID0gMDsKKwl1OAkJRUVQUk9NX3JlZ2lvbjsKKwl1OAkJSHdSYWRpb09mZjsKKworCWRvIHsKKwkJLy8KKwkJLy8gU2V0dGluZyBkZWZhdWx0IHZhbHVlIGZvciBMaW51eAorCQkvLworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLnJlZ2lvbl9JTkYgPSBSRUdJT05fQVVUTzsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5UeFJhdGVNb2RlID0gUkFURV9BVVRPOworCQlwc0xPQ0FMLT5iTWFjT3BlcmF0aW9uTW9kZSA9IE1PREVfODAyXzExX0JHOwkvLyBCL0cgbW9kZQorCQlBZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQgPSBERUZBVUxUX1JUU1RocmVzaG9sZDsKKwkJQWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKwkJaGFsX3NldF9waHlfdHlwZSggJkFkYXB0ZXItPnNId0RhdGEsIFJGX1dCXzI0Ml8xICk7CisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuTVRVc2l6ZSA9IE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRTsKKwkJcHNMT0NBTC0+YlByZWFtYmxlTW9kZSA9IEFVVE9fTU9ERTsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5SYWRpb09mZlN0YXR1cy5ib1N3UmFkaW9PZmYgPSBGQUxTRTsKKwkJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQloYWxfc2V0X3BoeV90eXBlKCBwSHdEYXRhLCBSRl9ERUNJREVfQllfSU5GICk7CisKKwkJLy8KKwkJLy8gSW5pdGlhbCBlYWNoIG1vZHVsZSBhbmQgdmFyaWFibGUKKwkJLy8KKwkJaWYgKCFXQkxJTlVYX0luaXRpYWwoQWRhcHRlcikpIHsKKyNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXworCQkJV0JERUJVRygoIlt3MzV1bmRdV0JORElTIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIikpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCS8vIEluaXRpYWwgU29mdHdhcmUgdmFyaWFibGUKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5TaHV0RG93bmVkID0gRkFMU0U7CisKKwkJLy9hZGRlZCBieSB3cyBmb3Igd2VwIGtleSBlcnJvciBkZXRlY3Rpb24KKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5iV2VwS2V5RXJyb3I9IEZBTFNFOworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLmJUb1NlbGZQYWNrZXRSZWNlaXZlZCA9IEZBTFNFOworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLldlcEtleURldGVjdFRpbWVyQ291bnQ9IDIgKiAxMDA7IC8vLyAyIHNlY29uZHMKKworCQkvLyBJbml0aWFsIFVTQiBoYWwKKwkJSW5pdFN0ZXAgPSAxOworCQlwSHdEYXRhID0gJkFkYXB0ZXItPnNId0RhdGE7CisJCWlmICghaGFsX2luaXRfaGFyZHdhcmUocEh3RGF0YSwgQWRhcHRlcikpCisJCQlicmVhazsKKworCQlFRVBST01fcmVnaW9uID0gaGFsX2dldF9yZWdpb25fZnJvbV9FRVBST00oIHBId0RhdGEgKTsKKwkJaWYgKEVFUFJPTV9yZWdpb24gIT0gUkVHSU9OX0FVVE8pCisJCQlwc0xPQ0FMLT5yZWdpb24gPSBFRVBST01fcmVnaW9uOworCQllbHNlIHsKKwkJCWlmIChwc0xPQ0FMLT5yZWdpb25fSU5GICE9IFJFR0lPTl9BVVRPKQorCQkJCXBzTE9DQUwtPnJlZ2lvbiA9IHBzTE9DQUwtPnJlZ2lvbl9JTkY7CisJCQllbHNlCisJCQkJcHNMT0NBTC0+cmVnaW9uID0gUkVHSU9OX1VTQTsJLy9kZWZhdWx0IHNldHRpbmcKKwkJfQorCisJCS8vIEdldCBTb2Z0d2FyZSBzZXR0aW5nIGZsYWcgZnJvbSBoYWwKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0FudGVubmFEaXZlcnNpdHkgPSBGQUxTRTsKKwkJaWYgKGhhbF9zb2Z0d2FyZV9zZXQocEh3RGF0YSkgJiAweDAwMDAwMDAxKQorCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0FudGVubmFEaXZlcnNpdHkgPSBUUlVFOworCisJCS8vCisJCS8vIEZvciBUUyBtb2R1bGUKKwkJLy8KKwkJSW5pdFN0ZXAgPSAyOworCisJCS8vIEZvciBNRFMgbW9kdWxlCisJCUluaXRTdGVwID0gMzsKKwkJTWRzX2luaXRpYWwoQWRhcHRlcik7CisKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gSW5pdGlhbGl6ZSB0aGUgU01FLCBTQ0FOLCBNTE1FLCBST0FNCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCUluaXRTdGVwID0gNDsKKwkJSW5pdFN0ZXAgPSA1OworCQlJbml0U3RlcCA9IDY7CisKKwkJLy8gSWYgbm8gdXNlci1kZWZpbmVkIGFkZHJlc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGFkZHJlc3NzICJidXJuZWQiIG9uIHRoZSBOSUMgaW5zdGVhZC4KKwkJcE1hY0FkZHIgPSBBZGFwdGVyLT5zTG9jYWxQYXJhLlRoaXNNYWNBZGRyZXNzOworCQlwTWFjQWRkcjIgPSBBZGFwdGVyLT5zTG9jYWxQYXJhLlBlcm1hbmVudEFkZHJlc3M7CisJCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBId0RhdGEsIEFkYXB0ZXItPnNMb2NhbFBhcmEuUGVybWFuZW50QWRkcmVzcyApOy8vIFJlYWRpbmcgZXRoZXJuZXQgYWRkcmVzcyBmcm9tIEVFUFJPTQorCQlpZiAoT1NfTUVNT1JZX0NPTVBBUkUocE1hY0FkZHIsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLCBNQUNfQUREUl9MRU5HVEggKSkgLy8gSXMgZXF1YWwKKwkJeworCQkJbWVtY3B5KCBwTWFjQWRkciwgcE1hY0FkZHIyLCBNQUNfQUREUl9MRU5HVEggKTsKKwkJfSBlbHNlIHsKKwkJCS8vIFNldCB0aGUgdXNlciBkZWZpbmUgTUFDIGFkZHJlc3MKKwkJCWhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggcEh3RGF0YSwgQWRhcHRlci0+c0xvY2FsUGFyYS5UaGlzTWFjQWRkcmVzcyApOworCQl9CisKKwkJLy9nZXQgY3VycmVudCBhbnRlbm5hCisJCXBzTE9DQUwtPmJBbnRlbm5hTm8gPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKHBId0RhdGEpOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQlXQkRFQlVHKCgiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObykpOworI2VuZGlmCisJCWhhbF9nZXRfaHdfcmFkaW9fb2ZmKCBwSHdEYXRhICk7CisKKwkJLy8gV2FpdGluZyBmb3IgSEFMIHNldHRpbmcgT0sKKwkJd2hpbGUgKCFoYWxfaWRsZShwSHdEYXRhKSkKKwkJCU9TX1NMRUVQKDEwMDAwKTsKKworCQlNVE9fSW5pdChBZGFwdGVyKTsKKworCQlId1JhZGlvT2ZmID0gaGFsX2dldF9od19yYWRpb19vZmYoIHBId0RhdGEgKTsKKwkJcHNMT0NBTC0+UmFkaW9PZmZTdGF0dXMuYm9Id1JhZGlvT2ZmID0gISFId1JhZGlvT2ZmOworCisJCWhhbF9zZXRfcmFkaW9fbW9kZSggcEh3RGF0YSwgKHVuc2lnbmVkIGNoYXIpKHBzTE9DQUwtPlJhZGlvT2ZmU3RhdHVzLmJvU3dSYWRpb09mZiB8fCBwc0xPQ0FMLT5SYWRpb09mZlN0YXR1cy5ib0h3UmFkaW9PZmYpICk7CisKKwkJaGFsX2RyaXZlcl9pbml0X09LKHBId0RhdGEpID0gMTsgLy8gTm90aWZ5IGhhbCB0aGF0IHRoZSBkcml2ZXIgaXMgcmVhZHkgbm93LgorCQkvL3NldCBhIHR4IHBvd2VyIGZvciByZWZlcmVuY2UuLi4uLgorLy8JCXNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwoQWRhcHRlciwgMTIpOwlGSVhNRT8KKwkJcmV0dXJuIFRSVUU7CisJfQorCXdoaWxlKEZBTFNFKTsKKworCXN3aXRjaCAoSW5pdFN0ZXApIHsKKwljYXNlIDU6CisJY2FzZSA0OgorCWNhc2UgMzogTWRzX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKwljYXNlIDI6CisJY2FzZSAxOiBXQkxJTlVYX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKwkJaGFsX2hhbHQoIHBId0RhdGEsIE5VTEwgKTsKKwljYXNlIDA6IGJyZWFrOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBXQkxJTlVYX0Nvbm5lY3RTdGF0dXMoUEFEQVBURVIgQWRhcHRlciwgdTMyIGZsYWcpCit7CisJUFdCTElOVVgJcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCXBXYkxpbnV4LT5MaW5rU3RhdHVzID0gZmxhZzsgLy8gT1NfRElTQ09OTkVDVEVECW9yICBPU19DT05ORUNURUQKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9mLmgKQEAgLTAsMCArMSwyMyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyB3YmxpbnV4X2YuaAorLy8KK3UzMiBXQkxJTlVYX01lbW9yeUFsbG9jKCAgdm9pZCogKlZpcnR1YWxBZGRyZXNzLCAgdTMyIExlbmd0aCApOworczMyIEVuY2FwQXRvbWljSW5jKCAgUEFEQVBURVIgQWRhcHRlciwgIHZvaWQqIHBBdG9taWMgKTsKK3MzMiBFbmNhcEF0b21pY0RlYyggIFBBREFQVEVSIEFkYXB0ZXIsICB2b2lkKiBwQXRvbWljICk7Cit2b2lkIFdCTGludXhfUmVjZWl2ZVBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxICk7Cit1bnNpZ25lZCBjaGFyIFdCTElOVVhfSW5pdGlhbCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK2ludCB3YjM1X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiApOwordm9pZCBXQkxJTlVYX0dldE5leHRQYWNrZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBXQkxJTlVYX0dldE5leHRQYWNrZXRDb21wbGV0ZWQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBXQkxJTlVYX3N0b3AoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIFdCTElOVVhfRGVzdHJveSggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgd2IzNV9zZXRfbXVsdGljYXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICk7CitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIHdiMzVfbmV0ZGV2X3N0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICk7Cit2b2lkIFdCTElOVVhfc3RvcCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgV2JXbGFuSGFsdCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgV0JMSU5VWF9Db25uZWN0U3RhdHVzKCAgUEFEQVBURVIgQWRhcHRlciwgIHUzMiBmbGFnICk7CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTkxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X3MuaApAQCAtMCwwICsxLDQ1IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gd2JsaW51eF9zLmgKKy8vCisjZGVmaW5lIE9TX01FTU9SWV9BTExPQyggX1YsIF9TICkJV0JMSU5VWF9NZW1vcnlBbGxvYyggX1YsIF9TICkKKyNkZWZpbmUgT1NfTElOS19TVEFUVVMJCQkoQWRhcHRlci0+V2JMaW51eC5MaW5rU3RhdHVzID09IE9TX0NPTk5FQ1RFRCkKKyNkZWZpbmUgT1NfU0VUX1NIVVRET1dOKCBfQSApCQlfQS0+V2JMaW51eC5zaHV0ZG93bj0xCisjZGVmaW5lIE9TX1NFVF9SRVNVTUUoIF9BICkJCV9BLT5XYkxpbnV4LnNodXRkb3duPTAKKyNkZWZpbmUgT1NfQ09OTkVDVF9TVEFUVVNfSU5ESUNBVEUoIF9BLCBfRiApCQlXQkxJTlVYX0Nvbm5lY3RTdGF0dXMoIF9BLCBfRiApCisjZGVmaW5lIE9TX0RJU0NPTk5FQ1RFRAkwCisjZGVmaW5lIE9TX0NPTk5FQ1RFRAkxCisjZGVmaW5lIE9TX1NUT1AoIF9BICkJV0JMSU5VWF9zdG9wKCBfQSApCisKKyNkZWZpbmUgT1NfQ1VSUkVOVF9SWF9CWVRFKCBfQSApCQlfQS0+V2JMaW51eC5SeEJ5dGVDb3VudAorI2RlZmluZSBPU19DVVJSRU5UX1RYX0JZVEUoIF9BICkJCV9BLT5XYkxpbnV4LlR4Qnl0ZUNvdW50CisjZGVmaW5lIE9TX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkKKyNkZWZpbmUgT1NfUE1LSURfU1RBVFVTX0VWRU5UKCBfQSApCisjZGVmaW5lIE9TX1JFQ0VJVkVfUEFDS0VUX0lORElDQVRFKCBfQSwgX0QgKQkJV0JMaW51eF9SZWNlaXZlUGFja2V0KCBfQSwgX0QgKQorI2RlZmluZSBPU19SRUNFSVZFXzgwMl8xWF9QQUNLRVRfSU5ESUNBVEUoIF9BLCBfRCApCUVBUF9SZWNlaXZlUGFja2V0KCBfQSwgX0QgKQorI2RlZmluZSBPU19HRVRfUEFDS0VUKCBfQSwgX0QgKQkJCQlXQkxJTlVYX0dldE5leHRQYWNrZXQoIF9BLCBfRCApCisjZGVmaW5lIE9TX0dFVF9QQUNLRVRfQ09NUExFVEUoIF9BLCBfRCApCVdCTElOVVhfR2V0TmV4dFBhY2tldENvbXBsZXRlZCggX0EsIF9EICkKKyNkZWZpbmUgT1NfU0VORF9SRVNVTFQoIF9BLCBfSUQsIF9SICkKKworI2RlZmluZSBXQkxJTlVYX1BBQ0tFVF9BUlJBWV9TSVpFCShFVEhFUk5FVF9UWF9ERVNDUklQVE9SUyo0KQorCit0eXBlZGVmIHN0cnVjdCBfV0JMSU5VWAoreworCU9TX1NQSU5fTE9DSwlBdG9taWNTcGluTG9jazsKKwlPU19TUElOX0xPQ0sJU3BpbkxvY2s7CisJdTMyCXNodXRkb3duOworCisJT1NfQVRPTUlDCVRocmVhZENvdW50OworCisJdTMyCUxpbmtTdGF0dXM7CQkvLyBPU19ESVNDT05ORUNURUQgb3IgT1NfQ09OTkVDVEVECisKKwl1MzIJUnhCeXRlQ291bnQ7CisJdTMyCVR4Qnl0ZUNvdW50OworCisJc3RydWN0IHNrX2J1ZmYgKnNrYl9hcnJheVsgV0JMSU5VWF9QQUNLRVRfQVJSQVlfU0laRSBdOworCXN0cnVjdCBza19idWZmICpwYWNrZXRfcmV0dXJuOworCXMzMglza2JfU2V0SW5kZXg7CisJczMyCXNrYl9HZXRJbmRleDsKKwlzMzIJbmV0aWZfc3RhdGVfc3RvcDsgLy8gMTogc3RvcCAgMDogbm9ybWFsCit9IFdCTElOVVgsICpQV0JMSU5VWDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIxZjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgUFJJU00yX1VTQgorCXRyaXN0YXRlICJQcmlzbTIuNSBVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCisJICBvbGQgVVNCIHdpcmVsZXNzIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHByaXNtMl91c2IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2I1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwcmlzbTJfdXNiLm8KK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwODAyMTEubworCitwODAyMTEtb2JqcyA6PSBwODAyMTFtb2QubyBcCisJCXA4MDIxMWNvbnYubyBcCisJCXA4MDIxMXJlcS5vIFwKKwkJcDgwMjExd2VwLm8gXAorCQlwODAyMTF3ZXh0Lm8gXAorCQlwODAyMTFuZXRkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gc3BhcnNlIHdhcm5pbmdzCisJLSBMaW5kZW50IGNsZWFudXBzCisJLSBtb3ZlIHRvIHVzZSB0aGUgaW4ta2VybmVsIHdpcmVsZXNzIHN0YWNrCisJLSBwb3NzaWJsZSBlbmFibGUgdGhlIHBjbWNpYSBhbmQgcGNpIHBvcnRpb25zIG9mIHRoZSBkcml2ZXIKKworUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRmM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5jCkBAIC0wLDAgKzEsNDAxOCBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvaGZhMzg0eC5jCisqCisqIEltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgSW50ZXJzaWwgaGZhMzg0eCBNQUMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJpc20yL2hmYTM4NHgKKyogODAyLjExIE1BQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaG9zdCBpbnRlcmZhY2UuCisqCisqIFRoZSBmdW5jdGlvbnMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHNldmVyYWwgbGV2ZWxzIG9mCisqIGFic3RyYWN0aW9uLiAgVGhlIGxvd2VzdCBsZXZlbCBmdW5jdGlvbnMgYXJlIHNpbXBseSBDLWNhbGxhYmxlIHdyYXBwZXJzCisqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCisqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQorKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcworKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyoKKyogQ29tbW9uIHNlcXVlbmNlczoKKyogaGZhMzg0eF9kcnZyX3h4eAlIaWdoZXN0IGxldmVsIGFic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUKKyoJCQloZmEzODR4IGNvZGUuICBUaGV5IGFyZSBkcml2ZXIgZGVmaW5lZCB3cmFwcGVycworKgkJCWZvciBjb21tb24gc2VxdWVuY2VzLiAgVGhlc2UgZnVuY3Rpb25zIGdlbmVyYWxseQorKgkJCXVzZSB0aGUgc2VydmljZXMgb2YgdGhlIGxvd2VyIGxldmVscy4KKyoKKyogaGZhMzg0eF9kcnZyX3h4eGNvbmZpZyAgQW4gZXhhbXBsZSBvZiB0aGUgZHJ2ciBsZXZlbCBhYnN0cmFjdGlvbi4gVGhlc2UKKyoJCQlmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGZvciB0aGUgUklEIGdldC9zZXQKKyoJCQlzZXF1ZW5jZS4gVGhleSAJY2FsbCBjb3B5X1t0b3xmcm9tXV9iYXAoKSBhbmQKKyoJCQljbWRfYWNjZXNzKCkuCVRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZQorKgkJCVJJRHMgYW5kIGJ1ZmZlcnMgd2l0aG91dCB2YWxpZGF0aW9uLiAgVGhlIGNhbGxlcgorKgkJCWlzIHJlc3BvbnNpYmxlIGZvciB0aGF0LgorKgorKiBBUEkgd3JhcHBlciBmdW5jdGlvbnM6CisqIGhmYTM4NHhfY21kX3h4eAlmdW5jdGlvbnMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZi93IGNvbW1hbmRzLgorKgkJCVRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBlYWNoIGNvbW1hbmQKKyoJCQlhcmd1bWVudCwgZXZlbiBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IGdldCBwYWNrZWQKKyoJCQlpbnRvIHNpbmdsZSByZWdpc3RlcnMuICBUaGVzZSBmdW5jdGlvbnMgX2p1c3RfCisqCQkJaXNzdWUgdGhlIGNvbW1hbmQgYnkgc2V0dGluZyB0aGUgY21kL3Bhcm0gcmVncworKgkJCSYgcmVhZGluZyB0aGUgc3RhdHVzL3Jlc3AgcmVncy4gIEFkZGl0aW9uYWwKKyoJCQlhY3Rpdml0aWVzIHJlcXVpcmVkIHRvIGZ1bGx5IHVzZSBhIGNvbW1hbmQKKyoJCQkocmVhZC93cml0ZSBmcm9tL3RvIGJhcCwgZ2V0L3NldCBpbnQgc3RhdHVzIGV0Yy4pCisqCQkJYXJlIGltcGxlbWVudGVkIHNlcGFyYXRlbHkuICBUaGluayBvZiB0aGVzZSBhcworKgkJCUMtY2FsbGFibGUgcHJpc20yIGNvbW1hbmRzLgorKgorKiBMb3dlc3QgTGF5ZXIgRnVuY3Rpb25zOgorKiBoZmEzODR4X2RvY21kX3h4eAlUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSByZXF1aXJlZAorKgkJCXRvIGlzc3VlIGFueSBwcmlzbTIgY29tbWFuZC4gIFByaW1hcmlseSB1c2VkIGJ5IHRoZQorKgkJCWhmYTM4NHhfY21kX3h4eCBmdW5jdGlvbnMuCisqCisqIGhmYTM4NHhfYmFwX3h4eAlCQVAgcmVhZC93cml0ZSBhY2Nlc3MgZnVuY3Rpb25zLgorKgkJCU5vdGU6IHdlIHVzdWFsbHkgdXNlIEJBUDAgZm9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorKgkJCSBhbmQgQkFQMSBmb3IgaW50ZXJydXB0IGNvbnRleHQuCisqCisqIGhmYTM4NHhfZGxfeHh4CWRvd25sb2FkIHJlbGF0ZWQgZnVuY3Rpb25zLgorKgorKiBEcml2ZXIgU3RhdGUgSXNzdWVzOgorKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byBwYWlycyBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlCisqICdpbml0aWFsaXplZCcgYW5kICdydW5uaW5nJyBzdGF0ZXMgb2YgdGhlIGh3L01BQyBjb21iby4gIFRoZSBmb3VyCisqIGZ1bmN0aW9ucyBhcmUgY3JlYXRlKCksIGRlc3Ryb3koKSwgc3RhcnQoKSwgYW5kIHN0b3AoKS4gIGNyZWF0ZSgpCisqIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBoZmEzODR4XyoKKyogZnVuY3Rpb25zIGFuZCBkZXN0cm95KCkgY2xlYW5zIHRoZW0gdXAuICBUaGUgc3RhcnQoKSBmdW5jdGlvbiBnZXRzCisqIHRoZSBhY3R1YWwgaGFyZHdhcmUgcnVubmluZyBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIFRoZSBzdG9wKCkKKyogZnVuY3Rpb24gc2h1dHMgdGhlIGhhcmR3YXJlIGRvd24uICBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlOgorKiBjcmVhdGUoKQorKiAgLgorKiAgLiAgU2VsZiBjb250YWluZWQgdGVzdCByb3V0aW5lcyBjYW4gcnVuIGhlcmUsIHBhcnRpY3VsYXJseQorKiAgLiAgY29yZXJlc2V0KCkgYW5kIHRlc3RfaG9zdGlmKCkuCisqICAuCisqIHN0YXJ0KCkKKyogIC4KKyogIC4gIERvIGludGVyZXN0aW5nIHRoaW5ncyB3LyB0aGUgaGFyZHdhcmUKKyogIC4KKyogc3RvcCgpCisqIGRlc3Ryb3koKQorKgorKiBOb3RlIHRoYXQgZGVzdHJveSgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHN0b3AoKSBmaXJzdC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisjaW5jbHVkZSA8bGludXgvdHF1ZXVlLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2VuZGlmCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykgKQorI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2VuZGlmCisKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpKQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvLyBYWFhYICNkZWZpbmUgQ01EX0lSUQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCitzdGF0aWMgY29uc3QgVUlOVDE2IGNyYzE2dGFiWzI1Nl0gPQoreworCTB4MDAwMCwgMHhjMGMxLCAweGMxODEsIDB4MDE0MCwgMHhjMzAxLCAweDAzYzAsIDB4MDI4MCwgMHhjMjQxLAorCTB4YzYwMSwgMHgwNmMwLCAweDA3ODAsIDB4Yzc0MSwgMHgwNTAwLCAweGM1YzEsIDB4YzQ4MSwgMHgwNDQwLAorCTB4Y2MwMSwgMHgwY2MwLCAweDBkODAsIDB4Y2Q0MSwgMHgwZjAwLCAweGNmYzEsIDB4Y2U4MSwgMHgwZTQwLAorCTB4MGEwMCwgMHhjYWMxLCAweGNiODEsIDB4MGI0MCwgMHhjOTAxLCAweDA5YzAsIDB4MDg4MCwgMHhjODQxLAorCTB4ZDgwMSwgMHgxOGMwLCAweDE5ODAsIDB4ZDk0MSwgMHgxYjAwLCAweGRiYzEsIDB4ZGE4MSwgMHgxYTQwLAorCTB4MWUwMCwgMHhkZWMxLCAweGRmODEsIDB4MWY0MCwgMHhkZDAxLCAweDFkYzAsIDB4MWM4MCwgMHhkYzQxLAorCTB4MTQwMCwgMHhkNGMxLCAweGQ1ODEsIDB4MTU0MCwgMHhkNzAxLCAweDE3YzAsIDB4MTY4MCwgMHhkNjQxLAorCTB4ZDIwMSwgMHgxMmMwLCAweDEzODAsIDB4ZDM0MSwgMHgxMTAwLCAweGQxYzEsIDB4ZDA4MSwgMHgxMDQwLAorCTB4ZjAwMSwgMHgzMGMwLCAweDMxODAsIDB4ZjE0MSwgMHgzMzAwLCAweGYzYzEsIDB4ZjI4MSwgMHgzMjQwLAorCTB4MzYwMCwgMHhmNmMxLCAweGY3ODEsIDB4Mzc0MCwgMHhmNTAxLCAweDM1YzAsIDB4MzQ4MCwgMHhmNDQxLAorCTB4M2MwMCwgMHhmY2MxLCAweGZkODEsIDB4M2Q0MCwgMHhmZjAxLCAweDNmYzAsIDB4M2U4MCwgMHhmZTQxLAorCTB4ZmEwMSwgMHgzYWMwLCAweDNiODAsIDB4ZmI0MSwgMHgzOTAwLCAweGY5YzEsIDB4Zjg4MSwgMHgzODQwLAorCTB4MjgwMCwgMHhlOGMxLCAweGU5ODEsIDB4Mjk0MCwgMHhlYjAxLCAweDJiYzAsIDB4MmE4MCwgMHhlYTQxLAorCTB4ZWUwMSwgMHgyZWMwLCAweDJmODAsIDB4ZWY0MSwgMHgyZDAwLCAweGVkYzEsIDB4ZWM4MSwgMHgyYzQwLAorCTB4ZTQwMSwgMHgyNGMwLCAweDI1ODAsIDB4ZTU0MSwgMHgyNzAwLCAweGU3YzEsIDB4ZTY4MSwgMHgyNjQwLAorCTB4MjIwMCwgMHhlMmMxLCAweGUzODEsIDB4MjM0MCwgMHhlMTAxLCAweDIxYzAsIDB4MjA4MCwgMHhlMDQxLAorCTB4YTAwMSwgMHg2MGMwLCAweDYxODAsIDB4YTE0MSwgMHg2MzAwLCAweGEzYzEsIDB4YTI4MSwgMHg2MjQwLAorCTB4NjYwMCwgMHhhNmMxLCAweGE3ODEsIDB4Njc0MCwgMHhhNTAxLCAweDY1YzAsIDB4NjQ4MCwgMHhhNDQxLAorCTB4NmMwMCwgMHhhY2MxLCAweGFkODEsIDB4NmQ0MCwgMHhhZjAxLCAweDZmYzAsIDB4NmU4MCwgMHhhZTQxLAorCTB4YWEwMSwgMHg2YWMwLCAweDZiODAsIDB4YWI0MSwgMHg2OTAwLCAweGE5YzEsIDB4YTg4MSwgMHg2ODQwLAorCTB4NzgwMCwgMHhiOGMxLCAweGI5ODEsIDB4Nzk0MCwgMHhiYjAxLCAweDdiYzAsIDB4N2E4MCwgMHhiYTQxLAorCTB4YmUwMSwgMHg3ZWMwLCAweDdmODAsIDB4YmY0MSwgMHg3ZDAwLCAweGJkYzEsIDB4YmM4MSwgMHg3YzQwLAorCTB4YjQwMSwgMHg3NGMwLCAweDc1ODAsIDB4YjU0MSwgMHg3NzAwLCAweGI3YzEsIDB4YjY4MSwgMHg3NjQwLAorCTB4NzIwMCwgMHhiMmMxLCAweGIzODEsIDB4NzM0MCwgMHhiMTAxLCAweDcxYzAsIDB4NzA4MCwgMHhiMDQxLAorCTB4NTAwMCwgMHg5MGMxLCAweDkxODEsIDB4NTE0MCwgMHg5MzAxLCAweDUzYzAsIDB4NTI4MCwgMHg5MjQxLAorCTB4OTYwMSwgMHg1NmMwLCAweDU3ODAsIDB4OTc0MSwgMHg1NTAwLCAweDk1YzEsIDB4OTQ4MSwgMHg1NDQwLAorCTB4OWMwMSwgMHg1Y2MwLCAweDVkODAsIDB4OWQ0MSwgMHg1ZjAwLCAweDlmYzEsIDB4OWU4MSwgMHg1ZTQwLAorCTB4NWEwMCwgMHg5YWMxLCAweDliODEsIDB4NWI0MCwgMHg5OTAxLCAweDU5YzAsIDB4NTg4MCwgMHg5ODQxLAorCTB4ODgwMSwgMHg0OGMwLCAweDQ5ODAsIDB4ODk0MSwgMHg0YjAwLCAweDhiYzEsIDB4OGE4MSwgMHg0YTQwLAorCTB4NGUwMCwgMHg4ZWMxLCAweDhmODEsIDB4NGY0MCwgMHg4ZDAxLCAweDRkYzAsIDB4NGM4MCwgMHg4YzQxLAorCTB4NDQwMCwgMHg4NGMxLCAweDg1ODEsIDB4NDU0MCwgMHg4NzAxLCAweDQ3YzAsIDB4NDY4MCwgMHg4NjQxLAorCTB4ODIwMSwgMHg0MmMwLCAweDQzODAsIDB4ODM0MSwgMHg0MTAwLCAweDgxYzEsIDB4ODA4MSwgMHg0MDQwCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCitleHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9kdGltKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKK3N0YXRpYyB2b2lkICAgICBoZmEzODR4X2JhcF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAloZmEzODR4X2ludF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfcngod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworI2lmZGVmIENNRF9JUlEKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X2NtZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworI2VuZGlmCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCVVJTlQxNiByeGZpZCwgaGZhMzg0eF9yeF9mcmFtZV90ICpyeGRlc2MpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworc3RhdGljIGludCBoZmEzODR4X2RvY21kX3dhaXQoIGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpOworCitzdGF0aWMgaW50IGhmYTM4NHhfZGxfZG9jbWRfd2FpdCggaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCk7CisKK3N0YXRpYyBVSU5UMTYKK2hmYTM4NHhfbWtjcmMxNihVSU5UOCAqcCwgaW50IGxlbik7CisKK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwNChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkgdm9pZCAqYnVmLCBVSU5UIGxlbiwgdm9pZCogYnVmMiwgVUlOVCBsZW4yLAorCQkJIHZvaWQgKmJ1ZjMsIFVJTlQgbGVuMywgdm9pZCogYnVmNCwgVUlOVCBsZW40KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKK3N0YXRpYyBVSU5UMTYKK3R4ZmlkX3F1ZXVlX2VtcHR5KGhmYTM4NHhfdCAqaHcpCit7CisJcmV0dXJuIChody0+dHhmaWRfaGVhZCA9PSBody0+dHhmaWRfdGFpbCkgPyAxIDogMDsKK30KKworc3RhdGljIFVJTlQxNgordHhmaWRfcXVldWVfcmVtb3ZlKGhmYTM4NHhfdCAqaHcpCit7CisJVUlOVDE2IHJlc3VsdD0gMDsKKworCWlmICh0eGZpZF9xdWV1ZV9lbXB0eShodykpIHsKKwkJV0xBTl9MT0dfREVCVUcoMywicXVldWUgZW1wdHkuXG4iKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBody0+dHhmaWRfcXVldWVbaHctPnR4ZmlkX2hlYWRdOworCQlody0+dHhmaWRfaGVhZCA9IChody0+dHhmaWRfaGVhZCArIDEpICUgaHctPnR4ZmlkX047CisJfQorCisJcmV0dXJuIChVSU5UMTYpcmVzdWx0OworfQorCitzdGF0aWMgSU5UMTYKK3R4ZmlkX3F1ZXVlX2FkZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsKQoreworCUlOVDE2IHJlc3VsdCA9IDA7CisKKwlpZiAoaHctPnR4ZmlkX2hlYWQgPT0gKChody0+dHhmaWRfdGFpbCArIDEpICUgaHctPnR4ZmlkX04pKSB7CisJCXJlc3VsdCA9IC0xOworCQlXTEFOX0xPR19ERUJVRygzLCJxdWV1ZSBmdWxsLlxuIik7CisJfSBlbHNlIHsKKwkJaHctPnR4ZmlkX3F1ZXVlW2h3LT50eGZpZF90YWlsXSA9IHZhbDsKKwkJcmVzdWx0ID0gaHctPnR4ZmlkX3RhaWw7CisJCWh3LT50eGZpZF90YWlsID0gKGh3LT50eGZpZF90YWlsICsgMSkgJSBody0+dHhmaWRfTjsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jcmVhdGUKKyoKKyogSW5pdGlhbGl6ZXMgdGhlIGhmYTM4NHhfdCBkYXRhIHN0cnVjdHVyZSBmb3IgdXNlLiAgTm90ZSB0aGlzCisqIGRvZXMgX25vdF8gaW50aWFsaXplIHRoZSBhY3R1YWwgaGFyZHdhcmUsIGp1c3QgdGhlIGRhdGEgc3RydWN0dXJlcworKiB3ZSB1c2UgdG8ga2VlcCB0cmFjayBvZiBpdHMgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaXJxCQlkZXZpY2UgaXJxIG51bWJlcgorKglpb2Jhc2UJCVtwY21jaWFdIGkvbyBiYXNlIGFkZHJlc3MgZm9yIHJlZ2lzdGVyIGFjY2VzcworKgkJCVtwY2ldIHplcm8KKyoJCQlbcGx4XSBpL28gYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoJbWVtYmFzZQkJW3BjbWNpYV0gcGNtY2lhX2NzICJsaW5rIiBwb2ludGVyCisqCQkJW3BjaV0gbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgcmVnaXN0ZXIgYWNjZXNzCisqCQkJW3BseF0gbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgY2FyZCBhdHRyaWJ1dGUgbWVtb3J5CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgVUlOVCBpcnEsIFVJTlQzMiBpb2Jhc2UsCisJCSAgICBVSU5UOCBfX2lvbWVtICptZW1iYXNlKQoreworCURCRkVOVEVSOworCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOworCWh3LT5pcnEgPSBpcnE7CisJaHctPmlvYmFzZSA9IGlvYmFzZTsKKwlody0+bWVtYmFzZSA9IG1lbWJhc2U7CisJc3Bpbl9sb2NrX2luaXQoJihody0+Y21kbG9jaykpOworCisJLyogQkFQIHNldHVwICovCisgCXNwaW5fbG9ja19pbml0KCYoaHctPmJhcGxvY2spKTsKKwl0YXNrbGV0X2luaXQoJmh3LT5iYXBfdGFza2xldCwKKwkJICAgICBoZmEzODR4X2JhcF90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBodyk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZody0+Y21kcSk7CisJc2VtYV9pbml0KCZody0+aW5mb2ZpZF9zZW0sIDEpOworCisgICAgICAgIGh3LT50eGZpZF9oZWFkID0gMDsKKyAgICAgICAgaHctPnR4ZmlkX3RhaWwgPSAwOworICAgICAgICBody0+dHhmaWRfTiA9IEhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVg7CisgICAgICAgIG1lbXNldChody0+dHhmaWRfcXVldWUsIDAsIHNpemVvZihody0+dHhmaWRfcXVldWUpKTsKKworCWh3LT5pc3JhbTE2ID0gMTsKKworCS8qIEluaXQgdGhlIGF1dGggcXVldWUgaGVhZCAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CisKKwlJTklUX1dPUksyKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOworCisgICAgICAgIElOSVRfV09SSzIoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOworCisJaW5pdF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lcik7CisJaHctPmNvbW1zcXVhbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGh3OworCWh3LT5jb21tc3F1YWxfdGltZXIuZnVuY3Rpb24gPSBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kZXN0cm95CisqCisqIFBhcnRuZXIgdG8gaGZhMzg0eF9jcmVhdGUoKS4gIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBodworKiBzdHJ1Y3R1cmUgc28gdGhhdCBpdCBjYW4gYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIHNpbXBsZQorKiBrZnJlZS4gIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuICBJZiwgYXQgc29tZQorKiBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbiBodyBpbiB0aGUgJ3NodXRkb3duJyBzdGF0ZSByZXF1aXJlcyBhICdkZWVwJworKiBrZnJlZSwgdGhpcyBpcyB3aGVyZSBpdCBzaG91bGQgYmUgZG9uZS4gIE5vdGUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBvbiBhIF9ydW5uaW5nXyBodyBzdHJ1Y3R1cmUsIHRoZSBkcnZyX3N0b3AoKSBmdW5jdGlvbiBpcworKiBjYWxsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZywgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBmYWlsLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2Rlc3Ryb3koIGhmYTM4NHhfdCAqaHcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisJaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJfQorCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKKworCWlmIChody0+c2NhbnJlc3VsdHMpIHsKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKwkJaHctPnNjYW5yZXN1bHRzID0gTlVMTDsKKwl9CisKKyAgICAgICAgLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLworICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOworICAgICAgICB9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9nZXRjb25maWcKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byByZWFkIGEgY29uZmlnL2luZm8gaXRlbS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglyaWQJCWNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaG9zdCBvcmRlcikKKyoJYnVmCQlob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyoJCQljb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisqCQkJUklEIGFuZCBsZW4pLgorKglsZW4JCWJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoJLUVOT0RBVEEgCWxlbmd0aCBtaXNtYXRjaCBiZXR3ZWVuIGFyZ3VtZW50IGFuZCByZXRyaWV2ZWQKKyoJCQlyZWNvcmQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50IAkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2FjY2VzcyggaHcsIDAsIHJpZCwgYnVmLCBsZW4pOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gd3JpdGUgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChpbiBob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCURCRkVOVEVSOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfYWNjZXNzKCBodywgMSwgcmlkLCBidWYsIGxlbik7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSB0byByZWFkIHRoZSBQREEgc3BhY2UuICBOb3RlIHRoZXJlIGlzIG5vCisqIGRydnJfd3JpdGVwZGEoKSBmdW5jdGlvbi4gIFdyaXRpbmcgYSBQREEgaXMKKyogZ2VuZXJhbGx5IGltcGxlbWVudGVkIGJ5IGEgY2FsbGluZyBjb21wb25lbnQgdmlhIGNhbGxzIHRvCisqIGNtZF9kb3dubG9hZCBhbmQgd3JpdGluZyB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyIHZpYSB0aGUKKyogYXV4IHJlZ3MuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYnVmCQlidWZmZXIgdG8gc3RvcmUgUERBIGluCisqCWxlbgkJYnVmZmVyIGxlbmd0aAorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRVRJTUVPVVQJdGltb3V0IHdhaXRpbmcgZm9yIHRoZSBjbWQgcmVncyB0byBiZWNvbWUKKyoJCQlhdmFpbGFibGUsIG9yIHdhaXRpbmcgZm9yIHRoZSBjb250cm9sIHJlZworKgkJCXRvIGluZGljYXRlIHRoZSBBdXggcG9ydCBpcyBlbmFibGVkLgorKgktRU5PREFUQQl0aGUgYnVmZmVyIGRvZXMgTk9UIGNvbnRhaW4gYSB2YWxpZCBQREEuCisqCQkJRWl0aGVyIHRoZSBjYXJkIFBEQSBpcyBiYWQsIG9yIHRoZSBhdXhkYXRhCisqCQkJcmVhZHMgYXJlIGdpdmluZyB1cyBnYXJiYWdlLgorCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCBvciBub24tY2FyZCBpbnRlcnJ1cHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKmh3LCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCSpwZGEgPSBidWY7CisJaW50CQlwZGFvayA9IDA7CisJaW50CQltb3JlcGRycyA9IDE7CisJaW50CQljdXJycGRyID0gMDsJLyogd29yZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgcGRyICovCisJaW50CQlpOworCVVJTlQxNgkJcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLworCVVJTlQxNgkJcGRyY29kZTsJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KKwlVSU5UMTYJCWNyYzsKKwlVSU5UMTYJCXBkYWNyYzsKKwlzdHJ1Y3QgcGRhbG9jIHsKKwkJVUlOVDMyCWNhcmRhZGRyOworCQlVSU5UMTYJYXV4Y3RsOworCX0gcGRhbG9jW10gPQorCXsKKwkJeyBIRkEzODQyX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX05WfSwKKwkJeyBIRkEzODQyX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX05WfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTfSwKKwkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAlIRkEzODR4X0FVWF9DVExfTlZ9CisJfTsKKworCURCRkVOVEVSOworCS8qIENoZWNrIGZvciBhdXggYXZhaWxhYmxlICovCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsImF1eF9lbmFibGUoKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogUmVhZCB0aGUgcGRhIGZyb20gZWFjaCBrbm93biBhZGRyZXNzLiAgKi8KKwlmb3IgKCBpID0gMDsgaSA8IChzaXplb2YocGRhbG9jKS9zaXplb2YocGRhbG9jWzBdKSk7IGkrKykgeworCQlXTEFOX0xPR19ERUJVRyggMywgIkNoZWNraW5nIFBEQUAoMHglMDh4LCVzKVxuIiwKKwkJCXBkYWxvY1tpXS5jYXJkYWRkciwKKwkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gSEZBMzg0eF9BVVhfQ1RMX05WID8KKwkJCSJDVExfTlYiIDogIkNUTF9FWFREUyIpOworCisJCS8qIENvcHkgYnVmc2l6ZSBieXRlcyBmcm9tIG91ciBjdXJyZW50IHBkYWxvYyAqLworCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsCisJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQlwZGFsb2NbaV0uYXV4Y3RsLAorCQkJYnVmLAorCQkJbGVuKTsKKworCQkvKiBUZXN0IGZvciBnYXJiYWdlICovCisJCS8qIFRyYXZlcnNlIHRoZSBQRFIgbGlzdCBMb29raW5nIGZvciBQREEtRU5EICovCisJCXBkYW9rID0gMTsJLyogaW50aWFsbHkgYXNzdW1lIGdvb2QgKi8KKwkJbW9yZXBkcnMgPSAxOworCQljdXJycGRyID0gMDsKKwkJd2hpbGUgKCBwZGFvayAmJiBtb3JlcGRycyApIHsKKwkJCXBkcmxlbiA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMV0pOworCisJCQkvKiBUZXN0IGZvciBjb21wbGV0aW9uIGF0IEVORCByZWNvcmQgKi8KKwkJCWlmICggcGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBICkgeworCQkJCWlmICggcGRybGVuID09IDQgKSB7CisJCQkJCW1vcmVwZHJzID0gMDsKKwkJCQkJLyogQ2FsY3VsYXRlIENSQy0xNiBhbmQgY29tcGFyZSB0byBQREEKKwkJCQkJICogdmFsdWUuICBOb3RlIHRoZSBhZGRpdGlvbiBvZiAyIHdvcmRzCisJCQkJCSAqIGZvciBFTkRSRUMubGVuIGFuZCBFTkRSRUMuY29kZQorCQkJCQkgKiBmaWVsZHMuCisJCQkJCSAqLworCQkJCQljcmMgPSBoZmEzODR4X21rY3JjMTYoIChVSU5UOCopcGRhLAorCQkJCQkJKGN1cnJwZHIgKyAyKSAqIHNpemVvZihVSU5UMTYpKTsKKwkJCQkJcGRhY3JjID1oZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMl0pOworCQkJCQlpZiAoIGNyYyAhPSBwZGFjcmMgKSB7CisJCQkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkJIlBEQSBjcmMgZmFpbGVkOiIKKwkJCQkJCSJjYWxjX2NyYz0weCUwNHgsIgorCQkJCQkJInBkcl9jcmM9MHglMDR4LlxuIiwKKwkJCQkJCWNyYywgcGRhY3JjKTsKKwkJCQkJCXBkYW9rID0gMDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJCSJFTkQgcmVjb3JkIGRldGVjdGVkIHcvICIKKwkJCQkJImxlbiglZCkgIT0gMiwgYXNzdW1pbmcgYmFkIFBEQVxuIiwKKwkJCQkJcGRybGVuKTsKKwkJCQkJcGRhb2sgPSAwOworCisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBUZXN0IHRoZSByZWNvcmQgbGVuZ3RoICovCisJCQlpZiAoIHBkcmxlbiA+IEhGQTM4NHhfUERSX0xFTl9NQVggfHwgcGRybGVuID09IDApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkicGRybGVuIGZvciBhZGRyZXNzICMlZCAiCisJCQkJCSJhdCAlI3g6JSN4OiVkXG4iLAorCQkJCQlpLCBwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkJCXBkYWxvY1tpXS5hdXhjdGwsIHBkcmxlbik7CisJCQkJV0xBTl9MT0dfREVCVUcoMywicGRybGVuIGludmFsaWQ9JWRcbiIsCisJCQkJCXBkcmxlbik7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IHBkciAqLworCQkJaWYgKCBtb3JlcGRycyApIHsKKwkJCQkvKiBub3RlIHRoZSBhY2Nlc3MgdG8gcGRhW10sIHdlIG5lZWQgd29yZHMgKi8KKwkJCQljdXJycGRyICs9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICsgMTsKKwkJCQlpZiAoY3VycnBkcipzaXplb2YoVUlOVDE2KSA+IGxlbikgeworCQkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkiRGlkbid0IGZpbmQgUERBX0VORCBpbiBidWZmZXIsICIKKwkJCQkJInRyeWluZyBuZXh0IGxvY2F0aW9uLlxuIik7CisJCQkJCXBkYW9rID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICggcGRhb2sgKSB7CisJCQlXTEFOX0xPR19JTkZPKAorCQkJCSJQREEgUmVhZCBmcm9tIDB4JTA4eCBpbiAlcyBzcGFjZS5cbiIsCisJCQkJcGRhbG9jW2ldLmNhcmRhZGRyLAorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMCA/ICJFWFREUyIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMSA/ICJOViIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMiA/ICJQSFkiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDMgPyAiSUNTUkFNIiA6CisJCQkJIjxib2d1cyBhdXhjdGw+Iik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXN1bHQgPSBwZGFvayA/IDAgOiAtRU5PREFUQTsKKworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygzLCJGYWlsdXJlOiBwZGEgaXMgbm90IG9rYXlcbiIpOworCX0KKworCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogbWtwZGFfY3JjCisqCisqIENhbGN1bGF0ZXMgdGhlIENSQzE2IGZvciB0aGUgZ2l2ZW4gUERBIGFuZCBpbnNlcnRzIHRoZSB2YWx1ZQorKiBpbnRvIHRoZSBlbmQgcmVjb3JkLgorKgorKiBBcmd1bWVudHM6CisqCXBkYQlwdHIgdG8gdGhlIFBEQSBkYXRhIHN0cnVjdHVyZS4KKyoKKyogUmV0dXJuczoKKyoJMAktIHN1Y2Nlc3MKKyoJfjAJLSBmYWlsdXJlIChwcm9iYWJseSBhbiBlcnJubykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIFVJTlQxNgoraGZhMzg0eF9ta2NyYzE2KFVJTlQ4ICpwLCBpbnQgbGVuKQoreworCVVJTlQxNgljcmMgPSAwOworCVVJTlQ4CSpsaW0gPSBwICsgbGVuOworCisJd2hpbGUgKHAgPCBsaW0pIHsKKwkJY3JjID0gKGNyYyA+PiA4ICkgXiBjcmMxNnRhYlsoY3JjICYgMHhmZikgXiAqcCsrXTsKKwl9CisKKwlyZXR1cm4gY3JjOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCisqCisqIEJlZ2lucyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCBjYWxscyBjbWRfZG93bmxvYWQgd2l0aCB0aGUKKyogRU5BQkxFX1ZPTEFUSUxFIHN1YmNvbW1hbmQgYW5kIHRoZSBleGVhZGRyIGFyZ3VtZW50LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWV4ZWFkZHIJCXRoZSBjYXJkIGV4ZWN1dGlvbiBhZGRyZXNzIHRoYXQgd2lsbCBiZQorKiAgICAgICAgICAgICAgICAgICAgICAganVtcGVkIHRvIHdoZW4gcmFtZGxfZGlzYWJsZSgpIGlzIGNhbGxlZAorKgkJCShob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCWxvd2FkZHI7CisJVUlOVDE2CQloaWFkZHI7CisJaW50CQlpOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiQ2FuJ3QgZG93bmxvYWQgd2l0aCBhIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlXTEFOX0xPR19ERUJVRygxLCJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEFyZSB3ZSBzdXBwb3NlZCB0byBnbyBpbnRvIGdlbmVzaXMgbW9kZT8gKi8KKwlpZiAoZXhlYWRkciA9PSAweDNmMDAwMCkgeworCQlVSU5UMTYgaW5pdHNlcVsyXSA9IHsgMHhlMTAwLCAweGZmYTEgfTsKKwkJVUlOVDE2IHJlYWRidWZbMl07CisJCVVJTlQ4IGhjciA9IDB4MGY7IC8qIERlZmF1bHQgdG8geDE2IFNSQU0gKi8KKwkJaHctPmlzcmFtMTYgPSAxOworCisJCVdMQU5fTE9HX0RFQlVHKDEsICJEcm9wcGluZyBpbnRvIEdlbmVzaXMgbW9kZVxuIik7CisKKwkJLyogSXNzdWUgY2FyZCByZXNldCBhbmQgZW5hYmxlIGF1eCBwb3J0ICovCisJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDEpOworCisJCS8qIEdlbmVzaXMgc2V0ICovCisJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJICAgIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisKKwkJaGZhMzg0eF9jb3JlcmVzZXQoaHcsIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCBoY3IpOworCisJCS8qIFZhbGlkYXRlIG1lbW9yeSBjb25maWcgKi8KKwkJaGZhMzg0eF9jb3B5X3RvX2F1eChodywgMHg3RTAwMzgsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkgICAgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwkJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LCAweDdFMDAzOCwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLAorCQkJCSAgICByZWFkYnVmLCBzaXplb2YoaW5pdHNlcSkpOworCQlXTEFOX0hFWF9EVU1QKDMsICJyZWFkYmFjayIsIHJlYWRidWYsIHNpemVvZihyZWFkYnVmKSk7CisKKwkJaWYgKG1lbWNtcChpbml0c2VxLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpKSB7CisJCQloY3IgPSAweDFmOyAvKiB4OCBTUkFNICovCisJCQlody0+aXNyYW0xNiA9IDA7CisKKwkJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCSAgICBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOworCQkJaGZhMzg0eF9jb3JlcmVzZXQoaHcsIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaGNyKTsKKworCQkJaGZhMzg0eF9jb3B5X3RvX2F1eChodywgMHg3RTAwMzgsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkJICAgIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCSAgICByZWFkYnVmLCBzaXplb2YoaW5pdHNlcSkpOworCQkJV0xBTl9IRVhfRFVNUCgyLCAicmVhZGJhY2siLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpOworCisJCQlpZiAobWVtY21wKGluaXRzZXEsIHJlYWRidWYsIHNpemVvZihyZWFkYnVmKSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigiR2VuZXNpcyBtb2RlIGZhaWxlZFxuIik7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisKKwkJLyogTm93IHdlJ3JlIGluIGdlbmVzaXMgbW9kZSAqLworCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCWdvdG8gZG9uZTsKKwl9CisJaHctPmJ1ZmluZm8ucGFnZSA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlody0+YnVmaW5mby5sZW4gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ubGVuKTsKKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCSYoaHctPmRsdGltZW91dCkpKSApIHsKKwkJZ290byBkb25lOworCX0KKwlody0+ZGx0aW1lb3V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5kbHRpbWVvdXQpOworCisJLyogRW5hYmxlIHRoZSBhdXggcG9ydCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDApKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwiQXV4IGVuYWJsZSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDYWxsIHRoZSBkb3dubG9hZCgxLGFkZHIpIGZ1bmN0aW9uICovCisJbG93YWRkciA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoZXhlYWRkcik7CisJaGlhZGRyID0gIEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGV4ZWFkZHIpOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfUkFNLAorCQkJbG93YWRkciwgaGlhZGRyLCAwKTsKKwlpZiAoIHJlc3VsdCA9PSAwKSB7CisJCS8qIFNldCB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwkJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRDsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19ERUJVRygxLCJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJCQlsb3dhZGRyLGhpYWRkciwgcmVzdWx0KTsKKwkJLyogRGlzYWJsZSAgdGhlIGF1eCBwb3J0ICovCisJCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKwl9CisKKyBkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgJiYKKwkgICAgICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0dFTkVTSVMgKSApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGh3LT5kbHN0YXRlID09IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTKSB7CisJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwKKwkJCQkgIGh3LT5pc3JhbTE2ID8gMHgwNzogMHgxNyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBhdXggcG9ydCAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKworIGRvbmU6CisJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgUkFNIGRvd25sb2FkIG9mIGEgY2h1bmsgb2YgZGF0YS4gRmlyc3QgY2hlY2tzIHRvIHNlZQorKiB0aGF0IHdlJ3JlIGluIHRoZSBSQU0gZG93bmxvYWQgc3RhdGUsIHRoZW4gdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucworKiB0byAxKSBjb3B5IHRoZSBkYXRhLCAyKSByZWFkYmFjayBhbmQgY29tcGFyZS4gIFRoZSBkb3dubG9hZAorKiBzdGF0ZSBpcyB1bmFmZmVjdGVkLiAgV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHVzaW5nCisqIHRoaXMgZnVuY3Rpb24sIGNhbGwgZHJ2cl9yYW1kbF9kaXNhYmxlKCkgdG8gZW5kIHRoZSBkb3dubG9hZCBzdGF0ZQorKiBhbmQgcmVzdGFydCB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWRhZGRyCQlDYXJkIGFkZHJlc3MgdG8gd3JpdGUgdG8uIChob3N0IG9yZGVyKQorKglidWYJCVB0ciB0byBkYXRhIHRvIHdyaXRlLgorKglsZW4JCUxlbmd0aCBvZiBkYXRhIChob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQ4CQkqdmVyYnVmOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApICYmCisJICAgICAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTICkgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworI2lmIDAKK1dMQU5fSEVYX0RVTVAoMSwgImRsZGF0YSIsIGJ1ZiwgbGVuKTsKKyNlbmRpZgorCS8qIENvcHkgdGhlIGRhdGEgdmlhIHRoZSBhdXggcG9ydCAqLworCWhmYTM4NHhfY29weV90b19hdXgoaHcsIGRhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsIGJ1ZiwgbGVuKTsKKworCS8qIENyZWF0ZSBhIGJ1ZmZlciBmb3IgdGhlIHZlcmlmeSAqLworCXZlcmJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAodmVyYnVmID09IE5VTEwgKSByZXR1cm4gMTsKKworCS8qIFJlYWQgYmFjayBhbmQgY29tcGFyZSAqLworCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywgZGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgdmVyYnVmLCBsZW4pOworCisJaWYgKCBtZW1jbXAoYnVmLCB2ZXJidWYsIGxlbikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsInJhbWRsIHZlcmlmeSBmYWlsZWQhXG4iKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZV9zKHZlcmJ1ZiwgbGVuKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCByZXRyaWV2ZXMgdGhlIGZsYXNoIGRvd25sb2FkCisqIGJ1ZmZlciBsb2NhdGlvbiwgYnVmZmVyIHNpemUsIGFuZCB0aW1lb3V0IGxlbmd0aC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCWk7CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5idWZpbmZvLnBhZ2UgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLm9mZnNldCk7CisJaHctPmJ1ZmluZm8ubGVuID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkmKGh3LT5kbHRpbWVvdXQpKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisKKwkvKiBFbmFibGUgdGhlIGF1eCBwb3J0ICovCisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCkpICkgeworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRDsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBNQUMKKyogZmlybXdhcmUgdG8gcmVzdGFydC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50LCBzbyBJIGRvbid0ICovCisJLyogIGJvdGhlciAgdy8gdGhlIHJldHVybiB2YWx1ZSAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRDsKKworCS8qIERpc2FibGUgdGhlIGF1eCBwb3J0ICovCisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKKyoKKyogUGVyZm9ybXMgYSBGTEFTSCBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgRkxBU0ggZG93bmxvYWQgc3RhdGUsIHRoZW4gc2V0cyB0aGUgZG93bmxvYWQKKyogbW9kZSwgdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucyB0byAxKSBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaAorKiBidWZmZXIsIDIpIHNldHMgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSwgMykgcmVhZGJhY2sgYW5kCisqIGNvbXBhcmUuICBMYXRoZXIgcmluc2UsIHJlcGVhdCBhcyBtYW55IHRpbWVzIGFuIG5lY2Vzc2FyeSB0byBnZXQKKyogYWxsIHRoZSBnaXZlbiBkYXRhIGludG8gZmxhc2guCisqIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZyB0aGlzIGZ1bmN0aW9uIChwb3NzaWJseQorKiByZXBlYXRlZGx5KSwgY2FsbCBkcnZyX2ZsYXNoZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQ4CQkqdmVyYnVmOworCVVJTlQzMgkJZGxidWZhZGRyOworCVVJTlQzMgkJY3VycmxlbjsKKwlVSU5UMzIJCWN1cnJkYWRkcjsKKwlVSU5UMTYJCWRlc3RsbzsKKwlVSU5UMTYJCWRlc3RoaTsKKwlpbnQJCW53cml0ZXM7CisJaW50CQlpOworCisJREJGRU5URVI7CisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBpbiB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIkRvd25sb2FkICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogTmVlZCBhIGZsYXQgYWRkcmVzcyBmb3IgYXJpdGhtZXRpYyAqLworCWRsYnVmYWRkciA9IEhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKAorCQkJaHctPmJ1ZmluZm8ucGFnZSwKKwkJCWh3LT5idWZpbmZvLm9mZnNldCk7CisJdmVyYnVmID0ga21hbGxvYyhody0+YnVmaW5mby5sZW4sIEdGUF9LRVJORUwpOworCisjaWYgMAorV0xBTl9MT0dfV0FSTklORygiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKKyNlbmRpZgorCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgdGltZXMgdG8gdG8gdGhlIGZsYXNoIHByb2cgKi8KKwlud3JpdGVzID0gbGVuIC8gaHctPmJ1ZmluZm8ubGVuOworCW53cml0ZXMgKz0gKGxlbiAlIGh3LT5idWZpbmZvLmxlbikgPyAxIDogMDsKKworCWlmICggdmVyYnVmID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZmxhc2ggdmVyaWZ5IGJ1ZmZlclxuIik7CisJCXJldHVybiAxOworCX0KKwkvKiBGb3IgZWFjaCAqLworCWZvciAoIGkgPSAwOyBpIDwgbndyaXRlczsgaSsrKSB7CisJCS8qIEdldCB0aGUgZGVzdCBhZGRyZXNzIGFuZCBsZW4gKi8KKwkJY3VycmxlbiA9IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpID4gaHctPmJ1ZmluZm8ubGVuID8KKwkJCQlody0+YnVmaW5mby5sZW4gOgorCQkJCShsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOworCQljdXJyZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKKwkJZGVzdGxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihjdXJyZGFkZHIpOworCQlkZXN0aGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShjdXJyZGFkZHIpOworCQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGN1cnJsZW4sIGN1cnJkYWRkcik7CisjaWYgMAorV0xBTl9IRVhfRFVNUCgxLCAiZGxkYXRhIiwgYnVmKyhody0+YnVmaW5mby5sZW4qaSksIGN1cnJsZW4pOworI2VuZGlmCisJCS8qIFNldCB0aGUgZG93bmxvYWQgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OViwKKwkJCQlkZXN0bG8sIGRlc3RoaSwgY3Vycmxlbik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlkZXN0bG8sIGRlc3RoaSwgY3VycmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisJCS8qIGNvcHkgdGhlIGRhdGEgdG8gdGhlIGZsYXNoIGJ1ZmZlciAqLworCQloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCBkbGJ1ZmFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkJYnVmKyhody0+YnVmaW5mby5sZW4qaSksIGN1cnJsZW4pOworCQkvKiBzZXQgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFLCAwLDAsMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWRlc3RsbywgZGVzdGhpLCBjdXJybGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKwkJLyogcmVhZGJhY2sgYW5kIGNvbXBhcmUsIGlmIGZhaWwuLi5iYWlsICovCisJCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywKKwkJCQljdXJyZGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9OViwKKwkJCQl2ZXJidWYsIGN1cnJsZW4pOworCisJCWlmICggbWVtY21wKGJ1ZisoaHctPmJ1ZmluZm8ubGVuKmkpLCB2ZXJidWYsIGN1cnJsZW4pICkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKK2V4aXRfcHJvYzoKKyAgICAgICAgIC8qIERPSCEgVGhpcyBrZnJlZSdzIGZvciB5b3UgTWFyayA6LSkgTXkgZm9yZWhlYWQgaHVydHMuLi4gKi8KKyAgICAgICAgIGtmcmVlKHZlcmJ1Zik7CisKKwkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgaW4gdGhlICdwb3N0LXByb2cnIG1vZGUuICBmbGFzaGRsX2Rpc2FibGUgd2lsbCAqLworCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLworCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbml0aWFsaXplCisqCisqIElzc3VlcyB0aGUgaW5pdGlhbGl6ZSBjb21tYW5kIGFuZCBzZXRzIHRoZSBody0+c3RhdGUgYmFzZWQKKyogb24gdGhlIHJlc3VsdC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCS8qIHdlIGRvbid0IHdhbnQgdG8gYmUgaW50ZXJydXB0ZWQgZHVyaW5nIHRoZSByZXNldCAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0lOVEVOKTsKKwloZmEzODR4X3NldHJlZyhodywgMHhmZmZmLCBIRkEzODR4X0VWQUNLKTsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5JVDsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwl9CisKKyAgICAgICAgaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCisqCisqIFNlbmQgYSBjb21tdGFsbGllcyBpbnF1aXJ5IHRvIHRoZSBNQUMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBhc3luYworKiBjYWxsIHRoYXQgd2lsbCByZXN1bHQgaW4gYW4gaW5mbyBmcmFtZSBhcnJpdmluZyBzb21ldGltZSBsYXRlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK3sKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTlE7CisJY21kLnBhcm0wID0gSEZBMzg0eF9JVF9DT01NVEFMTElFUzsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZW5hYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBhcmUgY3VycmVudGx5CisqIGRpc2FibGVkIG1heSBiZSBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9lbmFibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZiB0aGUKKyogTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9FTkFCTEUpIHwKKwkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2Rpc2FibGUKKyoKKyogSXNzdWVzIHRoZSBkaXNhYmxlIGNvbW1hbmQgdG8gc3RvcCBjb21tdW5pY2F0aW9ucyBvbiBvbmUgb2YKKyogdGhlIE1BQ3MgJ3BvcnRzJy4gIE9ubHkgbWFjcG9ydCAwIGlzIHZhbGlkICBmb3Igc3RhdGlvbnMuCisqIEFQcyBtYXkgYWxzbyBkaXNhYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBoYXZlIGJlZW4KKyogcHJldmlvdXNseSBlbmFibGVkIG1heSBiZSBkaXNhYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMDsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2Rpc2FibGUKKyoKKyogSXNzdWVzIHRoZSBjb21tYW5kIHRvIGRpc2FibGUgYSBwb3J0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUpIHwKKwkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZGlhZ25vc2UKKyoKKyogSXNzdWVzIHRoZSBkaWFnbm9zZSBjb21tYW5kIHRvIHRlc3QgdGhlOiByZWdpc3RlciBpbnRlcmZhY2UsCisqIE1BQyBjb250cm9sbGVyIChpbmNsdWRpbmcgbG9vcGJhY2spLCBFeHRlcm5hbCBSQU0sIE5vbi12b2xhdGlsZQorKiBtZW1vcnkgaW50ZWdyaXR5LCBhbmQgc3ludGhlc2l6ZXJzLiAgRm9sbG93aW5nIGV4ZWN1dGlvbiBvZiB0aGlzCisqIGNvbW1hbmQsIE1BQy9maXJtd2FyZSBhcmUgaW4gdGhlICdpbml0aWFsIHN0YXRlJy4gIFRoZXJlZm9yZSwKKyogdGhlIEluaXRpYWxpemUgY29tbWFuZCBzaG91bGQgYmUgaXNzdWVkIGFmdGVyIHN1Y2Nlc3NmdWwKKyogY29tcGxldGlvbiBvZiB0aGlzIGNvbW1hbmQuICBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZAorKiB3aGVuIHRoZSBNQUMgaXMgaW4gdGhlICdjb21tdW5pY2F0aW9uIGRpc2FibGVkJyBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERJQUdfUEFUVEVSTkEgKChVSU5UMTYpMHhhYWFhKQorI2RlZmluZSBESUFHX1BBVFRFUk5CICgoVUlOVDE2KTB4NTU1NSkKKworaW50IGhmYTM4NHhfY21kX2RpYWdub3NlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RJQUcpOworCWNtZC5wYXJtMCA9IERJQUdfUEFUVEVSTkE7CisJY21kLnBhcm0xID0gRElBR19QQVRURVJOQjsKKwljbWQucGFybTIgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hbGxvY2F0ZQorKgorKiBJc3N1ZXMgdGhlIGFsbG9jYXRlIGNvbW1hbmQgaW5zdHJ1Y3RpbmcgdGhlIGZpcm13YXJlIHRvIGFsbG9jYXRlCisqIGEgJ2ZyYW1lIHN0cnVjdHVyZSBidWZmZXInIGluIE1BQyBjb250cm9sbGVyIFJBTS4gIFRoaXMgY29tbWFuZAorKiBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXN1bHQsIGl0IG9ubHkgaW5pdGlhdGVzIG9uZSBvZiB0aGUgZi93J3MKKyogYXN5bmNocm9ub3VzIHByb2Nlc3NlcyB0byBjb25zdHJ1Y3QgdGhlIGJ1ZmZlci4gIFdoZW4gdGhlCisqIGFsbG9jYXRpb24gaXMgY29tcGxldGUsIGl0IHdpbGwgYmUgaW5kaWNhdGVkIHZpYSB0aGUgQWxsb2MKKyogYml0IGluIHRoZSBFdlN0YXQgcmVnaXN0ZXIgYW5kIHRoZSBGSUQgaWRlbnRpZnlpbmcgdGhlIGFsbG9jYXRlZAorKiBzcGFjZSB3aWxsIGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBBbGxvY0ZJRCByZWdpc3Rlci4gIFNvbWUgY2FyZQorKiBzaG91bGQgYmUgdGFrZW4gd2hlbiB3YWl0aW5nIGZvciB0aGUgQWxsb2MgZXZlbnQuICBJZiBhIFR4IG9yCisqIE5vdGlmeSBjb21tYW5kIHcvIFJlY2xhaW0gaGFzIGJlZW4gcHJldmlvdXNseSBleGVjdXRlZCwgaXQncworKiBwb3NzaWJsZSB0aGUgZmlyc3QgQWxsb2MgZXZlbnQgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoaXMgY29tbWFuZAorKiB3aWxsIGJlIGZvciB0aGUgcmVjbGFpbWVkIGJ1ZmZlciBhbmQgbm90IHRoZSBvbmUgeW91IGFza2VkIGZvci4KKyogVGhpcyBjYXNlIG11c3QgYmUgaGFuZGxlZCBpbiB0aGUgQWxsb2MgZXZlbnQgaGFuZGxlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglsZW4JCWFsbG9jYXRpb24gbGVuZ3RoLCBtdXN0IGJlIGFuIGV2ZW4gdmFsdWUKKyoJCQlpbiB0aGUgcmFuZ2UgWzQtMjQwMF0uIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfYWxsb2NhdGUoaGZhMzg0eF90ICpodywgVUlOVDE2IGxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWlmICggKGxlbiAlIDIpIHx8CisJICAgICBsZW4gPCBIRkEzODR4X0NNRF9BTExPQ19MRU5fTUlOIHx8CisJICAgICBsZW4gPiBIRkEzODR4X0NNRF9BTExPQ19MRU5fTUFYICkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQUxMT0MpOworCQljbWQucGFybTAgPSBsZW47CisJCWNtZC5wYXJtMSA9IDA7CisJCWNtZC5wYXJtMiA9IDA7CisKKwkJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfdHJhbnNtaXQKKyoKKyogSW5zdHJ1Y3RzIHRoZSBmaXJtd2FyZSB0byB0cmFuc21pdCBhIGZyYW1lIHByZXZpb3VzbHkgY29waWVkCisqIHRvIGEgZ2l2ZW4gYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LCB0aGUgVHgKKyogcmVzdWx0cyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgVHggb3IgVHhFeGMgZXZlbnRzIChpZiB0aGUgZnJhbWUKKyogY29udHJvbCBiaXRzIGFyZSBzZXQpLiAgVGhlIHJlY2xhaW0gYXJndW1lbnQgc3BlY2lmaWVzIGlmIHRoZQorKiBGSUQgcGFzc2VkIHdpbGwgYmUgdXNlZCBieSB0aGUgZi93IHR4IHByb2Nlc3Mgb3IgcmV0dXJuZWQgZm9yCisqIHVzZSB3LyBhbm90aGVyIHRyYW5zbWl0IGNvbW1hbmQuICBJZiByZWNsYWltIGlzIHNldCwgZXhwZWN0IGFuCisqIEFsbG9jIGV2ZW50IHNpZ25hbGxpbmcgdGhlIGF2YWlsaWJpbGl0eSBvZiB0aGUgRklEIGZvciByZXVzZS4KKyoKKyogTk9URTogaHctPmNtZGxvY2sgTVVTVCBCRSBIRUxEIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmVjbGFpbQkJWzB8MV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIEZJRCB3aWxsCisqCQkJYmUgaGFuZGVkIGJhY2sgKHZpYSBBbGxvYyBldmVudCkgZm9yIHJldXNlLgorKgkJCShob3N0IG9yZGVyKQorKglxb3MJCVswLTNdIFZhbHVlIHRvIHB1dCBpbiB0aGUgUW9TIGZpZWxkIG9mIHRoZQorKgkJCXR4IGNvbW1hbmQsIGlkZW50aWZpZXMgYSBxdWV1ZSB0byBwbGFjZSB0aGUKKyoJCQlvdXRnb2luZyBmcmFtZSBpbi4KKyoJCQkoaG9zdCBvcmRlcikKKyoJZmlkCQlGSUQgb2YgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZyYW1lIHRoYXQgd2FzCisqCQkJcHJldmlvdXNseSBjb3BpZWQgdG8gTUFDIG1lbW9yeSB2aWEgdGhlIGJhcC4KKyoJCQkoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCWh3LT5yZXNwMCB3aWxsIGNvbnRhaW4gdGhlIEZJRCBiZWluZyB1c2VkIGJ5IGFzeW5jIHR4CisqCXByb2Nlc3MuICBJZiByZWNsYWltPT0wLCByZXNwMCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBmaWQKKyoJYXJndW1lbnQuICBJZiByZWNsYWltPT0xLCByZXNwMCB3aWxsIGJlIHRoZSBkaWZmZXJlbnQgYW5kCisqCWlzIHRoZSB2YWx1ZSB0byB3YXRjaCBmb3IgaW4gdGhlIFR4fFR4RXhjIHRvIGluZGljYXRlIGNvbXBsZXRpb24KKyoJb2YgdGhlIGZyYW1lIHBhc3NlZCBpbiBmaWQuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX3RyYW5zbWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgcW9zLCBVSU5UMTYgZmlkKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfVFgpIHwKKwkJSEZBMzg0eF9DTURfUkVDTF9TRVQocmVjbGFpbSkgfAorCQlIRkEzODR4X0NNRF9RT1NfU0VUKHFvcyk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2NsZWFycGVyc2lzdAorKgorKiBJbnN0cnVjdHMgdGhlIGZpcm13YXJlIHRvIGNsZWFyIHRoZSBwZXJzaXN0ZW5jZSBiaXQgaW4gYSBnaXZlbgorKiBGSUQuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHRlbGxpbmcgdGhlIGZpcm13YXJlIHRvIGRyb3AgdGhlCisqIHBlcnNpc3RlbnQgZnJhbWUuICBUaGUgRklEIG11c3QgYmUgb25lIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZAorKiB0byB0cmFuc21pdCBhIFBSU1QgZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIHBlcnNpc3RlbnQgZnJhbWUgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QoaGZhMzg0eF90ICpodywgVUlOVDE2IGZpZCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQ0xSUFJTVCk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX25vdGlmeQorKgorKiBTZW5kcyBhbiBpbmZvIGZyYW1lIHRvIHRoZSBmaXJtd2FyZSB0byBhbHRlciB0aGUgYmVoYXZpb3IKKyogb2YgdGhlIGYvdyBhc3luY2ggcHJvY2Vzc2VzLiAgQ2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIE1BQworKiBpcyBpbiB0aGUgZW5hYmxlZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglyZWNsYWltCQlbMHwxXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gRklEIHdpbGwKKyoJCQliZSBoYW5kZWQgYmFjayAodmlhIEFsbG9jIGV2ZW50KSBmb3IgcmV1c2UuCisqCQkJKGhvc3Qgb3JkZXIpCisqCWZpZAkJRklEIG9mIGJ1ZmZlciBjb250YWluaW5nIHRoZSBmcmFtZSB0aGF0IHdhcworKgkJCXByZXZpb3VzbHkgY29waWVkIHRvIE1BQyBtZW1vcnkgdmlhIHRoZSBiYXAuCisqCQkJKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKglody0+cmVzcDAgd2lsbCBjb250YWluIHRoZSBGSUQgYmVpbmcgdXNlZCBieSBhc3luYyBub3RpZnkKKyoJcHJvY2Vzcy4gIElmIHJlY2xhaW09PTAsIHJlc3AwIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGZpZAorKglhcmd1bWVudC4gIElmIHJlY2xhaW09PTEsIHJlc3AwIHdpbGwgYmUgdGhlIGRpZmZlcmVudC4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLAorCQkgICAgICAgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTk9USUZZKSB8CisJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHJlY2xhaW0pOworCWNtZC5wYXJtMCA9IGZpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworICAgICAgICAvKiBDb3B5IHRoZSByZWNvcmQgdG8gRklEICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfY29weV90b19iYXAoaHcsIEhGQTM4NHhfQkFQX1BST0MsIGh3LT5pbmZvZmlkLCAwLCBidWYsIGxlbik7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV90b19iYXAoJTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBody0+aW5mb2ZpZCwgbGVuLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisgZmFpbGVkOgorCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworI2lmIDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbnF1aXJ5CisqCisqIFJlcXVlc3RzIGFuIGluZm8gZnJhbWUgZnJvbSB0aGUgZmlybXdhcmUuICBUaGUgaW5mbyBmcmFtZSB3aWxsCisqIGJlIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB2aWEgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIGluZm8gZnJhbWUgcmVxdWVzdGVkLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X2NtZF9pbnF1aXJ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0lOUSk7CisJY21kLnBhcm0wID0gZmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hY2Nlc3MKKyoKKyogUmVxdWVzdHMgdGhhdCBhIGdpdmVuIHJlY29yZCBiZSBjb3BpZWQgdG8vZnJvbSB0aGUgcmVjb3JkCisqIGJ1ZmZlci4gIElmIHdlJ3JlIHdyaXRpbmcgZnJvbSB0aGUgcmVjb3JkIGJ1ZmZlciwgdGhlIGNvbnRlbnRzCisqIG11c3QgcHJldmlvdXNseSBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgcmVjb3JkIGJ1ZmZlciB2aWEgdGhlCisqIGJhcC4gIElmIHdlJ3JlIHJlYWRpbmcgaW50byB0aGUgcmVjb3JkIGJ1ZmZlciwgdGhlIHJlY29yZCBjYW4KKyogYmUgcmVhZCBvdXQgb2YgdGhlIHJlY29yZCBidWZmZXIgYWZ0ZXIgdGhpcyBjYWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXdyaXRlCQlbMHwxXSBjb3B5IHRoZSByZWNvcmQgYnVmZmVyIHRvIHRoZSBnaXZlbgorKgkJCWNvbmZpZ3VyYXRpb24gcmVjb3JkLiAoaG9zdCBvcmRlcikKKyoJcmlkCQlSSUQgb2YgdGhlIHJlY29yZCB0byByZWFkL3dyaXRlLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyoJCQljb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisqCQkJUklEIGFuZCBsZW4pLgorKglsZW4JCWJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2FjY2VzcyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgd3JpdGUsIFVJTlQxNiByaWQsCisJCSAgICAgICB2b2lkKiBidWYsIFVJTlQxNiBsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCWhmYTM4NHhfcmVjX3QJcmVjOworCisJREJGRU5URVI7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKwkvKiBUaGlzIHNob3VsZCBOT1QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0ISAqLworCWlmIChpbl9pcnEoKSkgeworCQlXTEFOX0xPR19FUlJPUigiS3JhcCwgaW4gSW50ZXJydXB0IGNvbnRleHQhIik7CisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCisJCUJVRygpOworI2VuZGlmCisJfQorI2VuZGlmCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlpZiAod3JpdGUpIHsKKwkJcmVjLnJpZCA9IGhvc3QyaGZhMzg0eF8xNihyaWQpOworCQlyZWMucmVjbGVuID0gaG9zdDJoZmEzODR4XzE2KChsZW4vMikgKyAxKTsgLyogbm90ZSBjb252ZXJzaW9uIHRvIHdvcmRzLCArMSBmb3IgcmlkIGZpZWxkICovCisJCS8qIHdyaXRlIHRoZSByZWNvcmQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X3RvX2JhcDQoIGh3LCBIRkEzODR4X0JBUF9QUk9DLCByaWQsIDAsCisJCQkJCSAgICAgICAmcmVjLCBzaXplb2YocmVjKSwKKwkJCQkJICAgICAgIGJ1ZiwgbGVuLAorCQkJCQkgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMywiRmFpbHVyZSB3cml0aW5nIHJlY29yZCBoZWFkZXIrZGF0YVxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCX0KKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfQUNDRVNTKSB8CisJCUhGQTM4NHhfQ01EX1dSSVRFX1NFVCh3cml0ZSk7CisJY21kLnBhcm0wID0gcmlkOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJDYWxsIHRvIGhmYTM4NHhfZG9jbWRfd2FpdCBmYWlsZWQgKCVkICVkKVxuIiwKKwkJCQlyZXN1bHQsIGNtZC5yZXN1bHQucmVzcDApOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCF3cml0ZSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoIGh3LCBIRkEzODR4X0JBUF9QUk9DLCByaWQsIDAsICZyZWMsIHNpemVvZihyZWMpKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygzLCJDYWxsIHRvIGhmYTM4NHhfY29weV9mcm9tX2JhcCBmYWlsZWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJLyogVmFsaWRhdGUgdGhlIHJlY29yZCBsZW5ndGggKi8KKwkJaWYgKCAoKGhmYTM4NHgyaG9zdF8xNihyZWMucmVjbGVuKS0xKSoyKSAhPSBsZW4gKSB7ICAvKiBub3RlIGJvZHkgbGVuIGNhbGN1bGF0aW9uIGluIGJ5dGVzICovCisJCQlXTEFOX0xPR19ERUJVRygxLCAiUklEIGxlbiBtaXNtYXRjaCwgcmlkPTB4JTA0eCBobGVuPSVkIGZ3bGVuPSVkXG4iLAorCQkJCQlyaWQsIGxlbiwgKGhmYTM4NHgyaG9zdF8xNihyZWMucmVjbGVuKS0xKSoyKTsKKwkJCXJlc3VsdCA9IC1FTk9EQVRBOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywgSEZBMzg0eF9CQVBfUFJPQywgcmlkLCBzaXplb2YocmVjKSwgYnVmLCBsZW4pOworCisJfQorCisgZmFpbDoKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfbW9uaXRvcgorKgorKiBFbmFibGVzIHRoZSAnbW9uaXRvciBtb2RlJyBvZiB0aGUgTUFDLiAgSGVyZSdzIHRoZSBkZXNjcmlwdGlvbiBvZgorKiBtb25pdG9yIG1vZGUgdGhhdCBJJ3ZlIHJlY2VpdmVkIHRodXMgZmFyOgorKgorKiAgIlRoZSAibW9uaXRvciBtb2RlIiBvZiBvcGVyYXRpb24gaXMgdGhhdCB0aGUgTUFDIHBhc3NlcyBhbGwKKyogIGZyYW1lcyBmb3Igd2hpY2ggdGhlIFBMQ1AgY2hlY2tzIGFyZSBjb3JyZWN0LiBBbGwgcmVjZWl2ZWQKKyogIE1QRFVzIGFyZSBwYXNzZWQgdG8gdGhlIGhvc3Qgd2l0aCBNQUMgUG9ydCA9IDcsIHdpdGggYQorKiAgcmVjZWl2ZSBzdGF0dXMgb2YgZ29vZCwgRkNTIGVycm9yLCBvciB1bmRlY3J5cHRhYmxlLiBQYXNzaW5nCisqICBjZXJ0YWluIE1QRFVzIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSA4MDIuMTEgc3RhbmRhcmQsIGJ1dCB1c2VmdWwKKyogIGZvciBhIGRlYnVnZ2luZyB0b29sLiIgIE5vcm1hbCBjb21tdW5pY2F0aW9uIGlzIG5vdCBwb3NzaWJsZQorKiAgd2hpbGUgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZW5hYmxlCQlhIGNvZGUgKDB4MGJ8MHgwZikgdGhhdCBlbmFibGVzL2Rpc2FibGVzCisqCQkJbW9uaXRvciBtb2RlLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgVUlOVDE2IGVuYWJsZSkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTU9OSVRPUikgfAorCQlIRkEzODR4X0NNRF9BSU5GT19TRVQoZW5hYmxlKTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZG93bmxvYWQKKyoKKyogU2V0cyB0aGUgY29udHJvbHMgZm9yIHRoZSBNQUMgY29udHJvbGxlciBjb2RlL2RhdGEgZG93bmxvYWQKKyogcHJvY2Vzcy4gIFRoZSBhcmd1bWVudHMgc2V0IHRoZSBtb2RlIGFuZCBhZGRyZXNzIGFzc29jaWF0ZWQKKyogd2l0aCBhIGRvd25sb2FkLiAgTm90ZSB0aGF0IHRoZSBhdXggcmVnaXN0ZXJzIHNob3VsZCBiZSBlbmFibGVkCisqIHByaW9yIHRvIHNldHRpbmcgb25lIG9mIHRoZSBkb3dubG9hZCBlbmFibGUgbW9kZXMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJMCAtIERpc2FibGUgcHJvZ3JhbW1pbmcgYW5kIGJlZ2luIGNvZGUgZXhlYworKgkJCTEgLSBFbmFibGUgdm9sYXRpbGUgbWVtIHByb2dyYW1taW5nCisqCQkJMiAtIEVuYWJsZSBub24tdm9sYXRpbGUgbWVtIHByb2dyYW1taW5nCisqCQkJMyAtIFByb2dyYW0gbm9uLXZvbGF0aWxlIHNlY3Rpb24gZnJvbSBOViBkb3dubG9hZAorKgkJCSAgICBidWZmZXIuCisqCQkJKGhvc3Qgb3JkZXIpCisqCWxvd2FkZHIKKyoJaGlnaGFkZHIJRm9yIG1vZGUgMSwgc2V0cyB0aGUgaGlnaCAmIGxvdyBvcmRlciBiaXRzIG9mCisqCQkJdGhlICJkZXN0aW5hdGlvbiBhZGRyZXNzIi4gIFRoaXMgYWRkcmVzcyB3aWxsIGJlCisqCQkJdGhlIGV4ZWN1dGlvbiBzdGFydCBhZGRyZXNzIHdoZW4gZG93bmxvYWQgaXMKKyoJCQlzdWJzZXF1ZW50bHkgZGlzYWJsZWQuCisqCQkJRm9yIG1vZGUgMiwgc2V0cyB0aGUgaGlnaCAmIGxvdyBvcmRlciBiaXRzIG9mCisqCQkJdGhlIGRlc3RpbmF0aW9uIGluIE5WIHJhbS4KKyoJCQlGb3IgbW9kZXMgMCAmIDMsIHNob3VsZCBiZSB6ZXJvLiAoaG9zdCBvcmRlcikKKyoJCQlOT1RFOiB0aGVzZSBhZGRyZXNzIGFyZ3MgYXJlIGluIENNRCBmb3JtYXQKKyoJY29kZWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHdyaXRlIGluIG1vZGUgMiwKKyoJCQl6ZXJvIG90aGVyd2lzZS4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgbW9kZSwgVUlOVDE2IGxvd2FkZHIsCisJCQkJVUlOVDE2IGhpZ2hhZGRyLCBVSU5UMTYgY29kZWxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRE9XTkxEKSB8CisJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVChtb2RlKTsKKwljbWQucGFybTAgPSBsb3dhZGRyOworCWNtZC5wYXJtMSA9IGhpZ2hhZGRyOworCWNtZC5wYXJtMiA9IGNvZGVsZW47CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RsX2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2F1eF9lbmFibGUKKyoKKyogR29lcyB0aHJvdWdoIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIHRoZSBhdXhpbGFyeSBwb3J0LiAgVGhpcworKiBpcyBuZWNlc3NhcnkgcHJpb3IgdG8gcmF3IHJlYWRzL3dyaXRlcyB0byBjYXJkIGRhdGEgc3BhY2UuCisqIERpcmVjdCBhY2Nlc3MgdG8gdGhlIGNhcmQgZGF0YSBzcGFjZSBpcyBvbmx5IHVzZWQgZm9yIGRvd25sb2FkaW5nCisqIGNvZGUgYW5kIGRlYnVnZ2luZy4KKyogTm90ZSB0aGF0IGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSBhdHRlbXB0aW5nCisqIGEgZG93bmxvYWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dCkKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSkKK3sKKwlpbnQJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlVSU5UMzIJCXJldHJpZXNfcmVtYWluaW5nOworCVVJTlQxNgkJcmVnOworCVVJTlQJCWF1eGVuX21pcnJvciA9IGh3LT5hdXhlbjsKKworCURCRkVOVEVSOworCisJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGVuYWJsZSAqLworCWlmICggaHctPmF1eGVuICkgeworCQlody0+YXV4ZW4rKzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWNxdWlyZSB0aGUgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCAmKGh3LT5jbWRsb2NrKSwgZmxhZ3MpOworCS8qIHdhaXQgZm9yIGNtZCByZWdpc3RlciBidXN5IGJpdCB0byBjbGVhciAqLworCXJldHJpZXNfcmVtYWluaW5nID0gMTAwMDAwOworCWRvIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJd2hpbGUgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIC0tcmV0cmllc19yZW1haW5pbmcpOworCWlmIChyZXRyaWVzX3JlbWFpbmluZyAhPSAwKSB7CisJCS8qIGJ1c3kgYml0IGNsZWFyLCBpdCdzIE9LIHRvIHdyaXRlIHRvIFBhcmFtWCByZWdzICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0FVWFBXMCwKKwkJCUhGQTM4NHhfUEFSQU0wKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfQVVYUFcxLAorCQkJSEZBMzg0eF9QQVJBTTEpOworCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9BVVhQVzIsCisJCQlIRkEzODR4X1BBUkFNMik7CisKKwkJLyogU2V0IHRoZSBhdXggZW5hYmxlIGluIHRoZSBDb250cm9sIHJlZ2lzdGVyICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0NPTlRST0xfQVVYX0RPRU5BQkxFLAorCQkJSEZBMzg0eF9DT05UUk9MKTsKKworCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQlyZXRyaWVzX3JlbWFpbmluZyA9IDEwMDAwMDsKKwkJZG8geworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTCk7CisJCQl1ZGVsYXkoMTApOworCQl9CisJCXdoaWxlICggKChyZWcgJiAoQklUMTR8QklUMTUpKSAhPSBIRkEzODR4X0NPTlRST0xfQVVYX0lTRU5BQkxFRCkgJiYKKwkJCS0tcmV0cmllc19yZW1haW5pbmcgKTsKKwkJaWYgKHJldHJpZXNfcmVtYWluaW5nICE9IDApIHsKKwkJCXJlc3VsdCA9IDA7CisJCQlody0+YXV4ZW4rKzsKKwkJfQorCX0KKworCS8qIEZvcmNlIGl0IGVuYWJsZWQgZXZlbiBpZiB0aGUgY29tbWFuZCBmYWlsZWQsIGlmIHRvbGQuLiAqLworCWlmICgoaHctPmF1eGVuID09IGF1eGVuX21pcnJvcikgJiYgZm9yY2UpCisJCWh3LT5hdXhlbisrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+Y21kbG9jayksIGZsYWdzKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2F1eF9kaXNhYmxlCisqCisqIEdvZXMgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBkaXNhYmxpbmcgdGhlIGF1eGlsYXJ5IHBvcnQKKyogZW5hYmxlZCB3aXRoIGF1eF9lbmFibGUoKS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0KQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQgPSAtRVRJTUVET1VUOworCXVuc2lnbmVkIGxvbmcgICB0aW1lb3V0OworCVVJTlQxNgkJcmVnID0gMDsKKworCURCRkVOVEVSOworCisJLyogU2VlIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBlbmFibGUgKi8KKwlpZiAoaHctPmF1eGVuKSBody0+YXV4ZW4tLTsKKwlpZiAoaHctPmF1eGVuKSByZXR1cm4gMDsKKworCS8qIENsZWFyIHRoZSBhdXggZW5hYmxlIGluIHRoZSBDb250cm9sIHJlZ2lzdGVyICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDAsIEhGQTM4NHhfUEFSQU0wKTsKKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9QQVJBTTEpOworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X1BBUkFNMik7CisJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTF9BVVhfRE9ESVNBQkxFLAorCQlIRkEzODR4X0NPTlRST0wpOworCisJLyogTm93IHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDEqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTCk7CisJd2hpbGUgKCAoKHJlZyAmIChCSVQxNHxCSVQxNSkpICE9IEhGQTM4NHhfQ09OVFJPTF9BVVhfSVNESVNBQkxFRCkgJiYKKwkJdGltZV9iZWZvcmUoamlmZmllcyx0aW1lb3V0KSApeworCQl1ZGVsYXkoMTApOworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9DT05UUk9MKTsKKwl9CisJaWYgKChyZWcgJiAoQklUMTR8QklUMTUpKSA9PSBIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQgKSB7CisJCXJlc3VsdCA9IDA7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwKKyoKKyogV3JpdGUgdGVzdCBjb21tYW5kcyB0byB0aGUgY2FyZC4gIFNvbWUgdGVzdCBjb21tYW5kcyBkb24ndCBtYWtlCisqIHNlbnNlIHdpdGhvdXQgcHJpb3Igc2V0LXVwLiAgRm9yIGV4YW1wbGUsIGNvbnRpbm91cyBUWCBpc24ndCB2ZXJ5CisqIHVzZWZ1bCB1bnRpbCB5b3Ugc2V0IHRoZSBjaGFubmVsLiAgVGhhdCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICBwcm9jZXNzIHRocmVhZAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludCAgICAgICAgICAgICByZXN1bHQgPSAwOworCURCRkVOVEVSOworCisJLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisjaWYgMAorCXByaW50ayhLRVJOX0lORk8gIiUjeCAlI3ggJSN4ICUjeFxuIiwgY21kLT5jbWQsIGNtZC0+cGFybTAsIGNtZC0+cGFybTEsIGNtZC0+cGFybTIpOworI2VuZGlmCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogVE9ETzogZGV0ZXJtaW5lIGlmIHRoZXNlIHdpbGwgZXZlciBiZSBuZWVkZWQgKi8KKyNpZiAwCitpbnQgaGZhMzg0eF9jbWRfcmVhZG1pZihoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGhmYTM4NHhfY21kX3dyaXRlbWlmKGhmYTM4NHhfdCAqaHcpCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX21taV9yZWFkCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgcmVnaXN0ZXIgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyICpyZXNwKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKyAgICAgICAgREJGRU5URVI7CisJY21kLmNtZCA9IChVSU5UMTYpIDB4MzA7CisJY21kLnBhcm0wID0gKFVJTlQxNikgYWRkcjsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJKnJlc3AgPSAoVUlOVDMyKSBjbWQucmVzdWx0LnJlc3AwOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3dyaXRlCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgYWRkciAgICAgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqICAgICAgIGRhdGEgICAgICAgICAgICBUaGUgZGF0YSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiBkYXRhKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKyAgICAgICAgREJGRU5URVI7CisJY21kLmNtZCA9IChVSU5UMTYpIDB4MzE7CisJY21kLnBhcm0wID0gKFVJTlQxNikgYWRkcjsKKwljbWQucGFybTEgPSAoVUlOVDE2KSBkYXRhOworCWNtZC5wYXJtMiA9IDA7CisKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogYWRkciA9IDB4JTA4eFxuIiwgYWRkcik7CisgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsIm1taSB3cml0ZSA6IGRhdGEgPSAweCUwOHhcbiIsIGRhdGEpOworCisgICAgICAgIC8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRPRE86IGRldGVybWluZSBpZiB0aGVzZSB3aWxsIGV2ZXIgYmUgbmVlZGVkICovCisjaWYgMAoraW50IGhmYTM4NHhfY21kX3JlYWRtaWYoaGZhMzg0eF90ICpodykKK3sKKyAgICAgICAgREJGRU5URVI7CisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisKK2ludCBoZmEzODR4X2NtZF93cml0ZW1pZihoZmEzODR4X3QgKmh3KQoreworICAgICAgICBEQkZFTlRFUjsKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfZnJvbV9iYXAKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyBmcm9tIHRoZSBNQUMgY29udHJvbGxlciBtZW1vcnkgdmlhCisqIG9uZSBzZXQgb2YgQkFQIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgliYXAJCVswfDFdIHdoaWNoIEJBUCB0byB1c2UKKyoJaWQJCUZJRCBvciBSSUQsIGRlc3RpbmVkIGZvciB0aGUgc2VsZWN0IHJlZ2lzdGVyIChob3N0IG9yZGVyKQorKglvZmZzZXQJCUFuIF9ldmVuXyBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4KKyoJCQlGSUQvUklELiAgV2UgaGF2ZW4ndCB0aGUgbWVhbnMgdG8gdmFsaWRhdGUgdGhpcywKKyoJCQlzbyBiZSBjYXJlZnVsLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlwdHIgdG8gYXJyYXkgb2YgYnl0ZXMKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciBpbiBieXRlcworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIHZhbHVlIG9mIG9mZnNldCByZWcuCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBiYXAsIFVJTlQxNiBpZCwgVUlOVDE2IG9mZnNldCwKKwkJCQl2b2lkICpidWYsIFVJTlQgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzID0gMDsKKwlVSU5UOAkJKmQgPSAoVUlOVDgqKWJ1ZjsKKwlVSU5UCQlzZWxlY3RyZWc7CisJVUlOVAkJb2Zmc2V0cmVnOworCVVJTlQJCWRhdGFyZWc7CisJVUlOVAkJaTsKKwlVSU5UMTYJCXJlZyA9IDA7CisKKwlEQkZFTlRFUjsKKworCS8qIFZhbGlkYXRlIGJhcCwgb2Zmc2V0LCBidWYsIGFuZCBsZW4gKi8KKwlpZiAoIChiYXAgPiAxKSB8fAorCSAgICAgKG9mZnNldCA+IEhGQTM4NHhfQkFQX09GRlNFVF9NQVgpIHx8CisJICAgICAob2Zmc2V0ICUgMikgfHwKKwkgICAgIChidWYgPT0gTlVMTCkgfHwKKwkgICAgIChsZW4gPiBIRkEzODR4X0JBUF9EQVRBTEVOX01BWCkgKXsKKwkgICAgIAlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXNlbGVjdHJlZyA9IChiYXAgPT0gMSkgPyAgSEZBMzg0eF9TRUxFQ1QxIDogSEZBMzg0eF9TRUxFQ1QwIDsKKwkJb2Zmc2V0cmVnID0gKGJhcCA9PSAxKSA/ICBIRkEzODR4X09GRlNFVDEgOiBIRkEzODR4X09GRlNFVDAgOworCQlkYXRhcmVnID0gICAoYmFwID09IDEpID8gIEhGQTM4NHhfREFUQTEgOiBIRkEzODR4X0RBVEEwIDsKKworCQkvKiBPYnRhaW4gbG9jayAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKworCQkvKiBXcml0ZSBpZCB0byBzZWxlY3QgcmVnICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBpZCwgc2VsZWN0cmVnKTsKKwkJLyogV3JpdGUgb2Zmc2V0IHRvIG9mZnNldCByZWcgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIG9mZnNldCwgb2Zmc2V0cmVnKTsKKwkJLyogV2FpdCBmb3Igb2Zmc2V0W2J1c3ldIHRvIGNsZWFyIChzZWUgQkFQX1RJTUVPVVQpICovCisJCWkgPSAwOworCQlkbyB7CisJCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgb2Zmc2V0cmVnKTsKKwkJCWlmICggaSA+IDAgKSB1ZGVsYXkoMTApOworCQkJaSsrOworCQl9IHdoaWxlICggaSA8IHByaXNtMl9iYXBfdGltZW91dCAmJiBIRkEzODR4X09GRlNFVF9JU0JVU1kocmVnKSk7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fUENJKQorCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJCWlmICggSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykgKXsKKwkJCS8qIElmIHRpbWVvdXQsIHJldHVybiAtRVRJTUVET1VUICovCisJCQlyZXN1bHQgPSByZWc7CisJCX0gZWxzZSBpZiAoIEhGQTM4NHhfT0ZGU0VUX0lTRVJSKHJlZykgKXsKKwkJCS8qIElmIG9mZnNldFtlcnJdID09IDEsIHJldHVybiAtRUlOVkFMICovCisJCQlyZXN1bHQgPSByZWc7CisJCX0gZWxzZSB7CisJCQkvKiBSZWFkIGV2ZW4obGVuKSBidWYgY29udGVudHMgZnJvbSBkYXRhIHJlZyAqLworCQkJZm9yICggaSA9IDA7IGkgPCAobGVuICYgMHhmZmZlKTsgaSs9MiApIHsKKwkJCQkqKFVJTlQxNiopKCYoZFtpXSkpID0KKwkJCQkJaGZhMzg0eF9nZXRyZWdfbm9zd2FwKGh3LCBkYXRhcmVnKTsKKwkJCX0KKwkJCS8qIElmIGxlbiBvZGQsIGhhbmRsZSBsYXN0IGJ5dGUgKi8KKwkJCWlmICggbGVuICUgMiApeworCQkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnX25vc3dhcChodywgZGF0YXJlZyk7CisJCQkJZFtsZW4tMV0gPSAoKFVJTlQ4KikoJnJlZykpWzBdOworCQkJfQorCQl9CisKKwkJLyogQWNjb3JkaW5nIHRvIEludGVyc2lsIGVycmF0YSBkYXRlZCA5LzE2LzAyOgorCisJCSJJbiBQUklTTSBQQ0kgTUFDIGhvc3QgaW50ZXJmYWNlLCBpZiBib3RoIEJBUHMgYXJlIGNvbmN1cnJlbnRseQorCQkgcmVxdWVzaW5nIG1lbW9yeSBhY2Nlc3MsIGJvdGggd2lsbCBhY2NlcHQgdGhlIEFjay4gICBUaGVyZSBpcyBubworCQkgZmlybXdhcmUgd29ya2Fyb3VuZCBwb3NzaWJsZS4gIFRvIHByZXZlbnQgQkFQIGFjY2VzcyBmYWlsdXJlcyBvcgorCQkgaGFuZyBjb25kaXRpb25zIHRoZSBob3N0IE1VU1QgTk9UIGFjY2VzcyBib3RoIEJBUHMgaW4gc3VjZXNzaW9uCisJCSB1bmxlc3MgYXQgbGVhc3QgNXVzIGVsYXBzZXMgYmV0d2VlbiBhY2Nlc3Nlcy4gIFRoZSBzYWZlc3QgY2hvaWNlCisJCSBpcyB0byBVU0UgT05MWSBPTkUgQkFQIGZvciBhbGwgZGF0YSBtb3ZlbWVudCBvcGVyYXRpb25zLiIKKworCQkgV2hhdCB0aGlzIG1lYW5zOgorCisJCSBXZSBoYXZlIHRvIHNlcmlhbGl6ZSBBTEwgQkFQIGFjY2Vzc2VzLCBhbmQgZnVydGhlcm1vcmUsIGFkZCBhIDV1cworCQkgZGVsYXkgYWZ0ZXIgYWNjZXNzIGlmIHdlJ3JlIHVzaW5nIGEgUENJIHBsYXRmb3JtLgorCisJCSBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbG9jayBvdXQgaW50ZXJydXB0cyB0aHJvdWdvdXQKKwkJIHRoZSBlbnRpcmUgQkFQIGNvcHkuCisKKwkJIEl0IHJlbWFpbnMgdG8gYmUgc2VlbiBpZiAiQkFQIGFjY2VzcyIgbWVhbnMgIkJBUCBzZXR1cCIgb3IgdGhlIG1vcmUKKwkJIGxpdGVyYWwgZGVmaW5pdGlvbiBvZiAiY29weWluZyBkYXRhIGJhY2sgYW5kIGZvcnRoIiAgSSdtIGVycmluZyBmb3IKKwkJIHRoZSBsYXR0ZXIsIHNhZmVyIGRlZmluaXRpb24uICAtLSBTTFAuCisKKwkJKi8KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwkJdWRlbGF5KDUpOworCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJfQorCisJaWYgKHJlc3VsdCkgeworCSAgV0xBTl9MT0dfREVCVUcoMSwKKwkJCSAgImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCSAgcmVnLCBsZW4sIHJlc3VsdCk7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X3RvX2JhcAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIHRvIHRoZSBNQUMgY29udHJvbGxlciBtZW1vcnkgdmlhCisqIG9uZSBzZXQgb2YgQkFQIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgliYXAJCVswfDFdIHdoaWNoIEJBUCB0byB1c2UKKyoJaWQJCUZJRCBvciBSSUQsIGRlc3RpbmVkIGZvciB0aGUgc2VsZWN0IHJlZ2lzdGVyIChob3N0IG9yZGVyKQorKglvZmZzZXQJCUFuIF9ldmVuXyBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4KKyoJCQlGSUQvUklELiAgV2UgaGF2ZW4ndCB0aGUgbWVhbnMgdG8gdmFsaWRhdGUgdGhpcywKKyoJCQlzbyBiZSBjYXJlZnVsLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlwdHIgdG8gYXJyYXkgb2YgYnl0ZXMKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gdmFsdWUgb2Ygb2Zmc2V0IHJlZy4KKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBiYXAsIFVJTlQxNiBpZCwgVUlOVDE2IG9mZnNldCwKKwkJCQl2b2lkICpidWYsIFVJTlQgbGVuKQoreworCXJldHVybiBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgYmFwLCBpZCwgb2Zmc2V0LCBidWYsIGxlbiwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCk7Cit9CisKK2ludCBoZmEzODR4X2NvcHlfdG9fYmFwNChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkgdm9pZCAqYnVmLCBVSU5UIGxlbjEsIHZvaWQqIGJ1ZjIsIFVJTlQgbGVuMiwKKwkJCSB2b2lkICpidWYzLCBVSU5UIGxlbjMsIHZvaWQgKmJ1ZjQsIFVJTlQgbGVuNCkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFncyA9IDA7CisJVUlOVDgJCSpkOworCVVJTlQJCXNlbGVjdHJlZzsKKwlVSU5UCQlvZmZzZXRyZWc7CisJVUlOVAkJZGF0YXJlZzsKKwlVSU5UCQlpOworCVVJTlQxNgkJcmVnOworCisJREJGRU5URVI7CisKKy8vCXByaW50ayhLRVJOX0RFQlVHICJjdGIxICVkIGlkICUwNHggbyAlZCAlZCAlZCAlZCAlZFxuIiwgYmFwLCBpZCwgb2Zmc2V0LCBsZW4xLCBsZW4yLCBsZW4zLCBsZW40KTsKKworCS8qIFZhbGlkYXRlIGJhcCwgb2Zmc2V0LCBidWYsIGFuZCBsZW4gKi8KKwlpZiAoIChiYXAgPiAxKSB8fAorCSAgICAgKG9mZnNldCA+IEhGQTM4NHhfQkFQX09GRlNFVF9NQVgpIHx8CisJICAgICAob2Zmc2V0ICUgMikgfHwKKwkgICAgIChidWYgPT0gTlVMTCkgfHwKKwkgICAgIChsZW4xK2xlbjIrbGVuMytsZW40ID4gSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgpICl7CisJICAgICAJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlzZWxlY3RyZWcgPSAoYmFwID09IDEpID8gSEZBMzg0eF9TRUxFQ1QxIDogSEZBMzg0eF9TRUxFQ1QwOworCQlvZmZzZXRyZWcgPSAoYmFwID09IDEpID8gSEZBMzg0eF9PRkZTRVQxIDogSEZBMzg0eF9PRkZTRVQwOworCQlkYXRhcmVnID0gICAoYmFwID09IDEpID8gSEZBMzg0eF9EQVRBMSAgIDogSEZBMzg0eF9EQVRBMDsKKwkJLyogT2J0YWluIGxvY2sgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisKKwkJLyogV3JpdGUgaWQgdG8gc2VsZWN0IHJlZyAqLworCQloZmEzODR4X3NldHJlZyhodywgaWQsIHNlbGVjdHJlZyk7CisJCXVkZWxheSgxMCk7CisJCS8qIFdyaXRlIG9mZnNldCB0byBvZmZzZXQgcmVnICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBvZmZzZXQsIG9mZnNldHJlZyk7CisJCS8qIFdhaXQgZm9yIG9mZnNldFtidXN5XSB0byBjbGVhciAoc2VlIEJBUF9USU1FT1VUKSAqLworCQlpID0gMDsKKwkJZG8geworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIG9mZnNldHJlZyk7CisJCQlpZiAoIGkgPiAwICkgdWRlbGF5KDEwKTsKKwkJCWkrKzsKKwkJfSB3aGlsZSAoIGkgPCBwcmlzbTJfYmFwX3RpbWVvdXQgJiYgSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykpOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fUENJKQorCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJCWlmICggSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykgKXsKKwkJCS8qIElmIHRpbWVvdXQsIHJldHVybiByZWcgKi8KKwkJCXJlc3VsdCA9IHJlZzsKKwkJfSBlbHNlIGlmICggSEZBMzg0eF9PRkZTRVRfSVNFUlIocmVnKSApeworCQkJLyogSWYgb2Zmc2V0W2Vycl0gPT0gMSwgcmV0dXJuIHJlZyAqLworCQkJcmVzdWx0ID0gcmVnOworCQl9IGVsc2UgeworCQkJZCA9IChVSU5UOCopYnVmOworCQkJLyogV3JpdGUgZXZlbihsZW4xKSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjEgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywKKwkJCQkJKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQl9CisJCQlpZiAobGVuMSAmIDEpIHsKKwkJCQlVSU5UMTYgZGF0YTsKKwkJCQlVSU5UOCAqYiA9IChVSU5UOCAqKSAmZGF0YTsKKwkJCQliWzBdID0gZFtsZW4xLTFdOworCQkJCWlmIChidWYyICE9IE5VTEwpIHsKKwkJCQkJZCA9IChVSU5UOCopYnVmMjsKKwkJCQkJYlsxXSA9IGRbMF07CisJCQkJCWxlbjItLTsKKwkJCQkJYnVmMisrOworCQkJCX0KKwkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJfQorCQkJaWYgKChidWYyICE9IE5VTEwpICYmIChsZW4yID4gMCkpIHsKKwkJCQkvKiBXcml0ZSBldmVuKGxlbjIpIGJ1ZiBjb250ZW50cyB0byBkYXRhIHJlZyAqLworCQkJCWQgPSAoVUlOVDgqKWJ1ZjI7CisJCQkJZm9yICggaSA9IDA7IGkgPCAobGVuMiAmIDB4ZmZmZSk7IGkrPTIgKSB7CisJCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywgKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQkJfQorCQkJCWlmIChsZW4yICYgMSkgeworCQkJCQlVSU5UMTYgZGF0YTsKKwkJCQkJVUlOVDggKmIgPSAoVUlOVDggKikgJmRhdGE7CisJCQkJCWJbMF0gPSBkW2xlbjItMV07CisJCQkJCWlmIChidWYzICE9IE5VTEwpIHsKKwkJCQkJCWQgPSAoVUlOVDgqKWJ1ZjM7CisJCQkJCQliWzFdID0gZFswXTsKKwkJCQkJCWxlbjMtLTsKKwkJCQkJCWJ1ZjMrKzsKKwkJCQkJfQorCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChidWYzICE9IE5VTEwpICYmIChsZW4zID4gMCkpIHsKKwkJCQkvKiBXcml0ZSBldmVuKGxlbjMpIGJ1ZiBjb250ZW50cyB0byBkYXRhIHJlZyAqLworCQkJCWQgPSAoVUlOVDgqKWJ1ZjM7CisJCQkJZm9yICggaSA9IDA7IGkgPCAobGVuMyAmIDB4ZmZmZSk7IGkrPTIgKSB7CisJCQkJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywgKihVSU5UMTYqKSgmKGRbaV0pKSwgZGF0YXJlZyk7CisJCQkJfQorCQkJCWlmIChsZW4zICYgMSkgeworCQkJCQlVSU5UMTYgZGF0YTsKKwkJCQkJVUlOVDggKmIgPSAoVUlOVDggKikgJmRhdGE7CisJCQkJCWJbMF0gPSBkW2xlbjMtMV07CisJCQkJCWlmIChidWY0ICE9IE5VTEwpIHsKKwkJCQkJCWQgPSAoVUlOVDgqKWJ1ZjQ7CisJCQkJCQliWzFdID0gZFswXTsKKwkJCQkJCWxlbjQtLTsKKwkJCQkJCWJ1ZjQrKzsKKwkJCQkJfQorCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKwkJCWlmICgoYnVmNCAhPSBOVUxMKSAmJiAobGVuNCA+IDApKSB7CisJCQkJLyogV3JpdGUgZXZlbihsZW40KSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCQlkID0gKFVJTlQ4KilidWY0OworCQkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjQgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsICooVUlOVDE2KikoJihkW2ldKSksIGRhdGFyZWcpOworCQkJCX0KKwkJCQlpZiAobGVuNCAmIDEpIHsKKwkJCQkJVUlOVDE2IGRhdGE7CisJCQkJCVVJTlQ4ICpiID0gKFVJTlQ4ICopICZkYXRhOworCQkJCQliWzBdID0gZFtsZW40LTFdOworCQkJCQliWzFdID0gMDsKKworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsIGRhdGEsIGRhdGFyZWcpOworCQkJCX0KKwkJCX0KKy8vCQkJcHJpbnRrKEtFUk5fREVCVUcgImN0YjIgJWQgaWQgJTA0eCBvICVkICVkICVkICVkICVkXG4iLCBiYXAsIGlkLCBvZmZzZXQsIGxlbjEsIGxlbjIsIGxlbjMsIGxlbjQpOworCisJCX0KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwkJdWRlbGF5KDUpOworCQkvKiBSZWxlYXNlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJihody0+YmFwbG9jayksIGZsYWdzKTsKKyNlbmRpZgorCisJfQorCisJaWYgKHJlc3VsdCkKKwkJV0xBTl9MT0dfRVJST1IoImNvcHlfdG9fYmFwKCkgZmFpbGVkLlxuIik7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV9mcm9tX2F1eAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIGZyb20gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCisqIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCisqCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKKyoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglidWYgY29udGFpbnMgdGhlIGRhdGEgY29waWVkCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVAkJaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICggIShody0+YXV4ZW4pICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJIkF0dGVtcHQgdG8gcmVhZCAweCUwNHggd2hlbiBhdXggbm90IGVuYWJsZWRcbiIsCisJCQljYXJkYWRkcik7CisJCXJldHVybjsKKworCX0KKwkvKiBCdWlsZCBhcHByb3ByaWF0ZSBhdXggcGFnZSBhbmQgb2Zmc2V0ICovCisJY3VycnBhZ2UgPSBIRkEzODR4X0FVWF9NS1BBR0UoY2FyZGFkZHIpOworCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FVWF9NS09GRihjYXJkYWRkciwgYXV4Y3RsKTsKKwloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJvZmZzZXQsIEhGQTM4NHhfQVVYT0ZGU0VUKTsKKwl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKworCS8qIHJlYWQgdGhlIGRhdGEgKi8KKwl3aGlsZSAoIGkgPCBsZW4pIHsKKwkJKigoVUlOVDE2KikoYnVmK2kpKSA9IGhmYTM4NHhfZ2V0cmVnX25vc3dhcChodywgSEZBMzg0eF9BVVhEQVRBKTsKKwkJaSs9MjsKKwkJY3Vycm9mZnNldCs9MjsKKwkJaWYgKCAoY3Vycm9mZnNldCZIRkEzODR4X0FERFJfQVVYX09GRl9NQVNLKSA+CisJCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVggKSB7CisJCQljdXJycGFnZSsrOworCQkJY3Vycm9mZnNldCA9IDA7CisJCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BVVhfTUtPRkYoY3Vycm9mZnNldCwgYXV4Y3RsKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJycGFnZSwgSEZBMzg0eF9BVVhQQUdFKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJCQl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKwkJfQorCX0KKwkvKiBNYWtlIHN1cmUgdGhlIGF1eGN0bCBiaXRzIGFyZSBjbGVhciAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0FVWE9GRlNFVCk7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X3RvX2F1eAorKgorKiBDb3BpZXMgYSBjb2xsZWN0aW9uIG9mIGJ5dGVzIHRvIHRoZSBjb250cm9sbGVyIG1lbW9yeS4gIFRoZQorKiBBdXhpbGlhcnkgcG9ydCBNVVNUIGJlIGVuYWJsZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKiBXZSBfbWlnaHRfIGJlIGluIGEgZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJY2FyZGFkZHIJYWRkcmVzcyBpbiBoZmEzODR4IGRhdGEgc3BhY2UgdG8gcmVhZAorKglhdXhjdGwJCWFkZHJlc3Mgc3BhY2Ugc2VsZWN0CisqCWJ1ZgkJcHRyIHRvIGRlc3RpbmF0aW9uIGhvc3QgYnVmZmVyCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJQ29udHJvbGxlciBtZW1vcnkgbm93IGNvbnRhaW5zIGEgY29weSBvZiBidWYKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVAkJaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICggIShody0+YXV4ZW4pICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJIkF0dGVtcHQgdG8gcmVhZCAweCUwNHggd2hlbiBhdXggbm90IGVuYWJsZWRcbiIsCisJCQljYXJkYWRkcik7CisJCXJldHVybjsKKworCX0KKwkvKiBCdWlsZCBhcHByb3ByaWF0ZSBhdXggcGFnZSBhbmQgb2Zmc2V0ICovCisJY3VycnBhZ2UgPSBIRkEzODR4X0FVWF9NS1BBR0UoY2FyZGFkZHIpOworCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FVWF9NS09GRihjYXJkYWRkciwgYXV4Y3RsKTsKKwloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJvZmZzZXQsIEhGQTM4NHhfQVVYT0ZGU0VUKTsKKwl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKworCS8qIHdyaXRlIHRoZSBkYXRhICovCisJd2hpbGUgKCBpIDwgbGVuKSB7CisJCWhmYTM4NHhfc2V0cmVnX25vc3dhcChodywKKwkJCSooKFVJTlQxNiopKGJ1ZitpKSksIEhGQTM4NHhfQVVYREFUQSk7CisJCWkrPTI7CisJCWN1cnJvZmZzZXQrPTI7CisJCWlmICggY3Vycm9mZnNldCA+IEhGQTM4NHhfQUREUl9BVVhfT0ZGX01BWCApIHsKKwkJCWN1cnJwYWdlKys7CisJCQljdXJyb2Zmc2V0ID0gMDsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJycGFnZSwgSEZBMzg0eF9BVVhQQUdFKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJCQl1ZGVsYXkoNSk7CS8qIGJlYXQgKi8KKwkJfQorCX0KKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF93YWl0CisqCisqIFdhaXRzIGZvciBhdmFpbGFiaWxpdHkgb2YgdGhlIENvbW1hbmQgcmVnaXN0ZXIsIHRoZW4KKyogaXNzdWVzIHRoZSBnaXZlbiBjb21tYW5kLiAgVGhlbiBwb2xscyB0aGUgRXZzdGF0IHJlZ2lzdGVyCisqIHdhaXRpbmcgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4gIFRpbWVvdXRzIHNob3VsZG4ndCBiZQorKiBwb3NzaWJsZSBzaW5jZSB3ZSdyZSBwcmV2ZW50aW5nIG92ZXJsYXBwaW5nIGNvbW1hbmRzIGFuZCBhbGwKKyogY29tbWFuZHMgc2hvdWxkIGJlIGNsZWFyZWQgYW5kIGFja25vd2xlZGdlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGNtZCAgICAgICAgICAgICBjbWQgc3RydWN0dXJlLiAgSW5jbHVkZXMgYWxsIGFyZ3VtZW50cyBhbmQgcmVzdWx0CisqICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHBvaW50cy4gIEFsbCBpbiBob3N0IG9yZGVyLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF9kb2NtZF93YWl0KCBoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludAkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKwlVSU5UMTYJCXJlZyA9IDA7CisJVUlOVDE2ICAgICAgICAgIGNvdW50ZXI7CisKKwlEQkZFTlRFUjsKKworCWh3LT5jbWRmbGFnID0gMDsKKwlody0+Y21kZGF0YSA9IGNtZDsKKworCS8qIHdhaXQgZm9yIHRoZSBidXN5IGJpdCB0byBjbGVhciAqLworCWNvdW50ZXIgPSAwOworCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJd2hpbGUgKCBIRkEzODR4X0NNRF9JU0JVU1kocmVnKSAmJgorCQkoY291bnRlciA8IDEwKSkgeworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9DTUQpOworCQljb3VudGVyKys7CisJCXVkZWxheSgxMCk7CisJfQorCisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJoZmEzODR4X2NtZCB0aW1lb3V0KDEpLCByZWc9MHglMGh4LlxuIiwgcmVnKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWlmICghSEZBMzg0eF9DTURfSVNCVVNZKHJlZykpIHsKKwkJLyogYnVzeSBiaXQgY2xlYXIsIHdyaXRlIGNvbW1hbmQgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTAsIEhGQTM4NHhfUEFSQU0wKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTEsIEhGQTM4NHhfUEFSQU0xKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTIsIEhGQTM4NHhfUEFSQU0yKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+Y21kLCBIRkEzODR4X0NNRCk7CisKKyNpZmRlZiBDTURfSVJRCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwyLDApKQorCQl3aGlsZSAoISBody0+Y21kZmxhZykKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmh3LT5jbWRxKTsKKyNlbHNlCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShody0+Y21kcSwgaHctPmNtZGZsYWcpOworI2VuZGlmCisJCXJlc3VsdCA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQoY21kLT5zdGF0dXMpOworI2Vsc2UgLy8gQ01EX0lSUQorCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQljb3VudGVyID0gMDsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHByb2JsZW0uICBJdCB0YWtlcyBhYm91dAorICAgICAgICAgICAgICAgICAgIDEwMG1zLiAibm9ybWFsIiBjb21tYW5kcyBhcmUgdHlwaWNhbGx5IGlzIGFib3V0CisgICAgICAgICAgICAgICAgICAgMjAwLTQwMCB1cyAoSSd2ZSBuZXZlciBzZWVuIGxlc3MgdGhhbiAyMDApLiAgTG9uZ2VyCisgICAgICAgICAgICAgICAgICAgaXMgYmV0dGVyIHNvIHRoYXQgd2UncmUgbm90IGhhbW1lcmluZyB0aGUgYnVzLiAqLworCQl3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICYmCisJCQkoY291bnRlciA8IDUwMDApKSB7CisJCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQkJY291bnRlcisrOworCQkJdWRlbGF5KDIwMCk7CisJCX0KKworCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgKSB7CisJCQlyZXN1bHQgPSAwOworCQkJY21kLT5yZXN1bHQuc3RhdHVzID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1RBVFVTKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AwID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDApOworCQkJY21kLT5yZXN1bHQucmVzcDEgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMSk7CisJCQljbWQtPnJlc3VsdC5yZXNwMiA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AyKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0NNRCwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJCXJlc3VsdCA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQoY21kLT5yZXN1bHQuc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJoZmEzODR4X2NtZCB0aW1lb3V0KDIpLCByZWc9MHglMGh4LlxuIiwgcmVnKTsKKwkJfQorI2VuZGlmICAvKiBDTURfSVJRICovCisJfQorCisgZmFpbGVkOgorCWh3LT5jbWRmbGFnID0gMDsKKwlody0+Y21kZGF0YSA9IE5VTEw7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZGxfZG9jbWRfd2FpdAorKgorKiBXYWl0cyBmb3IgYXZhaWxhYmlsaXR5IG9mIHRoZSBDb21tYW5kIHJlZ2lzdGVyLCB0aGVuCisqIGlzc3VlcyB0aGUgZ2l2ZW4gY29tbWFuZC4gIFRoZW4gcG9sbHMgdGhlIEV2c3RhdCByZWdpc3RlcgorKiB3YWl0aW5nIGZvciBjb21tYW5kIGNvbXBsZXRpb24uICBUaW1lb3V0cyBzaG91bGRuJ3QgYmUKKyogcG9zc2libGUgc2luY2Ugd2UncmUgcHJldmVudGluZyBvdmVybGFwcGluZyBjb21tYW5kcyBhbmQgYWxsCisqIGNvbW1hbmRzIHNob3VsZCBiZSBjbGVhcmVkIGFuZCBhY2tub3dsZWRnZWQuCisqCisqIFRoaXMgcm91dGluZSBpcyBvbmx5IHVzZWQgZm9yIGRvd25sb2Fkcy4gIFNpbmNlIGl0IGRvZXNuJ3QgbG9jayBvdXQKKyogaW50ZXJydXB0cyB0aGUgc3lzdGVtIHJlc3BvbnNlIGlzIG11Y2ggYmV0dGVyLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCWRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgY21kICAgICAgICAgICAgIGNtZCBzdHJ1Y3R1cmUuICBJbmNsdWRlcyBhbGwgYXJndW1lbnRzIGFuZCByZXN1bHQKKyogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgcG9pbnRzLiAgQWxsIGluIGhvc3Qgb3JkZXIuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X2RsX2RvY21kX3dhaXQoIGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCit7CisJaW50CQlyZXN1bHQgPSAtRVRJTUVET1VUOworCXVuc2lnbmVkIGxvbmcJdGltZW91dDsKKwlVSU5UMTYJCXJlZyA9IDA7CisKKwlEQkZFTlRFUjsKKwkvKiB3YWl0IGZvciB0aGUgYnVzeSBiaXQgdG8gY2xlYXIgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDEqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwl3aGlsZSAoIEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIHRpbWVfYmVmb3JlKCBqaWZmaWVzLCB0aW1lb3V0KSApIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjbWQgcmVnaXN0ZXIuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWYgKCFIRkEzODR4X0NNRF9JU0JVU1kocmVnKSkgeworCQkvKiBidXN5IGJpdCBjbGVhciwgd3JpdGUgY29tbWFuZCAqLworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMCwgSEZBMzg0eF9QQVJBTTApOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMSwgSEZBMzg0eF9QQVJBTTEpOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5wYXJtMiwgSEZBMzg0eF9QQVJBTTIpOworCQloZmEzODR4X3NldHJlZyhodywgY21kLT5jbWQsIEhGQTM4NHhfQ01EKTsKKworCQkvKiBOb3cgd2FpdCBmb3IgY29tcGxldGlvbiAqLworCQlpZiAoIChIRkEzODR4X0NNRF9DTURDT0RFX0dFVChjbWQtPmNtZCkgPT0gSEZBMzg0eF9DTURDT0RFX0RPV05MRCkgKSB7CisJCQkvKiBkbHRpbWVvdXQgaXMgaW4gbXMgKi8KKwkJCXRpbWVvdXQgPSAoKChVSU5UMzIpaHctPmRsdGltZW91dCkgLyAxMDAwVUwpICogSFo7CisJCQlpZiAoIHRpbWVvdXQgPiAwICkgeworCQkJCXRpbWVvdXQgKz0gamlmZmllczsKKwkJCX0gZWxzZSB7CisJCQkJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCQkJfQorCQl9IGVsc2UgeworCQkJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCQl9CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCXdoaWxlICggIUhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgJiYgdGltZV9iZWZvcmUoamlmZmllcyx0aW1lb3V0KSApIHsKKwkJCXVkZWxheSgxMDApOworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTQ01EKHJlZykgKSB7CisJCQlyZXN1bHQgPSAwOworCQkJY21kLT5yZXN1bHQuc3RhdHVzID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1RBVFVTKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AwID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDApOworCQkJY21kLT5yZXN1bHQucmVzcDEgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMSk7CisJCQljbWQtPnJlc3VsdC5yZXNwMiA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AyKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0NNRCwgSEZBMzg0eF9FVkFDSyk7CisJCQlyZXN1bHQgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKGNtZC0+cmVzdWx0LnN0YXR1cyk7CisJCX0KKwl9CisKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RhcnQKKyoKKyogSXNzdWVzIHRoZSBNQUMgaW5pdGlhbGl6ZSBjb21tYW5kLCBzZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzLAorKiBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUKKyogbG93LWxldmVsIHN0dWZmIHNob3VsZCBiZSByZWFkeSBmb3IgYW55L2FsbCBjb21tYW5kcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCVVJTlQxNgkJCXJlZzsKKwlpbnQJCQlpOworCWludAkJCWo7CisJREJGRU5URVI7CisKKwkvKiBjYWxsIGluaXRpYWxpemUgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkluaXRpYWxpemUgY29tbWFuZCBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogbWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBhbnkgbGF5YWJvdXQgZXZlbnRzIGNsZWFyZWQgKi8KKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9JTlRFTik7CisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVkFDSyk7CisKKyAgICAgICAgaHctPnR4ZmlkX2hlYWQgPSAwOworICAgICAgICBody0+dHhmaWRfdGFpbCA9IDA7CisgICAgICAgIGh3LT50eGZpZF9OID0gSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWDsKKyAgICAgICAgbWVtc2V0KGh3LT50eGZpZF9xdWV1ZSwgMCwgc2l6ZW9mKGh3LT50eGZpZF9xdWV1ZSkpOworCisJLyogQWxsb2NhdGUgdHggYW5kIG5vdGlmeSBGSURzICovCisJLyogRmlyc3QsIHR4ICovCisJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYLTE7IGkrKykgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9hbGxvY2F0ZShodywgSEZBMzg0eF9EUlZSX1RYQlVGX01BWCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfRVJST1IoIkFsbG9jYXRlKHR4KSBjb21tYW5kIGZhaWxlZC5cbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJaiA9IDA7CisJCWRvIHsKKwkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCQl1ZGVsYXkoMTApOworCQkJaisrOworCQl9IHdoaWxlICggIUhGQTM4NHhfRVZTVEFUX0lTQUxMT0MocmVnKSAmJiBqIDwgNTApOyAvKiA1MCBpcyB0aW1lb3V0ICovCisJCWlmICggaiA+PSA1MCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZXZhbGxvYyh0eCkuXG4iKTsKKwkJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9BTExPQ0ZJRCk7CisKKwkJdHhmaWRfcXVldWVfYWRkKGh3LCByZWcpOworCisJCVdMQU5fTE9HX0RFQlVHKDQsImh3LT50eGZpZF9xdWV1ZVslZF09MHglMDR4XG4iLGkscmVnKTsKKworCQlyZWcgPSBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIHJlZywgSEZBMzg0eF9FVkFDSyk7CisKKwl9CisKKwkvKiBOb3csIHRoZSBpbmZvIGZyYW1lIGZpZCAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2FsbG9jYXRlKGh3LCBIRkEzODR4X0lORk9GUk1fTUFYTEVOKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkFsbG9jYXRlKHR4KSBjb21tYW5kIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaSA9IDA7CisJZG8geworCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQl1ZGVsYXkoMTApOworCQlpKys7CisJfSB3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0FMTE9DKHJlZykgJiYgaSA8IDUwKTsgLyogNTAgaXMgdGltZW91dCAqLworCWlmICggaSA+PSA1MCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBldmFsbG9jKGluZm8pLlxuIik7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJCWdvdG8gZmFpbGVkOworCX0KKwlody0+aW5mb2ZpZCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0FMTE9DRklEKTsKKwlyZWcgPSBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKTsKKwloZmEzODR4X3NldHJlZyhodywgcmVnLCBIRkEzODR4X0VWQUNLKTsKKwlXTEFOX0xPR19ERUJVRyg0LCJody0+aW5mb2ZpZD0weCUwNHhcbiIsIGh3LT5pbmZvZmlkKTsKKworCS8qIFNldCBzd3N1cHBvcnQgcmVncyB0byBtYWdpYyAjIGZvciBjYXJkIHByZXNlbmNlIGRldGVjdGlvbiAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0RSVlJfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUMCk7CisKKwkvKiBOb3cgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzIGFuZCBzZXQgdGhlIHJ1bm5pbmcgc3RhdGUgKi8KKwloZmEzODR4X3NldHJlZyhodywgMHhmZmZmLCBIRkEzODR4X0VWU1RBVCk7CisJaGZhMzg0eF9ldmVudHNfYWxsKGh3KTsKKworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUlVOTklORzsKKworCWdvdG8gZG9uZTsKK2ZhaWxlZDoKKwlXTEFOX0xPR19FUlJPUigiRmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7Citkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3N0b3AKKyoKKyogSXNzdWVzIHRoZSBpbml0aWFsaXplIGNvbW1hbmQgdG8gbGVhdmUgdXMgaW4gdGhlICdyZXNldCcgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCWludCBpOworCURCRkVOVEVSOworCisJZGVsX3RpbWVyX3N5bmMoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgeworCQkvKiBvbmx5IGZsdXNoIHdoZW4gd2UncmUgc2h1dHRpbmcgZG93biBmb3IgZ29vZCAqLworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCX0KKworCWlmIChody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HKSB7CisJCS8qCisJCSAqIFNlbmQgdGhlIE1BQyBpbml0aWFsaXplIGNtZC4KKwkJICovCisJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCisJCS8qCisJCSAqIE1ha2UgYWJzb2x1dGVseSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBhbnkKKwkJICogbGF5YWJvdXQgZXZlbnRzIGNsZWFyZWQKKwkJICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X0lOVEVOKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVkFDSyk7CisJfQorCisJdGFza2xldF9raWxsKCZody0+YmFwX3Rhc2tsZXQpOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKwkvKiBDbGVhciBhbGwgdGhlIHBvcnQgc3RhdHVzICovCisJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3R4ZnJhbWUKKyoKKyogVGFrZXMgYSBmcmFtZSBmcm9tIHByaXNtMnN0YSBhbmQgcXVldWVzIGl0IGZvciB0cmFuc21pc3Npb24uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlwYWNrZXQgYnVmZmVyIHN0cnVjdC4gIENvbnRhaW5zIGFuIDgwMi4xMQorKgkJCWRhdGEgZnJhbWUuCisqICAgICAgIHA4MDIxMV9oZHIgICAgICBwb2ludHMgdG8gdGhlIDgwMi4xMSBoZWFkZXIgZm9yIHRoZSBwYWNrZXQuCisqIFJldHVybnM6CisqCTAJCVN1Y2Nlc3MgYW5kIG1vcmUgYnVmZnMgYXZhaWxhYmxlCisqCTEJCVN1Y2Nlc3MgYnV0IG5vIG1vcmUgYnVmZnMKKyoJMgkJQWxsb2NhdGlvbiBmYWlsdXJlCisqCTMJCU1BQyBUeCBjb21tYW5kIGZhaWxlZAorKgk0CQlCdWZmZXIgZnVsbCBvciBxdWV1ZSBidXN5CisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQoreworCWhmYTM4NHhfdHhfZnJhbWVfdAl0eGRlc2M7CisJVUlOVDE2CQkJbWFjcSA9IDA7CisJVUlOVDE2CQkJZmlkOworCWludAkJCXJlc3VsdDsKKworCURCRkVOVEVSOworCisJLyogQnVpbGQgVHggZnJhbWUgc3RydWN0dXJlICovCisJLyogU2V0IHVwIHRoZSBjb250cm9sIGZpZWxkICovCisJbWVtc2V0KCZ0eGRlc2MsIDAsIHNpemVvZih0eGRlc2MpKTsKKworLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCisgKiBidWYgZGVwbGV0aW9uCisgKi8KKyNkZWZpbmUgRE9CT1RIIDEKKyNpZiBET0JPVEgKKwl0eGRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKKyNlbGlmIERPRVhDCisJdHhkZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisjZWxzZQorCXR4ZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMCkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2VuZGlmCisKKwkvKiBpZiB3ZSdyZSB1c2luZyBob3N0IFdFUCwgaW5jcmVhc2Ugc2l6ZSBieSBJVitJQ1YgKi8KKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQl0eGRlc2MuZGF0YV9sZW4gPSBob3N0MmhmYTM4NHhfMTYoc2tiLT5sZW4rOCk7CisJCS8vCQl0eGRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7CisJfSBlbHNlIHsKKwkJdHhkZXNjLmRhdGFfbGVuID0gIGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbik7CisJfQorCisJdHhkZXNjLnR4X2NvbnRyb2wgPSBob3N0MmhmYTM4NHhfMTYodHhkZXNjLnR4X2NvbnRyb2wpOworCS8qIGNvcHkgdGhlIGhlYWRlciBvdmVyIHRvIHRoZSB0eGRlc2MgKi8KKwltZW1jcHkoJih0eGRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKworCS8qIFNpbmNlIHRidXN5IGlzIHNldCB3aGVuZXZlciB0aGUgc3RhY2sgaXMgZW1wdHksIHRoZXJlIHNob3VsZAorCSAqIGFsd2F5cyBiZSBzb21ldGhpbmcgb24gdGhlIHN0YWNrIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LgorCSAqIFtNU01dOiBOT1QgVFJVRSEhISEhIHNvIEkgYWRkZWQgdGhlIHRlc3Qgb2YgZmlkIGJlbG93LgorCSAqLworCisJLyogQWxsb2NhdGUgRklEICovCisKKwlmaWQgPSB0eGZpZF9xdWV1ZV9yZW1vdmUoaHcpOworCisJaWYgKCBmaWQgPT0gMCApIHsgLyogc3RhY2sgb3IgcXVldWUgd2FzIGVtcHR5ICovCisJCXJldHVybiA0OworCX0KKworCS8qIG5vdyBsZXQncyBnZXQgdGhlIGNtZGxvY2sgKi8KKwlzcGluX2xvY2soJmh3LT5jbWRsb2NrKTsKKworCS8qIENvcHkgZGVzY3JpcHRvcitwYXlsb2FkIHRvIEZJRCAqLworICAgICAgICBpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgSEZBMzg0eF9CQVBfUFJPQywgZmlkLCAwLAorCQkJCQkgICAgICAmdHhkZXNjLCBzaXplb2YodHhkZXNjKSwKKwkJCQkJICAgICAgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdiksCisJCQkJCSAgICAgIHA4MDIxMV93ZXAtPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgICAgICBwODAyMTFfd2VwLT5pY3YsIHNpemVvZihwODAyMTFfd2VwLT5pY3YpKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcHlfdG9fYmFwNChodywgSEZBMzg0eF9CQVBfUFJPQywgZmlkLCAwLAorCQkJCQkgICAgICAmdHhkZXNjLCBzaXplb2YodHhkZXNjKSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisJfQorCisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV90b19iYXAoJTA0eCwgJWQsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLAorCQkgCXNpemVvZih0eGRlc2MpLAorCSAJCXNrYi0+bGVuLAorCQkJcmVzdWx0KTsKKworCQkvKiBwdXQgdGhlIGZpZCBiYWNrIGluIHRoZSBxdWV1ZSAqLworCQl0eGZpZF9xdWV1ZV9hZGQoaHcsIGZpZCk7CisKKwkJcmVzdWx0ID0gMzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSXNzdWUgVHggY29tbWFuZCAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX3RyYW5zbWl0KGh3LCBIRkEzODR4X1RYQ01EX1JFQ0wsIG1hY3EsIGZpZCk7CisKKwlpZiAoIHJlc3VsdCAhPSAwICkgeworCQl0eGZpZF9xdWV1ZV9hZGQoaHcsIGZpZCk7CisKKwkJV0xBTl9MT0dfREVCVUcoMSwiY21kX3R4KCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkJZmlkLCByZXN1bHQpOworCQlyZXN1bHQgPSAzOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBpbmRpY2F0ZSB3ZSBoYXZlbid0IGFueSBidWZmZXJzLCBpbnRfYWxsb2Mgd2lsbCBjbGVhciAqLworCXJlc3VsdCA9IHR4ZmlkX3F1ZXVlX2VtcHR5KGh3KTsKK2ZhaWxlZDoKKworCXNwaW5fdW5sb2NrKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludGVycnVwdAorKgorKiBEcml2ZXIgaW50ZXJydXB0IGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJaXJxCQlpcnEgbnVtYmVyCisqCWRldl9pZAkJcG9pbnRlciB0byB0aGUgZGV2aWNlCisqCXJlZ3MJCXJlZ2lzdGVycworKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJTWF5IHJlc3VsdCBpbiBhIGZyYW1lIGJlaW5nIHBhc3NlZCB1cCB0aGUgc3RhY2sgb3IgYW4gaW5mbworKglmcmFtZSBiZWluZyBoYW5kbGVkLgorKgorKiBDYWxsIGNvbnRleHQ6CisqCVVtbW0sIGNvdWxkIGl0IGJlIGludGVycnVwdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaXJxcmV0dXJuX3QgaGZhMzg0eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1MpCit7CisJaW50CQkJcmVnOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXZfaWQ7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludAkJCWV2X3JlYWQgPSAwOworCURCRkVOVEVSOworCisJaWYgKCF3bGFuZGV2IHx8IHdsYW5kZXYtPmh3cmVtb3ZlZCkKKwkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG11Y2ggd2UgY2FuIGRvIHcvbyBoYXJkd2FyZSAqLworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKwlpZiAoaHctPmlvYmFzZSA9PSAwKSAgLyogWFhYIEZJWE1FIFByb3Blcmx5ICovCisJCXJldHVybiBJUlFfTk9ORTsKKyNlbmRpZgorCisJZm9yICg7O2V2X3JlYWQrKykgeworCQlpZiAoZXZfcmVhZCA+PSBwcmlzbTJfaXJxX2V2cmVhZF9tYXgpCisJCQlicmVhazsKKworCQkvKiBDaGVjayBzd3N1cHBvcnQgcmVnIG1hZ2ljICMgZm9yIGNhcmQgcHJlc2VuY2UgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfU1dTVVBQT1JUMCk7CisJCWlmICggcmVnICE9IEhGQTM4NHhfRFJWUl9NQUdJQykgeworCQkJV0xBTl9MT0dfREVCVUcoMiwgImlycT0lZCwgbm8gbWFnaWMuICBDYXJkIHJlbW92ZWQ/LlxuIiwgaXJxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcmVhZCB0aGUgRXZTdGF0IHJlZ2lzdGVyIGZvciBpbnRlcnJ1cHQgZW5hYmxlZCBldmVudHMgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKworCQkvKiBBTkQgd2l0aCB0aGUgZW5hYmxlZCBpbnRlcnJ1cHRzICovCisJCXJlZyAmPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9JTlRFTik7CisKKwkJLyogSGFuZGxlIHRoZSBldmVudHMgKi8KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1dURVJSKHJlZykgKXsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkVycm9yOiBXVEVSUiBpbnRlcnJ1cHQgcmVjZWl2ZWQgKHVuaGFuZGxlZCkuXG4iKTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1dURVJSX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X2luZmRyb3Aod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19JTkZEUk9QX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmIChIRkEzODR4X0VWU1RBVF9JU0JBUF9PUChyZWcpKSB7CisJCQkvKiBEaXNhYmxlIHRoZSBCQVAgaW50ZXJydXB0cyAqLworCQkJaGZhMzg0eF9ldmVudHNfbm9iYXAoaHcpOworCQkJdGFza2xldF9zY2hlZHVsZSgmaHctPmJhcF90YXNrbGV0KTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNBTExPQyhyZWcpICl7CisJCQloZmEzODR4X2ludF9hbGxvYyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNEVElNKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X2R0aW0od2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19EVElNX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorI2lmZGVmIENNRF9JUlEKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICl7CisJCQloZmEzODR4X2ludF9jbWQod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19DTURfU0VUKDEpLAorCQkJCSAgICAgICBIRkEzODR4X0VWQUNLKTsKKwkJfQorI2VuZGlmCisKKwkJLyogYWxsb3cgdGhlIGV2c3RhdCB0byBiZSB1cGRhdGVkIGFmdGVyIHRoZSBldmFjayAqLworCQl1ZGVsYXkoMjApOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ01EX0lSUQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2NtZAorKgorKiBIYW5kbGVzIGNvbW1hbmQgY29tcGxldGlvbiBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgaGZhMzg0eF9pbnRfY21kKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJREJGRU5URVI7CisKKwkvLyBjaGVjayB0byBtYWtlIHN1cmUgaXQncyB0aGUgcmlnaHQgY29tbWFuZD8KKwlpZiAoaHctPmNtZGRhdGEpIHsKKwkJaHctPmNtZGRhdGEtPnN0YXR1cyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1NUQVRVUyk7CisJCWh3LT5jbWRkYXRhLT5yZXNwMCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AwKTsKKwkJaHctPmNtZGRhdGEtPnJlc3AxID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDEpOworCQlody0+Y21kZGF0YS0+cmVzcDIgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMik7CisJfQorCWh3LT5jbWRmbGFnID0gMTsKKworCXByaW50ayhLRVJOX0lORk8gInVtLiBpbnRfY21kXG4iKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOworCisJLy8gWFhYWCBwZXJmb3JtIGEgYmFwIGNvcHkgdG9vPworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2R0aW0KKyoKKyogSGFuZGxlcyB0aGUgRFRJTSBlYXJseSB3YXJuaW5nIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCXByaXNtMnN0YV9ldl9kdGltKHdsYW5kZXYpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9pbmZkcm9wCisqCisqIEhhbmRsZXMgdGhlIEluZkRyb3AgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKyNpZiAwCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworI2VuZGlmCisJREJGRU5URVI7CisJcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X2luZm8KKyoKKyogSGFuZGxlcyB0aGUgSW5mbyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJcmVnOworCWhmYTM4NHhfSW5mRnJhbWVfdAlpbmY7CisJaW50CQkJcmVzdWx0OworCURCRkVOVEVSOworCS8qIFJldHJpZXZlIHRoZSBGSUQgKi8KKwlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9JTkZPRklEKTsKKworCS8qIFJldHJpZXZlIHRoZSBsZW5ndGggKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoIGh3LAorCQlIRkEzODR4X0JBUF9JTlQsIHJlZywgMCwgJmluZi5mcmFtZWxlbiwgc2l6ZW9mKFVJTlQxNikpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCXJlZywgc2l6ZW9mKGluZiksIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpbmYuZnJhbWVsZW4gPSBoZmEzODR4Mmhvc3RfMTYoaW5mLmZyYW1lbGVuKTsKKworCS8qIFJldHJpZXZlIHRoZSByZXN0ICovCisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywKKwkJSEZBMzg0eF9CQVBfSU5ULCByZWcsIHNpemVvZihVSU5UMTYpLAorCQkmKGluZi5pbmZvdHlwZSksIGluZi5mcmFtZWxlbiAqIHNpemVvZihVSU5UMTYpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisJCQlyZWcsIHNpemVvZihpbmYpLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2LCAmaW5mKTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfdHhleGMKKyoKKyogSGFuZGxlcyB0aGUgVHhFeGMgZXZlbnQuICBBIFRyYW5zbWl0IEV4Y2VwdGlvbiBldmVudCBpbmRpY2F0ZXMKKyogdGhhdCB0aGUgTUFDJ3MgVFggcHJvY2VzcyB3YXMgdW5zdWNjZXNzZnVsIC0gc28gdGhlIHBhY2tldCBkaWQKKyogbm90IGdldCB0cmFuc21pdHRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlmaWQ7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKwkvKiBDb2xsZWN0IHRoZSBzdGF0dXMgYW5kIGRpc3BsYXkgKi8KKwlmaWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9UWENPTVBMRklEKTsKKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoaHcsIEhGQTM4NHhfQkFQX0lOVCwgZmlkLCAwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLCBzaXplb2Yoc3RhdHVzKSwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihzdGF0dXMpOworCXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2LCBzdGF0dXMpOworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF90eAorKgorKiBIYW5kbGVzIHRoZSBUeCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJdGFza2xldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCWZpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKwlmaWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9UWENPTVBMRklEKTsKKwlyZXN1bHQgPSBoZmEzODR4X2NvcHlfZnJvbV9iYXAoaHcsIEhGQTM4NHhfQkFQX0lOVCwgZmlkLCAwLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJZmlkLCBzaXplb2Yoc3RhdHVzKSwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihzdGF0dXMpOworCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfcngKKyoKKyogSGFuZGxlcyB0aGUgUnggZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXRhc2tsZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcngod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQlyeGZpZDsKKwloZmEzODR4X3J4X2ZyYW1lX3QJcnhkZXNjOworCWludAkJCXJlc3VsdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBoZHJsZW47CisJVUlOVDE2ICAgICAgICAgICAgICAgICAgZmM7CisJcDgwMjExX3J4bWV0YV90CSpyeG1ldGE7CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYiA9IE5VTEw7CisJVUlOVDggKmRhdGFwOworCisJREJGRU5URVI7CisKKwkvKiBHZXQgdGhlIEZJRCAqLworCXJ4ZmlkID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUlhGSUQpOworCS8qIEdldCB0aGUgZGVzY3JpcHRvciAoaW5jbHVkaW5nIGhlYWRlcnMpICovCisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJSEZBMzg0eF9CQVBfSU5ULAorCQkJcnhmaWQsCisJCQkwLAorCQkJJnJ4ZGVzYywKKwkJCXNpemVvZihyeGRlc2MpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgJWQsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJcnhmaWQsCisJCQkwLAorCQkJc2l6ZW9mKHJ4ZGVzYyksCisJCQlyZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCisJcnhkZXNjLnN0YXR1cyA9CWhmYTM4NHgyaG9zdF8xNihyeGRlc2Muc3RhdHVzKTsKKwlyeGRlc2MudGltZSA9CWhmYTM4NHgyaG9zdF8zMihyeGRlc2MudGltZSk7CisKKwkvKiBkcm9wIGVycm9ycyBhbmQgd2hhdG5vdCBpbiBwcm9taXNjIG1vZGUgKi8KKwlpZiAoKCB3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MgKSAmJgorCSAgICAoSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUihyeGRlc2Muc3RhdHVzKSB8fAorCSAgICAgSEZBMzg0eF9SWFNUQVRVU19JU1VOREVDUihyeGRlc2Muc3RhdHVzKSkpCisJICBnb3RvIGRvbmU7CisKKwkvKiBOb3cgaGFuZGxlIGZyYW1lIGJhc2VkIG9uIHBvcnQjICovCisJc3dpdGNoKCBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHJ4ZGVzYy5zdGF0dXMpICkKKwl7CisJY2FzZSAwOgorCisJCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLmZyYW1lX2NvbnRyb2wpOworCisJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KKwkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgorCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOworCisJCS8qIEFsbG9jYXRlIHRoZSBidWZmZXIsIG5vdGUgQ1JDIChha2EgRkNTKS4gcGJhbGxvYyAqLworCQkvKiBhc3N1bWVzIHRoZXJlIG5lZWRzIHRvIGJlIHNwYWNlIGZvciBvbmUgKi8KKwkJc2tiID0gZGV2X2FsbG9jX3NrYihoZmEzODR4Mmhvc3RfMTYocnhkZXNjLmRhdGFfbGVuKSArIGhkcmxlbiArIFdMQU5fQ1JDX0xFTiArIDIpOyAvKiBhIGxpdHRsZSBleHRyYSAqLworCisJCWlmICggISBza2IgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiYWxsb2Nfc2tiIGZhaWxlZC5cbiIpOworCQkJZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKworCQlza2ItPmRldiA9IHdsYW5kZXYtPm5ldGRldjsKKworCQkvKiB0aGVvcmV0aWNhbGx5IGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYSAzMi1iaXQgd29yZC4gKi8KKwkJaWYgKCBoZHJsZW4gPT0gV0xBTl9IRFJfQTRfTEVOICkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwkJLyogQ29weSB0aGUgODAyLjExIGhkciB0byB0aGUgYnVmZmVyICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fSERSX0EzX0xFTik7CisJCW1lbWNweShkYXRhcCwgJnJ4ZGVzYy5mcmFtZV9jb250cm9sLCBXTEFOX0hEUl9BM19MRU4pOworCisJCS8qIFNuYWcgdGhlIEE0IGFkZHJlc3MgaWYgcHJlc2VudCAqLworCQlpZiAoaGRybGVuID09IFdMQU5fSERSX0E0X0xFTikgeworCQkJZGF0YXAgPSBza2JfcHV0KHNrYiwgV0xBTl9BRERSX0xFTik7CisJCQltZW1jcHkoZGF0YXAsICZyeGRlc2MuYWRkcmVzczQsIFdMQU5fSERSX0EzX0xFTik7CisJCX0KKworCQkvKiB3ZSBjYW4gY29udmVydCB0aGUgZGF0YV9sZW4gYXMgd2UgcGFzc2VkIHRoZSBvcmlnaW5hbCBvbiAqLworCQlyeGRlc2MuZGF0YV9sZW4gPSBoZmEzODR4Mmhvc3RfMTYocnhkZXNjLmRhdGFfbGVuKTsKKworCQkvKiBDb3B5IHRoZSBwYXlsb2FkIGRhdGEgdG8gdGhlIGJ1ZmZlciAqLworCQlpZiAoIHJ4ZGVzYy5kYXRhX2xlbiA+IDAgKSB7CisJCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCByeGRlc2MuZGF0YV9sZW4pOworCQkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJCUhGQTM4NHhfQkFQX0lOVCwgcnhmaWQsIEhGQTM4NHhfUlhfREFUQV9PRkYsCisJCQkJZGF0YXAsIHJ4ZGVzYy5kYXRhX2xlbik7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsICVkLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCQkJcnhmaWQsCisJCQkJCUhGQTM4NHhfUlhfREFUQV9PRkYsCisJCQkJCXJ4ZGVzYy5kYXRhX2xlbiwKKwkJCQkJcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCQkvKiB0aGUgcHJpc20yIGNhcmRzIGRvbid0IHJldHVybiB0aGUgRkNTICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fQ1JDX0xFTik7CisJCW1lbXNldCAoZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyogQXR0YWNoIHRoZSByeG1ldGEsIHNldCBzb21lIHN0dWZmICovCisJCXA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHdsYW5kZXYsIHNrYik7CisJCXJ4bWV0YSA9IFA4MDIxMVNLQl9SWE1FVEEoc2tiKTsKKwkJcnhtZXRhLT5tYWN0aW1lID0gcnhkZXNjLnRpbWU7CisJCXJ4bWV0YS0+cnhyYXRlID0gcnhkZXNjLnJhdGU7CisJCXJ4bWV0YS0+c2lnbmFsID0gcnhkZXNjLnNpZ25hbCAtIGh3LT5kYm1hZGp1c3Q7CisJCXJ4bWV0YS0+bm9pc2UgPSByeGRlc2Muc2lsZW5jZSAtIGh3LT5kYm1hZGp1c3Q7CisKKwkJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisJCWdvdG8gZG9uZTsKKwljYXNlIDc6CisKKyAgICAgICAgCWlmICggISBIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHJ4ZGVzYy5zdGF0dXMpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2LCByeGZpZCwgJnJ4ZGVzYyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOworICAgICAgICAgICAgICAgIH0KKwkJZ290byBkb25lOworCisJZGVmYXVsdDoKKworCQlXTEFOX0xPR19XQVJOSU5HKCJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVChyeGRlc2Muc3RhdHVzKSApOworCQlnb3RvIGRvbmU7CisJfQorCisgZmFpbGVkOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKworIGRvbmU6CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3J4bW9uaXRvcgorKgorKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGludF9yeC4gIEhhbmRsZXMgbW9uaXRvciBmcmFtZXMuCisqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIEZDUyBhbmQgc2V0cyBpdAorKiB0byAweGZmZmZmZmZmLiAgVGhlIGhmYTM4NHggZG9lc24ndCBnaXZlIHVzIHRoZSBGQ1MgdmFsdWUgYnV0IHRoZQorKiBoaWdoZXIgbGF5ZXJzIGV4cGVjdCBpdC4gIDB4ZmZmZmZmZmYgaXMgdXNlZCBhcyBhIGZsYWcgdG8gaW5kaWNhdGUKKyogdGhlIEZDUyBpcyBib2d1cy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJcnhmaWQJCXJlY2VpdmVkIEZJRAorKglyeGRlc2MJCXJ4IGRlc2NyaXB0b3IgcmVhZCBmcm9tIGNhcmQgaW4gaW50X3J4CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglBbGxvY2F0ZXMgYW4gc2tiIGFuZCBwYXNzZXMgaXQgdXAgdmlhIHRoZSBQRl9QQUNLRVQgaW50ZXJmYWNlLgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHJ4ZmlkLAorCQkJCSAgIGhmYTM4NHhfcnhfZnJhbWVfdCAqcnhkZXNjKQoreworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVAkJCQloZHJsZW4gPSAwOworCVVJTlQJCQkJZGF0YWxlbiA9IDA7CisJVUlOVAkJCQlza2JsZW4gPSAwOworCVVJTlQJCQkJdHJ1bmNhdGVkID0gMDsKKwlVSU5UOAkJCQkqZGF0YXA7CisJVUlOVDE2CQkJCWZjOworCXN0cnVjdCBza19idWZmCQkJKnNrYjsKKworCURCRkVOVEVSOworCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCisJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLworCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKwlkYXRhbGVuID0gaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy0+ZGF0YV9sZW4pOworCisJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLworCXNrYmxlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKCBza2JsZW4gPgorCQkoc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkgKworCQlXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JWRcbiIsCisJCQlza2JsZW4gLSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSk7CisJfQorCisJaWYgKCAoc2tiID0gZGV2X2FsbG9jX3NrYihza2JsZW4pKSA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsIHNrYmxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKiBvbmx5IHByZXBlbmQgdGhlIHByaXNtIGhlYWRlciBpZiBpbiB0aGUgcmlnaHQgbW9kZSAqLworCWlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCisJICAgIChody0+c25pZmZoZHIgPT0gMCkpIHsKKwkJcDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90CSptc2c7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwkJbXNnID0gKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCopIGRhdGFwOworCisJCS8qIEluaXRpYWxpemUgdGhlIG1lc3NhZ2UgbWVtYmVycyAqLworCQltc2ctPm1zZ2NvZGUgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtOworCQltc2ctPm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpOworCQlzdHJjcHkobXNnLT5kZXZuYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCQltc2ctPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7CisJCW1zZy0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5ob3N0dGltZS5sZW4gPSA0OworCQltc2ctPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJCW1zZy0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJCW1zZy0+bWFjdGltZS5zdGF0dXMgPSAwOworCQltc2ctPm1hY3RpbWUubGVuID0gNDsKKwkJbXNnLT5tYWN0aW1lLmRhdGEgPSByeGRlc2MtPnRpbWUgKiAxMDAwOworCisJCW1zZy0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7CisJCW1zZy0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCQltc2ctPmNoYW5uZWwubGVuID0gNDsKKwkJbXNnLT5jaGFubmVsLmRhdGEgPSBody0+c25pZmZfY2hhbm5lbDsKKworCQltc2ctPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCQltc2ctPnJzc2kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5yc3NpLmxlbiA9IDQ7CisJCW1zZy0+cnNzaS5kYXRhID0gMDsKKworCQltc2ctPnNxLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3E7CisJCW1zZy0+c3Euc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5zcS5sZW4gPSA0OworCQltc2ctPnNxLmRhdGEgPSAwOworCisJCW1zZy0+c2lnbmFsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsOworCQltc2ctPnNpZ25hbC5zdGF0dXMgPSAwOworCQltc2ctPnNpZ25hbC5sZW4gPSA0OworCQltc2ctPnNpZ25hbC5kYXRhID0gcnhkZXNjLT5zaWduYWw7CisKKwkJbXNnLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCQltc2ctPm5vaXNlLnN0YXR1cyA9IDA7CisJCW1zZy0+bm9pc2UubGVuID0gNDsKKwkJbXNnLT5ub2lzZS5kYXRhID0gcnhkZXNjLT5zaWxlbmNlOworCisJCW1zZy0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJCW1zZy0+cmF0ZS5zdGF0dXMgPSAwOworCQltc2ctPnJhdGUubGVuID0gNDsKKwkJbXNnLT5yYXRlLmRhdGEgPSByeGRlc2MtPnJhdGUgLyA1OyAvKiBzZXQgdG8gODAyLjExIHVuaXRzICovCisKKwkJbXNnLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKKwkJbXNnLT5pc3R4LnN0YXR1cyA9IDA7CisJCW1zZy0+aXN0eC5sZW4gPSA0OworCQltc2ctPmlzdHguZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisKKwkJbXNnLT5mcm1sZW4uZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW47CisJCW1zZy0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJCW1zZy0+ZnJtbGVuLmxlbiA9IDQ7CisJCW1zZy0+ZnJtbGVuLmRhdGEgPSBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCX0gZWxzZSBpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCQkgICAoaHctPnNuaWZmaGRyICE9IDApKSB7CisJCXA4MDIxMV9jYXBoZHJfdAkJKmNhcGhkcjsKKwkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKworCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOworCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpOworCQljYXBoZHItPmhvc3R0aW1lID0JX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0JaHRvbmwoNCk7IC8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9CWh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9CWh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0JaHRvbmwoMyk7IC8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9CWh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPQlodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9CWh0b25sKDEpOyAvKiBjY2sgKi8KKwl9CisJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiIChjdGwgZnJhbWVzIG1heSBiZSBsZXNzIHRoYW4gYSBmdWxsIGhlYWRlcikgKi8KKwlkYXRhcCA9IHNrYl9wdXQoc2tiLCBoZHJsZW4pOworCW1lbWNweSggZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKKworCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KKwlpZiAoIGRhdGFsZW4gPiAwICkKKwl7CisJCS8qIFRydW5jYXRlIHRoZSBwYWNrZXQgaWYgdGhlIHVzZXIgd2FudHMgdXMgdG8gKi8KKwkJVUlOVAlkYXRhcmVhZCA9IGRhdGFsZW47CisJCWlmKGh3LT5zbmlmZl90cnVuY2F0ZSA+IDAgJiYgZGF0YXJlYWQgPiBody0+c25pZmZfdHJ1bmNhdGUpIHsKKwkJCWRhdGFyZWFkID0gaHctPnNuaWZmX3RydW5jYXRlOworCQkJdHJ1bmNhdGVkID0gMTsKKwkJfQorCisJCWRhdGFwID0gc2tiX3B1dChza2IsIGRhdGFyZWFkKTsKKwkJaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LAorCQkJSEZBMzg0eF9CQVBfSU5ULCByeGZpZCwgSEZBMzg0eF9SWF9EQVRBX09GRiwKKwkJCWRhdGFwLCBkYXRhcmVhZCk7CisKKwkJLyogY2hlY2sgZm9yIHVuZW5jcnlwdGVkIHN0dWZmIGlmIFdFUCBiaXQgc2V0LiAqLworCQlpZiAoKihkYXRhcCAtIGhkcmxlbiArIDEpICYgMHg0MCkgLy8gd2VwIHNldAorCQkgIGlmICgoKihkYXRhcCkgPT0gMHhhYSkgJiYgKCooZGF0YXArMSkgPT0gMHhhYSkpCisJCSAgICAqKGRhdGFwIC0gaGRybGVuICsgMSkgJj0gMHhiZjsgLy8gY2xlYXIgd2VwOyBpdCdzIHRoZSA4MDIuMiBoZWFkZXIhCisJfQorCisJaWYgKCF0cnVuY2F0ZWQgJiYgaHctPnNuaWZmX2ZjcykgeworCQkvKiBTZXQgdGhlIEZDUyAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCX0KKworCS8qIHBhc3MgaXQgYmFjayB1cCAqLworCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9hbGxvYworKgorKiBIYW5kbGVzIHRoZSBBbGxvYyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJZmlkOworCUlOVDE2CQkJcmVzdWx0OworCisJREJGRU5URVI7CisKKwkvKiBIYW5kbGUgdGhlIHJlY2xhaW1lZCBGSUQgKi8KKwkvKiAgIGNvbGxlY3QgdGhlIEZJRCBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjayAqLworCWZpZCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0FMTE9DRklEKTsKKworCWlmICggZmlkICE9IGh3LT5pbmZvZmlkICkgeyAvKiBJdCdzIGEgdHJhbnNtaXQgZmlkICovCisJCVdMQU5fTE9HX0RFQlVHKDUsICJpbnRfYWxsb2MoJSN4KVxuIiwgZmlkKTsKKwkJcmVzdWx0ID0gdHhmaWRfcXVldWVfYWRkKGh3LCBmaWQpOworCQlpZiAocmVzdWx0ICE9IC0xKSB7CisJCQlwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisJCQlXTEFOX0xPR19ERUJVRyg1LCAicV9hZGQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDUsICJxX2Z1bGwuXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHVubG9jayB0aGUgaW5mbyBmaWQgKi8KKwkJdXAoJmh3LT5pbmZvZmlkX3NlbSk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9oYW5kb3ZlcgorKgorKiBTZW5kcyBhIGhhbmRvdmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWFkZHIJCWFkZHJlc3Mgb2Ygc3RhdGlvbiB0aGF0J3MgbGVmdAorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgktRVJFU1RBUlRTWVMJcmVjZWl2ZWQgc2lnbmFsIHdoaWxlIHdhaXRpbmcgZm9yIHNlbWFwaG9yZS4KKyoJLUVJTwkJZmFpbGVkIHRvIHdyaXRlIHRvIGJhcCwgb3IgZmFpbGVkIGluIGNtZC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkLCBOT1RFOiB0aGlzIGNhbGwgbWF5IGJsb2NrIG9uIGEgc2VtYXBob3JlIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcikKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworICAgICAgICBoZmEzODR4X0hhbmRvdmVyQWRkcl90ICByZWM7CisgICAgICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICAgICAgREJGRU5URVI7CisKKwkvKiBBY3F1aXJlIHRoZSBpbmZvZmlkICovCisJaWYgKCBkb3duX2ludGVycnVwdGlibGUoJmh3LT5pbmZvZmlkX3NlbSkgKSB7CisJCXJlc3VsdCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisgICAgICAgIC8qIFNldCB1cCB0aGUgcmVjb3JkICovCisgICAgICAgIGxlbiA9IHNpemVvZihoZmEzODR4X0hhbmRvdmVyQWRkcl90KTsKKyAgICAgICAgcmVjLmZyYW1lbGVuID0gaG9zdDJoZmEzODR4XzE2KGxlbi8yIC0gMSk7CisgICAgICAgIHJlYy5pbmZvdHlwZSA9IGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X0lUX0hBTkRPVkVSQUREUik7CisgICAgICAgIG1lbWNweShyZWMuaGFuZG92ZXJfYWRkciwgYWRkciwgc2l6ZW9mKHJlYy5oYW5kb3Zlcl9hZGRyKSk7CisKKyAgICAgICAgLyogSXNzdWUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9jbWRfbm90aWZ5KGh3LCAxLCBody0+aW5mb2ZpZCwgJnJlYywgbGVuKTsKKworICAgICAgICBpZiAoIHJlc3VsdCAhPSAwICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImNtZF9ub3RpZnkoJTA0eCkgZmFpbGVkLCByZXN1bHQ9JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaHctPmluZm9maWQsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisJV0xBTl9MT0dfV0FSTklORygiSW1wbGVtZW50IG1lLlxuIik7CisKKwlEQkZFWElUOworfQorCisvKiBIYW5kbGVzIGFsbCAicngiIEJBUCBvcGVyYXRpb25zICovCitzdGF0aWMgdm9pZCAgICAgaGZhMzg0eF9iYXBfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBody0+d2xhbmRldjsKKwlpbnQgY291bnRlciA9IHByaXNtMl9pcnFfZXZyZWFkX21heDsKKwlpbnQJCQlyZWc7CisKKwlEQkZFTlRFUjsKKworCXdoaWxlIChjb3VudGVyLS0gPiAwKSB7CisJCS8qIEdldCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKworCQlpZiAoKHJlZyA9PSAweGZmZmYpIHx8CisJCSAgICAhKHJlZyAmIEhGQTM4NHhfSU5UX0JBUF9PUCkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0lORk8ocmVnKSApeworCQkJaGZhMzg0eF9pbnRfaW5mbyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0lORk9fU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNUWEVYQyhyZWcpICl7CisJCQloZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1RYRVhDX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTVFgocmVnKSApeworCQkJaGZhMzg0eF9pbnRfdHgod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19UWF9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1JYKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X3J4KHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfUlhfU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJfQorCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwloZmEzODR4X2V2ZW50c19hbGwoaHcpOworCisJREJGRVhJVDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjA1NDYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC0wLDAgKzEsMzA2NyBAQAorLyogaGZhMzg0eC5oCisqCisqIERlZmluZXMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgaGZhMzg0eAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgIFtJbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugbm90ZXNdCisqCisqICAgW1JlZmVyZW5jZXNdCisqCUNXMTAgUHJvZ3JhbW1lcidzIE1hbnVhbCB2MS41CisqCUlFRUUgODAyLjExIEQxMC4wCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9IRkEzODR4X0gKKyNkZWZpbmUgX0hGQTM4NHhfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisKKyNkZWZpbmUgSEZBMzg0eF9MRVZFTF9UT19kQm0odikgICAoMHgxMDAgKyAodikgKiAxMDAgLyAyNTUgLSAxMDApCisKKy8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLSBNaW5zICYgTWF4cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUlOCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUFYCSgoVUlOVDE2KTI0MDApCisjZGVmaW5lCQlIRkEzODR4X0JBUF9EQVRBTEVOX01BWAkJKChVSU5UMTYpNDA5NikKKyNkZWZpbmUJCUhGQTM4NHhfQkFQX09GRlNFVF9NQVgJCSgoVUlOVDE2KTQwOTYpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRJRF9NQVgJCSgoVUlOVDE2KTcpCisjZGVmaW5lCQlIRkEzODR4X05VTVBPUlRTX01BWAkJKChVSU5UMTYpKEhGQTM4NHhfUE9SVElEX01BWCsxKSkKKyNkZWZpbmUJCUhGQTM4NHhfUERSX0xFTl9NQVgJCSgoVUlOVDE2KTUxMikJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX1JFQ1NfTUFYCQkoKFVJTlQxNikyMDApCS8qIGEgZ3Vlc3MgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgoVUlOVDE2KTEwMjQpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCisjZGVmaW5lCQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWAkoKFVJTlQxNikxNikKKyNkZWZpbmUJCUhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVgJKDEwKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX1RYQlVGX01BWAkJKHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpICsgXAorCQkJCQkJV0xBTl9EQVRBX01BWExFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lWX0xFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lDVl9MRU4gKyAyKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX01BR0lDCQkoMHg0YTJkKQorI2RlZmluZQkJSEZBMzg0eF9JTkZPREFUQV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9pbmZvZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZSTV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4ICAvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCisjZGVmaW5lCQlIRkEzODR4X1JJRERBVEFfTUFYTEVOCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4KKyNkZWZpbmUJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTgkyMDQ4CisKKy8qLS0tIFN1cHBvcnQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQkFQX1BST0MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9CQVBfSU5UCQkJCSgoVUlOVDE2KTEpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9CU1MJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9XRFMJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9IT1NUQVAgICAgCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRAkJKChVSU5UMTYpQklUMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVAkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBTExPV19NSVhFRCAJKChVSU5UMTYpQklUMTEpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMMQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMAkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUw1MAkJKChVSU5UMTYpQklUNikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMDAJCSgoVUlOVDE2KShCSVQ1IHwgQklUNikpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0ZJUk1XQVJFX1dQQSAgCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19IT1NUX01JQyAgICAgIAkJKChVSU5UMTYpQklUOSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0ZXUk9BTQkJKChVSU5UMTYpMSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTMpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQJCSgoVUlOVDE2KTEpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSU5JVFNSQ0gJCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fRVNTCQkoKFVJTlQxNik0KQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX09PUl9FU1MJCSgoVUlOVDE2KTUpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9XRFMJCSgoVUlOVDE2KTYpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSE9TVEFQCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzEJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzIJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzVkb3Q1CQkJKChVSU5UMTYpNCkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xMQkJCSgoVUlOVDE2KTgpCisKKy8qLS0tIEp1c3Qgc29tZSBzeW1ib2xpYyBuYW1lcyBmb3IgbGVnaWJpbGl0eSAtLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfVFhDTURfTk9SRUNMCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9UWENNRF9SRUNMCQkoKFVJTlQxNikxKQorCisvKi0tLSBNQUMgSW50ZXJuYWwgbWVtb3J5IGNvbnN0YW50cyBhbmQgbWFjcm9zIC0tLS0tLSovCisvKiBtYXNrcyBhbmQgbWFjcm9zIHVzZWQgdG8gbWFuaXB1bGF0ZSBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3Nlcy4gKi8KKy8qIE1BQyBpbnRlcm5hbCBtZW1vcnkgYWRkcmVzc2VzIGFyZSAyMyBiaXQgcXVhbnRpdGllcy4gIFRoZSBNQUMgdXNlcworICogYSBwYWdlZCBhZGRyZXNzIHNwYWNlIHdoZXJlIHRoZSB1cHBlciAxNiBiaXRzIGFyZSB0aGUgcGFnZSBudW1iZXIKKyAqIGFuZCB0aGUgbG93ZXIgNyBiaXRzIGFyZSB0aGUgb2Zmc2V0LiAgVGhlcmUgYXJlIHZhcmlvdXMgSG9zdCBBUEkKKyAqIGVsZW1lbnRzIHRoYXQgcmVxdWlyZSB0d28gMTYtYml0IHF1YW50aXRpZXMgdG8gc3BlY2lmeSBhIE1BQworICogaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3MuICBVbmZvcnR1bmF0ZWx5LCBzb21lIG9mIHRoZSBBUEkncyB1c2UgYQorICogcGFnZS9vZmZzZXQgZm9ybWF0IHdoZXJlIHRoZSBvZmZzZXQgdmFsdWUgaXMgSlVTVCB0aGUgbG93ZXIgc2V2ZW4KKyAqIGJpdHMgYW5kIHRoZSBwYWdlIGlzICB0aGUgcmVtYWluaW5nIDE2IGJpdHMuICBTb21lIG9mIHRoZSBBUEkncworICogYXNzdW1lIHRoYXQgdGhlIDIzIGJpdCBhZGRyZXNzIGhhcyBiZWVuIHNwbGl0IGF0IHRoZSAxNnRoIGJpdC4gIFdlCisgKiByZWZlciB0byB0aGVzZSB0d28gZm9ybWF0cyBhcyBBVVggZm9ybWF0IGFuZCBDTUQgZm9ybWF0LiAgVGhlCisgKiBtYWNyb3MgYmVsb3cgaGVscCBoYW5kbGUgc29tZSBvZiB0aGlzLgorICovCisKKy8qIEhhbmR5IGNvbnN0YW50ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVgJKChVSU5UMTYpMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLCSgweDAwN2ZmZjgwKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLCSgweDAwMDAwMDdmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSwkoMHhmZmZmMDAwMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSwkoMHgwMDAwZmZmZikKKworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSwkoMHhmZmZmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSwkoMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIENNRCBmb3JtYXQgMTYtYml0IGFkZHJlc3MgcGFydHMgKi8KKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLCSgweDAwN2YpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLCSgweGZmZmYpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDw3KSB8IFwKKwkJKChVSU5UMzIpKCgoVUlOVDE2KShvKSkmSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSykpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQ01EIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLKSkgPDwxNikgfCBcCisJCSgoVUlOVDMyKSgoKFVJTlQxNikobykpJkhGQTM4NHhfQUREUl9DTURfT0ZGX01BU0spKQorCisvKiBNYWtlIEFVWCBmb3JtYXQgb2Zmc2V0IGFuZCBwYWdlIGZyb20gYSAzMi1iaXQgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKSBcCisJCSgoVUlOVDE2KSgoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLKT4+NykpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIFwKKwkJKChVSU5UMTYpKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLKSkKKworLyogTWFrZSBDTUQgZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZikgXAorCQkoKFVJTlQxNikoKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSyk+PjE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtPRkYoZikgXAorCQkoKFVJTlQxNikoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9DTURfT0ZGX01BU0spKQorCisvKi0tLSBBdXggcmVnaXN0ZXIgbWFza3MvdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTb21lIG9mIHRoZSB1cHBlciBiaXRzIG9mIHRoZSBBVVggb2Zmc2V0IHJlZ2lzdGVyIGFyZSB1c2VkIHRvICovCisvKiAgc2VsZWN0IGFkZHJlc3Mgc3BhY2UuICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfRVhURFMJKDB4MDApCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfTlYJKDB4MDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfUEhZCSgweDAyKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0lDU1JBTQkoMHgwMykKKworLyogTWFrZSBBVVggcmVnaXN0ZXIgb2Zmc2V0IGFuZCBwYWdlIHZhbHVlcyBmcm9tIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9NS09GRihmLCBjKSBcCisJKEhGQTM4NHhfQUREUl9BVVhfTUtPRkYoZikgfCAoKChVSU5UMTYpKGMpKTw8MTIpKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtQQUdFKGYpCUhGQTM4NHhfQUREUl9BVVhfTUtQQUdFKGYpCisKKworLyotLS0gQ29udHJvbGxlciBNZW1vcnkgYWRkcmVzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0Ml9QREFfQkFTRQkoMHgwMDdmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQkFTRQkoMHgwMDNmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQk9HVVNfQkFTRQkoMHgwMDM5MDAwMFVMKQorCisvKi0tLSBEcml2ZXIgRG93bmxvYWQgc3RhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQJCTAKKyNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVECQkxCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVECQkyCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklUVEVOCQkzCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklURVBFTkRJTkcJNAorI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0dFTkVTSVMgCQk1CisKKy8qLS0tIFJlZ2lzdGVyIEkvTyBvZmZzZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDIpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA0KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwNikKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MDgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MEEpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MEMpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MEUpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHgyMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDI0KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgxQykKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHgzNikKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDFBKQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4MUUpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4MzgpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDMwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDMyKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHgyOCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDJBKQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4MkMpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHgzQSkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4M0MpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHgzRSkKKworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJIHx8IFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDQpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA4KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwYykKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MTApCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MWMpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHg0MCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHg0NCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDQ4KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MzApCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgzOCkKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHg2YykKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4M2MpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4NzApCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDYwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDY0KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDY4KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MjgpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHg1MCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDU0KQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4NTgpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHg3NCkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4NzgpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHg3YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJQ09SX09GRgkJKDB4NGMpCisjZGVmaW5lCQlIRkEzODR4X1BDSUhDUl9PRkYJCSgweDVjKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkhfT0ZGCSgweDgwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkxfT0ZGCSgweDg0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfTEVOX09GRgkJKDB4ODgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMF9DVExfT0ZGCQkoMHg4YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJX1NUQVRVU19PRkYJCSgweDk4KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkhfT0ZGCSgweGEwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkxfT0ZGCSgweGE0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfTEVOX09GRgkJKDB4YTgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMV9DVExfT0ZGCQkoMHhhYykKKworI2VuZGlmCisKKy8qLS0tIFJlZ2lzdGVyIEZpZWxkIE1hc2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0JVU1kJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgoVUlOVDE2KShCSVQxNCB8IEJJVDEzIHwgQklUMTIgfCBCSVQxMSB8IEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTAkJKChVSU5UMTYpQklUOCkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgoVUlOVDE2KShCSVQ5IHwgQklUOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKFVJTlQxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKKworI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKFVJTlQxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREUJCSgoVUlOVDE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQorCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9CVVNZCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0VSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGCQkoKFVJTlQxNikoQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4IHwgQklUNyB8IEJJVDYgfCBCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSkpCisKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfV1RFUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GRFJPUAkJKChVSU5UMTYpQklUMTMpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfRFRJTQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0NNRAkJKChVSU5UMTYpQklUNCkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFhFWEMJCSgoVUlOVDE2KUJJVDIpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9UWAkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9JTlRfQkFQX09QICAgICAgICAgICAoSEZBMzg0eF9FVlNUQVRfSU5GT3xIRkEzODR4X0VWU1RBVF9SWHxIRkEzODR4X0VWU1RBVF9UWHxIRkEzODR4X0VWU1RBVF9UWEVYQykKKworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfSU5UX05PUk1BTCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEN8SEZBMzg0eF9FVlNUQVRfSU5GRFJPUHxIRkEzODR4X0VWU1RBVF9BTExPQ3xIRkEzODR4X0VWU1RBVF9EVElNKQorCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU4JCSgoVUlOVDE2KShCSVQxNSB8IEJJVDE0KSkKKworCisvKi0tLSBDb21tYW5kIENvZGUgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIENvbnRyb2xsZXIgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOSVQJCSgoVUlOVDE2KTB4MDApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRU5BQkxFCQkoKFVJTlQxNikweDAxKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUJCSgoVUlOVDE2KTB4MDIpCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRElBRwkJKChVSU5UMTYpMHgwMykKKworLyotLS0gQnVmZmVyIE1nbXQgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FMTE9DCQkoKFVJTlQxNikweDBBKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX1RYCQkoKFVJTlQxNikweDBCKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QJCSgoVUlOVDE2KTB4MTIpCisKKy8qLS0tIFJlZ3VsYXRlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9OT1RJRlkJCSgoVUlOVDE2KTB4MTApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfSU5RCQkoKFVJTlQxNikweDExKQorCisvKi0tLSBDb25maWd1cmUgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FDQ0VTUwkJKChVSU5UMTYpMHgyMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ET1dOTEQJCSgoVUlOVDE2KTB4MjIpCisKKy8qLS0tIERlYnVnZ2luZyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIAlIRkEzODR4X0NNRENPREVfTU9OSVRPUgkJKChVSU5UMTYpKDB4MzgpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0VOQUJMRQkJKChVSU5UMTYpKDB4MGIpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0RJU0FCTEUJCSgoVUlOVDE2KSgweDBmKSkKKworLyotLS0gUmVzdWx0IENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfU1VDQ0VTUwkJCSgoVUlOVDE2KSgweDAwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0FSRF9GQUlMCQkoKFVJTlQxNikoMHgwMSkpCisjZGVmaW5lCQlIRkEzODR4X05PX0JVRkYJCQkoKFVJTlQxNikoMHgwNSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9FUlIJCQkoKFVJTlQxNikoMHg3RikpCisKKy8qLS0tIFByb2dyYW1taW5nIE1vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTU9ERSAwOiBEaXNhYmxlIHByb2dyYW1taW5nCisJTU9ERSAxOiBFbmFibGUgdm9sYXRpbGUgbWVtb3J5IHByb2dyYW1taW5nCisJTU9ERSAyOiBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbW9yeSBwcm9ncmFtbWluZworCU1PREUgMzogUHJvZ3JhbSBub24tdm9sYXRpbGUgbWVtb3J5IHNlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfRElTQUJMRQkoKFVJTlQxNikweDAwKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9SQU0JCSgoVUlOVDE2KTB4MDEpCisjZGVmaW5lCQlIRkEzODR4X1BST0dNT0RFX05WCQkoKFVJTlQxNikweDAyKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFCSgoVUlOVDE2KTB4MDMpCisKKy8qLS0tIEFVWCByZWdpc3RlciBlbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9BVVhQVzAJCQkoKFVJTlQxNikweGZlMDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBXMQkJCSgoVUlOVDE2KTB4ZGMyMykKKyNkZWZpbmUJCUhGQTM4NHhfQVVYUFcyCQkJKChVSU5UMTYpMHhiYTQ1KQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQJKChVSU5UMTYpMHgwMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0VOQUJMRUQJKChVSU5UMTYpMHhjMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0VOQUJMRQkoKFVJTlQxNikweDgwMDApCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0RPRElTQUJMRQkoKFVJTlQxNikweDQwMDApCisKKy8qLS0tIFJlY29yZCBJRCBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQT1JUVFlQRQkJKChVSU5UMTYpMHhGQzAwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUgkoKFVJTlQxNikweEZDMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRAkoKFVJTlQxNikweEZDMDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMCSgoVUlOVDE2KTB4RkMwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSUQJCSgoVUlOVDE2KTB4RkMwNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4JKChVSU5UMTYpMHhGQzA1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUJCSgoVUlOVDE2KTB4RkMwNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4JKChVSU5UMTYpMHhGQzA3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUgkJKChVSU5UMTYpMHhGQzA4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVECSgoVUlOVDE2KTB4RkMwOSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRVBTCQkoKFVJTlQxNikweEZDMEEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWAkoKFVJTlQxNikweEZDMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUgkoKFVJTlQxNikweEZDMEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIJKChVSU5UMTYpMHhGQzBEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRQkJKChVSU5UMTYpMHhGQzBFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUgkoKFVJTlQxNikweEZDMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMQkJKChVSU5UMTYpMHhGQzExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjIJCSgoVUlOVDE2KTB4RkMxMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzCQkoKFVJTlQxNikweEZDMTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNAkJKChVSU5UMTYpMHhGQzE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjUJCSgoVUlOVDE2KTB4RkMxNSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2CQkoKFVJTlQxNikweEZDMTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRgkoKFVJTlQxNikweEZDMTcpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEIGxlbmd0aHM6IE5ldHdvcmsgUGFyYW1zLCBTdGF0aWMgQ29uZmlnIEVudGl0aWVzCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVE9ETzogZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGVzZSAqLworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTF9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTl9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVOQUJMRURfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTgkoKFVJTlQxNikzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0xFTiAoKFVJTlQxNilzaXplb2YoVUlOVDE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKFVJTlQxNikwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFIJCSgoVUlOVDE2KTB4RkM4MCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MJCSgoVUlOVDE2KTB4RkM4MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gJCSgoVUlOVDE2KTB4RkM4MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSAkJKChVSU5UMTYpMHhGQzgzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTAkJKChVSU5UMTYpMHhGQzg0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUJCSgoVUlOVDE2KTB4RkM4NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwCQkoKFVJTlQxNikweEZDOTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMQkJKChVSU5UMTYpMHhGQzkxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIJCSgoVUlOVDE2KTB4RkM5MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzCQkoKFVJTlQxNikweEZDOTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINAkJKChVSU5UMTYpMHhGQzk0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUJCSgoVUlOVDE2KTB4RkM5NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2CQkoKFVJTlQxNikweEZDOTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwCQkoKFVJTlQxNikweEZDOTcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxCQkoKFVJTlQxNikweEZDOTgpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gyCQkoKFVJTlQxNikweEZDOTkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzCQkoKFVJTlQxNikweEZDOUEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0CQkoKFVJTlQxNikweEZDOUIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g1CQkoKFVJTlQxNikweEZDOUMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2CQkoKFVJTlQxNikweEZDOUQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMAkJKChVSU5UMTYpMHhGQzlFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEJCSgoVUlOVDE2KTB4RkM5RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyCQkoKFVJTlQxNikweEZDQTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMwkJKChVSU5UMTYpMHhGQ0ExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQJCSgoVUlOVDE2KTB4RkNBMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1CQkoKFVJTlQxNikweEZDQTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNgkJKChVSU5UMTYpMHhGQ0E0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRCBMZW5ndGhzOiBOZXR3b3JrIFBhcmFtLCBEeW5hbWljIENvbmZpZyBFbnRpdGllcworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dST1VQQUREUl9MRU4JKChVSU5UMTYpMTYgKiBXTEFOX0FERFJfTEVOKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMX0xFTgkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDBfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDZfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNl9MRU4JKChVSU5UMTYpMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUUJCSgoVUlOVDE2KTB4RkNFMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogQmVoYXZpb3IgUGFyYW1ldGVycworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0lUSUNLVElNRV9MRU4JKChVSU5UMTYpMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSURzOiBOSUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FCQkoKFVJTlQxNikweEZEMDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUgkoKFVJTlQxNikweEZEMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWQkJKChVSU5UMTYpMHhGRDAyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDA0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSCSgoVUlOVDE2KTB4RkQwQSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZCQkoKFVJTlQxNikweEZEMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRklTVVBSQU5HRQkJKChVSU5UMTYpMHhGRDBDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwRCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NIQU5ORUxMSVNUCQkoKFVJTlQxNikweEZEMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOUwkoKFVJTlQxNikweEZEMTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRQkJKChVSU5UMTYpMHhGRDEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTCQkJKChVSU5UMTYpMHhGRDEzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFkJCSgoVUlOVDE2KTB4RkQyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFCQkoKFVJTlQxNikweEZEMjEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTCSgoVUlOVDE2KTB4RkQyMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDIzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVEJCSgoVUlOVDE2KTB4RkZGRSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSUQJCSgoVUlOVDE2KTB4RkZGRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogTklDIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYTE9BRFRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSUlERU5USVRZX0xFTgkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVNfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4JCSgoVUlOVDE2KTEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOU19MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSVNfTEVOCQkJKChVSU5UMTYpNDgwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01GSUFDVFJBTkdFU19MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTMl9MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVFfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9CdWlsZFNlcV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSURfTEVOCQkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfRldJRF90KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEczogIE1BQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUE9SVFNUQVRVUwkJKChVSU5UMTYpMHhGRDQwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQJCSgoVUlOVDE2KTB4RkQ0MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRAkoKFVJTlQxNikweEZENDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DT01NU1FVQUxJVFkJKChVSU5UMTYpMHhGRDQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURQkoKFVJTlQxNikweEZENDQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOSU5UCSgoVUlOVDE2KTB4RkQ0NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSAkoKFVJTlQxNikweEZENDYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUJKChVSU5UMTYpMHhGRDQ3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUJKChVSU5UMTYpMHhGRDRBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRQkoKFVJTlQxNikweEZENEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFCQkoKFVJTlQxNikweEZENEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNUwkoKFVJTlQxNikweEZENEQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QCSgoVUlOVDE2KTB4RkQ0RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWQkoKFVJTlQxNikweEZENTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMQkoKFVJTlQxNikweEZEODApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMgkoKFVJTlQxNikweEZEODEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMwkoKFVJTlQxNikweEZEODIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNAkoKFVJTlQxNikweEZEODMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNQkoKFVJTlQxNikweEZEODQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNgkoKFVJTlQxNikweEZEODUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTCSgoVUlOVDE2KTB4RkQ4NikKKy8vICNkZWZpbmUJSEZBMzg0eF9SSURfUENGSU5GTwkJKChVSU5UMTYpMHhGRDg3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFU1VMVFMgICAgICAgCSgoVUlOVDE2KTB4RkQ4OCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9IT1NUU0NBTlJFU1VMVFMgICAJKChVSU5UMTYpMHhGRDg5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FUSU9OVVNFRAkoKFVJTlQxNikweEZEOEEpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFRkFJTFVSRSAgCSgoVUlOVDE2KTB4RkQ4RCkgLy8gMS44LjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNQUMgSW5mb3JtYXRpb24KKyAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAorICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lEX0xFTgkJKChVSU5UMTYpMzQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSURfTEVOCQkoKFVJTlQxNilXTEFOX0JTU0lEX0xFTikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2NvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJDTklOVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFDVVJTQ0FMRVRIUkVTSF9MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BUENVUlNDQUxFVEhSRVNIX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFJYTElGRVRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNU19MRU4JCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1NfTEVOCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUENGSU5GT19MRU4JCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfUENGSW5mb19kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTgkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90KSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJJRHM6ICBNb2RlbSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRQkJKChVSU5UMTYpMHhGREMwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwJKChVSU5UMTYpMHhGREMxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEUJKChVSU5UMTYpMHhGREMyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERQkJKChVSU5UMTYpMHhGREMzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTCSgoVUlOVDE2KTB4RkRDNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xGT1NUQVRVUyAgICAgICAgICAgKChVSU5UMTYpMHhGREM3KSAvLyAxLjcuMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogIE1vZGVtIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRV9MRU4JCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUxfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DQ0FNT0RFX0xFTgkJCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVNfTEVOCSgoVUlOVDE2KTEwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBUEkgRU5IQU5DRU1FTlRTIChOT1QgQUxSRUFEWSBJTVBMRU1FTlRFRCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRAkoKFVJTlQxNikweEZDMjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMAkoKFVJTlQxNikweEZDMjQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMQkoKFVJTlQxNikweEZDMjUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMgkoKFVJTlQxNikweEZDMjYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMwkoKFVJTlQxNikweEZDMjcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBGTEFHUwkJKChVSU5UMTYpMHhGQzI4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQS0VZTUFQVEFCTEUJKChVSU5UMTYpMHhGQzI5KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04JKChVSU5UMTYpMHhGQzJBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUwkoKFVJTlQxNikweEZDMkIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUWENPTlRST0wJKChVSU5UMTYpMHhGQzJDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUJKChVSU5UMTYpMHhGQzJEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GSE9TVEFVVEhBU1NPQwkoKFVJTlQxNikweEZDMkUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZSQ1ZDUkNFUlJPUgkoKFVJTlQxNikweEZDMzApCisvLyAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNTUxJRkUJCSgoVUlOVDE2KTB4RkMzMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFMVFJFVFJZQ05UCSgoVUlOVDE2KTB4RkMzMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFQQkNOSU5UCQkoKFVJTlQxNikweEZDMzMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUFBDRklORk8JKChVSU5UMTYpMHhGQzM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1RBUENGSU5GTwkoKFVJTlQxNikweEZDMzUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUklPUklUWVFVU0FHRQkoKFVJTlQxNikweEZDMzcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSU1DVFJMCQkoKFVJTlQxNikweEZDNDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSElSVFkyVEFMTFkJKChVSU5UMTYpMHhGQzQyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRU5IU0VDVVJJVFkJKChVSU5UMTYpMHhGQzQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREJNQURKVVNUICAJKChVSU5UMTYpMHhGQzQ2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQURBVEEgICAgICAgCSgoVUlOVDE2KTB4RkM0OCkgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBST1BPR0FUSU9OREVMQVkJKChVSU5UMTYpMHhGQzQ5KSAvLyAxLjcuNgorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRQkoKFVJTlQxNikweEZDQjApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZFWENMT05HUFJFQU1CTEUJKChVSU5UMTYpMHhGQ0IxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQJKChVSU5UMTYpMHhGQ0IyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUwkoKFVJTlQxNikweEZDQjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMJKChVSU5UMTYpMHhGQ0I0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRkFMTEJBQ0tDVFJMCSgoVUlOVDE2KTB4RkNCNSkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlTVEFUVVMgICAJKChVSU5UMTYpMHhGQ0I2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1dFUEtFWU1BUElOREVYIAkoKFVJTlQxNikweEZDQjcpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQlJPQURDQVNUS0VZSUQgCSgoVUlOVDE2KTB4RkNCOCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9FTlRTRUNGTEFHRVlJRCAJKChVSU5UMTYpMHhGQ0I5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTAkoKFVJTlQxNikweEZDQkEpIC8vIE5FVyBTVEEKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQUhBTkRMSU5HCSgoVUlOVDE2KTB4RkNCQikgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01EQ0NPTlRST0wgICAgICAgIAkoKFVJTlQxNikweEZDQkMpIC8vIDEuNy4wLzEuNC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT1VOVFJZICAgICAgICAJKChVSU5UMTYpMHhGQ0JEKSAvLyAxLjcuMC8xLjQuMAorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhQT1dFUk1BWCAgICAgICAgCSgoVUlOVDE2KTB4RkNCRSkgLy8gMS43LjAvMS40LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkxGT0VOQkxFRCAgICAgIAkoKFVJTlQxNikweEZDQkYpIC8vIDEuNi4zCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfQ0FQSU5GTyAgICAgICAgICAgICAoKFVJTlQxNikweEZDQzApIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTElTVEVOSU5URVJWQUwgICAgICAoKFVJTlQxNikweEZDQzEpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElWRVJTSVRZRU5BQkxFRCAgICAoKFVJTlQxNikweEZDQzIpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTEVEX0NPTlRST0wgICAgICAgICAoKFVJTlQxNikweEZDQzQpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfSEZPX0RFTEFZICAgICAgICAgICAoKFVJTlQxNikweEZDQzUpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElTU0FMT1dFREJTU0lEICAgICAoKFVJTlQxNikweEZDQzYpIC8vIDEuOC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVRVUVTVAkJKChVSU5UMTYpMHhGQ0UxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QJCSgoVUlOVDE2KTB4RkNFMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQQkoKFVJTlQxNikweEZDRTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1QJKChVSU5UMTYpMHhGQ0U0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU4gICAgICAgICAgCSgoVUlOVDE2KTB4RkNFNSkgLy8gTkVXIFNUQQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFU1RBCSgoVUlOVDE2KTB4RkNFNikKKworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOCSgoVUlOVDE2KTE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1FVU0FHRV9MRU4JCSgoVUlOVDE2KTQpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQRCBSZWNvcmQgY29kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENCX1BBUlROVU0JCSgoVUlOVDE2KTB4MDAwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUERBVkVSCQkoKFVJTlQxNikweDAwMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19TRVJJQUwJCSgoVUlOVDE2KTB4MDAwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19SQU1TSVpFCQkoKFVJTlQxNikweDAwMDUpCisjZGVmaW5lIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX0NGSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDcpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ0lECQkoKFVJTlQxNikweDAwMDgpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVGREFDX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfTUVBU1VSRU1FTlRTCSgoVUlOVDE2KTB4MDAyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMzApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTU9ERU1fVFJJTURBQ19NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDQwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX0NPUkVHQV9IQUNLCQkoKFVJTlQxNikweDAwZmYpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BQ19BRERSRVNTCQkoKFVJTlQxNikweDAxMDEpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX0NBTExOQU1FCSgoVUlOVDE2KTB4MDEwMikKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVHRE9NQUlOCQkoKFVJTlQxNikweDAxMDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX0FMTE9XRURfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX0RFRkFVTFRfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDUpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUFJJVkFDWV9PUFRJT04JKChVSU5UMTYpMHgwMTA2KQorI2RlZmluZSBIRkEzODR4X1BEUl9URU1QVFlQRQkJKChVSU5UMTYpMHgwMTA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19TRVRVUAkoKFVJTlQxNikweDAxMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfU0VUVVAJCSgoVUlOVDE2KTB4MDEyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX1NFVFVQCSgoVUlOVDE2KTB4MDEzMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9UUklNREFDX1NFVFVQCSgoVUlOVDE2KTB4MDE0MCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSUZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORQkoKFVJTlQxNikweDAyMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfU0hBRE9XCSgoVUlOVDE2KTB4MDIwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9JRlJGCSgoVUlOVDE2KTB4MDIwNCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTFNQCSgoVUlOVDE2KTB4MDMwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTEkJKChVSU5UMTYpMHgwMzAxKQorI2RlZmluZSBIRkEzODR4X1BEUl9NQVhfVFhfUE9XRVIgIAkoKFVJTlQxNikweDAzMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BU1RFUl9DSEFOX0xJU1QJKChVSU5UMTYpMHgwMzAzKQorI2RlZmluZSBIRkEzODR4X1BEUl8zODQyX05JQ19DT05GSUcJKChVSU5UMTYpMHgwNDAwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfSUQJCSgoVUlOVDE2KTB4MDQwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX0lECQkoKFVJTlQxNikweDA0MDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9JRkNPTkYJCSgoVUlOVDE2KTB4MDQwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX1BNQ09ORgkJKChVSU5UMTYpMHgwNDA0KQorI2RlZmluZSBIRkEzODR4X1BEUl9SRkVOUkdZCQkoKFVJTlQxNikweDA0MDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9QT1dFUl9UWVBFICAgICAgKChVSU5UMTYpMHgwNDA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1VOS05PV040MDgJCSgoVUlOVDE2KTB4MDQwOCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX01BWF9QT1dFUgkoKFVJTlQxNikweDA0MDkpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQU5VRkFDVFVSRVIJKChVSU5UMTYpMHgwNDEwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUFJPRFVDVCAgCSgoVUlOVDE2KTB4MDQxMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfQU5UX0RJVkVSU0lUWSAgIAkoKFVJTlQxNikweDA0MTIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGT19ERUxBWSAgICAgICAJKChVSU5UMTYpMHgwNDEzKQorI2RlZmluZSBIRkEzODR4X1BEUl9TQ0FMRV9USFJFU0ggCSgoVUlOVDE2KTB4MDQxNCkKKworI2RlZmluZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVFNQCSgoVUlOVDE2KTB4MDkwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJCSgoVUlOVDE2KTB4MDkwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfRU5EX09GX1BEQQkJKChVSU5UMTYpMHgwMDAwKQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLSBSZWdpc3RlciBJRCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTUQJCUhGQTM4NHhfQ01EX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTAJCUhGQTM4NHhfUEFSQU0wX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTEJCUhGQTM4NHhfUEFSQU0xX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTIJCUhGQTM4NHhfUEFSQU0yX09GRgorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVMJCUhGQTM4NHhfU1RBVFVTX09GRgorI2RlZmluZQkJSEZBMzg0eF9SRVNQMAkJSEZBMzg0eF9SRVNQMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUkVTUDEJCUhGQTM4NHhfUkVTUDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyCQlIRkEzODR4X1JFU1AyX09GRgorI2RlZmluZQkJSEZBMzg0eF9JTkZPRklECQlIRkEzODR4X0lORk9GSURfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JYRklECQlIRkEzODR4X1JYRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9BTExPQ0ZJRAlIRkEzODR4X0FMTE9DRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9UWENPTVBMRklECUhGQTM4NHhfVFhDT01QTEZJRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMAkJSEZBMzg0eF9TRUxFQ1QwX09GRgorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwCQlIRkEzODR4X09GRlNFVDBfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0RBVEEwCQlIRkEzODR4X0RBVEEwX09GRgorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QxCQlIRkEzODR4X1NFTEVDVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDEJCUhGQTM4NHhfT0ZGU0VUMV9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTEJCUhGQTM4NHhfREFUQTFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVAkJSEZBMzg0eF9FVlNUQVRfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOCQlIRkEzODR4X0lOVEVOX09GRgorI2RlZmluZQkJSEZBMzg0eF9FVkFDSwkJSEZBMzg0eF9FVkFDS19PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTAkJSEZBMzg0eF9DT05UUk9MX09GRgorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwCUhGQTM4NHhfU1dTVVBQT1JUMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDIJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgorI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFCQlIRkEzODR4X0FVWFBBR0VfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVAlIRkEzODR4X0FVWE9GRlNFVF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQVVYREFUQQkJSEZBMzg0eF9BVVhEQVRBX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lDT1IJCUhGQTM4NHhfUENJQ09SX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1IJCUhGQTM4NHhfUENJSENSX09GRgorCisKKy8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTURfSVNCVVNZKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KXZhbHVlKSAmIEhGQTM4NHhfQ01EX0JVU1kpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fR0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9BSU5GTykgPj4gOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCQkoKFVJTlQxNikoKFVJTlQxNikodmFsdWUpIDw8IDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVF9HRVQodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX01BQ1BPUlQpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKChVSU5UMTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTUkVDTCh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUkVDTCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTF9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KCgoKFVJTlQxNikodmFsdWUpKSYoKFVJTlQxNikweDMwMDApKSA+PiAxMikpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9RT1NfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSA8PCAxMikgJiAweDMwMDApKQorI2RlZmluZQkJSEZBMzg0eF9DTURfSVNXUklURSh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfV1JJVEUpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCgoVUlOVDE2KXZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUFJPR01PREUpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCgoVUlOVDE2KXZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREVfR0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9DTURfQ01EQ09ERSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSh2YWx1ZSkpCisKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQpID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUX1NFVCh2YWx1ZSkJKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX0dFVCh2YWx1ZSkJKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfQ01EQ09ERSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREVfU0VUKHZhbHVlKQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0JVU1kodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X09GRlNFVF9CVVNZKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0lTRVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfRVJSKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0RBVEFPRkZfR0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X09GRlNFVF9EQVRBT0ZGKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0RBVEFPRkZfU0VUKHZhbHVlKQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RJQ0sodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTV1RFUlIodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORkRST1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZEUk9QKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTSU5GTyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfRFRJTSkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0NNRCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0NNRCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfQUxMT0MpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1RYRVhDKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfUlgpKQorCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0JBUF9PUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5UX0JBUF9PUCkpCisKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVElDS19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTUpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1dURVJSX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTSU5GRFJPUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lORkRST1BfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZPX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA3KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9EVElNKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fRFRJTV9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNSkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTQ01EKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9DTURfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9BTExPQykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0FMTE9DX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAzKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVFhFWEMpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9UWEVYQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMikpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9SWCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1JYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAwKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1RJQ0sodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RJQ0spKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19USUNLX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTV1RFUlIodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1dURVJSKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfV1RFUlJfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE0KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNJTkZEUk9QKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19JTkZEUk9QKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSU5GRFJPUF9TRVQodmFsdWUpCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxMykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GTyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GTykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORk9fU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDcpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0RUSU0odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0RUSU0pKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA1KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNDTUQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0NNRCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0NNRF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQUxMT0ModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0FMTE9DKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfQUxMT0NfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1RYRVhDKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19UWEVYQykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RYRVhDX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAyKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFgpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTUlgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1JYKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfUlhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDApKQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU5fU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTQpKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpID4+IDE0KSkKKworLyogQnl0ZSBPcmRlciAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgaGZhMzg0eDJob3N0XzE2KG4pCShfX2xlMTZfdG9fY3B1KChVSU5UMTYpKG4pKSkKKyNkZWZpbmUgaGZhMzg0eDJob3N0XzMyKG4pCShfX2xlMzJfdG9fY3B1KChVSU5UMzIpKG4pKSkKKyNkZWZpbmUgaG9zdDJoZmEzODR4XzE2KG4pCShfX2NwdV90b19sZTE2KChVSU5UMTYpKG4pKSkKKyNkZWZpbmUgaG9zdDJoZmEzODR4XzMyKG4pCShfX2NwdV90b19sZTMyKChVSU5UMzIpKG4pKSkKKyNlbmRpZgorCisvKiBIb3N0IE1haW50YWluZWQgU3RhdGUgSW5mbyAqLworI2RlZmluZSBIRkEzODR4X1NUQVRFX1BSRUlOSVQJMAorI2RlZmluZSBIRkEzODR4X1NUQVRFX0lOSVQJMQorI2RlZmluZSBIRkEzODR4X1NUQVRFX1JVTk5JTkcJMgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gVHlwZXMgYW5kIHRoZWlyIHJlbGF0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFVVEggICBCSVQwCisjZGVmaW5lIEhGQTM4NHhfSE9TVEFVVEhBU1NPQ19IT1NUQVNTT0MgIEJJVDEKKworI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX0RJU0FCTEVEICAgICAwCisjZGVmaW5lIEhGQTM4NHhfV0hBSEFORExJTkdfUEFTU1RIUk9VR0ggIEJJVDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbW1vbmx5IHVzZWQgYmFzaWMgdHlwZXMgKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cgoreworCVVJTlQxNglsZW47CisJVUlOVDgJZGF0YVswXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9ieXRlc3RyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cjMyCit7CisJVUlOVDE2CWxlbjsKKwlVSU5UOAlkYXRhWzMyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9ieXRlc3RyMzJfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczoKKwlOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcm90b3R5cGUgc3RydWN0dXJlOiBhbGwgY29uZmlndXJhdGlvbiByZWNvcmQgc3RydWN0dXJlcyBzdGFydCB3aXRoCit0aGVzZSBtZW1iZXJzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkCit7CisJVUlOVDE2CXJlY2xlbjsKKwlVSU5UMTYJcmlkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlY190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZDE2Cit7CisJVUlOVDE2CXJlY2xlbjsKKwlVSU5UMTYJcmlkOworCVVJTlQxNgl2YWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjMTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQzMgoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKKwlVSU5UMzIJdmFsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlYzMyOworCisvKi0tIEhhcmR3YXJlL0Zpcm13YXJlIENvbXBvbmVudCBJbmZvcm1hdGlvbiAtLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tcGlkZW50Cit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNgltYWpvcjsKKwlVSU5UMTYJbWlub3I7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tcGlkZW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY2FwbGV2ZWwKK3sKKwlVSU5UMTYJcm9sZTsKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CWJvdHRvbTsKKwlVSU5UMTYJdG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NhcGxldmVsX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBvcnRUeXBlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUG9ydFR5cGUKK3sKKwlVSU5UMTYJY25mUG9ydFR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUG9ydFR5cGVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTUFDQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3MKK3sKKwlVSU5UOAljbmZPd25NQUNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3NfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mRGVzaXJlZFNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZEZXNpcmVkU1NJRAoreworCVVJTlQ4CWNuZkRlc2lyZWRTU0lEWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZEZXNpcmVkU1NJRF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25DaGFubmVsIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQ2hhbm5lbAoreworCVVJTlQxNgljbmZPd25DaGFubmVsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkNoYW5uZWxfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duU1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93blNTSUQKK3sKKwlVSU5UOAljbmZPd25TU0lEWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25TU0lEX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkFUSU1XaW5kb3cgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25BVElNV2luZG93Cit7CisJVUlOVDE2CWNuZk93bkFUSU1XaW5kb3c7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duQVRJTVdpbmRvd190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZTeXN0ZW1TY2FsZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlN5c3RlbVNjYWxlCit7CisJVUlOVDE2CWNuZlN5c3RlbVNjYWxlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlN5c3RlbVNjYWxlX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk1heERhdGFMZW5ndGggLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNYXhEYXRhTGVuZ3RoCit7CisJVUlOVDE2CWNuZk1heERhdGFMZW5ndGg7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzcworeworCVVJTlQ4CWNuZldEU0FkZHJlc3NbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mV0RTQWRkcmVzc190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVuYWJsZWQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVuYWJsZWQKK3sKKwlVSU5UMTYJY25mUE1FbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRW5hYmxlZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVQUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNRVBTCit7CisJVUlOVDE2CWNuZlBNRVBTOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRVBTX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFJlY2VpdmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNdWx0aWNhc3RSZWNlaXZlCit7CisJVUlOVDE2CWNuZk11bHRpY2FzdFJlY2VpdmU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZBdXRoZW50aWNhdGlvbiAtLSovCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTQkweDAwMDEKKyNkZWZpbmUgSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVkJMHgwMDAyCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fTEVBUCAgICAgCTB4MDAwNAorCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNYXhTbGVlcER1cmF0aW9uIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTWF4U2xlZXBEdXJhdGlvbgoreworCVVJTlQxNgljbmZNYXhTbGVlcER1cmF0aW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb25fdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1Ib2xkb3ZlckR1cmF0aW9uIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uCit7CisJVUlOVDE2CWNuZlBNSG9sZG92ZXJEdXJhdGlvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUhvbGRvdmVyRHVyYXRpb25fdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTmFtZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk5hbWUKK3sKKwlVSU5UOAljbmZPd25OYW1lWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25OYW1lX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkRUSU1QZXJpb2QgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25EVElNUGVyaW9kCit7CisJVUlOVDE2CWNuZk93bkRUSU1QZXJpb2Q7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzc04KK3sKKwlVSU5UOAljbmZXRFNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZldEU0FkZHJlc3NOX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFBNQnVmZmVyaW5nIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTXVsdGljYXN0UE1CdWZmZXJpbmcKK3sKKwlVSU5UMTYJY25mTXVsdGljYXN0UE1CdWZmZXJpbmc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UE1CdWZmZXJpbmdfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczoKKwlOZXR3b3JrIFBhcmFtZXRlcnMsIER5bmFtaWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBHcm91cEFkZHJlc3NlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0dyb3VwQWRkcmVzc2VzCit7CisJVUlOVDgJTUFDQWRkcmVzc1sxNl1bNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfR3JvdXBBZGRyZXNzZXNfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogQ3JlYXRlSUJTUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NyZWF0ZUlCU1MKK3sKKwlVSU5UMTYJQ3JlYXRlSUJTUzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DcmVhdGVJQlNTX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTICAgICAgICAgIDAKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTkNSRUFURUlCU1MgIDEKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5JQlNTICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTklCU1MgICAgICAgIDMKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogRnJhZ21lbnRhdGlvblRocmVzaG9sZCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZyYWdtZW50YXRpb25UaHJlc2hvbGQKK3sKKwlVSU5UMTYJRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFJUU1RocmVzaG9sZCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1JUU1RocmVzaG9sZAoreworCVVJTlQxNglSVFNUaHJlc2hvbGQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUlRTVGhyZXNob2xkX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFR4UmF0ZUNvbnRyb2wgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9UeFJhdGVDb250cm9sCit7CisJVUlOVDE2CVR4UmF0ZUNvbnRyb2w7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVHhSYXRlQ29udHJvbF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBQcm9taXNjdW91c01vZGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm9taXNjdW91c01vZGUKK3sKKwlVSU5UMTYJUHJvbWlzY3VvdXNNb2RlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb21pc2N1b3VzTW9kZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlcXVlc3RfZGF0YQoreworCVVJTlQxNgljaGFubmVsTGlzdDsKKwlVSU5UMTYJdHhSYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogSG9zdFNjYW5SZXF1ZXN0IChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YQoreworCVVJTlQxNgljaGFubmVsTGlzdDsKKwlVSU5UMTYJdHhSYXRlOworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBKb2luUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YQoreworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJY2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGF1dGhlbnRpY2F0ZVN0YXRpb24gKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YQoreworCVVJTlQ4CWFkZHJlc3NbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CXN0YXR1czsKKwlVSU5UMTYJYWxnb3JpdGhtOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhc3NvY2lhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hc3NvY2lhdGVTdGF0aW9uX2RhdGEKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENoYW5uZWxJbmZvUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbEluZm9SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CWNoYW5uZWxEd2VsbFRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbEluZm9SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV0VQS2V5TWFwcGluZyAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV0VQS2V5TWFwcGluZworeworCVVJTlQ4CWFkZHJlc3NbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CWtleV9pbmRleDsKKwlVSU5UOCAJa2V5WzE2XTsKKwlVSU5UOCAJbWljX3RyYW5zbWl0X2tleVs0XTsKKwlVSU5UOCAJbWljX3JlY2VpdmVfa2V5WzRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1dFUEtleU1hcHBpbmdfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV1BBRGF0YSAgICAgICAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YQoreworCVVJTlQxNglkYXRhbGVuOworICAgICAgICBVSU5UOCAJZGF0YVswXTsgLy8gbWF4IDgwCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfV1BBRGF0YV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFRpY2tUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGlja1RpbWUKK3sKKwlVSU5UMTYJVGlja1RpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGlja1RpbWVfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4TG9hZFRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhMb2FkVGltZQoreworCVVJTlQxNglNYXhMb2FkVGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhMb2FkVGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogRG93bkxvYWRCdWZmZXIgLS0qLworLyogTk9URTogVGhlIHBhZ2UgYW5kIG9mZnNldCBhcmUgaW4gQVVYIGZvcm1hdCAqLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcgoreworCVVJTlQxNglwYWdlOworCVVJTlQxNglvZmZzZXQ7CisJVUlOVDE2CWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklJZGVudGl0eQoreworCVVJTlQxNglQUklDb21wSUQ7CisJVUlOVDE2CVBSSVZhcmlhbnQ7CisJVUlOVDE2CVBSSU1ham9yVmVyc2lvbjsKKwlVSU5UMTYJUFJJTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BSSUlkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQUklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BSSVN1cFJhbmdlCit7CisJVUlOVDE2CVBSSVJvbGU7CisJVUlOVDE2CVBSSUlEOworCVVJTlQxNglQUklWYXJpYW50OworCVVJTlQxNglQUklCb3R0b207CisJVUlOVDE2CVBSSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJQWN0UmFuZ2VzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzCit7CisJVUlOVDE2CUNGSVJvbGU7CisJVUlOVDE2CUNGSUlEOworCVVJTlQxNglDRklWYXJpYW50OworCVVJTlQxNglDRklCb3R0b207CisJVUlOVDE2CUNGSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DRklBY3RSYW5nZXNfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE5JQ1NlcmlhbE51bWJlciAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X05JQ1NlcmlhbE51bWJlcgoreworCVVJTlQ4CU5JQ1NlcmlhbE51bWJlclsxMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTklDU2VyaWFsTnVtYmVyX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNJZGVudGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X05JQ0lkZW50aXR5Cit7CisJVUlOVDE2CU5JQ0NvbXBJRDsKKwlVSU5UMTYJTklDVmFyaWFudDsKKwlVSU5UMTYJTklDTWFqb3JWZXJzaW9uOworCVVJTlQxNglOSUNNaW5vclZlcnNpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTklDSWRlbnRpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1GSVN1cFJhbmdlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJU3VwUmFuZ2UKK3sKKwlVSU5UMTYJTUZJUm9sZTsKKwlVSU5UMTYJTUZJSUQ7CisJVUlOVDE2CU1GSVZhcmlhbnQ7CisJVUlOVDE2CU1GSUJvdHRvbTsKKwlVSU5UMTYJTUZJVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01GSVN1cFJhbmdlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSVN1cFJhbmdlCit7CisJVUlOVDE2CUNGSVJvbGU7CisJVUlOVDE2CUNGSUlEOworCVVJTlQxNglDRklWYXJpYW50OworCVVJTlQxNglDRklCb3R0b207CisJVUlOVDE2CUNGSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DRklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQlVJTERTRVE6QnVpbGRTZXEgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9CdWlsZFNlcSB7CisJVUlOVDE2CXByaW1hcnk7CisJVUlOVDE2CXNlY29uZGFyeTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9CdWlsZFNlcV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogRldJRCAtLSovCisjZGVmaW5lIEhGQTM4NHhfRldJRF9MRU4JMTQKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfRldJRCB7CisJVUlOVDgJcHJpbWFyeVtIRkEzODR4X0ZXSURfTEVOXTsKKwlVSU5UOAlzZWNvbmRhcnlbSEZBMzg0eF9GV0lEX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRldJRF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ2hhbm5lbExpc3QgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaGFubmVsTGlzdAoreworCVVJTlQxNglDaGFubmVsTGlzdDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaGFubmVsTGlzdF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUmVndWxhdG9yeURvbWFpbnMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SZWd1bGF0b3J5RG9tYWlucworeworCVVJTlQ4CVJlZ3VsYXRvcnlEb21haW5zWzEyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9SZWd1bGF0b3J5RG9tYWluc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogVGVtcFR5cGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9UZW1wVHlwZQoreworCVVJTlQxNglUZW1wVHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9UZW1wVHlwZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0lTIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0lTCit7CisJVUlOVDgJQ0lTWzQ4MF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0lTX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFJZGVudGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQUlkZW50aXR5Cit7CisJVUlOVDE2CVNUQUNvbXBJRDsKKwlVSU5UMTYJU1RBVmFyaWFudDsKKwlVSU5UMTYJU1RBTWFqb3JWZXJzaW9uOworCVVJTlQxNglTVEFNaW5vclZlcnNpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU1RBSWRlbnRpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNUQVN1cFJhbmdlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU1RBU3VwUmFuZ2UKK3sKKwlVSU5UMTYJU1RBUm9sZTsKKwlVSU5UMTYJU1RBSUQ7CisJVUlOVDE2CVNUQVZhcmlhbnQ7CisJVUlOVDE2CVNUQUJvdHRvbTsKKwlVSU5UMTYJU1RBVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQVN1cFJhbmdlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklBY3RSYW5nZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NRklBY3RSYW5nZXMKK3sKKwlVSU5UMTYJTUZJUm9sZTsKKwlVSU5UMTYJTUZJSUQ7CisJVUlOVDE2CU1GSVZhcmlhbnQ7CisJVUlOVDE2CU1GSUJvdHRvbTsKKwlVSU5UMTYJTUZJVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01GSUFjdFJhbmdlc190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTklDIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQb3J0U3RhdHVzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUG9ydFN0YXR1cworeworCVVJTlQxNglQb3J0U3RhdHVzOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BvcnRTdGF0dXNfdDsKKworI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfRElTQUJMRUQJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX1NFQVJDSElORwkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19DT05OX0VTUwkoKFVJTlQxNik0KQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfT1VUT0ZSQU5HRQkoKFVJTlQxNik1KQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9XRFMJKChVSU5UMTYpNikKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTU0lEIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFNTSUQKK3sKKwlVSU5UOAlDdXJyZW50U1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFNTSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRCU1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRCU1NJRAoreworCVVJTlQ4CUN1cnJlbnRCU1NJRFs2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QlNTSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGNvbW1zcXVhbGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbW1zcXVhbGl0eQoreworCVVJTlQxNglDUV9jdXJyQlNTOworCVVJTlQxNglBU0xfY3VyckJTUzsKKwlVSU5UMTYJQU5MX2N1cnJGQzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jb21tc3F1YWxpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGRtYmNvbW1zcXVhbGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2RibWNvbW1zcXVhbGl0eQoreworCVVJTlQxNglDUWRibV9jdXJyQlNTOworCVVJTlQxNglBU0xkYm1fY3VyckJTUzsKKwlVSU5UMTYJQU5MZGJtX2N1cnJGQzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRUeFJhdGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50VHhSYXRlCit7CisJVUlOVDE2CUN1cnJlbnRUeFJhdGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFR4UmF0ZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudEJlYWNvbkludGVydmFsIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsCit7CisJVUlOVDE2CUN1cnJlbnRCZWFjb25JbnRlcnZhbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QmVhY29uSW50ZXJ2YWxfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzCit7CisJVUlOVDE2CUVuZXJneURldGVjdFRocmVzaG9sZDsKKwlVSU5UMTYJQ2FycmllckRldGVjdFRocmVzaG9sZDsKKwlVSU5UMTYJRGVmZXJEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CUNlbGxTZWFyY2hUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KKwlVSU5UMTYJRGVhZFNwb3RUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcm90b2NvbFJzcFRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWUKK3sKKwlVSU5UMTYJUHJvdG9jb2xSc3BUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb3RvY29sUnNwVGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU2hvcnRSZXRyeUxpbWl0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0Cit7CisJVUlOVDE2CVNob3J0UmV0cnlMaW1pdDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TaG9ydFJldHJ5TGltaXRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExvbmdSZXRyeUxpbWl0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTG9uZ1JldHJ5TGltaXQKK3sKKwlVSU5UMTYJTG9uZ1JldHJ5TGltaXQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTG9uZ1JldHJ5TGltaXRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFRyYW5zbWl0TGlmZXRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhUcmFuc21pdExpZmV0aW1lCit7CisJVUlOVDE2CU1heFRyYW5zbWl0TGlmZXRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4UmVjZWl2ZUxpZmV0aW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lCit7CisJVUlOVDE2CU1heFJlY2VpdmVMaWZldGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhSZWNlaXZlTGlmZXRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGUG9sbGFibGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRlBvbGxhYmxlCit7CisJVUlOVDE2CUNGUG9sbGFibGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZQb2xsYWJsZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zCit7CisJVUlOVDE2CUF1dGhlbnRpY2F0aW9uVHlwZTsKKwlVSU5UMTYJVHlwZUVuYWJsZWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMKKyhkYXRhIG9ubHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YQoreworCVVJTlQxNglBdXRoZW50aWNhdGlvblR5cGU7CisJVUlOVDE2CVR5cGVFbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc19kYXRhX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQKK3sKKwlVSU5UMTYJUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1ByaXZhY3lPcHRpb25JbXBsZW1lbnRlZF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogT3duTUFDQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X093bk1BQ0FkZHJlc3MKK3sKKwlVSU5UOAlPd25NQUNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X093bk1BQ0FkZHJlc3NfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBDRkluZm8gLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvCit7CisJVUlOVDE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OworCVVJTlQxNglDRlBQZXJpb2Q7CisJVUlOVDE2CUNGUE1heER1cmF0aW9uOworCVVJTlQxNglDRlBGbGFnczsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvX2RhdGEKK3sKKwlVSU5UMTYJTWVkaXVtT2NjdXBhbmN5TGltaXQ7CisJVUlOVDE2CUNGUFBlcmlvZDsKKwlVSU5UMTYJQ0ZQTWF4RHVyYXRpb247CisJVUlOVDE2CUNGUEZsYWdzOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BDRkluZm9fZGF0YV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTW9kZW0gSW5mb3JtYXRpb24gUmVjb3JkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUEhZVHlwZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BIWVR5cGUKK3sKKwlVSU5UMTYJUEhZVHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QSFlUeXBlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50Q2hhbm5lbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRDaGFubmVsCit7CisJVUlOVDE2CUN1cnJlbnRDaGFubmVsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRDaGFubmVsX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50UG93ZXJTdGF0ZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlCit7CisJVUlOVDE2CUN1cnJlbnRQb3dlclN0YXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDQ0FNb2RlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0NBTW9kZQoreworCVVJTlQxNglDQ0FNb2RlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NDQU1vZGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFN1cHBvcnRlZERhdGFSYXRlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlcworeworCVVJTlQ4CVN1cHBvcnRlZERhdGFSYXRlc1sxMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU3VwcG9ydGVkRGF0YVJhdGVzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRk9TdGF0dXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRk9TdGF0dXMKK3sKKwlVSU5UMTYgIFRlc3RSZXN1bHRzOworCVVJTlQxNiAgTEZPUmVzdWx0OworCVVJTlQxNiAgVlJIRk9SZXN1bHQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEZPU3RhdHVzX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX0FMTFBBU1NFRCAgICBCSVQwCisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9MRk9fRkFJTCAgICAgQklUMQorI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfVlJfSEYwX0ZBSUwgIEJJVDIKKyNkZWZpbmUgSEZBMzg0eF9IT1NUX0ZJUk1fQ09PUkRJTkFURSAgICBCSVQ3CisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9DT09SRElOQVRFICAgQklUMTUKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExFRENvbnRyb2wgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRURDb250cm9sCit7CisJVUlOVDE2ICBzZWFyY2hpbmdfb247CisJVUlOVDE2ICBzZWFyY2hpbmdfb2ZmOworCVVJTlQxNiAgYXNzb2Nfb247CisJVUlOVDE2ICBhc3NvY19vZmY7CisJVUlOVDE2ICBhY3Rpdml0eTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MRURDb250cm9sX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgRlJBTUUgREVTQ1JJUFRPUlMgQU5EIEZSQU1FIFNUUlVDVFVSRVMKKworRlJBTUUgREVTQ1JJUFRPUlM6IE9mZnNldHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29udHJvbCBJbmZvIChvZmZzZXQgNDQtNTEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NUQVRVU19PRkYJCQkoKFVJTlQxNikweDQ0KQorI2RlZmluZQkJSEZBMzg0eF9GRF9USU1FX09GRgkJCSgoVUlOVDE2KTB4NDYpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NXU1VQUE9SVF9PRkYJCSgoVUlOVDE2KTB4NEEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NJTEVOQ0VfT0ZGCQkJKChVSU5UMTYpMHg0QSkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU0lHTkFMX09GRgkJCSgoVUlOVDE2KTB4NEIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JBVEVfT0ZGCQkJKChVSU5UMTYpMHg0QykKKyNkZWZpbmUJCUhGQTM4NHhfRkRfUlhGTE9XX09GRgkJCSgoVUlOVDE2KTB4NEQpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JFU0VSVkVEX09GRgkJCSgoVUlOVDE2KTB4NEUpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1RYQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NTApCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis4MDIuMTEgSGVhZGVyIChvZmZzZXQgNTItNkIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX0ZSQU1FQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NTIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RVUkFUSU9OSURfT0ZGCQkoKFVJTlQxNikweDU0KQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMV9PRkYJCQkoKFVJTlQxNikweDU2KQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMl9PRkYJCQkoKFVJTlQxNikweDVDKQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTM19PRkYJCQkoKFVJTlQxNikweDYyKQorI2RlZmluZQkJSEZBMzg0eF9GRF9TRVFDT05UUk9MX09GRgkJKChVSU5UMTYpMHg2OCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzRfT0ZGCQkJKChVSU5UMTYpMHg2QSkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfREFUQUxFTl9PRkYJCQkoKFVJTlQxNikweDcwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorODAyLjMgSGVhZGVyIChvZmZzZXQgNzItN0YpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RFU1RBRERSRVNTX09GRgkJKChVSU5UMTYpMHg3MikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU1JDQUREUkVTU19PRkYJCSgoVUlOVDE2KTB4NzgpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5HVEhfT0ZGCQkoKFVJTlQxNikweDdFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGUkFNRSBTVFJVQ1RVUkVTOiBDb21tdW5pY2F0aW9uIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBUcmFuc21pdCBGcmFtZSBTdHJ1Y3R1cmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZQoreworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXJlc2VydmVkMTsKKwlVSU5UMTYJcmVzZXJ2ZWQyOworCVVJTlQzMglzd19zdXBwb3J0OworCVVJTlQ4CXR4X3JldHJ5Y291bnQ7CisJVUlOVDggICB0eF9yYXRlOworCVVJTlQxNgl0eF9jb250cm9sOworCisJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KKworCVVJTlQxNglmcmFtZV9jb250cm9sOworCVVJTlQxNglkdXJhdGlvbl9pZDsKKwlVSU5UOAlhZGRyZXNzMVs2XTsKKwlVSU5UOAlhZGRyZXNzMls2XTsKKwlVSU5UOAlhZGRyZXNzM1s2XTsKKwlVSU5UMTYJc2VxdWVuY2VfY29udHJvbDsKKwlVSU5UOAlhZGRyZXNzNFs2XTsKKwlVSU5UMTYJZGF0YV9sZW47IC8qIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCisKKwkvKi0tIDgwMi4zIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCisKKwlVSU5UOAlkZXN0X2FkZHJbNl07CisJVUlOVDgJc3JjX2FkZHJbNl07CisJVUlOVDE2CWRhdGFfbGVuZ3RoOyAvKiBiaWcgZW5kaWFuIGZvcm1hdCAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3R4X2ZyYW1lX3Q7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBTdGF0dXMgRmllbGQgLS0qLworI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlIJCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19ESVNDT04JCQkoKFVJTlQxNilCSVQyKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BR0VERVJSCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKChVSU5UMTYpQklUMCkKKy8qLS0gVHJhbnNtaXQgQ29udHJvbCBGaWVsZCAtLSovCisjZGVmaW5lCQlIRkEzODR4X1RYX0NGUE9MTAkJCSgoVUlOVDE2KUJJVDEyKQorI2RlZmluZQkJSEZBMzg0eF9UWF9QUlNUCQkJCSgoVUlOVDE2KUJJVDExKQorI2RlZmluZQkJSEZBMzg0eF9UWF9NQUNQT1JUCQkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9OT0VOQ1JZUFQJCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9UWF9SRVRSWVNUUkFUCQkJKChVSU5UMTYpKEJJVDYgfCBCSVQ1KSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKChVSU5UMTYpKEJJVDQgfCBCSVQzKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfVFhFWAkJCQkoKFVJTlQxNilCSVQyKQorI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgoVUlOVDE2KUJJVDEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogVGVzdC9HZXQvU2V0IEZpZWxkIFZhbHVlcyBmb3IgVHJhbnNtaXQgRnJhbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tIFN0YXR1cyBGaWVsZCAtLSovCisjZGVmaW5lIEhGQTM4NHhfVFhTVEFUVVNfSVNFUlJPUih2KQlcCisJKCgoVUlOVDE2KSh2KSkmXAorCShIRkEzODR4X1RYU1RBVFVTX0FDS0VSUnxIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlJ8XAorCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OfEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUnxcCisJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUikpCisKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FDS0VSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0ZPUk1FUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlIpKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTRElTQ09OKHYpCSgoVUlOVDE2KSgoKFVJTlQxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19ESVNDT04pKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTQUdFREVSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUikpCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNSRVRSWUVSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorCisjZGVmaW5lCUhGQTM4NHhfVFhfR0VUKHYsbSxzKQkJKCgoKFVJTlQxNikodikpJigoVUlOVDE2KShtKSkpPj4oKFVJTlQxNikocykpKQorI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LG0scykJCSgoKChVSU5UMTYpKHYpKTw8KChVSU5UMTYpKHMpKSkmKChVSU5UMTYpKG0pKSkKKworI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCisjZGVmaW5lCUhGQTM4NHhfVFhfQ0ZQT0xMX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX0NGUE9MTCwxMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQorI2RlZmluZQlIRkEzODR4X1RYX1BSU1RfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1BSU1QsMTEpCisjZGVmaW5lCUhGQTM4NHhfVFhfTUFDUE9SVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9NQUNQT1JULCA4KQorI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKKyNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQorI2RlZmluZQlIRkEzODR4X1RYX05PRU5DUllQVF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9OT0VOQ1JZUFQsIDcpCisjZGVmaW5lCUhGQTM4NHhfVFhfUkVUUllTVFJBVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9SRVRSWVNUUkFULCA1KQorI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQorI2RlZmluZQlIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9TVFJVQ1RZUEUsIDMpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9UWEVYX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9UWEVYLCAyKQorI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhPS19TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhPSywgMSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBSZWNlaXZlIEZyYW1lIFN0cnVjdHVyZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lCit7CisJLyotLSBNQUMgcnggZGVzY3JpcHRvciAoaGZhMzg0eCBieXRlIG9yZGVyKSAtLSovCisJVUlOVDE2CXN0YXR1czsKKwlVSU5UMzIJdGltZTsKKwlVSU5UOAlzaWxlbmNlOworCVVJTlQ4CXNpZ25hbDsKKwlVSU5UOAlyYXRlOworCVVJTlQ4CXJ4X2Zsb3c7CisJVUlOVDE2CXJlc2VydmVkMTsKKwlVSU5UMTYJcmVzZXJ2ZWQyOworCisJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uICg4MDIuMTEgYnl0ZSBvcmRlcikgLS0qLworCVVJTlQxNglmcmFtZV9jb250cm9sOworCVVJTlQxNglkdXJhdGlvbl9pZDsKKwlVSU5UOAlhZGRyZXNzMVs2XTsKKwlVSU5UOAlhZGRyZXNzMls2XTsKKwlVSU5UOAlhZGRyZXNzM1s2XTsKKwlVSU5UMTYJc2VxdWVuY2VfY29udHJvbDsKKwlVSU5UOAlhZGRyZXNzNFs2XTsKKwlVSU5UMTYJZGF0YV9sZW47IC8qIGhmYTM4NHggKGxpdHRsZSBlbmRpYW4pIGZvcm1hdCAqLworCisJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLworCVVJTlQ4CWRlc3RfYWRkcls2XTsKKwlVSU5UOAlzcmNfYWRkcls2XTsKKwlVSU5UMTYJZGF0YV9sZW5ndGg7IC8qIElFRUU/IChiaWcgZW5kaWFuKSBmb3JtYXQgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yeF9mcmFtZV90OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBPZmZzZXRzIC0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUlhfREFUQV9MRU5fT0ZGCQkJKChVSU5UMTYpNDQpCisjZGVmaW5lCQlIRkEzODR4X1JYXzgwMjExSERSX09GRgkJCSgoVUlOVDE2KTE0KQorI2RlZmluZQkJSEZBMzg0eF9SWF9EQVRBX09GRgkJCSgoVUlOVDE2KTYwKQorCisvKi0tIFN0YXR1cyBGaWVsZHMgLS0qLworI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFCQkoKFVJTlQxNikoQklUMTUgfCBCSVQxNCB8IEJJVDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVAkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IJCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIJCQkoKFVJTlQxNilCSVQwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFJlY2VpdmUgRnJhbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfR0VUKHZhbHVlKQkoKFVJTlQxNikoKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFKSA+PiAxMykpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVCkgPj4gOCkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgOCkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTVU5ERUNSKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX1VOREVDUikpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRlJBTUUgU1RSVUNUVVJFUzogSW5mb3JtYXRpb24gVHlwZXMgYW5kIEluZm9ybWF0aW9uIEZyYW1lIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0lUX0hBTkRPVkVSQUREUgkJCSgoVUlOVDE2KTB4RjAwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkRFQVVUSEFERFJFU1MJKChVSU5UMTYpMHhGMDAxVUwpLy9BUCAxLjMuNworI2RlZmluZQkJSEZBMzg0eF9JVF9DT01NVEFMTElFUwkJCSgoVUlOVDE2KTB4RjEwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUwkJCSgoVUlOVDE2KTB4RjEwMVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTCQkoKFVJTlQxNikweEYxMDJVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTCQkoKFVJTlQxNikweEYxMDNVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfTElOS1NUQVRVUwkJCSgoVUlOVDE2KTB4RjIwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUwkJCSgoVUlOVDE2KTB4RjIwMVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9BVVRIUkVRCQkJKChVSU5UMTYpMHhGMjAyVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX1BTVVNFUkNOVAkJCSgoVUlOVDE2KTB4RjIwM1VMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQJCQkoKFVJTlQxNikweEYyMDRVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVNTT0NSRVEgICAgCQkJKChVSU5UMTYpMHhGMjA1VUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX01JQ0ZBSUxVUkUgIAkJCSgoVUlOVDE2KTB4RjIwNlVMKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBGcmFtZXMgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gRnJhbWVzOiBOb3RpZmljYXRpb24gRnJhbWUgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSAgTm90aWZpY2F0aW9uIEZyYW1lLE1BQyBNZ210OiBIYW5kb3ZlciBBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSGFuZG92ZXJBZGRyCit7CisJVUlOVDE2CWZyYW1lbGVuOworCVVJTlQxNglpbmZvdHlwZTsKKwlVSU5UOAloYW5kb3Zlcl9hZGRyW1dMQU5fQlNTSURfTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IYW5kb3ZlckFkZHJfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENvbW11bmljYXRpb24gVGFsbGllcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMTYKK3sKKwlVSU5UMTYJdHh1bmljYXN0ZnJhbWVzOworCVVJTlQxNgl0eG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMTYJdHhmcmFnbWVudHM7CisJVUlOVDE2CXR4dW5pY2FzdG9jdGV0czsKKwlVSU5UMTYJdHhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDE2CXR4ZGVmZXJyZWR0cmFuczsKKwlVSU5UMTYJdHhzaW5nbGVyZXRyeWZyYW1lczsKKwlVSU5UMTYJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCVVJTlQxNgl0eHJldHJ5bGltaXRleGNlZWRlZDsKKwlVSU5UMTYJdHhkaXNjYXJkczsKKwlVSU5UMTYJcnh1bmljYXN0ZnJhbWVzOworCVVJTlQxNglyeG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMTYJcnhmcmFnbWVudHM7CisJVUlOVDE2CXJ4dW5pY2FzdG9jdGV0czsKKwlVSU5UMTYJcnhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDE2CXJ4ZmNzZXJyb3JzOworCVVJTlQxNglyeGRpc2NhcmRzbm9idWZmZXI7CisJVUlOVDE2CXR4ZGlzY2FyZHN3cm9uZ3NhOworCVVJTlQxNglyeGRpc2NhcmRzd2VwdW5kZWNyOworCVVJTlQxNglyeG1zZ2lubXNnZnJhZzsKKwlVSU5UMTYJcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMxNl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMzIKK3sKKwlVSU5UMzIJdHh1bmljYXN0ZnJhbWVzOworCVVJTlQzMgl0eG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMzIJdHhmcmFnbWVudHM7CisJVUlOVDMyCXR4dW5pY2FzdG9jdGV0czsKKwlVSU5UMzIJdHhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDMyCXR4ZGVmZXJyZWR0cmFuczsKKwlVSU5UMzIJdHhzaW5nbGVyZXRyeWZyYW1lczsKKwlVSU5UMzIJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCVVJTlQzMgl0eHJldHJ5bGltaXRleGNlZWRlZDsKKwlVSU5UMzIJdHhkaXNjYXJkczsKKwlVSU5UMzIJcnh1bmljYXN0ZnJhbWVzOworCVVJTlQzMglyeG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMzIJcnhmcmFnbWVudHM7CisJVUlOVDMyCXJ4dW5pY2FzdG9jdGV0czsKKwlVSU5UMzIJcnhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDMyCXJ4ZmNzZXJyb3JzOworCVVJTlQzMglyeGRpc2NhcmRzbm9idWZmZXI7CisJVUlOVDMyCXR4ZGlzY2FyZHN3cm9uZ3NhOworCVVJTlQzMglyeGRpc2NhcmRzd2VwdW5kZWNyOworCVVJTlQzMglyeG1zZ2lubXNnZnJhZzsKKwlVSU5UMzIJcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogU2NhbiBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0U3ViCit7CisJVUlOVDE2CWNoaWQ7CisJVUlOVDE2CWFubDsKKwlVSU5UMTYJc2w7CisJVUlOVDgJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCVVJTlQxNgliY25pbnQ7CisJVUlOVDE2CWNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdAlzc2lkOworCVVJTlQ4CXN1cHByYXRlc1sxMF07IC8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwlVSU5UMTYJcHJvYmVyZXNwX3JhdGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2NhblJlc3VsdFN1Yl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXN1bHQKK3sKKwlVSU5UMTYJcnN2ZDsKKwlVSU5UMTYJc2NhbnJlYXNvbjsKKwloZmEzODR4X1NjYW5SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9TQ0FOUkVTVUxUX01BWF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2NhblJlc3VsdF90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ2hJbmZvIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXBubDsKKwlVSU5UMTYJYWN0aXZlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90OworCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRQlCSVQwCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRQlCSVQxCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hJbmZvUmVzdWx0Cit7CisJVUlOVDE2CXNjYW5jaGFubmVsczsKKwloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90CisJCXJlc3VsdFtIRkEzODR4X0NISU5GT1JFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdF90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogSG9zdCBTY2FuIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hTY2FuUmVzdWx0U3ViCit7CisJVUlOVDE2CWNoaWQ7CisJVUlOVDE2CWFubDsKKwlVSU5UMTYJc2w7CisJVUlOVDgJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCVVJTlQxNgliY25pbnQ7CisJVUlOVDE2CWNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdAlzc2lkOworCVVJTlQ4CXN1cHByYXRlc1sxMF07IC8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwlVSU5UMTYJcHJvYmVyZXNwX3JhdGU7CisJVUlOVDE2CWF0aW07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdAoreworCVVJTlQxNglucmVzdWx0OworCVVJTlQxNglyc3ZkOworCWhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hTY2FuUmVzdWx0X3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogTGlua1N0YXR1cyAtLSovCisKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRAkoKFVJTlQxNikwKQorI2RlZmluZSBIRkEzODR4X0xJTktfQ09OTkVDVEVECQkoKFVJTlQxNikxKQorI2RlZmluZSBIRkEzODR4X0xJTktfRElTQ09OTkVDVEVECSgoVUlOVDE2KTIpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9DSEFOR0UJCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9PVVRPRlJBTkdFCSgoVUlOVDE2KTQpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFCQkoKFVJTlQxNik1KQorI2RlZmluZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMCQkoKFVJTlQxNik2KQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xpbmtTdGF0dXMKK3sKKwlVSU5UMTYJbGlua3N0YXR1czsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MaW5rU3RhdHVzX3Q7CisKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY2lhdGlvblN0YXR1cyAoLS0qLworCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DCSgoVUlOVDE2KTIpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfRElTQVNTT0MJKChVSU5UMTYpMykKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUwJKChVSU5UMTYpNCkKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTAkoKFVJTlQxNik1KQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jU3RhdHVzCit7CisJVUlOVDE2CWFzc29jc3RhdHVzOworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCS8qIG9sZF9hcF9hZGRyIGlzIG9ubHkgdmFsaWQgaWYgYXNzb2NzdGF0dXMgPT0gMiAqLworCVVJTlQ4CW9sZF9hcF9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglyZWFzb247CisJVUlOVDE2CXJlc2VydmVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0Fzc29jU3RhdHVzX3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXV0aFJlcXVlc3QgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoUmVxdWVzdAoreworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglhbGdvcml0aG07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aFJlcV90OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IEFzc29jUmVxdWVzdCAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jUmVxdWVzdAoreworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNgl0eXBlOworCVVJTlQ4ICAgd3BhX2RhdGFbODBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0Fzc29jUmVxX3Q7CisKKworI2RlZmluZSBIRkEzODR4X0FTU09DUkVRX1RZUEVfQVNTT0MgICAgIDAKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1JFUV9UWVBFX1JFQVNTT0MgICAxCisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogTUlDIEZhaWx1cmUgIChBUCBPbmx5KSAtLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWljRmFpbHVyZQoreworCVVJTlQ4CXNlbmRlcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlkZXN0W1dMQU5fQUREUl9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01pY0ZhaWx1cmVfdDsKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBQU1VzZXJDb3VudCAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BTVXNlckNvdW50Cit7CisJVUlOVDE2CXVzZXJjbnQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFNVc2VyQ291bnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9LZXlJRENoYW5nZWQKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJa2V5aWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfS2V5SURDaGFuZ2VkX3Q7CisKKy8qLS0gIENvbGxlY3Rpb24gb2YgYWxsIEluZiBmcmFtZXMgLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdW5pb24gaGZhMzg0eF9pbmZvZGF0YSB7CisJaGZhMzg0eF9Db21tVGFsbGllczE2X3QJY29tbXRhbGxpZXMxNjsKKwloZmEzODR4X0NvbW1UYWxsaWVzMzJfdAljb21tdGFsbGllczMyOworCWhmYTM4NHhfU2NhblJlc3VsdF90CXNjYW5yZXN1bHQ7CisJaGZhMzg0eF9DaEluZm9SZXN1bHRfdAljaGluZm9yZXN1bHQ7CisJaGZhMzg0eF9IU2NhblJlc3VsdF90CWhzY2FucmVzdWx0OworCWhmYTM4NHhfTGlua1N0YXR1c190CWxpbmtzdGF0dXM7CisJaGZhMzg0eF9Bc3NvY1N0YXR1c190CWFzc29jc3RhdHVzOworCWhmYTM4NHhfQXV0aFJlcV90CWF1dGhyZXE7CisJaGZhMzg0eF9QU1VzZXJDb3VudF90CXBzdXNlcmNudDsKKwloZmEzODR4X0tleUlEQ2hhbmdlZF90ICBrZXlpZGNoYW5nZWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaW5mb2RhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9JbmZGcmFtZQoreworCVVJTlQxNgkJCWZyYW1lbGVuOworCVVJTlQxNgkJCWluZm90eXBlOworCWhmYTM4NHhfaW5mb2RhdGFfdAlpbmZvOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0luZkZyYW1lX3Q7CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVU0IgUGFja2V0IHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGN0cmxvdXQgZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfRU5CVUxLSU4JNgorCisvKiBTaG91bGQgYmUgc2VudCB0byB0aGUgYnVsa291dCBlbmRwb2ludCAqLworI2RlZmluZSBIRkEzODR4X1VTQl9UWEZSTQkwCisjZGVmaW5lIEhGQTM4NHhfVVNCX0NNRFJFUQkxCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dSSURSRVEJMgorI2RlZmluZSBIRkEzODR4X1VTQl9SUklEUkVRCTMKKyNkZWZpbmUgSEZBMzg0eF9VU0JfV01FTVJFUQk0CisjZGVmaW5lIEhGQTM4NHhfVVNCX1JNRU1SRVEJNQorCisvKiBSZWNlaXZlZCBmcm9tIHRoZSBidWxraW4gZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNGUk0oYSkJKCEoKGEpICYgMHg4MDAwKSkKKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNUWEZSTShhKQkoKChhKSAmIDB4OTAwMCkgPT0gMHgxMDAwKQorI2RlZmluZSBIRkEzODR4X1VTQl9JU1JYRlJNKGEpCSghKChhKSAmIDB4OTAwMCkpCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lORk9GUk0JMHg4MDAwCisjZGVmaW5lIEhGQTM4NHhfVVNCX0NNRFJFU1AJMHg4MDAxCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dSSURSRVNQCTB4ODAwMgorI2RlZmluZSBIRkEzODR4X1VTQl9SUklEUkVTUAkweDgwMDMKKyNkZWZpbmUgSEZBMzg0eF9VU0JfV01FTVJFU1AJMHg4MDA0CisjZGVmaW5lIEhGQTM4NHhfVVNCX1JNRU1SRVNQCTB4ODAwNQorI2RlZmluZSBIRkEzODR4X1VTQl9CVUZBVkFJTAkweDgwMDYKKyNkZWZpbmUgSEZBMzg0eF9VU0JfRVJST1IJMHg4MDA3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlcXVlc3QgKGJ1bGsgT1VUKSBwYWNrZXQgY29udGVudHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfdHhmcm0geworCWhmYTM4NHhfdHhfZnJhbWVfdAlkZXNjOworCVVJTlQ4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfdHhmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfY21kcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQljbWQ7CisJVUlOVDE2CQlwYXJtMDsKKwlVSU5UMTYJCXBhcm0xOworCVVJTlQxNgkJcGFybTI7CisJVUlOVDgJCXBhZFs1NF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93cmlkcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlyaWQ7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJcmlkOworCVVJTlQ4CQlwYWRbNThdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3dtZW1yZXEgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCW9mZnNldDsKKwlVSU5UMTYJCXBhZ2U7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfd21lbXJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ybWVtcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlvZmZzZXQ7CisJVUlOVDE2CQlwYWdlOworCVVJTlQ4CQlwYWRbNTZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVxX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlc3BvbnNlIChidWxrIElOKSBwYWNrZXQgY29udGVudHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcnhmcm0geworCWhmYTM4NHhfcnhfZnJhbWVfdAlkZXNjOworCVVJTlQ4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcnhmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfaW5mb2ZybSB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X0luZkZyYW1lX3QJaW5mbzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfaW5mb2ZybV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9zdGF0dXNyZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlyZXNwMDsKKwlVSU5UMTYJCXJlc3AxOworCVVJTlQxNgkJcmVzcDI7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlc3BfdDsKKwordHlwZWRlZiBoZmEzODR4X3VzYl9jbWRyZXNwX3QgaGZhMzg0eF91c2Jfd3JpZHJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlc3AgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCXJpZDsKKwlVSU5UOAkJZGF0YVtIRkEzODR4X1JJRERBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfcnJpZHJlc3BfdDsKKwordHlwZWRlZiBoZmEzODR4X3VzYl9jbWRyZXNwX3QgaGZhMzg0eF91c2Jfd21lbXJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcm1lbXJlc3AgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UOAkJZGF0YVtIRkEzODR4X1VTQl9SV01FTV9NQVhMRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVzcF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9idWZhdmFpbCB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9idWZhdmFpbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9lcnJvciB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZXJyb3J0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9lcnJvcl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVW5pb25zIGZvciBwYWNrYWdpbmcgYWxsIHRoZSBrbm93biBwYWNrZXQgdHlwZXMgdG9nZXRoZXIgKi8KKwordHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYm91dCB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X3VzYl90eGZybV90CXR4ZnJtOworCWhmYTM4NHhfdXNiX2NtZHJlcV90CWNtZHJlcTsKKwloZmEzODR4X3VzYl93cmlkcmVxX3QJd3JpZHJlcTsKKwloZmEzODR4X3VzYl9ycmlkcmVxX3QJcnJpZHJlcTsKKwloZmEzODR4X3VzYl93bWVtcmVxX3QJd21lbXJlcTsKKwloZmEzODR4X3VzYl9ybWVtcmVxX3QJcm1lbXJlcTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JvdXRfdDsKKwordHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYmluIHsKKwlVSU5UMTYJCQl0eXBlOworCWhmYTM4NHhfdXNiX3J4ZnJtX3QJcnhmcm07CisJaGZhMzg0eF91c2JfdHhmcm1fdAl0eGZybTsKKwloZmEzODR4X3VzYl9pbmZvZnJtX3QJaW5mb2ZybTsKKwloZmEzODR4X3VzYl9jbWRyZXNwX3QJY21kcmVzcDsKKwloZmEzODR4X3VzYl93cmlkcmVzcF90CXdyaWRyZXNwOworCWhmYTM4NHhfdXNiX3JyaWRyZXNwX3QJcnJpZHJlc3A7CisJaGZhMzg0eF91c2Jfd21lbXJlc3BfdAl3bWVtcmVzcDsKKwloZmEzODR4X3VzYl9ybWVtcmVzcF90CXJtZW1yZXNwOworCWhmYTM4NHhfdXNiX2J1ZmF2YWlsX3QJYnVmYXZhaWw7CisJaGZhMzg0eF91c2JfZXJyb3JfdAl1c2JlcnJvcjsKKwlVSU5UOAkJCWJvZ3VzcGFkWzMwMDBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYmluX3Q7CisKKyNlbmRpZiAvKiBXTEFOX1VTQiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQRCByZWNvcmQgc3RydWN0dXJlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcGNiX3BhcnRudW0KK3sKKwlVSU5UOAludW1bOF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bQoreworCVVJTlQ4CW51bVs4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcGNiX3RyYWNlbnVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19zZXJpYWwKK3sKKwlVSU5UOAludW1bMTJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19tZWFzdXJlbWVudHMKK3sKKwlkb3VibGUJY2Fycmllcl9mcmVxOworCWRvdWJsZQlvY2N1cGllZF9iYW5kOworCWRvdWJsZQlwb3dlcl9kZW5zaXR5OworCWRvdWJsZQl0eF9zcHVyX2YxOworCWRvdWJsZQl0eF9zcHVyX2YyOworCWRvdWJsZQl0eF9zcHVyX2YzOworCWRvdWJsZQl0eF9zcHVyX2Y0OworCWRvdWJsZQl0eF9zcHVyX2wxOworCWRvdWJsZQl0eF9zcHVyX2wyOworCWRvdWJsZQl0eF9zcHVyX2wzOworCWRvdWJsZQl0eF9zcHVyX2w0OworCWRvdWJsZQlyeF9zcHVyX2YxOworCWRvdWJsZQlyeF9zcHVyX2YyOworCWRvdWJsZQlyeF9zcHVyX2wxOworCWRvdWJsZQlyeF9zcHVyX2wyOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19yYW1zaXplCit7CisJVUlOVDgJc2l6ZVsxMl07IC8qIHVuaXRzIG9mIEtCICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19yYW1zaXplX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21maXN1cHJhbmdlCit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWZpc3VwcmFuZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2UKK3sKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CWJvdHRvbTsKKwlVSU5UMTYJdG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9jZmlzdXByYW5nZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNpZAoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJbWFqb3I7CisJVUlOVDE2CW1pbm9yOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNpZF90OworCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHMKK3sKKwlVSU5UMTYJdmFsdWVbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9tZWFzdXJlbWVudHMKK3sKKwlVSU5UMTYJdmFsdWVbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzcworeworCVVJTlQ4CWFkZHJbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19jYWxsbmFtZQoreworCVVJTlQ4CWNhbGxuYW1lWzhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVnZG9tYWluCit7CisJVUlOVDE2CW51bWRvbWFpbnM7CisJVUlOVDE2CWRvbWFpbls1XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVnZG9tYWluX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbAoreworCVVJTlQxNgljaF9iaXRtYXA7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWwKK3sKKwlVSU5UMTYJY2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uCit7CisJVUlOVDE2CWF2YWlsYWJsZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdGVtcHR5cGUKK3sKKwlVSU5UMTYJdHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdGVtcHR5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwCit7CisJVUlOVDE2CWNoX3ZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwCit7CisJVUlOVDE2CWNoX3ZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdHJpbWRhY19zZXR1cAoreworCVVJTlQxNgl0cmltaWRhYzsKKwlVSU5UMTYJdHJpbXFkYWM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaWZyX3NldHRpbmcKK3sKKwlVSU5UMTYJdmFsdWVbM107Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nCit7CisJVUlOVDE2CXZhbHVlWzNdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lCit7CisJVUlOVDE2CXZhbHVlWzUwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvdworeworCVVJTlQzMgl2YWx1ZVszMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfc2hhZG93X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZgoreworCVVJTlQzMgl2YWx1ZVsyMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3AKK3sKKwlVSU5UMTYJdmFsdWVbMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGkKK3sKKwlVSU5UMTYJdmFsdWVbMTddOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2FsaV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX25pY19jb25maWcKK3sKKwlVSU5UMTYJY29uZmlnX2JpdG1hcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZm9fZGVsYXkKK3sKKwlVSU5UOCAgIGhmb19kZWxheTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9oZm9fZGVsYXlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcAoreworCVVJTlQxNgl2YWx1ZVszMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpCit7CisJVUlOVDE2CXZhbHVlWzMwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZW5kX29mX3BkYQoreworCVVJTlQxNgljcmM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJlYworeworCVVJTlQxNglsZW47IC8qIGluIHdvcmRzICovCisJVUlOVDE2CWNvZGU7CisJdW5pb24gcGRyIHsKKwloZmEzODR4X3Bkcl9wY2JfcGFydG51bV90CXBjYl9wYXJ0bnVtOworCWhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90CXBjYl90cmFjZW51bTsKKwloZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3QJbmljX3NlcmlhbDsKKwloZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3QJbWtrX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90CW5pY19yYW1zaXplOworCWhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3QJbWZpc3VwcmFuZ2U7CisJaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdAljZmlzdXByYW5nZTsKKwloZmEzODR4X3Bkcl9uaWNpZF90CQluaWNpZDsKKwloZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3QJcmVmZGFjX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdAl2Z2RhY19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzX3QJbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzOworCWhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3QJbWFjX2FkZHJlc3M7CisJaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3QJbWtrX2NhbGxuYW1lOworCWhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90CQlyZWdkb21haW47CisJaGZhMzg0eF9wZHJfYWxsb3dlZF9jaGFubmVsX3QJYWxsb3dlZF9jaGFubmVsOworCWhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90CWRlZmF1bHRfY2hhbm5lbDsKKwloZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbl90CXByaXZhY3lfb3B0aW9uOworCWhmYTM4NHhfcGRyX3RlbXB0eXBlX3QJCXRlbXB0eXBlOworCWhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90CXJlZmRhY19zZXR1cDsKKwloZmEzODR4X3Bkcl92Z2RhY19zZXR1cF90CXZnZGFjX3NldHVwOworCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdAlsZXZlbF9jb21wX3NldHVwOworCWhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdAl0cmltZGFjX3NldHVwOworCWhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3QJaWZyX3NldHRpbmc7CisJaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdAlyZnJfc2V0dGluZzsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lX3QJaGZhMzg2MV9iYXNlbGluZTsKKwloZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190CWhmYTM4NjFfc2hhZG93OworCWhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90CWhmYTM4NjFfaWZyZjsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdAloZmEzODYxX2NoY2Fsc3A7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdAloZmEzODYxX2NoY2FsaTsKKwloZmEzODR4X3Bkcl9uaWNfY29uZmlnX3QJbmljX2NvbmZpZzsKKwloZmEzODR4X2hmb19kZWxheV90ICAgICAgICAgICAgIGhmb19kZWxheTsKKwloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3QJaGZhMzg2MV9tYW5mX3Rlc3RzcDsKKwloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdGlfdAloZmEzODYxX21hbmZfdGVzdGk7CisJaGZhMzg0eF9wZHJfZW5kX29mX3BkYV90CWVuZF9vZl9wZGE7CisKKwl9IGRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyZWNfdDsKKworCisjaWZkZWYgX19LRVJORUxfXworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tICBNQUMgc3RhdGUgc3RydWN0dXJlLCBhcmd1bWVudCB0byBhbGwgZnVuY3Rpb25zIC0tCistLS0gIEFsc28sIGEgY29sbGVjdGlvbiBvZiBzdXBwb3J0IHR5cGVzIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3N0YXR1c3Jlc3VsdAoreworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXJlc3AwOworCVVJTlQxNglyZXNwMTsKKwlVSU5UMTYJcmVzcDI7Cit9IGhmYTM4NHhfY21kcmVzdWx0X3Q7CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisKKy8qIFVTQiBDb250cm9sIEV4Y2hhbmdlIChDVExYKToKKyAqICBBIHF1ZXVlIG9mIHRoZSBzdHJ1Y3R1cmUgYmVsb3cgaXMgbWFpbnRhaW5lZCBmb3IgYWxsIG9mIHRoZQorICogIFJlcXVlc3QvUmVzcG9uc2UgdHlwZSBVU0IgcGFja2V0cyBzdXBwb3J0ZWQgYnkgUHJpc20yLgorICovCisvKiBUaGUgZm9sbG93aW5nIGhmYTM4NHhfKiBzdHJ1Y3R1cmVzIGFyZSBhcmd1bWVudHMgdG8KKyAqIHRoZSB1c2VyY2IoKSBmb3IgdGhlIGRpZmZlcmVudCBDVExYIHR5cGVzLgorICovCit0eXBlZGVmIGhmYTM4NHhfY21kcmVzdWx0X3QgaGZhMzg0eF93cmlkcmVzdWx0X3Q7Cit0eXBlZGVmIGhmYTM4NHhfY21kcmVzdWx0X3QgaGZhMzg0eF93bWVtcmVzdWx0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcnJpZHJlc3VsdAoreworCVVJTlQxNgkJcmlkOworCWNvbnN0IHZvaWQJKnJpZGRhdGE7CisJVUlOVAkJcmlkZGF0YV9sZW47Cit9IGhmYTM4NHhfcnJpZHJlc3VsdF90OworCitlbnVtIGN0bHhfc3RhdGUgeworCUNUTFhfU1RBUlQgPSAwLAkvKiBTdGFydCBzdGF0ZSwgbm90IHF1ZXVlZCAqLworCisJQ1RMWF9DT01QTEVURSwJLyogQ1RMWCBzdWNjZXNzZnVsbHkgY29tcGxldGVkICovCisJQ1RMWF9SRVFfRkFJTEVELAkvKiBPVVQgVVJCIGNvbXBsZXRlZCB3LyBlcnJvciAqLworCisJQ1RMWF9QRU5ESU5HLAkJLyogUXVldWVkLCBkYXRhIHZhbGlkICovCisJQ1RMWF9SRVFfU1VCTUlUVEVELAkvKiBPVVQgVVJCIHN1Ym1pdHRlZCAqLworCUNUTFhfUkVRX0NPTVBMRVRFLAkvKiBPVVQgVVJCIGNvbXBsZXRlICovCisJQ1RMWF9SRVNQX0NPTVBMRVRFCS8qIElOIFVSQiByZWNlaXZlZCAqLworfTsKK3R5cGVkZWYgZW51bSBjdGx4X3N0YXRlICBDVExYX1NUQVRFOworCitzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4Oworc3RydWN0IGhmYTM4NHg7CisKK3R5cGVkZWYgdm9pZCAoKmN0bHhfY21kY2JfdCkoIHN0cnVjdCBoZmEzODR4KiwgY29uc3Qgc3RydWN0IGhmYTM4NHhfdXNiY3RseCogKTsKKwordHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkoCisJc3RydWN0IGhmYTM4NHgJKmh3LAorCXZvaWQJCSpjdGx4cmVzdWx0LAorCXZvaWQJCSp1c2VyY2JfZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseAoreworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCXNpemVfdAkJCW91dGJ1ZnNpemU7CisJaGZhMzg0eF91c2JvdXRfdAlvdXRidWY7CQkvKiBwa3QgYnVmIGZvciBPVVQgKi8KKwloZmEzODR4X3VzYmluX3QJCWluYnVmOwkJLyogcGt0IGJ1ZiBmb3IgSU4oYSBjb3B5KSAqLworCisJQ1RMWF9TVEFURQkJc3RhdGU7CQkvKiBUcmFja3MgcnVubmluZyBzdGF0ZSAqLworCisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKKwl2b2xhdGlsZSBpbnQJCXJlYXBhYmxlOwkvKiBGb29kIGZvciB0aGUgcmVhcGVyIHRhc2sgKi8KKworCWN0bHhfY21kY2JfdAkJY21kY2I7CQkvKiBBc3luYyBjb21tYW5kIGNhbGxiYWNrICovCisJY3RseF91c2VyY2JfdAkJdXNlcmNiOwkJLyogQXN5bmMgdXNlciBjYWxsYmFjaywgKi8KKwl2b2lkCQkJKnVzZXJjYl9kYXRhOwkvKiAgYXQgQ1RMWCBjb21wbGV0aW9uICAqLworCisJaW50CQkJdmFyaWFudDsJLyogSWRlbnRpZmllcyBjbWQgdmFyaWFudCAqLworfSBoZmEzODR4X3VzYmN0bHhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4cQoreworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQJY29tcGxldGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlYXBhYmxlOworfSBoZmEzODR4X3VzYmN0bHhxX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgaGZhNDg0eF9tZXRhY21kCit7CisJVUlOVDE2CQljbWQ7CisKKwlVSU5UMTYgICAgICAgICAgcGFybTA7CisJVUlOVDE2ICAgICAgICAgIHBhcm0xOworCVVJTlQxNiAgICAgICAgICBwYXJtMjsKKworI2lmIDAgLy9YWFggY21kIGlycSBzdHVmZgorCVVJTlQxNiAgICAgICAgICBidWxraWQ7ICAgICAgICAgLyogd2hhdCBSSUQvRklEIHRvIGNvcHkgZG93bi4gKi8KKwlpbnQgICAgICAgICAgICAgYnVsa2xlbjsgICAgICAgIC8qIGhvdyBtdWNoIHRvIGNvcHkgZnJvbSBCQVAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgICpidWxrZGF0YTsgICAgICAvKiBBbmQgdG8gd2hlcmU/ICovCisjZW5kaWYKKworCWhmYTM4NHhfY21kcmVzdWx0X3QgcmVzdWx0OworfSBoZmEzODR4X21ldGFjbWRfdDsKKworI2RlZmluZQlNQVhfUFJJU00yX0dSUF9BRERSCTE2CisjZGVmaW5lCU1BWF9HUlBfQUREUgkJMzIKKyNkZWZpbmUgV0xBTl9DT01NRU5UX01BWAk4MCAgLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KKworI2RlZmluZSBNTV9TQVRfUENGCQkoQklUMTQpCisjZGVmaW5lIE1NX0dDU0RfUENGCQkoQklUMTUpCisjZGVmaW5lIE1NX0dDU0RfUENGX0VCCQkoQklUMTQgfCBCSVQxNSkKKworI2RlZmluZSBXTEFOX1NUQVRFX1NUT1BQRUQJMCAgIC8qIE5ldHdvcmsgaXMgbm90IGFjdGl2ZS4gKi8KKyNkZWZpbmUgV0xBTl9TVEFURV9TVEFSVEVECTEgICAvKiBOZXR3b3JrIGhhcyBiZWVuIHN0YXJ0ZWQuICovCisKKyNkZWZpbmUgV0xBTl9BVVRIX01BWCAgICAgICAgICAgNjAgIC8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwICAvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMCAgIC8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEgICAvKiBBbGwgc3RhdGlvbnMgbWF5IGJlIGF1dGhlbnRpY2F0ZWQuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0FMTE9XCTIgICAvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMyAgIC8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCisKKy8qIFhYWCBUaGVzZSBhcmUgZ29pbmcgYXdheSBBU0FQICovCit0eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QKK3sKKwlVSU5UCWNudDsKKwlVSU5UOAlhZGRyW1dMQU5fQVVUSF9NQVhdW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWFzc29jW1dMQU5fQVVUSF9NQVhdOworfSBwcmlzbTJzdGFfYXV0aGxpc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2FjY2Vzc2xpc3QKK3sKKwlVSU5UCW1vZGlmeTsKKwlVSU5UCWNudDsKKwlVSU5UOAlhZGRyW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07CisJVUlOVAljbnQxOworCVVJTlQ4CWFkZHIxW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07Cit9IHByaXNtMnN0YV9hY2Nlc3NsaXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHgKK3sKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJLyogUmVzb3VyY2UgY29uZmlnICovCisJVUlOVDMyCQkJaW9iYXNlOworCWNoYXIJCQlfX2lvbWVtICptZW1iYXNlOworCVVJTlQzMgkJCWlycTsKKyNlbHNlCisJLyogVVNCIHN1cHBvcnQgZGF0YSAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CisJc3RydWN0IHVyYgkJcnhfdXJiOworCXN0cnVjdCBza19idWZmCQkqcnhfdXJiX3NrYjsKKwlzdHJ1Y3QgdXJiCQl0eF91cmI7CisJc3RydWN0IHVyYgkJY3RseF91cmI7CisJaGZhMzg0eF91c2JvdXRfdAl0eGJ1ZmY7CisJaGZhMzg0eF91c2JjdGx4cV90CWN0bHhxOworCXN0cnVjdCB0aW1lcl9saXN0CXJlcXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CXJlc3B0aW1lcjsKKworCXN0cnVjdCB0aW1lcl9saXN0CXRocm90dGxlOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlYXBlcl9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJY29tcGxldGlvbl9iaDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAl1c2Jfd29yazsKKworCXVuc2lnbmVkIGxvbmcJCXVzYl9mbGFnczsKKyNkZWZpbmUgVEhST1RUTEVfUlgJMAorI2RlZmluZSBUSFJPVFRMRV9UWAkxCisjZGVmaW5lIFdPUktfUlhfSEFMVAkyCisjZGVmaW5lIFdPUktfVFhfSEFMVAkzCisjZGVmaW5lIFdPUktfUlhfUkVTVU1FCTQKKyNkZWZpbmUgV09SS19UWF9SRVNVTUUJNQorCisJdW5zaWduZWQgc2hvcnQJCXJlcV90aW1lcl9kb25lOjE7CisJdW5zaWduZWQgc2hvcnQJCXJlc3BfdGltZXJfZG9uZToxOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9pbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBlbmRwX291dDsKKyNlbmRpZiAvKiAhVVNCICovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2OworI2Vsc2UKKwlkZXZfbGlua190CSpsaW5rOworI2VuZGlmCisJZGV2X25vZGVfdAlub2RlOworI2VuZGlmCisKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZl9mY3M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfY2hhbm5lbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZl90cnVuY2F0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZmhkcjsKKworCXdhaXRfcXVldWVfaGVhZF90IGNtZHE7CSAgICAgICAgLyogd2FpdCBxdWV1ZSBpdHNlbGYgKi8KKworCS8qIENvbnRyb2xsZXIgc3RhdGUgKi8KKwlVSU5UMzIJCXN0YXRlOworCVVJTlQzMgkJaXNhcDsKKwlVSU5UOAkJcG9ydF9lbmFibGVkW0hGQTM4NHhfTlVNUE9SVFNfTUFYXTsKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJVUlOVAkJYXV4ZW47CisJVUlOVCAgICAgICAgICAgIGlzcmFtMTY7CisjZW5kaWYgLyogIVVTQiAqLworCisJLyogRG93bmxvYWQgc3VwcG9ydCAqLworCVVJTlQJCQkJZGxzdGF0ZTsKKwloZmEzODR4X2Rvd25sb2FkYnVmZmVyX3QJYnVmaW5mbzsKKwlVSU5UMTYJCQkJZGx0aW1lb3V0OworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCXNwaW5sb2NrX3QJY21kbG9jazsKKwl2b2xhdGlsZSBpbnQgICAgY21kZmxhZzsgICAgICAgIC8qIHdhaXQgcXVldWUgZmxhZyAqLworCWhmYTM4NHhfbWV0YWNtZF90ICpjbWRkYXRhOyAgICAgIC8qIGZvciBvdXIgYXN5bmMgY2FsbGJhY2sgKi8KKworCS8qIEJBUCBzdXBwb3J0ICovCisJc3BpbmxvY2tfdAliYXBsb2NrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIGJhcF90YXNrbGV0OworCisJLyogTUFDIGJ1ZmZlciBpZHMgKi8KKyAgICAgICAgVUlOVDE2ICAgICAgICAgIHR4ZmlkX2hlYWQ7CisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF90YWlsOworICAgICAgICBVSU5UICAgICAgICAgICAgdHhmaWRfTjsKKyAgICAgICAgVUlOVDE2ICAgICAgICAgIHR4ZmlkX3F1ZXVlW0hGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVhdOworCVVJTlQxNgkJCWluZm9maWQ7CisJc3RydWN0IHNlbWFwaG9yZQlpbmZvZmlkX3NlbTsKKyNlbmRpZiAvKiAhVVNCICovCisKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mbGFnOyAgICAvKiB0byBzaWduYWwgc2NhbiBjb21sZXRlICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2FwOyAgICAgICAgLyogYXJlIHdlIGpvaW5lZCB0byBhIHNwZWNpZmljIGFwICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX3JldHJpZXM7ICAgLyogbnVtYmVyIG9mIGpvaW4gcmV0cmllcyB0aWxsIHdlIGZhaWwgKi8KKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgIGpvaW5yZXE7ICAgICAgICAvKiBqb2luIHJlcXVlc3Qgc2F2ZWQgZGF0YSAqLworCisJd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXY7CisJLyogVGltZXIgdG8gYWxsb3cgZm9yIHRoZSBkZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGxpbmtzdGF0dXMgbWVzc2FnZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWxpbmtfYmg7CisKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY29tbXNxdWFsX2JoOworCWhmYTM4NHhfY29tbXNxdWFsaXR5X3QgIHF1YWw7CisJc3RydWN0IHRpbWVyX2xpc3QJY29tbXNxdWFsX3RpbWVyOworCisJVUlOVDE2IGxpbmtfc3RhdHVzOworCVVJTlQxNiBsaW5rX3N0YXR1c19uZXc7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgICAgYXV0aHE7CisKKwkvKiBBbmQgaGVyZSB3ZSBoYXZlIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBpbiBwcml2ICovCisKKwkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KKwlVSU5UCQlwcmVzbmlmZl9wb3J0X3R5cGU7CisJVUlOVDE2CQlwcmVzbmlmZl93ZXBmbGFnczsKKwlVSU5UMzIJCWRvdDExX2Rlc2lyZWRfYnNzX3R5cGU7CisJaW50CQlhcDsJLyogQVAgZmxhZzogMCAtIFN0YXRpb24sIDEgLSBBY2Nlc3MgUG9pbnQuICovCisKKwlpbnQgICAgICAgICAgICAgZGJtYWRqdXN0OworCisJLyogR3JvdXAgQWRkcmVzc2VzIC0gcmlnaHQgbm93LCB0aGVyZSBhcmUgdXAgdG8gYSB0b3RhbAorCW9mIE1BWF9HUlBfQUREUiBncm91cCBhZGRyZXNzZXMgKi8KKwlVSU5UOAkJZG90MTFfZ3JwX2FkZHJbTUFYX0dSUF9BRERSXVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UCQlkb3QxMV9ncnBjbnQ7CisKKwkvKiBDb21wb25lbnQgSWRlbnRpdGllcyAqLworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfbmljOworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfcHJpX2Z3OworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfc3RhX2Z3OworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfYXBfZnc7CisJVUlOVDE2CQkJbW1fbW9kczsKKworCS8qIFN1cHBsaWVyIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfbWZpOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2NmaTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9wcmk7CisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfc3RhOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2FwOworCisJLyogQWN0b3IgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9wcmlfY2ZpOyAvKiBwcmkgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3Rfc3RhX2NmaTsgLyogc3RhIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9tZmk7IC8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfY2ZpOyAgLyogYXAgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfbWZpOyAgLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCisJVUlOVDMyCQkJcHN1c2VyY291bnQ7ICAvKiBQb3dlciBzYXZlIHVzZXIgY291bnQuICovCisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QJdGFsbGllczsgICAgICAvKiBDb21tdW5pY2F0aW9uIHRhbGxpZXMuICovCisJVUlOVDgJCQljb21tZW50W1dMQU5fQ09NTUVOVF9NQVgrMV07IC8qIFVzZXIgY29tbWVudCAqLworCisJLyogQ2hhbm5lbCBJbmZvIHJlcXVlc3QgcmVzdWx0cyAoQVAgb25seSkgKi8KKwlzdHJ1Y3QgeworCQlhdG9taWNfdAkJZG9uZTsKKwkJVUlOVDgJCQljb3VudDsKKwkJaGZhMzg0eF9DaEluZm9SZXN1bHRfdAlyZXN1bHRzOworCX0gY2hhbm5lbF9pbmZvOworCisJaGZhMzg0eF9JbmZGcmFtZV90ICAgICAgKnNjYW5yZXN1bHRzOworCisKKyAgICAgICAgcHJpc20yc3RhX2F1dGhsaXN0X3QJYXV0aGxpc3Q7ICAgICAvKiBBdXRoZW50aWNhdGVkIHN0YXRpb24gbGlzdC4gKi8KKwlVSU5UCQkJYWNjZXNzbW9kZTsgICAvKiBBY2Nlc3MgbW9kZS4gKi8KKyAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlhbGxvdzsgICAgICAgIC8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLworICAgICAgICBwcmlzbTJzdGFfYWNjZXNzbGlzdF90CWRlbnk7ICAgICAgICAgLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KKworfSBoZmEzODR4X3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCit2b2lkCitoZmEzODR4X2NyZWF0ZSgKKwloZmEzODR4X3QgKmh3LAorCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpOworI2Vsc2UKK3ZvaWQKK2hmYTM4NHhfY3JlYXRlKAorCWhmYTM4NHhfdCAqaHcsCisJVUlOVCBpcnEsCisJVUlOVDMyIGlvYmFzZSwKKwlVSU5UOCBfX2lvbWVtICptZW1iYXNlKTsKKyNlbmRpZgorCit2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KTsKKworaXJxcmV0dXJuX3QKK2hmYTM4NHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCBQVF9SRUdTKTsKK2ludAoraGZhMzg0eF9jb3JlcmVzZXQoIGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKTsKK2ludAoraGZhMzg0eF9kcnZyX2NoaW5mb3Jlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCk7CitpbnQKK2hmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIFVJTlQ4ICphZGRyKTsKK2ludAoraGZhMzg0eF9kcnZyX2hvc3RzY2FucmVzdWx0cyggaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCk7CitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkcmVzcywgVUlOVDMyICpyZXN1bHQpOworaW50CitoZmEzODR4X2RydnJfbW1pX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBhZGRyZXNzLCBVSU5UMzIgZGF0YSk7CitpbnQKK2hmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGV4ZWFkZHIpOworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCBVSU5UIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9zY2FucmVzdWx0cyggaGZhMzg0eF90ICpodyk7CisKK2ludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnZhbCkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZihVSU5UMTYpKTsKKwlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkqKChVSU5UMTYqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMTYoKigoVUlOVDE2Kil2YWwpKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWczMihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICp2YWwpCit7CisJaW50CQlyZXN1bHQgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZihVSU5UMzIpKTsKKwlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkqKChVSU5UMzIqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMzIoKigoVUlOVDMyKil2YWwpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIFVJTlQxNiB2YWwpCit7CisJVUlOVDE2IHZhbHVlID0gaG9zdDJoZmEzODR4XzE2KHZhbCk7CisJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWczMihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMzIgdmFsKQoreworCVVJTlQzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCitpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICAgICAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgICAgICAgIHJpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAqdXNlcmNiX2RhdGEpOworCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuLAorCQkJICAgICB2b2lkICpwdHIxLCB2b2lkICpwdHIyKQoreworICAgICAgICAgKHZvaWQpcHRyMTsKKyAgICAgICAgICh2b2lkKXB0cjI7CisgICAgICAgICByZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgcmlkLCBidWYsIGxlbik7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcxNl9hc3luYyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMTYgdmFsKQoreworCVVJTlQxNiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8xNih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKKwkJCQkJICAgIE5VTEwgLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWczMl9hc3luYyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMzIgdmFsKQoreworCVVJTlQzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKKwkJCQkJICAgIE5VTEwgLCBOVUxMKTsKK30KKworCitpbnQKK2hmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Cit2b2lkCitoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworaW50CitoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9jbWRfZGlhZ25vc2UoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF90cmFuc21pdChoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IHFvcywgVUlOVDE2IGZpZCk7CitpbnQKK2hmYTM4NHhfY21kX2NsZWFycGVyc2lzdChoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKTsKK2ludAoraGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF9pbnF1aXJlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpOworaW50CitoZmEzODR4X2NtZF9hY2Nlc3MoaGZhMzg0eF90ICpodywgVUlOVDE2IHdyaXRlLCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBlbmFibGUpOworaW50CitoZmEzODR4X2NtZF9kb3dubG9hZCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNiBtb2RlLAorCVVJTlQxNiBsb3dhZGRyLAorCVVJTlQxNiBoaWdoYWRkciwKKwlVSU5UMTYgY29kZWxlbik7CitpbnQKK2hmYTM4NHhfY21kX2F1eF9lbmFibGUoaGZhMzg0eF90ICpodywgaW50IGZvcmNlKTsKK2ludAoraGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfY29weV9mcm9tX2JhcCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNgliYXAsCisJVUlOVDE2CWlkLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKK2ludAoraGZhMzg0eF9jb3B5X3RvX2JhcCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNgliYXAsCisJVUlOVDE2CWlkLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQzMgljYXJkYWRkciwKKwlVSU5UMzIJYXV4Y3RsLAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7Cit2b2lkCitoZmEzODR4X2NvcHlfdG9fYXV4KAorCWhmYTM4NHhfdCAqaHcsCisJVUlOVDMyCWNhcmRhZGRyLAorCVVJTlQzMglhdXhjdGwsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKworLyoKKyAgIEhGQTM4NHggaXMgYSBMSVRUTEUgRU5ESUFOIHBhcnQuCisKKyAgIHRoZSBnZXQvc2V0cmVnIGZ1bmN0aW9ucyBpbXBsaWNpdGx5IGJ5dGUtc3dhcCB0aGUgZGF0YSB0byBMRS4KKyAgIHRoZSBfbm9zd2FwIHZhcmlhbnRzIGRvIG5vdCBwZXJmb3JtIGEgYnl0ZS1zd2FwIG9uIHRoZSBkYXRhLgorKi8KKworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHZhbCwgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZ19ub3N3YXAoaGZhMzg0eF90ICpodywgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKTsKKworI2lmZGVmIFJFVkVSU0VfRU5ESUFOCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnIF9faGZhMzg0eF9nZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnIF9faGZhMzg0eF9zZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfZ2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfc2V0cmVnCisjZWxzZQorI2RlZmluZSBoZmEzODR4X2dldHJlZyBfX2hmYTM4NHhfZ2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnIF9faGZhMzg0eF9zZXRyZWcKKyNkZWZpbmUgaGZhMzg0eF9nZXRyZWdfbm9zd2FwIF9faGZhMzg0eF9nZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfc2V0cmVnX25vc3dhcAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2dldHJlZworKgorKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2Ygb25lIG9mIHRoZSBNQUMgcmVnaXN0ZXJzLiAgRG9uZSBoZXJlCisqIGJlY2F1c2UgZGlmZmVyZW50IFBSSVNNMiBNQUMgcGFydHMgdXNlIGRpZmZlcmVudCBidXNlcyBhbmQgc3VjaC4KKyogTk9URTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBIT1NUIE9SREVSISEhISEhCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICBNQUMgcGFydCBzdHJ1Y3R1cmUKKyogICAgICAgcmVnICAgICAgICBSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIFZhbHVlIGZyb20gdGhlIHJlZ2lzdGVyIGluIEhPU1QgT1JERVIhISEhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgVUlOVDE2CitfX2hmYTM4NHhfZ2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKQoreworLyoJcHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgZnJvbSAweCUweFxuIiwgaHctPm1lbWJhc2UgKyByZWcpOyAqLworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJcmV0dXJuIHdsYW5faW53X2xlMTZfdG9fY3B1KGh3LT5pb2Jhc2UrcmVnKTsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlyZXR1cm4gX19sZTE2X3RvX2NwdShyZWFkdyhody0+bWVtYmFzZSArIHJlZykpOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3NldHJlZworKgorKiBTZXQgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdmFsdWUgaXMgaW4gSE9TVCBPUkRFUiEhISEhIQorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3CU1BQyBwYXJ0IHN0cnVjdHVyZQorKgl2YWwJVmFsdWUsIGluIEhPU1QgT1JERVIhISwgdG8gcHV0IGluIHRoZSByZWdpc3RlcgorKiAgICAgICByZWcJUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBOb3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19oZmEzODR4X3NldHJlZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZykKK3sKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXdsYW5fb3V0d19jcHVfdG9fbGUxNiggdmFsLCBody0+aW9iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJd3JpdGV3KF9fY3B1X3RvX2xlMTYodmFsKSwgaHctPm1lbWJhc2UgKyByZWcpOworCXJldHVybjsKKyNlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2dldHJlZ19ub3N3YXAKKyoKKyogUmV0cmlldmUgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICBNQUMgcGFydCBzdHJ1Y3R1cmUKKyogICAgICAgcmVnICAgICAgICBSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIFZhbHVlIGZyb20gdGhlIHJlZ2lzdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZ19ub3N3YXAoaGZhMzg0eF90ICpodywgVUlOVCByZWcpCit7CisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKwlyZXR1cm4gd2xhbl9pbncoaHctPmlvYmFzZStyZWcpOworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCXJldHVybiByZWFkdyhody0+bWVtYmFzZSArIHJlZyk7CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9zZXRyZWdfbm9zd2FwCisqCisqIFNldCB0aGUgdmFsdWUgb2Ygb25lIG9mIHRoZSBNQUMgcmVnaXN0ZXJzLiAgRG9uZSBoZXJlCisqIGJlY2F1c2UgZGlmZmVyZW50IFBSSVNNMiBNQUMgcGFydHMgdXNlIGRpZmZlcmVudCBidXNlcyBhbmQgc3VjaC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodwlNQUMgcGFydCBzdHJ1Y3R1cmUKKyoJdmFsCVZhbHVlIHRvIHB1dCBpbiB0aGUgcmVnaXN0ZXIKKyogICAgICAgcmVnCVJlZ2lzdGVyIGlkZW50aWZpZXIgKG9mZnNldCBmb3IgSS9PIGJhc2VkIGkvZikKKyoKKyogUmV0dXJuczoKKyogICAgICAgTm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKQoreworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJd2xhbl9vdXR3KCB2YWwsIGh3LT5pb2Jhc2UgKyByZWcpOworCXJldHVybjsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwl3cml0ZXcodmFsLCBody0+bWVtYmFzZSArIHJlZyk7CisJcmV0dXJuOworI2VuZGlmCit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGhmYTM4NHhfZXZlbnRzX2FsbChoZmEzODR4X3QgKmh3KQoreworCWhmYTM4NHhfc2V0cmVnKGh3LAorCQkgICAgICAgSEZBMzg0eF9JTlRfTk9STUFMCisjaWZkZWYgQ01EX0lSUQorCQkgICAgICAgfCBIRkEzODR4X0lOVEVOX0NNRF9TRVQoMSkKKyNlbmRpZgorCQkgICAgICAgLAorCQkgICAgICAgSEZBMzg0eF9JTlRFTik7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhmYTM4NHhfZXZlbnRzX25vYmFwKGhmYTM4NHhfdCAqaHcpCit7CisJaGZhMzg0eF9zZXRyZWcoaHcsCisJCSAgICAgICAgKEhGQTM4NHhfSU5UX05PUk1BTCAmIH5IRkEzODR4X0lOVF9CQVBfT1ApCisjaWZkZWYgQ01EX0lSUQorCQkgICAgICAgfCBIRkEzODR4X0lOVEVOX0NNRF9TRVQoMSkKKyNlbmRpZgorCQkgICAgICAgLAorCQkgICAgICAgSEZBMzg0eF9JTlRFTik7CisKK30KKworI2VuZGlmIC8qIFdMQU5fSE9TVElGICE9IFdMQU5fVVNCICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgIC8qIF9IRkEzODR4X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMGM1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC0wLDAgKzEsNTAyNyBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvaGZhMzg0eF91c2IuYworKgorKiBGdW5jdGlvbnMgdGhhdCB0YWxrIHRvIHRoZSBVU0IgdmFyaWFudG9mIHRoZSBJbnRlcnNpbCBoZmEzODR4IE1BQworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBwcmlzbTIvaGZhMzg0eAorKiA4MDIuMTEgTUFDIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBob3N0IGludGVyZmFjZS4KKyoKKyogVGhlIGZ1bmN0aW9ucyBjYW4gYmUgY29uc2lkZXJlZCB0byByZXByZXNlbnQgc2V2ZXJhbCBsZXZlbHMgb2YKKyogYWJzdHJhY3Rpb24uICBUaGUgbG93ZXN0IGxldmVsIGZ1bmN0aW9ucyBhcmUgc2ltcGx5IEMtY2FsbGFibGUgd3JhcHBlcnMKKyogYXJvdW5kIHRoZSByZWdpc3RlciBhY2Nlc3Nlcy4gIFRoZSBuZXh0IGhpZ2hlciBsZXZlbCByZXByZXNlbnRzIEMtY2FsbGFibGUKKyogcHJpc20yIEFQSSBmdW5jdGlvbnMgdGhhdCBtYXRjaCB0aGUgSW50ZXJzaWwgZG9jdW1lbnRhdGlvbiBhcyBjbG9zZWx5CisqIGFzIGlzIHJlYXNvbmFibGUuICBUaGUgbmV4dCBoaWdoZXIgbGF5ZXIgaW1wbGVtZW50cyBjb21tb24gc2VxdWVuY2VzCisqIG9mIGludm9rYXRpb25zIG9mIHRoZSBBUEkgbGF5ZXIgKGUuZy4gd3JpdGUgdG8gYmFwLCBmb2xsb3dlZCBieSBjbWQpLgorKgorKiBDb21tb24gc2VxdWVuY2VzOgorKiBoZmEzODR4X2RydnJfeHh4CUhpZ2hlc3QgbGV2ZWwgYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZQorKgkJCWhmYTM4NHggY29kZS4gIFRoZXkgYXJlIGRyaXZlciBkZWZpbmVkIHdyYXBwZXJzCisqCQkJZm9yIGNvbW1vbiBzZXF1ZW5jZXMuICBUaGVzZSBmdW5jdGlvbnMgZ2VuZXJhbGx5CisqCQkJdXNlIHRoZSBzZXJ2aWNlcyBvZiB0aGUgbG93ZXIgbGV2ZWxzLgorKgorKiBoZmEzODR4X2RydnJfeHh4Y29uZmlnICBBbiBleGFtcGxlIG9mIHRoZSBkcnZyIGxldmVsIGFic3RyYWN0aW9uLiBUaGVzZQorKgkJCWZ1bmN0aW9ucyBhcmUgd3JhcHBlcnMgZm9yIHRoZSBSSUQgZ2V0L3NldAorKgkJCXNlcXVlbmNlLiBUaGV5IAljYWxsIGNvcHlfW3RvfGZyb21dX2JhcCgpIGFuZAorKgkJCWNtZF9hY2Nlc3MoKS4JVGhlc2UgZnVuY3Rpb25zIG9wZXJhdGUgb24gdGhlCisqCQkJUklEcyBhbmQgYnVmZmVycyB3aXRob3V0IHZhbGlkYXRpb24uICBUaGUgY2FsbGVyCisqCQkJaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuCisqCisqIEFQSSB3cmFwcGVyIGZ1bmN0aW9uczoKKyogaGZhMzg0eF9jbWRfeHh4CWZ1bmN0aW9ucyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBmL3cgY29tbWFuZHMuCisqCQkJVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBjb3JyZXNwb25kIHRvIGVhY2ggY29tbWFuZAorKgkJCWFyZ3VtZW50LCBldmVuIGNvbW1hbmQgYXJndW1lbnRzIHRoYXQgZ2V0IHBhY2tlZAorKgkJCWludG8gc2luZ2xlIHJlZ2lzdGVycy4gIFRoZXNlIGZ1bmN0aW9ucyBfanVzdF8KKyoJCQlpc3N1ZSB0aGUgY29tbWFuZCBieSBzZXR0aW5nIHRoZSBjbWQvcGFybSByZWdzCisqCQkJJiByZWFkaW5nIHRoZSBzdGF0dXMvcmVzcCByZWdzLiAgQWRkaXRpb25hbAorKgkJCWFjdGl2aXRpZXMgcmVxdWlyZWQgdG8gZnVsbHkgdXNlIGEgY29tbWFuZAorKgkJCShyZWFkL3dyaXRlIGZyb20vdG8gYmFwLCBnZXQvc2V0IGludCBzdGF0dXMgZXRjLikKKyoJCQlhcmUgaW1wbGVtZW50ZWQgc2VwYXJhdGVseS4gIFRoaW5rIG9mIHRoZXNlIGFzCisqCQkJQy1jYWxsYWJsZSBwcmlzbTIgY29tbWFuZHMuCisqCisqIExvd2VzdCBMYXllciBGdW5jdGlvbnM6CisqIGhmYTM4NHhfZG9jbWRfeHh4CVRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIHNlcXVlbmNlIHJlcXVpcmVkCisqCQkJdG8gaXNzdWUgYW55IHByaXNtMiBjb21tYW5kLiAgUHJpbWFyaWx5IHVzZWQgYnkgdGhlCisqCQkJaGZhMzg0eF9jbWRfeHh4IGZ1bmN0aW9ucy4KKyoKKyogaGZhMzg0eF9iYXBfeHh4CUJBUCByZWFkL3dyaXRlIGFjY2VzcyBmdW5jdGlvbnMuCisqCQkJTm90ZTogd2UgdXN1YWxseSB1c2UgQkFQMCBmb3Igbm9uLWludGVycnVwdCBjb250ZXh0CisqCQkJIGFuZCBCQVAxIGZvciBpbnRlcnJ1cHQgY29udGV4dC4KKyoKKyogaGZhMzg0eF9kbF94eHgJZG93bmxvYWQgcmVsYXRlZCBmdW5jdGlvbnMuCisqCisqIERyaXZlciBTdGF0ZSBJc3N1ZXM6CisqIE5vdGUgdGhhdCB0aGVyZSBhcmUgdHdvIHBhaXJzIG9mIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSB0aGUKKyogJ2luaXRpYWxpemVkJyBhbmQgJ3J1bm5pbmcnIHN0YXRlcyBvZiB0aGUgaHcvTUFDIGNvbWJvLiAgVGhlIGZvdXIKKyogZnVuY3Rpb25zIGFyZSBjcmVhdGUoKSwgZGVzdHJveSgpLCBzdGFydCgpLCBhbmQgc3RvcCgpLiAgY3JlYXRlKCkKKyogc2V0cyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIGhmYTM4NHhfKgorKiBmdW5jdGlvbnMgYW5kIGRlc3Ryb3koKSBjbGVhbnMgdGhlbSB1cC4gIFRoZSBzdGFydCgpIGZ1bmN0aW9uIGdldHMKKyogdGhlIGFjdHVhbCBoYXJkd2FyZSBydW5uaW5nIGFuZCBlbmFibGVzIHRoZSBpbnRlcnJ1cHRzLiAgVGhlIHN0b3AoKQorKiBmdW5jdGlvbiBzaHV0cyB0aGUgaGFyZHdhcmUgZG93bi4gIFRoZSBzZXF1ZW5jZSBzaG91bGQgYmU6CisqIGNyZWF0ZSgpCisqIHN0YXJ0KCkKKyogIC4KKyogIC4gIERvIGludGVyZXN0aW5nIHRoaW5ncyB3LyB0aGUgaGFyZHdhcmUKKyogIC4KKyogc3RvcCgpCisqIGRlc3Ryb3koKQorKgorKiBOb3RlIHRoYXQgZGVzdHJveSgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHN0b3AoKSBmaXJzdC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKyNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBzcGVjaWZpYyB0byBVU0IiCisjZW5kaWYKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEwKQorc3RhdGljIGludAord2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBjb21wbGV0aW9uICp4KQoreworICBpbnQgcmV0ID0gMDsKKworICBtaWdodF9zbGVlcCgpOworCisgIHNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisgIGlmICgheC0+ZG9uZSkgeworICAgIERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisgICAgd2FpdC5mbGFncyB8PSBXUV9GTEFHX0VYQ0xVU0lWRTsKKyAgICBfX2FkZF93YWl0X3F1ZXVlX3RhaWwoJngtPndhaXQsICZ3YWl0KTsKKyAgICBkbyB7CisgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKyAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOworICAgICAgICBfX3JlbW92ZV93YWl0X3F1ZXVlKCZ4LT53YWl0LCAmd2FpdCk7CisgICAgICAgIGdvdG8gb3V0OworICAgICAgfQorICAgICAgX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworICAgICAgc3Bpbl91bmxvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICAgICAgc2NoZWR1bGUoKTsKKyAgICAgIHNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisgICAgfSB3aGlsZSAoIXgtPmRvbmUpOworICAgIF9fcmVtb3ZlX3dhaXRfcXVldWUoJngtPndhaXQsICZ3YWl0KTsKKyAgfQorICB4LT5kb25lLS07CitvdXQ6CisgIHNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKworICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjkpCitzdGF0aWMgdm9pZAordXNiX2luaXRfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwltZW1zZXQodXJiLCAwLCBzaXplb2YoKnVyYikpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkgLyogdHVuZSBtZSEgKi8KKwl1cmItPmNvdW50ID0gKGF0b21pY190KUFUT01JQ19JTklUKDEpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7Cit9CisjZW5kaWYKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkgLyogdHVuZSBtZSEgKi8KKyMgIGRlZmluZSBTVUJNSVRfVVJCKHUsZikgIHVzYl9zdWJtaXRfdXJiKHUsZikKKyNlbHNlCisjICBkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1KQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKK2VudW0gY21kX21vZGUKK3sKKyAgRE9XQUlUID0gMCwKKyAgRE9BU1lOQworfTsKK3R5cGVkZWYgZW51bSBjbWRfbW9kZSBDTURfTU9ERTsKKworI2RlZmluZSBUSFJPVFRMRV9KSUZGSUVTCShIWi84KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKyNkZWZpbmUgUk9VTkRVUDY0KGEpICgoKGEpKzYzKSZ+NjMpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCitleHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisjaWZkZWYgREVCVUdfVVNCCitzdGF0aWMgdm9pZAorZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAoraGZhMzg0eF9pbnRfcnhtb25pdG9yKAorCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwloZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOworCitzdGF0aWMgaW50CitzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IGZsYWdzKTsKKworc3RhdGljIGludAorc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ2FsbGJhY2tzICovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKyNlbHNlCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZAoraGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2Jpbik7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCk7CisKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fY3RseChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmluX3QgKnVzYmluLAorCQkJICAgICAgIGludCB1cmJfc3RhdHVzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIHByaXNtMiB1c2IgY29tbWFuZCBxdWV1ZSAqLworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodyk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCit1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RydWN0IHVzYmN0bHhfY29tcGxldG9yCit7CisJaW50ICgqY29tcGxldGUpKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciopOworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHVzYmN0bHhfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CisKK3N0YXRpYyBpbnQKK3VubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyBpbnQKK3VzYmN0bHhfZ2V0X3N0YXR1cyhjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KTsKKworc3RhdGljIHZvaWQKK3VzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBMb3cgbGV2ZWwgcmVxL3Jlc3AgQ1RMWCBmb3JtYXR0ZXJzIGFuZCBzdWJtaXR0ZXJzICovCitzdGF0aWMgaW50CitoZmEzODR4X2RvY21kKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwloZmEzODR4X21ldGFjbWRfdCAqY21kLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ycmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93cmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ybWVtKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcGFnZSwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmRhdGEsCisJVUlOVAlsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF9kb3dtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2lzZ29vZF9wZHJjb2RlKFVJTlQxNiBwZHJjb2RlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGN0bHhzdHIoQ1RMWF9TVEFURSBzKQoreworCXN0YXRpYyBjb25zdCBjaGFyKiBjdGx4X3N0cltdID0geworCQkiSW5pdGlhbCBzdGF0ZSIsCisJCSJDb21wbGV0ZSIsCisJCSJSZXF1ZXN0IGZhaWxlZCIsCisJCSJSZXF1ZXN0IHBlbmRpbmciLAorCQkiUmVxdWVzdCBwYWNrZXQgc3VibWl0dGVkIiwKKwkJIlJlcXVlc3QgcGFja2V0IGNvbXBsZXRlZCIsCisJCSJSZXNwb25zZSBwYWNrZXQgY29tcGxldGVkIgorCX07CisKKwlyZXR1cm4gY3RseF9zdHJbc107Cit9OworCisKK3N0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QqCitnZXRfYWN0aXZlX2N0bHgoaGZhMzg0eF90ICpodykKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShody0+Y3RseHEuYWN0aXZlLm5leHQsIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKK30KKworCisjaWZkZWYgREVCVUdfVVNCCit2b2lkCitkYnByaW50X3VyYihzdHJ1Y3QgdXJiKiB1cmIpCit7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5waXBlPTB4JTA4eFxuIiwgdXJiLT5waXBlKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXR1cz0weCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnRyYW5zZmVyX2ZsYWdzPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXI9MHglMDh4XG4iLCAoVUlOVCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmFjdHVhbF9sZW5ndGg9MHglMDh4XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c2V0dXBfcGFja2V0KGN0bCk9MHglMDh4XG4iLCAoVUlOVCl1cmItPnNldHVwX3BhY2tldCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGFydF9mcmFtZShpc28vaXJxKT0weCUwOHhcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+aW50ZXJ2YWwoaXJxKT0weCUwOHhcbiIsIHVyYi0+aW50ZXJ2YWwpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+ZXJyb3JfY291bnQoaXNvKT0weCUwOHhcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dGltZW91dD0weCUwOHhcbiIsIHVyYi0+dGltZW91dCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb250ZXh0PTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5jb250ZXh0KTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmNvbXBsZXRlPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5jb21wbGV0ZSk7Cit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogc3VibWl0X3J4X3VyYgorKgorKiBMaXN0ZW4gZm9yIGlucHV0IGRhdGEgb24gdGhlIEJVTEstSU4gcGlwZS4gSWYgdGhlIHBpcGUgaGFzCisqIHN0YWxsZWQgdGhlbiBzY2hlZHVsZSBpdCB0byBiZSByZXNldC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdAorKgltZW1mbGFncwltZW1vcnkgYWxsb2NhdGlvbiBmbGFncworKgorKiBSZXR1cm5zOgorKgllcnJvciBjb2RlIGZyb20gc3VibWlzc2lvbgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IG1lbWZsYWdzKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoaGZhMzg0eF91c2Jpbl90KSk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KKwl1c2JfZmlsbF9idWxrX3VyYigmaHctPnJ4X3VyYiwgaHctPnVzYiwKKwkgICAgICAgICAgICAgIGh3LT5lbmRwX2luLAorCSAgICAgICAgICAgICAgc2tiLT5kYXRhLCBzaXplb2YoaGZhMzg0eF91c2Jpbl90KSwKKwkgICAgICAgICAgICAgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKKworCWh3LT5yeF91cmJfc2tiID0gc2tiOworCisJcmVzdWx0ID0gLUVOT0xJTks7CisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJcmVzdWx0ID0gU1VCTUlUX1VSQigmaHctPnJ4X3VyYiwgbWVtZmxhZ3MpOworCisJCS8qIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgUlggcGlwZSAqLworCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCX0KKwl9CisKKwkvKiBEb24ndCBsZWFrIG1lbW9yeSBpZiBhbnl0aGluZyBzaG91bGQgZ28gd3JvbmcgKi8KKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlody0+cnhfdXJiX3NrYiA9IE5VTEw7CisJfQorCisgZG9uZToKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHN1Ym1pdF90eF91cmIKKyoKKyogUHJlcGFyZXMgYW5kIHN1Ym1pdHMgdGhlIFVSQiBvZiB0cmFuc21pdHRlZCBkYXRhLiBJZiB0aGUKKyogc3VibWlzc2lvbiBmYWlscyB0aGVuIGl0IHdpbGwgc2NoZWR1bGUgdGhlIG91dHB1dCBwaXBlIHRvCisqIGJlIHJlc2V0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0CisqCXR4X3VyYgkJVVJCIG9mIGRhdGEgZm9yIHRyYW5taXNzaW9uCisqCW1lbWZsYWdzCW1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisqCisqIFJldHVybnM6CisqCWVycm9yIGNvZGUgZnJvbSBzdWJtaXNzaW9uCisqCisqIENhbGwgY29udGV4dDoKKyoJQW55CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3N1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBtZW1mbGFncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaHctPndsYW5kZXYtPm5ldGRldjsKKwlpbnQgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSAtRU5PTElOSzsKKwlpZiAoIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSApIHsKKworCQlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmICF0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSApIHsKKwkJCXJlc3VsdCA9IFNVQk1JVF9VUkIodHhfdXJiLCBtZW1mbGFncyk7CisKKwkJCS8qIFRlc3Qgd2hldGhlciB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBUWCBwaXBlICovCisJCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgICAgICAgICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQkJc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgeworCQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzk0eF91c2JfZGVmZXIKKyoKKyogVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgdGhlIFVTQiBzdGFjayBjYW5ub3QgZG8gd2hpbGUKKyogaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGFycmFuZ2UgdGhpcyBmdW5jdGlvbiB0byBydW4KKyogaW4gcHJvY2VzcyBjb250ZXh0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgKGJ5IGRlc2lnbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCB1c2Jfd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CisKKwlEQkZFTlRFUjsKKworCS8qIERvbid0IGJvdGhlciB0cnlpbmcgdG8gcmVzZXQgYW55dGhpbmcgaWYgdGhlIHBsdWcKKwkgKiBoYXMgYmVlbiBwdWxsZWQgLi4uCisJICovCisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgeworCQlEQkZFWElUOworCQlyZXR1cm47CisJfQorCisJLyogUmVjZXB0aW9uIGhhcyBzdG9wcGVkOiB0cnkgdG8gcmVzZXQgdGhlIGlucHV0IHBpcGUgKi8KKwlpZiAodGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJaW50IHJldDsKKworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOyAgLyogQ2Fubm90IGJlIGhvbGRpbmcgc3BpbmxvY2shICovCisKKwkJcmV0ID0gdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gY2xlYXIgcnggcGlwZSBmb3IgJXM6IGVycj0lZFxuIiwKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyByeCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCWNsZWFyX2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCXNldF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKwkJfQorCX0KKworCS8qIFJlc3VtZSByZWNlaXZpbmcgZGF0YSBiYWNrIGZyb20gdGhlIGRldmljZS4gKi8KKwlpZiAoIHRlc3RfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykgKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhaWxlZCB0byByZXN1bWUgJXMgcnggcGlwZS5cbiIsIG5ldGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKwkJfQorCX0KKworCS8qIFRyYW5zbWlzc2lvbiBoYXMgc3RvcHBlZDogdHJ5IHRvIHJlc2V0IHRoZSBvdXRwdXQgcGlwZSAqLworCWlmICh0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgeworCQlpbnQgcmV0OworCisJCXVzYl9raWxsX3VyYigmaHctPnR4X3VyYik7CisJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX291dCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhaWxlZCB0byBjbGVhciB0eCBwaXBlIGZvciAlczogZXJyPSVkXG4iLAorCQkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIHR4IHBpcGUgcmVzZXQgY29tcGxldGUuXG4iLAorCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJY2xlYXJfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOworCQkJc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOworCisJCQkvKiBTdG9wcGluZyB0aGUgQlVMSy1PVVQgcGlwZSBhbHNvIGJsb2NrZWQKKwkJCSAqIHVzIGZyb20gc2VuZGluZyBhbnkgbW9yZSBDVExYIFVSQnMsIHNvCisJCQkgKiB3ZSBuZWVkIHRvIHJlLXJ1biBvdXIgcXVldWUgLi4uCisJCQkgKi8KKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwkJfQorCX0KKworCS8qIFJlc3VtZSB0cmFuc21pdHRpbmcuICovCisJaWYgKCB0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSApIHsKKwkJcDgwMjExbmV0ZGV2X3dha2VfcXVldWUoaHctPndsYW5kZXYpOworCX0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY3JlYXRlCisqCisqIFNldHMgdXAgdGhlIGhmYTM4NHhfdCBkYXRhIHN0cnVjdHVyZSBmb3IgdXNlLiAgTm90ZSB0aGlzCisqIGRvZXMgX25vdF8gaW50aWFsaXplIHRoZSBhY3R1YWwgaGFyZHdhcmUsIGp1c3QgdGhlIGRhdGEgc3RydWN0dXJlcworKiB3ZSB1c2UgdG8ga2VlcCB0cmFjayBvZiBpdHMgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaXJxCQlkZXZpY2UgaXJxIG51bWJlcgorKglpb2Jhc2UJCWkvbyBiYXNlIGFkZHJlc3MgZm9yIHJlZ2lzdGVyIGFjY2VzcworKgltZW1iYXNlCQltZW1vcnkgYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2NyZWF0ZSggaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3sKKwlEQkZFTlRFUjsKKworCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOworCWh3LT51c2IgPSB1c2I7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50cyAqLworCWh3LT5lbmRwX2luID0gdXNiX3JjdmJ1bGtwaXBlKHVzYiwgMSk7CisJaHctPmVuZHBfb3V0ID0gdXNiX3NuZGJ1bGtwaXBlKHVzYiwgMik7CisKKwkvKiBTZXQgdXAgdGhlIHdhaXRxICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaHctPmNtZHEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCBxdWV1ZSAqLworCXNwaW5fbG9ja19pbml0KCZody0+Y3RseHEubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaHctPmN0bHhxLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5jb21wbGV0aW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaHctPmN0bHhxLnJlYXBhYmxlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGF1dGhlbnRpY2F0aW9uIHF1ZXVlICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaHctPmF1dGhxKTsKKworCXRhc2tsZXRfaW5pdCgmaHctPnJlYXBlcl9iaCwKKwkgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrLAorCSAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9pbml0KCZody0+Y29tcGxldGlvbl9iaCwKKwkgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzaywKKwkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCUlOSVRfV09SSzIoJmh3LT5saW5rX2JoLCBwcmlzbTJzdGFfcHJvY2Vzc2luZ19kZWZlcik7CisJSU5JVF9XT1JLMigmaHctPnVzYl93b3JrLCBoZmEzODR4X3VzYl9kZWZlcik7CisKKwlpbml0X3RpbWVyKCZody0+dGhyb3R0bGUpOworCWh3LT50aHJvdHRsZS5mdW5jdGlvbiA9IGhmYTM4NHhfdXNiX3Rocm90dGxlZm47CisJaHctPnRocm90dGxlLmRhdGEgPSAodW5zaWduZWQgbG9uZylodzsKKworCWluaXRfdGltZXIoJmh3LT5yZXNwdGltZXIpOworCWh3LT5yZXNwdGltZXIuZnVuY3Rpb24gPSBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm47CisJaHctPnJlc3B0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwlpbml0X3RpbWVyKCZody0+cmVxdGltZXIpOworCWh3LT5yZXF0aW1lci5mdW5jdGlvbiA9IGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuOworCWh3LT5yZXF0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwl1c2JfaW5pdF91cmIoJmh3LT5yeF91cmIpOworCXVzYl9pbml0X3VyYigmaHctPnR4X3VyYik7CisJdXNiX2luaXRfdXJiKCZody0+Y3RseF91cmIpOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKyAgICAgICAgSU5JVF9XT1JLMigmaHctPmNvbW1zcXVhbF9iaCwgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcik7CisJaW5pdF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lcik7CisJaHctPmNvbW1zcXVhbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGh3OworCWh3LT5jb21tc3F1YWxfdGltZXIuZnVuY3Rpb24gPSBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kZXN0cm95CisqCisqIFBhcnRuZXIgdG8gaGZhMzg0eF9jcmVhdGUoKS4gIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBodworKiBzdHJ1Y3R1cmUgc28gdGhhdCBpdCBjYW4gYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIHNpbXBsZQorKiBrZnJlZS4gIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuICBJZiwgYXQgc29tZQorKiBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbiBodyBpbiB0aGUgJ3NodXRkb3duJyBzdGF0ZSByZXF1aXJlcyBhICdkZWVwJworKiBrZnJlZSwgdGhpcyBpcyB3aGVyZSBpdCBzaG91bGQgYmUgZG9uZS4gIE5vdGUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBvbiBhIF9ydW5uaW5nXyBodyBzdHJ1Y3R1cmUsIHRoZSBkcnZyX3N0b3AoKSBmdW5jdGlvbiBpcworKiBjYWxsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZywgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBmYWlsLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2Rlc3Ryb3koIGhmYTM4NHhfdCAqaHcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisJaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJfQorCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKKworCWlmIChody0+c2NhbnJlc3VsdHMpIHsKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKwkJaHctPnNjYW5yZXN1bHRzID0gTlVMTDsKKwl9CisKKwkvKiBOb3cgdG8gY2xlYW4gb3V0IHRoZSBhdXRoIHF1ZXVlICovCisgICAgICAgIHdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKyAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7CisgICAgICAgIH0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBoZmEzODR4X3VzYmN0bHhfdCogdXNiY3RseF9hbGxvYyh2b2lkKQoreworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OworCisJY3RseCA9IGttYWxsb2Moc2l6ZW9mKCpjdGx4KSwgaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CisJaWYgKGN0bHggIT0gTlVMTCkKKwl7CisJCW1lbXNldChjdGx4LCAwLCBzaXplb2YoKmN0bHgpKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZjdGx4LT5kb25lKTsKKwl9CisKKwlyZXR1cm4gY3RseDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3VzYmN0bHhfZ2V0X3N0YXR1cyhjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQoreworCURCRkVOVEVSOworCisJcmVzdWx0LT5zdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+c3RhdHVzKTsKKwlyZXN1bHQtPnJlc3AwID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AwKTsKKwlyZXN1bHQtPnJlc3AxID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AxKTsKKwlyZXN1bHQtPnJlc3AyID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AyKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsICJjbWRyZXN1bHQ6c3RhdHVzPTB4JTA0eCAiCisJICAgICAgICAgICAgICAgICAgInJlc3AwPTB4JTA0eCByZXNwMT0weCUwNHggcmVzcDI9MHglMDR4XG4iLAorCSAgICAgICAgICAgICAgICByZXN1bHQtPnN0YXR1cywKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMCwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMSwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMik7CisKKwlEQkZFWElUOworCXJldHVybiAocmVzdWx0LT5zdGF0dXMgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQpOworfQorCitzdGF0aWMgdm9pZAordXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9ycmlkcmVzdWx0X3QgKnJlc3VsdCkKK3sKKwlEQkZFTlRFUjsKKworCXJlc3VsdC0+cmlkID0gaGZhMzg0eDJob3N0XzE2KHJyaWRyZXNwLT5yaWQpOworCXJlc3VsdC0+cmlkZGF0YSA9IHJyaWRyZXNwLT5kYXRhOworCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+ZnJtbGVuKSAtIDEpICogMik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBUaGlzIGNvbXBsZXRvciBtdXN0IGJlIHBhc3NlZCB0byBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygpCisqIHdoZW4gcHJvY2Vzc2luZyBhIENUTFggdGhhdCByZXR1cm5zIGEgaGZhMzg0eF9jbWRyZXN1bHRfdCBzdHJ1Y3R1cmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IKK3sKKwl1c2JjdGx4X2NvbXBsZXRvcl90CWhlYWQ7CisKKwljb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QJKmNtZHJlc3A7CisJaGZhMzg0eF9jbWRyZXN1bHRfdAkqcmVzdWx0OworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKK3sKKwl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9jbWRfY29tcGxldG9yX3QqKWhlYWQ7CisJcmV0dXJuIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb21wbGV0ZS0+Y21kcmVzcCwgY29tcGxldGUtPnJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKKyAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCit7CisJY29tcGxldG9yLT5oZWFkLmNvbXBsZXRlID0gdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuOworCWNvbXBsZXRvci0+Y21kcmVzcCA9IGNtZHJlc3A7CisJY29tcGxldG9yLT5yZXN1bHQgPSByZXN1bHQ7CisJcmV0dXJuICYoY29tcGxldG9yLT5oZWFkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIFRoaXMgY29tcGxldG9yIG11c3QgYmUgcGFzc2VkIHRvIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKCkKKyogd2hlbiBwcm9jZXNzaW5nIGEgQ1RMWCB0aGF0IHJlYWRzIGEgUklELgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvcgoreworCXVzYmN0bHhfY29tcGxldG9yX3QJaGVhZDsKKworCWNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QJKnJyaWRyZXNwOworCXZvaWQJCQkqcmlkZGF0YTsKKwlVSU5UCQkJcmlkZGF0YWxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yIHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X3JyaWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QqKWhlYWQ7CisJaGZhMzg0eF9ycmlkcmVzdWx0X3QgcnJpZHJlc3VsdDsKKworCXVzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29tcGxldGUtPnJyaWRyZXNwLCAmcnJpZHJlc3VsdCk7CisKKwkvKiBWYWxpZGF0ZSB0aGUgbGVuZ3RoLCBub3RlIGJvZHkgbGVuIGNhbGN1bGF0aW9uIGluIGJ5dGVzICovCisJaWYgKCBycmlkcmVzdWx0LnJpZGRhdGFfbGVuICE9IGNvbXBsZXRlLT5yaWRkYXRhbGVuICkgeworCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJICAgICAgICBycmlkcmVzdWx0LnJpZCwKKwkJICAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbiwKKwkJICAgICAgICBycmlkcmVzdWx0LnJpZGRhdGFfbGVuKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCW1lbWNweShjb21wbGV0ZS0+cmlkZGF0YSwKKwkgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhLAorCSAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfcnJpZF9jb21wbGV0b3IodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpyaWRkYXRhLAorICAgICAgICAgICAgICAgICAgICBVSU5UIHJpZGRhdGFsZW4pCit7CisJY29tcGxldG9yLT5oZWFkLmNvbXBsZXRlID0gdXNiY3RseF9ycmlkX2NvbXBsZXRvcl9mbjsKKwljb21wbGV0b3ItPnJyaWRyZXNwID0gcnJpZHJlc3A7CisJY29tcGxldG9yLT5yaWRkYXRhID0gcmlkZGF0YTsKKwljb21wbGV0b3ItPnJpZGRhdGFsZW4gPSByaWRkYXRhbGVuOworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBJbnRlcnByZXRzIHRoZSByZXN1bHRzIG9mIGEgc3luY2hyb25vdXMgUklELXdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdXNiY3RseF9jbWRfY29tcGxldG9yX3QgdXNiY3RseF93cmlkX2NvbXBsZXRvcl90OworI2RlZmluZSBpbml0X3dyaWRfY29tcGxldG9yICBpbml0X2NtZF9jb21wbGV0b3IKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIEludGVycHJldHMgdGhlIHJlc3VsdHMgb2YgYSBzeW5jaHJvbm91cyBtZW1vcnktd3JpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCB1c2JjdGx4X3dtZW1fY29tcGxldG9yX3Q7CisjZGVmaW5lIGluaXRfd21lbV9jb21wbGV0b3IgIGluaXRfY21kX2NvbXBsZXRvcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIG1lbW9yeS1yZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yCit7CisgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgICAgICAgICAgIGhlYWQ7CisKKyAgICAgICAgY29uc3QgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdCAgKnJtZW1yZXNwOworICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YTsKKyAgICAgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfcm1lbV9jb21wbGV0b3IgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90OworCitzdGF0aWMgaW50IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKK3sKKwl1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCopaGVhZDsKKworCVdMQU5fTE9HX0RFQlVHKDQsInJtZW1yZXNwOmxlbj0lZFxuIiwgY29tcGxldGUtPnJtZW1yZXNwLT5mcm1sZW4pOworCW1lbWNweShjb21wbGV0ZS0+ZGF0YSwgY29tcGxldGUtPnJtZW1yZXNwLT5kYXRhLCBjb21wbGV0ZS0+bGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90KgoraW5pdF9ybWVtX2NvbXBsZXRvcih1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdCAqcm1lbXJlc3AsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgIFVJTlQgbGVuKQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm47CisJY29tcGxldG9yLT5ybWVtcmVzcCA9IHJtZW1yZXNwOworCWNvbXBsZXRvci0+ZGF0YSA9IGRhdGE7CisJY29tcGxldG9yLT5sZW4gPSBsZW47CisJcmV0dXJuICYoY29tcGxldG9yLT5oZWFkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY2Jfc3RhdHVzCisqCisqIEN0bHhfY29tcGxldGUgaGFuZGxlciBmb3IgYXN5bmMgQ01EIHR5cGUgY29udHJvbCBleGNoYW5nZXMuCisqIG1hcmsgdGhlIGh3IHN0cnVjdCBhcyBzdWNoLgorKgorKiBOb3RlOiBJZiB0aGUgaGFuZGxpbmcgaXMgY2hhbmdlZCBoZXJlLCBpdCBzaG91bGQgcHJvYmFibHkgYmUKKyogICAgICAgY2hhbmdlZCBpbiBkb2NtZCBhcyB3ZWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlodyBzdHJ1Y3QKKyoJY3RseAkJY29tcGxldGVkIENUTFgKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCWlmICggY3RseC0+dXNlcmNiICE9IE5VTEwgKSB7CisJCWhmYTM4NHhfY21kcmVzdWx0X3QgY21kcmVzdWx0OworCisJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CisJCQltZW1zZXQoJmNtZHJlc3VsdCwgMCwgc2l6ZW9mKGNtZHJlc3VsdCkpOworCQkJY21kcmVzdWx0LnN0YXR1cyA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQoSEZBMzg0eF9DTURfRVJSKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmN0bHhfZ2V0X3N0YXR1cygmY3RseC0+aW5idWYuY21kcmVzcCwgJmNtZHJlc3VsdCk7CisJCX0KKworCQljdGx4LT51c2VyY2IoaHcsICZjbWRyZXN1bHQsIGN0bHgtPnVzZXJjYl9kYXRhKTsKKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NiX3JyaWQKKyoKKyogQ1RMWCBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGFzeW5jIFJSSUQgdHlwZSBjb250cm9sIGV4Y2hhbmdlcy4KKyoKKyogTm90ZTogSWYgdGhlIGhhbmRsaW5nIGlzIGNoYW5nZWQgaGVyZSwgaXQgc2hvdWxkIHByb2JhYmx5IGJlCisqICAgICAgIGNoYW5nZWQgaW4gZG9ycmlkIGFzIHdlbGwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWh3IHN0cnVjdAorKgljdGx4CQljb21wbGV0ZWQgQ1RMWAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCWlmICggY3RseC0+dXNlcmNiICE9IE5VTEwgKSB7CisJCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CisKKwkJaWYgKGN0bHgtPnN0YXRlICE9IENUTFhfQ09NUExFVEUpIHsKKwkJCW1lbXNldCgmcnJpZHJlc3VsdCwgMCwgc2l6ZW9mKHJyaWRyZXN1bHQpKTsKKwkJCXJyaWRyZXN1bHQucmlkID0gaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCk7CisJCX0gZWxzZSB7CisJCQl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KCZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCQl9CisKKwkJY3RseC0+dXNlcmNiKGh3LCAmcnJpZHJlc3VsdCwgY3RseC0+dXNlcmNiX2RhdGEpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RvY21kX3dhaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb2NtZChodywgRE9XQUlULCBjbWQsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb2NtZF9hc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb2NtZChodywgRE9BU1lOQywgY21kLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ycmlkX3dhaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgVUlOVCByaWRkYXRhbGVuKQoreworCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3JyaWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9ycmlkKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93cmlkX3dhaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgVUlOVCByaWRkYXRhbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dyaWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93cmlkKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ybWVtX3dhaXQoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgVUlOVDE2IHBhZ2UsIFVJTlQxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIFVJTlQgbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvcm1lbShodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvcm1lbV9hc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IHBhZ2UsIFVJTlQxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIFVJTlQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JtZW0oaHcsIERPQVNZTkMsCisJICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvd21lbV93YWl0KAorICAgICAgICBoZmEzODR4X3QgKmh3LAorICAgICAgICBVSU5UMTYgIHBhZ2UsCisgICAgICAgIFVJTlQxNiAgb2Zmc2V0LAorICAgICAgICB2b2lkICAgICpkYXRhLAorICAgICAgICBVSU5UICAgIGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPV0FJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dtZW1fYXN5bmMoCisgICAgICAgIGhmYTM4NHhfdCAqaHcsCisgICAgICAgIFVJTlQxNiAgcGFnZSwKKyAgICAgICAgVUlOVDE2ICBvZmZzZXQsCisgICAgICAgIHZvaWQgICAgKmRhdGEsCisgICAgICAgIFVJTlQgICAgbGVuLAorICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICB2b2lkICAgICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPQVNZTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbml0aWFsaXplCisqCisqIElzc3VlcyB0aGUgaW5pdGlhbGl6ZSBjb21tYW5kIGFuZCBzZXRzIHRoZSBody0+c3RhdGUgYmFzZWQKKyogb24gdGhlIHJlc3VsdC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwlpbnQJaTsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTklUOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCisJV0xBTl9MT0dfREVCVUcoMywiY21kcmVzcC5pbml0OiAiCisJCSJzdGF0dXM9MHglMDR4LCByZXNwMD0weCUwNHgsICIKKwkJInJlc3AxPTB4JTA0eCwgcmVzcDI9MHglMDR4XG4iLAorCQljbWQucmVzdWx0LnN0YXR1cywKKwkJY21kLnJlc3VsdC5yZXNwMCwKKwkJY21kLnJlc3VsdC5yZXNwMSwKKwkJY21kLnJlc3VsdC5yZXNwMik7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKKwkJfQorCX0KKworICAgICAgICBody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgZGlzYWJsZSBjb21tYW5kIHRvIHN0b3AgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ESVNBQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRU5BQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9ub3RpZnkKKyoKKyogU2VuZHMgYW4gaW5mbyBmcmFtZSB0byB0aGUgZmlybXdhcmUgdG8gYWx0ZXIgdGhlIGJlaGF2aW9yCisqIG9mIHRoZSBmL3cgYXN5bmNoIHByb2Nlc3Nlcy4gIENhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBNQUMKKyogaXMgaW4gdGhlIGVuYWJsZWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmVjbGFpbQkJWzB8MV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIEZJRCB3aWxsCisqCQkJYmUgaGFuZGVkIGJhY2sgKHZpYSBBbGxvYyBldmVudCkgZm9yIHJldXNlLgorKgkJCShob3N0IG9yZGVyKQorKglmaWQJCUZJRCBvZiBidWZmZXIgY29udGFpbmluZyB0aGUgZnJhbWUgdGhhdCB3YXMKKyoJCQlwcmV2aW91c2x5IGNvcGllZCB0byBNQUMgbWVtb3J5IHZpYSB0aGUgYmFwLgorKgkJCShob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoJaHctPnJlc3AwIHdpbGwgY29udGFpbiB0aGUgRklEIGJlaW5nIHVzZWQgYnkgYXN5bmMgbm90aWZ5CisqCXByb2Nlc3MuICBJZiByZWNsYWltPT0wLCByZXNwMCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBmaWQKKyoJYXJndW1lbnQuICBJZiByZWNsYWltPT0xLCByZXNwMCB3aWxsIGJlIHRoZSBkaWZmZXJlbnQuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLAorCQkgICAgICAgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworI2lmIDAKKwlpbnQJcmVzdWx0ID0gMDsKKwlVSU5UMTYJY21kOworCURCRkVOVEVSOworCWNtZCA9CUhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9OT1RJRlkpIHwKKwkJSEZBMzg0eF9DTURfUkVDTF9TRVQocmVjbGFpbSk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworI2VuZGlmCityZXR1cm4gMDsKK30KKworCisjaWYgMAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2lucXVpcnkKKyoKKyogUmVxdWVzdHMgYW4gaW5mbyBmcmFtZSBmcm9tIHRoZSBmaXJtd2FyZS4gIFRoZSBpbmZvIGZyYW1lIHdpbGwKKyogYmUgZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5IHZpYSB0aGUgSW5mbyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglmaWQJCUZJRCBvZiB0aGUgaW5mbyBmcmFtZSByZXF1ZXN0ZWQuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9pbnF1aXJ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0lOUSk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX21vbml0b3IKKyoKKyogRW5hYmxlcyB0aGUgJ21vbml0b3IgbW9kZScgb2YgdGhlIE1BQy4gIEhlcmUncyB0aGUgZGVzY3JpcHRpb24gb2YKKyogbW9uaXRvciBtb2RlIHRoYXQgSSd2ZSByZWNlaXZlZCB0aHVzIGZhcjoKKyoKKyogICJUaGUgIm1vbml0b3IgbW9kZSIgb2Ygb3BlcmF0aW9uIGlzIHRoYXQgdGhlIE1BQyBwYXNzZXMgYWxsCisqICBmcmFtZXMgZm9yIHdoaWNoIHRoZSBQTENQIGNoZWNrcyBhcmUgY29ycmVjdC4gQWxsIHJlY2VpdmVkCisqICBNUERVcyBhcmUgcGFzc2VkIHRvIHRoZSBob3N0IHdpdGggTUFDIFBvcnQgPSA3LCB3aXRoIGEKKyogIHJlY2VpdmUgc3RhdHVzIG9mIGdvb2QsIEZDUyBlcnJvciwgb3IgdW5kZWNyeXB0YWJsZS4gUGFzc2luZworKiAgY2VydGFpbiBNUERVcyBpcyBhIHZpb2xhdGlvbiBvZiB0aGUgODAyLjExIHN0YW5kYXJkLCBidXQgdXNlZnVsCisqICBmb3IgYSBkZWJ1Z2dpbmcgdG9vbC4iICBOb3JtYWwgY29tbXVuaWNhdGlvbiBpcyBub3QgcG9zc2libGUKKyogIHdoaWxlIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWVuYWJsZQkJYSBjb2RlICgweDBifDB4MGYpIHRoYXQgZW5hYmxlcy9kaXNhYmxlcworKgkJCW1vbml0b3IgbW9kZS4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgVUlOVDE2IGVuYWJsZSkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTU9OSVRPUikgfAorCQlIRkEzODR4X0NNRF9BSU5GT19TRVQoZW5hYmxlKTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2Rvd25sb2FkCisqCisqIFNldHMgdGhlIGNvbnRyb2xzIGZvciB0aGUgTUFDIGNvbnRyb2xsZXIgY29kZS9kYXRhIGRvd25sb2FkCisqIHByb2Nlc3MuICBUaGUgYXJndW1lbnRzIHNldCB0aGUgbW9kZSBhbmQgYWRkcmVzcyBhc3NvY2lhdGVkCisqIHdpdGggYSBkb3dubG9hZC4gIE5vdGUgdGhhdCB0aGUgYXV4IHJlZ2lzdGVycyBzaG91bGQgYmUgZW5hYmxlZAorKiBwcmlvciB0byBzZXR0aW5nIG9uZSBvZiB0aGUgZG93bmxvYWQgZW5hYmxlIG1vZGVzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCTAgLSBEaXNhYmxlIHByb2dyYW1taW5nIGFuZCBiZWdpbiBjb2RlIGV4ZWMKKyoJCQkxIC0gRW5hYmxlIHZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTIgLSBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTMgLSBQcm9ncmFtIG5vbi12b2xhdGlsZSBzZWN0aW9uIGZyb20gTlYgZG93bmxvYWQKKyoJCQkgICAgYnVmZmVyLgorKgkJCShob3N0IG9yZGVyKQorKglsb3dhZGRyCisqCWhpZ2hhZGRyCUZvciBtb2RlIDEsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSAiZGVzdGluYXRpb24gYWRkcmVzcyIuICBUaGlzIGFkZHJlc3Mgd2lsbCBiZQorKgkJCXRoZSBleGVjdXRpb24gc3RhcnQgYWRkcmVzcyB3aGVuIGRvd25sb2FkIGlzCisqCQkJc3Vic2VxdWVudGx5IGRpc2FibGVkLgorKgkJCUZvciBtb2RlIDIsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSBkZXN0aW5hdGlvbiBpbiBOViByYW0uCisqCQkJRm9yIG1vZGVzIDAgJiAzLCBzaG91bGQgYmUgemVyby4gKGhvc3Qgb3JkZXIpCisqCQkJTk9URTogdGhlc2UgYXJlIENNRCBmb3JtYXQuCisqCWNvZGVsZW4JCUxlbmd0aCBvZiB0aGUgZGF0YSB0byB3cml0ZSBpbiBtb2RlIDIsCisqCQkJemVybyBvdGhlcndpc2UuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgbW9kZSwgVUlOVDE2IGxvd2FkZHIsCisJCQkJVUlOVDE2IGhpZ2hhZGRyLCBVSU5UMTYgY29kZWxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LAorCQkibW9kZT0lZCwgbG93YWRkcj0weCUwNHgsIGhpZ2hhZGRyPTB4JTA0eCwgY29kZWxlbj0lZFxuIiwKKwkJbW9kZSwgbG93YWRkciwgaGlnaGFkZHIsIGNvZGVsZW4pOworCisJY21kLmNtZCA9IChIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRE9XTkxEKSB8CisJCSAgIEhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVChtb2RlKSk7CisKKwljbWQucGFybTAgPSBsb3dhZGRyOworCWNtZC5wYXJtMSA9IGhpZ2hhZGRyOworCWNtZC5wYXJtMiA9IGNvZGVsZW47CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfZnJvbV9hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyBmcm9tIHRoZSBjb250cm9sbGVyIG1lbW9yeS4gIFRoZQorKiBBdXhpbGlhcnkgcG9ydCBNVVNUIGJlIGVuYWJsZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKiBXZSBfbWlnaHRfIGJlIGluIGEgZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJY2FyZGFkZHIJYWRkcmVzcyBpbiBoZmEzODR4IGRhdGEgc3BhY2UgdG8gcmVhZAorKglhdXhjdGwJCWFkZHJlc3Mgc3BhY2Ugc2VsZWN0CisqCWJ1ZgkJcHRyIHRvIGRlc3RpbmF0aW9uIGhvc3QgYnVmZmVyCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJYnVmIGNvbnRhaW5zIHRoZSBkYXRhIGNvcGllZAorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV90b19hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKKyogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKKyoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAorKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgorKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUNvbnRyb2xsZXIgbWVtb3J5IG5vdyBjb250YWlucyBhIGNvcHkgb2YgYnVmCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29yZXJlc2V0CisqCisqIFBlcmZvcm0gYSByZXNldCBvZiB0aGUgaGZhMzh4eCBNQUMgY29yZS4gIFdlIGFzc3VtZSB0aGF0IHRoZSBodworKiBzdHJ1Y3R1cmUgaXMgaW4gaXRzICJjcmVhdGVkIiBzdGF0ZS4gIFRoYXQgaXMsIGl0IGlzIGluaXRpYWxpemVkCisqIHdpdGggcHJvcGVyIHZhbHVlcy4gIE5vdGUgdGhhdCBpZiBhIHJlc2V0IGlzIGRvbmUgYWZ0ZXIgdGhlCisqIGRldmljZSBoYXMgYmVlbiBhY3RpdmUgZm9yIGF3aGlsZSwgdGhlIGNhbGxlciBtaWdodCBoYXZlIHRvIGNsZWFuCisqIHVwIHNvbWUgbGVmdG92ZXIgY3J1ZnQgaW4gdGhlIGh3IHN0cnVjdHVyZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglob2xkdGltZQlob3cgbG9uZyAoaW4gbXMpIHRvIGhvbGQgdGhlIHJlc2V0CisqCXNldHRsZXRpbWUJaG93IGxvbmcgKGluIG1zKSB0byB3YWl0IGFmdGVyIHJlbGVhc2luZworKgkJCXRoZSByZXNldAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKyNpZiAwCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcGFyZW50ID0gaHctPnVzYi0+cGFyZW50OworCWludAkJCWk7CisJaW50CQkJcG9ydCA9IC0xOworI2VuZGlmCisjZW5kaWYKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKworCisjZGVmaW5lIFAyX1VTQl9SVF9QT1JUCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfT1RIRVIpCisjZGVmaW5lIFAyX1VTQl9GRUFUX1JFU0VUCTQKKyNkZWZpbmUgUDJfVVNCX0ZFQVRfQ19SRVNFVAkyMAorCisJREJGRU5URVI7CisKKyNpZiAwCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwkvKiBGaW5kIHRoZSBodWIgcG9ydCAqLworCWZvciAoIGkgPSAwOyBpIDwgcGFyZW50LT5tYXhjaGlsZDsgaSsrKSB7CisJCWlmIChwYXJlbnQtPmNoaWxkcmVuW2ldID09IGh3LT51c2IpIHsKKwkJCXBvcnQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBvcnQgPCAwKSByZXR1cm4gLUVOT0VOVDsKKworCS8qIFNldCBhbmQgY2xlYXIgdGhlIHJlc2V0ICovCisJdXNiX2NvbnRyb2xfbXNnKHBhcmVudCwgdXNiX3NuZGN0cmxwaXBlKHBhcmVudCwgMCksCisJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFAyX1VTQl9SVF9QT1JULCBQMl9VU0JfRkVBVF9SRVNFVCwKKwkJcG9ydCsxLCBOVUxMLCAwLCAxKkhaKTsKKwl3YWl0X21zKGhvbGR0aW1lKTsKKwl1c2JfY29udHJvbF9tc2cocGFyZW50LCB1c2Jfc25kY3RybHBpcGUocGFyZW50LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBQMl9VU0JfUlRfUE9SVCwgUDJfVVNCX0ZFQVRfQ19SRVNFVCwKKwkJcG9ydCsxLCBOVUxMLCAwLCAxKkhaKTsKKwl3YWl0X21zKHNldHRsZXRpbWUpOworCisJLyogU2V0IHRoZSBkZXZpY2UgYWRkcmVzcyAqLworCXJlc3VsdD11c2Jfc2V0X2FkZHJlc3MoaHctPnVzYik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInJlc2V0X3VzYmRldjogRGV2IG5vdCBhY2NlcHRpbmcgYWRkcmVzcywgIgorCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJY2xlYXJfYml0KGh3LT51c2ItPmRldm51bSwgJmh3LT51c2ItPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJCWh3LT51c2ItPmRldm51bSA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCS8qIExldCB0aGUgYWRkcmVzcyBzZXR0bGUgKi8KKwl3YWl0X21zKDIwKTsKKworCS8qIEFzc3VtZSB3ZSdyZSByZXVzaW5nIHRoZSBvcmlnaW5hbCBkZXNjcmlwdG9yIGRhdGEgKi8KKworCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbi4gKi8KKwlXTEFOX0xPR19ERUJVRygzLCAiU2V0dGluZyBDb25maWd1cmF0aW9uICVkXG4iLAorCQlody0+dXNiLT5jb25maWdbMF0uYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJcmVzdWx0PXVzYl9zZXRfY29uZmlndXJhdGlvbihody0+dXNiLCBody0+dXNiLT5jb25maWdbMF0uYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJ1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKwkvKiBMZXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGxlICovCisJd2FpdF9tcygyMCk7CisKKyBkb25lOgorI2Vsc2UKKwlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKKwlpZihyZXN1bHQ8MCkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCX0KKyNlbmRpZgorI2VuZGlmCisKKwlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKKwlpZihyZXN1bHQ8MCkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMKKyoKKyogV2FpdHMgZm9yIGEgc3luY2hyb25vdXMgQ1RMWCBvYmplY3QgdG8gY29tcGxldGUsCisqIGFuZCB0aGVuIGhhbmRsZXMgdGhlIHJlc3BvbnNlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWN0bHgJIAlDVExYIHB0cgorKgljb21wbGV0b3IJZnVuY3RvciBvYmplY3QgdG8gZGVjaWRlIHdoYXQgdG8KKyoJCQlkbyB3aXRoIHRoZSBDVExYJ3MgcmVzdWx0LgorKgorKiBSZXR1cm5zOgorKgkwCQlTdWNjZXNzCisqCS1FUkVTVEFSVFNZUwlJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbAorKgktRUlPCQlDVExYIGZhaWxlZAorKgktRU5PREVWCQlBZGFwdGVyIHdhcyB1bnBsdWdnZWQKKyoJPz8/CQlSZXN1bHQgZnJvbSBjb21wbGV0b3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhoZmEzODR4X3QgKmh3LAorCQkJCQkgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCisJCQkJCSB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmN0bHgtPmRvbmUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFdlIGNhbiBvbmx5IGhhbmRsZSB0aGUgQ1RMWCBpZiB0aGUgVVNCIGRpc2Nvbm5lY3QKKwkgKiBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgLi4uCisJICovCisJY2xlYW51cDoKKwlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCXsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwl9CisJZWxzZSBpZiAoIHJlc3VsdCAhPSAwICkKKwl7CisJCWludCBydW5xdWV1ZSA9IDA7CisKKwkJLyoKKwkJICogV2Ugd2VyZSBwcm9iYWJseSBpbnRlcnJ1cHRlZCwgc28gZGVsZXRlCisJCSAqIHRoaXMgQ1RMWCBhc3luY2hyb25vdXNseSwga2lsbCB0aGUgdGltZXJzCisJCSAqIGFuZCB0aGUgVVJCLCBhbmQgdGhlbiBzdGFydCB0aGUgbmV4dAorCQkgKiBwZW5kaW5nIENUTFguCisJCSAqCisJCSAqIE5PVEU6IFdlIGNhbiBvbmx5IGRlbGV0ZSB0aGUgdGltZXJzIGFuZAorCQkgKiAgICAgICB0aGUgVVJCIGlmIHRoaXMgQ1RMWCBpcyBhY3RpdmUuCisJCSAqLworCQlpZiAoY3RseCA9PSBnZXRfYWN0aXZlX2N0bHgoaHcpKQorCQl7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZody0+cmVxdGltZXIpOworCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlc3B0aW1lcik7CisJCQlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCQl1c2Jfa2lsbF91cmIoJmh3LT5jdGx4X3VyYik7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQlydW5xdWV1ZSA9IDE7CisKKwkJCS8qCisJCQkgKiBUaGlzIHNjZW5hcmlvIGlzIHNvIHVubGlrZWx5IHRoYXQgSSdtCisJCQkgKiBoYXBweSB3aXRoIGEgZ3J1YmJ5ICJnb3RvIiBzb2x1dGlvbiAuLi4KKwkJCSAqLworCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQkvKgorCQkgKiBUaGUgY29tcGxldGlvbiB0YXNrIHdpbGwgc2VuZCB0aGlzIENUTFgKKwkJICogdG8gdGhlIHJlYXBlciB0aGUgbmV4dCB0aW1lIGl0IHJ1bnMuIFdlCisJCSAqIGFyZSBubyBsb25nZXIgaW4gYSBodXJyeS4KKwkJICovCisJCWN0bHgtPnJlYXBhYmxlID0gMTsKKwkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisJCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHJ1bnF1ZXVlKQorCQkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCX0gZWxzZSB7CisJCWlmIChjdGx4LT5zdGF0ZSA9PSBDVExYX0NPTVBMRVRFKSB7CisJCQlyZXN1bHQgPSBjb21wbGV0b3ItPmNvbXBsZXRlKGNvbXBsZXRvcik7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlyZXN1bHQgPSAtRUlPOworCQl9CisKKwkJbGlzdF9kZWwoJmN0bHgtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQlrZnJlZShjdGx4KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RvY21kCisqCisqIENvbnN0cnVjdHMgYSBjb21tYW5kIENUTFggYW5kIHN1Ym1pdHMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2NiY21kKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJRE9XQUlUIG9yIERPQVNZTkMKKyogICAgICAgY21kICAgICAgICAgICAgIGNtZCBzdHJ1Y3R1cmUuICBJbmNsdWRlcyBhbGwgYXJndW1lbnRzIGFuZCByZXN1bHQKKyogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgcG9pbnRzLiAgQWxsIGluIGhvc3Qgb3JkZXIuIGluIGhvc3Qgb3JkZXIKKyoJY21kY2IJCWNvbW1hbmQtc3BlY2lmaWMgY2FsbGJhY2sKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscywgTlVMTAorKgkJCWZvciBET0FTWU5DIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVJTwkJQ1RMWCBmYWlsdXJlCisqCS1FUkVTVEFSVFNZUwlBd2FrZW5lZCBvbiBzaWduYWwKKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2RvY21kKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwloZmEzODR4X21ldGFjbWRfdCAqY21kLAorCWN0bHhfY21kY2JfdAljbWRjYiwKKwljdGx4X3VzZXJjYl90CXVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5jbWRyZXEudHlwZSA9IAlob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPmNtZCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0wKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0xID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTEpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMik7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5jbWRyZXEpOworCisJV0xBTl9MT0dfREVCVUcoNCwgImNtZHJlcTogY21kPTB4JTA0eCAiCisJCSJwYXJtMD0weCUwNHggcGFybTE9MHglMDR4IHBhcm0yPTB4JTA0eFxuIiwKKwkJY21kLT5jbWQsCisJCWNtZC0+cGFybTAsCisJCWNtZC0+cGFybTEsCisJCWNtZC0+cGFybTIpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5jbWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5yZXN1bHQpICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb3JyaWQKKyoKKyogQ29uc3RydWN0cyBhIHJlYWQgcmlkIENUTFggYW5kIGlzc3VlcyBpdC4KKyoKKyogTk9URTogQW55IGNoYW5nZXMgdG8gdGhlICdwb3N0LXN1Ym1pdCcgY29kZSBpbiB0aGlzIGZ1bmN0aW9uCisqICAgICAgIG5lZWQgdG8gYmUgY2FycmllZCBvdmVyIHRvIGhmYTM4NHhfY2JycmlkKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJRE9XQUlUIG9yIERPQVNZTkMKKyoJcmlkCQlSZWFkIFJJRCBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCXJpZGRhdGEJCUNhbGxlciBzdXBwbGllZCBidWZmZXIgdGhhdCBNQUMgZm9ybWF0dGVkIFJJRC5kYXRhCisqCQkJcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiB0byBmb3IgRE9XQUlUIGNhbGxzLiBTaG91bGQKKyoJCQliZSBOVUxMIGZvciBET0FTWU5DIGNhbGxzLgorKglyaWRkYXRhbGVuCUJ1ZmZlciBsZW5ndGggZm9yIERPV0FJVCBjYWxscy4gWmVybyBmb3IgRE9BU1lOQyBjYWxscy4KKyoJY21kY2IJCWNvbW1hbmQgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscywgTlVMTAorKgkJCWZvciBET1dBSVQgY2FsbHMKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgktRUlPCQlDVExYIGZhaWx1cmUKKyoJLUVSRVNUQVJUU1lTCUF3YWtlbmVkIG9uIHNpZ25hbAorKgktRU5PREFUQQlyaWRkYXRhbGVuICE9IG1hY2RhdGFsZW4KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3JyaWQoCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglyaWQsCisJdm9pZAkqcmlkZGF0YSwKKwlVSU5UCXJpZGRhdGFsZW4sCisgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9SUklEUkVRKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS5mcm1sZW4gPQorCQlob3N0MmhmYTM4NHhfMTYoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCkpOworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCA9ICAgIGhvc3QyaGZhMzg0eF8xNihyaWQpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcSk7CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCS8qIFN1Ym1pdCB0aGUgQ1RMWCAqLworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7CisJCXVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcnJpZF9jb21wbGV0b3IoJmNvbXBsZXRvciwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYucnJpZHJlc3AsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlkZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWRkYXRhbGVuKSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG93cmlkCisqCisqIENvbnN0cnVjdHMgYSB3cml0ZSByaWQgQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYndyaWQoKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglDTURfTU9ERQlET1dBSVQgb3IgRE9BU1lOQworKglyaWQJCVJJRCBjb2RlCisqCXJpZGRhdGEJCURhdGEgcG9ydGlvbiBvZiBSSUQgZm9ybWF0dGVkIGZvciBNQUMKKyoJcmlkZGF0YWxlbglMZW5ndGggb2YgdGhlIGRhdGEgcG9ydGlvbiBpbiBieXRlcworKiAgICAgICBjbWRjYiAgICAgICAgICAgY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3dyaWQoCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglyaWQsCisJdm9pZAkqcmlkZGF0YSwKKwlVSU5UCXJpZGRhdGFsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKQoreworCWludAkJCXJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKworCURCRkVOVEVSOworCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7CisJaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kICovCisJY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSA9ICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1dSSURSRVEpOworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbiA9IGhvc3QyaGZhMzg0eF8xNigKKwkJCQkJKHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKKwkJCQkJcmlkZGF0YWxlbiArIDEpIC8gMik7CisJY3RseC0+b3V0YnVmLndyaWRyZXEucmlkID0gICAgaG9zdDJoZmEzODR4XzE2KHJpZCk7CisJbWVtY3B5KGN0bHgtPm91dGJ1Zi53cmlkcmVxLmRhdGEsIHJpZGRhdGEsIHJpZGRhdGFsZW4pOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS50eXBlKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5mcm1sZW4pICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCkgKworCSAgICAgICAgICAgICAgICAgICByaWRkYXRhbGVuOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwkvKiBTdWJtaXQgdGhlIENUTFggKi8KKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X3dyaWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCQloZmEzODR4X2NtZHJlc3VsdF90IHdyaWRyZXN1bHQ7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgICAgIGh3LAorCQkgICAgICAgICAgICAgICBjdGx4LAorCQkgICAgICAgICAgICAgICBpbml0X3dyaWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLndyaWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmlkcmVzdWx0KSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvcm1lbQorKgorKiBDb25zdHJ1Y3RzIGEgcmVhZG1lbSBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2Nicm1lbSgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXBhZ2UJCU1BQyBhZGRyZXNzIHNwYWNlIHBhZ2UgKENNRCBmb3JtYXQpCisqCW9mZnNldAkJTUFDIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0CisqCWRhdGEJCVB0ciB0byBkYXRhIGJ1ZmZlciB0byByZWNlaXZlIHJlYWQKKyoJbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZCAobWF4ID09IDIwNDgpCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgktRVRJTUVET1VUCXRpbWVkIG91dCB3YWl0aW5nIGZvciByZWdpc3RlciByZWFkeSBvcgorKgkJCWNvbW1hbmQgY29tcGxldGlvbgorKgk+MAkJY29tbWFuZCBpbmRpY2F0ZWQgZXJyb3IsIFN0YXR1cyBhbmQgUmVzcDAtMiBhcmUKKyoJCQlpbiBodyBzdHJ1Y3R1cmUuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQgKERPQVNZTkMpCisqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2Rvcm1lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUgPSAgICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUk1FTVJFUSk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuID0gIGhvc3QyaGZhMzg0eF8xNigKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCkgKworCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKworCQkJCQlsZW4pOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9CWhvc3QyaGZhMzg0eF8xNihvZmZzZXQpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UgPQlob3N0MmhmYTM4NHhfMTYocGFnZSk7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsCisJCSJ0eXBlPTB4JTA0eCBmcm1sZW49JWQgb2Zmc2V0PTB4JTA0eCBwYWdlPTB4JTA0eFxuIiwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEudHlwZSwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuLAorCQljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpOworCisJV0xBTl9MT0dfREVCVUcoNCwicGt0c2l6ZT0lemRcbiIsCisJCVJPVU5EVVA2NChzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEpKSk7CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKKyAgICAgICAgICAgICAgICB1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9ybWVtX2NvbXBsZXRvcigmY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLnJtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbikgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG93bWVtCisqCisqIENvbnN0cnVjdHMgYSB3cml0ZW1lbSBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2Nid21lbSgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXBhZ2UJCU1BQyBhZGRyZXNzIHNwYWNlIHBhZ2UgKENNRCBmb3JtYXQpCisqCW9mZnNldAkJTUFDIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0CisqCWRhdGEJCVB0ciB0byBkYXRhIGJ1ZmZlciBjb250YWluaW5nIHdyaXRlIGRhdGEKKyoJbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZCAobWF4ID09IDIwNDgpCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET1dBSVQpCisqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2Rvd21lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LCAicGFnZT0weCUwNHggb2Zmc2V0PTB4JTA0eCBsZW49JWRcbiIsCisJCXBhZ2Usb2Zmc2V0LGxlbik7CisKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9XTUVNUkVRKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4gPSBob3N0MmhmYTM4NHhfMTYoCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsKKwkJCQkJbGVuKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQgPSBob3N0MmhmYTM4NHhfMTYob2Zmc2V0KTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5wYWdlID0gICBob3N0MmhmYTM4NHhfMTYocGFnZSk7CisJbWVtY3B5KGN0bHgtPm91dGJ1Zi53bWVtcmVxLmRhdGEsIGRhdGEsIGxlbik7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUpICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLmZybWxlbikgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCisJICAgICAgICAgICAgICAgICAgIGxlbjsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAoIG1vZGUgPT0gRE9XQUlUICkgeworICAgICAgICAgICAgICAgIHVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3dtZW1fY29tcGxldG9yKCZjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYud21lbXJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd21lbXJlc3VsdCkgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMKKyoKKyogU2VuZCBhIGNvbW10YWxsaWVzIGlucXVpcnkgdG8gdGhlIE1BQy4gIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGFzeW5jCisqIGNhbGwgdGhhdCB3aWxsIHJlc3VsdCBpbiBhbiBpbmZvIGZyYW1lIGFycml2aW5nIHNvbWV0aW1lIGxhdGVyLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8JCXN1Y2Nlc3MuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoIGhmYTM4NHhfdCAqaHcgKQoreworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTlE7CisJY21kLnBhcm0wID0gSEZBMzg0eF9JVF9DT01NVEFMTElFUzsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwloZmEzODR4X2RvY21kX2FzeW5jKGh3LCAmY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgZGlzYWJsZSBjb21tYW5kIHRvIHN0b3AgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZGlzYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgaGF2ZSBiZWVuCisqIHByZXZpb3VzbHkgZW5hYmxlZCBtYXkgYmUgZGlzYWJsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMDsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZW5hYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBhcmUgY3VycmVudGx5CisqIGRpc2FibGVkIG1heSBiZSBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCisJREJGRU5URVI7CisJaWYgKCghaHctPmlzYXAgJiYgbWFjcG9ydCAhPSAwKSB8fAorCSAgICAoaHctPmlzYXAgJiYgIShtYWNwb3J0IDw9IEhGQTM4NHhfUE9SVElEX01BWCkpIHx8CisJICAgIChody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2VuYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMTsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCByZXRyaWV2ZXMgdGhlIGZsYXNoIGRvd25sb2FkCisqIGJ1ZmZlciBsb2NhdGlvbiwgYnVmZmVyIHNpemUsIGFuZCB0aW1lb3V0IGxlbmd0aC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJaTsKKworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiY2FsbGVkIHdoZW4gcG9ydCBlbmFibGVkLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXRyaWV2ZSB0aGUgYnVmZmVyIGxvYyZzaXplIGFuZCB0aW1lb3V0ICovCisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCisJCQkJJihody0+YnVmaW5mbyksIHNpemVvZihody0+YnVmaW5mbykpKSApIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaHctPmJ1ZmluZm8ucGFnZSA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlody0+YnVmaW5mby5sZW4gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ubGVuKTsKKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCSYoaHctPmRsdGltZW91dCkpKSApIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaHctPmRsdGltZW91dCA9IGhmYTM4NHgyaG9zdF8xNihody0+ZGx0aW1lb3V0KTsKKworCVdMQU5fTE9HX0RFQlVHKDEsImZsYXNoZGxfZW5hYmxlXG4iKTsKKworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRDsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBNQUMKKyogZmlybXdhcmUgdG8gcmVzdGFydC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgYWxyZWFkeSBpbiB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0RFQlVHKDEsImZsYXNoZGxfZW5hYmxlXG4iKTsKKworCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KKwkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKKyoKKyogUGVyZm9ybXMgYSBGTEFTSCBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgRkxBU0ggZG93bmxvYWQgc3RhdGUsIHRoZW4gc2V0cyB0aGUgZG93bmxvYWQKKyogbW9kZSwgdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucyB0byAxKSBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaAorKiBidWZmZXIsIDIpIHNldHMgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSwgMykgcmVhZGJhY2sgYW5kCisqIGNvbXBhcmUuICBMYXRoZXIgcmluc2UsIHJlcGVhdCBhcyBtYW55IHRpbWVzIGFuIG5lY2Vzc2FyeSB0byBnZXQKKyogYWxsIHRoZSBnaXZlbiBkYXRhIGludG8gZmxhc2guCisqIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZyB0aGlzIGZ1bmN0aW9uIChwb3NzaWJseQorKiByZXBlYXRlZGx5KSwgY2FsbCBkcnZyX2ZsYXNoZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoCisJaGZhMzg0eF90CSpodywKKwlVSU5UMzIJCWRhZGRyLAorCXZvaWQJCSpidWYsCisJVUlOVDMyCQlsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQzMgkJZGxidWZhZGRyOworCWludAkJbmJ1cm5zOworCVVJTlQzMgkJYnVybmxlbjsKKwlVSU5UMzIJCWJ1cm5kYWRkcjsKKwlVSU5UMTYJCWJ1cm5sbzsKKwlVSU5UMTYJCWJ1cm5oaTsKKwlpbnQJCW53cml0ZXM7CisJVUlOVDgJCSp3cml0ZWJ1ZjsKKwlVSU5UMTYJCXdyaXRlcGFnZTsKKwlVSU5UMTYJCXdyaXRlb2Zmc2V0OworCVVJTlQzMgkJd3JpdGVsZW47CisJaW50CQlpOworCWludAkJajsKKworCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDUsImRhZGRyPTB4JTA4eCBsZW49JWRcbiIsIGRhZGRyLCBsZW4pOworCisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBpbiB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIkRvd25sb2FkICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogQ29udmVydCB0byBmbGF0IGFkZHJlc3MgZm9yIGFyaXRobWV0aWMgKi8KKwkvKiBOT1RFOiBkbGJ1ZmZlciBSSUQgc3RvcmVzIHRoZSBhZGRyZXNzIGluIEFVWCBmb3JtYXQgKi8KKwlkbGJ1ZmFkZHIgPSBIRkEzODR4X0FERFJfQVVYX01LRkxBVCgKKwkJCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCk7CisJV0xBTl9MT0dfREVCVUcoNSwKKwkJImRsYnVmLnBhZ2U9MHglMDR4IGRsYnVmLm9mZnNldD0weCUwNHggZGxidWZhZGRyPTB4JTA4eFxuIiwKKwkJaHctPmJ1ZmluZm8ucGFnZSwgaHctPmJ1ZmluZm8ub2Zmc2V0LCBkbGJ1ZmFkZHIpOworCisjaWYgMAorV0xBTl9MT0dfV0FSTklORygiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKKyNlbmRpZgorCS8qIENhbGN1bGF0aW9ucyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmlsbHMgb2YgdGhlIGRsYnVmZmVyIHRvIGRvCisJICogYW5kIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgdG8gZG8gZm9yIGVhY2ggZmlsbC4gIEF0IHRoaXMgcG9pbnQKKwkgKiBpbiB0aW1lLCB0aGUgZGxidWZmZXIgc2l6ZSBhbmQgdGhlIHdtZW1yZXEgc2l6ZSBhcmUgdGhlIHNhbWUuCisJICogVGhlcmVmb3JlLCBud3JpdGVzIHNob3VsZCBhbHdheXMgYmUgMS4gIFRoZSBleHRyYSBjb21wbGV4aXR5CisJICogaGVyZSBpcyBhIGhlZGdlIGFnYWluc3QgZnV0dXJlIGNoYW5nZXMuCisJICovCisKKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHRpbWVzIHRvIGRvIHRoZSBmbGFzaCBwcm9ncmFtbWluZyAqLworCW5idXJucyA9IGxlbiAvIGh3LT5idWZpbmZvLmxlbjsKKwluYnVybnMgKz0gKGxlbiAlIGh3LT5idWZpbmZvLmxlbikgPyAxIDogMDsKKworCS8qIEZvciBlYWNoIGZsYXNoIHByb2dyYW0gY3ljbGUsIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgYXJlIG5lZWRlZD8gKi8KKwlud3JpdGVzID0gaHctPmJ1ZmluZm8ubGVuIC8gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOOworCW53cml0ZXMgKz0gKGh3LT5idWZpbmZvLmxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikgPyAxIDogMDsKKworCS8qIEZvciBlYWNoIGJ1cm4gKi8KKwlmb3IgKCBpID0gMDsgaSA8IG5idXJuczsgaSsrKSB7CisJCS8qIEdldCB0aGUgZGVzdCBhZGRyZXNzIGFuZCBsZW4gKi8KKwkJYnVybmxlbiA9IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpID4gaHctPmJ1ZmluZm8ubGVuID8KKwkJCQlody0+YnVmaW5mby5sZW4gOgorCQkJCShsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOworCQlidXJuZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKKwkJYnVybmxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihidXJuZGFkZHIpOworCQlidXJuaGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShidXJuZGFkZHIpOworCisJCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKKwkJCWJ1cm5sZW4sIGJ1cm5kYWRkcik7CisKKwkJLyogU2V0IHRoZSBkb3dubG9hZCBtb2RlICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX05WLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKworCQkvKiBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgKi8KKwkJZm9yICggaj0wOyBqIDwgbndyaXRlczsgaisrKSB7CisJCQl3cml0ZWJ1ZiA9IGJ1ZiArCisJCQkJKGkqaHctPmJ1ZmluZm8ubGVuKSArCisJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKKworCQkJd3JpdGVwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoCisJCQkJCWRsYnVmYWRkciArCisJCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOworCQkJd3JpdGVvZmZzZXQgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKAorCQkJCQlkbGJ1ZmFkZHIgKworCQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKKworCQkJd3JpdGVsZW4gPSBidXJubGVuLShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCQl3cml0ZWxlbiA9IHdyaXRlbGVuICA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/CisJCQkJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA6CisJCQkJCXdyaXRlbGVuOworCisJCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KCBodywKKwkJCQkJd3JpdGVwYWdlLAorCQkJCQl3cml0ZW9mZnNldCwKKwkJCQkJd3JpdGVidWYsCisJCQkJCXdyaXRlbGVuICk7CisjaWYgMAorCitDb21tZW50IG91dCBmb3IgZGVidWdnaW5nLCBhc3N1bWUgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLgorCQkJaWYgKHJlc3VsdCkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkiV3JpdGUgdG8gZGwgYnVmZmVyIGZhaWxlZCwgIgorCQkJCQkicmVzdWx0PTB4JTA0eC4gQWJvcnRpbmcuXG4iLAorCQkJCQlyZXN1bHQpOworCQkJCWdvdG8gZXhpdF9wcm9jOworCQkJfQorI2VuZGlmCisKKwkJfQorCisJCS8qIHNldCB0aGUgZG93bmxvYWQgJ3dyaXRlIGZsYXNoJyBtb2RlICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LAorCQkJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURSwKKwkJCQkwLDAsMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKworCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRvIGEgcmVhZGJhY2sgYW5kIGNvbXBhcmUuICovCisJfQorCitleGl0X3Byb2M6CisKKwkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgaW4gdGhlICdwb3N0LXByb2cnIG1vZGUuICBmbGFzaGRsX2Rpc2FibGUgd2lsbCAqLworCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLworCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gcmVhZCBhIGNvbmZpZy9pbmZvIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmlkCQljb25maWcvaW5mbyByZWNvcmQgaWQgKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIuICBVcG9uIHJldHVybiBpdCB3aWxsCisqCQkJY29udGFpbiB0aGUgYm9keSBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKG1pbnVzIHRoZQorKgkJCVJJRCBhbmQgbGVuKS4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcywgc2hvdWxkIG1hdGNoIHJlY29yZCBsZW5ndGgpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCS1FTk9EQVRBIAlsZW5ndGggbWlzbWF0Y2ggYmV0d2VlbiBhcmd1bWVudCBhbmQgcmV0cmlldmVkCisqCQkJcmVjb3JkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50IAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9ycmlkX3dhaXQoaHcsIHJpZCwgYnVmLCBsZW4pOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGhmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMKKyAqCisgKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gYW4gYXN5bmMgcmVhZCBvZgorICogb2YgYSBjb25maWcvaW5mbyBpdGVtLgorICoKKyAqIEFyZ3VtZW50czoKKyAqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisgKiAgICAgICByaWQgICAgICAgICAgICAgY29uZmlnL2luZm8gcmVjb3JkIGlkIChob3N0IG9yZGVyKQorICogICAgICAgYnVmICAgICAgICAgICAgIGhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyLiAgVXBvbiByZXR1cm4gaXQgd2lsbAorICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIGJvZHkgcG9ydGlvbiBvZiB0aGUgcmVjb3JkIChtaW51cyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBSSUQgYW5kIGxlbikuCisgKiAgICAgICBsZW4gICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMsIHNob3VsZCBtYXRjaCByZWNvcmQgbGVuZ3RoKQorICogICAgICAgY2JmbiAgICAgICAgICAgIGNhbGxlciBzdXBwbGllZCBjYWxsYmFjaywgY2FsbGVkIHdoZW4gdGhlIGNvbW1hbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICBpcyBkb25lIChzdWNjZXNzZnVsIG9yIG5vdCkuCisgKiAgICAgICBjYmZuZGF0YSAgICAgICAgcG9pbnRlciB0byBzb21lIGNhbGxlciBzdXBwbGllZCBkYXRhIHRoYXQgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2Jmbi4KKyAqCisgKiBSZXR1cm5zOgorICogICAgICAgbm90aGluZyAgICAgICAgIHRoZSBjYmZuIGdldHMgYSBzdGF0dXMgYXJndW1lbnQgaWRlbnRpZnlpbmcgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXJyb3JzIG9jY3VyLgorICogU2lkZSBlZmZlY3RzOgorICogICAgICAgUXVldWVzIGFuIGhmYTM4NHhfdXNiY21kX3QgZm9yIHN1YnNlcXVlbnQgZXhlY3V0aW9uLgorICoKKyAqIENhbGwgY29udGV4dDoKKyAqICAgICAgIEFueQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKAorICAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3LAorICAgICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgcmlkLAorICAgICAgICAgY3RseF91c2VyY2JfdCAgICAgICAgICAgdXNlcmNiLAorICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoreworICAgICAgICAgcmV0dXJuIGhmYTM4NHhfZG9ycmlkX2FzeW5jKGh3LCByaWQsIE5VTEwsIDAsCisJCQkJICAgICBoZmEzODR4X2NiX3JyaWQsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMKKyAqCisgKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHdyaXRlIGEgY29uZmlnL2luZm8gaXRlbS4KKyAqCisgKiBBcmd1bWVudHM6CisgKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorICogICAgICAgcmlkICAgICAgICAgICAgIGNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaW4gaG9zdCBvcmRlcikKKyAqICAgICAgIGJ1ZiAgICAgICAgICAgICBob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlcgorICogICAgICAgbGVuICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKQorICogICAgICAgdXNlcmNiICAgICAgICAgIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqICAgICAgIHVzZXJjYl9kYXRhICAgICBjb21wbGV0aW9uIGNhbGxiYWNrIGFyZ3VtZW50CisgKgorICogUmV0dXJuczoKKyAqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisgKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisgKiAgICAgICA8MCAgICAgICAgICAgICAgZHJpdmVyIHJlcG9ydGVkIGVycm9yCisgKgorICogU2lkZSBlZmZlY3RzOgorICoKKyAqIENhbGwgY29udGV4dDoKKyAqICAgICAgIHByb2Nlc3MKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYygKKyAgICAgICAgIGhmYTM4NHhfdCAgICAgICAqaHcsCisgICAgICAgICBVSU5UMTYgICAgICAgICAgcmlkLAorICAgICAgICAgdm9pZCAgICAgICAgICAgICpidWYsCisgICAgICAgICBVSU5UMTYgICAgICAgICAgbGVuLAorICAgICAgICAgY3RseF91c2VyY2JfdCAgIHVzZXJjYiwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93cmlkX2FzeW5jKGh3LCByaWQsIGJ1ZiwgbGVuLAorCQkJCSAgICBoZmEzODR4X2NiX3N0YXR1cywgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfaGFuZG92ZXIKKyoKKyogU2VuZHMgYSBoYW5kb3ZlciBub3RpZmljYXRpb24gdG8gdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglhZGRyCQlhZGRyZXNzIG9mIHN0YXRpb24gdGhhdCdzIGxlZnQKKyoKKyogUmV0dXJuczoKKyoJemVybwkJc3VjY2Vzcy4KKyoJLUVSRVNUQVJUU1lTCXJlY2VpdmVkIHNpZ25hbCB3aGlsZSB3YWl0aW5nIGZvciBzZW1hcGhvcmUuCisqCS1FSU8JCWZhaWxlZCB0byB3cml0ZSB0byBiYXAsIG9yIGZhaWxlZCBpbiBjbWQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIFVJTlQ4ICphZGRyKQoreworICAgICAgICBEQkZFTlRFUjsKKwlXTEFOX0xPR19FUlJPUigiTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gVVNCIVxuIik7CisJREJGRVhJVDsKKwlyZXR1cm4gLUVJTzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwKKyoKKyogV3JpdGUgdGVzdCBjb21tYW5kcyB0byB0aGUgY2FyZC4gIFNvbWUgdGVzdCBjb21tYW5kcyBkb24ndCBtYWtlCisqIHNlbnNlIHdpdGhvdXQgcHJpb3Igc2V0LXVwLiAgRm9yIGV4YW1wbGUsIGNvbnRpbm91cyBUWCBpc24ndCB2ZXJ5CisqIHVzZWZ1bCB1bnRpbCB5b3Ugc2V0IHRoZSBjaGFubmVsLiAgVGhhdCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICBwcm9jZXNzIHRocmVhZAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludCAgICAgICAgICAgICByZXN1bHQ7CisJREJGRU5URVI7CisKKwkvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9tbWlfcmVhZAorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIHJlZ2lzdGVyICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyICpyZXNwKQoreworI2lmIDAKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIFVJTlQxNiAgY21kX2NvZGUgPSAoVUlOVDE2KSAweDMwOworICAgICAgICBVSU5UMTYgcGFyYW0gPSAoVUlOVDE2KSBhZGRyOworICAgICAgICBEQkZFTlRFUjsKKworICAgICAgICAvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWRfY29kZSk7CisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3dyaXRlCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgYWRkciAgICAgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqICAgICAgIGRhdGEgICAgICAgICAgICBUaGUgZGF0YSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludAoraGZhMzg0eF9kcnZyX21taV93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyIGRhdGEpCit7CisjaWYgMAorICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgVUlOVDE2ICBjbWRfY29kZSA9IChVSU5UMTYpIDB4MzE7CisgICAgICAgIFVJTlQxNiBwYXJhbTAgPSAoVUlOVDE2KSBhZGRyOworICAgICAgICBVSU5UMTYgcGFyYW0xID0gKFVJTlQxNikgZGF0YTsKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogYWRkciA9IDB4JTA4bHhcbiIsIGFkZHIpOworICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJtbWkgd3JpdGUgOiBkYXRhID0gMHglMDhseFxuIiwgZGF0YSk7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kX2NvZGUpOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK3JldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZQorKgorKiBFbmRzIHRoZSByYW0gZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgYWxyZWFkeSBpbiB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9kaXNhYmxlKClcbiIpOworCisJLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCwgc28gSSBkb24ndCAqLworCS8qICBib3RoZXIgIHcvIHRoZSByZXR1cm4gdmFsdWUgKi8KKwloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCisqCisqIEJlZ2lucyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCBjYWxscyBjbWRfZG93bmxvYWQgd2l0aCB0aGUKKyogRU5BQkxFX1ZPTEFUSUxFIHN1YmNvbW1hbmQgYW5kIHRoZSBleGVhZGRyIGFyZ3VtZW50LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWV4ZWFkZHIJCXRoZSBjYXJkIGV4ZWN1dGlvbiBhZGRyZXNzIHRoYXQgd2lsbCBiZQorKiAgICAgICAgICAgICAgICAgICAgICAganVtcGVkIHRvIHdoZW4gcmFtZGxfZGlzYWJsZSgpIGlzIGNhbGxlZAorKgkJCShob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCWxvd2FkZHI7CisJVUlOVDE2CQloaWFkZHI7CisJaW50CQlpOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkRvd25sb2FkIHN0YXRlIG5vdCBkaXNhYmxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9lbmFibGUsIGV4ZWFkZHI9MHglMDh4XG4iLCBleGVhZGRyKTsKKworCS8qIENhbGwgdGhlIGRvd25sb2FkKDEsYWRkcikgZnVuY3Rpb24gKi8KKwlsb3dhZGRyID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihleGVhZGRyKTsKKwloaWFkZHIgPSAgSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZXhlYWRkcik7CisKKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9SQU0sCisJCQlsb3dhZGRyLCBoaWFkZHIsIDApOworCisJaWYgKCByZXN1bHQgPT0gMCkgeworCQkvKiBTZXQgdGhlIGRvd25sb2FkIHN0YXRlICovCisJCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQ7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJCWxvd2FkZHIsCisJCQloaWFkZHIsCisJCQlyZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgUkFNIGRvd25sb2FkIG9mIGEgY2h1bmsgb2YgZGF0YS4gRmlyc3QgY2hlY2tzIHRvIHNlZQorKiB0aGF0IHdlJ3JlIGluIHRoZSBSQU0gZG93bmxvYWQgc3RhdGUsIHRoZW4gdXNlcyB0aGUgW3JlYWR8d3JpdGVdbWVtIFVTQgorKiBjb21tYW5kcyB0byAxKSBjb3B5IHRoZSBkYXRhLCAyKSByZWFkYmFjayBhbmQgY29tcGFyZS4gIFRoZSBkb3dubG9hZAorKiBzdGF0ZSBpcyB1bmFmZmVjdGVkLiAgV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHVzaW5nCisqIHRoaXMgZnVuY3Rpb24sIGNhbGwgZHJ2cl9yYW1kbF9kaXNhYmxlKCkgdG8gZW5kIHRoZSBkb3dubG9hZCBzdGF0ZQorKiBhbmQgcmVzdGFydCB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWRhZGRyCQlDYXJkIGFkZHJlc3MgdG8gd3JpdGUgdG8uIChob3N0IG9yZGVyKQorKglidWYJCVB0ciB0byBkYXRhIHRvIHdyaXRlLgorKglsZW4JCUxlbmd0aCBvZiBkYXRhIChob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJbndyaXRlczsKKwlVSU5UOAkJKmRhdGEgPSBidWY7CisJaW50CQlpOworCVVJTlQzMgkJY3VycmFkZHI7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVDE2CQljdXJybGVuOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogSG93IG1hbnkgZG93bWVtIGNhbGxzPyAgKi8KKwlud3JpdGVzID0gbGVuIC8gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOOworCW53cml0ZXMgKz0gbGVuICUgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8gMSA6IDA7CisKKwkvKiBEbyBibG9ja2luZyB3bWVtJ3MgKi8KKwlmb3IoaT0wOyBpIDwgbndyaXRlczsgaSsrKSB7CisJCS8qIG1ha2UgYWRkcmVzcyBhcmdzICovCisJCWN1cnJhZGRyID0gZGFkZHIgKyAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoY3VycmFkZHIpOworCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihjdXJyYWRkcik7CisJCWN1cnJsZW4gPSBsZW4gLSAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCWlmICggY3VycmxlbiA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikgeworCQkJY3VycmxlbiA9IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwkJfQorCisJIAkvKiBEbyBibG9ja2luZyBjdGx4ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoIGh3LAorCQkJCWN1cnJwYWdlLAorCQkJCWN1cnJvZmZzZXQsCisJCQkJZGF0YSArIChpKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCisJCQkJY3VycmxlbiApOworCisJCWlmIChyZXN1bHQpIGJyZWFrOworCisJCS8qIFRPRE86IFdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIHJlYWRiYWNrLiAqLworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JlYWRwZGEKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIHRvIHJlYWQgdGhlIFBEQSBzcGFjZS4gIE5vdGUgdGhlcmUgaXMgbm8KKyogZHJ2cl93cml0ZXBkYSgpIGZ1bmN0aW9uLiAgV3JpdGluZyBhIFBEQSBpcworKiBnZW5lcmFsbHkgaW1wbGVtZW50ZWQgYnkgYSBjYWxsaW5nIGNvbXBvbmVudCB2aWEgY2FsbHMgdG8KKyogY21kX2Rvd25sb2FkIGFuZCB3cml0aW5nIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgdmlhIHRoZQorKiBhdXggcmVncy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglidWYJCWJ1ZmZlciB0byBzdG9yZSBQREEgaW4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCS1FVElNRU9VVAl0aW1vdXQgd2FpdGluZyBmb3IgdGhlIGNtZCByZWdzIHRvIGJlY29tZQorKgkJCWF2YWlsYWJsZSwgb3Igd2FpdGluZyBmb3IgdGhlIGNvbnRyb2wgcmVnCisqCQkJdG8gaW5kaWNhdGUgdGhlIEF1eCBwb3J0IGlzIGVuYWJsZWQuCisqCS1FTk9EQVRBCXRoZSBidWZmZXIgZG9lcyBOT1QgY29udGFpbiBhIHZhbGlkIFBEQS4KKyoJCQlFaXRoZXIgdGhlIGNhcmQgUERBIGlzIGJhZCwgb3IgdGhlIGF1eGRhdGEKKyoJCQlyZWFkcyBhcmUgZ2l2aW5nIHVzIGdhcmJhZ2UuCisKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3Mgb3Igbm9uLWNhcmQgaW50ZXJydXB0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCBVSU5UIGxlbikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQkqcGRhID0gYnVmOworCWludAkJcGRhb2sgPSAwOworCWludAkJbW9yZXBkcnMgPSAxOworCWludAkJY3VycnBkciA9IDA7CS8qIHdvcmQgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHBkciAqLworCXNpemVfdAkJaTsKKwlVSU5UMTYJCXBkcmxlbjsJCS8qIHBkciBsZW5ndGggaW4gYnl0ZXMsIGhvc3Qgb3JkZXIgKi8KKwlVSU5UMTYJCXBkcmNvZGU7CS8qIHBkciBjb2RlLCBob3N0IG9yZGVyICovCisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJc3RydWN0IHBkYWxvYyB7CisJCVVJTlQzMgljYXJkYWRkcjsKKwkJVUlOVDE2CWF1eGN0bDsKKwl9IHBkYWxvY1tdID0KKwl7CisJCXsgSEZBMzg0Ml9QREFfQkFTRSwJCTB9LAorCQl7IEhGQTM4NDFfUERBX0JBU0UsCQkwfSwKKwkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAkwfQorCX07CisKKwlEQkZFTlRFUjsKKworCS8qIFJlYWQgdGhlIHBkYSBmcm9tIGVhY2gga25vd24gYWRkcmVzcy4gICovCisJZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgeworCQkvKiBNYWtlIGFkZHJlc3MgKi8KKwkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShwZGFsb2NbaV0uY2FyZGFkZHIpOworCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihwZGFsb2NbaV0uY2FyZGFkZHIpOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZG9ybWVtX3dhaXQoaHcsCisJCQljdXJycGFnZSwKKwkJCWN1cnJvZmZzZXQsCisJCQlidWYsCisJCQlsZW4pOwkJLyogdW5pdHMgb2YgYnl0ZXMgKi8KKworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCQkgICJSZWFkIGZyb20gaW5kZXggJXpkIGZhaWxlZCwgY29udGludWluZ1xuIiwKKwkJCQlpICk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRlc3QgZm9yIGdhcmJhZ2UgKi8KKwkJcGRhb2sgPSAxOwkvKiBpbml0aWFsbHkgYXNzdW1lIGdvb2QgKi8KKwkJbW9yZXBkcnMgPSAxOworCQl3aGlsZSAoIHBkYW9rICYmIG1vcmVwZHJzICkgeworCQkJcGRybGVuID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyXSkgKiAyOworCQkJcGRyY29kZSA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcisxXSk7CisJCQkvKiBUZXN0IHRoZSByZWNvcmQgbGVuZ3RoICovCisJCQlpZiAoIHBkcmxlbiA+IEhGQTM4NHhfUERSX0xFTl9NQVggfHwgcGRybGVuID09IDApIHsKKwkJCQlXTEFOX0xPR19FUlJPUigicGRybGVuIGludmFsaWQ9JWRcbiIsCisJCQkJCXBkcmxlbik7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogVGVzdCB0aGUgY29kZSAqLworCQkJaWYgKCAhaGZhMzg0eF9pc2dvb2RfcGRyY29kZShwZHJjb2RlKSApIHsKKwkJCQlXTEFOX0xPR19FUlJPUigicGRyY29kZSBpbnZhbGlkPSVkXG4iLAorCQkJCQlwZHJjb2RlKTsKKwkJCQlwZGFvayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBUZXN0IGZvciBjb21wbGV0aW9uICovCisJCQlpZiAoIHBkcmNvZGUgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkgeworCQkJCW1vcmVwZHJzID0gMDsKKwkJCX0KKworCQkJLyogTW92ZSB0byB0aGUgbmV4dCBwZHIgKGlmIG5lY2Vzc2FyeSkgKi8KKwkJCWlmICggbW9yZXBkcnMgKSB7CisJCQkJLyogbm90ZSB0aGUgYWNjZXNzIHRvIHBkYVtdLCBuZWVkIHdvcmRzIGhlcmUgKi8KKwkJCQljdXJycGRyICs9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICsgMTsKKwkJCX0KKwkJfQorCQlpZiAoIHBkYW9rICkgeworCQkJV0xBTl9MT0dfSU5GTygKKwkJCQkiUERBIFJlYWQgZnJvbSAweCUwOHggaW4gJXMgc3BhY2UuXG4iLAorCQkJCXBkYWxvY1tpXS5jYXJkYWRkciwKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDAgPyAiRVhURFMiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDEgPyAiTlYiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDIgPyAiUEhZIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAzID8gIklDU1JBTSIgOgorCQkJCSI8Ym9ndXMgYXV4Y3RsPiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVzdWx0ID0gcGRhb2sgPyAwIDogLUVOT0RBVEE7CisKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMywiRmFpbHVyZTogcGRhIGlzIG5vdCBva2F5XG4iKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byB3cml0ZSBhIGNvbmZpZy9pbmZvIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmlkCQljb25maWcvaW5mbyByZWNvcmQgaWQgKGluIGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIKKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zdGFydAorKgorKiBJc3N1ZXMgdGhlIE1BQyBpbml0aWFsaXplIGNvbW1hbmQsIHNldHMgdXAgc29tZSBkYXRhIHN0cnVjdHVyZXMsCisqIGFuZCBlbmFibGVzIHRoZSBpbnRlcnJ1cHRzLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMsIHRoZQorKiBsb3ctbGV2ZWwgc3R1ZmYgc2hvdWxkIGJlIHJlYWR5IGZvciBhbnkvYWxsIGNvbW1hbmRzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAodXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhaWxlZCB0byByZXNldCBidWxrIGluIGVuZHBvaW50LlxuIik7CisJfQorCisJaWYgKHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX291dCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiRmFpbGVkIHRvIHJlc2V0IGJ1bGsgb3V0IGVuZHBvaW50LlxuIik7CisJfQorCisJLyogU3luY2hyb25vdXMgdW5saW5rLCBpbiBjYXNlIHdlJ3JlIHRyeWluZyB0byByZXN0YXJ0IHRoZSBkcml2ZXIgKi8KKwl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCisJLyogUG9zdCB0aGUgSU4gdXJiICovCisJcmVzdWx0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhdGFsLCBmYWlsZWQgdG8gc3VibWl0IFJYIFVSQiwgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCS8qIGNhbGwgaW5pdGlhbGl6ZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUlVOTklORzsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zdG9wCisqCisqIFNodXRzIGRvd24gdGhlIE1BQyB0byB0aGUgcG9pbnQgd2hlcmUgaXQgaXMgc2FmZSB0byB1bmxvYWQgdGhlCisqIGRyaXZlci4gIEFueSBzdWJzeXN0ZW0gdGhhdCBtYXkgYmUgaG9sZGluZyBhIGRhdGEgb3IgZnVuY3Rpb24KKyogcHRyIGludG8gdGhlIGRyaXZlciBtdXN0IGJlIGNsZWFyZWQvZGVpbml0aWFsaXplZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaW50CWk7CisJREJGRU5URVI7CisKKwltaWdodF9zbGVlcCgpOworCisJLyogVGhlcmUncyBubyBuZWVkIGZvciBzcGlubG9ja3MgaGVyZS4gVGhlIFVTQiAiZGlzY29ubmVjdCIKKwkgKiBmdW5jdGlvbiBzZXRzIHRoaXMgInJlbW92ZWQiIGZsYWcgYW5kIHRoZW4gY2FsbHMgdXMuCisJICovCisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwkJLyogQ2FsbCBpbml0aWFsaXplIHRvIGxlYXZlIHRoZSBNQUMgaW4gaXRzICdyZXNldCcgc3RhdGUgKi8KKwkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisKKwkJLyogQ2FuY2VsIHRoZSByeHVyYiAqLworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCX0KKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisJZGVsX3RpbWVyX3N5bmMoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCisJLyogQ2xlYXIgYWxsIHRoZSBwb3J0IHN0YXR1cyAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfdHhmcmFtZQorKgorKiBUYWtlcyBhIGZyYW1lIGZyb20gcHJpc20yc3RhIGFuZCBxdWV1ZXMgaXQgZm9yIHRyYW5zbWlzc2lvbi4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglza2IJCXBhY2tldCBidWZmZXIgc3RydWN0LiAgQ29udGFpbnMgYW4gODAyLjExCisqCQkJZGF0YSBmcmFtZS4KKyogICAgICAgcDgwMjExX2hkciAgICAgIHBvaW50cyB0byB0aGUgODAyLjExIGhlYWRlciBmb3IgdGhlIHBhY2tldC4KKyogUmV0dXJuczoKKyoJMAkJU3VjY2VzcyBhbmQgbW9yZSBidWZmcyBhdmFpbGFibGUKKyoJMQkJU3VjY2VzcyBidXQgbm8gbW9yZSBidWZmcworKgkyCQlBbGxvY2F0aW9uIGZhaWx1cmUKKyoJNAkJQnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCisKK3sKKwlpbnQJCXVzYnBrdGxlbiA9IHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpOworCWludAkJcmVzdWx0OworCWludAkJcmV0OworCWNoYXIJCSpwdHI7CisKKwlEQkZFTlRFUjsKKworCWlmIChody0+dHhfdXJiLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJV0xBTl9MT0dfV0FSTklORygiVFggVVJCIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmVzdWx0ID0gMzsKKwkJZ290byBleGl0OworCX0KKworCS8qIEJ1aWxkIFR4IGZyYW1lIHN0cnVjdHVyZSAqLworCS8qIFNldCB1cCB0aGUgY29udHJvbCBmaWVsZCAqLworCW1lbXNldCgmaHctPnR4YnVmZi50eGZybS5kZXNjLCAwLCBzaXplb2YoaHctPnR4YnVmZi50eGZybS5kZXNjKSk7CisKKwkvKiBTZXR1cCB0aGUgdXNiIHR5cGUgZmllbGQgKi8KKwlody0+dHhidWZmLnR5cGUgPSBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfVFhGUk0pOworCisJLyogU2V0IHVwIHRoZSBzd19zdXBwb3J0IGZpZWxkIHRvIGlkZW50aWZ5IHRoaXMgZnJhbWUgKi8KKwlody0+dHhidWZmLnR4ZnJtLmRlc2Muc3dfc3VwcG9ydCA9IDB4MDEyMzsKKworLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCisgKiBidWYgZGVwbGV0aW9uCisgKi8KKy8vI2RlZmluZSBET0VYQyAgU0xQIC0tIGRvYm90aCBicmVha3MgaG9ycmlibHkgdW5kZXIgbG9hZCwgZG9leGMgbGVzcyBzby4KKyNpZiBkZWZpbmVkKERPQk9USCkKKwlody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKKyNlbGlmIGRlZmluZWQoRE9FWEMpCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisjZWxzZQorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMCkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2VuZGlmCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlob3N0MmhmYTM4NHhfMTYoaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wpOworCisJLyogY29weSB0aGUgaGVhZGVyIG92ZXIgdG8gdGhlIHR4ZGVzYyAqLworCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCisJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKzgpOworCQkvLyBody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7CisJCXVzYnBrdGxlbis9ODsKKwl9IGVsc2UgeworCQlody0+dHhidWZmLnR4ZnJtLmRlc2MuZGF0YV9sZW4gPSBob3N0MmhmYTM4NHhfMTYoc2tiLT5sZW4pOworCX0KKworCXVzYnBrdGxlbiArPSBza2ItPmxlbjsKKworCS8qIGNvcHkgb3ZlciB0aGUgV0VQIElWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLworCXB0ciA9IGh3LT50eGJ1ZmYudHhmcm0uZGF0YTsKKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5pdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPml2KSk7CisJCXB0cis9IHNpemVvZihwODAyMTFfd2VwLT5pdik7CisJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmRhdGEsIHNrYi0+bGVuKTsKKwl9IGVsc2UgeworCQltZW1jcHkocHRyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl9CisJLyogY29weSBvdmVyIHRoZSBwYWNrZXQgZGF0YSAqLworCXB0cis9IHNrYi0+bGVuOworCisJLyogY29weSBvdmVyIHRoZSBXRVAgSUNWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLworCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmljdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPmljdikpOworCX0KKworCS8qIFNlbmQgdGhlIFVTQiBwYWNrZXQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiggJihody0+dHhfdXJiKSwgaHctPnVzYiwKKwkgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCisJICAgICAgICAgICAgICAgJihody0+dHhidWZmKSwgUk9VTkRVUDY0KHVzYnBrdGxlbiksCisJICAgICAgICAgICAgICAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2ICk7CisJaHctPnR4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKKworCXJlc3VsdCA9IDE7CisJcmV0ID0gc3VibWl0X3R4X3VyYihodywgJmh3LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmICggcmV0ICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJInN1Ym1pdF90eF91cmIoKSBmYWlsZWQsIGVycm9yPSVkXG4iLCByZXQpOworCQlyZXN1bHQgPSAzOworCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGhmYTM4NHhfdHhfdGltZW91dCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CSpodyA9IHdsYW5kZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCisJICAgICAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHwKKwkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSApCisJeworCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrCisqCisqIFRhc2tsZXQgdG8gZGVsZXRlIGRlYWQgQ1RMWCBvYmplY3RzCisqCisqIEFyZ3VtZW50czoKKyoJZGF0YQlwdHIgdG8gYSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglJbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QJKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhpcyBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkgaWYgc29tZW9uZQorCSAqIGhhcyB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmaHctPmN0bHhxLnJlYXBhYmxlKSB7CisJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKKwkJa2ZyZWUoY3RseCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrCisqCisqIFRhc2tsZXQgdG8gY2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIGZvciByZXR1cm5lZCBDVExYcworKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGhmYTM4NHhfdAorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWludCByZWFwID0gMDsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKiBUaGlzIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSBlbXB0eSBpZiBzb21lb25lCisJICogaGFzIHVucGx1Z2dlZCB0aGUgYWRhcHRlciAuLi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRlbXAsICZody0+Y3RseHEuY29tcGxldGluZykgeworCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCisJCS8qIENhbGwgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gdGhhdCB0aGlzCisJCSAqIGNvbW1hbmQgd2FzIGFzc2lnbmVkLCBhc3N1bWluZyBpdCBoYXMgb25lLgorCQkgKi8KKwkJaWYgKCBjdGx4LT5jbWRjYiAhPSBOVUxMICkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWN0bHgtPmNtZGNiKGh3LCBjdGx4KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IGFuZCBjb21wbGV0ZQorCQkJICogdGhpcyBDVExYIG1vcmUgdGhhbiBvbmNlIQorCQkJICovCisJCQljdGx4LT5jbWRjYiA9IE5VTEw7CisKKwkJCS8qIERpZCBzb21lb25lIHlhbmsgdGhlIGFkYXB0ZXIgb3V0CisJCQkgKiB3aGlsZSBvdXIgbGlzdCB3YXMgKGJyaWVmbHkpIHVubG9ja2VkPworCQkJICovCisJCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQkJeworCQkJCXJlYXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogIlJlYXBhYmxlIiBDVExYcyBhcmUgb25lcyB3aGljaCBkb24ndCBoYXZlIGFueQorCQkgKiB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZGllLiBIZW5jZSB0aGV5IG11c3QKKwkJICogYmUgZGVsaXZlcmVkIHRvIFRoZSBSZWFwZXIhCisJCSAqLworCQlpZiAoIGN0bHgtPnJlYXBhYmxlICkgeworCQkJLyogTW92ZSB0aGUgQ1RMWCBvZmYgdGhlICJjb21wbGV0aW5nIiBsaXN0IChob3BlZnVsbHkpCisJCQkgKiBvbiB0byB0aGUgInJlYXBhYmxlIiBsaXN0IHdoZXJlIHRoZSByZWFwZXIgdGFzaworCQkJICogY2FuIGZpbmQgaXQuIEFuZCAicmVhcGFibGUiIG1lYW5zIHRoYXQgdGhpcyBDVExYCisJCQkgKiBpc24ndCBzaXR0aW5nIG9uIGEgd2FpdC1xdWV1ZSBzb21ld2hlcmUuCisJCQkgKi8KKwkJCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLnJlYXBhYmxlKTsKKwkJCXJlYXAgPSAxOworCQl9CisKKwkJY29tcGxldGUoJmN0bHgtPmRvbmUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKHJlYXApCisJCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5yZWFwZXJfYmgpOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jCisqCisqIE1hcmsgdGhlIENUTFggZGVhZCBhc3luY2hyb25vdXNseSwgYW5kIGVuc3VyZSB0aGF0IHRoZQorKiBuZXh0IGNvbW1hbmQgb24gdGhlIHF1ZXVlIGlzIHJ1biBhZnRlcndhcmRzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CXB0ciB0byB0aGUgaGZhMzg0eF90IHN0cnVjdHVyZQorKgljdGx4CXB0ciB0byBhIENUTFggc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJdGhlIENUTFgncyBVUkIgaXMgaW5hY3RpdmUKKyogLUVJTlBST0dSRVNTCXRoZSBVUkIgaXMgY3VycmVudGx5IGJlaW5nIHVubGlua2VkCisqCisqIENhbGwgY29udGV4dDoKKyoJRWl0aGVyIHByb2Nlc3Mgb3IgaW50ZXJydXB0LCBidXQgcHJlc3VtYWJseSBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlpbnQgcmV0OworCisJREJGRU5URVI7CisKKwkvKgorCSAqIFRyeSB0byBkZWxldGUgdGhlIFVSQiBjb250YWluaW5nIG91ciByZXF1ZXN0IHBhY2tldC4KKwkgKiBJZiB3ZSBzdWNjZWVkLCB0aGVuIGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZQorCSAqIGNhbGxlZCB3aXRoIGEgc3RhdHVzIG9mIC1FQ09OTlJFU0VULgorCSAqLworCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXJldCA9IHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpOworCisJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJLyoKKwkJICogVGhlIE9VVCBVUkIgaGFkIGVpdGhlciBhbHJlYWR5IGNvbXBsZXRlZAorCQkgKiBvciB3YXMgc3RpbGwgaW4gdGhlIHBlbmRpbmcgcXVldWUsIHNvIHRoZQorCQkgKiBVUkIncyBjb21wbGV0aW9uIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4KKwkJICogV2Ugd2lsbCBoYXZlIHRvIGNvbXBsZXRlIHRoZSBDVExYIG91cnNlbHZlcy4KKwkJICovCisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUKKyoKKyogQSBDVExYIGhhcyBjb21wbGV0ZWQuICBJdCBtYXkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwsIGl0IG1heSBub3QKKyogaGF2ZSBiZWVuLiBBdCB0aGlzIHBvaW50LCB0aGUgQ1RMWCBzaG91bGQgYmUgcXVpZXNjZW50LiAgVGhlIFVSQnMKKyogYXJlbid0IGFjdGl2ZSBhbmQgdGhlIHRpbWVycyBzaG91bGQgaGF2ZSBiZWVuIHN0b3BwZWQuCisqCisqIFRoZSBDVExYIGlzIG1pZ3JhdGVkIHRvIHRoZSAiY29tcGxldGluZyIgcXVldWUsIGFuZCB0aGUgY29tcGxldGluZworKiB0YXNrbGV0IGlzIHNjaGVkdWxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJcHRyIHRvIGEgaGZhMzg0eF90IHN0cnVjdHVyZQorKgljdGx4CQlwdHIgdG8gYSBjdGx4IHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglFaXRoZXIsIGFzc3VtZSBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCS8qIFRpbWVycyBoYXZlIGJlZW4gc3RvcHBlZCwgYW5kIGN0bHggc2hvdWxkIGJlIGluCisJICogYSB0ZXJtaW5hbCBzdGF0ZS4gUmV0aXJlIGl0IGZyb20gdGhlICJhY3RpdmUiCisJICogcXVldWUuCisJICovCisJbGlzdF9tb3ZlX3RhaWwoJmN0bHgtPmxpc3QsICZody0+Y3RseHEuY29tcGxldGluZyk7CisJdGFza2xldF9zY2hlZHVsZSgmaHctPmNvbXBsZXRpb25fYmgpOworCisJc3dpdGNoIChjdGx4LT5zdGF0ZSkgeworCWNhc2UgQ1RMWF9DT01QTEVURToKKwljYXNlIENUTFhfUkVRX0ZBSUxFRDoKKwkJLyogVGhpcyBhcmUgdGhlIGNvcnJlY3QgdGVybWluYXRpbmcgc3RhdGVzLiAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0VSUk9SKCJDVExYWyVkXSBub3QgaW4gYSB0ZXJtaW5hdGluZyBzdGF0ZSglcylcbiIsCisJCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCisJCSAgICAgICAgICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKKwkJYnJlYWs7CisJfSAvKiBzd2l0Y2ggKi8KKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhxX3J1bgorKgorKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBoZWFkIGl0ZW0gaXMgcnVubmluZy4gIElmIG5vdCwgc3RhcnRzIGl0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CXB0ciB0byBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJYW55CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhxX3J1bihoZmEzODR4X3QJKmh3KQoreworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCURCRkVOVEVSOworCisJLyogYWNxdWlyZSBsb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKiBPbmx5IG9uZSBhY3RpdmUgQ1RMWCBhdCBhbnkgb25lIHRpbWUsIGJlY2F1c2UgdGhlcmUncyBubworCSAqIG90aGVyIChyZWxpYWJsZSkgd2F5IHRvIG1hdGNoIHRoZSByZXNwb25zZSBVUkIgdG8gdGhlCisJICogY29ycmVjdCBDVExYLgorCSAqCisJICogRG9uJ3QgdG91Y2ggYW55IG9mIHRoZXNlIENUTFhzIGlmIHRoZSBoYXJkd2FyZQorCSAqIGhhcyBiZWVuIHJlbW92ZWQgb3IgdGhlIFVTQiBzdWJzeXN0ZW0gaXMgc3RhbGxlZC4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSB8fAorCSAgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwKKwkgICAgIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQlnb3RvIHVubG9jazsKKworCXdoaWxlICggIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5wZW5kaW5nKSApIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QJKmhlYWQ7CisJCWludAkJCXJlc3VsdDsKKworCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBwZW5kaW5nIGNvbW1hbmQgKi8KKwkJaGVhZCA9IGxpc3RfZW50cnkoaHctPmN0bHhxLnBlbmRpbmcubmV4dCwKKwkJICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3QsCisJCSAgICAgICAgICAgICAgICAgIGxpc3QpOworCisJCS8qIFdlIG5lZWQgdG8gc3BsaXQgdGhpcyBvZmYgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiAqLworCQlsaXN0X21vdmVfdGFpbCgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5hY3RpdmUpOworCisJCS8qIEZpbGwgdGhlIG91dCBwYWNrZXQgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIoICYoaHctPmN0bHhfdXJiKSwgaHctPnVzYiwKKwkJICAgICAgICAgICAgICAgICAgIGh3LT5lbmRwX291dCwKKwkJICAgICAgICAgICAgICAgICAgICYoaGVhZC0+b3V0YnVmKSwgUk9VTkRVUDY0KGhlYWQtPm91dGJ1ZnNpemUpLAorCQkgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrLCBodyk7CisJCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKKworCQkvKiBOb3cgc3VibWl0IHRoZSBVUkIgYW5kIHVwZGF0ZSB0aGUgQ1RMWCdzIHN0YXRlCisJCSAqLworCQlpZiAoKHJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5jdGx4X3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJCS8qIFRoaXMgQ1RMWCBpcyBub3cgcnVubmluZyBvbiB0aGUgYWN0aXZlIHF1ZXVlICovCisJCQloZWFkLT5zdGF0ZSA9IENUTFhfUkVRX1NVQk1JVFRFRDsKKworCQkJLyogU3RhcnQgdGhlIE9VVCB3YWl0IHRpbWVyICovCisJCQlody0+cmVxX3RpbWVyX2RvbmUgPSAwOworCQkJaHctPnJlcXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCQlhZGRfdGltZXIoJmh3LT5yZXF0aW1lcik7CisKKwkJCS8qIFN0YXJ0IHRoZSBJTiB3YWl0IHRpbWVyICovCisJCQlody0+cmVzcF90aW1lcl9kb25lID0gMDsKKwkJCWh3LT5yZXNwdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAyKkhaOworCQkJYWRkX3RpbWVyKCZody0+cmVzcHRpbWVyKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJLyogVGhlIE9VVCBwaXBlIG5lZWRzIHJlc2V0dGluZywgc28gcHV0CisJCQkgKiB0aGlzIENUTFggYmFjayBpbiB0aGUgInBlbmRpbmciIHF1ZXVlCisJCQkgKiBhbmQgc2NoZWR1bGUgYSByZXNldCAuLi4KKwkJCSAqLworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWxpc3RfbW92ZSgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKKwkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID09IC1FU0hVVERPV04pIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHVyYiBzaHV0ZG93biFcbiIsCisJCQkJCSBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzdWJtaXQgQ1RMWFslZF06IGVycm9yPSVkXG4iLAorCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBoZWFkKTsKKwl9IC8qIHdoaWxlICovCisKKwl1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIFVSQnMgb24gdGhlIEJVTEtJTiBlbmRwb2ludC4KKyoKKyogQXJndW1lbnRzOgorKgl1cmIJCXB0ciB0byB0aGUgY29tcGxldGVkIHVyYgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKKyNlbHNlCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdAkJKmh3OworCWhmYTM4NHhfdXNiaW5fdAkJKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdXJiX3N0YXR1czsKKwlVSU5UMTYJCQl0eXBlOworCisJZW51bSBVU0JJTl9BQ1RJT04geworCQlIQU5ETEUsCisJCVJFU1VCTUlULAorCQlBQk9SVAorCX0gYWN0aW9uOworCisJREJGRU5URVI7CisKKwlpZiAoICF3bGFuZGV2IHx8CisJICAgICAhd2xhbmRldi0+bmV0ZGV2IHx8CisJICAgICAhbmV0aWZfZGV2aWNlX3ByZXNlbnQod2xhbmRldi0+bmV0ZGV2KSApCisJCWdvdG8gZXhpdDsKKworCWh3ID0gd2xhbmRldi0+cHJpdjsKKwlpZiAoIWh3KQorCQlnb3RvIGV4aXQ7CisKKwlza2IgPSBody0+cnhfdXJiX3NrYjsKKwlpZiAoIXNrYiB8fCAoc2tiLT5kYXRhICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyKSkgeworCQlCVUcoKTsKKwl9CisJaHctPnJ4X3VyYl9za2IgPSBOVUxMOworCisJLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBVUkIgKi8KKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlhY3Rpb24gPSBIQU5ETEU7CisKKwkJLyogQ2hlY2sgZm9yIHNob3J0IHBhY2tldCAqLworCQlpZiAoIHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwICkgeworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMpOworCQkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIC1FUElQRToKKwkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRUlMU0VROgorCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FUFJPVE86CisJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCQkgICAgICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpICkgeworCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJfQorCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOworCQlhY3Rpb24gPSBBQk9SVDsKKwkJYnJlYWs7CisKKwljYXNlIC1FT1ZFUkZMT1c6CisJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X292ZXJfZXJyb3JzKTsKKwkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCWJyZWFrOworCisJY2FzZSAtRU5PREVWOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJV0xBTl9MT0dfREVCVUcoMywic3RhdHVzPSVkLCBkZXZpY2UgcmVtb3ZlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgdXJiIGV4cGxpY2l0bHkgdW5saW5rZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0RFQlVHKDMsInVyYiBzdGF0dXM9JWQsIHRyYW5zZmVyIGZsYWdzPTB4JXhcbiIsCisJCSAgICAgICAgICAgICAgICAgdXJiLT5zdGF0dXMsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOworCQlhY3Rpb24gPSBSRVNVQk1JVDsKKwkJYnJlYWs7CisJfQorCisJdXJiX3N0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJaWYgKGFjdGlvbiAhPSBBQk9SVCkgeworCQkvKiBSZXBvc3QgdGhlIFJYIFVSQiAqLworCQlyZXN1bHQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfQVRPTUlDKTsKKworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJGYXRhbCwgZmFpbGVkIHRvIHJlc3VibWl0IHJ4X3VyYi4gZXJyb3I9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJfQorCX0KKworCS8qIEhhbmRsZSBhbnkgVVNCLUlOIHBhY2tldCAqLworCS8qIE5vdGU6IHRoZSBjaGVjayBvZiB0aGUgc3dfc3VwcG9ydCBmaWVsZCwgdGhlIHR5cGUgZmllbGQgZG9lc24ndAorCSAqICAgICAgIGhhdmUgYml0IDEyIHNldCBsaWtlIHRoZSBkb2NzIHN1Z2dlc3QuCisJICovCisJdHlwZSA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7CisJaWYgKEhGQTM4NHhfVVNCX0lTUlhGUk0odHlwZSkpIHsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpIHsKKwkJCWlmICh1c2Jpbi0+dHhmcm0uZGVzYy5zd19zdXBwb3J0ID09IDB4MDEyMykgeworCQkJCWhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2LCB1c2Jpbik7CisJCQl9IGVsc2UgeworCQkJCXNrYl9wdXQoc2tiLCBzaXplb2YoKnVzYmluKSk7CisJCQkJaGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2LCBza2IpOworCQkJCXNrYiA9IE5VTEw7CisJCQl9CisJCX0KKwkJZ290byBleGl0OworCX0KKwlpZiAoSEZBMzg0eF9VU0JfSVNUWEZSTSh0eXBlKSkgeworCQlpZiAoYWN0aW9uID09IEhBTkRMRSkKKwkJCWhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2LCB1c2Jpbik7CisJCWdvdG8gZXhpdDsKKwl9CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBIRkEzODR4X1VTQl9JTkZPRlJNOgorCQlpZiAoYWN0aW9uID09IEFCT1JUKQorCQkJZ290byBleGl0OworCQlpZiAoYWN0aW9uID09IEhBTkRMRSkKKwkJCWhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2LCB1c2Jpbik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9DTURSRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfV1JJRFJFU1A6CisJY2FzZSBIRkEzODR4X1VTQl9SUklEUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1dNRU1SRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfUk1FTVJFU1A6CisJCS8qIEFMV0FZUywgQUxXQVlTLCBBTFdBWVMgaGFuZGxlIHRoaXMgQ1RMWCEhISEgKi8KKwkJaGZhMzg0eF91c2Jpbl9jdGx4KGh3LCB1c2JpbiwgdXJiX3N0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9CVUZBVkFJTDoKKwkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgQlVGQVZBSUwgcGFja2V0LCBmcm1sZW49JWRcbiIsCisJCQl1c2Jpbi0+YnVmYXZhaWwuZnJtbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfVVNCX0VSUk9SOgorCQlXTEFOX0xPR19ERUJVRygzLCJSZWNlaXZlZCBVU0JfRVJST1IgcGFja2V0LCBlcnJvcnR5cGU9JWRcbiIsCisJCQl1c2Jpbi0+dXNiZXJyb3IuZXJyb3J0eXBlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19ERUJVRygzLCJVbnJlY29nbml6ZWQgVVNCSU4gcGFja2V0LCB0eXBlPSV4LCBzdGF0dXM9JWRcbiIsCisJCQl1c2Jpbi0+dHlwZSwgdXJiX3N0YXR1cyk7CisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCisKK2V4aXQ6CisKKwlpZiAoc2tiKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2N0bHgKKyoKKyogV2UndmUgcmVjZWl2ZWQgYSBVUkIgY29udGFpbmluZyBhIFByaXNtMiAicmVzcG9uc2UiIG1lc3NhZ2UuCisqIFRoaXMgbWVzc2FnZSBuZWVkcyB0byBiZSBtYXRjaGVkIHVwIHdpdGggYSBDVExYIG9uIHRoZSBhY3RpdmUKKyogcXVldWUgYW5kIG91ciBzdGF0ZSB1cGRhdGVkIGFjY29yZGluZ2x5LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlwdHIgdG8gaGZhMzg0eF90CisqCXVzYmluCQlwdHIgdG8gVVNCIElOIHBhY2tldAorKgl1cmJfc3RhdHVzCXN0YXR1cyBvZiB0aGlzIEJ1bGstSW4gVVJCCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKKwkJCSAgICAgICBpbnQgdXJiX3N0YXR1cykKK3sKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwlpbnQJCQlydW5fcXVldWUgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJREJGRU5URVI7CisKK3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lIENUTFggb24gdGhlIGFjdGl2ZSBxdWV1ZQorCSAqIGF0IGFueSBvbmUgdGltZSwgYW5kIHRoaXMgaXMgdGhlIENUTFggdGhhdCB0aGUKKwkgKiB0aW1lcnMgYXJlIHdhaXRpbmcgZm9yLgorCSAqLworCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qIFJlbW92ZSB0aGUgInJlc3BvbnNlIHRpbWVvdXQiLiBJdCdzIHBvc3NpYmxlIHRoYXQKKwkgKiB3ZSBhcmUgYWxyZWFkeSB0b28gbGF0ZSwgYW5kIHRoYXQgdGhlIHRpbWVvdXQgaXMKKwkgKiBhbHJlYWR5IHJ1bm5pbmcuIEFuZCB0aGF0J3MganVzdCB0b28gYmFkIGZvciB1cywKKwkgKiBiZWNhdXNlIHdlIGNvdWxkIGxvc2Ugb3VyIENUTFggZnJvbSB0aGUgYWN0aXZlCisJICogcXVldWUgaGVyZSAuLi4KKwkgKi8KKwlpZiAoZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSA9PSAwKSB7CisJCWlmIChody0+cmVzcF90aW1lcl9kb25lID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCWVsc2UgeworCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwl9CisKKwljdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCWlmICh1cmJfc3RhdHVzICE9IDApIHsKKwkJLyoKKwkJICogQmFkIENUTFgsIHNvIGdldCByaWQgb2YgaXQuIEJ1dCB3ZSBvbmx5CisJCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBhY3RpdmUgcXVldWUgaWYgd2UncmUgbm8KKwkJICogbG9uZ2VyIGV4cGVjdGluZyB0aGUgT1VUIFVSQiB0byBjb21wbGV0ZS4KKwkJICovCisJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKKwkJCXJ1bl9xdWV1ZSA9IDE7CisJfSBlbHNlIHsKKwkJY29uc3QgVUlOVDE2IGludHlwZSA9ICh1c2Jpbi0+dHlwZSZ+aG9zdDJoZmEzODR4XzE2KDB4ODAwMCkpOworCisJCS8qCisJCSAqIENoZWNrIHRoYXQgb3VyIG1lc3NhZ2UgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgLi4uCisJCSAqLworCQlpZiAoY3RseC0+b3V0YnVmLnR5cGUgIT0gaW50eXBlKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaW50eXBlKSk7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCS8qIFRoaXMgVVJCIGhhcyBzdWNjZWVkZWQsIHNvIGdyYWIgdGhlIGRhdGEgLi4uICovCisJCW1lbWNweSgmY3RseC0+aW5idWYsIHVzYmluLCBzaXplb2YoY3RseC0+aW5idWYpKTsKKworCQlzd2l0Y2ggKGN0bHgtPnN0YXRlKSB7CisJCWNhc2UgQ1RMWF9SRVFfU1VCTUlUVEVEOgorCQkJLyoKKwkJCSAqIFdlIGhhdmUgcmVjZWl2ZWQgb3VyIHJlc3BvbnNlIFVSQiBiZWZvcmUKKwkJCSAqIG91ciByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZC4gT2RkLAorCQkJICogYnV0IG91ciBPVVQgVVJCIGlzIHN0aWxsIGFsaXZlLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDAsICJDYXVzYWxpdHkgdmlvbGF0aW9uOiBwbGVhc2UgcmVib290IFVuaXZlcnNlLCBvciBlbWFpbCBsaW51eC13bGFuLWRldmVsQGxpc3RzLmxpbnV4LXdsYW4uY29tXG4iKTsKKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVNQX0NPTVBMRVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVExYX1JFUV9DT01QTEVURToKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSB1c3VhbCBwYXRoOiBvdXIgcmVxdWVzdAorCQkJICogaGFzIGFscmVhZHkgYmVlbiBhY2tub3dsZWRnZWQsIGFuZAorCQkJICogbm93IHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHJlcGx5IHRvby4KKwkJCSAqLworCQkJY3RseC0+c3RhdGUgPSBDVExYX0NPTVBMRVRFOworCQkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgY3RseCk7CisJCQlydW5fcXVldWUgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBUaHJvdyB0aGlzIENUTFggYXdheSAuLi4KKwkJCSAqLworCQkJV0xBTl9MT0dfRVJST1IoIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4iCisJCQkgICAgICAgICAgICAgICAiIERpc2NhcmRlZC5cbiIsCisJCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJaWYgKHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwKQorCQkJCXJ1bl9xdWV1ZSA9IDE7CisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8KKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKHJ1bl9xdWV1ZSkKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl90eGNvbXBsCisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgcmVzdWx0cyBvZiBhIHByZXZpb3VzIHRyYW5zbWl0LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYmluCQlwdHIgdG8gdGhlIHVzYiB0cmFuc2ZlciBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCit7CisJVUlOVDE2CQkJc3RhdHVzOworCURCRkVOVEVSOworCisJc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT50eXBlKTsgLyogeWVhaCBJIGtub3cgaXQgc2F5cyB0eXBlLi4uKi8KKworCS8qIFdhcyB0aGVyZSBhbiBlcnJvcj8gKi8KKwlpZiAoSEZBMzg0eF9UWFNUQVRVU19JU0VSUk9SKHN0YXR1cykpIHsKKwkJcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXYsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJcHJpc20yc3RhX2V2X3R4KHdsYW5kZXYsIHN0YXR1cyk7CisJfQorCS8vIHByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fcngKKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgc3VjY2Vzc2Z1bCByZWNlaXZlZCBhIHJ4IGZyYW1lIHBhY2tldC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwloZmEzODR4X3VzYmluX3QgICAgICAgICAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHNrYi0+ZGF0YTsKKwloZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCAgICAgICAgICAgICAgICAgICAgIGhkcmxlbjsKKwlwODAyMTFfcnhtZXRhX3QgICAgICAgICAqcnhtZXRhOworCVVJTlQxNiAgICAgICAgICAgICAgICAgIGRhdGFfbGVuOworCVVJTlQxNiAgICAgICAgICAgICAgICAgIGZjOworCisJREJGRU5URVI7CisKKwkvKiBCeXRlIG9yZGVyIGNvbnZlcnQgb25jZSB1cCBmcm9udC4gKi8KKwl1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMgPQorCQloZmEzODR4Mmhvc3RfMTYodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKTsKKwl1c2Jpbi0+cnhmcm0uZGVzYy50aW1lID0KKwkJaGZhMzg0eDJob3N0XzMyKHVzYmluLT5yeGZybS5kZXNjLnRpbWUpOworCisJLyogTm93IGhhbmRsZSBmcmFtZSBiYXNlZCBvbiBwb3J0IyAqLworCXN3aXRjaCggSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICkKKwl7CisJY2FzZSAwOgorCQlmYyA9IGllZWUyaG9zdDE2KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOworCisJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KKwkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgorCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpeworCQkJZ290byBkb25lOworCQl9CisKKwkJZGF0YV9sZW4gPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPnJ4ZnJtLmRlc2MuZGF0YV9sZW4pOworCisJCS8qIEhvdyBtdWNoIGhlYWRlciBkYXRhIGRvIHdlIGhhdmU/ICovCisJCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOworCisJCS8qIFB1bGwgb2ZmIHRoZSBkZXNjcmlwdG9yICovCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKGhmYTM4NHhfcnhfZnJhbWVfdCkpOworCisJCS8qIE5vdyBzaHVudCB0aGUgaGVhZGVyIGJsb2NrIHVwIGFnYWluc3QgdGhlIGRhdGEgYmxvY2sKKwkJICogd2l0aCBhbiAib3ZlcmxhcHBpbmciIGNvcHkKKwkJICovCisJCW1lbW1vdmUoc2tiX3B1c2goc2tiLCBoZHJsZW4pLAorCQkgICAgICAgICZ1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sLAorCQkgICAgICAgIGhkcmxlbik7CisKKwkJc2tiLT5kZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkvKiBBbmQgc2V0IHRoZSBmcmFtZSBsZW5ndGggcHJvcGVybHkgKi8KKwkJc2tiX3RyaW0oc2tiLCBkYXRhX2xlbiArIGhkcmxlbik7CisKKwkJLyogVGhlIHByaXNtMiBzZXJpZXMgZG9lcyBub3QgcmV0dXJuIHRoZSBDUkMgKi8KKwkJbWVtc2V0KHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyogQXR0YWNoIHRoZSByeG1ldGEsIHNldCBzb21lIHN0dWZmICovCisJCXA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHdsYW5kZXYsIHNrYik7CisJCXJ4bWV0YSA9IFA4MDIxMVNLQl9SWE1FVEEoc2tiKTsKKwkJcnhtZXRhLT5tYWN0aW1lID0gdXNiaW4tPnJ4ZnJtLmRlc2MudGltZTsKKwkJcnhtZXRhLT5yeHJhdGUgPSB1c2Jpbi0+cnhmcm0uZGVzYy5yYXRlOworCQlyeG1ldGEtPnNpZ25hbCA9IHVzYmluLT5yeGZybS5kZXNjLnNpZ25hbCAtIGh3LT5kYm1hZGp1c3Q7CisJCXJ4bWV0YS0+bm9pc2UgPSB1c2Jpbi0+cnhmcm0uZGVzYy5zaWxlbmNlIC0gaHctPmRibWFkanVzdDsKKworCQlwcmlzbTJzdGFfZXZfcngod2xhbmRldiwgc2tiKTsKKworCQlicmVhazsKKworCWNhc2UgNzoKKwkJaWYgKCAhIEhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApIHsKKwkJCS8qIENvcHkgdG8gd2xhbnNuaWYgc2tiICovCisJCQloZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXYsICZ1c2Jpbi0+cnhmcm0pOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgbW9uaXRvciBmcmFtZTogRkNTZXJyIHNldFxuIik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19XQVJOSU5HKCJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICk7CisJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfcnhtb25pdG9yCisqCisqIEhlbHBlciBmdW5jdGlvbiBmb3IgaW50X3J4LiAgSGFuZGxlcyBtb25pdG9yIGZyYW1lcy4KKyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHNwYWNlIGZvciB0aGUgRkNTIGFuZCBzZXRzIGl0CisqIHRvIDB4ZmZmZmZmZmYuICBUaGUgaGZhMzg0eCBkb2Vzbid0IGdpdmUgdXMgdGhlIEZDUyB2YWx1ZSBidXQgdGhlCisqIGhpZ2hlciBsYXllcnMgZXhwZWN0IGl0LiAgMHhmZmZmZmZmZiBpcyB1c2VkIGFzIGEgZmxhZyB0byBpbmRpY2F0ZQorKiB0aGUgRkNTIGlzIGJvZ3VzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglyeGZybQkJcnggZGVzY3JpcHRvciByZWFkIGZyb20gY2FyZCBpbiBpbnRfcngKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUFsbG9jYXRlcyBhbiBza2IgYW5kIHBhc3NlcyBpdCB1cCB2aWEgdGhlIFBGX1BBQ0tFVCBpbnRlcmZhY2UuCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSkKK3sKKwloZmEzODR4X3J4X2ZyYW1lX3QgICAgICAgICAgICAgICpyeGRlc2MgPSAmKHJ4ZnJtLT5kZXNjKTsKKwlVSU5UCQkJCWhkcmxlbiA9IDA7CisJVUlOVAkJCQlkYXRhbGVuID0gMDsKKwlVSU5UCQkJCXNrYmxlbiA9IDA7CisJcDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90CSptc2c7CisJVUlOVDgJCQkJKmRhdGFwOworCVVJTlQxNgkJCQlmYzsKKwlzdHJ1Y3Qgc2tfYnVmZgkJCSpza2I7CisJaGZhMzg0eF90CQkgICAgICAgICpodyA9IHdsYW5kZXYtPnByaXY7CisKKworCURCRkVOVEVSOworCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCisJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLworCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKwlkYXRhbGVuID0gaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy0+ZGF0YV9sZW4pOworCisJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLworCXNrYmxlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKCBza2JsZW4gPgorCQkoc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkgKworCQlXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JXpkXG4iLAorCQkJc2tibGVuIC0gc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkpOworCX0KKworCWlmICggKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoImFsbG9jX3NrYiBmYWlsZWQgdHJ5aW5nIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLCBza2JsZW4pOworCQlyZXR1cm47CisJfQorCisJLyogb25seSBwcmVwZW5kIHRoZSBwcmlzbSBoZWFkZXIgaWYgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwlpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCSAgICAoaHctPnNuaWZmaGRyID09IDApKSB7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwkJbXNnID0gKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCopIGRhdGFwOworCisJCS8qIEluaXRpYWxpemUgdGhlIG1lc3NhZ2UgbWVtYmVycyAqLworCQltc2ctPm1zZ2NvZGUgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtOworCQltc2ctPm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpOworCQlzdHJjcHkobXNnLT5kZXZuYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCQltc2ctPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7CisJCW1zZy0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5ob3N0dGltZS5sZW4gPSA0OworCQltc2ctPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJCW1zZy0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJCW1zZy0+bWFjdGltZS5zdGF0dXMgPSAwOworCQltc2ctPm1hY3RpbWUubGVuID0gNDsKKwkJbXNnLT5tYWN0aW1lLmRhdGEgPSByeGRlc2MtPnRpbWU7CisKKwkJbXNnLT5jaGFubmVsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fY2hhbm5lbDsKKwkJbXNnLT5jaGFubmVsLnN0YXR1cyA9IDA7CisJCW1zZy0+Y2hhbm5lbC5sZW4gPSA0OworCQltc2ctPmNoYW5uZWwuZGF0YSA9IGh3LT5zbmlmZl9jaGFubmVsOworCisJCW1zZy0+cnNzaS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2k7CisJCW1zZy0+cnNzaS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnJzc2kubGVuID0gNDsKKwkJbXNnLT5yc3NpLmRhdGEgPSAwOworCisJCW1zZy0+c3EuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zcTsKKwkJbXNnLT5zcS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnNxLmxlbiA9IDQ7CisJCW1zZy0+c3EuZGF0YSA9IDA7CisKKwkJbXNnLT5zaWduYWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWw7CisJCW1zZy0+c2lnbmFsLnN0YXR1cyA9IDA7CisJCW1zZy0+c2lnbmFsLmxlbiA9IDQ7CisJCW1zZy0+c2lnbmFsLmRhdGEgPSByeGRlc2MtPnNpZ25hbDsKKworCQltc2ctPm5vaXNlLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fbm9pc2U7CisJCW1zZy0+bm9pc2Uuc3RhdHVzID0gMDsKKwkJbXNnLT5ub2lzZS5sZW4gPSA0OworCQltc2ctPm5vaXNlLmRhdGEgPSByeGRlc2MtPnNpbGVuY2U7CisKKwkJbXNnLT5yYXRlLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZTsKKwkJbXNnLT5yYXRlLnN0YXR1cyA9IDA7CisJCW1zZy0+cmF0ZS5sZW4gPSA0OworCQltc2ctPnJhdGUuZGF0YSA9IHJ4ZGVzYy0+cmF0ZSAvIDU7IC8qIHNldCB0byA4MDIuMTEgdW5pdHMgKi8KKworCQltc2ctPmlzdHguZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4OworCQltc2ctPmlzdHguc3RhdHVzID0gMDsKKwkJbXNnLT5pc3R4LmxlbiA9IDQ7CisJCW1zZy0+aXN0eC5kYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKworCQltc2ctPmZybWxlbi5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2ZybWxlbjsKKwkJbXNnLT5mcm1sZW4uc3RhdHVzID0gMDsKKwkJbXNnLT5mcm1sZW4ubGVuID0gNDsKKwkJbXNnLT5mcm1sZW4uZGF0YSA9IGhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CisJfSBlbHNlIGlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCisJCSAgIChody0+c25pZmZoZHIgIT0gMCkpIHsKKwkJcDgwMjExX2NhcGhkcl90CQkqY2FwaGRyOworCQkvKiBUaGUgTkVXIGhlYWRlciBmb3JtYXQhICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyID0gKHA4MDIxMV9jYXBoZHJfdCopIGRhdGFwOworCisJCWNhcGhkci0+dmVyc2lvbiA9CWh0b25sKFA4MDIxMUNBUFRVUkVfVkVSU0lPTik7CisJCWNhcGhkci0+bGVuZ3RoID0JaHRvbmwoc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOworCQljYXBoZHItPm1hY3RpbWUgPQlfX2NwdV90b19iZTY0KHJ4ZGVzYy0+dGltZSkgKiAxMDAwOworCQljYXBoZHItPmhvc3R0aW1lID0JX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0JaHRvbmwoNCk7IC8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9CWh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9CWh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0JaHRvbmwoMyk7IC8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9CWh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPQlodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9CWh0b25sKDEpOyAvKiBjY2sgKi8KKwl9CisKKwkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKGN0bCBmcmFtZXMgbWF5IGJlIGxlc3MgdGhhbiBhIGZ1bGwgaGVhZGVyKSAqLworCWRhdGFwID0gc2tiX3B1dChza2IsIGhkcmxlbik7CisJbWVtY3B5KCBkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOworCisJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLworCWlmICggZGF0YWxlbiA+IDAgKQorCXsKKwkJZGF0YXAgPSBza2JfcHV0KHNrYiwgZGF0YWxlbik7CisJCW1lbWNweShkYXRhcCwgcnhmcm0tPmRhdGEsIGRhdGFsZW4pOworCisJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KKwkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApIC8vIHdlcCBzZXQKKwkJICBpZiAoKCooZGF0YXApID09IDB4YWEpICYmICgqKGRhdGFwKzEpID09IDB4YWEpKQorCQkgICAgKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7IC8vIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyIQorCX0KKworCWlmIChody0+c25pZmZfZmNzKSB7CisJCS8qIFNldCB0aGUgRkNTICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fQ1JDX0xFTik7CisJCW1lbXNldCggZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CisJfQorCisJLyogcGFzcyBpdCBiYWNrIHVwICovCisJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2luZm8KKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgc3VjY2Vzc2Z1bCByZWNlaXZlZCBhIFByaXNtMiBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYmluCQlwdHIgdG8gdGhlIHVzYiB0cmFuc2ZlciBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCit7CisJREJGRU5URVI7CisKKwl1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4pOworCXByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXYsICZ1c2Jpbi0+aW5mb2ZybS5pbmZvKTsKKworCURCRkVYSVQ7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JvdXRfY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIFVSQnMgb24gdGhlIEJVTEtPVVQgZW5kcG9pbnQuCisqCisqIEFyZ3VtZW50czoKKyoJdXJiCQlwdHIgdG8gdGhlIGNvbXBsZXRlZCB1cmIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBVUkJfT05MWV9DQUxMQkFDSworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdXNib3V0X3QJKnVzYm91dCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCURCRkVOVEVSOworCisjaWZkZWYgREVCVUdfVVNCCisJZGJwcmludF91cmIodXJiKTsKKyNlbmRpZgorCisJaWYgKCB3bGFuZGV2ICYmCisJICAgICB3bGFuZGV2LT5uZXRkZXYgKSB7CisKKwkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCWhmYTM4NHhfdXNib3V0X3R4KHdsYW5kZXYsIHVzYm91dCk7CisJCQlicmVhazsKKworCQljYXNlIC1FUElQRToKKwkJeworCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSAtRVBST1RPOgorCQljYXNlIC1FVElNRURPVVQ6CisJCWNhc2UgLUVJTFNFUToKKwkJeworCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisKKwkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKQorCQkJICAgICAmJiAhdGltZXJfcGVuZGluZygmaHctPnRocm90dGxlKSApIHsKKwkJCQltb2RfdGltZXIoJmh3LT50aHJvdHRsZSwKKwkJCQkgICAgICAgICAgamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOworCQkJfQorCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FU0hVVERPV046CisJCQkvKiBJZ25vcmFibGUgZXJyb3JzICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJV0xBTl9MT0dfSU5GTygidW5rbm93biB1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCWJyZWFrOworCQl9IC8qIHN3aXRjaCAqLworCX0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaworKgorKiBDYWxsYmFjayBmb3IgY29udHJvbCBkYXRhIG9uIHRoZSBCVUxLT1VUIGVuZHBvaW50LgorKgorKiBBcmd1bWVudHM6CisqCXVyYgkJcHRyIHRvIHRoZSBjb21wbGV0ZWQgdXJiCisqCisqIFJldHVybnM6CisqIG5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqIGludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCisjZWxzZQorc3RhdGljIHZvaWQgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwloZmEzODR4X3QJKmh3ID0gdXJiLT5jb250ZXh0OworCWludCAgICAgICAgICAgICBkZWxldGVfcmVzcHRpbWVyID0gMDsKKwlpbnQgICAgICAgICAgICAgdGltZXJfb2sgPSAxOworCWludAkJcnVuX3F1ZXVlID0gMDsKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworI2lmZGVmIERFQlVHX1VTQgorCWRicHJpbnRfdXJiKHVyYik7CisjZW5kaWYKKwlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB8fAorCSAgICAgKHVyYi0+c3RhdHVzID09IC1FTk9ERVYpIHx8CisJICAgICAoaHcgPT0gTlVMTCkgKQorCQlnb3RvIGRvbmU7CisKK3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBPbmx5IG9uZSBDVExYIGF0IGEgdGltZSBvbiB0aGUgImFjdGl2ZSIgbGlzdCwgYW5kCisJICogbm9uZSBhdCBhbGwgaWYgd2UgYXJlIHVucGx1Z2dlZC4gSG93ZXZlciwgd2UgY2FuCisJICogcmVseSBvbiB0aGUgZGlzY29ubmVjdCBmdW5jdGlvbiB0byBjbGVhbiBldmVyeXRoaW5nCisJICogdXAgaWYgc29tZW9uZSB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCisJICovCisJaWYgKCBsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogSGF2aW5nIHNvbWV0aGluZyBvbiB0aGUgImFjdGl2ZSIgcXVldWUgbWVhbnMKKwkgKiB0aGF0IHdlIGhhdmUgdGltZXJzIHRvIHdvcnJ5IGFib3V0IC4uLgorCSAqLworCWlmIChkZWxfdGltZXIoJmh3LT5yZXF0aW1lcikgPT0gMCkgeworCQlpZiAoaHctPnJlcV90aW1lcl9kb25lID09IDApIHsKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWVyIHdhcyBhY3R1YWxseSBydW5uaW5nIHdoaWxlIHdlCisJCQkgKiB3ZXJlIHRyeWluZyB0byBkZWxldGUgaXQuIExldCBpdCB0ZXJtaW5hdGUKKwkJCSAqIGdyYWNlZnVsbHkgaW5zdGVhZC4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisJZWxzZSB7CisJCWh3LT5yZXFfdGltZXJfZG9uZSA9IDE7CisJfQorCisJY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwlpZiAoIHVyYi0+c3RhdHVzID09IDAgKSB7CisJCS8qIFJlcXVlc3QgcG9ydGlvbiBvZiBhIENUTFggaXMgc3VjY2Vzc2Z1bCAqLworCQlzd2l0Y2ggKCBjdGx4LT5zdGF0ZSApIHsKKwkJY2FzZSBDVExYX1JFUV9TVUJNSVRURUQ6CisJCQkvKiBUaGlzIE9VVC1BQ0sgcmVjZWl2ZWQgYmVmb3JlIElOICovCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0NPTVBMRVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVExYX1JFU1BfQ09NUExFVEU6CisJCQkvKiBJTiBhbHJlYWR5IHJlY2VpdmVkIGJlZm9yZSB0aGlzIE9VVC1BQ0ssCisJCQkgKiBzbyB0aGlzIGNvbW1hbmQgbXVzdCBub3cgYmUgY29tcGxldGUuCisJCQkgKi8KKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9DT01QTEVURTsKKwkJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQkJcnVuX3F1ZXVlID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBUaGlzIGlzIE5PVCBhIHZhbGlkIENUTFggInN1Y2Nlc3MiIHN0YXRlISAqLworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCisJCQkgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoICovCisJfSBlbHNlIHsKKwkJLyogSWYgdGhlIHBpcGUgaGFzIHN0YWxsZWQgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0ICovCisJCWlmICggKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKKwkJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJfQorCisJCS8qIElmIHNvbWVvbmUgY2FuY2VscyB0aGUgT1VUIFVSQiB0aGVuIGl0cyBzdGF0dXMKKwkJICogc2hvdWxkIGJlIGVpdGhlciAtRUNPTk5SRVNFVCBvciAtRU5PRU5ULgorCQkgKi8KKwkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQlkZWxldGVfcmVzcHRpbWVyID0gMTsKKwkJcnVuX3F1ZXVlID0gMTsKKwl9CisKKyBkZWxyZXNwOgorCWlmIChkZWxldGVfcmVzcHRpbWVyKSB7CisJCWlmICgodGltZXJfb2sgPSBkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpKSAhPSAwKSB7CisJCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlpZiAoICF0aW1lcl9vayAmJiAoaHctPnJlc3BfdGltZXJfZG9uZSA9PSAwKSApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCWdvdG8gZGVscmVzcDsKKwl9CisKKwlpZiAocnVuX3F1ZXVlKQorCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuCisqCisqIFRpbWVyIHJlc3BvbnNlIGZ1bmN0aW9uIGZvciBDVExYIHJlcXVlc3QgdGltZW91dHMuICBJZiB0aGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBPVVQKKyogVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIueCBYWFhfUmVxdWVzdCB3YXMgbmV2ZXIgY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJCWEgcHRyIHRvIHRoZSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCisJLyogUmVtb3ZpbmcgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgZW1wdGllcworCSAqIHRoZSBhY3RpdmUgbGlzdCAuLi4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCisJeworCQkvKgorCQkgKiBXZSBtdXN0IGVuc3VyZSB0aGF0IG91ciBVUkIgaXMgcmVtb3ZlZCBmcm9tCisJCSAqIHRoZSBzeXN0ZW0sIGlmIGl0IGhhc24ndCBhbHJlYWR5IGV4cGlyZWQuCisJCSAqLworCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwkJaWYgKHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpID09IC1FSU5QUk9HUkVTUykKKwkJeworCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOworCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKKworCQkJLyogVGhpcyBVUkIgd2FzIGFjdGl2ZSwgYnV0IGhhcyBub3cgYmVlbgorCQkJICogY2FuY2VsbGVkLiBJdCB3aWxsIG5vdyBoYXZlIGEgc3RhdHVzIG9mCisJCQkgKiAtRUNPTk5SRVNFVCBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisJCQkgKgorCQkJICogV2UgYXJlIGNhbmNlbGxpbmcgdGhpcyBDVExYLCBzbyB3ZSdyZQorCQkJICogbm90IGdvaW5nIHRvIG5lZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZS4KKwkJCSAqIFRoZSBVUkIncyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGNoZWNrCisJCQkgKiB0aGF0IHRoaXMgdGltZXIgaXMgdHJ1bHkgZGVhZC4KKwkJCSAqLworCQkJaWYgKGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikgIT0gMCkKKwkJCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4KKyoKKyogVGltZXIgcmVzcG9uc2UgZnVuY3Rpb24gZm9yIENUTFggcmVzcG9uc2UgdGltZW91dHMuICBJZiB0aGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBJTgorKiBVUkIgY29udGFpbmluZyBhIFByaXNtMi54IFhYWF9SZXNwb25zZSB3YXMgbmV2ZXIgY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJCWEgcHRyIHRvIHRoZSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKworCS8qIFRoZSBhY3RpdmUgbGlzdCB3aWxsIGJlIGVtcHR5IGlmIHRoZQorCSAqIGFkYXB0ZXIgaGFzIGJlZW4gdW5wbHVnZ2VkIC4uLgorCSAqLworCWlmICggIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkKKwl7CisJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCQlpZiAoIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwICkKKwkJeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYl90aHJvdHRsZWZuCisqCisqCisqIEFyZ3VtZW50czoKKyoJZGF0YQlwdHIgdG8gaHcKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNoZWNrIEJPVEggdGhlIFJYIGFuZCB0aGUgVFggdGhyb3R0bGUgY29udHJvbHMsCisJICogc28gd2UgdXNlIHRoZSBiaXR3aXNlIE9SIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgT1IuCisJICovCisJV0xBTl9MT0dfREVCVUcoMywgImZsYWdzPTB4JWx4XG4iLCBody0+dXNiX2ZsYWdzKTsKKwlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICAoCisJICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCSAgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQorCSAgICAgICB8CisJICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKSAmJgorCSAgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgICkgKQorCXsKKwkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3N1Ym1pdAorKgorKiBDYWxsZWQgZnJvbSB0aGUgZG94eHggZnVuY3Rpb25zIHRvIHN1Ym1pdCBhIENUTFggdG8gdGhlIHF1ZXVlCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCXB0ciB0byB0aGUgaHcgc3RydWN0CisqCWN0bHgJCWN0bHggc3RydWN0dXJlIHRvIGVucXVldWUKKyoKKyogUmV0dXJuczoKKyoJLUVOT0RFViBpZiB0aGUgYWRhcHRlciBpcyB1bnBsdWdnZWQKKyoJMAorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyBvciBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF91c2JjdGx4X3N1Ym1pdCgKKwloZmEzODR4X3QJCSpodywKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwl9IGVsc2UgeworCQljdGx4LT5zdGF0ZSA9IENUTFhfUEVORElORzsKKwkJbGlzdF9hZGRfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCXJldCA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYm91dF90eAorKgorKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZmluaXNoZWQgYSBzZW5kIG9mIGEgZnJhbWUuICBNYXJrIHRoZSBVUkIKKyogYXMgYXZhaWxhYmxlIGFuZCBjYWxsIGV2X2FsbG9jIHRvIG5vdGlmeSBoaWdoZXIgbGF5ZXJzIHdlJ3JlCisqIHJlYWR5IGZvciBtb3JlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYm91dAkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCkKK3sKKwlEQkZFTlRFUjsKKworCXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2lzZ29vZF9wZHJjb3JlCisqCisqIFF1aWNrIGNoZWNrIG9mIFBEUiBjb2Rlcy4KKyoKKyogQXJndW1lbnRzOgorKglwZHJjb2RlCQlQRFIgY29kZSBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCXplcm8JCW5vdCBnb29kLgorKglvbmUJCWlzIGdvb2QuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2lzZ29vZF9wZHJjb2RlKFVJTlQxNiBwZHJjb2RlKQoreworCXN3aXRjaChwZHJjb2RlKSB7CisJY2FzZSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBOgorCWNhc2UgSEZBMzg0eF9QRFJfUENCX1BBUlROVU06CisJY2FzZSBIRkEzODR4X1BEUl9QREFWRVI6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNfU0VSSUFMOgorCWNhc2UgSEZBMzg0eF9QRFJfTUtLX01FQVNVUkVNRU5UUzoKKwljYXNlIEhGQTM4NHhfUERSX05JQ19SQU1TSVpFOgorCWNhc2UgSEZBMzg0eF9QRFJfTUZJU1VQUkFOR0U6CisJY2FzZSBIRkEzODR4X1BEUl9DRklTVVBSQU5HRToKKwljYXNlIEhGQTM4NHhfUERSX05JQ0lEOgorCWNhc2UgSEZBMzg0eF9QRFJfTUFDX0FERFJFU1M6CisJY2FzZSBIRkEzODR4X1BEUl9SRUdET01BSU46CisJY2FzZSBIRkEzODR4X1BEUl9BTExPV0VEX0NIQU5ORUw6CisJY2FzZSBIRkEzODR4X1BEUl9ERUZBVUxUX0NIQU5ORUw6CisJY2FzZSBIRkEzODR4X1BEUl9URU1QVFlQRToKKwljYXNlIEhGQTM4NHhfUERSX0lGUl9TRVRUSU5HOgorCWNhc2UgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkc6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0JBU0VMSU5FOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9TSEFET1c6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0lGUkY6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0NIQ0FMU1A6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0NIQ0FMSToKKwljYXNlIEhGQTM4NHhfUERSXzM4NDJfTklDX0NPTkZJRzoKKwljYXNlIEhGQTM4NHhfUERSX1VTQl9JRDoKKwljYXNlIEhGQTM4NHhfUERSX1BDSV9JRDoKKwljYXNlIEhGQTM4NHhfUERSX1BDSV9JRkNPTkY6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfUE1DT05GOgorCWNhc2UgSEZBMzg0eF9QRFJfUkZFTlJHWToKKwljYXNlIEhGQTM4NHhfUERSX0hGQTM4NjFfTUFORl9URVNUU1A6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVEk6CisJCS8qIGNvZGUgaXMgT0sgKi8KKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICggcGRyY29kZSA8IDB4MTAwMCApIHsKKwkJCS8qIGNvZGUgaXMgT0ssIGJ1dCB3ZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBpcyAqLworCQkJV0xBTl9MT0dfREVCVUcoMywKKwkJCQkiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgorCQkJCSJhc3N1bWluZyBpdCdzIG9rLlxuIiwKKwkJCQlwZHJjb2RlKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogYmFkIGNvZGUgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCQkiKD49MHgxMDAwKSwgYXNzdW1pbmcgaXQncyBiYWQuXG4iLAorCQkJCXBkcmNvZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOyAvKiBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxMjFiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwpAQCAtMCwwICsxLDY4MyBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFjb252LmMKKyoKKyogRXRoZXIvODAyLjExIGNvbnZlcnNpb25zIGFuZCBwYWNrZXQgYnVmZmVyIHJvdXRpbmVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIEV0aGVybmV0IHRvL2Zyb20KKyogODAyLjExIGZyYW1lIGNvbnZlcnNpb25zLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworI2RlZmluZSBfX05PX1ZFUlNJT05fXwkJLyogcHJldmVudCB0aGUgc3RhdGljIGRlZmluaXRpb24gKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgVUlOVDgJb3VpX3JmYzEwNDJbXSA9IHsweDAwLCAweDAwLCAweDAwfTsKK3N0YXRpYyBVSU5UOAlvdWlfODAyMWhbXSA9IHsweDAwLCAweDAwLCAweGY4fTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcGJfZXRoZXJfdG9fODAyMTEKKyoKKyogVXNlcyB0aGUgY29udGVudHMgb2YgdGhlIGV0aGVyIGZyYW1lIGFuZCB0aGUgZXRoZXJjb252IHNldHRpbmcKKyogdG8gYnVpbGQgdGhlIGVsZW1lbnRzIG9mIHRoZSA4MDIuMTEgZnJhbWUuCisqCisqIFdlIGRvbid0IGFjdHVhbGx5IHNldAorKiB1cCB0aGUgZnJhbWUgaGVhZGVyIGhlcmUuICBUaGF0J3MgdGhlIE1BQydzIGpvYi4gIFdlJ3JlIG9ubHkgaGFuZGxpbmcKKyogY29udmVyc2lvbiBvZiBESVhJSSBvciA4MDIuMytMTEMgZnJhbWVzIHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzCisqIHdpdGggODAyLjExLgorKgorKiBOb3RlIC0tIDgwMi4xMSBoZWFkZXIgaXMgTk9UIHBhcnQgb2YgdGhlIHNrYi4gIExpa2V3aXNlLCB0aGUgODAyLjExCisqICAgICAgICAgRkNTIGlzIGFsc28gbm90IHByZXNlbnQgYW5kIHdpbGwgbmVlZCB0byBiZSBhZGRlZCBlbHNld2hlcmUuCisqCisqIEFyZ3VtZW50czoKKyoJZXRoY29udgkJQ29udmVyc2lvbiB0eXBlIHRvIHBlcmZvcm0KKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyB0aGUgZXRoZXIgZnJhbWUKKyogICAgICAgcDgwMjExX2hkciAgICAgIDgwMi4xMSBoZWFkZXIKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK3sKKworCVVJTlQxNiAgICAgICAgICBmYzsKKwlVSU5UMTYgICAgICAgICAgcHJvdG87CisJd2xhbl9ldGhoZHJfdCAgIGVfaGRyOworCXdsYW5fbGxjX3QgICAgICAqZV9sbGM7CisJd2xhbl9zbmFwX3QgICAgICplX3NuYXA7CisJaW50IGZvbzsKKworCURCRkVOVEVSOworCW1lbWNweSgmZV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKGVfaGRyKSk7CisKKwlpZiAoc2tiLT5sZW4gPD0gMCkgeworCQlXTEFOX0xPR19ERUJVRygxLCAiemVyby1sZW5ndGggc2tiIVxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmICggZXRoY29udiA9PSBXTEFOX0VUSENPTlZfRU5DQVAgKSB7IC8qIHNpbXBsZXN0IGNhc2UgKi8KKwkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJFTkNBUCBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCS8qIGhlcmUsIHdlIGRvbid0IGNhcmUgd2hhdCBraW5kIG9mIGV0aGVyIGZybS4gSnVzdCBzdGljayBpdCAqLworCQkvKiAgaW4gdGhlIDgwMjExIHBheWxvYWQgKi8KKwkJLyogd2hpY2ggaXMgdG8gc2F5LCBsZWF2ZSB0aGUgc2tiIGFsb25lLiAqLworCX0gZWxzZSB7CisJCS8qIHN0ZXAgMTogY2xhc3NpZnkgZXRoZXIgZnJhbWUsIERJWCBvciA4MDIuMz8gKi8KKwkJcHJvdG8gPSBudG9ocyhlX2hkci50eXBlKTsKKwkJaWYgKCBwcm90byA8PSAxNTAwICkgeworCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBsZW46ICVkXG4iLCBza2ItPmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlcyA8PSAxNTAwIHJlc2VydmVkIGZvciA4MDIuMyBsZW5ndGhzICovCisJCQkvKiBpdCdzIDgwMi4zLCBwYXNzIGV0aGVyIHBheWxvYWQgdW5jaGFuZ2VkLCAgKi8KKworCQkJLyogdHJpbSBvZmYgZXRoZXJuZXQgaGVhZGVyICovCisJCQlza2JfcHVsbChza2IsIFdMQU5fRVRISERSX0xFTik7CisKKwkJCS8qICAgbGVhdmUgb2ZmIGFueSBQQUQgb2N0ZXRzLiAgKi8KKwkJCXNrYl90cmltKHNrYiwgcHJvdG8pOworCQl9IGVsc2UgeworCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJESVhJSSBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCQkvKiBpdCdzIERJWElJLCB0aW1lIGZvciBzb21lIGNvbnZlcnNpb24gKi8KKworCQkJLyogdHJpbSBvZmYgZXRoZXJuZXQgaGVhZGVyICovCisJCQlza2JfcHVsbChza2IsIFdMQU5fRVRISERSX0xFTik7CisKKwkJCS8qIHRhY2sgb24gU05BUCAqLworCQkJZV9zbmFwID0gKHdsYW5fc25hcF90ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fc25hcF90KSk7CisJCQllX3NuYXAtPnR5cGUgPSBodG9ucyhwcm90byk7CisJCQlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoICYmIHA4MDIxMV9zdHRfZmluZHByb3RvKHByb3RvKSApIHsKKwkJCQltZW1jcHkoIGVfc25hcC0+b3VpLCBvdWlfODAyMWgsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCX0KKworCQkJLyogdGFjayBvbiBsbGMgKi8KKwkJCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCQkJZV9sbGMtPmRzYXAgPSAweEFBOwkvKiBTTkFQLCBzZWUgSUVFRSA4MDIgKi8KKwkJCWVfbGxjLT5zc2FwID0gMHhBQTsKKwkJCWVfbGxjLT5jdGwgPSAweDAzOworCisJCX0KKwl9CisKKwkvKiBTZXQgdXAgdGhlIDgwMi4xMSBoZWFkZXIgKi8KKwkvKiBJdCdzIGEgZGF0YSBmcmFtZSAqLworCWZjID0gaG9zdDJpZWVlMTYoIFdMQU5fU0VUX0ZDX0ZUWVBFKFdMQU5fRlRZUEVfREFUQSkgfAorCQkJICBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfREFUQU9OTFkpKTsKKworCXN3aXRjaCAoIHdsYW5kZXYtPm1hY21vZGUgKSB7CisJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCWJyZWFrOworCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CisJCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX1RPRFMoMSkpOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIFdMQU5fQUREUl9MRU4pOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfQVA6CisJCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX0ZST01EUygxKSk7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLnNhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfRVJST1IoIkVycm9yOiBDb252ZXJ0aW5nIGV0aCB0byB3bGFuIGluIHVua25vd24gbW9kZS5cbiIpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCisJcDgwMjExX3dlcC0+ZGF0YSA9IE5VTEw7CisKKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRU5DUllQVCkpIHsKKwkJLy8gWFhYWCBuZWVkIHRvIHBpY2sga2V5bnVtIG90aGVyIHRoYW4gZGVmYXVsdD8KKworI2lmIDEKKwkJcDgwMjExX3dlcC0+ZGF0YSA9IGttYWxsb2Moc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworI2Vsc2UKKwkJcDgwMjExX3dlcC0+ZGF0YSA9IHNrYi0+ZGF0YTsKKyNlbmRpZgorCisJCWlmICgoZm9vID0gd2VwX2VuY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhLCBwODAyMTFfd2VwLT5kYXRhLAorCQkJCSAgICAgICBza2ItPmxlbiwKKwkJCQkod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKSwKKwkJCQlwODAyMTFfd2VwLT5pdiwgcDgwMjExX3dlcC0+aWN2KSkpIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIkhvc3QgZW4tV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsIGZvbyk7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CisJfQorCisKKwkvLwlza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKworCXA4MDIxMV9oZHItPmEzLmZjID0gZmM7CisJcDgwMjExX2hkci0+YTMuZHVyID0gMDsKKwlwODAyMTFfaGRyLT5hMy5zZXEgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyogamtyaWVnbDogZnJvbSBvcmlub2NvLCBtb2RpZmllZCAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqbWFjLAorCQkJICAgICAgIHA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhKQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICAvKiBHYXRoZXIgd2lyZWxlc3Mgc3B5IHN0YXRpc3RpY3M6IGZvciBlYWNoIHBhY2tldCwgY29tcGFyZSB0aGUKKyAgICAgICAgICogc291cmNlIGFkZHJlc3Mgd2l0aCBvdXQgbGlzdCwgYW5kIGlmIG1hdGNoLCBnZXQgdGhlIHN0YXRzLi4uICovCisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdsYW5kZXYtPnNweV9udW1iZXI7IGkrKykgeworCisgICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pKSB7CisJCQltZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0ubGV2ZWwgPSByeG1ldGEtPnNpZ25hbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLm5vaXNlID0gcnhtZXRhLT5ub2lzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnF1YWwgPSAocnhtZXRhLT5zaWduYWwgPiByeG1ldGEtPm5vaXNlKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ4bWV0YS0+c2lnbmFsIC0gcnhtZXRhLT5ub2lzZSkgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDB4NzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXBiXzgwMjExX3RvX2V0aGVyCisqCisqIFVzZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmVjZWl2ZWQgODAyLjExIGZyYW1lIGFuZCB0aGUgZXRoZXJjb252CisqIHNldHRpbmcgdG8gYnVpbGQgYW4gZXRoZXIgZnJhbWUuCisqCisqIFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIHNyYyBhbmQgZGVzdCBhZGRyZXNzIGZyb20gdGhlIDgwMi4xMQorKiBmcmFtZSB0byB1c2UgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgZXRoIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCWV0aGNvbnYJCUNvbnZlcnNpb24gdHlwZSB0byBwZXJmb3JtCisqCXNrYgkJUGFja2V0IGJ1ZmZlciBjb250YWluaW5nIHRoZSA4MDIuMTEgZnJhbWUKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJbmV0ZGV2aWNlX3QgICAgICpuZXRkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJVUlOVDE2ICAgICAgICAgIGZjOworCVVJTlQgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aDsKKwlVSU5UICAgICAgICAgICAgcGF5bG9hZF9vZmZzZXQ7CisJVUlOVDgJCWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQ4CQlzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwlwODAyMTFfaGRyX3QgICAgKndfaGRyOworCXdsYW5fZXRoaGRyX3QgICAqZV9oZHI7CisJd2xhbl9sbGNfdCAgICAgICplX2xsYzsKKwl3bGFuX3NuYXBfdCAgICAgKmVfc25hcDsKKworCWludCBmb287CisKKwlEQkZFTlRFUjsKKworCXBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBXTEFOX0hEUl9BM19MRU4gLSBXTEFOX0NSQ19MRU47CisJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BM19MRU47CisKKwl3X2hkciA9IChwODAyMTFfaGRyX3QgKikgc2tiLT5kYXRhOworCisgICAgICAgIC8qIHNldHVwIHNvbWUgdmFycyBmb3IgY29udmVuaWVuY2UgKi8KKwlmYyA9IGllZWUyaG9zdDE2KHdfaGRyLT5hMy5mYyk7CisJaWYgKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmExLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOworCX0gZWxzZSBpZiggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDEpICkgeworCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hMy5hMSwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmEzLmEzLCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9IGVsc2UgaWYoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAxKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAwKSApIHsKKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTMsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7CisJfSBlbHNlIHsKKwkJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BNF9MRU47CisJCXBheWxvYWRfbGVuZ3RoIC09ICggV0xBTl9IRFJfQTRfTEVOIC0gV0xBTl9IRFJfQTNfTEVOICk7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA8IDAgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiQTQgZnJhbWUgdG9vIHNob3J0IVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hNC5hMywgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmE0LmE0LCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9CisKKwkvKiBwZXJmb3JtIGRlLXdlcCBpZiBuZWNlc3NhcnkuLiAqLworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpICYmIFdMQU5fR0VUX0ZDX0lTV0VQKGZjKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkpIHsKKwkJaWYgKHBheWxvYWRfbGVuZ3RoIDw9IDgpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJXRVAgZnJhbWUgdG9vIHNob3J0ICgldSkuXG4iLAorCQkJCQlza2ItPmxlbik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoKGZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKKwkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA4LCAtMSwKKwkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgcGF5bG9hZF9sZW5ndGggLSA0KSkpIHsKKwkJCS8qIGRlLXdlcCBmYWlsZWQsIGRyb3Agc2tiLiAqLworCQkJV0xBTl9MT0dfREVCVUcoMSwgIkhvc3QgZGUtV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsIGZvbyk7CisJCQl3bGFuZGV2LT5yeC5kZWNyeXB0X2VycisrOworCQkJcmV0dXJuIDI7CisJCX0KKworCQkvKiBzdWJ0cmFjdCB0aGUgSVYrSUNWIGxlbmd0aCBvZmYgdGhlIHBheWxvYWQgKi8KKwkJcGF5bG9hZF9sZW5ndGggLT0gODsKKwkJLyogY2hvcCBvZmYgdGhlIElWICovCisJCXNrYl9wdWxsKHNrYiwgNCk7CisJCS8qIGNob3Agb2ZmIHRoZSBJQ1YuICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKKworCQl3bGFuZGV2LT5yeC5kZWNyeXB0Kys7CisJfQorCisJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCisJZV9sbGMgPSAod2xhbl9sbGNfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBzaXplb2Yod2xhbl9sbGNfdCkpOworCisJLyogVGVzdCBmb3IgdGhlIHZhcmlvdXMgZW5jb2RpbmdzICovCisJaWYgKCAocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fZXRoaGRyX3QpKSAmJgorCSAgICAgKCBlX2xsYy0+ZHNhcCAhPSAweGFhIHx8IGVfbGxjLT5zc2FwICE9IDB4YWEgKSAmJgorCSAgICAgKChtZW1jbXAoZGFkZHIsIGVfaGRyLT5kYWRkciwgV0xBTl9FVEhBRERSX0xFTikgPT0gMCkgfHwKKwkgICAgIChtZW1jbXAoc2FkZHIsIGVfaGRyLT5zYWRkciwgV0xBTl9FVEhBRERSX0xFTikgPT0gMCkpKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBFTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIDgwMi4zIEVuY2Fwc3VsYXRlZCAqLworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICggcGF5bG9hZF9sZW5ndGggPiAobmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gZW5jYXAnZC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJFTkNBUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIENob3Agb2ZmIHRoZSA4MDIuMTEgaGVhZGVyLiAgaXQncyBhbHJlYWR5IHNhbmUuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKKworCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCisJCSAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgorCQkgICAoZV9sbGMtPnNzYXAgPT0gMHhhYSkgJiYKKwkJICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgJiYKKwkJICAgKCgobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKT09MCkgJiYKKwkJICAgIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCkgJiYKKwkJICAgIChwODAyMTFfc3R0X2ZpbmRwcm90byhpZWVlMmhvc3QxNihlX3NuYXAtPnR5cGUpKSkpIHx8CisJCSAgICAobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSE9MCkpKQorCXsKKwkJV0xBTl9MT0dfREVCVUcoMywgIlNOQVArUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGl0J3MgYSBTTkFQICsgUkZDMTA0MiBmcmFtZSAmJiBwcm90b2NvbCBpcyBpbiBTVFQgKi8KKwkJLyogYnVpbGQgODAyLjMgKyBSRkMxMDQyICovCisKKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJTTkFQIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkJcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogY2hvcCA4MDIuMTEgaGVhZGVyIGZyb20gc2tiLiAqLworCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKKworCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCisJCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQltZW1jcHkoZV9oZHItPmRhZGRyLCBkYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShlX2hkci0+c2FkZHIsIHNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJZV9oZHItPnR5cGUgPSBodG9ucyhwYXlsb2FkX2xlbmd0aCk7CisKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisKKwl9ICBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKKwkJICAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgorCQkgICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCisJCSAgICAoZV9sbGMtPmN0bCA9PSAweDAzKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMywgIjgwMi4xaC9SRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwkJLyogaXQncyBhbiA4MDIuMWggZnJhbWUgfHwgKGFuIFJGQzEwNDIgJiYgcHJvdG9jb2wgaXMgbm90IGluIFNUVCkgKi8KKwkJLyogYnVpbGQgYSBESVhJSSArIFJGQzg5NCAqLworCisJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KKwkJaWYgKChwYXlsb2FkX2xlbmd0aCAtIHNpemVvZih3bGFuX2xsY190KSAtIHNpemVvZih3bGFuX3NuYXBfdCkpCisJCSAgICA+IG5ldGRldi0+bXR1KSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJESVhJSSBmcmFtZSB0b28gbGFyZ2UgKCVsZCA+ICVkKVxuIiwKKwkJCQkJKGxvbmcgaW50KSAocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLQorCQkJCQkJICAgIHNpemVvZih3bGFuX3NuYXBfdCkpLAorCQkJCQluZXRkZXYtPm10dSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIGNob3AgODAyLjExIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY2hvcCBsbGMgaGVhZGVyIGZyb20gc2tiLiAqLworCQlza2JfcHVsbChza2IsIHNpemVvZih3bGFuX2xsY190KSk7CisKKwkJLyogY2hvcCBzbmFwIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKKworCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCisJCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQllX2hkci0+dHlwZSA9IGVfc25hcC0+dHlwZTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfREVCVUcoMywgIk5PTi1FTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGFueSBOT04tRU5DQVAgKi8KKwkJLyogaXQncyBhIGdlbmVyaWMgODAyMTErTExDIG9yIElQWCAnUmF3IDgwMi4zJyAqLworCQkvKiAgYnVpbGQgYW4gODAyLjMgZnJhbWUgKi8KKwkJLyogYWxsb2NhdGUgc3BhY2UgYW5kIHNldHVwIGhvc3RidWYgKi8KKworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICggcGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSApIHsKKwkJCS8qIEEgYm9ndXMgbGVuZ3RoIGV0aGZybSBoYXMgYmVlbiBzZW50LiAqLworCQkJLyogSXMgc29tZW9uZSB0cnlpbmcgYW4gb2Zsb3cgYXR0YWNrPyAqLworCQkJV0xBTl9MT0dfRVJST1IoIk9USEVSIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkJcGF5bG9hZF9sZW5ndGgsCisJCQkJbmV0ZGV2LT5tdHUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaG9wIG9mZiB0aGUgODAyLjExIGhlYWRlci4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCWVfaGRyLT50eXBlID0gaHRvbnMocGF5bG9hZF9sZW5ndGgpOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCisJfQorCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisgICAgICAgIC8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLworCS8qIGprcmllZ2w6IG9ubHkgcHJvY2VzcyBzaWduYWwvbm9pc2UgaWYgcmVxdWVzdGVkIGJ5IGl3c3B5ICovCisgICAgICAgIGlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQorICAgICAgICAgICAgICAgIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2LCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBQODAyMTFTS0JfUlhNRVRBKHNrYikpOworCisJLyogRnJlZSB0aGUgbWV0YWRhdGEgKi8KKwlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMV9zdHRfZmluZHByb3RvCisqCisqIFNlYXJjaGVzIHRoZSA4MDIuMWggU2VsZWN0aXZlIFRyYW5zbGF0aW9uIFRhYmxlIGZvciBhIGdpdmVuCisqIHByb3RvY29sLgorKgorKiBBcmd1bWVudHM6CisqCXByb3RvCXByb3RvY2wgbnVtYmVyIChpbiBob3N0IG9yZGVyKSB0byBzZWFyY2ggZm9yLgorKgorKiBSZXR1cm5zOgorKgkxIC0gaWYgdGhlIHRhYmxlIGlzIGVtcHR5IG9yIGEgbWF0Y2ggaXMgZm91bmQuCisqCTAgLSBpZiB0aGUgdGFibGUgaXMgbm9uLWVtcHR5IGFuZCBhIG1hdGNoIGlzIG5vdCBmb3VuZC4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHA4MDIxMV9zdHRfZmluZHByb3RvKFVJTlQxNiBwcm90bykKK3sKKwkvKiBBbHdheXMgcmV0dXJuIGZvdW5kIGZvciBub3cuICBUaGlzIGlzIHRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSAqLworCS8qICBab29tIFdpbjk1IGRyaXZlciB3aGVuIDgwMi4xaCBtb2RlIGlzIHNlbGVjdGVkICovCisJLyogVE9ETzogSWYgbmVjZXNzYXJ5LCBhZGQgYW4gYWN0dWFsIHNlYXJjaCB3ZSdsbCBwcm9iYWJseQorCQkgbmVlZCB0aGlzIHRvIG1hdGNoIHRoZSBDTUFDJ3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KKwkJIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCisJKi8KKworCWlmIChwcm90byA9PSAweDgwZjMpICAvKiBBUFBMRVRBTEsgKi8KKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoCisqCisqIERpc2Nvbm5lY3RzIHRoZSBmcm1tZXRhIGFuZCByeG1ldGEgZnJvbSBhbiBza2IuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJVGhlIHdsYW5kZXYgdGhpcyBza2IgYmVsb25ncyB0by4KKyoJc2tiCQlUaGUgc2tiIHdlJ3JlIGF0dGFjaGluZyB0by4KKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7CisJcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKKworCURCRkVOVEVSOworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoIHNrYj09TlVMTCApIHsJCQkvKiBiYWQgc2tiICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gbnVsbCBza2IuXG4iKTsKKwkJZ290byBleGl0OworCX0KKwlmcm1tZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKKwlpZiAoIGZybW1ldGEgPT0gTlVMTCApIHsgCQkvKiBubyBtYWdpYyAqLworCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIGJhZCBmcm1tZXRhIG1hZ2ljLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnhtZXRhID0gZnJtbWV0YS0+cng7CisJaWYgKCByeG1ldGEgPT0gTlVMTCApIHsJCQkvKiBiYWQgbWV0YSBwdHIgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBiYWQgcnhtZXRhIHB0ci5cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogRnJlZSByeG1ldGEgKi8KKwlrZnJlZShyeG1ldGEpOworCisJLyogQ2xlYXIgc2tiLT5jYiAqLworCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOworZXhpdDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoCisqCisqIEFsbG9jYXRlcyBhIHA4MDIxMXJ4bWV0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemVzIGl0LCBhbmQgYXR0YWNoZXMKKyogaXQgdG8gYW4gc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7CisJcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKKworCURCRkVOVEVSOworCisJLyogSWYgdGhlc2UgYWxyZWFkeSBoYXZlIG1ldGFkYXRhLCB3ZSBlcnJvciBvdXQhICovCisJaWYgKFA4MDIxMVNLQl9SWE1FVEEoc2tiKSAhPSBOVUxMKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogUlhtZXRhIGFscmVhZHkgYXR0YWNoZWQhXG4iLAorCQkJCXdsYW5kZXYtPm5hbWUpOworCQlyZXN1bHQgPSAwOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIHJ4bWV0YSAqLworCXJ4bWV0YSA9IGttYWxsb2Moc2l6ZW9mKHA4MDIxMV9yeG1ldGFfdCksIEdGUF9BVE9NSUMpOworCisJaWYgKCByeG1ldGEgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcnhtZXRhLlxuIiwKKwkJCQl3bGFuZGV2LT5uYW1lKTsKKwkJcmVzdWx0ID0gMTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHJ4bWV0YSAqLworCW1lbXNldChyeG1ldGEsIDAsIHNpemVvZihwODAyMTFfcnhtZXRhX3QpKTsKKwlyeG1ldGEtPndsYW5kZXYgPSB3bGFuZGV2OworCXJ4bWV0YS0+aG9zdHRpbWUgPSBqaWZmaWVzOworCisJLyogT3ZlcmxheSBhIGZybW1ldGFfdCBvbnRvIHNrYi0+Y2IgKi8KKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHA4MDIxMV9mcm1tZXRhX3QpKTsKKwlmcm1tZXRhID0gKHA4MDIxMV9mcm1tZXRhX3QqKShza2ItPmNiKTsKKwlmcm1tZXRhLT5tYWdpYyA9IFA4MDIxMV9GUk1NRVRBX01BR0lDOworCWZybW1ldGEtPnJ4ID0gcnhtZXRhOworZXhpdDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfZnJlZQorKgorKiBGcmVlcyBhbiBlbnRpcmUgcDgwMjExc2tiIGJ5IGNoZWNraW5nIGFuZCBmcmVlaW5nIHRoZSBtZXRhIHN0cnVjdAorKiBhbmQgdGhlbiBmcmVlaW5nIHRoZSBza2IuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJVGhlIHdsYW5kZXYgdGhpcyBza2IgYmVsb25ncyB0by4KKyoJc2tiCQlUaGUgc2tiIHdlJ3JlIGF0dGFjaGluZyB0by4KKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcDgwMjExX2ZybW1ldGFfdAkqbWV0YTsKKwlEQkZFTlRFUjsKKwltZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKKwlpZiAoIG1ldGEgJiYgbWV0YS0+cngpIHsKKwkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19FUlJPUigiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKKwl9CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YWI1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKQEAgLTAsMCArMSwxODYgQEAKKy8qIHA4MDIxMWNvbnYuaAorKgorKiBFdGhlci84MDIuMTEgY29udmVyc2lvbnMgYW5kIHBhY2tldCBidWZmZXIgcm91dGluZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBmdW5jdGlvbnMsIHR5cGVzIGFuZCBtYWNyb3MgdGhhdCBwZXJmb3JtCisqIEV0aGVybmV0IHRvL2Zyb20gODAyLjExIGZyYW1lIGNvbnZlcnNpb25zLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExQ09OVl9ICisjZGVmaW5lIF9MSU5VWF9QODAyMTFDT05WX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisjZGVmaW5lIFdMQU5fRVRIQUREUl9MRU4JNgorI2RlZmluZSBXTEFOX0lFRUVfT1VJX0xFTgkzCisKKyNkZWZpbmUgV0xBTl9FVEhDT05WX0VOQ0FQCTEKKyNkZWZpbmUgV0xBTl9FVEhDT05WX1JGQzEwNDIJMgorI2RlZmluZSBXTEFOX0VUSENPTlZfODAyMWgJMworCisjZGVmaW5lIFdMQU5fTUlOX0VUSEZSTV9MRU4JNjAKKyNkZWZpbmUgV0xBTl9NQVhfRVRIRlJNX0xFTgkxNTE0CisjZGVmaW5lIFdMQU5fRVRISERSX0xFTgkJMTQKKworI2RlZmluZSBQODAyMTFDQVBUVVJFX1ZFUlNJT04JMHg4MDIxMTAwMQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKyNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJCTB4ODAyMTEwCisKKyNkZWZpbmUgUDgwMjExU0tCX0ZSTU1FVEEocykgXAorCSgoKCgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKS0+bWFnaWMpPT1QODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCisJCSgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKSA6IFwKKwkJKE5VTEwpKQorCisjZGVmaW5lIFA4MDIxMVNLQl9SWE1FVEEocykgXAorCShQODAyMTFTS0JfRlJNTUVUQSgocykpID8gIFA4MDIxMVNLQl9GUk1NRVRBKChzKSktPnJ4IDogKChwODAyMTFfcnhtZXRhX3QqKShOVUxMKSkpCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9yeG1ldGEKK3sKKwlzdHJ1Y3Qgd2xhbmRldmljZQkqd2xhbmRldjsKKworCVVJTlQ2NAltYWN0aW1lOwkvKiBIaS1yZXogTUFDLXN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKwlVSU5UNjQJaG9zdHRpbWU7CS8qIEJlc3QtcmV6IGhvc3Qgc3VwcGxpZWQgdGltZSB2YWx1ZSAqLworCisJVUlOVAlyeHJhdGU7CQkvKiBSZWNlaXZlIGRhdGEgcmF0ZSBpbiAxMDBrYnBzICovCisJVUlOVAlwcmlvcml0eTsJLyogMC0xNSwgMD1jb250ZW50aW9uLCA2PUNGICovCisJSU5UCXNpZ25hbDsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJSU5UCW5vaXNlOwkJLyogQW4gU1NJLCBzZWUgcDgwMjExbmV0ZGV2LmggKi8KKwlVSU5UCWNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KKwlVSU5UCXByZWFtYmxlOwkvKiBQODAyMTFFTlVNX3ByZWFtYmxldHlwZV8qICovCisJVUlOVAllbmNvZGluZzsJLyogUDgwMjExRU5VTV9lbmNvZGluZ18qICovCisKK30gcDgwMjExX3J4bWV0YV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfZnJtbWV0YQoreworCVVJTlQJCQltYWdpYzsKKwlwODAyMTFfcnhtZXRhX3QJCSpyeDsKK30gcDgwMjExX2ZybW1ldGFfdDsKKwordm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qCisgKiBGcmFtZSBjYXB0dXJlIGhlYWRlci4gIChTZWUgZG9jL2NhcHR1cmVmcm0udHh0KQorICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyCit7CisJVUlOVDMyCQl2ZXJzaW9uOworCVVJTlQzMgkJbGVuZ3RoOworCVVJTlQ2NAkJbWFjdGltZTsKKwlVSU5UNjQJCWhvc3R0aW1lOworCVVJTlQzMgkJcGh5dHlwZTsKKwlVSU5UMzIJCWNoYW5uZWw7CisJVUlOVDMyCQlkYXRhcmF0ZTsKKwlVSU5UMzIJCWFudGVubmE7CisJVUlOVDMyCQlwcmlvcml0eTsKKwlVSU5UMzIJCXNzaV90eXBlOworCUlOVDMyCQlzc2lfc2lnbmFsOworCUlOVDMyCQlzc2lfbm9pc2U7CisJVUlOVDMyCQlwcmVhbWJsZTsKKwlVSU5UMzIJCWVuY29kaW5nOworfSBwODAyMTFfY2FwaGRyX3Q7CisKKy8qIGJ1ZmZlciBmcmVlIG1ldGhvZCBwb2ludGVyIHR5cGUgKi8KK3R5cGVkZWYgdm9pZCAoKiBmcmVlYnVmX21ldGhvZF90KSh2b2lkICpidWYsIGludCBzaXplKTsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgeworCXZvaWQgICpkYXRhOworCVVJTlQ4IGl2WzRdOworCVVJTlQ4IGljdls0XTsKK30gcDgwMjExX21ldGF3ZXBfdDsKKworLyogbG9jYWwgZXRoZXIgaGVhZGVyIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZXRoaGRyCit7CisJVUlOVDgJZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJVUlOVDgJc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fZXRoaGRyX3Q7CisKKy8qIGxvY2FsIGxsYyBoZWFkZXIgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9sbGMKK3sKKwlVSU5UOAlkc2FwOworCVVJTlQ4CXNzYXA7CisJVUlOVDgJY3RsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2xsY190OworCisvKiBsb2NhbCBzbmFwIGhlYWRlciB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX3NuYXAKK3sKKwlVSU5UOAlvdWlbV0xBTl9JRUVFX09VSV9MRU5dOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX3NuYXBfdDsKKworLyogQ2lyY3VsYXIgaW5jbHVkZSB0cmljayAqLworc3RydWN0IHdsYW5kZXZpY2U7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKkZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQgc2tiX3A4MDIxMV90b19ldGhlciggc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LAorCQkJIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBVSU5UMzIgZXRoY29udiwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQkgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCApOworCitpbnQgcDgwMjExX3N0dF9maW5kcHJvdG8oVUlOVDE2IHByb3RvKTsKK2ludCBwODAyMTFfc3R0X2FkZHByb3RvKFVJTlQxNiBwcm90byk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2IwODcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qIHA4MDIxMWhkci5oCisqCisqIE1hY3JvcywgdHlwZXMsIGFuZCBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIDgwMi4xMSBNQUMgaGVhZGVycworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB0aGUgaW50ZXJmYWNlCisqIGJldHdlZW4gYSB3bGFuIGRyaXZlciBhbmQgdGhlIHVzZXIgbW9kZSB1dGlsaXRpZXMuCisqCisqIE5vdGU6CisqICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4gIFRvIGFzc2lnbgorKiAgICB2YWx1ZXMgdG8gbXVsdGktYnl0ZSBmaWVsZHMgdGhleSBfbXVzdF8gYmUgY29udmVydGVkIHRvCisqICAgIGllZWUgYnl0ZSBvcmRlci4gIFRvIHJldHJpZXZlIG11bHRpLWJ5dGUgdmFsdWVzIGZyb20gaW5jb21pbmcKKyogICAgZnJhbWVzLCB0aGV5IG11c3QgYmUgY29udmVydGVkIHRvIGhvc3Qgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExLmMKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMUhEUl9ICisjZGVmaW5lIF9QODAyMTFIRFJfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0gU2l6ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0FERFJfTEVOCQkJNgorI2RlZmluZSBXTEFOX0NSQ19MRU4JCQk0CisjZGVmaW5lIFdMQU5fQlNTSURfTEVOCQkJNgorI2RlZmluZSBXTEFOX0JTU19UU19MRU4JCQk4CisjZGVmaW5lIFdMQU5fSERSX0EzX0xFTgkJCTI0CisjZGVmaW5lIFdMQU5fSERSX0E0X0xFTgkJCTMwCisjZGVmaW5lIFdMQU5fU1NJRF9NQVhMRU4JCTMyCisjZGVmaW5lIFdMQU5fREFUQV9NQVhMRU4JCTIzMTIKKyNkZWZpbmUgV0xBTl9BM0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pCisjZGVmaW5lIFdMQU5fQTRGUl9NQVhMRU4JCShXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQorI2RlZmluZSBXTEFOX0JFQUNPTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAzMzQpCisjZGVmaW5lIFdMQU5fQVRJTV9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAwKQorI2RlZmluZSBXTEFOX0RJU0FTU09DX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDIpCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDgpCisjZGVmaW5lIFdMQU5fQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDU0KQorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCisjZGVmaW5lIFdMQU5fUFJPQkVSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDQpCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgNzgpCisjZGVmaW5lIFdMQU5fQVVUSEVOX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDI2MSkKKyNkZWZpbmUgV0xBTl9ERUFVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQorI2RlZmluZSBXTEFOX1dFUF9OS0VZUwkJCTQKKyNkZWZpbmUgV0xBTl9XRVBfTUFYS0VZTEVOCQkxMworI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9JRV9MRU4JCTEzMAorI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9MRU4JCTEyOAorI2RlZmluZSBXTEFOX1dFUF9JVl9MRU4JCQk0CisjZGVmaW5lIFdMQU5fV0VQX0lDVl9MRU4JCTQKKworLyotLS0gRnJhbWUgQ29udHJvbCBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZyYW1lIFR5cGVzICovCisjZGVmaW5lIFdMQU5fRlRZUEVfTUdNVAkJCTB4MDAKKyNkZWZpbmUgV0xBTl9GVFlQRV9DVEwJCQkweDAxCisjZGVmaW5lIFdMQU5fRlRZUEVfREFUQQkJCTB4MDIKKworLyogRnJhbWUgc3VidHlwZXMgKi8KKy8qIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVNTT0NSRVEJCTB4MDAKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVNTT0NSRVNQCQkweDAxCisjZGVmaW5lIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVEJCTB4MDIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFU1AJCTB4MDMKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUFJPQkVSRVEJCTB4MDQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUFJPQkVSRVNQCQkweDA1CisjZGVmaW5lIFdMQU5fRlNUWVBFX0JFQUNPTgkJMHgwOAorI2RlZmluZSBXTEFOX0ZTVFlQRV9BVElNCQkweDA5CisjZGVmaW5lIFdMQU5fRlNUWVBFX0RJU0FTU09DCQkweDBhCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FVVEhFTgkJMHgwYgorI2RlZmluZSBXTEFOX0ZTVFlQRV9ERUFVVEhFTgkJMHgwYworCisvKiBDb250cm9sICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCQkweDgKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQkxPQ0tBQ0sgIAkJMHg5CisjZGVmaW5lIFdMQU5fRlNUWVBFX1BTUE9MTAkJMHgwYQorI2RlZmluZSBXTEFOX0ZTVFlQRV9SVFMJCQkweDBiCisjZGVmaW5lIFdMQU5fRlNUWVBFX0NUUwkJCTB4MGMKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQUNLCQkJMHgwZAorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkVORAkJMHgwZQorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLCQkweDBmCisKKy8qIERhdGEgKi8KKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQU9OTFkJCTB4MDAKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRkFDSwkJMHgwMQorI2RlZmluZSBXTEFOX0ZTVFlQRV9EQVRBX0NGUE9MTAkJMHgwMgorI2RlZmluZSBXTEFOX0ZTVFlQRV9EQVRBX0NGQUNLX0NGUE9MTAkweDAzCisjZGVmaW5lIFdMQU5fRlNUWVBFX05VTEwJCTB4MDQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZBQ0sJCTB4MDUKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZQT0xMCQkweDA2CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGQUNLX0NGUE9MTAkweDA3CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLSBGQyBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBGcmFtZSBDb250cm9sIEZpZWxkICovCisvKiAgR0VUX0ZDXz8/PyAtIHRha2VzIHRoZSBob3N0IGJ5dGUtb3JkZXIgdmFsdWUgb2YgYW4gRkMgICAgICovCisvKiAgICAgICAgICAgICAgIGFuZCByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgICAgICAgICovCisvKiAgICAgICAgICAgICAgIGJpdGZpZWxkcyBhbmQgbW92ZXMgdGhhdCB2YWx1ZSBzbyBpdHMgbHNiIGlzICovCisvKiAgICAgICAgICAgICAgIGluIGJpdCAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgU0VUX0ZDXz8/PyAtIHRha2VzIGEgaG9zdCBvcmRlciB2YWx1ZSBmb3Igb25lIG9mIHRoZSBGQyAgICovCisvKiAgICAgICAgICAgICAgIGJpdGZpZWxkcyBhbmQgbW92ZXMgaXQgdG8gdGhlIHByb3BlciBiaXQgICAgICovCisvKiAgICAgICAgICAgICAgIGxvY2F0aW9uIGZvciBPUmluZyBpbnRvIGEgaG9zdCBvcmRlciBGQy4gICAgICovCisvKiAgICAgICAgICAgICAgIFRvIHNlbmQgdGhlIEZDIHByb2R1Y2VkIGZyb20gU0VUX0ZDXz8/PywgICAgICovCisvKiAgICAgICAgICAgICAgIG9uZSBtdXN0IHB1dCB0aGUgYnl0ZXMgaW4gSUVFRSBvcmRlci4gICAgICAgICovCisvKiAgZS5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgcHJpbnRmKCJ0aGUgZnJhbWUgc3VidHlwZSBpcyAleCIsICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgR0VUX0ZDX0ZUWVBFKCBpZWVlMmhvc3QoIHJ4LmZjICkpKSAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgdHguZmMgPSBob3N0MmllZWUoIFNFVF9GQ19GVFlQRShXTEFOX0ZUWVBfQ1RMKSB8ICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfUlRTKSApOyAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUFZFUihuKQkgKCgoVUlOVDE2KShuKSkgJiAoQklUMCB8IEJJVDEpKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikJKCgoKFVJTlQxNikobikpICYgKEJJVDR8QklUNXxCSVQ2fEJJVDcpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pIAkoKCgoVUlOVDE2KShuKSkgJiAoQklUOCkpID4+IDgpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUOSkpID4+IDkpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVGUkFHKG4pICgoKChVSU5UMTYpKG4pKSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTEpKSA+PiAxMSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxMikpID4+IDEyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgoVUlOVDE2KShuKSkgJiAoQklUMTMpKSA+PiAxMykKKyNkZWZpbmUgV0xBTl9HRVRfRkNfSVNXRVAobikJKCgoKFVJTlQxNikobikpICYgKEJJVDE0KSkgPj4gMTQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX09SREVSKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxNSkpID4+IDE1KQorCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1BWRVIobikJKChVSU5UMTYpKG4pKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GVFlQRShuKQkoKChVSU5UMTYpKG4pKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikJKCgoVUlOVDE2KShuKSkgPDwgNCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAJKCgoVUlOVDE2KShuKSkgPDwgOCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlJPTURTKG4pCSgoKFVJTlQxNikobikpIDw8IDkpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX01PUkVGUkFHKG4pICgoKFVJTlQxNikobikpIDw8IDEwKQorI2RlZmluZSBXTEFOX1NFVF9GQ19SRVRSWShuKQkoKChVSU5UMTYpKG4pKSA8PCAxMSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfUFdSTUdUKG4pCSgoKFVJTlQxNikobikpIDw8IDEyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKChVSU5UMTYpKG4pKSA8PCAxMykKKyNkZWZpbmUgV0xBTl9TRVRfRkNfSVNXRVAobikJKCgoVUlOVDE2KShuKSkgPDwgMTQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX09SREVSKG4pCSgoKFVJTlQxNikobikpIDw8IDE1KQorCisvKi0tLSBEdXJhdGlvbiBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBEdXJhdGlvbiBGaWVsZCAgICAgICovCisvKiAgLSB0aGUgZHVyYXRpb24gdmFsdWUgaXMgb25seSB2YWxpZCB3aGVuIGJpdDE1IGlzIHplcm8gICAgICovCisvKiAgLSB0aGUgZmlybXdhcmUgaGFuZGxlcyB0aGVzZSB2YWx1ZXMsIHNvIEknbSBub3QgZ29pbmcgICAgICovCisvKiAgICB0aGVzZSBtYWNyb3MgcmlnaHQgbm93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tIFNlcXVlbmNlIENvbnRyb2wgIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hY3JvcyB0byBnZXQvc2V0IHRoZSBiaXRmaWVsZHMgb2YgdGhlIFNlcXVlbmNlIENvbnRyb2wgICAgKi8KKy8qIEZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSR05VTShuKSAoKChVSU5UMTYpKG4pKSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgoVUlOVDE2KShuKSkgJiAofihCSVQwfEJJVDF8QklUMnxCSVQzKSkpID4+IDQpCisKKy8qLS0tIERhdGEgcHRyIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENyZWF0ZXMgYSBVSU5UOCogdG8gdGhlIGRhdGEgcG9ydGlvbiBvZiBhIGZyYW1lICAgICAgICAgICAgKi8KKy8qIEFzc3VtZXMgeW91J3JlIHBhc3NpbmcgaW4gYSBwdHIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGRyKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQVAocCkgKCgoVUlOVDgqKShwKSkgKyBXTEFOX0hEUl9BM19MRU4pCisjZGVmaW5lIFdMQU5fSERSX0E0X0RBVEFQKHApICgoKFVJTlQ4KikocCkpICsgV0xBTl9IRFJfQTRfTEVOKQorCisjZGVmaW5lIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKHIpICAgICAoKChVSU5UOCkocikpICYgQklUNykKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qIEJTUyBUaW1lc3RhbXAgKi8KK3R5cGVkZWYgVUlOVDggd2xhbl9ic3NfdHNfdFtXTEFOX0JTU19UU19MRU5dOworCisvKiBHZW5lcmljIDgwMi4xMSBIZWFkZXIgdHlwZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hMworeworCVVJTlQxNglmYzsKKwlVSU5UMTYJZHVyOworCVVJTlQ4CWExW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEyW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzZXE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hNAoreworCVVJTlQxNglmYzsKKwlVSU5UMTYJZHVyOworCVVJTlQ4CWExW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEyW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzZXE7CisJVUlOVDgJYTRbV0xBTl9BRERSX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTRfdDsKKwordHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyCit7CisJcDgwMjExX2hkcl9hM190CQlhMzsKKwlwODAyMTFfaGRyX2E0X3QJCWE0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX3Q7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ2h0IG1hY3JvcyAqLworCisjZGVmaW5lIFdMQU5fQ1RMX0ZSQU1FTEVOKGZzdHlwZSkgKFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQk/IDI0IDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLICAgCT8gMTUyIDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX1BTUE9MTAkJPyAyMCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9SVFMJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ1RTCQk/IDE0IDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0FDSwkJPyAxNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9DRkVORAkJPyAyMCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLCT8gMjAgOiA0KQorCisjZGVmaW5lIFdMQU5fRkNTX0xFTgkJCTQKKworLyogZnRjbCBpbiBIT1NUIG9yZGVyICovCitpbmxpbmUgc3RhdGljIFVJTlQxNiBwODAyMTFfaGVhZGVybGVuKFVJTlQxNiBmY3RsKQoreworCVVJTlQxNiBoZHJsZW4gPSAwOworCisJc3dpdGNoICggV0xBTl9HRVRfRkNfRlRZUEUoZmN0bCkgKSB7CisJY2FzZSBXTEFOX0ZUWVBFX01HTVQ6CisJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CisJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKKwkJaWYgKCBXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSApIHsKKwkJCWhkcmxlbiArPSBXTEFOX0FERFJfTEVOOworCQl9CisJCWJyZWFrOworCWNhc2UgV0xBTl9GVFlQRV9DVEw6CisJCWhkcmxlbiA9IFdMQU5fQ1RMX0ZSQU1FTEVOKFdMQU5fR0VUX0ZDX0ZTVFlQRShmY3RsKSkgLQorCQkJV0xBTl9GQ1NfTEVOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJfQorCisJcmV0dXJuIGhkcmxlbjsKK30KKworI2VuZGlmIC8qIF9QODAyMTFIRFJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMmVhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qIHA4MDIxMWlvY3RsLmgKKyoKKyogRGVjbGFyZXMgY29uc3RhbnRzIGFuZCB0eXBlcyBmb3IgdGhlIHA4MDIxMSBpb2N0bHMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFdoaWxlIHRoaXMgZmlsZSBpcyBjYWxsZWQgJ2lvY3RsJyBpcyBwdXJwb3NlIGdvZXMgYSBsaXR0bGUgYmV5b25kCisqICB0aGF0LiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR5cGVzIGFuZCBjb250YW50cyB1c2VkIHRvIGltcGxlbWVudAorKiAgdGhlIHA4MDIxMSByZXF1ZXN0L2NvbmZpcm0vaW5kaWNhdGUgaW50ZXJmYWNlcyBvbiBMaW51eC4gIFRoZQorKiAgcmVxdWVzdC9jb25maXJtIGludGVyZmFjZSBpcywgaW4gZmFjdCwgbm9ybWFsbHkgaW1wbGVtZW50ZWQgYXMgYW4KKyogIGlvY3RsLiAgVGhlIGluZGljYXRlIGludGVyZmFjZSBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgaW1wbGVtZW50ZWQKKyogIHVzaW5nIHRoZSBMaW51eCAnbmV0bGluaycgaW50ZXJmYWNlLgorKgorKiAgVGhlIHJlYXNvbiBJIHNheSB0aGF0IHJlcXVlc3QvY29uZmlybSBpcyAnbm9ybWFsbHknIGltcGxlbWVudGVkCisqICB2aWEgaW9jdGwgaXMgdGhhdCB3ZSdyZSByZXNlcnZpbmcgdGhlIHJpZ2h0IHRvIGJlIGFibGUgdG8gc2VuZAorKiAgcmVxdWVzdCBjb21tYW5kcyB2aWEgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiAgVGhpcyB3aWxsIGJlIG5lY2Vzc2FyeQorKiAgaWYgd2UgZXZlciBuZWVkIHRvIHNlbmQgcmVxdWVzdCBtZXNzYWdlcyB3aGVuIHRoZXJlIGFyZW4ndCBhbnkKKyogIHdsYW4gbmV0d29yayBkZXZpY2VzIHByZXNlbnQgKGkuZS4gc2VuZGluZyBhIG1lc3NhZ2UgdGhhdCBvbmx5IHA4MDIxMQorKiAgY2FyZXMgYWJvdXQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKyNpZm5kZWYgX1A4MDIxMUlPQ1RMX0gKKyNkZWZpbmUgX1A4MDIxMUlPQ1RMX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIGlvY3RsICJyZXF1ZXN0IiBjb2Rlcy4gIFNlZSBhcmd1bWVudCAyIG9mIGlvY3RsKDIpLiAqLworCisjZGVmaW5lIFA4MDIxMV9JRlRFU1QJCShTSU9DREVWUFJJVkFURSArIDApCisjZGVmaW5lIFA4MDIxMV9JRlJFUQkJKFNJT0NERVZQUklWQVRFICsgMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hZ2ljIG51bWJlciwgYSBxdWljayB0ZXN0IHRvIHNlZSB3ZSdyZSBnZXR0aW5nIHRoZSBkZXNpcmVkIHN0cnVjdCAqLworCisjZGVmaW5lIFA4MDIxMV9JT0NUTF9NQUdJQwkoMHg0YTJkNDY0ZFVMKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTmV0bGluayBwcm90b2NvbCBudW1iZXJzIGZvciB0aGUgaW5kaWNhdGlvbiBpbnRlcmZhY2UgKi8KKworI2RlZmluZSBQODAyMTFfTkxfU09DS19JTkQJTkVUTElOS19VU0VSU09DSworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTmV0bGluayBtdWx0aWNhc3QgYml0cyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9NTE1FCUJJVDAJLyogTG9jYWwgc3RhdGlvbiBtZXNzYWdlcyAqLworI2RlZmluZSBQODAyMTFfTkxfTUNBU1RfR1JQX1NOSUZGCUJJVDEJLyogU25pZmZlciBtZXNzYWdlcyAqLworI2RlZmluZSBQODAyMTFfTkxfTUNBU1RfR1JQX0RJU1QJQklUMgkvKiBEaXN0cmlidXRpb24gc3lzdGVtIG1lc3NhZ2VzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEEgcHRyIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGUgaXMgcGFzc2VkIGFzIHRoZSB0aGlyZCAqLworLyogIGFyZ3VtZW50IHRvIHRoZSBpb2N0bCBzeXN0ZW0gY2FsbCB3aGVuIGlzc3VpbmcgYSByZXF1ZXN0IHRvICovCisvKiAgdGhlIHA4MDIxMSBtb2R1bGUuICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWlvY3RsX3JlcQoreworCWNoYXIgCW5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJY2FkZHJfdCBkYXRhOworCVVJTlQzMgltYWdpYzsKKwlVSU5UMTYJbGVuOworCVVJTlQzMglyZXN1bHQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWlvY3RsX3JlcV90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisKKyNlbmRpZiAvKiBfUDgwMjExSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjNmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qIHA4MDIxMW1ldGEuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQV9ICisjZGVmaW5lIF9QODAyMTFNRVRBX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVudCBuYW1pbmcgKi8KKy8qICBjb252ZW50aW9ucyBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgbWV0YWRhdGEgbGlzdHMuICovCisKKyNkZWZpbmUgTUtSRVFNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgcmVxICMjIF8gIyMgbmFtZQorI2RlZmluZSBNS0lORE1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lCisjZGVmaW5lIE1LTUlCTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIG1pYiAjIyBfICMjIG5hbWUKKyNkZWZpbmUgTUtHUlBNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgZ3JwICMjIF8gIyMgbmFtZQorCisjZGVmaW5lIE1LUkVRTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LSU5ETUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGluZCAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LTUlCTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIG1pYiAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LR1JQTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisKKyNkZWZpbmUgR0VUTUVUQVNJWkUoYXB0cikJCSgqKigoVUlOVDMyKiopKGFwdHIpKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgaWZkZWYgZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIGRlZmluZXM6ICovCisvKiAgUDgwMjExX05PSU5DTFVERVNUUklOR1MgLSBpZiBkZWZpbmVkLCBhbGwgbWV0YWRhdGEgbmFtZSBmaWVsZHMgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBlbXB0eSBzdHJpbmdzICovCisKKyNpZmRlZiBQODAyMTFfTk9JTkNMVURFU1RSSU5HUworCSNkZWZpbmUJTUtJVEVNTkFNRShzKQkoIiIpCisjZWxzZQorCSNkZWZpbmUJTUtJVEVNTkFNRShzKQkocykKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgbWV0YWRhdGEgKi8KKy8qIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5IGxpc3QgbWV0YWRhdGEsIGdyb3VwIGxpc3QgbWV0YWRhdGEsICovCisvKiBhbmQgZGF0YSBpdGVtIG1ldGFkYXRhIGZvciBib3RoIE1pYiBhbmQgTWVzc2FnZXMuICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1ldGEKK3sKKwljaGFyCQkJKm5hbWU7CQkvKiBkYXRhIGl0ZW0gbmFtZSAqLworCVVJTlQzMgkJCWRpZDsJCS8qIHBhcnRpYWwgZGlkICovCisJVUlOVDMyCQkJZmxhZ3M7CQkvKiBzZXQgb2YgdmFyaW91cyBmbGFnIGJpdHMgKi8KKwlVSU5UMzIJCQltaW47CQkvKiBtaW4gdmFsdWUgb2YgYSBCT1VOREVESU5UICovCisJVUlOVDMyCQkJbWF4OwkJLyogbWF4IHZhbHVlIG9mIGEgQk9VTkRFRElOVCAqLworCisJVUlOVDMyCQkJbWF4bGVuOwkJLyogbWF4bGVuIG9mIGEgT0NURVRTVFIgb3IgRElTUExBWVNUUiAqLworCVVJTlQzMgkJCW1pbmxlbjsJCS8qIG1pbmxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwlwODAyMTFlbnVtX3QJCSplbnVtcHRyOwkvKiBwdHIgdG8gdGhlIGVudW0gdHlwZSBmb3IgRU5VTUlOVCAqLworCXA4MDIxMV90b3RleHRfdAkJdG90ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KKwlwODAyMTFfZnJvbXRleHRfdAlmcm9tdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX3ZhbGlkX3QJCXZhbGlkZnVucHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KK30gcDgwMjExbWV0YV90OworCit0eXBlZGVmIHN0cnVjdCBncnBsaXN0aXRlbQoreworCWNoYXIJCSpuYW1lOworCXA4MDIxMW1ldGFfdAkqaXRlbWxpc3Q7Cit9IGdycGxpc3RpdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtCit7CisJY2hhcgkJKm5hbWU7CisJZ3JwbGlzdGl0ZW1fdAkqZ3JwbGlzdDsKK30gY2F0bGlzdGl0ZW1fdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCitVSU5UMzIgcDgwMjExX3RleHQyZGlkKGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIGNoYXIgKmNhdG5hbWUsIGNoYXIgKmdycG5hbWUsIGNoYXIgKml0ZW1uYW1lKTsKK1VJTlQzMiBwODAyMTFfdGV4dDJjYXRkaWQoY2F0bGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOworVUlOVDMyIHA4MDIxMV90ZXh0MmdycGRpZChncnBsaXN0aXRlbV90ICpsaXN0LCBjaGFyICpuYW1lICk7CitVSU5UMzIgcDgwMjExX3RleHQyaXRlbWRpZChwODAyMTFtZXRhX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9kaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9jYXRkaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9ncnBkaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9pdGVtZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitjYXRsaXN0aXRlbV90ICpwODAyMTFfZGlkMmNhdCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworZ3JwbGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJncnAoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK3A4MDIxMW1ldGFfdCAqcDgwMjExX2RpZDJpdGVtKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExaXRlbV9tYXhkYXRhbGVuKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX21ldGFuYW1lMmRpZChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBjaGFyICppdGVtbmFtZSk7CitVSU5UMzIgcDgwMjExaXRlbV9nZXRvZmZzZXQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQgKTsKK2ludCBwODAyMTFpdGVtX2dldHR5cGUocDgwMjExbWV0YV90ICptZXRhKTsKKworI2VuZGlmIC8qIF9QODAyMTFNRVRBX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdmNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCkBAIC0wLDAgKzEsMjUyNCBAQAorLyogVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZLiAgRE8gTk9UIEVESVQgT1IgTU9ESUZZLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUtNRVRBREVGX0gKKyNkZWZpbmUgX1A4MDIxMU1LTUVUQURFRl9ICisKKworI2RlZmluZSBESURtc2dfY2F0X2RvdDExcmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X21pYmF0dHJpYnV0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYnNldF9taWJhdHRyaWJ1dGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfcG93ZXJtZ210bW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfd2FrZXVwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdF9yZWNlaXZlZHRpbXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2NhbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9ic3N0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fc2NhbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9wcm9iZWRlbGF5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fY2hhbm5lbGxpc3QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9taW5jaGFubmVsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX21heGNoYW5uZWx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX251bWJzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9hcHBlbmQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc2luZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zaWduYWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmVhY29ucGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19kdGltcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190aW1lc3RhbXAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19sb2NhbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9wc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BwYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BpbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2RzY2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcGNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwbWF4ZHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBkdXJyZW1haW5pbmcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19pYnNzYXRpbXdpbmRvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBvbGxyZXEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9qb2luZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfYXV0aGVudGljYXRpb25mYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9hc3NvY2lhdGVmYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9saXN0ZW5pbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX25ld2FwYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcmVhc3NvY2lhdGVmYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9saXN0ZW5pbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfc2V0ZGVmYXVsdG1pYiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfbWFjYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9ic3N0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iZWFjb25wZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2R0aW1wZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcHBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2ZwbWF4ZHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoZHdlbGx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGhvcHNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BwYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kc2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9pYnNzYXRpbXdpbmRvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Byb2JlZGVsYXkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfZG90MTFpbmQgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigyKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kZWF1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfYWlkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9haWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfb2xkYXBhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9yZWFzb25jb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9sbnhyZXEgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigzKQorI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wcmlzbWhlYWRlciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3dsYW5oZWFkZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9rZWVwd2VwZmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9zdHJpcGZjcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3BhY2tldF90cnVuYyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZGVjcnlwdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9lbmNyeXB0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2RibSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2xpbmsgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9sZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX3NzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX2F1dGh0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9sbnhpbmQgXAorCQkJUDgwMjExRElEX01LU0VDVElPTig0KQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2kgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF9yb2FtIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfcm9hbV9yZWFzb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfY2F0X3AycmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYXV0aHR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9wZGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXNfY2lzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZF9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2RhdGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX2NvbW1hbmQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3BhcmFtMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcGFyYW0xIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9wYXJhbTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3AwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXNwMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcmVzcDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfdGVzdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Rlc3RwYXJhbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfc3RhdHVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF9yZXNwMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzcDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3AyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF9hZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkX3ZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX2V4ZWFkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbV9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21tX3N0YXRlX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1fc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZHVtcF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE2KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGVfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX2NoYW5uZWxsaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fY2hhbm5lbGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19udW1jaGluZm8gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfY2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfYXZnbm9pc2VsZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcGVha25vaXNlbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2Jzc2FjdGl2ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcGNmYWN0aXZlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9lbmFibGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExc210IFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X3A4MDIxMVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZV9wODAyMTFfaWZzdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFTdGF0aW9uSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFNZWRpdW1PY2N1cGFuY3lMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBQZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBNYXhEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uUmVzcG9uc2VUaW1lT3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUG93ZXJNYW5hZ2VtZW50TW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGVzaXJlZEJTU1R5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExT3BlcmF0aW9uYWxSYXRlU2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUJlYWNvblBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEVElNUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUFzc29jaWF0aW9uUmVzcG9uc2VUaW1lT3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURpc2Fzc29jaWF0ZVJlYXNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEaXNhc3NvY2lhdGVTdGF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlYXV0aGVudGljYXRlUmVhc29uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlYXV0aGVudGljYXRlU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGVGYWlsU3RhdHVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUF1dGhlbnRpY2F0ZUZhaWxTdGF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0xIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG00IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0luZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdXRVBPbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nVmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBLZXlNYXBwaW5nTGVuZ3RoIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQSUNWRXJyb3JDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUEV4Y2x1ZGVkQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExbWFjIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1hbnVmYWN0dXJlcklEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFQcm9kdWN0SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZhaWxlZENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJldHJ5Q291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGlwbGVSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUlRTU3VjY2Vzc0NvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU0ZhaWx1cmVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFBQ0tGYWlsdXJlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZDU0Vycm9yQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczExIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9jYXRfZG90MTFwaHkgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigzKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVBIWVR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUN1cnJlbnRSZWdEb21haW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVRlbXBUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eVByZXNlbnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUNoYW5uZWxBZ2lsaXR5RW5hYmxlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFR4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMURpdmVyc2l0eVN1cHBvcnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFDdXJyZW50UnhBbnRlbm5hIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMU51bWJlclN1cHBvcnRlZFBvd2VyTGV2ZWxzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFIb3BUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWxOdW1iZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFNYXhEd2VsbFRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50RHdlbGxUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRQYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ0NBTW9kZVN1cHBvcnRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDQ0FNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExRURUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFTaG9ydFByZWFtYmxlT3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFQQkNDT3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ1RpbWVyTWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nQ291bnRNYXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWluIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0SW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydFZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFBbnRlbm5hTGlzdEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRUeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMVN1cHBvcnRlZFJ4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExRGl2ZXJzaXR5U2VsZWN0aW9uUnggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhWYWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2xueCBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDQpCisjZGVmaW5lIERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X3AyIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNSkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJNTVR4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJFYXJseUJlYWNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyUmVjZWl2ZWRGcmFtZVN0YXRpc3RpY3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBdXRoZW50aWNhdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBc3NvY2lhdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJQb3dlclNhdmVVc2VyQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW1lbnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc01vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0FsbG93IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzRGVueSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNoYW5uZWxJbmZvUmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25NQUNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRGVzaXJlZFNTSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25DaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkFUSU1XaW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTeXN0ZW1TY2FsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heERhdGFMZW5ndGggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1FbmFibGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRVBTIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFJlY2VpdmUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4U2xlZXBEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUhvbGRvdmVyRHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTmFtZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25EVElNUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFBNQnVmZmVyaW5nIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXlJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNykgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBGbGFncyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhBc3NvY2lhdGVkU3RhdGlvbnMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVHhDb250cm9sIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlJvYW1pbmdNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkhvc3RBdXRoZW50aWNhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSY3ZDcmNFcnJvciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBbHRSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJlYWNvbkludGVydmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1lZGl1bU9jY3VwYW5jeUxpbWl0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkNGUFBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBNYXhEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBGbGFncyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTVEFQQ0ZJbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlByaW9yaXR5UVVzYWdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRJTUN0cmwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVGhpcnR5MlRhbGx5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkVuaFNlY3VyaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlNob3J0UHJlYW1ibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDcpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRXhjbHVkZUxvbmdQcmVhbWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0OCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvblJzcFRPIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJhc2ljUmF0ZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3VwcG9ydGVkUmF0ZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pYyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyQ3JlYXRlSUJTUyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlByb21pc2N1b3VzTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJCZWhhdmlvciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtaWJfcDJfcDJCZWhhdmlvcl9wMlRpY2tUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1heExvYWRUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJQYWdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJPZmZzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlckxlbmd0aCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlBSSUlkZW50aXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyUFJJU3VwUmFuZ2UgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJOSUNTZXJpYWxOdW1iZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJOSUNJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1GSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkNGSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkNoYW5uZWxMaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlJlZ3VsYXRvcnlEb21haW5zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlRlbXBUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlNUQUlkZW50aXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlNUQVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1GSUFjdFJhbmdlcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFDRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyQnVpbGRTZXF1ZW5jZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJQcmltYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTZWNvbmRhcnlGV0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlRlcnRpYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUG9ydFN0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5Q1EgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBU0wgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBTkwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlDUSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eUFTTCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBTkwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50QmVhY29uSW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyU3RhQ3VycmVudFNjYWxlVGhyZXNob2xkcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJBUEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUHJvdG9jb2xSc3BUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlNob3J0UmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJMb25nUmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJNYXhUcmFuc21pdExpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMk1heFJlY2VpdmVMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDRlBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyT3duTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMlBIWVR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMkN1cnJlbnRDaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50UG93ZXJTdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyQ0NBTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyU3VwcG9ydGVkRGF0YVJhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJUeFBvd2VyTWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIHA4MDIxMW1ldGFtaWIuaAorKgorKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbWliIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQU1JQl9ICisjZGVmaW5lIF9QODAyMTFNRVRBTUlCX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1pYiAqLworLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLworCitleHRlcm4gY2F0bGlzdGl0ZW1fdCBtaWJfY2F0bGlzdFtdOworZXh0ZXJuIFVJTlQzMiBtaWJfY2F0bGlzdF9zaXplOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQU1JQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ZGZjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaApAQCAtMCwwICsxLDEwNSBAQAorLyogcDgwMjExbWV0YW1zZy5oCisqCisqIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtc2cgbWV0YWRhdGEKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCisqIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KKyoKKyogTm90ZXM6CisqICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYworKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFNRVRBTVNHX0gKKyNkZWZpbmUgX1A4MDIxMU1FVEFNU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWVzc2FnZSAqLworLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLworCitleHRlcm4gY2F0bGlzdGl0ZW1fdCBtc2dfY2F0bGlzdFtdOworZXh0ZXJuIFVJTlQzMiBtc2dfY2F0bGlzdF9zaXplOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1ZjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaApAQCAtMCwwICsxLDY0NCBAQAorLyogVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZLiAgRE8gTk9UIEVESVQgT1IgTU9ESUZZLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUtNRVRBU1RSVUNUX0gKKyNkZWZpbmUgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICisKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9wb3dlcm1nbXQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwb3dlcm1nbXRtb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXdha2V1cAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWNlaXZlZHRpbXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF8wQ1sxXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMURbM10JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2NhbnR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7CisJcDgwMjExaXRlbV9wc3RyMTRfdAljaGFubmVsbGlzdAk7CisJVUlOVDgJcGFkXzJDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW1pbmNoYW5uZWx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW1heGNoYW5uZWx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbnVtYnNzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFwcGVuZAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3NpbmRleAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNpZ25hbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfM0NbMV0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzREWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJdGltZXN0YW1wCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxvY2FsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BpbmRleAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwY291bnQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGR1cnJlbWFpbmluZwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpYnNzYXRpbXdpbmRvdwk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwcml2YWN5CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU4CTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfam9pbgoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF81Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlqb2luZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2pvaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF82Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRoZW50aWNhdGlvbnR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb25mYWlsdXJldGltZW91dAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfN0NbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uY29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9hc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfOENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsaXN0ZW5pbnRlcnZhbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CW5ld2FwYWRkcmVzcwk7CisJVUlOVDgJcGFkXzlDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsaXN0ZW5pbnRlcnZhbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTBDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3Jlc2V0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2V0ZGVmYXVsdG1pYgk7CisJcDgwMjExaXRlbV9wc3RyNl90CW1hY2FkZHJlc3MJOworCVVJTlQ4CXBhZF8xMUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMTJEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoZHdlbGx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wc2V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wcGF0dGVybgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xM0NbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb250eXBlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTRDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2Fzc29jaWF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xNUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWlkCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTZDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFpZAk7CisJcDgwMjExaXRlbV9wc3RyNl90CW9sZGFwYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE3Q1sxXQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE4Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpZnN0YXRlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmYKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwcmlzbWhlYWRlcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAl3bGFuaGVhZGVyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWtlZXB3ZXBmbGFncwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdHJpcGZjcwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYWNrZXRfdHJ1bmMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZGVjcnlwdAk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmNyeXB0CTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkYm0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGluawk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZXZlbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMTlEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGh0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm0KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlob3N0dGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltYWN0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcnNzaQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzaWduYWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmF0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpc3R4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZybWxlbgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueGluZF9yb2FtCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueGluZF9yb2FtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9qb2luCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7CisJVUlOVDgJcGFkXzIwQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKKwlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOworCVVJTlQ4CXBhZF8yMURbM10JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2pvaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJcGRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmVhZGNpcworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdAljaXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yZWFkY2lzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9yZWFkCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2xvd19sZXZlbAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNvbW1hbmQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFyYW0wCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBhcmFtMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYXJhbTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9sb3dfbGV2ZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3Rlc3RfY29tbWFuZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRlc3Rjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRlc3RwYXJhbQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN0YXR1cwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX21taV9yZWFkCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAl2YWx1ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX21taV9yZWFkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWV4ZWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGVuCTsKKwlwODAyMTFpdGVtX3VuazQwOTZfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfbW1fc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbV9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZHVtcF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZHVtcF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbGxpc3QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW51bWNoaW5mbwk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF2Z25vaXNlbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGVha25vaXNlbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzYWN0aXZlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBjZmFjdGl2ZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZW5hYmxlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9lbmFibGVfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0YzE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKQEAgLTAsMCArMSw1NzUgQEAKKy8qIHA4MDIxMW1nbXQuaAorKgorKiBNYWNyb3MsIHR5cGVzLCBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSA4MDIuMTEgbWdtdCBmcmFtZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdGhlIGludGVyZmFjZQorKiBiZXR3ZWVuIGEgd2xhbiBkcml2ZXIgYW5kIHRoZSB1c2VyIG1vZGUgdXRpbGl0aWVzLgorKgorKiBOb3RlczoKKyogIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLiAgVG8gYXNzaWduCisqICAgIHZhbHVlcyB0byBtdWx0aS1ieXRlIGZpZWxkcyB0aGV5IF9tdXN0XyBiZSBjb252ZXJ0ZWQgdG8KKyogICAgaWVlZSBieXRlIG9yZGVyLiAgVG8gcmV0cmlldmUgbXVsdGktYnl0ZSB2YWx1ZXMgZnJvbSBpbmNvbWluZworKiAgICBmcmFtZXMsIHRoZXkgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gaG9zdCBvcmRlci4KKyoKKyogIC0gVGhlIGxlbiBtZW1iZXIgb2YgdGhlIGZyYW1lIHN0cnVjdHVyZSBkb2VzIE5PVCEhISBpbmNsdWRlCisqICAgIHRoZSBNQUMgQ1JDLiAgVGhlcmVmb3JlLCB0aGUgbGVuIGZpZWxkIG9uIHJ4J2QgZnJhbWVzIHNob3VsZAorKiAgICBoYXZlIDQgc3VidHJhY3RlZCBmcm9tIGl0LgorKgorKiBBbGwgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMS5jCisqCisqIFRoZSB0eXBlcywgbWFjcm9zLCBhbmQgZnVuY3Rpb25zIGRlZmluZWQgaGVyZSBhcmUgcHJpbWFyaWx5CisqIHVzZWQgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBtYW5hZ2VtZW50IGZyYW1lcy4gIFRoZXkgYXJlCisqIGRlc2lnbmVkIHRvIGZvbGxvdyB0aGVzZSBwYXR0ZXJucyBvZiB1c2U6CisqCisqIERFQ09ERToKKyogMSkgYSBmcmFtZSBvZiBsZW5ndGggbGVuIGlzIHJlY2VpdmVkIGludG8gYnVmZmVyIGIKKyogMikgdXNpbmcgdGhlIGhkciBzdHJ1Y3R1cmUgYW5kIG1hY3Jvcywgd2UgZGV0ZXJtaW5lIHRoZSB0eXBlCisqIDMpIGFuIGFwcHJvcHJpYXRlIG1nbXQgZnJhbWUgc3RydWN0dXJlLCBtZiwgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvZWQKKyogNCkgbWYuaGRyID0gYgorKiAgICBtZi5idWYgPSBiCisqICAgIG1mLmxlbiA9IGxlbgorKiA1KSBjYWxsIG1nbXRfZGVjb2RlKCBtZiApCisqIDYpIHRoZSBmcmFtZSBmaWVsZCBwb2ludGVycyBpbiBtZiBhcmUgbm93IHNldC4gIE5vdGUgdGhhdCBhbnkKKyogICAgbXVsdGktYnl0ZSBmcmFtZSBmaWVsZCB2YWx1ZXMgYWNjZXNzZWQgdXNpbmcgdGhlIGZyYW1lIGZpZWxkCisqICAgIHBvaW50ZXJzIGFyZSBpbiBpZWVlIGJ5dGUgb3JkZXIgYW5kIHdpbGwgaGF2ZSB0byBiZSBjb252ZXJ0ZWQKKyogICAgdG8gaG9zdCBvcmRlci4KKyoKKyogRU5DT0RFOgorKiAxKSBMaWJyYXJ5IGNsaWVudCBhbGxvY2F0ZXMgYnVmZmVyIHNwYWNlIGZvciBtYXhpbXVtIGxlbmd0aAorKiAgICBmcmFtZSBvZiB0aGUgZGVzaXJlZCB0eXBlCisqIDIpIExpYnJhcnkgY2xpZW50IGFsbG9jYXRlcyBhIG1nbXQgZnJhbWUgc3RydWN0dXJlLCBjYWxsZWQgbWYsCisqICAgIG9mIHRoZSBkZXNpcmVkIHR5cGUKKyogMykgU2V0IHRoZSBmb2xsb3dpbmc6CisqICAgIG1mLnR5cGUgPSA8ZGVzaXJlZCB0eXBlPgorKiAgICBtZi5idWYgPSA8YWxsb2NhdGVkIGJ1ZmZlciBhZGRyZXNzPgorKiA0KSBjYWxsIG1nbXRfZW5jb2RlKCBtZiApCisqIDUpIGFsbCBvZiB0aGUgZml4ZWQgZmllbGQgcG9pbnRlcnMgYW5kIGZpeGVkIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50CisqICAgIHBvaW50ZXJzIGluIG1mIGFyZSBub3cgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgbG9jYXRpb25zIGluIHRoZQorKiAgICBhbGxvY2F0ZWQgc3BhY2UgKGZvcnR1bmF0ZWx5LCBhbGwgdmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzCisqICAgIGZhbGwgYXQgdGhlIGVuZCBvZiB0aGVpciByZXNwZWN0aXZlIGZyYW1lcykuCisqIDVhKSBUaGUgbGVuZ3RoIGZpZWxkIGlzIHNldCB0byBpbmNsdWRlIHRoZSBsYXN0IG9mIHRoZSBmaXhlZCBhbmQgZml4ZWQKKyogICAgIGxlbmd0aCBmaWVsZHMuICBJdCBtYXkgaGF2ZSB0byBiZSB1cGRhdGVkIGZvciBvcHRpb25hbCBvciB2YXJpYWJsZQorKiAJbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzLgorKiA2KSBPcHRpb25hbCBhbmQgdmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzIGFyZSBzcGVjaWFsIGNhc2VzCisqICAgIGFuZCBtdXN0IGJlIGhhbmRsZWQgaW5kaXZpZHVhbGx5IGJ5IHRoZSBjbGllbnQgY29kZS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1HTVRfSAorI2RlZmluZSBfUDgwMjExTUdNVF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiAgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKyNpZm5kZWYgIF9QODAyMTFIRFJfSAorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2VuZGlmCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgSURzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9FSURfU1NJRAkJMAorI2RlZmluZSBXTEFOX0VJRF9TVVBQX1JBVEVTCTEKKyNkZWZpbmUgV0xBTl9FSURfRkhfUEFSTVMJMgorI2RlZmluZSBXTEFOX0VJRF9EU19QQVJNUwkzCisjZGVmaW5lIFdMQU5fRUlEX0NGX1BBUk1TCTQKKyNkZWZpbmUgV0xBTl9FSURfVElNCQk1CisjZGVmaW5lIFdMQU5fRUlEX0lCU1NfUEFSTVMJNgorLyotLSB2YWx1ZXMgNy0xNSByZXNlcnZlZCAtLSovCisjZGVmaW5lIFdMQU5fRUlEX0NIQUxMRU5HRQkxNgorLyotLSB2YWx1ZXMgMTctMzEgcmVzZXJ2ZWQgZm9yIGNoYWxsZW5nZSB0ZXh0IGV4dGVuc2lvbiAtLSovCisvKi0tIHZhbHVlcyAzMi0yNTUgcmVzZXJ2ZWQgLS0qLworCisvKi0tIFJlYXNvbiBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9SU1ZECQkJMAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX1VOU1BFQwkJCTEKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9QUklPUl9BVVRIX0lOVkFMSUQJMgorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RFQVVUSF9MRUFWSU5HCQkzCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fRElTQVNTT0NfSU5BQ1RJVkUJNAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RJU0FTU09DX0FQX0JVU1kJNQorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NMQVNTMl9OT05BVVRICQk2CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MzX05PTkFTU09DCTcKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTTEVGVAk4CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fQ0FOVF9BU1NPQ19OT05BVVRICTkKKworLyotLSBTdGF0dXMgQ29kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUwkJMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1VOU1BFQ19GQUlMVVJFCQkxCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRAkxMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1JFQVNTT0NfTk9fQVNTT0MJMTEKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfVU5TUEVDCTEyCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfVU5TVVBQT1JURURfQVVUSEFMRwkxMworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1JYX0FVVEhfTk9TRVEJCTE0CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQ0hBTExFTkdFX0ZBSUwJCTE1CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVVUSF9USU1FT1VUCQkxNgorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9CVVNZCTE3CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX1JBVEVTCTE4CisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlQJMTkKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfTk9QQkNDCTIwCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PQUdJTElUWQkyMQorCisKKworLyotLSBBdXRoIEFsZ29yaXRobSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0FVVEhfQUxHX09QRU5TWVNURU0JCTAKKyNkZWZpbmUgV0xBTl9BVVRIX0FMR19TSEFSRURLRVkJCQkxCisKKy8qLS0gTWFuYWdlbWVudCBGcmFtZSBGaWVsZCBPZmZzZXRzIC0tLS0tLS0tLS0tLS0qLworLyogTm90ZTogTm90IGFsbCBmaWVsZHMgYXJlIGxpc3RlZCBiZWNhdXNlIG9mIHZhcmlhYmxlIGxlbmd0aHMsICAgKi8KKy8qICAgICAgIHNlZSB0aGUgY29kZSBpbiBwODAyMTEuYyB0byBzZWUgaG93IHdlIHNlYXJjaCBmb3IgZmllbGRzICovCisvKiBOb3RlOiBUaGVzZSBvZmZzZXRzIGFyZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZnJhbWUgZGF0YSAgICAgICAqLworCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9UUwkJCTAKKyNkZWZpbmUgV0xBTl9CRUFDT05fT0ZGX0JDTl9JTlQJCQk4CisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9DQVBJTkZPCQkJMTAKKyNkZWZpbmUgV0xBTl9CRUFDT05fT0ZGX1NTSUQJCQkxMgorCisjZGVmaW5lIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTgkJMAorCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQJCTIKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFUV9PRkZfU1NJRAkJCTQKKworI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NUQVRVUwkJMgorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfQUlECQkJNAorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfU1VQUF9SQVRFUwkJNgorCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVRX09GRl9MSVNURU5fSU5UCQkyCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUAkJNAorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX1NTSUQJCTEwCisKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1RBVFVTCQkyCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRAkJNAorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTCQk2CisKKyNkZWZpbmUgV0xBTl9QUk9CRVJFUV9PRkZfU1NJRAkJCTAKKworI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfVFMJCQkwCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9CQ05fSU5UCQk4CisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9DQVBfSU5GTwkJMTAKKyNkZWZpbmUgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQJCQkxMgorCisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9BVVRIX0FMRwkJMAorI2RlZmluZSBXTEFOX0FVVEhFTl9PRkZfQVVUSF9TRVEJCTIKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUwkJCTQKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX0NIQUxMRU5HRQkJNgorCisjZGVmaW5lIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTgkJMAorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLSBDYXBhYmlsaXR5IEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKG4pCQkoKG4pICYgQklUMCkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19JQlNTKG4pCQkoKChuKSAmIEJJVDEpID4+IDEpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMQUJMRShuKQkoKChuKSAmIEJJVDIpID4+IDIpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMUkVRKG4pCSgoKG4pICYgQklUMykgPj4gMykKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QUklWQUNZKG4pCSgoKG4pICYgQklUNCkgPj4gNCkKKyAgLyogcDgwMjExYiBhZGRpdGlvbnMgKi8KKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19TSE9SVChuKQkJKCgobikgJiBCSVQ1KSA+PiA1KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BCQ0MobikJCSgoKG4pICYgQklUNikgPj4gNikKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19BR0lMSVRZKG4pCSgoKG4pICYgQklUNykgPj4gNykKKworI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKG4pCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKChuKSA8PCAxKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKChuKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKG4pIDw8IDMpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKG4pIDw8IDQpCisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgobikgPDwgNSkKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKG4pIDw8IDYpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKG4pIDw8IDcpCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0gSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgSUVzIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLworCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90OworCisvKi0tIFNlcnZpY2UgU2V0IElkZW50aXR5IChTU0lEKSAgLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zc2lkCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlzc2lkWzFdOyAgLyogbWF5IGJlIHplcm8sIHB0cnMgbWF5IG92ZXJsYXAgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9zc2lkX3Q7CisKKy8qLS0gU3VwcG9ydGVkIFJhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX3N1cHBfcmF0ZXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CXJhdGVzWzFdOyAgLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3VwcF9yYXRlc190OworCisvKi0tIEZIIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9maF9wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDE2CWR3ZWxsOworCVVJTlQ4CWhvcHNldDsKKwlVSU5UOAlob3BwYXR0ZXJuOworCVVJTlQ4CWhvcGluZGV4OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2ZoX3Bhcm1zX3Q7CisKKy8qLS0gRFMgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljdXJyX2NoOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2RzX3Bhcm1zX3Q7CisKKy8qLS0gQ0YgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfY2ZfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CWNmcF9jbnQ7CisJVUlOVDgJY2ZwX3BlcmlvZDsKKwlVSU5UMTYJY2ZwX21heGR1cjsKKwlVSU5UMTYJY2ZwX2R1cnJlbWFpbmluZzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9jZl9wYXJtc190OworCisvKi0tIFRJTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV90aW0KK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CWR0aW1fY250OworCVVJTlQ4CWR0aW1fcGVyaW9kOworCVVJTlQ4CWJpdG1hcF9jdGw7CisJVUlOVDgJdmlydF9ibVsxXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90aW1fdDsKKworLyotLSBJQlNTIFBhcmFtZXRlciBTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDE2CWF0aW1fd2luOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2lic3NfcGFybXNfdDsKKworLyotLSBDaGFsbGVuZ2UgVGV4dCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfY2hhbGxlbmdlCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljaGFsbGVuZ2VbMV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2hhbGxlbmdlX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRnJhbWUgVHlwZXMgICovCisKKy8qIHByb3RvdHlwZSBzdHJ1Y3R1cmUsIGFsbCBtZ210IGZyYW1lIHR5cGVzIHdpbGwgc3RhcnQgd2l0aCB0aGVzZSBtZW1iZXJzICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX21nbXQKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsJLyogRE9FUyBOT1QgaW5jbHVkZSBDUkMgISEhISovCisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCit9IHdsYW5fZnJfbWdtdF90OworCisvKi0tIEJlYWNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9iZWFjb24KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQ2NAkJCSp0czsKKwlVSU5UMTYJCQkqYmNuX2ludDsKKwlVSU5UMTYJCQkqY2FwX2luZm87CisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QJKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdAkqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190CSpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdAkqaWJzc19wYXJtczsKKwl3bGFuX2llX3RpbV90CQkqdGltOworCit9IHdsYW5fZnJfYmVhY29uX3Q7CisKKworLyotLSBJQlNTIEFUSU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfaWJzc2F0aW0KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCisJLyogdGhpcyBmcmFtZSB0eXBlIGhhcyBhIG51bGwgYm9keSAqLworCit9IHdsYW5fZnJfaWJzc2F0aW1fdDsKKworLyotLSBEaXNhc3NvY2lhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGlzYXNzb2MKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpyZWFzb247CisKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisKK30gd2xhbl9mcl9kaXNhc3NvY190OworCisvKi0tIEFzc29jaWF0aW9uIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3JlcQoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4KgkJCWJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmNhcF9pbmZvOworCVVJTlQxNgkJCSpsaXN0ZW5faW50OworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9hc3NvY3JlcV90OworCisvKi0tIEFzc29jaWF0aW9uIFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqc3RhdHVzOworCVVJTlQxNgkJCSphaWQ7CisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfYXNzb2NyZXNwX3Q7CisKKy8qLS0gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXEKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqbGlzdGVuX2ludDsKKwlVSU5UOAkJCSpjdXJyX2FwOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9yZWFzc29jcmVxX3Q7CisKKy8qLS0gUmVhc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKnN0YXR1czsKKwlVSU5UMTYJCQkqYWlkOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX3JlYXNzb2NyZXNwX3Q7CisKKy8qLS0gUHJvYmUgUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVxCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfcHJvYmVyZXFfdDsKKworLyotLSBQcm9iZSBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UNjQJCQkqdHM7CisJVUlOVDE2CQkJKmJjbl9pbnQ7CisJVUlOVDE2CQkJKmNhcF9pbmZvOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7Cit9IHdsYW5fZnJfcHJvYmVyZXNwX3Q7CisKKy8qLS0gQXV0aGVudGljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2F1dGhlbgoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmF1dGhfYWxnOworCVVJTlQxNgkJCSphdXRoX3NlcTsKKwlVSU5UMTYJCQkqc3RhdHVzOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX2NoYWxsZW5nZV90CSpjaGFsbGVuZ2U7CisKK30gd2xhbl9mcl9hdXRoZW5fdDsKKworLyotLSBEZWF1dGhlbmljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kZWF1dGhlbgoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKnJlYXNvbjsKKworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKworfSB3bGFuX2ZyX2RlYXV0aGVuX3Q7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24oIHdsYW5fZnJfYmVhY29uX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2MoIHdsYW5fZnJfZGlzYXNzb2NfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKCB3bGFuX2ZyX2Fzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKCB3bGFuX2ZyX2Fzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKCB3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSggd2xhbl9mcl9wcm9iZXJlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCggd2xhbl9mcl9wcm9iZXJlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKCB3bGFuX2ZyX2F1dGhlbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKCB3bGFuX2ZyX2RlYXV0aGVuX3QgICpmICk7CisKKworI2VuZGlmIC8qIF9QODAyMTFNR01UX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjM2Y2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jCkBAIC0wLDAgKzEsMjE2IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMW1vZC5jCisqCisqIE1vZHVsZSBlbnRyeSBhbmQgZXhpdCBmb3IgcDgwMjExCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcDgwMjExLm8gZW50cnkgYW5kIGV4aXQgcG9pbnRzIGRlZmluZWQgZm9yIGxpbnV4CisqIGtlcm5lbCBtb2R1bGVzLgorKgorKiBOb3RlczoKKyogLSBhbGwgbW9kdWxlIHBhcmFtZXRlcnMgZm9yICBwODAyMTEubyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwyNSkpCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gInA4MDIxMS5vOiAiIFdMQU5fUkVMRUFTRTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogLS1Nb2R1bGUgUGFyYW1ldGVycyAqLworCitpbnQgd2xhbl93YXRjaGRvZyA9IDUwMDA7Cittb2R1bGVfcGFyYW0od2xhbl93YXRjaGRvZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl93YXRjaGRvZywgInRyYW5zbWl0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIik7CisKK2ludCB3bGFuX3dleHRfd3JpdGUgPSAwOworI2lmIFdJUkVMRVNTX0VYVCA+IDEyCittb2R1bGVfcGFyYW0od2xhbl93ZXh0X3dyaXRlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh3bGFuX3dleHRfd3JpdGUsICJlbmFibGUgd3JpdGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyIpOworI2VuZGlmCisKKyNpZmRlZiBXTEFOX0lOQ0xVREVfREVCVUcKK2ludCB3bGFuX2RlYnVnPTA7Cittb2R1bGVfcGFyYW0od2xhbl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl9kZWJ1ZywgInA4MDIxMSBkZWJ1ZyBsZXZlbCIpOworI2VuZGlmCisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQJaW5pdF9tb2R1bGUodm9pZCk7Cit2b2lkCWNsZWFudXBfbW9kdWxlKHZvaWQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGluaXRfbW9kdWxlCisqCisqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBjYWxsZWQgb25jZSBhdCBtb2R1bGUgbG9hZCB0aW1lLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJMAktIHN1Y2Nlc3MKKyoJfjAJLSBmYWlsdXJlLCBtb2R1bGUgaXMgdW5sb2FkZWQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoJVE9ETzogZGVmaW5lCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgKGluc21vZCBvciBtb2Rwcm9iZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisgICAgICAgIERCRkVOVEVSOworCisjaWYgMAorICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzICglcykgTG9hZGVkXG4iLCB2ZXJzaW9uLCBXTEFOX0JVSUxEX0RBVEUpOworI2VuZGlmCisKKwlwODAyMTFuZXRkZXZfc3RhcnR1cCgpOworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcoTlVMTCwgV0xBTl9IT1RQTFVHX1NUQVJUVVApOworI2VuZGlmCisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGNsZWFudXBfbW9kdWxlCisqCisqIENhbGxlZCBhdCBtb2R1bGUgdW5sb2FkIHRpbWUuICBUaGlzIGlzIG91ciBsYXN0IGNoYW5jZSB0bworKiBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJVE9ETzogZGVmaW5lCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworICAgICAgICBEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcoTlVMTCwgV0xBTl9IT1RQTFVHX1NIVVRET1dOKTsKKyNlbmRpZgorCXA4MDIxMW5ldGRldl9zaHV0ZG93bigpOworICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzIFVubG9hZGVkXG4iLCB2ZXJzaW9uKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm47Cit9CisKK0VYUE9SVF9TWU1CT0wocDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCk7CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3dsYW5kZXYpOworRVhQT1JUX1NZTUJPTChwODAyMTFuZXRkZXZfcngpOworRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3dsYW5kZXYpOworRVhQT1JUX1NZTUJPTCh3bGFuX3NldHVwKTsKK0VYUE9SVF9TWU1CT0wod2xhbl91bnNldHVwKTsKK0VYUE9SVF9TWU1CT0wocDgwMjExX3N1c3BlbmQpOworRVhQT1JUX1NZTUJPTChwODAyMTFfcmVzdW1lKTsKKworRVhQT1JUX1NZTUJPTChwODAyMTFza2JfZnJlZSk7CitFWFBPUlRfU1lNQk9MKHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKTsKKworRVhQT1JUX1NZTUJPTChwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTRlOWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qIHA4MDIxMW1zZy5oCisqCisqIE1hY3JvcywgY29uc3RhbnRzLCB0eXBlcywgYW5kIGZ1bmNzIGZvciByZXEgYW5kIGluZCBtZXNzYWdlcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTVNHX0gKKyNkZWZpbmUgX1A4MDIxMU1TR19ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisjZGVmaW5lIE1TR19CVUZGX0xFTgkJNDAwMAorI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYCTE2CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLSBNZXNzYWdlIFN0cnVjdHVyZSBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJvdG90eXBlIG1zZyB0eXBlICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZworeworCVVJTlQzMgltc2djb2RlOworCVVJTlQzMgltc2dsZW47CisJVUlOVDgJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ2QKK3sKKwlVSU5UMzIJbXNnY29kZTsKKwlVSU5UMzIJbXNnbGVuOworCVVJTlQ4CWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJVUlOVDgJYXJnc1swXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnZF90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworI2VuZGlmICAvKiBfUDgwMjExTVNHX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWY4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKQEAgLTAsMCArMSwxNTAyIEBACisvKiBzcmMvcDgwMjExL3A4MDIxMWtuZXRkZXYuYworKgorKiBMaW51eCBLZXJuZWwgbmV0IGRldmljZSBpbnRlcmZhY2UKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhlIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgYSBMaW51eCBuZXR3b3JrIGRldmljZSBhcmUgZGVmaW5lZCBoZXJlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjZW5kaWYKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIF9fTk9fVkVSU0lPTl9fCQkvKiBwcmV2ZW50IHRoZSBzdGF0aWMgZGVmaW5pdGlvbiAqLworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2NfcDgwMjExOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyogU3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qIG5ldGRldmljZSBtZXRob2QgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4oIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldik7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKTsKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dChuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBmYyk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcDgwMjExbmV0ZGV2X3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zdGFydHVwCisqCisqIEluaXRpYWxpemUgdGhlIHdsYW5kZXZpY2UvbmV0ZGV2aWNlIHBhcnQgb2YgODAyLjExIHNlcnZpY2VzIGF0CisqIGxvYWQgdGltZS4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFuZXRkZXZfc3RhcnR1cCh2b2lkKQoreworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlpZiAoaW5pdF9uZXQucHJvY19uZXQgIT0gTlVMTCkgeworCQlwcm9jX3A4MDIxMSA9IGNyZWF0ZV9wcm9jX2VudHJ5KAorCQkJCSJwODAyMTEiLAorCQkJCShTX0lGRElSfFNfSVJVR098U19JWFVHTyksCisJCQkJaW5pdF9uZXQucHJvY19uZXQpOworCX0KKyNlbmRpZgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zaHV0ZG93bgorKgorKiBTaHV0ZG93biB0aGUgd2xhbmRldmljZS9uZXRkZXZpY2UgcGFydCBvZiA4MDIuMTEgc2VydmljZXMgYXQKKyogdW5sb2FkIHRpbWUuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMW5ldGRldl9zaHV0ZG93bih2b2lkKQoreworCURCRkVOVEVSOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKHByb2NfcDgwMjExICE9IE5VTEwpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInA4MDIxMSIsIGluaXRfbmV0LnByb2NfbmV0KTsKKwl9CisjZW5kaWYKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9pbml0CisqCisqIEluaXQgbWV0aG9kIGZvciBhIExpbnV4IG5ldGRldmljZS4gIENhbGxlZCBpbiByZXNwb25zZSB0bworKiByZWdpc3Rlcl9uZXRkZXYuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCURCRkVOVEVSOworCS8qIENhbGxlZCBpbiByZXNwb25zZSB0byByZWdpc3Rlcl9uZXRkZXYgKi8KKwkvKiBUaGlzIGlzIHVzdWFsbHkgdGhlIHByb2JlIGZ1bmN0aW9uLCBidXQgdGhlIHByb2JlIGhhcyAqLworCS8qIGFscmVhZHkgYmVlbiBkb25lIGJ5IHRoZSBNU0QgYW5kIHRoZSBjcmVhdGVfa2RldiAqLworCS8qIGZ1bmN0aW9uLiAgQWxsIHdlIGRvIGhlcmUgaXMgcmV0dXJuIHN1Y2Nlc3MgKi8KKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cworKgorKiBTdGF0aXN0aWNzIHJldHJpZXZhbCBmb3IgbGludXggbmV0ZGV2aWNlcy4gIEhlcmUgd2UncmUgcmVwb3J0aW5nCisqIHRoZSBMaW51eCBpL2YgbGV2ZWwgc3RhdGlzdGljcy4gIEhlbmNlLCBmb3IgdGhlIHByaW1hcnkgbnVtYmVycywKKyogd2UgZG9uJ3Qgd2FudCB0byByZXBvcnQgdGhlIG51bWJlcnMgZnJvbSB0aGUgTUlCLiAgRXZlbnR1YWxseSwKKyogaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGNvbGxlY3Qgc29tZSBvZiB0aGUgZXJyb3IgY291bnRlcnMgdGhvdWdoLgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0ZGV2aWNlCisqCisqIFJldHVybnM6CisqCXRoZSBhZGRyZXNzIG9mIHRoZSBzdGF0aXN0aWNzIHN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqCitwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKW5ldGRldi0+cHJpdjsKKwlEQkZFTlRFUjsKKworCS8qIFRPRE86IHJldmlldyB0aGUgTUlCIHN0YXRzIGZvciBpdGVtcyB0aGF0IGNvcnJlc3BvbmQgdG8KKwkJbGludXggc3RhdHMgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuICYod2xhbmRldi0+bGludXhfc3RhdHMpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X29wZW4KKyoKKyogTGludXggbmV0ZGV2aWNlIG9wZW4gbWV0aG9kLiAgRm9sbG93aW5nIGEgc3VjY2Vzc2Z1bCBjYWxsIGhlcmUsCisqIHRoZSBkZXZpY2UgaXMgc3VwcG9zZWQgdG8gYmUgcmVhZHkgZm9yIHR4IGFuZCByeC4gIEluIG91cgorKiBzaXR1YXRpb24gdGhhdCBtYXkgbm90IGJlIGVudGlyZWx5IHRydWUgZHVlIHRvIHRoZSBzdGF0ZSBvZiB0aGUKKyogTUFDIGJlbG93LgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICkKK3sKKwlpbnQgCQlyZXN1bHQgPSAwOyAvKiBzdWNjZXNzICovCisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopKG5ldGRldi0+cHJpdik7CisKKwlEQkZFTlRFUjsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgTVNEIGlzIHJ1bm5pbmcgKi8KKwlpZiAoIHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcgKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFRlbGwgdGhlIE1TRCB0byBvcGVuICovCisJaWYgKCB3bGFuZGV2LT5vcGVuICE9IE5VTEwpIHsKKwkJcmVzdWx0ID0gd2xhbmRldi0+b3Blbih3bGFuZGV2KTsKKwkJaWYgKCByZXN1bHQgPT0gMCApIHsKKyNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMyw0MykgKQorCQkJbmV0ZGV2LT5pbnRlcnJ1cHQgPSAwOworI2VuZGlmCisJCQlwODAyMTFuZXRkZXZfc3RhcnRfcXVldWUod2xhbmRldik7CisJCQl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX09QRU47CisJCX0KKwl9IGVsc2UgeworCQlyZXN1bHQgPSAtRUFHQUlOOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zdG9wCisqCisqIExpbnV4IG5ldGRldmljZSBzdG9wIChjbG9zZSkgbWV0aG9kLiAgRm9sbG93aW5nIHRoaXMgY2FsbCwKKyogbm8gZnJhbWVzIHNob3VsZCBnbyB1cCBvciBkb3duIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuCisqCisqIEFyZ3VtZW50czoKKyoJbmV0ZGV2CQlMaW51eCBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKQoreworCWludAkJcmVzdWx0ID0gMDsKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KikobmV0ZGV2LT5wcml2KTsKKworCURCRkVOVEVSOworCisJaWYgKCB3bGFuZGV2LT5jbG9zZSAhPSBOVUxMICkgeworCQlyZXN1bHQgPSB3bGFuZGV2LT5jbG9zZSh3bGFuZGV2KTsKKwl9CisKKwlwODAyMTFuZXRkZXZfc3RvcF9xdWV1ZSh3bGFuZGV2KTsKKwl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9yeAorKgorKiBGcmFtZSByZWNlaXZlIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgbWFjIHNwZWNpZmljIGRyaXZlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKglza2IJCXNrYnVmZiBjb250YWluaW5nIGEgZnVsbCA4MDIuMTEgZnJhbWUuCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyogU2lkZSBlZmZlY3RzOgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiICkKK3sKKwlEQkZFTlRFUjsKKworCS8qIEVucXVldWUgZm9yIHBvc3QtaXJxIHByb2Nlc3NpbmcgKi8KKwlza2JfcXVldWVfdGFpbCgmd2xhbmRldi0+bnNkX3J4cSwgc2tiKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJndsYW5kZXYtPnJ4X2JoKTsKKworICAgICAgICBEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9yeF9iaAorKgorKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGFsbCByZWNlaXZlZCBmcmFtZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyBhIGZ1bGwgODAyLjExIGZyYW1lLgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExbmV0ZGV2X3J4X2JoKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgYXJnOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCW5ldGRldmljZV90ICAgICAqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCXA4MDIxMV9oZHJfYTNfdCAqaGRyOworCVVJTlQxNiBmYzsKKworICAgICAgICBEQkZFTlRFUjsKKworCS8qIExldCdzIGVtcHR5IG91ciBvdXIgcXVldWUgKi8KKwl3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmd2xhbmRldi0+bnNkX3J4cSkpICkgeworCQlpZiAod2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCisJCQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikgeworCQkJCS8qIFJBVyBmcmFtZTsgd2Ugc2hvdWxkbid0IGNvbnZlcnQgaXQgKi8KKwkJCQkvLyBYWFggQXBwZW5kIHRoZSBQcmlzbSBIZWFkZXIgaGVyZSBpbnN0ZWFkLgorCisJCQkJLyogc2V0IHVwIHZhcmlvdXMgZGF0YSBmaWVsZHMgKi8KKwkJCQlza2ItPmRldiA9IGRldjsKKwkJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMTFfUkFXKTsKKwkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfcGFja2V0cysrOworCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCW5ldGlmX3J4X25pKHNrYik7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWhkciA9IChwODAyMTFfaGRyX2EzX3QgKilza2ItPmRhdGE7CisJCQkJZmMgPSBpZWVlMmhvc3QxNihoZHItPmZjKTsKKwkJCQlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGZjKSkgeworCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIHBlcmZvcm0gbWNhc3QgZmlsdGVyaW5nICovCisJCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCQkJLyogYWxsb3cgbXkgbG9jYWwgYWRkcmVzcyB0aHJvdWdoICovCisJCQkJCWlmIChtZW1jbXAoaGRyLT5hMSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTikgIT0gMCkgeworCQkJCQkJLyogYnV0IHJlamVjdCBhbnl0aGluZyBlbHNlIHRoYXQgaXNuJ3QgbXVsdGljYXN0ICovCisJCQkJCQlpZiAoIShoZHItPmExWzBdICYgMHgwMSkpIHsKKwkJCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoIHNrYl9wODAyMTFfdG9fZXRoZXIod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiKSA9PSAwICkgeworCQkJCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCW5ldGlmX3J4X25pKHNrYik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlXTEFOX0xPR19ERUJVRygxLCAicDgwMjExX3RvX2V0aGVyIGZhaWxlZC5cbiIpOworCQkJfQorCQl9CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKyAgICAgICAgREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQKKyoKKyogTGludXggbmV0ZGV2aWNlIG1ldGhvZCBmb3IgdHJhbnNtaXR0aW5nIGEgZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJc2tiCUxpbnV4IHNrX2J1ZmYgY29udGFpbmluZyB0aGUgZnJhbWUuCisqCW5ldGRldglMaW51eCBuZXRkZXZpY2UuCisqCisqIFNpZGUgZWZmZWN0czoKKyoJSWYgdGhlIGxvd2VyIGxheWVycyByZXBvcnQgdGhhdCBidWZmZXJzIGFyZSBmdWxsLiBuZXRkZXYtPnRidXN5CisqCXdpbGwgYmUgc2V0IHRvIHByZXZlbnQgaGlnaGVyIGxheWVycyBmcm9tIHNlbmRpbmcgbW9yZSB0cmFmZmljLgorKgorKglOb3RlOiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8sIGhpZ2hlciBsYXllcnMgcmV0YWluCisqCSAgICAgIG93bmVyc2hpcCBvZiB0aGUgc2tiLgorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJdHhyZXN1bHQgPSAtMTsKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJcDgwMjExX2hkcl90ICAgIHA4MDIxMV9oZHI7CisJcDgwMjExX21ldGF3ZXBfdCBwODAyMTFfd2VwOworCisJREJGRU5URVI7CisKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCisgICAgICAgIGlmICh3bGFuZGV2LT5zdGF0ZSAhPSBXTEFOX0RFVklDRV9PUEVOKSB7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbXNldCgmcDgwMjExX2hkciwgMCwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCW1lbXNldCgmcDgwMjExX3dlcCwgMCwgc2l6ZW9mKHA4MDIxMV9tZXRhd2VwX3QpKTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQqKSYobmV0ZGV2LT50YnVzeSkpICE9IDAgKSB7CisJCS8qIFdlJ3ZlIGJlZW4gY2FsbGVkIHcvIHRidXN5IHNldCwgaGFzIHRoZSB0eCAqLworCQkvKiBwYXRoIHN0YWxsZWQ/ICAgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgImNhbGxlZCB3aGVuIHRidXN5IHNldFxuIik7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKyNlbHNlCisJaWYgKCBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiBxdWV1ZSBzdG9wcGVkLlxuIik7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIE5vIHRpbWVvdXQgaGFuZGxpbmcgaGVyZSwgMi4zLjM4KyBrZXJuZWxzIGNhbGwgdGhlCisJICogdGltZW91dCBmdW5jdGlvbiBkaXJlY3RseS4KKwkgKiBUT0RPOiBBZGQgdGltZW91dCBoYW5kbGluZy4KKwkqLworI2VuZGlmCisKKwkvKiBDaGVjayB0byBzZWUgdGhhdCBhIHZhbGlkIG1vZGUgaXMgc2V0ICovCisJc3dpdGNoKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgorCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBNb2RlIGlzbid0IHNldCB5ZXQsIGp1c3QgZHJvcCB0aGUgZnJhbWUKKwkJICogYW5kIHJldHVybiBzdWNjZXNzIC4KKwkJICogVE9ETzogd2UgbmVlZCBhIHNhbmVyIHdheSB0byBoYW5kbGUgdGhpcworCQkgKi8KKwkJaWYoc2tiLT5wcm90b2NvbCAhPSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJCXA4MDIxMW5ldGRldl9zdGFydF9xdWV1ZSh3bGFuZGV2KTsKKwkJCVdMQU5fTE9HX05PVElDRSgKKwkJCQkiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOworCQkJd2xhbmRldi0+bGludXhfc3RhdHMudHhfZHJvcHBlZCsrOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIENoZWNrIGZvciByYXcgdHJhbnNtaXRzICovCisJaWYoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlyZXN1bHQgPSAxOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJLyogbW92ZSB0aGUgaGVhZGVyIG92ZXIgKi8KKwkJbWVtY3B5KCZwODAyMTFfaGRyLCBza2ItPmRhdGEsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisJfSBlbHNlIHsKKwkJaWYgKCBza2JfZXRoZXJfdG9fcDgwMjExKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYiwgJnA4MDIxMV9oZHIsICZwODAyMTFfd2VwKSAhPSAwICkgeworCQkJLyogY29udmVydCBmYWlsZWQgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJldGhlcl90b184MDIxMSglZCkgZmFpbGVkLlxuIiwKKwkJCQkJd2xhbmRldi0+ZXRoY29udik7CisJCQlyZXN1bHQgPSAxOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCB3bGFuZGV2LT50eGZyYW1lID09IE5VTEwgKSB7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJd2xhbmRldi0+bGludXhfc3RhdHMudHhfcGFja2V0cysrOworCS8qIGNvdW50IG9ubHkgdGhlIHBhY2tldCBwYXlsb2FkICovCisJd2xhbmRldi0+bGludXhfc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwl0eHJlc3VsdCA9IHdsYW5kZXYtPnR4ZnJhbWUod2xhbmRldiwgc2tiLCAmcDgwMjExX2hkciwgJnA4MDIxMV93ZXApOworCisJaWYgKCB0eHJlc3VsdCA9PSAwKSB7CisJCS8qIHN1Y2Nlc3MgYW5kIG1vcmUgYnVmICovCisJCS8qIGF2YWlsLCByZTogaHdfdHhkYXRhICovCisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCQlyZXN1bHQgPSAwOworCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDEgKSB7CisJCS8qIHN1Y2Nlc3MsIG5vIG1vcmUgYXZhaWwgKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKKwkJLyogbmV0ZGV2LT50YnVzeSA9IDE7ICBkb24ndCBzZXQgaGVyZSwgaXJxaGRsciAqLworCQkvKiAgIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBpdCAqLworCQlyZXN1bHQgPSAwOworCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDIgKSB7CisJCS8qIGFsbG9jIGZhaWx1cmUsIGRyb3AgZnJhbWUgKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgYWxsb2NfZmFpbFxuIik7CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIHsKKwkJLyogYnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeSwgZHJvcCBmcmFtZS4gKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgZnVsbCBvciBidXN5XG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKKyBmYWlsZWQ6CisJLyogRnJlZSB1cCB0aGUgV0VQIGJ1ZmZlciBpZiBpdCdzIG5vdCB0aGUgc2FtZSBhcyB0aGUgc2tiICovCisJaWYgKChwODAyMTFfd2VwLmRhdGEpICYmIChwODAyMTFfd2VwLmRhdGEgIT0gc2tiLT5kYXRhKSkKKwkJa2ZyZWUocDgwMjExX3dlcC5kYXRhKTsKKworCS8qIHdlIGFsd2F5cyBmcmVlIHRoZSBza2IgaGVyZSwgbmV2ZXIgaW4gYSBsb3dlciBsZXZlbC4gKi8KKwlpZiAoIXJlc3VsdCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdAorKgorKiBDYWxsZWQgZnJvbSBoaWdoZXIgbGF2ZXJzIHdoZW5ldmVyIHRoZXJlJ3MgYSBuZWVkIHRvIHNldC9jbGVhcgorKiBwcm9taXNjdW91cyBtb2RlIG9yIHJld3JpdGUgdGhlIG11bHRpY2FzdCBsaXN0LgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXZpY2VfdCAqZGV2KQoreworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJLyogVE9ETzogIHJlYWwgbXVsdGljYXN0IHN1cHBvcnQgYXMgd2VsbCAqLworCisJaWYgKHdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCkKKwkJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0KHdsYW5kZXYsIGRldik7CisKKwlEQkZFWElUOworfQorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKworc3RhdGljIGludCBwODAyMTFuZXRkZXZfZXRodG9vbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlVSU5UMzIgZXRoY21kOworCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKKwlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwltZW1zZXQoJmVkYXRhLCAwLCBzaXplb2YoZWRhdGEpKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZXRoY21kLCB1c2VyYWRkciwgc2l6ZW9mKGV0aGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN3aXRjaCAoZXRoY21kKSB7CisJY2FzZSBFVEhUT09MX0dEUlZJTkZPOgorCQlpbmZvLmNtZCA9IGV0aGNtZDsKKwkJc25wcmludGYoaW5mby5kcml2ZXIsIHNpemVvZihpbmZvLmRyaXZlciksICJwODAyMTFfJXMiLAorCQkJIHdsYW5kZXYtPm5zZG5hbWUpOworCQlzbnByaW50ZihpbmZvLnZlcnNpb24sIHNpemVvZihpbmZvLnZlcnNpb24pLCAiJXMiLAorCQkJIFdMQU5fUkVMRUFTRSk7CisKKwkJLy8gaW5mby5md192ZXJzaW9uCisJCS8vIGluZm8uYnVzX2luZm8KKworCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKyNpZmRlZiBFVEhUT09MX0dMSU5LCisJY2FzZSBFVEhUT09MX0dMSU5LOgorCQllZGF0YS5jbWQgPSBldGhjbWQ7CisKKwkJaWYgKHdsYW5kZXYtPmxpbmtzdGF0dXMgJiYKKwkJICAgICh3bGFuZGV2LT5tYWNtb2RlICE9IFdMQU5fTUFDTU9ERV9OT05FKSkgeworCQkJZWRhdGEuZGF0YSA9IDE7CisJCX0gZWxzZSB7CisJCQllZGF0YS5kYXRhID0gMDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9kb19pb2N0bAorKgorKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCBvbiBvbmUgb2Ygb3VyIGRldmljZXMuICBFdmVyeXRoaW5nIExpbnV4CisqIGlvY3RsIHNwZWNpZmljIGlzIGRvbmUgaGVyZS4gIFRoZW4gd2UgcGFzcyB0aGUgY29udGVudHMgb2YgdGhlCisqIGlmci0+ZGF0YSB0byB0aGUgcmVxdWVzdCBtZXNzYWdlIGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CUxpbnV4IGtlcm5lbCBuZXRkZXZpY2UKKyoJaWZyCU91ciBwcml2YXRlIGlvY3RsIHJlcXVlc3Qgc3RydWN0dXJlLCB0eXBlZCBmb3IgdGhlCisqCQlnZW5lcmljIHN0cnVjdCBpZnJlcSBzbyB3ZSBjYW4gdXNlIHB0ciB0byBmdW5jCisqCQl3L28gY2FzdC4KKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuICBQb3NzaWJsZSB2YWx1ZXM6CisqCQktRU5FVERPV04gRGV2aWNlIGlzbid0IHVwLgorKgkJLUVCVVNZCWNtZCBhbHJlYWR5IGluIHByb2dyZXNzCisqCQktRVRJTUUJcDgwMjExIGNtZCB0aW1lZCBvdXQgKE1TRCBtYXkgaGF2ZSBpdHMgb3duIHRpbWVycykKKyoJCS1FRkFVTFQgbWVtb3J5IGZhdWx0IGNvcHlpbmcgbXNnIGZyb20gdXNlciBidWZmZXIKKyoJCS1FTk9NRU0gdW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBtc2cgYnVmZmVyCisqCQktRU5PU1lTCWJhZCBtYWdpYywgaXQgdGhlIGNtZCByZWFsbHkgZm9yIHVzPworKgkJLUVJTlRSCXNsZWVwaW5nIG9uIGNtZCwgYXdha2VuZWQgYnkgc2lnbmFsLCBjbWQgY2FuY2VsbGVkLgorKgorKiBDYWxsIENvbnRleHQ6CisqCVByb2Nlc3MgdGhyZWFkIChpb2N0bCBjYWxsZXIpLiAgVE9ETzogU01QIHN1cHBvcnQgbWF5IHJlcXVpcmUKKyoJbG9ja3MuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9kb19pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXA4MDIxMWlvY3RsX3JlcV90CSpyZXEgPSAocDgwMjExaW9jdGxfcmVxX3QqKWlmcjsKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCVVJTlQ4CQkJKm1zZ2J1ZjsKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0RFQlVHKDIsICJyeCdkIGlvY3RsLCBjbWQ9JWQsIGxlbj0lZFxuIiwgY21kLCByZXEtPmxlbik7CisKKyNpZiBXSVJFTEVTU19FWFQgPCAxMworCS8qIElzIHRoaXMgYSB3aXJlbGVzcyBleHRlbnNpb25zIGlvY3RsPyAqLworCWlmICgoY21kID49IFNJT0NJV0ZJUlNUKSAmJiAoY21kIDw9IFNJT0NJV0xBU1QpKSB7CisJCWlmICgocmVzdWx0ID0gcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKGRldiwgaWZyLCBjbWQpKQorCQkgICAgIT0gKC1FT1BOT1RTVVBQKSkgeworCQkJZ290byBiYWlsOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBTSU9DRVRIVE9PTAorCWlmIChjbWQgPT0gU0lPQ0VUSFRPT0wpIHsKKwkJcmVzdWx0ID0gcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopIGlmci0+aWZyX2RhdGEpOworCQlnb3RvIGJhaWw7CisJfQorI2VuZGlmCisKKwkvKiBUZXN0IHRoZSBtYWdpYywgYXNzdW1lIGlmciBpcyBnb29kIGlmIGl0J3MgdGhlcmUgKi8KKwlpZiAoIHJlcS0+bWFnaWMgIT0gUDgwMjExX0lPQ1RMX01BR0lDICkgeworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKCBjbWQgPT0gUDgwMjExX0lGVEVTVCApIHsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBiYWlsOworCX0gZWxzZSBpZiAoIGNtZCAhPSBQODAyMTFfSUZSRVEgKSB7CisJCXJlc3VsdCA9IC1FTk9TWVM7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1ZiBvZiBzaXplIHJlcS0+bGVuICovCisJaWYgKChtc2didWYgPSBrbWFsbG9jKCByZXEtPmxlbiwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmICggY29weV9mcm9tX3VzZXIoIG1zZ2J1ZiwgKHZvaWQgX191c2VyICopIHJlcS0+ZGF0YSwgcmVxLT5sZW4pICkgeworCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXYsIG1zZ2J1Zik7CisJCX0KKworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaWYgKCBjb3B5X3RvX3VzZXIoICh2b2lkIF9fdXNlciAqKSByZXEtPmRhdGEsIG1zZ2J1ZiwgcmVxLT5sZW4pKSB7CisJCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJCX0KKwkJfQorCQlrZnJlZShtc2didWYpOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJfQorYmFpbDoKKwlEQkZFWElUOworCisJcmV0dXJuIHJlc3VsdDsgLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzCisqCisqIEhhbmRsZXMgdGhlIGlvY3RsIGZvciBjaGFuZ2luZyB0aGUgTUFDQWRkcmVzcyBvZiBhIG5ldGRldmljZQorKgorKiByZWZlcmVuY2VzOiBsaW51eC9uZXRkZXZpY2UuaCBhbmQgZHJpdmVycy9uZXQvbmV0X2luaXQuYworKgorKiBOT1RFOiBbTVNNXSBXZSBvbmx5IHByZXZlbnQgYWRkcmVzcyBjaGFuZ2VzIHdoZW4gdGhlIG5ldGRldiBpcworKiB1cC4gIFdlIGRvbid0IGNvbnRyb2wgYW55dGhpbmcgYmFzZWQgb24gZG90MTEgc3RhdGUuICBJZiB0aGUKKyogYWRkcmVzcyBpcyBjaGFuZ2VkIG9uIGEgU1RBIHRoYXQncyBjdXJyZW50bHkgYXNzb2NpYXRlZCwgeW91CisqIHdpbGwgcHJvYmFibHkgbG9zZSB0aGUgYWJpbGl0eSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgZnJhbWVzLgorKiBKdXN0IGJlIGF3YXJlLiAgVGhlcmVmb3JlLCB0aGlzIHNob3VsZCB1c3VhbGx5IG9ubHkgYmUgZG9uZQorKiBwcmlvciB0byBzY2FuL2pvaW4vYXV0aC9hc3NvYy4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJbmV0ZGV2aWNlIHN0cnVjdAorKglhZGRyCXRoZSBuZXcgTUFDQWRkcmVzcyAoYSBzdHJ1Y3QpCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLiAgUG9zc2libGUgdmFsdWVzOgorKgkJLUVCVVNZCWRldmljZSBpcyBidXNzeSAoY21kIG5vdCBwb3NzaWJsZSkKKyoJCS1hbmQgZXJyb3JzIHJldHVybmVkIGJ5OiBwODAyMTFyZXFfZG9yZXF1ZXN0KC4uKQorKgorKiBieTogQ29sbGluIFIuIE11bGxpbmVyIDxjb2xsaW5AbXVsbGluZXIub3JnPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyCQkJKm5ld19hZGRyID0gYWRkcjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJZG90MTFyZXE7CisJcDgwMjExaXRlbV91bmszOTJfdAkJKm1pYmF0dHI7CisJcDgwMjExaXRlbV9wc3RyNl90CQkqbWFjYWRkcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90CQkqcmVzdWx0Y29kZTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCS8qIElmIHdlJ3JlIHJ1bm5pbmcsIHdlIGRvbid0IGFsbG93IE1BQyBhZGRyZXNzIGNoYW5nZXMgKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJaWYgKCBkZXYtPnN0YXJ0KSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorI2Vsc2UKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorI2VuZGlmCisKKwkvKiBTZXQgdXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycy4gKi8KKwltaWJhdHRyID0gJmRvdDExcmVxLm1pYmF0dHJpYnV0ZTsKKwltYWNhZGRyID0gKHA4MDIxMWl0ZW1fcHN0cjZfdCopJm1pYmF0dHItPmRhdGE7CisJcmVzdWx0Y29kZSA9ICZkb3QxMXJlcS5yZXN1bHRjb2RlOworCisJLyogU2V0IHVwIGEgZG90MTFyZXFfbWlic2V0ICovCisJbWVtc2V0KCZkb3QxMXJlcSwgMCwgc2l6ZW9mKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCkpOworCWRvdDExcmVxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpOworCW1lbWNweShkb3QxMXJlcS5kZXZuYW1lLAorCQkoKHdsYW5kZXZpY2VfdCopKGRldi0+cHJpdikpLT5uYW1lLAorCQlXTEFOX0RFVk5BTUVMRU5fTUFYIC0gMSk7CisKKwkvKiBTZXQgdXAgdGhlIG1pYmF0dHJpYnV0ZSBhcmd1bWVudCAqLworCW1pYmF0dHItPmRpZCA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXRfbWliYXR0cmlidXRlOworCW1pYmF0dHItPnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltaWJhdHRyLT5sZW4gPSBzaXplb2YobWliYXR0ci0+ZGF0YSk7CisKKwltYWNhZGRyLT5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3M7CisJbWFjYWRkci0+c3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1hY2FkZHItPmxlbiA9IHNpemVvZihtYWNhZGRyLT5kYXRhKTsKKwltYWNhZGRyLT5kYXRhLmxlbiA9IFdMQU5fQUREUl9MRU47CisJbWVtY3B5KCZtYWNhZGRyLT5kYXRhLmRhdGEsIG5ld19hZGRyLT5zYV9kYXRhLCBXTEFOX0FERFJfTEVOKTsKKworCS8qIFNldCB1cCB0aGUgcmVzdWx0Y29kZSBhcmd1bWVudCAqLworCXJlc3VsdGNvZGUtPmRpZCA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXRfcmVzdWx0Y29kZTsKKwlyZXN1bHRjb2RlLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCXJlc3VsdGNvZGUtPmxlbiA9IHNpemVvZihyZXN1bHRjb2RlLT5kYXRhKTsKKwlyZXN1bHRjb2RlLT5kYXRhID0gMDsKKworCS8qIG5vdyBmaXJlIHRoZSByZXF1ZXN0ICovCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdChkZXYtPnByaXYsIChVSU5UOCopJmRvdDExcmVxKTsKKworCS8qIElmIHRoZSByZXF1ZXN0IHdhc24ndCBzdWNjZXNzZnVsLCByZXBvcnQgYW4gZXJyb3IgYW5kIGRvbid0CisJICogY2hhbmdlIHRoZSBuZXRkZXYgYWRkcmVzcworCSAqLworCWlmICggcmVzdWx0ICE9IDAgfHwgcmVzdWx0Y29kZS0+ZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCQlXTEFOX0xPR19FUlJPUigKKwkJIkxvdy1sZXZlbCBkcml2ZXIgZmFpbGVkIGRvdDExcmVxX21pYnNldChkb3QxMU1BQ0FkZHJlc3MpLlxuIik7CisJCXJlc3VsdCA9IC1FQUREUk5PVEFWQUlMOworCX0gZWxzZSB7CisJCS8qIGV2ZXJ5dGhpbmcncyBvaywgY2hhbmdlIHRoZSBhZGRyIGluIG5ldGRldiAqLworCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbmV3X2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3bGFuX2NoYW5nZV9tdHUobmV0ZGV2aWNlX3QgKmRldiwgaW50IG5ld19tdHUpCit7CisJREJGRU5URVI7CisJLy8gMjMxMiBpcyBtYXggODAyLjExIHBheWxvYWQsIDIwIGlzIG92ZXJoZWFkLCAoZXRoZXIgKyBsbGMgK3NuYXApCisJLy8gYW5kIGFub3RoZXIgOCBmb3Igd2VwLgorICAgICAgICBpZiAoIChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gKDIzMTIgLSAyMCAtIDgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7CisKKwlEQkZFWElUOworCisgICAgICAgIHJldHVybiAwOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHdsYW5fc2V0dXAKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGV0aGVyX3NldHVwLiAgSGVyZQorKiB3ZSBzZXQgdXAgYW55IG1lbWJlcnMgb2YgdGhlIHdsYW5kZXZpY2Ugc3RydWN0dXJlIHRoYXQgYXJlIGNvbW1vbgorKiB0byBhbGwgZGV2aWNlcy4gIEFkZGl0aW9uYWxseSwgd2UgYWxsb2NhdGUgYSBsaW51eCAnc3RydWN0IGRldmljZScKKyogYW5kIHBlcmZvcm0gdGhlIHNhbWUgc2V0dXAgYXMgZXRoZXJfc2V0dXAuCisqCisqIE5vdGU6IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGNhbGxlciBoYXZlIHNldHVwIHRoZSB3bGFuZGV2LT5uYW1lCisqCXB0ciBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglTaG91bGQgYmUgcHJvY2VzcyB0aHJlYWQuICBXZSdsbCBhc3N1bWUgaXQgbWlnaHQgYmUKKyoJaW50ZXJydXB0IHRob3VnaC4gIFdoZW4gd2UgYWRkIHN1cHBvcnQgZm9yIHN0YXRpY2FsbHkKKyoJY29tcGlsZWQgZHJpdmVycywgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUKKyoJY29udGV4dCBvZiB0aGUga2VybmVsIHN0YXJ0dXAgY29kZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKwluZXRkZXZpY2VfdAkqZGV2OworCisJREJGRU5URVI7CisKKwkvKiBTZXQgdXAgdGhlIHdsYW5kZXYgKi8KKwl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKKwl3bGFuZGV2LT5ldGhjb252ID0gV0xBTl9FVEhDT05WXzgwMjFoOworCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCS8qIFNldCB1cCB0aGUgcnggcXVldWUgKi8KKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3bGFuZGV2LT5uc2RfcnhxKTsKKwl0YXNrbGV0X2luaXQoJndsYW5kZXYtPnJ4X2JoLAorCQkgICAgIHA4MDIxMW5ldGRldl9yeF9iaCwKKwkJICAgICAodW5zaWduZWQgbG9uZyl3bGFuZGV2KTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3QgZGV2aWNlICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YobmV0ZGV2aWNlX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIGRldiA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jIG5ldGRldi5cbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCW1lbXNldCggZGV2LCAwLCBzaXplb2YobmV0ZGV2aWNlX3QpKTsKKwkJZXRoZXJfc2V0dXAoZGV2KTsKKwkJd2xhbmRldi0+bmV0ZGV2ID0gZGV2OworCQlkZXYtPnByaXYgPSB3bGFuZGV2OworCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9CXA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0OworCQlkZXYtPmdldF9zdGF0cyA9CXA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzOworI2lmZGVmIEhBVkVfUFJJVkFURV9JT0NUTAorCQlkZXYtPmRvX2lvY3RsID0gCXA4MDIxMWtuZXRkZXZfZG9faW9jdGw7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01VTFRJQ0FTVAorCQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0OworI2VuZGlmCisJCWRldi0+aW5pdCA9CQlwODAyMTFrbmV0ZGV2X2luaXQ7CisJCWRldi0+b3BlbiA9CQlwODAyMTFrbmV0ZGV2X29wZW47CisJCWRldi0+c3RvcCA9CQlwODAyMTFrbmV0ZGV2X3N0b3A7CisKKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTCisjaWYgKChXSVJFTEVTU19FWFQgPCAxNykgJiYgKFdJUkVMRVNTX0VYVCA8IDIxKSkKKwkJZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0czsKKyNlbmRpZgorI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJCWRldi0+dGJ1c3kgPSAxOworCQlkZXYtPnN0YXJ0ID0gMDsKKyNlbHNlCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfQ0hBTkdFX01UVQorCQlkZXYtPmNoYW5nZV9tdHUgPSB3bGFuX2NoYW5nZV9tdHU7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFVF9NQUNfQUREUgorCQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9CXA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzOworI2VuZGlmCisjaWZkZWYgSEFWRV9UWF9USU1FT1VUCisJCWRldi0+dHhfdGltZW91dCAgICAgID0gICZwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQ7CisJCWRldi0+d2F0Y2hkb2dfdGltZW8gID0gICh3bGFuX3dhdGNoZG9nICogSFopIC8gMTAwMDsKKyNlbmRpZgorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHdsYW5fdW5zZXR1cAorKgorKiBUaGlzIGZ1bmN0aW9uIGlzIHBhaXJlZCB3aXRoIHRoZSB3bGFuX3NldHVwIHJvdXRpbmUuICBJdCBzaG91bGQKKyogYmUgY2FsbGVkIGFmdGVyIHVucmVnaXN0ZXJfd2xhbmRldi4gIEJhc2ljYWxseSwgYWxsIGl0IGRvZXMgaXMKKyogZnJlZSB0aGUgJ3N0cnVjdCBkZXZpY2UnIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHdsYW5kZXYuCisqIFdlIGRvIGl0IGhlcmUgYmVjYXVzZSB0aGUgJ3N0cnVjdCBkZXZpY2UnIGlzbid0IGFsbG9jYXRlZAorKiBleHBsaWNpdGx5IGluIHRoZSBkcml2ZXIgY29kZSwgaXQncyBkb25lIGluIHdsYW5fc2V0dXAuICBUbworKiBkbyB0aGUgZnJlZSBpbiB0aGUgZHJpdmVyIG1pZ2h0IHNlZW0gbGlrZSAnbWFnaWMnLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJU2hvdWxkIGJlIHByb2Nlc3MgdGhyZWFkLiAgV2UnbGwgYXNzdW1lIGl0IG1pZ2h0IGJlCisqCWludGVycnVwdCB0aG91Z2guICBXaGVuIHdlIGFkZCBzdXBwb3J0IGZvciBzdGF0aWNhbGx5CisqCWNvbXBpbGVkIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlCisqCWNvbnRleHQgb2YgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCisJdGFza2xldF9raWxsKCZ3bGFuZGV2LT5yeF9iaCk7CisKKwlpZiAod2xhbmRldi0+bmV0ZGV2ID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJjYWxsZWQgd2l0aG91dCB3bGFuZGV2LT5uZXRkZXYgc2V0LlxuIik7CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIHsKKwkJZnJlZV9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKwkJd2xhbmRldi0+bmV0ZGV2ID0gTlVMTDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHJlZ2lzdGVyX3dsYW5kZXYKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHJlZ2lzdGVyX25ldGRldi4gIFRoaXMgZnVuY3Rpb24KKyogaXMgY2FsbGVkIGFmdGVyIHRoZSBkcml2ZXIgaGFzIHN1Y2Nlc3NmdWxseSBwcm9iZWQgYW5kIHNldCB1cCB0aGUKKyogcmVzb3VyY2VzIGZvciB0aGUgZGV2aWNlLiAgSXQncyBub3cgcmVhZHkgdG8gYmVjb21lIGEgbmFtZWQgZGV2aWNlCisqIGluIHRoZSBMaW51eCBzeXN0ZW0uCisqCisqIEZpcnN0IHdlIGFsbG9jYXRlIGEgbmFtZSBmb3IgdGhlIGRldmljZSAoaWYgbm90IGFscmVhZHkgc2V0KSwgdGhlbgorKiB3ZSBjYWxsIHRoZSBMaW51eCBmdW5jdGlvbiByZWdpc3Rlcl9uZXRkZXZpY2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCWkgPSAwOworCW5ldGRldmljZV90CSpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisKKwlEQkZFTlRFUjsKKworCWkgPSBkZXZfYWxsb2NfbmFtZSh3bGFuZGV2LT5uZXRkZXYsICJ3bGFuJWQiKTsKKwlpZiAoaSA+PSAwKSB7CisJCWkgPSByZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKwl9CisJaWYgKGkgIT0gMCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKyNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSApCisJZGV2LT5uYW1lID0gd2xhbmRldi0+bmFtZTsKKyNlbHNlCisJc3RyY3B5KHdsYW5kZXYtPm5hbWUsIGRldi0+bmFtZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKHByb2NfcDgwMjExKSB7CisJCXdsYW5kZXYtPnByb2NkaXIgPSBwcm9jX21rZGlyKHdsYW5kZXYtPm5hbWUsIHByb2NfcDgwMjExKTsKKwkJaWYgKCB3bGFuZGV2LT5wcm9jZGlyICkKKwkJCXdsYW5kZXYtPnByb2N3bGFuZGV2ID0KKwkJCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ3bGFuZGV2IiwgMCwKKwkJCQkJCSAgICAgICB3bGFuZGV2LT5wcm9jZGlyLAorCQkJCQkJICAgICAgIHA4MDIxMW5ldGRldl9wcm9jX3JlYWQsCisJCQkJCQkgICAgICAgd2xhbmRldik7CisJCWlmICh3bGFuZGV2LT5uc2RfcHJvY19yZWFkKQorCQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgibnNkIiwgMCwKKwkJCQkJICAgICAgIHdsYW5kZXYtPnByb2NkaXIsCisJCQkJCSAgICAgICB3bGFuZGV2LT5uc2RfcHJvY19yZWFkLAorCQkJCQkgICAgICAgd2xhbmRldik7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19SRUdJU1RFUik7CisjZW5kaWYKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVucmVnaXN0ZXJfd2xhbmRldgorKgorKiBSb3VnaGx5IG1hdGNoZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdW5yZWdpc3Rlcl9uZXRkZXYuICBUaGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZW1vdmUgYSBuYW1lZCBkZXZpY2UgZnJvbSB0aGUgc3lzdGVtLgorKgorKiBGaXJzdCB3ZSB0ZWxsIGxpbnV4IHRoYXQgdGhlIGRldmljZSBzaG91bGQgbm8gbG9uZ2VyIGV4aXN0LgorKiBUaGVuIHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGtub3duIHdsYW4gZGV2aWNlcy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlwdHIgdG8gdGhlIHdsYW5kZXYgc3RydWN0dXJlIGZvciB0aGUKKyoJCQlpbnRlcmZhY2UuCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCUNhbiBiZSBlaXRoZXIgaW50ZXJydXB0IG9yIG5vdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfUkVNT1ZFKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlpZiAoIHdsYW5kZXYtPnByb2N3bGFuZGV2ICkgeworCQlyZW1vdmVfcHJvY19lbnRyeSgid2xhbmRldiIsIHdsYW5kZXYtPnByb2NkaXIpOworCX0KKwlpZiAoIHdsYW5kZXYtPm5zZF9wcm9jX3JlYWQgKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJuc2QiLCB3bGFuZGV2LT5wcm9jZGlyKTsKKwl9CisJaWYgKHdsYW5kZXYtPnByb2NkaXIpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkod2xhbmRldi0+bmFtZSwgcHJvY19wODAyMTEpOworCX0KKyNlbmRpZgorCisJdW5yZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKworCS8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIHJ4IHF1ZXVlICovCisJd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByb2NfcmVhZAorKgorKiBSZWFkIGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcDgwMjExLzxkZXZpY2U+L3dsYW5kZXYKKyoKKyogQXJndW1lbnRzOgorKglidWYKKyoJc3RhcnQKKyoJb2Zmc2V0CisqCWNvdW50CisqCWVvZgorKglkYXRhCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCUNhbiBiZSBlaXRoZXIgaW50ZXJydXB0IG9yIG5vdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorcDgwMjExbmV0ZGV2X3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpCit7CisJY2hhcgkgKnAgPSBwYWdlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgZGF0YTsKKworCURCRkVOVEVSOworCWlmIChvZmZzZXQgIT0gMCkgeworCQkqZW9mID0gMTsKKwkJZ290byBleGl0OworCX0KKworCXAgKz0gc3ByaW50ZihwLCAicDgwMjExIHZlcnNpb246ICVzICglcylcblxuIiwKKwkJICAgICBXTEFOX1JFTEVBU0UsIFdMQU5fQlVJTERfREFURSk7CisJcCArPSBzcHJpbnRmKHAsICJuYW1lICAgICAgIDogJXNcbiIsIHdsYW5kZXYtPm5hbWUpOworCXAgKz0gc3ByaW50ZihwLCAibnNkIG5hbWUgICA6ICVzXG4iLCB3bGFuZGV2LT5uc2RuYW1lKTsKKwlwICs9IHNwcmludGYocCwgImFkZHJlc3MgICAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzBdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzFdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzJdLAorCQkgICAgIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbM10sIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbNF0sIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbNV0pOworCXAgKz0gc3ByaW50ZihwLCAibnNkIGNhcHMgICA6ICVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9IQVJEV0FSRVdFUCkgPyAid2VwX2h3ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfVElFRFdFUCkgPyAid2VwX3RpZWQgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9OT0hPU1RXRVApID8gIndlcF9od19vbmx5ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfUEJDQykgPyAicGJjYyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFKSA/ICJzaG9ydF9wcmVhbWJsZSAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0FHSUxJVFkpID8gImFnaWxpdHkgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BUF9SRVRSQU5TTUlUKSA/ICJhcF9yZXRyYW5zbWl0ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCkgPyAiaHdfZnJhZyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOKSA/ICJhdXRvam9pbiAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX05PU0NBTikgPyAiIiA6ICJzY2FuICIpOworCisKKwlwICs9IHNwcmludGYocCwgImJzc2lkICAgICAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICB3bGFuZGV2LT5ic3NpZFswXSwgd2xhbmRldi0+YnNzaWRbMV0sIHdsYW5kZXYtPmJzc2lkWzJdLAorCQkgICAgIHdsYW5kZXYtPmJzc2lkWzNdLCB3bGFuZGV2LT5ic3NpZFs0XSwgd2xhbmRldi0+YnNzaWRbNV0pOworCisJcCArPSBzcHJpbnRmKHAsICJFbmFibGVkICAgIDogJXMlc1xuIiwKKwkJICAgICAod2xhbmRldi0+c2hvcnRwcmVhbWJsZSkgPyAic2hvcnRfcHJlYW1ibGUgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgPyAicHJpdmFjeSIgOiAiIik7CisKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gKHAgLSBwYWdlKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZAorKgorKiBIYXJkd2FyZSByZW1vdmVkIG5vdGlmaWNhdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkCisqIGltbWVkaWF0ZWx5IGFmdGVyIGFuIE1TRCBoYXMgZGV0ZWN0ZWQgdGhhdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQorKiBoYXMgYmVlbiB5YW5rZWQgb3V0IGZyb20gdW5kZXIgdXMuICBUaGUgcHJpbWFyeSB0aGluZ3Mgd2UgbmVlZAorKiB0byBkbyBhcmU6CisqICAgLSBNYXJrIHRoZSB3bGFuZGV2CisqICAgLSBQcmV2ZW50IGFueSBmdXJ0aGVyIHRyYWZmaWMgZnJvbSB0aGUga25ldGRldiBpL2YKKyogICAtIFByZXZlbnQgYW55IGZ1cnRoZXIgcmVxdWVzdHMgZnJvbSBtZ210IGkvZgorKiAgIC0gSWYgdGhlcmUgYXJlIGFueSB3YWl0cSdkIG1nbXQgcmVxdWVzdHMgb3IgbWdtdC1mcmFtZSBleGNoYW5nZXMsCisqICAgICBzaHV0IHRoZW0gZG93bi4KKyogICAtIENhbGwgdGhlIE1TRCBod3JlbW92ZWQgZnVuY3Rpb24uCisqCisqIFRoZSByZW1haW5kZXIgb2YgdGhlIGNsZWFudXAgd2lsbCBiZSBoYW5kbGVkIGJ5IHVucmVnaXN0ZXIoKS4KKyogT3VyIHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYXMgbXVjaCB0aWNrbGluZyBvZiB0aGUgTVNECisqIGFzIHBvc3NpYmxlIHNpbmNlIHRoZSBNU0QgaXMgYWxyZWFkeSBpbiBhICd3b3VuZGVkJyBzdGF0ZS4KKyoKKyogVE9ETzogQXMgbmV3IGZlYXR1cmVzIGFyZSBhZGRlZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyogICAgICAgdXBkYXRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglVc3VhbGx5IGludGVycnVwdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKwl3bGFuZGV2LT5od3JlbW92ZWQgPSAxOworCWlmICggd2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCQlwODAyMTFuZXRkZXZfc3RvcF9xdWV1ZSh3bGFuZGV2KTsKKwl9CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKHdsYW5kZXYtPm5ldGRldik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFfcnhfdHlwZWRyb3AKKyoKKyogQ2xhc3NpZmllcyB0aGUgZnJhbWUsIGluY3JlbWVudHMgdGhlIGFwcHJvcHJpYXRlIGNvdW50ZXIsIGFuZAorKiByZXR1cm5zIDB8MXwyIGluZGljYXRpbmcgd2hldGhlciB0aGUgZHJpdmVyIHNob3VsZCBoYW5kbGUsIGlnbm9yZSwgb3IKKyogZHJvcCB0aGUgZnJhbWUKKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJZmMJCWZyYW1lIGNvbnRyb2wgZmllbGQKKyoKKyogUmV0dXJuczoKKyoJemVybyBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRyaXZlciwKKyogICAgICAgb25lIGlmIHRoZSBmcmFtZSBzaG91bGQgYmUgaWdub3JlZAorKiAgICAgICBhbnl0aGluZyBlbHNlIG1lYW5zIHdlIGRyb3AgaXQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IGZjKQoreworCVVJTlQxNglmdHlwZTsKKwlVSU5UMTYJZnN0eXBlOworCWludAlkcm9wID0gMDsKKwkvKiBDbGFzc2lmeSBmcmFtZSwgaW5jcmVtZW50IGNvdW50ZXIgKi8KKwlmdHlwZSA9IFdMQU5fR0VUX0ZDX0ZUWVBFKGZjKTsKKwlmc3R5cGUgPSBXTEFOX0dFVF9GQ19GU1RZUEUoZmMpOworI2lmIDAKKwlXTEFOX0xPR19ERUJVRyg0LAorCQkicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKKyNlbmRpZgorCXN3aXRjaCAoIGZ0eXBlICkgeworCWNhc2UgV0xBTl9GVFlQRV9NR01UOgorCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKKwkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkJZHJvcCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBtZ210OlxuIik7CisJCXdsYW5kZXYtPnJ4Lm1nbXQrKzsKKwkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVNTT0NSRVE6CisJCQkvKiBwcmludGsoImFzc29jcmVxIik7ICovCisJCQl3bGFuZGV2LT5yeC5hc3NvY3JlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVNTT0NSRVNQOgorCQkJLyogcHJpbnRrKCJhc3NvY3Jlc3AiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmFzc29jcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFUToKKwkJCS8qIHByaW50aygicmVhc3NvY3JlcSIpOyAqLworCQkJd2xhbmRldi0+cngucmVhc3NvY3JlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFU1A6CisJCQkvKiBwcmludGsoInJlYXNzb2NyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5yZWFzc29jcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVE6CisJCQkvKiBwcmludGsoInByb2JlcmVxIik7ICovCisJCQl3bGFuZGV2LT5yeC5wcm9iZXJlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVNQOgorCQkJLyogcHJpbnRrKCJwcm9iZXJlc3AiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LnByb2JlcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQkVBQ09OOgorCQkJLyogcHJpbnRrKCJiZWFjb24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmJlYWNvbisrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVRJTToKKwkJCS8qIHByaW50aygiYXRpbSIpOyAqLworCQkJd2xhbmRldi0+cnguYXRpbSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfRElTQVNTT0M6CisJCQkvKiBwcmludGsoImRpc2Fzc29jIik7ICovCisJCQl3bGFuZGV2LT5yeC5kaXNhc3NvYysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVVUSEVOOgorCQkJLyogcHJpbnRrKCJhdXRoZW4iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmF1dGhlbisrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREVBVVRIRU46CisJCQkvKiBwcmludGsoImRlYXV0aGVuIik7ICovCisJCQl3bGFuZGV2LT5yeC5kZWF1dGhlbisrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBwcmludGsoInVua25vd24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4Lm1nbXRfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKwkJLyogcHJpbnRrKCJcbiIpOyAqLworCQlkcm9wID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIFdMQU5fRlRZUEVfQ1RMOgorCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKKwkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkJZHJvcCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBjdGw6XG4iKTsKKwkJd2xhbmRldi0+cnguY3RsKys7CisJCXN3aXRjaCggZnN0eXBlICkgeworCQljYXNlIFdMQU5fRlNUWVBFX1BTUE9MTDoKKwkJCS8qIHByaW50aygicHNwb2xsIik7ICovCisJCQl3bGFuZGV2LT5yeC5wc3BvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JUUzoKKwkJCS8qIHByaW50aygicnRzIik7ICovCisJCQl3bGFuZGV2LT5yeC5ydHMrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NUUzoKKwkJCS8qIHByaW50aygiY3RzIik7ICovCisJCQl3bGFuZGV2LT5yeC5jdHMrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FDSzoKKwkJCS8qIHByaW50aygiYWNrIik7ICovCisJCQl3bGFuZGV2LT5yeC5hY2srKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGRU5EOgorCQkJLyogcHJpbnRrKCJjZmVuZCIpOyAqLworCQkJd2xhbmRldi0+cnguY2ZlbmQrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGRU5EQ0ZBQ0s6CisJCQkvKiBwcmludGsoImNmZW5kY2ZhY2siKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmNmZW5kY2ZhY2srKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5jdGxfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKwkJLyogcHJpbnRrKCJcbiIpOyAqLworCQlkcm9wID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIFdMQU5fRlRZUEVfREFUQToKKwkJd2xhbmRldi0+cnguZGF0YSsrOworCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBT05MWToKKwkJCXdsYW5kZXYtPnJ4LmRhdGFvbmx5Kys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBX0NGQUNLOgorCQkJd2xhbmRldi0+cnguZGF0YV9jZmFjaysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRlBPTEw6CisJCQl3bGFuZGV2LT5yeC5kYXRhX2NmcG9sbCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRkFDS19DRlBPTEw6CisJCQl3bGFuZGV2LT5yeC5kYXRhX19jZmFja19jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX05VTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOm51bGxcbiIpOworCQkJd2xhbmRldi0+cngubnVsbCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0s6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrXG4iKTsKKwkJCXdsYW5kZXYtPnJ4LmNmYWNrKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRlBPTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmcG9sbFxuIik7CisJCQl3bGFuZGV2LT5yeC5jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLX0NGUE9MTDoKKwkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6Y2ZhY2tfY2Zwb2xsXG4iKTsKKwkJCXdsYW5kZXYtPnJ4LmNmYWNrX2NmcG9sbCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBwcmludGsoInVua25vd24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmRhdGFfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwl9CisJcmV0dXJuIGRyb3A7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworLyogTm90aWZ5IHVzZXJzcGFjZSB3aGVuIGEgbmV0ZGV2aWNlIGV2ZW50IG9jY3VycywKKyAqIGJ5IHJ1bm5pbmcgJy9zYmluL2hvdHBsdWcgbmV0JyB3aXRoIGNlcnRhaW4KKyAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQuCisgKi8KK2ludCBwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKmFjdGlvbikKK3sKKyAgICAgICAgY2hhciAqYXJndlszXSwgKmVudnBbN10sIGlmbmFtZVsxMiArIElGTkFNU0laXSwgYWN0aW9uX3N0clszMl07CisJY2hhciBuc2RuYW1lWzMyXSwgd2xhbl93ZXh0WzMyXTsKKyAgICAgICAgaW50IGk7CisKKwlpZiAod2xhbmRldikgeworCQlzcHJpbnRmKGlmbmFtZSwgIklOVEVSRkFDRT0lcyIsIHdsYW5kZXYtPm5hbWUpOworCQlzcHJpbnRmKG5zZG5hbWUsICJOU0ROQU1FPSVzIiwgd2xhbmRldi0+bnNkbmFtZSk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihpZm5hbWUsICJJTlRFUkZBQ0U9bnVsbCIpOworCQlzcHJpbnRmKG5zZG5hbWUsICJOU0ROQU1FPW51bGwiKTsKKwl9CisKKwlzcHJpbnRmKHdsYW5fd2V4dCwgIldMQU5fV0VYVD0lcyIsIHdsYW5fd2V4dF93cml0ZSA/ICJ5IiA6ICIiKTsKKyAgICAgICAgc3ByaW50ZihhY3Rpb25fc3RyLCAiQUNUSU9OPSVzIiwgYWN0aW9uKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgYXJndltpKytdID0gaG90cGx1Z19wYXRoOworICAgICAgICBhcmd2W2krK10gPSAid2xhbiI7CisgICAgICAgIGFyZ3ZbaV0gPSBOVUxMOworCisgICAgICAgIGkgPSAwOworICAgICAgICAvKiBtaW5pbWFsIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KKyAgICAgICAgZW52cCBbaSsrXSA9ICJIT01FPS8iOworICAgICAgICBlbnZwIFtpKytdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOworICAgICAgICBlbnZwIFtpKytdID0gaWZuYW1lOworICAgICAgICBlbnZwIFtpKytdID0gYWN0aW9uX3N0cjsKKyAgICAgICAgZW52cCBbaSsrXSA9IG5zZG5hbWU7CisgICAgICAgIGVudnAgW2krK10gPSB3bGFuX3dleHQ7CisgICAgICAgIGVudnAgW2ldID0gTlVMTDsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjIpKQorICAgICAgICByZXR1cm4gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2IFswXSwgYXJndiwgZW52cCk7CisjZWxzZQorICAgICAgICByZXR1cm4gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2IFswXSwgYXJndiwgZW52cCwgMCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKwordm9pZCAgICBwODAyMTFfc3VzcGVuZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19TVVNQRU5EKTsKKyNlbmRpZgorCisJREJGRVhJVDsKK30KKwordm9pZCAgICBwODAyMTFfcmVzdW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldiwgV0xBTl9IT1RQTFVHX1JFU1VNRSk7CisjZW5kaWYKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+dHhfdGltZW91dCkgeworCQl3bGFuZGV2LT50eF90aW1lb3V0KHdsYW5kZXYpOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIkltcGxlbWVudCB0eF90aW1lb3V0IGZvciAlc1xuIiwKKwkJCQkgd2xhbmRldi0+bnNkbmFtZSk7CisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCX0KKworCURCRkVYSVQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmUwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApAQCAtMCwwICsxLDMzNiBAQAorLyogcDgwMjExbmV0ZGV2LmgKKyoKKyogV0xBTiBuZXQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25zCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgc3RydWN0dXJlIHR5cGUgdGhhdCByZXByZXNlbnRzIGVhY2ggd2xhbgorKiBpbnRlcmZhY2UuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9MSU5VWF9QODAyMTFORVRERVZfSAorI2RlZmluZSBfTElOVVhfUDgwMjExTkVUREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBXTEFOX0RFVklDRV9DTE9TRUQJMAorI2RlZmluZSBXTEFOX0RFVklDRV9PUEVOCTEKKworI2RlZmluZSBXTEFOX01BQ01PREVfTk9ORQkwCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9JQlNTX1NUQQkxCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9FU1NfU1RBCTIKKyNkZWZpbmUgV0xBTl9NQUNNT0RFX0VTU19BUAkzCisKKy8qIE1TRCBTdGF0ZXMgKi8KKyNkZWZpbmUgV0xBTl9NU0RfU1RBUlQJCQktMQorI2RlZmluZSBXTEFOX01TRF9EUklWRVJMT0FERUQJCTAKKyNkZWZpbmUgV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkcJMQorI2RlZmluZSBXTEFOX01TRF9IV0ZBSUwJCQkyCisjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVAkJMworI2RlZmluZSBXTEFOX01TRF9GV0xPQURfUEVORElORwkJNAorI2RlZmluZSBXTEFOX01TRF9GV0xPQUQJCQk1CisjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkdfUEVORElORwk2CisjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkcJCTcKKworI2lmbmRlZiBFVEhfUF9FQ09ORVQKKyNkZWZpbmUgRVRIX1BfRUNPTkVUICAgMHgwMDE4ICAgIC8qIG5lZWRlZCBmb3IgMi4yLngga2VybmVscyAqLworI2VuZGlmCisKKyNkZWZpbmUgRVRIX1BfODAyMTFfUkFXICAgICAgICAoRVRIX1BfRUNPTkVUICsgMSkKKworI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxICAgICAvKiBrZXJuZWwgMi40LjYgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gIC8qIGtlcm5lbCAyLjQuMTggKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9QUklTTSA4MDIKKyNlbmRpZgorCisvKi0tLSBOU0QgQ2FwYWJpbGl0aWVzIEZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVAgICAgICAgICAgIDB4MDEgIC8qIGhhcmR3YXJlIHdlcCBlbmdpbmUgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9USUVEV0VQICAgICAgICAgICAgICAgMHgwMiAgLyogY2FuJ3QgZGVjb3VwbGUgZW4vZGUgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9OT0hPU1RXRVAgICAgICAgICAgICAgMHgwNCAgLyogbXVzdCB1c2UgaGFyZHdhcmUgd2VwICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfUEJDQyAgICAgICAgICAgICAgICAgIDB4MDggIC8qIGhhcmR3YXJlIHN1cHBvcnRzIFBCQ0MgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRSAgICAgICAgMHgxMCAgLyogaGFyZHdhcmUgc3VwcG9ydHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BR0lMSVRZICAgICAgICAgICAgICAgMHgyMCAgLyogaGFyZHdhcmUgc3VwcG9ydHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BUF9SRVRSQU5TTUlUICAgICAgICAgMHg0MCAgLyogbnNkIGhhbmRsZXMgcmV0cmFuc21pdHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9IV0ZSQUdNRU5UICAgICAgICAgICAgMHg4MCAgLyogbnNkIGhhbmRsZXMgZnJhZy9kZWZyYWcgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BVVRPSk9JTiAgICAgICAgICAgICAgMHgxMDAgIC8qIG5zZCBkb2VzIGF1dG9qb2luICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9TQ0FOICAgICAgICAgICAgICAgIDB4MjAwICAvKiBuc2QgY2FuIHNjYW4gKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyogUmVjZWl2ZWQgZnJhbWUgc3RhdGlzdGljcyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybXJ4X3QKK3sKKwlVSU5UMzIJbWdtdDsKKwlVSU5UMzIJYXNzb2NyZXE7CisJVUlOVDMyCWFzc29jcmVzcDsKKwlVSU5UMzIJcmVhc3NvY3JlcTsKKwlVSU5UMzIJcmVhc3NvY3Jlc3A7CisJVUlOVDMyCXByb2JlcmVxOworCVVJTlQzMglwcm9iZXJlc3A7CisJVUlOVDMyCWJlYWNvbjsKKwlVSU5UMzIJYXRpbTsKKwlVSU5UMzIJZGlzYXNzb2M7CisJVUlOVDMyCWF1dGhlbjsKKwlVSU5UMzIJZGVhdXRoZW47CisJVUlOVDMyCW1nbXRfdW5rbm93bjsKKwlVSU5UMzIJY3RsOworCVVJTlQzMglwc3BvbGw7CisJVUlOVDMyCXJ0czsKKwlVSU5UMzIJY3RzOworCVVJTlQzMglhY2s7CisJVUlOVDMyCWNmZW5kOworCVVJTlQzMgljZmVuZGNmYWNrOworCVVJTlQzMgljdGxfdW5rbm93bjsKKwlVSU5UMzIJZGF0YTsKKwlVSU5UMzIJZGF0YW9ubHk7CisJVUlOVDMyCWRhdGFfY2ZhY2s7CisJVUlOVDMyCWRhdGFfY2Zwb2xsOworCVVJTlQzMglkYXRhX19jZmFja19jZnBvbGw7CisJVUlOVDMyCW51bGw7CisJVUlOVDMyCWNmYWNrOworCVVJTlQzMgljZnBvbGw7CisJVUlOVDMyCWNmYWNrX2NmcG9sbDsKKwlVSU5UMzIJZGF0YV91bmtub3duOworCVVJTlQzMiAgZGVjcnlwdDsKKwlVSU5UMzIgIGRlY3J5cHRfZXJyOworfSBwODAyMTFfZnJtcnhfdDsKKworI2lmZGVmIFdJUkVMRVNTX0VYVAorLyogY2FsbGVkIGJ5IC9wcm9jL25ldC93aXJlbGVzcyAqLworc3RydWN0IGl3X3N0YXRpc3RpY3MqIHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzKG5ldGRldmljZV90ICpkZXYpOworLyogd2lyZWxlc3MgZXh0ZW5zaW9ucycgaW9jdGxzICovCitpbnQgcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOworI2VuZGlmCisKK2ludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIGludCBhc3NvYyk7CisKKyNlbmRpZiAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCisKKy8qIFdFUCBzdHVmZiAqLworI2RlZmluZSBOVU1fV0VQS0VZUyA0CisjZGVmaW5lIE1BWF9LRVlMRU4gMzIKKworI2RlZmluZSBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyAoQklUMXxCSVQwKQorI2RlZmluZSBIT1NUV0VQX0RFQ1JZUFQgIEJJVDQKKyNkZWZpbmUgSE9TVFdFUF9FTkNSWVBUICBCSVQ1CisjZGVmaW5lIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgQklUNgorI2RlZmluZSBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCBCSVQ3CisKK2V4dGVybiBpbnQgd2xhbl93YXRjaGRvZzsKK2V4dGVybiBpbnQgd2xhbl93ZXh0X3dyaXRlOworCisvKiBXTEFOIGRldmljZSB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuZGV2aWNlCit7CisJc3RydWN0IHdsYW5kZXZpY2UJKm5leHQ7CQkvKiBsaW5rIGZvciBsaXN0IG9mIGRldmljZXMgKi8KKwl2b2lkCQkJKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLworCisJLyogU3Vic3lzdGVtIFN0YXRlICovCisJY2hhcgkJbmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsgLyogRGV2IG5hbWUsIGZyb20gcmVnaXN0ZXJfd2xhbmRldigpKi8KKwljaGFyCQkqbnNkbmFtZTsKKworCVVJTlQzMiAgICAgICAgICBzdGF0ZTsgICAgICAgICAgLyogRGV2aWNlIEkvRiBzdGF0ZSAob3Blbi9jbG9zZWQpICovCisJVUlOVDMyCQltc2RzdGF0ZTsJLyogc3RhdGUgb2YgdW5kZXJseWluZyBkcml2ZXIgKi8KKwlVSU5UMzIJCWh3cmVtb3ZlZDsJLyogSGFzIHRoZSBodyBiZWVuIHlhbmtlZCBvdXQ/ICovCisKKwkvKiBIYXJkd2FyZSBjb25maWcgKi8KKwlVSU5UCQlpcnE7CisJVUlOVAkJaW9iYXNlOworCVVJTlQJCW1lbWJhc2U7CisJVUlOVDMyICAgICAgICAgIG5zZGNhcHM7ICAvKiBOU0QgQ2FwYWJpbGl0aWVzIGZsYWdzICovCisKKwkvKiBDb25maWcgdmFycyAqLworCVVJTlQJCWV0aGNvbnY7CisKKwkvKiBkZXZpY2UgbWV0aG9kcyAoaW5pdCBieSBNU0QsIHVzZWQgYnkgcDgwMjExICovCisJaW50CQkoKm9wZW4pKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwlpbnQJCSgqY2xvc2UpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwl2b2lkCQkoKnJlc2V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiApOworCWludAkJKCp0eGZyYW1lKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKKwlpbnQJCSgqbWxtZXJlcXVlc3QpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKKwlpbnQgICAgICAgICAgICAgKCpzZXRfbXVsdGljYXN0X2xpc3QpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LAorCQkJCQkgICAgICBuZXRkZXZpY2VfdCAqZGV2KTsKKwl2b2lkCQkoKnR4X3RpbWVvdXQpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaW50ICAgICAgICAgICAgICgqbnNkX3Byb2NfcmVhZCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwgaW50CSplb2YsIHZvaWQgKmRhdGEpOworI2VuZGlmCisKKwkvKiA4MDIuMTEgU3RhdGUgKi8KKwlVSU5UOAkJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXA4MDIxMXBzdHIzMl90CXNzaWQ7CisJVUlOVDMyCQltYWNtb2RlOworCWludCAgICAgICAgICAgICBsaW5rc3RhdHVzOworCWludCAgICAgICAgICAgICBzaG9ydHByZWFtYmxlOyAgLyogQyBib29sICovCisKKwkvKiBXRVAgU3RhdGUgKi8KKwlVSU5UOCB3ZXBfa2V5c1tOVU1fV0VQS0VZU11bTUFYX0tFWUxFTl07CisJVUlOVDggd2VwX2tleWxlbnNbTlVNX1dFUEtFWVNdOworCWludCAgIGhvc3R3ZXA7CisKKwkvKiBSZXF1ZXN0L0NvbmZpcm0gaS9mIHN0YXRlICh1c2VkIGJ5IHA4MDIxMSkgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXF1ZXN0X3BlbmRpbmc7IC8qIGZsYWcsIGFjY2VzcyBhdG9taWNhbGx5ICovCisKKwkvKiBuZXRsaW5rIHNvY2tldCAqLworCS8qIHF1ZXVlIGZvciBpbmRpY2F0aW9ucyB3YWl0aW5nIGZvciBjbWQgY29tcGxldGlvbiAqLworCS8qIExpbnV4IG5ldGRldmljZSBhbmQgc3VwcG9ydCAqLworCW5ldGRldmljZV90CQkqbmV0ZGV2OwkvKiBwdHIgdG8gbGludXggbmV0ZGV2aWNlICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbGludXhfc3RhdHM7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS8qIFByb2NmcyBzdXBwb3J0ICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jZGlyOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY3dsYW5kZXY7CisjZW5kaWYKKworCS8qIFJ4IGJvdHRvbSBoYWxmICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4X2JoOworCisJc3RydWN0IHNrX2J1ZmZfaGVhZAluc2RfcnhxOworCisJLyogODAyLjExIGRldmljZSBzdGF0aXN0aWNzICovCisJc3RydWN0IHA4MDIxMV9mcm1yeF90CXJ4OworCisvKiBjb21wYXRpYmlsaXR5IHRvIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBXSVJFTEVTU19FWFQKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcwl3c3RhdHM7CisKKwkvKiBqa3JpZWdsOiBpd3NweSBmaWVsZHMgKi8KKyAgICAgICAgVUlOVDgJCQlzcHlfbnVtYmVyOworICAgICAgICBjaGFyCQkJc3B5X2FkZHJlc3NbSVdfTUFYX1NQWV1bRVRIX0FMRU5dOworICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAgICAgICBzcHlfc3RhdFtJV19NQVhfU1BZXTsKKworI2VuZGlmCisKK30gd2xhbmRldmljZV90OworCisvKiBXRVAgc3R1ZmYgKi8KK2ludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIFVJTlQ4KiBrZXksIGludCBrZXlsZW4pOworaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKmJ1ZiwgVUlOVDMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgVUlOVDggKml2LCBVSU5UOCAqaWN2KTsKK2ludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQ4ICpkc3QsIFVJTlQzMiBsZW4sIGludCBrZXludW0sIFVJTlQ4ICppdiwgVUlOVDggKmljdik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKwordm9pZAlwODAyMTFuZXRkZXZfc3RhcnR1cCh2b2lkKTsKK3ZvaWQJcDgwMjExbmV0ZGV2X3NodXRkb3duKHZvaWQpOworaW50CXdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludAl3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludAlyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkCXA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZAlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkICAgIHA4MDIxMV9zdXNwZW5kKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkICAgIHA4MDIxMV9yZXN1bWUod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWlmICggIXdsYW5kZXYgKSByZXR1cm47CisJaWYgKCAhd2xhbmRldi0+bmV0ZGV2ICkgcmV0dXJuOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwl3bGFuZGV2LT5uZXRkZXYtPnRidXN5ID0gMTsKKwl3bGFuZGV2LT5uZXRkZXYtPnN0YXJ0ID0gMDsKKyNlbHNlCisJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3N0YXJ0X3F1ZXVlKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpZiAoICF3bGFuZGV2ICkgcmV0dXJuOworCWlmICggIXdsYW5kZXYtPm5ldGRldiApIHJldHVybjsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJd2xhbmRldi0+bmV0ZGV2LT50YnVzeSA9IDA7CisJd2xhbmRldi0+bmV0ZGV2LT5zdGFydCA9IDE7CisjZWxzZQorCW5ldGlmX3N0YXJ0X3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaWYgKCAhd2xhbmRldiApIHJldHVybjsKKwlpZiAoICF3bGFuZGV2LT5uZXRkZXYgKSByZXR1cm47CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCXdsYW5kZXYtPm5ldGRldi0+dGJ1c3kgPSAwOworCW1hcmtfYmgoTkVUX0JIKTsKKyNlbHNlCisJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworI2RlZmluZSBXTEFOX0hPVFBMVUdfUkVHSVNURVIgInJlZ2lzdGVyIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfUkVNT1ZFICAgInJlbW92ZSIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NUQVJUVVAgICJzdGFydHVwIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfU0hVVERPV04gInNodXRkb3duIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfU1VTUEVORCAic3VzcGVuZCIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFU1VNRSAicmVzdW1lIgoraW50IHA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqYWN0aW9uKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzM2FiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jCkBAIC0wLDAgKzEsMzI5IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMXJlcS5jCisqCisqIFJlcXVlc3QvSW5kaWNhdGlvbi9NYWNNZ210IGludGVyZmFjZSBoYW5kbGluZyBmdW5jdGlvbnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMsIHR5cGVzLCBhbmQgbWFjcm9zIHRvIHN1cHBvcnQgdGhlCisqIE1MTUUgcmVxdWVzdCBpbnRlcmZhY2UgdGhhdCdzIGltcGxlbWVudGVkIHZpYSB0aGUgZGV2aWNlIGlvY3Rscy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFpb2N0bC5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworLyogTWF4aW11bSBhbW91bnQgb2YgdGltZSB3ZSdsbCB3YWl0IGZvciBhIHJlcXVlc3QgdG8gY29tcGxldGUgKi8KKyNkZWZpbmUgUDgwMjExUkVRX01BWFRJTUUJMypIWgkvKiAzIHNlY29uZHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3N0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2coIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLCBpbnQgaXNnZXQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcmVxX2RvcmVxdWVzdAorKgorKiBIYW5kbGVzIGFuIE1MTUUgcmVxZXN0L2NvbmZpcm0gbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIGRldmljZSBzdHJ1Y3QKKyoJbXNnYnVmCQlCdWZmZXIgY29udGFpbmluZyBhIHJlcXVlc3QgbWVzc2FnZQorKgorKiBSZXR1cm5zOgorKgkwIG9uIHN1Y2Nlc3MsIGFuIGVycm5vIG90aGVyd2lzZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCVBvdGVudGlhbGx5IGJsb2NrcyB0aGUgY2FsbGVyLCBzbyBpdCdzIGEgZ29vZCBpZGVhIHRvCisqCW5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKm1zZ2J1ZikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJcDgwMjExbXNnX3QJKm1zZyA9IChwODAyMTFtc2dfdCopbXNnYnVmOworCisJREJGRU5URVI7CisKKwkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCisJaWYgKAorCSEoKHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0hXUFJFU0VOVCAmJgorCW1zZy0+bXNnY29kZSA9PSBESURtc2dfbG54cmVxX2lmc3RhdGUpIHx8CisJd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfUlVOTklORyB8fAorCXdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0ZXTE9BRCkgKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIFBlcm1pc3Npb25zICovCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmCisJICAgIChtc2ctPm1zZ2NvZGUgIT0gRElEbXNnX2RvdDExcmVxX21pYmdldCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBvbmx5IGRvdDExcmVxX21pYmdldCBhbGxvd2VkIGZvciBub24tcm9vdC5cbiIsIHdsYW5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIENoZWNrIGZvciBidXN5IHN0YXR1cyAqLworCWlmICggdGVzdF9hbmRfc2V0X2JpdCgxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogQWxsb3cgcDgwMjExIHRvIGxvb2sgYXQgbXNnIGFuZCBoYW5kbGUgaWYgZGVzaXJlZC4gKi8KKwkvKiBTbyBmYXIsIGFsbCBwODAyMTEgbXNncyBhcmUgaW1tZWRpYXRlLCBubyB3YWl0cS90aW1lciBuZWNlc3NhcnkgKi8KKwkvKiBUaGlzIG1heSBjaGFuZ2UuICovCisJcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2LCBtc2cpOworCisJLyogUGFzcyBpdCBkb3duIHRvIHdsYW5kZXYgdmlhIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ICovCisJaWYgKCB3bGFuZGV2LT5tbG1lcmVxdWVzdCAhPSBOVUxMICkKKwkJd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgbXNnKTsKKworCWNsZWFyX2JpdCggMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7CS8qIGlmIHJlc3VsdD09MCwgbXNnLT5zdGF0dXMgc3RpbGwgbWF5IGNvbnRhaW4gYW4gZXJyICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFyZXFfaGFuZGxlbXNnCisqCisqIHA4MDIxMSBtZXNzYWdlIGhhbmRsZXIuICBQcmltYXJpbHkgbG9va3MgZm9yIG1lc3NhZ2VzIHRoYXQKKyogYmVsb25nIHRvIHA4MDIxMSBhbmQgdGhlbiBkaXNwYXRjaGVzIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS4KKyogVE9ETzogd2UgZG9uJ3QgZG8gYW55dGhpbmcgeWV0LiAgT25jZSB0aGUgbGludXhNSUIgaXMgYmV0dGVyCisqCWRlZmluZWQgd2UnbGwgbmVlZCBhIGdldC9zZXQgaGFuZGxlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIGRldmljZSBzdHJ1Y3QKKyoJbXNnCQltZXNzYWdlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nIChhbnkgcmVzdWx0cyBhcmUgc2V0IGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIG1zZykKKyoKKyogQ2FsbCBjb250ZXh0OgorKglQcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCit7CisgICAgICAgIERCRkVOVEVSOworCisJc3dpdGNoIChtc2ctPm1zZ2NvZGUpIHsKKworCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOiB7CisJCXA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICpyZXEgPSAocDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QqKSBtc2c7CisJCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX0RFQ1JZUFR8SE9TVFdFUF9FTkNSWVBUKTsKKwkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOworCQlpZiAocmVxLT5lbmNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VOQ1JZUFQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6IHsKKwkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKKwkJcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICAqbWliX21zZyA9IChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOworCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCAod2xhbmRldiwgbWliX21zZywgaXNnZXQpOworCX0KKwlkZWZhdWx0OgorCQkvLyBYWFggZG8gbm90aGluZyEKKwkJOworCX0gLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLworCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAorCQkJCSAgIGludCBpc2dldCkKK3sKKwlwODAyMTFpdGVtZF90ICAgKm1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtaWJfbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgbWliaXRlbS0+ZGF0YTsKKwlVSU5UOCAqa2V5ID0gbWliaXRlbS0+ZGF0YSArIHNpemVvZihwODAyMTFwc3RyZF90KTsKKworCURCRkVOVEVSOworCisJc3dpdGNoIChtaWJpdGVtLT5kaWQpIHsKKwljYXNlIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZV9wODAyMTFfaWZzdGF0ZTogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisJCWlmIChpc2dldCkKKwkJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJCSpkYXRhID0gUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGU7CisJCQkJYnJlYWs7CisJCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGU7CisJCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQ6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCisJCWlmIChpc2dldCkKKwkJCSpkYXRhID0gd2xhbmRldi0+c2hvcnRwcmVhbWJsZTsKKwkJZWxzZQorCQkJd2xhbmRldi0+c2hvcnRwcmVhbWJsZSA9ICpkYXRhOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDAsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAxLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjogeworCQlpZiAoIWlzZ2V0KQorCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMiwga2V5LCBwc3RyLT5sZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDMsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlEOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCSpkYXRhID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOworCQkJfSBlbHNlIHsKKwkJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOworCisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PSAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CisJCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpOworCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQ6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCisJCWlmIChpc2dldCkgeworCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOworCQkJaWYgKCpkYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQkvLyBYWFhYIGRvIG5vdGhpbmchCisJCTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWJkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaApAQCAtMCwwICsxLDY4IEBACisvKiBwODAyMTFyZXEuaAorKgorKiBSZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExUkVRX0gKKyNkZWZpbmUgX0xJTlVYX1A4MDIxMVJFUV9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybnMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQJcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICptc2didWYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWIwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCkBAIC0wLDAgKzEsNjc1IEBACisvKiBwODAyMTF0eXBlcy5oCisqCisqIE1hY3JvcywgY29uc3RhbnRzLCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgZGF0YSB0eXBlcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMVRZUEVTX0gKKyNkZWZpbmUgX1A4MDIxMVRZUEVTX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgZGF0YSB0eXBlIGNvZGVzIHVzZWQgZm9yIE1JQiBpdGVtcyBhbmQgbWVzc2FnZSAqLworLyogYXJndW1lbnRzLiBUaGUgdmFyaW91cyBtZXRhZGF0YSBzdHJ1Y3R1cmVzIHByb3ZpZGUgYWRkaXRpb25hbCAqLworLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMuICovCisKKyNkZWZpbmUgUDgwMjExX1RZUEVfT0NURVRTVFIJCTEJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0RJU1BMQVlTVFIJCTIJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgYXNjaWkgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfSU5UCQkJNAkvKiBVSU5UMzIgbWluIGFuZCBtYXggbGltaXRlZCBieSAzMiBiaXRzICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0VOVU1JTlQJCTUJLyogVUlOVDMyIGhvbGRpbmcgYSBudW1lcmljCisJCQkJCQkgICBjb2RlIHRoYXQgY2FuIGJlIG1hcHBlZAorCQkJCQkJICAgdG8gYSB0ZXh0dWFsIG5hbWUgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfVU5LREFUQQkJNgkvKiBEYXRhIGl0ZW0gY29udGFpbmluZyBhbgorCQkJCQkJICAgdW5rbm93biBkYXRhIHR5cGUgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfSU5UQVJSQVkJCTcJLyogQXJyYXkgb2YgMzItYml0IGludGVnZXJzLiAqLworI2RlZmluZSBQODAyMTFfVFlQRV9CSVRBUlJBWQkJOAkvKiBBcnJheSBvZiBiaXRzLiAqLworI2RlZmluZSBQODAyMTFfVFlQRV9NQUNBUlJBWQkJOQkvKiBBcnJheSBvZiBNQUMgYWRkcmVzc2VzLiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGluZGV4ZXMgaW50byB0aGUgTWliIENhdGVnb3J5IExpc3QgKi8KKy8qIGFuZCB0aGUgTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCisKKy8qIE1pYiBDYXRlZ29yeSBMaXN0ICovCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExU01UCQkxCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExTUFDCQkyCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExUEhZCQkzCisKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExU01UCQlQODAyMTFfTUlCX0NBVF9ET1QxMVNNVAorI2RlZmluZSBQODAyMTFTRUNfRE9UMTFNQUMJCVA4MDIxMV9NSUJfQ0FUX0RPVDExTUFDCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMVBIWQkJUDgwMjExX01JQl9DQVRfRE9UMTFQSFkKKworLyogTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCisjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCQkxCisjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECQkyCisvKiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExQ0ZNCQkzIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSkgKi8KKworI2RlZmluZSBQODAyMTFTRUNfRE9UMTFSRVEJCVA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUlORAkJUDgwMjExX01TR19DQVRfRE9UMTFJTkQKKy8qICNkZWZpbmUgUDgwMjExU0VDX0RPVDExQ0ZNCQlQODAyMTFfTVNHX0NBVF9ET1QxMUNGTSAgKGRvZXNuJ3QgZXhpc3QgYXQgdGhpcyB0aW1lICovCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIERJRCBmaWVsZCBjb2RlcyB0aGF0IHJlcHJlc2VudCBhY2Nlc3MgdHlwZSBhbmQgKi8KKy8qIGlzX3RhYmxlIHN0YXR1cy4gKi8KKworI2RlZmluZSBQODAyMTFESURfQUNDRVNTX1JFQUQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19XUklURQkJMHgwODAwMDAwMAorI2RlZmluZSBQODAyMTFESURfV1JJVEVPTkxZCQkweDAwMDAwMDAxCisjZGVmaW5lIFA4MDIxMURJRF9SRUFET05MWQkJMHgwMDAwMDAwMgorI2RlZmluZSBQODAyMTFESURfUkVBRFdSSVRFCQkweDAwMDAwMDAzCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX0ZBTFNFCQkwCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX1RSVUUJCTEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBUaGUgdmFsdWUgdG8gdGV4dCBtYXBwaW5ncyBmb3IgKi8KKy8qICB0aGVzZSBpcyBpbiBwODAyMTF0eXBlcy5jLiAgVGhlc2UgZGVmaW5lcyB3ZXJlIGdlbmVyYXRlZCAqLworLyogIGZyb20gdGhlIG1hcHBpbmdzLiAqLworCisvKiBlcnJvciBjb2RlcyBmb3IgbG9va3VwcyAqLworI2RlZmluZSBQODAyMTFFTlVNX0JBRAkJCQkweGZmZmZmZmZmVUwKKyNkZWZpbmUgUDgwMjExRU5VTV9CQURTVFIJCQkiUDgwMjExRU5VTV9CQUQiCisKKyNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF9mYWxzZQkJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF90cnVlCQkJMQorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZQkJMAorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9wb3dlcm1nbXRfYWN0aXZlCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcG93ZXJtZ210X3Bvd2Vyc2F2ZQkJMgorI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUJMQorI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2FueQkJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW0JCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleQkJMgorI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfZmhzcwkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2Rzc3MJCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9pcmJhc2ViYW5kCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fdGVtcHR5cGVfY29tbWVyY2lhbAkJMQorI2RlZmluZSBQODAyMTFFTlVNX3RlbXB0eXBlX2luZHVzdHJpYWwJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZmNjCQkxNgorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9kb2MJCTMyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2V0c2kJCTQ4CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX3NwYWluCQk0OQorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9mcmFuY2UJCTUwCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX21rawkJNjQKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Vkb25seQkJMQorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfY3Nvbmx5CQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9lZGFuZGNzCQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9jc3dpdGh0aW1lcgkJOAorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfaHJjc2FuZGVkCQkxNgorI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9maXhlZGxpc3QJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfbm90c3VwcG9ydGVkCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfZHluYW1pYwkJMworI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZQkJMQorI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX3Bhc3NpdmUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9ib3RoCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnMJMgorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZAkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90aW1lb3V0CQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90b29fbWFueV9yZXEJNQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZAkJNgorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfYnNzX2FscmVhZHkJNworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9hY2Nlc3MJOAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9taWJhdHRyaWJ1dGUJOQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlCTExCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X2dldF93cml0ZW9ubHlfbWliCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX3Vuc3BlY19yZWFzb24JCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXV0aF9ub3RfdmFsaWQJMgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9kZWF1dGhfbHZfc3MJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25faW5hY3Rpdml0eQkJNAorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hcF9vdmVybG9hZAkJNQorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczIzX2VycgkJNgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczNfZXJyCQk3CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Rpc2FzX2x2X3NzCQk4CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Fzb2Nfbm90X2F1dGgJCTkKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bAkJMAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX2NhcAkJMTAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfcmVhc29jX25vX2Fzb2MJMTEKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfZmFpbF9vdGhlcgkJMTIKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zcHRfYWxnCQkxMworI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3NlcV9mYWlsCQkxNAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19jaGxuZ19mYWlsCQkxNQorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3RpbWVvdXQJCTE2CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2FwX2Z1bGwJCTE3CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3JhdGUJCTE4CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3Nob3J0cHJlYW1ibGUJMTkKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfcGJjYwkJMjAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfYWdpbGl0eQkJMjEKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rCQkwCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWUJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1uYW1lCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1kYXRhCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX2l0ZW1kYXRhCTQKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbmNvbXBsZXRlX2l0ZW1kYXRhCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX21zZ19kaWQJNgorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfbWliX2RpZAk3CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19jb252X2Z1bmMJOAorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3N0cmluZ190b29fbG9uZwk5CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vdXRfb2ZfcmFuZ2UJMTAKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19zdHJpbmdfdG9vX3Nob3J0CTExCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ192YWxpZF9mdW5jCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfdW5rbm93bgkJMTMKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2RpZAkJMTQKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX3ByaW50X2Z1bmMJMTUKKworI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3Vua25vd24gICAgICAgIDAKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9iZWFjb24gICAgICAgICAxCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fc2lnbmFsICAgICAgICAgMgorI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3R4cmV0cnkgICAgICAgIDMKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9ub3Rqb2luZWQgICAgICA0CisKKyNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX2xvbmcgICAgICAgICAgICAgICAwCisjZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9zaG9ydCAgICAgICAgICAgICAgMgorI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfbWl4ZWQgICAgICAgICAgICAgIDMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBtYXggbGVuZ3RoIGNvbnN0YW50cyBmb3IgdGhlIGRpZmZlcmVudCBwYXNjYWwgc3RyaW5ncy4gKi8KKworI2RlZmluZSBNQVhMRU5fUFNUUjYJCSg2KQkvKiBwYXNjYWwgYXJyYXkgb2YgNiBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjE0CQkoMTQpCS8qIHBhc2NhbCBhcnJheSBvZiAxNCBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjMyCQkoMzIpCS8qIHBhc2NhbCBhcnJheSBvZiAzMiBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjI1NQkJKDI1NSkJLyogcGFzY2FsIGFycmF5IG9mIDI1NSBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fTUlCQVRUUklCVVRFCSgzOTIpCS8qIG1heGltdW0gbWliYXR0cmlidXRlICovCisJCQkJCS8qIHdoZXJlIHRoZSBzaXplIG9mIHRoZSBEQVRBIGl0c2VsZiAqLworCQkJCQkvKiBpcyBhIERJRC1MRU4tREFUQSB0cmlwbGUgKi8KKwkJCQkJLyogd2l0aCBhIG1heCBzaXplIG9mIDQrNCszODQgKi8KKworI2RlZmluZSBQODAyMTFfU0VUX0lOVChpdGVtLCB2YWx1ZSkgZG8geyBcCisJKGl0ZW0pLmRhdGEgICA9ICh2YWx1ZSk7IFwKKwkoaXRlbSkuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfSB3aGlsZSgwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0cmluZyBjb25zdGFudHMgKi8KKworI2RlZmluZSBOT1RfU0VUCQkJIk5PVF9TRVQiCisjZGVmaW5lIE5PVF9TVVBQT1JURUQJCSJOT1RfU1VQUE9SVEVEIgorI2RlZmluZSBVTktOT1dOX0RBVEEJCSJVTktOT1dOX0RBVEEiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTWV0YWRhdGEgZmxhZ3MgICovCisKKy8qIE1TTTogRG8gdGhlc2UgYmVsb25nIGluIHA4MDIxMW1ldGEuaD8gSSdtIG5vdCBzdXJlLiAqLworCisjZGVmaW5lIElTUkVRVUlSRUQJCSgweDgwMDAwMDAwVUwpCisjZGVmaW5lIElTUkVRVUVTVAkJKDB4NDAwMDAwMDBVTCkKKyNkZWZpbmUgSVNDT05GSVJNCQkoMHgyMDAwMDAwMFVMKQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSAnZmxhZ3MnIGZpZWxkIGluICAgKi8KKy8qICB0aGUgbWV0YWRhdGEuICBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gdGhlIG1ldGFkYXRhIGlzIGZvciAgICAgICAqLworLyogIGNvbW1hbmQgYXJndW1lbnRzIHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBpdGVtIGlzIHJlcXVpcmVkLCBhbmQgICovCisvKiAgd2hldGhlciB0aGUgbWV0YWRhdGEgaXRlbSBpcyBmb3IgYSByZXF1ZXN0IGNvbW1hbmQsIGNvbmZpcm0gICAgICAgKi8KKy8qICBjb21tYW5kIG9yIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/ICBJJ20gbm90IHN1cmUgKi8KKworI2RlZmluZSBQODAyMTFJVEVNX1NFVEZMQUdTKHEsIHIsIGMpCSggcSB8IHIgfCBjICkKKworI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUlSRUQoZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU1JFUVVJUkVEKSkgPj4gMzEgKQorI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUVTVChmbGFncykJKCgoVUlOVDMyKShmbGFncyAmIElTUkVRVUVTVCkpID4+IDMwICkKKyNkZWZpbmUgUDgwMjExSVRFTV9JU0NPTkZJUk0oZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU0NPTkZJUk0pKSA+PiAyOSApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGNyZWF0ZXMgYSBuYW1lIGZvciBhbiBlbnVtICovCisKKyNkZWZpbmUgTUtFTlVNTkFNRShuYW1lKSBwODAyMTFlbnVtXyAjIyBuYW1lCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgbWFjcm9zIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhbmQKKyogZGVjb25zdHJ1Y3QgdGhlIERhdGEgSUQgY29kZXMuICBUaGUgY29kaW5nIGlzIGFzIGZvbGxvd3M6CisqCisqICAgICAuLi5yd3Rubm5ubm5ubmlpaWlpaWdnZ2dnZ3Nzc3NzcyAgICAgIHMgLSBTZWN0aW9uCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgLSBHcm91cAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIC0gSXRlbQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIC0gSW5kZXgKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCAtIFRhYmxlIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyAtIFdyaXRlIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAtIFJlYWQgZmxhZworKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIC0gVW51c2VkCisqLworCisjZGVmaW5lIFA4MDIxMURJRF9JTlZBTElECQkweGZmZmZmZmZmVUwKKyNkZWZpbmUgUDgwMjExRElEX1ZBTElECQkJMHgwMDAwMDAwMFVMCisKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9TRUNUSU9OCQkoMCkKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9HUk9VUAkJKDYpCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVRFTQkJKDEyKQorI2RlZmluZSBQODAyMTFESURfTFNCX0lOREVYCQkoMTgpCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVNUQUJMRQkJKDI2KQorI2RlZmluZSBQODAyMTFESURfTFNCX0FDQ0VTUyAJCSgyNykKKworI2RlZmluZSBQODAyMTFESURfTUFTS19TRUNUSU9OCQkoMHgwMDAwMDAzZlVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19HUk9VUAkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfSVRFTQkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfSU5ERVgJCSgweDAwMDAwMGZmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lTVEFCTEUJCSgweDAwMDAwMDAxVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0FDQ0VTUyAJCSgweDAwMDAwMDAzVUwpCisKKworI2RlZmluZSBQODAyMTFESURfTUsoYSxtLGwpCSgoKChVSU5UMzIpKGEpKSAmIChtKSkgPDwgKGwpKQorCisjZGVmaW5lIFA4MDIxMURJRF9NS1NFQ1RJT04oYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXAorCQkJCQlQODAyMTFESURfTFNCX1NFQ1RJT04gKQorI2RlZmluZSBQODAyMTFESURfTUtHUk9VUChhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAorCQkJCQlQODAyMTFESURfTFNCX0dST1VQICkKKyNkZWZpbmUgUDgwMjExRElEX01LSVRFTShhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JVEVNLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVRFTSApCisjZGVmaW5lIFA4MDIxMURJRF9NS0lOREVYKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lOREVYLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVggKQorI2RlZmluZSBQODAyMTFESURfTUtJU1RBQkxFKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lTVEFCTEUsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JU1RBQkxFICkKKworCisjZGVmaW5lIFA4MDIxMURJRF9NS0lEKHMsZyxpLG4sdCxhKQkoUDgwMjExRElEX01LU0VDVElPTihzKSB8IFwKKwkJCQkJCVA4MDIxMURJRF9NS0dST1VQKGcpIHwgXAorCQkJCSAJCVA4MDIxMURJRF9NS0lURU0oaSkgfCBcCisJCQkJIAkJUDgwMjExRElEX01LSU5ERVgobikgfCBcCisJCQkJCQlQODAyMTFESURfTUtJU1RBQkxFKHQpIHwgXAorCQkJCQkJKGEpICkKKworCisjZGVmaW5lIFA4MDIxMURJRF9HRVQoYSxtLGwpCSgoKChVSU5UMzIpKGEpKSA+PiAobCkpICYgKG0pKQorCisjZGVmaW5lIFA4MDIxMURJRF9TRUNUSU9OKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19TRUNUSU9OLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfU0VDVElPTikKKyNkZWZpbmUgUDgwMjExRElEX0dST1VQKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAorCQkJCQlQODAyMTFESURfTFNCX0dST1VQKQorI2RlZmluZSBQODAyMTFESURfSVRFTShhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSVRFTSwgXAorCQkJCQlQODAyMTFESURfTFNCX0lURU0pCisjZGVmaW5lIFA4MDIxMURJRF9JTkRFWChhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSU5ERVgsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JTkRFWCkKKyNkZWZpbmUgUDgwMjExRElEX0lTVEFCTEUoYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lTVEFCTEUsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JU1RBQkxFKQorI2RlZmluZSBQODAyMTFESURfQUNDRVNTKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19BQ0NFU1MsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9BQ0NFU1MpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZXMgYXJlIHVzZWQgZm9yIHRoZSByZXByZXNlbmF0aW9uICovCisvKiAgb2YgRU5VTUlOVCB0eXBlIG1ldGFkYXRhLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFlbnVtcGFpcgoreworCVVJTlQzMgkJCXZhbDsKKwljaGFyCQkJKm5hbWU7Cit9IHA4MDIxMWVudW1wYWlyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWVudW0KK3sKKwlJTlQJCQluaXRlbXM7CisJcDgwMjExZW51bXBhaXJfdAkqbGlzdDsKK30gcDgwMjExZW51bV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZXMgYXJlIHVzZWQgdG8gc3RvcmUgZGF0YSBpdGVtcyBpbiAqLworLyogIG1lc3NhZ2VzLiAqLworCisvKiBUZW1wbGF0ZSBwYXNjYWwgc3RyaW5nICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyCit7CisJVUlOVDgJCWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyZAoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHJkX3Q7CisKKy8qIE1heGltdW0gcGFzY2FsIHN0cmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjI1NQoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFIyNTVdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMjU1X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIG1hY2FkZHJlc3MgYW5kIGJzc2lkICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyNgoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFI2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjZfdDsKKworLyogcGFzY2FsIHN0cmluZyBmb3IgY2hhbm5lbCBsaXN0ICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMTQKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMTRfdDsKKworLyogcGFzY2FsIHN0cmluZyBmb3Igc3NpZCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjMyCit7CisJVUlOVDgJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fUFNUUjMyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjMyX3Q7CisKKy8qIE1BQyBhZGRyZXNzIGFycmF5ICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheQoreworCVVJTlQzMgkJY250OworCVVJTlQ4CQlkYXRhWzFdW01BWExFTl9QU1RSNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1hY2FycmF5X3Q7CisKKy8qIHByb3RvdHlwZSB0ZW1wbGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbQoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3Q7CisKKy8qIHByb3RvdHlwZSB0ZW1wbGF0ZSB3LyBkYXRhIGl0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1kCit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1kX3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBJTlQsIEJPVU5ERURJTlQsIEVOVU1JTlQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdWludDMyCit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDMyCQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VpbnQzMl90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjYKK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKKwlwODAyMTFwc3RyNl90CWRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjZfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIxNAoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIxNF90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIxNF90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjMyCit7CisJVUlOVDMyCQkJZGlkOworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlsZW47CisJcDgwMjExcHN0cjMyX3QJCWRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjMyX3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMjU1Cit7CisJVUlOVDMyCQkJZGlkOworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlsZW47CisJcDgwMjExcHN0cjI1NV90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIyNTVfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAzOTIsIG5hbWVseSBtaWIgaXRlbXMgKi8KK3R5cGVkZWYgc3RydWN0ICBwODAyMTFpdGVtX3VuazM5MgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9NSUJBVFRSSUJVVEVdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazM5Ml90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgVU5LIDEwMjUsIG5hbWVseSBwMiBwZGFzICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmsxMDI0Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbMTAyNF07Cit9ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazEwMjRfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyA0MDk2LCBuYW1lbHkgcDIgZG93bmxvYWQgY2h1bmtzICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bms0MDk2Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbNDA5Nl07Cit9ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazQwOTZfdDsKKworc3RydWN0IGNhdGxpc3RpdGVtOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbGwgb2YgdGhlICovCisvKiAgbWV0YWRhdGEgaXRlbXMuICBTb21lIGNvbXBvbmVudHMgbWF5IGNob29zZSB0byB1c2UgbW9yZSwgKi8KKy8qICBsZXNzIG9yIGRpZmZlcmVudCBtZXRhZGF0YSBpdGVtcy4gKi8KKwordHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV9mcm9tdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKK3R5cGVkZWYgVUlOVDMyICgqcDgwMjExX3ZhbGlkX3QpKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgVUlOVDMyIGRpZCwgVUlOVDgqIGl0ZW1idWYpOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFbnVtZXJhdGlvbiBMaXN0cyAqLworLyogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbnMgKi8KKy8qICBmb3IgYWxsIGVudW1lcmF0aW9ucyAgKi8KKworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHRydXRoKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShpZnN0YXRlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwb3dlcm1nbXQpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGJzc3R5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGF1dGhhbGcpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHBoeXR5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHRlbXB0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZWdkb21haW4pOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGNjYW1vZGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGRpdmVyc2l0eSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoc2NhbnR5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHJlc3VsdGNvZGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHJlYXNvbik7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoc3RhdHVzKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShtc2djb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShtc2dpdGVtX3N0YXR1cyk7CisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShsbnhyb2FtX3JlYXNvbik7CisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwMnByZWFtYmxlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLworLyogIHA4MDIxMWVudW1fdCB0eXBlLiAqLworCitVSU5UMzIgcDgwMjExZW51bV90ZXh0MmludChwODAyMTFlbnVtX3QgKmVwLCBjaGFyICp0ZXh0KTsKK1VJTlQzMiBwODAyMTFlbnVtX2ludDJ0ZXh0KHA4MDIxMWVudW1fdCAqZXAsIFVJTlQzMiB2YWwsIGNoYXIgKnRleHQpOwordm9pZCBwODAyMTFfZXJyb3IydGV4dChpbnQgZXJyX2NvZGUsIGNoYXIgKmVycl9zdHIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLworLyogIHA4MDIxMWl0ZW1fdCBhbmQgcDgwMjExbWV0YV90IHR5cGVzLiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdmFsaWRhdGlvbiBhbmQgICAgKi8KKy8qIHRleHQgdG8gYmluYXJ5IGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBmb3IgaW50ZXJmYWNlICovCisvKiBhbmQgTUlCIGRhdGEgaXRlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBESVNQTEFZU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwc3RyID09PiBjc3RyICovCit2b2lkIHA4MDIxMV90b3RleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogY3N0ciA9PT4gcHN0ciAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBkaXNwbGF5c3RyIGJpbmFyeSB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gT0NURVRTVFIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHN0ciA9PT4gInh4Onh4Oi4uLi4iICovCit2b2lkIHA4MDIxMV90b3RleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICJ4eDp4eDouLi4uIiA9PT4gcHN0ciAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIG9jdGV0c3RyIGJpbmFyeSB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIElOVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gJWQgKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICVkID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2ludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50J3MgYmluYXJ5IHZhbHVlIChhbHdheXMgc3VjY2Vzc2Z1bCkgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gRU5VTUlOVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUlOVDMyID09PiA8dmFsdWVuYW1lPiAqLwordm9pZCBwODAyMTFfdG90ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIDx2YWx1ZW5hbWU+ID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGVudW0ncyBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIElOVEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMltdID0+ICVkLCVkLCVkLC4uLiAqLwordm9pZCBwODAyMTFfdG90ZXh0X2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAlZCwlZCwlZCwuLi4gPT0+IFVJTlQzMltdICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50ZWdlciBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gQklUQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUlOVDMyID09PiAlZCwlZCwlZCwuLi4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogJWQsJWQsJWQsLi4uID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIGJpdCBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gTUFDQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFfdG90ZXh0X21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBNQUMgYWRkcmVzcyBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gTUlCQVRUUklVQlRFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiA8bWlidmFsdWU+ID09PiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Cit2b2lkIHA4MDIxMV90b3RleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisKKy8qIDx0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlkZW50aWZpZWQgaW4gTUlCIG1ldGFkYXRhPiA9PT4gPG1pYnZhbHVlPiAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwordm9pZCBwODAyMTFfZnJvbXRleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIG1pYml0ZW0ncyBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisjZW5kaWYgLyogX1A4MDIxMVRZUEVTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ZlMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qIHNyYy9wODAyMTEvcDgwMjExd2VwLmMKKyoKKyogV0VQIGVuY29kZS9kZWNvZGUgZm9yIFA4MDIxMS4KKyoKKyogQ29weXJpZ2h0IChDKSAyMDAyIEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLy8gI2RlZmluZSBXRVBfREVCVUcKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisjZGVmaW5lIFNTV0FQKGEsYikge1VJTlQ4IHRtcCA9IHNbYV07IHNbYV0gPSBzW2JdOyBzW2JdID0gdG1wO30KKyNkZWZpbmUgV0VQX0tFWSh4KSAgICAgICAoKCh4KSAmIDB4QzApID4+IDYpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKK3N0YXRpYyBjb25zdCBVSU5UMzIgd2VwX2NyYzMyX3RhYmxlWzI1Nl0gPSB7CisgICAgICAgIDB4MDAwMDAwMDBMLCAweDc3MDczMDk2TCwgMHhlZTBlNjEyY0wsIDB4OTkwOTUxYmFMLCAweDA3NmRjNDE5TCwKKyAgICAgICAgMHg3MDZhZjQ4ZkwsIDB4ZTk2M2E1MzVMLCAweDllNjQ5NWEzTCwgMHgwZWRiODgzMkwsIDB4NzlkY2I4YTRMLAorICAgICAgICAweGUwZDVlOTFlTCwgMHg5N2QyZDk4OEwsIDB4MDliNjRjMmJMLCAweDdlYjE3Y2JkTCwgMHhlN2I4MmQwN0wsCisgICAgICAgIDB4OTBiZjFkOTFMLCAweDFkYjcxMDY0TCwgMHg2YWIwMjBmMkwsIDB4ZjNiOTcxNDhMLCAweDg0YmU0MWRlTCwKKyAgICAgICAgMHgxYWRhZDQ3ZEwsIDB4NmRkZGU0ZWJMLCAweGY0ZDRiNTUxTCwgMHg4M2QzODVjN0wsIDB4MTM2Yzk4NTZMLAorICAgICAgICAweDY0NmJhOGMwTCwgMHhmZDYyZjk3YUwsIDB4OGE2NWM5ZWNMLCAweDE0MDE1YzRmTCwgMHg2MzA2NmNkOUwsCisgICAgICAgIDB4ZmEwZjNkNjNMLCAweDhkMDgwZGY1TCwgMHgzYjZlMjBjOEwsIDB4NGM2OTEwNWVMLCAweGQ1NjA0MWU0TCwKKyAgICAgICAgMHhhMjY3NzE3MkwsIDB4M2MwM2U0ZDFMLCAweDRiMDRkNDQ3TCwgMHhkMjBkODVmZEwsIDB4YTUwYWI1NmJMLAorICAgICAgICAweDM1YjVhOGZhTCwgMHg0MmIyOTg2Y0wsIDB4ZGJiYmM5ZDZMLCAweGFjYmNmOTQwTCwgMHgzMmQ4NmNlM0wsCisgICAgICAgIDB4NDVkZjVjNzVMLCAweGRjZDYwZGNmTCwgMHhhYmQxM2Q1OUwsIDB4MjZkOTMwYWNMLCAweDUxZGUwMDNhTCwKKyAgICAgICAgMHhjOGQ3NTE4MEwsIDB4YmZkMDYxMTZMLCAweDIxYjRmNGI1TCwgMHg1NmIzYzQyM0wsIDB4Y2ZiYTk1OTlMLAorICAgICAgICAweGI4YmRhNTBmTCwgMHgyODAyYjg5ZUwsIDB4NWYwNTg4MDhMLCAweGM2MGNkOWIyTCwgMHhiMTBiZTkyNEwsCisgICAgICAgIDB4MmY2ZjdjODdMLCAweDU4Njg0YzExTCwgMHhjMTYxMWRhYkwsIDB4YjY2NjJkM2RMLCAweDc2ZGM0MTkwTCwKKyAgICAgICAgMHgwMWRiNzEwNkwsIDB4OThkMjIwYmNMLCAweGVmZDUxMDJhTCwgMHg3MWIxODU4OUwsIDB4MDZiNmI1MWZMLAorICAgICAgICAweDlmYmZlNGE1TCwgMHhlOGI4ZDQzM0wsIDB4NzgwN2M5YTJMLCAweDBmMDBmOTM0TCwgMHg5NjA5YTg4ZUwsCisgICAgICAgIDB4ZTEwZTk4MThMLCAweDdmNmEwZGJiTCwgMHgwODZkM2QyZEwsIDB4OTE2NDZjOTdMLCAweGU2NjM1YzAxTCwKKyAgICAgICAgMHg2YjZiNTFmNEwsIDB4MWM2YzYxNjJMLCAweDg1NjUzMGQ4TCwgMHhmMjYyMDA0ZUwsIDB4NmMwNjk1ZWRMLAorICAgICAgICAweDFiMDFhNTdiTCwgMHg4MjA4ZjRjMUwsIDB4ZjUwZmM0NTdMLCAweDY1YjBkOWM2TCwgMHgxMmI3ZTk1MEwsCisgICAgICAgIDB4OGJiZWI4ZWFMLCAweGZjYjk4ODdjTCwgMHg2MmRkMWRkZkwsIDB4MTVkYTJkNDlMLCAweDhjZDM3Y2YzTCwKKyAgICAgICAgMHhmYmQ0NGM2NUwsIDB4NGRiMjYxNThMLCAweDNhYjU1MWNlTCwgMHhhM2JjMDA3NEwsIDB4ZDRiYjMwZTJMLAorICAgICAgICAweDRhZGZhNTQxTCwgMHgzZGQ4OTVkN0wsIDB4YTRkMWM0NmRMLCAweGQzZDZmNGZiTCwgMHg0MzY5ZTk2YUwsCisgICAgICAgIDB4MzQ2ZWQ5ZmNMLCAweGFkNjc4ODQ2TCwgMHhkYTYwYjhkMEwsIDB4NDQwNDJkNzNMLCAweDMzMDMxZGU1TCwKKyAgICAgICAgMHhhYTBhNGM1ZkwsIDB4ZGQwZDdjYzlMLCAweDUwMDU3MTNjTCwgMHgyNzAyNDFhYUwsIDB4YmUwYjEwMTBMLAorICAgICAgICAweGM5MGMyMDg2TCwgMHg1NzY4YjUyNUwsIDB4MjA2Zjg1YjNMLCAweGI5NjZkNDA5TCwgMHhjZTYxZTQ5ZkwsCisgICAgICAgIDB4NWVkZWY5MGVMLCAweDI5ZDljOTk4TCwgMHhiMGQwOTgyMkwsIDB4YzdkN2E4YjRMLCAweDU5YjMzZDE3TCwKKyAgICAgICAgMHgyZWI0MGQ4MUwsIDB4YjdiZDVjM2JMLCAweGMwYmE2Y2FkTCwgMHhlZGI4ODMyMEwsIDB4OWFiZmIzYjZMLAorICAgICAgICAweDAzYjZlMjBjTCwgMHg3NGIxZDI5YUwsIDB4ZWFkNTQ3MzlMLCAweDlkZDI3N2FmTCwgMHgwNGRiMjYxNUwsCisgICAgICAgIDB4NzNkYzE2ODNMLCAweGUzNjMwYjEyTCwgMHg5NDY0M2I4NEwsIDB4MGQ2ZDZhM2VMLCAweDdhNmE1YWE4TCwKKyAgICAgICAgMHhlNDBlY2YwYkwsIDB4OTMwOWZmOWRMLCAweDBhMDBhZTI3TCwgMHg3ZDA3OWViMUwsIDB4ZjAwZjkzNDRMLAorICAgICAgICAweDg3MDhhM2QyTCwgMHgxZTAxZjI2OEwsIDB4NjkwNmMyZmVMLCAweGY3NjI1NzVkTCwgMHg4MDY1NjdjYkwsCisgICAgICAgIDB4MTk2YzM2NzFMLCAweDZlNmIwNmU3TCwgMHhmZWQ0MWI3NkwsIDB4ODlkMzJiZTBMLCAweDEwZGE3YTVhTCwKKyAgICAgICAgMHg2N2RkNGFjY0wsIDB4ZjliOWRmNmZMLCAweDhlYmVlZmY5TCwgMHgxN2I3YmU0M0wsIDB4NjBiMDhlZDVMLAorICAgICAgICAweGQ2ZDZhM2U4TCwgMHhhMWQxOTM3ZUwsIDB4MzhkOGMyYzRMLCAweDRmZGZmMjUyTCwgMHhkMWJiNjdmMUwsCisgICAgICAgIDB4YTZiYzU3NjdMLCAweDNmYjUwNmRkTCwgMHg0OGIyMzY0YkwsIDB4ZDgwZDJiZGFMLCAweGFmMGExYjRjTCwKKyAgICAgICAgMHgzNjAzNGFmNkwsIDB4NDEwNDdhNjBMLCAweGRmNjBlZmMzTCwgMHhhODY3ZGY1NUwsIDB4MzE2ZThlZWZMLAorICAgICAgICAweDQ2NjliZTc5TCwgMHhjYjYxYjM4Y0wsIDB4YmM2NjgzMWFMLCAweDI1NmZkMmEwTCwgMHg1MjY4ZTIzNkwsCisgICAgICAgIDB4Y2MwYzc3OTVMLCAweGJiMGI0NzAzTCwgMHgyMjAyMTZiOUwsIDB4NTUwNTI2MmZMLCAweGM1YmEzYmJlTCwKKyAgICAgICAgMHhiMmJkMGIyOEwsIDB4MmJiNDVhOTJMLCAweDVjYjM2YTA0TCwgMHhjMmQ3ZmZhN0wsIDB4YjVkMGNmMzFMLAorICAgICAgICAweDJjZDk5ZThiTCwgMHg1YmRlYWUxZEwsIDB4OWI2NGMyYjBMLCAweGVjNjNmMjI2TCwgMHg3NTZhYTM5Y0wsCisgICAgICAgIDB4MDI2ZDkzMGFMLCAweDljMDkwNmE5TCwgMHhlYjBlMzYzZkwsIDB4NzIwNzY3ODVMLCAweDA1MDA1NzEzTCwKKyAgICAgICAgMHg5NWJmNGE4MkwsIDB4ZTJiODdhMTRMLCAweDdiYjEyYmFlTCwgMHgwY2I2MWIzOEwsIDB4OTJkMjhlOWJMLAorICAgICAgICAweGU1ZDViZTBkTCwgMHg3Y2RjZWZiN0wsIDB4MGJkYmRmMjFMLCAweDg2ZDNkMmQ0TCwgMHhmMWQ0ZTI0MkwsCisgICAgICAgIDB4NjhkZGIzZjhMLCAweDFmZGE4MzZlTCwgMHg4MWJlMTZjZEwsIDB4ZjZiOTI2NWJMLCAweDZmYjA3N2UxTCwKKyAgICAgICAgMHgxOGI3NDc3N0wsIDB4ODgwODVhZTZMLCAweGZmMGY2YTcwTCwgMHg2NjA2M2JjYUwsIDB4MTEwMTBiNWNMLAorICAgICAgICAweDhmNjU5ZWZmTCwgMHhmODYyYWU2OUwsIDB4NjE2YmZmZDNMLCAweDE2NmNjZjQ1TCwgMHhhMDBhZTI3OEwsCisgICAgICAgIDB4ZDcwZGQyZWVMLCAweDRlMDQ4MzU0TCwgMHgzOTAzYjNjMkwsIDB4YTc2NzI2NjFMLCAweGQwNjAxNmY3TCwKKyAgICAgICAgMHg0OTY5NDc0ZEwsIDB4M2U2ZTc3ZGJMLCAweGFlZDE2YTRhTCwgMHhkOWQ2NWFkY0wsIDB4NDBkZjBiNjZMLAorICAgICAgICAweDM3ZDgzYmYwTCwgMHhhOWJjYWU1M0wsIDB4ZGViYjllYzVMLCAweDQ3YjJjZjdmTCwgMHgzMGI1ZmZlOUwsCisgICAgICAgIDB4YmRiZGYyMWNMLCAweGNhYmFjMjhhTCwgMHg1M2IzOTMzMEwsIDB4MjRiNGEzYTZMLCAweGJhZDAzNjA1TCwKKyAgICAgICAgMHhjZGQ3MDY5M0wsIDB4NTRkZTU3MjlMLCAweDIzZDk2N2JmTCwgMHhiMzY2N2EyZUwsIDB4YzQ2MTRhYjhMLAorICAgICAgICAweDVkNjgxYjAyTCwgMHgyYTZmMmI5NEwsIDB4YjQwYmJlMzdMLCAweGMzMGM4ZWExTCwgMHg1YTA1ZGYxYkwsCisgICAgICAgIDB4MmQwMmVmOGRMCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKiBrZXlsZW4gaW4gYnl0ZXMhICovCisKK2ludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIFVJTlQ4KiBrZXksIGludCBrZXlsZW4pCit7CisJaWYgKGtleWxlbiA8IDApICByZXR1cm4gLTE7CisJaWYgKGtleWxlbiA+PSBNQVhfS0VZTEVOKSByZXR1cm4gLTE7CisJaWYgKGtleSA9PSBOVUxMKSByZXR1cm4gLTE7CisJaWYgKGtleW51bSA8IDApICByZXR1cm4gLTE7CisJaWYgKGtleW51bSA+PSBOVU1fV0VQS0VZUykgcmV0dXJuIC0xOworCisKKyNpZmRlZiBXRVBfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiV0VQIGtleSAlZCBsZW4gJWQgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGtleW51bSwga2V5bGVuLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSk7CisjZW5kaWYKKworCXdsYW5kZXYtPndlcF9rZXlsZW5zW2tleW51bV0gPSBrZXlsZW47CisJbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2tleW51bV0sIGtleSwga2V5bGVuKTsKKworCXJldHVybiAwOworfQorCisvKgorICA0LWJ5dGUgSVYgYXQgc3RhcnQgb2YgYnVmZmVyLCA0LWJ5dGUgSUNWIGF0IGVuZCBvZiBidWZmZXIuCisgIGlmIHN1Y2Nlc3NmdWwsIGJ1ZiBzdGFydCBpcyBwYXlsb2FkIGJlZ2luLCBsZW5ndGggLT0gODsKKyAqLworaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKmJ1ZiwgVUlOVDMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgVUlOVDggKml2LCBVSU5UOCAqaWN2KQoreworCVVJTlQzMiBpLCBqLCBrLCBjcmMsIGtleWxlbjsKKwlVSU5UOCBzWzI1Nl0sIGtleVs2NF0sIGNfY3JjWzRdOworCVVJTlQ4IGtleWlkeDsKKworCS8qIE5lZWRzIHRvIGJlIGF0IGxlYXN0IDggYnl0ZXMgb2YgcGF5bG9hZCAqLworCWlmIChsZW4gPD0gMCkgcmV0dXJuIC0xOworCisJLyogaW5pdGlhbGl6ZSB0aGUgZmlyc3QgYnl0ZXMgb2YgdGhlIGtleSBmcm9tIHRoZSBJViAqLworCWtleVswXSA9IGl2WzBdOworCWtleVsxXSA9IGl2WzFdOworCWtleVsyXSA9IGl2WzJdOworCWtleWlkeCA9IFdFUF9LRVkoaXZbM10pOworCisJaWYgKGtleV9vdmVycmlkZSA+PSAwKQorCQlrZXlpZHggPSBrZXlfb3ZlcnJpZGU7CisKKwlpZiAoa2V5aWR4ID49IE5VTV9XRVBLRVlTKSByZXR1cm4gLTI7CisKKwlrZXlsZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXlpZHhdOworCisJaWYgKGtleWxlbiA9PSAwKSByZXR1cm4gLTM7CisKKwkvKiBjb3B5IHRoZSByZXN0IG9mIHRoZSBrZXkgb3ZlciBmcm9tIHRoZSBkZXNpZ25hdGVkIGtleSAqLworCW1lbWNweShrZXkrMywgd2xhbmRldi0+d2VwX2tleXNba2V5aWR4XSwga2V5bGVuKTsKKworCWtleWxlbis9MzsgIC8qIGFkZCBpbiBJViBieXRlcyAqLworCisjaWZkZWYgV0VQX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIkQgJWQ6ICUwMnggJTAyeCAlMDJ4ICglZCAlZCkgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBsZW4sIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleWlkeCwga2V5bGVuLCBrZXlbM10sIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSk7CisjZW5kaWYKKworCS8qIHNldCB1cCB0aGUgUkM0IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorCQlzW2ldID0gaTsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaiA9IChqICsgc1tpXSArIGtleVtpICUga2V5bGVuXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCX0KKworCS8qIEFwcGx5IHRoZSBSQzQgdG8gdGhlIGRhdGEsIHVwZGF0ZSB0aGUgQ1JDMzIgKi8KKwljcmMgPSB+MDsKKwlpID0gaiA9IDA7CisJZm9yIChrID0gMDsgayA8IGxlbjsgaysrKSB7CisJCWkgPSAoaSsxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWJ1ZltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKKwkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOworCX0KKwljcmMgPSB+Y3JjOworCisJLyogbm93IGxldCdzIGNoZWNrIHRoZSBjcmMgKi8KKwljX2NyY1swXSA9IGNyYzsKKwljX2NyY1sxXSA9IGNyYyA+PiA4OworCWNfY3JjWzJdID0gY3JjID4+IDE2OworCWNfY3JjWzNdID0gY3JjID4+IDI0OworCisJZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworCQlpID0gKGkgKyAxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWlmICgoY19jcmNba10gXiBzWyhzW2ldICsgc1tqXSkgJiAweGZmXSkgIT0gaWN2W2tdKQorCQkJcmV0dXJuIC0oNCB8IChrIDw8IDQpKSA7IC8qIElDViBtaXNtYXRjaCAqLworCX0KKworCXJldHVybiAwOworfQorCisvKiBlbmNyeXB0cyBpbi1wbGFjZS4gKi8KK2ludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQ4ICpkc3QsIFVJTlQzMiBsZW4sIGludCBrZXludW0sIFVJTlQ4ICppdiwgVUlOVDggKmljdikKK3sKKwlVSU5UMzIgaSwgaiwgaywgY3JjLCBrZXlsZW47CisJVUlOVDggc1syNTZdLCBrZXlbNjRdOworCisJLyogbm8gcG9pbnQgaW4gV0VQcGluZyBhbiBlbXB0eSBmcmFtZSAqLworCWlmIChsZW4gPD0gMCkgcmV0dXJuIC0xOworCisJLyogd2UgbmVlZCB0byBoYXZlIGEgcmVhbCBrZXkuLiAqLworCWlmIChrZXludW0gPj0gTlVNX1dFUEtFWVMpIHJldHVybiAtMjsKKwlrZXlsZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXludW1dOworCWlmIChrZXlsZW4gPD0gMCkgcmV0dXJuIC0zOworCisJLyogdXNlIGEgcmFuZG9tIElWLiAgQW5kIHNraXAga25vd24gd2VhayBvbmVzLiAqLworCWdldF9yYW5kb21fYnl0ZXMoaXYsIDMpOworCXdoaWxlICgoaXZbMV0gPT0gMHhmZikgJiYgKGl2WzBdID49IDMpICYmIChpdlswXSA8IGtleWxlbikpCisJCWdldF9yYW5kb21fYnl0ZXMoaXYsIDMpOworCisJaXZbM10gPSAoa2V5bnVtICYgMHgwMykgPDwgNjsKKworCWtleVswXSA9IGl2WzBdOworCWtleVsxXSA9IGl2WzFdOworCWtleVsyXSA9IGl2WzJdOworCisJLyogY29weSB0aGUgcmVzdCBvZiB0aGUga2V5IG92ZXIgZnJvbSB0aGUgZGVzaWduYXRlZCBrZXkgKi8KKwltZW1jcHkoa2V5KzMsIHdsYW5kZXYtPndlcF9rZXlzW2tleW51bV0sIGtleWxlbik7CisKKwlrZXlsZW4rPTM7ICAvKiBhZGQgaW4gSVYgYnl0ZXMgKi8KKworI2lmZGVmIFdFUF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJFICVkICglZC8lZCAlZCkgJTAyeCAlMDJ4ICUwMnggJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBsZW4sICBpdlszXSwga2V5bnVtLCBrZXlsZW4sIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleVszXSwga2V5WzRdLCBrZXlbNV0sIGtleVs2XSwga2V5WzddKTsKKyNlbmRpZgorCisJLyogc2V0IHVwIHRoZSBSQzQgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCXNbaV0gPSBpOworCWogPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXlsZW5dKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJfQorCisJLyogVXBkYXRlIENSQzMyIHRoZW4gYXBwbHkgUkM0IHRvIHRoZSBkYXRhICovCisJY3JjID0gfjA7CisJaSA9IGogPSAwOworCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgeworCQljcmMgPSB3ZXBfY3JjMzJfdGFibGVbKGNyYyBeIGJ1ZltrXSkgJiAweGZmXSBeIChjcmMgPj4gOCk7CisJCWkgPSAoaSsxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWRzdFtrXSA9IGJ1ZltrXSBeIHNbKHNbaV0gKyBzW2pdKSAmIDB4ZmZdOworCX0KKwljcmMgPSB+Y3JjOworCisJLyogbm93IGxldCdzIGVuY3J5cHQgdGhlIGNyYyAqLworCWljdlswXSA9IGNyYzsKKwlpY3ZbMV0gPSBjcmMgPj4gODsKKwlpY3ZbMl0gPSBjcmMgPj4gMTY7CisJaWN2WzNdID0gY3JjID4+IDI0OworCisJZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworCQlpID0gKGkgKyAxKSAmIDB4ZmY7CisJCWogPSAoaitzW2ldKSAmIDB4ZmY7CisJCVNTV0FQKGksaik7CisJCWljdltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZiYTQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCkBAIC0wLDAgKzEsMjA0OCBAQAorLyogc3JjL3A4MDIxMS9wODAyMTF3ZXh0LmMKKyoKKyogR2x1ZSBjb2RlIHRvIG1ha2UgbGludXgtd2xhbi1uZyBhIGhhcHB5IHdpcmVsZXNzIGV4dGVuc2lvbiBjYW1wZXIuCisqCisqIG9yaWdpbmFsIGF1dGhvcjogIFJleWsgRmxvZXRlciA8cmV5a0BzeW5hY2suZGU+CisqIENvbXBsZXRlbHkgcmUtd3JpdHRlbiBieSBTb2xvbW9uIFBlYWNoeSA8c29sb21vbkBsaW51eC13bGFuLmNvbT4KKyoKKyogQ29weXJpZ2h0IChDKSAyMDAyIEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKTsKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCk7CisvKiBjb21wYXRpYmlsaXR5IHRvIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBXSVJFTEVTU19FWFQKKworc3RhdGljIFVJTlQ4IHA4MDIxMV9taHpfdG9fY2hhbm5lbChVSU5UMTYgbWh6KQoreworCWlmIChtaHogPj0gNTAwMCkgeworCQlyZXR1cm4gKChtaHogLSA1MDAwKSAvIDUpOworCX0KKworCWlmIChtaHogPT0gMjQ4MikKKwkJcmV0dXJuIDE0OworCisJaWYgKG1oeiA+PSAyNDA3KSB7CisJCXJldHVybiAoKG1oeiAtIDI0MDcpIC8gNSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBVSU5UMTYgcDgwMjExX2NoYW5uZWxfdG9fbWh6KFVJTlQ4IGNoLCBpbnQgZG90MTFhKQoreworCisJaWYgKGNoID09IDApCisJCXJldHVybiAwOworCWlmIChjaCA+IDIwMCkKKwkJcmV0dXJuIDA7CisKKwkvKiA1RyAqLworCisJaWYgKGRvdDExYSkgeworCQlyZXR1cm4gKDUwMDAgKyAoNSAqIGNoKSk7CisJfQorCisJLyogMi40RyAqLworCisJaWYgKGNoID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKworCWlmICgoY2ggPCAxNCkgJiYgKGNoID4gMCkpIHsKKwkJcmV0dXJuICgyNDA3ICsgKDUgKiBjaCkpOworCX0KKworCXJldHVybiAwOworfQorCisvKiB0YWtlbiBmcm9tIG9yaW5vY28uYyA7LSkgKi8KK3N0YXRpYyBjb25zdCBsb25nIHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW10gPSB7CisJMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKKwkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0Cit9OworI2RlZmluZSBOVU1fQ0hBTk5FTFMgKHNpemVvZihwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcSkgLyBzaXplb2YocDgwMjExd2V4dF9jaGFubmVsX2ZyZXFbMF0pKQorCisvKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLiBzaG91bGQgZGVmYXVsdCB0byBvcGVuIGlmIG5vdCBzZXQgKi8KKyNkZWZpbmUgSE9TVFdFUF9TSEFSRURLRVkgQklUMworCisKKy8qKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQgcXVhbF9hc19wZXJjZW50KGludCBzbnIgKSB7CisgIGlmICggc25yIDw9IDAgKQorICAgIHJldHVybiAwOworICBpZiAoIHNuciA8PSA0MCApCisgICAgcmV0dXJuIHNucio1LzI7CisgIHJldHVybiAxMDA7Cit9CisKKworCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMzIgZGlkLCBVSU5UMzIgZGF0YSkKK3sKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QJCW1pYml0ZW07CisJaW50CXJlc3VsdDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0uZGlkID0gZGlkOworCW1pYml0ZW0uZGF0YSA9IGRhdGE7CisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKwlzdHJ1Y3QgaXdfcG9pbnQJCQlkYXRhOworCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwkvKiBHZXQgRVNTSUQgKi8KKwlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd2Vzc2lkKHdsYW5kZXYtPm5ldGRldiwgTlVMTCwgJmRhdGEsIHNzaWQpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQorCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWVsc2UKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKwkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLworCisJaWYgKGRhdGEubGVuZ3RoICYmIHNzaWRbZGF0YS5sZW5ndGgtMV0gPT0gJ1wwJykgeworCQlkYXRhLmxlbmd0aCA9IGRhdGEubGVuZ3RoIC0gMTsKKwl9CisKKwltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBzc2lkLCBkYXRhLmxlbmd0aCk7CisJbXNnLnNzaWQuZGF0YS5sZW4gPSBkYXRhLmxlbmd0aDsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKKworfQorCisvKiBjYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzICovCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyogcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMgKG5ldGRldmljZV90ICpkZXYpCit7CisJcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAgcXVhbGl0eTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MqIHdzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CisJaW50IHJldHZhbDsKKworCURCRkVOVEVSOworCS8qIENoZWNrICovCisJaWYgKCAod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykgKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFhYWCBPbmx5IHZhbGlkIGluIHN0YXRpb24gbW9kZSAqLworCXdzdGF0cy0+c3RhdHVzID0gMDsKKworCS8qIGJ1aWxkIHJlcXVlc3QgbWVzc2FnZSAqLworCXF1YWxpdHkubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OworCXF1YWxpdHkuZGJtLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJcXVhbGl0eS5kYm0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogc2VuZCBtZXNzYWdlIHRvIG5zZCAqLworCWlmICggd2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCApCisJCXJldHVybiBOVUxMOworCisJcmV0dmFsID0gd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgKHA4MDIxMW1zZ190KikgJnF1YWxpdHkpOworCisJd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOyAgICAvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsgIC8qIGluc3RhbnQgc2lnbmFsIGxldmVsICovCisJd3N0YXRzLT5xdWFsLm5vaXNlID0gcXVhbGl0eS5ub2lzZS5kYXRhOyAgLyogaW5zdGFudCBub2lzZSBsZXZlbCAqLworCisjaWYgV0lSRUxFU1NfRVhUID4gMTgKKwl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKKyNlbHNlCisJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSA3OworI2VuZGlmCisJd3N0YXRzLT5kaXNjYXJkLmNvZGUgPSB3bGFuZGV2LT5yeC5kZWNyeXB0X2VycjsKKwl3c3RhdHMtPmRpc2NhcmQubndpZCA9IDA7CisJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOworCisjaWYgV0lSRUxFU1NfRVhUID4gMTEKKwl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSAwOyAgLy8gaW5jb21wbGV0ZSBmcmFnbWVudHMKKwl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IDA7ICAgLy8gdHggcmV0cmllcy4KKwl3c3RhdHMtPm1pc3MuYmVhY29uID0gMDsKKyNlbmRpZgorCisJREJGRVhJVDsKKworCXJldHVybiB3c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXduYW1lKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGl3X3BhcmFtIHJhdGU7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gcDgwMjExd2V4dF9naXdyYXRlKGRldiwgTlVMTCwgJnJhdGUsIE5VTEwpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoIChyYXRlLnZhbHVlKSB7CisJY2FzZSAxMDAwMDAwOgorCWNhc2UgMjAwMDAwMDoKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOworCQlicmVhazsKKwljYXNlIDU1MDAwMDA6CisJY2FzZSAxMTAwMDAwMDoKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1iIik7CisJCWJyZWFrOworCX0KK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZnJlcShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlpZiAobWliaXRlbS5kYXRhID4gTlVNX0NIQU5ORUxTKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjb252ZXJ0IGludG8gZnJlcXVlbmN5IGluc3RlYWQgb2YgYSBjaGFubmVsICovCisJZnJlcS0+ZSA9IDE7CisJZnJlcS0+bSA9IHA4MDIxMV9jaGFubmVsX3RvX21oeihtaWJpdGVtLmRhdGEsIDApICogMTAwMDAwOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdmcmVxKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOworCW1pYml0ZW0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJaWYgKCAoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSApCisJCW1pYml0ZW0uZGF0YSA9IGZyZXEtPm07CisJZWxzZQorCQltaWJpdGVtLmRhdGEgPSBwODAyMTFfbWh6X3RvX2NoYW5uZWwoZnJlcS0+bSk7CisKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKKyNpZiBXSVJFTEVTU19FWFQgPiA4CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdtb2RlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7CisJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6CisJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX1NUQToKKwkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfQVA6CisJCSptb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdCBzZXQgeWV0LiAqLworCQkqbW9kZSA9IElXX01PREVfQVVUTzsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3bW9kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCAJcmVzdWx0OworCWludCAgICAgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICgqbW9kZSAhPSBJV19NT0RFX0FESE9DICYmICptb2RlICE9IElXX01PREVfSU5GUkEgJiYKKwkgICAgKm1vZGUgIT0gSVdfTU9ERV9NQVNURVIpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIE9wZXJhdGlvbiBtb2RlIGlzIHRoZSBzYW1lIHdpdGggY3VycmVudCBtb2RlICovCisJaWYgKCptb2RlID09IHdsYW5kZXYtPm1hY21vZGUpCisJCWdvdG8gZXhpdDsKKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfSUJTU19TVEE7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfU1RBOworCQlicmVhazsKKwljYXNlIElXX01PREVfTUFTVEVSOgorCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTm90IHNldCB5ZXQuICovCisJCVdMQU5fTE9HX0lORk8oIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogU2V0IE9wZXJhdGlvbiBtb2RlIHRvIHRoZSBQT1JUIFRZUEUgUklEICovCisKKyN3YXJuaW5nICJnZXQgcmlkIG9mIHAybWliIGhlcmUiCisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQb3J0VHlwZTsKKwltaWJpdGVtLmRhdGEgPSAoKm1vZGUgPT0gSVdfTU9ERV9BREhPQykgPyAwIDogMTsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworIGV4aXQ6CisJREJGRVhJVDsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhbmdlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworICAgICAgICBzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlpbnQgaSwgdmFsOworCisJREJGRU5URVI7CisKKwkvLyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBzZXQgc2l6ZSAmIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kCisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7CisJbWVtc2V0KHJhbmdlLDAsc2l6ZW9mKCpyYW5nZSkpOworCisjaWYgV0lSRUxFU1NfRVhUID4gOQorCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisJLy8gWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuCisjZW5kaWYKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7CisKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDE2CisgICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzBdID0gKElXX0VWRU5UX0NBUEFfS18wIHwgIC8vbW9kZS9mcmVxL3NzaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKKyAgICAgICAgcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsgIC8vZW5jb2RlCisgICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkgKTsKKyNlbmRpZgorCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKKworCS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCisJdmFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTIDsgaSsrKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcVtpXSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKKwkJdmFsKys7CisJfQorCisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSB2YWw7CisKKwkvKiBNYXggb2YgL3Byb2MvbmV0L3dpcmVsZXNzICovCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7CisJLy8gWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljIQorCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gTlVNX1dFUEtFWVM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisKKwkvLyBYWFggd2hhdCBhYm91dCBudW1fYml0cmF0ZXMvdGhyb3VnaHB1dD8KKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gMDsKKworCS8qIGVzdGltYXRlZCBtYXggdGhyb3VnaHB1dCAqLworCS8vIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uCisJcmFuZ2UtPnRocm91Z2hwdXQgPSA1NTAwMDAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3YXAobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKyNpZiBXSVJFTEVTU19FWFQgPiA4CitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZW5jb2RlKG5ldGRldmljZV90ICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJZWxzZQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CisKKwlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKworCWlmIChpID09IC0xKQorCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOworCisJaWYgKChpIDwgMCkgfHwgKGkgPj0gTlVNX1dFUEtFWVMpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnEtPmZsYWdzIHw9IGkgKyAxOworCisJLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KKwllcnEtPmxlbmd0aCA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2ldOworCW1lbWNweShrZXksIHdsYW5kZXYtPndlcF9rZXlzW2ldLCBlcnEtPmxlbmd0aCk7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2VuY29kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKKwlwODAyMTFpdGVtX3BzdHIzMl90CQlwc3RyOworCisJaW50IGVyciA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGVuYWJsZSA9IDA7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ2hlY2sgdGhlIEtleSBpbmRleCBmaXJzdC4gKi8KKwlpZigoaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSkpIHsKKworCQlpZiAoKGkgPCAxKSB8fCAoaSA+IE5VTV9XRVBLRVlTKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQllbHNlCisJCQlpLS07CisKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELCBpKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJCWVsc2UgeworCQkJZW5hYmxlID0gMTsKKwkJfQorCisJfQorCWVsc2UgeworCQkvLyBEbyBub3QgdGhpbmcgd2hlbiBubyBLZXkgSW5kZXgKKwl9CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBubyBrZXkgaW5mb3JtYXRpb24gaW4gdGhlIGl3Y29uZmlnIHJlcXVlc3QgKi8KKwlpZigoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCAmJiBlbmFibGUgPT0gMSkgeworCisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAqIElmIHRoZXJlIGlzIFdFUCBLZXkgZm9yIHNldHRpbmcsIGNoZWNrIHRoZSBLZXkgSW5mb3JtYXRpb24KKwkJICogYW5kIHRoZW4gc2V0IGl0IHRvIHRoZSBmaXJtd2FyZS4KKwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKKworCQkJLyogY29weSB0aGUga2V5IGZyb20gdGhlIGRyaXZlciBjYWNoZSBhcyB0aGUga2V5cyBhcmUgcmVhZC1vbmx5IE1JQnMgKi8KKwkJCXdsYW5kZXYtPndlcF9rZXlsZW5zW2ldID0gZXJxLT5sZW5ndGg7CisJCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaV0sIGtleSwgZXJxLT5sZW5ndGgpOworCisJCQkvKiBQcmVwYXJlIGRhdGEgc3RydXR1cmUgZm9yIHA4MDIxMXJlcV9kb3JlcXVlc3QuICovCisJCQltZW1jcHkocHN0ci5kYXRhLmRhdGEsIGtleSwgZXJxLT5sZW5ndGgpOworCQkJcHN0ci5kYXRhLmxlbiA9IGVycS0+bGVuZ3RoOworCisJCQlzd2l0Y2goaSkKKwkJCXsKKwkJCQljYXNlIDA6CisJCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMToKKwkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAyOgorCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDM6CisJCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJCQlpZiAocmVzdWx0KSB7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKworCX0KKworCS8qIENoZWNrIHRoZSBQcml2YWN5SW52b2tlZCBmbGFnICovCisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCX0KKwllbHNlIGlmKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0VOQUJMRUQpIHx8IGVuYWJsZSA9PSAxKSB7CisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCX0KKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCS8qIENoZWNrIHRoZSBFeGNsdWRlVW5lbmNyeXB0ZWQgZmxhZyAqLworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCX0KKwllbHNlIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pIHsKKwkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZXNzaWQobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+c3NpZC5sZW4pIHsKKwkJZGF0YS0+bGVuZ3RoID0gd2xhbmRldi0+c3NpZC5sZW47CisJCWRhdGEtPmZsYWdzID0gMTsKKwkJbWVtY3B5KGVzc2lkLCB3bGFuZGV2LT5zc2lkLmRhdGEsIGRhdGEtPmxlbmd0aCk7CisJCWVzc2lkW2RhdGEtPmxlbmd0aF0gPSAwOworI2lmIChXSVJFTEVTU19FWFQgPCAyMSkKKwkJZGF0YS0+bGVuZ3RoKys7CisjZW5kaWYKKwl9IGVsc2UgeworCSAgCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOworCQlkYXRhLT5sZW5ndGggPSAwOworCQlkYXRhLT5mbGFncyA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisJaW50IGxlbmd0aCA9IGRhdGEtPmxlbmd0aDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCisJaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQorCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWVsc2UKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKyNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCisJaWYgKGxlbmd0aCkgbGVuZ3RoLS07CisjZW5kaWYKKworCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCisKKwlpZiAobGVuZ3RoICYmIGVzc2lkW2xlbmd0aC0xXSA9PSAnXDAnKSB7CisJICBsZW5ndGgtLTsKKwl9CisKKwltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBlc3NpZCwgbGVuZ3RoKTsKKwltc2cuc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKKworCVdMQU5fTE9HX0RFQlVHKDEsImF1dG9qb2luX3NzaWQgZm9yICVzIFxuIixlc3NpZCk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJhdXRvam9pbl9zc2lkICVkXG4iLHJlc3VsdCk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3Y29tbWl0KG5ldGRldmljZV90ICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEF1dG8gSm9pbiAqLworCWVyciA9IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldik7CisKKyBleGl0OgorIAlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhdGUobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlycnEtPmZpeGVkID0gMDsgICAvKiBjYW4gaXQgY2hhbmdlPyAqLworCXJycS0+ZGlzYWJsZWQgPSAwOworCXJycS0+dmFsdWUgPSAwOworCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMQkJCSgoVUlOVDE2KTEpCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMgkJCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfNWRvdDUJCQkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzExCQkJKChVSU5UMTYpOCkKKworCXN3aXRjaCAobWliaXRlbS5kYXRhKSB7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfMToKKwkJcnJxLT52YWx1ZSA9IDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzI6CisJCXJycS0+dmFsdWUgPSAyMDAwMDAwOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF81ZG90NToKKwkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzExOgorCQlycnEtPnZhbHVlID0gMTEwMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cnRzKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlydHMtPnZhbHVlID0gbWliaXRlbS5kYXRhOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSAyMzQ3KTsKKwlydHMtPmZpeGVkID0gMTsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdydHMobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOworCWlmIChydHMtPmRpc2FibGVkKQorCQltaWJpdGVtLmRhdGEgPSAyMzQ3OworCWVsc2UKKwkJbWliaXRlbS5kYXRhID0gcnRzLT52YWx1ZTsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlmcmFnLT52YWx1ZSA9IG1pYml0ZW0uZGF0YTsKKwlmcmFnLT5kaXNhYmxlZCA9IChmcmFnLT52YWx1ZSA9PSAyMzQ2KTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKKworCWlmIChmcmFnLT5kaXNhYmxlZCkKKwkJbWliaXRlbS5kYXRhID0gMjM0NjsKKwllbHNlCisJCW1pYml0ZW0uZGF0YSA9IGZyYWctPnZhbHVlOworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+IDggKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisKKyNpZm5kZWYgSVdfUkVUUllfTE9ORworI2RlZmluZSBJV19SRVRSWV9MT05HIElXX1JFVFJZX01BWAorI2VuZGlmCisKKyNpZm5kZWYgSVdfUkVUUllfU0hPUlQKKyNkZWZpbmUgSVdfUkVUUllfU0hPUlQgSVdfUkVUUllfTUlOCisjZW5kaWYKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCVVJTlQxNiBzaG9ydHJldHJ5LCBsb25ncmV0cnksIGxpZmV0aW1lOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdDsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlzaG9ydHJldHJ5ID0gbWliaXRlbS5kYXRhOworCisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKKworCWxvbmdyZXRyeSA9IG1pYml0ZW0uZGF0YTsKKworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlsaWZldGltZSA9IG1pYml0ZW0uZGF0YTsKKworCXJycS0+ZGlzYWJsZWQgPSAwOworCisJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKKwkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOworCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDI0OworCX0gZWxzZSB7CisJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKKwkJCXJycS0+dmFsdWUgPSBsb25ncmV0cnk7CisJCX0gZWxzZSB7CisJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJCQlycnEtPnZhbHVlID0gc2hvcnRyZXRyeTsKKwkJCWlmIChzaG9ydHJldHJ5ICE9IGxvbmdyZXRyeSkKKwkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOworCQl9CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHJycS0+ZGlzYWJsZWQpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKworCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwkJbWliaXRlbS5kYXRhID0gIHJycS0+dmFsdWUgLz0gMTAyNDsKKworCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CisJCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQllcnIgPSAtRUZBVUxUOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpIHsKKwkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQllcnIgPSAtRUZBVUxUOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworCit9CisKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLworCisjaWYgV0lSRUxFU1NfRVhUID4gOQorc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3R4cG93KG5ldGRldmljZV90ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisgICAgICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgaW50IGVyciA9IDA7CisKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICBpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworICAgICAgICAgICAgICAgIGVyciA9ICgtRU9QTk9UU1VQUCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCisgICAgICAgIHN3aXRjaCAocnJxLT52YWx1ZSkgeworCisgICAgICAgICAgY2FzZSAxIDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwxOyBicmVhazsKKyAgICAgICAgICBjYXNlIDIgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDI7IGJyZWFrOworICAgICAgICAgIGNhc2UgMyA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMzsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw0OyBicmVhazsKKyAgICAgICAgICBjYXNlIDUgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDU7IGJyZWFrOworICAgICAgICAgIGNhc2UgNiA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNjsgYnJlYWs7CisgICAgICAgICAgY2FzZSA3IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw3OyBicmVhazsKKyAgICAgICAgICBjYXNlIDggOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDg7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsODsgYnJlYWs7CisJfQorCisgICAgICAgIG1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKyAgICAgICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAtRUZBVUxUOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgZXhpdDoKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3R4cG93KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKKworCS8vIFhYWCBoYW5kbGUgT0ZGIGJ5IHNldHRpbmcgZGlzYWJsZWQgPSAxOworCisJcnJxLT5mbGFncyA9IDA7IC8vIElXX1RYUE9XX0RCTTsKKwlycnEtPmRpc2FibGVkID0gMDsKKwlycnEtPmZpeGVkID0gMDsKKwlycnEtPnZhbHVlID0gbWliaXRlbS5kYXRhOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gOSAqLworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c3B5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOworICAgICAgICBpbnQgbnVtYmVyID0gc3JxLT5sZW5ndGg7CisgICAgICAgIGludCBpOworCisJREJGRU5URVI7CisKKwkvKiBDb3B5IHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciAqLworCW1lbWNweShhZGRyZXNzLCBleHRyYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKKworICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKKworICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCisgICAgICAgICAgICAgICAgLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSh3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgYWRkcmVzc1tpXS5zYV9kYXRhLCBFVEhfQUxFTik7CisJCX0KKworICAgICAgICAgICAgICAgIC8qIHJlc2V0IHN0YXRzICovCisgICAgICAgICAgICAgICAgbWVtc2V0KHdsYW5kZXYtPnNweV9zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogSVdfTUFYX1NQWSk7CisKKyAgICAgICAgICAgICAgICAvKiBzZXQgbnVtYmVyIG9mIGFkZHJlc3NlcyAqLworICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9udW1iZXIgPSBudW1iZXI7CisgICAgICAgIH0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGprcmllZ2w6IGZyb20gb3Jpbm9jbywgbW9kaWZpZWQgKi8KK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzcHkobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKKyAgICAgICAgc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisgICAgICAgIGludCBudW1iZXI7CisgICAgICAgIGludCBpOworCisJREJGRU5URVI7CisKKyAgICAgICAgbnVtYmVyID0gd2xhbmRldi0+c3B5X251bWJlcjsKKworICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCisgICAgICAgICAgICAgICAgLyogcG9wdWxhdGUgYWRkcmVzcyBhbmQgc3B5IHN0cnVjdCdzICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcmVzc1tpXS5zYV9kYXRhLCB3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwgRVRIX0FMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1tpXS5zYV9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICAgICAgICAgIAltZW1jcHkoJnNweV9zdGF0W2ldLCAmd2xhbmRldi0+c3B5X3N0YXRbaV0sIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpOworICAgICAgICAgICAgICAgIH0KKworCQkvKiByZXNldCB1cGRhdGUgZmxhZyAqLworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbnVtYmVyOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLworICAgICAgICBzcnEtPmxlbmd0aCA9IG51bWJlcjsKKwltZW1jcHkoZXh0cmEsIGFkZHJlc3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlcik7CisJbWVtY3B5KGV4dHJhK3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlciwgc3B5X3N0YXQsIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkqbnVtYmVyKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX3Jlc3VsdDJlcnIgKGludCBwcmlzbTJfcmVzdWx0KQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChwcmlzbTJfcmVzdWx0KSB7CisJCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZToKKwkJCWVyciA9IC1FSU87CisJCQlicmVhazsKKwkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDoKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworI2lmIFdJUkVMRVNTX0VYVCA+IDEzCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QJbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisJaW50IGkgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX0FQKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtc2V0KCZtc2csIDB4MDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90KSk7CisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2NhbjsKKwltc2cuYnNzdHlwZS5kYXRhID0gUDgwMjExRU5VTV9ic3N0eXBlX2FueTsKKworCW1lbXNldCgmKG1zZy5ic3NpZC5kYXRhKSwgMHhGRiwgc2l6ZW9mIChwODAyMTFpdGVtX3BzdHI2X3QpKTsKKwltc2cuYnNzaWQuZGF0YS5sZW4gPSA2OworCisJbXNnLnNjYW50eXBlLmRhdGEgPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZTsKKwltc2cucHJvYmVkZWxheS5kYXRhID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gMTQ7IGkrKykKKwkJbXNnLmNoYW5uZWxsaXN0LmRhdGEuZGF0YVtpLTFdID0gaTsKKwltc2cuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSAxNDsKKworCW1zZy5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOworCW1zZy5taW5jaGFubmVsdGltZS5kYXRhID0gMjAwOworCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCWlmIChyZXN1bHQpCisJCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyIChtc2cucmVzdWx0Y29kZS5kYXRhKTsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIEhlbHBlciB0byB0cmFuc2xhdGUgc2NhbiBpbnRvIFdpcmVsZXNzIEV4dGVuc2lvbnMgc2NhbiByZXN1bHRzLgorICogSW5zcGlyZWQgYnkgdGhlIHByaXNtNTQgY29kZSwgd2hpY2ggd2FzIGluIHR1cm4gaW5zcGlyZWQgYnkgdGhlCisgKiBhaXJvIGRyaXZlciBjb2RlLgorICovCitzdGF0aWMgY2hhciAqCit3ZXh0X3RyYW5zbGF0ZV9ic3Moc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3VycmVudF9ldiwKKwkJICAgY2hhciAqZW5kX2J1ZiwgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpic3MpCit7CisJc3RydWN0IGl3X2V2ZW50IGl3ZTsJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCisJLyogVGhlIGZpcnN0IGVudHJ5IG11c3QgYmUgdGhlIE1BQyBhZGRyZXNzICovCisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZC5kYXRhLmRhdGEsIFdMQU5fQlNTSURfTEVOKTsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBUaGUgZm9sbG93aW5nIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisKKwkvKiBUaGUgRVNTSUQuICovCisJaWYgKGJzcy0+c3NpZC5kYXRhLmxlbiA+IDApIHsKKwkJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCQlpbnQgc2l6ZTsKKworCQlzaXplID0gd2xhbl9taW4oSVdfRVNTSURfTUFYX1NJWkUsIGJzcy0+c3NpZC5kYXRhLmxlbik7CisJCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZiAoZXNzaWQpKTsKKwkJbWVtY3B5KCZlc3NpZCwgYnNzLT5zc2lkLmRhdGEuZGF0YSwgc2l6ZSk7CisJCVdMQU5fTE9HX0RFQlVHKDEsICIgZXNzaWQgc2l6ZSA9ICVkXG4iLCBzaXplKTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplOworCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICZlc3NpZFswXSk7CisJCVdMQU5fTE9HX0RFQlVHKDEsICIgZXNzaWQgc2l6ZSBPSy5cbiIpOworCX0KKworCXN3aXRjaCAoYnNzLT5ic3N0eXBlLmRhdGEpIHsKKwkJY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmU6CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCQlicmVhazsKKworCQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWl3ZS51Lm1vZGUgPSAwOworCQkJYnJlYWs7CisJfQorCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwlpZiAoaXdlLnUubW9kZSkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKworCS8qIEVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLworCWlmIChic3MtPnByaXZhY3kuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKworCS8qIEFkZCBmcmVxdWVuY3kuIChzaG9ydCkgYnNzLT5jaGFubmVsIGlzIHRoZSBmcmVxdWVuY3kgaW4gTUh6ICovCisJaXdlLnUuZnJlcS5tID0gYnNzLT5kc2NoYW5uZWwuZGF0YTsKKwlpd2UudS5mcmVxLmUgPSAwOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLworCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnNpZ25hbC5kYXRhOworCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlLmRhdGE7CisJLyogZG8gYSBzaW1wbGUgU05SIGZvciBxdWFsaXR5ICovCisJaXdlLnUucXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KGJzcy0+c2lnbmFsLmRhdGEgLSBic3MtPm5vaXNlLmRhdGEpOworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3NjYW4obmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QJbXNnOworCWludCByZXN1bHQgPSAwOworCWludCBlcnIgPSAwOworCWludCBpID0gMDsKKwlpbnQgc2Nhbl9nb29kID0gMDsKKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7CisKKwlEQkZFTlRFUjsKKworCS8qIFNpbmNlIHdpcmVsZXNzIHRvb2xzIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSB3YXkgb2YgcGFzc2luZyBob3cKKwkgKiBtYW55IHNjYW4gcmVzdWx0cyByZXN1bHRzIHRoZXJlIHdlcmUgYmFjayBoZXJlLCBrZWVwIGdyYWJiaW5nIHRoZW0KKwkgKiB1bnRpbCB3ZSBmYWlsLgorCSAqLworCWRvIHsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzOworCQltc2cuYnNzaW5kZXguZGF0YSA9IGk7CisKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCQlpZiAoKHJlc3VsdCAhPSAwKSB8fAorCQkgICAgKG1zZy5yZXN1bHRjb2RlLmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpKSB7CisJCQlicmVhazsKKwkJfQorCisJCWN1cnJlbnRfZXYgPSB3ZXh0X3RyYW5zbGF0ZV9ic3MoaW5mbywgY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmbXNnKTsKKwkJc2Nhbl9nb29kID0gMTsKKwkJaSsrOworCX0gd2hpbGUgKGkgPCBJV19NQVhfQVApOworCisJc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKKwlzcnEtPmZsYWdzID0gMDsJLyogdG9kbyAqLworCisJaWYgKHJlc3VsdCAmJiAhc2Nhbl9nb29kKQorCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVyciAobXNnLnJlc3VsdGNvZGUuZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy9leHRyYSB3aXJlbGVzcyBleHRlbnNpb25zIHN0dWZmIHRvIHN1cHBvcnQgTmV0d29ya01hbmFnZXIgKEkgaG9wZSkKKworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisvKiBTSU9DU0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKyAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAltc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdAkJKnBzdHI7CisKKyAgaW50IHJlc3VsdCA9IDA7CisgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisgIGludCBpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKKworCisgIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSApIHsKKyAgICAvLyBzZXQgZGVmYXVsdCBrZXkgPyBJJ20gbm90IHN1cmUgaWYgdGhpcyB0aGUgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZQorCisgICAgaWYgKCBpZHggKSB7CisgICAgICBpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUykgeworCXJldHVybiAtRUlOVkFMOworICAgICAgfSBlbHNlCisJaWR4LS07CisgICAgfQorICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldHRpbmcgZGVmYXVsdCBrZXkgKCVkKVxuIixpZHgpOworICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwgaWR4KTsKKyAgICBpZiAoIHJlc3VsdCApCisgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgfQorCisKKyAgaWYgKCBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSApIHsKKyAgICBpZiAoICEgZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkgeworICAgICAgV0xBTl9MT0dfREVCVUcoMSwiYXNrZWQgdG8gc2V0IGEgbm9uIHdlcCBrZXkgOigiKTsKKyAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAgICBpZiAoaWR4KSB7CisgICAgICBpZiAoaWR4IDwxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQorCXJldHVybiAtRUlOVkFMOworICAgICAgZWxzZQorCWlkeC0tOworICAgIH0KKyAgICBXTEFOX0xPR19ERUJVRygxLCJTZXQgV0VQIGtleSAoJWQpXG4iLGlkeCk7CisgICAgd2xhbmRldi0+d2VwX2tleWxlbnNbaWR4XSA9IGV4dC0+a2V5X2xlbjsKKyAgICBtZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisKKyAgICBtZW1zZXQoICZtc2csMCxzaXplb2YobXNnKSk7CisgICAgcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90KikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworICAgIG1lbWNweShwc3RyLT5kYXRhLmRhdGEsIGV4dC0+a2V5LGV4dC0+a2V5X2xlbik7CisgICAgcHN0ci0+ZGF0YS5sZW4gPSBleHQtPmtleV9sZW47CisgICAgc3dpdGNoIChpZHgpIHsKKyAgICBjYXNlIDA6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICBwc3RyLT5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICAgIG1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKyAgICByZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsKFVJTlQ4KikmbXNnKTsKKyAgICBXTEFOX0xPR19ERUJVRygxLCJyZXN1bHQgKCVkKVxuIixyZXN1bHQpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFNJT0NHSVdFTkNPREVFWFQgKi8KK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKKworeworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCWludCByZXN1bHQgPSAwOworCWludCBtYXhfbGVuOworCWludCBpZHg7CisKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsZXh0LT5leHRfZmxhZ3MsKGludClleHQtPmFsZywoaW50KWV4dC0+a2V5X2xlbik7CisKKworCW1heF9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmICggbWF4X2xlbiA8PSAwKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVleHQgbWF4X2xlbiBbJWRdIGludmFsaWRcbiIsbWF4X2xlbik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCisJV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgaW5kZXggWyVkXVxuIixpZHgpOworCisJaWYgKGlkeCkgeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUyApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsaWR4KTsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWR4LS07CisJfSBlbHNlIHsKKwkJLyogZGVmYXVsdCBrZXkgPyBub3Qgc3VyZSB3aGF0IHRvIGRvICovCisJCS8qIHdpbGwganVzdCB1c2Uga2V5WzBdIGZvciBub3cgISBGSVggTUUgKi8KKwl9CisKKwllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOworCW1lbXNldChleHQsMCxzaXplb2YoKmV4dCkpOworCisJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwlleHQtPmtleV9sZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdOworCW1lbWNweSggZXh0LT5rZXksIHdsYW5kZXYtPndlcF9rZXlzW2lkeF0gLCBleHQtPmtleV9sZW4gKTsKKworCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKK2V4aXQ6CisJREJGRVhJVDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogU0lPQ1NJV0FVVEggKi8KK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisgIGludCByZXN1bHQgPTA7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7CisKKyAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisgIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgIFdMQU5fTE9HX0RFQlVHKDEsImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKKyAgICBpZiAocGFyYW0tPnZhbHVlKQorICAgICAgcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKyAgICBXTEFOX0xPR19ERUJVRygxLCJwcml2YWN5IGludm9rZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKKyAgICBpZiAoIHBhcmFtLT52YWx1ZSkKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKworICAgIGJyZWFrOworCisgIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKyAgICBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNICkgeworICAgICAgV0xBTl9MT0dfREVCVUcoMSwic2V0IG9wZW5fc3lzdGVtXG4iKTsKKyAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgJj0gfkhPU1RXRVBfU0hBUkVES0VZOworICAgIH0gZWxzZSBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKKyAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBzaGFyZWQga2V5XG4iKTsKKyAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93IDooICovCisgICAgICBXTEFOX0xPR19ERUJVRygxLCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIscGFyYW0tPnZhbHVlKTsKKyAgICAgIHJlc3VsdCA9IC1FSU5WQUw7CisgICAgfQorICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKworCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogU0lPQ1NJV0FVVEggKi8KK3N0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisgIGludCByZXN1bHQgPTA7CisKKyAgV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7CisKKyAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisgIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRD8xOjA7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKyAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRD8xOjA7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWT9JV19BVVRIX0FMR19TSEFSRURfS0VZOklXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworICAgIGJyZWFrOworCisKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQorCisKKworICByZXR1cm4gcmVzdWx0OworfQorCisKKyNlbmRpZgorCisKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworCisKKy8qCit0eXBlZGVmIGludCAoKml3X2hhbmRsZXIpKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKKyovCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorc3RhdGljIGl3X2hhbmRsZXIgcDgwMjExd2V4dF9oYW5kbGVyc1tdID0gIHsKKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdjb21taXQsCQkvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJlcSwgIAkJLyogU0lPQ1NJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmVxLCAgCQkvKiBTSU9DR0lXRlJFUSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd21vZGUsICAgICAgIAkJLyogU0lPQ1NJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLCAgICAgICAJCS8qIFNJT0NHSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1NFTlMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmFuZ2UsICAgICAgCQkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyoga2VybmVsIGNvZGUgKi8gICAJCS8qIFNJT0NHSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIG5vdCB1c2VkICovICAgICAJCS8qIFNJT0NTSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBrZXJuZWwgY29kZSAqLyAgIAkJLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAkJCS8qIFNJT0NTSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdzcHksCQkJLyogU0lPQ0dJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV0FQICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3YXAsICAgICAgICAgCQkvKiBTSU9DR0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV0FQTElTVCAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDEzCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c2NhbiwJCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NjYW4sCQkJLyogU0lPQ0dJV1NDQU4gKi8KKyNlbHNlIC8qIFdJUkVMRVNTX0VYVCA+IDEzICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG51bGwgKi8JCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG51bGwgKi8JCS8qIFNJT0NHSVdTQ0FOICovCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlc3NpZCwgIAkJLyogU0lPQ1NJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsICAgICAgCQkvKiBTSU9DR0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsICAgICAgCQkvKiBTSU9DR0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYXRlLCAgICAgIAkJLyogU0lPQ0dJV1JBVEUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdydHMsICAJCS8qIFNJT0NTSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdydHMsICAgICAgICAJCS8qIFNJT0NHSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmFnLCAgICAgIAkJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmFnLCAgIAkJLyogU0lPQ0dJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXd0eHBvdywgICAgICAgICAgIAkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXd0eHBvdywgIAkJLyogU0lPQ0dJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cmV0cnksICAgICAJCS8qIFNJT0NTSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JldHJ5LCAgCQkvKiBTSU9DR0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlbmNvZGUsICAgICAJCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlbmNvZGUsICAJCS8qIFNJT0NHSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXUE9XRVIgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxNworLyogV1BBIG9wZXJhdGlvbnMgKi8KKworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogU0lPQ1NJV0dFTklFCXNldCBnZW5lcmljIElFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIFNJT0NHSVdHRU5JRQlnZXQgZ2VuZXJpYyBJRSAqLworCShpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9zZXRfaXdhdXRoLCAvKiBTSU9DU0lXQVVUSAlzZXQgYXV0aGVudGljYXRpb24gbW9kZSBwYXJhbXMgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCwgLyogU0lPQ0dJV0FVVEgJZ2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCisKKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0LCAvKiBTSU9DU0lXRU5DT0RFRVhUICBzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dCwgLyogU0lPQ0dJV0VOQ09ERUVYVCAgZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DU0lXUE1LU0EJUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCisjZW5kaWYKK307CisKK3N0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBzaXplb2YocDgwMjExd2V4dF9oYW5kbGVycykgLyBzaXplb2YoaXdfaGFuZGxlciksCisJLm51bV9wcml2YXRlID0gMCwKKwkubnVtX3ByaXZhdGVfYXJncyA9IDAsCisgICAgICAgIC5zdGFuZGFyZCA9IHA4MDIxMXdleHRfaGFuZGxlcnMsCisJLnByaXZhdGUgPSBOVUxMLAorCS5wcml2YXRlX2FyZ3MgPSBOVUxMLAorI2lmIFdJUkVMRVNTX0VYVCA+IDE2CisJLmdldF93aXJlbGVzc19zdGF0cyA9IHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzCisjZW5kaWYKK307CisKKyNlbmRpZgorCisvKiB3aXJlbGVzcyBleHRlbnNpb25zJyBpb2N0bHMgKi8KK2ludCBwODAyMTF3ZXh0X3N1cHBvcnRfaW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwlzdHJ1Y3QgaXdyZXEgKml3ciA9IChzdHJ1Y3QgaXdyZXEqKWlmcjsKKyNlbmRpZgorCisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltaWJpdGVtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCWlmICggd2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORyApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCVdMQU5fTE9HX0RFQlVHKDEsICJSZWNlaXZlZCB3aXJlbGVzcyBleHRlbnNpb24gaW9jdGwgIyVkLlxuIiwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwljYXNlIFNJT0NTSVdOQU1FOiAgLyogdW51c2VkICAqLworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdOQU1FOiAvKiBnZXQgbmFtZSA9PSB3aXJlbGVzcyBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3bmFtZShkZXYsIE5VTEwsIChjaGFyICopICZpd3ItPnUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdOV0lEOgorCWNhc2UgU0lPQ0dJV05XSUQ6CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV0ZSRVE6IC8qIHNldCBjaGFubmVsICovCisgICAgICAgICAgICAgICAgZXJyID0gcDgwMjExd2V4dF9zaXdmcmVxKGRldiwgTlVMTCwgJihpd3ItPnUuZnJlcSksIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdGUkVROiAvKiBnZXQgY2hhbm5lbCAqLworICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3ZnJlcShkZXYsIE5VTEwsICYoaXdyLT51LmZyZXEpLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXUkFOR0U6CisJY2FzZSBTSU9DU0lXUFJJVjoKKwljYXNlIFNJT0NTSVdBUDogLyogc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzIChCU1NJRCkgKi8KKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHSVdBUDoJLyogZ2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzIChCU1NJRCkgKi8KKyAgICAgICAgICAgICAgICBlcnIgPSBwODAyMTF3ZXh0X2dpd2FwKGRldiwgTlVMTCwgJihpd3ItPnUuYXBfYWRkciksIE5VTEwpOworCQlicmVhazsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDgKKwljYXNlIFNJT0NTSVdNT0RFOiAvKiBzZXQgb3BlcmF0aW9uIG1vZGUgKi8KKwljYXNlIFNJT0NTSVdFU1NJRDogLyogc2V0IFNTSUQgKG5ldHdvcmsgbmFtZSkgKi8KKwljYXNlIFNJT0NTSVdSQVRFOiAvKiBzZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKSAqLworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dJV01PREU6IC8qIGdldCBvcGVyYXRpb24gbW9kZSAqLworCQllcnIgPSBwODAyMTF3ZXh0X2dpd21vZGUoZGV2LCBOVUxMLCAmaXdyLT51Lm1vZGUsIE5VTEwpOworCisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV05JQ0tOOiAvKiBnZXQgbm9kZSBuYW1lL25pY2tuYW1lICovCisJY2FzZSBTSU9DR0lXRVNTSUQ6IC8qIGdldCBTU0lEICovCisJCWlmKGl3ci0+dS5lc3NpZC5wb2ludGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJCQltZW1zZXQoc3NpZCwgMCwgc2l6ZW9mKHNzaWQpKTsKKworCQkJZXJyID0gcDgwMjExd2V4dF9naXdlc3NpZChkZXYsIE5VTEwsICZpd3ItPnUuZXNzaWQsIHNzaWQpOworCQkJaWYoY29weV90b191c2VyKGl3ci0+dS5lc3NpZC5wb2ludGVyLCBzc2lkLCBzaXplb2Yoc3NpZCkpKQorCQkJCWVyciA9ICgtRUZBVUxUKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNJT0NHSVdSQVRFOgorICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3cmF0ZShkZXYsIE5VTEwsICZpd3ItPnUuYml0cmF0ZSwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV1JUUzoKKwkJZXJyID0gcDgwMjExd2V4dF9naXdydHMoZGV2LCBOVUxMLCAmaXdyLT51LnJ0cywgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0ZSQUc6CisJCWVyciA9IHA4MDIxMXdleHRfZ2l3ZnJhZyhkZXYsIE5VTEwsICZpd3ItPnUucnRzLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXRU5DT0RFOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQllcnIgPSAtRVBFUk07CisJCWVsc2UgaWYgKGl3ci0+dS5lbmNvZGluZy5wb2ludGVyKSB7CisJCQljaGFyIGtleWJ1ZltNQVhfS0VZTEVOXTsKKwkJCWVyciA9IHA4MDIxMXdleHRfZ2l3ZW5jb2RlKGRldiwgTlVMTCwKKwkJCQkJCSAgICAgJml3ci0+dS5lbmNvZGluZywga2V5YnVmKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoaXdyLT51LmVuY29kaW5nLnBvaW50ZXIsIGtleWJ1ZiwKKwkJCQkJIGl3ci0+dS5lbmNvZGluZy5sZW5ndGgpKQorCQkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXQVBMSVNUOgorCWNhc2UgU0lPQ1NJV1JUUzoKKwljYXNlIFNJT0NTSVdGUkFHOgorCWNhc2UgU0lPQ1NJV1NFTlM6CisJY2FzZSBTSU9DR0lXU0VOUzoKKwljYXNlIFNJT0NTSVdOSUNLTjogLyogc2V0IG5vZGUgbmFtZS9uaWNrbmFtZSAqLworCWNhc2UgU0lPQ1NJV0VOQ09ERTogLyogc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCWNhc2UgU0lPQ1NJV1NQWToKKwljYXNlIFNJT0NHSVdTUFk6CisJY2FzZSBTSU9DU0lXUE9XRVI6CisJY2FzZSBTSU9DR0lXUE9XRVI6CisJY2FzZSBTSU9DR0lXUFJJVjoKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXUkFOR0U6CisJCWlmKGl3ci0+dS5kYXRhLnBvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JhbmdlIHJhbmdlOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gcDgwMjExd2V4dF9naXdyYW5nZShkZXYsIE5VTEwsICZpd3ItPnUuZGF0YSwKKwkJCQkJCSAgKGNoYXIgKikgJnJhbmdlKTsKKwkJCS8qIFB1c2ggdGhhdCB1cCB0byB0aGUgY2FsbGVyICovCisJCQlpZiAoY29weV90b191c2VyKGl3ci0+dS5kYXRhLnBvaW50ZXIsICZyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpCisJCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCQlicmVhazsKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiA4ICovCisjaWYgV0lSRUxFU1NfRVhUID4gOQorCWNhc2UgU0lPQ1NJV1RYUE9XOgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdUWFBPVzoKKwkJZXJyID0gcDgwMjExd2V4dF9naXd0eHBvdyhkZXYsIE5VTEwsICZpd3ItPnUudHhwb3dlciwgTlVMTCk7CisJCWJyZWFrOworI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDkgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxMAorCWNhc2UgU0lPQ1NJV1JFVFJZOgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdSRVRSWToKKwkJZXJyID0gcDgwMjExd2V4dF9naXdyZXRyeShkZXYsIE5VTEwsICZpd3ItPnUucmV0cnksIE5VTEwpOworCQlicmVhazsKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLworCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUIDw9IDEyICovCisKKwlkZWZhdWx0OgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIChlcnIpOworfQorCitpbnQgcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaW50IGFzc29jKQoreworICAgICAgICB1bmlvbiBpd3JlcV9kYXRhIGRhdGE7CisKKyAgICAgICAgREJGRU5URVI7CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMworICAgICAgICAvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLworICAgICAgICBkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworICAgICAgICBpZiAoYXNzb2MpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIFdMQU5fQUREUl9MRU4pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdsYW5fd2V4dF93cml0ZSkKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHdsYW5kZXYtPm5ldGRldiwgU0lPQ0dJV0FQLCAmZGF0YSwgTlVMTCk7CisKKyAgICAgICAgaWYgKCFhc3NvYykgZ290byBkb25lOworCisgICAgICAgIC8vIFhYWCBzZW5kIGFzc29jaWF0aW9uIGRhdGEsIGxpa2UgSUVzLCBldGMgZXRjLgorI2VuZGlmCisgZG9uZToKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworI2VuZGlmIC8qIGNvbXBhdGliaWxpdHkgdG8gd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzY2U1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfY3MuYwpAQCAtMCwwICsxLDE0ODcgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9QQ01DSUEKKyNpbmNsdWRlICJoZmEzODR4LmMiCisjaW5jbHVkZSAicHJpc20ybWdtdC5jIgorI2luY2x1ZGUgInByaXNtMm1pYi5jIgorI2luY2x1ZGUgInByaXNtMnN0YS5jIgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDQsMjEpICkKKyNpZiAoV0xBTl9DUFVfRkFNSUxZID09IFdMQU5fSXg4NikKKyNpZm5kZWYgQ09ORklHX0lTQQorI3dhcm5pbmcgIllvdSBtYXkgbmVlZCB0byBlbmFibGUgSVNBIHN1cHBvcnQgaW4geW91ciBrZXJuZWwuIgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkgKQorc3RhdGljIHVfaW50CWlycV9tYXNrID0gMHhkZWI4OwkJLyogSW50ZXJydXB0IG1hc2sgKi8KK3N0YXRpYyBpbnQJaXJxX2xpc3RbNF0gPSB7IC0xIH07CQkvKiBJbnRlcnJ1cHQgbGlzdCAqLworI2VuZGlmCitzdGF0aWMgdV9pbnQJcHJpc20yX2lnbm9yZXZjYz0xOwkJLyogQm9vbGVhbiwgaWYgc2V0LCB3ZQorCQkJCQkJICogaWdub3JlIHdoYXQgdGhlIFZjYworCQkJCQkJICogaXMgc2V0IHRvIGFuZCB3aGF0IHRoZSBDSVMKKwkJCQkJCSAqIHNheXMuCisJCQkJCQkgKi8KK21vZHVsZV9wYXJhbSggcHJpc20yX2lnbm9yZXZjYywgaW50LCAwNjQ0KTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiw5KSkKK3N0YXRpYyBpbnQgbnVtbGlzdCA9IDQ7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxX2xpc3QsIGludCwgbnVtbGlzdCwgMDQ0NCk7CisjZWxzZQorbW9kdWxlX3BhcmFtX2FycmF5KGlycV9saXN0LCBpbnQsIE5VTEwsIDA0NDQpOworI2VuZGlmCittb2R1bGVfcGFyYW0oIGlycV9tYXNrLCBpbnQsIDA2NDQpOworI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTUpCitzdGF0aWMgaW50IHByaXNtMl9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CitzdGF0aWMgdm9pZCBwcmlzbTJfY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KTsKKyNlbHNlCitkZXZfbGlua190CSpwcmlzbTJzdGFfYXR0YWNoKHZvaWQpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2RldGFjaChkZXZfbGlua190ICpsaW5rKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9jb25maWcoZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfcmVsZWFzZSh1X2xvbmcgYXJnKTsKK3N0YXRpYyBpbnQgCXByaXNtMnN0YV9ldmVudCAoZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5LCBldmVudF9jYWxsYmFja19hcmdzX3QgKmFyZ3MpOworCitzdGF0aWMgZGV2X2xpbmtfdAkqZGV2X2xpc3QgPSBOVUxMOwkvKiBoZWFkIG9mIGluc3RhbmNlIGxpc3QgKi8KKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY3NfZXJyb3IKKyoKKyogVXRpbGl0eSBmdW5jdGlvbiB0byBwcmludCBjYXJkIHNlcnZpY2VzIGVycm9yIG1lc3NhZ2VzLgorKgorKiBBcmd1bWVudHM6CisqCWhhbmRsZQljbGllbnQgaGFuZGxlIGlkZW50aWZ5aW5nIHRoaXMgQ1MgY2xpZW50CisqCWZ1bmMJQ1MgZnVuY3Rpb24gbnVtYmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBlcnJvcgorKglyZXQJQ1MgZnVuY3Rpb24gcmV0dXJuIGNvZGUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGNzX2Vycm9yKGNsaWVudF9oYW5kbGVfdCBoYW5kbGUsIGludCBmdW5jLCBpbnQgcmV0KQoreworI2lmIChkZWZpbmVkKENTX1JFTEVBU0VfQ09ERSkgJiYgKENTX1JFTEVBU0VfQ09ERSA8IDB4MjkxMSkpCisJQ2FyZFNlcnZpY2VzKFJlcG9ydEVycm9yLCBkZXZfaW5mbywgKHZvaWQgKilmdW5jLCAodm9pZCAqKXJldCk7CisjZWxzZQorCWVycm9yX2luZm9fdCBlcnIgPSB7IGZ1bmMsIHJldCB9OworCXBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCAmZXJyKTsKKyNlbmRpZgorfQorI2Vsc2UgLy8ga2VybmVsX3ZlcnNpb24KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMikKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBwcmlzbTJfY3NfaWRzW10gPSB7CisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklOVEVSU0lMIiwgICJIRkEzODR4L0lFRUUiLCAweDc0YzVlNDBkLCAweGRiNDcyYTE4KSwgLy8gSW50ZXJzaWwgUFJJU00yIFJlZmVyZW5jZSBEZXNpZ24gMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTM4LCAweDAwMDIpLCAvLyBDb21wYXEgV0wxMDAvMjAwIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI4YSwgMHgwMDAyKSwgLy8gQ29tcGFxIGlQYXEgSE5XLTEwMCAxMU1iL3MgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNTAsIDB4MDAwMiksIC8vIFNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4ZDYwMSwgMHgwMDAyKSwgLy8gWi1Db20gWEkzMDAgMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIsIDB4MjczZmUzZGIsIDB4MzJhMWVhZWUpLCAvLyBab29tQWlyIDQxMDAgMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJJbnN0YW50IFdpcmVsZXNzICIsICAiIE5ldHdvcmsgUEMgQ0FSRCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4MTFkOTAxYWYsIDB4NmU5YmQ5MjYsIDB4NGI3NGJhYTApLCAvLyBMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiQWRkdHJvbiIsICAiQVdQLTEwMCBXaXJlbGVzcyBQQ01DSUEiLCAgIlZlcnNpb24gMDEuMDIiLCAweGU2ZWM1MmNlLCAweDg2NDlhZjIsIDB4NGI3NGJhYTApLCAvLyBBZGR0cm9uIEFXUC0xMDAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJEIiwgICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NzFiMTg1ODksIDB4YjZmMWIwYWIsIDB4NGI3NGJhYTApLCAvLyBELUxpbmsgRFdMLTY1MCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlNNQyIsICAiU01DMjYzMlciLCAgIlZlcnNpb24gMDEuMDIiLCAweGM0ZjhiMThiLCAweDQ3NGExZjJhLCAweDRiNzRiYWEwKSwgLy8gU01DIDI2MzJXIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkludGVyc2lsIiwgICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAgIklTTDM3MzAwUCIsICAiRXZhbC1SZXZBIiwgMHg0YjgwMWExNywgMHg2MzQ1YTBiZiwgMHhjOTA0OWEzOSwgMHhjMjNhZGMwZSksIC8vIEJyb01heCBGcmVlcG9ydCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDIuNSkKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIlUuUy4gUm9ib3RpY3MiLCAgIklFRUUgODAyLjExYiBQQy1DQVJEIiwgICJWZXJzaW9uIDAxLjAyIiwgMHhjN2I4ZGY5ZCwgMHgxNzAwZDA4NywgMHg0Yjc0YmFhMCksIC8vIFUuUy4gUm9ib3RpY3MgSUVFRSA4MDIuMTFiIFBDLUNBUkQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgICJXUEMtMDEwMCIsIDB4ZmRkNzM0NzAsIDB4ZTBiNmYxNDYpLCAvLyBMZXZlbC1PbmUgV1BDLTAxMDAKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNzQsIDB4MTYxMiksIC8vIEJyb21heCBPRU0gMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAyLjUpCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjc0LCAweDE2MTMpLCAvLyBCcm9tYXggT0VNIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMykKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAgIldpcmVsZXNzIExBTiBQQ0MtMTEiLCAweDUyNjE0NDBmLCAweGE2NDA1NTg0KSwgLy8gY29yZWdhIEsuSy4gV2lyZWxlc3MgTEFOIFBDQy0xMQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICAiV2lyZWxlc3MgTEFOIFBDQ0EtMTEiLCAweDUyNjE0NDBmLCAweGRmNjExNWY5KSwgLy8gY29yZWdhIEsuSy4gV2lyZWxlc3MgTEFOIFBDQ0EtMTEKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGMwMDEsIDB4MDAwOCksIC8vIENPTlRFQyBGTEVYU0NBTi9GWC1ERFMxMTAtUENDCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBMQU5FWCIsICAiR2VvV2F2ZS9HVy1OUzExMCIsIDB4MjA5ZjQwYWIsIDB4NDYyNjMxNzgpLCAvLyBQTEFORVggR2VvV2F2ZS9HVy1OUzExMAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiT0VNIiwgICJQUklTTTIgSUVFRSA4MDIuMTEgUEMtQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4ZmVhNTRjOTAsIDB4NDhmMmJkZDYsIDB4NGI3NGJhYTApLCAvLyBBbWJpY29tIFdMMTEwMCAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIkxlQXJ0ZXJ5IiwgICJTWU5DQllBSVIgMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgICJWZXJzaW9uIDAxLjAyIiwgMHg3ZTNiMzI2YSwgMHg0OTg5M2U5MiwgMHg0Yjc0YmFhMCksIC8vIExlQXJ0ZXJ5IFNZTkNCWUFJUiAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKK1BDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFmZiwgMHgwMDA4KSwgLy8gSW50ZXJtZWMgTW9iaWxlTEFOIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiTkVUR0VBUiBNQTQwMSBXaXJlbGVzcyBQQyIsICAiQ2FyZCIsICAiVmVyc2lvbiAwMS4wMCIsIDB4YTM3NDM0ZTksIDB4OTc2MmU4ZjEsIDB4YTU3YWRiOGMpLCAvLyBORVRHRUFSIE1BNDAxIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiSW50ZXJzaWwiLCAgIlBSSVNNIEZyZWVkb20gUENNQ0lBIEFkYXB0ZXIiLCAgIklTTDM3MTAwUCIsICAiRXZhbC1SZXZBIiwgMHg0YjgwMWExNywgMHhmMjIyZWMyZCwgMHg2MzBkNTJiMiwgMHhjMjNhZGMwZSksIC8vIEludGVyc2lsIFBSSVNNIEZyZWVkb20gMTFtYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIk9UQyIsICAiV2lyZWxlc3MgQWlyRVpZIDI0MTEtUENDIFdMQU4gQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NGFjNDQyODcsIDB4MjM1YTZiZWQsIDB4NGI3NGJhYTApLCAvLyBPVEMgV2lyZWxlc3MgQWlyRVpZIDI0MTEtUENDIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiODAyLjExIiwgICIxMU1icHMgV2lyZWxlc3MgTEFOIENhcmQiLCAgInYwOEMxIiwgICIiICAgLCAweGI2N2E2MTBlLCAweDY1NWFhN2I3LCAweDI2NGI0NTFhLCAweDApLCAvLyBEeW5hbGluayBMMTFIRFQgMTFNYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGMyNTAsIDB4MDAwMiksIC8vIER5bmFsaW5rIEwxMUhEVCAxMU1icHMgODAyLjExIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJQUk9YSU0iLCAgIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIiwgMHhjNjUzNmE1ZSwgMHgzZjM1Nzk3ZCksIC8vIFBST1hJTSBSYW5nZUxBTi1EUy9MQU4gUEMgQ0FSRAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkFDVElPTlRFQyIsICAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAgIjAzODEiLCAgIlJldkEiLCAweDM5MzA4OWRhLCAweGE3MWU2OWQ1LCAweDkwNDcxZmE5LCAweDU3YTY2MTk0KSwgLy8gQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgxNjY4LCAweDAxMDEpLCAvLyBBQ1RJT05URUMgUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiM0NvbSIsICAiM0NSV0U3MzdBIEFpckNvbm5lY3QgV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDQxMjQwZTViLCAweDU2MDEwYWYzKSwgLy8gM0NvbSBBaXJDb25uZWN0IDNDUldFNzM3QQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIzQ29tIiwgICIzQ1JXRTc3N0EgQWlyQ29ubmVjdCBXaXJlbGVzcyBMQU4gUENJIENhcmQiICAsIDB4NDEyNDBlNWIsIDB4YWZjN2MzM2UpLCAvLyAzQ29tIEFpckNvbm5lY3QgM0NSV0U3NzdBCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFTVVMiLCAgIjgwMl8xMWJfUENfQ0FSRF8yNSIsIDB4NzhmYzA2ZWUsIDB4ZGI5YWE4NDIpLCAvLyBBU1VTIFdMLTEwMCA4MDIuMTFiIFdMQU4gIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVNVUyIsICAiODAyXzExQl9DRl9DQVJEXzI1IiwgMHg3OGZjMDZlZSwgMHg0NWE1MGMxZSksIC8vIEFTVVMgV0wtMTEwIDgwMi4xMWIgV0xBTiBDRiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkJVRkZBTE8iLCAgIldMSS1DRi1TMTFHIiwgMHgyZGVjZWNlMywgMHg4MjA2N2MxOCksIC8vIEJVRkZBTE8gV0xJLUNGLVMxMUcgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJUaGUgTGlua3N5cyBHcm91cCwgSW5jLiIsICJXaXJlbGVzcyBOZXR3b3JrIENGIENhcmQiLCAiSVNMMzczMDBQIiwgIlJldkEiLCAweGE1ZjQ3MmMyLCAweDljMDU1OThkLCAweGM5MDQ5YTM5LCAweDU3YTY2MTk0KSwgLy8gTGlua3N5cyBXQ0YxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDIuNSkKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJMaW5rc3lzIiwgICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIsICAiIiwgICIiLCAweDczM2NjODEsIDB4YzUyZjM5NSwgMHgwLCAweDApLCAvLyBMaW5rc3lzIFdDRjEyIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMykKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyOGEsIDB4MDY3MyksIC8vIExpbmtzeXMgV0NGMTIgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAzKQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICAiQ2FyZCIsICAiSVNMMzczMDBQIiwgICJFdmFsLVJldkEiLCAweDMwNjQ2N2YsIDB4OTc2MmU4ZjEsIDB4YzkwNDlhMzksIDB4YzIzYWRjMGUpLCAvLyBORVRHRUFSIE1BNDAxUkEgMTFNYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNSksIC8vIEQtTGluayBEQ0YtNjYwVyAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMmQyLCAweDAwMDEpLCAvLyBNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwODksIDB4MDAwMiksIC8vIEFueVBvaW50KFRNKSBXaXJlbGVzcyBJSSBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiRCIsICAiTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAgIlZlcnNpb24gMDEuMDIiLCAgIiIgLCAweDcxYjE4NTg5LCAweGYxNDRlM2FjLCAweDRiNzRiYWEwLCAweDApLCAvLyBELUxpbmsgRFJDLTY1MCA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4OTAwNSwgMHgwMDIxKSwgLy8gQWRhcHRlYyBBV04tODAzMAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDAwYiwgMHg3MTEwKSwgLy8gRC1MaW5rIERXTC02NTAgcmV2IFAgODAyLjExYiBXTEFOIGNhcmQKKwkvLyBQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJELUxpbmsiLCAgIkRXTC02NTAgV2lyZWxlc3MgUEMgQ2FyZCBSZXZQIiwgICJJU0wzNzEwMVAtMTAiLCAgIkEzIiwgMHgxYTQyNGExYywgMHg2ZWE1NzYzMiwgMHhkZDk3YTI2YiwgMHg1NmIyMWY1MiksIC8vIEQtTGluayBEV0wtNjUwIHJldiBQIDgwMi4xMWIgV0xBTiBjYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJJTlRFUlNJTCIsICAgIkktR0FURSAxMU0gUEMgQ2FyZCAvIFBDIENhcmQgcGx1cyIsICAiVmVyc2lvbiAwMS4wMiIsIDB4NzRjNWU0MGQsIDB4ODMwNGZmNzcsIDB4NGI3NGJhYTApLCAvLyBJLUdhdGUgMTFNIFBDIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJCRU5RIiwgICJBV0wxMDAgUENNQ0lBIEFEQVBURVIiLCAgIklTTDM3MzAwUCIsICAiRXZhbC1SZXZBIiwgMHgzNWRhZGM3NCwgMHgxZjdmZWRiLCAweGM5MDQ5YTM5LCAweGMyM2FkYzBlKSwgLy8gYmVuUSBBV0wxMDAgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMGIsIDB4NzMwMCksIC8vIGJlblEgQVdMMTAwIDgwMi4xMWIgV0xBTiBDYXJkCisJLy8gUENNQ0lBX0RFVklDRV9QUk9EX0lEMSgiSU5URVJTSUwiLCAweDc0YzVlNDBkKSwgLy8gSW50ZXJzaWwgUHJpc20gMiBjYXJkCisJLy8gUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTU2LCAweDAwMDIpLCAvLyBJbnRlcnNpbCBQcmlzbSAyIGNhcmQKKworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHByaXNtMl9jc19pZHMpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBwcmlzbTJfY3NfZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5uYW1lID0gInByaXNtMl9jcyIsCisJfSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisJLnN1c3BlbmQgPSBwcmlzbTJfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gcHJpc20yX2NzX3Jlc3VtZSwKKwkucmVtb3ZlID0gcHJpc20yX2NzX3JlbW92ZSwKKwkucHJvYmUgPSBwcmlzbTJfY3NfcHJvYmUsCisJLmlkX3RhYmxlID0gcHJpc20yX2NzX2lkcywKKyNlbHNlCisJLmF0dGFjaCA9IHByaXNtMnN0YV9hdHRhY2gsCisJLmRldGFjaCA9IHByaXNtMnN0YV9kZXRhY2gsCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDEyKQorCS5pZF90YWJsZSA9IHByaXNtMl9jc19pZHMsCisJLmV2ZW50ID0gIHByaXNtMnN0YV9ldmVudCwKKyNlbmRpZiAvLyA+IDIuNi4xMgorI2VuZGlmIC8vIDw9IDIuNi4xNQorfTsKKyNlbmRpZiAvKiBrZXJuZWxfdmVyc2lvbiAqLworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKHBkZXYsIGZuLCByZXQpOyBcCisgICAgICAgIGdvdG8gbmV4dF9lbnRyeTsgXAorfSBcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBwcmlzbTJfY3NfcmVtb3ZlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisjZWxzZQorCXdsYW5kZXYgPSBsaW5rLT5wcml2OworI2VuZGlmCisKKwlpZiAod2xhbmRldikgeworCQlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisJCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKwkJaWYgKHdsYW5kZXYtPnByaXYpIHsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJd2xhbmRldi0+cHJpdiA9IE5VTEw7CisJCQlpZiAoaHcpIHsKKwkJCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQkJCWtmcmVlKGh3KTsKKwkJCX0KKwkJfQorCQlrZnJlZSh3bGFuZGV2KTsKKwl9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcGRldi0+cHJpdiA9IE5VTEw7CisgICAgICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShwZGV2KTsKKyNlbHNlCisgICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKKwkgICAgICAgIGlmIChsaW5rLT53aW4pCisJCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKKwkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQkJcGNtY2lhX3JlbGVhc2VfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pOworCQlpZiAobGluay0+aXJxLkFzc2lnbmVkSVJRKQorCQkJcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUc7CisJfQorCisJbGluay0+cHJpdiA9IE5VTEw7CisJa2ZyZWUobGluayk7CisjZW5kaWYKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHByaXNtMl9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworI2Vsc2UKKwl3bGFuZGV2ID0gbGluay0+cHJpdjsKKworICAgICAgICBsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKKyAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKKwl9CisjZW5kaWYKKworCURCRkVYSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmlzbTJfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bGFuZGV2aWNlICAqd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNykKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl90b19pbnN0YW5jZShwZGV2KTsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldiA9IHBkZXYtPnByaXY7CisJLy8gWFhYIGRvIHNvbWV0aGluZyBoZXJlPworI2Vsc2UKKwl3bGFuZGV2ID0gbGluay0+cHJpdjsKKyAgICAgICAgbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOworICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7CisgICAgICAgICAgICAgICAgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwkJLy8gWFhYIGRvIHNvbWV0aGluZyBoZXJlPworCX0KKyNlbmRpZgorCisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2KQoreworCWludCBydmFsID0gMDsKKwlzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90ICpodyA9IE5VTEw7CisKKyAgICAgICAgY29uZmlnX2luZm9fdCBzb2NrZXRjb25mOworICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSA9IE5VTEw7CisJdHVwbGVfdCB0dXBsZTsKKwl1aW50OF90CWJ1Zls2NF07CisgICAgICAgIGludCBsYXN0X2ZuLCBsYXN0X3JldDsKKyAgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisJZGV2X2xpbmtfdCAqbGluazsKKyNlbmRpZgorCisJREJGRU5URVI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJLyogU2V0IHVwIGludGVycnVwdCB0eXBlICovCisgICAgICAgIHBkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworI2Vsc2UKKyAgICAgICAgbGluayA9IGttYWxsb2Moc2l6ZW9mKGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKGxpbmsgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgbWVtc2V0KGxpbmssIDAsIHNpemVvZihkZXZfbGlua190KSk7CisKKyAgICAgICAgbGluay0+Y29uZi5WY2MgPSAzMzsKKyAgICAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKyAgICAgICAgbGluay0+aGFuZGxlID0gcGRldjsKKyAgICAgICAgcGRldi0+aW5zdGFuY2UgPSBsaW5rOworICAgICAgICBsaW5rLT5zdGF0ZSB8PSBERVZfUFJFU0VOVCB8IERFVl9DT05GSUdfUEVORElORzsKKworI2VuZGlmCisKKwkvLyBWQ0MgY3JhcD8KKyAgICAgICAgcGFyc2UgPSBrbWFsbG9jKHNpemVvZihjaXNwYXJzZV90KSwgR0ZQX0tFUk5FTCk7CisKKwl3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKTsKKwlpZiAoIXdsYW5kZXYgfHwgIXBhcnNlKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlydmFsID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgaHcgc3RydWN0IGZvciBub3cgKi8KKwloZmEzODR4X2NyZWF0ZShodywgMCwgMCwgTlVMTCk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCWh3LT5wZGV2ID0gcGRldjsKKwlwZGV2LT5wcml2ID0gd2xhbmRldjsKKyNlbHNlCisJaHctPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSB3bGFuZGV2OworI2VuZGlmCisKKyAgICAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKyAgICAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CisgICAgICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKyAgICAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKyAgICAgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShwZGV2LCAmdHVwbGUpKTsKKyAgICAgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocGRldiwgJnR1cGxlKSk7CisgICAgICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShwZGV2LCAmdHVwbGUsIHBhcnNlKSk7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICBwZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CisgICAgICAgIHBkZXYtPmNvbmYuUHJlc2VudCA9IHBhcnNlLT5jb25maWcucm1hc2tbMF07CisjZWxzZQorICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CisgICAgICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLT5jb25maWcucm1hc2tbMF07CisKKwlsaW5rLT5jb25mLlZjYyA9IHNvY2tldGNvbmYuVmNjOworI2VuZGlmCisgICAgICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAorICAgICAgICAgICAgICAgICBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhwZGV2LCAmc29ja2V0Y29uZikpOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShwZGV2LCAmdHVwbGUpKTsKKyAgICAgICAgZm9yICg7OykgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLT5jZnRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBDRkdfQ0hFQ0soR2V0VHVwbGVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBkZXYsICZ0dXBsZSkpOworICAgICAgICAgICAgICAgIENGR19DSEVDSyhQYXJzZVR1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNtY2lhX3BhcnNlX3R1cGxlKHBkZXYsICZ0dXBsZSwgcGFyc2UpKTsKKworICAgICAgICAgICAgICAgIGlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRmbHQgPSAqY2ZnOworICAgICAgICAgICAgICAgIGlmIChjZmctPmluZGV4ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworI2Vsc2UKKyAgICAgICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisgICAgICAgICAgICAgICAgaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworICAgICAgICAgICAgICAgICAgICAgICAgcGRldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KKyAgICAgICAgICAgICAgICAvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldGNvbmYuVmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAgJiYgIXByaXNtMl9pZ25vcmV2Y2MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIiAgVmNjIG1pc21hdGNoIC0gc2tpcHBpbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoaXMgZW50cnlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ja2V0Y29uZi5WY2MgIT0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMCAmJiAhcHJpc20yX2lnbm9yZXZjYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiICBWY2MgKGRlZmF1bHQpIG1pc21hdGNoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIHRoaXMgZW50cnlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgcGRldi0+Y29uZi5WcHAgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbGluay0+Y29uZi5WcHAxID0gbGluay0+Y29uZi5WcHAyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuVnBwID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKyNlbmRpZgorCQl9CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCS8qIEhBQ0s6IGR1ZSB0byBhIGJhZCBDSVMuLi4ud2UgQUxXQVlTIG5lZWQgYW4gaW50ZXJydXB0ICovCisJCS8qIGlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJCXBkZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisjZWxzZQorCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworI2VuZGlmCisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCQlwZGV2LT5pby5OdW1Qb3J0czEgPSBwZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWlmICAoIHBkZXYtPmlvLkJhc2VQb3J0MSAhPSAwICkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIkJyYWluIGRhbWFnZWQgQ0lTOiBoYXJkIGNvZGVkIGlvYmFzZT0iCisJCQkJIjB4JXgsIHRyeSBsZXR0aW5nIHBjbWNpYV9jcyBkZWNpZGUuLi5cbiIsCisJCQkJcGRldi0+aW8uQmFzZVBvcnQxICk7CisJCQkJcGRldi0+aW8uQmFzZVBvcnQxID0gMDsKKwkJCX0KKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMyID0gcGRldi0+aW8uQXR0cmlidXRlczE7CisJCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQl9CisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCUNGR19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykpOworI2Vsc2UKKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlpZiAgKCBsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCApIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJCcmFpbiBkYW1hZ2VkIENJUzogaGFyZCBjb2RlZCBpb2Jhc2U9IgorCQkJCSIweCV4LCB0cnkgbGV0dGluZyBwY21jaWFfY3MgZGVjaWRlLi4uXG4iLAorCQkJCWxpbmstPmlvLkJhc2VQb3J0MSApOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IDA7CisJCQl9CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJfQorCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlDRkdfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmbGluay0+aW8pKTsKKyNlbmRpZgorCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJbmV4dF9lbnRyeToKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOworCisJfQorCisJLyogTGV0IHBjbWNpYSBrbm93IHRoZSBkZXZpY2UgbmFtZSAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlwZGV2LT5kZXZfbm9kZSA9ICZody0+bm9kZTsKKyNlbHNlCisJbGluay0+ZGV2ID0gJmh3LT5ub2RlOworI2VuZGlmCisKKwkvKiBSZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGdldCBhc3NpZ25lZCBhIG5hbWUgKi8KKwlTRVRfTU9EVUxFX09XTkVSKHdsYW5kZXYtPm5ldGRldik7CisJU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAgJmhhbmRsZV90b19kZXYocGRldikpOworCWlmIChyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDApIHsKKwkJV0xBTl9MT0dfTk9USUNFKCJwcmlzbTJzdGFfY3M6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJc3RyY3B5KGh3LT5ub2RlLmRldl9uYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCS8qIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEgKi8KKwkvKiBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUgKi8KKwkvKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlpZiAocGRldi0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCXBkZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwkJcGRldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCXBkZXYtPmlycS5IYW5kbGVyID0gaGZhMzg0eF9pbnRlcnJ1cHQ7CisJCXBkZXYtPmlycS5JbnN0YW5jZSA9IHdsYW5kZXY7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShwZGV2LCAmcGRldi0+aXJxKSk7CisJfQorI2Vsc2UKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwkJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCWxpbmstPmlycS5IYW5kbGVyID0gaGZhMzg0eF9pbnRlcnJ1cHQ7CisJCWxpbmstPmlycS5JbnN0YW5jZSA9IHdsYW5kZXY7CisJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShwZGV2LCAmbGluay0+aXJxKSk7CisJfQorI2VuZGlmCisKKwkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cCAqLworCS8qIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUgKi8KKwkvKiBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmcGRldi0+Y29uZikpOworI2Vsc2UKKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmbGluay0+Y29uZikpOworI2VuZGlmCisKKwkvKiBGaWxsIHRoZSBuZXRkZXZpY2Ugd2l0aCB0aGlzIGluZm8gKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJd2xhbmRldi0+bmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnEuQXNzaWduZWRJUlE7CisJd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIgPSBwZGV2LT5pby5CYXNlUG9ydDE7CisjZWxzZQorCXdsYW5kZXYtPm5ldGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCXdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworI2VuZGlmCisKKwkvKiBBbmQgdGhlIHJlc3Qgb2YgdGhlIGh3IHN0cnVjdHVyZSAqLworCWh3LT5pcnEgPSB3bGFuZGV2LT5uZXRkZXYtPmlycTsKKwlody0+aW9iYXNlID0gd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHI7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisJbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKKwlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworI2VuZGlmCisKKwkvKiBBbmQgbm93IHdlJ3JlIGRvbmUhICovCisJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisKKwlnb3RvIGRvbmU7CisKKyBjc19mYWlsZWQ6CisgICAgICAgIGNzX2Vycm9yKHBkZXYsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKworZmFpbGVkOgorCS8vIHdsYW5kZXYsIGh3LCBldGMgZXRjLi4KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcGRldi0+cHJpdiA9IE5VTEw7CisjZWxzZQorCXBkZXYtPmluc3RhbmNlID0gTlVMTDsKKwlpZiAobGluaykgeworCQlsaW5rLT5wcml2ID0gTlVMTDsKKwkJa2ZyZWUobGluayk7CisJfQorI2VuZGlmCisJaWYgKHdsYW5kZXYpIHsKKwkJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCQlpZiAod2xhbmRldi0+cHJpdikgeworCQkJaHcgPSB3bGFuZGV2LT5wcml2OworCQkJd2xhbmRldi0+cHJpdiA9IE5VTEw7CisJCQlpZiAoaHcpIHsKKwkJCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQkJCWtmcmVlKGh3KTsKKwkJCX0KKwkJfQorCQlrZnJlZSh3bGFuZGV2KTsKKwl9CisKK2RvbmU6CisJaWYgKHBhcnNlKSBrZnJlZShwYXJzZSk7CisKKwlEQkZFWElUOworCXJldHVybiBydmFsOworfQorI2Vsc2UgIC8vIDw9IDIuNi4xNQorI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgZm4sIHJldCk7IFwKKyAgICAgICAgZ290byBuZXh0X2VudHJ5OyBcCit9IFwKK30gd2hpbGUgKDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfYXR0YWNoCisqCisqIEhhbGYgb2YgdGhlIGF0dGFjaC9kZXRhY2ggcGFpci4gIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIGRldmljZQorKiBpbnN0YW5jZSB3aXRoIENhcmQgU2VydmljZXMuICBJbiB0aGlzIGNhc2UsIGl0IGFsc28gY3JlYXRlcyB0aGUKKyogd2xhbmRldiBzdHJ1Y3R1cmUgYW5kIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gIFRoZXNlIGFyZQorKiBsaW5rZWQgdG8gdGhlIGRldmljZSBpbnN0YW5jZSB2aWEgaXRzIHByaXYgbWVtYmVyLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJQSB2YWxpZCBwdHIgdG8gZGV2X2xpbmtfdCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgKGluc21vZC9pbml0X21vZHVsZS9yZWdpc3Rlcl9wY2NhcmRfZHJpdmVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitkZXZfbGlua190ICpwcmlzbTJzdGFfYXR0YWNoKHZvaWQpCit7CisJY2xpZW50X3JlZ190CQljbGllbnRfcmVnOworCWludAkJCXJlc3VsdDsKKwlkZXZfbGlua190CQkqbGluayA9IE5VTEw7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CQkqaHcgPSBOVUxMOworCisJREJGRU5URVI7CisKKwkvKiBBbGxvYyBvdXIgc3RydWN0dXJlcyAqLworCWxpbmsgPQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbGluayB8fCAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwkvKiBDbGVhciBhbGwgdGhlIHN0cnVjdHMgKi8KKwltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBzdHJ1Y3QgZm9yIG5vdyAqLworCWhmYTM4NHhfY3JlYXRlKGh3LCAwLCAwLCBOVUxMKTsKKwlody0+d2xhbmRldiA9IHdsYW5kZXY7CisKKwkvKiBJbml0aWFsaXplIHRoZSBQQyBjYXJkIGRldmljZSBvYmplY3QuICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKwlpbml0X3RpbWVyKCZsaW5rLT5yZWxlYXNlKTsKKwlsaW5rLT5yZWxlYXNlLmZ1bmN0aW9uID0gJnByaXNtMnN0YV9yZWxlYXNlOworCWxpbmstPnJlbGVhc2UuZGF0YSA9ICh1X2xvbmcpbGluazsKKyNlbmRpZgorCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCWxpbmstPnByaXYgPSB3bGFuZGV2OworI2lmIChkZWZpbmVkKENTX1JFTEVBU0VfQ09ERSkgJiYgKENTX1JFTEVBU0VfQ09ERSA8IDB4MjkxMSkpCisJbGluay0+aXJxLkluc3RhbmNlID0gd2xhbmRldjsKKyNlbmRpZgorCisJLyogTGluayBpbiB0byB0aGUgbGlzdCBvZiBkZXZpY2VzIG1hbmFnZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlsaW5rLT5uZXh0ID0gZGV2X2xpc3Q7CisJZGV2X2xpc3QgPSBsaW5rOworCisJLyogUmVnaXN0ZXIgd2l0aCBDYXJkIFNlcnZpY2VzICovCisJY2xpZW50X3JlZy5kZXZfaW5mbyA9ICZkZXZfaW5mbzsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSApCisJY2xpZW50X3JlZy5BdHRyaWJ1dGVzID0gSU5GT19JT19DTElFTlQgfCBJTkZPX0NBUkRfU0hBUkU7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTMpICkKKwljbGllbnRfcmVnLkV2ZW50TWFzayA9CisJCUNTX0VWRU5UX0NBUkRfSU5TRVJUSU9OIHwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMIHwKKwkJQ1NfRVZFTlRfUkVTRVRfUkVRVUVTVCB8CisJCUNTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMIHwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCB8CisJCUNTX0VWRU5UX1BNX1NVU1BFTkQgfCBDU19FVkVOVF9QTV9SRVNVTUU7CisJY2xpZW50X3JlZy5ldmVudF9oYW5kbGVyID0gJnByaXNtMnN0YV9ldmVudDsKKyNlbmRpZgorCisJY2xpZW50X3JlZy5WZXJzaW9uID0gMHgwMjEwOworCWNsaWVudF9yZWcuZXZlbnRfY2FsbGJhY2tfYXJncy5jbGllbnRfZGF0YSA9IGxpbms7CisKKwlyZXN1bHQgPSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KCZsaW5rLT5oYW5kbGUsICZjbGllbnRfcmVnKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZWdpc3RlckNsaWVudCwgcmVzdWx0KTsKKwkJcHJpc20yc3RhX2RldGFjaChsaW5rKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ290byBkb25lOworCisgZmFpbGVkOgorCWlmIChsaW5rKQlrZnJlZShsaW5rKTsKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworCWxpbmsgPSBOVUxMOworCisgZG9uZToKKwlEQkZFWElUOworCXJldHVybiBsaW5rOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZGV0YWNoCisqCisqIFJlbW92ZSBvbmUgb2YgdGhlIGRldmljZSBpbnN0YW5jZXMgbWFuYWdlZCBieSB0aGlzIGRyaXZlci4KKyogICBTZWFyY2ggdGhlIGxpc3QgZm9yIHRoZSBnaXZlbiBpbnN0YW5jZSwKKyogICBjaGVjayBvdXIgZmxhZ3MgZm9yIGEgd2FpdGluZyB0aW1lcidkIHJlbGVhc2UgY2FsbAorKiAgIGNhbGwgcmVsZWFzZQorKiAgIERlcmVnaXN0ZXIgdGhlIGluc3RhbmNlIHdpdGggQ2FyZCBTZXJ2aWNlcworKiAgIChuZXRkZXZpY2UpIHVucmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLgorKiAgIHVubGluayB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgbGlzdAorKiAgIGZyZWUgdGhlIGxpbmssIHByaXYsIGFuZCBwcml2LT5wcml2IG1lbW9yeQorKiBOb3RlOiB0aGUgZGV2X2xpc3QgdmFyaWFibGUgaXMgYSBkcml2ZXIgc2NvcGVkIHN0YXRpYyB1c2VkIHRvCisqCW1haW50YWluIGEgbGlzdCBvZiBkZXZpY2UgaW5zdGFuY2VzIG1hbmFnZWQgYnkgdGhpcworKglkcml2ZXIuCisqCisqIEFyZ3VtZW50czoKKyoJbGluawlwdHIgdG8gdGhlIGluc3RhbmNlIHRvIGRldGFjaAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJdGhlIGxpbmsgc3RydWN0dXJlIGlzIGdvbmUsIHRoZSBuZXRkZXZpY2UgaXMgZ29uZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCU1pZ2h0IGJlIGludGVycnVwdCwgZG9uJ3QgYmxvY2suCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2RldGFjaChkZXZfbGlua190ICpsaW5rKQoreworCWRldl9saW5rX3QJCSoqbGlua3A7CisJd2xhbmRldmljZV90CQkqd2xhbmRldjsKKwloZmEzODR4X3QJCSpodzsKKworCURCRkVOVEVSOworCisJLyogTG9jYXRlIHByZXYgZGV2aWNlIHN0cnVjdHVyZSAqLworCWZvciAobGlua3AgPSAmZGV2X2xpc3Q7ICpsaW5rcDsgbGlua3AgPSAmKCpsaW5rcCktPm5leHQpIHsKKwkJaWYgKCpsaW5rcCA9PSBsaW5rKSBicmVhazsKKwl9CisKKwlpZiAoKmxpbmtwICE9IE5VTEwpIHsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCQkvKiBHZXQgcmlkIG9mIGFueSB0aW1lcidkIHJlbGVhc2UgY2FsbCAqLworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJY2xpKCk7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisJCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9SRUxFQVNFX1BFTkRJTkcpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZsaW5rLT5yZWxlYXNlKTsKKwkJCWxpbmstPnN0YXRlICY9IH5ERVZfUkVMRUFTRV9QRU5ESU5HOworCQl9CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworI2VuZGlmCisKKwkJLyogSWYgbGluayBzYXlzIHdlJ3JlIHN0aWxsIGNvbmZpZydkLCBjYWxsIHJlbGVhc2UgKi8KKwkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworCQkJcHJpc20yc3RhX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKwkJCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9TVEFMRV9DT05GSUcpIHsKKwkJCQlsaW5rLT5zdGF0ZSB8PSBERVZfU1RBTEVfTElOSzsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQkvKiBUZWxsIENhcmQgU2VydmljZXMgd2UncmUgbm90IGFyb3VuZCBhbnkgbW9yZSAqLworCQlpZiAobGluay0+aGFuZGxlKSB7CisJCQlwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQobGluay0+aGFuZGxlKTsKKwkJfQorCisJCS8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBmcmVlIGJpdHMgKi8KKwkJKmxpbmtwID0gbGluay0+bmV4dDsKKwkJaWYgKCBsaW5rLT5wcml2ICE9IE5VTEwgKSB7CisJCQl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbGluay0+cHJpdjsKKwkJCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldik7CisJCQlpZiAobGluay0+ZGV2ICE9IE5VTEwpIHsKKwkJCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisJCQl9CisJCQl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisJCQlpZiAod2xhbmRldi0+cHJpdikgeworCQkJCWh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCQl3bGFuZGV2LT5wcml2ID0gTlVMTDsKKwkJCQlpZiAoaHcpIHsKKwkJCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCQkJa2ZyZWUoaHcpOworCQkJCX0KKwkJCX0KKwkJCWxpbmstPnByaXYgPSBOVUxMOworCQkJa2ZyZWUod2xhbmRldik7CisJCX0KKwkJa2ZyZWUobGluayk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfY29uZmlnCisqCisqIEhhbGYgb2YgdGhlIGNvbmZpZy9yZWxlYXNlIHBhaXIuICBVc3VhbGx5IGNhbGxlZCBpbiByZXNwb25zZSB0bworKiBhIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LiAgQXQgdGhpcyBwb2ludCwgd2UgX2tub3dfIHRoZXJlJ3Mgc29tZQorKiBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudC4gIFRoYXQgbWVhbnMgd2UgY2FuIHN0YXJ0IHBva2luZyBhcm91bmQKKyogYXQgdGhlIENJUyBhbmQgYXQgYW55IGRldmljZSBzcGVjaWZpYyBjb25maWcgZGF0YSB3ZSB3YW50LgorKgorKiBOb3RlIHRoZSBnb3RvcyBhbmQgdGhlIG1hY3Jvcy4gIEkgcmVjb2RlZCB0aGlzIG9uY2Ugd2l0aG91dAorKiB0aGVtLCBhbmQgaXQgZ290IGluY3JlZGlibHkgdWdseS4gIEl0J3MgYWN0dWFsbHkgc2ltcGxlciB3aXRoCisqIHRoZW0uCisqCisqIEFyZ3VtZW50czoKKyoJbGluawl0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgY3JlYXRlZCBpbiBhdHRhY2ggdGhhdAorKgkJcmVwcmVzZW50cyB0aGlzIGRldmljZSBpbnN0YW5jZS4KKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCVJlc291cmNlcyAoaXJxLCBpbywgbWVtKSBhcmUgYWxsb2NhdGVkCisqCVRoZSBwY21jaWEgZGV2X2xpbmstPm5vZGUtPm5hbWUgaXMgc2V0CisqCShGb3IgbmV0Y2FyZHMpIFRoZSBkZXZpY2Ugc3RydWN0dXJlIGlzIGZpbmlzaGVkIGFuZCwKKyoJICBtb3N0IGltcG9ydGFudGx5LCByZWdpc3RlcmVkLiAgVGhpcyBtZWFucyB0aGF0IHRoZXJlCisqCSAgaXMgbm93IGEgX25hbWVkXyBkZXZpY2UgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmcm9tCisqCSAgdXNlcmxhbmQuCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBmcm9tIGEgdGltZXIuICBEb24ndCBibG9jayEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCitkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENGR19DSEVDSyhmbiwgcmV0ZikgXAorZG8geyBpbnQgcmV0ID0gKHJldGYpOyBcCitpZiAocmV0ICE9IDApIHsgXAorICAgICAgICBXTEFOX0xPR19ERUJVRygxLCAiQ2FyZFNlcnZpY2VzKCIgI2ZuICIpIHJldHVybmVkICVkXG4iLCByZXQpOyBcCisgICAgICAgIGNzX2Vycm9yKGxpbmstPmhhbmRsZSwgZm4sIHJldCk7IFwKKyAgICAgICAgZ290byBuZXh0X2VudHJ5OyBcCit9IFwKK30gd2hpbGUgKDApCisKK3ZvaWQgcHJpc20yc3RhX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQoreworCWNsaWVudF9oYW5kbGVfdAkJaGFuZGxlOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3OworCWludAkJCWxhc3RfZm47CisJaW50CQkJbGFzdF9yZXQ7CisJdHVwbGVfdAkJCXR1cGxlOworCWNpc3BhcnNlX3QJCXBhcnNlOworCWNvbmZpZ19pbmZvX3QJCXNvY2tldGNvbmY7CisJVUlOVDgJCQlidWZbNjRdOworCWludAkJCW1pblZjYyA9IDA7CisJaW50CQkJbWF4VmNjID0gMDsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90CWRmbHQgPSB7IDAgfTsKKworCURCRkVOVEVSOworCisJaGFuZGxlID0gbGluay0+aGFuZGxlOworCXdsYW5kZXYgPSAod2xhbmRldmljZV90KilsaW5rLT5wcml2OworCWh3ID0gd2xhbmRldi0+cHJpdjsKKworCS8qIENvbGxlY3QgdGhlIGNvbmZpZyByZWdpc3RlciBpbmZvICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisKKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKiBDb25maWd1cmUgY2FyZCAqLworCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CisKKwkvKiBBY3F1aXJlIHRoZSBjdXJyZW50IHNvY2tldCBjb25maWcgKG5lZWQgVmNjIHNldHRpbmcpICovCisJQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGhhbmRsZSwgJnNvY2tldGNvbmYpKTsKKworCS8qIExvb3AgdGhyb3VnaCB0aGUgY29uZmlnIHRhYmxlIGVudHJpZXMgdW50aWwgd2UgZmluZCBvbmUgdGhhdCB3b3JrcyAqLworCS8qIEFzc3VtZXMgYSBjb21wbGV0ZSBhbmQgdmFsaWQgQ0lTICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCUNGR19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOworCQlDRkdfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKKworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKSBnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIExldHMgcHJpbnQgb3V0IHRoZSBWY2MgdGhhdCB0aGUgY29udHJvbGxlcitwY21jaWEtY3Mgc2V0CisJCSAqIGZvciB1cywgY2F1c2UgdGhhdCdzIHdoYXQgd2UncmUgZ29pbmcgdG8gdXNlLgorCQkgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwiSW5pdGlhbCBWY2M9JWQvMTB2XG4iLCBzb2NrZXRjb25mLlZjYyk7CisJCWlmIChwcmlzbTJfaWdub3JldmNjKSB7CisJCQlsaW5rLT5jb25mLlZjYyA9IHNvY2tldGNvbmYuVmNjOworCQkJZ290byBza2lwdmNjOworCQl9CisKKwkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgIlZjYyBvYnRhaW5lZCBmcm9tIGN1cnR1cGwuVk5PTVxuIik7CisJCQltaW5WY2MgPSBtYXhWY2MgPQorCQkJCWNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKKwkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgIlZjYyBzZXQgZnJvbSBkZmx0LlZOT01cbiIpOworCQkJbWluVmNjID0gbWF4VmNjID0KKwkJCQlkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisJCX0gZWxzZSBpZiAoKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNQVgpKSAmJgorCQkJICAgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNSU4pKSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgc2V0IGZyb20gY3VydHVwbChWTUlOLFZNQVgpXG4iKTsJCQltaW5WY2MgPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1JTl0vMTAwMDA7CisJCQltYXhWY2MgPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1BWF0vMTAwMDA7CisJCX0gZWxzZSBpZiAoKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNQVgpKSAmJgorCQkJICAgKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZNSU4pKSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgc2V0IGZyb20gZGZsdChWTUlOLFZNQVgpXG4iKTsKKwkJCW1pblZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTUlOXS8xMDAwMDsKKwkJCW1heFZjYyA9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTUFYXS8xMDAwMDsKKwkJfQorCisJCWlmICggc29ja2V0Y29uZi5WY2MgPj0gbWluVmNjICYmIHNvY2tldGNvbmYuVmNjIDw9IG1heFZjYykgeworCQkJbGluay0+Y29uZi5WY2MgPSBzb2NrZXRjb25mLlZjYzsKKwkJfSBlbHNlIHsKKwkJCS8qIFtNU01dOiBOb3RlIHRoYXQgSSd2ZSBnaXZlbiB1cCB0cnlpbmcgdG8gY2hhbmdlCisJCQkgKiB0aGUgVmNjIGlmIGEgY2hhbmdlIGlzIGluZGljYXRlZC4gIEl0IHNlZW1zIHRoZQorCQkJICogc3lzdGVtJnNvY2tldGNvbnRyb2xsZXImY2FyZCB2ZW5kb3JzIGNhbid0IHNlZW0KKwkJCSAqIHRvIGdldCBpdCByaWdodCwgc28gSSdtIHRpcmVkIG9mIHRyeWluZyB0byBoYWNrCisJCQkgKiBteSB3YXkgYXJvdW5kIGl0LiAgcGNtY2lhLWNzIGRvZXMgaXRzIGJlc3QgdXNpbmcKKwkJCSAqIHRoZSB2b2x0YWdlIHNlbnNlIHBpbnMgYnV0IHNvbWV0aW1lcyB0aGUgY29udHJvbGxlcgorCQkJICogbGllcy4gIFRoZW4sIGV2ZW4gaWYgd2UgaGF2ZSBhIGdvb2QgcmVhZCBvbiB0aGUgVlMKKwkJCSAqIHBpbnMsIHNvbWUgc3lzdGVtIGRlc2lnbnMgd2lsbCBzaWxlbnRseSBpZ25vcmUgb3VyCisJCQkgKiByZXF1ZXN0cyB0byBzZXQgdGhlIHZvbHRhZ2UuICBBZGRpdGlvbmFsbHksIHNvbWUKKwkJCSAqIHZlbmRvcnMgaGF2ZSAzLjN2IGluZGljYXRlZCBvbiB0aGVpciBzZW5zZSBwaW5zLAorCQkJICogYnV0IDV2IHNwZWNpZmllZCBpbiB0aGUgQ0lTIG9yIHZpY2UtdmVyc2EuICBJJ3ZlCisJCQkgKiBoYWQgaXQuICBNeSBvbmx5IHJlY29tbWVuZGF0aW9uIGlzICJsZXQgdGhlIGJ1eWVyCisJCQkgKiBiZXdhcmUiLiAgWW91ciBzeXN0ZW0gbWlnaHQgc3VwcGx5IDV2IHRvIGEgM3YgY2FyZAorCQkJICogKHBvc3NpYmx5IGNhdXNpbmcgZGFtYWdlKSBvciBhIDN2IGNhcGFibGUgc3lzdGVtCisJCQkgKiBtaWdodCBzdXBwbHkgNXYgdG8gYSAzdiBjYXBhYmxlIGNhcmQgKHdhc3RpbmcKKwkJCSAqIHByZWNpb3VzIGJhdHRlcnkgbGlmZSkuCisJCQkgKiBNeSBvbmx5IHJlY29tbWVuZGF0aW9uIChpZiB5b3UgY2FyZSkgaXMgdG8gZ2V0CisJCQkgKiB5b3Vyc2VsZiBhbiBleHRlbmRlciBjYXJkIChJIGRvbid0IGtub3cgd2hlcmUsIEkKKwkJCSAqIGhhdmUgb25seSBvbmUgbXlzZWxmKSBhbmQgYSBtZXRlciBhbmQgdGVzdCBpdCBmb3IKKwkJCSAqIHlvdXJzZWxmLgorCQkJICovCisJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KK3NraXB2Y2M6CisJCVdMQU5fTE9HX0RFQlVHKDEsICJsaW5rLT5jb25mLlZjYz0lZFxuIiwgbGluay0+Y29uZi5WY2MpOworCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQkvKiBIQUNLOiBkdWUgdG8gYSBiYWQgQ0lTLi4uLndlIEFMV0FZUyBuZWVkIGFuIGludGVycnVwdCAqLworCQkvKiBpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpICovCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWlmICAoIGxpbmstPmlvLkJhc2VQb3J0MSAhPSAwICkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIkJyYWluIGRhbWFnZWQgQ0lTOiBoYXJkIGNvZGVkIGlvYmFzZT0iCisJCQkJIjB4JXgsIHRyeSBsZXR0aW5nIHBjbWNpYV9jcyBkZWNpZGUuLi5cbiIsCisJCQkJbGluay0+aW8uQmFzZVBvcnQxICk7CisJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gMDsKKwkJCX0KKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQl9CisKKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJQ0ZHX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluay0+aGFuZGxlLCAmbGluay0+aW8pKTsKKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCituZXh0X2VudHJ5OgorCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSkpOworCX0KKworCS8qIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEgKi8KKwkvKiBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUgKi8KKwkvKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJeworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKKwkJaW50CQkJaTsKKwkJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEIHwgSVJRX0xFVkVMX0lEOworCQlpZiAoaXJxX2xpc3RbMF0gPT0gLTEpCisJCQlsaW5rLT5pcnEuSVJRSW5mbzIgPSBpcnFfbWFzazsKKwkJZWxzZQorCQkJZm9yIChpPTA7IGk8NDsgaSsrKQorCQkJCWxpbmstPmlycS5JUlFJbmZvMiB8PSAxIDw8IGlycV9saXN0W2ldOworI2Vsc2UKKwkJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworI2VuZGlmCisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCQlsaW5rLT5pcnEuSGFuZGxlciA9IGhmYTM4NHhfaW50ZXJydXB0OworCQlsaW5rLT5pcnEuSW5zdGFuY2UgPSB3bGFuZGV2OworCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKSk7CisJfQorCisJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAgKi8KKwkvKiB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlICovCisJLyogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4gKi8KKwlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKSk7CisKKwkvKiBGaWxsIHRoZSBuZXRkZXZpY2Ugd2l0aCB0aGlzIGluZm8gKi8KKwl3bGFuZGV2LT5uZXRkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKwl3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKworCS8qIFJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlXTEFOX0xPR19JTkZPKCIlczogaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAorCQlkZXZfaW5mbywgbGluay0+Y29uZi5Db25maWdJbmRleCwKKwkJbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKKwlpZiAobGluay0+Y29uZi5WcHAxKQorCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKwlwcmludGsoIlxuIik7CisKKwlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCisJLyogTGV0IHBjbWNpYSBrbm93IHRoZSBkZXZpY2UgbmFtZSAqLworCWxpbmstPmRldiA9ICZody0+bm9kZTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgZ2V0IGFzc2lnbmVkIGEgbmFtZSAqLworCVNFVF9NT0RVTEVfT1dORVIod2xhbmRldi0+bmV0ZGV2KTsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkgKQorCVNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgICZoYW5kbGVfdG9fZGV2KGxpbmstPmhhbmRsZSkpOworI2VuZGlmCisJaWYgKHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCkgeworCQlXTEFOX0xPR19OT1RJQ0UoInByaXNtMnN0YV9jczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlzdHJjcHkoaHctPm5vZGUuZGV2X25hbWUsIHdsYW5kZXYtPm5hbWUpOworCisJLyogQW55IGRldmljZSBjdXN0b20gY29uZmlnL3F1ZXJ5IHN0dWZmIHNob3VsZCBiZSBkb25lIGhlcmUgKi8KKwkvKiBGb3IgYSBuZXRkZXZpY2UsIHdlIHNob3VsZCBhdCBsZWFzdCBncmFiIHRoZSBtYWMgYWRkcmVzcyAqLworCisJcmV0dXJuOworY3NfZmFpbGVkOgorCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgbGFzdF9mbiwgbGFzdF9yZXQpOworCVdMQU5fTE9HX0VSUk9SKCJOZXh0VHVwbGUgZmFpbHVyZT8gSXQncyBwcm9iYWJseSBhIFZjYyBtaXNtYXRjaC5cbiIpOworCitmYWlsZWQ6CisJcHJpc20yc3RhX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfcmVsZWFzZQorKgorKiBIYWxmIG9mIHRoZSBjb25maWcvcmVsZWFzZSBwYWlyLiAgVXN1YWxseSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8KKyogYSBjYXJkIGVqZWN0aW9uIGV2ZW50LiAgQ2hlY2tzIHRvIG1ha2Ugc3VyZSBubyBoaWdoZXIgbGF5ZXJzCisqIGFyZSBzdGlsbCAob3IgdGhpbmsgdGhleSBhcmUpIHVzaW5nIHRoZSBjYXJkIHZpYSB0aGUgbGluay0+b3BlbgorKiBmaWVsZC4KKyoKKyogTk9URTogRG9uJ3QgZm9yZ2V0IHRvIGluY3JlbWVudCB0aGUgbGluay0+b3BlbiB2YXJpYWJsZSBpbiB0aGUKKyogIGRldmljZV9vcGVuIG1ldGhvZCwgYW5kIGRlY3JlbWVudCBpdCBpbiB0aGUgZGV2aWNlX2Nsb3NlCisqICBtZXRob2QuCisqCisqIEFyZ3VtZW50czoKKyoJYXJnCWEgZ2VuZXJpYyAzMiBiaXQgdmFyaWFibGUuICBJdCdzIHRoZSB2YWx1ZSB0aGF0CisqCQl3ZSBhc3NpZ25lZCB0byBsaW5rLT5yZWxlYXNlLmRhdGEgaW4gc3RhX2F0dGFjaCgpLgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJQWxsIHJlc291cmNlcyBzaG91bGQgYmUgcmVsZWFzZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbgorKglleGVjdXRlcyBhbmQgZmluZHMgdGhlIGRldmljZSAhb3Blbi4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglQb3NzaWJseSBpbiBhIHRpbWVyIGNvbnRleHQuICBEb24ndCBkbyBhbnl0aGluZyB0aGF0J2xsCisqCWJsb2NrLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9yZWxlYXNlKHVfbG9uZyBhcmcpCit7CisgICAgICAgIGRldl9saW5rX3QJKmxpbmsgPSAoZGV2X2xpbmtfdCAqKWFyZzsKKworCURCRkVOVEVSOworCisJLyogRmlyc3QgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIGdldCB0aGUgTVNEIGJhY2sgdG8gdGhlCisJICogSFdQUkVTRU5UIHN0YXRlLiAgSS5lLiBldmVyeXRoaW5nIHF1aWVzY2VudC4KKwkgKi8KKwlwcmlzbTJzdGFfaWZzdGF0ZShsaW5rLT5wcml2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKyAgICAgICAgaWYgKGxpbmstPm9wZW4pIHsKKwkJLyogVE9ETzogSSBkb24ndCB0aGluayB3ZSdyZSBldmVuIHVzaW5nIHRoaXMgYml0IG9mIGNvZGUKKwkJICogYW5kIEkgZG9uJ3QgdGhpbmsgaXQncyBodXJ0aW5nIHVzIGF0IHRoZSBtb21lbnQuCisJCSAqLworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsCisJCQkicHJpc20yc3RhX2NzOiByZWxlYXNlIHBvc3Rwb25lZCwgJyVzJyBzdGlsbCBvcGVuXG4iLAorCQkJbGluay0+ZGV2LT5kZXZfbmFtZSk7CisgICAgICAgICAgICAgICAgbGluay0+c3RhdGUgfD0gREVWX1NUQUxFX0NPTkZJRzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisgICAgICAgIHBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKyAgICAgICAgcGNtY2lhX3JlbGVhc2VfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSk7CisKKyAgICAgICAgbGluay0+c3RhdGUgJj0gfihERVZfQ09ORklHIHwgREVWX1JFTEVBU0VfUEVORElORyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2ZW50CisqCisqIEhhbmRsZXIgZm9yIGNhcmQgc2VydmljZXMgZXZlbnRzLgorKgorKiBBcmd1bWVudHM6CisqCWV2ZW50CQlUaGUgZXZlbnQgY29kZQorKglwcmlvcml0eQloaS9sb3cgLSBSRU1PVkFMIGlzIHRoZSBvbmx5IGhpCisqCWFyZ3MJCXB0ciB0byBjYXJkIHNlcnZpY2VzIHN0cnVjdCBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY21jaWEgc3RhdHVzCisqCisqIFJldHVybnM6CisqCVplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglCb3RoIGludGVycnVwdCBhbmQgcHJvY2VzcyB0aHJlYWQsIGRlcGVuZHMgb24gdGhlIGV2ZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitwcmlzbTJzdGFfZXZlbnQgKAorCWV2ZW50X3QgZXZlbnQsCisJaW50IHByaW9yaXR5LAorCWV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqYXJncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCWRldl9saW5rX3QJCSpsaW5rID0gKGRldl9saW5rX3QgKikgYXJncy0+Y2xpZW50X2RhdGE7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWxpbmstPnByaXY7CisJaGZhMzg0eF90CQkqaHcgPSBOVUxMOworCisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldikgaHcgPSB3bGFuZGV2LT5wcml2OworCisJc3dpdGNoIChldmVudCkKKwl7CisJY2FzZSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTjoKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgSU5TRVJUSU9OXG4iKTsKKwkJbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7CisJCXByaXNtMnN0YV9jb25maWcobGluayk7CisJCWlmICghKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykpIHsKKwkJCXdsYW5kZXYtPm5ldGRldi0+aXJxID0gMDsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSIlczogSW5pdGlhbGl6YXRpb24gZmFpbGVkIVxuIiwgZGV2X2luZm8pOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIGh3IHN0cnVjdCAqLworCQlody0+aXJxID0gd2xhbmRldi0+bmV0ZGV2LT5pcnE7CisJCWh3LT5pb2Jhc2UgPSB3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkcjsKKwkJaHctPmxpbmsgPSBsaW5rOworCisJCWlmIChwcmlzbTJfZG9yZXNldCkgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9jb3JlcmVzZXQoaHcsCisJCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJjb3JlcmVzZXQoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQkJCXJlc3VsdCk7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworI2lmIDAKKwkJLyoKKwkJICogVE9ETzogdGVzdF9ob3N0aWYoKSBub3QgaW1wbGVtZW50ZWQgeWV0LgorCQkgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF90ZXN0X2hvc3RpZihodyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJInRlc3RfaG9zdGlmKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV0ZBSUw7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQlicmVhazsKKworCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgorCQlXTEFOX0xPR19ERUJVRyg1LCJldmVudCBpcyBSRU1PVkFMXG4iKTsKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9QUkVTRU5UOworCisJCWlmICh3bGFuZGV2KSB7CisJCQlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCQl9CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQorCQl7CisJCQlsaW5rLT5yZWxlYXNlLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzIwKTsKKwkJCWFkZF90aW1lcigmbGluay0+cmVsZWFzZSk7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIENTX0VWRU5UX1JFU0VUX1JFUVVFU1Q6CisJCVdMQU5fTE9HX0RFQlVHKDUsImV2ZW50IGlzIFJFU0VUX1JFUVVFU1RcbiIpOworCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkicHJpc20yIGNhcmQgcmVzZXQgbm90IHN1cHBvcnRlZCAiCisJCQkiZHVlIHRvIHBvc3QtcmVzZXQgdXNlciBtb2RlIGNvbmZpZ3VyYXRpb24gIgorCQkJInJlcXVpcmVtZW50cy5cbiIpOworCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkiICBGcm9tIHVzZXIgbW9kZSwgdXNlICIKKwkJCSInY2FyZGN0bCBzdXNwZW5kO2NhcmRjdGwgcmVzdW1lJyAiCisJCQkiaW5zdGVhZC5cbiIpOworCQlicmVhazsKKwljYXNlIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMOgorCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRVNFVDoKKwkJV0xBTl9MT0dfV0FSTklORygiUngnZCBDU19FVkVOVF9SRVNFVF94eHgsIHNob3VsZCBub3QgIgorCQkJImJlIHBvc3NpYmxlIHNpbmNlIFJFU0VUX1JFUVVFU1Qgd2FzIGRlbmllZC5cbiIpOworCQlicmVhazsKKworCWNhc2UgQ1NfRVZFTlRfUE1fU1VTUEVORDoKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgU1VTUEVORFxuIik7CisJCWxpbmstPnN0YXRlIHw9IERFVl9TVVNQRU5EOworCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKQorCQl7CisJCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENTX0VWRU5UX1BNX1JFU1VNRToKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgUkVTVU1FXG4iKTsKKwkJbGluay0+c3RhdGUgJj0gfkRFVl9TVVNQRU5EOworCQlpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7CisJCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOworCQl9CisJCWJyZWFrOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7ICAvKiBub29uZSBlbHNlIGRvZXMgYW50aGluZyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgKi8KK30KKyNlbmRpZiAvLyA8PSAyLjYuMTUKKworCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJY29uZl9yZWdfdAlyZWc7CisJVUlOVDgJCWNvcnNhdmU7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiRG9pbmcgcmVzZXQgdmlhIENhcmRTZXJ2aWNlcygpLlxuIik7CisKKwkvKiBDb2xsZWN0IENPUiAqLworCXJlZy5GdW5jdGlvbiA9IDA7CisJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CisJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigKKwkJCWh3LT5saW5rLT5oYW5kbGUsCisJCQkmcmVnKTsKKyNlbmRpZgorCWlmIChyZXN1bHQgIT0gQ1NfU1VDQ0VTUyApIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiOjA6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19SRUFEKSBmYWlsZWQsIgorCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCWNvcnNhdmUgPSByZWcuVmFsdWU7CisKKwkvKiBXcml0ZSByZXNldCBiaXQgKEJJVDcpICovCisJcmVnLlZhbHVlIHw9IEJJVDc7CisJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQlody0+bGluay0+aGFuZGxlLAorCQkJJnJlZyk7CisjZW5kaWYKKwlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIjoxOiBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIoQ1NfV1JJVEUpIGZhaWxlZCwiCisJCQkicmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CisKKwkvKiBIb2xkIGZvciBob2xkdGltZSAqLworCW1kZWxheShob2xkdGltZSk7CisKKwlpZiAoZ2VuZXNpcykgeworCQlyZWcuVmFsdWUgPSBnZW5lc2lzOworCQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CisJCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCQlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQkJICAgICAgaHctPmxpbmstPmhhbmRsZSwKKwkJCQkgICAgICAmcmVnKTsKKyNlbmRpZgorCQlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiOjE6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19XUklURSkgZmFpbGVkLCIKKwkJCQkicmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCX0KKwl9CisKKwkvKiBIb2xkIGZvciBob2xkdGltZSAqLworCW1kZWxheShob2xkdGltZSk7CisKKwkvKiBDbGVhciByZXNldCBiaXQgKi8KKwlyZWcuVmFsdWUgJj0gfkJJVDc7CisJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQkJICAgICAgaHctPmxpbmstPmhhbmRsZSwKKwkJCQkgICAgICAmcmVnKTsKKyNlbmRpZgorCWlmIChyZXN1bHQgIT0gQ1NfU1VDQ0VTUyApIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiOjI6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19XUklURSkgZmFpbGVkLCIKKwkJCSJyZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogV2FpdCBmb3Igc2V0dGxldGltZSAqLworCW1kZWxheShzZXR0bGV0aW1lKTsKKworCS8qIFNldCBub24tcmVzZXQgYml0cyBiYWNrIHdoYXQgdGhleSB3ZXJlICovCisJcmVnLlZhbHVlID0gY29yc2F2ZTsKKwlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CisJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihody0+cGRldiwgJnJlZyk7CisjZWxzZQorCXJlc3VsdCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigKKwkJCQkgICAgICBody0+bGluay0+aGFuZGxlLAorCQkJCSAgICAgICZyZWcpOworI2VuZGlmCisJaWYgKHJlc3VsdCAhPSBDU19TVUNDRVNTICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSI6MjogQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyKENTX1dSSVRFKSBmYWlsZWQsIgorCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMmNzX2luaXQodm9pZCkKK3sKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY4KSkKKwlzZXJ2aW5mb190CXNlcnY7CisjZW5kaWYKKworCURCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKyAgICAgICAgV0xBTl9MT0dfTk9USUNFKCJkZXZfaW5mbyBpczogJXNcbiIsIGRldl9pbmZvKTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQorCXBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvKCZzZXJ2KTsKKwlpZiAoIHNlcnYuUmV2aXNpb24gIT0gQ1NfUkVMRUFTRV9DT0RFICkKKwl7CisJCXByaW50ayhLRVJOX05PVElDRSIlczogQ2FyZFNlcnZpY2VzIHJlbGVhc2UgZG9lcyBub3QgbWF0Y2ghXG4iLCBkZXZfaW5mbyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBUaGlzIGNhbGwgd2lsbCByZXN1bHQgaW4gYSBjYWxsIHRvIHByaXNtMnN0YV9hdHRhY2ggKi8KKwkvKiAgIGFuZCBldmVudHVhbGx5IHByaXNtMnN0YV9kZXRhY2ggKi8KKwlyZWdpc3Rlcl9wY2NhcmRfZHJpdmVyKCAmZGV2X2luZm8sICZwcmlzbTJzdGFfYXR0YWNoLCAmcHJpc20yc3RhX2RldGFjaCk7CisjZWxzZQorCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9jc19kcml2ZXIpOworI2VuZGlmCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20yY3NfY2xlYW51cCh2b2lkKQoreworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQorICAgICAgICBkZXZfbGlua190ICpsaW5rID0gZGV2X2xpc3Q7CisgICAgICAgIGRldl9saW5rX3QgKm5saW5rOworICAgICAgICBEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTApICkKKwlmb3IgKGxpbms9ZGV2X2xpc3Q7IGxpbmsgIT0gTlVMTDsgbGluayA9IG5saW5rKSB7CisJCW5saW5rID0gbGluay0+bmV4dDsKKwkJaWYgKCBsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcgKSB7CisJCQlwcmlzbTJzdGFfcmVsZWFzZSgodV9sb25nKWxpbmspOworCQl9CisJCXByaXNtMnN0YV9kZXRhY2gobGluayk7IC8qIHJlbWVtYmVyIGRldGFjaCgpIGZyZWVzIGxpbmsgKi8KKwl9CisjZW5kaWYKKworCXVucmVnaXN0ZXJfcGNjYXJkX2RyaXZlciggJmRldl9pbmZvKTsKKyNlbHNlCisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZwcmlzbTJfY3NfZHJpdmVyKTsKKyNlbmRpZgorCisgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVW5sb2FkZWRcbiIsIHZlcnNpb24pOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybjsKK30KKworbW9kdWxlX2luaXQocHJpc20yY3NfaW5pdCk7Cittb2R1bGVfZXhpdChwcmlzbTJjc19jbGVhbnVwKTsKKworI2VuZGlmIC8vIE1PRFVMRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlMzJkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9wY2kuYwpAQCAtMCwwICsxLDMzMiBAQAorI2RlZmluZSBXTEFOX0hPU1RJRiBXTEFOX1BDSQorI2luY2x1ZGUgImhmYTM4NHguYyIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmMiCisjaW5jbHVkZSAicHJpc20ybWliLmMiCisjaW5jbHVkZSAicHJpc20yc3RhLmMiCisKKyNkZWZpbmUgUENJX1NJWkUJCTB4MTAwMAkJLyogTWVtb3J5IHNpemUgLSA0SyBieXRlcyAqLworCisvKiBJU0wzODc0QSAxMU1iL3MgV0xBTiBjb250cm9sbGVyICovCisjZGVmaW5lIFBDSVZFTkRPUl9JTlRFUlNJTAkweDEyNjBVTAorI2RlZmluZSBQQ0lERVZJQ0VfSVNMMzg3NAkweDM4NzNVTCAvKiBbTVNNXSB5ZWFoIEkga25vdy4uLnRoZSBJRCBzYXlzCisJCQkJCSAgICAzODczLiBUcnVzdCBtZSwgaXQncyBhIDM4NzQuICovCisKKy8qIFNhbXN1bmcgU1dMLTIyMTBQIDExTWIvcyBXTEFOIGNvbnRyb2xsZXIgKHVzZXMgSVNMMzg3NEEpICovCisjZGVmaW5lIFBDSVZFTkRPUl9TQU1TVU5HICAgICAgMHgxNjdkVUwKKyNkZWZpbmUgUENJREVWSUNFX1NXTF8yMjEwUCAgICAweGEwMDBVTAorCisjZGVmaW5lIFBDSVZFTkRPUl9ORVRHRUFSICAgICAgMHgxMzg1VUwgLyogZm9yIE1BMzExICovCisKKy8qIFBDSSBDbGFzcyAmIFN1Yi1DbGFzcyBjb2RlLCBOZXR3b3JrLSdPdGhlciBjb250cm9sbGVyJyAqLworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUlMgMHgyODAKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3Byb2JlX3BjaQorKgorKiBQcm9iZSByb3V0aW5lIGNhbGxlZCB3aGVuIGEgUENJIGRldmljZSB3LyBtYXRjaGluZyBJRCBpcyBmb3VuZC4KKyogVGhlIElTTDM4NzQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgZm9sbG93aW5nIG1hcDoKKyogICBCQVIwOiBQcmlzbTIueCByZWdpc3RlcnMgbWVtb3J5IG1hcHBlZCwgc2l6ZT00aworKiBIZXJlJ3MgdGhlIHNlcXVlbmNlOgorKiAgIC0gQWxsb2NhdGUgdGhlIFBDSSByZXNvdXJjZXMuCisqICAgLSBSZWFkIHRoZSBQQ01DSUEgYXR0cmlidXRlIG1lbW9yeSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIFdMQU4gY2FyZAorKiAgIC0gUmVzZXQgdGhlIE1BQworKiAgIC0gSW5pdGlhbGl6ZSB0aGUgbmV0ZGV2IGFuZCB3bGFuIGRhdGEKKyogICAtIEluaXRpYWxpemUgdGhlIE1BQworKgorKiBBcmd1bWVudHM6CisqCXBkZXYJCXB0ciB0byBwY2kgZGV2aWNlIHN0cnVjdHVyZSBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY2kgY29uZmlndXJhdGlvbi4KKyoJaWQJCXB0ciB0byB0aGUgZGV2aWNlIGlkIGVudHJ5IHRoYXQgbWF0Y2hlZCB0aGlzIGRldmljZS4KKyoKKyogUmV0dXJuczoKKyoJemVybwkJLSBzdWNjZXNzCisqCW5lZ2F0aXZlCS0gZmFpbGVkCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHJpc20yc3RhX3Byb2JlX3BjaSgKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50CQlyZXN1bHQ7CisJcGh5c190CQlwaHltZW0gPSAwOworCXZvaWQJCV9faW9tZW0gKm1lbSA9IE5VTEw7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CSpodyA9IE5VTEw7CisKKwlEQkZFTlRFUjsKKworCS8qIEVuYWJsZSB0aGUgcGNpIGRldmljZSAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IHBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogRmlndXJlIG91dCBvdXIgcmVzb3VyY2VzICovCisJcGh5bWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCisgICAgICAgIGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBoeW1lbSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSwgIlByaXNtMiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJpc20yOiBDYW5ub3QgcmVzZXJ2ZSBQQ0kgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKyAgICAgICAgfQorCisJbWVtID0gaW9yZW1hcChwaHltZW0sIFBDSV9TSVpFKTsKKwlpZiAoIG1lbSA9PSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IGlvcmVtYXAoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBMb2cgdGhlIGRldmljZSAqLworICAgICAgICBXTEFOX0xPR19JTkZPKCJBIFByaXNtMi41IFBDSSBkZXZpY2UgZm91bmQsICIKKwkJInBoeW1lbToweCVsbHgsIGlycTolZCwgbWVtOjB4JXBcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5bWVtLCBwZGV2LT5pcnEsIG1lbSk7CisKKwlpZiAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogU2V0dXAgbmV0ZGV2aWNlJ3MgYWJpbGl0eSB0byByZXBvcnQgcmVzb3VyY2VzCisJICogTm90ZTogdGhlIG5ldGRldmljZSB3YXMgYWxsb2NhdGVkIGJ5IHdsYW5fc2V0dXAoKQorCSAqLworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKyAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgbWVtOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm1lbV9lbmQgPSB3bGFuZGV2LT5uZXRkZXYtPm1lbV9zdGFydCArCisJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBkYXRhICovCisgICAgICAgIGhmYTM4NHhfY3JlYXRlKGh3LCB3bGFuZGV2LT5uZXRkZXYtPmlycSwgMCwgbWVtKTsKKwlody0+d2xhbmRldiA9IHdsYW5kZXY7CisKKwkvKiBSZWdpc3RlciB0aGUgd2xhbmRldiwgdGhpcyBnZXRzIHVzIGEgbmFtZSBhbmQgcmVnaXN0ZXJzIHRoZQorCSAqIGxpbnV4IG5ldGRldmljZS4KKwkgKi8KKwlTRVRfTU9EVUxFX09XTkVSKHdsYW5kZXYtPm5ldGRldik7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisgICAgICAgU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAmKHBkZXYtPmRldikpOworI2VuZGlmCisgICAgICAgIGlmICggcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKyAgICAgICAgfQorCisjaWYgMAorCS8qIFRPRE86IE1vdmUgdGhpcyBhbmQgYW4gaXJxIHRlc3QgaW50byBhbiBoZmEzODR4X3Rlc3RpZigpIHJvdXRpbmUuCisJICovCisJb3V0dyhQUklTTTJTVEFfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJcmVnPWludyggSEZBMzg0eF9TV1NVUFBPUlQod2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIpKTsKKwlpZiAoIHJlZyAhPSBQUklTTTJTVEFfTUFHSUMgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJNQUMgcmVnaXN0ZXIgYWNjZXNzIHRlc3QgZmFpbGVkIVxuIik7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisjZW5kaWYKKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsCisJCQkJZGV2X2luZm8pOworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKyAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdsYW5kZXYpOworCisJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhvb2sgdXAgdGhlIElSUSB1bnRpbCB3ZQorCSAqIF9rbm93XyB0aGluZ3MgYXJlIGFscmlnaHQuICBBIHRlc3Qgcm91dGluZSB3b3VsZCBoZWxwLgorCSAqLworICAgICAgIAlyZXF1ZXN0X2lycSh3bGFuZGV2LT5uZXRkZXYtPmlycSwgaGZhMzg0eF9pbnRlcnJ1cHQsCisJCVNBX1NISVJRLCB3bGFuZGV2LT5uYW1lLCB3bGFuZGV2KTsKKworCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCisJcmVzdWx0ID0gMDsKKwlnb3RvIGRvbmU7CisKKyBmYWlsOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworICAgICAgICBpZiAobWVtKSAgICAgICAgaW91bm1hcChtZW0pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworIGRvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHJpc20yc3RhX3JlbW92ZV9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90CSpodzsKKworCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKyAgICAgICAgaWYgKHBkZXYtPmlycSkKKwkJZnJlZV9pcnEocGRldi0+aXJxLCB3bGFuZGV2KTsKKworCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKworCS8qIGZyZWUgbG9jYWwgc3R1ZmYgKi8KKwlpZiAoaHcpIHsKKwkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJa2ZyZWUoaHcpOworCX0KKworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKXdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0KTsKKwl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJa2ZyZWUod2xhbmRldik7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF90YmxbXSA9IHsKKwl7CisJCVBDSVZFTkRPUl9JTlRFUlNJTCwgUENJREVWSUNFX0lTTDM4NzQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJJbnRlcnNpbCBQcmlzbTIuNSBJU0wzODc0IDExTWIvcyBXTEFOIENvbnRyb2xsZXIiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9JTlRFUlNJTCwgMHgzODcyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3MiAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisgICAgICAgIHsKKyAgICAgICAgICAgICAgIFBDSVZFTkRPUl9TQU1TVU5HLCBQQ0lERVZJQ0VfU1dMXzIyMTBQLAorICAgICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKyAgICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIlNhbXN1bmcgTWFnaWNMQU4gU1dMLTIyMTBQIDExTWIvcyBXTEFOIENvbnRyb2xsZXIiCisJfSwKKwl7IC8qIGZvciBOZXRHZWFyIE1BMzExICovCisJCVBDSVZFTkRPUl9ORVRHRUFSLCAweDM4NzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJOZXRnZWFyIE1BMzExIFdMQU4gQ29udHJvbGxlciIKKwl9LAorCXsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMAorCX0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfaWRfdGJsKTsKKworLyogRnVuY3Rpb24gZGVjbGFyZWQgaGVyZSBiZWNhdXNlIG9mIHB0ciByZWZlcmVuY2UgYmVsb3cgKi8KK3N0YXRpYyBpbnQgIF9fZGV2aW5pdCBwcmlzbTJzdGFfcHJvYmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCAgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByaXNtMl9wY2lfZHJ2X2lkID0geworICAgICAgICAubmFtZSA9ICJwcmlzbTJfcGNpIiwKKyAgICAgICAgLmlkX3RhYmxlID0gcGNpX2lkX3RibCwKKyAgICAgICAgLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3BjaSwKKyAgICAgICAgLnJlbW92ZSA9IHByaXNtMnN0YV9yZW1vdmVfcGNpLAorI2lmZGVmIENPTkZJR19QTQorICAgICAgICAuc3VzcGVuZCA9IHByaXNtMnN0YV9zdXNwZW5kX3BjaSwKKyAgICAgICAgLnJlc3VtZSA9IHByaXNtMnN0YV9yZXN1bWVfcGNpLAorI2VuZGlmCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnBjaV9pbml0KHZvaWQpCit7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZwcmlzbTJfcGNpX2Rydl9pZCk7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ycGNpX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9wY2lfZHJ2X2lkKTsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnBjaV9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnBjaV9jbGVhbnVwKTsKKworI2VuZGlmCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwl0aW1lb3V0OworCVVJTlQxNglyZWc7CisJREJGRU5URVI7CisKKwkvKiBBc3NlcnQgcmVzZXQgYW5kIHdhaXQgYXdoaWxlCisJICogKG5vdGU6IHRoZXNlIGRlbGF5cyBhcmUgX3JlYWxseV8gbG9uZywgYnV0IHRoZXkgYXBwZWFyIHRvIGJlCisJICogICAgICAgIG5lY2Vzc2FyeS4pCisJICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4YzUsIEhGQTM4NHhfUENJQ09SKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIEhaLzQ7CisJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKworCWlmIChnZW5lc2lzKSB7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBnZW5lc2lzLCBIRkEzODR4X1BDSUhDUik7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgSFovNDsKKwkJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKwl9CisKKwkvKiBDbGVhciB0aGUgcmVzZXQgYW5kIHdhaXQgc29tZSBtb3JlCisJICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4NDUsIEhGQTM4NHhfUENJQ09SKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIEhaLzI7CisJd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHVkZWxheSg1KTsKKworCS8qIFdhaXQgZm9yIGYvdyB0byBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiAoQ01EOkJVU1kgPT0gMCkKKwkgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIDIqSFo7CisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwl3aGlsZSAoIEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpICYmIHRpbWVfYmVmb3JlKCBqaWZmaWVzLCB0aW1lb3V0KSApIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKEhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoImNvcmVyZXNldDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNtZCByZWdpc3Rlci5cbiIpOworCQlyZXN1bHQ9MTsKKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BseC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BseC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMDQ0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGx4LmMKQEAgLTAsMCArMSw0NzIgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9QTFgKKyNpbmNsdWRlICJoZmEzODR4LmMiCisjaW5jbHVkZSAicHJpc20ybWdtdC5jIgorI2luY2x1ZGUgInByaXNtMm1pYi5jIgorI2luY2x1ZGUgInByaXNtMnN0YS5jIgorCisjZGVmaW5lIFBMWF9BVFRSX1NJWkUJMHgxMDAwCS8qIEF0dHJpYnV0ZSBtZW1vcnkgc2l6ZSAtIDRLIGJ5dGVzICovCisjZGVmaW5lIENPUl9PRkZTRVQJMHgzZTAJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KKyNkZWZpbmUgQ09SX1ZBTFVFCTB4NDEJLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpcnEgaW4gbGV2ZWwgdHJpZ2dlciAqLworI2RlZmluZSBQTFhfSU5UQ1NSCTB4NGMJLyogSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0lOVEVOICgxPDw2KSAvKiBJbnRlcnJ1cHQgRW5hYmxlIGJpdCAqLworI2RlZmluZSBQTFhfTUlOX0FUVFJfTEVOIDUxMiAgICAvKiBhdCBsZWFzdCAyIHggMjU2IGlzIG5lZWRlZCBmb3IgQ0lTICovCisKKy8qIDNDb20gM0NSVzc3N0EgKFBMWCkgYm9hcmQgSUQgKi8KKyNkZWZpbmUgUENJVkVORE9SXzNDT00gICAgICAgMHgxMEI3CisjZGVmaW5lIFBDSURFVklDRV9BSVJDT05ORUNUIDB4Nzc3MAorCisvKiBFdW1pdGNvbSBQQ0kgV0wxMTAwMCBQQ0kgQWRhcHRlciAoUExYKSBib2FyZCBkZXZpY2UrdmVuZG9yIElEICovCisjZGVmaW5lIFBDSVZFTkRPUl9FVU1JVENPTQkweDE2MzhVTAorI2RlZmluZSBQQ0lERVZJQ0VfV0wxMTAwMAkweDExMDBVTAorCisvKiBHbG9iYWwgU3VuIFRlY2ggR0wyNDExMFAgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lWRU5ET1JfR0xPQkFMU1VOCTB4MTZhYlVMCisjZGVmaW5lIFBDSURFVklDRV9HTDI0MTEwUAkweDExMDFVTAorI2RlZmluZSBQQ0lERVZJQ0VfR0wyNDExMFBfQUxUCTB4MTEwMlVMCisKKy8qIE5ldGdlYXIgTUEzMDEgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lWRU5ET1JfTkVUR0VBUgkweDEzODVVTAorI2RlZmluZSBQQ0lERVZJQ0VfTUEzMDEJCTB4NDEwMFVMCisKKy8qIFVTIFJvYm90aWNzIFVTUjI0MTAgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZQlQQ0lWRU5ET1JfVVNST0JPVElDUyAgICAweDE2ZWNVTAorI2RlZmluZSBQQ0lERVZJQ0VfVVNSMjQxMCAgICAgICAweDM2ODVVTAorCisvKiBMaW5rc3lzIFdQQzExIGNhcmQgd2l0aCB0aGUgV0RUMTEgYWRhcHRlciAoUExYKSBib2FyZCBkZXZpY2UrdmVuZG9yIElEICovCisjZGVmaW5lCVBDSVZFTkRPUl9MaW5rc3lzICAgICAgIDB4MTZhYlVMCisjZGVmaW5lIFBDSURFVklDRV9XcGMxMVdkdDExICAgIDB4MTEwMlVMCisKKy8qIE5hdGlvbmFsIERhdGFjb21tIENvcnAgU09IT3dhcmUgTmV0Ymxhc3RlciBJSSBQQ0kgKi8KKyNkZWZpbmUgUENJVkVORE9SX05EQwkgICAgICAgIDB4MTVlOFVMCisjZGVmaW5lIFBDSURFVklDRV9OQ1AxMzBfUExYIAkweDAxMzBVTAorI2RlZmluZSBQQ0lERVZJQ0VfTkNQMTMwX0FTSUMJMHgwMTMxVUwKKworLyogTkRDIE5DUDEzMF9QTFggaXMgYWxzbyBzb2xkIGJ5IENvcmVnYS4gVGhlaXIgbmFtZSBpcyBDR1dMUENJQTExICovCisjZGVmaW5lIFBDSVZFTkRPUl9DT1JFR0EgICAgICAgUENJVkVORE9SX05EQworI2RlZmluZSBQQ0lERVZJQ0VfQ0dXTFBDSUExMSAgIFBDSURFVklDRV9OQ1AxMzBfUExYCisKKy8qIFBDSSBDbGFzcyAmIFN1Yi1DbGFzcyBjb2RlLCBOZXR3b3JrLSdPdGhlciBjb250cm9sbGVyJyAqLworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUlMgMHgyODAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9wcm9iZV9wbHgKKyoKKyogUHJvYmUgcm91dGluZSBjYWxsZWQgd2hlbiBhIFBDSSBkZXZpY2Ugdy8gbWF0Y2hpbmcgSUQgaXMgZm91bmQuCisqIFRoaXMgUExYIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZvbGxvd2luZyBtYXA6CisqICAgQkFSMDogVW51c2VkCisqICAgQkFSMTogPz8/PworKiAgIEJBUjI6IFBDTUNJQSBhdHRyaWJ1dGUgbWVtb3J5CisqICAgQkFSMzogUENNQ0lBIGkvbyBzcGFjZQorKiBIZXJlJ3MgdGhlIHNlcXVlbmNlOgorKiAgIC0gQWxsb2NhdGUgdGhlIFBDSSByZXNvdXJjZXMuCisqICAgLSBSZWFkIHRoZSBQQ01DSUEgYXR0cmlidXRlIG1lbW9yeSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIFdMQU4gY2FyZAorKiAgIC0gUmVzZXQgdGhlIE1BQyB1c2luZyB0aGUgUENNQ0lBIENPUgorKiAgIC0gSW5pdGlhbGl6ZSB0aGUgbmV0ZGV2IGFuZCB3bGFuIGRhdGEKKyogICAtIEluaXRpYWxpemUgdGhlIE1BQworKgorKiBBcmd1bWVudHM6CisqCXBkZXYJCXB0ciB0byBwY2kgZGV2aWNlIHN0cnVjdHVyZSBjb250YWluaW5nIGluZm8gYWJvdXQKKyoJCQlwY2kgY29uZmlndXJhdGlvbi4KKyoJaWQJCXB0ciB0byB0aGUgZGV2aWNlIGlkIGVudHJ5IHRoYXQgbWF0Y2hlZCB0aGlzIGRldmljZS4KKyoKKyogUmV0dXJuczoKKyoJemVybwkJLSBzdWNjZXNzCisqCW5lZ2F0aXZlCS0gZmFpbGVkCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHJpc20yc3RhX3Byb2JlX3BseCgKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCSppZCkKK3sKKwlpbnQJCXJlc3VsdDsKKyAgICAgICAgcGh5c190CXBjY2FyZF9pb2FkZHI7CisJcGh5c190ICBwY2NhcmRfYXR0cl9tZW07CisgICAgICAgIHVuc2lnbmVkIGludCAgICBwY2NhcmRfYXR0cl9sZW47CisJdm9pZCBfX2lvbWVtICphdHRyX21lbSA9IE5VTEw7CisJVUlOVDMyCQlwbHhfYWRkcjsKKyAgICAgICAgd2xhbmRldmljZV90ICAgICp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwlpbnQJCXJlZzsKKyAgICAgICAgdTMyCQlyZWdpYzsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBUTUM3MTYwIGJvYXJkcyBhcmUgc3BlY2lhbCAqLworCWlmICgocGRldi0+dmVuZG9yID09IFBDSVZFTkRPUl9OREMpICYmCisJICAgIChwZGV2LT5kZXZpY2UgPT0gUENJREVWSUNFX05DUDEzMF9BU0lDKSkgeworCQl1bnNpZ25lZCBsb25nIGRlbGF5OworCisJCXBjY2FyZF9hdHRyX21lbSA9IDA7CisJCXBjY2FyZF9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisKKwkJb3V0YigweDQ1LCBwY2NhcmRfaW9hZGRyKTsKKwkJZGVsYXkgPSBqaWZmaWVzICsgMSpIWjsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7CisKKwkJaWYgKGluYihwY2NhcmRfaW9hZGRyKSAhPSAweDQ1KSB7CisJCQlXTEFOX0xPR19FUlJPUigiSW5pdGlhbGl6ZSB0aGUgVE1DNzE2MCBmYWlsZWQuICgweCV4KVxuIiwgaW5iKHBjY2FyZF9pb2FkZHIpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcGNjYXJkX2lvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwkJcHJpc20yX2RvcmVzZXQgPSAwOworCisJCVdMQU5fTE9HX0lORk8oIk5EQyBOQ1AxMzAgd2l0aCBUTUM3MTYoQVNJQykgUENJIGludGVyZmFjZSBkZXZpY2UgZm91bmQgYXQgaW86MHgleCwgaXJxOiVkXG4iLCBwY2NhcmRfaW9hZGRyLCBwZGV2LT5pcnEpOworCQlnb3RvIGluaXQ7CisJfQorCisJLyogQ29sbGVjdCB0aGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzICovCisJcGNjYXJkX2F0dHJfbWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCXBjY2FyZF9hdHRyX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisgICAgICAgIGlmIChwY2NhcmRfYXR0cl9sZW4gPCBQTFhfTUlOX0FUVFJfTEVOKQorCQlyZXR1cm4gLUVJTzsKKworCXBjY2FyZF9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMyk7CisKKwkvKiBiam9lcm46IFdlIG5lZWQgdG8gdGVsbCB0aGUgY2FyZCB0byBlbmFibGUgaW50ZXJydXB0cywgaW4KKwkgKiBjYXNlIHRoZSBzZXJpYWwgZXByb20gZGlkbid0IGRvIHRoaXMgYWxyZWFkeS4gU2VlIHRoZQorCSAqIFBMWDkwNTIgZGF0YSBib29rLCBwOC0xIGFuZCA4LTI0IGZvciByZWZlcmVuY2UuCisJICogW01TTV06IFRoaXMgYml0IG9mIGNvZGUgY2FtZSBmcm9tIHRoZSBvcmlub2NvX2NzIGRyaXZlci4KKwkgKi8KKwlwbHhfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKworCXJlZ2ljID0gMDsKKwlyZWdpYyA9IGlubChwbHhfYWRkcitQTFhfSU5UQ1NSKTsKKwlpZihyZWdpYyAmIFBMWF9JTlRDU1JfSU5URU4pIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSIlczogTG9jYWwgSW50ZXJydXB0IGFscmVhZHkgZW5hYmxlZFxuIiwgZGV2X2luZm8pOworCX0gZWxzZSB7CisJCXJlZ2ljIHw9IFBMWF9JTlRDU1JfSU5URU47CisJCW91dGwocmVnaWMsIHBseF9hZGRyK1BMWF9JTlRDU1IpOworCQlyZWdpYyA9IGlubChwbHhfYWRkcitQTFhfSU5UQ1NSKTsKKwkJaWYoIShyZWdpYyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IENvdWxkbid0IGVuYWJsZSBMb2NhbCBJbnRlcnJ1cHRzXG4iLAorCQkJCWRldl9pbmZvKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogVGhlc2UgYXNzaWdubWVudHMgYXJlIGhlcmUgaW4gY2FzZSBvZiBmdXR1cmUgbWFwcGluZ3MgZm9yCisJICogaW8gc3BhY2UgYW5kIGlycSB0aGF0IG1pZ2h0IGJlIHNpbWlsYXIgdG8gaW9yZW1hcAorCSAqLworICAgICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2NhcmRfYXR0cl9tZW0sIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMiksICJQcmlzbTIiKSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IENvdWxkbid0IHJlc2VydmUgUENJIG1lbW9yeSByZWdpb25cbiIsIGRldl9pbmZvKTsKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIH0KKworCWF0dHJfbWVtID0gaW9yZW1hcChwY2NhcmRfYXR0cl9tZW0sIHBjY2FyZF9hdHRyX2xlbik7CisKKwlXTEFOX0xPR19JTkZPKCJBIFBMWCBQQ0kvUENNQ0lBIGludGVyZmFjZSBkZXZpY2UgZm91bmQsICIKKwkJInBoeW1lbToweCVsbHgsIHBoeWlvPTB4JXgsIGlycTolZCwgIgorCQkibWVtOiAweCVseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2NhcmRfYXR0cl9tZW0sIHBjY2FyZF9pb2FkZHIsIHBkZXYtPmlycSwKKwkJKHVuc2lnbmVkIGxvbmcpYXR0cl9tZW0pOworCisJLyogVmVyaWZ5IHdoZXRoZXIgUEMgY2FyZCBpcyBwcmVzZW50LgorCSAqIFtNU01dIFRoaXMgbmVlZHMgaW1wcm92ZW1lbnQsIHRoZSByaWdodCB0aGluZyB0byBkbyBpcworCSAqIHByb2JhYmx5IHRvIHdhbGsgdGhlIENJUyBsb29raW5nIGZvciB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0CisJICogSURzLiAgSXQgd291bGQgYmUgbmljZSBpZiB0aGlzIGNvdWxkIGJlIHRpZWQgaW4gd2l0aCB0aGUKKwkgKiBldGMvcGNtY2lhL3dsYW4tbmcuY29uZiBmaWxlLiAgQW55IHZvbHVudGVlcnM/ICA7LSkKKwkgKi8KKwlpZiAoCisJcmVhZGIoYXR0cl9tZW0gKyAwKSAhPSAweDAxIHx8IHJlYWRiKGF0dHJfbWVtICsgMikgIT0gMHgwMyB8fAorCXJlYWRiKGF0dHJfbWVtICsgNCkgIT0gMHgwMCB8fCByZWFkYihhdHRyX21lbSArIDYpICE9IDB4MDAgfHwKKwlyZWFkYihhdHRyX21lbSArIDgpICE9IDB4RkYgfHwgcmVhZGIoYXR0cl9tZW0gKyAxMCkgIT0gMHgxNyB8fAorCXJlYWRiKGF0dHJfbWVtICsgMTIpICE9IDB4MDQgfHwgcmVhZGIoYXR0cl9tZW0gKyAxNCkgIT0gMHg2NykgeworCQlXTEFOX0xPR19FUlJPUigiUHJpc20yIFBDIGNhcmQgQ0lTIGlzIGludmFsaWQuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIH0KKyAgICAgICAgV0xBTl9MT0dfSU5GTygiQSBQQ01DSUEgV0xBTiBhZGFwdGVyIHdhcyBmb3VuZC5cbiIpOworCisgICAgICAgIC8qIFdyaXRlIENPUiB0byBlbmFibGUgUEMgY2FyZCAqLworCXdyaXRlYihDT1JfVkFMVUUsIGF0dHJfbWVtICsgQ09SX09GRlNFVCk7CisJcmVnID0gcmVhZGIoYXR0cl9tZW0gKyBDT1JfT0ZGU0VUKTsKKworIGluaXQ6CisKKwkvKgorCSAqIE5vdyBkbyBldmVyeXRoaW5nIHRoZSBzYW1lIGFzIGEgUENJIGRldmljZQorCSAqIFtNU01dIFRPRE86IFdlIGNvdWxkIHByb2JhYmx5IGZhY3RvciB0aGlzIG91dCBvZiBwY21jaWEvcGNpL3BseAorCSAqIGFuZCBwZXJoYXBzIHVzYi4gIFBlcmhhcHMgYSB0YXNrIGZvciBhbm90aGVyIGRheS4uLi4uLi4KKwkgKi8KKworCWlmICgod2xhbmRldiA9IGNyZWF0ZV93bGFuKCkpID09IE5VTEwpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBTZXR1cCBuZXRkZXZpY2UncyBhYmlsaXR5IHRvIHJlcG9ydCByZXNvdXJjZXMKKwkgKiBOb3RlOiB0aGUgbmV0ZGV2aWNlIHdhcyBhbGxvY2F0ZWQgYnkgd2xhbl9zZXR1cCgpCisJICovCisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+aXJxID0gcGRldi0+aXJxOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkciA9IHBjY2FyZF9pb2FkZHI7CisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpYXR0cl9tZW07CisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bWVtX2VuZCA9ICh1bnNpZ25lZCBsb25nKWF0dHJfbWVtICsgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGh3IGRhdGEgKi8KKyAgICAgICAgaGZhMzg0eF9jcmVhdGUoaHcsIHdsYW5kZXYtPm5ldGRldi0+aXJxLCBwY2NhcmRfaW9hZGRyLCBhdHRyX21lbSk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIHdsYW5kZXYsIHRoaXMgZ2V0cyB1cyBhIG5hbWUgYW5kIHJlZ2lzdGVycyB0aGUKKwkgKiBsaW51eCBuZXRkZXZpY2UuCisJICovCisJU0VUX01PRFVMRV9PV05FUih3bGFuZGV2LT5uZXRkZXYpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorICAgICAgIFNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgJihwZGV2LT5kZXYpKTsKKyNlbmRpZgorICAgICAgICBpZiAoIHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorCisjaWYgMAorCS8qIFRPRE86IE1vdmUgdGhpcyBhbmQgYW4gaXJxIHRlc3QgaW50byBhbiBoZmEzODR4X3Rlc3RpZigpIHJvdXRpbmUuCisJICovCisJb3V0dyhQUklTTTJTVEFfTUFHSUMsIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJcmVnPWludyggSEZBMzg0eF9TV1NVUFBPUlQod2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIpKTsKKwlpZiAoIHJlZyAhPSBQUklTTTJTVEFfTUFHSUMgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJNQUMgcmVnaXN0ZXIgYWNjZXNzIHRlc3QgZmFpbGVkIVxuIik7CisgCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisjZW5kaWYKKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSIlczogaGZhMzg0eF9jb3JlcmVzZXQoKSBmYWlsZWQuXG4iLAorCQkJCWRldl9pbmZvKTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3bGFuZGV2KTsKKworCS8qIFNob3VsZG4ndCBhY3R1YWxseSBob29rIHVwIHRoZSBJUlEgdW50aWwgd2UKKwkgKiBfa25vd18gdGhpbmdzIGFyZSBhbHJpZ2h0LiAgQSB0ZXN0IHJvdXRpbmUgd291bGQgaGVscC4KKwkgKi8KKyAgICAgICAJcmVxdWVzdF9pcnEod2xhbmRldi0+bmV0ZGV2LT5pcnEsIGhmYTM4NHhfaW50ZXJydXB0LAorCQlTQV9TSElSUSwgd2xhbmRldi0+bmFtZSwgd2xhbmRldik7CisKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKworCXJlc3VsdCA9IDA7CisKKwlnb3RvIGRvbmU7CisKKyBmYWlsZWQ6CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCWlmIChodykJCWtmcmVlKGh3KTsKKyAgICAgICAgaWYgKGF0dHJfbWVtKSAgICAgICAgaW91bm1hcChhdHRyX21lbSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKyAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisgZG9uZToKKwlEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHJpc20yc3RhX3JlbW92ZV9wbHgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgICAgCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWh3ID0gd2xhbmRldi0+cHJpdjsKKworCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldik7CisKKwkvKiByZXNldCBoYXJkd2FyZSAqLworCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlKTsKKworICAgICAgICBpZiAocGRldi0+aXJxKQorCQlmcmVlX2lycShwZGV2LT5pcnEsIHdsYW5kZXYpOworCisJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCisJLyogZnJlZSBsb2NhbCBzdHVmZiAqLworCWlmIChodykgeworCQloZmEzODR4X2Rlc3Ryb3koaHcpOworCQlrZnJlZShodyk7CisJfQorCisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopd2xhbmRldi0+bmV0ZGV2LT5tZW1fc3RhcnQpOworCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlrZnJlZSh3bGFuZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBseF9pZF90YmxbXSA9IHsKKwl7CisJCVBDSVZFTkRPUl9FVU1JVENPTSwgUENJREVWSUNFX1dMMTEwMDAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJFdW1pdGNvbSBXTDExMDAwIFBDSShQTFgpIGNhcmQiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9HTE9CQUxTVU4sIFBDSURFVklDRV9HTDI0MTEwUCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIkdsb2JhbCBTdW4gVGVjaCBHTDI0MTEwUCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfR0xPQkFMU1VOLCBQQ0lERVZJQ0VfR0wyNDExMFBfQUxULAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiR2xvYmFsIFN1biBUZWNoIEdMMjQxMTBQIFBDSShQTFgpIGNhcmQiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9ORVRHRUFSLCBQQ0lERVZJQ0VfTUEzMDEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJHbG9iYWwgU3VuIFRlY2ggR0wyNDExMFAgUENJKFBMWCkgY2FyZCIKKwl9LAorCXsKKwkJUENJVkVORE9SX1VTUk9CT1RJQ1MsIFBDSURFVklDRV9VU1IyNDEwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiVVMgUm9ib3RpY3MgVVNSMjQxMCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfTGlua3N5cywgUENJREVWSUNFX1dwYzExV2R0MTEsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJMaW5rc3lzIFdQQzExIHdpdGggV0RUMTEgUENJKFBMWCkgYWRhcHRlciIKKwl9LAorCXsKKwkgICAgICAgIFBDSVZFTkRPUl9OREMsIFBDSURFVklDRV9OQ1AxMzBfUExYLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiTkRDIE5ldGJsYXN0ZXIgSUkgUENJKFBMWCkiCisJfSwKKwl7CisJICAgICAgICBQQ0lWRU5ET1JfTkRDLCBQQ0lERVZJQ0VfTkNQMTMwX0FTSUMsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJOREMgTmV0Ymxhc3RlciBJSSBQQ0koVE1DNzE2MCkiCisJfSwKKwl7CisJCVBDSVZFTkRPUl8zQ09NLCBQQ0lERVZJQ0VfQUlSQ09OTkVDVCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIjNDb20gQWlyQ29ubmVjdCBQQ0kgODAyLjExYiAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisJeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwCisJfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBseF9pZF90YmwpOworCisvKiBGdW5jdGlvbiBkZWNsYXJlZCBoZXJlIGJlY2F1c2Ugb2YgcHRyIHJlZmVyZW5jZSBiZWxvdyAqLworc3RhdGljIGludCBfX2RldmluaXQgcHJpc20yc3RhX3Byb2JlX3BseChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOworc3RhdGljIHZvaWQgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGx4KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByaXNtMl9wbHhfZHJ2X2lkID0geworICAgICAgICAubmFtZSA9ICJwcmlzbTJfcGx4IiwKKyAgICAgICAgLmlkX3RhYmxlID0gcGx4X2lkX3RibCwKKyAgICAgICAgLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3BseCwKKyAgICAgICAgLnJlbW92ZSA9IHByaXNtMnN0YV9yZW1vdmVfcGx4LAorI2lmZGVmIENPTkZJR19QTQorICAgICAgICAuc3VzcGVuZCA9IHByaXNtMnN0YV9zdXNwZW5kX3BjaSwKKyAgICAgICAgLnJlc3VtZSA9IHByaXNtMnN0YV9yZXN1bWVfcGNpLAorI2VuZGlmCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnBseF9pbml0KHZvaWQpCit7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZwcmlzbTJfcGx4X2Rydl9pZCk7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ycGx4X2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnByaXNtMl9wbHhfZHJ2X2lkKTsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnBseF9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnBseF9jbGVhbnVwKTsKKworI2VuZGlmIC8vIE1PRFVMRQorCisKK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisKKyNkZWZpbmUgQ09SX09GRlNFVAkweDNlMAkvKiBDT1IgYXR0cmlidXRlIG9mZnNldCBvZiBQcmlzbTIgUEMgY2FyZCAqLworI2RlZmluZSBDT1JfVkFMVUUJMHg0MQkvKiBFbmFibGUgUEMgY2FyZCB3aXRoIGlycSBpbiBsZXZlbCB0cmlnZ2VyICovCisKKyNkZWZpbmUgSENSX09GRlNFVAkweDNlMgkvKiBIQ1IgYXR0cmlidXRlIG9mZnNldCBvZiBQcmlzbTIgUEMgY2FyZCAqLworCisJVUlOVDgJCWNvcnNhdmU7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiRG9pbmcgcmVzZXQgdmlhIGRpcmVjdCBDT1IgYWNjZXNzLlxuIik7CisKKwkvKiBDb2xsZWN0IENPUiAqLworCWNvcnNhdmUgPSByZWFkYihody0+bWVtYmFzZSArIENPUl9PRkZTRVQpOworCS8qIFdyaXRlIHJlc2V0IGJpdCAoQklUNykgKi8KKwl3cml0ZWIoY29yc2F2ZSB8IEJJVDcsIGh3LT5tZW1iYXNlICsgQ09SX09GRlNFVCk7CisJLyogSG9sZCBmb3IgaG9sZHRpbWUgKi8KKwltZGVsYXkoaG9sZHRpbWUpOworCisJaWYgKGdlbmVzaXMpIHsKKwkJd3JpdGViKGdlbmVzaXMsIGh3LT5tZW1iYXNlICsgSENSX09GRlNFVCk7CisJCS8qIEhvbGQgZm9yIGhvbGR0aW1lICovCisJCW1kZWxheShob2xkdGltZSk7CisJfQorCisJLyogQ2xlYXIgcmVzZXQgYml0ICovCisJd3JpdGViKGNvcnNhdmUgJiB+QklUNywgaHctPm1lbWJhc2UgKyBDT1JfT0ZGU0VUKTsKKwkvKiBXYWl0IGZvciBzZXR0bGV0aW1lICovCisJbWRlbGF5KHNldHRsZXRpbWUpOworCS8qIFNldCBub24tcmVzZXQgYml0cyBiYWNrIHdoYXQgdGhleSB3ZXJlICovCisJd3JpdGViKGNvcnNhdmUsIGh3LT5tZW1iYXNlICsgQ09SX09GRlNFVCk7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NWJlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfdXNiLmMKQEAgLTAsMCArMSwzNjEgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9VU0IKKyNpbmNsdWRlICJoZmEzODR4X3VzYi5jIgorI2luY2x1ZGUgInByaXNtMm1nbXQuYyIKKyNpbmNsdWRlICJwcmlzbTJtaWIuYyIKKyNpbmNsdWRlICJwcmlzbTJzdGEuYyIKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZXJyb3IgInByaXNtMl91c2IgcmVxdWlyZXMgYXQgbGVhc3QgYSAyLjQueCBrZXJuZWwhIgorI2VuZGlmCisKKyNkZWZpbmUgUFJJU01fVVNCX0RFVklDRSh2aWQsIHBpZCwgbmFtZSkgXAorICAgICAgICAgICBVU0JfREVWSUNFKHZpZCwgcGlkKSwgIFwKKyAgICAgICAgICAgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIG5hbWUKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9wcmlzbV90YmxbXSA9IHsKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0YmIsIDB4MDkyMiwgIklPRGF0YSBBaXJQb3J0IFdOLUIxMS9VU0JTIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDdhYSwgMHgwMDEyLCAiQ29yZWdhIFdpcmVsZXNzIExBTiBVU0IgU3RpY2stMTEiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOWFhLCAweDM2NDIsICJQcmlzbTIueCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQyMSwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNiwgIkxpbmtzeXMgV1VTQjExdjMuMCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMywgIkxpbmtzeXMgV1VTQjEydjEuMSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMywgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAxNiwgIk1lbGNvIFdMSS1VU0ItUzExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHg4MDg2LCAweDExMTEsICJJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGQ4ZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDk2NywgMHgwMjA0LCAiQWNlciBXYXJwbGluayBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA1LCAiWi1Db20gWGw3MzUgV2lyZWxlc3MgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDQxM2MsIDB4ODEwMCwgIkRlbGwgVHJ1ZU1vYmlsZSAxMTgwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MDIsICJaeVhFTCBaeUFJUiBCMjAwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGJhZiwgMHgwMGViLCAiVVNSb2JvdGljcyBVU1IxMTIwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAorICAgICAgICB7UFJJU01fVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKKyAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCisvLwl7UFJJU01fVVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSwgIlp5REFTIFpEMTIwMSBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkFTVVMtV0wxNDAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDAsICJEV0wtMTIyIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAyLCAiRFdMLTEyMCBSZXYgRiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDUwYzIsIDB4NDAxMywgIkF2ZXJhdGVjIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyYzAyLCAweDE0ZWEsICJQbGFuZXggR1ctVVMxMUggV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4MTY4YiwgIkFpcnZhc3QgUFJJU00zIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDMsICJULVNpbnVzIDExMSBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiSGF3a2luZyBIaWdoREIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4NjEwNiwgIlJPUEVYIEZyZWVMYW4gODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4NDAxNywgIlBoZWVuZXQgV0wtNTAzSUEgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBiYjIsIDB4MDMwMiwgIkFtYml0IE1pY3Jvc3lzdGVtcyBDb3JwLiIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDkwMTYsIDB4MTgyZCwgIlNpdGVjb20gV0wtMDIyIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNTQzLCAweDBmMDEsICJWaWV3U29uaWMgQWlyc3luYyBVU0IgQWRhcHRlciAxMU1icHMgKFByaXNtMi41KSIpfSwKKwl7IC8qIHRlcm1pbmF0b3IgKi8gfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9wcmlzbV90YmwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3Byb2JlX3VzYgorKgorKiBQcm9iZSByb3V0aW5lIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbS4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJCXB0ciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QKKyoJaWZudW0JCWludGVyZmFjZSBudW1iZXIgYmVpbmcgb2ZmZXJlZAorKgorKiBSZXR1cm5zOgorKglOVUxMCQktIHdlJ3JlIG5vdCBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZQorKglub24tTlVMTAktIHdlIGFyZSBjbGFpbWluZyB0aGUgZGV2aWNlK2ludGVyZmFjZSBhbmQKKyoJCQkgIHRoaXMgaXMgYSBwdHIgdG8gdGhlIGRhdGEgd2Ugd2FudCBiYWNrCisqCQkJICB3aGVuIGRpc2Nvbm5lY3QgaXMgY2FsbGVkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSSdtIG5vdCBzdXJlLCBhc3N1bWUgaXQncyBpbnRlcnJ1cHQuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorc3RhdGljIHZvaWQgX19kZXZpbml0ICpwcmlzbTJzdGFfcHJvYmVfdXNiKAorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGlmbnVtLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKyNlbHNlCitzdGF0aWMgaW50IHByaXNtMnN0YV9wcm9iZV91c2IoCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisjZW5kaWYKK3sKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKyNlbHNlCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKyNlbmRpZgorCisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJaW50ZXJmYWNlID0gJmRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaWZudW1dOworI2Vsc2UKKwlkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisjZW5kaWYKKworCisJaWYgKCh3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKSkgPT0gTlVMTCkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlpZiAoIHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBkYXRhICovCisJaGZhMzg0eF9jcmVhdGUoaHcsIGRldik7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIHdsYW5kZXYsIHRoaXMgZ2V0cyB1cyBhIG5hbWUgYW5kIHJlZ2lzdGVycyB0aGUKKwkgKiBsaW51eCBuZXRkZXZpY2UuCisJICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisJU0VUX05FVERFVl9ERVYod2xhbmRldi0+bmV0ZGV2LCAmKGludGVyZmFjZS0+ZGV2KSk7CisjZW5kaWYKKyAgICAgICAgaWYgKCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisgICAgICAgIH0KKworCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCisJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCXJlc3VsdCA9IC1FSU87CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IGhmYTM4NHhfY29yZXJlc2V0KCkgZmFpbGVkLlxuIiwKKwkJCQlkZXZfaW5mbyk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCX0KKworI2lmbmRlZiBORVdfTU9EVUxFX0NPREUKKwl1c2JfaW5jX2Rldl91c2UoZGV2KTsKKyNlbmRpZgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KSkKKwl1c2JfZ2V0X2RldihkZXYpOworI2VuZGlmCisKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKworCWdvdG8gZG9uZTsKKworIGZhaWxlZDoKKwlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7CisJaWYgKGh3KQkJa2ZyZWUoaHcpOworCXdsYW5kZXYgPSBOVUxMOworCisgZG9uZToKKwlEQkZFWElUOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwlyZXR1cm4gd2xhbmRldjsKKyNlbHNlCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHdsYW5kZXYpOworCXJldHVybiByZXN1bHQ7CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiCisqCisqIENhbGxlZCB3aGVuIGEgZGV2aWNlIHByZXZpb3VzbHkgY2xhaW1lZCBieSBwcm9iZSBpcyByZW1vdmVkCisqIGZyb20gdGhlIFVTQi4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJCXB0ciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QKKyoJcHRyCQlwdHIgcmV0dXJuZWQgYnkgcHJvYmUoKSB3aGVuIHRoZSBkZXZpY2UKKyogICAgICAgICAgICAgICAgICAgICAgIHdhcyBjbGFpbWVkLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorc3RhdGljIHZvaWQgX19kZXZleGl0CitwcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQorI2Vsc2UKK3N0YXRpYyB2b2lkCitwcmlzbTJzdGFfZGlzY29ubmVjdF91c2Ioc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKKyNlbmRpZgoreworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisjZWxzZQorCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilwdHI7CisjZW5kaWYKKworICAgICAgICBEQkZFTlRFUjsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKyNlbmRpZgorCisJaWYgKCB3bGFuZGV2ICE9IE5VTEwgKSB7CisJCUxJU1RfSEVBRChjbGVhbmxpc3QpOworCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdGVtcDsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCisJCWlmICghaHcpCisJCQlnb3RvIGV4aXQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2KTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaHctPmN0bHhxLnJlYXBhYmxlLCAmY2xlYW5saXN0KTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaHctPmN0bHhxLmNvbXBsZXRpbmcsICZjbGVhbmxpc3QpOworCQlsaXN0X3NwbGljZV9pbml0KCZody0+Y3RseHEucGVuZGluZywgJmNsZWFubGlzdCk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJmh3LT5jdGx4cS5hY3RpdmUsICZjbGVhbmxpc3QpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJLyogVGhlcmUncyBubyBoYXJkd2FyZSB0byBzaHV0ZG93biwgYnV0IHRoZSBkcml2ZXIKKwkJICogbWlnaHQgaGF2ZSBzb21lIHRhc2tzIG9yIHRhc2tsZXRzIHRoYXQgbXVzdCBiZQorCQkgKiBzdG9wcGVkIGJlZm9yZSB3ZSBjYW4gdGVhciBldmVyeXRoaW5nIGRvd24uCisJCSAqLworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnRocm90dGxlKTsKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlcXRpbWVyKTsKKwkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlc3B0aW1lcik7CisKKwkJLyogVW5saW5rIGFsbCB0aGUgVVJCcy4gVGhpcyAicmVtb3ZlcyB0aGUgd2hlZWxzIgorCQkgKiBmcm9tIHRoZSBlbnRpcmUgQ1RMWCBoYW5kbGluZyBtZWNoYW5pc20uCisJCSAqLworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCQl1c2Jfa2lsbF91cmIoJmh3LT50eF91cmIpOworCQl1c2Jfa2lsbF91cmIoJmh3LT5jdGx4X3VyYik7CisKKwkJdGFza2xldF9raWxsKCZody0+Y29tcGxldGlvbl9iaCk7CisJCXRhc2tsZXRfa2lsbCgmaHctPnJlYXBlcl9iaCk7CisKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQkvKiBOb3cgd2UgY29tcGxldGUgYW55IG91dHN0YW5kaW5nIGNvbW1hbmRzCisJCSAqIGFuZCB0ZWxsIGV2ZXJ5b25lIHdobyBpcyB3YWl0aW5nIGZvciB0aGVpcgorCQkgKiByZXNwb25zZXMgdGhhdCB3ZSBoYXZlIHNodXQgZG93bi4KKwkJICovCisJCWxpc3RfZm9yX2VhY2goZW50cnksICZjbGVhbmxpc3QpIHsKKwkJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCQkJY29tcGxldGUoJmN0bHgtPmRvbmUpOworCQl9CisKKwkJLyogR2l2ZSBhbnkgb3V0c3RhbmRpbmcgc3luY2hyb25vdXMgY29tbWFuZHMKKwkJICogYSBjaGFuY2UgdG8gY29tcGxldGUuIEFsbCB0aGV5IG5lZWQgdG8gZG8KKwkJICogaXMgIndha2UgdXAiLCBzbyB0aGF0J3MgZWFzeS4KKwkJICogKEknZCBsaWtlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCByZWFsbHkuKQorCQkgKi8KKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogTm93IGRlbGV0ZSB0aGUgQ1RMWHMsIGJlY2F1c2Ugbm8tb25lIGVsc2UgY2FuIG5vdy4gKi8KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmY2xlYW5saXN0KSB7CisJCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCQkJY3RseCA9IGxpc3RfZW50cnkoZW50cnksIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKKwkJCWtmcmVlKGN0bHgpOworCQl9CisKKwkJLyogVW5ob29rIHRoZSB3bGFuZGV2ICovCisJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKwkJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCisjaWZuZGVmIE5FV19NT0RVTEVfQ09ERQorCQl1c2JfZGVjX2Rldl91c2UoaHctPnVzYik7CisjZW5kaWYKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkpCisJCXVzYl9wdXRfZGV2KGh3LT51c2IpOworI2VuZGlmCisKKwkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJa2ZyZWUoaHcpOworCisJCWtmcmVlKHdsYW5kZXYpOworCX0KKworIGV4aXQ6CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisjZW5kaWYKKwlEQkZFWElUOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwcmlzbTJfdXNiX2RyaXZlciA9IHsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDE5KSkgJiYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikpCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZW5kaWYKKwkubmFtZSA9ICJwcmlzbTJfdXNiIiwKKwkucHJvYmUgPSBwcmlzbTJzdGFfcHJvYmVfdXNiLAorCS5kaXNjb25uZWN0ID0gcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiLAorCS5pZF90YWJsZSA9IHVzYl9wcmlzbV90YmwsCisJLyogZm9wcywgbWlub3I/ICovCit9OworCisjaWZkZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHByaXNtMnVzYl9pbml0KHZvaWQpCit7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiJXMgTG9hZGVkXG4iLCB2ZXJzaW9uKTsKKyAgICAgICAgV0xBTl9MT0dfTk9USUNFKCJkZXZfaW5mbyBpczogJXNcbiIsIGRldl9pbmZvKTsKKworCS8qIFRoaXMgY2FsbCB3aWxsIHJlc3VsdCBpbiBjYWxscyB0byBwcmlzbTJzdGFfcHJvYmVfdXNiLiAqLworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnByaXNtMl91c2JfZHJpdmVyKTsKKworCURCRkVYSVQ7Cit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpc20ydXNiX2NsZWFudXAodm9pZCkKK3sKKyAgICAgICAgREJGRU5URVI7CisKKwl1c2JfZGVyZWdpc3RlcigmcHJpc20yX3VzYl9kcml2ZXIpOworCisgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVW5sb2FkZWRcbiIsIHZlcnNpb24pOworCisJREJGRVhJVDsKK307CisKK21vZHVsZV9pbml0KHByaXNtMnVzYl9pbml0KTsKK21vZHVsZV9leGl0KHByaXNtMnVzYl9jbGVhbnVwKTsKKworI2VuZGlmIC8vIG1vZHVsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzUwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKQEAgLTAsMCArMSwyOTU2IEBACisvKiBzcmMvcHJpc20yL2RyaXZlci9wcmlzbTJtZ210LmMKKyoKKyogTWFuYWdlbWVudCByZXF1ZXN0IGhhbmRsZXIgZnVuY3Rpb25zLgorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBoYW5kbGUgbWFuYWdlbWVudCByZXF1ZXN0cyBzZW50IGZyb20KKyogdXNlciBtb2RlLgorKgorKiBNb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHR3byBzZXBhcmF0ZSBibG9ja3Mgb2YgY29kZSB0aGF0IGFyZQorKiBjb25kaXRpb25hbCBvbiB3aGV0aGVyIHRoaXMgaXMgYSBzdGF0aW9uIG9yIGFuIEFQLiAgVGhpcyBpcyB1c2VkCisqIHRvIHNlcGFyYXRlIG91dCB0aGUgU1RBIGFuZCBBUCByZXNwb25zZXMgdG8gdGhlc2UgbWFuYWdlbWVudCBwcmltaXRpdmVzLgorKiBJdCdzIGEgY2hvaWNlIChnb29kLCBiYWQsIGluZGlmZmVyZW50PykgdG8gaGF2ZSB0aGUgY29kZSBpbiB0aGUgc2FtZQorKiBwbGFjZSBzbyBpdCdzIGNsZWFyIHRoYXQgdGhlIHNhbWUgcHJpbWl0aXZlIGlzIGltcGxlbWVudGVkIGluIGJvdGgKKyogY2FzZXMgYnV0IGhhcyBkaWZmZXJlbnQgYmVoYXZpb3IuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjZW5kaWYKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKyNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgorI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKiBDb252ZXJ0cyA4MDIuMTEgZm9ybWF0IHJhdGUgc3BlY2lmaWNhdGlvbnMgdG8gcHJpc20yICovCisjZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQ3KSA9PSAyKSA/IEJJVDAgOiBcCisJCQkJICgoKG4pJn5CSVQ3KSA9PSA0KSA/IEJJVDEgOiBcCisJCQkJICgoKG4pJn5CSVQ3KSA9PSAxMSkgPyBCSVQyIDogXAorCQkJCSAoKChuKSZ+QklUNykgPT0gMjIpID8gQklUMyA6IDApCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcG93ZXJtZ210CisqCisqIFNldCB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSBvZiB0aGlzIHN0YXRpb24ncyBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9wb3dlcm1nbXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210X3QJKm1zZyA9IG1zZ3A7CisKKwlEQkZFTlRFUjsKKworCWlmICghaHctPmFwKSB7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKworCQkvKgorCQkgKiBTZXQgQ05GUE1FTkFCTEVEIChvbiBvciBvZmYpCisJCSAqIFNldCBDTkZNVUxUSUNBU1RSWCAoaWYgUE0gb24sIG90aGVyd2lzZSBjbGVhcikKKwkJICogU3BvdXQgYSBub3RpY2Ugc3RhdGluZyB0aGF0IFNsZWVwRHVyYXRpb24gYW5kCisJCSAqIEhvbGRvdmVyRHVyYXRpb24gYW5kIFBNRVBTIGFsc28gaGF2ZSBhbiBpbXBhY3QuCisJCSAqLworCQkvKiBQb3dlcm1nbXQgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIGZvciBTVEEgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBQb3dlcm1nbXQgaXMgbmV2ZXIgc3VwcG9ydGVkIGZvciBBUCAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zY2FuCisqCisqIEluaXRpYXRlIGEgc2NhbiBmb3IgQlNTcy4KKyoKKyogVGhpcyBmdW5jdGlvbiBjb3JyZXNwb25kcyB0byBNTE1FLXNjYW4ucmVxdWVzdCBhbmQgcGFydCBvZgorKiBNTE1FLXNjYW4uY29uZmlybS4gIEFzIGZhciBhcyBJIGNhbiB0ZWxsIGluIHRoZSBzdGFuZGFyZCwgdGhlcmUKKyogYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB3aGVuIGEgc2Nhbi5yZXF1ZXN0IG1heSBiZSBpc3N1ZWQuICBXZSBoYXZlCisqIHRvIGhhbmRsZSBpbiB3aGF0ZXZlciBzdGF0ZSB0aGUgZHJpdmVyL01BQyBoYXBwZW4gdG8gYmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdAkqbXNnID0gbXNncDsKKyAgICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgcm9hbWluZ21vZGUsIHdvcmQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaSwgdGltZW91dDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBpc3RtcGVuYWJsZSA9IDA7CisKKyAgICAgICAgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90ICBzY2FucmVxOworCisJREJGRU5URVI7CisKKyAgICAgICAgaWYgKGh3LT5hcCkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJQcmlzbTIgaW4gQVAgbW9kZSBjYW5ub3QgcGVyZm9ybSBzY2Fucy5cbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBnYXRla2VlcGVyIGNoZWNrICovCisgICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAorICAgICAgICAgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywyKSkgeworCQlXTEFOX0xPR19FUlJPUigiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyAgICAgICAgbWVtc2V0KCZzY2FucmVxLCAwLCBzaXplb2Yoc2NhbnJlcSkpOworCisgICAgICAgIC8qIHNhdmUgY3VycmVudCByb2FtaW5nIG1vZGUgKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsICZyb2FtaW5nbW9kZSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJnZXRjb25maWcoUk9BTU1PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRyb3AgaW50byBtb2RlIDMgZm9yIHRoZSBzY2FuICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKyAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFjdGl2ZSBvciBwYXNzaXZlPyAqLworICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID4KKyAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDUsMCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwgd29yZCk7CisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19XQVJOSU5HKCJQYXNzaXZlIHNjYW4gbm90IHN1cHBvcnRlZCB3aXRoICIKKwkJCQkJICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworCS8qIHNldCB1cCB0aGUgdHhyYXRlIHRvIGJlIDJNQlBTLiBTaG91bGQgYmUgZmFzdGVzdCBiYXNpY3JhdGUuLi4gKi8KKwl3b3JkID0gSEZBMzg0eF9SQVRFQklUXzI7CisJc2NhbnJlcS50eFJhdGUgPSBob3N0MmhmYTM4NHhfMTYod29yZCk7CisKKyAgICAgICAgLyogc2V0IHVwIHRoZSBjaGFubmVsIGxpc3QgKi8KKyAgICAgICAgd29yZCA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBVSU5UOCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKGNoYW5uZWwgPiAxNCkgY29udGludWU7CisgICAgICAgICAgICAgICAgLyogY2hhbm5lbCAxIGlzIEJJVDAgLi4uIGNoYW5uZWwgMTQgaXMgQklUMTMgKi8KKyAgICAgICAgICAgICAgICB3b3JkIHw9ICgxIDw8IChjaGFubmVsLTEpKTsKKyAgICAgICAgfQorICAgICAgICBzY2FucmVxLmNoYW5uZWxMaXN0ID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCisgICAgICAgIC8qIHNldCB1cCB0aGUgc3NpZCwgaWYgcHJlc2VudC4gKi8KKyAgICAgICAgc2NhbnJlcS5zc2lkLmxlbiA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPnNzaWQuZGF0YS5sZW4pOworICAgICAgICBtZW1jcHkoc2NhbnJlcS5zc2lkLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmRhdGEsIG1zZy0+c3NpZC5kYXRhLmxlbik7CisKKwkvKiBFbmFibGUgdGhlIE1BQyBwb3J0IGlmIGl0J3Mgbm90IGFscmVhZHkgZW5hYmxlZCAgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsICZ3b3JkKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoImdldGNvbmZpZyhQT1JUU1RBVFVTKSBmYWlsZWQuICIKKwkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KKwlpZiAod29yZCA9PSBIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQpIHsKKwkJVUlOVDE2IHdvcmRidWZbMTddOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogQ29uc3RydWN0IGEgYm9ndXMgU1NJRCBhbmQgYXNzaWduIGl0IHRvIE93blNTSUQgYW5kCisJCSAqIERlc2lyZWRTU0lECisJCSAqLworCQl3b3JkYnVmWzBdID0gaG9zdDJoZmEzODR4XzE2KFdMQU5fU1NJRF9NQVhMRU4pOworCQlnZXRfcmFuZG9tX2J5dGVzKCZ3b3JkYnVmWzFdLCBXTEFOX1NTSURfTUFYTEVOKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJd29yZGJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IE93blNTSUQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkJd29yZGJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJCS8qIGJzc3R5cGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ05GUE9SVFRZUEUuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBpYnNzIG9wdGlvbnMgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MsCisJCQkJSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBDUkVBVEVJQlNTLlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZW5hYmxlKDApIGZhaWxlZC4gIgorCQkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaXN0bXBlbmFibGUgPSAxOworCX0KKworICAgICAgICAvKiBGaWd1cmUgb3V0IG91ciB0aW1lb3V0IGZpcnN0IEt1cywgdGhlbiBIWiAqLworICAgICAgICB0aW1lb3V0ID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbiAqIG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YTsKKwl0aW1lb3V0ID0gKHRpbWVvdXQgKiBIWikvMTAwMDsKKworICAgICAgICAvKiBJc3N1ZSB0aGUgc2NhbiByZXF1ZXN0ICovCisgICAgICAgIGh3LT5zY2FuZmxhZyA9IDA7CisKKwlXTEFOX0hFWF9EVU1QKDUsImhzY2FucmVxIiwgJnNjYW5yZXEsIHNpemVvZihzY2FucmVxKSk7CisKKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisgICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9IT1NUU0NBTiwgJnNjYW5yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90KSk7CisgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoU0NBTlJFUVVFU1QpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNsZWVwIHVudGlsIGluZm8gZnJhbWUgYXJyaXZlcyAqLworICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChody0+Y21kcSwgaHctPnNjYW5mbGFnLCB0aW1lb3V0KTsKKworCW1zZy0+bnVtYnNzLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlpZiAoaHctPnNjYW5mbGFnID09IC0xKQorCQlody0+c2NhbmZsYWcgPSAwOworCisJbXNnLT5udW1ic3MuZGF0YSA9IGh3LT5zY2FuZmxhZzsKKworICAgICAgICBody0+c2NhbmZsYWcgPSAwOworCisJLyogRGlzYWJsZSBwb3J0IGlmIHdlIHRlbXBvcmFyaWx5IGVuYWJsZWQgaXQuICovCisJaWYgKGlzdG1wZW5hYmxlKSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiZHJ2cl9kaXNhYmxlKDApIGZhaWxlZC4gIgorCQkJCQkicmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKiByZXN0b3JlIG9yaWdpbmFsIHJvYW1pbmcgbW9kZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCisJCQkJCSAgcm9hbWluZ21vZGUpOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgZXhpdDoKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cworKgorKiBSZXRyaWV2ZSB0aGUgQlNTIGRlc2NyaXB0aW9uIGZvciBvbmUgb2YgdGhlIEJTU3MgaWRlbnRpZmllZCBpbgorKiBhIHNjYW4uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgICAgICAgKnJlcTsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90ICppdGVtID0gTlVMTDsKKworCWludCBjb3VudDsKKworCURCRkVOVEVSOworCisgICAgICAgIHJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKKworCXJlcS0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwlpZiAoaHctPmFwKSB7CisJCXJlc3VsdCA9IDE7CisJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoISBody0+c2NhbnJlc3VsdHMpIHsKKwkJV0xBTl9MT0dfRVJST1IoImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CisJCXJlc3VsdCA9IDI7CisJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJZ290byBleGl0OworCX0KKworICAgICAgICBjb3VudCA9IChody0+c2NhbnJlc3VsdHMtPmZyYW1lbGVuIC0gMykgLyAzMjsKKwlpZiAoY291bnQgPiAzMikgIGNvdW50ID0gMzI7CisKKwlpZiAocmVxLT5ic3NpbmRleC5kYXRhID49IGNvdW50KSB7CisJCVdMQU5fTE9HX0RFQlVHKDAsICJyZXF1ZXN0ZWQgaW5kZXggKCVkKSBvdXQgb2YgcmFuZ2UgKCVkKVxuIiwKKwkJCQlyZXEtPmJzc2luZGV4LmRhdGEsIGNvdW50KTsKKwkJcmVzdWx0ID0gMjsKKwkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlnb3RvIGV4aXQ7CisJfQorCisJaXRlbSA9ICYoaHctPnNjYW5yZXN1bHRzLT5pbmZvLmhzY2FucmVzdWx0LnJlc3VsdFtyZXEtPmJzc2luZGV4LmRhdGFdKTsKKwkvKiBzaWduYWwgYW5kIG5vaXNlICovCisJcmVxLT5zaWduYWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+c2lnbmFsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+c2wpOworCXJlcS0+bm9pc2UuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5hbmwpOworCisJLyogQlNTSUQgKi8KKwlyZXEtPmJzc2lkLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmJzc2lkLmRhdGEubGVuID0gV0xBTl9CU1NJRF9MRU47CisJbWVtY3B5KHJlcS0+YnNzaWQuZGF0YS5kYXRhLCBpdGVtLT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCisJLyogU1NJRCAqLworCXJlcS0+c3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5zc2lkLmRhdGEubGVuID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNzaWQubGVuKTsKKwltZW1jcHkocmVxLT5zc2lkLmRhdGEuZGF0YSwgaXRlbS0+c3NpZC5kYXRhLCByZXEtPnNzaWQuZGF0YS5sZW4pOworCisJLyogc3VwcG9ydGVkIHJhdGVzICovCisgICAgICAgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwIDsgY291bnQrKykKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+c3VwcHJhdGVzW2NvdW50XSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNkZWZpbmUgUkVRQkFTSUNSQVRFKE4pIFwKKwlpZiAoKGNvdW50ID49IE4pICYmIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKGl0ZW0tPnN1cHByYXRlc1soTiktMV0pKSB7IFwKKwkJcmVxLT5iYXNpY3JhdGUgIyMgTiAuZGF0YSA9IGl0ZW0tPnN1cHByYXRlc1soTiktMV07IFwKKwkJcmVxLT5iYXNpY3JhdGUgIyMgTiAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfQorCisJUkVRQkFTSUNSQVRFKDEpOworCVJFUUJBU0lDUkFURSgyKTsKKwlSRVFCQVNJQ1JBVEUoMyk7CisJUkVRQkFTSUNSQVRFKDQpOworCVJFUUJBU0lDUkFURSg1KTsKKwlSRVFCQVNJQ1JBVEUoNik7CisJUkVRQkFTSUNSQVRFKDcpOworCVJFUUJBU0lDUkFURSg4KTsKKworI2RlZmluZSBSRVFTVVBQUkFURShOKSBcCisJaWYgKGNvdW50ID49IE4pIHsgXAorCQlyZXEtPnN1cHByYXRlICMjIE4gLmRhdGEgPSBpdGVtLT5zdXBwcmF0ZXNbKE4pLTFdOyBcCisJCXJlcS0+c3VwcHJhdGUgIyMgTiAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfQorCisJUkVRU1VQUFJBVEUoMSk7CisJUkVRU1VQUFJBVEUoMik7CisJUkVRU1VQUFJBVEUoMyk7CisJUkVRU1VQUFJBVEUoNCk7CisJUkVRU1VQUFJBVEUoNSk7CisJUkVRU1VQUFJBVEUoNik7CisJUkVRU1VQUFJBVEUoNyk7CisJUkVRU1VQUFJBVEUoOCk7CisKKwkvKiBiZWFjb24gcGVyaW9kICovCisJcmVxLT5iZWFjb25wZXJpb2Quc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+YmVhY29ucGVyaW9kLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YmNuaW50KTsKKworCS8qIHRpbWVzdGFtcHMgKi8KKwlyZXEtPnRpbWVzdGFtcC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT50aW1lc3RhbXAuZGF0YSA9IGppZmZpZXM7CisJcmVxLT5sb2NhbHRpbWUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+bG9jYWx0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJLyogYXRpbSB3aW5kb3cgKi8KKwlyZXEtPmlic3NhdGltd2luZG93LnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmlic3NhdGltd2luZG93LmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YXRpbSk7CisKKwkvKiBDaGFubmVsICovCisJcmVxLT5kc2NoYW5uZWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+ZHNjaGFubmVsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+Y2hpZCk7CisKKwkvKiBjYXBpbmZvIGJpdHMgKi8KKwljb3VudCA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5jYXBpbmZvKTsKKworCS8qIHByaXZhY3kgZmxhZyAqLworCXJlcS0+cHJpdmFjeS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5wcml2YWN5LmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1koY291bnQpOworCisJLyogY2Zwb2xsYWJsZSAqLworCXJlcS0+Y2Zwb2xsYWJsZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5jZnBvbGxhYmxlLmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUoY291bnQpOworCisJLyogY2Zwb2xscmVxICovCisJcmVxLT5jZnBvbGxyZXEuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+Y2Zwb2xscmVxLmRhdGEgPSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShjb3VudCk7CisKKwkvKiBic3N0eXBlICovCisJcmVxLT5ic3N0eXBlLnN0YXR1cyA9ICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5ic3N0eXBlLmRhdGEgPSAoV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19FU1MoY291bnQpKSA/CisJCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6CisJCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKKworCS8vIGl0ZW0tPnByb2JlcmVzcF9yYXRlCisvKgorCXJlcS0+Zmhkd2VsbHRpbWUKKwlyZXEtPmZoaG9wc2V0CisJcmVxLT5maGhvcHBhdHRlcm4KKwlyZXEtPmZoaG9waW5kZXgKKyAgICAgICAgcmVxLT5jZnBkdXJyZW1haW5pbmcKKyovCisKKwlyZXN1bHQgPSAwOworCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9qb2luCisqCisqIEpvaW4gYSBCU1Mgd2hvc2UgQlNTIGRlc2NyaXB0aW9uIHdhcyBwcmV2aW91c2x5IG9idGFpbmVkIHdpdGgKKyogYSBzY2FuLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9qb2luX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogSW1wbGVtZW50IGFmdGVyIHNjYW4gKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgYnkgQVBzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3AyX2pvaW4KKyoKKyogSm9pbiBhIHNwZWNpZmljIEJTUworKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcDJfam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9qb2luX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDE2CQkJcmVnOworCXA4MDIxMXBzdHJkX3QJCSpwc3RyOworCVVJTlQ4CQkJYnl0ZWJ1ZlsyNTZdOworCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7CisgICAgICAgIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90CWpvaW5yZXE7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCQkvKioqIFNUQVRJT04gKioqLworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwkJLyogZXNzIHBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgUG9ydCBUeXBlXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogU2V0IHRoZSBhdXRoIHR5cGUgKi8KKwkJaWYgKCBtc2ctPmF1dGh0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleSApIHsKKwkJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCQl9IGVsc2UgeworCQkJcmVnID0gSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIHJlZyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQXV0aGVudGljYXRpb25cbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBUdXJuIG9mZiBhbGwgcm9hbWluZyAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAzKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIFR1cm4gb2ZmIFJvYW1pbmdcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBCYXNpYyByYXRlcyAqLworICAgICAgICAgICAgICAgIHJlZyA9IDA7CisJCWlmICggbXNnLT5iYXNpY3JhdGUxLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTMuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTYuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOworCQl9CisJCWlmKCByZWcgPT0gMCkKKwkJCSByZWcgPSAweDAzOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHJlZyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmFzaWNyYXRlcz0lZC5cbiIsIHJlZyk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIE9wZXJhdGlvbmFsIHJhdGVzIChzdXBwcmF0ZXMgYW5kIHR4cmF0ZWNvbnRyb2wpICovCisJCXJlZyA9IDA7CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUxLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTMuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTYuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOworCQl9CisJCWlmKCByZWcgPT0gMCkKKwkJCSByZWcgPSAweDBmOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgcmVnKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCByZWcpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCByZWcpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHR4cmF0ZXM9JWQuXG4iLCByZWcpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIHNzaWQgKi8KKwkJbWVtc2V0KGJ5dGVidWYsIDAsIDI1Nik7CisJCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoCisJCQlodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IFNTSURcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZW5hYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBGaWxsIGluIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJam9pbnJlcS5jaGFubmVsID0gbXNnLT5jaGFubmVsLmRhdGE7CisJCW1lbWNweSggam9pbnJlcS5ic3NpZCwgKCh1bnNpZ25lZCBjaGFyICopICZtc2ctPmJzc2lkLmRhdGEpICsgMSwgV0xBTl9CU1NJRF9MRU4pOworCQlody0+am9pbnJlcSA9IGpvaW5yZXE7CisJCWh3LT5qb2luX2FwID0gMTsKKworCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworICAgICAgICAgICAgICAgIGlmKHJlc3VsdCAhPSAwKSB7CisJCQlXTEFOX0xPR19FUlJPUigiSm9pbiByZXF1ZXN0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgYnkgQVBzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisgICAgICAgIGdvdG8gZG9uZTsKK2ZhaWxlZDoKKwlXTEFOX0xPR19ERUJVRygxLCAiRmFpbGVkIHRvIHNldCBhIGNvbmZpZyBvcHRpb24sIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisKK2RvbmU6CisgICAgICAgIHJlc3VsdCA9IDA7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV0aGVudGljYXRlCisqCisqIFN0YXRpb24gc2hvdWxkIGJlIGJlZ2luIGFuIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV0aGVudGljYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IERlY2lkZSBob3cgd2UncmUgZ29pbmcgdG8gaGFuZGxlIHRoaXMgb25lIHcvIFByaXNtMiAqLworCQkvKiAgICAgICBJdCBjb3VsZCBiZSBlbnRlcnRhaW5pbmcgc2luY2UgUHJpc20yIGRvZXNuJ3QgaGF2ZSAgKi8KKwkJLyogICAgICAgYW4gZXhwbGljaXQgd2F5IHRvIGNvbnRyb2wgdGhpcyAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0gZWxzZSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJCS8qIE5ldmVyIHN1cHBvcnRlZCBieSBBUHMgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUKKyoKKyogU2VuZCBhIGRlYXV0aGVudGljYXRlIG5vdGlmaWNhdGlvbi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2RlYXV0aGVudGljYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogRGVjaWRlIGhvdyB3ZSdyZSBnb2luZyB0byBoYW5kbGUgdGhpcyBvbmUgdy8gUHJpc20yICovCisJCS8qICAgICAgIEl0IGNvdWxkIGJlIGVudGVydGFpbmluZyBzaW5jZSBQcmlzbTIgZG9lc24ndCBoYXZlICAqLworCQkvKiAgICAgICBhbiBleHBsaWNpdCB3YXkgdG8gY29udHJvbCB0aGlzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisJCWhmYTM4NHhfZHJ2cl9oYW5kb3ZlcihodywgbXNnLT5wZWVyc3RhYWRkcmVzcy5kYXRhLmRhdGEpOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9hc3NvY2lhdGUKKyoKKyogQXNzb2NpYXRlIHdpdGggYW4gRVNTLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJcDgwMjExbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisjaWYgMAorCQkvKiBTZXQgdGhlIFR4UmF0ZXMgKi8KKwkJcmVnID0gMHgwMDBmOworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIHJlZyk7CisjZW5kaWYKKworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCS8qIGVzcyBwb3J0ICovCisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDEpOworCisJCS8qIEVuYWJsZSB0aGUgUG9ydCAqLworCQloZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKworCQkvKiBTZXQgdGhlIHJlc3VsdGNvZGUgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCX0gZWxzZSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJCS8qIE5ldmVyIHN1cHBvcnRlZCBvbiBBUCAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9yZWFzc29jaWF0ZQorKgorKiBSZW5ldyBhc3NvY2lhdGlvbiBiZWNhdXNlIG9mIGEgQlNTIGNoYW5nZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3JlYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogTm90IHN1cHBvcnRlZCB5ZXQuLi5ub3Qgc3VyZSBob3cgd2UncmUgZ29pbmcgdG8gZG8gaXQgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgb24gQVAgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZGlzYXNzb2NpYXRlCisqCisqIFNlbmQgYSBkaXNhc3NvY2lhdGlvbiBub3RpZmljYXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9kaXNhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogVE9ETzogTm90IHN1cHBvcnRlZCB5ZXQuLi5ub3Qgc3VyZSBob3cgdG8gZG8gaXQgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKwkJaGZhMzg0eF9kcnZyX2hhbmRvdmVyKGh3LCBtc2ctPnBlZXJzdGFhZGRyZXNzLmRhdGEuZGF0YSk7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3Jlc2V0CisqCisqIFJlc2V0IHRoZSBNQUMgYW5kIE1TRC4gIFRoZSBwODAyMTEgbGF5ZXIgaGFzIGl0J3Mgb3duIGhhbmRsaW5nCisqIHRoYXQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgorKiBQcm9jZWR1cmU6CisqICAgLSBkaXNhYmxlIHN5c3RlbSBpbnRlcnJ1cHRzID8/CisqICAgLSBkaXNhYmxlIE1BQyBpbnRlcnJ1cHRzCisqICAgLSByZXN0b3JlIHN5c3RlbSBpbnRlcnJ1cHRzCisqICAgLSBpc3N1ZSB0aGUgTUFDIGluaXRpYWxpemUgY29tbWFuZAorKiAgIC0gY2xlYXIgYW55IE1TRCBsZXZlbCBzdGF0ZSAoaW5jbHVkaW5nIHRpbWVycywgcXVldWVkIGV2ZW50cywKKyogICAgIGV0Yy4pLiAgTm90ZSB0aGF0IGlmIHdlJ3JlIHJlbW92aW5nIHRpbWVyJ2QvcXVldWUgZXZlbnRzLCB3ZSBtYXkKKyogICAgIG5lZWQgdG8gaGF2ZSByZW1haW5lZCBpbiB0aGUgc3lzdGVtIGludGVycnVwdCBkaXNhYmxlZCBzdGF0ZS4KKyogICAgIFdlIHNob3VsZCBiZSBsZWZ0IGluIHRoZSBzYW1lIHN0YXRlIHRoYXQgd2UncmUgaW4gZm9sbG93aW5nCisqICAgICBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyLCBNQVkgQkUgTlVMTCEgZm9yIGEgZHJpdmVyIGxvY2FsCisqCQkJY2FsbC4KKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkLCBjb21tb25seSB3bGFuY3RsLCBidXQgbWlnaHQgYmUgcm1tb2QvcGNpX2Nsb3NlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldF90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJLyoKKwkgKiBUaGlzIGlzIHN1cHBvcnRlZCBvbiBib3RoIEFQIGFuZCBTVEEgYW5kIGl0J3Mgbm90IGFsbG93ZWQKKwkgKiB0byBmYWlsLgorCSAqLworCWlmICggbXNncCApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJV0xBTl9MT0dfSU5GTygiZG90MTFyZXFfcmVzZXQ6IHRoZSBtYWNhZGRyZXNzIGFuZCAiCisJCQkic2V0ZGVmYXVsdG1pYiBhcmd1bWVudHMgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC5cbiIpOworCX0KKworCS8qCisJICogSWYgd2UgZ290IHRoaXMgZmFyLCB0aGUgTVNEIG11c3QgYmUgaW4gdGhlIE1TRFJVTk5JTkcgc3RhdGUKKwkgKiB0aGVyZWZvcmUsIHdlIG11c3Qgc3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBody9NQUMgY29tYm8uCisJICovCisJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJkb3QxMXJlcV9yZXNldDogSW5pdGlhbGl6ZSBjb21tYW5kIGZhaWxlZCwiCisJCQkJIiBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuIGZyb20gaGVyZS5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3N0YXJ0CisqCisqIFN0YXJ0IGEgQlNTLiAgQW55IHN0YXRpb24gY2FuIGRvIHRoaXMgZm9yIElCU1MsIG9ubHkgQVAgZm9yIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3QJKm1zZyA9IG1zZ3A7CisKKwlwODAyMTFwc3RyZF90CQkqcHN0cjsKKwlVSU5UOAkJCWJ5dGVidWZbODBdOworCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7CisJaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdAkqcGNmaW5mbyA9IChoZmEzODR4X1BDRkluZm9fZGF0YV90KilieXRlYnVmOworCVVJTlQxNgkJCXdvcmQ7CisJREJGRU5URVI7CisKKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkvKiBTZXQgdGhlIFNTSUQgKi8KKwltZW1jcHkoJndsYW5kZXYtPnNzaWQsICZtc2ctPnNzaWQuZGF0YSwgc2l6ZW9mKG1zZy0+c3NpZC5kYXRhKSk7CisKKwlpZiAoIWh3LT5hcCkgeworCQkvKioqIEFESE9DIElCU1MgKioqLworCQkvKiBzZWUgaWYgY3VycmVudCBmL3cgaXMgbGVzcyB0aGFuIDhjMyAqLworCQlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKwkJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigwLDgsMykpIHsKKwkJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLworCQkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKworICAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKwkJLyogU2V0IHRoZSBSRVFVSVJFRCBjb25maWcgaXRlbXMgKi8KKwkJLyogU1NJRCAqLworCQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKKwkJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mT3duU1NJRFxuIik7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBDbmZEZXNpcmVkU1NJRFxuIik7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIGJzc3R5cGUgLSB3ZSB1c2UgdGhlIGRlZmF1bHQgaW4gdGhlIGFwIGZpcm13YXJlICovCisJCS8qIElCU1MgcG9ydCAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwKTsKKworCQkvKiBiZWFjb24gcGVyaW9kICovCisJCXdvcmQgPSBtc2ctPmJlYWNvbnBlcmlvZC5kYXRhOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFQQkNOSU5ULCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiZWFjb24gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIGRzY2hhbm5lbCAqLworCQl3b3JkID0gbXNnLT5kc2NoYW5uZWwuZGF0YTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBjaGFubmVsPSVkLlxuIiwgd29yZCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQkvKiBCYXNpYyByYXRlcyAqLworCQl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTEuZGF0YSk7CisJCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU0LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU3LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmFzaWNyYXRlcz0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBPcGVyYXRpb25hbCByYXRlcyAoc3VwcHJhdGVzIGFuZCB0eHJhdGVjb250cm9sKSAqLworCQl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTEuZGF0YSk7CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU0LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU3LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKyAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdHhyYXRlcz0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIG1hY21vZGUgc28gdGhlIGZyYW1lIHNldHVwIGNvZGUga25vd3Mgd2hhdCB0byBkbyAqLworCQlpZiAoIG1zZy0+YnNzdHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudCApIHsKKwkJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfSUJTU19TVEE7CisJCQkvKiBsZXRzIGV4dGVuZCB0aGUgZGF0YSBsZW5ndGggYSBiaXQgKi8KKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMjMwNCk7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIFZhbGlkYXRlIHRoZSBjb21tYW5kLCBpZiBCU1N0eXBlPWluZnJhIGlzIHRoZSB0ZXJ0aWFyeSBsb2FkZWQ/ICovCisJaWYgKCBtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJBUCBkcml2ZXIgY2Fubm90IGNyZWF0ZSBJQlNTLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0gZWxzZSBpZiAoIGh3LT5jYXBfc3VwX3N0YS5pZCAhPSA1KSB7CisJCVdMQU5fTE9HX0VSUk9SKCJBUCBkcml2ZXIgZmFpbGVkIHRvIGRldGVjdCBBUCBmaXJtd2FyZS5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBTZXQgdGhlIFJFUVVJUkVEIGNvbmZpZyBpdGVtcyAqLworCS8qIFNTSUQgKi8KKwlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBTU0lELCByZXN1bHQ9MHglMDR4XG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBic3N0eXBlIC0gd2UgdXNlIHRoZSBkZWZhdWx0IGluIHRoZSBhcCBmaXJtd2FyZSAqLworCisJLyogYmVhY29uIHBlcmlvZCAqLworCXdvcmQgPSBtc2ctPmJlYWNvbnBlcmlvZC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVBCQ05JTlQsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiZWFjb24gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGRzY2hhbm5lbCAqLworCXdvcmQgPSBtc2ctPmRzY2hhbm5lbC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIEJhc2ljIHJhdGVzICovCisJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUxLmRhdGEpOworCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTIuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTMuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTQuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTUuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTYuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTcuZGF0YSk7CisJfQorCWlmICggbXNnLT5iYXNpY3JhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTguZGF0YSk7CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogT3BlcmF0aW9uYWwgcmF0ZXMgKHN1cHByYXRlcyBhbmQgdHhyYXRlY29udHJvbCkgKi8KKwl3b3JkID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTEuZGF0YSk7CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTQuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTYuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTcuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKKwl9CisJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5kYXRhKTsKKwl9CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBzdXBwcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGlic3NhdGltd2luZG93ICovCisJaWYgKG1zZy0+aWJzc2F0aW13aW5kb3cuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQlXTEFOX0xPR19JTkZPKCJwcmlzbTJtZ210X3N0YXJ0OiBhdGltd2luZG93IG5vdCB1c2VkIGluICIKKwkJCSAgICAgICAiSW5mcmFzdHJ1Y3R1cmUgbW9kZSwgaWdub3JlZC5cbiIpOworCX0KKworCS8qIERUSU0gcGVyaW9kICovCisJd29yZCA9IG1zZy0+ZHRpbXBlcmlvZC5kYXRhOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUiwgd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGR0aW0gcGVyaW9kPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIHByb2JlZGVsYXkgKi8KKwlpZiAobXNnLT5wcm9iZWRlbGF5LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJV0xBTl9MT0dfSU5GTygicHJpc20ybWdtdF9zdGFydDogcHJvYmVkZWxheSBub3QgIgorCQkJICAgICAgICJzdXBwb3J0ZWQgaW4gcHJpc20yLCBpZ25vcmVkLlxuIik7CisJfQorCisJLyogY2Zwb2xsYWJsZSwgY2Zwb2xscmVxLCBjZnBwZXJpb2QsIGNmcG1heGR1cmF0aW9uICovCisJaWYgKG1zZy0+Y2Zwb2xsYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSAmJgorCSAgICBtc2ctPmNmcG9sbHJlcS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKKwkJV0xBTl9MT0dfRVJST1IoImNmcG9sbGFibGU9Y2Zwb2xscmVxPXRydWUgaXMgaWxsZWdhbC5cbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogcmVhZCB0aGUgUENGSW5mbyBhbmQgdXBkYXRlICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLAorCQkJCQlwY2ZpbmZvLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfSU5GTygicHJpc20ybWdtdF9zdGFydDogcmVhZChwY2ZpbmZvKSBmYWlsZWQsICIKKwkJCQkiYXNzdW1lIGl0J3MgIgorCQkJCSJub3Qgc3VwcG9ydGVkLCBwY2Ygc2V0dGluZ3MgaWdub3JlZC5cbiIpOworCQlnb3RvIHBjZl9za2lwOworCX0KKwlpZiAoKG1zZy0+Y2Zwb2xsYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UgJiYKKwkgICAgIG1zZy0+Y2Zwb2xscmVxLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF9mYWxzZSkgKSB7CisJICAgIAlwY2ZpbmZvLT5NZWRpdW1PY2N1cGFuY3lMaW1pdCA9IDA7CisJCXBjZmluZm8tPkNGUFBlcmlvZCA9IDA7CisJCXBjZmluZm8tPkNGUE1heER1cmF0aW9uID0gMDsKKwkJcGNmaW5mby0+Q0ZQRmxhZ3MgJj0gaG9zdDJoZmEzODR4XzE2KChVSU5UMTYpfkJJVDApOworCisJCWlmICggbXNnLT5jZnBwZXJpb2Quc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayB8fAorCQkgICAgIG1zZy0+Y2ZwbWF4ZHVyYXRpb24uc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIlNldHRpbmcgY2ZwcGVyaW9kIG9yIGNmcG1heGR1cmF0aW9uIHdoZW4gIgorCQkJCSJjZnBvbGxhYmxlIGFuZCBjZnJlcSBhcmUgZmFsc2UgaXMgcG9pbnRsZXNzLlxuIik7CisJCX0KKwl9CisJaWYgKChtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgfHwKKwkgICAgIG1zZy0+Y2Zwb2xscmVxLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSApIHsKKwkJaWYgKCBtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpIHsKKwkJCXBjZmluZm8tPkNGUEZsYWdzIHw9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KUJJVDApOworCQl9CisKKwkJaWYgKCBtc2ctPmNmcHBlcmlvZC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CisJCQlwY2ZpbmZvLT5DRlBQZXJpb2QgPSBtc2ctPmNmcHBlcmlvZC5kYXRhOworCQkJcGNmaW5mby0+Q0ZQUGVyaW9kID0gaG9zdDJoZmEzODR4XzE2KHBjZmluZm8tPkNGUFBlcmlvZCk7CisJCX0KKworCQlpZiAoIG1zZy0+Y2ZwbWF4ZHVyYXRpb24uc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQkJcGNmaW5mby0+Q0ZQTWF4RHVyYXRpb24gPSBtc2ctPmNmcG1heGR1cmF0aW9uLmRhdGE7CisJCQlwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbiA9IGhvc3QyaGZhMzg0eF8xNihwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbik7CisJCQlwY2ZpbmZvLT5NZWRpdW1PY2N1cGFuY3lMaW1pdCA9IHBjZmluZm8tPkNGUE1heER1cmF0aW9uOworCQl9CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywKKwkJCQkJcGNmaW5mbywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJ3cml0ZShwY2ZpbmZvKSBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCitwY2Zfc2tpcDoKKwkvKiBTZXQgdGhlIG1hY21vZGUgc28gdGhlIGZyYW1lIHNldHVwIGNvZGUga25vd3Mgd2hhdCB0byBkbyAqLworCWlmICggbXNnLT5ic3N0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlICkgeworCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKwkJLyogbGV0cyBleHRlbmQgdGhlIGRhdGEgbGVuZ3RoIGEgYml0ICovCisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwgMjMwNCk7CisJfQorCisJLyogU2V0IHRoZSBCU1NJRCB0byB0aGUgc2FtZSBhcyBvdXIgTUFDICovCisJbWVtY3B5KCB3bGFuZGV2LT5ic3NpZCwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9CU1NJRF9MRU4pOworCisJLyogRW5hYmxlIHRoZSBQb3J0ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwlnb3RvIGRvbmU7CitmYWlsZWQ6CisJV0xBTl9MT0dfREVCVUcoMSwgIkZhaWxlZCB0byBzZXQgYSBjb25maWcgb3B0aW9uLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCitkb25lOgorCXJlc3VsdCA9IDA7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZW5hYmxlCisqCisqIFN0YXJ0IGEgQlNTLiAgQW55IHN0YXRpb24gY2FuIGRvIHRoaXMgZm9yIElCU1MsIG9ubHkgQVAgZm9yIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX2VuYWJsZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIElzIHRoZSB0ZXJ0aWFyeSBsb2FkZWQ/ICovCisJaWYgKCBody0+Y2FwX3N1cF9zdGEuaWQgIT0gNSkgeworCQlXTEFOX0xPR19FUlJPUigiQVAgZHJpdmVyIGZhaWxlZCB0byBkZXRlY3QgQVAgZmlybXdhcmUuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogU2V0IHRoZSBtYWNtb2RlIHNvIHRoZSBmcmFtZSBzZXR1cCBjb2RlIGtub3dzIHdoYXQgdG8gZG8gKi8KKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKKworCS8qIFNldCB0aGUgQlNTSUQgdG8gdGhlIHNhbWUgYXMgb3VyIE1BQyAqLworCW1lbWNweSggd2xhbmRldi0+YnNzaWQsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQlNTSURfTEVOKTsKKworCS8qIEVuYWJsZSB0aGUgUG9ydCAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJZ290byBkb25lOworZmFpbGVkOgorCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKworZG9uZToKKwlyZXN1bHQgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3JlYWRwZGEKKyoKKyogQ29sbGVjdCB0aGUgUERBIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QJKm1zZyA9IG1zZ3A7CisJaW50CQkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBjb2xsZWN0aW5nIHRoZSBQREEgd2hlbiBpbiB0aGUgRldMT0FECisJICogc3RhdGUuCisJICovCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJQREEgbWF5IG9ubHkgYmUgcmVhZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwl9IGVsc2UgeworCQkvKiAgQ2FsbCBkcnZyX3JlYWRwZGEoKSwgaXQgaGFuZGxlcyB0aGUgYXV4cG9ydCBlbmFibGUKKwkJICogIGFuZCB2YWxpZGF0aW5nIHRoZSByZXR1cm5lZCBQREEuCisJCSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfcmVhZHBkYSgKKwkJCWh3LAorCQkJbXNnLT5wZGEuZGF0YSwKKwkJCUhGQTM4NHhfUERBX0xFTl9NQVgpOworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKKwkJCQkicmVzdWx0PSVkXG4iLAorCQkJCXJlc3VsdCk7CisKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCURCRkVYSVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2ctPnBkYS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmVhZGNpcworKgorKiBDb2xsZWN0IHRoZSBDSVMgZGF0YSBhbmQgcHV0IGl0IGluIHRoZSBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yZWFkY2lzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkY2lzX3QJKm1zZyA9IG1zZ3A7CisKKwlEQkZFTlRFUjsKKworICAgICAgICBtZW1zZXQobXNnLT5jaXMuZGF0YSwgMCwgc2l6ZW9mKG1zZy0+Y2lzLmRhdGEpKTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NJUywKKwkJCQkJbXNnLT5jaXMuZGF0YSwgSEZBMzg0eF9SSURfQ0lTX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0lORk8oInByaXNtMm1nbXRfcmVhZGNpczogcmVhZChjaXMpIGZhaWxlZC5cbiIpOworCQltc2ctPmNpcy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCisJCX0KKwllbHNlIHsKKwkJbXNnLT5jaXMuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV4cG9ydF9zdGF0ZQorKgorKiBFbmFibGVzL0Rpc2FibGVzIHRoZSBjYXJkJ3MgYXV4aWxpYXJ5IHBvcnQuICBTaG91bGQgYmUgY2FsbGVkCisqIGJlZm9yZSBhbmQgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiBhdXhwb3J0X3JlYWQoKS9hdXhwb3J0X3dyaXRlKCkKKyogY2FsbHMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCXA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlpZiAobXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpIHsKKwkJaWYgKCBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAwKSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworI2Vsc2UgLyogIVVTQiAqLworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCisjZW5kaWYgLyogV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkCisqCisqIENvcGllcyBkYXRhIGZyb20gdGhlIGNhcmQgdXNpbmcgdGhlIGF1eHBvcnQuICBUaGUgYXV4cG9ydCBtdXN0CisqIGhhdmUgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQuICBOb3RlOiB0aGlzIGlzIG5vdCB0aGUgd2F5IHRvCisqIGRvIGRvd25sb2Fkcywgc2VlIHRoZSBbcmFtfGZsYXNoXWRsIGZ1bmN0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfdAkqbXNnID0gbXNncDsKKwlVSU5UMzIJCQlhZGRyOworCVVJTlQzMgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJVUlOVDMyCQkJbWF4bGVuID0gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKTsKKwlEQkZFTlRFUjsKKworCWlmICggaHctPmF1eGVuICkgeworCQlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJCWxlbiA9IG1zZy0+bGVuLmRhdGE7CisJCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOworCQlpZiAoIGxlbiA8PSBtYXhsZW4gKSB7ICAvKiBtYXggcmVhZC93cml0ZSBzaXplICovCisJCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsIGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgYnVmLCBsZW4pOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsIkF0dGVtcHQgdG8gcmVhZCA+IG1heGxlbiBmcm9tIGF1eHBvcnQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJCX0KKworCX0gZWxzZSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJfQorCW1zZy0+ZGF0YS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7CisjZWxzZQorCURCRkVOVEVSOworCisJV0xBTl9MT0dfRVJST1IoInByaXNtMm1nbXRfYXV4cG9ydF9yZWFkOiBOb3Qgc3VwcG9ydGVkIG9uIFVTQi5cbiIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1eHBvcnRfd3JpdGUKKyoKKyogQ29waWVzIGRhdGEgdG8gdGhlIGNhcmQgdXNpbmcgdGhlIGF1eHBvcnQuICBUaGUgYXV4cG9ydCBtdXN0CisqIGhhdmUgcHJldmlvdXNseSBiZWVuIGVuYWJsZWQuICBOb3RlOiB0aGlzIGlzIG5vdCB0aGUgd2F5IHRvCisqIGRvIGRvd25sb2Fkcywgc2VlIHRoZSBbcmFtfGZsYXNoXWRsIGZ1bmN0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV90CSptc2cgPSBtc2dwOworCVVJTlQzMgkJCWFkZHI7CisJVUlOVDMyCQkJbGVuOworCVVJTlQ4KgkJCWJ1ZjsKKwlVSU5UMzIJCQltYXhsZW4gPSBzaXplb2YobXNnLT5kYXRhLmRhdGEpOworCURCRkVOVEVSOworCisJaWYgKCBody0+YXV4ZW4gKSB7CisJCWFkZHIgPSBtc2ctPmFkZHIuZGF0YTsKKwkJbGVuID0gbXNnLT5sZW4uZGF0YTsKKwkJYnVmID0gbXNnLT5kYXRhLmRhdGE7CisJCWlmICggbGVuIDw9IG1heGxlbiApIHsgIC8qIG1heCByZWFkL3dyaXRlIHNpemUgKi8KKwkJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIGFkZHIsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywgYnVmLCBsZW4pOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiQXR0ZW1wdCB0byB3cml0ZSA+IG1heGxlbiBmcm9tIGF1eHBvcnQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJCX0KKworCX0gZWxzZSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJfQorCW1zZy0+ZGF0YS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7CisjZWxzZQorCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJtZ210X2F1eHBvcnRfcmVhZDogTm90IHN1cHBvcnRlZCBvbiBVU0IuXG4iKTsKKwlEQkZFWElUOworCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2xvd19sZXZlbAorKgorKiBQdXRzIHRoZSBjYXJkIGludG8gdGhlIGRlc2lyZWQgdGVzdCBtb2RlLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHdsYW5kZXYgICAgICAgICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgbXNncCAgICAgICAgICAgIHB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgc3VjY2VzcyBhbmQgZG9uZQorKiAgICAgICA8MCAgICAgIHN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKiAgICAgICA+MCAgICAgIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9sb3dfbGV2ZWwod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKyAgICAgICAgcDgwMjExbXNnX3AycmVxX2xvd19sZXZlbF90ICAgICAqbXNnID0gbXNncDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKyAgICAgICAgLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisJY21kLmNtZCA9IChVSU5UMTYpIG1zZy0+Y29tbWFuZC5kYXRhOworCWNtZC5wYXJtMCA9IChVSU5UMTYpIG1zZy0+cGFyYW0wLmRhdGE7CisJY21kLnBhcm0xID0gKFVJTlQxNikgbXNnLT5wYXJhbTEuZGF0YTsKKwljbWQucGFybTIgPSAoVUlOVDE2KSBtc2ctPnBhcmFtMi5kYXRhOworCisgICAgICAgIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaHcsJmNtZCk7CisKKyAgICAgICAgbXNnLT5yZXNwMC5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMDsKKyAgICAgICAgbXNnLT5yZXNwMS5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMTsKKyAgICAgICAgbXNnLT5yZXNwMi5kYXRhID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMjsKKworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQKKyoKKyogUHV0cyB0aGUgY2FyZCBpbnRvIHRoZSBkZXNpcmVkIHRlc3QgbW9kZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfdGVzdF9jb21tYW5kKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3Rlc3RfY29tbWFuZF90CSptc2cgPSBtc2dwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworICAgICAgICBEQkZFTlRFUjsKKworCWNtZC5jbWQgPSAoKFVJTlQxNikgbXNnLT50ZXN0Y29kZS5kYXRhKSA8PCA4IHwgMHgzODsKKwljbWQucGFybTAgPSAoVUlOVDE2KSBtc2ctPnRlc3RwYXJhbS5kYXRhOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworICAgICAgICAvKiBjYWxsIHNvbWUgcm91dGluZSB0byBleGVjdXRlIHRoZSB0ZXN0IGNvbW1hbmQgKi8KKworICAgICAgICBoZmEzODR4X2RydnJfbG93X2xldmVsKGh3LCZjbWQpOworCisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKyAgICAgICAgbXNnLT5zdGF0dXMuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnN0YXR1cy5kYXRhID0gY21kLnJlc3VsdC5zdGF0dXM7CisgICAgICAgIG1zZy0+cmVzcDAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnJlc3AwLmRhdGEgPSBjbWQucmVzdWx0LnJlc3AwOworICAgICAgICBtc2ctPnJlc3AxLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKyAgICAgICAgbXNnLT5yZXNwMS5kYXRhID0gY21kLnJlc3VsdC5yZXNwMTsKKyAgICAgICAgbXNnLT5yZXNwMi5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisgICAgICAgIG1zZy0+cmVzcDIuZGF0YSA9IGNtZC5yZXN1bHQucmVzcDI7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X21taV9yZWFkCisqCisqIFJlYWQgZnJvbSBvbmUgb2YgdGhlIE1NSSByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX21taV9yZWFkX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDMyIHJlc3AgPSAwOworCisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisKKwloZmEzODR4X2RydnJfbW1pX3JlYWQoaHcsIG1zZy0+YWRkci5kYXRhLCAmcmVzcCk7CisKKwkvKiBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyAiYXJjaGl0ZWN0dXJhbGx5IiBjb3JyZWN0LCBidXQgaXQKKyAgICAgICAgICAgaXMgZXhwZWRpZW50LiAqLworCisJbXNnLT52YWx1ZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT52YWx1ZS5kYXRhID0gcmVzcDsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfbW1pX3dyaXRlCisqCisqIFdyaXRlIGEgZGF0YSB2YWx1ZSB0byBvbmUgb2YgdGhlIE1NSSByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X21taV93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGVfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkvKiBjYWxsIHNvbWUgcm91dGluZSB0byBleGVjdXRlIHRoZSB0ZXN0IGNvbW1hbmQgKi8KKworCWhmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaHcsIG1zZy0+YWRkci5kYXRhLCBtc2ctPmRhdGEuZGF0YSk7CisKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmFtZGxfc3RhdGUKKyoKKyogRXN0YWJsaXNoZXMgdGhlIGJlZ2lubmluZy9lbmQgb2YgYSBjYXJkIFJBTSBkb3dubG9hZCBzZXNzaW9uLgorKgorKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSByYW1kbF93cml0ZSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisqIG9uZSBvciBtb3JlIHRpbWVzIGJldHdlZW4gdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScgY2FsbHMgdG8KKyogdGhpcyBmdW5jdGlvbi4KKyoKKyogTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGEgbWFjIGNvbW0gcG9ydAorKiAgICAgICBpcyBhY3RpdmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJInJhbWRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSovCisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCWlmICAoIG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlICkgeworCQlpZiAoIGhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaHcsIG1zZy0+ZXhlYWRkci5kYXRhKSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaHcpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmFtZGxfd3JpdGUKKyoKKyogV3JpdGVzIGEgYnVmZmVyIHRvIHRoZSBjYXJkIFJBTSB1c2luZyB0aGUgZG93bmxvYWQgc3RhdGUuICBUaGlzCisqIGlzIGZvciB3cml0aW5nIGNvZGUgdG8gY2FyZCBSQU0uICBUbyBqdXN0IHJlYWQgb3Igd3JpdGUgcmF3IGRhdGEKKyogdXNlIHRoZSBhdXggZnVuY3Rpb25zLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90CSptc2cgPSBtc2dwOworCVVJTlQzMgkJCWFkZHI7CisJVUlOVDMyCQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlEQkZFTlRFUjsKKworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkicmFtZGxfd3JpdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlEQkZFWElUOworCQlyZXR1cm4gMDsKKwl9CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KKwlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCXJldHVybiAwOworCX0KKwkvKiBjYWxsIHRoZSBoZmEzODR4IGZ1bmN0aW9uIHRvIGRvIHRoZSB3cml0ZSAqLworCWFkZHIgPSBtc2ctPmFkZHIuZGF0YTsKKwlsZW4gPSBtc2ctPmxlbi5kYXRhOworCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOworCWlmICggaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGh3LCBhZGRyLCBidWYsIGxlbikgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisKKwl9CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZQorKgorKiBFc3RhYmxpc2hlcyB0aGUgYmVnaW5uaW5nL2VuZCBvZiBhIGNhcmQgRmxhc2ggZG93bmxvYWQgc2Vzc2lvbi4KKyoKKyogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmxhc2hkbF93cml0ZSgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisqIG9uZSBvciBtb3JlIHRpbWVzIGJldHdlZW4gdGhlICdlbmFibGUnIGFuZCAnZGlzYWJsZScgY2FsbHMgdG8KKyogdGhpcyBmdW5jdGlvbi4KKyoKKyogTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGEgbWFjIGNvbW0gcG9ydAorKiAgICAgICBpcyBhY3RpdmUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlEQkZFWElUOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAorCSoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCisJKi8KKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJaWYgICggbXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7CisJCWlmICggaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGh3KSApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQl9CisJfSBlbHNlIHsKKwkJaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShodyk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCS8qIE5PVEU6IEF0IHRoaXMgcG9pbnQsIHRoZSBNQUMgaXMgaW4gdGhlIHBvc3QtcmVzZXQKKwkJICogc3RhdGUgYW5kIHRoZSBkcml2ZXIgaXMgaW4gdGhlIGZ3bG9hZCBzdGF0ZS4KKwkJICogV2UgbmVlZCB0byBnZXQgdGhlIE1BQyBiYWNrIGludG8gdGhlIGZ3bG9hZAorCQkgKiBzdGF0ZS4gIFRvIGRvIHRoaXMsIHdlIHNldCB0aGUgbnNkc3RhdGUgdG8gSFdQUkVTRU5UCisJCSAqIGFuZCB0aGVuIGNhbGwgdGhlIGlmc3RhdGUgZnVuY3Rpb24gdG8gcmVkbyBldmVyeXRoaW5nCisJCSAqIHRoYXQgZ290IHVzIGludG8gdGhlIGZ3bG9hZCBzdGF0ZS4KKwkJICovCisJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQlyZXN1bHQgPSBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkKTsKKwkJaWYgKHJlc3VsdCAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCQkJV0xBTl9MT0dfRVJST1IoInByaXNtMnN0YV9pZnN0YXRlKGZ3bG9hZCkgZmFpbGVkLCIKKwkJCQkiUDgwMjExRU5VTV9yZXN1bHRjb2RlPSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJcmVzdWx0ID0gLTE7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUKKyoKKyoKKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDMyCQkJYWRkcjsKKwlVSU5UMzIJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSovCisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KKwlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlyZXR1cm4gMDsKKwl9CisJLyogY2FsbCB0aGUgaGZhMzg0eCBmdW5jdGlvbiB0byBkbyB0aGUgd3JpdGUgKi8KKwlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJbGVuID0gbXNnLT5sZW4uZGF0YTsKKwlidWYgPSBtc2ctPmRhdGEuZGF0YTsKKwlpZiAoIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGh3LCBhZGRyLCBidWYsIGxlbikgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisKKwl9CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZHVtcF9zdGF0ZQorKgorKiBEdW1wcyB0aGUgZHJpdmVyJ3MgYW5kIGhhcmR3YXJlJ3MgY3VycmVudCBzdGF0ZSB2aWEgdGhlIGtlcm5lbAorKiBsb2cgYXQgS0VSTl9OT1RJQ0UgbGV2ZWwuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCXA4MDIxMW1zZ19wMnJlcV9kdW1wX3N0YXRlX3QJKm1zZyA9IG1zZ3A7CisJaW50CQkJCXJlc3VsdCA9IDA7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCQlhdXhidWZbMTVdOworCURCRkVOVEVSOworCisJV0xBTl9MT0dfTk9USUNFKCJwcmlzbTIgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdGF0ZTpcbiIpOworCWlmICAoIChyZXN1bHQgPSBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAwKSkgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJhdXhfZW5hYmxlIGZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LAorCQkweDAxZTIsCisJCUhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJYXV4YnVmLAorCQlzaXplb2YoYXV4YnVmKSk7CisJaGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaHcpOworCVdMQU5fTE9HX05PVElDRSgiICBjbWFjOiBGcmVlQmxvY2tzPSVkXG4iLCBhdXhidWZbNV0pOworCVdMQU5fTE9HX05PVElDRSgiICBjbWFjOiBJbnRFbj0weCUwMnggRXZTdGF0PTB4JTAyeFxuIiwKKwkJaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfSU5URU4pLAorCQloZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpKTsKKworCSNpZmRlZiBVU0VfRklEX1NUQUNLCisJV0xBTl9MT0dfTk9USUNFKCIgIGRydnI6IHR4ZmlkX3RvcD0lZCBzdGFja3NpemU9JWRcbiIsCisJCWh3LT50eGZpZF90b3AsSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWCk7CisJI2Vsc2UKKwlXTEFOX0xPR19OT1RJQ0UoIiAgZHJ2cjogdHhmaWRfaGVhZD0lZCB0eGZpZF90YWlsPSVkIHR4ZmlkX049JWRcbiIsCisJCWh3LT50eGZpZF9oZWFkLCBody0+dHhmaWRfdGFpbCwgaHctPnR4ZmlkX04pOworCSNlbmRpZgorCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisjZWxzZSAvKiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpICovCisKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwlnb3RvIGZhaWxlZDsKKworI2VuZGlmIC8qIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikgKi8KKworZmFpbGVkOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvCisqCisqIElzc3VlcyBhIENoYW5uZWxJbmZvUmVxdWVzdC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3QJKm1zZz1tc2dwOworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50CQkJCXJlc3VsdCwgaSwgbj0wOworCVVJTlQxNgkJCQljaGFubmVsX21hc2s9MDsKKwloZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3QJY2hpbmZvcmVxOworCS8vIHVuc2lnbmVkIGxvbmcgCQkJbm93OworCisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogTm90IHN1cHBvcnRlZCBpbiBTVEEgZi93ICovCisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisjZGVmaW5lIENISU5GT19USU1FT1VUIDIKKworCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpOworCisJLyogc2V0dGluZyBkZWZhdWx0IHZhbHVlIGZvciBjaGFubmVsbGlzdCA9IGFsbCBjaGFubmVscyAqLworCWlmICghbXNnLT5jaGFubmVsbGlzdC5kYXRhKSB7CisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+Y2hhbm5lbGxpc3QsIDB4MDAwMDdGRkUpOworCX0KKwkvKiBzZXR0aW5nIGRlZmF1bHQgdmFsdWUgZm9yIGNoYW5uZWxkd2VsbHRpbWUgPSAxMDAgbXMgKi8KKwlpZiAoIW1zZy0+Y2hhbm5lbGR3ZWxsdGltZS5kYXRhKSB7CisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+Y2hhbm5lbGR3ZWxsdGltZSwgMTAwKTsKKwl9CisJY2hhbm5lbF9tYXNrID0gKFVJTlQxNikgKG1zZy0+Y2hhbm5lbGxpc3QuZGF0YSA+PiAxKTsKKwlmb3IgKGk9MCwgbj0wOyBpIDwgMTQ7IGkrKykgeworCQlpZiAoY2hhbm5lbF9tYXNrICYgKDE8PGkpKSB7CisJCQluKys7CisJCX0KKwl9CisJUDgwMjExX1NFVF9JTlQobXNnLT5udW1jaGluZm8sIG4pOworCWNoaW5mb3JlcS5jaGFubmVsTGlzdCA9IGhvc3QyaGZhMzg0eF8xNihjaGFubmVsX21hc2spOworCWNoaW5mb3JlcS5jaGFubmVsRHdlbGxUaW1lID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+Y2hhbm5lbGR3ZWxsdGltZS5kYXRhKTsKKworCWF0b21pY19zZXQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSwgMSk7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNULAorCQkJCQkgJmNoaW5mb3JlcSwgSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoQ0hBTk5FTElORk9SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJCQlyZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCS8qCisJbm93ID0gamlmZmllczsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSkgIT0gMSkgeworCQlpZiAoKGppZmZpZXMgLSBub3cpID4gQ0hJTkZPX1RJTUVPVVQqSFopIHsKKwkJCVdMQU5fTE9HX05PVElDRSgiQ2hhbm5lbEluZm8gcmVzdWx0cyBub3QgcmVjZWl2ZWQgaW4gJWQgc2Vjb25kcywgYWJvcnRpbmcuXG4iLAorCQkJCQlDSElORk9fVElNRU9VVCk7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90aW1lb3V0OworCQkJZ290byBkb25lOworCQl9CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwl9CisJKi8KKworZG9uZToKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2NoYW5uZWxfaW5mb19yZXN1bHRzCisqCisqIFJldHVybnMgcmVxdWlyZWQgQ2hhbm5lbEluZm8gcmVzdWx0LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKworCXA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c190CSptc2c9bXNncDsKKwlpbnQJCQkJcmVzdWx0PTA7CisJaW50CQljaGFubmVsOworCisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyogTm90IHN1cHBvcnRlZCBpbiBTVEEgZi93ICovCisJCVA4MDIxMV9TRVRfSU5UKG1zZy0+cmVzdWx0Y29kZSwgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJc3dpdGNoIChhdG9taWNfcmVhZCgmaHctPmNoYW5uZWxfaW5mby5kb25lKSkgeworCWNhc2UgMDogbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWU7CisJCWdvdG8gZG9uZTsKKwljYXNlIDE6IG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlQODAyMTFfU0VUX0lOVChtc2ctPnJlc3VsdGNvZGUsIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKTsKKwljaGFubmVsPW1zZy0+Y2hhbm5lbC5kYXRhLTE7CisKKwlpZiAoY2hhbm5lbCA8IDAgfHwgISAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmIDE8PGNoYW5uZWwpICkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCWdvdG8gZG9uZTsKKwl9CisJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mb19yZXN1bHRzOiBjaGFubmVsICVkLCBhdmcvcGVhayBsZXZlbD0lZC8lZCBkQiwgYWN0aXZlPSVkXG4iLAorCQkJY2hhbm5lbCsxLAorCQkJaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5hbmwsCisJCQlody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLnBubCwKKwkJCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0uYWN0aXZlCisJCSk7CisJUDgwMjExX1NFVF9JTlQobXNnLT5hdmdub2lzZWxldmVsLCBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFubCk7CisJUDgwMjExX1NFVF9JTlQobXNnLT5wZWFrbm9pc2VsZXZlbCwgaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5wbmwpOworCVA4MDIxMV9TRVRfSU5UKG1zZy0+YnNzYWN0aXZlLCBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFjdGl2ZSAmCisJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRQorICAgICAgICAgICAgICAgID8gUDgwMjExRU5VTV90cnV0aF90cnVlCisgICAgICAgICAgICAgICAgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKSA7CisJUDgwMjExX1NFVF9JTlQobXNnLT5wY2ZhY3RpdmUsIGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0uYWN0aXZlICYKKwkJSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFCisgICAgICAgICAgICAgICAgPyBQODAyMTFFTlVNX3RydXRoX3RydWUKKyAgICAgICAgICAgICAgICA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpIDsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXV0b2pvaW4KKyoKKyogQXNzb2NpYXRlIHdpdGggYW4gRVNTLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQkJcmVnOworCVVJTlQxNgkJCXBvcnRfdHlwZTsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QJKm1zZyA9IG1zZ3A7CisJcDgwMjExcHN0cmRfdAkJKnBzdHI7CisJVUlOVDgJCQlieXRlYnVmWzI1Nl07CisJaGZhMzg0eF9ieXRlc3RyX3QJKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopYnl0ZWJ1ZjsKKwlEQkZFTlRFUjsKKworCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCS8qIFNldCB0aGUgU1NJRCAqLworCW1lbWNweSgmd2xhbmRldi0+c3NpZCwgJm1zZy0+c3NpZC5kYXRhLCBzaXplb2YobXNnLT5zc2lkLmRhdGEpKTsKKworCWlmIChody0+YXApIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogTmV2ZXIgc3VwcG9ydGVkIG9uIEFQICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBQb3J0ICovCisJaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOworCisJLyoqKiBTVEFUSU9OICoqKi8KKwkvKiBTZXQgdGhlIFR4UmF0ZXMgKi8KKwloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDB4MDAwZik7CisKKwkvKiBTZXQgdGhlIGF1dGggdHlwZSAqLworCWlmICggbXNnLT5hdXRodHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkgKSB7CisJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCX0gZWxzZSB7CisJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKKwl9CisJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTiwgcmVnKTsKKworCS8qIFNldCB0aGUgc3NpZCAqLworCW1lbXNldChieXRlYnVmLCAwLCAyNTYpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZygKKwkJCWh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisjaWYgMAorCS8qIHdlIGNhbiB1c2UgdGhlIG5ldy1mYW5nbGVkIGF1dG8tdW5rbm93biBtb2RlIGlmIHRoZSBmaXJtd2FyZQorCSAgIGlzIDEuMy4zIG9yIG5ld2VyICovCisJaWYgKEhGQTM4NHhfRklSTUFSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPj0KKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywzKSkgeworCQkvKiBTZXQgdXAgdGhlIElCU1Mgb3B0aW9ucyAqLworCQlyZWcgPSAgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTkNSRUFURUlCU1M7CisJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywgcmVnKTsKKworCQkvKiBTZXQgdGhlIFBvcnRUeXBlICovCisJCXBvcnRfdHlwZSA9IEhGQTM4NHhfUE9SVFRZUEVfSUJTUzsKKwl9IGVsc2UgeworCQlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0JTUzsKKwl9CisjZWxzZQorCXBvcnRfdHlwZSA9IEhGQTM4NHhfUE9SVFRZUEVfQlNTOworI2VuZGlmCisJLyogU2V0IHRoZSBQb3J0VHlwZSAqLworCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHBvcnRfdHlwZSk7CisKKwkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwloZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKworCS8qIFNldCB0aGUgcmVzdWx0Y29kZSAqLworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfd2xhbnNuaWZmCisqCisqIFN0YXJ0IG9yIHN0b3Agc25pZmZpbmcuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCXA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3QJKm1zZyA9IG1zZ3A7CisKKwloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCXdvcmQ7CisKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJc3dpdGNoIChtc2ctPmVuYWJsZS5kYXRhKQorCXsKKwljYXNlIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U6CisJCS8qIENvbmZpcm0gdGhhdCB3ZSdyZSBpbiBtb25pdG9yIG1vZGUgKi8KKwkJaWYgKCB3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSICkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRElTQUJMRSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIERpc2FibGUgcG9ydCAwICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgMCBhZnRlciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIENsZWFyIHRoZSBkcml2ZXIgc3RhdGUgKi8KKwkJd2xhbmRldi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCisJCS8qIFJlc3RvcmUgdGhlIHdlcGZsYWdzICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQlIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQlody0+cHJlc25pZmZfd2VwZmxhZ3MpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiZmFpbGVkIHRvIHJlc3RvcmUgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQlody0+cHJlc25pZmZfd2VwZmxhZ3MsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBTZXQgdGhlIHBvcnQgdG8gaXRzIHByaW9yIHR5cGUgYW5kIGVuYWJsZSAoaWYgbmVjZXNzYXJ5KSAqLworCQlpZiAoaHctPnByZXNuaWZmX3BvcnRfdHlwZSAhPSAwICkgeworCQkJd29yZCA9IGh3LT5wcmVzbmlmZl9wb3J0X3R5cGU7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKKwkJCQlyZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCisJCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwgImZhaWxlZCB0byBlbmFibGUgcG9ydCB0byBwcmVzbmlmZiBzZXR0aW5nLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CisKKwkJfQorCisJCVdMQU5fTE9HX0lORk8oIm1vbml0b3IgbW9kZSBkaXNhYmxlZFxuIik7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX3RydXRoX3RydWU6CisJCS8qIERpc2FibGUgdGhlIHBvcnQgKGlmIGVuYWJsZWQpLCBvbmx5IGNoZWNrIFBvcnQgMCAqLworCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbMF0pIHsKKwkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CisJCQkJLyogU2F2ZSBtYWNwb3J0IDAgc3RhdGUgKi8KKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkJCSAgJihody0+cHJlc25pZmZfcG9ydF90eXBlKSk7CisJCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDEsImZhaWxlZCB0byByZWFkIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCQkvKiBTYXZlIHRoZSB3ZXBmbGFncyBzdGF0ZSAqLworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKKwkJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQkJCQkJICAmKGh3LT5wcmVzbmlmZl93ZXBmbGFncykpOworCQkJCWlmICggcmVzdWx0ICkgeworCQkJCQlXTEFOX0xPR19ERUJVRygxLCJmYWlsZWQgdG8gcmVhZCB3ZXBmbGFncywgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQl9CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7CisJCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogRGlzYWJsZSB0aGUgcG9ydCAqLworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKwkJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgPSAwOworCQl9CisKKwkJLyogU2V0IHRoZSBjaGFubmVsIHdlIHdpc2ggdG8gc25pZmYgICovCisJCXdvcmQgPSBtc2ctPmNoYW5uZWwuZGF0YTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkJICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKKwkJaHctPnNuaWZmX2NoYW5uZWw9d29yZDsKKworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IGNoYW5uZWwgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHdvcmQsCisJCQkJICAgICAgIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIE5vdyBpZiB3ZSdyZSBhbHJlYWR5IHNuaWZmaW5nLCB3ZSBjYW4gc2tpcCB0aGUgcmVzdCAqLworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikgeworCQkJLyogU2V0IHRoZSBwb3J0IHR5cGUgdG8gcElic3MgKi8KKwkJCXdvcmQgPSBIRkEzODR4X1BPUlRUWVBFX1BTVUVET0lCU1M7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgd29yZCk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgcG9ydHR5cGUgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkJICAgICAgIHdvcmQsCisJCQkJCSAgICAgICByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQkJaWYgKChtc2ctPmtlZXB3ZXBmbGFncy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5rZWVwd2VwZmxhZ3MuZGF0YSAhPSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCQkJLyogU2V0IHRoZSB3ZXBmbGFncyBmb3Igbm8gZGVjcnlwdGlvbiAqLworCQkJCXdvcmQgPSBIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfVFhDUllQVCB8CisJCQkJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIHdvcmQpOworCQkJfQorCisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICB3b3JkLAorCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJfQorCisJCS8qIERvIHdlIHdhbnQgdG8gc3RyaXAgdGhlIEZDUyBpbiBtb25pdG9yIG1vZGU/ICovCisJCWlmICgobXNnLT5zdHJpcGZjcy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5zdHJpcGZjcy5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJCWh3LT5zbmlmZl9mY3MgPSAwOworCQl9IGVsc2UgeworCQkJaHctPnNuaWZmX2ZjcyA9IDE7CisJCX0KKworCQkvKiBEbyB3ZSB3YW50IHRvIHRydW5jYXRlIHRoZSBwYWNrZXRzPyAqLworCQlpZiAobXNnLT5wYWNrZXRfdHJ1bmMuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQkJaHctPnNuaWZmX3RydW5jYXRlID0gbXNnLT5wYWNrZXRfdHJ1bmMuZGF0YTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5zbmlmZl90cnVuY2F0ZSA9IDA7CisJCX0KKworCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRU5BQkxFKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImZhaWxlZCB0byBlbmFibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQlyZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgeworCQkJV0xBTl9MT0dfSU5GTygibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOworCQl9CisKKwkJLyogU2V0IHRoZSBkcml2ZXIgc3RhdGUgKi8KKwkJLyogRG8gd2Ugd2FudCB0aGUgcHJpc20yIGhlYWRlcj8gKi8KKwkJaWYgKChtc2ctPnByaXNtaGVhZGVyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spICYmIChtc2ctPnByaXNtaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaHctPnNuaWZmaGRyID0gMDsKKwkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CisJCX0gZWxzZSBpZiAoKG1zZy0+d2xhbmhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT53bGFuaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaHctPnNuaWZmaGRyID0gMTsKKwkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CisJCX0gZWxzZSB7CisJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQl9CisKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBleGl0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJfQorCitmYWlsZWQ6CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKKwlyZXN1bHQgPSAwOworZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNmZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBwcmlzbTJtZ210LmgKKyoKKyogRGVjbGFyZXMgdGhlIG1nbXQgY29tbWFuZCBoYW5kbGVyIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBpbnRlcmFjdGlvbgorKiB3aXRoIHRoZSBoZmEzODR4IFdpcmVsZXNzIExBTiAoV0xBTikgTWVkaWEgQWNjZXNzIENvbnRvbGxlciAoTUFDKS4KKyogVGhlIGhmYTM4NHggaXMgYSBwb3J0aW9uIG9mIHRoZSBIYXJyaXMgUFJJU00odG0pIFdMQU4gY2hpcHNldC4KKyoKKyogW0ltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSBub3Rlc10KKyoKKyogW1JlZmVyZW5jZXNdCisqICAgQ1cxMCBQcm9ncmFtbWVyJ3MgTWFudWFsIHYxLjUKKyogICBJRUVFIDgwMi4xMSBEMTAuMAorKgorKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUFJJU00yTUdNVF9ICisjZGVmaW5lIF9QUklTTTJNR01UX0gKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBUeXBlcyBhbmQgdGhlaXIgcmVsYXRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gU3RhdGljIHZhcmlhYmxlIGV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKK2V4dGVybiBpbnQgICAgICBwcmlzbTJfYmFwX3RpbWVvdXQ7CitleHRlcm4gaW50CXByaXNtMl9pcnFfZXZyZWFkX21heDsKKyNlbmRpZgorZXh0ZXJuIGludAlwcmlzbTJfZGVidWc7CitleHRlcm4gaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOworZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitVSU5UMzIKK3ByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGlmc3RhdGUpOworCit2b2lkCitwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZAorcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwordm9pZAorcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cyk7Cit2b2lkCitwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZAorcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKworaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcG93ZXJtZ210KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3AyX2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRjaXMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbG93X2xldmVsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9tbWlfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbW1fc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY29udmVyc2lvbiBmdW5jdGlvbnMgZ29pbmcgYmV0d2VlbiB3bGFuIG1lc3NhZ2UgZGF0YSB0eXBlcyBhbmQKKyogUHJpc20yIGRhdGEgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBieXRlIGFyZWEgY29udmVyc2lvbiBmdW5jdGlvbnMqLwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaW50IGxlbik7CisKKy8qIGJ5dGUgc3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zKi8KK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwordm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7CisKKy8qIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQoVUlOVDE2ICpwcmlzbTJpbnQsIFVJTlQzMiAqd2xhbmludCk7CisKKy8qIGVudW1lcmF0ZWQgaW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBhIGJpdCBhcmVhIHRvL2Zyb20gYW4gT3BlcmF0aW9uYWwgUmF0ZSBTZXQgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcihVSU5UMzIgZGlkLAorCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOworaW50IHByaXNtMm1nbXRfc2V0X2dycGFkZHIoVUlOVDMyIGRpZCwKKwlVSU5UOCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKK2ludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KCBVSU5UMzIgZGlkICk7CisKK3ZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKKwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7Cit2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9ucyAoaWYgc3VwcG9ydGVkKSAtLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwpAQCAtMCwwICsxLDM3OTkgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL3ByaXNtMm1pYi5jCisqCisqIE1hbmFnZW1lbnQgcmVxdWVzdCBmb3IgbWlic2V0L21pYmdldAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBoYW5kbGUgdGhlIG1pYnNldC9taWJnZXQgbWFuYWdlbWVudAorKiBmdW5jdGlvbnMuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8vI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKy8vI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKy8vI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisvLyNlbmRpZgorLy8KKy8vI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkpCisvLyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorLy9lbmRpZgorCisvLyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisvLyNlbmRpZgorCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgImhmYTM4NHguaCIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworI2RlZmluZSBNSUJfVE1QX01BWExFTiAgICAyMDAgICAgLyogTWF4IGxlbmd0aCBvZiBSSUQgcmVjb3JkIChpbiBieXRlcykuICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisjZGVmaW5lICBGX0FQICAgICAgICAgMHgxICAgICAgICAvKiBNSUIgaXMgc3VwcG9ydGVkIG9uIEFjY2VzcyBQb2ludHMuICovCisjZGVmaW5lICBGX1NUQSAgICAgICAgMHgyICAgICAgICAvKiBNSUIgaXMgc3VwcG9ydGVkIG9uIHN0YXRpb25zLiAqLworI2RlZmluZSAgRl9SRUFEICAgICAgIDB4NCAgICAgICAgLyogTUlCIG1heSBiZSByZWFkLiAqLworI2RlZmluZSAgRl9XUklURSAgICAgIDB4OCAgICAgICAgLyogTUlCIG1heSBiZSB3cml0dGVuLiAqLworCit0eXBlZGVmIHN0cnVjdCBtaWJyZWMKK3sKKyAgICBVSU5UMzIgICBkaWQ7CisgICAgVUlOVDE2ICAgZmxhZzsKKyAgICBVSU5UMTYgICBwYXJtMTsKKyAgICBVSU5UMTYgICBwYXJtMjsKKyAgICBVSU5UMTYgICBwYXJtMzsKKyAgICBpbnQgICAgICAoKmZ1bmMpKHN0cnVjdCBtaWJyZWMgICAgICAgICAgICAgICAgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCisgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAorICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCisgICAgICAgICAgICAgICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCisgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK30gbWlicmVjX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMmFycmF5KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzJvZmZzZXQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3RydXRoKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcmVhbWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ncm91cGFkZHJlc3MoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2Z3aWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGdlbmFibGUoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2F1dGhsaXN0KAoraGZhMzg0eF90ICAgICAgKmh3LAorcHJpc20yc3RhX2F1dGhsaXN0X3QgICpsaXN0KTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQzMiAgICAgICAgICAgIG1vZGUpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygKK2hmYTM4NHhfdCAgICAgICAgICpodywKK3A4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQ4ICAgICAgICAgICAgICphZGRyKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgbWlicmVjX3QgbWlidGFiW10gPSB7CisKKyAgICAvKiBkb3QxMXNtdCBNSUIncyAqLworCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFTdGF0aW9uSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExTWVkaXVtT2NjdXBhbmN5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUG9sbGFibGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBQZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUE1heER1cmF0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGlvblJlc3BvbnNlVGltZU91dCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVBvd2VyTWFuYWdlbWVudE1vZGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNRU5BQkxFRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcG93ZXJtYW5hZ2VtZW50IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkU1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkQlNTVHlwZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExT3BlcmF0aW9uYWxSYXRlU2V0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU9wZXJhdGlvbmFsUmF0ZVNldCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFCZWFjb25QZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBCQ05JTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRFRJTVBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQXNzb2NpYXRpb25SZXNwb25zZVRpbWVPdXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0zLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgNCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG02LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICA2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTYsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTAsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19FWENMVURFLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTSE9SVFBSRUFNQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcmVhbWJsZSB9LAorCisgICAgLyogZG90MTFtYWMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4UmVjZWl2ZUxpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M2LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczgsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTAsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEyLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE1LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTYsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE4LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIxLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI3LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjgsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMwLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzEsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisKKyAgICAvKiBkb3QxMXBoeSBNSUIncyAqLworCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVBIWVR5cGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BIWVRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFUZW1wVHlwZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfVEVNUFRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDQ0FNb2RlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DQ0FNT0RFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyVGFibGUgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJNTVR4LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJFYXJseUJlYWNvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBCSVQ3LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hcHBjZmluZm9mbGFnIH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMlJlY2VpdmVkRnJhbWVTdGF0aXN0aWNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkF1dGhlbnRpY2F0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFzc29jaWF0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMlBvd2VyU2F2ZVVzZXJDb3VudCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQ29tbWVudCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzTW9kZSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0FsbG93LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzRGVueSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkNoYW5uZWxJbmZvUmVzdWx0cywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKworICAgIC8qIHAyU3RhdGljIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25NQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkRlc2lyZWRTU0lELAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkNoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93blNTSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05TU0lELCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25BVElNV2luZG93LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05BVElNV0lOLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlN5c3RlbVNjYWxlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4RGF0YUxlbmd0aCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzcywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUiwgSEZBMzg0eF9SSURfQ05GV0RTQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRW5hYmxlZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVELCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1FUFMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNRVBTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTXVsdGljYXN0UmVjZWl2ZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTVVMVElDQVNUUlgsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhTbGVlcER1cmF0aW9uLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUhvbGRvdmVyRHVyYXRpb24sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNSE9MRERVUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25OYW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTkFNRSwgSEZBMzg0eF9SSURfQ05GT1dOTkFNRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duRFRJTVBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjEsIEhGQTM4NHhfUklEX0NORldEU0FERFIxX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjIsIEhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjMsIEhGQTM4NHhfUklEX0NORldEU0FERFIzX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjQsIEhGQTM4NHhfUklEX0NORldEU0FERFI0X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjUsIEhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjYsIEhGQTM4NHhfUklEX0NORldEU0FERFI2X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTXVsdGljYXN0UE1CdWZmZXJpbmcsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5SUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTAsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRmxhZ3MsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heEFzc29jaWF0ZWRTdGF0aW9ucywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlR4Q29udHJvbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlRYQ09OVFJPTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSb2FtaW5nTW9kZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mSG9zdEF1dGhlbnRpY2F0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkhPU1RBVVRIQVNTT0MsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSY3ZDcmNFcnJvciwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJDVkNSQ0VSUk9SLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkFsdFJldHJ5Q291bnQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBTFRSRVRSWUNOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCZWFjb25JbnRlcnZhbCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUEJDTklOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNZWRpdW1PY2N1cGFuY3lMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBNYXhEdXJhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQRmxhZ3MsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAzLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlNUQVBDRkluZm8sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNUQVBDRklORk8sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUHJpb3JpdHlRVXNhZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQUklPUklUWVFVU0FHRSwgSEZBMzg0eF9SSURfQ05GUFJJT1FVU0FHRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUSU1DdHJsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GVElNQ1RSTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUaGlydHkyVGFsbHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZUSElSVFkyVEFMTFksIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZFbmhTZWN1cml0eSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZFTkhTRUNVUklUWSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTaG9ydFByZWFtYmxlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJlYW1ibGUgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkV4Y2x1ZGVMb25nUHJlYW1ibGUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GRVhDTE9OR1BSRUFNQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb25Sc3BUTywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQmFzaWNSYXRlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3VwcG9ydGVkUmF0ZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJEeW5hbWljIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJDcmVhdGVJQlNTLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DUkVBVEVJQlNTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUHJvbWlzY3VvdXNNb2RlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNINiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDAsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0g0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNINiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDAsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEw0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMNSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJCZWhhdmlvciBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJCZWhhdmlvcl9wMlRpY2tUaW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfSVRJQ0tUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyTklDIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk1heExvYWRUaW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlclBhZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJPZmZzZXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJMZW5ndGgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyUFJJSWRlbnRpdHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSUlERU5USVRZLCBIRkEzODR4X1JJRF9QUklJREVOVElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJQUklTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UsIEhGQTM4NHhfUklEX1BSSVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkNGSUFjdFJhbmdlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJX0NGSUFDVFJBTkdFUywgSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkJ1aWxkU2VxdWVuY2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0JVSUxEU0VRLCBIRkEzODR4X1JJRF9CVUlMRFNFUV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJQcmltYXJ5RldJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU2Vjb25kYXJ5RldJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyVGVydGlhcnlGV0lELAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTklDU2VyaWFsTnVtYmVyLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVIsIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk5JQ0lkZW50aXR5LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9OSUNJREVOVElUWSwgSEZBMzg0eF9SSURfTklDSURFTlRJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTUZJU3VwUmFuZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFLCBIRkEzODR4X1JJRF9NRklTVVBSQU5HRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJDRklTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkNoYW5uZWxMaXN0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DSEFOTkVMTElTVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJSZWd1bGF0b3J5RG9tYWlucywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlMsIEhGQTM4NHhfUklEX1JFR1VMQVRPUllET01BSU5TX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlRlbXBUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9URU1QVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJTVEFJZGVudGl0eSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1RBSURFTlRJVFksIEhGQTM4NHhfUklEX1NUQUlERU5USVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlNUQVN1cFJhbmdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRSwgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTUZJQWN0UmFuZ2VzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTLCBIRkEzODR4X1JJRF9NRklBQ1RSQU5HRVNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU1RBQ0ZJQWN0UmFuZ2VzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTLCBIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVMyX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKworICAgIC8qIHAyTUFDIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlBvcnRTdGF0dXMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50U1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRCU1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlDUSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QVNMLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBTkwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlDUSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5QVNMLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBTkwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50QmVhY29uSW50ZXJ2YWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCQ05JTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyU3RhQ3VycmVudFNjYWxlVGhyZXNob2xkcywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU0NBTEVUSFJFU0gsIEhGQTM4NHhfUklEX1NUQUNVUlNDQUxFVEhSRVNIX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkFQQ3VycmVudFNjYWxlVGhyZXNob2xkcywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSCwgSEZBMzg0eF9SSURfQVBDVVJTQ0FMRVRIUkVTSF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJQcm90b2NvbFJzcFRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJTaG9ydFJldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJMb25nUmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyTWF4VHJhbnNtaXRMaWZldGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJNYXhSZWNlaXZlTGlmZXRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWFJYTElGRVRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ0ZQb2xsYWJsZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DRlBPTExBQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQVVUSEFMR09SSVRITVMsIEhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlByaXZhY3lPcHRpb25JbXBsZW1lbnRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJPd25NQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTUywgSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKworICAgIC8qIHAyTW9kZW0gTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJQSFlUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QSFlUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudFBvd2VyU3RhdGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ0NBTW9kZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0NBTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMlR4UG93ZXJNYXgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyU3VwcG9ydGVkRGF0YVJhdGVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVMsIEhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorCisgICAgLyogQW5kIGZpbmFsbHksIGxueCBtaWJzICovCisgICAgeyBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgMCwgMCwgMCwgMCwgMCwgTlVMTH19OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXNlIE1JQidzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZToKKworRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eVByZXNlbnQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExQ2hhbm5lbEFnaWxpdHlFbmFibGVkCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFQQkNDT3B0aW9uSW1wbGVtZW50ZWQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhWYWx1ZQorRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFZhbHVlCisKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0VmFsdWUKK1RPRE86IG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5IHdsYW4gaGFzIHRoaXMgYXMgZW51bWVyYXRlZCBhbmQgUHJpc20yIGhhcyB0aGlzCisgICAgICBhcyBidHllIHN0ci4KKworRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExU2hvcnRQcmVhbWJsZU9wdGlvbkltcGxlbWVudGVkCitUT0RPOiBGaW5kIG91dCB0aGUgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIocykgZm9yIGlkZW50aWZ5aW5nCisgICAgICB3aGV0aGVyIHRoZSBmaXJtd2FyZSBpcyBjYXBhYmxlIG9mIHNob3J0IHByZWFtYmxlLiBUUlVFIG9yIEZBTFNFCisgICAgICB3aWxsIGJlIHJldHVybmVkIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaXJtd2FyZS4KKworV0VQIEtleSBtYXBwaW5ncyBhcmVuJ3Qgc3VwcG9ydGVkIGluIHRoZSBmL3cuCitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0luZGV4CitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0FkZHJlc3MKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nV0VQT24KK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nVmFsdWUKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdMZW5ndGgKKworVE9ETzogaW1wbGVtZW50IGNvdW50ZXJzLgorRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQSUNWRXJyb3JDb3VudAorRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRXhjbHVkZWRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZhaWxlZENvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUmV0cnlDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpcGxlUmV0cnlDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNTdWNjZXNzQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNGYWlsdXJlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFBQ0tGYWlsdXJlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGQ1NFcnJvckNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50CisKK1RPRE86IGltcGxlbWVudCBzYW5lIHZhbHVlcyBmb3IgdGhlc2UuCitESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1hbnVmYWN0dXJlcklECitESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVByb2R1Y3RJRAorCitOb3QgdG9vIHdvcnJpZWQgYWJvdXQgdGhlc2UgYXQgdGhlIG1vbWVudC4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRUeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMURpdmVyc2l0eVN1cHBvcnQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRSeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMU51bWJlclN1cHBvcnRlZFBvd2VyTGV2ZWxzCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwxCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwyCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwzCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw0CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw1CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw2CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw3CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsCisKK1VtbW0sIEZIIGFuZCBJUiBkb24ndCBhcHBseQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExSG9wVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWxOdW1iZXIKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMU1heER3ZWxsVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudER3ZWxsVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFNldAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFBhdHRlcm4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ0NBTW9kZVN1cHBvcnRlZAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExRURUaHJlc2hvbGQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ1RpbWVyTWF4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dDb3VudE1heAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nVGltZXJNaW4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWluCisKK1dlIGp1c3QgZG9uJ3QgaGF2ZSBlbm91Z2ggYW50ZW5uYXMgcmlnaHQgbm93IHRvIHdvcnJ5IGFib3V0IHRoaXMuCitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMUFudGVubmFMaXN0SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExU3VwcG9ydGVkVHhBbnRlbm5hCitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMVN1cHBvcnRlZFJ4QW50ZW5uYQorRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFEaXZlcnNpdHlTZWxlY3Rpb25SeAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfbWlic2V0X21pYmdldAorKgorKiBTZXQgdGhlIHZhbHVlIG9mIGEgbWliIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQJCQlyZXN1bHQsIGlzZ2V0OworCW1pYnJlY190CQkqbWliOworCVVJTlQxNgkJCXdoaWNoOworCisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CSptc2cgPSBtc2dwOworCXA4MDIxMWl0ZW1kX3QJCQkqbWliaXRlbTsKKworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJLyoKKwkqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBBY2Nlc3MgUG9pbnQgb3IgYSBzdGF0aW9uLgorCSovCisKKwl3aGljaCA9IGh3LT5hcCA/IEZfQVAgOiBGX1NUQTsKKworCS8qCisJKiogRmluZCB0aGUgTUlCIGluIHRoZSBNSUIgdGFibGUuICBOb3RlIHRoYXQgYSBNSUIgbWF5IGJlIGluIHRoZQorCSoqIHRhYmxlIHR3aWNlLi4ub25jZSBmb3IgYW4gQVAgYW5kIG9uY2UgZm9yIGEgc3RhdGlvbi4gIE1ha2Ugc3VyZQorCSoqIHRvIGdldCB0aGUgY29ycmVjdCBvbmUuICBOb3RlIHRoYXQgRElEPTAgbWFya3MgdGhlIGVuZCBvZiB0aGUKKwkqKiBNSUIgdGFibGUuCisJKi8KKworCW1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOworCisJZm9yIChtaWIgPSBtaWJ0YWI7IG1pYi0+ZGlkICE9IDA7IG1pYisrKQorCQlpZiAobWliLT5kaWQgPT0gbWliaXRlbS0+ZGlkICYmIChtaWItPmZsYWcgJiB3aGljaCkpCisJCQlicmVhazsKKworCWlmIChtaWItPmRpZCA9PSAwKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSoqIERldGVybWluZSBpZiB0aGlzIGlzIGEgIm1pYmdldCIgb3IgYSAibWlic2V0Ii4gIElmIHRoaXMgaXMgYQorCSoqICJtaWJnZXQiLCB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRoZSBNSUIgbWF5IGJlIHJlYWQuICBPdGhlcndpc2UsCisJKiogdGhpcyBpcyBhICJtaWJzZXQiIHNvIG1ha2UgbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgd3JpdHRlbi4KKwkqLworCisJaXNnZXQgPSAobXNnLT5tc2djb2RlID09IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpOworCisJaWYgKGlzZ2V0KSB7CisJCWlmICghKG1pYi0+ZmxhZyAmIEZfUkVBRCkpIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghKG1pYi0+ZmxhZyAmIEZfV1JJVEUpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qCisJKiogRXhlY3V0ZSB0aGUgTUlCIGZ1bmN0aW9uLiAgSWYgdGhpbmdzIHdvcmtlZCBva2F5LCB0aGVuIG1ha2UKKwkqKiBzdXJlIHRoYXQgdGhlIE1JQiBmdW5jdGlvbiBhbHNvIHdvcmtlZCBva2F5LiAgSWYgc28sIGFuZCB0aGlzCisJKiogaXMgYSAibWliZ2V0IiwgdGhlbiB0aGUgc3RhdHVzIHZhbHVlIG11c3QgYmUgc2V0IGZvciBib3RoIHRoZQorCSoqICJtaWJhdHRyaWJ1dGUiIHBhcmFtZXRlciBhbmQgdGhlIG1pYiBpdGVtIHdpdGhpbiB0aGUgZGF0YQorCSoqIHBvcnRpb24gb2YgdGhlICJtaWJhdHRyaWJ1dGUiLgorCSovCisKKwlyZXN1bHQgPSBtaWItPmZ1bmMobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywKKwkJCSAgICh2b2lkICopIG1pYml0ZW0tPmRhdGEpOworCisJaWYgKG1zZy0+cmVzdWx0Y29kZS5kYXRhID09IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgImdldC9zZXQgZmFpbHVyZSwgcmVzdWx0PSVkXG4iLAorCQkJCQlyZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc2dldCkgeworCQkJCW1zZy0+bWliYXR0cmlidXRlLnN0YXR1cyA9CisJCQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCQltaWJpdGVtLT5zdGF0dXMgPQorCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKworCXJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIKKyoKKyogR2V0L3NldCBwc3RyIGRhdGEgdG8vZnJvbSBhIGJ5dGUgc3RyaW5nLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVzdHIycHN0cigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgICAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwloZmEzODR4X2J5dGVzdHJfdCAgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIocDJieXRlc3RyLCBwc3RyKTsKKwl9IGVsc2UgeworCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cgorKgorKiBHZXQvc2V0IHBzdHIgZGF0YSB0by9mcm9tIGEgYnl0ZSBhcmVhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKGJ5dGVidWYsIHBzdHIsCW1pYi0+cGFybTIpOworCX0gZWxzZSB7CisJCW1lbXNldChieXRlYnVmLCAwLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3VpbnQzMgorKgorKiBHZXQvc2V0IHVpbnQzMiBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQkqdWludDMyID0gKndvcmRidWY7CisJCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCB1aW50MzIpOworCQkgKi8KKwl9IGVsc2UgeworCQkvKiBbTVNNXSBSZW1vdmVkLCBzZXRjb25maWcxNiBleHBlY3RzIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmLCB1aW50MzIpOworCQkgKi8KKwkJKndvcmRidWYgPSAqdWludDMyOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3VpbnQzMmFycmF5CisqCisqIEdldC9zZXQgYW4gYXJyYXkgb2YgdWludDMyIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyYXJyYXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyICopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisJaW50ICAgICBpLCBjbnQ7CisKKwlEQkZFTlRFUjsKKworCWNudCA9IG1pYi0+cGFybTIgLyBzaXplb2YoVUlOVDE2KTsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYraSwgdWludDMyK2kpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJCXByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmK2ksIHVpbnQzMitpKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfdWludDMyb2Zmc2V0CisqCisqIEdldC9zZXQgYSBzaW5nbGUgZWxlbWVudCBpbiBhbiBhcnJheSBvZiB1aW50MzIgZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIEVsZW1lbnQgaW5kZXguCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMm9mZnNldCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQxNiAgY250OworCisJREJGRU5URVI7CisKKwljbnQgPSBtaWItPnBhcm0yIC8gc2l6ZW9mKFVJTlQxNik7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaWYgKGlzZ2V0KSB7CisJCQlpZiAobWliLT5wYXJtMyA8IGNudCkKKwkJCQlwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZittaWItPnBhcm0zLCB1aW50MzIpOworCQkJZWxzZQorCQkJCSp1aW50MzIgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKG1pYi0+cGFybTMgPCBjbnQpIHsKKwkJCQlwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZittaWItPnBhcm0zLCB1aW50MzIpOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCQkJfQorCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl90cnV0aAorKgorKiBHZXQvc2V0IHRydXRoIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl90cnV0aCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJKnVpbnQzMiA9ICgqd29yZGJ1ZikgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJfSBlbHNlIHsKKwkJKndvcmRidWYgPSAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgPyAxIDogMDsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9mbGFnCisqCisqIEdldC9zZXQgYSBmbGFnLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIEJpdCB0byBnZXQvc2V0LgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQzMiAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCAmZmxhZ3MpOworCQkgKi8KKwkJZmxhZ3MgPSAqd29yZGJ1ZjsKKwkJaWYgKGlzZ2V0KSB7CisJCQkqdWludDMyID0gKGZsYWdzICYgbWliLT5wYXJtMikgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQlpZiAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQlmbGFncyB8PSBtaWItPnBhcm0yOworCQkJZWxzZQorCQkJCWZsYWdzICY9IH5taWItPnBhcm0yOworCQkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgorCQkJICogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYsICZmbGFncyk7CisJCQkgKi8KKwkJCSp3b3JkYnVmID0gZmxhZ3M7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZworKgorKiBHZXQvc2V0IGEgc2luZ2xlIGZsYWcgaW4gdGhlIEFQUENGSU5GTyByZWNvcmQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgQml0IHRvIGdldC9zZXQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQxNiAgd29yZDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLAorCQkJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaWYgKGlzZ2V0KSB7CisJCQkqdWludDMyID0gKGhmYTM4NHgyaG9zdF8xNih3b3JkYnVmWzNdKSAmIG1pYi0+cGFybTEpID8KKwkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJd29yZCA9IGhmYTM4NHgyaG9zdF8xNih3b3JkYnVmWzNdKTsKKwkJCXdvcmQgPSAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgPworCQkJCSh3b3JkIHwgbWliLT5wYXJtMSkgOiAod29yZCAmIH5taWItPnBhcm0xKTsKKwkJCXdvcmRidWZbM10gPSBob3N0MmhmYTM4NHhfMTYod29yZCk7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sCisJCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4pOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucworKgorKiBHZXQgcmVndWxhdG9yeSBkb21haW4gZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlVSU5UMzIgICAgICAgICBjbnQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gMDsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYsICZjbnQpOworCQlwc3RyLT5sZW4gPSAoVUlOVDgpIGNudDsKKwkJbWVtY3B5KHBzdHItPmRhdGEsICZ3b3JkYnVmWzFdLCBwc3RyLT5sZW4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleQorKgorKiBHZXQvc2V0IFdFUCBkZWZhdWx0IGtleXMuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICBsZW47CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSAwOyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAqLworCX0gZWxzZSB7CisJCWxlbiA9IChwc3RyLT5sZW4gPiA1KSA/IEhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOIDoKKwkJCQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU47CisJCW1lbXNldChieXRlYnVmLCAwLCBsZW4pOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoYnl0ZWJ1ZiwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIGxlbik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wb3dlcm1hbmFnZW1lbnQKKyoKKyogR2V0L3NldCA4MDIuMTEgcG93ZXIgbWFuYWdlbWVudCB2YWx1ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGRlZmluZWQgZGlmZmVyZW50bHkKKyogYnkgODAyLjExIGFuZCBQcmlzbTI6CisqCisqICAgICAgIE1lYW5pbmcgICAgIDgwMi4xMSAgICAgICBQcmlzbTIKKyogICAgICAgIGFjdGl2ZSAgICAgICAxICAgICAgICAgICBmYWxzZQorKiAgICAgIHBvd2Vyc2F2ZSAgICAgIDIgICAgICAgICAgIHRydWUKKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQzMiAgdmFsdWU7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csICZ2YWx1ZSk7CisJCSp1aW50MzIgPSAodmFsdWUgPT0gMCkgPyAxIDogMjsKKwl9IGVsc2UgeworCQl2YWx1ZSA9ICgoKnVpbnQzMikgPT0gMSkgPyAwIDogMTsKKwkJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCAmdmFsdWUpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJlYW1ibGUKKyoKKyogR2V0L3NldCBQcmlzbTIgc2hvcnQgcHJlYW1ibGUKKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByZWFtYmxlKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQkqdWludDMyID0gKndvcmRidWY7CisJfSBlbHNlIHsKKwkJKndvcmRidWYgPSAqdWludDMyOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZhY3lpbnZva2VkCisqCisqIEdldC9zZXQgdGhlIGRvdDExUHJpdmFjeUludm9rZWQgdmFsdWUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgQml0IHZhbHVlIGZvciBQcml2YWN5SW52b2tlZCBmbGFnLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpIHsKKwkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpCisJCQltaWItPnBhcm0yIHw9IEhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUOworCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRU5DUllQVCkKKwkJCW1pYi0+cGFybTIgfD0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQ7CisJfQorCisJcmVzdWx0ID0gcHJpc20ybWliX2ZsYWcobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZAorKgorKiBHZXQvc2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBCaXQgdmFsdWUgZm9yIEV4Y2x1ZGVVbmVuY3J5cHRlZCBmbGFnLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOworCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkCisqCisqIEdldC9zZXQgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCisJREJGRU5URVI7CisKKwlpZiAoIWlzZ2V0KQorCQlpZiAoKCp1aW50MzIpICUgMikgeworCQkJV0xBTl9MT0dfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgb2RkIG51bWJlciAiCisJCQkJCSAgIkZyYWdtZW50YXRpb25UaHJlc2hvbGRcbiIpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJCXJldHVybigwKTsKKwkJfQorCisJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0CisqCisqIEdldC9zZXQgdGhlIG9wZXJhdGlvbmFsIHJhdGUgc2V0LgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KHdvcmRidWYsIHBzdHIpOworCX0gZWxzZSB7CisJCXByaXNtMm1nbXRfc2V0X29wcmF0ZXNldCh3b3JkYnVmLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9ncm91cGFkZHJlc3MKKyoKKyogR2V0L3NldCB0aGUgZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2dyb3VwYWRkcmVzcygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgbGVuOworCisJREJGRU5URVI7CisKKwkvKiBUT0RPOiBmaXggdGhpcy4gIGYvdyBkb2Vzbid0IHN1cHBvcnQgbWNhc3QgZmlsdGVycyAqLworCisJaWYgKGlzZ2V0KSB7CisJCXByaXNtMm1nbXRfZ2V0X2dycGFkZHIobWliLT5kaWQsIHBzdHIsIGh3KTsKKwkJcmV0dXJuKDApOworCX0KKworCXJlc3VsdCA9IHByaXNtMm1nbXRfc2V0X2dycGFkZHIobWliLT5kaWQsIGJ5dGVidWYsIHBzdHIsIGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJcmV0dXJuKHJlc3VsdCk7CisJfQorCisJaWYgKGh3LT5kb3QxMV9ncnBjbnQgPD0gTUFYX1BSSVNNMl9HUlBfQUREUikgeworCQlsZW4gPSBody0+ZG90MTFfZ3JwY250ICogV0xBTl9BRERSX0xFTjsKKwkJbWVtY3B5KGJ5dGVidWYsIGh3LT5kb3QxMV9ncnBfYWRkclswXSwgbGVuKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfR1JPVVBBRERSLCBieXRlYnVmLCBsZW4pOworCisJCS8qCisJCSoqIFR1cm4gb2ZmIHByb21pc2N1b3VzIG1vZGUgaWYgY291bnQgaXMgZXF1YWwgdG8gTUFYLiAgV2UgbWF5CisJCSoqIGhhdmUgYmVlbiBhdCBhIGhpZ2hlciBjb3VudCBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBuZWVkIHRvCisJCSoqIHR1cm4gaXQgb2ZmLgorCQkqLworCisJCS8qIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluIHByb21pc2MgbW9kZS4gOikgKi8KKwkJaWYgKChody0+ZG90MTFfZ3JwY250ID09IE1BWF9QUklTTTJfR1JQX0FERFIpICYmCisJCSAgICAhKCB3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCSAgICAgSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIDApOworCQl9CisJfSBlbHNlIHsKKworCQkvKgorCQkqKiBDbGVhciBncm91cCBhZGRyZXNzZXMgaW4gY2FyZCBhbmQgc2V0IHRvIHByb21pc2N1b3VzIG1vZGUuCisJCSovCisKKwkJbWVtc2V0KGJ5dGVidWYsIDAsIHNpemVvZihieXRlYnVmKSk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0dST1VQQUREUiwKKwkJCQkJCWJ5dGVidWYsIDApOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIDEpOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9md2lkCisqCisqIEdldCB0aGUgZmlybXdhcmUgSUQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZndpZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwloZmEzODR4X0ZXSURfdCAgZndpZDsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0ZXSUQsCisJCQkJCQkmZndpZCwgSEZBMzg0eF9SSURfRldJRF9MRU4pOworCQlpZiAobWliLT5kaWQgPT0gRElEbWliX3AyX3AyTklDX3AyUHJpbWFyeUZXSUQpIHsKKwkJCWZ3aWQucHJpbWFyeVtIRkEzODR4X0ZXSURfTEVOIC0gMV0gPSAnXDAnOworCQkJcHN0ci0+bGVuID0gc3RybGVuKGZ3aWQucHJpbWFyeSk7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgZndpZC5wcmltYXJ5LCBwc3RyLT5sZW4pOworCQl9IGVsc2UgeworCQkJZndpZC5zZWNvbmRhcnlbSEZBMzg0eF9GV0lEX0xFTiAtIDFdID0gJ1wwJzsKKwkJCXBzdHItPmxlbiA9IHN0cmxlbihmd2lkLnNlY29uZGFyeSk7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgZndpZC5zZWNvbmRhcnksIHBzdHItPmxlbik7CisJCX0KKwl9IGVsc2UKKwkJcmVzdWx0ID0gMDsgICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2F1dGhhbGcKKyoKKyogR2V0IHZhbHVlcyBmcm9tIHRoZSBBdWh0ZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBUYWJsZSBpbmRleCAoMS02KS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hdXRoYWxnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisKKwlEQkZFTlRFUjsKKworCS8qIE1TTTogcGt4IHN1cHBsaWVkIGNvZGUgdGhhdCAgY29kZSBxdWVyaWVzIFJJRCBGRDRELi4uLmJ1dCB0aGUgZi93J3MKKyAgICAgICAgICogIHJlc3VsdHMgYXJlIGJvZ3VzLiBUaGVyZWZvcmUsIHdlIGhhdmUgdG8gc2ltdWxhdGUgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAqICByZXN1bHRzIGhlcmUgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiBvdXIga25vd2xlZGdlIG9mIGV4aXN0aW5nIE1BQworICAgICAgICAgKiAgZmVhdHVyZXMuICBUaGF0J3MgdGhlIHdob2xlIHBvaW50IGJlaGluZCB0aGlzIHVnbHkgZnVuY3Rpb24uCisgICAgICAgICAqLworCisJaWYgKGlzZ2V0KSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCXN3aXRjaCAobWliLT5wYXJtMSkgeworCQkJY2FzZSAxOiAvKiBPcGVuIFN5c3RlbSAqLworCQkJCSp1aW50MzIgPSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogLyogU2hhcmVkS2V5ICovCisJCQkJKnVpbnQzMiA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCSp1aW50MzIgPSAwOworCQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlCisqCisqIEdldC9zZXQgdGhlIGVuYWJsZSB2YWx1ZXMgZnJvbSB0aGUgQXVodGVudGljYXRpb25BbGdvcml0aG1zVGFibGUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgVGFibGUgaW5kZXggKDEtNikuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCisJaW50ICAgICBpbmRleDsKKwlVSU5UMTYgIGNuZl9hdXRoOworCVVJTlQxNgltYXNrOworCisJREJGRU5URVI7CisKKwlpbmRleCA9IG1pYi0+cGFybTEgLSAxOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KCBodywKKwkJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCAmY25mX2F1dGgpOworCVdMQU5fTE9HX0RFQlVHKDIsImNuZkF1dGhlbnRpY2F0aW9uMD0lZCwgaW5kZXg9JWRcbiIsIGNuZl9hdXRoLCBpbmRleCk7CisKKwlpZiAoaXNnZXQpIHsKKwkJaWYgKCBpbmRleCA9PSAwIHx8IGluZGV4ID09IDEgKSB7CisJCQkqdWludDMyID0gKGNuZl9hdXRoICYgKDE8PGluZGV4KSkgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJfSBlbHNlIHsKKwkJCSp1aW50MzIgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICggaW5kZXggPT0gMCB8fCBpbmRleCA9PSAxICkgeworCQkJbWFzayA9IDEgPDwgaW5kZXg7CisJCQlpZiAoKnVpbnQzMj09UDgwMjExRU5VTV90cnV0aF90cnVlICkgeworCQkJCWNuZl9hdXRoIHw9IG1hc2s7CisJCQl9IGVsc2UgeworCQkJCWNuZl9hdXRoICY9IH5tYXNrOworCQkJfQorCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KCBodywKKwkJCQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIGNuZl9hdXRoKTsKKwkJCVdMQU5fTE9HX0RFQlVHKDIsImNuZkF1dGhlbnRpY2F0aW9uOj0lZFxuIiwgY25mX2F1dGgpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwiVW5hYmxlIHRvIHNldCBwMmNuZkF1dGhlbnRpY2F0aW9uIHRvICVkXG4iLCBjbmZfYXV0aCk7CisJCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXYKKyoKKyogR2V0L3NldCB2YWx1ZXMgaW4gdGhlICJwcml2IiBkYXRhIHN0cnVjdHVyZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJVUlOVDMyICAgICAgICAgICAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCXA4MDIxMXBzdHJkX3QgICAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCXA4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSA9IChwODAyMTFtYWNhcnJheV90ICopIGRhdGE7CisKKwlpbnQgIGksIGNudCwgcmVzdWx0LCBkb25lOworCisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKworCS8qCisJKiogInRlc3QiIGlzIGEgbG90IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSBidXQgd2hvIGNhcmVzPyAgLi4uYXMgbG9uZyBhcworCSoqIGl0IGlzIGxvbmcgZW5vdWdoIQorCSovCisKKwlVSU5UOCAgdGVzdFtzaXplb2Yod2xhbmRldi0+cngpICsgc2l6ZW9mKGh3LT50YWxsaWVzKV07CisKKwlEQkZFTlRFUjsKKworCXN3aXRjaCAobWliLT5kaWQpIHsKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyUmVjZWl2ZWRGcmFtZVN0YXRpc3RpY3M6CisKKwkJLyoKKwkJKiogTm90ZTogVGhlIHZhbHVlcyBpbiB0aGlzIHJlY29yZCBhcmUgY2hhbmdlZCBieSB0aGUKKwkJKiogaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZ3VhcmFudGVlZAorCQkqKiB0byBiZSBzdGFibGUgd2hpbGUgdGhleSBhcmUgYmVpbmcgY29waWVkLiAgSG93ZXZlciwKKwkJKiogdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIHRoaXMKKwkJKiogY29kZS4gIEhlbmNlLCBpZiB0aGUgc2FtZSB2YWx1ZXMgYXJlIGNvcGllZCB0d2ljZSwKKwkJKiogdGhlbiB3ZSBhcmUgZW5zdXJlZCB0aGF0IHRoZSB2YWx1ZXMgaGF2ZSBub3QgYmVlbgorCQkqKiBjaGFuZ2VkLiAgSWYgdGhleSBoYXZlLCB0aGVuIGp1c3QgdHJ5IGFnYWluLiAgRG9uJ3QKKwkJKiogdHJ5IG1vcmUgdGhhbiAxMCB0aW1lcy4uLmlmIHdlIHN0aWxsIGhhdmVuJ3QgZ290IGl0LAorCQkqKiB0aGVuIHRoZSB2YWx1ZXMgd2UgZG8gaGF2ZSBhcmUgcHJvYmFibHkgZ29vZCBlbm91Z2guCisJCSoqIFRoaXMgc2NoZW1lIGZvciBjb3B5aW5nIHZhbHVlcyBpcyB1c2VkIGluIG9yZGVyIHRvCisJCSoqIHByZXZlbnQgaGF2aW5nIHRvIGJsb2NrIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGlsZQorCQkqKiB3ZSBjb3B5IHRoZSB2YWx1ZXMuCisJCSovCisKKwkJaWYgKGlzZ2V0KQorCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQltZW1jcHkoZGF0YSwgJndsYW5kZXYtPnJ4LCBzaXplb2Yod2xhbmRldi0+cngpKTsKKwkJCQltZW1jcHkodGVzdCwgJndsYW5kZXYtPnJ4LCBzaXplb2Yod2xhbmRldi0+cngpKTsKKwkJCQlpZiAobWVtY21wKGRhdGEsIHRlc3QsIHNpemVvZih3bGFuZGV2LT5yeCkpID09IDApIGJyZWFrOworCQkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzOgorCisJCS8qCisJCSoqIE5vdGU6IFRoZSB2YWx1ZXMgaW4gdGhpcyByZWNvcmQgYXJlIGNoYW5nZWQgYnkgdGhlCisJCSoqIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGd1YXJhbnRlZWQKKwkJKiogdG8gYmUgc3RhYmxlIHdoaWxlIHRoZXkgYXJlIGJlaW5nIGNvcGllZC4gIFNlZSB0aGUKKwkJKiogbm90ZSBhYm92ZSBhYm91dCBjb3B5aW5nIHZhbHVlcy4KKwkJKi8KKworCQlpZiAoaXNnZXQpIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhodyk7CisKKwkJCS8qID8/Pz8/PyBXZSBuZWVkIHRvIHdhaXQgYSBiaXQgaGVyZSBmb3IgdGhlICovCisJCQkvKiAgIHRhbGxpZXMgdG8gZ2V0IHVwZGF0ZWQuID8/Pz8/PyAqLworCQkJLyogTVNNOiBUT0RPOiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgaXMgdG8KKwkJCSAqICAgICAgYWRkIGEgImNvbW10YWxsaWUiIHdhaXQgcXVldWUgdG8gdGhlCisJCQkgKiAgICAgIHByaXYgc3RydWN0dXJlIHRoYXQgZ2V0cyBydW4gZXZlcnkgdGltZQorCQkJICogICAgICB3ZSByZWNlaXZlIGEgY29tbXRhbGx5IGluZm8gZnJhbWUuCisJCQkgKiAgICAgIFRoaXMgcHJvY2VzcyB3b3VsZCBzbGVlcCBvbiB0aGF0CisJCQkgKiAgICAgIHF1ZXVlIGFuZCBnZXQgYXdha2VuZWQgd2hlbiB0aGUKKwkJCSAqICAgICAgdGhlIHJlcXVlc3RlZCBpbmZvIGZyYW1lIGFycml2ZXMuCisJCQkgKiAgICAgIERvbid0IGhhdmUgdGltZSB0byBkbyBhbmQgdGVzdCB0aGlzCisJCQkgKiAgICAgIHJpZ2h0IG5vdy4KKwkJCSAqLworCisJCQkvKiBVZ2gsIHRoaXMgaXMgbmFzdHkuICovCisJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCW1lbWNweShkYXRhLAorCQkJCSAgICAgICAmaHctPnRhbGxpZXMsCisJCQkJICAgICAgIHNpemVvZihody0+dGFsbGllcykpOworCQkJCW1lbWNweSh0ZXN0LAorCQkJCSAgICAgICAmaHctPnRhbGxpZXMsCisJCQkJICAgICAgIHNpemVvZihody0+dGFsbGllcykpOworCQkJCWlmICggbWVtY21wKGRhdGEsCisJCQkJCSAgICB0ZXN0LAorCQkJCQkgICAgc2l6ZW9mKGh3LT50YWxsaWVzKSkgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBdXRoZW50aWNhdGVkOgorCisJCWlmIChpc2dldCkgeworCQkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCQltYWNhcnJheS0+Y250ID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJCQlpZiAoIW9sZC5hc3NvY1tpXSkgeworCQkJCQltZW1jcHkobWFjYXJyYXktPmRhdGFbbWFjYXJyYXktPmNudF0sIG9sZC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKTsKKwkJCQkJbWFjYXJyYXktPmNudCsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkFzc29jaWF0ZWQ6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkJCW1hY2FycmF5LT5jbnQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQkJCWlmIChvbGQuYXNzb2NbaV0pIHsKKwkJCQkJbWVtY3B5KG1hY2FycmF5LT5kYXRhW21hY2FycmF5LT5jbnRdLCBvbGQuYWRkcltpXSwgV0xBTl9BRERSX0xFTik7CisJCQkJCW1hY2FycmF5LT5jbnQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJQb3dlclNhdmVVc2VyQ291bnQ6CisKKwkJaWYgKGlzZ2V0KQorCQkJKnVpbnQzMiA9IGh3LT5wc3VzZXJjb3VudDsKKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJDb21tZW50OgorCisJCWlmIChpc2dldCkgeworCQkJcHN0ci0+bGVuID0gc3RybGVuKGh3LT5jb21tZW50KTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCBody0+Y29tbWVudCwgcHN0ci0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IHBzdHItPmxlbjsKKwkJCWlmIChjbnQgPCAwKSBjbnQgPSAwOworCQkJaWYgKGNudCA+PSBzaXplb2YoaHctPmNvbW1lbnQpKQorCQkJCWNudCA9IHNpemVvZihody0+Y29tbWVudCktMTsKKwkJCW1lbWNweShody0+Y29tbWVudCwgcHN0ci0+ZGF0YSwgY250KTsKKwkJCXBzdHItPmRhdGFbY250XSA9ICdcMCc7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NNb2RlOgorCisJCWlmIChpc2dldCkKKwkJCSp1aW50MzIgPSBody0+YWNjZXNzbW9kZTsKKwkJZWxzZQorCQkJcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZShodywgKnVpbnQzMik7CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzQWxsb3c6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQltYWNhcnJheS0+Y250ID0gaHctPmFsbG93LmNudDsKKwkJCW1lbWNweShtYWNhcnJheS0+ZGF0YSwgaHctPmFsbG93LmFkZHIsCisJCQkgICAgICAgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKwkJfSBlbHNlIHsKKwkJCXByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KGh3LCBtYWNhcnJheSk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NEZW55OgorCisJCWlmIChpc2dldCkgeworCQkJbWFjYXJyYXktPmNudCA9IGh3LT5kZW55LmNudDsKKwkJCW1lbWNweShtYWNhcnJheS0+ZGF0YSwgaHctPmRlbnkuYWRkciwKKwkJCSAgICAgICBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCQl9IGVsc2UgeworCQkJcHJpc20ybWliX3ByaXZfYWNjZXNzZGVueShodywgbWFjYXJyYXkpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQ2hhbm5lbEluZm9SZXN1bHRzOgorCisJCWlmIChpc2dldCkgeworCQkJZG9uZSA9IGF0b21pY19yZWFkKCZody0+Y2hhbm5lbF9pbmZvLmRvbmUpOworCQkJaWYgKGRvbmUgPT0gMCkgeworCQkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGRvbmUgPT0gMSkgeworCQkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrLCB1aW50MzIgKz0gNSkgeworCQkJCXVpbnQzMlswXSA9IGkrMTsKKwkJCQl1aW50MzJbMV0gPSBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLmFubDsKKwkJCQl1aW50MzJbMl0gPSBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLnBubDsKKwkJCQl1aW50MzJbM10gPSAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtpXS5hY3RpdmUgJiBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUpID8gMSA6IDA7CisJCQkJdWludDMyWzRdID0gKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbaV0uYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFKSA/IDEgOiAwOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRCU1NUeXBlOgorCisJCWlmIChpc2dldCkKKwkJCSp1aW50MzIgPSBody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKKwkJZWxzZQorCQkJaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAqdWludDMyOworCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTogeworCQloZmEzODR4X1dQQURhdGFfdCB3cGE7CisJCWlmIChpc2dldCkgeworCQkJaGZhMzg0eF9kcnZyX2dldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkoVUlOVDggKikgJndwYSwgc2l6ZW9mKHdwYSkpOworCQkJcHN0ci0+bGVuID0gaGZhMzg0eDJob3N0XzE2KHdwYS5kYXRhbGVuKTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCXdwYS5kYXRhbGVuID0gaG9zdDJoZmEzODR4XzE2KHBzdHItPmxlbik7CisJCQltZW1jcHkod3BhLmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJKFVJTlQ4ICopICZ3cGEsIHNpemVvZih3cGEpKTsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfRVJST1IoIlVuaGFuZGxlZCBESUQgMHglMDh4XG4iLCBtaWItPmRpZCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4oMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9hdXRobGlzdAorKgorKiBHZXQgYSBjb3B5IG9mIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgbGlzdCAgICAgTGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoCitoZmEzODR4X3QgICAgICAgICAgICAgKmh3LAorcHJpc20yc3RhX2F1dGhsaXN0X3QgICpsaXN0KQoreworCXByaXNtMnN0YV9hdXRobGlzdF90ICB0ZXN0OworCWludCAgICAgICAgICAgICAgICAgICBpOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIE5vdGU6IFRoZSB2YWx1ZXMgaW4gdGhpcyByZWNvcmQgYXJlIGNoYW5nZWQgYnkgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUgd2hpbGUKKwkqKiB0aGV5IGFyZSBiZWluZyBjb3BpZWQuICBIb3dldmVyLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbAorCSoqIHRha2UgcHJpb3JpdHkgb3ZlciB0aGlzIGNvZGUuICBIZW5jZSwgaWYgdGhlIHNhbWUgdmFsdWVzIGFyZQorCSoqIGNvcGllZCB0d2ljZSwgdGhlbiB3ZSBhcmUgZW5zdXJlZCB0aGF0IHRoZSB2YWx1ZXMgaGF2ZSBub3QKKwkqKiBiZWVuIGNoYW5nZWQuICBJZiB0aGV5IGhhdmUsIHRoZW4ganVzdCB0cnkgYWdhaW4uICBEb24ndCB0cnkKKwkqKiBtb3JlIHRoYW4gMTAgdGltZXMuLi50aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zIGlzCisJKiogdW5saWtlbHkgdG8gYmUgY2hhbmdpbmcgZnJlcXVlbnRseSBlbm91Z2ggdGhhdCB3ZSBjYW4ndCBnZXQKKwkqKiBhIHNuYXBzaG90IGluIDEwIHRyaWVzLiAgRG9uJ3QgdHJ5IG1vcmUgdGhhbiB0aGlzIHNvIHRoYXQgd2UKKwkqKiBkb24ndCByaXNrIGxvY2tpbmctdXAgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSWYgd2Ugc3RpbGwKKwkqKiBoYXZlbid0IGdvdCB0aGUgc25hcHNob3QsIHRoZW4gZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZSBhbmQKKwkqKiByZXR1cm4gYW4gZW1wdHkgbGlzdCAoc2luY2UgdGhpcyBpcyB0aGUgb25seSB2YWxpZCBsaXN0IHRoYXQKKwkqKiB3ZSBjYW4gZ3VhcmVudGVlKS4gIFRoaXMgc2NoZW1lIGZvciBjb3B5aW5nIHZhbHVlcyBpcyB1c2VkIGluCisJKiogb3JkZXIgdG8gcHJldmVudCBoYXZpbmcgdG8gYmxvY2sgdGhlIGludGVycnVwdCBoYW5kbGVyIHdoaWxlCisJKiogd2UgY29weSB0aGUgdmFsdWVzLgorCSovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZW1jcHkobGlzdCwgJmh3LT5hdXRobGlzdCwgc2l6ZW9mKHByaXNtMnN0YV9hdXRobGlzdF90KSk7CisJCW1lbWNweSgmdGVzdCwgJmh3LT5hdXRobGlzdCwgc2l6ZW9mKHByaXNtMnN0YV9hdXRobGlzdF90KSk7CisJCWlmIChtZW1jbXAobGlzdCwgJnRlc3QsIHNpemVvZihwcmlzbTJzdGFfYXV0aGxpc3RfdCkpID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA+PSAxMCkgeworCQlsaXN0LT5jbnQgPSAwOworCQlXTEFOX0xPR19FUlJPUigiQ291bGQgbm90IG9idGFpbiBzbmFwc2hvdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLlxuIik7CisJCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZQorKgorKiBTZXQgdGhlIEFjY2VzcyBNb2RlLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtb2RlICAgICBOZXcgYWNjZXNzIG1vZGUuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3Ntb2RlKAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorVUlOVDMyICAgICAgICAgICAgbW9kZSkKK3sKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgb2xkOworCWludCAgICAgICAgICAgICAgICAgICBpLCBqLCBkZWF1dGg7CisJVUlOVDggICAgICAgICAgICAgICAgICphZGRyOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIElmIHRoZSBtb2RlIGlzIG5vdCBjaGFuZ2luZyBvciBpdCBpcyBjaGFuZ2luZyB0byAiQWxsIiwgdGhlbiBpdCdzCisJKiogb2theSB0byBnbyBhaGVhZCB3aXRob3V0IGEgbG90IG9mIG1lc3NpbmcgYXJvdW5kLiAgT3RoZXJ3aXNlLCB0aGUKKwkqKiBhY2Nlc3MgbW9kZSBpcyBjaGFuZ2luZyBpbiBhIHdheSB0aGF0IG1heSBsZWF2ZSBzb21lIHN0YXRpb25zCisJKiogYXV0aGVudGljYXRlZCB3aGljaCBzaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQuICBJdCB3aWxsIGJlCisJKiogbmVjZXNzYXJ5IHRvIGRlLWF1dGhlbnRpY2F0ZSB0aGVzZSBzdGF0aW9ucy4KKwkqLworCisJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfQUxMIHx8IG1vZGUgPT0gaHctPmFjY2Vzc21vZGUpIHsKKwkJaHctPmFjY2Vzc21vZGUgPSBtb2RlOworCQlyZXR1cm47CisJfQorCisJLyoKKwkqKiBTd2l0Y2ggdG8gdGhlIG5ldyBhY2Nlc3MgbW9kZS4gIE9uY2UgdGhpcyBpcyBkb25lLCB0aGVuIHRoZSBpbnRlcnJ1cHQKKwkqKiBoYW5kbGVyICh3aGljaCB1c2VzIHRoaXMgdmFsdWUpIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYXV0aGVudGljYXRpbmcKKwkqKiBBRERJVElPTkFMIHN0YXRpb25zIHdoaWNoIHNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZC4gIFRoZW4gZ2V0IGEKKwkqKiBjb3B5IG9mIHRoZSBjdXJyZW50IGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4KKwkqLworCisJaHctPmFjY2Vzc21vZGUgPSBtb2RlOworCisJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJLyoKKwkqKiBOb3cgZ28gdGhyb3VnaCB0aGUgbGlzdCBvZiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgKHNvbWUKKwkqKiBvZiB3aGljaCBtaWdodCBkZS1hdXRoZW50aWNhdGUgdGhlbXNlbHZlcyB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZyBpdAorCSoqIGJ1dCB0aGF0IGlzIG9rYXkpLiAgQW55IHN0YXRpb24gd2hpY2ggbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGFjY2VzcworCSoqIG1vZGUsIG11c3QgYmUgZGUtYXV0aGVudGljYXRlZC4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQlhZGRyID0gb2xkLmFkZHJbaV07CisKKwkJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfTk9ORSkKKwkJCWRlYXV0aCA9IDE7CisJCWVsc2UgeworCQkJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfQUxMT1cpIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgaHctPmFsbG93LmNudDsgaisrKQorCQkJCQlpZiAobWVtY21wKGFkZHIsIGh3LT5hbGxvdy5hZGRyW2pdLAorCQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApCisJCQkJCQlicmVhazsKKwkJCQlkZWF1dGggPSAoaiA+PSBody0+YWxsb3cuY250KTsKKwkJCX0gZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGh3LT5kZW55LmNudDsgaisrKQorCQkJCQlpZiAobWVtY21wKGFkZHIsIGh3LT5kZW55LmFkZHJbal0sCisJCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCWRlYXV0aCA9IChqIDwgaHctPmRlbnkuY250KTsKKwkJCX0KKwkJfQorCisJCWlmIChkZWF1dGgpIHByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKGh3LCBhZGRyKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93CisqCisqIENoYW5nZSB0aGUgbGlzdCBvZiBhbGxvd2VkIE1BQyBhZGRyZXNzZXMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbWFjYXJyYXkgIE5ldyBhcnJheSBvZiBNQUMgYWRkcmVzc2VzLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaSwgajsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBDaGFuZ2UgdGhlIGFjY2VzcyBsaXN0LiAgTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgYmUgaW4KKwkqKiB0aGUgbWlkZGxlIG9mIHVzaW5nIHRoZSBhY2Nlc3MgbGlzdCEhISAgU2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyCisJKiogd2lsbAlhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIHRoaXMgcHJvY2VzcyBhbmQgdGhpcyBpcyB0aGUgb25seQorCSoqIHByb2Nlc3MgdGhhdCB3aWxsIG1vZGlmeSB0aGUgbGlzdCwgdGhpcyBwcm9ibGVtIGNhbiBiZSBoYW5kbGVkIGFzCisJKiogZm9sbG93czoKKwkqKgorCSoqICAgIDEuIFNldCB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICAyLiBDaGFuZ2UgdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QuCisJKiogICAgMy4gQ2xlYXIgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgNC4gQ2hhbmdlIHRoZSBiYWNrdXAgY29weSBvZiB0aGUgbGlzdC4KKwkqKgorCSoqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGNoZWNrIHRoZSAibW9kaWZ5IiBmbGFnLiAgSWYgTk9UIHNldCwgdGhlbgorCSoqIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0IGlzIHZhbGlkIGFuZCBtYXkgYmUgdXNlZC4gIE90aGVyd2lzZSwgdGhlCisJKiogZmlyc3QgY29weSBpcyBiZWluZyBjaGFuZ2VkIGJ1dCB0aGUgYmFja3VwIGNvcHkgaXMgdmFsaWQgYW5kIG1heSBiZQorCSoqIHVzZWQuICBEb2luZyB0aGluZ3MgdGhpcyB3YXkgcHJldmVudHMgaGF2aW5nIHRvIGhhdmUgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYmxvY2sgd2hpbGUgdGhlIGxpc3QgaXMgYmVpbmcgdXBkYXRlZC4KKwkqLworCisJaHctPmFsbG93Lm1vZGlmeSA9IDE7CisKKwlody0+YWxsb3cuY250ID0gbWFjYXJyYXktPmNudDsKKwltZW1jcHkoaHctPmFsbG93LmFkZHIsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJaHctPmFsbG93Lm1vZGlmeSA9IDA7CisKKwlody0+YWxsb3cuY250MSA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5hbGxvdy5hZGRyMSwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwkvKgorCSoqIElmIHRoZSBjdXJyZW50IGFjY2VzcyBtb2RlIGlzICJBbGxvdyIsIHRoZW4gY2hhbmdpbmcgdGhlIGFjY2VzcworCSoqIGxpc3QgbWF5IGxlYXZlIHNvbWUgc3RhdGlvbnMgYXV0aGVudGljYXRlZCB3aGljaCBzaG91bGQgbm90IGJlCisJKiogYXV0aGVudGljYXRlZC4gIEl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGRlLWF1dGhlbnRpY2F0ZSB0aGVzZQorCSoqIHN0YXRpb25zLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGEgbG90IG9mIGZ1c3MuCisJKi8KKworCWlmIChody0+YWNjZXNzbW9kZSA9PSBXTEFOX0FDQ0VTU19BTExPVykgeworCisJCS8qCisJCSoqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucyAoc29tZSBvZgorCQkqKiB3aGljaCBtaWdodCBkZS1hdXRoZW50aWNhdGUgdGhlbXNlbHZlcyB3aGlsZSB3ZSBhcmUKKwkJKiogcHJvY2Vzc2luZyBpdCBidXQgdGhhdCBpcyBva2F5KS4gIEFueSBzdGF0aW9uIHdoaWNoIGlzCisJCSoqIG5vIGxvbmdlciBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIHN0YXRpb25zLCBtdXN0IGJlCisJCSoqIGRlLWF1dGhlbnRpY2F0ZWQuCisJCSovCisKKwkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBody0+YWxsb3cuY250OyBqKyspCisJCQkJaWYgKG1lbWNtcChvbGQuYWRkcltpXSwgaHctPmFsbG93LmFkZHJbal0sCisJCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaiA+PSBody0+YWxsb3cuY250KQorCQkJCXByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKGh3LCBvbGQuYWRkcltpXSk7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkKKyoKKyogQ2hhbmdlIHRoZSBsaXN0IG9mIGRlbmllZCBNQUMgYWRkcmVzc2VzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1hY2FycmF5ICBOZXcgYXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaSwgajsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBDaGFuZ2UgdGhlIGFjY2VzcyBsaXN0LiAgTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgYmUgaW4KKwkqKiB0aGUgbWlkZGxlIG9mIHVzaW5nIHRoZSBhY2Nlc3MgbGlzdCEhISAgU2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyCisJKiogd2lsbCBhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIHRoaXMgcHJvY2VzcyBhbmQgdGhpcyBpcyB0aGUgb25seQorCSoqIHByb2Nlc3MgdGhhdCB3aWxsIG1vZGlmeSB0aGUgbGlzdCwgdGhpcyBwcm9ibGVtIGNhbiBiZSBoYW5kbGVkIGFzCisJKiogZm9sbG93czoKKwkqKgorCSoqICAgIDEuIFNldCB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICAyLiBDaGFuZ2UgdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QuCisJKiogICAgMy4gQ2xlYXIgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgNC4gQ2hhbmdlIHRoZSBiYWNrdXAgY29weSBvZiB0aGUgbGlzdC4KKwkqKgorCSoqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGNoZWNrIHRoZSAibW9kaWZ5IiBmbGFnLiAgSWYgTk9UIHNldCwgdGhlbgorCSoqIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0IGlzIHZhbGlkIGFuZCBtYXkgYmUgdXNlZC4gIE90aGVyd2lzZSwgdGhlCisJKiogZmlyc3QgY29weSBpcyBiZWluZyBjaGFuZ2VkIGJ1dCB0aGUgYmFja3VwIGNvcHkgaXMgdmFsaWQgYW5kIG1heSBiZQorCSoqIHVzZWQuICBEb2luZyB0aGluZ3MgdGhpcyB3YXkgcHJldmVudHMgaGF2aW5nIHRvIGhhdmUgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYmxvY2sgd2hpbGUgdGhlIGxpc3QgaXMgYmVpbmcgdXBkYXRlZC4KKwkqLworCisJaHctPmRlbnkubW9kaWZ5ID0gMTsKKworCWh3LT5kZW55LmNudCA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5kZW55LmFkZHIsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJaHctPmRlbnkubW9kaWZ5ID0gMDsKKworCWh3LT5kZW55LmNudDEgPSBtYWNhcnJheS0+Y250OworCW1lbWNweShody0+ZGVueS5hZGRyMSwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwkvKgorCSoqIElmIHRoZSBjdXJyZW50IGFjY2VzcyBtb2RlIGlzICJEZW55IiwgdGhlbiBjaGFuZ2luZyB0aGUgYWNjZXNzCisJKiogbGlzdCBtYXkgbGVhdmUgc29tZSBzdGF0aW9ucyBhdXRoZW50aWNhdGVkIHdoaWNoIHNob3VsZCBub3QgYmUKKwkqKiBhdXRoZW50aWNhdGVkLiAgSXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZGUtYXV0aGVudGljYXRlIHRoZXNlCisJKiogc3RhdGlvbnMuICBPdGhlcndpc2UsIHRoZSBsaXN0IGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQgYSBsb3Qgb2YgZnVzcy4KKwkqLworCisJaWYgKGh3LT5hY2Nlc3Ntb2RlID09IFdMQU5fQUNDRVNTX0RFTlkpIHsKKworCQkvKgorCQkqKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgKHNvbWUgb2YKKwkJKiogd2hpY2ggbWlnaHQgZGUtYXV0aGVudGljYXRlIHRoZW1zZWx2ZXMgd2hpbGUgd2UgYXJlCisJCSoqIHByb2Nlc3NpbmcgaXQgYnV0IHRoYXQgaXMgb2theSkuICBBbnkgc3RhdGlvbiB3aGljaCBpcworCQkqKiBub3cgaW4gdGhlIGxpc3Qgb2YgZGVuaWVkIHN0YXRpb25zLCBtdXN0IGJlIGRlLWF1dGhlbnRpY2F0ZWQuCisJCSovCisKKwkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspCisJCQlmb3IgKGogPSAwOyBqIDwgaHctPmRlbnkuY250OyBqKyspCisJCQkJaWYgKG1lbWNtcChvbGQuYWRkcltpXSwgaHctPmRlbnkuYWRkcltqXSwKKwkJCQkJCQkgV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZShodywgb2xkLmFkZHJbaV0pOworCQkJCQlicmVhazsKKwkJCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZQorKgorKiBEZS1hdXRoZW50aWNhdGUgYSBzdGF0aW9uLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgYSBIYW5kb3ZlckFkZHJlc3MKKyogaW5mb3JtYXRpb24gZnJhbWUgdG8gdGhlIGZpcm13YXJlLiAgVGhpcyBzaG91bGQgd29yaywgYWNjb3JkaW5nIHRvCisqIEludGVyc2lsLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBhZGRyICAgICBNQUMgYWRkcmVzcyBvZiBzdGF0aW9uIHRvIGJlIGRlLWF1dGhlbnRpY2F0ZWQuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQ4ICAgICAgICAgICAgICphZGRyKQoreworCURCRkVOVEVSOworCWhmYTM4NHhfZHJ2cl9oYW5kb3ZlcihodywgYWRkcik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyCisqCisqIENvbnZlcnQgdGhlIHBzdHIgZGF0YSBpbiB0aGUgV0xBTiBtZXNzYWdlIHN0cnVjdHVyZSBpbnRvIGFuIGhmYTM4NHgKKyogYnl0ZSBzdHJpbmcgZm9ybWF0LgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVzdHIJCWhmYTM4NHggYnl0ZSBzdHJpbmcgZGF0YSB0eXBlCisqCXBzdHIJCXdsYW4gbWVzc2FnZSBkYXRhCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCURCRkVOVEVSOworCisJYnl0ZXN0ci0+bGVuID0gaG9zdDJoZmEzODR4XzE2KChVSU5UMTYpKHBzdHItPmxlbikpOworCW1lbWNweShieXRlc3RyLT5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYQorKgorKiBDb252ZXJ0IHRoZSBwc3RyIGRhdGEgaW4gdGhlIFdMQU4gbWVzc2FnZSBzdHJ1Y3R1cmUgaW50byBhbiBoZmEzODR4CisqIGJ5dGUgYXJlYSBmb3JtYXQuCisqCisqIEFyZ3VtZW50czoKKyoJYnl0ZWFyZWEJaGZhMzg0eCBieXRlIGFyZWEgZGF0YSB0eXBlCisqCXBzdHIJCXdsYW4gbWVzc2FnZSBkYXRhCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShVSU5UOCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJREJGRU5URVI7CisKKwltZW1jcHkoYnl0ZWFyZWEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIKKyoKKyogQ29udmVydCB0aGUgZGF0YSBpbiBhbiBoZmEzODR4IGJ5dGUgc3RyaW5nIGZvcm1hdCBpbnRvIGEKKyogcHN0ciBpbiB0aGUgV0xBTiBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVzdHIJCWhmYTM4NHggYnl0ZSBzdHJpbmcgZGF0YSB0eXBlCisqCW1zZwkJd2xhbiBtZXNzYWdlCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCURCRkVOVEVSOworCisJcHN0ci0+bGVuID0gKFVJTlQ4KShoZmEzODR4Mmhvc3RfMTYoKFVJTlQxNikoYnl0ZXN0ci0+bGVuKSkpOworCW1lbWNweShwc3RyLT5kYXRhLCBieXRlc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cgorKgorKiBDb252ZXJ0IHRoZSBkYXRhIGluIGFuIGhmYTM4NHggYnl0ZSBhcmVhIGZvcm1hdCBpbnRvIGEgcHN0cgorKiBpbiB0aGUgV0xBTiBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVhcmVhCWhmYTM4NHggYnl0ZSBhcmVhIGRhdGEgdHlwZQorKgltc2cJCXdsYW4gbWVzc2FnZQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyLCBpbnQgbGVuKQoreworCURCRkVOVEVSOworCisJcHN0ci0+bGVuID0gKFVJTlQ4KWxlbjsKKwltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZWFyZWEsIGxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50CisqCisqIENvbnZlcnQgYW4gaGZhMzg0eCBpbnRlZ2VyIGludG8gYSB3bGFuIGludGVnZXIKKyoKKyogQXJndW1lbnRzOgorKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCisqCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpCit7CisJREJGRU5URVI7CisKKwkqd2xhbmludCA9IChVSU5UMzIpaGZhMzg0eDJob3N0XzE2KCpwcmlzbTJpbnQpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludAorKgorKiBDb252ZXJ0IGEgd2xhbiBpbnRlZ2VyIGludG8gYW4gaGZhMzg0eCBpbnRlZ2VyCisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludChVSU5UMTYgKnByaXNtMmludCwgVUlOVDMyICp3bGFuaW50KQoreworCURCRkVOVEVSOworCisJKnByaXNtMmludCA9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KSgqd2xhbmludCkpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtCisqCisqIENvbnZlcnQgdGhlIGhmYTM4NHggZW51bWVyYXRlZCBpbnQgaW50byBhIHA4MDIxMSBlbnVtZXJhdGVkIGludAorKgorKiBBcmd1bWVudHM6CisqCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKKyoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgorKglyaWQJCWhmYTM4NHggcmVjb3JkIGlkCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpCit7CisJREJGRU5URVI7CisKKwkvKiBBdCB0aGUgbW9tZW50LCB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGhhc24ndAorCXByZXNlbnRlZCBpdHNlbGYuIEFsbCB0aGUgd2xhbiBlbnVtZXJhdGVkIHZhbHVlcyBhcmUKKwlhIDEtdG8tMSBtYXRjaCBhZ2FpbnN0IHRoZSBQcmlzbTIgZW51bWVyYXRlZCB2YWx1ZXMqLworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bQorKgorKiBDb252ZXJ0IHRoZSBwODAyMTEgZW51bWVyYXRlZCBpbnQgaW50byBhbiBoZmEzODR4IGVudW1lcmF0ZWQgaW50CisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtKFVJTlQxNiAqcHJpc20yZW51bSwgVUlOVDMyICp3bGFuZW51bSwgVUlOVDE2IHJpZCkKK3sKKwlEQkZFTlRFUjsKKworCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0CisJcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQorCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0CisqCisqIENvbnZlcnQgdGhlIGhmYTM4NHggYml0IGFyZWEgaW50byBhIHdsYW4gb2N0ZXQgc3RyaW5nLgorKgorKiBBcmd1bWVudHM6CisqCXJhdGUJCVByaXNtMiBiaXQgYXJlYQorKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZworKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlVSU5UOAlsZW47CisJVUlOVDgJKmRhdGFyYXRlOworCisJREJGRU5URVI7CisKKwlsZW4gPSAwOworCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKKworIAkvKiAxIE1icHMgKi8KKwlpZiAoIEJJVDAgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCkyOworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiAyIE1icHMgKi8KKwlpZiAoIEJJVDEgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCk0OworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiA1LjUgTWJwcyAqLworCWlmICggQklUMiAmICgqcmF0ZSkgKSB7CisJCWxlbiArPSAoVUlOVDgpMTsKKwkJKmRhdGFyYXRlID0gKFVJTlQ4KTExOworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiAxMSBNYnBzICovCisJaWYgKCBCSVQzICYgKCpyYXRlKSApIHsKKwkJbGVuICs9IChVSU5UOCkxOworCQkqZGF0YXJhdGUgPSAoVUlOVDgpMjI7CisJCWRhdGFyYXRlKys7CisJfQorCisJcHN0ci0+bGVuID0gbGVuOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0CisqCisqIENvbnZlcnQgdGhlIHdsYW4gb2N0ZXQgc3RyaW5nIGludG8gYW4gaGZhMzg0eCBiaXQgYXJlYS4KKyoKKyogQXJndW1lbnRzOgorKglyYXRlCQlQcmlzbTIgYml0IGFyZWEKKyoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJVUlOVDgJKmRhdGFyYXRlOworCWludAlpOworCisJREJGRU5URVI7CisKKwkqcmF0ZSA9IDA7CisKKwlkYXRhcmF0ZSA9IHBzdHItPmRhdGE7CisKKwlmb3IgKCBpPTA7IGkgPCBwc3RyLT5sZW47IGkrKywgZGF0YXJhdGUrKyApIHsKKwkJc3dpdGNoICgqZGF0YXJhdGUpIHsKKwkJY2FzZSAyOiAvKiAxIE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDA7CisJCQlicmVhazsKKwkJY2FzZSA0OiAvKiAyIE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDE7CisJCQlicmVhazsKKwkJY2FzZSAxMTogLyogNS41IE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDI7CisJCQlicmVhazsKKwkJY2FzZSAyMjogLyogMTEgTWJwcyAqLworCQkJKnJhdGUgfD0gQklUMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0xBTl9MT0dfREVCVUcoMSwgIlVucmVjb2dpbnplZCBSYXRlIG9mICVkXG4iLAorCQkJCSpkYXRhcmF0ZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIKKyoKKyogUmV0cmlldmVzIGEgcGFydGljdWxhciBncm91cCBhZGRyZXNzIGZyb20gdGhlIGxpc3Qgb2YKKyogZ3JvdXAgYWRkcmVzc2VzLgorKgorKiBBcmd1bWVudHM6CisqCWRpZAkJbWliaXRlbSBkaWQKKyoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKKyoJcHJpdgkJcHJpc20yIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X2dldF9ncnBhZGRyKFVJTlQzMiBkaWQsIHA4MDIxMXBzdHJkX3QgKnBzdHIsCisJaGZhMzg0eF90ICpodyApCit7CisJaW50CWluZGV4OworCisJREJGRU5URVI7CisKKwlpbmRleCA9IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoZGlkKTsKKworCWlmICggaW5kZXggPj0gMCApIHsKKwkJcHN0ci0+bGVuID0gV0xBTl9BRERSX0xFTjsKKwkJbWVtY3B5KHBzdHItPmRhdGEsIGh3LT5kb3QxMV9ncnBfYWRkcltpbmRleF0sCisJCQlXTEFOX0FERFJfTEVOKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3NldF9ncnBhZGRyCisqCisqIENvbnZlcnQgdGhlIHdsYW4gb2N0ZXQgc3RyaW5nIGludG8gYW4gaGZhMzg0eCBiaXQgYXJlYS4KKyoKKyogQXJndW1lbnRzOgorKglkaWQJCW1pYml0ZW0gZGlkCisqCWJ1ZgorKglncm91cHMKKyoKKyogUmV0dXJuczoKKyoJMAlTdWNjZXNzCisqCSEwCUVycm9yCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3NldF9ncnBhZGRyKFVJTlQzMiBkaWQsIFVJTlQ4ICpwcmlzbTJidWYsCisJcDgwMjExcHN0cmRfdCAqcHN0ciwgaGZhMzg0eF90ICpodyApCit7CisJVUlOVDgJbm9fYWRkcltXTEFOX0FERFJfTEVOXTsKKwlpbnQJaW5kZXg7CisKKwlEQkZFTlRFUjsKKworCW1lbXNldChub19hZGRyLCAwLCBXTEFOX0FERFJfTEVOKTsKKwlpZiAobWVtY21wKG5vX2FkZHIsIHBzdHItPmRhdGEsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKworCQkvKgorCQkqKiBUaGUgYWRkcmVzcyBpcyBOT1QgMCBzbyB3ZSBhcmUgImFkZGluZyIgYW4gYWRkcmVzcyB0byB0aGUKKwkJKiogZ3JvdXAgYWRkcmVzcyBsaXN0LiAgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCB0cnlpbmcKKwkJKiogdG8gYWRkIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiBncm91cAorCQkqKiBhZGRyZXNzZXMgaW4gdGhlIGxpc3QuICBUaGUgbmV3IGFkZHJlc3MgaXMgYWRkZWQgdG8gdGhlCisJCSoqIGVuZCBvZiB0aGUgbGlzdCByZWdhcmRsZXNzIG9mIHRoZSBESUQgdXNlZCB0byBhZGQgdGhlCisJCSoqIGFkZHJlc3MuCisJCSovCisKKwkJaWYgKGh3LT5kb3QxMV9ncnBjbnQgPj0gTUFYX0dSUF9BRERSKSByZXR1cm4oLTEpOworCisJCW1lbWNweShody0+ZG90MTFfZ3JwX2FkZHJbaHctPmRvdDExX2dycGNudF0sIHBzdHItPmRhdGEsCisJCQkJCQkJCSBXTEFOX0FERFJfTEVOKTsKKwkJaHctPmRvdDExX2dycGNudCArPSAxOworCX0gZWxzZSB7CisKKwkJLyoKKwkJKiogVGhlIGFkZHJlc3MgaXMgMC4gIEludGVycHJldCB0aGlzIGFzICJkZWxldGluZyIgYW4gYWRkcmVzcworCQkqKiBmcm9tIHRoZSBncm91cCBhZGRyZXNzIGxpc3QuICBHZXQgdGhlIGFkZHJlc3MgaW5kZXggZnJvbQorCQkqKiB0aGUgRElELiAgSWYgdGhpcyBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHVzZWQgYWRkcmVzc2VzLAorCQkqKiB0aGVuIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgYnkgc2hpZnRpbmcgYWxsIGZvbGxvd2luZworCQkqKiBhZGRyZXNzZXMgZG93bi4gIFRoZW4gY2xlYXIgdGhlIGxhc3QgYWRkcmVzcyAod2hpY2ggc2hvdWxkCisJCSoqIG5vdyBiZSB1bnVzZWQpLiAgSWYgdGhlIGFkZHJlc3MgaW5kZXggaXMgTk9UIHdpdGhpbiB0aGUKKwkJKiogcmFuZ2Ugb2YgdXNlZCBhZGRyZXNzZXMsIHRoZW4ganVzdCBpZ25vcmUgdGhlIGFkZHJlc3MuCisJCSovCisKKwkJaW5kZXggPSBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KGRpZCk7CisJCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgaHctPmRvdDExX2dycGNudCkgeworCQkJaHctPmRvdDExX2dycGNudCAtPSAxOworCQkJbWVtbW92ZShody0+ZG90MTFfZ3JwX2FkZHJbaW5kZXhdLAorCQkJCWh3LT5kb3QxMV9ncnBfYWRkcltpbmRleCArIDFdLAorCQkJCSgoaHctPmRvdDExX2dycGNudCktaW5kZXgpICogV0xBTl9BRERSX0xFTik7CisJCQltZW1zZXQoaHctPmRvdDExX2dycF9hZGRyW2h3LT5kb3QxMV9ncnBjbnRdLCAwLAorCQkJCQkJCQkgV0xBTl9BRERSX0xFTik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybigwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleAorKgorKiBHZXRzIHRoZSBpbmRleCBpbiB0aGUgZ3JvdXAgYWRkcmVzcyBsaXN0IGJhc2VkIG9uIHRoZSBkaWQuCisqCisqIEFyZ3VtZW50czoKKyoJZGlkCQltaWJpdGVtIGRpZAorKgorKiBSZXR1cm5zOgorKgk+PSAwCUlmIHZhbGlkIGRpZAorKgk8IDAJSWYgbm90IHZhbGlkIGRpZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleCggVUlOVDMyIGRpZCApCit7CisJaW50CWluZGV4OworCisJREJGRU5URVI7CisKKwlpbmRleCA9IC0xOworCisJc3dpdGNoIChkaWQpIHsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMToKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjoKKwkJaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzoKKwkJaW5kZXggPSAyOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNDoKKwkJaW5kZXggPSAzOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNToKKwkJaW5kZXggPSA0OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNjoKKwkJaW5kZXggPSA1OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNzoKKwkJaW5kZXggPSA2OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzODoKKwkJaW5kZXggPSA3OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOToKKwkJaW5kZXggPSA4OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTA6CisJCWluZGV4ID0gOTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczExOgorCQlpbmRleCA9IDEwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTI6CisJCWluZGV4ID0gMTE7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMzoKKwkJaW5kZXggPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE0OgorCQlpbmRleCA9IDEzOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTU6CisJCWluZGV4ID0gMTQ7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNjoKKwkJaW5kZXggPSAxNTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE3OgorCQlpbmRleCA9IDE2OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTg6CisJCWluZGV4ID0gMTc7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOToKKwkJaW5kZXggPSAxODsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIwOgorCQlpbmRleCA9IDE5OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjE6CisJCWluZGV4ID0gMjA7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMjoKKwkJaW5kZXggPSAyMTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIzOgorCQlpbmRleCA9IDIyOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjQ6CisJCWluZGV4ID0gMjM7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNToKKwkJaW5kZXggPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI2OgorCQlpbmRleCA9IDI1OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjc6CisJCWluZGV4ID0gMjY7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyODoKKwkJaW5kZXggPSAyNzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI5OgorCQlpbmRleCA9IDI4OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzA6CisJCWluZGV4ID0gMjk7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMToKKwkJaW5kZXggPSAzMDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMyOgorCQlpbmRleCA9IDMxOworCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiBpbmRleDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhYTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC0wLDAgKzEsMjUwMiBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvcHJpc20yc3RhLmMKKyoKKyogSW1wbGVtZW50cyB0aGUgc3RhdGlvbiBmdW5jdGlvbmFsaXR5IGZvciBwcmlzbTIKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIG1vZHVsZSBhbmQgbGludXggcGNtY2lhIHJvdXRpbmVzIGZvciB0aGUKKyogcHJpc20yIGRyaXZlci4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKyNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKSkKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjZGVmaW5lIERSSVZFUl9TVUZGSVgJIl9jcyIKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3BseCIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3BjaSIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3VzYiIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbHNlCisjZXJyb3IgIkhPU1RJRiB1bnN1cHBvcnRlZCBvciB1bmRlZmluZWQhIgorI2VuZGlmCisKK3N0YXRpYyBjaGFyCQkqdmVyc2lvbiA9ICJwcmlzbTIiIERSSVZFUl9TVUZGSVggIi5vOiAiIFdMQU5fUkVMRUFTRTsKK3N0YXRpYyBkZXZfaW5mb190CWRldl9pbmZvID0gInByaXNtMiIgRFJJVkVSX1NVRkZJWDsKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCB8fCBXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcHJpc20yc3RhX3N1c3BlbmRfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworc3RhdGljIGludCBwcmlzbTJzdGFfcmVzdW1lX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCisjZW5kaWYgLyogV0xBTl9QQ0kgKi8KKworc3RhdGljIHdsYW5kZXZpY2VfdCAqY3JlYXRlX3dsYW4odm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAtLU1vZHVsZSBQYXJhbWV0ZXJzICovCisKK2ludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZT0zMDsJLyogUmVzZXQgaG9sZCB0aW1lIGluIG1zICovCitpbnQJIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lPTEwMDsJLyogUmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMgKi8KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKK3N0YXRpYyBpbnQJcHJpc20yX2RvcmVzZXQ9MDsJCS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KKyNlbHNlCitzdGF0aWMgaW50ICAgICAgcHJpc20yX2RvcmVzZXQ9MTsJCS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KK2ludCAgICAgICAgICAgICBwcmlzbTJfYmFwX3RpbWVvdXQ9MTAwMDsgICAgICAgIC8qIEJBUCB0aW1lb3V0ICovCitpbnQJCXByaXNtMl9pcnFfZXZyZWFkX21heD0yMDsJLyogTWF4aW11bSBudW1iZXIgb2YKKwkJCQkJCSAqIGV2X3JlYWRzIChsb29wcykKKwkJCQkJCSAqIGluIGlycSBoYW5kbGVyCisJCQkJCQkgKi8KKyNlbmRpZgorCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitpbnQgcHJpc20yX2RlYnVnPTA7Cittb2R1bGVfcGFyYW0oIHByaXNtMl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJpc20yX2RlYnVnLCAicHJpc20yIGRlYnVnZ2luZyIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbSggcHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kb3Jlc2V0LCAiSXNzdWUgYSByZXNldCBvbiBpbml0aWFsaXphdGlvbiIpOworCittb2R1bGVfcGFyYW0oIHByaXNtMl9yZXNldF9ob2xkdGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOworbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAicmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMiKTsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKK21vZHVsZV9wYXJhbSggcHJpc20yX2JhcF90aW1lb3V0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfYmFwX3RpbWVvdXQsICJCdWZmZXJBY2Nlc3NQYXRoIFRpbWVvdXQgaW4gMTAqbiB1cyIpOworbW9kdWxlX3BhcmFtKCBwcmlzbTJfaXJxX2V2cmVhZF9tYXgsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfaXJxX2V2cmVhZF9tYXgsICJNYXhpbWltIG51bWJlciBvZiBldmVudCByZWFkcyBpbiBpbnRlcnJ1cHQgaGFuZGxlciIpOworI2VuZGlmCisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgaW50CXByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50CXByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiApOworc3RhdGljIGludCAgICAgIHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKK3N0YXRpYyBpbnQJcHJpc20yc3RhX21sbWVyZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50CXByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludAlwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgICAgICBwcmlzbTJzdGFfc2V0bXVsdGljYXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICAgbmV0ZGV2aWNlX3QgKmRldik7CisKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfaGFuZG92ZXIoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfdGFsbGllcygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgICAgIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hdXRocmVxKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcHJpc20yc3RhX3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogZG1wbWVtCisqCisqIERlYnVnIHV0aWxpdHkgZnVuY3Rpb24gdG8gZHVtcCBtZW1vcnkgdG8gdGhlIGtlcm5lbCBkZWJ1ZyBsb2cuCisqCisqIEFyZ3VtZW50czoKKyoJYnVmCXB0ciBkYXRhIHdlIHdhbnQgZHVtcGVkCisqCWxlbglsZW5ndGggb2YgZGF0YQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW5saW5lIHZvaWQgZG1wbWVtKHZvaWQgKmJ1ZiwgaW50IG4pCit7CisJaW50IGM7CisJZm9yICggYz0gMDsgYyA8IG47IGMrKykgeworCQlpZiAoIChjICUgMTYpID09IDAgKSBwcmludGsoS0VSTl9ERUJVRyJkbXBbJWRdOiAiLCBjKTsKKwkJcHJpbnRrKCIlMDJ4ICIsICgoVUlOVDgqKWJ1ZilbY10pOworCQlpZiAoIChjICUgMTYpID09IDE1ICkgcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoIChjICUgMTYpICE9IDAgKSBwcmludGsoIlxuIik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9vcGVuCisqCisqIFdMQU4gZGV2aWNlIG9wZW4gbWV0aG9kLiAgQ2FsbGVkIGZyb20gcDgwMjExbmV0ZGV2IHdoZW4ga2VybmVsCisqIGRldmljZSBvcGVuIChzdGFydCkgbWV0aG9kIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUKKyogU0lPQ1NJSUZGTEFHUyBpb2N0bCBjaGFuZ2luZyB0aGUgZmxhZ3MgYml0IElGRl9VUAorKiBmcm9tIGNsZWFyIHRvIHNldC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzCisqCT4wCWYvdyByZXBvcnRlZCBlcnJvcgorKgk8MAlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisjaWZkZWYgQU5DSUVOVF9NT0RVTEVfQ09ERQorCU1PRF9JTkNfVVNFX0NPVU5UOworI2VuZGlmCisKKwkvKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLgorCSAqIFRoZSBzZXR1cCBvZiB0aGUgTUFDIHNob3VsZCBiZSBzdWJzZXF1ZW50bHkgY29tcGxldGVkIHZpYQorCSAqIHRoZSBtbG1lIGNvbW1hbmRzLgorCSAqIEhpZ2hlciBsYXllcnMga25vdyB3ZSdyZSByZWFkeSBmcm9tIGRldi0+c3RhcnQ9PTEgYW5kCisJICogZGV2LT50YnVzeT09MC4gIE91ciByeCBwYXRoIGtub3dzIHRvIHBhc3MgdXAgcmVjZWl2ZWQvCisJICogZnJhbWVzIGJlY2F1c2Ugb2YgZGV2LT5mbGFncyZJRkZfVVAgaXMgdHJ1ZS4KKwkgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9jbG9zZQorKgorKiBXTEFOIGRldmljZSBjbG9zZSBtZXRob2QuICBDYWxsZWQgZnJvbSBwODAyMTFuZXRkZXYgd2hlbiBrZXJuZWwKKyogZGV2aWNlIGNsb3NlIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gdGhlCisqIFNJT0NTSUlGRkxBR1MgaW9jdGwgY2hhbmdpbmcgdGhlIGZsYWdzIGJpdCBJRkZfVVAKKyogZnJvbSBzZXQgdG8gY2xlYXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBBTkNJRU5UX01PRFVMRV9DT0RFCisJTU9EX0RFQ19VU0VfQ09VTlQ7CisjZW5kaWYKKworCS8qIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIHRvIGRvIGFueXRoaW5nIGVsc2UuCisJICogSGlnaGVyIGxheWVycyBrbm93IHdlJ3JlIG5vdCByZWFkeSBmcm9tIGRldi0+c3RhcnQ9PTAgYW5kCisJICogZGV2LT50YnVzeT09MS4gIE91ciByeCBwYXRoIGtub3dzIHRvIG5vdCBwYXNzIHVwIHJlY2VpdmVkCisJICogZnJhbWVzIGJlY2F1c2Ugb2YgZGV2LT5mbGFncyZJRkZfVVAgaXMgZmFsc2UuCisJICovCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfcmVzZXQKKyoKKyogTm90IGN1cnJlbnRseSBpbXBsZW50ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiApCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV90eGZyYW1lCisqCisqIFRha2VzIGEgZnJhbWUgZnJvbSBwODAyMTEgYW5kIHF1ZXVlcyBpdCBmb3IgdHJhbnNtaXNzaW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglwYgkJcGFja2V0IGJ1ZmZlciBzdHJ1Y3QuICBDb250YWlucyBhbiA4MDIuMTEKKyoJCQlkYXRhIGZyYW1lLgorKiAgICAgICBwODAyMTFfaGRyICAgICAgcG9pbnRzIHRvIHRoZSA4MDIuMTEgaGVhZGVyIGZvciB0aGUgcGFja2V0LgorKiBSZXR1cm5zOgorKgkwCQlTdWNjZXNzIGFuZCBtb3JlIGJ1ZmZzIGF2YWlsYWJsZQorKgkxCQlTdWNjZXNzIGJ1dCBubyBtb3JlIGJ1ZmZzCisqCTIJCUFsbG9jYXRpb24gZmFpbHVyZQorKgk0CQlCdWZmZXIgZnVsbCBvciBxdWV1ZSBidXN5CisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJICAgICBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaW50CQkJcmVzdWx0OworCURCRkVOVEVSOworCisJLyogSWYgbmVjZXNzYXJ5LCBzZXQgdGhlIDgwMi4xMSBXRVAgYml0ICovCisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgKEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgfCBIT1NUV0VQX0VOQ1JZUFQpKSA9PSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSB7CisJCXA4MDIxMV9oZHItPmEzLmZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKKwl9CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfdHhmcmFtZShodywgc2tiLCBwODAyMTFfaGRyLCBwODAyMTFfd2VwKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX21sbWVyZXF1ZXN0CisqCisqIHdsYW4gY29tbWFuZCBtZXNzYWdlIGhhbmRsZXIuICBBbGwgd2UgZG8gaGVyZSBpcyBwYXNzIHRoZSBtZXNzYWdlCisqIG92ZXIgdG8gdGhlIHByaXNtMnN0YV9tZ210X2hhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZwkJd2xhbiBjb21tYW5kIG1lc3NhZ2UKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk8MAkJc3VjY2Vzc2Z1bCBhY2NlcHRhbmNlIG9mIG1lc3NhZ2UsIGJ1dCB3ZSdyZQorKgkJCXdhaXRpbmcgZm9yIGFuIGFzeW5jIHByb2Nlc3MgdG8gZmluaXNoIGJlZm9yZQorKgkJCXdlJ3JlIGRvbmUgd2l0aCB0aGUgbXNnLiAgV2hlbiB0aGUgYXN5bmNoCisqCQkJcHJvY2VzcyBpcyBkb25lLCB3ZSdsbCBjYWxsIHRoZSBwODAyMTEKKyoJCQlmdW5jdGlvbiBwODAyMTFyZXFfY29uZmlybSgpIC4KKyoJPjAJCUFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgaGFuZGxpbmcKKyoJCQl0aGUgbWVzc2FnZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX21sbWVyZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZykKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwlpbnQgcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCXN3aXRjaCggbXNnLT5tc2djb2RlICkKKwl7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWlic2V0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgcG93ZXJtZ210IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3Bvd2VybWdtdCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2NhbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHNjYW5fcmVzdWx0cyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfam9pbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGpvaW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBhdXRoZW50aWNhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV0aGVudGljYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBkZWF1dGhlbnRpY2F0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9kZWF1dGhlbnRpY2F0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGFzc29jaWF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hc3NvY2lhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlYXNzb2NpYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JlYXNzb2NpYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZGlzYXNzb2NpYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9yZXNldCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVzZXQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfc3RhcnQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHN0YXJ0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCS8qCisJICogUHJpc20yIHNwZWNpZmljIG1lc3NhZ2VzCisJICovCisJY2FzZSBESURtc2dfcDJyZXFfam9pbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHAyIGpvaW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcDJfam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKyAgICAgICAJY2FzZSBESURtc2dfcDJyZXFfcmVhZHBkYSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVhZHBkYSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX3JlYWRjaXMgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlYWRjaXMgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVhZGNpcyh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXhwb3J0X3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXhwb3J0X3JlYWQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1eHBvcnRfd3JpdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWwgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGxvd19sZXZlbCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9sb3dfbGV2ZWwod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZCA6CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSB0ZXN0X2NvbW1hbmQgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQod2xhbmRldiwgbXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESURtc2dfcDJyZXFfbW1pX3JlYWQgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgbW1pX3JlYWQgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF9tbWlfcmVhZCh3bGFuZGV2LCBtc2cpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERJRG1zZ19wMnJlcV9tbWlfd3JpdGUgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgbW1pX3dyaXRlIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfbW1pX3dyaXRlKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJhbWRsX3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF93cml0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZmxhc2hkbF93cml0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2R1bXBfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGR1bXBfc3RhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZHVtcF9zdGF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm8gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGNoYW5uZWxfaW5mbyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9jaGFubmVsX2luZm8od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHMgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGNoYW5uZWxfaW5mb19yZXN1bHRzIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2NoYW5uZWxfaW5mb19yZXN1bHRzKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCS8qCisJICogTGludXggc3BlY2lmaWMgbWVzc2FnZXMKKwkgKi8KKwljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcCA6CisJCWJyZWFrOyAgIC8vIGlnbm9yZSBtZS4KKyAgICAgICAgY2FzZSBESURtc2dfbG54cmVxX2lmc3RhdGUgOgorCQl7CisJCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90CSppZnN0YXRlbXNnOworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgaWZzdGF0ZSByZXF1ZXN0XG4iKTsKKwkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCopbXNnOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7CisJCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KKwkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OworCQlyZXN1bHQgPSAwOworCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX2xueHJlcV93bGFuc25pZmYgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgd2xhbnNuaWZmIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfd2xhbnNuaWZmKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2F1dG9qb2luIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXRvam9pbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9lbmFibGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGVuYWJsZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9lbmFibGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTogeworCQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICpxdWFsbXNnOworCisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGNvbW1zcXVhbGl0eSByZXF1ZXN0XG4iKTsKKworCQlpZiAoaHctPmFwKQorCQkJYnJlYWs7CisKKwkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90KikgbXNnOworCisJCXF1YWxtc2ctPmxpbmsuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlxdWFsbXNnLT5sZXZlbC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCXF1YWxtc2ctPm5vaXNlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCisJCXF1YWxtc2ctPmxpbmsuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKTsKKwkJcXVhbG1zZy0+bGV2ZWwuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyk7CisJCXF1YWxtc2ctPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQU5MX2N1cnJGQyk7CisKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVdMQU5fTE9HX1dBUk5JTkcoIlVua25vd24gbWdtdCByZXF1ZXN0IG1lc3NhZ2UgMHglMDh4IiwgbXNnLT5tc2djb2RlKTsKKwkJYnJlYWs7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaWZzdGF0ZQorKgorKiBJbnRlcmZhY2Ugc3RhdGUuICBUaGlzIGlzIHRoZSBwcmltYXJ5IFdMQU4gaW50ZXJmYWNlIGVuYWJsZS9kaXNhYmxlCisqIGhhbmRsZXIuICBGb2xsb3dpbmcgdGhlIGRyaXZlci9sb2FkL2RldmljZXByb2JlIHNlcXVlbmNlLCB0aGlzCisqIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggYSBzdGF0ZSBvZiAiZW5hYmxlIiBiZWZvcmUgYW55IG90aGVyCisqIGNvbW1hbmRzIHdpbGwgYmUgYWNjZXB0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqIAlBIHA4MDIxMSBtZXNzYWdlIHJlc3VsdGNvZGUgdmFsdWUuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitVSU5UMzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMzIgaWZzdGF0ZSkKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJVUlOVDMyIAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCisJV0xBTl9MT0dfREVCVUcoMiwgIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCisJICAgICAgICAgICAgICAgICAgd2xhbmRldi0+bXNkc3RhdGUsIGlmc3RhdGUpOworCXN3aXRjaCAoaWZzdGF0ZSkKKwl7CisJY2FzZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkOgorCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9GV0xPQURfUEVORElORzsKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSBkZXZpY2UrZHJpdmVyIHN1ZmZpY2llbnRseQorCQkJICogZm9yIGZpcm13YXJlIGxvYWRpbmcuCisJCQkgKi8KKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJCQlyZXN1bHQ9aGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisjZWxzZQorCQkJaWYgKChyZXN1bHQ9aGZhMzg0eF9kcnZyX3N0YXJ0KGh3KSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJImhmYTM4NHhfZHJ2cl9zdGFydCgpIGZhaWxlZCwiCisJCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCQlyZXN1bHQgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0ZXTE9BRDsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgorCQkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKKwkJCQkieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGU6CisJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CisJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9SVU5OSU5HX1BFTkRJTkc7CisJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UrZHJpdmVyIGZvciBmdWxsCisJCQkgKiBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IG1lIGFuIEZXTE9BRCB0bworCQkJICogdG8gUlVOTklORyB0cmFuc2l0aW9uIHNvIHdlIG11c3Qgbm90IGRvIGEgY2hpcAorCQkJICogb3IgYm9hcmQgbGV2ZWwgcmVzZXQuICBOb3RlIHRoYXQgb24gZmFpbHVyZSwKKwkJCSAqIHRoZSBNU0Qgc3RhdGUgaXMgc2V0IHRvIEhXUFJFU0VOVCBiZWNhdXNlIHdlCisJCQkgKiBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUKKwkJCSAqIG9mIHRoZSBoYXJkd2FyZSBvciBhIHByZXZpb3VzIGZpcm13YXJlIGxvYWQuCisJCQkgKi8KKwkJCWlmICgocmVzdWx0PWhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgorCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQkJcmVzdWx0ID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKChyZXN1bHQ9cHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXYpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkicHJpc20yc3RhX2dldGNhcmRpbmZvKCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKChyZXN1bHQ9cHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXYpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkicHJpc20yc3RhX2dsb2JhbHNldHVwKCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9SVU5OSU5HOworCQkJaHctPmpvaW5fYXAgPSAwOworCQkJaHctPmpvaW5fcmV0cmllcyA9IDYwOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlOgorCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlRfUEVORElORzsKKwkJCS8qCisJCQkgKiBUT0RPOiBTaHV0IGRvd24gdGhlIE1BQyBjb21wbGV0ZWx5LiBIZXJlIGEgY2hpcAorCQkJICogb3IgYm9hcmQgbGV2ZWwgcmVzZXQgaXMgcHJvYmFibHkgY2FsbGVkIGZvci4KKwkJCSAqIEFmdGVyIGEgImRpc2FibGUiIF9hbGxfIHJlc3VsdHMgYXJlIGxvc3QsIGV2ZW4KKwkJCSAqIHRob3NlIGZyb20gYSBmd2xvYWQuCisJCQkgKi8KKwkJCWlmICghd2xhbmRldi0+aHdyZW1vdmVkKQorCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKworCQkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9nZXRjYXJkaW5mbworKgorKiBDb2xsZWN0IHRoZSBOSUNJRCwgZmlybXdhcmUgdmVyc2lvbiBhbmQgYW55IG90aGVyIGlkZW50aWZpZXJzCisqIHdlJ2QgbGlrZSB0byBoYXZlIGluIGhvc3Qtc2lkZSBkYXRhIHN0cnVjdHVyZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglFaXRoZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJVUlOVDE2ICAgICAgICAgICAgICAgICAgdGVtcDsKKwlVSU5UOAkJCXNudW1bSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTl07CisJY2hhcgkJCXBzdHJbKEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4gKiA0KSArIDFdOworCisJREJGRU5URVI7CisKKwkvKiBDb2xsZWN0IHZlcnNpb24gYW5kIGNvbXBhdGliaWxpdHkgaW5mbyAqLworCS8qICBTb21lIGFyZSBjcml0aWNhbCwgc29tZSBhcmUgbm90ICovCisJLyogTklDIGlkZW50aXR5ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTklDSURFTlRJVFksCisJCQkmaHctPmlkZW50X25pYywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBOSUNJREVOVElUWVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIG5pYyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCisJaHctPmlkZW50X25pYy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLmlkKTsKKwlody0+aWRlbnRfbmljLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlody0+aWRlbnRfbmljLm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMubWFqb3IpOworCWh3LT5pZGVudF9uaWMubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5taW5vcik7CisKKwlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IG5pYyBoL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9uaWMuaWQsIGh3LT5pZGVudF9uaWMubWFqb3IsCisJCQlody0+aWRlbnRfbmljLm1pbm9yLCBody0+aWRlbnRfbmljLnZhcmlhbnQpOworCisJLyogUHJpbWFyeSBmL3cgaWRlbnRpdHkgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklJREVOVElUWSwKKwkJCSZody0+aWRlbnRfcHJpX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSUlERU5USVRZXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgcHJpdmF0ZSBmdyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCisJaHctPmlkZW50X3ByaV9mdy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3LmlkKTsKKwlody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncubWFqb3IpOworCWh3LT5pZGVudF9wcmlfZncubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5taW5vcik7CisKKwlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IHByaSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJCQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCisJLyogU3RhdGlvbiAoU2Vjb25kYXJ5PykgZi93IGlkZW50aXR5ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBSURFTlRJVFksCisJCQkmaHctPmlkZW50X3N0YV9mdywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFJREVOVElUWVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlmIChody0+aWRlbnRfbmljLmlkIDwgMHg4MDAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGQVRBTDogQ2FyZCBpcyBub3QgYW4gSW50ZXJzaWwgUHJpc20yLzIuNS8zXG4iKTsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIHN0YXRpb24gZncgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLworCWh3LT5pZGVudF9zdGFfZncuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5pZCk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJaHctPmlkZW50X3N0YV9mdy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3Lm1ham9yKTsKKwlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncubWlub3IpOworCisJLyogc3RyaXAgb3V0IHRoZSAnc3BlY2lhbCcgdmFyaWFudCBiaXRzICovCisJaHctPm1tX21vZHMgPSBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJiAoQklUMTQgfCBCSVQxNSk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICY9IH4oKFVJTlQxNikoQklUMTQgfCBCSVQxNSkpOworCisJaWYgICggaHctPmlkZW50X3N0YV9mdy5pZCA9PSAweDFmICkgeworCQlody0+YXAgPSAwOworCQlXTEFOX0xPR19JTkZPKAorCQkJImlkZW50OiBzdGEgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9IGVsc2UgeworCQlody0+YXAgPSAxOworCQlXTEFOX0xPR19JTkZPKAorCQkJImlkZW50OiAgYXAgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBNb2RlbSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIE1GSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgbW9kZW0gaW50ZXJmYWNlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9tZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkucm9sZSk7CisJaHctPmNhcF9zdXBfbWZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5pZCk7CisJaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX21maS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfbWZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJNRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfbWZpLnJvbGUsIGh3LT5jYXBfc3VwX21maS5pZCwKKwkJaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX21maS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX21maS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgQ29udHJvbGxlciBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIENGSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgY29udHJvbGxlciBpbnRlcmZhY2Ugc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfc3VwX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLmlkKTsKKwlody0+Y2FwX3N1cF9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkudmFyaWFudCk7CisJaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIkNGSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9jZmkucm9sZSwgaHctPmNhcF9zdXBfY2ZpLmlkLAorCQlody0+Y2FwX3N1cF9jZmkudmFyaWFudCwgaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBQcmltYXJ5IGYvdyBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX3ByaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmaXJtd2FyZSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfcHJpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnJvbGUpOworCWh3LT5jYXBfc3VwX3ByaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuaWQpOworCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9wcmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5ib3R0b20pOworCWh3LT5jYXBfc3VwX3ByaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiUFJJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX3ByaS5yb2xlLCBody0+Y2FwX3N1cF9wcmkuaWQsCisJCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50LCBody0+Y2FwX3N1cF9wcmkuYm90dG9tLAorCQlody0+Y2FwX3N1cF9wcmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIFN0YXRpb24gZi93IHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0UsCisJCQkmaHctPmNhcF9zdXBfc3RhLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBU1VQUkFOR0VcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGZpcm13YXJlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9zdGEucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEucm9sZSk7CisJaHctPmNhcF9zdXBfc3RhLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5pZCk7CisJaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3N0YS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfc3RhLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEudG9wKTsKKworCWlmICggaHctPmNhcF9zdXBfc3RhLmlkID09IDB4MDQgKSB7CisJCVdMQU5fTE9HX0lORk8oCisJCSJTVEE6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3N0YS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX3N0YS50b3ApOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0lORk8oCisJCSJBUDpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAorCQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJfQorCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3RfcHJpX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSV9DRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiUFJJLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQsCisJCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIENGSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3Rfc3RhX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9DRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiU1RBLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQsCisJCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIE1GSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3Rfc3RhX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9NRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgTUZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiU1RBLU1GSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQsCisJCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKworCS8qIFNlcmlhbCBOdW1iZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVIsCisJCQlzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOKTsKKwlpZiAoICFyZXN1bHQgKSB7CisJCXdsYW5fbWtwcmludHN0cihzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOLAorCQkJCXBzdHIsIHNpemVvZihwc3RyKSk7CisJCVdMQU5fTE9HX0lORk8oIlByaXNtMiBjYXJkIFNOOiAlc1xuIiwgcHN0cik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQcmlzbTIgQ2FyZCBTTlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIENvbGxlY3QgdGhlIE1BQyBhZGRyZXNzICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwKKwkJd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJaWYgKCByZXN1bHQgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBtYWMgYWRkcmVzc1xuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIHNob3J0IHByZWFtYmxlIGlzIGFsd2F5cyBpbXBsZW1lbnRlZCAqLworCXdsYW5kZXYtPm5zZGNhcHMgfD0gUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRTsKKworCS8qIGZpbmQgb3V0IGlmIGhhcmR3YXJlIHdlcCBpcyBpbXBsZW1lbnRlZCAqLworCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUCwgJnRlbXApOworCWlmICh0ZW1wKQorCQl3bGFuZGV2LT5uc2RjYXBzIHw9IFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVA7CisKKwkvKiBnZXQgdGhlIGRCbSBTY2FsaW5nIGNvbnN0YW50ICovCisJaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZEQk1BREpVU1QsICZ0ZW1wKTsKKwlody0+ZGJtYWRqdXN0ID0gdGVtcDsKKworCS8qIE9ubHkgZW5hYmxlIHNjYW4gYnkgZGVmYXVsdCBvbiBuZXdlciBmaXJtd2FyZSAqLworICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsNSw1KSkgeworCQl3bGFuZGV2LT5uc2RjYXBzIHw9IFA4MDIxMV9OU0RDQVBfTk9TQ0FOOworCX0KKworCS8qIFRPRE86IFNldCBhbnkgaW50ZXJuYWxseSBtYW5hZ2VkIGNvbmZpZyBpdGVtcyAqLworCisJZ290byBkb25lOworZmFpbGVkOgorCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAKKyoKKyogU2V0IGFueSBnbG9iYWwgUklEcyB0aGF0IHdlIHdhbnQgdG8gc2V0IGF0IGRldmljZSBhY3RpdmF0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MKKyoJPjAJZi93IHJlcG9ydGVkIGVycm9yCisqCTwwCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJLyogU2V0IHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgKi8KKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fREFUQV9NQVhMRU4pOworfQorCitzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KQoreworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJVUlOVDE2ICBwcm9taXNjOworCisJREJGRU5URVI7CisKKwkvKiBJZiB3ZSdyZSBub3QgcmVhZHksIHdoYXQncyB0aGUgcG9pbnQ/ICovCisJaWYgKCBody0+c3RhdGUgIT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkKKwkJZ290byBleGl0OworCisJLyogSWYgd2UncmUgYW4gQVAsIGRvIG5vdGhpbmcgaGVyZSAqLworCWlmIChody0+YXApCisJCWdvdG8gZXhpdDsKKworCWlmICggKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwICkKKwkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwllbHNlCisJCXByb21pc2MgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2X2FzeW5jKGh3LCBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgcHJvbWlzYyk7CisKKwkvKiBYWFggVE9ETzogY29uZmlndXJlIHRoZSBtdWx0aWNhc3QgbGlzdCAqLworCS8vIENMRUFSX0hXX01VTFRJQ0FTVF9MSVNUCisJLy8gc3RydWN0IGRldl9tY19saXN0IGVsZW1lbnQgPSBkZXYtPm1jX2xpc3Q7CisJLy8gd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkgeworCS8vICBIV19BRERfTVVMVElDQVNUX0FERFIoZWxlbWVudC0+ZG1pX2FkZHIsIGRtaV9hZGRybGVuKQorCS8vICBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKwkvLyB9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIEhhbmRvdmVyIGluZm8gZnJhbWUuIFNob3VsZCBvbmx5IGJlIHByZXNlbnQKKyogaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoMiwicmVjZWl2ZWQgaW5mb2ZyYW1lOkhBTkRPVkVSICh1bmhhbmRsZWQpXG4iKTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl90YWxsaWVzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBDb21tVGFsbGllcyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCSpzcmMxNjsKKwlVSU5UMzIJCQkqZHN0OworCVVJTlQzMgkJCSpzcmMzMjsKKwlpbnQJCQlpOworCWludAkJCWNudDsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBEZXRlcm1pbmUgaWYgdGhlc2UgYXJlIDE2LWJpdCBvciAzMi1iaXQgdGFsbGllcywgYmFzZWQgb24gdGhlCisJKiogcmVjb3JkIGxlbmd0aCBvZiB0aGUgaW5mbyByZWNvcmQuCisJKi8KKworCWNudCA9IHNpemVvZihoZmEzODR4X0NvbW1UYWxsaWVzMzJfdCkgLyBzaXplb2YoVUlOVDMyKTsKKwlpZiAoaW5mLT5mcmFtZWxlbiA+IDIyKSB7CisJCWRzdCAgID0gKFVJTlQzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzMyID0gKFVJTlQzMiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzMyKyspCisJCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8zMigqc3JjMzIpOworCX0gZWxzZSB7CisJCWRzdCAgID0gKFVJTlQzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzE2ID0gKFVJTlQxNiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzE2KyspCisJCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8xNigqc3JjMTYpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBTY2FuIFJlc3VsdHMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworCisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWludAkJCW5ic3M7CisJaGZhMzg0eF9TY2FuUmVzdWx0X3QJKnNyID0gJihpbmYtPmluZm8uc2NhbnJlc3VsdCk7CisJaW50CQkJaTsKKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdAlqb2lucmVxOworCWludAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMsIGZpcnN0IGluIGJ5dGVzLCB0aGVuIGluIHJlc3VsdHMgKi8KKwluYnNzID0gKGluZi0+ZnJhbWVsZW4gKiBzaXplb2YoVUlOVDE2KSkgLQorCQlzaXplb2YoaW5mLT5pbmZvdHlwZSkgLQorCQlzaXplb2YoaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbik7CisJbmJzcyAvPSBzaXplb2YoaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QpOworCisJLyogUHJpbnQgZW0gKi8KKwlXTEFOX0xPR19ERUJVRygxLCJyeCBzY2FucmVzdWx0cywgcmVhc29uPSVkLCBuYnNzPSVkOlxuIiwKKwkJaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbiwgbmJzcyk7CisJZm9yICggaSA9IDA7IGkgPCBuYnNzOyBpKyspIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgImNoaWQ9JWQgYW5sPSVkIHNsPSVkIGJjbmludD0lZFxuIiwKKwkJCXNyLT5yZXN1bHRbaV0uY2hpZCwKKwkJCXNyLT5yZXN1bHRbaV0uYW5sLAorCQkJc3ItPnJlc3VsdFtpXS5zbCwKKwkJCXNyLT5yZXN1bHRbaV0uYmNuaW50KTsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIiAgY2FwaW5mbz0weCUwNHggcHJvYmVyZXNwX3JhdGU9JWRcbiIsCisJCQlzci0+cmVzdWx0W2ldLmNhcGluZm8sCisJCQlzci0+cmVzdWx0W2ldLnByb2JlcmVzcF9yYXRlKTsKKwl9CisJLyogaXNzdWUgYSBqb2luIHJlcXVlc3QgKi8KKwlqb2lucmVxLmNoYW5uZWwgPSBzci0+cmVzdWx0WzBdLmNoaWQ7CisJbWVtY3B5KCBqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhqb2lucmVxKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBTY2FuIFJlc3VsdHMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaW50CQkJbmJzczsKKwlEQkZFTlRFUjsKKworCW5ic3MgPSAoaW5mLT5mcmFtZWxlbiAtIDMpIC8gMzI7CisJV0xBTl9MT0dfREVCVUcoMSwgIlJlY2VpdmVkICVkIGhvc3RzY2FuIHJlc3VsdHNcbiIsIG5ic3MpOworCisJaWYgKG5ic3MgPiAzMikKKwkJbmJzcyA9IDMyOworCisJaWYgKGh3LT5zY2FucmVzdWx0cykKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKworCWh3LT5zY2FucmVzdWx0cyA9IGttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCksIEdGUF9BVE9NSUMpOworCW1lbWNweShody0+c2NhbnJlc3VsdHMsIGluZiwgc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCkpOworCisJaWYgKG5ic3MgPT0gMCkKKwkJbmJzcyA9IC0xOworCisgICAgICAgIC8qIE5vdGlmeS93YWtlIHRoZSBzbGVlcGluZyBjYWxsZXIuICovCisgICAgICAgIGh3LT5zY2FuZmxhZyA9IG5ic3M7CisgICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOworCisJREJGRVhJVDsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIENoYW5uZWwgSW5mbyBSZXN1bHRzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJdW5zaWduZWQgaW50CQlpLCBuOworCisJREJGRU5URVI7CisJaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyA9CisJCWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnNjYW5jaGFubmVscyk7CisjaWYgMAorCW1lbWNweSgmaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdCwgJmh3LT5jaGFubmVsX2luZm8ucmVzdWx0cywgc2l6ZW9mKGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QpKTsKKyNlbmRpZgorCisJZm9yIChpPTAsIG49MDsgaTxIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgeworCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxPDxpKSkgeworCQkJaW50IAljaGFubmVsPWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5jaGlkKS0xOworCQkJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCAqY2hpbmZvcmVzdWx0PSZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOworCQkJY2hpbmZvcmVzdWx0LT5jaGlkICAgPSBjaGFubmVsOworCQkJY2hpbmZvcmVzdWx0LT5hbmwgICAgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYW5sKTsKKwkJCWNoaW5mb3Jlc3VsdC0+cG5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLnBubCk7CisJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5hY3RpdmUpOworCQkJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAorCQkJCQljaGFubmVsKzEsCisJCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYKKwkJCQkJSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8gInNpZ25hbCIgOiAibm9pc2UiLAorCQkJCQljaGluZm9yZXN1bHQtPmFubCwgY2hpbmZvcmVzdWx0LT5wbmwsCisJCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDAKKwkJCSk7CisJCQluKys7CisJCX0KKwl9CisJYXRvbWljX3NldCgmaHctPmNoYW5uZWxfaW5mby5kb25lLCAyKTsKKworCWh3LT5jaGFubmVsX2luZm8uY291bnQgPSBuOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCit2b2lkIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwloZmEzODR4X3QJCSpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgbGlua19iaCk7CisJd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXYgPSBody0+d2xhbmRldjsKKwloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CisJaW50CQkJcmVzdWx0OworCisJREJGRU5URVI7CisJLyogRmlyc3QgbGV0J3MgcHJvY2VzcyB0aGUgYXV0aCBmcmFtZXMgKi8KKwl7CisJCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CisJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mOworCisJCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKwkJCWluZiA9IChoZmEzODR4X0luZkZyYW1lX3QgKikgc2tiLT5kYXRhOworCQkJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXYsIGluZik7CisJCX0KKworCX0KKworCS8qIE5vdyBsZXQncyBoYW5kbGUgdGhlIGxpbmtzdGF0dXMgc3R1ZmYgKi8KKwlpZiAoaHctPmxpbmtfc3RhdHVzID09IGh3LT5saW5rX3N0YXR1c19uZXcpCisJCWdvdG8gZmFpbGVkOworCisJaHctPmxpbmtfc3RhdHVzID0gaHctPmxpbmtfc3RhdHVzX25ldzsKKworCXN3aXRjaChody0+bGlua19zdGF0dXMpIHsKKwljYXNlIEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ6CisJCS8qIEknbSBjdXJyZW50bHkgYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHRoZSBpbml0aWFsIGxpbmsKKwkJICogc3RhdGUuICBJdCBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpbW1lZGlhdGVseQorCQkgKiBmb2xsb3dpbmcgYW4gRW5hYmxlIGNvbW1hbmQuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPU5PVENPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIHNjYW4vam9pbi9hdXRoL2Fzc29jLgorCQkgKiBXaGVuIHdlIGhhdmUgdGhlIGZ1bGwgTUxNRSBjb21wbGVtZW50LCB0aGlzIGV2ZW50IHdpbGwKKwkJICogc2lnbmlmeSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYm90aCBtbG1lX2F1dGhlbnRpY2F0ZQorCQkgKiBhbmQgbWxtZV9hc3NvY2lhdGUuICBTdGF0ZSBtYW5hZ2VtZW50IHdpbGwgZ2V0IGEgbGl0dGxlCisJCSAqIHVnbHkgaGVyZS4KKwkJICogUmVzcG9uc2U6CisJCSAqIEluZGljYXRlIGF1dGhlbnRpY2F0aW9uIGFuZC9vciBhc3NvY2lhdGlvbgorCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcworCQkgKi8KKworCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CisKKwkJLyogSWYgd2UgYXJlIGpvaW5pbmcgYSBzcGVjaWZpYyBBUCwgc2V0IG91ciBzdGF0ZSBhbmQgcmVzZXQgcmV0cmllcyAqLworCQlpZihody0+am9pbl9hcCA9PSAxKQorCQkJaHctPmpvaW5fYXAgPSAyOworCQlody0+am9pbl9yZXRyaWVzID0gNjA7CisKKwkJLyogRG9uJ3QgY2FsbCB0aGlzIGluIG1vbml0b3IgbW9kZSAqLworCQlpZiAoIHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIgKSB7CisJCQlVSU5UMTYJCQlwb3J0c3RhdHVzOworCisJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUNPTk5FQ1RFRFxuIik7CisKKwkJCS8qIEZvciBub24tdXNiIGRldmljZXMsIHdlIGNhbiB1c2UgdGhlIHN5bmMgdmVyc2lvbnMgKi8KKwkJCS8qIENvbGxlY3QgdGhlIEJTU0lELCBhbmQgc2V0IHN0YXRlIHRvIGFsbG93IHR4ICovCisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAorCQkJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCisJCQkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAorCQkJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOworCisJCQkvKiBDb2xsZWN0IHRoZSBwb3J0IHN0YXR1cyAqLworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorCQkJCQkJCSAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgJnBvcnRzdGF0dXMpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCXdsYW5kZXYtPm1hY21vZGUgPQorCQkJCShwb3J0c3RhdHVzID09IEhGQTM4NHhfUFNUQVRVU19DT05OX0lCU1MpID8KKwkJCQlXTEFOX01BQ01PREVfSUJTU19TVEEgOiBXTEFOX01BQ01PREVfRVNTX1NUQTsKKworCQkJLyogR2V0IHRoZSBiYWxsIHJvbGxpbmcgb24gdGhlIGNvbW1zIHF1YWxpdHkgc3R1ZmYgKi8KKwkJCXByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIoJmh3LT5jb21tc3F1YWxfYmgpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfRElTQ09OTkVDVEVEOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCBvdXIgYXNzb2NpYXRpb24gaXMgZ29uZS4gIFdlJ3ZlCisJCSAqIGxvc3QgY29ubmVjdGlvbiB3aXRoIHRoZSBBUCBhbmQvb3IgYmVlbiBkaXNhc3NvY2lhdGVkLgorCQkgKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBNQUMgaGFzIGNvbXBsZXRlbHkgY2xlYXJlZCBpdCdzCisJCSAqIGFzc29jaWF0ZWQgc3RhdGUuICBXZSAqIHNob3VsZCBzZW5kIGEgZGVhdXRoIGluZGljYXRpb24KKwkJICogKGltcGx5aW5nIGRpc2Fzc29jKSB1cCAqIHRvIHRoZSBNTE1FLgorCQkgKiBSZXNwb25zZToKKwkJICogSW5kaWNhdGUgRGVhdXRoZW50aWNhdGlvbgorCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJaWYoaHctPmpvaW5fYXAgPT0gMikKKwkJeworCQkJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICAgICBqb2lucmVxOworCQkJam9pbnJlcSA9IGh3LT5qb2lucmVxOworCQkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCisJCQloZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKKwkJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKQorCQkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKKwkJfQorCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0FQX0NIQU5HRToKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIHRoYXQgdGhlIE1BQyBoYXMgZGVjaWRlZCB0byBhbmQKKwkJICogc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBhIGNoYW5nZSB0byBhbm90aGVyIEFQLiAgV2UKKwkJICogc2hvdWxkIHByb2JhYmx5IGltcGxlbWVudCBhIHJlYXNzb2NpYXRpb24gaW5kaWNhdGlvbgorCQkgKiBpbiByZXNwb25zZSB0byB0aGlzIG9uZS4gIEknbSB0aGlua2luZyB0aGF0IHRoZSB0aGUKKwkJICogcDgwMjExIGxheWVyIG5lZWRzIHRvIGJlIG5vdGlmaWVkIGluIGNhc2Ugb2YKKwkJICogYnVmZmVyaW5nL3F1ZXVlaW5nIGlzc3Vlcy4gIFVzZXIgbW9kZSBhbHNvIG5lZWRzIHRvIGJlCisJCSAqIG5vdGlmaWVkIHNvIHRoYXQgYW55IEJTUyBkZXBlbmRlbnQgZWxlbWVudHMgY2FuIGJlCisJCSAqIHVwZGF0ZWQuCisJCSAqIGFzc29jaWF0ZWQgc3RhdGUuICBXZSAqIHNob3VsZCBzZW5kIGEgZGVhdXRoIGluZGljYXRpb24KKwkJICogKGltcGx5aW5nIGRpc2Fzc29jKSB1cCAqIHRvIHRoZSBNTE1FLgorCQkgKiBSZXNwb25zZToKKwkJICogSW5kaWNhdGUgUmVhc3NvY2lhdGlvbgorCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcworCQkgKi8KKwkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9DSEFOR0VcbiIpOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCisJCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKKwkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAorCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisKKworCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOworCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BUF9PVVRPRlJBTkdFOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBkZWNpZGVkIHRoYXQgdGhlCisJCSAqIEFQIGlzIG91dCBvZiByYW5nZSwgYnV0IGhhc24ndCBmb3VuZCBhIGJldHRlciBjYW5kaWRhdGUKKwkJICogc28gdGhlIE1BQyBtYWludGFpbnMgaXRzICJhc3NvY2lhdGVkIiBzdGF0ZSBpbiBjYXNlCisJCSAqIHdlIGdldCBiYWNrIGluIHJhbmdlLiAgV2Ugc2hvdWxkIGJsb2NrIHRyYW5zbWl0cyBhbmQKKwkJICogcmVjZWl2ZXMgaW4gdGhpcyBzdGF0ZS4gIERvIHdlIG5lZWQgYW4gaW5kaWNhdGlvbiBoZXJlPworCQkgKiBQcm9iYWJseSBub3Qgc2luY2UgYSBwb2xsaW5nIHVzZXItbW9kZSBlbGVtZW50IHdvdWxkCisJCSAqIGdldCB0aGlzIHN0YXR1cyBmcm9tIGZyb20gcDJQb3J0U3RhdHVzKEZENDApLiBXaGF0IGFib3V0CisJCSAqIHA4MDIxMT8KKwkJICogUmVzcG9uc2U6CisJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX09VVE9GUkFOR0UgKHVuaGFuZGxlZClcbiIpOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBkZWNpZGVkIHRoYXQgdGhlCisJCSAqIEFQIGlzIGJhY2sgaW4gcmFuZ2UuICBXZSBjb250aW51ZSB3b3JraW5nIHdpdGggb3VyCisJCSAqIGV4aXN0aW5nIGFzc29jaWF0aW9uLgorCQkgKiBSZXNwb25zZToKKwkJICogRW5hYmxlIFRyYW5zbWl0cywgUmVjZWl2ZXMgYW5kIHBhc3MgdXAgZGF0YSBmcmFtZXMKKwkJICovCisJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfSU5SQU5HRVxuIik7CisKKwkJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDsKKwkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMOgorCQkvKiBUaGlzIG9uZSBpcyBhY3R1YWxseSBhIHBlZXIgdG8gQ09OTkVDVEVELiAgV2UndmUKKwkJICogcmVxdWVzdGVkIGEgam9pbiBmb3IgYSBnaXZlbiBTU0lEIGFuZCBvcHRpb25hbGx5IEJTU0lELgorCQkgKiBXZSBjYW4gdXNlIHRoaXMgb25lIHRvIGluZGljYXRlIGF1dGhlbnRpY2F0aW9uIGFuZAorCQkgKiBhc3NvY2lhdGlvbiBmYWlsdXJlcy4gIFRoZSB0cmljayBpcyBnb2luZyB0byBiZQorCQkgKiAxKSBpZGVudGlmeWluZyB0aGUgZmFpbHVyZSwgYW5kIDIpIHN0YXRlIG1hbmFnZW1lbnQuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBEaXNhYmxlIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQlpZihody0+am9pbl9hcCAmJiAtLWh3LT5qb2luX3JldHJpZXMgPiAwKQorCQl7CisJCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgICAgIGpvaW5yZXE7CisJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CisJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHVuaGFuZGxlZClcbiIpOworCQl9CisKKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIFRoaXMgaXMgYmFkLCBJTyBwb3J0IHByb2JsZW1zPyAqLworCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJInVua25vd24gbGlua3N0YXR1cz0weCUwMnhcbiIsIGh3LT5saW5rX3N0YXR1cyk7CisJCWdvdG8gZmFpbGVkOworCQlicmVhazsKKwl9CisKKwl3bGFuZGV2LT5saW5rc3RhdHVzID0gKGh3LT5saW5rX3N0YXR1cyA9PSBIRkEzODR4X0xJTktfQ09OTkVDVEVEKTsKKyNpZmRlZiBXSVJFTEVTU19FWFQKKwlwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldiwgd2xhbmRldi0+bGlua3N0YXR1cyk7CisjZW5kaWYKKworIGZhaWxlZDoKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9saW5rc3RhdHVzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBMaW5rIFN0YXR1cyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJaHctPmxpbmtfc3RhdHVzX25ldyA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8ubGlua3N0YXR1cy5saW5rc3RhdHVzKTsKKworCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGFuIEFzc29jaWF0aW9uIFN0YXR1cyBpbmZvIGZyYW1lLiBTaG91bGQKKyogYmUgcHJlc2VudCBpbiBBUHMgb25seS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X0Fzc29jU3RhdHVzX3QJcmVjOworCWludAkJCWk7CisKKwlEQkZFTlRFUjsKKworCW1lbWNweSgmcmVjLCAmaW5mLT5pbmZvLmFzc29jc3RhdHVzLCBzaXplb2YocmVjKSk7CisJcmVjLmFzc29jc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHJlYy5hc3NvY3N0YXR1cyk7CisJcmVjLnJlYXNvbiAgICAgID0gaGZhMzg0eDJob3N0XzE2KHJlYy5yZWFzb24pOworCisJLyoKKwkqKiBGaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICBJZiBpdCB3YXNuJ3QKKwkqKiBmb3VuZCwgdGhlbiB0aGlzIGFkZHJlc3MgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCBhbmQKKwkqKiBzb21ldGhpbmcgd2VpcmQgaGFzIGhhcHBlbmVkIGlmIHRoaXMgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbgorCSoqICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuICBJZiB0aGUgYWRkcmVzcyB3YXMgZm91bmQsIHRoZW4KKwkqKiBzZXQgdGhlICJhc3NvY2lhdGVkIiBmbGFnIGZvciB0aGF0IHN0YXRpb24sIGJhc2VkIG9uIHdoZXRoZXIgdGhlCisJKiogc3RhdGlvbiBpcyBhc3NvY2lhdGluZyBvciBsb3NpbmcgaXRzIGFzc29jaWF0aW9uLiAgU29tZXRoaW5nIHdlaXJkCisJKiogaGFzIGFsc28gaGFwcGVuZWQgaWYgd2UgZmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkCisJKiogc3RhdGlvbnMgYnV0IHdlIGFyZSBnZXR0aW5nIGFuICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCBody0+YXV0aGxpc3QuY250OyBpKyspCisJCWlmIChtZW1jbXAocmVjLnN0YV9hZGRyLCBody0+YXV0aGxpc3QuYWRkcltpXSwgV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCWJyZWFrOworCisJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgeworCQlpZiAocmVjLmFzc29jc3RhdHVzICE9IEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwpCisJCQlXTEFOX0xPR19XQVJOSU5HKCJhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBub24tYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CisJfSBlbHNlIHsKKwkJaHctPmF1dGhsaXN0LmFzc29jW2ldID0KKwkJCShyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19TVEFBU1NPQyB8fAorCQkJIHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1JFQVNTT0MpOworCisJCWlmIChyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTCkKKwkJCVdMQU5fTE9HX1dBUk5JTkcoImF1dGhmYWlsIGFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2F1dGhyZXEKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhbiBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IGluZm8gZnJhbWUuIFNob3VsZAorKiBiZSBwcmVzZW50IGluIEFQcyBvbmx5LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJREJGRU5URVI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqaW5mKSk7CisJaWYgKHNrYikgeworCQlza2JfcHV0KHNrYiwgc2l6ZW9mKCppbmYpKTsKKwkJbWVtY3B5KHNrYi0+ZGF0YSwgaW5mLCBzaXplb2YoKmluZikpOworCQlza2JfcXVldWVfdGFpbCgmaHctPmF1dGhxLCBza2IpOworCQlzY2hlZHVsZV93b3JrKCZody0+bGlua19iaCk7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QgIHJlYzsKKworCWludCAgICBpLCBhZGRlZCwgcmVzdWx0LCBjbnQ7CisJVUlOVDggICphZGRyOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIEJ1aWxkIHRoZSBBdXRoZW50aWNhdGVTdGF0aW9uIHJlY29yZC4gIEluaXRpYWxpemUgaXQgZm9yIGRlbnlpbmcKKwkqKiBhdXRoZW50aWNhdGlvbi4KKwkqLworCisJbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgV0xBTl9BRERSX0xFTik7CisJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlOworCisJLyoKKwkqKiBBdXRoZW50aWNhdGUgYmFzZWQgb24gdGhlIGFjY2VzcyBtb2RlLgorCSovCisKKwlzd2l0Y2ggKGh3LT5hY2Nlc3Ntb2RlKSB7CisJCWNhc2UgV0xBTl9BQ0NFU1NfTk9ORToKKworCQkJLyoKKwkJCSoqIERlbnkgYWxsIG5ldyBhdXRoZW50aWNhdGlvbnMuICBIb3dldmVyLCBpZiBhIHN0YXRpb24KKwkJCSoqIGlzIEFMUkVBRFkgYXV0aGVudGljYXRlZCwgdGhlbiBhY2NlcHQgaXQuCisJCQkqLworCisJCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGh3LT5hdXRobGlzdC5hZGRyW2ldLAorCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQUNDRVNTX0FMTDoKKworCQkJLyoKKwkJCSoqIEFsbG93IGFsbCBhdXRoZW50aWNhdGlvbnMuCisJCQkqLworCisJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9BQ0NFU1NfQUxMT1c6CisKKwkJCS8qCisJCQkqKiBPbmx5IGFsbG93IHRoZSBhdXRoZW50aWNhdGlvbiBpZiB0aGUgTUFDIGFkZHJlc3MKKwkJCSoqIGlzIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgYWRkcmVzc2VzLgorCQkJKioKKwkJCSoqIFNpbmNlIHRoaXMgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSBtYXkgYmUgaGVyZQorCQkJKiogd2hpbGUgdGhlIGFjY2VzcyBsaXN0IGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcKKwkJCSoqIHVwZGF0ZWQuICBDaG9vc2UgdGhlIGxpc3Qgd2hpY2ggaXMgY3VycmVudGx5IG9rYXkuCisJCQkqKiBTZWUgInByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KCkiIGZvciBkZXRhaWxzLgorCQkJKi8KKworCQkJaWYgKGh3LT5hbGxvdy5tb2RpZnkgPT0gMCkgeworCQkJCWNudCAgPSBody0+YWxsb3cuY250OworCQkJCWFkZHIgPSBody0+YWxsb3cuYWRkclswXTsKKwkJCX0gZWxzZSB7CisJCQkJY250ICA9IGh3LT5hbGxvdy5jbnQxOworCQkJCWFkZHIgPSBody0+YWxsb3cuYWRkcjFbMF07CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0FDQ0VTU19ERU5ZOgorCisJCQkvKgorCQkJKiogQWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIFVOTEVTUyB0aGUgTUFDIGFkZHJlc3MgaXMKKwkJCSoqIGluIHRoZSBsaXN0IG9mIGRlbmllZCBhZGRyZXNzZXMuCisJCQkqKgorCQkJKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCQkqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkJKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJCSoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgpIiBmb3IgZGV0YWlscy4KKwkJCSovCisKKwkJCWlmIChody0+ZGVueS5tb2RpZnkgPT0gMCkgeworCQkJCWNudCAgPSBody0+ZGVueS5jbnQ7CisJCQkJYWRkciA9IGh3LT5kZW55LmFkZHJbMF07CisJCQl9IGVsc2UgeworCQkJCWNudCAgPSBody0+ZGVueS5jbnQxOworCQkJCWFkZHIgPSBody0+ZGVueS5hZGRyMVswXTsKKwkJCX0KKworCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWJyZWFrOworCX0KKworCS8qCisJKiogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIG9rYXksIHRoZW4gYWRkIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgbGlzdAorCSoqIG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICBEb24ndCBhZGQgdGhlIGFkZHJlc3MgaWYgaXQgaXMgYWxyZWFkeSBpbgorCSoqIHRoZSBsaXN0LiAgKDgwMi4xMWIgZG9lcyBub3Qgc2VlbSB0byBkaXNhbGxvdyBhIHN0YXRpb24gZnJvbSBpc3N1aW5nCisJKiogYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aGVuIHRoZSBzdGF0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4KKwkqKiBEb2VzIHRoaXMgc29ydCBvZiB0aGluZyBldmVyIGhhcHBlbj8gIFdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhlIGNoZWNrCisJKioganVzdCBpbiBjYXNlLikKKwkqLworCisJYWRkZWQgPSAwOworCisJaWYgKHJlYy5zdGF0dXMgPT0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgeworCQkJaWYgKGh3LT5hdXRobGlzdC5jbnQgPj0gV0xBTl9BVVRIX01BWCkgeworCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsOworCQkJfSBlbHNlIHsKKwkJCQltZW1jcHkoaHctPmF1dGhsaXN0LmFkZHJbaHctPmF1dGhsaXN0LmNudF0sCisJCQkJCXJlYy5hZGRyZXNzLCBXTEFOX0FERFJfTEVOKTsKKwkJCQlody0+YXV0aGxpc3QuY250Kys7CisJCQkJYWRkZWQgPSAxOworCQkJfQorCQl9CisJfQorCisJLyoKKwkqKiBTZW5kIGJhY2sgdGhlIHJlc3VsdHMgb2YgdGhlIGF1dGhlbnRpY2F0aW9uLiAgSWYgdGhpcyBkb2Vzbid0IHdvcmssCisJKiogdGhlbiBtYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGF1dGhlbnRpY2F0ZWQgbGlzdCBpZgorCSoqIGl0IHdhcyBhZGRlZC4KKwkqLworCisJcmVjLnN0YXR1cyA9IGhvc3QyaGZhMzg0eF8xNihyZWMuc3RhdHVzKTsKKwlyZWMuYWxnb3JpdGhtID0gaW5mLT5pbmZvLmF1dGhyZXEuYWxnb3JpdGhtOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBLAorCQkJCQkJCSZyZWMsIHNpemVvZihyZWMpKTsKKwlpZiAocmVzdWx0KSB7CisJCWlmIChhZGRlZCkgaHctPmF1dGhsaXN0LmNudC0tOworCQlXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKGF1dGhlbnRpY2F0ZXN0YXRpb24pIGZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfcHN1c2VyY250CisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBQb3dlclNhdmVVc2VyQ291bnQgaW5mbyBmcmFtZS4gU2hvdWxkCisqIGJlIHByZXNlbnQgaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJaHctPnBzdXNlcmNvdW50ID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5wc3VzZXJjbnQudXNlcmNudCk7CisKKwlEQkZFWElUOworCisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X2R0aW0KKyoKKyogSGFuZGxlcyB0aGUgRFRJTSBlYXJseSB3YXJuaW5nIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDMsICJEVElNIGV2ZW50LCBjdXJyZW50bHkgdW5oYW5kbGVkLlxuIik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9pbmZkcm9wCisqCisqIEhhbmRsZXMgdGhlIEluZkRyb3AgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKyNpZiAwCisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworI2VuZGlmCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoMywgIkluZm8gZnJhbWUgZHJvcHBlZCBkdWUgdG8gY2FyZCBtZW0gbG93LlxuIik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9pbmZvCisqCisqIEhhbmRsZXMgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGEgZ2VuZXJpYyBpbmZvIGZyYW1lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisJREJGRU5URVI7CisJaW5mLT5pbmZvdHlwZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm90eXBlKTsKKwkvKiBEaXNwYXRjaCAqLworCXN3aXRjaCAoIGluZi0+aW5mb3R5cGUgKSB7CisJCWNhc2UgSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFI6CisJCQlwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0NPTU1UQUxMSUVTOgorCQkJcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9IT1NUU0NBTlJFU1VMVFM6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUzoKKwkJCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfQ0hJTkZPUkVTVUxUUzoKKwkJCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9MSU5LU1RBVFVTOgorCQkJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0FTU09DU1RBVFVTOgorCQkJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9BVVRIUkVROgorCQkJcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX1BTVVNFUkNOVDoKKwkJCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQ6CisJCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfS0VZSURDSEFOR0VEXG4iKTsKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX0FTU09DUkVROgorCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX0FTU09DUkVRXG4iKTsKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX01JQ0ZBSUxVUkU6CisJCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfTUlDRkFJTFVSRVxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIlVua25vd24gaW5mbyB0eXBlPTB4JTAyeFxuIiwgaW5mLT5pbmZvdHlwZSk7CisJCQlicmVhazsKKwl9CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl90eGV4YworKgorKiBIYW5kbGVzIHRoZSBUeEV4YyBldmVudC4gIEEgVHJhbnNtaXQgRXhjZXB0aW9uIGV2ZW50IGluZGljYXRlcworKiB0aGF0IHRoZSBNQUMncyBUWCBwcm9jZXNzIHdhcyB1bnN1Y2Nlc3NmdWwgLSBzbyB0aGUgcGFja2V0IGRpZAorKiBub3QgZ2V0IHRyYW5zbWl0dGVkLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglzdGF0dXMJCXR4IGZyYW1lIHN0YXR1cyB3b3JkCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBzdGF0dXMpCit7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiVHhFeGMgc3RhdHVzPTB4JXguXG4iLCBzdGF0dXMpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl90eAorKgorKiBIYW5kbGVzIHRoZSBUeCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJc3RhdHVzCQl0eCBmcmFtZSBzdGF0dXMgd29yZAorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDQsICJUeCBDb21wbGV0ZSwgc3RhdHVzPTB4JTA0eFxuIiwgc3RhdHVzKTsKKwkvKiB1cGRhdGUgbGludXggbmV0d29yayBzdGF0cyAqLworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X3BhY2tldHMrKzsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X3J4CisqCisqIEhhbmRsZXMgdGhlIFJ4IGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCURCRkVOVEVSOworCisJcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXYsIHNrYik7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9hbGxvYworKgorKiBIYW5kbGVzIHRoZSBBbGxvYyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFggfHwgV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHByaXNtMnN0YV9zdXNwZW5kX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlpZiAod2xhbmRldikgeworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCXA4MDIxMV9zdXNwZW5kKHdsYW5kZXYpOworCX0KKworCS8vIGNhbGwgYSBuZXRpZl9kZXZpY2VfZGV0YWNoKHdsYW5kZXYtPm5ldGRldikgPworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3Jlc3VtZV9wY2kgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHdsYW5kZXYpIHsKKwkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCQlwODAyMTFfcmVzdW1lKHdsYW5kZXYpOworCX0KKworICAgICAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBjcmVhdGVfd2xhbgorKgorKiBDYWxsZWQgYXQgbW9kdWxlIGluaXQgdGltZS4gIFRoaXMgY3JlYXRlcyB0aGUgd2xhbmRldmljZV90IHN0cnVjdHVyZQorKiBhbmQgaW5pdGlhbGl6ZXMgaXQgd2l0aCByZWxldmFudCBiaXRzLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJdGhlIGNyZWF0ZWQgd2xhbmRldmljZV90IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKiAJYWxzbyBhbGxvY2F0ZXMgdGhlIHByaXYvaHcgc3RydWN0dXJlcy4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgd2xhbmRldmljZV90ICpjcmVhdGVfd2xhbih2b2lkKQoreworICAgICAgICB3bGFuZGV2aWNlX3QgICAgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdAkqaHcgPSBOVUxMOworCisgICAgICAJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KKwl3bGFuZGV2ID0Ja21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7CisJaHcgPQkJa21hbGxvYyhzaXplb2YoaGZhMzg0eF90KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsYW5kZXYgfHwgIWh3KSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCQlpZiAoaHcpCQlrZnJlZShodyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIENsZWFyIGFsbCB0aGUgc3RydWN0cyAqLworCW1lbXNldCh3bGFuZGV2LCAwLCBzaXplb2Yod2xhbmRldmljZV90KSk7CisJbWVtc2V0KGh3LCAwLCBzaXplb2YoaGZhMzg0eF90KSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCisJd2xhbmRldi0+bnNkbmFtZSA9IGRldl9pbmZvOworCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkc7CisJd2xhbmRldi0+cHJpdiA9IGh3OworCXdsYW5kZXYtPm9wZW4gPSBwcmlzbTJzdGFfb3BlbjsKKwl3bGFuZGV2LT5jbG9zZSA9IHByaXNtMnN0YV9jbG9zZTsKKwl3bGFuZGV2LT5yZXNldCA9IHByaXNtMnN0YV9yZXNldDsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXdsYW5kZXYtPm5zZF9wcm9jX3JlYWQgPSBwcmlzbTJzdGFfcHJvY19yZWFkOworI2VuZGlmCisJd2xhbmRldi0+dHhmcmFtZSA9IHByaXNtMnN0YV90eGZyYW1lOworCXdsYW5kZXYtPm1sbWVyZXF1ZXN0ID0gcHJpc20yc3RhX21sbWVyZXF1ZXN0OworCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Q7CisJd2xhbmRldi0+dHhfdGltZW91dCA9IGhmYTM4NHhfdHhfdGltZW91dDsKKworCXdsYW5kZXYtPm5zZGNhcHMgPSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgfAorCSAgICAgICAgICAgICAgICAgICBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHVjdHVyZS4gKi8KKyAgICAgICAgaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOworCisJcmV0dXJuIHdsYW5kZXY7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcHJpc20yc3RhX3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpCit7CisJY2hhcgkgKnAgPSBwYWdlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgZGF0YTsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCisJVUlOVDE2IGh3dHlwZSA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAob2Zmc2V0ICE9IDApIHsKKwkJKmVvZiA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvLyBYWFggMHgwMDAxIGZvciBwcmlzbTIuNS8zLCAweDAwMDAgZm9yIHByaXNtMi4KKwlod3R5cGUgPSBCSVQwOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWlmIChody0+aXNyYW0xNikKKwkJaHd0eXBlIHw9IEJJVDE7CisjZW5kaWYKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlod3R5cGUgfD0gQklUMjsKKyNlbmRpZgorCisjZGVmaW5lIFBSSVNNMl9DVlNfSUQgIiRJZDogcHJpc20yc3RhLmMgMTgyNiAyMDA3LTAzLTE5IDE1OjM3OjAwWiBwaXp6YSAkIgorCisJcCArPSBzcHJpbnRmKHAsICIjICVzIHZlcnNpb24gJXMgKCVzKSAnJXMnXG5cbiIsCisJCSAgICAgZGV2X2luZm8sCisJCSAgICAgV0xBTl9SRUxFQVNFLCBXTEFOX0JVSUxEX0RBVEUsIFBSSVNNMl9DVlNfSUQpOworCisJcCArPSBzcHJpbnRmKHAsICIjIG5pYyBoL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICBody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAorCQkgICAgIGh3LT5pZGVudF9uaWMubWlub3IsIGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisKKwlwICs9IHNwcmludGYocCwgIiMgcHJpIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkgICAgIGh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJCSAgICAgaHctPmlkZW50X3ByaV9mdy5taW5vciwgaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKworCWlmIChody0+aWRlbnRfc3RhX2Z3LmlkID09IDB4MWYpIHsKKwkJcCArPSBzcHJpbnRmKHAsICIjIHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9IGVsc2UgeworCQlwICs9IHNwcmludGYocCwgIiMgYXAgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJfQorCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCXAgKz0gc3ByaW50ZihwLCAiIyBpbml0aWFsIG5pYyBodyB0eXBlLCBuZWVkZWQgZm9yIFNTRiByYW1kbFxuIik7CisJcCArPSBzcHJpbnRmKHAsICJpbml0bmljaHc9JTA0eFxuIiwgaHd0eXBlKTsKKyNlbmRpZgorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiAocCAtIHBhZ2UpOworfQorI2VuZGlmCisKK3ZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCWludCByZXN1bHQgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKKwkJZ290byBkb25lOworCisJLyogd2UgZG9uJ3QgY2FyZSBpZiB3ZSdyZSBpbiBBUCBtb2RlICovCisJaWYgKCh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9OT05FKSB8fAorCSAgICAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX0FQKSkgeworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSXQgb25seSBtYWtlcyBzZW5zZSB0byBwb2xsIHRoZXNlIGluIG5vbi1JQlNTICovCisJaWYgKHdsYW5kZXYtPm1hY21vZGUgIT0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBKSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWSwKKwkJCQkJCSZody0+cXVhbCwKKwkJCQkJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4pOworCisJCWlmIChyZXN1bHQpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLy8gcXVhbC5DUV9jdXJyQlNTOyAvLyBsaW5rCisJCS8vIEFTTF9jdXJyQlNTOyAgLy8gbGV2ZWwKKwkJLy8gcXVhbC5BTkxfY3VyckZDOyAvLyBub2lzZQorCisJCVdMQU5fTE9HX0RFQlVHKDMsICJjb21tc3F1YWwgJWQgJWQgJWRcbiIsCisJCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAorCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyksCisJCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKKwl9CisKKwkvKiBMYXN0bHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCU1NJRCBkaWRuJ3QgY2hhbmdlIG9uIHVzICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAorCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAorCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKwlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikmc3NpZCwKKwkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisKKworCS8qIFJlc2NoZWR1bGUgdGltZXIgKi8KKwltb2RfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIsIGppZmZpZXMgKyBIWik7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKK3ZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKworCURCRkVOVEVSOworCisJc2NoZWR1bGVfd29yaygmaHctPmNvbW1zcXVhbF9iaCk7CisKKwlEQkZFWElUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvdmVyc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy92ZXJzaW9uLmgKQEAgLTAsMCArMSw2NCBAQAorLyogc3JjL2luY2x1ZGUvd2xhbi92ZXJzaW9uLmgKKyoKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjaWZuZGVmIF9XTEFOX1ZFUlNJT05fSAorI2RlZmluZSBfV0xBTl9WRVJTSU9OX0gKKyNpZm5kZWYgS0VSTkVMX1ZFUlNJT04KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworLyogV0xBTl9IT1NUSUYgKGdlbmVyYWxseSBzZXQgb24gdGhlIGNvbW1hbmQgbGluZSwgbm90IGRldGVjdGVkKSAqLworI2RlZmluZSBXTEFOX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0xBTl9QQ01DSUEgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdMQU5fSVNBICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTEFOX1BDSSAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV0xBTl9VU0IgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdMQU5fUExYICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTEFOX1NMQVZFICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV0xBTl9SRUxFQVNFCSIwLjIuOCIKKyNkZWZpbmUgV0xBTl9SRUxFQVNFX0NPREUgMHgwMDAyMDgKKyNkZWZpbmUgV0xBTl9CVUlMRF9EQVRFICJUaHUgT2N0ICAyIDExOjA0OjQyIFBEVCAyMDA4IgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3dsYW5fY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDI2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCkBAIC0wLDAgKzEsNzU3IEBACisvKiB3bGFuX2NvbXBhdC5oCisqCisqIFR5cGVzIGFuZCBtYWNyb3MgdG8gYWlkIGluIHBvcnRhYmlsaXR5CisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjZGVmaW5lIF9XTEFOX0NPTVBBVF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBFc3RhYmxpc2ggUGxhdGZvcm0gSWRlbnRpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEtleSBtYWNyb3M6ICovCisvKiBXTEFOX0NQVV9GQU1JTFkgKi8KKwkjZGVmaW5lIFdMQU5fSXg4NgkJCTEKKwkjZGVmaW5lIFdMQU5fUFBDCQkJMgorCSNkZWZpbmUgV0xBTl9JeDk2CQkJMworCSNkZWZpbmUgV0xBTl9BUk0JCQk0CisJI2RlZmluZSBXTEFOX0FMUEhBCQkJNQorCSNkZWZpbmUgV0xBTl9NSVBTCQkJNgorCSNkZWZpbmUgV0xBTl9IUFBBCQkJNworCSNkZWZpbmUgV0xBTl9TUEFSQwkJCTgKKwkjZGVmaW5lIFdMQU5fU0ggICAgCQkJOQorCSNkZWZpbmUgV0xBTl94ODZfNjQgICAgICAgICAgICAgICAgICAgICAxMAorLyogV0xBTl9TWVNBUkNIICovCisJI2RlZmluZSBXTEFOX1BDQVQJCQkxCisJI2RlZmluZSBXTEFOX01CWAkJCTIKKwkjZGVmaW5lIFdMQU5fUlBYCQkJMworCSNkZWZpbmUgV0xBTl9MV0FSQ0gJCQk0CisJI2RlZmluZSBXTEFOX1BNQUMJCQk1CisJI2RlZmluZSBXTEFOX1NLSUZGCQkJNgorCSNkZWZpbmUgV0xBTl9CSVRTWQkJCTcKKwkjZGVmaW5lIFdMQU5fQUxQSEFBUkNICQkJNworCSNkZWZpbmUgV0xBTl9NSVBTQVJDSAkJCTkKKwkjZGVmaW5lIFdMQU5fSFBQQUFSQ0gJCQkxMAorCSNkZWZpbmUgV0xBTl9TUEFSQ0FSQ0gJCQkxMQorCSNkZWZpbmUgV0xBTl9TSEFSQ0ggICAJCQkxMgorCisvKiBOb3RlOiB0aGUgUExYIEhPU1RJRiBhYm92ZSByZWZlcnMgdG8gc29tZSB2ZW5kb3JzIGltcGxlbWVudGF0aW9ucyBmb3IgKi8KKy8qICAgICAgIFBDSS4gIEl0J3MgYSBQTFggY2hpcCB0aGF0IGlzIGEgUENJIHRvIFBDTUNJQSBhZGFwdGVyLCBidXQgaXQgICAqLworLyogICAgICAgaXNuJ3QgYSByZWFsIFBDTUNJQSBob3N0IGludGVyZmFjZSBhZGFwdGVyIHByb3ZpZGluZyBhbGwgdGhlICAgICovCisvKiAgICAgICBjYXJkJnNvY2tldCBzZXJ2aWNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmIChkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykpCisjaWZuZGVmIF9fcHBjX18KKyNkZWZpbmUgX19wcGNfXworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI2lmbmRlZiBBVVRPQ09ORl9JTkNMVURFRAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5feDg2XzY0CisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fUENBVAorI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2k0ODZfXykgfHwgZGVmaW5lZChfX2k1ODZfXykgfHwgZGVmaW5lZChfX2k2ODZfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9JeDg2CisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fUENBVAorI2VsaWYgZGVmaW5lZChfX3BwY19fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX1BQQworCSNpZiBkZWZpbmVkKENPTkZJR19NQlgpCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fTUJYCisJI2VsaWYgZGVmaW5lZChDT05GSUdfUlBYTElURSkKKwkJI2RlZmluZSBXTEFOX1NZU0FSQ0gJV0xBTl9SUFgKKwkjZWxpZiBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKQorCQkjZGVmaW5lIFdMQU5fU1lTQVJDSAlXTEFOX1JQWAorCSNlbHNlCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fUE1BQworCSNlbmRpZgorI2VsaWYgZGVmaW5lZChfX2FybV9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX0FSTQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX1NLSUZGCisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9BTFBIQQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX0FMUEhBQVJDSAorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9NSVBTCisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fTUlQU0FSQ0gKKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fSFBQQQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX0hQUEFBUkNICisjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKyAgICAgICAgI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkgICAgICAgICBXTEFOX1NQQVJDCisgICAgICAgICNkZWZpbmUgV0xBTl9TWVNBUkNIICAgICAgICAgICAgV0xBTl9TUEFSQworI2VsaWYgZGVmaW5lZChfX3NoX18pCisgICAgICAgICNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZICAgICAgICAgV0xBTl9TSAorICAgICAgICAjZGVmaW5lIFdMQU5fU1lTQVJDSCAgICAgICAgICAgIFdMQU5fU0hBUkNICisgICAgICAgICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICAgICAgI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fXworICAgICAgICAjZW5kaWYKKyNlbHNlCisJI2Vycm9yICJObyBDUFUgaWRlbnRpZmllZCEiCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgICBTb21lIGJpZyBlbmRpYW4gbWFjaGluZXMgaW1wbGljaXRseSBkbyBhbGwgSS9PIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KKworICAgSW4gcGFydGljdWxhcjoKKyAgICAgICAgICBMaW51eC9QUEMgb24gUG93ZXJNYWNzIChQQ0kpCisJICBBcm0vSW50ZWwgWHNjYWxlIChQQ0kpCisKKyAgIFRoaXMgbWF5IGFsc28gYWZmZWN0IFBMWCBib2FyZHMgYW5kIG90aGVyIEJFICZ8IFBQQyBwbGF0Zm9ybXM7CisgICBhcyBuZXcgb25lcyBhcmUgZGlzY292ZXJlZCwgYWRkIHRoZW0gYmVsb3cuCisqLworCisjaWYgZGVmaW5lZChXTEFOX0hPU1RJRikKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENJKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorI2lmICgoV0xBTl9TWVNBUkNIID09IFdMQU5fU0tJRkYpIHx8IChXTEFOX1NZU0FSQ0ggPT0gV0xBTl9QTUFDKSB8fCAoV0xBTl9TWVNBUkNIID09IFdMQU5fU1BBUkMpKQorI2RlZmluZSBSRVZFUlNFX0VORElBTgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQml0IHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQklUMAkweDAwMDAwMDAxCisjZGVmaW5lIEJJVDEJMHgwMDAwMDAwMgorI2RlZmluZSBCSVQyCTB4MDAwMDAwMDQKKyNkZWZpbmUgQklUMwkweDAwMDAwMDA4CisjZGVmaW5lIEJJVDQJMHgwMDAwMDAxMAorI2RlZmluZSBCSVQ1CTB4MDAwMDAwMjAKKyNkZWZpbmUgQklUNgkweDAwMDAwMDQwCisjZGVmaW5lIEJJVDcJMHgwMDAwMDA4MAorI2RlZmluZSBCSVQ4CTB4MDAwMDAxMDAKKyNkZWZpbmUgQklUOQkweDAwMDAwMjAwCisjZGVmaW5lIEJJVDEwCTB4MDAwMDA0MDAKKyNkZWZpbmUgQklUMTEJMHgwMDAwMDgwMAorI2RlZmluZSBCSVQxMgkweDAwMDAxMDAwCisjZGVmaW5lIEJJVDEzCTB4MDAwMDIwMDAKKyNkZWZpbmUgQklUMTQJMHgwMDAwNDAwMAorI2RlZmluZSBCSVQxNQkweDAwMDA4MDAwCisjZGVmaW5lIEJJVDE2CTB4MDAwMTAwMDAKKyNkZWZpbmUgQklUMTcJMHgwMDAyMDAwMAorI2RlZmluZSBCSVQxOAkweDAwMDQwMDAwCisjZGVmaW5lIEJJVDE5CTB4MDAwODAwMDAKKyNkZWZpbmUgQklUMjAJMHgwMDEwMDAwMAorI2RlZmluZSBCSVQyMQkweDAwMjAwMDAwCisjZGVmaW5lIEJJVDIyCTB4MDA0MDAwMDAKKyNkZWZpbmUgQklUMjMJMHgwMDgwMDAwMAorI2RlZmluZSBCSVQyNAkweDAxMDAwMDAwCisjZGVmaW5lIEJJVDI1CTB4MDIwMDAwMDAKKyNkZWZpbmUgQklUMjYJMHgwNDAwMDAwMAorI2RlZmluZSBCSVQyNwkweDA4MDAwMDAwCisjZGVmaW5lIEJJVDI4CTB4MTAwMDAwMDAKKyNkZWZpbmUgQklUMjkJMHgyMDAwMDAwMAorI2RlZmluZSBCSVQzMAkweDQwMDAwMDAwCisjZGVmaW5lIEJJVDMxCTB4ODAwMDAwMDAKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdV9pbnQ4X3QJVUlOVDg7Cit0eXBlZGVmIHVfaW50MTZfdAlVSU5UMTY7Cit0eXBlZGVmIHVfaW50MzJfdAlVSU5UMzI7CisKK3R5cGVkZWYgaW50OF90CQlJTlQ4OwordHlwZWRlZiBpbnQxNl90CQlJTlQxNjsKK3R5cGVkZWYgaW50MzJfdAkJSU5UMzI7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFVJTlQ7Cit0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBJTlQ7CisKK3R5cGVkZWYgdV9pbnQ2NF90CVVJTlQ2NDsKK3R5cGVkZWYgaW50NjRfdAkJSU5UNjQ7CisKKyNkZWZpbmUgVUlOVDhfTUFYCSgweGZmVUwpCisjZGVmaW5lIFVJTlQxNl9NQVgJKDB4ZmZmZlVMKQorI2RlZmluZSBVSU5UMzJfTUFYCSgweGZmZmZmZmZmVUwpCisKKyNkZWZpbmUgSU5UOF9NQVgJKDB4N2ZMKQorI2RlZmluZSBJTlQxNl9NQVgJKDB4N2ZmZkwpCisjZGVmaW5lIElOVDMyX01BWAkoMHg3ZmZmZmZmZkwpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBDb21waWxlciBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgX19XTEFOX0FUVFJJQl9QQUNLX18JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gT1MgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZm5kZWYgV0xBTl9EQlZBUgorI2RlZmluZSBXTEFOX0RCVkFSCXdsYW5fZGVidWcKKyNlbmRpZgorCisjaWZuZGVmIEtFUk5FTF9WRVJTSU9OCisjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyMgIGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOCkpCisjICAgIGluY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBkZWZpbmUgUFJFRU1QVF9NQVNLICAoMHgwMDAwMDBGRlVMKQorIyAgZGVmaW5lIHByZWVtcHRfY291bnQoKSAoMFVMKQorI2VuZGlmCisKKyNkZWZpbmUgV0xBTl9MT0dfRVJST1IoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIHggLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOworCisjZGVmaW5lIFdMQU5fTE9HX1dBUk5JTkcoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiB4ICwgX19GVU5DVElPTl9fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19OT1RJQ0UoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIHggLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOworCisjZGVmaW5lIFdMQU5fTE9HX0lORk8oYXJncy4uLiApIHByaW50ayhLRVJOX0lORk8gYXJncykKKworI2lmIGRlZmluZWQoV0xBTl9JTkNMVURFX0RFQlVHKQorCSNkZWZpbmUgV0xBTl9BU1NFUlQoYykgaWYgKCghKGMpKSAmJiBXTEFOX0RCVkFSID49IDEpIHsgXAorCQlXTEFOX0xPR19ERUJVRygxLCAiQXNzZXJ0aW9uIGZhaWx1cmUhXG4iKTsgfQorCSNkZWZpbmUgV0xBTl9IRVhfRFVNUCggbCwgeCwgcCwgbikJaWYoIFdMQU5fREJWQVIgPj0gKGwpICl7IFwKKwkJaW50IF9faV9fOyBcCisJCXByaW50ayhLRVJOX0RFQlVHIHggIjoiKTsgXAorCQlmb3IoIF9faV9fPTA7IF9faV9fIDwgKG4pOyBfX2lfXysrKSBcCisJCQlwcmludGsoICIgJTAyeCIsICgoVUlOVDgqKShwKSlbX19pX19dKTsgXAorCQlwcmludGsoIlxuIik7IH0KKwkjZGVmaW5lIERCRkVOVEVSIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiLS0tLT5cbiIpOyB9IH0KKwkjZGVmaW5lIERCRkVYSVQgIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiPC0tLS1cbiIpOyB9IH0KKworCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCx4LGFyZ3MuLi4pIGlmICggV0xBTl9EQlZBUiA+PSAobCkpIHByaW50ayhLRVJOX0RFQlVHICIlcyglbHUpOiAiIHggLCAgX19GVU5DVElPTl9fLCAocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9NQVNLKSwgIyNhcmdzICk7CisjZWxzZQorCSNkZWZpbmUgV0xBTl9BU1NFUlQoYykKKwkjZGVmaW5lIFdMQU5fSEVYX0RVTVAoIGwsIHMsIHAsIG4pCisJI2RlZmluZSBEQkZFTlRFUgorCSNkZWZpbmUgREJGRVhJVAorCisJI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLCBzLCBhcmdzLi4uKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fU01QX18JCQkxCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI2lmICgoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKSB8fCAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkpKQorI2RlZmluZSBVUkJfT05MWV9DQUxMQkFDSworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE5KSkKKyNkZWZpbmUgUFRfUkVHUyAgICAsIHN0cnVjdCBwdF9yZWdzICpyZWdzCisjZWxzZQorI2RlZmluZSBQVF9SRUdTCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsNykpCisjICBkZWZpbmUgZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYyhhKSAgZGVsX3RpbWVyX3N5bmMoYSkKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMTcpKQorI2RlZmluZSBDT05GSUdfTkVUTElOSwkJMQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNkZWZpbmUga2ZyZWVfcyhhLCBiKQlrZnJlZSgoYSkpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDIsMTgpKQorI2lmbmRlZiBpbml0X3dhaXRxdWV1ZV9oZWFkCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMCwxNikpCisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2hlYWQocCkgICgqKHApID0gTlVMTCkKKyNlbHNlCisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2hlYWQocCkgIGluaXRfd2FpdHF1ZXVlKHApCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHdhaXRfcXVldWUgKndhaXRfcXVldWVfaGVhZF90OwordHlwZWRlZiBzdHJ1Y3Qgd2FpdF9xdWV1ZSB3YWl0X3F1ZXVlX3Q7CisjZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKGIpICB7IGN1cnJlbnQtPnN0YXRlID0gKGIpOyBtYigpOyB9CisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2VudHJ5KGEsIGIpIHsgKGEpLT50YXNrID0gY3VycmVudDsgfQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAorLy8gcmV0dmFsID09IDA7IHNpZ25hbCBtZXQ7IHdlJ3JlIGdvb2QuCisvLyByZXR2YWwgPCAwOyBpbnRlcnJ1cHRlZCBieSBzaWduYWwuCisvLyByZXR2YWwgPiAwOyB0aW1lZCBvdXQuCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkgIC8vIGZpeG1lPworCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHdhaXRfcXVldWVfdCBfX3dhaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKDs7KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KSAgICA7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8vIDIuMgorCisKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCByZXQpICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IHdhaXRfcXVldWUgX193YWl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX193YWl0LnRhc2sgPSBjdXJyZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAgLy8gdmVyc2lvbiA+PSAyLjQKKworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkgIFwKKyh7CQkJCQkJCQkJICBcCisJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJICBcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQkgIFwKKwkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBfX3JldCk7IFwKKwlfX3JldDsJCQkJCQkJCSAgXAorfSkKKworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKKyNpZmRlZiBfTElOVVhfTElTVF9ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisgICAgICAgIGxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKKyAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKKworICAgICAgZmlyc3QtPnByZXYgPSBoZWFkOworICAgICAgaGVhZC0+bmV4dCA9IGZpcnN0OworCisgICAgICBsYXN0LT5uZXh0ID0gYXQ7CisgICAgICBhdC0+cHJldiA9IGxhc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKyAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisgICAgICBsaXN0X2FkZChsaXN0LCBoZWFkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKyAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZCk7CisJCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCX0KK30KKworCisjZW5kaWYgIC8vIExJU1RfSAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwxLDkwKSkKKyNkZWZpbmUgc3Bpbl9sb2NrKGwpICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX3VubG9jayhsKSAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGwsZikgIGRvIHsgc2F2ZV9mbGFncyhmKTsgY2xpKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUobCxmKSBkbyB7IHJlc3RvcmVfZmxhZ3MoZik7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHMpICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl90cnlsb2NrKGwpICAgICAgICAgKDEpCit0eXBlZGVmIGludCBzcGlubG9ja190OworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKSAvLyBYWFggPz8/CisjZGVmaW5lIHNwaW5fbG9ja19iaCAgICAgICAgIHNwaW5fbG9jaworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkgICAgICAgKCoodm9sYXRpbGUgY2hhciAqKSgmKHgpLT5sb2NrKSA8PSAwKQorI2Vsc2UKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobCkgICAgICAgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyOCkpCisjZGVmaW5lIF9fdXNlcgorI2RlZmluZSBfX2lvbWVtCisjZW5kaWYKKworI2lmZGVmIF9MSU5VWF9QUk9DX0ZTX0gKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDI1KSkKKworZXh0ZXJuIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKgorY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVzID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgbW9kZSwgYmFzZSk7CisgICAgaWYgKHJlcykgeworICAgICAgICByZXMtPnJlYWRfcHJvYyA9IHJlYWRfcHJvYzsKKyAgICAgICAgcmVzLT5kYXRhID0gZGF0YTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywyOSkpCisjaWZuZGVmIHByb2NfbWtkaXIKKyNkZWZpbmUgcHJvY19ta2RpcihuYW1lLCByb290KSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGRElSLCByb290KQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBfTElOVVhfUFJPQ19GU19IICovCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorI2lmbmRlZiBJTklUX1RRVUVVRQorI2RlZmluZSBQUkVQQVJFX1RRVUVVRShfdHEsIF9yb3V0aW5lLCBfZGF0YSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF90cSktPnJvdXRpbmUgPSBfcm91dGluZTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfdHEpLT5kYXRhID0gX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSU5JVF9UUVVFVUUoX3RxLCBfcm91dGluZSwgX2RhdGEpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFEKCYoX3RxKS0+bGlzdCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+c3luYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFJFUEFSRV9UUVVFVUUoKF90cSksIChfcm91dGluZSksIChfZGF0YSkpOyAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgY29udGFpbmVyX29mCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsJCQlcCisgICAgICAgIGNvbnN0IHR5cGVvZiggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsJXAorICAgICAgICAodHlwZSAqKSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQorI2VuZGlmCisKKyNpZm5kZWYgSU5JVF9XT1JLCisjZGVmaW5lIHdvcmtfc3RydWN0IHRxX3N0cnVjdAorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNkZWZpbmUgc2NoZWR1bGVfd29yayhhKSAgIHF1ZXVlX3Rhc2soYSwgJnRxX3NjaGVkdWxlcikKKyNlbHNlCisjZGVmaW5lIHNjaGVkdWxlX3dvcmsoYSkgIHNjaGVkdWxlX3Rhc2soYSkKKyNlbmRpZgorCisjZGVmaW5lIGZsdXNoX3NjaGVkdWxlZF93b3JrICBmbHVzaF9zY2hlZHVsZWRfdGFza3MKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKSAgSU5JVF9UUVVFVUUoX3dxLCAodm9pZCAoKikodm9pZCAqKSlfcm91dGluZSwgX3dxKQorI2VuZGlmCisKKyNlbHNlIC8vID49IDIuNSBrZXJuZWwKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKQlJTklUX1dPUksoX3dxLCAodm9pZCAoKikodm9pZCAqKSlfcm91dGluZSwgX3dxKQorI2Vsc2UKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKQlJTklUX1dPUksoX3dxLCBfcm91dGluZSkKKyNlbmRpZgorCisjZW5kaWYgLy8gPj0gMi41IGtlcm5lbAorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkpCit0eXBlZGVmIHN0cnVjdCBkZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZWxpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDQpKQordHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKKyNlbHNlCisjdW5kZWYgbmV0ZGV2aWNlX3QKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZW5kaWYKKworI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmIChXSVJFTEVTU19FWFQgPCAxMykKK3N0cnVjdCBpd19yZXF1ZXN0X2luZm8KK3sKKyAgICAgICAgX191MTYgICAgICAgICAgIGNtZDsgICAgICAgICAgICAvKiBXaXJlbGVzcyBFeHRlbnNpb24gY29tbWFuZCAqLworICAgICAgICBfX3UxNiAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIE1vcmUgdG8gY29tZSA7LSkgKi8KK307CisjZW5kaWYKKyNlbmRpZgorCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwxLDE4KSkKKyNkZWZpbmUgTU9EVUxFX1BBUk0oYSxiKSAgICAgICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX0FVVEhPUihhKSAgICAgICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX0RFU0NSSVBUSU9OKGEpICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoYSkgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyN1bmRlZiAgR0VUX1VTRV9DT1VOVAorI2RlZmluZSBHRVRfVVNFX0NPVU5UKG0pICAgICAgICBtb2RfdXNlX2NvdW50XworI2VuZGlmCisKKyNpZm5kZWYgTU9EVUxFX09XTkVSCisjZGVmaW5lIE1PRFVMRV9PV05FUihhKSAgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRV9MSUNFTlNFCisjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKG0pICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZW5kaWYKKworLyogVE9ETzogIERvIHdlIGNhcmUgYWJvdXQgdGhpcz8gKi8KKyNpZm5kZWYgTU9EVUxFX0RFVklDRV9UQUJMRQorI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKGZvbyxiYXIpCisjZW5kaWYKKworI2RlZmluZSB3bGFuX21pbnV0ZXMydGlja3MoYSkgKChhKSood2xhbl90aWNrc19wZXJfc2VjICogIDYwKSkKKyNkZWZpbmUgd2xhbl9zZWNvbmRzMnRpY2tzKGEpICgoYSkqKHdsYW5fdGlja3NfcGVyX3NlYykpCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQ3KSkKKyNkZWZpbmUgTkVXX01PRFVMRV9DT0RFCisjaWZkZWYgQU5DSUVOVF9NT0RVTEVfQ09ERQorI3VuZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyNlbmRpZgorI2VsaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyNSkpCisjZGVmaW5lIG1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCBwZXJtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIGlubGluZSB2b2lkICpfX2NoZWNrX2V4aXN0ZW5jZV8jI25hbWUodm9pZCkgeyByZXR1cm4gJm5hbWU7IH0gXAorICAgICAgICBNT0RVTEVfUEFSTShuYW1lLCBfTU9EVUxFX1BBUk1fU1RSSU5HXyAjIyB0eXBlKQorCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfYnl0ZSAiYiIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR19zaG9ydCAiaCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191c2hvcnQgImgiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfaW50ICJpIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX3VpbnQgImkiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfbG9uZyAibCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191bG9uZyAibCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR19ib29sICJpIgorI2VuZGlmCisKKy8qIGxpbnV4IDwgMi41LjY5ICovCisjaWZuZGVmIElSUV9OT05FCit0eXBlZGVmIHZvaWQgaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9OT05FCisjZGVmaW5lIElSUV9IQU5ETEVECisjZGVmaW5lIElSUV9SRVRWQUwoeCkKKyNlbmRpZgorCisjaWZuZGVmIGluX2F0b21pYworI2RlZmluZSBpbl9hdG9taWMoKSAgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDEzKSkKKyNkZWZpbmUgVVJCX0FTWU5DX1VOTElOSyAwCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsNykpCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgIFVTQl9BU1lOQ19VTkxJTksKKyNkZWZpbmUgdXNiX2ZpbGxfYnVsa191cmIgIEZJTExfQlVMS19VUkIKKyNkZWZpbmUgdXNiX2tpbGxfdXJiICB1c2JfdW5saW5rX3VyYgorI2Vsc2UKKyNkZWZpbmUgVVNCX1FVRVVFX0JVTEsgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSkKK3R5cGVkZWYgdTMyIHBtX21lc3NhZ2VfdDsKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw5KSkKKyNkZWZpbmUgaG90cGx1Z19wYXRoICAiL2V0Yy9ob3RwbHVnL3dsYW4uYWdlbnQiCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisjZGVmaW5lIGZyZWVfbmV0ZGV2KHgpICAgICAgIGtmcmVlKHgpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOSkpCisjZGVmaW5lIGV0aF9oZHIoeCkgICAgICAgICAgICh4KS0+bWFjLmV0aGVybmV0CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIGRlbF90aW1lcl9zeW5jKGEpICAgICAgIGRlbF90aW1lcihhKQorI2VuZGlmCisKKyNpZm5kZWYgbWlnaHRfc2xlZXAKKyNkZWZpbmUgbWlnaHRfc2xlZXAoYSkgICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogQXBwYXJlbnRseSAyLjQuMiBldGh0b29sIGlzIHF1aXRlIGRpZmZlcmVudCwgbWF5YmUgbmV3ZXIgdG9vPyAqLworI2lmIChkZWZpbmVkKFNJT0VUSFRPT0wpICYmICFkZWZpbmVkKEVUSFRPT0xfR0RSVklORk8pKQorI3VuZGVmIFNJT0VUSFRPT0wKKyNlbmRpZgorCisvLyBwY21jaWEtY3Mgc3R1ZmYKKyNpZiAoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpICYmIFwKKyAgICAgIWRlZmluZWQocGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKSkKKyNkZWZpbmUgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGhhbmRsZSwgcmVnKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGhhbmRsZSwgcmVnKQorI2RlZmluZSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KGhhbmRsZSwgcmVnKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWdpc3RlckNsaWVudCwgaGFuZGxlLCByZWcpCisjZGVmaW5lIHBjbWNpYV9kZXJlZ2lzdGVyX2NsaWVudChoYW5kbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKERlcmVnaXN0ZXJDbGllbnQsIGhhbmRsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhHZXRGaXJzdFR1cGxlLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0TmV4dFR1cGxlLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0VHVwbGVEYXRhLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFBhcnNlVHVwbGUsIGhhbmRsZSwgdHVwbGUsIHBhcnNlKQorI2RlZmluZSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsIGNvbmZpZykgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Q29uZmlndXJhdGlvbkluZm8sIGhhbmRsZSwgY29uZmlnKQorI2RlZmluZSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdElPLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgcmVxKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZXF1ZXN0SVJRLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdENvbmZpZ3VyYXRpb24sIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGhhbmRsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVsZWFzZUNvbmZpZ3VyYXRpb24sIGhhbmRsZSkKKyNkZWZpbmUgcGNtY2lhX3JlbGVhc2VfaW8oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VJTywgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX2lycShoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVsZWFzZUlSUSwgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyh3aW4pIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VXaW5kb3csIHdpbikKKyNkZWZpbmUgcGNtY2lhX2dldF9jYXJkX3NlcnZpY2VzX2luZm8oaW5mbykgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Q2FyZFNlcnZpY2VzSW5mbywgaW5mbykKKyNkZWZpbmUgcGNtY2lhX3JlcG9ydF9lcnJvcihoYW5kbGUsIGVycikgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVwb3J0RXJyb3IsIGhhbmRsZSwgZXJyKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBIYXJkd2FyZSBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBpZWVlMmhvc3QxNihuKQlfX2xlMTZfdG9fY3B1KG4pCisjZGVmaW5lIGllZWUyaG9zdDMyKG4pCV9fbGUzMl90b19jcHUobikKKyNkZWZpbmUgaG9zdDJpZWVlMTYobikJX19jcHVfdG9fbGUxNihuKQorI2RlZmluZSBob3N0MmllZWUzMihuKQlfX2NwdV90b19sZTMyKG4pCisKKyNpZiAoV0xBTl9DUFVfRkFNSUxZICE9IFdMQU5fTUlQUykKK3R5cGVkZWYgVUlOVDMyIHBoeXNfdDsKKyNlbmRpZgorCisjaWYgKFdMQU5fQ1BVX0ZBTUlMWSA9PSBXTEFOX1BQQykKKyAgICAgICAjZGVmaW5lIHdsYW5faW53KGEpICAgICAgICAgICAgICAgICAgICAgaW5fYmUxNigodW5zaWduZWQgc2hvcnQgKikoKGEpK19JT19CQVNFKSkKKyAgICAgICAjZGVmaW5lIHdsYW5faW53X2xlMTZfdG9fY3B1KGEpICAgICAgICAgaW53KChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0dyh2LGEpICAgICAgICAgICAgICAgICAgb3V0X2JlMTYoKHVuc2lnbmVkIHNob3J0ICopKChhKStfSU9fQkFTRSksICh2KSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0d19jcHVfdG9fbGUxNih2LGEpICAgICAgb3V0dygodiksKGEpKQorI2Vsc2UKKyAgICAgICAjZGVmaW5lIHdsYW5faW53KGEpICAgICAgICAgICAgICAgICAgICAgaW53KChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5faW53X2xlMTZfdG9fY3B1KGEpICAgICAgICAgX19jcHVfdG9fbGUxNihpbncoKGEpKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0dyh2LGEpICAgICAgICAgICAgICAgICAgb3V0dygodiksKGEpKQorICAgICAgICNkZWZpbmUgd2xhbl9vdXR3X2NwdV90b19sZTE2KHYsYSkgICAgICBvdXR3KF9fY3B1X3RvX2xlMTYoKHYpKSwoYSkpCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEdlbmVyYWwgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIHdsYW5fbWF4KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgd2xhbl9taW4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCisjZGVmaW5lIHdsYW5faXNwcmludChjKQkoKChjKSA+ICgweDE5KSkgJiYgKChjKSA8ICgweDdmKSkpCisKKyNkZWZpbmUgd2xhbl9oZXhjaGFyKHgpICgoKHgpIDwgMHgwYSkgPyAoJzAnICsgKHgpKSA6ICgnYScgKyAoKHgpIC0gMHgwYSkpKQorCisvKiBDcmVhdGUgYSBzdHJpbmcgb2YgcHJpbnRhYmxlIGNoYXJzIGZyb20gc29tZXRoaW5nIHRoYXQgbWlnaHQgbm90IGJlICovCisvKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0ciBiZSA0KmxlbiArIDEgYnl0ZXMgbG9uZyAqLworI2RlZmluZSB3bGFuX21rcHJpbnRzdHIoYnVmLCBidWZsZW4sIHN0ciwgc3RybGVuKSBcCit7IFwKKwlpbnQgaSA9IDA7IFwKKwlpbnQgaiA9IDA7IFwKKwltZW1zZXQoc3RyLCAwLCAoc3RybGVuKSk7IFwKKwlmb3IgKGkgPSAwOyBpIDwgKGJ1Zmxlbik7IGkrKykgeyBcCisJCWlmICggd2xhbl9pc3ByaW50KChidWYpW2ldKSApIHsgXAorCQkJKHN0cilbal0gPSAoYnVmKVtpXTsgXAorCQkJaisrOyBcCisJCX0gZWxzZSB7IFwKKwkJCShzdHIpW2pdID0gJ1xcJzsgXAorCQkJKHN0cilbaisxXSA9ICd4JzsgXAorCQkJKHN0cilbaisyXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweGYwKSA+PiA0KTsgXAorCQkJKHN0cilbaiszXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweDBmKSk7IFwKKwkJCWogKz0gNDsgXAorCQl9IFwKKwl9IFwKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitleHRlcm4gaW50IHdsYW5fZGVidWc7CisjZW5kaWYKKworZXh0ZXJuIGludCB3bGFuX2V0aGNvbnY7CQkvKiBXaGF0J3MgdGhlIGRlZmF1bHQgZXRoY29udj8gKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2VuZGlmIC8qIF9XTEFOX0NPTVBBVF9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKaW5kZXggZWM3YWViNS4uNDFiNjUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKQEAgLTQyLDggKzQyLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiAkTG9nOiBpeGouYyx2ICQKLSAqCiAgKiBSZXZpc2lvbiA0LjggIDIwMDMvMDcvMDkgMTk6Mzk6MDAgIERhbmllbGUgQmVsbHVjY2kKICAqIEF1ZGl0IHNvbWUgY29weV8qX3VzZXIgYW5kIG1pbm9yIGNsZWFudXAuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYyBiL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKaW5kZXggNGQ3NGJhMy4uMzdjYWY0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYworKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCkBAIC01NCw3ICs1NCw2IEBACiAJaWYgKG1pbm9yID49IFBIT05FX05VTV9ERVZJQ0VTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmcGhvbmVfbG9jayk7CiAJcCA9IHBob25lX2RldmljZVttaW5vcl07CiAJaWYgKHApCkBAIC04MSw3ICs4MCw2IEBACiAJZm9wc19wdXQob2xkX2ZvcHMpOwogZW5kOgogCW11dGV4X3VubG9jaygmcGhvbmVfbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL0tjb25maWcgYi9kcml2ZXJzL3Vpby9LY29uZmlnCmluZGV4IDQxOTBiZTYuLjA0Yjk1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL0tjb25maWcKKysrIGIvZHJpdmVycy91aW8vS2NvbmZpZwpAQCAtNTgsNCArNTgsMTcgQEAKIAogCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NteC4KIAorY29uZmlnIFVJT19TRVJDT1MzCisJdHJpc3RhdGUgIkF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQgZHJpdmVyIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFVzZXJzcGFjZSBJL08gaW50ZXJmYWNlIGZvciB0aGUgU2VyY29zIElJSSBQQ0kgY2FyZCBmcm9tCisJICBBdXRvbWF0YSBHbWJILiBUaGUgdXNlcnNwYWNlIHBhcnQgb2YgdGhpcyBkcml2ZXIgd2lsbCBiZQorCSAgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIHRoZSBBdXRvbWF0YSBHbWJIIHdlYiBzaXRlLgorCisJICBBdXRvbWF0YSBHbWJIOiAgICAgICAgaHR0cDovL3d3dy5hdXRvbWF0YXdlYi5jb20KKwkgIFNlcmNvcyBJSUkgaW50ZXJmYWNlOiBodHRwOi8vd3d3LnNlcmNvcy5jb20KKworCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NlcmNvczMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9NYWtlZmlsZSBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCmluZGV4IDg2NjdiYmQuLmU2OTU1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQAogb2JqLSQoQ09ORklHX1VJT19QRFJWKQkrPSB1aW9fcGRydi5vCiBvYmotJChDT05GSUdfVUlPX1BEUlZfR0VOSVJRKQkrPSB1aW9fcGRydl9nZW5pcnEubwogb2JqLSQoQ09ORklHX1VJT19TTVgpCSs9IHVpb19zbXgubworb2JqLSQoQ09ORklHX1VJT19TRVJDT1MzKQkrPSB1aW9fc2VyY29zMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDNhNjkzNGIuLjVkY2NmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC02Nyw2ICs2NywxMSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPnNpemUpOwogfQogCitzdGF0aWMgc3NpemVfdCBtYXBfb2Zmc2V0X3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPmFkZHIgJiB+UEFHRV9NQVNLKTsKK30KKwogc3RydWN0IHVpb19zeXNmc19lbnRyeSB7CiAJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgdWlvX21lbSAqLCBjaGFyICopOwpAQCAtNzcsMTAgKzgyLDEzIEBACiAJX19BVFRSKGFkZHIsIFNfSVJVR08sIG1hcF9hZGRyX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCB1aW9fc3lzZnNfZW50cnkgc2l6ZV9hdHRyaWJ1dGUgPQogCV9fQVRUUihzaXplLCBTX0lSVUdPLCBtYXBfc2l6ZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgdWlvX3N5c2ZzX2VudHJ5IG9mZnNldF9hdHRyaWJ1dGUgPQorCV9fQVRUUihvZmZzZXQsIFNfSVJVR08sIG1hcF9vZmZzZXRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdHRyc1tdID0gewogCSZhZGRyX2F0dHJpYnV0ZS5hdHRyLAogCSZzaXplX2F0dHJpYnV0ZS5hdHRyLAorCSZvZmZzZXRfYXR0cmlidXRlLmF0dHIsCiAJTlVMTCwJLyogbmVlZCB0byBOVUxMIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzICovCiB9OwogCkBAIC00ODIsMTUgKzQ5MCwyMyBAQAogewogCXN0cnVjdCB1aW9fZGV2aWNlICppZGV2ID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKIAlpbnQgbWkgPSB1aW9fZmluZF9tZW1faW5kZXgodm1hKTsKIAlpZiAobWkgPCAwKQogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCisJLyoKKwkgKiBXZSBuZWVkIHRvIHN1YnRyYWN0IG1pIGJlY2F1c2UgdXNlcnNwYWNlIHVzZXMgb2Zmc2V0ID0gTipQQUdFX1NJWkUKKwkgKiB0byB1c2UgbWVtW05dLgorCSAqLworCW9mZnNldCA9ICh2bWYtPnBnb2ZmIC0gbWkpIDw8IFBBR0VfU0hJRlQ7CisKIAlpZiAoaWRldi0+aW5mby0+bWVtW21pXS5tZW10eXBlID09IFVJT19NRU1fTE9HSUNBTCkKLQkJcGFnZSA9IHZpcnRfdG9fcGFnZShpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIpOworCQlwYWdlID0gdmlydF90b19wYWdlKGlkZXYtPmluZm8tPm1lbVttaV0uYWRkciArIG9mZnNldCk7CiAJZWxzZQotCQlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkKilpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIpOworCQlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopaWRldi0+aW5mby0+bWVtW21pXS5hZGRyCisJCQkJCQkJKyBvZmZzZXQpOwogCWdldF9wYWdlKHBhZ2UpOwogCXZtZi0+cGFnZSA9IHBhZ2U7CiAJcmV0dXJuIDA7CkBAIC02ODIsOSArNjk4LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9nZXRfbWlub3I7CiAKLQlpZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodWlvX2NsYXNzLT5jbGFzcywgcGFyZW50LAotCQkJCQkgIE1LREVWKHVpb19tYWpvciwgaWRldi0+bWlub3IpLCBpZGV2LAotCQkJCQkgICJ1aW8lZCIsIGlkZXYtPm1pbm9yKTsKKwlpZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHVpb19jbGFzcy0+Y2xhc3MsIHBhcmVudCwKKwkJCQkgIE1LREVWKHVpb19tYWpvciwgaWRldi0+bWlub3IpLCBpZGV2LAorCQkJCSAgInVpbyVkIiwgaWRldi0+bWlub3IpOwogCWlmIChJU19FUlIoaWRldi0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVJTzogZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCXJldCA9IFBUUl9FUlIoaWRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2LmMgYi9kcml2ZXJzL3Vpby91aW9fcGRydi5jCmluZGV4IDBiNGVmMzkuLmQ0OTRjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2LmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnYuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAotI2RlZmluZSBEUklWRVJfTkFNRSAidWlvIgorI2RlZmluZSBEUklWRVJfTkFNRSAidWlvX3BkcnYiCiAKIHN0cnVjdCB1aW9fcGxhdGRhdGEgewogCXN0cnVjdCB1aW9faW5mbyAqdWlvaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMgYi9kcml2ZXJzL3Vpby91aW9fc2VyY29zMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZDFiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Vpby91aW9fc2VyY29zMy5jCkBAIC0wLDAgKzEsMjQzIEBACisvKiBzZXJjb3MzOiBVSU8gZHJpdmVyIGZvciB0aGUgQXV0b21hdGEgU2VyY29zIElJSSBQQ0kgY2FyZAorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTGludXRyb25peCBHbWJICisgICAgIEF1dGhvcjogSm9obiBPZ25lc3MgPGpvaG4ub2duZXNzQGxpbnV0cm9uaXguZGU+CisKKyAgIFRoaXMgaXMgYSBzdHJhaWdodC1mb3J3YXJkIFVJTyBkcml2ZXIsIHdoZXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkCisgICBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHJlLWVuYWJsZWQgdmlhIGEgd3JpdGUgdG8gdGhlIFVJTyBkZXZpY2UKKyAgIGJ5IHRoZSB1c2Vyc3BhY2UtcGFydC4KKworICAgVGhlIG9ubHkgcGFydCB0aGF0IG1heSBzZWVtIG9kZCBpcyB0aGUgdXNlIG9mIGEgbG9naWNhbCBPUiB3aGVuCisgICBzdG9yaW5nIGFuZCByZXN0b3JpbmcgZW5hYmxlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIGRvbmUgYmVjYXVzZSB0aGUKKyAgIHVzZXJzcGFjZS1wYXJ0IGNvdWxkIGRpcmVjdGx5IG1vZGlmeSB0aGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgYXQgYW55IHRpbWUuIFRvIHJlZHVjZSBwb3NzaWJsZSBjb25mbGljdHMsIHRoZSBrZXJuZWwgZHJpdmVyIHVzZXMKKyAgIGEgbG9naWNhbCBPUiB0byBtYWtlIG1vcmUgY29udHJvbGxlZCBjaGFuZ2VzIChyYXRoZXIgdGhhbiBibGluZGx5CisgICBvdmVyd3JpdGluZyBwcmV2aW91cyB2YWx1ZXMpLgorCisgICBSYWNlIGNvbmRpdGlvbnMgZXhpc3QgaWYgdGhlIHVzZXJzcGFjZS1wYXJ0IGRpcmVjdGx5IG1vZGlmaWVzIHRoZQorICAgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciB3aGlsZSBpbiBvcGVyYXRpb24uIFRoZSBjb25zZXF1ZW5jZXMgYXJlCisgICB0aGF0IGNlcnRhaW4gaW50ZXJydXB0cyB3b3VsZCBmYWlsIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEZvcgorICAgdGhpcyByZWFzb24sIHRoZSB1c2Vyc3BhY2UtcGFydCBzaG91bGQgb25seSBkaXJlY3RseSBtb2RpZnkgdGhlCisgICBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIGF0IHRoZSBiZWdpbm5pbmcgKHRvIGdldCB0aGluZ3MgZ29pbmcpLgorICAgVGhlIHVzZXJzcGFjZS1wYXJ0IGNhbiBzYWZlbHkgZGlzYWJsZSBpbnRlcnJ1cHRzIGF0IGFueSB0aW1lIHVzaW5nCisgICBhIHdyaXRlIHRvIHRoZSBVSU8gZGV2aWNlLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiBJRCdzIGZvciBTRVJDT1MgSUlJIFBDSSBjYXJkIChQTFggOTAzMCkgKi8KKyNkZWZpbmUgU0VSQ09TX1NVQl9WRU5ET1JfSUQgIDB4MTk3MQorI2RlZmluZSBTRVJDT1NfU1VCX1NZU0lEXzM1MzAgMHgzNTMwCisjZGVmaW5lIFNFUkNPU19TVUJfU1lTSURfMzUzNSAweDM1MzUKKyNkZWZpbmUgU0VSQ09TX1NVQl9TWVNJRF8zNzgwIDB4Mzc4MAorCisvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIElFUjBfT0ZGU0VUIDB4MDgKKworLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJU1IwX09GRlNFVCAweDE4CisKK3N0cnVjdCBzZXJjb3MzX3ByaXYgeworCXUzMiBpZXIwX2NhY2hlOworCXNwaW5sb2NrX3QgaWVyMF9jYWNoZV9sb2NrOworfTsKKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGllcjBfY2FjaGVfbG9jayBpcyBsb2NrZWQhICovCitzdGF0aWMgdm9pZCBzZXJjb3MzX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgdWlvX2luZm8gKmluZm8sCisJCQkJICAgICAgIHN0cnVjdCBzZXJjb3MzX3ByaXYgKnByaXYpCit7CisJdm9pZCBfX2lvbWVtICppZXIwID0gaW5mby0+bWVtWzNdLmludGVybmFsX2FkZHIgKyBJRVIwX09GRlNFVDsKKworCS8qIGFkZCBlbmFibGVkIGludGVycnVwdHMgdG8gY2FjaGUgKi8KKwlwcml2LT5pZXIwX2NhY2hlIHw9IGlvcmVhZDMyKGllcjApOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaW93cml0ZTMyKDAsIGllcjApOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgaWVyMF9jYWNoZV9sb2NrIGlzIGxvY2tlZCEgKi8KK3N0YXRpYyB2b2lkIHNlcmNvczNfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHVpb19pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBzZXJjb3MzX3ByaXYgKnByaXYpCit7CisJdm9pZCBfX2lvbWVtICppZXIwID0gaW5mby0+bWVtWzNdLmludGVybmFsX2FkZHIgKyBJRVIwX09GRlNFVDsKKworCS8qIHJlc3RvcmUgcHJldmlvdXNseSBlbmFibGVkIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIoaW9yZWFkMzIoaWVyMCkgfCBwcml2LT5pZXIwX2NhY2hlLCBpZXIwKTsKKwlwcml2LT5pZXIwX2NhY2hlID0gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNlcmNvczNfaGFuZGxlcihpbnQgaXJxLCBzdHJ1Y3QgdWlvX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNlcmNvczNfcHJpdiAqcHJpdiA9IGluZm8tPnByaXY7CisJdm9pZCBfX2lvbWVtICppc3IwID0gaW5mby0+bWVtWzNdLmludGVybmFsX2FkZHIgKyBJU1IwX09GRlNFVDsKKwl2b2lkIF9faW9tZW0gKmllcjAgPSBpbmZvLT5tZW1bM10uaW50ZXJuYWxfYWRkciArIElFUjBfT0ZGU0VUOworCisJaWYgKCEoaW9yZWFkMzIoaXNyMCkgJiBpb3JlYWQzMihpZXIwKSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9jaygmcHJpdi0+aWVyMF9jYWNoZV9sb2NrKTsKKwlzZXJjb3MzX2Rpc2FibGVfaW50ZXJydXB0cyhpbmZvLCBwcml2KTsKKwlzcGluX3VubG9jaygmcHJpdi0+aWVyMF9jYWNoZV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzZXJjb3MzX2lycWNvbnRyb2woc3RydWN0IHVpb19pbmZvICppbmZvLCBzMzIgaXJxX29uKQoreworCXN0cnVjdCBzZXJjb3MzX3ByaXYgKnByaXYgPSBpbmZvLT5wcml2OworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+aWVyMF9jYWNoZV9sb2NrKTsKKwlpZiAoaXJxX29uKQorCQlzZXJjb3MzX2VuYWJsZV9pbnRlcnJ1cHRzKGluZm8sIHByaXYpOworCWVsc2UKKwkJc2VyY29zM19kaXNhYmxlX2ludGVycnVwdHMoaW5mbywgcHJpdik7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5pZXIwX2NhY2hlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VyY29zM19zZXR1cF9pb21lbShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgdWlvX2luZm8gKmluZm8sCisJCQkgICAgICAgaW50IG4sIGludCBwY2lfYmFyKQoreworCWluZm8tPm1lbVtuXS5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgcGNpX2Jhcik7CisJaWYgKCFpbmZvLT5tZW1bbl0uYWRkcikKKwkJcmV0dXJuIC0xOworCWluZm8tPm1lbVtuXS5pbnRlcm5hbF9hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBwY2lfYmFyKSwKKwkJCQkJICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgcGNpX2JhcikpOworCWlmICghaW5mby0+bWVtW25dLmludGVybmFsX2FkZHIpCisJCXJldHVybiAtMTsKKwlpbmZvLT5tZW1bbl0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBwY2lfYmFyKTsKKwlpbmZvLT5tZW1bbl0ubWVtdHlwZSA9IFVJT19NRU1fUEhZUzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2VyY29zM19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc2VyY29zM19wcml2ICpwcml2OworCWludCBpOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1aW9faW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNlcmNvczNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQorCQlnb3RvIG91dF9mcmVlX3ByaXY7CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsICJzZXJjb3MzIikpCisJCWdvdG8gb3V0X2Rpc2FibGU7CisKKwkvKiB3ZSBvbmx5IG5lZWQgUENJIEJBUidzIDAsIDIsIDMsIDQsIDUgKi8KKwlpZiAoc2VyY29zM19zZXR1cF9pb21lbShkZXYsIGluZm8sIDAsIDApKQorCQlnb3RvIG91dF91bm1hcDsKKwlpZiAoc2VyY29zM19zZXR1cF9pb21lbShkZXYsIGluZm8sIDEsIDIpKQorCQlnb3RvIG91dF91bm1hcDsKKwlpZiAoc2VyY29zM19zZXR1cF9pb21lbShkZXYsIGluZm8sIDIsIDMpKQorCQlnb3RvIG91dF91bm1hcDsKKwlpZiAoc2VyY29zM19zZXR1cF9pb21lbShkZXYsIGluZm8sIDMsIDQpKQorCQlnb3RvIG91dF91bm1hcDsKKwlpZiAoc2VyY29zM19zZXR1cF9pb21lbShkZXYsIGluZm8sIDQsIDUpKQorCQlnb3RvIG91dF91bm1hcDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5pZXIwX2NhY2hlX2xvY2spOworCWluZm8tPnByaXYgPSBwcml2OworCWluZm8tPm5hbWUgPSAiU2VyY29zX0lJSV9QQ0kiOworCWluZm8tPnZlcnNpb24gPSAiMC4wLjEiOworCWluZm8tPmlycSA9IGRldi0+aXJxOworCWluZm8tPmlycV9mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRDsKKwlpbmZvLT5oYW5kbGVyID0gc2VyY29zM19oYW5kbGVyOworCWluZm8tPmlycWNvbnRyb2wgPSBzZXJjb3MzX2lycWNvbnRyb2w7CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCWlmICh1aW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmRldiwgaW5mbykpCisJCWdvdG8gb3V0X3VubWFwOworCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWlmIChpbmZvLT5tZW1baV0uaW50ZXJuYWxfYWRkcikKKwkJCWlvdW5tYXAoaW5mby0+bWVtW2ldLmludGVybmFsX2FkZHIpOworCX0KKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK291dF9mcmVlX3ByaXY6CisJa2ZyZWUocHJpdik7CitvdXRfZnJlZToKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgc2VyY29zM19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKwl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UoaW5mbyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKGluZm8tPm1lbVtpXS5pbnRlcm5hbF9hZGRyKQorCQkJaW91bm1hcChpbmZvLT5tZW1baV0uaW50ZXJuYWxfYWRkcik7CisJfQorCWtmcmVlKGluZm8tPnByaXYpOworCWtmcmVlKGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2VyY29zM19wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7CisJCS52ZW5kb3IgPSAgICAgICBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9ICAgICAgIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPSAgICBTRVJDT1NfU1VCX1ZFTkRPUl9JRCwKKwkJLnN1YmRldmljZSA9ICAgIFNFUkNPU19TVUJfU1lTSURfMzUzMCwKKwl9LAorCXsKKwkJLnZlbmRvciA9ICAgICAgIFBDSV9WRU5ET1JfSURfUExYLAorCQkuZGV2aWNlID0gICAgICAgUENJX0RFVklDRV9JRF9QTFhfOTAzMCwKKwkJLnN1YnZlbmRvciA9ICAgIFNFUkNPU19TVUJfVkVORE9SX0lELAorCQkuc3ViZGV2aWNlID0gICAgU0VSQ09TX1NVQl9TWVNJRF8zNTM1LAorCX0sCisJeworCQkudmVuZG9yID0gICAgICAgUENJX1ZFTkRPUl9JRF9QTFgsCisJCS5kZXZpY2UgPSAgICAgICBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCQkuc3VidmVuZG9yID0gICAgU0VSQ09TX1NVQl9WRU5ET1JfSUQsCisJCS5zdWJkZXZpY2UgPSAgICBTRVJDT1NfU1VCX1NZU0lEXzM3ODAsCisJfSwKKwl7IDAsIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzZXJjb3MzX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic2VyY29zMyIsCisJLmlkX3RhYmxlID0gc2VyY29zM19wY2lfaWRzLAorCS5wcm9iZSA9IHNlcmNvczNfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBzZXJjb3MzX3BjaV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZXJjb3MzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNlcmNvczNfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZXJjb3MzX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJjb3MzX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZXJjb3MzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHNlcmNvczNfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlVJTyBkcml2ZXIgZm9yIHRoZSBBdXRvbWF0YSBTZXJjb3MgSUlJIFBDSSBjYXJkIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIE9nbmVzcyA8am9obi5vZ25lc3NAbGludXRyb25peC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwppbmRleCAwZGEyYzI1Li4wNmRkMTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAkJCQlfX2Z1bmNfXywgc2FyYi0+bGVuLCB2Y2MpOwogCQkvKiBkaXNjYXJkIGNlbGxzIGFscmVhZHkgcmVjZWl2ZWQgKi8KIAkJc2tiX3RyaW0oc2FyYiwgMCk7Ci0JCVVEU0xfQVNTRVJUKHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEIDw9IHNhcmItPmVuZCk7CisJCVVEU0xfQVNTRVJUKGluc3RhbmNlLCBzYXJiLT50YWlsICsgQVRNX0NFTExfUEFZTE9BRCA8PSBzYXJiLT5lbmQpOwogCX0KIAogCW1lbWNweShza2JfdGFpbF9wb2ludGVyKHNhcmIpLCBzb3VyY2UgKyBBVE1fQ0VMTF9IRUFERVIsIEFUTV9DRUxMX1BBWUxPQUQpOwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJCXVuc2lnbmVkIGNoYXIgKmNlbGxfYnVmID0gaW5zdGFuY2UtPmNlbGxfYnVmOwogCQl1bnNpZ25lZCBpbnQgc3BhY2VfbGVmdCA9IHN0cmlkZSAtIGJ1Zl91c2FnZTsKIAotCQlVRFNMX0FTU0VSVChidWZfdXNhZ2UgPD0gc3RyaWRlKTsKKwkJVURTTF9BU1NFUlQoaW5zdGFuY2UsIGJ1Zl91c2FnZSA8PSBzdHJpZGUpOwogCiAJCWlmIChhdmFpbF9kYXRhID49IHNwYWNlX2xlZnQpIHsKIAkJCS8qIGFkZCBuZXcgZGF0YSBhbmQgcHJvY2VzcyBjZWxsICovCkBAIC00NzUsNyArNDc1LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3RyaWRlID0gaW5zdGFuY2UtPnR4X2NoYW5uZWwuc3RyaWRlOwogCiAJdmRiZygiJXM6IHNrYi0+bGVuPSVkLCBhdmFpbF9zcGFjZT0ldSIsIF9fZnVuY19fLCBza2ItPmxlbiwgYXZhaWxfc3BhY2UpOwotCVVEU0xfQVNTRVJUKCEoYXZhaWxfc3BhY2UgJSBzdHJpZGUpKTsKKwlVRFNMX0FTU0VSVChpbnN0YW5jZSwgIShhdmFpbF9zcGFjZSAlIHN0cmlkZSkpOwogCiAJZm9yIChieXRlc193cml0dGVuID0gMDsgYnl0ZXNfd3JpdHRlbiA8IGF2YWlsX3NwYWNlICYmIGN0cmwtPmxlbjsKIAkgICAgIGJ5dGVzX3dyaXR0ZW4gKz0gc3RyaWRlLCB0YXJnZXQgKz0gc3RyaWRlKSB7CkBAIC01NDcsNyArNTQ3LDcgQEAKIAkJCQlpZiAoIXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CiAJCQkJCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwogCi0JCQkJCVVEU0xfQVNTRVJUKGFjdHVhbF9sZW5ndGggPD0gcGFja2V0X3NpemUpOworCQkJCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgYWN0dWFsX2xlbmd0aCA8PSBwYWNrZXRfc2l6ZSk7CiAKIAkJCQkJaWYgKCFtZXJnZV9sZW5ndGgpCiAJCQkJCQltZXJnZV9zdGFydCA9ICh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKQEAgLTExODgsNyArMTE4OCw3IEBACiAJCXN0cnVjdCB1cmIgKnVyYjsKIAkJdW5zaWduZWQgaW50IGlzb19wYWNrZXRzID0gdXNiX3BpcGVpc29jKGNoYW5uZWwtPmVuZHBvaW50KSA/IGNoYW5uZWwtPmJ1Zl9zaXplIC8gY2hhbm5lbC0+cGFja2V0X3NpemUgOiAwOwogCi0JCVVEU0xfQVNTRVJUKCF1c2JfcGlwZWlzb2MoY2hhbm5lbC0+ZW5kcG9pbnQpIHx8IHVzYl9waXBlaW4oY2hhbm5lbC0+ZW5kcG9pbnQpKTsKKwkJVURTTF9BU1NFUlQoaW5zdGFuY2UsICF1c2JfcGlwZWlzb2MoY2hhbm5lbC0+ZW5kcG9pbnQpIHx8IHVzYl9waXBlaW4oY2hhbm5lbC0+ZW5kcG9pbnQpKTsKIAogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKGlzb19wYWNrZXRzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaCBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAppbmRleCBlNjg4N2M2Li5mNmY0NTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCkBAIC00MCw5ICs0MCwxNSBAQAogKi8KIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIFVEU0xfQVNTRVJUKHgpCUJVR19PTighKHgpKQorI2RlZmluZSBVRFNMX0FTU0VSVChpbnN0YW5jZSwgeCkJQlVHX09OKCEoeCkpCiAjZWxzZQotI2RlZmluZSBVRFNMX0FTU0VSVCh4KQlkbyB7IGlmICghKHgpKSB3YXJuKCJmYWlsZWQgYXNzZXJ0aW9uICclcycgYXQgbGluZSAlZCIsIF9fc3RyaW5naWZ5KHgpLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgVURTTF9BU1NFUlQoaW5zdGFuY2UsIHgpCQkJCQlcCisJZG8gewlcCisJCWlmICghKHgpKQkJCQkJCVwKKwkJCWRldl93YXJuKCYoaW5zdGFuY2UpLT51c2JfaW50Zi0+ZGV2LAkJXAorCQkJCSAiZmFpbGVkIGFzc2VydGlvbiAnJXMnIGF0IGxpbmUgJWQiLAlcCisJCQkJIF9fc3RyaW5naWZ5KHgpLCBfX0xJTkVfXyk7CQlcCisJfSB3aGlsZSgwKQogI2VuZGlmCiAKICNkZWZpbmUgdXNiX2VycihpbnN0YW5jZSwgZm9ybWF0LCBhcmcuLi4pCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCmluZGV4IDg0NzI1NDMuLjE3ZDE2N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJICAgIG51bV92ZW5kb3IgIT0gbnVtX3Byb2R1Y3QgfHwKIAkgICAgbnVtX3ZlbmRvciAhPSBudW1fcnhfZW5kcG9pbnQgfHwKIAkgICAgbnVtX3ZlbmRvciAhPSBudW1fdHhfZW5kcG9pbnQpIHsKLQkJd2FybigibWFsZm9ybWVkIG1vZHVsZSBwYXJhbWV0ZXJzIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInh1c2JhdG06IG1hbGZvcm1lZCBtb2R1bGUgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKaW5kZXggNjZmMTdlZC4uMjUxOWUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCkBAIC00MCwzICs0MCwxMyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2RjLXdkbS4KIAorY29uZmlnIFVTQl9UTUMKKwl0cmlzdGF0ZSAiVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgZGV2aWNlIHRoYXQgZm9sbG93cworCSAgdGhlIFVTQi5vcmcgc3BlY2lmaWNhdGlvbiBmb3IgVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IGRldmljZXMKKwkgIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNidG1jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQppbmRleCA1MzVkNTlhLi4zMmU4NTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19VU0JfQUNNKQkJKz0gY2RjLWFjbS5vCiBvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IHVzYmxwLm8KIG9iai0kKENPTkZJR19VU0JfV0RNKQkJKz0gY2RjLXdkbS5vCitvYmotJChDT05GSUdfVVNCX1RNQykJCSs9IHVzYnRtYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggYzI1NzQ1My4uZmFiMjNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMzI2LDggKzMyNiw4IEBACiAJdXNiX21hcmtfbGFzdF9idXN5KGFjbS0+ZGV2KTsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19mdW5jX18sIHJldHZhbCk7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICIKKwkJCSJyZXN1bHQgJWQiLCBfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAogLyogZGF0YSBpbnRlcmZhY2UgcmV0dXJucyBpbmNvbWluZyBieXRlcywgb3Igd2UgZ290IHVudGhyb3R0bGVkICovCkBAIC01MTQsNyArNTE0LDcgQEAKIAogCXJ2ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CiAJaWYgKHJ2IDwgMCkgewotCQllcnIoIkF1dG9wbSBmYWlsdXJlIGluICVzIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZhY20tPmRldi0+ZGV2LCAiQXV0b3BtIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoYWNtLT5kZWxheWVkX3diKSB7CkBAIC05MjQsNyArOTI0LDcgQEAKIAkKIAkvKiBub3JtYWwgcHJvYmluZyovCiAJaWYgKCFidWZmZXIpIHsKLQkJZXJyKCJXZWlyZCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJXZWlyZCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTkzNCwyMSArOTM0LDI0IEBACiAJCQlidWZsZW4gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhbGVuOwogCQkJYnVmZmVyID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYTsKIAkJfSBlbHNlIHsKLQkJCWVycigiWmVybyBsZW5ndGggZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKKwkJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCQkiWmVybyBsZW5ndGggZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiAJd2hpbGUgKGJ1ZmxlbiA+IDApIHsKIAkJaWYgKGJ1ZmZlciBbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkgewotCQkJZXJyKCJza2lwcGluZyBnYXJiYWdlXG4iKTsKKwkJCWRldl9lcnIoJmludGYtPmRldiwgInNraXBwaW5nIGdhcmJhZ2VcbiIpOwogCQkJZ290byBuZXh0X2Rlc2M7CiAJCX0KIAogCQlzd2l0Y2ggKGJ1ZmZlciBbMl0pIHsKIAkJCWNhc2UgVVNCX0NEQ19VTklPTl9UWVBFOiAvKiB3ZSd2ZSBmb3VuZCBpdCAqLwogCQkJCWlmICh1bmlvbl9oZWFkZXIpIHsKLQkJCQkJZXJyKCJNb3JlIHRoYW4gb25lIHVuaW9uIGRlc2NyaXB0b3IsIHNraXBwaW5nIC4uLiIpOworCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJNb3JlIHRoYW4gb25lICIKKwkJCQkJCSJ1bmlvbiBkZXNjcmlwdG9yLCAiCisJCQkJCQkic2tpcHBpbmcgLi4uXG4iKTsKIAkJCQkJZ290byBuZXh0X2Rlc2M7CiAJCQkJfQogCQkJCXVuaW9uX2hlYWRlciA9IChzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjICopCkBAIC05NjYsNyArOTY5LDkgQEAKIAkJCQljYWxsX21hbmFnZW1lbnRfZnVuY3Rpb24gPSBidWZmZXJbM107CiAJCQkJY2FsbF9pbnRlcmZhY2VfbnVtID0gYnVmZmVyWzRdOwogCQkJCWlmICgoY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uICYgMykgIT0gMykKLQkJCQkJZXJyKCJUaGlzIGRldmljZSBjYW5ub3QgZG8gY2FsbHMgb24gaXRzIG93bi4gSXQgaXMgbm8gbW9kZW0uIik7CisJCQkJCWRldl9lcnIoJmludGYtPmRldiwgIlRoaXMgZGV2aWNlICIKKwkJCQkJCSJjYW5ub3QgZG8gY2FsbHMgb24gaXRzIG93bi4gIgorCQkJCQkJIkl0IGlzIG5vIG1vZGVtLlxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCS8qIHRoZXJlIGFyZSBMT1RTIG1vcmUgQ0RDIGRlc2NyaXB0b3JzIHRoYXQKQEAgLTEwNTEsNyArMTA1Niw3IEBACiAJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQUNNX1RUWV9NSU5PUlMgJiYgYWNtX3RhYmxlW21pbm9yXTsgbWlub3IrKyk7CiAKIAlpZiAobWlub3IgPT0gQUNNX1RUWV9NSU5PUlMpIHsKLQkJZXJyKCJubyBtb3JlIGZyZWUgYWNtIGRldmljZXMiKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAibm8gbW9yZSBmcmVlIGFjbSBkZXZpY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNDU0LDcgKzE0NTksOCBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKaW5kZXggN2U4ZTEyMy4uNzQyOWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwpAQCAtMTMyLDEwICsxMzIsMTIgQEAKIAkJCQkibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAtRVNIVVRET1dOIik7CiAJCQlicmVhazsKIAkJY2FzZSAtRVBJUEU6Ci0JCQllcnIoIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFIik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJVbmV4cGVjdGVkIGVycm9yICVkIiwgc3RhdHVzKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkiVW5leHBlY3RlZCBlcnJvciAlZFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTcwLDE2ICsxNzIsMTggQEAKIAkJCXJldHVybjsgLyogdW5wbHVnICovCiAJCWNhc2UgLUVQSVBFOgogCQkJc2V0X2JpdChXRE1fSU5UX1NUQUxMLCAmZGVzYy0+ZmxhZ3MpOwotCQkJZXJyKCJTdGFsbCBvbiBpbnQgZW5kcG9pbnQiKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIlN0YWxsIG9uIGludCBlbmRwb2ludFxuIik7CiAJCQlnb3RvIHN3OyAvKiBoYWx0IGlzIGNsZWFyZWQgaW4gd29yayAqLwogCQlkZWZhdWx0OgotCQkJZXJyKCJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgc3RhdHVzKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pKSB7Ci0JCWVycigid2RtX2ludF9jYWxsYmFjayAtICVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX2ludF9jYWxsYmFjayAtICVkIGJ5dGVzXG4iLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTk4LDcgKzIwMiw4IEBACiAJCWdvdG8gZXhpdDsKIAlkZWZhdWx0OgogCQljbGVhcl9iaXQoV0RNX1BPTExfUlVOTklORywgJmRlc2MtPmZsYWdzKTsKLQkJZXJyKCJ1bmtub3duIG5vdGlmaWNhdGlvbiAlZCByZWNlaXZlZDogaW5kZXggJWQgbGVuICVkIiwKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJInVua25vd24gbm90aWZpY2F0aW9uICVkIHJlY2VpdmVkOiBpbmRleCAlZCBsZW4gJWRcbiIsCiAJCQlkci0+Yk5vdGlmaWNhdGlvblR5cGUsIGRyLT53SW5kZXgsIGRyLT53TGVuZ3RoKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTIzNiwxNCArMjQxLDE2IEBACiBzdzoKIAkJCXJ2ID0gc2NoZWR1bGVfd29yaygmZGVzYy0+cnh3b3JrKTsKIAkJCWlmIChydikKLQkJCQllcnIoIkNhbm5vdCBzY2hlZHVsZSB3b3JrIik7CisJCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCQkiQ2Fubm90IHNjaGVkdWxlIHdvcmtcbiIpOwogCQl9CiAJfQogZXhpdDoKIAlydiA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJ2KQotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcnYpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX2Z1bmNfXywgcnYpOwogCiB9CiAKQEAgLTM1Myw3ICszNjAsNyBAQAogCWlmIChydiA8IDApIHsKIAkJa2ZyZWUoYnVmKTsKIAkJY2xlYXJfYml0KFdETV9JTl9VU0UsICZkZXNjLT5mbGFncyk7Ci0JCWVycigiVHggVVJCIGVycm9yOiAlZCIsIHJ2KTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiVHggVVJCIGVycm9yOiAlZFxuIiwgcnYpOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJmRlc2MtPmludGYtPmRldiwgIlR4IFVSQiBoYXMgYmVlbiBzdWJtaXR0ZWQgaW5kZXg9JWQiLAogCQkJcmVxLT53SW5kZXgpOwpAQCAtNDAxLDcgKzQwOCw4IEBACiAJCQlpbnQgdCA9IGRlc2MtPnJlcnI7CiAJCQlkZXNjLT5yZXJyID0gMDsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+aXVzcGluKTsKLQkJCWVycigicmVhZGluZyBoYWQgcmVzdWx0ZWQgaW4gJWQiLCB0KTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkicmVhZGluZyBoYWQgcmVzdWx0ZWQgaW4gJWRcbiIsIHQpOwogCQkJcnYgPSAtRUlPOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTQ0MCw3ICs0NDgsNyBAQAogZXJyOgogCW11dGV4X3VubG9jaygmZGVzYy0+cmxvY2spOwogCWlmIChydiA8IDApCi0JCWVycigid2RtX3JlYWQ6IGV4aXQgZXJyb3IiKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAid2RtX3JlYWQ6IGV4aXQgZXJyb3JcbiIpOwogCXJldHVybiBydjsKIH0KIApAQCAtNDUwLDcgKzQ1OCw4IEBACiAKIAl3YWl0X2V2ZW50KGRlc2MtPndhaXQsICF0ZXN0X2JpdChXRE1fSU5fVVNFLCAmZGVzYy0+ZmxhZ3MpKTsKIAlpZiAoZGVzYy0+d2VyciA8IDApCi0JCWVycigiRXJyb3IgaW4gZmx1c2ggcGF0aDogJWQiLCBkZXNjLT53ZXJyKTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiRXJyb3IgaW4gZmx1c2ggcGF0aDogJWRcbiIsCisJCQlkZXNjLT53ZXJyKTsKIAogCXJldHVybiBkZXNjLT53ZXJyOwogfQpAQCAtNTAyLDcgKzUxMSw3IEBACiAKIAlydiA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXNjLT5pbnRmKTsKIAlpZiAocnYgPCAwKSB7Ci0JCWVycigiRXJyb3IgYXV0b3BtIC0gJWQiLCBydik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIkVycm9yIGF1dG9wbSAtICVkXG4iLCBydik7CiAJCWdvdG8gb3V0OwogCX0KIAlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKQEAgLTUxMiw3ICs1MjEsOCBAQAogCQlydiA9IHVzYl9zdWJtaXRfdXJiKGRlc2MtPnZhbGlkaXR5LCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ2IDwgMCkgewogCQkJZGVzYy0+Y291bnQtLTsKLQkJCWVycigiRXJyb3Igc3VibWl0dGluZyBpbnQgdXJiIC0gJWQiLCBydik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIkVycm9yIHN1Ym1pdHRpbmcgaW50IHVyYiAtICVkXG4iLCBydik7CiAJCX0KIAl9IGVsc2UgewogCQlydiA9IDA7CkBAIC02MDAsNyArNjEwLDcgQEAKIAogCXdoaWxlIChidWZsZW4gPiAwKSB7CiAJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWVycigic2tpcHBpbmcgZ2FyYmFnZSIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAic2tpcHBpbmcgZ2FyYmFnZVxuIik7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCkBAIC02MTQsNyArNjI0LDggQEAKIAkJCQkiRmluZGluZyBtYXhpbXVtIGJ1ZmZlciBsZW5ndGg6ICVkIiwgbWF4Y29tKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJJZ25vcmluZyBleHRyYSBoZWFkZXIsIHR5cGUgJWQsIGxlbmd0aCAlZCIsCisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJIklnbm9yaW5nIGV4dHJhIGhlYWRlciwgdHlwZSAlZCwgbGVuZ3RoICVkXG4iLAogCQkJCWJ1ZmZlclsyXSwgYnVmZmVyWzBdKTsKIAkJCWJyZWFrOwogCQl9CkBAIC03NzIsNyArNzgzLDggQEAKIAlpZiAoZGVzYy0+Y291bnQpIHsKIAkJcnYgPSB1c2Jfc3VibWl0X3VyYihkZXNjLT52YWxpZGl0eSwgR0ZQX05PSU8pOwogCQlpZiAocnYgPCAwKQotCQkJZXJyKCJFcnJvciByZXN1bWUgc3VibWl0dGluZyBpbnQgdXJiIC0gJWQiLCBydik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIkVycm9yIHJlc3VtZSBzdWJtaXR0aW5nIGludCB1cmIgLSAlZFxuIiwgcnYpOwogCX0KIAlyZXR1cm4gcnY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCAwNjQ3MTY0Li5iNTc3NWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTU5Myw4ICs1OTMsOSBAQAogCQkJCWVyciA9IHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsCiAJCQkJCWFyZywgJm5ld0NoYW5uZWwpOwogCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWVycigidXNibHAlZDogZXJyb3IgPSAlZCBzZXR0aW5nICIKLQkJCQkJCSJIUCBjaGFubmVsIiwKKwkJCQkJZGV2X2VycigmdXNibHAtPmRldi0+ZGV2LAorCQkJCQkJInVzYmxwJWQ6IGVycm9yID0gJWQgc2V0dGluZyAiCisJCQkJCQkiSFAgY2hhbm5lbFxuIiwKIAkJCQkJCXVzYmxwLT5taW5vciwgZXJyKTsKIAkJCQkJcmV0dmFsID0gLUVJTzsKIAkJCQkJZ290byBkb25lOwpAQCAtMTA3NiwxNSArMTA3NywxNiBAQAogCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKLQlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gTlVMTDsKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwOwogCWludCBwcm90b2NvbDsKIAlpbnQgcmV0dmFsOwogCiAJLyogTWFsbG9jIGFuZCBzdGFydCBpbml0aWFsaXppbmcgdXNibHAgc3RydWN0dXJlIHNvIHdlIGNhbiB1c2UgaXQKIAkgKiBkaXJlY3RseS4gKi8KLQlpZiAoISh1c2JscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JscCksIEdGUF9LRVJORUwpKSkgeworCXVzYmxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmxwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2JscCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGFib3J0OworCQlnb3RvIGFib3J0X3JldDsKIAl9CiAJdXNibHAtPmRldiA9IGRldjsKIAltdXRleF9pbml0KCZ1c2JscC0+d211dCk7CkBAIC0xMTc5LDEyICsxMTgxLDExIEBACiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pZWVlMTI4NF9pZCk7CiBhYm9ydDoKLQlpZiAodXNibHApIHsKLQkJa2ZyZWUodXNibHAtPnJlYWRidWYpOwotCQlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKLQkJa2ZyZWUodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOwotCQlrZnJlZSh1c2JscCk7Ci0JfQorCWtmcmVlKHVzYmxwLT5yZWFkYnVmKTsKKwlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyk7CisJa2ZyZWUodXNibHApOworYWJvcnRfcmV0OgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEzNDUsNyArMTM0Niw3IEBACiAJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JscF9jbGFzcyk7CiAKIAlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2KSB7Ci0JCWVycigiYm9ndXMgZGlzY29ubmVjdCIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJib2d1cyBkaXNjb25uZWN0XG4iKTsKIAkJQlVHICgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM4MTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKQEAgLTAsMCArMSwxMDg3IEBACisvKioKKyAqIGRyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIC0gVVNCIFRlc3QgJiBNZWFzdXJtZW50IGNsYXNzIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gS29wcCwgR2VjaGluZ2VuLCBHZXJtYW55CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm92ZWxsLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3RtYy5oPgorCisKKyNkZWZpbmUgVVNCVE1DX01JTk9SX0JBU0UJMTc2CisKKy8qCisgKiBTaXplIG9mIGRyaXZlciBpbnRlcm5hbCBJTyBidWZmZXIuIE11c3QgYmUgbXVsdGlwbGUgb2YgNCBhbmQgYXQgbGVhc3QgYXMKKyAqIGxhcmdlIGFzIHdNYXhQYWNrZXRTaXplICh3aGljaCBpcyB1c3VhbGx5IDUxMiBieXRlcykuCisgKi8KKyNkZWZpbmUgVVNCVE1DX1NJWkVfSU9CVUZGRVIJMjA0OAorCisvKiBEZWZhdWx0IFVTQiB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpICovCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQkxMAorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgcmVhZCBjeWNsZXMgdG8gZW1wdHkgYnVsayBpbiBlbmRwb2ludCBkdXJpbmcgQ0xFQVIgYW5kCisgKiBBQk9SVF9CVUxLX0lOIHJlcXVlc3RzLiBFbmRzIHRoZSBsb29wIGlmIChmb3Igd2hhdGV2ZXIgcmVhc29uKSBhIHNob3J0CisgKiBwYWNrZXQgaXMgbmV2ZXIgcmVhZC4KKyAqLworI2RlZmluZSBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4JMTAwCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0bWNfZGV2aWNlc1tdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19BUFBfU1BFQywgMywgMCksIH0sCisJeyAwLCB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGNhcGFiaWxpdGllcyBmb3IgdGhlIGRldmljZQorICogU2VlIHNlY3Rpb24gNC4yLjEuOCBvZiB0aGUgVVNCVE1DIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB1c2J0bWNfZGV2X2NhcGFiaWxpdGllcyB7CisJX191OCBpbnRlcmZhY2VfY2FwYWJpbGl0aWVzOworCV9fdTggZGV2aWNlX2NhcGFiaWxpdGllczsKKwlfX3U4IHVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzOworCV9fdTggdXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXM7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggVVNCVE1DIGRldmljZS4gT25lIGNvcHkgaXMKKyAqIGFsbG9jYXRlZCBmb3IgZWFjaCBVU0JUTUMgZGV2aWNlIGluIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4KKyAqLworc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSB7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCisJdW5zaWduZWQgaW50IGJ1bGtfaW47CisJdW5zaWduZWQgaW50IGJ1bGtfb3V0OworCisJdTggYlRhZzsKKwl1OCBiVGFnX2xhc3Rfd3JpdGU7CS8qIG5lZWRlZCBmb3IgYWJvcnQgKi8KKwl1OCBiVGFnX2xhc3RfcmVhZDsJLyogbmVlZGVkIGZvciBhYm9ydCAqLworCisJLyogYXR0cmlidXRlcyBmcm9tIHRoZSBVU0IgVE1DIHNwZWMgZm9yIHRoaXMgZGV2aWNlICovCisJdTggVGVybUNoYXI7CisJYm9vbCBUZXJtQ2hhckVuYWJsZWQ7CisJYm9vbCBhdXRvX2Fib3J0OworCisJc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzCWNhcGFiaWxpdGllczsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBtdXRleCBpb19tdXRleDsJLyogb25seSBvbmUgaS9vIGZ1bmN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lICovCit9OworI2RlZmluZSB0b191c2J0bWNfZGF0YShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSwga3JlZikKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0bWNfZHJpdmVyOworCitzdGF0aWMgdm9pZCB1c2J0bWNfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB0b191c2J0bWNfZGF0YShrcmVmKTsKKworCXVzYl9wdXRfZGV2KGRhdGEtPnVzYl9kZXYpOworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgaW50IHVzYnRtY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwlpbnRmID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZ1c2J0bWNfZHJpdmVyLCBpbWlub3IoaW5vZGUpKTsKKwlpZiAoIWludGYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBjYW4gbm90IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsIGltaW5vcihpbm9kZSkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJa3JlZl9nZXQoJmRhdGEtPmtyZWYpOworCisJLyogU3RvcmUgcG9pbnRlciBpbiBmaWxlIHN0cnVjdHVyZSdzIHByaXZhdGUgZGF0YSBmaWVsZCAqLworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2J0bWNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHVzYnRtY19kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9hYm9ydF9idWxrX2luKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJY2hhciAqYnVmZmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgcnY7CisJaW50IG47CisJaW50IGFjdHVhbDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdXJyZW50X3NldHRpbmc7CisJaW50IG1heF9zaXplOworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfSU4sCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgZGF0YS0+YlRhZ19sYXN0X3JlYWQsIGRhdGEtPmJ1bGtfaW4sCisJCQkgICAgIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX0ZBSUxFRCkgeworCQlydiA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfSU4gcmV0dXJuZWQgJXhcbiIsCisJCQlidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW1heF9zaXplID0gMDsKKwljdXJyZW50X3NldHRpbmcgPSBkYXRhLT5pbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKG4gPSAwOyBuIDwgY3VycmVudF9zZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykKKwkJaWYgKGN1cnJlbnRfc2V0dGluZy0+ZW5kcG9pbnRbbl0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzID09CisJCQlkYXRhLT5idWxrX2luKQorCQkJbWF4X3NpemUgPSBsZTE2X3RvX2NwdShjdXJyZW50X3NldHRpbmctPmVuZHBvaW50W25dLgorCQkJCQkJZGVzYy53TWF4UGFja2V0U2l6ZSk7CisKKwlpZiAobWF4X3NpemUgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdldCB3TWF4UGFja2V0U2l6ZVxuIik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZygmZGF0YS0+aW50Zi0+ZGV2LCAid01heFBhY2tldFNpemUgaXMgJWRcbiIsIG1heF9zaXplKTsKKworCW4gPSAwOworCisJZG8geworCQlkZXZfZGJnKGRldiwgIlJlYWRpbmcgZnJvbSBidWxrIGluIEVQXG4iKTsKKworCQlydiA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCSAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwKKwkJCQkgICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQluKys7CisKKwkJaWYgKHJ2IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJ1c2JfYnVsa19tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0gd2hpbGUgKChhY3R1YWwgPT0gbWF4X3NpemUpICYmCisJCSAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpOworCisJaWYgKGFjdHVhbCA9PSBtYXhfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNsZWFyIGRldmljZSBidWZmZXIgd2l0aGluICVkIGN5Y2xlc1xuIiwKKwkJCVVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJbiA9IDA7CisKK3VzYnRtY19hYm9ydF9idWxrX2luX3N0YXR1czoKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfSU5fU1RBVFVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIDAsIGRhdGEtPmJ1bGtfaW4sIGJ1ZmZlciwgMHgwOCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcnYgPSAwOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChidWZmZXJbMV0gPT0gMSkKKwkJZG8geworCQkJZGV2X2RiZyhkZXYsICJSZWFkaW5nIGZyb20gYnVsayBpbiBFUFxuIik7CisKKwkJCXJ2ID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkJICBkYXRhLT5idWxrX2luKSwKKwkJCQkJICBidWZmZXIsIFVTQlRNQ19TSVpFX0lPQlVGRkVSLAorCQkJCQkgICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQkJbisrOworCisJCQlpZiAocnYgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJ1c2JfYnVsa19tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0gd2hpbGUgKChhY3R1YWwgPSBtYXhfc2l6ZSkgJiYKKwkJCSAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpOworCisJaWYgKGFjdHVhbCA9PSBtYXhfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNsZWFyIGRldmljZSBidWZmZXIgd2l0aGluICVkIGN5Y2xlc1xuIiwKKwkJCVVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZ290byB1c2J0bWNfYWJvcnRfYnVsa19pbl9zdGF0dXM7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7CisKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19vdXQoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisJaW50IG47CisKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0FCT1JUX0JVTEtfT1VULAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIGRhdGEtPmJUYWdfbGFzdF93cml0ZSwgZGF0YS0+YnVsa19vdXQsCisJCQkgICAgIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX09VVCByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19PVVQgcmV0dXJuZWQgJXhcbiIsCisJCQlidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW4gPSAwOworCit1c2J0bWNfYWJvcnRfYnVsa19vdXRfY2hlY2tfc3RhdHVzOgorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19PVVRfU1RBVFVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIDAsIGRhdGEtPmJ1bGtfb3V0LCBidWZmZXIsIDB4MDgsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKwluKys7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJDSEVDS19BQk9SVF9CVUxLX09VVCByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIHVzYnRtY19hYm9ydF9idWxrX291dF9jbGVhcl9oYWx0OworCisJaWYgKChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19QRU5ESU5HKSAmJgorCSAgICAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpCisJCWdvdG8gdXNidG1jX2Fib3J0X2J1bGtfb3V0X2NoZWNrX3N0YXR1czsKKworCXJ2ID0gLUVQRVJNOworCWdvdG8gZXhpdDsKKwordXNidG1jX2Fib3J0X2J1bGtfb3V0X2NsZWFyX2hhbHQ6CisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIFVTQl9FTkRQT0lOVF9IQUxULCBkYXRhLT5idWxrX291dCwgYnVmZmVyLAorCQkJICAgICAwLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3NpemVfdCB1c2J0bWNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGludCBuX2NoYXJhY3RlcnM7CisJdTggKmJ1ZmZlcjsKKwlpbnQgYWN0dWFsOworCWludCBkb25lOworCWludCByZW1haW5pbmc7CisJaW50IHJldHZhbDsKKwlpbnQgdGhpc19wYXJ0OworCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKworCXJlbWFpbmluZyA9IGNvdW50OworCWRvbmUgPSAwOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKwkJaWYgKHJlbWFpbmluZyA+IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTIgLSAzKQorCQkJdGhpc19wYXJ0ID0gVVNCVE1DX1NJWkVfSU9CVUZGRVIgLSAxMiAtIDM7CisJCWVsc2UKKwkJCXRoaXNfcGFydCA9IHJlbWFpbmluZzsKKworCQkvKiBTZXR1cCBJTyBidWZmZXIgZm9yIERFVl9ERVBfTVNHX0lOIG1lc3NhZ2UKKwkJICogUmVmZXIgdG8gY2xhc3Mgc3BlY3MgZm9yIGRldGFpbHMKKwkJICovCisJCWJ1ZmZlclswXSA9IDI7CisJCWJ1ZmZlclsxXSA9IGRhdGEtPmJUYWc7CisJCWJ1ZmZlclsyXSA9IH4oZGF0YS0+YlRhZyk7CisJCWJ1ZmZlclszXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlcls0XSA9ICh0aGlzX3BhcnQgLSAxMiAtIDMpICYgMjU1OworCQlidWZmZXJbNV0gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gOCkgJiAyNTU7CisJCWJ1ZmZlcls2XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAxNikgJiAyNTU7CisJCWJ1ZmZlcls3XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiAyNCkgJiAyNTU7CisJCWJ1ZmZlcls4XSA9IGRhdGEtPlRlcm1DaGFyRW5hYmxlZCAqIDI7CisJCS8qIFVzZSB0ZXJtIGNoYXJhY3Rlcj8gKi8KKwkJYnVmZmVyWzldID0gZGF0YS0+VGVybUNoYXI7CisJCWJ1ZmZlclsxMF0gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbMTFdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKworCQkvKiBTZW5kIGJ1bGsgVVJCICovCisJCXJldHZhbCA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJICAgICAgZGF0YS0+YnVsa19vdXQpLAorCQkJCSAgICAgIGJ1ZmZlciwgMTIsICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQkvKiBTdG9yZSBiVGFnIChpbiBjYXNlIHdlIG5lZWQgdG8gYWJvcnQpICovCisJCWRhdGEtPmJUYWdfbGFzdF93cml0ZSA9IGRhdGEtPmJUYWc7CisKKwkJLyogSW5jcmVtZW50IGJUYWcgLS0gYW5kIGluY3JlbWVudCBhZ2FpbiBpZiB6ZXJvICovCisJCWRhdGEtPmJUYWcrKzsKKwkJaWYgKCFkYXRhLT5iVGFnKQorCQkJKGRhdGEtPmJUYWcpKys7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAidXNiX2J1bGtfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCQkJZ290byBleGl0OworCQl9CisKKwkJLyogU2VuZCBidWxrIFVSQiAqLworCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgICAgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCSAgICAgIGJ1ZmZlciwgVVNCVE1DX1NJWkVfSU9CVUZGRVIsICZhY3R1YWwsCisJCQkJICAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJCS8qIFN0b3JlIGJUYWcgKGluIGNhc2Ugd2UgbmVlZCB0byBhYm9ydCkgKi8KKwkJZGF0YS0+YlRhZ19sYXN0X3JlYWQgPSBkYXRhLT5iVGFnOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWFkIGRhdGEsIGVycm9yICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfaW4oZGF0YSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkvKiBIb3cgbWFueSBjaGFyYWN0ZXJzIGRpZCB0aGUgaW5zdHJ1bWVudCBzZW5kPyAqLworCQluX2NoYXJhY3RlcnMgPSBidWZmZXJbNF0gKworCQkJICAgICAgIChidWZmZXJbNV0gPDwgOCkgKworCQkJICAgICAgIChidWZmZXJbNl0gPDwgMTYpICsKKwkJCSAgICAgICAoYnVmZmVyWzddIDw8IDI0KTsKKworCQkvKiBDb3B5IGJ1ZmZlciB0byB1c2VyIHNwYWNlICovCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgZG9uZSwgJmJ1ZmZlclsxMl0sIG5fY2hhcmFjdGVycykpIHsKKwkJCS8qIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGFuIGFkZHJlc3NpbmcgcHJvYmxlbSAqLworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWRvbmUgKz0gbl9jaGFyYWN0ZXJzOworCQlpZiAobl9jaGFyYWN0ZXJzIDwgVVNCVE1DX1NJWkVfSU9CVUZGRVIpCisJCQlyZW1haW5pbmcgPSAwOworCX0KKworCS8qIFVwZGF0ZSBmaWxlIHBvc2l0aW9uIHZhbHVlICovCisJKmZfcG9zID0gKmZfcG9zICsgZG9uZTsKKwlyZXR2YWwgPSBkb25lOworCitleGl0OgorCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgdXNidG1jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXU4ICpidWZmZXI7CisJaW50IHJldHZhbDsKKwlpbnQgYWN0dWFsOworCXVuc2lnbmVkIGxvbmcgaW50IG5fYnl0ZXM7CisJaW50IG47CisJaW50IHJlbWFpbmluZzsKKwlpbnQgZG9uZTsKKwlpbnQgdGhpc19wYXJ0OworCisJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKworCXJlbWFpbmluZyA9IGNvdW50OworCWRvbmUgPSAwOworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKwkJaWYgKHJlbWFpbmluZyA+IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTIpIHsKKwkJCXRoaXNfcGFydCA9IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTI7CisJCQlidWZmZXJbOF0gPSAwOworCQl9IGVsc2UgeworCQkJdGhpc19wYXJ0ID0gcmVtYWluaW5nOworCQkJYnVmZmVyWzhdID0gMTsKKwkJfQorCisJCS8qIFNldHVwIElPIGJ1ZmZlciBmb3IgREVWX0RFUF9NU0dfT1VUIG1lc3NhZ2UgKi8KKwkJYnVmZmVyWzBdID0gMTsKKwkJYnVmZmVyWzFdID0gZGF0YS0+YlRhZzsKKwkJYnVmZmVyWzJdID0gfihkYXRhLT5iVGFnKTsKKwkJYnVmZmVyWzNdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzRdID0gdGhpc19wYXJ0ICYgMjU1OworCQlidWZmZXJbNV0gPSAodGhpc19wYXJ0ID4+IDgpICYgMjU1OworCQlidWZmZXJbNl0gPSAodGhpc19wYXJ0ID4+IDE2KSAmIDI1NTsKKwkJYnVmZmVyWzddID0gKHRoaXNfcGFydCA+PiAyNCkgJiAyNTU7CisJCS8qIGJ1ZmZlcls4XSBpcyBzZXQgYWJvdmUuLi4gKi8KKwkJYnVmZmVyWzldID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzEwXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlclsxMV0gPSAwOyAvKiBSZXNlcnZlZCAqLworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmZmVyWzEyXSwgYnVmICsgZG9uZSwgdGhpc19wYXJ0KSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCW5fYnl0ZXMgPSAxMiArIHRoaXNfcGFydDsKKwkJaWYgKHRoaXNfcGFydCAlIDQpCisJCQluX2J5dGVzICs9IDQgLSB0aGlzX3BhcnQgJSA0OworCQkJZm9yIChuID0gMTIgKyB0aGlzX3BhcnQ7IG4gPCBuX2J5dGVzOyBuKyspCisJCQkJYnVmZmVyW25dID0gMDsKKworCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgICAgIGRhdGEtPmJ1bGtfb3V0KSwKKwkJCQkgICAgICBidWZmZXIsIG5fYnl0ZXMsICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKworCQlkYXRhLT5iVGFnX2xhc3Rfd3JpdGUgPSBkYXRhLT5iVGFnOworCQlkYXRhLT5iVGFnKys7CisKKwkJaWYgKCFkYXRhLT5iVGFnKQorCQkJZGF0YS0+YlRhZysrOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZXJyKCZkYXRhLT5pbnRmLT5kZXYsCisJCQkJIlVuYWJsZSB0byBzZW5kIGRhdGEsIGVycm9yICVkXG4iLCByZXR2YWwpOworCQkJaWYgKGRhdGEtPmF1dG9fYWJvcnQpCisJCQkJdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCQkJZ290byBleGl0OworCQl9CisKKwkJcmVtYWluaW5nIC09IHRoaXNfcGFydDsKKwkJZG9uZSArPSB0aGlzX3BhcnQ7CisJfQorCisJcmV0dmFsID0gY291bnQ7CitleGl0OgorCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfY2xlYXIoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdXJyZW50X3NldHRpbmc7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1OCAqYnVmZmVyOworCWludCBydjsKKwlpbnQgbjsKKwlpbnQgYWN0dWFsOworCWludCBtYXhfc2l6ZTsKKworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIlNlbmRpbmcgSU5JVElBVEVfQ0xFQVIgcmVxdWVzdFxuIik7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0NMRUFSLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAwLCAwLCBidWZmZXIsIDEsIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklOSVRJQVRFX0NMRUFSIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9DTEVBUiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXhfc2l6ZSA9IDA7CisJY3VycmVudF9zZXR0aW5nID0gZGF0YS0+aW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChuID0gMDsgbiA8IGN1cnJlbnRfc2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKwkJZGVzYyA9ICZjdXJyZW50X3NldHRpbmctPmVuZHBvaW50W25dLmRlc2M7CisJCWlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzID09IGRhdGEtPmJ1bGtfaW4pCisJCQltYXhfc2l6ZSA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwl9CisKKwlpZiAobWF4X3NpemUgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGdldCB3TWF4UGFja2V0U2l6ZVxuIik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJ3TWF4UGFja2V0U2l6ZSBpcyAlZFxuIiwgbWF4X3NpemUpOworCisJbiA9IDA7CisKK3VzYnRtY19jbGVhcl9jaGVja19zdGF0dXM6CisKKwlkZXZfZGJnKGRldiwgIlNlbmRpbmcgQ0hFQ0tfQ0xFQVJfU1RBVFVTIHJlcXVlc3RcbiIpOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9DSEVDS19DTEVBUl9TVEFUVVMsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMiwgVVNCVE1DX1RJTUVPVVQpOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiQ0hFQ0tfQ0xFQVJfU1RBVFVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gdXNidG1jX2NsZWFyX2J1bGtfb3V0X2hhbHQ7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfUEVORElORykgeworCQlkZXZfZXJyKGRldiwgIkNIRUNLX0NMRUFSX1NUQVRVUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzFdID09IDEpCisJCWRvIHsKKwkJCWRldl9kYmcoZGV2LCAiUmVhZGluZyBmcm9tIGJ1bGsgaW4gRVBcbiIpOworCisJCQlydiA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCQkgIHVzYl9yY3ZidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJCSAgZGF0YS0+YnVsa19pbiksCisJCQkJCSAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwKKwkJCQkJICAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisJCQluKys7CisKKwkJCWlmIChydiA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKKwkJCQkJcnYpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfSB3aGlsZSAoKGFjdHVhbCA9PSBtYXhfc2l6ZSkgJiYKKwkJCSAgKG4gPCBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pKTsKKworCWlmIChhY3R1YWwgPT0gbWF4X3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBjbGVhciBkZXZpY2UgYnVmZmVyIHdpdGhpbiAlZCBjeWNsZXNcbiIsCisJCQlVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWdvdG8gdXNidG1jX2NsZWFyX2NoZWNrX3N0YXR1czsKKwordXNidG1jX2NsZWFyX2J1bGtfb3V0X2hhbHQ6CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsCisJCQkgICAgIGRhdGEtPmJ1bGtfb3V0LCBidWZmZXIsIDAsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9jbGVhcl9vdXRfaGFsdChzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsIGRhdGEtPmJ1bGtfb3V0LAorCQkJICAgICBidWZmZXIsIDAsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycigmZGF0YS0+dXNiX2Rldi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfY2xlYXJfaW5faGFsdChzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LCB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsIGRhdGEtPmJ1bGtfaW4sIGJ1ZmZlciwgMCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKCZkYXRhLT51c2JfZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQlydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IGdldF9jYXBhYmlsaXRpZXMoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+dXNiX2Rldi0+ZGV2OworCWNoYXIgKmJ1ZmZlcjsKKwlpbnQgcnY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDB4MTgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfR0VUX0NBUEFCSUxJVElFUywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgMCwgYnVmZmVyLCAweDE4LCBVU0JUTUNfVElNRU9VVCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlyZXR1cm4gcnY7CisJfQorCisJZGV2X2RiZyhkZXYsICJHRVRfQ0FQQUJJTElUSUVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCWRldl9kYmcoZGV2LCAiSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls0XSk7CisJZGV2X2RiZyhkZXYsICJEZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzVdKTsKKwlkZXZfZGJnKGRldiwgIlVTQjQ4OCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE0XSk7CisJZGV2X2RiZyhkZXYsICJVU0I0ODggZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNV0pOworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiR0VUX0NBUEFCSUxJVElFUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlkYXRhLT5jYXBhYmlsaXRpZXMuaW50ZXJmYWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls0XTsKKwlkYXRhLT5jYXBhYmlsaXRpZXMuZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlcls1XTsKKwlkYXRhLT5jYXBhYmlsaXRpZXMudXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbMTRdOworCWRhdGEtPmNhcGFiaWxpdGllcy51c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlclsxNV07CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGNhcGFiaWxpdHlfYXR0cmlidXRlKG5hbWUpCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+Y2FwYWJpbGl0aWVzLm5hbWUpOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgTlVMTCkKKworY2FwYWJpbGl0eV9hdHRyaWJ1dGUoaW50ZXJmYWNlX2NhcGFiaWxpdGllcyk7CitjYXBhYmlsaXR5X2F0dHJpYnV0ZShkZXZpY2VfY2FwYWJpbGl0aWVzKTsKK2NhcGFiaWxpdHlfYXR0cmlidXRlKHVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzKTsKK2NhcGFiaWxpdHlfYXR0cmlidXRlKHVzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmNhcGFiaWxpdHlfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaW50ZXJmYWNlX2NhcGFiaWxpdGllcy5hdHRyLAorCSZkZXZfYXR0cl9kZXZpY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJJmRldl9hdHRyX3VzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJJmRldl9hdHRyX3VzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcGFiaWxpdHlfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gY2FwYWJpbGl0eV9hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfVGVybUNoYXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWNcbiIsIGRhdGEtPlRlcm1DaGFyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfVGVybUNoYXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCWRhdGEtPlRlcm1DaGFyID0gYnVmWzBdOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihUZXJtQ2hhciwgU19JUlVHTywgc2hvd19UZXJtQ2hhciwgc3RvcmVfVGVybUNoYXIpOworCisjZGVmaW5lIGRhdGFfYXR0cmlidXRlKG5hbWUpCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPm5hbWUpOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzdG9yZV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQlcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJc3NpemVfdCByZXN1bHQ7CQkJCQkJCVwKKwl1bnNpZ25lZCB2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXN1bHQgPSBzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpOwkJCQlcCisJaWYgKHJlc3VsdCAhPSAxKQkJCQkJCVwKKwkJcmVzdWx0ID0gLUVJTlZBTDsJCQkJCVwKKwlkYXRhLT5uYW1lID0gdmFsOwkJCQkJCVwKKwlpZiAocmVzdWx0IDwgMCkJCQkJCQkJXAorCQlyZXR1cm4gcmVzdWx0OwkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiBjb3VudDsJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBzdG9yZV8jI25hbWUpCisKK2RhdGFfYXR0cmlidXRlKFRlcm1DaGFyRW5hYmxlZCk7CitkYXRhX2F0dHJpYnV0ZShhdXRvX2Fib3J0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhdGFfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfVGVybUNoYXIuYXR0ciwKKwkmZGV2X2F0dHJfVGVybUNoYXJFbmFibGVkLmF0dHIsCisJJmRldl9hdHRyX2F1dG9fYWJvcnQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGF0YV9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBkYXRhX2F0dHJzLAorfTsKKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfaW5kaWNhdG9yX3B1bHNlKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9JTkRJQ0FUT1JfUFVMU0UsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMHgwMSwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTkRJQ0FUT1JfUFVMU0UgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklORElDQVRPUl9QVUxTRSByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgbG9uZyB1c2J0bWNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldHZhbCA9IC1FQkFEUlFDOworCisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCVE1DX0lPQ1RMX0NMRUFSX09VVF9IQUxUOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXJfb3V0X2hhbHQoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9DTEVBUl9JTl9IQUxUOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXJfaW5faGFsdChkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0lORElDQVRPUl9QVUxTRToKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2luZGljYXRvcl9wdWxzZShkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0NMRUFSOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfY2xlYXIoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX09VVDoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19JTjoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfaW4oZGF0YSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gdXNidG1jX3JlYWQsCisJLndyaXRlCQk9IHVzYnRtY193cml0ZSwKKwkub3BlbgkJPSB1c2J0bWNfb3BlbiwKKwkucmVsZWFzZQk9IHVzYnRtY19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bAk9IHVzYnRtY19pb2N0bCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2J0bWNfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYnRtYyVkIiwKKwkuZm9wcyA9CQkmZm9wcywKKwkubWlub3JfYmFzZSA9CVVTQlRNQ19NSU5PUl9CQVNFLAorfTsKKworCitzdGF0aWMgaW50IHVzYnRtY19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlpbnQgbjsKKwlpbnQgcmV0Y29kZTsKKworCWRldl9kYmcoJmludGYtPmRldiwgIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXRhLT5pbnRmID0gaW50ZjsKKwlkYXRhLT5pZCA9IGlkOworCWRhdGEtPnVzYl9kZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOworCWtyZWZfaW5pdCgmZGF0YS0+a3JlZik7CisJbXV0ZXhfaW5pdCgmZGF0YS0+aW9fbXV0ZXgpOworCisJLyogSW5pdGlhbGl6ZSBVU0JUTUMgYlRhZyBhbmQgb3RoZXIgZmllbGRzICovCisJZGF0YS0+YlRhZwk9IDE7CisJZGF0YS0+VGVybUNoYXJFbmFibGVkID0gMDsKKwlkYXRhLT5UZXJtQ2hhciA9ICdcbic7CisKKwkvKiBVU0JUTUMgZGV2aWNlcyBoYXZlIG9ubHkgb25lIHNldHRpbmcsIHNvIHVzZSB0aGF0ICovCisJaWZhY2VfZGVzYyA9IGRhdGEtPmludGYtPmN1cl9hbHRzZXR0aW5nOworCisJLyogRmluZCBidWxrIGluIGVuZHBvaW50ICovCisJZm9yIChuID0gMDsgbiA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgbisrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W25dLmRlc2M7CisKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkgeworCQkJZGF0YS0+YnVsa19pbiA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiRm91bmQgYnVsayBpbiBlbmRwb2ludCBhdCAldVxuIiwKKwkJCQlkYXRhLT5idWxrX2luKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRmluZCBidWxrIG91dCBlbmRwb2ludCAqLworCWZvciAobiA9IDA7IG4gPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtuXS5kZXNjOworCisJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKSB7CisJCQlkYXRhLT5idWxrX291dCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiRm91bmQgQnVsayBvdXQgZW5kcG9pbnQgYXQgJXVcbiIsCisJCQkJZGF0YS0+YnVsa19vdXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXRjb2RlID0gZ2V0X2NhcGFiaWxpdGllcyhkYXRhKTsKKwlpZiAocmV0Y29kZSkKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY2FuJ3QgcmVhZCBjYXBhYmlsaXRpZXNcbiIpOworCWVsc2UKKwkJcmV0Y29kZSA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosCisJCQkJCSAgICAgJmNhcGFiaWxpdHlfYXR0cl9ncnApOworCisJcmV0Y29kZSA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZkYXRhX2F0dHJfZ3JwKTsKKworCXJldGNvZGUgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2J0bWNfY2xhc3MpOworCWlmIChyZXRjb2RlKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIgorCQkJIiAoYmFzZSAldSwgc2xpY2UgZGVmYXVsdCk6ICVkXG4iLCBVU0JUTUNfTUlOT1JfQkFTRSwKKwkJCXJldGNvZGUpOworCQlnb3RvIGVycm9yX3JlZ2lzdGVyOworCX0KKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJVc2luZyBtaW5vciBudW1iZXIgJWRcbiIsIGludGYtPm1pbm9yKTsKKworCXJldHVybiAwOworCitlcnJvcl9yZWdpc3RlcjoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KKworc3RhdGljIHZvaWQgdXNidG1jX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKworCWRldl9kYmcoJmludGYtPmRldiwgInVzYnRtY19kaXNjb25uZWN0IGNhbGxlZFxuIik7CisKKwlkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYnRtY19jbGFzcyk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmNhcGFiaWxpdHlfYXR0cl9ncnApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZkYXRhX2F0dHJfZ3JwKTsKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdXNidG1jX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0bWNfZHJpdmVyID0geworCS5uYW1lCQk9ICJ1c2J0bWMiLAorCS5pZF90YWJsZQk9IHVzYnRtY19kZXZpY2VzLAorCS5wcm9iZQkJPSB1c2J0bWNfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2J0bWNfZGlzY29ubmVjdAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNidG1jX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0Y29kZTsKKworCXJldGNvZGUgPSB1c2JfcmVnaXN0ZXIoJnVzYnRtY19kcml2ZXIpOworCWlmIChyZXRjb2RlKQorCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUiOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK21vZHVsZV9pbml0KHVzYnRtY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVzYnRtY19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYnRtY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodXNidG1jX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKaW5kZXggY2M5ZjM5Ny4uZTE3NTlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwpAQCAtMTM0LDUgKzEzNCw1IEBACiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiBMaW51eCB3aWxsIHJlZnVzZSB0byBlbnVtZXJhdGUKIAkgIGV4dGVybmFsIGh1YnMuICBPVEcgaG9zdHMgYXJlIGFsbG93ZWQgdG8gcmVkdWNlIGhhcmR3YXJlCiAJICBhbmQgc29mdHdhcmUgY29zdHMgYnkgbm90IHN1cHBvcnRpbmcgZXh0ZXJuYWwgaHVicy4gIFNvCi0JICBhcmUgIkVtZWRkZWQgSG9zdHMiIHRoYXQgZG9uJ3Qgb2ZmZXIgT1RHIHN1cHBvcnQuCisJICBhcmUgIkVtYmVkZGVkIEhvc3RzIiB0aGF0IGRvbid0IG9mZmVyIE9URyBzdXBwb3J0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggMjAyOTBjNS4uMmJjY2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtNDEzLDcgKzQxMyw4IEBACiAJaWYgKGxpa2VseShpZm51bSA8IDgqc2l6ZW9mKHBzLT5pZmNsYWltZWQpKSkKIAkJY2xlYXJfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCk7CiAJZWxzZQotCQl3YXJuKCJpbnRlcmZhY2UgbnVtYmVyICV1IG91dCBvZiByYW5nZSIsIGlmbnVtKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlXG4iLAorCQkJIGlmbnVtKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKQEAgLTYyNCw2ICs2MjUsOCBAQAogCXNtcF93bWIoKTsKIAlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOworCXNub29wKCZkZXYtPmRldiwgIm9wZW5lZCBieSBwcm9jZXNzICVkOiAlc1xuIiwgdGFza19waWRfbnIoY3VycmVudCksCisJCQljdXJyZW50LT5jb21tKTsKICBvdXQ6CiAJaWYgKHJldCkgewogCQlrZnJlZShwcyk7CkBAIC0xNzI5LDkgKzE3MzIsOSBAQAogewogCXN0cnVjdCBkZXZpY2UgKmNsZGV2OwogCi0JY2xkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2NsYXNzZGV2X2NsYXNzLCAmZGV2LT5kZXYsCi0JCQkJICAgICAgZGV2LT5kZXYuZGV2dCwgTlVMTCwgInVzYmRldiVkLiVkIiwKLQkJCQkgICAgICBkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldm51bSk7CisJY2xkZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9jbGFzc2Rldl9jbGFzcywgJmRldi0+ZGV2LCBkZXYtPmRldi5kZXZ0LAorCQkJICAgICAgTlVMTCwgInVzYmRldiVkLiVkIiwgZGV2LT5idXMtPmJ1c251bSwKKwkJCSAgICAgIGRldi0+ZGV2bnVtKTsKIAlpZiAoSVNfRVJSKGNsZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIoY2xkZXYpOwogCWRldi0+dXNiX2NsYXNzZGV2ID0gY2xkZXY7CkBAIC0xNzc0LDE5ICsxNzc3LDIwIEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgsCiAJCQkJCSJ1c2JfZGV2aWNlIik7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInVuYWJsZSB0byByZWdpc3RlciBtaW5vcnMgZm9yIHVzYl9kZXZpY2UiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgbWlub3JzIGZvciB1c2JfZGV2aWNlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCWNkZXZfaW5pdCgmdXNiX2RldmljZV9jZGV2LCAmdXNiZGV2X2ZpbGVfb3BlcmF0aW9ucyk7CiAJcmV0dmFsID0gY2Rldl9hZGQoJnVzYl9kZXZpY2VfY2RldiwgVVNCX0RFVklDRV9ERVYsIFVTQl9ERVZJQ0VfTUFYKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidW5hYmxlIHRvIGdldCB1c2JfZGV2aWNlIG1ham9yICVkIiwgVVNCX0RFVklDRV9NQUpPUik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCB1c2JfZGV2aWNlIG1ham9yICVkXG4iLAorCQkgICAgICAgVVNCX0RFVklDRV9NQUpPUik7CiAJCWdvdG8gZXJyb3JfY2RldjsKIAl9CiAjaWZkZWYgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MKIAl1c2JfY2xhc3NkZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2JfZGV2aWNlIik7CiAJaWYgKElTX0VSUih1c2JfY2xhc3NkZXZfY2xhc3MpKSB7Ci0JCWVycigidW5hYmxlIHRvIHJlZ2lzdGVyIHVzYl9kZXZpY2UgY2xhc3MiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgdXNiX2RldmljZSBjbGFzc1xuIik7CiAJCXJldHZhbCA9IFBUUl9FUlIodXNiX2NsYXNzZGV2X2NsYXNzKTsKIAkJY2Rldl9kZWwoJnVzYl9kZXZpY2VfY2Rldik7CiAJCXVzYl9jbGFzc2Rldl9jbGFzcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA1YTdmYTZmLi5lOTM1YmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTEwNzAsNyArMTA3MCw4IEBACiAJCQkJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKIAogCQkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCQkJaWYgKCFkcml2ZXItPnJlc2V0X3Jlc3VtZSkKKwkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lIHx8CisJCQkJICAgIGludGYtPm5lZWRzX3JlbW90ZV93YWtldXApCiAJCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IDIyOTEyMTMuLjk0NmZhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTE2OSw3ICsxNjksOCBAQAogCWVycm9yID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCAwLCBNQVhfRU5EUE9JTlRfTUlOT1JTLAogCQkJCSAgICAidXNiX2VuZHBvaW50Iik7CiAJaWYgKGVycm9yKSB7Ci0JCWVycigidW5hYmxlIHRvIGdldCBhIGR5bmFtaWMgbWFqb3IgZm9yIHVzYiBlbmRwb2ludHMiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IGEgZHluYW1pYyBtYWpvciBmb3IgIgorCQkgICAgICAgInVzYiBlbmRwb2ludHMuXG4iKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAl1c2JfZW5kcG9pbnRfbWFqb3IgPSBNQUpPUihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwppbmRleCA2YjFiMjI5Li45OTdlNjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpAQCAtODYsNyArODYsNyBAQAogCXVzYl9jbGFzcy0+Y2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2IiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGFzcy0+Y2xhc3MpKSB7CiAJCXJlc3VsdCA9IElTX0VSUih1c2JfY2xhc3MtPmNsYXNzKTsKLQkJZXJyKCJjbGFzc19jcmVhdGUgZmFpbGVkIGZvciB1c2IgZGV2aWNlcyIpOworCQlwcmludGsoS0VSTl9FUlIgImNsYXNzX2NyZWF0ZSBmYWlsZWQgZm9yIHVzYiBkZXZpY2VzXG4iKTsKIAkJa2ZyZWUodXNiX2NsYXNzKTsKIAkJdXNiX2NsYXNzID0gTlVMTDsKIAl9CkBAIC0xMTUsNyArMTE1LDggQEAKIAogCWVycm9yID0gcmVnaXN0ZXJfY2hyZGV2KFVTQl9NQUpPUiwgInVzYiIsICZ1c2JfZm9wcyk7CiAJaWYgKGVycm9yKQotCQllcnIoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIHVzYiBkZXZpY2VzIiwgVVNCX01BSk9SKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB1c2IgZGV2aWNlc1xuIiwKKwkJICAgICAgIFVTQl9NQUpPUik7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTYsOSArMTk3LDkgQEAKIAkJKyt0ZW1wOwogCWVsc2UKIAkJdGVtcCA9IG5hbWU7Ci0JaW50Zi0+dXNiX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1c2JfY2xhc3MtPmNsYXNzLCAmaW50Zi0+ZGV2LAotCQkJCQkgICAgICBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgTlVMTCwKLQkJCQkJICAgICAgIiVzIiwgdGVtcCk7CisJaW50Zi0+dXNiX2RldiA9IGRldmljZV9jcmVhdGUodXNiX2NsYXNzLT5jbGFzcywgJmludGYtPmRldiwKKwkJCQkgICAgICBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgTlVMTCwKKwkJCQkgICAgICAiJXMiLCB0ZW1wKTsKIAlpZiAoSVNfRVJSKGludGYtPnVzYl9kZXYpKSB7CiAJCWRvd25fd3JpdGUoJm1pbm9yX3J3c2VtKTsKIAkJdXNiX21pbm9yc1tpbnRmLT5taW5vcl0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggOGFiMzg5ZC4uZmM5MDE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC04MSw2ICs4MSwxMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIGFyZSBsb2FkZWQgKi8KK3Vuc2lnbmVkIGxvbmcgdXNiX2hjZHNfbG9hZGVkOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZHNfbG9hZGVkKTsKKwogLyogaG9zdCBjb250cm9sbGVycyB3ZSBtYW5hZ2UgKi8KIExJU1RfSEVBRCAodXNiX2J1c19saXN0KTsKIEVYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3QpOwpAQCAtODE4LDkgKzgyMiw4IEBACiAJc2V0X2JpdCAoYnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKIAlidXMtPmJ1c251bSA9IGJ1c251bTsKIAotCWJ1cy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVzYl9ob3N0X2NsYXNzLCBidXMtPmNvbnRyb2xsZXIsCi0JCQkJCSBNS0RFVigwLCAwKSwgYnVzLAotCQkJCQkgInVzYl9ob3N0JWQiLCBidXNudW0pOworCWJ1cy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1c2JfaG9zdF9jbGFzcywgYnVzLT5jb250cm9sbGVyLCBNS0RFVigwLCAwKSwKKwkJCQkgYnVzLCAidXNiX2hvc3QlZCIsIGJ1c251bSk7CiAJcmVzdWx0ID0gUFRSX0VSUihidXMtPmRldik7CiAJaWYgKElTX0VSUihidXMtPmRldikpCiAJCWdvdG8gZXJyb3JfY3JlYXRlX2NsYXNzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmggYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCmluZGV4IGU3MTBjZTAuLjJkY2RlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuaApAQCAtNDgyLDQgKzQ4MiwxMCBAQAogICovCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW07CiAKKy8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGxvYWRlZCAqLworI2RlZmluZSBVU0JfVUhDSV9MT0FERUQJCTAKKyNkZWZpbmUgVVNCX09IQ0lfTE9BREVECQkxCisjZGVmaW5lIFVTQl9FSENJX0xPQURFRAkJMgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdXNiX2hjZHNfbG9hZGVkOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggZDk5OTYzOC4uZDczY2UyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJdW5zaWduZWQJCWhhc19pbmRpY2F0b3JzOjE7CiAJdTgJCQlpbmRpY2F0b3JbVVNCX01BWENISUxEUkVOXTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWxlZHM7CisJc3RydWN0IGRlbGF5ZWRfd29yawlpbml0X3dvcms7CiB9OwogCiAKQEAgLTEwMCw2ICsxMDEsMTUgQEAKIE1PRFVMRV9QQVJNX0RFU0MgKGJsaW5rZW5saWdodHMsICJ0cnVlIHRvIGN5Y2xlIGxlZHMgb24gaHVicyIpOwogCiAvKgorICogRGV2aWNlIFNBVEE4MDAwIEZXMS4wIGZyb20gREFUQVNUMFIgVGVjaG5vbG9neSBDb3JwIHJlcXVpcmVzIGFib3V0CisgKiAxMCBzZWNvbmRzIHRvIHNlbmQgcmVwbHkgZm9yIHRoZSBpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0LgorICovCisvKiBkZWZpbmUgaW5pdGlhbCA2NC1ieXRlIGRlc2NyaXB0b3IgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworc3RhdGljIGludCBpbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dCA9IFVTQl9DVFJMX0dFVF9USU1FT1VUOworbW9kdWxlX3BhcmFtKGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0LCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0LCAiaW5pdGlhbCA2NC1ieXRlIGRlc2NyaXB0b3IgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCA1MDAwIC0gNS4wIHNlY29uZHMpIik7CisKKy8qCiAgKiBBcyBvZiAyLjYuMTAgd2UgaW50cm9kdWNlIGEgbmV3IFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIHdoaWNoCiAgKiBjbG9zZWx5IHJlc2VtYmxlcyB0aGUgd2F5IFdpbmRvd3Mgd29ya3MuICBIb3BlZnVsbHkgaXQgd2lsbCBiZSBjb21wYXRpYmxlCiAgKiB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2YgZGV2aWNlcyB0aGFuIHRoZSBvbGQgc2NoZW1lLiAgSG93ZXZlciBzb21lIHByZXZpb3VzbHkKQEAgLTUxNSwxMCArNTI1LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaHViX3R0X2NsZWFyX2J1ZmZlcik7CiAKLXN0YXRpYyB2b2lkIGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX2h1YiAqaHViKQorLyogSWYgZG9fZGVsYXkgaXMgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgY2FsbGVyCisgKiBuZWVkcyB0byBkZWxheS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX2h1YiAqaHViLCBib29sIGRvX2RlbGF5KQogewogCWludCBwb3J0MTsKIAl1bnNpZ25lZCBwZ29vZF9kZWxheSA9IGh1Yi0+ZGVzY3JpcHRvci0+YlB3ck9uMlB3ckdvb2QgKiAyOworCXVuc2lnbmVkIGRlbGF5OwogCXUxNiB3SHViQ2hhcmFjdGVyaXN0aWNzID0KIAkJCWxlMTZfdG9fY3B1KGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyk7CiAKQEAgLTUzNyw3ICs1NTEsMTAgQEAKIAkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAogCS8qIFdhaXQgYXQgbGVhc3QgMTAwIG1zZWMgZm9yIHBvd2VyIHRvIGJlY29tZSBzdGFibGUgKi8KLQltc2xlZXAobWF4KHBnb29kX2RlbGF5LCAodW5zaWduZWQpIDEwMCkpOworCWRlbGF5ID0gbWF4KHBnb29kX2RlbGF5LCAodW5zaWduZWQpIDEwMCk7CisJaWYgKGRvX2RlbGF5KQorCQltc2xlZXAoZGVsYXkpOworCXJldHVybiBkZWxheTsKIH0KIAogc3RhdGljIGludCBodWJfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2h1YiAqaHViLApAQCAtNTk5LDIxICs2MTYsNTUgQEAKIH0KIAogZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHsKLQlIVUJfSU5JVCwgSFVCX1BPU1RfUkVTRVQsIEhVQl9SRVNVTUUsIEhVQl9SRVNFVF9SRVNVTUUKKwlIVUJfSU5JVCwgSFVCX0lOSVQyLCBIVUJfSU5JVDMsCisJSFVCX1BPU1RfUkVTRVQsIEhVQl9SRVNVTUUsIEhVQl9SRVNFVF9SRVNVTUUsCiB9OwogCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKTsKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpOworCiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CiAJaW50IHBvcnQxOwogCWludCBzdGF0dXM7CiAJYm9vbCBuZWVkX2RlYm91bmNlX2RlbGF5ID0gZmFsc2U7CisJdW5zaWduZWQgZGVsYXk7CisKKwkvKiBDb250aW51ZSBhIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gKi8KKwlpZiAodHlwZSA9PSBIVUJfSU5JVDIpCisJCWdvdG8gaW5pdDI7CisJaWYgKHR5cGUgPT0gSFVCX0lOSVQzKQorCQlnb3RvIGluaXQzOwogCiAJLyogQWZ0ZXIgYSByZXN1bWUsIHBvcnQgcG93ZXIgc2hvdWxkIHN0aWxsIGJlIG9uLgogCSAqIEZvciBhbnkgb3RoZXIgdHlwZSBvZiBhY3RpdmF0aW9uLCB0dXJuIGl0IG9uLgogCSAqLwotCWlmICh0eXBlICE9IEhVQl9SRVNVTUUpCi0JCWh1Yl9wb3dlcl9vbihodWIpOworCWlmICh0eXBlICE9IEhVQl9SRVNVTUUpIHsKKworCQkvKiBTcGVlZCB1cCBzeXN0ZW0gYm9vdCBieSB1c2luZyBhIGRlbGF5ZWRfd29yayBmb3IgdGhlCisJCSAqIGh1YidzIGluaXRpYWwgcG93ZXItdXAgZGVsYXlzLiAgVGhpcyBpcyBwcmV0dHkgYXdrd2FyZAorCQkgKiBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgYSBob21lLWJyZXdlZCBzb3J0IG9mCisJCSAqIHNldGptcC9sb25nam1wLCBidXQgaXQgc2F2ZXMgYXQgbGVhc3QgMTAwIG1zIGZvciBlYWNoCisJCSAqIHJvb3QgaHViIChhc3N1bWluZyB1c2Jjb3JlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAorCQkgKiByYXRoZXIgdGhhbiBhcyBhIG1vZHVsZSkuICBJdCBhZGRzIHVwLgorCQkgKgorCQkgKiBUaGlzIGNhbid0IGJlIGRvbmUgZm9yIEhVQl9SRVNVTUUgb3IgSFVCX1JFU0VUX1JFU1VNRQorCQkgKiBiZWNhdXNlIGZvciB0aG9zZSBhY3RpdmF0aW9uIHR5cGVzIHRoZSBwb3J0cyBoYXZlIHRvIGJlCisJCSAqIG9wZXJhdGlvbmFsIHdoZW4gd2UgcmV0dXJuLiAgSW4gdGhlb3J5IHRoaXMgY291bGQgYmUgZG9uZQorCQkgKiBmb3IgSFVCX1BPU1RfUkVTRVQsIGJ1dCBpdCdzIGVhc2llciBub3QgdG8uCisJCSAqLworCQlpZiAodHlwZSA9PSBIVUJfSU5JVCkgeworCQkJZGVsYXkgPSBodWJfcG93ZXJfb24oaHViLCBmYWxzZSk7CisJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmaHViLT5pbml0X3dvcmssIGh1Yl9pbml0X2Z1bmMyKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaHViLT5pbml0X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKKwkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIHsKKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOworCQl9CisJfQorIGluaXQyOgogCiAJLyogQ2hlY2sgZWFjaCBwb3J0IGFuZCBzZXQgaHViLT5jaGFuZ2VfYml0cyB0byBsZXQga2h1YmQga25vdwogCSAqIHdoaWNoIHBvcnRzIG5lZWQgYXR0ZW50aW9uLgpAQCAtNjkyLDkgKzc0MywyMCBAQAogCSAqIElmIGFueSBwb3J0LXN0YXR1cyBjaGFuZ2VzIGRvIG9jY3VyIGR1cmluZyB0aGlzIGRlbGF5LCBraHViZAogCSAqIHdpbGwgc2VlIHRoZW0gbGF0ZXIgYW5kIGhhbmRsZSB0aGVtIG5vcm1hbGx5LgogCSAqLwotCWlmIChuZWVkX2RlYm91bmNlX2RlbGF5KQotCQltc2xlZXAoSFVCX0RFQk9VTkNFX1NUQUJMRSk7CisJaWYgKG5lZWRfZGVib3VuY2VfZGVsYXkpIHsKKwkJZGVsYXkgPSBIVUJfREVCT1VOQ0VfU1RBQkxFOwogCisJCS8qIERvbid0IGRvIGEgbG9uZyBzbGVlcCBpbnNpZGUgYSB3b3JrcXVldWUgcm91dGluZSAqLworCQlpZiAodHlwZSA9PSBIVUJfSU5JVDIpIHsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgaHViX2luaXRfZnVuYzMpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmluaXRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQzOiBiZWxvdyAqLworCQl9IGVsc2UgeworCQkJbXNsZWVwKGRlbGF5KTsKKwkJfQorCX0KKyBpbml0MzoKIAlodWItPnF1aWVzY2luZyA9IDA7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVyYiwgR0ZQX05PSU8pOwpAQCAtNzA3LDYgKzc2OSwyMSBAQAogCWtpY2tfa2h1YmQoaHViKTsKIH0KIAorLyogSW1wbGVtZW50IHRoZSBjb250aW51YXRpb25zIGZvciB0aGUgZGVsYXlzIGFib3ZlICovCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCB1c2JfaHViLCBpbml0X3dvcmsud29yayk7CisKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfSU5JVDIpOworfQorCitzdGF0aWMgdm9pZCBodWJfaW5pdF9mdW5jMyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCB1c2JfaHViLCBpbml0X3dvcmsud29yayk7CisKKwlodWJfYWN0aXZhdGUoaHViLCBIVUJfSU5JVDMpOworfQorCiBlbnVtIGh1Yl9xdWllc2NpbmdfdHlwZSB7CiAJSFVCX0RJU0NPTk5FQ1QsIEhVQl9QUkVfUkVTRVQsIEhVQl9TVVNQRU5ECiB9OwpAQCAtNzE2LDYgKzc5Myw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CiAJaW50IGk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmh1Yi0+aW5pdF93b3JrKTsKKwogCS8qIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5IHdvbid0IHJlLXRyaWdnZXIgKi8KIAlodWItPnF1aWVzY2luZyA9IDE7CiAKQEAgLTEwOTksNiArMTE3OCw3IEBACiAJaHViLT5pbnRmZGV2ID0gJmludGYtPmRldjsKIAlodWItPmhkZXYgPSBoZGV2OwogCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmxlZHMsIGxlZF93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaHViLT5pbml0X3dvcmssIE5VTEwpOwogCXVzYl9nZXRfaW50ZihpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGh1Yik7CkBAIC0yNDY3LDcgKzI1NDcsNyBAQAogCQkJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAogCQkJCQlVU0JfRFRfREVWSUNFIDw8IDgsIDAsCiAJCQkJCWJ1ZiwgR0VUX0RFU0NSSVBUT1JfQlVGU0laRSwKLQkJCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQkJCQlpbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dCk7CiAJCQkJc3dpdGNoIChidWYtPmJNYXhQYWNrZXRTaXplMCkgewogCQkJCWNhc2UgODogY2FzZSAxNjogY2FzZSAzMjogY2FzZSA2NDogY2FzZSAyNTU6CiAJCQkJCWlmIChidWYtPmJEZXNjcmlwdG9yVHlwZSA9PQpAQCAtMzAzNSw3ICszMTE1LDcgQEAKIAkJCQkJaSk7CiAJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCiAJCQkJCVVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpOwotCQkJCWh1Yl9wb3dlcl9vbihodWIpOworCQkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQkJfQogCiAJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgewpAQCAtMzA3MCw3ICszMTUwLDcgQEAKIAkJCQlkZXZfZGJnIChodWJfZGV2LCAib3ZlcmN1cnJlbnQgY2hhbmdlXG4iKTsKIAkJCQltc2xlZXAoNTAwKTsJLyogQ29vbCBkb3duICovCiAJCQkJY2xlYXJfaHViX2ZlYXR1cmUoaGRldiwgQ19IVUJfT1ZFUl9DVVJSRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlodWJfcG93ZXJfb24oaHViKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlodWJfcG93ZXJfb24oaHViLCB0cnVlKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKaW5kZXggNzdmYTdhMC4uOTQ2MzIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpAQCAtMTgwLDggKzE4MCw4IEBACiAJCQlsaXN0bW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJ1c2JmczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICJcIiVzXCIgb3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTI0MCw3ICsyNDAsOSBAQAogCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmZzOiBVbmtub3duIG5vZGUgJXMgIgorCQkJCSAgICAgICAibW9kZSAleCBmb3VuZCBvbiByZW1vdW50IVxuIiwKKwkJCQkgICAgICAgYnVzLT5kX25hbWUubmFtZSwgYnVzLT5kX2lub2RlLT5pX21vZGUpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNTksNyArMjYxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSkpIHsKLQkJd2FybigidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvcjoiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvci5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5OSw3ICs2MDEsNyBAQAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlcyBzcGVjaWFsIGZpbGUgKi8KIAlyZXR2YWwgPSBzaW1wbGVfcGluX2ZzKCZ1c2JfZnNfdHlwZSwgJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudCIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgdXNiZnMgbW91bnRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02MTEsNyArNjEzLDcgQEAKIAkJCQkJICAgICAgIE5VTEwsICZ1c2Jmc19kZXZpY2VzX2ZvcHMsCiAJCQkJCSAgICAgICBsaXN0dWlkLCBsaXN0Z2lkKTsKIAlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkgPT0gTlVMTCkgewotCQllcnIgKCJVbmFibGUgdG8gY3JlYXRlIGRldmljZXMgdXNiZnMgZmlsZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9jbGVhbl9tb3VudHM7CiAJfQpAQCAtNjYzLDcgKzY2NSw3IEBACiAJYnVzLT51c2Jmc19kZW50cnkgPSBmc19jcmVhdGVfZmlsZSAobmFtZSwgYnVzbW9kZSB8IFNfSUZESVIsIHBhcmVudCwKIAkJCQkJICAgIGJ1cywgTlVMTCwgYnVzdWlkLCBidXNnaWQpOwogCWlmIChidXMtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC02OTQsNyArNjk2LDcgQEAKIAkJCQkJICAgICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zLAogCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOwogCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggMjg2YjQ0My4uODg3NzM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEyMDQsNyArMTIwNCw4IEBACiAKIAlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGFsdGVybmF0ZSk7CiAJaWYgKCFhbHQpIHsKLQkJd2Fybigic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsIGFsdGVybmF0ZSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGFsdHNldHRpbmcgJWQiLAorCQkJIGFsdGVybmF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDVlMWY1ZDUuLmY2NmZiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTc0Myw2ICs3NDMsMjkgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3VwcG9ydHNfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCByZXQ7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCS8qIERldmljZXMgd2lsbCBiZSBhdXRvc3VzcGVuZGVkIGV2ZW4gd2hlbiBhbiBpbnRlcmZhY2UgaXNuJ3QgY2xhaW1lZCAqLworCWlmICghaW50Zi0+ZGV2LmRyaXZlciB8fAorCQkJdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKS0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIDEpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgMCk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRzX2F1dG9zdXNwZW5kLCBTX0lSVUdPLCBzaG93X3N1cHBvcnRzX2F1dG9zdXNwZW5kLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmludGZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfYkludGVyZmFjZU51bWJlci5hdHRyLAogCSZkZXZfYXR0cl9iQWx0ZXJuYXRlU2V0dGluZy5hdHRyLApAQCAtNzUxLDYgKzc3NCw3IEBACiAJJmRldl9hdHRyX2JJbnRlcmZhY2VTdWJDbGFzcy5hdHRyLAogCSZkZXZfYXR0cl9iSW50ZXJmYWNlUHJvdG9jb2wuYXR0ciwKIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfc3VwcG9ydHNfYXV0b3N1c3BlbmQuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGludGZfYXR0cl9ncnAgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA0NzExMWU4Li5mMjYzODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTEwLDYgKzEwLDggQEAKIAogI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXNiX3JlamVjdF9sb2NrKTsKKwogc3RhdGljIHZvaWQgdXJiX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHVyYiAqdXJiID0gdG9fdXJiKGtyZWYpOwpAQCAtNjgsNyArNzAsNyBAQAogCQlpc29fcGFja2V0cyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciksCiAJCW1lbV9mbGFncyk7CiAJaWYgKCF1cmIpIHsKLQkJZXJyKCJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkIik7CisJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfdXJiOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAl1c2JfaW5pdF91cmIodXJiKTsKQEAgLTEyNyw2ICsxMjksMTMgQEAKIAl1c2JfZ2V0X3VyYih1cmIpOwogCWxpc3RfYWRkX3RhaWwoJnVyYi0+YW5jaG9yX2xpc3QsICZhbmNob3ItPnVyYl9saXN0KTsKIAl1cmItPmFuY2hvciA9IGFuY2hvcjsKKworCWlmICh1bmxpa2VseShhbmNob3ItPnBvaXNvbmVkKSkgeworCQlzcGluX2xvY2soJnVzYl9yZWplY3RfbG9jayk7CisJCXVyYi0+cmVqZWN0Kys7CisJCXNwaW5fdW5sb2NrKCZ1c2JfcmVqZWN0X2xvY2spOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FuY2hvcl91cmIpOwpAQCAtMzk4LDcgKzQwNyw3IEBACiAKIAkvKiBmYWlsIGlmIHN1Ym1pdHRlciBnYXZlIGJvZ3VzIGZsYWdzICovCiAJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgIT0gb3JpZ19mbGFncykgewotCQllcnIoIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4IiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCT0dVUyB1cmIgZmxhZ3MsICV4IC0tPiAleFxuIiwKIAkJCW9yaWdfZmxhZ3MsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NDQsMjUgKzU1Myw3MCBAQAogICovCiB2b2lkIHVzYl9raWxsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RhdGljIERFRklORV9NVVRFWChyZWplY3RfbXV0ZXgpOwotCiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5lcCkpCiAJCXJldHVybjsKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJKyt1cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogCiAJdXNiX2hjZF91bmxpbmtfdXJiKHVyYiwgLUVOT0VOVCk7CiAJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsIGF0b21pY19yZWFkKCZ1cmItPnVzZV9jb3VudCkgPT0gMCk7CiAKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJLS11cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2tpbGxfdXJiKTsKIAogLyoqCisgKiB1c2JfcG9pc29uX3VyYiAtIHJlbGlhYmx5IGtpbGwgYSB0cmFuc2ZlciBhbmQgcHJldmVudCBmdXJ0aGVyIHVzZSBvZiBhbiBVUkIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBjYW5ub3QgYmUgcmV1c2VkLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2suCisgKiBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIEFmdGVyIGFuZCB3aGlsZSB0aGUgcm91dGluZSBydW5zLCBhdHRlbXB0cyB0byByZXN1Ym1pdCB0aGUgVVJCIHdpbGwgZmFpbAorICogd2l0aCBlcnJvciAtRVBFUk0uICBUaHVzIGV2ZW4gaWYgdGhlIFVSQidzIGNvbXBsZXRpb24gaGFuZGxlciBhbHdheXMKKyAqIHRyaWVzIHRvIHJlc3VibWl0LCBpdCB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgVVJCIHdpbGwgYmVjb21lIGlkbGUuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoc3VjaCBhcyBhIGJvdHRvbQorICogaGFsZiBvciBhIGNvbXBsZXRpb24gaGFuZGxlciksIG9yIHdoZW4gaG9sZGluZyBhIHNwaW5sb2NrLCBvciBpbiBvdGhlcgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGNhbid0IHNjaGVkdWxlKCkuCisgKi8KK3ZvaWQgdXNiX3BvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCEodXJiICYmIHVyYi0+ZGV2ICYmIHVyYi0+ZXApKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKwkrK3VyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKworCXVzYl9oY2RfdW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl91cmIpOworCit2b2lkIHVzYl91bnBvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYl9yZWplY3RfbG9jaywgZmxhZ3MpOworCS0tdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlamVjdF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5wb2lzb25fdXJiKTsKKworLyoqCiAgKiB1c2Jfa2lsbF9hbmNob3JlZF91cmJzIC0gY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwogICoKQEAgLTU4OSw2ICs2NDMsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9raWxsX2FuY2hvcmVkX3VyYnMpOwogCisKKy8qKgorICogdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzIC0gY2Vhc2UgYWxsIHRyYWZmaWMgZnJvbSBhbiBhbmNob3IKKyAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCisgKgorICogdGhpcyBhbGxvd3MgYWxsIG91dHN0YW5kaW5nIFVSQnMgdG8gYmUgcG9pc29uZWQgc3RhcnRpbmcKKyAqIGZyb20gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLiBOZXdseSBhZGRlZCBVUkJzIHdpbGwgYWxzbyBiZQorICogcG9pc29uZWQKKyAqLwordm9pZCB1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisKKwlzcGluX2xvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCWFuY2hvci0+cG9pc29uZWQgPSAxOworCXdoaWxlICghbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCkpIHsKKwkJdmljdGltID0gbGlzdF9lbnRyeShhbmNob3ItPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJICAgIGFuY2hvcl9saXN0KTsKKwkJLyogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIFVSQiBpc24ndCBmcmVlZCBiZWZvcmUgd2Uga2lsbCBpdCovCisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwkJLyogdGhpcyB3aWxsIHVuYW5jaG9yIHRoZSBVUkIgKi8KKwkJdXNiX3BvaXNvbl91cmIodmljdGltKTsKKwkJdXNiX3B1dF91cmIodmljdGltKTsKKwkJc3Bpbl9sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZhbmNob3ItPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKTsKIC8qKgogICogdXNiX3VubGlua19hbmNob3JlZF91cmJzIC0gYXN5bmNocm9ub3VzbHkgY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwpAQCAtNjMzLDMgKzcxNiw3MyBAQAogCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCk7CisKKy8qKgorICogdXNiX2dldF9mcm9tX2FuY2hvciAtIGdldCBhbiBhbmNob3IncyBvbGRlc3QgdXJiCisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHdob3NlIHVyYiB5b3Ugd2FudAorICoKKyAqIHRoaXMgd2lsbCB0YWtlIHRoZSBvbGRlc3QgdXJiIGZyb20gYW4gYW5jaG9yLAorICogdW5hbmNob3IgYW5kIHJldHVybiBpdAorICovCitzdHJ1Y3QgdXJiICp1c2JfZ2V0X2Zyb21fYW5jaG9yKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJc3RydWN0IHVyYiAqdmljdGltOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgeworCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwKKwkJCQkgICAgYW5jaG9yX2xpc3QpOworCQl1c2JfZ2V0X3VyYih2aWN0aW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQl2aWN0aW0gPSBOVUxMOworCX0KKworCXJldHVybiB2aWN0aW07Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfZnJvbV9hbmNob3IpOworCisvKioKKyAqIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMgLSB1bmFuY2hvciBhbGwgYW4gYW5jaG9yJ3MgdXJicworICogQGFuY2hvcjogdGhlIGFuY2hvciB3aG9zZSB1cmJzIHlvdSB3YW50IHRvIHVuYW5jaG9yCisgKgorICogdXNlIHRoaXMgdG8gZ2V0IHJpZCBvZiBhbGwgYW4gYW5jaG9yJ3MgdXJicworICovCit2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7CisJCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiLAorCQkJCSAgICBhbmNob3JfbGlzdCk7CisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQkvKiB0aGlzIG1heSBmcmVlIHRoZSBVUkIgKi8KKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCQl1c2JfcHV0X3VyYih2aWN0aW0pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKTsKKworLyoqCisgKiB1c2JfYW5jaG9yX2VtcHR5IC0gaXMgYW4gYW5jaG9yIGVtcHR5CisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHlvdSB3YW50IHRvIHF1ZXJ5CisgKgorICogcmV0dXJucyAxIGlmIHRoZSBhbmNob3IgaGFzIG5vIHVyYnMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKi8KK2ludCB1c2JfYW5jaG9yX2VtcHR5KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW5jaG9yX2VtcHR5KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBhY2M5NWIyLi5kZDRjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgVVNCX0dBREdFVF9ERUJVRwogCWJvb2xlYW4gIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgICBNYW55IGNvbnRyb2xsZXIgYW5kIGdhZGdldCBkcml2ZXJzIHdpbGwgcHJpbnQgc29tZSBkZWJ1Z2dpbmcKIAkgICBtZXNzYWdlcyBpZiB5b3UgdXNlIHRoaXMgb3B0aW9uIHRvIGFzayBmb3IgdGhvc2UgbWVzc2FnZXMuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZJTEVTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwlkZXBlbmRzIG9uIFBST0NfRlMKIAloZWxwCiAJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKIAkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCkBAIC03MCw3ICs3MCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKSIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVQgJiYgREVCVUdfRlMKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJaGVscAogCSAgIFNvbWUgb2YgdGhlIGRyaXZlcnMgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBjYW4gZXhwb3NlCiAJICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL2RlYnVnLy4KQEAgLTc5LDEyICs3OSwzNiBAQAogCSAgIEVuYWJsZSB0aGVzZSBmaWxlcyBieSBjaG9vc2luZyAiWSIgaGVyZS4gIElmIGluIGRvdWJ0LCBvcgogCSAgIHRvIGNvbnNlcnZlIGtlcm5lbCBtZW1vcnksIHNheSAiTiIuCiAKK2NvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBVworCWludCAiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSkiCisJcmFuZ2UgMiA1MDAKKwlkZWZhdWx0IDIKKwloZWxwCisJICAgU29tZSBkZXZpY2VzIG5lZWQgdG8gZHJhdyBwb3dlciBmcm9tIFVTQiB3aGVuIHRoZXkgYXJlCisJICAgY29uZmlndXJlZCwgcGVyaGFwcyB0byBvcGVyYXRlIGNpcmN1aXRyeSBvciB0byByZWNoYXJnZQorCSAgIGJhdHRlcmllcy4gIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gYW55IGxvY2FsIHBvd2VyIHN1cHBseSwKKwkgICBzdWNoIGFzIGFuIEFDIGFkYXB0ZXIgb3IgYmF0dGVyaWVzLgorCisJICAgRW50ZXIgdGhlIG1heGltdW0gcG93ZXIgeW91ciBkZXZpY2UgZHJhd3MgdGhyb3VnaCBVU0IsIGluCisJICAgbWlsbGlBbXBlcmVzLiAgVGhlIHBlcm1pdHRlZCByYW5nZSBvZiB2YWx1ZXMgaXMgMiAtIDUwMCBtQTsKKwkgICAwIG1BIHdvdWxkIGJlIGxlZ2FsLCBidXQgY2FuIG1ha2Ugc29tZSBob3N0cyBtaXNiZWhhdmUuCisKKwkgICBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBleGNlcHQgZm9yIHN5c3RlbS1zcGVjaWZpYyBnYWRnZXQKKwkgICBkcml2ZXJzIHRoYXQgaGF2ZSBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uLgorCiBjb25maWcJVVNCX0dBREdFVF9TRUxFQ1RFRAogCWJvb2xlYW4KIAogIwogIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIFN1cHBvcnQKICMKKyMgVGhlIG9yZGVyIGhlcmUgaXMgYWxwaGFiZXRpY2FsLCBleGNlcHQgdGhhdCBpbnRlZ3JhdGVkIGNvbnRyb2xsZXJzIGdvCisjIGJlZm9yZSBkaXNjcmV0ZSBvbmVzIHNvIHRoZXkgd2lsbCBiZSB0aGUgaW5pdGlhbC9kZWZhdWx0IHZhbHVlOgorIyAgIC0gaW50ZWdyYXRlZC9TT0MgY29udHJvbGxlcnMgZmlyc3QKKyMgICAtIGxpY2Vuc2VkIElQIHVzZWQgaW4gYm90aCBTT0MgYW5kIGRpc2NyZXRlIHZlcnNpb25zCisjICAgLSBkaXNjcmV0ZSBvbmVzIChpbmNsdWRpbmcgYWxsIFBDSS1vbmx5IGNvbnRyb2xsZXJzKQorIyAgIC0gZGVidWcvZHVtbXkgZ2FkZ2V0K2hjZCBpcyBsYXN0LgorIwogY2hvaWNlCiAJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gVVNCX0dBREdFVApAQCAtOTQsMjYgKzExOCwyNyBAQAogCSAgIE1hbnkgY29udHJvbGxlciBkcml2ZXJzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYzsgdGhlc2UKIAkgICBvZnRlbiBuZWVkIGJvYXJkLXNwZWNpZmljIGhvb2tzLgogCi1jb25maWcgVVNCX0dBREdFVF9BTUQ1NTM2VURDCi0JYm9vbGVhbiAiQU1ENTUzNiBVREMiCi0JZGVwZW5kcyBvbiBQQ0kKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKyMKKyMgSW50ZWdyYXRlZCBjb250cm9sbGVycworIworCitjb25maWcgVVNCX0dBREdFVF9BVDkxCisJYm9vbGVhbiAiQXRtZWwgQVQ5MSBVU0IgRGV2aWNlIFBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOQorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAJaGVscAotCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCi0JICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAotCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCi0JICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAotCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgorCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKKwkgICBmdWxsIHNwZWVkIFVTQiBEZXZpY2UgUG9ydCB3aXRoIHN1cHBvcnQgZm9yIGZpdmUgY29uZmlndXJhYmxlCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiYW1kNTUzNnVkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAogCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX0FNRDU1MzZVREMKK2NvbmZpZyBVU0JfQVQ5MQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX0FNRDU1MzZVREMKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQVQ5MQogCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUTUVMX1VTQkEKIAlib29sZWFuICJBdG1lbCBVU0JBIgpAQCAtMTUwLDI4ICsxNzUsNTAgQEAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCi1jb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCi0JYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgotCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAogCWhlbHAKLQkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKLQkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAotCSAgIAotCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCi0JICAgKGZvciBjb250cm9sIHRyYW5zZmVycykgYW5kIHNldmVyYWwgZW5kcG9pbnRzIHdpdGggZGVkaWNhdGVkCi0JICAgZnVuY3Rpb25zLgorCSAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKIAotCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCi0JICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm5ldDIyODAiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9ORVQyMjgwCitjb25maWcgVVNCX0xIN0E0MFgKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9ORVQyMjgwCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMgfHwgTUFDSF9PTUFQX0g0X09URworCWhlbHAKKwkgICBNYW55IFRleGFzIEluc3RydW1lbnRzIE9NQVAgcHJvY2Vzc29ycyBoYXZlIGZsZXhpYmxlIGZ1bGwKKwkgICBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLCB3aXRoIHN1cHBvcnQgZm9yIHVwIHRvIDMwCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlCisJICAgY29udHJvbGxlciBpbiB0aGUgT01BUCAxNjExLCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBjb250cm9sbGVycworCSAgIGluIG90aGVyIE9NQVAgcHJvY2Vzc29ycyB0b28sIGdpdmVuIG1pbm9yIHR3ZWFrcy4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm9tYXBfdWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfT01BUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX09URworCWJvb2xlYW4gIk9URyBTdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQICYmIEFSQ0hfT01BUF9PVEcgJiYgVVNCX09IQ0lfSENECisJaGVscAorCSAgIFRoZSBtb3N0IG5vdGFibGUgZmVhdHVyZSBvZiBVU0IgT1RHIGlzIHN1cHBvcnQgZm9yIGEKKwkgICAiRHVhbC1Sb2xlIiBkZXZpY2UsIHdoaWNoIGNhbiBhY3QgYXMgZWl0aGVyIGEgZGV2aWNlCisJICAgb3IgYSBob3N0LiAgVGhlIGluaXRpYWwgcm9sZSBjaG9pY2UgY2FuIGJlIGNoYW5nZWQKKwkgICBsYXRlciwgd2hlbiB0d28gZHVhbC1yb2xlIGRldmljZXMgdGFsayB0byBlYWNoIG90aGVyLgorCisJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCisKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI1WAogCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKIAlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCkBAIC0yMDMsNiArMjUwLDYxIEBACiAJZGVmYXVsdCB5IGlmIFVTQl9FVEgKIAlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCiAKK2NvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAorCWJvb2xlYW4gIlBYQSAyN3giCisJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCisJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCisKKwkgICBJdCBoYXMgdXAgdG8gMjMgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8gKGZvcgorCSAgIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgInB4YTI3eF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9QWEEyN1gKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9TM0MyNDEwCisJYm9vbGVhbiAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYW1zdW5nJ3MgUzNDMjQxMCBpcyBhbiBBUk0tNCBwcm9jZXNzb3Igd2l0aCBhbiBpbnRlZ3JhdGVkCisJICBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBJdCBoYXMgNCBjb25maWd1cmFibGUKKwkgIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIFMzQzI0MTAsIFMzQzI0MTIsIGFuZAorCSAgUzNDMjQ0MCBwcm9jZXNzb3JzLgorCitjb25maWcgVVNCX1MzQzI0MTAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKworY29uZmlnIFVTQl9TM0MyNDEwX0RFQlVHCisJYm9vbGVhbiAiUzNDMjQxMCB1ZGMgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKKworIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgaW4gYm90aCBpbnRlZ3JhdGVkIGFuZCBkaXNjcmV0ZSB2ZXJzaW9ucworIworCisjIG11c2IgYnVpbGRzIGluIC4uL211c2IgYWxvbmcgd2l0aCBob3N0IHN1cHBvcnQKK2NvbmZpZyBVU0JfR0FER0VUX01VU0JfSERSQworCWJvb2xlYW4gIkludmVudHJhIEhEUkMgVVNCIFBlcmlwaGVyYWwgKFRJLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAoVVNCX01VU0JfUEVSSVBIRVJBTCB8fCBVU0JfTVVTQl9PVEcpCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKwloZWxwCisJICBUaGlzIE9URy1jYXBhYmxlIHNpbGljb24gSVAgaXMgdXNlZCBpbiBkdWFsIGRlc2lnbnMgaW5jbHVkaW5nCisJICB0aGUgVEkgRGFWaW5jaSwgT01BUCAyNDN4LCBPTUFQIDM0M3gsIGFuZCBUVVNCIDYwMTAuCisKIGNvbmZpZyBVU0JfR0FER0VUX002NjU5MgogCWJvb2xlYW4gIlJlbmVzYXMgTTY2NTkyIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECkBAIC0yMzEsMjMgKzMzMyw2OSBAQAogCSAgIEhvd2V2ZXIsIHRoaXMgcHJvYmxlbSBpcyBpbXByb3ZlZCBpZiBjaGFuZ2UgYSB2YWx1ZSBvZgogCSAgIE5FVF9JUF9BTElHTiB0byA0LgogCi1jb25maWcgVVNCX0dBREdFVF9QWEEyN1gKLQlib29sZWFuICJQWEEgMjd4IgotCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4Ci0JaGVscAotCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQotCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgorIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgb25seSBpbiBkaXNjcmV0ZSBmb3JtIChhbmQgYWxsIFBDSSBjb250cm9sbGVycykKKyMKIAotCSAgIEl0IGhhcyB1cCB0byAyMyBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yCi0JICAgY29udHJvbCB0cmFuc2ZlcnMpLgorY29uZmlnIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWJvb2xlYW4gIkFNRDU1MzYgVURDIgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCisJICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAorCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCisJICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAorCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhbWQ1NTM2dWRjIiBhbmQgZm9yY2UgYWxsCiAJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCiAKLWNvbmZpZyBVU0JfUFhBMjdYCitjb25maWcgVVNCX0FNRDU1MzZVREMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX0ZTTF9RRQorCWJvb2xlYW4gIkZyZWVzY2FsZSBRRS9DUE0gVVNCIERldmljZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRlNMX1NPQyAmJiAoUVVJQ0NfRU5HSU5FIHx8IENQTSkKKwloZWxwCisJICAgU29tZSBvZiBGcmVlc2NhbGUgUG93ZXJQQyBwcm9jZXNzb3JzIGhhdmUgYSBGdWxsIFNwZWVkCisJICAgUUUvQ1BNMiBVU0IgY29udHJvbGxlciwgd2hpY2ggc3VwcG9ydCBkZXZpY2UgbW9kZSB3aXRoIDQKKwkgICBwcm9ncmFtbWFibGUgZW5kcG9pbnRzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBNUEM4MzYwIGFuZCBNUEM4MjcyLCBhbmQgc2hvdWxkIHdvcmsgd2l0aAorCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKKwkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKworY29uZmlnIFVTQl9GU0xfUUUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9GU0xfUUUKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCisJYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIE5ldENoaXAgMjI4MCAvIDIyODIgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLgorCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCkBAIC0yNTcsNyArNDA1LDcgQEAKIAloZWxwCiAJICAgVGhlIFRvc2hpYmEgVEM4NkMwMDEgaXMgYSBQQ0kgZGV2aWNlIHdoaWNoIGluY2x1ZGVzIGNvbnRyb2xsZXJzCiAJICAgZm9yIGZ1bGwgc3BlZWQgVVNCIGRldmljZXMsIElERSwgSTJDLCBTSU8sIHBsdXMgYSBVU0IgaG9zdCAoT0hDSSkuCi0JICAgCisKIAkgICBUaGUgZGV2aWNlIGNvbnRyb2xsZXIgaGFzIHRocmVlIGNvbmZpZ3VyYWJsZSAoYnVsayBvciBpbnRlcnJ1cHQpCiAJICAgZW5kcG9pbnRzLCBwbHVzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCiAKQEAgLTI3Miw5OCArNDIwLDkgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiAKLWNvbmZpZyBVU0JfR0FER0VUX0xIN0E0MFgKLQlib29sZWFuICJMSDdBNDBYIgotCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCi0JaGVscAotICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKLQotY29uZmlnIFVTQl9MSDdBNDBYCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTEg3QTQwWAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLSMgYnVpbHQgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAotY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCi0JYm9vbGVhbiAiSW52ZW50cmEgSERSQyBVU0IgUGVyaXBoZXJhbCAoVEksIC4uLikiCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKLQlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAotCWhlbHAKLQkgIFRoaXMgT1RHLWNhcGFibGUgc2lsaWNvbiBJUCBpcyB1c2VkIGluIGR1YWwgZGVzaWducyBpbmNsdWRpbmcKLQkgIHRoZSBUSSBEYVZpbmNpLCBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KLQotY29uZmlnIFVTQl9HQURHRVRfT01BUAotCWJvb2xlYW4gIk9NQVAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0Jc2VsZWN0IElTUDEzMDFfT01BUCBpZiBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX0gzCi0JaGVscAotCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAotCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKLQkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCi0JICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgotCi0JICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9PTUFQCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfT1RHCi0JYm9vbGVhbiAiT1RHIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKLQloZWxwCi0JICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQotCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKLQkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAotCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCi0KLQkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KLQotY29uZmlnIFVTQl9HQURHRVRfUzNDMjQxMAotCWJvb2xlYW4gIlMzQzI0MTAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JaGVscAotCSAgU2Ftc3VuZydzIFMzQzI0MTAgaXMgYW4gQVJNLTQgcHJvY2Vzc29yIHdpdGggYW4gaW50ZWdyYXRlZAotCSAgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgSXQgaGFzIDQgY29uZmlndXJhYmxlCi0JICBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KLQotCSAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBTM0MyNDEwLCBTM0MyNDEyLCBhbmQKLQkgIFMzQzI0NDAgcHJvY2Vzc29ycy4KLQotY29uZmlnIFVTQl9TM0MyNDEwCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfUzNDMjQxMF9ERUJVRwotCWJvb2xlYW4gIlMzQzI0MTAgdWRjIGRlYnVnIG1lc3NhZ2VzIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCi0KLWNvbmZpZyBVU0JfR0FER0VUX0FUOTEKLQlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5Ci0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQloZWxwCi0JICAgTWFueSBBdG1lbCBBVDkxIHByb2Nlc3NvcnMgKHN1Y2ggYXMgdGhlIEFUOTFSTTIwMDApIGhhdmUgYQotCSAgIGZ1bGwgc3BlZWQgVVNCIERldmljZSBQb3J0IHdpdGggc3VwcG9ydCBmb3IgZml2ZSBjb25maWd1cmFibGUKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuCi0KLQkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX0FUOTEKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BVDkxCi0JZGVmYXVsdCBVU0JfR0FER0VUCisjCisjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlcgorIwogCiBjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKIAlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKQEAgLTU1MywxOSArNjEyLDIzIEBACiAJICBub3JtYWwgb3BlcmF0aW9uLgogCiBjb25maWcgVVNCX0dfU0VSSUFMCi0JdHJpc3RhdGUgIlNlcmlhbCBHYWRnZXQgKHdpdGggQ0RDIEFDTSBzdXBwb3J0KSIKKwl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIGFuZCBDREMgT0JFWCBzdXBwb3J0KSIKIAloZWxwCiAJICBUaGUgU2VyaWFsIEdhZGdldCB0YWxrcyB0byB0aGUgTGludXgtVVNCIGdlbmVyaWMgc2VyaWFsIGRyaXZlci4KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgQ0RDLUFDTSBtb2R1bGUgb3B0aW9uLCB3aGljaCBjYW4gYmUgdXNlZAogCSAgdG8gaW50ZXJvcGVyYXRlIHdpdGggTVMtV2luZG93cyBob3N0cyBvciB3aXRoIHRoZSBMaW51eC1VU0IKIAkgICJjZGMtYWNtIiBkcml2ZXIuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgYSBDREMtT0JFWCBvcHRpb24uICBZb3Ugd2lsbCBuZWVkIGEKKwkgIHVzZXIgc3BhY2UgT0JFWCBzZXJ2ZXIgdGFsa2luZyB0byAvZGV2L3R0eUdTKiwgc2luY2UgdGhlIGtlcm5lbAorCSAgaXRzZWxmIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBPQkVYIHByb3RvY29sLgorCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KIAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAogCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KLQkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisJICBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIENEQyBBQ00uCiAKIGNvbmZpZyBVU0JfTUlESV9HQURHRVQKIAl0cmlzdGF0ZSAiTUlESSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggZmNiNWNiOS4uYmQ0MDQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMTgsMjggKzE4LDIwIEBACiBvYmotJChDT05GSUdfVVNCX0FUTUVMX1VTQkEpCSs9IGF0bWVsX3VzYmFfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfRlNMX1VTQjIpCSs9IGZzbF91c2IyX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX002NjU5MikJKz0gbTY2NTkyLXVkYy5vCitvYmotJChDT05GSUdfVVNCX0ZTTF9RRSkJKz0gZnNsX3FlX3VkYy5vCiAKICMKICMgVVNCIGdhZGdldCBkcml2ZXJzCiAjCi1DX1VUSUxTID0JY29tcG9zaXRlLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCi0KLWdfemVyby1vYmpzCQkJOj0gemVyby5vIGZfc291cmNlc2luay5vIGZfbG9vcGJhY2subyAkKENfVVRJTFMpCi1nX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVfZXRoZXIubyBmX3N1YnNldC5vIGZfZWNtLm8gJChDX1VUSUxTKQotZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVfc2VyaWFsLm8gZl9hY20ubyBmX3NlcmlhbC5vICQoQ19VVElMUykKLWdfbWlkaS1vYmpzCQkJOj0gZ21pZGkubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dfemVyby1vYmpzCQkJOj0gemVyby5vCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vCitnX3NlcmlhbC1vYmpzCQkJOj0gc2VyaWFsLm8KK2dfbWlkaS1vYmpzCQkJOj0gZ21pZGkubwogZ2FkZ2V0ZnMtb2JqcwkJCTo9IGlub2RlLm8KLWdfZmlsZV9zdG9yYWdlLW9ianMJCTo9IGZpbGVfc3RvcmFnZS5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIFwKLQkJCQkJZXBhdXRvY29uZi5vCi1nX3ByaW50ZXItb2JqcwkJCTo9IHByaW50ZXIubyB1c2JzdHJpbmcubyBjb25maWcubyBcCi0JCQkJCWVwYXV0b2NvbmYubwotZ19jZGMtb2JqcwkJCTo9IGNkYzIubyB1X2V0aGVyLm8gZl9lY20ubyBcCi0JCQkJCXVfc2VyaWFsLm8gZl9hY20ubyAkKENfVVRJTFMpCitnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubworZ19wcmludGVyLW9ianMJCQk6PSBwcmludGVyLm8KK2dfY2RjLW9ianMJCQk6PSBjZGMyLm8KIAotaWZlcSAoJChDT05GSUdfVVNCX0VUSF9STkRJUykseSkKLQlnX2V0aGVyLW9ianMJCSs9IGZfcm5kaXMubyBybmRpcy5vCi1lbmRpZgotIAogb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KIG9iai0kKENPTkZJR19VU0JfRVRIKQkJKz0gZ19ldGhlci5vCiBvYmotJChDT05GSUdfVVNCX0dBREdFVEZTKQkrPSBnYWRnZXRmcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCBhMzlhNGI5Li41NDk1YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTQzLDYgKzQzLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorI2luY2x1ZGUgInVfc2VyaWFsLmMiCisjaW5jbHVkZSAiZl9hY20uYyIKKyNpbmNsdWRlICJmX2VjbS5jIgorI2luY2x1ZGUgInVfZXRoZXIuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLApAQCAtMTM2LDcgKzE1NSw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDgsNyArMTY2LDggQEAKIAlpbnQJCQlzdGF0dXM7CiAKIAlpZiAoIWNhbl9zdXBwb3J0X2VjbShjZGV2LT5nYWRnZXQpKSB7Ci0JCUVSUk9SKGNkZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwgZ2FkZ2V0LT5uYW1lKTsKKwkJZGV2X2VycigmZ2FkZ2V0LT5kZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwKKwkJCQlnYWRnZXQtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwMyw3ICsyMjIsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWwxOwogCi0JSU5GTyhjZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgRFJJVkVSX0RFU0MpOworCWRldl9pbmZvKCZnYWRnZXQtPmRldiwgIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCQlEUklWRVJfREVTQyk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDg1Yzg3NmMuLmYyZGEwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTEyOCw2ICsxMjgsNzAgQEAKIH0KIAogLyoqCisgKiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSAtIHByZXZlbnQgZnVuY3Rpb24gYW5kIGdhZGdldCBlbnVtZXJhdGlvbgorICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBpc24ndCB5ZXQgcmVhZHkgdG8gcmVzcG9uZAorICoKKyAqIEJsb2NrcyByZXNwb25zZSBvZiB0aGUgZ2FkZ2V0IGRyaXZlciB0byBob3N0IGVudW1lcmF0aW9uIGJ5CisgKiBwcmV2ZW50aW5nIHRoZSBkYXRhIGxpbmUgcHVsbHVwIGZyb20gYmVpbmcgYWN0aXZhdGVkLiAgVGhpcyBpcworICogbm9ybWFsbHkgY2FsbGVkIGR1cmluZyBAYmluZCgpIHByb2Nlc3NpbmcgdG8gY2hhbmdlIGZyb20gdGhlCisgKiBpbml0aWFsICJyZWFkeSB0byByZXNwb25kIiBzdGF0ZSwgb3Igd2hlbiBhIHJlcXVpcmVkIHJlc291cmNlCisgKiBiZWNvbWVzIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgZHJpdmVycyB0aGF0IHNlcnZlIGFzIGEgcGFzc3Rocm91Z2ggdG8gYSB1c2Vyc3BhY2UKKyAqIGRhZW1vbiBjYW4gYmxvY2sgZW51bWVyYXRpb24gdW5sZXNzIHRoYXQgZGFlbW9uIChzdWNoIGFzIGFuIE9CRVgsCisgKiBNVFAsIG9yIHByaW50IHNlcnZlcikgaXMgcmVhZHkgdG8gaGFuZGxlIGhvc3QgcmVxdWVzdHMuCisgKgorICogTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgc29mdHdhcmUgY29udHJvbCBvZiB0aGVpciBVU0IgcGVyaXBoZXJhbAorICogZGF0YSBwdWxsdXBzLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwlpbnQJCQkJc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisKKwlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQorCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKKwlpZiAoc3RhdHVzID09IDApCisJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSAtIGFsbG93IGZ1bmN0aW9uIGFuZCBnYWRnZXQgZW51bWVyYXRpb24KKyAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gd2hpY2ggdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKCkgd2FzIGNhbGxlZAorICoKKyAqIFJldmVyc2VzIGVmZmVjdCBvZiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSgpLiAgSWYgbm8gbW9yZSBmdW5jdGlvbnMKKyAqIGFyZSBkZWxheWluZyB0aGVpciBhY3RpdmF0aW9uLCB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIHJlc3BvbmQgdG8KKyAqIGhvc3QgZW51bWVyYXRpb24gcHJvY2VkdXJlcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCWludAkJCQlzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKworCWlmIChXQVJOX09OKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJZWxzZSB7CisJCWNkZXYtPmRlYWN0aXZhdGlvbnMtLTsKKwkJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKKwkJCXN0YXR1cyA9IHVzYl9nYWRnZXRfY29ubmVjdChjZGV2LT5nYWRnZXQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIHVzYl9pbnRlcmZhY2VfaWQoKSAtIGFsbG9jYXRlIGFuIHVudXNlZCBpbnRlcmZhY2UgSUQKICAqIEBjb25maWc6IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcmZhY2UKICAqIEBmdW5jdGlvbjogZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGludGVyZmFjZQpAQCAtMTgxLDcgKzI0NSw3IEBACiAJYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKIAljLT5pQ29uZmlndXJhdGlvbiA9IGNvbmZpZy0+aUNvbmZpZ3VyYXRpb247CiAJYy0+Ym1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwgY29uZmlnLT5ibUF0dHJpYnV0ZXM7Ci0JYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXI7CisJYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXIgPyA6IChDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyKTsKIAogCS8qIFRoZXJlIG1heSBiZSBlLmcuIE9URyBkZXNjcmlwdG9ycyAqLwogCWlmIChjb25maWctPmRlc2NyaXB0b3JzKSB7CkBAIC0zNjgsNyArNDMyLDcgQEAKIAl9CiAKIAkvKiB3aGVuIHdlIHJldHVybiwgYmUgc3VyZSBvdXIgcG93ZXIgdXNhZ2UgaXMgdmFsaWQgKi8KLQlwb3dlciA9IDIgKiBjLT5iTWF4UG93ZXI7CisJcG93ZXIgPSBjLT5iTWF4UG93ZXIgPyAoMiAqIGMtPmJNYXhQb3dlcikgOiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc7CiBkb25lOgogCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgcG93ZXIpOwogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggNzYwMGEwYy4uOTA2NDY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODIsNiArODIsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKIAlzdHJ1Y3QgdXNiX2VwCQkJZXA7CiAJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJd2VkZ2VkIDogMTsKIAl1bnNpZ25lZAkJCWFscmVhZHlfc2VlbiA6IDE7CiAJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7CiB9OwpAQCAtNDM2LDYgKzQzNyw3IEBACiAJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCiAJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgogCSAqLworCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gMDsKIAlyZXR2YWwgPSAwOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTk3LDcgKzU5OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWR1bW15X3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK2R1bW15X3NldF9oYWx0X2FuZF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSwgaW50IHdlZGdlZCkKIHsKIAlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKIAlzdHJ1Y3QgZHVtbXkJCSpkdW07CkBAIC02MDksMTYgKzYxMSwzMiBAQAogCWlmICghZHVtLT5kcml2ZXIpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCWlmICghdmFsdWUpCi0JCWVwLT5oYWx0ZWQgPSAwOworCQllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IDA7CiAJZWxzZSBpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKIAkJCSFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQorCWVsc2UgewogCQllcC0+aGFsdGVkID0gMTsKKwkJaWYgKHdlZGdlZCkKKwkJCWVwLT53ZWRnZWQgPSAxOworCX0KIAkvKiBGSVhNRSBjbGVhciBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGR1bW15X3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludCBkdW1teV9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCWlmICghX2VwIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZHVtbXlfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CiAJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCiAJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLApAQCAtNjMwLDYgKzY0OCw3IEBACiAJLmRlcXVldWUJPSBkdW1teV9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gZHVtbXlfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IGR1bW15X3NldF93ZWRnZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03NjAsNyArNzc5LDggQEAKIAkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFtpXTsKIAkJZXAtPmVwLm9wcyA9ICZkdW1teV9lcF9vcHM7CiAJCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOwotCQllcC0+aGFsdGVkID0gZXAtPmFscmVhZHlfc2VlbiA9IGVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gZXAtPmFscmVhZHlfc2VlbiA9CisJCQkJZXAtPnNldHVwX3N0YWdlID0gMDsKIAkJZXAtPmVwLm1heHBhY2tldCA9IH4wOwogCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CiAJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CkBAIC0xMzUxLDcgKzEzNzEsNyBAQAogCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKIAkJCQkJLy8gZW5kcG9pbnQgaGFsdAogCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sIHdfaW5kZXgpOwotCQkJCQlpZiAoIWVwMikgeworCQkJCQlpZiAoIWVwMiB8fCBlcDItPmVwLm5hbWUgPT0gZXAwbmFtZSkgewogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CkBAIC0xMzgwLDcgKzE0MDAsOCBAQAogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWVwMi0+aGFsdGVkID0gMDsKKwkJCQkJaWYgKCFlcDItPndlZGdlZCkKKwkJCQkJCWVwMi0+aGFsdGVkID0gMDsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYmNhYzJlNi4uMzcyNTJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTk2LDYgKzk2LDI4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfZWNtLmMiCisjaW5jbHVkZSAiZl9zdWJzZXQuYyIKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworI2luY2x1ZGUgImZfcm5kaXMuYyIKKyNpbmNsdWRlICJybmRpcy5jIgorI2VuZGlmCisjaW5jbHVkZSAidV9ldGhlci5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQogICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCiAgKi8KQEAgLTIyMCw3ICsyNDIsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMiwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQ5LDcgKzI3MCw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yOTMsNyArMzEzLDggQEAKIAkJICogYnV0IGlmIHRoZSBjb250cm9sbGVyIGlzbid0IHJlY29nbml6ZWQgYXQgYWxsIHRoZW4KIAkJICogdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IG1vcmUgbGlrZWx5IHRvIGJlIHdyb25nLgogCQkgKi8KLQkJV0FSTklORyhjZGV2LCAiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCisJCWRldl93YXJuKCZnYWRnZXQtPmRldiwKKwkJCQkiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KQEAgLTMzMiw3ICszNTMsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlJTkZPKGNkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBEUklWRVJfREVTQyk7CisJZGV2X2luZm8oJmdhZGdldC0+ZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJCURSSVZFUl9ERVNDKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCmluZGV4IGEyYjVjMDkuLjRhZTU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIC8qIHBlYWsgKHRoZW9yZXRpY2FsKSBidWxrIHRyYW5zZmVyIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJpdHJhdGUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGVjbV9iaXRyYXRlKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQogewogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGcpICYmIGctPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQlyZXR1cm4gMTMgKiA1MTIgKiA4ICogMTAwMCAqIDg7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAqLwogCiAjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLwotI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworI2RlZmluZSBFQ01fU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KIAogCiAvKiBpbnRlcmZhY2UgZGVzY3JpcHRvcjogKi8KQEAgLTEyNSw4ICsxMjUsOCBAQAogCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGhlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGhlYWRlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGVjbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBlY21faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKQEAgLTE0MSw4ICsxNDEsOCBAQAogCS8qIC5iU2xhdmVJbnRlcmZhY2UwID0JRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyBfX2luaXRkYXRhID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBldGhlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZWNtX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZWNtX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfRVRIRVJORVRfVFlQRSwKIApAQCAtMTg2LDE3ICsxODYsMTcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjEyLDM0ICsyMTIsMzQgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21fZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjU3LDE5ICsyNTcsMTkgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMzI5LDE0ICszMjksMTQgQEAKIAkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOwogCQlldmVudC0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CiAJCWV2ZW50LT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoOCk7Ci0JCXJlcS0+bGVuZ3RoID0gU1RBVFVTX0JZVEVDT1VOVDsKKwkJcmVxLT5sZW5ndGggPSBFQ01fU1RBVFVTX0JZVEVDT1VOVDsKIAogCQkvKiBTUEVFRF9DSEFOR0UgZGF0YSBpcyB1cC9kb3duIHNwZWVkcyBpbiBiaXRzL3NlYyAqLwogCQlkYXRhID0gcmVxLT5idWYgKyBzaXplb2YgKmV2ZW50OwotCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJZGF0YVswXSA9IGNwdV90b19sZTMyKGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQlkYXRhWzFdID0gZGF0YVswXTsKIAotCQlEQkcoY2RldiwgIm5vdGlmeSBzcGVlZCAlZFxuIiwgYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJREJHKGNkZXYsICJub3RpZnkgc3BlZWQgJWRcbiIsIGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfTk9ORTsKIAkJYnJlYWs7CiAJfQpAQCAtNjI4LDEzICs2MjgsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2VjbV9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0LmluX2VwID0gZXA7CiAJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfb3V0X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX291dF9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0Lm91dF9lcCA9IGVwOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJICogZG9uJ3QgdHJlYXQgaXQgdGhhdCB3YXkuICBJdCdzIHNpbXBsZXIsIGFuZCBzb21lIG5ld2VyIENEQwogCSAqIHByb2ZpbGVzICh3aXJlbGVzcyBoYW5kc2V0cykgbm8gbG9uZ2VyIHRyZWF0IGl0IGFzIG9wdGlvbmFsLgogCSAqLwotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbm90aWZ5X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX25vdGlmeV9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5ub3RpZnkgPSBlcDsKQEAgLTY1Niw0NyArNjU2LDQ3IEBACiAJZWNtLT5ub3RpZnlfcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZWNtLT5ub3RpZnlfcmVxKQogCQlnb3RvIGZhaWw7Ci0JZWNtLT5ub3RpZnlfcmVxLT5idWYgPSBrbWFsbG9jKFNUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWVjbS0+bm90aWZ5X3JlcS0+YnVmID0ga21hbGxvYyhFQ01fU1RBVFVTX0JZVEVDT1VOVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlY20tPm5vdGlmeV9yZXEtPmJ1ZikKIAkJZ290byBmYWlsOwogCWVjbS0+bm90aWZ5X3JlcS0+Y29udGV4dCA9IGVjbTsKIAllY20tPm5vdGlmeV9yZXEtPmNvbXBsZXRlID0gZWNtX25vdGlmeV9jb21wbGV0ZTsKIAogCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGV0aF9mc19mdW5jdGlvbik7CisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhlY21fZnNfZnVuY3Rpb24pOwogCWlmICghZi0+ZGVzY3JpcHRvcnMpCiAJCWdvdG8gZmFpbDsKIAotCWVjbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX2luX2Rlc2MpOwotCWVjbS0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2ZzX2Z1bmN0aW9uLAotCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19vdXRfZGVzYyk7Ci0JZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX25vdGlmeV9kZXNjKTsKKwllY20tPmZzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19lY21faW5fZGVzYyk7CisJZWNtLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9vdXRfZGVzYyk7CisJZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9ub3RpZnlfZGVzYyk7CiAKIAkvKiBzdXBwb3J0IGFsbCByZWxldmFudCBoYXJkd2FyZSBzcGVlZHMuLi4gd2UgZXhwZWN0IHRoYXQgd2hlbgogCSAqIGhhcmR3YXJlIGlzIGR1YWwgc3BlZWQsIGFsbCBidWxrLWNhcGFibGUgZW5kcG9pbnRzIHdvcmsgYXQKIAkgKiBib3RoIHNwZWVkcwogCSAqLwogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKLQkJaHNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19lY21fb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfZWNtX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCiAJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhldGhfaHNfZnVuY3Rpb24pOworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGVjbV9oc19mdW5jdGlvbik7CiAJCWlmICghZi0+aHNfZGVzY3JpcHRvcnMpCiAJCQlnb3RvIGZhaWw7CiAKLQkJZWNtLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX2luX2Rlc2MpOwotCQllY20tPmhzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX291dF9kZXNjKTsKLQkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfaHNfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19ub3RpZnlfZGVzYyk7CisJCWVjbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21faW5fZGVzYyk7CisJCWVjbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfZWNtX291dF9kZXNjKTsKKwkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21fbm90aWZ5X2Rlc2MpOwogCX0KIAogCS8qIE5PVEU6ICBhbGwgdGhhdCBpcyBkb25lIHdpdGhvdXQga25vd2luZyBvciBjYXJpbmcgYWJvdXQKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7CiAJCWVjbV9zdHJpbmdfZGVmc1sxXS5pZCA9IHN0YXR1czsKLQkJZXRoZXJfZGVzYy5pTUFDQWRkcmVzcyA9IHN0YXR1czsKKwkJZWNtX2Rlc2MuaU1BQ0FkZHJlc3MgPSBzdGF0dXM7CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggZWRhNGNkZTcuLjhhZmZlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpAQCAtNzAsNyArNzAsNyBAQAogCiAvKiBmdWxsIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtNzgsNyArNzgsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc2lua19kZXNjID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19sb29wX3NpbmtfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC04OCwxNCArODgsMTQgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2xvb3BiYWNrX2Rlc2NzW10gPSB7CiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2xvb3Bfc2lua19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19sb29wX3NvdXJjZV9kZXNjLAogCU5VTEwsCiB9OwogCiAvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc2lua19kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTExMyw4ICsxMTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zaW5rX2Rlc2MsCiAJTlVMTCwKIH07CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAJLyogYWxsb2NhdGUgZW5kcG9pbnRzICovCiAKLQlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3NvdXJjZV9kZXNjKTsKKwlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc291cmNlX2Rlc2MpOwogCWlmICghbG9vcC0+aW5fZXApIHsKIGF1dG9jb25mX2ZhaWw6CiAJCUVSUk9SKGNkZXYsICIlczogY2FuJ3QgYXV0b2NvbmZpZ3VyZSBvbiAlc1xuIiwKQEAgLTE2MSwxNyArMTYxLDE3IEBACiAJfQogCWxvb3AtPmluX2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQlsb29wLT5vdXRfZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19zaW5rX2Rlc2MpOworCWxvb3AtPm91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc2lua19kZXNjKTsKIAlpZiAoIWxvb3AtPm91dF9lcCkKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCWxvb3AtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLwogCiAJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCiAJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgewotCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2xvb3Bfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfbG9vcF9zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IGhzX2xvb3BiYWNrX2Rlc2NzOwogCX0KIApAQCAtMjU1LDggKzI1NSwxMCBAQAogCXN0cnVjdCB1c2JfcmVxdWVzdAkJCSpyZXE7CiAJdW5zaWduZWQJCQkJaTsKIAotCXNyYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKLQlzaW5rID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJc3JjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCSZoc19sb29wX3NvdXJjZV9kZXNjLCAmZnNfbG9vcF9zb3VyY2VfZGVzYyk7CisJc2luayA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkmaHNfbG9vcF9zaW5rX2Rlc2MsICZmc19sb29wX3NpbmtfZGVzYyk7CiAKIAkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLwogCWVwID0gbG9vcC0+aW5fZXA7CkBAIC0zNTAsNyArMzUyLDYgQEAKIAkuYmluZAkJPSBsb29wYmFja19iaW5kX2NvbmZpZywKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGMyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogZl9vYmV4LmMgLS0gVVNCIENEQyBPQkVYIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9uIGZfYWNtLmMgYnkgQWwgQm9yY2hlcnMgYW5kIERhdmlkIEJyb3duZWxsLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qCisgKiBUaGlzIENEQyBPQkVYIGZ1bmN0aW9uIHN1cHBvcnQganVzdCBwYWNrYWdlcyBhIFRUWS1pc2ggYnl0ZSBzdHJlYW0uCisgKiBBIHVzZXIgbW9kZSBzZXJ2ZXIgd2lsbCBwdXQgaXQgaW50byAicmF3IiBtb2RlIGFuZCBoYW5kbGUgYWxsIHRoZQorICogcmVsZXZhbnQgcHJvdG9jb2wgZGV0YWlscyAuLi4gdGhpcyBpcyBqdXN0IGEga2VybmVsIHBhc3N0aHJvdWdoLgorICogV2hlbiBwb3NzaWJsZSwgd2UgcHJldmVudCBnYWRnZXQgZW51bWVyYXRpb24gdW50aWwgdGhhdCBzZXJ2ZXIgaXMKKyAqIHJlYWR5IHRvIGhhbmRsZSB0aGUgY29tbWFuZHMuCisgKi8KKworc3RydWN0IG9iZXhfZXBfZGVzY3MgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb2JleF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm9iZXhfb3V0OworfTsKKworc3RydWN0IGZfb2JleCB7CisJc3RydWN0IGdzZXJpYWwJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQ7CisJdTgJCQkJZGF0YV9pZDsKKwl1OAkJCQlwb3J0X251bTsKKwl1OAkJCQljYW5fYWN0aXZhdGU7CisKKwlzdHJ1Y3Qgb2JleF9lcF9kZXNjcwkJZnM7CisJc3RydWN0IG9iZXhfZXBfZGVzY3MJCWhzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9vYmV4ICpmdW5jX3RvX29iZXgoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX29iZXgsIHBvcnQuZnVuYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfb2JleCAqcG9ydF90b19vYmV4KHN0cnVjdCBnc2VyaWFsICpwKQoreworCXJldHVybiBjb250YWluZXJfb2YocCwgc3RydWN0IGZfb2JleCwgcG9ydCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgT0JFWF9DVFJMX0lEWAkwCisjZGVmaW5lIE9CRVhfREFUQV9JRFgJMQorCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgb2JleF9zdHJpbmdfZGVmc1tdID0geworCVtPQkVYX0NUUkxfSURYXS5zCT0gIkNEQyBPYmplY3QgRXhjaGFuZ2UgKE9CRVgpIiwKKwlbT0JFWF9EQVRBX0lEWF0ucwk9ICJDREMgT0JFWCBEYXRhIiwKKwl7ICB9LAkvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgb2JleF9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlCQk9IDB4MDQwOSwJLyogZW4tVVMgKi8KKwkuc3RyaW5ncwkJPSBvYmV4X3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKm9iZXhfc3RyaW5nc1tdID0geworCSZvYmV4X3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9jb250cm9sX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jb250cm9sX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMCwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfT0JFWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG9iZXhfZGF0YV9ub3BfaW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2RhdGFfbm9wX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMSwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kYXRhX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMiwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDEsCisJLmJOdW1FbmRwb2ludHMJCT0gMiwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIG9iZXhfY2RjX2hlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX2hlYWRlcl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19IRUFERVJfVFlQRSwKKwkuYmNkQ0RDCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEyMCksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX3VuaW9uX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX1VOSU9OX1RZUEUsCisJLmJNYXN0ZXJJbnRlcmZhY2UwCT0gMSwKKwkuYlNsYXZlSW50ZXJmYWNlMAk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIG9iZXhfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX09CRVhfVFlQRSwKKwkuYmNkVmVyc2lvbgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCit9OworCisvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2hzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfdW5pb25fZGVzYywKKworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2hzX2VwX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfaHNfZXBfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIEZ1bGwtU3BlZWQgU3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfZnNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2ZzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX2hlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX3VuaW9uX2Rlc2MsCisKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9kYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9mc19lcF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2ZzX2VwX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9iZXhfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBmdW5jX3RvX29iZXgoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkgeworCQlpZiAoYWx0ICE9IDApCisJCQlnb3RvIGZhaWw7CisJCS8qIE5PUCAqLworCQlEQkcoY2RldiwgInJlc2V0IG9iZXggdHR5R1MlZCBjb250cm9sXG4iLCBvYmV4LT5wb3J0X251bSk7CisKKwl9IGVsc2UgaWYgKGludGYgPT0gb2JleC0+ZGF0YV9pZCkgeworCQlpZiAoYWx0ID4gMSkKKwkJCWdvdG8gZmFpbDsKKworCQlpZiAob2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEpIHsKKwkJCURCRyhjZGV2LCAicmVzZXQgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Rpc2Nvbm5lY3QoJm9iZXgtPnBvcnQpOworCQl9CisKKwkJaWYgKCFvYmV4LT5wb3J0LmluX2Rlc2MpIHsKKwkJCURCRyhjZGV2LCAiaW5pdCBvYmV4IHR0eUdTJWRcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwkJCW9iZXgtPnBvcnQuaW5fZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfaW4sIG9iZXgtPmZzLm9iZXhfaW4pOworCQkJb2JleC0+cG9ydC5vdXRfZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfb3V0LCBvYmV4LT5mcy5vYmV4X291dCk7CisJCX0KKworCQlpZiAoYWx0ID09IDEpIHsKKwkJCURCRyhjZGV2LCAiYWN0aXZhdGUgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Nvbm5lY3QoJm9iZXgtPnBvcnQsIG9iZXgtPnBvcnRfbnVtKTsKKwkJfQorCisJfSBlbHNlCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG9iZXhfZ2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gb2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgb2JleF9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfb2JleAkqb2JleCA9IGZ1bmNfdG9fb2JleChmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBkaXNhYmxlXG4iLCBvYmV4LT5wb3J0X251bSk7CisJZ3NlcmlhbF9kaXNjb25uZWN0KCZvYmV4LT5wb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgb2JleF9jb25uZWN0KHN0cnVjdCBnc2VyaWFsICpnKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gcG9ydF90b19vYmV4KGcpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGctPmZ1bmMuY29uZmlnLT5jZGV2OworCWludAkJCXN0YXR1czsKKworCWlmICghb2JleC0+Y2FuX2FjdGl2YXRlKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fYWN0aXZhdGUoJmctPmZ1bmMpOworCWlmIChzdGF0dXMpCisJCURCRyhjZGV2LCAib2JleCB0dHlHUyVkIGZ1bmN0aW9uIGFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBvYmV4X2Rpc2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmcpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBwb3J0X3RvX29iZXgoZyk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZy0+ZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFvYmV4LT5jYW5fYWN0aXZhdGUpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKCZnLT5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBmdW5jdGlvbiBkZWFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdAorb2JleF9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5jdHJsX2lkID0gc3RhdHVzOworCisJb2JleF9jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2NkY191bmlvbl9kZXNjLmJNYXN0ZXJJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCW9iZXgtPmRhdGFfaWQgPSBzdGF0dXM7CisKKwlvYmV4X2RhdGFfbm9wX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2RhdGFfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW9iZXhfY2RjX3VuaW9uX2Rlc2MuYlNsYXZlSW50ZXJmYWNlMCA9IHN0YXR1czsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGVuZHBvaW50cyAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZvYmV4X2ZzX2VwX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5wb3J0LmluID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmb2JleF9mc19lcF9vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCW9iZXgtPnBvcnQub3V0ID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2Z1bmN0aW9uKTsKKworCW9iZXgtPmZzLm9iZXhfaW4gPSB1c2JfZmluZF9lbmRwb2ludChmc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9mc19lcF9pbl9kZXNjKTsKKwlvYmV4LT5mcy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2ZzX2VwX291dF9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCisJCW9iZXhfaHNfZXBfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJb2JleF9oc19lcF9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2Z1bmN0aW9uKTsKKworCQlvYmV4LT5ocy5vYmV4X2luID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZnVuY3Rpb24sCisJCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2hzX2VwX2luX2Rlc2MpOworCQlvYmV4LT5ocy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGhzX2Z1bmN0aW9uLAorCQkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9oc19lcF9vdXRfZGVzYyk7CisJfQorCisJLyogQXZvaWQgbGV0dGluZyB0aGlzIGdhZGdldCBlbnVtZXJhdGUgdW50aWwgdGhlIHVzZXJzcGFjZQorCSAqIE9CRVggc2VydmVyIGlzIGFjdGl2ZS4KKwkgKi8KKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJV0FSTklORyhjZGV2LCAib2JleCB0dHlHUyVkOiBjYW4ndCBwcmV2ZW50IGVudW1lcmF0aW9uLCAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworCWVsc2UKKwkJb2JleC0+Y2FuX2FjdGl2YXRlID0gdHJ1ZTsKKworCisJREJHKGNkZXYsICJvYmV4IHR0eUdTJWQ6ICVzIHNwZWVkIElOLyVzIE9VVC8lc1xuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJb2JleC0+cG9ydC5pbi0+bmFtZSwgb2JleC0+cG9ydC5vdXQtPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKG9iZXgtPnBvcnQub3V0KQorCQlvYmV4LT5wb3J0Lm91dC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChvYmV4LT5wb3J0LmluKQorCQlvYmV4LT5wb3J0LmluLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXMvJXA6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgZiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitvYmV4X3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOworCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKwlrZnJlZShmdW5jX3RvX29iZXgoZikpOworfQorCisvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIE9CRVggLi4uICovCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3N1cHBvcnRfb2JleChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJLyogU2luY2UgdGhlIGZpcnN0IGludGVyZmFjZSBpcyBhIE5PUCwgd2UgY2FuIGlnbm9yZSB0aGUKKwkgKiBpc3N1ZSBvZiBtdWx0aS1pbnRlcmZhY2Ugc3VwcG9ydCBvbiBtb3N0IGNvbnRyb2xsZXJzLgorCSAqCisJICogQWx0c2V0dGluZ3MgYXJlIG1hbmRhdG9yeSwgaG93ZXZlci4uLgorCSAqLworCWlmICghZ2FkZ2V0X3N1cHBvcnRzX2FsdHNldHRpbmdzKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJvYmFibHkqIGZpbmUgLi4uICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogb2JleF9iaW5kX2NvbmZpZyAtIGFkZCBhIENEQyBPQkVYIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgdGhlIENEQyBPQkVYIGluc3RhbmNlCisgKiBAcG9ydF9udW06IC9kZXYvdHR5R1MqIHBvcnQgdGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdzZXJpYWxfc2V0dXAoKSB3aXRoIGVub3VnaCBwb3J0cyB0bworICogaGFuZGxlIGFsbCB0aGUgb25lcyBpdCBiaW5kcy4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ3NlcmlhbF9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgb2JleF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBmX29iZXgJKm9iZXg7CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X29iZXgoYykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlpZiAob2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9PSAwKSB7CisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2NvbnRyb2xfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0RBVEFfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2RhdGFfbm9wX2ludGYuaUludGVyZmFjZSA9CisJCQlvYmV4X2RhdGFfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwlvYmV4ID0ga3phbGxvYyhzaXplb2YgKm9iZXgsIEdGUF9LRVJORUwpOworCWlmICghb2JleCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvYmV4LT5wb3J0X251bSA9IHBvcnRfbnVtOworCisJb2JleC0+cG9ydC5jb25uZWN0ID0gb2JleF9jb25uZWN0OworCW9iZXgtPnBvcnQuZGlzY29ubmVjdCA9IG9iZXhfZGlzY29ubmVjdDsKKworCW9iZXgtPnBvcnQuZnVuYy5uYW1lID0gIm9iZXgiOworCW9iZXgtPnBvcnQuZnVuYy5zdHJpbmdzID0gb2JleF9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJb2JleC0+cG9ydC5mdW5jLmJpbmQgPSBvYmV4X2JpbmQ7CisJb2JleC0+cG9ydC5mdW5jLnVuYmluZCA9IG9iZXhfdW5iaW5kOworCW9iZXgtPnBvcnQuZnVuYy5zZXRfYWx0ID0gb2JleF9zZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5nZXRfYWx0ID0gb2JleF9nZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5kaXNhYmxlID0gb2JleF9kaXNhYmxlOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmb2JleC0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlrZnJlZShvYmV4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGYxOGMzYTEuLmRjODRkMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU1Miw3ICs1NTIsNiBAQAogCS5zZXR1cAkJPSBzb3VyY2VzaW5rX3NldHVwLAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMywKIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBhY2I4ZDIzLi5mZTE4MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgX19pbml0ZGF0YSA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgaGVhZGVyX2Rlc2MsCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgbWRsbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBtZGxtX2hlYWRlcl9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE3MCwxOCArMTcwLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xODksNyArMTg5LDcgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE5OSwxMiArMTk5LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMjgxLDEzICsyODEsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZ2V0aC0+cG9ydC5pbl9lcCA9IGVwOwogCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX291dF9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9vdXRfZGVzYyk7CiAJaWYgKCFlcCkKIAkJZ290byBmYWlsOwogCWdldGgtPnBvcnQub3V0X2VwID0gZXA7CkBAIC0yOTcsOSArMjk3LDkgQEAKIAlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2V0aF9mdW5jdGlvbik7CiAKIAlnZXRoLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2V0aF9mdW5jdGlvbiwKLQkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfaW5fZGVzYyk7CisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlnZXRoLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChmc19ldGhfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX291dF9kZXNjKTsKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfc3Vic2V0X291dF9kZXNjKTsKIAogCiAJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KQEAgLTMwNywxOCArMzA3LDE4IEBACiAJICogYm90aCBzcGVlZHMKIAkgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7Ci0JCWhzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfc3Vic2V0X291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CiAKIAkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2V0aF9mdW5jdGlvbik7CiAKIAkJZ2V0aC0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChoc19ldGhfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19pbl9kZXNjKTsKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX3N1YnNldF9pbl9kZXNjKTsKIAkJZ2V0aC0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZXRoX2Z1bmN0aW9uLAotCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfb3V0X2Rlc2MpOworCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfc3Vic2V0X291dF9kZXNjKTsKIAl9CiAKIAkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggZWEyYzMxZC4uYzRlNjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMjQ1LDYgKzI0NSwxOCBAQAogI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgogCiAKKworLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQiCkBAIC04MzksNyArODUxLDcgQEAKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19WQUxVRSwKIAkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfQ09ORklHLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwJLy8gc2VsZi1wb3dlcmVkCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKQEAgLTI2NjQsMTEgKzI2NzYsMjQgQEAKIAkvKiBWZXJpZnkgdGhlIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBpdHNlbGYgKi8KIAlpZiAoY21uZF9zaXplICE9IGZzZy0+Y21uZF9zaXplKSB7CiAKLQkJLyogU3BlY2lhbCBjYXNlIHdvcmthcm91bmQ6IE1TLVdpbmRvd3MgaXNzdWVzIFJFUVVFU1QgU0VOU0UKLQkJICogd2l0aCBjYnctPkxlbmd0aCA9PSAxMiAoaXQgc2hvdWxkIGJlIDYpLiAqLwotCQlpZiAoZnNnLT5jbW5kWzBdID09IFNDX1JFUVVFU1RfU0VOU0UgJiYgZnNnLT5jbW5kX3NpemUgPT0gMTIpCisJCS8qIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBUaGVyZSBhcmUgcGxlbnR5IG9mIGJ1Z2d5IFNDU0kKKwkJICogaW1wbGVtZW50YXRpb25zLiBNYW55IGhhdmUgaXNzdWVzIHdpdGggY2J3LT5MZW5ndGgKKwkJICogZmllbGQgcGFzc2luZyBhIHdyb25nIGNvbW1hbmQgc2l6ZS4gRm9yIHRob3NlIGNhc2VzIHdlCisJCSAqIGFsd2F5cyB0cnkgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGxlbmd0aAorCQkgKiBzZW50IGJ5IHRoZSBob3N0IHNpZGUgcHJvdmlkZWQgaXQgaXMgYXQgbGVhc3QgYXMgbGFyZ2UKKwkJICogYXMgdGhlIGNvcnJlY3QgY29tbWFuZCBsZW5ndGguCisJCSAqIEV4YW1wbGVzIG9mIHN1Y2ggY2FzZXMgd291bGQgYmUgTVMtV2luZG93cywgd2hpY2ggaXNzdWVzCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMiB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiwgYW5kIHhib3gzNjAgaXNzdWluZyBJTlFVSVJZLCBURVNUIFVOSVQgUkVBRFkgYW5kCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMCB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKGNtbmRfc2l6ZSA8PSBmc2ctPmNtbmRfc2l6ZSkgeworCQkJREJHKGZzZywgIiVzIGlzIGJ1Z2d5ISBFeHBlY3RlZCBsZW5ndGggJWQgIgorCQkJCQkiYnV0IHdlIGdvdCAlZFxuIiwgbmFtZSwKKwkJCQkJY21uZF9zaXplLCBmc2ctPmNtbmRfc2l6ZSk7CiAJCQljbW5kX3NpemUgPSBmc2ctPmNtbmRfc2l6ZTsKLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlmc2ctPnBoYXNlX2Vycm9yID0gMTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU4YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpAQCAtMCwwICsxLDI3NjAgQEAKKy8qCisgKiBkcml2ZXIvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWUgWGlhb2JvIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKiAJQmFzZWQgb24gYmFyZWJvYXJkIGNvZGUgZnJvbSBTaGxvbWkgR3JpZGlzaC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEZyZWVzY2xlIFFFL0NQTSBVU0IgUGhlcmlwaGVyYWwgQ29udHJvbGxlciBEcml2ZXIKKyAqIFRoZSBjb250cm9sbGVyIGNhbiBiZSBmb3VuZCBvbiBNUEM4MzYwLCBNUEM4MjcyLCBhbmQgZXRjLgorICogTVBDODM2MCBSZXYgMS4xIG1heSBuZWVkIFFFIG1pcmNvY29kZSB1cGRhdGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjdW5kZWYgVVNCX1RSQUNFCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxhc20vcWUuaD4KKyNpbmNsdWRlIDxhc20vY3BtLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlICJmc2xfcWVfdWRjLmgiCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICJGcmVlc2NhbGUgUUUvQ1BNIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAiWGllIFhpYW9CbyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gICIxLjAiCisKKyNkZWZpbmUgRE1BX0FERFJfSU5WQUxJRCAgICAgICAgKH4oZG1hX2FkZHJfdCkwKQorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImZzbF9xZV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9IERSSVZFUl9ERVNDOworCisvKmVwIG5hbWUgaXMgaW1wb3J0YW50IGluIGdhZGdldCwgaXQgc2hvdWxkIG9iZXkgdGhlIGNvbnZlbnRpb24gb2YgZXBfbWF0Y2goKSovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZXBfbmFtZVtdID0geworCSJlcDAtY29udHJvbCIsIC8qIGV2ZXJ5b25lIGhhcyBlcDAgKi8KKwkvKiAzIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KKwkiZXAxIiwKKwkiZXAyIiwKKwkiZXAzIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgcWVfZXAwX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JMCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplID0JVVNCX01BWF9DVFJMX1BBWUxPQUQsCit9OworCisvKiBpdCBpcyBpbml0aWFsaXplZCBpbiBwcm9iZSgpICAqLworc3RhdGljIHN0cnVjdCBxZV91ZGMgKnVkY19jb250cm9sbGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBTdGFydAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkb25lKCkgLSByZXRpcmUgYSByZXF1ZXN0OyBjYWxsZXIgYmxvY2tlZCBpcnFzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJdW5zaWduZWQgY2hhciBzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwkvKiB0aGUgcmVxLT5xdWV1ZSBwb2ludGVyIGlzIHVzZWQgYnkgZXBfcXVldWUoKSBmdW5jLCBpbiB3aGljaAorCSAqIHRoZSByZXF1ZXN0IHdpbGwgYmUgYWRkZWQgaW50byBhIHVkY19lcC0+cXVldWUgJ2QgdGFpbAorCSAqIHNvIGhlcmUgdGhlIHJlcSB3aWxsIGJlIGRyb3BwZWQgZnJvbSB0aGUgZXAtPnF1ZXVlCisJICovCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwkvKiByZXEuc3RhdHVzIHNob3VsZCBiZSBzZXQgYXMgLUVJTlBST0dSRVNTIGluIGVwX3F1ZXVlKCkgKi8KKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHJlcS0+bWFwcGVkKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXBfaXNfaW4oZXApCisJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfSBlbHNlCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCWVwX2lzX2luKGVwKQorCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChzdGF0dXMgJiYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSkKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisKKwkvKiB0aGlzIGNvbXBsZXRlKCkgc2hvdWxkIGEgZnVuYyBpbXBsZW1lbnRlZCBieSBnYWRnZXQgbGF5ZXIsCisJICogZWcgZnNnLT5idWxrX2luX2NvbXBsZXRlKCkgKi8KKwlpZiAocmVxLT5yZXEuY29tcGxldGUpCisJCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CisKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG51a2UoKTogZGVsZXRlIGFsbCByZXF1ZXN0cyByZWxhdGVkIHRvIHRoaXMgZXAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgc3RhdHVzKQoreworCS8qIFdoZXRoZXIgdGhpcyBlcSBoYXMgcmVxdWVzdCBsaW5rZWQgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IHFlX3JlcSAqcmVxID0gTlVMTDsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHFlX3JlcSwgcXVldWUpOworCisJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVVNCIGFuZCBFbmRwb2ludCBtYW5pcHVsYXRlIHByb2Nlc3MsIGluY2x1ZGUgcGFyYW1ldGVyIGFuZCByZWdpc3RlciAgICAgICAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBAdmFsdWU6IDEtLXNldCBzdGFsbCAwLS1jbGVhbiBzdGFsbCAqLworc3RhdGljIGludCBxZV9lcHJ4X3N0YWxsX2NoYW5nZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgdmFsdWUpCit7CisJdTE2IHRlbV91c2VwOworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwl0ZW1fdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSk7CisJdGVtX3VzZXAgPSB0ZW1fdXNlcCAmIH5VU0JfUkhTX01BU0s7CisJaWYgKHZhbHVlID09IDEpCisJCXRlbV91c2VwIHw9IFVTQl9SSFNfU1RBTEw7CisJZWxzZSBpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKQorCQl0ZW1fdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLCB0ZW1fdXNlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXB0eF9zdGFsbF9jaGFuZ2Uoc3RydWN0IHFlX2VwICplcCwgaW50IHZhbHVlKQoreworCXUxNiB0ZW1fdXNlcDsKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJdGVtX3VzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0pOworCXRlbV91c2VwID0gdGVtX3VzZXAgJiB+VVNCX1RIU19NQVNLOworCWlmICh2YWx1ZSA9PSAxKQorCQl0ZW1fdXNlcCB8PSBVU0JfVEhTX1NUQUxMOworCWVsc2UgaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXRlbV91c2VwIHw9IFVTQl9USFNfSUdOT1JFX0lOOworCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSwgdGVtX3VzZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3N0YWxsKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlxZV9lcHR4X3N0YWxsX2NoYW5nZSgmdWRjLT5lcHNbMF0sIDEpOworCXFlX2Vwcnhfc3RhbGxfY2hhbmdlKCZ1ZGMtPmVwc1swXSwgMSk7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25hY2soc3RydWN0IHFlX2VwICplcCkKK3sKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9JRExFKSB7CisJCS8qIFNldCB0aGUgZXAncyBuYWNrICovCisJCWNscnNldGJpdHNfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLAorCQkJCVVTQl9SSFNfTUFTSywgVVNCX1JIU19OQUNLKTsKKworCQkvKiBNYXNrIFJ4IGFuZCBCdXN5IGludGVycnVwdHMgKi8KKwkJY2xyYml0czE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsCisJCQkJKFVTQl9FX1JYQl9NQVNLIHwgVVNCX0VfQlNZX01BU0spKTsKKworCQllcC0+c3RhdGUgPSBFUF9TVEFURV9OQUNLOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25vcm1hbChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZXAtPnN0YXRlID09IEVQX1NUQVRFX05BQ0spIHsKKwkJY2xyc2V0Yml0c19iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcC0+ZXBudW1dLAorCQkJCVVTQl9SVEhTX01BU0ssIFVTQl9USFNfSUdOT1JFX0lOKTsKKworCQkvKiBVbm1hc2sgUlggaW50ZXJydXB0cyAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyLAorCQkJCVVTQl9FX0JTWV9NQVNLIHwgVVNCX0VfUlhCX01BU0spOworCQlzZXRiaXRzMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JtciwKKwkJCQkoVVNCX0VfUlhCX01BU0sgfCBVU0JfRV9CU1lfTUFTSykpOworCisJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CisJCWVwLT5oYXNfZGF0YSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfY21kX3N0b3B0eChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChlcC0+dWRjLT5zb2NfdHlwZSA9PSBQT1JUX0NQTSkKKwkJY3BtX2NvbW1hbmQoQ1BNX1VTQl9TVE9QX1RYIHwgKGVwLT5lcG51bSA8PCBDUE1fVVNCX0VQX1NISUZUKSwKKwkJCQlDUE1fVVNCX1NUT1BfVFhfT1BDT0RFKTsKKwllbHNlCisJCXFlX2lzc3VlX2NtZChRRV9VU0JfU1RPUF9UWCwgUUVfQ1JfU1VCQkxPQ0tfVVNCLAorCQkJCWVwLT5lcG51bSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9jbWRfcmVzdGFydHR4KHN0cnVjdCBxZV9lcCAqZXApCit7CisJaWYgKGVwLT51ZGMtPnNvY190eXBlID09IFBPUlRfQ1BNKQorCQljcG1fY29tbWFuZChDUE1fVVNCX1JFU1RBUlRfVFggfCAoZXAtPmVwbnVtIDw8CisJCQkJQ1BNX1VTQl9FUF9TSElGVCksIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUpOworCWVsc2UKKwkJcWVfaXNzdWVfY21kKFFFX1VTQl9SRVNUQVJUX1RYLCBRRV9DUl9TVUJCTE9DS19VU0IsCisJCQkJZXAtPmVwbnVtLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2ZsdXNodHhmaWZvKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlpbnQgaTsKKworCWkgPSAoaW50KWVwLT5lcG51bTsKKworCXFlX2VwX2NtZF9zdG9wdHgoZXApOworCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNjb20sCisJCVVTQl9DTURfRkxVU0hfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCW91dF9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2ldLT50YnB0ciwgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJhc2UpKTsKKwlvdXRfYmUzMigmdWRjLT5lcF9wYXJhbVtpXS0+dHN0YXRlLCAwKTsKKwlvdXRfYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJjbnQsIDApOworCisJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJZXAtPm5fdHhiZCA9IGVwLT50eGJhc2U7CisJcWVfZXBfY21kX3Jlc3RhcnR0eChlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfZmlsbHR4ZmlmbyhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzY29tLAorCQkJVVNCX0NNRF9TVFJfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwYmRzX3Jlc2V0KHN0cnVjdCBxZV91ZGMgKnVkYywgaW50IHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdTMyIGJkcmluZ19sZW47CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpOworCisJZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTl9SWDsKKwllbHNlCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTjsKKworCWJkID0gZXAtPnJ4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgKGJkcmluZ19sZW4gLSAxKTsgaSsrKSB7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBSX0UgfCBSX0kpOworCQliZCsrOworCX0KKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgUl9FIHwgUl9JIHwgUl9XKTsKKworCWJkID0gZXAtPnR4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX0JEUklOR19MRU5fVFggLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgMCk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBUX1cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcmVzZXQoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1MTYgdG1wdXNlcDsKKworCWVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwl0bXB1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dKTsKKwl0bXB1c2VwICY9IH5VU0JfUlRIU19NQVNLOworCisJc3dpdGNoIChlcC0+ZGlyKSB7CisJY2FzZSBVU0JfRElSX0JPVEg6CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX09VVDoKKwkJdG1wdXNlcCB8PSBVU0JfVEhTX0lHTk9SRV9JTjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX0lOOgorCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCXRtcHVzZXAgfD0gVVNCX1JIU19JR05PUkVfT1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVfbnVtXSwgdG1wdXNlcCk7CisKKwlxZV9lcGJkc19yZXNldCh1ZGMsIHBpcGVfbnVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3RvZ2dsZWRhdGEwMShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWVwLT5kYXRhMDEgXj0gMHgxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2JkX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXVuc2lnbmVkIGxvbmcgdG1wX2FkZHIgPSAwOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCWludCBpOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgYmRyaW5nX2xlbjsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU5fUlg7CisJZWxzZQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU47CisKKwllcHBhcmFtID0gdWRjLT5lcF9wYXJhbVtwaXBlX251bV07CisJLyogYWxsb2MgbXVsdGktcmFtIGZvciBCRCByaW5ncyBhbmQgc2V0IHRoZSBlcCBwYXJhbWV0ZXJzICovCisJdG1wX2FkZHIgPSBjcG1fbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZV9iZCkgKiAoYmRyaW5nX2xlbiArCisJCQkJVVNCX0JEUklOR19MRU5fVFgpLCBRRV9BTElHTk1FTlRfT0ZfQkQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5yYmFzZSwgKHUxNil0bXBfYWRkcik7CisJb3V0X2JlMTYoJmVwcGFyYW0tPnRiYXNlLCAodTE2KSh0bXBfYWRkciArCisJCQkJKHNpemVvZihzdHJ1Y3QgcWVfYmQpICogYmRyaW5nX2xlbikpKTsKKworCW91dF9iZTE2KCZlcHBhcmFtLT5yYnB0ciwgaW5fYmUxNigmZXBwYXJhbS0+cmJhc2UpKTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+dGJwdHIsIGluX2JlMTYoJmVwcGFyYW0tPnRiYXNlKSk7CisKKwllcC0+cnhiYXNlID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCWVwLT50eGJhc2UgPSBjcG1fbXVyYW1fYWRkcih0bXBfYWRkciArIChzaXplb2Yoc3RydWN0IHFlX2JkKQorCQkJCSogYmRyaW5nX2xlbikpOworCWVwLT5uX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5lX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5kYXRhMDEgPSAwOyAvKiBkYXRhMCAqLworCisJLyogSW5pdCBUWCBhbmQgUlggYmRzICovCisJYmQgPSBlcC0+cnhiYXNlOworCWZvciAoaSA9IDA7IGkgPCBiZHJpbmdfbGVuIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFJfVyk7CisKKwliZCA9IGVwLT50eGJhc2U7CisJZm9yIChpID0gMDsgaSA8IFVTQl9CRFJJTkdfTEVOX1RYIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFRfVyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yeGJkX3VwZGF0ZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXVuc2lnbmVkIGludCBzaXplOworCWludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXVuc2lnbmVkIGludCBiZHJpbmdfbGVuOworCisJaWYgKGVwLT5yeGJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZCA9IGVwLT5yeGJhc2U7CisKKwllcC0+cnhmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKCplcC0+cnhmcmFtZSksIEdGUF9BVE9NSUMpOworCWlmIChlcC0+cnhmcmFtZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcWVfZnJhbWVfaW5pdChlcC0+cnhmcmFtZSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOX1JYOworCWVsc2UKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOOworCisJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKiAoYmRyaW5nX2xlbiArIDEpOworCWVwLT5yeGJ1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKGVwLT5yeGJ1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4YnVmZmVyIGZhaWxlZCxzaXplPSVkXG4iLAorCQkJCXNpemUpOworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVwLT5yeGJ1Zl9kID0gdmlydF90b19waHlzKCh2b2lkICopZXAtPnJ4YnVmZmVyKTsKKwlpZiAoZXAtPnJ4YnVmX2QgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQllcC0+cnhidWZfZCA9IGRtYV9tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmZmVyLAorCQkJCQlzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWVwLT5yeGJ1Zm1hcCA9IDA7CisJfQorCisJc2l6ZSA9IGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyOworCXRtcCA9IGVwLT5yeGJ1Zl9kOworCXRtcCA9ICh1MzIpKCgodG1wID4+IDIpIDw8IDIpICsgNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmRyaW5nX2xlbiAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgdG1wKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kpKTsKKwkJdG1wID0gdG1wICsgc2l6ZTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoJmJkLT5idWYsIHRtcCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kgfCBSX1cpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3JlZ2lzdGVyX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCXUxNiB1c2VwLCBsb2dlcG51bTsKKwl1MTYgdG1wOworCXU4IHJ0ZmNyID0gMDsKKworCWVwcGFyYW0gPSB1ZGMtPmVwX3BhcmFtW3BpcGVfbnVtXTsKKworCXVzZXAgPSAwOworCWxvZ2VwbnVtID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl1c2VwIHw9IChsb2dlcG51bSA8PCBVU0JfRVBOVU1fU0hJRlQpOworCisJc3dpdGNoIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfQlVMSzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl1c2VwIHw9ICBVU0JfVFJBTlNfSVNPOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1c2VwIHw9IFVTQl9UUkFOU19DVFI7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZXAtPmRpcikgeworCWNhc2UgVVNCX0RJUl9PVVQ6CisJCXVzZXAgfD0gVVNCX1RIU19JR05PUkVfSU47CisJCWJyZWFrOworCWNhc2UgVVNCX0RJUl9JTjoKKwkJdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dLCB1c2VwKTsKKworCXJ0ZmNyID0gMHgzMDsKKwlvdXRfOCgmZXBwYXJhbS0+cmJtciwgcnRmY3IpOworCW91dF84KCZlcHBhcmFtLT50Ym1yLCBydGZjcik7CisKKwl0bXAgPSAodTE2KShlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFKTsKKwkvKiBNUkJMUiBtdXN0IGJlIGRpdmlzYmxlIGJ5IDQgKi8KKwl0bXAgPSAodTE2KSgoKHRtcCA+PiAyKSA8PCAyKSArIDQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5tcmJsciwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWwgPSAwOworCXUxNiBtYXggPSAwOworCisJbWF4ID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCisJLyogY2hlY2sgdGhlIG1heCBwYWNrYWdlIHNpemUgdmFsaWRhdGUgZm9yIHRoaXMgZW5kcG9pbnQgKi8KKwkvKiBSZWZlciB0byBVU0IyLjAgc3BlYyB0YWJsZSA5LTEzLAorCSovCisJaWYgKHBpcGVfbnVtICE9IDApIHsKKwkJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWlzbyIpCisJCQkJCXx8IHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKChtYXggPT0gMTI4KSB8fCAobWF4ID09IDI1NikgfHwgKG1heCA9PSA1MTIpKQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzd2l0Y2ggKG1heCkgeworCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCQlnb3RvIGVuX2RvbmU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pc28iKSkJLyogYnVsayBpcyBvayAqLworCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSA2NCkKKwkJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChtYXggPD0gOCkKKwkJCQkJYnJlYWs7CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItYnVsayIpCisJCQkJfHwgc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSAxMDIzKQorCQkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQl8fCBzdHJzdHIoZXAtPmVwLm5hbWUsICItaW50IikpCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnb3RvIGVuX2RvbmU7CisJCX0KKwl9IC8qIGlmIGVwMCovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBpbml0aWFsaXplIGVwIHN0cnVjdHVyZSAqLworCWVwLT5lcC5tYXhwYWNrZXQgPSBtYXg7CisJZXAtPnRtID0gKHU4KShkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+aW5pdCA9IDE7CisKKwlpZiAocGlwZV9udW0gPT0gMCkgeworCQllcC0+ZGlyID0gVVNCX0RJUl9CT1RIOworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl9IGVsc2UJeworCQlzd2l0Y2ggKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spIHsKKwkJY2FzZSBVU0JfRElSX09VVDoKKwkJCWVwLT5kaXIgPSBVU0JfRElSX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9ESVJfSU46CisJCQllcC0+ZGlyID0gVVNCX0RJUl9JTjsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogaGFyZHdhcmUgc3BlY2lhbCBvcGVyYXRpb24gKi8KKwlxZV9lcF9iZF9pbml0KHVkYywgcGlwZV9udW0pOworCWlmICgoZXAtPnRtID09IFVTQlBfVE1fQ1RMKSB8fCAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkpIHsKKwkJcmV2YWwgPSBxZV9lcF9yeGJkX3VwZGF0ZShlcCk7CisJCWlmIChyZXZhbCkKKwkJCWdvdG8gZW5fZG9uZTE7CisJfQorCisJaWYgKChlcC0+dG0gPT0gVVNCUF9UTV9DVEwpIHx8IChlcC0+ZGlyID09IFVTQl9ESVJfSU4pKSB7CisJCWVwLT50eGZyYW1lID0ga21hbGxvYyhzaXplb2YoKmVwLT50eGZyYW1lKSwgR0ZQX0FUT01JQyk7CisJCWlmIChlcC0+dHhmcmFtZSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAibWFsbG9jIHR4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZW5fZG9uZTI7CisJCX0KKwkJcWVfZnJhbWVfaW5pdChlcC0+dHhmcmFtZSk7CisJfQorCisJcWVfZXBfcmVnaXN0ZXJfaW5pdCh1ZGMsIHBpcGVfbnVtKTsKKworCS8qIE5vdyBIVyB3aWxsIGJlIE5BS2luZyB0cmFuc2ZlcnMgdG8gdGhhdCBFUCwKKwkgKiB1bnRpbCBhIGJ1ZmZlciBpcyBxdWV1ZWQgdG8gaXQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK2VuX2RvbmUyOgorCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworZW5fZG9uZTE6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7Citlbl9kb25lOgorCWRldl9kYmcodWRjLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAlc1xuIiwgZXAtPmVwLm5hbWUpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2VuYWJsZSh2b2lkKQoreworCXNldGJpdHM4KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c21vZCwgVVNCX01PREVfRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2Rpc2FibGUodm9pZCkKK3sKKwljbHJiaXRzOCgmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNtb2QsIFVTQl9NT0RFX0VOKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICoJCVVTQiBhbmQgRVAgYmFzaWMgbWFuaXB1bGF0ZSBmdW5jdGlvbiBlbmQJCSAgICAgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQlVREMgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcHJvY2VzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHJlY3ljbGVfb25lX3J4YmQoc3RydWN0IHFlX2VwICplcCkKK3sKKwl1MzIgYmRzdGF0dXM7CisKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopZXAtPmVfcnhiZCk7CisJYmRzdGF0dXMgPSBSX0kgfCBSX0UgfCAoYmRzdGF0dXMgJiBSX1cpOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWVwLT5lX3J4YmQsIGJkc3RhdHVzKTsKKworCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJZXAtPmVfcnhiZCA9IGVwLT5yeGJhc2U7CisJZWxzZQorCQllcC0+ZV9yeGJkKys7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3ljbGVfcnhiZHMoc3RydWN0IHFlX2VwICplcCwgdW5zaWduZWQgY2hhciBzdG9wYXRuZXh0KQoreworCXUzMiBiZHN0YXR1czsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQsICpuZXh0YmQ7CisJdW5zaWduZWQgY2hhciBzdG9wID0gMDsKKworCW5leHRiZCA9IGVwLT5uX3J4YmQ7CisJYmQgPSBlcC0+ZV9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgIShiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSAmJiAhc3RvcCkgeworCQliZHN0YXR1cyA9IFJfRSB8IFJfSSB8IChiZHN0YXR1cyAmIFJfVyk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWlmIChzdG9wYXRuZXh0ICYmIChiZCA9PSBuZXh0YmQpKQorCQkJc3RvcCA9IDE7CisJfQorCisJZXAtPmVfcnhiZCA9IGJkOworfQorCitzdGF0aWMgdm9pZCBlcF9yZWN5Y2xlX3J4YmRzKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkID0gZXAtPm5fcnhiZDsKKwl1MzIgYmRzdGF0dXM7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJaWYgKCEoYmRzdGF0dXMgJiBSX0UpICYmICEoYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykpIHsKKwkJYmQgPSBlcC0+cnhiYXNlICsKKwkJCQkoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXBudW1dLT5yYnB0cikgLQorCQkJCSAgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcG51bV0tPnJiYXNlKSkKKwkJCQkgPj4gMyk7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWVwLT5lX3J4YmQgPSBiZDsKKwkJcmVjeWNsZV9yeGJkcyhlcCwgMCk7CisJCWVwLT5lX3J4YmQgPSBlcC0+bl9yeGJkOworCX0gZWxzZQorCQlyZWN5Y2xlX3J4YmRzKGVwLCAxKTsKKworCWlmIChpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIpICYgVVNCX0VfQlNZX01BU0spCisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIsIFVTQl9FX0JTWV9NQVNLKTsKKworCWlmIChlcC0+aGFzX2RhdGEgPD0gMCAmJiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKQorCQlxZV9lcHJ4X25vcm1hbChlcCk7CisKKwllcC0+bG9jYWxuYWNrID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmVjZWl2ZWRfaGFuZGxlKHN0cnVjdCBxZV91ZGMgKnVkYywKKwkJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApOworc3RhdGljIGludCBxZV9lcF9yeGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGVwMF9yZXFfY29tcGxldGUoc3RydWN0IHFlX3VkYyAqdWRjLCBzdHJ1Y3QgcWVfcmVxICpyZXEpOworLyogd2hlbiBCRCBQSUQgaXMgc2V0dXAsIGhhbmRsZSB0aGUgcGFja2V0ICovCitzdGF0aWMgaW50IGVwMF9zZXR1cF9oYW5kbGUoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdW5zaWduZWQgaW50IGZzaXplOworCXU4ICpjcDsKKworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCWlmICgoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9TRVRVUCkKKwkJCSYmICh1ZGMtPmVwMF9zdGF0ZSA9PSBXQUlUX0ZPUl9TRVRVUCkpIHsKKwkJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJCWlmICh1bmxpa2VseShmc2l6ZSAhPSA4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljcCA9ICh1OCAqKSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmY7CisJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCWVwLT5kYXRhMDEgPSAxOworCisJCS8qIGhhbmRsZSB0aGUgdXNiIGNvbW1hbmQgYmFzZSBvbiB0aGUgdXNiX2N0cmxyZXF1ZXN0ICovCisJCXNldHVwX3JlY2VpdmVkX2hhbmRsZSh1ZGMsICZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3J4KHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHI7CisKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4pIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgImVwMCBub3QgYSBjb250cm9sIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQlpZiAobGVuZ3RoID09IFVTQl9DUkNfU0laRSkgeworCQkJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQkJZGV2X3ZkYmcodWRjLT5kZXYsCisJCQkJCSJyZWNlaXZlIGEgWkxQIGluIHN0YXR1cyBwaGFzZVxuIik7CisJCQl9IGVsc2UgeworCQkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQkJdmFkZHIgPSAodTMyKXBoeXNfdG9fdmlydChpbl9iZTMyKCZiZC0+YnVmKSk7CisJCQkJZnJhbWVfc2V0X2RhdGEocGZyYW1lLCAodTggKil2YWRkcik7CisJCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsCisJCQkJCQkobGVuZ3RoIC0gVVNCX0NSQ19TSVpFKSk7CisJCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX09LKTsKKwkJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCQljYXNlIFJfUElEX1NFVFVQOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9TRVRVUCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKGJkc3RhdHVzICYgUl9QSUQpID09IFJfUElEX1NFVFVQKQorCQkJCQllcDBfc2V0dXBfaGFuZGxlKHVkYyk7CisJCQkJZWxzZQorCQkJCQlxZV9lcF9yeGZyYW1lX2hhbmRsZShlcCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiVGhlIHJlY2VpdmUgZnJhbWUgd2l0aCBlcnJvciFcbiIpOworCQl9CisKKwkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQlyZWN5Y2xlX29uZV9yeGJkKGVwKTsKKworCQkvKiBHZXQgbmV4dCBCRCAqLworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3J4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdTggZnJhbWVwaWQgPSAwOworCXVuc2lnbmVkIGludCBmc2l6ZTsKKwl1OCAqY3A7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9EQVRBMSkKKwkJZnJhbWVwaWQgPSAweDE7CisKKwlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgInRoZSBkYXRhMDEgZXJyb3IhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJ0aGUgJXMgaGF2ZSBubyByZXF1ZXVlIVxuIiwgZXAtPm5hbWUpOworCX0gZWxzZSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBxZV9yZXEsIHF1ZXVlKTsKKworCQljcCA9ICh1OCAqKShyZXEtPnJlcS5idWYpICsgcmVxLT5yZXEuYWN0dWFsOworCQlpZiAoY3ApIHsKKwkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQlyZXEtPnJlcS5hY3R1YWwgKz0gZnNpemU7CisJCQlpZiAoKGZzaXplIDwgZXAtPmVwLm1heHBhY2tldCkgfHwKKwkJCQkJKHJlcS0+cmVxLmFjdHVhbCA+PSByZXEtPnJlcS5sZW5ndGgpKSB7CisJCQkJaWYgKGVwLT5lcG51bSA9PSAwKQorCQkJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIHJlcSk7CisJCQkJZWxzZQorCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5lcG51bSAhPSAwKQorCQkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJfQorCQl9CisJfQorCisJcWVfZXBfdG9nZ2xlZGF0YTAxKGVwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcF9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSAoc3RydWN0IHFlX3VkYyAqKWRhdGE7CisJc3RydWN0IHFlX2VwICplcDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHIsIGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAxOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKworCQlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOIHx8IGVwLT5lbmFibGVfdGFza2xldCA9PSAwKSB7CisJCQlkZXZfZGJnKHVkYy0+ZGV2LAorCQkJCSJUaGlzIGlzIGEgdHJhbnNtaXQgZXAgb3IgZGlzYWJsZSB0YXNrbGV0IVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCQliZCA9IGVwLT5uX3J4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwkJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmIGxlbmd0aCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJCWRldl9kYmcodWRjLT5kZXYsCisJCQkJCSJUaGUgcnhlcCBoYXZlIG5vcmVxICVkXG4iLAorCQkJCQllcC0+aGFzX2RhdGEpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKGJkc3RhdHVzICYgUl9GKSAmJiAoYmRzdGF0dXMgJiBSX0wpCisJCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQkJcWVfZnJhbWVfY2xlYW4ocGZyYW1lKTsKKwkJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCQlmcmFtZV9zZXRfZGF0YShwZnJhbWUsICh1OCAqKXZhZGRyKTsKKwkJCQlmcmFtZV9zZXRfbGVuZ3RoKHBmcmFtZSwKKwkJCQkJCShsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfT0spOworCQkJCXN3aXRjaCAoYmRzdGF0dXMgJiBSX1BJRCkgeworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSX1BJRF9TRVRVUDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfU0VUVVApOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBoYW5kbGUgdGhlIHJ4IGZyYW1lICovCisJCQkJcWVfZXBfcnhmcmFtZV9oYW5kbGUoZXApOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKHVkYy0+ZGV2LAorCQkJCQkiZXJyb3IgaW4gcmVjZWl2ZWQgZnJhbWVcbiIpOworCQkJfQorCQkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQkJLypjbGVhciB0aGUgbGVuZ3RoICovCisJCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMgJiBCRF9TVEFUVVNfTUFTSyk7CisJCQllcC0+aGFzX2RhdGEtLTsKKwkJCWlmICghKGVwLT5sb2NhbG5hY2spKQorCQkJCXJlY3ljbGVfb25lX3J4YmQoZXApOworCisJCQkvKiBHZXQgbmV4dCBCRCAqLworCQkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJCWVsc2UKKwkJCQliZCsrOworCisJCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKwkJfQorCisJCWVwLT5uX3J4YmQgPSBiZDsKKworCQlpZiAoZXAtPmxvY2FsbmFjaykKKwkJCWVwX3JlY3ljbGVfcnhiZHMoZXApOworCisJCWVwLT5lbmFibGVfdGFza2xldCA9IDA7CisJfSAvKiBmb3IgaT0xICovCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBxZV9lcF9yeChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHN3b2ZmcywgdWNvZmZzLCBlbXB0eWJkczsKKworCXVkYyA9IGVwLT51ZGM7CisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKSB7CisJCWRldl9lcnIodWRjLT5kZXYsICJ0cmFuc21pdCBlcCBpbiByeCBmdW5jdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJkID0gZXAtPm5fcnhiZDsKKworCXN3b2ZmcyA9ICh1MTYpKGJkIC0gZXAtPnJ4YmFzZSk7CisJdWNvZmZzID0gKHUxNikoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJwdHIpIC0KKwkJCWluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJhc2UpKSA+PiAzKTsKKwlpZiAoc3dvZmZzIDwgdWNvZmZzKQorCQllbXB0eWJkcyA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gdWNvZmZzICsgc3dvZmZzOworCWVsc2UKKwkJZW1wdHliZHMgPSBzd29mZnMgLSB1Y29mZnM7CisKKwlpZiAoZW1wdHliZHMgPCBNSU5fRU1QVFlfQkRTKSB7CisJCXFlX2VwcnhfbmFjayhlcCk7CisJCWVwLT5sb2NhbG5hY2sgPSAxOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIiVkIGVtcHR5IGJkcywgc2VuZCBOQUNLXG4iLCBlbXB0eWJkcyk7CisJfQorCWVwLT5oYXNfZGF0YSA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gZW1wdHliZHM7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlxZV9lcHJ4X25hY2soZXApOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlRoZSByeGVwIGhhdmUgbm8gcmVxIHF1ZXVlZCB3aXRoICVkIEJEc1xuIiwKKwkJCQllcC0+aGFzX2RhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZ1ZGMtPnJ4X3Rhc2tsZXQpOworCWVwLT5lbmFibGVfdGFza2xldCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBkYXRhIGZyb20gYSBmcmFtZSwgbm8gbWF0dGVyIHdoYXQgdHhfcmVxICovCitzdGF0aWMgaW50IHFlX2VwX3R4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHNhdmV1c2JtcjsKKwl1MzIgYmRzdGF0dXMsIHBpZG1hc2s7CisJdTMyIHBhZGRyOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgInJlY2VpdmUgZXAgcGFzc2VkIHRvIHR4IGZ1bmN0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGlzYWJsZSB0aGUgVHggaW50ZXJydXB0ICovCisJc2F2ZXVzYm1yID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yKTsKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLAorCQkJc2F2ZXVzYm1yICYgfihVU0JfRV9UWEJfTUFTSyB8IFVTQl9FX1RYRV9NQVNLKSk7CisKKwliZCA9IGVwLT5uX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKworCWlmICghKGJkc3RhdHVzICYgKFRfUiB8IEJEX0xFTkdUSF9NQVNLKSkpIHsKKwkJaWYgKGZyYW1lX2dldF9sZW5ndGgoZnJhbWUpID09IDApIHsKKwkJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCB1ZGMtPm51bGxidWYpOworCQkJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJCQlmcmFtZS0+aW5mbyB8PSAoWkxQIHwgTk9fQ1JDKTsKKwkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGZyYW1lIHNpemUgPSAwXG4iKTsKKwkJfQorCQlwYWRkciA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWZyYW1lLT5kYXRhKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIHBhZGRyKTsKKwkJYmRzdGF0dXMgPSAoYmRzdGF0dXMmVF9XKTsKKwkJaWYgKCEoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgTk9fQ1JDKSkKKwkJCWJkc3RhdHVzIHw9IFRfUiB8IFRfSSB8IFRfTCB8IFRfVEMKKwkJCQkJfCBmcmFtZV9nZXRfbGVuZ3RoKGZyYW1lKTsKKwkJZWxzZQorCQkJYmRzdGF0dXMgfD0gVF9SIHwgVF9JIHwgVF9MIHwgZnJhbWVfZ2V0X2xlbmd0aChmcmFtZSk7CisKKwkJLyogaWYgdGhlIHBhY2tldCBpcyBhIFpMUCBpbiBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKChlcC0+ZXBudW0gPT0gMCkgJiYgKHVkYy0+ZXAwX3N0YXRlID09IERBVEFfU1RBVEVfTkVFRF9aTFApKQorCQkJZXAtPmRhdGEwMSA9IDB4MTsKKworCQlpZiAoZXAtPmRhdGEwMSkgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEExOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEExOworCQl9IGVsc2UgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEEwOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEEwOworCQl9CisJCWJkc3RhdHVzIHw9IFRfQ05GOworCQliZHN0YXR1cyB8PSBwaWRtYXNrOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMpOworCQlxZV9lcF9maWxsdHhmaWZvKGVwKTsKKworCQkvKiBlbmFibGUgdGhlIFRYIGludGVycnVwdCAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLCBzYXZldXNibXIpOworCisJCXFlX2VwX3RvZ2dsZWRhdGEwMShlcCk7CisJCWlmIChiZHN0YXR1cyAmIFRfVykKKwkJCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCQllbHNlCisJCQllcC0+bl90eGJkKys7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtciwgc2F2ZXVzYm1yKTsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJUaGUgdHggYmQgaXMgbm90IHJlYWR5IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorfQorCisvKiB3aGVuIGEgYmQgd2FzIHRyYW5zbWl0dGVkLCB0aGUgZnVuY3Rpb24gY2FuCisgKiBoYW5kbGUgdGhlIHR4X3JlcSwgbm90IGluY2x1ZGUgZXAwICAgICAgICAgICAqLworc3RhdGljIGludCB0eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlpZiAoZXAtPnR4X3JlcSAhPSBOVUxMKSB7CisJCWlmICghcmVzdGFydCkgeworCQkJaW50IGFzZW50ID0gZXAtPmxhc3Q7CisJCQllcC0+c2VudCArPSBhc2VudDsKKwkJCWVwLT5sYXN0IC09IGFzZW50OworCQl9IGVsc2UgeworCQkJZXAtPmxhc3QgPSAwOworCQl9CisKKwkJLyogYSByZXF1ZXN0IGFscmVhZHkgd2VyZSB0cmFuc21pdHRlZCBjb21wbGV0ZWx5ICovCisJCWlmICgoZXAtPnR4X3JlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSA8PSAwKSB7CisJCQllcC0+dHhfcmVxLT5yZXEuYWN0dWFsID0gKHVuc2lnbmVkIGludCllcC0+c2VudDsKKwkJCWRvbmUoZXAsIGVwLT50eF9yZXEsIDApOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9CisKKwkvKiB3ZSBzaG91bGQgZ2FpbiBhIG5ldyB0eF9yZXEgZm90IHRoaXMgZW5kcG9pbnQgKi8KKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJZXAtPnR4X3JlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCXN0cnVjdCBxZV9yZXEsCisJCQkJCQkJcXVldWUpOworCQkJZXAtPmxhc3QgPSAwOworCQkJZXAtPnNlbnQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGdpdmUgYSBmcmFtZSBhbmQgYSB0eF9yZXEsIHNlbmQgc29tZSBkYXRhICovCitzdGF0aWMgaW50IHFlX3VzYl9zZW5kZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXU4ICpidWY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJc2l6ZSA9IG1pbl90KHUzMiwgKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCksCisJCQkJZXAtPmVwLm1heHBhY2tldCk7CisJYnVmID0gKHU4ICopZXAtPnR4X3JlcS0+cmVxLmJ1ZiArIGVwLT5zZW50OworCWlmIChidWYgJiYgc2l6ZSkgeworCQllcC0+bGFzdCA9IHNpemU7CisJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCBidWYpOworCQlmcmFtZV9zZXRfbGVuZ3RoKGZyYW1lLCBzaXplKTsKKwkJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCQlmcmFtZV9zZXRfaW5mbyhmcmFtZSwgMCk7CisJCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworLyogZ2l2ZSBhIGZyYW1lIHN0cnVjdCxzZW5kIGEgWkxQICovCitzdGF0aWMgaW50IHNlbmRudWxsZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lLCB1aW50IGluZm9yKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJZnJhbWVfc2V0X2RhdGEoZnJhbWUsICh1OCAqKXVkYy0+bnVsbGJ1Zik7CisJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCWZyYW1lX3NldF9pbmZvKGZyYW1lLCAoWkxQIHwgTk9fQ1JDIHwgaW5mb3IpKTsKKworCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IGZyYW1lX2NyZWF0ZV90eChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGVwLT50eF9yZXE7CisJaW50IHJldmFsOworCisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpID4gMCkKKwkJcmV2YWwgPSBxZV91c2Jfc2VuZGRhdGEoZXAsIGZyYW1lKTsKKwllbHNlCisJCXJldmFsID0gc2VuZG51bGxkYXRhKGVwLCBmcmFtZSwgMCk7CisKKwlyZXR1cm4gcmV2YWw7Cit9CisKKy8qIGlmIGRpcmVjdGlvbiBpcyBESVJfSU4sIHRoZSBzdGF0dXMgaXMgRGV2aWNlLT5Ib3N0CisgKiBpZiBkaXJlY3Rpb24gaXMgRElSX09VVCwgdGhlIHN0YXR1cyB0cmFuc2FjdGlvbiBpcyBEZXZpY2U8LUhvc3QKKyAqIGluIHN0YXR1cyBwaGFzZSwgdWRjIGNyZWF0ZSBhIHJlcXVlc3QgYW5kIGdhaW4gc3RhdHVzICovCitzdGF0aWMgaW50IGVwMF9wcmltZV9zdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgZGlyZWN0aW9uKQoreworCisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKworCWlmIChkaXJlY3Rpb24gPT0gVVNCX0RJUl9JTikgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCXNlbmRudWxsZGF0YShlcCwgZXAtPnR4ZnJhbWUsIFNFVFVQX1NUQVRVUyB8IE5PX1JFUSk7CisJfSBlbHNlIHsKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfT1VUX1NUQVRVUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogYSByZXF1ZXN0IGNvbXBsZXRlIGluIGVwMCwgd2hldGhlciBnYWRnZXQgcmVxdWVzdCBvciB1ZGMgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgZXAwX3JlcV9jb21wbGV0ZShzdHJ1Y3QgcWVfdWRjICp1ZGMsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCS8qIGJlY2F1c2UgdXNiIGFuZCBlcCdzIHN0YXR1cyBhbHJlYWR5IGJlZW4gc2V0IGluIGNoOXNldGFkZHJlc3MoKSAqLworCisJc3dpdGNoICh1ZGMtPmVwMF9zdGF0ZSkgeworCWNhc2UgREFUQV9TVEFURV9YTUlUOgorCQlkb25lKGVwLCByZXEsIDApOworCQkvKiByZWNlaXZlIHN0YXR1cyBwaGFzZSAqLworCQlpZiAoZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfT1VUKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgREFUQV9TVEFURV9ORUVEX1pMUDoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIERBVEFfU1RBVEVfUkVDVjoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJLyogc2VuZCBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgV0FJVF9GT1JfT1VUX1NUQVRVUzoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIFdBSVRfRk9SX1NFVFVQOgorCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGVwMF90eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXEgPSBOVUxMOworCXN0cnVjdCBxZV9mcmFtZSAqZnJhbWUgPSBlcC0+dHhmcmFtZTsKKworCWlmICgoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgKFpMUCB8IE5PX1JFUSkpID09IChaTFAgfCBOT19SRVEpKSB7CisJCWlmICghcmVzdGFydCkKKwkJCWVwLT51ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQllbHNlCisJCQlzZW5kbnVsbGRhdGEoZXAsIGVwLT50eGZyYW1lLCBTRVRVUF9TVEFUVVMgfCBOT19SRVEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0eF9yZXEgPSBlcC0+dHhfcmVxOworCWlmICh0eF9yZXEgIT0gTlVMTCkgeworCQlpZiAoIXJlc3RhcnQpIHsKKwkJCWludCBhc2VudCA9IGVwLT5sYXN0OworCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CisJCQllcC0+bGFzdCAtPSBhc2VudDsKKwkJfSBlbHNlIHsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJfQorCisJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLworCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgeworCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIGVwLT50eF9yZXEpOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJ0aGUgZXAwX2NvbnRyb2xsZXIgaGF2ZSBubyByZXFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwMF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCS8qIGlmIGhhdmUgZXJyb3IsIHRyYW5zbWl0IGFnYWluICovCisJaWYgKGZyYW1lX2dldF9zdGF0dXMoZXAtPnR4ZnJhbWUpICYgRlJBTUVfRVJST1IpIHsKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJUaGUgRVAwIHRyYW5zbWl0IGRhdGEgaGF2ZSBlcnJvciFcbiIpOworCQlpZiAoZnJhbWVfZ2V0X2luZm8oZXAtPnR4ZnJhbWUpICYgUElEX0RBVEEwKQorCQkJZXAtPmRhdGEwMSA9IDA7CisJCWVsc2UKKwkJCWVwLT5kYXRhMDEgPSAxOworCisJCWVwMF90eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJZXAwX3R4Y29tcGxldGUoZXAsIDApOworCisJZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwl1MzIgYmRzdGF0dXM7CisKKwliZCA9IGVwLT5jX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFRfUikgJiYgKGJkc3RhdHVzICYgflRfVykpIHsKKwkJcGZyYW1lID0gZXAtPnR4ZnJhbWU7CisKKwkJLyogY2xlYXIgYW5kIHJlY3ljbGUgdGhlIEJEICovCisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyAmIFRfVyk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJaWYgKGJkc3RhdHVzICYgVF9XKQorCQkJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJCWVsc2UKKwkJCWVwLT5jX3R4YmQrKzsKKworCQlpZiAoZXAtPmNfdHhiZCA9PSBlcC0+bl90eGJkKSB7CisJCQlpZiAoYmRzdGF0dXMgJiBERVZJQ0VfVF9FUlJPUikgeworCQkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQkJaWYgKGJkc3RhdHVzICYgVF9UTykKKwkJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVElNRU9VVDsKKwkJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9VTkRFUlVOOworCQkJfQorCQkJZXAwX3R4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJfQorCisJCWJkID0gZXAtPmNfdHhiZDsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChmcmFtZV9nZXRfc3RhdHVzKGVwLT50eGZyYW1lKSAmIEZSQU1FX0VSUk9SKSB7CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJZGV2X3ZkYmcoZXAtPnVkYy0+ZGV2LCAiVGhlIEVQMCB0cmFuc21pdCBkYXRhIGhhdmUgZXJyb3IhXG4iKTsKKwkJaWYgKGZyYW1lX2dldF9pbmZvKGVwLT50eGZyYW1lKSAmIFBJRF9EQVRBMCkKKwkJCWVwLT5kYXRhMDEgPSAwOworCQllbHNlCisJCQllcC0+ZGF0YTAxID0gMTsKKworCQl0eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJdHhjb21wbGV0ZShlcCwgMCk7CisKKwlmcmFtZV9jcmVhdGVfdHgoZXAsIGVwLT50eGZyYW1lKTsgLyogc2VuZCB0aGUgZGF0YSAqLworCXJldHVybiAwOworfQorCisvKiBjb25maXJtIHRoZSBhbHJlYWR5IHRyYWluc21pdGVkIGJkICovCitzdGF0aWMgaW50IHFlX2VwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZSA9IE5VTEw7CisJdTMyIGJkc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgYnJlYWtvbnJ4aW50ZXJydXB0ID0gMDsKKworCWJkID0gZXAtPmNfdHhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCXdoaWxlICghKGJkc3RhdHVzICYgVF9SKSAmJiAoYmRzdGF0dXMgJiB+VF9XKSkgeworCQlwZnJhbWUgPSBlcC0+dHhmcmFtZTsKKwkJaWYgKGJkc3RhdHVzICYgREVWSUNFX1RfRVJST1IpIHsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1RPKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1RJTUVPVVQ7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1VOREVSVU47CisJCX0KKworCQkvKiBjbGVhciBhbmQgcmVjeWNsZSB0aGUgQkQgKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzICYgVF9XKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlpZiAoYmRzdGF0dXMgJiBUX1cpCisJCQllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwkJZWxzZQorCQkJZXAtPmNfdHhiZCsrOworCisJCS8qIGhhbmRsZSB0aGUgdHggZnJhbWUgKi8KKwkJZXBfdHhmcmFtZV9oYW5kbGUoZXApOworCQliZCA9IGVwLT5jX3R4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJfQorCWlmIChicmVha29ucnhpbnRlcnJ1cHQpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIEFkZCBhIHJlcXVlc3QgaW4gcXVldWUsIGFuZCB0cnkgdG8gdHJhbnNtaXQgYSBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3NlbmQoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCWludCByZXZhbCA9IDA7CisKKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWVwLT5zZW50ID0gMDsKKwkJZXAtPmxhc3QgPSAwOworCQl0eGNvbXBsZXRlKGVwLCAwKTsgLyogY2FuIGdhaW4gYSBuZXcgdHhfcmVxICovCisJCXJldmFsID0gZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJfQorCXJldHVybiByZXZhbDsKK30KKworLyogTWF5YmUgdGhpcyBpcyBhIGdvb2QgaWRlYWwgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3J4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lID0gTlVMTDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTMyIGJkc3RhdHVzLCBsZW5ndGg7CisJdTMyIHZhZGRyLCBmc2l6ZTsKKwl1OCAqY3A7CisJdTggZmluaXNoX3JlcSA9IDA7CisJdTggZnJhbWVwaWQ7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlkZXZfdmRiZyh1ZGMtPmRldiwgInRoZSByZXEgYWxyZWFkeSBmaW5pc2ghXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKGZpbmlzaF9yZXEpCisJCQlicmVhazsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJCQkmJiAhKGJkc3RhdHVzICYgUl9FUlJPUikpIHsKKwkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCWZyYW1lX3NldF9kYXRhKHBmcmFtZSwgKHU4ICopdmFkZHIpOworCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsIChsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9PSyk7CisJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTEpOyBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOyBicmVhazsKKwkJCX0KKwkJCS8qIGhhbmRsZSB0aGUgcnggZnJhbWUgKi8KKworCQkJaWYgKGZyYW1lX2dldF9pbmZvKHBmcmFtZSkgJiBQSURfREFUQTEpCisJCQkJZnJhbWVwaWQgPSAweDE7CisJCQllbHNlCisJCQkJZnJhbWVwaWQgPSAwOworCisJCQlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGRhdGEwMSBlcnJvciFcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlmc2l6ZSA9IGZyYW1lX2dldF9sZW5ndGgocGZyYW1lKTsKKworCQkJCWNwID0gKHU4ICopKHJlcS0+cmVxLmJ1ZikgKyByZXEtPnJlcS5hY3R1YWw7CisJCQkJaWYgKGNwKSB7CisJCQkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQkJCXJlcS0+cmVxLmFjdHVhbCArPSBmc2l6ZTsKKwkJCQkJaWYgKChmc2l6ZSA8IGVwLT5lcC5tYXhwYWNrZXQpCisJCQkJCQl8fCAocmVxLT5yZXEuYWN0dWFsID49CisJCQkJCQkJcmVxLT5yZXEubGVuZ3RoKSkgeworCQkJCQkJZmluaXNoX3JlcSA9IDE7CisJCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJCQkJcWVfZXByeF9uYWNrKGVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlxZV9lcF90b2dnbGVkYXRhMDEoZXApOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgIlRoZSByZWNlaXZlIGZyYW1lIHdpdGggZXJyb3IhXG4iKTsKKwkJfQorCisJCS8qIG5vdGU6IGRvbid0IGNsZWFyIHRoZSByeGJkJ3MgYnVmZmVyIGFkZHJlc3MgKgorCQkgKiBvbmx5IENsZWFyIHRoZSBsZW5ndGggKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChiZHN0YXR1cyAmIEJEX1NUQVRVU19NQVNLKSk7CisJCWVwLT5oYXNfZGF0YS0tOworCisJCS8qIEdldCBuZXh0IEJEICovCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKwllcF9yZWN5Y2xlX3J4YmRzKGVwKTsKKworCXJldHVybiAwOworfQorCisvKiBvbmx5IGFkZCB0aGUgcmVxdWVzdCBpbiBxdWV1ZSAqLworc3RhdGljIGludCBlcF9yZXFfcmVjZWl2ZShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9OQUNLKSB7CisJCWlmIChlcC0+aGFzX2RhdGEgPD0gMCkgeworCQkJLyogRW5hYmxlIHJ4IGFuZCB1bm1hc2sgcnggaW50ZXJydXB0ICovCisJCQlxZV9lcHJ4X25vcm1hbChlcCk7CisJCX0gZWxzZSB7CisJCQkvKiBDb3B5IHRoZSBleGlzdCBCRCBkYXRhICovCisJCQllcF9yZXFfcngoZXAsIHJlcSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBFbmQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRW5kcG9pbnQgTWFuYWdlbWVudCBGdW5jdGlvbnMgRm9yIEdhZGdldAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgY2hhciBlcG51bTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXBfbmFtZVswXSB8fAorCQkJKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYyA9IGVwLT51ZGM7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCWVwbnVtID0gKHU4KWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweEY7CisKKwlyZXR2YWwgPSBxZV9lcF9pbml0KHVkYywgZXBudW0sIGRlc2MpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgImVuYWJsZSBlcCVkIGZhaWxlZFxuIiwgZXAtPmVwbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9kYmcodWRjLT5kZXYsICJlbmFibGUgZXAlZCBzdWNjZXNzZnVsXG4iLCBlcC0+ZXBudW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCXVkYyA9IGVwLT51ZGM7CisKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgIiVzIG5vdCBlbmFibGVkXG4iLCBfZXAgPyBlcC0+ZXAubmFtZSA6IE5VTEwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJLyogTnVrZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAoZG9lcyBmbHVzaCkgKi8KKwludWtlKGVwLCAtRVNIVVRET1dOKTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTl9SWCArIDEpOworCWVsc2UKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTiArIDEpOworCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikgeworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCWlmIChlcC0+cnhidWZtYXApIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJCWVwLT5yeGJ1Zl9kID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJfSBlbHNlIHsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KAorCQkJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQl9CisJCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJfQorCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9PVVQpCisJCWtmcmVlKGVwLT50eGZyYW1lKTsKKworCWRldl9kYmcodWRjLT5kZXYsICJkaXNhYmxlZCAlcyBPS1xuIiwgX2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqcWVfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsCWdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgcWVfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJaWYgKF9yZXEpCisJCWtmcmVlKHJlcSk7Cit9CisKKy8qIHF1ZXVlcyAoc3VibWl0cykgYW4gSS9PIHJlcXVlc3QgdG8gYW4gZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgcWVfZXBfcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsCisJCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWw7CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7CisJCWRldl9kYmcodWRjLT5kZXYsICJiYWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXBfaW5kZXgoZXApKSkgeworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiYmFkIGVwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlyZXEtPmVwID0gZXA7CisKKwkvKiBtYXAgdmlydHVhbCBhZGRyZXNzIHRvIGhhcmR3YXJlICovCisJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCXJlcS0+cmVxLmRtYSA9IGRtYV9tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQlyZXEtPnJlcS5idWYsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwKKwkJCQkJZXBfaXNfaW4oZXApCisJCQkJCT8gRE1BX1RPX0RFVklDRSA6CisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJCWVwX2lzX2luKGVwKQorCQkJCQk/IERNQV9UT19ERVZJQ0UgOgorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfQorCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisKKwlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwlkZXZfdmRiZyh1ZGMtPmRldiwgImdhZGdldCBoYXZlIHJlcXVlc3QgaW4gJXMhICVkXG4iLAorCQkJZXAtPm5hbWUsIHJlcS0+cmVxLmxlbmd0aCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCS8qIHB1c2ggdGhlIHJlcXVlc3QgdG8gZGV2aWNlICovCisJaWYgKGVwX2lzX2luKGVwKSkKKwkJcmV2YWwgPSBlcF9yZXFfc2VuZChlcCwgcmVxKTsKKworCS8qIEVQMCAqLworCWlmIChlcF9pbmRleChlcCkgPT0gMCAmJiByZXEtPnJlcS5sZW5ndGggPiAwKSB7CisJCWlmIChlcF9pc19pbihlcCkpCisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJZWxzZQorCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1JFQ1Y7CisJfQorCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXJldmFsID0gZXBfcmVxX3JlY2VpdmUoZXAsIHJlcSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBkZXF1ZXVlcyAoY2FuY2VscywgdW5saW5rcykgYW4gSS9PIHJlcXVlc3QgZnJvbSBhbiBlbmRwb2ludCAqLworc3RhdGljIGludCBxZV9lcF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbW9kaWZ5IHRoZSBlbmRwb2ludCBoYWx0IGZlYXR1cmUKKyAqIEBlcDogdGhlIG5vbi1pc29jaHJvbm91cyBlbmRwb2ludCBiZWluZyBzdGFsbGVkCisgKiBAdmFsdWU6IDEtLXNldCBoYWx0ICAwLS1jbGVhciBoYWx0CisgKiBSZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIEF0dGVtcHQgdG8gaGFsdCBJTiBlcCB3aWxsIGZhaWwgaWYgYW55IHRyYW5zZmVyIHJlcXVlc3RzCisJICogYXJlIHN0aWxsIHF1ZXVlICovCisJaWYgKHZhbHVlICYmIGVwX2lzX2luKGVwKSAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlzdGF0dXMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcWVfZXB0eF9zdGFsbF9jaGFuZ2UoZXAsIHZhbHVlKTsKKwlxZV9lcHJ4X3N0YWxsX2NoYW5nZShlcCwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl1ZGMtPmVwMF9kaXIgPSAwOworCX0KKworCS8qIHNldCBkYXRhIHRvZ2dsZSB0byBEQVRBMCBvbiBjbGVhciBoYWx0ICovCisJaWYgKHZhbHVlID09IDApCisJCWVwLT5kYXRhMDEgPSAwOworb3V0OgorCWRldl92ZGJnKHVkYy0+ZGV2LCAiJXMgJXMgaGFsdCBzdGF0ICVkXG4iLCBlcC0+ZXAubmFtZSwKKwkJCXZhbHVlID8gICJzZXQiIDogImNsZWFyIiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBxZV9lcF9vcHMgPSB7CisJLmVuYWJsZSA9IHFlX2VwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHFlX2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdCA9IHFlX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdCA9IHFlX2ZyZWVfcmVxdWVzdCwKKworCS5xdWV1ZSA9IHFlX2VwX3F1ZXVlLAorCS5kZXF1ZXVlID0gcWVfZXBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdCA9IHFlX2VwX3NldF9oYWx0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlHYWRnZXQgRHJpdmVyIExheWVyIE9wZXJhdGlvbnMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZXQgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCitzdGF0aWMgaW50IHFlX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXUxNiB0bXA7CisKKwl0bXAgPSBpbl9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3BhcmFtLT5mcmFtZV9uKTsKKwlpZiAodG1wICYgMHg4MDAwKQorCQl0bXAgPSB0bXAgJiAweDA3ZmY7CisJZWxzZQorCQl0bXAgPSAtRUlOVkFMOworCisJcmV0dXJuIChpbnQpdG1wOworfQorCisvKiBUcmllcyB0byB3YWtlIHVwIHRoZSBob3N0IGNvbm5lY3RlZCB0byB0aGlzIGdhZGdldAorICoKKyAqIFJldHVybiA6IDAtc3VjY2VzcworICogTmVnYXRpdmUtdGhpcyBmZWF0dXJlIG5vdCBlbmFibGVkIGJ5IGhvc3Qgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UgaHcKKyAqLworc3RhdGljIGludCBxZV93YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZCwgQ2FsbGVkIGJ5IHdoYXRldmVyCisgICBkZXRlY3RzIFZCVVMgc2Vzc2lvbnMgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogY29uc3RyYWluIGNvbnRyb2xsZXIncyBWQlVTIHBvd2VyIHVzYWdlCisgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBnYWRnZXQgZHJpdmVycyBkdXJpbmcgU0VUX0NPTkZJR1VSQVRJT04gY2FsbHMsCisgKiByZXBvcnRpbmcgaG93IG11Y2ggcG93ZXIgdGhlIGRldmljZSBtYXkgY29uc3VtZS4gIEZvciBleGFtcGxlLCB0aGlzCisgKiBjb3VsZCBhZmZlY3QgaG93IHF1aWNrbHkgYmF0dGVyaWVzIGFyZSByZWNoYXJnZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIENoYW5nZSBEYXRhKyBwdWxsdXAgc3RhdHVzCisgKiB0aGlzIGZ1bmMgaXMgdXNlZCBieSB1c2JfZ2FkZ2V0X2Nvbm5lY3QvZGlzY29ubmVjdAorICovCitzdGF0aWMgaW50IHFlX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogZGVmaW5lZCBpbiB1c2JfZ2FkZ2V0LmggKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcWVfZ2FkZ2V0X29wcyA9IHsKKwkuZ2V0X2ZyYW1lID0gcWVfZ2V0X2ZyYW1lLAorCS53YWtldXAgPSBxZV93YWtldXAsCisvKgkuc2V0X3NlbGZwb3dlcmVkID0gcWVfc2V0X3NlbGZwb3dlcmVkLCovIC8qIGFsd2F5cyBzZWxmcG93ZXJlZCAqLworCS52YnVzX3Nlc3Npb24gPSBxZV92YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdyA9IHFlX3ZidXNfZHJhdywKKwkucHVsbHVwID0gcWVfcHVsbHVwLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVVNCIGVwMCBTZXR1cCBwcm9jZXNzIGluIEJVUyBFbnVtZXJhdGlvbgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCBwaXBlKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV07CisKKwludWtlKGVwLCAtRUNPTk5SRVNFVCk7CisJZXAtPnR4X3JlcSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfcXVldWVzKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1OCBwaXBlOworCisJZm9yIChwaXBlID0gMDsgcGlwZSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBwaXBlKyspCisJCXVkY19yZXNldF9lcF9xdWV1ZSh1ZGMsIHBpcGUpOworCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoOXNldGFkZHJlc3Moc3RydWN0IHFlX3VkYyAqdWRjLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCXUxNiBsZW5ndGgpCit7CisJLyogU2F2ZSB0aGUgbmV3IGFkZHJlc3MgdG8gZGV2aWNlIHN0cnVjdCAqLworCXVkYy0+ZGV2aWNlX2FkZHJlc3MgPSAodTgpIHZhbHVlOworCS8qIFVwZGF0ZSB1c2Igc3RhdGUgKi8KKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BRERSRVNTOworCisJLyogU3RhdHVzIHBoYXNlICwgc2VuZCBhIFpMUCAqLworCWlmIChlcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9JTikpCisJCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCitzdGF0aWMgdm9pZCBvd25lcmNvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJcmVxLT5yZXEuYnVmID0gTlVMTDsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCBjaDlnZXRzdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCByZXF1ZXN0X3R5cGUsIHUxNiB2YWx1ZSwKKwkJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKK3sKKwl1MTYgdXNiX3N0YXR1cyA9IDA7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHN0YXR1cyA9IDA7CisKKwllcCA9ICZ1ZGMtPmVwc1swXTsKKwlpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfREVWSUNFKSB7CisJCS8qIEdldCBkZXZpY2Ugc3RhdHVzICovCisJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEOworCX0gZWxzZSBpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIEdldCBpbnRlcmZhY2Ugc3RhdHVzICovCisJCS8qIFdlIGRvbid0IGhhdmUgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGluIHVkYyBkcml2ZXIgKi8KKwkJdXNiX3N0YXR1cyA9IDA7CisJfSBlbHNlIGlmICgocmVxdWVzdF90eXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQkvKiBHZXQgZW5kcG9pbnQgc3RhdHVzICovCisJCWludCBwaXBlID0gaW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCXN0cnVjdCBxZV9lcCAqdGFyZ2V0X2VwID0gJnVkYy0+ZXBzW3BpcGVdOworCQl1MTYgdXNlcDsKKworCQkvKiBzdGFsbCBpZiBlbmRwb2ludCBkb2Vzbid0IGV4aXN0ICovCisJCWlmICghdGFyZ2V0X2VwLT5kZXNjKQorCQkJZ290byBzdGFsbDsKKworCQl1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV0pOworCQlpZiAoaW5kZXggJiBVU0JfRElSX0lOKSB7CisJCQlpZiAodGFyZ2V0X2VwLT5kaXIgIT0gVVNCX0RJUl9JTikKKwkJCQlnb3RvIHN0YWxsOworCQkJaWYgKCh1c2VwICYgVVNCX1RIU19NQVNLKSA9PSBVU0JfVEhTX1NUQUxMKQorCQkJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9FTkRQT0lOVF9IQUxUOworCQl9IGVsc2UgeworCQkJaWYgKHRhcmdldF9lcC0+ZGlyICE9IFVTQl9ESVJfT1VUKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAoKHVzZXAgJiBVU0JfUkhTX01BU0spID09IFVTQl9SSFNfU1RBTEwpCisJCQkJdXNiX3N0YXR1cyA9IDEgPDwgVVNCX0VORFBPSU5UX0hBTFQ7CisJCX0KKwl9CisKKwlyZXEgPSBjb250YWluZXJfb2YocWVfYWxsb2NfcmVxdWVzdCgmZXAtPmVwLCBHRlBfS0VSTkVMKSwKKwkJCQkJc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlyZXEtPnJlcS5sZW5ndGggPSAyOworCXJlcS0+cmVxLmJ1ZiA9IHVkYy0+c3RhdHVzYnVmOworCSoodTE2ICopcmVxLT5yZXEuYnVmID0gY3B1X3RvX2xlMTYodXNiX3N0YXR1cyk7CisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisJcmVxLT5yZXEuY29tcGxldGUgPSBvd25lcmNvbXBsZXRlOworCisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKworCS8qIGRhdGEgcGhhc2UgKi8KKwlzdGF0dXMgPSBxZV9lcF9xdWV1ZSgmZXAtPmVwLCAmcmVxLT5yZXEsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm47CitzdGFsbDoKKwlkZXZfZXJyKHVkYy0+ZGV2LCAiQ2FuJ3QgcmVzcG9uZCB0byBnZXRzdGF0dXMgcmVxdWVzdCBcbiIpOworCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCisvKiBvbmx5IGhhbmRsZSB0aGUgc2V0dXAgcmVxdWVzdCwgc3VwcG9zZSB0aGUgZGV2aWNlIGluIG5vcm1hbCBzdGF0dXMgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3JlY2VpdmVkX2hhbmRsZShzdHJ1Y3QgcWVfdWRjICp1ZGMsCisJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCit7CisJLyogRml4IEVuZGlhbiAodWRjLT5sb2NhbF9zZXR1cF9idWZmIGlzIGNwdSBFbmRpYW4gbm93KSovCisJdTE2IHdWYWx1ZSA9IGxlMTZfdG9fY3B1KHNldHVwLT53VmFsdWUpOworCXUxNiB3SW5kZXggPSBsZTE2X3RvX2NwdShzZXR1cC0+d0luZGV4KTsKKwl1MTYgd0xlbmd0aCA9IGxlMTZfdG9fY3B1KHNldHVwLT53TGVuZ3RoKTsKKworCS8qIGNsZWFyIHRoZSBwcmV2aW91cyByZXF1ZXN0IGluIHRoZSBlcDAgKi8KKwl1ZGNfcmVzZXRfZXBfcXVldWUodWRjLCAwKTsKKworCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwllbHNlCisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCisJc3dpdGNoIChzZXR1cC0+YlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJLyogRGF0YStTdGF0dXMgcGhhc2UgZm9ybSB1ZGMgKi8KKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9NQVNLKSkKKwkJCQkJIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCkpCisJCQlicmVhazsKKwkJY2g5Z2V0c3RhdHVzKHVkYywgc2V0dXAtPmJSZXF1ZXN0VHlwZSwgd1ZhbHVlLCB3SW5kZXgsCisJCQkJCXdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCS8qIFN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLworCQlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJCQlVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCQljaDlzZXRhZGRyZXNzKHVkYywgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCS8qIFJlcXVlc3RzIHdpdGggbm8gZGF0YSBwaGFzZSwgc3RhdHVzIHBoYXNlIGZyb20gdWRjICovCisJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spCisJCQkJCSE9IFVTQl9UWVBFX1NUQU5EQVJEKQorCQkJYnJlYWs7CisKKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQkJPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCQlpbnQgcGlwZSA9IHdJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJCXN0cnVjdCBxZV9lcCAqZXA7CisKKwkJCWlmICh3VmFsdWUgIT0gMCB8fCB3TGVuZ3RoICE9IDAKKwkJCQl8fCBwaXBlID4gVVNCX01BWF9FTkRQT0lOVFMpCisJCQkJYnJlYWs7CisJCQllcCA9ICZ1ZGMtPmVwc1twaXBlXTsKKworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQlxZV9lcF9zZXRfaGFsdCgmZXAtPmVwLAorCQkJCQkoc2V0dXAtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpCisJCQkJCQk/IDEgOiAwKTsKKwkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJfQorCisJCWVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKTsKKworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAod0xlbmd0aCkgeworCQkvKiBEYXRhIHBoYXNlIGZyb20gZ2FkZ2V0LCBzdGF0dXMgcGhhc2UgZnJvbSB1ZGMgKi8KKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCX0gZWxzZSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfUkVDVjsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCQl9CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQlpZiAodWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwKKwkJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZikgPCAwKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBObyBkYXRhIHBoYXNlLCBJTiBzdGF0dXMgZnJvbSBnYWRnZXQgKi8KKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCWlmICh1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LAorCQkJCQkmdWRjLT5sb2NhbF9zZXR1cF9idWZmKSA8IDApCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgSW50ZXJydXB0IGhhbmRsZXJzCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBzdXNwZW5kX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSB1ZGMtPnVzYl9zdGF0ZTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9TVVNQRU5ERUQ7CisKKwkvKiByZXBvcnQgc3VzcGVuZCB0byB0aGUgZHJpdmVyICxzZXJpYWwuYyBub3Qgc3VwcG9ydCB0aGlzKi8KKwlpZiAodWRjLT5kcml2ZXItPnN1c3BlbmQpCisJCXVkYy0+ZHJpdmVyLT5zdXNwZW5kKCZ1ZGMtPmdhZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3VtZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXVkYy0+dXNiX3N0YXRlID0gdWRjLT5yZXN1bWVfc3RhdGU7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSAwOworCisJLyogcmVwb3J0IHJlc3VtZSB0byB0aGUgZHJpdmVyICwgc2VyaWFsLmMgbm90IHN1cHBvcnQgdGhpcyovCisJaWYgKHVkYy0+ZHJpdmVyLT5yZXN1bWUpCisJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXU4IHVzYnM7CisKKwl1c2JzID0gaW5fOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYnMpOworCWlmICh1c2JzICYgVVNCX0lETEVfU1RBVFVTX01BU0spIHsKKwkJaWYgKCh1ZGMtPnVzYl9zdGF0ZSkgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJCXN1c3BlbmRfaXJxKHVkYyk7CisJfSBlbHNlIHsKKwkJaWYgKHVkYy0+dXNiX3N0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlyZXN1bWVfaXJxKHVkYyk7CisJfQorfQorCitzdGF0aWMgaW50IHJlc2V0X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdW5zaWduZWQgY2hhciBpOworCisJcWVfdXNiX2Rpc2FibGUoKTsKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYWRyLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWlmICh1ZGMtPmVwc1tpXS5pbml0KQorCQkJcWVfZXBfcmVzZXQodWRjLCBpKTsKKwl9CisKKwlyZXNldF9xdWV1ZXModWRjKTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9ERUZBVUxUOworCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJcWVfdXNiX2VuYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJzeV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR4ZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCisvKiBlcDAgdHggaW50ZXJydXB0IGFsc28gaW4gaGVyZSAqLworc3RhdGljIGludCB0eF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpLCByZXMgPSAwOworCisJaWYgKCh1ZGMtPnVzYl9zdGF0ZSA9PSBVU0JfU1RBVEVfQUREUkVTUykKKwkJJiYgKGluXzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2FkcikgPT0gMCkpCisJCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNhZHIsIHVkYy0+ZGV2aWNlX2FkZHJlc3MpOworCisJZm9yIChpID0gKFVTQl9NQVhfRU5EUE9JTlRTLTEpOyAoKGkgPj0gMCkgJiYgKHJlcyA9PSAwKSk7IGktLSkgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKwkJaWYgKGVwICYmIGVwLT5pbml0ICYmIChlcC0+ZGlyICE9IFVTQl9ESVJfT1VUKSkgeworCQkJYmQgPSBlcC0+Y190eGJkOworCQkJaWYgKCEoaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCkgJiBUX1IpCisJCQkJCQkmJiAoaW5fYmUzMigmYmQtPmJ1ZikpKSB7CisJCQkJLyogY29uZmlybSB0aGUgdHJhbnNtaXR0ZWQgYmQgKi8KKwkJCQlpZiAoZXAtPmVwbnVtID09IDApCisJCQkJCXJlcyA9IHFlX2VwMF90eGNvbmYoZXApOworCQkJCWVsc2UKKwkJCQkJcmVzID0gcWVfZXBfdHhjb25mKGVwKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisKKy8qIHNldHVwIHBhY2tlY3QncyByeCBpcyBoYW5kbGUgaW4gdGhlIGZ1bmN0aW9uIHRvbyAqLworc3RhdGljIHZvaWQgcnhfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCQlpZiAoZXAgJiYgZXAtPmluaXQgJiYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikpIHsKKwkJCWJkID0gZXAtPm5fcnhiZDsKKwkJCWlmICghKGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpICYgUl9FKQorCQkJCQkJJiYgKGluX2JlMzIoJmJkLT5idWYpKSkgeworCQkJCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQkJCQlxZV9lcDBfcngodWRjKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKm5vbi1zZXR1cCBwYWNrYWdlIHJlY2VpdmUqLworCQkJCQlxZV9lcF9yeChlcCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWVfdWRjX2lycShpbnQgaXJxLCB2b2lkICpfdWRjKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IChzdHJ1Y3QgcWVfdWRjICopX3VkYzsKKwl1MTYgaXJxX3NyYzsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJaXJxX3NyYyA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlcikgJgorCQlpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIpOworCS8qIENsZWFyIG5vdGlmaWNhdGlvbiBiaXRzICovCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlciwgaXJxX3NyYyk7CisJLyogVVNCIEludGVycnVwdCAqLworCWlmIChpcnFfc3JjICYgVVNCX0VfSURMRV9NQVNLKSB7CisJCWlkbGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX0lETEVfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEJfTUFTSykgeworCQl0eF9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfVFhCX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfUlhCX01BU0spIHsKKwkJcnhfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JYQl9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1JFU0VUX01BU0spIHsKKwkJcmVzZXRfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JFU0VUX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfQlNZX01BU0spIHsKKwkJYnN5X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9CU1lfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEVfTUFTSykgeworCQl0eGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1RYRV9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwkvKiBzdGFuZGFyZCBvcGVyYXRpb25zICovCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRyaXZlciB8fCAoZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJJiYgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJCXx8ICFkcml2ZXItPmJpbmQgfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBsb2NrIGlzIG5lZWRlZCBidXQgd2hldGhlciBzaG91bGQgdXNlIHRoaXMgbG9jayBvciBhbm90aGVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSAoZW51bSB1c2JfZGV2aWNlX3NwZWVkKShkcml2ZXItPnNwZWVkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIodWRjX2NvbnRyb2xsZXItPmRldiwgImJpbmQgdG8gJXMgLS0+ICVkIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBFbmFibGUgSVJRIHJlZyBhbmQgU2V0IHVzYmNtZCByZWcgRU4gYml0ICovCisJcWVfdXNiX2VuYWJsZSgpOworCisJb3V0X2JlMTYoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzYmVyLCAweGZmZmYpOworCW91dF9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c2JtciwgVVNCX0VfREVGQVVMVF9ERVZJQ0UpOworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwgIiVzIGJpbmQgdG8gZHJpdmVyICVzIFxuIiwKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmxvb3BfZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdWRjX2NvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RvcCB1c2IgY29udHJvbGxlciwgZGlzYWJsZSBpbnRyICovCisJcWVfdXNiX2Rpc2FibGUoKTsKKworCS8qIGluIGZhY3QsIG5vIG5lZWRlZCAqLworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKworCS8qIHN0YW5kIG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwludWtlKCZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdLCAtRVNIVVRET1dOKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvb3BfZXAsICZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QsCisJCQkJZXAuZXBfbGlzdCkKKwkJbnVrZShsb29wX2VwLCAtRVNIVVRET1dOKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KKwlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKworCWRldl9pbmZvKHVkY19jb250cm9sbGVyLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKy8qIHVkYyBzdHJ1Y3R1cmUncyBhbGxvYyBhbmQgc2V0dXAsIGluY2x1ZGUgZXAtcGFyYW0gYWxsb2MgKi8KK3N0YXRpYyBzdHJ1Y3QgcWVfdWRjIF9fZGV2aW5pdCAqcWVfdWRjX2NvbmZpZyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXVuc2lnbmVkIGludCB0bXBfYWRkciA9IDA7CisJc3RydWN0IHVzYl9kZXZpY2VfcGFyYSBfX2lvbWVtICp1c2JwcmFtOworCXVuc2lnbmVkIGludCBpOworCXU2NCBzaXplOworCXUzMiBvZmZzZXQ7CisKKwl1ZGMgPSBremFsbG9jKHNpemVvZigqdWRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJtYWxsb2MgdWRjIGZhaWxlZFxuIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl1ZGMtPmRldiA9ICZvZmRldi0+ZGV2OworCisJLyogZ2V0IGRlZmF1bHQgYWRkcmVzcyBvZiB1c2IgcGFyYW1ldGVyIGluIE1VUkFNIGZyb20gZGV2aWNlIHRyZWUgKi8KKwlvZmZzZXQgPSAqb2ZfZ2V0X2FkZHJlc3MobnAsIDEsICZzaXplLCBOVUxMKTsKKwl1ZGMtPnVzYl9wYXJhbSA9IGNwbV9tdXJhbV9hZGRyKG9mZnNldCk7CisJbWVtc2V0X2lvKHVkYy0+dXNiX3BhcmFtLCAwLCBzaXplKTsKKworCXVzYnByYW0gPSB1ZGMtPnVzYl9wYXJhbTsKKwlvdXRfYmUxNigmdXNicHJhbS0+ZnJhbWVfbiwgMCk7CisJb3V0X2JlMzIoJnVzYnByYW0tPnJzdGF0ZSwgMCk7CisKKwl0bXBfYWRkciA9IGNwbV9tdXJhbV9hbGxvYygoVVNCX01BWF9FTkRQT0lOVFMgKgorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9lcF9wYXJhKSksCisJCQkJCSAgIFVTQl9FUF9QQVJBX0FMSUdOTUVOVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlvdXRfYmUxNigmdXNicHJhbS0+ZXBwdHJbaV0sICh1MTYpdG1wX2FkZHIpOworCQl1ZGMtPmVwX3BhcmFtW2ldID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCQl0bXBfYWRkciArPSAzMjsKKwl9CisKKwltZW1zZXRfaW8odWRjLT5lcF9wYXJhbVswXSwgMCwKKwkJCVVTQl9NQVhfRU5EUE9JTlRTICogc2l6ZW9mKHN0cnVjdCB1c2JfZXBfcGFyYSkpOworCisJdWRjLT5yZXN1bWVfc3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfUE9XRVJFRDsKKwl1ZGMtPmVwMF9kaXIgPSAwOworCisJc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CisJcmV0dXJuIHVkYzsKKworY2xlYW51cDoKKwlrZnJlZSh1ZGMpOworCXJldHVybiBOVUxMOworfQorCisvKiBVU0IgQ29udHJvbGxlciByZWdpc3RlciBpbml0ICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcmVnX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICpxZV91c2JyZWdzOworCXFlX3VzYnJlZ3MgPSB1ZGMtPnVzYl9yZWdzOworCisJLyogSW5pdCB0aGUgdXNiIHJlZ2lzdGVyICovCisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c21vZCwgMHgwMSk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JtciwgMCk7CisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c2NvbSwgMCk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JlciwgVVNCRVJfQUxMX0NMRUFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV9lcF9jb25maWcoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJZXAtPnVkYyA9IHVkYzsKKwlzdHJjcHkoZXAtPm5hbWUsIGVwX25hbWVbcGlwZV9udW1dKTsKKwllcC0+ZXAubmFtZSA9IGVwX25hbWVbcGlwZV9udW1dOworCisJZXAtPmVwLm9wcyA9ICZxZV9lcF9vcHM7CisJZXAtPnN0b3BwZWQgPSAxOworCWVwLT5lcC5tYXhwYWNrZXQgPSAodW5zaWduZWQgc2hvcnQpIH4wOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+ZGlyID0gMHhmZjsKKwllcC0+ZXBudW0gPSAodTgpcGlwZV9udW07CisJZXAtPnNlbnQgPSAwOworCWVwLT5sYXN0ID0gMDsKKwllcC0+aW5pdCA9IDA7CisJZXAtPnJ4ZnJhbWUgPSBOVUxMOworCWVwLT50eGZyYW1lID0gTlVMTDsKKwllcC0+dHhfcmVxID0gTlVMTDsKKwllcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOworCWVwLT5oYXNfZGF0YSA9IDA7CisKKwkvKiB0aGUgcXVldWUgbGlzdHMgYW55IHJlcSBmb3IgdGhpcyBlcCAqLworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCisJLyogZ2FnZGV0LmVwX2xpc3QgdXNlZCBmb3IgZXBfYXV0b2NvbmZpZyBzbyBubyBlcDAqLworCWlmIChwaXBlX251bSAhPSAwKQorCQlsaXN0X2FkZF90YWlsKCZlcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCisJZXAtPmdhZGdldCA9ICZ1ZGMtPmdhZGdldDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKglVREMgZGV2aWNlIERyaXZlciBvcGVyYXRpb24gZnVuY3Rpb25zCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBxZV91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGkgPSAwOworCisJY29tcGxldGUodWRjX2NvbnRyb2xsZXItPmRvbmUpOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQodWRjX2NvbnRyb2xsZXItPmVwX3BhcmFtWzBdKSk7CisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspCisJCXVkY19jb250cm9sbGVyLT5lcF9wYXJhbVtpXSA9IE5VTEw7CisKKwlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOworfQorCisvKiBEcml2ZXIgcHJvYmUgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCB2b2lkICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKKwlpZiAoIXByb3AgfHwgc3RyY21wKHByb3AsICJwZXJpcGhlcmFsIikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KKwl1ZGNfY29udHJvbGxlciA9IHFlX3VkY19jb25maWcob2ZkZXYpOworCWlmICghdWRjX2NvbnRyb2xsZXIpIHsKKwkJZGV2X2RiZygmb2ZkZXYtPmRldiwgInVkY19jb250cm9sbCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdWRjX2NvbnRyb2xsZXItPnNvY190eXBlID0gKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGE7CisJdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKKwkgKiBsZWF2ZSB1c2JpbnRyIHJlZyB1bnRvdWNoZWQqLworCXFlX3VkY19yZWdfaW5pdCh1ZGNfY29udHJvbGxlcik7CisKKwkvKiBoZXJlIGNvbWVzIHRoZSBzdGFuZCBvcGVyYXRpb25zIGZvciBwcm9iZQorCSAqIHNldCB0aGUgcWVfdWRjLT5nYWRnZXQueHh4ICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5vcHMgPSAmcWVfZ2FkZ2V0X29wczsKKworCS8qIGdhZGdldC5lcDAgaXMgYSBwb2ludGVyICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5lcDAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXS5lcDsKKworCUlOSVRfTElTVF9IRUFEKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QpOworCisJLyogbW9kaWZ5IGluIHJlZ2lzdGVyIGdhZGdldCBwcm9jZXNzICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogbmFtZTogSWRlbnRpZmllcyB0aGUgY29udHJvbGxlciBoYXJkd2FyZSB0eXBlLiAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOworCisJZGV2aWNlX2luaXRpYWxpemUoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKworCXN0cmNweSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBxZV91ZGNfcmVsZWFzZTsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKworCS8qIGluaXRpYWxpemUgcWVfZXAgc3RydWN0ICovCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTIDsgaSsrKSB7CisJCS8qIGJlY2F1c2UgdGhlIGVwIHR5cGUgaXNuJ3QgZGVjaWRlIGhlcmUgc28KKwkJICogcWVfZXBfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgaW4gZXBfZW5hYmxlKCkgKi8KKworCQkvKiBzZXR1cCB0aGUgcWVfZXAgc3RydWN0IGFuZCBsaW5rIGVwLmVwLmxpc3QKKwkJICogaW50byBnYWRnZXQuZXBfbGlzdCAqLworCQlxZV9lcF9jb25maWcodWRjX2NvbnRyb2xsZXIsICh1bnNpZ25lZCBjaGFyKWkpOworCX0KKworCS8qIGVwMCBpbml0aWFsaXphdGlvbiBpbiBoZXJlICovCisJcmV0ID0gcWVfZXBfaW5pdCh1ZGNfY29udHJvbGxlciwgMCwgJnFlX2VwMF9kZXNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwkvKiBjcmVhdGUgYSBidWYgZm9yIFpMUCBzZW5kLCBuZWVkIHRvIHJlbWFpbiB6ZXJvZWQgKi8KKwl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiA9IGt6YWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxidWYgPT0gTlVMTCkgeworCQlkZXZfZGJnKHVkY19jb250cm9sbGVyLT5kZXYsICJjYW5ub3QgYWxsb2MgbnVsbGJ1ZlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMzsKKwl9CisKKwkvKiBidWZmZXIgZm9yIGRhdGEgb2YgZ2V0X3N0YXR1cyByZXF1ZXN0ICovCisJdWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1ZiA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkY19jb250cm9sbGVyLT5zdGF0dXNidWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCisJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gdmlydF90b19waHlzKCh2b2lkICopdWRjX2NvbnRyb2xsZXItPm51bGxidWYpOworCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbHAgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBkbWFfbWFwX3NpbmdsZSgKKwkJCQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiwKKwkJCQkJMjU2LAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJdWRjX2NvbnRyb2xsZXItPm51bGxtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKworCXRhc2tsZXRfaW5pdCgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQsIGVwX3J4X3Rhc2tsZXQsCisJCQkodW5zaWduZWQgbG9uZyl1ZGNfY29udHJvbGxlcik7CisJLyogcmVxdWVzdCBpcnEgYW5kIGRpc2FibGUgRFIgICovCisJdWRjX2NvbnRyb2xsZXItPnVzYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcWVfdWRjX2lycSwgMCwKKwkJCQlkcml2ZXJfbmFtZSwgdWRjX2NvbnRyb2xsZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih1ZGNfY29udHJvbGxlci0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCQl1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcmV0KTsKKwkJZ290byBlcnI1OworCX0KKworCXJldCA9IGRldmljZV9hZGQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisKKwlkZXZfaW5mbyh1ZGNfY29udHJvbGxlci0+ZGV2LAorCQkJIiVzIFVTQiBjb250cm9sbGVyIGluaXRpYWxpemVkIGFzIGRldmljZVxuIiwKKwkJCSh1ZGNfY29udHJvbGxlci0+c29jX3R5cGUgPT0gUE9SVF9RRSkgPyAiUUUiIDogIkNQTSIpOworCXJldHVybiAwOworCitlcnI2OgorCWZyZWVfaXJxKHVkY19jb250cm9sbGVyLT51c2JfaXJxLCB1ZGNfY29udHJvbGxlcik7CitlcnI1OgorCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbG1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1Zik7CitlcnI0OgorCWtmcmVlKHVkY19jb250cm9sbGVyLT5udWxsYnVmKTsKK2VycjM6CisJZXAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXTsKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CitlcnIyOgorCWlvdW5tYXAodWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKTsKK2VycjE6CisJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBxZV91ZGNfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IHFlX3VkY19yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgcWVfdWRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGludCBzaXplOworCisJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZGNfY29udHJvbGxlci0+ZG9uZSA9ICZkb25lOworCXRhc2tsZXRfZGlzYWJsZSgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQpOworCisJaWYgKHVkY19jb250cm9sbGVyLT5udWxsbWFwKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBETUFfQUREUl9JTlZBTElEOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+bnVsbGJ1Zik7CisKKwllcCA9ICZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICogKFVTQl9CRFJJTkdfTEVOICsgMSk7CisKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJaWYgKGVwLT5yeGJ1Zm1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZfZCA9IERNQV9BRERSX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJfQorCisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CisKKwlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgdWRjX2NvbnRyb2xsZXIpOworCisJdGFza2xldF9raWxsKCZ1ZGNfY29udHJvbGxlci0+cnhfdGFza2xldCk7CisKKwlpb3VubWFwKHVkY19jb250cm9sbGVyLT51c2JfcmVncyk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOworCS8qIHdhaXQgZm9yIHJlbGVhc2UoKSBvZiBnYWRnZXQuZGV2IHRvIGZyZWUgdWRjICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcWVfdWRjX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1xZS11c2IiLAorCQkuZGF0YSA9ICh2b2lkICopUE9SVF9RRSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzItY3BtLXVzYiIsCisJCS5kYXRhID0gKHZvaWQgKilQT1JUX0NQTSwKKwl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcWVfdWRjX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAorCS5tYXRjaF90YWJsZSAgICA9IHFlX3VkY19tYXRjaCwKKwkucHJvYmUgICAgICAgICAgPSBxZV91ZGNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AocWVfdWRjX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgICAgICAgID0gcWVfdWRjX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gcWVfdWRjX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgcWVfdWRjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwgZHJpdmVyX2Rlc2MsCisJCQlEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxZV91ZGNfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocWVfdWRjX2luaXQpOworbW9kdWxlX2V4aXQocWVfdWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiMjcxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9nYWRnZXQvcWVfdWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlc2NhbGUgVVNCIGRldmljZS9lbmRwb2ludCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0ZTTF9RRV9VRENfSAorI2RlZmluZSBfX0ZTTF9RRV9VRENfSAorCisvKiBTb0MgdHlwZSAqLworI2RlZmluZSBQT1JUX0NQTQkwCisjZGVmaW5lIFBPUlRfUUUJCTEKKworI2RlZmluZSBVU0JfTUFYX0VORFBPSU5UUyAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVVNCX01BWF9QSVBFUyAgICAgICAgICAgICAgICAgICBVU0JfTUFYX0VORFBPSU5UUworI2RlZmluZSBVU0JfRVAwX01BWF9TSVpFCQk2NAorI2RlZmluZSBVU0JfTUFYX0NUUkxfUEFZTE9BRCAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBVU0JfQkRSSU5HX0xFTgkJCTE2CisjZGVmaW5lIFVTQl9CRFJJTkdfTEVOX1JYCQkyNTYKKyNkZWZpbmUgVVNCX0JEUklOR19MRU5fVFgJCTE2CisjZGVmaW5lIE1JTl9FTVBUWV9CRFMJCQkxMjgKKyNkZWZpbmUgTUFYX0RBVEFfQkRTCQkJOAorI2RlZmluZSBVU0JfQ1JDX1NJWkUJCQkyCisjZGVmaW5lIFVTQl9ESVJfQk9USAkJCTB4ODgKKyNkZWZpbmUgUl9CVUZfTUFYU0laRQkJCTB4ODAwCisjZGVmaW5lIFVTQl9FUF9QQVJBX0FMSUdOTUVOVAkJMzIKKworLyogVVNCIE1vZGUgUmVnaXN0ZXIgYml0IGRlZmluZSAqLworI2RlZmluZSBVU0JfTU9ERV9FTgkJMHgwMQorI2RlZmluZSBVU0JfTU9ERV9IT1NUCQkweDAyCisjZGVmaW5lIFVTQl9NT0RFX1RFU1QJCTB4MDQKKyNkZWZpbmUgVVNCX01PREVfU0ZURQkJMHgwOAorI2RlZmluZSBVU0JfTU9ERV9SRVNVTUUJCTB4NDAKKyNkZWZpbmUgVVNCX01PREVfTFNTCQkweDgwCisKKy8qIFVTQiBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1NMVkFERFJfTUFTSwkweDdGCisKKy8qIFVTQiBFbmRwb2ludCByZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0VQTlVNX01BU0sJCTB4RjAwMAorI2RlZmluZSBVU0JfRVBOVU1fU0hJRlQJCTEyCisKKyNkZWZpbmUgVVNCX1RSQU5TX01PREVfU0hJRlQJOAorI2RlZmluZSBVU0JfVFJBTlNfQ1RSCQkweDAwMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lOVAkJMHgwMTAwCisjZGVmaW5lIFVTQl9UUkFOU19CVUxLCQkweDAyMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lTTwkJMHgwMzAwCisKKyNkZWZpbmUgVVNCX0VQX01GCQkweDAwMjAKKyNkZWZpbmUgVVNCX0VQX1JURQkJMHgwMDEwCisKKyNkZWZpbmUgVVNCX1RIU19TSElGVAkJMgorI2RlZmluZSBVU0JfVEhTX01BU0sJCTB4MDAwYworI2RlZmluZSBVU0JfVEhTX05PUk1BTAkJMHgwCisjZGVmaW5lIFVTQl9USFNfSUdOT1JFX0lOCTB4MDAwNAorI2RlZmluZSBVU0JfVEhTX05BQ0sJCTB4MDAwOAorI2RlZmluZSBVU0JfVEhTX1NUQUxMCQkweDAwMGMKKworI2RlZmluZSBVU0JfUkhTX1NISUZUICAgCTAKKyNkZWZpbmUgVVNCX1JIU19NQVNLCQkweDAwMDMKKyNkZWZpbmUgVVNCX1JIU19OT1JNQUwgIAkweDAKKyNkZWZpbmUgVVNCX1JIU19JR05PUkVfT1VUCTB4MDAwMQorI2RlZmluZSBVU0JfUkhTX05BQ0sJCTB4MDAwMgorI2RlZmluZSBVU0JfUkhTX1NUQUxMCQkweDAwMDMKKworI2RlZmluZSBVU0JfUlRIU19NQVNLCQkweDAwMGYKKworLyogVVNCIENvbW1hbmQgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9DTURfU1RSX0ZJRk8JMHg4MAorI2RlZmluZSBVU0JfQ01EX0ZMVVNIX0ZJRk8JMHg0MAorI2RlZmluZSBVU0JfQ01EX0lTRlQJCTB4MjAKKyNkZWZpbmUgVVNCX0NNRF9EU0ZUCQkweDEwCisjZGVmaW5lIFVTQl9DTURfRVBfTUFTSwkJMHgwMworCisvKiBVU0IgRXZlbnQgYW5kIE1hc2sgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9FX01TRl9NQVNLCQkweDA4MDAKKyNkZWZpbmUgVVNCX0VfU0ZUX01BU0sJCTB4MDQwMAorI2RlZmluZSBVU0JfRV9SRVNFVF9NQVNLCTB4MDIwMAorI2RlZmluZSBVU0JfRV9JRExFX01BU0sJCTB4MDEwMAorI2RlZmluZSBVU0JfRV9UWEU0X01BU0sJCTB4MDA4MAorI2RlZmluZSBVU0JfRV9UWEUzX01BU0sJCTB4MDA0MAorI2RlZmluZSBVU0JfRV9UWEUyX01BU0sJCTB4MDAyMAorI2RlZmluZSBVU0JfRV9UWEUxX01BU0sJCTB4MDAxMAorI2RlZmluZSBVU0JfRV9TT0ZfTUFTSwkJMHgwMDA4CisjZGVmaW5lIFVTQl9FX0JTWV9NQVNLCQkweDAwMDQKKyNkZWZpbmUgVVNCX0VfVFhCX01BU0sJCTB4MDAwMgorI2RlZmluZSBVU0JfRV9SWEJfTUFTSwkJMHgwMDAxCisjZGVmaW5lIFVTQkVSX0FMTF9DTEVBUiAJMHgwZmZmCisKKyNkZWZpbmUgVVNCX0VfREVGQVVMVF9ERVZJQ0UgICAoVVNCX0VfUkVTRVRfTUFTSyB8IFVTQl9FX1RYRTRfTUFTSyB8IFwKKwkJCQlVU0JfRV9UWEUzX01BU0sgfCBVU0JfRV9UWEUyX01BU0sgfCBcCisJCQkJVVNCX0VfVFhFMV9NQVNLIHwgVVNCX0VfQlNZX01BU0sgfCBcCisJCQkJVVNCX0VfVFhCX01BU0sgfCBVU0JfRV9SWEJfTUFTSykKKworI2RlZmluZSBVU0JfRV9UWEVfTUFTSyAgICAgICAgIChVU0JfRV9UWEU0X01BU0sgfCBVU0JfRV9UWEUzX01BU0t8XAorCQkJCSBVU0JfRV9UWEUyX01BU0sgfCBVU0JfRV9UWEUxX01BU0spCisvKiBVU0IgU3RhdHVzIFJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfSURMRV9TVEFUVVNfTUFTSwkweDAxCisKKy8qIFVTQiBTdGFydCBvZiBGcmFtZSBUaW1lciAqLworI2RlZmluZSBVU0JfVVNTRlRfTUFTSwkJMHgzRkZGCisKKy8qIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCX1VTRlJOX01BU0sJCTB4RkZGRgorCitzdHJ1Y3QgdXNiX2RldmljZV9wYXJheworCXUxNgllcHB0cls0XTsKKwl1MzIJcnN0YXRlOworCXUzMglycHRyOworCXUxNglmcmFtZV9uOworCXUxNglyYmNudDsKKwl1MzIJcnRlbXA7CisJdTMyCXJ4dXNiX2RhdGE7CisJdTE2CXJ4dXB0cjsKKwl1OAlyZXNvWzJdOworCXUzMglzb2Z0Ymw7CisJdTgJc29mdWNyY3RlbXA7Cit9OworCitzdHJ1Y3QgdXNiX2VwX3BhcmF7CisJdTE2CXJiYXNlOworCXUxNgl0YmFzZTsKKwl1OAlyYm1yOworCXU4CXRibXI7CisJdTE2CW1yYmxyOworCXUxNglyYnB0cjsKKwl1MTYJdGJwdHI7CisJdTMyCXRzdGF0ZTsKKwl1MzIJdHB0cjsKKwl1MTYJdGNyYzsKKwl1MTYJdGJjbnQ7CisJdTMyCXR0ZW1wOworCXUxNgl0eHVzYnVfcHRyOworCXU4CXJlc2VydmVbMl07Cit9OworCisjZGVmaW5lIFVTQl9CVVNNT0RFX0dCTAkJMHgyMAorI2RlZmluZSBVU0JfQlVTTU9ERV9CT19NQVNLCTB4MTgKKyNkZWZpbmUgVVNCX0JVU01PREVfQk9fU0hJRlQJMHgzCisjZGVmaW5lIFVTQl9CVVNNT0RFX0JFCQkweDIKKyNkZWZpbmUgVVNCX0JVU01PREVfQ0VUTQkweDA0CisjZGVmaW5lIFVTQl9CVVNNT0RFX0RUQgkJMHgwMgorCisvKiBFbmRwb2ludCBiYXNpYyBoYW5kbGUgKi8KKyNkZWZpbmUgZXBfaW5kZXgoRVApCQkoKEVQKS0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4RikKKyNkZWZpbmUgZXBfbWF4cGFja2V0KEVQKQkoKEVQKS0+ZXAubWF4cGFja2V0KQorI2RlZmluZSBlcF9pc19pbihFUCkJKChlcF9pbmRleChFUCkgPT0gMCkgPyAoRVAtPnVkYy0+ZXAwX2RpciA9PSBcCisJCQlVU0JfRElSX0lOKSA6ICgoRVApLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzIFwKKwkJCSYgVVNCX0RJUl9JTikgPT0gVVNCX0RJUl9JTikKKworLyogZXAwIHRyYW5zZmVyIHN0YXRlICovCisjZGVmaW5lIFdBSVRfRk9SX1NFVFVQICAgICAgICAgIDAKKyNkZWZpbmUgREFUQV9TVEFURV9YTUlUICAgICAgICAgMQorI2RlZmluZSBEQVRBX1NUQVRFX05FRURfWkxQICAgICAyCisjZGVmaW5lIFdBSVRfRk9SX09VVF9TVEFUVVMgICAgIDMKKyNkZWZpbmUgREFUQV9TVEFURV9SRUNWICAgICAgICAgNAorCisvKiBlcCB0cmFtc2ZlciBtb2RlICovCisjZGVmaW5lIFVTQlBfVE1fQ1RMCTAKKyNkZWZpbmUgVVNCUF9UTV9JU08JMQorI2RlZmluZSBVU0JQX1RNX0JVTEsJMgorI2RlZmluZSBVU0JQX1RNX0lOVAkzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgUlggQW5kIFRYIERBVEEgRnJhbWUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgcWVfZnJhbWV7CisJdTggKmRhdGE7CisJdTMyIGxlbjsKKwl1MzIgc3RhdHVzOworCXUzMiBpbmZvOworCisJdm9pZCAqcHJpdmRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworLyogRnJhbWUgc3RydWN0dXJlLCBpbmZvIGZpZWxkLiAqLworI2RlZmluZSBQSURfREFUQTAgICAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRGF0YSB0b2dnbGUgemVybyAqLworI2RlZmluZSBQSURfREFUQTEgICAgICAgICAgICAgIDB4NDAwMDAwMDAgLyogRGF0YSB0b2dnbGUgb25lICAqLworI2RlZmluZSBQSURfU0VUVVAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogc2V0dXAgYml0ICovCisjZGVmaW5lIFNFVFVQX1NUQVRVUyAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBzZXR1cCBzdGF0dXMgYml0ICovCisjZGVmaW5lIFNFVEFERFJfU1RBVFVTICAgICAgICAgMHgwODAwMDAwMCAvKiBzZXR1cHVwIGFkZHJlc3Mgc3RhdHVzIGJpdCAqLworI2RlZmluZSBOT19SRVEgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogRnJhbWUgd2l0aG91dCByZXF1ZXN0ICovCisjZGVmaW5lIEhPU1RfREFUQSAgICAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBIb3N0IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgRklSU1RfUEFDS0VUX0lOX0ZSQU1FICAweDAxMDAwMDAwIC8qIGZpcnN0IHBhY2tldCBpbiB0aGUgZnJhbWUgKi8KKyNkZWZpbmUgVE9LRU5fRlJBTUUgICAgICAgICAgICAweDAwODAwMDAwIC8qIEhvc3QgdG9rZW4gZnJhbWUgKi8KKyNkZWZpbmUgWkxQICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFplcm8gbGVuZ3RoIHBhY2tldCAqLworI2RlZmluZSBJTl9UT0tFTl9GUkFNRSAgICAgICAgIDB4MDAyMDAwMDAgLyogSW4gdG9rZW4gcGFja2FnZSAqLworI2RlZmluZSBPVVRfVE9LRU5fRlJBTUUgICAgICAgIDB4MDAxMDAwMDAgLyogT3V0IHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU0VUVVBfVE9LRU5fRlJBTUUgICAgICAweDAwMDgwMDAwIC8qIFNldHVwIHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU1RBTExfRlJBTUUgICAgICAgICAgICAweDAwMDQwMDAwIC8qIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSBOQUNLX0ZSQU1FICAgICAgICAgICAgIDB4MDAwMjAwMDAgLyogTmFjayBoYW5kc2hha2UgKi8KKyNkZWZpbmUgTk9fUElEICAgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIE5vIHNlbmQgUElEICovCisjZGVmaW5lIE5PX0NSQyAgICAgICAgICAgICAgICAgMHgwMDAwODAwMCAvKiBObyBzZW5kIENSQyAqLworI2RlZmluZSBIT1NUX0NPTU1BTkQgICAgICAgICAgIDB4MDAwMDQwMDAgLyogSG9zdCBjb21tYW5kIGZyYW1lICAgKi8KKworLyogRnJhbWUgc3RhdHVzIGZpZWxkICovCisvKiBSZWNlaXZlIHNpZGUgKi8KKyNkZWZpbmUgRlJBTUVfT0sgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEZyYW1lIHRyYW5taXR0ZWQgb3IgcmVjZWl2ZWQgT0sgKi8KKyNkZWZpbmUgRlJBTUVfRVJST1IgICAgICAgICAgICAweDgwMDAwMDAwIC8qIEVycm9yIG9jY3VyZWQgb24gZnJhbWUgKi8KKyNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KKyNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCisjZGVmaW5lIFJYX0VSX05PTk9DVCAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUlhfRVJfQklUU1RVRkYgICAgICAgICAweDA4MDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQgLS1SZWNlaXZlZCBwYWNrZXQKKwkJCQkJICAgICB3aXRoIGJpdCBzdHVmZiBlcnJvciAqLworI2RlZmluZSBSWF9FUl9DUkMgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIGVycm9yICovCisjZGVmaW5lIFJYX0VSX09WRVJVTiAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBPdmVyLXJ1biBvY2N1cmVkIG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSWF9FUl9QSUQgICAgICAgICAgICAgIDB4MDEwMDAwMDAgLyogV3JvbmcgUElEIHJlY2VpdmVkICovCisvKiBUcmFubWl0IHNpZGUgKi8KKyNkZWZpbmUgVFhfRVJfTkFLICAgICAgICAgICAgICAweDAwODAwMDAwIC8qIFJlY2VpdmVkIE5BSyBoYW5kc2hha2UgKi8KKyNkZWZpbmUgVFhfRVJfU1RBTEwgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFJlY2VpdmVkIFNUQUxMIGhhbmRzaGFrZSAqLworI2RlZmluZSBUWF9FUl9USU1FT1VUICAgICAgICAgIDB4MDAyMDAwMDAgLyogVHJhbnNtaXQgdGltZSBvdXQgKi8KKyNkZWZpbmUgVFhfRVJfVU5ERVJVTiAgICAgICAgICAweDAwMTAwMDAwIC8qIFRyYW5zbWl0IHVuZGVycnVuICovCisjZGVmaW5lIEZSQU1FX0lOUFJPR1JFU1MgICAgICAgMHgwMDA4MDAwMCAvKiBGcmFtZSBpcyBiZWluZyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBFUl9EQVRBX1VOREVSVU4gICAgICAgIDB4MDAwNDAwMDAgLyogRnJhbWUgaXMgc2hvcnRlciB0aGVuIGV4cGVjdGVkICovCisjZGVmaW5lIEVSX0RBVEFfT1ZFUlVOICAgICAgICAgMHgwMDAyMDAwMCAvKiBGcmFtZSBpcyBsb25nZXIgdGhlbiBleHBlY3RlZCAqLworCisvKiBRRSBVU0IgZnJhbWUgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqLworI2RlZmluZSBmcmFtZV9nZXRfbGVuZ3RoKGZybSkgKGZybS0+bGVuKQorI2RlZmluZSBmcmFtZV9zZXRfbGVuZ3RoKGZybSwgbGVuZykgKGZybS0+bGVuID0gbGVuZykKKyNkZWZpbmUgZnJhbWVfZ2V0X2RhdGEoZnJtKSAoZnJtLT5kYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfZGF0YShmcm0sIGRhdCkgKGZybS0+ZGF0YSA9IGRhdCkKKyNkZWZpbmUgZnJhbWVfZ2V0X2luZm8oZnJtKSAoZnJtLT5pbmZvKQorI2RlZmluZSBmcmFtZV9zZXRfaW5mbyhmcm0sIGluZikgKGZybS0+aW5mbyA9IGluZikKKyNkZWZpbmUgZnJhbWVfZ2V0X3N0YXR1cyhmcm0pIChmcm0tPnN0YXR1cykKKyNkZWZpbmUgZnJhbWVfc2V0X3N0YXR1cyhmcm0sIHN0YXQpIChmcm0tPnN0YXR1cyA9IHN0YXQpCisjZGVmaW5lIGZyYW1lX2dldF9wcml2ZGF0YShmcm0pIChmcm0tPnByaXZkYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfcHJpdmRhdGEoZnJtLCBkYXQpIChmcm0tPnByaXZkYXRhID0gZGF0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfY2xlYW4oc3RydWN0IHFlX2ZyYW1lICpmcm0pCit7CisJZnJhbWVfc2V0X2RhdGEoZnJtLCBOVUxMKTsKKwlmcmFtZV9zZXRfbGVuZ3RoKGZybSwgMCk7CisJZnJhbWVfc2V0X3N0YXR1cyhmcm0sIEZSQU1FX09LKTsKKwlmcmFtZV9zZXRfaW5mbyhmcm0sIDApOworCWZyYW1lX3NldF9wcml2ZGF0YShmcm0sIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfaW5pdChzdHJ1Y3QgcWVfZnJhbWUgKmZybSkKK3sKKwlxZV9mcmFtZV9jbGVhbihmcm0pOworCUlOSVRfTElTVF9IRUFEKCYoZnJtLT5ub2RlKSk7Cit9CisKK3N0cnVjdCBxZV9yZXEgeworCXN0cnVjdCB1c2JfcmVxdWVzdCByZXE7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwkvKiBlcF9xdWV1ZSgpIGZ1bmMgd2lsbCBhZGQKKwkgYSByZXF1ZXN0LT5xdWV1ZSBpbnRvIGEgdWRjX2VwLT5xdWV1ZSAnZCB0YWlsICovCisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBtYXBwZWQ6MTsKK307CisKK3N0cnVjdCBxZV9lcCB7CisJc3RydWN0IHVzYl9lcCBlcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldDsKKworCXU4IHN0YXRlOworCisJc3RydWN0IHFlX2JkIF9faW9tZW0gKnJ4YmFzZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqbl9yeGJkOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICplX3J4YmQ7CisKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqdHhiYXNlOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpuX3R4YmQ7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmNfdHhiZDsKKworCXN0cnVjdCBxZV9mcmFtZSAqcnhmcmFtZTsKKwl1OCAqcnhidWZmZXI7CisJZG1hX2FkZHJfdCByeGJ1Zl9kOworCXU4IHJ4YnVmbWFwOworCXVuc2lnbmVkIGNoYXIgbG9jYWxuYWNrOworCWludCBoYXNfZGF0YTsKKworCXN0cnVjdCBxZV9mcmFtZSAqdHhmcmFtZTsKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXE7CisJaW50IHNlbnQ7ICAvKmRhdGEgYWxyZWFkeSBzZW50ICovCisJaW50IGxhc3Q7ICAvKmRhdGEgc2VudCBpbiB0aGUgbGFzdCB0aW1lKi8KKworCXU4IGRpcjsKKwl1OCBlcG51bTsKKwl1OCB0bTsgLyogdHJhbnNmZXIgbW9kZSAqLworCXU4IGRhdGEwMTsKKwl1OCBpbml0OworCisJdTggYWxyZWFkeV9zZWVuOworCXU4IGVuYWJsZV90YXNrbGV0OworCXU4IHNldHVwX3N0YWdlOworCXUzMiBsYXN0X2lvOyAgICAgICAgICAgIC8qIHRpbWVzdGFtcCAqLworCisJY2hhciBuYW1lWzE0XTsKKworCXVuc2lnbmVkIGRvdWJsZV9idWY6MTsKKwl1bnNpZ25lZCBzdG9wcGVkOjE7CisJdW5zaWduZWQgZm5mOjE7CisJdW5zaWduZWQgaGFzX2RtYToxOworCisJdTggYWNrd2FpdDsKKwl1OCBkbWFfY2hhbm5lbDsKKwl1MTYgZG1hX2NvdW50ZXI7CisJaW50IGxjaDsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworc3RydWN0IHFlX3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQgZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcWVfZXAgZXBzW1VTQl9NQVhfRU5EUE9JTlRTXTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGxvY2FsX3NldHVwX2J1ZmY7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGZvciBzZXQvY29uZmlnIHFlX3VkYyAqLworCXVuc2lnbmVkIGxvbmcgc29jX3R5cGU7CQkvKiBRRSBvciBDUE0gc29jICovCisKKwlzdHJ1Y3QgcWVfcmVxICpzdGF0dXNfcmVxOwkvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KKworCS8qIFVTQiBhbmQgRVAgUGFyYW1ldGVyIEJsb2NrIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZV9wYXJhIF9faW9tZW0gKnVzYl9wYXJhbTsKKwlzdHJ1Y3QgdXNiX2VwX3BhcmEgX19pb21lbSAqZXBfcGFyYW1bNF07CisKKwl1MzIgbWF4X3BpcGVzOyAgICAgICAgICAvKiBEZXZpY2UgbWF4IHBpcGVzICovCisJdTMyIG1heF91c2VfZW5kcHRzOyAgICAgLyogTWF4IGVuZHBvaW50ZXMgdG8gYmUgdXNlZCAqLworCXUzMiBidXNfcmVzZXQ7ICAgICAgICAgIC8qIERldmljZSBpcyBidXMgcmVzZXRpbmcgKi8KKwl1MzIgcmVzdW1lX3N0YXRlOyAgICAgICAvKiBVU0Igc3RhdGUgdG8gcmVzdW1lKi8KKwl1MzIgdXNiX3N0YXRlOyAgICAgICAgICAvKiBVU0IgY3VycmVudCBzdGF0ZSAqLworCXUzMiB1c2JfbmV4dF9zdGF0ZTsgICAgIC8qIFVTQiBuZXh0IHN0YXRlICovCisJdTMyIGVwMF9zdGF0ZTsgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIHN0YXRlICovCisJdTMyIGVwMF9kaXI7ICAgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCisJCQkJVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCovCisJdTMyIHVzYl9zb2ZfY291bnQ7ICAgICAgLyogU09GIGNvdW50ICovCisJdTMyIGVycm9yczsgICAgICAgICAgICAgLyogVVNCIEVSUk9ScyBjb3VudCAqLworCisJdTggKnRtcGJ1ZjsKKwl1MzIgY19zdGFydDsKKwl1MzIgY19lbmQ7CisKKwl1OCAqbnVsbGJ1ZjsKKwl1OCAqc3RhdHVzYnVmOworCWRtYV9hZGRyX3QgbnVsbHA7CisJdTggbnVsbG1hcDsKKwl1OCBkZXZpY2VfYWRkcmVzczsJLyogRGV2aWNlIFVTQiBhZGRyZXNzICovCisKKwl1bnNpZ25lZCBpbnQgdXNiX2Nsb2NrOworCXVuc2lnbmVkIGludCB1c2JfaXJxOworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICp1c2JfcmVnczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLworfTsKKworI2RlZmluZSBFUF9TVEFURV9JRExFCTAKKyNkZWZpbmUgRVBfU1RBVEVfTkFDSwkxCisjZGVmaW5lIEVQX1NUQVRFX1NUQUxMCTIKKworLyoKKyAqIHRyYW5zbWl0IEJEJ3Mgc3RhdHVzCisgKi8KKyNkZWZpbmUgVF9SICAgICAgICAgICAweDgwMDAwMDAwICAgICAgICAgLyogcmVhZHkgYml0ICovCisjZGVmaW5lIFRfVyAgICAgICAgICAgMHgyMDAwMDAwMCAgICAgICAgIC8qIHdyYXAgYml0ICovCisjZGVmaW5lIFRfSSAgICAgICAgICAgMHgxMDAwMDAwMCAgICAgICAgIC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIFRfTCAgICAgICAgICAgMHgwODAwMDAwMCAgICAgICAgIC8qIGxhc3QgKi8KKyNkZWZpbmUgVF9UQyAgICAgICAgICAweDA0MDAwMDAwICAgICAgICAgLyogdHJhbnNtaXQgQ1JDICovCisjZGVmaW5lIFRfQ05GICAgICAgICAgMHgwMjAwMDAwMCAgICAgICAgIC8qIHdhaXQgZm9yICB0cmFuc21pdCBjb25maXJtICovCisjZGVmaW5lIFRfTFNQICAgICAgICAgMHgwMTAwMDAwMCAgICAgICAgIC8qIExvdy1zcGVlZCB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBUX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KKyNkZWZpbmUgVF9OQUsgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogTm8gYWNrLiAqLworI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNpZXZlZCAqLworI2RlZmluZSBUX1RPICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiB0aW1lIG91dCAqLworI2RlZmluZSBUX1VOICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiB1bmRlcnJ1biAqLworCisjZGVmaW5lIERFVklDRV9UX0VSUk9SICAgIChUX1VOIHwgVF9UTykKKyNkZWZpbmUgSE9TVF9UX0VSUk9SICAgICAgKFRfVU4gfCBUX1RPIHwgVF9OQUsgfCBUX1NUQUwpCisjZGVmaW5lIERFVklDRV9UX0JEX01BU0sgIERFVklDRV9UX0VSUk9SCisjZGVmaW5lIEhPU1RfVF9CRF9NQVNLICAgIEhPU1RfVF9FUlJPUgorCisjZGVmaW5lIFRfUElEX1NISUZUICAgNgorI2RlZmluZSBUX1BJRF9EQVRBMCAgIDB4MDA4MDAwMDAgICAgICAgICAvKiBEYXRhIDAgdG9nZ2xlICovCisjZGVmaW5lIFRfUElEX0RBVEExICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIERhdGEgMSB0b2dnbGUgKi8KKworLyoKKyAqIHJlY2VpdmUgQkQncyBzdGF0dXMKKyAqLworI2RlZmluZSBSX0UgICAgICAgICAgIDB4ODAwMDAwMDAgICAgICAgICAvKiBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUgUl9XICAgICAgICAgICAweDIwMDAwMDAwICAgICAgICAgLyogd3JhcCBiaXQgKi8KKyNkZWZpbmUgUl9JICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgLyogaW50ZXJydXB0IG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSX0wgICAgICAgICAgIDB4MDgwMDAwMDAgICAgICAgICAvKiBsYXN0ICovCisjZGVmaW5lIFJfRiAgICAgICAgICAgMHgwNDAwMDAwMCAgICAgICAgIC8qIGZpcnN0ICovCisjZGVmaW5lIFJfUElEICAgICAgICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIHBhY2tldCBpZCAqLworI2RlZmluZSBSX05PICAgICAgICAgIDB4MDAxMDAwMDAgICAgICAgICAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUl9BQiAgICAgICAgICAweDAwMDgwMDAwICAgICAgICAgLyogRnJhbWUgQWJvcnRlZCAqLworI2RlZmluZSBSX0NSICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiBDUkMgRXJyb3IgKi8KKyNkZWZpbmUgUl9PViAgICAgICAgICAweDAwMDIwMDAwICAgICAgICAgLyogT3ZlcnJ1biAqLworCisjZGVmaW5lIFJfRVJST1IgICAgICAgKFJfTk8gfCBSX0FCIHwgUl9DUiB8IFJfT1YpCisjZGVmaW5lIFJfQkRfTUFTSyAgICAgUl9FUlJPUgorCisjZGVmaW5lIFJfUElEX0RBVEEwICAgMHgwMDAwMDAwMAorI2RlZmluZSBSX1BJRF9EQVRBMSAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUl9QSURfU0VUVVAgICAweDAwODAwMDAwCisKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9SRVNUQVJUX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYX09QQ09ERSAweDBhCisjZGVmaW5lIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUgMHgwYgorI2RlZmluZSBDUE1fVVNCX0VQX1NISUZUIDUKKworI2lmbmRlZiBDT05GSUdfQ1BNCitpbmxpbmUgaW50IGNwbV9jb21tYW5kKHUzMiBjb21tYW5kLCB1OCBvcGNvZGUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1FVSUNDX0VOR0lORQoraW5saW5lIGludCBxZV9pc3N1ZV9jbWQodTMyIGNtZCwgdTMyIGRldmljZSwgdTggbWNuX3Byb3RvY29sLAorCXUzMiBjbWRfaW5wdXQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19GU0xfUUVfVURDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCA0NWFkNTU2Li4wOTFiYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0yMywxMSArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC00NCwxMSArNDEsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAiZnNsX3VzYjJfdWRjLmgiCiAKQEAgLTYxLDggKzU2LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiZnNsLXVzYjItdWRjIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjW10gPSBEUklWRVJfREVTQzsKIAotdm9sYXRpbGUgc3RhdGljIHN0cnVjdCB1c2JfZHJfZGV2aWNlICpkcl9yZWdzID0gTlVMTDsKLXZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKnVzYl9zeXNfcmVncyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHVzYl9kcl9kZXZpY2UgKmRyX3JlZ3M7CitzdGF0aWMgc3RydWN0IHVzYl9zeXNfaW50ZXJmYWNlICp1c2Jfc3lzX3JlZ3M7CiAKIC8qIGl0IGlzIGluaXRpYWxpemVkIGluIHByb2JlKCkgICovCiBzdGF0aWMgc3RydWN0IGZzbF91ZGMgKnVkY19jb250cm9sbGVyID0gTlVMTDsKQEAgLTc2LDE2ICs3MSwxNCBAQAogCS53TWF4UGFja2V0U2l6ZSA9CVVTQl9NQVhfQ1RSTF9QQVlMT0FELAogfTsKIAotc3RhdGljIGludCBmc2xfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgZnNsX3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgdm9pZCBmc2xfZXBfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAjZGVmaW5lIGZzbF9yZWFkbChhZGRyKQkJaW5fbGUzMihhZGRyKQotI2RlZmluZSBmc2xfd3JpdGVsKGFkZHIsIHZhbDMyKSBvdXRfbGUzMih2YWwzMiwgYWRkcikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgb3V0X2xlMzIoYWRkciwgdmFsMzIpCiAjZWxzZQogI2RlZmluZSBmc2xfcmVhZGwoYWRkcikJCXJlYWRsKGFkZHIpCi0jZGVmaW5lIGZzbF93cml0ZWwoYWRkciwgdmFsMzIpIHdyaXRlbChhZGRyLCB2YWwzMikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgd3JpdGVsKHZhbDMyLCBhZGRyKQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg1LDEwICsxNzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKICNkZWZpbmUgRlNMX1VEQ19SRVNFVF9USU1FT1VUIDEwMDAKIAotCS8qIGJlZm9yZSBoZXJlLCBtYWtlIHN1cmUgZHJfcmVncyBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotCWlmICghdWRjKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIFN0b3AgYW5kIHJlc2V0IHRoZSB1c2IgY29udHJvbGxlciAqLwogCXRtcCA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKTsKIAl0bXAgJj0gflVTQl9DTURfUlVOX1NUT1A7CkBAIC0yMDIsNyArMTkxLDcgQEAKIAl0aW1lb3V0ID0gamlmZmllcyArIEZTTF9VRENfUkVTRVRfVElNRU9VVDsKIAl3aGlsZSAoZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpICYgVVNCX0NNRF9DVFJMX1JFU0VUKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlFUlIoInVkYyByZXNldCB0aW1lb3V0ISBcbiIpOworCQkJRVJSKCJ1ZGMgcmVzZXQgdGltZW91dCFcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJY3B1X3JlbGF4KCk7CkBAIC0zMTUsNyArMzA0LDggQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQgZHJfZXBfc2V0dXAodW5zaWduZWQgY2hhciBlcF9udW0sIHVuc2lnbmVkIGNoYXIgZGlyLCB1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCitzdGF0aWMgdm9pZCBkcl9lcF9zZXR1cCh1bnNpZ25lZCBjaGFyIGVwX251bSwgdW5zaWduZWQgY2hhciBkaXIsCisJCQl1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCiB7CiAJdW5zaWduZWQgaW50IHRtcF9lcGN0cmwgPSAwOwogCkBAIC01NjMsNyArNTUzLDcgQEAKIAkvKiBudWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLwogCW51a2UoZXAsIC1FU0hVVERPV04pOwogCi0JZXAtPmRlc2MgPSAwOworCWVwLT5kZXNjID0gTlVMTDsKIAllcC0+c3RvcHBlZCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKQEAgLTYwMiw3ICs1OTIsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCitzdGF0aWMgdm9pZCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCiB7CiAJaW50IGkgPSBlcF9pbmRleChlcCkgKiAyICsgZXBfaXNfaW4oZXApOwogCXUzMiB0ZW1wLCBiaXRtYXNrLCB0bXBfc3RhdDsKQEAgLTY1MywxMyArNjQzLDE2IEBACiAJCQl8IEVQX1FVRVVFX0hFQURfU1RBVFVTX0hBTFQpKTsKIAlkUUgtPnNpemVfaW9jX2ludF9zdHMgJj0gdGVtcDsKIAorCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIFFIIHdpbGwgb2NjdXJlIGJlZm9yZSBwcmltaW5nLiAqLworCXdtYigpOworCiAJLyogUHJpbWUgZW5kcG9pbnQgYnkgd3JpdGluZyAxIHRvIEVORFBUUFJJTUUgKi8KIAl0ZW1wID0gZXBfaXNfaW4oZXApCiAJCT8gKDEgPDwgKGVwX2luZGV4KGVwKSArIDE2KSkKIAkJOiAoMSA8PCAoZXBfaW5kZXgoZXApKSk7CiAJZnNsX3dyaXRlbCh0ZW1wLCAmZHJfcmVncy0+ZW5kcG9pbnRwcmltZSk7CiBvdXQ6Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogfQogCiAvKiBGaWxsIGluIHRoZSBkVEQgc3RydWN0dXJlCkBAIC03MTAsNyArNzAzLDcgQEAKIAkJKmlzX2xhc3QgPSAwOwogCiAJaWYgKCgqaXNfbGFzdCkgPT0gMCkKLQkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhXG4iKTsKKwkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhIik7CiAJLyogRmlsbCBpbiB0aGUgdHJhbnNmZXIgc2l6ZTsgc2V0IGFjdGl2ZSBiaXQgKi8KIAlzd2FwX3RlbXAgPSAoKCpsZW5ndGggPDwgRFREX0xFTkdUSF9CSVRfUE9TKSB8IERURF9TVEFUVVNfQUNUSVZFKTsKIApAQCAtNzczLDExICs3NjYsMTEgQEAKIAkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KIAlpZiAoIV9yZXEgfHwgIXJlcS0+cmVxLmNvbXBsZXRlIHx8ICFyZXEtPnJlcS5idWYKIAkJCXx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkgewotCQlWREJHKCIlcywgYmFkIHBhcmFtc1xuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIHBhcmFtcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICh1bmxpa2VseSghX2VwIHx8ICFlcC0+ZGVzYykpIHsKLQkJVkRCRygiJXMsIGJhZCBlcFxuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIGVwIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewpAQCAtMTA2OSw3ICsxMDYyLDcgQEAKIAogCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBmc2xfdWRjLCBnYWRnZXQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKLQlWREJHKCJWQlVTICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOworCVZEQkcoIlZCVVMgJXMiLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOwogCXVkYy0+dmJ1c19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOwogCWlmIChjYW5fcHVsbHVwKHVkYykpCiAJCWZzbF93cml0ZWwoKGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKSB8IFVTQl9DTURfUlVOX1NUT1ApLApAQCAtMTE0Niw3ICsxMTM5LDYgQEAKIHsKIAlzdHJ1Y3QgZnNsX3JlcSAqcmVxID0gdWRjLT5zdGF0dXNfcmVxOwogCXN0cnVjdCBmc2xfZXAgKmVwOwotCWludCBzdGF0dXMgPSAwOwogCiAJaWYgKGRpcmVjdGlvbiA9PSBFUF9ESVJfSU4pCiAJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CkBAIC0xMTY0LDI3ICsxMTU2LDIxIEBACiAJcmVxLT5kdGRfY291bnQgPSAwOwogCiAJaWYgKGZzbF9yZXFfdG9fZHRkKHJlcSkgPT0gMCkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzdGF0dXMpCi0JCUVSUigiQ2FuJ3QgcXVldWUgZXAwIHN0YXR1cyByZXF1ZXN0IFxuIik7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IGZzbF91ZGMgKnVkYywgdTggcGlwZSkKK3N0YXRpYyB2b2lkIHVkY19yZXNldF9lcF9xdWV1ZShzdHJ1Y3QgZnNsX3VkYyAqdWRjLCB1OCBwaXBlKQogewogCXN0cnVjdCBmc2xfZXAgKmVwID0gZ2V0X2VwX2J5X3BpcGUodWRjLCBwaXBlKTsKIAotCWlmICghZXAtPm5hbWUpCi0JCXJldHVybiAwOwotCi0JbnVrZShlcCwgLUVTSFVURE9XTik7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoZXAtPm5hbWUpCisJCW51a2UoZXAsIC1FU0hVVERPV04pOwogfQogCiAvKgpAQCAtMTIwOCwxMCArMTE5NCw4IEBACiAJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKIHsKIAl1MTYgdG1wID0gMDsJCS8qIFN0YXR1cywgY3B1IGVuZGlhbiAqLwotCiAJc3RydWN0IGZzbF9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnNsX2VwICplcDsKLQlpbnQgc3RhdHVzID0gMDsKIAogCWVwID0gJnVkYy0+ZXBzWzBdOwogCkBAIC0xMjUwLDE0ICsxMjM0LDEwIEBACiAKIAkvKiBwcmltZSB0aGUgZGF0YSBwaGFzZSAqLwogCWlmICgoZnNsX3JlcV90b19kdGQocmVxKSA9PSAwKSkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQkJCS8qIG5vIG1lbSAqLwogCQlnb3RvIHN0YWxsOwogCi0JaWYgKHN0YXR1cykgewotCQlFUlIoIkNhbid0IHJlc3BvbmQgdG8gZ2V0c3RhdHVzIHJlcXVlc3QgXG4iKTsKLQkJZ290byBzdGFsbDsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CiAJcmV0dXJuOwpAQCAtMTM5Nyw3ICsxMzc3LDcgQEAKIAkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKIAkJYnJlYWs7CiAJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKLQkJRVJSKCJVbmV4cGVjdCBlcDAgcGFja2V0cyBcbiIpOworCQlFUlIoIlVuZXhwZWN0IGVwMCBwYWNrZXRzXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXAwc3RhbGwodWRjKTsKQEAgLTE0NzYsNyArMTQ1Niw3IEBACiAJCQkJc3RhdHVzID0gLUVJTFNFUTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQotCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXHJcbiIsCisJCQkJRVJSKCJVbmtub3duIGVycm9yIGhhcyBvY2N1cmVkICgweCV4KSFcbiIsCiAJCQkJCWVycm9ycyk7CiAKIAkJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpCkBAIC0xNDk1LDcgKzE0NzUsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJdGRfY29tcGxldGUrKzsKLQkJCVZEQkcoImRURCB0cmFuc21pdHRlZCBzdWNjZXNzZnVsICIpOworCQkJVkRCRygiZFREIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWwiKTsKIAkJfQogCiAJCWlmIChqICE9IGN1cnJfcmVxLT5kdGRfY291bnQgLSAxKQpAQCAtMTU2OCw5ICsxNTQ4LDYgQEAKIHsKIAl1MzIgc3BlZWQ7CiAKLQlpZiAodWRjLT5idXNfcmVzZXQpCi0JCXVkYy0+YnVzX3Jlc2V0ID0gMDsKLQogCS8qIEJ1cyByZXNldHRpbmcgaXMgZmluaXNoZWQgKi8KIAlpZiAoIShmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpICYgUE9SVFNDWF9QT1JUX1JFU0VUKSkgewogCQkvKiBHZXQgdGhlIHNwZWVkICovCkBAIC0xNjc4LDggKzE2NTUsNiBAQAogCiAJaWYgKGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgJiBQT1JUU0NYX1BPUlRfUkVTRVQpIHsKIAkJVkRCRygiQnVzIHJlc2V0Iik7Ci0JCS8qIEJ1cyBpcyByZXNldGluZyAqLwotCQl1ZGMtPmJ1c19yZXNldCA9IDE7CiAJCS8qIFJlc2V0IGFsbCB0aGUgcXVldWVzLCBpbmNsdWRlIFhELCBkVEQsIEVQIHF1ZXVlCiAJCSAqIGhlYWQgYW5kIFRSIFF1ZXVlICovCiAJCXJlc2V0X3F1ZXVlcyh1ZGMpOwpAQCAtMTc2OCw3ICsxNzQzLDcgQEAKIAl9CiAKIAlpZiAoaXJxX3NyYyAmIChVU0JfU1RTX0VSUiB8IFVTQl9TVFNfU1lTX0VSUikpIHsKLQkJVkRCRygiRXJyb3IgSVJRICV4ICIsIGlycV9zcmMpOworCQlWREJHKCJFcnJvciBJUlEgJXgiLCBpcnFfc3JjKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTE3OTksNyArMTc3NCw3IEBACiAJLyogbG9jayBpcyBuZWVkZWQgYnV0IHdoZXRoZXIgc2hvdWxkIHVzZSB0aGlzIGxvY2sgb3IgYW5vdGhlciAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCi0JZHJpdmVyLT5kcml2ZXIuYnVzID0gMDsKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOwogCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLwogCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMTgwOSw4ICsxNzg0LDggQEAKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKIAkJVkRCRygiYmluZCB0byAlcyAtLT4gJWQiLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOwotCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOwotCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTgxOSwxMiArMTc5NCwxMiBAQAogCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CiAJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOwogCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogYmluZCB0byBkcml2ZXIgJXMgXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaW5kIHRvIGRyaXZlciAlc1xuIiwKIAkJCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIG91dDoKIAlpZiAocmV0dmFsKQotCQlwcmludGsoInJldHZhbCAlZCBcbiIsIHJldHZhbCk7CisJCXByaW50aygiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTg0Miw3ICsxODE3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyKQotCQkodm9pZClvdGdfc2V0X3BlcmlwaGVyYWwodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyLCAwKTsKKwkJb3RnX3NldF9wZXJpcGhlcmFsKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlciwgTlVMTCk7CiAKIAkvKiBzdG9wIERSLCBkaXNhYmxlIGludHIgKi8KIAlkcl9jb250cm9sbGVyX3N0b3AodWRjX2NvbnRyb2xsZXIpOwpAQCAtMTg2MywxMCArMTgzOCwxMCBAQAogCiAJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KIAlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7Ci0JdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKLQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCi0JcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTkyMiw3ICsxODk3LDcgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JzdHMpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJCSJVU0IgU3RhdHVzIFJlZzpcbiIKLQkJCSJEciBTdXNwZW5kOiAlZCIgIlJlc2V0IFJlY2VpdmVkOiAlZCIgIlN5c3RlbSBFcnJvcjogJXMiCisJCQkiRHIgU3VzcGVuZDogJWQgUmVzZXQgUmVjZWl2ZWQ6ICVkIFN5c3RlbSBFcnJvcjogJXMgIgogCQkJIlVTQiBFcnJvciBJbnRlcnJ1cHQ6ICVzXG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9TVFNfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX1NUU19SRVNFVCkgPyAxIDogMCwKQEAgLTE5MzQsMTEgKzE5MDksMTEgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JpbnRyKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCiAJCQkiVVNCIEludHJydXB0IEVuYWJsZSBSZWc6XG4iCi0JCQkiU2xlZXAgRW5hYmxlOiAlZCIgIlNPRiBSZWNlaXZlZCBFbmFibGU6ICVkIgorCQkJIlNsZWVwIEVuYWJsZTogJWQgU09GIFJlY2VpdmVkIEVuYWJsZTogJWQgIgogCQkJIlJlc2V0IEVuYWJsZTogJWRcbiIKLQkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCIKKwkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCAiCiAJCQkiUG9ydCBDaGFuZ2UgRGVjdGVjdGVkIEVuYWJsZTogJWRcbiIKLQkJCSJVU0IgRXJyb3IgSW50ciBFbmFibGU6ICVkIiAiVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAorCQkJIlVTQiBFcnJvciBJbnRyIEVuYWJsZTogJWQgVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9ERVZJQ0VfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX0lOVFJfU09GX0VOKSA/IDEgOiAwLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9SRVNFVF9FTikgPyAxIDogMCwKQEAgLTE5NTEsMjEgKzE5MjYsMjEgQEAKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmZyaW5kZXgpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgRnJhbWUgSW5kZXggUmVnOiIgIkZyYW1lIE51bWJlciBpcyAweCV4XG5cbiIsCisJCQkiVVNCIEZyYW1lIEluZGV4IFJlZzogRnJhbWUgTnVtYmVyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0ZSSU5ERVhfTUFTS1MpKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZGV2aWNlYWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IiAiRGV2aWNlIEFkZHIgaXMgMHgleFxuXG4iLAorCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IERldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0RFVklDRV9BRERSRVNTX01BU0spKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRsaXN0YWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBFbmRwb2ludCBMaXN0IEFkZHJlc3MgUmVnOiIKKwkJCSJVU0IgRW5kcG9pbnQgTGlzdCBBZGRyZXNzIFJlZzogIgogCQkJIkRldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0VQX0xJU1RfQUREUkVTU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwpAQCAtMTk3NCwxMSArMTk0OSwxMiBAQAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJIlVTQiBQb3J0IFN0YXR1cyZDb250cm9sIFJlZzpcbiIKLQkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIiAiUG9ydCBTcGVlZDogJXMgXG4iCi0JCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIiAiUG9ydCBSZXNldDogJXMiCi0JCSJQb3J0IFN1c3BlbmQgTW9kZTogJXMgXG4iICJPdmVyLWN1cnJlbnQgQ2hhbmdlOiAlcyIKKwkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIFBvcnQgU3BlZWQ6ICVzXG4iCisJCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIFBvcnQgUmVzZXQ6ICVzICIKKwkJIlBvcnQgU3VzcGVuZCBNb2RlOiAlc1xuIgorCQkiT3Zlci1jdXJyZW50IENoYW5nZTogJXMgIgogCQkiUG9ydCBFbmFibGUvRGlzYWJsZSBDaGFuZ2U6ICVzXG4iCi0JCSJQb3J0IEVuYWJsZWQvRGlzYWJsZWQ6ICVzIgorCQkiUG9ydCBFbmFibGVkL0Rpc2FibGVkOiAlcyAiCiAJCSJDdXJyZW50IENvbm5lY3QgU3RhdHVzOiAlc1xuXG4iLCAoIHsKIAkJCWNoYXIgKnM7CiAJCQlzd2l0Y2ggKHRtcF9yZWcgJiBQT1JUU0NYX1BUU19GU0xTKSB7CkBAIC0yMDIzLDcgKzE5OTksNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNibW9kZSk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBNb2RlIFJlZzoiICJDb250cm9sbGVyIE1vZGUgaXMgOiAlc1xuXG4iLCAoIHsKKwkJCSJVU0IgTW9kZSBSZWc6IENvbnRyb2xsZXIgTW9kZSBpczogJXNcblxuIiwgKCB7CiAJCQkJY2hhciAqczsKIAkJCQlzd2l0Y2ggKHRtcF9yZWcgJiBVU0JfTU9ERV9DVFJMX01PREVfSE9TVCkgewogCQkJCWNhc2UgVVNCX01PREVfQ1RSTF9NT0RFX0lETEU6CkBAIC0yMDQyLDcgKzIwMTgsNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcHRzZXR1cHN0YXQpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiIgIlNFVFVQIG9uIGVwIDB4JXhcblxuIiwKKwkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiBTRVRVUCBvbiBlcCAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIEVQX1NFVFVQX1NUQVRVU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKQEAgLTIwNTUsMTIgKzIwMzEsMTIgQEAKIAkJbmV4dCArPSB0OwogCX0KIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwb2ludHByaW1lKTsKLQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJFUCBQcmltZSBSZWcgPSBbMHgleF1cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIkVQIFByaW1lIFJlZyA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IHVzYl9zeXNfcmVncy0+c25vb3AxOwotCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlxuU25vb3AxIFJlZyA6ID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlNub29wMSBSZWcgOiA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCkBAIC0yMDg0LDcgKzIwNjAsNyBAQAogCX0gZWxzZSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoIDB4JXggIGJ1ZiAlcFxuIiwKKwkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAweCV4IGJ1ZiAlcFxuIiwKIAkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKIAkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CiAJCQlzaXplIC09IHQ7CkBAIC0yMTEwLDcgKzIwODYsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGgiCisJCQkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAiCiAJCQkJCQkiMHgleCAgYnVmICVwXG4iLAogCQkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCiAJCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CkBAIC0yMjAyLDcgKzIxNzgsNiBAQAogCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1BPV0VSRUQ7CiAJdWRjLT5lcDBfZGlyID0gMDsKIAl1ZGMtPnJlbW90ZV93YWtldXAgPSAwOwkvKiBkZWZhdWx0IHRvIDAgb24gcmVzZXQgKi8KLQlzcGluX2xvY2tfaW5pdCgmdWRjLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI1NCw3ICsyMjI5LDcgQEAKIAl1MzIgZGNjcGFyYW1zOwogCiAJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBkcml2ZXJfbmFtZSkpIHsKLQkJVkRCRygiV3JvbmcgZGV2aWNlXG4iKTsKKwkJVkRCRygiV3JvbmcgZGV2aWNlIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjI2NCwyMyArMjIzOSwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmdWRjX2NvbnRyb2xsZXItPmxvY2spOworCXVkY19jb250cm9sbGVyLT5zdG9wcGVkID0gMTsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCiAJCQkJZHJpdmVyX25hbWUpKSB7Ci0JCUVSUigicmVxdWVzdCBtZW0gcmVnaW9uIGZvciAlcyBmYWlsZWQgXG4iLCBwZGV2LT5uYW1lKTsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlFUlIoInJlcXVlc3QgbWVtIHJlZ2lvbiBmb3IgJXMgZmFpbGVkXG4iLCBwZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAlkcl9yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIWRyX3JlZ3MpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CiAJfQogCiAJdXNiX3N5c19yZWdzID0gKHN0cnVjdCB1c2Jfc3lzX2ludGVyZmFjZSAqKQpAQCAtMjI5MSw3ICsyMjY5LDcgQEAKIAlpZiAoIShkY2NwYXJhbXMgJiBEQ0NQQVJBTVNfREMpKSB7CiAJCUVSUigiVGhpcyBTT0MgZG9lc24ndCBzdXBwb3J0IGRldmljZSByb2xlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAkvKiBHZXQgbWF4IGRldmljZSBlbmRwb2ludHMgKi8KIAkvKiBERU4gaXMgYmlkaXJlY3Rpb25hbCBlcCBudW1iZXIsIG1heF9lcCBkb3VibGVzIHRoZSBudW1iZXIgKi8KQEAgLTIzMDAsMjIgKzIyNzgsMjIgQEAKIAl1ZGNfY29udHJvbGxlci0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIXVkY19jb250cm9sbGVyLT5pcnEpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKHVkY19jb250cm9sbGVyLT5pcnEsIGZzbF91ZGNfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCWRyaXZlcl9uYW1lLCB1ZGNfY29udHJvbGxlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZFxuIiwKIAkJCQl1ZGNfY29udHJvbGxlci0+aXJxLCByZXQpOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KIAlpZiAoc3RydWN0X3VkY19zZXR1cCh1ZGNfY29udHJvbGxlciwgcGRldikpIHsKIAkJRVJSKCJDYW4ndCBpbml0aWFsaXplIHVkYyBkYXRhIHN0cnVjdHVyZVxuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB1c2IgaHcgcmVnIGV4Y2VwdCBmb3IgcmVncyBmb3IgRVAsCkBAIC0yMzM2LDcgKzIzMTQsNyBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAkvKiBzZXR1cCBRSCBhbmQgZXBjdHJsIGZvciBlcDAgKi8KIAllcDBfc2V0dXAodWRjX2NvbnRyb2xsZXIpOwpAQCAtMjM2NiwyMCArMjM0NCwyMiBAQAogCQkJRFREX0FMSUdOTUVOVCwgVURDX0RNQV9CT1VOREFSWSk7CiAJaWYgKHVkY19jb250cm9sbGVyLT50ZF9wb29sID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI0OworCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCX0KIAljcmVhdGVfcHJvY19maWxlKCk7CiAJcmV0dXJuIDA7CiAKLWVycjQ6CitlcnJfdW5yZWdpc3RlcjoKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwotZXJyMzoKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCB1ZGNfY29udHJvbGxlcik7Ci1lcnIyOgorZXJyX2lvdW5tYXA6CiAJaW91bm1hcChkcl9yZWdzKTsKLWVycjE6CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKK2Vycl9rZnJlZToKIAlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjksNyArMjQ0OSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Ci0JcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWQgXG4iLCBkcml2ZXJfZGVzYyk7CisJcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKIH0KIAogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCmluZGV4IDYxMzE3NTIuLmU2M2VmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKQEAgLTQyNCwxNiArNDI0LDYgQEAKIC8qIENvbnRyb2xsZXIgZG1hIGJvdW5kYXJ5ICovCiAjZGVmaW5lIFVEQ19ETUFfQk9VTkRBUlkJCQkweDEwMDAKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogIyMjIyMgZW51bSBkYXRhCi0qLwotdHlwZWRlZiBlbnVtIHsKLQllX1VMUEksCi0JZV9VVE1JXzhCSVQsCi0JZV9VVE1JXzE2QklULAotCWVfU0VSSUFMCi19IGVfUGh5SW50ZXJmYWNlOwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiAjIyMgZHJpdmVyIHByaXZhdGUgZGF0YQpAQCAtNDY5LDkgKzQ1OSw5IEBACiAjZGVmaW5lIEVQX0RJUl9PVVQJMAogCiBzdHJ1Y3QgZnNsX3VkYyB7Ci0KIAlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLwogCXN0cnVjdCBmc2xfZXAgKmVwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2VwOwogCXVuc2lnbmVkIGludCBpcnE7CkBAIC00OTIsMjAgKzQ4MiwxMyBAQAogCXNpemVfdCBlcF9xaF9zaXplOwkJLyogc2l6ZSBhZnRlciBhbGlnbm1lbnQgYWRqdXN0bWVudCovCiAJZG1hX2FkZHJfdCBlcF9xaF9kbWE7CQkvKiBkbWEgYWRkcmVzcyBvZiBRSCAqLwogCi0JdTMyIG1heF9waXBlczsJCS8qIERldmljZSBtYXggcGlwZXMgKi8KLQl1MzIgbWF4X3VzZV9lbmRwdHM7CS8qIE1heCBlbmRwb2ludGVzIHRvIGJlIHVzZWQgKi8KLQl1MzIgYnVzX3Jlc2V0OwkJLyogRGV2aWNlIGlzIGJ1cyByZXNldGluZyAqLworCXUzMiBtYXhfcGlwZXM7ICAgICAgICAgIC8qIERldmljZSBtYXggcGlwZXMgKi8KIAl1MzIgcmVzdW1lX3N0YXRlOwkvKiBVU0Igc3RhdGUgdG8gcmVzdW1lICovCiAJdTMyIHVzYl9zdGF0ZTsJCS8qIFVTQiBjdXJyZW50IHN0YXRlICovCi0JdTMyIHVzYl9uZXh0X3N0YXRlOwkvKiBVU0IgbmV4dCBzdGF0ZSAqLwogCXUzMiBlcDBfc3RhdGU7CQkvKiBFbmRwb2ludCB6ZXJvIHN0YXRlICovCiAJdTMyIGVwMF9kaXI7CQkvKiBFbmRwb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCiAJCQkJICAgVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCAqLwotCXUzMiB1c2Jfc29mX2NvdW50OwkvKiBTT0YgY291bnQgKi8KLQl1MzIgZXJyb3JzOwkJLyogVVNCIEVSUk9ScyBjb3VudCAqLwogCXU4IGRldmljZV9hZGRyZXNzOwkvKiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8KLQotCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiB0byBtYWtlIHN1cmUgcmVsZWFzZSgpIGlzIGRvbmUgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggMTdkOTkwNS4uNGUzMTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtMTUxLDYgKzE1MSwxMyBAQAogI2RlZmluZQlnYWRnZXRfaXNfbTY2NTkyKGcpCTAKICNlbmRpZgogCisvKiBGcmVlc2NhbGUgQ1BNL1FFIFVEQyBTVVBQT1JUICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJIXN0cmNtcCgiZnNsX3FlX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJMAorI2VuZGlmCisKIAogLy8gQ09ORklHX1VTQl9HQURHRVRfU1gyCiAvLyBDT05GSUdfVVNCX0dBREdFVF9BVTFYMDAKQEAgLTIxNiw2ICsyMjMsOCBAQAogCQlyZXR1cm4gMHgyMDsKIAllbHNlIGlmIChnYWRnZXRfaXNfbTY2NTkyKGdhZGdldCkpCiAJCXJldHVybiAweDIxOworCWVsc2UgaWYgKGdhZGdldF9pc19mc2xfcWUoZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4MjI7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggZWE4NjUxZS4uNjBkM2Y5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTM1LDYgKzM1LDIxIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwogTU9EVUxFX0FVVEhPUigiQmVuIFdpbGxpYW1zb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIApAQCAtMjA3LDcgKzIyMiw3IEBACiAJICogcG93ZXIgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLiBJcyBpdCBzZWxmcG93ZXJlZD8KIAkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSwKLQkuYk1heFBvd2VyID0JCTEsCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogLyogQi4zLjEgIFN0YW5kYXJkIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCA1Y2ZiNWViLi44YWU3MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCiAJLyogZXBfcmVzZXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwogCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+d2VkZ2VkID0gMDsKIAllcC0+b3V0X292ZXJmbG93ID0gMDsKIAogCS8qIHNldCBzcGVlZC1kZXBlbmRlbnQgbWF4IHBhY2tldDsgbWF5IGtpY2sgaW4gaGlnaCBiYW5kd2lkdGggKi8KQEAgLTEyMTgsNyArMTIxOSw3IEBACiBzdGF0aWMgaW50IG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCk7CiAKIHN0YXRpYyBpbnQKLW5ldDIyODBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQorbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUsIGludCB3ZWRnZWQpCiB7CiAJc3RydWN0IG5ldDIyODBfZXAJKmVwOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTIzOSwxNiArMTI0MCwyMSBAQAogCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZSAmJiBuZXQyMjgwX2ZpZm9fc3RhdHVzIChfZXApICE9IDApCiAJCXJldHZhbCA9IC1FQUdBSU47CiAJZWxzZSB7Ci0JCVZERUJVRyAoZXAtPmRldiwgIiVzICVzIGhhbHRcbiIsIF9lcC0+bmFtZSwKLQkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIik7CisJCVZERUJVRyAoZXAtPmRldiwgIiVzICVzICVzXG4iLCBfZXAtPm5hbWUsCisJCQkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsCisJCQkJd2VkZ2VkID8gIndlZGdlIiA6ICJoYWx0Iik7CiAJCS8qIHNldC9jbGVhciwgdGhlbiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCiAJCWlmICh2YWx1ZSkgewogCQkJaWYgKGVwLT5udW0gPT0gMCkKIAkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CiAJCQllbHNlCiAJCQkJc2V0X2hhbHQgKGVwKTsKLQkJfSBlbHNlCisJCQlpZiAod2VkZ2VkKQorCQkJCWVwLT53ZWRnZWQgPSAxOworCQl9IGVsc2UgewogCQkJY2xlYXJfaGFsdCAoZXApOworCQkJZXAtPndlZGdlZCA9IDA7CisJCX0KIAkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjU3LDYgKzEyNjMsMjAgQEAKIH0KIAogc3RhdGljIGludAorbmV0MjI4MF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK25ldDIyODBfc2V0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlpZiAoIV9lcCB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG5ldDIyODBfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKIG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CkBAIC0xMzAyLDYgKzEzMjIsNyBAQAogCS5kZXF1ZXVlCT0gbmV0MjI4MF9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gbmV0MjI4MF9zZXRfaGFsdCwKKwkuc2V0X3dlZGdlCT0gbmV0MjI4MF9zZXRfd2VkZ2UsCiAJLmZpZm9fc3RhdHVzCT0gbmV0MjI4MF9maWZvX3N0YXR1cywKIAkuZmlmb19mbHVzaAk9IG5ldDIyODBfZmlmb19mbHVzaCwKIH07CkBAIC0yNDEwLDkgKzI0MzEsMTQgQEAKIAkJCQlnb3RvIGRvX3N0YWxsOwogCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgd19pbmRleCkpID09IDApCiAJCQkJZ290byBkb19zdGFsbDsKLQkJCWNsZWFyX2hhbHQgKGUpOworCQkJaWYgKGUtPndlZGdlZCkgeworCQkJCVZERUJVRyhkZXYsICIlcyB3ZWRnZWQsIGhhbHQgbm90IGNsZWFyZWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCVZERUJVRyhkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJY2xlYXJfaGFsdChlKTsKKwkJCX0KIAkJCWFsbG93X3N0YXR1cyAoZXApOwotCQkJVkRFQlVHIChkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CiAJCQlnb3RvIG5leHRfZW5kcG9pbnRzOwogCQkJfQogCQkJYnJlYWs7CkBAIC0yNDI3LDYgKzI0NTMsOCBAQAogCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB3X2luZGV4KSkgPT0gMCkKIAkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKGUtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJCQlnb3RvIGRvX3N0YWxsOwogCQkJc2V0X2hhbHQgKGUpOwogCQkJYWxsb3dfc3RhdHVzIChlcCk7CiAJCQlWREVCVUcgKGRldiwgIiVzIHNldCBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaAppbmRleCA4MWE3MWRiLi5jMzY4NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKQEAgLTEwOSw2ICsxMDksNyBAQAogCQkJCQkJaW5fZmlmb192YWxpZGF0ZSA6IDEsCiAJCQkJCQlvdXRfb3ZlcmZsb3cgOiAxLAogCQkJCQkJc3RvcHBlZCA6IDEsCisJCQkJCQl3ZWRnZWQgOiAxLAogCQkJCQkJaXNfaW4gOiAxLAogCQkJCQkJaXNfaXNvIDogMSwKIAkJCQkJCXJlc3BvbmRlZCA6IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IGJiNTRjY2EuLjM0ZTllMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0yMzEzLDYgKzIzMTMsMTMgQEAKIAogCXRtcCA9IG9tYXBfcmVhZGwoT1RHX1JFVik7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCS8qCisJCSAqIFJFVklTSVQ6IE5vdCBjbGVhciBob3cgdGhpcyB3b3JrcyBvbiBPTUFQMi4gIHRyYW5zCisJCSAqIGlzIEFORGVkIHRvIHByb2R1Y2UgYml0cyA3IGFuZCA4LCB3aGljaCBtaWdodCBtYWtlCisJCSAqIHNlbnNlIGZvciBVU0JfVFJBTlNDRUlWRVJfQ1RSTCBvbiBPTUFQMSwKKwkJICogYnV0IHdpdGggQ09OVFJPTF9ERVZDT05GLCB0aGVzZSBiaXRzIGhhdmUgc29tZXRoaW5nIHRvCisJCSAqIGRvIHdpdGggdGhlIGZyYW1lIGFkanVzdG1lbnQgY291bnRlciBhbmQgTWNCU1AyLgorCQkgKi8KIAkJY3RybF9uYW1lID0gImNvbnRyb2xfZGV2Y29uZiI7CiAJCXRyYW5zID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCBlMDA5MDA4Li41YTMwMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTUzLDYgKzUzLDIwIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJQcmludGVyIEdhZGdldCIKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMDA3IE9DVCAwNiIKIApAQCAtMjM4LDcgKzI1Miw3IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlERVZfQ09ORklHX1ZBTFVFLAogCS5pQ29uZmlndXJhdGlvbiA9CTAsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxCS8qIFNlbGYtUG93ZXJlZCAqLworCS5iTWF4UG93ZXIgPQkJQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGZfZGVzYyA9IHsKQEAgLTEyNjQsOCArMTI3OCw3IEBACiAJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KIAlpZiAodmFsdWUgPj0gMCkgewogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwotCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGgKLQkJCQkmJiAodmFsdWUgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGg7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKSB7CiAJCQlEQkcoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CkBAIC0xMzYwLDggKzEzNzMsOCBAQAogCiAKIAkvKiBTZXR1cCB0aGUgc3lzZnMgZmlsZXMgZm9yIHRoZSBwcmludGVyIGdhZGdldC4gKi8KLQlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2dhZGdldF9jbGFzcywgTlVMTCwKLQkJCQkJICBnX3ByaW50ZXJfZGV2bm8sIE5VTEwsICJnX3ByaW50ZXIiKTsKKwlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9nYWRnZXRfY2xhc3MsIE5VTEwsIGdfcHJpbnRlcl9kZXZubywKKwkJCQkgIE5VTEwsICJnX3ByaW50ZXIiKTsKIAlpZiAoSVNfRVJSKGRldi0+cGRldikpIHsKIAkJRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2U6IGdfcHJpbnRlclxuIik7CiAJCWdvdG8gZmFpbDsKQEAgLTE0NjMsNyArMTQ3Niw2IEBACiAJaWYgKGdhZGdldC0+aXNfb3RnKSB7CiAJCW90Z19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKIAkJY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJY29uZmlnX2Rlc2MuYk1heFBvd2VyID0gNDsKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDdjYmM3OGEuLmJjZjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggNzIyOGU4NS4uOGMyNmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTU3LDExICs1Nyw2IEBACiAjZGVmaW5lIHJuZGlzX2RlYnVnCQkwCiAjZW5kaWYKIAotI2RlZmluZSBEQkcoc3RyLGFyZ3MuLi4pIGRvIHsgXAotCWlmIChybmRpc19kZWJ1ZykgXAotCQlwcl9kZWJ1ZyhzdHIgLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgUk5ESVNfTUFYX0NPTkZJR1MJMQogCiAKQEAgLTE4Myw5ICsxNzgsOSBAQAogCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJxdWVyeSBPSUQgJTA4eCB2YWx1ZSwgbGVuICVkOlxuIiwgT0lELCBidWZfbGVuKTsKKwkJcHJfZGVidWcoInF1ZXJ5IE9JRCAlMDh4IHZhbHVlLCBsZW4gJWQ6XG4iLCBPSUQsIGJ1Zl9sZW4pOwogCQlmb3IgKGkgPSAwOyBpIDwgYnVmX2xlbjsgaSArPSAxNikgewotCQkJREJHKCIlMDNkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLCBpLAorCQkJcHJfZGVidWcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaV0pLAogCQkJCWdldF91bmFsaWduZWRfbGUzMigmYnVmW2kgKyA0XSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDhdKSwKQEAgLTIwOSw3ICsyMDQsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUOgotCQlEQkcoIiVzOiBPSURfR0VOX1NVUFBPUlRFRF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9TVVBQT1JURURfTElTVFxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzaXplb2YgKG9pZF9zdXBwb3J0ZWRfbGlzdCk7CiAJCWNvdW50ICA9IGxlbmd0aCAvIHNpemVvZiAodTMyKTsKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0yMTksNyArMjE0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVM6Ci0JCURCRygiJXM6IE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJLyogQm9ndXMgcXVlc3Rpb24hCiAJCSAqIEhhcmR3YXJlIG11c3QgYmUgcmVhZHkgdG8gcmVjZWl2ZSBoaWdoIGxldmVsIHByb3RvY29scy4KIAkJICogQlRXOgpAQCAtMjMyLDE0ICsyMjcsMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQ6Ci0JCURCRygiJXM6IE9JRF9HRU5fTUVESUFfU1VQUE9SVEVEXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NRURJQV9TVVBQT1JURURcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGl1bSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01FRElBX0lOX1VTRToKLQkJREJHKCIlczogT0lEX0dFTl9NRURJQV9JTl9VU0VcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01FRElBX0lOX1VTRVxuIiwgX19mdW5jX18pOwogCQkvKiBvbmUgbWVkaXVtLCBvbmUgdHJhbnNwb3J0Li4uIChtYXliZSB5b3UgZG8gaXQgYmV0dGVyKSAqLwogCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI0Nyw3ICsyNDIsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yNTgsNyArMjUzLDcgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTElOS19TUEVFRDoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fTElOS19TUEVFRFxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaWFfc3RhdGUKIAkJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKIAkJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKQEAgLTI3MCw3ICsyNjUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yODAsNyArMjc1LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkVcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAogCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOwpAQCAtMjkwLDcgKzI4NSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fVkVORE9SX0lEOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9JRFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0lEXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvcklEKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI5OCw3ICsyOTMsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTjoKLQkJREJHKCIlczogT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTlxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzdHJsZW4gKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IpOwogCQltZW1jcHkgKG91dGJ1ZiwKIAkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IsIGxlbmd0aCk7CkBAIC0zMDYsNyArMzAxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTlxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIENyZWF0ZWQgYXMgTEUgKi8KIAkJKm91dGJ1ZiA9IHJuZGlzX2RyaXZlcl92ZXJzaW9uOwogCQlyZXR2YWwgPSAwOwpAQCAtMzE0LDE0ICszMDksMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6Ci0JCURCRygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVJcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgqcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmZpbHRlcik7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRVxuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSTkRJU19NQVhfVE9UQUxfU0laRSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwpAQCAtMzI5LDE0ICszMjQsMTQgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVM6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCiAJCQkJCQkubWVkaWFfc3RhdGUpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU06Ci0JCURCRygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9QSFlTSUNBTF9NRURJVU1cbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKQEAgLTM0Niw3ICszNDEsNyBAQAogCSAqIHZlcnNpb25zIGVtaXQgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLiBET0NVTUVOVCBBTEwgVEhFU0UhCiAJICovCiAJY2FzZSBPSURfR0VOX01BQ19PUFRJT05TOgkJLyogZnJvbSBXaW5NRSAqLwotCQlEQkcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQUNfT1BUSU9OU1xuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKIAkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAogCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOwpAQCAtMzU4LDcgKzM1Myw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfT0s6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfT0tcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+dHhfZXJyb3JzIC0gc3RhdHMtPnR4X2Ryb3BwZWQpOwpAQCAtMzY5LDcgKzM2NCw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1JDVl9PSzoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+cnhfZXJyb3JzIC0gc3RhdHMtPnJ4X2Ryb3BwZWQpOwpAQCAtMzgwLDcgKzM3NSw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfRVJST1JcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX0VSUk9SXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTM5MCw3ICszODUsNyBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOwogCQlpZiAoc3RhdHMpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+cnhfZXJyb3JzKTsKIAkJCXJldHZhbCA9IDA7CkBAIC0zOTksNyArMzk0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgotCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHN0YXRzKSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoc3RhdHMtPnJ4X2Ryb3BwZWQpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQxMCw3ICs0MDUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6Ci0JCURCRygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCWxlbmd0aCA9IEVUSF9BTEVOOwogCQkJbWVtY3B5IChvdXRidWYsCkBAIC00MjIsNyArNDE3LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1NcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQlsZW5ndGggPSBFVEhfQUxFTjsKIAkJCW1lbWNweSAob3V0YnVmLApAQCAtNDM0LDcgKzQyOSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKLQkJREJHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CiAJCXJldHZhbCA9IDA7CkBAIC00NDIsMjEgKzQzNywyMSBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6Ci0JCURCRygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEXzgwMl8zX01BQ19PUFRJT05TOgotCQlEQkcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAKIAkvKiBpZWVlODAyLjMgc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTQpICovCiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UOgotCQlEQkcoIiVzOiBPSURfODAyXzNfUkNWX0VSUk9SX0FMSUdOTUVOVFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQ2NSwxNCArNDYwLDE0IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CkBAIC01MDQsOSArNDk5LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CisJCXByX2RlYnVnKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CiAJCWZvciAoaSA9IDA7IGkgPCBidWZfbGVuOyBpICs9IDE2KSB7Ci0JCQlEQkcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCisJCQlwcl9kZWJ1ZygiJTAzZDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgaSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpXSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDRdKSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpICsgOF0pLApAQCAtNTI1LDcgKzUyMCw3IEBACiAJCSAqCU1VTFRJQ0FTVCwgQUxMX01VTFRJQ0FTVCwgQlJPQURDQVNUCiAJCSAqLwogCQkqcGFyYW1zLT5maWx0ZXIgPSAodTE2KWdldF91bmFsaWduZWRfbGUzMihidWYpOwotCQlEQkcoIiVzOiBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAlMDh4XG4iLAorCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgKnBhcmFtcy0+ZmlsdGVyKTsKIAogCQkvKiB0aGlzIGNhbGwgaGFzIGEgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3Q6ICBpdCdzCkBAIC01NDcsNyArNTQyLDcgQEAKIAogCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgogCQkvKiBJIHRoaW5rIHdlIGNhbiBpZ25vcmUgdGhpcyAqLwotCQlEQkcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTYwNiw3ICs2MDEsNyBAQAogCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOwogCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKLQkvLyBEQkcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX2Z1bmNfXywgY3B1X3RvX2xlMzIoYnVmLT5PSUQpKTsKKwkvKiBwcl9kZWJ1ZygiJXM6IE9JRCA9ICUwOFhcbiIsIF9fZnVuY19fLCBjcHVfdG9fbGUzMihidWYtPk9JRCkpOyAqLwogCWlmICghcGFyYW1zLT5kZXYpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKQEAgLTY1OSwxNSArNjU0LDE1IEBACiAJQnVmT2Zmc2V0ID0gbGUzMl90b19jcHUgKGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQpOwogCiAjaWZkZWYJVkVSQk9TRV9ERUJVRwotCURCRygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOwotCURCRygiJXM6IE9mZnNldDogJWRcbiIsIF9fZnVuY19fLCBCdWZPZmZzZXQpOwotCURCRygiJXM6IEluZm9CdWZmZXI6ICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOworCXByX2RlYnVnKCIlczogT2Zmc2V0OiAlZFxuIiwgX19mdW5jX18sIEJ1Zk9mZnNldCk7CisJcHJfZGVidWcoIiVzOiBJbmZvQnVmZmVyOiAiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQnVmTGVuZ3RoOyBpKyspIHsKLQkJREJHKCIlMDJ4ICIsICooKCh1OCAqKSBidWYpICsgaSArIDggKyBCdWZPZmZzZXQpKTsKKwkJcHJfZGVidWcoIiUwMnggIiwgKigoKHU4ICopIGJ1ZikgKyBpICsgOCArIEJ1Zk9mZnNldCkpOwogCX0KIAotCURCRygiXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKICNlbmRpZgogCiAJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOwpAQCAtODIxLDE0ICs4MTYsMTQgQEAKIAkvKiBGb3IgVVNCOiByZXNwb25zZXMgbWF5IHRha2UgdXAgdG8gMTAgc2Vjb25kcyAqLwogCXN3aXRjaCAoTXNnVHlwZSkgewogCWNhc2UgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAorCQlwcl9kZWJ1ZygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAogCQkJX19mdW5jX18gKTsKIAkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX0lOSVRJQUxJWkVEOwogCQlyZXR1cm4gIHJuZGlzX2luaXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfaW5pdF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19IQUxUX01TRzoKLQkJREJHKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCisJCXByX2RlYnVnKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlwYXJhbXMtPnN0YXRlID0gUk5ESVNfVU5JTklUSUFMSVpFRDsKIAkJaWYgKHBhcmFtcy0+ZGV2KSB7CkBAIC04NDYsNyArODQxLDcgQEAKIAkJCQkJKHJuZGlzX3NldF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19SRVNFVF9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX1JFU0VUX01TR1xuIiwKKwkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19SRVNFVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlyZXR1cm4gcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfcmVzZXRfbXNnX3R5cGUgKikgYnVmKTsKQEAgLTg1NCw3ICs4NDksNyBAQAogCWNhc2UgUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRzoKIAkJLyogRm9yIFVTQjogaG9zdCBkb2VzIHRoaXMgZXZlcnkgNSBzZWNvbmRzICovCiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAorCQkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAogCQkJCV9fZnVuY19fICk7CiAJCXJldHVybiBybmRpc19rZWVwYWxpdmVfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkJIChybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUgKikKQEAgLTg3MCw3ICs4NjUsNyBAQAogCQl7CiAJCQl1bnNpZ25lZCBpOwogCQkJZm9yIChpID0gMDsgaSA8IE1zZ0xlbmd0aDsgaSArPSAxNikgewotCQkJCURCRygiJTAzZDogIgorCQkJCXByX2RlYnVnKCIlMDNkOiAiCiAJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgogCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCkBAIC05MDUsMTggKzkwMCwxOCBAQAogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQgPSAxOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnJlc3BfYXZhaWwgPSByZXNwX2F2YWlsOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnYgPSB2OwotCQkJREJHKCIlczogY29uZmlnTnIgPSAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJcHJfZGVidWcoIiVzOiBjb25maWdOciA9ICVkXG4iLCBfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gaTsKIAkJfQogCX0KLQlEQkcoImZhaWxlZFxuIik7CisJcHJfZGVidWcoImZhaWxlZFxuIik7CiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAogdm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpCiB7Ci0JREJHKCIlczogXG4iLCBfX2Z1bmNfXyApOworCXByX2RlYnVnKCIlczogXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKIAlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnVzZWQgPSAwOwpAQCAtOTI2LDcgKzkyMSw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fZGV2KHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKmNkY19maWx0ZXIpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKQEAgLTkzOSw3ICs5MzQsNyBAQAogCiBpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghdmVuZG9yRGVzY3IpIHJldHVybiAtMTsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKIApAQCAtOTUxLDcgKzk0Niw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKQogewotCURCRygiJXM6ICV1ICV1XG4iLCBfX2Z1bmNfXywgbWVkaXVtLCBzcGVlZCk7CisJcHJfZGVidWcoIiVzOiAldSAldVxuIiwgX19mdW5jX18sIG1lZGl1bSwgc3BlZWQpOwogCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOwogCiAJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0gPSBtZWRpdW07CkBAIC0xMTE0LDcgKzExMDksNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoZmxfc3BlZWQpIHAtPnNwZWVkID0gc3BlZWQ7Ci0JCQllbHNlIERCRygiJWMgaXMgbm90IHZhbGlkXG4iLCBjKTsKKwkJCWVsc2UgcHJfZGVidWcoIiVjIGlzIG5vdCB2YWxpZFxuIiwgYyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTU5LDEyICsxMTU0LDEyIEBACiAJCQkJCSZybmRpc19wcm9jX2ZvcHMsCiAJCQkJCSh2b2lkICopKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSkpKSkKIAkJewotCQkJREJHKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXMgOnJlbW92ZSBlbnRyaWVzIiwgX19mdW5jX18pOwogCQkJd2hpbGUgKGkpIHsKIAkJCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCAtLWkpOwogCQkJCXJlbW92ZV9wcm9jX2VudHJ5IChuYW1lLCBOVUxMKTsKIAkJCX0KLQkJCURCRygiXG4iKTsKKwkJCXByX2RlYnVnKCJcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCAyOWQxM2ViLi40OGY1MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnNldHVwCi0JCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMKSB7CisJCQl8fCBkcml2ZXItPnNwZWVkIDwgVVNCX1NQRUVEX0ZVTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGRyaXZlcjogYmluZCAlcCBzZXR1cCAlcCBzcGVlZCAlZFxuIiwKIAkJCWRyaXZlci0+YmluZCwgZHJpdmVyLT5zZXR1cCwgZHJpdmVyLT5zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IGIzNjk5YWYuLjM3ODc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTMwLDYgKzMwLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfYWNtLmMiCisjaW5jbHVkZSAiZl9vYmV4LmMiCisjaW5jbHVkZSAiZl9zZXJpYWwuYyIKKyNpbmNsdWRlICJ1X3NlcmlhbC5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KICoKICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKQEAgLTM4LDYgKzU3LDcgQEAKICNkZWZpbmUgR1NfVkVORE9SX0lECQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KICNkZWZpbmUgR1NfUFJPRFVDVF9JRAkJCTB4YTRhNgkvKiBMaW51eC1VU0IgU2VyaWFsIEdhZGdldCAqLwogI2RlZmluZSBHU19DRENfUFJPRFVDVF9JRAkJMHhhNGE3CS8qIC4uLiBhcyBDREMtQUNNICovCisjZGVmaW5lIEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQJCTB4YTRhOQkvKiAuLi4gYXMgQ0RDLU9CRVggKi8KIAogLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KIApAQCAtMTA3LDYgKzEyNywxMCBAQAogbW9kdWxlX3BhcmFtKHVzZV9hY20sIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfYWNtLCAiVXNlIENEQyBBQ00sIGRlZmF1bHQ9eWVzIik7CiAKK3N0YXRpYyBpbnQgdXNlX29iZXggPSBmYWxzZTsKK21vZHVsZV9wYXJhbSh1c2Vfb2JleCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9vYmV4LCAiVXNlIENEQyBPQkVYLCBkZWZhdWx0PW5vIik7CisKIHN0YXRpYyB1bnNpZ25lZCBuX3BvcnRzID0gMTsKIG1vZHVsZV9wYXJhbShuX3BvcnRzLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobl9wb3J0cywgIm51bWJlciBvZiBwb3J0cyB0byBjcmVhdGUsIGRlZmF1bHQ9MSIpOwpAQCAtMTIxLDYgKzE0NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IG5fcG9ydHMgJiYgc3RhdHVzID09IDA7IGkrKykgewogCQlpZiAodXNlX2FjbSkKIAkJCXN0YXR1cyA9IGFjbV9iaW5kX2NvbmZpZyhjLCBpKTsKKwkJZWxzZSBpZiAodXNlX29iZXgpCisJCQlzdGF0dXMgPSBvYmV4X2JpbmRfY29uZmlnKGMsIGkpOwogCQllbHNlCiAJCQlzdGF0dXMgPSBnc2VyX2JpbmRfY29uZmlnKGMsIGkpOwogCX0KQEAgLTEzMyw3ICsxNTksNiBAQAogCS8qIC5iQ29uZmlndXJhdGlvblZhbHVlID0gZih1c2VfYWNtKSAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnc19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKQEAgLTIzMSw2ICsyNTYsMTIgQEAKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CiAJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CisJfSBlbHNlIGlmICh1c2Vfb2JleCkgeworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKKwkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkdlbmVyaWMgU2VyaWFsIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKaW5kZXggMzc5MWU2Mi4uNjY5NDhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCkBAIC01Miw3ICs1Miw3IEBACiAgKiB0aGlzIHNpbmdsZSAicGh5c2ljYWwiIGxpbmsgdG8gYmUgdXNlZCBieSBtdWx0aXBsZSB2aXJ0dWFsIGxpbmtzLikKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIyOS1NYXktMjAwOCIKKyNkZWZpbmUgVUVUSF9fVkVSU0lPTgkiMjktTWF5LTIwMDgiCiAKIHN0cnVjdCBldGhfZGV2IHsKIAkvKiBsb2NrIGlzIGhlbGQgd2hpbGUgYWNjZXNzaW5nIHBvcnRfdXNiCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAogCXN0cmxjcHkocC0+ZHJpdmVyLCAiZ19ldGhlciIsIHNpemVvZiBwLT5kcml2ZXIpOwotCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPnZlcnNpb24sIFVFVEhfX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKIAlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CiAJc3RybGNweShwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+Z2FkZ2V0LT5kZXYpLCBzaXplb2YgcC0+YnVzX2luZm8pOwogfQpAQCAtODczLDYgKzg3MywxMyBAQAogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJCWRldi0+cG9ydF91c2IgPSBsaW5rOwogCQlsaW5rLT5pb3BvcnQgPSBkZXY7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkgeworCQkJaWYgKGxpbmstPm9wZW4pCisJCQkJbGluay0+b3BlbihsaW5rKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaW5rLT5jbG9zZSkKKwkJCQlsaW5rLT5jbG9zZShsaW5rKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKaW5kZXggYWYzOTEwZC4uMzAwZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKQEAgLTYyLDUgKzYyLDYgQEAKIC8qIGZ1bmN0aW9ucyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbnMgYnkgYSBjb25maWcgb3IgZ2FkZ2V0IGRyaXZlciAqLwogaW50IGFjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKIGludCBnc2VyX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOworaW50IG9iZXhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBwb3J0X251bSk7CiAKICNlbmRpZiAvKiBfX1VfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IGFhMGJkNGYuLjM2MWQ5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtNTksNiArNTksMjMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCisjaW5jbHVkZSAiZl9zb3VyY2VzaW5rLmMiCisjaW5jbHVkZSAiZl9sb29wYmFjay5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiQ2luY28gZGUgTWF5byAyMDA4IgogCiBzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gIkdhZGdldCBaZXJvIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwppbmRleCBiMGY4ZWQ1Li4wY2I1M2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0zNTgsNyArMzU4LDggQEAKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzOwogCXN0cnVjdCBtdXRleCBtdXRleDsJLyogcHJvdGVjdCBmaWxsaW5nIG9mIGJ1ZmZlciAqLwogCXNpemVfdCBjb3VudDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZpbGxlZCBpbnRvIGJ1ZmZlciAqLwotCWNoYXIgKnBhZ2U7CisJY2hhciAqb3V0cHV0X2J1ZjsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKIH07CiAKICNkZWZpbmUgc3BlZWRfY2hhcihpbmZvMSkgKHsgY2hhciB0bXA7IFwKQEAgLTQ4OCw4ICs0ODksOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAkqbmV4dCA9IDA7CiAKQEAgLTUxMCw3ICs1MTEsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHN0cmxlbihidWYtPnBhZ2UpOworCXJldHVybiBzdHJsZW4oYnVmLT5vdXRwdXRfYnVmKTsKIH0KIAogI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKQEAgLTUzMSw4ICs1MzIsOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBlaGNpLT5wZXJpb2RpY19zaXplKTsKIAlzaXplIC09IHRlbXA7CkBAIC01NjgsMTQgKzU2OSwxNiBAQAogCQkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKIAkJCQkJaWYgKHNlZW4gW3RlbXBdLnB0ciAhPSBwLnB0cikKIAkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpCisJCQkJCWlmIChwLnFoLT5xaF9uZXh0LnB0cikgewogCQkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKIAkJCQkJCQkiIC4uLiIpOwotCQkJCQlwLnB0ciA9IE5VTEw7CisJCQkJCQlzaXplIC09IHRlbXA7CisJCQkJCQluZXh0ICs9IHRlbXA7CisJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLwotCQkJCWlmICh0ZW1wID09IHNlZW5fY291bnQgJiYgcC5wdHIpIHsKKwkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50KSB7CiAJCQkJCXUzMglzY3JhdGNoID0gaGMzMl90b19jcHVwKGVoY2ksCiAJCQkJCQkJJnAucWgtPmh3X2luZm8xKTsKIAkJCQkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CkBAIC02NDksNyArNjUyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWtmcmVlIChzZWVuKTsKIAotCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworCXJldHVybiBidWYtPmFsbG9jX3NpemUgLSBzaXplOwogfQogI3VuZGVmIERCR19TQ0hFRF9MSU1JVAogCkBAIC02NjUsMTQgKzY2OCwxNCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CiAJCXNpemUgPSBzY25wcmludGYgKG5leHQsIHNpemUsCi0JCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJCSIlc1xuIgogCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIiwKIAkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCkBAIC02ODQsNyArNjg3LDcgQEAKIAkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVycyAqLwogCWkgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAotCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCSJidXMgJXMsIGRldmljZSAlc1xuIgogCQkiJXNcbiIKIAkJIkVIQ0kgJXguJTAyeCwgaGNkIHN0YXRlICVkXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLApAQCAtODA4LDcgKzgxMSw3IEBACiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKKwlyZXR1cm4gYnVmLT5hbGxvY19zaXplIC0gc2l6ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLApAQCAtODIyLDYgKzgyNSw3IEBACiAJCWJ1Zi0+YnVzID0gYnVzOwogCQlidWYtPmZpbGxfZnVuYyA9IGZpbGxfZnVuYzsKIAkJbXV0ZXhfaW5pdCgmYnVmLT5tdXRleCk7CisJCWJ1Zi0+YWxsb2Nfc2l6ZSA9IFBBR0VfU0laRTsKIAl9CiAKIAlyZXR1cm4gYnVmOwpAQCAtODMxLDEwICs4MzUsMTAgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghYnVmLT5wYWdlKQotCQlidWYtPnBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikKKwkJYnVmLT5vdXRwdXRfYnVmID0gKGNoYXIgKil2bWFsbG9jKGJ1Zi0+YWxsb2Nfc2l6ZSk7CiAKLQlpZiAoIWJ1Zi0+cGFnZSkgeworCWlmICghYnVmLT5vdXRwdXRfYnVmKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTg2Nyw3ICs4NzEsNyBAQAogCW11dGV4X3VubG9jaygmYnVmLT5tdXRleCk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgbGVuLCBvZmZzZXQsCi0JCQkJICAgICAgYnVmLT5wYWdlLCBidWYtPmNvdW50KTsKKwkJCQkgICAgICBidWYtPm91dHB1dF9idWYsIGJ1Zi0+Y291bnQpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTg3OSw4ICs4ODMsOCBAQAogCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0+cGFnZSkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtPnBhZ2UpOworCQlpZiAoYnVmLT5vdXRwdXRfYnVmKQorCQkJdmZyZWUoYnVmLT5vdXRwdXRfYnVmKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiAKQEAgLTg5NSwxMCArODk5LDE0IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBhbGxvY19idWZmZXIoaW5vZGUtPmlfcHJpdmF0ZSwKLQkJCQkJICBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmOworCWJ1ZiA9IGFsbG9jX2J1ZmZlcihpbm9kZS0+aV9wcml2YXRlLCBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNOworCWJ1Zi0+YWxsb2Nfc2l6ZSA9IChzaXplb2Yodm9pZCAqKSA9PSA0ID8gNiA6IDgpKlBBR0VfU0laRTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggODQwOWUwNy4uZDM0M2FmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNTksNyArNjAsNiBAQAogICogcHJvdmlkaW5nIGVhcmx5IGRldmljZXMgZm9yIHRob3NlIGhvc3QgY29udHJvbGxlcnMgdG8gdGFsayB0byEKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxMCBEZWMgMjAwNCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGF2aWQgQnJvd25lbGwiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMi4wICdFbmhhbmNlZCcgSG9zdCBDb250cm9sbGVyIChFSENJKSBEcml2ZXIiCiAKQEAgLTYyMCw5ICs2MjAsOSBAQAogCiAJdGVtcCA9IEhDX1ZFUlNJT04oZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCWVoY2lfaW5mbyAoZWhjaSwKLQkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMngsIGRyaXZlciAlcyVzXG4iLAorCQkiVVNCICV4LiV4IHN0YXJ0ZWQsIEVIQ0kgJXguJTAyeCVzXG4iLAogCQkoKGVoY2ktPnNicm4gJiAweGYwKT4+NCksIChlaGNpLT5zYnJuICYgMHgwZiksCi0JCXRlbXAgPj4gOCwgdGVtcCAmIDB4ZmYsIERSSVZFUl9WRVJTSU9OLAorCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLAogCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKIAogCWVoY2lfd3JpdGVsKGVoY2ksIElOVFJfTUFTSywKQEAgLTcwNiw3ICs3MDYsNyBAQAogCQlwY2Rfc3RhdHVzID0gc3RhdHVzOwogCiAJCS8qIHJlc3VtZSByb290IGh1Yj8gKi8KLQkJaWYgKCEoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiBDTURfUlVOKSkKKwkJaWYgKCEoY21kICYgQ01EX1JVTikpCiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCiAJCXdoaWxlIChpLS0pIHsKQEAgLTcxNSw4ICs3MTUsMTEgQEAKIAogCQkJaWYgKHBzdGF0dXMgJiBQT1JUX09XTkVSKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEocHN0YXR1cyAmIFBPUlRfUkVTVU1FKQotCQkJCQl8fCBlaGNpLT5yZXNldF9kb25lIFtpXSAhPSAwKQorCQkJaWYgKCEodGVzdF9iaXQoaSwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKKwkJCQkJKChwc3RhdHVzICYgUE9SVF9SRVNVTUUpIHx8CisJCQkJCQkhKHBzdGF0dXMgJiBQT1JUX1NVU1BFTkQpKSAmJgorCQkJCQkocHN0YXR1cyAmIFBPUlRfUEUpICYmCisJCQkJCWVoY2ktPnJlc2V0X2RvbmVbaV0gPT0gMCkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIHN0YXJ0IDIwIG1zZWMgcmVzdW1lIHNpZ25hbGluZyBmcm9tIHRoaXMgcG9ydCwKQEAgLTczMSw5ICs3MzQsOCBAQAogCiAJLyogUENJIGVycm9ycyBbNC4xNS4yLjRdICovCiAJaWYgKHVubGlrZWx5ICgoc3RhdHVzICYgU1RTX0ZBVEFMKSAhPSAwKSkgewotCQlkYmdfY21kIChlaGNpLCAiZmF0YWwiLCBlaGNpX3JlYWRsKGVoY2ksCi0JCQkJCQkgICAmZWhjaS0+cmVncy0+Y29tbWFuZCkpOwotCQlkYmdfc3RhdHVzIChlaGNpLCAiZmF0YWwiLCBzdGF0dXMpOworCQlkYmdfY21kKGVoY2ksICJmYXRhbCIsIGNtZCk7CisJCWRiZ19zdGF0dXMoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIFNUU19IQUxUKSB7CiAJCQllaGNpX2VyciAoZWhjaSwgImZhdGFsIGVycm9yXG4iKTsKIGRlYWQ6CkBAIC05OTQsOSArOTk2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQotTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfSU5GTyk7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCkBAIC0xMDIwLDExICsxMDIwLDYgQEAKICNkZWZpbmUJUFMzX1NZU1RFTV9CVVNfRFJJVkVSCXBzM19laGNpX2RyaXZlcgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0jaW5jbHVkZSAiZWhjaS1wcGMtc29jLmMiCi0jZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJZWhjaV9wcGNfc29jX2RyaXZlcgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRgogI2luY2x1ZGUgImVoY2ktcHBjLW9mLmMiCiAjZGVmaW5lIE9GX1BMQVRGT1JNX0RSSVZFUgllaGNpX2hjZF9wcGNfb2ZfZHJpdmVyCkBAIC0xMDQ5LDYgKzEwNDQsMTYgQEAKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogIiBEUklWRVJfREVTQyAiXG4iLCBoY2RfbmFtZSk7CisJc2V0X2JpdChVU0JfRUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCWlmICh0ZXN0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpIHx8CisJCQl0ZXN0X2JpdChVU0JfT0hDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nISBlaGNpX2hjZCBzaG91bGQgYWx3YXlzIGJlIGxvYWRlZCIKKwkJCQkiIGJlZm9yZSB1aGNpX2hjZCBhbmQgb2hjaV9oY2QsIG5vdCBhZnRlclxuIik7CisKIAlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAogCQkgaGNkX25hbWUsCiAJCSBzaXplb2Yoc3RydWN0IGVoY2lfcWgpLCBzaXplb2Yoc3RydWN0IGVoY2lfcXRkKSwKQEAgLTEwNTYsOCArMTA2MSwxMCBAQAogCiAjaWZkZWYgREVCVUcKIAllaGNpX2RlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImVoY2kiLCBOVUxMKTsKLQlpZiAoIWVoY2lfZGVidWdfcm9vdCkKLQkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKCFlaGNpX2RlYnVnX3Jvb3QpIHsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBlcnJfZGVidWc7CisJfQogI2VuZGlmCiAKICNpZmRlZiBQTEFURk9STV9EUklWRVIKQEAgLTExMDUsNiArMTExMiw4IEBACiAJZGVidWdmc19yZW1vdmUoZWhjaV9kZWJ1Z19yb290KTsKIAllaGNpX2RlYnVnX3Jvb3QgPSBOVUxMOwogI2VuZGlmCitlcnJfZGVidWc6CisJY2xlYXJfYml0KFVTQl9FSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KGVoY2lfaGNkX2luaXQpOwpAQCAtMTEyNiw2ICsxMTM1LDcgQEAKICNpZmRlZiBERUJVRwogCWRlYnVnZnNfcmVtb3ZlKGVoY2lfZGVidWdfcm9vdCk7CiAjZW5kaWYKKwljbGVhcl9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIG1vZHVsZV9leGl0KGVoY2lfaGNkX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzQwODM1Yi4uMjE4Zjk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKIAkJdGVtcCAmPSB+KFBPUlRfUldDX0JJVFMgfCBQT1JUX1dBS0VfQklUUyk7CiAJCWlmICh0ZXN0X2JpdChpLCAmZWhjaS0+YnVzX3N1c3BlbmRlZCkgJiYKLQkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpIHsKLQkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpCiAJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOwotCQl9CiAJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCX0KIAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwpAQCAtNDgyLDEwICs0ODAsOSBAQAogCQkgKiBjb250cm9sbGVyIGJ5IHRoZSB1c2VyLgogCQkgKi8KIAotCQlpZiAoKHRlbXAgJiBtYXNrKSAhPSAwCi0JCQkJfHwgKCh0ZW1wICYgUE9SVF9SRVNVTUUpICE9IDAKLQkJCQkJJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLAotCQkJCQkJZWhjaS0+cmVzZXRfZG9uZVtpXSkpKSB7CisJCWlmICgodGVtcCAmIG1hc2spICE9IDAgfHwgdGVzdF9iaXQoaSwgJmVoY2ktPnBvcnRfY19zdXNwZW5kKQorCQkJCXx8IChlaGNpLT5yZXNldF9kb25lW2ldICYmIHRpbWVfYWZ0ZXJfZXEoCisJCQkJCWppZmZpZXMsIGVoY2ktPnJlc2V0X2RvbmVbaV0pKSkgewogCQkJaWYgKGkgPCA3KQogCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOwogCQkJZWxzZQpAQCAtNjg4LDYgKzY4NSw3IEBACiAJCQkvKiByZXN1bWUgY29tcGxldGVkPyAqLwogCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0pKSB7CisJCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5wb3J0X2Nfc3VzcGVuZCk7CiAJCQkJZWhjaS0+cmVzZXRfZG9uZVt3SW5kZXhdID0gMDsKIApAQCAtNzM0LDYgKzczMiw5IEBACiAJCQkJCWVoY2lfcmVhZGwoZWhjaSwgc3RhdHVzX3JlZykpOwogCQl9CiAKKwkJaWYgKCEodGVtcCAmIChQT1JUX1JFU1VNRXxQT1JUX1JFU0VUKSkpCisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCiAJCS8qIHRyYW5zZmVyIGRlZGljYXRlZCBwb3J0cyB0byB0aGUgY29tcGFuaW9uIGhjICovCiAJCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYKIAkJCQl0ZXN0X2JpdCh3SW5kZXgsICZlaGNpLT5jb21wYW5pb25fcG9ydHMpKSB7CkBAIC03NTcsOCArNzU4LDE3IEBACiAJCX0KIAkJaWYgKHRlbXAgJiBQT1JUX1BFKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7Ci0JCWlmICh0ZW1wICYgKFBPUlRfU1VTUEVORHxQT1JUX1JFU1VNRSkpCisKKwkJLyogbWF5YmUgdGhlIHBvcnQgd2FzIHVuc3VzcGVuZGVkIHdpdGhvdXQgb3VyIGtub3dsZWRnZSAqLworCQlpZiAodGVtcCAmIChQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUUpKSB7CiAJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCX0gZWxzZSBpZiAodGVzdF9iaXQod0luZGV4LCAmZWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkgeworCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXNldF9iaXQod0luZGV4LCAmZWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQl9CisKIAkJaWYgKHRlbXAgJiBQT1JUX09DKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CiAJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKQEAgLTgwMyw2ICs4MTMsNyBAQAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOworCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKIAkJCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLXNvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk1OTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIEVIQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA3IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKLSAqCi0gKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgRUhDSSBkcml2ZXIKLSAqIFRlc3RlZCBvbiBBTUNDIDQ0MEVQeAotICoKLSAqIEJhc2VkIG9uICJlaGNpLWF1MXh4eC5jIiBieSBLLkJvZ2UgPGthcnN0ZW4uYm9nZUBhbWQuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7Ci0KLS8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLwotc3RhdGljIGludCBlaGNpX3BwY19zb2Nfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwotCWludAkJcmV0dmFsOwotCi0JcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZWhjaS0+c2JybiA9IDB4MjA7Ci0JcmV0dXJuIGVoY2lfcmVzZXQoZWhjaSk7Ci19Ci0KLS8qKgotICogdXNiX2VoY2lfcHBjX3NvY19wcm9iZSAtIGluaXRpYWxpemUgUFBDLVNvQy1iYXNlZCBIQ0RzCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAotICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKLSAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKi8KLWludCB1c2JfZWhjaV9wcGNfc29jX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgIHN0cnVjdCB1c2JfaGNkICoqaGNkX291dCwKLQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB1c2JfaGNkICpoY2Q7Ci0Jc3RydWN0IGVoY2lfaGNkICplaGNpOwotCi0JaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKLQkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCX0KLQloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgIlBQQy1TT0MgRUhDSSIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKLQkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZWhjaSA9IGhjZF90b19laGNpKGhjZCk7Ci0JZWhjaS0+YmlnX2VuZGlhbl9tbWlvID0gMTsKLQllaGNpLT5iaWdfZW5kaWFuX2Rlc2MgPSAxOwotCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7Ci0JZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7Ci0KLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KLQllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpCi0JLyoKLQkgKiA0NDBFUHggRXJyYXRhIFVTQkhfMwotCSAqIEZpeDogRW5hYmxlIEJyZWFrIE1lbW9yeSBUcmFuc2ZlciAoQk1UKSBpbiBJTlNOUkVHMwotCSAqLwotCW91dF9iZTMyKCh2b2lkICopKCh1bG9uZykoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICsgMHg4YyksICgxIDw8IDApKTsKLQllaGNpX2RiZyhlaGNpLCAiQnJlYWsgTWVtb3J5IFRyYW5zZmVyIChCTVQpIGhhcyBiZWVkIGVuYWJsZWQhXG4iKTsKLSNlbmRpZgotCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpb3VubWFwKGhjZC0+cmVncyk7Ci1lcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotZXJyMToKLQl1c2JfcHV0X2hjZChoY2QpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfZWhjaV9oY2RfcHBjX3NvY19yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQUEMtU29DLWJhc2VkIEhDRHMKLSAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAotICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCi0gKgotICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfZWhjaV9oY2RfcHBjX3NvY19wcm9iZSgpLCBmaXJzdCBpbnZva2luZwotICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCi0gKgotICovCi12b2lkIHVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWlvdW5tYXAoaGNkLT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQl1c2JfcHV0X2hjZChoY2QpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3BwY19zb2NfaGNfZHJpdmVyID0gewotCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPSAiUFBDLVNPQyBFSENJIiwKLQkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAotCi0JLyoKLQkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKLQkgKi8KLQkuaXJxID0gZWhjaV9pcnEsCi0JLmZsYWdzID0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAotCi0JLyoKLQkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucwotCSAqLwotCS5yZXNldCA9IGVoY2lfcHBjX3NvY19zZXR1cCwKLQkuc3RhcnQgPSBlaGNpX3J1biwKLQkuc3RvcCA9IGVoY2lfc3RvcCwKLQkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAotCi0JLyoKLQkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwotCSAqLwotCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKLQkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKLQotCS8qCi0JICogc2NoZWR1bGluZyBzdXBwb3J0Ci0JICovCi0JLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKLQotCS8qCi0JICogcm9vdCBodWIgc3VwcG9ydAotCSAqLwotCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKLQkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAotCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCi0JLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCi0JLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAotCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAotfTsKLQotc3RhdGljIGludCBlaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiSW4gZWhjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmVcbiIpOwotCi0JaWYgKHVzYl9kaXNhYmxlZCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEZJWE1FIHdlIG9ubHkgd2FudCBvbmUgb25lIHByb2JlKCkgbm90IHR3byAqLwotCXJldCA9IHVzYl9laGNpX3BwY19zb2NfcHJvYmUoJmVoY2lfcHBjX3NvY19oY19kcml2ZXIsICZoY2QsIHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogRklYTUUgd2Ugb25seSB3YW50IG9uZSBvbmUgcmVtb3ZlKCkgbm90IHR3byAqLwotCXVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9BTElBUygicGxhdGZvcm06cHBjLXNvYy1laGNpIik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX3BwY19zb2NfZHJpdmVyID0gewotCS5wcm9iZSA9IGVoY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAotCS5yZW1vdmUgPSBlaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCi0JLnNodXRkb3duID0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwcGMtc29jLWVoY2kiLAotCX0KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGI2OTdhMTMuLmIxMTc5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC05OSw2ICs5OSw4IEBACiAJCQlvd25lZCBieSB0aGUgY29tcGFuaW9uIGR1cmluZyBhIGJ1cyBzdXNwZW5kICovCiAJdW5zaWduZWQgbG9uZwkJcG9ydF9jX3N1c3BlbmQ7CQkvKiB3aGljaCBwb3J0cyBoYXZlCiAJCQl0aGUgY2hhbmdlLXN1c3BlbmQgZmVhdHVyZSB0dXJuZWQgb24gKi8KKwl1bnNpZ25lZCBsb25nCQlzdXNwZW5kZWRfcG9ydHM7CS8qIHdoaWNoIHBvcnRzIGFyZQorCQkJc3VzcGVuZGVkICovCiAKIAkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLwogCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCkBAIC0xODEsMTQgKzE4MywxNiBAQAogCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQogCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKKwllbnVtIGVoY2lfdGltZXJfYWN0aW9uIG9sZGFjdGlvbnMgPSBlaGNpLT5hY3Rpb25zOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewogCQl1bnNpZ25lZCBsb25nIHQ7CiAKKwkJaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQorCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQorCQkJCSYgb2xkYWN0aW9ucykpCisJCQlyZXR1cm47CisKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKIAkJCXQgPSBFSENJX0lPX0pJRkZJRVM7CkBAIC0yMDQsNyArMjA4LDcgQEAKIAkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgcm91bmRfamlmZmllcyh0ICsgamlmZmllcykpOwogCX0KIH0KIApAQCAtNjA0LDE2ICs2MDgsNyBAQAogLyoKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCi0gKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSA0eHggc3VwcG9ydCBpcwotICogZmluYWxseSBwb3J0ZWQgb3Zlci4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLSNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQotI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKICNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCV9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKICNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJX19yYXdfd3JpdGVsKHZhbCwgKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IGNlMWNhMGIuLjRkZGEzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE1NjIsMTEgKzE1NjIsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4OwotCXN0cnVjdCByZXNvdXJjZSAqYWRkciwgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICphZGRyLCAqZGF0YSwgKmlyZXM7CiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtMTU3NSwxMiArMTU3NiwxNiBAQAogCiAJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWFkZHIgfHwgIWRhdGEgfHwgaXJxIDwgMCkgeworCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCisJaWYgKCFhZGRyIHx8ICFkYXRhIHx8ICFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKIAl9CiAKKwlpcnEgPSBpcmVzLT5zdGFydDsKKwlpcnFmbGFncyA9IGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKIAlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygiRE1BIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTYzNCw3ICsxNjM5LDcgQEAKIAkJZ290byBlcnI2OwogCX0KIAotCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgaXJxZmxhZ3MgfCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggMDUxZWY3Yi4uYWY4NDlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCSAqIGFuZCByZWFkaW5nIGJhY2sgYW5kIGNoZWNraW5nIHRoZSBjb250ZW50cyBhcmUgc2FtZSBvciBub3QKIAkgKi8KIAlpZiAocmVnX2RhdGEgIT0gMHhGQUNFKSB7Ci0JCWVycigic2NyYXRjaCByZWdpc3RlciBtaXNtYXRjaCAleCIsIHJlZ19kYXRhKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJzY3JhdGNoIHJlZ2lzdGVyIG1pc21hdGNoICV4XG4iLCByZWdfZGF0YSk7CiAJCWdvdG8gY2xlYW47CiAJfQogCkBAIC0yMzIsOSArMjMyLDEwIEBACiAJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihwY2lfbWVtX3BoeTAsIGxlbmd0aCwgZGV2LT5pcnEsCiAJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgJmRldi0+ZGV2LCBkZXZfbmFtZSgmZGV2LT5kZXYpLAogCQlkZXZmbGFncyk7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgaGNkKTsKLQlpZiAoIWhjZCkKKwlpZiAoIUlTX0VSUihoY2QpKSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CiAJCXJldHVybiAwOworCX0KIGNsZWFuOgogCXN0YXR1cyA9IC1FTk9ERVY7CiAJaW91bm1hcChpb2Jhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDdjZWYxZDIuLmQzMjY5NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAlvaGNpX2RiZ19zdyAob2hjaSwgJm5leHQsICZzaXplLAogCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCi0JCSIlcyB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJIiVzXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAogCQlkZXZfbmFtZShoY2QtPnNlbGYuY29udHJvbGxlciksCiAJCWhjZC0+cHJvZHVjdF9kZXNjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDg5OTAxOTYuLjg2NDdkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjIwMDYgQXVndXN0IDA0IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJSb21hbiBXZWlzc2dhZXJiZXIsIERhdmlkIEJyb3duZWxsIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDEuMSAnT3BlbicgSG9zdCBDb250cm9sbGVyIChPSENJKSBEcml2ZXIiCiAKQEAgLTk4NCwxMCArOTgzLDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtMTA5NSw5ICsxMDkyLDEwIEBACiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIlxuIiwgaGNkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIGhjZF9uYW1lKTsKIAlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlzZXRfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAKICNpZmRlZiBERUJVRwogCW9oY2lfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib2hjaSIsIE5VTEwpOwpAQCAtMTE4NCw2ICsxMTgyLDcgQEAKICBlcnJvcl9kZWJ1ZzoKICNlbmRpZgogCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KG9oY2lfaGNkX21vZF9pbml0KTsKQEAgLTEyMTQsNiArMTIxMyw3IEBACiAjaWZkZWYgREVCVUcKIAlkZWJ1Z2ZzX3JlbW92ZShvaGNpX2RlYnVnX3Jvb3QpOwogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiBtb2R1bGVfZXhpdChvaGNpX2hjZF9tb2RfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA3ZWE5YTdiLi4zMmJiY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNTksMjEgKzM1OSwyNCBAQAogCiAvKiBDYXJyeSBvdXQgcG9sbGluZy0sIGF1dG9zdG9wLSwgYW5kIGF1dG9yZXN1bWUtcmVsYXRlZCBzdGF0ZSBjaGFuZ2VzICovCiBzdGF0aWMgaW50IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBjaGFuZ2VkLAotCQlpbnQgYW55X2Nvbm5lY3RlZCkKKwkJaW50IGFueV9jb25uZWN0ZWQsIGludCByaHNjX3N0YXR1cykKIHsKIAlpbnQJcG9sbF9yaCA9IDE7Ci0JaW50CXJoc2M7CisJaW50CXJoc2NfZW5hYmxlOwogCi0JcmhzYyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpICYgT0hDSV9JTlRSX1JIU0M7CisJLyogU29tZSBicm9rZW4gY29udHJvbGxlcnMgbmV2ZXIgdHVybiBvZmYgUkhDUyBpbiB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIHJlZ2lzdGVyLiAgRm9yIHRoZWlyIHNha2Ugd2Ugd29uJ3QgcmUtZW5hYmxlIFJIU0MKKwkgKiBpbnRlcnJ1cHRzIGlmIHRoZSBpbnRlcnJ1cHQgYml0IGlzIGFscmVhZHkgYWN0aXZlLgorCSAqLworCXJoc2NfZW5hYmxlID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSkgJgorCQkJT0hDSV9JTlRSX1JIU0M7CisKIAlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgewotCiAJY2FzZSBPSENJX1VTQl9PUEVSOgotCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIHN0YXR1cy1jaGFuZ2UKLQkJICogaW50ZXJydXB0cy4KLQkJICovCi0JCWlmICghcmhzYyAmJiAhY2hhbmdlZCkgewotCQkJcmhzYyA9IE9IQ0lfSU5UUl9SSFNDOwotCQkJb2hjaV93cml0ZWwob2hjaSwgcmhzYywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIFJIU0MgaW50ZXJydXB0cy4gKi8KKwkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMgJiYgIWNoYW5nZWQpIHsKKwkJCXJoc2NfZW5hYmxlID0gT0hDSV9JTlRSX1JIU0M7CisJCQlvaGNpX3dyaXRlbChvaGNpLCByaHNjX2VuYWJsZSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCQl9CiAKIAkJLyogS2VlcCBvbiBwb2xsaW5nIHVudGlsIHdlIGtub3cgYSBkZXZpY2UgaXMgY29ubmVjdGVkCkBAIC0zODMsNyArMzg2LDcgQEAKIAkJCWlmIChhbnlfY29ubmVjdGVkIHx8CiAJCQkJCSFkZXZpY2VfbWF5X3dha2V1cCgmb2hjaV90b19oY2Qob2hjaSkKIAkJCQkJCS0+c2VsZi5yb290X2h1Yi0+ZGV2KSkgewotCQkJCWlmIChyaHNjKQorCQkJCWlmIChyaHNjX2VuYWJsZSkKIAkJCQkJcG9sbF9yaCA9IDA7CiAJCQl9IGVsc2UgewogCQkJCW9oY2ktPmF1dG9zdG9wID0gMTsKQEAgLTM5NiwzNCArMzk5LDQ1IEBACiAJCQkJb2hjaS0+YXV0b3N0b3AgPSAwOwogCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsKIAkJCQkJCVNUQVRFQ0hBTkdFX0RFTEFZOwotCQkJfSBlbHNlIGlmIChyaHNjICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkKIAkJCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKIAkJCQkJJiYgIShvaGNpLT5oY19jb250cm9sICYKIAkJCQkJCU9IQ0lfU0NIRURfRU5BQkxFUykpIHsKIAkJCQlvaGNpX3JoX3N1c3BlbmQob2hjaSwgMSk7Ci0JCQkJcG9sbF9yaCA9IDA7CisJCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCQlwb2xsX3JoID0gMDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAotCS8qIGlmIHRoZXJlIGlzIGEgcG9ydCBjaGFuZ2UsIGF1dG9zdGFydCBvciBhc2sgdG8gYmUgcmVzdW1lZCAqLwogCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKIAljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJLyogaWYgdGhlcmUgaXMgYSBwb3J0IGNoYW5nZSwgYXV0b3N0YXJ0IG9yIGFzayB0byBiZSByZXN1bWVkICovCiAJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAob2hjaS0+YXV0b3N0b3ApCiAJCQkJb2hjaV9yaF9yZXN1bWUob2hjaSk7CiAJCQllbHNlCiAJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIob2hjaV90b19oY2Qob2hjaSkpOwotCQl9IGVsc2UgewotCQkJaWYgKCFyaHNjICYmIChvaGNpLT5hdXRvc3RvcCB8fAotCQkJCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+Ci0JCQkJCQlkb19yZW1vdGVfd2FrZXVwKSkKLQkJCQlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywKLQkJCQkJCSZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKIAotCQkJLyogZXZlcnl0aGluZyBpcyBpZGxlLCBubyBuZWVkIGZvciBwb2xsaW5nICovCisJCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZGlzYWJsZWQsIHN0b3AgcG9sbGluZyAqLworCQl9IGVsc2UgaWYgKCFvaGNpLT5hdXRvc3RvcCAmJgorCQkJCSFvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+CisJCQkJCWRvX3JlbW90ZV93YWtldXApIHsKIAkJCXBvbGxfcmggPSAwOworCisJCX0gZWxzZSB7CisJCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywKKwkJCSAqIGVuYWJsZSBSSFNDIGludGVycnVwdHMKKwkJCSAqLworCQkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMpIHsKKwkJCQlyaHNjX2VuYWJsZSA9IE9IQ0lfSU5UUl9SSFNDOworCQkJCW9oY2lfd3JpdGVsKG9oY2ksIHJoc2NfZW5hYmxlLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkJfQorCQkJLyogS2VlcCBwb2xsaW5nIHVudGlsIFJIU0MgaXMgZW5hYmxlZCAqLworCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCXBvbGxfcmggPSAwOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQ0MSwxOCArNDU1LDIyIEBACiAgKiBhdXRvc3RvcCBpc24ndCB1c2VkIHdoZW4gQ09ORklHX1BNIGlzIHR1cm5lZCBvZmYuCiAgKi8KIHN0YXRpYyBpbnQgb2hjaV9yb290X2h1Yl9zdGF0ZV9jaGFuZ2VzKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IGNoYW5nZWQsCi0JCWludCBhbnlfY29ubmVjdGVkKQorCQlpbnQgYW55X2Nvbm5lY3RlZCwgaW50IHJoc2Nfc3RhdHVzKQogewogCS8qIElmIFJIU0MgaXMgZW5hYmxlZCwgZG9uJ3QgcG9sbCAqLwogCWlmIChvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKSAmIE9IQ0lfSU5UUl9SSFNDKQogCQlyZXR1cm4gMDsKIAotCS8qIElmIG5vIHN0YXR1cyBjaGFuZ2VzIGFyZSBwZW5kaW5nLCBlbmFibGUgc3RhdHVzLWNoYW5nZSBpbnRlcnJ1cHRzICovCi0JaWYgKCFjaGFuZ2VkKSB7Ci0JCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9SSFNDLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwkvKiBJZiBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgY29udGludWUgcG9sbGluZy4KKwkgKiBDb252ZXJzZWx5LCBpZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZyBidXQgdGhlIFJIU0MKKwkgKiBzdGF0dXMgYml0IHdhcyBzZXQsIHRoZW4gUkhTQyBtYXkgYmUgYnJva2VuIHNvIGNvbnRpbnVlIHBvbGxpbmcuCisJICovCisJaWYgKGNoYW5nZWQgfHwgcmhzY19zdGF0dXMpCisJCXJldHVybiAxOworCisJLyogSXQncyBzYWZlIHRvIHJlLWVuYWJsZSBSSFNDIGludGVycnVwdHMgKi8KKwlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCXJldHVybiAwOwogfQogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCkBAIC00NjcsNiArNDg1LDcgQEAKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAlpbnQJCWksIGNoYW5nZWQgPSAwLCBsZW5ndGggPSAxOwogCWludAkJYW55X2Nvbm5lY3RlZCA9IDA7CisJaW50CQlyaHNjX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC00OTIsMTIgKzUxMSwxMCBAQAogCQlsZW5ndGgrKzsKIAl9CiAKLQkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSENTIGluIHRoZSBpbnRlcnJ1cHQKLQkgKiBzdGF0dXMgcmVnaXN0ZXIuICBGb3IgdGhlaXIgc2FrZSB3ZSB3b24ndCByZS1lbmFibGUgUkhTQwotCSAqIGludGVycnVwdHMgaWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQuCi0JICovCi0JaWYgKG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYgT0hDSV9JTlRSX1JIU0MpCi0JCWNoYW5nZWQgPSAxOworCS8qIENsZWFyIHRoZSBSSFNDIHN0YXR1cyBmbGFnIGJlZm9yZSByZWFkaW5nIHRoZSBwb3J0IHN0YXR1c2VzICovCisJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX1JIU0MsICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlyaHNjX3N0YXR1cyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYKKwkJCU9IQ0lfSU5UUl9SSFNDOwogCiAJLyogbG9vayBhdCBlYWNoIHBvcnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgb2hjaS0+bnVtX3BvcnRzOyBpKyspIHsKQEAgLTUxNyw3ICs1MzQsNyBAQAogCX0KIAogCWhjZC0+cG9sbF9yaCA9IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhvaGNpLCBjaGFuZ2VkLAotCQkJYW55X2Nvbm5lY3RlZCk7CisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cyk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDk1YjNlYzguLjkxNjk3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcigxKTsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19pbml0KCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAidXNiX2RjX2NrIik7CiAJZWxzZQogCQl1c2JfZGNfY2sgPSBjbGtfZ2V0KDAsICJsYl9jayIpOwpAQCAtMzQ0LDcgKzM0NCwxMiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JaGNkLT5yZWdzID0gKHZvaWQgX19pb21lbSAqKSAoaW50KSBJT19BRERSRVNTKGhjZC0+cnNyY19zdGFydCk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgT0hDSSBIQ0RcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQogCiAJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJb2hjaV9oY2RfaW5pdChvaGNpKTsKQEAgLTM1NSwxMSArMzYwLDExIEBACiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewogCQlyZXR2YWwgPSAtRU5YSU87Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIzOwogCX0KIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCk7CiAJaWYgKHJldHZhbCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjM7CiAKIAlob3N0X2luaXRpYWxpemVkID0gMTsKIApAQCAtMzY3LDYgKzM3Miw4IEBACiAJCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKIAogCXJldHVybiAwOworZXJyMzoKKwlpb3VubWFwKGhjZC0+cmVncyk7CiBlcnIyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogZXJyMToKQEAgLTQwMSw2ICs0MDgsNyBAQAogCX0KIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQlvbWFwX2ZyZWVfZ3Bpbyg5KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAljbGtfcHV0KHVzYl9kY19jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwppbmRleCA2NThhMmE5Li5lMzA2Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCiAJaW50IHJldCA9IDAsIGlycTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9JTkZPICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6ICIgRFJJVkVSX0RFU0MgIiAocG54NDAwOClcbiIsIGhjZF9uYW1lKTsKIAlpZiAodXNiX2Rpc2FibGVkKCkpIHsKIAkJZXJyKCJVU0IgaXMgZGlzYWJsZWQiKTsKIAkJcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKaW5kZXggZmFmNjIyZS4uMjIyMDExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTU0MCwxNSArNTQwLDcgQEAKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCiAgKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSBTVEIwNHh4eCBzdXBwb3J0IGlzCi0gKiBmaW5hbGx5IHBvcnRlZCBvdmVyLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotI2RlZmluZSByZWFkbF9iZShhZGRyKQkJaW5fYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIpCi0jZGVmaW5lIHdyaXRlbF9iZSh2YWwsIGFkZHIpCW91dF9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkciwgdmFsKQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9vaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCiAJCQkJCV9faGMzMiBfX2lvbWVtICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IGVhNzEyNmYuLmMxOGQ4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtKGVuZGlhbiwgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5kaWFuLCAiZGF0YSBlbmRpYW46IGJpZz0yNTYsIGxpdHRsZT0wIChkZWZhdWx0PTApIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpcnFfc2Vuc2UgPSBJTlRMOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlycV9zZW5zZSA9IDB4ZmY7CiBtb2R1bGVfcGFyYW0oaXJxX3NlbnNlLCB1c2hvcnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfc2Vuc2UsICJJUlEgc2Vuc2U6IGxvdyBsZXZlbD0zMiwgZmFsbGluZyBlZGdlPTAgIgogCQkiKGRlZmF1bHQ9MzIpIik7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIFNDS0UsIFNZU0NGRzApOwogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBTWVNDRkcwKTsKIAkJaWYgKGkrKyA+IDEwMDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgVVNCRSwgU1lTQ0ZHMCk7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIFNZU0NGRzApOwogCQlpZiAoaSsrID4gMTAwMCkgewotCQkJZXJyKCJyZWdpc3RlciBhY2Nlc3MgZmFpbC4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyIGFjY2VzcyBmYWlsLlxuIik7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJfSB3aGlsZSAoKHRtcCAmIFVTQkUpICE9IFVTQkUpOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCW1zbGVlcCgxKTsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgU1lTQ0ZHMCk7CiAJCWlmIChpKysgPiA1MDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCWlmIChyb290X3BvcnQpIHsKIAkJKnJvb3RfcG9ydCA9IChkZXZwYXRoWzBdICYgMHgwRikgLSAxOwogCQlpZiAoKnJvb3RfcG9ydCA+PSBSOEE2NjU5N19NQVhfUk9PVF9IVUIpCi0JCQllcnIoImlsbGVnYWwgcm9vdCBwb3J0IG51bWJlciIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCByb290IHBvcnQgbnVtYmVyLlxuIik7CiAJfQogCWlmIChodWJfcG9ydCkKIAkJKmh1Yl9wb3J0ID0gZGV2cGF0aFsyXSAmIDB4MEY7CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJdXNic3BkID0gSFNNT0RFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gc3BlZWQiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogdW5rbm93biBzcGVlZFxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg1LDcgKzM4NSw3IEBACiAJc3RydWN0IHI4YTY2NTk3X2RldmljZSAqZGV2OwogCiAJaWYgKGlzX2h1Yl9saW1pdCh1cmItPmRldi0+ZGV2cGF0aCkpIHsKLQkJZXJyKCJFeHRlcm5lbCBodWIgbGltaXQgcmVhY2hlZC4iKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIkV4dGVybmFsIGh1YiBsaW1pdCByZWFjaGVkLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDA2LDggKzQwNiw5IEBACiAJCXJldHVybiBhZGRyOwogCX0KIAotCWVycigiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpIiwKLQkgICAgcjhhNjY1OTctPmFkZHJlc3NfbWFwKTsKKwlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpXG4iLAorCQlyOGE2NjU5Ny0+YWRkcmVzc19tYXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDcsNyArNDQ4LDggQEAKIAlkbyB7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIHJlZyk7CiAJCWlmIChpKysgPiAxMDAwMDAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyJWx4LCBsb29wICV4IGlzIHRpbWVvdXQiLCByZWcsIGxvb3ApOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIlbHgsIGxvb3AgJXggIgorCQkJICAgICAgICJpcyB0aW1lb3V0XG4iLCByZWcsIGxvb3ApOwogCQkJYnJlYWs7CiAJCX0KIAkJbmRlbGF5KDEpOwpAQCAtNjc1LDcgKzY3Nyw3IEBACiAJCQlhcnJheVtpKytdID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDUsNyArNzA3LDcgQEAKIAkJcjhhNjY1OTdfdHlwZSA9IFI4QTY2NTk3X0lTTzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcjhhNjY1OTdfdHlwZSA9IDB4MDAwMDsKIAkJYnJlYWs7CiAJfQpAQCAtNzI0LDcgKzcyNiw3IEBACiAJZWxzZSBpZiAoY2hlY2tfaW50ZXJydXB0KHBpcGVudW0pKQogCQlidWZudW0gPSA0ICsgKHBpcGVudW0gLSA2KTsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zm51bTsKIH0KQEAgLTc0MCw3ICs3NDIsNyBAQAogCWVsc2UgaWYgKGNoZWNrX2ludGVycnVwdChwaXBlbnVtKSkKIAkJYnVmX2JzaXplID0gMDsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zl9ic2l6ZTsKIH0KQEAgLTc2MCwxMCArNzYyLDEyIEBACiAJCQlpZiAoKHI4YTY2NTk3LT5kbWFfbWFwICYgKDEgPDwgaSkpICE9IDApCiAJCQkJY29udGludWU7CiAKLQkJCWluZm8oImFkZHJlc3MgJWQsIEVuZHBvaW50QWRkcmVzcyAweCUwMnggdXNlIERNQSBGSUZPIiwKLQkJCSAgICAgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKLQkJCSAgICAgaW5mby0+ZGlyX2luID8gVVNCX0VORFBPSU5UX0RJUl9NQVNLICsgaW5mby0+ZXBudW0KLQkJCQkJICAgIDogaW5mby0+ZXBudW0pOworCQkJZGV2X2luZm8oJmRldi0+dWRldi0+ZGV2LAorCQkJCSAiYWRkcmVzcyAlZCwgRW5kcG9pbnRBZGRyZXNzIDB4JTAyeCB1c2UgIgorCQkJCSAiRE1BIEZJRk9cbiIsIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCisJCQkJIGluZm8tPmRpcl9pbiA/CisJCQkJIAlVU0JfRU5EUE9JTlRfRElSX01BU0sgKyBpbmZvLT5lcG51bQorCQkJCQk6IGluZm8tPmVwbnVtKTsKIAogCQkJcjhhNjY1OTctPmRtYV9tYXAgfD0gMSA8PCBpOwogCQkJZGV2LT5kbWFfbWFwIHw9IDEgPDwgaTsKQEAgLTExODcsNyArMTE5MSw3IEBACiAJCXByZXBhcmVfc3RhdHVzX3BhY2tldChyOGE2NjU5NywgdGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludmFsaWQgdHlwZS4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogaW52YWxpZCB0eXBlLlxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTI5NSw3ICsxMjk5LDcgQEAKIAlpZiAodW5saWtlbHkoKHRtcCAmIEZSRFkpID09IDApKSB7CiAJCXBpcGVfc3RvcChyOGE2NjU5NywgdGQtPnBpcGUpOwogCQlwaXBlX2lycV9kaXNhYmxlKHI4YTY2NTk3LCBwaXBlbnVtKTsKLQkJZXJyKCJpbiBmaWZvIG5vdCByZWFkeSAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IGluIGZpZm8gbm90IHJlYWR5ICglZClcbiIsIHBpcGVudW0pOwogCQlmaW5pc2hfcmVxdWVzdChyOGE2NjU5NywgdGQsIHBpcGVudW0sIHRkLT51cmIsIC1FUElQRSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzcwLDcgKzEzNzQsNyBAQAogCWlmICh1bmxpa2VseSgodG1wICYgRlJEWSkgPT0gMCkpIHsKIAkJcGlwZV9zdG9wKHI4YTY2NTk3LCB0ZC0+cGlwZSk7CiAJCXBpcGVfaXJxX2Rpc2FibGUocjhhNjY1OTcsIHBpcGVudW0pOwotCQllcnIoIm91dCB3cml0ZSBmaWZvIG5vdCByZWFkeS4gKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBvdXQgZmlmbyBub3QgcmVhZHkgKCVkKVxuIiwgcGlwZW51bSk7CiAJCWZpbmlzaF9yZXF1ZXN0KHI4YTY2NTk3LCB0ZCwgcGlwZW51bSwgdXJiLCAtRVBJUEUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjAwNSw3ICsyMDA5LDcgQEAKIAkJcmV0dXJuIGRldjsKIAl9CiAKLQllcnIoImdldF9yOGE2NjU5N19kZXZpY2UgZmFpbC4oJWQpXG4iLCBhZGRyKTsKKwlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBnZXRfcjhhNjY1OTdfZGV2aWNlIGZhaWwuKCVkKVxuIiwgYWRkcik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyNjMsNyArMjI2Nyw3IEBACiAjZGVmaW5lIHJlc291cmNlX2xlbihyKSAoKChyKS0+ZW5kIC0gKHIpLT5zdGFydCkgKyAxKQogc3RhdGljIGludCBfX2luaXQgcjhhNjY1OTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMLCAqaXJlczsKIAlpbnQgaXJxID0gLTE7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBOVUxMOwogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwpAQCAtMjI3NCw3ICsyMjc4LDcgQEAKIAogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZXJyKCJkbWEgbm90IHN1cHBvcnQiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZG1hIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjI4MiwyMSArMjI4NiwyNSBAQAogCQkJCQkgICAoY2hhciAqKWhjZF9uYW1lKTsKIAlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5PREVWOwotCQllcnIoInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPCAwKSB7CisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWVycigicGxhdGZvcm1fZ2V0X2lycSBlcnJvci4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInBsYXRmb3JtX2dldF9yZXNvdXJjZSBJT1JFU09VUkNFX0lSUSBlcnJvci5cbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIAorCWlycSA9IGlyZXMtPnN0YXJ0OworCWlycV90cmlnZ2VyID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwogCXJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2VfbGVuKHJlcykpOwogCWlmIChyZWcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQllcnIoImlvcmVtYXAgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKQEAgLTIzMDQsNyArMjMxMiw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnI4YTY2NTk3X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgKGNoYXIgKiloY2RfbmFtZSk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZXJyKCJGYWlsZWQgdG8gY3JlYXRlIGhjZCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIGhjZFxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCXI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CkBAIC0yMzI5LDEzICsyMzM3LDMzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnI4YTY2NTk3LT5jaGlsZF9kZXZpY2UpOwogCiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKLQlpZiAoaXJxX3NlbnNlID09IElOVEwpCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0xPVzsKLQllbHNlCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisKKwkvKiBpcnFfc2Vuc2Ugc2V0dGluZyBvbiBjbWRsaW5lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciByZXNvdXJjZQorCSAqIHNldHRpbmdzLCBzbyB0aGUgaW50cm9kdWN0aW9uIG9mIGlycWZsYWdzIGluIElSUSByZXNvdXJzZQorCSAqIHdvbid0IGRpc3R1cmIgZXhpc3Rpbmcgc2V0dXBzICovCisJc3dpdGNoIChpcnFfc2Vuc2UpIHsKKwkJY2FzZSBJTlRMOgorCQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisJCQlicmVhazsKKwkJY2FzZSAweGZmOgorCQkJaWYgKGlycV90cmlnZ2VyKQorCQkJCWlycV9zZW5zZSA9IChpcnFfdHJpZ2dlciAmIElSUUZfVFJJR0dFUl9MT1cpID8KKwkJCQkJICAgIElOVEwgOiAwOworCQkJZWxzZSB7CisJCQkJaXJxX3NlbnNlID0gSU5UTDsKKwkJCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9MT1c7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gaXJxX3NlbnNlIHZhbHVlLlxuIik7CisJfQorCiAJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFfdHJpZ2dlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWVycigiRmFpbGVkIHRvIGFkZCBoY2QiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBoY2RcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjM2NCw3ICsyMzkyLDggQEAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mbygiZHJpdmVyICVzLCAlcyIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwKKwkgICAgICAgRFJJVkVSX1ZFUlNJT04pOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnI4YTY2NTk3X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChyOGE2NjU5N19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IDhhNzRiYmIuLmUxMDZlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTYyMCwyMiArMTYyMCwyNiBAQAogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCXN0cnVjdCBzbDgxMQkJKnNsODExOwotCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhOworCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhLCAqaXJlczsKIAlpbnQJCQlpcnE7CiAJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CiAJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CiAJaW50CQkJcmV0dmFsOwogCXU4CQkJdG1wLCBpb2FkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcJCWlycWZsYWdzOwogCiAJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCiAJICogaGF2ZSBpbml0aWFsaXplZCB0aGVzZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCiAJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQogCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgogCSAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCBpcnEgPCAwKQorCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgIWlyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCisJaXJxID0gaXJlcy0+c3RhcnQ7CisJaXJxZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCiAJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLwogCWlmIChkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CkBAIC0xNzE3LDggKzE3MjEsMTEgQEAKIAkgKiB0cmlnZ2VycyAoZS5nLiBtb3N0IEFSTSBDUFVzKS4gIEluaXRpYWwgZHJpdmVyIHN0cmVzcyB0ZXN0aW5nCiAJICogd2FzIG9uIGEgc3lzdGVtIHdpdGggc2luZ2xlIGVkZ2UgdHJpZ2dlcmluZywgc28gbW9zdCBzb3J0cyBvZgogCSAqIHRyaWdnZXJpbmcgYXJyYW5nZW1lbnQgc2hvdWxkIHdvcmsuCisJICoKKwkgKiBVc2UgcmVzb3VyY2UgSVJRIGZsYWdzIGlmIHNldCBieSBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAuCiAJICovCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFmbGFncyk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCAzYTdiZmU3Li5jZjVlNGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC01Myw3ICs1Myw2IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2My4wIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJMaW51cyAnRnJvZG8gUmFiYml0JyBUb3J2YWxkcywgSm9oYW5uZXMgRXJkZmVsdCwgXAogUmFuZHkgRHVubGFwLCBHZW9yZyBBY2hlciwgRGV0aSBGbGllZ2wsIFRob21hcyBTYWlsZXIsIFJvbWFuIFdlaXNzZ2FlcmJlciwgXAogQWxhbiBTdGVybiIKQEAgLTk1MSwxMiArOTUwLDEzIEBACiB7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiJXNcbiIsCi0JCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKLQogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlwcmludGsoS0VSTl9JTkZPICJ1aGNpX2hjZDogIiBEUklWRVJfREVTQyAiJXNcbiIsCisJCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKKwlzZXRfYml0KFVTQl9VSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CisKIAlpZiAoREVCVUdfQ09ORklHVVJFRCkgewogCQllcnJidWYgPSBrbWFsbG9jKEVSUkJVRl9MRU4sIEdGUF9LRVJORUwpOwogCQlpZiAoIWVycmJ1ZikKQEAgLTk4OCw2ICs5ODgsNyBAQAogCiBlcnJidWZfZmFpbGVkOgogCisJY2xlYXJfYml0KFVTQl9VSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTk3LDYgKzk5OCw3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKTsKIAlkZWJ1Z2ZzX3JlbW92ZSh1aGNpX2RlYnVnZnNfcm9vdCk7CiAJa2ZyZWUoZXJyYnVmKTsKKwljbGVhcl9iaXQoVVNCX1VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIAogbW9kdWxlX2luaXQodWhjaV9oY2RfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCBkYjY0NTkzLi41NjMxZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTEyMywxNCArMTIzLDEwIEBACiAKIHN0YXRpYyB2b2lkIHVoY2lfZnJlZV90ZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCkKIHsKLQlpZiAoIWxpc3RfZW1wdHkoJnRkLT5saXN0KSkgewotCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7Ci0JCVdBUk5fT04oMSk7Ci0JfQotCWlmICghbGlzdF9lbXB0eSgmdGQtPmZsX2xpc3QpKSB7Ci0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gZmxfbGlzdCFcbiIsIHRkKTsKLQkJV0FSTl9PTigxKTsKLQl9CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpCisJCWRldl9XQVJOKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gbGlzdCFcbiIsIHRkKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkKKwkJZGV2X1dBUk4odWhjaV9kZXYodWhjaSksICJ0ZCAlcCBzdGlsbCBpbiBmbF9saXN0IVxuIiwgdGQpOwogCiAJZG1hX3Bvb2xfZnJlZSh1aGNpLT50ZF9wb29sLCB0ZCwgdGQtPmRtYV9oYW5kbGUpOwogfQpAQCAtMjk1LDEwICsyOTEsOCBAQAogc3RhdGljIHZvaWQgdWhjaV9mcmVlX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfcWggKnFoKQogewogCVdBUk5fT04ocWgtPnN0YXRlICE9IFFIX1NUQVRFX0lETEUgJiYgcWgtPnVkZXYpOwotCWlmICghbGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkgewotCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInFoICVwIGxpc3Qgbm90IGVtcHR5IVxuIiwgcWgpOwotCQlXQVJOX09OKDEpOwotCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpCisJCWRldl9XQVJOKHVoY2lfZGV2KHVoY2kpLCAicWggJXAgbGlzdCBub3QgZW1wdHkhXG4iLCBxaCk7CiAKIAlsaXN0X2RlbCgmcWgtPm5vZGUpOwogCWlmIChxaC0+dWRldikgewpAQCAtNzQ2LDExICs3NDAsOSBAQAogewogCXN0cnVjdCB1aGNpX3RkICp0ZCwgKnRtcDsKIAotCWlmICghbGlzdF9lbXB0eSgmdXJicC0+bm9kZSkpIHsKLQkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJ1cmIgJXAgc3RpbGwgb24gUUgncyBsaXN0IVxuIiwKKwlpZiAoIWxpc3RfZW1wdHkoJnVyYnAtPm5vZGUpKQorCQlkZXZfV0FSTih1aGNpX2Rldih1aGNpKSwgInVyYiAlcCBzdGlsbCBvbiBRSCdzIGxpc3QhXG4iLAogCQkJCXVyYnAtPnVyYik7Ci0JCVdBUk5fT04oMSk7Ci0JfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CiAJCXVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJicCh0ZCk7CkBAIC0xMDczLDEzICsxMDY1LDE4IEBACiAJCX0KIAkJaWYgKGV4cG9uZW50IDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlxaC0+cGVyaW9kID0gMSA8PCBleHBvbmVudDsKLQkJcWgtPnNrZWwgPSBTS0VMX0lOREVYKGV4cG9uZW50KTsKIAotCQkvKiBGb3Igbm93LCBpbnRlcnJ1cHQgcGhhc2UgaXMgZml4ZWQgYnkgdGhlIGxheW91dAotCQkgKiBvZiB0aGUgUUggbGlzdHMuICovCi0JCXFoLT5waGFzZSA9IChxaC0+cGVyaW9kIC8gMikgJiAoTUFYX1BIQVNFIC0gMSk7Ci0JCXJldCA9IHVoY2lfY2hlY2tfYmFuZHdpZHRoKHVoY2ksIHFoKTsKKwkJLyogSWYgdGhlIHNsb3QgaXMgZnVsbCwgdHJ5IGEgbG93ZXIgcGVyaW9kICovCisJCWRvIHsKKwkJCXFoLT5wZXJpb2QgPSAxIDw8IGV4cG9uZW50OworCQkJcWgtPnNrZWwgPSBTS0VMX0lOREVYKGV4cG9uZW50KTsKKworCQkJLyogRm9yIG5vdywgaW50ZXJydXB0IHBoYXNlIGlzIGZpeGVkIGJ5IHRoZSBsYXlvdXQKKwkJCSAqIG9mIHRoZSBRSCBsaXN0cy4KKwkJCSAqLworCQkJcWgtPnBoYXNlID0gKHFoLT5wZXJpb2QgLyAyKSAmIChNQVhfUEhBU0UgLSAxKTsKKwkJCXJldCA9IHVoY2lfY2hlY2tfYmFuZHdpZHRoKHVoY2ksIHFoKTsKKwkJfSB3aGlsZSAocmV0ICE9IDAgJiYgLS1leHBvbmVudCA+PSAwKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmIChxaC0+cGVyaW9kID4gdXJiLT5pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggMGZiMTE0Yy4uODc4Yzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTM1NSwxMyArMzU1LDE0IEBACiAJaWYgKG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk+MCkKIAl7CiAJCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKLQkJZXJyICgidGltZW91dCB3YWl0aW5nIGZvciBjYW1lcmEuIik7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIGNhbWVyYS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCQogCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCiAJewotCQl3YXJuICgiQ2FtZXJhIGdldHMgZGlzY29ubmVjdGVkIGR1cmluZyB3YWl0aW5nIGZvciBpcnEuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kYzgwMDogQ2FtZXJhIGdldHMgZGlzY29ubmVjdGVkICIKKwkJICAgICAgICJkdXJpbmcgd2FpdGluZyBmb3IgaXJxLlxuIik7CiAJCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKIAkJcmV0dXJuIC0yOwogCX0KQEAgLTM3OSw3ICszODAsOCBAQAogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCWlmIChzdGF0dXMgIT0gMCkKLQkJZXJyICgid3JpdGluZyBjb21tYW5kIGZhaWxzIChzdGF0dXM9JWkpIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJ3cml0aW5nIGNvbW1hbmQgZmFpbHMgKHN0YXR1cz0laSlcbiIsIHN0YXR1cyk7CiAJZWxzZQogCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCW1kYzgwMC0+d3JpdHRlbiA9IDE7CkBAIC00MDYsNyArNDA4LDggQEAKIAkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CiAJCX0KIAl9IGVsc2UgewotCQllcnIgKCJyZXF1ZXN0IGJ5dGVzIGZhaWxzIChzdGF0dXM6JWkpIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJyZXF1ZXN0IGJ5dGVzIGZhaWxzIChzdGF0dXM6JWkpXG4iLCBzdGF0dXMpOwogCX0KIAltZGM4MDAtPmRvd25sb2FkZWQgPSAxOwogCXdha2VfdXAgKCZtZGM4MDAtPmRvd25sb2FkX3dhaXQpOwpAQCAtNDQzLDEzICs0NDYsMTQgQEAKIAogCWlmIChtZGM4MDAtPmRldiAhPSBOVUxMKQogCXsKLQkJd2FybiAoIm9ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAl7Ci0JCWVyciAoInByb2JlIGZhaWxzIC0+IHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uIik7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvblxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpbnRmX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKQEAgLTQ2MSw3ICs0NjUsNyBAQAogCQl8fCAoIGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpCiAJKQogCXsKLQkJZXJyICgicHJvYmUgZmFpbHMgLT4gd3JvbmcgSW50ZXJmYWNlIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgInByb2JlIGZhaWxzIC0+IHdyb25nIEludGVyZmFjZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDgyLDE5ICs0ODYsMTkgQEAKIAkJfQogCQlpZiAobWRjODAwLT5lbmRwb2ludFtpXSA9PSAtMSkKIAkJewotCQkJZXJyICgicHJvYmUgZmFpbHMgLT4gV3JvbmcgRW5kcG9pbnRzLiIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAicHJvYmUgZmFpbHMgLT4gV3JvbmcgRW5kcG9pbnRzLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAogCi0JaW5mbyAoIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLiIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cbiIpOwogCiAJbXV0ZXhfbG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJm1kYzgwMF9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIgKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTU3MCw3ICs1NzQsNyBAQAogCQltZGM4MDAtPmRldiA9IE5VTEw7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJfQotCWluZm8gKCJNdXN0ZWsgTURDODAwIGRpc2Nvbm5lY3RlZCBmcm9tIFVTQi4iKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuXG4iKTsKIH0KIAogCkBAIC02NDQsNyArNjQ4LDggQEAKIAltZGM4MDAtPmlycV91cmItPmRldiA9IG1kYzgwMC0+ZGV2OwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmlycV91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS4iLCByZXR2YWwpOworCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJInJlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuXG4iLCByZXR2YWwpOwogCQllcnJuID0gLUVJTzsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQpAQCAtNzAxLDcgKzcwNiw4IEBACiAJfQogCWlmIChtZGM4MDAtPnN0YXRlID09IFdPUktJTkcpCiAJewotCQl3YXJuICgiSWxsZWdhbCBTdGF0ZSBcIndvcmtpbmdcIiByZWFjaGVkIGR1cmluZyByZWFkID8hIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kYzgwMDogSWxsZWdhbCBTdGF0ZSBcIndvcmtpbmdcIiIKKwkJICAgICAgICJyZWFjaGVkIGR1cmluZyByZWFkID8hXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTczMyw3ICs3MzksOSBAQAogCQkJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAkJCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT5kb3dubG9hZF91cmIsIEdGUF9LRVJORUwpOwogCQkJCWlmIChyZXR2YWwpIHsKLQkJCQkJZXJyICgiQ2FuJ3Qgc3VibWl0IGRvd25sb2FkIHVyYiAocmV0dmFsPSVpKSIscmV0dmFsKTsKKwkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCSJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiICIKKwkJCQkJCSIocmV0dmFsPSVpKVxuIiwgcmV0dmFsKTsKIAkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQlyZXR1cm4gbGVuLWxlZnQ7CiAJCQkJfQpAQCAtNzQyLDcgKzc1MCwxMCBAQAogCQkJCW1kYzgwMC0+ZG93bmxvYWRlZCA9IDA7CiAJCQkJaWYgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMgIT0gMCkKIAkJCQl7Ci0JCQkJCWVyciAoInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgKHN0YXR1cz0laSkiLG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOworCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkJInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgIgorCQkJCQkJIihzdGF0dXM9JWkpXG4iLAorCQkJCQkJbWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyk7CiAJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJcmV0dXJuIGxlbi1sZWZ0OwogCQkJCX0KQEAgLTgzOSw3ICs4NTAsOCBAQAogCiAJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0dFVF9SRUFEWSkpCiAJCQl7Ci0JCQkJZXJyICgiQ2FtZXJhIGRpZG4ndCBnZXQgcmVhZHkuXG4iKTsKKwkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkiQ2FtZXJhIGRpZG4ndCBnZXQgcmVhZHkuXG4iKTsKIAkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC04NTEsNyArODYzLDkgQEAKIAkJCW1kYzgwMC0+d3JpdGVfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsKSB7Ci0JCQkJZXJyICgic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgKHJldHZhbD0laSkiLCByZXR2YWwpOworCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkJCSJzdWJtaXR0aW5nIHdyaXRlIHVyYiBmYWlscyAiCisJCQkJCSIocmV0dmFsPSVpKVxuIiwgcmV0dmFsKTsKIAkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC04NzAsNyArODg0LDkgQEAKIAkJCQljYXNlIDB4M2U6IC8qIFRha2Ugc2hvdCBpbiBGaW5lIE1vZGUgKFdDYW0gTW9kZSkgKi8KIAkJCQkJaWYgKG1kYzgwMC0+cGljX2xlbiA8IDApCiAJCQkJCXsKLQkJCQkJCWVyciAoImNhbGwgMHgwNyBiZWZvcmUgMHgwNSwweDNlIik7CisJCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkJCSJjYWxsIDB4MDcgYmVmb3JlICIKKwkJCQkJCQkiMHgwNSwweDNlXG4iKTsKIAkJCQkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CiAJCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCQlyZXR1cm4gLUVJTzsKQEAgLTg5MCw3ICs5MDYsNyBAQAogCiAJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgxLFRPX1JFQURfRlJPTV9JUlEpKQogCQkJCQkJewotCQkJCQkJCWVyciAoInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzIik7CisJCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwgInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzXG4iKTsKIAkJCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCQkJcmV0dXJuIC1FSU87CiAJCQkJCQl9CkBAIC05MTgsNyArOTM0LDcgQEAKIAkJCQkJewogCQkJCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ERUZBVUxUX0NPTU1BTkQpKQogCQkJCQkJewotCQkJCQkJCWVyciAoIkNvbW1hbmQgVGltZW91dC4iKTsKKwkJCQkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LCAiQ29tbWFuZCBUaW1lb3V0LlxuIik7CiAJCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJCXJldHVybiAtRUlPOwogCQkJCQkJfQpAQCAtMTAxOCw3ICsxMDM0LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfb25fZmFpbDsKIAotCWluZm8gKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDI4LDcgKzEwNDUsNyBAQAogCiAJaWYgKG1kYzgwMCAhPSBOVUxMKQogCXsKLQkJZXJyICgiY2FuJ3QgYWxsb2MgbWVtb3J5ISIpOworCQlwcmludGsoS0VSTl9FUlIgIm1kYzgwMDogY2FuJ3QgYWxsb2MgbWVtb3J5IVxuIik7CiAKIAkJa2ZyZWUobWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyKTsKIAkJa2ZyZWUobWRjODAwLT53cml0ZV91cmJfYnVmZmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCA0ZWE1MGUwLi5lNDYzZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC00Miw2ICs0MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkdXR1eC4KIAorY29uZmlnIFVTQl9TRVZTRUcKKwl0cmlzdGF0ZSAiVVNCIDctU2VnbWVudCBMRUQgRGlzcGxheSIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgNy1TZWdtZW50IERpc3BsYXkgYnkgRGVsY29tCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnNldnNlZy4KKwogY29uZmlnIFVTQl9SSU81MDAKIAl0cmlzdGF0ZSAiVVNCIERpYW1vbmQgUmlvNTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTI3MSwzICsyODAsMTggQEAKIAkgIFRoZSBmaXJtd2FyZSBmb3IgdGhpcyBkcml2ZXIgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgTWFjT1MKIAkgIGRyaXZlciBiZWZvcmVoYW5kLiBUb29scyBmb3IgZG9pbmcgc28gYXJlIGF2YWlsYWJsZSBhdAogCSAgaHR0cDovL2JlcnNhY2UwMy5mcmVlLmZyCisKK2NvbmZpZyBVU0JfVlNUCisJdHJpc3RhdGUgIlVTQiBWU1QgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgZm9yIFZlcm5pZXIgU29mdHdhcmUgVGVjaG5vbG9naWVzCisJICBidWxrIHVzYiBkZXZpY2VzIHN1Y2ggYXMgdGhlaXIgT2NlYW4tT3B0aWNzIHNwZWN0cm9tZXRlcnMgb3IKKwkgIExhYnF1ZXN0LgorCSAgSXQgaXMgYSBidWxrIGNoYW5uZWwgZHJpdmVyIHdpdGggY29uZmlndXJhYmxlIHJlYWQgYW5kIHdyaXRlCisJICB0aW1lb3V0cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnN0dXNiLgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCmluZGV4IDQ1YjRlMTIuLjEzMzRmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsOCBAQAogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCiBvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KK29iai0kKENPTkZJR19VU0JfU0VWU0VHKQkrPSB1c2JzZXZzZWcubworb2JqLSQoQ09ORklHX1VTQl9WU1QpCQkrPSB2c3R1c2IubwogCiBvYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkJKz0gc2lzdXNidmdhLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwppbmRleCA5NjVmNmVhLi43YjY5MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKQEAgLTI4Myw4ICsyODMsOCBAQAogCiAJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZhZHVfZHJpdmVyLCBzdWJtaW5vcik7CiAJaWYgKCFpbnRlcmZhY2UpIHsKLQkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAotCQkgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZHV0dXg6ICVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciAiCisJCSAgICAgICAibWlub3IgJWRcbiIsIF9fZnVuY19fLCBzdWJtaW5vcik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXhpdF9ub19kZXZpY2U7CiAJfQpAQCAtNDE2LDcgKzQxNiw4IEBACiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgImFkdXR1eDogTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC01NzYsNyArNTc3LDggQEAKIAkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KIAlpZiAoZGV2LT51ZGV2ID09IE5VTEwpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZCIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiYWR1dHV4OiBObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZFxuIiwKKwkJICAgICAgIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTY0NSw3ICs2NDcsOCBAQAogCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0dmFsIDwgMCkgewogCQkJCWRldi0+b3V0X3VyYl9maW5pc2hlZCA9IDE7Ci0JCQkJZXJyKCJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X291dF91cmIgJWQiLCByZXR2YWwpOworCQkJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiQ291bGRuJ3Qgc3VibWl0ICIKKwkJCQkJImludGVycnVwdF9vdXRfdXJiICVkXG4iLCByZXR2YWwpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIApAQCAtODkwLDEzICs4OTMsMTQgQEAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhZHVfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gIgotCQkgICAgIkVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICJfX0ZJTEVfXworCQkgICAgICAgIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmVzdWx0KTsKIAkJZ290byBleGl0OwogCX0KIAotCWluZm8oImFkdXR1eCAiIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7Ci0JaW5mbygiYWR1dHV4IGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIuIFVzZSBhdCB5b3VyIG93biByaXNrIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYWR1dHV4ICIgRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gImFkdXR1eCBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyLiAiCisJICAgICAgICJVc2UgYXQgeW91ciBvd24gcmlza1xuIik7CiAKIGV4aXQ6CiAJZGJnKDIsIiAlcyA6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCmluZGV4IGEwNzZjMjQuLjFkOGUzOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwpAQCAtMTMwLDcgKzEzMCw4IEBACiBleGl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBkYXRhLT51cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCWRldl9lcnIoJnBkYXRhLT51ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIAl9CiB9CkBAIC0yMjAsNyArMjIxLDcgQEAKIAkJfQogCX0KIAlpZiAoIWludF9pbl9lbmRwb2ludEFkZHIpIHsKLQkJZXJyKCJDb3VsZCBub3QgZmluZCBpbnQtaW4gZW5kcG9pbnQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGludC1pbiBlbmRwb2ludFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjI4LDcgKzIyOSw3IEBACiAJcGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXBwbGVkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjQxLDggKzI0Miw4IEBACiAJcGRhdGEtPm1zZ2RhdGEgPSBrbWFsbG9jKEFDRF9NU0dfQlVGRkVSX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YS0+bXNnZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoImFwcGxlZGlzcGxheTogQWxsb2NhdGluZyBidWZmZXIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgIgotCQkJImZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LAorCQkJIkFsbG9jYXRpbmcgYnVmZmVyIGZvciBjb250cm9sIG1lc3NhZ2VzIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTAsNyArMjUxLDcgQEAKIAlwZGF0YS0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkYXRhLT51cmIpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEFsbG9jYXRpbmcgVVJCIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQWxsb2NhdGluZyBVUkIgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI1OSw3ICsyNjAsNyBAQAogCQlHRlBfS0VSTkVMLCAmcGRhdGEtPnVyYi0+dHJhbnNmZXJfZG1hKTsKIAlpZiAoIXBkYXRhLT51cmJkYXRhKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBBbGxvY2F0aW5nIFVSQiBidWZmZXIgZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJBbGxvY2F0aW5nIFVSQiBidWZmZXIgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI3MCw3ICsyNzEsNyBAQAogCQlwZGF0YSwgMSk7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKHBkYXRhLT51cmIsIEdGUF9LRVJORUwpKSB7CiAJCXJldHZhbCA9IC1FSU87Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBTdWJtaXR0aW5nIFVSQiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIlN1Ym1pdHRpbmcgVVJCIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yODAsNyArMjgxLDcgQEAKIAlwZGF0YS0+YmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJsX25hbWUsIE5VTEwsIHBkYXRhLAogCQkJCQkJJmFwcGxlZGlzcGxheV9ibF9kYXRhKTsKIAlpZiAoSVNfRVJSKHBkYXRhLT5iZCkpIHsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yOTEsNyArMjkyLDggQEAKIAogCWlmIChicmlnaHRuZXNzIDwgMCkgewogCQlyZXR2YWwgPSBicmlnaHRuZXNzOwotCQllcnIoImFwcGxlZGlzcGxheTogRXJyb3Igd2hpbGUgZ2V0dGluZyBpbml0aWFsIGJyaWdodG5lc3M6ICVkIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwKKwkJCSJFcnJvciB3aGlsZSBnZXR0aW5nIGluaXRpYWwgYnJpZ2h0bmVzczogJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0zMTQsNyArMzE2LDcgQEAKIAkJCQkJcGRhdGEtPnVyYmRhdGEsIHBkYXRhLT51cmItPnRyYW5zZmVyX2RtYSk7CiAJCQl1c2JfZnJlZV91cmIocGRhdGEtPnVyYik7CiAJCX0KLQkJaWYgKHBkYXRhLT5iZCkKKwkJaWYgKHBkYXRhLT5iZCAmJiAhSVNfRVJSKHBkYXRhLT5iZCkpCiAJCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmJkKTsKIAkJa2ZyZWUocGRhdGEtPm1zZ2RhdGEpOwogCX0KQEAgLTM1Miw3ICszNTQsNyBAQAogewogCXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImFwcGxlZGlzcGxheSIpOwogCWlmICghd3EpIHsKLQkJZXJyKCJDb3VsZCBub3QgY3JlYXRlIHdvcmsgcXVldWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImFwcGxlZGlzcGxheTogQ291bGQgbm90IGNyZWF0ZSB3b3JrIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKaW5kZXggOTM3OTQwNC4uNTcyMGJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYwpAQCAtMjc4LDkgKzI3OCw5IEBACiAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIoIkZ1bmN0aW9uIHVzYl9yZWdpc3RlciBmYWlsZWQhIEVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7Ci0JfQorCWlmIChyZXN1bHQpCisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkISAiCisJCSAgICAgICAiRXJyb3IgbnVtYmVyOiAlZFxuIiwgcmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCmluZGV4IDFjZDllN2UuLjRmYjNjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCkBAIC00MjIsMTMgKzQyMiwxNCBAQAogCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmN5dGhlcm1fZHJpdmVyKTsKLQlpZiAocmVzdWx0KSAKLQl7CQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCEgIgorCQkgICAgICAgIkVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwppbmRleCA0Yjk5NGEwLi5lNzYyYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCkBAIC01MCw3ICs1MCw3IEBACiAJdW5zaWduZWQgY2hhciAqYnVmZmVyID0gIGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiZW1pMjY6IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW5ndGgpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIGxlbmd0aCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiBOb3RlOiB1c2JfY29udHJvbF9tc2cgcmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciBvciBsZW5ndGggb2YgdGhlCkBAIC02NCwxMSArNjQsMTEgQEAKIHN0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKIHsKIAlpbnQgcmVzcG9uc2U7Ci0JaW5mbygiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIC0gJWRcbiIsIF9fZnVuY19fLCByZXNldF9iaXQpOwogCS8qIHByaW50ayhLRVJOX0RFQlVHICIlcyAtICVkIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7ICovCiAJcmVzcG9uc2UgPSBlbWkyNl93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOwogCWlmIChyZXNwb25zZSA8IDApIHsKLQkJZXJyKCJlbWkyNjogc2V0X3Jlc2V0ICglZCkgZmFpbGVkIiwgcmVzZXRfYml0KTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJzZXRfcmVzZXQgKCVkKSBmYWlsZWRcbiIsIHJlc2V0X2JpdCk7CiAJfQogCXJldHVybiByZXNwb25zZTsKIH0KQEAgLTg4LDcgKzg4LDggQEAKIAogCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgLUVOT01FTSk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkXG4iLAorCQkJX19mdW5jX18sIC1FTk9NRU0pOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHdyYXBlcnI7CiAJfQpAQCAtMTA2LDE0ICsxMDcsMTYgQEAKIAkJCQkgICAgJmRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CiAJbm9mdzoKLQkJZXJyKCAiJXMgLSByZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gcmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZFxuIiwKKwkJCV9fZnVuY19fKTsKIAkJZ290byB3cmFwZXJyOwogCX0KIAogCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCiAJZXJyID0gZW1pMjZfc2V0X3Jlc2V0KGRldiwxKTsKIAlpZiAoZXJyIDwgMCkgewotCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOwogCQlnb3RvIHdyYXBlcnI7CiAJfQogCkBAIC0yNTQsNyArMjU3LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAotCWluZm8oIiVzIHN0YXJ0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcyBzdGFydFxuIiwgX19mdW5jX18pOwogCiAJZW1pMjZfbG9hZF9maXJtd2FyZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggNWQ4NTlkZS4uNjAyZWUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtNzMsNyArNzMsNyBAQAogc3RhdGljIGludCBlbWk2Ml9zZXRfcmVzZXQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQogewogCWludCByZXNwb25zZTsKLQlpbmZvKCIlcyAtICVkIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgLSAlZFxuIiwgX19mdW5jX18sIHJlc2V0X2JpdCk7CiAJCiAJcmVzcG9uc2UgPSBlbWk2Ml93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOwogCWlmIChyZXNwb25zZSA8IDApIHsKQEAgLTI3MSw3ICsyNzEsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCWRldl9kYmcoJmludGYtPmRldiwgImVtaTYyX3Byb2JlXG4iKTsKIAotCWluZm8oIiVzIHN0YXJ0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcyBzdGFydFxuIiwgX19mdW5jX18pOwogCiAJZW1pNjJfbG9hZF9maXJtd2FyZShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwppbmRleCA5N2MyODA5Li43OWE3NjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZidWxrcGlwZShmdGRpLT51ZGV2LCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDUwKTsKICAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sZWZ0ID0gcGFja2V0X2J5dGVzIC0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGFzdCA9IDE7CkBAIC05NjAsNyArOTYwLDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgNTAwKTsKICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKICAgICAgICAgICAgICAgICBpbnQgbSA9IHBhY2tldF9ieXRlczsKQEAgLTE4ODAsNyArMTg4MCw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDEwMCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MDApOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpAQCAtMjE3Niw3ICsyMTc2LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDEwMDApOwogICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwppbmRleCA0YmNmN2ZiLi42ZGE4ODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwpAQCAtNDAzLDE0ICs0MDMsMTUgQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAotCWluZm8oIiVzIGRpc2Nvbm5lY3RlZCIsIERSSVZFUl9ERVNDKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfaWRtb3VzZV9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaWRtb3VzZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggOTM3MDMyNi4uYWIwZjMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC04NTEsOSArODUxLDggQEAKIAogCWRiZygyLCAiJXM6IGVudGVyIiwgX19mdW5jX18pOwogCi0JaWYgKHVkZXYgPT0gTlVMTCkgewotCQlpbmZvICgidWRldiBpcyBOVUxMLiIpOwotCX0KKwlpZiAodWRldiA9PSBOVUxMKQorCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJ1ZGV2IGlzIE5VTEwuXG4iKTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCkBAIC05NTQsNyArOTUzLDkgQEAKIAlkZXYtPm1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlpbmZvICgiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZCIsIChkZXYtPm1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgZGV2LT5taW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAiCisJCSAiJWQgbWlub3IgJWRcbiIsIChkZXYtPm1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSksCisJCSBVU0JfTUFKT1IsIGRldi0+bWlub3IpOwogCiAJLyogZ2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBsb2cgaXQgKi8KIAlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsCkBAIC05NzEsMTAgKzk3MiwxMCBAQAogCQlyZXR2YWwgPSByZXN1bHQ7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWluZm8oIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgYnVpbGQgJWQiLAotCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWFqb3IsCi0JICAgICBnZXRfdmVyc2lvbl9yZXBseS5taW5vciwKLQkgICAgIGxlMTZfdG9fY3B1KGdldF92ZXJzaW9uX3JlcGx5LmJ1aWxkX25vKSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgZmlybXdhcmUgdmVyc2lvbiBpcyAlZC4lZCAiCisJCSAiYnVpbGQgJWRcbiIsIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAorCQkgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCisJCSBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOwogCiAKIGV4aXQ6CkBAIC0xMDIxLDcgKzEwMjIsOCBAQAogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJfQogCi0JaW5mbygiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCAobWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsCisJCSAobWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSk7CiAKIAlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fZnVuY19fKTsKIH0KQEAgLTEwNDYsNyArMTA0OCw4IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogZXhpdDoKIAlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19mdW5jX18sIHJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCmluZGV4IDRjZmEyNWIuLmNjOGUwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCkBAIC01OTUsOSArNTk1LDggQEAKICAgICAgICAgfSB3aGlsZSh2YWx1ZSk7CiAgICAgICAgIGtpdC0+ZGV2X25vID0gYml0OwogCi0Ja2l0LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEocGhpZGdldF9jbGFzcywgJmtpdC0+dWRldi0+ZGV2LAotCQkJCQlNS0RFVigwLCAwKSwga2l0LAotCQkJCQkiaW50ZXJmYWNla2l0JWQiLCBraXQtPmRldl9ubyk7CisJa2l0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZraXQtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCisJCQkJIGtpdCwgImludGVyZmFjZWtpdCVkIiwga2l0LT5kZXZfbm8pOwogICAgICAgICBpZiAoSVNfRVJSKGtpdC0+ZGV2KSkgewogICAgICAgICAgICAgICAgIHJjID0gUFRSX0VSUihraXQtPmRldik7CiAgICAgICAgICAgICAgICAga2l0LT5kZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYwppbmRleCA5YjQ2OTZmLi4zODA4OGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYwpAQCAtMzY1LDkgKzM2NSw4IEBACiAJfSB3aGlsZSh2YWx1ZSk7CiAJbWMtPmRldl9ubyA9IGJpdDsKIAotCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEocGhpZGdldF9jbGFzcywgJm1jLT51ZGV2LT5kZXYsCi0JCQkJCU1LREVWKDAsIDApLCBtYywKLQkJCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7CisJbWMtPmRldiA9IGRldmljZV9jcmVhdGUocGhpZGdldF9jbGFzcywgJm1jLT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLCBtYywKKwkJCQkibW90b3Jjb250cm9sJWQiLCBtYy0+ZGV2X25vKTsKIAlpZiAoSVNfRVJSKG1jLT5kZXYpKSB7CiAJCXJjID0gUFRSX0VSUihtYy0+ZGV2KTsKIAkJbWMtPmRldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwppbmRleCAxY2E3ZGRiLi5iZWY2ZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKQEAgLTI3NSw5ICsyNzUsOCBAQAogICAgICAgICB9IHdoaWxlICh2YWx1ZSk7CiAJZGV2LT5kZXZfbm8gPSBiaXQ7CiAKLQlkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShwaGlkZ2V0X2NsYXNzLCAmZGV2LT51ZGV2LT5kZXYsCi0JCQkJCSBNS0RFVigwLCAwKSwgZGV2LAotCQkJCQkgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7CisJZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZkZXYtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCisJCQkJIGRldiwgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7CiAJaWYgKElTX0VSUihkZXYtPmRldikpIHsKIAkJcmMgPSBQVFJfRVJSKGRldi0+ZGV2KTsKIAkJZGV2LT5kZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggMjQ4YTEyYS4uZGViOTViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC04OSw3ICs4OSw3IEBACiAKIAltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKIAotCWluZm8oIlJpbyBvcGVuZWQuIik7CisJZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIG9wZW5lZC5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogCXJpby0+aXNvcGVuID0gMDsKIAotCWluZm8oIlJpbyBjbG9zZWQuIik7CisJZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIGNsb3NlZC5cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00NTEsNyArNDUxLDcgQEAKIAlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOwogCWludCByZXR2YWw7CiAKLQlpbmZvKCJVU0IgUmlvIGZvdW5kIGF0IGFkZHJlc3MgJWQiLCBkZXYtPmRldm51bSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBSaW8gZm91bmQgYXQgYWRkcmVzcyAlZFxuIiwgZGV2LT5kZXZudW0pOwogCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CiAJaWYgKHJldHZhbCkgewpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCWtmcmVlKHJpby0+aWJ1Zik7CiAJCWtmcmVlKHJpby0+b2J1Zik7CiAKLQkJaW5mbygiVVNCIFJpbyBkaXNjb25uZWN0ZWQuIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUmlvIGRpc2Nvbm5lY3RlZC5cbiIpOwogCiAJCXJpby0+cHJlc2VudCA9IDA7CiAJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwpAQCAtNTMxLDcgKzUzMSw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKaW5kZXggMDMzNjhlZC4uMmUxNDEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwpAQCAtMTQ0LDcgKzE0NCw4IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCmluZGV4IDJkYjQyMjguLmUwZmY5Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHgwMDAxKSB7Ci0JCXdhcm4oS0VSTl9JTkZPICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC4iKTsKKwkJZGV2X3dhcm4oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCQpAQCAtMzU5LDEyICszNTksMTMgQEAKIAogCWkgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKIAotCWluZm8oIlVTQkxDRCBWZXJzaW9uICUxZCUxZC4lMWQlMWQgZm91bmQgYXQgYWRkcmVzcyAlZCIsCi0JCShpICYgMHhGMDAwKT4+MTIsKGkgJiAweEYwMCk+PjgsKGkgJiAweEYwKT4+NCwoaSAmIDB4RiksCi0JCWRldi0+dWRldi0+ZGV2bnVtKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kICIKKwkJICJhdCBhZGRyZXNzICVkXG4iLCAoaSAmIDB4RjAwMCk+PjEyLCAoaSAmIDB4RjAwKT4+OCwKKwkJIChpICYgMHhGMCk+PjQsKGkgJiAweEYpLCBkZXYtPnVkZXYtPmRldm51bSk7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbygiVVNCIExDRCBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQkxDRC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMQ0QgZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JMQ0QtJWRcbiIsCisJCSBpbnRlcmZhY2UtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC00MTMsNyArNDE0LDcgQEAKIAkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CiAKLQlpbmZvKCJVU0IgTENEICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBMQ0QgIyVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxjZF9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE2YTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYwpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIFVTQiA3IFNlZ21lbnQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CisgKiBCYXNlZCBvbiB1c2JsZWQuYyBieSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgNyBTZWdtZW50IERyaXZlciIKKworI2RlZmluZSBWRU5ET1JfSUQJMHgwZmM1CisjZGVmaW5lIFBST0RVQ1RfSUQJMHgxMjI3CisjZGVmaW5lIE1BWExFTgkJNgorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisvKiB0aGUgZGlmZmVyZW50IHRleHQgZGlzcGxheSBtb2RlcyB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YgKi8KK3N0YXRpYyBjaGFyICpkaXNwbGF5X3RleHRtb2Rlc1tdID0geyJyYXciLCAiaGV4IiwgImFzY2lpIiwgTlVMTH07CisKK3N0cnVjdCB1c2Jfc2V2c2VnZGV2IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCXU4IHBvd2VyZWQ7CisJdTggbW9kZV9tc2I7CisJdTggbW9kZV9sc2I7CisJdTggZGVjaW1hbHNbTUFYTEVOXTsKKwl1OCB0ZXh0bW9kZTsKKwl1OCB0ZXh0W01BWExFTl07CisJdTE2IHRleHRsZW5ndGg7Cit9OworCisvKiBzeXNmc19zdHJlcSBjYW4ndCByZXBsYWNlIHRoaXMgY29tcGxldGVseQorICogSWYgdGhlIGRldmljZSB3YXMgaW4gaGV4IG1vZGUsIGFuZCB0aGUgdXNlciB3YW50ZWQgYSAwLAorICogaWYgc3RyIGNvbW1hbmRzIGFyZSB1c2VkLCB3ZSB3b3VsZCBhc3N1bWUgdGhlIGVuZCBvZiBzdHJpbmcKKyAqIHNvIG1lbSBjb21tYW5kcyBhcmUgdXNlZC4KKyAqLworaW5saW5lIHNpemVfdCBteV9tZW1sZW4oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaWYgKGNvdW50ID4gMCAmJiBidWZbY291bnQtMV0gPT0gJ1xuJykKKwkJcmV0dXJuIGNvdW50IC0gMTsKKwllbHNlCisJCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfcG93ZXJlZChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODAgKiAweDEwMCkgKyAxMCwgLyogIChwb3dlciBtb2RlKSAqLworCQkJKDB4MDAgKiAweDEwMCkgKyAobXlkZXYtPnBvd2VyZWQgPyAxIDogMCksCisJCQlOVUxMLAorCQkJMCwKKwkJCTIwMDApOworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJwb3dlciByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV9tb2RlKHN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhteWRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShteWRldi0+dWRldiwgMCksCisJCQkweDEyLAorCQkJMHg0OCwKKwkJCSg4MiAqIDB4MTAwKSArIDEwLCAvKiAoc2V0IG1vZGUpICovCisJCQkobXlkZXYtPm1vZGVfbXNiICogMHgxMDApICsgbXlkZXYtPm1vZGVfbHNiLAorCQkJTlVMTCwKKwkJCTAsCisJCQkyMDAwKTsKKworCWlmIChyYyA8IDApCisJCWRldl9kYmcoJm15ZGV2LT51ZGV2LT5kZXYsICJtb2RlIHJldHZhbCA9ICVkXG4iLCByYyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1OCBkZWNpbWFscyA9IDA7CisKKwlidWZmZXIgPSBremFsbG9jKE1BWExFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmbXlkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogVGhlIGRldmljZSBpcyByaWdodCB0byBsZWZ0LCB3aGVyZSBhcyB5b3Ugd3JpdGUgbGVmdCB0byByaWdodCAqLworCWZvciAoaSA9IDA7IGkgPCBteWRldi0+dGV4dGxlbmd0aDsgaSsrKQorCQlidWZmZXJbaV0gPSBteWRldi0+dGV4dFtteWRldi0+dGV4dGxlbmd0aC0xLWldOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODUgKiAweDEwMCkgKyAxMCwgLyogKHdyaXRlIHRleHQpICovCisJCQkoMCAqIDB4MTAwKSArIG15ZGV2LT50ZXh0bW9kZSwgLyogbW9kZSAgKi8KKwkJCWJ1ZmZlciwKKwkJCW15ZGV2LT50ZXh0bGVuZ3RoLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAid3JpdGUgcmV0dmFsID0gJWRcbiIsIHJjKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwkvKiBUaGUgZGV2aWNlIGlzIHJpZ2h0IHRvIGxlZnQsIHdoZXJlIGFzIHlvdSB3cml0ZSBsZWZ0IHRvIHJpZ2h0ICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihteWRldi0+ZGVjaW1hbHMpOyBpKyspCisJCWRlY2ltYWxzIHw9IG15ZGV2LT5kZWNpbWFsc1tpXSA8PCBpOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODYgKiAweDEwMCkgKyAxMCwgLyogKHNldCBkZWNpbWFsKSAqLworCQkJKDAgKiAweDEwMCkgKyBkZWNpbWFscywgLyogZGVjaW1hbHMgKi8KKwkJCU5VTEwsCisJCQkwLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAiZGVjaW1hbCByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCisjZGVmaW5lIE1ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG5hbWUsIHVwZGF0ZV9mY24pCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgCQlcCit7CQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CVwKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbXlkZXYtPm5hbWUpOwkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJXAorCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJXAorCW15ZGV2LT5uYW1lID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQlcCisJdXBkYXRlX2ZjbihteWRldik7IFwKKwkJCQkJCQkJXAorCXJldHVybiBjb3VudDsJCQkJCQlcCit9CQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfYXR0cl8jI25hbWUsIHNldF9hdHRyXyMjbmFtZSk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl90ZXh0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBteWRldi0+dGV4dGxlbmd0aCwgIiVzXG4iLCBteWRldi0+dGV4dCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyX3RleHQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXNpemVfdCBlbmQgPSBteV9tZW1sZW4oYnVmLCBjb3VudCk7CisKKwlpZiAoZW5kID4gc2l6ZW9mKG15ZGV2LT50ZXh0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQobXlkZXYtPnRleHQsIDAsIHNpemVvZihteWRldi0+dGV4dCkpOworCW15ZGV2LT50ZXh0bGVuZ3RoID0gZW5kOworCisJaWYgKGVuZCA+IDApCisJCW1lbWNweShteWRldi0+dGV4dCwgYnVmLCBlbmQpOworCisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXh0LCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd19hdHRyX3RleHQsIHNldF9hdHRyX3RleHQpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfZGVjaW1hbHMoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgaTsKKwlpbnQgcG9zOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihteWRldi0+ZGVjaW1hbHMpOyBpKyspIHsKKwkJcG9zID0gc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykgLSAxIC0gaTsKKwkJaWYgKG15ZGV2LT5kZWNpbWFsc1tpXSA9PSAwKQorCQkJYnVmW3Bvc10gPSAnMCc7CisJCWVsc2UgaWYgKG15ZGV2LT5kZWNpbWFsc1tpXSA9PSAxKQorCQkJYnVmW3Bvc10gPSAnMSc7CisJCWVsc2UKKwkJCWJ1Zltwb3NdID0gJ3gnOworCX0KKworCWJ1ZltzaXplb2YobXlkZXYtPmRlY2ltYWxzKV0gPSAnXG4nOworCXJldHVybiBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSArIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdHRyX2RlY2ltYWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzaXplX3QgZW5kID0gbXlfbWVtbGVuKGJ1ZiwgY291bnQpOworCWludCBpOworCisJaWYgKGVuZCA+IHNpemVvZihteWRldi0+ZGVjaW1hbHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSAnMCcgJiYgYnVmW2ldICE9ICcxJykKKwkJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KG15ZGV2LT5kZWNpbWFscywgMCwgc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykpOworCWZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKGJ1ZltpXSA9PSAnMScpCisJCQlteWRldi0+ZGVjaW1hbHNbZW5kLTEtaV0gPSAxOworCisJdXBkYXRlX2Rpc3BsYXlfdmlzdWFsKG15ZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGRlY2ltYWxzLCBTX0lXVUdPIHwgU19JUlVHTywKKwlzaG93X2F0dHJfZGVjaW1hbHMsIHNldF9hdHRyX2RlY2ltYWxzKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyX3RleHRtb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisKKwlidWZbMF0gPSAwOworCisJZm9yIChpID0gMDsgZGlzcGxheV90ZXh0bW9kZXNbaV07IGkrKykgeworCQlpZiAobXlkZXYtPnRleHRtb2RlID09IGkpIHsKKwkJCXN0cmNhdChidWYsICIgWyIpOworCQkJc3RyY2F0KGJ1ZiwgZGlzcGxheV90ZXh0bW9kZXNbaV0pOworCQkJc3RyY2F0KGJ1ZiwgIl0gIik7CisJCX0gZWxzZSB7CisJCQlzdHJjYXQoYnVmLCAiICIpOworCQkJc3RyY2F0KGJ1ZiwgZGlzcGxheV90ZXh0bW9kZXNbaV0pOworCQkJc3RyY2F0KGJ1ZiwgIiAiKTsKKwkJfQorCX0KKwlzdHJjYXQoYnVmLCAiXG4iKTsKKworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl90ZXh0bW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBkaXNwbGF5X3RleHRtb2Rlc1tpXTsgaSsrKSB7CisJCWlmIChzeXNmc19zdHJlcShkaXNwbGF5X3RleHRtb2Rlc1tpXSwgYnVmKSkgeworCQkJbXlkZXYtPnRleHRtb2RlID0gaTsKKwkJCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHRleHRtb2RlLCBTX0lXVUdPIHwgU19JUlVHTywKKwlzaG93X2F0dHJfdGV4dG1vZGUsIHNldF9hdHRyX3RleHRtb2RlKTsKKworCitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChwb3dlcmVkLCB1cGRhdGVfZGlzcGxheV9wb3dlcmVkKTsKK01ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG1vZGVfbXNiLCB1cGRhdGVfZGlzcGxheV9tb2RlKTsKK01ZREVWX0FUVFJfU0lNUExFX1VOU0lHTkVEKG1vZGVfbHNiLCB1cGRhdGVfZGlzcGxheV9tb2RlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wb3dlcmVkLmF0dHIsCisJJmRldl9hdHRyX3RleHQuYXR0ciwKKwkmZGV2X2F0dHJfdGV4dG1vZGUuYXR0ciwKKwkmZGV2X2F0dHJfZGVjaW1hbHMuYXR0ciwKKwkmZGV2X2F0dHJfbW9kZV9tc2IuYXR0ciwKKwkmZGV2X2F0dHJfbW9kZV9sc2IuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZGV2X2F0dHJzLAorfTsKKworc3RhdGljIGludCBzZXZzZWdfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gTlVMTDsKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJbXlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NldnNlZ2RldiksIEdGUF9LRVJORUwpOworCWlmIChteWRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3JfbWVtOworCX0KKworCW15ZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG15ZGV2KTsKKworCS8qc2V0IGRlZmF1bHRzICovCisJbXlkZXYtPnRleHRtb2RlID0gMHgwMjsgLyogYXNjaWkgbW9kZSAqLworCW15ZGV2LT5tb2RlX21zYiA9IDB4MDY7IC8qIDYgY2hhcmFjdGVycyAqLworCW15ZGV2LT5tb2RlX2xzYiA9IDB4M2Y7IC8qIHNjYW5tb2RlIGZvciA2IGNoYXJzICovCisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmRldl9hdHRyX2dycCk7CisJaWYgKHJjKQorCQlnb3RvIGVycm9yOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIDcgU2VnbWVudCBkZXZpY2Ugbm93IGF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCXVzYl9wdXRfZGV2KG15ZGV2LT51ZGV2KTsKKwlrZnJlZShteWRldik7CitlcnJvcl9tZW06CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBzZXZzZWdfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldjsKKworCW15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmRldl9hdHRyX2dycCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCXVzYl9wdXRfZGV2KG15ZGV2LT51ZGV2KTsKKwlrZnJlZShteWRldik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIDcgU2VnbWVudCBub3cgZGlzY29ubmVjdGVkXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNldnNlZ19kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVzYnNldnNlZyIsCisJLnByb2JlID0Jc2V2c2VnX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc2V2c2VnX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2V2c2VnX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAwOworCisJcmMgPSB1c2JfcmVnaXN0ZXIoJnNldnNlZ19kcml2ZXIpOworCWlmIChyYykKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NldnNlZ19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNldnNlZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Jfc2V2c2VnX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3NldnNlZ19leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwppbmRleCBmMTI1NWIwLi45YTZjMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTIyOCwxMSArMjI4LDEyIEBACiAJCXJldCA9IHJxLT51cmItPnN0YXR1czsKIAkJKnZhbCA9IHByaXYtPnJlZ1socmVnID49IDkpID8gMCA6IHJlZ2luZGV4W3JlZ11dOwogCQlpZiAocmV0KQotCQkJd2FybigiZ2V0XzEyODRfcmVnaXN0ZXI6IHVzYiBlcnJvciAlZCIsIHJldCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJnZXRfMTI4NF9yZWdpc3RlcjogIgorCQkJICAgICAgICJ1c2IgZXJyb3IgJWRcbiIsIHJldCk7CiAJCWtyZWZfcHV0KCZycS0+cmVmX2NvdW50LCBkZXN0cm95X2FzeW5jKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0Jd2FybigiZ2V0XzEyODRfcmVnaXN0ZXIgdGltZW91dCIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgImdldF8xMjg0X3JlZ2lzdGVyIHRpbWVvdXRcbiIpOwogCWtpbGxfYWxsX2FzeW5jX3JlcXVlc3RzX3ByaXYocHJpdik7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC03MTYsNyArNzE3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+YXN5bmNsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YXN5bmNsaXN0KTsKIAlpZiAoIShwcCA9IHBhcnBvcnRfcmVnaXN0ZXJfcG9ydCgwLCBQQVJQT1JUX0lSUV9OT05FLCBQQVJQT1JUX0RNQV9OT05FLCAmcGFycG9ydF91c3M3MjBfb3BzKSkpIHsKLQkJd2FybigiY291bGQgbm90IHJlZ2lzdGVyIHBhcnBvcnQiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNzNzIwOiBjb3VsZCBub3QgcmVnaXN0ZXIgcGFycG9ydFxuIik7CiAJCWdvdG8gcHJvYmVfYWJvcnQ7CiAJfQogCkBAIC04MDAsMTAgKzgwMSwxNCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOwotCWluZm8oIk5PVEU6IHRoaXMgaXMgYSBzcGVjaWFsIHB1cnBvc2UgZHJpdmVyIHRvIGFsbG93IG5vbnN0YW5kYXJkIik7Ci0JaW5mbygicHJvdG9jb2xzIChlZy4gYml0YmFuZykgb3ZlciBVU1M3MjAgdXNiIHRvIHBhcmFsbGVsIGNhYmxlcyIpOwotCWluZm8oIklmIHlvdSBqdXN0IHdhbnQgdG8gY29ubmVjdCB0byBhIHByaW50ZXIsIHVzZSB1c2JscCBpbnN0ZWFkIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IE5PVEU6IHRoaXMgaXMgYSBzcGVjaWFsIHB1cnBvc2UgIgorCSAgICAgICAiZHJpdmVyIHRvIGFsbG93IG5vbnN0YW5kYXJkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IHByb3RvY29scyAoZWcuIGJpdGJhbmcpIG92ZXIgIgorCSAgICAgICAiVVNTNzIwIHVzYiB0byBwYXJhbGxlbCBjYWJsZXNcbiIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogSWYgeW91IGp1c3Qgd2FudCB0byBjb25uZWN0IHRvIGEgIgorCSAgICAgICAicHJpbnRlciwgdXNlIHVzYmxwIGluc3RlYWRcbiIpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjQ4NDcwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKKyAqCisgKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCisgKgorICogIEF1dGhvcjogICAgIEpvaG5uaWUgUGV0ZXJzCisgKiAgICAgICAgICAgICAgQXhpYW4gQ29uc3VsdGluZworICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBNb2RpZmllZCBieTogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgorICogICAgICAgICAgICAgICAgICAgT3JlZ29uIENpdHksIE9SLCBVU0EgOTcwNDUKKyAqCisgKiAgQ29weXJpZ2h0OiAgMjAwNywgMjAwOAorICogICAgICAgICAgICAgIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5CisgKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1CisgKgorICogIFdlYjogICAgICAgIHd3dy52ZXJuaWVyLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi92c3R1c2IuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVlNUIFVTQiBEcml2ZXIgVmVyc2lvbiAxLjUiCisjZGVmaW5lIERSSVZFUl9ERVNDICJWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ3kgQnVsayBVU0IgRHJpdmVyIgorCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMAorI2Vsc2UKKwkjZGVmaW5lIFZTVFVTQl9NSU5PUl9CQVNFCTE5OQorI2VuZGlmCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUwkweDI0NTcKKyNkZWZpbmUgVVNCX1ZFTkRPUl9WRVJOSUVSCTB4MDhGNwkvKiBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neSAqLworCisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjIwMDAJMHgxMDAyCisjZGVmaW5lIFVTQl9QUk9EVUNUX0FEQzEwMDBfRlcJMHgxMDAzCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMAkweDEwMDQKKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwX0ZXCTB4MTAwOQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSMjAwMAkweDEwMEEKKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwX0ZXCTB4MTAxMQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSNDAwMAkweDEwMTIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNjUwCTB4MTAxNAkvKiAiUmVkIFRpZGUiICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX1FFNjUwMDAJMHgxMDE4CisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjQwMDAJMHgxMDIyCisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjMyNQkweDEwMjQJLyogIlZlcm5pZXIgU3BlY3Ryb21ldGVyIiAqLworCisjZGVmaW5lIFVTQl9QUk9EVUNUX0xBQlBSTwkweDAwMDEKKyNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUVVFU1QJMHgwMDA1CisKKyNkZWZpbmUgVlNUX01BWEJVRkZFUgkJKDY0KjEwMjQpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IyMDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX0hSNDAwMCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I2NTApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCNDAwMCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IzMjUpfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9WRVJOSUVSLCBVU0JfUFJPRFVDVF9MQUJRVUVTVCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlBSTyl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RydWN0IHZzdHVzYl9kZXZpY2UgeworCXN0cnVjdCBrcmVmCQkJCWtyZWY7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdXNiX2RldjsKKwljaGFyICAgICAgICAgICAgICAgICAgICBwcmVzZW50OworCWNoYXIgICAgICAgICAgICAgICAgICAgIGlzb3BlbjsKKwlzdHJ1Y3QgdXNiX2FuY2hvciAgICAgICBzdWJtaXR0ZWQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcmRfcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZF90aW1lb3V0X21zOworCWludCAgICAgICAgICAgICAgICAgICAgIHdyX3BpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd3JfdGltZW91dF9tczsKK307CisjZGVmaW5lIHRvX3ZzdF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB2c3R1c2JfZGV2aWNlLCBrcmVmKQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlcjsKKworc3RhdGljIHZvaWQgdnN0dXNiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdG9fdnN0X2RldihrcmVmKTsKKworCXVzYl9wdXRfZGV2KHZzdGRldi0+dXNiX2Rldik7CisJa2ZyZWUodnN0ZGV2KTsKK30KKworc3RhdGljIGludCB2c3R1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnZzdHVzYl9kcml2ZXIsIGltaW5vcihpbm9kZSkpOworCisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgaW1pbm9yKGlub2RlKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghdnN0ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJLyogY2FuIG9ubHkgb3BlbiBvbmUgdGltZSAqLworCWlmICgoIXZzdGRldi0+cHJlc2VudCkgfHwgKHZzdGRldi0+aXNvcGVuKSkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLworCWtyZWZfZ2V0KCZ2c3RkZXYtPmtyZWYpOworCisJdnN0ZGV2LT5pc29wZW4gPSAxOworCisJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZzdGRldjsKKworCWRldl9kYmcoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IG9wZW5lZFxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJdnN0ZGV2LT5pc29wZW4gPSAwOworCisJZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogcmVsZWFzZWRcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlaXQgPSB1cmItPmNvbnRleHQ7CisKKwljb21wbGV0ZShjb21wbGV0ZWl0KTsKK30KKworc3RhdGljIGludCB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIoc3RydWN0IHVyYiAqdXJiLAorCQkJCSAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCQkgICAgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCisJCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQoreworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICoqaG9zdGVwOworCXVuc2lnbmVkIGludCBwaXBlbmQ7CisKKwlpbnQgc3RhdHVzOworCisJaG9zdGVwID0gdXNiX3BpcGVpbihwaXBlKSA/IHVzYl9kZXYtPmVwX2luIDogdXNiX2Rldi0+ZXBfb3V0OworCXBpcGVuZCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7CisJZXAgPSBob3N0ZXBbcGlwZW5kXTsKKworCWlmICghZXAgfHwgKGxlbiA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOworCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCSAodXNiX2NvbXBsZXRlX3QpdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLAorCQkJCSBOVUxMLCBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworCX0gZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCQkgICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCisJCQkJICBOVUxMKTsKKworCWluaXRfY29tcGxldGlvbihkb25lKTsKKwl1cmItPmNvbnRleHQgPSBkb25lOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLAorCQkJICAgICAgIGludCB0aW1lb3V0LCBpbnQgKmFjdHVhbF9sZW5ndGgpCit7CisJdW5zaWduZWQgbG9uZyBleHBpcmU7CisJaW50IHN0YXR1czsKKworCWV4cGlyZSA9IHRpbWVvdXQgPyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChkb25lLCBleHBpcmUpKSB7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQlzdGF0dXMgPSB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IHVyYi0+c3RhdHVzOworCisJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWQsIHVyYiBzdGF0dXMgPSAlZFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sCisJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1cmItPnN0YXR1cyk7CisKKwl9IGVsc2UgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCS8qIGlmIHJlYWxseSBhbiBlcnJvciAqLworCQkJaWYgKHVyYi0+c3RhdHVzICYmICEoKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpICAgICB8fAorCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgfHwKKwkJCQkJICAgICAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpKSB7CisJCQkJc3RhdHVzID0gLUVJTlRSOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJfQorCisJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAorCQkJCSIlczogc2lnbmFsIHBlbmRpbmcgb24gZXAlZCVzIGxlbj0lZC8lZCwiCisJCQkJInVyYiBzdGF0dXMgPSAlZFxuIiwKKwkJCQljdXJyZW50LT5jb21tLAorCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPnN0YXR1cyk7CisKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQl9CisJfQorCisJaWYgKGFjdHVhbF9sZW5ndGgpCisJCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHNzaXplX3QgdnN0dXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBjbnQgPSAtMTsKKwl2b2lkICpidWY7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byByZWFkIHNvbWUgZGF0YSAqLworCWlmICgoY291bnQgPT0gMCkgfHwgKGNvdW50ID4gVlNUX01BWEJVRkZFUikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLworCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7CisJcGlwZSA9ICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHZzdGRldi0+cmRfcGlwZSk7CisJdGltZW91dCA9IHZzdGRldi0+cmRfdGltZW91dF9tczsKKworCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWYsIGNvdW50LCAmZG9uZSk7CisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBjbnQpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCXJldHZhbCA9IGNudDsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKKwl9CisKK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCB2c3R1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwlpbnQgY250ID0gLTE7CisJdm9pZCAqYnVmOworCWludCByZXR2YWwgPSAwOworCisJc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCisJaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogYW55b25lIGhvbWUgKi8KKwlpZiAoIXZzdGRldi0+cHJlc2VudCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KKwlkZXYgPSAgICAgdnN0ZGV2LT51c2JfZGV2OworCXBpcGUgPSAgICB1c2Jfc25kYnVsa3BpcGUoZGV2LCB2c3RkZXYtPndyX3BpcGUpOworCXRpbWVvdXQgPSB2c3RkZXYtPndyX3RpbWVvdXRfbXM7CisKKwlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCWtmcmVlKGJ1Zik7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZiwgY291bnQsICZkb25lKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJaWYgKHJldHZhbCkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0gZWxzZSB7CisJCXJldHZhbCA9IGNudDsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogc2VudCAlZCBieXRlcyB0byBwaXBlICVkXG4iLAorCQkJX19mdW5jX18sIGNudCwgcGlwZSk7CisJfQorCitleGl0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGxvbmcgdnN0dXNiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgY250ID0gLTE7CisJdm9pZCBfX3VzZXIgKmRhdGEgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHZzdHVzYl9hcmdzIHVzYl9kYXRhOworCisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwl2b2lkICpidWZmZXIgPSBOVUxMOyAvKiBtdXN0IGJlIGluaXRpYWxpemVkLiBidWZmZXIgaXMKKwkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCisJCQkgICAgICAqIGlvY3RscyBhbGxvY2F0ZSBpdCAqLworCisJc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYiA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIHVyYiBpcworCQkJCQkgICAgICAqCXJlZmVyZW5jZWQgb24gZXhpdCBidXQgbm90IGFsbAorCQkJCQkgICAgICAqIGlvY3RscyBhbGxvY2F0ZSBpdCAqLworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gVlNUX0lPQ19NQUdJQykgeworCQlkZXZfd2FybigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsCisJCQkgIiVzOiBpb2N0bCBjb21tYW5kICV4LCBiYWQgaW9jdGwgbWFnaWMgJXgsICIKKwkJCSAiZXhwZWN0ZWQgJXhcbiIsIF9fZnVuY19fLCBjbWQsCisJCQkgX0lPQ19UWVBFKGNtZCksIFZTVF9JT0NfTUFHSUMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2JfZGF0YSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCB2c3R1c2JfYXJncykpKSB7CisJCWRldl9lcnIoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnN0ZGV2LT5sb2NrKSkgeworCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcHVsbCBvdXQgdGhlIG5lY2Vzc2FyeSBkYXRhICovCisJZGV2ID0gdnN0ZGV2LT51c2JfZGV2OworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgSU9DVExfVlNUVVNCX0NPTkZJR19SVzoKKworCQl2c3RkZXYtPnJkX3BpcGUgPSB1c2JfZGF0YS5yZF9waXBlOworCQl2c3RkZXYtPnJkX3RpbWVvdXRfbXMgPSB1c2JfZGF0YS5yZF90aW1lb3V0X21zOworCQl2c3RkZXYtPndyX3BpcGUgPSB1c2JfZGF0YS53cl9waXBlOworCQl2c3RkZXYtPndyX3RpbWVvdXRfbXMgPSB1c2JfZGF0YS53cl90aW1lb3V0X21zOworCisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZXR0aW5nIHBpcGVzL3RpbWVvdXRzLCAiCisJCQkicmRwaXBlID0gJWQsIHJkdGltZW91dCA9ICVkLCAiCisJCQkid3JwaXBlID0gJWQsIHdydGltZW91dCA9ICVkXG4iLCBfX2Z1bmNfXywKKwkJCXZzdGRldi0+cmRfcGlwZSwgdnN0ZGV2LT5yZF90aW1lb3V0X21zLAorCQkJdnN0ZGV2LT53cl9waXBlLCB2c3RkZXYtPndyX3RpbWVvdXRfbXMpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfVlNUVVNCX1NFTkRfUElQRToKKworCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisKKwkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7CisKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHVzYl9kYXRhLmJ1ZmZlciwgdXNiX2RhdGEuY291bnQpKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCQlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZmZlciwKKwkJCQkJCSAgdXNiX2RhdGEuY291bnQsICZkb25lKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQkJZ290byBleGl0OworCQl9CisKKwkJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCX0KKworCQlicmVhazsKKwljYXNlIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEU6CisKKwkJaWYgKCh1c2JfZGF0YS5jb3VudCA9PSAwKSB8fCAodXNiX2RhdGEuY291bnQgPiBWU1RfTUFYQlVGRkVSKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWJ1ZmZlciA9IGttYWxsb2ModXNiX2RhdGEuY291bnQsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXRpbWVvdXQgPSB1c2JfZGF0YS50aW1lb3V0X21zOworCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCB1c2JfZGF0YS5waXBlKTsKKworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAorCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIodXNiX2RhdGEuYnVmZmVyLCBidWZmZXIsIGNudCkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXNiX2RhdGEuY291bnQgPSBjbnQ7CisJCWlmIChjb3B5X3RvX3VzZXIoZGF0YSwgJnVzYl9kYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVjdiAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCisJCQkJX19mdW5jX18sIHVzYl9kYXRhLmNvdW50LCB1c2JfZGF0YS5waXBlKTsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlkZXZfd2FybigmZGV2LT5kZXYsICJpb2N0bF92c3R1c2I6IGludmFsaWQgaW9jdGwgY21kICV4XG4iLAorCQkJIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CitleGl0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnN0dXNiX2ZvcHMgPSB7CisJLm93bmVyID0gICAgICAgICAgICAgICAgVEhJU19NT0RVTEUsCisJLnJlYWQgPSAgICAgICAgICAgICAgICAgdnN0dXNiX3JlYWQsCisJLndyaXRlID0gICAgICAgICAgICAgICAgdnN0dXNiX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bCA9ICAgICAgIHZzdHVzYl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gICAgICAgICB2c3R1c2JfaW9jdGwsCisJLm9wZW4gPSAgICAgICAgICAgICAgICAgdnN0dXNiX29wZW4sCisJLnJlbGVhc2UgPSAgICAgICAgICAgICAgdnN0dXNiX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3ZzdHVzYl9jbGFzcyA9IHsKKwkubmFtZSA9ICAgICAgICAgInVzYi92c3R1c2IlZCIsCisJLmZvcHMgPSAgICAgICAgICZ2c3R1c2JfZm9wcywKKwkubWlub3JfYmFzZSA9ICAgVlNUVVNCX01JTk9SX0JBU0UsCit9OworCitzdGF0aWMgaW50IHZzdHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBpOworCWludCByZXR2YWwgPSAwOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKworCXZzdGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2c3RkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbXVzdCBkbyB1c2JfZ2V0X2RldigpIHByaW9yIHRvIGtyZWZfaW5pdCgpIHNpbmNlIHRoZSBrcmVmX3B1dCgpCisJICogcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGRvIGEgdXNiX3B1dF9kZXYoKSAqLworCXVzYl9nZXRfZGV2KGRldik7CisJa3JlZl9pbml0KCZ2c3RkZXYtPmtyZWYpOworCW11dGV4X2luaXQoJnZzdGRldi0+bG9jayk7CisKKwlpID0gZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKKworCWRldl9kYmcoJmludGYtPmRldiwgIlZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLAorCQkoaSAmIDB4RjAwMCkgPj4gMTIsIChpICYgMHhGMDApID4+IDgsCisJCShpICYgMHhGMCkgPj4gNCwgKGkgJiAweEYpLCBkZXYtPmRldm51bSk7CisKKwl2c3RkZXYtPnByZXNlbnQgPSAxOworCXZzdGRldi0+aXNvcGVuID0gMDsKKwl2c3RkZXYtPnVzYl9kZXYgPSBkZXY7CisJaW5pdF91c2JfYW5jaG9yKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHZzdGRldik7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3ZzdHVzYl9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkiJXM6IE5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIsCisJCQlfX2Z1bmNfXyk7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkgIlZTVCBVU0IgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSAoaW50Zi0+bWlub3IgLSBWU1RVU0JfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpOworCisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzLCAlc1xuIiwgRFJJVkVSX0RFU0MsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHZzdHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJaWYgKHZzdGRldikgeworCisJCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisJCXZzdGRldi0+cHJlc2VudCA9IDA7CisKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCQlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKKwl9CisKK30KKworc3RhdGljIGludCB2c3R1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHRpbWU7CisJaWYgKCF2c3RkZXYpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKwl0aW1lID0gdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJnZzdGRldi0+c3VibWl0dGVkLCAxMDAwKTsKKwlpZiAoIXRpbWUpCisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnZzdGRldi0+c3VibWl0dGVkKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c3R1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlciA9IHsKKwkubmFtZSA9ICAgICAgICAgInZzdHVzYiIsCisJLnByb2JlID0gICAgICAgIHZzdHVzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9ICAgdnN0dXNiX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPSAgICAgIHZzdHVzYl9zdXNwZW5kLAorCS5yZXN1bWUgPSAgICAgICB2c3R1c2JfcmVzdW1lLAorCS5pZF90YWJsZSA9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdnN0dXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9yZWdpc3RlcigmdnN0dXNiX2RyaXZlcik7CisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgKCVkKSIsIF9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2c3R1c2JfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodnN0dXNiX2luaXQpOworbW9kdWxlX2V4aXQodnN0dXNiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEZW5uaXMgTydCcmllbi9TdGVwaGVuIFdhcmUiKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA2NTY2ZmMwLi5jOWRlM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTExNjIsOSArMTE2Miw5IEBACiAJaWYgKG1pbm9yID49IE1PTl9CSU5fTUFYX01JTk9SKQogCQlyZXR1cm4gMDsKIAotCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShtb25fYmluX2NsYXNzLCB1YnVzPyB1YnVzLT5jb250cm9sbGVyOiBOVUxMLAotCQkJCSAgICBNS0RFVihNQUpPUihtb25fYmluX2RldjApLCBtaW5vciksIE5VTEwsCi0JCQkJICAgICJ1c2Jtb24lZCIsIG1pbm9yKTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKG1vbl9iaW5fY2xhc3MsIHVidXMgPyB1YnVzLT5jb250cm9sbGVyIDogTlVMTCwKKwkJCSAgICBNS0RFVihNQUpPUihtb25fYmluX2RldjApLCBtaW5vciksIE5VTEwsCisJCQkgICAgInVzYm1vbiVkIiwgbWlub3IpOwogCWlmIChJU19FUlIoZGV2KSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggNDQyZDgwNy4uNWUwYWI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJfQogCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOwogCi0JdXNiX3JlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1YnVzLCAmdXNiX2J1c19saXN0LCBidXNfbGlzdCkgewogCQltb25fYnVzX2luaXQodWJ1cyk7CiAJfQorCXVzYl9yZWdpc3Rlcl9ub3RpZnkoJm1vbl9uYik7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA1OGIyYjhmLi40Yjk1NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0zMywxMCArMzMsNiBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAogCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCi0JaGVscAotCSAgVXNlIGEgc3RhdGljIDxhc20vYXJjaC9oZHJjX2NuZi5oPiBmaWxlIHRvIGRlc2NyaWJlIGhvdyB0aGUKLQkgIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCAoZW5kcG9pbnRzLCBtZWNoYW5pc21zLCBldGMpIG9uIHRoZQotCSAgY3VycmVudCBpdGVyYXRpb24gb2YgYSBnaXZlbiBzeXN0ZW0tb24tY2hpcC4KIAogY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaAppbmRleCBmYzUyMTZiLi43MjliNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5oCkBAIC0xMTksOCArMTE5LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqbXJlZ3M7CQkvKiBNZW50b3IgcmVncyAqLwogCXZvaWQgX19pb21lbQkJCSp0aWJhc2U7CS8qIFRJL0NQUEkgcmVncyAqLwogCi0Jc3RydWN0IGNwcGlfY2hhbm5lbAkJdHhbTVVTQl9DX05VTV9FUFQgLSAxXTsKLQlzdHJ1Y3QgY3BwaV9jaGFubmVsCQlyeFtNVVNCX0NfTlVNX0VQUiAtIDFdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXR4WzRdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXJ4WzRdOwogCiAJc3RydWN0IGRtYV9wb29sCQkJKnBvb2w7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNzViYWYxOC4uZGZiM2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KQEAgLTM5LDcgKzQwLDcgQEAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCi0jaW5jbHVkZSA8YXNtL2FyY2gvaTJjLWNsaWVudC5oPgorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJODcKICNlbmRpZgogCiAjaW5jbHVkZSAiZGF2aW5jaS5oIgpAQCAtMTM4LDcgKzEzOSw2IEBACiAvKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNpZm5kZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCiAKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCkBAIC0xNDYsMTIgKzE0NiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0JZGF2aW5jaV9pMmNfZXhwYW5kZXJfb3AoMHgzYSwgVVNCX0RSVlZCVVMsIHZidXNfc3RhdGUpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAotI2VuZGlmCS8qIG1vZGlmaWVkIGJvYXJkICovCiAjZW5kaWYJLyogRVZNICovCiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24sIGludCBpbW1lZGlhdGUpCkBAIC0xNjUsMjEgKzE2NCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAobWFjaGluZV9pc19kYXZpbmNpX2V2bSgpKSB7Ci0jaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCi0JCS8qIG1vZGlmaWVkIEVWTSBib2FyZCBzd2l0Y2hpbmcgVkJVUyB3aXRoIEdQSU8oNikgbm90IEkyQwotCQkgKiBOT1RFOiAgUElOTVVYMC5SR0I4ODggKGJpdDIzKSBtdXN0IGJlIGNsZWFyCi0JCSAqLwotCQlpZiAoaXNfb24pCi0JCQlncGlvX3NldChHUElPKDYpKTsKLQkJZWxzZQotCQkJZ3Bpb19jbGVhcihHUElPKDYpKTsKLQkJaW1tZWRpYXRlID0gMTsKLSNlbHNlCiAJCWlmIChpbW1lZGlhdGUpCi0JCQlkYXZpbmNpX2kyY19leHBhbmRlcl9vcCgweDNhLCBVU0JfRFJWVkJVUywgIWlzX29uKTsKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7Ci0jZW5kaWYKIAl9CiAjZW5kaWYKIAlpZiAoaW1tZWRpYXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggMTI4ZTk0OS4uNGEzNTc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC04Miw5ICs4Miw5IEBACiAvKgogICogVGhpcyBnZXRzIG1hbnkga2luZHMgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbjoKICAqCS0gS2NvbmZpZyBmb3IgZXZlcnl0aGluZyB1c2VyLWNvbmZpZ3VyYWJsZQotICoJLSA8YXNtL2FyY2gvaGRyY19jbmYuaD4gZm9yIFNPQyBvciBmYW1pbHkgZGV0YWlscwogICoJLSBwbGF0Zm9ybV9kZXZpY2UgZm9yIGFkZHJlc3NpbmcsIGlycSwgYW5kIHBsYXRmb3JtX2RhdGEKICAqCS0gcGxhdGZvcm1fZGF0YSBpcyBtb3N0bHkgZm9yIGJvYXJkLXNwZWNpZmljIGluZm9ybWFyaW9uCisgKgkgIChwbHVzIHJlY2VudHJseSwgU09DIG9yIGZhbWlseSBkZXRhaWxzKQogICoKICAqIE1vc3Qgb2YgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgKHNvbWVkYXkpIHZhbmlzaC4KICAqLwpAQCAtOTc0LDkgKzk3NCw5IEBACiAvKgogICogVGhlIHNpbGljb24gZWl0aGVyIGhhcyBoYXJkLXdpcmVkIGVuZHBvaW50IGNvbmZpZ3VyYXRpb25zLCBvciBlbHNlCiAgKiAiZHluYW1pYyBmaWZvIiBzaXppbmcuICBUaGUgZHJpdmVyIGhhcyBzdXBwb3J0IGZvciBib3RoLCB0aG91Z2ggYXQgdGhpcwotICogd3JpdGluZyBvbmx5IHRoZSBkeW5hbWljIHNpemluZyBpcyB2ZXJ5IHdlbGwgdGVzdGVkLiAgIFdlIHVzZSBub3JtYWwKLSAqIGlkaW9tcyB0byBzbyBib3RoIG1vZGVzIGFyZSBjb21waWxlLXRlc3RlZCwgYnV0IGRlYWQgY29kZSBlbGltaW5hdGlvbgotICogbGVhdmVzIG9ubHkgdGhlIHJlbGV2YW50IG9uZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisgKiB3cml0aW5nIG9ubHkgdGhlIGR5bmFtaWMgc2l6aW5nIGlzIHZlcnkgd2VsbCB0ZXN0ZWQuICAgU2luY2Ugd2Ugc3dpdGNoZWQKKyAqIGF3YXkgZnJvbSBjb21waWxlLXRpbWUgaGFyZHdhcmUgcGFyYW1ldGVycywgd2UgY2FuIG5vIGxvbmdlciByZWx5IG9uCisgKiBkZWFkIGNvZGUgZWxpbWluYXRpb24gdG8gbGVhdmUgb25seSB0aGUgcmVsZXZhbnQgb25lIGluIHRoZSBvYmplY3QgZmlsZS4KICAqCiAgKiBXZSBkb24ndCBjdXJyZW50bHkgdXNlIGR5bmFtaWMgZmlmbyBzZXR1cCBjYXBhYmlsaXR5IHRvIGRvIGFueXRoaW5nCiAgKiBtb3JlIHRoYW4gc2VsZWN0aW5nIG9uZSBvZiBhIGJ1bmNoIG9mIHByZWRlZmluZWQgY29uZmlndXJhdGlvbnMuCkBAIC0xODA2LDYgKzE4MDYsNyBAQAogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwogCW11c2ItPmNvbmZpZyA9IGNvbmZpZzsKKwlCVUdfT04obXVzYi0+Y29uZmlnLT5udW1fZXBzID4gTVVTQl9DX05VTV9FUFMpOwogCWZvciAoZXBudW0gPSAwLCBlcCA9IG11c2ItPmVuZHBvaW50czsKIAkJCWVwbnVtIDwgbXVzYi0+Y29uZmlnLT5udW1fZXBzOwogCQkJZXBudW0rKywgZXArKykgewpAQCAtMjA1NCwxNSArMjA1NSw2IEBACiAKIAl9CiAKLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlpZiAobXVzYi0+Y2xvY2spCi0JCWNsa19wdXQobXVzYi0+Y2xvY2spOwotCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOwotCW11c2JfZnJlZShtdXNiKTsKLQlyZXR1cm4gc3RhdHVzOwotCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGUpOwogCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92YnVzKTsKQEAgLTIwNzEsMTIgKzIwNjMsMzEgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgKi8KIAlzdGF0dXMgPSAwOwogI2VuZGlmCisJaWYgKHN0YXR1cykKKwkJZ290byBmYWlsMjsKKworCXJldHVybiAwOworCitmYWlsMjoKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7CisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfc3JwKTsKKyNlbmRpZgorI2VuZGlmCisJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOworZmFpbDoKKwlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCisJCSJtdXNiX2luaXRfY29udHJvbGxlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisKKwlpZiAobXVzYi0+Y2xvY2spCisJCWNsa19wdXQobXVzYi0+Y2xvY2spOworCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOworCW11c2JfZnJlZShtdXNiKTsKIAogCXJldHVybiBzdGF0dXM7CiAKLWZhaWwyOgotCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKLQlnb3RvIGZhaWw7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCBhNTc2NTJmLi4zZjVlMzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogewogCXZvaWQgX19pb21lbQkJKnJlZ3MgPSBtdXNiLT5jb250cm9sX2VwLT5yZWdzOwogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCXUxNgkJCXRtcDsKKwl1MTYJCQljb3VudCwgY3NyOwogCiAJcmVxID0gbmV4dF9lcDBfcmVxdWVzdChtdXNiKTsKIApAQCAtNDQ5LDM1ICs0NDksMzUgQEAKIAkJdW5zaWduZWQJbGVuID0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKIAogCQkvKiByZWFkIHRoZSBidWZmZXIgKi8KLQkJdG1wID0gbXVzYl9yZWFkYihyZWdzLCBNVVNCX0NPVU5UMCk7Ci0JCWlmICh0bXAgPiBsZW4pIHsKKwkJY291bnQgPSBtdXNiX3JlYWRiKHJlZ3MsIE1VU0JfQ09VTlQwKTsKKwkJaWYgKGNvdW50ID4gbGVuKSB7CiAJCQlyZXEtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7Ci0JCQl0bXAgPSBsZW47CisJCQljb3VudCA9IGxlbjsKIAkJfQotCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCB0bXAsIGJ1Zik7Ci0JCXJlcS0+YWN0dWFsICs9IHRtcDsKLQkJdG1wID0gTVVTQl9DU1IwX1BfU1ZEUlhQS1RSRFk7Ci0JCWlmICh0bXAgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgeworCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCBjb3VudCwgYnVmKTsKKwkJcmVxLT5hY3R1YWwgKz0gY291bnQ7CisJCWNzciA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZOworCQlpZiAoY291bnQgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgewogCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47Ci0JCQl0bXAgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwkJCWNzciB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOwogCQl9IGVsc2UKIAkJCXJlcSA9IE5VTEw7CiAJfSBlbHNlCi0JCXRtcCA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZIHwgTVVTQl9DU1IwX1BfU0VORFNUQUxMOworCQljc3IgPSBNVVNCX0NTUjBfUF9TVkRSWFBLVFJEWSB8IE1VU0JfQ1NSMF9QX1NFTkRTVEFMTDsKIAogCiAJLyogQ29tcGxldGlvbiBoYW5kbGVyIG1heSBjaG9vc2UgdG8gc3RhbGwsIGUuZy4gYmVjYXVzZSB0aGUKIAkgKiBtZXNzYWdlIGp1c3QgcmVjZWl2ZWQgaG9sZHMgaW52YWxpZCBkYXRhLgogCSAqLwogCWlmIChyZXEpIHsKLQkJbXVzYi0+YWNrcGVuZCA9IHRtcDsKKwkJbXVzYi0+YWNrcGVuZCA9IGNzcjsKIAkJbXVzYl9nX2VwMF9naXZlYmFjayhtdXNiLCByZXEpOwogCQlpZiAoIW11c2ItPmFja3BlbmQpCiAJCQlyZXR1cm47CiAJCW11c2ItPmFja3BlbmQgPSAwOwogCX0KIAltdXNiX2VwX3NlbGVjdChtdXNiLT5tcmVncywgMCk7Ci0JbXVzYl93cml0ZXcocmVncywgTVVTQl9DU1IwLCB0bXApOworCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfQ1NSMCwgY3NyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDhiNGJlMDEuLjMxMzM5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKgogICogQ2xlYXIgVFggZmlmby4gTmVlZGVkIHRvIGF2b2lkIEJBQkJMRSBlcnJvcnMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCitzdGF0aWMgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCiB7CiAJdm9pZCBfX2lvbWVtCSplcGlvID0gZXAtPnJlZ3M7CiAJdTE2CQljc3I7CkBAIC0yOTEsNiArMjkxLDcgQEAKIAkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCiAJCQkpOwogCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAobXVzYl90b19oY2QobXVzYiksIHVyYik7CiAJc3Bpbl91bmxvY2soJm11c2ItPmxvY2spOwogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKG11c2JfdG9faGNkKG11c2IpLCB1cmIsIHN0YXR1cyk7CiAJc3Bpbl9sb2NrKCZtdXNiLT5sb2NrKTsKQEAgLTM1Myw4ICszNTQsNiBAQAogCQlicmVhazsKIAl9CiAKLQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChtdXNiX3RvX2hjZChtdXNiKSwgdXJiKTsKLQogCXFoLT5pc19yZWFkeSA9IDA7CiAJX19tdXNiX2dpdmViYWNrKG11c2IsIHVyYiwgc3RhdHVzKTsKIAlxaC0+aXNfcmVhZHkgPSByZWFkeTsKQEAgLTQzNiw3ICs0MzUsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1MTYgbXVzYl9oX2ZsdXNoX3J4ZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBjc3IpCitzdGF0aWMgdTE2IG11c2JfaF9mbHVzaF9yeGZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgY3NyKQogewogCS8qIHdlIGRvbid0IHdhbnQgZmlmbyB0byBmaWxsIGl0c2VsZiBhZ2FpbjsKIAkgKiBpZ25vcmUgZG1hICh2YXJpb3VzIG1vZGVscyksCkBAIC0xMDA1LDcgKzEwMDQsNyBAQAogCiAvKgogICogSGFuZGxlIGRlZmF1bHQgZW5kcG9pbnQgaW50ZXJydXB0IGFzIGhvc3QuIE9ubHkgY2FsbGVkIGluIElSUSB0aW1lCi0gKiBmcm9tIHRoZSBMaW51eElzcigpIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBmcm9tIG11c2JfaW50ZXJydXB0KCkuCiAgKgogICogY2FsbGVkIHdpdGggY29udHJvbGxlciBpcnFsb2NrZWQKICAqLwpAQCAtMTc5MSw3ICsxNzkwLDkgQEAKIAkgKi8KIAlxaCA9IGt6YWxsb2Moc2l6ZW9mICpxaCwgbWVtX2ZsYWdzKTsKIAlpZiAoIXFoKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4NzMsNyArMTg3NCwxMSBAQAogCQkJLyogc2V0IHVwIHR0IGluZm8gaWYgbmVlZGVkICovCiAJCQlpZiAodXJiLT5kZXYtPnR0KSB7CiAJCQkJcWgtPmhfcG9ydF9yZWcgPSAodTgpIHVyYi0+ZGV2LT50dHBvcnQ7Ci0JCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5odWIpCisJCQkJCXFoLT5oX2FkZHJfcmVnID0KKwkJCQkJCSh1OCkgdXJiLT5kZXYtPnR0LT5odWItPmRldm51bTsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5tdWx0aSkKKwkJCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKIAkJCX0KIAkJfQogCX0KQEAgLTE5MDMsNyArMTkwOCw5IEBACiAKIGRvbmU6CiAJaWYgKHJldCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlrZnJlZShxaCk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCmluZGV4IDZiYmVkYWUuLjIyM2YwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCkBAIC0zNyw3ICszNyw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaWZuZGVmCUNPTkZJR19BUk0KKyNpZiAhZGVmaW5lZChDT05GSUdfQVJNKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJIKSBcCisJJiYgIWRlZmluZWQoQ09ORklHX0FWUjMyKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDMzIpIFwKKwkmJiAhZGVmaW5lZChDT05GSUdfUFBDNjQpCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQogCXsgaW5zbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCA5YmE4ZmI3Li44YzczNGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTQ1LDggKzQ1LDggQEAKICNkZWZpbmUgTVVTQl9IU0RNQV9BRERSRVNTCQkweDgKICNkZWZpbmUgTVVTQl9IU0RNQV9DT1VOVAkJMHhjCiAKLSNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYkNoYW5uZWwsIF9vZmZzZXQpCQlcCi0JCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JDaGFubmVsIDw8IDQpICsgX29mZnNldCkKKyNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYmNoYW5uZWwsIF9vZmZzZXQpCQlcCisJCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JjaGFubmVsIDw8IDQpICsgX29mZnNldCkKIAogLyogY29udHJvbCByZWdpc3RlciAoMTYtYml0KTogKi8KICNkZWZpbmUgTVVTQl9IU0RNQV9FTkFCTEVfU0hJRlQJCTAKQEAgLTY3LDIzICs2NywyMyBAQAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXI7CiAKIHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsIHsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwJCUNoYW5uZWw7CisJc3RydWN0IGRtYV9jaGFubmVsCQljaGFubmVsOwogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyCSpjb250cm9sbGVyOwotCXUzMgkJCQlkd1N0YXJ0QWRkcmVzczsKKwl1MzIJCQkJc3RhcnRfYWRkcjsKIAl1MzIJCQkJbGVuOwotCXUxNgkJCQl3TWF4UGFja2V0U2l6ZTsKLQl1OAkJCQliSW5kZXg7CisJdTE2CQkJCW1heF9wYWNrZXRfc3o7CisJdTgJCQkJaWR4OwogCXU4CQkJCWVwbnVtOwogCXU4CQkJCXRyYW5zbWl0OwogfTsKIAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgewotCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJQ29udHJvbGxlcjsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJYUNoYW5uZWxbTVVTQl9IU0RNQV9DSEFOTkVMU107Ci0Jdm9pZAkJCQkqcERtYVByaXZhdGU7Ci0Jdm9pZCBfX2lvbWVtCQkJKnBDb3JlQmFzZTsKLQl1OAkJCQliQ2hhbm5lbENvdW50OwotCXU4CQkJCWJtVXNlZENoYW5uZWxzOworCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJY29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJY2hhbm5lbFtNVVNCX0hTRE1BX0NIQU5ORUxTXTsKKwl2b2lkCQkJCSpwcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJdTgJCQkJY2hhbm5lbF9jb3VudDsKKwl1OAkJCQl1c2VkX2NoYW5uZWxzOwogCXU4CQkJCWlycTsKIH07CiAKQEAgLTkzLDkxICs5Myw5MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwpOworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfcmVsZWFzZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwpOwogCiBzdGF0aWMgaW50IGRtYV9jb250cm9sbGVyX3N0b3Aoc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKLQlzdHJ1Y3QgbXVzYiAqbXVzYiA9IChzdHJ1Y3QgbXVzYiAqKSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsOwotCXU4IGJCaXQ7CisJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywKKwkJCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBjb250cm9sbGVyKTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CisJdTggYml0OwogCi0JaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICE9IDApIHsKKwlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAhPSAwKSB7CiAJCWRldl9lcnIobXVzYi0+Y29udHJvbGxlciwKIAkJCSJTdG9wcGluZyBETUEgY29udHJvbGxlciB3aGlsZSBjaGFubmVsIGFjdGl2ZVxuIik7CiAKLQkJZm9yIChiQml0ID0gMDsgYkJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJCaXQrKykgewotCQkJaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpIHsKLQkJCQlwQ2hhbm5lbCA9ICZjb250cm9sbGVyLT5hQ2hhbm5lbFtiQml0XS5DaGFubmVsOwotCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UocENoYW5uZWwpOworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJpdCsrKSB7CisJCQlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAmICgxIDw8IGJpdCkpIHsKKwkJCQljaGFubmVsID0gJmNvbnRyb2xsZXItPmNoYW5uZWxbYml0XS5jaGFubmVsOworCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UoY2hhbm5lbCk7CiAKLQkJCQlpZiAoIWNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzKQorCQkJCWlmICghY29udHJvbGxlci0+dXNlZF9jaGFubmVscykKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IGRtYV9jb250cm9sbGVyICpjLAogCQkJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggdHJhbnNtaXQpCiB7Ci0JdTggYkJpdDsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9Ci0JCQljb250YWluZXJfb2YoYywgc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIENvbnRyb2xsZXIpOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IE5VTEw7CisJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gTlVMTDsKKwl1OCBiaXQ7CiAKLQlmb3IgKGJCaXQgPSAwOyBiQml0IDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYkJpdCsrKSB7Ci0JCWlmICghKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpKSB7Ci0JCQljb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyB8PSAoMSA8PCBiQml0KTsKLQkJCXBJbXBsQ2hhbm5lbCA9ICYoY29udHJvbGxlci0+YUNoYW5uZWxbYkJpdF0pOwotCQkJcEltcGxDaGFubmVsLT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQkJCXBJbXBsQ2hhbm5lbC0+YkluZGV4ID0gYkJpdDsKLQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07Ci0JCQlwSW1wbENoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbCA9ICYocEltcGxDaGFubmVsLT5DaGFubmVsKTsKLQkJCXBDaGFubmVsLT5wcml2YXRlX2RhdGEgPSBwSW1wbENoYW5uZWw7Ci0JCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7Ci0JCQlwQ2hhbm5lbC0+bWF4X2xlbiA9IDB4MTAwMDA7CisJZm9yIChiaXQgPSAwOyBiaXQgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiaXQrKykgeworCQlpZiAoIShjb250cm9sbGVyLT51c2VkX2NoYW5uZWxzICYgKDEgPDwgYml0KSkpIHsKKwkJCWNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgfD0gKDEgPDwgYml0KTsKKwkJCW11c2JfY2hhbm5lbCA9ICYoY29udHJvbGxlci0+Y2hhbm5lbFtiaXRdKTsKKwkJCW11c2JfY2hhbm5lbC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisJCQltdXNiX2NoYW5uZWwtPmlkeCA9IGJpdDsKKwkJCW11c2JfY2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07CisJCQltdXNiX2NoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7CisJCQljaGFubmVsID0gJihtdXNiX2NoYW5uZWwtPmNoYW5uZWwpOworCQkJY2hhbm5lbC0+cHJpdmF0ZV9kYXRhID0gbXVzYl9jaGFubmVsOworCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQljaGFubmVsLT5tYXhfbGVuID0gMHgxMDAwMDsKIAkJCS8qIFR4ID0+IG1vZGUgMTsgUnggPT4gbW9kZSAwICovCi0JCQlwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbC0+YWN0dWFsX2xlbiA9IDA7CisJCQljaGFubmVsLT5kZXNpcmVkX21vZGUgPSB0cmFuc21pdDsKKwkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHBDaGFubmVsOworCisJcmV0dXJuIGNoYW5uZWw7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSAwOwotCXBJbXBsQ2hhbm5lbC0+bGVuID0gMDsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSAwOworCW11c2JfY2hhbm5lbC0+bGVuID0gMDsKIAotCXBJbXBsQ2hhbm5lbC0+Y29udHJvbGxlci0+Ym1Vc2VkQ2hhbm5lbHMgJj0KLQkJfigxIDw8IHBJbXBsQ2hhbm5lbC0+YkluZGV4KTsKKwltdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgJj0KKwkJfigxIDw8IG11c2JfY2hhbm5lbC0+aWR4KTsKIAotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKKwljaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKIH0KIAotc3RhdGljIHZvaWQgY29uZmlndXJlX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCwKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCShzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKSBwQ2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gcEltcGxDaGFubmVsLT5jb250cm9sbGVyOwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5wQ29yZUJhc2U7Ci0JdTggYkNoYW5uZWwgPSBwSW1wbENoYW5uZWwtPmJJbmRleDsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gbXVzYl9jaGFubmVsLT5jb250cm9sbGVyOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCXU4IGJjaGFubmVsID0gbXVzYl9jaGFubmVsLT5pZHg7CiAJdTE2IGNzciA9IDA7CiAKIAlEQkcoNCwgIiVwLCBwa3Rfc3ogJWQsIGFkZHIgMHgleCwgbGVuICVkLCBtb2RlICVkXG4iLAotCQkJcENoYW5uZWwsIHBhY2tldF9zeiwgZG1hX2FkZHIsIGxlbiwgbW9kZSk7CisJCQljaGFubmVsLCBwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCiAJaWYgKG1vZGUpIHsKIAkJY3NyIHw9IDEgPDwgTVVTQl9IU0RNQV9NT0RFMV9TSElGVDsKQEAgLTE5NSwxODAgKzE5NSwxODMgQEAKIAkJfQogCX0KIAotCWNzciB8PSAocEltcGxDaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQorCWNzciB8PSAobXVzYl9jaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfRU5BQkxFX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfSVJRRU5BQkxFX1NISUZUKQotCQl8IChwSW1wbENoYW5uZWwtPnRyYW5zbWl0CisJCXwgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQKIAkJCQk/ICgxIDw8IE1VU0JfSFNETUFfVFJBTlNNSVRfU0hJRlQpCiAJCQkJOiAwKTsKIAogCS8qIGFkZHJlc3MvY291bnQgKi8KIAltdXNiX3dyaXRlbChtYmFzZSwKLQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKIAkJZG1hX2FkZHIpOwogCW11c2Jfd3JpdGVsKG1iYXNlLAotCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCiAJCWxlbik7CiAKIAkvKiBjb250cm9sICh0aGlzIHNob3VsZCBzdGFydCB0aGluZ3MpICovCiAJbXVzYl93cml0ZXcobWJhc2UsCi0JCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCiAJCWNzcik7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfcHJvZ3JhbShzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsLAorc3RhdGljIGludCBkbWFfY2hhbm5lbF9wcm9ncmFtKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCiAJREJHKDIsICJlcCVkLSVzIHBrdF9zeiAlZCwgZG1hX2FkZHIgMHgleCBsZW5ndGggJWQsIG1vZGUgJWRcbiIsCi0JCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQgPyAiVHgiIDogIlJ4IiwKKwkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJbXVzYl9jaGFubmVsLT50cmFuc21pdCA/ICJUeCIgOiAiUngiLAogCQlwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCi0JQlVHX09OKHBDaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV04gfHwKLQkJcENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSk7CisJQlVHX09OKGNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTiB8fAorCQljaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSBkbWFfYWRkcjsKLQlwSW1wbENoYW5uZWwtPmxlbiA9IGxlbjsKLQlwSW1wbENoYW5uZWwtPndNYXhQYWNrZXRTaXplID0gcGFja2V0X3N6OwotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQlVTWTsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSBkbWFfYWRkcjsKKwltdXNiX2NoYW5uZWwtPmxlbiA9IGxlbjsKKwltdXNiX2NoYW5uZWwtPm1heF9wYWNrZXRfc3ogPSBwYWNrZXRfc3o7CisJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0JVU1k7CiAKIAlpZiAoKG1vZGUgPT0gMSkgJiYgKGxlbiA+PSBwYWNrZXRfc3opKQotCQljb25maWd1cmVfY2hhbm5lbChwQ2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKKwkJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKIAllbHNlCi0JCWNvbmZpZ3VyZV9jaGFubmVsKHBDaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOworCQljb25maWd1cmVfY2hhbm5lbChjaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKLQl1OCBiQ2hhbm5lbCA9IHBJbXBsQ2hhbm5lbC0+YkluZGV4OwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBwSW1wbENoYW5uZWwtPmNvbnRyb2xsZXItPnBDb3JlQmFzZTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBtdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPmJhc2U7CisKKwl1OCBiY2hhbm5lbCA9IG11c2JfY2hhbm5lbC0+aWR4OwogCXUxNiBjc3I7CiAKLQlpZiAocENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgewotCQlpZiAocEltcGxDaGFubmVsLT50cmFuc21pdCkgeworCWlmIChjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJaWYgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQpIHsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQlNVVNCX0VQX09GRlNFVChwSW1wbENoYW5uZWwtPmVwbnVtLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sCiAJCQkJCQlNVVNCX1RYQ1NSKSk7CiAJCQljc3IgJj0gfihNVVNCX1RYQ1NSX0FVVE9TRVQgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQUVOQUIgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQU1PREUpOwogCQkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQkJTVVTQl9FUF9PRkZTRVQocEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCU1VU0JfVFhDU1IpLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sIE1VU0JfVFhDU1IpLAogCQkJCWNzcik7CiAJCX0gZWxzZSB7CiAJCQljc3IgPSBtdXNiX3JlYWR3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJTVVTQl9FUF9PRkZTRVQobXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCU1VU0JfUlhDU1IpKTsKIAkJCWNzciAmPSB+KE1VU0JfUlhDU1JfQVVUT0NMRUFSIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFFTkFCIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFNT0RFKTsKIAkJCW11c2Jfd3JpdGV3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCQkJCQlNVVNCX1JYQ1NSKSwKKwkJCQlNVVNCX0VQX09GRlNFVChtdXNiX2NoYW5uZWwtPmVwbnVtLCBNVVNCX1JYQ1NSKSwKIAkJCQljc3IpOwogCQl9CiAKIAkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPTlRST0wpLAorCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT05UUk9MKSwKIAkJCTApOwogCQltdXNiX3dyaXRlbChtYmFzZSwKLQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQUREUkVTUyksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0FERFJFU1MpLAogCQkJMCk7CiAJCW11c2Jfd3JpdGVsKG1iYXNlLAotCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKIAkJCTApOwogCi0JCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfRlJFRTsKKwkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJKHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICopcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWw7Ci0Jc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+cENvcmVCYXNlOwotCXN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWw7Ci0JdTggYkNoYW5uZWw7Ci0JdTE2IGNzcjsKLQl1MzIgZHdBZGRyZXNzOwotCXU4IGludF9oc2RtYTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IHByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCiAJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdTggYmNoYW5uZWw7CisJdTggaW50X2hzZG1hOworCisJdTMyIGFkZHI7CisJdTE2IGNzcjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAlpbnRfaHNkbWEgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwogCWlmICghaW50X2hzZG1hKQogCQlnb3RvIGRvbmU7CiAKLQlmb3IgKGJDaGFubmVsID0gMDsgYkNoYW5uZWwgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiQ2hhbm5lbCsrKSB7Ci0JCWlmIChpbnRfaHNkbWEgJiAoMSA8PCBiQ2hhbm5lbCkpIHsKLQkJCXBJbXBsQ2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQotCQkJCQkmKGNvbnRyb2xsZXItPmFDaGFubmVsW2JDaGFubmVsXSk7Ci0JCQlwQ2hhbm5lbCA9ICZwSW1wbENoYW5uZWwtPkNoYW5uZWw7CisJZm9yIChiY2hhbm5lbCA9IDA7IGJjaGFubmVsIDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYmNoYW5uZWwrKykgeworCQlpZiAoaW50X2hzZG1hICYgKDEgPDwgYmNoYW5uZWwpKSB7CisJCQltdXNiX2NoYW5uZWwgPSAoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikKKwkJCQkJJihjb250cm9sbGVyLT5jaGFubmVsW2JjaGFubmVsXSk7CisJCQljaGFubmVsID0gJm11c2JfY2hhbm5lbC0+Y2hhbm5lbDsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwKKwkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwKIAkJCQkJCQlNVVNCX0hTRE1BX0NPTlRST0wpKTsKIAotCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKQotCQkJCXBJbXBsQ2hhbm5lbC0+Q2hhbm5lbC5zdGF0dXMgPQorCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKSB7CisJCQkJbXVzYl9jaGFubmVsLT5jaGFubmVsLnN0YXR1cyA9CiAJCQkJCU1VU0JfRE1BX1NUQVRVU19CVVNfQUJPUlQ7Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJdTggZGV2Y3RsOwogCi0JCQkJZHdBZGRyZXNzID0gbXVzYl9yZWFkbChtYmFzZSwKKwkJCQlhZGRyID0gbXVzYl9yZWFkbChtYmFzZSwKIAkJCQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoCi0JCQkJCQkJYkNoYW5uZWwsCisJCQkJCQkJYmNoYW5uZWwsCiAJCQkJCQkJTVVTQl9IU0RNQV9BRERSRVNTKSk7Ci0JCQkJcENoYW5uZWwtPmFjdHVhbF9sZW4gPSBkd0FkZHJlc3MKLQkJCQkJLSBwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzOworCQkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSBhZGRyCisJCQkJCS0gbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyOwogCiAJCQkJREJHKDIsICJjaCAlcCwgMHgleCAtPiAweCV4ICglZCAvICVkKSAlc1xuIiwKLQkJCQkJcENoYW5uZWwsIHBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MsCi0JCQkJCWR3QWRkcmVzcywgcENoYW5uZWwtPmFjdHVhbF9sZW4sCi0JCQkJCXBJbXBsQ2hhbm5lbC0+bGVuLAotCQkJCQkocENoYW5uZWwtPmFjdHVhbF9sZW4KLQkJCQkJCTwgcEltcGxDaGFubmVsLT5sZW4pID8KKwkJCQkJY2hhbm5lbCwgbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyLAorCQkJCQlhZGRyLCBjaGFubmVsLT5hY3R1YWxfbGVuLAorCQkJCQltdXNiX2NoYW5uZWwtPmxlbiwKKwkJCQkJKGNoYW5uZWwtPmFjdHVhbF9sZW4KKwkJCQkJCTwgbXVzYl9jaGFubmVsLT5sZW4pID8KIAkJCQkJIj0+IHJlY29uZmlnIDAiIDogIj0+IGNvbXBsZXRlIik7CiAKIAkJCQlkZXZjdGwgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0RFVkNUTCk7CiAKLQkJCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAKIAkJCQkvKiBjb21wbGV0ZWQgKi8KIAkJCQlpZiAoKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKQotCQkJCQkmJiAocEltcGxDaGFubmVsLT50cmFuc21pdCkKLQkJCQkJJiYgKChwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID09IDApCi0JCQkJCSAgICB8fCAocENoYW5uZWwtPmFjdHVhbF9sZW4gJgotCQkJCQkgICAgKHBJbXBsQ2hhbm5lbC0+d01heFBhY2tldFNpemUgLSAxKSkpCisJCQkJCSYmIChtdXNiX2NoYW5uZWwtPnRyYW5zbWl0KQorCQkJCQkmJiAoKGNoYW5uZWwtPmRlc2lyZWRfbW9kZSA9PSAwKQorCQkJCQkgICAgfHwgKGNoYW5uZWwtPmFjdHVhbF9sZW4gJgorCQkJCQkgICAgKG11c2JfY2hhbm5lbC0+bWF4X3BhY2tldF9zeiAtIDEpKSkKIAkJCQkJICkgewogCQkJCQkvKiBTZW5kIG91dCB0aGUgcGFja2V0ICovCiAJCQkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSk7CisJCQkJCQltdXNiX2NoYW5uZWwtPmVwbnVtKTsKIAkJCQkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfRVBfT0ZGU0VUKAotCQkJCQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCQlNVVNCX1RYQ1NSKSwKIAkJCQkJCU1VU0JfVFhDU1JfVFhQS1RSRFkpOwotCQkJCX0gZWxzZQorCQkJCX0gZWxzZSB7CiAJCQkJCW11c2JfZG1hX2NvbXBsZXRpb24oCiAJCQkJCQltdXNiLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJCQkJCW11c2JfY2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM4MCw5ICszODMsOSBAQAogCiB2b2lkIGRtYV9jb250cm9sbGVyX2Rlc3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CiAKLQljb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKIAlpZiAoIWNvbnRyb2xsZXIpCiAJCXJldHVybjsKIApAQCAtMzkzLDcgKzM5Niw3IEBACiB9CiAKIHN0cnVjdCBkbWFfY29udHJvbGxlciAqX19pbml0Ci1kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqcENvcmVCYXNlKQorZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7CiAJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKQEAgLTQwNSwyOSArNDA4LDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciksIEdGUF9LRVJORUwpOworCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWlmICghY29udHJvbGxlcikKIAkJcmV0dXJuIE5VTEw7CiAKLQljb250cm9sbGVyLT5iQ2hhbm5lbENvdW50ID0gTVVTQl9IU0RNQV9DSEFOTkVMUzsKLQljb250cm9sbGVyLT5wRG1hUHJpdmF0ZSA9IG11c2I7Ci0JY29udHJvbGxlci0+cENvcmVCYXNlID0gcENvcmVCYXNlOworCWNvbnRyb2xsZXItPmNoYW5uZWxfY291bnQgPSBNVVNCX0hTRE1BX0NIQU5ORUxTOworCWNvbnRyb2xsZXItPnByaXZhdGVfZGF0YSA9IG11c2I7CisJY29udHJvbGxlci0+YmFzZSA9IGJhc2U7CiAKLQljb250cm9sbGVyLT5Db250cm9sbGVyLnN0YXJ0ID0gZG1hX2NvbnRyb2xsZXJfc3RhcnQ7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5zdG9wID0gZG1hX2NvbnRyb2xsZXJfc3RvcDsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfYWxsb2MgPSBkbWFfY2hhbm5lbF9hbGxvY2F0ZTsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfcmVsZWFzZSA9IGRtYV9jaGFubmVsX3JlbGVhc2U7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5jaGFubmVsX3Byb2dyYW0gPSBkbWFfY2hhbm5lbF9wcm9ncmFtOwotCWNvbnRyb2xsZXItPkNvbnRyb2xsZXIuY2hhbm5lbF9hYm9ydCA9IGRtYV9jaGFubmVsX2Fib3J0OworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuc3RhcnQgPSBkbWFfY29udHJvbGxlcl9zdGFydDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLnN0b3AgPSBkbWFfY29udHJvbGxlcl9zdG9wOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9hbGxvYyA9IGRtYV9jaGFubmVsX2FsbG9jYXRlOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9yZWxlYXNlID0gZG1hX2NoYW5uZWxfcmVsZWFzZTsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfcHJvZ3JhbSA9IGRtYV9jaGFubmVsX3Byb2dyYW07CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX2Fib3J0ID0gZG1hX2NoYW5uZWxfYWJvcnQ7CiAKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBkbWFfY29udHJvbGxlcl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQltdXNiLT5jb250cm9sbGVyLT5idXNfaWQsICZjb250cm9sbGVyLT5Db250cm9sbGVyKSkgeworCQkJbXVzYi0+Y29udHJvbGxlci0+YnVzX2lkLCAmY29udHJvbGxlci0+Y29udHJvbGxlcikpIHsKIAkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSAlZCBmYWlsZWQhXG4iLCBpcnEpOwotCQlkbWFfY29udHJvbGxlcl9kZXN0cm95KCZjb250cm9sbGVyLT5Db250cm9sbGVyKTsKKwkJZG1hX2NvbnRyb2xsZXJfZGVzdHJveSgmY29udHJvbGxlci0+Y29udHJvbGxlcik7CisKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY29udHJvbGxlci0+aXJxID0gaXJxOwogCi0JcmV0dXJuICZjb250cm9sbGVyLT5Db250cm9sbGVyOworCXJldHVybiAmY29udHJvbGxlci0+Y29udHJvbGxlcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggOTlmYjdkYy4uNTM3Zjk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTIyMCw4ICsyMjAsOCBAQAogCiAJYnVmID0ga3phbGxvYyhjb3VudCArIEhDSV9IRUFERVJfTEVOR1RILCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQllcnIoIiVzLSBremFsbG9jKCVkKSBmYWlsZWQuIiwgX19mdW5jX18sCi0JCSAgICBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMtIGt6YWxsb2MoJWQpIGZhaWxlZC5cbiIsCisJCQlfX2Z1bmNfXywgY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAJaWYgKCF0dHkpIHsKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7Ci0JCWVycigiJXMgLSBObyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vIHR0eSBhdmFpbGFibGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXJjYWJsZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sCiAJCQlzaXplb2Yoc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDE5MTNiYzcuLmI3ZWFjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS8qIHNlZSBjb21tZW50cyBhdCB0b3Agb2YgZmlsZSAqLwogCXByaXYtPmJhZF9mbG93X2NvbnRyb2wgPQogCQkobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPD0gMHgwMjA2KSA/IDEgOiAwOwotCWluZm8oImJjZERldmljZTogJTA0eCwgYmZjOiAlZCIsCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkXG4iLAogCQkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKIAkJCQkJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjM2LDcgKzIzNiw3IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWRcbiIpOwogCX0KIAogZXhpdDoKQEAgLTM0Miw4ICszNDIsOCBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICIKKwkJCSJyZXN1bHQgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTM4MiwxMiArMzgyLDEyIEBACiAJCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCQljb250cm9sX3N0YXRlIHw9IChUSU9DTV9EVFJ8VElPQ01fUlRTKTsKIAkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAxKSA8IDApCi0JCQkJZXJyKCJTZXQgRFRSIGVycm9yIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IERUUiBlcnJvclxuIik7CiAJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwogCQkJaWYgKCEob2xkX2NmbGFnICYgQ1JUU0NUUykpCiAJCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QKIAkJCQkJCQkJLCAxKSA8IDApCi0JCQkJCWVycigiU2V0IFJUUyBlcnJvciIpOworCQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgUlRTIGVycm9yXG4iKTsKIAkJfQogCX0KIApAQCAtNDAzLDE4ICs0MDMsMTggQEAKIAkJLyogUmVwb3J0IHRoZSBhY3R1YWwgYmF1ZCByYXRlIGJhY2sgdG8gdGhlIGNhbGxlciAqLwogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGJhdWRyYXRlIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgYmF1ZHJhdGUgZXJyb3JcbiIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCQkJQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQotCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yXG4iKTsKIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDApIDwgMCkKLQkJCWVycigiRFRSIExPVyBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRFRSIExPVyBlcnJvclxuIik7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAwKSA8IDApCi0JCQllcnIoIlJUUyBMT1cgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJUUyBMT1cgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgcGFyaXR5ICovCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJZWxzZQogCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX1BBUklUWV9OT05FOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBwYXJpdHkgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBwYXJpdHkgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLwpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBkYXRhIGJpdHMgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBkYXRhIGJpdHMgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQkJCQk6IEJFTEtJTl9TQV9TVE9QX0JJVFMoMSk7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNULAogCQkJCQkJCXVyYl92YWx1ZSkgPCAwKQotCQkJZXJyKCJTZXQgc3RvcCBiaXRzIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgc3RvcCBiaXRzIGVycm9yXG4iKTsKIAl9CiAKIAkvKiBTZXQgZmxvdyBjb250cm9sICovCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX0lSVFMpOwogCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGZsb3cgY29udHJvbCBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGZsb3cgY29udHJvbCBlcnJvclxuIik7CiAJfQogCiAJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKIAlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNULCBicmVha19zdGF0ZSA/IDEgOiAwKSA8IDApCi0JCWVycigiU2V0IGJyZWFrX2N0bCAlZCIsIGJyZWFrX3N0YXRlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGJyZWFrX2N0bCAlZFxuIiwgYnJlYWtfc3RhdGUpOwogfQogCiAKQEAgLTU1NCwxMyArNTU0LDEzIEBACiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCBydHMpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IFJUUyBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBSVFMgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCBkdHIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IERUUiBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBEVFIgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiBleGl0OgpAQCAtNTc3LDcgKzU3Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYmVsa2luX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKaW5kZXggMTI3OTU1My4uODAwOGQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtNzUzLDcgKzc1Myw4IEBACiAJfQogCiAJLyogU3VjY2VzcyAqLwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggOTRlZjM2Yy4uODU4YmRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtMTQxLDcgKzE0MSw4IEBACiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCSJ1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkXG4iKTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogCX0KIApAQCAtMjc0LDggKzI3NSw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCiAJCQlwcml2LT53cmZpbGxlZCA9IDA7CiAJCQlwcml2LT53cnNlbnQgPSAwOwpAQCAtMzUxLDcgKzM1Myw5IEBACiAJCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAocmVzdWx0KQotCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCisJCQkJCSJyZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAkJfQogCX0KQEAgLTM2MCw3ICszNjQsNyBAQAogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZFxuIik7CiAJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogfQogCkBAIC00MTQsOCArNDE4LDggQEAKIAkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgIgorCQkJCSJ1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiB9CkBAIC00NjIsOCArNDY2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KIAkJCXByaXYtPndyZmlsbGVkID0gMDsKIAkJCXByaXYtPndyc2VudCA9IDA7CkBAIC00OTksOCArNTA0LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIiAiCisJICAgICAgIERSSVZFUl9BVVRIT1IgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggZjM1MTRhOS4uZWFlNDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC00MDQsOCArNDA0LDggQEAKIAkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKIAkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZW5kaW5nIHNlcmlhbCAiCisJCQkJImxpbmUgc2V0dGluZ3MgLSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCQl9IGVsc2UgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTQ0Myw3ICs0NDMsOCBAQAogCQkJCQkJJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCiAJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgIgorCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC00NzYsOCArNDc3LDggQEAKIAlwcml2LT5jb21tX2lzX29rID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQllcnIoImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSBpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnQiLAotCSAgICBwb3J0LT5udW1iZXIpOworCWRldl9lcnIoJnBvcnQtPmRldiwgImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSAiCisJCSJpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnRcbiIsIHBvcnQtPm51bWJlcik7CiB9CiAKIApAQCAtNjc5LDcgKzY4MCw4IEBACiAKIAkvKiBzZXR1cCB0aGUgcG9ydCBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJZXJyKCIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTA3LDggKzExMDksOCBAQAogCQlkYXRhX2JpdHMgPSAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4IiwKLQkJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4XG4iLAorCQkJX19mdW5jX18pOwogCQlkYXRhX2JpdHMgPSAzOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTY1OCw3ICsxNjYwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCA1NzU2YWM2Li42OWY4NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC02NjEsNyArNjYxLDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19mdW5jX18sIHJldCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiAKIH0KQEAgLTc0Myw3ICs3NDQsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC04MTIsNyArODE0LDggQEAKIAlzcGluX3VubG9jaygmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCIsIF9fZnVuY19fLCByZXQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MDcsNyArOTEwLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIH0KIApAQCAtMTIxNCw3ICsxMjE4LDggQEAKIAkvKiByZXR1cm4gbGVuZ3RoIG9mIG5ldyBkYXRhIHdyaXR0ZW4sIG9yIGVycm9yICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAJaWYgKHJldCA8IDApCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAlkYmcoImRpZ2lfd3JpdGU6IHJldHVybmluZyAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTEyMzUsMTQgKzEyNDAsMTYgQEAKIAogCS8qIHBvcnQgYW5kIHNlcmlhbCBzYW5pdHkgY2hlY2sgKi8KIAlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpZiAoc2VyaWFsID09IE5VTEwgfHwgKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyODQsNyArMTI5MSw4IEBACiAKIAlzcGluX3VubG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CiB9CiAKQEAgLTE1MTgsOCArMTUyNiw5IEBACiAJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCi0JCQkJCV9fZnVuY19fLCByZXQsIGkpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCisJCQkJX19mdW5jX18sIHJldCwgaSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE2MTgsMjIgKzE2MjcsMjYgQEAKIAlkYmcoImRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrOiBUT1AiKTsKIAogCS8qIHBvcnQgc2FuaXR5IGNoZWNrLCBkbyBub3QgcmVzdWJtaXQgaWYgcG9ydCBpcyBub3QgdmFsaWQgKi8KLQlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocG9ydC0+c2VyaWFsID09IE5VTEwgfHwKIAkJKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlICIKKwkJCSJpcyBOVUxMLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZG8gbm90IHJlc3VibWl0IHVyYiBpZiBpdCBoYXMgYW55IHN0YXR1cyBlcnJvciAqLwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlczogbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzOiBzdGF0dXM9JWQsIHBvcnQ9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IG5vbnplcm8gcmVhZCBidWxrIHN0YXR1czogc3RhdHVzPSVkLCBwb3J0PSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjUwLDggKzE2NjMsOSBAQAogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZXJyKCIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZCIsCi0JCSAgICBfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAl9CiAKIH0KQEAgLTE2ODcsMTAgKzE3MDEsMTEgQEAKIAogCS8qIHNob3J0L211bHRpcGxlIHBhY2tldCBjaGVjayAqLwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gbGVuICsgMikgewotCQllcnIoIiVzOiBJTkNPTVBMRVRFIE9SIE1VTFRJUExFIFBBQ0tFVCwgdXJiLT5zdGF0dXM9JWQsICIKLQkJICAgICJwb3J0PSVkLCBvcGNvZGU9JWQsIGxlbj0lZCwgYWN0dWFsX2xlbmd0aD0lZCwgIgotCQkgICAgInN0YXR1cz0lZCIsIF9fZnVuY19fLCBzdGF0dXMsIHByaXYtPmRwX3BvcnRfbnVtLAotCQkgICAgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwgcG9ydF9zdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsICIKKwkJCSJ1cmItPnN0YXR1cz0lZCwgcG9ydD0lZCwgb3Bjb2RlPSVkLCBsZW49JWQsICIKKwkJCSJhY3R1YWxfbGVuZ3RoPSVkLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMsCisJCQlwcml2LT5kcF9wb3J0X251bSwgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXBvcnRfc3RhdHVzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTg1NCw3ICsxODY5LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggMTA3MmU4NC4uOGE2OWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKLQkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsCiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00OTksMTUgKzQ5OSwxNSBAQAogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQl3cml0ZV91cmJfcG9vbFtpXSA9IHVyYjsKIAkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJlbXBlZzogTm8gbW9yZSB1cmJzPz8/XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLAotCQkJICAgIF9fZnVuY19fKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZW1wZWc6ICVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiICIKKwkJCSAgICAgICAiYnVmZmVycy4iLCBfX2Z1bmNfXyk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTUxOSw3ICs1MTksOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwppbmRleCA3MTFlODRmLi4zY2ZjNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpAQCAtMjgsNyArMjgsOCBAQAogCiAJLyogZGJnKCJlenVzYl93cml0ZW1lbW9yeSAleCwgJWQiLCBhZGRyZXNzLCBsZW5ndGgpOyAqLwogCWlmICghc2VyaWFsLT5kZXYpIHsKLQkJZXJyKCIlcyAtIG5vIHBoeXNpY2FsIGRldmljZSBwcmVzZW50LCBmYWlsaW5nLiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJlenVzYjogJXMgLSBubyBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudCwgIgorCQkgICAgICAgImZhaWxpbmcuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBjMmFjMTI5Li41MWQ3YmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNTc4LDYgKzU3OCw3IEBACiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9TQU1CQV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PQ0VBTklDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFRJX1ZJRCwgVFRJX1FMMzU1UF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JNX0NBTlZJRVdfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCkBAIC0xMTUzLDcgKzExNTQsNyBAQAogCQkvKiBBc3N1bWUgaXRzIGFuIEZUMjMyUiAgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJSTDsKIAl9Ci0JaW5mbygiRGV0ZWN0ZWQgJXMiLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiRGV0ZWN0ZWQgJXNcbiIsIGZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOwogfQogCiAKQEAgLTEzMjYsNyArMTMyNyw3IEBACiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikgewotCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsIF9fZnVuY19fLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLAogCQkJCQlzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNDA5LDcgKzE0MTAsOCBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKSB7Ci0JCWluZm8oIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkgIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNDI3LDcgKzE0MjksOCBAQAogCiAJaWYgKGVwLT5lbmFibGVkICYmIGVwX2Rlc2MtPndNYXhQYWNrZXRTaXplID09IDApIHsKIAkJZXBfZGVzYy0+d01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNigweDQwKTsKLQkJaW5mbygiRml4aW5nIGludmFsaWQgd01heFBhY2tldFNpemUgb24gcmVhZCBwaXBlIik7CisJCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJICJGaXhpbmcgaW52YWxpZCB3TWF4UGFja2V0U2l6ZSBvbiByZWFkIHBpcGVcbiIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTUyMSw4ICsxNTI0LDkgQEAKIAkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTU1Niw3ICsxNTYwLDcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgYnVmLCAwLAogCQkJCSAgICBXRFJfVElNRU9VVCkgPCAwKSB7Ci0JCQllcnIoImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJlcnJvciBmcm9tIGZsb3djb250cm9sIHVyYlxuIik7CiAJCX0KIAogCQkvKiBkcm9wIFJUUyBhbmQgRFRSICovCkBAIC0xNjIxLDE0ICsxNjI1LDE1IEBACiAKIAlidWZmZXIgPSBrbWFsbG9jKHRyYW5zZmVyX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uXG4iLCBfX2Z1bmNfXyk7CiAJCWNvdW50ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9ub19idWZmZXI7CiAJfQogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQllcnIoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnNcbiIsIF9fZnVuY19fKTsKIAkJY291bnQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX25vX3VyYjsKIAl9CkBAIC0xNjcyLDggKzE2NzcsOSBAQAogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQljb3VudCA9IHN0YXR1czsKIAkJZ290byBlcnJvcjsKIAl9IGVsc2UgewpAQCAtMTc4MCw3ICsxNzg2LDggQEAKIAlidWZmZXJlZCA9IChpbnQpcHJpdi0+dHhfb3V0c3RhbmRpbmdfYnl0ZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJlZCA8IDApIHsKLQkJZXJyKCIlcyBvdXRzdGFuZGluZyB0eCBieXRlcyBpcyBuZWdhdGl2ZSEiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG91dHN0YW5kaW5nIHR4IGJ5dGVzIGlzIG5lZ2F0aXZlIVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJYnVmZmVyZWQgPSAwOwogCX0KIAlyZXR1cm4gYnVmZmVyZWQ7CkBAIC0xNzk2LDExICsxODAzLDEyIEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAwKSB7Ci0JCWVycigiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCBhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkIiwKLQkJCQlfX2Z1bmNfXywKLQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKLQkJZXJyKCIlcyB0cmFuc2Zlcl9mbGFncyAleCAiLCBfX2Z1bmNfXywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgIgorCQkJImFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWRcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfZmxhZ3MgJXhcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJfQogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTE4MjEsNyArMTgyOSw3IEBACiAJfQogCiAJaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KQEAgLTE5MjQsNyArMTkzMiw4IEBACiAKIAkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKIAkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWVycigiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWQiLCBfX2Z1bmNfXywgbGVuZ3RoKzIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsCisJCQkJX19mdW5jX18sIGxlbmd0aCsyKTsKIAkJCWxlbmd0aCA9IDA7CiAJCX0KIApAQCAtMjAzOSw4ICsyMDQ4LDkgQEAKIAogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0KIG91dDoKIAl0dHlfa3JlZl9wdXQodHR5KTsKQEAgLTIwNjksOCArMjA3OSw4IEBACiAJCQlGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCiAJCQl1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCiAJCQlidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLAotCQkJCQkJCV9fZnVuY19fLCBicmVha19zdGF0ZSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIEZBSUxFRCB0byBlbmFibGUvZGlzYWJsZSBicmVhayBzdGF0ZSAiCisJCQkiKHN0YXRlIHdhcyAlZClcbiIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAJfQogCiAJZGJnKCIlcyBicmVhayBzdGF0ZSBpcyAlZCAtIHVyYiBpcyAlZCIsIF9fZnVuY19fLApAQCAtMjE0Miw3ICsyMTUyLDcgQEAKIAkJY2FzZSBDUzc6IHVyYl92YWx1ZSB8PSA3OyBkYmcoIlNldHRpbmcgQ1M3Iik7IGJyZWFrOwogCQljYXNlIENTODogdXJiX3ZhbHVlIHw9IDg7IGRiZygiU2V0dGluZyBDUzgiKTsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOFxuIik7CiAJCX0KIAl9CiAKQEAgLTIxNTUsNyArMjE2NSw4IEBACiAJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAogCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKIAkJCSAgICBidWYsIDAsIFdEUl9TSE9SVF9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gc2V0IGRhdGFiaXRzL3N0b3BiaXRzL3Bhcml0eSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgRkFJTEVEIHRvIHNldCAiCisJCQkiZGF0YWJpdHMvc3RvcGJpdHMvcGFyaXR5XG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJLyogTm93IGRvIHRoZSBiYXVkcmF0ZSAqLwpAQCAtMjE2NiwxNCArMjE3NywxNyBAQAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCWVycigiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgYmF1ZHJhdGUgZGV0ZXJtaW5lZCBiZWZvcmUgKi8KIAkJaWYgKGNoYW5nZV9zcGVlZCh0dHksIHBvcnQpKQotCQkJZXJyKCIlcyB1cmIgZmFpbGVkIHRvIHNldCBiYXVkcmF0ZSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHVyYiBmYWlsZWQgdG8gc2V0IGJhdWRyYXRlXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJLyogRW5zdXJlIFJUUyBhbmQgRFRSIGFyZSByYWlzZWQgd2hlbiBiYXVkcmF0ZSBjaGFuZ2VkIGZyb20gMCAqLwogCQlpZiAoIW9sZF90ZXJtaW9zIHx8IChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSA9PSBCMCkKIAkJCXNldF9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwpAQCAtMjE4OSw3ICsyMjAzLDggQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAgLCAoRlRESV9TSU9fUlRTX0NUU19IUyB8IHByaXYtPmludGVyZmFjZSksCiAJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbFxuIik7CiAJCX0KIAogCX0gZWxzZSB7CkBAIC0yMjIwLDcgKzIyMzUsOCBAQAogCQkJCQkgICAgdXJiX3ZhbHVlICwgKEZURElfU0lPX1hPTl9YT0ZGX0hTCiAJCQkJCQkJIHwgcHJpdi0+aW50ZXJmYWNlKSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8geG9uL3hvZmYgZmxvdyBjb250cm9sIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXJiIGZhaWxlZCB0byBzZXQgdG8gIgorCQkJCQkieG9uL3hvZmYgZmxvdyBjb250cm9sXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGVsc2UgY2xhdXNlIHRvIG9ubHkgcnVuIGlmIGNmbGFnICEgQ1JUU0NUUyBhbmQgaWZsYWcKQEAgLTIyMzMsNyArMjI0OSw4IEBACiAJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBjbGVhciBmbG93IGNvbnRyb2wiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJ1cmIgZmFpbGVkIHRvIGNsZWFyIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CiAJCX0KIApAQCAtMjQyNSw3ICsyNDQyLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX3Npb19kZXZpY2UpOwpAQCAtMjQ1OCw1ICsyNDc2LDUgQEAKIE1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgdmVuZG9yIElEIChkZWZhdWx0PSIKIAkJX19NT0RVTEVfU1RSSU5HKEZURElfVklEKSIpIik7CiBtb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDhhNWI2ZGYuLjA3YTM5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC02MjgsNiArNjI4LDExIEBACiAjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwogCiAvKgorICogT2NlYW5pYyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfT0NFQU5JQ19QSUQJMHhGNDYwICAvKiBPY2VhbmljIGRpdmUgaW5zdHJ1bWVudCAqLworCisvKgogICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCiAgKi8KICNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDJhZDA1NjkuLjhlNmE2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMTU4NSw3ICsxNTg1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdhcm1pbl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCmluZGV4IGFiOTA1ODYuLjQzMTMyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtNjMsNyArNjMsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaHA0OWdwX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhwNDlncF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCA2MTFmOTdmLi5lODVjOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMzEwOSwxMyArMzEwOSwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIgPQogCQkJCQkJdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAkJCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9CiAJCQkJCWttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQpAQCAtMzE0NiwxMyArMzE0NiwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiA9CiAJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPnJlYWRfdXJiKSB7Ci0JCQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CiAJCQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0KIAkJCQkJa21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CkBAIC0zMTgxLDcgKzMxODEsOCBAQAogCQl9CiAKIAkJaWYgKCFpbnRlcnJ1cHRfaW5fZm91bmQgfHwgIWJ1bGtfaW5fZm91bmQgfHwgIWJ1bGtfb3V0X2ZvdW5kKSB7Ci0JCQllcnIoIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhIik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgIgorCQkJCSJ3ZXJlIG5vdCBmb3VuZCFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzE5MCw4ICszMTkxLDkgQEAKIAkJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3BvbnNlKQotCQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLAotCQkJCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CiAJfQogCXJldHVybiByZXNwb25zZTsKIH0KQEAgLTMyNTMsNyArMzI1NSw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCWF0b21pY19zZXQoJkNtZFVyYnMsIDApOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogCiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwppbmRleCA1NDFkZDhlLi5jM2NkZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMjk3OCw3ICsyOTc4LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAyYWZmYTljLi4xMzJiZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTYwOCw3ICs2MDgsNyBAQAogCWJ5dGVzX291dCA9IDA7CiAJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKQEAgLTY5Myw4ICs2OTMsNyBAQAogCX0KIAogCWlmICghcmV0cmllcyAmJiByZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZFxuIiwJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTcwNyw4ICs3MDYsOSBAQAogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03MTYsNyArNzE2LDcgQEAKIAogZW5vbWVtOgogCXJlc3VsdCA9IC1FTk9NRU07Ci0JZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiBlcnJvcjoKIAlpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CiAJa2ZyZWUocHJpdik7CkBAIC03ODEsOCArNzgxLDkgQEAKIAkgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybjsKIH0KIApAQCAtODQ3LDcgKzg0OCw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05MDksOCArOTExLDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YWN0aXZlID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05NTcsNyArOTYwLDcgQEAKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewotCQllcnIoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz8iLAorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk3Niw3ICs5NzksNiBAQAogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKIAlpZiAodmVuZG9yKSB7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKQEAgLTk4NSw2ICs5ODcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAorCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDQ4MGNhYzIuLjNhYzU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTQ4NSw3ICs0ODUsOCBAQAogCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDQ1ZDQwNDMuLmI2NzlhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTYwMiw3ICs2MDIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggNTM3MTBhYTcuLmUzMjA5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCkBAIC0xMTg1LDcgKzExODUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXV1X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJml1dV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggMTU0NDdhZi4uOTg3OGMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC0yMTcsNyArMjE3LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggOTllOWExNC4uYmYxYWUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTc0MiwxMSArNzQyLDEzIEBACiAJCWZ3X25hbWUgPSAia2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdyI7CiAjZW5kaWYKIAllbHNlIHsKLQkJZXJyKCIlczogdW5rbm93biB2ZW5kb3IsIGFib3J0aW5nLiIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwgZndfbmFtZSk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQlmd19uYW1lKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCXJlY29yZCA9IChjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKilmdy0+ZGF0YTsKQEAgLTc1NiwxMCArNzU4LDEwIEBACiAJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gUERBICIKLQkJCSAgICAiZmlybXdhcmUgKCVkICUwNFggJXAgJWQpIiwKLQkJCSAgICByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkICIKKwkJCQkiZm9yIEtleXNwYW4gUERBIGZpcm13YXJlICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlyZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKKwkJCQlyZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQlyZWNvcmQgPSBpaGV4X25leHRfYmlucmVjKHJlY29yZCk7CkBAIC04NzQsNyArODc2LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKICNpZmRlZiBYSVJDT00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGZmM2EwN2YuLmRjMzZhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtMTgyLDEyICsxODIsMTIgQEAKIAkJCXNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyksCiAJCQlLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiQ2hhbmdlIHBvcnQgc2V0dGluZ3MgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKLQlpbmZvKCIlcyAtICVkIGJ5dGUgYmxvY2ssIGJhdWRyYXRlICV4LCBkYXRhYml0cyAlZCwgdTEgJWQsIHUyICVkIiwKLQkgICAgX19mdW5jX18sCi0JICAgIHNldHRpbmdzLT5wa3RsZW4sCi0JICAgIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAotCSAgICBzZXR0aW5ncy0+dW5rbm93bjEsIHNldHRpbmdzLT51bmtub3duMik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCSAiJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWRcbiIsCisJCSBzZXR0aW5ncy0+cGt0bGVuLCBzZXR0aW5ncy0+YmF1ZHJhdGUsIHNldHRpbmdzLT5kYXRhYml0cywKKwkJIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKIAlyZXR1cm4gcmM7CiB9IC8qIGtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzICovCiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwgLTF9OwogCV9fdTE2IHN0YXR1czsKIAotCWluZm8oIiVzIC0gc2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAic2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0XG4iKTsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKIAkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCkBAIC0yMjYsMTIgKzIyNiwxMyBAQAogCQkJICAgICAxMDAwMAogCQkJICAgICApOwogCWlmIChyYyA8IDApCi0JCWVycigiUmVhZGluZyBsaW5lIHN0YXR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCisJCQlyYyk7CiAJZWxzZSB7CiAJCXN0YXR1cyA9IGdldF91bmFsaWduZWRfbGUxNihzdGF0dXNfYnVmKTsKIAotCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19mdW5jX18sCi0JCSAgICAgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CisJCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAicmVhZCBzdGF0dXMgJXggJXgiLAorCQkJIHN0YXR1c19idWZbMF0sIHN0YXR1c19idWZbMV0pOwogCiAJCSpsaW5lX3N0YXRlX3AgPSBrbHNpXzEwNV9zdGF0dXMybGluZXN0YXRlKHN0YXR1cyk7CiAJfQpAQCAtMjgwLDE1ICsyODEsMTYgQEAKIAogCQkJcHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CiAJCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0KIAkJCQlrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlnb3RvIGVycl9jbGVhbnVwOwogCQkJfQogCQl9CkBAIC00MDksNyArNDExLDggQEAKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyYykgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgIgorCQkJImVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlyZXR2YWwgPSByYzsKIAkJZ290byBleGl0OwogCX0KQEAgLTQyNCw3ICs0MjcsNyBAQAogCQkJICAgICAwLAogCQkJICAgICBLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJFbmFibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQlyZXR2YWwgPSByYzsKIAl9IGVsc2UKIAkJZGJnKCIlcyAtIGVuYWJsZWQgcmVhZGluZyIsIF9fZnVuY19fKTsKQEAgLTQ2NCw3ICs0NjcsOCBAQAogCQkJCSAgICAgTlVMTCwgMCwKIAkJCQkgICAgIEtMU0lfVElNRU9VVCk7CiAJCWlmIChyYyA8IDApCi0JCQllcnIoIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJjKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwogCkBAIC00NzUsOCArNDc5LDkgQEAKIAkvKiBGSVhNRSAqLwogCS8qIHdnZyAtIGRvIEkgbmVlZCB0aGlzPyBJIHRoaW5rIHNvLiAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsCi0JCQkJCXByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LAorCQkgInBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dFxuIiwKKwkJIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOwogfSAvKiBrbHNpXzEwNV9jbG9zZSAqLwogCiAKQEAgLTUyMiw3ICs1MjcsOSBAQAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQogCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJfQpAQCAtNTQ5LDggKzU1Niw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJYnVmICs9IHNpemU7CkBAIC02OTQsOCArNzAyLDkgQEAKIAkJICAgICAgcG9ydCk7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJjKQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJjKTsKIH0gLyoga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrICovCiAKIApAQCAtNzk5LDcgKzgwOCw4IEBACiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOFxuIik7CiAJCQlwcml2LT5jZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKIAkJCWJyZWFrOwogCQl9CkBAIC04ODYsNyArODk2LDggQEAKIAogCXJjID0ga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUocG9ydCwgJmxpbmVfc3RhdGUpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiUmVhZGluZyBsaW5lIGNvbnRyb2wgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQkvKiBiZXR0ZXIgcmV0dXJuIHZhbHVlPyBFQUdBSU4/ICovCiAJCXJldHVybiByYzsKIAl9CkBAIC05NDQsOCArOTU1LDkgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogfQogCiAKQEAgLTk2MCw3ICs5NzIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtsNWt1c2IxMDVkX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggY2ZjZjM3Yy4uNjI4NmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0FVVEhPUik7Ci0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggOWIyY2VmOC4uMDc3MTBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTI0Niw3ICsyNDYsOCBAQAogCQkJCTAsIDAsICZkaXZpc29yLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCS8qRklYTUU6IFdoYXQgdmFsdWUgc3BlZWQgcmVzdWx0cyAqLwotCQllcnIoIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHZhbHVlLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBCQVVEIFJBVEUgJWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCXZhbHVlLCByYyk7CiAJZWxzZQogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIHNwZWVkLCBzcGVlZCk7CiAJZGJnKCJzZXRfYmF1ZF9yYXRlOiB2YWx1ZTogMHgleCwgZGl2aXNvcjogMHgleCIsIHZhbHVlLCBkaXZpc29yKTsKQEAgLTI3NCw4ICsyNzUsOSBAQAogCQkJCTAsIDAsICZ6ZXJvX2J5dGUsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFLAogCQkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsCi0JCSAgICBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkICIKKwkJCSJmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCwKKwkJCXJjKTsKIAogCWlmIChwb3J0ICYmIENfQ1JUU0NUUyh0dHkpKQogCSAgIGN0c19lbmFibGVfYnl0ZSA9IDE7CkBAIC0yODgsOCArMjkwLDggQEAKIAkJCTAsIDAsICZjdHNfZW5hYmxlX2J5dGUsIE1DVF9VMjMyX1NFVF9DVFNfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsCi0JCQkJCU1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkICIKKwkJCSJmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBNQ1RfVTIzMl9TRVRfQ1RTX1JFUVVFU1QsIHJjKTsKIAogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2JhdWRfcmF0ZSAqLwpAQCAtMzAzLDcgKzMwNSw4IEBACiAJCQkwLCAwLCAmbGNyLCBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZXQgTElORSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKSIsIGxjciwgcmMpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBsY3IsIHJjKTsKIAlkYmcoInNldF9saW5lX2N0cmw6IDB4JXgiLCBsY3IpOwogCXJldHVybiByYzsKIH0gLyogbWN0X3UyMzJfc2V0X2xpbmVfY3RybCAqLwpAQCAtMzI1LDcgKzMyOCw4IEBACiAJCQkwLCAwLCAmbWNyLCBNQ1RfVTIzMl9TRVRfTU9ERU1fQ1RSTF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2V0IE1PREVNIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbWNyLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiU2V0IE1PREVNIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCBtY3IsIHJjKTsKIAlkYmcoInNldF9tb2RlbV9jdHJsOiBzdGF0ZT0weCV4ID09PiBtY3I9MHgleCIsIGNvbnRyb2xfc3RhdGUsIG1jcik7CiAKIAlyZXR1cm4gcmM7CkBAIC0zNDEsNyArMzQ1LDggQEAKIAkJCTAsIDAsIG1zciwgTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKSB7Ci0JCWVycigiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIkdldCBNT0RFTSBTVEFUdXMgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQkqbXNyID0gMDsKIAl9CiAJZGJnKCJnZXRfbW9kZW1fc3RhdDogMHgleCIsICptc3IpOwpAQCAtNDcwLDggKzQ3NSw5IEBACiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCi0JCSAgICBwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWRcbiIsCisJCQlwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTQ3OSw4ICs0ODUsOSBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKIAkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKLQkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCBwaXBlIDB4JXggZXJyICVkIiwKLQkJICAgIHBvcnQtPmludGVycnVwdF9pbl91cmItPnBpcGUsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJ1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAorCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJcmV0dXJuIDA7CkBAIC02MTIsOCArNjE5LDkgQEAKIGV4aXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CiB9IC8qIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICovCiAKIHN0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC02ODAsNyArNjg4LDggQEAKIAljYXNlIENTODoKIAkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzg7IGJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzg7CiAJCWJyZWFrOwogCX0KQEAgLTgxNyw3ICs4MjYsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWN0X3UyMzJfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbWN0X3UyMzJfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCmluZGV4IDdiNTM4Y2EuLmU3NzJjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwpAQCAtMzU1LDE0ICszNTUsMTYgQEAKIAkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKIAogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJdXNiX2ZyZWVfdXJiKG1vczc3MjBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0pOwogCQkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IE5VTEw7CiAJCQljb250aW51ZTsKQEAgLTY5NCw3ICs2OTYsOCBAQAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC03MTQsOCArNzE3LDggQEAKIAkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC05NzUsNyArOTc4LDcgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAlzdGF0dXMgPSBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGJhdWRyYXRlLCAmZGl2aXNvcik7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgYmF1ZCByYXRlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0xNDc4LDcgKzE0ODEsNyBAQAogCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCiAJbW9zNzcyMF9zZXJpYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zY2hpcF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAobW9zNzcyMF9zZXJpYWwgPT0gTlVMTCkgewotCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDkxLDcgKzE0OTQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCW1vczc3MjBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1vczc3MjBfcG9ydCA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CiAJCQlrZnJlZShtb3M3NzIwX3NlcmlhbCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1ODUsNyArMTU4OCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiAqLwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA2MDU0M2Q3Li5mZGE0YTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTg0NCw3ICs4NDQsNyBAQAogCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC04NTMsNyArODUzLDkgQEAKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0xMDIxLDggKzEwMjMsOCBAQAogCQkJICAgIHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmVzcG9uc2UpIHsKLQkJCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKLQkJCQkgICAgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgIgorCQkJCQkiaW50ZXJydXB0IHVyYlxuIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKIAkJCX0KIAogCQl9CkBAIC0xMDU1LDggKzEwNTcsOCBAQAogCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CiAJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzcG9uc2UpIHsKLQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3BvbnNlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLwpAQCAtMTQ5Miw3ICsxNDk0LDggQEAKIAkJICAgIGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewotCQkJZXJyKCIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMTUxNyw4ICsxNTIwLDggQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJbW9zNzg0MF9wb3J0LT5idXN5W2ldID0gMDsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xODU2LDggKzE4NTksNyBAQAogCQkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAogCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKLQkJCWRiZygiJXNcbiIsICJiYWQgYmF1ZCByYXRlIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCkBAIC0yNDQ2LDcgKzI0NDgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCW1vczc4NDBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJaS0tOyAvKiBkb24ndCBmb2xsb3cgTlVMTCBwb2ludGVyIGNsZWFuaW5nIHVwICovCiAJCQlnb3RvIGVycm9yOwpAQCAtMjc0Myw3ICsyNzQ1LDggQEAKIAkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAKIAlkYmcoIiVzXG4iLCAiRW50cmluZy4uLiIpOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKaW5kZXggYzRkNzBiMC4uZGY2NTM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0xNTQsOCArMTU0LDggQEAKIAogCW9kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghb2QpIHsKLQkJZXJyKCIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC4iLAotCQkJCV9fZnVuY19fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsCisJCQlfX2Z1bmNfXywgc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2RhdGEpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBvZCk7CkBAIC0xODMsOCArMTgzLDkgQEAKIAkJCW9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI0NCw4ICsyNDUsOSBAQAogCQkJb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQpAQCAtMjk4LDggKzMwMCw5IEBACiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIod3BvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQl3cG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UKIAkJcmVzdWx0ID0gY291bnQ7CiAKQEAgLTM2NCw3ICszNjcsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb21uaW5ldF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ6eXhlbF9vbW5pbmV0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNmIxNzI3ZS4uM2Q4N2VhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNzksMjcgKzc5LDE2IEBACiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX1ZJUEVSCQkJMHg2NjAwCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX1ZJUEVSX0JVUwkJMHg2NjAxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUX01BWF9SRUFEWQkJMHg2NzAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUX01BWAkJCTB4NjcxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0xJR0hUCQkweDY3MjEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9HVAkJMHg2NzQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fRVgJCTB4Njc2MQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfTElHSFQJMHg2NzMxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19HVAkJMHg2NzUxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19FWAkJMHg2NzcxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0tPSV9NT0RFTQkJMHg2ODAwCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0tPSV9ORVRXT1JLCQkweDY4MTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfU0NPUlBJT05fTU9ERU0JCTB4NjkwMQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9ORVRXT1JLCQkweDY5MTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTQkJMHg3MDAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SSwkJMHg3MDExCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fTElURQkJMHg3MDIxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fR1QJCTB4NzA0MQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0VYCQkweDcwNjEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0xJVEUJMHg3MDMxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19HVAkJMHg3MDUxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19FWAkJMHg3MDcxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNCQkweDcxMDAKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTkVUV09SSwkJMHg3MTExCiAKICNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkJCTB4MTJEMQogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FNjAwCQkJMHgxMDAxCkBAIC0yMjAsNiArMjA5LDE2IEBACiAjZGVmaW5lIFpURV9QUk9EVUNUX01GNjI4CQkJMHgwMDE1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0NETUFfVEVDSAkJCTB4ZmZmZQogCisvKiBFcmljc3NvbiBwcm9kdWN0cyAqLworI2RlZmluZSBFUklDU1NPTl9WRU5ET1JfSUQJCQkweDBiZGIKKyNkZWZpbmUgRVJJQ1NTT05fUFJPRFVDVF9GMzUwN0cJCQkweDE5MDAKKworLyogUGFudGVjaCBwcm9kdWN0cyAqLworI2RlZmluZSBQQU5URUNIX1ZFTkRPUl9JRAkJCTB4MTA2YworI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfUEM1NzQwCQkJMHgzNzAxCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NTAJCQkweDM3MDIgIC8qIFBYLTUwMCAqLworI2RlZmluZSBQQU5URUNIX1BST0RVQ1RfVU0xNTAJCQkweDM3MTEKKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtMjM1LDI3ICsyMzQsMTYgQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfVklQRVIpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1ZJUEVSX0JVUykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfR1RfTUFYX1JFQURZKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVF9NQVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fTElHSFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fR1QpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fRVgpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19MSUdIVCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0dUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfRVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0tPSV9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfS09JX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fTElURSkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9FWCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0xJVEUpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SS19HVCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0VYKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9NT0RFTSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0U2MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMEJJUywgMHhmZiwgMHhmZiwgMHhmZikgfSwKQEAgLTMxOCw3ICszMDYsOCBAQAogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTM2KSB9LAkvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MjAgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg2MEQgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzNykgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzgpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTUyMCBWb2RhIEkgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNEUEEpIE1pbmljYXJkICovCi0JeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVX0UxMDBBKSB9LAorCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTQ3KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MzAgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNQQSkgTWluaS1DYXJkICovCisJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVX0UxMDBBKSB9LAkvKiBBRFUtRTEwMCwgQURVLTMxMCAqLwogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV81MDBBKSB9LAogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV82MjBVVykgfSwKIAl7IFVTQl9ERVZJQ0UoQVhFU1NURUxfVkVORE9SX0lELCBBWEVTU1RFTF9QUk9EVUNUX01WMTEwSCkgfSwKQEAgLTM0OSw2ICszMzgsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoVEVMSVRfVkVORE9SX0lELCBURUxJVF9QUk9EVUNUX1VDODY0RSkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfTUY2MjgpIH0sCiAJeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCkgfSwKKwl7IFVTQl9ERVZJQ0UoRVJJQ1NTT05fVkVORE9SX0lELCBFUklDU1NPTl9QUk9EVUNUX0YzNTA3RykgfSwKKwl7IFVTQl9ERVZJQ0UoUEFOVEVDSF9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NDApIH0sCisJeyBVU0JfREVWSUNFKFBBTlRFQ0hfVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfUEM1NzUwKSB9LAorCXsgVVNCX0RFVklDRShQQU5URUNIX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1VNMTUwKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKQEAgLTQyNyw3ICs0MjAsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2RyaXZlcl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIjogIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggOTA4NDM3OC4uNDkxYzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCmluZGV4IDcyOTAzYWMuLjRiNDYzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC0yNTAsMTcgKzI1MCwxOCBAQAogCQlpZiAoIWZjcykgewogCQkJaW50IGFjdHVhbF9sZW5ndGggPSBkYXRhW2xlbmd0aCAtIDJdID4+IDI7CiAJCQlpZiAoYWN0dWFsX2xlbmd0aCA8PSAobGVuZ3RoIC0gMikpIHsKLQkJCQlpbmZvKCIlcyAtIGFjdHVhbDogJWQiLCBfX2Z1bmNfXywKLQkJCQkJCQlhY3R1YWxfbGVuZ3RoKTsKKwkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgIiVzIC0gYWN0dWFsOiAlZFxuIiwKKwkJCQkJIF9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoKTsKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwKIAkJCQkJCQlkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKIAkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJfSBlbHNlIHsKLQkJCQllcnIoIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWQiLAorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWRcbiIsCiAJCQkJCV9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoLCBsZW5ndGgpOwogCQkJfQogCQl9IGVsc2UgewotCQkJZXJyKCIlcyAtIGJhZCBDUkMgJXgiLCBfX2Z1bmNfXywgZmNzKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIENSQyAleFxuIiwgX19mdW5jX18sIGZjcyk7CiAJCX0KIAl9IGVsc2UgewogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKQEAgLTI3Nyw4ICsyNzgsOSBAQAogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkvKiBGSVhNRTogTmVlZCBhIG1lY2hhbmlzbSB0byByZXRyeSBsYXRlciBpZiB0aGlzIGhhcHBlbnMgKi8KIH0KIApAQCAtMzY5LDggKzM3MSw5IEBACiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KSB7CiAJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCXJldHVybiAwOwogCX0KIAlkYmcoIiVzIHVyYjogJXAgc3VibWl0dGVkIiwgX19mdW5jX18sIHBvcnQtPndyaXRlX3VyYik7CkBAIC00MjgsMTQgKzQzMSwxMyBAQAogewogCWludCBpLCByZXR2YWw7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKLQlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4IHNhZmU6ICVkIHBhZGRlZDogJWRcbiIsCi0JCQkJCXZlbmRvciwgcHJvZHVjdCwgc2FmZSwgcGFkZGVkKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogaWYgd2UgaGF2ZSB2ZW5kb3IgLyBwcm9kdWN0IHBhcmFtZXRlcnMgcGF0Y2ggdGhlbSBpbnRvIGlkIGxpc3QgKi8KIAlpZiAodmVuZG9yIHx8IHByb2R1Y3QpIHsKLQkJaW5mbygidmVuZG9yOiAleCBwcm9kdWN0OiAleFxuIiwgdmVuZG9yLCBwcm9kdWN0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiB2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4XG4iLAorCQkgICAgICAgdmVuZG9yLCBwcm9kdWN0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZF90YWJsZSk7IGkrKykgewogCQkJaWYgKCFpZF90YWJsZVtpXS5pZFZlbmRvciAmJiAhaWRfdGFibGVbaV0uaWRQcm9kdWN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggOGI5ZWFmMy4uMGYyYjY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCV9fdTE2IGludGVyZmFjZSA9IDA7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogc3RhdGljIHZvaWQgc2llcnJhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAl0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwogCXNpZXJyYV9zZW5kX3NldHVwKHR0eSwgcG9ydCk7CiB9CkBAIC0yOTUsNiArMjk1LDcgQEAKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAl2YWx1ZSA9ICgocG9ydGRhdGEtPnJ0c19zdGF0ZSkgPyBUSU9DTV9SVFMgOiAwKSB8CkBAIC0zMzQsMTQgKzMzNSwxNCBAQAogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLwogCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAogCWlmIChzdGF0dXMpCi0JCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzICIKKwkJICAgICJyZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCS0tcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnM7CkBAIC0zNjMsMTIgKzM2NCwxMiBAQAogCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlkYmcoIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogd3JpdGUgKCVkIGNoYXJzKSIsIF9fZnVuY19fLCBjb3VudCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMgPiBOX09VVF9VUkIpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKLQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMrKzsKQEAgLTQzNyw4ICs0MzgsOCBAQAogCXBvcnQgPSAgdXJiLT5jb250ZXh0OwogCiAJaWYgKHN0YXR1cykgewotCQlkYmcoIiVzOiBub256ZXJvIHN0YXR1czogJWQgb24gZW5kcG9pbnQgJTAyeC4iLAotCQkgICAgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogbm9uemVybyBzdGF0dXM6ICVkIG9uIgorCQkgICAgIiBlbmRwb2ludCAlMDJ4LiIsIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwpAQCAtNDQ3LDcgKzQ0OCw4IEBACiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0gZWxzZQotCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZW1wdHkgcmVhZCB1cmIiCisJCQkJIiByZWNlaXZlZCIsIF9fZnVuY19fKTsKIAogCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJCWlmIChwb3J0LT5wb3J0LmNvdW50ICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CkBAIC00NjgsMTUgKzQ3MCwxNyBAQAogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKLQlkYmcoIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLCB1cmIsIHBvcnQsIHBvcnRkYXRhKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogdXJiICVwIHBvcnQgJXAgaGFzIGRhdGEgJXAiLCBfX2Z1bmNfXywKKwkJdXJiLCBwb3J0LCBwb3J0ZGF0YSk7CiAKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxX3BrdCA9CiAJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAogCQlpZiAoIXJlcV9wa3QpIHsKLQkJCWRiZygiJXM6IE5VTEwgcmVxX3BrdFxuIiwgX19mdW5jX18pOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IE5VTEwgcmVxX3BrdFxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKChyZXFfcGt0LT5iUmVxdWVzdFR5cGUgPT0gMHhBMSkgJiYKQEAgLTQ4Nyw3ICs0OTEsOCBAQAogCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCkpOwogCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAotCQkJZGJnKCIlczogc2lnbmFsIHgleCIsIF9fZnVuY19fLCBzaWduYWxzKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBzaWduYWwgeCV4IiwgX19mdW5jX18sCisJCQkJc2lnbmFscyk7CiAKIAkJCW9sZF9kY2Rfc3RhdGUgPSBwb3J0ZGF0YS0+ZGNkX3N0YXRlOwogCQkJcG9ydGRhdGEtPmN0c19zdGF0ZSA9IDE7CkBAIC01MDEsMTkgKzUwNiwyMCBAQAogCQkJCXR0eV9oYW5ndXAodHR5KTsKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9IGVsc2UgewotCQkJZGJnKCIlczogdHlwZSAleCByZXEgJXgiLCBfX2Z1bmNfXywKLQkJCQlyZXFfcGt0LT5iUmVxdWVzdFR5cGUsIHJlcV9wa3QtPmJSZXF1ZXN0KTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB0eXBlICV4IHJlcSAleCIsCisJCQkJX19mdW5jX18sIHJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwKKwkJCQlyZXFfcGt0LT5iUmVxdWVzdCk7CiAJCX0KIAl9IGVsc2UKLQkJZGJnKCIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCiAJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCi0JCQlkYmcoIiVzOiByZXN1Ym1pdCBpbnRyIHVyYiBmYWlsZWQuICglZCkiLAotCQkJCV9fZnVuY19fLCBlcnIpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHJlc3VibWl0IGludHIgdXJiICIKKwkJCQkiZmFpbGVkLiAoJWQpIiwJX19mdW5jX18sIGVycik7CiAJfQogfQogCkBAIC01MjMsMTQgKzUyOSwxNCBAQAogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIHRyeSB0byBnaXZlIGEgZ29vZCBudW1iZXIgYmFjayBiYXNlZCBvbiBpZiB3ZSBoYXZlIGFueSBmcmVlIHVyYnMgYXQKIAkgKiB0aGlzIHBvaW50IGluIHRpbWUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRhdGEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocG9ydGRhdGEtPm91dHN0YW5kaW5nX3VyYnMgPiBOX09VVF9VUkIgKiAyIC8gMykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwpAQCAtNTQ5LDcgKzU1NSw3IEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBTZXQgc29tZSBzYW5lIGRlZmF1bHRzICovCiAJcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDE7CkBAIC01NjEsOCArNTY3LDggQEAKIAkJaWYgKCF1cmIpCiAJCQljb250aW51ZTsKIAkJaWYgKHVyYi0+ZGV2ICE9IHNlcmlhbC0+ZGV2KSB7Ci0JCQlkYmcoIiVzOiBkZXYgJXAgIT0gJXAiLCBfX2Z1bmNfXywKLQkJCQl1cmItPmRldiwgc2VyaWFsLT5kZXYpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGRldiAlcCAhPSAlcCIsCisJCQkJIF9fZnVuY19fLCB1cmItPmRldiwgc2VyaWFsLT5kZXYpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNjAxLDcgKzYwNyw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJcG9ydGRhdGEtPnJ0c19zdGF0ZSA9IDA7CkBAIC02MzAsNyArNjM2LDcgQEAKIAlpbnQgaTsKIAlpbnQgajsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCiAJLyogU2V0IERldmljZSBtb2RlIHRvIEQwICovCiAJc2llcnJhX3NldF9wb3dlcl9zdGF0ZShzZXJpYWwtPmRldiwgMHgwMDAwKTsKQEAgLTY0NCw4ICs2NTAsOSBAQAogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0ZGF0YSksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnRkYXRhKSB7Ci0JCQlkYmcoIiVzOiBrbWFsbG9jIGZvciBzaWVycmFfcG9ydF9wcml2YXRlICglZCkgZmFpbGVkIS4iLAotCQkJCQlfX2Z1bmNfXywgaSk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczoga21hbGxvYyBmb3IgIgorCQkJCSJzaWVycmFfcG9ydF9wcml2YXRlICglZCkgZmFpbGVkIS4iLAorCQkJCV9fZnVuY19fLCBpKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0ZGF0YS0+bG9jayk7CkBAIC02NjUsOCArNjcyLDggQEAKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyArK2opIHsKIAkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCQlkYmcoIiVzOiBhbGxvYyBmb3IgaW4gcG9ydCBmYWlsZWQuIiwKLQkJCQkgICAgX19mdW5jX18pOworCQkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBhbGxvYyBmb3IgaW4gIgorCQkJCQkicG9ydCBmYWlsZWQuIiwgX19mdW5jX18pOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJLyogRmlsbCBVUkIgdXNpbmcgc3VwcGxpZWQgZGF0YS4gKi8KQEAgLTY4OCw3ICs2OTUsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwpAQCAtNzQzLDcgKzc1MCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCmluZGV4IDE1MzNkNmUuLmE2NWJjMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtNTg5LDggKzU4OSw4IEBACiAJY2FzZSAxMDAwMDAwOgogCQkJYnVmWzBdID0gMHgwYjsJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJzcGNwODI1IGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSAiCi0JCSAgICAicmVxdWVzdGVkLCB1c2luZyBkZWZhdWx0IG9mIDk2MDAuIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInNwY3A4MjUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlICIKKwkJCSJiYXVkcmF0ZSByZXF1ZXN0ZWQsIHVzaW5nIGRlZmF1bHQgb2YgOTYwMC5cbiIpOwogCX0KIAogCS8qIFNldCBEYXRhIExlbmd0aCA6IDAwOjViaXQsIDAxOjZiaXQsIDEwOjdiaXQsIDExOjhiaXQgKi8KQEAgLTYyOSw3ICs2MjksOCBAQAogCQkJICAgIFNFVF9VQVJUX0ZPUk1BVF9UWVBFLCBTRVRfVUFSVF9GT1JNQVQsCiAJCQkgICAgdWFydGRhdGEsIDAsIE5VTEwsIDAsIDEwMCk7CiAJaWYgKGkgPCAwKQotCQllcnIoIlNldCBVQVJUIGZvcm1hdCAlI3ggZmFpbGVkIChlcnJvciA9ICVkKSIsIHVhcnRkYXRhLCBpKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IFVBUlQgZm9ybWF0ICUjeCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLAorCQkJdWFydGRhdGEsIGkpOwogCWRiZygiMHgyMToweDQwOjA6MCAgJWRcbiIsIGkpOwogCiAJaWYgKGNmbGFnICYgQ1JUU0NUUykgewpAQCAtMTA1NCw3ICsxMDU1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNwY3A4eDVfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3BjcDh4NV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYzkwMjM3ZC4uMzFjNDJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAidGlfdXNiXzM0MTBfNTA1Mi5oIgogCkBAIC0zODMsNyArMzgyLDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF91c2I7CiAKLQlpbmZvKFRJX0RSSVZFUl9ERVNDICIgIiBUSV9EUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIFRJX0RSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBUSV9EUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBlN2Q0MjQ2Li44YmUzZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTExMjEsNyArMTEyMSw4IEBACiAKIAlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGJ1cyBkcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciAiCisJCSAgICAgICAiZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdF9idXM7CiAJfQogCkBAIC0xMTQyLDI1ICsxMTQzLDI4IEBACiAJdHR5X3NldF9vcGVyYXRpb25zKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOwogCXJlc3VsdCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlpZiAocmVzdWx0KSB7Ci0JCWVycigiJXMgLSB0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfcmVnX2RyaXZlcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgVVNCIGRyaXZlciAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX3NlcmlhbF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWVycigiJXMgLSB1c2JfcmVnaXN0ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gdXNiX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBleGl0X3R0eTsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZ2VuZXJpYyBkcml2ZXIsIGlmIHdlIHNob3VsZCAqLwogCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlcihkZWJ1Zyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgIgorCQkgICAgICAgImRyaXZlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0X2dlbmVyaWM7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTE3NCw3ICsxMTc4LDggQEAKIAlidXNfdW5yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CiAKIGV4aXRfYnVzOgotCWVycigiJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIHJlc3VsdCk7CiAJcHV0X3R0eV9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTIzMywxMSArMTIzOCwxMSBAQAogCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoZHJpdmVyKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigicHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsCi0JCQkJCQlyZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6IHByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyAiCisJCSAgICAgICAiZHJpdmVyICVzXG4iLCByZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOwogCQlsaXN0X2RlbCgmZHJpdmVyLT5kcml2ZXJfbGlzdCk7CiAJfSBlbHNlCi0JCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsCisJCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlc1xuIiwKIAkJCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTEyNDgsNyArMTI1Myw4IEBACiB2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRldmljZSkKIHsKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCi0JaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+ZGVzY3JpcHRpb24pOworCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCisJICAgICAgIGRldmljZS0+ZGVzY3JpcHRpb24pOwogCWxpc3RfZGVsKCZkZXZpY2UtPmRyaXZlcl9saXN0KTsKIAl1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKGRldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IGE2ZDFjNzUuLjRmYWNjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7Ci0JCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtOTcxLDExICs5NzEsMTQgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpbmZvKAotCQkgICJVbnRlc3RlZCBVU0IgZGV2aWNlIHNwZWNpZmllZCBhdCB0aW1lIG9mIG1vZHVsZSBpbnNlcnRpb24iKTsKLQkJaW5mbygiV2FybmluZzogVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIik7Ci0JCWluZm8oIlVzaW5nIGEgbmV3ZXIga2VybmVsIGlzIHByZWZlcnJlZCB0byB0aGlzIG1ldGhvZCIpOwotCQlpbmZvKCJBZGRpbmcgUGFsbSBPUyBwcm90b2NvbCA0Lnggc3VwcG9ydCBmb3IgdW5rbm93biBkZXZpY2U6IDB4JXgvMHgleCIsCisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFVudGVzdGVkIFVTQiBkZXZpY2Ugc3BlY2lmaWVkIGF0IHRpbWUgb2YgbW9kdWxlIGluc2VydGlvblxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFdhcm5pbmc6IFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29ya1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFVzaW5nIGEgbmV3ZXIga2VybmVsIGlzIHByZWZlcnJlZCB0byB0aGlzIG1ldGhvZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IEFkZGluZyBQYWxtIE9TIHByb3RvY29sIDQueCBzdXBwb3J0IGZvciB1bmtub3duIGRldmljZTogMHgleC8weCV4XG4iLAogCQkJdmVuZG9yLCBwcm9kdWN0KTsKIAl9CiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaGFuZHNwcmluZ19kZXZpY2UpOwpAQCAtOTkwLDcgKzk5Myw3IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ2aXNvcl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggMTFjOGI5Ny4uNTMzNWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMzAzLDEyICszMDMsMTUgQEAKIAogCWlmIChyZXF1ZXN0X2loZXhfZmlybXdhcmUoJmZpcm13YXJlX2Z3LCAid2hpdGVoZWF0LmZ3IiwKIAkJCQkgICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdC5md1wiIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXQuZndcIiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChyZXF1ZXN0X2loZXhfZmlybXdhcmUoJmxvYWRlcl9mdywgIndoaXRlaGVhdF9sb2FkZXIuZnciLAogCQkJICAgICAmc2VyaWFsLT5kZXYtPmRldikpIHsKLQkJZXJyKCIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXRfbG9hZGVyLmZ3XCIgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdF9sb2FkZXIuZndcIiBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSAwOwpAQCAtMzIwLDkgKzMyMywxMCBAQAogCQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgbG9hZGVyICglZCAlMDRYICVwICVkKSIsCi0JCQkgICAgX19mdW5jX18sIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5ICIKKwkJCQkiZmFpbGVkIGZvciBsb2FkZXIgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCV9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKKwkJCQlyZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQlyZWNvcmQgPSBpaGV4X25leHRfYmlucmVjKHJlY29yZCk7CkBAIC0zMzgsOSArMzQyLDExIEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTMpOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBmaXJzdCBmaXJtd2FyZSBzdGVwICglZCAlMDRYICVwICVkKSIsIAotCQkJICAgIF9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBlenVzYl93cml0ZW1lbW9yeSAiCisJCQkJImZhaWxlZCBmb3IgZmlyc3QgZmlybXdhcmUgc3RlcCAiCisJCQkJIiglZCAlMDRYICVwICVkKVxuIiwgX19mdW5jX18sIHJlc3BvbnNlLAorCQkJCWJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksIHJlY29yZC0+ZGF0YSwKKwkJCQliZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOwogCQkJYnJlYWs7CiAJCX0KIAkJKytyZWNvcmQ7CkBAIC0zNTQsOSArMzYwLDExIEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTApOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBzZWNvbmQgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKLQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UsIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksCi0JCQkgICAgcmVjb3JkLT5kYXRhLCBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgIgorCQkJCSJmYWlsZWQgZm9yIHNlY29uZCBmaXJtd2FyZSBzdGVwICIKKwkJCQkiKCVkICUwNFggJXAgJWQpXG4iLCBfX2Z1bmNfXywgcmVzcG9uc2UsCisJCQkJYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwgcmVjb3JkLT5kYXRhLAorCQkJCWJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQkrK3JlY29yZDsKQEAgLTQyMSwxMiArNDI5LDEyIEBACiAJcmV0ID0gdXNiX2J1bGtfbXNnKHNlcmlhbC0+ZGV2LCBwaXBlLCBjb21tYW5kLCAyLAogCQkJCQkJJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CiAJaWYgKHJldCkgewotCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChhbGVuICE9IDIpIHsKLQkJZXJyKCIlczogU2VuZCBjb21tYW5kIGluY29tcGxldGUgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogU2VuZCBjb21tYW5kIGluY29tcGxldGUgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIApAQCAtNDM3LDMxICs0NDUsMzMgQEAKIAlyZXQgPSB1c2JfYnVsa19tc2coc2VyaWFsLT5kZXYsIHBpcGUsIHJlc3VsdCwKIAkJCXNpemVvZigqaHdfaW5mbykgKyAxLCAmYWxlbiwgQ09NTUFORF9USU1FT1VUX01TKTsKIAlpZiAocmV0KSB7Ci0JCWVycigiJXM6IENvdWxkbid0IGdldCByZXN1bHRzIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChhbGVuICE9IHNpemVvZigqaHdfaW5mbykgKyAxKSB7Ci0JCWVycigiJXM6IEdldCByZXN1bHRzIGluY29tcGxldGUgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogR2V0IHJlc3VsdHMgaW5jb21wbGV0ZSBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChyZXN1bHRbMF0gIT0gY29tbWFuZFswXSkgewotCQllcnIoIiVzOiBDb21tYW5kIGZhaWxlZCBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IENvbW1hbmQgZmFpbGVkIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIAogCWh3X2luZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9od19pbmZvICopJnJlc3VsdFsxXTsKIAotCWluZm8oIiVzOiBEcml2ZXIgJXM6IEZpcm13YXJlIHYlZC4lMDJkIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwKLQkgICAgIERSSVZFUl9WRVJTSU9OLCBod19pbmZvLT5zd19tYWpvcl9yZXYsIGh3X2luZm8tPnN3X21pbm9yX3Jldik7CisJZGV2X2luZm8oJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogRHJpdmVyICVzOiBGaXJtd2FyZSB2JWQuJTAyZFxuIiwKKwkJIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIERSSVZFUl9WRVJTSU9OLAorCQkgaHdfaW5mby0+c3dfbWFqb3JfcmV2LCBod19pbmZvLT5zd19taW5vcl9yZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAogCQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChpbmZvID09IE5VTEwpIHsKLQkJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsCisJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJCQlnb3RvIG5vX3ByaXZhdGU7CiAJCX0KIApAQCAtNDgxLDE4ICs0OTEsMjAgQEAKIAkJZm9yIChqID0gMDsgaiA8IHVyYl9wb29sX3NpemU7IGorKykgewogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBub19yeF91cmI7CiAJCQl9CiAJCQlidWZfc2l6ZSA9IHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyXG4iKTsKIAkJCQlnb3RvIG5vX3J4X2J1ZjsKIAkJCX0KIAkJCXdyYXAgPSBrbWFsbG9jKHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF3cmFwKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlciIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyXG4iKTsKIAkJCQlnb3RvIG5vX3J4X3dyYXA7CiAJCQl9CiAJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LApAQCAtNTA1LDE4ICs1MTcsMjAgQEAKIAogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBub190eF91cmI7CiAJCQl9CiAJCQlidWZfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlclxuIik7CiAJCQkJZ290byBub190eF9idWY7CiAJCQl9CiAJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghd3JhcCkgewotCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlclxuIik7CiAJCQkJZ290byBub190eF93cmFwOwogCQkJfQogCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKQEAgLTUzNCw4ICs1NDgsOSBAQAogCWNvbW1hbmRfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlKSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbW1hbmRfaW5mbyA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCQlnb3RvIG5vX2NvbW1hbmRfcHJpdmF0ZTsKIAl9CiAKQEAgLTU1MiwxMiArNTY3LDE1IEBACiAKIG5vX2Zpcm13YXJlOgogCS8qIEZpcm13YXJlIGxpa2VseSBub3QgcnVubmluZyAqLwotCWVycigiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0JZXJyKCIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwotCWVycigiJXM6IHBsZWFzZSBjb250YWN0IHN1cHBvcnRAY29ubmVjdHRlY2guY29tXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJa2ZyZWUocmVzdWx0KTsKIAlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjgwLDggKzY5OCw5IEBACiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlyZXR2YWwgPSBzdGFydF9wb3J0X3JlYWQocG9ydCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCWZpcm1fY2xvc2UocG9ydCk7CiAJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CiAJCWdvdG8gZXhpdDsKQEAgLTgwNiw4ICs4MjUsOSBAQAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlzZW50ID0gcmVzdWx0OwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CkBAIC0xMDc1LDcgKzEwOTUsNyBAQAogCXdyYXAgPSB1cmJfdG9fd3JhcCh1cmIsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CiAJaWYgKCF3cmFwKSB7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJbGlzdF9kZWwoJndyYXAtPmxpc3QpOwpAQCAtMTExOSw3ICsxMTM5LDcgQEAKIAl3cmFwID0gdXJiX3RvX3dyYXAodXJiLCAmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpOwogCWlmICghd3JhcCkgewogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBOb3QgbXkgdXJiIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWxpc3RfbW92ZSgmd3JhcC0+bGlzdCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CkBAIC0xMzgzLDggKzE0MDMsOSBAQAogCQljb21tYW5kX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXR2YWwpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0xNTIyLDcgKzE1NDMsOCBAQAogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CkBAIC0xNTU2LDcgKzE1NzgsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmd2hpdGVoZWF0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IDk4Yjg5ZWEuLmM3YmY4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTc4LDggKzc4LDggQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgcmV0dmFsICVkIiwKLQkJCW9uZXRvdWNoLT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgIgorCQkJInJldHZhbCAlZFxuIiwgb25ldG91Y2gtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCiAJCQlvbmV0b3VjaC0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKIH0KIApAQCAtOTAsNyArOTAsNyBAQAogCW9uZXRvdWNoLT5pc19vcGVuID0gMTsKIAlvbmV0b3VjaC0+aXJxLT5kZXYgPSBvbmV0b3VjaC0+dWRldjsKIAlpZiAodXNiX3N1Ym1pdF91cmIob25ldG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExNyw3ICsxMTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVVNfUkVTVU1FOgogCQkJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpICE9IDApCi0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJCQlkZXZfZXJyKCZvbmV0b3VjaC0+aXJxLT5kZXYtPmRldiwKKwkJCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMzUyM2EwYi4uNzkxMDhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAl9CiAKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KLQlpZiAoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCAmJgorCWlmICgoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCB8fCBzcmItPnNlbnNlX2J1ZmZlclsyXSA9PSAwKSAmJgogCQkJc2NzaV9idWZmbGVuKHNyYikgLSBzY3NpX2dldF9yZXNpZChzcmIpIDwgc3JiLT51bmRlcmZsb3cpCiAJCXNyYi0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBmNzljMjA0Li4wZjEzNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC03Niw2ICs3NiwxNCBAQAogICAgICAgIHNlbGVjdCBJMkMKICAgICAgICBkZWZhdWx0IG4KIAorY29uZmlnIEZCX0JPT1RfVkVTQV9TVVBQT1JUCisJYm9vbAorCWRlcGVuZHMgb24gRkIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBJZiB0cnVlLCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgZnJhbWVidWZmZXIgZHJpdmVyIGNhbiB0YWtlIGFkdmFudGFnZQorCSAgb2YgVkVTQSB2aWRlbyBtb2RlcyBzZXQgYXQgYW4gZWFybHkgYm9vdCBzdGFnZSB2aWEgdGhlIHZnYT0gcGFyYW1ldGVyLgorCiBjb25maWcgRkJfQ0ZCX0ZJTExSRUNUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIEZCCkBAIC0yNTQsMTYgKzI2MiwyNCBAQAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgUGVybWVkaWEyIEFHUCBmcmFtZQotCSAgYnVmZmVyIGNhcmQgZnJvbSBBU0ssIGFrYSBgR3JhcGhpYyBCbGFzdGVyIEV4eHRyZW1lJy4gIFRoZXJlIGlzIGEKLQkgIHByb2R1Y3QgcGFnZSBhdAotCSAgPGh0dHA6Ly93d3cuYXNrLmNvbS5oay9wcm9kdWN0L1Blcm1lZGlhJTIwMi9wZXJtZWRpYTIuaHRtPi4KKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBjYXJkcyBiYXNlZCBvbgorCSAgdGhlIDNEIExhYnMgUGVybWVkaWEsIFBlcm1lZGlhIDIgYW5kIFBlcm1lZGlhIDJWIGNoaXBzLgorCSAgVGhlIGRyaXZlciB3YXMgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgY2FyZHM6CisJCURpYW1vbmQgRmlyZUdMIDEwMDAgUFJPIEFHUAorCQlFTFNBIEdsb3JpYSBTeW5lcmd5IFBDSQorCQlBcHBpYW4gSmVyb25pbW8gUFJPIChib3RoIGhlYWRzKSBQQ0kKKwkJM0RMYWJzIE94eWdlbiBBQ1ggYWthIEVPTnRyb25pY3MgUGljYXNzbyBQMiBQQ0kKKwkJVGVjaHNvdXJjZSBSYXB0b3IgR0ZYLThQIChha2EgU3VuIFBHWC0zMikgb24gU1BBUkMKKwkJQVNLIEdyYXBoaWMgQmxhc3RlciBFeHh0cmVtZSBBR1AKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG0yZmIuCiAKIGNvbmZpZyBGQl9QTTJfRklGT19ESVNDT05ORUNUCiAJYm9vbCAiZW5hYmxlIEZJRk8gZGlzY29ubmVjdCBmZWF0dXJlIgogCWRlcGVuZHMgb24gRkJfUE0yICYmIFBDSQogCWhlbHAKLQkgIFN1cHBvcnQgdGhlIFBlcm1lZGlhMiBGSUZPIGRpc2Nvbm5lY3QgZmVhdHVyZSAoc2VlIENPTkZJR19GQl9QTTIpLgorCSAgU3VwcG9ydCB0aGUgUGVybWVkaWEyIEZJRk8gZGlzY29ubmVjdCBmZWF0dXJlLgogCiBjb25maWcgRkJfQVJNQ0xDRAogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMTEwIHN1cHBvcnQiCkBAIC02NzMsNiArNjg5LDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX0JPT1RfVkVTQV9TVVBQT1JUCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIGdlbmVyaWMgVkVTQSAyLjAKIAkgIGNvbXBsaWFudCBncmFwaGljIGNhcmRzLiBUaGUgb2xkZXIgVkVTQSAxLjIgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCkBAIC02ODEsMjMgKzY5OCwxNCBAQAogCiBjb25maWcgRkJfRUZJCiAJYm9vbCAiRUZJLWJhc2VkIEZyYW1lYnVmZmVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBYODYKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgRUZJIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyLiBJZiB0aGUgZmlybXdhcmUgb24KLQkgIHlvdXIgcGxhdGZvcm0gaXMgVUVGSTIuMCwgc2VsZWN0IFkgdG8gYWRkIHN1cHBvcnQgZm9yCi0JICBHcmFwaGljcyBPdXRwdXQgUHJvdG9jb2wgZm9yIGVhcmx5IGNvbnNvbGUgbWVzc2FnZXMgdG8gYXBwZWFyLgotCi1jb25maWcgRkJfSU1BQwotCWJvb2wgIkludGVsLWJhc2VkIE1hY2ludG9zaCBGcmFtZWJ1ZmZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEZCID0geSkgJiYgWDg2ICYmIEVGSQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIEludGVsLWJhc2VkIE1hY2ludG9zaAorCSAgVGhpcyBpcyB0aGUgRUZJIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyLiBJZiB0aGUgZmlybXdhcmUgb24KKwkgIHlvdXIgcGxhdGZvcm0gaXMgRUZJIDEuMTAgb3IgVUVGSSAyLjAsIHNlbGVjdCBZIHRvIGFkZCBzdXBwb3J0IGZvcgorCSAgdXNpbmcgdGhlIEVGSSBmcmFtZWJ1ZmZlciBhcyB5b3VyIGNvbnNvbGUuCiAKIGNvbmZpZyBGQl9ONDExCiAgICAgICAgdHJpc3RhdGUgIk40MTEgQXBvbGxvL0hlY3ViYSBkZXZraXQgc3VwcG9ydCIKQEAgLTExMTgsNiArMTEyNiw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CT09UX1ZFU0FfU1VQUE9SVAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBvbi1ib2FyZCBncmFwaGljcyBidWlsdCBpbiB0byB0aGUgSW50ZWwKICAgICAgICAgICA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00vOTY1Ry85NjVHTSBjaGlwc2V0cy4KQEAgLTE0NzAsNiArMTQ3OSw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CT09UX1ZFU0FfU1VQUE9SVAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgU2lTIDMwMCwgMzE1LCAzMzAKIAkgIGFuZCAzNDAgc2VyaWVzIGFzIHdlbGwgYXMgWEdJIFYzWFQsIFY1LCBWOCwgWjcgZ3JhcGhpY3MgY2hpcHNldHMuCkBAIC0xNDkyLDYgKzE1MDIsMjQgQEAKIAkgICgzMTUvSC9QUk8sIDU1eCwgNjUwLCA2NTEsIDc0MCwgMzMwLCA2NjEsIDc0MSwgNzYwLCA3NjEpIGFzIHdlbGwKIAkgIGFzIFhHSSBWM1hULCBWNSwgVjggYW5kIFo3LgogCitjb25maWcgRkJfVklBCisgICAgICAgdHJpc3RhdGUgIlZJQSBVbmlDaHJvbWUgKFBybykgYW5kIENocm9tZTkgZGlzcGxheSBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gRkIgJiYgUENJCisgICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorICAgICAgIHNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKyAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorICAgICAgIHNlbGVjdCBGQl9TT0ZUX0NVUlNPUgorICAgICAgIHNlbGVjdCBJMkNfQUxHT0JJVAorICAgICAgIHNlbGVjdCBJMkMKKyAgICAgICBoZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgR3JhcGhpY3MgY2hpcHMgb2YgVklBCisJICBVbmlDaHJvbWUgKFBybykgRmFtaWx5IChDTEUyNjYsUE04MDAvQ040MDAsUDRNODAwQ0UvUDRNODAwUHJvLworCSAgQ043MDAvVk44MDAsQ1g3MDAvVlg3MDAsUDRNODkwKSBhbmQgQ2hyb21lOSBGYW1pbHkgKEs4TTg5MCxDTjg5NgorIAkgIC9QNE05MDAsVlg4MDApCisJICBTYXkgWSBpZiB5b3UgaGF2ZSBhIFZJQSBVbmlDaHJvbWUgZ3JhcGhpY3MgYm9hcmQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpYWZiLgogY29uZmlnIEZCX05FT01BR0lDCiAJdHJpc3RhdGUgIk5lb01hZ2ljIGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtMTUyMSwyNSArMTU0OSwyNSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGt5cm9mYi4KIAogY29uZmlnIEZCXzNERlgKLQl0cmlzdGF0ZSAiM0RmeCBCYW5zaGVlL1Zvb2RvbzMgZGlzcGxheSBzdXBwb3J0IgorCXRyaXN0YXRlICIzRGZ4IEJhbnNoZWUvVm9vZG9vMy9Wb29kb281IGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgM0RmeCBCYW5zaGVlL1Zvb2RvbzMKLQkgIGNoaXBzLiBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgM0RmeCBCYW5zaGVlLAorCSAgVm9vZG9vMyBvciBWU0EtMTAwIChha2EgVm9vZG9vNC81KSBjaGlwcy4gU2F5IFkgaWYgeW91IGhhdmUKKwkgIHN1Y2ggYSBncmFwaGljcyBib2FyZC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRmeGZiLgogCiBjb25maWcgRkJfM0RGWF9BQ0NFTAotCWJvb2wgIjNEZnggQmFuc2hlZS9Wb29kb28zIEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiM0RmeCBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRkJfM0RGWCAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JVGhpcyB3aWxsIGNvbXBpbGUgdGhlIDNEZnggQmFuc2hlZS9Wb29kb28zIGZyYW1lIGJ1ZmZlciBkZXZpY2UKLQl3aXRoIGFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCi0KKwlUaGlzIHdpbGwgY29tcGlsZSB0aGUgM0RmeCBCYW5zaGVlL1Zvb2RvbzMvVlNBLTEwMCBmcmFtZSBidWZmZXIKKwlkZXZpY2UgZHJpdmVyIHdpdGggYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4KIAogY29uZmlnIEZCX1ZPT0RPTzEKIAl0cmlzdGF0ZSAiM0RmeCBWb29kb28gR3JhcGhpY3MgKHNzdDEpIHN1cHBvcnQiCkBAIC0xNjA0LDE3ICsxNjMyLDE2IEBACiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydCBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUKLQkgIFRyaWRlbnQgQ3liZXJYWFhYL0ltYWdlL0N5YmVyQmxhZGUgY2hpcHMgbW9zdGx5IGZvdW5kIGluIGxhcHRvcHMKKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBUcmlkZW50IFBDSS9BR1AgY2hpcHNldHMuCisJICBTdXBwb3J0ZWQgY2hpcHNldCBmYW1pbGllcyBhcmUgVEdVSSA5NDQwLzk2WFgsIDNESW1hZ2UsIEJsYWRlM0QKKwkgIGFuZCBCbGFkZSBYUC4KKwkgIFRoZXJlIGFyZSBhbHNvIGludGVncmF0ZWQgdmVyc2lvbnMgb2YgdGhlc2UgY2hpcHMgY2FsbGVkIEN5YmVyWFhYWCwKKwkgIEN5YmVySW1hZ2Ugb3IgQ3liZXJCbGFkZS4gVGhlc2UgY2hpcHMgYXJlIG1vc3RseSBmb3VuZCBpbiBsYXB0b3BzCiAJICBidXQgYWxzbyBvbiBzb21lIG1vdGhlcmJvYXJkcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvdHJpZGVudGZiLnR4dD4KIAotCSAgQ3liZXJibGFkZS9pMSBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCBzb29uLCB1c2UgdGhlIGN5YmxhZmIgZHJpdmVyCi0JICBpbnN0ZWFkLgotCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCiAKLQogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHJpZGVudGZiLgogCkBAIC0xODY5LDYgKzE4OTYsMjggQEAKIAktLS1oZWxwLS0tCiAJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgb24tY2hpcCBTSC1Nb2JpbGUgTENEIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBGQl9UTUlPCisJdHJpc3RhdGUgIlRvc2hpYmEgTW9iaWxlIElPIEZyYW1lQnVmZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBNRkRfQ09SRQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgVG9zaGliYSBNb2JpbGUgSU8gaW50ZWdyYXRlZCBhcyBmb3VuZAorCSAgb24gdGhlIFNoYXJwIFNMLTYwMDAgc2VyaWVzCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQorCSAgaW5zZXJ0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLiBUaGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0bWlvZmIuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsCisJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEZCX1RNSU9fQUNDRUxMCisJYm9vbCAidG1pb2ZiIGFjY2VsZXJhdGlvbiIKKwlkZXBlbmRzIG9uIEZCX1RNSU8KKwlkZWZhdWx0IHkKKwogY29uZmlnIEZCX1MzQzI0MTAKIAl0cmlzdGF0ZSAiUzNDMjQxMCBMQ0QgZnJhbWVidWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUzNDMjQxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggYWQwMzMwYi4uMjQ4YmRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiBvYmotJChDT05GSUdfRkJfQVRZMTI4KQkJICArPSBhdHkvIG1hY21vZGVzLm8KIG9iai0kKENPTkZJR19GQl9SQURFT04pCQkgICs9IGF0eS8KIG9iai0kKENPTkZJR19GQl9TSVMpCQkgICs9IHNpcy8KK29iai0kKENPTkZJR19GQl9WSUEpCQkgICs9IHZpYS8KIG9iai0kKENPTkZJR19GQl9LWVJPKSAgICAgICAgICAgICArPSBreXJvLwogb2JqLSQoQ09ORklHX0ZCX1NBVkFHRSkJCSAgKz0gc2F2YWdlLwogb2JqLSQoQ09ORklHX0ZCX0dFT0RFKQkJICArPSBnZW9kZS8KQEAgLTk3LDYgKzk4LDcgQEAKIG9iai0kKENPTkZJR19GQl9BU0lMSUFOVCkJICArPSBhc2lsaWFudGZiLm8KIG9iai0kKENPTkZJR19GQl9QWEEpCQkgICs9IHB4YWZiLm8KIG9iai0kKENPTkZJR19GQl9XMTAwKQkJICArPSB3MTAwZmIubworb2JqLSQoQ09ORklHX0ZCX1RNSU8pCQkgICs9IHRtaW9mYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMTAwKQkJICArPSBhdTExMDBmYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMjAwKQkJICArPSBhdTEyMDBmYi5vCiBvYmotJChDT05GSUdfRkJfUE1BR19BQSkJICArPSBwbWFnLWFhLWZiLm8KQEAgLTEyNCw3ICsxMjYsNiBAQAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9VVkVTQSkgICAgICAgICAgICArPSB1dmVzYWZiLm8KIG9iai0kKENPTkZJR19GQl9WRVNBKSAgICAgICAgICAgICArPSB2ZXNhZmIubwotb2JqLSQoQ09ORklHX0ZCX0lNQUMpICAgICAgICAgICAgICs9IGltYWNmYi5vCiBvYmotJChDT05GSUdfRkJfRUZJKSAgICAgICAgICAgICAgKz0gZWZpZmIubwogb2JqLSQoQ09ORklHX0ZCX1ZHQTE2KSAgICAgICAgICAgICs9IHZnYTE2ZmIubwogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IGQzOGZkNTIuLmY4ZDBhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTM3Miw2ICszNzIsMTMgQEAKIAl2YXItPnRyYW5zcC5vZmZzZXQgPSB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCXZhci0+eG9mZnNldCA9IHZhci0+eW9mZnNldCA9IDA7CiAKKwlpZiAoaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXVuc2lnbmVkIGludCBzbWVtX2xlbiA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsCisJCQkJCSAqICgodmFyLT5iaXRzX3Blcl9waXhlbCArIDcpIC8gOCkpOworCQlpZiAoc21lbV9sZW4gPiBpbmZvLT5maXguc21lbV9sZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBTYXR1cmF0ZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB0aW1pbmdzIGF0IG1heGltdW0gdmFsdWVzICovCiAJdmFyLT52c3luY19sZW4gPSBtaW5fdCh1MzIsIHZhci0+dnN5bmNfbGVuLAogCQkJKEFUTUVMX0xDRENfVlBXID4+IEFUTUVMX0xDRENfVlBXX09GRlNFVCkgKyAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKaW5kZXggYWE5NWY4My4uODcxOGY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKQEAgLTUsNjEgKzUsNjEgQEAKICAqIC0tZHRlCiAgKi8KIAotc3RhdGljIHZvaWQgcmFkZW9uX2ZpeHVwX29mZnNldChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCisjZGVmaW5lIEZMVVNIX0NBQ0hFX1dPUktBUk9VTkQJMQorCit2b2lkIHJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKQogewotCXUzMiBsb2NhbF9iYXNlOworCWludCBpOwogCi0JLyogKioqIFVnbHkgd29ya2Fyb3VuZCAqKiogKi8KLQkvKgotCSAqIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgdmlkZW8gbWVtb3J5IGlzIG1hcHBlZCBhdCAwIGluIHJhZGVvbiBjaGlwIHNwYWNlCi0JICogKGxpa2UgUFBDcykgYnkgdGhlIGZpcm13YXJlLiBYIHdpbGwgYWx3YXlzIG1vdmUgaXQgdXAgc28gdGhhdCBpdCdzIHNlZW4KLQkgKiBieSB0aGUgY2hpcCB0byBiZSBhdCB0aGUgc2FtZSBhZGRyZXNzIGFzIHRoZSBQQ0kgQkFSLgotCSAqIFRoYXQgbWVhbnMgdGhhdCB3aGVuIHN3aXRjaGluZyBiYWNrIGZyb20gWCwgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuCi0JICogdGhlIG9mZnNldHMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBlbmdpbmUuIFRoaXMgbWVhbnMgdGhhdCBwb3RlbnRpYWxseSwKLQkgKiBhY2NlbCBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIHJhZGVvbmZiIGhhcyBhIGNoYW5jZSB0byByZS1pbml0IHRoZSBlbmdpbmUKLQkgKiB3aWxsIGhhdmUgaW5jb3JyZWN0IG9mZnNldHMsIGFuZCBwb3RlbnRpYWxseSB0cmFzaCBzeXN0ZW0gbWVtb3J5ICEKLQkgKgotCSAqIFRoZSBjb3JyZWN0IGZpeCBpcyBmb3IgZmJjb24gdG8gbmV2ZXIgY2FsbCBhbnkgYWNjZWwgb3AgYmVmb3JlIHRoZSBlbmdpbmUKLQkgKiBoYXMgcHJvcGVybHkgYmVlbiByZS1pbml0aWFsaXplZCAoYnkgYSBjYWxsIHRvIHNldF92YXIpLCBidXQgdGhpcyBpcyBhCi0JICogY29tcGxleCBmaXguIFRoaXMgd29ya2Fyb3VuZCBpbiB0aGUgbWVhbnRpbWUsIGNhbGxlZCBiZWZvcmUgZXZlcnkgYWNjZWwKLQkgKiBvcGVyYXRpb24sIG1ha2VzIHN1cmUgdGhlIG9mZnNldHMgYXJlIGluIHN5bmMuCi0JICovCisJZm9yIChpPTA7IGk8MjAwMDAwMDsgaSsrKSB7CisJCXJpbmZvLT5maWZvX2ZyZWUgPSBJTlJFRyhSQkJNX1NUQVRVUykgJiAweDdmOworCQlpZiAocmluZm8tPmZpZm9fZnJlZSA+PSBlbnRyaWVzKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMTApOworCX0KKwlwcmludGsoS0VSTl9FUlIgInJhZGVvbmZiOiBGSUZPIFRpbWVvdXQgIVxuIik7CisJLyogWFhYIFRvZG86IGF0dGVtcHQgdG8gcmVzZXQgdGhlIGVuZ2luZSAqLworfQogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JbG9jYWxfYmFzZSA9IElOUkVHKE1DX0ZCX0xPQ0FUSU9OKSA8PCAxNjsKLQlpZiAobG9jYWxfYmFzZSA9PSByaW5mby0+ZmJfbG9jYWxfYmFzZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fZmlmb193YWl0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGVudHJpZXMpCit7CisJaWYgKGVudHJpZXMgPD0gcmluZm8tPmZpZm9fZnJlZSkKKwkJcmluZm8tPmZpZm9fZnJlZSAtPSBlbnRyaWVzOworCWVsc2UKKwkJcmFkZW9uX2ZpZm9fdXBkYXRlX2FuZF93YWl0KHJpbmZvLCBlbnRyaWVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbmZiX3NldF9jcmVnKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgdTMyIHJlZywKKwkJCQkgICAgIHUzMiAqY2FjaGUsIHUzMiBuZXdfdmFsKQoreworCWlmIChuZXdfdmFsID09ICpjYWNoZSkKIAkJcmV0dXJuOwotCi0JcmluZm8tPmZiX2xvY2FsX2Jhc2UgPSBsb2NhbF9iYXNlOwotCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMyk7Ci0JT1VUUkVHKERFRkFVTFRfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwKLQkJCQkgICAgIChyaW5mby0+ZmJfbG9jYWxfYmFzZSA+PiAxMCkpOwotCU9VVFJFRyhEU1RfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwgKHJpbmZvLT5mYl9sb2NhbF9iYXNlID4+IDEwKSk7Ci0JT1VUUkVHKFNSQ19QSVRDSF9PRkZTRVQsIChyaW5mby0+cGl0Y2ggPDwgMHgxNikgfCAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKKwkqY2FjaGUgPSBuZXdfdmFsOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhyZWcsIG5ld192YWwpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25mYl9wcmltX2ZpbGxyZWN0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgCiAJCQkJICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWdpb24pCiB7Ci0JcmFkZW9uX2ZpZm9fd2FpdCg0KTsgIAotICAKLQlPVVRSRUcoRFBfR1VJX01BU1RFUl9DTlRMLCAgCi0JCXJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgIC8qIGNvbnRhaW5zLCBsaWtlIEdNQ19EU1RfMzJCUFAgKi8KLSAgICAgICAgICAgICAgICB8IEdNQ19CUlVTSF9TT0xJRF9DT0xPUgotICAgICAgICAgICAgICAgIHwgUk9QM19QKTsKLQlpZiAocmFkZW9uX2dldF9kc3RicHAocmluZm8tPmRlcHRoKSAhPSBEU1RfOEJQUCkKLQkJT1VUUkVHKERQX0JSVVNIX0ZSR0RfQ0xSLCByaW5mby0+cHNldWRvX3BhbGV0dGVbcmVnaW9uLT5jb2xvcl0pOwotCWVsc2UKLQkJT1VUUkVHKERQX0JSVVNIX0ZSR0RfQ0xSLCByZWdpb24tPmNvbG9yKTsKLQlPVVRSRUcoRFBfV1JJVEVfTVNLLCAweGZmZmZmZmZmKTsKLQlPVVRSRUcoRFBfQ05UTCwgKERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NKSk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0dVSV9NQVNURVJfQ05UTCwgJnJpbmZvLT5kcF9ndWlfbWNfY2FjaGUsCisJCQkgIHJpbmZvLT5kcF9ndWlfbWNfYmFzZSB8IEdNQ19CUlVTSF9TT0xJRF9DT0xPUiB8IFJPUDNfUCk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0NOVEwsICZyaW5mby0+ZHBfY250bF9jYWNoZSwKKwkJCSAgRFNUX1hfTEVGVF9UT19SSUdIVCB8IERTVF9ZX1RPUF9UT19CT1RUT00pOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9CUlVTSF9GUkdEX0NMUiwgJnJpbmZvLT5kcF9icnVzaF9mZ19jYWNoZSwKKwkJCSAgcmVnaW9uLT5jb2xvcik7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOworCS8qIEVuc3VyZSB0aGUgZHN0IGNhY2hlIGlzIGZsdXNoZWQgYW5kIHRoZSBlbmdpbmUgaWRsZSBiZWZvcmUKKwkgKiBpc3N1aW5nIHRoZSBvcGVyYXRpb24uCisJICoKKwkgKiBUaGlzIHdvcmtzIGFyb3VuZCBlbmdpbmUgbG9ja3VwcyBvbiBzb21lIGNhcmRzCisJICovCisjaWYgRkxVU0hfQ0FDSEVfV09SS0FST1VORAorCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOwogCU9VVFJFRyhEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCk7CiAJT1VUUkVHKFdBSVRfVU5USUwsIChXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfRE1BX0dVSV9JRExFKSk7Ci0KLQlyYWRlb25fZmlmb193YWl0KDIpOyAgCisjZW5kaWYKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoRFNUX1lfWCwgKHJlZ2lvbi0+ZHkgPDwgMTYpIHwgcmVnaW9uLT5keCk7CiAJT1VUUkVHKERTVF9XSURUSF9IRUlHSFQsIChyZWdpb24tPndpZHRoIDw8IDE2KSB8IHJlZ2lvbi0+aGVpZ2h0KTsKIH0KQEAgLTcwLDE1ICs3MCwxNCBAQAogCXN0cnVjdCBmYl9maWxscmVjdCBtb2RkZWQ7CiAJaW50IHZ4cmVzLCB2eXJlczsKICAgCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCVdBUk5fT04ocmluZm8tPmdmeF9tb2RlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwgcmluZm8tPmdmeF9tb2RlKQogCQlyZXR1cm47CiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKIAkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlZ2lvbik7CiAJCXJldHVybjsKIAl9CiAKLQlyYWRlb25fZml4dXBfb2Zmc2V0KHJpbmZvKTsKLQogCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKIAl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CiAKQEAgLTkxLDYgKzkwLDEwIEBACiAJaWYobW9kZGVkLmR4ICsgbW9kZGVkLndpZHRoICA+IHZ4cmVzKSBtb2RkZWQud2lkdGggID0gdnhyZXMgLSBtb2RkZWQuZHg7CiAJaWYobW9kZGVkLmR5ICsgbW9kZGVkLmhlaWdodCA+IHZ5cmVzKSBtb2RkZWQuaGVpZ2h0ID0gdnlyZXMgLSBtb2RkZWQuZHk7CiAKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SICkKKwkJbW9kZGVkLmNvbG9yID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnaW9uLT5jb2xvcl07CisKIAlyYWRlb25mYl9wcmltX2ZpbGxyZWN0KHJpbmZvLCAmbW9kZGVkKTsKIH0KIApAQCAtMTA5LDIyICsxMTIsMjIgQEAKIAlpZiAoIHhkaXIgPCAwICkgeyBzeCArPSB3LTE7IGR4ICs9IHctMTsgfQogCWlmICggeWRpciA8IDAgKSB7IHN5ICs9IGgtMTsgZHkgKz0gaC0xOyB9CiAKLQlyYWRlb25fZmlmb193YWl0KDMpOwotCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsCi0JCXJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgLyogaS5lLiBHTUNfRFNUXzMyQlBQICovCi0JCXwgR01DX0JSVVNIX05PTkUKLQkJfCBHTUNfU1JDX0RTVENPTE9SCi0JCXwgUk9QM19TIAotCQl8IERQX1NSQ19TT1VSQ0VfTUVNT1JZICk7Ci0JT1VUUkVHKERQX1dSSVRFX01TSywgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX0NOVEwsICh4ZGlyPj0wID8gRFNUX1hfTEVGVF9UT19SSUdIVCA6IDApCi0JCQl8ICh5ZGlyPj0wID8gRFNUX1lfVE9QX1RPX0JPVFRPTSA6IDApKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfR1VJX01BU1RFUl9DTlRMLCAmcmluZm8tPmRwX2d1aV9tY19jYWNoZSwKKwkJCSAgcmluZm8tPmRwX2d1aV9tY19iYXNlIHwKKwkJCSAgR01DX0JSVVNIX05PTkUgfAorCQkJICBHTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKKwkJCSAgUk9QM19TIHwKKwkJCSAgRFBfU1JDX1NPVVJDRV9NRU1PUlkpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9DTlRMLCAmcmluZm8tPmRwX2NudGxfY2FjaGUsCisJCQkgICh4ZGlyPj0wID8gRFNUX1hfTEVGVF9UT19SSUdIVCA6IDApIHwKKwkJCSAgKHlkaXI+PTAgPyBEU1RfWV9UT1BfVE9fQk9UVE9NIDogMCkpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsKKyNpZiBGTFVTSF9DQUNIRV9XT1JLQVJPVU5ECisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CiAJT1VUUkVHKERTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMKTsKIAlPVVRSRUcoV0FJVF9VTlRJTCwgKFdBSVRfMkRfSURMRUNMRUFOIHwgV0FJVF9ETUFfR1VJX0lETEUpKTsKLQotCXJhZGVvbl9maWZvX3dhaXQoMyk7CisjZW5kaWYKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAzKTsKIAlPVVRSRUcoU1JDX1lfWCwgKHN5IDw8IDE2KSB8IHN4KTsKIAlPVVRSRUcoRFNUX1lfWCwgKGR5IDw8IDE2KSB8IGR4KTsKIAlPVVRSRUcoRFNUX0hFSUdIVF9XSURUSCwgKGggPDwgMTYpIHwgdyk7CkBAIC0xNDMsMTUgKzE0NiwxNCBAQAogCW1vZGRlZC53aWR0aCAgPSBhcmVhLT53aWR0aDsKIAltb2RkZWQuaGVpZ2h0ID0gYXJlYS0+aGVpZ2h0OwogICAKLQlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJV0FSTl9PTihyaW5mby0+Z2Z4X21vZGUpOworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fCByaW5mby0+Z2Z4X21vZGUpCiAJCXJldHVybjsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgewogCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CiAJCXJldHVybjsKIAl9CiAKLQlyYWRlb25fZml4dXBfb2Zmc2V0KHJpbmZvKTsKLQogCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKIAl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CiAKQEAgLTE2OCwxMyArMTcwLDExMiBAQAogCXJhZGVvbmZiX3ByaW1fY29weWFyZWEocmluZm8sICZtb2RkZWQpOwogfQogCitzdGF0aWMgdm9pZCByYWRlb25mYl9wcmltX2ltYWdlYmxpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsCisJCQkJICAgIHUzMiBmZywgdTMyIGJnKQoreworCXVuc2lnbmVkIGludCBzcmNfYnl0ZXMsIGR3b3JkczsKKwl1MzIgKmJpdHM7CisKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfR1VJX01BU1RFUl9DTlRMLCAmcmluZm8tPmRwX2d1aV9tY19jYWNoZSwKKwkJCSAgcmluZm8tPmRwX2d1aV9tY19iYXNlIHwKKwkJCSAgR01DX0JSVVNIX05PTkUgfAorCQkJICBHTUNfU1JDX0RBVEFUWVBFX01PTk9fRkdfQkcgfAorCQkJICBST1AzX1MgfAorCQkJICBHTUNfQllURV9PUkRFUl9NU0JfVE9fTFNCIHwKKwkJCSAgRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9DTlRMLCAmcmluZm8tPmRwX2NudGxfY2FjaGUsCisJCQkgIERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfU1JDX0ZSR0RfQ0xSLCAmcmluZm8tPmRwX3NyY19mZ19jYWNoZSwgZmcpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9TUkNfQktHRF9DTFIsICZyaW5mby0+ZHBfc3JjX2JnX2NhY2hlLCBiZyk7CisKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlPVVRSRUcoRFNUX1lfWCwgKGltYWdlLT5keSA8PCAxNikgfCBpbWFnZS0+ZHgpOworCisJLyogRW5zdXJlIHRoZSBkc3QgY2FjaGUgaXMgZmx1c2hlZCBhbmQgdGhlIGVuZ2luZSBpZGxlIGJlZm9yZQorCSAqIGlzc3VpbmcgdGhlIG9wZXJhdGlvbi4KKwkgKgorCSAqIFRoaXMgd29ya3MgYXJvdW5kIGVuZ2luZSBsb2NrdXBzIG9uIHNvbWUgY2FyZHMKKwkgKi8KKyNpZiBGTFVTSF9DQUNIRV9XT1JLQVJPVU5ECisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CisJT1VUUkVHKERTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMKTsKKwlPVVRSRUcoV0FJVF9VTlRJTCwgKFdBSVRfMkRfSURMRUNMRUFOIHwgV0FJVF9ETUFfR1VJX0lETEUpKTsKKyNlbmRpZgorCisJLyogWCBoZXJlIHBhZHMgd2lkdGggdG8gYSBtdWx0aXBsZSBvZiAzMiBhbmQgdXNlcyB0aGUgY2xpcHBlciB0bworCSAqIGFkanVzdCB0aGUgcmVzdWx0LiBJcyB0aGF0IHJlYWxseSBuZWNlc3NhcnkgPyBUaGluZ3Mgc2VlbSB0bworCSAqIHdvcmsgb2sgZm9yIG1lIHdpdGhvdXQgdGhhdCBhbmQgdGhlIGRvY28gZG9lc24ndCBzZWVtIHRvIGltcGx5CisJICogdGhlcmUgaXMgc3VjaCBhIHJlc3RyaWN0aW9uLgorCSAqLworCU9VVFJFRyhEU1RfV0lEVEhfSEVJR0hULCAoaW1hZ2UtPndpZHRoIDw8IDE2KSB8IGltYWdlLT5oZWlnaHQpOworCisJc3JjX2J5dGVzID0gKCgoaW1hZ2UtPndpZHRoICogaW1hZ2UtPmRlcHRoKSArIDcpIC8gOCkgKiBpbWFnZS0+aGVpZ2h0OworCWR3b3JkcyA9IChzcmNfYnl0ZXMgKyAzKSAvIDQ7CisJYml0cyA9ICh1MzIqKShpbWFnZS0+ZGF0YSk7CisKKwl3aGlsZShkd29yZHMgPj0gOCkgeworCQlyYWRlb25fZmlmb193YWl0KHJpbmZvLCA4KTsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJCV9fcmF3X3dyaXRlcSgqKCh1NjQgKikoYml0cykpLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMCk7CisJCV9fcmF3X3dyaXRlcSgqKCh1NjQgKikoYml0cysyKSksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEyKTsKKwkJX19yYXdfd3JpdGVxKCooKHU2NCAqKShiaXRzKzQpKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTQpOworCQlfX3Jhd193cml0ZXEoKigodTY0ICopKGJpdHMrNikpLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBNik7CisJCWJpdHMgKz0gODsKKyNlbHNlCisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEwKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTEpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMik7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEzKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTQpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBNSk7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEE2KTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTcpOworI2VuZGlmCisJCWR3b3JkcyAtPSA4OworCX0KKwl3aGlsZShkd29yZHMtLSkgeworCQlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTApOworCX0KK30KKwogdm9pZCByYWRlb25mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7CiAJc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gaW5mby0+cGFyOworCXUzMiBmZywgYmc7CiAKLQlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJV0FSTl9PTihyaW5mby0+Z2Z4X21vZGUpOworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fCByaW5mby0+Z2Z4X21vZGUpCiAJCXJldHVybjsKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKworCWlmICghaW1hZ2UtPndpZHRoIHx8ICFpbWFnZS0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwkvKiBXZSBvbmx5IGRvIDEgYnBwIGNvbG9yIGV4cGFuc2lvbiBmb3Igbm93ICovCisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQgfHwgaW1hZ2UtPmRlcHRoICE9IDEpCisJCWdvdG8gZmFsbGJhY2s7CisKKwkvKiBGYWxsYmFjayBpZiBydW5uaW5nIG91dCBvZiB0aGUgc2NyZWVuLiBXZSBtYXkgZG8gY2xpcHBpbmcKKwkgKiBpbiB0aGUgZnV0dXJlICovCisJaWYgKChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGgpID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCB8fAorCSAgICAoaW1hZ2UtPmR5ICsgaW1hZ2UtPmhlaWdodCkgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsKQorCQlnb3RvIGZhbGxiYWNrOworCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgeworCQlmZyA9ICgodTMyKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQliZyA9ICgodTMyKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCX0gZWxzZSB7CisJCWZnID0gaW1hZ2UtPmZnX2NvbG9yOworCQliZyA9IGltYWdlLT5iZ19jb2xvcjsKKwl9CisKKwlyYWRlb25mYl9wcmltX2ltYWdlYmxpdChyaW5mbywgaW1hZ2UsIGZnLCBiZyk7CisJcmV0dXJuOworCisgZmFsbGJhY2s6CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogfQpAQCAtMTg1LDcgKzI4Niw4IEBACiAKIAlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCiAJCXJldHVybiAwOwotCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjExLDkgKzMxMyw3IEBACiAJaG9zdF9wYXRoX2NudGwgPSBJTlJFRyhIT1NUX1BBVEhfQ05UTCk7CiAJcmJibV9zb2Z0X3Jlc2V0ID0gSU5SRUcoUkJCTV9TT0ZUX1JFU0VUKTsKIAotCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IzMDAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwIHx8Ci0JICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlYzNTApIHsKKwlpZiAoSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgewogCQl1MzIgdG1wOwogCiAJCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIChyYmJtX3NvZnRfcmVzZXQgfApAQCAtMjQ5LDkgKzM0OSw3IEBACiAJSU5SRUcoSE9TVF9QQVRIX0NOVEwpOwogCU9VVFJFRyhIT1NUX1BBVEhfQ05UTCwgaG9zdF9wYXRoX2NudGwpOwogCi0JaWYgKHJpbmZvLT5mYW1pbHkgIT0gQ0hJUF9GQU1JTFlfUjMwMCAmJgotCSAgICByaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzNTAgJiYKLQkgICAgcmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SVjM1MCkKKwlpZiAoIUlTX1IzMDBfVkFSSUFOVChyaW5mbykpCiAJCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIHJiYm1fc29mdF9yZXNldCk7CiAKIAlPVVRSRUcoQ0xPQ0tfQ05UTF9JTkRFWCwgY2xvY2tfY250bF9pbmRleCk7CkBAIC0yNjUsMTUgKzM2MywyNCBAQAogCS8qIGRpc2FibGUgM0QgZW5naW5lICovCiAJT1VUUkVHKFJCM0RfQ05UTCwgMCk7CiAKKwlyaW5mby0+Zmlmb19mcmVlID0gMDsKIAlyYWRlb25mYl9lbmdpbmVfcmVzZXQocmluZm8pOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JaWYgKChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzMDApICYmCi0JICAgIChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzNTApICYmCi0JICAgIChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1JWMzUwKSkKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlpZiAoSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgeworCQlPVVRSRUcoUkIyRF9EU1RDQUNIRV9NT0RFLCBJTlJFRyhSQjJEX0RTVENBQ0hFX01PREUpIHwKKwkJICAgICAgIFJCMkRfRENfQVVUT0ZMVVNIX0VOQUJMRSB8CisJCSAgICAgICBSQjJEX0RDX0RDX0RJU0FCTEVfSUdOT1JFX1BFKTsKKwl9IGVsc2UgeworCQkvKiBUaGlzIG5lZWRzIHRvIGJlIGRvdWJsZSBjaGVja2VkIHdpdGggQVRJLiBMYXRlc3QgWCBkcml2ZXIKKwkJICogY29tcGxldGVseSAiZm9yZ2V0cyIgdG8gc2V0IHRoaXMgcmVnaXN0ZXIgb24gPCByM3h4LCBhbmQKKwkJICogd2UgdXNlZCB0byBqdXN0IHdyaXRlIDAgdGhlcmUuLi4gSSdsbCBrZWVwIHRoZSAwIGFuZCB1cGRhdGUKKwkJICogdGhhdCB3aGVuIHdlIGhhdmUgc29ydGVkIHRoaW5ncyBvdXQgb24gWCBzaWRlLgorCQkgKi8KIAkJT1VUUkVHKFJCMkRfRFNUQ0FDSEVfTU9ERSwgMCk7CisJfQogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMyk7CisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMyk7CiAJLyogV2UgcmUtcmVhZCBNQ19GQl9MT0NBVElPTiBmcm9tIGNhcmQgYXMgaXQgY2FuIGhhdmUgYmVlbgogCSAqIG1vZGlmaWVkIGJ5IFhGcmVlIGRyaXZlcnMgKG91Y2ggISkKIAkgKi8KQEAgLTI4NCw0MSArMzkxLDU3IEBACiAJT1VUUkVHKERTVF9QSVRDSF9PRkZTRVQsIChyaW5mby0+cGl0Y2ggPDwgMHgxNikgfCAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKIAlPVVRSRUcoU1JDX1BJVENIX09GRlNFVCwgKHJpbmZvLT5waXRjaCA8PCAweDE2KSB8IChyaW5mby0+ZmJfbG9jYWxfYmFzZSA+PiAxMCkpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCiAJT1VUUkVHUChEUF9EQVRBVFlQRSwgSE9TVF9CSUdfRU5ESUFOX0VOLCB+SE9TVF9CSUdfRU5ESUFOX0VOKTsKICNlbHNlCiAJT1VUUkVHUChEUF9EQVRBVFlQRSwgMCwgfkhPU1RfQklHX0VORElBTl9FTik7CiAjZW5kaWYKLQlyYWRlb25fZmlmb193YWl0ICgyKTsKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoREVGQVVMVF9TQ19UT1BfTEVGVCwgMCk7CiAJT1VUUkVHKERFRkFVTFRfU0NfQk9UVE9NX1JJR0hULCAoREVGQVVMVF9TQ19SSUdIVF9NQVggfAogCQkJCQkgREVGQVVMVF9TQ19CT1RUT01fTUFYKSk7CiAKKwkvKiBzZXQgZGVmYXVsdCBEUF9HVUlfTUFTVEVSX0NOVEwgKi8KIAl0ZW1wID0gcmFkZW9uX2dldF9kc3RicHAocmluZm8tPmRlcHRoKTsKLQlyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsID0gKCh0ZW1wIDw8IDgpIHwgR01DX0NMUl9DTVBfQ05UTF9ESVMpOworCXJpbmZvLT5kcF9ndWlfbWNfYmFzZSA9ICgodGVtcCA8PCA4KSB8IEdNQ19DTFJfQ01QX0NOVExfRElTKTsKIAotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsIChyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsIHwKLQkJCQkgICAgR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJCQkgICAgR01DX1NSQ19EQVRBVFlQRV9DT0xPUikpOworCXJpbmZvLT5kcF9ndWlfbWNfY2FjaGUgPSByaW5mby0+ZHBfZ3VpX21jX2Jhc2UgfAorCQlHTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQlHTUNfU1JDX0RBVEFUWVBFX0NPTE9SOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsIHJpbmZvLT5kcF9ndWlfbWNfY2FjaGUpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoNyk7CiAKIAkvKiBjbGVhciBsaW5lIGRyYXdpbmcgcmVncyAqLworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOwogCU9VVFJFRyhEU1RfTElORV9TVEFSVCwgMCk7CiAJT1VUUkVHKERTVF9MSU5FX0VORCwgMCk7CiAKLQkvKiBzZXQgYnJ1c2ggY29sb3IgcmVncyAqLwotCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX0JSVVNIX0JLR0RfQ0xSLCAweDAwMDAwMDAwKTsKKwkvKiBzZXQgYnJ1c2ggYW5kIHNvdXJjZSBjb2xvciByZWdzICovCisJcmluZm8tPmRwX2JydXNoX2ZnX2NhY2hlID0gMHhmZmZmZmZmZjsKKwlyaW5mby0+ZHBfYnJ1c2hfYmdfY2FjaGUgPSAweDAwMDAwMDAwOworCXJpbmZvLT5kcF9zcmNfZmdfY2FjaGUgPSAweGZmZmZmZmZmOworCXJpbmZvLT5kcF9zcmNfYmdfY2FjaGUgPSAweDAwMDAwMDAwOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDQpOworCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgcmluZm8tPmRwX2JydXNoX2ZnX2NhY2hlKTsKKwlPVVRSRUcoRFBfQlJVU0hfQktHRF9DTFIsIHJpbmZvLT5kcF9icnVzaF9iZ19jYWNoZSk7CisJT1VUUkVHKERQX1NSQ19GUkdEX0NMUiwgcmluZm8tPmRwX3NyY19mZ19jYWNoZSk7CisJT1VUUkVHKERQX1NSQ19CS0dEX0NMUiwgcmluZm8tPmRwX3NyY19iZ19jYWNoZSk7CiAKLQkvKiBzZXQgc291cmNlIGNvbG9yIHJlZ3MgKi8KLQlPVVRSRUcoRFBfU1JDX0ZSR0RfQ0xSLCAweGZmZmZmZmZmKTsKLQlPVVRSRUcoRFBfU1JDX0JLR0RfQ0xSLCAweDAwMDAwMDAwKTsKKwkvKiBEZWZhdWx0IGRpcmVjdGlvbiAqLworCXJpbmZvLT5kcF9jbnRsX2NhY2hlID0gRFNUX1hfTEVGVF9UT19SSUdIVCB8IERTVF9ZX1RPUF9UT19CT1RUT007CisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJT1VUUkVHKERQX0NOVEwsIHJpbmZvLT5kcF9jbnRsX2NhY2hlKTsKIAogCS8qIGRlZmF1bHQgd3JpdGUgbWFzayAqLworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOwogCU9VVFJFRyhEUF9XUklURV9NU0ssIDB4ZmZmZmZmZmYpOwogCi0JcmFkZW9uX2VuZ2luZV9pZGxlICgpOworCS8qIERlZmF1bHQgdG8gbm8gc3dhcHBpbmcgb2YgaG9zdCBkYXRhICovCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJT1VUUkVHKFJCQk1fR1VJQ05UTCwgUkJCTV9HVUlDTlRMX0hPU1RfREFUQV9TV0FQX05PTkUpOworCisJLyogTWFrZSBzdXJlIGl0J3Mgc2V0dGxlZCAqLworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKaW5kZXggMWEwNTZhZC4uZjM0M2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlsZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCiAJZGVsX3RpbWVyX3N5bmMoJnJpbmZvLT5sdmRzX3RpbWVyKTsKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJbHZkc19nZW5fY250bCA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwogCWlmIChsZXZlbCA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCmluZGV4IDY1MjI3M2UuLjlhNTgyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtODUyLDcgKzg1Miw2IEBACiAgICAgICAgIGlmIChyaW5mby0+YXNsZWVwKQogICAgICAgICAJcmV0dXJuIDA7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOwogICAgICAgICBPVVRSRUcoQ1JUQ19PRkZTRVQsICgodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwgKyB2YXItPnhvZmZzZXQpCiAJCQkgICAgICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpICYgfjcpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTg4Miw3ICs4ODEsNiBAQAogCQkJaWYgKHJjKQogCQkJCXJldHVybiByYzsKIAotCQkJcmFkZW9uX2ZpZm9fd2FpdCgyKTsKIAkJCWlmICh2YWx1ZSAmIDB4MDEpIHsKIAkJCQl0bXAgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKIApAQCAtOTQwLDcgKzkzOCw3IEBACiAJaWYgKHJpbmZvLT5sb2NrX2JsYW5rKQogCQlyZXR1cm4gMDsKIAotCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAl2YWwgPSBJTlJFRyhDUlRDX0VYVF9DTlRMKTsKICAgICAgICAgdmFsICY9IH4oQ1JUQ19ESVNQTEFZX0RJUyB8IENSVENfSFNZTkNfRElTIHwKQEAgLTEwNDgsNyArMTA0Niw3IEBACiAKIAlpZiAocmluZm8tPmFzbGVlcCkKIAkJcmV0dXJuIDA7Ci0JCQorCiAJcmV0dXJuIHJhZGVvbl9zY3JlZW5fYmxhbmsocmluZm8sIGJsYW5rLCAwKTsKIH0KIApAQCAtMTA3NCw4ICsxMDcyLDYgQEAKICAgICAgICAgcGluZGV4ID0gcmVnbm87CiAKICAgICAgICAgaWYgKCFyaW5mby0+YXNsZWVwKSB7Ci0JCXJhZGVvbl9maWZvX3dhaXQoOSk7Ci0KIAkJaWYgKHJpbmZvLT5icHAgPT0gMTYpIHsKIAkJCXBpbmRleCA9IHJlZ25vICogODsKIApAQCAtMTI0NCw4ICsxMjQwLDYgQEAKIHsKIAlpbnQgaTsKIAotCXJhZGVvbl9maWZvX3dhaXQoMjApOwotCiAJLyogV29ya2Fyb3VuZCBmcm9tIFhGcmVlICovCiAJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkgewogCSAgICAgICAgLyogQSB0ZW1wb3JhbCB3b3JrYXJvdW5kIGZvciB0aGUgb2NjYXRpb25hbCBibGFua2luZyBvbiBjZXJ0YWluIGxhcHRvcApAQCAtMTI4NiwxMSArMTI4MCwxMCBAQAogCXJhZGVvbl9wbGxfZXJyYXRhX2FmdGVyX2RhdGEocmluZm8pOwogCiAJLyogU2V0IFBQTEwgcmVmLiBkaXYgKi8KLQlpZiAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzAwIHx8CisJaWYgKElTX1IzMDBfVkFSSUFOVChyaW5mbykgfHwKIAkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzMwMCB8fAotCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IzNTAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SVjM1MCB8fAotCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzgwICkgeworCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDAwIHx8CisJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlM0ODApIHsKIAkJaWYgKG1vZGUtPnBwbGxfcmVmX2RpdiAmIFIzMDBfUFBMTF9SRUZfRElWX0FDQ19NQVNLKSB7CiAJCQkvKiBXaGVuIHJlc3RvcmluZyBjb25zb2xlIG1vZGUsIHVzZSBzYXZlZCBQUExMX1JFRl9ESVYKIAkJCSAqIHNldHRpbmcuCkBAIC0xMzQyLDcgKzEzMzUsNyBAQAogewogCXN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqKWRhdGE7CiAKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJT1VUUkVHKExWRFNfR0VOX0NOVEwsIHJpbmZvLT5wZW5kaW5nX2x2ZHNfZ2VuX2NudGwpOwogfQpAQCAtMTM2MCwxMCArMTM1MywxMSBAQAogCWlmIChub21vZGVzZXQpCiAJCXJldHVybjsKIAorCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CisKIAlpZiAoIXJlZ3Nfb25seSkKIAkJcmFkZW9uX3NjcmVlbl9ibGFuayhyaW5mbywgRkJfQkxBTktfTk9STUFMLCAwKTsKIAotCXJhZGVvbl9maWZvX3dhaXQoMzEpOwogCWZvciAoaT0wOyBpPDEwOyBpKyspCiAJCU9VVFJFRyhjb21tb25fcmVnc1tpXS5yZWcsIGNvbW1vbl9yZWdzW2ldLnZhbCk7CiAKQEAgLTEzOTEsNyArMTM4NSw2IEBACiAJcmFkZW9uX3dyaXRlX3BsbF9yZWdzKHJpbmZvLCBtb2RlKTsKIAogCWlmICgocHJpbWFyeV9tb24gPT0gTVRfREZQKSB8fCAocHJpbWFyeV9tb24gPT0gTVRfTENEKSkgewotCQlyYWRlb25fZmlmb193YWl0KDEwKTsKIAkJT1VUUkVHKEZQX0NSVENfSF9UT1RBTF9ESVNQLCBtb2RlLT5mcF9jcnRjX2hfdG90YWxfZGlzcCk7CiAJCU9VVFJFRyhGUF9DUlRDX1ZfVE9UQUxfRElTUCwgbW9kZS0+ZnBfY3J0Y192X3RvdGFsX2Rpc3ApOwogCQlPVVRSRUcoRlBfSF9TWU5DX1NUUlRfV0lELCBtb2RlLT5mcF9oX3N5bmNfc3RydF93aWQpOwpAQCAtMTQwNiw3ICsxMzk5LDYgQEAKIAlpZiAoIXJlZ3Nfb25seSkKIAkJcmFkZW9uX3NjcmVlbl9ibGFuayhyaW5mbywgRkJfQkxBTktfVU5CTEFOSywgMCk7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOwogCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCBtb2RlLT52Y2xrX2VjcF9jbnRsKTsKIAkKIAlyZXR1cm47CkBAIC0xNDYxLDEwICsxNDUzLDcgQEAKIAkJLyogTm90IGFsbCBjaGlwIHJldnMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgZm9yIHRoaXMgcmVnaXN0ZXIsCiAJCSAqIGV4dHJhY3QgdGhlIHNvdXJjZSBzZWxlY3Rpb24KIAkJICovCi0JCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IyMDAgfHwKLQkJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjMwMCB8fAotCQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwIHx8Ci0JCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7CisJCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IyMDAgfHwgSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgewogCQkJc291cmNlID0gKGZwMl9nZW5fY250bCA+PiAxMCkgJiAweDM7CiAJCQkvKiBzb3VyY2VkIGZyb20gdHJhbnNmb3JtIHVuaXQsIGNoZWNrIGZvciB0cmFuc2Zvcm0gdW5pdAogCQkJICogb3duIHNvdXJjZQpAQCAtMTU2MCw3ICsxNTQ5LDcgQEAKIAkvKiBXZSBhbHdheXMgd2FudCBlbmdpbmUgdG8gYmUgaWRsZSBvbiBhIG1vZGUgc3dpdGNoLCBldmVuCiAJICogaWYgd2Ugd29uJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2RlCiAJICovCi0JcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCWhTeW5jU3RhcnQgPSBtb2RlLT54cmVzICsgbW9kZS0+cmlnaHRfbWFyZ2luOwogCWhTeW5jRW5kID0gaFN5bmNTdGFydCArIG1vZGUtPmhzeW5jX2xlbjsKQEAgLTE4NTUsNyArMTg0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgcmFkZW9uZmJfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmZiX2NoZWNrX3ZhcgkJPSByYWRlb25mYl9jaGVja192YXIsCkBAIC0xODc5LDYgKzE4NjcsNyBAQAogCWluZm8tPnBhciA9IHJpbmZvOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gcmluZm8tPnBzZXVkb19wYWxldHRlOwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQKKwkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX1hQQU4KQEAgLTIwMDUsMTEgKzE5OTQsMTEgQEAKICAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTMjAwKSB8fAogICAgICAgICAgICAgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlMzMDApIHx8CiAgICAgICAgICAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SQzQxMCkgfHwKKyAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDAwKSB8fAogCSAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzQ4MCkgKSB7CiAgICAgICAgICAgdTMyIHRvbSA9IElOUkVHKE5CX1RPTSk7CiAgICAgICAgICAgdG1wID0gKCgoKHRvbSA+PiAxNikgLSAodG9tICYgMHhmZmZmKSArIDEpIDw8IDYpICogMTAyNCk7CiAKLSAJCXJhZGVvbl9maWZvX3dhaXQoNik7CiAgICAgICAgICAgT1VUUkVHKE1DX0ZCX0xPQ0FUSU9OLCB0b20pOwogICAgICAgICAgIE9VVFJFRyhESVNQTEFZX0JBU0VfQUREUiwgKHRvbSAmIDB4ZmZmZikgPDwgMTYpOwogICAgICAgICAgIE9VVFJFRyhDUlRDMl9ESVNQTEFZX0JBU0VfQUREUiwgKHRvbSAmIDB4ZmZmZikgPDwgMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCmluZGV4IDhjOGZhMzUuLjJjNTU2NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKQEAgLTEzOSwxMiArMTM5LDggQEAKIGludCByYWRlb25fcHJvYmVfaTJjX2Nvbm5lY3RvcihzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBjb25uLAogCQkJICAgICAgIHU4ICoqb3V0X2VkaWQpCiB7Ci0JdTMyIHJlZyA9IHJpbmZvLT5pMmNbY29ubi0xXS5kZGNfcmVnOwogCXU4ICplZGlkOwogCi0JT1VUUkVHKHJlZywgSU5SRUcocmVnKSAmCi0JCQl+KFZHQV9ERENfREFUQV9PVVRQVVQgfCBWR0FfRERDX0NMS19PVVRQVVQpKTsKLQogCWVkaWQgPSBmYl9kZGNfcmVhZCgmcmluZm8tPmkyY1tjb25uLTFdLmFkYXB0ZXIpOwogCiAJaWYgKG91dF9lZGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCA2NzVhYmRhLi4zZGY1MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMjY1Myw5ICsyNjUzLDkgQEAKIAogCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpKSB7CiAJCS8qIE1ha2Ugc3VyZSBlbmdpbmUgaXMgcmVzZXQgKi8KLQkJcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAJCXJhZGVvbmZiX2VuZ2luZV9yZXNldChyaW5mbyk7Ci0JCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCQlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCX0KIAogCS8qIEJsYW5rIGRpc3BsYXkgYW5kIExDRCAqLwpAQCAtMjc2Nyw3ICsyNzY3LDcgQEAKIAogCQlyaW5mby0+YXNsZWVwID0gMDsKIAl9IGVsc2UKLQkJcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAkvKiBSZXN0b3JlIGRpc3BsYXkgJiBlbmdpbmUgKi8KIAlyYWRlb25fd3JpdGVfbW9kZSAocmluZm8sICZyaW5mby0+c3RhdGUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKaW5kZXggY2NiZmZmZC4uZWEwYjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCkBAIC01Myw2ICs1Myw3IEBACiAJQ0hJUF9GQU1JTFlfUlYzODAsICAgIC8qIFJWMzcwL1JWMzgwL00yMi9NMjQgKi8KIAlDSElQX0ZBTUlMWV9SNDIwLCAgICAgLyogUjQyMC9SNDIzL00xOCAqLwogCUNISVBfRkFNSUxZX1JDNDEwLAorCUNISVBfRkFNSUxZX1JTNDAwLAogCUNISVBfRkFNSUxZX1JTNDgwLAogCUNISVBfRkFNSUxZX0xBU1QsCiB9OwpAQCAtMzM1LDcgKzMzNiwxNSBAQAogCWludAkJCW1vbjJfdHlwZTsKIAl1OAkJICAgICAgICAqbW9uMl9FRElEOwogCi0JdTMyCQkJZHBfZ3VpX21hc3Rlcl9jbnRsOworCS8qIGFjY2VsIGJpdHMgKi8KKwl1MzIJCQlkcF9ndWlfbWNfYmFzZTsKKwl1MzIJCQlkcF9ndWlfbWNfY2FjaGU7CisJdTMyCQkJZHBfY250bF9jYWNoZTsKKwl1MzIJCQlkcF9icnVzaF9mZ19jYWNoZTsKKwl1MzIJCQlkcF9icnVzaF9iZ19jYWNoZTsKKwl1MzIJCQlkcF9zcmNfZmdfY2FjaGU7CisJdTMyCQkJZHBfc3JjX2JnX2NhY2hlOworCXUzMgkJCWZpZm9fZnJlZTsKIAogCXN0cnVjdCBwbGxfaW5mbwkJcGxsOwogCkBAIC0zNDcsNiArMzU2LDcgQEAKIAlpbnQJCQlsb2NrX2JsYW5rOwogCWludAkJCWR5bmNsazsKIAlpbnQJCQlub19zY2hlZHVsZTsKKwlpbnQgCQkJZ2Z4X21vZGU7CiAJZW51bSByYWRlb25fcG1fbW9kZQlwbV9tb2RlOwogCXJlaW5pdF9mdW5jdGlvbl9wdHIgICAgIHJlaW5pdF9mdW5jOwogCkBAIC0zOTEsOCArNDAxLDE0IEBACiAjZGVmaW5lIE9VVFJFRzgoYWRkcix2YWwpCXdyaXRlYih2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogI2RlZmluZSBJTlJFRzE2KGFkZHIpCQlyZWFkdygocmluZm8tPm1taW9fYmFzZSkrYWRkcikKICNkZWZpbmUgT1VUUkVHMTYoYWRkcix2YWwpCXdyaXRldyh2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQorCisjaWZkZWYgQ09ORklHX1BQQworI2RlZmluZSBJTlJFRyhhZGRyKQkgICAgIAkoeyBlaWVpbygpOyBsZF9sZTMyKHJpbmZvLT5tbWlvX2Jhc2UrKGFkZHIpKTsgfSkKKyNkZWZpbmUgT1VUUkVHKGFkZHIsdmFsKQlkbyB7IGVpZWlvKCk7IHN0X2xlMzIocmluZm8tPm1taW9fYmFzZSsoYWRkciksKHZhbCkpOyB9IHdoaWxlKDApCisjZWxzZQogI2RlZmluZSBJTlJFRyhhZGRyKQkJcmVhZGwoKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCiAjZGVmaW5lIE9VVFJFRyhhZGRyLHZhbCkJd3JpdGVsKHZhbCwgKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIF9PVVRSRUdQKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgdTMyIGFkZHIsCiAJCSAgICAgICB1MzIgdmFsLCB1MzIgbWFzaykKQEAgLTUzMywxNiArNTQ5LDI1IEBACiAvKgogICogMkQgRW5naW5lIGhlbHBlciByb3V0aW5lcwogICovCisKK2V4dGVybiB2b2lkIHJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9lbmdpbmVfZmx1c2ggKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKIAlpbnQgaTsKIAotCS8qIGluaXRpYXRlIGZsdXNoICovCi0JT1VUUkVHUChSQjJEX0RTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMLAorCS8qIEluaXRpYXRlIGZsdXNoICovCisJT1VUUkVHUChEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCwKIAkgICAgICAgIH5SQjJEX0RDX0ZMVVNIX0FMTCk7CiAKKwkvKiBFbnN1cmUgRklGTyBpcyBlbXB0eSwgaWUsIG1ha2Ugc3VyZSB0aGUgZmx1c2ggY29tbWFuZHMKKwkgKiBoYXMgcmVhY2hlZCB0aGUgY2FjaGUKKwkgKi8KKwlyYWRlb25fZmlmb191cGRhdGVfYW5kX3dhaXQocmluZm8sIDY0KTsKKworCS8qIFdhaXQgZm9yIHRoZSBmbHVzaCB0byBjb21wbGV0ZSAqLwogCWZvciAoaT0wOyBpIDwgMjAwMDAwMDsgaSsrKSB7Ci0JCWlmICghKElOUkVHKFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVCkgJiBSQjJEX0RDX0JVU1kpKQorCQlpZiAoIShJTlJFRyhEU1RDQUNIRV9DVExTVEFUKSAmIFJCMkRfRENfQlVTWSkpCiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NTAsMjUgKzU3NSwxMiBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfcmFkZW9uX2ZpZm9fd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKQotewotCWludCBpOwotCi0JZm9yIChpPTA7IGk8MjAwMDAwMDsgaSsrKSB7Ci0JCWlmICgoSU5SRUcoUkJCTV9TVEFUVVMpICYgMHg3ZikgPj0gZW50cmllcykKLQkJCXJldHVybjsKLQkJdWRlbGF5KDEpOwotCX0KLQlwcmludGsoS0VSTl9FUlIgInJhZGVvbmZiOiBGSUZPIFRpbWVvdXQgIVxuIik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIF9yYWRlb25fZW5naW5lX2lkbGUoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQorc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9lbmdpbmVfaWRsZShzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCiB7CiAJaW50IGk7CiAKIAkvKiBlbnN1cmUgRklGTyBpcyBlbXB0eSBiZWZvcmUgd2FpdGluZyBmb3IgaWRsZSAqLwotCV9yYWRlb25fZmlmb193YWl0IChyaW5mbywgNjQpOworCXJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdCAocmluZm8sIDY0KTsKIAogCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgewogCQlpZiAoKChJTlJFRyhSQkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkgPT0gMCkgewpAQCAtNTgxLDggKzU5Myw2IEBACiB9CiAKIAotI2RlZmluZSByYWRlb25fZW5naW5lX2lkbGUoKQkJX3JhZGVvbl9lbmdpbmVfaWRsZShyaW5mbykKLSNkZWZpbmUgcmFkZW9uX2ZpZm9fd2FpdChlbnRyaWVzKQlfcmFkZW9uX2ZpZm9fd2FpdChyaW5mbyxlbnRyaWVzKQogI2RlZmluZSByYWRlb25fbXNsZWVwKG1zKQkJX3JhZGVvbl9tc2xlZXAocmluZm8sbXMpCiAKIApAQCAtNjEyLDYgKzYyMiw3IEBACiBleHRlcm4gaW50IHJhZGVvbmZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQgcmFkZW9uZmJfZW5naW5lX2luaXQgKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7CiBleHRlcm4gdm9pZCByYWRlb25mYl9lbmdpbmVfcmVzZXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9maXh1cF9tZW1fb2Zmc2V0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7CiAKIC8qIE90aGVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCByYWRlb25fc2NyZWVuX2JsYW5rKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGJsYW5rLCBpbnQgbW9kZV9zd2l0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggNmZhMGI5ZC4uZDRjZmVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAKICNpbmNsdWRlIDxjcHUvZGFjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAKICNkZWZpbmUgSFA2ODBfTUFYX0lOVEVOU0lUWSAyNTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jCmluZGV4IGUxNWJiNDQuLmM5YjE5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYwpAQCAtNTM1LDcgKzUzNSw3IEBACiAJLmZiX3NldGNvbHJlZwk9IGNhcm1pbmVfc2V0Y29scmVnLAogfTsKIAotc3RhdGljIGludCBhbGxvY19jYXJtaW5lX2ZiKHZvaWQgX19pb21lbSAqcmVncywgdm9pZCBfX2lvbWVtICpzbWVtX2Jhc2UsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhbGxvY19jYXJtaW5lX2ZiKHZvaWQgX19pb21lbSAqcmVncywgdm9pZCBfX2lvbWVtICpzbWVtX2Jhc2UsCiAJCWludCBzbWVtX29mZnNldCwgc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmJfaW5mbyAqKnJpbmZvKQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKaW5kZXggZTcyOWZiMi4uMDQ4YjEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwpAQCAtMzI3LDI5ICszMjcsNyBAQAogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCiBzdHJ1Y3QgY2lycnVzZmJfcmVncyB7Ci0JbG9uZyBmcmVxOwotCWxvbmcgbm9tOwotCWxvbmcgZGVuOwotCWxvbmcgZGl2OwotCWxvbmcgbXVsdGlwbGV4aW5nOwotCWxvbmcgbWNsazsKLQlsb25nIGRpdk1DTEs7Ci0KLQlsb25nIEhvcml6UmVzOwkJLyogVGhlIHggcmVzb2x1dGlvbiBpbiBwaXhlbCAqLwotCWxvbmcgSG9yaXpUb3RhbDsKLQlsb25nIEhvcml6RGlzcEVuZDsKLQlsb25nIEhvcml6QmxhbmtTdGFydDsKLQlsb25nIEhvcml6QmxhbmtFbmQ7Ci0JbG9uZyBIb3JpelN5bmNTdGFydDsKLQlsb25nIEhvcml6U3luY0VuZDsKLQotCWxvbmcgVmVydFJlczsJCS8qIHRoZSBwaHlzaWNhbCB5IHJlc29sdXRpb24gaW4gc2NhbmxpbmVzICovCi0JbG9uZyBWZXJ0VG90YWw7Ci0JbG9uZyBWZXJ0RGlzcEVuZDsKLQlsb25nIFZlcnRTeW5jU3RhcnQ7Ci0JbG9uZyBWZXJ0U3luY0VuZDsKLQlsb25nIFZlcnRCbGFua1N0YXJ0OwotCWxvbmcgVmVydEJsYW5rRW5kOworCWludCBtdWx0aXBsZXhpbmc7CiB9OwogCiAjaWZkZWYgQ0lSUlVTRkJfREVCVUcKQEAgLTM2NywxMTAgKzM0NSwxMyBAQAogCiAJc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgY3VycmVudG1vZGU7CiAJaW50IGJsYW5rX21vZGU7CisJdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKIAotCXUzMglwc2V1ZG9fcGFsZXR0ZVsxNl07Ci0KLSNpZmRlZiBDT05GSUdfWk9SUk8KLQlzdHJ1Y3Qgem9ycm9fZGV2ICp6ZGV2OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSQotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotI2VuZGlmCiAJdm9pZCAoKnVubWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2lycnVzZmJfZGVmX21vZGUgPSAxOwotc3RhdGljIGludCBub2FjY2VsOwotCi0vKgotICogICAgUHJlZGVmaW5lZCBWaWRlbyBNb2RlcwotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKLX0gY2lycnVzZmJfcHJlZGVmaW5lZFtdID0gewotCXsKLQkJLyogYXV0b2RldGVjdCBtb2RlICovCi0JCS5uYW1lCT0gIkF1dG9kZXRlY3QiLAotCX0sIHsKLQkJLyogNjQweDQ4MCwgMzEuMjUga0h6LCA2MCBIeiwgMjUgTUh6IFBpeENsb2NrICovCi0JCS5uYW1lCT0gIjY0MHg0ODAiLAotCQkudmFyCT0gewotCQkJLnhyZXMJCT0gNjQwLAotCQkJLnlyZXMJCT0gNDgwLAotCQkJLnhyZXNfdmlydHVhbAk9IDY0MCwKLQkJCS55cmVzX3ZpcnR1YWwJPSA0ODAsCi0JCQkuYml0c19wZXJfcGl4ZWwJPSA4LAotCQkJLnJlZAkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuZ3JlZW4JCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmJsdWUJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLndpZHRoCQk9IC0xLAotCQkJLmhlaWdodAkJPSAtMSwKLQkJCS5waXhjbG9jawk9IDQwMDAwLAotCQkJLmxlZnRfbWFyZ2luCT0gNDgsCi0JCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCQkudXBwZXJfbWFyZ2luCT0gMzIsCi0JCQkubG93ZXJfbWFyZ2luCT0gOCwKLQkJCS5oc3luY19sZW4JPSA5NiwKLQkJCS52c3luY19sZW4JPSA0LAotCQkJLnN5bmMJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLQkJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0JCSB9Ci0JfSwgewotCQkvKiA4MDB4NjAwLCA0OCBrSHosIDc2IEh6LCA1MCBNSHogUGl4Q2xvY2sgKi8KLQkJLm5hbWUJPSAiODAweDYwMCIsCi0JCS52YXIJPSB7Ci0JCQkueHJlcwkJPSA4MDAsCi0JCQkueXJlcwkJPSA2MDAsCi0JCQkueHJlc192aXJ0dWFsCT0gODAwLAotCQkJLnlyZXNfdmlydHVhbAk9IDYwMCwKLQkJCS5iaXRzX3Blcl9waXhlbAk9IDgsCi0JCQkucmVkCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ncmVlbgkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuYmx1ZQkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkud2lkdGgJCT0gLTEsCi0JCQkuaGVpZ2h0CQk9IC0xLAotCQkJLnBpeGNsb2NrCT0gMjAwMDAsCi0JCQkubGVmdF9tYXJnaW4JPSAxMjgsCi0JCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCQkudXBwZXJfbWFyZ2luCT0gMjQsCi0JCQkubG93ZXJfbWFyZ2luCT0gMiwKLQkJCS5oc3luY19sZW4JPSA5NiwKLQkJCS52c3luY19sZW4JPSA2LAotCQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLQkJIH0KLQl9LCB7Ci0JCS8qCi0JCSAqIE1vZGVsaW5lIGZyb20gWEY4NkNvbmZpZzoKLQkJICogTW9kZSAiMTAyNHg3NjgiIDgwICAxMDI0IDExMzYgMTM0MCAxNDMyICA3NjggNzcwIDc3NCA4MDUKLQkJICovCi0JCS8qIDEwMjR4NzY4LCA1NS44IGtIeiwgNzAgSHosIDgwIE1IeiBQaXhDbG9jayAqLwotCQkubmFtZQk9ICIxMDI0eDc2OCIsCi0JCS52YXIJPSB7Ci0JCQkueHJlcwkJPSAxMDI0LAotCQkJLnlyZXMJCT0gNzY4LAotCQkJLnhyZXNfdmlydHVhbAk9IDEwMjQsCi0JCQkueXJlc192aXJ0dWFsCT0gNzY4LAotCQkJLmJpdHNfcGVyX3BpeGVsCT0gOCwKLQkJCS5yZWQJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmdyZWVuCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ibHVlCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS53aWR0aAkJPSAtMSwKLQkJCS5oZWlnaHQJCT0gLTEsCi0JCQkucGl4Y2xvY2sJPSAxMjUwMCwKLQkJCS5sZWZ0X21hcmdpbgk9IDE0NCwKLQkJCS5yaWdodF9tYXJnaW4JPSAzMiwKLQkJCS51cHBlcl9tYXJnaW4JPSAzMCwKLQkJCS5sb3dlcl9tYXJnaW4JPSAyLAotCQkJLmhzeW5jX2xlbgk9IDE5MiwKLQkJCS52c3luY19sZW4JPSA2LAotCQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLQkJfQotCX0KLX07Ci0KLSNkZWZpbmUgTlVNX1RPVEFMX01PREVTICAgIEFSUkFZX1NJWkUoY2lycnVzZmJfcHJlZGVmaW5lZCkKK3N0YXRpYyBpbnQgbm9hY2NlbCBfX2RldmluaXRkYXRhOworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGEgPSAiNjQweDQ4MEA2MCI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKiogQkVHSU4gUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01MTQsMTAgKzM5NSw2IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNpcnJ1c2ZiX2ltYWdlYmxpdCwKIH07CiAKLS8qLS0tIEhhcmR3YXJlIFNwZWNpZmljIFJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBjaXJydXNmYl9kZWNvZGVfdmFyKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJCXN0cnVjdCBjaXJydXNmYl9yZWdzICpyZWdzLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKIC8qLS0tIEludGVybmFsIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaW5pdF92Z2FjaGlwKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHN3aXRjaF9tb25pdG9yKHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywgaW50IG9uKTsKQEAgLTU0Niw5ICs0MjMsNyBAQAogCQkJICAgICAgdV9zaG9ydCB3aWR0aCwgdV9zaG9ydCBoZWlnaHQsCiAJCQkgICAgICB1X2NoYXIgY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgpOwogCi1zdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBsb25nICpiZXN0LAotCQkgICAgICBsb25nICpub20sIGxvbmcgKmRlbiwKLQkJICAgICAgbG9uZyAqZGl2LCBsb25nIG1heGZyZXEpOworc3RhdGljIHZvaWQgYmVzdGNsb2NrKGxvbmcgZnJlcSwgaW50ICpub20sIGludCAqZGVuLCBpbnQgKmRpdik7CiAKICNpZmRlZiBDSVJSVVNGQl9ERUJVRwogc3RhdGljIHZvaWQgY2lycnVzZmJfZHVtcCh2b2lkKTsKQEAgLTU4NCw0NSArNDU5LDI4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqIEJFR0lOIEhhcmR3YXJlIHNwZWNpZmljIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBHZXQgYSBnb29kIE1DTEsgdmFsdWUgKi8KLXN0YXRpYyBsb25nIGNpcnJ1c2ZiX2dldF9tY2xrKGxvbmcgZnJlcSwgaW50IGJwcCwgbG9uZyAqZGl2KQorLyogQ2hlY2sgaWYgdGhlIE1DTEsgaXMgbm90IGEgYmV0dGVyIGNsb2NrIHNvdXJjZSAqLworc3RhdGljIGludCBjaXJydXNmYl9jaGVja19tY2xrKHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywgbG9uZyBmcmVxKQogewotCWxvbmcgbWNsazsKKwlsb25nIG1jbGsgPSB2Z2FfcnNlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGKSAmIDB4M2Y7CiAKLQlhc3NlcnQoZGl2ICE9IE5VTEwpOwotCi0JLyogQ2FsY3VsYXRlIE1DTEssIGluIGNhc2UgVkNMSyBpcyBoaWdoIGVub3VnaCB0byByZXF1aXJlID4gNTBNSHouCi0JICogQXNzdW1lIGEgNjQtYml0IGRhdGEgcGF0aCBmb3Igbm93LiAgVGhlIGZvcm11bGEgaXM6Ci0JICogKChCICogUENMSyAqIDIpL1cpICogMS4yCi0JICogQiA9IGJ5dGVzIHBlciBwaXhlbCwgUENMSyA9IHBpeGNsb2NrLCBXID0gZGF0YSB3aWR0aCBpbiBieXRlcyAqLwotCW1jbGsgPSAoKGJwcCAvIDgpICogZnJlcSAqIDIpIC8gNDsKLQltY2xrID0gKG1jbGsgKiAxMikgLyAxMDsKLQlpZiAobWNsayA8IDUwMDAwKQotCQltY2xrID0gNTAwMDA7Ci0JRFBSSU5USygiVXNlIE1DTEsgb2YgJWxkIGtIelxuIiwgbWNsayk7Ci0KLQkvKiBDYWxjdWxhdGUgdmFsdWUgZm9yIFNSMUYuICBNdWx0aXBseSBieSAyIHNvIHdlIGNhbiByb3VuZCB1cC4gKi8KLQltY2xrID0gKChtY2xrICogMTYpIC8gMTQzMTgpOwotCW1jbGsgPSAobWNsayArIDEpIC8gMjsKLQlEUFJJTlRLKCJTZXQgU1IxRls1OjBdIHRvIDB4JWx4XG4iLCBtY2xrKTsKKwkvKiBSZWFkIE1DTEsgdmFsdWUgKi8KKwltY2xrID0gKDE0MzE4ICogbWNsaykgPj4gMzsKKwlEUFJJTlRLKCJSZWFkIE1DTEsgb2YgJWxkIGtIelxuIiwgbWNsayk7CiAKIAkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHVzZSBNQ0xLIGluc3RlYWQgb2YgVkNMSywgYW5kIGlmIHNvLCB3aGF0IHdlCi0JICAgKiBzaG91bGQgZGl2aWRlIGl0IGJ5IHRvIGdldCBWQ0xLICovCi0Jc3dpdGNoIChmcmVxKSB7Ci0JY2FzZSAyNDc1MSAuLi4gMjUyNDk6Ci0JCSpkaXYgPSAyOwotCQlEUFJJTlRLKCJVc2luZyBWQ0xLID0gTUNMSy8yXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OTUwMSAuLi4gNTA0OTk6Ci0JCSpkaXYgPSAxOworCSAqIHNob3VsZCBkaXZpZGUgaXQgYnkgdG8gZ2V0IFZDTEsKKwkgKi8KKworCWlmIChhYnMoZnJlcSAtIG1jbGspIDwgMjUwKSB7CiAJCURQUklOVEsoIlVzaW5nIFZDTEsgPSBNQ0xLXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKmRpdiA9IDA7Ci0JCWJyZWFrOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGFicyhmcmVxIC0gKG1jbGsgLyAyKSkgPCAyNTApIHsKKwkJRFBSSU5USygiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7CisJCXJldHVybiAyOwogCX0KIAotCXJldHVybiBtY2xrOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKQEAgLTYzOCw3ICs0OTYsNiBAQAogCQlicmVhazsJCS8qIDggcGl4ZWwgcGVyIGJ5dGUsIG9ubHkgMS80dGggb2YgbWVtIHVzYWJsZSAqLwogCWNhc2UgODoKIAljYXNlIDE2OgotCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJYnJlYWs7CQkvKiAxIHBpeGVsID09IDEgYnl0ZSAqLwogCWRlZmF1bHQ6CkBAIC03MTMsNyArNTcwLDYgQEAKIAkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CiAJCWJyZWFrOwogCi0JY2FzZSAyNDoKIAljYXNlIDMyOgogCQlpZiAoaXNQUmVQKSB7CiAJCQl2YXItPnJlZC5vZmZzZXQgPSA4OwpAQCAtNzY3LDggKzYyMyw2IEBACiAJbG9uZyBtYXhjbG9jazsKIAlpbnQgbWF4Y2xvY2tpZHggPSB2YXItPmJpdHNfcGVyX3BpeGVsID4+IDM7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwotCWludCB4cmVzLCBoZnJvbnQsIGhzeW5jLCBoYmFjazsKLQlpbnQgeXJlcywgdmZyb250LCB2c3luYywgdmJhY2s7CiAKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE6CkBAIC03ODIsMTAgKzYzNiw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSAxNjoKLQljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsICogbWF4Y2xvY2tpZHg7Ci0JCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfRElSRUNUQ09MT1I7CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04MjcsOTAgKzY4MCwzMyBAQAogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgMTY6CiAJY2FzZSAzMjoKLQkJaWYgKHJlZ3MtPkhvcml6UmVzIDw9IDgwMCkKKwkJaWYgKHZhci0+eHJlcyA8PSA4MDApCiAJCQkvKiBYYmggaGFzIHRoaXMgdHlwZSBvZiBjbG9jayBmb3IgMzItYml0ICovCiAJCQlmcmVxIC89IDI7CiAJCWJyZWFrOwogCX0KICNlbmRpZgotCi0JYmVzdGNsb2NrKGZyZXEsICZyZWdzLT5mcmVxLCAmcmVncy0+bm9tLCAmcmVncy0+ZGVuLCAmcmVncy0+ZGl2LAotCQkgIG1heGNsb2NrKTsKLQlyZWdzLT5tY2xrID0gY2lycnVzZmJfZ2V0X21jbGsoZnJlcSwgdmFyLT5iaXRzX3Blcl9waXhlbCwKLQkJCQkJJnJlZ3MtPmRpdk1DTEspOwotCi0JeHJlcyA9IHZhci0+eHJlczsKLQloZnJvbnQgPSB2YXItPnJpZ2h0X21hcmdpbjsKLQloc3luYyA9IHZhci0+aHN5bmNfbGVuOwotCWhiYWNrID0gdmFyLT5sZWZ0X21hcmdpbjsKLQotCXlyZXMgPSB2YXItPnlyZXM7Ci0JdmZyb250ID0gdmFyLT5sb3dlcl9tYXJnaW47Ci0JdnN5bmMgPSB2YXItPnZzeW5jX2xlbjsKLQl2YmFjayA9IHZhci0+dXBwZXJfbWFyZ2luOwotCi0JaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpIHsKLQkJeXJlcyAqPSAyOwotCQl2ZnJvbnQgKj0gMjsKLQkJdnN5bmMgKj0gMjsKLQkJdmJhY2sgKj0gMjsKLQl9IGVsc2UgaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7Ci0JCXlyZXMgPSAoeXJlcyArIDEpIC8gMjsKLQkJdmZyb250ID0gKHZmcm9udCArIDEpIC8gMjsKLQkJdnN5bmMgPSAodnN5bmMgKyAxKSAvIDI7Ci0JCXZiYWNrID0gKHZiYWNrICsgMSkgLyAyOwotCX0KLQlyZWdzLT5Ib3JpelJlcyA9IHhyZXM7Ci0JcmVncy0+SG9yaXpUb3RhbCA9ICh4cmVzICsgaGZyb250ICsgaHN5bmMgKyBoYmFjaykgLyA4IC0gNTsKLQlyZWdzLT5Ib3JpekRpc3BFbmQgPSB4cmVzIC8gOCAtIDE7Ci0JcmVncy0+SG9yaXpCbGFua1N0YXJ0ID0geHJlcyAvIDg7Ci0JLyogZG9lcyBub3QgY291bnQgd2l0aCAiLTUiICovCi0JcmVncy0+SG9yaXpCbGFua0VuZCA9IHJlZ3MtPkhvcml6VG90YWwgKyA1OwotCXJlZ3MtPkhvcml6U3luY1N0YXJ0ID0gKHhyZXMgKyBoZnJvbnQpIC8gOCArIDE7Ci0JcmVncy0+SG9yaXpTeW5jRW5kID0gKHhyZXMgKyBoZnJvbnQgKyBoc3luYykgLyA4ICsgMTsKLQotCXJlZ3MtPlZlcnRSZXMgPSB5cmVzOwotCXJlZ3MtPlZlcnRUb3RhbCA9IHlyZXMgKyB2ZnJvbnQgKyB2c3luYyArIHZiYWNrIC0gMjsKLQlyZWdzLT5WZXJ0RGlzcEVuZCA9IHlyZXMgLSAxOwotCXJlZ3MtPlZlcnRCbGFua1N0YXJ0ID0geXJlczsKLQlyZWdzLT5WZXJ0QmxhbmtFbmQgPSByZWdzLT5WZXJ0VG90YWw7Ci0JcmVncy0+VmVydFN5bmNTdGFydCA9IHlyZXMgKyB2ZnJvbnQgLSAxOwotCXJlZ3MtPlZlcnRTeW5jRW5kID0geXJlcyArIHZmcm9udCArIHZzeW5jIC0gMTsKLQotCWlmIChyZWdzLT5WZXJ0UmVzID49IDEwMjQpIHsKLQkJcmVncy0+VmVydFRvdGFsIC89IDI7Ci0JCXJlZ3MtPlZlcnRTeW5jU3RhcnQgLz0gMjsKLQkJcmVncy0+VmVydFN5bmNFbmQgLz0gMjsKLQkJcmVncy0+VmVydERpc3BFbmQgLz0gMjsKLQl9Ci0JaWYgKHJlZ3MtPm11bHRpcGxleGluZykgewotCQlyZWdzLT5Ib3JpelRvdGFsIC89IDI7Ci0JCXJlZ3MtPkhvcml6U3luY1N0YXJ0IC89IDI7Ci0JCXJlZ3MtPkhvcml6U3luY0VuZCAvPSAyOwotCQlyZWdzLT5Ib3JpekRpc3BFbmQgLz0gMjsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X21jbGsoY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLCBpbnQgdmFsLAotCQkJCWludCBkaXYpCitzdGF0aWMgdm9pZCBjaXJydXNmYl9zZXRfbWNsa19hc19zb3VyY2UoY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLAorCQkJCQlpbnQgZGl2KQogeworCXVuc2lnbmVkIGNoYXIgb2xkMWYsIG9sZDFlOwogCWFzc2VydChjaW5mbyAhPSBOVUxMKTsKKwlvbGQxZiA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYpICYgfjB4NDA7CiAKLQlpZiAoZGl2ID09IDIpIHsKLQkJLyogVkNMSyA9IE1DTEsvMiAqLwotCQl1bnNpZ25lZCBjaGFyIG9sZCA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUpOwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFLCBvbGQgfCAweDEpOwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCAweDQwIHwgKHZhbCAmIDB4M2YpKTsKLQl9IGVsc2UgaWYgKGRpdiA9PSAxKSB7Ci0JCS8qIFZDTEsgPSBNQ0xLICovCi0JCXVuc2lnbmVkIGNoYXIgb2xkID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSk7Ci0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUsIG9sZCAmIH4weDEpOwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCAweDQwIHwgKHZhbCAmIDB4M2YpKTsKLQl9IGVsc2UgewotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCB2YWwgJiAweDNmKTsKKwlpZiAoZGl2KSB7CisJCURQUklOVEsoIlNldCAlcyBhcyBwaXhjbG9jayBzb3VyY2UuXG4iLAorCQkJCQkoZGl2ID09IDIpID8gIk1DTEsvMiIgOiAiTUNMSyIpOworCQlvbGQxZiB8PSAweDQwOworCQlvbGQxZSA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUpICYgfjB4MTsKKwkJaWYgKGRpdiA9PSAyKQorCQkJb2xkMWUgfD0gMTsKKworCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFLCBvbGQxZSk7CiAJfQorCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYsIG9sZDFmKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkyNyw2ICs3MjMsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAlpbnQgb2Zmc2V0ID0gMCwgZXJyOwogCWNvbnN0IHN0cnVjdCBjaXJydXNmYl9ib2FyZF9pbmZvX3JlYyAqYmk7CisJaW50IGhkaXNwZW5kLCBoc3luY3N0YXJ0LCBoc3luY2VuZCwgaHRvdGFsOworCWludCB5cmVzLCB2ZGlzcGVuZCwgdnN5bmNzdGFydCwgdnN5bmNlbmQsIHZ0b3RhbDsKKwlsb25nIGZyZXE7CisJaW50IG5vbSwgZGVuLCBkaXY7CiAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAJRFBSSU5USygiUmVxdWVzdGVkIG1vZGU6ICVkeCVkeCVkXG4iLApAQCAtOTQ0LDc2ICs3NDQsMTE3IEBACiAKIAliaSA9ICZjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV07CiAKKwloc3luY3N0YXJ0ID0gdmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW47CisJaHN5bmNlbmQgPSBoc3luY3N0YXJ0ICsgdmFyLT5oc3luY19sZW47CisJaHRvdGFsID0gKGhzeW5jZW5kICsgdmFyLT5sZWZ0X21hcmdpbikgLyA4IC0gNTsKKwloZGlzcGVuZCA9IHZhci0+eHJlcyAvIDggLSAxOworCWhzeW5jc3RhcnQgPSBoc3luY3N0YXJ0IC8gOCArIDE7CisJaHN5bmNlbmQgPSBoc3luY2VuZCAvIDggKyAxOworCisJeXJlcyA9IHZhci0+eXJlczsKKwl2c3luY3N0YXJ0ID0geXJlcyArIHZhci0+bG93ZXJfbWFyZ2luOworCXZzeW5jZW5kID0gdnN5bmNzdGFydCArIHZhci0+dnN5bmNfbGVuOworCXZ0b3RhbCA9IHZzeW5jZW5kICsgdmFyLT51cHBlcl9tYXJnaW47CisJdmRpc3BlbmQgPSB5cmVzIC0gMTsKKworCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfRE9VQkxFKSB7CisJCXlyZXMgKj0gMjsKKwkJdnN5bmNzdGFydCAqPSAyOworCQl2c3luY2VuZCAqPSAyOworCQl2dG90YWwgKj0gMjsKKwl9IGVsc2UgaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7CisJCXlyZXMgPSAoeXJlcyArIDEpIC8gMjsKKwkJdnN5bmNzdGFydCA9ICh2c3luY3N0YXJ0ICsgMSkgLyAyOworCQl2c3luY2VuZCA9ICh2c3luY2VuZCArIDEpIC8gMjsKKwkJdnRvdGFsID0gKHZ0b3RhbCArIDEpIC8gMjsKKwl9CisKKwl2dG90YWwgLT0gMjsKKwl2c3luY3N0YXJ0IC09IDE7CisJdnN5bmNlbmQgLT0gMTsKKworCWlmICh5cmVzID49IDEwMjQpIHsKKwkJdnRvdGFsIC89IDI7CisJCXZzeW5jc3RhcnQgLz0gMjsKKwkJdnN5bmNlbmQgLz0gMjsKKwkJdmRpc3BlbmQgLz0gMjsKKwl9CisJaWYgKHJlZ3MubXVsdGlwbGV4aW5nKSB7CisJCWh0b3RhbCAvPSAyOworCQloc3luY3N0YXJ0IC89IDI7CisJCWhzeW5jZW5kIC89IDI7CisJCWhkaXNwZW5kIC89IDI7CisJfQogCS8qIHVubG9jayByZWdpc3RlciBWR0FfQ1JUQ19IX1RPVEFMLi5DUlQ3ICovCiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9TWU5DX0VORCwgMHgyMCk7CS8qIHByZXZpb3VzbHk6IDB4MDApICovCiAKIAkvKiBpZiBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCwgYWxsIHBhcmFtZXRlcnMgZ2V0IG91dHB1dCBiZWZvcmUgd3JpdGluZyAqLwotCURQUklOVEsoIkNSVDA6ICVsZFxuIiwgcmVncy5Ib3JpelRvdGFsKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1RPVEFMLCByZWdzLkhvcml6VG90YWwpOworCURQUklOVEsoIkNSVDA6ICVkXG4iLCBodG90YWwpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfVE9UQUwsIGh0b3RhbCk7CiAKLQlEUFJJTlRLKCJDUlQxOiAlbGRcbiIsIHJlZ3MuSG9yaXpEaXNwRW5kKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX0RJU1AsIHJlZ3MuSG9yaXpEaXNwRW5kKTsKKwlEUFJJTlRLKCJDUlQxOiAlZFxuIiwgaGRpc3BlbmQpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfRElTUCwgaGRpc3BlbmQpOwogCi0JRFBSSU5USygiQ1JUMjogJWxkXG4iLCByZWdzLkhvcml6QmxhbmtTdGFydCk7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19TVEFSVCwgcmVncy5Ib3JpekJsYW5rU3RhcnQpOworCURQUklOVEsoIkNSVDI6ICVkXG4iLCB2YXItPnhyZXMgLyA4KTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX0JMQU5LX1NUQVJULCB2YXItPnhyZXMgLyA4KTsKIAogCS8qICArIDEyODogQ29tcGF0aWJsZSByZWFkICovCi0JRFBSSU5USygiQ1JUMzogMTI4KyVsZFxuIiwgcmVncy5Ib3JpekJsYW5rRW5kICUgMzIpOworCURQUklOVEsoIkNSVDM6IDEyOCslZFxuIiwgKGh0b3RhbCArIDUpICUgMzIpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfQkxBTktfRU5ELAotCQkgMTI4ICsgKHJlZ3MuSG9yaXpCbGFua0VuZCAlIDMyKSk7CisJCSAxMjggKyAoKGh0b3RhbCArIDUpICUgMzIpKTsKIAotCURQUklOVEsoIkNSVDQ6ICVsZFxuIiwgcmVncy5Ib3JpelN5bmNTdGFydCk7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9TWU5DX1NUQVJULCByZWdzLkhvcml6U3luY1N0YXJ0KTsKKwlEUFJJTlRLKCJDUlQ0OiAlZFxuIiwgaHN5bmNzdGFydCk7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9TWU5DX1NUQVJULCBoc3luY3N0YXJ0KTsKIAotCXRtcCA9IHJlZ3MuSG9yaXpTeW5jRW5kICUgMzI7Ci0JaWYgKHJlZ3MuSG9yaXpCbGFua0VuZCAmIDMyKQorCXRtcCA9IGhzeW5jZW5kICUgMzI7CisJaWYgKChodG90YWwgKyA1KSAmIDMyKQogCQl0bXAgKz0gMTI4OwogCURQUklOVEsoIkNSVDU6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfU1lOQ19FTkQsIHRtcCk7CiAKLQlEUFJJTlRLKCJDUlQ2OiAlbGRcbiIsIHJlZ3MuVmVydFRvdGFsICYgMHhmZik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9UT1RBTCwgKHJlZ3MuVmVydFRvdGFsICYgMHhmZikpOworCURQUklOVEsoIkNSVDY6ICVkXG4iLCB2dG90YWwgJiAweGZmKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1RPVEFMLCB2dG90YWwgJiAweGZmKTsKIAogCXRtcCA9IDE2OwkJLyogTGluZUNvbXBhcmUgYml0ICM5ICovCi0JaWYgKHJlZ3MuVmVydFRvdGFsICYgMjU2KQorCWlmICh2dG90YWwgJiAyNTYpCiAJCXRtcCB8PSAxOwotCWlmIChyZWdzLlZlcnREaXNwRW5kICYgMjU2KQorCWlmICh2ZGlzcGVuZCAmIDI1NikKIAkJdG1wIHw9IDI7Ci0JaWYgKHJlZ3MuVmVydFN5bmNTdGFydCAmIDI1NikKKwlpZiAodnN5bmNzdGFydCAmIDI1NikKIAkJdG1wIHw9IDQ7Ci0JaWYgKHJlZ3MuVmVydEJsYW5rU3RhcnQgJiAyNTYpCisJaWYgKCh2ZGlzcGVuZCArIDEpICYgMjU2KQogCQl0bXAgfD0gODsKLQlpZiAocmVncy5WZXJ0VG90YWwgJiA1MTIpCisJaWYgKHZ0b3RhbCAmIDUxMikKIAkJdG1wIHw9IDMyOwotCWlmIChyZWdzLlZlcnREaXNwRW5kICYgNTEyKQorCWlmICh2ZGlzcGVuZCAmIDUxMikKIAkJdG1wIHw9IDY0OwotCWlmIChyZWdzLlZlcnRTeW5jU3RhcnQgJiA1MTIpCisJaWYgKHZzeW5jc3RhcnQgJiA1MTIpCiAJCXRtcCB8PSAxMjg7CiAJRFBSSU5USygiQ1JUNzogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfT1ZFUkZMT1csIHRtcCk7CiAKIAl0bXAgPSAweDQwOwkJLyogTGluZUNvbXBhcmUgYml0ICM4ICovCi0JaWYgKHJlZ3MuVmVydEJsYW5rU3RhcnQgJiA1MTIpCisJaWYgKCh2ZGlzcGVuZCArIDEpICYgNTEyKQogCQl0bXAgfD0gMHgyMDsKIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkKIAkJdG1wIHw9IDB4ODA7CiAJRFBSSU5USygiQ1JUOTogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTUFYX1NDQU4sIHRtcCk7CiAKLQlEUFJJTlRLKCJDUlQxMDogJWxkXG4iLCByZWdzLlZlcnRTeW5jU3RhcnQgJiAweGZmKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfU1RBUlQsIHJlZ3MuVmVydFN5bmNTdGFydCAmIDB4ZmYpOworCURQUklOVEsoIkNSVDEwOiAlZFxuIiwgdnN5bmNzdGFydCAmIDB4ZmYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19TVEFSVCwgdnN5bmNzdGFydCAmIDB4ZmYpOwogCi0JRFBSSU5USygiQ1JUMTE6IDY0KzMyKyVsZFxuIiwgcmVncy5WZXJ0U3luY0VuZCAlIDE2KTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfRU5ELCByZWdzLlZlcnRTeW5jRW5kICUgMTYgKyA2NCArIDMyKTsKKwlEUFJJTlRLKCJDUlQxMTogNjQrMzIrJWRcbiIsIHZzeW5jZW5kICUgMTYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZzeW5jZW5kICUgMTYgKyA2NCArIDMyKTsKIAotCURQUklOVEsoIkNSVDEyOiAlbGRcbiIsIHJlZ3MuVmVydERpc3BFbmQgJiAweGZmKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0RJU1BfRU5ELCByZWdzLlZlcnREaXNwRW5kICYgMHhmZik7CisJRFBSSU5USygiQ1JUMTI6ICVkXG4iLCB2ZGlzcGVuZCAmIDB4ZmYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfRElTUF9FTkQsIHZkaXNwZW5kICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxNTogJWxkXG4iLCByZWdzLlZlcnRCbGFua1N0YXJ0ICYgMHhmZik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9CTEFOS19TVEFSVCwgcmVncy5WZXJ0QmxhbmtTdGFydCAmIDB4ZmYpOworCURQUklOVEsoIkNSVDE1OiAlZFxuIiwgKHZkaXNwZW5kICsgMSkgJiAweGZmKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX1NUQVJULCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOwogCi0JRFBSSU5USygiQ1JUMTY6ICVsZFxuIiwgcmVncy5WZXJ0QmxhbmtFbmQgJiAweGZmKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX0VORCwgcmVncy5WZXJ0QmxhbmtFbmQgJiAweGZmKTsKKwlEUFJJTlRLKCJDUlQxNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfRU5ELCB2dG90YWwgJiAweGZmKTsKIAogCURQUklOVEsoIkNSVDE4OiAweGZmXG4iKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19MSU5FX0NPTVBBUkUsIDB4ZmYpOwpAQCAtMTAyMSwzOCArODYyLDUzIEBACiAJdG1wID0gMDsKIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQpCiAJCXRtcCB8PSAxOwotCWlmIChyZWdzLkhvcml6QmxhbmtFbmQgJiA2NCkKKwlpZiAoKGh0b3RhbCArIDUpICYgNjQpCiAJCXRtcCB8PSAxNjsKLQlpZiAocmVncy5Ib3JpekJsYW5rRW5kICYgMTI4KQorCWlmICgoaHRvdGFsICsgNSkgJiAxMjgpCiAJCXRtcCB8PSAzMjsKLQlpZiAocmVncy5WZXJ0QmxhbmtFbmQgJiAyNTYpCisJaWYgKHZ0b3RhbCAmIDI1NikKIAkJdG1wIHw9IDY0OwotCWlmIChyZWdzLlZlcnRCbGFua0VuZCAmIDUxMikKKwlpZiAodnRvdGFsICYgNTEyKQogCQl0bXAgfD0gMTI4OwogCiAJRFBSSU5USygiQ1JUMWE6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIENMX0NSVDFBLCB0bXApOwogCisJZnJlcSA9IFBJQ09TMktIWih2YXItPnBpeGNsb2NrKTsKKwliZXN0Y2xvY2soZnJlcSwgJm5vbSwgJmRlbiwgJmRpdik7CisKIAkvKiBzZXQgVkNMSzAgKi8KIAkvKiBoYXJkd2FyZSBSZWZDbG9jazogMTQuMzE4MTggTUh6ICovCiAJLyogZm9ybXVsYTogVkNsayA9IChPU0MgKiBOKSAvIChEICogKDErUCkpICovCiAJLyogRXhhbXBsZTogVkNsayA9ICgxNC4zMTgxOCAqIDkxKSAvICgyMyAqICgxKzEpKSA9IDI4LjMyNSBNSHogKi8KIAotCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJCLCByZWdzLm5vbSk7Ci0JdG1wID0gcmVncy5kZW4gPDwgMTsKLQlpZiAocmVncy5kaXYgIT0gMCkKLQkJdG1wIHw9IDE7CisJaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUpIHsKKwkJLyogaWYgZnJlcSBpcyBjbG9zZSB0byBtY2xrIG9yIG1jbGsvMiBzZWxlY3QgbWNsaworCQkgKiBhcyBjbG9jayBzb3VyY2UKKwkJICovCisJCWludCBkaXZNQ0xLID0gY2lycnVzZmJfY2hlY2tfbWNsayhjaW5mbywgZnJlcSk7CisJCWlmIChkaXZNQ0xLKSAgeworCQkJbm9tID0gMDsKKwkJCWNpcnJ1c2ZiX3NldF9tY2xrX2FzX3NvdXJjZShjaW5mbywgZGl2TUNMSyk7CisJCX0KKwl9CisJaWYgKG5vbSkgeworCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSQiwgbm9tKTsKKwkJdG1wID0gZGVuIDw8IDE7CisJCWlmIChkaXYgIT0gMCkKKwkJCXRtcCB8PSAxOwogCi0JLyogNiBiaXQgZGVub207IE9OTFkgNTQzNCEhISAoYnVnZ2VkIG1lIDEwIGRheXMpICovCi0JaWYgKChjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgfHwKLQkgICAgKGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUpIHx8Ci0JICAgIChjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKSkKLQkJdG1wIHw9IDB4ODA7CisJCS8qIDYgYml0IGRlbm9tOyBPTkxZIDU0MzQhISEgKGJ1Z2dlZCBtZSAxMCBkYXlzKSAqLworCQlpZiAoKGNpbmZvLT5idHlwZSA9PSBCVF9TRDY0KSB8fAorCQkgICAgKGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUpIHx8CisJCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkpCisJCQl0bXAgfD0gMHg4MDsKIAotCURQUklOVEsoIkNMX1NFUVIxQjogJWxkXG4iLCAobG9uZykgdG1wKTsKLQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUIsIHRtcCk7CisJCURQUklOVEsoIkNMX1NFUVIxQjogJWxkXG4iLCAobG9uZykgdG1wKTsKKwkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFCLCB0bXApOworCX0KIAotCWlmIChyZWdzLlZlcnRSZXMgPj0gMTAyNCkKKwlpZiAoeXJlcyA+PSAxMDI0KQogCQkvKiAxMjgweDEwMjQgKi8KIAkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTU9ERSwgMHhjNyk7CiAJZWxzZQpAQCAtMTA2Niw3ICs5MjIsNyBAQAogCS8qIGRvbid0IGtub3cgaWYgaXQgd291bGQgaHVydCB0byBhbHNvIHByb2dyYW0gdGhpcyBpZiBubyBpbnRlcmxhY2VkICovCiAJLyogbW9kZSBpcyB1c2VkLCBidXQgSSBmZWVsIGJldHRlciB0aGlzIHdheS4uIDotKSAqLwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKLQkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfUkVHUywgcmVncy5Ib3JpelRvdGFsIC8gMik7CisJCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1JFR1MsIGh0b3RhbCAvIDIpOwogCWVsc2UKIAkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfUkVHUywgMHgwMCk7CS8qIGludGVybGFjZSBjb250cm9sICovCiAKQEAgLTEyNDAsNyArMTA5Niw2IEBACiAKIAkJY2FzZSBCVF9BTFBJTkU6CiAJCQlEUFJJTlRLKCIgKGZvciBHRDU0M3gpXG4iKTsKLQkJCWNpcnJ1c2ZiX3NldF9tY2xrKGNpbmZvLCByZWdzLm1jbGssIHJlZ3MuZGl2TUNMSyk7CiAJCQkvKiBXZSBhbHJlYWR5IHNldCBTUkYgYW5kIFNSMUYgKi8KIAkJCWJyZWFrOwogCkBAIC0xMzEyLDExICsxMTY3LDcgQEAKIAogCQljYXNlIEJUX0FMUElORToKIAkJCURQUklOVEsoIiAoZm9yIEdENTQzeClcbiIpOwotCQkJaWYgKHJlZ3MuSG9yaXpSZXMgPj0gMTAyNCkKLQkJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhNyk7Ci0JCQllbHNlCi0JCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4YTMpOwotCQkJY2lycnVzZmJfc2V0X21jbGsoY2luZm8sIHJlZ3MubWNsaywgcmVncy5kaXZNQ0xLKTsKKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGE3KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgpAQCAtMTM2MCw3ICsxMjExLDcgQEAKIAkgKi8KIAogCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKLQkJRFBSSU5USygiY2lycnVzZmI6IHByZXBhcmluZyBmb3IgMjQvMzIgYml0IGRlZXAgZGlzcGxheVxuIik7CisJCURQUklOVEsoImNpcnJ1c2ZiOiBwcmVwYXJpbmcgZm9yIDMyIGJpdCBkZWVwIGRpc3BsYXlcbiIpOwogCQlzd2l0Y2ggKGNpbmZvLT5idHlwZSkgewogCQljYXNlIEJUX1NENjQ6CiAJCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZTogMjU2YyBjb2wuIG1vZGUgKi8KQEAgLTEzOTQsNyArMTI0NSw2IEBACiAJCWNhc2UgQlRfQUxQSU5FOgogCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhOSk7Ci0JCQljaXJydXNmYl9zZXRfbWNsayhjaW5mbywgcmVncy5tY2xrLCByZWdzLmRpdk1DTEspOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9HRDU0ODA6CkBAIC0xOTQ5LDggKzE3OTksNiBAQAogCS8qIG1pc2MuLi4gKi8KIAlXSERSKGNpbmZvLCAwKTsJLyogSGlkZGVuIERBQyByZWdpc3RlcjogLSAqLwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImNpcnJ1c2ZiOiBUaGlzIGJvYXJkIGhhcyAlbGQgYnl0ZXMgb2YgRFJBTSBtZW1vcnlcbiIsCi0JCWluZm8tPnNjcmVlbl9zaXplKTsKIAlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm47CiB9CkBAIC0yMTIyLDcgKzE5NzAsNyBAQAogICogYmFzZWQgb24gdGhlIERSQU0gYmFuZHdpZHRoIGJpdCBhbmQgRFJBTSBiYW5rIHN3aXRjaGluZyBiaXQuICBUaGlzCiAgKiB3b3JrcyB3aXRoIDFNQiwgMk1CIGFuZCA0TUIgY29uZmlndXJhdGlvbnMgKHdoaWNoIHRoZSBNb3Rvcm9sYSBib2FyZHMKICAqIHNlZW0gdG8gaGF2ZS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2lycnVzZmJfZ2V0X21lbXNpemUodTggX19pb21lbSAqcmVnYmFzZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX2dldF9tZW1zaXplKHU4IF9faW9tZW0gKnJlZ2Jhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBtZW07CiAJdW5zaWduZWQgY2hhciBTUkY7CkBAIC0yMTg4LDggKzIwMzYsNyBAQAogCiBzdGF0aWMgdm9pZCBjaXJydXNmYl9wY2lfdW5tYXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gY2luZm8tPnBkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGluZm8tPmRldmljZSk7CiAKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKICNpZiAwIC8qIGlmIHN5c3RlbSBkaWRuJ3QgY2xhaW0gdGhpcyByZWdpb24sIHdlIHdvdWxkLi4uICovCkBAIC0yMjA1LDIwICsyMDUyLDIyIEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2lycnVzZmJfem9ycm9fdW5tYXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwotCXpvcnJvX3JlbGVhc2VfZGV2aWNlKGNpbmZvLT56ZGV2KTsKKwlzdHJ1Y3Qgem9ycm9fZGV2ICp6ZGV2ID0gdG9fem9ycm9fZGV2KGluZm8tPmRldmljZSk7CisKKwl6b3Jyb19yZWxlYXNlX2RldmljZSh6ZGV2KTsKIAogCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfUElDQVNTTzQpIHsKIAkJY2luZm8tPnJlZ2Jhc2UgLT0gMHg2MDAwMDA7CiAJCWlvdW5tYXAoKHZvaWQgKiljaW5mby0+cmVnYmFzZSk7CiAJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCX0gZWxzZSB7Ci0JCWlmICh6b3Jyb19yZXNvdXJjZV9zdGFydChjaW5mby0+emRldikgPiAweDAxMDAwMDAwKQorCQlpZiAoem9ycm9fcmVzb3VyY2Vfc3RhcnQoemRldikgPiAweDAxMDAwMDAwKQogCQkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX3NldF9mYmluZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaXJydXNmYl9zZXRfZmJpbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CkBAIC0yMjM1LDcgKzIwODQsNyBAQAogCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKSB7CiAJCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2KQogCQkJaW5mby0+c2NyZWVuX2Jhc2UgKz0gMSAqIE1CXzsKLQkJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMjQgfHwgdmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikKKwkJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMzIpCiAJCQlpbmZvLT5zY3JlZW5fYmFzZSArPSAyICogTUJfOwogCX0KIApAQCAtMjI2Miw3ICsyMTExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaXJydXNmYl9yZWdpc3RlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3JlZ2lzdGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlpbnQgZXJyOwpAQCAtMjI3OCwyMyArMjEyNywyNyBAQAogCS8qIHNhbml0eSBjaGVja3MgKi8KIAlhc3NlcnQoYnR5cGUgIT0gQlRfTk9ORSk7CiAKKwkvKiBzZXQgYWxsIHRoZSB2aXRhbCBzdHVmZiAqLworCWNpcnJ1c2ZiX3NldF9mYmluZm8oaW5mbyk7CisKIAlEUFJJTlRLKCJjaXJydXNmYjogKFJBTSBzdGFydCBzZXQgdG86IDB4JXApXG4iLCBpbmZvLT5zY3JlZW5fYmFzZSk7CiAKLQkvKiBNYWtlIHByZXRlbmQgd2UndmUgc2V0IHRoZSB2YXIgc28gb3VyIHN0cnVjdHVyZXMgYXJlIGluIGEgImdvb2QiICovCi0JLyogc3RhdGUsIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3Qgd3JpdHRlbiB0aGUgbW9kZSB0byB0aGUgaHcgeWV0Li4uICAqLwotCWluZm8tPnZhciA9IGNpcnJ1c2ZiX3ByZWRlZmluZWRbY2lycnVzZmJfZGVmX21vZGVdLnZhcjsKKwllcnIgPSBmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgbW9kZV9vcHRpb24sIE5VTEwsIDAsIE5VTEwsIDgpOworCWlmICghZXJyKSB7CisJCURQUklOVEsoIndyb25nIGluaXRpYWwgdmlkZW8gbW9kZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2RlYWxsb2NfY21hcDsKKwl9CisKIAlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAKIAllcnIgPSBjaXJydXNmYl9kZWNvZGVfdmFyKCZpbmZvLT52YXIsICZjaW5mby0+Y3VycmVudG1vZGUsIGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJRFBSSU5USygiY2hva2luZyBvbiBkZWZhdWx0IHZhci4uLiB1bW0sIG5vIGdvb2QuXG4iKTsKLQkJZ290byBlcnJfdW5tYXBfY2lycnVzZmI7CisJCWdvdG8gZXJyX2RlYWxsb2NfY21hcDsKIAl9CiAKLQkvKiBzZXQgYWxsIHRoZSB2aXRhbCBzdHVmZiAqLwotCWNpcnJ1c2ZiX3NldF9mYmluZm8oaW5mbyk7Ci0KIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBjb3VsZCBub3QgcmVnaXN0ZXIgIgpAQCAtMjMwNyw3ICsyMTYwLDYgQEAKIAogZXJyX2RlYWxsb2NfY21hcDoKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotZXJyX3VubWFwX2NpcnJ1c2ZiOgogCWNpbmZvLT51bm1hcChpbmZvKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCXJldHVybiBlcnI7CkBAIC0yMzMwLDggKzIxODIsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludCBjaXJydXNmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgY2lycnVzZmJfcGNpX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbzsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTIzNTMsNyArMjIwNSw2IEBACiAJfQogCiAJY2luZm8gPSBpbmZvLT5wYXI7Ci0JY2luZm8tPnBkZXYgPSBwZGV2OwogCWNpbmZvLT5idHlwZSA9IGJ0eXBlID0gKGVudW0gY2lycnVzX2JvYXJkKSBlbnQtPmRyaXZlcl9kYXRhOwogCiAJRFBSSU5USygiIEZvdW5kIFBDSSBkZXZpY2UsIGJhc2UgYWRkcmVzcyAwIGlzIDB4JXgsIGJ0eXBlIHNldCB0byAlZFxuIiwKQEAgLTI0NTksOCArMjMxMCw4IEBACiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaWZkZWYgQ09ORklHX1pPUlJPCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX3pvcnJvX3JlZ2lzdGVyKHN0cnVjdCB6b3Jyb19kZXYgKnosCi0JCQkJICAgY29uc3Qgc3RydWN0IHpvcnJvX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgY2lycnVzZmJfem9ycm9fcmVnaXN0ZXIoc3RydWN0IHpvcnJvX2RldiAqeiwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgem9ycm9fZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpAQCAtMjQ4OSw3ICsyMzQwLDYgQEAKIAlhc3NlcnQoeik7CiAJYXNzZXJ0KGJ0eXBlICE9IEJUX05PTkUpOwogCi0JY2luZm8tPnpkZXYgPSB6OwogCWJvYXJkX2FkZHIgPSB6b3Jyb19yZXNvdXJjZV9zdGFydCh6KTsKIAlib2FyZF9zaXplID0gem9ycm9fcmVzb3VyY2VfbGVuKHopOwogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKQEAgLTI2MjEsMTcgKzI0NzEsMTcgQEAKIAkJcmV0dXJuIDA7CiAKIAl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWlmICghKnRoaXNfb3B0KSBjb250aW51ZTsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKIAogCQlEUFJJTlRLKCJjaXJydXNmYl9zZXR1cDogb3B0aW9uICclcydcbiIsIHRoaXNfb3B0KTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX01PREVTOyBpKyspIHsKLQkJCXNwcmludGYocywgIm1vZGU6JXMiLCBjaXJydXNmYl9wcmVkZWZpbmVkW2ldLm5hbWUpOwotCQkJaWYgKHN0cmNtcCh0aGlzX29wdCwgcykgPT0gMCkKLQkJCQljaXJydXNmYl9kZWZfbW9kZSA9IGk7Ci0JCX0KIAkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2FjY2VsIikpCiAJCQlub2FjY2VsID0gMTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJtb2RlOiIsIDUpKQorCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdCArIDU7CisJCWVsc2UKKwkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjY1Nyw2ICsyNTA3LDExIEBACiAKIG1vZHVsZV9pbml0KGNpcnJ1c2ZiX2luaXQpOwogCittb2R1bGVfcGFyYW0obW9kZV9vcHRpb24sIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobW9kZV9vcHRpb24sICJJbml0aWFsIHZpZGVvIG1vZGUgZS5nLiAnNjQ4eDQ4MC04QDYwJyIpOworbW9kdWxlX3BhcmFtKG5vYWNjZWwsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhub2FjY2VsLCAiRGlzYWJsZSBhY2NlbGVyYXRpb24iKTsKKwogI2lmZGVmIE1PRFVMRQogbW9kdWxlX2V4aXQoY2lycnVzZmJfZXhpdCk7CiAjZW5kaWYKQEAgLTMwNTAsMTYgKzI5MDUsMTQgQEAKICAqIGJlc3RjbG9jaygpIC0gZGV0ZXJtaW5lIGNsb3Nlc3QgcG9zc2libGUgY2xvY2sgbG93ZXIoPykgdGhhbiB0aGUKICAqIGRlc2lyZWQgcGl4ZWwgY2xvY2sKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGJlc3RjbG9jayhsb25nIGZyZXEsIGxvbmcgKmJlc3QsIGxvbmcgKm5vbSwKLQkJICAgICAgIGxvbmcgKmRlbiwgbG9uZyAqZGl2LCBsb25nIG1heGZyZXEpCitzdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBpbnQgKm5vbSwgaW50ICpkZW4sIGludCAqZGl2KQogewotCWxvbmcgbiwgaCwgZCwgZjsKKwlpbnQgbiwgZDsKKwlsb25nIGgsIGRpZmY7CiAKLQlhc3NlcnQoYmVzdCAhPSBOVUxMKTsKIAlhc3NlcnQobm9tICE9IE5VTEwpOwogCWFzc2VydChkZW4gIT0gTlVMTCk7CiAJYXNzZXJ0KGRpdiAhPSBOVUxMKTsKLQlhc3NlcnQobWF4ZnJlcSA+IDApOwogCiAJKm5vbSA9IDA7CiAJKmRlbiA9IDA7CkBAIC0zMDcwLDUxICsyOTIzLDQ3IEBACiAJaWYgKGZyZXEgPCA4MDAwKQogCQlmcmVxID0gODAwMDsKIAotCWlmIChmcmVxID4gbWF4ZnJlcSkKLQkJZnJlcSA9IG1heGZyZXE7Ci0KLQkqYmVzdCA9IDA7Ci0JZiA9IGZyZXEgKiAxMDsKKwlkaWZmID0gZnJlcTsKIAogCWZvciAobiA9IDMyOyBuIDwgMTI4OyBuKyspIHsKLQkJZCA9ICgxNDMxODEgKiBuKSAvIGY7CisJCWludCBzID0gMDsKKworCQlkID0gKDE0MzE4ICogbikgLyBmcmVxOwogCQlpZiAoKGQgPj0gNykgJiYgKGQgPD0gNjMpKSB7Ci0JCQlpZiAoZCA+IDMxKQotCQkJCWQgPSAoZCAvIDIpICogMjsKLQkJCWggPSAoMTQzMTggKiBuKSAvIGQ7Ci0JCQlpZiAoYWJzKGggLSBmcmVxKSA8IGFicygqYmVzdCAtIGZyZXEpKSB7Ci0JCQkJKmJlc3QgPSBoOworCQkJaW50IHRlbXAgPSBkOworCisJCQlpZiAodGVtcCA+IDMxKSB7CisJCQkJcyA9IDE7CisJCQkJdGVtcCA+Pj0gMTsKKwkJCX0KKwkJCWggPSAoKDE0MzE4ICogbikgLyB0ZW1wKSA+PiBzOworCQkJaCA9IGggPiBmcmVxID8gaCAtIGZyZXEgOiBmcmVxIC0gaDsKKwkJCWlmIChoIDwgZGlmZikgeworCQkJCWRpZmYgPSBoOwogCQkJCSpub20gPSBuOwotCQkJCWlmIChkIDwgMzIpIHsKLQkJCQkJKmRlbiA9IGQ7Ci0JCQkJCSpkaXYgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCSpkZW4gPSBkIC8gMjsKLQkJCQkJKmRpdiA9IDE7Ci0JCQkJfQorCQkJCSpkZW4gPSB0ZW1wOworCQkJCSpkaXYgPSBzOwogCQkJfQogCQl9Ci0JCWQgPSBESVZfUk9VTkRfVVAoMTQzMTgxICogbiwgZik7CisJCWQrKzsKIAkJaWYgKChkID49IDcpICYmIChkIDw9IDYzKSkgewotCQkJaWYgKGQgPiAzMSkKLQkJCQlkID0gKGQgLyAyKSAqIDI7Ci0JCQloID0gKDE0MzE4ICogbikgLyBkOwotCQkJaWYgKGFicyhoIC0gZnJlcSkgPCBhYnMoKmJlc3QgLSBmcmVxKSkgewotCQkJCSpiZXN0ID0gaDsKKwkJCWlmIChkID4gMzEpIHsKKwkJCQlzID0gMTsKKwkJCQlkID4+PSAxOworCQkJfQorCQkJaCA9ICgoMTQzMTggKiBuKSAvIGQpID4+IHM7CisJCQloID0gaCA+IGZyZXEgPyBoIC0gZnJlcSA6IGZyZXEgLSBoOworCQkJaWYgKGggPCBkaWZmKSB7CisJCQkJZGlmZiA9IGg7CiAJCQkJKm5vbSA9IG47Ci0JCQkJaWYgKGQgPCAzMikgewotCQkJCQkqZGVuID0gZDsKLQkJCQkJKmRpdiA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKmRlbiA9IGQgLyAyOwotCQkJCQkqZGl2ID0gMTsKLQkJCQl9CisJCQkJKmRlbiA9IGQ7CisJCQkJKmRpdiA9IHM7CiAJCQl9CiAJCX0KIAl9CiAKIAlEUFJJTlRLKCJCZXN0IHBvc3NpYmxlIHZhbHVlcyBmb3IgZ2l2ZW4gZnJlcXVlbmN5OlxuIik7Ci0JRFBSSU5USygiCWJlc3Q6ICVsZCBrSHogIG5vbTogJWxkICBkZW46ICVsZCAgZGl2OiAlbGRcbiIsCisJRFBSSU5USygiCWZyZXE6ICVsZCBrSHogIG5vbTogJWQgIGRlbjogJWQgIGRpdjogJWRcbiIsCiAJCWZyZXEsICpub20sICpkZW4sICpkaXYpOwogCiAJRFBSSU5USygiRVhJVFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IGRhOTFiYjEuLjY0YjNkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yOTc3LDggKzI5NzcsOCBAQAogCQlwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKIAkJdmFyX3RvX2Rpc3BsYXkocCwgJmluZm8tPnZhciwgaW5mbyk7Ci0JCWNvbHMgPSBGQkNPTl9TV0FQKHAtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKLQkJcm93cyA9IEZCQ09OX1NXQVAocC0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOworCQljb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CiAJCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CiAJCXJvd3MgLz0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCQl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwpAQCAtMzU3Myw4ICszNTczLDggQEAKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAlmYl9yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKLQlmYmNvbl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZmJfY2xhc3MsIE5VTEwsIE1LREVWKDAsIDApLAotCQkJCQkgICAgIE5VTEwsICJmYmNvbiIpOworCWZiY29uX2RldmljZSA9IGRldmljZV9jcmVhdGUoZmJfY2xhc3MsIE5VTEwsIE1LREVWKDAsIDApLCBOVUxMLAorCQkJCSAgICAgImZiY29uIik7CiAKIAlpZiAoSVNfRVJSKGZiY29uX2RldmljZSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IDZkZjI5YTYuLjQ0OGQyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTIzOSw4ICsyMzksNyBAQAogCiBzdGF0aWMgaW50IHZnYWNvbl9zY3JvbGxkZWx0YShzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IGxpbmVzKQogewotCWludCBzdGFydCwgZW5kLCBjb3VudCwgc29mZiwgZGlmZjsKLQl2b2lkICpkLCAqczsKKwlpbnQgc3RhcnQsIGVuZCwgY291bnQsIHNvZmY7CiAKIAlpZiAoIWxpbmVzKSB7CiAJCWMtPnZjX3Zpc2libGVfb3JpZ2luID0gYy0+dmNfb3JpZ2luOwpAQCAtMjg3LDI5ICsyODYsMjkgQEAKIAlpZiAoY291bnQgPiBjLT52Y19yb3dzKQogCQljb3VudCA9IGMtPnZjX3Jvd3M7CiAKLQlkaWZmID0gYy0+dmNfcm93cyAtIGNvdW50OworCWlmIChjb3VudCkgeworCQlpbnQgY29weXNpemU7CiAKLQlkID0gKHZvaWQgKikgYy0+dmNfb3JpZ2luOwotCXMgPSAodm9pZCAqKSBjLT52Y19zY3JlZW5idWY7CisJCWludCBkaWZmID0gYy0+dmNfcm93cyAtIGNvdW50OworCQl2b2lkICpkID0gKHZvaWQgKikgYy0+dmNfb3JpZ2luOworCQl2b2lkICpzID0gKHZvaWQgKikgYy0+dmNfc2NyZWVuYnVmOwogCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJc2NyX21lbWNweXcoZCwgdmdhY29uX3Njcm9sbGJhY2sgKyBzb2ZmLCBjLT52Y19zaXplX3Jvdyk7Ci0JCWQgKz0gYy0+dmNfc2l6ZV9yb3c7Ci0JCXNvZmYgKz0gYy0+dmNfc2l6ZV9yb3c7CisJCWNvdW50ICo9IGMtPnZjX3NpemVfcm93OworCQkvKiBob3cgbXVjaCBtZW1vcnkgdG8gZW5kIG9mIGJ1ZmZlciBsZWZ0PyAqLworCQljb3B5c2l6ZSA9IG1pbihjb3VudCwgdmdhY29uX3Njcm9sbGJhY2tfc2l6ZSAtIHNvZmYpOworCQlzY3JfbWVtY3B5dyhkLCB2Z2Fjb25fc2Nyb2xsYmFjayArIHNvZmYsIGNvcHlzaXplKTsKKwkJZCArPSBjb3B5c2l6ZTsKKwkJY291bnQgLT0gY29weXNpemU7CiAKLQkJaWYgKHNvZmYgPj0gdmdhY29uX3Njcm9sbGJhY2tfc2l6ZSkKLQkJCXNvZmYgPSAwOwotCX0KLQotCWlmIChkaWZmID09IGMtPnZjX3Jvd3MpIHsKLQkJdmdhY29uX2N1cnNvcihjLCBDTV9NT1ZFKTsKLQl9IGVsc2UgewotCQl3aGlsZSAoZGlmZi0tKSB7Ci0JCQlzY3JfbWVtY3B5dyhkLCBzLCBjLT52Y19zaXplX3Jvdyk7Ci0JCQlkICs9IGMtPnZjX3NpemVfcm93OwotCQkJcyArPSBjLT52Y19zaXplX3JvdzsKKwkJaWYgKGNvdW50KSB7CisJCQlzY3JfbWVtY3B5dyhkLCB2Z2Fjb25fc2Nyb2xsYmFjaywgY291bnQpOworCQkJZCArPSBjb3VudDsKIAkJfQotCX0KKworCQlpZiAoZGlmZikKKwkJCXNjcl9tZW1jcHl3KGQsIHMsIGRpZmYgKiBjLT52Y19zaXplX3Jvdyk7CisJfSBlbHNlCisJCXZnYWNvbl9jdXJzb3IoYywgQ01fTU9WRSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCmluZGV4IDZlZjgwMGIuLjQ4MzBiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYwpAQCAtMTUzLDEyICsxNTMsOSBAQAogCQltdXRleF91bmxvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CiAKIAkJaWYgKCFyZXQpIHsKLQkJCW5ld19kZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShkaXNwbGF5X2NsYXNzLAotCQkJCQkJCSAgICAgcGFyZW50LAotCQkJCQkJCSAgICAgTUtERVYoMCwwKSwKLQkJCQkJCQkgICAgIG5ld19kZXYsCi0JCQkJCQkJICAgICAiZGlzcGxheSVkIiwKLQkJCQkJCQkgICAgIG5ld19kZXYtPmlkeCk7CisJCQluZXdfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGRpc3BsYXlfY2xhc3MsIHBhcmVudCwKKwkJCQkJCSAgICAgTUtERVYoMCwgMCksIG5ld19kZXYsCisJCQkJCQkgICAgICJkaXNwbGF5JWQiLCBuZXdfZGV2LT5pZHgpOwogCQkJaWYgKCFJU19FUlIobmV3X2Rldi0+ZGV2KSkgewogCQkJCW5ld19kZXYtPnBhcmVudCA9IHBhcmVudDsKIAkJCQluZXdfZGV2LT5kcml2ZXIgPSBkcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggYmQ3NzlhZS4uZGFmOWI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCkBAIC0zMyw2ICszNCwxMDUgQEAKIAkudmlzdWFsCQkJPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAogfTsKIAorZW51bSB7CisJTV9JMTcsCQkvKiAxNy1JbmNoIGlNYWMgKi8KKwlNX0kyMCwJCS8qIDIwLUluY2ggaU1hYyAqLworCU1fSTIwX1NSLAkvKiAyMC1JbmNoIGlNYWMgKFNhbnRhIFJvc2EpICovCisJTV9JMjQsCQkvKiAyNC1JbmNoIGlNYWMgKi8KKwlNX01JTkksCQkvKiBNYWMgTWluaSAqLworCU1fTUIsCQkvKiBNYWNCb29rICovCisJTV9NQl8yLAkJLyogTWFjQm9vaywgMm5kIHJldi4gKi8KKwlNX01CXzMsCQkvKiBNYWNCb29rLCAzcmQgcmV2LiAqLworCU1fTUJfU1IsCS8qIE1hY0Jvb2ssIDJuZCBnZW4sIChTYW50YSBSb3NhKSAqLworCU1fTUJBLAkJLyogTWFjQm9vayBBaXIgKi8KKwlNX01CUCwJCS8qIE1hY0Jvb2sgUHJvICovCisJTV9NQlBfMiwJLyogTWFjQm9vayBQcm8gMm5kIGdlbiAqLworCU1fTUJQX1NSLAkvKiBNYWNCb29rIFBybyAoU2FudGEgUm9zYSkgKi8KKwlNX01CUF80LAkvKiBNYWNCb29rIFBybywgNHRoIGdlbiAqLworCU1fVU5LTk9XTgkvKiBwbGFjZWhvbGRlciAqLworfTsKKworc3RhdGljIHN0cnVjdCBlZmlmYl9kbWlfaW5mbyB7CisJY2hhciAqb3B0bmFtZTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IHN0cmlkZTsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKK30gZG1pX2xpc3RbXSA9IHsKKwlbTV9JMTddID0geyAiaTE3IiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAorCVtNX0kyMF0gPSB7ICJpMjAiLCAweDgwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCB9LCAvKiBndWVzcyAqLworCVtNX0kyMF9TUl0gPSB7ICJpbWFjNyIsIDB4NDAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sCisJW01fSTI0XSA9IHsgImkyNCIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sIC8qIGd1ZXNzICovCisJW01fTUlOSV09IHsgIm1pbmkiLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTAyNCwgNzY4IH0sCisJW01fTUJdID0geyAibWFjYm9vayIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKKwlbTV9NQkFdID0geyAibWJhIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAorCVtNX01CUF0gPSB7ICJtYnAiLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwIH0sCisJW01fTUJQXzJdID0geyAibWJwMiIsIDAsIDAsIDAsIDAgfSwgLyogcGxhY2Vob2xkZXIgKi8KKwlbTV9NQlBfU1JdID0geyAibWJwMyIsIDB4ODAwMzAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAgfSwKKwlbTV9NQlBfNF0gPSB7ICJtYnA0IiwgMHhjMDA2MDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwKKwlbTV9VTktOT1dOXSA9IHsgTlVMTCwgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IHNldF9zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKTsKKworI2RlZmluZSBFRklGQl9ETUlfU1lTVEVNX0lEKHZlbmRvciwgbmFtZSwgZW51bWlkKQkJXAorCXsgc2V0X3N5c3RlbSwgbmFtZSwgewkJCQkJXAorCQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCB2ZW5kb3IpLAkJXAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgbmFtZSkgfSwJCVwKKwkgICZkbWlfbGlzdFtlbnVtaWRdIH0KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgZG1pX3N5c3RlbV90YWJsZVtdID0geworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM0LDEiLCBNX0kxNyksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM1LDEiLCBNX0kyMCksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJpTWFjNSwxIiwgTV9JMjApLAorCS8qIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0d28gd2lsbCBiZSByaWdodDsgbWF5YmUgYm90aD8gKi8KKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJpTWFjNiwxIiwgTV9JMjQpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiaU1hYzYsMSIsIE1fSTI0KSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgImlNYWM3LDEiLCBNX0kyMF9TUiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjbWluaTEsMSIsIE1fTUlOSSksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9vazEsMSIsIE1fTUIpLAorCS8qIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0d28gd2lsbCBiZSByaWdodDsgbWF5YmUgYm90aD8gKi8KKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rMiwxIiwgTV9NQiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rMiwxIiwgTV9NQiksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2szLDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2szLDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2s0LDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tBaXIxLDEiLCBNX01CQSksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzEsMSIsIE1fTUJQKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rUHJvMiwxIiwgTV9NQlBfMiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvMiwxIiwgTV9NQlBfMiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzMsMSIsIE1fTUJQX1NSKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm8zLDEiLCBNX01CUF9TUiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvNCwxIiwgTV9NQlBfNCksCisJe30sCit9OworCitzdGF0aWMgaW50IHNldF9zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXN0cnVjdCBlZmlmYl9kbWlfaW5mbyAqaW5mbyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpZiAoaW5mby0+YmFzZSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gImVmaWZiOiBkbWkgZGV0ZWN0ZWQgJXMgLSBmcmFtZWJ1ZmZlciBhdCAlcCAiCisJCQkgIiglZHglZCwgc3RyaWRlICVkKVxuIiwgaWQtPmlkZW50LAorCQkJICh2b2lkICopaW5mby0+YmFzZSwgaW5mby0+d2lkdGgsIGluZm8tPmhlaWdodCwKKwkJCSBpbmZvLT5zdHJpZGUpOworCisJLyogVHJ1c3QgdGhlIGJvb3Rsb2FkZXIgb3ZlciB0aGUgRE1JIHRhYmxlcyAqLworCWlmIChzY3JlZW5faW5mby5sZmJfYmFzZSA9PSAwKQorCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGluZm8tPmJhc2U7CisJaWYgKHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID09IDApCisJCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gaW5mby0+c3RyaWRlOworCWlmIChzY3JlZW5faW5mby5sZmJfd2lkdGggPT0gMCkKKwkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gaW5mby0+d2lkdGg7CisJaWYgKHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPT0gMCkKKwkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGluZm8tPmhlaWdodDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGVmaWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKIAkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtNjcsNiArMTY3LDM4IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBlZmlmYl9zZXR1cChjaGFyICpvcHRpb25zKQoreworCWNoYXIgKnRoaXNfb3B0OworCWludCBpOworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRoaXNfb3B0KSBjb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTV9VTktOT1dOOyBpKyspIHsKKwkJCWlmICghc3RyY21wKHRoaXNfb3B0LCBkbWlfbGlzdFtpXS5vcHRuYW1lKSAmJgorCQkJCQlkbWlfbGlzdFtpXS5iYXNlICE9IDApIHsKKwkJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGRtaV9saXN0W2ldLmJhc2U7CisJCQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSBkbWlfbGlzdFtpXS5zdHJpZGU7CisJCQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gZG1pX2xpc3RbaV0ud2lkdGg7CisJCQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGRtaV9saXN0W2ldLmhlaWdodDsKKwkJCX0KKwkJfQorCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJiYXNlOiIsIDUpKQorCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs1LCBOVUxMLCAwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJzdHJpZGU6IiwgNykpCisJCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzcsIE5VTEwsIDApICogNDsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJoZWlnaHQ6IiwgNykpCisJCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNywgTlVMTCwgMCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAid2lkdGg6IiwgNikpCisJCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs2LCBOVUxMLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTc0LDYgKzIwNiwyNiBAQAogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwogCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwogCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOworCWludCByZXF1ZXN0X3N1Y2NlZWRlZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJlZmlmYjogcHJvYmluZyBmb3IgZWZpZmJcbiIpOworCisJaWYgKCFzY3JlZW5faW5mby5sZmJfZGVwdGgpCisJCXNjcmVlbl9pbmZvLmxmYl9kZXB0aCA9IDMyOworCWlmICghc2NyZWVuX2luZm8ucGFnZXMpCisJCXNjcmVlbl9pbmZvLnBhZ2VzID0gMTsKKworCS8qIGp1c3QgYXNzdW1lIHRoZXkncmUgYWxsIHVuc2V0IGlmIGFueSBhcmUgKi8KKwlpZiAoIXNjcmVlbl9pbmZvLmJsdWVfc2l6ZSkgeworCQlzY3JlZW5faW5mby5ibHVlX3NpemUgPSA4OworCQlzY3JlZW5faW5mby5ibHVlX3BvcyA9IDA7CisJCXNjcmVlbl9pbmZvLmdyZWVuX3NpemUgPSA4OworCQlzY3JlZW5faW5mby5ncmVlbl9wb3MgPSA4OworCQlzY3JlZW5faW5mby5yZWRfc2l6ZSA9IDg7CisJCXNjcmVlbl9pbmZvLnJlZF9wb3MgPSAxNjsKKwkJc2NyZWVuX2luZm8ucnN2ZF9zaXplID0gODsKKwkJc2NyZWVuX2luZm8ucnN2ZF9wb3MgPSAyNDsKKwl9CiAKIAllZmlmYl9maXguc21lbV9zdGFydCA9IHNjcmVlbl9pbmZvLmxmYl9iYXNlOwogCWVmaWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBzY3JlZW5faW5mby5sZmJfZGVwdGg7CkBAIC05OCwyMSArMjUwLDI1IEBACiAJICogICAgICAgICAgICAgICAgIG9wdGlvbiB0byBzaW1wbHkgdXNlIHNpemVfdG90YWwgYXMgdGhhdAogCSAqICAgICAgICAgICAgICAgICB3YXN0ZXMgcGxlbnR5IG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlLiAqLwogCXNpemVfcmVtYXAgID0gc2l6ZV92bW9kZSAqIDI7Ci0JaWYgKHNpemVfcmVtYXAgPCBzaXplX3Ztb2RlKQotCQlzaXplX3JlbWFwID0gc2l6ZV92bW9kZTsKIAlpZiAoc2l6ZV9yZW1hcCA+IHNpemVfdG90YWwpCiAJCXNpemVfcmVtYXAgPSBzaXplX3RvdGFsOworCWlmIChzaXplX3JlbWFwICUgUEFHRV9TSVpFKQorCQlzaXplX3JlbWFwICs9IFBBR0VfU0laRSAtIChzaXplX3JlbWFwICUgUEFHRV9TSVpFKTsKIAllZmlmYl9maXguc21lbV9sZW4gPSBzaXplX3JlbWFwOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJlZmlmYiIpKQorCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfcmVtYXAsICJlZmlmYiIpKSB7CisJCXJlcXVlc3Rfc3VjY2VlZGVkID0gMTsKKwl9IGVsc2UgewogCQkvKiBXZSBjYW5ub3QgbWFrZSB0aGlzIGZhdGFsLiBTb21ldGltZXMgdGhpcyBjb21lcyBmcm9tIG1hZ2ljCiAJCSAgIHNwYWNlcyBvdXIgcmVzb3VyY2UgaGFuZGxlcnMgc2ltcGx5IGRvbid0IGtub3cgYWJvdXQgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImVmaWZiOiBjYW5ub3QgcmVzZXJ2ZSB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCiAJCQllZmlmYl9maXguc21lbV9zdGFydCk7CisJfQogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZih1MzIpICogMTYsICZkZXYtPmRldik7CiAJaWYgKCFpbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWZpZmI6IGNhbm5vdCBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3JlbGVhc2VfbWVtOwogCX0KQEAgLTEyNSw3ICsyODEsNyBAQAogCQkJCSIweCV4IEAgMHglbHhcbiIsCiAJCQllZmlmYl9maXguc21lbV9sZW4sIGVmaWZiX2ZpeC5zbWVtX3N0YXJ0KTsKIAkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfdW5tYXA7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZWZpZmI6IGZyYW1lYnVmZmVyIGF0IDB4JWx4LCBtYXBwZWQgdG8gMHglcCwgIgpAQCAtMTc4LDI1ICszMzQsMjcgQEAKIAlpbmZvLT5maXggPSBlZmlmYl9maXg7CiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwogCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7Ci0JCWVyciA9IC1FTk9NRU07CisJaWYgKChlcnIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogY2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKIAkJZ290byBlcnJfdW5tYXA7CiAJfQotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKLQkJZXJyID0gLUVJTlZBTDsKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogY2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKIAkJZ290byBlcnJfZmJfZGVhbG9jOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAotCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwogCXJldHVybiAwOwogCiBlcnJfZmJfZGVhbG9jOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBlcnJfdW5tYXA6CiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CitlcnJfcmVsZWFzZV9mYjoKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7CisJaWYgKHJlcXVlc3Rfc3VjY2VlZGVkKQorCQlyZWxlYXNlX21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIxNCw5ICszNzIsMjIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVmaWZiX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OworCWNoYXIgKm9wdGlvbiA9IE5VTEw7CiAKIAlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSAhPSBWSURFT19UWVBFX0VGSSkKIAkJcmV0dXJuIC1FTk9ERVY7CisJZG1pX2NoZWNrX3N5c3RlbShkbWlfc3lzdGVtX3RhYmxlKTsKKworCWlmIChmYl9nZXRfb3B0aW9ucygiZWZpZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWZpZmJfc2V0dXAob3B0aW9uKTsKKworCS8qIFdlIGRvbid0IGdldCBsaW5lbGVuZ3RoIGZyb20gVUdBIERyYXcgUHJvdG9jb2wsIG9ubHkgZnJvbQorCSAqIEVGSSBHcmFwaGljcyBQcm90b2NvbC4gIFNvIGlmIGl0J3Mgbm90IGluIERNSSwgYW5kIGl0J3Mgbm90CisJICogcGFzc2VkIGluIGZyb20gdGhlIHVzZXIsIHdlIHJlYWxseSBjYW4ndCB1c2UgdGhlIGZyYW1lYnVmZmVyLgorCSAqLworCWlmICghc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGgpCisJCXJldHVybiAtRU5PREVWOwogCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlZmlmYl9kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMDczNzU3MC4uY2Q1ZjIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgpAQCAtODM3LDEzICs4MzUsNiBAQAogCXJldHVybiAoY250KSA/IGNudCA6IGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19LTU9ECi1zdGF0aWMgdm9pZCB0cnlfdG9fbG9hZChpbnQgZmIpCi17Ci0JcmVxdWVzdF9tb2R1bGUoImZiJWQiLCBmYik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KLQogaW50CiBmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7CkBAIC0xMDExLDEwMyArMTAwMiwxMzIgQEAKICAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCAKLWZiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorc3RhdGljIGxvbmcKK2ZiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCSB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwogCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7CiAJc3RydWN0IGZiX2NvbjJmYm1hcCBjb24yZmI7CiAJc3RydWN0IGZiX2NtYXBfdXNlciBjbWFwOwogCXN0cnVjdCBmYl9ldmVudCBldmVudDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlpbnQgaTsKLQkKLQlpZiAoIWZiKQorCWxvbmcgcmV0ID0gMDsKKworCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKKwlmYiA9IGluZm8tPmZib3BzOworCisJaWYgKCFmYikgeworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZCSU9HRVRfVlNDUkVFTklORk86Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPnZhciwKKwkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT52YXIsCiAJCQkJICAgIHNpemVvZih2YXIpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkgeworCQkJcmV0ID0gIC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJaSA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CisJCXJldCA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJaWYgKGkpIHJldHVybiBpOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKIAljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPmZpeCwKKwkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5maXgsCiAJCQkJICAgIHNpemVvZihmaXgpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKIAljYXNlIEZCSU9QVVRDTUFQOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNtYXAsIGFyZ3AsIHNpemVvZihjbWFwKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIChmYl9zZXRfdXNlcl9jbWFwKCZjbWFwLCBpbmZvKSk7CisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSBmYl9zZXRfdXNlcl9jbWFwKCZjbWFwLCBpbmZvKTsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUQ01BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFwLCBhcmdwLCBzaXplb2YoY21hcCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBmYl9jbWFwX3RvX3VzZXIoJmluZm8tPmNtYXAsICZjbWFwKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IGZiX2NtYXBfdG9fdXNlcigmaW5mby0+Y21hcCwgJmNtYXApOworCQlicmVhazsKIAljYXNlIEZCSU9QQU5fRElTUExBWToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQlpID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7CisJCXJldCA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZ2YXIpOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCWlmIChpKQotCQkJcmV0dXJuIGk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQlpZiAocmV0ID09IDAgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCWNhc2UgRkJJT19DVVJTT1I6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAljYXNlIEZCSU9HRVRfQ09OMkZCTUFQOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQkJY29uMmZiLmZyYW1lYnVmZmVyID0gLTE7Ci0JCWV2ZW50LmluZm8gPSBpbmZvOwotCQlldmVudC5kYXRhID0gJmNvbjJmYjsKLQkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsICZldmVudCk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmNvbjJmYiwKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UgaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UgeworCQkJY29uMmZiLmZyYW1lYnVmZmVyID0gLTE7CisJCQlldmVudC5pbmZvID0gaW5mbzsKKwkJCWV2ZW50LmRhdGEgPSAmY29uMmZiOworCQkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsCisJCQkJCQkJCSZldmVudCk7CisJCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmNvbjJmYiwKIAkJCQkgICAgc2l6ZW9mKGNvbjJmYikpID8gLUVGQVVMVCA6IDA7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkKLQkJCXJldHVybiAtIEVGQVVMVDsKLQkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCQlpZiAoY29uMmZiLmZyYW1lYnVmZmVyIDwgMCB8fCBjb24yZmIuZnJhbWVidWZmZXIgPj0gRkJfTUFYKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29uMmZiLmZyYW1lYnVmZmVyIDwgMCB8fCBjb24yZmIuZnJhbWVidWZmZXIgPj0gRkJfTUFYKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pCi0JCSAgICB0cnlfdG9fbG9hZChjb24yZmIuZnJhbWVidWZmZXIpOwotI2VuZGlmIC8qIENPTkZJR19LTU9EICovCi0JCWlmICghcmVnaXN0ZXJlZF9mYltjb24yZmIuZnJhbWVidWZmZXJdKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXF1ZXN0X21vZHVsZSgiZmIlZCIsIGNvbjJmYi5mcmFtZWJ1ZmZlcik7CisJCWlmICghcmVnaXN0ZXJlZF9mYltjb24yZmIuZnJhbWVidWZmZXJdKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAkJZXZlbnQuaW5mbyA9IGluZm87CiAJCWV2ZW50LmRhdGEgPSAmY29uMmZiOwotCQlyZXR1cm4gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCisJCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQLAogCQkJCQkgICAgICAmZXZlbnQpOworCQlicmVhazsKIAljYXNlIEZCSU9CTEFOSzoKIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCWkgPSBmYl9ibGFuayhpbmZvLCBhcmcpOworCQlyZXQgPSBmYl9ibGFuayhpbmZvLCBhcmcpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCXJldHVybiBpOworCQlicmVhazs7CiAJZGVmYXVsdDoKIAkJaWYgKGZiLT5mYl9pb2N0bCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOworCQkJcmV0ID0gLUVOT1RUWTsKKwkJZWxzZQorCQkJcmV0ID0gZmItPmZiX2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMTE2MSw3ICsxMTgxLDcgQEAKIAkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPnRyYW5zcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOworCWVyciA9IGZiX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOwogCiAJaWYgKCFlcnIpIHsKIAkJaWYgKGNvcHlfaW5fdXNlcigmY21hcDMyLT5zdGFydCwKQEAgLTEyMTUsNyArMTIzNSw3IEBACiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKLQllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7CisJZXJyID0gZmJfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7CiAJc2V0X2ZzKG9sZF9mcyk7CiAKIAlpZiAoIWVycikKQEAgLTEyMzMsNyArMTI1Myw3IEBACiAJc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKIAlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJc3dpdGNoKGNtZCkgewogCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86CkBAIC0xMjQyLDcgKzEyNjIsNyBAQAogCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6CiAJCWFyZyA9ICh1bnNpZ25lZCBsb25nKSBjb21wYXRfcHRyKGFyZyk7CiAJY2FzZSBGQklPQkxBTks6Ci0JCXJldCA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldCA9IGZiX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86CkBAIC0xMjU5LDcgKzEyNzksNyBAQAogCQkJcmV0ID0gZmItPmZiX2NvbXBhdF9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCkBAIC0xMjgxLDEzICsxMzAxLDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCWlmIChmYi0+ZmJfbW1hcCkgewogCQlpbnQgcmVzOwotCQlsb2NrX2tlcm5lbCgpOworCQltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAkJcmVzID0gZmItPmZiX21tYXAoaW5mbywgdm1hKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQlyZXR1cm4gcmVzOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAKIAkvKiBmcmFtZSBidWZmZXIgbWVtb3J5ICovCiAJc3RhcnQgPSBpbmZvLT5maXguc21lbV9zdGFydDsKQEAgLTEyOTYsMTMgKzEzMTYsMTMgQEAKIAkJLyogbWVtb3J5IG1hcHBlZCBpbyAqLwogCQlvZmYgLT0gbGVuOwogCQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJc3RhcnQgPSBpbmZvLT5maXgubW1pb19zdGFydDsKIAkJbGVuID0gUEFHRV9BTElHTigoc3RhcnQgJiB+UEFHRV9NQVNLKSArIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXN0YXJ0ICY9IFBBR0VfTUFTSzsKIAlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMyNiwxNSArMTM0NiwxMyBAQAogCiAJaWYgKGZiaWR4ID49IEZCX01BWCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JbG9ja19rZXJuZWwoKTsKLSNpZmRlZiBDT05GSUdfS01PRAotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpCi0JCXRyeV90b19sb2FkKGZiaWR4KTsKLSNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpIHsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwlpZiAoIWluZm8pCisJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgZmJpZHgpOworCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCWlmICghdHJ5X21vZHVsZV9nZXQoaW5mby0+ZmJvcHMtPm93bmVyKSkgewogCQlyZXMgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKQEAgLTEzNTAsNyArMTM2OCw3IEBACiAJCWZiX2RlZmVycmVkX2lvX29wZW4oaW5mbywgaW5vZGUsIGZpbGUpOwogI2VuZGlmCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTM1OSwxMSArMTM3NywxMSBAQAogewogCXN0cnVjdCBmYl9pbmZvICogY29uc3QgaW5mbyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKGluZm8tPmZib3BzLT5mYl9yZWxlYXNlKQogCQlpbmZvLT5mYm9wcy0+ZmJfcmVsZWFzZShpbmZvLDEpOwogCW1vZHVsZV9wdXQoaW5mby0+ZmJvcHMtPm93bmVyKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM3MSw3ICsxMzg5LDcgQEAKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQlmYl9yZWFkLAogCS53cml0ZSA9CWZiX3dyaXRlLAotCS5pb2N0bCA9CWZiX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGZiX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gZmJfY29tcGF0X2lvY3RsLAogI2VuZGlmCkBAIC0xNDQyLDEwICsxNDYwLDEwIEBACiAJCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOworCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCi0JZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGZiX2NsYXNzLCBmYl9pbmZvLT5kZXZpY2UsCi0JCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLAotCQkJCQkgICAgICJmYiVkIiwgaSk7CisJZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAorCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLCAiZmIlZCIsIGkpOwogCWlmIChJU19FUlIoZmJfaW5mby0+ZGV2KSkgewogCQkvKiBOb3QgZmF0YWwgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgZm9yIGZyYW1lYnVmZmVyICVkOyBlcnJubyA9ICVsZFxuIiwgaSwgUFRSX0VSUihmYl9pbmZvLT5kZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwppbmRleCA2YTBhYTE4Li41YzFhMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCkBAIC01NjQsNyArNTY0LDEzIEBACiAJCW1vZGUtPnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOwogCW1vZGUtPnJlZnJlc2ggPSBQSVhFTF9DTE9DSy8oKEhfQUNUSVZFICsgSF9CTEFOS0lORykgKgogCQkJCSAgICAgKFZfQUNUSVZFICsgVl9CTEFOS0lORykpOwotCW1vZGUtPnZtb2RlID0gMDsKKwlpZiAoSU5URVJMQUNFRCkgeworCQltb2RlLT55cmVzICo9IDI7CisJCW1vZGUtPnVwcGVyX21hcmdpbiAqPSAyOworCQltb2RlLT5sb3dlcl9tYXJnaW4gKj0gMjsKKwkJbW9kZS0+dnN5bmNfbGVuICo9IDI7CisJCW1vZGUtPnZtb2RlIHw9IEZCX1ZNT0RFX0lOVEVSTEFDRUQ7CisJfQogCW1vZGUtPmZsYWcgPSBGQl9NT0RFX0lTX0RFVEFJTEVEOwogCiAJRFBSSU5USygiICAgICAgJWQgTUh6ICIsICBQSVhFTF9DTE9DSy8xMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ltYWNmYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzY2ZWYyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoKLSAqIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgSW50ZWwgQmFzZWQgTWFjJ3MKLSAqCi0gKiAoYykgMjAwNiBFZGdhciBIdWNlayA8Z2ltbGlAZGFyay1ncmVlbi5jb20+Ci0gKiBPcmlnaW5hbCBpbWFjIGRyaXZlciB3cml0dGVuIGJ5IEdlcmQgS25vcnIgPGtyYXhlbEBnb2xkYmFjaC5pbi1iZXJsaW4uZGU+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9lZmkuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8dmlkZW8vdmdhLmg+Ci0KLXR5cGVkZWYgZW51bSBfTUFDX1RZUEUgewotCU1fSTE3LAotCU1fSTIwLAotCU1fTUlOSSwKLQlNX01BQ0JPT0ssCi0JTV9VTktOT1dOCi19IE1BQ19UWVBFOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBpbWFjZmJfZGVmaW5lZCBfX2luaXRkYXRhID0gewotCS5hY3RpdmF0ZQkJPSBGQl9BQ1RJVkFURV9OT1csCi0JLmhlaWdodAkJCT0gLTEsCi0JLndpZHRoCQkJPSAtMSwKLQkucmlnaHRfbWFyZ2luCQk9IDMyLAotCS51cHBlcl9tYXJnaW4JCT0gMTYsCi0JLmxvd2VyX21hcmdpbgkJPSA0LAotCS52c3luY19sZW4JCT0gNCwKLQkudm1vZGUJCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGltYWNmYl9maXggX19pbml0ZGF0YSA9IHsKLQkuaWQJCQk9ICJJTUFDIFZHQSIsCi0JLnR5cGUJCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKLQkuYWNjZWwJCQk9IEZCX0FDQ0VMX05PTkUsCi0JLnZpc3VhbAkJCT0gRkJfVklTVUFMX1RSVUVDT0xPUiwKLX07Ci0KLXN0YXRpYyBpbnQgaW52ZXJzZTsKLXN0YXRpYyBpbnQgbW9kZWwJCT0gTV9VTktOT1dOOwotc3RhdGljIGludCBtYW51YWxfaGVpZ2h0Owotc3RhdGljIGludCBtYW51YWxfd2lkdGg7Ci0KLXN0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiAlcyBkZXRlY3RlZCAtIHNldCBzeXN0ZW0gdG8gJWxkXG4iLAotCQlpZC0+aWRlbnQsIChsb25nKWlkLT5kcml2ZXJfZGF0YSk7Ci0KLQltb2RlbCA9IChsb25nKWlkLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBkbWlfc3lzdGVtX3RhYmxlW10gPSB7Ci0JeyBzZXRfc3lzdGVtLCAiaU1hYzQsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiaU1hYzQsMSIpIH0sICh2b2lkKilNX0kxN30sCi0JeyBzZXRfc3lzdGVtLCAiTWFjQm9va1BybzEsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9va1BybzEsMSIpIH0sICh2b2lkKilNX0kxN30sCi0JeyBzZXRfc3lzdGVtLCAiTWFjQm9vazEsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vazEsMSIpfSwgKHZvaWQgKilNX01BQ0JPT0t9LAotCXsgc2V0X3N5c3RlbSwgIk1hY21pbmkxLDEiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJBcHBsZSBDb21wdXRlciwgSW5jLiIpLAotCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY21pbmkxLDEiKX0sICh2b2lkICopTV9NSU5JfSwKLQl7fSwKLX07Ci0KLSNkZWZpbmUJREVGQVVMVF9GQl9NRU0JMTAyNCoxMDI0KjE2Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGltYWNmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCS8qCi0JICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUKLQkgKiAgYWxyZWFkeSByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzCi0JICogIChhY2NvcmRpbmcgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGB2YXInIHN0cnVjdHVyZSkuIFJldHVybgotCSAqICAhPSAwIGZvciBpbnZhbGlkIHJlZ25vLgotCSAqLwotCi0JaWYgKHJlZ25vID49IGluZm8tPmNtYXAubGVuKQotCQlyZXR1cm4gMTsKLQotCWlmIChyZWdubyA8IDE2KSB7Ci0JCXJlZCAgID4+PSA4OwotCQlncmVlbiA+Pj0gODsKLQkJYmx1ZSAgPj49IDg7Ci0JCSgodTMyICopKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCShyZWQgICA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgICB8Ci0JCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJKGJsdWUgIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGZiX29wcyBpbWFjZmJfb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZmJfc2V0Y29scmVnCT0gaW1hY2ZiX3NldGNvbHJlZywKLQkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW1hY2ZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCi17Ci0JY2hhciAqdGhpc19vcHQ7Ci0KLQlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOwotCi0JCWlmICghc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQotCQkJaW52ZXJzZSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJpMTciKSkKLQkJCW1vZGVsID0gTV9JMTc7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJpMjAiKSkKLQkJCW1vZGVsID0gTV9JMjA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJtaW5pIikpCi0JCQltb2RlbCA9IE1fTUlOSTsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgIm1hY2Jvb2siKSkKLQkJCW1vZGVsID0gTV9NQUNCT09LOwotCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImhlaWdodDoiLCA3KSkKLQkJCW1hbnVhbF9oZWlnaHQgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs3LCBOVUxMLCAwKTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ3aWR0aDoiLCA2KSkKLQkJCW1hbnVhbF93aWR0aCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzYsIE5VTEwsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW1hY2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwotCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwotCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOwotCi0Jc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzI7Ci0Jc2NyZWVuX2luZm8ubGZiX3NpemUgPSBERUZBVUxUX0ZCX01FTSAvIDB4MTAwMDA7Ci0Jc2NyZWVuX2luZm8ucGFnZXM9MTsKLQlzY3JlZW5faW5mby5ibHVlX3NpemUgPSA4OwotCXNjcmVlbl9pbmZvLmJsdWVfcG9zID0gMDsKLQlzY3JlZW5faW5mby5ncmVlbl9zaXplID0gODsKLQlzY3JlZW5faW5mby5ncmVlbl9wb3MgPSA4OwotCXNjcmVlbl9pbmZvLnJlZF9zaXplID0gODsKLQlzY3JlZW5faW5mby5yZWRfcG9zID0gMTY7Ci0Jc2NyZWVuX2luZm8ucnN2ZF9zaXplID0gODsKLQlzY3JlZW5faW5mby5yc3ZkX3BvcyA9IDI0OwotCi0Jc3dpdGNoIChtb2RlbCkgewotCWNhc2UgTV9JMTc6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDE0NDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA5MDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMTQ3MiAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX0kyMDoKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMTY4MDsKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDEwNTA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMTcyOCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX01JTkk6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDEwMjQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA3Njg7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMjA0OCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX01BQ0JPT0s6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDEyODA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA4MDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMjA0OCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAwMDAwMDsKLQkJYnJlYWs7Ci0gCX0KLQotCS8qIGlmIHRoZSB1c2VyIHdhbnRzIHRvIG1hbnVhbGx5IHNwZWNpZnkgaGVpZ2h0L3dpZHRoLAotCSAgIHdlIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHRzICovCi0JLyogVE9ETzogZXZlbnR1YWxseSBnZXQgYXV0by1kZXRlY3Rpb24gd29ya2luZyAqLwotCWlmIChtYW51YWxfaGVpZ2h0ID4gMCkKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IG1hbnVhbF9oZWlnaHQ7Ci0JaWYgKG1hbnVhbF93aWR0aCA+IDApCi0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IG1hbnVhbF93aWR0aDsKLQotCWltYWNmYl9maXguc21lbV9zdGFydCA9IHNjcmVlbl9pbmZvLmxmYl9iYXNlOwotCWltYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsID0gc2NyZWVuX2luZm8ubGZiX2RlcHRoOwotCWltYWNmYl9kZWZpbmVkLnhyZXMgPSBzY3JlZW5faW5mby5sZmJfd2lkdGg7Ci0JaW1hY2ZiX2RlZmluZWQueXJlcyA9IHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQ7Ci0JaW1hY2ZiX2ZpeC5saW5lX2xlbmd0aCA9IHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoOwotCi0JLyogICBzaXplX3Ztb2RlIC0tIHRoYXQgaXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciB0aGUKLQkgKiAgICAgICAgICAgICAgICAgdXNlZCB2aWRlbyBtb2RlLCBpLmUuIHRoZSBtaW5pbXVtIGFtb3VudCBvZgotCSAqICAgICAgICAgICAgICAgICBtZW1vcnkgd2UgbmVlZC4gKi8KLQlzaXplX3Ztb2RlID0gaW1hY2ZiX2RlZmluZWQueXJlcyAqIGltYWNmYl9maXgubGluZV9sZW5ndGg7Ci0KLQkvKiAgIHNpemVfdG90YWwgLS0gYWxsIHZpZGVvIG1lbW9yeSB3ZSBoYXZlLiBVc2VkIGZvcgotCSAqICAgICAgICAgICAgICAgICBlbnRyaWVzLCByZXNzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYm91bmRzCi0JICogICAgICAgICAgICAgICAgIGNoZWNraW5nLiAqLwotCXNpemVfdG90YWwgPSBzY3JlZW5faW5mby5sZmJfc2l6ZSAqIDY1NTM2OwotCWlmIChzaXplX3RvdGFsIDwgc2l6ZV92bW9kZSkKLQkJc2l6ZV90b3RhbCA9IHNpemVfdm1vZGU7Ci0KLQkvKiAgIHNpemVfcmVtYXAgLS0gdGhlIGFtb3VudCBvZiB2aWRlbyBtZW1vcnkgd2UgYXJlIGdvaW5nIHRvCi0JICogICAgICAgICAgICAgICAgIHVzZSBmb3IgaW1hY2ZiLiAgV2l0aCBtb2Rlcm4gY2FyZHMgaXQgaXMgbm8KLQkgKiAgICAgICAgICAgICAgICAgb3B0aW9uIHRvIHNpbXBseSB1c2Ugc2l6ZV90b3RhbCBhcyB0aGF0Ci0JICogICAgICAgICAgICAgICAgIHdhc3RlcyBwbGVudHkgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UuICovCi0Jc2l6ZV9yZW1hcCAgPSBzaXplX3Ztb2RlICogMjsKLQlpZiAoc2l6ZV9yZW1hcCA8IHNpemVfdm1vZGUpCi0JCXNpemVfcmVtYXAgPSBzaXplX3Ztb2RlOwotCWlmIChzaXplX3JlbWFwID4gc2l6ZV90b3RhbCkKLQkJc2l6ZV9yZW1hcCA9IHNpemVfdG90YWw7Ci0JaW1hY2ZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbWFjZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJpbWFjZmIiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiaW1hY2ZiOiBjYW5ub3QgcmVzZXJ2ZSB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCi0JCQlpbWFjZmJfZml4LnNtZW1fc3RhcnQpOwotCQkvKiBXZSBjYW5ub3QgbWFrZSB0aGlzIGZhdGFsLiBTb21ldGltZXMgdGhpcyBjb21lcyBmcm9tIG1hZ2ljCi0JCSAgIHNwYWNlcyBvdXIgcmVzb3VyY2UgaGFuZGxlcnMgc2ltcGx5IGRvbid0IGtub3cgYWJvdXQgKi8KLQl9Ci0KLQlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgJmRldi0+ZGV2KTsKLQlpZiAoIWluZm8pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9tZW07Ci0JfQotCWluZm8tPnBzZXVkb19wYWxldHRlID0gaW5mby0+cGFyOwotCWluZm8tPnBhciA9IE5VTEw7Ci0KLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBpbWFjZmJfZml4LnNtZW1fbGVuKTsKLQlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaW1hY2ZiOiBhYm9ydCwgY2Fubm90IGlvcmVtYXAgdmlkZW8gbWVtb3J5ICIKLQkJCQkiMHgleCBAIDB4JWx4XG4iLAotCQkJaW1hY2ZiX2ZpeC5zbWVtX2xlbiwgaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0KTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBmcmFtZWJ1ZmZlciBhdCAweCVseCwgbWFwcGVkIHRvIDB4JXAsICIKLQkgICAgICAgInVzaW5nICVkaywgdG90YWwgJWRrXG4iLAotCSAgICAgICBpbWFjZmJfZml4LnNtZW1fc3RhcnQsIGluZm8tPnNjcmVlbl9iYXNlLAotCSAgICAgICBzaXplX3JlbWFwLzEwMjQsIHNpemVfdG90YWwvMTAyNCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBtb2RlIGlzICVkeCVkeCVkLCBsaW5lbGVuZ3RoPSVkLCBwYWdlcz0lZFxuIiwKLQkgICAgICAgaW1hY2ZiX2RlZmluZWQueHJlcywgaW1hY2ZiX2RlZmluZWQueXJlcywKLQkgICAgICAgaW1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIGltYWNmYl9maXgubGluZV9sZW5ndGgsCi0JICAgICAgIHNjcmVlbl9pbmZvLnBhZ2VzKTsKLQotCWltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IGltYWNmYl9kZWZpbmVkLnhyZXM7Ci0JaW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gaW1hY2ZiX2ZpeC5zbWVtX2xlbiAvCi0JCQkJCWltYWNmYl9maXgubGluZV9sZW5ndGg7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBzY3JvbGxpbmc6IHJlZHJhd1xuIik7Ci0JaW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gaW1hY2ZiX2RlZmluZWQueXJlczsKLQotCS8qIHNvbWUgZHVtbXkgdmFsdWVzIGZvciB0aW1pbmcgdG8gbWFrZSBmYnNldCBoYXBweSAqLwotCWltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gaW1hY2ZiX2RlZmluZWQueHJlcyAqCi0JCQkJCTEwMDAgLyBpbWFjZmJfZGVmaW5lZC55cmVzOwotCWltYWNmYl9kZWZpbmVkLmxlZnRfbWFyZ2luICA9IChpbWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwotCWltYWNmYl9kZWZpbmVkLmhzeW5jX2xlbiAgICA9IChpbWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwotCi0JaW1hY2ZiX2RlZmluZWQucmVkLm9mZnNldCAgICA9IHNjcmVlbl9pbmZvLnJlZF9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCAgICA9IHNjcmVlbl9pbmZvLnJlZF9zaXplOwotCWltYWNmYl9kZWZpbmVkLmdyZWVuLm9mZnNldCAgPSBzY3JlZW5faW5mby5ncmVlbl9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoICA9IHNjcmVlbl9pbmZvLmdyZWVuX3NpemU7Ci0JaW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgICA9IHNjcmVlbl9pbmZvLmJsdWVfcG9zOwotCWltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoICAgPSBzY3JlZW5faW5mby5ibHVlX3NpemU7Ci0JaW1hY2ZiX2RlZmluZWQudHJhbnNwLm9mZnNldCA9IHNjcmVlbl9pbmZvLnJzdmRfcG9zOwotCWltYWNmYl9kZWZpbmVkLnRyYW5zcC5sZW5ndGggPSBzY3JlZW5faW5mby5yc3ZkX3NpemU7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6ICVzOiAiCi0JICAgICAgICJzaXplPSVkOiVkOiVkOiVkLCBzaGlmdD0lZDolZDolZDolZFxuIiwKLQkgICAgICAgIlRydWVjb2xvciIsCi0JICAgICAgIHNjcmVlbl9pbmZvLnJzdmRfc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8ucmVkX3NpemUsCi0JICAgICAgIHNjcmVlbl9pbmZvLmdyZWVuX3NpemUsCi0JICAgICAgIHNjcmVlbl9pbmZvLmJsdWVfc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8ucnN2ZF9wb3MsCi0JICAgICAgIHNjcmVlbl9pbmZvLnJlZF9wb3MsCi0JICAgICAgIHNjcmVlbl9pbmZvLmdyZWVuX3BvcywKLQkgICAgICAgc2NyZWVuX2luZm8uYmx1ZV9wb3MpOwotCi0JaW1hY2ZiX2ZpeC55cGFuc3RlcCAgPSAwOwotCWltYWNmYl9maXgueXdyYXBzdGVwID0gMDsKLQotCS8qIHJlcXVlc3QgZmFpbHVyZSBkb2VzIG5vdCBmYXplIHVzLCBhcyB2Z2Fjb24gcHJvYmFibHkgaGFzIHRoaXMKLQkgKiByZWdpb24gYWxyZWFkeSAoRklYTUUpICovCi0JcmVxdWVzdF9yZWdpb24oMHgzYzAsIDMyLCAiaW1hY2ZiIik7Ci0KLQlpbmZvLT5mYm9wcyA9ICZpbWFjZmJfb3BzOwotCWluZm8tPnZhciA9IGltYWNmYl9kZWZpbmVkOwotCWluZm8tPmZpeCA9IGltYWNmYl9maXg7Ci0JaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwotCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk8MCkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9mYl9kZWFsb2M7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCi0JICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9mYl9kZWFsb2M6Ci0JZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLWVycl91bm1hcDoKLQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotZXJyX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihpbWFjZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltYWNmYl9kcml2ZXIgPSB7Ci0JLnByb2JlCT0gaW1hY2ZiX3Byb2JlLAotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCT0gImltYWNmYiIsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGltYWNmYl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiaW1hY2ZiIiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGltYWNmYl9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQljaGFyICpvcHRpb24gPSBOVUxMOwotCi0JaWYgKCFlZmlfZW5hYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGRtaV9zeXN0ZW1fdGFibGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAobW9kZWwgPT0gTV9VTktOT1dOKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChmYl9nZXRfb3B0aW9ucygiaW1hY2ZiIiwgJm9wdGlvbikpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW1hY2ZiX3NldHVwKG9wdGlvbik7Ci0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbWFjZmJfZHJpdmVyKTsKLQotCWlmICghcmV0KSB7Ci0JCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW1hY2ZiX2RldmljZSk7Ci0JCWlmIChyZXQpCi0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW1hY2ZiX2RyaXZlcik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1tb2R1bGVfaW5pdChpbWFjZmJfaW5pdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmggYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCmluZGV4IDMzMjVmYmQuLmE1MGJlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaApAQCAtMTIsOSArMTIsOSBAQAogI2VuZGlmCiAKIC8qKiogVmVyc2lvbi9uYW1lICoqKi8KLSNkZWZpbmUgSU5URUxGQl9WRVJTSU9OCQkJIjAuOS41IgorI2RlZmluZSBJTlRFTEZCX1ZFUlNJT04JCQkiMC45LjYiCiAjZGVmaW5lIElOVEVMRkJfTU9EVUxFX05BTUUJCSJpbnRlbGZiIgotI2RlZmluZSBTVVBQT1JURURfQ0hJUFNFVFMJCSI4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00vOTY1Ry85NjVHTSIKKyNkZWZpbmUgU1VQUE9SVEVEX0NISVBTRVRTCQkiODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS85NDVHLzk0NUdNLzk0NUdNRS85NjVHLzk2NUdNIgogCiAKIC8qKiogRGVidWcvZmVhdHVyZSBkZWZpbmVzICoqKi8KQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTQkweDI1OTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHCTB4Mjc3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNCTB4MjdBMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRQkweDI3QUUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHCTB4MjlBMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUdNCTB4MkEwMgogCkBAIC0xNjAsNiArMTYxLDcgQEAKIAlJTlRFTF85MTVHTSwKIAlJTlRFTF85NDVHLAogCUlOVEVMXzk0NUdNLAorCUlOVEVMXzk0NUdNRSwKIAlJTlRFTF85NjVHLAogCUlOVEVMXzk2NUdNLAogfTsKQEAgLTM2Myw2ICszNjUsNyBAQAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTE1R00pIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUcpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUdNKSB8fAlcCisJCQkoKGRpbmZvKS0+Y2hpcHNldCA9PSBJTlRFTF85NDVHTUUpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk2NUcpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk2NUdNKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYwppbmRleCBmY2Y5ZmFkLi41ZDg5NmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYwpAQCAtMTcxLDYgKzE3MSw3IEBACiAJCS8qIGhhcyBzb21lIExWRFMgKyB0di1vdXQgKi8KIAljYXNlIElOVEVMXzk0NUc6CiAJY2FzZSBJTlRFTF85NDVHTToKKwljYXNlIElOVEVMXzk0NUdNRToKIAljYXNlIElOVEVMXzk2NUc6CiAJY2FzZSBJTlRFTF85NjVHTToKIAkJLyogU0RWTyBwb3J0cyBoYXZlIGEgc2luZ2xlIGNvbnRyb2wgYnVzIC0gMiBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCBlNDQzMDNmLi5hMDllMjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTIsNyArMiw3IEBACiAgKiBpbnRlbGZiCiAgKgogICogTGludXggZnJhbWVidWZmZXIgZHJpdmVyIGZvciBJbnRlbChSKSA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLwotICogOTQ1Ry85NDVHTS85NjVHLzk2NUdNIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCisgKiA5NDVHLzk0NUdNLzk0NUdNRS85NjVHLzk2NUdNIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDIsIDIwMDMgRGF2aWQgRGF3ZXMgPGRhd2VzQHhmcmVlODYub3JnPgogICogICAgICAgICAgICAgICAgICAgMjAwNCBTeWx2YWluIE1leWVyCkBAIC0xMDIsNiArMTAyLDkgQEAKICAqCiAgKiAgICAwNC8yMDA4IC0gVmVyc2lvbiAwLjkuNQogICogICAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciA5NjVHLzk2NUdNLiAoTWFpayBCcm9lbW1lIDxtYnJvZW1tZUBwbHVzc2VydmVyLmRlPikKKyAqCisgKiAgICAwOC8yMDA4IC0gVmVyc2lvbiAwLjkuNgorICogICAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciA5NDVHTUUuIChQaGlsIEVuZGVjb3R0IDxzcGFtX2Zyb21faW50ZWxmYkBjaGV6cGhpbC5vcmc+KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE4Myw2ICsxODYsNyBAQAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTE1R00gfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1RyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1R00gfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R01FLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NDVHTUUgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTY1RyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTY1R00gfSwKIAl7IDAsIH0KQEAgLTU1NSw2ICs1NTksNyBAQAogCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSkgfHwKIAkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RykgIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNKSB8fAorCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTUUpIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUcpIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUdNKSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggOGU2ZDZhNC4uOGIyNmIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtMTQzLDYgKzE0MywxMiBAQAogCQlkaW5mby0+bW9iaWxlID0gMTsKIAkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTl4eDsKIAkJcmV0dXJuIDA7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRToKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTQ1R01FIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF85NDVHTUU7CisJCWRpbmZvLT5tb2JpbGUgPSAxOworCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOXh4OworCQlyZXR1cm4gMDsKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RzoKIAkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTY1RyI7CiAJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfOTY1RzsKQEAgLTE4Niw2ICsxOTIsNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R006CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1R006CiAJCS8qIDkxNSwgOTQ1IGFuZCA5NjUgY2hpcHNldHMgc3VwcG9ydCBhIDI1Nk1CIGFwZXJ0dXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IGMwMjEzNjIuLjhlN2EyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTE0NTMsNiArMTQ1MywxMyBAQAogCQlNR0FfRzEwMCwKIAkJJnZiRzEwMCwKIAkJIk1HQS1HMTAwIChBR1ApIn0sCisJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwRVZfUENJLAkweEZGLAorCQkwLAkJCTAsCisJCURFVkZfRzIwMCwKKwkJMjMwMDAwLAorCQlNR0FfRzIwMCwKKwkJJnZiRzIwMCwKKwkJIk1HQS1HMjAwZVYgKFBDSSkifSwKIAl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJLAkweEZGLAogCQkwLAkJCTAsCiAJCURFVkZfRzIwMCwKQEAgLTIxMTgsNiArMjEyNSw4IEBACiAJCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9BR1AsCiAJCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMEVWX1BDSSwKKwkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX1BDSSwKIAkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwppbmRleCBhZmVlZDA2Li5kZjFmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJZXBkX2ZyYW1lX3RhYmxlW3Bhci0+ZHRdLndmbV9zaXplID0gdXNlcl93Zm1fc2l6ZTsKIAogCWlmIChzaXplICE9IGVwZF9mcmFtZV90YWJsZVtwYXItPmR0XS53Zm1fc2l6ZSkgewotCQlkZXZfZXJyKGRldiwgIkVycm9yOiB1bmV4cGVjdGVkIHNpemUgJWQgIT0gJWRcbiIsIHNpemUsCisJCWRldl9lcnIoZGV2LCAiRXJyb3I6IHVuZXhwZWN0ZWQgc2l6ZSAlWmQgIT0gJWRcbiIsIHNpemUsCiAJCQkJCWVwZF9mcmFtZV90YWJsZVtwYXItPmR0XS53Zm1fc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbmVvZmIuYyBiL2RyaXZlcnMvdmlkZW8vbmVvZmIuYwppbmRleCAyNTE3MmIyLi5iZmI4MDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9uZW9mYi5jCkBAIC00MjYsMTEgKzQyNiwxMSBAQAogewogCXVuc2lnbmVkIGNoYXIgdG1wOwogCisJdG1wID0gdmdhX3JzZXEoTlVMTCwgMHgwMSk7CiAJaWYgKG9uKSB7CiAJCS8qCiAJCSAqIFR1cm4gb2ZmIHNjcmVlbiBhbmQgZGlzYWJsZSBzZXF1ZW5jZXIuCiAJCSAqLwotCQl0bXAgPSB2Z2FfcnNlcShOVUxMLCAweDAxKTsKIAkJdmdhX3dzZXEoTlVMTCwgMHgwMCwgMHgwMSk7CQkvKiBTeW5jaHJvbm91cyBSZXNldCAqLwogCQl2Z2Ffd3NlcShOVUxMLCAweDAxLCB0bXAgfCAweDIwKTsJLyogZGlzYWJsZSB0aGUgZGlzcGxheSAqLwogCkBAIC00MzksNyArNDM5LDYgQEAKIAkJLyoKIAkJICogUmVlbmFibGUgc2VxdWVuY2VyLCB0aGVuIHR1cm4gb24gc2NyZWVuLgogCQkgKi8KLQkJdG1wID0gdmdhX3JzZXEoTlVMTCwgMHgwMSk7CiAJCXZnYV93c2VxKE5VTEwsIDB4MDEsIHRtcCAmIH4weDIwKTsJLyogcmVlbmFibGUgZGlzcGxheSAqLwogCQl2Z2Ffd3NlcShOVUxMLCAweDAwLCAweDAzKTsJCS8qIGNsZWFyIHN5bmNocm9ub3VzcmVzZXQgKi8KIApAQCAtNTU4LDE0ICs1NTcsMTIgQEAKIHsKIAlzdHJ1Y3QgbmVvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7CiAJaWYgKCFwYXItPnJlZl9jb3VudCkgewogCQltZW1zZXQoJnBhci0+c3RhdGUsIDAsIHNpemVvZihzdHJ1Y3Qgdmdhc3RhdGUpKTsKIAkJcGFyLT5zdGF0ZS5mbGFncyA9IFZHQV9TQVZFX01PREUgfCBWR0FfU0FWRV9GT05UUzsKIAkJc2F2ZV92Z2EoJnBhci0+c3RhdGUpOwogCX0KIAlwYXItPnJlZl9jb3VudCsrOwotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsMTYgKzU3MiwxMyBAQAogewogCXN0cnVjdCBuZW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKLQlpZiAoIXBhci0+cmVmX2NvdW50KSB7Ci0JCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCWlmICghcGFyLT5yZWZfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWlmIChwYXItPnJlZl9jb3VudCA9PSAxKSB7CiAJCXJlc3RvcmVfdmdhKCZwYXItPnN0YXRlKTsKIAl9CiAJcGFyLT5yZWZfY291bnQtLTsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjQ4LDEwICs2NDIsMTAgQEAKIAl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKIAl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOwogCisJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgODoJCS8qIFBTRVVET0NPTE9VUiwgMjU2ICovCi0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJCXZhci0+cmVkLm9mZnNldCA9IDA7CiAJCXZhci0+cmVkLmxlbmd0aCA9IDg7CiAJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKQEAgLTY2MSw4ICs2NTUsNiBAQAogCQlicmVhazsKIAogCWNhc2UgMTY6CQkvKiBESVJFQ1RDT0xPVVIsIDY0ayAqLwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKIAkJdmFyLT5yZWQubGVuZ3RoID0gNTsKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwpAQCAtNjcyLDggKzY2NCw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSAyNDoJCS8qIFRSVUVDT0xPVVIsIDE2bSAqLwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKIAkJdmFyLT5yZWQubGVuZ3RoID0gODsKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwpAQCAtNzA0LDggKzY5NCw2IEBACiAJaWYgKHZyYW1sZW4gPiA0ICogMTAyNCAqIDEwMjQpCiAJCXZyYW1sZW4gPSA0ICogMTAyNCAqIDEwMjQ7CiAKLQlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCi0JCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCWlmICh2YXItPnhyZXNfdmlydHVhbCA8IHZhci0+eHJlcykKIAkJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7CiAKQEAgLTcyMiw4ICs3MTAsNiBAQAogCSAgIGlmIGl0IHdhcyBwb3NzaWJsZS4gV2Ugc2hvdWxkIHJldHVybiAtRUlOVkFMLCBidXQgSSBkaXNhZ3JlZSAqLwogCWlmICh2YXItPnlyZXNfdmlydHVhbCA8IHZhci0+eXJlcykKIAkJdmFyLT55cmVzID0gdmFyLT55cmVzX3ZpcnR1YWw7Ci0JaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQotCQl2YXItPnhyZXMgPSB2YXItPnhyZXNfdmlydHVhbDsKIAlpZiAodmFyLT54b2Zmc2V0ICsgdmFyLT54cmVzID4gdmFyLT54cmVzX3ZpcnR1YWwpCiAJCXZhci0+eG9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzOwogCWlmICh2YXItPnlvZmZzZXQgKyB2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkKQEAgLTExODYsOCArMTE3MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZW9mYl91cGRhdGVfc3RhcnQoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCisvKgorICogICAgUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKKyAqLworc3RhdGljIGludCBuZW9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5lb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCXN0cnVjdCB2Z2FzdGF0ZSAqc3RhdGUgPSAmcGFyLT5zdGF0ZTsKQEAgLTEyMTYsMzUgKzEyMDUsNyBAQAogCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCAweDBFLCAoKChCYXNlID4+IDE2KSAmIDB4MGYpIHwgKG9sZEV4dENSVERpc3BBZGRyICYgMHhmMCkpKTsKIAogCW5lb0xvY2soc3RhdGUpOwotfQogCi0vKgotICogICAgUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKLSAqLwotc3RhdGljIGludCBuZW9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JdV9pbnQgeV9ib3R0b207Ci0KLQl5X2JvdHRvbSA9IHZhci0+eW9mZnNldDsKLQotCWlmICghKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkpCi0JCXlfYm90dG9tICs9IHZhci0+eXJlczsKLQotCWlmICh2YXItPnhvZmZzZXQgPiAodmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoeV9ib3R0b20gPiBpbmZvLT52YXIueXJlc192aXJ0dWFsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW5lb2ZiX3VwZGF0ZV9zdGFydChpbmZvLCB2YXIpOwotCi0JaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0KLQlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKQotCQlpbmZvLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7Ci0JZWxzZQotCQlpbmZvLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOwogCXJldHVybiAwOwogfQogCkBAIC0xOTkyLDcgKzE5NTMsNiBAQAogCiAJaW5mby0+Zml4LmFjY2VsID0gaWQtPmRyaXZlcl9kYXRhOwogCi0JbXV0ZXhfaW5pdCgmcGFyLT5vcGVuX2xvY2spOwogCXBhci0+cGNpX2J1cnN0ID0gIW5vcGNpYnVyc3Q7CiAJcGFyLT5sY2Rfc3RyZXRjaCA9ICFub3N0cmV0Y2g7CiAJcGFyLT5saWJyZXR0byA9IGxpYnJldHRvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwppbmRleCA2ZWZjZjg5Li5kZmI3MmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB7Ci0JdTMyCQliYXNlOworCXZvaWQgX19pb21lbQkqYmFzZTsKIAogCXN0cnVjdCBvbWFwZmJfbWVtX2Rlc2MJbWVtX2Rlc2M7CiAJc3RydWN0IHJlc21hcAkJKnJlc19tYXBbRElTUENfTUVNVFlQRV9OVU1dOwpAQCAtMjEyLDkgKzIxMiw5IEBACiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX0NPTlRST0wsIGwpOwogCiAJLyogU2V0IGJ5cGFzcyBtb2RlIGluIFJGQkkgbW9kdWxlICovCi0JbCA9IF9fcmF3X3JlYWRsKGlvX3AydihSRkJJX0NPTlRST0wpKTsKKwlsID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhSRkJJX0NPTlRST0wpKTsKIAlsIHw9IGVuYWJsZSA/IDAgOiAoMSA8PCAxKTsKLQlfX3Jhd193cml0ZWwobCwgaW9fcDJ2KFJGQklfQ09OVFJPTCkpOworCV9fcmF3X3dyaXRlbChsLCBJT19BRERSRVNTKFJGQklfQ09OVFJPTCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbGNkX2RhdGFfbGluZXMoaW50IGRhdGFfbGluZXMpCkBAIC0xMzQ5LDE0ICsxMzQ5LDE5IEBACiAKIAltZW1zZXQoJmRpc3BjLCAwLCBzaXplb2YoZGlzcGMpKTsKIAotCWRpc3BjLmJhc2UgPSBpb19wMnYoRElTUENfQkFTRSk7CisJZGlzcGMuYmFzZSA9IGlvcmVtYXAoRElTUENfQkFTRSwgU1pfMUspOworCWlmICghZGlzcGMuYmFzZSkgeworCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJjYW4ndCBpb3JlbWFwIERJU1BDXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJZGlzcGMuZmJkZXYgPSBmYmRldjsKIAlkaXNwYy5leHRfbW9kZSA9IGV4dF9tb2RlOwogCiAJaW5pdF9jb21wbGV0aW9uKCZkaXNwYy5mcmFtZV9kb25lKTsKIAogCWlmICgociA9IGdldF9kc3NfY2xvY2tzKCkpIDwgMCkKLQkJcmV0dXJuIHI7CisJCWdvdG8gZmFpbDA7CiAKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygxKTsKIAllbmFibGVfbGNkX2Nsb2NrcygxKTsKQEAgLTE0MTQsNyArMTQxOSw3IEBACiAJfQogCiAJLyogTDMgZmlyZXdhbGwgc2V0dGluZzogZW5hYmxlIGFjY2VzcyB0byBPQ00gUkFNICovCi0JX19yYXdfd3JpdGVsKDB4NDAyMDAwYjAsIGlvX3AydigweDY4MDA1MGEwKSk7CisJX19yYXdfd3JpdGVsKDB4NDAyMDAwYjAsIElPX0FERFJFU1MoMHg2ODAwNTBhMCkpOwogCiAJaWYgKChyID0gYWxsb2NfcGFsZXR0ZV9yYW0oKSkgPCAwKQogCQlnb3RvIGZhaWwyOwpAQCAtMTQ2NCw3ICsxNDY5LDggQEAKIAllbmFibGVfbGNkX2Nsb2NrcygwKTsKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOwotCitmYWlsMDoKKwlpb3VubWFwKGRpc3BjLmJhc2UpOwogCXJldHVybiByOwogfQogCkBAIC0xNDgxLDYgKzE0ODcsNyBAQAogCWZyZWVfaXJxKElOVF8yNFhYX0RTU19JUlEsIGRpc3BjLmZiZGV2KTsKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOworCWlvdW5tYXAoZGlzcGMuYmFzZSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBsY2RfY3RybCBvbWFwMl9pbnRfY3RybCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKaW5kZXggZWIxNTEyYi4uZWY3MjBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKQEAgLTQwLDQgKzQwLDYgQEAKIGV4dGVybiBpbnQgIG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEodm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAyX2ludF9jdHJsOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYwppbmRleCA4OGMxOWQ0Li42ZmY1NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBsY2RfcGFuZWwgaDRfcGFuZWwgPSB7CitzdGF0aWMgc3RydWN0IGxjZF9wYW5lbCBoNF9wYW5lbCA9IHsKIAkubmFtZQkJPSAiaDQiLAogCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCwKIApAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGg0X3BhbmVsX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGg0X3BhbmVsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaDRfcGFuZWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBoNF9wYW5lbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBoNF9wYW5lbF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwppbmRleCA2YTQyYzZhLi40YzRmN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwpAQCAtMzIsNDMgKzMyLDQzIEBACiB7CiAJaW50IHIgPSAwOwogCi0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKDE0KSkgeworCWlmIChncGlvX3JlcXVlc3QoMTQsICJsY2RfZW4wIikpIHsKIAkJcHJfZXJyKE1PRFVMRV9OQU1FICI6IGNhbid0IHJlcXVlc3QgR1BJTyAxNFxuIik7CiAJCXIgPSAtMTsKIAkJZ290byBleGl0OwogCX0KLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oMTUpKSB7CisJaWYgKGdwaW9fcmVxdWVzdCgxNSwgImxjZF9lbjEiKSkgewogCQlwcl9lcnIoTU9EVUxFX05BTUUgIjogY2FuJ3QgcmVxdWVzdCBHUElPIDE1XG4iKTsKLQkJb21hcF9mcmVlX2dwaW8oMTQpOworCQlncGlvX2ZyZWUoMTQpOwogCQlyID0gLTE7CiAJCWdvdG8gZXhpdDsKIAl9CiAJLyogY29uZmlndXJlIEdQSU8oMTQsIDE1KSBhcyBvdXRwdXRzICovCi0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMTQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDE1LCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTQsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNSwgMCk7CiBleGl0OgogCXJldHVybiByOwogfQogCiBzdGF0aWMgdm9pZCBpbm5vdmF0b3IxNjEwX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCiB7Ci0Jb21hcF9mcmVlX2dwaW8oMTUpOwotCW9tYXBfZnJlZV9ncGlvKDE0KTsKKwlncGlvX2ZyZWUoMTUpOworCWdwaW9fZnJlZSgxNCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCiB7CiAJLyogc2V0IEdQSU8xNCBhbmQgR1BJTzE1IGhpZ2ggKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMTQsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNSwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoMTQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKDE1LCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQogewogCS8qIHNldCBHUElPMTMsIEdQSU8xNCBhbmQgR1BJTzE1IGxvdyAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDE1LCAwKTsKKwlncGlvX3NldF92YWx1ZSgxNCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoMTUsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbm5vdmF0b3IxNjEwX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMKaW5kZXggYTRhNzI1Zi4uMzc5Yzk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jCkBAIC0yOSw2ICsyOSw3IEBACiAKIHN0YXRpYyBpbnQgb3NrX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsIHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKIHsKKwkvKiBncGlvMiB3YXMgYWxsb2NhdGVkIGluIGJvYXJkIGluaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDcsMTEgKzQ4LDggQEAKIAkvKiBTZXQgUFdMIGxldmVsICovCiAJb21hcF93cml0ZWIoMHhGRiwgT01BUF9QV0xfRU5BQkxFKTsKIAotCS8qIGNvbmZpZ3VyZSBHUElPMiBhcyBvdXRwdXQgKi8KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigyLCAwKTsKLQotCS8qIHNldCBHUElPMiBoaWdoICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDIsIDEpOworCS8qIHNldCBHUElPMiBoaWdoIChsY2QgcG93ZXIgZW5hYmxlZCkgKi8KKwlncGlvX3NldF92YWx1ZSgyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjUsNyArNjMsNyBAQAogCW9tYXBfd3JpdGViKDB4MDAsIE9NQVBfUFdMX0NMS19FTkFCTEUpOwogCiAJLyogc2V0IEdQSU8yIGxvdyAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgyLCAwKTsKKwlncGlvX3NldF92YWx1ZSgyLCAwKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3NrX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9zeDEuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfc3gxLmMKaW5kZXggY2FhNmE4OS4uZTU1ZGUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9zeDEuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3N4MS5jCkBAIC04MSwyMSArODEsMjEgQEAKIAlpbnQgaSwgc2hpZnRlciA9IDB4ODA7CiAKIAlpZiAoIWZsYWcpCi0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0EwLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19BMCwgMCk7CiAJbWRlbGF5KDIpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfUkQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEFfTENEX1NTQ19SRCwgMSk7CiAKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoQV9MQ0RfU1NDX1NELCBmbGFnKTsKKwlncGlvX3NldF92YWx1ZShBX0xDRF9TU0NfU0QsIGZsYWcpOwogCiAJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAwKTsKIAlPTUFQX01DQlNQX1dSSVRFKE9NQVAxNTEwX01DQlNQM19CQVNFLCBQQ1IwLCAweDIyMDIpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAwKTsKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19TRCwgc2hpZnRlciAmIGJ5dGUpOworCQlncGlvX3NldF92YWx1ZShBX0xDRF9TU0NfU0QsIHNoaWZ0ZXIgJiBieXRlKTsKIAkJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAyKTsKIAkJc2hpZnRlciA+Pj0gMTsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQTAsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQTAsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X3N5c3RlbSh2b2lkKQpAQCAtMTA3LDI1ICsxMDcsMTggQEAKIHN0YXRpYyB2b2lkIHNldHVwX0dQSU8odm9pZCkKIHsKIAkvKiBuZXcgd2F2ZSAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKEFfTENEX1NTQ19SRCk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oQV9MQ0RfU1NDX1NEKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbyhfQV9MQ0RfUkVTRVQpOwotCW9tYXBfcmVxdWVzdF9ncGlvKF9BX0xDRF9TU0NfQ1MpOwotCW9tYXBfcmVxdWVzdF9ncGlvKF9BX0xDRF9TU0NfQTApOworCWdwaW9fcmVxdWVzdChBX0xDRF9TU0NfUkQsICJsY2Rfc3NjX3JkIik7CisJZ3Bpb19yZXF1ZXN0KEFfTENEX1NTQ19TRCwgImxjZF9zc2Nfc2QiKTsKKwlncGlvX3JlcXVlc3QoX0FfTENEX1JFU0VULCAibGNkX3Jlc2V0Iik7CisJZ3Bpb19yZXF1ZXN0KF9BX0xDRF9TU0NfQ1MsICJsY2Rfc3NjX2NzIik7CisJZ3Bpb19yZXF1ZXN0KF9BX0xDRF9TU0NfQTAsICJsY2Rfc3NjX2EwIik7CiAKLQkvKiBzZXQgYWxsIEdQSU9zIHRvIG91dHB1dCAqLwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKEFfTENEX1NTQ19SRCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oQV9MQ0RfU1NDX1NELCAwKTsKLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihfQV9MQ0RfUkVTRVQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKF9BX0xDRF9TU0NfQ1MsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKF9BX0xDRF9TU0NfQTAsIDApOwotCi0JLyogc2V0IEdQSU8gZGF0YSAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfUkQsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfU0QsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfUkVTRVQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19BMCwgMSk7CisJLyogc2V0IEdQSU9zIHRvIG91dHB1dCwgd2l0aCBpbml0aWFsIGRhdGEgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQV9MQ0RfU1NDX1JELCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQV9MQ0RfU1NDX1NELCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoX0FfTENEX1JFU0VULCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KF9BX0xDRF9TU0NfQTAsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNwbGF5X2luaXQodm9pZCkKQEAgLTEzOSw2MSArMTMyLDYxIEBACiAJbWRlbGF5KDIpOwogCiAJLyogcmVzZXQgTENEICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19TRCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoQV9MQ0RfU1NDX1NELCAxKTsKIAllcHNvbl9zZW5kYnl0ZSgwLCAweDI1KTsKIAotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfUkVTRVQsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9SRVNFVCwgMCk7CiAJbWRlbGF5KDEwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1JFU0VULCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfUkVTRVQsIDEpOwogCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgyKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCwgcGhhc2UgMSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4Q0EpOwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzFbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAyICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDQik7CiAJZm9yIChpID0gMDsgaSA8IDEyNTsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzJbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAyYSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4Q0MpOwogCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzNbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAzICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhCQyk7CiAJZXBzb25fc2VuZGJ5dGUoMSwgMHgwOCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDQgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweDA3KTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDA1KTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgNSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4OTQpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA2ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDNik7CiAJZXBzb25fc2VuZGJ5dGUoMSwgMHg4MCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgxMDApOyAvKiB1c2VkIHRvIGJlIDEwMDAgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA3ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHgxNik7CkBAIC0yMDEsOCArMTk0LDggQEAKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweEIxKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgOCAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4NzYpOwpAQCAtMjEwLDEyICsyMDMsMTIgQEAKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweERCKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgOSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4QUYpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKIH0KIAogc3RhdGljIGludCBzeDFfcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQpAQCAtMjMxLDE4ICsyMjQsMTggQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJTWDE6IExDRCBwYW5lbCBkaXNhYmxlXG4iKTsKIAlzeDFfc2V0bW1pcG93ZXIoMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHgyNSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhBRSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgxMDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCWVwc29uX3NlbmRieXRlKDAsIDB4OTUpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKIH0KIAogc3RhdGljIGludCBzeDFfcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMKaW5kZXggODM1MTRmMC4uNmUyZWE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jCkBAIC0zNCw2ICszNCw4IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjaW5jbHVkZSAibGNkYy5oIgorCiAjZGVmaW5lIE1PRFVMRV9OQU1FCQkJImxjZGMiCiAKICNkZWZpbmUgT01BUF9MQ0RDX0JBU0UJCQkweGZmZmVjMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5oIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuaAppbmRleCBhZGI3MzFlNS4uODQ1MjIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5oCkBAIC00LDQgKzQsNiBAQAogaW50IG9tYXBfbGNkY19zZXRfZG1hX2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwogdm9pZCBvbWFwX2xjZGNfZnJlZV9kbWFfY2FsbGJhY2sodm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmwgb21hcDFfaW50X2N0cmw7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCA1MWExMzhiLi41YTVlNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtMzEsMTEgKzMxLDE0IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgogCisjaW5jbHVkZSAibGNkYy5oIgorI2luY2x1ZGUgImRpc3BjLmgiCisKICNkZWZpbmUgTU9EVUxFX05BTUUJIm9tYXBmYiIKIAogc3RhdGljIHVuc2lnbmVkIGludAlkZWZfYWNjZWw7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlkZWZfdnJhbVtPTUFQRkJfUExBTkVfTlVNXTsKLXN0YXRpYyBpbnQJCWRlZl92cmFtX2NudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJZGVmX3ZyYW1fY250Owogc3RhdGljIHVuc2lnbmVkIGxvbmcJZGVmX3Z4cmVzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcJZGVmX3Z5cmVzOwogc3RhdGljIHVuc2lnbmVkIGludAlkZWZfcm90YXRlOwpAQCAtODQsMTIgKzg3LDEwIEBACiAgKiBMQ0QgcGFuZWwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1leHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2ludF9jdHJsOwotZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBvbWFwMl9pbnRfY3RybDsKIGV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgaHdhNzQyX2N0cmw7CiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIGJsaXp6YXJkX2N0cmw7CiAKLXN0YXRpYyBzdHJ1Y3QgbGNkX2N0cmwgKmN0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9jdHJsICpjdHJsc1tdID0gewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJJm9tYXAxX2ludF9jdHJsLAogI2Vsc2UKQEAgLTc0MCw3ICs3NDEsNyBAQAogCWludCByZXQ7CiAKIAlvbWFwZmJfcnF1ZXVlX2xvY2socGxhbmUtPmZiZGV2KTsKLQlyZXQgPSBvbWFwZmJfdXBkYXRlX3dpbmRvd19hc3luYyhmYmksIHdpbiwgTlVMTCwgMCk7CisJcmV0ID0gb21hcGZiX3VwZGF0ZV93aW5kb3dfYXN5bmMoZmJpLCB3aW4sIE5VTEwsIE5VTEwpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKHBsYW5lLT5mYmRldik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzY4LDcgKzc2OSw3IEBACiAJd2luLmZvcm1hdCA9IDA7CiAKIAlvbWFwZmJfcnF1ZXVlX2xvY2soZmJkZXYpOwotCXIgPSBmYmRldi0+Y3RybC0+dXBkYXRlX3dpbmRvdyhmYmksICZ3aW4sIE5VTEwsIDApOworCXIgPSBmYmRldi0+Y3RybC0+dXBkYXRlX3dpbmRvdyhmYmksICZ3aW4sIE5VTEwsIE5VTEwpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKGZiZGV2KTsKIAogCXJldHVybiByOwpAQCAtMTA0Nyw3ICsxMDQ4LDcgQEAKIAkJd2luLmhlaWdodCA9IDI7CiAJCXdpbi5vdXRfd2lkdGggPSAyOwogCQl3aW4ub3V0X2hlaWdodCA9IDI7Ci0JCWZiZGV2LT5jdHJsLT51cGRhdGVfd2luZG93KGZiZGV2LT5mYl9pbmZvWzBdLCAmd2luLCBOVUxMLCAwKTsKKwkJZmJkZXYtPmN0cmwtPnVwZGF0ZV93aW5kb3coZmJkZXYtPmZiX2luZm9bMF0sICZ3aW4sIE5VTEwsIE5VTEwpOwogCX0KIAlvbWFwZmJfcnF1ZXVlX3VubG9jayhmYmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYwppbmRleCA0YTZmMTNkLi5hMTNjOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKQEAgLTU5LDcgKzU5LDcgQEAKICNkZWZpbmUgRElTUENfQ09OVFJPTAkJMHgwMDQwCiAKIHN0YXRpYyBzdHJ1Y3QgewotCXUzMgkJYmFzZTsKKwl2b2lkIF9faW9tZW0JKmJhc2U7CiAJdm9pZAkJKCpsY2RjX2NhbGxiYWNrKSh2b2lkICpkYXRhKTsKIAl2b2lkCQkqbGNkY19jYWxsYmFja19kYXRhOwogCXVuc2lnbmVkIGxvbmcJbDRfa2h6OwpAQCAtNTE4LDcgKzUxOCwxMSBAQAogCWludCByOwogCiAJcmZiaS5mYmRldiA9IGZiZGV2OwotCXJmYmkuYmFzZSA9IGlvX3AydihSRkJJX0JBU0UpOworCXJmYmkuYmFzZSA9IGlvcmVtYXAoUkZCSV9CQVNFLCBTWl8xSyk7CisJaWYgKCFyZmJpLmJhc2UpIHsKKwkJZGV2X2VycihmYmRldi0+ZGV2LCAiY2FuJ3QgaW9yZW1hcCBSRkJJXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJaWYgKChyID0gcmZiaV9nZXRfY2xvY2tzKCkpIDwgMCkKIAkJcmV0dXJuIHI7CkBAIC01NjYsNiArNTcwLDcgQEAKIHsKIAlvbWFwX2Rpc3BjX2ZyZWVfaXJxKCk7CiAJcmZiaV9wdXRfY2xvY2tzKCk7CisJaW91bm1hcChyZmJpLmJhc2UpOwogfQogCiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYgb21hcDJfZXh0X2lmID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL3Nvc3NpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYwppbmRleCA2MzU5MzUzLi5hNzY5NDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYwpAQCAtNTc0LDcgKzU3NCwxMiBAQAogCXN0cnVjdCBjbGsgKmRwbGwxb3V0X2NrOwogCWludCByOwogCi0Jc29zc2kuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVBfU09TU0lfQkFTRSk7CisJc29zc2kuYmFzZSA9IGlvcmVtYXAoT01BUF9TT1NTSV9CQVNFLCBTWl8xSyk7CisJaWYgKCFzb3NzaS5iYXNlKSB7CisJCWRldl9lcnIoZmJkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgU29TU0lcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlzb3NzaS5mYmRldiA9IGZiZGV2OwogCXNwaW5fbG9ja19pbml0KCZzb3NzaS5sb2NrKTsKIApAQCAtNjY1LDYgKzY3MCw3IEBACiB7CiAJb21hcF9sY2RjX2ZyZWVfZG1hX2NhbGxiYWNrKCk7CiAJY2xrX3B1dChzb3NzaS5mY2spOworCWlvdW5tYXAoc29zc2kuYmFzZSk7CiB9CiAKIHN0cnVjdCBsY2RfY3RybF9leHRpZiBvbWFwMV9leHRfaWYgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCmluZGV4IGI4MjlkYzcuLmE3YjAxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCkBAIC01MCw2ICs1MCwxMSBAQAogI2RlZmluZSBkYmcoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IGludCBfX2RldmluaXRjb25zdCBzMWQxM3h4eGZiX3JldmlzaW9uc1tdID0geworCVMxRDEzNTA2X0NISVBfUkVWLAkvKiBSZXYuNCBvbiBIUCBKb3JuYWRhIDd4eCBTMUQxMzUwNiAqLworCVMxRDEzODA2X0NISVBfUkVWLAkvKiBSZXYuNyBvbiAuLiAqLworfTsKKwogLyoKICAqIEhlcmUgd2UgZGVmaW5lIHRoZSBkZWZhdWx0IHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbwogICovCkBAIC01MzgsNiArNTQzLDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCWludCByZXQgPSAwOworCWludCBpOwogCXU4IHJldmlzaW9uOwogCiAJZGJnKCJwcm9iZSBjYWxsZWQ6IGRldmljZSBpcyAlcFxuIiwgcGRldik7CkBAIC02MDcsMTAgKzYxMywxOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JcmV2aXNpb24gPSBzMWQxM3h4eGZiX3JlYWRyZWcoZGVmYXVsdF9wYXIsIFMxRFJFR19SRVZfQ09ERSk7Ci0JaWYgKChyZXZpc2lvbiA+PiAyKSAhPSBTMURfQ0hJUF9SRVYpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImNoaXAgbm90IGZvdW5kOiAlaVxuIiwgKHJldmlzaW9uID4+IDIpKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwlyZXZpc2lvbiA9IHMxZDEzeHh4ZmJfcmVhZHJlZyhkZWZhdWx0X3BhciwgUzFEUkVHX1JFVl9DT0RFKSA+PiAyOworCisJcmV0ID0gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfcmV2aXNpb25zKTsgaSsrKSB7CisJCWlmIChyZXZpc2lvbiA9PSBzMWQxM3h4eGZiX3JldmlzaW9uc1tpXSkKKwkJCXJldCA9IDA7CisJfQorCisJaWYgKCFyZXQpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHJldmlzaW9uICVpXG4iLCByZXZpc2lvbik7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmtub3duIGNoaXAgcmV2aXNpb24gJWlcbiIsIHJldmlzaW9uKTsKIAkJZ290byBiYWlsOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCA0YzMyYzA2Li5lZmZmNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3NoX21vYmlsZV9sY2RjLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KIAogI2RlZmluZSBQQUxFVFRFX05SIDE2CiAKQEAgLTM0LDcgKzM0LDkgQEAKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgewogCXZvaWQgX19pb21lbSAqYmFzZTsKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlzdHJ1Y3QgY2xrICpjbGs7CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGxkZGNrcjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiBjaFsyXTsKIH07CkBAIC0yNjAsNiArMjYyLDExIEBACiAJCXRtcCA9IGNoLT5sZG10MXJfdmFsdWU7CiAJCXRtcCB8PSAobGNkX2NmZy0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkgPyAwIDogMSA8PCAyODsKIAkJdG1wIHw9IChsY2RfY2ZnLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID8gMCA6IDEgPDwgMjc7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdQT0wpID8gMSA8PCAyNiA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRElQT0wpID8gMSA8PCAyNSA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfREFQT0wpID8gMSA8PCAyNCA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfSFNDTlQpID8gMSA8PCAxNyA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdDTlQpID8gMSA8PCAxNiA6IDA7CiAJCWxjZGNfd3JpdGVfY2hhbihjaCwgTERNVDFSLCB0bXApOwogCiAJCS8qIHNldHVwIFNZUyBidXMgKi8KQEAgLTQyMiw2ICs0MjksNyBAQAogCiAJcHJpdi0+bGRkY2tyID0gaWNrc2VsIDw8IDE2OwogCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKHN0cikgewogCQlwcml2LT5jbGsgPSBjbGtfZ2V0KGRldiwgc3RyKTsKIAkJaWYgKElTX0VSUihwcml2LT5jbGspKSB7CkBAIC00MzEsNiArNDM5LDcgQEAKIAogCQljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAJfQorI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NSw3ICs1OTQsNiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JcHJpdi0+bGRkY2tyID0gcGRhdGEtPmxkZGNrcjsKIAlwcml2LT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CkBAIC02ODgsMTAgKzY5NiwxMiBAQAogCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCX0KIAorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCWlmIChwcml2LT5jbGspIHsKIAkJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKIAkJY2xrX3B1dChwcml2LT5jbGspOwogCX0KKyNlbmRpZgogCiAJaWYgKHByaXYtPmJhc2UpCiAJCWlvdW5tYXAocHJpdi0+YmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwppbmRleCA0NTk5YTQzLi4xNGJkM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKQEAgLTExOTUsNTcgKzExOTUsNTggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZWZhdWx0X3BhciA9IGluZm8tPnBhcjsKKwlpbmZvLT5maXggPSB0ZGZ4X2ZpeDsKIAogCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmYl9maXhfc2NyZWVuaW5mbyBmaXJzdCAqLwogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEXzNERlhfQkFOU0hFRToKLQkJc3RyY3B5KHRkZnhfZml4LmlkLCAiM0RmeCBCYW5zaGVlIik7CisJCXN0cmNweShpbmZvLT5maXguaWQsICIzRGZ4IEJhbnNoZWUiKTsKIAkJZGVmYXVsdF9wYXItPm1heF9waXhjbG9jayA9IEJBTlNIRUVfTUFYX1BJWENMT0NLOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zOgotCQlzdHJjcHkodGRmeF9maXguaWQsICIzRGZ4IFZvb2RvbzMiKTsKKwkJc3RyY3B5KGluZm8tPmZpeC5pZCwgIjNEZnggVm9vZG9vMyIpOwogCQlkZWZhdWx0X3Bhci0+bWF4X3BpeGNsb2NrID0gVk9PRE9PM19NQVhfUElYQ0xPQ0s7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzU6Ci0JCXN0cmNweSh0ZGZ4X2ZpeC5pZCwgIjNEZnggVm9vZG9vNSIpOworCQlzdHJjcHkoaW5mby0+Zml4LmlkLCAiM0RmeCBWb29kb281Iik7CiAJCWRlZmF1bHRfcGFyLT5tYXhfcGl4Y2xvY2sgPSBWT09ET081X01BWF9QSVhDTE9DSzsKIAkJYnJlYWs7CiAJfQogCi0JdGRmeF9maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQl0ZGZ4X2ZpeC5tbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4sCisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuLAogCQkJCSJ0ZGZ4IHJlZ2Jhc2UiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInRkZnhmYjogQ2FuJ3QgcmVzZXJ2ZSByZWdiYXNlXG4iKTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAogCWRlZmF1bHRfcGFyLT5yZWdiYXNlX3ZpcnQgPQotCQlpb3JlbWFwX25vY2FjaGUodGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4pOworCQlpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IHJlbWFwICVzIHJlZ2lzdGVyIGFyZWEuXG4iLAotCQkJCXRkZnhfZml4LmlkKTsKKwkJCQlpbmZvLT5maXguaWQpOwogCQlnb3RvIG91dF9lcnJfcmVnYmFzZTsKIAl9CiAKLQl0ZGZ4X2ZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCXRkZnhfZml4LnNtZW1fbGVuID0gZG9fbGZiX3NpemUoZGVmYXVsdF9wYXIsIHBkZXYtPmRldmljZSk7Ci0JaWYgKCF0ZGZ4X2ZpeC5zbWVtX2xlbikgewotCQlwcmludGsoS0VSTl9FUlIgImZiOiBDYW4ndCBjb3VudCAlcyBtZW1vcnkuXG4iLCB0ZGZ4X2ZpeC5pZCk7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gZG9fbGZiX3NpemUoZGVmYXVsdF9wYXIsIHBkZXYtPmRldmljZSk7CisJaWYgKCFpbmZvLT5maXguc21lbV9sZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYjogQ2FuJ3QgY291bnQgJXMgbWVtb3J5LlxuIiwgaW5mby0+Zml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odGRmeF9maXguc21lbV9zdGFydCwKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCAidGRmeCBzbWVtIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0ZGZ4ZmI6IENhbid0IHJlc2VydmUgc21lbVxuIik7CiAJCWdvdG8gb3V0X2Vycl9yZWdiYXNlOwogCX0KIAotCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHRkZnhfZml4LnNtZW1fc3RhcnQsCi0JCQkJCSAgICB0ZGZ4X2ZpeC5zbWVtX2xlbik7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYjogQ2FuJ3QgcmVtYXAgJXMgZnJhbWVidWZmZXIuXG4iLAotCQkJCXRkZnhfZml4LmlkKTsKKwkJCQlpbmZvLT5maXguaWQpOwogCQlnb3RvIG91dF9lcnJfc2NyZWVuYmFzZTsKIAl9CiAKQEAgLTEyNTcsMjAgKzEyNTgsMTkgQEAKIAkJZ290byBvdXRfZXJyX3NjcmVlbmJhc2U7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiZmI6ICVzIG1lbW9yeSA9ICVkS1xuIiwgdGRmeF9maXguaWQsCi0JCQl0ZGZ4X2ZpeC5zbWVtX2xlbiA+PiAxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZmI6ICVzIG1lbW9yeSA9ICVkS1xuIiwgaW5mby0+Zml4LmlkLAorCQkJaW5mby0+Zml4LnNtZW1fbGVuID4+IDEwKTsKIAogCWRlZmF1bHRfcGFyLT5tdHJyX2hhbmRsZSA9IC0xOwogCWlmICghbm9tdHJyKQogCQlkZWZhdWx0X3Bhci0+bXRycl9oYW5kbGUgPQotCQkJbXRycl9hZGQodGRmeF9maXguc21lbV9zdGFydCwgdGRmeF9maXguc21lbV9sZW4sCisJCQltdHJyX2FkZChpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuLAogCQkJCSBNVFJSX1RZUEVfV1JDT01CLCAxKTsKIAotCXRkZnhfZml4LnlwYW5zdGVwCT0gbm9wYW4gPyAwIDogMTsKLQl0ZGZ4X2ZpeC55d3JhcHN0ZXAJPSBub3dyYXAgPyAwIDogMTsKKwlpbmZvLT5maXgueXBhbnN0ZXAJPSBub3BhbiA/IDAgOiAxOworCWluZm8tPmZpeC55d3JhcHN0ZXAJPSBub3dyYXAgPyAwIDogMTsKIAogCWluZm8tPmZib3BzCQk9ICZ0ZGZ4ZmJfb3BzOwotCWluZm8tPmZpeAkJPSB0ZGZ4X2ZpeDsKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZQk9IGRlZmF1bHRfcGFyLT5wYWxldHRlOwogCWluZm8tPmZsYWdzCQk9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfWVBBTjsKICNpZmRlZiBDT05GSUdfRkJfM0RGWF9BQ0NFTApAQCAtMTMyMywxNCArMTMyMywxNCBAQAogb3V0X2Vycl9zY3JlZW5iYXNlOgogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHRkZnhfZml4LnNtZW1fc3RhcnQsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CiBvdXRfZXJyX3JlZ2Jhc2U6CiAJLyoKIAkgKiBDbGVhbnVwIGFmdGVyIGFueXRoaW5nIHRoYXQgd2FzIHJlbWFwcGVkL2FsbG9jYXRlZC4KIAkgKi8KIAlpZiAoZGVmYXVsdF9wYXItPnJlZ2Jhc2VfdmlydCkKIAkJaW91bm1hcChkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0KTsKLQlyZWxlYXNlX21lbV9yZWdpb24odGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIG91dF9lcnI6CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzODAwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTAsMCArMSwxMDUwIEBACisvKgorICogRnJhbWUgQnVmZmVyIERldmljZSBmb3IgVG9zaGliYSBNb2JpbGUgSU8oVE1JTykgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDYgQ2hyaXMgSHVtYmVydAorICogQ29weXJpZ2h0KEMpIDIwMDUgRGlyayBPcGZlcgorICogQ29weXRpZ2h0KEMpIDIwMDcsMjAwOCBEbWl0cnkgQmFyeXNoa292CisgKgorICogQmFzZWQgb246CisgKglkcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCisgKgljb2RlIHdyaXR0ZW4gYnkgU2hhcnAvTGluZW8gZm9yIDIuNCBrZXJuZWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKgorICogYWNjZWxlcmF0b3IgY29tbWFuZHMKKyAqLworI2RlZmluZSBUTUlPRkJfQUNDX0NTQURSKHgpCSgweDAwMDAwMDAwIHwgKCh4KSAmIDB4MDAxZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX0NIUElYKHgpCSgweDAxMDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX0NWUElYKHgpCSgweDAyMDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BTQURSKHgpCSgweDAzMDAwMDAwIHwgKCh4KSAmIDB4MDBmZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BIUElYKHgpCSgweDA0MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BWUElYKHgpCSgweDA1MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BIT0ZTKHgpCSgweDA2MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BWT0ZTKHgpCSgweDA3MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BPQURSKHgpCSgweDA4MDAwMDAwIHwgKCh4KSAmIDB4MDBmZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX1JTVFIoeCkJKDB4MDkwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDBmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfVENMT1IoeCkJKDB4MEEwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfRklMTCh4KQkoMHgwQjAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19EU0FEUih4KQkoMHgwQzAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TU0FEUih4KQkoMHgwRDAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19ESFBJWCh4KQkoMHgwRTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19EVlBJWCh4KQkoMHgwRjAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TSFBJWCh4KQkoMHgxMDAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TVlBJWCh4KQkoMHgxMTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MQklOSSh4KQkoMHgxMjAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MQksyKHgpCSgweDEzMDAwMDAwIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1NIQklOSSh4KQkoMHgxNDAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TSEJLMih4KQkoMHgxNTAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TVkJJTkkoeCkJKDB4MTYwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU1ZCSzIoeCkJKDB4MTcwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPCQkweDIwMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DTU9ECTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0NEVlJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0NESFJWCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX1JVTkQJMHgwMDAwODAwMAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR08JCTB4MjEwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fVFJOUwkweDAwMDAwMDA4CisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19EVlJWCTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0RIUlYJMHgwMDAwMDAyMAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fU1ZSVgkweDAwMDAwMDQwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19TSFJWCTB4MDAwMDAwODAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0RTVFhZCTB4MDAwMDgwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPCQkweDIyMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19EVlJWCTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX0RIUlYJMHgwMDAwMDAyMAorI2RlZmluZSBUTUlPRkJfQUNDX1NCR09fU1ZSVgkweDAwMDAwMDQwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19TSFJWCTB4MDAwMDAwODAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX1NCTUQJMHgwMDAwMDEwMAorI2RlZmluZSBUTUlPRkJfQUNDX0ZMR08JCTB4MjMwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX0ZMR09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX0xER08JCTB4MjQwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fRU5EUFgJMHgwMDAwMDAwOAorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fTFZSVgkweDAwMDAwMDEwCisjZGVmaW5lIFRNSU9GQl9BQ0NfTERHT19MSFJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0xETU9ECTB4MDAwMDAwNDAKKworLyogYSBGSUZPIGlzIGFsd2F5cyBhbGxvY2F0ZWQsIGV2ZW4gaWYgYWNjZWxlcmF0aW9uIGlzIG5vdCB1c2VkICovCisjZGVmaW5lIFRNSU9GQl9GSUZPX1NJWkUJNTEyCisKKy8qCisgKiBMQ0QgSG9zdCBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqCisgKiBUaGlzIGlvbWVtIGFyZWEgc3VwcG9ydHMgb25seSAxNi1iaXQgSU8uCisgKi8KKyNkZWZpbmUgQ0NSX0NNRAkJCTB4MDQgLyogQ29tbWFuZAkJCQkqLworI2RlZmluZSBDQ1JfUkVWSUQJCTB4MDggLyogUmV2aXNpb24gSUQJCQkqLworI2RlZmluZSBDQ1JfQkFTRUwJCTB4MTAgLyogTENEIENvbnRyb2wgUmVnIEJhc2UgQWRkciBMb3cJKi8KKyNkZWZpbmUgQ0NSX0JBU0VICQkweDEyIC8qIExDRCBDb250cm9sIFJlZyBCYXNlIEFkZHIgSGlnaAkqLworI2RlZmluZSBDQ1JfVUdDQwkJMHg0MCAvKiBVbmlmaWVkIEdhdGVkIENsb2NrIENvbnRyb2wJKi8KKyNkZWZpbmUgQ0NSX0dDQwkJCTB4NDIgLyogR2F0ZWQgQ2xvY2sgQ29udHJvbAkJKi8KKyNkZWZpbmUgQ0NSX1VTQwkJCTB4NTAgLyogVW5pZmllZCBTb2Z0d2FyZSBDbGVhcgkJKi8KKyNkZWZpbmUgQ0NSX1ZSQU1SVEMJCTB4NjAgLyogVlJBTSBUaW1pbmcgQ29udHJvbAkJKi8KKwkJCQkvKiAweDYxIFZSQU0gUmVmcmVzaCBDb250cm9sCQkqLworI2RlZmluZSBDQ1JfVlJBTVNBQwkJMHg2MiAvKiBWUkFNIEFjY2VzcyBDb250cm9sCQkqLworCQkJCS8qIDB4NjMJVlJBTSBTdGF0dXMJCQkqLworI2RlZmluZSBDQ1JfVlJBTUJDCQkweDY0IC8qIFZSQU0gQmxvY2sgQ29udHJvbAkJKi8KKworLyoKKyAqIExDRCBDb250cm9sIFJlZ2lzdGVyCisgKgorICogVGhpcyBpb21lbSBhcmVhIHN1cHBvcnRzIG9ubHkgMTYtYml0IElPLgorICovCisjZGVmaW5lIExDUl9VSVMJCQkweDAwMCAvKiBVbmlmaWVkIEludGVycnVwdCBTdGF0dXMJKi8KKyNkZWZpbmUgTENSX1ZIUE4JCTB4MDA4IC8qIFZSQU0gSG9yaXpvbnRhbCBQaXhlbCBOdW1iZXIJKi8KKyNkZWZpbmUgTENSX0NGU0FMCQkweDAwYSAvKiBDb21tYW5kIEZJRk8gU3RhcnQgQWRkcmVzcyBMb3cJKi8KKyNkZWZpbmUgTENSX0NGU0FICQkweDAwYyAvKiBDb21tYW5kIEZJRk8gU3RhcnQgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIExDUl9DRlMJCQkweDAwZSAvKiBDb21tYW5kIEZJRk8gU2l6ZQkJKi8KKyNkZWZpbmUgTENSX0NGV1MJCTB4MDEwIC8qIENvbW1hbmQgRklGTyBXcml0ZWFibGUgU2l6ZQkqLworI2RlZmluZSBMQ1JfQkJJRQkJMHgwMTIgLyogQml0QkxUIEludGVycnVwdCBFbmFibGUJKi8KKyNkZWZpbmUgTENSX0JCSVNDCQkweDAxNCAvKiBCaXRCTFQgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ2xlYXIgKi8KKyNkZWZpbmUgTENSX0NDUwkJCTB4MDE2IC8qIENvbW1hbmQgQ291bnQgU3RhdHVzCQkqLworI2RlZmluZSBMQ1JfQkJFUwkJMHgwMTggLyogQml0QkxUIEV4ZWN1dGlvbiBTdGF0dXMJKi8KKyNkZWZpbmUgTENSX0NNREwJCTB4MDFjIC8qIENvbW1hbmQgTG93CQkJKi8KKyNkZWZpbmUgTENSX0NNREgJCTB4MDFlIC8qIENvbW1hbmQgSGlnaAkJCSovCisjZGVmaW5lIExDUl9DRkMJCQkweDAyMiAvKiBDb21tYW5kIEZJRk8gQ2xlYXIJCSovCisjZGVmaW5lIExDUl9DQ0lGQwkJMHgwMjQgLyogQ01PUyBDYW1lcmEgSUYgQ29udHJvbAkJKi8KKyNkZWZpbmUgTENSX0hXVAkJCTB4MDI2IC8qIEhhcmR3YXJlIFRlc3QJCQkqLworI2RlZmluZSBMQ1JfTENEQ0NSQwkJMHgxMDAgLyogTENEQyBDbG9jayBhbmQgUmVzZXQgQ29udHJvbAkqLworI2RlZmluZSBMQ1JfTENEQ0MJCTB4MTAyIC8qIExDREMgQ29udHJvbAkJCSovCisjZGVmaW5lIExDUl9MQ0RDT1BDCQkweDEwNCAvKiBMQ0RDIE91dHB1dCBQaW4gQ29udHJvbAkqLworI2RlZmluZSBMQ1JfTENESVMJCTB4MTA4IC8qIExDRCBJbnRlcnJ1cHQgU3RhdHVzCQkqLworI2RlZmluZSBMQ1JfTENESU0JCTB4MTBhIC8qIExDRCBJbnRlcnJ1cHQgTWFzawkJKi8KKyNkZWZpbmUgTENSX0xDRElFCQkweDEwYyAvKiBMQ0QgSW50ZXJydXB0IEVuYWJsZQkJKi8KKyNkZWZpbmUgTENSX0dEU0FMCQkweDEyMiAvKiBHcmFwaGljcyBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgTG93ICovCisjZGVmaW5lIExDUl9HRFNBSAkJMHgxMjQgLyogR3JhcGhpY3MgRGlzcGxheSBTdGFydCBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgTENSX1ZIUENMCQkweDEyYSAvKiBWUkFNIEhvcml6b250YWwgUGl4ZWwgQ291bnQgTG93ICovCisjZGVmaW5lIExDUl9WSFBDSAkJMHgxMmMgLyogVlJBTSBIb3Jpem9udGFsIFBpeGVsIENvdW50IEhpZ2ggKi8KKyNkZWZpbmUgTENSX0dNCQkJMHgxMmUgLyogR3JhcGhpYyBNb2RlKFZSQU0gYWNjZXNzIGVuYWJsZSkgKi8KKyNkZWZpbmUgTENSX0hUCQkJMHgxNDAgLyogSG9yaXpvbnRhbCBUb3RhbAkJKi8KKyNkZWZpbmUgTENSX0hEUwkJCTB4MTQyIC8qIEhvcml6b250YWwgRGlzcGxheSBTdGFydAkqLworI2RlZmluZSBMQ1JfSFNTCQkJMHgxNDQgLyogSC1TeW5jIFN0YXJ0CQkJKi8KKyNkZWZpbmUgTENSX0hTRQkJCTB4MTQ2IC8qIEgtU3luYyBFbmQJCQkqLworI2RlZmluZSBMQ1JfSE5QCQkJMHgxNGMgLyogSG9yaXpvbnRhbCBOdW1iZXIgb2YgUGl4ZWxzCSovCisjZGVmaW5lIExDUl9WVAkJCTB4MTUwIC8qIFZlcnRpY2FsIFRvdGFsCQkJKi8KKyNkZWZpbmUgTENSX1ZEUwkJCTB4MTUyIC8qIFZlcnRpY2FsIERpc3BsYXkgU3RhcnQJCSovCisjZGVmaW5lIExDUl9WU1MJCQkweDE1NCAvKiBWLVN5bmMgU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfVlNFCQkJMHgxNTYgLyogVi1TeW5jIEVuZAkJCSovCisjZGVmaW5lIExDUl9DRExOCQkweDE2MCAvKiBDdXJyZW50IERpc3BsYXkgTGluZSBOdW1iZXIJKi8KKyNkZWZpbmUgTENSX0lMTgkJCTB4MTYyIC8qIEludGVycnVwdCBMaW5lIE51bWJlcgkJKi8KKyNkZWZpbmUgTENSX1NQCQkJMHgxNjQgLyogU3luYyBQb2xhcml0eQkJCSovCisjZGVmaW5lIExDUl9NSVNDCQkweDE2NiAvKiBNSVNDKFJHQjU2NSBtb2RlKQkJKi8KKyNkZWZpbmUgTENSX1ZJSFNTCQkweDE2YSAvKiBWaWRlbyBJbnRlcmZhY2UgSC1TeW5jIFN0YXJ0CSovCisjZGVmaW5lIExDUl9WSVZTCQkweDE2YyAvKiBWaWRlbyBJbnRlcmZhY2UgVmVydGljYWwgU3RhcnQJKi8KKyNkZWZpbmUgTENSX1ZJVkUJCTB4MTZlIC8qIFZpZGVvIEludGVyZmFjZSBWZXJ0aWNhbCBFbmQJKi8KKyNkZWZpbmUgTENSX1ZJVlNTCQkweDE3MCAvKiBWaWRlbyBJbnRlcmZhY2UgVi1TeW5jIFN0YXJ0CSovCisjZGVmaW5lIExDUl9WQ0NJUwkJMHgxN2UgLyogVmlkZW8gLyBDTU9TIENhbWVyYSBJbnRlcmZhY2UgU2VsZWN0ICovCisjZGVmaW5lIExDUl9WSURXU0FMCQkweDE4MCAvKiBWSSBEYXRhIFdyaXRlIFN0YXJ0IEFkZHJlc3MgTG93ICovCisjZGVmaW5lIExDUl9WSURXU0FICQkweDE4MiAvKiBWSSBEYXRhIFdyaXRlIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBMQ1JfVklEUlNBTAkJMHgxODQgLyogVkkgRGF0YSBSZWFkIFN0YXJ0IEFkZHJlc3MgTG93CSovCisjZGVmaW5lIExDUl9WSURSU0FICQkweDE4NiAvKiBWSSBEYXRhIFJlYWQgU3RhcnQgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIExDUl9WSVBERFNUCQkweDE4OCAvKiBWSSBQaWN0dXJlIERhdGEgRGlzcGxheSBTdGFydCBUaW1pbmcgKi8KKyNkZWZpbmUgTENSX1ZJUERERVQJCTB4MTg2IC8qIFZJIFBpY3R1cmUgRGF0YSBEaXNwbGF5IEVuZCBUaW1pbmcgKi8KKyNkZWZpbmUgTENSX1ZJRQkJCTB4MThjIC8qIFZpZGVvIEludGVyZmFjZSBFbmFibGUJCSovCisjZGVmaW5lIExDUl9WQ1MJCQkweDE4ZSAvKiBWaWRlby9DYW1lcmEgU2VsZWN0CQkqLworI2RlZmluZSBMQ1JfVlBIV0MJCTB4MTk0IC8qIFZpZGVvIFBpY3R1cmUgSG9yaXpvbnRhbCBXYWl0IENvdW50ICovCisjZGVmaW5lIExDUl9WUEhTCQkweDE5NiAvKiBWaWRlbyBQaWN0dXJlIEhvcml6b250YWwgU2l6ZQkqLworI2RlZmluZSBMQ1JfVlBWV0MJCTB4MTk4IC8qIFZpZGVvIFBpY3R1cmUgVmVydGljYWwgV2FpdCBDb3VudCAqLworI2RlZmluZSBMQ1JfVlBWUwkJMHgxOWEgLyogVmlkZW8gUGljdHVyZSBWZXJ0aWNhbCBTaXplCSovCisjZGVmaW5lIExDUl9QTEhQSVgJCTB4MWEwIC8qIFBMSFBJWAkJCQkqLworI2RlZmluZSBMQ1JfWFMJCQkweDFhMiAvKiBYU3RhcnQJCQkJKi8KKyNkZWZpbmUgTENSX1hDS0hXCQkweDFhNCAvKiBYQ0sgSGlnaCBXaWR0aAkJCSovCisjZGVmaW5lIExDUl9TVEhTCQkweDFhOCAvKiBTVEggU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfVlQyCQkJMHgxYWEgLyogVmVydGljYWwgVG90YWwJCQkqLworI2RlZmluZSBMQ1JfWUNLU1cJCTB4MWFjIC8qIFlDSyBTdGFydCBXYWl0CQkJKi8KKyNkZWZpbmUgTENSX1lTVFMJCTB4MWFlIC8qIFlTVCBTdGFydAkJCSovCisjZGVmaW5lIExDUl9QUE9MUwkJMHgxYjAgLyogI1BQT0wgU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfUFJFQ1cJCTB4MWIyIC8qIFBSRUMgV2lkdGgJCQkqLworI2RlZmluZSBMQ1JfVkNMS0hXCQkweDFiNCAvKiBWQ0xLIEhpZ2ggV2lkdGgJCSovCisjZGVmaW5lIExDUl9PQwkJCTB4MWI2IC8qIE91dHB1dCBDb250cm9sCQkJKi8KKworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGE7CisKK3N0cnVjdCB0bWlvZmJfcGFyIHsKKwl1MzIJCQkJcHNldWRvX3BhbGV0dGVbMTZdOworCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXRfYWNjOworCWJvb2wJCQkJdXNlX3BvbGxpbmc7CisjZW5kaWYKKworCXZvaWQgX19pb21lbQkJCSpjY3I7CisJdm9pZCBfX2lvbWVtCQkJKmxjcjsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogcmVhc29ucyBmb3IgYW4gaW50ZXJydXB0OgorICoJdWlzCWJiaXNjCWxjZGlzCisgKgkwMTAwCTAwMDEJYWNjZWxlcmF0b3IgY29tbWFuZCBjb21wbGV0ZWQKKyAqIAkyMDAwCTAwMDEJdnN5bmMgc3RhcnQKKyAqIAkyMDAwCTAwMDIJZGlzcGxheSBzdGFydAorICogCTIwMDAJMDAwNAlsaW5lIG51bWJlciBtYXRjaCgweDFmZiBtYXNrPz8/KQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdG1pb2ZiX2lycShpbnQgaXJxLCB2b2lkICpfX2luZm8pCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBfX2luZm87CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBpbnQgYmJpc2MgPSB0bWlvX2lvcmVhZDE2KHBhci0+bGNyICsgTENSX0JCSVNDKTsKKworCisJLyoKKwkgKiBXZSB3ZXJlIGluIHBvbGxpbmcgbW9kZSBhbmQgbm93IHdlIGdvdCBjb3JyZWN0IGlycS4KKwkgKiBTd2l0Y2ggYmFjayB0byBJUlEtYmFzZWQgc3luYyBvZiBjb21tYW5kIEZJRk8KKwkgKi8KKwlpZiAodW5saWtlbHkocGFyLT51c2VfcG9sbGluZyAmJiBpcnEgIT0gLTEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRtaW9mYjogc3dpdGNoaW5nIHRvIHdhaXRxXG4iKTsKKwkJcGFyLT51c2VfcG9sbGluZyA9IGZhbHNlOworCX0KKworCXRtaW9faW93cml0ZTE2KGJiaXNjLCBwYXItPmxjciArIExDUl9CQklTQyk7CisKKyNpZmRlZiBDT05GSUdfRkJfVE1JT19BQ0NFTEwKKwlpZiAoYmJpc2MgJiAxKQorCQl3YWtlX3VwKCZwYXItPndhaXRfYWNjKTsKKyNlbmRpZgorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qCisgKiBUdXJucyBvZmYgdGhlIExDRCBjb250cm9sbGVyIGFuZCBMQ0QgaG9zdCBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IHRtaW9mYl9od19zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+Y2NyICsgQ0NSX1VHQ0MpOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0dNKTsKKwlkYXRhLT5sY2Rfc2V0X3Bvd2VyKGRldiwgMCk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDEwLCBwYXItPmxjciArIExDUl9MQ0RDQ1JDKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIExDRCBob3N0IGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbnQgdG1pb2ZiX2h3X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJY29uc3Qgc3RydWN0IHJlc291cmNlICpubGNyID0gJmNlbGwtPnJlc291cmNlc1swXTsKKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnZyYW0gPSAmY2VsbC0+cmVzb3VyY2VzWzJdOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCWlmIChubGNyID09IE5VTEwgfHwgdnJhbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJhc2UgPSBubGNyLT5zdGFydDsKKworCXRtaW9faW93cml0ZTE2KDB4MDAzYSwgcGFyLT5jY3IgKyBDQ1JfVUdDQyk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDNhLCBwYXItPmNjciArIENDUl9HQ0MpOworCXRtaW9faW93cml0ZTE2KDB4M2YwMCwgcGFyLT5jY3IgKyBDQ1JfVVNDKTsKKworCW1zbGVlcCgyKTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCisJdG1pb19pb3dyaXRlMTYoMHgwMDAwLCBwYXItPmNjciArIENDUl9VU0MpOworCXRtaW9faW93cml0ZTE2KGJhc2UgPj4gMTYsIHBhci0+Y2NyICsgQ0NSX0JBU0VIKTsKKwl0bWlvX2lvd3JpdGUxNihiYXNlLCBwYXItPmNjciArIENDUl9CQVNFTCk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDAyLCBwYXItPmNjciArIENDUl9DTUQpOyAvKiBiYXNlIGFkZHJlc3MgZW5hYmxlICovCisJdG1pb19pb3dyaXRlMTYoMHg0MGE4LCBwYXItPmNjciArIENDUl9WUkFNUlRDKTsgLyogVlJBTVJDLCBWUkFNVEMgKi8KKwl0bWlvX2lvd3JpdGUxNigweDAwMTgsIHBhci0+Y2NyICsgQ0NSX1ZSQU1TQUMpOyAvKiBWUkFNU1RTLCBWUkFNQUMgKi8KKwl0bWlvX2lvd3JpdGUxNigweDAwMDIsIHBhci0+Y2NyICsgQ0NSX1ZSQU1CQyk7CisJbXNsZWVwKDIpOyAvKiB3YWl0IGZvciBkZXZpY2UgdG8gc2V0dGxlICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDBiLCBwYXItPmNjciArIENDUl9WUkFNQkMpOworCisJYmFzZSA9IHZyYW0tPnN0YXJ0ICsgaW5mby0+c2NyZWVuX3NpemU7CisJdG1pb19pb3dyaXRlMTYoYmFzZSA+PiAxNiwgcGFyLT5sY3IgKyBMQ1JfQ0ZTQUgpOworCXRtaW9faW93cml0ZTE2KGJhc2UsIHBhci0+bGNyICsgTENSX0NGU0FMKTsKKwl0bWlvX2lvd3JpdGUxNihUTUlPRkJfRklGT19TSVpFIC0gMSwgcGFyLT5sY3IgKyBMQ1JfQ0ZTKTsKKwl0bWlvX2lvd3JpdGUxNigxLCBwYXItPmxjciArIExDUl9DRkMpOworCXRtaW9faW93cml0ZTE2KDEsIHBhci0+bGNyICsgTENSX0JCSUUpOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0NGV1MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBMQ0QgY29udHJvbGxlcidzIG91dHB1dCByZXNvbHV0aW9uIGFuZCBwaXhlbCBjbG9jaworICovCitzdGF0aWMgdm9pZCB0bWlvZmJfaHdfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBpbmZvLT5tb2RlOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IGk7CisKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HTSk7CisJZGF0YS0+bGNkX3NldF9wb3dlcihkZXYsIDApOworCXRtaW9faW93cml0ZTE2KDB4MDAxMCwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7CisJZGF0YS0+bGNkX21vZGUoZGV2LCBtb2RlKTsKKwlkYXRhLT5sY2Rfc2V0X3Bvd2VyKGRldiwgMSk7CisKKwl0bWlvX2lvd3JpdGUxNihpbmZvLT5maXgubGluZV9sZW5ndGgsIHBhci0+bGNyICsgTENSX1ZIUE4pOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0dEU0FIKTsKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HRFNBTCk7CisJdG1pb19pb3dyaXRlMTYoaW5mby0+Zml4LmxpbmVfbGVuZ3RoID4+IDE2LCBwYXItPmxjciArIExDUl9WSFBDSCk7CisJdG1pb19pb3dyaXRlMTYoaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBwYXItPmxjciArIExDUl9WSFBDTCk7CisJdG1pb19pb3dyaXRlMTYoaSA9IDAsIHBhci0+bGNyICsgTENSX0hTUyk7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT5oc3luY19sZW4sIHBhci0+bGNyICsgTENSX0hTRSk7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT5sZWZ0X21hcmdpbiwgcGFyLT5sY3IgKyBMQ1JfSERTKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPnhyZXMgKyBtb2RlLT5yaWdodF9tYXJnaW4sIHBhci0+bGNyICsgTENSX0hUKTsKKwl0bWlvX2lvd3JpdGUxNihtb2RlLT54cmVzLCBwYXItPmxjciArIExDUl9ITlApOworCXRtaW9faW93cml0ZTE2KGkgPSAwLCBwYXItPmxjciArIExDUl9WU1MpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+dnN5bmNfbGVuLCBwYXItPmxjciArIExDUl9WU0UpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+dXBwZXJfbWFyZ2luLCBwYXItPmxjciArIExDUl9WRFMpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+eXJlcywgcGFyLT5sY3IgKyBMQ1JfSUxOKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPmxvd2VyX21hcmdpbiwgcGFyLT5sY3IgKyBMQ1JfVlQpOworCXRtaW9faW93cml0ZTE2KDMsIHBhci0+bGNyICsgTENSX01JU0MpOyAvKiBSR0I1NjUgbW9kZSAqLworCXRtaW9faW93cml0ZTE2KDEsIHBhci0+bGNyICsgTENSX0dNKTsgLyogVlJBTSBlbmFibGUgKi8KKwl0bWlvX2lvd3JpdGUxNigweDQwMDcsIHBhci0+bGNyICsgTENSX0xDRENDKTsKKwl0bWlvX2lvd3JpdGUxNigzLCBwYXItPmxjciArIExDUl9TUCk7ICAvKiBzeW5jIHBvbGFyaXR5ICovCisKKwl0bWlvX2lvd3JpdGUxNigweDAwMTAsIHBhci0+bGNyICsgTENSX0xDRENDUkMpOworCW1zbGVlcCg1KTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCXRtaW9faW93cml0ZTE2KDB4MDAxNCwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7IC8qIFNUT1BfQ0tQICovCisJbXNsZWVwKDUpOyAvKiB3YWl0IGZvciBkZXZpY2UgdG8gc2V0dGxlICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDE1LCBwYXItPmxjciArIExDUl9MQ0RDQ1JDKTsgLyogU1RPUF9DS1B8U09GVF9SRVNFVCovCisJdG1pb19pb3dyaXRlMTYoMHhmZmZhLCBwYXItPmxjciArIExDUl9WQ1MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorc3RhdGljIGludCBfX211c3RfY2hlY2sKK3RtaW9mYl9hY2Nfd2FpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNjcykKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCS8qCisJICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2hpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKwkgKiBTbyBpbnN0ZWFkIG9mIHJlbGF5aW5nIG9uIGlycSB0byB0cmlnZ2VyIHRoZSBldmVudCwKKwkgKiBwb2xsIHRoZSBzdGF0ZSB0aWxsIHRoZSBuZWNlc3NhcnkgY29tbWFuZCBpcyBleGVjdXRlZC4KKwkgKi8KKwlpZiAoaXJxc19kaXNhYmxlZCgpIHx8IHBhci0+dXNlX3BvbGxpbmcpIHsKKwkJaW50IGkgPSAwOworCQl3aGlsZSAodG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9DQ1MpID4gY2NzKSB7CisJCQl1ZGVsYXkoMSk7CisJCQlpKys7CisJCQlpZiAoaSA+IDEwMDAwKSB7CisJCQkJcHJfZXJyKCJ0bWlvZmI6IHRpbWVvdXQgd2FpdGluZyBmb3IgJWRcbiIsCisJCQkJCQljY3MpOworCQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJfQorCQkJdG1pb2ZiX2lycSgtMSwgaW5mbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBhci0+d2FpdF9hY2MsCisJCQkJdG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9DQ1MpIDw9IGNjcywKKwkJCQkxMDAwKSkgeworCQkJcHJfZXJyKCJ0bWlvZmI6IHRpbWVvdXQgd2FpdGluZyBmb3IgJWRcbiIsIGNjcyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGVzIGFuIGFjY2VsZXJhdG9yIGNvbW1hbmQgdG8gdGhlIGFjY2VsZXJhdG9yJ3MgRklGTy4KKyAqLworc3RhdGljIGludAordG1pb2ZiX2FjY193cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgdTMyICpjbWQsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCWludCByZXQ7CisKKwlyZXQgPSB0bWlvZmJfYWNjX3dhaXQoaW5mbywgVE1JT0ZCX0ZJRk9fU0laRSAtIGNvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yICg7IGNvdW50OyBjb3VudC0tLCBjbWQrKykgeworCQl0bWlvX2lvd3JpdGUxNigqY21kID4+IDE2LCBwYXItPmxjciArIExDUl9DTURIKTsKKwkJdG1pb19pb3dyaXRlMTYoKmNtZCwgcGFyLT5sY3IgKyBMQ1JfQ01ETCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBhY2NlbGVyYXRvciB0byBmaW5pc2ggaXRzIG9wZXJhdGlvbnMgYmVmb3JlIHdyaXRpbmcKKyAqIHRvIHRoZSBmcmFtZWJ1ZmZlciBmb3IgY29uc2lzdGVudCBkaXNwbGF5IG91dHB1dC4KKyAqLworc3RhdGljIGludCB0bWlvZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqZmJpKQoreworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBmYmktPnBhcjsKKworCWludCByZXQ7CisJaW50IGkgPSAwOworCisJcmV0ID0gdG1pb2ZiX2FjY193YWl0KGZiaSwgMCk7CisKKwl3aGlsZSAodG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9CQkVTKSAmIDIpIHsgLyogYmxpdCBhY3RpdmUgKi8KKwkJdWRlbGF5KDEpOworCQlpKysgOworCQlpZiAoaSA+IDEwMDAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInRpbWVvdXQgd2FpdGluZyBmb3IgYmxpdCB0byBlbmQhXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3RtaW9mYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJY29uc3QgdTMyIGNtZFtdID0geworCQlUTUlPRkJfQUNDX0RTQURSKChyZWN0LT5keSAqIGZiaS0+bW9kZS0+eHJlcyArIHJlY3QtPmR4KSAqIDIpLAorCQlUTUlPRkJfQUNDX0RIUElYKHJlY3QtPndpZHRoIC0gMSksCisJCVRNSU9GQl9BQ0NfRFZQSVgocmVjdC0+aGVpZ2h0IC0gMSksCisJCVRNSU9GQl9BQ0NfRklMTChyZWN0LT5jb2xvciksCisJCVRNSU9GQl9BQ0NfRkxHTywKKwl9OworCisJaWYgKGZiaS0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwKKwkgICAgZmJpLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CisJCWNmYl9maWxscmVjdChmYmksIHJlY3QpOworCQlyZXR1cm47CisJfQorCisJdG1pb2ZiX2FjY193cml0ZShmYmksIGNtZCwgQVJSQVlfU0laRShjbWQpKTsKK30KKworc3RhdGljIHZvaWQKK3RtaW9mYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJY29uc3QgdTMyIGNtZFtdID0geworCQlUTUlPRkJfQUNDX0RTQURSKChhcmVhLT5keSAqIGZiaS0+bW9kZS0+eHJlcyArIGFyZWEtPmR4KSAqIDIpLAorCQlUTUlPRkJfQUNDX0RIUElYKGFyZWEtPndpZHRoIC0gMSksCisJCVRNSU9GQl9BQ0NfRFZQSVgoYXJlYS0+aGVpZ2h0IC0gMSksCisJCVRNSU9GQl9BQ0NfU1NBRFIoKGFyZWEtPnN5ICogZmJpLT5tb2RlLT54cmVzICsgYXJlYS0+c3gpICogMiksCisJCVRNSU9GQl9BQ0NfU0NHTywKKwl9OworCisJaWYgKGZiaS0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwKKwkgICAgZmJpLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CisJCWNmYl9jb3B5YXJlYShmYmksIGFyZWEpOworCQlyZXR1cm47CisJfQorCisJdG1pb2ZiX2FjY193cml0ZShmYmksIGNtZCwgQVJSQVlfU0laRShjbWQpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0bWlvZmJfY2xlYXJzY3JlZW4oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0IHJlY3QgPSB7CisJCS5keAk9IDAsCisJCS5keQk9IDAsCisJCS53aWR0aAk9IGluZm8tPm1vZGUtPnhyZXMsCisJCS5oZWlnaHQJPSBpbmZvLT5tb2RlLT55cmVzLAorCQkuY29sb3IJPSAwLAorCQkucm9wCT0gUk9QX0NPUFksCisJfTsKKworCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX3ZibGFuayhzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3QgZmJfdmJsYW5rICp2YmxhbmspCit7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGZiaS0+cGFyOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBmYmktPm1vZGU7CisJdW5zaWduZWQgaW50IHZjb3VudCA9IHRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfQ0RMTik7CisJdW5zaWduZWQgaW50IHZkcyA9IG1vZGUtPnZzeW5jX2xlbiArIG1vZGUtPnVwcGVyX21hcmdpbjsKKworCXZibGFuay0+dmNvdW50ID0gdmNvdW50OworCXZibGFuay0+ZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9WQkxBTksgfCBGQl9WQkxBTktfSEFWRV9WQ09VTlQKKwkJCQkJCXwgRkJfVkJMQU5LX0hBVkVfVlNZTkM7CisKKwlpZiAodmNvdW50IDwgbW9kZS0+dnN5bmNfbGVuKQorCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKKworCWlmICh2Y291bnQgPCB2ZHMgfHwgdmNvdW50ID4gdmRzICsgbW9kZS0+eXJlcykKKwkJdmJsYW5rLT5mbGFncyB8PSBGQl9WQkxBTktfVkJMQU5LSU5HOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0bWlvZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmZiaSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZCSU9HRVRfVkJMQU5LOiB7CisJCXN0cnVjdCBmYl92YmxhbmsgdmJsYW5rID0gezB9OworCQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwkJdG1pb2ZiX3ZibGFuayhmYmksICZ2YmxhbmspOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YmxhbmssIHNpemVvZiB2YmxhbmspKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorCWNhc2UgRkJJT19UTUlPX0FDQ19TWU5DOgorCQl0bWlvZmJfc3luYyhmYmkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgRkJJT19UTUlPX0FDQ19XUklURTogeworCQl1MzIgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopIGFyZzsKKwkJdTMyIGxlbjsKKwkJdTMyIGFjY1sxNl07CisKKwkJaWYgKGdldF91c2VyKGxlbiwgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGxlbiA+IEFSUkFZX1NJWkUoYWNjKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoYWNjLCBhcmdwICsgMSwgc2l6ZW9mKHUzMikgKiBsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIHRtaW9mYl9hY2Nfd3JpdGUoZmJpLCBhY2MsIGxlbik7CisJfQorI2VuZGlmCisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTZWxlY3QgdGhlIHNtYWxsZXN0IG1vZGUgdGhhdCBhbGxvd3MgdGhlIGRlc2lyZWQgcmVzb2x1dGlvbiB0byBiZQorICogZGlzcGxheWVkLiAgSWYgZGVzaXJlZCwgdGhlIHggYW5kIHkgcGFyYW1ldGVycyBjYW4gYmUgcm91bmRlZCB1cCB0bworICogbWF0Y2ggdGhlIHNlbGVjdGVkIG1vZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlICoKK3RtaW9mYl9maW5kX21vZGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9CisJCWluZm8tPmRldmljZS0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqYmVzdCA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX21vZGVzOyBpKyspIHsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IGRhdGEtPm1vZGVzICsgaTsKKworCQlpZiAobW9kZS0+eHJlcyA+PSB2YXItPnhyZXMgJiYgbW9kZS0+eXJlcyA+PSB2YXItPnlyZXMKKwkJCQkmJiAoIWJlc3QgfHwgKG1vZGUtPnhyZXMgPCBiZXN0LT54cmVzCisJCQkJCSAgICYmIG1vZGUtPnlyZXMgPCBiZXN0LT55cmVzKSkpCisJCQliZXN0ID0gbW9kZTsKKwl9CisKKwlyZXR1cm4gYmVzdDsKK30KKworc3RhdGljIGludCB0bWlvZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0KKwkJaW5mby0+ZGV2aWNlLT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKworCW1vZGUgPSB0bWlvZmJfZmluZF9tb2RlKGluZm8sIHZhcik7CisJaWYgKCFtb2RlIHx8IHZhci0+Yml0c19wZXJfcGl4ZWwgPiAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmYl92aWRlb21vZGVfdG9fdmFyKHZhciwgbW9kZSk7CisKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1vZGUtPnhyZXM7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSBpbmZvLT5zY3JlZW5fc2l6ZSAvIChtb2RlLT54cmVzICogMik7CisKKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFyLT54b2Zmc2V0ID0gMDsKKwl2YXItPnlvZmZzZXQgPSAwOworCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwl2YXItPmdyYXlzY2FsZSA9IDA7CisJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwl2YXItPm5vbnN0ZCA9IDA7CisJdmFyLT5oZWlnaHQgPSBkYXRhLT5oZWlnaHQ7IC8qIG1tICovCisJdmFyLT53aWR0aCA9IGRhdGEtPndpZHRoOyAvKiBtbSAqLworCXZhci0+cm90YXRlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bWlvZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKKworCW1vZGUgPSB0bWlvZmJfZmluZF9tb2RlKGluZm8sIHZhcik7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8tPm1vZGUgPSBtb2RlOworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPm1vZGUtPnhyZXMgKgorCQkJdmFyLT5iaXRzX3Blcl9waXhlbCAvIDg7CisKKwl0bWlvZmJfaHdfbW9kZSh0b19wbGF0Zm9ybV9kZXZpY2UoaW5mby0+ZGV2aWNlKSk7CisJdG1pb2ZiX2NsZWFyc2NyZWVuKGluZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRtaW9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJaWYgKHJlZ25vIDwgQVJSQVlfU0laRShwYXItPnBzZXVkb19wYWxldHRlKSkgeworCQlwYXItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9CisJCQkoKHJlZCAmIDB4ZjgwMCkpIHwKKwkJCSgoZ3JlZW4gJiAweGZjMDApID4+ICA1KSB8CisJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJLyoKKwkgKiBldmVyeXRoaW5nIGlzIGRvbmUgaW4gbGNkL2JsIGRyaXZlcnMuCisJICogdGhpcyBpcyBwdXJlbHkgdG8gbWFrZSBzeXNmcyBoYXBweSBhbmQgd29yay4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdG1pb2ZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisKKwkuZmJfaW9jdGwJPSB0bWlvZmJfaW9jdGwsCisJLmZiX2NoZWNrX3Zhcgk9IHRtaW9mYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJPSB0bWlvZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnCT0gdG1pb2ZiX3NldGNvbHJlZywKKwkuZmJfYmxhbmsJPSB0bWlvZmJfYmxhbmssCisJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJLmZiX3N5bmMJPSB0bWlvZmJfc3luYywKKwkuZmJfZmlsbHJlY3QJPSB0bWlvZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gdG1pb2ZiX2NvcHlhcmVhLAorI2Vsc2UKKwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorI2VuZGlmCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdG1pb2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmNjciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmxjciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnZyYW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyOworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIG9ubHkgd2F5IEFUTSB0byBkaXNhYmxlIHRoZSBmYgorCSAqLworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJOVUxMIHBsYXRmb3JtIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG1pb2ZiX3BhciksICZkZXYtPmRldik7CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcGFyID0gaW5mby0+cGFyOworCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0X2FjYyk7CisKKwlwYXItPnVzZV9wb2xsaW5nID0gdHJ1ZTsKKworCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQQorCQkJfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVDsKKyNlbHNlCisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKyNlbmRpZgorCisJaW5mby0+ZmJvcHMgPSAmdG1pb2ZiX29wczsKKworCXN0cmNweShpbmZvLT5maXguaWQsICJ0bWlvLWZiIik7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSB2cmFtLT5zdGFydDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSByZXNvdXJjZV9zaXplKHZyYW0pOworCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gbGNyLT5zdGFydDsKKwlpbmZvLT5maXgubW1pb19sZW4gPSByZXNvdXJjZV9zaXplKGxjcik7CisJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbiAtICg0ICogVE1JT0ZCX0ZJRk9fU0laRSk7CisJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBwYXItPnBzZXVkb19wYWxldHRlOworCisJcGFyLT5jY3IgPSBpb3JlbWFwKGNjci0+c3RhcnQsIHJlc291cmNlX3NpemUoY2NyKSk7CisJaWYgKCFwYXItPmNjcikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX2NjcjsKKwl9CisKKwlwYXItPmxjciA9IGlvcmVtYXAoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CisJaWYgKCFwYXItPmxjcikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX2xjcjsKKwl9CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CisJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX3ZyYW07CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCAmdG1pb2ZiX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJZGV2LT5kZXYuYnVzX2lkLCBpbmZvKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCXJldHZhbCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwKKwkJCWRhdGEtPm1vZGVzLCBkYXRhLT5udW1fbW9kZXMsCisJCQlkYXRhLT5tb2RlcywgMTYpOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZpbmRfbW9kZTsKKwl9CisKKwlpZiAoY2VsbC0+ZW5hYmxlKSB7CisJCXJldHZhbCA9IGNlbGwtPmVuYWJsZShkZXYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldHZhbCA9IHRtaW9mYl9od19pbml0KGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfaHdfaW5pdDsKKworCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChkYXRhLT5tb2RlcywgZGF0YS0+bnVtX21vZGVzLAorCQkJCSAmaW5mby0+bW9kZWxpc3QpOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKKwkJCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjoKKy8qZXJyX3NldF9wYXI6Ki8KKwl0bWlvZmJfaHdfc3RvcChkZXYpOworZXJyX2h3X2luaXQ6CisJaWYgKGNlbGwtPmRpc2FibGUpCisJCWNlbGwtPmRpc2FibGUoZGV2KTsKK2Vycl9lbmFibGU6CitlcnJfZmluZF9tb2RlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaXJxLCBpbmZvKTsKK2Vycl9yZXF1ZXN0X2lycToKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKK2Vycl9pb3JlbWFwX3ZyYW06CisJaW91bm1hcChwYXItPmxjcik7CitlcnJfaW9yZW1hcF9sY3I6CisJaW91bm1hcChwYXItPmNjcik7CitlcnJfaW9yZW1hcF9jY3I6CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0bWlvZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXI7CisKKwlpZiAoaW5mbykgeworCQlwYXIgPSBpbmZvLT5wYXI7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisKKwkJdG1pb2ZiX2h3X3N0b3AoZGV2KTsKKworCQlpZiAoY2VsbC0+ZGlzYWJsZSkKKwkJCWNlbGwtPmRpc2FibGUoZGV2KTsKKworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJCWZyZWVfaXJxKGlycSwgaW5mbyk7CisKKwkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisJCWlvdW5tYXAocGFyLT5sY3IpOworCQlpb3VubWFwKHBhci0+Y2NyKTsKKworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIHRtaW9mYl9kdW1wX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJcHJpbnRrKEtFUk5fREVCVUcgImxoY2NyOlxuIik7CisjZGVmaW5lIENDUl9QUihuKQlwcmludGsoS0VSTl9ERUJVRyAiXHQiICNuICIgPSBcdCUwNHhcbiIsXAorCQl0bWlvX2lvcmVhZDE2KHBhci0+Y2NyICsgQ0NSXyAjIyBuKSk7CisJQ0NSX1BSKENNRCk7CisJQ0NSX1BSKFJFVklEKTsKKwlDQ1JfUFIoQkFTRUwpOworCUNDUl9QUihCQVNFSCk7CisJQ0NSX1BSKFVHQ0MpOworCUNDUl9QUihHQ0MpOworCUNDUl9QUihVU0MpOworCUNDUl9QUihWUkFNUlRDKTsKKwlDQ1JfUFIoVlJBTVNBQyk7CisJQ0NSX1BSKFZSQU1CQyk7CisjdW5kZWYgQ0NSX1BSCisKKwlwcmludGsoS0VSTl9ERUJVRyAibGNyOiBcbiIpOworI2RlZmluZSBMQ1JfUFIobikJcHJpbnRrKEtFUk5fREVCVUcgIlx0IiAjbiAiID0gXHQlMDR4XG4iLFwKKwkJdG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl8gIyMgbikpOworCUxDUl9QUihVSVMpOworCUxDUl9QUihWSFBOKTsKKwlMQ1JfUFIoQ0ZTQUwpOworCUxDUl9QUihDRlNBSCk7CisJTENSX1BSKENGUyk7CisJTENSX1BSKENGV1MpOworCUxDUl9QUihCQklFKTsKKwlMQ1JfUFIoQkJJU0MpOworCUxDUl9QUihDQ1MpOworCUxDUl9QUihCQkVTKTsKKwlMQ1JfUFIoQ01ETCk7CisJTENSX1BSKENNREgpOworCUxDUl9QUihDRkMpOworCUxDUl9QUihDQ0lGQyk7CisJTENSX1BSKEhXVCk7CisJTENSX1BSKExDRENDUkMpOworCUxDUl9QUihMQ0RDQyk7CisJTENSX1BSKExDRENPUEMpOworCUxDUl9QUihMQ0RJUyk7CisJTENSX1BSKExDRElNKTsKKwlMQ1JfUFIoTENESUUpOworCUxDUl9QUihHRFNBTCk7CisJTENSX1BSKEdEU0FIKTsKKwlMQ1JfUFIoVkhQQ0wpOworCUxDUl9QUihWSFBDSCk7CisJTENSX1BSKEdNKTsKKwlMQ1JfUFIoSFQpOworCUxDUl9QUihIRFMpOworCUxDUl9QUihIU1MpOworCUxDUl9QUihIU0UpOworCUxDUl9QUihITlApOworCUxDUl9QUihWVCk7CisJTENSX1BSKFZEUyk7CisJTENSX1BSKFZTUyk7CisJTENSX1BSKFZTRSk7CisJTENSX1BSKENETE4pOworCUxDUl9QUihJTE4pOworCUxDUl9QUihTUCk7CisJTENSX1BSKE1JU0MpOworCUxDUl9QUihWSUhTUyk7CisJTENSX1BSKFZJVlMpOworCUxDUl9QUihWSVZFKTsKKwlMQ1JfUFIoVklWU1MpOworCUxDUl9QUihWQ0NJUyk7CisJTENSX1BSKFZJRFdTQUwpOworCUxDUl9QUihWSURXU0FIKTsKKwlMQ1JfUFIoVklEUlNBTCk7CisJTENSX1BSKFZJRFJTQUgpOworCUxDUl9QUihWSVBERFNUKTsKKwlMQ1JfUFIoVklQRERFVCk7CisJTENSX1BSKFZJRSk7CisJTENSX1BSKFZDUyk7CisJTENSX1BSKFZQSFdDKTsKKwlMQ1JfUFIoVlBIUyk7CisJTENSX1BSKFZQVldDKTsKKwlMQ1JfUFIoVlBWUyk7CisJTENSX1BSKFBMSFBJWCk7CisJTENSX1BSKFhTKTsKKwlMQ1JfUFIoWENLSFcpOworCUxDUl9QUihTVEhTKTsKKwlMQ1JfUFIoVlQyKTsKKwlMQ1JfUFIoWUNLU1cpOworCUxDUl9QUihZU1RTKTsKKwlMQ1JfUFIoUFBPTFMpOworCUxDUl9QUihQUkVDVyk7CisJTENSX1BSKFZDTEtIVyk7CisJTENSX1BSKE9DKTsKKyN1bmRlZiBMQ1JfUFIKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRtaW9mYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldHZhbCA9IDA7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisKKwlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKKwkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CisKKworCS8qCisJICogVGhlIGZiIHNob3VsZCBiZSB1c2FibGUgZXZlbiBpZiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoYW5kIHRoZXkgYXJlCisJICogZHVyaW5nIHN1c3BlbmQvcmVzdW1lKS4gU3dpdGNoIHRlbXBvcmFyeSB0byBmb3JjZWQgcG9sbGluZy4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJ0bWlvZmI6IHN3aXRjaGluZyB0byBwb2xsaW5nXG4iKTsKKwlwYXItPnVzZV9wb2xsaW5nID0gdHJ1ZTsKKwl0bWlvZmJfaHdfc3RvcChkZXYpOworCisJaWYgKGNlbGwtPnN1c3BlbmQpCisJCXJldHZhbCA9IGNlbGwtPnN1c3BlbmQoZGV2KTsKKworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldHZhbDsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKworCWlmIChjZWxsLT5yZXN1bWUpIHsKKwkJcmV0dmFsID0gY2VsbC0+cmVzdW1lKGRldik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwl9CisKKwl0bWlvZmJfaXJxKC0xLCBpbmZvKTsKKworCXRtaW9mYl9od19pbml0KGRldik7CisKKwl0bWlvZmJfaHdfbW9kZShkZXYpOworCisJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CitvdXQ6CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiByZXR2YWw7Cit9CisjZWxzZQorI2RlZmluZSB0bWlvZmJfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHRtaW9mYl9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRtaW9mYl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gInRtaW8tZmIiLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCT0gdG1pb2ZiX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodG1pb2ZiX3JlbW92ZSksCisJLnN1c3BlbmQJPSB0bWlvZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRtaW9mYl9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyB2b2lkIF9faW5pdCB0bWlvZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybjsKKworCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogRklYTUUKKwkJICovCisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHRtaW9mYl9pbml0KHZvaWQpCit7CisjaWZuZGVmIE1PRFVMRQorCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInRtaW9mYiIsICZvcHRpb24pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl0bWlvZmJfc2V0dXAob3B0aW9uKTsKKyNlbmRpZgorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRtaW9mYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG1pb2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdG1pb2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRtaW9mYl9pbml0KTsKK21vZHVsZV9leGl0KHRtaW9mYl9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUTUlPIGZyYW1lYnVmZmVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXMgSHVtYmVydCwgRGlyayBPcGZlciwgRG1pdHJ5IEJhcnlzaGtvdiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCA1MDc0NDIyLi42YzJkMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtNTE2LDEwICs1MTYsMTIgQEAKIAogCQllcnIgPSB1dmVzYWZiX2V4ZWModGFzayk7CiAJCWlmIChlcnIgfHwgKHRhc2stPnQucmVncy5lYXggJiAweGZmZmYpICE9IDB4MDA0ZikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1dmVzYWZiOiBHZXR0aW5nIG1vZGUgaW5mbyBibG9jayAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1dmVzYWZiOiBHZXR0aW5nIG1vZGUgaW5mbyBibG9jayAiCiAJCQkJImZvciBtb2RlIDB4JXggZmFpbGVkIChlYXg9MHgleCwgZXJyPSVkKVxuIiwKIAkJCQkqbW9kZSwgKHUzMil0YXNrLT50LnJlZ3MuZWF4LCBlcnIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltb2RlKys7CisJCQlwYXItPnZiZV9tb2Rlc19jbnQtLTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJbWliID0gdGFzay0+YnVmOwpAQCAtNTQ4LDcgKzU1MCwxMCBAQAogCQkJbWliLT5kZXB0aCA9IG1pYi0+Yml0c19wZXJfcGl4ZWw7CiAJfQogCi0JcmV0dXJuIDA7CisJaWYgKHBhci0+dmJlX21vZGVzX2NudCA+IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IGUzMWJjYTguLjViMjkzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC01OCw3ICs1OCw2IEBACiAJCXVuc2lnbmVkIGNoYXIJQ2xvY2tpbmdNb2RlOwkgIC8qIFNlcS1Db250cm9sbGVyOjAxaCAqLwogCX0gdmdhX3N0YXRlOwogCXN0cnVjdCB2Z2FzdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwogCXVuc2lnbmVkIGludCByZWZfY291bnQ7CiAJaW50IHBhbGV0dGVfYmxhbmtlZCwgdmVzYV9ibGFua2VkLCBtb2RlLCBpc1ZHQTsKIAl1OCBtaXNjLCBwZWxfbXNrLCB2c3MsIGNsa2RpdjsKQEAgLTI4Niw3ICsyODUsNiBAQAogewogCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOwogCWlmICghcGFyLT5yZWZfY291bnQpIHsKIAkJbWVtc2V0KCZwYXItPnN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IHZnYXN0YXRlKSk7CiAJCXBhci0+c3RhdGUuZmxhZ3MgPSBWR0FfU0FWRV9GT05UUyB8IFZHQV9TQVZFX01PREUgfApAQCAtMjk0LDcgKzI5Miw2IEBACiAJCXNhdmVfdmdhKCZwYXItPnN0YXRlKTsKIAl9CiAJcGFyLT5yZWZfY291bnQrKzsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDE1ICszMDAsMTIgQEAKIHsKIAlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKLQlpZiAoIXBhci0+cmVmX2NvdW50KSB7Ci0JCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCWlmICghcGFyLT5yZWZfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWlmIChwYXItPnJlZl9jb3VudCA9PSAxKQogCQlyZXN0b3JlX3ZnYSgmcGFyLT5zdGF0ZSk7CiAJcGFyLT5yZWZfY291bnQtLTsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMyNiw3ICsxMzIwLDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICJ2Z2ExNmZiOiBtYXBwZWQgdG8gMHglcFxuIiwgaW5mby0+c2NyZWVuX2Jhc2UpOwogCXBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2luaXQoJnBhci0+b3Blbl9sb2NrKTsKIAlwYXItPmlzVkdBID0gc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQTsKIAlwYXItPnBhbGV0dGVfYmxhbmtlZCA9IDA7CiAJcGFyLT52ZXNhX2JsYW5rZWQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMzYjRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVklBIGZyYW1lYnVmZmVyIGRyaXZlciAoZm9yIExpbnV4IEtlcm5lbCAyLjYpCisjCisKK29iai0kKENPTkZJR19GQl9WSUEpICs9IHZpYWZiLm8KKwordmlhZmIteQk6PXZpYWZiZGV2Lm8gaHcubyBpZmFjZS5vICB2aWFfaTJjLm8gZHZpLm8gbGNkLm8gaW9jdGwubyBhY2NlbC5vIHZpYV91dGlsaXR5Lm8gdnQxNjM2Lm8gZ2xvYmFsLm8gdGJsRFBBU2V0dGluZy5vIHZpYW1vZGUubyB0YmwxNjM2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjUyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgImdsb2JhbC5oIgorCit2b2lkIHZpYWZiX2luaXRfYWNjZWwodm9pZCkKK3sKKwl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC09IENVUlNPUl9TSVpFOworCXZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJdmlhcGFyaW5mby0+ZmJtZW1fdXNlZCArPSBDVVJTT1JfU0laRTsKKworCS8qIFJldmVyc2UgOCoxMDI0IG1lbW9yeSBzcGFjZSBmb3IgY3Vyc29yIGltYWdlICovCisJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtPSAoQ1VSU09SX1NJWkUgKyBWUV9TSVpFKTsKKwl2aWFwYXJpbmZvLT5WUV9zdGFydCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJdmlhcGFyaW5mby0+VlFfZW5kID0gdmlhcGFyaW5mby0+VlFfc3RhcnQgKyBWUV9TSVpFIC0gMTsKKwl2aWFwYXJpbmZvLT5mYm1lbV91c2VkICs9IChDVVJTT1JfU0laRSArIFZRX1NJWkUpOyB9CisKK3ZvaWQgdmlhZmJfaW5pdF8yZF9lbmdpbmUodm9pZCkKK3sKKwl1MzIgZHdWUVN0YXJ0QWRkciwgZHdWUUVuZEFkZHI7CisJdTMyIGR3VlFMZW4sIGR3VlFTdGFydEwsIGR3VlFFbmRMLCBkd1ZRU3RhcnRFbmRIOworCisJLyogaW5pdCAyRCBlbmdpbmUgcmVncyB0byByZXNldCAyRCBlbmdpbmUgKi8KKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRU1PREUpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BBVEFERFIpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0ZHQ09MT1IpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0JHQ09MT1IpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NMSVBUTCk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ0xJUEJSKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19PRkZTRVQpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0tFWUNPTlRST0wpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19NT05PUEFUMSk7CisKKwkvKiBJbml0IEFHUCBhbmQgVlEgcmVncyAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQl3cml0ZWwoMHg2ODBBMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDAzMzMwMDQsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDYwMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MTAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDYzMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2NDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4N0QwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwkJd3JpdGVsKDB4RkUwMjAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJYnJlYWs7CisJfQorCWlmICh2aWFwYXJpbmZvLT5WUV9zdGFydCAhPSAwKSB7CisJCS8qIEVuYWJsZSBWUSAqLworCQlkd1ZRU3RhcnRBZGRyID0gdmlhcGFyaW5mby0+VlFfc3RhcnQ7CisJCWR3VlFFbmRBZGRyID0gdmlhcGFyaW5mby0+VlFfZW5kOworCisJCWR3VlFTdGFydEwgPSAweDUwMDAwMDAwIHwgKGR3VlFTdGFydEFkZHIgJiAweEZGRkZGRik7CisJCWR3VlFFbmRMID0gMHg1MTAwMDAwMCB8IChkd1ZRRW5kQWRkciAmIDB4RkZGRkZGKTsKKwkJZHdWUVN0YXJ0RW5kSCA9IDB4NTIwMDAwMDAgfAorCQkJKChkd1ZRU3RhcnRBZGRyICYgMHhGRjAwMDAwMCkgPj4gMjQpIHwKKwkJCSgoZHdWUUVuZEFkZHIgJiAweEZGMDAwMDAwKSA+PiAxNik7CisJCWR3VlFMZW4gPSAweDUzMDAwMDAwIHwgKFZRX1NJWkUgPj4gMyk7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQkJZHdWUVN0YXJ0TCB8PSAweDIwMDAwMDAwOworCQkJZHdWUUVuZEwgfD0gMHgyMDAwMDAwMDsKKwkJCWR3VlFTdGFydEVuZEggfD0gMHgyMDAwMDAwMDsKKwkJCWR3VlFMZW4gfD0gMHgyMDAwMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCXdyaXRlbCgweDAwMTAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRU3RhcnRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUVuZEwsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRTGVuLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg3NDMwMTAwMSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MDAwMDAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd3JpdGVsKDB4MDBGRTAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNFVCk7CisJCQl3cml0ZWwoMHgwODAwMDNGRSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEEwMDAyN0MsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBCMDAwMjYwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwQzAwMDI3NCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEQwMDAyNjQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBFMDAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwRjAwMDAyMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MTAwMDAyN0UsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDExMDAwMkZFLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgyMDBGMDA2MCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCisJCQl3cml0ZWwoMHgwMDAwMDAwNiwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDAwMDhDMEYsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ0MDAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NTA4MEMwNCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDY4MDA0MDgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKworCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRU3RhcnRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUVuZEwsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRTGVuLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIERpc2FibGUgVlEgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCQl3cml0ZWwoMHgwMDEwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJCXdyaXRlbCgweDc0MzAxMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdyaXRlbCgweDAwRkUwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQkJd3JpdGVsKDB4MDAwMDAwMDQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQwMDA4QzBGLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NDAwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDUwODBDMDQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ2ODAwNDA4LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aCh2aWFwYXJpbmZvLT5icHApOworCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7CisKKwl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8CisJCSAgICgoKHZpYXBhcmluZm8tPmhyZXMgKgorCQkgICAgICB2aWFwYXJpbmZvLT5icHAgPj4gMykgPj4gMykgfCAoKCh2aWFwYXJpbmZvLT5ocmVzICoKKwkJCQkJCSAgIHZpYXBhcmluZm8tPgorCQkJCQkJICAgYnBwID4+IDMpID4+IDMpIDw8IDE2KSksCisJCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKK30KKwordm9pZCB2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW50IGJwcCkKK3sKKwl1MzIgZHdHRU1vZGU7CisKKwlkd0dFTW9kZSA9IHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyAweDA0KSAmIDB4RkZGRkZDRkY7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgMTY6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fMTZicHA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fMzJicHA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fOGJwcDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IEJQUCBhbmQgUGl0Y2ggKi8KKwl3cml0ZWwoZHdHRU1vZGUsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFTU9ERSk7Cit9CisKK3ZvaWQgdmlhZmJfaHdfY3Vyc29yX2luaXQodm9pZCkKK3sKKwkvKiBTZXQgQ3Vyc29yIEltYWdlIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCh2aWFwYXJpbmZvLT5jdXJzb3Jfc3RhcnQsCisJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfT1JHKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfQkcpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9GRyk7Cit9CisKK3ZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpCit7CisJdTMyIHRlbXA7CisJdTMyIGlnYV9wYXRoID0gKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5pZ2FfcGF0aDsKKworCXRlbXAgPSByZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJc3dpdGNoIChTdGF0dXMpIHsKKwljYXNlIEhXX0N1cnNvcl9PTjoKKwkJdGVtcCB8PSAweDE7CisJCWJyZWFrOworCWNhc2UgSFdfQ3Vyc29yX09GRjoKKwkJdGVtcCAmPSAweEZGRkZGRkZFOworCQlicmVhazsKKwl9CisJc3dpdGNoIChpZ2FfcGF0aCkgeworCWNhc2UgSUdBMjoKKwkJdGVtcCB8PSAweDgwMDAwMDAwOworCQlicmVhazsKKwljYXNlIElHQTE6CisJZGVmYXVsdDoKKwkJdGVtcCAmPSAweDdGRkZGRkZGOworCX0KKwl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworfQorCitpbnQgdmlhZmJfd2FpdF9lbmdpbmVfaWRsZSh2b2lkKQoreworCWludCBsb29wID0gMDsKKworCXdoaWxlICghKHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NUQVRVUykgJgorCQkJVklBX1ZSX1FVRVVFX0JVU1kpICYmIChsb29wKysgPCBNQVhMT09QKSkKKwkJY3B1X3JlbGF4KCk7CisKKwl3aGlsZSAoKHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NUQVRVUykgJgorCQkgICAgKFZJQV9DTURfUkdUUl9CVVNZIHwgVklBXzJEX0VOR19CVVNZIHwgVklBXzNEX0VOR19CVVNZKSkgJiYKKwkJICAgIChsb29wKysgPCBNQVhMT09QKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gbG9vcCA+PSBNQVhMT09QOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvYWNjZWwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZjg1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19BQ0NFTF9IX18KKyNkZWZpbmUgX19BQ0NFTF9IX18KKworI2RlZmluZSBGQl9BQ0NFTF9WSUFfVU5JQ0hST01FICA1MAorCisvKiBNTUlPIEJhc2UgQWRkcmVzcyBEZWZpbml0aW9uICovCisjZGVmaW5lIE1NSU9fVkdBQkFTRSAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTU1JT19DUl9SRUFEICAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNENCkKKyNkZWZpbmUgTU1JT19DUl9XUklURSAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNENSkKKyNkZWZpbmUgTU1JT19TUl9SRUFEICAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNDNCkKKyNkZWZpbmUgTU1JT19TUl9XUklURSAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNDNSkKKworLyogSFcgQ3Vyc29yIFN0YXR1cyBEZWZpbmUgKi8KKyNkZWZpbmUgSFdfQ3Vyc29yX09OICAgIDAKKyNkZWZpbmUgSFdfQ3Vyc29yX09GRiAgIDEKKworI2RlZmluZSBDVVJTT1JfU0laRSAgICAgKDggKiAxMDI0KQorI2RlZmluZSBWUV9TSVpFICAgICAgICAgKDI1NiAqIDEwMjQpCisKKyNkZWZpbmUgVklBX01NSU9fQkxUQkFTRSAgICAgICAgMHgyMDAwMDAKKyNkZWZpbmUgVklBX01NSU9fQkxUU0laRSAgICAgICAgMHgyMDAwMDAKKworLyogRGVmaW5lcyBmb3IgMkQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJQV9SRUdfR0VDTUQgICAgICAgICAgIDB4MDAwCisjZGVmaW5lIFZJQV9SRUdfR0VNT0RFICAgICAgICAgIDB4MDA0CisjZGVmaW5lIFZJQV9SRUdfU1JDUE9TICAgICAgICAgIDB4MDA4CisjZGVmaW5lIFZJQV9SRUdfRFNUUE9TICAgICAgICAgIDB4MDBDCisvKiB3aWR0aCBhbmQgaGVpZ2h0ICovCisjZGVmaW5lIFZJQV9SRUdfRElNRU5TSU9OICAgICAgIDB4MDEwCisjZGVmaW5lIFZJQV9SRUdfUEFUQUREUiAgICAgICAgIDB4MDE0CisjZGVmaW5lIFZJQV9SRUdfRkdDT0xPUiAgICAgICAgIDB4MDE4CisjZGVmaW5lIFZJQV9SRUdfQkdDT0xPUiAgICAgICAgIDB4MDFDCisvKiB0b3AgYW5kIGxlZnQgb2YgY2xpcHBpbmcgKi8KKyNkZWZpbmUgVklBX1JFR19DTElQVEwgICAgICAgICAgMHgwMjAKKy8qIGJvdHRvbSBhbmQgcmlnaHQgb2YgY2xpcHBpbmcgKi8KKyNkZWZpbmUgVklBX1JFR19DTElQQlIgICAgICAgICAgMHgwMjQKKyNkZWZpbmUgVklBX1JFR19PRkZTRVQgICAgICAgICAgMHgwMjgKKy8qIGNvbG9yIGtleSBjb250cm9sICovCisjZGVmaW5lIFZJQV9SRUdfS0VZQ09OVFJPTCAgICAgIDB4MDJDCisjZGVmaW5lIFZJQV9SRUdfU1JDQkFTRSAgICAgICAgIDB4MDMwCisjZGVmaW5lIFZJQV9SRUdfRFNUQkFTRSAgICAgICAgIDB4MDM0CisvKiBwaXRjaCBvZiBzcmMgYW5kIGRzdCAqLworI2RlZmluZSBWSUFfUkVHX1BJVENIICAgICAgICAgICAweDAzOAorI2RlZmluZSBWSUFfUkVHX01PTk9QQVQwICAgICAgICAweDAzQworI2RlZmluZSBWSUFfUkVHX01PTk9QQVQxICAgICAgICAweDA0MAorLyogZnJvbSAweDEwMCB0byAweDFmZiAqLworI2RlZmluZSBWSUFfUkVHX0NPTE9SUEFUICAgICAgICAweDEwMAorCisvKiBWSUFfUkVHX1BJVENIKDB4MzgpOiBQaXRjaCBTZXR0aW5nICovCisjZGVmaW5lIFZJQV9QSVRDSF9FTkFCTEUgICAgICAgIDB4ODAwMDAwMDAKKworLyogZGVmaW5lcyBmb3IgVklBIEhXIGN1cnNvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfTU9ERSAgICAgMHgyRDAKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfUE9TICAgICAgMHgyRDQKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfT1JHICAgICAgMHgyRDgKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfQkcgICAgICAgMHgyREMKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfRkcgICAgICAgMHgyRTAKKworLyogVklBX1JFR19HRU1PREUoMHgwNCk6IEdFIG1vZGUgKi8KKyNkZWZpbmUgVklBX0dFTV84YnBwICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VNXzE2YnBwICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFZJQV9HRU1fMzJicHAgICAgICAgICAgIDB4MDAwMDAzMDAKKworLyogVklBX1JFR19HRUNNRCgweDAwKTogMkQgRW5naW5lIENvbW1hbmQgICovCisjZGVmaW5lIFZJQV9HRUNfTk9PUCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19CTFQgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBWSUFfR0VDX0xJTkUgICAgICAgICAgICAweDAwMDAwMDA1CisKKy8qIFJvdGF0ZSBDb21tYW5kICovCisjZGVmaW5lIFZJQV9HRUNfUk9UICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworI2RlZmluZSBWSUFfR0VDX1NSQ19YWSAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfU1JDX0xJTkVBUiAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVklBX0dFQ19EU1RfWFkgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0RTVF9MSU5SQVQgICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgVklBX0dFQ19TUkNfRkIgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX1NSQ19TWVMgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFZJQV9HRUNfRFNUX0ZCICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19EU1RfU1lTICAgICAgICAgMHgwMDAwMDA4MAorCisvKiBzb3VyY2UgaXMgbW9ubyAqLworI2RlZmluZSBWSUFfR0VDX1NSQ19NT05PICAgICAgICAweDAwMDAwMTAwCisvKiBwYXR0ZXJuIGlzIG1vbm8gKi8KKyNkZWZpbmUgVklBX0dFQ19QQVRfTU9OTyAgICAgICAgMHgwMDAwMDIwMAorLyogbW9ubyBzcmMgaXMgb3BhcXVlICovCisjZGVmaW5lIFZJQV9HRUNfTVNSQ19PUEFRVUUgICAgIDB4MDAwMDAwMDAKKy8qIG1vbm8gc3JjIGlzIHRyYW5zcGFyZW50ICovCisjZGVmaW5lIFZJQV9HRUNfTVNSQ19UUkFOUyAgICAgIDB4MDAwMDA0MDAKKy8qIHBhdHRlcm4gaXMgaW4gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJQV9HRUNfUEFUX0ZCICAgICAgICAgIDB4MDAwMDAwMDAKKy8qIHBhdHRlcm4gaXMgZnJvbSByZWcgc2V0dGluZyAqLworI2RlZmluZSBWSUFfR0VDX1BBVF9SRUcgICAgICAgICAweDAwMDAwODAwCisKKyNkZWZpbmUgVklBX0dFQ19DTElQX0RJU0FCTEUgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0NMSVBfRU5BQkxFICAgICAweDAwMDAxMDAwCisKKyNkZWZpbmUgVklBX0dFQ19GSVhDT0xPUl9QQVQgICAgMHgwMDAwMjAwMAorCisjZGVmaW5lIFZJQV9HRUNfSU5DWCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19ERUNZICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBWSUFfR0VDX0lOQ1kgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfREVDWCAgICAgICAgICAgIDB4MDAwMDgwMDAKKy8qIG1vbm8gcGF0dGVybiBpcyBvcGFxdWUgKi8KKyNkZWZpbmUgVklBX0dFQ19NUEFUX09QQVFVRSAgICAgMHgwMDAwMDAwMAorLyogbW9ubyBwYXR0ZXJuIGlzIHRyYW5zcGFyZW50ICovCisjZGVmaW5lIFZJQV9HRUNfTVBBVF9UUkFOUyAgICAgIDB4MDAwMTAwMDAKKworI2RlZmluZSBWSUFfR0VDX01PTk9fVU5QQUNLICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfTU9OT19QQUNLICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgVklBX0dFQ19NT05PX0RXT1JEICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX01PTk9fV09SRCAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFZJQV9HRUNfTU9OT19CWVRFICAgICAgIDB4MDAwODAwMDAKKworI2RlZmluZSBWSUFfR0VDX0xBU1RQSVhFTF9PTiAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfTEFTVFBJWEVMX09GRiAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19YX01BSk9SICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX1lfTUFKT1IgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFZJQV9HRUNfUVVJQ0tfU1RBUlQgICAgIDB4MDA4MDAwMDAKKworLyogZGVmaW5lcyBmb3IgVklBIDNEIHJlZ2lzdGVycyAqLworI2RlZmluZSBWSUFfUkVHX1NUQVRVUyAgICAgICAgICAweDQwMAorI2RlZmluZSBWSUFfUkVHX0NSX1RSQU5TRVQgICAgICAweDQxQworI2RlZmluZSBWSUFfUkVHX0NSX1RSQU5TUEFDRQkweDQyMAorI2RlZmluZSBWSUFfUkVHX1RSQU5TRVQgICAgICAgICAweDQzQworI2RlZmluZSBWSUFfUkVHX1RSQU5TUEFDRSAgICAgICAweDQ0MAorCisvKiBWSUFfUkVHX1NUQVRVUygweDQwMCk6IEVuZ2luZSBTdGF0dXMgKi8KKworLyogQ29tbWFuZCBSZWd1bGF0b3IgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfQ01EX1JHVFJfQlVTWSAgICAgICAweDAwMDAwMDgwCisvKiAyRCBFbmdpbmUgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfMkRfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAyCisvKiAzRCBFbmdpbmUgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfM0RfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAxCisvKiBWaXJ0dWFsIFF1ZXVlIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBX1ZSX1FVRVVFX0JVU1kgICAgICAgMHgwMDAyMDAwMAorCisjZGVmaW5lIE1BWExPT1AgICAgICAgICAgICAgICAgIDB4RkZGRkZGCisKK3ZvaWQgdmlhZmJfaW5pdF9hY2NlbCh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF8yZF9lbmdpbmUodm9pZCk7Cit2b2lkIHNldF8yZF9jb2xvcl9kZXB0aChpbnQpOwordm9pZCB2aWFmYl9od19jdXJzb3JfaW5pdCh2b2lkKTsKK3ZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpOyBpbnQKK3ZpYWZiX3dhaXRfZW5naW5lX2lkbGUodm9pZCk7IHZvaWQgdmlhZmJfc2V0XzJkX2NvbG9yX2RlcHRoKGludCBicHApOworCisjZW5kaWYgLyogX19BQ0NFTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU5NWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0NISVBfSF9fCisjZGVmaW5lIF9fQ0hJUF9IX18KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBHcmFwaGljIENoaXAgSW5mb3JtYXRpb24gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgICAgIFBDSV9WSUFfVkVORE9SX0lEICAgICAgIDB4MTEwNgorCisvKiBEZWZpbmUgVklBIEdyYXBoaWMgQ2hpcCBOYW1lICovCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ0xFMjY2ICAgICAgICAxCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ0xFMjY2X0RJRCAgICAweDMxMjIKKyNkZWZpbmUgICAgIENMRTI2Nl9SRVZJU0lPTl9BWCAgICAgIDB4MEEKKyNkZWZpbmUgICAgIENMRTI2Nl9SRVZJU0lPTl9DWCAgICAgIDB4MEMKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0s0MDAgICAgICAgICAgMgorI2RlZmluZSAgICAgVU5JQ0hST01FX0s0MDBfRElEICAgICAgMHg3MjA1CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LODAwICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LODAwX0RJRCAgICAgIDB4MzEwOAorCisjZGVmaW5lICAgICBVTklDSFJPTUVfUE04MDAgICAgICAgICA0CisjZGVmaW5lICAgICBVTklDSFJPTUVfUE04MDBfRElEICAgICAweDMxMTgKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzAwICAgICAgICAgNQorI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzAwX0RJRCAgICAgMHgzMzQ0CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DWDcwMCAgICAgICAgIDYKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DWDcwMF9ESUQgICAgIDB4MzE1NworI2RlZmluZSAgICAgQ1g3MDBfUkVWSVNJT05fNzAwICAgICAgMHgwCisjZGVmaW5lICAgICBDWDcwMF9SRVZJU0lPTl83MDBNICAgICAweDEKKyNkZWZpbmUgICAgIENYNzAwX1JFVklTSU9OXzcwME0yICAgIDB4MgorCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ043NTAgICAgICAgICA3CisjZGVmaW5lICAgICBVTklDSFJPTUVfQ043NTBfRElEICAgICAweDMyMjUKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0s4TTg5MCAgICAgICAgOAorI2RlZmluZSAgICAgVU5JQ0hST01FX0s4TTg5MF9ESUQgICAgMHgzMjMwCisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9QNE04OTAgICAgICAgIDkKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9QNE04OTBfRElEICAgIDB4MzM0MworCisjZGVmaW5lICAgICBVTklDSFJPTUVfUDRNOTAwICAgICAgICAxMAorI2RlZmluZSAgICAgVU5JQ0hST01FX1A0TTkwMF9ESUQgICAgMHgzMzcxCisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9WWDgwMCAgICAgICAgIDExCisjZGVmaW5lICAgICBVTklDSFJPTUVfVlg4MDBfRElEICAgICAweDExMjIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBUTURTIFRyYXNtaXR0ZXIgSW5mb3JtYXRpb24gICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9uIFRNRFMgVHJhc21pdHRlciBJbmRleCAqLworI2RlZmluZSAgICAgTk9OX1RNRFNfVFJBTlNNSVRURVIgICAgMHgwMAorI2RlZmluZSAgICAgVlQxNjMyX1RNRFMgICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgSU5URUdSQVRFRF9UTURTICAgICAgICAgMHg0MgorCisvKiBEZWZpbml0aW9uIFRNRFMgVHJhc21pdHRlciBJMkMgU2xhdmUgQWRkcmVzcyAqLworI2RlZmluZSAgICAgVlQxNjMyX1RNRFNfSTJDX0FERFIgICAgMHgxMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZpbml0aW9uIExWRFMgVHJhc21pdHRlciBJbmZvcm1hdGlvbiAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERlZmluaXRpb24gTFZEUyBUcmFzbWl0dGVyIEluZGV4ICovCisjZGVmaW5lICAgICBOT05fTFZEU19UUkFOU01JVFRFUiAgICAweDAwCisjZGVmaW5lICAgICBWVDE2MzFfTFZEUyAgICAgICAgICAgICAweDAxCisjZGVmaW5lICAgICBWVDE2MzZfTFZEUyAgICAgICAgICAgICAweDBFCisjZGVmaW5lICAgICBJTlRFR1JBVEVEX0xWRFMgICAgICAgICAweDQxCisKKy8qIERlZmluaXRpb24gRGlnaXRhbCBUcmFuc21pdHRlciBNb2RlICovCisjZGVmaW5lICAgICBUWF9EQVRBXzEyX0JJVFMgICAgICAgICAweDAxCisjZGVmaW5lICAgICBUWF9EQVRBXzI0X0JJVFMgICAgICAgICAweDAyCisjZGVmaW5lICAgICBUWF9EQVRBX0REUl9NT0RFICAgICAgICAweDA0CisjZGVmaW5lICAgICBUWF9EQVRBX1NEUl9NT0RFICAgICAgICAweDA4CisKKy8qIERlZmluaXRpb24gTFZEUyBUcmFzbWl0dGVyIEkyQyBTbGF2ZSBBZGRyZXNzICovCisjZGVmaW5lICAgICBWVDE2MzFfTFZEU19JMkNfQUREUiAgICAweDcwCisjZGVmaW5lICAgICBWVDMyNzFfTFZEU19JMkNfQUREUiAgICAweDgwCisjZGVmaW5lICAgICBWVDE2MzZfTFZEU19JMkNfQUREUiAgICAweDgwCisKK3N0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24geworCWludCB0bWRzX2NoaXBfbmFtZTsKKwlpbnQgdG1kc19jaGlwX3NsYXZlX2FkZHI7CisJaW50IGR2aV9wYW5lbF9pZDsKKwlpbnQgZGF0YV9tb2RlOworCWludCBvdXRwdXRfaW50ZXJmYWNlOworCWludCBpMmNfcG9ydDsKKwlpbnQgZGV2aWNlX3R5cGU7Cit9OworCitzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIHsKKwlpbnQgbHZkc19jaGlwX25hbWU7CisJaW50IGx2ZHNfY2hpcF9zbGF2ZV9hZGRyOworCWludCBkYXRhX21vZGU7CisJaW50IG91dHB1dF9pbnRlcmZhY2U7CisJaW50IGkyY19wb3J0OworfTsKKworc3RydWN0IGNoaXBfaW5mb3JtYXRpb24geworCWludCBnZnhfY2hpcF9uYW1lOworCWludCBnZnhfY2hpcF9yZXZpc2lvbjsKKwlpbnQgY2hpcF9vbl9zbG90OworCXN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gdG1kc19jaGlwX2luZm87CisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzsKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIGx2ZHNfY2hpcF9pbmZvMjsKK307CisKK3N0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworfTsKKworc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworCWludCBnZXRfZHZpX3NpemVfbWV0aG9kOworCWludCBtYXhfcGl4ZWxfY2xvY2s7CisJaW50IGR2aV9wYW5lbF9zaXplOworCWludCBkdmlfcGFuZWxfaHJlczsKKwlpbnQgZHZpX3BhbmVsX3ZyZXM7CisJaW50IG5hdGl2ZV9zaXplOworfTsKKworc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworCWludCBnZXRfbGNkX3NpemVfbWV0aG9kOworCWludCBsY2RfcGFuZWxfaWQ7CisJaW50IGxjZF9wYW5lbF9zaXplOworCWludCBsY2RfcGFuZWxfaHJlczsKKwlpbnQgbGNkX3BhbmVsX3ZyZXM7CisJaW50IGRpc3BsYXlfbWV0aG9kOworCWludCBkZXZpY2VfbGNkX2R1YWxlZGdlOworCWludCBMQ0REaXRoZXJpbmc7CisJaW50IGxjZF9tb2RlOworCXUzMiB2Y2xrOwkJLypwYW5lbCBtb2RlIGNsb2NrIHZhbHVlICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIHsKKwlpbnQgQ2xrUmFuZ2VJbmRleDsKKwl1OCBEVlAwOwkJLyogQ1I5NlszOjBdICovCisJdTggRFZQMERhdGFEcmlfUzE7CS8qIFNSMkFbNV0gICAqLworCXU4IERWUDBEYXRhRHJpX1M7CS8qIFNSMUJbMV0gICAqLworCXU4IERWUDBDbG9ja0RyaV9TMTsJLyogU1IyQVs0XSAgICovCisJdTggRFZQMENsb2NrRHJpX1M7CS8qIFNSMUVbMl0gICAqLworCXU4IERWUDE7CQkvKiBDUjlCWzM6MF0gKi8KKwl1OCBEVlAxRHJpdmluZzsJCS8qIFNSNjVbMzowXSwgRGF0YSBhbmQgQ2xvY2sgZHJpdmluZyAqLworCXU4IERGUEhpZ2g7CQkvKiBDUjk3WzM6MF0gKi8KKwl1OCBERlBMb3c7CQkvKiBDUjk5WzM6MF0gKi8KKworfTsKKworc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyB7CisJaW50IFBhbmVsU2l6ZUlEOworCXU4IENMS19TRUxfU1QxOworCXU4IENMS19TRUxfU1QyOworfTsKKyNlbmRpZiAvKiBfX0NISVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kZWJ1Zy5oIGIvZHJpdmVycy92aWRlby92aWEvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmVhY2MyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZGVidWcuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0RFQlVHX0hfXworI2RlZmluZSBfX0RFQlVHX0hfXworCisjaWZuZGVmIFZJQUZCX0RFQlVHCisjZGVmaW5lIFZJQUZCX0RFQlVHIDAKKyNlbmRpZgorCisjaWYgVklBRkJfREVCVUcKKyNkZWZpbmUgREVCVUdfTVNHKGYsIGEuLi4pICAgcHJpbnRrKGYsICMjIGEpCisjZWxzZQorI2RlZmluZSBERUJVR19NU0coZiwgYS4uLikKKyNlbmRpZgorCisjZGVmaW5lIFZJQUZCX1dBUk4gMAorI2lmIFZJQUZCX1dBUk4KKyNkZWZpbmUgV0FSTl9NU0coZiwgYS4uLikgICBwcmludGsoZiwgIyMgYSkKKyNlbHNlCisjZGVmaW5lIFdBUk5fTVNHKGYsIGEuLi4pCisjZW5kaWYKKworI2VuZGlmIC8qIF9fREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTY1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYwpAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlICJnbG9iYWwuaCIKKworc3RhdGljIHZvaWQgdG1kc19yZWdpc3Rlcl93cml0ZShpbnQgaW5kZXgsIHU4IGRhdGEpOworc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWQoaW50IGluZGV4KTsKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKGludCBpbmRleCwgdTggKmJ1ZmYsIGludCBidWZmX2xlbik7CitzdGF0aWMgaW50IGNoZWNrX3JlZHVjZV9ibGFua2luZ19tb2RlKGludCBtb2RlX2luZGV4LAorCWludCByZWZyZXNoX3JhdGUpOworc3RhdGljIGludCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSh2b2lkKTsKK3N0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBkdmlfZ2V0X3BhbmVsX2luZm8odm9pZCk7CitzdGF0aWMgaW50IHZpYWZiX2R2aV9xdWVyeV9FRElEKHZvaWQpOworCitzdGF0aWMgaW50IGNoZWNrX3RtZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpCit7CisJaWYgKHRtZHNfcmVnaXN0ZXJfcmVhZChkZXZpY2VfaWRfc3ViYWRkcikgPT0gZGV2aWNlX2lkKQorCQlyZXR1cm4gT0s7CisJZWxzZQorCQlyZXR1cm4gRkFJTDsKK30KKwordm9pZCB2aWFmYl9pbml0X2R2aV9zaXplKHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfaW5pdF9kdmlfc2l6ZSgpXG4iKTsKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSJ2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCk7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5nZXRfZHZpX3NpemVfbWV0aG9kKSB7CisJY2FzZSBHRVRfRFZJX1NJWkVfQllfU1lTVEVNX0JJT1M6CisJCWJyZWFrOworCWNhc2UgR0VUX0RWSV9TWklFX0JZX0hXX1NUUkFQUElORzoKKwkJYnJlYWs7CisJY2FzZSBHRVRfRFZJX1NJWkVfQllfVkdBX0JJT1M6CisJZGVmYXVsdDoKKwkJZHZpX2dldF9wYW5lbF9pbmZvKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCB2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNyMmEgPSAwLCBzcjFlID0gMCwgc3IzZSA9IDA7CisKKwkvKiBUdXJuIG9uIG91cHV0dGluZyBwYWQgKi8KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkgICAgLyo9KiBERlAgTG93IFBhZCBvbiAqPSovCisJCXNyMmEgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCBCSVQwICsgQklUMSk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJLyogREZQIExvdyBQYWQgb24gKi8KKwkJc3IyYSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJLyogRFZQMCBQYWQgb24gKi8KKwkJc3IxZSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICAvKiBEVlAwL0RWUDEgUGFkIG9uICovCisJCXNyMWUgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweEYwLCBCSVQ0ICsKKwkJCUJJVDUgKyBCSVQ2ICsgQklUNyk7CisJICAgIC8qIFNSM0VbMV1NdWx0aS1mdW5jdGlvbiBzZWxlY3Rpb246CisJICAgIDAgPSBFbXVsYXRlIEkyQyBhbmQgRERDIGJ1cyBieSBHUElPMi8zLzQuICovCisJCXNyM2UgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IzRSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSM0UsIFZJQVNSLCAweDAsIEJJVDUpOworCQlicmVhazsKKwl9CisKKwkvKiBDaGVjayBmb3IgVlQxNjMyOiAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBWVDE2MzJfVE1EUzsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IFZUMTYzMl9UTURTX0kyQ19BRERSOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJaWYgKGNoZWNrX3RtZHNfY2hpcChWVDE2MzJfREVWSUNFX0lEX1JFRywgVlQxNjMyX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IDEyYml0cyxkdWFsIGVkZ2UsYWRkIDI0Yml0cyBtb2RlIGxhdGVyCisJCSAqLworCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4MDgsIDB4M2IpOworCisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMiBUTURTICEgXG4iKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQpOworCQlyZXR1cm4gT0s7CisJfSBlbHNlIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpCisJCSAgICAhPSBGQUlMKSB7CisJCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4MDgsIDB4M2IpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gVlQxNjMyIFRNRFMgISBcbiIpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQkJICB0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAorCQkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCQkgIHRtZHNfY2hpcF9pbmZvLmkyY19wb3J0KTsKKwkJCXJldHVybiBPSzsKKwkJfQorCX0KKworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBJTlRFR1JBVEVEX1RNRFM7CisKKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApICYmCisJICAgICgodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0RWSV9PTkxZKSB8fAorCSAgICAgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9MQ0RfRFZJKSkpIHsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gSW50ZWdyYXRlZCBUTURTICEgXG4iKTsKKwkJcmV0dXJuIE9LOworCX0KKworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsIHNyMmEpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwgc3IyYSk7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgc3IxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLCBzcjFlKTsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSM0UsIFZJQVNSLCBzcjNlKTsKKwkJYnJlYWs7CisJfQorCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBOT05fVE1EU19UUkFOU01JVFRFUjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQl0bWRzX2NoaXBfc2xhdmVfYWRkciA9IFZUMTYzMl9UTURTX0kyQ19BRERSOworCXJldHVybiBGQUlMOworfQorCitzdGF0aWMgdm9pZCB0bWRzX3JlZ2lzdGVyX3dyaXRlKGludCBpbmRleCwgdTggZGF0YSkKK3sKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQorCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0OworCisJdmlhZmJfaTJjX3dyaXRlYnl0ZSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQl0bWRzX2NoaXBfc2xhdmVfYWRkciwgaW5kZXgsCisJCSAgICAgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkKGludCBpbmRleCkKK3sKKwl1OCBkYXRhOworCisJdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydDsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCSAgICB0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciwKKwkJCSh1OCkgaW5kZXgsICZkYXRhKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWRfYnl0ZXMoaW50IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQoreworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CisJdmlhZmJfaTJjX3JlYWRieXRlcygodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCisJCQkgdG1kc19jaGlwX3NsYXZlX2FkZHIsICh1OCkgaW5kZXgsIGJ1ZmYsIGJ1ZmZfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZShpbnQgbW9kZV9pbmRleCwKKwlpbnQgcmVmcmVzaF9yYXRlKQoreworCWlmIChyZWZyZXNoX3JhdGUgIT0gNjApCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAobW9kZV9pbmRleCkgeworCQkvKiBGb2xsb3dpbmcgbW9kZXMgaGF2ZSByZWR1Y2UgYmxhbmtpbmcgbW9kZS4gKi8KKwljYXNlIFZJQV9SRVNfMTM2MFg3Njg6CisJY2FzZSBWSUFfUkVTXzE0MDBYMTA1MDoKKwljYXNlIFZJQV9SRVNfMTQ0MFg5MDA6CisJY2FzZSBWSUFfUkVTXzE2MDBYOTAwOgorCWNhc2UgVklBX1JFU18xNjgwWDEwNTA6CisJY2FzZSBWSUFfUkVTXzE5MjBYMTA4MDoKKwljYXNlIFZJQV9SRVNfMTkyMFgxMjAwOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCSAgIlRoaXMgZHZpIG1vZGUgJWQgaGF2ZSBubyByZWR1Y2UgYmxhbmtpbmcgbW9kZSFcbiIsCisJCQkgIG1vZGVfaW5kZXgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qIERWSSBTZXQgTW9kZSAqLwordm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoaW50IHZpZGVvX2luZGV4LCBpbnQgbW9kZV9icHAsIGludCBzZXRfaWdhKQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlkZW9Nb2RlID0gTlVMTDsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBEdmlUaW1pbmc7CisJdW5zaWduZWQgbG9uZyBkZXNpcmVQaXhlbENsb2NrLCBtYXhQaXhlbENsb2NrOworCWludCBzdGF0dXMgPSAwOworCXZpZGVvTW9kZSA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOworCXBEdmlUaW1pbmcgPSB2aWRlb01vZGUtPmNydGM7CisJZGVzaXJlUGl4ZWxDbG9jayA9IHBEdmlUaW1pbmctPmNsayAvIDEwMDAwMDA7CisJbWF4UGl4ZWxDbG9jayA9ICh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPgorCQl0bWRzX3NldHRpbmdfaW5mby0+bWF4X3BpeGVsX2Nsb2NrOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5EVklfc2V0X21vZGUhIVxuIik7CisKKwlpZiAoKG1heFBpeGVsQ2xvY2sgIT0gMCkgJiYgKGRlc2lyZVBpeGVsQ2xvY2sgPiBtYXhQaXhlbENsb2NrKSkgeworCQkvKkNoZWNrIGlmIHJlZHVjZS1ibGFua2luZyBtb2RlIGlzIGV4aXN0ICovCisJCXN0YXR1cyA9CisJCSAgICBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZSh2aWRlb19pbmRleCwKKwkJCQkJICAgICAgIHBEdmlUaW1pbmctPnJlZnJlc2hfcmF0ZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXZpZGVvX2luZGV4ICs9IDEwMDsJLypVc2UgcmVkdWNlLWJsYW5raW5nIG1vZGUgKi8KKwkJCXZpZGVvTW9kZSA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOworCQkJcER2aVRpbWluZyA9IHZpZGVvTW9kZS0+Y3J0YzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCQkgICJEVkkgdXNlIHJlZHVjZSBibGFua2luZyBtb2RlICVkISFcbiIsCisJCQkJICB2aWRlb19pbmRleCk7CisJCX0KKwl9CisJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhwRHZpVGltaW5nLCB2aWRlb19pbmRleCwgbW9kZV9icHAgLyA4LCBzZXRfaWdhKTsKKwl2aWFmYl9zZXRfb3V0cHV0X3BhdGgoREVWSUNFX0RWSSwgc2V0X2lnYSwKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSk7Cit9CisKKy8qIFNlbnNlIERWSSBDb25uZWN0b3IgKi8KK2ludCB2aWFmYl9kdmlfc2Vuc2Uodm9pZCkKK3sKKwl1OCBSZWdTUjFFID0gMCwgUmVnU1IzRSA9IDAsIFJlZ0NSNkIgPSAwLCBSZWdDUjkxID0gMCwKKwkJUmVnQ1I5MyA9IDAsIFJlZ0NSOUIgPSAwLCBkYXRhOworCWludCByZXQgPSBmYWxzZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2R2aV9zZW5zZSEhXG4iKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkvKiBESTEgUGFkIG9uICovCisJCVJlZ1NSMUUgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSk7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgUmVnU1IxRSB8IDB4MzApOworCisJCS8qIENSNkJbMF1WQ0sgSW5wdXQgU2VsZWN0aW9uOiAxID0gRXh0ZXJuYWwgY2xvY2suICovCisJCVJlZ0NSNkIgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I2Qik7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjZCLCBWSUFDUiwgUmVnQ1I2QiB8IDB4MDgpOworCisJCS8qIENSOTFbNF0gVkREIE9uIFszXSBEYXRhIE9uIFsyXSBWRUUgT24gWzFdIEJhY2sgTGlnaHQgT2ZmCisJCSAgIFswXSBTb2Z0d2FyZSBDb250cm9sIFBvd2VyIFNlcXVlbmNlICovCisJCVJlZ0NSOTEgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgxRCk7CisKKwkJLyogQ1I5M1s3XSBESTEgRGF0YSBTb3VyY2UgU2VsZWN0aW9uOiAxID0gRFNQMi4KKwkJICAgQ1I5M1s1XSBESTEgQ2xvY2sgU291cmNlOiAxID0gaW50ZXJuYWwuCisJCSAgIENSOTNbNF0gREkxIENsb2NrIFBvbGFyaXR5LgorCQkgICBDUjkzWzM6MV0gREkxIENsb2NrIEFkanVzdC4gQ1I5M1swXSBESTEgZW5hYmxlICovCisJCVJlZ0NSOTMgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5Myk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkzLCBWSUFDUiwgMHgwMSk7CisJfSBlbHNlIHsKKwkJLyogRFZQMC9EVlAxIFBhZCBvbiAqLworCQlSZWdTUjFFID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpOworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsIFJlZ1NSMUUgfCAweEYwKTsKKworCQkvKiBTUjNFWzFdTXVsdGktZnVuY3Rpb24gc2VsZWN0aW9uOgorCQkgICAwID0gRW11bGF0ZSBJMkMgYW5kIEREQyBidXMgYnkgR1BJTzIvMy80LiAqLworCQlSZWdTUjNFID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSM0UpOworCQl2aWFmYl93cml0ZV9yZWcoU1IzRSwgVklBU1IsIFJlZ1NSM0UgJiAofjB4MjApKTsKKworCQkvKiBDUjkxWzRdIFZERCBPbiBbM10gRGF0YSBPbiBbMl0gVkVFIE9uIFsxXSBCYWNrIExpZ2h0IE9mZgorCQkgICBbMF0gU29mdHdhcmUgQ29udHJvbCBQb3dlciBTZXF1ZW5jZSAqLworCQlSZWdDUjkxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MUQpOworCisJCS8qQ1I5Qls0XSBEVlAxIERhdGEgU291cmNlIFNlbGVjdGlvbjogMSA9IEZyb20gc2Vjb25kYXJ5CisJCWRpc3BsYXkuQ1I5QlsyOjBdIERWUDEgQ2xvY2sgQWRqdXN0ICovCisJCVJlZ0NSOUIgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5Qik7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjlCLCBWSUFDUiwgMHgwMSk7CisJfQorCisJZGF0YSA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDkpOworCWlmIChkYXRhICYgMHgwNCkKKwkJcmV0ID0gdHJ1ZTsKKworCWlmIChyZXQgPT0gZmFsc2UpIHsKKwkJaWYgKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkpCisJCQlyZXQgPSB0cnVlOworCX0KKworCS8qIFJlc3RvcmUgc3RhdHVzICovCisJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLCBSZWdTUjFFKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIFJlZ0NSOTEpOworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQl2aWFmYl93cml0ZV9yZWcoQ1I2QiwgVklBQ1IsIFJlZ0NSNkIpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MywgVklBQ1IsIFJlZ0NSOTMpOworCX0gZWxzZSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjNFLCBWSUFTUiwgUmVnU1IzRSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjlCLCBWSUFDUiwgUmVnQ1I5Qik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogUXVlcnkgRmxhdCBQYW5lbCdzIEVESUQgVGFibGUgVmVyc2lvbiBUaHJvdWdoIERWSSBDb25uZWN0b3IgKi8KK3N0YXRpYyBpbnQgdmlhZmJfZHZpX3F1ZXJ5X0VESUQodm9pZCkKK3sKKwl1OCBkYXRhMCwgZGF0YTE7CisJaW50IHJlc3RvcmU7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9kdmlfcXVlcnlfRURJRCEhXG4iKTsKKworCXJlc3RvcmUgPSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEwOworCisJZGF0YTAgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDAwKTsKKwlkYXRhMSA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDEpOworCWlmICgoZGF0YTAgPT0gMCkgJiYgKGRhdGExID09IDB4RkYpKSB7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQl0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CisJCXJldHVybiBFRElEX1ZFUlNJT05fMTsJLyogRm91bmQgRURJRDEgVGFibGUgKi8KKwl9CisKKwlkYXRhMCA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDApOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSByZXN0b3JlOworCWlmIChkYXRhMCA9PSAweDIwKQorCQlyZXR1cm4gRURJRF9WRVJTSU9OXzI7CS8qIEZvdW5kIEVESUQyIFRhYmxlICovCisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKgorICogaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKHZvaWQpCisgKgorICogICAgIC0gR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDEgVGFibGUKKyAqCisgKiBSZXR1cm4gVHlwZTogICAgaW50CisgKgorICovCitzdGF0aWMgaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKHZvaWQpCit7CisJaW50IGksIG1heF9oID0gMCwgbWF4X3YgPSAwLCB0bXAsIHJlc3RvcmU7CisJdW5zaWduZWQgY2hhciByRGF0YTsKKwl1bnNpZ25lZCBjaGFyIEVESURfREFUQVsxOF07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSBcbiIpOworCisJcmVzdG9yZSA9IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHI7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTA7CisKKwlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZCgweDIzKTsKKwlpZiAockRhdGEgJiAweDNDKQorCQltYXhfaCA9IDY0MDsKKwlpZiAockRhdGEgJiAweEMwKQorCQltYXhfaCA9IDcyMDsKKwlpZiAockRhdGEgJiAweDAzKQorCQltYXhfaCA9IDgwMDsKKworCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKDB4MjQpOworCWlmIChyRGF0YSAmIDB4QzApCisJCW1heF9oID0gODAwOworCWlmIChyRGF0YSAmIDB4MUUpCisJCW1heF9oID0gMTAyNDsKKwlpZiAockRhdGEgJiAweDAxKQorCQltYXhfaCA9IDEyODA7CisKKwlmb3IgKGkgPSAweDI1OyBpIDwgMHg2RDsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDB4MjY6CisJCWNhc2UgMHgyODoKKwkJY2FzZSAweDJBOgorCQljYXNlIDB4MkM6CisJCWNhc2UgMHgyRToKKwkJY2FzZSAweDMwOgorCQljYXNlIDB4MzI6CisJCWNhc2UgMHgzNDoKKwkJCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKGkpOworCQkJaWYgKHJEYXRhID09IDEpCisJCQkJYnJlYWs7CisJCQkvKiBkYXRhID0gKGRhdGEgKyAzMSkgKiA4ICovCisJCQl0bXAgPSAockRhdGEgKyAzMSkgPDwgMzsKKwkJCWlmICh0bXAgPiBtYXhfaCkKKwkJCQltYXhfaCA9IHRtcDsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgzNjoKKwkJY2FzZSAweDQ4OgorCQljYXNlIDB4NUE6CisJCWNhc2UgMHg2QzoKKwkJCXRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcyhpLCBFRElEX0RBVEEsIDEwKTsKKwkJCWlmICghKEVESURfREFUQVswXSB8fCBFRElEX0RBVEFbMV0pKSB7CisJCQkJLyogVGhlIGZpcnN0IHR3byBieXRlIG11c3QgYmUgemVyby4gKi8KKwkJCQlpZiAoRURJRF9EQVRBWzNdID09IDB4RkQpIHsKKwkJCQkJLyogVG8gZ2V0IG1heCBwaXhlbCBjbG9jay4gKi8KKwkJCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPgorCQkJCQltYXhfcGl4ZWxfY2xvY2sgPSBFRElEX0RBVEFbOV0gKiAxMDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzd2l0Y2ggKG1heF9oKSB7CisJY2FzZSA2NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgODAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU184MDBYNjAwOworCQlicmVhazsKKwljYXNlIDEwMjQ6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEwMjRYNzY4OworCQlicmVhazsKKwljYXNlIDEyODA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAxNDAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMTQ0MDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQ0MFgxMDUwOworCQlicmVhazsKKwljYXNlIDE2MDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJY2FzZSAxOTIwOgorCQlpZiAobWF4X3YgPT0gMTIwMCkgeworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCQlWSUFfUkVTXzE5MjBYMTIwMDsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQkJVklBX1JFU18xOTIwWDEwODA7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMDI0WDc2ODsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVW5rbm93IHBhbmVsIHNpemUgbWF4IHJlc29sdXRpb24gPSAlZCAhXAorCQkJCQkgc2V0IGRlZmF1bHQgcGFuZWwgc2l6ZS5cbiIsIG1heF9oKTsKKwkJYnJlYWs7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIG1heCBwaXhlbGNsb2NrID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPm1heF9waXhlbF9jbG9jayk7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CisJcmV0dXJuIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZTsKK30KKworLyoKKyAqCisgKiBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCkKKyAqCisgKiAgICAgLSBHZXQgUGFuZWwgU2l6ZSBVc2luZyBFRElEMiBUYWJsZQorICoKKyAqIFJldHVybiBUeXBlOiAgICBpbnQKKyAqCisgKi8KK3N0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCkKK3sKKwlpbnQgSFNpemUgPSAwLCByZXN0b3JlOworCXVuc2lnbmVkIGNoYXIgUl9CdWZmZXJbMl07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MiBcbiIpOworCisJcmVzdG9yZSA9IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHI7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTI7CisKKwkvKiBIb3Jpem9udGFsOiAweDc2LCAweDc3ICovCisJdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKDB4NzYsIFJfQnVmZmVyLCAyKTsKKwlIU2l6ZSA9IFJfQnVmZmVyWzBdOworCUhTaXplICs9IFJfQnVmZmVyWzFdIDw8IDg7CisKKwlzd2l0Y2ggKEhTaXplKSB7CisJY2FzZSA2NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgODAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU184MDBYNjAwOworCQlicmVhazsKKwljYXNlIDEwMjQ6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEwMjRYNzY4OworCQlicmVhazsKKwljYXNlIDEyODA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAxNDAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMTQ0MDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQ0MFgxMDUwOworCQlicmVhazsKKwljYXNlIDE2MDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTAyNFg3Njg7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vdyBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQhXAorCQkJCQlzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgSFNpemUpOworCQlicmVhazsKKwl9CisKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKKwlyZXR1cm4gdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplOworfQorCisvKgorICoKKyAqIHVuc2lnbmVkIGNoYXIgZHZpX2dldF9wYW5lbF9pbmZvKHZvaWQpCisgKgorICogICAgIC0gR2V0IFBhbmVsIFNpemUKKyAqCisgKiBSZXR1cm4gVHlwZTogICAgdW5zaWduZWQgY2hhcgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBkdmlfZ2V0X3BhbmVsX2luZm8odm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGR2aXBhbmVsc2l6ZTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJkdmlfZ2V0X3BhbmVsX2luZm8hIFxuIik7CisKKwl2aWFmYl9kdmlfc2Vuc2UoKTsKKwlzd2l0Y2ggKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkpIHsKKwljYXNlIDE6CisJCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZHZpIHBhbmVsIHNpemUgaXMgJTJkIFxuIiwKKwkJICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUpOworCWR2aXBhbmVsc2l6ZSA9ICh1bnNpZ25lZCBjaGFyKSh2aWFwYXJpbmZvLT4KKwkJdG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplKTsKKwlyZXR1cm4gZHZpcGFuZWxzaXplOworfQorCisvKiBJZiBEaXNhYmxlIERWSSwgdHVybiBvZmYgcGFkICovCit2b2lkIHZpYWZiX2R2aV9kaXNhYmxlKHZvaWQpCit7CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX0RWUDApCisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpICYgKH4weEMwKSk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfRFZQMSkKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLAorCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgJiAofjB4MzApKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfSElHSCkKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLAorCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiAofjB4MEMpKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfTE9XKQorCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsCisJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSAmICh+MHgwMykpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX1RNRFMpCisJCS8qIFR1cm4gb2ZmIFRNRFMgcG93ZXIuICovCisJCXZpYWZiX3dyaXRlX3JlZyhDUkQyLCBWSUFDUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSRDIpIHwgMHgwOCk7Cit9CisKKy8qIElmIEVuYWJsZSBEVkksIHR1cm4gb2ZmIHBhZCAqLwordm9pZCB2aWFmYl9kdmlfZW5hYmxlKHZvaWQpCit7CisJdTggZGF0YTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9EVlAwKSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSB8IDB4QzApOworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpCisJCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4ODgsIDB4M2IpOworCQllbHNlCisJCQkvKmNsZWFyIENSOTFbNV0gdG8gZGlyZWN0IG9uIGRpc3BsYXkgcGVyaW9kCisJCQkgICBpbiB0aGUgc2Vjb25kYXJ5IGRpcGxheSBwYXRoICovCisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSkgJiAweERGKTsKKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfRFZQMSkgeworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgfCAweDMwKTsKKworCQkvKmZpeCBkdmkgY2Fubid0IGJlIGVuYWJsZWQgd2l0aCBNQiBWVDU3MThDNCAtIEFsIFpoYW5nICovCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDg4LCAweDNiKTsKKwkJfSBlbHNlIHsKKwkJCS8qY2xlYXIgQ1I5MVs1XSB0byBkaXJlY3Qgb24gZGlzcGxheSBwZXJpb2QKKwkJCSAgaW4gdGhlIHNlY29uZGFyeSBkaXBsYXkgcGF0aCAqLworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpICYgMHhERik7CisJCX0KKworCQkvKmZpeCBEVkkgY2Fubm90IGVuYWJsZSBvbiBFUElBLU0gYm9hcmQgKi8KKwkJaWYgKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpID09IDEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDFmLCAweDFmKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSODgsIFZJQUNSLCAweDAwLCBCSVQ2ICsgQklUMCk7CisJCQlpZiAodmlhZmJfYnVzX3dpZHRoID09IDI0KSB7CisJCQkJaWYgKHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2UgPT0gMSkKKwkJCQkJZGF0YSA9IDB4M0Y7CisJCQkJZWxzZQorCQkJCQlkYXRhID0gMHgzNzsKKwkJCQl2aWFmYl9pMmNfd3JpdGVieXRlKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQkJCSAgICAgdG1kc19jaGlwX2luZm8uCisJCQkJCSAgICAgdG1kc19jaGlwX3NsYXZlX2FkZHIsCisJCQkJCSAgICAgMHgwOCwgZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfREZQX0hJR0gpIHsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpIHwgMHgwQyk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjkxKSAmIDB4REYpOworCX0KKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfTE9XKSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSB8IDB4MDMpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSkgJiAweERGKTsKKwl9CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX1RNRFMpIHsKKwkJLyogVHVybiBvbiBEaXNwbGF5IHBlcmlvZCBpbiB0aGUgcGFuZWwgcGF0aC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDAsIEJJVDcpOworCisJCS8qIFR1cm4gb24gVE1EUyBwb3dlci4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDMpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWVjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0RWSV9IX18KKyNkZWZpbmUgX19EVklfSF9fCisKKy8qRGVmaW5pdGlvbiBUTURTIERldmljZSBJRCByZWdpc3RlciovCisjZGVmaW5lICAgICBWVDE2MzJfREVWSUNFX0lEX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVlQxNjMyX0RFVklDRV9JRCAgICAgICAgICAgIDB4OTIKKworI2RlZmluZSAgICAgR0VUX0RWSV9TSVpFX0JZX1NZU1RFTV9CSU9TICAgICAweDAxCisjZGVmaW5lICAgICBHRVRfRFZJX1NJWkVfQllfVkdBX0JJT1MgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIEdFVF9EVklfU1pJRV9CWV9IV19TVFJBUFBJTkcgICAgMHgwMworCisvKiBEZWZpbml0aW9uIERWSSBQYW5lbCBJRCovCisvKiBSZXNvbHV0aW9uOiA2NDB4NDgwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDBfNjQwWDQ4MCAgICAgICAweDAwCisvKiBSZXNvbHV0aW9uOiA4MDB4NjAwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfODAweDYwMCAgICAgICAweDAxCisvKiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTAyNHg3NjggICAgICAweDAyCisvKiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTI4MHg3NjggICAgICAweDAzCisvKiBSZXNvbHV0aW9uOiAxMjgweDEwMjQsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTI4MHgxMDI0ICAgICAweDA0CisvKiBSZXNvbHV0aW9uOiAxNDAweDEwNTAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTQwMHgxMDUwICAgICAweDA1CisvKiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTYwMHgxMjAwICAgICAweDA2CisKKy8qIERlZmluZSB0aGUgdmVyc2lvbiBvZiBFRElEKi8KKyNkZWZpbmUgICAgIEVESURfVkVSU0lPTl8xICAgICAgMQorI2RlZmluZSAgICAgRURJRF9WRVJTSU9OXzIgICAgICAyCisKKyNkZWZpbmUgICAgIERFVl9DT05ORUNUX0RWSSAgICAgMHgwMQorI2RlZmluZSAgICAgREVWX0NPTk5FQ1RfSERNSSAgICAweDAyCisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X2NlYV9tb2RlX3RibF9wb2ludGVyKGludCBJbmRleCk7CitpbnQgdmlhZmJfZHZpX3NlbnNlKHZvaWQpOwordm9pZCB2aWFmYl9kdmlfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfZHZpX2VuYWJsZSh2b2lkKTsKK2ludCB2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfZHZpX3NpemUodm9pZCk7Cit2b2lkIHZpYWZiX2R2aV9zZXRfbW9kZShpbnQgdmlkZW9faW5kZXgsIGludCBtb2RlX2JwcCwgaW50IHNldF9pZ2EpOworCisjZW5kaWYgLyogX19EVklfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJlMjQyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSAiZ2xvYmFsLmgiCitpbnQgdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmkgPSBTVEFURV9PRkY7CitpbnQgdmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSA9IFNUQVRFX09GRjsKK2ludCB2aWFmYl9idXNfd2lkdGggPSAxMjsKK2ludCB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9IEhXX0xBWU9VVF9MQ0RfRFZJOworaW50IHZpYWZiX21lbXNpemU7CitpbnQgdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKK2ludCB2aWFmYl9ob3RwbHVnOworaW50IHZpYWZiX3JlZnJlc2ggPSA2MDsKK2ludCB2aWFmYl9yZWZyZXNoMSA9IDYwOworaW50IHZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CitpbnQgdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKK2ludCB2aWFmYl9icHAgPSAzMjsKK2ludCB2aWFmYl9icHAxID0gMzI7CitpbnQgdmlhZmJfYWNjZWwgPSAxOworaW50IHZpYWZiX0NSVF9PTiA9IDE7CitpbnQgdmlhZmJfRFZJX09OOworaW50IHZpYWZiX0xDRF9PTiA7CitpbnQgdmlhZmJfTENEMl9PTjsKK2ludCB2aWFmYl9TQU1NX09OOworaW50IHZpYWZiX2R1YWxfZmI7CitpbnQgdmlhZmJfaG90cGx1Z19YcmVzID0gNjQwOworaW50IHZpYWZiX2hvdHBsdWdfWXJlcyA9IDQ4MDsKK2ludCB2aWFmYl9ob3RwbHVnX2JwcCA9IDMyOworaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaCA9IDYwOwordW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitpbnQgdmlhZmJfc2Vjb25kX3NpemU7CitpbnQgdmlhZmJfcHJpbWFyeV9kZXYgPSBOb25lX0RldmljZTsKK3ZvaWQgX19pb21lbSAqdmlhZmJfRkJfTU07Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXMgPSA0ODA7Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKK3Vuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOworaW50IHZpYWZiX2xjZF9wYW5lbF9pZCA9IExDRF9QQU5FTF9JRF9NQVhJTVVNICsgMTsKK3N0cnVjdCBmYl9jdXJzb3IgdmlhY3Vyc29yOworc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKK3N0cnVjdCBmYl9pbmZvICp2aWFmYmluZm8xOworc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzsKK3N0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm8xOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTI2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR0xPQkFMX0hfXworI2RlZmluZSBfX0dMT0JBTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSAiZGVidWcuaCIKKworI2luY2x1ZGUgImlmYWNlLmgiCisjaW5jbHVkZSAidmlhZmJkZXYuaCIKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJhY2NlbC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAiZHZpLmgiCisjaW5jbHVkZSAidmlhbW9kZS5oIgorI2luY2x1ZGUgInZpYV9pMmMuaCIKKyNpbmNsdWRlICJody5oIgorCisjaW5jbHVkZSAibGNkLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ2aWFtb2RlLmgiCisjaW5jbHVkZSAidmlhX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ2dDE2MzYuaCIKKyNpbmNsdWRlICJ0YmxEUEFTZXR0aW5nLmgiCisjaW5jbHVkZSAidGJsMTYzNi5oIgorI2luY2x1ZGUgInZpYWZiZGV2LmgiCisKKy8qIEV4dGVybmFsIHN0cnVjdCovCisKK2V4dGVybiBpbnQgdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk7CitleHRlcm4gaW50IHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U7CitleHRlcm4gaW50IHZpYWZiX2J1c193aWR0aDsKK2V4dGVybiBpbnQgdmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ7CitleHRlcm4gc3RydWN0IG9mZnNldCBvZmZzZXRfcmVnOworZXh0ZXJuIHN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm87CitleHRlcm4gc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzE7CitleHRlcm4gc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKK2V4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvMTsKK2V4dGVybiBpbnQgdmlhZmJfRGV2aWNlU3RhdHVzOworZXh0ZXJuIGludCB2aWFmYl9yZWZyZXNoOworZXh0ZXJuIGludCB2aWFmYl9yZWZyZXNoMTsKK2V4dGVybiBpbnQgdmlhZmJfbGNkX2RzcF9tZXRob2Q7CitleHRlcm4gaW50IHZpYWZiX2xjZF9tb2RlOworZXh0ZXJuIGludCB2aWFmYl9icHA7CitleHRlcm4gaW50IHZpYWZiX2JwcDE7CisKK2V4dGVybiBpbnQgdmlhZmJfQ1JUX09OOworZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnX1hyZXM7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfWXJlczsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19icHA7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaDsKK2V4dGVybiBpbnQgdmlhZmJfcHJpbWFyeV9kZXY7CitleHRlcm4gdm9pZCBfX2lvbWVtICp2aWFmYl9GQl9NTTsKK2V4dGVybiBzdHJ1Y3QgZmJfY3Vyc29yIHZpYWN1cnNvcjsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXM7CitleHRlcm4gaW50IHZpYWZiX2xjZF9wYW5lbF9pZDsKKworI2VuZGlmIC8qIF9fR0xPQkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkNTNjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKQEAgLTAsMCArMSwyODY1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZF9pbmZvIHBjaWlkbGlzdFtdID0geworCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NMRTI2Nl9ESUQsIFVOSUNIUk9NRV9DTEUyNjZ9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1BNODAwX0RJRCwgVU5JQ0hST01FX1BNODAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9LNDAwX0RJRCwgVU5JQ0hST01FX0s0MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4MDBfRElELCBVTklDSFJPTUVfSzgwMH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ043MDBfRElELCBVTklDSFJPTUVfQ043MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1A0TTg5MF9ESUQsIFVOSUNIUk9NRV9QNE04OTB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4TTg5MF9ESUQsIFVOSUNIUk9NRV9LOE04OTB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NYNzAwX0RJRCwgVU5JQ0hST01FX0NYNzAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9QNE05MDBfRElELCBVTklDSFJPTUVfUDRNOTAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9DTjc1MF9ESUQsIFVOSUNIUk9NRV9DTjc1MH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfVlg4MDBfRElELCBVTklDSFJPTUVfVlg4MDB9LAorCXswLCAwLCAwfQorfTsKKworc3RydWN0IG9mZnNldCBvZmZzZXRfcmVnID0geworCS8qIElHQTEgT2Zmc2V0IFJlZ2lzdGVyICovCisJe0lHQTFfT0ZGU0VUX1JFR19OVU0sIHt7Q1IxMywgMCwgN30sIHtDUjM1LCA1LCA3fSB9IH0sCisJLyogSUdBMiBPZmZzZXQgUmVnaXN0ZXIgKi8KKwl7SUdBMl9PRkZTRVRfUkVHX05VTSwge3tDUjY2LCAwLCA3fSwge0NSNjcsIDAsIDF9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGxfbWFwIHBsbF92YWx1ZVtdID0geworCXtDTEtfMjVfMTc1TSwgQ0xFMjY2X1BMTF8yNV8xNzVNLCBLODAwX1BMTF8yNV8xNzVNLCBDWDcwMF8yNV8xNzVNfSwKKwl7Q0xLXzI5XzU4MU0sIENMRTI2Nl9QTExfMjlfNTgxTSwgSzgwMF9QTExfMjlfNTgxTSwgQ1g3MDBfMjlfNTgxTX0sCisJe0NMS18yNl84ODBNLCBDTEUyNjZfUExMXzI2Xzg4ME0sIEs4MDBfUExMXzI2Xzg4ME0sIENYNzAwXzI2Xzg4ME19LAorCXtDTEtfMzFfNDkwTSwgQ0xFMjY2X1BMTF8zMV80OTBNLCBLODAwX1BMTF8zMV80OTBNLCBDWDcwMF8zMV80OTBNfSwKKwl7Q0xLXzMxXzUwME0sIENMRTI2Nl9QTExfMzFfNTAwTSwgSzgwMF9QTExfMzFfNTAwTSwgQ1g3MDBfMzFfNTAwTX0sCisJe0NMS18zMV83MjhNLCBDTEUyNjZfUExMXzMxXzcyOE0sIEs4MDBfUExMXzMxXzcyOE0sIENYNzAwXzMxXzcyOE19LAorCXtDTEtfMzJfNjY4TSwgQ0xFMjY2X1BMTF8zMl82NjhNLCBLODAwX1BMTF8zMl82NjhNLCBDWDcwMF8zMl82NjhNfSwKKwl7Q0xLXzM2XzAwME0sIENMRTI2Nl9QTExfMzZfMDAwTSwgSzgwMF9QTExfMzZfMDAwTSwgQ1g3MDBfMzZfMDAwTX0sCisJe0NMS180MF8wMDBNLCBDTEUyNjZfUExMXzQwXzAwME0sIEs4MDBfUExMXzQwXzAwME0sIENYNzAwXzQwXzAwME19LAorCXtDTEtfNDFfMjkxTSwgQ0xFMjY2X1BMTF80MV8yOTFNLCBLODAwX1BMTF80MV8yOTFNLCBDWDcwMF80MV8yOTFNfSwKKwl7Q0xLXzQzXzE2M00sIENMRTI2Nl9QTExfNDNfMTYzTSwgSzgwMF9QTExfNDNfMTYzTSwgQ1g3MDBfNDNfMTYzTX0sCisJe0NMS180NV8yNTBNLCBDTEUyNjZfUExMXzQ1XzI1ME0sIEs4MDBfUExMXzQ1XzI1ME0sIENYNzAwXzQ1XzI1ME19LAorCXtDTEtfNDZfMDAwTSwgQ0xFMjY2X1BMTF80Nl8wMDBNLCBLODAwX1BMTF80Nl8wMDBNLCBDWDcwMF80Nl8wMDBNfSwKKwl7Q0xLXzQ2Xzk5Nk0sIENMRTI2Nl9QTExfNDZfOTk2TSwgSzgwMF9QTExfNDZfOTk2TSwgQ1g3MDBfNDZfOTk2TX0sCisJe0NMS180OF8wMDBNLCBDTEUyNjZfUExMXzQ4XzAwME0sIEs4MDBfUExMXzQ4XzAwME0sIENYNzAwXzQ4XzAwME19LAorCXtDTEtfNDhfODc1TSwgQ0xFMjY2X1BMTF80OF84NzVNLCBLODAwX1BMTF80OF84NzVNLCBDWDcwMF80OF84NzVNfSwKKwl7Q0xLXzQ5XzUwME0sIENMRTI2Nl9QTExfNDlfNTAwTSwgSzgwMF9QTExfNDlfNTAwTSwgQ1g3MDBfNDlfNTAwTX0sCisJe0NMS181Ml80MDZNLCBDTEUyNjZfUExMXzUyXzQwNk0sIEs4MDBfUExMXzUyXzQwNk0sIENYNzAwXzUyXzQwNk19LAorCXtDTEtfNTJfOTc3TSwgQ0xFMjY2X1BMTF81Ml85NzdNLCBLODAwX1BMTF81Ml85NzdNLCBDWDcwMF81Ml85NzdNfSwKKwl7Q0xLXzU2XzI1ME0sIENMRTI2Nl9QTExfNTZfMjUwTSwgSzgwMF9QTExfNTZfMjUwTSwgQ1g3MDBfNTZfMjUwTX0sCisJe0NMS182MF80NjZNLCBDTEUyNjZfUExMXzYwXzQ2Nk0sIEs4MDBfUExMXzYwXzQ2Nk0sIENYNzAwXzYwXzQ2Nk19LAorCXtDTEtfNjFfNTAwTSwgQ0xFMjY2X1BMTF82MV81MDBNLCBLODAwX1BMTF82MV81MDBNLCBDWDcwMF82MV81MDBNfSwKKwl7Q0xLXzY1XzAwME0sIENMRTI2Nl9QTExfNjVfMDAwTSwgSzgwMF9QTExfNjVfMDAwTSwgQ1g3MDBfNjVfMDAwTX0sCisJe0NMS182NV8xNzhNLCBDTEUyNjZfUExMXzY1XzE3OE0sIEs4MDBfUExMXzY1XzE3OE0sIENYNzAwXzY1XzE3OE19LAorCXtDTEtfNjZfNzUwTSwgQ0xFMjY2X1BMTF82Nl83NTBNLCBLODAwX1BMTF82Nl83NTBNLCBDWDcwMF82Nl83NTBNfSwKKwl7Q0xLXzY4XzE3OU0sIENMRTI2Nl9QTExfNjhfMTc5TSwgSzgwMF9QTExfNjhfMTc5TSwgQ1g3MDBfNjhfMTc5TX0sCisJe0NMS182OV85MjRNLCBDTEUyNjZfUExMXzY5XzkyNE0sIEs4MDBfUExMXzY5XzkyNE0sIENYNzAwXzY5XzkyNE19LAorCXtDTEtfNzBfMTU5TSwgQ0xFMjY2X1BMTF83MF8xNTlNLCBLODAwX1BMTF83MF8xNTlNLCBDWDcwMF83MF8xNTlNfSwKKwl7Q0xLXzcyXzAwME0sIENMRTI2Nl9QTExfNzJfMDAwTSwgSzgwMF9QTExfNzJfMDAwTSwgQ1g3MDBfNzJfMDAwTX0sCisJe0NMS183OF83NTBNLCBDTEUyNjZfUExMXzc4Xzc1ME0sIEs4MDBfUExMXzc4Xzc1ME0sIENYNzAwXzc4Xzc1ME19LAorCXtDTEtfODBfMTM2TSwgQ0xFMjY2X1BMTF84MF8xMzZNLCBLODAwX1BMTF84MF8xMzZNLCBDWDcwMF84MF8xMzZNfSwKKwl7Q0xLXzgzXzM3NU0sIENMRTI2Nl9QTExfODNfMzc1TSwgSzgwMF9QTExfODNfMzc1TSwgQ1g3MDBfODNfMzc1TX0sCisJe0NMS184M185NTBNLCBDTEUyNjZfUExMXzgzXzk1ME0sIEs4MDBfUExMXzgzXzk1ME0sIENYNzAwXzgzXzk1ME19LAorCXtDTEtfODRfNzUwTSwgQ0xFMjY2X1BMTF84NF83NTBNLCBLODAwX1BMTF84NF83NTBNLCBDWDcwMF84NF83NTBNfSwKKwl7Q0xLXzg1Xzg2ME0sIENMRTI2Nl9QTExfODVfODYwTSwgSzgwMF9QTExfODVfODYwTSwgQ1g3MDBfODVfODYwTX0sCisJe0NMS184OF83NTBNLCBDTEUyNjZfUExMXzg4Xzc1ME0sIEs4MDBfUExMXzg4Xzc1ME0sIENYNzAwXzg4Xzc1ME19LAorCXtDTEtfOTRfNTAwTSwgQ0xFMjY2X1BMTF85NF81MDBNLCBLODAwX1BMTF85NF81MDBNLCBDWDcwMF85NF81MDBNfSwKKwl7Q0xLXzk3Xzc1ME0sIENMRTI2Nl9QTExfOTdfNzUwTSwgSzgwMF9QTExfOTdfNzUwTSwgQ1g3MDBfOTdfNzUwTX0sCisJe0NMS18xMDFfMDAwTSwgQ0xFMjY2X1BMTF8xMDFfMDAwTSwgSzgwMF9QTExfMTAxXzAwME0sCisJIENYNzAwXzEwMV8wMDBNfSwKKwl7Q0xLXzEwNl81MDBNLCBDTEUyNjZfUExMXzEwNl81MDBNLCBLODAwX1BMTF8xMDZfNTAwTSwKKwkgQ1g3MDBfMTA2XzUwME19LAorCXtDTEtfMTA4XzAwME0sIENMRTI2Nl9QTExfMTA4XzAwME0sIEs4MDBfUExMXzEwOF8wMDBNLAorCSBDWDcwMF8xMDhfMDAwTX0sCisJe0NMS18xMTNfMzA5TSwgQ0xFMjY2X1BMTF8xMTNfMzA5TSwgSzgwMF9QTExfMTEzXzMwOU0sCisJIENYNzAwXzExM18zMDlNfSwKKwl7Q0xLXzExOF84NDBNLCBDTEUyNjZfUExMXzExOF84NDBNLCBLODAwX1BMTF8xMThfODQwTSwKKwkgQ1g3MDBfMTE4Xzg0ME19LAorCXtDTEtfMTE5XzAwME0sIENMRTI2Nl9QTExfMTE5XzAwME0sIEs4MDBfUExMXzExOV8wMDBNLAorCSBDWDcwMF8xMTlfMDAwTX0sCisJe0NMS18xMjFfNzUwTSwgQ0xFMjY2X1BMTF8xMjFfNzUwTSwgSzgwMF9QTExfMTIxXzc1ME0sCisJIENYNzAwXzEyMV83NTBNfSwKKwl7Q0xLXzEyNV8xMDRNLCBDTEUyNjZfUExMXzEyNV8xMDRNLCBLODAwX1BMTF8xMjVfMTA0TSwKKwkgQ1g3MDBfMTI1XzEwNE19LAorCXtDTEtfMTMzXzMwOE0sIENMRTI2Nl9QTExfMTMzXzMwOE0sIEs4MDBfUExMXzEzM18zMDhNLAorCSBDWDcwMF8xMzNfMzA4TX0sCisJe0NMS18xMzVfMDAwTSwgQ0xFMjY2X1BMTF8xMzVfMDAwTSwgSzgwMF9QTExfMTM1XzAwME0sCisJIENYNzAwXzEzNV8wMDBNfSwKKwl7Q0xLXzEzNl83MDBNLCBDTEUyNjZfUExMXzEzNl83MDBNLCBLODAwX1BMTF8xMzZfNzAwTSwKKwkgQ1g3MDBfMTM2XzcwME19LAorCXtDTEtfMTM4XzQwME0sIENMRTI2Nl9QTExfMTM4XzQwME0sIEs4MDBfUExMXzEzOF80MDBNLAorCSBDWDcwMF8xMzhfNDAwTX0sCisJe0NMS18xNDZfNzYwTSwgQ0xFMjY2X1BMTF8xNDZfNzYwTSwgSzgwMF9QTExfMTQ2Xzc2ME0sCisJIENYNzAwXzE0Nl83NjBNfSwKKwl7Q0xLXzE1M185MjBNLCBDTEUyNjZfUExMXzE1M185MjBNLCBLODAwX1BMTF8xNTNfOTIwTSwKKwkgQ1g3MDBfMTUzXzkyME19LAorCXtDTEtfMTU2XzAwME0sIENMRTI2Nl9QTExfMTU2XzAwME0sIEs4MDBfUExMXzE1Nl8wMDBNLAorCSBDWDcwMF8xNTZfMDAwTX0sCisJe0NMS18xNTdfNTAwTSwgQ0xFMjY2X1BMTF8xNTdfNTAwTSwgSzgwMF9QTExfMTU3XzUwME0sCisJIENYNzAwXzE1N181MDBNfSwKKwl7Q0xLXzE2Ml8wMDBNLCBDTEUyNjZfUExMXzE2Ml8wMDBNLCBLODAwX1BMTF8xNjJfMDAwTSwKKwkgQ1g3MDBfMTYyXzAwME19LAorCXtDTEtfMTg3XzAwME0sIENMRTI2Nl9QTExfMTg3XzAwME0sIEs4MDBfUExMXzE4N18wMDBNLAorCSBDWDcwMF8xODdfMDAwTX0sCisJe0NMS18xOTNfMjk1TSwgQ0xFMjY2X1BMTF8xOTNfMjk1TSwgSzgwMF9QTExfMTkzXzI5NU0sCisJIENYNzAwXzE5M18yOTVNfSwKKwl7Q0xLXzIwMl81MDBNLCBDTEUyNjZfUExMXzIwMl81MDBNLCBLODAwX1BMTF8yMDJfNTAwTSwKKwkgQ1g3MDBfMjAyXzUwME19LAorCXtDTEtfMjA0XzAwME0sIENMRTI2Nl9QTExfMjA0XzAwME0sIEs4MDBfUExMXzIwNF8wMDBNLAorCSBDWDcwMF8yMDRfMDAwTX0sCisJe0NMS18yMThfNTAwTSwgQ0xFMjY2X1BMTF8yMThfNTAwTSwgSzgwMF9QTExfMjE4XzUwME0sCisJIENYNzAwXzIxOF81MDBNfSwKKwl7Q0xLXzIzNF8wMDBNLCBDTEUyNjZfUExMXzIzNF8wMDBNLCBLODAwX1BMTF8yMzRfMDAwTSwKKwkgQ1g3MDBfMjM0XzAwME19LAorCXtDTEtfMjY3XzI1ME0sIENMRTI2Nl9QTExfMjY3XzI1ME0sIEs4MDBfUExMXzI2N18yNTBNLAorCSBDWDcwMF8yNjdfMjUwTX0sCisJe0NMS18yOTdfNTAwTSwgQ0xFMjY2X1BMTF8yOTdfNTAwTSwgSzgwMF9QTExfMjk3XzUwME0sCisJIENYNzAwXzI5N181MDBNfSwKKwl7Q0xLXzc0XzQ4MU0sIENMRTI2Nl9QTExfNzRfNDgxTSwgSzgwMF9QTExfNzRfNDgxTSwgQ1g3MDBfNzRfNDgxTX0sCisJe0NMS18xNzJfNzk4TSwgQ0xFMjY2X1BMTF8xNzJfNzk4TSwgSzgwMF9QTExfMTcyXzc5OE0sCisJIENYNzAwXzE3Ml83OThNfSwKKwl7Q0xLXzEyMl82MTRNLCBDTEUyNjZfUExMXzEyMl82MTRNLCBLODAwX1BMTF8xMjJfNjE0TSwKKwkgQ1g3MDBfMTIyXzYxNE19LAorCXtDTEtfNzRfMjcwTSwgQ0xFMjY2X1BMTF83NF8yNzBNLCBLODAwX1BMTF83NF8yNzBNLCBDWDcwMF83NF8yNzBNfSwKKwl7Q0xLXzE0OF81MDBNLCBDTEUyNjZfUExMXzE0OF81MDBNLCBLODAwX1BMTF8xNDhfNTAwTSwKKwkgQ1g3MDBfMTQ4XzUwME19Cit9OworCitzdGF0aWMgc3RydWN0IGZpZm9fZGVwdGhfc2VsZWN0IGRpc3BsYXlfZmlmb19kZXB0aF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIERlcHRoX1NlbGVjdCAqLworCXtJR0ExX0ZJRk9fREVQVEhfU0VMRUNUX1JFR19OVU0sIHt7U1IxNywgMCwgN30gfSB9LAorCS8qIElHQTIgRklGTyBEZXB0aF9TZWxlY3QgKi8KKwl7SUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNLAorCSB7e0NSNjgsIDQsIDd9LCB7Q1I5NCwgNywgN30sIHtDUjk1LCA3LCA3fSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlmb190aHJlc2hvbGRfc2VsZWN0IGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIFRocmVzaG9sZCBTZWxlY3QgKi8KKwl7SUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNLCB7e1NSMTYsIDAsIDV9LCB7U1IxNiwgNywgN30gfSB9LAorCS8qIElHQTIgRklGTyBUaHJlc2hvbGQgU2VsZWN0ICovCisJe0lHQTJfRklGT19USFJFU0hPTERfUkVHX05VTSwge3tDUjY4LCAwLCAzfSwge0NSOTUsIDQsIDZ9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdCBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCXtJR0ExX0ZJRk9fSElHSF9USFJFU0hPTERfUkVHX05VTSwge3tTUjE4LCAwLCA1fSwge1NSMTgsIDcsIDd9IH0gfSwKKwkvKiBJR0EyIEZJRk8gSGlnaCBUaHJlc2hvbGQgU2VsZWN0ICovCisJe0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNLCB7e0NSOTIsIDAsIDN9LCB7Q1I5NSwgMCwgMn0gfSB9Cit9OworCitzdGF0aWMgc3RydWN0IGRpc3BsYXlfcXVldWVfZXhwaXJlX251bSBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnID0geworCS8qIElHQTEgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJe0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0sIHt7U1IyMiwgMCwgNH0gfSB9LAorCS8qIElHQTIgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJe0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0sIHt7Q1I5NCwgMCwgNn0gfSB9Cit9OworCisvKiBEZWZpbml0aW9uIEZldGNoIENvdW50IFJlZ2lzdGVycyovCitzdGF0aWMgc3RydWN0IGZldGNoX2NvdW50IGZldGNoX2NvdW50X3JlZyA9IHsKKwkvKiBJR0ExIEZldGNoIENvdW50IFJlZ2lzdGVyICovCisJe0lHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTSwge3tTUjFDLCAwLCA3fSwge1NSMUQsIDAsIDF9IH0gfSwKKwkvKiBJR0EyIEZldGNoIENvdW50IFJlZ2lzdGVyICovCisJe0lHQTJfRkVUQ0hfQ09VTlRfUkVHX05VTSwge3tDUjY1LCAwLCA3fSwge0NSNjcsIDIsIDN9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBpZ2ExX2NydGNfdGltaW5nIGlnYTFfY3J0Y19yZWcgPSB7CisJLyogSUdBMSBIb3Jpem9udGFsIFRvdGFsICovCisJe0lHQTFfSE9SX1RPVEFMX1JFR19OVU0sIHt7Q1IwMCwgMCwgN30sIHtDUjM2LCAzLCAzfSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCisJe0lHQTFfSE9SX0FERFJfUkVHX05VTSwge3tDUjAxLCAwLCA3fSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCisJe0lHQTFfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0sIHt7Q1IwMiwgMCwgN30gfSB9LAorCS8qIElHQTEgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7SUdBMV9IT1JfQkxBTktfRU5EX1JFR19OVU0sCisJIHt7Q1IwMywgMCwgNH0sIHtDUjA1LCA3LCA3fSwge0NSMzMsIDUsIDV9IH0gfSwKKwkvKiBJR0ExIEhvcml6b250YWwgU3luYyBTdGFydCAqLworCXtJR0ExX0hPUl9TWU5DX1NUQVJUX1JFR19OVU0sIHt7Q1IwNCwgMCwgN30sIHtDUjMzLCA0LCA0fSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIFN5bmMgRW5kICovCisJe0lHQTFfSE9SX1NZTkNfRU5EX1JFR19OVU0sIHt7Q1IwNSwgMCwgNH0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgVG90YWwgKi8KKwl7SUdBMV9WRVJfVE9UQUxfUkVHX05VTSwKKwkge3tDUjA2LCAwLCA3fSwge0NSMDcsIDAsIDB9LCB7Q1IwNywgNSwgNX0sIHtDUjM1LCAwLCAwfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0ExX1ZFUl9BRERSX1JFR19OVU0sCisJIHt7Q1IxMiwgMCwgN30sIHtDUjA3LCAxLCAxfSwge0NSMDcsIDYsIDZ9LCB7Q1IzNSwgMiwgMn0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMV9WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwKKwkge3tDUjE1LCAwLCA3fSwge0NSMDcsIDMsIDN9LCB7Q1IwOSwgNSwgNX0sIHtDUjM1LCAzLCAzfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KKwl7SUdBMV9WRVJfQkxBTktfRU5EX1JFR19OVU0sIHt7Q1IxNiwgMCwgN30gfSB9LAorCS8qIElHQTEgVmVydGljYWwgU3luYyBTdGFydCAqLworCXtJR0ExX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU0sCisJIHt7Q1IxMCwgMCwgN30sIHtDUjA3LCAyLCAyfSwge0NSMDcsIDcsIDd9LCB7Q1IzNSwgMSwgMX0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgU3luYyBFbmQgKi8KKwl7SUdBMV9WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjExLCAwLCAzfSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWdhMl9jcnRjX3RpbWluZyBpZ2EyX2NydGNfcmVnID0geworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtJR0EyX0hPUl9UT1RBTF9SRUdfTlVNLCB7e0NSNTAsIDAsIDd9LCB7Q1I1NSwgMCwgM30gfSB9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0EyX0hPUl9BRERSX1JFR19OVU0sIHt7Q1I1MSwgMCwgN30sIHtDUjU1LCA0LCA2fSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCisJe0lHQTJfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0sIHt7Q1I1MiwgMCwgN30sIHtDUjU0LCAwLCAyfSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtJR0EyX0hPUl9CTEFOS19FTkRfUkVHX05VTSwKKwkge3tDUjUzLCAwLCA3fSwge0NSNTQsIDMsIDV9LCB7Q1I1RCwgNiwgNn0gfSB9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCisJe0lHQTJfSE9SX1NZTkNfU1RBUlRfUkVHX05VTSwKKwkge3tDUjU2LCAwLCA3fSwge0NSNTQsIDYsIDd9LCB7Q1I1QywgNywgN30sIHtDUjVELCA3LCA3fSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgRW5kICovCisJe0lHQTJfSE9SX1NZTkNfRU5EX1JFR19OVU0sIHt7Q1I1NywgMCwgN30sIHtDUjVDLCA2LCA2fSB9IH0sCisJLyogSUdBMiBWZXJ0aWNhbCBUb3RhbCAqLworCXtJR0EyX1ZFUl9UT1RBTF9SRUdfTlVNLCB7e0NSNTgsIDAsIDd9LCB7Q1I1RCwgMCwgMn0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KKwl7SUdBMl9WRVJfQUREUl9SRUdfTlVNLCB7e0NSNTksIDAsIDd9LCB7Q1I1RCwgMywgNX0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMl9WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwge3tDUjVBLCAwLCA3fSwge0NSNUMsIDAsIDJ9IH0gfSwKKwkvKiBJR0EyIFZlcnRpY2FsIEJsYW5rIEVuZCAqLworCXtJR0EyX1ZFUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjVCLCAwLCA3fSwge0NSNUMsIDMsIDV9IH0gfSwKKwkvKiBJR0EyIFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KKwl7SUdBMl9WRVJfU1lOQ19TVEFSVF9SRUdfTlVNLCB7e0NSNUUsIDAsIDd9LCB7Q1I1RiwgNSwgN30gfSB9LAorCS8qIElHQTIgVmVydGljYWwgU3luYyBFbmQgKi8KKwl7SUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjVGLCAwLCA0fSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmdiTFVUIHBhbExVVF90YWJsZVtdID0geworCS8qIHtSLEcsQn0gKi8KKwkvKiBJbmRleCAweDAwfjB4MDMgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDJBfSwgezB4MDAsIDB4MkEsIDB4MDB9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDJBLAorCQkJCQkJCQkgICAgIDB4MkF9LAorCS8qIEluZGV4IDB4MDR+MHgwNyAqLworCXsweDJBLCAweDAwLCAweDAwfSwgezB4MkEsIDB4MDAsIDB4MkF9LCB7MHgyQSwgMHgxNSwgMHgwMH0sIHsweDJBLAorCQkJCQkJCQkgICAgIDB4MkEsCisJCQkJCQkJCSAgICAgMHgyQX0sCisJLyogSW5kZXggMHgwOH4weDBCICovCisJezB4MTUsIDB4MTUsIDB4MTV9LCB7MHgxNSwgMHgxNSwgMHgzRn0sIHsweDE1LCAweDNGLCAweDE1fSwgezB4MTUsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDBDfjB4MEYgKi8KKwl7MHgzRiwgMHgxNSwgMHgxNX0sIHsweDNGLCAweDE1LCAweDNGfSwgezB4M0YsIDB4M0YsIDB4MTV9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4MTB+MHgxMyAqLworCXsweDAwLCAweDAwLCAweDAwfSwgezB4MDUsIDB4MDUsIDB4MDV9LCB7MHgwOCwgMHgwOCwgMHgwOH0sIHsweDBCLAorCQkJCQkJCQkgICAgIDB4MEIsCisJCQkJCQkJCSAgICAgMHgwQn0sCisJLyogSW5kZXggMHgxNH4weDE3ICovCisJezB4MEUsIDB4MEUsIDB4MEV9LCB7MHgxMSwgMHgxMSwgMHgxMX0sIHsweDE0LCAweDE0LCAweDE0fSwgezB4MTgsCisJCQkJCQkJCSAgICAgMHgxOCwKKwkJCQkJCQkJICAgICAweDE4fSwKKwkvKiBJbmRleCAweDE4fjB4MUIgKi8KKwl7MHgxQywgMHgxQywgMHgxQ30sIHsweDIwLCAweDIwLCAweDIwfSwgezB4MjQsIDB4MjQsIDB4MjR9LCB7MHgyOCwKKwkJCQkJCQkJICAgICAweDI4LAorCQkJCQkJCQkgICAgIDB4Mjh9LAorCS8qIEluZGV4IDB4MUN+MHgxRiAqLworCXsweDJELCAweDJELCAweDJEfSwgezB4MzIsIDB4MzIsIDB4MzJ9LCB7MHgzOCwgMHgzOCwgMHgzOH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHgyMH4weDIzICovCisJezB4MDAsIDB4MDAsIDB4M0Z9LCB7MHgxMCwgMHgwMCwgMHgzRn0sIHsweDFGLCAweDAwLCAweDNGfSwgezB4MkYsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDI0fjB4MjcgKi8KKwl7MHgzRiwgMHgwMCwgMHgzRn0sIHsweDNGLCAweDAwLCAweDJGfSwgezB4M0YsIDB4MDAsIDB4MUZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MTB9LAorCS8qIEluZGV4IDB4Mjh+MHgyQiAqLworCXsweDNGLCAweDAwLCAweDAwfSwgezB4M0YsIDB4MTAsIDB4MDB9LCB7MHgzRiwgMHgxRiwgMHgwMH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4MkYsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHgyQ34weDJGICovCisJezB4M0YsIDB4M0YsIDB4MDB9LCB7MHgyRiwgMHgzRiwgMHgwMH0sIHsweDFGLCAweDNGLCAweDAwfSwgezB4MTAsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDMwfjB4MzMgKi8KKwl7MHgwMCwgMHgzRiwgMHgwMH0sIHsweDAwLCAweDNGLCAweDEwfSwgezB4MDAsIDB4M0YsIDB4MUZ9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4MkZ9LAorCS8qIEluZGV4IDB4MzR+MHgzNyAqLworCXsweDAwLCAweDNGLCAweDNGfSwgezB4MDAsIDB4MkYsIDB4M0Z9LCB7MHgwMCwgMHgxRiwgMHgzRn0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MTAsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHgzOH4weDNCICovCisJezB4MUYsIDB4MUYsIDB4M0Z9LCB7MHgyNywgMHgxRiwgMHgzRn0sIHsweDJGLCAweDFGLCAweDNGfSwgezB4MzcsCisJCQkJCQkJCSAgICAgMHgxRiwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDNDfjB4M0YgKi8KKwl7MHgzRiwgMHgxRiwgMHgzRn0sIHsweDNGLCAweDFGLCAweDM3fSwgezB4M0YsIDB4MUYsIDB4MkZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDFGLAorCQkJCQkJCQkgICAgIDB4Mjd9LAorCS8qIEluZGV4IDB4NDB+MHg0MyAqLworCXsweDNGLCAweDFGLCAweDFGfSwgezB4M0YsIDB4MjcsIDB4MUZ9LCB7MHgzRiwgMHgyRiwgMHgxRn0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgxRn0sCisJLyogSW5kZXggMHg0NH4weDQ3ICovCisJezB4M0YsIDB4M0YsIDB4MUZ9LCB7MHgzNywgMHgzRiwgMHgxRn0sIHsweDJGLCAweDNGLCAweDFGfSwgezB4MjcsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDFGfSwKKwkvKiBJbmRleCAweDQ4fjB4NEIgKi8KKwl7MHgxRiwgMHgzRiwgMHgxRn0sIHsweDFGLCAweDNGLCAweDI3fSwgezB4MUYsIDB4M0YsIDB4MkZ9LCB7MHgxRiwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4Mzd9LAorCS8qIEluZGV4IDB4NEN+MHg0RiAqLworCXsweDFGLCAweDNGLCAweDNGfSwgezB4MUYsIDB4MzcsIDB4M0Z9LCB7MHgxRiwgMHgyRiwgMHgzRn0sIHsweDFGLAorCQkJCQkJCQkgICAgIDB4MjcsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHg1MH4weDUzICovCisJezB4MkQsIDB4MkQsIDB4M0Z9LCB7MHgzMSwgMHgyRCwgMHgzRn0sIHsweDM2LCAweDJELCAweDNGfSwgezB4M0EsCisJCQkJCQkJCSAgICAgMHgyRCwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDU0fjB4NTcgKi8KKwl7MHgzRiwgMHgyRCwgMHgzRn0sIHsweDNGLCAweDJELCAweDNBfSwgezB4M0YsIDB4MkQsIDB4MzZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDJELAorCQkJCQkJCQkgICAgIDB4MzF9LAorCS8qIEluZGV4IDB4NTh+MHg1QiAqLworCXsweDNGLCAweDJELCAweDJEfSwgezB4M0YsIDB4MzEsIDB4MkR9LCB7MHgzRiwgMHgzNiwgMHgyRH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0EsCisJCQkJCQkJCSAgICAgMHgyRH0sCisJLyogSW5kZXggMHg1Q34weDVGICovCisJezB4M0YsIDB4M0YsIDB4MkR9LCB7MHgzQSwgMHgzRiwgMHgyRH0sIHsweDM2LCAweDNGLCAweDJEfSwgezB4MzEsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDJEfSwKKwkvKiBJbmRleCAweDYwfjB4NjMgKi8KKwl7MHgyRCwgMHgzRiwgMHgyRH0sIHsweDJELCAweDNGLCAweDMxfSwgezB4MkQsIDB4M0YsIDB4MzZ9LCB7MHgyRCwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4M0F9LAorCS8qIEluZGV4IDB4NjR+MHg2NyAqLworCXsweDJELCAweDNGLCAweDNGfSwgezB4MkQsIDB4M0EsIDB4M0Z9LCB7MHgyRCwgMHgzNiwgMHgzRn0sIHsweDJELAorCQkJCQkJCQkgICAgIDB4MzEsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHg2OH4weDZCICovCisJezB4MDAsIDB4MDAsIDB4MUN9LCB7MHgwNywgMHgwMCwgMHgxQ30sIHsweDBFLCAweDAwLCAweDFDfSwgezB4MTUsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDZDfjB4NkYgKi8KKwl7MHgxQywgMHgwMCwgMHgxQ30sIHsweDFDLCAweDAwLCAweDE1fSwgezB4MUMsIDB4MDAsIDB4MEV9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDd9LAorCS8qIEluZGV4IDB4NzB+MHg3MyAqLworCXsweDFDLCAweDAwLCAweDAwfSwgezB4MUMsIDB4MDcsIDB4MDB9LCB7MHgxQywgMHgwRSwgMHgwMH0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MTUsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHg3NH4weDc3ICovCisJezB4MUMsIDB4MUMsIDB4MDB9LCB7MHgxNSwgMHgxQywgMHgwMH0sIHsweDBFLCAweDFDLCAweDAwfSwgezB4MDcsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDc4fjB4N0IgKi8KKwl7MHgwMCwgMHgxQywgMHgwMH0sIHsweDAwLCAweDFDLCAweDA3fSwgezB4MDAsIDB4MUMsIDB4MEV9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MTV9LAorCS8qIEluZGV4IDB4N0N+MHg3RiAqLworCXsweDAwLCAweDFDLCAweDFDfSwgezB4MDAsIDB4MTUsIDB4MUN9LCB7MHgwMCwgMHgwRSwgMHgxQ30sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MDcsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHg4MH4weDgzICovCisJezB4MEUsIDB4MEUsIDB4MUN9LCB7MHgxMSwgMHgwRSwgMHgxQ30sIHsweDE1LCAweDBFLCAweDFDfSwgezB4MTgsCisJCQkJCQkJCSAgICAgMHgwRSwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDg0fjB4ODcgKi8KKwl7MHgxQywgMHgwRSwgMHgxQ30sIHsweDFDLCAweDBFLCAweDE4fSwgezB4MUMsIDB4MEUsIDB4MTV9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDBFLAorCQkJCQkJCQkgICAgIDB4MTF9LAorCS8qIEluZGV4IDB4ODh+MHg4QiAqLworCXsweDFDLCAweDBFLCAweDBFfSwgezB4MUMsIDB4MTEsIDB4MEV9LCB7MHgxQywgMHgxNSwgMHgwRX0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MTgsCisJCQkJCQkJCSAgICAgMHgwRX0sCisJLyogSW5kZXggMHg4Q34weDhGICovCisJezB4MUMsIDB4MUMsIDB4MEV9LCB7MHgxOCwgMHgxQywgMHgwRX0sIHsweDE1LCAweDFDLCAweDBFfSwgezB4MTEsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDBFfSwKKwkvKiBJbmRleCAweDkwfjB4OTMgKi8KKwl7MHgwRSwgMHgxQywgMHgwRX0sIHsweDBFLCAweDFDLCAweDExfSwgezB4MEUsIDB4MUMsIDB4MTV9LCB7MHgwRSwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MTh9LAorCS8qIEluZGV4IDB4OTR+MHg5NyAqLworCXsweDBFLCAweDFDLCAweDFDfSwgezB4MEUsIDB4MTgsIDB4MUN9LCB7MHgwRSwgMHgxNSwgMHgxQ30sIHsweDBFLAorCQkJCQkJCQkgICAgIDB4MTEsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHg5OH4weDlCICovCisJezB4MTQsIDB4MTQsIDB4MUN9LCB7MHgxNiwgMHgxNCwgMHgxQ30sIHsweDE4LCAweDE0LCAweDFDfSwgezB4MUEsCisJCQkJCQkJCSAgICAgMHgxNCwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDlDfjB4OUYgKi8KKwl7MHgxQywgMHgxNCwgMHgxQ30sIHsweDFDLCAweDE0LCAweDFBfSwgezB4MUMsIDB4MTQsIDB4MTh9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDE0LAorCQkJCQkJCQkgICAgIDB4MTZ9LAorCS8qIEluZGV4IDB4QTB+MHhBMyAqLworCXsweDFDLCAweDE0LCAweDE0fSwgezB4MUMsIDB4MTYsIDB4MTR9LCB7MHgxQywgMHgxOCwgMHgxNH0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MUEsCisJCQkJCQkJCSAgICAgMHgxNH0sCisJLyogSW5kZXggMHhBNH4weEE3ICovCisJezB4MUMsIDB4MUMsIDB4MTR9LCB7MHgxQSwgMHgxQywgMHgxNH0sIHsweDE4LCAweDFDLCAweDE0fSwgezB4MTYsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDE0fSwKKwkvKiBJbmRleCAweEE4fjB4QUIgKi8KKwl7MHgxNCwgMHgxQywgMHgxNH0sIHsweDE0LCAweDFDLCAweDE2fSwgezB4MTQsIDB4MUMsIDB4MTh9LCB7MHgxNCwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MUF9LAorCS8qIEluZGV4IDB4QUN+MHhBRiAqLworCXsweDE0LCAweDFDLCAweDFDfSwgezB4MTQsIDB4MUEsIDB4MUN9LCB7MHgxNCwgMHgxOCwgMHgxQ30sIHsweDE0LAorCQkJCQkJCQkgICAgIDB4MTYsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHhCMH4weEIzICovCisJezB4MDAsIDB4MDAsIDB4MTB9LCB7MHgwNCwgMHgwMCwgMHgxMH0sIHsweDA4LCAweDAwLCAweDEwfSwgezB4MEMsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEI0fjB4QjcgKi8KKwl7MHgxMCwgMHgwMCwgMHgxMH0sIHsweDEwLCAweDAwLCAweDBDfSwgezB4MTAsIDB4MDAsIDB4MDh9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDR9LAorCS8qIEluZGV4IDB4Qjh+MHhCQiAqLworCXsweDEwLCAweDAwLCAweDAwfSwgezB4MTAsIDB4MDQsIDB4MDB9LCB7MHgxMCwgMHgwOCwgMHgwMH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEMsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHhCQ34weEJGICovCisJezB4MTAsIDB4MTAsIDB4MDB9LCB7MHgwQywgMHgxMCwgMHgwMH0sIHsweDA4LCAweDEwLCAweDAwfSwgezB4MDQsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweEMwfjB4QzMgKi8KKwl7MHgwMCwgMHgxMCwgMHgwMH0sIHsweDAwLCAweDEwLCAweDA0fSwgezB4MDAsIDB4MTAsIDB4MDh9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEN9LAorCS8qIEluZGV4IDB4QzR+MHhDNyAqLworCXsweDAwLCAweDEwLCAweDEwfSwgezB4MDAsIDB4MEMsIDB4MTB9LCB7MHgwMCwgMHgwOCwgMHgxMH0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MDQsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhDOH4weENCICovCisJezB4MDgsIDB4MDgsIDB4MTB9LCB7MHgwQSwgMHgwOCwgMHgxMH0sIHsweDBDLCAweDA4LCAweDEwfSwgezB4MEUsCisJCQkJCQkJCSAgICAgMHgwOCwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweENDfjB4Q0YgKi8KKwl7MHgxMCwgMHgwOCwgMHgxMH0sIHsweDEwLCAweDA4LCAweDBFfSwgezB4MTAsIDB4MDgsIDB4MEN9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDA4LAorCQkJCQkJCQkgICAgIDB4MEF9LAorCS8qIEluZGV4IDB4RDB+MHhEMyAqLworCXsweDEwLCAweDA4LCAweDA4fSwgezB4MTAsIDB4MEEsIDB4MDh9LCB7MHgxMCwgMHgwQywgMHgwOH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEUsCisJCQkJCQkJCSAgICAgMHgwOH0sCisJLyogSW5kZXggMHhENH4weEQ3ICovCisJezB4MTAsIDB4MTAsIDB4MDh9LCB7MHgwRSwgMHgxMCwgMHgwOH0sIHsweDBDLCAweDEwLCAweDA4fSwgezB4MEEsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDA4fSwKKwkvKiBJbmRleCAweEQ4fjB4REIgKi8KKwl7MHgwOCwgMHgxMCwgMHgwOH0sIHsweDA4LCAweDEwLCAweDBBfSwgezB4MDgsIDB4MTAsIDB4MEN9LCB7MHgwOCwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEV9LAorCS8qIEluZGV4IDB4REN+MHhERiAqLworCXsweDA4LCAweDEwLCAweDEwfSwgezB4MDgsIDB4MEUsIDB4MTB9LCB7MHgwOCwgMHgwQywgMHgxMH0sIHsweDA4LAorCQkJCQkJCQkgICAgIDB4MEEsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhFMH4weEUzICovCisJezB4MEIsIDB4MEIsIDB4MTB9LCB7MHgwQywgMHgwQiwgMHgxMH0sIHsweDBELCAweDBCLCAweDEwfSwgezB4MEYsCisJCQkJCQkJCSAgICAgMHgwQiwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEU0fjB4RTcgKi8KKwl7MHgxMCwgMHgwQiwgMHgxMH0sIHsweDEwLCAweDBCLCAweDBGfSwgezB4MTAsIDB4MEIsIDB4MER9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDBCLAorCQkJCQkJCQkgICAgIDB4MEN9LAorCS8qIEluZGV4IDB4RTh+MHhFQiAqLworCXsweDEwLCAweDBCLCAweDBCfSwgezB4MTAsIDB4MEMsIDB4MEJ9LCB7MHgxMCwgMHgwRCwgMHgwQn0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEYsCisJCQkJCQkJCSAgICAgMHgwQn0sCisJLyogSW5kZXggMHhFQ34weEVGICovCisJezB4MTAsIDB4MTAsIDB4MEJ9LCB7MHgwRiwgMHgxMCwgMHgwQn0sIHsweDBELCAweDEwLCAweDBCfSwgezB4MEMsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDBCfSwKKwkvKiBJbmRleCAweEYwfjB4RjMgKi8KKwl7MHgwQiwgMHgxMCwgMHgwQn0sIHsweDBCLCAweDEwLCAweDBDfSwgezB4MEIsIDB4MTAsIDB4MER9LCB7MHgwQiwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEZ9LAorCS8qIEluZGV4IDB4RjR+MHhGNyAqLworCXsweDBCLCAweDEwLCAweDEwfSwgezB4MEIsIDB4MEYsIDB4MTB9LCB7MHgwQiwgMHgwRCwgMHgxMH0sIHsweDBCLAorCQkJCQkJCQkgICAgIDB4MEMsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhGOH4weEZCICovCisJezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweEZDfjB4RkYgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDB9Cit9OworCitzdGF0aWMgdm9pZCBzZXRfY3J0X291dHB1dF9wYXRoKGludCBzZXRfaWdhKTsKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cDAodm9pZCk7CitzdGF0aWMgdm9pZCBkdmlfcGF0Y2hfc2tld19kdnAxKHZvaWQpOworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwX2xvdyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldF9kdmlfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3N0YXRpYyB2b2lkIHNldF9sY2Rfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc2VhcmNoX21vZGVfc2V0dGluZyhpbnQgTW9kZUluZm9JbmRleCk7CitzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X2dmeF9jaGlwX2luZm8odm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKTsKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb2ZmKHZvaWQpOworc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vbih2b2lkKTsKK3N0YXRpYyB2b2lkIHNldF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgdm9pZCBkZXZpY2Vfb2ZmKHZvaWQpOworc3RhdGljIHZvaWQgZGV2aWNlX29uKHZvaWQpOworc3RhdGljIHZvaWQgZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgaW50IGdldF9mYl9zaXplX2Zyb21fcGNpKHZvaWQpOworCit2b2lkIHZpYWZiX3dyaXRlX3JlZyh1OCBpbmRleCwgdTE2IGlvX3BvcnQsIHU4IGRhdGEpCit7CisJb3V0YihpbmRleCwgaW9fcG9ydCk7CisJb3V0YihkYXRhLCBpb19wb3J0ICsgMSk7CisJLypERUJVR19NU0coS0VSTl9JTkZPICJcbkluZGV4PSUyZCBWYWx1ZT0lMmQiLCBpbmRleCwgZGF0YSk7ICovCit9Cit1OCB2aWFmYl9yZWFkX3JlZyhpbnQgaW9fcG9ydCwgdTggaW5kZXgpCit7CisJb3V0YihpbmRleCwgaW9fcG9ydCk7CisJcmV0dXJuIGluYihpb19wb3J0ICsgMSk7Cit9CisKK3ZvaWQgdmlhZmJfbG9ja19jcnQodm9pZCkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjExLCBWSUFDUiwgQklUNywgQklUNyk7Cit9CisKK3ZvaWQgdmlhZmJfdW5sb2NrX2NydCh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTEsIFZJQUNSLCAwLCBCSVQ3KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ3LCBWSUFDUiwgMCwgQklUMCk7Cit9CisKK3ZvaWQgdmlhZmJfd3JpdGVfcmVnX21hc2sodTggaW5kZXgsIGludCBpb19wb3J0LCB1OCBkYXRhLCB1OCBtYXNrKQoreworCXU4IHRtcDsKKworCW91dGIoaW5kZXgsIGlvX3BvcnQpOworCXRtcCA9IGluYihpb19wb3J0ICsgMSk7CisJb3V0YigoZGF0YSAmIG1hc2spIHwgKHRtcCAmICh+bWFzaykpLCBpb19wb3J0ICsgMSk7CisJLypERUJVR19NU0coS0VSTl9JTkZPICJcbkluZGV4PSUyZCBWYWx1ZT0lMmQiLCBpbmRleCwgdG1wKTsgKi8KK30KKwordm9pZCB3cml0ZV9kYWNfcmVnKHU4IGluZGV4LCB1OCByLCB1OCBnLCB1OCBiKQoreworCW91dGIoaW5kZXgsIExVVF9JTkRFWF9XUklURSk7CisJb3V0YihyLCBMVVRfREFUQSk7CisJb3V0YihnLCBMVVRfREFUQSk7CisJb3V0YihiLCBMVVRfREFUQSk7Cit9CisKKy8qU2V0IElHQSBwYXRoIGZvciBlYWNoIGRldmljZSovCit2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKQoreworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAodmlhZmJfQ1JUX09OKSB7CisJCQlpZiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gQ1JUX0RldmljZSkKKwkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQllbHNlCisJCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9CisKKwkJaWYgKHZpYWZiX0RWSV9PTikgeworCQkJaWYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IERWSV9EZXZpY2UpCisJCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCWVsc2UKKwkJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9CisKKwkJaWYgKHZpYWZiX0xDRF9PTikgeworCQkJaWYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IExDRF9EZXZpY2UpIHsKKwkJCQlpZiAodmlhZmJfZHVhbF9mYiAmJgorCQkJCQkodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQkJCVVOSUNIUk9NRV9DTEUyNjYpKSB7CisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQlsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJY3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCQl9IGVsc2UKKwkJCQkJdmlhcGFyaW5mby0+CisJCQkJCWx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQl9IGVsc2UgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJCWlmIChMQ0QyX0RldmljZSA9PSB2aWFmYl9wcmltYXJ5X2RldikKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMTsKKwkJCWVsc2UKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMjsKKwkJfQorCX0gZWxzZSB7CisJCXZpYWZiX1NBTU1fT04gPSAwOworCisJCWlmICh2aWFmYl9DUlRfT04gJiYgdmlhZmJfTENEX09OKSB7CisJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9IGVsc2UgaWYgKHZpYWZiX0NSVF9PTiAmJiB2aWFmYl9EVklfT04pIHsKKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0RWSV9PTikgeworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0xDRDJfT04pIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMjsKKwkJfSBlbHNlIGlmICh2aWFmYl9DUlRfT04pIHsKKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04pIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfRFZJX09OKSB7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQl9CisJfQorfQorCit2b2lkIHZpYWZiX3NldF9zdGFydF9hZGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwLCB0bXAgPSAwLCBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9zdGFydF9hZGRyIVxuIik7CisJdmlhZmJfdW5sb2NrX2NydCgpOworCS8qIHVwZGF0ZSBzdGFydGluZyBhZGRyZXNzIG9mIElHQTEgKi8KKwl2aWFmYl93cml0ZV9yZWcoQ1IwQywgVklBQ1IsIDB4MDApOwkvKmluaXRpYWwgc3RhcnRpbmcgYWRkcmVzcyAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjBELCBWSUFDUiwgMHgwMCk7CisJdmlhZmJfd3JpdGVfcmVnKENSMzQsIFZJQUNSLCAweDAwKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ4LCBWSUFDUiwgMHgwMCwgMHgxRik7CisKKwlpZiAodmlhZmJfZHVhbF9mYikgeworCQl2aWFwYXJpbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCXZpYXBhcmluZm8xLT5pZ2FfcGF0aCA9IElHQTI7CisJfQorCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAoIXZpYWZiX2R1YWxfZmIpIHsKKwkJCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSkKKwkJCQlzaXplID0gdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCWVsc2UKKwkJCQlzaXplID0gOCAqIDEwMjQgKiAxMDI0OworCQl9IGVsc2UgeworCisJCQlzaXplID0gdmlhcGFyaW5mbzEtPm1lbXNpemU7CisJCX0KKwkJb2Zmc2V0ID0gdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJICAidmlhZmJfc2Vjb25kX3NpemU9JWx4LCBzZWNvbmQgc3RhcnRfYWRkZHJlc3M9JWx4XG4iLAorCQkJICBzaXplLCBvZmZzZXQpOworCX0KKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCW9mZnNldCA9IG9mZnNldCA+PiAzOworCisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCAweDYyKSAmIDB4MDE7CisJCXRtcCB8PSAob2Zmc2V0ICYgMHg3RikgPDwgMTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNjIsIFZJQUNSLCB0bXApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsICgob2Zmc2V0ICYgMHg3RjgwKSA+PiA3KSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjY0LCBWSUFDUiwgKChvZmZzZXQgJiAweDdGODAwMCkgPj4gMTUpKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSQTMsIFZJQUNSLCAoKG9mZnNldCAmIDB4MzgwMDAwMCkgPj4gMjMpKTsKKwl9IGVsc2UgeworCQkvKiB1cGRhdGUgc3RhcnRpbmcgYWRkcmVzcyAqLworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MiwgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2NCwgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1JBMywgVklBQ1IsIDB4MDApOworCX0KKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKHZpYWZiX2FjY2VsKSB7CisJCQlpZiAoIXZpYWZiX2R1YWxfZmIpCisJCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8tPmZibWVtX3VzZWQ7CisJCQllbHNlCisJCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8xLT5mYm1lbV91c2VkOworCQl9IGVsc2UKKwkJCWxlbmd0aCA9IHNpemU7CisJCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKSh2b2lkICopdmlhZmJfRkJfTU0gKworCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJbWVtc2V0KCh2b2lkICopb2Zmc2V0LCAwLCBsZW5ndGgpOworCX0KKworCXZpYWZiX2xvY2tfY3J0KCk7Cit9CisKK3ZvaWQgdmlhZmJfc2V0X291dHB1dF9wYXRoKGludCBkZXZpY2UsIGludCBzZXRfaWdhLCBpbnQgb3V0cHV0X2ludGVyZmFjZSkKK3sKKwlzd2l0Y2ggKGRldmljZSkgeworCWNhc2UgREVWSUNFX0NSVDoKKwkJc2V0X2NydF9vdXRwdXRfcGF0aChzZXRfaWdhKTsKKwkJYnJlYWs7CisJY2FzZSBERVZJQ0VfRFZJOgorCQlzZXRfZHZpX291dHB1dF9wYXRoKHNldF9pZ2EsIG91dHB1dF9pbnRlcmZhY2UpOworCQlicmVhazsKKwljYXNlIERFVklDRV9MQ0Q6CisJCXNldF9sY2Rfb3V0cHV0X3BhdGgoc2V0X2lnYSwgb3V0cHV0X2ludGVyZmFjZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NydF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgwMCwgQklUNCArIEJJVDUpOworCisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHgwMCwgQklUNik7CisJCWJyZWFrOworCWNhc2UgSUdBMjoKKwljYXNlIElHQTFfSUdBMjoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNiwgVklBU1IsIDB4NDAsIEJJVDYpOworCQlpZiAoc2V0X2lnYSA9PSBJR0ExX0lHQTIpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZCLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwMCh2b2lkKQoreworCS8qIFJlc2V0IGRhdGEgZHJpdmluZyBmaXJzdDogKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMCwgQklUMSk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDAsIEJJVDQpOworCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXsKKwkJCWlmICgodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID09IDE2MDApICYmCisJCQkJKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9PQorCQkJCTEyMDApKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAzLAorCQkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyKTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwNywKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUMik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwNywKKwkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyICsgQklUMyk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMHgwMiwgQklUMSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgxMCwgQklUNCk7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cDEodm9pZCkKK3sKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQl7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cF9sb3codm9pZCkKK3sKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDA4LAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDBGLAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2R2aV9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpCit7CisJc3dpdGNoIChvdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDEsIEJJVDApOworCisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkMsIFZJQUNSLCAweDIxLCBCSVQwICsKKwkJCQlCSVQ1ICsgQklUNyk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZDLCBWSUFDUiwgMHhBMSwgQklUMCArCisJCQkJQklUNSArIEJJVDcpOworCQl9CisKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIEJJVDcgKyBCSVQ2KTsKKworCQlkdmlfcGF0Y2hfc2tld19kdnAwKCk7CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSB7CisJCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTMsIFZJQUNSLCAweDIxLAorCQkJCQkgICAgICAgQklUMCArIEJJVDUgKyBCSVQ3KTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkzLCBWSUFDUiwgMHhBMSwKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQ1ICsgQklUNyk7CisJCX0gZWxzZSB7CisJCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgzMCwgQklUNCArIEJJVDUpOworCQlkdmlfcGF0Y2hfc2tld19kdnAxKCk7CisJCWJyZWFrOworCWNhc2UgSU5URVJGQUNFX0RGUF9ISUdIOgorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MDMsCisJCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDQpOworCQkJfSBlbHNlIHsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTMsCisJCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDQpOworCQkJfQorCQl9CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDBDLCBCSVQyICsgQklUMyk7CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQX0xPVzoKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQorCQkJYnJlYWs7CisKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQl9IGVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJZHZpX3BhdGNoX3NrZXdfZHZwX2xvdygpOworCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX1RNRFM6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNldF9pZ2EgPT0gSUdBMikgeworCQllbmFibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOworCQkvKiBEaXNhYmxlIExDRCBTY2FsaW5nICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDAwLCBCSVQwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9sY2Rfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKQoreworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJICAic2V0X2xjZF9vdXRwdXRfcGF0aCwgaWdhOiVkLG91dF9pbnRlcmZhY2U6JWRcbiIsCisJCSAgc2V0X2lnYSwgb3V0cHV0X2ludGVyZmFjZSk7CisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZCLCBWSUFDUiwgMHgwMCwgQklUMyk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDA4LCBCSVQzKTsKKworCQlkaXNhYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwoKTsKKwkJYnJlYWs7CisKKwljYXNlIElHQTI6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCBCSVQzKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCisJCWVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKCk7CisJCWJyZWFrOworCisJY2FzZSBJR0ExX0lHQTI6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCisJCWRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKG91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9EVlAwOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX0RGUF9MT1c6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQOgorCQlpZiAoKFVOSUNIUk9NRV9LOE04OTAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKQorCQkgICAgfHwgKFVOSUNIUk9NRV9QNE04OTAgPT0KKwkJICAgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHg4NCwKKwkJCQkgICAgICAgQklUNyArIEJJVDIgKyBCSVQxICsgQklUMCk7CisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgwMCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMDoKKwljYXNlIElOVEVSRkFDRV9MVkRTMExWRFMxOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQllbHNlCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgQklUNCk7CisKKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMToKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTAsIEJJVDQpOworCQlicmVhazsKKwl9Cit9CisKKy8qIFNlYXJjaCBNb2RlIEluZGV4ICovCitzdGF0aWMgaW50IHNlYXJjaF9tb2RlX3NldHRpbmcoaW50IE1vZGVJbmZvSW5kZXgpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKChpIDwgTlVNX1RPVEFMX01PREVUQUJMRSkgJiYKKwkJCShNb2RlSW5mb0luZGV4ICE9IENMRTI2Nk1vZGVzW2ldLk1vZGVJbmRleCkpCisJCWkrKzsKKwlpZiAoaSA+PSBOVU1fVE9UQUxfTU9ERVRBQkxFKQorCQlpID0gMDsKKwlyZXR1cm4gaTsKKworfQorCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIoaW50IEluZGV4KQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqVG1wVGJsID0gTlVMTDsKKwlUbXBUYmwgPSAmQ0xFMjY2TW9kZXNbc2VhcmNoX21vZGVfc2V0dGluZyhJbmRleCldOworCXJldHVybiBUbXBUYmw7Cit9CisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X2NlYV9tb2RlX3RibF9wb2ludGVyKGludCBJbmRleCkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKlRtcFRibCA9IE5VTEw7CisJaW50IGkgPSAwOworCXdoaWxlICgoaSA8IE5VTV9UT1RBTF9DRUFfTU9ERVMpICYmCisJCQkoSW5kZXggIT0gQ0VBX0hETUlfTW9kZXNbaV0uTW9kZUluZGV4KSkKKwkJaSsrOworCWlmICgoaSA8IE5VTV9UT1RBTF9DRUFfTU9ERVMpKQorCQlUbXBUYmwgPSAmQ0VBX0hETUlfTW9kZXNbaV07CisJIGVsc2UgeworCQkvKlN0aWxsIHVzZSBnZW5lcmFsIHRpbWluZyBpZiBkb24ndCBmaW5kIENFQSB0aW1pbmcgKi8KKwkJaSA9IDA7CisJCXdoaWxlICgoaSA8IE5VTV9UT1RBTF9NT0RFVEFCTEUpICYmCisJCQkJKEluZGV4ICE9IENMRTI2Nk1vZGVzW2ldLk1vZGVJbmRleCkpCisJCSAgICAgICBpKys7CisJCWlmIChpID49IE5VTV9UT1RBTF9NT0RFVEFCTEUpCisJCQlpID0gMDsKKwkJVG1wVGJsID0gJkNMRTI2Nk1vZGVzW2ldOworCX0KKwlyZXR1cm4gVG1wVGJsOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCkKK3sKKwkvKiBhbHdheXMgc2V0IHRvIDEgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjAzLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCisJdmlhZmJfd3JpdGVfcmVnKENSMTgsIFZJQUNSLCAweGZmKTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjA3LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IwOSwgVklBQ1IsIDB4NDAsIEJJVDYpOworCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzUsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHgwNiwgQklUMCArIEJJVDEgKyBCSVQyKTsKKwkvKnZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzIsIFZJQUNSLCAweDAxLCBCSVQwKTsgKi8KKwkvKiBleHRlbmQgbW9kZSBhbHdheXMgc2V0IHRvIGUzaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjE3LCBWSUFDUiwgMHhlMyk7CisJLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjA4LCBWSUFDUiwgMHgwMCk7CisJLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjE0LCBWSUFDUiwgMHgwMCk7CisKKwkvKiBJZiBLOE04MDAsIGVuYWJsZSBQcmVmZXRjaCBNb2RlLiAqLworCWlmICgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LODAwKQorCQl8fCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LOE04OTApKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPT0gQ0xFMjY2X1JFVklTSU9OX0FYKSkKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDIsIEJJVDEpOworCit9CisKK3ZvaWQgdmlhZmJfbG9hZF9yZWcoaW50IHRpbWluZ192YWx1ZSwgaW50IHZpYWZiX2xvYWRfcmVnX251bSwKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZywKKwkgICAgICBpbnQgaW9fdHlwZSkKK3sKKwlpbnQgcmVnX21hc2s7CisJaW50IGJpdF9udW0gPSAwOworCWludCBkYXRhOworCWludCBpLCBqOworCWludCBzaGlmdF9uZXh0X3JlZzsKKwlpbnQgc3RhcnRfaW5kZXgsIGVuZF9pbmRleCwgY3JfaW5kZXg7CisJdTE2IGdldF9iaXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlhZmJfbG9hZF9yZWdfbnVtOyBpKyspIHsKKwkJcmVnX21hc2sgPSAwOworCQlkYXRhID0gMDsKKwkJc3RhcnRfaW5kZXggPSByZWdbaV0uc3RhcnRfYml0OworCQllbmRfaW5kZXggPSByZWdbaV0uZW5kX2JpdDsKKwkJY3JfaW5kZXggPSByZWdbaV0uaW9fYWRkcjsKKworCQlzaGlmdF9uZXh0X3JlZyA9IGJpdF9udW07CisJCWZvciAoaiA9IHN0YXJ0X2luZGV4OyBqIDw9IGVuZF9pbmRleDsgaisrKSB7CisJCQkvKmlmIChiaXRfbnVtPT04KSB0aW1pbmdfdmFsdWUgPSB0aW1pbmdfdmFsdWUgPj44OyAqLworCQkJcmVnX21hc2sgPSByZWdfbWFzayB8IChCSVQwIDw8IGopOworCQkJZ2V0X2JpdCA9ICh0aW1pbmdfdmFsdWUgJiAoQklUMCA8PCBiaXRfbnVtKSk7CisJCQlkYXRhID0KKwkJCSAgICBkYXRhIHwgKChnZXRfYml0ID4+IHNoaWZ0X25leHRfcmVnKSA8PCBzdGFydF9pbmRleCk7CisJCQliaXRfbnVtKys7CisJCX0KKwkJaWYgKGlvX3R5cGUgPT0gVklBQ1IpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhjcl9pbmRleCwgVklBQ1IsIGRhdGEsIHJlZ19tYXNrKTsKKwkJZWxzZQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soY3JfaW5kZXgsIFZJQVNSLCBkYXRhLCByZWdfbWFzayk7CisJfQorCit9CisKKy8qIFdyaXRlIFJlZ2lzdGVycyAqLwordm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBSZWdUZW1wOworCisJLypERUJVR19NU0coS0VSTl9JTkZPICJUYWJsZSBTaXplIDogJXghIVxuIixJdGVtTnVtICk7ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgSXRlbU51bTsgaSsrKSB7CisJCW91dGIoUmVnVGFibGVbaV0uaW5kZXgsIFJlZ1RhYmxlW2ldLnBvcnQpOworCQlSZWdUZW1wID0gaW5iKFJlZ1RhYmxlW2ldLnBvcnQgKyAxKTsKKwkJUmVnVGVtcCA9IChSZWdUZW1wICYgKH5SZWdUYWJsZVtpXS5tYXNrKSkgfCBSZWdUYWJsZVtpXS52YWx1ZTsKKwkJb3V0YihSZWdUZW1wLCBSZWdUYWJsZVtpXS5wb3J0ICsgMSk7CisJfQorfQorCit2b2lkIHZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQoreworCWludCByZWdfdmFsdWU7CisJaW50IHZpYWZiX2xvYWRfcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZzsKKworCXN3aXRjaCAoc2V0X2lnYSkgeworCWNhc2UgSUdBMV9JR0EyOgorCWNhc2UgSUdBMToKKwkJcmVnX3ZhbHVlID0gSUdBMV9PRkZTRVRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnX251bTsKKwkJcmVnID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQlicmVhazsKKwljYXNlIElHQTI6CisJCXJlZ192YWx1ZSA9IElHQTJfT0ZGU0VUX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZ19udW07CisJCXJlZyA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlpbnQgcmVnX3ZhbHVlOworCWludCB2aWFmYl9sb2FkX3JlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExX0lHQTI6CisJY2FzZSBJR0ExOgorCQlyZWdfdmFsdWUgPSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9IGZldGNoX2NvdW50X3JlZy4KKwkJCWlnYTFfZmV0Y2hfY291bnRfcmVnLnJlZ19udW07CisJCXJlZyA9IGZldGNoX2NvdW50X3JlZy5pZ2ExX2ZldGNoX2NvdW50X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCWJyZWFrOworCWNhc2UgSUdBMjoKKwkJcmVnX3ZhbHVlID0gSUdBMl9GRVRDSF9DT1VOVF9GT1JNVUxBKGhfYWRkciwgYnBwX2J5dGUpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBmZXRjaF9jb3VudF9yZWcuCisJCQlpZ2EyX2ZldGNoX2NvdW50X3JlZy5yZWdfbnVtOworCQlyZWcgPSBmZXRjaF9jb3VudF9yZWcuaWdhMl9mZXRjaF9jb3VudF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCWJyZWFrOworCX0KKworfQorCit2b2lkIHZpYWZiX2xvYWRfRklGT19yZWcoaW50IHNldF9pZ2EsIGludCBob3JfYWN0aXZlLCBpbnQgdmVyX2FjdGl2ZSkKK3sKKwlpbnQgcmVnX3ZhbHVlOworCWludCB2aWFmYl9sb2FkX3JlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCWludCBpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gMCwgaWdhMV9maWZvX3RocmVzaG9sZCA9CisJICAgIDAsIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9IDAsIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0gMDsKKwlpbnQgaWdhMl9maWZvX21heF9kZXB0aCA9IDAsIGlnYTJfZmlmb190aHJlc2hvbGQgPQorCSAgICAwLCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPSAwLCBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDA7CisKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBLODAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gSzgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwgZWxzZQorCQkJICAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgSzgwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUE04MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBQODgwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gUDg4MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQODgwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBQODgwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsIGVsc2UKKwkJCSAgIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIFA4ODBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTjcwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IENONzAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gQ043MDBfSUdBMV9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ043MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsCisJCQkgICBlbHNlIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIENONzAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBDWDcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IENYNzAwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIENYNzAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBDWDcwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4TTg5MCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IEs4TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IEs4TTg5MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLOE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIEs4TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTg5MCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFA0TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IFA0TTg5MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTkwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFA0TTkwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IFA0TTkwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE05MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTkwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gVlg4MDBfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBWWDgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBWWDgwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgVlg4MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQkvKiBTZXQgRGlzcGxheSBGSUZPIERlcGF0aCBTZWxlY3QgKi8KKwkJcmVnX3ZhbHVlID0gSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKGlnYTFfZmlmb19tYXhfZGVwdGgpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy5pZ2ExX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWdfbnVtOworCQlyZWcgPSBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLmlnYTFfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJCS8qIFNldCBEaXNwbGF5IEZJRk8gVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPSBJR0ExX0ZJRk9fVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMV9maWZvX3RocmVzaG9sZCk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJCS8qIFNldCBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPQorCQkgICAgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKworCQkvKiBTZXQgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBCisJCSAgICAoaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0pOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWdfbnVtOworCQlyZWcgPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKworCX0gZWxzZSB7CisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBLODAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gSzgwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLODAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKworCQkJLyogSWYgcmVzb2x1dGlvbiA+IDEyODB4MTAyNCwgZXhwaXJlIGxlbmd0aCA9IDY0LAorCQkJICAgZWxzZSAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgSzgwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1BNODAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gUDg4MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA4ODBfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgUDg4MF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwKKwkJCSAgIGVsc2UgIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIFA4ODBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTjcwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IENONzAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gQ043MDBfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ043MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsCisJCQkgICBlbHNlIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIENONzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBDWDcwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IENYNzAwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIENYNzAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBDWDcwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4TTg5MCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IEs4TTg5MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IEs4TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLOE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIEs4TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTg5MCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IFA0TTg5MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA0TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTkwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IFA0TTkwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA0TTkwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE05MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTkwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gVlg4MDBfSUdBMl9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTJfZmlmb190aHJlc2hvbGQgPSBWWDgwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBWWDgwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LODAwKSB7CisJCQkvKiBTZXQgRGlzcGxheSBGSUZPIERlcGF0aCBTZWxlY3QgKi8KKwkJCXJlZ192YWx1ZSA9CisJCQkgICAgSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKGlnYTJfZmlmb19tYXhfZGVwdGgpCisJCQkgICAgLSAxOworCQkJLyogUGF0Y2ggTENEIGluIElHQTIgY2FzZSAqLworCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCSAgICBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLgorCQkJICAgIGlnYTJfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZ19udW07CisJCQlyZWcgPQorCQkJICAgIGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuCisJCQkgICAgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnOworCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAorCQkJCXZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCX0gZWxzZSB7CisKKwkJCS8qIFNldCBEaXNwbGF5IEZJRk8gRGVwYXRoIFNlbGVjdCAqLworCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBJR0EyX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoaWdhMl9maWZvX21heF9kZXB0aCk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuCisJCQkgICAgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnX251bTsKKwkJCXJlZyA9CisJCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy4KKwkJCSAgICBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJfQorCisJCS8qIFNldCBEaXNwbGF5IEZJRk8gVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPSBJR0EyX0ZJRk9fVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMl9maWZvX3RocmVzaG9sZCk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCisJCS8qIFNldCBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPQorCQkgICAgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKworCQkvKiBTZXQgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBCisJCSAgICAoaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0pOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWdfbnVtOworCQlyZWcgPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKworCX0KKworfQorCit1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QTExfVEFCTEU7IGkrKykgeworCQlpZiAoY2xrID09IHBsbF92YWx1ZVtpXS5jbGspIHsKKwkJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJCXJldHVybiBwbGxfdmFsdWVbaV0uY2xlMjY2X3BsbDsKKworCQkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQkJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS5rODAwX3BsbDsKKworCQkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwkJCQlyZXR1cm4gcGxsX3ZhbHVlW2ldLmN4NzAwX3BsbDsKKwkJCX0KKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIkNhbid0IGZpbmQgbWF0Y2ggUExMIHZhbHVlXG5cbiIpOworCXJldHVybiAwOworfQorCisvKiBTZXQgVkNMSyovCit2b2lkIHZpYWZiX3NldF92Y2xvY2sodTMyIENMSywgaW50IHNldF9pZ2EpCit7CisJdW5zaWduZWQgY2hhciBSZWdUZW1wOworCisJLyogSC5XLiBSZXNldCA6IE9OICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOworCisJaWYgKChzZXRfaWdhID09IElHQTEpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJLyogQ2hhbmdlIEQsTiBGT1IgVkNMSyAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NiwgVklBU1IsIENMSyAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ3LCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwMDApOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ0PSV4IiwgQ0xLIC8gMHgxMDAwMCk7CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NSwgVklBU1IsIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ1PSV4IiwKKwkJCQkgIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDYsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDY9JXgiLCBDTEsgJSAweDEwMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgoc2V0X2lnYSA9PSBJR0EyKSB8fCAoc2V0X2lnYSA9PSBJR0ExX0lHQTIpKSB7CisJCS8qIENoYW5nZSBELE4gRk9SIExDSyAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ1LCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0QSwgVklBU1IsIENMSyAvIDB4MTAwMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEIsIFZJQVNSLCAoQ0xLICYgMHhGRkZGKSAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjRDLCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBILlcuIFJlc2V0IDogT0ZGICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOworCisJLyogUmVzZXQgUExMICovCisJaWYgKChzZXRfaWdhID09IElHQTEpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7CisJfQorCisJaWYgKChzZXRfaWdhID09IElHQTIpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDEsIEJJVDApOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMCk7CisJfQorCisJLyogRmlyZSEgKi8KKwlSZWdUZW1wID0gaW5iKFZJQVJNaXNjKTsKKwlvdXRiKFJlZ1RlbXAgfCAoQklUMiArIEJJVDMpLCBWSUFXTWlzYyk7Cit9CisKK3ZvaWQgdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgZGV2aWNlX3RpbWluZywKKwlpbnQgc2V0X2lnYSkKK3sKKwlpbnQgaTsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtID0gMDsKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisKKwl2aWFmYl91bmxvY2tfY3J0KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX0hPUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgaG9yX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2ExX2NydGNfcmVnLmhvcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgaG9yX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTFfY3J0Y19yZWcuaG9yX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX0hPUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3Jfc3luY19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX3N5bmNfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NZTkNfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX1NZTkNfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX3N5bmNfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLmhvcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3Jfc3luY19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9zeW5jX2VuZC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfVE9UQUxfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9WRVJfVE9UQUxfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgIHZlcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJaWdhMV9jcnRjX3JlZy52ZXJfdG90YWwucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl90b3RhbC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQUREUl9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9BRERSX0ZPUk1VTEEoZGV2aWNlX3RpbWluZy4KKwkJCQkJCQkgIHZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2ExX2NydGNfcmVnLnZlcl9hZGRyLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfYWRkci5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfU1RBUlRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9WRVJfQkxBTktfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX3N0YXJ0LnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfYmxhbmtfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9CTEFOS19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX2VuZC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9TWU5DX1NUQVJUX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX3N5bmNfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX0VORF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9TWU5DX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9zeW5jX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy52ZXJfc3luY19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX3N5bmNfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfc3luY19lbmQucmVnOworCQkJCWJyZWFrOworCisJCQl9CisJCX0KKworCQlpZiAoc2V0X2lnYSA9PSBJR0EyKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgaG9yX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2EyX2NydGNfcmVnLmhvcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgaG9yX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcuaG9yX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCk7CisJCQkJaWYgKFVOSUNIUk9NRV9DTjcwMCA8PQorCQkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpCisJCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9zeW5jX3N0YXJ0LgorCQkJCQkgICAgcmVnX251bTsKKwkJCQllbHNlCisJCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9IDM7CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3Jfc3luY19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfU1lOQ19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfU1lOQ19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9zeW5jX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX3N5bmNfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgdmVyX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2EyX2NydGNfcmVnLnZlcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgdmVyX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcudmVyX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcudmVyX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfc3luY19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfc3luY19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX3N5bmNfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLnZlcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfc3luY19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9zeW5jX2VuZC5yZWc7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJfQorCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJfQorCisJdmlhZmJfbG9ja19jcnQoKTsKK30KKwordm9pZCB2aWFmYl9zZXRfY29sb3JfZGVwdGgoaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCXN3aXRjaCAoYnBwX2J5dGUpIHsKKwkJY2FzZSBNT0RFXzhCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgMHgyMiwgMHg3RSk7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFXzE2QlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDB4QjYsIDB4RkUpOworCQkJYnJlYWs7CisJCWNhc2UgTU9ERV8zMkJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAweEFFLCAweEZFKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChicHBfYnl0ZSkgeworCQljYXNlIE1PREVfOEJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNjcsIFZJQUNSLCAweDAwLCBCSVQ2ICsgQklUNyk7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFXzE2QlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2NywgVklBQ1IsIDB4NDAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQljYXNlIE1PREVfMzJCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjY3LCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90YWJsZSwKKwlpbnQgbW9kZV9pbmRleCwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpZGVvX21vZGU7CisJc3RydWN0IGRpc3BsYXlfdGltaW5nIGNydF9yZWc7CisJaW50IGk7CisJaW50IGluZGV4ID0gMDsKKwlpbnQgaF9hZGRyLCB2X2FkZHI7CisJdTMyIHBsbF9EX047CisKKwl2aWRlb19tb2RlID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcobW9kZV9pbmRleCldOworCisJZm9yIChpID0gMDsgaSA8IHZpZGVvX21vZGUtPm1vZGVfYXJyYXk7IGkrKykgeworCQlpbmRleCA9IGk7CisKKwkJaWYgKGNydF90YWJsZVtpXS5yZWZyZXNoX3JhdGUgPT0gdmlhcGFyaW5mby0+CisJCQljcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUpCisJCQlicmVhazsKKwl9CisKKwljcnRfcmVnID0gY3J0X3RhYmxlW2luZGV4XS5jcnRjOworCisJLyogTW9kZSA2NDB4NDgwIGhhcyBib3JkZXIsIGJ1dCBMQ0QvREZQIGRpZG4ndCBoYXZlIGJvcmRlci4gKi8KKwkvKiBTbyB3ZSB3b3VsZCBkZWxldGUgYm9yZGVyLiAqLworCWlmICgodmlhZmJfTENEX09OIHwgdmlhZmJfRFZJX09OKSAmJiAobW9kZV9pbmRleCA9PSBWSUFfUkVTXzY0MFg0ODApCisJICAgICYmICh2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPT0gNjApKSB7CisJCS8qIFRoZSBib3JkZXIgaXMgOCBwaXhlbHMuICovCisJCWNydF9yZWcuaG9yX2JsYW5rX3N0YXJ0ID0gY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgLSA4OworCisJCS8qIEJsYW5raW5nIHRpbWUgc2hvdWxkIGFkZCBsZWZ0IGFuZCByaWdodCBib3JkZXJzLiAqLworCQljcnRfcmVnLmhvcl9ibGFua19lbmQgPSBjcnRfcmVnLmhvcl9ibGFua19lbmQgKyAxNjsKKwl9CisKKwloX2FkZHIgPSBjcnRfcmVnLmhvcl9hZGRyOworCXZfYWRkciA9IGNydF9yZWcudmVyX2FkZHI7CisKKwkvKiB1cGRhdGUgcG9sYXJpdHkgZm9yIENSVCB0aW1pbmcgKi8KKwlpZiAoY3J0X3RhYmxlW2luZGV4XS5oX3N5bmNfcG9sYXJpdHkgPT0gTkVHQVRJVkUpIHsKKwkJaWYgKGNydF90YWJsZVtpbmRleF0udl9zeW5jX3BvbGFyaXR5ID09IE5FR0FUSVZFKQorCQkJb3V0YigoaW5iKFZJQVJNaXNjKSAmICh+KEJJVDYgKyBCSVQ3KSkpIHwKKwkJCSAgICAgKEJJVDYgKyBCSVQ3KSwgVklBV01pc2MpOworCQllbHNlCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSkgfCAoQklUNiksCisJCQkgICAgIFZJQVdNaXNjKTsKKwl9IGVsc2UgeworCQlpZiAoY3J0X3RhYmxlW2luZGV4XS52X3N5bmNfcG9sYXJpdHkgPT0gTkVHQVRJVkUpCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSkgfCAoQklUNyksCisJCQkgICAgIFZJQVdNaXNjKTsKKwkJZWxzZQorCQkJb3V0YigoaW5iKFZJQVJNaXNjKSAmICh+KEJJVDYgKyBCSVQ3KSkpLCBWSUFXTWlzYyk7CisJfQorCisJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQl2aWFmYl91bmxvY2tfY3J0KCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjA5LCBWSUFDUiwgMHgwMCk7CS8qaW5pdGlhbCBDUjA5PTAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxMSwgVklBQ1IsIDB4MDAsIEJJVDQgKyBCSVQ1ICsgQklUNik7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKwl9CisKKwlzd2l0Y2ggKHNldF9pZ2EpIHsKKwljYXNlIElHQTE6CisJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcoY3J0X3JlZywgSUdBMSk7CisJCWJyZWFrOworCWNhc2UgSUdBMjoKKwkJdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhjcnRfcmVnLCBJR0EyKTsKKwkJYnJlYWs7CisJfQorCisJbG9hZF9maXhfYml0X2NydGNfcmVnKCk7CisJdmlhZmJfbG9ja19jcnQoKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CisJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOworCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOworCisJLyogbG9hZCBGSUZPICovCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfSzQwMCkpCisJCXZpYWZiX2xvYWRfRklGT19yZWcoc2V0X2lnYSwgaF9hZGRyLCB2X2FkZHIpOworCisJLyogbG9hZCBTUiBSZWdpc3RlciBBYm91dCBNZW1vcnkgYW5kIENvbG9yIHBhcnQgKi8KKwl2aWFmYl9zZXRfY29sb3JfZGVwdGgoYnBwX2J5dGUsIHNldF9pZ2EpOworCisJcGxsX0RfTiA9IHZpYWZiX2dldF9jbGtfdmFsdWUoY3J0X3RhYmxlW2luZGV4XS5jbGspOworCURFQlVHX01TRyhLRVJOX0lORk8gIlBMTD0leCIsIHBsbF9EX04pOworCXZpYWZiX3NldF92Y2xvY2socGxsX0RfTiwgc2V0X2lnYSk7CisKK30KKwordm9pZCB2aWFmYl9pbml0X2NoaXBfaW5mbyh2b2lkKQoreworCWluaXRfZ2Z4X2NoaXBfaW5mbygpOworCWluaXRfdG1kc19jaGlwX2luZm8oKTsKKwlpbml0X2x2ZHNfY2hpcF9pbmZvKCk7CisKKwl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0gdmlhZmJfcmVmcmVzaDsKKworCS8qU2V0IElHQSBwYXRoIGZvciBlYWNoIGRldmljZSAqLworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0gdmlhZmJfbGNkX2RzcF9tZXRob2Q7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQlHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGlzcGxheV9tZXRob2QgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2Q7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfbW9kZSA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZTsKK30KKwordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLAorCWludCBicHAsIGludCB2bW9kZV9yZWZyZXNoLCBpbnQgZmxhZykKK3sKKwlpZiAoZmxhZyA9PSAwKSB7CisJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKKwkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9CisJCQl2bW9kZV9yZWZyZXNoOworCisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJdm1vZGVfcmVmcmVzaDsKKworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmUgPSBocmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+YnBwID0gYnBwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0KKwkJCXZtb2RlX3JlZnJlc2g7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aF9hY3RpdmUgPSBocmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPnZfYWN0aXZlID0gdnJlczsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+cmVmcmVzaF9yYXRlID0KKwkJCXZtb2RlX3JlZnJlc2g7CisJfSBlbHNlIHsKKworCQlpZiAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKwkJaWYgKElHQTIgPT0gdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5pZ2FfcGF0aCkgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPnZfYWN0aXZlID0gdnJlczsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+YnBwID0gYnBwOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwl1MzIgaTsKKwl1OCB0bXA7CisKKwkvKiBJbmRlbnRpZnkgR0ZYIENoaXAgTmFtZSAqLworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKSB7CisJCXBkZXYgPSBwY2lfZ2V0X2RldmljZShwY2lpZGxpc3RbaV0udmVuZG9yLAorCQkJcGNpaWRsaXN0W2ldLmRldmljZSwgMCk7CisJCWlmIChwZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID0gcGNpaWRsaXN0W2ldLmNoaXBfaW5kZXg7CisKKwkvKiBDaGVjayByZXZpc2lvbiBvZiBDTEUyNjYgQ2hpcCAqLworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkvKiBDUjRGIG9ubHkgZGVmaW5lIGluIENMRTI2Ni5DWCBjaGlwICovCisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjRGKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNEYsIFZJQUNSLCAweDU1KTsKKwkJaWYgKHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjRGKSAhPSAweDU1KQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQlDTEUyNjZfUkVWSVNJT05fQVg7CisJCWVsc2UKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPQorCQkJQ0xFMjY2X1JFVklTSU9OX0NYOworCQkvKiByZXN0b3JlIG9yaWduYWwgQ1I0RiB2YWx1ZSAqLworCQl2aWFmYl93cml0ZV9yZWcoQ1I0RiwgVklBQ1IsIHRtcCk7CisJfQorCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJdG1wID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNDMpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJTUjQzOiVYXG4iLCB0bXApOworCQlpZiAodG1wICYgMHgwMikgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQkJQ1g3MDBfUkVWSVNJT05fNzAwTTI7CisJCX0gZWxzZSBpZiAodG1wICYgMHg0MCkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQkJQ1g3MDBfUkVWSVNJT05fNzAwTTsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPQorCQkJCUNYNzAwX1JFVklTSU9OXzcwMDsKKwkJfQorCX0KKworCXBjaV9kZXZfcHV0KHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpCit7CisJdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KCk7CisKKwlpZiAoSU5URVJGQUNFX05PTkUgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJb3V0cHV0X2ludGVyZmFjZSkgeworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCXsKKwkJCQkvKiB3ZSBzaG91bGQgY2hlY2sgc3VwcG9ydCBieSBoYXJkd2FyZSBsYXlvdXQuKi8KKwkJCQlpZiAoKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09CisJCQkJICAgICBIV19MQVlPVVRfRFZJX09OTFkpCisJCQkJICAgIHx8ICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9PQorCQkJCQlIV19MQVlPVVRfTENEX0RWSSkpIHsKKwkJCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJCQkJICAgIG91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfVE1EUzsKKwkJCQl9IGVsc2UgeworCQkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQkJCQkJb3V0cHV0X2ludGVyZmFjZSA9CisJCQkJCQlJTlRFUkZBQ0VfTk9ORTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQkvKiBUTURTIG9uIFBDSUUsIHdlIHNldCBERlBMT1cgYXMgZGVmYXVsdC4gKi8KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9CisJCQkgICAgSU5URVJGQUNFX0RGUF9MT1c7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQkvKiBzZXQgRFZQMSBkZWZhdWx0IGZvciBEVkkgKi8KKwkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvCisJCQkJLm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfRFZQMTsKKwkJCX0KKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIlRNRFMgQ2hpcCA9ICVkXG4iLAorCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUpOworCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5nZXRfZHZpX3NpemVfbWV0aG9kID0KKwkJR0VUX0RWSV9TSVpFX0JZX1ZHQV9CSU9TOworCXZpYWZiX2luaXRfZHZpX3NpemUoKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKQoreworCWlmICh2aWFmYl9sY2RfcGFuZWxfaWQgPiBMQ0RfUEFORUxfSURfTUFYSU1VTSkKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQkgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TOworCWVsc2UKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQkgICAgR0VUX0xDRF9TSVpFX0JZX1VTRVJfU0VUVElORzsKKworCXZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSgpOworCXZpYWZiX2luaXRfbGNkX3NpemUoKTsKKwl2aWFmYl9pbml0X2x2ZHNfb3V0cHV0X2ludGVyZmFjZSgmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKKwkJCQkgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyk7CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CisJCXZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKCZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8yLCB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIpOworCX0KKwkvKklmIENYNzAwLHR3byBzaW5nZWwgTENELCB3ZSBuZWVkIHRvIHJlYXNzaWduCisJICAgTENEIGludGVyZmFjZSB0byBkaWZmZXJlbnQgTFZEUyBwb3J0ICovCisJaWYgKChVTklDSFJPTUVfQ1g3MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKQorCSAgICAmJiAoSFdfTEFZT1VUX0xDRDFfTENEMiA9PSB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCkpIHsKKwkJaWYgKChJTlRFR1JBVEVEX0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJCWx2ZHNfY2hpcF9uYW1lKSAmJiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCQlJTlRFUkZBQ0VfTFZEUzA7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi4KKwkJCQlvdXRwdXRfaW50ZXJmYWNlID0KKwkJCSAgICBJTlRFUkZBQ0VfTFZEUzE7CisJCX0KKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTIENoaXAgPSAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTMSBvdXRwdXRfaW50ZXJmYWNlID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTMiBvdXRwdXRfaW50ZXJmYWNlID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlKTsKK30KKwordm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSkKK3sKKwlpbnQgaTsKKwl1OCB0bXA7CisKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCS8qIGFjY2VzcyBQcmltYXJ5IERpc3BsYXkncyBMVVQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDAsIEJJVDApOworCQkvKiB0dXJuIG9mZiBMQ0sgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQiwgVklBU1IsIDB4MDAsIEJJVDcgKyBCSVQ2KTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl3cml0ZV9kYWNfcmVnKGksIHBhbExVVF90YWJsZVtpXS5yZWQsCisJCQkJICAgICAgcGFsTFVUX3RhYmxlW2ldLmdyZWVuLAorCQkJCSAgICAgIHBhbExVVF90YWJsZVtpXS5ibHVlKTsKKwkJfQorCQkvKiB0dXJuIG9uIExDSyAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMHhDMCwgQklUNyArIEJJVDYpOworCX0gZWxzZSB7CisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjZBKTsKKwkJLyogYWNjZXNzIFNlY29uZGFyeSBEaXNwbGF5J3MgTFVUICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDQwLCBCSVQ2KTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDEsIEJJVDApOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXdyaXRlX2RhY19yZWcoaSwgcGFsTFVUX3RhYmxlW2ldLnJlZCwKKwkJCQkgICAgICBwYWxMVVRfdGFibGVbaV0uZ3JlZW4sCisJCQkJICAgICAgcGFsTFVUX3RhYmxlW2ldLmJsdWUpOworCQl9CisJCS8qIHNldCBJR0ExIERBQyBmb3IgZGVmYXVsdCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMCwgQklUMCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjZBLCBWSUFDUiwgdG1wKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb2ZmKHZvaWQpCit7CisJLyogdHVybiBvZmYgQ1JUIHNjcmVlbiAoSUdBMSkgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjAxLCBWSUFTUiwgMHgyMCwgQklUNSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb24odm9pZCkKK3sKKwkvKiB0dXJuIG9uIENSVCBzY3JlZW4gKElHQTEpICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IwMSwgVklBU1IsIDB4MDAsIEJJVDUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzcGxheV9jaGFubmVsKHZvaWQpCit7CisJLypJZiB2aWFmYl9MQ0QyX09OLCBvbiBjeDcwMCwgaW50ZXJuYWwgbHZkcydzIGluZm9ybWF0aW9uCisJaXMga2VlcGVkIG9uIGx2ZHNfc2V0dGluZ19pbmZvMiAqLworCWlmICh2aWFmYl9MQ0QyX09OICYmCisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQkvKiBGb3IgZHVhbCBjaGFubmVsIExDRDogKi8KKwkJLyogU2V0IHRvIER1YWwgTFZEUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0RWSV9PTikgeworCQkvKiBGb3IgTENEK0RGUDogKi8KKwkJLyogU2V0IHRvIExWRFMxICsgVE1EUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgxMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfRFZJX09OKSB7CisJCS8qIFNldCB0byBzaW5nbGUgVE1EUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgzMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfTENEX09OKSB7CisJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQkJLyogRm9yIGR1YWwgY2hhbm5lbCBMQ0Q6ICovCisJCQkvKiBTZXQgdG8gRHVhbCBMVkRTIGNoYW5uZWwuICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCQl9IGVsc2UgeworCQkJLyogU2V0IHRvIExWRFMwICsgTFZEUzEgY2hhbm5lbC4gKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSk7CisJCX0KKwl9Cit9CisKK2ludCB2aWFmYl9zZXRtb2RlKGludCB2bW9kZV9pbmRleCwgaW50IGhvcl9yZXMsIGludCB2ZXJfcmVzLCBpbnQgdmlkZW9fYnBwLAorCWludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSkKK3sKKwlpbnQgaSwgajsKKwlpbnQgcG9ydDsKKwl1OCB2YWx1ZSwgaW5kZXgsIG1hc2s7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90Ymw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsMSA9IE5VTEw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nMSA9IE5VTEw7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJTZXQgTW9kZSEhXG4iKTsKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSAgInZtb2RlX2luZGV4PSVkIGhvcl9yZXM9JWQgdmVyX3Jlcz0lZCB2aWRlb19icHA9JWRcbiIsCisJCSAgdm1vZGVfaW5kZXgsIGhvcl9yZXMsIHZlcl9yZXMsIHZpZGVvX2JwcCk7CisKKwlkZXZpY2Vfc2NyZWVuX29mZigpOworCXZtb2RlX3RibCA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4KV07CisJY3J0X3RpbWluZyA9IHZtb2RlX3RibC0+Y3J0YzsKKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJdm1vZGVfdGJsMSA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4MSldOworCQljcnRfdGltaW5nMSA9IHZtb2RlX3RibDEtPmNydGM7CisJfQorCisJaW5iKFZJQVN0YXR1cyk7CisJb3V0YigweDAwLCBWSUFBUik7CisKKwkvKiBXcml0ZSBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQl2aWFmYl93cml0ZV9yZWd4KENMRTI2Nl9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQl2aWFmYl93cml0ZV9yZWd4KEtNNDAwX01vZGVYcmVncywgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwkJdmlhZmJfd3JpdGVfcmVneChDTjQwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFmYl93cml0ZV9yZWd4KENONzAwX01vZGVYcmVncywgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCXZpYWZiX3dyaXRlX3JlZ3goQ1g3MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfQ1g3MDBfTW9kZVhyZWdzKTsKKworCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQl2aWFmYl93cml0ZV9yZWd4KFZYODAwX01vZGVYcmVncywgTlVNX1RPVEFMX1ZYODAwX01vZGVYcmVncyk7CisKKwkJYnJlYWs7CisJfQorCisJZGV2aWNlX29mZigpOworCisJLyogRmlsbCBWUElUIFBhcmFtZXRlcnMgKi8KKwkvKiBXcml0ZSBNaXNjIFJlZ2lzdGVyICovCisJb3V0YihWUElULk1pc2MsIFZJQVdNaXNjKTsKKworCS8qIFdyaXRlIFNlcXVlbmNlciAqLworCWZvciAoaSA9IDE7IGkgPD0gU3RkU1I7IGkrKykgeworCQlvdXRiKGksIFZJQVNSKTsKKwkJb3V0YihWUElULlNSW2kgLSAxXSwgVklBU1IgKyAxKTsKKwl9CisKKwl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCisJLyogV3JpdGUgQ1JUQyAqLworCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfaW5kZXgsIHZpZGVvX2JwcCAvIDgsIElHQTEpOworCisJLyogV3JpdGUgR3JhcGhpYyBDb250cm9sbGVyICovCisJZm9yIChpID0gMDsgaSA8IFN0ZEdSOyBpKyspIHsKKwkJb3V0YihpLCBWSUFHUik7CisJCW91dGIoVlBJVC5HUltpXSwgVklBR1IgKyAxKTsKKwl9CisKKwkvKiBXcml0ZSBBdHRyaWJ1dGUgQ29udHJvbGxlciAqLworCWZvciAoaSA9IDA7IGkgPCBTdGRBUjsgaSsrKSB7CisJCWluYihWSUFTdGF0dXMpOworCQlvdXRiKGksIFZJQUFSKTsKKwkJb3V0YihWUElULkFSW2ldLCBWSUFBUik7CisJfQorCisJaW5iKFZJQVN0YXR1cyk7CisJb3V0YigweDIwLCBWSUFBUik7CisKKwkvKiBVcGRhdGUgUGF0Y2ggUmVnaXN0ZXIgKi8KKworCWlmICgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpCisJICAgIHx8ICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s0MDApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfUEFUQ0hfTU9ERTsgaSsrKSB7CisJCQlpZiAocmVzX3BhdGNoX3RhYmxlW2ldLm1vZGVfaW5kZXggPT0gdm1vZGVfaW5kZXgpIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCSAgICAgaiA8IHJlc19wYXRjaF90YWJsZVtpXS50YWJsZV9sZW5ndGg7IGorKykgeworCQkJCQlpbmRleCA9CisJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICBpb19yZWdfdGFibGVbal0uaW5kZXg7CisJCQkJCXBvcnQgPQorCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnBvcnQ7CisJCQkJCXZhbHVlID0KKwkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS52YWx1ZTsKKwkJCQkJbWFzayA9CisJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICBpb19yZWdfdGFibGVbal0ubWFzazsKKwkJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soaW5kZXgsIHBvcnQsIHZhbHVlLAorCQkJCQkJICAgICAgIG1hc2spOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKKwkJICAgIHx8ICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJICAgIFVOSUNIUk9NRV9LNDAwKSkgeworCQkJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QQVRDSF9NT0RFOyBpKyspIHsKKwkJCQlpZiAocmVzX3BhdGNoX3RhYmxlW2ldLm1vZGVfaW5kZXggPT0KKwkJCQkgICAgdm1vZGVfaW5kZXgxKSB7CisJCQkJCWZvciAoaiA9IDA7CisJCQkJCSAgICAgaiA8CisJCQkJCSAgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkgICAgIHRhYmxlX2xlbmd0aDsgaisrKSB7CisJCQkJCQlpbmRleCA9CisJCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5pbmRleDsKKwkJCQkJCXBvcnQgPQorCQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJCSAgICBpb19yZWdfdGFibGVbal0ucG9ydDsKKwkJCQkJCXZhbHVlID0KKwkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnZhbHVlOworCQkJCQkJbWFzayA9CisJCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5tYXNrOworCQkJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soaW5kZXgsCisJCQkJCQkJcG9ydCwgdmFsdWUsIG1hc2spOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogVXBkYXRlIFJlZnJlc2ggUmF0ZSBTZXR0aW5nICovCisKKwkvKiBDbGVhciBPbiBTY3JlZW4gKi8KKworCS8qIENSVCBzZXQgbW9kZSAqLworCWlmICh2aWFmYl9DUlRfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09CisJCQlJR0EyKSkgeworCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nMSwgdm1vZGVfaW5kZXgxLAorCQkJCXZpZGVvX2JwcDEgLyA4LAorCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfaW5kZXgsCisJCQkJdmlkZW9fYnBwIC8gOCwKKwkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCX0KKworCQlzZXRfY3J0X291dHB1dF9wYXRoKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKworCQkvKiBQYXRjaCBpZiBzZXRfaHJlcyBpcyBub3QgOCBhbGlnbm1lbnQgKDEzNjYpIHRvIHZpYWZiX3NldG1vZGUKKwkJdG8gOCBhbGlnbm1lbnQgKDEzNjgpLHRoZXJlIGlzIHNldmVyYWwgcGl4ZWxzICgyIHBpeGVscykKKwkJb24gcmlnaHQgc2lkZSBvZiBzY3JlZW4uICovCisJCWlmIChob3JfcmVzICUgOCkgeworCQkJdmlhZmJfdW5sb2NrX2NydCgpOworCQkJdmlhZmJfd3JpdGVfcmVnKENSMDIsIFZJQUNSLAorCQkJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjAyKSAtIDEpOworCQkJdmlhZmJfbG9ja19jcnQoKTsKKwkJfQorCX0KKworCWlmICh2aWFmYl9EVklfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikpIHsKKwkJCXZpYWZiX2R2aV9zZXRfbW9kZSh2aWFmYl9nZXRfbW9kZV9pbmRleAorCQkJCSAgICAgKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSwKKwkJCQkgICAgICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+CisJCQkJICAgICAgdl9hY3RpdmUsIDEpLAorCQkJCSAgICAgdmlkZW9fYnBwMSwgdmlhcGFyaW5mby0+CisJCQkJICAgICB0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQl9IGVsc2UgeworCQkJdmlhZmJfZHZpX3NldF9tb2RlKHZpYWZiX2dldF9tb2RlX2luZGV4CisJCQkJICAgICAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlLAorCQkJCSAgICAgIHZpYXBhcmluZm8tPgorCQkJCSAgICAgIHRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSwgMCksCisJCQkJICAgICB2aWRlb19icHAsIHZpYXBhcmluZm8tPgorCQkJCSAgICAgdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJfQorCX0KKworCWlmICh2aWFmYl9MQ0RfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPSB2aWRlb19icHAxOworCQkJdmlhZmJfbGNkX3NldF9tb2RlKGNydF90aW1pbmcxLCB2aWFwYXJpbmZvLT4KKwkJCQlsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvKTsKKwkJfSBlbHNlIHsKKwkJCS8qIElHQTEgZG9lc24ndCBoYXZlIExDRCBzY2FsaW5nLCBzbyBzZXQgaXQgY2VudGVyLiAqLworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCX0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPSB2aWRlb19icHA7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZywgdmlhcGFyaW5mby0+CisJCQkJbHZkc19zZXR0aW5nX2luZm8sCisJCQkJICAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJCX0KKwl9CisJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTIpKSB7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmJwcCA9IHZpZGVvX2JwcDE7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZzEsIHZpYXBhcmluZm8tPgorCQkJCWx2ZHNfc2V0dGluZ19pbmZvMiwKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMik7CisJCX0gZWxzZSB7CisJCQkvKiBJR0ExIGRvZXNuJ3QgaGF2ZSBMQ0Qgc2NhbGluZywgc28gc2V0IGl0IGNlbnRlci4gKi8KKwkJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCX0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+YnBwID0gdmlkZW9fYnBwOworCQkJdmlhZmJfbGNkX3NldF9tb2RlKGNydF90aW1pbmcsIHZpYXBhcmluZm8tPgorCQkJCWx2ZHNfc2V0dGluZ19pbmZvMiwKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMik7CisJCX0KKwl9CisKKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApCisJICAgICYmICh2aWFmYl9MQ0RfT04gfHwgdmlhZmJfRFZJX09OKSkKKwkJc2V0X2Rpc3BsYXlfY2hhbm5lbCgpOworCisJLyogSWYgc2V0IG1vZGUgbm9ybWFsbHksIHNhdmUgcmVzb2x1dGlvbiBpbmZvcm1hdGlvbiBmb3IgaG90LXBsdWcgLiAqLworCWlmICghdmlhZmJfaG90cGx1ZykgeworCQl2aWFmYl9ob3RwbHVnX1hyZXMgPSBob3JfcmVzOworCQl2aWFmYl9ob3RwbHVnX1lyZXMgPSB2ZXJfcmVzOworCQl2aWFmYl9ob3RwbHVnX2JwcCA9IHZpZGVvX2JwcDsKKwkJdmlhZmJfaG90cGx1Z19yZWZyZXNoID0gdmlhZmJfcmVmcmVzaDsKKworCQlpZiAodmlhZmJfRFZJX09OKQorCQkJdmlhZmJfRGV2aWNlU3RhdHVzID0gRFZJX0RldmljZTsKKwkJZWxzZQorCQkJdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKKwl9CisJZGV2aWNlX29uKCk7CisKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCisJZGV2aWNlX3NjcmVlbl9vbigpOworCXJldHVybiAxOworfQorCitpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSDsgaSsrKSB7CisJCWlmICgoaHJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLmhyZXMpCisJCSAgICAmJiAodnJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZyZXMpCisJCSAgICAmJiAodm1vZGVfcmVmcmVzaCA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZtb2RlX3JlZnJlc2gpKQorCQkJcmV0dXJuIHJlc19tYXBfcmVmcmVzaF90YmxbaV0ucGl4Y2xvY2s7CisJfQorCXJldHVybiBSRVNfNjQwWDQ4MF82MEhaX1BJWENMT0NLOworCit9CisKK2ludCB2aWFmYl9nZXRfcmVmcmVzaChpbnQgaHJlcywgaW50IHZyZXMsIHUzMiBsb25nX3JlZnJlc2gpCit7CisjZGVmaW5lIFJFRlJFU0hfVE9MRVJBTkNFIDMKKwlpbnQgaSwgbmVhcmVzdCA9IC0xLCBkaWZmID0gUkVGUkVTSF9UT0xFUkFOQ0U7CisJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9SRVNfTUFQX1JFRlJFU0g7IGkrKykgeworCQlpZiAoKGhyZXMgPT0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS5ocmVzKQorCQkgICAgJiYgKHZyZXMgPT0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS52cmVzKQorCQkgICAgJiYgKGRpZmYgPiAoYWJzKGxvbmdfcmVmcmVzaCAtCisJCSAgICByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZtb2RlX3JlZnJlc2gpKSkpIHsKKwkJCWRpZmYgPSBhYnMobG9uZ19yZWZyZXNoIC0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS4KKwkJCQl2bW9kZV9yZWZyZXNoKTsKKwkJCW5lYXJlc3QgPSBpOworCQl9CisJfQorI3VuZGVmIFJFRlJFU0hfVE9MRVJBTkNFCisJaWYgKG5lYXJlc3QgPiAwKQorCQlyZXR1cm4gcmVzX21hcF9yZWZyZXNoX3RibFtuZWFyZXN0XS52bW9kZV9yZWZyZXNoOworCXJldHVybiA2MDsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlX29mZih2b2lkKQoreworCXZpYWZiX2NydF9kaXNhYmxlKCk7CisJdmlhZmJfZHZpX2Rpc2FibGUoKTsKKwl2aWFmYl9sY2RfZGlzYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2Vfb24odm9pZCkKK3sKKwlpZiAodmlhZmJfQ1JUX09OID09IDEpCisJCXZpYWZiX2NydF9lbmFibGUoKTsKKwlpZiAodmlhZmJfRFZJX09OID09IDEpCisJCXZpYWZiX2R2aV9lbmFibGUoKTsKKwlpZiAodmlhZmJfTENEX09OID09IDEpCisJCXZpYWZiX2xjZF9lbmFibGUoKTsKK30KKwordm9pZCB2aWFmYl9jcnRfZGlzYWJsZSh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCBCSVQ1ICsgQklUNCwgQklUNSArIEJJVDQpOworfQorCit2b2lkIHZpYWZiX2NydF9lbmFibGUodm9pZCkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgwLCBCSVQ1ICsgQklUNCk7Cit9CisKK3ZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCisJdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiB2ZW5kb3IsIGRldmljZTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKQorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlwY2lpZGxpc3RbaV0uY2hpcF9pbmRleCkKKwkJCWJyZWFrOworCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmVuZG9yID0gcGNpaWRsaXN0W2ldLnZlbmRvcjsKKwlkZXZpY2UgPSBwY2lpZGxpc3RbaV0uZGV2aWNlOworCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBOVUxMKTsKKworCWlmICghcGRldikgeworCQkqbW1pb19iYXNlID0gMDsKKwkJKm1taW9fbGVuID0gMDsKKwkJcmV0dXJuIDsKKwl9CisKKwkqbW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCSptbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCkKK3sKKwkvKiB0byBlbmFibGUgc2Vjb25kIGRpc3BsYXkgY2hhbm5lbC4gKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwMCwgQklUNik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDcsIEJJVDcpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCBCSVQ2LCBCSVQ2KTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKHZvaWQpCit7CisJLyogdG8gZGlzYWJsZSBzZWNvbmQgZGlzcGxheSBjaGFubmVsLiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCBCSVQ2KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwMCwgQklUNyk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDYsIEJJVDYpOworfQorCit2b2lkIHZpYWZiX2dldF9mYl9pbmZvKHVuc2lnbmVkIGludCAqZmJfYmFzZSwgdW5zaWduZWQgaW50ICpmYl9sZW4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiB2ZW5kb3IsIGRldmljZTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKQorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlwY2lpZGxpc3RbaV0uY2hpcF9pbmRleCkKKwkJCWJyZWFrOworCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmVuZG9yID0gcGNpaWRsaXN0W2ldLnZlbmRvcjsKKwlkZXZpY2UgPSBwY2lpZGxpc3RbaV0uZGV2aWNlOworCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBOVUxMKTsKKworCWlmICghcGRldikgeworCQkqZmJfYmFzZSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjMwKSA8PCAyNDsKKwkJKmZiX2xlbiA9IHZpYWZiX2dldF9tZW1zaXplKCk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBGQiBpbmZvIGZyb20gU1IzMCFcbiIpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9iYXNlID0gJTA4eFxuIiwgKmZiX2Jhc2UpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9sZW4gPSAlMDh4XG4iLCAqZmJfbGVuKTsKKwkJcmV0dXJuIDsKKwl9CisKKwkqZmJfYmFzZSA9ICh1bnNpZ25lZCBpbnQpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCSpmYl9sZW4gPSBnZXRfZmJfc2l6ZV9mcm9tX3BjaSgpOworCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBGQiBpbmZvIGZyb20gUENJIHN5c3RlbSFcbiIpOworCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2Jhc2UgPSAlMDh4XG4iLCAqZmJfYmFzZSk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfbGVuID0gJTA4eFxuIiwgKmZiX2xlbik7CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30KKworc3RhdGljIGludCBnZXRfZmJfc2l6ZV9mcm9tX3BjaSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY29uZmlnaWQsIGRldmljZWlkLCBGQlNpemUgPSAwOworCWludCBWaWRlb01lbVNpemU7CisJaW50IERldmljZUZvdW5kID0gZmFsc2U7CisKKwlmb3IgKGNvbmZpZ2lkID0gMHg4MDAwMDAwMDsgY29uZmlnaWQgPCAweDgwMDEwODAwOyBjb25maWdpZCArPSAweDEwMCkgeworCQlvdXRsKGNvbmZpZ2lkLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCWRldmljZWlkID0gKGlubCgodW5zaWduZWQgbG9uZykweENGQykgPj4gMTYpICYgMHhmZmZmOworCisJCXN3aXRjaCAoZGV2aWNlaWQpIHsKKwkJY2FzZSBDTEUyNjY6CisJCWNhc2UgS000MDA6CisJCQlvdXRsKGNvbmZpZ2lkICsgMHhFMCwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOworCQkJRkJTaXplID0gaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKTsKKwkJCURldmljZUZvdW5kID0gdHJ1ZTsJLyogRm91bmQgZGV2aWNlIGlkICovCisJCQlicmVhazsKKworCQljYXNlIENONDAwX0ZVTkNUSU9OMzoKKwkJY2FzZSBDTjcwMF9GVU5DVElPTjM6CisJCWNhc2UgQ1g3MDBfRlVOQ1RJT04zOgorCQljYXNlIEtNODAwX0ZVTkNUSU9OMzoKKwkJY2FzZSBLTTg5MF9GVU5DVElPTjM6CisJCWNhc2UgUDRNODkwX0ZVTkNUSU9OMzoKKwkJY2FzZSBQNE05MDBfRlVOQ1RJT04zOgorCQljYXNlIFZYODAwX0ZVTkNUSU9OMzoKKwkJCS8qY2FzZSBDTjc1MF9GVU5DVElPTjM6ICovCisJCQlvdXRsKGNvbmZpZ2lkICsgMHhBMCwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOworCQkJRkJTaXplID0gaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKTsKKwkJCURldmljZUZvdW5kID0gdHJ1ZTsJLyogRm91bmQgZGV2aWNlIGlkICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoRGV2aWNlRm91bmQpCisJCQlicmVhazsKKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJEZXZpY2UgSUQgPSAlbHhcbiIsIGRldmljZWlkKTsKKworCUZCU2l6ZSA9IEZCU2l6ZSAmIDB4MDAwMDcwMDA7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiRkIgU2l6ZSA9ICV4XG4iLCBGQlNpemUpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA8IFVOSUNIUk9NRV9DWDcwMCkgeworCQlzd2l0Y2ggKEZCU2l6ZSkgeworCQljYXNlIDB4MDAwMDQwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTYgPDwgMjApOwkvKjE2TSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDA1MDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNjAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICg2NCA8PCAyMCk7CS8qNjRNICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChGQlNpemUpIHsKKwkJY2FzZSAweDAwMDAxMDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDggPDwgMjApOwkvKjhNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDIwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTYgPDwgMjApOwkvKjE2TSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDAzMDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNDAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICg2NCA8PCAyMCk7CS8qNjRNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDUwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTI4IDw8IDIwKTsJLyoxMjhNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDYwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMjU2IDw8IDIwKTsJLyoyNTZNICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIFZpZGVvTWVtU2l6ZTsKK30KKwordm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKKwkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKQoreworCXN3aXRjaCAob3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0RWUDA6CisJCXsKKwkJCS8qIERWUDAgQ2xvY2sgUG9sYXJpdHkgYW5kIEFkanVzdDogKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+RFZQMCwgMHgwRik7CisKKwkJCS8qIERWUDAgQ2xvY2sgYW5kIERhdGEgUGFkcyBEcml2aW5nOiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAwQ2xvY2tEcmlfUywgQklUMik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBDbG9ja0RyaV9TMSwKKwkJCQkgICAgICAgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBEYXRhRHJpX1MsIEJJVDEpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAwRGF0YURyaV9TMSwgQklUNSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJeworCQkJLyogRFZQMSBDbG9jayBQb2xhcml0eSBhbmQgQWRqdXN0OiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAxLCAweDBGKTsKKworCQkJLyogRFZQMSBDbG9jayBhbmQgRGF0YSBQYWRzIERyaXZpbmc6ICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDFEcml2aW5nLCAweDBGKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfSElHSDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5ERlBIaWdoLCAweDBGKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUExvdywgMHgwRik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUEhpZ2gsIDB4MEYpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5ERlBMb3csIDB4MEYpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWlmIChpbmZvLT52YXIueHJlcyAhPSBpbmZvLT52YXIueHJlc192aXJ0dWFsKSB7CisJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbmZvLT52YXIueHJlc192aXJ0dWFsLAorCQkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzLCBJR0ExKTsKKworCQlpZiAodmlhZmJfU0FNTV9PTikgeworCQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMsCisJCQkJdmlhZmJfYnBwMSA+PiAzLAorCQkJCQlJR0EyKTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbmZvLT52YXIueHJlc192aXJ0dWFsLAorCQkJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMywgSUdBMik7CisJCX0KKworCX0KK30KKworLypBY2NvcmRpbmcgdmFyJ3MgeHJlcywgeXJlcyBmaWxsIHZhcidzIG90aGVyIHRpbWluZyBpbmZvcm1hdGlvbiovCit2b2lkIHZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgcmVmcmVzaCwKKwkJCSAgaW50IG1vZGVfaW5kZXgpCit7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOworCXN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RpbWluZyA9IE5VTEw7CisJc3RydWN0IGRpc3BsYXlfdGltaW5nIGNydF9yZWc7CisJaW50IGkgPSAwLCBpbmRleCA9IDA7CisJdm1vZGVfdGJsID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcobW9kZV9pbmRleCldOworCWNydF90aW1pbmcgPSB2bW9kZV90YmwtPmNydGM7CisJZm9yIChpID0gMDsgaSA8IHZtb2RlX3RibC0+bW9kZV9hcnJheTsgaSsrKSB7CisJCWluZGV4ID0gaTsKKwkJaWYgKGNydF90aW1pbmdbaV0ucmVmcmVzaF9yYXRlID09IHJlZnJlc2gpCisJCQlicmVhazsKKwl9CisKKwljcnRfcmVnID0gY3J0X3RpbWluZ1tpbmRleF0uY3J0YzsKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDY7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDY7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhci0+cmVkLm9mZnNldCA9IDExOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQlicmVhazsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbmV2ZXIgaGFwcGVkLCBwdXQgaGVyZSB0byBrZWVwIGNvbnNpc3RlbnQgKi8KKwkJYnJlYWs7CisJfQorCisJdmFyLT5waXhjbG9jayA9IHZpYWZiX2dldF9waXhjbG9jayh2YXItPnhyZXMsIHZhci0+eXJlcywgcmVmcmVzaCk7CisJdmFyLT5sZWZ0X21hcmdpbiA9CisJICAgIGNydF9yZWcuaG9yX3RvdGFsIC0gKGNydF9yZWcuaG9yX3N5bmNfc3RhcnQgKyBjcnRfcmVnLmhvcl9zeW5jX2VuZCk7CisJdmFyLT5yaWdodF9tYXJnaW4gPSBjcnRfcmVnLmhvcl9zeW5jX3N0YXJ0IC0gY3J0X3JlZy5ob3JfYWRkcjsKKwl2YXItPmhzeW5jX2xlbiA9IGNydF9yZWcuaG9yX3N5bmNfZW5kOworCXZhci0+dXBwZXJfbWFyZ2luID0KKwkgICAgY3J0X3JlZy52ZXJfdG90YWwgLSAoY3J0X3JlZy52ZXJfc3luY19zdGFydCArIGNydF9yZWcudmVyX3N5bmNfZW5kKTsKKwl2YXItPmxvd2VyX21hcmdpbiA9IGNydF9yZWcudmVyX3N5bmNfc3RhcnQgLSBjcnRfcmVnLnZlcl9hZGRyOworCXZhci0+dnN5bmNfbGVuID0gY3J0X3JlZy52ZXJfc3luY19lbmQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYzOGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtMCwwICsxLDkzMyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0hXX0hfXworI2RlZmluZSBfX0hXX0hfXworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGVmaW5pdGlvbiBJR0ExIERlc2lnbiBNZXRob2Qgb2YgQ1JUQyBSZWdpc3RlcnMgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUdBMV9IT1JfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCgoeCkvOCktNSkKKyNkZWZpbmUgSUdBMV9IT1JfQUREUl9GT1JNVUxBKHgpICAgICAgICAgICAgKCgoeCkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCgoeCkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoKHgreSkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfU1lOQ19TVEFSVF9GT1JNVUxBKHgpICAgICAgKCh4KS84KQorI2RlZmluZSBJR0ExX0hPUl9TWU5DX0VORF9GT1JNVUxBKHgsIHkpICAgICAgKCh4K3kpLzgpCisKKyNkZWZpbmUgSUdBMV9WRVJfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCh4KS0yKQorI2RlZmluZSBJR0ExX1ZFUl9BRERSX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTFfVkVSX0JMQU5LX1NUQVJUX0ZPUk1VTEEoeCkgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMV9WRVJfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoeCt5KS0xKQorI2RlZmluZSBJR0ExX1ZFUl9TWU5DX1NUQVJUX0ZPUk1VTEEoeCkgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTFfVkVSX1NZTkNfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICAoKHgreSktMSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5pdGlvbiBJR0EyIERlc2lnbiBNZXRob2Qgb2YgQ1JUQyBSZWdpc3RlcnMgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUdBMl9IT1JfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX0hPUl9BRERSX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfSE9SX0JMQU5LX1NUQVJUX0ZPUk1VTEEoeCkgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoeCt5KS0xKQorI2RlZmluZSBJR0EyX0hPUl9TWU5DX1NUQVJUX0ZPUk1VTEEoeCkgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfSE9SX1NZTkNfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICAoKHgreSktMSkKKworI2RlZmluZSBJR0EyX1ZFUl9UT1RBTF9GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0FERFJfRk9STVVMQSh4KSAgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19FTkRfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfRk9STVVMQSh4KSAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfRk9STVVMQSh4LCB5KSAgICAgICgoeCt5KS0xKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmluaXRpb24gSUdBMiBEZXNpZ24gTWV0aG9kIG9mIENSVEMgU2hhZG93IFJlZ2lzdGVycyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElHQTJfSE9SX1RPVEFMX1NIQURPV19GT1JNVUxBKHgpICAgICAgICAgICAoKHgvOCktNSkKKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBKHgsIHkpICAgICAoKCh4K3kpLzgpLTEpCisjZGVmaW5lIElHQTJfVkVSX1RPVEFMX1NIQURPV19GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTIpCisjZGVmaW5lIElHQTJfVkVSX0FERFJfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX1NUQVJUX1NIQURPV19GT1JNVUxBKHgpICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAoeCkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfU0hBRE9XX0ZPUk1VTEEoeCwgeSkgICAgICAoeCt5KQorCisvKiBEZWZpbmUgUmVnaXN0ZXIgTnVtYmVyIGZvciBJR0ExIENSVEMgVGltaW5nICovCisKKy8qIGxvY2F0aW9uOiB7Q1IwMCwwLDd9LHtDUjM2LDMsM30gKi8KKyNkZWZpbmUgSUdBMV9IT1JfVE9UQUxfUkVHX05VTQkJMgorLyogbG9jYXRpb246IHtDUjAxLDAsN30gKi8KKyNkZWZpbmUgSUdBMV9IT1JfQUREUl9SRUdfTlVNCQkxCisvKiBsb2NhdGlvbjoge0NSMDIsMCw3fSAqLworI2RlZmluZSBJR0ExX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDEKKy8qIGxvY2F0aW9uOiB7Q1IwMywwLDR9LHtDUjA1LDcsN30se0NSMzMsNSw1fSAqLworI2RlZmluZSBJR0ExX0hPUl9CTEFOS19FTkRfUkVHX05VTQkzCisvKiBsb2NhdGlvbjoge0NSMDQsMCw3fSx7Q1IzMyw0LDR9ICovCisjZGVmaW5lIElHQTFfSE9SX1NZTkNfU1RBUlRfUkVHX05VTQkyCisvKiBsb2NhdGlvbjoge0NSMDUsMCw0fSAqLworI2RlZmluZSBJR0ExX0hPUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKKy8qIGxvY2F0aW9uOiB7Q1IwNiwwLDd9LHtDUjA3LDAsMH0se0NSMDcsNSw1fSx7Q1IzNSwwLDB9ICovCisjZGVmaW5lIElHQTFfVkVSX1RPVEFMX1JFR19OVU0gICAgICAgICAgNAorLyogbG9jYXRpb246IHtDUjEyLDAsN30se0NSMDcsMSwxfSx7Q1IwNyw2LDZ9LHtDUjM1LDIsMn0gKi8KKyNkZWZpbmUgSUdBMV9WRVJfQUREUl9SRUdfTlVNICAgICAgICAgICA0CisvKiBsb2NhdGlvbjoge0NSMTUsMCw3fSx7Q1IwNywzLDN9LHtDUjA5LDUsNX0se0NSMzUsMywzfSAqLworI2RlZmluZSBJR0ExX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDQKKy8qIGxvY2F0aW9uOiB7Q1IxNiwwLDd9ICovCisjZGVmaW5lIElHQTFfVkVSX0JMQU5LX0VORF9SRUdfTlVNICAgICAgMQorLyogbG9jYXRpb246IHtDUjEwLDAsN30se0NSMDcsMiwyfSx7Q1IwNyw3LDd9LHtDUjM1LDEsMX0gKi8KKyNkZWZpbmUgSUdBMV9WRVJfU1lOQ19TVEFSVF9SRUdfTlVNICAgICA0CisvKiBsb2NhdGlvbjoge0NSMTEsMCwzfSAqLworI2RlZmluZSBJR0ExX1ZFUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKKworLyogRGVmaW5lIFJlZ2lzdGVyIE51bWJlciBmb3IgSUdBMiBTaGFkb3cgQ1JUQyBUaW1pbmcgKi8KKworLyogbG9jYXRpb246IHtDUjZELDAsN30se0NSNzEsMywzfSAqLworI2RlZmluZSBJR0EyX1NIQURPV19IT1JfVE9UQUxfUkVHX05VTSAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNkUsMCw3fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19IT1JfQkxBTktfRU5EX1JFR19OVU0gICAxCisvKiBsb2NhdGlvbjoge0NSNkYsMCw3fSx7Q1I3MSwwLDJ9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX1ZFUl9UT1RBTF9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I3MCwwLDd9LHtDUjcxLDQsNn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX0FERFJfUkVHX05VTSAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjcyLDAsN30se0NSNzQsNCw2fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19WRVJfQkxBTktfU1RBUlRfUkVHX05VTSAyCisvKiBsb2NhdGlvbjoge0NSNzMsMCw3fSx7Q1I3NCwwLDJ9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX1ZFUl9CTEFOS19FTkRfUkVHX05VTSAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I3NSwwLDd9LHtDUjc2LDQsNn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSAgMgorLyogbG9jYXRpb246IHtDUjc2LDAsM30gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX1NZTkNfRU5EX1JFR19OVU0gICAgMQorCisvKiBEZWZpbmUgUmVnaXN0ZXIgTnVtYmVyIGZvciBJR0EyIENSVEMgVGltaW5nICovCisKKy8qIGxvY2F0aW9uOiB7Q1I1MCwwLDd9LHtDUjU1LDAsM30gKi8KKyNkZWZpbmUgSUdBMl9IT1JfVE9UQUxfUkVHX05VTSAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNTEsMCw3fSx7Q1I1NSw0LDZ9ICovCisjZGVmaW5lIElHQTJfSE9SX0FERFJfUkVHX05VTSAgICAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjUyLDAsN30se0NSNTQsMCwyfSAqLworI2RlZmluZSBJR0EyX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDIKKy8qIGxvY2F0aW9uOiBDTEUyNjY6IHtDUjUzLDAsN30se0NSNTQsMyw1fSA9PiBDTEUyNjYncyBDUjVEWzZdCitpcyByZXNlcnZlZCwgc28gaXQgbWF5IGhhdmUgcHJvYmxlbSB0byBzZXQgMTYwMHgxMjAwIG9uIElHQTIuICovCisvKiAgICAgICAgIAlPdGhlcnM6IHtDUjUzLDAsN30se0NSNTQsMyw1fSx7Q1I1RCw2LDZ9ICovCisjZGVmaW5lIElHQTJfSE9SX0JMQU5LX0VORF9SRUdfTlVNICAgICAgMworLyogbG9jYXRpb246IHtDUjU2LDAsN30se0NSNTQsNiw3fSx7Q1I1Qyw3LDd9ICovCisvKiBWVDMzMTQgYW5kIExhdGVyOiB7Q1I1NiwwLDd9LHtDUjU0LDYsN30se0NSNUMsNyw3fSwge0NSNUQsNyw3fSAqLworI2RlZmluZSBJR0EyX0hPUl9TWU5DX1NUQVJUX1JFR19OVU0gICAgIDQKKworLyogbG9jYXRpb246IHtDUjU3LDAsN30se0NSNUMsNiw2fSAqLworI2RlZmluZSBJR0EyX0hPUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1OCwwLDd9LHtDUjVELDAsMn0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfVE9UQUxfUkVHX05VTSAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNTksMCw3fSx7Q1I1RCwzLDV9ICovCisjZGVmaW5lIElHQTJfVkVSX0FERFJfUkVHX05VTSAgICAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjVBLDAsN30se0NSNUMsMCwyfSAqLworI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1RSwwLDd9LHtDUjVDLDMsNX0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfRU5EX1JFR19OVU0gICAgICAyCisvKiBsb2NhdGlvbjoge0NSNUUsMCw3fSx7Q1I1Riw1LDd9ICovCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSAgICAgMgorLyogbG9jYXRpb246IHtDUjVGLDAsNH0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTSAgICAgICAxCisKKy8qIERlZmluZSBPZmZzZXQgYW5kIEZldGNoIENvdW50IFJlZ2lzdGVyKi8KKworLyogbG9jYXRpb246IHtDUjEzLDAsN30se0NSMzUsNSw3fSAqLworI2RlZmluZSBJR0ExX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKKy8qIDggYnl0ZXMgYWxpZ25tZW50LiAqLworI2RlZmluZSBJR0ExX09GRlNFUl9BTElHTl9CWVRFICAgICAgICAgIDgKKy8qIHg6IEggcmVzb2x1dGlvbiwgeTogY29sb3IgZGVwdGggKi8KKyNkZWZpbmUgSUdBMV9PRkZTRVRfRk9STVVMQSh4LCB5KSAgICAgICAgKCh4KnkpL0lHQTFfT0ZGU0VSX0FMSUdOX0JZVEUpCisvKiBsb2NhdGlvbjoge1NSMUMsMCw3fSx7U1IxRCwwLDF9ICovCisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTSAgICAgICAgMgorLyogMTYgYnl0ZXMgYWxpZ25tZW50LiAqLworI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUgICAgIDE2CisvKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUgICAgNAorI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoeCwgeSkgICBcCisJKCgoeCp5KS9JR0ExX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUpICsgSUdBMV9GRVRDSF9DT1VOVF9QQVRDSF9WQUxVRSkKKworLyogbG9jYXRpb246IHtDUjY2LDAsN30se0NSNjcsMCwxfSAqLworI2RlZmluZSBJR0EyX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUdBMl9PRkZTRVRfQUxJR05fQllURSAgICAgICAgICA4CisvKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCisjZGVmaW5lIElHQTJfT0ZGU0VUX0ZPUk1VTEEoeCwgeSkgICAgICAgICgoeCp5KS9JR0EyX09GRlNFVF9BTElHTl9CWVRFKQorLyogbG9jYXRpb246IHtDUjY1LDAsN30se0NSNjcsMiwzfSAqLworI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX1JFR19OVU0gICAgICAgIDIKKyNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9BTElHTl9CWVRFICAgICAxNgorI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX1BBVENIX1ZBTFVFICAgIDAKKyNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9GT1JNVUxBKHgsIHkpICAgXAorCSgoKHgqeSkvSUdBMl9GRVRDSF9DT1VOVF9BTElHTl9CWVRFKSArIElHQTJfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUpCisKKy8qIFN0YXJpbmcgQWRkcmVzcyovCisKKy8qIGxvY2F0aW9uOiB7Q1IwQywwLDd9LHtDUjBELDAsN30se0NSMzQsMCw3fSx7Q1I0OCwwLDF9ICovCisjZGVmaW5lIElHQTFfU1RBUlRJTkdfQUREUl9SRUdfTlVNICAgICAgNAorLyogbG9jYXRpb246IHtDUjYyLDEsN30se0NSNjMsMCw3fSx7Q1I2NCwwLDd9ICovCisjZGVmaW5lIElHQTJfU1RBUlRJTkdfQUREUl9SRUdfTlVNICAgICAgMworCisvKiBEZWZpbmUgRGlzcGxheSBPRkZTRVQqLworLyogVGhlc2UgdmFsdWUgYXJlIGJ5IEhXIHN1Z2dlc3RlZCB2YWx1ZSovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBLODAwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAgMzg0CisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIEs4MDBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgSzgwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgIDI5NgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBLODAwIG11c3QgYmUgc2V0IHplcm8sICovCisJCQkJLyogYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBLODAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgMAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgSzgwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDM4NAorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBLODAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzI4CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIEs4MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIEs4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAxMjgKKworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgUDg4MF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDE5MgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBQODgwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI4CisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIFA4ODBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBLODAwIG11c3QgYmUgc2V0IHplcm8sICovCisJCQkJLyogYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBQODgwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgMAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgUDg4MF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA4ODBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBQODgwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIFA4ODBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAxMjgKKworLyogVlQzMzE0IGNoaXBzZXQqLworCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBDTjcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgQ043MDBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDgwCisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIENONzAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBQODAwIG11c3QgYmUgc2V0IHplcm8sCisJCQkJYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBDTjcwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMAorLyogbG9jYXRpb246IHtDUjY4LDQsN30se0NSOTQsNyw3fSx7Q1I5NSw3LDd9ICovCisjZGVmaW5lIENONzAwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA5NgorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBDTjcwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgODAKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgQ043MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDMyCisvKiBsb2NhdGlvbjoge0NSOTQsMCw2fSAqLworI2RlZmluZSBDTjcwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI4CisKKy8qIEZvciBWVDMzMjQsIHRoZXNlIHZhbHVlcyBhcmUgc3VnZ2VzdGVkIGJ5IEhXICovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBDWDcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgMTkyCisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIENYNzAwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAxMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDEyOAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyNAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIENYNzAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBDWDcwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIENYNzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxMjgKKworLyogVlQzMzM2IGNoaXBzZXQqLworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAzNjAKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7U1IyMiwwLDR9LiAqLworI2RlZmluZSBLOE04OTBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyNAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAzNjAKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIEs4TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI0CisKKy8qIFZUMzMyNyBjaGlwc2V0Ki8KKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIFA0TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBQNE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKDMyLzQpID04ICovCisjZGVmaW5lIFA0TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBQNE04OTBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA0TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorCisvKiBWVDMzNjQgY2hpcHNldCovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBQNE05MDBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIFA0TTkwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICovCisjZGVmaW5lIFA0TTkwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBQNE05MDBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA0TTkwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorCisvKiBGb3IgVlQzMzUzLCB0aGVzZSB2YWx1ZXMgYXJlIHN1Z2dlc3RlZCBieSBIVyAqLworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDE5MgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBWWDgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUyCisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIFZYODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAxNTIKKy8qIGxvY2F0aW9uOiB7U1IyMiwwLDR9ICovCisjZGVmaW5lIFZYODAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgNjQKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBWWDgwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIFZYODAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAzMgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyOAorCisjZGVmaW5lIElHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTSAgICAgICAgICAxCisjZGVmaW5lIElHQTFfRklGT19USFJFU0hPTERfUkVHX05VTSAgICAgICAgICAgICAyCisjZGVmaW5lIElHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAyCisjZGVmaW5lIElHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0gICAxCisKKyNkZWZpbmUgSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNICAgICAgICAgIDMKKyNkZWZpbmUgSUdBMl9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU0gICAgICAgIDIKKyNkZWZpbmUgSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU1fUkVHX05VTSAgIDEKKworI2RlZmluZSBJR0ExX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICAgKCh4LzIpLTEpCisjZGVmaW5lIElHQTFfRklGT19USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBKHgpICAgICAgICAgICAgKHgvNCkKKyNkZWZpbmUgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICh4LzQpCisjZGVmaW5lIElHQTJfRklGT19ERVBUSF9TRUxFQ1RfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAoKCh4LzIpLzQpLTEpCisjZGVmaW5lIElHQTJfRklGT19USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBKHgpICAgICAgICAgICAgKHgvNCkKKyNkZWZpbmUgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICh4LzQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTENEIFRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogNTAwIG1zID0gNTAwMDAwIHVzICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQwICAgICAgICAgICAgICAgNTAwMDAwCisvKiA1MCBtcyA9IDUwMDAwIHVzICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQxICAgICAgICAgICAgICAgNTAwMDAKKy8qIDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDIgICAgICAgICAgICAgICAwCisvKiAyMTAgbXMgPSAyMTAwMDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDMgICAgICAgICAgICAgICAyMTAwMDAKKy8qIDJeMTAgKiAoMS8xNC4zMTgxOE0pID0gNzEuNDc1IHVzIChLNDAwLnJldkEpICovCisjZGVmaW5lIENMRTI2Nl9QT1dFUl9TRVFfVU5JVCAgICAgICAgICAgNzEKKy8qIDJeMTEgKiAoMS8xNC4zMTgxOE0pID0gMTQyLjk1IHVzIChLNDAwLnJldkIpICovCisjZGVmaW5lIEs4MDBfUE9XRVJfU0VRX1VOSVQgICAgICAgICAgICAgMTQyCisvKiAyXjEzICogKDEvMTQuMzE4MThNKSA9IDU3Mi4xIHVzICovCisjZGVmaW5lIFA4ODBfUE9XRVJfU0VRX1VOSVQgICAgICAgICAgICAgNTcyCisKKyNkZWZpbmUgQ0xFMjY2X1BPV0VSX1NFUV9GT1JNVUxBKHgpICAgICAoKHgpL0NMRTI2Nl9QT1dFUl9TRVFfVU5JVCkKKyNkZWZpbmUgSzgwMF9QT1dFUl9TRVFfRk9STVVMQSh4KSAgICAgICAoKHgpL0s4MDBfUE9XRVJfU0VRX1VOSVQpCisjZGVmaW5lIFA4ODBfUE9XRVJfU0VRX0ZPUk1VTEEoeCkgICAgICAgKCh4KS9QODgwX1BPV0VSX1NFUV9VTklUKQorCisvKiBsb2NhdGlvbjoge0NSOEIsMCw3fSx7Q1I4RiwwLDN9ICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQwX1JFR19OVU0gICAgICAgMgorLyogbG9jYXRpb246IHtDUjhDLDAsN30se0NSOEYsNCw3fSAqLworI2RlZmluZSBMQ0RfUE9XRVJfU0VRX1REMV9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I4RCwwLDd9LHtDUjkwLDAsM30gKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDJfUkVHX05VTSAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSOEUsMCw3fSx7Q1I5MCw0LDd9ICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQzX1JFR19OVU0gICAgICAgMgorCisvKiBMQ0QgU2NhbGluZyBmYWN0b3IqLworLyogeDogaW5kaWNhdGUgc2V0dGluZyBob3Jpem9udGFsIHNpemUqLworLyogeTogaW5kaWNhdGUgcGFuZWwgaG9yaXpvbnRhbCBzaXplKi8KKworLyogSG9yaXpvbnRhbCBzY2FsaW5nIGZhY3RvciAxMCBiaXRzICgyXjEwKSAqLworI2RlZmluZSBDTEUyNjZfTENEX0hPUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICgoKHgtMSkqMTAyNCkvKHktMSkpCisvKiBWZXJ0aWNhbCBzY2FsaW5nIGZhY3RvciAxMCBiaXRzICgyXjEwKSAqLworI2RlZmluZSBDTEUyNjZfTENEX1ZFUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICgoKHgtMSkqMTAyNCkvKHktMSkpCisvKiBIb3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTIpICovCisjZGVmaW5lIEs4MDBfTENEX0hPUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICAgKCgoeC0xKSo0MDk2KS8oeS0xKSkKKy8qIFZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTEpICovCisjZGVmaW5lIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICAgKCgoeC0xKSoyMDQ4KS8oeS0xKSkKKworLyogbG9jYXRpb246IHtDUjlGLDAsMX0se0NSNzcsMCw3fSx7Q1I3OSw0LDV9ICovCisjZGVmaW5lIExDRF9IT1JfU0NBTElOR19GQUNUT1JfUkVHX05VTSAgMworLyogbG9jYXRpb246IHtDUjc5LDMsM30se0NSNzgsMCw3fSx7Q1I3OSw2LDd9ICovCisjZGVmaW5lIExDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTSAgMworLyogbG9jYXRpb246IHtDUjc3LDAsN30se0NSNzksNCw1fSAqLworI2RlZmluZSBMQ0RfSE9SX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1fQ0xFICAyCisvKiBsb2NhdGlvbjoge0NSNzgsMCw3fSx7Q1I3OSw2LDd9ICovCisjZGVmaW5lIExDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTV9DTEUgIDIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqICAgICBEZWZpbmUgSUdBMSBEaXNwbGF5IFRpbWluZyAgICAgICAqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpb19yZWdpc3RlciB7CisJdTggaW9fYWRkcjsKKwl1OCBzdGFydF9iaXQ7CisJdTggZW5kX2JpdDsKK307CisKKy8qIElHQTEgSG9yaXpvbnRhbCBUb3RhbCAqLworc3RydWN0IGlnYTFfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMV9ob3JfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTEgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV9ob3Jfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMV9ob3Jfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIFRvdGFsICovCitzdHJ1Y3QgaWdhMV92ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMV92ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworc3RydWN0IGlnYTFfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2ExX3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV92ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBTeW5jIEVuZCAqLworc3RydWN0IGlnYTFfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX1NZTkNfRU5EX1JFR19OVU1dOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgIERlZmluZSBJR0EyIFNoYWRvdyBEaXNwbGF5IFRpbWluZyAgICAgICAgICoqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJR0EyIFNoYWRvdyBIb3Jpem9udGFsIFRvdGFsICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX2JsYW5rX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19IT1JfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgVG90YWwgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfQUREUl9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIEVuZCAqLworc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfU1lOQ19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9TWU5DX0VORF9SRUdfTlVNXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgICBEZWZpbmUgSUdBMiBEaXNwbGF5IFRpbWluZyAgICAgICAgICAgICAgICAqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworc3RydWN0IGlnYTJfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMl9ob3JfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9ob3Jfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMl9ob3Jfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIFRvdGFsICovCitzdHJ1Y3QgaWdhMl92ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMl92ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworc3RydWN0IGlnYTJfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2EyX3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl92ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBTeW5jIEVuZCAqLworc3RydWN0IGlnYTJfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX1NZTkNfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMSBPZmZzZXQgUmVnaXN0ZXIgKi8KK3N0cnVjdCBpZ2ExX29mZnNldCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX09GRlNFVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgT2Zmc2V0IFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMl9vZmZzZXQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9PRkZTRVRfUkVHX05VTV07Cit9OworCitzdHJ1Y3Qgb2Zmc2V0IHsKKwlzdHJ1Y3QgaWdhMV9vZmZzZXQgaWdhMV9vZmZzZXRfcmVnOworCXN0cnVjdCBpZ2EyX29mZnNldCBpZ2EyX29mZnNldF9yZWc7Cit9OworCisvKiBJR0ExIEZldGNoIENvdW50IFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMV9mZXRjaF9jb3VudCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0ZFVENIX0NPVU5UX1JFR19OVU1dOworfTsKKworLyogSUdBMiBGZXRjaCBDb3VudCBSZWdpc3RlciAqLworc3RydWN0IGlnYTJfZmV0Y2hfY291bnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GRVRDSF9DT1VOVF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBmZXRjaF9jb3VudCB7CisJc3RydWN0IGlnYTFfZmV0Y2hfY291bnQgaWdhMV9mZXRjaF9jb3VudF9yZWc7CisJc3RydWN0IGlnYTJfZmV0Y2hfY291bnQgaWdhMl9mZXRjaF9jb3VudF9yZWc7Cit9OworCisvKiBTdGFydGluZyBBZGRyZXNzIFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMV9zdGFydGluZ19hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfU1RBUlRJTkdfQUREUl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX3N0YXJ0aW5nX2FkZHIgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TVEFSVElOR19BRERSX1JFR19OVU1dOworfTsKKworc3RydWN0IHN0YXJ0aW5nX2FkZHIgeworCXN0cnVjdCBpZ2ExX3N0YXJ0aW5nX2FkZHIgaWdhMV9zdGFydGluZ19hZGRyX3JlZzsKKwlzdHJ1Y3QgaWdhMl9zdGFydGluZ19hZGRyIGlnYTJfc3RhcnRpbmdfYWRkcl9yZWc7Cit9OworCisvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgVGltZXIgKi8KK3N0cnVjdCBsY2RfcHdkX3NlcV90ZDAgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1BPV0VSX1NFUV9URDBfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQxIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0xDRF9QT1dFUl9TRVFfVEQxX1JFR19OVU1dOworfTsKKworc3RydWN0IGxjZF9wd2Rfc2VxX3RkMiB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tMQ0RfUE9XRVJfU0VRX1REMl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBsY2RfcHdkX3NlcV90ZDMgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1BPV0VSX1NFUV9URDNfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgX2xjZF9wd2Rfc2VxX3RpbWVyIHsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQwIHRkMDsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQxIHRkMTsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQyIHRkMjsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQzIHRkMzsKK307CisKKy8qIExDRCBTY2FsaW5nIEZhY3RvciAqLworc3RydWN0IF9sY2RfaG9yX3NjYWxpbmdfZmFjdG9yIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0xDRF9IT1JfU0NBTElOR19GQUNUT1JfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBfbGNkX3NjYWxpbmdfZmFjdG9yIHsKKwlzdHJ1Y3QgX2xjZF9ob3Jfc2NhbGluZ19mYWN0b3IgbGNkX2hvcl9zY2FsaW5nX2ZhY3RvcjsKKwlzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvcjsKK307CisKK3N0cnVjdCBwbGxfbWFwIHsKKwl1MzIgY2xrOworCXUzMiBjbGUyNjZfcGxsOworCXUzMiBrODAwX3BsbDsKKwl1MzIgY3g3MDBfcGxsOworfTsKKworc3RydWN0IHJnYkxVVCB7CisJdTggcmVkOworCXU4IGdyZWVuOworCXU4IGJsdWU7Cit9OworCitzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGltZXIgeworCXUxNiB0ZDA7CisJdTE2IHRkMTsKKwl1MTYgdGQyOworCXUxNiB0ZDM7Cit9OworCisvKiBEaXNwbGF5IEZJRk8gUmVsYXRpb24gUmVnaXN0ZXJzKi8KK3N0cnVjdCBpZ2ExX2ZpZm9fZGVwdGhfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBmaWZvX2RlcHRoX3NlbGVjdCB7CisJc3RydWN0IGlnYTFfZmlmb19kZXB0aF9zZWxlY3QgaWdhMV9maWZvX2RlcHRoX3NlbGVjdF9yZWc7CisJc3RydWN0IGlnYTJfZmlmb19kZXB0aF9zZWxlY3QgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWc7Cit9OworCitzdHJ1Y3QgZmlmb190aHJlc2hvbGRfc2VsZWN0IHsKKwlzdHJ1Y3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnOworCXN0cnVjdCBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdCBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWc7Cit9OworCitzdHJ1Y3QgZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QgeworCXN0cnVjdCBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0CisJIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnOworCXN0cnVjdCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0CisJIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnOworfTsKKworc3RydWN0IGRpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJc3RydWN0IGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtCisJIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZzsKKwlzdHJ1Y3QgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0KKwkgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnOworfTsKKworc3RydWN0IGlnYTFfY3J0Y190aW1pbmcgeworCXN0cnVjdCBpZ2ExX2hvcl90b3RhbCBob3JfdG90YWw7CisJc3RydWN0IGlnYTFfaG9yX2FkZHIgaG9yX2FkZHI7CisJc3RydWN0IGlnYTFfaG9yX2JsYW5rX3N0YXJ0IGhvcl9ibGFua19zdGFydDsKKwlzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfZW5kIGhvcl9ibGFua19lbmQ7CisJc3RydWN0IGlnYTFfaG9yX3N5bmNfc3RhcnQgaG9yX3N5bmNfc3RhcnQ7CisJc3RydWN0IGlnYTFfaG9yX3N5bmNfZW5kIGhvcl9zeW5jX2VuZDsKKwlzdHJ1Y3QgaWdhMV92ZXJfdG90YWwgdmVyX3RvdGFsOworCXN0cnVjdCBpZ2ExX3Zlcl9hZGRyIHZlcl9hZGRyOworCXN0cnVjdCBpZ2ExX3Zlcl9ibGFua19zdGFydCB2ZXJfYmxhbmtfc3RhcnQ7CisJc3RydWN0IGlnYTFfdmVyX2JsYW5rX2VuZCB2ZXJfYmxhbmtfZW5kOworCXN0cnVjdCBpZ2ExX3Zlcl9zeW5jX3N0YXJ0IHZlcl9zeW5jX3N0YXJ0OworCXN0cnVjdCBpZ2ExX3Zlcl9zeW5jX2VuZCB2ZXJfc3luY19lbmQ7Cit9OworCitzdHJ1Y3QgaWdhMl9zaGFkb3dfY3J0Y190aW1pbmcgeworCXN0cnVjdCBpZ2EyX3NoYWRvd19ob3JfdG90YWwgaG9yX3RvdGFsX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX2JsYW5rX2VuZCBob3JfYmxhbmtfZW5kX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3RvdGFsIHZlcl90b3RhbF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9hZGRyIHZlcl9hZGRyX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX3N0YXJ0IHZlcl9ibGFua19zdGFydF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9ibGFua19lbmQgdmVyX2JsYW5rX2VuZF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9zeW5jX3N0YXJ0IHZlcl9zeW5jX3N0YXJ0X3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3N5bmNfZW5kIHZlcl9zeW5jX2VuZF9zaGFkb3c7Cit9OworCitzdHJ1Y3QgaWdhMl9jcnRjX3RpbWluZyB7CisJc3RydWN0IGlnYTJfaG9yX3RvdGFsIGhvcl90b3RhbDsKKwlzdHJ1Y3QgaWdhMl9ob3JfYWRkciBob3JfYWRkcjsKKwlzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfc3RhcnQgaG9yX2JsYW5rX3N0YXJ0OworCXN0cnVjdCBpZ2EyX2hvcl9ibGFua19lbmQgaG9yX2JsYW5rX2VuZDsKKwlzdHJ1Y3QgaWdhMl9ob3Jfc3luY19zdGFydCBob3Jfc3luY19zdGFydDsKKwlzdHJ1Y3QgaWdhMl9ob3Jfc3luY19lbmQgaG9yX3N5bmNfZW5kOworCXN0cnVjdCBpZ2EyX3Zlcl90b3RhbCB2ZXJfdG90YWw7CisJc3RydWN0IGlnYTJfdmVyX2FkZHIgdmVyX2FkZHI7CisJc3RydWN0IGlnYTJfdmVyX2JsYW5rX3N0YXJ0IHZlcl9ibGFua19zdGFydDsKKwlzdHJ1Y3QgaWdhMl92ZXJfYmxhbmtfZW5kIHZlcl9ibGFua19lbmQ7CisJc3RydWN0IGlnYTJfdmVyX3N5bmNfc3RhcnQgdmVyX3N5bmNfc3RhcnQ7CisJc3RydWN0IGlnYTJfdmVyX3N5bmNfZW5kIHZlcl9zeW5jX2VuZDsKK307CisKKy8qIGRldmljZSBJRCAqLworI2RlZmluZSBDTEUyNjYgICAgICAgICAgICAgIDB4MzEyMworI2RlZmluZSBLTTQwMCAgICAgICAgICAgICAgIDB4MzIwNQorI2RlZmluZSBDTjQwMF9GVU5DVElPTjIgICAgIDB4MjI1OQorI2RlZmluZSBDTjQwMF9GVU5DVElPTjMgICAgIDB4MzI1OQorLyogc3VwcG9ydCBWVDMzMTQgY2hpcHNldCAqLworI2RlZmluZSBDTjcwMF9GVU5DVElPTjIgICAgIDB4MjMxNAorI2RlZmluZSBDTjcwMF9GVU5DVElPTjMgICAgIDB4MzIwOAorLyogVlQzMzI0IGNoaXBzZXQgKi8KKyNkZWZpbmUgQ1g3MDBfRlVOQ1RJT04yICAgICAweDIzMjQKKyNkZWZpbmUgQ1g3MDBfRlVOQ1RJT04zICAgICAweDMzMjQKKy8qIFZUMzIwNCBjaGlwc2V0Ki8KKyNkZWZpbmUgS004MDBfRlVOQ1RJT04zICAgICAgMHgzMjA0CisvKiBWVDMzMzYgY2hpcHNldCovCisjZGVmaW5lIEtNODkwX0ZVTkNUSU9OMyAgICAgIDB4MzMzNgorLyogVlQzMzI3IGNoaXBzZXQqLworI2RlZmluZSBQNE04OTBfRlVOQ1RJT04zICAgICAweDMzMjcKKy8qIFZUMzI5MyBjaGlwc2V0Ki8KKyNkZWZpbmUgQ043NTBfRlVOQ1RJT04zICAgICAweDMyMDgKKy8qIFZUMzM2NCBjaGlwc2V0Ki8KKyNkZWZpbmUgUDRNOTAwX0ZVTkNUSU9OMyAgICAweDMzNjQKKy8qIFZUMzM1MyBjaGlwc2V0Ki8KKyNkZWZpbmUgVlg4MDBfRlVOQ1RJT04zICAgICAweDMzNTMKKworI2RlZmluZSBOVU1fVE9UQUxfUExMX1RBQkxFIEFSUkFZX1NJWkUocGxsX3ZhbHVlKQorCitzdHJ1Y3QgSU9EQVRBIHsKKwl1OCBJbmRleDsKKwl1OCBNYXNrOworCXU4IERhdGE7Cit9OworCitzdHJ1Y3QgcGNpX2RldmljZV9pZF9pbmZvIHsKKwl1MzIgdmVuZG9yOworCXUzMiBkZXZpY2U7CisJdTMyIGNoaXBfaW5kZXg7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitleHRlcm4gaW50IHZpYWZiX3NlY29uZF9zaXplOworZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOworZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOworZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKK2V4dGVybiBpbnQgdmlhZmJfYWNjZWw7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CisKK3ZvaWQgdmlhZmJfd3JpdGVfcmVnX21hc2sodTggaW5kZXgsIGludCBpb19wb3J0LCB1OCBkYXRhLCB1OCBtYXNrKTsKK3ZvaWQgdmlhZmJfc2V0X291dHB1dF9wYXRoKGludCBkZXZpY2UsIGludCBzZXRfaWdhLAorCWludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3ZvaWQgdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90YWJsZSwKKwkJICAgICAgaW50IG1vZGVfaW5kZXgsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOworCit2b2lkIHZpYWZiX3NldF92Y2xvY2sodTMyIENMSywgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl9sb2FkX3JlZyhpbnQgdGltaW5nX3ZhbHVlLCBpbnQgdmlhZmJfbG9hZF9yZWdfbnVtLAorCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnLAorCSAgICAgIGludCBpb190eXBlKTsKK3ZvaWQgdmlhZmJfY3J0X2Rpc2FibGUodm9pZCk7Cit2b2lkIHZpYWZiX2NydF9lbmFibGUodm9pZCk7Cit2b2lkIGluaXRfYWQ5Mzg5KHZvaWQpOworLyogQWNjZXNzIEkvTyBGdW5jdGlvbiAqLwordm9pZCB2aWFmYl93cml0ZV9yZWcodTggaW5kZXgsIHUxNiBpb19wb3J0LCB1OCBkYXRhKTsKK3U4IHZpYWZiX3JlYWRfcmVnKGludCBpb19wb3J0LCB1OCBpbmRleCk7Cit2b2lkIHZpYWZiX2xvY2tfY3J0KHZvaWQpOwordm9pZCB2aWFmYl91bmxvY2tfY3J0KHZvaWQpOwordm9pZCB2aWFmYl9sb2FkX29mZnNldF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7Cit2b2lkIHZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pOworc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKGludCBJbmRleCk7Cit1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKTsKK3ZvaWQgdmlhZmJfbG9hZF9GSUZPX3JlZyhpbnQgc2V0X2lnYSwgaW50IGhvcl9hY3RpdmUsIGludCB2ZXJfYWN0aXZlKTsKK3ZvaWQgdmlhZmJfc2V0X2NvbG9yX2RlcHRoKGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKKwkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKTsKKworaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsCisJICAgIGludCB2aWRlb19icHAsIGludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwKKwkgICAgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSk7Cit2b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSk7CitpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpOworaW50IHZpYWZiX2dldF9yZWZyZXNoKGludCBocmVzLCBpbnQgdnJlcywgdTMyIGZsb2F0X3JlZnJlc2gpOwordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLAorCQkJICAgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKTsKK3ZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCisJdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pOworCit2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKTsKK3ZvaWQgdmlhZmJfc2V0X3N0YXJ0X2FkZHIodm9pZCk7Cit2b2lkIHZpYWZiX2dldF9mYl9pbmZvKHVuc2lnbmVkIGludCAqZmJfYmFzZSwgdW5zaWduZWQgaW50ICpmYl9sZW4pOworCisjZW5kaWYgLyogX19IV19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzA2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworLyogR2V0IGZyYW1lIGJ1ZmZlciBzaXplIGZyb20gVkdBIEJJT1MgKi8KKwordW5zaWduZWQgaW50IHZpYWZiX2dldF9tZW1zaXplKHZvaWQpCit7CisJdW5zaWduZWQgaW50IG07CisKKwkvKiBJZiBtZW1vcnkgc2l6ZSBwcm92aWRlZCBieSB1c2VyICovCisJaWYgKHZpYWZiX21lbXNpemUpCisJCW0gPSB2aWFmYl9tZW1zaXplICogTWI7CisJZWxzZSB7CisJCW0gPSAodW5zaWduZWQgaW50KXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjM5KTsKKwkJbSA9IG0gKiAoNCAqIE1iKTsKKworCQlpZiAoKG0gPCAoMTYgKiBNYikpIHx8IChtID4gKDY0ICogTWIpKSkKKwkJCW0gPSAxNiAqIE1iOworCX0KKwlERUJVR19NU0coS0VSTl9JTkZPICJmcmFtZWJ1ZmZlciBzaXplID0gJWQgTWJcbiIsIG0gLyBNYik7CisJcmV0dXJuIG07Cit9CisKKy8qIEdldCBWaWRlbyBCdWZmZXIgU3RhcnRpbmcgUGh5c2ljYWwgQWRkcmVzcyhiYWNrIGRvb3IpKi8KKwordW5zaWduZWQgbG9uZyB2aWFmYl9nZXRfdmlkZW9idWZfYWRkcih2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHN5c19tZW07CisJdW5zaWduZWQgY2hhciB2aWRlb19tZW07CisJdW5zaWduZWQgbG9uZyBzeXNfbWVtX3NpemU7CisJdW5zaWduZWQgbG9uZyB2aWRlb19tZW1fc2l6ZTsKKwkvKnN5c3RlbSBtZW1vcnkgPSAyNTYgTUIsIHZpZGVvIG1lbW9yeSA2NCBNQiAqLworCXVuc2lnbmVkIGxvbmcgdm1lbV9zdGFydGluZ19hZHIgPSAweDBDMDAwMDAwOworCisJcGRldiA9CisJICAgIChzdHJ1Y3QgcGNpX2RldiAqKXBjaV9nZXRfZGV2aWNlKFZJQV9LODAwX0JSSURHRV9WSUQsCisJCQkJCSAgICAgVklBX0s4MDBfQlJJREdFX0RJRCwgTlVMTCk7CisJaWYgKHBkZXYgIT0gTlVMTCkgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBWSUFfSzgwMF9TWVNURU1fTUVNT1JZX1JFRywKKwkJCQkgICAgICZzeXNfbWVtKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgVklBX0s4MDBfVklERU9fTUVNT1JZX1JFRywKKwkJCQkgICAgICZ2aWRlb19tZW0pOworCQl2aWRlb19tZW0gPSAodmlkZW9fbWVtICYgMHg3MCkgPj4gNDsKKwkJc3lzX21lbV9zaXplID0gKCh1bnNpZ25lZCBsb25nKXN5c19tZW0pIDw8IDI0OworCQlpZiAodmlkZW9fbWVtICE9IDApCisJCQl2aWRlb19tZW1fc2l6ZSA9ICgxIDw8ICh2aWRlb19tZW0pKSAqIDEwMjQgKiAxMDI0OworCQllbHNlCisJCQl2aWRlb19tZW1fc2l6ZSA9IDA7CisKKwkJdm1lbV9zdGFydGluZ19hZHIgPSBzeXNfbWVtX3NpemUgLSB2aWRlb19tZW1fc2l6ZTsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiVmlkZW8gTWVtb3J5IFN0YXJ0aW5nIEFkZHJlc3MgPSAlbHggXG4iLAorCQkgIHZtZW1fc3RhcnRpbmdfYWRyKTsKKwlyZXR1cm4gdm1lbV9zdGFydGluZ19hZHI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5oIGIvZHJpdmVycy92aWRlby92aWEvaWZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBlYzNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaWZhY2UuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fSUZBQ0VfSF9fCisjZGVmaW5lIF9fSUZBQ0VfSF9fCisKKyNkZWZpbmUgS2IgICgxMDI0KQorI2RlZmluZSBNYiAgKEtiKktiKQorCisjZGVmaW5lIFZJQV9LODAwX0JSSURHRV9WSUQgICAgICAgICAweDExMDYKKyNkZWZpbmUgVklBX0s4MDBfQlJJREdFX0RJRCAgICAgICAgIDB4MzIwNAorCisjZGVmaW5lIFZJQV9LODAwX1NZU1RFTV9NRU1PUllfUkVHICAweDQ3CisjZGVmaW5lIFZJQV9LODAwX1ZJREVPX01FTU9SWV9SRUcgICAweEExCisKK2V4dGVybiBpbnQgdmlhZmJfbWVtc2l6ZTsKK3Vuc2lnbmVkIGludCB2aWFmYl9nZXRfbWVtc2l6ZSh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgdmlhZmJfZ2V0X3ZpZGVvYnVmX2FkZHIodm9pZCk7CisKKyNlbmRpZiAvKiBfX0lGQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaW9jdGwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwM2MwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworaW50IHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKHVfbG9uZyBhcmcpCit7CisJc3RydWN0IHZpYWZiX2lvY3RsX2luZm8gdmlhaW5mbzsKKworCXZpYWluZm8udmlhZmJfaWQgPSBWSUFJRDsKKwl2aWFpbmZvLnZlbmRvcl9pZCA9IFBDSV9WSUFfVkVORE9SX0lEOworCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX0NMRTI2Nl9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfSzQwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfSzgwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX1BNODAwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfQ043MDBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9DWDcwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9LOE04OTBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfUDRNODkwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX1A0TTkwMF9ESUQ7CisJCWJyZWFrOworCX0KKworCXZpYWluZm8udmVyc2lvbiA9IFZFUlNJT05fTUFKT1I7CisJdmlhaW5mby5yZXZpc2lvbiA9IFZFUlNJT05fTUlOT1I7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnZpYWluZm8sIHNpemVvZih2aWFpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhvdC1QbHVnIFByaW9yaXR5OiBEVkkgPiBDUlQqLworaW50IHZpYWZiX2lvY3RsX2hvdHBsdWcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwKQoreworCWludCBEVklzZW5zZSwgc3RhdHVzID0gMDsKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pb2N0bF9ob3RwbHVnISFcbiIpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgIT0KKwkJTk9OX1RNRFNfVFJBTlNNSVRURVIpIHsKKwkJRFZJc2Vuc2UgPSB2aWFmYl9kdmlfc2Vuc2UoKTsKKworCQlpZiAoRFZJc2Vuc2UpIHsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBBdHRhY2hlZC4uLlxuIik7CisJCQlpZiAodmlhZmJfRGV2aWNlU3RhdHVzICE9IERWSV9EZXZpY2UpIHsKKwkJCQl2aWFmYl9EVklfT04gPSAxOworCQkJCXZpYWZiX0NSVF9PTiA9IDA7CisJCQkJdmlhZmJfTENEX09OID0gMDsKKwkJCQl2aWFmYl9EZXZpY2VTdGF0dXMgPSBEVklfRGV2aWNlOworCQkJCXJldHVybiB2aWFmYl9EZXZpY2VTdGF0dXM7CisJCQl9CisJCQlzdGF0dXMgPSAxOworCQl9IGVsc2UKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBEZS1hdHRhY2hlZC4uLlxuIik7CisJfQorCisJaWYgKCh2aWFmYl9EZXZpY2VTdGF0dXMgIT0gQ1JUX0RldmljZSkgJiYgKHN0YXR1cyA9PSAwKSkgeworCQl2aWFmYl9DUlRfT04gPSAxOworCQl2aWFmYl9EVklfT04gPSAwOworCQl2aWFmYl9MQ0RfT04gPSAwOworCisJCXZpYWZiX0RldmljZVN0YXR1cyA9IENSVF9EZXZpY2U7CisJCXJldHVybiB2aWFmYl9EZXZpY2VTdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJmZTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lPQ1RMX0hfXworI2RlZmluZSBfX0lPQ1RMX0hfXworCisjaWZuZGVmIF9fdXNlcgorI2RlZmluZSBfX3VzZXIKKyNlbmRpZgorCisvKiBWSUFGQiBJT0NUTCBkZWZpbml0aW9uICovCisjZGVmaW5lIFZJQUZCX0dFVF9JTkZPX1NJWkUJCTB4NTY0OTQxMDEJLyogJ1ZJQVwwMScgKi8KKyNkZWZpbmUgVklBRkJfR0VUX0lORk8JCQkweDU2NDk0MTAyCS8qICdWSUFcMDInICovCisjZGVmaW5lIFZJQUZCX0hPVFBMVUcJCQkweDU2NDk0MTAzCS8qICdWSUFcMDMnICovCisjZGVmaW5lIFZJQUZCX1NFVF9IT1RQTFVHX0ZMQUcJCTB4NTY0OTQxMDQJLyogJ1ZJQVwwNCcgKi8KKyNkZWZpbmUgVklBRkJfR0VUX1JFU09MVVRJT04JCTB4NTY0OTQxMDUJLyogJ1ZJQVwwNScgKi8KKyNkZWZpbmUgVklBRkJfR0VUX1NBTU1fSU5GTwkJMHg1NjQ5NDEwNwkvKiAnVklBXDA3JyAqLworI2RlZmluZSBWSUFGQl9UVVJOX09OX09VVFBVVF9ERVZJQ0UgICAgIDB4NTY0OTQxMDgJLyogJ1ZJQVwwOCcgKi8KKyNkZWZpbmUgVklBRkJfVFVSTl9PRkZfT1VUUFVUX0RFVklDRSAgICAweDU2NDk0MTA5CS8qICdWSUFcMDknICovCisjZGVmaW5lIFZJQUZCX1NFVF9ERVZJQ0UJCTB4NTY0OTQxMEEKKyNkZWZpbmUgVklBRkJfR0VUX0RFVklDRQkJMHg1NjQ5NDEwQgorI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX1ZFUlNJT04JMHg1NjQ5NDExMgkvKiAnVklBXDEyJyAqLworI2RlZmluZSBWSUFGQl9HRVRfQ0hJUF9JTkZPCQkweDU2NDk0MTEzCS8qICdWSUFcMTMnICovCisjZGVmaW5lIFZJQUZCX1NFVF9ERVZJQ0VfSU5GTyAgICAgICAgICAgMHg1NjQ5NDExNAorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX0lORk8gICAgICAgICAgIDB4NTY0OTQxMTUKKworI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX1NVUFBPUlQJMHg1NjQ5NDExOAorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX0NPTk5FQ1QJMHg1NjQ5NDExOQorI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfU1VQUE9SVF9FWFBBTkQJMHg1NjQ5NDExQQorI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX05BTUUJCTB4NTY0OTQxMjIKKyNkZWZpbmUgVklBRkJfR0VUX0RFVklDRV9TVVBQT1JUX1NUQVRFCTB4NTY0OTQxMjMKKyNkZWZpbmUgVklBRkJfR0VUX0dBTU1BX0xVVAkJMHg1NjQ5NDEyNAorI2RlZmluZSBWSUFGQl9TRVRfR0FNTUFfTFVUCQkweDU2NDk0MTI1CisjZGVmaW5lIFZJQUZCX0dFVF9HQU1NQV9TVVBQT1JUX1NUQVRFCTB4NTY0OTQxMjYKKyNkZWZpbmUgVklBRkJfU0VUX1ZJREVPX0RFVklDRQkJMHg1NjQ5NDEyNworI2RlZmluZSBWSUFGQl9HRVRfVklERU9fREVWSUNFCQkweDU2NDk0MTI4CisjZGVmaW5lIFZJQUZCX1NFVF9TRUNPTkRfTU9ERQkJMHg1NjQ5NDEyOQorI2RlZmluZSBWSUFGQl9TWU5DX1NVUkZBQ0UJCTB4NTY0OTQxMzAKKyNkZWZpbmUgVklBRkJfR0VUX0RSSVZFUl9DQVBTCQkweDU2NDk0MTMxCisjZGVmaW5lIFZJQUZCX0dFVF9JR0FfU0NBTElOR19JTkZPCTB4NTY0OTQxMzIKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX01BWF9TSVpFCTB4NTY0OTQxMzMKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX01BWF9QT1NJVElPTgkweDU2NDk0MTM0CisjZGVmaW5lIFZJQUZCX1NFVF9QQU5FTF9TSVpFCQkweDU2NDk0MTM1CisjZGVmaW5lIFZJQUZCX1NFVF9QQU5FTF9QT1NJVElPTiAgICAgICAgMHg1NjQ5NDEzNgorI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfUE9TSVRJT04gICAgICAgIDB4NTY0OTQxMzcKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX1NJWkUJCTB4NTY0OTQxMzgKKworI2RlZmluZSBOb25lX0RldmljZSAweDAwCisjZGVmaW5lIENSVF9EZXZpY2UgIDB4MDEKKyNkZWZpbmUgTENEX0RldmljZSAgMHgwMgorI2RlZmluZSBEVklfRGV2aWNlICAweDA4CisjZGVmaW5lIENSVDJfRGV2aWNlIDB4MTAKKyNkZWZpbmUgTENEMl9EZXZpY2UgMHg0MAorCisjZGVmaW5lIE9QX0xDRF9DRU5URVJJTkcgICAweDAxCisjZGVmaW5lIE9QX0xDRF9QQU5FTF9JRCAgICAweDAyCisjZGVmaW5lIE9QX0xDRF9NT0RFICAgICAgICAweDAzCisKKy8qU0FNTSBvcGVyYXRpb24gZmxhZyovCisjZGVmaW5lIE9QX1NBTU0gICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgTENEX1BBTkVMX0lEX01BWElNVU0JMjIKKworI2RlZmluZSBTVEFURV9PTiAgICAgICAgICAgIDB4MQorI2RlZmluZSBTVEFURV9PRkYgICAgICAgICAgIDB4MAorI2RlZmluZSBTVEFURV9ERUZBVUxUICAgICAgIDB4RkZGRgorCisjZGVmaW5lIE1BWF9BQ1RJVkVfREVWX05VTSAgMgorCitzdHJ1Y3QgZGV2aWNlX3QgeworCXVuc2lnbmVkIHNob3J0IGNydDoxOworCXVuc2lnbmVkIHNob3J0IGR2aToxOworCXVuc2lnbmVkIHNob3J0IGxjZDoxOworCXVuc2lnbmVkIHNob3J0IHNhbW06MTsKKwl1bnNpZ25lZCBzaG9ydCBsY2RfZHNwX2NlbnQ6MTsKKwl1bnNpZ25lZCBjaGFyIGxjZF9tb2RlOjE7CisJdW5zaWduZWQgc2hvcnQgZXBpYV9kdmk6MTsKKwl1bnNpZ25lZCBzaG9ydCBsY2RfZHVhbF9lZGdlOjE7CisJdW5zaWduZWQgc2hvcnQgbGNkMjoxOworCisJdW5zaWduZWQgc2hvcnQgcHJpbWFyeV9kZXY7CisJdW5zaWduZWQgY2hhciBsY2RfcGFuZWxfaWQ7CisJdW5zaWduZWQgc2hvcnQgeHJlcywgeXJlczsKKwl1bnNpZ25lZCBzaG9ydCB4cmVzMSwgeXJlczE7CisJdW5zaWduZWQgc2hvcnQgcmVmcmVzaDsKKwl1bnNpZ25lZCBzaG9ydCBicHA7CisJdW5zaWduZWQgc2hvcnQgcmVmcmVzaDE7CisJdW5zaWduZWQgc2hvcnQgYnBwMTsKKwl1bnNpZ25lZCBzaG9ydCBzZXF1ZW5jZTsKKwl1bnNpZ25lZCBzaG9ydCBidXNfd2lkdGg7Cit9OworCitzdHJ1Y3QgdmlhZmJfaW9jdGxfaW5mbyB7CisJdTMyIHZpYWZiX2lkOwkJLyogZm9yIGlkZW50aWZ5aW5nIHZpYWZiICovCisjZGVmaW5lIFZJQUlEICAgICAgIDB4NTY0OTQxNDYJLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1ZJQUYnICovCisJdTE2IHZlbmRvcl9pZDsKKwl1MTYgZGV2aWNlX2lkOworCXU4IHZlcnNpb247CisJdTggcmV2aXNpb247CisJdTggcmVzZXJ2ZWRbMjQ2XTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9tb2RlIHsKKwl1MzIgeHJlczsKKwl1MzIgeXJlczsKKwl1MzIgcmVmcmVzaDsKKwl1MzIgYnBwOworCXUzMiB4cmVzX3NlYzsKKwl1MzIgeXJlc19zZWM7CisJdTMyIHZpcnR1YWxfeHJlc19zZWM7CisJdTMyIHZpcnR1YWxfeXJlc19zZWM7CisJdTMyIHJlZnJlc2hfc2VjOworCXUzMiBicHBfc2VjOworfTsKK3N0cnVjdCB2aWFmYl9pb2N0bF9zYW1tIHsKKwl1MzIgc2FtbV9zdGF0dXM7CisJdTMyIHNpemVfcHJpbTsKKwl1MzIgc2l6ZV9zZWM7CisJdTMyIG1lbV9iYXNlOworCXUzMiBvZmZzZXRfc2VjOworfTsKKworc3RydWN0IHZpYWZiX2RyaXZlcl92ZXJzaW9uIHsKKwlpbnQgaU1ham9yTnVtOworCWludCBpS2VybmVsTnVtOworCWludCBpT1NOdW07CisJaW50IGlNaW5vck51bTsKK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9sY2RfYXR0cmlidXRlIHsKKwl1bnNpZ25lZCBpbnQgcGFuZWxfaWQ7CisJdW5zaWduZWQgaW50IGRpc3BsYXlfY2VudGVyOworCXVuc2lnbmVkIGludCBsY2RfbW9kZTsKK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9zZXR0aW5nIHsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBhY3RpdmUgZGV2aWNlcyAqLworCXVuc2lnbmVkIHNob3J0IGRldmljZV9mbGFnOworCS8qIEluZGljYXRlIHdoaWNoIGRldmljZSBzaG91bGQgYmUgdHVybiBvbiBvciB0dXJuIG9mZi4gKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2Vfc3RhdHVzOworCXVuc2lnbmVkIGludCByZXNlcnZlZDsKKwkvKiBJbmRpY2F0ZSB3aGljaCBMQ0QncyBhdHRyaWJ1dGUgY2FuIGJlIGNoYW5nZWQuICovCisJdW5zaWduZWQgc2hvcnQgbGNkX29wZXJhdGlvbl9mbGFnOworCS8qIDE6IFNBTU0gT04gIDA6IFNBTU0gT0ZGICovCisJdW5zaWduZWQgc2hvcnQgc2FtbV9zdGF0dXM7CisJLyogaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIGZpcnN0IGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IGZpcnN0X2Rldl9ob3JfcmVzOworCS8qIHZlcnRpY2FsIHJlc29sdXRpb24gb2YgZmlyc3QgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgZmlyc3RfZGV2X3Zlcl9yZXM7CisJLyogaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHNlY29uZCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZWNvbmRfZGV2X2hvcl9yZXM7CisJLyogdmVydGljYWwgcmVzb2x1dGlvbiBvZiBzZWNvbmQgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgc2Vjb25kX2Rldl92ZXJfcmVzOworCS8qIHJlZnJlc2ggcmF0ZSBvZiBmaXJzdCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJzdF9kZXZfcmVmcmVzaDsKKwkvKiBicHAgb2YgZmlyc3QgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgZmlyc3RfZGV2X2JwcDsKKwkvKiByZWZyZXNoIHJhdGUgb2Ygc2Vjb25kIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfcmVmcmVzaDsKKwkvKiBicHAgb2Ygc2Vjb25kIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfYnBwOworCS8qIEluZGljYXRlIHdoaWNoIGRldmljZSBhcmUgcHJpbWFyeSBkaXNwbGF5IGRldmljZS4gKi8KKwl1bnNpZ25lZCBpbnQgcHJpbWFyeV9kZXZpY2U7CisJLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIHdpbGwgc2hvdyB2aWRlby4gb25seSB2YWxpZCBpbiBkdW92aWV3IG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgdmlkZW9fZGV2aWNlX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RydWN0X3Jlc2VydmVkWzM0XTsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfbGNkX2F0dHJpYnV0ZSBsY2RfYXR0cmlidXRlczsKK307CisKK3N0cnVjdCBfVVRGdW5jdGlvbkNhcHMgeworCXVuc2lnbmVkIGludCBkdzNEU2NhbGluZ1N0YXRlOworCXVuc2lnbmVkIGludCByZXNlcnZlZFszMV07Cit9OworCitzdHJ1Y3QgX1BPU0lUSU9OVkFMVUUgeworCXVuc2lnbmVkIGludCBkd1g7CisJdW5zaWduZWQgaW50IGR3WTsKK307CisKK3N0cnVjdCBfcGFuZWxfc2l6ZV9wb3NfaW5mbyB7CisJdW5zaWduZWQgaW50IGRldmljZV90eXBlOworCWludCB4OworCWludCB5OworfTsKKworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKKworaW50IHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKHVfbG9uZyBhcmcpOworaW50IHZpYWZiX2lvY3RsX2hvdHBsdWcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwKTsKKworI2VuZGlmIC8qIF9fSU9DVExfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzI5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtMCwwICsxLDE4MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKyNpbmNsdWRlICJsY2R0YmwuaCIKKworc3RhdGljIHN0cnVjdCBpZ2EyX3NoYWRvd19jcnRjX3RpbWluZyBpZ2EyX3NoYWRvd19jcnRjX3JlZyA9IHsKKwkvKiBJR0EyIFNoYWRvdyBIb3Jpem9udGFsIFRvdGFsICovCisJe0lHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNLCB7e0NSNkQsIDAsIDd9LCB7Q1I3MSwgMywgM30gfSB9LAorCS8qIElHQTIgU2hhZG93IEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe0lHQTJfU0hBRE9XX0hPUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjZFLCAwLCA3fSB9IH0sCisJLyogSUdBMiBTaGFkb3cgVmVydGljYWwgVG90YWwgKi8KKwl7SUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU0sIHt7Q1I2RiwgMCwgN30sIHtDUjcxLCAwLCAyfSB9IH0sCisJLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KKwl7SUdBMl9TSEFET1dfVkVSX0FERFJfUkVHX05VTSwge3tDUjcwLCAwLCA3fSwge0NSNzEsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworCXtJR0EyX1NIQURPV19WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwKKwkge3tDUjcyLCAwLCA3fSwge0NSNzQsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KKwl7SUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNLCB7e0NSNzMsIDAsIDd9LCB7Q1I3NCwgMCwgMn0gfSB9LAorCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KKwl7SUdBMl9TSEFET1dfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSwge3tDUjc1LCAwLCA3fSwge0NSNzYsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBTeW5jIEVuZCAqLworCXtJR0EyX1NIQURPV19WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjc2LCAwLCAzfSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgX2xjZF9zY2FsaW5nX2ZhY3RvciBsY2Rfc2NhbGluZ19mYWN0b3IgPSB7CisJLyogTENEIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNLAorCSB7e0NSOUYsIDAsIDF9LCB7Q1I3NywgMCwgN30sIHtDUjc5LCA0LCA1fSB9IH0sCisJLyogTENEIFZlcnRpY2FsIFNjYWxpbmcgRmFjdG9yIFJlZ2lzdGVyICovCisJe0xDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTSwKKwkge3tDUjc5LCAzLCAzfSwge0NSNzgsIDAsIDd9LCB7Q1I3OSwgNiwgN30gfSB9Cit9Oworc3RhdGljIHN0cnVjdCBfbGNkX3NjYWxpbmdfZmFjdG9yIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUgPSB7CisJLyogTENEIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSwge3tDUjc3LCAwLCA3fSwge0NSNzksIDQsIDV9IH0gfSwKKwkvKiBMQ0QgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSwge3tDUjc4LCAwLCA3fSwge0NSNzksIDYsIDd9IH0gfQorfTsKKworc3RhdGljIGludCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKTsKK3N0YXRpYyBib29sIGx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHModm9pZCk7CitzdGF0aWMgaW50IGZwX2lkX3RvX3ZpbmRleChpbnQgcGFuZWxfaWQpOworc3RhdGljIGludCBsdmRzX3JlZ2lzdGVyX3JlYWQoaW50IGluZGV4KTsKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3NjYWxpbmcoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLAorCQkgICAgICBpbnQgcGFuZWxfdnJlcyk7CitzdGF0aWMgdm9pZCBsb2FkX2xjZF9rNDAwX3BhdGNoX3RibChpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQpOworc3RhdGljIHZvaWQgbG9hZF9sY2RfcDg4MF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkKTsKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3BhdGNoX3JlZ3MoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkLCBpbnQgc2V0X2lnYSk7CitzdGF0aWMgdm9pZCB2aWFfcGl0Y2hfYWxpZ25tZW50X3BhdGNoX2xjZCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSAgICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXcoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7CisKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19kaXNhYmxlKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSAgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19lbmFibGUoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICAgICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29mZih2b2lkKTsKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29uKHZvaWQpOworc3RhdGljIHZvaWQgZmlsbF9sY2RfZm9ybWF0KHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfZGlwb3J0X29mX2ludGVncmF0ZWRfbHZkcygKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8sCisJCQkJICAgICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkJICAgICAqcGx2ZHNfc2V0dGluZ19pbmZvKTsKK3N0YXRpYyBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbGNkX2NlbnRlcmluZ190aW1naW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZworCQkJCQkgICAgbW9kZV9jcnRfcmVnLAorCQkJCQkgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfY3J0X3JlZyk7CitzdGF0aWMgdm9pZCBsb2FkX2NydGNfc2hhZG93X3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbW9kZV90aW1pbmcsCisJCQkgICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF90aW1pbmcpOworc3RhdGljIHZvaWQgdmlhZmJfbG9hZF9zY2FsaW5nX2ZhY3Rvcl9mb3JfcDRtOTAwKGludCBzZXRfaHJlcywKKwlpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLCBpbnQgcGFuZWxfdnJlcyk7CisKK3N0YXRpYyBpbnQgY2hlY2tfbHZkc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKK3sKKwlpZiAobHZkc19yZWdpc3Rlcl9yZWFkKGRldmljZV9pZF9zdWJhZGRyKSA9PSBkZXZpY2VfaWQpCisJCXJldHVybiBPSzsKKwllbHNlCisJCXJldHVybiBGQUlMOworfQorCit2b2lkIHZpYWZiX2luaXRfbGNkX3NpemUodm9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2xjZF9zaXplKClcbiIpOworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJInZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5nZXRfbGNkX3NpemVfbWV0aG9kICVkXG4iLAorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCk7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5nZXRfbGNkX3NpemVfbWV0aG9kKSB7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfU1lTVEVNX0JJT1M6CisJCWJyZWFrOworCWNhc2UgR0VUX0xDRF9TWklFX0JZX0hXX1NUUkFQUElORzoKKwkJYnJlYWs7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfVkdBX0JJT1M6CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBMQ0QgU2l6ZSBtZXRob2QgYnkgVkdBIEJJT1MgISFcbiIpOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUgPQorCQkgICAgZnBfaWRfdG9fdmluZGV4KHZpYWZiX2xjZF9wYW5lbF9pZCk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkxDRCBQYW5lbF9JRCA9ICVkXG4iLAorCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsIFNpemUgPSAlZFxuIiwKKwkJCSAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOgorCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgTENEIFNpemUgbWV0aG9kIGJ5IHVzZXIgc2V0dGluZyAhIVxuIik7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZSA9CisJCSAgICBmcF9pZF90b192aW5kZXgodmlhZmJfbGNkX3BhbmVsX2lkKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsX0lEID0gJWRcbiIsCisJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWwgU2l6ZSA9ICVkXG4iLAorCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2xjZF9zaXplIGZhaWxcbiIpOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDFfODAwWDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KKwkJICAgIGZwX2lkX3RvX3ZpbmRleChMQ0RfUEFORUxfSUQxXzgwMFg2MDApOworCX0KKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF9pZCA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQ7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfc2l6ZSA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF9ocmVzID0KKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX3ZyZXMgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXM7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0KKwkgICAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2U7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5MQ0REaXRoZXJpbmcgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nOworfQorCitzdGF0aWMgYm9vbCBsdmRzX2lkZW50aWZ5X2ludGVncmF0ZWRsdmRzKHZvaWQpCit7CisJaWYgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMikgeworCQkvKiBUd28gZHVhbCBjaGFubmVsIExDRCAoSW50ZXJuYWwgTFZEUyArIEV4dGVybmFsIExWRFMpOiAqLworCQkvKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsIExWRFMsIHN1Y2ggYXMgVlQxNjM2LCB3ZSBzaG91bGQKKwkJICAgaGF2ZSBpdHMgY2hpcCBJRCBhbHJlYWR5LiAqLworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUgPQorCQkJICAgIElOVEVHUkFURURfTFZEUzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIlN1cHBvcnQgdHdvIGR1YWwgY2hhbm5lbCBMVkRTIVwKKwkJCQkgIChJbnRlcm5hbCBMVkRTICsgRXh0ZXJuYWwgTFZEUylcbiIpOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQkgICAgSU5URUdSQVRFRF9MVkRTOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTm90IGZvdW5kIGV4dGVybmFsIExWRFMsXAorCQkJCSAgc28gY2FuJ3Qgc3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0xDRDFfTENEMikgeworCQkvKiBUd28gc2luZ2xlIGNoYW5uZWwgTENEIChJbnRlcm5hbCBMVkRTICsgSW50ZXJuYWwgTFZEUyk6ICovCisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQlJTlRFR1JBVEVEX0xWRFM7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lID0KKwkJCUlOVEVHUkFURURfTFZEUzsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiU3VwcG9ydCB0d28gc2luZ2xlIGNoYW5uZWwgTFZEUyFcCisJCQkgIChJbnRlcm5hbCBMVkRTICsgSW50ZXJuYWwgTFZEUylcbiIpOworCX0gZWxzZSBpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgIT0gSFdfTEFZT1VUX0RWSV9PTkxZKSB7CisJCS8qIElmIHdlIGhhdmUgZm91bmQgZXh0ZXJuYWwgTFZEUywganVzdCB1c2UgaXQsCisJCSAgIG90aGVyd2lzZSwgd2Ugd2lsbCB1c2UgaW50ZXJuYWwgTFZEUyBhcyBkZWZhdWx0LiAqLworCQlpZiAoIXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQkJICAgIElOVEVHUkFURURfTFZEUzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkZvdW5kIEludGVncmF0ZWQgTFZEUyFcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQlOT05fTFZEU19UUkFOU01JVFRFUjsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRG8gbm90IHN1cHBvcnQgTFZEUyFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKK3sKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJaWYgKHZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2KCkpIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJICAiRm91bmQgVklBIFZUMTYzNiBMVkRTIG9uIHBvcnQgaTJjIDB4MzEgXG4iKTsKKwl9IGVsc2UgeworCQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCQlpZiAodmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYoKSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9CisJCQkJR1BJT1BPUlRJTkRFWDsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCQkgICJGb3VuZCBWSUEgVlQxNjM2IExWRFMgb24gcG9ydCBncGlvIDB4MmMgXG4iKTsKKwkJfQorCX0KKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKQorCQlsdmRzX2lkZW50aWZ5X2ludGVncmF0ZWRsdmRzKCk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkKKwkJcmV0dXJuIHRydWU7CisJLyogQ2hlY2sgZm9yIFZUMTYzMTogKi8KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lID0gVlQxNjMxX0xWRFM7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfc2xhdmVfYWRkciA9CisJCVZUMTYzMV9MVkRTX0kyQ19BRERSOworCisJaWYgKGNoZWNrX2x2ZHNfY2hpcChWVDE2MzFfREVWSUNFX0lEX1JFRywgVlQxNjMxX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiBWVDE2MzEgTFZEUyAhIFxuIik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAorCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKTsKKwkJcmV0dXJuIE9LOworCX0KKworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQlOT05fTFZEU19UUkFOU01JVFRFUjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyID0KKwkJVlQxNjMxX0xWRFNfSTJDX0FERFI7CisJcmV0dXJuIEZBSUw7Cit9CisKK3N0YXRpYyBpbnQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJmcF9nZXRfcGFuZWxfaWQoKVxuIik7CisKKwlpZiAocGFuZWxfaWQgPiBMQ0RfUEFORUxfSURfTUFYSU1VTSkKKwkJdmlhZmJfbGNkX3BhbmVsX2lkID0gcGFuZWxfaWQgPQorCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1IzRikgJiAweDBGOworCisJc3dpdGNoIChwYW5lbF9pZCkgeworCWNhc2UgMHgwOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA2NDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQwXzY0MFg0ODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNDAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSURBXzgwMFg0ODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg0ODA7CisJCWJyZWFrOworCWNhc2UgMHg5OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhBOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhCOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhDOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhEOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMHhFOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNDAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMHhGOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTM2NjsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDdfMTM2Nlg3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzEzNjhYNzY4OworCQlicmVhazsKKwljYXNlIDB4MTE6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQ4XzEwMjRYNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDYwMDsKKwkJYnJlYWs7CisJY2FzZSAweDEyOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgxMzoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTI4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gODAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDlfMTI4MFg4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzEyODBYODAwOworCQlicmVhazsKKwljYXNlIDB4MTQ6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEzNjA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSURCXzEzNjBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMzYwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgxNjoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gNDgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA2NDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEQ180ODBYNjQwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU180ODBYNjQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CisJfQorfQorCitzdGF0aWMgaW50IGx2ZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpCit7CisJdTggZGF0YTsKKworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkgICAgbHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCQkodTgpIGluZGV4LCAmZGF0YSk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3NjYWxpbmcoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLAorCQkgICAgICBpbnQgcGFuZWxfdnJlcykKK3sKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnID0gTlVMTDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3NjYWxpbmcoKSEhXG4iKTsKKworCS8qIExDRCBTY2FsaW5nIEVuYWJsZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDA3LCBCSVQwICsgQklUMSArIEJJVDIpOworCWlmIChVTklDSFJPTUVfUDRNOTAwID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQl2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoc2V0X2hyZXMsIHNldF92cmVzLAorCQkJCQkgICAgICAgcGFuZWxfaHJlcywgcGFuZWxfdnJlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBpZiBleHBhbnNpb24gZm9yIGhvcml6b250YWwgKi8KKwlpZiAoc2V0X2hyZXMgIT0gcGFuZWxfaHJlcykgeworCQkvKiBMb2FkIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBDTEUyNjZfTENEX0hPUl9TQ0ZfRk9STVVMQShzZXRfaHJlcywgcGFuZWxfaHJlcyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUubGNkX2hvcl9zY2FsaW5nX2ZhY3Rvci4KKwkJCSAgICByZWdfbnVtOworCQkJcmVnID0gbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBLODAwX0xDRF9IT1JfU0NGX0ZPUk1VTEEoc2V0X2hyZXMsIHBhbmVsX2hyZXMpOworCQkJLyogSG9yaXpvbnRhbCBzY2FsaW5nIGVuYWJsZWQgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweEMwLCBCSVQ3ICsgQklUNik7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLnJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3IubGNkX2hvcl9zY2FsaW5nX2ZhY3Rvci5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJCWJyZWFrOworCQl9CisKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiSG9yaXpvbnRhbCBTY2FsaW5nIHZhbHVlID0gJWQiLCByZWdfdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIEhvcml6b250YWwgc2NhbGluZyBkaXNhYmxlZCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkEyLCBWSUFDUiwgMHgwMCwgQklUNyk7CisJfQorCisJLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciB2ZXJ0aWNhbCAqLworCWlmIChzZXRfdnJlcyAhPSBwYW5lbF92cmVzKSB7CisJCS8qIExvYWQgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBDTEUyNjZfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUubGNkX3Zlcl9zY2FsaW5nX2ZhY3Rvci4KKwkJCSAgICByZWdfbnVtOworCQkJcmVnID0gbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBLODAwX0xDRF9WRVJfU0NGX0ZPUk1VTEEoc2V0X3ZyZXMsIHBhbmVsX3ZyZXMpOworCQkJLyogVmVydGljYWwgc2NhbGluZyBlbmFibGVkICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkEyLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLnJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3IubGNkX3Zlcl9zY2FsaW5nX2ZhY3Rvci5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJCWJyZWFrOworCQl9CisKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVmVydGljYWwgU2NhbGluZyB2YWx1ZSA9ICVkIiwgcmVnX3ZhbHVlKTsKKwl9IGVsc2UgeworCQkvKiBWZXJ0aWNhbCBzY2FsaW5nIGRpc2FibGVkICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweDAwLCBCSVQzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKGludCBzZXRfaHJlcywgaW50IHNldF92cmVzLAorCWludCBwYW5lbF9pZCkKK3sKKwlpbnQgdm1vZGVfaW5kZXg7CisJaW50IHJlZ19udW0gPSAwOworCXN0cnVjdCBpb19yZWcgKmxjZF9wYXRjaF9yZWcgPSBOVUxMOworCisJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0EyKQorCQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcywgMSk7CisJZWxzZQorCQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcywgMCk7CisJc3dpdGNoIChwYW5lbF9pZCkgeworCQkvKiBMQ0QgODAweDYwMCAqLworCWNhc2UgTENEX1BBTkVMX0lEMV84MDBYNjAwOgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDAwOgorCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF84WDY7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF84WDY7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzhYNjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfN1g0XzhYNjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJCS8qIExDRCAxMDI0eDc2OCAqLworCWNhc2UgTENEX1BBTkVMX0lEMl8xMDI0WDc2ODoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTBYNzsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzEwWDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEwWDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMFg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU184MDBYNjAwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzEwWDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMFg3OworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogTENEIDEyODB4MTAyNCAqLworCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTJYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTJYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTJYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEyWDEwOworCQkJYnJlYWs7CisKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTQwMHgxMDUwICovCisJY2FzZSBMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzE0WDEwOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU184MDBYNjAwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTRYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzEwMjRYNzY4OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6CisJCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogTENEIDE2MDB4MTIwMCAqLworCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYODAwOgorCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6CisJCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMlgxMF8xNlgxMjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTJYMTBfMTZYMTI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTM2Nng3NjggKi8KKwljYXNlIExDRF9QQU5FTF9JRDdfMTM2Nlg3Njg6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTM2Nlg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU183MjBYNDgwOgorCQljYXNlIFZJQV9SRVNfNzIwWDU3NjoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTM2Nlg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEzNjZYNzsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6CisJCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMlgxMF8xMzY2WDc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTM2MHg3NjggKi8KKwljYXNlIExDRF9QQU5FTF9JREJfMTM2MFg3Njg6CisJCWJyZWFrOworCX0KKwlpZiAocmVnX251bSAhPSAwKSB7CisJCS8qIEguVy4gUmVzZXQgOiBPTiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CisKKwkJdmlhZmJfd3JpdGVfcmVneChsY2RfcGF0Y2hfcmVnLCByZWdfbnVtKTsKKworCQkvKiBILlcuIFJlc2V0IDogT0ZGICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKworCQkvKiBSZXNldCBQTEwgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7CisKKwkJLyogRmlyZSEgKi8KKwkJb3V0YihpbmIoVklBUk1pc2MpIHwgKEJJVDIgKyBCSVQzKSwgVklBV01pc2MpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9sY2RfcDg4MF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkKQoreworCWludCB2bW9kZV9pbmRleDsKKwlpbnQgcmVnX251bSA9IDA7CisJc3RydWN0IGlvX3JlZyAqbGNkX3BhdGNoX3JlZyA9IE5VTEw7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAxKTsKKwllbHNlCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAwKTsKKworCXN3aXRjaCAocGFuZWxfaWQpIHsKKwljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU182WDRfMTRYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU182WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfN1g0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU183WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfMTJYMTBfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwl9CisJaWYgKHJlZ19udW0gIT0gMCkgeworCQkvKiBILlcuIFJlc2V0IDogT04gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOworCisJCXZpYWZiX3dyaXRlX3JlZ3gobGNkX3BhdGNoX3JlZywgcmVnX251bSk7CisKKwkJLyogSC5XLiBSZXNldCA6IE9GRiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CisKKwkJLyogUmVzZXQgUExMICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAyLCBCSVQxKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDAsIEJJVDEpOworCisJCS8qIEZpcmUhICovCisJCW91dGIoaW5iKFZJQVJNaXNjKSB8IChCSVQyICsgQklUMyksIFZJQVdNaXNjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3BhdGNoX3JlZ3MoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkLCBpbnQgc2V0X2lnYSkKK3sKKwlpbnQgdm1vZGVfaW5kZXg7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAxKTsKKwllbHNlCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAwKTsKKworCXZpYWZiX3VubG9ja19jcnQoKTsKKworCS8qIFBhdGNoIGZvciBzaW11bHRhbmVvdXMgJiBFeHBhbnNpb24gKi8KKwlpZiAoKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSAmJgorCQkodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09CisJICAgIExDRF9FWFBBTkRTSU9OKSkgeworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQlsb2FkX2xjZF9rNDAwX3BhdGNoX3RibChzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2lkKTsKKwkJCWJyZWFrOworCQljYXNlIFVOSUNIUk9NRV9LODAwOgorCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCQlsb2FkX2xjZF9wODgwX3BhdGNoX3RibChzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2lkKTsKKwkJfQorCX0KKworCXZpYWZiX2xvY2tfY3J0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9waXRjaF9hbGlnbm1lbnRfcGF0Y2hfbGNkKAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkJICAgKnBsdmRzX2NoaXBfaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyIGNyMTMsIGNyMzUsIGNyNjUsIGNyNjYsIGNyNjc7CisJdW5zaWduZWQgbG9uZyBkd1NjcmVlblBpdGNoID0gMDsKKwl1bnNpZ25lZCBsb25nIGR3UGl0Y2g7CisKKwlkd1BpdGNoID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSAqIChwbHZkc19zZXR0aW5nX2luZm8tPmJwcCA+PiAzKTsKKwlpZiAoZHdQaXRjaCAmIDB4MUYpIHsKKwkJZHdTY3JlZW5QaXRjaCA9ICgoZHdQaXRjaCArIDMxKSAmIH4zMSkgPj4gMzsKKwkJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikgeworCQkJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+YnBwID4gOCkgeworCQkJCWNyNjYgPSAodW5zaWduZWQgY2hhcikoZHdTY3JlZW5QaXRjaCAmIDB4RkYpOworCQkJCXZpYWZiX3dyaXRlX3JlZyhDUjY2LCBWSUFDUiwgY3I2Nik7CisJCQkJY3I2NyA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjY3KSAmIDB4RkM7CisJCQkJY3I2NyB8PQorCQkJCSAgICAodW5zaWduZWQKKwkJCQkgICAgIGNoYXIpKChkd1NjcmVlblBpdGNoICYgMHgzMDApID4+IDgpOworCQkJCXZpYWZiX3dyaXRlX3JlZyhDUjY3LCBWSUFDUiwgY3I2Nyk7CisJCQl9CisKKwkJCS8qIEZldGNoIENvdW50ICovCisJCQljcjY3ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNjcpICYgMHhGMzsKKwkJCWNyNjcgfD0gKHVuc2lnbmVkIGNoYXIpKChkd1NjcmVlblBpdGNoICYgMHg2MDApID4+IDcpOworCQkJdmlhZmJfd3JpdGVfcmVnKENSNjcsIFZJQUNSLCBjcjY3KTsKKwkJCWNyNjUgPSAodW5zaWduZWQgY2hhcikoKGR3U2NyZWVuUGl0Y2ggPj4gMSkgJiAweEZGKTsKKwkJCWNyNjUgKz0gMjsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjY1LCBWSUFDUiwgY3I2NSk7CisJCX0gZWxzZSB7CisJCQlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPiA4KSB7CisJCQkJY3IxMyA9ICh1bnNpZ25lZCBjaGFyKShkd1NjcmVlblBpdGNoICYgMHhGRik7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSMTMsIFZJQUNSLCBjcjEzKTsKKwkJCQljcjM1ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSMzUpICYgMHgxRjsKKwkJCQljcjM1IHw9CisJCQkJICAgICh1bnNpZ25lZAorCQkJCSAgICAgY2hhcikoKGR3U2NyZWVuUGl0Y2ggJiAweDcwMCkgPj4gMyk7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSMzUsIFZJQUNSLCBjcjM1KTsKKwkJCX0KKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIGxjZF9wYXRjaF9za2V3X2R2cDAoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCXZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NChwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJCQkgICAgcGx2ZHNfY2hpcF9pbmZvKTsKKwkJCWJyZWFrOworCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQl2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzMjcocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkJICAgIHBsdmRzX2NoaXBfaW5mbyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIGxjZF9wYXRjaF9za2V3X2R2cDEoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQkJdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI0KHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJCSAgICBwbHZkc19jaGlwX2luZm8pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCBsY2RfcGF0Y2hfc2tldyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gImxjZF9wYXRjaF9za2V3XG4iKTsKKwlzd2l0Y2ggKHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0RWUDA6CisJCWxjZF9wYXRjaF9za2V3X2R2cDAocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCQlicmVhazsKKwljYXNlIElOVEVSRkFDRV9EVlAxOgorCQlsY2RfcGF0Y2hfc2tld19kdnAxKHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBJTlRFUkZBQ0VfREZQX0xPVzoKKwkJaWYgKFVOSUNIUk9NRV9QNE05MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwOCwKKwkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyICsgQklUMyk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCisvKiBMQ0QgU2V0IE1vZGUgKi8KK3ZvaWQgdmlhZmJfbGNkX3NldF9tb2RlKHN0cnVjdCBjcnRfbW9kZV90YWJsZSAqbW9kZV9jcnRfdGFibGUsCisJCSAgc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlpbnQgdmlkZW9faW5kZXggPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplOworCWludCBzZXRfaWdhID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKKwlpbnQgbW9kZV9icHAgPSBwbHZkc19zZXR0aW5nX2luZm8tPmJwcDsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtID0gMDsKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlpbnQgc2V0X2hyZXMsIHNldF92cmVzOworCWludCBwYW5lbF9ocmVzLCBwYW5lbF92cmVzOworCXUzMiBwbGxfRF9OOworCWludCBvZmZzZXQ7CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWc7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpwYW5lbF9jcnRfdGFibGUgPSBOVUxMOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsID0gTlVMTDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xjZF9zZXRfbW9kZSEhXG4iKTsKKwkvKiBHZXQgbW9kZSB0YWJsZSAqLworCW1vZGVfY3J0X3JlZyA9IG1vZGVfY3J0X3RhYmxlLT5jcnRjOworCS8qIEdldCBwYW5lbCB0YWJsZSBQb2ludGVyICovCisJdm1vZGVfdGJsID0gdmlhZmJfZ2V0X21vZGV0YmxfcG9pbnRlcih2aWRlb19pbmRleCk7CisJcGFuZWxfY3J0X3RhYmxlID0gdm1vZGVfdGJsLT5jcnRjOworCXBhbmVsX2NydF9yZWcgPSBwYW5lbF9jcnRfdGFibGUtPmNydGM7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiYmVsbG93IHZpYWZiX2xjZF9zZXRfbW9kZSEhXG4iKTsKKwlzZXRfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmU7CisJc2V0X3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlOworCXBhbmVsX2hyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzOworCXBhbmVsX3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzOworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKQorCQl2aWFmYl9pbml0X2x2ZHNfdnQxNjM2KHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvKTsKKwlwbHZkc19zZXR0aW5nX2luZm8tPnZjbGsgPSBwYW5lbF9jcnRfdGFibGUtPmNsazsKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCS8qIElHQTEgZG9lc24ndCBoYXZlIExDRCBzY2FsaW5nLCBzbyBzZXQgaXQgYXMgY2VudGVyaW5nLiAqLworCQl2aWFmYl9sb2FkX2NydGNfdGltaW5nKGxjZF9jZW50ZXJpbmdfdGltZ2luZworCQkJCSAobW9kZV9jcnRfcmVnLCBwYW5lbF9jcnRfcmVnKSwgSUdBMSk7CisJfSBlbHNlIHsKKwkJLyogRXhwYW5zaW9uICovCisJCWlmICgocGx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9PQorCQkgICAgIExDRF9FWFBBTkRTSU9OKSAmICgoc2V0X2hyZXMgIT0gcGFuZWxfaHJlcykKKwkJCQkJfHwgKHNldF92cmVzICE9IHBhbmVsX3ZyZXMpKSkgeworCQkJLyogZXhwYW5zaW9uIHRpbWluZyBJR0EyIGxvYWRlZCBwYW5lbCBzZXQgdGltaW5nKi8KKwkJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcocGFuZWxfY3J0X3JlZywgSUdBMik7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sb2FkX2NydGNfdGltaW5nISFcbiIpOworCQkJbG9hZF9sY2Rfc2NhbGluZyhzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2hyZXMsCisJCQkJCSBwYW5lbF92cmVzKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3NjYWxpbmchIVxuIik7CisJCX0gZWxzZSB7CS8qIENlbnRlcmluZyAqLworCQkJLyogY2VudGVyaW5nIHRpbWluZyBJR0EyIGFsd2F5cyBsb2FkZWQgcGFuZWwKKwkJCSAgIGFuZCBtb2RlIHJlbGVhdGl2ZSB0aW1pbmcgKi8KKwkJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcobGNkX2NlbnRlcmluZ190aW1naW5nCisJCQkJCSAobW9kZV9jcnRfcmVnLCBwYW5lbF9jcnRfcmVnKSwgSUdBMik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc5LCBWSUFDUiwgMHgwMCwKKwkJCQlCSVQwICsgQklUMSArIEJJVDIpOworCQkJLyogTENEIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJfQorCX0KKworCWlmIChzZXRfaWdhID09IElHQTFfSUdBMikgeworCQlsb2FkX2NydGNfc2hhZG93X3RpbWluZyhtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpOworCQkvKiBGaWxsIHNoYWRvdyByZWdpc3RlcnMgKi8KKworCQlzd2l0Y2ggKHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkKSB7CisJCWNhc2UgTENEX1BBTkVMX0lEMF82NDBYNDgwOgorCQkJb2Zmc2V0ID0gODA7CisJCQlicmVhazsKKwkJY2FzZSBMQ0RfUEFORUxfSUQxXzgwMFg2MDA6CisJCWNhc2UgTENEX1BBTkVMX0lEQV84MDBYNDgwOgorCQkJb2Zmc2V0ID0gMTEwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lEMl8xMDI0WDc2ODoKKwkJCW9mZnNldCA9IDE1MDsKKwkJCWJyZWFrOworCQljYXNlIExDRF9QQU5FTF9JRDNfMTI4MFg3Njg6CisJCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCWNhc2UgTENEX1BBTkVMX0lENV8xNDAwWDEwNTA6CisJCWNhc2UgTENEX1BBTkVMX0lEOV8xMjgwWDgwMDoKKwkJCW9mZnNldCA9IDE5MDsKKwkJCWJyZWFrOworCQljYXNlIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOgorCQkJb2Zmc2V0ID0gMjUwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lEN18xMzY2WDc2ODoKKwkJY2FzZSBMQ0RfUEFORUxfSURCXzEzNjBYNzY4OgorCQkJb2Zmc2V0ID0gMjEyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvZmZzZXQgPSAxNDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE9mZnNldCBmb3Igc2ltdWx0YW5lb3VzICovCisJCXJlZ192YWx1ZSA9IG9mZnNldDsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnX251bTsKKwkJcmVnID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xvYWRfcmVnISFcbiIpOworCQl2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhzZXRfaHJlcywgNCwgSUdBMik7CisJCS8qIEZldGNoIGNvdW50IGZvciBzaW11bHRhbmVvdXMgKi8KKwl9IGVsc2UgewkJLyogU0FNTSAqLworCQkvKiBPZmZzZXQgZm9yIElHQTIgb25seSAqLworCQl2aWFmYl9sb2FkX29mZnNldF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisJCS8qIEZldGNoIGNvdW50IGZvciBJR0EyIG9ubHkgKi8KKwkJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisKKwkJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikKKwkJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0s0MDApKQorCQkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBzZXRfaHJlcywgc2V0X3ZyZXMpOworCisJCXZpYWZiX3NldF9jb2xvcl9kZXB0aChtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOworCX0KKworCWZpbGxfbGNkX2Zvcm1hdCgpOworCisJcGxsX0RfTiA9IHZpYWZiX2dldF9jbGtfdmFsdWUocGFuZWxfY3J0X3RhYmxlWzBdLmNsayk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPTB4JXgiLCBwbGxfRF9OKTsKKwl2aWFmYl9zZXRfdmNsb2NrKHBsbF9EX04sIHNldF9pZ2EpOworCisJdmlhZmJfc2V0X291dHB1dF9wYXRoKERFVklDRV9MQ0QsIHNldF9pZ2EsCisJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSk7CisJbGNkX3BhdGNoX3NrZXcocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCisJLyogSWYgSzhNODAwLCBlbmFibGUgTENEIFByZWZldGNoIE1vZGUuICovCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApCisJICAgIHx8IChVTklDSFJPTUVfSzhNODkwID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkpCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAxLCBCSVQwKTsKKworCWxvYWRfbGNkX3BhdGNoX3JlZ3Moc2V0X2hyZXMsIHNldF92cmVzLAorCQkJICAgIHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkLCBzZXRfaWdhKTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3BhdGNoX3JlZ3MhIVxuIik7CisKKwkvKiBQYXRjaCBmb3Igbm9uIDMyYml0IGFsaWdubWVudCBtb2RlICovCisJdmlhX3BpdGNoX2FsaWdubWVudF9wYXRjaF9sY2QocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBpbnRlZ3JhdGVkX2x2ZHNfZGlzYWJsZShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgICAgICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgICAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlib29sIHR1cm5fb2ZmX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSBmYWxzZTsKKwlib29sIHR1cm5fb2ZmX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7CisJaWYgKElOVEVSRkFDRV9MVkRTMExWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vZmZfZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisJaWYgKElOVEVSRkFDRV9MVkRTMCA9PSBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpCisJCXR1cm5fb2ZmX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSB0cnVlOworCWlmIChJTlRFUkZBQ0VfTFZEUzEgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29mZl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisJaWYgKHR1cm5fb2ZmX3NlY29uZF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBzZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbDogKi8KKworCQkvKiBUdXJuIG9mZiBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDAsIEJJVDEpOworCisJCS8qIFR1cm4gb2ZmIGJhY2sgbGlnaHQuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAweEMwLCBCSVQ2ICsgQklUNyk7CisJfQorCWlmICh0dXJuX29mZl9maXJzdF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBmaXJzdCBwb3dlciBzZXF1ZW5jZSBjb250cm9sOiAqLworCisJCS8qIFR1cm4gb2ZmIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMCwgQklUMyk7CisKKwkJLyogVHVybiBvZmYgYmFjayBsaWdodC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwl9CisKKwkvKiBUdXJuIERGUCBIaWdoL0xvdyBQYWQgb2ZmLiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAwLCBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKworCS8qIFBvd2VyIG9mZiBMVkRTIGNoYW5uZWwuICovCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9MVkRTMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4ODAsIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0xWRFMxOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHg0MCwgQklUNik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfTFZEUzBMVkRTMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlZ3JhdGVkX2x2ZHNfZW5hYmxlKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJICAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlib29sIHR1cm5fb25fZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IGZhbHNlOworCWJvb2wgdHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IGZhbHNlOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiaW50ZWdyYXRlZF9sdmRzX2VuYWJsZSwgb3V0X2ludGVyZmFjZTolZFxuIiwKKwkJICBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpOworCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID09IExDRF9TUFdHKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgwMCwgQklUMCArIEJJVDEpOworCSBlbHNlCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAzLCBCSVQwICsgQklUMSk7CisJaWYgKElOVEVSRkFDRV9MVkRTMExWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMwID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisKKwlpZiAodHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSkgeworCQkvKiBVc2Ugc2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCisKKwkJLyogVXNlIGhhcmR3YXJlIGNvbnRyb2wgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQwKTsKKworCQkvKiBUdXJuIG9uIGJhY2sgbGlnaHQuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7CisKKwkJLyogVHVybiBvbiBoYXJkd2FyZSBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDB4MDIsIEJJVDEpOworCX0KKwlpZiAodHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBmaXJzdCBwb3dlciBzZXF1ZW5jZSBjb250cm9sOiAqLworCisJCS8qIFVzZSBoYXJkd2FyZSBjb250cm9sIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMCwgQklUMCk7CisKKwkJLyogVHVybiBvbiBiYWNrIGxpZ2h0LiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMCwgQklUNiArIEJJVDcpOworCisJCS8qIFR1cm4gb24gaGFyZHdhcmUgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwl9CisKKwkvKiBUdXJuIERGUCBIaWdoL0xvdyBwYWQgb24uICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MEYsIEJJVDAgKyBCSVQxICsgQklUMiArIEJJVDMpOworCisJLyogUG93ZXIgb24gTFZEUyBjaGFubmVsLiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfTFZEUzA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAwLCBCSVQ3KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDYpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0xWRFMwTFZEUzE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCB2aWFmYl9sY2RfZGlzYWJsZSh2b2lkKQoreworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSB7CisJCWxjZF9wb3dlcnNlcXVlbmNlX29mZigpOworCQkvKiBESTEgcGFkIG9mZiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgwMCwgMHgzMCk7CisJfSBlbHNlIGlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKSB7CisJCWlmICh2aWFmYl9MQ0QyX09OCisJCSAgICAmJiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkpCisJCQlpbnRlZ3JhdGVkX2x2ZHNfZGlzYWJsZSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIpOworCQlpZiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJaW50ZWdyYXRlZF9sdmRzX2Rpc2FibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCWx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIGlmIChWVDE2MzZfTFZEUyA9PQorCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwkJdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCX0gZWxzZSB7CisJCS8qIERGUC1ITCBwYWQgb2ZmICAgICAgICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAwLCAweDBGKTsKKwkJLyogQmFja2xpZ2h0IG9mZiAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IzRCwgVklBU1IsIDB4MDAsIDB4MjApOworCQkvKiAyNCBiaXQgREkgZGF0YSBwYWh0IG9mZiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMHg4MCwgMHg4MCk7CisJCS8qIFNpbXVsdGFuZW91dCBkaXNhYmxlZCAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCAweDA4KTsKKwl9CisKKwkvKiBEaXNhYmxlIGV4cGFuc2lvbiBiaXQgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDAwLCAweDAxKTsKKwkvKiBDUlQgcGF0aCBzZXQgdG8gSUdBMSAgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDAwLCAweDQwKTsKKwkvKiBTaW11bHRhbmVvdXQgZGlzYWJsZWQgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCAweDA4KTsKKwkvKiBJR0EyIHBhdGggZGlzYWJsZWQgICAgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCAweDgwKTsKKworfQorCit2b2lkIHZpYWZiX2xjZF9lbmFibGUodm9pZCkKK3sKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJLyogREkxIHBhZCBvbiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgzMCwgMHgzMCk7CisJCWxjZF9wb3dlcnNlcXVlbmNlX29uKCk7CisJfSBlbHNlIGlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKSB7CisJCWlmICh2aWFmYl9MQ0QyX09OICYmIChJTlRFR1JBVEVEX0xWRFMgPT0KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSkKKwkJCWludGVncmF0ZWRfbHZkc19lbmFibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLCBcCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yKTsKKwkJaWYgKElOVEVHUkFURURfTFZEUyA9PQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkKKwkJCWludGVncmF0ZWRfbHZkc19lbmFibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCWx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHZpYXBhcmluZm8tPgorCQkJbHZkc19zZXR0aW5nX2luZm8sICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8pOworCX0gZWxzZSBpZiAoVlQxNjM2X0xWRFMgPT0KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJCXZpYWZiX2VuYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIHsKKwkJLyogREZQLUhMIHBhZCBvbiAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MEYsIDB4MEYpOworCQkvKiBCYWNrbGlnaHQgb24gICAgICAgICAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjNELCBWSUFTUiwgMHgyMCwgMHgyMCk7CisJCS8qIDI0IGJpdCBESSBkYXRhIHBhaHQgb24gICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDAwLCAweDgwKTsKKworCQkvKiBTZXQgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIGJpdCBieSBpZ2EgcGF0aCAqLworCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCS8qIERGUC1IIHNldCB0byBJR0ExICAgICAgICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgwMCwgMHgxMCk7CisJCQkvKiBERlAtTCBzZXQgdG8gSUdBMSAgICAgICAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIDB4MTApOworCQl9IGVsc2UgeworCQkJLyogREZQLUggc2V0IHRvIElHQTIgICAgICAgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDEwLCAweDEwKTsKKwkJCS8qIERGUC1MIHNldCB0byBJR0EyICAgICAgICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgMHgxMCk7CisJCX0KKwkJLyogTENEIGVuYWJsZWQgICAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4NDgsIDB4NDgpOworCX0KKworCWlmICgodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpCisJICAgIHx8ICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMV9JR0EyKSkgeworCQkvKiBDUlQgcGF0aCBzZXQgdG8gSUdBMiAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg0MCwgMHg0MCk7CisJCS8qIElHQTIgcGF0aCBkaXNhYmxlZCAgICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCAweDgwKTsKKwkJLyogSUdBMiBwYXRoIGVuYWJsZWQgICAgICAgKi8KKwl9IGVsc2UgewkJLyogSUdBMiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHg4MCwgMHg4MCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29mZih2b2lkKQoreworCWludCBpLCBtYXNrLCBkYXRhOworCisJLyogU29mdHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDExLCAweDExKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJbWFzayA9IFBvd2VyU2VxdWVuY2VPZmZbMF1baV07CisJCWRhdGEgPSBQb3dlclNlcXVlbmNlT2ZmWzFdW2ldICYgbWFzazsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsICh1OCkgZGF0YSwgKHU4KSBtYXNrKTsKKwkJdWRlbGF5KFBvd2VyU2VxdWVuY2VPZmZbMl1baV0pOworCX0KKworCS8qIERpc2FibGUgTENEICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDAsIDB4MDgpOworfQorCitzdGF0aWMgdm9pZCBsY2RfcG93ZXJzZXF1ZW5jZV9vbih2b2lkKQoreworCWludCBpLCBtYXNrLCBkYXRhOworCisJLyogU29mdHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDExLCAweDExKTsKKworCS8qIEVuYWJsZSBMQ0QgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwOCwgMHgwOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCW1hc2sgPSBQb3dlclNlcXVlbmNlT25bMF1baV07CisJCWRhdGEgPSBQb3dlclNlcXVlbmNlT25bMV1baV0gJiBtYXNrOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgKHU4KSBkYXRhLCAodTgpIG1hc2spOworCQl1ZGVsYXkoUG93ZXJTZXF1ZW5jZU9uWzJdW2ldKTsKKwl9CisKKwl1ZGVsYXkoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbGNkX2Zvcm1hdCh2b2lkKQoreworCXU4IGJkaXRoZXJpbmcgPSAwLCBiZHVhbCA9IDA7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpCisJCWJkdWFsID0gQklUNDsKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZykKKwkJYmRpdGhlcmluZyA9IEJJVDA7CisJLyogRHVhbCAmIERpdGhlcmluZyAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSODgsIFZJQUNSLCAoYmRpdGhlcmluZyB8IGJkdWFsKSwgQklUNCArIEJJVDApOworfQorCitzdGF0aWMgdm9pZCBjaGVja19kaXBvcnRfb2ZfaW50ZWdyYXRlZF9sdmRzKAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbywKKwkJCQkgICAgIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkgICAgICpwbHZkc19zZXR0aW5nX2luZm8pCit7CisJLyogRGV0ZXJtaW5lIExDRCBESSBQb3J0IGJ5IGhhcmR3YXJlIGxheW91dC4gKi8KKwlzd2l0Y2ggKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0KSB7CisJY2FzZSBIV19MQVlPVVRfTENEX09OTFk6CisJCXsKKwkJCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpIHsKKwkJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPQorCQkJCSAgICBJTlRFUkZBQ0VfTFZEUzBMVkRTMTsKKwkJCX0gZWxzZSB7CisJCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCQkgICAgSU5URVJGQUNFX0xWRFMwOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCisJY2FzZSBIV19MQVlPVVRfRFZJX09OTFk6CisJCXsKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9OT05FOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSFdfTEFZT1VUX0xDRDFfTENEMjoKKwljYXNlIEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMjoKKwkJeworCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCSAgICBJTlRFUkZBQ0VfTFZEUzBMVkRTMTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIEhXX0xBWU9VVF9MQ0RfRFZJOgorCQl7CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfTFZEUzE7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0xWRFMxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSAgIkRpc3BsYXkgSGFyZHdhcmUgTGF5b3V0OiAweCV4LCBMQ0QgREkgUG9ydDogMHgleFxuIiwKKwkJICB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwKKwkJICBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpOworfQorCit2b2lkIHZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfY2hpcF9pbmZvLAorCQkJCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfc2V0dGluZ19pbmZvKQoreworCWlmIChJTlRFUkZBQ0VfTk9ORSAhPSBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwkJLypEbyBub3RoaW5nLCBsY2QgcG9ydCBpcyBzcGVjaWZpZWQgYnkgbW9kdWxlIHBhcmFtZXRlciAqLworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisKKwljYXNlIFZUMTYzNl9MVkRTOgorCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAxOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUF9MT1c7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVHUkFURURfTFZEUzoKKwkJY2hlY2tfZGlwb3J0X29mX2ludGVncmF0ZWRfbHZkcyhwbHZkc19jaGlwX2luZm8sCisJCQkJCQlwbHZkc19zZXR0aW5nX2luZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQX0xPVzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBsY2RfY2VudGVyaW5nX3RpbWdpbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nCisJCQkJCSAgICBtb2RlX2NydF9yZWcsCisJCQkJCSAgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfY3J0X3JlZykKK3sKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0X3JlZzsKKworCWNydF9yZWcuaG9yX3RvdGFsID0gcGFuZWxfY3J0X3JlZy5ob3JfdG90YWw7CisJY3J0X3JlZy5ob3JfYWRkciA9IG1vZGVfY3J0X3JlZy5ob3JfYWRkcjsKKwljcnRfcmVnLmhvcl9ibGFua19zdGFydCA9CisJICAgIChwYW5lbF9jcnRfcmVnLmhvcl9hZGRyIC0gbW9kZV9jcnRfcmVnLmhvcl9hZGRyKSAvIDIgKworCSAgICBjcnRfcmVnLmhvcl9hZGRyOworCWNydF9yZWcuaG9yX2JsYW5rX2VuZCA9IHBhbmVsX2NydF9yZWcuaG9yX2JsYW5rX2VuZDsKKwljcnRfcmVnLmhvcl9zeW5jX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcuaG9yX3N5bmNfc3RhcnQgLQorCSAgICAgcGFuZWxfY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQpICsgY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQ7CisJY3J0X3JlZy5ob3Jfc3luY19lbmQgPSBwYW5lbF9jcnRfcmVnLmhvcl9zeW5jX2VuZDsKKworCWNydF9yZWcudmVyX3RvdGFsID0gcGFuZWxfY3J0X3JlZy52ZXJfdG90YWw7CisJY3J0X3JlZy52ZXJfYWRkciA9IG1vZGVfY3J0X3JlZy52ZXJfYWRkcjsKKwljcnRfcmVnLnZlcl9ibGFua19zdGFydCA9CisJICAgIChwYW5lbF9jcnRfcmVnLnZlcl9hZGRyIC0gbW9kZV9jcnRfcmVnLnZlcl9hZGRyKSAvIDIgKworCSAgICBjcnRfcmVnLnZlcl9hZGRyOworCWNydF9yZWcudmVyX2JsYW5rX2VuZCA9IHBhbmVsX2NydF9yZWcudmVyX2JsYW5rX2VuZDsKKwljcnRfcmVnLnZlcl9zeW5jX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcudmVyX3N5bmNfc3RhcnQgLQorCSAgICAgcGFuZWxfY3J0X3JlZy52ZXJfYmxhbmtfc3RhcnQpICsgY3J0X3JlZy52ZXJfYmxhbmtfc3RhcnQ7CisJY3J0X3JlZy52ZXJfc3luY19lbmQgPSBwYW5lbF9jcnRfcmVnLnZlcl9zeW5jX2VuZDsKKworCXJldHVybiBjcnRfcmVnOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2NydGNfc2hhZG93X3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbW9kZV90aW1pbmcsCisJCQkgICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF90aW1pbmcpCit7CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCWludCBpOworCWludCB2aWFmYl9sb2FkX3JlZ19OdW0gPSAwOworCWludCByZWdfdmFsdWUgPSAwOworCisJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9PSBMQ0RfRVhQQU5EU0lPTikgeworCQkvKiBFeHBhbnNpb24gKi8KKwkJZm9yIChpID0gMTI7IGkgPCAyMDsgaSsrKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLmhvcl90b3RhbF9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9UT1RBTF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl90b3RhbF9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQUREUl9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQUREUl9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfYWRkcl9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfU1RBUlRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19TVEFSVF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9zeW5jX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX3N5bmNfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9zeW5jX3N0YXJ0X3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3N5bmNfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcudmVyX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX3N5bmNfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfc3luY19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0sIHJlZywgVklBQ1IpOworCQl9CisJfSBlbHNlIHsJCS8qIENlbnRlcmluZyAqLworCQlmb3IgKGkgPSAxMjsgaSA8IDIwOyBpKyspIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBIX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy5ob3JfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9BRERSX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChtb2RlX3RpbWluZy52ZXJfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9hZGRyX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfU0FUUlRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0JMQU5LX1NUQVJUX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChtb2RlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19TVEFSVF9TSEFET1dfRk9STVVMQSgKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCAtCisJCQkJICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpICsKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYWRkciAtCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyKSAvIDIgKworCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnRfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0X3NoYWRvdy4KKwkJCQkgICAgcmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9TWU5DX0VORF9TSEFET1dfRk9STVVMQSgKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCAtCisJCQkJICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpICsKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYWRkciAtCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyKSAvIDIgKworCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkciwKKwkJCQkgICAgcGFuZWxfdGltaW5nLnZlcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfZW5kX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfc3luY19lbmRfc2hhZG93LgorCQkJCSAgICByZWc7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtLCByZWcsIFZJQUNSKTsKKwkJfQorCX0KK30KKworYm9vbCB2aWFmYl9sY2RfZ2V0X21vYmlsZV9zdGF0ZShib29sICptb2JpbGUpCit7CisJdW5zaWduZWQgY2hhciAqcm9tcHRyLCAqdGFibGVwdHI7CisJdTggY29yZV9iYXNlOworCXVuc2lnbmVkIGNoYXIgKmJpb3NwdHI7CisJLyogUm9tIGFkZHJlc3MgKi8KKwl1MzIgcm9tYWRkciA9IDB4MDAwQzAwMDA7CisJdTE2IHN0YXJ0X3BhdHRlcm4gPSAwOworCisJYmlvc3B0ciA9IGlvcmVtYXAocm9tYWRkciwgMHgxMDAwMCk7CisKKwltZW1jcHkoJnN0YXJ0X3BhdHRlcm4sIGJpb3NwdHIsIDIpOworCS8qIENvbXBhcmUgcGF0dGVybiAqLworCWlmIChzdGFydF9wYXR0ZXJuID09IDB4QUE1NSkgeworCQkvKiBHZXQgdGhlIHN0YXJ0IG9mIFRhYmxlICovCisJCS8qIDB4MUIgbWVhbnMgQklPUyBvZmZzZXQgcG9zaXRpb24gKi8KKwkJcm9tcHRyID0gYmlvc3B0ciArIDB4MUI7CisJCXRhYmxlcHRyID0gYmlvc3B0ciArICooKHUxNiAqKSByb21wdHIpOworCisJCS8qIEdldCB0aGUgc3RhcnQgb2YgYmlvc3ZlciBzdHJ1Y3R1cmUgKi8KKwkJLyogMTggbWVhbnMgQklPUyB2ZXJzaW9uIHBvc2l0aW9uLiAqLworCQlyb21wdHIgPSB0YWJsZXB0ciArIDE4OworCQlyb21wdHIgPSBiaW9zcHRyICsgKigodTE2ICopIHJvbXB0cik7CisKKwkJLyogVGhlIG9mZnNldCBzaG91bGQgYmUgNDQsIGJ1dCB0aGUKKwkJICAgYWN0dWFsIGltYWdlIGlzIGxlc3MgdGhyZWUgY2hhci4gKi8KKwkJLyogcFJvbSArPSA0NDsgKi8KKwkJcm9tcHRyICs9IDQxOworCisJCWNvcmVfYmFzZSA9ICpyb21wdHIrKzsKKworCQlpZiAoY29yZV9iYXNlICYgMHg4KQorCQkJKm1vYmlsZSA9IGZhbHNlOworCQllbHNlCisJCQkqbW9iaWxlID0gdHJ1ZTsKKwkJLyogcmVsZWFzZSBtZW1vcnkgKi8KKwkJaW91bm1hcChiaW9zcHRyKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQlpb3VubWFwKGJpb3NwdHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCB2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoaW50IHNldF9ocmVzLAorCWludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsIGludCBwYW5lbF92cmVzKQoreworCWludCBoX3NjYWxpbmdfZmFjdG9yOworCWludCB2X3NjYWxpbmdfZmFjdG9yOworCXU4IGNyYTIgPSAwOworCXU4IGNyNzcgPSAwOworCXU4IGNyNzggPSAwOworCXU4IGNyNzkgPSAwOworCXU4IGNyOWYgPSAwOworCS8qIENoZWNrIGlmIGV4cGFuc2lvbiBmb3IgaG9yaXpvbnRhbCAqLworCWlmIChzZXRfaHJlcyA8IHBhbmVsX2hyZXMpIHsKKwkJLyogTG9hZCBIb3Jpem9udGFsIFNjYWxpbmcgRmFjdG9yICovCisKKwkJLyogRm9yIFZJQV9LOE04MDAgb3IgbGF0ZXIgY2hpcHNldHMuICovCisJCWhfc2NhbGluZ19mYWN0b3IgPQorCQkgICAgSzgwMF9MQ0RfSE9SX1NDRl9GT1JNVUxBKHNldF9ocmVzLCBwYW5lbF9ocmVzKTsKKwkJLyogSFNDYWxlRmFjdG9yWzE6MF0gYXQgQ1I5RlsxOjBdICovCisJCWNyOWYgPSBoX3NjYWxpbmdfZmFjdG9yICYgMHgwMDAzOworCQkvKiBIU0NhbGVGYWN0b3JbOToyXSBhdCBDUjc3Wzc6MF0gKi8KKwkJY3I3NyA9IChoX3NjYWxpbmdfZmFjdG9yICYgMHgwM0ZDKSA+PiAyOworCQkvKiBIU0NhbGVGYWN0b3JbMTE6MTBdIGF0IENSNzlbNTo0XSAqLworCQljcjc5ID0gKGhfc2NhbGluZ19mYWN0b3IgJiAweDBDMDApID4+IDEwOworCQljcjc5IDw8PSA0OworCisJCS8qIEhvcml6b250YWwgc2NhbGluZyBlbmFibGVkICovCisJCWNyYTIgPSAweEMwOworCisJCURFQlVHX01TRyhLRVJOX0lORk8gIkhvcml6b250YWwgU2NhbGluZyB2YWx1ZSA9ICVkXG4iLAorCQkJICBoX3NjYWxpbmdfZmFjdG9yKTsKKwl9IGVsc2UgeworCQkvKiBIb3Jpem9udGFsIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJY3JhMiA9IDB4MDA7CisJfQorCisJLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciB2ZXJ0aWNhbCAqLworCWlmIChzZXRfdnJlcyA8IHBhbmVsX3ZyZXMpIHsKKwkJLyogTG9hZCBWZXJ0aWNhbCBTY2FsaW5nIEZhY3RvciAqLworCisJCS8qIEZvciBWSUFfSzhNODAwIG9yIGxhdGVyIGNoaXBzZXRzLiAqLworCQl2X3NjYWxpbmdfZmFjdG9yID0KKwkJICAgIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7CisKKwkJLyogVmVydGljYWwgc2NhbGluZyBlbmFibGVkICovCisJCWNyYTIgfD0gMHgwODsKKwkJLyogVlNDYWxlRmFjdG9yWzBdIGF0IENSNzlbM10gKi8KKwkJY3I3OSB8PSAoKHZfc2NhbGluZ19mYWN0b3IgJiAweDAwMDEpIDw8IDMpOworCQkvKiBWU0NhbGVGYWN0b3JbODoxXSBhdCBDUjc4Wzc6MF0gKi8KKwkJY3I3OCB8PSAodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDFGRSkgPj4gMTsKKwkJLyogVlNDYWxlRmFjdG9yWzEwOjldIGF0IENSNzlbNzo2XSAqLworCQljcjc5IHw9ICgodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDYwMCkgPj4gOSkgPDwgNjsKKworCQlERUJVR19NU0coS0VSTl9JTkZPICJWZXJ0aWNhbCBTY2FsaW5nIHZhbHVlID0gJWRcbiIsCisJCQkgIHZfc2NhbGluZ19mYWN0b3IpOworCX0gZWxzZSB7CisJCS8qIFZlcnRpY2FsIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJY3JhMiB8PSAweDAwOworCX0KKworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCBjcmEyLCBCSVQzICsgQklUNiArIEJJVDcpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzcsIFZJQUNSLCBjcjc3LCAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc4LCBWSUFDUiwgY3I3OCwgMHhGRik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIGNyNzksIDB4RjgpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUYsIFZJQUNSLCBjcjlmLCBCSVQwICsgQklUMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWY0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0xDRF9IX18KKyNkZWZpbmUgX19MQ0RfSF9fCisKKy8qRGVmaW5pdGlvbiBUTURTIERldmljZSBJRCByZWdpc3RlciovCisjZGVmaW5lICAgICBWVDE2MzFfREVWSUNFX0lEX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVlQxNjMxX0RFVklDRV9JRCAgICAgICAgICAgIDB4OTIKKworI2RlZmluZSAgICAgVlQzMjcxX0RFVklDRV9JRF9SRUcgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIFZUMzI3MV9ERVZJQ0VfSUQgICAgICAgICAgICAweDcxCisKKyNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9TWVNURU1fQklPUyAgICAgMHgwMQorI2RlZmluZSAgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TICAgICAgICAweDAyCisjZGVmaW5lICAgICBHRVRfTENEX1NaSUVfQllfSFdfU1RSQVBQSU5HICAgIDB4MDMKKyNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkcgICAgMHgwNAorCisvKiBEZWZpbml0aW9uIERWSSBQYW5lbCBJRCovCisvKiBSZXNvbHV0aW9uOiA2NDB4NDgwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDBfNjQwWDQ4MCAgICAgICAweDAwCisvKiBSZXNvbHV0aW9uOiA4MDB4NjAwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDFfODAwWDYwMCAgICAgICAweDAxCisvKiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDJfMTAyNFg3NjggICAgICAweDAyCisvKiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDNfMTI4MFg3NjggICAgICAweDAzCisvKiBSZXNvbHV0aW9uOiAxMjgweDEwMjQsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDRfMTI4MFgxMDI0ICAgICAweDA0CisvKiBSZXNvbHV0aW9uOiAxNDAweDEwNTAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwICAgICAweDA1CisvKiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwICAgICAweDA2CisvKiBSZXNvbHV0aW9uOiAxMzY2eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBEaXNhYmxlICovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSUQ3XzEzNjZYNzY4ICAgICAgMHgwNworLyogUmVzb2x1dGlvbjogMTAyNHg2MDAsICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDhfMTAyNFg2MDAgICAgICAweDA4CisvKiBSZXNvbHV0aW9uOiAxMjgweDgwMCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEOV8xMjgwWDgwMCAgICAgIDB4MDkKKy8qIFJlc29sdXRpb246IDgwMHg0ODAsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSURBXzgwMFg0ODAgICAgICAgMHgwQQorLyogUmVzb2x1dGlvbjogMTM2MHg3NjgsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEQl8xMzYwWDc2OCAgICAgMHgwQgorLyogUmVzb2x1dGlvbjogNDgweDY0MCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRENfNDgwWDY0MCAgICAgIDB4MEMKKworCitleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CitleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKK2V4dGVybiBpbnQgdmlhZmJfRFZJX09OOworCit2b2lkIHZpYWZiX2Rpc2FibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSpwbHZkc19zZXR0aW5nX2luZm8sCisJCQlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl9sY2RfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfbGNkX2VuYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sY2Rfc2l6ZSh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX291dHB1dF9pbnRlcmZhY2Uoc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19jaGlwX2luZm8sCisJCQkJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19zZXR0aW5nX2luZm8pOwordm9pZCB2aWFmYl9sY2Rfc2V0X21vZGUoc3RydWN0IGNydF9tb2RlX3RhYmxlICptb2RlX2NydF90YWJsZSwKKwkJICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJCSAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK2ludCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfY2hpcF9pbmZvLAorCQkJCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfc2V0dGluZ19pbmZvKTsKK2Jvb2wgdmlhZmJfbGNkX2dldF9tb2JpbGVfc3RhdGUoYm9vbCAqbW9iaWxlKTsKK3ZvaWQgdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgZGV2aWNlX3RpbWluZywKKwlpbnQgc2V0X2lnYSk7CisKKyNlbmRpZiAvKiBfX0xDRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZHRibC5oIGIvZHJpdmVycy92aWRlby92aWEvbGNkdGJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZGQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZHRibC5oCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0xDRFRCTF9IX18KKyNkZWZpbmUgX19MQ0RUQkxfSF9fCisKKyNpbmNsdWRlICJzaGFyZS5oIgorCisvKiBDTEUyNjYgU29mdHdhcmUgUG93ZXIgU2VxdWVuY2UgKi8KKy8qIHtNYXNrfSwge0RhdGF9LCB7RGVsYXl9ICovCitpbnQgUG93ZXJTZXF1ZW5jZU9uWzNdWzNdID0KKyAgICB7IHsweDEwLCAweDA4LCAweDA2fSwgezB4MTAsIDB4MDgsIDB4MDZ9LCB7MHgxOSwgMHgxRkUsIDB4MDF9IH07CitpbnQgUG93ZXJTZXF1ZW5jZU9mZlszXVszXSA9CisgICAgeyB7MHgwNiwgMHgwOCwgMHgxMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4RDIsIDB4MTksIDB4MDF9IH07CisKKy8qICsrKysrKyBQODgwICsrKysrKyAqLworLyogICBQYW5lbCAxNjAweDEyMDAgICAqLworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfNlg0XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NzN9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg3M30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NUF9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NUV9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RDZ9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4N0R9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4OEN9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwMn0KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNlgxMiBBUlJBWV9TSVpFKFA4ODBfTENEX1JFU182WDRfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzdYNF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY3fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4Njd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDc0fSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDc4fSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEY1fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ0LCAweEZGLCAweDc4fSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDhDfSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDF9CisKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU183WDRfMTZYMTIgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfN1g0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU184WDZfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhFMX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NCwgMHhGRiwgMHg2RH0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4OH0sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDAzfQorCit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMikKKworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfMTBYN18xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweEFCfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEFGfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEYwfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ0LCAweEZGLCAweDkyfSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDg4fSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDN9CisKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU18xMFg3XzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzEwWDdfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4N0R9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg3RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4RDB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4RDR9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RkF9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4RjZ9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4ODh9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyKQorCisvKiAgIFBhbmVsIDE0MDB4MTA1MCAgICovCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU182WDRfMTRYMTBbXSA9IHsKKwkvKiA2NDB4NDgwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEI0fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NCwgMHhGRiwgMHhDNn0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4Q30sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA1fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMCBBUlJBWV9TSVpFKFA4ODBfTENEX1JFU182WDRfMTRYMTApCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMFtdID0geworCS8qIDgwMHg2MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ0LCAweEZGLCAweDA2fSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDhEfSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE0WDEwIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMCkKKworLyogKysrKysrIEs0MDAgKysrKysrICovCisvKiAgIFBhbmVsIDE2MDB4MTIwMCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg3M30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDczfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1QX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg1RX0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhEQX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHhDNH0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg3Rn0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3NH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg3OH0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhGNX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg0Nn0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgzRH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhFMX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4NX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg2Rn0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QUJ9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QUZ9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RjB9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4NDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NEF9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNlgxMiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMlgxMF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDdEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4N0R9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweEQwfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEQ0fSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEZBfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDQ3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDdDfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyKQorCisvKiAgIFBhbmVsIDE0MDB4MTA1MCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTRYMTBbXSA9IHsKKwkvKiA2NDB4NDAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEI0fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTRYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTRYMTBbXSA9IHsKKwkvKiA4MDB4NjAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEJFfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgyMX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTRYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzE0WDEwW10gPSB7CisJLyogMTAyNHg3NjggICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEE3fSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDM30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNFgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMlgxMF8xNFgxMFtdID0geworCS8qIDEyODB4NzY4LCAxMjgweDk2MCwgMTI4MHgxMDI0ICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDk3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweENFfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhEMn0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4Qzl9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDc5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwKQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTM2Nng3NjggICAqLworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfNlg0XzEzNjZYN1tdID0geworCS8qIDY0MHg0MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NDd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDQ3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDYwfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2NH0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDRDfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEzNjZYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfN1g0XzEzNjZYN1tdID0geworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDNCfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM1fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzQn0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3MX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NzV9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDk2fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxMH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTM2Nlg3IEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDdbXSA9IHsKKwkvKiA4MDB4NjAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDM3fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM1fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzN30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3RX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODJ9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDhDfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4NH0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHhCOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTM2Nlg3IEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3W10gPSB7CisJLyogMTAyNHg3NjggICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEE3fSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDM30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfMTBYN18xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYN1tdID0geworCS8qIDEyODB4NzY4LCAxMjgweDk2MCwgMTI4MHgxMDI0ICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDk3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweENFfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhEMn0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4Qzl9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDc5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYN1wKKwkJCUFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYNykKKworLyogKysrKysrIEs0MDAgKysrKysrICovCisvKiAgIFBhbmVsIDEyODB4MTAyNCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhBQX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg2OH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2Q30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhBOH0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4N30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHhFRH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhCRX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgyMX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzEyWDEwW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NDZ9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDFDfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MzR9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QTd9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xMlgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzEyWDEwKQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTAyNHg3NjggICAgKi8KK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzZYNF8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NDd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg0N30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NjB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjR9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODd9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NEN9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEwWDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzdYNF8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4M0J9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzQn0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NzF9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NzV9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OTZ9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MTB9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzEwWDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4Mzd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzN30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4N0V9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODJ9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODR9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4Qjl9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzEwWDcpCisKKy8qICsrKysrKyBLNDAwICsrKysrKyAqLworLyogICBQYW5lbCA4MDB4NjAwICAgICAqLworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfNlg0XzhYNltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDFBfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4MUF9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4RTN9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxMn0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDYzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDZFfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg2fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweEIzfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF84WDYgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzhYNikKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfN1g0XzhYNltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDFGfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4MUZ9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4RTN9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxMn0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDc4fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweEM0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDU5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF84WDYgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzhYNikKKworI2VuZGlmIC8qIF9fTENEVEJMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxMjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKQEAgLTAsMCArMSwxMTA1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU0hBUkVfSF9fCisjZGVmaW5lIF9fU0hBUkVfSF9fCisKKy8qIERlZmluZSBSZXR1cm4gVmFsdWUgKi8KKyNkZWZpbmUgRkFJTCAgICAgICAgLTEKKyNkZWZpbmUgT0sgICAgICAgICAgMQorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworLyogRGVmaW5lIEJpdCBGaWVsZCAqLworI2RlZmluZSBCSVQwICAgIDB4MDEKKyNkZWZpbmUgQklUMSAgICAweDAyCisjZGVmaW5lIEJJVDIgICAgMHgwNAorI2RlZmluZSBCSVQzICAgIDB4MDgKKyNkZWZpbmUgQklUNCAgICAweDEwCisjZGVmaW5lIEJJVDUgICAgMHgyMAorI2RlZmluZSBCSVQ2ICAgIDB4NDAKKyNkZWZpbmUgQklUNyAgICAweDgwCisKKy8qIFZpZGVvIE1lbW9yeSBTaXplICovCisjZGVmaW5lIFZJREVPX01FTU9SWV9TSVpFXzE2TSAgICAweDEwMDAwMDAKKworLyogRGVmaW5pdGlvbiBNb2RlIEluZGV4CisqLworI2RlZmluZSAgICAgVklBX1JFU182NDBYNDgwICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSAgICAgVklBX1JFU184MDBYNjAwICAgICAgICAgICAgICAgICAJMQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDc2OCAgICAgICAgICAgICAgICAJMgorI2RlZmluZSAgICAgVklBX1JFU18xMTUyWDg2NCAgICAgICAgICAgICAgICAJMworI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDEwMjQgICAgICAgICAgICAgICAJNAorI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDEyMDAgICAgICAgICAgICAgICAJNQorI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDEwNTAgICAgICAgICAgICAgICAJNgorI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDc2OCAgICAgICAgICAgICAgICAJNworI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDk2MCAgICAgICAgICAgICAgICAJOAorI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDE0NDAgICAgICAgICAgICAgICAJOQorI2RlZmluZSAgICAgVklBX1JFU184NDhYNDgwICAgICAgICAgICAgICAgICAJMTAKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQwMFgxMDUwICAgICAgICAgICAgICAgCTExCisjZGVmaW5lICAgICBWSUFfUkVTXzcyMFg0ODAgICAgICAgICAgICAgICAgIAkxMgorI2RlZmluZSAgICAgVklBX1JFU183MjBYNTc2ICAgICAgICAgICAgICAgICAJMTMKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTAyNFg1MTIgICAgICAgICAgICAgICAgCTE0CisjZGVmaW5lICAgICBWSUFfUkVTXzg1Nlg0ODAgICAgICAgICAgICAgICAgIAkxNQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDU3NiAgICAgICAgICAgICAgICAJMTYKKyNkZWZpbmUgICAgIFZJQV9SRVNfNjQwWDQwMCAgICAgICAgICAgICAgICAgCTE3CisjZGVmaW5lICAgICBWSUFfUkVTXzEyODBYNzIwICAgICAgICAgICAgICAgIAkxOAorI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEwODAgICAgICAgICAgICAgICAJMTkKKyNkZWZpbmUgICAgIFZJQV9SRVNfODAwWDQ4MCAgICAgICAgICAgICAgICAgCTIwCisjZGVmaW5lICAgICBWSUFfUkVTXzEzNjhYNzY4ICAgICAgICAgICAgICAgIAkyMQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDYwMCAgICAgICAgICAgICAgICAJMjIKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg4MDAgICAgICAgICAgICAgICAgCTIzCisjZGVmaW5lICAgICBWSUFfUkVTXzE2ODBYMTA1MCAgICAgICAgICAgICAgIAkyNAorI2RlZmluZSAgICAgVklBX1JFU185NjBYNjAwCQkJMjUKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTAwMFg2MDAgICAgICAgICAgICAgICAJMjYKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTA4OFg2MTIgICAgICAgICAgICAgICAJMjcKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTE1Mlg3MjAgICAgICAgICAgICAgICAJMjgKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTIwMFg3MjAgICAgICAgICAgICAgICAJMjkKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg2MDAgICAgICAgICAgICAgICAJMzAKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2MFg3NjggICAgICAgICAgICAgICAJMzEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2Nlg3NjggICAgICAgICAgICAgICAJMzIKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQ0MFg5MDAgICAgICAgICAgICAgICAJMzMKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFg5MDAgICAgICAgICAgICAgICAJMzQKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFgxMDI0ICAgICAgICAgICAgICAJMzUKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTc5MlgxMzQ0ICAgICAgICAgICAgICAJMzYKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTg1NlgxMzkyICAgICAgICAgICAgICAJMzcKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMjAwICAgICAgICAgICAgICAJMzgKKyNkZWZpbmUgICAgIFZJQV9SRVNfMjA0OFgxNTM2ICAgICAgICAgICAgICAJMzkKKyNkZWZpbmUgICAgIFZJQV9SRVNfNDgwWDY0MCAgICAgICAgICAgICAgICAgIAk0MAorCisvKlJlZHVjZSBCbGFua2luZyovCisjZGVmaW5lICAgICBWSUFfUkVTXzEzNjBYNzY4X1JCICAgICAgICAgIAkxMzEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQ0MFg5MDBfUkIgICAgICAgICAgCTEzMworI2RlZmluZSAgICAgVklBX1JFU18xNDAwWDEwNTBfUkIgICAgICAgIAkxMTEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFg5MDBfUkIgICAgICAgICAgCTEzNAorI2RlZmluZSAgICAgVklBX1JFU18xNjgwWDEwNTBfUkIgICAgICAgIAkxMjQKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMDgwX1JCICAgICAgICAJMTE5CisjZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTIwMF9SQiAgICAgICAgCTEzOAorCisjZGVmaW5lICAgICBWSUFfUkVTX0lOVkFMSUQgICAgICAgICAgICAgICAgIAkyNTUKKworLyogc3RhbmRhcmQgVkdBIElPIHBvcnQKKyovCisjZGVmaW5lIFZJQVJNaXNjICAgIDB4M0NDCisjZGVmaW5lIFZJQVdNaXNjICAgIDB4M0MyCisjZGVmaW5lIFZJQVN0YXR1cyAgIDB4M0RBCisjZGVmaW5lIFZJQUNSICAgICAgIDB4M0Q0CisjZGVmaW5lIFZJQVNSICAgICAgIDB4M0M0CisjZGVmaW5lIFZJQUdSICAgICAgIDB4M0NFCisjZGVmaW5lIFZJQUFSICAgICAgIDB4M0MwCisKKyNkZWZpbmUgU3RkQ1IgICAgICAgMHgxOQorI2RlZmluZSBTdGRTUiAgICAgICAweDA0CisjZGVmaW5lIFN0ZEdSICAgICAgIDB4MDkKKyNkZWZpbmUgU3RkQVIgICAgICAgMHgxNAorCisjZGVmaW5lIFBhdGNoQ1IgICAgIDExCisKKy8qIERpc3BsYXkgcGF0aCAqLworI2RlZmluZSBJR0ExICAgICAgICAxCisjZGVmaW5lIElHQTIgICAgICAgIDIKKyNkZWZpbmUgSUdBMV9JR0EyICAgMworCisvKiBEZWZpbmUgQ29sb3IgRGVwdGggICovCisjZGVmaW5lIE1PREVfOEJQUCAgICAgICAxCisjZGVmaW5lIE1PREVfMTZCUFAgICAgICAyCisjZGVmaW5lIE1PREVfMzJCUFAgICAgICA0CisKKyNkZWZpbmUgR1IyMCAgICAweDIwCisjZGVmaW5lIEdSMjEgICAgMHgyMQorI2RlZmluZSBHUjIyICAgIDB4MjIKKworLyogU2VxdWVuY2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUjAxICAgIDB4MDEKKyNkZWZpbmUgU1IxMCAgICAweDEwCisjZGVmaW5lIFNSMTIgICAgMHgxMgorI2RlZmluZSBTUjE1ICAgIDB4MTUKKyNkZWZpbmUgU1IxNiAgICAweDE2CisjZGVmaW5lIFNSMTcgICAgMHgxNworI2RlZmluZSBTUjE4ICAgIDB4MTgKKyNkZWZpbmUgU1IxQiAgICAweDFCCisjZGVmaW5lIFNSMUEgICAgMHgxQQorI2RlZmluZSBTUjFDICAgIDB4MUMKKyNkZWZpbmUgU1IxRCAgICAweDFECisjZGVmaW5lIFNSMUUgICAgMHgxRQorI2RlZmluZSBTUjFGICAgIDB4MUYKKyNkZWZpbmUgU1IyMCAgICAweDIwCisjZGVmaW5lIFNSMjEgICAgMHgyMQorI2RlZmluZSBTUjIyICAgIDB4MjIKKyNkZWZpbmUgU1IyQSAgICAweDJBCisjZGVmaW5lIFNSMkQgICAgMHgyRAorI2RlZmluZSBTUjJFICAgIDB4MkUKKworI2RlZmluZSBTUjMwICAgIDB4MzAKKyNkZWZpbmUgU1IzOSAgICAweDM5CisjZGVmaW5lIFNSM0QgICAgMHgzRAorI2RlZmluZSBTUjNFICAgIDB4M0UKKyNkZWZpbmUgU1IzRiAgICAweDNGCisjZGVmaW5lIFNSNDAgICAgMHg0MAorI2RlZmluZSBTUjQzICAgIDB4NDMKKyNkZWZpbmUgU1I0NCAgICAweDQ0CisjZGVmaW5lIFNSNDUgICAgMHg0NQorI2RlZmluZSBTUjQ2ICAgIDB4NDYKKyNkZWZpbmUgU1I0NyAgICAweDQ3CisjZGVmaW5lIFNSNDggICAgMHg0OAorI2RlZmluZSBTUjQ5ICAgIDB4NDkKKyNkZWZpbmUgU1I0QSAgICAweDRBCisjZGVmaW5lIFNSNEIgICAgMHg0QgorI2RlZmluZSBTUjRDICAgIDB4NEMKKyNkZWZpbmUgU1I1MiAgICAweDUyCisjZGVmaW5lIFNSNUUgICAgMHg1RQorI2RlZmluZSBTUjY1ICAgIDB4NjUKKworLyogQ1JUIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIENSMDAgICAgMHgwMAorI2RlZmluZSBDUjAxICAgIDB4MDEKKyNkZWZpbmUgQ1IwMiAgICAweDAyCisjZGVmaW5lIENSMDMgICAgMHgwMworI2RlZmluZSBDUjA0ICAgIDB4MDQKKyNkZWZpbmUgQ1IwNSAgICAweDA1CisjZGVmaW5lIENSMDYgICAgMHgwNgorI2RlZmluZSBDUjA3ICAgIDB4MDcKKyNkZWZpbmUgQ1IwOCAgICAweDA4CisjZGVmaW5lIENSMDkgICAgMHgwOQorI2RlZmluZSBDUjBBICAgIDB4MEEKKyNkZWZpbmUgQ1IwQiAgICAweDBCCisjZGVmaW5lIENSMEMgICAgMHgwQworI2RlZmluZSBDUjBEICAgIDB4MEQKKyNkZWZpbmUgQ1IwRSAgICAweDBFCisjZGVmaW5lIENSMEYgICAgMHgwRgorI2RlZmluZSBDUjEwICAgIDB4MTAKKyNkZWZpbmUgQ1IxMSAgICAweDExCisjZGVmaW5lIENSMTIgICAgMHgxMgorI2RlZmluZSBDUjEzICAgIDB4MTMKKyNkZWZpbmUgQ1IxNCAgICAweDE0CisjZGVmaW5lIENSMTUgICAgMHgxNQorI2RlZmluZSBDUjE2ICAgIDB4MTYKKyNkZWZpbmUgQ1IxNyAgICAweDE3CisjZGVmaW5lIENSMTggICAgMHgxOAorCisvKiBFeHRlbmQgQ1JUIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIENSMzAgICAgMHgzMAorI2RlZmluZSBDUjMxICAgIDB4MzEKKyNkZWZpbmUgQ1IzMiAgICAweDMyCisjZGVmaW5lIENSMzMgICAgMHgzMworI2RlZmluZSBDUjM0ICAgIDB4MzQKKyNkZWZpbmUgQ1IzNSAgICAweDM1CisjZGVmaW5lIENSMzYgICAgMHgzNgorI2RlZmluZSBDUjM3ICAgIDB4MzcKKyNkZWZpbmUgQ1IzOCAgICAweDM4CisjZGVmaW5lIENSMzkgICAgMHgzOQorI2RlZmluZSBDUjNBICAgIDB4M0EKKyNkZWZpbmUgQ1IzQiAgICAweDNCCisjZGVmaW5lIENSM0MgICAgMHgzQworI2RlZmluZSBDUjNEICAgIDB4M0QKKyNkZWZpbmUgQ1IzRSAgICAweDNFCisjZGVmaW5lIENSM0YgICAgMHgzRgorI2RlZmluZSBDUjQwICAgIDB4NDAKKyNkZWZpbmUgQ1I0MSAgICAweDQxCisjZGVmaW5lIENSNDIgICAgMHg0MgorI2RlZmluZSBDUjQzICAgIDB4NDMKKyNkZWZpbmUgQ1I0NCAgICAweDQ0CisjZGVmaW5lIENSNDUgICAgMHg0NQorI2RlZmluZSBDUjQ2ICAgIDB4NDYKKyNkZWZpbmUgQ1I0NyAgICAweDQ3CisjZGVmaW5lIENSNDggICAgMHg0OAorI2RlZmluZSBDUjQ5ICAgIDB4NDkKKyNkZWZpbmUgQ1I0QSAgICAweDRBCisjZGVmaW5lIENSNEIgICAgMHg0QgorI2RlZmluZSBDUjRDICAgIDB4NEMKKyNkZWZpbmUgQ1I0RCAgICAweDRECisjZGVmaW5lIENSNEUgICAgMHg0RQorI2RlZmluZSBDUjRGICAgIDB4NEYKKyNkZWZpbmUgQ1I1MCAgICAweDUwCisjZGVmaW5lIENSNTEgICAgMHg1MQorI2RlZmluZSBDUjUyICAgIDB4NTIKKyNkZWZpbmUgQ1I1MyAgICAweDUzCisjZGVmaW5lIENSNTQgICAgMHg1NAorI2RlZmluZSBDUjU1ICAgIDB4NTUKKyNkZWZpbmUgQ1I1NiAgICAweDU2CisjZGVmaW5lIENSNTcgICAgMHg1NworI2RlZmluZSBDUjU4ICAgIDB4NTgKKyNkZWZpbmUgQ1I1OSAgICAweDU5CisjZGVmaW5lIENSNUEgICAgMHg1QQorI2RlZmluZSBDUjVCICAgIDB4NUIKKyNkZWZpbmUgQ1I1QyAgICAweDVDCisjZGVmaW5lIENSNUQgICAgMHg1RAorI2RlZmluZSBDUjVFICAgIDB4NUUKKyNkZWZpbmUgQ1I1RiAgICAweDVGCisjZGVmaW5lIENSNjAgICAgMHg2MAorI2RlZmluZSBDUjYxICAgIDB4NjEKKyNkZWZpbmUgQ1I2MiAgICAweDYyCisjZGVmaW5lIENSNjMgICAgMHg2MworI2RlZmluZSBDUjY0ICAgIDB4NjQKKyNkZWZpbmUgQ1I2NSAgICAweDY1CisjZGVmaW5lIENSNjYgICAgMHg2NgorI2RlZmluZSBDUjY3ICAgIDB4NjcKKyNkZWZpbmUgQ1I2OCAgICAweDY4CisjZGVmaW5lIENSNjkgICAgMHg2OQorI2RlZmluZSBDUjZBICAgIDB4NkEKKyNkZWZpbmUgQ1I2QiAgICAweDZCCisjZGVmaW5lIENSNkMgICAgMHg2QworI2RlZmluZSBDUjZEICAgIDB4NkQKKyNkZWZpbmUgQ1I2RSAgICAweDZFCisjZGVmaW5lIENSNkYgICAgMHg2RgorI2RlZmluZSBDUjcwICAgIDB4NzAKKyNkZWZpbmUgQ1I3MSAgICAweDcxCisjZGVmaW5lIENSNzIgICAgMHg3MgorI2RlZmluZSBDUjczICAgIDB4NzMKKyNkZWZpbmUgQ1I3NCAgICAweDc0CisjZGVmaW5lIENSNzUgICAgMHg3NQorI2RlZmluZSBDUjc2ICAgIDB4NzYKKyNkZWZpbmUgQ1I3NyAgICAweDc3CisjZGVmaW5lIENSNzggICAgMHg3OAorI2RlZmluZSBDUjc5ICAgIDB4NzkKKyNkZWZpbmUgQ1I3QSAgICAweDdBCisjZGVmaW5lIENSN0IgICAgMHg3QgorI2RlZmluZSBDUjdDICAgIDB4N0MKKyNkZWZpbmUgQ1I3RCAgICAweDdECisjZGVmaW5lIENSN0UgICAgMHg3RQorI2RlZmluZSBDUjdGICAgIDB4N0YKKyNkZWZpbmUgQ1I4MCAgICAweDgwCisjZGVmaW5lIENSODEgICAgMHg4MQorI2RlZmluZSBDUjgyICAgIDB4ODIKKyNkZWZpbmUgQ1I4MyAgICAweDgzCisjZGVmaW5lIENSODQgICAgMHg4NAorI2RlZmluZSBDUjg1ICAgIDB4ODUKKyNkZWZpbmUgQ1I4NiAgICAweDg2CisjZGVmaW5lIENSODcgICAgMHg4NworI2RlZmluZSBDUjg4ICAgIDB4ODgKKyNkZWZpbmUgQ1I4OSAgICAweDg5CisjZGVmaW5lIENSOEEgICAgMHg4QQorI2RlZmluZSBDUjhCICAgIDB4OEIKKyNkZWZpbmUgQ1I4QyAgICAweDhDCisjZGVmaW5lIENSOEQgICAgMHg4RAorI2RlZmluZSBDUjhFICAgIDB4OEUKKyNkZWZpbmUgQ1I4RiAgICAweDhGCisjZGVmaW5lIENSOTAgICAgMHg5MAorI2RlZmluZSBDUjkxICAgIDB4OTEKKyNkZWZpbmUgQ1I5MiAgICAweDkyCisjZGVmaW5lIENSOTMgICAgMHg5MworI2RlZmluZSBDUjk0ICAgIDB4OTQKKyNkZWZpbmUgQ1I5NSAgICAweDk1CisjZGVmaW5lIENSOTYgICAgMHg5NgorI2RlZmluZSBDUjk3ICAgIDB4OTcKKyNkZWZpbmUgQ1I5OCAgICAweDk4CisjZGVmaW5lIENSOTkgICAgMHg5OQorI2RlZmluZSBDUjlBICAgIDB4OUEKKyNkZWZpbmUgQ1I5QiAgICAweDlCCisjZGVmaW5lIENSOUMgICAgMHg5QworI2RlZmluZSBDUjlEICAgIDB4OUQKKyNkZWZpbmUgQ1I5RSAgICAweDlFCisjZGVmaW5lIENSOUYgICAgMHg5RgorI2RlZmluZSBDUkEwICAgIDB4QTAKKyNkZWZpbmUgQ1JBMSAgICAweEExCisjZGVmaW5lIENSQTIgICAgMHhBMgorI2RlZmluZSBDUkEzICAgIDB4QTMKKyNkZWZpbmUgQ1JEMiAgICAweEQyCisjZGVmaW5lIENSRDMgICAgMHhEMworI2RlZmluZSBDUkQ0ICAgIDB4RDQKKworLyogTFVUIFRhYmxlKi8KKyNkZWZpbmUgTFVUX0RBVEEgICAgICAgICAgICAgMHgzQzkJLyogREFDREFUQSAqLworI2RlZmluZSBMVVRfSU5ERVhfUkVBRCAgICAgICAweDNDNwkvKiBEQUNSWCAqLworI2RlZmluZSBMVVRfSU5ERVhfV1JJVEUgICAgICAweDNDOAkvKiBEQUNXWCAqLworI2RlZmluZSBEQUNNQVNLICAgICAgICAgICAgICAweDNDNgorCisvKiBEZWZpbml0aW9uIERldmljZSAqLworI2RlZmluZSBERVZJQ0VfQ1JUICAweDAxCisjZGVmaW5lIERFVklDRV9EVkkgIDB4MDMKKyNkZWZpbmUgREVWSUNFX0xDRCAgMHgwNAorCisvKiBEZXZpY2Ugb3V0cHV0IGludGVyZmFjZSAqLworI2RlZmluZSBJTlRFUkZBQ0VfTk9ORSAgICAgICAgICAweDAwCisjZGVmaW5lIElOVEVSRkFDRV9BTkFMT0dfUkdCICAgIDB4MDEKKyNkZWZpbmUgSU5URVJGQUNFX0RWUDAgICAgICAgICAgMHgwMgorI2RlZmluZSBJTlRFUkZBQ0VfRFZQMSAgICAgICAgICAweDAzCisjZGVmaW5lIElOVEVSRkFDRV9ERlBfSElHSCAgICAgIDB4MDQKKyNkZWZpbmUgSU5URVJGQUNFX0RGUF9MT1cgICAgICAgMHgwNQorI2RlZmluZSBJTlRFUkZBQ0VfREZQICAgICAgICAgICAweDA2CisjZGVmaW5lIElOVEVSRkFDRV9MVkRTMCAgICAgICAgIDB4MDcKKyNkZWZpbmUgSU5URVJGQUNFX0xWRFMxICAgICAgICAgMHgwOAorI2RlZmluZSBJTlRFUkZBQ0VfTFZEUzBMVkRTMSAgICAweDA5CisjZGVmaW5lIElOVEVSRkFDRV9UTURTICAgICAgICAgIDB4MEEKKworI2RlZmluZSBIV19MQVlPVVRfTENEX09OTFkgICAgICAweDAxCisjZGVmaW5lIEhXX0xBWU9VVF9EVklfT05MWSAgICAgIDB4MDIKKyNkZWZpbmUgSFdfTEFZT1VUX0xDRF9EVkkgICAgICAgMHgwMworI2RlZmluZSBIV19MQVlPVVRfTENEMV9MQ0QyICAgICAweDA0CisjZGVmaW5lIEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMiAweDEwCisKKy8qIERlZmluaXRpb24gUmVmcmVzaCBSYXRlICovCisjZGVmaW5lIFJFRlJFU0hfNTAgICAgICA1MAorI2RlZmluZSBSRUZSRVNIXzYwICAgICAgNjAKKyNkZWZpbmUgUkVGUkVTSF83NSAgICAgIDc1CisjZGVmaW5lIFJFRlJFU0hfODUgICAgICA4NQorI2RlZmluZSBSRUZSRVNIXzEwMCAgICAgMTAwCisjZGVmaW5lIFJFRlJFU0hfMTIwICAgICAxMjAKKworLyogRGVmaW5pdGlvbiBTeW5jIFBvbGFyaXR5Ki8KKyNkZWZpbmUgTkVHQVRJVkUgICAgICAgIDEKKyNkZWZpbmUgUE9TSVRJVkUgICAgICAgIDAKKworLyo0ODB4NjQwQDYwIFN5bmMgUG9sYXJpdHkgKEdURikKKyovCisjZGVmaW5lIE00ODBYNjQwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE00ODBYNjQwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qNjQweDQ4MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SNjBfVlNQICAgICAgICBORUdBVElWRQorCisvKjY0MHg0ODBANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTY0MFg0ODBfUjc1X0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTY0MFg0ODBfUjc1X1ZTUCAgICAgICAgTkVHQVRJVkUKKworLyo2NDB4NDgwQDg1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE02NDBYNDgwX1I4NV9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE02NDBYNDgwX1I4NV9WU1AgICAgICAgIE5FR0FUSVZFCisKKy8qNjQweDQ4MEAxMDAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SMTAwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SMTAwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjY0MHg0ODBAMTIwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTY0MFg0ODBfUjEyMF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTY0MFg0ODBfUjEyMF9WU1AgICAgICAgUE9TSVRJVkUKKworLyo3MjB4NDgwQDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE03MjBYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE03MjBYNDgwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qNzIweDU3NkA2MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNNzIwWDU3Nl9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNNzIwWDU3Nl9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjYwX0hTUCAgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NjAwQDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNjAwX1I3NV9IU1AgICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE04MDBYNjAwX1I3NV9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qODAweDYwMEA4NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNODAwWDYwMF9SODVfSFNQICAgICAgICBQT1NJVElWRQorI2RlZmluZSBNODAwWDYwMF9SODVfVlNQICAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBAMTAwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjEwMF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjEwMF9WU1AgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NjAwQDEyMCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNjAwX1IxMjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE04MDBYNjAwX1IxMjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qODAweDQ4MEA2MCBTeW5jIFBvbGFyaXR5ICAoQ1ZUIE1vZGUpCisqLworI2RlZmluZSBNODAwWDQ4MF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNODAwWDQ4MF9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjg0OHg0ODBANjAgU3luYyBQb2xhcml0eSAgKENWVCBNb2RlKQorKi8KKyNkZWZpbmUgTTg0OFg0ODBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTg0OFg0ODBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo4NTJ4NDgwQDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE04NTJYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE04NTJYNDgwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg1MTJANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg1MTJfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg1MTJfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDc2OEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg3NjhfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg3NjhfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKjEwMjR4NzY4QDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMDI0WDc2OF9SNzVfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMDI0WDc2OF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg3NjhAODUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTEwMjRYNzY4X1I4NV9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEwMjRYNzY4X1I4NV9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDc2OEAxMDAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg3NjhfUjEwMF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg3NjhfUjEwMF9WU1AgICAgICBQT1NJVElWRQorCisvKjExNTJ4ODY0QDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMTUyWDg2NF9SNzVfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMTUyWDg2NF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHg3MjBANjAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTEyODBYNzIwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYNzIwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTI4MHg3NjhANTAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTI4MFg3NjhfUjUwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MFg3NjhfUjUwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4NzY4QDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDc2OF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgwWDc2OF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHg4MDBANjAgU3luYyBQb2xhcml0eSAgKENWVCBNb2RlKQorKi8KKyNkZWZpbmUgTTEyODBYODAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYODAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMjgweDk2MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFg5NjBfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFg5NjBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I2MF9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxMzYweDc2OEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTEzNjBYNzY4X1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEzNjBYNzY4X1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTM2MHg3NjhANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTM2MFg3NjhfUkJfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTM2MFg3NjhfUkJfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKiAxMzY4eDc2OEA1MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkgKi8KKyNkZWZpbmUgTTEzNjhYNzY4X1I1MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEzNjhYNzY4X1I1MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTM2OHg3NjhANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKSAqLworI2RlZmluZSBNMTM2OFg3NjhfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTM2OFg3NjhfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA3NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I3NV9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I3NV9WU1AgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA4NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I4NV9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I4NV9WU1AgICAgICBQT1NJVElWRQorCisvKjE0NDB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xNDQwWDEwNTBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDQwWDEwNTBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTYwMHgxMjAwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xNjAwWDEyMDBfUjYwX0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNjAwWDEyMDBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTYwMHgxMjAwQDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xNjAwWDEyMDBfUjc1X0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNjAwWDEyMDBfUjc1X1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE2ODB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE2ODB4MTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE2ODB4MTA1MF9SNjBfVlNQICAgICAgTkVHQVRJVkUKKworLyogMTY4MHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE2ODB4MTA1MF9SQl9SNjBfSFNQICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2ODB4MTA1MF9SQl9SNjBfVlNQICAgICAgTkVHQVRJVkUKKworLyogMTY4MHgxMDUwQDc1IFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTY4MHgxMDUwX1I3NV9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTY4MHgxMDUwX1I3NV9WU1AgICAgICBQT1NJVElWRQorCisvKjE5MjB4MTA4MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkKKyovCisjZGVmaW5lIE0xOTIwWDEwODBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xOTIwWDEwODBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE5MjB4MTA4MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xOTIwWDEwODBfUkJfUjYwX0hTUCAgUE9TSVRJVkUKKyNkZWZpbmUgTTE5MjBYMTA4MF9SQl9SNjBfVlNQICBORUdBVElWRQorCisvKjE5MjB4MTQ0MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTkyMFgxNDQwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxNDQwX1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKjE5MjB4MTQ0MEA3NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTkyMFgxNDQwX1I3NV9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxNDQwX1I3NV9WU1AgICAgICBQT1NJVElWRQorCisjaWYgMAorLyogMTQwMHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfVlNQICAgICAgTkVHQVRJVkUKKyNlbmRpZgorCisvKiAxNDAweDEwNTBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNDAwWDEwNTBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDAwWDEwNTBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE0MDB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xNDAwWDEwNTBfUkJfUjYwX0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNDAwWDEwNTBfUkJfUjYwX1ZTUCAgICAgIE5FR0FUSVZFCisKKy8qIDE0MDB4MTA1MEA3NSBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SNzVfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SNzVfVlNQICAgICAgUE9TSVRJVkUKKworLyogOTYweDYwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTk2MFg2MDBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTk2MFg2MDBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyogMTAwMHg2MDBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMDAwWDYwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDAwWDYwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEwMjR4NTc2QDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTAyNFg1NzZfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg1NzZfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSovCisjZGVmaW5lIE0xMDI0WDYwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDYwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEwODh4NjEyQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTA4OFg2MTJfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTA4OFg2MTJfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMTUyeDcyMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTExNTJYNzIwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTExNTJYNzIwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTIwMHg3MjBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjAwWDcyMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjAwWDcyMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEyODB4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTI4MHg2MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MHg2MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMjgweDcyMEA1MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjgwWDcyMF9SNTBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgwWDcyMF9SNTBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEyODB4NzIwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KKyNkZWZpbmUgTTEyODBYNzIwX0NFQV9SNjBfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDcyMF9DRUFfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxNDQweDkwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0NDBYOTAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0NDBYOTAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTQ0MHg5MDBANzUgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNDQwWDkwMF9SNzVfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDQwWDkwMF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDE0NDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE0NDBYOTAwX1JCX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE0NDBYOTAwX1JCX1I2MF9WU1AgICAgICAgTkVHQVRJVkUKKworLyogMTYwMHg5MDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNjAwWDkwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNjAwWDkwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDE2MDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE2MDBYOTAwX1JCX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2MDBYOTAwX1JCX1I2MF9WU1AgICAgICAgTkVHQVRJVkUKKworLyogMTYwMHgxMDI0QDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTYwMFgxMDI0X1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTYwMFgxMDI0X1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxNzkyeDEzNDRANjAgU3luYyBQb2xhcml0eSAoRE1UIE1vZGUpICovCisjZGVmaW5lIE0xNzkyeDEzNDRfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNzkyeDEzNDRfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE4NTZ4MTM5MkA2MCBTeW5jIFBvbGFyaXR5IChETVQgTW9kZSkgKi8KKyNkZWZpbmUgTTE4NTZ4MTM5Ml9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE4NTZ4MTM5Ml9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTkyMHgxMjAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTkyMFgxMjAwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxMjAwX1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxOTIweDEyMDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTkyMFgxMjAwX1JCX1I2MF9IU1AgIFBPU0lUSVZFCisjZGVmaW5lIE0xOTIwWDEyMDBfUkJfUjYwX1ZTUCAgTkVHQVRJVkUKKworLyogMTkyMHgxMDgwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KKyNkZWZpbmUgTTE5MjBYMTA4MF9DRUFfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTkyMFgxMDgwX0NFQV9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDIwNDh4MTUzNkA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogZGVmaW5lIFBMTCBpbmRleDogKi8KKyNkZWZpbmUgQ0xLXzI1XzE3NU0gICAgIDI1MTc1MDAwCisjZGVmaW5lIENMS18yNl84ODBNICAgICAyNjg4MDAwMAorI2RlZmluZSBDTEtfMjlfNTgxTSAgICAgMjk1ODEwMDAKKyNkZWZpbmUgQ0xLXzMxXzQ5ME0gICAgIDMxNDkwMDAwCisjZGVmaW5lIENMS18zMV81MDBNICAgICAzMTUwMDAwMAorI2RlZmluZSBDTEtfMzFfNzI4TSAgICAgMzE3MjgwMDAKKyNkZWZpbmUgQ0xLXzMyXzY2OE0gICAgIDMyNjg4MDAwCisjZGVmaW5lIENMS18zNl8wMDBNICAgICAzNjAwMDAwMAorI2RlZmluZSBDTEtfNDBfMDAwTSAgICAgNDAwMDAwMDAKKyNkZWZpbmUgQ0xLXzQxXzI5MU0gICAgIDQxMjkxMDAwCisjZGVmaW5lIENMS180M18xNjNNICAgICA0MzE2MzAwMAorI2RlZmluZSBDTEtfNDVfMjUwTSAgICAgNDUyNTAwMDAJLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgQ0xLXzQ2XzAwME0gICAgIDQ2MDAwMDAwCisjZGVmaW5lIENMS180Nl85OTZNICAgICA0Njk5NjAwMAorI2RlZmluZSBDTEtfNDhfMDAwTSAgICAgNDgwMDAwMDAKKyNkZWZpbmUgQ0xLXzQ4Xzg3NU0gICAgIDQ4ODc1MDAwCisjZGVmaW5lIENMS180OV81MDBNICAgICA0OTUwMDAwMAorI2RlZmluZSBDTEtfNTJfNDA2TSAgICAgNTI0MDYwMDAKKyNkZWZpbmUgQ0xLXzUyXzk3N00gICAgIDUyOTc3MDAwCisjZGVmaW5lIENMS181Nl8yNTBNICAgICA1NjI1MDAwMAorI2RlZmluZSBDTEtfNjBfNDY2TSAgICAgNjA0NjYwMDAKKyNkZWZpbmUgQ0xLXzYxXzUwME0gICAgIDYxNTAwMDAwCisjZGVmaW5lIENMS182NV8wMDBNICAgICA2NTAwMDAwMAorI2RlZmluZSBDTEtfNjVfMTc4TSAgICAgNjUxNzgwMDAKKyNkZWZpbmUgQ0xLXzY2Xzc1ME0gICAgIDY2NzUwMDAwCS8qIDY3LjExNk1IeiAqLworI2RlZmluZSBDTEtfNjhfMTc5TSAgICAgNjgxNzkwMDAKKyNkZWZpbmUgQ0xLXzY5XzkyNE0gICAgIDY5OTI0MDAwCisjZGVmaW5lIENMS183MF8xNTlNICAgICA3MDE1OTAwMAorI2RlZmluZSBDTEtfNzJfMDAwTSAgICAgNzIwMDAwMDAKKyNkZWZpbmUgQ0xLXzc0XzI3ME0gICAgIDc0MjcwMDAwCisjZGVmaW5lIENMS183OF83NTBNICAgICA3ODc1MDAwMAorI2RlZmluZSBDTEtfODBfMTM2TSAgICAgODAxMzYwMDAKKyNkZWZpbmUgQ0xLXzgzXzM3NU0gICAgIDgzMzc1MDAwCisjZGVmaW5lIENMS184M185NTBNICAgICA4Mzk1MDAwMAorI2RlZmluZSBDTEtfODRfNzUwTSAgICAgODQ3NTAwMDAJLyogODQuNTM3TWh6ICovCisjZGVmaW5lIENMS184NV84NjBNICAgICA4NTg2MDAwMAorI2RlZmluZSBDTEtfODhfNzUwTSAgICAgODg3NTAwMDAKKyNkZWZpbmUgQ0xLXzk0XzUwME0gICAgIDk0NTAwMDAwCisjZGVmaW5lIENMS185N183NTBNICAgICA5Nzc1MDAwMAorI2RlZmluZSBDTEtfMTAxXzAwME0gICAgMTAxMDAwMDAwCisjZGVmaW5lIENMS18xMDZfNTAwTSAgICAxMDY1MDAwMDAKKyNkZWZpbmUgQ0xLXzEwOF8wMDBNICAgIDEwODAwMDAwMAorI2RlZmluZSBDTEtfMTEzXzMwOU0gICAgMTEzMzA5MDAwCisjZGVmaW5lIENMS18xMThfODQwTSAgICAxMTg4NDAwMDAKKyNkZWZpbmUgQ0xLXzExOV8wMDBNICAgIDExOTAwMDAwMAorI2RlZmluZSBDTEtfMTIxXzc1ME0gICAgMTIxNzUwMDAwCS8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgQ0xLXzEyNV8xMDRNICAgIDEyNTEwNDAwMAorI2RlZmluZSBDTEtfMTMzXzMwOE0gICAgMTMzMzA4MDAwCisjZGVmaW5lIENMS18xMzVfMDAwTSAgICAxMzUwMDAwMDAKKyNkZWZpbmUgQ0xLXzEzNl83MDBNICAgIDEzNjcwMDAwMAorI2RlZmluZSBDTEtfMTM4XzQwME0gICAgMTM4NDAwMDAwCisjZGVmaW5lIENMS18xNDZfNzYwTSAgICAxNDY3NjAwMDAKKyNkZWZpbmUgQ0xLXzE0OF81MDBNICAgIDE0ODUwMDAwMAorCisjZGVmaW5lIENMS18xNTNfOTIwTSAgICAxNTM5MjAwMDAKKyNkZWZpbmUgQ0xLXzE1Nl8wMDBNICAgIDE1NjAwMDAwMAorI2RlZmluZSBDTEtfMTU3XzUwME0gICAgMTU3NTAwMDAwCisjZGVmaW5lIENMS18xNjJfMDAwTSAgICAxNjIwMDAwMDAKKyNkZWZpbmUgQ0xLXzE4N18wMDBNICAgIDE4NzAwMDAwMAorI2RlZmluZSBDTEtfMTkzXzI5NU0gICAgMTkzMjk1MDAwCisjZGVmaW5lIENMS18yMDJfNTAwTSAgICAyMDI1MDAwMDAKKyNkZWZpbmUgQ0xLXzIwNF8wMDBNICAgIDIwNDAwMDAwMAorI2RlZmluZSBDTEtfMjE4XzUwME0gICAgMjE4NTAwMDAwCisjZGVmaW5lIENMS18yMzRfMDAwTSAgICAyMzQwMDAwMDAKKyNkZWZpbmUgQ0xLXzI2N18yNTBNICAgIDI2NzI1MDAwMAorI2RlZmluZSBDTEtfMjk3XzUwME0gICAgMjk3NTAwMDAwCisjZGVmaW5lIENMS183NF80ODFNICAgICA3NDQ4MTAwMAorI2RlZmluZSBDTEtfMTcyXzc5OE0gICAgMTcyNzk4MDAwCisjZGVmaW5lIENMS18xMjJfNjE0TSAgICAxMjI2MTQwMDAKKworLyogQ0xFMjY2IFBMTCB2YWx1ZQorKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF8yNV8xNzVNICAgICAweDAwMDBDNzYzCisjZGVmaW5lIENMRTI2Nl9QTExfMjZfODgwTSAgICAgMHgwMDAwNDQwRgorI2RlZmluZSBDTEUyNjZfUExMXzI5XzU4MU0gICAgIDB4MDAwMDg0MjEKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zMV80OTBNICAgICAweDAwMDA0NzIxCisjZGVmaW5lIENMRTI2Nl9QTExfMzFfNTAwTSAgICAgMHgwMDAwQzNCNQorI2RlZmluZSBDTEUyNjZfUExMXzMxXzcyOE0gICAgIDB4MDAwMDQ3MUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zMl82NjhNICAgICAweDAwMDBDNDQ5CisjZGVmaW5lIENMRTI2Nl9QTExfMzZfMDAwTSAgICAgMHgwMDAwQzVFNQorI2RlZmluZSBDTEUyNjZfUExMXzQwXzAwME0gICAgIDB4MDAwMEM0NTkKKyNkZWZpbmUgQ0xFMjY2X1BMTF80MV8yOTFNICAgICAweDAwMDA0NDE3CisjZGVmaW5lIENMRTI2Nl9QTExfNDNfMTYzTSAgICAgMHgwMDAwQzU3OQorI2RlZmluZSBDTEUyNjZfUExMXzQ1XzI1ME0gICAgIDB4MDAwMEM1N0YJLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF80Nl8wMDBNICAgICAweDAwMDA4NzVBCisjZGVmaW5lIENMRTI2Nl9QTExfNDZfOTk2TSAgICAgMHgwMDAwQzRFOQorI2RlZmluZSBDTEUyNjZfUExMXzQ4XzAwME0gICAgIDB4MDAwMDE0NDMKKyNkZWZpbmUgQ0xFMjY2X1BMTF80OF84NzVNICAgICAweDAwMDAxRDYzCisjZGVmaW5lIENMRTI2Nl9QTExfNDlfNTAwTSAgICAgMHgwMDAwODY1MworI2RlZmluZSBDTEUyNjZfUExMXzUyXzQwNk0gICAgIDB4MDAwMEM0NzUKKyNkZWZpbmUgQ0xFMjY2X1BMTF81Ml85NzdNICAgICAweDAwMDA0NTI1CisjZGVmaW5lIENMRTI2Nl9QTExfNTZfMjUwTSAgICAgMHgwMDAwNDdCNworI2RlZmluZSBDTEUyNjZfUExMXzYwXzQ2Nk0gICAgIDB4MDAwMDQ5NEMKKyNkZWZpbmUgQ0xFMjY2X1BMTF82MV81MDBNICAgICAweDAwMDAxNDU2CisjZGVmaW5lIENMRTI2Nl9QTExfNjVfMDAwTSAgICAgMHgwMDAwODZFRAorI2RlZmluZSBDTEUyNjZfUExMXzY1XzE3OE0gICAgIDB4MDAwMDg1NUIKKyNkZWZpbmUgQ0xFMjY2X1BMTF82Nl83NTBNICAgICAweDAwMDA4NDRCCS8qIDY3LjExNk1IeiAqLworI2RlZmluZSBDTEUyNjZfUExMXzY4XzE3OU0gICAgIDB4MDAwMDA0MTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF82OV85MjRNICAgICAweDAwMDAxMTUzCisjZGVmaW5lIENMRTI2Nl9QTExfNzBfMTU5TSAgICAgMHgwMDAwMTQ2MgorI2RlZmluZSBDTEUyNjZfUExMXzcyXzAwME0gICAgIDB4MDAwMDE4NzkKKyNkZWZpbmUgQ0xFMjY2X1BMTF83NF8yNzBNICAgICAweDAwMDA0ODUzCisjZGVmaW5lIENMRTI2Nl9QTExfNzhfNzUwTSAgICAgMHgwMDAwNDMyMQorI2RlZmluZSBDTEUyNjZfUExMXzgwXzEzNk0gICAgIDB4MDAwMDA1MUMKKyNkZWZpbmUgQ0xFMjY2X1BMTF84M18zNzVNICAgICAweDAwMDBDMjVECisjZGVmaW5lIENMRTI2Nl9QTExfODNfOTUwTSAgICAgMHgwMDAwMDcyOQorI2RlZmluZSBDTEUyNjZfUExMXzg0Xzc1ME0gICAgIDB4MDAwMDg1NzYJLyogODQuNTM3TUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfODVfODYwTSAgICAgMHgwMDAwNDc1NAorI2RlZmluZSBDTEUyNjZfUExMXzg4Xzc1ME0gICAgIDB4MDAwMDA1MUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF85NF81MDBNICAgICAweDAwMDAwNTIxCisjZGVmaW5lIENMRTI2Nl9QTExfOTdfNzUwTSAgICAgMHgwMDAwNDY1MgorI2RlZmluZSBDTEUyNjZfUExMXzEwMV8wMDBNICAgIDB4MDAwMDQ5N0YKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMDZfNTAwTSAgICAweDAwMDA4NDc3CS8qIDEwNi40OTE0NjMgTUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfMTA4XzAwME0gICAgMHgwMDAwODQ3OQorI2RlZmluZSBDTEUyNjZfUExMXzExM18zMDlNICAgIDB4MDAwMDBDNUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMThfODQwTSAgICAweDAwMDA0NTUzCisjZGVmaW5lIENMRTI2Nl9QTExfMTE5XzAwME0gICAgMHgwMDAwMEQ2QworI2RlZmluZSBDTEUyNjZfUExMXzEyMV83NTBNICAgIDB4MDAwMDQ1NTUJLyogMTIxLjcwNE1IeiAqLworI2RlZmluZSBDTEUyNjZfUExMXzEyNV8xMDRNICAgIDB4MDAwMDA2QjUKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMzNfMzA4TSAgICAweDAwMDA0NjVGCisjZGVmaW5lIENMRTI2Nl9QTExfMTM1XzAwME0gICAgMHgwMDAwNDU1RQorI2RlZmluZSBDTEUyNjZfUExMXzEzNl83MDBNICAgIDB4MDAwMDBDNzMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMzhfNDAwTSAgICAweDAwMDAwOTU3CisjZGVmaW5lIENMRTI2Nl9QTExfMTQ2Xzc2ME0gICAgMHgwMDAwNDU2NworI2RlZmluZSBDTEUyNjZfUExMXzE0OF81MDBNICAgIDB4MDAwMDA4NTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNTNfOTIwTSAgICAweDAwMDAwODU2CisjZGVmaW5lIENMRTI2Nl9QTExfMTU2XzAwME0gICAgMHgwMDAwNDU2RAorI2RlZmluZSBDTEUyNjZfUExMXzE1N181MDBNICAgIDB4MDAwMDA1QjcKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNjJfMDAwTSAgICAweDAwMDA0NTcxCisjZGVmaW5lIENMRTI2Nl9QTExfMTg3XzAwME0gICAgMHgwMDAwMDk3NgorI2RlZmluZSBDTEUyNjZfUExMXzE5M18yOTVNICAgIDB4MDAwMDA4NkMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yMDJfNTAwTSAgICAweDAwMDAwNzYzCisjZGVmaW5lIENMRTI2Nl9QTExfMjA0XzAwME0gICAgMHgwMDAwMDc2NAorI2RlZmluZSBDTEUyNjZfUExMXzIxOF81MDBNICAgIDB4MDAwMDA2NUMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yMzRfMDAwTSAgICAweDAwMDAwNjYyCisjZGVmaW5lIENMRTI2Nl9QTExfMjY3XzI1ME0gICAgMHgwMDAwMDY3MAorI2RlZmluZSBDTEUyNjZfUExMXzI5N181MDBNICAgIDB4MDAwMDA1RTYKKyNkZWZpbmUgQ0xFMjY2X1BMTF83NF80ODFNICAgICAweDAwMDAwNTFBCisjZGVmaW5lIENMRTI2Nl9QTExfMTcyXzc5OE0gICAgMHgwMDAwNDU3OQorI2RlZmluZSBDTEUyNjZfUExMXzEyMl82MTRNICAgIDB4MDAwMDA3M0MKKworLyogSzgwMCBQTEwgdmFsdWUKKyovCisjZGVmaW5lIEs4MDBfUExMXzI1XzE3NU0gICAgIDB4MDA1MzkwMDEKKyNkZWZpbmUgSzgwMF9QTExfMjZfODgwTSAgICAgMHgwMDFDOEM4MAorI2RlZmluZSBLODAwX1BMTF8yOV81ODFNICAgICAweDAwNDA5MDgwCisjZGVmaW5lIEs4MDBfUExMXzMxXzQ5ME0gICAgIDB4MDA2RjkwMDEKKyNkZWZpbmUgSzgwMF9QTExfMzFfNTAwTSAgICAgMHgwMDhCOTAwMgorI2RlZmluZSBLODAwX1BMTF8zMV83MjhNICAgICAweDAwQUY5MDAzCisjZGVmaW5lIEs4MDBfUExMXzMyXzY2OE0gICAgIDB4MDA5MDkwMDIKKyNkZWZpbmUgSzgwMF9QTExfMzZfMDAwTSAgICAgMHgwMDlGOTAwMgorI2RlZmluZSBLODAwX1BMTF80MF8wMDBNICAgICAweDAwNTc4QzAyCisjZGVmaW5lIEs4MDBfUExMXzQxXzI5MU0gICAgIDB4MDA0MzhDMDEKKyNkZWZpbmUgSzgwMF9QTExfNDNfMTYzTSAgICAgMHgwMDc3OEMwMworI2RlZmluZSBLODAwX1BMTF80NV8yNTBNICAgICAweDAwN0Q4QzgzCS8qIDQ1LjQ2TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzQ2XzAwME0gICAgIDB4MDA2NThDMDIKKyNkZWZpbmUgSzgwMF9QTExfNDZfOTk2TSAgICAgMHgwMDgxOEM4MworI2RlZmluZSBLODAwX1BMTF80OF8wMDBNICAgICAweDAwODQ4QzgzCisjZGVmaW5lIEs4MDBfUExMXzQ4Xzg3NU0gICAgIDB4MDA1MDhDODEKKyNkZWZpbmUgSzgwMF9QTExfNDlfNTAwTSAgICAgMHgwMDUxOEMwMQorI2RlZmluZSBLODAwX1BMTF81Ml80MDZNICAgICAweDAwNzM4QzAyCisjZGVmaW5lIEs4MDBfUExMXzUyXzk3N00gICAgIDB4MDA5MjhDODMKKyNkZWZpbmUgSzgwMF9QTExfNTZfMjUwTSAgICAgMHgwMDdDOEMwMgorI2RlZmluZSBLODAwX1BMTF82MF80NjZNICAgICAweDAwQTc4QzgzCisjZGVmaW5lIEs4MDBfUExMXzYxXzUwME0gICAgIDB4MDBBQThDODMKKyNkZWZpbmUgSzgwMF9QTExfNjVfMDAwTSAgICAgMHgwMDZCOEMwMQorI2RlZmluZSBLODAwX1BMTF82NV8xNzhNICAgICAweDAwQjQ4QzgzCisjZGVmaW5lIEs4MDBfUExMXzY2Xzc1ME0gICAgIDB4MDA5NDhDODIJLyogNjcuMTE2TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzY4XzE3OU0gICAgIDB4MDA3MDhDMDEKKyNkZWZpbmUgSzgwMF9QTExfNjlfOTI0TSAgICAgMHgwMEMxOEM4MworI2RlZmluZSBLODAwX1BMTF83MF8xNTlNICAgICAweDAwQzI4QzgzCisjZGVmaW5lIEs4MDBfUExMXzcyXzAwME0gICAgIDB4MDA5RjhDODIKKyNkZWZpbmUgSzgwMF9QTExfNzRfMjcwTSAgICAgMHgwMGNlMGMwMworI2RlZmluZSBLODAwX1BMTF83OF83NTBNICAgICAweDAwNDA4ODAxCisjZGVmaW5lIEs4MDBfUExMXzgwXzEzNk0gICAgIDB4MDA0Mjg4MDEKKyNkZWZpbmUgSzgwMF9QTExfODNfMzc1TSAgICAgMHgwMDVCMDg4MgorI2RlZmluZSBLODAwX1BMTF84M185NTBNICAgICAweDAwNzM4ODAzCisjZGVmaW5lIEs4MDBfUExMXzg0Xzc1ME0gICAgIDB4MDA3NDg4ODMJLyogODQuNDc3TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzg1Xzg2ME0gICAgIDB4MDA3Njg4ODMKKyNkZWZpbmUgSzgwMF9QTExfODhfNzUwTSAgICAgMHgwMDdBODg4MworI2RlZmluZSBLODAwX1BMTF85NF81MDBNICAgICAweDAwODI4ODAzCisjZGVmaW5lIEs4MDBfUExMXzk3Xzc1ME0gICAgIDB4MDA4Nzg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTAxXzAwME0gICAgMHgwMDhCODg4MworI2RlZmluZSBLODAwX1BMTF8xMDZfNTAwTSAgICAweDAwNzU4ODgyCS8qIDEwNi40OTE0NjMgTUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzEwOF8wMDBNICAgIDB4MDA3Nzg4ODIKKyNkZWZpbmUgSzgwMF9QTExfMTEzXzMwOU0gICAgMHgwMDVEODg4MQorI2RlZmluZSBLODAwX1BMTF8xMThfODQwTSAgICAweDAwQTQ4ODgzCisjZGVmaW5lIEs4MDBfUExMXzExOV8wMDBNICAgIDB4MDA4Mzg4ODIKKyNkZWZpbmUgSzgwMF9QTExfMTIxXzc1ME0gICAgMHgwMEE4ODg4MwkvKiAxMjEuNzA0TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzEyNV8xMDRNICAgIDB4MDA2ODg4MDEKKyNkZWZpbmUgSzgwMF9QTExfMTMzXzMwOE0gICAgMHgwMDVEODgwMQorI2RlZmluZSBLODAwX1BMTF8xMzVfMDAwTSAgICAweDAwMUE0MDgxCisjZGVmaW5lIEs4MDBfUExMXzEzNl83MDBNICAgIDB4MDBCRDg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTM4XzQwME0gICAgMHgwMDcyODg4MQorI2RlZmluZSBLODAwX1BMTF8xNDZfNzYwTSAgICAweDAwQ0M4ODgzCisjZGVmaW5lIEs4MDBfUExMXzE0OF81MDBNICAgIDB4MDBjZTA4MDMKKyNkZWZpbmUgSzgwMF9QTExfMTUzXzkyME0gICAgMHgwMDU0ODQ4MgorI2RlZmluZSBLODAwX1BMTF8xNTZfMDAwTSAgICAweDAwNkI4NDgzCisjZGVmaW5lIEs4MDBfUExMXzE1N181MDBNICAgIDB4MDAxNDIwODAKKyNkZWZpbmUgSzgwMF9QTExfMTYyXzAwME0gICAgMHgwMDZGODQ4MworI2RlZmluZSBLODAwX1BMTF8xODdfMDAwTSAgICAweDAwODE4NDgzCisjZGVmaW5lIEs4MDBfUExMXzE5M18yOTVNICAgIDB4MDA0Rjg0ODEKKyNkZWZpbmUgSzgwMF9QTExfMjAyXzUwME0gICAgMHgwMDUzODQ4MQorI2RlZmluZSBLODAwX1BMTF8yMDRfMDAwTSAgICAweDAwOEQ4NDgzCisjZGVmaW5lIEs4MDBfUExMXzIxOF81MDBNICAgIDB4MDA5Nzg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMjM0XzAwME0gICAgMHgwMDYwODQwMQorI2RlZmluZSBLODAwX1BMTF8yNjdfMjUwTSAgICAweDAwNkU4NDgxCisjZGVmaW5lIEs4MDBfUExMXzI5N181MDBNICAgIDB4MDBBNDg0MDIKKyNkZWZpbmUgSzgwMF9QTExfNzRfNDgxTSAgICAgMHgwMDdCOEM4MQorI2RlZmluZSBLODAwX1BMTF8xNzJfNzk4TSAgICAweDAwNzc4NDgzCisjZGVmaW5lIEs4MDBfUExMXzEyMl82MTRNICAgIDB4MDA4Nzg4ODIKKworLyogUExMIGZvciBWVDMzMjQgKi8KKyNkZWZpbmUgQ1g3MDBfMjVfMTc1TSAgICAgMHgwMDhCMTAwMworI2RlZmluZSBDWDcwMF8yNl83MTlNICAgICAweDAwOTMxMDAzCisjZGVmaW5lIENYNzAwXzI2Xzg4ME0gICAgIDB4MDA5NDEwMDMKKyNkZWZpbmUgQ1g3MDBfMjlfNTgxTSAgICAgMHgwMEE0OTAwMworI2RlZmluZSBDWDcwMF8zMV80OTBNICAgICAweDAwQUUxMDAzCisjZGVmaW5lIENYNzAwXzMxXzUwME0gICAgIDB4MDBBRTEwMDMKKyNkZWZpbmUgQ1g3MDBfMzFfNzI4TSAgICAgMHgwMEFGMTAwMworI2RlZmluZSBDWDcwMF8zMl82NjhNICAgICAweDAwQjUxMDAzCisjZGVmaW5lIENYNzAwXzM2XzAwME0gICAgIDB4MDBDODEwMDMKKyNkZWZpbmUgQ1g3MDBfNDBfMDAwTSAgICAgMHgwMDZFMEMwMworI2RlZmluZSBDWDcwMF80MV8yOTFNICAgICAweDAwNzEwQzAzCisjZGVmaW5lIENYNzAwXzQzXzE2M00gICAgIDB4MDA3NzBDMDMKKyNkZWZpbmUgQ1g3MDBfNDVfMjUwTSAgICAgMHgwMDdEMEMwMwkvKiA0NS40Nk1IeiAqLworI2RlZmluZSBDWDcwMF80Nl8wMDBNICAgICAweDAwN0YwQzAzCisjZGVmaW5lIENYNzAwXzQ2Xzk5Nk0gICAgIDB4MDA4MThDODMKKyNkZWZpbmUgQ1g3MDBfNDhfMDAwTSAgICAgMHgwMDg0MEMwMworI2RlZmluZSBDWDcwMF80OF84NzVNICAgICAweDAwNTA4QzgxCisjZGVmaW5lIENYNzAwXzQ5XzUwME0gICAgIDB4MDA4ODBDMDMKKyNkZWZpbmUgQ1g3MDBfNTJfNDA2TSAgICAgMHgwMDczMEMwMgorI2RlZmluZSBDWDcwMF81Ml85NzdNICAgICAweDAwOTIwQzAzCisjZGVmaW5lIENYNzAwXzU2XzI1ME0gICAgIDB4MDA5QjBDMDMKKyNkZWZpbmUgQ1g3MDBfNjBfNDY2TSAgICAgMHgwMDQ2MEMwMAorI2RlZmluZSBDWDcwMF82MV81MDBNICAgICAweDAwQUEwQzAzCisjZGVmaW5lIENYNzAwXzY1XzAwME0gICAgIDB4MDA2QjBDMDEKKyNkZWZpbmUgQ1g3MDBfNjVfMTc4TSAgICAgMHgwMDZCMEMwMQorI2RlZmluZSBDWDcwMF82Nl83NTBNICAgICAweDAwOTQwQzAyCS8qNjcuMTE2TUh6ICovCisjZGVmaW5lIENYNzAwXzY4XzE3OU0gICAgIDB4MDBCQzBDMDMKKyNkZWZpbmUgQ1g3MDBfNjlfOTI0TSAgICAgMHgwMEMxMEMwMworI2RlZmluZSBDWDcwMF83MF8xNTlNICAgICAweDAwQzIwQzAzCisjZGVmaW5lIENYNzAwXzcyXzAwME0gICAgIDB4MDA5RjBDMDIKKyNkZWZpbmUgQ1g3MDBfNzRfMjcwTSAgICAgMHgwMENFMEMwMworI2RlZmluZSBDWDcwMF83NF80ODFNICAgICAweDAwQ0UwQzAzCisjZGVmaW5lIENYNzAwXzc4Xzc1ME0gICAgIDB4MDA2QzA4MDMKKyNkZWZpbmUgQ1g3MDBfODBfMTM2TSAgICAgMHgwMDZFMDgwMworI2RlZmluZSBDWDcwMF84M18zNzVNICAgICAweDAwNUIwODgyCisjZGVmaW5lIENYNzAwXzgzXzk1ME0gICAgIDB4MDA3MzA4MDMKKyNkZWZpbmUgQ1g3MDBfODRfNzUwTSAgICAgMHgwMDc0MDgwMwkvKiA4NC41MzdNaHogKi8KKyNkZWZpbmUgQ1g3MDBfODVfODYwTSAgICAgMHgwMDc2MDgwMworI2RlZmluZSBDWDcwMF84OF83NTBNICAgICAweDAwQUM4ODg1CisjZGVmaW5lIENYNzAwXzk0XzUwME0gICAgIDB4MDA4MjA4MDMKKyNkZWZpbmUgQ1g3MDBfOTdfNzUwTSAgICAgMHgwMDg3MDgwMworI2RlZmluZSBDWDcwMF8xMDFfMDAwTSAgICAweDAwOEIwODAzCisjZGVmaW5lIENYNzAwXzEwNl81MDBNICAgIDB4MDA3NTA4MDIKKyNkZWZpbmUgQ1g3MDBfMTA4XzAwME0gICAgMHgwMDk1MDgwMworI2RlZmluZSBDWDcwMF8xMTNfMzA5TSAgICAweDAwNUQwODAxCisjZGVmaW5lIENYNzAwXzExOF84NDBNICAgIDB4MDBBNDA4MDMKKyNkZWZpbmUgQ1g3MDBfMTE5XzAwME0gICAgMHgwMDgzMDgwMgorI2RlZmluZSBDWDcwMF8xMjFfNzUwTSAgICAweDAwNDIwODAwCS8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgQ1g3MDBfMTI1XzEwNE0gICAgMHgwMEFEMDgwMworI2RlZmluZSBDWDcwMF8xMzNfMzA4TSAgICAweDAwOTMwODAyCisjZGVmaW5lIENYNzAwXzEzNV8wMDBNICAgIDB4MDA5NTA4MDIKKyNkZWZpbmUgQ1g3MDBfMTM2XzcwME0gICAgMHgwMEJEMDgwMworI2RlZmluZSBDWDcwMF8xMzhfNDAwTSAgICAweDAwNzIwODAxCisjZGVmaW5lIENYNzAwXzE0Nl83NjBNICAgIDB4MDBDQzA4MDMKKyNkZWZpbmUgQ1g3MDBfMTQ4XzUwME0gICAgMHgwMGE0MDgwMgorI2RlZmluZSBDWDcwMF8xNTNfOTIwTSAgICAweDAwNTQwNDAyCisjZGVmaW5lIENYNzAwXzE1Nl8wMDBNICAgIDB4MDA2QjA0MDMKKyNkZWZpbmUgQ1g3MDBfMTU3XzUwME0gICAgMHgwMDZDMDQwMworI2RlZmluZSBDWDcwMF8xNjJfMDAwTSAgICAweDAwNkYwNDAzCisjZGVmaW5lIENYNzAwXzE3Ml83OThNICAgIDB4MDA3NzA0MDMKKyNkZWZpbmUgQ1g3MDBfMTg3XzAwME0gICAgMHgwMDgxMDQwMworI2RlZmluZSBDWDcwMF8xOTNfMjk1TSAgICAweDAwODUwNDAzCisjZGVmaW5lIENYNzAwXzIwMl81MDBNICAgIDB4MDA4QzA0MDMKKyNkZWZpbmUgQ1g3MDBfMjA0XzAwME0gICAgMHgwMDhEMDQwMworI2RlZmluZSBDWDcwMF8yMThfNTAwTSAgICAweDAwOTcwNDAzCisjZGVmaW5lIENYNzAwXzIzNF8wMDBNICAgIDB4MDA2MDA0MDEKKyNkZWZpbmUgQ1g3MDBfMjY3XzI1ME0gICAgMHgwMEI5MDQwMworI2RlZmluZSBDWDcwMF8yOTdfNTAwTSAgICAweDAwQ0UwNDAzCisjZGVmaW5lIENYNzAwXzEyMl82MTRNICAgIDB4MDA4NzA4MDIKKworLyogRGVmaW5pdGlvbiBDUlRDIFRpbWluZyBJbmRleCAqLworI2RlZmluZSBIX1RPVEFMX0lOREVYICAgICAgICAgICAgICAgMAorI2RlZmluZSBIX0FERFJfSU5ERVggICAgICAgICAgICAgICAgMQorI2RlZmluZSBIX0JMQU5LX1NUQVJUX0lOREVYICAgICAgICAgMgorI2RlZmluZSBIX0JMQU5LX0VORF9JTkRFWCAgICAgICAgICAgMworI2RlZmluZSBIX1NZTkNfU1RBUlRfSU5ERVggICAgICAgICAgNAorI2RlZmluZSBIX1NZTkNfRU5EX0lOREVYICAgICAgICAgICAgNQorI2RlZmluZSBWX1RPVEFMX0lOREVYICAgICAgICAgICAgICAgNgorI2RlZmluZSBWX0FERFJfSU5ERVggICAgICAgICAgICAgICAgNworI2RlZmluZSBWX0JMQU5LX1NUQVJUX0lOREVYICAgICAgICAgOAorI2RlZmluZSBWX0JMQU5LX0VORF9JTkRFWCAgICAgICAgICAgOQorI2RlZmluZSBWX1NZTkNfU1RBUlRfSU5ERVggICAgICAgICAgMTAKKyNkZWZpbmUgVl9TWU5DX0VORF9JTkRFWCAgICAgICAgICAgIDExCisjZGVmaW5lIEhfVE9UQUxfU0hBRE9XX0lOREVYICAgICAgICAxMgorI2RlZmluZSBIX0JMQU5LX0VORF9TSEFET1dfSU5ERVggICAgMTMKKyNkZWZpbmUgVl9UT1RBTF9TSEFET1dfSU5ERVggICAgICAgIDE0CisjZGVmaW5lIFZfQUREUl9TSEFET1dfSU5ERVggICAgICAgICAxNQorI2RlZmluZSBWX0JMQU5LX1NBVFJUX1NIQURPV19JTkRFWCAgMTYKKyNkZWZpbmUgVl9CTEFOS19FTkRfU0hBRE9XX0lOREVYICAgIDE3CisjZGVmaW5lIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVggICAxOAorI2RlZmluZSBWX1NZTkNfRU5EX1NIQURPV19JTkRFWCAgICAgMTkKKworLyogRGVmaW5pdGlvbiBWaWRlbyBNb2RlIFBpeGVsIENsb2NrIChwaWNvc2Vjb25kcykKKyovCisjZGVmaW5lIFJFU180ODBYNjQwXzYwSFpfUElYQ0xPQ0sgICAgMzk3MjIKKyNkZWZpbmUgUkVTXzY0MFg0ODBfNjBIWl9QSVhDTE9DSyAgICAzOTcyMgorI2RlZmluZSBSRVNfNjQwWDQ4MF83NUhaX1BJWENMT0NLICAgIDMxNzQ3CisjZGVmaW5lIFJFU182NDBYNDgwXzg1SFpfUElYQ0xPQ0sgICAgMjc3NzcKKyNkZWZpbmUgUkVTXzY0MFg0ODBfMTAwSFpfUElYQ0xPQ0sgICAyMzE2OAorI2RlZmluZSBSRVNfNjQwWDQ4MF8xMjBIWl9QSVhDTE9DSyAgIDE5MDgxCisjZGVmaW5lIFJFU183MjBYNDgwXzYwSFpfUElYQ0xPQ0sgICAgMzcwMjAKKyNkZWZpbmUgUkVTXzcyMFg1NzZfNjBIWl9QSVhDTE9DSyAgICAzMDYxMQorI2RlZmluZSBSRVNfODAwWDYwMF82MEhaX1BJWENMT0NLICAgIDI1MDAwCisjZGVmaW5lIFJFU184MDBYNjAwXzc1SFpfUElYQ0xPQ0sgICAgMjAyMDMKKyNkZWZpbmUgUkVTXzgwMFg2MDBfODVIWl9QSVhDTE9DSyAgICAxNzc3NworI2RlZmluZSBSRVNfODAwWDYwMF8xMDBIWl9QSVhDTE9DSyAgIDE0NjY3CisjZGVmaW5lIFJFU184MDBYNjAwXzEyMEhaX1BJWENMT0NLICAgMTE5MTIKKyNkZWZpbmUgUkVTXzgwMFg0ODBfNjBIWl9QSVhDTE9DSyAgICAzMzgwNQorI2RlZmluZSBSRVNfODQ4WDQ4MF82MEhaX1BJWENMT0NLICAgIDMxNzU2CisjZGVmaW5lIFJFU184NTZYNDgwXzYwSFpfUElYQ0xPQ0sgICAgMzE1MTgKKyNkZWZpbmUgUkVTXzEwMjRYNTEyXzYwSFpfUElYQ0xPQ0sgICAyNDIxOAorI2RlZmluZSBSRVNfMTAyNFg2MDBfNjBIWl9QSVhDTE9DSyAgIDIwNDYwCisjZGVmaW5lIFJFU18xMDI0WDc2OF82MEhaX1BJWENMT0NLICAgMTUzODUKKyNkZWZpbmUgUkVTXzEwMjRYNzY4Xzc1SFpfUElYQ0xPQ0sgICAxMjY5OQorI2RlZmluZSBSRVNfMTAyNFg3NjhfODVIWl9QSVhDTE9DSyAgIDEwNTgyCisjZGVmaW5lIFJFU18xMDI0WDc2OF8xMDBIWl9QSVhDTE9DSyAgODgyNQorI2RlZmluZSBSRVNfMTE1Mlg4NjRfNzVIWl9QSVhDTE9DSyAgIDkyNTkKKyNkZWZpbmUgUkVTXzEyODBYNzY4XzYwSFpfUElYQ0xPQ0sgICAxMjQ4MAorI2RlZmluZSBSRVNfMTI4MFg4MDBfNjBIWl9QSVhDTE9DSyAgIDExOTk0CisjZGVmaW5lIFJFU18xMjgwWDk2MF82MEhaX1BJWENMT0NLICAgOTI1OQorI2RlZmluZSBSRVNfMTI4MFgxMDI0XzYwSFpfUElYQ0xPQ0sgIDkyNjAKKyNkZWZpbmUgUkVTXzEyODBYMTAyNF83NUhaX1BJWENMT0NLICA3NDA4CisjZGVmaW5lIFJFU18xMjgwWDc2OF84NUhaX1BJWENMT0NLICAgNjM0OQorI2RlZmluZSBSRVNfMTQ0MFgxMDUwXzYwSFpfUElYQ0xPQ0sgIDc5OTMKKyNkZWZpbmUgUkVTXzE2MDBYMTIwMF82MEhaX1BJWENMT0NLICA2MTcyCisjZGVmaW5lIFJFU18xNjAwWDEyMDBfNzVIWl9QSVhDTE9DSyAgNDkzOAorI2RlZmluZSBSRVNfMTI4MFg3MjBfNjBIWl9QSVhDTE9DSyAgIDEzNDI2CisjZGVmaW5lIFJFU18xOTIwWDEwODBfNjBIWl9QSVhDTE9DSyAgNTc4NworI2RlZmluZSBSRVNfMTQwMFgxMDUwXzYwSFpfUElYQ0xPQ0sgIDgyMTQKKyNkZWZpbmUgUkVTXzE0MDBYMTA1MF83NUhaX1BJWENMT0NLICA2NDEwCisjZGVmaW5lIFJFU18xMzY4WDc2OF82MEhaX1BJWENMT0NLICAgMTE2NDcKKyNkZWZpbmUgUkVTXzk2MFg2MDBfNjBIWl9QSVhDTE9DSyAgICAgIDIyMDk5CisjZGVmaW5lIFJFU18xMDAwWDYwMF82MEhaX1BJWENMT0NLICAgIDIwODM0CisjZGVmaW5lIFJFU18xMDI0WDU3Nl82MEhaX1BJWENMT0NLICAgIDIxMjc4CisjZGVmaW5lIFJFU18xMDg4WDYxMl82MEhaX1BJWENMT0NLICAgIDE4ODc3CisjZGVmaW5lIFJFU18xMTUyWDcyMF82MEhaX1BJWENMT0NLICAgIDE0OTgxCisjZGVmaW5lIFJFU18xMjAwWDcyMF82MEhaX1BJWENMT0NLICAgIDE0MjUzCisjZGVmaW5lIFJFU18xMjgwWDYwMF82MEhaX1BJWENMT0NLICAgIDE2MjYwCisjZGVmaW5lIFJFU18xMjgwWDcyMF81MEhaX1BJWENMT0NLICAgIDE2NTM4CisjZGVmaW5lIFJFU18xMjgwWDc2OF81MEhaX1BJWENMT0NLICAgIDE1MzQyCisjZGVmaW5lIFJFU18xMzY2WDc2OF81MEhaX1BJWENMT0NLICAgIDE0MzAxCisjZGVmaW5lIFJFU18xMzY2WDc2OF82MEhaX1BJWENMT0NLICAgIDExNjQ2CisjZGVmaW5lIFJFU18xMzYwWDc2OF82MEhaX1BJWENMT0NLICAgIDExNzk5CisjZGVmaW5lIFJFU18xNDQwWDkwMF82MEhaX1BJWENMT0NLICAgIDkzOTAKKyNkZWZpbmUgUkVTXzE0NDBYOTAwXzc1SFpfUElYQ0xPQ0sgICAgNzMxNQorI2RlZmluZSBSRVNfMTYwMFg5MDBfNjBIWl9QSVhDTE9DSyAgICA4NDE1CisjZGVmaW5lIFJFU18xNjAwWDEwMjRfNjBIWl9QSVhDTE9DSyAgIDczMTUKKyNkZWZpbmUgUkVTXzE2ODBYMTA1MF82MEhaX1BJWENMT0NLICAgNjgxNAorI2RlZmluZSBSRVNfMTY4MFgxMDUwXzc1SFpfUElYQ0xPQ0sgICA1MzQ4CisjZGVmaW5lIFJFU18xNzkyWDEzNDRfNjBIWl9QSVhDTE9DSyAgIDQ5MDIKKyNkZWZpbmUgUkVTXzE4NTZYMTM5Ml82MEhaX1BJWENMT0NLICAgNDU3NworI2RlZmluZSBSRVNfMTkyMFgxMjAwXzYwSFpfUElYQ0xPQ0sgICA1MTczCisjZGVmaW5lIFJFU18xOTIwWDE0NDBfNjBIWl9QSVhDTE9DSyAgIDQyNzQKKyNkZWZpbmUgUkVTXzE5MjBYMTQ0MF83NUhaX1BJWENMT0NLICAgMzM2NworI2RlZmluZSBSRVNfMjA0OFgxNTM2XzYwSFpfUElYQ0xPQ0sgICAzNzQyCisKKyNkZWZpbmUgUkVTXzEzNjBYNzY4X1JCXzYwSFpfUElYQ0xPQ0sgMTM4ODkKKyNkZWZpbmUgUkVTXzE0MDBYMTA1MF9SQl82MEhaX1BJWENMT0NLIDk5MDEKKyNkZWZpbmUgUkVTXzE0NDBYOTAwX1JCXzYwSFpfUElYQ0xPQ0sgICAxMTI2OAorI2RlZmluZSBSRVNfMTYwMFg5MDBfUkJfNjBIWl9QSVhDTE9DSyAgIDEwMjMwCisjZGVmaW5lIFJFU18xNjgwWDEwNTBfUkJfNjBIWl9QSVhDTE9DSyA4NDAzCisjZGVmaW5lIFJFU18xOTIwWDEwODBfUkJfNjBIWl9QSVhDTE9DSyA3MjI1CisjZGVmaW5lIFJFU18xOTIwWDEyMDBfUkJfNjBIWl9QSVhDTE9DSyA2NDk3CisKKy8qIExDRCBkaXNwbGF5IG1ldGhvZAorKi8KKyNkZWZpbmUgICAgIExDRF9FWFBBTkRTSU9OICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICBMQ0RfQ0VOVEVSSU5HICAgICAgICAgICAgICAgMHgwMQorCisvKiBMQ0QgbW9kZQorKi8KKyNkZWZpbmUgICAgIExDRF9PUEVOTERJICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgTENEX1NQV0cgICAgICAgICAgICAgICAgICAweDAxCisKKy8qIERlZmluZSBkaXNwbGF5IHRpbWluZworKi8KK3N0cnVjdCBkaXNwbGF5X3RpbWluZyB7CisJdTE2IGhvcl90b3RhbDsKKwl1MTYgaG9yX2FkZHI7CisJdTE2IGhvcl9ibGFua19zdGFydDsKKwl1MTYgaG9yX2JsYW5rX2VuZDsKKwl1MTYgaG9yX3N5bmNfc3RhcnQ7CisJdTE2IGhvcl9zeW5jX2VuZDsKKwl1MTYgdmVyX3RvdGFsOworCXUxNiB2ZXJfYWRkcjsKKwl1MTYgdmVyX2JsYW5rX3N0YXJ0OworCXUxNiB2ZXJfYmxhbmtfZW5kOworCXUxNiB2ZXJfc3luY19zdGFydDsKKwl1MTYgdmVyX3N5bmNfZW5kOworfTsKKworc3RydWN0IGNydF9tb2RlX3RhYmxlIHsKKwlpbnQgcmVmcmVzaF9yYXRlOworCXVuc2lnbmVkIGxvbmcgY2xrOworCWludCBoX3N5bmNfcG9sYXJpdHk7CisJaW50IHZfc3luY19wb2xhcml0eTsKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0YzsKK307CisKK3N0cnVjdCBpb19yZWcgeworCWludCBwb3J0OworCXU4IGluZGV4OworCXU4IG1hc2s7CisJdTggdmFsdWU7Cit9OworCisjZW5kaWYgLyogX19TSEFSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3RibDE2MzYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibDE2MzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg0NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKK3N0cnVjdCBJT0RBVEEgQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCS8qIFNldCBwYW5lbCBwb3dlciBzZXF1ZW5jZSB0aW1pbmcgKi8KKwl7MHgxMCwgMHhDMCwgMHgwMH0sCisJLyogVDE6IFZERCBvbiAtIERhdGEgb24uIEVhY2ggaW5jcmVtZW50IGlzIDEgbXMuICg1MG1zID0gMDMxaCkgKi8KKwl7MHgwQiwgMHhGRiwgMHg0MH0sCisJLyogVDI6IERhdGEgb24gLSBCYWNrbGlnaHQgb24uIEVhY2ggaW5jcmVtZW50IGlzIDIgbXMuICgyMTBtcyA9IDA2OGgpICovCisJezB4MEMsIDB4RkYsIDB4MzF9LAorCS8qIFQzOiBCYWNrbGlnaHQgb2ZmIC1EYXRhIG9mZi4gRWFjaCBpbmNyZW1lbnQgaXMgMiBtcy4gKDIxMG1zID0gMDY4aCkqLworCXsweDBELCAweEZGLCAweDMxfSwKKwkvKiBUNDogRGF0YSBvZmYgLSBWREQgb2ZmLiBFYWNoIGluY3JlbWVudCBpcyAxIG1zLiAoNTBtcyA9IDAzMWgpICovCisJezB4MEUsIDB4RkYsIDB4Njh9LAorCS8qIFQ1OiBWREQgb2ZmIC0gVkREIG9uLiBFYWNoIGluY3JlbWVudCBpcyAxMDAgbXMuICg1MDBtcyA9IDA0aCkgKi8KKwl7MHgwRiwgMHhGRiwgMHg2OH0sCisJLyogTFZEUyBvdXRwdXQgcG93ZXIgdXAgKi8KKwl7MHgwOSwgMHhBMCwgMHhBMH0sCisJLyogdHVybiBvbiBiYWNrIGxpZ2h0ICovCisJezB4MTAsIDB4MzMsIDB4MTN9Cit9OworCitzdHJ1Y3QgSU9EQVRBIERVQUxfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCXsweDA4LCAweEYwLCAweEUwfQkvKiBJbnB1dCBEYXRhIE1vZGUgU2VsZWN0ICovCit9OworCitzdHJ1Y3QgSU9EQVRBIFNJTkdMRV9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MDgsIDB4RjAsIDB4MDB9CS8qIElucHV0IERhdGEgTW9kZSBTZWxlY3QgKi8KK307CisKK3N0cnVjdCBJT0RBVEEgRElUSEVSSU5HX0VOQUJMRV9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MEEsIDB4NzAsIDB4NTB9Cit9OworCitzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgwQSwgMHg3MCwgMHgwMH0KK307CisKK3N0cnVjdCBJT0RBVEEgVkREX09OX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgxMCwgMHgyMCwgMHgyMH0KK307CisKK3N0cnVjdCBJT0RBVEEgVkREX09GRl9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MTAsIDB4MjAsIDB4MDB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5oIGIvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDYwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmwxNjM2LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVEJMMTYzNl9IXworI2RlZmluZSBfVEJMMTYzNl9IXworI2luY2x1ZGUgImh3LmgiCisKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIENPTU1PTl9JTklUX1RCTF9WVDE2MzZbOF07CitleHRlcm4gc3RydWN0IElPREFUQSBEVUFMX0NIQU5ORUxfRU5BQkxFX1RCTF9WVDE2MzZbMV07CitleHRlcm4gc3RydWN0IElPREFUQSBTSU5HTEVfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19FTkFCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbMV07CitleHRlcm4gc3RydWN0IElPREFUQSBWRERfT05fVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIFZERF9PRkZfVEJMX1ZUMTYzNlsxXTsKKworI2VuZGlmIC8qIF9WSUFfVEJMMTYzNl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5jIGIvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNGM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmxEUEFTZXR0aW5nLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKy8qIEZvciBWVDMzMjQ6ICovCitzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0W10gPSB7CisJLyogUGFuZWwgSUQsICAgICAgIENMS19TRUxfU1QxWzA5XSwgICAgQ0xLX1NFTF9TVDJbMDhdICovCisJe0xDRF9QQU5FTF9JRDBfNjQwWDQ4MCwgMHgwMCwgMHgwMH0sCS8qIEZvciA2NDB4NDgwICAgKi8KKwl7TENEX1BBTkVMX0lEMV84MDBYNjAwLCAweDAwLCAweDAwfSwJLyogRm9yIDgwMHg2MDAgICAqLworCXtMQ0RfUEFORUxfSUQyXzEwMjRYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEwMjR4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQzXzEyODBYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxMjgweDEwMjQgKi8KKwl7TENEX1BBTkVMX0lENV8xNDAwWDEwNTAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTQwMHgxMDUwICovCisJe0xDRF9QQU5FTF9JRDZfMTYwMFgxMjAwLCAweDBCLCAweDAzfQkvKiBGb3IgMTYwMHgxMjAwICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI0W10gPSB7CisvKiAgQ2xrUmFuZ2UsIERWUDAsIERWUDBEYXRhRHJpdmluZywgIERWUDBDbG9ja0RyaXZpbmcsIERWUDEsCisJCQkJCURWUDFEcml2aW5nLCBERlBIaWdoLCBERlBMb3cgKi8KKy8qICBDUjk2LCBTUjJBWzVdLCBTUjFCWzFdLCBTUjJBWzRdLCBTUjFFWzJdLCBDUjlCLAorCQkJCQlTUjY1LCAgICAgICAgQ1I5NywgICAgQ1I5OSAgICovCisJLyogTENLL1ZDSyA8IDMwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8zME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDMwMDAwMDAwIDwgTENLL1ZDSyA8IDUwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8zMF81ME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDUwMDAwMDAwIDwgTENLL1ZDSyA8IDcwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV81MF83ME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDcwMDAwMDAwIDwgTENLL1ZDSyA8IDEwMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCisJe0RQQV9DTEtfUkFOR0VfNzBfMTAwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogMTAwMDAwMDAwIDwgTENLL1ZDSyA8IDE1MDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8xMDBfMTUwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogMTUwMDAwMDAgPCBMQ0svVkNLIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8xNTBNLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBFLCAweDAwLAorCSAweDAwfSwKK307CisKKy8qIEZvciBWVDMzMjc6ICovCitzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3W10gPSB7CisJLyogUGFuZWwgSUQsICAgICAgIENMS19TRUxfU1QxWzA5XSwgICAgQ0xLX1NFTF9TVDJbMDhdICovCisJe0xDRF9QQU5FTF9JRDBfNjQwWDQ4MCwgMHgwMCwgMHgwMH0sCS8qIEZvciA2NDB4NDgwICAgKi8KKwl7TENEX1BBTkVMX0lEMV84MDBYNjAwLCAweDAwLCAweDAwfSwJLyogRm9yIDgwMHg2MDAgICAqLworCXtMQ0RfUEFORUxfSUQyXzEwMjRYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEwMjR4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQzXzEyODBYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxMjgweDEwMjQgKi8KKwl7TENEX1BBTkVMX0lENV8xNDAwWDEwNTAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTQwMHgxMDUwICovCisJe0xDRF9QQU5FTF9JRDZfMTYwMFgxMjAwLCAweDAwLCAweDAwfQkvKiBGb3IgMTYwMHgxMjAwICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI3W10gPSB7CisvKiAgQ2xrUmFuZ2UsRFZQMCwgRFZQMERhdGFEcml2aW5nLCAgRFZQMENsb2NrRHJpdmluZywgRFZQMSwKKwkJCQkJRFZQMURyaXZpbmcsIERGUEhpZ2gsICAgREZQTG93ICovCisvKiAgIENSOTYsIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sIENSOUIsCisJCQkJCVNSNjUsICAgICAgICBDUjk3LCAgICAgIENSOTkgICAqLworLyogTENLL1ZDSyA8IDMwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzMwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwgMHgwMX0sCisvKiAzMDAwMDAwMCA8IExDSy9WQ0sgPCA1MDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8zMF81ME0sIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDF9LAorLyogNTAwMDAwMDAgPCBMQ0svVkNLIDwgNzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfNTBfNzBNLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAxfSwKKy8qIDcwMDAwMDAwIDwgTENLL1ZDSyA8IDEwMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV83MF8xMDBNLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAzfSwKKy8qIDEwMDAwMDAwMCA8IExDSy9WQ0sgPCAxNTAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8xMDBfMTUwTSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMn0sCisvKiAxNTAwMDAwMCA8IExDSy9WQ0sgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMTUwTSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwM30sCit9OworCisvKiBGb3IgVlQzMzY0OiAqLworc3RydWN0IEdGWF9EUEFfU0VUVElORyBHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFtdID0geworLyogIENsa1JhbmdlLERWUDAsIERWUDBEYXRhRHJpdmluZywgIERWUDBDbG9ja0RyaXZpbmcsIERWUDEsCisJCQkJCURWUDFEcml2aW5nLCBERlBIaWdoLCAgIERGUExvdyAqLworLyogICBDUjk2LCBTUjJBWzVdLCBTUjFCWzFdLCBTUjJBWzRdLCBTUjFFWzJdLCBDUjlCLAorCQkJCQlTUjY1LCAgICAgICAgQ1I5NywgICAgICBDUjk5ICAgKi8KKy8qIExDSy9WQ0sgPCAzMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8zME0sIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorLyogMzAwMDAwMDAgPCBMQ0svVkNLIDwgNTAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMzBfNTBNLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA4fSwKKy8qIDUwMDAwMDAwIDwgTENLL1ZDSyA8IDcwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzUwXzcwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiA3MDAwMDAwMCA8IExDSy9WQ0sgPCAxMDAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfNzBfMTAwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiAxMDAwMDAwMDAgPCBMQ0svVkNLIDwgMTUwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMTAwXzE1ME0sIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorLyogMTUwMDAwMDAgPCBMQ0svVkNLIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzE1ME0sIDB4MDEsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3RibERQQVNldHRpbmcuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibERQQVNldHRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY1YTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX1RCTERQQVNFVFRJTkdfSF8KKyNkZWZpbmUgX1RCTERQQVNFVFRJTkdfSF8KKyNpbmNsdWRlICJnbG9iYWwuaCIKKworI2RlZmluZSBEUEFfQ0xLXzMwTSAgICAgICAzMDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzUwTSAgICAgICA1MDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzcwTSAgICAgICA3MDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzEwME0gICAgICAxMDAwMDAwMDAKKyNkZWZpbmUgRFBBX0NMS18xNTBNICAgICAgMTUwMDAwMDAwCisKK2VudW0gRFBBX1JBTkdFIHsKKwlEUEFfQ0xLX1JBTkdFXzMwTSwKKwlEUEFfQ0xLX1JBTkdFXzMwXzUwTSwKKwlEUEFfQ0xLX1JBTkdFXzUwXzcwTSwKKwlEUEFfQ0xLX1JBTkdFXzcwXzEwME0sCisJRFBBX0NMS19SQU5HRV8xMDBfMTUwTSwKKwlEUEFfQ0xLX1JBTkdFXzE1ME0KK307CisKK2V4dGVybiBzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0WzddOworZXh0ZXJuIHN0cnVjdCBHRlhfRFBBX1NFVFRJTkcgR0ZYX0RQQV9TRVRUSU5HX1RCTF9WVDMzMjRbNl07CitleHRlcm4gc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyBWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1s3XTsKK2V4dGVybiBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI3W107CitleHRlcm4gc3RydWN0IEdGWF9EUEFfU0VUVElORyBHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFs2XTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzZWQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdGF0aWMgdm9pZCB2aWFfaTJjX3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCit7CisJdTggdmFsOworCXN0cnVjdCB2aWFfaTJjX3N0dWZmICp2aWFfaTJjX2NoYW4gPSAoc3RydWN0IHZpYV9pMmNfc3R1ZmYgKilkYXRhOworCisJdmFsID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpICYgMHhGMDsKKwlpZiAoc3RhdGUpCisJCXZhbCB8PSAweDIwOworCWVsc2UKKwkJdmFsICY9IH4weDIwOworCXN3aXRjaCAodmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgeworCWNhc2UgSTJDUE9SVElOREVYOgorCQl2YWwgfD0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBHUElPUE9SVElOREVYOgorCQl2YWwgfD0gMHg4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdfTVNHKCJ2aWFfaTJjOiBzcGVjaWZ5IHdyb25nIGkyYyBwb3J0LlxuIik7CisJfQorCXZpYWZiX3dyaXRlX3JlZyh2aWFfaTJjX2NoYW4tPmkyY19wb3J0LCBWSUFTUiwgdmFsKTsKK30KKworc3RhdGljIGludCB2aWFfaTJjX2dldHNjbCh2b2lkICpkYXRhKQoreworCXN0cnVjdCB2aWFfaTJjX3N0dWZmICp2aWFfaTJjX2NoYW4gPSAoc3RydWN0IHZpYV9pMmNfc3R1ZmYgKilkYXRhOworCisJaWYgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCB2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSAmIDB4MDgpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYV9pMmNfZ2V0c2RhKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwlpZiAodmlhZmJfcmVhZF9yZWcoVklBU1IsIHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpICYgMHgwNCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9pMmNfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKwl1OCB2YWw7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwl2YWwgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgdmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgJiAweEYwOworCWlmIChzdGF0ZSkKKwkJdmFsIHw9IDB4MTA7CisJZWxzZQorCQl2YWwgJj0gfjB4MTA7CisJc3dpdGNoICh2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSB7CisJY2FzZSBJMkNQT1JUSU5ERVg6CisJCXZhbCB8PSAweDAxOworCQlicmVhazsKKwljYXNlIEdQSU9QT1JUSU5ERVg6CisJCXZhbCB8PSAweDQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR19NU0coInZpYV9pMmM6IHNwZWNpZnkgd3JvbmcgaTJjIHBvcnQuXG4iKTsKKwl9CisJdmlhZmJfd3JpdGVfcmVnKHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQsIFZJQVNSLCB2YWwpOworfQorCitpbnQgdmlhZmJfaTJjX3JlYWRieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqcGRhdGEpCit7CisJdTggbW0xW10gPSB7MHgwMH07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCSpwZGF0YSA9IDA7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMF0uYWRkciA9IG1zZ3NbMV0uYWRkciA9IHNsYXZlX2FkZHIgLyAyOworCW1tMVswXSA9IGluZGV4OworCW1zZ3NbMF0ubGVuID0gMTsgbXNnc1sxXS5sZW4gPSAxOworCW1zZ3NbMF0uYnVmID0gbW0xOyBtc2dzWzFdLmJ1ZiA9IHBkYXRhOworCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9pMmNfd3JpdGVieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCBkYXRhKQoreworCXU4IG1zZ1syXSA9IHsgaW5kZXgsIGRhdGEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzOworCisJbXNncy5mbGFncyA9IDA7CisJbXNncy5hZGRyID0gc2xhdmVfYWRkciAvIDI7CisJbXNncy5sZW4gPSAyOworCW1zZ3MuYnVmID0gbXNnOworCXJldHVybiBpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPmkyY19zdHVmZi5hZGFwdGVyLCAmbXNncywgMSk7Cit9CisKK2ludCB2aWFmYl9pMmNfcmVhZGJ5dGVzKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQoreworCXU4IG1tMVtdID0gezB4MDB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1swXS5hZGRyID0gbXNnc1sxXS5hZGRyID0gc2xhdmVfYWRkciAvIDI7CisJbW0xWzBdID0gaW5kZXg7CisJbXNnc1swXS5sZW4gPSAxOyBtc2dzWzFdLmxlbiA9IGJ1ZmZfbGVuOworCW1zZ3NbMF0uYnVmID0gbW0xOyBtc2dzWzFdLmJ1ZiA9IGJ1ZmY7CisJaTJjX3RyYW5zZmVyKCZ2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuYWRhcHRlciwgbXNncywgMik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9jcmVhdGVfaTJjX2J1cyh2b2lkICp2aWFwYXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYXBhcjsKKworCXN0cmNweShwYXItPmkyY19zdHVmZi5hZGFwdGVyLm5hbWUsICJ2aWFfaTJjIik7CisJcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSAweDA7CisJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuaWQgPSAweDAxRkZGRjsKKwlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmNsYXNzID0gMDsKKwlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmFsZ29fZGF0YSA9ICZwYXItPmkyY19zdHVmZi5hbGdvOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuZGV2LnBhcmVudCA9IE5VTEw7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5zZXRzZGEgPSB2aWFfaTJjX3NldHNkYTsKKwlwYXItPmkyY19zdHVmZi5hbGdvLnNldHNjbCA9IHZpYV9pMmNfc2V0c2NsOworCXBhci0+aTJjX3N0dWZmLmFsZ28uZ2V0c2RhID0gdmlhX2kyY19nZXRzZGE7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5nZXRzY2wgPSB2aWFfaTJjX2dldHNjbDsKKwlwYXItPmkyY19zdHVmZi5hbGdvLnVkZWxheSA9IDQwOworCXBhci0+aTJjX3N0dWZmLmFsZ28udGltZW91dCA9IDIwOworCXBhci0+aTJjX3N0dWZmLmFsZ28uZGF0YSA9ICZwYXItPmkyY19zdHVmZjsKKworCWkyY19zZXRfYWRhcGRhdGEoJnBhci0+aTJjX3N0dWZmLmFkYXB0ZXIsICZwYXItPmkyY19zdHVmZik7CisKKwkvKiBSYWlzZSBTQ0wgYW5kIFNEQSAqLworCXBhci0+aTJjX3N0dWZmLmkyY19wb3J0ID0gSTJDUE9SVElOREVYOworCXZpYV9pMmNfc2V0c2RhKCZwYXItPmkyY19zdHVmZiwgMSk7CisJdmlhX2kyY19zZXRzY2woJnBhci0+aTJjX3N0dWZmLCAxKTsKKworCXBhci0+aTJjX3N0dWZmLmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKKwl2aWFfaTJjX3NldHNkYSgmcGFyLT5pMmNfc3R1ZmYsIDEpOworCXZpYV9pMmNfc2V0c2NsKCZwYXItPmkyY19zdHVmZiwgMSk7CisJdWRlbGF5KDIwKTsKKworCXJldCA9IGkyY19iaXRfYWRkX2J1cygmcGFyLT5pMmNfc3R1ZmYuYWRhcHRlcik7CisJaWYgKHJldCA9PSAwKQorCQlERUJVR19NU0coIkkyQyBidXMgJXMgcmVnaXN0ZXJlZC5cbiIsCisJCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSk7CisJZWxzZQorCQlERUJVR19NU0coIkZhaWxlZCB0byByZWdpc3RlciBJMkMgYnVzICVzLlxuIiwKKwkJCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB2aWFmYl9kZWxldGVfaTJjX2J1c3Modm9pZCAqcGFyKQoreworCWkyY19kZWxfYWRhcHRlcigmKChzdHJ1Y3QgdmlhZmJfcGFyICopcGFyKS0+aTJjX3N0dWZmLmFkYXB0ZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19WSUFfSTJDX0hfXworI2RlZmluZSBfX1ZJQV9JMkNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKworc3RydWN0IHZpYV9pMmNfc3R1ZmYgeworCXUxNiBpMmNfcG9ydDsJCQkvKiBHUElPIG9yIEkyQyBwb3J0ICovCisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ287Cit9OworCisjZGVmaW5lIEkyQ1BPUlQgICAgICAgICAgIDB4M2M0CisjZGVmaW5lIEkyQ1BPUlRJTkRFWCAgICAgIDB4MzEKKyNkZWZpbmUgR1BJT1BPUlQgICAgICAgICAgMHgzQzQKKyNkZWZpbmUgR1BJT1BPUlRJTkRFWCAgICAgMHgyQworI2RlZmluZSBJMkNfQlVTICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19CVVMgICAgICAgICAgICAyCisjZGVmaW5lIERFTEFZUE9SVCAgICAgICAgICAgMHgzQzMKKworaW50IHZpYWZiX2kyY19yZWFkYnl0ZSh1OCBzbGF2ZV9hZGRyLCB1OCBpbmRleCwgdTggKnBkYXRhKTsKK2ludCB2aWFmYl9pMmNfd3JpdGVieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCBkYXRhKTsKK2ludCB2aWFmYl9pMmNfcmVhZGJ5dGVzKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKK2ludCB2aWFmYl9jcmVhdGVfaTJjX2J1cyh2b2lkICpwYXIpOwordm9pZCB2aWFmYl9kZWxldGVfaTJjX2J1c3Modm9pZCAqcGFyKTsKKyNlbmRpZiAvKiBfX1ZJQV9JMkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNjM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCit2b2lkIHZpYWZiX2dldF9kZXZpY2Vfc3VwcG9ydF9zdGF0ZSh1MzIgKnN1cHBvcnRfc3RhdGUpCit7CisJKnN1cHBvcnRfc3RhdGUgPSBDUlRfRGV2aWNlOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPT0gVlQxNjMyX1RNRFMpCisJCSpzdXBwb3J0X3N0YXRlIHw9IERWSV9EZXZpY2U7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9PSBWVDE2MzFfTFZEUykKKwkJKnN1cHBvcnRfc3RhdGUgfD0gTENEX0RldmljZTsKK30KKwordm9pZCB2aWFmYl9nZXRfZGV2aWNlX2Nvbm5lY3Rfc3RhdGUodTMyICpjb25uZWN0X3N0YXRlKQoreworCWJvb2wgbW9iaWxlID0gZmFsc2U7CisKKwkqY29ubmVjdF9zdGF0ZSA9IENSVF9EZXZpY2U7CisKKwlpZiAodmlhZmJfZHZpX3NlbnNlKCkpCisJCSpjb25uZWN0X3N0YXRlIHw9IERWSV9EZXZpY2U7CisKKwl2aWFmYl9sY2RfZ2V0X21vYmlsZV9zdGF0ZSgmbW9iaWxlKTsKKwlpZiAobW9iaWxlKQorCQkqY29ubmVjdF9zdGF0ZSB8PSBMQ0RfRGV2aWNlOworfQorCitib29sIHZpYWZiX2xjZF9nZXRfc3VwcG9ydF9leHBhbmRfc3RhdGUodTMyIHhyZXMsIHUzMiB5cmVzKQoreworCXVuc2lnbmVkIGludCBzdXBwb3J0X3N0YXRlID0gMDsKKworCXN3aXRjaCAodmlhZmJfbGNkX3BhbmVsX2lkKSB7CisJY2FzZSBMQ0RfUEFORUxfSUQwXzY0MFg0ODA6CisJCWlmICgoeHJlcyA8IDY0MCkgJiYgKHlyZXMgPCA0ODApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQxXzgwMFg2MDA6CisJCWlmICgoeHJlcyA8IDgwMCkgJiYgKHlyZXMgPCA2MDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OgorCQlpZiAoKHhyZXMgPCAxMDI0KSAmJiAoeXJlcyA8IDc2OCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDNfMTI4MFg3Njg6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgNzY4KSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgMTAyNCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgorCQlpZiAoKHhyZXMgPCAxNDAwKSAmJiAoeXJlcyA8IDEwNTApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDoKKwkJaWYgKCh4cmVzIDwgMTYwMCkgJiYgKHlyZXMgPCAxMjAwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEN18xMzY2WDc2ODoKKwkJaWYgKCh4cmVzIDwgMTM2NikgJiYgKHlyZXMgPCA3NjgpKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ4XzEwMjRYNjAwOgorCQlpZiAoKHhyZXMgPCAxMDI0KSAmJiAoeXJlcyA8IDYwMCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDlfMTI4MFg4MDA6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgODAwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEQV84MDBYNDgwOgorCQlpZiAoKHhyZXMgPCA4MDApICYmICh5cmVzIDwgNDgwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEQl8xMzYwWDc2ODoKKwkJaWYgKCh4cmVzIDwgMTM2MCkgJiYgKHlyZXMgPCA3NjgpKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSURDXzQ4MFg2NDA6CisJCWlmICgoeHJlcyA8IDQ4MCkgJiYgKHlyZXMgPCA2NDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3VwcG9ydF9zdGF0ZSA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3VwcG9ydF9zdGF0ZTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICBHYW1tYSBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbiovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordm9pZCB2aWFmYl9zZXRfZ2FtbWFfdGFibGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSkKK3sKKwlpbnQgaSwgc3IxYTsKKwlpbnQgYWN0aXZlX2RldmljZV9hbW91bnQgPSAwOworCWludCBkZXZpY2Vfc3RhdHVzID0gdmlhZmJfRGV2aWNlU3RhdHVzOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih2aWFmYl9EZXZpY2VTdGF0dXMpICogODsgaSsrKSB7CisJCWlmIChkZXZpY2Vfc3RhdHVzICYgMSkKKwkJCWFjdGl2ZV9kZXZpY2VfYW1vdW50Kys7CisJCWRldmljZV9zdGF0dXMgPj49IDE7CisJfQorCisJLyogOCBicHAgbW9kZSBjYW4ndCBhZGp1c3QgZ2FtbWEgKi8KKwlpZiAoYnBwID09IDgpCisJCXJldHVybiA7CisKKwkvKiBFbmFibGUgR2FtbWEgKi8KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg4MCwgQklUNyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzMywgVklBQ1IsIDB4ODAsIEJJVDcpOworCQlicmVhazsKKwl9CisJc3IxYSA9ICh1bnNpZ25lZCBpbnQpdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUEpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAsIEJJVDApOworCisJLyogRmlsbCBJR0ExIEdhbW1hIFRhYmxlICovCisJb3V0YigwLCBMVVRfSU5ERVhfV1JJVEUpOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlvdXRiKGdhbW1hX3RhYmxlW2ldID4+IDE2LCBMVVRfREFUQSk7CisJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gOCAmIDB4RkYsIExVVF9EQVRBKTsKKwkJb3V0YihnYW1tYV90YWJsZVtpXSAmIDB4RkYsIExVVF9EQVRBKTsKKwl9CisKKwkvKiBJZiBhZGp1c3QgR2FtbWEgdmFsdWUgaW4gU0FNTSwgZmlsbCBJR0ExLAorCSAgIElHQTIgR2FtbWEgdGFibGUgc2ltdWx0YW5vdXMuICovCisJLyogU3dpdGNoIHRvIElHQTIgR2FtbWEgVGFibGUgKi8KKwlpZiAoKGFjdGl2ZV9kZXZpY2VfYW1vdW50ID4gMSkgJiYKKwkJISgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCVVOSUNIUk9NRV9DTEUyNjYpICYmCisJCSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX3JldmlzaW9uIDwgMTUpKSkgeworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMSwgQklUMCk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAyLCBCSVQxKTsKKworCQkvKiBGaWxsIElHQTIgR2FtbWEgVGFibGUgKi8KKwkJb3V0YigwLCBMVVRfSU5ERVhfV1JJVEUpOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gMTYsIExVVF9EQVRBKTsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gOCAmIDB4RkYsIExVVF9EQVRBKTsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gJiAweEZGLCBMVVRfREFUQSk7CisJCX0KKwl9CisJdmlhZmJfd3JpdGVfcmVnKFNSMUEsIFZJQVNSLCBzcjFhKTsKK30KKwordm9pZCB2aWFmYl9nZXRfZ2FtbWFfdGFibGUodW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbG9yX3IsIGNvbG9yX2csIGNvbG9yX2I7CisJdW5zaWduZWQgY2hhciBzcjFhID0gMDsKKwlpbnQgaTsKKworCS8qIEVuYWJsZSBHYW1tYSAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDgwLCBCSVQ3KTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJCWJyZWFrOworCX0KKwlzcjFhID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUEpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAsIEJJVDApOworCisJLyogUmVhZGluZyBnYW1tYSB0YWJsZSB0byBnZXQgY29sb3IgdmFsdWUgKi8KKwlvdXRiKDAsIExVVF9JTkRFWF9SRUFEKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJY29sb3JfciA9IGluYihMVVRfREFUQSk7CisJCWNvbG9yX2cgPSBpbmIoTFVUX0RBVEEpOworCQljb2xvcl9iID0gaW5iKExVVF9EQVRBKTsKKwkJZ2FtbWFfdGFibGVbaV0gPQorCQkgICAgKCgoKHUzMikgY29sb3JfcikgPDwgMTYpIHwKKwkJICAgICAoKCh1MTYpIGNvbG9yX2cpIDw8IDgpKSB8IGNvbG9yX2I7CisJfQorCXZpYWZiX3dyaXRlX3JlZyhTUjFBLCBWSUFTUiwgc3IxYSk7Cit9CisKK3ZvaWQgdmlhZmJfZ2V0X2dhbW1hX3N1cHBvcnRfc3RhdGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpzdXBwb3J0X3N0YXRlKQoreworCWlmIChicHAgPT0gOCkKKwkJKnN1cHBvcnRfc3RhdGUgPSBOb25lX0RldmljZTsKKwllbHNlCisJCSpzdXBwb3J0X3N0YXRlID0gQ1JUX0RldmljZSB8IERWSV9EZXZpY2UgfCBMQ0RfRGV2aWNlOworfQorCitpbnQgdmlhZmJfaW5wdXRfcGFyYW1ldGVyX2NvbnZlcnRlcihpbnQgcGFyYW1ldGVyX3ZhbHVlKQoreworCWludCByZXN1bHQ7CisKKwlpZiAocGFyYW1ldGVyX3ZhbHVlID49IDEgJiYgcGFyYW1ldGVyX3ZhbHVlIDw9IDkpCisJCXJlc3VsdCA9IDEgPDwgKHBhcmFtZXRlcl92YWx1ZSAtIDEpOworCWVsc2UKKwkJcmVzdWx0ID0gMTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ0NTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX1ZJQVVUSUxJVFlfSF9fCisjZGVmaW5lIF9fVklBVVRJTElUWV9IX18KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBpbmZvbWF0aW9uIGFib3V0IGRldmljZSdzIHN0YXRlICovCit2b2lkIHZpYWZiX2dldF9kZXZpY2Vfc3VwcG9ydF9zdGF0ZSh1MzIgKnN1cHBvcnRfc3RhdGUpOwordm9pZCB2aWFmYl9nZXRfZGV2aWNlX2Nvbm5lY3Rfc3RhdGUodTMyICpjb25uZWN0X3N0YXRlKTsKK2Jvb2wgdmlhZmJfbGNkX2dldF9zdXBwb3J0X2V4cGFuZF9zdGF0ZSh1MzIgeHJlcywgdTMyIHlyZXMpOworCisvKiBUaGVzZSBmdW5jdGlvbiBhcmUgdXNlZCB0byBhY2Nlc3MgZ2FtbWEgdGFibGUgKi8KK3ZvaWQgdmlhZmJfc2V0X2dhbW1hX3RhYmxlKGludCBicHAsIHVuc2lnbmVkIGludCAqZ2FtbWFfdGFibGUpOwordm9pZCB2aWFmYl9nZXRfZ2FtbWFfdGFibGUodW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSk7Cit2b2lkIHZpYWZiX2dldF9nYW1tYV9zdXBwb3J0X3N0YXRlKGludCBicHAsIHVuc2lnbmVkIGludCAqc3VwcG9ydF9zdGF0ZSk7CitpbnQgdmlhZmJfaW5wdXRfcGFyYW1ldGVyX2NvbnZlcnRlcihpbnQgcGFyYW1ldGVyX3ZhbHVlKTsKKworI2VuZGlmIC8qIF9fVklBVVRJTElUWV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMzJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0wLDAgKzEsMjU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2RlZmluZSBfTUFTVEVSX0ZJTEUKKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdGF0aWMgaW50IE1BWF9DVVJTID0gMzI7CitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGRlZmF1bHRfdmFyOworc3RhdGljIGNoYXIgKnZpYWZiX25hbWUgPSAiVmlhIjsKK3N0YXRpYyB1MzIgcHNldWRvX3BhbFsxN107CisKKy8qIHZpZGVvIG1vZGUgKi8KK3N0YXRpYyBjaGFyICp2aWFmYl9tb2RlID0gIjY0MHg0ODAiOworc3RhdGljIGNoYXIgKnZpYWZiX21vZGUxID0gIjY0MHg0ODAiOworc3RhdGljIGludCB2aWFmYl9yZXNNb2RlID0gVklBX1JFU182NDBYNDgwOworCisvKiBBZGRlZCBmb3Igc3BlY2lmeWluZyBhY3RpdmUgZGV2aWNlcy4qLworY2hhciAqdmlhZmJfYWN0aXZlX2RldiA9ICIiOworCisvKiBBZGRlZCBmb3Igc3BlY2lmeWluZyB2aWRlbyBvbiBkZXZpY2VzLiovCitjaGFyICp2aWFmYl92aWRlb19kZXYgPSAiIjsKKworLypBZGRlZCBmb3Igc3BlY2lmeSBsY2Qgb3V0cHV0IHBvcnQqLworY2hhciAqdmlhZmJfbGNkX3BvcnQgPSAiIjsKK2NoYXIgKnZpYWZiX2R2aV9wb3J0ID0gIiI7CisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldF9kZXZpY2Uoc3RydWN0IGRldmljZV90IGFjdGl2ZV9kZXYpOworc3RhdGljIGludCBhcHBseV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZyBzZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KKwkqc2VjX3Zhcik7CitzdGF0aWMgdm9pZCByZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZworCSpzZXR0aW5nX2luZm8pOworc3RhdGljIHZvaWQgdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh1MzIgdmlkZW9fZGV2X2luZm8pOworc3RhdGljIHZvaWQgdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSh1MzIgKnZpZGVvX2Rldl9pbmZvKTsKKworLyogTW9kZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWFmYl9tb2RlaW5mbyB2aWFmYl9tb2RlbnRyeVtdID0geworCXs0ODAsIDY0MCwgVklBX1JFU180ODBYNjQwLCAiNDgweDY0MCJ9LAorCXs2NDAsIDQ4MCwgVklBX1JFU182NDBYNDgwLCAiNjQweDQ4MCJ9LAorCXs4MDAsIDQ4MCwgVklBX1JFU184MDBYNDgwLCAiODAweDQ4MCJ9LAorCXs4MDAsIDYwMCwgVklBX1JFU184MDBYNjAwLCAiODAweDYwMCJ9LAorCXsxMDI0LCA3NjgsIFZJQV9SRVNfMTAyNFg3NjgsICIxMDI0eDc2OCJ9LAorCXsxMTUyLCA4NjQsIFZJQV9SRVNfMTE1Mlg4NjQsICIxMTUyeDg2NCJ9LAorCXsxMjgwLCAxMDI0LCBWSUFfUkVTXzEyODBYMTAyNCwgIjEyODB4MTAyNCJ9LAorCXsxNjAwLCAxMjAwLCBWSUFfUkVTXzE2MDBYMTIwMCwgIjE2MDB4MTIwMCJ9LAorCXsxNDQwLCAxMDUwLCBWSUFfUkVTXzE0NDBYMTA1MCwgIjE0NDB4MTA1MCJ9LAorCXsxMjgwLCA3NjgsIFZJQV9SRVNfMTI4MFg3NjgsICIxMjgweDc2OCJ9LAorCXsxMjgwLCA4MDAsIFZJQV9SRVNfMTI4MFg4MDAsICIxMjgweDgwMCJ9LAorCXsxMjgwLCA5NjAsIFZJQV9SRVNfMTI4MFg5NjAsICIxMjgweDk2MCJ9LAorCXsxOTIwLCAxNDQwLCBWSUFfUkVTXzE5MjBYMTQ0MCwgIjE5MjB4MTQ0MCJ9LAorCXs4NDgsIDQ4MCwgVklBX1JFU184NDhYNDgwLCAiODQ4eDQ4MCJ9LAorCXsxNDAwLCAxMDUwLCBWSUFfUkVTXzE0MDBYMTA1MCwgIjE0MDB4MTA1MCJ9LAorCXs3MjAsIDQ4MCwgVklBX1JFU183MjBYNDgwLCAiNzIweDQ4MCJ9LAorCXs3MjAsIDU3NiwgVklBX1JFU183MjBYNTc2LCAiNzIweDU3NiJ9LAorCXsxMDI0LCA1MTIsIFZJQV9SRVNfMTAyNFg1MTIsICIxMDI0eDUxMiJ9LAorCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzYsICIxMDI0eDU3NiJ9LAorCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDAsICIxMDI0eDYwMCJ9LAorCXsxMjgwLCA3MjAsIFZJQV9SRVNfMTI4MFg3MjAsICIxMjgweDcyMCJ9LAorCXsxOTIwLCAxMDgwLCBWSUFfUkVTXzE5MjBYMTA4MCwgIjE5MjB4MTA4MCJ9LAorCXsxMzY2LCA3NjgsIFZJQV9SRVNfMTM2OFg3NjgsICIxMzY4eDc2OCJ9LAorCXsxNjgwLCAxMDUwLCBWSUFfUkVTXzE2ODBYMTA1MCwgIjE2ODB4MTA1MCJ9LAorCXs5NjAsIDYwMCwgVklBX1JFU185NjBYNjAwLCAiOTYweDYwMCJ9LAorCXsxMDAwLCA2MDAsIFZJQV9SRVNfMTAwMFg2MDAsICIxMDAweDYwMCJ9LAorCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzYsICIxMDI0eDU3NiJ9LAorCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDAsICIxMDI0eDYwMCJ9LAorCXsxMDg4LCA2MTIsIFZJQV9SRVNfMTA4OFg2MTIsICIxMDg4eDYxMiJ9LAorCXsxMTUyLCA3MjAsIFZJQV9SRVNfMTE1Mlg3MjAsICIxMTUyeDcyMCJ9LAorCXsxMjAwLCA3MjAsIFZJQV9SRVNfMTIwMFg3MjAsICIxMjAweDcyMCJ9LAorCXsxMjgwLCA2MDAsIFZJQV9SRVNfMTI4MFg2MDAsICIxMjgweDYwMCJ9LAorCXsxMzYwLCA3NjgsIFZJQV9SRVNfMTM2MFg3NjgsICIxMzYweDc2OCJ9LAorCXsxNDQwLCA5MDAsIFZJQV9SRVNfMTQ0MFg5MDAsICIxNDQweDkwMCJ9LAorCXsxNjAwLCA5MDAsIFZJQV9SRVNfMTYwMFg5MDAsICIxNjAweDkwMCJ9LAorCXsxNjAwLCAxMDI0LCBWSUFfUkVTXzE2MDBYMTAyNCwgIjE2MDB4MTAyNCJ9LAorCXsxNzkyLCAxMzQ0LCBWSUFfUkVTXzE3OTJYMTM0NCwgIjE3OTJ4MTM0NCJ9LAorCXsxODU2LCAxMzkyLCBWSUFfUkVTXzE4NTZYMTM5MiwgIjE4NTZ4MTM5MiJ9LAorCXsxOTIwLCAxMjAwLCBWSUFfUkVTXzE5MjBYMTIwMCwgIjE5MjB4MTIwMCJ9LAorCXsyMDQ4LCAxNTM2LCBWSUFfUkVTXzIwNDhYMTUzNiwgIjIwNDh4MTUzNiJ9LAorCXswLCAwLCBWSUFfUkVTX0lOVkFMSUQsICI2NDB4NDgwIn0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHZpYWZiX29wczsKKworc3RhdGljIGludCB2aWFmYl91cGRhdGVfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyOworCXBwYXIgPSBpbmZvLT5wYXI7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl91cGRhdGVfZml4IVxuIik7CisKKwlmaXgtPnZpc3VhbCA9CisJICAgIHBwYXItPmJwcCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDogRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlmaXgtPmxpbmVfbGVuZ3RoID0gcHBhci0+bGluZWxlbmd0aDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldHVwX2ZpeGluZm8oc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbykKK3sKKwltZW1zZXQoZml4LCAwLCBzaXplb2Yoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvKSk7CisJc3RyY3B5KGZpeC0+aWQsIHZpYWZiX25hbWUpOworCisJZml4LT5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW07CisJZml4LT5zbWVtX2xlbiA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJZml4LT5tbWlvX3N0YXJ0ID0gdmlhcGFyaW5mby0+bW1pb19iYXNlOworCWZpeC0+bW1pb19sZW4gPSB2aWFwYXJpbmZvLT5tbWlvX2xlbjsKKworCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmaXgtPnR5cGVfYXV4ID0gMDsKKworCWZpeC0+eHBhbnN0ZXAgPSBmaXgtPnl3cmFwc3RlcCA9IDA7CisJZml4LT55cGFuc3RlcCA9IDE7CisKKwkvKiBKdXN0IHRlbGwgdGhlIGFjY2VsIG5hbWUgKi8KKwl2aWFmYmluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1ZJQV9VTklDSFJPTUU7Cit9CitzdGF0aWMgaW50IHZpYWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX29wZW4hXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9yZWxlYXNlIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX3VwZGF0ZV92aWFmYl9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZpYWZiX3BhciAqcHBhcjsKKworCXBwYXIgPSBpbmZvLT5wYXI7CisJcHBhci0+YnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCXBwYXItPmxpbmVsZW5ndGggPSAoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43KSAqIHBwYXItPmJwcCAvIDg7CisJcHBhci0+aHJlcyA9IGluZm8tPnZhci54cmVzOworCXBwYXItPnZyZXMgPSBpbmZvLT52YXIueXJlczsKKwlwcGFyLT54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJcHBhci0+eW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworfQorCitzdGF0aWMgaW50IHZpYWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgdm1vZGVfaW5kZXgsIGh0b3RhbCwgdnRvdGFsOworCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXI7CisJdTMyIGxvbmdfcmVmcmVzaDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwX3ZpYWZiX3BhcjsKKwlwcGFyID0gaW5mby0+cGFyOworCisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9jaGVja192YXIhXG4iKTsKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwkvKiBIVyBuZWl0aGVyIHN1cHBvcnQgaW50ZXJsYWN0ZSBub3IgZG91YmxlLXNjYW5lZCBtb2RlICovCisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEIHx8IHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCisJCXJldHVybiAtRUlOVkFMOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleCh2YXItPnhyZXMsIHZhci0+eXJlcywgMCk7CisJaWYgKHZtb2RlX2luZGV4ID09IFZJQV9SRVNfSU5WQUxJRCkgeworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkgICJ2aWFmYjogTW9kZSAlZHglZHglZCBub3Qgc3VwcG9ydGVkISFcbiIsCisJCQkgIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKDI0ID09IHZhci0+Yml0c19wZXJfcGl4ZWwpCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDggJiYgdmFyLT5iaXRzX3Blcl9waXhlbCAhPSAxNiAmJgorCQl2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodmFyLT54cmVzX3ZpcnR1YWwgKiAodmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzKSkgJiAweDFGKQorCQkvKjMyIHBpeGVsIGFsaWdubWVudCAqLworCQl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCArIDMxKSAmIH4zMTsKKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4ID4KKwkJcHBhci0+bWVtc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBCYXNlZCBvbiB2YXIgcGFzc2VkIGluIHRvIGNhbGN1bGF0ZSB0aGUgcmVmcmVzaCwKKwkgKiBiZWNhdXNlIG91ciBkcml2ZXIgdXNlIHNvbWUgbW9kZXMgc3BlY2lhbC4KKwkgKi8KKwlodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsKKwl2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsKKwkJdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKKwlsb25nX3JlZnJlc2ggPSAxMDAwMDAwMDAwVUwgLyB2YXItPnBpeGNsb2NrICogMTAwMDsKKwlsb25nX3JlZnJlc2ggLz0gKGh0b3RhbCAqIHZ0b3RhbCk7CisKKwl2aWFmYl9yZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2godmFyLT54cmVzLCB2YXItPnlyZXMsIGxvbmdfcmVmcmVzaCk7CisKKwkvKiBBZGp1c3QgdmFyIGFjY29yZGluZyB0byBvdXIgZHJpdmVyJ3Mgb3duIHRhYmxlICovCisJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9pbmRleCk7CisKKwkvKiBUaGlzIGlzIGluZGVlZCBhIHBhdGNoIGZvciBWVDMzNTMgKi8KKwlpZiAoIWluZm8tPnBhcikKKwkJcmV0dXJuIC0xOworCXBfdmlhZmJfcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKilpbmZvLT5wYXI7CisJaWYgKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKQorCQl2YXItPmFjY2VsX2ZsYWdzID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IHZtb2RlX2luZGV4OworCWludCB2bW9kZV9pbmRleDEgPSAwOworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9wYXIhXG4iKTsKKworCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZpYWZiX3JlZnJlc2gsIDApOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsIDApOworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCSJ2aWFmYl9zZWNvbmRfeHJlcyA9ICVkLCB2aWFmYl9zZWNvbmRfeXJlcyA9ICVkLCBicHAgPSAlZFxuIiwKKwkJCSAgdmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxKTsKKwkJdm1vZGVfaW5kZXgxID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgodmlhZmJfc2Vjb25kX3hyZXMsCisJCQl2aWFmYl9zZWNvbmRfeXJlcywgMSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIi0+dmlhZmJfU0FNTV9PTjogaW5kZXg9JWRcbiIsCisJCQl2bW9kZV9pbmRleDEpOworCisJCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyh2aWFmYl9zZWNvbmRfeHJlcywKKwkJCXZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxLCB2aWFmYl9yZWZyZXNoMSwgMSk7CisJfQorCisJaWYgKHZtb2RlX2luZGV4ICE9IFZJQV9SRVNfSU5WQUxJRCkgeworCQl2aWFmYl9zZXRtb2RlKHZtb2RlX2luZGV4LCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZtb2RlX2luZGV4MSwKKwkJCXZpYWZiX3NlY29uZF94cmVzLCB2aWFmYl9zZWNvbmRfeXJlcywgdmlhZmJfYnBwMSk7CisKKwkJLypXZSBzaG91bGQgc2V0IG1lbW9yeSBvZmZzZXQgYWNjb3JkaW5nIHZpcnR1YWxfeCAqLworCQkvKkZpeCBtZTpwdXQgdGhpcyBmdW5jdGlvbiBpbnRvIHZpYWZiX3NldG1vZGUgKi8KKwkJdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKGluZm8pOworCisJCS8qIFVwZGF0ZSAqKipmYl9wYXIgaW5mb3JtYXRpb24gKi8KKwkJdmlhZmJfdXBkYXRlX3ZpYWZiX3BhcihpbmZvKTsKKworCQkvKiBVcGRhdGUgb3RoZXIgZml4ZWQgaW5mb3JtYXRpb24gKi8KKwkJdmlhZmJfdXBkYXRlX2ZpeCgmaW5mby0+Zml4LCBpbmZvKTsKKwkJdmlhZmJfYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQkvKiBVcGRhdGUgdmlhZmJfYWNjZWwsIGl0IGlzIG5lY2Vzc2FyeSB0byBvdXIgMkQgYWNjZWxlcmF0ZSAqLworCQl2aWFmYl9hY2NlbCA9IGluZm8tPnZhci5hY2NlbF9mbGFnczsKKworCQlpZiAodmlhZmJfYWNjZWwpCisJCQl2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IG9uZSBjb2xvciByZWdpc3RlciAqLworc3RhdGljIGludCB2aWFmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCit1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXU4IHNyMWEsIHNyMWIsIGNyNjcsIGNyNmEsIHJldiA9IDAsIHNoaWZ0ID0gMTA7CisJdW5zaWduZWQgY21hcF9lbnRyaWVzID0gKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSA/IDI1NiA6IDE2OworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldGNvbHJlZyFcbiIpOworCWlmIChyZWdubyA+PSBjbWFwX2VudHJpZXMpCisJCXJldHVybiAxOworCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQkvKgorCQkgKiBSZWFkIFBDSSBidXMgMCxkZXYgMCxmdW5jdGlvbiAwLGluZGV4IDB4RjYgdG8gZ2V0IGNoaXAgcmV2LgorCQkgKi8KKwkJb3V0bCgweDgwMDAwMDAwIHwgKDB4ZjYgJiB+MyksICh1bnNpZ25lZCBsb25nKTB4Q0Y4KTsKKwkJcmV2ID0gKGlubCgodW5zaWduZWQgbG9uZykweENGQykgPj4gKCgweGY2ICYgMykgKiA4KSkgJiAweGZmOworCX0KKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCXNyMWEgPSBpbmIoMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJc3IxYiA9IGluYigweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQljcjY3ID0gaW5iKDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCWNyNmEgPSBpbmIoMHgzRDUpOworCisJCS8qIE1hcCB0aGUgM0M2LzcvOC85IHRvIHRoZSBJR0EyICovCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEgfCAweDAxLCAweDNDNSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiB8IDB4ODAsIDB4M0M1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3ICYgMHgzRiwgMHgzRDUpOworCQlvdXRiKDB4NkEsIDB4M0Q0KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBSZXNldCBDUjZBWzZdKSAqLworCQlvdXRiKGNyNmEgJiAweEJGLCAweDNENSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgRW5hYmxlIENSNkFbN10gKi8KKwkJb3V0YihjcjZhIHwgMHg4MCwgMHgzRDUpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIHN0b3AgcmVzZXQpICovCisJCW91dGIoY3I2YSB8IDB4NDAsIDB4M0Q1KTsKKworCQkvKiBCaXQgbWFzayBvZiBwYWxldHRlICovCisJCW91dGIoMHhGRiwgMHgzYzYpOworCQkvKiBXcml0ZSBvbmUgcmVnaXN0ZXIgb2YgSUdBMiAqLworCQlvdXRiKHJlZ25vLCAweDNDOCk7CisJCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAmJgorCQkJcmV2ID49IDE1KSB7CisJCQlzaGlmdCA9IDg7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNSwgQklUNSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgQklUNywgQklUNyk7CisJCX0gZWxzZSB7CisJCQlzaGlmdCA9IDEwOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDAsIEJJVDUpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDAsIEJJVDcpOworCQl9CisJCW91dGIocmVkID4+IHNoaWZ0LCAweDNDOSk7CisJCW91dGIoZ3JlZW4gPj4gc2hpZnQsIDB4M0M5KTsKKwkJb3V0YihibHVlID4+IHNoaWZ0LCAweDNDOSk7CisKKwkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTEgKi8KKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSAmIDB4RkUsIDB4M0M1KTsKKwkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLworCQlvdXRiKDB4RkYsIDB4M2M2KTsKKwkJLyogV3JpdGUgb25lIHJlZ2lzdGVyIG9mIElHQTEgKi8KKwkJb3V0YihyZWdubywgMHgzQzgpOworCQlvdXRiKHJlZCA+PiBzaGlmdCwgMHgzQzkpOworCQlvdXRiKGdyZWVuID4+IHNoaWZ0LCAweDNDOSk7CisJCW91dGIoYmx1ZSA+PiBzaGlmdCwgMHgzQzkpOworCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3LCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQlvdXRiKGNyNmEsIDB4M0Q1KTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9IChyZWQgJiAweEY4MDApIHwKKwkJICAgICgoZ3JlZW4gJiAweEZDMDApID4+IDUpIHwgKChibHVlICYgMHhGODAwKSA+PiAxMSk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQorCQkgICAgKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8CisJCSAgICAoKHJlZCAmIDB4RkYwMCkgPDwgOCkgfAorCQkgICAgKChncmVlbiAmIDB4RkYwMCkpIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworLypDQUxMRUQgQlk6IGZiX3NldF9jbWFwICovCisvKiAgICAgICAgICAgZmJfc2V0X3ZhciwgcGFzcyAyNTYgY29sb3JzICovCisvKkNBTExFRCBCWTogZmJfc2V0X2NtYXAgKi8KKy8qICAgICAgICAgICBmYmNvbl9zZXRfcGFsZXR0ZSwgcGFzcyAxNiBjb2xvcnMgKi8KK3N0YXRpYyBpbnQgdmlhZmJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdTMyIGxlbiA9IGNtYXAtPmxlbjsKKwl1MzIgaTsKKwl1MTYgKnByZWQgPSBjbWFwLT5yZWQ7CisJdTE2ICpwZ3JlZW4gPSBjbWFwLT5ncmVlbjsKKwl1MTYgKnBibHVlID0gY21hcC0+Ymx1ZTsKKwl1MTYgKnB0cmFuc3AgPSBjbWFwLT50cmFuc3A7CisJdTggc3IxYSwgc3IxYiwgY3I2NywgY3I2YSwgcmV2ID0gMCwgc2hpZnQgPSAxMDsKKwlpZiAobGVuID4gMjU2KQorCQlyZXR1cm4gMTsKKwlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJLyoKKwkJICogUmVhZCBQQ0kgYnVzIDAsIGRldiAwLCBmdW5jdGlvbiAwLCBpbmRleCAweEY2IHRvIGdldCBjaGlwCisJCSAqIHJldi4KKwkJICovCisJCW91dGwoMHg4MDAwMDAwMCB8ICgweGY2ICYgfjMpLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCXJldiA9IChpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpID4+ICgoMHhmNiAmIDMpICogOCkpICYgMHhmZjsKKwl9CisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlzcjFhID0gaW5iKDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCXNyMWIgPSBpbmIoMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJY3I2NyA9IGluYigweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQljcjZhID0gaW5iKDB4M0Q1KTsKKwkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTIgKi8KKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSB8IDB4MDEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KKwkJb3V0YihzcjFiIHwgMHg4MCwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLworCQlvdXRiKGNyNjcgJiAweDNGLCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIFJlc2V0IENSNkFbNl0pICovCisJCW91dGIoY3I2YSAmIDB4QkYsIDB4M0Q1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBFbmFibGUgQ1I2QVs3XSAqLworCQlvdXRiKGNyNmEgfCAweDgwLCAweDNENSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgc3RvcCByZXNldCkgKi8KKwkJb3V0YihjcjZhIHwgMHhDMCwgMHgzRDUpOworCisJCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwkJb3V0YigweEZGLCAweDNjNik7CisJCW91dGIoMHgwMCwgMHgzQzgpOworCQlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgJiYKKwkJCXJldiA+PSAxNSkgeworCQkJc2hpZnQgPSA4OworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDUsIEJJVDUpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIEJJVDcsIEJJVDcpOworCQl9IGVsc2UgeworCQkJc2hpZnQgPSAxMDsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAwLCBCSVQ1KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAwLCBCSVQ3KTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJfQorCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQkvKiBNYXAgdGhlIDNDNi83LzgvOSB0byB0aGUgSUdBMSAqLworCQlvdXRiKHNyMWEgJiAweEZFLCAweDNDNSk7CisJCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwkJb3V0YigweEZGLCAweDNjNik7CisJCW91dGIoMHgwMCwgMHgzQzgpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJfQorCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3LCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQlvdXRiKGNyNmEsIDB4M0Q1KTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKGxlbiA+IDE3KQorCQkJcmV0dXJuIDA7CS8qIEJlY2F1c2Ugc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW2ldID0KKwkJCSAgICAoKihwcmVkICsgaSkgJiAweEY4MDApIHwKKwkJCSAgICAoKCoocGdyZWVuICsgaSkgJiAweEZDMDApID4+IDUpIHwKKwkJCSAgICAoKCoocGJsdWUgKyBpKSAmIDB4RjgwMCkgPj4gMTEpOworCQlicmVhazsKKwljYXNlIDMyOgorCQlpZiAobGVuID4gMTcpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHB0cmFuc3ApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaV0gPQorCQkJCSAgICAoKCoocHRyYW5zcCArIGkpICYgMHhGRjAwKSA8PCAxNikgfAorCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8CisJCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKKwkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtpXSA9CisJCQkJICAgIDB4MDAwMDAwMDAgfAorCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8CisJCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKKwkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfcGFuX2Rpc3BsYXkhXG4iKTsKKworCW9mZnNldCA9ICh2YXItPnhvZmZzZXQgKyAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwpKSAqCisJICAgIHZhci0+Yml0c19wZXJfcGl4ZWwgLyAxNjsKKworCURFQlVHX01TRyhLRVJOX0lORk8gIlxudmlhZmJfcGFuX2Rpc3BsYXksb2Zmc2V0ID0lZCAiLCBvZmZzZXQpOworCisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHg0OCwgMHgzZDQsICgob2Zmc2V0ID4+IDI0KSAmIDB4MyksIDB4Myk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgzNCwgMHgzZDQsICgob2Zmc2V0ID4+IDE2KSAmIDB4ZmYpLCAweGZmKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDBjLCAweDNkNCwgKChvZmZzZXQgPj4gOCkgJiAweGZmKSwgMHhmZik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgwZCwgMHgzZDQsIChvZmZzZXQgJiAweGZmKSwgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfYmxhbmshXG4iKTsKKwkvKiBjbGVhciBEUE1TIHNldHRpbmcgKi8KKworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJLyogU2NyZWVuOiBPbiwgSFN5bmM6IE9uLCBWU3luYzogT24gKi8KKwkJLyogY29udHJvbCBDUlQgbW9uaXRvciBwb3dlciBtYW5hZ2VtZW50ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwkJLyogU2NyZWVuOiBPZmYsIEhTeW5jOiBPZmYsIFZTeW5jOiBPbiAqLworCQkvKiBjb250cm9sIENSVCBtb25pdG9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIDB4MTAsIEJJVDQgKyBCSVQ1KTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQkvKiBTY3JlZW46IE9mZiwgSFN5bmM6IE9uLCBWU3luYzogT2ZmICovCisJCS8qIGNvbnRyb2wgQ1JUIG1vbml0b3IgcG93ZXIgbWFuYWdlbWVudCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJLyogU2NyZWVuOiBPZmYsIEhTeW5jOiBPZmYsIFZTeW5jOiBPZmYgKi8KKwkJLyogY29udHJvbCBDUlQgbW9uaXRvciBwb3dlciBtYW5hZ2VtZW50ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDMwLCBCSVQ0ICsgQklUNSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCit7CisJc3RydWN0IHZpYWZiX2lvY3RsX21vZGUgdmlhbW9kZTsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfc2FtbSB2aWFzYW1tOworCXN0cnVjdCB2aWFmYl9kcml2ZXJfdmVyc2lvbiBkcml2ZXJfdmVyc2lvbjsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gc2VjX3ZhcjsKKwlzdHJ1Y3QgX3BhbmVsX3NpemVfcG9zX2luZm8gcGFuZWxfcG9zX3NpemVfcGFyYTsKKwl1MzIgc3RhdGVfaW5mbyA9IDA7CisJdTMyIHZpYWluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmlhZmJfaW9jdGxfaW5mbyk7CisJdTMyICp2aWFmYl9nYW1tYV90YWJsZTsKKwljaGFyIGRyaXZlcl9uYW1lW10gPSAidmlhZmIiOworCisJdTMyIF9fdXNlciAqYXJncCA9ICh1MzIgX191c2VyICopIGFyZzsKKwl1MzIgZ3B1MzI7CisJdTMyIHZpZGVvX2Rldl9pbmZvID0gMDsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZyB2aWFmYl9zZXR0aW5nID0ge307CisJc3RydWN0IGRldmljZV90IGFjdGl2ZV9kZXYgPSB7fTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2lvY3RsOiAweCVYICEhXG4iLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJQUZCX0dFVF9DSElQX0lORk86CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLAorCQkJCXNpemVvZihzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX0lORk9fU0laRToKKwkJcmV0dXJuIHB1dF91c2VyKHZpYWluZm9fc2l6ZSwgYXJncCk7CisJY2FzZSBWSUFGQl9HRVRfSU5GTzoKKwkJcmV0dXJuIHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKGFyZyk7CisJY2FzZSBWSUFGQl9IT1RQTFVHOgorCQlyZXR1cm4gcHV0X3VzZXIodmlhZmJfaW9jdGxfaG90cGx1ZyhpbmZvLT52YXIueHJlcywKKwkJCQkJICAgICAgaW5mby0+dmFyLnlyZXMsCisJCQkJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCksIGFyZ3ApOworCWNhc2UgVklBRkJfU0VUX0hPVFBMVUdfRkxBRzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZncHUzMiwgYXJncCwgc2l6ZW9mKGdwdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdmlhZmJfaG90cGx1ZyA9IChncHUzMikgPyAxIDogMDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfUkVTT0xVVElPTjoKKwkJdmlhbW9kZS54cmVzID0gKHUzMikgdmlhZmJfaG90cGx1Z19YcmVzOworCQl2aWFtb2RlLnlyZXMgPSAodTMyKSB2aWFmYl9ob3RwbHVnX1lyZXM7CisJCXZpYW1vZGUucmVmcmVzaCA9ICh1MzIpIHZpYWZiX2hvdHBsdWdfcmVmcmVzaDsKKwkJdmlhbW9kZS5icHAgPSAodTMyKSB2aWFmYl9ob3RwbHVnX2JwcDsKKwkJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQkJdmlhbW9kZS54cmVzX3NlYyA9IHZpYWZiX3NlY29uZF94cmVzOworCQkJdmlhbW9kZS55cmVzX3NlYyA9IHZpYWZiX3NlY29uZF95cmVzOworCQkJdmlhbW9kZS52aXJ0dWFsX3hyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKKwkJCXZpYW1vZGUudmlydHVhbF95cmVzX3NlYyA9IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CisJCQl2aWFtb2RlLnJlZnJlc2hfc2VjID0gdmlhZmJfcmVmcmVzaDE7CisJCQl2aWFtb2RlLmJwcF9zZWMgPSB2aWFmYl9icHAxOworCQl9IGVsc2UgeworCQkJdmlhbW9kZS54cmVzX3NlYyA9IDA7CisJCQl2aWFtb2RlLnlyZXNfc2VjID0gMDsKKwkJCXZpYW1vZGUudmlydHVhbF94cmVzX3NlYyA9IDA7CisJCQl2aWFtb2RlLnZpcnR1YWxfeXJlc19zZWMgPSAwOworCQkJdmlhbW9kZS5yZWZyZXNoX3NlYyA9IDA7CisJCQl2aWFtb2RlLmJwcF9zZWMgPSAwOworCQl9CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZpYW1vZGUsIHNpemVvZih2aWFtb2RlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfU0FNTV9JTkZPOgorCQl2aWFzYW1tLnNhbW1fc3RhdHVzID0gdmlhZmJfU0FNTV9PTjsKKworCQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCQlpZiAodmlhZmJfZHVhbF9mYikgeworCQkJCXZpYXNhbW0uc2l6ZV9wcmltID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZTsKKwkJCQl2aWFzYW1tLnNpemVfc2VjID0gdmlhcGFyaW5mbzEtPmZibWVtX2ZyZWU7CisJCQl9IGVsc2UgeworCQkJCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSkgeworCQkJCQl2aWFzYW1tLnNpemVfcHJpbSA9CisJCQkJCSAgICB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC0KKwkJCQkJICAgIHZpYWZiX3NlY29uZF9zaXplICogMTAyNCAqIDEwMjQ7CisJCQkJCXZpYXNhbW0uc2l6ZV9zZWMgPQorCQkJCQkgICAgdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCQl9IGVsc2UgeworCQkJCQl2aWFzYW1tLnNpemVfcHJpbSA9CisJCQkJCSAgICB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID4+IDE7CisJCQkJCXZpYXNhbW0uc2l6ZV9zZWMgPQorCQkJCQkgICAgKHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPj4gMSk7CisJCQkJfQorCQkJfQorCQkJdmlhc2FtbS5tZW1fYmFzZSA9IHZpYXBhcmluZm8tPmZibWVtOworCQkJdmlhc2FtbS5vZmZzZXRfc2VjID0gdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXZpYXNhbW0uc2l6ZV9wcmltID0KKwkJCSAgICB2aWFwYXJpbmZvLT5tZW1zaXplIC0gdmlhcGFyaW5mby0+ZmJtZW1fdXNlZDsKKwkJCXZpYXNhbW0uc2l6ZV9zZWMgPSAwOworCQkJdmlhc2FtbS5tZW1fYmFzZSA9IHZpYXBhcmluZm8tPmZibWVtOworCQkJdmlhc2FtbS5vZmZzZXRfc2VjID0gMDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZpYXNhbW0sIHNpemVvZih2aWFzYW1tKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlicmVhazsKKwljYXNlIFZJQUZCX1RVUk5fT05fT1VUUFVUX0RFVklDRToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZncHUzMiwgYXJncCwgc2l6ZW9mKGdwdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGdwdTMyICYgQ1JUX0RldmljZSkKKwkJCXZpYWZiX2NydF9lbmFibGUoKTsKKwkJaWYgKGdwdTMyICYgRFZJX0RldmljZSkKKwkJCXZpYWZiX2R2aV9lbmFibGUoKTsKKwkJaWYgKGdwdTMyICYgTENEX0RldmljZSkKKwkJCXZpYWZiX2xjZF9lbmFibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9UVVJOX09GRl9PVVRQVVRfREVWSUNFOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmdwdTMyLCBhcmdwLCBzaXplb2YoZ3B1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoZ3B1MzIgJiBDUlRfRGV2aWNlKQorCQkJdmlhZmJfY3J0X2Rpc2FibGUoKTsKKwkJaWYgKGdwdTMyICYgRFZJX0RldmljZSkKKwkJCXZpYWZiX2R2aV9kaXNhYmxlKCk7CisJCWlmIChncHUzMiAmIExDRF9EZXZpY2UpCisJCQl2aWFmYl9sY2RfZGlzYWJsZSgpOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9ERVZJQ0U6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYWN0aXZlX2RldiwgKHZvaWQgKilhcmdwLAorCQkJc2l6ZW9mKGFjdGl2ZV9kZXYpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2aWFmYl9zZXRfZGV2aWNlKGFjdGl2ZV9kZXYpOworCQl2aWFmYl9zZXRfcGFyKGluZm8pOworCQlicmVhazsKKwljYXNlIFZJQUZCX0dFVF9ERVZJQ0U6CisJCWFjdGl2ZV9kZXYuY3J0ID0gdmlhZmJfQ1JUX09OOworCQlhY3RpdmVfZGV2LmR2aSA9IHZpYWZiX0RWSV9PTjsKKwkJYWN0aXZlX2Rldi5sY2QgPSB2aWFmYl9MQ0RfT047CisJCWFjdGl2ZV9kZXYuc2FtbSA9IHZpYWZiX1NBTU1fT047CisJCWFjdGl2ZV9kZXYucHJpbWFyeV9kZXYgPSB2aWFmYl9wcmltYXJ5X2RldjsKKworCQlhY3RpdmVfZGV2LmxjZF9kc3BfY2VudCA9IHZpYWZiX2xjZF9kc3BfbWV0aG9kOworCQlhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZCA9IHZpYWZiX2xjZF9wYW5lbF9pZDsKKwkJYWN0aXZlX2Rldi5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOworCisJCWFjdGl2ZV9kZXYueHJlcyA9IHZpYWZiX2hvdHBsdWdfWHJlczsKKwkJYWN0aXZlX2Rldi55cmVzID0gdmlhZmJfaG90cGx1Z19ZcmVzOworCisJCWFjdGl2ZV9kZXYueHJlczEgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwkJYWN0aXZlX2Rldi55cmVzMSA9IHZpYWZiX3NlY29uZF95cmVzOworCisJCWFjdGl2ZV9kZXYuYnBwID0gdmlhZmJfYnBwOworCQlhY3RpdmVfZGV2LmJwcDEgPSB2aWFmYl9icHAxOworCQlhY3RpdmVfZGV2LnJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCQlhY3RpdmVfZGV2LnJlZnJlc2gxID0gdmlhZmJfcmVmcmVzaDE7CisKKwkJYWN0aXZlX2Rldi5lcGlhX2R2aSA9IHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpOworCQlhY3RpdmVfZGV2LmxjZF9kdWFsX2VkZ2UgPSB2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlOworCQlhY3RpdmVfZGV2LmJ1c193aWR0aCA9IHZpYWZiX2J1c193aWR0aDsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhY3RpdmVfZGV2LCBzaXplb2YoYWN0aXZlX2RldikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfRFJJVkVSX1ZFUlNJT046CisJCWRyaXZlcl92ZXJzaW9uLmlNYWpvck51bSA9IFZFUlNJT05fTUFKT1I7CisJCWRyaXZlcl92ZXJzaW9uLmlLZXJuZWxOdW0gPSBWRVJTSU9OX0tFUk5FTDsKKwkJZHJpdmVyX3ZlcnNpb24uaU9TTnVtID0gVkVSU0lPTl9PUzsKKwkJZHJpdmVyX3ZlcnNpb24uaU1pbm9yTnVtID0gVkVSU0lPTl9NSU5PUjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZkcml2ZXJfdmVyc2lvbiwKKwkJCXNpemVvZihkcml2ZXJfdmVyc2lvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9ERVZJQ0VfSU5GTzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2aWFmYl9zZXR0aW5nLAorCQkJYXJncCwgc2l6ZW9mKHZpYWZiX3NldHRpbmcpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoYXBwbHlfZGV2aWNlX3NldHRpbmcodmlhZmJfc2V0dGluZywgaW5mbykgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9TRUNPTkRfTU9ERToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZWNfdmFyLCBhcmdwLCBzaXplb2Yoc2VjX3ZhcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWFwcGx5X3NlY29uZF9tb2RlX3NldHRpbmcoJnNlY192YXIpOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX0RFVklDRV9JTkZPOgorCisJCXJldHJpZXZlX2RldmljZV9zZXR0aW5nKCZ2aWFmYl9zZXR0aW5nKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2aWFmYl9zZXR0aW5nLCBzaXplb2YodmlhZmJfc2V0dGluZykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9ERVZJQ0VfU1VQUE9SVDoKKwkJdmlhZmJfZ2V0X2RldmljZV9zdXBwb3J0X3N0YXRlKCZzdGF0ZV9pbmZvKTsKKwkJaWYgKHB1dF91c2VyKHN0YXRlX2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfREVWSUNFX0NPTk5FQ1Q6CisJCXZpYWZiX2dldF9kZXZpY2VfY29ubmVjdF9zdGF0ZSgmc3RhdGVfaW5mbyk7CisJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX1BBTkVMX1NVUFBPUlRfRVhQQU5EOgorCQlzdGF0ZV9pbmZvID0KKwkJICAgIHZpYWZiX2xjZF9nZXRfc3VwcG9ydF9leHBhbmRfc3RhdGUoaW5mby0+dmFyLnhyZXMsCisJCQkJCQkgaW5mby0+dmFyLnlyZXMpOworCQlpZiAocHV0X3VzZXIoc3RhdGVfaW5mbywgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9EUklWRVJfTkFNRToKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBkcml2ZXJfbmFtZSwgc2l6ZW9mKGRyaXZlcl9uYW1lKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9HQU1NQV9MVVQ6CisJCXZpYWZiX2dhbW1hX3RhYmxlID0ga21hbGxvYygyNTYgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdmlhZmJfZ2FtbWFfdGFibGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHZpYWZiX2dhbW1hX3RhYmxlLCBhcmdwLAorCQkJCXNpemVvZih2aWFmYl9nYW1tYV90YWJsZSkpKSB7CisJCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2aWFmYl9zZXRfZ2FtbWFfdGFibGUodmlhZmJfYnBwLCB2aWFmYl9nYW1tYV90YWJsZSk7CisJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9HQU1NQV9MVVQ6CisJCXZpYWZiX2dhbW1hX3RhYmxlID0ga21hbGxvYygyNTYgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdmlhZmJfZ2FtbWFfdGFibGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdmlhZmJfZ2V0X2dhbW1hX3RhYmxlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCB2aWFmYl9nYW1tYV90YWJsZSwKKwkJCXNpemVvZih2aWFmYl9nYW1tYV90YWJsZSkpKSB7CisJCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfR0FNTUFfU1VQUE9SVF9TVEFURToKKwkJdmlhZmJfZ2V0X2dhbW1hX3N1cHBvcnRfc3RhdGUodmlhZmJfYnBwLCAmc3RhdGVfaW5mbyk7CisJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9WSURFT19ERVZJQ0U6CisJCWdldF91c2VyKHZpZGVvX2Rldl9pbmZvLCBhcmdwKTsKKwkJdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh2aWRlb19kZXZfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX1ZJREVPX0RFVklDRToKKwkJdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSgmdmlkZW9fZGV2X2luZm8pOworCQlpZiAocHV0X3VzZXIodmlkZW9fZGV2X2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfU1lOQ19TVVJGQUNFOgorCQlERUJVR19NU0coS0VSTl9JTkZPICJsb2JvIFZJQUZCX1NZTkNfU1VSRkFDRVxuIik7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX0RSSVZFUl9DQVBTOgorCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX1BBTkVMX01BWF9TSVpFOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwYW5lbF9wb3Nfc2l6ZV9wYXJhLnggPSBwYW5lbF9wb3Nfc2l6ZV9wYXJhLnkgPSAwOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwYW5lbF9wb3Nfc2l6ZV9wYXJhLAorCQkgICAgIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfUEFORUxfTUFYX1BPU0lUSU9OOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwYW5lbF9wb3Nfc2l6ZV9wYXJhLnggPSBwYW5lbF9wb3Nfc2l6ZV9wYXJhLnkgPSAwOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwYW5lbF9wb3Nfc2l6ZV9wYXJhLAorCQkgICAgIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9QQU5FTF9QT1NJVElPTjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyCisJCSAgICAoJnBhbmVsX3Bvc19zaXplX3BhcmEsIGFyZ3AsIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcGFuZWxfcG9zX3NpemVfcGFyYS54ID0gcGFuZWxfcG9zX3NpemVfcGFyYS55ID0gMDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcGFuZWxfcG9zX3NpemVfcGFyYSwKKwkJICAgICBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX1BBTkVMX1NJWkU6CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXBhbmVsX3Bvc19zaXplX3BhcmEueCA9IHBhbmVsX3Bvc19zaXplX3BhcmEueSA9IDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBhbmVsX3Bvc19zaXplX3BhcmEsCisJCSAgICAgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfU0VUX1BBTkVMX1BPU0lUSU9OOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9QQU5FTF9TSVpFOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwljb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJdTMyIGNvbCA9IDAsIHJvcCA9IDA7CisJaW50IHBpdGNoOworCisJaWYgKCF2aWFmYl9hY2NlbCkKKwkJcmV0dXJuIGNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKKworCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhlaWdodCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChyZWN0LT5yb3ApIHsKKwljYXNlIFJPUF9YT1I6CisJCXJvcCA9IDB4NUE7CisJCWJyZWFrOworCWNhc2UgUk9QX0NPUFk6CisJZGVmYXVsdDoKKwkJcm9wID0gMHhGMDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWNvbCA9IHJlY3QtPmNvbG9yOworCQlicmVhazsKKwljYXNlIDE2OgorCQljb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWN0LT5jb2xvcl07CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlY3QtPmNvbG9yXTsKKwkJYnJlYWs7CisJfQorCisJLyogQml0Qmx0IFNvdXJjZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKKwkvKiBTb3VyY2UgQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7CisJLyogRGVzdGluYXRpb24gQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKCgodW5zaWduZWQgbG9uZykgKGluZm8tPnNjcmVlbl9iYXNlKSAtCisJCSAgICh1bnNpZ25lZCBsb25nKSB2aWFmYl9GQl9NTSkgPj4gMywKKwkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7CisJLyogUGl0Y2ggKi8KKwlwaXRjaCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NzsKKwl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8CisJCSAgICgoKHBpdGNoICoKKwkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIHwKKwkJICAgICAgKCgocGl0Y2ggKiBpbmZvLT4KKwkJICAgICAgdmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIDw8IDE2KSksCisJCSAgICAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLworCXdyaXRlbCgoKHJlY3QtPmR5IDw8IDE2KSB8IHJlY3QtPmR4KSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCisJd3JpdGVsKCgoKHJlY3QtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChyZWN0LT53aWR0aCAtIDEpKSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKKwkvKiBGb3Jncm91bmQgY29sb3Igb3IgRGVzdGluYXRpb24gY29sb3IgKi8KKwl3cml0ZWwoY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKKwkvKiBHRSBDb21tYW5kICovCisJd3JpdGVsKCgweDAxIHwgMHgyMDAwIHwgKHJvcCA8PCAyNCkpLAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRUNNRCk7CisKK30KKworc3RhdGljIHZvaWQgdmlhZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXUzMiBkeSA9IGFyZWEtPmR5LCBzeSA9IGFyZWEtPnN5LCBkaXJlY3Rpb24gPSAweDA7CisJdTMyIHN4ID0gYXJlYS0+c3gsIGR4ID0gYXJlYS0+ZHgsIHdpZHRoID0gYXJlYS0+d2lkdGg7CisJaW50IHBpdGNoOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfY29weWFyZWEhIVxuIik7CisKKwlpZiAoIXZpYWZiX2FjY2VsKQorCQlyZXR1cm4gY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJaWYgKCFhcmVhLT53aWR0aCB8fCAhYXJlYS0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwlpZiAoc3kgPCBkeSkgeworCQlkeSArPSBhcmVhLT5oZWlnaHQgLSAxOworCQlzeSArPSBhcmVhLT5oZWlnaHQgLSAxOworCQlkaXJlY3Rpb24gfD0gMHg0MDAwOworCX0KKworCWlmIChzeCA8IGR4KSB7CisJCWR4ICs9IHdpZHRoIC0gMTsKKwkJc3ggKz0gd2lkdGggLSAxOworCQlkaXJlY3Rpb24gfD0gMHg4MDAwOworCX0KKworCS8qIFNvdXJjZSBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KKwkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKKwkvKiBEZXN0aW5hdGlvbiBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KKwkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKKwkvKiBQaXRjaCAqLworCXBpdGNoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OworCS8qIFZJQV9QSVRDSF9FTkFCTEUgY2FuIGJlIG9taXR0ZWQgbm93LiAqLworCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKKwkJICAgKCgocGl0Y2ggKgorCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgfCAoKChwaXRjaCAqCisJCQkJCQkJCWluZm8tPnZhci4KKwkJCQkJCQkJYml0c19wZXJfcGl4ZWwKKwkJCQkJCQkJPj4gMykgPj4gMykKKwkJCQkJCQkgICAgICA8PCAxNikpLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwkvKiBCaXRCbHQgU291cmNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChzeSA8PCAxNikgfCBzeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChkeSA8PCAxNikgfCBkeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7CisJLyogRGltZW5zaW9uOiB3aWR0aCAmIGhlaWdodCAqLworCXdyaXRlbCgoKChhcmVhLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoYXJlYS0+d2lkdGggLSAxKSksCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7CisJLyogR0UgQ29tbWFuZCAqLworCXdyaXRlbCgoMHgwMSB8IGRpcmVjdGlvbiB8ICgweENDIDw8IDI0KSksCisJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKKworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwl1MzIgc2l6ZSwgYmdfY29sID0gMCwgZmdfY29sID0gMCwgKnVkYXRhOworCWludCBpOworCWludCBwaXRjaDsKKworCWlmICghdmlhZmJfYWNjZWwpCisJCXJldHVybiBjZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCXVkYXRhID0gKHUzMiAqKSBpbWFnZS0+ZGF0YTsKKworCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7CisJCWZnX2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJYnJlYWs7CisJfQorCXNpemUgPSBpbWFnZS0+d2lkdGggKiBpbWFnZS0+aGVpZ2h0OworCisJLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQorCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCS8qIFBpdGNoICovCisJcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7CisJd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAorCQkgICAoKChwaXRjaCAqCisJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8ICgoKHBpdGNoICoKKwkJCQkJCQkJaW5mby0+dmFyLgorCQkJCQkJCQliaXRzX3Blcl9waXhlbAorCQkJCQkJCQk+PiAzKSA+PiAzKQorCQkJCQkJCSAgICAgIDw8IDE2KSksCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOworCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChpbWFnZS0+ZHkgPDwgMTYpIHwgaW1hZ2UtPmR4KSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCisJd3JpdGVsKCgoKGltYWdlLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoaW1hZ2UtPndpZHRoIC0gMSkpLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOworCS8qIGZiIGNvbG9yICovCisJd3JpdGVsKGZnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRkdDT0xPUik7CisJLyogYmcgY29sb3IgKi8KKwl3cml0ZWwoYmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19CR0NPTE9SKTsKKwkvKiBHRSBDb21tYW5kICovCisJd3JpdGVsKDB4Q0MwMjAxNDIsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSsrKSB7CisJCXdyaXRlbCgqdWRhdGEsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfTU1JT19CTFRCQVNFKTsKKwkJdWRhdGErKzsKKwl9CisKK30KKworc3RhdGljIGludCB2aWFmYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcikKK3sKKwl1OCBkYXRhW0NVUlNPUl9TSVpFIC8gOF07CisJdTMyIGRhdGFfYmFrW0NVUlNPUl9TSVpFIC8gMzJdOworCXUzMiB0ZW1wLCB4eCwgeXksIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7CisJaW50IHNpemUsIGksIGogPSAwOworCXN0YXRpYyBpbnQgaHdfY3Vyc29yOworCXN0cnVjdCB2aWFmYl9wYXIgKnBfdmlhZmJfcGFyOworCisJaWYgKHZpYWZiX2FjY2VsKQorCQlod19jdXJzb3IgPSAxOworCisJaWYgKCF2aWFmYl9hY2NlbCkgeworCQlpZiAoaHdfY3Vyc29yKSB7CisJCQl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKKwkJCWh3X2N1cnNvciA9IDA7CisJCX0KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCgoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmlnYV9wYXRoID09IElHQTIpCisJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogV2hlbiBkdW92aWV3IGFuZCB1c2luZyBsY2QgLCB1c2Ugc29mdCBjdXJzb3IgKi8KKwlpZiAodmlhZmJfTENEX09OIHx8ICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+ZHVvdmlldykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKKwl2aWFjdXJzb3IgPSAqY3Vyc29yOworCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVEhPVCkgeworCQl2aWFjdXJzb3IuaG90ID0gY3Vyc29yLT5ob3Q7CisJCXRlbXAgPSAoKHZpYWN1cnNvci5ob3QueCkgPDwgMTYpICsgdmlhY3Vyc29yLmhvdC55OworCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX09SRyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFBPUykgeworCQl2aWFjdXJzb3IuaW1hZ2UuZHggPSBjdXJzb3ItPmltYWdlLmR4OworCQl2aWFjdXJzb3IuaW1hZ2UuZHkgPSBjdXJzb3ItPmltYWdlLmR5OworCQl5eSA9IGN1cnNvci0+aW1hZ2UuZHkgLSBpbmZvLT52YXIueW9mZnNldDsKKwkJeHggPSBjdXJzb3ItPmltYWdlLmR4IC0gaW5mby0+dmFyLnhvZmZzZXQ7CisJCXRlbXAgPSB5eSAmIDB4RkZGRjsKKwkJdGVtcCB8PSAoeHggPDwgMTYpOworCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX1BPUyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNJWkUpIHsKKwkJdGVtcCA9IHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKworCQlpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gMzIpCisJCSAgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gMzIpKSB7CisJCQlNQVhfQ1VSUyA9IDMyOworCQkJdGVtcCB8PSAweDI7CisJCX0gZWxzZSBpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gNjQpCisJCQkgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gNjQpKSB7CisJCQlNQVhfQ1VSUyA9IDY0OworCQkJdGVtcCAmPSAweEZGRkZGRkZEOworCQl9IGVsc2UgeworCQkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJIlRoZSBjdXJzb3IgaW1hZ2UgaXMgYmlnZXIgdGhhbiA2NHg2NCBiaXRzLi4uXG4iKTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwkJd3JpdGVsKHRlbXAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKworCQl2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gY3Vyc29yLT5pbWFnZS5oZWlnaHQ7CisJCXZpYWN1cnNvci5pbWFnZS53aWR0aCA9IGN1cnNvci0+aW1hZ2Uud2lkdGg7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVENNQVApIHsKKwkJdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yID0gY3Vyc29yLT5pbWFnZS5mZ19jb2xvcjsKKwkJdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yID0gY3Vyc29yLT5pbWFnZS5iZ19jb2xvcjsKKworCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDg6CisJCWNhc2UgMTY6CisJCWNhc2UgMzI6CisJCQliZ19jb2wgPQorCQkJICAgICgweEZGIDw8IDI0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgPDwgOCkgfAorCQkJICAgICgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApID4+IDgpOworCQkJZmdfY29sID0KKwkJCSAgICAoMHhGRiA8PCAyNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApIDw8IDgpIHwKKwkJCSAgICAoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSA+PiA4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBUaGlzIGlzIGluZGVlZCBhIHBhdGNoIGZvciBWVDMzMjQvVlQzMzUzICovCisJCWlmICghaW5mby0+cGFyKQorCQkJcmV0dXJuIDA7CisJCXBfdmlhZmJfcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKilpbmZvLT5wYXI7CisKKwkJaWYgKChwX3ZpYWZiX3Bhci0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlVTklDSFJPTUVfQ1g3MDApIHx8CisJCQkoKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCVVOSUNIUk9NRV9WWDgwMCkpKSB7CisJCQliZ19jb2wgPQorCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApIDw8IDE0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA8PCA0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApID4+IDYpOworCQkJZmdfY29sID0KKwkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA8PCAxNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgorCQkJICAgIDB4RkZDMCkgPDwgNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA+PiA2KTsKKwkJfQorCisJCXdyaXRlbChiZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9CRyk7CisJCXdyaXRlbChmZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9GRyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNIQVBFKSB7CisJCXNpemUgPQorCQkgICAgKCh2aWFjdXJzb3IuaW1hZ2Uud2lkdGggKyA3KSA+PiAzKSAqCisJCSAgICB2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0OworCisJCWlmIChNQVhfQ1VSUyA9PSAzMikgeworCQkJZm9yIChpID0gMDsgaSA8IChDVVJTT1JfU0laRSAvIDMyKTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbaV0gPSAweDA7CisJCQkJZGF0YV9iYWtbaSArIDFdID0gMHhGRkZGRkZGRjsKKwkJCQlpICs9IDE7CisJCQl9CisJCX0gZWxzZSBpZiAoTUFYX0NVUlMgPT0gNjQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAoQ1VSU09SX1NJWkUgLyAzMik7IGkrKykgeworCQkJCWRhdGFfYmFrW2ldID0gMHgwOworCQkJCWRhdGFfYmFrW2kgKyAxXSA9IDB4MDsKKwkJCQlkYXRhX2Jha1tpICsgMl0gPSAweEZGRkZGRkZGOworCQkJCWRhdGFfYmFrW2kgKyAzXSA9IDB4RkZGRkZGRkY7CisJCQkJaSArPSAzOworCQkJfQorCQl9CisKKwkJc3dpdGNoICh2aWFjdXJzb3Iucm9wKSB7CisJCWNhc2UgUk9QX1hPUjoKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQkJZGF0YVtpXSA9IHZpYWN1cnNvci5tYXNrW2ldOworCQkJYnJlYWs7CisJCWNhc2UgUk9QX0NPUFk6CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQkJZGF0YVtpXSA9IHZpYWN1cnNvci5tYXNrW2ldOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChNQVhfQ1VSUyA9PSAzMikgeworCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJCWRhdGFfYmFrW2pdID0gKHUzMikgZGF0YVtpXTsKKwkJCQlkYXRhX2Jha1tqICsgMV0gPSB+ZGF0YV9iYWtbal07CisJCQkJaiArPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKE1BWF9DVVJTID09IDY0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbal0gPSAodTMyKSBkYXRhW2ldOworCQkJCWRhdGFfYmFrW2ogKyAxXSA9IDB4MDsKKwkJCQlkYXRhX2Jha1tqICsgMl0gPSB+ZGF0YV9iYWtbal07CisJCQkJZGF0YV9iYWtbaiArIDNdID0gfmRhdGFfYmFrW2ogKyAxXTsKKwkJCQlqICs9IDQ7CisJCQl9CisJCX0KKworCQltZW1jcHkoKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5mYm1lbV92aXJ0ICsKKwkJICAgICAgICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+Y3Vyc29yX3N0YXJ0LAorCQkgICAgICAgZGF0YV9iYWssIENVUlNPUl9TSVpFKTsKKwl9CisKKwlpZiAodmlhY3Vyc29yLmVuYWJsZSkKKwkJdmlhZmJfc2hvd19od19jdXJzb3IoaW5mbywgSFdfQ3Vyc29yX09OKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKHZpYWZiX2FjY2VsKQorCQl2aWFmYl93YWl0X2VuZ2luZV9pZGxlKCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9nZXRfbW9kZV9pbmRleChpbnQgaHJlcywgaW50IHZyZXMsIGludCBmbGFnKQoreworCXUzMiBpOworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2dldF9tb2RlX2luZGV4IVxuIik7CisKKwlmb3IgKGkgPSAwOyB2aWFmYl9tb2RlbnRyeVtpXS5tb2RlX2luZGV4ICE9IFZJQV9SRVNfSU5WQUxJRDsgaSsrKQorCQlpZiAodmlhZmJfbW9kZW50cnlbaV0ueHJlcyA9PSBocmVzICYmCisJCQl2aWFmYl9tb2RlbnRyeVtpXS55cmVzID09IHZyZXMpCisJCQlicmVhazsKKworCXZpYWZiX3Jlc01vZGUgPSB2aWFmYl9tb2RlbnRyeVtpXS5tb2RlX2luZGV4OworCWlmIChmbGFnKQorCQl2aWFmYl9tb2RlMSA9IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfcmVzOworCWVsc2UKKwkJdmlhZmJfbW9kZSA9IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfcmVzOworCisJcmV0dXJuIHZpYWZiX3Jlc01vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGludCBkZXZpY2VfaWQpCit7CisJaW50IGRldmljZV9udW0gPSAwOworCisJLyogSW5pdGlhbGl6ZTogKi8KKwl2aWFmYl9DUlRfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfRFZJX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9MQ0QyX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0RldmljZVN0YXR1cyA9IE5vbmVfRGV2aWNlOworCisJaWYgKChkZXZpY2VfaWQgJiBDUlRfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IENSVF9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBEVklfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IERWSV9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBMQ0RfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IExDRF9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBMQ0QyX0RldmljZSkgJiYgKGRldmljZV9udW0gPCBNQVhfQUNUSVZFX0RFVl9OVU0pKSB7CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJZGV2aWNlX251bSsrOworCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gTENEMl9EZXZpY2U7CisJfQorCisJaWYgKHZpYWZiX0RldmljZVN0YXR1cyA9PSBOb25lX0RldmljZSkgeworCQkvKiBVc2UgQ1JUIGFzIGRlZmF1bHQgYWN0aXZlIGRldmljZTogKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0RldmljZVN0YXR1cyA9IENSVF9EZXZpY2U7CisJfQorCURFQlVHX01TRyhLRVJOX0lORk8gIkRldmljZSBTdGF0dXM6JXgiLCB2aWFmYl9EZXZpY2VTdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9zZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2VfdCBhY3RpdmVfZGV2KQoreworCS8qIENoZWNrIGF2YWlsYWJsZSBkZXZpY2UgdG8gZW5hYmxlOiAqLworCWludCBkZXZpY2VfaWQgPSBOb25lX0RldmljZTsKKwlpZiAoYWN0aXZlX2Rldi5jcnQpCisJCWRldmljZV9pZCB8PSBDUlRfRGV2aWNlOworCWlmIChhY3RpdmVfZGV2LmR2aSkKKwkJZGV2aWNlX2lkIHw9IERWSV9EZXZpY2U7CisJaWYgKGFjdGl2ZV9kZXYubGNkKQorCQlkZXZpY2VfaWQgfD0gTENEX0RldmljZTsKKworCWNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGRldmljZV9pZCk7CisKKwkvKiBDaGVjayBwcm9wZXJ0eSBvZiBMQ0Q6ICovCisJaWYgKHZpYWZiX0xDRF9PTikgeworCQlpZiAoYWN0aXZlX2Rldi5sY2RfZHNwX2NlbnQpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfQ0VOVEVSSU5HOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9FWFBBTkRTSU9OOworCQl9CisKKwkJaWYgKGFjdGl2ZV9kZXYubGNkX21vZGUgPT0gTENEX1NQV0cpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfU1BXRzsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKKwkJfQorCisJCWlmIChhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZCA8PSBMQ0RfUEFORUxfSURfTUFYSU1VTSkgeworCQkJdmlhZmJfbGNkX3BhbmVsX2lkID0gYWN0aXZlX2Rldi5sY2RfcGFuZWxfaWQ7CisJCQl2aWFmYl9pbml0X2xjZF9zaXplKCk7CisJCX0KKwl9CisKKwkvKiBDaGVjayBwcm9wZXJ0eSBvZiBtb2RlOiAqLworCWlmICghYWN0aXZlX2Rldi54cmVzMSkKKwkJdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7CisJZWxzZQorCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGFjdGl2ZV9kZXYueHJlczE7CisJaWYgKCFhY3RpdmVfZGV2LnlyZXMxKQorCQl2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKKwllbHNlCisJCXZpYWZiX3NlY29uZF95cmVzID0gYWN0aXZlX2Rldi55cmVzMTsKKwlpZiAoYWN0aXZlX2Rldi5icHAgIT0gMCkKKwkJdmlhZmJfYnBwID0gYWN0aXZlX2Rldi5icHA7CisJaWYgKGFjdGl2ZV9kZXYuYnBwMSAhPSAwKQorCQl2aWFmYl9icHAxID0gYWN0aXZlX2Rldi5icHAxOworCWlmIChhY3RpdmVfZGV2LnJlZnJlc2ggIT0gMCkKKwkJdmlhZmJfcmVmcmVzaCA9IGFjdGl2ZV9kZXYucmVmcmVzaDsKKwlpZiAoYWN0aXZlX2Rldi5yZWZyZXNoMSAhPSAwKQorCQl2aWFmYl9yZWZyZXNoMSA9IGFjdGl2ZV9kZXYucmVmcmVzaDE7CisJaWYgKChhY3RpdmVfZGV2LnNhbW0gPT0gU1RBVEVfT0ZGKSB8fCAoYWN0aXZlX2Rldi5zYW1tID09IFNUQVRFX09OKSkKKwkJdmlhZmJfU0FNTV9PTiA9IGFjdGl2ZV9kZXYuc2FtbTsKKwl2aWFmYl9wcmltYXJ5X2RldiA9IGFjdGl2ZV9kZXYucHJpbWFyeV9kZXY7CisKKwl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9zZXRfdmlkZW9fZGV2aWNlKHUzMiB2aWRlb19kZXZfaW5mbykKK3sKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PRkY7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT0ZGOworCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09GRjsKKworCS8qIENoZWNrIGF2YWlsYWJsZSBkZXZpY2UgdG8gZW5hYmxlOiAqLworCWlmICgodmlkZW9fZGV2X2luZm8gJiBDUlRfRGV2aWNlKSA9PSBDUlRfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PTjsKKwllbHNlIGlmICgodmlkZW9fZGV2X2luZm8gJiBEVklfRGV2aWNlKSA9PSBEVklfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PTjsKKwllbHNlIGlmICgodmlkZW9fZGV2X2luZm8gJiBMQ0RfRGV2aWNlKSA9PSBMQ0RfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PTjsKK30KKworc3RhdGljIHZvaWQgdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSh1MzIgKnZpZGVvX2Rldl9pbmZvKQoreworCSp2aWRlb19kZXZfaW5mbyA9IE5vbmVfRGV2aWNlOworCWlmICh2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPT0gU1RBVEVfT04pCisJCSp2aWRlb19kZXZfaW5mbyB8PSBDUlRfRGV2aWNlOworCWVsc2UgaWYgKHZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9PSBTVEFURV9PTikKKwkJKnZpZGVvX2Rldl9pbmZvIHw9IERWSV9EZXZpY2U7CisJZWxzZSBpZiAodmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID09IFNUQVRFX09OKQorCQkqdmlkZW9fZGV2X2luZm8gfD0gTENEX0RldmljZTsKK30KKworc3RhdGljIGludCBnZXRfcHJpbWFyeV9kZXZpY2Uodm9pZCkKK3sKKwlpbnQgcHJpbWFyeV9kZXZpY2UgPSAwOworCS8qIFJ1bGU6IGRldmljZSBvbiBpZ2ExIHBhdGggYXJlIHRoZSBwcmltYXJ5IGRldmljZS4gKi8KKwlpZiAodmlhZmJfU0FNTV9PTikgeworCQlpZiAodmlhZmJfQ1JUX09OKSB7CisJCQlpZiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkgeworCQkJCURFQlVHX01TRyhLRVJOX0lORk8gIkNSVCBJR0EgUGF0aDolZFxuIiwKKwkJCQkJdmlhcGFyaW5mby0+CisJCQkJCWNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IENSVF9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0RWSV9PTikgeworCQkJaWYgKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IERWSV9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRF9PTikgeworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IExDRF9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QyIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJbHZkc19zZXR0aW5nX2luZm8yLT5pZ2FfcGF0aCk7CisJCQkJcHJpbWFyeV9kZXZpY2UgPSBMQ0QyX0RldmljZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcHJpbWFyeV9kZXZpY2U7Cit9CisKK3N0YXRpYyB1OCBpc19kdW92aWV3KHZvaWQpCit7CisJaWYgKDAgPT0gdmlhZmJfU0FNTV9PTikgeworCQlpZiAodmlhZmJfTENEX09OICsgdmlhZmJfTENEMl9PTiArCisJCQl2aWFmYl9EVklfT04gKyB2aWFmYl9DUlRfT04gPT0gMikKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KKwkqc2VjX3ZhcikKK3sKKwl1MzIgaHRvdGFsLCB2dG90YWwsIGxvbmdfcmVmcmVzaDsKKworCWh0b3RhbCA9IHNlY192YXItPnhyZXMgKyBzZWNfdmFyLT5sZWZ0X21hcmdpbiArCisJCXNlY192YXItPnJpZ2h0X21hcmdpbiArIHNlY192YXItPmhzeW5jX2xlbjsKKwl2dG90YWwgPSBzZWNfdmFyLT55cmVzICsgc2VjX3Zhci0+dXBwZXJfbWFyZ2luICsKKwkJc2VjX3Zhci0+bG93ZXJfbWFyZ2luICsgc2VjX3Zhci0+dnN5bmNfbGVuOworCWlmICgoc2VjX3Zhci0+eHJlc192aXJ0dWFsICogKHNlY192YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKSAmIDB4MUYpIHsKKwkJLypJcyAzMiBieXRlcyBhbGlnbm1lbnQ/ICovCisJCS8qMzIgcGl4ZWwgYWxpZ25tZW50ICovCisJCXNlY192YXItPnhyZXNfdmlydHVhbCA9IChzZWNfdmFyLT54cmVzX3ZpcnR1YWwgKyAzMSkgJiB+MzE7CisJfQorCisJaHRvdGFsID0gc2VjX3Zhci0+eHJlcyArIHNlY192YXItPmxlZnRfbWFyZ2luICsKKwkJc2VjX3Zhci0+cmlnaHRfbWFyZ2luICsgc2VjX3Zhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHNlY192YXItPnlyZXMgKyBzZWNfdmFyLT51cHBlcl9tYXJnaW4gKworCQlzZWNfdmFyLT5sb3dlcl9tYXJnaW4gKyBzZWNfdmFyLT52c3luY19sZW47CisJbG9uZ19yZWZyZXNoID0gMTAwMDAwMDAwMFVMIC8gc2VjX3Zhci0+cGl4Y2xvY2sgKiAxMDAwOworCWxvbmdfcmVmcmVzaCAvPSAoaHRvdGFsICogdnRvdGFsKTsKKworCXZpYWZiX3NlY29uZF94cmVzID0gc2VjX3Zhci0+eHJlczsKKwl2aWFmYl9zZWNvbmRfeXJlcyA9IHNlY192YXItPnlyZXM7CisJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHNlY192YXItPnhyZXNfdmlydHVhbDsKKwl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gc2VjX3Zhci0+eXJlc192aXJ0dWFsOworCXZpYWZiX2JwcDEgPSBzZWNfdmFyLT5iaXRzX3Blcl9waXhlbDsKKwl2aWFmYl9yZWZyZXNoMSA9IHZpYWZiX2dldF9yZWZyZXNoKHNlY192YXItPnhyZXMsIHNlY192YXItPnlyZXMsCisJCWxvbmdfcmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcgc2V0dGluZ19pbmZvLAorCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBuZWVkX3NldF9tb2RlID0gMDsKKwlERUJVR19NU0coS0VSTl9JTkZPICJhcHBseV9kZXZpY2Vfc2V0dGluZ1xuIik7CisKKwlpZiAoc2V0dGluZ19pbmZvLmRldmljZV9mbGFnKSB7CisJCW5lZWRfc2V0X21vZGUgPSAxOworCQljaGVja19hdmFpbGFibGVfZGV2aWNlX3RvX2VuYWJsZShzZXR0aW5nX2luZm8uZGV2aWNlX3N0YXR1cyk7CisJfQorCisJLyogVW5sb2NrIExDRCdzIG9wZXJhdGlvbiBhY2NvcmRpbmcgdG8gTENEIGZsYWcKKwkgICBhbmQgY2hlY2sgaWYgdGhlIHNldHRpbmcgdmFsdWUgaXMgdmFsaWQuICovCisJLyogSWYgdGhlIHZhbHVlIGlzIHZhbGlkLCBhcHBseSB0aGUgbmV3IHNldHRpbmcgdmFsdWUgdG8gdGhlIGRldmljZS4gKi8KKwlpZiAodmlhZmJfTENEX09OKSB7CisJCWlmIChzZXR0aW5nX2luZm8ubGNkX29wZXJhdGlvbl9mbGFnICYgT1BfTENEX0NFTlRFUklORykgeworCQkJbmVlZF9zZXRfbW9kZSA9IDE7CisJCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLmRpc3BsYXlfY2VudGVyKSB7CisJCQkJLyogQ2VudGVyaW5nICovCisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9DRU5URVJJTkc7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIHZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0NFTlRFUklORzsKKwkJCX0gZWxzZSB7CisJCQkJLyogZXhwYW5kc2lvbiAqLworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIExDRF9FWFBBTkRTSU9OOworCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIExDRF9FWFBBTkRTSU9OOworCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CisJCQl9CisJCX0KKworCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9NT0RFKSB7CisJCQluZWVkX3NldF9tb2RlID0gMTsKKwkJCWlmIChzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMubGNkX21vZGUgPT0KKwkJCQlMQ0RfU1BXRykgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX1NQV0c7CisJCQl9IGVsc2UgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX09QRU5MREk7CisJCQl9CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9tb2RlID0KKwkJCSAgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGU7CisJCX0KKworCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9QQU5FTF9JRCkgeworCQkJbmVlZF9zZXRfbW9kZSA9IDE7CisJCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLnBhbmVsX2lkIDw9CisJCQkgICAgTENEX1BBTkVMX0lEX01BWElNVU0pIHsKKwkJCQl2aWFmYl9sY2RfcGFuZWxfaWQgPQorCQkJCSAgICBzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMucGFuZWxfaWQ7CisJCQkJdmlhZmJfaW5pdF9sY2Rfc2l6ZSgpOworCQkJfQorCQl9CisJfQorCisJaWYgKDAgIT0gKHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyAmIE9QX1NBTU0pKSB7CisJCXNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9CisJCSAgICBzZXR0aW5nX2luZm8uc2FtbV9zdGF0dXMgJiAofk9QX1NBTU0pOworCQlpZiAoc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzID09IDAKKwkJICAgIHx8IHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9PSAxKSB7CisJCQl2aWFmYl9TQU1NX09OID0gc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzOworCisJCQlpZiAodmlhZmJfU0FNTV9PTikKKwkJCQl2aWFmYl9wcmltYXJ5X2RldiA9IHNldHRpbmdfaW5mby5wcmltYXJ5X2RldmljZTsKKworCQkJdmlhZmJfc2V0X3N0YXJ0X2FkZHIoKTsKKwkJCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCQl9CisJCW5lZWRfc2V0X21vZGUgPSAxOworCX0KKworCXZpYXBhcmluZm8tPmR1b3ZpZXcgPSBpc19kdW92aWV3KCk7CisKKwlpZiAoIW5lZWRfc2V0X21vZGUpIHsKKwkJOworCX0gZWxzZSB7CisJCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCQl2aWFmYl9zZXRfcGFyKGluZm8pOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcKKwkqc2V0dGluZ19pbmZvKQoreworCisJLyogZ2V0IGRldmljZSBzdGF0dXMgKi8KKwlpZiAodmlhZmJfQ1JUX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyA9IENSVF9EZXZpY2U7CisJaWYgKHZpYWZiX0RWSV9PTiA9PSAxKQorCQlzZXR0aW5nX2luZm8tPmRldmljZV9zdGF0dXMgfD0gRFZJX0RldmljZTsKKwlpZiAodmlhZmJfTENEX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0RfRGV2aWNlOworCWlmICh2aWFmYl9MQ0QyX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0QyX0RldmljZTsKKwlpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9PSAxKSAmJiAodmlhZmJfQ1JUX09OID09IDEpKSB7CisJCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9CisJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKKwl9IGVsc2UgaWYgKCh2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPT0gMSkgJiYgKHZpYWZiX0RWSV9PTiA9PSAxKSkgeworCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPQorCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOworCX0gZWxzZSBpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9PSAxKSAmJiAodmlhZmJfTENEX09OID09IDEpKSB7CisJCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGg7CisJfSBlbHNlIHsKKwkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0gMDsKKwl9CisKKwlzZXR0aW5nX2luZm8tPnNhbW1fc3RhdHVzID0gdmlhZmJfU0FNTV9PTjsKKwlzZXR0aW5nX2luZm8tPnByaW1hcnlfZGV2aWNlID0gZ2V0X3ByaW1hcnlfZGV2aWNlKCk7CisKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl9icHAgPSB2aWFmYl9icHA7CisJc2V0dGluZ19pbmZvLT5zZWNvbmRfZGV2X2JwcCA9IHZpYWZiX2JwcDE7CisKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl9yZWZyZXNoID0gdmlhZmJfcmVmcmVzaDsKKwlzZXR0aW5nX2luZm8tPnNlY29uZF9kZXZfcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2gxOworCisJc2V0dGluZ19pbmZvLT5maXJzdF9kZXZfaG9yX3JlcyA9IHZpYWZiX2hvdHBsdWdfWHJlczsKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl92ZXJfcmVzID0gdmlhZmJfaG90cGx1Z19ZcmVzOworCXNldHRpbmdfaW5mby0+c2Vjb25kX2Rldl9ob3JfcmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJc2V0dGluZ19pbmZvLT5zZWNvbmRfZGV2X3Zlcl9yZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKKworCS8qIEdldCBsY2QgYXR0cmlidXRlcyAqLworCXNldHRpbmdfaW5mby0+bGNkX2F0dHJpYnV0ZXMuZGlzcGxheV9jZW50ZXIgPSB2aWFmYl9sY2RfZHNwX21ldGhvZDsKKwlzZXR0aW5nX2luZm8tPmxjZF9hdHRyaWJ1dGVzLnBhbmVsX2lkID0gdmlhZmJfbGNkX3BhbmVsX2lkOworCXNldHRpbmdfaW5mby0+bGNkX2F0dHJpYnV0ZXMubGNkX21vZGUgPSB2aWFmYl9sY2RfbW9kZTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYWN0aXZlX2Rldih2b2lkKQoreworCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9EVklfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfTENEX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PRkY7CisJLyogMS4gTW9kaWZ5IHRoZSBhY3RpdmUgc3RhdHVzIG9mIGRldmljZXMuICovCisJLyogMi4gS2VlcCB0aGUgb3JkZXIgb2YgZGV2aWNlcywgc28gd2UgY2FuIHNldCBjb3JyZXNwb25kaW5nCisJICAgSUdBIHBhdGggdG8gZGV2aWNlcyBpbiBTQU1NIGNhc2UuICovCisJLyogICAgTm90ZTogVGhlIHByZXZpb3VzIG9mIGFjdGl2ZV9kZXYgaXMgcHJpbWFyeSBkZXZpY2UsCisJICAgYW5kIHRoZSBmb2xsb3dpbmcgaXMgc2Vjb25kYXJ5IGRldmljZS4gKi8KKwlpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtEVkkiLCA3KSkgeworCQkvKiBDUlQrRFZJICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBDUlRfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStDUlQiLCA3KSkgeworCQkvKiBEVkkrQ1JUICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtMQ0QiLCA3KSkgeworCQkvKiBDUlQrTENEICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBDUlRfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtDUlQiLCA3KSkgeworCQkvKiBMQ0QrQ1JUICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStMQ0QiLCA3KSkgeworCQkvKiBEVkkrTENEICovCisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtEVkkiLCA3KSkgeworCQkvKiBMQ0QrRFZJICovCisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtMQ0QyIiwgOCkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRDIrTENEIiwgOCkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0QyX0RldmljZTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJDUlQiLCAzKSkgeworCQkvKiBDUlQgb25seSAqLworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJEVkkiLCAzKSkgeworCQkvKiBEVkkgb25seSAqLworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJMQ0QiLCAzKSkgeworCQkvKiBMQ0Qgb25seSAqLworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgeworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9CisJdmlhcGFyaW5mby0+ZHVvdmlldyA9IGlzX2R1b3ZpZXcoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfdmlkZW9fZGV2KHZvaWQpCit7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT0ZGOworCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09GRjsKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PRkY7CisKKwlpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiQ1JUIiwgMykpIHsKKwkJLyogVmlkZW8gb24gQ1JUICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09OOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiRFZJIiwgMykpIHsKKwkJLyogVmlkZW8gb24gRFZJICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09OOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiTENEIiwgMykpIHsKKwkJLyogVmlkZW8gb24gTENEICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09OOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9wb3J0KGNoYXIgKm9wdF9zdHIsIGludCAqb3V0cHV0X2ludGVyZmFjZSkKK3sKKwlpZiAoIXN0cm5jbXAob3B0X3N0ciwgIkRWUDAiLCA0KSkKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfRFZQMDsKKwllbHNlIGlmICghc3RybmNtcChvcHRfc3RyLCAiRFZQMSIsIDQpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAxOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJERlBfSElHSExPVyIsIDExKSkKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJERlBfSElHSCIsIDgpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlBfSElHSDsKKwllbHNlIGlmICghc3RybmNtcChvcHRfc3RyLCAiREZQX0xPVyIsIDcpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlBfTE9XOworCWVsc2UKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfTk9ORTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbGNkX3BvcnQodm9pZCkKK3sKKwlwYXJzZV9wb3J0KHZpYWZiX2xjZF9wb3J0LCAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJb3V0cHV0X2ludGVyZmFjZSk7CisJLypJbml0aWFsaXplIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IgKi8KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5vdXRwdXRfaW50ZXJmYWNlID0KKwlJTlRFUkZBQ0VfTk9ORTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInBhcnNlX2xjZF9wb3J0OiB2aWFmYl9sY2RfcG9ydDolcyxpbnRlcmZhY2U6JWRcbiIsCisJCSAgdmlhZmJfbGNkX3BvcnQsIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJCSAgb3V0cHV0X2ludGVyZmFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2R2aV9wb3J0KHZvaWQpCit7CisJcGFyc2VfcG9ydCh2aWFmYl9kdmlfcG9ydCwgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCisJCW91dHB1dF9pbnRlcmZhY2UpOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAicGFyc2VfZHZpX3BvcnQ6IHZpYWZiX2R2aV9wb3J0OiVzLGludGVyZmFjZTolZFxuIiwKKwkJICB2aWFmYl9kdmlfcG9ydCwgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJICBvdXRwdXRfaW50ZXJmYWNlKTsKK30KKworLyoKKyAqIFRoZSBwcm9jIGZpbGVzeXN0ZW0gcmVhZC93cml0ZSBmdW5jdGlvbiwgYSBzaW1wbGUgcHJvYyBpbXBsZW1lbnQgdG8KKyAqIGdldC9zZXQgdGhlIHZhbHVlIG9mIERQQSAgRFZQMCwgICBEVlAwRGF0YURyaXZpbmcsICBEVlAwQ2xvY2tEcml2aW5nLCBEVlAxLAorICogRFZQMURyaXZpbmcsIERGUEhpZ2gsIERGUExvdyBDUjk2LCAgIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sCisgKiBDUjlCLCAgICBTUjY1LCAgICBDUjk3LCAgICBDUjk5CisgKi8KK3N0YXRpYyBpbnQgdmlhZmJfZHZwMF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKK2ludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJdTggZHZwMF9kYXRhX2RyaSA9IDAsIGR2cDBfY2xrX2RyaSA9IDAsIGR2cDAgPSAwOworCWR2cDBfZGF0YV9kcmkgPQorCSAgICAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpICYgQklUNSkgPj4gNCB8CisJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxQikgJiBCSVQxKSA+PiAxOworCWR2cDBfY2xrX2RyaSA9CisJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiBCSVQ0KSA+PiAzIHwKKwkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSAmIEJJVDIpID4+IDI7CisJZHZwMCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk2KSAmIDB4MGY7CisJbGVuICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLCAiJXggJXggJXhcbiIsIGR2cDAsIGR2cDBfZGF0YV9kcmksIGR2cDBfY2xrX2RyaSk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF0sICp2YWx1ZSwgKnBidWY7CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGgsIGk7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXBidWYgPSAmYnVmWzBdOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdmFsdWUgPSBzdHJzZXAoJnBidWYsICIgIik7CisJCWlmICh2YWx1ZSAhPSBOVUxMKSB7CisJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJEVlAwOnJlZ192YWxbJWxdPToleFxuIiwgaSwKKwkJCQkgIHJlZ192YWwpOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIDA6CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsCisJCQkJCXJlZ192YWwsIDB4MGYpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDQsIEJJVDUpOworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDEsIEJJVDEpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDMsIEJJVDQpOworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDIsIEJJVDIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IGR2cDEgPSAwLCBkdnAxX2RhdGFfZHJpID0gMCwgZHZwMV9jbGtfZHJpID0gMDsKKwlkdnAxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOUIpICYgMHgwZjsKKwlkdnAxX2RhdGFfZHJpID0gKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjY1KSAmIDB4MGMpID4+IDI7CisJZHZwMV9jbGtfZHJpID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNjUpICYgMHgwMzsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICIleCAleCAleFxuIiwgZHZwMSwgZHZwMV9kYXRhX2RyaSwgZHZwMV9jbGtfZHJpKTsKKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX2R2cDFfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzIwXSwgKnZhbHVlLCAqcGJ1ZjsKKwl1OCByZWdfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aCwgaTsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDIwID8gMjAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJcGJ1ZiA9ICZidWZbMF07CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2YWx1ZSA9IHN0cnNlcCgmcGJ1ZiwgIiAiKTsKKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCXN0cmljdF9zdHJ0b3VsKHZhbHVlLCAwLCAodW5zaWduZWQgbG9uZyAqKSZyZWdfdmFsKTsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLAorCQkJCQlyZWdfdmFsLCAweDBmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkJcmVnX3ZhbCA8PCAyLCAweDBjKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkJcmVnX3ZhbCwgMHgwMyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHZpYWZiX2RmcGhfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwl1OCBkZnBfaGlnaCA9IDA7CisJZGZwX2hpZ2ggPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5NykgJiAweDBmOworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4XG4iLCBkZnBfaGlnaCk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF07CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXN0cmljdF9zdHJ0b3VsKCZidWZbMF0sIDAsICh1bnNpZ25lZCBsb25nICopJnJlZ192YWwpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCByZWdfdmFsLCAweDBmKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwl1OCBkZnBfbG93ID0gMDsKKwlkZnBfbG93ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTkpICYgMHgwZjsKKwlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleFxuIiwgZGZwX2xvdyk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kZnBsX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF07CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXN0cmljdF9zdHJ0b3VsKCZidWZbMF0sIDAsICh1bnNpZ25lZCBsb25nICopJnJlZ192YWwpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCByZWdfdmFsLCAweDBmKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsCisJb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IHZ0MTYzNl8wOCA9IDAsIHZ0MTYzNl8wOSA9IDA7CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJY2FzZSBWVDE2MzZfTFZEUzoKKwkJdnQxNjM2XzA4ID0KKwkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLCAweDA4KSAmIDB4MGY7CisJCXZ0MTYzNl8wOSA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCSAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywgMHgwOSkgJiAweDFmOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCXZ0MTYzNl8wOCA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLCAweDA4KSAmIDB4MGY7CisJCXZ0MTYzNl8wOSA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLCAweDA5KSAmIDB4MWY7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiAleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl92dDE2MzZfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzMwXSwgKnZhbHVlLCAqcGJ1ZjsKKwlzdHJ1Y3QgSU9EQVRBIHJlZ192YWw7CisJdW5zaWduZWQgbG9uZyBsZW5ndGgsIGk7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAzMCA/IDMwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXBidWYgPSAmYnVmWzBdOworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXZhbHVlID0gc3Ryc2VwKCZwYnVmLCAiICIpOworCQkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbC5EYXRhKTsKKwkJCQlzd2l0Y2ggKGkpIHsKKwkJCQljYXNlIDA6CisJCQkJCXJlZ192YWwuSW5kZXggPSAweDA4OworCQkJCQlyZWdfdmFsLk1hc2sgPSAweDBmOworCQkJCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMKKwkJCQkJICAgICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJICAgICZ2aWFwYXJpbmZvLT4KKwkJCQkJICAgIGNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8sCisJCQkJCSAgICAgcmVnX3ZhbCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJcmVnX3ZhbC5JbmRleCA9IDB4MDk7CisJCQkJCXJlZ192YWwuTWFzayA9IDB4MWY7CisJCQkJCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcworCQkJCQkgICAgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgICAgJnZpYXBhcmluZm8tPgorCQkJCQkgICAgY2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXZhbHVlID0gc3Ryc2VwKCZwYnVmLCAiICIpOworCQkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbC5EYXRhKTsKKwkJCQlzd2l0Y2ggKGkpIHsKKwkJCQljYXNlIDA6CisJCQkJCXJlZ192YWwuSW5kZXggPSAweDA4OworCQkJCQlyZWdfdmFsLk1hc2sgPSAweDBmOworCQkJCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMKKwkJCQkJICAgICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCisJCQkJCSAgICAmdmlhcGFyaW5mby0+CisJCQkJCSAgICBjaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMiwKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlyZWdfdmFsLkluZGV4ID0gMHgwOTsKKwkJCQkJcmVnX3ZhbC5NYXNrID0gMHgxZjsKKwkJCQkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzCisJCQkJCSAgICAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJCQkgICAgJnZpYXBhcmluZm8tPgorCQkJCQkgICAgY2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIsCisJCQkJCSAgICAgcmVnX3ZhbCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgdmlhZmJfaW5pdF9wcm9jKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdmlhZmJfZW50cnkpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKwl2aWFmYl9lbnRyeSA9IHByb2NfbWtkaXIoInZpYWZiIiwgTlVMTCk7CisJaWYgKHZpYWZiX2VudHJ5KSB7CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImR2cDAiLCAwLCB2aWFmYl9lbnRyeSk7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMF9wcm9jX3JlYWQ7CisJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY193cml0ZTsKKwkJfQorCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdnAxIiwgMCwgdmlhZmJfZW50cnkpOworCQlpZiAoZW50cnkpIHsKKwkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY19yZWFkOworCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAxX3Byb2Nfd3JpdGU7CisJCX0KKwkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwaCIsIDAsIHZpYWZiX2VudHJ5KTsKKwkJaWYgKGVudHJ5KSB7CisJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2NfcmVhZDsKKwkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZGZwaF9wcm9jX3dyaXRlOworCQl9CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRmcGwiLCAwLCB2aWFmYl9lbnRyeSk7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZGZwbF9wcm9jX3JlYWQ7CisJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY193cml0ZTsKKwkJfQorCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJCWx2ZHNfY2hpcF9uYW1lIHx8IFZUMTYzNl9MVkRTID09CisJCSAgICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgidnQxNjM2IiwgMCwgdmlhZmJfZW50cnkpOworCQkJaWYgKGVudHJ5KSB7CisJCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQ7CisJCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY193cml0ZTsKKwkJCX0KKwkJfQorCisJfQorfQorc3RhdGljIHZvaWQgdmlhZmJfcmVtb3ZlX3Byb2Moc3RydWN0IHByb2NfZGlyX2VudHJ5ICp2aWFmYl9lbnRyeSkKK3sKKwkvKiBubyBwcm9ibGVtIGlmIGl0IHdhcyBub3QgcmVnaXN0ZXJlZCAqLworCXJlbW92ZV9wcm9jX2VudHJ5KCJkdnAwIiwgdmlhZmJfZW50cnkpOy8qIHBhcmVudCBkaXIgKi8KKwlyZW1vdmVfcHJvY19lbnRyeSgiZHZwMSIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGZwaCIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGZwbCIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidnQxNjM2IiwgdmlhZmJfZW50cnkpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ2dDE2MjUiLCB2aWFmYl9lbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9wY2lfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXM7CisJY2hhciAqdG1wYywgKnRtcG07CisJY2hhciAqdG1wY19zZWMsICp0bXBtX3NlYzsKKwlpbnQgdm1vZGVfaW5kZXg7CisJdTMyIHRtZHNfbGVuZ3RoLCBsdmRzX2xlbmd0aCwgY3J0X2xlbmd0aCwgY2hpcF9sZW5ndGgsIHZpYWZiX3Bhcl9sZW5ndGg7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJWSUFGQiBQQ0kgUHJvYmUhIVxuIik7CisKKwl2aWFmYl9wYXJfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB2aWFmYl9wYXIpLCBCSVRTX1BFUl9MT05HLzgpOworCXRtZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAorCQlCSVRTX1BFUl9MT05HLzgpOworCWx2ZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAorCQlCSVRTX1BFUl9MT05HLzgpOworCWNydF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCisJCUJJVFNfUEVSX0xPTkcvOCk7CisJY2hpcF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24pLCBCSVRTX1BFUl9MT05HLzgpOworCisJLyogQWxsb2NhdGUgZmJfaW5mbyBhbmQgKioqX3BhciBoZXJlLCBhbHNvIGluY2x1ZGluZyBzb21lIG90aGVyIG5lZWRlZAorCSAqIHZhcmlhYmxlcworCSovCisJdmlhZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2ModmlhZmJfcGFyX2xlbmd0aCArIDIgKiBsdmRzX2xlbmd0aCArCisJdG1kc19sZW5ndGggKyBjcnRfbGVuZ3RoICsgY2hpcF9sZW5ndGgsIE5VTEwpOworCWlmICghdmlhZmJpbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2aWFmYl9pbmZvLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZpYXBhcmluZm8gPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYWZiaW5mby0+cGFyOworCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvID0gKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8gKyB2aWFmYl9wYXJfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICopCisJCSgodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mbyArIHRtZHNfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIgPSAoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8gKyBsdmRzX2xlbmd0aCk7CisJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiArIGx2ZHNfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8gPSAoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8gKyBjcnRfbGVuZ3RoKTsKKworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQl2aWFmYl9TQU1NX09OID0gMTsKKwlwYXJzZV9hY3RpdmVfZGV2KCk7CisJcGFyc2VfdmlkZW9fZGV2KCk7CisJcGFyc2VfbGNkX3BvcnQoKTsKKwlwYXJzZV9kdmlfcG9ydCgpOworCisJLyogZm9yIGR1YWwtZmIgbXVzdCB2aWFmYl9TQU1NX09OPTEgYW5kIHZpYWZiX2R1YWxfZmI9MSAqLworCWlmICghdmlhZmJfU0FNTV9PTikKKwkJdmlhZmJfZHVhbF9mYiA9IDA7CisKKwkvKiBTZXQgdXAgSTJDIGJ1cyBzdHVmZiAqLworCXZpYWZiX2NyZWF0ZV9pMmNfYnVzKHZpYXBhcmluZm8pOworCisJdmlhZmJfaW5pdF9jaGlwX2luZm8oKTsKKwl2aWFmYl9nZXRfZmJfaW5mbygmdmlhcGFyaW5mby0+ZmJtZW0sICZ2aWFwYXJpbmZvLT5tZW1zaXplKTsKKwl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID0gdmlhcGFyaW5mby0+bWVtc2l6ZTsKKwl2aWFwYXJpbmZvLT5mYm1lbV91c2VkID0gMDsKKwl2aWFwYXJpbmZvLT5mYm1lbV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPmZibWVtLAorCQl2aWFwYXJpbmZvLT5tZW1zaXplKTsKKwl2aWFmYmluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWFwYXJpbmZvLT5mYm1lbV92aXJ0OworCisJaWYgKCF2aWFwYXJpbmZvLT5mYm1lbV92aXJ0KSB7CisJCXByaW50ayhLRVJOX0lORk8gImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZpYWZiX2dldF9tbWlvX2luZm8oJnZpYXBhcmluZm8tPm1taW9fYmFzZSwgJnZpYXBhcmluZm8tPm1taW9fbGVuKTsKKwl2aWFwYXJpbmZvLT5pb192aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPm1taW9fYmFzZSwKKwkJdmlhcGFyaW5mby0+bW1pb19sZW4pOworCisJdmlhZmJpbmZvLT5ub2RlID0gMDsKKwl2aWFmYmluZm8tPmZib3BzID0gJnZpYWZiX29wczsKKwl2aWFmYmluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOOworCisJdmlhZmJpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBzZXVkb19wYWw7CisJaWYgKHZpYWZiX2FjY2VsKSB7CisJCXZpYWZiX2luaXRfYWNjZWwoKTsKKwkJdmlhZmJfaW5pdF8yZF9lbmdpbmUoKTsKKwkJdmlhZmJfaHdfY3Vyc29yX2luaXQoKTsKKwl9CisKKwlpZiAodmlhZmJfc2Vjb25kX3NpemUgJiYgKHZpYWZiX3NlY29uZF9zaXplIDwgOCkpIHsKKwkJdmlhZmJfc2Vjb25kX29mZnNldCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLQorCQkJdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwl9IGVsc2UgeworCQl2aWFmYl9zZWNvbmRfc2l6ZSA9IDg7CisJCXZpYWZiX3NlY29uZF9vZmZzZXQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC0KKwkJCXZpYWZiX3NlY29uZF9zaXplICogMTAyNCAqIDEwMjQ7CisJfQorCisJdmlhZmJfRkJfTU0gPSB2aWFwYXJpbmZvLT5mYm1lbV92aXJ0OworCXRtcG0gPSB2aWFmYl9tb2RlOworCXRtcGMgPSBzdHJzZXAoJnRtcG0sICJ4Iik7CisJc3RyaWN0X3N0cnRvdWwodG1wYywgMCwgKHVuc2lnbmVkIGxvbmcgKikmZGVmYXVsdF94cmVzKTsKKwlzdHJpY3Rfc3RydG91bCh0bXBtLCAwLCAodW5zaWduZWQgbG9uZyAqKSZkZWZhdWx0X3lyZXMpOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcywgMCk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiMC0+aW5kZXg9JWRcbiIsIHZtb2RlX2luZGV4KTsKKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKHN0cmNtcCh2aWFmYl9tb2RlLCB2aWFmYl9tb2RlMSkpIHsKKwkJCXRtcG1fc2VjID0gdmlhZmJfbW9kZTE7CisJCQl0bXBjX3NlYyA9IHN0cnNlcCgmdG1wbV9zZWMsICJ4Iik7CisJCQlzdHJpY3Rfc3RydG91bCh0bXBjX3NlYywgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeHJlcyk7CisJCQlzdHJpY3Rfc3RydG91bCh0bXBtX3NlYywgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeXJlcyk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGRlZmF1bHRfeHJlczsKKwkJCXZpYWZiX3NlY29uZF95cmVzID0gZGVmYXVsdF95cmVzOworCQl9CisJCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMpIHsKKwkJCXN3aXRjaCAodmlhZmJfc2Vjb25kX3hyZXMpIHsKKwkJCWNhc2UgMTQwMDoKKwkJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzID0gMTQwODsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXMpCisJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7CisJfQorCisJc3dpdGNoICh2aWFmYl9icHApIHsKKwljYXNlIDAgLi4uIDg6CisJCXZpYWZiX2JwcCA9IDg7CisJCWJyZWFrOworCWNhc2UgOSAuLi4gMTY6CisJCXZpYWZiX2JwcCA9IDE2OworCQlicmVhazsKKwljYXNlIDE3IC4uLiAzMjoKKwkJdmlhZmJfYnBwID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpYWZiX2JwcCA9IDg7CisJfQorCWRlZmF1bHRfdmFyLnhyZXMgPSBkZWZhdWx0X3hyZXM7CisJZGVmYXVsdF92YXIueXJlcyA9IGRlZmF1bHRfeXJlczsKKwlzd2l0Y2ggKGRlZmF1bHRfeHJlcykgeworCWNhc2UgMTQwMDoKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gMTQwODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gZGVmYXVsdF94cmVzOworCQlicmVhazsKKwl9CisJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gZGVmYXVsdF95cmVzOworCWRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID0gdmlhZmJfYnBwOworCWlmIChkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9PSAxNSkKKwkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSAxNjsKKwlkZWZhdWx0X3Zhci5waXhjbG9jayA9CisJICAgIHZpYWZiX2dldF9waXhjbG9jayhkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcywgdmlhZmJfcmVmcmVzaCk7CisJZGVmYXVsdF92YXIubGVmdF9tYXJnaW4gPSAoZGVmYXVsdF94cmVzID4+IDMpICYgMHhmODsKKwlkZWZhdWx0X3Zhci5yaWdodF9tYXJnaW4gPSAzMjsKKwlkZWZhdWx0X3Zhci51cHBlcl9tYXJnaW4gPSAxNjsKKwlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OworCWRlZmF1bHRfdmFyLmhzeW5jX2xlbiA9IGRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luOworCWRlZmF1bHRfdmFyLnZzeW5jX2xlbiA9IDQ7CisJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgPSAwOworCisJaWYgKHZpYWZiX2FjY2VsKSB7CisJCXZpYWZiaW5mby0+ZmxhZ3MgfD0KKwkJICAgIChGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKKwkJICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQpOworCQlkZWZhdWx0X3Zhci5hY2NlbF9mbGFncyB8PSBGQl9BQ0NFTEZfVEVYVDsKKwl9IGVsc2UKKwkJdmlhZmJpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKworCWlmICh2aWFmYl9kdWFsX2ZiKSB7CisJCXZpYWZiaW5mbzEgPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoLCBOVUxMKTsKKwkJaWYgKCF2aWFmYmluZm8xKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhbGxvY2F0ZSB0aGUgc2Vjb25kIGZyYW1lYnVmZmVyIHN0cnVjdCBlcnJvclxuIik7CisJCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl2aWFwYXJpbmZvMSA9IHZpYWZiaW5mbzEtPnBhcjsKKwkJbWVtY3B5KHZpYXBhcmluZm8xLCB2aWFwYXJpbmZvLCB2aWFmYl9wYXJfbGVuZ3RoKTsKKwkJdmlhcGFyaW5mbzEtPm1lbXNpemUgPSB2aWFwYXJpbmZvLT5tZW1zaXplIC0KKwkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCXZpYXBhcmluZm8tPm1lbXNpemUgPSB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdmlydCA9IHZpYXBhcmluZm8tPmZibWVtX3ZpcnQgKworCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJdmlhcGFyaW5mbzEtPmZibWVtID0gdmlhcGFyaW5mby0+ZmJtZW0gKyB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCisJCXZpYXBhcmluZm8xLT5mYm1lbV91c2VkID0gdmlhcGFyaW5mby0+ZmJtZW1fdXNlZDsKKwkJdmlhcGFyaW5mbzEtPmZibWVtX2ZyZWUgPSB2aWFwYXJpbmZvMS0+bWVtc2l6ZSAtCisJCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdXNlZDsKKwkJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSA9IHZpYXBhcmluZm8tPm1lbXNpemU7CisJCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgPSAwOworCQlpZiAodmlhZmJfYWNjZWwpIHsKKwkJCXZpYXBhcmluZm8xLT5jdXJzb3Jfc3RhcnQgPQorCQkJICAgIHZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCAtIHZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCQl2aWFwYXJpbmZvMS0+VlFfc3RhcnQgPSB2aWFwYXJpbmZvLT5WUV9zdGFydCAtCisJCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJCXZpYXBhcmluZm8xLT5WUV9lbmQgPSB2aWFwYXJpbmZvLT5WUV9lbmQgLQorCQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCX0KKworCQltZW1jcHkodmlhZmJpbmZvMSwgdmlhZmJpbmZvLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKKwkJdmlhZmJpbmZvMS0+c2NyZWVuX2Jhc2UgPSB2aWFmYmluZm8tPnNjcmVlbl9iYXNlICsKKwkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCXZpYWZiaW5mbzEtPmZpeC5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mbzEtPmZibWVtOworCQl2aWFmYmluZm8xLT5maXguc21lbV9sZW4gPSB2aWFwYXJpbmZvMS0+ZmJtZW1fZnJlZTsKKworCQlkZWZhdWx0X3Zhci54cmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJCWRlZmF1bHRfdmFyLnlyZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKKwkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKKwkJaWYgKHZpYWZiX2JwcDEgIT0gdmlhZmJfYnBwKQorCQkJdmlhZmJfYnBwMSA9IHZpYWZiX2JwcDsKKwkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHAxOworCQlkZWZhdWx0X3Zhci5waXhjbG9jayA9CisJCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2sodmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLAorCQkgICAgdmlhZmJfcmVmcmVzaCk7CisJCWRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luID0gKHZpYWZiX3NlY29uZF94cmVzID4+IDMpICYgMHhmODsKKwkJZGVmYXVsdF92YXIucmlnaHRfbWFyZ2luID0gMzI7CisJCWRlZmF1bHRfdmFyLnVwcGVyX21hcmdpbiA9IDE2OworCQlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OworCQlkZWZhdWx0X3Zhci5oc3luY19sZW4gPSBkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbjsKKwkJZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKworCQl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8xLT5maXgsIHZpYXBhcmluZm8xKTsKKwkJdmlhZmJfY2hlY2tfdmFyKCZkZWZhdWx0X3ZhciwgdmlhZmJpbmZvMSk7CisJCXZpYWZiaW5mbzEtPnZhciA9IGRlZmF1bHRfdmFyOworCQl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKHZpYWZiaW5mbyk7CisJCXZpYWZiX3VwZGF0ZV9maXgoJnZpYWZiaW5mbzEtPmZpeCwgdmlhZmJpbmZvMSk7CisJfQorCisJdmlhZmJfc2V0dXBfZml4aW5mbygmdmlhZmJpbmZvLT5maXgsIHZpYXBhcmluZm8pOworCXZpYWZiX2NoZWNrX3ZhcigmZGVmYXVsdF92YXIsIHZpYWZiaW5mbyk7CisJdmlhZmJpbmZvLT52YXIgPSBkZWZhdWx0X3ZhcjsKKwl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKHZpYWZiaW5mbyk7CisJdmlhZmJfdXBkYXRlX2ZpeCgmdmlhZmJpbmZvLT5maXgsIHZpYWZiaW5mbyk7CisJZGVmYXVsdF92YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJfYWxsb2NfY21hcCgmdmlhZmJpbmZvLT5jbWFwLCAyNTYsIDApOworCisJaWYgKHZpYWZiX2R1YWxfZmIgJiYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IExDRF9EZXZpY2UpCisJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikpIHsKKwkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIodmlhZmJpbmZvKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZpYWZiX2R1YWxfZmIgJiYgKCh2aWFmYl9wcmltYXJ5X2RldiAhPSBMQ0RfRGV2aWNlKQorCQkJfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPQorCQkJVU5JQ0hST01FX0NMRTI2NikpKSB7CisJCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8xKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSAlZHglZC0lZGJwcFxuIiwKKwkJICB2aWFmYmluZm8tPm5vZGUsIHZpYWZiaW5mby0+Zml4LmlkLCBkZWZhdWx0X3Zhci54cmVzLAorCQkgIGRlZmF1bHRfdmFyLnlyZXMsIGRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsKTsKKworCXZpYWZiX2luaXRfcHJvYyh2aWFwYXJpbmZvLT5wcm9jX2VudHJ5KTsKKwl2aWFmYl9pbml0X2RhYyhJR0EyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHZpYV9wY2lfcmVtb3ZlKHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhX3BjaV9yZW1vdmUhXG4iKTsKKwlmYl9kZWFsbG9jX2NtYXAoJnZpYWZiaW5mby0+Y21hcCk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8pOworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpOworCWlvdW5tYXAoKHZvaWQgKil2aWFwYXJpbmZvLT5mYm1lbV92aXJ0KTsKKwlpb3VubWFwKHZpYXBhcmluZm8tPmlvX3ZpcnQpOworCisJdmlhZmJfZGVsZXRlX2kyY19idXNzKHZpYXBhcmluZm8pOworCisJZnJhbWVidWZmZXJfcmVsZWFzZSh2aWFmYmluZm8pOworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbzEpOworCisJdmlhZmJfcmVtb3ZlX3Byb2ModmlhcGFyaW5mby0+cHJvY19lbnRyeSk7Cit9CisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgaW50IF9faW5pdCB2aWFmYl9zZXR1cChjaGFyICpvcHRpb25zKQoreworCWNoYXIgKnRoaXNfb3B0OworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldHVwIVxuIik7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9tb2RlMT0iLCAxMikpCisJCQl2aWFmYl9tb2RlMSA9IGtzdHJkdXAodGhpc19vcHQgKyAxMiwgR0ZQX0tFUk5FTCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbW9kZT0iLCAxMSkpCisJCQl2aWFmYl9tb2RlID0ga3N0cmR1cCh0aGlzX29wdCArIDExLCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9icHAxPSIsIDExKSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTEsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfYnBwMSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfYnBwPSIsIDEwKSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTAsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfYnBwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9yZWZyZXNoMT0iLCAxNSkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDE1LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3JlZnJlc2gxKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9yZWZyZXNoPSIsIDE0KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTQsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfcmVmcmVzaCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX2RzcF9tZXRob2Q9IiwgMjEpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyMSwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9sY2RfZHNwX21ldGhvZCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX3BhbmVsX2lkPSIsIDE5KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTksIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfbGNkX3BhbmVsX2lkKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9hY2NlbD0iLCAxMikpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDEyLCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2FjY2VsKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9TQU1NX09OPSIsIDE0KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTQsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfU0FNTV9PTik7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfYWN0aXZlX2Rldj0iLCAxNykpCisJCQl2aWFmYl9hY3RpdmVfZGV2ID0ga3N0cmR1cCh0aGlzX29wdCArIDE3LCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsCisJCQkidmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ9IiwgMzApKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAzMCwgMCwKKwkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0KTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9zZWNvbmRfc2l6ZT0iLCAxOCkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDE4LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF9zaXplKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsCisJCQkidmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk9IiwgMjQpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyNCwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LAorCQkJInZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U9IiwgMjYpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyNiwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9idXNfd2lkdGg9IiwgMTYpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNiwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9idXNfd2lkdGgpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9tb2RlPSIsIDE1KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTUsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfbGNkX21vZGUpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3ZpZGVvX2Rldj0iLCAxNikpCisJCQl2aWFmYl92aWRlb19kZXYgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTYsIEdGUF9LRVJORUwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9wb3J0PSIsIDE1KSkKKwkJCXZpYWZiX2xjZF9wb3J0ID0ga3N0cmR1cCh0aGlzX29wdCArIDE1LCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9kdmlfcG9ydD0iLCAxNSkpCisJCQl2aWFmYl9kdmlfcG9ydCA9IGtzdHJkdXAodGhpc19vcHQgKyAxNSwgR0ZQX0tFUk5FTCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHZpYWZiX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgTU9EVUxFCisJY2hhciAqb3B0aW9uID0gTlVMTDsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInZpYWZiIiwgJm9wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworCXZpYWZiX3NldHVwKG9wdGlvbik7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPCisgICAgICAgIlZJQSBHcmFwaGljcyBJbnRlcmdyYXRpb24gQ2hpcHNldCBmcmFtZWJ1ZmZlciAlZC4lZCBpbml0aWFsaXppbmdcbiIsCisJICAgICAgIFZFUlNJT05fTUFKT1IsIFZFUlNJT05fTUlOT1IpOworCXJldHVybiB2aWFfcGNpX3Byb2JlKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aWFmYl9leGl0KHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZXhpdCFcbiIpOworCXZpYV9wY2lfcmVtb3ZlKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHZpYWZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfb3BlbiA9IHZpYWZiX29wZW4sCisJLmZiX3JlbGVhc2UgPSB2aWFmYl9yZWxlYXNlLAorCS5mYl9jaGVja192YXIgPSB2aWFmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSB2aWFmYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcgPSB2aWFmYl9zZXRjb2xyZWcsCisJLmZiX3Bhbl9kaXNwbGF5ID0gdmlhZmJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gdmlhZmJfYmxhbmssCisJLmZiX2ZpbGxyZWN0ID0gdmlhZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gdmlhZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IHZpYWZiX2ltYWdlYmxpdCwKKwkuZmJfY3Vyc29yID0gdmlhZmJfY3Vyc29yLAorCS5mYl9pb2N0bCA9IHZpYWZiX2lvY3RsLAorCS5mYl9zeW5jID0gdmlhZmJfc3luYywKKwkuZmJfc2V0Y21hcCA9IHZpYWZiX3NldGNtYXAsCit9OworCittb2R1bGVfaW5pdCh2aWFmYl9pbml0KTsKK21vZHVsZV9leGl0KHZpYWZiX2V4aXQpOworCisjaWZkZWYgTU9EVUxFCittb2R1bGVfcGFyYW0odmlhZmJfbWVtc2l6ZSwgaW50LCAwKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfbW9kZSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9tb2RlMSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9tb2RlMSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9icHAsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcCwgIlNldCBjb2xvciBkZXB0aCAoZGVmYXVsdD0zMmJwcCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2JwcDEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcDEsICJTZXQgY29sb3IgZGVwdGggKGRlZmF1bHQ9MzJicHApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9yZWZyZXNoLAorCSJTZXQgQ1JUIHZpYWZiX3JlZnJlc2ggcmF0ZSAoZGVmYXVsdCA9IDYwKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfcmVmcmVzaDEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3JlZnJlc2gxLAorCSJTZXQgQ1JUIHJlZnJlc2ggcmF0ZSAoZGVmYXVsdCA9IDYwKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfbGNkX3BhbmVsX2lkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcGFuZWxfaWQsCisJIlNldCBGbGF0IFBhbmVsIHR5cGUoRGVmYXVsdD0xMDI0eDc2OCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9kc3BfbWV0aG9kLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfZHNwX21ldGhvZCwKKwkiU2V0IEZsYXQgUGFuZWwgZGlzcGxheSBzY2FsaW5nIG1ldGhvZC4oRGVmYXVsdD1FeHBhbmRzaW9uKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfU0FNTV9PTiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfU0FNTV9PTiwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBTQU1NKERlZmF1bHQ9T0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfYWNjZWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2FjY2VsLAorCSJTZXQgMkQgSGFyZHdhcmUgQWNjZWxlcmF0aW9uLihEZWZhdWx0ID0gT0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfYWN0aXZlX2RldiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9hY3RpdmVfZGV2LCAiU3BlY2lmeSBhY3RpdmUgZGV2aWNlcy4iKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwKKwkiRGlzcGxheSBIYXJkd2FyZSBMYXlvdXQgKExDRCBPbmx5LCBEVkkgT25seS4uLixldGMpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9zZWNvbmRfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfc2Vjb25kX3NpemUsCisJIlNldCBzZWNvbmRhcnkgZGV2aWNlIG1lbW9yeSBzaXplIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9kdWFsX2ZiLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kdWFsX2ZiLAorCSJUdXJuIG9uL29mZiBmbGFnIG9mIGR1YWwgZnJhbWVidWZmZXIgZGV2aWNlcy4oRGVmYXVsdCA9IE9GRikiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBEVkkgZGV2aWNlcyBvbiBFUElBIGJvYXJkLihEZWZhdWx0ID0gT0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBkdWFsIGVkZ2UgcGFuZWwuKERlZmF1bHQgPSBPRkYpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9idXNfd2lkdGgsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2J1c193aWR0aCwKKwkiU2V0IGJ1cyB3aWR0aCBvZiBwYW5lbC4oRGVmYXVsdCA9IDEyKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfbGNkX21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9tb2RlLAorCSJTZXQgRmxhdCBQYW5lbCBtb2RlKERlZmF1bHQ9T1BFTkxESSkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3ZpZGVvX2RldiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl92aWRlb19kZXYsICJTcGVjaWZ5IHZpZGVvIGRldmljZXMuIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcG9ydCwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcG9ydCwgIlNwZWNpZnkgTENEIG91dHB1dCBwb3J0LiIpOworCittb2R1bGVfcGFyYW0odmlhZmJfZHZpX3BvcnQsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfZHZpX3BvcnQsICJTcGVjaWZ5IERWSSBvdXRwdXQgcG9ydC4iKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE1OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1ZJQUZCREVWX0hfXworI2RlZmluZSBfX1ZJQUZCREVWX0hfXworCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAiY2hpcC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAidmlhX2kyYy5oIgorCisjZGVmaW5lIFZFUlNJT05fTUFKT1IgICAgICAgMgorI2RlZmluZSBWRVJTSU9OX0tFUk5FTCAgICAgIDYJLyogRm9yIGtlcm5lbCAyLjYgKi8KKworI2RlZmluZSBWRVJTSU9OX09TICAgICAgICAgIDAJLyogMDogZm9yIDMyIGJpdHMgT1MsIDE6IGZvciA2NCBiaXRzIE9TICovCisjZGVmaW5lIFZFUlNJT05fTUlOT1IgICAgICAgNAorCitzdHJ1Y3QgdmlhZmJfcGFyIHsKKwlpbnQgYnBwOworCWludCBocmVzOworCWludCB2cmVzOworCWludCBsaW5lbGVuZ3RoOworCXUzMiB4b2Zmc2V0OworCXUzMiB5b2Zmc2V0OworCisJdm9pZCBfX2lvbWVtICpmYm1lbV92aXJ0OwkvKmZyYW1lYnVmZmVyIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmlvX3ZpcnQ7CS8qaW9zcGFjZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IGZibWVtOwkvKmZyYW1lYnVmZmVyIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG1lbXNpemU7CS8qc2l6ZSBvZiBmYm1lbSAqLworCXVuc2lnbmVkIGludCBpbzsJLyppbyBzcGFjZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2U7CS8qbW1pbyBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1taW9fbGVuOwkvKm1taW8gYmFzZSBsZW5ndGggKi8KKwl1MzIgZmJtZW1fZnJlZTsJCS8qIEZyZWUgRkIgbWVtb3J5ICovCisJdTMyIGZibWVtX3VzZWQ7CQkvKiBVc2UgRkIgbWVtb3J5IHNpemUgKi8KKwl1MzIgY3Vyc29yX3N0YXJ0OwkvKiBDdXJzb3IgU3RhcnQgQWRkcmVzcyAqLworCXUzMiBWUV9zdGFydDsJCS8qIFZpcnR1YWwgUXVldWUgU3RhcnQgQWRkcmVzcyAqLworCXUzMiBWUV9lbmQ7CQkvKiBWaXJ0dWFsIFF1ZXVlIEVuZCBBZGRyZXNzICovCisJdTMyIGlnYV9wYXRoOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsJLyp2aWFmYiBwcm9jIGVudHJ5ICovCisJdTggZHVvdmlldzsJCS8qSXMgd29ya2luZyBpbiBkdW92aWV3IG1vZGU/ICovCisKKwkvKiBJMkMgc3R1ZmYgKi8KKwlzdHJ1Y3QgdmlhX2kyY19zdHVmZiBpMmNfc3R1ZmY7CisKKwkvKiBBbGwgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgbmVlZGVkIHRvIHNldCBlbmdpbmUgKi8KKwlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKmNydF9zZXR0aW5nX2luZm87CisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm87CisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm8yOworCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uICpjaGlwX2luZm87CisKKwkvKiBzb21lIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdmlkZW8gcGxheWluZyAqLworCWludCB2aWRlb19vbl9jcnQ7CisJaW50IHZpZGVvX29uX2R2aTsKKwlpbnQgdmlkZW9fb25fbGNkOworCit9Oworc3RydWN0IHZpYWZiX21vZGVpbmZvIHsKKwl1MzIgeHJlczsKKwl1MzIgeXJlczsKKwlpbnQgbW9kZV9pbmRleDsKKwljaGFyICptb2RlX3JlczsKK307CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitleHRlcm4gaW50IHZpYWZiX3NlY29uZF9zaXplOworZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOworZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOworZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKK2V4dGVybiBpbnQgdmlhZmJfYWNjZWw7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CitleHRlcm4gaW50IHZpYWZiX21lbXNpemU7CisKK2V4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLAorCXVuc2lnbmVkIGxvbmcgKnJlcyk7CisKK3ZvaWQgdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3ZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAorCQkJICBpbnQgbW9kZV9pbmRleCk7CitpbnQgdmlhZmJfZ2V0X21vZGVfaW5kZXgoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgZmxhZyk7Cit1OCB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHMoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkqcGx2ZHNfY2hpcF9pbmZvLCB1OCBpbmRleCk7Cit2b2lkIHZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgICAgICAqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkgICAgICAqcGx2ZHNfY2hpcF9pbmZvLCBzdHJ1Y3QgSU9EQVRBIGlvX2RhdGEpOworI2VuZGlmIC8qIF9fVklBRkJERVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjZjU4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwpAQCAtMCwwICsxLDEwODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKK3N0cnVjdCByZXNfbWFwX3JlZnJlc2ggcmVzX21hcF9yZWZyZXNoX3RibFtdID0geworLypocmVzLCB2cmVzLCB2Y2xvY2ssIHZtb2RlX3JlZnJlc2gqLworCXs0ODAsIDY0MCwgUkVTXzQ4MFg2NDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfODVIWl9QSVhDTE9DSywgODV9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfMTAwSFpfUElYQ0xPQ0ssIDEwMH0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF8xMjBIWl9QSVhDTE9DSywgMTIwfSwKKwl7NzIwLCA0ODAsIFJFU183MjBYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7NzIwLCA1NzYsIFJFU183MjBYNTc2XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA0ODAsIFJFU184MDBYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzg1SFpfUElYQ0xPQ0ssIDg1fSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzEwMEhaX1BJWENMT0NLLCAxMDB9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfMTIwSFpfUElYQ0xPQ0ssIDEyMH0sCisJezg0OCwgNDgwLCBSRVNfODQ4WDQ4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezg1NiwgNDgwLCBSRVNfODU2WDQ4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDUxMiwgUkVTXzEwMjRYNTEyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAyNCwgNjAwLCBSRVNfMTAyNFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDI0LCA3NjgsIFJFU18xMDI0WDc2OF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDc2OCwgUkVTXzEwMjRYNzY4Xzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTAyNCwgNzY4LCBSRVNfMTAyNFg3NjhfODVIWl9QSVhDTE9DSywgODV9LAorCXsxMDI0LCA3NjgsIFJFU18xMDI0WDc2OF8xMDBIWl9QSVhDTE9DSywgMTAwfSwKKy8qICB7MTE1Miw4NjQsIFJFU18xMTUyWDg2NF83MEhaX1BJWENMT0NLLCAgNzB9LCovCisJezExNTIsIDg2NCwgUkVTXzExNTJYODY0Xzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTI4MCwgNzY4LCBSRVNfMTI4MFg3NjhfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjgwLCA4MDAsIFJFU18xMjgwWDgwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDk2MCwgUkVTXzEyODBYOTYwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgMTAyNCwgUkVTXzEyODBYMTAyNF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDEwMjQsIFJFU18xMjgwWDEwMjRfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMjgwLCAxMDI0LCBSRVNfMTI4MFg3NjhfODVIWl9QSVhDTE9DSywgODV9LAorCXsxNDQwLCAxMDUwLCBSRVNfMTQ0MFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTYwMCwgMTIwMCwgUkVTXzE2MDBYMTIwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE2MDAsIDEyMDAsIFJFU18xNjAwWDEyMDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMjgwLCA3MjAsIFJFU18xMjgwWDcyMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE5MjAsIDEwODAsIFJFU18xOTIwWDEwODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNDAwLCAxMDUwLCBSRVNfMTQwMFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTQwMCwgMTA1MCwgUkVTXzE0MDBYMTA1MF83NUhaX1BJWENMT0NLLCA3NX0sCisJezEzNjgsIDc2OCwgUkVTXzEzNjhYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7OTYwLCA2MDAsIFJFU185NjBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAwMCwgNjAwLCBSRVNfMTAwMFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDI0LCA1NzYsIFJFU18xMDI0WDU3Nl82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwODgsIDYxMiwgUkVTXzEwODhYNjEyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTE1MiwgNzIwLCBSRVNfMTE1Mlg3MjBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjAwLCA3MjAsIFJFU18xMjAwWDcyMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDYwMCwgUkVTXzEyODBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgNzIwLCBSRVNfMTI4MFg3MjBfNTBIWl9QSVhDTE9DSywgNTB9LAorCXsxMjgwLCA3NjgsIFJFU18xMjgwWDc2OF81MEhaX1BJWENMT0NLLCA1MH0sCisJezEzNjAsIDc2OCwgUkVTXzEzNjBYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTM2NiwgNzY4LCBSRVNfMTM2Nlg3NjhfNTBIWl9QSVhDTE9DSywgNTB9LAorCXsxMzY2LCA3NjgsIFJFU18xMzY2WDc2OF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE0NDAsIDkwMCwgUkVTXzE0NDBYOTAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTQ0MCwgOTAwLCBSRVNfMTQ0MFg5MDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxNjAwLCA5MDAsIFJFU18xNjAwWDkwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE2MDAsIDEwMjQsIFJFU18xNjAwWDEwMjRfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNjgwLCAxMDUwLCBSRVNfMTY4MFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTY4MCwgMTA1MCwgUkVTXzE2ODBYMTA1MF83NUhaX1BJWENMT0NLLCA3NX0sCisJezE3OTIsIDEzNDQsIFJFU18xNzkyWDEzNDRfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxODU2LCAxMzkyLCBSRVNfMTg1NlgxMzkyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTkyMCwgMTIwMCwgUkVTXzE5MjBYMTIwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE5MjAsIDE0NDAsIFJFU18xOTIwWDE0NDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxOTIwLCAxNDQwLCBSRVNfMTkyMFgxNDQwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MjA0OCwgMTUzNiwgUkVTXzIwNDhYMTUzNl82MEhaX1BJWENMT0NLLCA2MH0KK307CisKK3N0cnVjdCBpb19yZWcgQ040MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKK3tWSUFTUiwgU1IxRSwgMHgwRiwgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCit7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAgICAgICAgICAgICovCit7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTEgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAgICAgICAgICAgICovCit7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDY5fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QywgMHhGRiwgMHg1N30sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDEgICAgICAgICovCit7VklBQ1IsIENSOEQsIDB4RkYsIDB4MDB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICAgICAgICAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDdCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RiwgMHhGRiwgMHgwM30sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDQgICAgICAgICovCit7VklBQ1IsIENSOTAsIDB4RkYsIDB4MzB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICAgICAgICAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweEEwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0KK307CisKKy8qIFZpZGVvIE1vZGUgVGFibGUgZm9yIFZUMzMxNCBjaGlwc2V0Ki8KKy8qIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCitzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1tdID0geyB7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAore1ZJQVNSLCBTUjE1LCAweDAyLCAweDAyfSwKK3tWSUFTUiwgU1IxNiwgMHhCRiwgMHgwOH0sCit7VklBU1IsIFNSMTcsIDB4RkYsIDB4MUZ9LAore1ZJQVNSLCBTUjE4LCAweEZGLCAweDRFfSwKK3tWSUFTUiwgU1IxQSwgMHhGQiwgMHg4Mn0sCit7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAore1ZJQVNSLCBTUjFGLCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMjIsIDB4RkYsIDB4MUZ9LAore1ZJQVNSLCBTUjJBLCAweDBGLCAweDAwfSwKK3tWSUFTUiwgU1IyRSwgMHhGRiwgMHhGRn0sCit7VklBU1IsIFNSM0YsIDB4RkYsIDB4RkZ9LAore1ZJQVNSLCBTUjQwLCAweEY3LCAweDAwfSwKK3tWSUFTUiwgQ1IzMCwgMHhGRiwgMHgwNH0sCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweDdGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweEZGLCAweDMxfSwKK3tWSUFDUiwgQ1I0MSwgMHhGRiwgMHg4MH0sCit7VklBQ1IsIENSNDIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKK3tWSUFDUiwgQ1I1RCwgMHg4MCwgMHgwMH0sCS8qSG9yaXpvbnRhbCBSZXRyYWNlIFN0YXJ0IGJpdFsxMV0gc2hvdWxkIGJlIDAqLwore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICovCit7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZELCAweDQwfSwKK3tWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjc3LCAweEZGLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCit7VklBQ1IsIENSNzgsIDB4RkYsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KK3tWSUFDUiwgQ1I3OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBzY2FsaW5nIEZhY3RvciAqLwore1ZJQUNSLCBDUjlGLCAweDAzLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAqLwore1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAqLwore1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgKi8KK3tWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICovCit7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDVEfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAqLwore1ZJQUNSLCBDUjhELCAweEZGLCAweDZGfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAqLwore1ZJQUNSLCBDUjkwLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweEEwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOUQsIDB4RkYsIDB4ODB9LAore1ZJQUNSLCBDUjlFLCAweEZGLCAweDgwfQorfTsKKworc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbXSA9IHsKKwl7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAkvKiBVbmxvY2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjE2LCAweEZGLCAweDA4fSwJLyogRGlzcGxheSBGSUZPIHRocmVzaG9sZCBDb250cm9sICAqLworCXtWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCS8qIERpc3BsYXkgRklGTyBDb250cm9sICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAkvKiBHRlggUFJFUSB0aHJlc2hvbGQgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjFBLCAweEZGLCAweDBhfSwJLyogR0ZYIFBSRVEgdGhyZXNob2xkICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1IxRiwgMHhGRiwgMHgwMH0sCS8qIE1lbW9yeSBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMCAgICAgICovCisJe1ZJQVNSLCBTUjFFLCAweEZGLCAweDAxfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sICAgICAgICAqLworCXtWSUFTUiwgU1IyMCwgMHhGRiwgMHgwMH0sCS8qIFNlcXVlbmNlciBBcmJpdGVyIENvbnRyb2wgMCAgICAgKi8KKwl7VklBU1IsIFNSMjEsIDB4RkYsIDB4MDB9LAkvKiBTZXF1ZW5jZXIgQXJiaXRlciBDb250cm9sIDEgICAgICovCisJe1ZJQVNSLCBTUjIyLCAweEZGLCAweDFGfSwJLyogRGlzcGxheSBBcmJpdGVyIENvbnRyb2wgMSAgICAgICAqLworCXtWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCA1ICAgICAgKi8KKwl7VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMSAgICAgICovCisJe1ZJQVNSLCBTUjJFLCAweEZGLCAweEZGfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIDIgICAgICAqLworCXtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAqLworCXtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAorCXtWSUFDUiwgQ1I1NSwgMHg4MCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwKKwl7VklBQ1IsIENSMzYsIDB4RkYsIDB4MDF9LAkvKiBQb3dlciBNYW5nZW1lbnQgMyAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLworCXtWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KKwl7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCisJe1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2QSwgMHgyMCwgMHgyMH0sCS8qIEV4dGVuZGVkIEZJRk8gT24gICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4QiwgMHhGRiwgMHgyRH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDAgICAgICAgKi8KKwl7VklBQ1IsIENSOEMsIDB4RkYsIDB4MkR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAxICAgICAgICovCisJe1ZJQUNSLCBDUjhELCAweEZGLCAweEM4fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAgICAgICAqLworCXtWSUFDUiwgQ1I4RSwgMHhGRiwgMHgzNn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDMgICAgICAgKi8KKwl7VklBQ1IsIENSOEYsIDB4RkYsIDB4MDB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA0ICAgICAgICovCisJe1ZJQUNSLCBDUjkwLCAweEZGLCAweDEwfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAgICAgICAqLworCXtWSUFDUiwgQ1I5MSwgMHhGRiwgMHhBMH0sCS8qIDI0LzEyIGJpdCBMVkRTIERhdGEgb2ZmICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSOTYsIDB4RkYsIDB4MDN9LAkvKiBEVlAwICAgICAgICA7IERWUDAgQ2xvY2sgU2tldyAqLworCXtWSUFDUiwgQ1I5NywgMHhGRiwgMHgwM30sCS8qIERGUCBoaWdoICAgIDsgREZQSCBDbG9jayBTa2V3ICovCisJe1ZJQUNSLCBDUjk5LCAweEZGLCAweDAzfSwJLyogREZQIGxvdyAgICAgICAgICAgOyBERlBMIENsb2NrIFNrZXcqLworCXtWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwN30JLyogRFZJIG9uIERWUDEgICAgICAgOyBEVlAxIENsb2NrIFNrZXcqLworfTsKKworLyogRm9yIFZUMzMyNDogQ29tbW9uIFNldHRpbmcgZm9yIFZpZGVvIE1vZGUgKi8KK3N0cnVjdCBpb19yZWcgQ1g3MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKK3tWSUFTUiwgU1IxQiwgMHhGRiwgMHhGMH0sCit7VklBU1IsIFNSMUUsIDB4RkYsIDB4MDF9LAore1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1IyRCwgMHhGRiwgMHhGRn0sCS8qIFZDSyBhbmQgTENLIFBMTCBwb3dlciBvbi4gICAgICAgICAgICovCit7VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCit7VklBQ1IsIENSNDcsIDB4QzgsIDB4MDB9LAkvKiBDbGVhciBWQ0sgUGx1cy4gKi8KK3tWSUFDUiwgQ1I2MiwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1JBMywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKK3tWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjdBLCAweEZGLCAweDAxfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAyICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0MsIDB4RkYsIDB4MDN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdELCAweEZGLCAweDA0fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDQgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA1ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0YsIDB4RkYsIDB4MEF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgwLCAweEZGLCAweDBEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDcgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA4ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODIsIDB4RkYsIDB4MTZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgzLCAweEZGLCAweDE5fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEwICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAgICAgICAgICAgICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTIgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg2LCAweEZGLCAweDFFfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEzICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAgICAgICAgICAgICovCit7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LAkvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwJLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSRDQsIDB4RkYsIDB4ODF9LAkvKiBTZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbCAgICAgICAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDVEfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QywgMHhGRiwgMHgyQn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDEgICAgICAgICovCit7VklBQ1IsIENSOEQsIDB4RkYsIDB4NkZ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICAgICAgICAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RiwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDQgICAgICAgICovCit7VklBQ1IsIENSOTAsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICAgICAgICAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweDgwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSRDIsIDB4RkYsIDB4RkZ9CS8qIFRNRFMvTFZEUyBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICovCit9OworCisvKiBGb3IgVlQzMzUzOiBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworc3RydWN0IGlvX3JlZyBWWDgwMF9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjEwLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCit7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAore1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKK3tWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCit7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAore1ZJQVNSLCBTUjFCLCAweEZGLCAweEYwfSwKK3tWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogVkNLIGFuZCBMQ0sgUExMIHBvd2VyIG9uLiAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKK3tWSUFDUiwgQ1I0NywgMHhDOCwgMHgwMH0sCS8qIENsZWFyIFZDSyBQbHVzLiAqLwore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUkEzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkEsIDB4RkYsIDB4NDB9LAore1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1JENCwgMHhGRiwgMHg4MX0sCS8qIFNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sICAgICAgICovCit7VklBQ1IsIENSOEIsIDB4RkYsIDB4NUR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICAgICAgICAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RCwgMHhGRiwgMHg2Rn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDIgICAgICAgICovCit7VklBQ1IsIENSOEUsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICAgICAgICAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAgICAgICAgKi8KK3tWSUFDUiwgQ1I5MCwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDUgICAgICAgICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4ODB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0JLyogVE1EUy9MVkRTIGNvbnRyb2wgcmVnaXN0ZXIuICAgICAgICAgKi8KK307CisKKy8qIFZpZGVvIE1vZGUgVGFibGUgKi8KKy8qIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCitzdHJ1Y3QgaW9fcmVnIENMRTI2Nl9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjFFLCAweEYwLCAweDAwfSwKK3tWSUFTUiwgU1IyQSwgMHgwRiwgMHgwMH0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKKwore1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHg4MH0sCit7VklBQ1IsIENSNkEsIDB4RkYsIDB4QzB9LAorCit7VklBQ1IsIENSNTUsIDB4ODAsIDB4MDB9LAore1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwKKwore1ZJQUdSLCBHUjIwLCAweEZGLCAweDAwfSwKK3tWSUFHUiwgR1IyMSwgMHhGRiwgMHgwMH0sCit7VklBR1IsIEdSMjIsIDB4RkYsIDB4MDB9LAorCS8qIExDRCBQYXJhbWV0ZXJzICovCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUGFyYW1ldGVyIDEgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sCS8qIExDRCBQYXJhbWV0ZXIgMiAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFBhcmFtZXRlciAzICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgUGFyYW1ldGVyIDQgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sCS8qIExDRCBQYXJhbWV0ZXIgNSAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFBhcmFtZXRlciA2ICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgUGFyYW1ldGVyIDcgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sCS8qIExDRCBQYXJhbWV0ZXIgOCAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFBhcmFtZXRlciA5ICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgUGFyYW1ldGVyIDEwICovCit7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgUGFyYW1ldGVyIDExICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgUGFyYW1ldGVyIDEyICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgUGFyYW1ldGVyIDEzICovCit7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgUGFyYW1ldGVyIDE0ICovCisKK307CisKKy8qIE1vZGU6MTAyNFg3NjggKi8KK3N0cnVjdCBpb19yZWcgUE0xMDI0eDc2OFtdID0geyB7VklBU1IsIDB4MTYsIDB4QkYsIDB4MEN9LAore1ZJQVNSLCAweDE4LCAweEZGLCAweDRDfQorfTsKKworc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVtdID0geworCXtWSUFfUkVTXzEwMjRYNzY4LCBBUlJBWV9TSVpFKFBNMTAyNHg3NjgpLCBQTTEwMjR4NzY4fQorfTsKKworLyogc3RydWN0IFZQSVRUYWJsZSB7CisJdW5zaWduZWQgY2hhciAgTWlzYzsKKwl1bnNpZ25lZCBjaGFyICBTUltTdGRTUl07CisJdW5zaWduZWQgY2hhciAgQ1JbU3RkQ1JdOworCXVuc2lnbmVkIGNoYXIgIEdSW1N0ZEdSXTsKKwl1bnNpZ25lZCBjaGFyICBBUltTdGRBUl07CisgfTsqLworCitzdHJ1Y3QgVlBJVFRhYmxlIFZQSVQgPSB7CisJLyogTXNpYyAqLworCTB4QzcsCisJLyogU2VxdWVuY2VyICovCisJezB4MDEsIDB4MEYsIDB4MDAsIDB4MEV9LAorCS8qIEdyYXBoaWMgQ29udHJvbGxlciAqLworCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDBGLCAweEZGfSwKKwkvKiBBdHRyaWJ1dGUgQ29udHJvbGxlciAqLworCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAweDAxLCAweDAwLCAweDBGLCAweDAwfQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTW9kZSBUYWJsZSAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKiA0ODB4NjQwICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTQ4MHg2NDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjVfMTc1TSwgTTQ4MFg2NDBfUjYwX0hTUCwgTTQ4MFg2NDBfUjYwX1ZTUCwKKwkgezYyNCwgNDgwLCA0ODAsIDE0NCwgNTA0LCA0OCwgNjYzLCA2NDAsIDY0MCwgMjMsIDY0MSwgM30gfQkvKiBHVEYqLworfTsKKworLyogNjQweDQ4MCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTY0MHg0ODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzI1XzE3NU0sIE02NDBYNDgwX1I2MF9IU1AsIE02NDBYNDgwX1I2MF9WU1AsCisJIHs4MDAsIDY0MCwgNjQ4LCAxNDQsIDY1NiwgOTYsIDUyNSwgNDgwLCA0ODAsIDQ1LCA0OTAsIDJ9IH0sCisJe1JFRlJFU0hfNzUsIENMS18zMV81MDBNLCBNNjQwWDQ4MF9SNzVfSFNQLCBNNjQwWDQ4MF9SNzVfVlNQLAorCSB7ODQwLCA2NDAsIDY0MCwgMjAwLCA2NTYsIDY0LCA1MDAsIDQ4MCwgNDgwLCAyMCwgNDgxLCAzfSB9LAorCXtSRUZSRVNIXzg1LCBDTEtfMzZfMDAwTSwgTTY0MFg0ODBfUjg1X0hTUCwgTTY0MFg0ODBfUjg1X1ZTUCwKKwkgezgzMiwgNjQwLCA2NDAsIDE5MiwgNjk2LCA1NiwgNTA5LCA0ODAsIDQ4MCwgMjksIDQ4MSwgM30gfSwKKwl7UkVGUkVTSF8xMDAsIENMS180M18xNjNNLCBNNjQwWDQ4MF9SMTAwX0hTUCwgTTY0MFg0ODBfUjEwMF9WU1AsCisJIHs4NDgsIDY0MCwgNjQwLCAyMDgsIDY4MCwgNjQsIDUwOSwgNDgwLCA0ODAsIDI5LCA0ODEsIDN9IH0sIC8qR1RGKi8KKwkgICAge1JFRlJFU0hfMTIwLCBDTEtfNTJfNDA2TSwgTTY0MFg0ODBfUjEyMF9IU1AsCisJICAgICBNNjQwWDQ4MF9SMTIwX1ZTUCwKKwkgICAgIHs4NDgsIDY0MCwgNjQwLCAyMDgsIDY4MCwgNjQsIDUxNSwgNDgwLCA0ODAsIDM1LCA0ODEsCisJICAgICAgM30gfSAvKkdURiovCit9OworCisvKjcyMHg0ODAgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NDgwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAgKi8KKwkvKkhULCBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjZfODgwTSwgTTcyMFg0ODBfUjYwX0hTUCwgTTcyMFg0ODBfUjYwX1ZTUCwKKwkgezg5NiwgNzIwLCA3MjAsIDE3NiwgNzM2LCA3MiwgNDk3LCA0ODAsIDQ4MCwgMTcsIDQ4MSwgM30gfQorCit9OworCisvKjcyMHg1NzYgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NTc2W10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18zMl82NjhNLCBNNzIwWDU3Nl9SNjBfSFNQLCBNNzIwWDU3Nl9SNjBfVlNQLAorCSB7OTEyLCA3MjAsIDcyMCwgMTkyLCA3NDQsIDcyLCA1OTcsIDU3NiwgNTc2LCAyMSwgNTc3LCAzfSB9Cit9OworCisvKiA4MDB4NDgwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg0ODBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjlfNTgxTSwgTTgwMFg0ODBfUjYwX0hTUCwgTTgwMFg0ODBfUjYwX1ZTUCwKKwkgezk5MiwgODAwLCA4MDAsIDE5MiwgODI0LCA3MiwgNTAwLCA0ODAsIDQ4MCwgMjAsIDQ4MywgN30gfQorfTsKKworLyogODAweDYwMCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg2MDBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgICAgICovCisJLypIVCwgICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNDBfMDAwTSwgTTgwMFg2MDBfUjYwX0hTUCwgTTgwMFg2MDBfUjYwX1ZTUCwKKwkgezEwNTYsIDgwMCwgODAwLCAyNTYsIDg0MCwgMTI4LCA2MjgsIDYwMCwgNjAwLCAyOCwgNjAxLCA0fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfNDlfNTAwTSwgTTgwMFg2MDBfUjc1X0hTUCwgTTgwMFg2MDBfUjc1X1ZTUCwKKwkgezEwNTYsIDgwMCwgODAwLCAyNTYsIDgxNiwgODAsIDYyNSwgNjAwLCA2MDAsIDI1LCA2MDEsIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS181Nl8yNTBNLCBNODAwWDYwMF9SODVfSFNQLCBNODAwWDYwMF9SODVfVlNQLAorCSB7MTA0OCwgODAwLCA4MDAsIDI0OCwgODMyLCA2NCwgNjMxLCA2MDAsIDYwMCwgMzEsIDYwMSwgM30gfSwKKwl7UkVGUkVTSF8xMDAsIENMS182OF8xNzlNLCBNODAwWDYwMF9SMTAwX0hTUCwgTTgwMFg2MDBfUjEwMF9WU1AsCisJIHsxMDcyLCA4MDAsIDgwMCwgMjcyLCA4NDgsIDg4LCA2MzYsIDYwMCwgNjAwLCAzNiwgNjAxLCAzfSB9LAorCXtSRUZSRVNIXzEyMCwgQ0xLXzgzXzk1ME0sIE04MDBYNjAwX1IxMjBfSFNQLAorCQkgIE04MDBYNjAwX1IxMjBfVlNQLAorCQkgIHsxMDg4LCA4MDAsIDgwMCwgMjg4LCA4NTYsIDg4LCA2NDMsIDYwMCwgNjAwLCA0MywgNjAxLAorCQkgICAzfSB9Cit9OworCisvKiA4NDh4NDgwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg0OHg0ODBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMzFfNTAwTSwgTTg0OFg0ODBfUjYwX0hTUCwgTTg0OFg0ODBfUjYwX1ZTUCwKKwkgezEwNTYsIDg0OCwgODQ4LCAyMDgsIDg3MiwgODAsIDUwMCwgNDgwLCA0ODAsIDIwLCA0ODMsIDV9IH0KK307CisKKy8qODU2eDQ4MCAoR1RGKSBjb252ZXJ0IHRvIDg1Mng0ODAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NTJ4NDgwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAqLworCS8qSFQsICAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzMxXzcyOE0sIE04NTJYNDgwX1I2MF9IU1AsIE04NTJYNDgwX1I2MF9WU1AsCisJezEwNjQsIDg1NiwgODU2LCAyMDgsIDg3MiwgODgsIDQ5NywgNDgwLCA0ODAsIDE3LCA0ODEsIDN9IH0KK307CisKKy8qMTAyNHg1MTIgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDUxMltdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgKi8KKwkvKkhULCAgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180MV8yOTFNLCBNMTAyNFg1MTJfUjYwX0hTUCwgTTEwMjRYNTEyX1I2MF9WU1AsCisJIHsxMjk2LCAxMDI0LCAxMDI0LCAyNzIsIDEwNTYsIDEwNCwgNTMxLCA1MTIsIDUxMiwgMTksIDUxMywgM30gfQorCit9OworCisvKiAxMDI0eDYwMCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NjAwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180OF84NzVNLCBNMTAyNFg2MDBfUjYwX0hTUCwgTTEwMjRYNjAwX1I2MF9WU1AsCisJIHsxMzEyLCAxMDI0LCAxMDI0LCAyODgsIDEwNjQsIDEwNCwgNjIyLCA2MDAsIDYwMCwgMjIsIDYwMSwgM30gfSwKK307CisKKy8qIDEwMjR4NzY4Ki8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg3NjhbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzY1XzAwME0sIE0xMDI0WDc2OF9SNjBfSFNQLCBNMTAyNFg3NjhfUjYwX1ZTUCwKKwl7MTM0NCwgMTAyNCwgMTAyNCwgMzIwLCAxMDQ4LCAxMzYsIDgwNiwgNzY4LCA3NjgsIDM4LCA3NzEsIDZ9IH0sCisJe1JFRlJFU0hfNzUsIENMS183OF83NTBNLCBNMTAyNFg3NjhfUjc1X0hTUCwgTTEwMjRYNzY4X1I3NV9WU1AsCisJezEzMTIsIDEwMjQsIDEwMjQsIDI4OCwgMTA0MCwgOTYsIDgwMCwgNzY4LCA3NjgsIDMyLCA3NjksIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS185NF81MDBNLCBNMTAyNFg3NjhfUjg1X0hTUCwgTTEwMjRYNzY4X1I4NV9WU1AsCisJezEzNzYsIDEwMjQsIDEwMjQsIDM1MiwgMTA3MiwgOTYsIDgwOCwgNzY4LCA3NjgsIDQwLCA3NjksIDN9IH0sCisJe1JFRlJFU0hfMTAwLCBDTEtfMTEzXzMwOU0sIE0xMDI0WDc2OF9SMTAwX0hTUCwgTTEwMjRYNzY4X1IxMDBfVlNQLAorCXsxMzkyLCAxMDI0LCAxMDI0LCAzNjgsIDEwOTYsIDExMiwgODE0LCA3NjgsIDc2OCwgNDYsIDc2OSwgM30gfQorfTsKKworLyogMTE1Mng4NjQqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDg2NFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNzUsIENMS18xMDhfMDAwTSwgTTExNTJYODY0X1I3NV9IU1AsIE0xMTUyWDg2NF9SNzVfVlNQLAorCSB7MTYwMCwgMTE1MiwgMTE1MiwgNDQ4LCAxMjE2LCAxMjgsIDkwMCwgODY0LCA4NjQsIDM2LCA4NjUsIDN9IH0KKworfTsKKworLyogMTI4MHg3MjAgKEhETUkgNzIwUCkqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDcyMFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAgICAgICovCisJe1JFRlJFU0hfNjAsIENMS183NF80ODFNLCBNMTI4MFg3MjBfUjYwX0hTUCwgTTEyODBYNzIwX1I2MF9WU1AsCisJIHsxNjQ4LCAxMjgwLCAxMjgwLCAzNjgsIDEzOTIsIDQwLCA3NTAsIDcyMCwgNzIwLCAzMCwgNzI1LCA1fSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjBfNDY2TSwgTTEyODBYNzIwX1I1MF9IU1AsIE0xMjgwWDcyMF9SNTBfVlNQLAorCSB7MTYzMiwgMTI4MCwgMTI4MCwgMzUyLCAxMzI4LCAxMjgsIDc0MSwgNzIwLCA3MjAsIDIxLCA3MjEsIDN9IH0KK307CisKKy8qMTI4MHg3NjggKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDc2OFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzgwXzEzNk0sIE0xMjgwWDc2OF9SNjBfSFNQLCBNMTI4MFg3NjhfUjYwX1ZTUCwKKwkgezE2ODAsIDEyODAsIDEyODAsIDQwMCwgMTM0NCwgMTM2LCA3OTUsIDc2OCwgNzY4LCAyNywgNzY5LCAzfSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjVfMTc4TSwgTTEyODBYNzY4X1I1MF9IU1AsIE0xMjgwWDc2OF9SNTBfVlNQLAorCSB7MTY0OCwgMTI4MCwgMTI4MCwgMzY4LCAxMzM2LCAxMjgsIDc5MSwgNzY4LCA3NjgsIDIzLCA3NjksIDN9IH0KK307CisKKy8qIDEyODB4ODAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4ODAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzgzXzM3NU0sIE0xMjgwWDgwMF9SNjBfSFNQLCBNMTI4MFg4MDBfUjYwX1ZTUCwKKwkgezE2ODAsIDEyODAsIDEyODAsIDQwMCwgMTM1MiwgMTI4LCA4MzEsIDgwMCwgODAwLCAzMSwgODAzLCA2fSB9Cit9OworCisvKjEyODB4OTYwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg5NjBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwOF8wMDBNLCBNMTI4MFg5NjBfUjYwX0hTUCwgTTEyODBYOTYwX1I2MF9WU1AsCisJIHsxODAwLCAxMjgwLCAxMjgwLCA1MjAsIDEzNzYsIDExMiwgMTAwMCwgOTYwLCA5NjAsIDQwLCA5NjEsIDN9IH0KK307CisKKy8qIDEyODB4MTAyNCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4MTAyNFtdID0geworCS8qcl9yYXRlLHZjbGssLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwOF8wMDBNLCBNMTI4MFgxMDI0X1I2MF9IU1AsIE0xMjgwWDEwMjRfUjYwX1ZTUCwKKwkgezE2ODgsIDEyODAsIDEyODAsIDQwOCwgMTMyOCwgMTEyLCAxMDY2LCAxMDI0LCAxMDI0LCA0MiwgMTAyNSwKKwkgIDN9IH0sCisJe1JFRlJFU0hfNzUsIENMS18xMzVfMDAwTSwgTTEyODBYMTAyNF9SNzVfSFNQLCBNMTI4MFgxMDI0X1I3NV9WU1AsCisJIHsxNjg4LCAxMjgwLCAxMjgwLCA0MDgsIDEyOTYsIDE0NCwgMTA2NiwgMTAyNCwgMTAyNCwgNDIsIDEwMjUsCisJICAzfSB9LAorCXtSRUZSRVNIXzg1LCBDTEtfMTU3XzUwME0sIE0xMjgwWDEwMjRfUjg1X0hTUCwgTTEyODBYMTAyNF9SODVfVlNQLAorCSB7MTcyOCwgMTI4MCwgMTI4MCwgNDQ4LCAxMzQ0LCAxNjAsIDEwNzIsIDEwMjQsIDEwMjQsIDQ4LCAxMDI1LCAzfSB9Cit9OworCisvKiAxMzY4eDc2OCAoR1RGKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzY4eDc2OFtdID0geworCS8qIHJfcmF0ZSwgIHZjbGssIGhzcCwgdnNwICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODVfODYwTSwgTTEzNjhYNzY4X1I2MF9IU1AsIE0xMzY4WDc2OF9SNjBfVlNQLAorCSB7MTgwMCwgMTM2OCwgMTM2OCwgNDMyLCAxNDQwLCAxNDQsIDc5NSwgNzY4LCA3NjgsIDI3LCA3NjksIDN9IH0KK307CisKKy8qMTQ0MHgxMDUwIChHVEYpKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHgxMDUwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEyNV8xMDRNLCBNMTQ0MFgxMDUwX1I2MF9IU1AsIE0xNDQwWDEwNTBfUjYwX1ZTUCwKKwkgezE5MzYsIDE0NDAsIDE0NDAsIDQ5NiwgMTUzNiwgMTUyLCAxMDc3LCAxMDQwLCAxMDQwLCAzNywgMTA0MSwgM30gfQorfTsKKworLyogMTYwMHgxMjAwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMjAwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xNjJfMDAwTSwgTTE2MDBYMTIwMF9SNjBfSFNQLCBNMTYwMFgxMjAwX1I2MF9WU1AsCisJIHsyMTYwLCAxNjAwLCAxNjAwLCA1NjAsIDE2NjQsIDE5MiwgMTI1MCwgMTIwMCwgMTIwMCwgNTAsIDEyMDEsCisJICAzfSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMjAyXzUwME0sIE0xNjAwWDEyMDBfUjc1X0hTUCwgTTE2MDBYMTIwMF9SNzVfVlNQLAorCSB7MjE2MCwgMTYwMCwgMTYwMCwgNTYwLCAxNjY0LCAxOTIsIDEyNTAsIDEyMDAsIDEyMDAsIDUwLCAxMjAxLCAzfSB9CisKK307CisKKy8qIDE2ODB4MTA1MCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCAgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTQ2Xzc2ME0sIE0xNjgweDEwNTBfUjYwX0hTUCwgTTE2ODB4MTA1MF9SNjBfVlNQLAorCSB7MjI0MCwgMTY4MCwgMTY4MCwgNTYwLCAxNzg0LCAxNzYsIDEwODksIDEwNTAsIDEwNTAsIDM5LCAxMDUzLAorCSAgNn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzE4N18wMDBNLCBNMTY4MHgxMDUwX1I3NV9IU1AsIE0xNjgweDEwNTBfUjc1X1ZTUCwKKwkgezIyNzIsIDE2ODAsIDE2ODAsIDU5MiwgMTgwMCwgMTc2LCAxMDk5LCAxMDUwLCAxMDUwLCA0OSwgMTA1MywgNn0gfQorfTsKKworLyogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzExOV8wMDBNLCBNMTY4MHgxMDUwX1JCX1I2MF9IU1AsCisJIE0xNjgweDEwNTBfUkJfUjYwX1ZTUCwKKwkgezE4NDAsIDE2ODAsIDE2ODAsIDE2MCwgMTcyOCwgMzIsIDEwODAsIDEwNTAsIDEwNTAsIDMwLCAxMDUzLCA2fSB9Cit9OworCisvKiAxOTIweDEwODAgKENWVCkqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEwODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzE3Ml83OThNLCBNMTkyMFgxMDgwX1I2MF9IU1AsIE0xOTIwWDEwODBfUjYwX1ZTUCwKKwkgezI1NzYsIDE5MjAsIDE5MjAsIDY1NiwgMjA0OCwgMjAwLCAxMTIwLCAxMDgwLCAxMDgwLCA0MCwgMTA4MywgNX0gfQorfTsKKworLyogMTkyMHgxMDgwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMzhfNDAwTSwgTTE5MjBYMTA4MF9SQl9SNjBfSFNQLAorCSBNMTkyMFgxMDgwX1JCX1I2MF9WU1AsCisJIHsyMDgwLCAxOTIwLCAxOTIwLCAxNjAsIDE5NjgsIDMyLCAxMTExLCAxMDgwLCAxMDgwLCAzMSwgMTA4MywgNX0gfQorfTsKKworLyogMTkyMHgxNDQwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxNDQwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yMzRfMDAwTSwgTTE5MjBYMTQ0MF9SNjBfSFNQLCBNMTkyMFgxNDQwX1I2MF9WU1AsCisJIHsyNjAwLCAxOTIwLCAxOTIwLCA2ODAsIDIwNDgsIDIwOCwgMTUwMCwgMTQ0MCwgMTQ0MCwgNjAsIDE0NDEsCisJICAzfSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMjk3XzUwME0sIE0xOTIwWDE0NDBfUjc1X0hTUCwgTTE5MjBYMTQ0MF9SNzVfVlNQLAorCSB7MjY0MCwgMTkyMCwgMTkyMCwgNzIwLCAyMDY0LCAyMjQsIDE1MDAsIDE0NDAsIDE0NDAsIDYwLCAxNDQxLCAzfSB9Cit9OworCisvKiAxNDAweDEwNTAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMjFfNzUwTSwgTTE0MDBYMTA1MF9SNjBfSFNQLCBNMTQwMFgxMDUwX1I2MF9WU1AsCisJIHsxODY0LCAxNDAwLCAxNDAwLCA0NjQsIDE0ODgsIDE0NCwgMTA4OSwgMTA1MCwgMTA1MCwgMzksIDEwNTMsCisJICA0fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMTU2XzAwME0sIE0xNDAwWDEwNTBfUjc1X0hTUCwgTTE0MDBYMTA1MF9SNzVfVlNQLAorCSB7MTg5NiwgMTQwMCwgMTQwMCwgNDk2LCAxNTA0LCAxNDQsIDEwOTksIDEwNTAsIDEwNTAsIDQ5LCAxMDUzLCA0fSB9Cit9OworCisvKiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0MDB4MTA1MF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTAxXzAwME0sIE0xNDAwWDEwNTBfUkJfUjYwX0hTUCwKKwkgTTE0MDBYMTA1MF9SQl9SNjBfVlNQLAorCSB7MTU2MCwgMTQwMCwgMTQwMCwgMTYwLCAxNDQ4LCAzMiwgMTA4MCwgMTA1MCwgMTA1MCwgMzAsIDEwNTMsIDR9IH0KK307CisKKy8qIDk2MHg2MDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNOTYweDYwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180NV8yNTBNLCBNOTYwWDYwMF9SNjBfSFNQLCBNOTYwWDYwMF9SNjBfVlNQLAorCSB7MTIxNiwgOTYwLCA5NjAsIDI1NiwgOTkyLCA5NiwgNjI0LCA2MDAsIDYwMCwgMjQsIDYwMywgNn0gfQorfTsKKworLyogMTAwMHg2MDAgKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAwMHg2MDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNDhfMDAwTSwgTTEwMDBYNjAwX1I2MF9IU1AsIE0xMDAwWDYwMF9SNjBfVlNQLAorCSB7MTI4OCwgMTAwMCwgMTAwMCwgMjg4LCAxMDQwLCAxMDQsIDYyMiwgNjAwLCA2MDAsIDIyLCA2MDEsIDN9IH0KK307CisKKy8qIDEwMjR4NTc2IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTc2W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzQ2Xzk5Nk0sIE0xMDI0WDU3Nl9SNjBfSFNQLCBNMTAyNFg1NzZfUjYwX1ZTUCwKKwkgezEzMTIsIDEwMjQsIDEwMjQsIDI4OCwgMTA2NCwgMTA0LCA1OTcsIDU3NiwgNTc2LCAyMSwgNTc3LCAzfSB9Cit9OworCisvKiAxMDg4eDYxMiAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDg4eDYxMltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS181Ml85NzdNLCBNMTA4OFg2MTJfUjYwX0hTUCwgTTEwODhYNjEyX1I2MF9WU1AsCisJIHsxMzkyLCAxMDg4LCAxMDg4LCAzMDQsIDExMzYsIDEwNCwgNjM2LCA2MTIsIDYxMiwgMjQsIDYxNSwgNX0gfQorfTsKKworLyogMTE1Mng3MjAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTE1Mng3MjBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNjZfNzUwTSwgTTExNTJYNzIwX1I2MF9IU1AsIE0xMTUyWDcyMF9SNjBfVlNQLAorCSB7MTQ4OCwgMTE1MiwgMTE1MiwgMzM2LCAxMjA4LCAxMTIsIDc0OCwgNzIwLCA3MjAsIDI4LCA3MjMsIDZ9IH0KK307CisKKy8qIDEyMDB4NzIwIChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyMDB4NzIwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzcwXzE1OU0sIE0xMjAwWDcyMF9SNjBfSFNQLCBNMTIwMFg3MjBfUjYwX1ZTUCwKKwkgezE1NjgsIDEyMDAsIDEyMDAsIDM2OCwgMTI1NiwgMTI4LCA3NDYsIDcyMCwgNzIwLCAyNiwgNzIxLCAzfSB9Cit9OworCisvKiAxMjgweDYwMCAoR1RGKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDYwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzYxXzUwME0sIE0xMjgweDYwMF9SNjBfSFNQLCBNMTI4MHg2MDBfUjYwX1ZTUCwKKwkgezE2NDgsIDEyODAsIDEyODAsIDM2OCwgMTMzNiwgMTI4LCA2MjIsIDYwMCwgNjAwLCAyMiwgNjAxLCAzfSB9Cit9OworCisvKiAxMzYweDc2OCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS184NF83NTBNLCBNMTM2MFg3NjhfUjYwX0hTUCwgTTEzNjBYNzY4X1I2MF9WU1AsCisJIHsxNzc2LCAxMzYwLCAxMzYwLCA0MTYsIDE0MzIsIDEzNiwgNzk4LCA3NjgsIDc2OCwgMzAsIDc3MSwgNX0gfQorfTsKKworLyogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjB4NzY4X1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzcyXzAwME0sIE0xMzYwWDc2OF9SQl9SNjBfSFNQLAorCSBNMTM2MFg3NjhfUkJfUjYwX1ZTUCwKKwkgezE1MjAsIDEzNjAsIDEzNjAsIDE2MCwgMTQwOCwgMzIsIDc5MCwgNzY4LCA3NjgsIDIyLCA3NzEsIDV9IH0KK307CisKKy8qIDEzNjZ4NzY4IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjZ4NzY4W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzg1Xzg2ME0sIE0xMzY4WDc2OF9SNjBfSFNQLCBNMTM2OFg3NjhfUjYwX1ZTUCwKKwkgezE4MDAsIDEzNjgsIDEzNjgsIDQzMiwgMTQ0MCwgMTQ0LCA3OTUsIDc2OCwgNzY4LCAyNywgNzY5LCAzfSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjlfOTI0TSwgTTEzNjhYNzY4X1I1MF9IU1AsIE0xMzY4WDc2OF9SNTBfVlNQLAorCSB7MTc2OCwgMTM2OCwgMTM2OCwgNDAwLCAxNDI0LCAxNDQsIDc5MSwgNzY4LCA3NjgsIDIzLCA3NjksIDN9IH0KK307CisKKy8qIDE0NDB4OTAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwNl81MDBNLCBNMTQ0MFg5MDBfUjYwX0hTUCwgTTE0NDBYOTAwX1I2MF9WU1AsCisJIHsxOTA0LCAxNDQwLCAxNDQwLCA0NjQsIDE1MjAsIDE1MiwgOTM0LCA5MDAsIDkwMCwgMzQsIDkwMywgNn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzEzNl83MDBNLCBNMTQ0MFg5MDBfUjc1X0hTUCwgTTE0NDBYOTAwX1I3NV9WU1AsCisJIHsxOTM2LCAxNDQwLCAxNDQwLCA0OTYsIDE1MzYsIDE1MiwgOTQyLCA5MDAsIDkwMCwgNDIsIDkwMywgNn0gfQorfTsKKworLyogMTQ0MHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzg4Xzc1ME0sIE0xNDQwWDkwMF9SQl9SNjBfSFNQLAorCSBNMTQ0MFg5MDBfUkJfUjYwX1ZTUCwKKwkgezE2MDAsIDE0NDAsIDE0NDAsIDE2MCwgMTQ4OCwgMzIsIDkyNiwgOTAwLCA5MDAsIDI2LCA5MDMsIDZ9IH0KK307CisKKy8qIDE2MDB4OTAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzExOF84NDBNLCBNMTYwMFg5MDBfUjYwX0hTUCwgTTE2MDBYOTAwX1I2MF9WU1AsCisJIHsyMTEyLCAxNjAwLCAxNjAwLCA1MTIsIDE2ODgsIDE2OCwgOTM0LCA5MDAsIDkwMCwgMzQsIDkwMywgNX0gfQorfTsKKworLyogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgdmNsaywgICAgICAgICAgIGhzcCwgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfOTdfNzUwTSwgTTE2MDBYOTAwX1JCX1I2MF9IU1AsCisJIE0xNjAwWDkwMF9SQl9SNjBfVlNQLAorCSB7MTc2MCwgMTYwMCwgMTYwMCwgMTYwLCAxNjQ4LCAzMiwgOTI2LCA5MDAsIDkwMCwgMjYsIDkwMywgNX0gfQorfTsKKworLyogMTYwMHgxMDI0IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4MTAyNFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTM2XzcwME0sIE0xNjAwWDEwMjRfUjYwX0hTUCwgTTE2MDBYMTAyNF9SNjBfVlNQLAorCSB7MjE0NCwgMTYwMCwgMTYwMCwgNTQ0LCAxNzA0LCAxNjgsIDEwNjAsIDEwMjQsIDEwMjQsIDM2LCAxMDI1LCAzfSB9Cit9OworCisvKiAxNzkyeDEzNDQgKERNVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTc5MngxMzQ0W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yMDRfMDAwTSwgTTE3OTJ4MTM0NF9SNjBfSFNQLCBNMTc5MngxMzQ0X1I2MF9WU1AsCisJIHsyNDQ4LCAxNzkyLCAxNzkyLCA2NTYsIDE5MjAsIDIwMCwgMTM5NCwgMTM0NCwgMTM0NCwgNTAsIDEzNDUsIDN9IH0KK307CisKKy8qIDE4NTZ4MTM5MiAoRE1UKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xODU2eDEzOTJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzIxOF81MDBNLCBNMTg1NngxMzkyX1I2MF9IU1AsIE0xODU2eDEzOTJfUjYwX1ZTUCwKKwkgezI1MjgsIDE4NTYsIDE4NTYsIDY3MiwgMTk1MiwgMjI0LCAxNDM5LCAxMzkyLCAxMzkyLCA0NywgMTM5MywgM30gfQorfTsKKworLyogMTkyMHgxMjAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTIwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xOTNfMjk1TSwgTTE5MjBYMTIwMF9SNjBfSFNQLCBNMTkyMFgxMjAwX1I2MF9WU1AsCisJIHsyNTkyLCAxOTIwLCAxOTIwLCA2NzIsIDIwNTYsIDIwMCwgMTI0NSwgMTIwMCwgMTIwMCwgNDUsIDEyMDMsIDZ9IH0KK307CisKKy8qIDE5MjB4MTIwMCAoQ1ZUIHdpdGggUmVkdWNlIEJsYW5raW5nKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTUzXzkyME0sIE0xOTIwWDEyMDBfUkJfUjYwX0hTUCwKKwkgTTE5MjBYMTIwMF9SQl9SNjBfVlNQLAorCSB7MjA4MCwgMTkyMCwgMTkyMCwgMTYwLCAxOTY4LCAzMiwgMTIzNSwgMTIwMCwgMTIwMCwgMzUsIDEyMDMsIDZ9IH0KK307CisKKy8qIDIwNDh4MTUzNiAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0yMDQ4eDE1MzZbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzI2N18yNTBNLCBNMjA0OHgxNTM2X1I2MF9IU1AsIE0yMDQ4eDE1MzZfUjYwX1ZTUCwKKwkgezI4MDAsIDIwNDgsIDIwNDgsIDc1MiwgMjIwMCwgMjI0LCAxNTkyLCAxNTM2LCAxNTM2LCA1NiwgMTUzOSwgNH0gfQorfTsKKworLyogVmlkZW8gTW9kZSBUYWJsZSAqLworLyogc3RydWN0IFZpZGVvTW9kZVRhYmxlIHsqLworLyogIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlSW5kZXg7Ki8KKy8qICBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgICAgICAgICAgICAgKmNydGM7Ki8KKy8qICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9hcnJheTsqLworLyogfTsqLworc3RydWN0IFZpZGVvTW9kZVRhYmxlIENMRTI2Nk1vZGVzW10gPSB7CisJLyogRGlzcGxheSA6IDQ4MHg2NDAgKEdURikgKi8KKwl7VklBX1JFU180ODBYNjQwLCBDUlRNNDgweDY0MCwgQVJSQVlfU0laRShDUlRNNDgweDY0MCl9LAorCisJLyogRGlzcGxheSA6IDY0MHg0ODAgKi8KKwl7VklBX1JFU182NDBYNDgwLCBDUlRNNjQweDQ4MCwgQVJSQVlfU0laRShDUlRNNjQweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDcyMHg0ODAgKEdURikgKi8KKwl7VklBX1JFU183MjBYNDgwLCBDUlRNNzIweDQ4MCwgQVJSQVlfU0laRShDUlRNNzIweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDcyMHg1NzYgKEdURikgKi8KKwl7VklBX1JFU183MjBYNTc2LCBDUlRNNzIweDU3NiwgQVJSQVlfU0laRShDUlRNNzIweDU3Nil9LAorCisJLyogRGlzcGxheSA6IDgwMHg2MDAgKi8KKwl7VklBX1JFU184MDBYNjAwLCBDUlRNODAweDYwMCwgQVJSQVlfU0laRShDUlRNODAweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDgwMHg0ODAgKENWVCkgKi8KKwl7VklBX1JFU184MDBYNDgwLCBDUlRNODAweDQ4MCwgQVJSQVlfU0laRShDUlRNODAweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDg0OHg0ODAgKENWVCkgKi8KKwl7VklBX1JFU184NDhYNDgwLCBDUlRNODQ4eDQ4MCwgQVJSQVlfU0laRShDUlRNODQ4eDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDg1Mng0ODAgKEdURikgKi8KKwl7VklBX1JFU184NTZYNDgwLCBDUlRNODUyeDQ4MCwgQVJSQVlfU0laRShDUlRNODUyeDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDEwMjR4NTEyIChHVEYpICovCisJe1ZJQV9SRVNfMTAyNFg1MTIsIENSVE0xMDI0eDUxMiwgQVJSQVlfU0laRShDUlRNMTAyNHg1MTIpfSwKKworCS8qIERpc3BsYXkgOiAxMDI0eDYwMCAqLworCXtWSUFfUkVTXzEwMjRYNjAwLCBDUlRNMTAyNHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTAyNHg1NzYgKEdURikgKi8KKwkvKnsgVklBX1JFU18xMDI0WDU3NiwgQ1JUTTEwMjR4NTc2LCBBUlJBWV9TSVpFKENSVE0xMDI0eDU3Nil9LCAqLworCisJLyogRGlzcGxheSA6IDEwMjR4NzY4ICovCisJe1ZJQV9SRVNfMTAyNFg3NjgsIENSVE0xMDI0eDc2OCwgQVJSQVlfU0laRShDUlRNMTAyNHg3NjgpfSwKKworCS8qIERpc3BsYXkgOiAxMTUyeDg2NCAqLworCXtWSUFfUkVTXzExNTJYODY0LCBDUlRNMTE1Mng4NjQsIEFSUkFZX1NJWkUoQ1JUTTExNTJ4ODY0KX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg3NjggKEdURikgKi8KKwl7VklBX1JFU18xMjgwWDc2OCwgQ1JUTTEyODB4NzY4LCBBUlJBWV9TSVpFKENSVE0xMjgweDc2OCl9LAorCisJLyogRGlzcGxheSA6IDk2MHg2MDAgKENWVCkgKi8KKwl7VklBX1JFU185NjBYNjAwLCBDUlRNOTYweDYwMCwgQVJSQVlfU0laRShDUlRNOTYweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDEwMDB4NjAwIChHVEYpICovCisJe1ZJQV9SRVNfMTAwMFg2MDAsIENSVE0xMDAweDYwMCwgQVJSQVlfU0laRShDUlRNMTAwMHg2MDApfSwKKworCS8qIERpc3BsYXkgOiAxMDI0eDU3NiAoR1RGKSAqLworCXtWSUFfUkVTXzEwMjRYNTc2LCBDUlRNMTAyNHg1NzYsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NTc2KX0sCisKKwkvKiBEaXNwbGF5IDogMTA4OHg2MTIgKEdURikgKi8KKwl7VklBX1JFU18xMDg4WDYxMiwgQ1JUTTEwODh4NjEyLCBBUlJBWV9TSVpFKENSVE0xMDg4eDYxMil9LAorCisJLyogRGlzcGxheSA6IDExNTJ4NzIwIChDVlQpICovCisJe1ZJQV9SRVNfMTE1Mlg3MjAsIENSVE0xMTUyeDcyMCwgQVJSQVlfU0laRShDUlRNMTE1Mng3MjApfSwKKworCS8qIERpc3BsYXkgOiAxMjAweDcyMCAoR1RGKSAqLworCXtWSUFfUkVTXzEyMDBYNzIwLCBDUlRNMTIwMHg3MjAsIEFSUkFZX1NJWkUoQ1JUTTEyMDB4NzIwKX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg2MDAgKEdURikgKi8KKwl7VklBX1JFU18xMjgwWDYwMCwgQ1JUTTEyODB4NjAwLCBBUlJBWV9TSVpFKENSVE0xMjgweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDEyODB4ODAwIChDVlQpICovCisJe1ZJQV9SRVNfMTI4MFg4MDAsIENSVE0xMjgweDgwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg4MDApfSwKKworCS8qIERpc3BsYXkgOiAxMjgweDgwMCAoR1RGKSAqLworCS8qeyBNMTI4MHg4MDAsIENSVE0xMjgweDgwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg4MDApfSwgKi8KKworCS8qIERpc3BsYXkgOiAxMjgweDk2MCAqLworCXtWSUFfUkVTXzEyODBYOTYwLCBDUlRNMTI4MHg5NjAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4OTYwKX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHgxMDI0ICovCisJe1ZJQV9SRVNfMTI4MFgxMDI0LCBDUlRNMTI4MHgxMDI0LCBBUlJBWV9TSVpFKENSVE0xMjgweDEwMjQpfSwKKworCS8qIERpc3BsYXkgOiAxMzYweDc2OCAoQ1ZUKSAqLworCXtWSUFfUkVTXzEzNjBYNzY4LCBDUlRNMTM2MHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjB4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTM2MFg3NjhfUkIsIENSVE0xMzYweDc2OF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTM2MHg3NjhfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxMzY2eDc2OCAqLworCXtWSUFfUkVTXzEzNjZYNzY4LCBDUlRNMTM2Nng3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjZ4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTM2OHg3NjggKEdURikgKi8KKwkvKnsgTTEzNjh4NzY4LENSVE0xMzY4eDc2OCxBUlJBWV9TSVpFKENSVE0xMzY4eDc2OCl9LCAqLworCS8qIERpc3BsYXkgOiAxMzY4eDc2OCAoR1RGKSAqLworCXtWSUFfUkVTXzEzNjhYNzY4LCBDUlRNMTM2OHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjh4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTQ0MHg5MDAgKENWVCkgKi8KKwl7VklBX1JFU18xNDQwWDkwMCwgQ1JUTTE0NDB4OTAwLCBBUlJBWV9TSVpFKENSVE0xNDQweDkwMCl9LAorCisJLyogRGlzcGxheSA6IDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtWSUFfUkVTXzE0NDBYOTAwX1JCLCBDUlRNMTQ0MHg5MDBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE0NDB4OTAwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTQ0MHgxMDUwIChHVEYpICovCisJe1ZJQV9SRVNfMTQ0MFgxMDUwLCBDUlRNMTQ0MHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNDQweDEwNTApfSwKKworCS8qIERpc3BsYXkgOiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTQwMFgxMDUwX1JCLCBDUlRNMTQwMHgxMDUwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xNDAweDEwNTBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDkwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE2MDBYOTAwLCBDUlRNMTYwMHg5MDAsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4OTAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTYwMFg5MDBfUkIsIENSVE0xNjAweDkwMF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTYwMHg5MDBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDEwMjQgKEdURikgKi8KKwl7VklBX1JFU18xNjAwWDEwMjQsIENSVE0xNjAweDEwMjQsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4MTAyNCl9LAorCisJLyogRGlzcGxheSA6IDE2MDB4MTIwMCAqLworCXtWSUFfUkVTXzE2MDBYMTIwMCwgQ1JUTTE2MDB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTYwMHgxMjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTY4MHgxMDUwIChDVlQpICovCisJe1ZJQV9SRVNfMTY4MFgxMDUwLCBDUlRNMTY4MHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNjgweDEwNTApfSwKKworCS8qIERpc3BsYXkgOiAxNjgweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTY4MFgxMDUwX1JCLCBDUlRNMTY4MHgxMDUwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xNjgweDEwNTBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNzkyeDEzNDQgKERNVCkgKi8KKwl7VklBX1JFU18xNzkyWDEzNDQsIENSVE0xNzkyeDEzNDQsIEFSUkFZX1NJWkUoQ1JUTTE3OTJ4MTM0NCl9LAorCisJLyogRGlzcGxheSA6IDE4NTZ4MTM5MiAoRE1UKSAqLworCXtWSUFfUkVTXzE4NTZYMTM5MiwgQ1JUTTE4NTZ4MTM5MiwgQVJSQVlfU0laRShDUlRNMTg1NngxMzkyKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxNDQwICovCisJe1ZJQV9SRVNfMTkyMFgxNDQwLCBDUlRNMTkyMHgxNDQwLCBBUlJBWV9TSVpFKENSVE0xOTIweDE0NDApfSwKKworCS8qIERpc3BsYXkgOiAyMDQ4eDE1MzYgKi8KKwl7VklBX1JFU18yMDQ4WDE1MzYsIENSVE0yMDQ4eDE1MzYsIEFSUkFZX1NJWkUoQ1JUTTIwNDh4MTUzNil9LAorCisJLyogRGlzcGxheSA6IDEyODB4NzIwICovCisJe1ZJQV9SRVNfMTI4MFg3MjAsIENSVE0xMjgweDcyMCwgQVJSQVlfU0laRShDUlRNMTI4MHg3MjApfSwKKworCS8qIERpc3BsYXkgOiAxOTIweDEwODAgKENWVCkgKi8KKwl7VklBX1JFU18xOTIwWDEwODAsIENSVE0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTA4MCl9LAorCisJLyogRGlzcGxheSA6IDE5MjB4MTA4MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xOTIwWDEwODBfUkIsIENSVE0xOTIweDEwODBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTA4MF9SQil9LAorCisJLyogRGlzcGxheSA6IDE5MjB4MTIwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE5MjBYMTIwMCwgQ1JUTTE5MjB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxMjAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtWSUFfUkVTXzE5MjBYMTIwMF9SQiwgQ1JUTTE5MjB4MTIwMF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTQwMHgxMDUwIChDVlQpICovCisJe1ZJQV9SRVNfMTQwMFgxMDUwLCBDUlRNMTQwMHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNDAweDEwNTApfQorfTsKK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbXSA9IHsKKwl7UkVGUkVTSF82MCwgQ0xLXzc0XzI3ME0sIE0xMjgwWDcyMF9DRUFfUjYwX0hTUCwKKwkgTTEyODBYNzIwX0NFQV9SNjBfVlNQLAorCSAvKiBIVCwgICAgSEEsICAgSEJTLCAgSEJFLCAgSFNTLCBIU0UsICBWVCwgICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCSB7MTY1MCwgMTI4MCwgMTI4MCwgMzcwLCAxMzkwLCA0MCwgNzUwLCA3MjAsIDcyMCwgMzAsIDcyNSwgNX0gfQorfTsKK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTkyMHgxMDgwW10gPSB7CisJe1JFRlJFU0hfNjAsIENMS18xNDhfNTAwTSwgTTE5MjBYMTA4MF9DRUFfUjYwX0hTUCwKKwkgTTE5MjBYMTA4MF9DRUFfUjYwX1ZTUCwKKwkgLyogSFQsICAgIEhBLCAgIEhCUywgIEhCRSwgIEhTUywgSFNFLCAgVlQsICBWQSwgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCSB7MjIwMCwgMTkyMCwgMTkyMCwgMzAwLCAyMDA4LCA0NCwgMTEyNSwgMTA4MCwgMTA4MCwgNDUsIDEwODQsIDV9IH0KK307CitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0VBX0hETUlfTW9kZXNbXSA9IHsKKwkvKiBEaXNwbGF5IDogMTI4MHg3MjAgKi8KKwl7VklBX1JFU18xMjgwWDcyMCwgQ0VBTTEyODB4NzIwLCBBUlJBWV9TSVpFKENFQU0xMjgweDcyMCl9LAorCXtWSUFfUkVTXzE5MjBYMTA4MCwgQ0VBTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDRUFNMTkyMHgxMDgwKX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ZGU1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1ZJQU1PREVfSF9fCisjZGVmaW5lIF9fVklBTU9ERV9IX18KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdHJ1Y3QgVlBJVFRhYmxlIHsKKwl1bnNpZ25lZCBjaGFyIE1pc2M7CisJdW5zaWduZWQgY2hhciBTUltTdGRTUl07CisJdW5zaWduZWQgY2hhciBHUltTdGRHUl07CisJdW5zaWduZWQgY2hhciBBUltTdGRBUl07Cit9OworCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgeworCWludCBNb2RlSW5kZXg7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRjOworCWludCBtb2RlX2FycmF5OworfTsKKworc3RydWN0IHBhdGNoX3RhYmxlIHsKKwlpbnQgbW9kZV9pbmRleDsKKwlpbnQgdGFibGVfbGVuZ3RoOworCXN0cnVjdCBpb19yZWcgKmlvX3JlZ190YWJsZTsKK307CisKK3N0cnVjdCByZXNfbWFwX3JlZnJlc2ggeworCWludCBocmVzOworCWludCB2cmVzOworCWludCBwaXhjbG9jazsKKwlpbnQgdm1vZGVfcmVmcmVzaDsKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSCBBUlJBWV9TSVpFKHJlc19tYXBfcmVmcmVzaF90YmwpCisjZGVmaW5lIE5VTV9UT1RBTF9DRUFfTU9ERVMgIEFSUkFZX1NJWkUoQ0VBX0hETUlfTW9kZXMpCisjZGVmaW5lIE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjQwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjcwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShLTTQwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDWDcwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9WWDgwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShWWDgwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ0xFMjY2X01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX1BBVENIX01PREUgQVJSQVlfU0laRShyZXNfcGF0Y2hfdGFibGUpCisjZGVmaW5lIE5VTV9UT1RBTF9NT0RFVEFCTEUgQVJSQVlfU0laRShDTEUyNjZNb2RlcykKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTW9kZSBUYWJsZSAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKiA0ODB4NjQwICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE00ODB4NjQwWzFdOworLyogNjQweDQ4MCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE02NDB4NDgwWzVdOworLyo3MjB4NDgwIChHVEYpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTcyMHg0ODBbMV07CisvKjcyMHg1NzYgKEdURikqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNzIweDU3NlsxXTsKKy8qIDgwMHg0ODAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg0ODBbMV07CisvKiA4MDB4NjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg2MDBbNV07CisvKiA4NDh4NDgwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NDh4NDgwWzFdOworLyo4NTZ4NDgwIChHVEYpIGNvbnZlcnQgdG8gODUyeDQ4MCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NTJ4NDgwWzFdOworLyoxMDI0eDUxMiAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDUxMlsxXTsKKy8qIDEwMjR4NjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NjAwWzFdOworLyogMTAyNHg3NjgqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg3NjhbNF07CisvKiAxMTUyeDg2NCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDg2NFsxXTsKKy8qIDEyODB4NzIwIChIRE1JIDcyMFApKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzIwWzJdOworLyoxMjgweDc2OCAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDc2OFsyXTsKKy8qIDEyODB4ODAwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDgwMFsxXTsKKy8qMTI4MHg5NjAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg5NjBbMV07CisvKiAxMjgweDEwMjQqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHgxMDI0WzNdOworLyogMTM2OHg3NjggKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjh4NzY4WzFdOworLyoxNDQweDEwNTAgKEdURikqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHgxMDUwWzFdOworLyogMTYwMHgxMjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4MTIwMFsyXTsKKy8qIDE2ODB4MTA1MCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwWzJdOworLyogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwX1JCWzFdOworLyogMTkyMHgxMDgwIChDVlQpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MFsxXTsKKy8qIDE5MjB4MTA4MCAoQ1ZUIHdpdGggUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwX1JCWzFdOworLyogMTkyMHgxNDQwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTQ0MFsyXTsKKy8qIDE0MDB4MTA1MCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwWzJdOworLyogMTQwMHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwX1JCWzFdOworLyogOTYweDYwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNOTYweDYwMFsxXTsKKy8qIDEwMDB4NjAwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDAweDYwMFsxXTsKKy8qIDEwMjR4NTc2IChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDU3NlsxXTsKKy8qIDEwODh4NjEyIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDg4eDYxMlsxXTsKKy8qIDExNTJ4NzIwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDcyMFsxXTsKKy8qIDEyMDB4NzIwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjAweDcyMFsxXTsKKy8qIDEyODB4NjAwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDYwMFsxXTsKKy8qIDEzNjB4NzY4IChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OFsxXTsKKy8qIDEzNjB4NzY4IChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2MHg3NjhfUkJbMV07CisvKiAxMzY2eDc2OCAoR1RGKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2Nng3NjhbMl07CisvKiAxNDQweDkwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBbMl07CisvKiAxNDQweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwX1JCWzFdOworLyogMTYwMHg5MDAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwWzFdOworLyogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDkwMF9SQlsxXTsKKy8qIDE2MDB4MTAyNCAoR1RGKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMDI0WzFdOworLyogMTc5MngxMzQ0IChETVQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNzkyeDEzNDRbMV07CisvKiAxODU2eDEzOTIgKERNVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE4NTZ4MTM5MlsxXTsKKy8qIDE5MjB4MTIwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMjAwWzFdOworLyogMTkyMHgxMjAwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBfUkJbMV07CisvKiAyMDQ4eDE1MzYgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTIwNDh4MTUzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0xFMjY2TW9kZXNbNDddOworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbMV07CitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xOTIweDEwODBbMV07CitleHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzWzJdOworCitleHRlcm4gc3RydWN0IHJlc19tYXBfcmVmcmVzaCByZXNfbWFwX3JlZnJlc2hfdGJsWzYxXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENONDAwX01vZGVYcmVnc1s1Ml07CitleHRlcm4gc3RydWN0IGlvX3JlZyBDTjcwMF9Nb2RlWHJlZ3NbNjZdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgS000MDBfTW9kZVhyZWdzWzU1XTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENYNzAwX01vZGVYcmVnc1s1OF07CitleHRlcm4gc3RydWN0IGlvX3JlZyBWWDgwMF9Nb2RlWHJlZ3NbNThdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ0xFMjY2X01vZGVYcmVnc1szMl07CitleHRlcm4gc3RydWN0IGlvX3JlZyBQTTEwMjR4NzY4WzJdOworZXh0ZXJuIHN0cnVjdCBwYXRjaF90YWJsZSByZXNfcGF0Y2hfdGFibGVbMV07CitleHRlcm4gc3RydWN0IFZQSVRUYWJsZSBWUElUOworI2VuZGlmIC8qIF9fVklBTU9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyYTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3U4IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvLAorCXU4IGluZGV4KQoreworCXU4IGRhdGE7CisKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OworCXZpYWZiX2kyY19yZWFkYnl0ZShwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLCBpbmRleCwgJmRhdGEpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19jaGlwX2luZm8sIHN0cnVjdCBJT0RBVEEgaW9fZGF0YSkKK3sKKwlpbnQgaW5kZXgsIGRhdGE7CisKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OworCisJaW5kZXggPSBpb19kYXRhLkluZGV4OworCWRhdGEgPSB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCWluZGV4KTsKKwlkYXRhID0gKGRhdGEgJiAofmlvX2RhdGEuTWFzaykpIHwgaW9fZGF0YS5EYXRhOworCisJdmlhZmJfaTJjX3dyaXRlYnl0ZShwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLCBpbmRleCwgZGF0YSk7Cit9CisKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCByZWdfbnVtLCBpOworCisJLyogQ29tbW9uIHNldHRpbmdzOiAqLworCXJlZ19udW0gPSBBUlJBWV9TSVpFKENPTU1PTl9JTklUX1RCTF9WVDE2MzYpOworCisJZm9yIChpID0gMDsgaSA8IHJlZ19udW07IGkrKykgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNltpXSk7CisJfQorCisJLyogSW5wdXQgRGF0YSBNb2RlIFNlbGVjdCAqLworCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERVQUxfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNlswXSk7CisJfSBlbHNlIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIFNJTkdMRV9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2WzBdKTsKKwl9CisKKwlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcpIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERJVEhFUklOR19FTkFCTEVfVEJMX1ZUMTYzNlswXSk7CisJfSBlbHNlIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbMF0pOworCX0KK30KKwordm9pZCB2aWFmYl9lbmFibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkgVkREX09OX1RCTF9WVDE2MzZbMF0pOworCisJLyogUGFkIG9uOiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIDB4QzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RWUDE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDMwLCAweDMwKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMywgMHgwMyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCAweDBDKTsKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK3ZvaWQgdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisKKwl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCQkJIFZERF9PRkZfVEJMX1ZUMTYzNlswXSk7CisKKwkvKiBQYWQgb2ZmOiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4MDAsIDB4QzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RWUDE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDAwLCAweDMwKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMCwgMHgwMyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAwLCAweDBDKTsKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK2Jvb2wgdmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYodm9pZCkKK3sKKwl1OCBCdWZmZXJbMl07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNi5cbiIpOworCisJLyogU2Vuc2UgVlQxNjM2IExWRFMgVHJhbnNtaXRlciAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIgPQorCVZUMTYzNl9MVkRTX0kyQ19BRERSOworCisJLyogQ2hlY2sgdmVuZG9yIElEIGZpcnN0OiAqLworCXZpYWZiX2kyY19yZWFkYnl0ZSgodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJbHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCSAgICAweDAwLCAmQnVmZmVyWzBdKTsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQlsdmRzX2NoaXBfc2xhdmVfYWRkciwKKwkJICAgIDB4MDEsICZCdWZmZXJbMV0pOworCisJaWYgKCEoKEJ1ZmZlclswXSA9PSAweDA2KSAmJiAoQnVmZmVyWzFdID09IDB4MTEpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2hlY2sgQ2hpcCBJRDogKi8KKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCWx2ZHNfY2hpcF9zbGF2ZV9hZGRyLAorCQkgICAgMHgwMiwgJkJ1ZmZlclswXSk7CisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJbHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCSAgICAweDAzLCAmQnVmZmVyWzFdKTsKKwlpZiAoKEJ1ZmZlclswXSA9PSAweDQ1KSAmJiAoQnVmZmVyWzFdID09IDB4MzMpKSB7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQkJVlQxNjM2X0xWRFM7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZXRfY2xrX3JhbmdlX2luZGV4KHUzMiBDbGspCit7CisJaWYgKENsayA8IERQQV9DTEtfMzBNKQorCQlyZXR1cm4gRFBBX0NMS19SQU5HRV8zME07CisJZWxzZSBpZiAoQ2xrIDwgRFBBX0NMS181ME0pCisJCXJldHVybiBEUEFfQ0xLX1JBTkdFXzMwXzUwTTsKKwllbHNlIGlmIChDbGsgPCBEUEFfQ0xLXzcwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfNTBfNzBNOworCWVsc2UgaWYgKENsayA8IERQQV9DTEtfMTAwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfNzBfMTAwTTsKKwllbHNlIGlmIChDbGsgPCBEUEFfQ0xLXzE1ME0pCisJCXJldHVybiBEUEFfQ0xLX1JBTkdFXzEwMF8xNTBNOworCWVsc2UKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfMTUwTTsKK30KKworc3RhdGljIGludCBnZXRfbHZkc19kcGFfc2V0dGluZ19pbmRleChpbnQgcGFuZWxfc2l6ZV9pZCwKKwkJCSAgICAgc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyAqcF92dDE2MzZfZHBhc2V0dGluZ190YmwsCisJCQkgICAgICAgaW50IHRibF9zaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRibF9zaXplOyBpKyspIHsKKwkJaWYgKHBhbmVsX3NpemVfaWQgPT0gcF92dDE2MzZfZHBhc2V0dGluZ190YmwtPlBhbmVsU2l6ZUlEKQorCQkJcmV0dXJuIGk7CisKKwkJcF92dDE2MzZfZHBhc2V0dGluZ190YmwrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2RwYV92dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbywKKwkJICAgIHN0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgKnBfdnQxNjM2X2RwYV9zZXR0aW5nKQoreworCXN0cnVjdCBJT0RBVEEgaW9fZGF0YTsKKworCWlvX2RhdGEuSW5kZXggPSAweDA5OworCWlvX2RhdGEuTWFzayA9IDB4MUY7CisJaW9fZGF0YS5EYXRhID0gcF92dDE2MzZfZHBhX3NldHRpbmctPkNMS19TRUxfU1QxOworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sCisJCXBsdmRzX2NoaXBfaW5mbywgaW9fZGF0YSk7CisKKwlpb19kYXRhLkluZGV4ID0gMHgwODsKKwlpb19kYXRhLk1hc2sgPSAweDBGOworCWlvX2RhdGEuRGF0YSA9IHBfdnQxNjM2X2RwYV9zZXR0aW5nLT5DTEtfU0VMX1NUMjsKKwl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCWlvX2RhdGEpOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleCwgc2l6ZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNC5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNFtpbmRleF0pOworCisJLyogTFZEUyBUcmFuc21pdHRlciBEUEEgc2V0dGluZ3M6ICovCisJc2l6ZSA9IEFSUkFZX1NJWkUoVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjQpOworCWluZGV4ID0KKwkgICAgZ2V0X2x2ZHNfZHBhX3NldHRpbmdfaW5kZXgocGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQsCisJCQkJICAgICAgIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0LCBzaXplKTsKKwlzZXRfZHBhX3Z0MTYzNihwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJICAgICAgICZWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNFtpbmRleF0pOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNygKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleCwgc2l6ZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNy5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1tpbmRleF0pOworCisJLyogTFZEUyBUcmFuc21pdHRlciBEUEEgc2V0dGluZ3M6ICovCisJc2l6ZSA9IEFSUkFZX1NJWkUoVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjcpOworCWluZGV4ID0KKwkgICAgZ2V0X2x2ZHNfZHBhX3NldHRpbmdfaW5kZXgocGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQsCisJCQkJICAgICAgIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3LCBzaXplKTsKKwlzZXRfZHBhX3Z0MTYzNihwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJICAgICAgICZWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1tpbmRleF0pOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NC5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFtpbmRleF0pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE1MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVlQxNjM2X0hfCisjZGVmaW5lIF9WVDE2MzZfSF8KKyNpbmNsdWRlICJjaGlwLmgiCitib29sIHZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2KHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl9lbmFibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX2Rpc2FibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI0KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzMjcoCisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCmluZGV4IDEwMjExZTQuLjI5ZTE0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCkBAIC0xNjAsOCArMTYwLDEwIEBACiAJICogICAgIDYyNSB1cyAtIDYwIHVzIC0gMjQwIHVzIC0gMTAwIG5zID0gMzI0LjkgdXMKIAkgKgogCSAqIFdlJ2xsIHdhaXQgYSBiaXQgbG9uZ2VyIGp1c3QgdG8gYmUgc3VyZS4KKwkgKiBXYXMgdWRlbGF5KDUwMCksIGJ1dCBpZiBpdCBpcyBnb2luZyB0byBidXN5d2FpdCB0aGUgY3B1IHRoYXQgbG9uZywKKwkgKiBtaWdodCBhcyB3ZWxsIGNvbWUgYmFjayBsYXRlci4KIAkgKi8KLQl1ZGVsYXkoNTAwKTsKKwltc2xlZXAoMSk7CiAKIAlkczF3bV93cml0ZV9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9JTlRfRU4sCiAJCURTMVdNX0lOVEVOX0VSQkYgfCBEUzFXTV9JTlRFTl9FVE1UIHwgRFMxV01fSU5URU5fRVBEIHwKQEAgLTI3NCw4ICsyNzYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkczF3bV9zZWFyY2godm9pZCAqZGF0YSwgdTggc2VhcmNoX3R5cGUsCi0JCQkgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgc2xhdmVfZm91bmQpCitzdGF0aWMgdm9pZCBkczF3bV9zZWFyY2godm9pZCAqZGF0YSwgc3RydWN0IHcxX21hc3RlciAqbWFzdGVyX2RldiwKKwkJCXU4IHNlYXJjaF90eXBlLCB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayBzbGF2ZV9mb3VuZCkKIHsKIAlzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YSA9IGRhdGE7CiAJaW50IGk7CkBAIC0zMTMsNyArMzE1LDcgQEAKIAlkczF3bV93cml0ZV9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9DTUQsIH5EUzFXTV9DTURfU1JBKTsKIAlkczF3bV9yZXNldChkczF3bV9kYXRhKTsKIAotCXNsYXZlX2ZvdW5kKGRzMXdtX2RhdGEsIHJvbV9pZCk7CisJc2xhdmVfZm91bmQobWFzdGVyX2Rldiwgcm9tX2lkKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMKaW5kZXggYjYzYjVlMDQuLjU5YWQ2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0OTAuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgQ09NTV9EVAkJCQkweDIwMDAKICNkZWZpbmUgQ09NTV9TUFUJCQkweDEwMDAKICNkZWZpbmUgQ09NTV9GCQkJCTB4MDgwMAotI2RlZmluZSBDT01NX05UUAkJCTB4MDQwMAorI2RlZmluZSBDT01NX05URgkJCTB4MDQwMAogI2RlZmluZSBDT01NX0lDUAkJCTB4MDIwMAogI2RlZmluZSBDT01NX1JTVAkJCTB4MDEwMAogCkBAIC05OCwxMSArOTgsNiBAQAogI2RlZmluZSBCUkFOQ0hfTUFJTgkJCTB4Q0MKICNkZWZpbmUgQlJBTkNIX0FVWAkJCTB4MzMKIAotLyoKLSAqIER1cmF0aW9uIG9mIHRoZSBzdHJvbmcgcHVsbC11cCBwdWxzZSBpbiBtaWxsaXNlY29uZHMuCi0gKi8KLSNkZWZpbmUgUFVMTFVQX1BVTFNFX0RVUkFUSU9OCQk3NTAKLQogLyogU3RhdHVzIGZsYWdzICovCiAjZGVmaW5lIFNUX1NQVUEJCQkJMHgwMSAgLyogU3Ryb25nIFB1bGwtdXAgaXMgYWN0aXZlICovCiAjZGVmaW5lIFNUX1BSR0EJCQkJMHgwMiAgLyogMTJWIHByb2dyYW1taW5nIHB1bHNlIGlzIGJlaW5nIGdlbmVyYXRlZCAqLwpAQCAtMTEyLDYgKzEwNywxNyBAQAogI2RlZmluZSBTVF9JRExFCQkJCTB4MjAgIC8qIERTMjQ5MCBpcyBjdXJyZW50bHkgaWRsZSAqLwogI2RlZmluZSBTVF9FUE9GCQkJCTB4ODAKIAorLyogUmVzdWx0IFJlZ2lzdGVyIGZsYWdzICovCisjZGVmaW5lIFJSX0RFVEVDVAkJCTB4QTUgLyogTmV3IGRldmljZSBkZXRlY3RlZCAqLworI2RlZmluZSBSUl9OUlMJCQkJMHgwMSAvKiBSZXNldCBubyBwcmVzZW5jZSBvciAuLi4gKi8KKyNkZWZpbmUgUlJfU0gJCQkJMHgwMiAvKiBzaG9ydCBvbiByZXNldCBvciBzZXQgcGF0aCAqLworI2RlZmluZSBSUl9BUFAJCQkJMHgwNCAvKiBhbGFybWluZyBwcmVzZW5jZSBvbiByZXNldCAqLworI2RlZmluZSBSUl9WUFAJCQkJMHgwOCAvKiAxMlYgZXhwZWN0ZWQgbm90IHNlZW4gKi8KKyNkZWZpbmUgUlJfQ01QCQkJCTB4MTAgLyogY29tcGFyZSBlcnJvciAqLworI2RlZmluZSBSUl9DUkMJCQkJMHgyMCAvKiBDUkMgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUlJfUkRQCQkJCTB4NDAgLyogcmVkaXJlY3RlZCBwYWdlICovCisjZGVmaW5lIFJSX0VPUwkJCQkweDgwIC8qIGVuZCBvZiBzZWFyY2ggZXJyb3IgKi8KKwogI2RlZmluZSBTUEVFRF9OT1JNQUwJCQkweDAwCiAjZGVmaW5lIFNQRUVEX0ZMRVhJQkxFCQkJMHgwMQogI2RlZmluZSBTUEVFRF9PVkVSRFJJVkUJCQkweDAyCkBAIC0xMzEsNiArMTM3LDE1IEBACiAKIAlpbnQJCQllcFtOVU1fRVBdOwogCisJLyogU3Ryb25nIFB1bGxVcAorCSAqIDA6IHB1bGx1cCBub3QgYWN0aXZlLCBlbHNlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcworCSAqLworCWludAkJCXNwdV9zbGVlcDsKKwkvKiBzcHVfYml0IGNvbnRhaW5zIENPTU1fU1BVIG9yIDAgZGVwZW5kaW5nIG9uIGlmIHRoZSBzdHJvbmcgcHVsbHVwCisJICogc2hvdWxkIGJlIGFjdGl2ZSBvciBub3QgZm9yIHdyaXRlcy4KKwkgKi8KKwl1MTYJCQlzcHVfYml0OworCiAJc3RydWN0IHcxX2J1c19tYXN0ZXIJbWFzdGVyOwogfTsKIApAQCAtMTY0LDcgKzE3OSw2IEBACiBzdGF0aWMgaW50IGRzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICopOwogc3RhdGljIHZvaWQgZHNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRzX2R1bXBfc3RhdHVzKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogc3RhdGljIGludCBkc19zZW5kX2NvbnRyb2woc3RydWN0IGRzX2RldmljZSAqLCB1MTYsIHUxNik7CiBzdGF0aWMgaW50IGRzX3NlbmRfY29udHJvbF9jbWQoc3RydWN0IGRzX2RldmljZSAqLCB1MTYsIHUxNik7CiAKQEAgLTE5Miw3ICsyMDYsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSNpZiAwCisKIHN0YXRpYyBpbnQgZHNfc2VuZF9jb250cm9sX21vZGUoc3RydWN0IGRzX2RldmljZSAqZGV2LCB1MTYgdmFsdWUsIHUxNiBpbmRleCkKIHsKIAlpbnQgZXJyOwpAQCAtMjA3LDcgKzIyMSw3IEBACiAKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCisKIHN0YXRpYyBpbnQgZHNfc2VuZF9jb250cm9sKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCiB7CiAJaW50IGVycjsKQEAgLTIyMywxMSArMjM3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHNfZHVtcF9zdGF0dXModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCBvZmYpCi17Ci0JcHJpbnRrKCIlNDVzOiAlOHhcbiIsIHN0ciwgYnVmW29mZl0pOwotfQotCiBzdGF0aWMgaW50IGRzX3JlY3Zfc3RhdHVzX25vZHVtcChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHN0cnVjdCBkc19zdGF0dXMgKnN0LAogCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMjQ4LDYyICsyNTcsODEgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgZHNfcmVjdl9zdGF0dXMoc3RydWN0IGRzX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNfc3RhdHVzICpzdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc19wcmludF9tc2codW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCBvZmYpCiB7Ci0JdW5zaWduZWQgY2hhciBidWZbNjRdOwotCWludCBjb3VudCwgZXJyID0gMCwgaTsKKwlwcmludGsoS0VSTl9JTkZPICIlNDVzOiAlOHhcbiIsIHN0ciwgYnVmW29mZl0pOworfQogCi0JbWVtY3B5KHN0LCBidWYsIHNpemVvZigqc3QpKTsKK3N0YXRpYyB2b2lkIGRzX2R1bXBfc3RhdHVzKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IGk7CiAKLQljb3VudCA9IGRzX3JlY3Zfc3RhdHVzX25vZHVtcChkZXYsIHN0LCBidWYsIHNpemVvZihidWYpKTsKLQlpZiAoY291bnQgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JcHJpbnRrKCIweCV4OiBjb3VudD0lZCwgc3RhdHVzOiAiLCBkZXYtPmVwW0VQX1NUQVRVU10sIGNvdW50KTsKKwlwcmludGsoS0VSTl9JTkZPICIweCV4OiBjb3VudD0lZCwgc3RhdHVzOiAiLCBkZXYtPmVwW0VQX1NUQVRVU10sIGNvdW50KTsKIAlmb3IgKGk9MDsgaTxjb3VudDsgKytpKQogCQlwcmludGsoIiUwMnggIiwgYnVmW2ldKTsKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCWlmIChjb3VudCA+PSAxNikgewotCQlkc19kdW1wX3N0YXR1cyhidWYsICJlbmFibGUgZmxhZyIsIDApOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICIxLXdpcmUgc3BlZWQiLCAxKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAic3Ryb25nIHB1bGx1cCBkdXJhdGlvbiIsIDIpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJwcm9ncmFtbWluZyBwdWxzZSBkdXJhdGlvbiIsIDMpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJwdWxsZG93biBzbGV3IHJhdGUgY29udHJvbCIsIDQpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJ3cml0ZS0xIGxvdyB0aW1lIiwgNSk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgImRhdGEgc2FtcGxlIG9mZnNldC93cml0ZS0wIHJlY292ZXJ5IHRpbWUiLCA2KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicmVzZXJ2ZWQgKHRlc3QgcmVnaXN0ZXIpIiwgNyk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgImRldmljZSBzdGF0dXMgZmxhZ3MiLCA4KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ5dGUgMSIsIDkpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJjb21tdW5pY2F0aW9uIGNvbW1hbmQgYnl0ZSAyIiwgMTApOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJjb21tdW5pY2F0aW9uIGNvbW1hbmQgYnVmZmVyIHN0YXR1cyIsIDExKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiMS13aXJlIGRhdGEgb3V0cHV0IGJ1ZmZlciBzdGF0dXMiLCAxMik7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgIjEtd2lyZSBkYXRhIGlucHV0IGJ1ZmZlciBzdGF0dXMiLCAxMyk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgInJlc2VydmVkIiwgMTQpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJyZXNlcnZlZCIsIDE1KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImVuYWJsZSBmbGFnIiwgMCk7CisJCWRzX3ByaW50X21zZyhidWYsICIxLXdpcmUgc3BlZWQiLCAxKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgInN0cm9uZyBwdWxsdXAgZHVyYXRpb24iLCAyKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgInByb2dyYW1taW5nIHB1bHNlIGR1cmF0aW9uIiwgMyk7CisJCWRzX3ByaW50X21zZyhidWYsICJwdWxsZG93biBzbGV3IHJhdGUgY29udHJvbCIsIDQpOworCQlkc19wcmludF9tc2coYnVmLCAid3JpdGUtMSBsb3cgdGltZSIsIDUpOworCQlkc19wcmludF9tc2coYnVmLCAiZGF0YSBzYW1wbGUgb2Zmc2V0L3dyaXRlLTAgcmVjb3ZlcnkgdGltZSIsCisJCQk2KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgInJlc2VydmVkICh0ZXN0IHJlZ2lzdGVyKSIsIDcpOworCQlkc19wcmludF9tc2coYnVmLCAiZGV2aWNlIHN0YXR1cyBmbGFncyIsIDgpOworCQlkc19wcmludF9tc2coYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ5dGUgMSIsIDkpOworCQlkc19wcmludF9tc2coYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ5dGUgMiIsIDEwKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBidWZmZXIgc3RhdHVzIiwgMTEpOworCQlkc19wcmludF9tc2coYnVmLCAiMS13aXJlIGRhdGEgb3V0cHV0IGJ1ZmZlciBzdGF0dXMiLCAxMik7CisJCWRzX3ByaW50X21zZyhidWYsICIxLXdpcmUgZGF0YSBpbnB1dCBidWZmZXIgc3RhdHVzIiwgMTMpOworCQlkc19wcmludF9tc2coYnVmLCAicmVzZXJ2ZWQiLCAxNCk7CisJCWRzX3ByaW50X21zZyhidWYsICJyZXNlcnZlZCIsIDE1KTsKIAl9Ci0KLQltZW1jcHkoc3QsIGJ1Ziwgc2l6ZW9mKCpzdCkpOwotCi0JaWYgKHN0LT5zdGF0dXMgJiBTVF9FUE9GKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlJlc2V0dGluZyBkZXZpY2UgYWZ0ZXIgU1RfRVBPRi5cbiIpOwotCQllcnIgPSBkc19zZW5kX2NvbnRyb2xfY21kKGRldiwgQ1RMX1JFU0VUX0RFVklDRSwgMCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQljb3VudCA9IGRzX3JlY3Zfc3RhdHVzX25vZHVtcChkZXYsIHN0LCBidWYsIHNpemVvZihidWYpKTsKLQkJaWYgKGNvdW50IDwgMCkKLQkJCXJldHVybiBlcnI7CisJZm9yIChpID0gMTY7IGkgPCBjb3VudDsgKytpKSB7CisJCWlmIChidWZbaV0gPT0gUlJfREVURUNUKSB7CisJCQlkc19wcmludF9tc2coYnVmLCAibmV3IGRldmljZSBkZXRlY3QiLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRzX3ByaW50X21zZyhidWYsICJSZXN1bHQgUmVnaXN0ZXIgVmFsdWU6ICIsIGkpOworCQlpZiAoYnVmW2ldICYgUlJfTlJTKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiTlJTOiBSZXNldCBubyBwcmVzZW5jZSBvciAuLi5cbiIpOworCQlpZiAoYnVmW2ldICYgUlJfU0gpCisJCQlwcmludGsoS0VSTl9JTkZPICJTSDogc2hvcnQgb24gcmVzZXQgb3Igc2V0IHBhdGhcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfQVBQKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQVBQOiBhbGFybWluZyBwcmVzZW5jZSBvbiByZXNldFxuIik7CisJCWlmIChidWZbaV0gJiBSUl9WUFApCisJCQlwcmludGsoS0VSTl9JTkZPICJWUFA6IDEyViBleHBlY3RlZCBub3Qgc2VlblxuIik7CisJCWlmIChidWZbaV0gJiBSUl9DTVApCisJCQlwcmludGsoS0VSTl9JTkZPICJDTVA6IGNvbXBhcmUgZXJyb3JcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfQ1JDKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JDOiBDUkMgZXJyb3IgZGV0ZWN0ZWRcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfUkRQKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUkRQOiByZWRpcmVjdGVkIHBhZ2VcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfRU9TKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiRU9TOiBlbmQgb2Ygc2VhcmNoIGVycm9yXG4iKTsKIAl9Ci0jaWYgMAotCWlmIChzdC0+c3RhdHVzICYgU1RfSURMRSkgewotCQlwcmludGsoS0VSTl9JTkZPICJSZXNldHRpbmcgcHVsc2UgYWZ0ZXIgU1RfSURMRS5cbiIpOwotCQllcnIgPSBkc19zdGFydF9wdWxzZShkZXYsIFBVTExVUF9QVUxTRV9EVVJBVElPTik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLSNlbmRpZgorfQogCi0JcmV0dXJuIGVycjsKK3N0YXRpYyB2b2lkIGRzX3Jlc2V0X2RldmljZShzdHJ1Y3QgZHNfZGV2aWNlICpkZXYpCit7CisJZHNfc2VuZF9jb250cm9sX2NtZChkZXYsIENUTF9SRVNFVF9ERVZJQ0UsIDApOworCS8qIEFsd2F5cyBhbGxvdyBzdHJvbmcgcHVsbHVwIHdoaWNoIGFsbG93IGluZGl2aWR1YWwgd3JpdGVzIHRvIHVzZQorCSAqIHRoZSBzdHJvbmcgcHVsbHVwLgorCSAqLworCWlmIChkc19zZW5kX2NvbnRyb2xfbW9kZShkZXYsIE1PRF9QVUxTRV9FTiwgUFVMU0VfU1BVRSkpCisJCXByaW50ayhLRVJOX0VSUiAiZHNfcmVzZXRfZGV2aWNlOiAiCisJCQkiRXJyb3IgYWxsb3dpbmcgc3Ryb25nIHB1bGx1cFxuIik7CisJLyogQ2hpcCBzdHJvbmcgcHVsbHVwIHRpbWUgd2FzIGNsZWFyZWQuICovCisJaWYgKGRldi0+c3B1X3NsZWVwKSB7CisJCS8qIGxvd2VyIDQgYml0cyBhcmUgMCwgc2VlIGRzX3NldF9wdWxsdXAgKi8KKwkJdTggZGVsID0gZGV2LT5zcHVfc2xlZXA+PjQ7CisJCWlmIChkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX1NFVF9EVVJBVElPTiB8IENPTU1fSU0sIGRlbCkpCisJCQlwcmludGsoS0VSTl9FUlIgImRzX3Jlc2V0X2RldmljZTogIgorCQkJCSJFcnJvciBzZXR0aW5nIGR1cmF0aW9uXG4iKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgZHNfcmVjdl9kYXRhKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKQEAgLTMxMSwxMyArMzM5LDI3IEBACiAJaW50IGNvdW50LCBlcnI7CiAJc3RydWN0IGRzX3N0YXR1cyBzdDsKIAorCS8qIENhcmVmdWwgb24gc2l6ZS4gIElmIHNpemUgaXMgbGVzcyB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlIGluCisJICogdGhlIGlucHV0IGJ1ZmZlciwgdGhlIGRldmljZSBmYWlscyB0aGUgYnVsayB0cmFuc2ZlciBhbmQKKwkgKiBjbGVhcnMgdGhlIGlucHV0IGJ1ZmZlci4gIEl0IGNvdWxkIHJlYWQgdGhlIG1heGltdW0gc2l6ZSBvZgorCSAqIHRoZSBkYXRhIGJ1ZmZlciwgYnV0IHRoZW4gZG8geW91IHJldHVybiB0aGUgZmlyc3QsIGxhc3QsIG9yCisJICogc29tZSBzZXQgb2YgdGhlIG1pZGRsZSBzaXplIGJ5dGVzPyAgQXMgbG9uZyBhcyB0aGUgcmVzdCBvZgorCSAqIHRoZSBjb2RlIGlzIGNvcnJlY3QgdGhlcmUgd2lsbCBiZSBzaXplIGJ5dGVzIHdhaXRpbmcuICBBCisJICogY2FsbCB0byBkc193YWl0X3N0YXR1cyB3aWxsIHdhaXQgdW50aWwgdGhlIGRldmljZSBpcyBpZGxlCisJICogYW5kIGFueSBkYXRhIHRvIGJlIHJlY2VpdmVkIHdvdWxkIGhhdmUgYmVlbiBhdmFpbGFibGUuCisJICovCiAJY291bnQgPSAwOwogCWVyciA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+ZXBbRVBfREFUQV9JTl0pLAogCQkJCWJ1Ziwgc2l6ZSwgJmNvdW50LCAxMDAwKTsKIAlpZiAoZXJyIDwgMCkgeworCQl1OCBidWZbMHgyMF07CisJCWludCBjb3VudDsKKwogCQlwcmludGsoS0VSTl9JTkZPICJDbGVhcmluZyBlcDB4JXguXG4iLCBkZXYtPmVwW0VQX0RBVEFfSU5dKTsKIAkJdXNiX2NsZWFyX2hhbHQoZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmVwW0VQX0RBVEFfSU5dKSk7Ci0JCWRzX3JlY3Zfc3RhdHVzKGRldiwgJnN0KTsKKworCQljb3VudCA9IGRzX3JlY3Zfc3RhdHVzX25vZHVtcChkZXYsICZzdCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWRzX2R1bXBfc3RhdHVzKGRldiwgYnVmLCBjb3VudCk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0zNDEsNyArMzgzLDggQEAKIAljb3VudCA9IDA7CiAJZXJyID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5lcFtFUF9EQVRBX09VVF0pLCBidWYsIGxlbiwgJmNvdW50LCAxMDAwKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWFkIDEtd2lyZSBkYXRhIGZyb20gMHgwMjogZXJyPSVkLlxuIiwgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gd3JpdGUgMS13aXJlIGRhdGEgdG8gZXAweCV4OiAiCisJCQkiZXJyPSVkLlxuIiwgZGV2LT5lcFtFUF9EQVRBX09VVF0sIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0zOTcsNyArNDQwLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gZHNfcmVjdl9zdGF0dXMoZGV2LCBzdCk7CisJZXJyID0gZHNfZHVtcF9zdGF0dXMoZGV2LCBzdCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDIwLDMzICs0NjMsNDkgQEAKIAkJCXByaW50aygiXG4iKTsKIAkJfQogI2VuZGlmCi0JfSB3aGlsZSghKGJ1ZlsweDA4XSAmIDB4MjApICYmICEoZXJyIDwgMCkgJiYgKytjb3VudCA8IDEwMCk7CisJfSB3aGlsZSAoIShidWZbMHgwOF0gJiBTVF9JRExFKSAmJiAhKGVyciA8IDApICYmICsrY291bnQgPCAxMDApOwogCisJaWYgKGVyciA+PSAxNiAmJiBzdC0+c3RhdHVzICYgU1RfRVBPRikgeworCQlwcmludGsoS0VSTl9JTkZPICJSZXNldHRpbmcgZGV2aWNlIGFmdGVyIFNUX0VQT0YuXG4iKTsKKwkJZHNfcmVzZXRfZGV2aWNlKGRldik7CisJCS8qIEFsd2F5cyBkdW1wIHRoZSBkZXZpY2Ugc3RhdHVzLiAqLworCQljb3VudCA9IDEwMTsKKwl9CiAKLQlpZiAoKChlcnIgPiAxNikgJiYgKGJ1ZlsweDEwXSAmIDB4MDEpKSB8fCBjb3VudCA+PSAxMDAgfHwgZXJyIDwgMCkgewotCQlkc19yZWN2X3N0YXR1cyhkZXYsIHN0KTsKKwkvKiBEdW1wIHRoZSBzdGF0dXMgZm9yIGVycm9ycyBvciBpZiB0aGVyZSBpcyBleHRlbmRlZCByZXR1cm4gZGF0YS4KKwkgKiBUaGUgZXh0ZW5kZWQgc3RhdHVzIGluY2x1ZGVzIG5ldyBkZXZpY2UgZGV0ZWN0aW9uIChtYXliZSBzb21lb25lCisJICogY2FuIGRvIHNvbWV0aGluZyB3aXRoIGl0KS4KKwkgKi8KKwlpZiAoZXJyID4gMTYgfHwgY291bnQgPj0gMTAwIHx8IGVyciA8IDApCisJCWRzX2R1bXBfc3RhdHVzKGRldiwgYnVmLCBlcnIpOworCisJLyogRXh0ZW5kZWQgZGF0YSBpc24ndCBhbiBlcnJvci4gIFdlbGwsIGEgc2hvcnQgaXMsIGJ1dCB0aGUgZHVtcAorCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSB0b2xkIHRoZSB1c2VyIHRoYXQgYW5kIHdlIGNhbid0IGRvIGFueXRoaW5nCisJICogYWJvdXQgaXQgaW4gc29mdHdhcmUgYW55d2F5LgorCSAqLworCWlmIChjb3VudCA+PSAxMDAgfHwgZXJyIDwgMCkKIAkJcmV0dXJuIC0xOwotCX0gZWxzZQorCWVsc2UKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHNfcmVzZXQoc3RydWN0IGRzX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNfc3RhdHVzICpzdCkKK3N0YXRpYyBpbnQgZHNfcmVzZXQoc3RydWN0IGRzX2RldmljZSAqZGV2KQogewogCWludCBlcnI7CiAKLQkvL2VyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fMV9XSVJFX1JFU0VUIHwgQ09NTV9GIHwgQ09NTV9JTSB8IENPTU1fU0UsIFNQRUVEX0ZMRVhJQkxFKTsKLQllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCAweDQzLCBTUEVFRF9OT1JNQUwpOworCS8qIE90aGVyIHBvdGVudGlvbmFsbHkgaW50ZXJlc3RpbmcgZmxhZ3MgZm9yIHJlc2V0LgorCSAqCisJICogQ09NTV9OVEY6IFJldHVybiByZXN1bHQgcmVnaXN0ZXIgZmVlZGJhY2suICBUaGlzIGNvdWxkIGJlIHVzZWQgdG8KKwkgKiBkZXRlY3Qgc29tZSBjb25kaXRpb25zIHN1Y2ggYXMgc2hvcnQsIGFsYXJtaW5nIHByZXNlbmNlLCBvcgorCSAqIGRldGVjdCBpZiBhIG5ldyBkZXZpY2Ugd2FzIGRldGVjdGVkLgorCSAqCisJICogQ09NTV9TRSB3aGljaCBhbGxvd3MgU1BFRURfTk9STUFMLCBTUEVFRF9GTEVYSUJMRSwgU1BFRURfT1ZFUkRSSVZFOgorCSAqIFNlbGVjdCB0aGUgZGF0YSB0cmFuc2ZlciByYXRlLgorCSAqLworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fMV9XSVJFX1JFU0VUIHwgQ09NTV9JTSwgU1BFRURfTk9STUFMKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZHNfd2FpdF9zdGF0dXMoZGV2LCBzdCk7Ci0jaWYgMAotCWlmIChzdC0+Y29tbWFuZF9idWZmZXJfc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNob3J0IGNpcmN1aXQuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDcxLDYwICs1MzAsNDMgQEAKIH0KICNlbmRpZiAgLyogIDAgICovCiAKLXN0YXRpYyBpbnQgZHNfc3RhcnRfcHVsc2Uoc3RydWN0IGRzX2RldmljZSAqZGV2LCBpbnQgZGVsYXkpCitzdGF0aWMgaW50IGRzX3NldF9wdWxsdXAoc3RydWN0IGRzX2RldmljZSAqZGV2LCBpbnQgZGVsYXkpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAl1OCBkZWwgPSAxICsgKHU4KShkZWxheSA+PiA0KTsKLQlzdHJ1Y3QgZHNfc3RhdHVzIHN0OworCS8qIEp1c3Qgc3RvcmluZyBkZWxheSB3b3VsZCBub3QgZ2V0IHRoZSB0cnVuaWNhdGlvbiBhbmQgcm91bmR1cC4gKi8KKwlpbnQgbXMgPSBkZWw8PDQ7CiAKLSNpZiAwCi0JZXJyID0gZHNfc3RvcF9wdWxzZShkZXYsIDEwKTsKLQlpZiAoZXJyKQorCS8qIEVuYWJsZSBzcHVfYml0IGlmIGEgZGVsYXkgaXMgc2V0LiAqLworCWRldi0+c3B1X2JpdCA9IGRlbGF5ID8gQ09NTV9TUFUgOiAwOworCS8qIElmIGRlbGF5IGlzIHplcm8sIGl0IGhhcyBhbHJlYWR5IGJlZW4gZGlzYWJsZWQsIGlmIHRoZSB0aW1lIGlzCisJICogdGhlIHNhbWUgYXMgdGhlIGhhcmR3YXJlIHdhcyBsYXN0IHByb2dyYW1tZWQgdG8sIHRoZXJlIGlzIGFsc28KKwkgKiBub3RoaW5nIG1vcmUgdG8gZG8uICBDb21wYXJlIHdpdGggdGhlIHJlY2FsY3VsYXRlZCB2YWx1ZSBtcworCSAqIHJhdGhlciB0aGFuIGRlbCBvciBkZWxheSB3aGljaCBjYW4gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZS4KKwkgKi8KKwlpZiAoZGVsYXkgPT0gMCB8fCBtcyA9PSBkZXYtPnNwdV9zbGVlcCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbF9tb2RlKGRldiwgTU9EX1BVTFNFX0VOLCBQVUxTRV9TUFVFKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotI2VuZGlmCiAJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9TRVRfRFVSQVRJT04gfCBDT01NX0lNLCBkZWwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX1BVTFNFIHwgQ09NTV9JTSB8IENPTU1fRiwgMCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCW1kZWxheShkZWxheSk7Ci0KLQlkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7CisJZGV2LT5zcHVfc2xlZXAgPSBtczsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZHNfdG91Y2hfYml0KHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdTggYml0LCB1OCAqdGJpdCkKIHsKLQlpbnQgZXJyLCBjb3VudDsKKwlpbnQgZXJyOwogCXN0cnVjdCBkc19zdGF0dXMgc3Q7Ci0JdTE2IHZhbHVlID0gKENPTU1fQklUX0lPIHwgQ09NTV9JTSkgfCAoKGJpdCkgPyBDT01NX0QgOiAwKTsKLQl1MTYgY21kOwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgdmFsdWUsIDApOworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQklUX0lPIHwgQ09NTV9JTSB8IChiaXQgPyBDT01NX0QgOiAwKSwKKwkJMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWNvdW50ID0gMDsKLQlkbyB7Ci0JCWVyciA9IGRzX3dhaXRfc3RhdHVzKGRldiwgJnN0KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJY21kID0gc3QuY29tbWFuZDAgfCAoc3QuY29tbWFuZDEgPDwgOCk7Ci0JfSB3aGlsZSAoY21kICE9IHZhbHVlICYmICsrY291bnQgPCAxMCk7Ci0KLQlpZiAoZXJyIDwgMCB8fCBjb3VudCA+PSAxMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBvYnRhaW4gc3RhdHVzLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7CiAKIAllcnIgPSBkc19yZWN2X2RhdGEoZGV2LCB0Yml0LCBzaXplb2YoKnRiaXQpKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTUzMywxMiArNTc1LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiAwCiBzdGF0aWMgaW50IGRzX3dyaXRlX2JpdChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHU4IGJpdCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JJVF9JTyB8IENPTU1fSU0gfCAoYml0KSA/IENPTU1fRCA6IDAsIDApOworCS8qIFNldCBDT01NX0lDUCB0byB3cml0ZSB3aXRob3V0IGEgcmVhZGJhY2suICBOb3RlLCB0aGlzIHdpbGwKKwkgKiBwcm9kdWNlIG9uZSB0aW1lIHNsb3QsIGEgZG93biBmb2xsb3dlZCBieSBhbiB1cCB3aXRoIENPTU1fRAorCSAqIG9ubHkgZGV0ZXJtaW5nIHRoZSB0aW1pbmcuCisJICovCisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CSVRfSU8gfCBDT01NX0lNIHwgQ09NTV9JQ1AgfAorCQkoYml0ID8gQ09NTV9EIDogMCksIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU0Niw2ICs1OTQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBkc193cml0ZV9ieXRlKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdTggYnl0ZSkKIHsKQEAgLTU1MywxMCArNjAyLDEzIEBACiAJc3RydWN0IGRzX3N0YXR1cyBzdDsKIAl1OCByYnl0ZTsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQllURV9JTyB8IENPTU1fSU0gfCBDT01NX1NQVSwgYnl0ZSk7CisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CWVRFX0lPIHwgQ09NTV9JTSB8IGRldi0+c3B1X2JpdCwgYnl0ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChkZXYtPnNwdV9iaXQpCisJCW1zbGVlcChkZXYtPnNwdV9zbGVlcCk7CisKIAllcnIgPSBkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTU2NSw4ICs2MTcsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZHNfc3RhcnRfcHVsc2UoZGV2LCBQVUxMVVBfUFVMU0VfRFVSQVRJT04pOwotCiAJcmV0dXJuICEoYnl0ZSA9PSByYnl0ZSk7CiB9CiAKQEAgLTYwMiw3ICs2NTIsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0gfCBDT01NX1NQVSwgbGVuKTsKKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JMT0NLX0lPIHwgQ09NTV9JTSwgbGVuKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02MjMsMjAgKzY3MywxOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOwotCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0gfCBDT01NX1NQVSwgbGVuKTsKKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JMT0NLX0lPIHwgQ09NTV9JTSB8IGRldi0+c3B1X2JpdCwgbGVuKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKGRldi0+c3B1X2JpdCkKKwkJbXNsZWVwKGRldi0+c3B1X3NsZWVwKTsKKwogCWRzX3dhaXRfc3RhdHVzKGRldiwgJnN0KTsKIAogCWVyciA9IGRzX3JlY3ZfZGF0YShkZXYsIGJ1ZiwgbGVuKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRzX3N0YXJ0X3B1bHNlKGRldiwgUFVMTFVQX1BVTFNFX0RVUkFUSU9OKTsKLQogCXJldHVybiAhKGVyciA9PSBsZW4pOwogfQogCkBAIC03MjgsNiArNzc3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgMAogc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9iaXQodm9pZCAqZGF0YSwgdTggYml0KQogewogCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CkBAIC03MzUsMTMgKzc4NSw2IEBACiAJZHNfd3JpdGVfYml0KGRldiwgYml0KTsKIH0KIAotc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9ieXRlKHZvaWQgKmRhdGEsIHU4IGJ5dGUpCi17Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKLQotCWRzX3dyaXRlX2J5dGUoZGV2LCBieXRlKTsKLX0KLQogc3RhdGljIHU4IGRzOTQ5MHJfcmVhZF9iaXQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwpAQCAtNzU0LDYgKzc5NywxNCBAQAogCiAJcmV0dXJuIGJpdCAmIDE7CiB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9ieXRlKHZvaWQgKmRhdGEsIHU4IGJ5dGUpCit7CisJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKKworCWRzX3dyaXRlX2J5dGUoZGV2LCBieXRlKTsKK30KIAogc3RhdGljIHU4IGRzOTQ5MHJfcmVhZF9ieXRlKHZvaWQgKmRhdGEpCiB7CkBAIC03OTAsMzEgKzg0MSw1OCBAQAogc3RhdGljIHU4IGRzOTQ5MHJfcmVzZXQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAJaW50IGVycjsKIAotCW1lbXNldCgmc3QsIDAsIHNpemVvZihzdCkpOwotCi0JZXJyID0gZHNfcmVzZXQoZGV2LCAmc3QpOworCWVyciA9IGRzX3Jlc2V0KGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU4IGRzOTQ5MHJfc2V0X3B1bGx1cCh2b2lkICpkYXRhLCBpbnQgZGVsYXkpCit7CisJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKKworCWlmIChkc19zZXRfcHVsbHVwKGRldiwgZGVsYXkpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRzX3cxX2luaXQoc3RydWN0IGRzX2RldmljZSAqZGV2KQogewogCW1lbXNldCgmZGV2LT5tYXN0ZXIsIDAsIHNpemVvZihzdHJ1Y3QgdzFfYnVzX21hc3RlcikpOwogCisJLyogUmVzZXQgdGhlIGRldmljZSBhcyBpdCBjYW4gYmUgaW4gYSBiYWQgc3RhdGUuCisJICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBhIGJsb2NrIHdyaXRlIHdpbGwgd2FpdCBmb3IgZGF0YQorCSAqIHRvIGJlIHBsYWNlZCBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgYmxvY2sgYW55IGxhdGVyCisJICogY29tbWFuZHMgd2hpY2ggd2lsbCBrZWVwIGFjY3VtdWxhdGluZyBhbmQgdGhlIGRldmljZSB3aWxsCisJICogbm90IGJlIGlkbGUuICBBbm90aGVyIGNhc2UgaXMgcmVtb3ZpbmcgdGhlIGRzMjQ5MCBtb2R1bGUKKwkgKiB3aGlsZSBhIGJ1cyBzZWFyY2ggaXMgaW4gcHJvZ3Jlc3MsIHNvbWVob3cgYSBmZXcgY29tbWFuZHMKKwkgKiBnZXQgdGhyb3VnaCwgYnV0IHRoZSBpbnB1dCB0cmFuc2ZlcnMgZmFpbCBsZWF2aW5nIGRhdGEgaW4KKwkgKiB0aGUgaW5wdXQgYnVmZmVyLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBuZXh0IHJlYWQgdG8gZmFpbAorCSAqIHNlZSB0aGUgbm90ZSBpbiBkc19yZWN2X2RhdGEuCisJICovCisJZHNfcmVzZXRfZGV2aWNlKGRldik7CisKIAlkZXYtPm1hc3Rlci5kYXRhCT0gZGV2OwogCWRldi0+bWFzdGVyLnRvdWNoX2JpdAk9ICZkczk0OTByX3RvdWNoX2JpdDsKKwkvKiByZWFkX2JpdCBhbmQgd3JpdGVfYml0IGluIHcxX2J1c19tYXN0ZXIgYXJlIGV4cGVjdGVkIHRvIHNldCBhbmQKKwkgKiBzYW1wbGUgdGhlIGxpbmUgbGV2ZWwuICBGb3Igd3JpdGVfYml0IHRoYXQgbWVhbnMgaXQgaXMgZXhwZWN0ZWQgdG8KKwkgKiBzZXQgaXQgdG8gdGhhdCB2YWx1ZSBhbmQgbGVhdmUgaXQgdGhlcmUuICBkczI0OTAgb25seSBzdXBwb3J0cyBhbgorCSAqIGluZGl2aWR1YWwgdGltZSBzbG90IGF0IHRoZSBsb3dlc3QgbGV2ZWwuICBUaGUgcmVxdWlyZW1lbnQgZnJvbQorCSAqIHB1bGxpbmcgdGhlIGJ1cyBzdGF0ZSBkb3duIHRvIHJlYWRpbmcgdGhlIHN0YXRlIGlzIDE1dXMsIHNvbWV0aGluZworCSAqIHRoYXQgaXNuJ3QgcmVhbGlzdGljIG9uIHRoZSBVU0IgYnVzIGFueXdheS4KIAlkZXYtPm1hc3Rlci5yZWFkX2JpdAk9ICZkczk0OTByX3JlYWRfYml0OwogCWRldi0+bWFzdGVyLndyaXRlX2JpdAk9ICZkczk0OTByX3dyaXRlX2JpdDsKKwkqLwogCWRldi0+bWFzdGVyLnJlYWRfYnl0ZQk9ICZkczk0OTByX3JlYWRfYnl0ZTsKIAlkZXYtPm1hc3Rlci53cml0ZV9ieXRlCT0gJmRzOTQ5MHJfd3JpdGVfYnl0ZTsKIAlkZXYtPm1hc3Rlci5yZWFkX2Jsb2NrCT0gJmRzOTQ5MHJfcmVhZF9ibG9jazsKIAlkZXYtPm1hc3Rlci53cml0ZV9ibG9jawk9ICZkczk0OTByX3dyaXRlX2Jsb2NrOwogCWRldi0+bWFzdGVyLnJlc2V0X2J1cwk9ICZkczk0OTByX3Jlc2V0OworCWRldi0+bWFzdGVyLnNldF9wdWxsdXAJPSAmZHM5NDkwcl9zZXRfcHVsbHVwOwogCiAJcmV0dXJuIHcxX2FkZF9tYXN0ZXJfZGV2aWNlKCZkZXYtPm1hc3Rlcik7CiB9CkBAIC04MzgsNiArOTE2LDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBEUzk0OTBSIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJZGV2LT5zcHVfc2xlZXAgPSAwOworCWRldi0+c3B1X2JpdCA9IDA7CiAJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CiAJaWYgKCFkZXYtPnVkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMS5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNDMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2YzBjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMS5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogdzFfZHMyNDMxLmMgLSB3MSBmYW1pbHkgMmQgKERTMjQzMSkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEJlcm5oYXJkIFdlaXJpY2ggPGJlcm5oYXJkLndlaXJpY2hAcmllZGVsLm5ldD4KKyAqCisgKiBIZWF2aWx5IGluc3BpcmVkIGJ5IHcxX0RTMjQzMyBkcml2ZXIgZnJvbSBCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIFZlcnNpb24gMi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICIuLi93MS5oIgorI2luY2x1ZGUgIi4uL3cxX2ludC5oIgorI2luY2x1ZGUgIi4uL3cxX2ZhbWlseS5oIgorCisjZGVmaW5lIFcxX0YyRF9FRVBST01fU0laRQkJMTI4CisjZGVmaW5lIFcxX0YyRF9QQUdFX0NPVU5UCQk0CisjZGVmaW5lIFcxX0YyRF9QQUdFX0JJVFMJCTUKKyNkZWZpbmUgVzFfRjJEX1BBR0VfU0laRQkJKDE8PFcxX0YyRF9QQUdFX0JJVFMpCisjZGVmaW5lIFcxX0YyRF9QQUdFX01BU0sJCTB4MUYKKworI2RlZmluZSBXMV9GMkRfU0NSQVRDSF9CSVRTICAzCisjZGVmaW5lIFcxX0YyRF9TQ1JBVENIX1NJWkUgICgxPDxXMV9GMkRfU0NSQVRDSF9CSVRTKQorI2RlZmluZSBXMV9GMkRfU0NSQVRDSF9NQVNLICAoVzFfRjJEX1NDUkFUQ0hfU0laRS0xKQorCisjZGVmaW5lIFcxX0YyRF9SRUFEX0VFUFJPTQkweEYwCisjZGVmaW5lIFcxX0YyRF9XUklURV9TQ1JBVENICTB4MEYKKyNkZWZpbmUgVzFfRjJEX1JFQURfU0NSQVRDSAkweEFBCisjZGVmaW5lIFcxX0YyRF9DT1BZX1NDUkFUQ0gJMHg1NQorCisKKyNkZWZpbmUgVzFfRjJEX1RQUk9HX01TCQkxMQorCisjZGVmaW5lIFcxX0YyRF9SRUFEX1JFVFJJRVMJCTEwCisjZGVmaW5lIFcxX0YyRF9SRUFEX01BWExFTgkJOAorCisvKgorICogQ2hlY2sgdGhlIGZpbGUgc2l6ZSBib3VuZHMgYW5kIGFkanVzdHMgY291bnQgYXMgbmVlZGVkLgorICogVGhpcyB3b3VsZCBub3QgYmUgbmVlZGVkIGlmIHRoZSBmaWxlIHNpemUgZGlkbid0IHJlc2V0IHRvIDAgYWZ0ZXIgYSB3cml0ZS4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QgdzFfZjJkX2ZpeF9jb3VudChsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplKQoreworCWlmIChvZmYgPiBzaXplKQorCQlyZXR1cm4gMDsKKworCWlmICgob2ZmICsgY291bnQpID4gc2l6ZSkKKwkJcmV0dXJuIHNpemUgLSBvZmY7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBSZWFkIGEgYmxvY2sgZnJvbSBXMSBST00gdHdvIHRpbWVzIGFuZCBjb21wYXJlcyB0aGUgcmVzdWx0cy4KKyAqIElmIHRoZXkgYXJlIGVxdWFsIHRoZXkgYXJlIHJldHVybmVkLCBvdGhlcndpc2UgdGhlIHJlYWQKKyAqIGlzIHJlcGVhdGVkIFcxX0YyRF9SRUFEX1JFVFJJRVMgdGltZXMuCisgKgorICogY291bnQgbXVzdCBub3QgZXhjZWVkIFcxX0YyRF9SRUFEX01BWExFTi4KKyAqLworc3RhdGljIGludCB3MV9mMmRfcmVhZGJsb2NrKHN0cnVjdCB3MV9zbGF2ZSAqc2wsIGludCBvZmYsIGludCBjb3VudCwgY2hhciAqYnVmKQoreworCXU4IHdyYnVmWzNdOworCXU4IGNtcFtXMV9GMkRfUkVBRF9NQVhMRU5dOworCWludCB0cmllcyA9IFcxX0YyRF9SRUFEX1JFVFJJRVM7CisKKwlkbyB7CisJCXdyYnVmWzBdID0gVzFfRjJEX1JFQURfRUVQUk9NOworCQl3cmJ1ZlsxXSA9IG9mZiAmIDB4ZmY7CisJCXdyYnVmWzJdID0gb2ZmID4+IDg7CisKKwkJaWYgKHcxX3Jlc2V0X3NlbGVjdF9zbGF2ZShzbCkpCisJCQlyZXR1cm4gLTE7CisKKwkJdzFfd3JpdGVfYmxvY2soc2wtPm1hc3Rlciwgd3JidWYsIDMpOworCQl3MV9yZWFkX2Jsb2NrKHNsLT5tYXN0ZXIsIGJ1ZiwgY291bnQpOworCisJCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQkJcmV0dXJuIC0xOworCisJCXcxX3dyaXRlX2Jsb2NrKHNsLT5tYXN0ZXIsIHdyYnVmLCAzKTsKKwkJdzFfcmVhZF9ibG9jayhzbC0+bWFzdGVyLCBjbXAsIGNvdW50KTsKKworCQlpZiAoIW1lbWNtcChjbXAsIGJ1ZiwgY291bnQpKQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAoLS10cmllcyk7CisKKwlkZXZfZXJyKCZzbC0+ZGV2LCAicHJvb2YgcmVhZGluZyBmYWlsZWQgJWQgdGltZXNcbiIsCisJCQlXMV9GMkRfUkVBRF9SRVRSSUVTKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHNzaXplX3QgdzFfZjJkX3JlYWRfYmluKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsID0ga29ial90b193MV9zbGF2ZShrb2JqKTsKKwlpbnQgdG9kbyA9IGNvdW50OworCisJY291bnQgPSB3MV9mMmRfZml4X2NvdW50KG9mZiwgY291bnQsIFcxX0YyRF9FRVBST01fU0laRSk7CisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmc2wtPm1hc3Rlci0+bXV0ZXgpOworCisJLyogcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBFRVBST00gaW4gY2h1bmtzIG9mIFcxX0YyRF9SRUFEX01BWExFTiAqLworCXdoaWxlICh0b2RvID4gMCkgeworCQlpbnQgYmxvY2tfcmVhZDsKKworCQlpZiAodG9kbyA+PSBXMV9GMkRfUkVBRF9NQVhMRU4pCisJCQlibG9ja19yZWFkID0gVzFfRjJEX1JFQURfTUFYTEVOOworCQllbHNlCisJCQlibG9ja19yZWFkID0gdG9kbzsKKworCQlpZiAodzFfZjJkX3JlYWRibG9jayhzbCwgb2ZmLCBibG9ja19yZWFkLCBidWYpIDwgMCkKKwkJCWNvdW50ID0gLUVJTzsKKworCQl0b2RvIC09IFcxX0YyRF9SRUFEX01BWExFTjsKKwkJYnVmICs9IFcxX0YyRF9SRUFEX01BWExFTjsKKwkJb2ZmICs9IFcxX0YyRF9SRUFEX01BWExFTjsKKwl9CisKKwltdXRleF91bmxvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFdyaXRlcyB0byB0aGUgc2NyYXRjaHBhZCBhbmQgcmVhZHMgaXQgYmFjayBmb3IgdmVyaWZpY2F0aW9uLgorICogVGhlbiBjb3BpZXMgdGhlIHNjcmF0Y2hwYWQgdG8gRUVQUk9NLgorICogVGhlIGRhdGEgbXVzdCBiZSBhbGlnbmVkIGF0IFcxX0YyRF9TQ1JBVENIX1NJWkUgYnl0ZXMgYW5kCisgKiBtdXN0IGJlIFcxX0YyRF9TQ1JBVENIX1NJWkUgYnl0ZXMgbG9uZy4KKyAqIFRoZSBtYXN0ZXIgbXVzdCBiZSBsb2NrZWQuCisgKgorICogQHBhcmFtIHNsCVRoZSBzbGF2ZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBhZGRyCUFkZHJlc3MgZm9yIHRoZSB3cml0ZQorICogQHBhcmFtIGxlbiAgIGxlbmd0aCBtdXN0IGJlIDw9IChXMV9GMkRfUEFHRV9TSVpFIC0gKGFkZHIgJiBXMV9GMkRfUEFHRV9NQVNLKSkKKyAqIEBwYXJhbSBkYXRhCVRoZSBkYXRhIHRvIHdyaXRlCisgKiBAcmV0dXJuCTA9U3VjY2VzcyAtMT1mYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgdzFfZjJkX3dyaXRlKHN0cnVjdCB3MV9zbGF2ZSAqc2wsIGludCBhZGRyLCBpbnQgbGVuLCBjb25zdCB1OCAqZGF0YSkKK3sKKwlpbnQgdHJpZXMgPSBXMV9GMkRfUkVBRF9SRVRSSUVTOworCXU4IHdyYnVmWzRdOworCXU4IHJkYnVmW1cxX0YyRF9TQ1JBVENIX1NJWkUgKyAzXTsKKwl1OCBlcyA9IChhZGRyICsgbGVuIC0gMSkgJSBXMV9GMkRfU0NSQVRDSF9TSVpFOworCityZXRyeToKKworCS8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBzY3JhdGNocGFkICovCisJaWYgKHcxX3Jlc2V0X3NlbGVjdF9zbGF2ZShzbCkpCisJCXJldHVybiAtMTsKKworCXdyYnVmWzBdID0gVzFfRjJEX1dSSVRFX1NDUkFUQ0g7CisJd3JidWZbMV0gPSBhZGRyICYgMHhmZjsKKwl3cmJ1ZlsyXSA9IGFkZHIgPj4gODsKKworCXcxX3dyaXRlX2Jsb2NrKHNsLT5tYXN0ZXIsIHdyYnVmLCAzKTsKKwl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCBkYXRhLCBsZW4pOworCisJLyogUmVhZCB0aGUgc2NyYXRjaHBhZCBhbmQgdmVyaWZ5ICovCisJaWYgKHcxX3Jlc2V0X3NlbGVjdF9zbGF2ZShzbCkpCisJCXJldHVybiAtMTsKKworCXcxX3dyaXRlXzgoc2wtPm1hc3RlciwgVzFfRjJEX1JFQURfU0NSQVRDSCk7CisJdzFfcmVhZF9ibG9jayhzbC0+bWFzdGVyLCByZGJ1ZiwgbGVuICsgMyk7CisKKwkvKiBDb21wYXJlIHdoYXQgd2FzIHJlYWQgYWdhaW5zdCB0aGUgZGF0YSB3cml0dGVuICovCisJaWYgKChyZGJ1ZlswXSAhPSB3cmJ1ZlsxXSkgfHwgKHJkYnVmWzFdICE9IHdyYnVmWzJdKSB8fAorCSAgICAocmRidWZbMl0gIT0gZXMpIHx8IChtZW1jbXAoZGF0YSwgJnJkYnVmWzNdLCBsZW4pICE9IDApKSB7CisKKwkJaWYgKC0tdHJpZXMpCisJCQlnb3RvIHJldHJ5OworCisJCWRldl9lcnIoJnNsLT5kZXYsCisJCQkiY291bGQgbm90IHdyaXRlIHRvIGVlcHJvbSwgc2NyYXRjaHBhZCBjb21wYXJlIGZhaWxlZCAlZCB0aW1lc1xuIiwKKwkJCVcxX0YyRF9SRUFEX1JFVFJJRVMpOworCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDb3B5IHRoZSBzY3JhdGNocGFkIHRvIEVFUFJPTSAqLworCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQlyZXR1cm4gLTE7CisKKwl3cmJ1ZlswXSA9IFcxX0YyRF9DT1BZX1NDUkFUQ0g7CisJd3JidWZbM10gPSBlczsKKwl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCB3cmJ1ZiwgNCk7CisKKwkvKiBTbGVlcCBmb3IgdHByb2cgbXMgdG8gd2FpdCBmb3IgdGhlIHdyaXRlIHRvIGNvbXBsZXRlICovCisJbXNsZWVwKFcxX0YyRF9UUFJPR19NUyk7CisKKwkvKiBSZXNldCB0aGUgYnVzIHRvIHdha2UgdXAgdGhlIEVFUFJPTSAgKi8KKwl3MV9yZXNldF9idXMoc2wtPm1hc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfZjJkX3dyaXRlX2JpbihzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHcxX3NsYXZlICpzbCA9IGtvYmpfdG9fdzFfc2xhdmUoa29iaik7CisJaW50IGFkZHIsIGxlbjsKKwlpbnQgY29weTsKKworCWNvdW50ID0gdzFfZjJkX2ZpeF9jb3VudChvZmYsIGNvdW50LCBXMV9GMkRfRUVQUk9NX1NJWkUpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKworCS8qIENhbiBvbmx5IHdyaXRlIGRhdGEgaW4gYmxvY2tzIG9mIHRoZSBzaXplIG9mIHRoZSBzY3JhdGNocGFkICovCisJYWRkciA9IG9mZjsKKwlsZW4gPSBjb3VudDsKKwl3aGlsZSAobGVuID4gMCkgeworCisJCS8qIGlmIGxlbiB0b28gc2hvcnQgb3IgYWRkciBub3QgYWxpZ25lZCAqLworCQlpZiAobGVuIDwgVzFfRjJEX1NDUkFUQ0hfU0laRSB8fCBhZGRyICYgVzFfRjJEX1NDUkFUQ0hfTUFTSykgeworCQkJY2hhciB0bXBbVzFfRjJEX1NDUkFUQ0hfU0laRV07CisKKwkJCS8qIHJlYWQgdGhlIGJsb2NrIGFuZCB1cGRhdGUgdGhlIHBhcnRzIHRvIGJlIHdyaXR0ZW4gKi8KKwkJCWlmICh3MV9mMmRfcmVhZGJsb2NrKHNsLCBhZGRyICYgflcxX0YyRF9TQ1JBVENIX01BU0ssCisJCQkJCVcxX0YyRF9TQ1JBVENIX1NJWkUsIHRtcCkpIHsKKwkJCQljb3VudCA9IC1FSU87CisJCQkJZ290byBvdXRfdXA7CisJCQl9CisKKwkJCS8qIGNvcHkgYXQgbW9zdCB0byB0aGUgYm91bmRhcnkgb2YgdGhlIFBBR0Ugb3IgbGVuICovCisJCQljb3B5ID0gVzFfRjJEX1NDUkFUQ0hfU0laRSAtCisJCQkJKGFkZHIgJiBXMV9GMkRfU0NSQVRDSF9NQVNLKTsKKworCQkJaWYgKGNvcHkgPiBsZW4pCisJCQkJY29weSA9IGxlbjsKKworCQkJbWVtY3B5KCZ0bXBbYWRkciAmIFcxX0YyRF9TQ1JBVENIX01BU0tdLCBidWYsIGNvcHkpOworCQkJaWYgKHcxX2YyZF93cml0ZShzbCwgYWRkciAmIH5XMV9GMkRfU0NSQVRDSF9NQVNLLAorCQkJCQlXMV9GMkRfU0NSQVRDSF9TSVpFLCB0bXApIDwgMCkgeworCQkJCWNvdW50ID0gLUVJTzsKKwkJCQlnb3RvIG91dF91cDsKKwkJCX0KKwkJfSBlbHNlIHsKKworCQkJY29weSA9IFcxX0YyRF9TQ1JBVENIX1NJWkU7CisJCQlpZiAodzFfZjJkX3dyaXRlKHNsLCBhZGRyLCBjb3B5LCBidWYpIDwgMCkgeworCQkJCWNvdW50ID0gLUVJTzsKKwkJCQlnb3RvIG91dF91cDsKKwkJCX0KKwkJfQorCQlidWYgKz0gY29weTsKKwkJYWRkciArPSBjb3B5OworCQlsZW4gLT0gY29weTsKKwl9CisKK291dF91cDoKKwltdXRleF91bmxvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHcxX2YyZF9iaW5fYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAiZWVwcm9tIiwKKwkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwl9LAorCS5zaXplID0gVzFfRjJEX0VFUFJPTV9TSVpFLAorCS5yZWFkID0gdzFfZjJkX3JlYWRfYmluLAorCS53cml0ZSA9IHcxX2YyZF93cml0ZV9iaW4sCit9OworCitzdGF0aWMgaW50IHcxX2YyZF9hZGRfc2xhdmUoc3RydWN0IHcxX3NsYXZlICpzbCkKK3sKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosICZ3MV9mMmRfYmluX2F0dHIpOworfQorCitzdGF0aWMgdm9pZCB3MV9mMmRfcmVtb3ZlX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCit7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosICZ3MV9mMmRfYmluX2F0dHIpOworfQorCitzdGF0aWMgc3RydWN0IHcxX2ZhbWlseV9vcHMgdzFfZjJkX2ZvcHMgPSB7CisJLmFkZF9zbGF2ZSAgICAgID0gdzFfZjJkX2FkZF9zbGF2ZSwKKwkucmVtb3ZlX3NsYXZlICAgPSB3MV9mMmRfcmVtb3ZlX3NsYXZlLAorfTsKKworc3RhdGljIHN0cnVjdCB3MV9mYW1pbHkgdzFfZmFtaWx5XzJkID0geworCS5maWQgPSBXMV9FRVBST01fRFMyNDMxLAorCS5mb3BzID0gJncxX2YyZF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdzFfZjJkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdzFfcmVnaXN0ZXJfZmFtaWx5KCZ3MV9mYW1pbHlfMmQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdzFfZjJkX2Zpbmkodm9pZCkKK3sKKwl3MV91bnJlZ2lzdGVyX2ZhbWlseSgmdzFfZmFtaWx5XzJkKTsKK30KKworbW9kdWxlX2luaXQodzFfZjJkX2luaXQpOworbW9kdWxlX2V4aXQodzFfZjJkX2ZpbmkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJCZXJuaGFyZCBXZWlyaWNoIDxiZXJuaGFyZC53ZWlyaWNoQHJpZWRlbC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIncxIGZhbWlseSAyZCBkcml2ZXIgZm9yIERTMjQzMSwgMWtiIEVFUFJPTSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI3NjAuYwppbmRleCBlZDZiMDU3Li4xZjA5ZDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI3NjAuYworKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI3NjAuYwpAQCAtODAsNyArODAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJ3MV9zbGF2ZSIsCiAJCS5tb2RlID0gU19JUlVHTywKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IERTMjc2MF9EQVRBX1NJWkUsCiAJLnJlYWQgPSB3MV9kczI3NjBfcmVhZF9iaW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYwppbmRleCBmYjI4YWNhLi4yYzhkZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKQEAgLTM3LDMxICszNywzMyBAQAogTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciAxLXdpcmUgRGFsbGFzIG5ldHdvcmsgcHJvdG9jb2wsIHRlbXBlcmF0dXJlIGZhbWlseS4iKTsKIAorLyogQWxsb3cgdGhlIHN0cm9uZyBwdWxsdXAgdG8gYmUgZGlzYWJsZWQsIGJ1dCBkZWZhdWx0IHRvIGVuYWJsZWQuCisgKiBJZiBpdCB3YXMgZGlzYWJsZWQgYSBwYXJhc2l0ZSBwb3dlcmVkIGRldmljZSBtaWdodCBub3QgZ2V0IHRoZSByZXF1aXJlCisgKiBjdXJyZW50IHRvIGRvIGEgdGVtcGVyYXR1cmUgY29udmVyc2lvbi4gIElmIGl0IGlzIGVuYWJsZWQgcGFyYXNpdGUgcG93ZXJlZAorICogZGV2aWNlcyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiBnZXR0aW5nIHRoZSBjdXJyZW50IHJlcXVpcmVkLgorICovCitzdGF0aWMgaW50IHcxX3N0cm9uZ19wdWxsdXAgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHN0cm9uZ19wdWxsdXAsIHcxX3N0cm9uZ19wdWxsdXAsIGludCwgMCk7CisKIHN0YXRpYyB1OCBiYWRfcm9tc1tdWzldID0gewogCQkJCXsweGFhLCAweDAwLCAweDRiLCAweDQ2LCAweGZmLCAweGZmLCAweDBjLCAweDEwLCAweDg3fSwKIAkJCQl7fQogCQkJfTsKIAotc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZF9iaW4oc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiwKLQkJCQkgY2hhciAqLCBsb2ZmX3QsIHNpemVfdCk7CitzdGF0aWMgc3NpemVfdCB3MV90aGVybV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHcxX3RoZXJtX2Jpbl9hdHRyID0gewotCS5hdHRyID0gewotCQkubmFtZSA9ICJ3MV9zbGF2ZSIsCi0JCS5tb2RlID0gU19JUlVHTywKLQl9LAotCS5zaXplID0gVzFfU0xBVkVfREFUQV9TSVpFLAotCS5yZWFkID0gdzFfdGhlcm1fcmVhZF9iaW4sCi19Oworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX3RoZXJtX2F0dHIgPQorCV9fQVRUUih3MV9zbGF2ZSwgU19JUlVHTywgdzFfdGhlcm1fcmVhZCwgTlVMTCk7CiAKIHN0YXRpYyBpbnQgdzFfdGhlcm1fYWRkX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCiB7Ci0JcmV0dXJuIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfdGhlcm1fYmluX2F0dHIpOworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNsLT5kZXYsICZ3MV90aGVybV9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgdzFfdGhlcm1fcmVtb3ZlX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCiB7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosICZ3MV90aGVybV9iaW5fYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzbC0+ZGV2LCAmdzFfdGhlcm1fYXR0cik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdzFfZmFtaWx5X29wcyB3MV90aGVybV9mb3BzID0gewpAQCAtMTYwLDMwICsxNjIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZF9iaW4oc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQkgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCB3MV90aGVybV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBrb2JqX3RvX3cxX3NsYXZlKGtvYmopOworCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBkZXZfdG9fdzFfc2xhdmUoZGV2aWNlKTsKIAlzdHJ1Y3QgdzFfbWFzdGVyICpkZXYgPSBzbC0+bWFzdGVyOwogCXU4IHJvbVs5XSwgY3JjLCB2ZXJkaWN0OwogCWludCBpLCBtYXhfdHJ5aW5nID0gMTA7CisJc3NpemVfdCBjID0gUEFHRV9TSVpFOwogCi0JbXV0ZXhfbG9jaygmc2wtPm1hc3Rlci0+bXV0ZXgpOworCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCi0JaWYgKG9mZiA+IFcxX1NMQVZFX0RBVEFfU0laRSkgewotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAob2ZmICsgY291bnQgPiBXMV9TTEFWRV9EQVRBX1NJWkUpIHsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1zZXQoYnVmLCAwLCBjb3VudCk7CiAJbWVtc2V0KHJvbSwgMCwgc2l6ZW9mKHJvbSkpOwogCi0JY291bnQgPSAwOwogCXZlcmRpY3QgPSAwOwogCWNyYyA9IDA7CiAKQEAgLTE5MiwxNSArMTgzLDIwIEBACiAJCQlpbnQgY291bnQgPSAwOwogCQkJdW5zaWduZWQgaW50IHRtID0gNzUwOwogCisJCQkvKiA3NTBtcyBzdHJvbmcgcHVsbHVwIChvciBkZWxheSkgYWZ0ZXIgdGhlIGNvbnZlcnQgKi8KKwkJCWlmICh3MV9zdHJvbmdfcHVsbHVwKQorCQkJCXcxX25leHRfcHVsbHVwKGRldiwgdG0pOwogCQkJdzFfd3JpdGVfOChkZXYsIFcxX0NPTlZFUlRfVEVNUCk7Ci0KLQkJCW1zbGVlcCh0bSk7CisJCQlpZiAoIXcxX3N0cm9uZ19wdWxsdXApCisJCQkJbXNsZWVwKHRtKTsKIAogCQkJaWYgKCF3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKSB7CiAKIAkJCQl3MV93cml0ZV84KGRldiwgVzFfUkVBRF9TQ1JBVENIUEFEKTsKIAkJCQlpZiAoKGNvdW50ID0gdzFfcmVhZF9ibG9jayhkZXYsIHJvbSwgOSkpICE9IDkpIHsKLQkJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAidzFfcmVhZF9ibG9jaygpIHJldHVybmVkICVkIGluc3RlYWQgb2YgOS5cbiIsIGNvdW50KTsKKwkJCQkJZGV2X3dhcm4oZGV2aWNlLCAidzFfcmVhZF9ibG9jaygpICIKKwkJCQkJCSJyZXR1cm5lZCAldSBpbnN0ZWFkIG9mIDkuXG4iLAorCQkJCQkJY291bnQpOwogCQkJCX0KIAogCQkJCWNyYyA9IHcxX2NhbGNfY3JjOChyb20sIDgpOwpAQCAtMjE1LDIyICsyMTEsMjIgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgOTsgKytpKQotCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJTAyeCAiLCByb21baV0pOwotCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICI6IGNyYz0lMDJ4ICVzXG4iLAorCQljIC09IHNucHJpbnRmKGJ1ZiArIFBBR0VfU0laRSAtIGMsIGMsICIlMDJ4ICIsIHJvbVtpXSk7CisJYyAtPSBzbnByaW50ZihidWYgKyBQQUdFX1NJWkUgLSBjLCBjLCAiOiBjcmM9JTAyeCAlc1xuIiwKIAkJCSAgIGNyYywgKHZlcmRpY3QpID8gIllFUyIgOiAiTk8iKTsKIAlpZiAodmVyZGljdCkKIAkJbWVtY3B5KHNsLT5yb20sIHJvbSwgc2l6ZW9mKHNsLT5yb20pKTsKIAllbHNlCi0JCWRldl93YXJuKCZkZXYtPmRldiwgIjE4UzIwIGRvZXNuJ3QgcmVzcG9uZCB0byBDT05WRVJUX1RFTVAuXG4iKTsKKwkJZGV2X3dhcm4oZGV2aWNlLCAiMThTMjAgZG9lc24ndCByZXNwb25kIHRvIENPTlZFUlRfVEVNUC5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IDk7ICsraSkKLQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiUwMnggIiwgc2wtPnJvbVtpXSk7CisJCWMgLT0gc25wcmludGYoYnVmICsgUEFHRV9TSVpFIC0gYywgYywgIiUwMnggIiwgc2wtPnJvbVtpXSk7CiAKLQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAidD0lZFxuIiwgdzFfY29udmVydF90ZW1wKHJvbSwgc2wtPmZhbWlseS0+ZmlkKSk7Ci1vdXQ6CisJYyAtPSBzbnByaW50ZihidWYgKyBQQUdFX1NJWkUgLSBjLCBjLCAidD0lZFxuIiwKKwkJdzFfY29udmVydF90ZW1wKHJvbSwgc2wtPmZhbWlseS0+ZmlkKSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gUEFHRV9TSVpFIC0gYzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdzFfdGhlcm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MS5jIGIvZHJpdmVycy93MS93MS5jCmluZGV4IDcyOTNjOWIuLjNiNjE1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzEuYworKysgYi9kcml2ZXJzL3cxL3cxLmMKQEAgLTQ2LDE5ICs0NiwxNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIDEtd2lyZSBEYWxsYXMgbmV0d29yayBwcm90b2NvbC4iKTsKIAogc3RhdGljIGludCB3MV90aW1lb3V0ID0gMTA7Ci1zdGF0aWMgaW50IHcxX2NvbnRyb2xfdGltZW91dCA9IDE7CiBpbnQgdzFfbWF4X3NsYXZlX2NvdW50ID0gMTA7CiBpbnQgdzFfbWF4X3NsYXZlX3R0bCA9IDEwOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQodGltZW91dCwgdzFfdGltZW91dCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChjb250cm9sX3RpbWVvdXQsIHcxX2NvbnRyb2xfdGltZW91dCwgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChtYXhfc2xhdmVfY291bnQsIHcxX21heF9zbGF2ZV9jb3VudCwgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChzbGF2ZV90dGwsIHcxX21heF9zbGF2ZV90dGwsIGludCwgMCk7CiAKIERFRklORV9NVVRFWCh3MV9tbG9jayk7CiBMSVNUX0hFQUQodzFfbWFzdGVycyk7CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKncxX2NvbnRyb2xfdGhyZWFkOworc3RhdGljIGludCB3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgc3RydWN0IHcxX3JlZ19udW0gKnJuKTsKIAogc3RhdGljIGludCB3MV9tYXN0ZXJfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewpAQCAtODMsMTAgKzgxLDEwIEBACiB7CiAJc3RydWN0IHcxX3NsYXZlICpzbCA9IGRldl90b193MV9zbGF2ZShkZXYpOwogCi0JcHJpbnRrKCIlczogUmVsZWFzaW5nICVzLlxuIiwgX19mdW5jX18sIHNsLT5uYW1lKTsKKwlkZXZfZGJnKGRldiwgIiVzOiBSZWxlYXNpbmcgJXMuXG4iLCBfX2Z1bmNfXywgc2wtPm5hbWUpOwogCiAJd2hpbGUgKGF0b21pY19yZWFkKCZzbC0+cmVmY250KSkgewotCQlwcmludGsoIldhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAorCQlkZXZfZGJnKGRldiwgIldhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAogCQkJCXNsLT5uYW1lLCBhdG9taWNfcmVhZCgmc2wtPnJlZmNudCkpOwogCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCkpCiAJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwpAQCAtMTA1LDM1ICsxMDMsMjAgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc2wtPm5hbWUpOwogfQogCi1zdGF0aWMgc3NpemVfdCB3MV9zbGF2ZV9yZWFkX2lkKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHcxX3NsYXZlX3JlYWRfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHcxX3NsYXZlICpzbCA9IGtvYmpfdG9fdzFfc2xhdmUoa29iaik7CisJc3RydWN0IHcxX3NsYXZlICpzbCA9IGRldl90b193MV9zbGF2ZShkZXYpOworCXNzaXplX3QgY291bnQgPSBzaXplb2Yoc2wtPnJlZ19udW0pOwogCi0JaWYgKG9mZiA+IDgpIHsKLQkJY291bnQgPSAwOwotCX0gZWxzZSB7Ci0JCWlmIChvZmYgKyBjb3VudCA+IDgpCi0JCQljb3VudCA9IDggLSBvZmY7Ci0KLQkJbWVtY3B5KGJ1ZiwgKHU4ICopJnNsLT5yZWdfbnVtLCBjb3VudCk7Ci0JfQotCisJbWVtY3B5KGJ1ZiwgKHU4ICopJnNsLT5yZWdfbnVtLCBjb3VudCk7CiAJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdzFfc2xhdmVfYXR0cl9uYW1lID0KIAlfX0FUVFIobmFtZSwgU19JUlVHTywgdzFfc2xhdmVfcmVhZF9uYW1lLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHcxX3NsYXZlX2F0dHJfYmluX2lkID0gewotICAgICAgLmF0dHIgPSB7Ci0gICAgICAgICAgICAgIC5uYW1lID0gImlkIiwKLSAgICAgICAgICAgICAgLm1vZGUgPSBTX0lSVUdPLAotICAgICAgfSwKLSAgICAgIC5zaXplID0gOCwKLSAgICAgIC5yZWFkID0gdzFfc2xhdmVfcmVhZF9pZCwKLX07CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdzFfc2xhdmVfYXR0cl9pZCA9CisJX19BVFRSKGlkLCBTX0lSVUdPLCB3MV9zbGF2ZV9yZWFkX2lkLCBOVUxMKTsKIAogLyogRGVmYXVsdCBmYW1pbHkgKi8KIApAQCAtMjUwLDExICsyMzMsMTYgQEAKIAkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkJY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQogeworCWxvbmcgdG1wOwogCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOwogCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdG1wKSA9PSAtRUlOVkFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW11dGV4X2xvY2soJm1kLT5tdXRleCk7Ci0JbWQtPnNlYXJjaF9jb3VudCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKwltZC0+c2VhcmNoX2NvdW50ID0gdG1wOwogCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwl3YWtlX3VwX3Byb2Nlc3MobWQtPnRocmVhZCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNzMsNiArMjYxLDM4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3N0b3JlX3B1bGx1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWxvbmcgdG1wOworCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdG1wKSA9PSAtRUlOVkFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisJbWQtPmVuYWJsZV9wdWxsdXAgPSB0bXA7CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCXdha2VfdXBfcHJvY2VzcyhtZC0+dGhyZWFkKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3B1bGx1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKKwlzc2l6ZV90IGNvdW50OworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIG1kLT5lbmFibGVfcHVsbHVwKTsKKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19wb2ludGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKQEAgLTMyNCw3ICszNDQsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3NsYXZlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3Nob3dfc2xhdmVzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOwogCWludCBjID0gUEFHRV9TSVpFOwpAQCAtMzQ5LDYgKzM3MCwxMzUgQEAKIAlyZXR1cm4gUEFHRV9TSVpFIC0gYzsKIH0KIAorc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYyA9IFBBR0VfU0laRTsKKwljIC09IHNucHJpbnRmKGJ1ZitQQUdFX1NJWkUgLSBjLCBjLAorCQkid3JpdGUgZGV2aWNlIGlkIHh4LXh4eHh4eHh4eHh4eCB0byBhZGQgc2xhdmVcbiIpOworCXJldHVybiBQQUdFX1NJWkUgLSBjOworfQorCitzdGF0aWMgaW50IHcxX2F0b3JlZ19udW0oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwlzdHJ1Y3QgdzFfcmVnX251bSAqcm4pCit7CisJdW5zaWduZWQgaW50IGZhbWlseTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgaWQ7CisJaW50IGk7CisJdTY0IHJuNjRfbGU7CisKKwkvKiBUaGUgQ1JDIHZhbHVlIGlzbid0IHJlYWQgZnJvbSB0aGUgdXNlciBiZWNhdXNlIHRoZSBzeXNmcyBkaXJlY3RvcnkKKwkgKiBkb2Vzbid0IGluY2x1ZGUgaXQgYW5kIG1vc3QgbWVzc2FnZXMgZnJvbSB0aGUgYnVzIHNlYXJjaCBkb24ndAorCSAqIHByaW50IGl0IGVpdGhlci4gIEl0IHdvdWxkIGJlIHVucmVhc29uYWJsZSBmb3IgdGhlIHVzZXIgdG8gdGhlbgorCSAqIHByb3ZpZGUgaXQuCisJICovCisJY29uc3QgY2hhciAqZXJyb3JfbXNnID0gImJhZCBzbGF2ZSBzdHJpbmcgZm9ybWF0LCBleHBlY3RpbmcgIgorCQkiZmYtZGRkZGRkZGRkZGRkXG4iOworCisJaWYgKGJ1ZlsyXSAhPSAnLScpIHsKKwkJZGV2X2VycihkZXYsICIlcyIsIGVycm9yX21zZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpID0gc3NjYW5mKGJ1ZiwgIiUwMngtJTAxMmxseCIsICZmYW1pbHksICZpZCk7CisJaWYgKGkgIT0gMikgeworCQlkZXZfZXJyKGRldiwgIiVzIiwgZXJyb3JfbXNnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJuLT5mYW1pbHkgPSBmYW1pbHk7CisJcm4tPmlkID0gaWQ7CisKKwlybjY0X2xlID0gY3B1X3RvX2xlNjQoKih1NjQgKilybik7CisJcm4tPmNyYyA9IHcxX2NhbGNfY3JjOCgodTggKikmcm42NF9sZSwgNyk7CisKKyNpZiAwCisJZGV2X2luZm8oZGV2LCAiV2l0aCBDUkMgZGV2aWNlIGlzICUwMnguJTAxMmxseC4lMDJ4LlxuIiwKKwkJICBybi0+ZmFtaWx5LCAodW5zaWduZWQgbG9uZyBsb25nKXJuLT5pZCwgcm4tPmNyYyk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKiBTZWFyY2hlcyB0aGUgc2xhdmVzIGluIHRoZSB3MV9tYXN0ZXIgYW5kIHJldHVybnMgYSBwb2ludGVyIG9yIE5VTEwuCisgKiBOb3RlOiBtdXN0IGhvbGQgdGhlIG11dGV4CisgKi8KK3N0YXRpYyBzdHJ1Y3QgdzFfc2xhdmUgKncxX3NsYXZlX3NlYXJjaF9kZXZpY2Uoc3RydWN0IHcxX21hc3RlciAqZGV2LAorCXN0cnVjdCB3MV9yZWdfbnVtICpybikKK3sKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2wsICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgeworCQlpZiAoc2wtPnJlZ19udW0uZmFtaWx5ID09IHJuLT5mYW1pbHkgJiYKKwkJCQlzbC0+cmVnX251bS5pZCA9PSBybi0+aWQgJiYKKwkJCQlzbC0+cmVnX251bS5jcmMgPT0gcm4tPmNyYykgeworCQkJcmV0dXJuIHNsOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3N0b3JlX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOworCXN0cnVjdCB3MV9yZWdfbnVtIHJuOworCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CisJc3NpemVfdCByZXN1bHQgPSBjb3VudDsKKworCWlmICh3MV9hdG9yZWdfbnVtKGRldiwgYnVmLCBjb3VudCwgJnJuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCXNsID0gdzFfc2xhdmVfc2VhcmNoX2RldmljZShtZCwgJnJuKTsKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoIG9uZSB0aGUgb25lLXdpcmUgYnVzCisJICogZm9yIHRoZSBuZXcgZGV2aWNlIHRvIHNlZSBpZiBpdCBpcyBvdXQgdGhlcmUgb3Igbm90LiAgQnV0IHRoZQorCSAqIGN1cnJlbnQgc2VhcmNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LgorCSAqLworCWlmIChzbCkgeworCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHNcbiIsIHNsLT5uYW1lKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKG1kLCAmcm4pOworCX0KKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3Nob3dfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBjID0gUEFHRV9TSVpFOworCWMgLT0gc25wcmludGYoYnVmK1BBR0VfU0laRSAtIGMsIGMsCisJCSJ3cml0ZSBkZXZpY2UgaWQgeHgteHh4eHh4eHh4eHh4IHRvIHJlbW92ZSBzbGF2ZVxuIik7CisJcmV0dXJuIFBBR0VfU0laRSAtIGM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc3RvcmVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHcxX21hc3RlciAqbWQgPSBkZXZfdG9fdzFfbWFzdGVyKGRldik7CisJc3RydWN0IHcxX3JlZ19udW0gcm47CisJc3RydWN0IHcxX3NsYXZlICpzbDsKKwlzc2l6ZV90IHJlc3VsdCA9IGNvdW50OworCisJaWYgKHcxX2F0b3JlZ19udW0oZGV2LCBidWYsIGNvdW50LCAmcm4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisJc2wgPSB3MV9zbGF2ZV9zZWFyY2hfZGV2aWNlKG1kLCAmcm4pOworCWlmIChzbCkgeworCQl3MV9zbGF2ZV9kZXRhY2goc2wpOworCX0gZWxzZSB7CisJCWRldl9pbmZvKGRldiwgIkRldmljZSAlMDJ4LSUwMTJsbHggZG9lc24ndCBleGlzdHNcbiIsIHJuLmZhbWlseSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcm4uaWQpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAjZGVmaW5lIFcxX01BU1RFUl9BVFRSX1JPKF9uYW1lLCBfbW9kZSkJCQkJXAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX21hc3Rlcl9hdHRyaWJ1dGVfIyNfbmFtZSA9CVwKIAkJX19BVFRSKHcxX21hc3Rlcl8jI19uYW1lLCBfbW9kZSwJCVwKQEAgLTM2OCw2ICs1MTgsOSBAQAogc3RhdGljIFcxX01BU1RFUl9BVFRSX1JPKHRpbWVvdXQsIFNfSVJVR08pOwogc3RhdGljIFcxX01BU1RFUl9BVFRSX1JPKHBvaW50ZXIsIFNfSVJVR08pOwogc3RhdGljIFcxX01BU1RFUl9BVFRSX1JXKHNlYXJjaCwgU19JUlVHTyB8IFNfSVdVR08pOworc3RhdGljIFcxX01BU1RFUl9BVFRSX1JXKHB1bGx1cCwgU19JUlVHTyB8IFNfSVdVR08pOworc3RhdGljIFcxX01BU1RFUl9BVFRSX1JXKGFkZCwgU19JUlVHTyB8IFNfSVdVR08pOworc3RhdGljIFcxX01BU1RFUl9BVFRSX1JXKHJlbW92ZSwgU19JUlVHTyB8IFNfSVdVR08pOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdzFfbWFzdGVyX2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9uYW1lLmF0dHIsCkBAIC0zNzgsNiArNTMxLDkgQEAKIAkmdzFfbWFzdGVyX2F0dHJpYnV0ZV90aW1lb3V0LmF0dHIsCiAJJncxX21hc3Rlcl9hdHRyaWJ1dGVfcG9pbnRlci5hdHRyLAogCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX3NlYXJjaC5hdHRyLAorCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX3B1bGx1cC5hdHRyLAorCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX2FkZC5hdHRyLAorCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX3JlbW92ZS5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTM5MCw3ICs1NDYsNyBAQAogCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJm1hc3Rlci0+ZGV2LmtvYmosICZ3MV9tYXN0ZXJfZGVmYXR0cl9ncm91cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoc3RydWN0IHcxX21hc3RlciAqbWFzdGVyKQordm9pZCB3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKm1hc3RlcikKIHsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJm1hc3Rlci0+ZGV2LmtvYmosICZ3MV9tYXN0ZXJfZGVmYXR0cl9ncm91cCk7CiB9CkBAIC00NzksNyArNjM1LDcgQEAKIAl9CiAKIAkvKiBDcmVhdGUgImlkIiBlbnRyeSAqLwotCWVyciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfc2xhdmVfYXR0cl9iaW5faWQpOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2wtPmRldiwgJncxX3NsYXZlX2F0dHJfaWQpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIoJnNsLT5kZXYsCiAJCQkic3lzZnMgZmlsZSBjcmVhdGlvbiBmb3IgWyVzXSBmYWlsZWQuIGVycj0lZFxuIiwKQEAgLTUwMSw3ICs2NTcsNyBAQAogCXJldHVybiAwOwogCiBvdXRfcmVtMjoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3NsYXZlX2F0dHJfYmluX2lkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX2lkKTsKIG91dF9yZW0xOgogCWRldmljZV9yZW1vdmVfZmlsZSgmc2wtPmRldiwgJncxX3NsYXZlX2F0dHJfbmFtZSk7CiBvdXRfdW5yZWc6CkBAIC01NjcsNyArNzIzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdzFfc2xhdmVfZGV0YWNoKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCit2b2lkIHcxX3NsYXZlX2RldGFjaChzdHJ1Y3QgdzFfc2xhdmUgKnNsKQogewogCXN0cnVjdCB3MV9uZXRsaW5rX21zZyBtc2c7CiAKQEAgLTU4Myw3ICs3MzksNyBAQAogCW1zZy50eXBlID0gVzFfU0xBVkVfUkVNT1ZFOwogCXcxX25ldGxpbmtfc2VuZChzbC0+bWFzdGVyLCAmbXNnKTsKIAotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfc2xhdmVfYXR0cl9iaW5faWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc2wtPmRldiwgJncxX3NsYXZlX2F0dHJfaWQpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmc2wtPmRldiwgJncxX3NsYXZlX2F0dHJfbmFtZSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnNsLT5kZXYpOwogCkBAIC01OTEsMjQgKzc0Nyw2IEBACiAJa2ZyZWUoc2wpOwogfQogCi1zdGF0aWMgc3RydWN0IHcxX21hc3RlciAqdzFfc2VhcmNoX21hc3Rlcih2b2lkICpkYXRhKQotewotCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKLQlpbnQgZm91bmQgPSAwOwotCi0JbXV0ZXhfbG9jaygmdzFfbWxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7Ci0JCWlmIChkZXYtPmJ1c19tYXN0ZXItPmRhdGEgPT0gZGF0YSkgewotCQkJZm91bmQgPSAxOwotCQkJYXRvbWljX2luYygmZGV2LT5yZWZjbnQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7Ci0KLQlyZXR1cm4gKGZvdW5kKT9kZXY6TlVMTDsKLX0KLQogc3RydWN0IHcxX21hc3RlciAqdzFfc2VhcmNoX21hc3Rlcl9pZCh1MzIgaWQpCiB7CiAJc3RydWN0IHcxX21hc3RlciAqZGV2OwpAQCAtNjU2LDU1ICs3OTQsNTYgQEAKIAlyZXR1cm4gKGZvdW5kKT9zbDpOVUxMOwogfQogCi12b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZikKK3ZvaWQgdzFfcmVjb25uZWN0X3NsYXZlcyhzdHJ1Y3QgdzFfZmFtaWx5ICpmLCBpbnQgYXR0YWNoKQogeworCXN0cnVjdCB3MV9zbGF2ZSAqc2wsICpzbG47CiAJc3RydWN0IHcxX21hc3RlciAqZGV2OwogCiAJbXV0ZXhfbG9jaygmdzFfbWxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiAlcyBpbnRvIG5ldyBmYW1pbHkgJTAyeC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBmLT5maWQpOwotCQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX1JFQ09OTkVDVCwgJmRldi0+ZmxhZ3MpOworCQlkZXZfZGJnKCZkZXYtPmRldiwgIlJlY29ubmVjdGluZyBzbGF2ZXMgaW4gZGV2aWNlICVzICIKKwkJCSJmb3IgZmFtaWx5ICUwMnguXG4iLCBkZXYtPm5hbWUsIGYtPmZpZCk7CisJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2wsIHNsbiwgJmRldi0+c2xpc3QsIHcxX3NsYXZlX2VudHJ5KSB7CisJCQkvKiBJZiBpdCBpcyBhIG5ldyBmYW1pbHksIHNsYXZlcyB3aXRoIHRoZSBkZWZhdWx0CisJCQkgKiBmYW1pbHkgZHJpdmVyIGFuZCBhcmUgdGhhdCBmYW1pbHkgd2lsbCBiZQorCQkJICogY29ubmVjdGVkLiAgSWYgdGhlIGZhbWlseSBpcyBnb2luZyBhd2F5LCBkZXZpY2VzCisJCQkgKiBtYXRjaGluZyB0aGF0IGZhbWlseSBhcmUgcmVjb25uZWNlZC4KKwkJCSAqLworCQkJaWYgKChhdHRhY2ggJiYgc2wtPmZhbWlseS0+ZmlkID09IFcxX0ZBTUlMWV9ERUZBVUxUCisJCQkJJiYgc2wtPnJlZ19udW0uZmFtaWx5ID09IGYtPmZpZCkgfHwKKwkJCQkoIWF0dGFjaCAmJiBzbC0+ZmFtaWx5LT5maWQgPT0gZi0+ZmlkKSkgeworCQkJCXN0cnVjdCB3MV9yZWdfbnVtIHJuOworCisJCQkJbWVtY3B5KCZybiwgJnNsLT5yZWdfbnVtLCBzaXplb2Yocm4pKTsKKwkJCQl3MV9zbGF2ZV9kZXRhY2goc2wpOworCisJCQkJdzFfYXR0YWNoX3NsYXZlX2RldmljZShkZXYsICZybik7CisJCQl9CisJCX0KKwkJZGV2X2RiZygmZGV2LT5kZXYsICJSZWNvbm5lY3Rpbmcgc2xhdmVzIGluIGRldmljZSAlcyAiCisJCQkiaGFzIGJlZW4gZmluaXNoZWQuXG4iLCBkZXYtPm5hbWUpOworCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCX0KIAltdXRleF91bmxvY2soJncxX21sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdzFfc2xhdmVfZm91bmQodm9pZCAqZGF0YSwgdTY0IHJuKQorc3RhdGljIHZvaWQgdzFfc2xhdmVfZm91bmQoc3RydWN0IHcxX21hc3RlciAqZGV2LCB1NjQgcm4pCiB7Ci0JaW50IHNsYXZlX2NvdW50OwogCXN0cnVjdCB3MV9zbGF2ZSAqc2w7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZW50OwogCXN0cnVjdCB3MV9yZWdfbnVtICp0bXA7Ci0Jc3RydWN0IHcxX21hc3RlciAqZGV2OwogCXU2NCBybl9sZSA9IGNwdV90b19sZTY0KHJuKTsKIAotCWRldiA9IHcxX3NlYXJjaF9tYXN0ZXIoZGF0YSk7Ci0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZmluZCB3MSBtYXN0ZXIgZGV2aWNlIGZvciBkYXRhICVwLCAiCi0JCSAgICAgICAiaXQgaXMgaW1wb3NzaWJsZS5cbiIsIGRhdGEpOwotCQlyZXR1cm47Ci0JfQorCWF0b21pY19pbmMoJmRldi0+cmVmY250KTsKIAogCXRtcCA9IChzdHJ1Y3QgdzFfcmVnX251bSAqKSAmcm47CiAKLQlzbGF2ZV9jb3VudCA9IDA7Ci0JbGlzdF9mb3JfZWFjaChlbnQsICZkZXYtPnNsaXN0KSB7Ci0KLQkJc2wgPSBsaXN0X2VudHJ5KGVudCwgc3RydWN0IHcxX3NsYXZlLCB3MV9zbGF2ZV9lbnRyeSk7Ci0KLQkJaWYgKHNsLT5yZWdfbnVtLmZhbWlseSA9PSB0bXAtPmZhbWlseSAmJgotCQkgICAgc2wtPnJlZ19udW0uaWQgPT0gdG1wLT5pZCAmJgotCQkgICAgc2wtPnJlZ19udW0uY3JjID09IHRtcC0+Y3JjKSB7Ci0JCQlzZXRfYml0KFcxX1NMQVZFX0FDVElWRSwgKGxvbmcgKikmc2wtPmZsYWdzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc2xhdmVfY291bnQrKzsKLQl9Ci0KLQlpZiAoc2xhdmVfY291bnQgPT0gZGV2LT5zbGF2ZV9jb3VudCAmJgotCQlybiAmJiAoKHJuID4+IDU2KSAmIDB4ZmYpID09IHcxX2NhbGNfY3JjOCgodTggKikmcm5fbGUsIDcpKSB7Ci0JCXcxX2F0dGFjaF9zbGF2ZV9kZXZpY2UoZGV2LCB0bXApOworCXNsID0gdzFfc2xhdmVfc2VhcmNoX2RldmljZShkZXYsIHRtcCk7CisJaWYgKHNsKSB7CisJCXNldF9iaXQoVzFfU0xBVkVfQUNUSVZFLCAobG9uZyAqKSZzbC0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmIChybiAmJiB0bXAtPmNyYyA9PSB3MV9jYWxjX2NyYzgoKHU4ICopJnJuX2xlLCA3KSkKKwkJCXcxX2F0dGFjaF9zbGF2ZV9kZXZpY2UoZGV2LCB0bXApOwogCX0KIAogCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKQEAgLTc3OSw4MiArOTE4LDIyIEBACiAJCQkvKiBleHRyYWN0IHRoZSBkaXJlY3Rpb24gdGFrZW4gJiB1cGRhdGUgdGhlIGRldmljZSBudW1iZXIgKi8KIAkJCXRtcDY0ID0gKHRyaXBsZXRfcmV0ID4+IDIpOwogCQkJcm4gfD0gKHRtcDY0IDw8IGkpOworCisJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCQkJZGV2X2RiZygmZGV2LT5kZXYsICJBYm9ydCB3MV9zZWFyY2hcbiIpOworCQkJCXJldHVybjsKKwkJCX0KIAkJfQogCiAJCWlmICggKHRyaXBsZXRfcmV0ICYgMHgwMykgIT0gMHgwMyApIHsKIAkJCWlmICggKGRlc2NfYml0ID09IGxhc3RfemVybykgfHwgKGxhc3RfemVybyA8IDApKQogCQkJCWxhc3RfZGV2aWNlID0gMTsKIAkJCWRlc2NfYml0ID0gbGFzdF96ZXJvOwotCQkJY2IoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBybik7CisJCQljYihkZXYsIHJuKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCB3MV9jb250cm9sKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHcxX3NsYXZlICpzbCwgKnNsbjsKLQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsICpuOwotCWludCBoYXZlX3RvX3dhaXQgPSAwOwotCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IGhhdmVfdG9fd2FpdCkgewotCQloYXZlX3RvX3dhaXQgPSAwOwotCi0JCXRyeV90b19mcmVlemUoKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUodzFfY29udHJvbF90aW1lb3V0ICogMTAwMCk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgbiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkgewotCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgIWRldi0+ZmxhZ3MpCi0JCQkJY29udGludWU7Ci0JCQkvKgotCQkJICogTGl0dGxlIHJhY2U6IHdlIGNhbiBjcmVhdGUgdGhyZWFkIGJ1dCBub3Qgc2V0IHRoZSBmbGFnLgotCQkJICogR2V0IGEgY2hhbmNlIGZvciBleHRlcm5hbCBwcm9jZXNzIHRvIHNldCBmbGFnIHVwLgotCQkJICovCi0JCQlpZiAoIWRldi0+aW5pdGlhbGl6ZWQpIHsKLQkJCQloYXZlX3RvX3dhaXQgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHRlc3RfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKSkgewotCQkJCXNldF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpOwotCi0JCQkJbXV0ZXhfbG9jaygmdzFfbWxvY2spOwotCQkJCWxpc3RfZGVsKCZkZXYtPncxX21hc3Rlcl9lbnRyeSk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7Ci0KLQkJCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2wsIHNsbiwgJmRldi0+c2xpc3QsIHcxX3NsYXZlX2VudHJ5KSB7Ci0JCQkJCXcxX3NsYXZlX2RldGFjaChzbCk7Ci0JCQkJfQotCQkJCXcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKLQkJCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCQkJCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKHRlc3RfYml0KFcxX01BU1RFUl9ORUVEX1JFQ09OTkVDVCwgJmRldi0+ZmxhZ3MpKSB7Ci0JCQkJZGV2X2RiZygmZGV2LT5kZXYsICJSZWNvbm5lY3Rpbmcgc2xhdmVzIGluIGRldmljZSAlcy5cbiIsIGRldi0+bmFtZSk7Ci0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgewotCQkJCQlpZiAoc2wtPmZhbWlseS0+ZmlkID09IFcxX0ZBTUlMWV9ERUZBVUxUKSB7Ci0JCQkJCQlzdHJ1Y3QgdzFfcmVnX251bSBybjsKLQotCQkJCQkJbWVtY3B5KCZybiwgJnNsLT5yZWdfbnVtLCBzaXplb2Yocm4pKTsKLQkJCQkJCXcxX3NsYXZlX2RldGFjaChzbCk7Ci0KLQkJCQkJCXcxX2F0dGFjaF9zbGF2ZV9kZXZpY2UoZGV2LCAmcm4pOwotCQkJCQl9Ci0JCQkJfQotCQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiBkZXZpY2UgJXMgaGFzIGJlZW4gZmluaXNoZWQuXG4iLCBkZXYtPm5hbWUpOwotCQkJCWNsZWFyX2JpdChXMV9NQVNURVJfTkVFRF9SRUNPTk5FQ1QsICZkZXYtPmZsYWdzKTsKLQkJCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgdzFfc2VhcmNoX3Byb2Nlc3Moc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSkKIHsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsLCAqc2xuOwpAQCAtODc4LDIzICs5NTcsMjkgQEAKIGludCB3MV9wcm9jZXNzKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHcxX21hc3RlciAqZGV2ID0gKHN0cnVjdCB3MV9tYXN0ZXIgKikgZGF0YTsKKwkvKiBBcyBsb25nIGFzIHcxX3RpbWVvdXQgaXMgb25seSBzZXQgYnkgYSBtb2R1bGUgcGFyYW1ldGVyIHRoZSBzbGVlcAorCSAqIHRpbWUgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gamlmZmllcyBvbmNlLgorCSAqLworCWNvbnN0IHVuc2lnbmVkIGxvbmcganRpbWUgPSBtc2Vjc190b19qaWZmaWVzKHcxX3RpbWVvdXQgKiAxMDAwKTsKIAotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICF0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpIHsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpZiAoZGV2LT5zZWFyY2hfY291bnQpIHsKKwkJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOworCQkJdzFfc2VhcmNoX3Byb2Nlc3MoZGV2LCBXMV9TRUFSQ0gpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJfQorCiAJCXRyeV90b19mcmVlemUoKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUodzFfdGltZW91dCAqIDEwMDApOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKIAotCQlpZiAoIWRldi0+aW5pdGlhbGl6ZWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZGV2LT5zZWFyY2hfY291bnQgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQl3MV9zZWFyY2hfcHJvY2VzcyhkZXYsIFcxX1NFQVJDSCk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCS8qIE9ubHkgc2xlZXAgd2hlbiB0aGUgc2VhcmNoIGlzIGFjdGl2ZS4gKi8KKwkJaWYgKGRldi0+c2VhcmNoX2NvdW50KQorCQkJc2NoZWR1bGVfdGltZW91dChqdGltZSk7CisJCWVsc2UKKwkJCXNjaGVkdWxlKCk7CiAJfQogCiAJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOwpAQCAtOTMyLDE4ICsxMDE3LDEzIEBACiAJCWdvdG8gZXJyX291dF9tYXN0ZXJfdW5yZWdpc3RlcjsKIAl9CiAKLQl3MV9jb250cm9sX3RocmVhZCA9IGt0aHJlYWRfcnVuKHcxX2NvbnRyb2wsIE5VTEwsICJ3MV9jb250cm9sIik7Ci0JaWYgKElTX0VSUih3MV9jb250cm9sX3RocmVhZCkpIHsKLQkJcmV0dmFsID0gUFRSX0VSUih3MV9jb250cm9sX3RocmVhZCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBjb250cm9sIHRocmVhZC4gZXJyPSVkXG4iLAotCQkJcmV0dmFsKTsKLQkJZ290byBlcnJfb3V0X3NsYXZlX3VucmVnaXN0ZXI7Ci0JfQotCiAJcmV0dXJuIDA7CiAKKyNpZiAwCisvKiBGb3IgdW5kb2luZyB0aGUgc2xhdmUgcmVnaXN0ZXIgaWYgdGhlcmUgd2FzIGEgc3RlcCBhZnRlciBpdC4gKi8KIGVycl9vdXRfc2xhdmVfdW5yZWdpc3RlcjoKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfc2xhdmVfZHJpdmVyKTsKKyNlbmRpZgogCiBlcnJfb3V0X21hc3Rlcl91bnJlZ2lzdGVyOgogCWRyaXZlcl91bnJlZ2lzdGVyKCZ3MV9tYXN0ZXJfZHJpdmVyKTsKQEAgLTk1OSwxMyArMTAzOSwxMiBAQAogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAorCS8qIFNldCBuZXRsaW5rIHJlbW92YWwgbWVzc2FnZXMgYW5kIHNvbWUgY2xlYW51cCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KQogCQlfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKGRldik7CiAKIAl3MV9maW5pX25ldGxpbmsoKTsKIAotCWt0aHJlYWRfc3RvcCh3MV9jb250cm9sX3RocmVhZCk7Ci0KIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfc2xhdmVfZHJpdmVyKTsKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfbWFzdGVyX2RyaXZlcik7CiAJYnVzX3VucmVnaXN0ZXIoJncxX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuaCBiL2RyaXZlcnMvdzEvdzEuaAppbmRleCBmMWRmNTM0Li5jZGFhNmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmgKKysrIGIvZHJpdmVycy93MS93MS5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAidzFfZmFtaWx5LmgiCiAKICNkZWZpbmUgVzFfTUFYTkFNRUxFTgkJMzIKLSNkZWZpbmUgVzFfU0xBVkVfREFUQV9TSVpFCTEyOAogCiAjZGVmaW5lIFcxX1NFQVJDSAkJMHhGMAogI2RlZmluZSBXMV9BTEFSTV9TRUFSQ0gJCTB4RUMKQEAgLTc3LDcgKzc2LDcgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbglyZWxlYXNlZDsKIH07CiAKLXR5cGVkZWYgdm9pZCAoKiB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjaykodm9pZCAqLCB1NjQpOwordHlwZWRlZiB2b2lkICgqdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spKHN0cnVjdCB3MV9tYXN0ZXIgKiwgdTY0KTsKIAogCiAvKioKQEAgLTE0MiwxMiArMTQxLDE4IEBACiAJICovCiAJdTgJCSgqcmVzZXRfYnVzKSh2b2lkICopOwogCi0JLyoqIFJlYWxseSBuaWNlIGhhcmR3YXJlIGNhbiBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUk9NIHNlYXJjaCAqLwotCXZvaWQJCSgqc2VhcmNoKSh2b2lkICosIHU4LCB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayk7Ci19OworCS8qKgorCSAqIFB1dCBvdXQgYSBzdHJvbmcgcHVsbC11cCBwdWxzZSBvZiB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uLgorCSAqIEByZXR1cm4gLTE9RXJyb3IsIDA9Y29tcGxldGVkCisJICovCisJdTgJCSgqc2V0X3B1bGx1cCkodm9pZCAqLCBpbnQpOwogCi0jZGVmaW5lIFcxX01BU1RFUl9ORUVEX0VYSVQJCTAKLSNkZWZpbmUgVzFfTUFTVEVSX05FRURfUkVDT05ORUNUCTEKKwkvKiogUmVhbGx5IG5pY2UgaGFyZHdhcmUgY2FuIGhhbmRsZXMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBST00gc2VhcmNoCisJICogIHcxX21hc3RlciogaXMgcGFzc2VkIHRvIHRoZSBzbGF2ZSBmb3VuZCBjYWxsYmFjay4KKwkgKi8KKwl2b2lkCQkoKnNlYXJjaCkodm9pZCAqLCBzdHJ1Y3QgdzFfbWFzdGVyICosCisJCXU4LCB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayk7Cit9OwogCiBzdHJ1Y3QgdzFfbWFzdGVyCiB7CkBAIC0xNjcsNyArMTcyLDEwIEBACiAJdm9pZAkJCSpwcml2OwogCWludAkJCXByaXZfc2l6ZTsKIAotCWxvbmcJCQlmbGFnczsKKwkvKiogNVYgc3Ryb25nIHB1bGx1cCBlbmFibGVkIGZsYWcsIDEgZW5hYmxlZCwgemVybyBkaXNhYmxlZC4gKi8KKwlpbnQJCQllbmFibGVfcHVsbHVwOworCS8qKiA1ViBzdHJvbmcgcHVsbHVwIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcywgemVybyBkaXNhYmxlZC4gKi8KKwlpbnQJCQlwdWxsdXBfZHVyYXRpb247CiAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwpAQCAtMTgxLDEyICsxODksMjEgQEAKIH07CiAKIGludCB3MV9jcmVhdGVfbWFzdGVyX2F0dHJpYnV0ZXMoc3RydWN0IHcxX21hc3RlciAqKTsKK3ZvaWQgdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhzdHJ1Y3QgdzFfbWFzdGVyICptYXN0ZXIpOwogdm9pZCB3MV9zZWFyY2goc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgY2IpOwogdm9pZCB3MV9zZWFyY2hfZGV2aWNlcyhzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIHU4IHNlYXJjaF90eXBlLCB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayBjYik7CiBzdHJ1Y3QgdzFfc2xhdmUgKncxX3NlYXJjaF9zbGF2ZShzdHJ1Y3QgdzFfcmVnX251bSAqaWQpOwogdm9pZCB3MV9zZWFyY2hfcHJvY2VzcyhzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIHU4IHNlYXJjaF90eXBlKTsKIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXJfaWQodTMyIGlkKTsKIAorLyogRGlzY29ubmVjdCBhbmQgcmVjb25uZWN0IGRldmljZXMgaW4gdGhlIGdpdmVuIGZhbWlseS4gIFVzZWQgZm9yIGZpbmRpbmcKKyAqIHVuY2xhaW1lZCBkZXZpY2VzIGFmdGVyIGEgZmFtaWx5IGhhcyBiZWVuIHJlZ2lzdGVyZWQgb3IgcmVsZWFzaW5nIGRldmljZXMKKyAqIGFmdGVyIGEgZmFtaWx5IGhhcyBiZWVuIHVucmVnaXN0ZXJlZC4gIFNldCBhdHRhY2ggdG8gMSB3aGVuIGEgbmV3IGZhbWlseQorICogaGFzIGp1c3QgYmVlbiByZWdpc3RlcmVkLCB0byAwIHdoZW4gaXQgaGFzIGJlZW4gdW5yZWdpc3RlcmVkLgorICovCit2b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZiwgaW50IGF0dGFjaCk7Cit2b2lkIHcxX3NsYXZlX2RldGFjaChzdHJ1Y3QgdzFfc2xhdmUgKnNsKTsKKwogdTggdzFfdHJpcGxldChzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIGludCBiZGlyKTsKIHZvaWQgdzFfd3JpdGVfOChzdHJ1Y3QgdzFfbWFzdGVyICosIHU4KTsKIGludCB3MV9yZXNldF9idXMoc3RydWN0IHcxX21hc3RlciAqKTsKQEAgLTE5NCw2ICsyMTEsNyBAQAogdm9pZCB3MV93cml0ZV9ibG9jayhzdHJ1Y3QgdzFfbWFzdGVyICosIGNvbnN0IHU4ICosIGludCk7CiB1OCB3MV9yZWFkX2Jsb2NrKHN0cnVjdCB3MV9tYXN0ZXIgKiwgdTggKiwgaW50KTsKIGludCB3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc3RydWN0IHcxX3NsYXZlICpzbCk7Cit2b2lkIHcxX25leHRfcHVsbHVwKHN0cnVjdCB3MV9tYXN0ZXIgKiwgaW50KTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdzFfc2xhdmUqIGRldl90b193MV9zbGF2ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jIGIvZHJpdmVycy93MS93MV9mYW1pbHkuYwppbmRleCBhM2M5NWJkLi40YTA5OTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKQEAgLTQ4LDEyICs0OCwxMiBAQAogCiAJaWYgKCFyZXQpIHsKIAkJYXRvbWljX3NldCgmbmV3Zi0+cmVmY250LCAwKTsKLQkJbmV3Zi0+bmVlZF9leGl0ID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3Zi0+ZmFtaWx5X2VudHJ5LCAmdzFfZmFtaWxpZXMpOwogCX0KIAlzcGluX3VubG9jaygmdzFfZmxvY2spOwogCi0JdzFfcmVjb25uZWN0X3NsYXZlcyhuZXdmKTsKKwkvKiBjaGVjayBkZWZhdWx0IGRldmljZXMgYWdhaW5zdCB0aGUgbmV3IHNldCBvZiBkcml2ZXJzICovCisJdzFfcmVjb25uZWN0X3NsYXZlcyhuZXdmLCAxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03MiwxMSArNzIsMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCi0JZmVudC0+bmVlZF9leGl0ID0gMTsKLQogCXNwaW5fdW5sb2NrKCZ3MV9mbG9jayk7CiAKKwkvKiBkZWF0Y2ggZGV2aWNlcyB1c2luZyB0aGlzIGZhbWlseSBjb2RlICovCisJdzFfcmVjb25uZWN0X3NsYXZlcyhmZW50LCAwKTsKKwogCXdoaWxlIChhdG9taWNfcmVhZCgmZmVudC0+cmVmY250KSkgewogCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nIGZvciBmYW1pbHkgJXUgdG8gYmVjb21lIGZyZWU6IHJlZmNudD0lZC5cbiIsCiAJCQkJZmVudC0+ZmlkLCBhdG9taWNfcmVhZCgmZmVudC0+cmVmY250KSk7CkBAIC0xMDksOCArMTA5LDcgQEAKIAogc3RhdGljIHZvaWQgX193MV9mYW1pbHlfcHV0KHN0cnVjdCB3MV9mYW1pbHkgKmYpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmYtPnJlZmNudCkpCi0JCWYtPm5lZWRfZXhpdCA9IDE7CisJYXRvbWljX2RlYygmZi0+cmVmY250KTsKIH0KIAogdm9pZCB3MV9mYW1pbHlfcHV0KHN0cnVjdCB3MV9mYW1pbHkgKmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oIGIvZHJpdmVycy93MS93MV9mYW1pbHkuaAppbmRleCBlZjFlMWRhLi4zY2ExYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgVzFfVEhFUk1fRFMxODIyICAJMHgyMgogI2RlZmluZSBXMV9FRVBST01fRFMyNDMzICAJMHgyMwogI2RlZmluZSBXMV9USEVSTV9EUzE4QjIwIAkweDI4CisjZGVmaW5lIFcxX0VFUFJPTV9EUzI0MzEJMHgyRAogI2RlZmluZSBXMV9GQU1JTFlfRFMyNzYwCTB4MzAKIAogI2RlZmluZSBNQVhOQU1FTEVOCQkzMgpAQCAtNTMsNyArNTQsNiBAQAogCXN0cnVjdCB3MV9mYW1pbHlfb3BzCSpmb3BzOwogCiAJYXRvbWljX3QJCXJlZmNudDsKLQl1OAkJCW5lZWRfZXhpdDsKIH07CiAKIGV4dGVybiBzcGlubG9ja190IHcxX2Zsb2NrOwpAQCAtNjMsNiArNjMsNSBAQAogc3RydWN0IHcxX2ZhbWlseSAqIHcxX2ZhbWlseV9yZWdpc3RlcmVkKHU4KTsKIHZvaWQgdzFfdW5yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IHcxX2ZhbWlseSAqKTsKIGludCB3MV9yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IHcxX2ZhbWlseSAqKTsKLXZvaWQgdzFfcmVjb25uZWN0X3NsYXZlcyhzdHJ1Y3QgdzFfZmFtaWx5ICpmKTsKIAogI2VuZGlmIC8qIF9fVzFfRkFNSUxZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfaW50LmMgYi9kcml2ZXJzL3cxL3cxX2ludC5jCmluZGV4IDY4NDBkZmUuLmEzYTU0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfaW50LmMKKysrIGIvZHJpdmVycy93MS93MV9pbnQuYwpAQCAtMjksNyArMjksMTEgQEAKICNpbmNsdWRlICJ3MV9uZXRsaW5rLmgiCiAjaW5jbHVkZSAidzFfaW50LmgiCiAKLXN0YXRpYyB1MzIgdzFfaWRzID0gMTsKK3N0YXRpYyBpbnQgdzFfc2VhcmNoX2NvdW50ID0gLTE7IC8qIERlZmF1bHQgaXMgY29udGludWFsIHNjYW4gKi8KK21vZHVsZV9wYXJhbV9uYW1lZChzZWFyY2hfY291bnQsIHcxX3NlYXJjaF9jb3VudCwgaW50LCAwKTsKKworc3RhdGljIGludCB3MV9lbmFibGVfcHVsbHVwID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChlbmFibGVfcHVsbHVwLCB3MV9lbmFibGVfcHVsbHVwLCBpbnQsIDApOwogCiBzdGF0aWMgc3RydWN0IHcxX21hc3RlciAqIHcxX2FsbG9jX2Rldih1MzIgaWQsIGludCBzbGF2ZV9jb3VudCwgaW50IHNsYXZlX3R0bCwKIAkJCQkgICAgICAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKQEAgLTU5LDggKzYzLDEyIEBACiAJZGV2LT5pbml0aWFsaXplZAk9IDA7CiAJZGV2LT5pZAkJCT0gaWQ7CiAJZGV2LT5zbGF2ZV90dGwJCT0gc2xhdmVfdHRsOwotICAgICAgICBkZXYtPnNlYXJjaF9jb3VudAk9IC0xOyAvKiBjb250aW51YWwgc2NhbiAqLworCWRldi0+c2VhcmNoX2NvdW50CT0gdzFfc2VhcmNoX2NvdW50OworCWRldi0+ZW5hYmxlX3B1bGx1cAk9IHcxX2VuYWJsZV9wdWxsdXA7CiAKKwkvKiAxIGZvciB3MV9wcm9jZXNzIHRvIGRlY3JlbWVudAorCSAqIDEgZm9yIF9fdzFfcmVtb3ZlX21hc3Rlcl9kZXZpY2UgdG8gZGVjcmVtZW50CisJICovCiAJYXRvbWljX3NldCgmZGV2LT5yZWZjbnQsIDIpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+c2xpc3QpOwpAQCAtOTMsOSArMTAxLDEwIEBACiAKIGludCB3MV9hZGRfbWFzdGVyX2RldmljZShzdHJ1Y3QgdzFfYnVzX21hc3RlciAqbWFzdGVyKQogewotCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKKwlzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsICplbnRyeTsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOworCWludCBpZCwgZm91bmQ7CiAKICAgICAgICAgLyogdmFsaWRhdGUgbWluaW11bSBmdW5jdGlvbmFsaXR5ICovCiAgICAgICAgIGlmICghKG1hc3Rlci0+dG91Y2hfYml0ICYmIG1hc3Rlci0+cmVzZXRfYnVzKSAmJgpAQCAtMTA0LDEwICsxMTMsNTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ3MV9hZGRfbWFzdGVyX2RldmljZTogaW52YWxpZCBmdW5jdGlvbiBzZXRcbiIpOwogCQlyZXR1cm4oLUVJTlZBTCk7CiAgICAgICAgIH0KKwkvKiBXaGlsZSBpdCB3b3VsZCBiZSBlbGVjdHJpY2FsbHkgcG9zc2libGUgdG8gbWFrZSBhIGRldmljZSB0aGF0CisJICogZ2VuZXJhdGVkIGEgc3Ryb25nIHB1bGx1cCBpbiBiaXQgYmFuZyBtb2RlLCBvbmx5IGhhcmRhcmUgdGhhdAorCSAqIGNvbnRyb2xzIDEtd2lyZSB0aW1lIGZyYW1lcyBhcmUgZXZlbiBleHBlY3RlZCB0byBzdXBwb3J0IGEgc3Ryb25nCisJICogcHVsbHVwLiAgdzFfaW8uYyB3b3VsZCBuZWVkIHRvIHN1cHBvcnQgY2FsbGluZyBzZXRfcHVsbHVwIGJlZm9yZQorCSAqIHRoZSBsYXN0IHdyaXRlX2JpdCBvcGVyYXRpb24gb2YgYSB3MV93cml0ZV84IHdoaWNoIGl0IGN1cnJlbnRseQorCSAqIGRvZXNuJ3QuCisJICovCisJaWYgKCFtYXN0ZXItPndyaXRlX2J5dGUgJiYgIW1hc3Rlci0+dG91Y2hfYml0ICYmIG1hc3Rlci0+c2V0X3B1bGx1cCkgeworCQlwcmludGsoS0VSTl9FUlIgIncxX2FkZF9tYXN0ZXJfZGV2aWNlOiBzZXRfcHVsbHVwIHJlcXVpcmVzICIKKwkJCSJ3cml0ZV9ieXRlIG9yIHRvdWNoX2JpdCwgZGlzYWJsaW5nXG4iKTsKKwkJbWFzdGVyLT5zZXRfcHVsbHVwID0gTlVMTDsKKwl9CiAKLQlkZXYgPSB3MV9hbGxvY19kZXYodzFfaWRzKyssIHcxX21heF9zbGF2ZV9jb3VudCwgdzFfbWF4X3NsYXZlX3R0bCwgJncxX21hc3Rlcl9kcml2ZXIsICZ3MV9tYXN0ZXJfZGV2aWNlKTsKLQlpZiAoIWRldikKKwkvKiBMb2NrIHVudGlsIHRoZSBkZXZpY2UgaXMgYWRkZWQgKG9yIG5vdCkgdG8gdzFfbWFzdGVycy4gKi8KKwltdXRleF9sb2NrKCZ3MV9tbG9jayk7CisJLyogU2VhcmNoIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIGlkIChzdGFydGluZyBhdCAxKS4gKi8KKwlpZCA9IDA7CisJZG8geworCQkrK2lkOworCQlmb3VuZCA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZ3MV9tYXN0ZXJzLCB3MV9tYXN0ZXJfZW50cnkpIHsKKwkJCWlmIChlbnRyeS0+aWQgPT0gaWQpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IHdoaWxlIChmb3VuZCk7CisKKwlkZXYgPSB3MV9hbGxvY19kZXYoaWQsIHcxX21heF9zbGF2ZV9jb3VudCwgdzFfbWF4X3NsYXZlX3R0bCwKKwkJJncxX21hc3Rlcl9kcml2ZXIsICZ3MV9tYXN0ZXJfZGV2aWNlKTsKKwlpZiAoIWRldikgeworCQltdXRleF91bmxvY2soJncxX21sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dmFsID0gIHcxX2NyZWF0ZV9tYXN0ZXJfYXR0cmlidXRlcyhkZXYpOworCWlmIChyZXR2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CisJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKKwl9CisKKwltZW1jcHkoZGV2LT5idXNfbWFzdGVyLCBtYXN0ZXIsIHNpemVvZihzdHJ1Y3QgdzFfYnVzX21hc3RlcikpOworCisJZGV2LT5pbml0aWFsaXplZCA9IDE7CiAKIAlkZXYtPnRocmVhZCA9IGt0aHJlYWRfcnVuKCZ3MV9wcm9jZXNzLCBkZXYsICIlcyIsIGRldi0+bmFtZSk7CiAJaWYgKElTX0VSUihkZXYtPnRocmVhZCkpIHsKQEAgLTExNSwxOCArMTY0LDEwIEBACiAJCWRldl9lcnIoJmRldi0+ZGV2LAogCQkJICJGYWlsZWQgdG8gY3JlYXRlIG5ldyBrZXJuZWwgdGhyZWFkLiBlcnI9JWRcbiIsCiAJCQkgcmV0dmFsKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OworCQltdXRleF91bmxvY2soJncxX21sb2NrKTsKKwkJZ290byBlcnJfb3V0X3JtX2F0dHI7CiAJfQogCi0JcmV0dmFsID0gIHcxX2NyZWF0ZV9tYXN0ZXJfYXR0cmlidXRlcyhkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX291dF9raWxsX3RocmVhZDsKLQotCW1lbWNweShkZXYtPmJ1c19tYXN0ZXIsIG1hc3Rlciwgc2l6ZW9mKHN0cnVjdCB3MV9idXNfbWFzdGVyKSk7Ci0KLQlkZXYtPmluaXRpYWxpemVkID0gMTsKLQotCW11dGV4X2xvY2soJncxX21sb2NrKTsKIAlsaXN0X2FkZCgmZGV2LT53MV9tYXN0ZXJfZW50cnksICZ3MV9tYXN0ZXJzKTsKIAltdXRleF91bmxvY2soJncxX21sb2NrKTsKIApAQCAtMTM3LDggKzE3OCwxMiBAQAogCiAJcmV0dXJuIDA7CiAKKyNpZiAwIC8qIFRocmVhZCBjbGVhbnVwIGNvZGUsIG5vdCByZXF1aXJlZCBjdXJyZW50bHkuICovCiBlcnJfb3V0X2tpbGxfdGhyZWFkOgogCWt0aHJlYWRfc3RvcChkZXYtPnRocmVhZCk7CisjZW5kaWYKK2Vycl9vdXRfcm1fYXR0cjoKKwl3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKGRldik7CiBlcnJfb3V0X2ZyZWVfZGV2OgogCXcxX2ZyZWVfZGV2KGRldik7CiAKQEAgLTE0OCwxMCArMTkzLDIxIEBACiB2b2lkIF9fdzFfcmVtb3ZlX21hc3Rlcl9kZXZpY2Uoc3RydWN0IHcxX21hc3RlciAqZGV2KQogewogCXN0cnVjdCB3MV9uZXRsaW5rX21zZyBtc2c7CisJc3RydWN0IHcxX3NsYXZlICpzbCwgKnNsbjsKIAotCXNldF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpOwogCWt0aHJlYWRfc3RvcChkZXYtPnRocmVhZCk7CiAKKwltdXRleF9sb2NrKCZ3MV9tbG9jayk7CisJbGlzdF9kZWwoJmRldi0+dzFfbWFzdGVyX2VudHJ5KTsKKwltdXRleF91bmxvY2soJncxX21sb2NrKTsKKworCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbCwgc2xuLCAmZGV2LT5zbGlzdCwgdzFfc2xhdmVfZW50cnkpCisJCXcxX3NsYXZlX2RldGFjaChzbCk7CisJdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOworCiAJd2hpbGUgKGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkpIHsKIAkJZGV2X2luZm8oJmRldi0+ZGV2LCAiV2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWU6IHJlZmNudD0lZC5cbiIsCiAJCQkJZGV2LT5uYW1lLCBhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfaW8uYyBiL2RyaXZlcnMvdzEvdzFfaW8uYwppbmRleCAzMGI2ZmJmLi5mNGY4MmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2lvLmMKKysrIGIvZHJpdmVycy93MS93MV9pby5jCkBAIC05Myw2ICs5Myw0MCBAQAogfQogCiAvKioKKyAqIFByZS13cml0ZSBvcGVyYXRpb24sIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRpbmcgc3Ryb25nIHB1bGx1cHMuCisgKiBQcm9ncmFtIHRoZSBoYXJkd2FyZSBmb3IgYSBzdHJvbmcgcHVsbHVwLCBpZiBvbmUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZAorICogdGhlIGhhcmR3YXJlIHN1cHBvcnRzIGl0LgorICoKKyAqIEBwYXJhbSBkZXYgICAgIHRoZSBtYXN0ZXIgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIHcxX3ByZV93cml0ZShzdHJ1Y3QgdzFfbWFzdGVyICpkZXYpCit7CisJaWYgKGRldi0+cHVsbHVwX2R1cmF0aW9uICYmCisJCWRldi0+ZW5hYmxlX3B1bGx1cCAmJiBkZXYtPmJ1c19tYXN0ZXItPnNldF9wdWxsdXApIHsKKwkJZGV2LT5idXNfbWFzdGVyLT5zZXRfcHVsbHVwKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwKKwkJCWRldi0+cHVsbHVwX2R1cmF0aW9uKTsKKwl9Cit9CisKKy8qKgorICogUG9zdC13cml0ZSBvcGVyYXRpb24sIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRpbmcgc3Ryb25nIHB1bGx1cHMuCisgKiBJZiBhIHN0cm9uZyBwdWxsdXAgd2FzIHJlcXVlc3RlZCwgY2xlYXIgaXQgaWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzCisgKiB0aGVtLCBvciBleGVjdXRlIHRoZSBkZWxheSBvdGhlcndpc2UsIGluIGVpdGhlciBjYXNlIGNsZWFyIHRoZSByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBkZXYgICAgIHRoZSBtYXN0ZXIgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIHcxX3Bvc3Rfd3JpdGUoc3RydWN0IHcxX21hc3RlciAqZGV2KQoreworCWlmIChkZXYtPnB1bGx1cF9kdXJhdGlvbikgeworCQlpZiAoZGV2LT5lbmFibGVfcHVsbHVwICYmIGRldi0+YnVzX21hc3Rlci0+c2V0X3B1bGx1cCkKKwkJCWRldi0+YnVzX21hc3Rlci0+c2V0X3B1bGx1cChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIDApOworCQllbHNlCisJCQltc2xlZXAoZGV2LT5wdWxsdXBfZHVyYXRpb24pOworCQlkZXYtPnB1bGx1cF9kdXJhdGlvbiA9IDA7CisJfQorfQorCisvKioKICAqIFdyaXRlcyA4IGJpdHMuCiAgKgogICogQHBhcmFtIGRldiAgICAgdGhlIG1hc3RlciBkZXZpY2UKQEAgLTEwMiwxMSArMTM2LDE3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ieXRlKQorCWlmIChkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2J5dGUpIHsKKwkJdzFfcHJlX3dyaXRlKGRldik7CiAJCWRldi0+YnVzX21hc3Rlci0+d3JpdGVfYnl0ZShkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGJ5dGUpOworCX0KIAllbHNlCi0JCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJCWlmIChpID09IDcpCisJCQkJdzFfcHJlX3dyaXRlKGRldik7CiAJCQl3MV90b3VjaF9iaXQoZGV2LCAoYnl0ZSA+PiBpKSAmIDB4MSk7CisJCX0KKwl3MV9wb3N0X3dyaXRlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3MV93cml0ZV84KTsKIApAQCAtMjAzLDExICsyNDMsMTQgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2Jsb2NrKQorCWlmIChkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2Jsb2NrKSB7CisJCXcxX3ByZV93cml0ZShkZXYpOwogCQlkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2Jsb2NrKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgYnVmLCBsZW4pOworCX0KIAllbHNlCiAJCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKLQkJCXcxX3dyaXRlXzgoZGV2LCBidWZbaV0pOworCQkJdzFfd3JpdGVfOChkZXYsIGJ1ZltpXSk7IC8qIGNhbGxzIHcxX3ByZV93cml0ZSAqLworCXcxX3Bvc3Rfd3JpdGUoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHcxX3dyaXRlX2Jsb2NrKTsKIApAQCAtMjUwLDEyICsyOTMsMjQgQEAKIAkJcmVzdWx0ID0gZGV2LT5idXNfbWFzdGVyLT5yZXNldF9idXMoZGV2LT5idXNfbWFzdGVyLT5kYXRhKSAmIDB4MTsKIAllbHNlIHsKIAkJZGV2LT5idXNfbWFzdGVyLT53cml0ZV9iaXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCAwKTsKKwkJLyogbWluaW11bSA0ODAsIG1heCA/IHVzCisJCSAqIGJlIG5pY2UgYW5kIHNsZWVwLCBleGNlcHQgMThiMjAgc3BlYyBsaXN0cyA5NjB1cyBtYXhpbXVtLAorCQkgKiBzbyB1bnRpbCB3ZSBjYW4gc2xlZXAgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeSwgc3Bpbi4KKwkJICogRmVlbCBmcmVlIHRvIGNvbWUgdXAgd2l0aCBzb21lIG90aGVyIHdheSB0byBnaXZlIHVwIHRoZQorCQkgKiBjcHUgZm9yIHN1Y2ggYSBzaG9ydCBhbW91bnQgb2YgdGltZSBBTkQgZ2V0IGl0IGJhY2sgaW4KKwkJICogdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUuCisJCSAqLwogCQl3MV9kZWxheSg0ODApOwogCQlkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2JpdChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIDEpOwogCQl3MV9kZWxheSg3MCk7CiAKIAkJcmVzdWx0ID0gZGV2LT5idXNfbWFzdGVyLT5yZWFkX2JpdChkZXYtPmJ1c19tYXN0ZXItPmRhdGEpICYgMHgxOwotCQl3MV9kZWxheSg0MTApOworCQkvKiBtaW5tdW0gNzAgKGFib3ZlKSArIDQxMCA9IDQ4MCB1cworCQkgKiBUaGVyZSBhcmVuJ3QgYW55IHRpbWluZyByZXF1aXJlbWVudHMgYmV0d2VlbiBhIHJlc2V0IGFuZAorCQkgKiB0aGUgZm9sbG93aW5nIHRyYW5zYWN0aW9ucy4gIFNsZWVwaW5nIGlzIHNhZmUgaGVyZS4KKwkJICovCisJCS8qIHcxX2RlbGF5KDQxMCk7IG1pbiByZXF1aXJlZCB0aW1lICovCisJCW1zbGVlcCgxKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjc3LDcgKzMzMiw4IEBACiB7CiAJZGV2LT5hdHRlbXB0cysrOwogCWlmIChkZXYtPmJ1c19tYXN0ZXItPnNlYXJjaCkKLQkJZGV2LT5idXNfbWFzdGVyLT5zZWFyY2goZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBzZWFyY2hfdHlwZSwgY2IpOworCQlkZXYtPmJ1c19tYXN0ZXItPnNlYXJjaChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGRldiwKKwkJCXNlYXJjaF90eXBlLCBjYik7CiAJZWxzZQogCQl3MV9zZWFyY2goZGV2LCBzZWFyY2hfdHlwZSwgY2IpOwogfQpAQCAtMzA1LDMgKzM2MSwyMCBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodzFfcmVzZXRfc2VsZWN0X3NsYXZlKTsKKworLyoqCisgKiBQdXQgb3V0IGEgc3Ryb25nIHB1bGwtdXAgb2YgdGhlIHNwZWNpZmllZCBkdXJhdGlvbiBhZnRlciB0aGUgbmV4dCB3cml0ZQorICogb3BlcmF0aW9uLiAgTm90IGFsbCBoYXJkd2FyZSBzdXBwb3J0cyBzdHJvbmcgcHVsbHVwcy4gIEhhcmR3YXJlIHRoYXQKKyAqIGRvZXNuJ3Qgc3VwcG9ydCBzdHJvbmcgcHVsbHVwcyB3aWxsIHNsZWVwIGZvciB0aGUgZ2l2ZW4gdGltZSBhZnRlciB0aGUKKyAqIHdyaXRlIG9wZXJhdGlvbiB3aXRob3V0IGEgc3Ryb25nIHB1bGx1cC4gIFRoaXMgaXMgYSBvbmUgc2hvdCByZXF1ZXN0IGZvcgorICogdGhlIG5leHQgd3JpdGUsIHNwZWNpZnlpbmcgemVybyB3aWxsIGNsZWFyIGEgcHJldmlvdXMgcmVxdWVzdC4KKyAqIFRoZSB3MSBtYXN0ZXIgbG9jayBtdXN0IGJlIGhlbGQuCisgKgorICogQHBhcmFtIGRlbGF5CXRpbWUgaW4gbWlsbGlzZWNvbmRzCisgKiBAcmV0dXJuCTA9c3VjY2VzcywgYW55dGhpbmcgZWxzZT1lcnJvcgorICovCit2b2lkIHcxX25leHRfcHVsbHVwKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgaW50IGRlbGF5KQoreworCWRldi0+cHVsbHVwX2R1cmF0aW9uID0gZGVsYXk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3MV9uZXh0X3B1bGx1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKaW5kZXggMDVhMjgxMC4uODc4MmVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMHgwRjsgaSA+IC0xOyBpLS0pCi0JCWlmICh3ZF90aW1lc1tpXSA+IHQpCisJCWlmICh3ZF90aW1lc1tpXSA+PSB0KQogCQkJYnJlYWs7CiAJd2RfbWFyZ2luID0gaTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCBjMDYxYzNmLi4yNGViMDEwIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+Ci0jaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCiAKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlmICghdjlzZXMtPmNsbnQtPmRvdHUpCiAJCXY5c2VzLT5mbGFncyAmPSB+VjlGU19FWFRFTkRFRDsKIAotCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplOworCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKIAogCS8qIGZvciBsZWdhY3kgbW9kZSwgZmFsbCBiYWNrIHRvIFY5RlNfQUNDRVNTX0FOWSAqLwogCWlmICghdjlmc19leHRlbmRlZCh2OXNlcykgJiYKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IDU3OTk3ZmEuLmMyOTViYTcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNDYsOSArNDYsMTEgQEAKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7CiBpbm9fdCB2OWZzX3FpZDJpbm8oc3RydWN0IHA5X3FpZCAqcWlkKTsKLXZvaWQgdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cit2b2lkIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGludCB2OWZzX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIGludCB2OWZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci12b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCk7Cit2b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfd3N0YXQgKnN0YXQpOwogdm9pZCB2OWZzX2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKik7CiBpbnQgdjlmc191ZmxhZ3Myb21vZGUoaW50IHVmbGFncywgaW50IGV4dGVuZGVkKTsKKworc3NpemVfdCB2OWZzX2ZpbGVfcmVhZG4oc3RydWN0IGZpbGUgKiwgY2hhciAqLCBjaGFyIF9fdXNlciAqLCB1MzIsIHU2NCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfYWRkci5jIGIvZnMvOXAvdmZzX2FkZHIuYwppbmRleCA5N2QzYWVkLi42ZmNiMWU3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgotI2luY2x1ZGUgImZpZC5oIgogCiAvKioKICAqIHY5ZnNfdmZzX3JlYWRwYWdlIC0gcmVhZCBhbiBlbnRpcmUgcGFnZSBpbiBmcm9tIDlQCkBAIC01MywxNCArNTIsMTIgQEAKIAlpbnQgcmV0dmFsOwogCWxvZmZfdCBvZmZzZXQ7CiAJY2hhciAqYnVmZmVyOwotCXN0cnVjdCBwOV9maWQgKmZpZDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiXG4iKTsKLQlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJYnVmZmVyID0ga21hcChwYWdlKTsKIAlvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKIAotCXJldHZhbCA9IHA5X2NsaWVudF9yZWFkbihmaWQsIGJ1ZmZlciwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOworCXJldHZhbCA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBidWZmZXIsIE5VTEwsIG9mZnNldCwgUEFHRV9DQUNIRV9TSVpFKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggZTI5OGZlMS4uODczY2QzMSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtNDUsNyArNDUsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV9zdGF0ICptaXN0YXQpCitzdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV93c3RhdCAqbWlzdGF0KQogewogCXVuc2lnbmVkIGxvbmcgcGVybSA9IG1pc3RhdC0+bW9kZTsKIAlpbnQgcmV0dHlwZSA9IERUX1JFRzsKQEAgLTY5LDMyICs2OSw1OCBAQAogc3RhdGljIGludCB2OWZzX2Rpcl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCWludCBvdmVyOworCXN0cnVjdCBwOV93c3RhdCBzdDsKKwlpbnQgZXJyOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCWludCBidWZsZW47CisJY2hhciAqc3RhdGJ1ZjsKKwlpbnQgbiwgaSA9IDA7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jd2hpbGUgKChzdCA9IHA5X2NsaWVudF9kaXJyZWFkKGZpZCwgZmlscC0+Zl9wb3MpKSAhPSBOVUxMKSB7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3QpOwogCi0JCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QtPm5hbWUuc3RyLCBzdC0+bmFtZS5sZW4sIGZpbHAtPmZfcG9zLAotCQkJdjlmc19xaWQyaW5vKCZzdC0+cWlkKSwgZHRfdHlwZShzdCkpOworCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQlpZiAob3ZlcikKKwl3aGlsZSAoMSkgeworCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgc3RhdGJ1ZiwgTlVMTCwgYnVmbGVuLAorCQkJCQkJCQlmaWQtPnJkaXJfZnBvcyk7CisJCWlmIChlcnIgPD0gMCkKIAkJCWJyZWFrOwogCi0JCWZpbHAtPmZfcG9zICs9IHN0LT5zaXplOwotCQlrZnJlZShzdCk7Ci0JCXN0ID0gTlVMTDsKKwkJbiA9IGVycjsKKwkJd2hpbGUgKGkgPCBuKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChzdGF0YnVmICsgaSwgYnVmbGVuLWksICZzdCwKKwkJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOworCQkJaWYgKGVycikgeworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlwOXN0YXRfZnJlZSgmc3QpOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKworCQkJaSArPSBzdC5zaXplKzI7CisJCQlmaWQtPnJkaXJfZnBvcyArPSBzdC5zaXplKzI7CisKKwkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QubmFtZSwgc3RybGVuKHN0Lm5hbWUpLAorCQkJICAgIGZpbHAtPmZfcG9zLCB2OWZzX3FpZDJpbm8oJnN0LnFpZCksIGR0X3R5cGUoJnN0KSk7CisKKwkJCWZpbHAtPmZfcG9zICs9IHN0LnNpemUrMjsKKworCQkJcDlzdGF0X2ZyZWUoJnN0KTsKKworCQkJaWYgKG92ZXIpIHsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKwkJfQogCX0KIAotCWtmcmVlKHN0KTsKLQlyZXR1cm4gMDsKK2ZyZWVfYW5kX2V4aXQ6CisJa2ZyZWUoc3RhdGJ1Zik7CisJcmV0dXJuIGVycjsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCA1Mjk0NGQyLi4wNDFjNTI2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTEyMCwyMyArMTIwLDcyIEBACiB9CiAKIC8qKgotICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCisgKiB2OWZzX2ZpbGVfcmVhZG4gLSByZWFkIGZyb20gYSBmaWxlCiAgKiBAZmlscDogZmlsZSBwb2ludGVyIHRvIHJlYWQKICAqIEBkYXRhOiBkYXRhIGJ1ZmZlciB0byByZWFkIGRhdGEgaW50bworICogQHVkYXRhOiB1c2VyIGRhdGEgYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvCiAgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKiBAb2Zmc2V0OiBvZmZzZXQgYXQgd2hpY2ggdG8gcmVhZCBkYXRhCiAgKgogICovCisKK3NzaXplX3QKK3Y5ZnNfZmlsZV9yZWFkbihzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLCB1MzIgY291bnQsCisJICAgICAgIHU2NCBvZmZzZXQpCit7CisJaW50IG4sIHRvdGFsOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKKwkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisKKwluID0gMDsKKwl0b3RhbCA9IDA7CisJZG8geworCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCB1ZGF0YSwgb2Zmc2V0LCBjb3VudCk7CisJCWlmIChuIDw9IDApCisJCQlicmVhazsKKworCQlpZiAoZGF0YSkKKwkJCWRhdGEgKz0gbjsKKwkJaWYgKHVkYXRhKQorCQkJdWRhdGEgKz0gbjsKKworCQlvZmZzZXQgKz0gbjsKKwkJY291bnQgLT0gbjsKKwkJdG90YWwgKz0gbjsKKwl9IHdoaWxlIChjb3VudCA+IDAgJiYgbiA9PSAoZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1opKTsKKworCWlmIChuIDwgMCkKKwkJdG90YWwgPSBuOworCisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHY5ZnNfZmlsZV9yZWFkIC0gcmVhZCBmcm9tIGEgZmlsZQorICogQGZpbHA6IGZpbGUgcG9pbnRlciB0byByZWFkCisgKiBAdWRhdGE6IHVzZXIgZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKKyAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKKyAqCisgKi8KKwogc3RhdGljIHNzaXplX3QKLXY5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKK3Y5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWRhdGEsIHNpemVfdCBjb3VudCwKIAkgICAgICAgbG9mZl90ICogb2Zmc2V0KQogewogCWludCByZXQ7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiY291bnQgJWQgb2Zmc2V0ICVsbGRcbiIsIGNvdW50LCAqb2Zmc2V0KTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3VyZWFkKGZpZCwgZGF0YSwgKm9mZnNldCwgY291bnQpOworCisJaWYgKGNvdW50ID4gKGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaKSkKKwkJcmV0ID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIE5VTEwsIHVkYXRhLCBjb3VudCwgKm9mZnNldCk7CisJZWxzZQorCQlyZXQgPSBwOV9jbGllbnRfcmVhZChmaWQsIE5VTEwsIHVkYXRhLCAqb2Zmc2V0LCBjb3VudCk7CisKIAlpZiAocmV0ID4gMCkKIAkJKm9mZnNldCArPSByZXQ7CiAKQEAgLTE1NiwxOSArMjA1LDM4IEBACiB2OWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICogZGF0YSwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0JaW50IHJldDsKKwlpbnQgbiwgcnNpemUsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgb3JpZ2luID0gKm9mZnNldDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGF0YSAlcCBjb3VudCAlZCBvZmZzZXQgJXhcbiIsIGRhdGEsCiAJCShpbnQpY291bnQsIChpbnQpKm9mZnNldCk7CiAKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3V3cml0ZShmaWQsIGRhdGEsICpvZmZzZXQsIGNvdW50KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAqb2Zmc2V0LAotCQkJCQkJCQkqb2Zmc2V0K3JldCk7Ci0JCSpvZmZzZXQgKz0gcmV0OworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyc2l6ZSA9IGZpZC0+aW91bml0OworCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQorCQlyc2l6ZSA9IGNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKKworCWRvIHsKKwkJaWYgKGNvdW50IDwgcnNpemUpCisJCQlyc2l6ZSA9IGNvdW50OworCisJCW4gPSBwOV9jbGllbnRfd3JpdGUoZmlkLCBOVUxMLCBkYXRhK3RvdGFsLCAqb2Zmc2V0K3RvdGFsLAorCQkJCQkJCQkJcnNpemUpOworCQlpZiAobiA8PSAwKQorCQkJYnJlYWs7CisJCWNvdW50IC09IG47CisJCXRvdGFsICs9IG47CisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCWlmICh0b3RhbCA+IDApIHsKKwkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgb3JpZ2luLAorCQkJCQkJCQlvcmlnaW4rdG90YWwpOworCQkqb2Zmc2V0ICs9IHRvdGFsOwogCX0KIAogCWlmICgqb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgewpAQCAtMTc2LDcgKzI0NCwxMCBAQAogCQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMiAtIDEpID4+IDk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0dXJuIHRvdGFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IGU4M2FhNWUuLjgzMTRkM2YgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIHsKIAlpbnQgZXJyLCB1bW9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnJldDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCXJldCA9IE5VTEw7CiAJc3QgPSBwOV9jbGllbnRfc3RhdChmaWQpOwpAQCAtNDE3LDYgKzQxNyw4IEBACiAJc3RydWN0IHA5X2ZpZCAqZGZpZCwgKm9maWQsICpmaWQ7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAorCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAllcnIgPSAwOwogCW9maWQgPSBOVUxMOwogCWZpZCA9IE5VTEw7CkBAIC00MjQsNiArNDI2LDcgQEAKIAlkZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5LT5kX3BhcmVudCk7CiAJaWYgKElTX0VSUihkZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBjbG9uZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWRmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTQzMiwxOCArNDM1LDIyIEBACiAJb2ZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDAsIE5VTEwsIDEpOwogCWlmIChJU19FUlIob2ZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihvZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7CiAJCW9maWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAogCWVyciA9IHA5X2NsaWVudF9mY3JlYXRlKG9maWQsIG5hbWUsIHBlcm0sIG1vZGUsIGV4dGVuc2lvbik7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVyciA8IDApIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfZmNyZWF0ZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyb3I7CisJfQogCiAJLyogbm93IHdhbGsgZnJvbSB0aGUgcGFyZW50IHNvIHdlIGNhbiBnZXQgdW5vcGVuZWQgZmlkICovCiAJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDApOwogCWlmIChJU19FUlIoZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZQpAQCAtNDUzLDYgKzQ2MCw3IEBACiAJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiaW5vZGUgY3JlYXRpb24gZmFpbGVkICVkXG4iLCBlcnIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNzM0LDcgKzc0Miw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKIAllcnIgPSAtRVBFUk07CkBAIC04MTUsMTAgKzgyMyw5IEBACiAgKi8KIAogdm9pZAotdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICpzdGF0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAordjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV93c3RhdCAqc3RhdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuOwogCWNoYXIgZXh0WzMyXTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gc2ItPnNfZnNfaW5mbzsKIApAQCAtODQyLDExICs4NDksNyBAQAogCQlpbnQgbWFqb3IgPSAtMTsKIAkJaW50IG1pbm9yID0gLTE7CiAKLQkJbiA9IHN0YXQtPmV4dGVuc2lvbi5sZW47Ci0JCWlmIChuID4gc2l6ZW9mKGV4dCktMSkKLQkJCW4gPSBzaXplb2YoZXh0KS0xOwotCQltZW1tb3ZlKGV4dCwgc3RhdC0+ZXh0ZW5zaW9uLnN0ciwgbik7Ci0JCWV4dFtuXSA9IDA7CisJCXN0cm5jcHkoZXh0LCBzdGF0LT5leHRlbnNpb24sIHNpemVvZihleHQpKTsKIAkJc3NjYW5mKGV4dCwgIiVjICV1ICV1IiwgJnR5cGUsICZtYWpvciwgJm1pbm9yKTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgJ2MnOgpAQCAtODU3LDEwICs4NjAsMTEgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkiVW5rbm93biBzcGVjaWFsIHR5cGUgJWMgKCUuKnMpXG4iLCB0eXBlLAotCQkJCXN0YXQtPmV4dGVuc2lvbi5sZW4sIHN0YXQtPmV4dGVuc2lvbi5zdHIpOworCQkJCSJVbmtub3duIHNwZWNpYWwgdHlwZSAlYyAlc1xuIiwgdHlwZSwKKwkJCQlzdGF0LT5leHRlbnNpb24pOwogCQl9OwogCQlpbm9kZS0+aV9yZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKIAl9IGVsc2UKIAkJaW5vZGUtPmlfcmRldiA9IDA7CiAKQEAgLTkwNCw3ICs5MDgsNyBAQAogCiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCXN0cnVjdCBwOV93c3RhdCAqc3Q7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJcmV0dmFsID0gLUVQRVJNOwpAQCAtOTI2LDE1ICs5MzAsMTAgQEAKIAl9CiAKIAkvKiBjb3B5IGV4dGVuc2lvbiBidWZmZXIgaW50byBidWZmZXIgKi8KLQlpZiAoc3QtPmV4dGVuc2lvbi5sZW4gPCBidWZsZW4pCi0JCWJ1ZmxlbiA9IHN0LT5leHRlbnNpb24ubGVuICsgMTsKLQotCW1lbW1vdmUoYnVmZmVyLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgYnVmbGVuIC0gMSk7Ci0JYnVmZmVyW2J1Zmxlbi0xXSA9IDA7CisJc3RybmNweShidWZmZXIsIHN0LT5leHRlbnNpb24sIGJ1Zmxlbik7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKLQkJIiVzIC0+ICUuKnMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbi5sZW4sCi0JCXN0LT5leHRlbnNpb24uc3RyLCBidWZmZXIpOworCQkiJXMgLT4gJXMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbiwgYnVmZmVyKTsKIAogCXJldHZhbCA9IGJ1ZmxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBiZjU5YzM5Li5kNmNiMWEwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IE5VTEw7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0ID0gTlVMTDsKKwlzdHJ1Y3QgcDlfd3N0YXQgKnN0ID0gTlVMTDsKIAlpbnQgbW9kZSA9IFNfSVJXWFVHTyB8IFNfSVNWVFg7CiAJdWlkX3QgdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJZ2lkX3QgZ2lkID0gY3VycmVudC0+ZnNnaWQ7CkBAIC0xNjEsMTAgKzE2MSwxNCBAQAogCiAJc2ItPnNfcm9vdCA9IHJvb3Q7CiAJcm9vdC0+ZF9pbm9kZS0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJnN0LT5xaWQpOworCiAJdjlmc19zdGF0Mmlub2RlKHN0LCByb290LT5kX2lub2RlLCBzYik7CisKIAl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKKwlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiByZXR1cm4gc2ltcGxlIHNldCBtb3VudFxuIik7CiAJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwogCiByZWxlYXNlX3NiOgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggOWU5ZDcwYy4uZTQ2Mjk3ZiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC02LDYxICs2LDkgQEAKIAogaWYgQkxPQ0sKIAotY29uZmlnIEVYVDJfRlMKLQl0cmlzdGF0ZSAiU2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQiCi0JaGVscAotCSAgRXh0MiBpcyBhIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtIGZvciBoYXJkIGRpc2tzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0Mi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQotY29uZmlnIEVYVDJfRlNfWEFUVFIKLQlib29sICJFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0MiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgRVhUMl9GU19YSVAKLQlib29sICJFeHQyIGV4ZWN1dGUgaW4gcGxhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYVDJfRlMgJiYgTU1VCi0JaGVscAotCSAgRXhlY3V0ZSBpbiBwbGFjZSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuIElmIHlvdQotCSAgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNlbGVjdCB0byBtb3VudCBibG9jayBkZXZpY2VzIHdoaWNoIGFyZQotCSAgY2FwYWJsZSBvZiB0aGlzIGZlYXR1cmUgd2l0aG91dCB1c2luZyB0aGUgcGFnZSBjYWNoZS4KLQotCSAgSWYgeW91IGRvIG5vdCB1c2UgYSBibG9jayBkZXZpY2UgdGhhdCBpcyBjYXBhYmxlIG9mIHVzaW5nIHRoaXMsCi0JICBvciBpZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9leHQyL0tjb25maWciCitzb3VyY2UgImZzL2V4dDMvS2NvbmZpZyIKK3NvdXJjZSAiZnMvZXh0NC9LY29uZmlnIgogCiBjb25maWcgRlNfWElQCiAjIGV4ZWN1dGUgaW4gcGxhY2UKQEAgLTY4LDIxOCArMTYsOCBAQAogCWRlcGVuZHMgb24gRVhUMl9GU19YSVAKIAlkZWZhdWx0IHkKIAotY29uZmlnIEVYVDNfRlMKLQl0cmlzdGF0ZSAiRXh0MyBqb3VybmFsbGluZyBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCXNlbGVjdCBKQkQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBqb3VybmFsbGluZyB2ZXJzaW9uIG9mIHRoZSBTZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KLQkgIChvZnRlbiBjYWxsZWQgZXh0MyksIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbQotCSAgKG1ldGhvZCB0byBvcmdhbml6ZSBmaWxlcyBvbiBhIHN0b3JhZ2UgZGV2aWNlKSBmb3IgaGFyZCBkaXNrcy4KLQotCSAgVGhlIGpvdXJuYWxsaW5nIGNvZGUgaW5jbHVkZWQgaW4gdGhpcyBkcml2ZXIgbWVhbnMgeW91IGRvIG5vdCBoYXZlCi0JICB0byBydW4gZTJmc2NrIChmaWxlIHN5c3RlbSBjaGVja2VyKSBvbiB5b3VyIGZpbGUgc3lzdGVtcyBhZnRlciBhCi0JICBjcmFzaC4gIFRoZSBqb3VybmFsIGtlZXBzIHRyYWNrIG9mIGFueSBjaGFuZ2VzIHRoYXQgd2VyZSBiZWluZyBtYWRlCi0JICBhdCB0aGUgdGltZSB0aGUgc3lzdGVtIGNyYXNoZWQsIGFuZCBjYW4gZW5zdXJlIHRoYXQgeW91ciBmaWxlIHN5c3RlbQotCSAgaXMgY29uc2lzdGVudCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxlbmd0aHkgY2hlY2suCi0KLQkgIE90aGVyIHRoYW4gYWRkaW5nIHRoZSBqb3VybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG9uLWRpc2sgZm9ybWF0Ci0JICBvZiBleHQzIGlzIGlkZW50aWNhbCB0byBleHQyLiAgSXQgaXMgcG9zc2libGUgdG8gZnJlZWx5IHN3aXRjaAotCSAgYmV0d2VlbiB1c2luZyB0aGUgZXh0MyBkcml2ZXIgYW5kIHRoZSBleHQyIGRyaXZlciwgYXMgbG9uZyBhcyB0aGUKLQkgIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGNsZWFubHkgdW5tb3VudGVkLCBvciBlMmZzY2sgaXMgcnVuIG9uIHRoZSBmaWxlCi0JICBzeXN0ZW0uCi0KLQkgIFRvIGFkZCBhIGpvdXJuYWwgb24gYW4gZXhpc3RpbmcgZXh0MiBmaWxlIHN5c3RlbSBvciBjaGFuZ2UgdGhlCi0JICBiZWhhdmlvciBvZiBleHQzIGZpbGUgc3lzdGVtcywgeW91IGNhbiB1c2UgdGhlIHR1bmUyZnMgdXRpbGl0eSAoIm1hbgotCSAgdHVuZTJmcyIpLiAgVG8gbW9kaWZ5IGF0dHJpYnV0ZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIGV4dDMKLQkgIGZpbGUgc3lzdGVtcywgdXNlIGNoYXR0ciAoIm1hbiBjaGF0dHIiKS4gIFlvdSBuZWVkIHRvIGJlIHVzaW5nCi0JICBlMmZzcHJvZ3MgdmVyc2lvbiAxLjIwIG9yIGxhdGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBleHQzIGpvdXJuYWxzCi0JICAoYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncy8+KS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1hBVFRSCi0JYm9vbCAiRXh0MyBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUM19GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUM19GU19TRUNVUklUWQotCWJvb2wgIkV4dDMgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQzIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEVYVDRfRlMKLQl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCi0Jc2VsZWN0IEpCRDIKLQlzZWxlY3QgQ1JDMTYKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS4KLQotCSAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLAotCSAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aAotCSAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdAotCSAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkCi0JICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcywKLQkgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZAotCSAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdAotCSAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLgotCi0JICBUaGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgc3VwcG9ydCBtb3VudGluZyBhbiBleHQzCi0JICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQotCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAotCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCi0JICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0Ci0JICBmaWxlc3lzdGVtIGluaXRpYWxseS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDRkZXYuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBFWFQ0REVWX0NPTVBBVAotCWJvb2wgIkVuYWJsZSBleHQ0ZGV2IGNvbXBhdGliaWxpdHkiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JaGVscAotCSAgU3RhcnRpbmcgd2l0aCAyLjYuMjgsIHRoZSBuYW1lIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0gd2FzCi0JICByZW5hbWVkIGZyb20gZXh0NGRldiB0byBleHQ0LiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZQotCSAgbGVnYWN5IHVzZXJzcGFjZSBwcm9ncmFtcyAoc3VjaCBhcyBrbGliYydzIGZzdHlwZSkgaGF2ZQotCSAgImV4dDRkZXYiIGhhcmRjb2RlZC4KLQotCSAgVG8gZW5hYmxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIHRoYXQgc3lzdGVtcyB0aGF0IGFyZQotCSAgc3RpbGwgZXhwZWN0aW5nIHRvIG1vdW50IGV4dDQgZmlsZXN5c3RlbXMgdXNpbmcgZXh0NGRldiwKLQkgIGNob3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KLQkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKLQotY29uZmlnIEVYVDRfRlNfWEFUVFIKLQlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0NC4KLQotY29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDRfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0NCBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgSkJECi0JdHJpc3RhdGUKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcy4gIEl0IGlzCi0JICBjdXJyZW50bHkgdXNlZCBieSB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgYnV0IGl0IGNvdWxkIGFsc28gYmUKLQkgIHVzZWQgdG8gYWRkIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sKLQkgIGRldmljZXMgc3VjaCBhcyBSQUlEIG9yIExWTS4KLQotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDMgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBqYmQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQzIGludG8gdGhlIGtlcm5lbCwgeW91Ci0JICBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCi0KLWNvbmZpZyBKQkRfREVCVUcKLQlib29sICJKQkQgKGV4dDMpIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSkJEICYmIERFQlVHX0ZTCi0JaGVscAotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yIHBvdGVudGlhbGx5IGFueQotCSAgb3RoZXIgZmlsZSBzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRCksIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8KLQkgIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywgaW4gb3JkZXIgdG8KLQkgIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuICBCeSBkZWZhdWx0IHRoZQotCSAgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCi0KLQkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKLQkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLCB3aGVyZSBOIGlzIGEKLQkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUsIHRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCi0JICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbwotCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLgotCi1jb25maWcgSkJEMgotCXRyaXN0YXRlCi0Jc2VsZWN0IENSQzMyCi0JaGVscAotCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcyB0aGF0IHN1cHBvcnQKLQkgIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYmxvY2sgbnVtYmVycy4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5Ci0JICB0aGUgZXh0NCBhbmQgT0NGUzIgZmlsZXN5c3RlbXMsIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gYWRkCi0JICBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrIGRldmljZXMgc3VjaAotCSAgYXMgUkFJRCBvciBMVk0uCi0KLQkgIElmIHlvdSBhcmUgdXNpbmcgZXh0NCBvciBPQ0ZTMiwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDQgb3IgT0NGUzIgdGhlbiB5b3Ugd2lsbAotCSAgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgamJkMi4gIElmIHlvdSBhcmUgY29tcGlsaW5nIGV4dDQgb3IgT0NGUzIgaW50byB0aGUga2VybmVsLAotCSAgeW91IGNhbm5vdCBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZS4KLQotY29uZmlnIEpCRDJfREVCVUcKLQlib29sICJKQkQyIChleHQ0KSBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEpCRDIgJiYgREVCVUdfRlMKLQloZWxwCi0JICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBleHQ0IGpvdXJuYWxlZCBmaWxlIHN5c3RlbSAob3IKLQkgIHBvdGVudGlhbGx5IGFueSBvdGhlciBmaWxlc3lzdGVtL2RldmljZSB1c2luZyBKQkQyKSwgdGhpcyBvcHRpb24KLQkgIGFsbG93cyB5b3UgdG8gZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nLAotCSAgaW4gb3JkZXIgdG8gaGVscCB0cmFjayBkb3duIGFueSBwcm9ibGVtcyB5b3UgYXJlIGhhdmluZy4KLQkgIEJ5IGRlZmF1bHQsIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IHdpbGwgYmUgdHVybmVkIG9mZi4KLQotCSAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB0dXJuIG9uIGRlYnVnZ2luZwotCSAgd2l0aCAiZWNobyBOID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIiwgd2hlcmUgTiBpcyBhCi0JICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZwotCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KLQkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLgorc291cmNlICJmcy9qYmQvS2NvbmZpZyIKK3NvdXJjZSAiZnMvamJkMi9LY29uZmlnIgogCiBjb25maWcgRlNfTUJDQUNIRQogIyBNZXRhIGJsb2NrIGNhY2hlIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIChleHQyL2V4dDMvZXh0NCkKQEAgLTY2NSw3ICs0MDMsNyBAQAogCSAgTiBoZXJlLgogCiBjb25maWcgRlVTRV9GUwotCXRyaXN0YXRlICJGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSBzdXBwb3J0IgorCXRyaXN0YXRlICJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydCIKIAloZWxwCiAJICBXaXRoIEZVU0UgaXQgaXMgcG9zc2libGUgdG8gaW1wbGVtZW50IGEgZnVsbHkgZnVuY3Rpb25hbCBmaWxlc3lzdGVtCiAJICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLgpAQCAtMTE2OCwxOTUgKzkwNiw3IEBACiAJICBUbyBjb21waWxlIHRoZSBFRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZWZzLgogCi1jb25maWcgSkZGUzJfRlMKLQl0cmlzdGF0ZSAiSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0gdjIgKEpGRlMyKSBzdXBwb3J0IgotCXNlbGVjdCBDUkMzMgotCWRlcGVuZHMgb24gTVRECi0JaGVscAotCSAgSkZGUzIgaXMgdGhlIHNlY29uZCBnZW5lcmF0aW9uIG9mIHRoZSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbQotCSAgZm9yIHVzZSBvbiBkaXNrbGVzcyBlbWJlZGRlZCBkZXZpY2VzLiBJdCBwcm92aWRlcyBpbXByb3ZlZCB3ZWFyCi0JICBsZXZlbGxpbmcsIGNvbXByZXNzaW9uIGFuZCBzdXBwb3J0IGZvciBoYXJkIGxpbmtzLiBZb3UgY2Fubm90IHVzZQotCSAgdGhpcyBvbiBub3JtYWwgYmxvY2sgZGV2aWNlcywgb25seSBvbiAnTVREJyBkZXZpY2VzLgotCi0JICBGdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIEpGRlMyIGlzCi0JICBhdmFpbGFibGUgYXQgPGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vamZmczIvPi4KLQotY29uZmlnIEpGRlMyX0ZTX0RFQlVHCi0JaW50ICJKRkZTMiBkZWJ1Z2dpbmcgdmVyYm9zaXR5ICgwID0gcXVpZXQsIDIgPSBub2lzeSkiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgVGhpcyBjb250cm9scyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBtZXNzYWdlcyBwcm9kdWNlZCBieSB0aGUgSkZGUzIKLQkgIGNvZGUuIFNldCBpdCB0byB6ZXJvIGZvciB1c2UgaW4gcHJvZHVjdGlvbiBzeXN0ZW1zLiBGb3IgZXZhbHVhdGlvbiwKLQkgIHRlc3RpbmcgYW5kIGRlYnVnZ2luZywgaXQncyBhZHZpc2FibGUgdG8gc2V0IGl0IHRvIG9uZS4gVGhpcyB3aWxsCi0JICBlbmFibGUgYSBmZXcgYXNzZXJ0aW9ucyBhbmQgd2lsbCBwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXQgdGhlCi0JICBLRVJOX0RFQlVHIGxvZ2xldmVsLCB3aGVyZSB0aGV5IHdvbid0IG5vcm1hbGx5IGJlIHZpc2libGUuIExldmVsIDIKLQkgIGlzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCAtIGl0IGVuYWJsZXMgZXh0cmEgZGVidWdnaW5nIGluIGNlcnRhaW4KLQkgIGFyZWFzIHdoaWNoIGF0IG9uZSBwb2ludCBuZWVkZWQgZGVidWdnaW5nLCBidXQgd2hlbiB0aGUgYnVncyB3ZXJlCi0JICBsb2NhdGVkIGFuZCBmaXhlZCwgdGhlIGRldGFpbGVkIG1lc3NhZ2VzIHdlcmUgcmVsZWdhdGVkIHRvIGxldmVsIDIuCi0KLQkgIElmIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mIHRoZQotCSAgbWVzc2FnZXMgYXQgZGVidWcgbGV2ZWwgMSB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuCi0KLWNvbmZpZyBKRkZTMl9GU19XUklURUJVRkZFUgotCWJvb2wgIkpGRlMyIHdyaXRlLWJ1ZmZlcmluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgdGhlIHdyaXRlLWJ1ZmZlcmluZyBzdXBwb3J0IGluIEpGRlMyLgotCi0JICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBKRkZTMiBvbiB0aGUgZm9sbG93aW5nCi0JICB0eXBlcyBvZiBmbGFzaCBkZXZpY2VzOgotCSAgICAtIE5BTkQgZmxhc2gKLQkgICAgLSBOT1IgZmxhc2ggd2l0aCB0cmFuc3BhcmVudCBFQ0MKLQkgICAgLSBEYXRhRmxhc2gKLQotY29uZmlnIEpGRlMyX0ZTX1dCVUZfVkVSSUZZCi0JYm9vbCAiVmVyaWZ5IEpGRlMyIHdyaXRlLWJ1ZmZlciByZWFkcyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgVGhpcyBjYXVzZXMgSkZGUzIgdG8gcmVhZCBiYWNrIGV2ZXJ5IHBhZ2Ugd3JpdHRlbiB0aHJvdWdoIHRoZQotCSAgd3JpdGUtYnVmZmVyLCBhbmQgY2hlY2sgZm9yIGVycm9ycy4KLQotY29uZmlnIEpGRlMyX1NVTU1BUlkKLQlib29sICJKRkZTMiBzdW1tYXJ5IHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUyAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHN1bW1hcnkgaW5mb3JtYXRpb24KLQkgIGZvciBmYXN0ZXIgZmlsZXN5c3RlbSBtb3VudC4KLQotCSAgVGhlIHN1bW1hcnkgaW5mb3JtYXRpb24gY2FuIGJlIGluc2VydGVkIGludG8gYSBmaWxlc3lzdGVtIGltYWdlCi0JICBieSB0aGUgdXRpbGl0eSAnc3VtdG9vbCcuCi0KLQkgIElmIHVuc3VyZSwgc2F5ICdOJy4KLQotY29uZmlnIEpGRlMyX0ZTX1hBVFRSCi0JYm9vbCAiSkZGUzIgWEFUVFIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBKRkZTMl9GU19QT1NJWF9BQ0wKLQlib29sICJKRkZTMiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgSkZGUzJfRlNfU0VDVVJJVFkKLQlib29sICJKRkZTMiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBqZmZzMiBmaWxlc3lzdGVtLgotCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCi0JICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCi0KLWNvbmZpZyBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JYm9vbCAiQWR2YW5jZWQgY29tcHJlc3Npb24gb3B0aW9ucyBmb3IgSkZGUzIiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gZXhwbGljaXRseSBjaG9vc2Ugd2hpY2gKLQkgIGNvbXByZXNzaW9uIG1vZHVsZXMsIGlmIGFueSwgYXJlIGVuYWJsZWQgaW4gSkZGUzIuIFJlbW92aW5nCi0JICBjb21wcmVzc29ycyBjYW4gbWVhbiB5b3UgY2Fubm90IHJlYWQgZXhpc3RpbmcgZmlsZSBzeXN0ZW1zLAotCSAgYW5kIGVuYWJsaW5nIGV4cGVyaW1lbnRhbCBjb21wcmVzc29ycyBjYW4gbWVhbiB0aGF0IHlvdQotCSAgd3JpdGUgYSBmaWxlIHN5c3RlbSB3aGljaCBjYW5ub3QgYmUgcmVhZCBieSBhIHN0YW5kYXJkIGtlcm5lbC4KLQotCSAgSWYgdW5zdXJlLCB5b3Ugc2hvdWxkIF9kZWZpbml0ZWx5XyBzYXkgJ04nLgotCi1jb25maWcgSkZGUzJfWkxJQgotCWJvb2wgIkpGRlMyIFpMSUIgY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCXNlbGVjdCBaTElCX0lORkxBVEUKLQlzZWxlY3QgWkxJQl9ERUZMQVRFCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFpsaWIgaXMgZGVzaWduZWQgdG8gYmUgYSBmcmVlLCBnZW5lcmFsLXB1cnBvc2UsIGxlZ2FsbHkgdW5lbmN1bWJlcmVkLAotCSAgbG9zc2xlc3MgZGF0YS1jb21wcmVzc2lvbiBsaWJyYXJ5IGZvciB1c2Ugb24gdmlydHVhbGx5IGFueSBjb21wdXRlcgotCSAgaGFyZHdhcmUgYW5kIG9wZXJhdGluZyBzeXN0ZW0uIFNlZSA8aHR0cDovL3d3dy5nemlwLm9yZy96bGliLz4gZm9yCi0JICBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCi0JICBTYXkgJ1knIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX0xaTwotCWJvb2wgIkpGRlMyIExaTyBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0Jc2VsZWN0IExaT19DT01QUkVTUwotCXNlbGVjdCBMWk9fREVDT01QUkVTUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBtaW5pbHpvLWJhc2VkIGNvbXByZXNzaW9uLiBHZW5lcmFsbHkgd29ya3MgYmV0dGVyIHRoYW4gWmxpYi4KLQotCSAgVGhpcyBmZWF0dXJlIHdhcyBhZGRlZCBpbiBKdWx5LCAyMDA3LiBTYXkgJ04nIGlmIHlvdSBuZWVkCi0JICBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYm9vdGxvYWRlcnMgb3Iga2VybmVscy4KLQotY29uZmlnIEpGRlMyX1JUSU1FCi0JYm9vbCAiSkZGUzIgUlRJTUUgY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBSdGltZSBkb2VzIG1hbmFnZSB0byByZWNvbXByZXNzIGFscmVhZHktY29tcHJlc3NlZCBkYXRhLiBTYXkgJ1knIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX1JVQklOCi0JYm9vbCAiSkZGUzIgUlVCSU4gY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBSVUJJTk1JUFMgYW5kIERZTlJVQklOIGNvbXByZXNzb3JzLiBTYXkgJ04nIGlmIHVuc3VyZS4KLQotY2hvaWNlCi0JcHJvbXB0ICJKRkZTMiBkZWZhdWx0IGNvbXByZXNzaW9uIG1vZGUiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlkZWZhdWx0IEpGRlMyX0NNT0RFX1BSSU9SSVRZCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWhlbHAKLQkgIFlvdSBjYW4gc2V0IGhlcmUgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSBvZiBKRkZTMiBmcm9tCi0JICB0aGUgYXZhaWxhYmxlIGNvbXByZXNzaW9uIG1vZGVzLiBEb24ndCB0b3VjaCBpZiB1bnN1cmUuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9OT05FCi0JYm9vbCAibm8gY29tcHJlc3Npb24iCi0JaGVscAotCSAgVXNlcyBubyBjb21wcmVzc2lvbi4KLQotY29uZmlnIEpGRlMyX0NNT0RFX1BSSU9SSVRZCi0JYm9vbCAicHJpb3JpdHkiCi0JaGVscAotCSAgVHJpZXMgdGhlIGNvbXByZXNzb3JzIGluIGEgcHJlZGVmaW5lZCBvcmRlciBhbmQgY2hvb3NlcyB0aGUgZmlyc3QKLQkgIHN1Y2Nlc3NmdWwgb25lLgotCi1jb25maWcgSkZGUzJfQ01PREVfU0laRQotCWJvb2wgInNpemUgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgVHJpZXMgYWxsIGNvbXByZXNzb3JzIGFuZCBjaG9vc2VzIHRoZSBvbmUgd2hpY2ggaGFzIHRoZSBzbWFsbGVzdAotCSAgcmVzdWx0LgotCi1jb25maWcgSkZGUzJfQ01PREVfRkFWT1VSTFpPCi0JYm9vbCAiRmF2b3VyIExaTyIKLQloZWxwCi0JICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0Ci0JICByZXN1bHQgYnV0IGdpdmVzIHNvbWUgcHJlZmVyZW5jZSB0byBMWk8gKHdoaWNoIGhhcyBmYXN0ZXIKLQkgIGRlY29tcHJlc3Npb24pIGF0IHRoZSBleHBlbnNlIG9mIHNpemUuCi0KLWVuZGNob2ljZQotCitzb3VyY2UgImZzL2pmZnMyL0tjb25maWciCiAjIFVCSUZTIEZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24KIHNvdXJjZSAiZnMvdWJpZnMvS2NvbmZpZyIKIApAQCAtMTkxMywxNDggKzE0NjMsNyBAQAogCiAJICBzbWJtb3VudCBmcm9tIHNhbWJhIDIuMi4wIG9yIGxhdGVyIHN1cHBvcnRzIHRoaXMuCiAKLWNvbmZpZyBDSUZTCi0JdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgotCWRlcGVuZHMgb24gSU5FVAotCXNlbGVjdCBOTFMKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQotCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrIAotCSAgKFNNQikgcHJvdG9jb2wsIHRoZSBuYXRpdmUgZmlsZSBzaGFyaW5nIG1lY2hhbmlzbSBmb3IgbW9zdCBlYXJseQotCSAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBUaGUgQ0lGUyBwcm90b2NvbCBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgCi0JICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQgIAotCSAgYW5kIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCi0JICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBMaW1pdGVkCi0JICBzdXBwb3J0IGZvciBPUy8yIGFuZCBXaW5kb3dzIE1FIGFuZCBzaW1pbGFyIHNlcnZlcnMgaXMgcHJvdmlkZWQgYXMKLQkgIHdlbGwuCi0KLQkgIFRoZSBjaWZzIG1vZHVsZSBwcm92aWRlcyBhbiBhZHZhbmNlZCBuZXR3b3JrIGZpbGUgc3lzdGVtCi0JICBjbGllbnQgZm9yIG1vdW50aW5nIHRvIENJRlMgY29tcGxpYW50IHNlcnZlcnMuICBJdCBpbmNsdWRlcwotCSAgc3VwcG9ydCBmb3IgREZTIChoaWVyYXJjaGljYWwgbmFtZSBzcGFjZSksIHNlY3VyZSBwZXItdXNlcgotCSAgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHZpYSBLZXJiZXJvcyBvciBOVExNIG9yIE5UTE12MiwKLQkgIHNhZmUgZGlzdHJpYnV0ZWQgY2FjaGluZyAob3Bsb2NrKSwgb3B0aW9uYWwgcGFja2V0Ci0JICBzaWduaW5nLCBVbmljb2RlIGFuZCBvdGhlciBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbXByb3ZlbWVudHMuCi0JICBJZiB5b3UgbmVlZCB0byBtb3VudCB0byBTYW1iYSBvciBXaW5kb3dzIGZyb20gdGhpcyBtYWNoaW5lLCBzYXkgWS4KLQotY29uZmlnIENJRlNfU1RBVFMKLSAgICAgICAgYm9vbCAiQ0lGUyBzdGF0aXN0aWNzIgotICAgICAgICBkZXBlbmRzIG9uIENJRlMKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBzZXJ2ZXIgc2hhcmUKLQkgIG1vdW50ZWQgYnkgdGhlIGNpZnMgY2xpZW50IHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCi0KLWNvbmZpZyBDSUZTX1NUQVRTMgotCWJvb2wgIkV4dGVuZGVkIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBDSUZTX1NUQVRTCi0JaGVscAotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyBtb3JlIGRldGFpbGVkIHN0YXRpc3RpY3Mgb24gU01CCi0JICByZXF1ZXN0IHRpbWluZyB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9EZWJ1Z0RhdGEgYW5kIGFsc28KLQkgIGFsbG93IG9wdGlvbmFsIGxvZ2dpbmcgb2Ygc2xvdyByZXNwb25zZXMgdG8gZG1lc2cgKGRlcGVuZGluZyBvbiB0aGUKLQkgIHZhbHVlIG9mIC9wcm9jL2ZzL2NpZnMvY2lmc0ZZSSwgc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMpLgotCSAgVGhlc2UgYWRkaXRpb25hbCBzdGF0aXN0aWNzIG1heSBoYXZlIGEgbWlub3IgZWZmZWN0IG9uIHBlcmZvcm1hbmNlCi0JICBhbmQgbWVtb3J5IHV0aWxpemF0aW9uLgotCi0JICBVbmxlc3MgeW91IGFyZSBhIGRldmVsb3BlciBvciBhcmUgZG9pbmcgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcwotCSAgb3IgdHVuaW5nLCBzYXkgTi4KLQotY29uZmlnIENJRlNfV0VBS19QV19IQVNICi0JYm9vbCAiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2Ugd2Vha2VyIExBTk1BTiBzZWN1cml0eSIKLQlkZXBlbmRzIG9uIENJRlMKLQloZWxwCi0JICBNb2Rlcm4gQ0lGUyBzZXJ2ZXJzIGluY2x1ZGluZyBTYW1iYSBhbmQgbW9zdCBXaW5kb3dzIHZlcnNpb25zCi0JICAoc2luY2UgMTk5Nykgc3VwcG9ydCBzdHJvbmdlciBOVExNIChhbmQgZXZlbiBOVExNdjIgYW5kIEtlcmJlcm9zKQotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcy4gVGhlc2UgaGFzaCB0aGUgcGFzc3dvcmQgbW9yZSBzZWN1cmVseQotCSAgdGhhbiB0aGUgbWVjaGFuaXNtcyB1c2VkIGluIHRoZSBvbGRlciBMQU5NQU4gdmVyc2lvbiBvZiB0aGUKLQkgIFNNQiBwcm90b2NvbCBidXQgTEFOTUFOIGJhc2VkIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZCB0bwotCSAgZXN0YWJsaXNoIHNlc3Npb25zIHdpdGggc29tZSBvbGQgU01CIHNlcnZlcnMuCi0KLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUgY2lmcyBtb2R1bGUgdG8gbW91bnQgdG8gb2xkZXIKLQkgIExBTk1BTiBiYXNlZCBzZXJ2ZXJzIHN1Y2ggYXMgT1MvMiBhbmQgV2luZG93cyA5NSwgYnV0IHN1Y2gKLQkgIG1vdW50cyBtYXkgYmUgbGVzcyBzZWN1cmUgdGhhbiBtb3VudHMgdXNpbmcgTlRMTSBvciBtb3JlIHJlY2VudAotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcyBpZiB5b3UgYXJlIG9uIGEgcHVibGljIG5ldHdvcmsuICBVbmxlc3MgeW91Ci0JICBoYXZlIGEgbmVlZCB0byBhY2Nlc3Mgb2xkIFNNQiBzZXJ2ZXJzIChhbmQgYXJlIG9uIGEgcHJpdmF0ZQotCSAgbmV0d29yaykgeW91IHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uICBFdmVuIGlmIHRoaXMgc3VwcG9ydAotCSAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLCBMQU5NQU4gYXV0aGVudGljYXRpb24gd2lsbCBub3QgYmUKLQkgIHVzZWQgYXV0b21hdGljYWxseS4gQXQgcnVudGltZSBMQU5NQU4gbW91bnRzIGFyZSBkaXNhYmxlZCBidXQKLQkgIGNhbiBiZSBzZXQgdG8gcmVxdWlyZWQgKG9yIG9wdGlvbmFsKSBlaXRoZXIgaW4KLQkgIC9wcm9jL2ZzL2NpZnMgKHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWwpIG9yIHZpYSBhbgotCSAgb3B0aW9uIG9uIHRoZSBtb3VudCBjb21tYW5kLiBUaGlzIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkKLQkgIGRlZmF1bHQgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRvd25ncmFkZQotCSAgYXR0YWNrLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19VUENBTEwKLQkgIGJvb2wgIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGFjY2Vzc2VzCi0JICAgIHVzZXJzcGFjZSBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgU1BORUdPIHBhY2thZ2VkIChSRkMgNDE3OCkKLQkgICAgS2VyYmVyb3MgdGlja2V0cyB3aGljaCBhcmUgbmVlZGVkIHRvIG1vdW50IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMKLQkgICAgKGZvciB3aGljaCBtb3JlIHNlY3VyZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuIElmCi0JICAgIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1hBVFRSCi0gICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKLSAgICAgICAgZGVwZW5kcyBvbiBDSUZTCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLSAgICAgICAgICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0gICAgICAgICAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuICBDSUZTIG1hcHMgdGhlIG5hbWUgb2YKLSAgICAgICAgICBleHRlbmRlZCBhdHRyaWJ1dGVzIGJlZ2lubmluZyB3aXRoIHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXgKLSAgICAgICAgICB0byBTTUIvQ0lGUyBFQXMuIEVBcyBhcmUgc3RvcmVkIG9uIFdpbmRvd3Mgc2VydmVycyB3aXRob3V0IHRoZQotICAgICAgICAgIHVzZXIgbmFtZXNwYWNlIHByZWZpeCwgYnV0IHRoZWlyIG5hbWVzIGFyZSBzZWVuIGJ5IExpbnV4IGNpZnMgY2xpZW50cwotICAgICAgICAgIHByZWZhY2VkIGJ5IHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXguIFRoZSBzeXN0ZW0gbmFtZXNwYWNlCi0gICAgICAgICAgKHVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyB0byBzdG9yZSBBQ0xzKSBpcyBub3Qgc3VwcG9ydGVkIGF0Ci0gICAgICAgICAgdGhpcyB0aW1lLgotCi0gICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfUE9TSVgKLSAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIgotICAgICAgICBkZXBlbmRzIG9uIENJRlNfWEFUVFIKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGNpZnMgY2xpZW50IHRvIGF0dGVtcHQgdG8KLQkgIG5lZ290aWF0ZSBhIG5ld2VyIGRpYWxlY3Qgd2l0aCBzZXJ2ZXJzLCBzdWNoIGFzIFNhbWJhIDMuMC41Ci0JICBvciBsYXRlciwgdGhhdCBvcHRpb25hbGx5IGNhbiBoYW5kbGUgbW9yZSBQT1NJWCBsaWtlIChyYXRoZXIKLQkgIHRoYW4gV2luZG93cyBsaWtlKSBmaWxlIGJlaGF2aW9yLiAgSXQgYWxzbyBlbmFibGVzCi0JICBzdXBwb3J0IGZvciBQT1NJWCBBQ0xzIChnZXRmYWNsIGFuZCBzZXRmYWNsKSB0byBzZXJ2ZXJzCi0JICAoc3VjaCBhcyBTYW1iYSAzLjEwIGFuZCBsYXRlcikgd2hpY2ggY2FuIG5lZ290aWF0ZQotCSAgQ0lGUyBQT1NJWCBBQ0wgc3VwcG9ydC4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX0RFQlVHMgotCWJvb2wgIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzIgotCWRlcGVuZHMgb24gQ0lGUwotCWhlbHAKLQkgICBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGEgZmV3IG1vcmUgZGVidWdnaW5nIHJvdXRpbmVzCi0JICAgdG8gdGhlIGNpZnMgY29kZSB3aGljaCBzbGlnaHRseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YKLQkgICB0aGUgY2lmcyBtb2R1bGUgYW5kIGNhbiBjYXVzZSBhZGRpdGlvbmFsIGxvZ2dpbmcgb2YgZGVidWcKLQkgICBtZXNzYWdlcyBpbiBzb21lIGVycm9yIHBhdGhzLCBzbG93aW5nIHBlcmZvcm1hbmNlLiBUaGlzCi0JICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwotCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19FWFBFUklNRU5UQUwKLQkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTAotCSAgaGVscAotCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMgYXJlCi0JICAgIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGluY2x1ZGUgREZTIHN1cHBvcnQgYW5kIGRpcmVjdG9yeSAKLQkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKLQkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgotCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uIAotCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKLQkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUgCi0JICAgIGZvciBtb3JlIGRldGFpbHMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19ERlNfVVBDQUxMCi0JICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTX0VYUEVSSU1FTlRBTAotCSAgZGVwZW5kcyBvbiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UKLQkgICAgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KLQkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KLQkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9jaWZzL0tjb25maWciCiAKIGNvbmZpZyBOQ1BfRlMKIAl0cmlzdGF0ZSAiTkNQIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHRvIG1vdW50IE5ldFdhcmUgdm9sdW1lcykiCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnLmJpbmZtdCBiL2ZzL0tjb25maWcuYmluZm10CmluZGV4IDE3YzljNWUuLmNlOWZiM2YgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcuYmluZm10CisrKyBiL2ZzL0tjb25maWcuYmluZm10CkBAIC0yNSw3ICsyNSw3IEBACiAKIGNvbmZpZyBDT01QQVRfQklORk1UX0VMRgogCWJvb2wKLQlkZXBlbmRzIG9uIENPTVBBVCAmJiBNTVUKKwlkZXBlbmRzIG9uIENPTVBBVCAmJiBCSU5GTVRfRUxGCiAKIGNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDCiAJYm9vbCAiS2VybmVsIHN1cHBvcnQgZm9yIEZEUElDIEVMRiBiaW5hcmllcyIKQEAgLTQwLDYgKzQwLDI4IEBACiAKIAkgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcnVuIEZEUElDIEVMRiBiaW5hcmllcyBvbiBNTVUgbGludXggYWxzby4KIAorY29uZmlnIENPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCisJYm9vbCAiV3JpdGUgRUxGIGNvcmUgZHVtcHMgd2l0aCBwYXJ0aWFsIHNlZ21lbnRzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQklORk1UX0VMRgorCWhlbHAKKwkgIEVMRiBjb3JlIGR1bXAgZmlsZXMgZGVzY3JpYmUgZWFjaCBtZW1vcnkgbWFwcGluZyBvZiB0aGUgY3Jhc2hlZAorCSAgcHJvY2VzcywgYW5kIGNhbiBjb250YWluIG9yIG9taXQgdGhlIG1lbW9yeSBjb250ZW50cyBvZiBlYWNoIG9uZS4KKwkgIFRoZSBjb250ZW50cyBvZiBhbiB1bm1vZGlmaWVkIHRleHQgbWFwcGluZyBhcmUgb21pdHRlZCBieSBkZWZhdWx0LgorCisJICBGb3IgYW4gdW5tb2RpZmllZCB0ZXh0IG1hcHBpbmcgb2YgYW4gRUxGIG9iamVjdCwgaW5jbHVkaW5nIGp1c3QKKwkgIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlIGluIGEgY29yZSBkdW1wIG1ha2VzIGl0IHBvc3NpYmxlIHRvCisJICBpZGVudGlmeSB0aGUgYnVpbGQgSUQgYml0cyBpbiB0aGUgZmlsZSwgd2l0aG91dCBwYXlpbmcgdGhlIGkvbworCSAgY29zdCBhbmQgZGlzayBzcGFjZSB0byBkdW1wIGFsbCB0aGUgdGV4dC4gIEhvd2V2ZXIsIHZlcnNpb25zIG9mCisJICBHREIgYmVmb3JlIDYuNyBhcmUgY29uZnVzZWQgYnkgRUxGIGNvcmUgZHVtcCBmaWxlcyBpbiB0aGlzIGZvcm1hdC4KKworCSAgVGhlIGNvcmUgZHVtcCBiZWhhdmlvciBjYW4gYmUgY29udHJvbGxlZCBwZXIgcHJvY2VzcyB1c2luZworCSAgdGhlIC9wcm9jL1BJRC9jb3JlZHVtcF9maWx0ZXIgcHNldWRvLWZpbGU7IHRoaXMgc2V0dGluZyBpcworCSAgaW5oZXJpdGVkLiAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgZm9yIGRldGFpbHMuCisKKwkgIFRoaXMgY29uZmlnIG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgY29yZWR1bXBfZmlsdGVyCisJICBzZWVuIGF0IGJvb3QgdGltZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBCSU5GTVRfRkxBVAogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzIgogCWRlcGVuZHMgb24gIU1NVSAmJiAoIUZSViB8fCBCUk9LRU4pCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IGI2ZjI3ZGMuLjIxNjhjOTAgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogb2JqLXkgOj0Jb3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcCiAJCWNoYXJfZGV2Lm8gc3RhdC5vIGV4ZWMubyBwaXBlLm8gbmFtZWkubyBmY250bC5vIFwKIAkJaW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZmlmby5vIGRjYWNoZS5vIGlub2RlLm8gXAotCQlhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gYWlvLm8gXAorCQlhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXAogCQlzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcCiAJCXBub2RlLm8gZHJvcF9jYWNoZXMubyBzcGxpY2UubyBzeW5jLm8gdXRpbWVzLm8gXAogCQlzdGFjay5vCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfU0lHTkFMRkQpCQkrPSBzaWduYWxmZC5vCiBvYmotJChDT05GSUdfVElNRVJGRCkJCSs9IHRpbWVyZmQubwogb2JqLSQoQ09ORklHX0VWRU5URkQpCQkrPSBldmVudGZkLm8KK29iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm8KIG9iai0kKENPTkZJR19GSUxFX0xPQ0tJTkcpICAgICAgKz0gbG9ja3Mubwogb2JqLSQoQ09ORklHX0NPTVBBVCkJCSs9IGNvbXBhdC5vIGNvbXBhdF9pb2N0bC5vCiAKQEAgLTcwLDcgKzcxLDcgQEAKICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZQogb2JqLSQoQ09ORklHX1JFSVNFUkZTX0ZTKQkrPSByZWlzZXJmcy8KIG9iai0kKENPTkZJR19FWFQzX0ZTKQkJKz0gZXh0My8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQzCi1vYmotJChDT05GSUdfRVhUNF9GUykJCSs9IGV4dDQvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0NGRldgorb2JqLSQoQ09ORklHX0VYVDRfRlMpCQkrPSBleHQ0LyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDQKIG9iai0kKENPTkZJR19KQkQpCQkrPSBqYmQvCiBvYmotJChDT05GSUdfSkJEMikJCSs9IGpiZDIvCiBvYmotJChDT05GSUdfRVhUMl9GUykJCSs9IGV4dDIvCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCA1MjVmN2M1Li5hMzkwMTc2IDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTUwLDggKzUwLDggQEAKIAkubGF1bmRlcl9wYWdlCT0gYWZzX2xhdW5kZXJfcGFnZSwKIAkucmVsZWFzZXBhZ2UJPSBhZnNfcmVsZWFzZXBhZ2UsCiAJLmludmFsaWRhdGVwYWdlCT0gYWZzX2ludmFsaWRhdGVwYWdlLAotCS5wcmVwYXJlX3dyaXRlCT0gYWZzX3ByZXBhcmVfd3JpdGUsCi0JLmNvbW1pdF93cml0ZQk9IGFmc19jb21taXRfd3JpdGUsCisJLndyaXRlX2JlZ2luCT0gYWZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQJPSBhZnNfd3JpdGVfZW5kLAogCS53cml0ZXBhZ2UJPSBhZnNfd3JpdGVwYWdlLAogCS53cml0ZXBhZ2VzCT0gYWZzX3dyaXRlcGFnZXMsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAzY2I2OTIwLi42N2YyNTlkIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtNzI4LDggKzcyOCwxMiBAQAogICovCiBleHRlcm4gaW50IGFmc19zZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiB2b2lkIGFmc19wdXRfd3JpdGViYWNrKHN0cnVjdCBhZnNfd3JpdGViYWNrICopOwotZXh0ZXJuIGludCBhZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotZXh0ZXJuIGludCBhZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitleHRlcm4gaW50IGFmc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CitleHRlcm4gaW50IGFmc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKTsKIGV4dGVybiBpbnQgYWZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50IGFmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgYWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL3dyaXRlLmMgYi9mcy9hZnMvd3JpdGUuYwppbmRleCAwNjViNGUxLi5kNmI4NWRhIDEwMDY0NAotLS0gYS9mcy9hZnMvd3JpdGUuYworKysgYi9mcy9hZnMvd3JpdGUuYwpAQCAtODQsMTUgKzg0LDIzIEBACiAgKiBwYXJ0bHkgb3Igd2hvbGx5IGZpbGwgYSBwYWdlIHRoYXQncyB1bmRlciBwcmVwYXJhdGlvbiBmb3Igd3JpdGluZwogICovCiBzdGF0aWMgaW50IGFmc19maWxsX3BhZ2Uoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBrZXkgKmtleSwKLQkJCSB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKwkJCSBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHN0cnVjdCBwYWdlICpwYWdlKQogeworCWxvZmZfdCBpX3NpemU7CisJdW5zaWduZWQgZW9mOwogCWludCByZXQ7CiAKLQlfZW50ZXIoIiwsJXUsJXUiLCBzdGFydCwgbGVuKTsKKwlfZW50ZXIoIiwsJWxsdSwldSIsICh1bnNpZ25lZCBsb25nIGxvbmcpcG9zLCBsZW4pOwogCi0JQVNTRVJUQ01QKHN0YXJ0ICsgbGVuLCA8PSwgUEFHRV9TSVpFKTsKKwlBU1NFUlRDTVAobGVuLCA8PSwgUEFHRV9DQUNIRV9TSVpFKTsKIAotCXJldCA9IGFmc192bm9kZV9mZXRjaF9kYXRhKHZub2RlLCBrZXksIHN0YXJ0LCBsZW4sIHBhZ2UpOworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKKwlpZiAocG9zICsgbGVuID4gaV9zaXplKQorCQllb2YgPSBpX3NpemU7CisJZWxzZQorCQllb2YgPSBQQUdFX0NBQ0hFX1NJWkU7CisKKwlyZXQgPSBhZnNfdm5vZGVfZmV0Y2hfZGF0YSh2bm9kZSwga2V5LCAwLCBlb2YsIHBhZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVOT0VOVCkgewogCQkJX2RlYnVnKCJnb3QgTk9FTlQgZnJvbSBzZXJ2ZXIiCkBAIC0xMDcsMTA5ICsxMTUsNTUgQEAKIH0KIAogLyoKLSAqIHByZXBhcmUgYSBwYWdlIGZvciBiZWluZyB3cml0dGVuIHRvCi0gKi8KLXN0YXRpYyBpbnQgYWZzX3ByZXBhcmVfcGFnZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgc3RydWN0IGtleSAqa2V5LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHRvKQotewotCXVuc2lnbmVkIGVvZiwgdGFpbCwgc3RhcnQsIHN0b3AsIGxlbjsKLQlsb2ZmX3QgaV9zaXplLCBwb3M7Ci0Jdm9pZCAqcDsKLQlpbnQgcmV0OwotCi0JX2VudGVyKCIiKTsKLQotCWlmIChvZmZzZXQgPT0gMCAmJiB0byA9PSBQQUdFX1NJWkUpCi0JCXJldHVybiAwOwotCi0JcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQotCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKLQlwb3MgPSAobG9mZl90KSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwotCWlmIChwb3MgPj0gaV9zaXplKSB7Ci0JCS8qIHBhcnRpYWwgd3JpdGUsIHBhZ2UgYmV5b25kIEVPRiAqLwotCQlfZGVidWcoImJleW9uZCIpOwotCQlpZiAob2Zmc2V0ID4gMCkKLQkJCW1lbXNldChwLCAwLCBvZmZzZXQpOwotCQlpZiAodG8gPCBQQUdFX1NJWkUpCi0JCQltZW1zZXQocCArIHRvLCAwLCBQQUdFX1NJWkUgLSB0byk7Ci0JCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaV9zaXplIC0gcG9zID49IFBBR0VfU0laRSkgewotCQkvKiBwYXJ0aWFsIHdyaXRlLCBwYWdlIGVudGlyZWx5IGJlZm9yZSBFT0YgKi8KLQkJX2RlYnVnKCJiZWZvcmUiKTsKLQkJdGFpbCA9IGVvZiA9IFBBR0VfU0laRTsKLQl9IGVsc2UgewotCQkvKiBwYXJ0aWFsIHdyaXRlLCBwYWdlIG92ZXJsYXBzIEVPRiAqLwotCQllb2YgPSBpX3NpemUgLSBwb3M7Ci0JCV9kZWJ1Zygib3ZlcmxhcCAldSIsIGVvZik7Ci0JCXRhaWwgPSBtYXgoZW9mLCB0byk7Ci0JCWlmICh0YWlsIDwgUEFHRV9TSVpFKQotCQkJbWVtc2V0KHAgKyB0YWlsLCAwLCBQQUdFX1NJWkUgLSB0YWlsKTsKLQkJaWYgKG9mZnNldCA+IGVvZikKLQkJCW1lbXNldChwICsgZW9mLCAwLCBQQUdFX1NJWkUgLSBlb2YpOwotCX0KLQotCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwotCi0JcmV0ID0gMDsKLQlpZiAob2Zmc2V0ID4gMCB8fCBlb2YgPiB0bykgewotCQkvKiBuZWVkIHRvIGZpbGwgb25lIG9yIHR3byBiaXRzIHRoYXQgYXJlbid0IGdvaW5nIHRvIGJlIHdyaXR0ZW4KLQkJICogKGNvdmVyIGJvdGggZmlsbGVycyBpbiBvbmUgcmVhZCBpZiB0aGVyZSBhcmUgdHdvKSAqLwotCQlzdGFydCA9IChvZmZzZXQgPiAwKSA/IDAgOiB0bzsKLQkJc3RvcCA9IChlb2YgPiB0bykgPyBlb2YgOiBvZmZzZXQ7Ci0JCWxlbiA9IHN0b3AgLSBzdGFydDsKLQkJX2RlYnVnKCJ3cj0ldS0ldSBhdj0wLSV1IHJkPSV1QCV1IiwKLQkJICAgICAgIG9mZnNldCwgdG8sIGVvZiwgc3RhcnQsIGxlbik7Ci0JCXJldCA9IGFmc19maWxsX3BhZ2Uodm5vZGUsIGtleSwgc3RhcnQsIGxlbiwgcGFnZSk7Ci0JfQotCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIHByZXBhcmUgdG8gcGVyZm9ybSBwYXJ0IG9mIGEgd3JpdGUgdG8gYSBwYWdlCi0gKiAtIHRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgbG9ja2VkLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgd3JpdHRlbiBvdXQgb3IKLSAqICAgbW9kaWZpZWQgYnkgYW55b25lIGVsc2UKICAqLwotaW50IGFmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJICAgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0bykKK2ludCBhZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkgICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CiAJc3RydWN0IGFmc193cml0ZWJhY2sgKmNhbmRpZGF0ZSwgKndiOwogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBrZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwZ29mZl90IGluZGV4OworCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgdG8gPSBmcm9tICsgbGVuOworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCJ7JXg6JXV9LHslbHh9LCV1LCV1IiwKLQkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4LCBvZmZzZXQsIHRvKTsKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGluZGV4LCBmcm9tLCB0byk7CiAKIAljYW5kaWRhdGUgPSBremFsbG9jKHNpemVvZigqY2FuZGlkYXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYW5kaWRhdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCWNhbmRpZGF0ZS0+dm5vZGUgPSB2bm9kZTsKLQljYW5kaWRhdGUtPmZpcnN0ID0gY2FuZGlkYXRlLT5sYXN0ID0gcGFnZS0+aW5kZXg7Ci0JY2FuZGlkYXRlLT5vZmZzZXRfZmlyc3QgPSBvZmZzZXQ7CisJY2FuZGlkYXRlLT5maXJzdCA9IGNhbmRpZGF0ZS0+bGFzdCA9IGluZGV4OworCWNhbmRpZGF0ZS0+b2Zmc2V0X2ZpcnN0ID0gZnJvbTsKIAljYW5kaWRhdGUtPnRvX2xhc3QgPSB0bzsKIAljYW5kaWRhdGUtPnVzYWdlID0gMTsKIAljYW5kaWRhdGUtPnN0YXRlID0gQUZTX1dCQUNLX1BFTkRJTkc7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FuZGlkYXRlLT53YWl0cSk7CiAKKwlwYWdlID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkgeworCQlrZnJlZShjYW5kaWRhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJKnBhZ2VwID0gcGFnZTsKKwkvKiBwYWdlIHdvbid0IGxlYWsgaW4gZXJyb3IgY2FzZTogaXQgZXZlbnR1YWxseSBnZXRzIGNsZWFuZWQgb2ZmIExSVSAqLworCiAJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJX2RlYnVnKCJub3QgdXAgdG8gZGF0ZSIpOwotCQlyZXQgPSBhZnNfcHJlcGFyZV9wYWdlKHZub2RlLCBwYWdlLCBrZXksIG9mZnNldCwgdG8pOworCQlyZXQgPSBhZnNfZmlsbF9wYWdlKHZub2RlLCBrZXksIHBvcywgbGVuLCBwYWdlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCQlfbGVhdmUoIiA9ICVkIFtwcmVwXSIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9CiAKIHRyeV9hZ2FpbjoKLQlpbmRleCA9IHBhZ2UtPmluZGV4OwogCXNwaW5fbG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKIAogCS8qIHNlZSBpZiB0aGlzIHBhZ2UgaXMgYWxyZWFkeSBwZW5kaW5nIGEgd3JpdGViYWNrIHVuZGVyIGEgc3VpdGFibGUga2V5CkBAIC0yNDIsOCArMTk2LDggQEAKIHN1YnN1bWVfaW5fY3VycmVudF93YjoKIAlfZGVidWcoInN1YnN1bWUiKTsKIAlBU1NFUlRSQU5HRSh3Yi0+Zmlyc3QsIDw9LCBpbmRleCwgPD0sIHdiLT5sYXN0KTsKLQlpZiAoaW5kZXggPT0gd2ItPmZpcnN0ICYmIG9mZnNldCA8IHdiLT5vZmZzZXRfZmlyc3QpCi0JCXdiLT5vZmZzZXRfZmlyc3QgPSBvZmZzZXQ7CisJaWYgKGluZGV4ID09IHdiLT5maXJzdCAmJiBmcm9tIDwgd2ItPm9mZnNldF9maXJzdCkKKwkJd2ItPm9mZnNldF9maXJzdCA9IGZyb207CiAJaWYgKGluZGV4ID09IHdiLT5sYXN0ICYmIHRvID4gd2ItPnRvX2xhc3QpCiAJCXdiLT50b19sYXN0ID0gdG87CiAJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CkBAIC0yODksMTcgKzI0MywxNyBAQAogLyoKICAqIGZpbmFsaXNlIHBhcnQgb2YgYSB3cml0ZSB0byBhIHBhZ2UKICAqLwotaW50IGFmc19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8pCitpbnQgYWZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCSAgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKIHsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlsb2ZmX3QgaV9zaXplLCBtYXliZV9pX3NpemU7CiAKLQlfZW50ZXIoInsleDoldX0seyVseH0sJXUsJXUiLAotCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgsIG9mZnNldCwgdG8pOworCV9lbnRlcigieyV4OiV1fSx7JWx4fSIsCisJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBwYWdlLT5pbmRleCk7CiAKLQltYXliZV9pX3NpemUgPSAobG9mZl90KSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwotCW1heWJlX2lfc2l6ZSArPSB0bzsKKwltYXliZV9pX3NpemUgPSBwb3MgKyBjb3BpZWQ7CiAKIAlpX3NpemUgPSBpX3NpemVfcmVhZCgmdm5vZGUtPnZmc19pbm9kZSk7CiAJaWYgKG1heWJlX2lfc2l6ZSA+IGlfc2l6ZSkgewpAQCAtMzEwLDEyICsyNjQsMTMgQEAKIAkJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CiAJfQogCi0JU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWlmIChQYWdlRGlydHkocGFnZSkpCiAJCV9kZWJ1ZygiZGlydGllZCIpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAotCXJldHVybiAwOworCXJldHVybiBjb3BpZWQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L01ha2VmaWxlIGIvZnMvYXV0b2ZzNC9NYWtlZmlsZQppbmRleCBmMmMzYjc5Li5hODExYzFmIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L01ha2VmaWxlCisrKyBiL2ZzL2F1dG9mczQvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19BVVRPRlM0X0ZTKSArPSBhdXRvZnM0Lm8KIAotYXV0b2ZzNC1vYmpzIDo9IGluaXQubyBpbm9kZS5vIHJvb3QubyBzeW1saW5rLm8gd2FpdHEubyBleHBpcmUubworYXV0b2ZzNC1vYmpzIDo9IGluaXQubyBpbm9kZS5vIHJvb3QubyBzeW1saW5rLm8gd2FpdHEubyBleHBpcmUubyBkZXYtaW9jdGwubwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCmluZGV4IDY5YTJmNWMuLmUwZjE2ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKQEAgLTE0LDYgKzE0LDcgQEAKIC8qIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBhdXRvZnMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnM0Lmg+CisjaW5jbHVkZSA8bGludXgvYXV0b19kZXYtaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMjEsNiArMjIsMTEgQEAKICNkZWZpbmUgQVVUT0ZTX0lPQ19GSVJTVCAgICAgQVVUT0ZTX0lPQ19SRUFEWQogI2RlZmluZSBBVVRPRlNfSU9DX0NPVU5UICAgICAzMgogCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfSU9DX0ZJUlNUCShBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT04pCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfSU9DX0NPVU5UCShBVVRPRlNfSU9DX0NPVU5UIC0gMTEpCisKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfVFJJR0dFUgkoQVVUT0ZTX1RZUEVfRElSRUNUfEFVVE9GU19UWVBFX09GRlNFVCkKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC0zNSwxMSArNDEsMjcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQUklOVEsoZm10LGFyZ3MuLi4pIGRvIHsgcHJpbnRrKEtFUk5fREVCVUcgInBpZCAlZDogJXM6ICIgZm10ICJcbiIgLCBjdXJyZW50LT5waWQgLCBfX2Z1bmNfXyAsICMjYXJncyk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJXAorCXByaW50ayhLRVJOX0RFQlVHICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCisJCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKK30gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBEUFJJTlRLKGZtdCxhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAorI2RlZmluZSBBVVRPRlNfV0FSTihmbXQsIGFyZ3MuLi4pCQkJXAorZG8gewkJCQkJCQlcCisJcHJpbnRrKEtFUk5fV0FSTklORyAicGlkICVkOiAlczogIiBmbXQgIlxuIiwJXAorCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFVVE9GU19FUlJPUihmbXQsIGFyZ3MuLi4pCQkJXAorZG8gewkJCQkJCQlcCisJcHJpbnRrKEtFUk5fRVJSICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCisJCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKK30gd2hpbGUgKDApCisKIC8qIFVuaWZpZWQgaW5mbyBzdHJ1Y3R1cmUuICBUaGlzIGlzIHBvaW50ZWQgdG8gYnkgYm90aCB0aGUgZGVudHJ5IGFuZAogICAgaW5vZGUgc3RydWN0dXJlcy4gIEVhY2ggZmlsZSBpbiB0aGUgZmlsZXN5c3RlbSBoYXMgYW4gaW5zdGFuY2Ugb2YgdGhpcwogICAgc3RydWN0dXJlLiAgSXQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGRlbnRyeSwgc28gZGVudHJpZXMgYXJlIG5ldmVyCkBAIC02MSw2ICs4Myw5IEBACiAJdW5zaWduZWQgbG9uZyBsYXN0X3VzZWQ7CiAJYXRvbWljX3QgY291bnQ7CiAKKwl1aWRfdCB1aWQ7CisJZ2lkX3QgZ2lkOworCiAJbW9kZV90CW1vZGU7CiAJc2l6ZV90CXNpemU7CiAKQEAgLTkyLDEwICsxMTcsNiBAQAogCiAjZGVmaW5lIEFVVE9GU19TQklfTUFHSUMgMHg2ZDRhNTU2ZAogCi0jZGVmaW5lIEFVVE9GU19UWVBFX0lORElSRUNUICAgICAweDAwMDEKLSNkZWZpbmUgQVVUT0ZTX1RZUEVfRElSRUNUICAgICAgIDB4MDAwMgotI2RlZmluZSBBVVRPRlNfVFlQRV9PRkZTRVQgICAgICAgMHgwMDA0Ci0KIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyB7CiAJdTMyIG1hZ2ljOwogCWludCBwaXBlZmQ7CkBAIC0xNjksNiArMTkwLDE3IEBACiAJCQlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgX191c2VyICopOwogaW50IGF1dG9mczRfZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwKIAkJCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqLCBpbnQgX191c2VyICopOworc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBpbnQgaG93KTsKK3N0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCSAgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IGhvdyk7CisKKy8qIERldmljZSBub2RlIGluaXRpYWxpemF0aW9uICovCisKK2ludCBhdXRvZnNfZGV2X2lvY3RsX2luaXQodm9pZCk7Cit2b2lkIGF1dG9mc19kZXZfaW9jdGxfZXhpdCh2b2lkKTsKIAogLyogT3BlcmF0aW9ucyBzdHJ1Y3R1cmVzICovCiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMgYi9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWFiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jCkBAIC0wLDAgKzEsODYzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSWFuIEtlbnQgPHJhdmVuQHRoZW1hdy5uZXQ+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImF1dG9mc19pLmgiCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBmb3Igcm91dGluZyBhdXRvZnMgaW9jdGwgY29udHJvbAorICogY29tbWFuZHMgdmlhIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UgZmlsZS4KKyAqCisgKiBUaGUgYWx0ZXJuYXRlIGludGVyZmFjZSBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgb3BlbgorICogYW4gaW9jdGwgZmlsZSBkZXNjcmlwdG9yIG9uIGFuIGF1dG9mcyBtb3VudCB0aGF0IG1heSBiZSBjb3ZlcmVkIGJ5CisgKiBhbm90aGVyIG1vdW50LiBUaGlzIHNpdHVhdGlvbiBhcmlzZXMgd2hlbiBzdGFydGluZyBhdXRvbW91bnQoOCkKKyAqIG9yIG90aGVyIHVzZXIgc3BhY2UgZGFlbW9uIHdoaWNoIHVzZXMgZGlyZWN0IG1vdW50cyBvciBvZmZzZXQKKyAqIG1vdW50cyAodXNlZCBmb3IgYXV0b2ZzIGxhenkgbW91bnQvdW1vdW50IG9mIG5lc3RlZCBtb3VudCB0cmVlcyksCisgKiB3aGljaCBoYXZlIGJlZW4gbGVmdCBidXN5IGF0IGF0IHNlcnZpY2Ugc2h1dGRvd24uCisgKi8KKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1NJWkUJc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCit0eXBlZGVmIGludCAoKmlvY3RsX2ZuKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKiwKKwkJCXN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICopOworCitzdGF0aWMgaW50IGNoZWNrX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIXN0cmNocihuYW1lLCAnLycpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGEgc3RyaW5nIGRvZXNuJ3Qgb3ZlcnJ1biB0aGUgY2h1bmsgb2YKKyAqIG1lbW9yeSB3ZSBjb3BpZWQgZnJvbSB1c2VyIGxhbmQuCisgKi8KK3N0YXRpYyBpbnQgaW52YWxpZF9zdHIoY2hhciAqc3RyLCB2b2lkICplbmQpCit7CisJd2hpbGUgKCh2b2lkICopIHN0ciA8PSBlbmQpCisJCWlmICghKnN0cisrKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IHRoZSB1c2VyIGNvbXBpbGVkIGFnYWluc3QgY29ycmVjdCB2ZXJzaW9uIG9mIGF1dG9mcworICogbWlzYyBkZXZpY2UgY29kZS4KKyAqCisgKiBBcyB3ZWxsIGFzIGNoZWNraW5nIHRoZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgdGhpcyBhbHdheXMgY29waWVzCisgKiB0aGUga2VybmVsIGludGVyZmFjZSB2ZXJzaW9uIG91dC4KKyAqLworc3RhdGljIGludCBjaGVja19kZXZfaW9jdGxfdmVyc2lvbihpbnQgY21kLCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NQUpPUiAhPSBwYXJhbS0+dmVyX21ham9yKSB8fAorCSAgICAoQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SIDwgcGFyYW0tPnZlcl9taW5vcikpIHsKKwkJQVVUT0ZTX1dBUk4oImlvY3RsIGNvbnRyb2wgaW50ZXJmYWNlIHZlcnNpb24gbWlzbWF0Y2g6ICIKKwkJICAgICAia2VybmVsKCV1LiV1KSwgdXNlcigldS4ldSksIGNtZCglZCkiLAorCQkgICAgIEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NQUpPUiwKKwkJICAgICBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUlOT1IsCisJCSAgICAgcGFyYW0tPnZlcl9tYWpvciwgcGFyYW0tPnZlcl9taW5vciwgY21kKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwkvKiBGaWxsIGluIHRoZSBrZXJuZWwgdmVyc2lvbi4gKi8KKwlwYXJhbS0+dmVyX21ham9yID0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SOworCXBhcmFtLT52ZXJfbWlub3IgPSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUlOT1I7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ29weSBwYXJhbWV0ZXIgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBhIHBvc3NpYmxlIHBhdGggYWxsb2NhdGVkCisgKiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqY29weV9kZXZfaW9jdGwoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgX191c2VyICppbikKK3sKKwlzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB0bXAsICphZHM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgaW4sIHNpemVvZih0bXApKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisKKwlpZiAodG1wLnNpemUgPCBzaXplb2YodG1wKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlhZHMgPSBrbWFsbG9jKHRtcC5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYWRzLCBpbiwgdG1wLnNpemUpKSB7CisJCWtmcmVlKGFkcyk7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKworCXJldHVybiBhZHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2Rldl9pb2N0bChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJa2ZyZWUocGFyYW0pOworCXJldHVybjsKK30KKworLyoKKyAqIENoZWNrIHNhbml0eSBvZiBwYXJhbWV0ZXIgY29udHJvbCBmaWVsZHMgYW5kIGlmIGEgcGF0aCBpcyBwcmVzZW50CisgKiBjaGVjayB0aGF0IGl0IGhhcyBhICIvIiBhbmQgaXMgdGVybWluYXRlZC4KKyAqLworc3RhdGljIGludCB2YWxpZGF0ZV9kZXZfaW9jdGwoaW50IGNtZCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKGNoZWNrX2Rldl9pb2N0bF92ZXJzaW9uKGNtZCwgcGFyYW0pKSB7CisJCUFVVE9GU19XQVJOKCJpbnZhbGlkIGRldmljZSBjb250cm9sIG1vZHVsZSB2ZXJzaW9uICIKKwkJICAgICAic3VwcGxpZWQgZm9yIGNtZCgweCUwOHgpIiwgY21kKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBhcmFtLT5zaXplID4gc2l6ZW9mKCpwYXJhbSkpIHsKKwkJZXJyID0gY2hlY2tfbmFtZShwYXJhbS0+cGF0aCk7CisJCWlmIChlcnIpIHsKKwkJCUFVVE9GU19XQVJOKCJpbnZhbGlkIHBhdGggc3VwcGxpZWQgZm9yIGNtZCgweCUwOHgpIiwKKwkJCQkgICAgY21kKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZXJyID0gaW52YWxpZF9zdHIocGFyYW0tPnBhdGgsCisJCQkJICh2b2lkICopICgoc2l6ZV90KSBwYXJhbSArIHBhcmFtLT5zaXplKSk7CisJCWlmIChlcnIpIHsKKwkJCUFVVE9GU19XQVJOKCJpbnZhbGlkIHBhdGggc3VwcGxpZWQgZm9yIGNtZCgweCUwOHgpIiwKKwkJCQkgICAgY21kKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZXJyID0gMDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogR2V0IHRoZSBhdXRvZnMgc3VwZXIgYmxvY2sgaW5mbyBzdHJ1Y3QgZnJvbSB0aGUgZmlsZSBvcGVuZWQgb24KKyAqIHRoZSBhdXRvZnMgbW91bnQgcG9pbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKmF1dG9mc19kZXZfaW9jdGxfc2JpKHN0cnVjdCBmaWxlICpmKQoreworCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKGYpIHsKKwkJaW5vZGUgPSBmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCQlzYmkgPSBhdXRvZnM0X3NiaShpbm9kZS0+aV9zYik7CisJfQorCXJldHVybiBzYmk7Cit9CisKKy8qIFJldHVybiBhdXRvZnMgbW9kdWxlIHByb3RvY29sIHZlcnNpb24gKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9wcm90b3ZlcihzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlwYXJhbS0+YXJnMSA9IHNiaS0+dmVyc2lvbjsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJuIGF1dG9mcyBtb2R1bGUgcHJvdG9jb2wgc3ViIHZlcnNpb24gKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9wcm90b3N1YnZlcihzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCQlzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJcGFyYW0tPmFyZzEgPSBzYmktPnN1Yl92ZXJzaW9uOworCXJldHVybiAwOworfQorCisvKgorICogV2FsayBkb3duIHRoZSBtb3VudCBzdGFjayBsb29raW5nIGZvciBhbiBhdXRvZnMgbW91bnQgdGhhdAorICogaGFzIHRoZSByZXF1ZXN0ZWQgZGV2aWNlIG51bWJlciAoYWthLiBuZXdfZW5jb2RlX2RldihzYi0+c19kZXYpLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zdXBlcihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgZGV2X3QgZGV2bm8pCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlkZXZfdCBzX2RldjsKKwl1bnNpZ25lZCBpbnQgZXJyOworCisJZXJyID0gLUVOT0VOVDsKKworCS8qIExvb2t1cCB0aGUgZGVudHJ5IG5hbWUgYXQgdGhlIGJhc2Ugb2Ygb3VyIG1vdW50IHBvaW50ICovCisJZGVudHJ5ID0gZF9sb29rdXAobmQtPnBhdGguZGVudHJ5LCAmbmQtPmxhc3QpOworCWlmICghZGVudHJ5KQorCQlnb3RvIG91dDsKKworCWRwdXQobmQtPnBhdGguZGVudHJ5KTsKKwluZC0+cGF0aC5kZW50cnkgPSBkZW50cnk7CisKKwkvKiBBbmQgZm9sbG93IHRoZSBtb3VudCBzdGFjayBsb29raW5nIGZvciBvdXIgYXV0b2ZzIG1vdW50ICovCisJd2hpbGUgKGZvbGxvd19kb3duKCZuZC0+cGF0aC5tbnQsICZuZC0+cGF0aC5kZW50cnkpKSB7CisJCWlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOworCQlpZiAoIWlub2RlKQorCQkJYnJlYWs7CisKKwkJc2IgPSBpbm9kZS0+aV9zYjsKKwkJc19kZXYgPSBuZXdfZW5jb2RlX2RldihzYi0+c19kZXYpOworCQlpZiAoZGV2bm8gPT0gc19kZXYpIHsKKwkJCWlmIChzYi0+c19tYWdpYyA9PSBBVVRPRlNfU1VQRVJfTUFHSUMpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBXYWxrIGRvd24gdGhlIG1vdW50IHN0YWNrIGxvb2tpbmcgZm9yIGFuIGF1dG9mcyBtb3VudCB0aGF0CisgKiBoYXMgdGhlIHJlcXVlc3RlZCBtb3VudCB0eXBlIChpZS4gaW5kaXJlY3QsIGRpcmVjdCBvciBvZmZzZXQpLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zYmlfdHlwZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCXVuc2lnbmVkIGludCBlcnI7CisKKwllcnIgPSAtRU5PRU5UOworCisJLyogTG9va3VwIHRoZSBkZW50cnkgbmFtZSBhdCB0aGUgYmFzZSBvZiBvdXIgbW91bnQgcG9pbnQgKi8KKwlkZW50cnkgPSBkX2xvb2t1cChuZC0+cGF0aC5kZW50cnksICZuZC0+bGFzdCk7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gb3V0OworCisJZHB1dChuZC0+cGF0aC5kZW50cnkpOworCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeTsKKworCS8qIEFuZCBmb2xsb3cgdGhlIG1vdW50IHN0YWNrIGxvb2tpbmcgZm9yIG91ciBhdXRvZnMgbW91bnQgKi8KKwl3aGlsZSAoZm9sbG93X2Rvd24oJm5kLT5wYXRoLm1udCwgJm5kLT5wYXRoLmRlbnRyeSkpIHsKKwkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKG5kLT5wYXRoLmRlbnRyeSk7CisJCWlmIChpbm8gJiYgaW5vLT5zYmktPnR5cGUgJiB0eXBlKSB7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXV0b2ZzX2Rldl9pb2N0bF9mZF9pbnN0YWxsKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMgPSBjdXJyZW50LT5maWxlczsKKwlzdHJ1Y3QgZmR0YWJsZSAqZmR0OworCisJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKKwlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwlCVUdfT04oZmR0LT5mZFtmZF0gIT0gTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGZkdC0+ZmRbZmRdLCBmaWxlKTsKKwlGRF9TRVQoZmQsIGZkdC0+Y2xvc2Vfb25fZXhlYyk7CisJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOworfQorCisKKy8qCisgKiBPcGVuIGEgZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBhdXRvZnMgbW91bnQgcG9pbnQgY29ycmVzcG9uZGluZworICogdG8gdGhlIGdpdmVuIHBhdGggYW5kIGRldmljZSBudW1iZXIgKGFrYS4gbmV3X2VuY29kZV9kZXYoc2ItPnNfZGV2KSkuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9vcGVuX21vdW50cG9pbnQoY29uc3QgY2hhciAqcGF0aCwgZGV2X3QgZGV2aWQpCit7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlpbnQgZXJyLCBmZDsKKworCWZkID0gZ2V0X3VudXNlZF9mZCgpOworCWlmIChsaWtlbHkoZmQgPj0gMCkpIHsKKwkJLyogR2V0IG5hbWVpZGF0YSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSAqLworCQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfUEFSRU5ULCAmbmQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJLyoKKwkJICogU2VhcmNoIGRvd24sIHdpdGhpbiB0aGUgcGFyZW50LCBsb29raW5nIGZvciBhbgorCQkgKiBhdXRvZnMgc3VwZXIgYmxvY2sgdGhhdCBoYXMgdGhlIGRldmljZSBudW1iZXIKKwkJICogY29ycmVzcG9uZGluZyB0byB0aGUgYXV0b2ZzIGZzIHdlIHdhbnQgdG8gb3Blbi4KKwkJICovCisJCWVyciA9IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zdXBlcigmbmQsIGRldmlkKTsKKwkJaWYgKGVycikgeworCQkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmaWxwID0gZGVudHJ5X29wZW4obmQucGF0aC5kZW50cnksIG5kLnBhdGgubW50LCBPX1JET05MWSk7CisJCWlmIChJU19FUlIoZmlscCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlscCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWF1dG9mc19kZXZfaW9jdGxfZmRfaW5zdGFsbChmZCwgZmlscCk7CisJfQorCisJcmV0dXJuIGZkOworCitvdXQ6CisJcHV0X3VudXNlZF9mZChmZCk7CisJcmV0dXJuIGVycjsKK30KKworLyogT3BlbiBhIGZpbGUgZGVzY3JpcHRvciBvbiBhbiBhdXRvZnMgbW91bnQgcG9pbnQgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9vcGVubW91bnQoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCWRldl90IGRldmlkOworCWludCBlcnIsIGZkOworCisJLyogcGFyYW0tPnBhdGggaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkICovCisJaWYgKCFwYXJhbS0+YXJnMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbS0+aW9jdGxmZCA9IC0xOworCisJcGF0aCA9IHBhcmFtLT5wYXRoOworCWRldmlkID0gcGFyYW0tPmFyZzE7CisKKwllcnIgPSAwOworCWZkID0gYXV0b2ZzX2Rldl9pb2N0bF9vcGVuX21vdW50cG9pbnQocGF0aCwgZGV2aWQpOworCWlmICh1bmxpa2VseShmZCA8IDApKSB7CisJCWVyciA9IGZkOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXJhbS0+aW9jdGxmZCA9IGZkOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qIENsb3NlIGZpbGUgZGVzY3JpcHRvciBhbGxvY2F0ZWQgYWJvdmUgKHVzZXIgY2FuIGFsc28gdXNlIGNsb3NlKDIpKS4gKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9jbG9zZW1vdW50KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlyZXR1cm4gc3lzX2Nsb3NlKHBhcmFtLT5pb2N0bGZkKTsKK30KKworLyoKKyAqIFNlbmQgInJlYWR5IiBzdGF0dXMgZm9yIGFuIGV4aXN0aW5nIHdhaXQgKGVpdGhlciBhIG1vdW50IG9yIGFuIGV4cGlyZQorICogcmVxdWVzdCkuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9yZWFkeShzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlhdXRvZnNfd3F0X3QgdG9rZW47CisKKwl0b2tlbiA9IChhdXRvZnNfd3F0X3QpIHBhcmFtLT5hcmcxOworCXJldHVybiBhdXRvZnM0X3dhaXRfcmVsZWFzZShzYmksIHRva2VuLCAwKTsKK30KKworLyoKKyAqIFNlbmQgImZhaWwiIHN0YXR1cyBmb3IgYW4gZXhpc3Rpbmcgd2FpdCAoZWl0aGVyIGEgbW91bnQgb3IgYW4gZXhwaXJlCisgKiByZXF1ZXN0KS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2ZhaWwoc3RydWN0IGZpbGUgKmZwLAorCQkJCSBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWF1dG9mc193cXRfdCB0b2tlbjsKKwlpbnQgc3RhdHVzOworCisJdG9rZW4gPSAoYXV0b2ZzX3dxdF90KSBwYXJhbS0+YXJnMTsKKwlzdGF0dXMgPSBwYXJhbS0+YXJnMiA/IHBhcmFtLT5hcmcyIDogLUVOT0VOVDsKKwlyZXR1cm4gYXV0b2ZzNF93YWl0X3JlbGVhc2Uoc2JpLCB0b2tlbiwgc3RhdHVzKTsKK30KKworLyoKKyAqIFNldCB0aGUgcGlwZSBmZCBmb3Iga2VybmVsIGNvbW11bmljYXRpb24gdG8gdGhlIGRhZW1vbi4KKyAqCisgKiBOb3JtYWxseSB0aGlzIGlzIHNldCBhdCBtb3VudCB1c2luZyBhbiBvcHRpb24gYnV0IGlmIHdlCisgKiBhcmUgcmVjb25uZWN0aW5nIHRvIGEgYnVzeSBtb3VudCB0aGVuIHdlIG5lZWQgdG8gdXNlIHRoaXMKKyAqIHRvIHRlbGwgdGhlIGF1dG9mcyBtb3VudCBhYm91dCB0aGUgbmV3IGtlcm5lbCBwaXBlIGZkLiBJbgorICogb3JkZXIgdG8gcHJvdGVjdCBtb3VudHMgYWdhaW5zdCBpbmNvcnJlY3RseSBzZXR0aW5nIHRoZQorICogcGlwZWZkIHdlIGFsc28gcmVxdWlyZSB0aGF0IHRoZSBhdXRvZnMgbW91bnQgYmUgY2F0YXRvbmljLgorICoKKyAqIFRoaXMgYWxzbyBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIGlkIHVzZWQgdG8gaWRlbnRpZnkgdGhlCisgKiBjb250cm9sbGluZyBwcm9jZXNzIChlZy4gdGhlIG93bmluZyBhdXRvbW91bnQoOCkgZGFlbW9uKS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3NldHBpcGVmZChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWludCBwaXBlZmQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGFyYW0tPmFyZzEgPT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcGlwZWZkID0gcGFyYW0tPmFyZzE7CisKKwltdXRleF9sb2NrKCZzYmktPndxX211dGV4KTsKKwlpZiAoIXNiaS0+Y2F0YXRvbmljKSB7CisJCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfSBlbHNlIHsKKwkJc3RydWN0IGZpbGUgKnBpcGUgPSBmZ2V0KHBpcGVmZCk7CisJCWlmICghcGlwZS0+Zl9vcCB8fCAhcGlwZS0+Zl9vcC0+d3JpdGUpIHsKKwkJCWVyciA9IC1FUElQRTsKKwkJCWZwdXQocGlwZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzYmktPm96X3BncnAgPSB0YXNrX3BncnBfbnIoY3VycmVudCk7CisJCXNiaS0+cGlwZWZkID0gcGlwZWZkOworCQlzYmktPnBpcGUgPSBwaXBlOworCQlzYmktPmNhdGF0b25pYyA9IDA7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmc2JpLT53cV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIE1ha2UgdGhlIGF1dG9mcyBtb3VudCBwb2ludCBjYXRhdG9uaWMsIG5vIGxvbmdlciByZXNwb25zaXZlIHRvCisgKiBtb3VudCByZXF1ZXN0cy4gQWxzbyBjbG9zZXMgdGhlIGtlcm5lbCBwaXBlIGZpbGUgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2NhdGF0b25pYyhzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWF1dG9mczRfY2F0YXRvbmljX21vZGUoc2JpKTsKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHRoZSBhdXRvZnMgbW91bnQgdGltZW91dCAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3RpbWVvdXQoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCXRpbWVvdXQgPSBwYXJhbS0+YXJnMTsKKwlwYXJhbS0+YXJnMSA9IHNiaS0+ZXhwX3RpbWVvdXQgLyBIWjsKKwlzYmktPmV4cF90aW1lb3V0ID0gdGltZW91dCAqIEhaOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSB1aWQgYW5kIGdpZCBvZiB0aGUgbGFzdCByZXF1ZXN0IGZvciB0aGUgbW91bnQKKyAqCisgKiBXaGVuIHJlY29uc3RydWN0aW5nIGFuIGF1dG9mcyBtb3VudCB0cmVlIHdpdGggYWN0aXZlIG1vdW50cworICogd2UgbmVlZCB0byByZS1jb25uZWN0IHRvIG1vdW50cyB0aGF0IG1heSBoYXZlIHVzZWQgdGhlIG9yaWdpbmFsCisgKiBwcm9jZXNzIHVpZCBhbmQgZ2lkIChvciBzdHJpbmcgdmFyaWF0aW9ucyBvZiB0aGVtKSBmb3IgbW91bnQKKyAqIGxvb2t1cHMgd2l0aGluIHRoZSBtYXAgZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9yZXF1ZXN0ZXIoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCWNvbnN0IGNoYXIgKnBhdGg7CisJZGV2X3QgZGV2aWQ7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlpZiAocGFyYW0tPnNpemUgPD0gc2l6ZW9mKCpwYXJhbSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcGF0aCA9IHBhcmFtLT5wYXRoOworCWRldmlkID0gc2JpLT5zYi0+c19kZXY7CisKKwlwYXJhbS0+YXJnMSA9IHBhcmFtLT5hcmcyID0gLTE7CisKKwkvKiBHZXQgbmFtZWlkYXRhIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICovCisJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zdXBlcigmbmQsIGRldmlkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9yZWxlYXNlOworCisJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKG5kLnBhdGguZGVudHJ5KTsKKwlpZiAoaW5vKSB7CisJCWVyciA9IDA7CisJCWF1dG9mczRfZXhwaXJlX3dhaXQobmQucGF0aC5kZW50cnkpOworCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJCXBhcmFtLT5hcmcxID0gaW5vLT51aWQ7CisJCXBhcmFtLT5hcmcyID0gaW5vLT5naWQ7CisJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCX0KKworb3V0X3JlbGVhc2U6CisJcGF0aF9wdXQoJm5kLnBhdGgpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDYWxsIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyAtRUFHQUlOLCBtZWFuaW5nIHRoZXJlJ3Mgbm90aGluZworICogbW9yZSB0aGF0IGNhbiBiZSBkb25lLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfZXhwaXJlKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCB2ZnNtb3VudCAqbW50OworCWludCBlcnIgPSAtRUFHQUlOOworCWludCBob3c7CisKKwlob3cgPSBwYXJhbS0+YXJnMTsKKwltbnQgPSBmcC0+Zl9wYXRoLm1udDsKKworCWlmIChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKQorCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc2JpLT5zYiwgbW50LCBzYmksIGhvdyk7CisJZWxzZQorCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzYmktPnNiLCBtbnQsIHNiaSwgaG93KTsKKworCWlmIChkZW50cnkpIHsKKwkJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKworCQkvKgorCQkgKiBUaGlzIGlzIHN5bmNocm9ub3VzIGJlY2F1c2UgaXQgbWFrZXMgdGhlIGRhZW1vbiBhCisJCSAqIGxpdHRsZSBlYXNpZXIKKwkJKi8KKwkJZXJyID0gYXV0b2ZzNF93YWl0KHNiaSwgZGVudHJ5LCBORllfRVhQSVJFKTsKKworCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJCWlmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9NT1VOVFBPSU5UKSB7CisJCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX01PVU5UUE9JTlQ7CisJCQlzYmktPnNiLT5zX3Jvb3QtPmRfbW91bnRlZCsrOworCQl9CisJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfRVhQSVJJTkc7CisJCWNvbXBsZXRlX2FsbCgmaW5vLT5leHBpcmVfY29tcGxldGUpOworCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwkJZHB1dChkZW50cnkpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIENoZWNrIGlmIGF1dG9mcyBtb3VudCBwb2ludCBpcyBpbiB1c2UgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9hc2t1bW91bnQoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlwYXJhbS0+YXJnMSA9IDA7CisJaWYgKG1heV91bW91bnQoZnAtPmZfcGF0aC5tbnQpKQorCQlwYXJhbS0+YXJnMSA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIG1vdW50cG9pbnQuCisgKgorICogSWYgd2UgYXJlIHN1cHBsaWVkIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhbiBhdXRvZnMKKyAqIG1vdW50IHdlJ3JlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgbW91bnQuIEluIHRoaXMgY2FzZQorICogdGhlIHBhdGggaXMgY29uc2lkZXJlZCBhIG1vdW50cG9pbnQgaWYgaXQgaXMgaXRzZWxmIGEKKyAqIG1vdW50cG9pbnQgb3IgY29udGFpbnMgYSBtb3VudCwgc3VjaCBhcyBhIG11bHRpLW1vdW50CisgKiB3aXRob3V0IGEgcm9vdCBtb3VudC4gSW4gdGhpcyBjYXNlIHdlIHJldHVybiAxIGlmIHRoZQorICogcGF0aCBpcyBhIG1vdW50IHBvaW50IGFuZCB0aGUgc3VwZXIgbWFnaWMgb2YgdGhlIGNvdmVyaW5nCisgKiBtb3VudCBpZiB0aGVyZSBpcyBvbmUgb3IgMCBpZiBpdCBpc24ndCBhIG1vdW50cG9pbnQuCisgKgorICogSWYgd2UgYXJlbid0IHN1cHBsaWVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3IgdGhlbiB3ZQorICogbG9va3VwIHRoZSBuYW1laWRhdGEgb2YgdGhlIHBhdGggYW5kIGNoZWNrIGlmIGl0IGlzIHRoZQorICogcm9vdCBvZiBhIG1vdW50LiBJZiBhIHR5cGUgaXMgZ2l2ZW4gd2UgYXJlIGxvb2tpbmcgZm9yCisgKiBhIHBhcnRpY3VsYXIgYXV0b2ZzIG1vdW50IGFuZCBpZiB3ZSBkb24ndCBmaW5kIGEgbWF0Y2gKKyAqIHdlIHJldHVybiBmYWlsLiBJZiB0aGUgbG9jYXRlZCBuYW1laWRhdGEgcGF0aCBpcyB0aGUKKyAqIHJvb3Qgb2YgYSBtb3VudCB3ZSByZXR1cm4gMSBhbG9uZyB3aXRoIHRoZSBzdXBlciBtYWdpYworICogb2YgdGhlIG1vdW50IG9yIDAgb3RoZXJ3aXNlLgorICoKKyAqIEluIGJvdGggY2FzZXMgdGhlIHRoZSBkZXZpY2UgbnVtYmVyIChhcyByZXR1cm5lZCBieQorICogbmV3X2VuY29kZV9kZXYoKSkgaXMgYWxzbyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2lzbW91bnRwb2ludChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJCSBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkJIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCWNvbnN0IGNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IHR5cGU7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlpZiAocGFyYW0tPnNpemUgPD0gc2l6ZW9mKCpwYXJhbSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcGF0aCA9IHBhcmFtLT5wYXRoOworCXR5cGUgPSBwYXJhbS0+YXJnMTsKKworCXBhcmFtLT5hcmcxID0gMDsKKwlwYXJhbS0+YXJnMiA9IDA7CisKKwlpZiAoIWZwIHx8IHBhcmFtLT5pb2N0bGZkID09IC0xKSB7CisJCWlmICh0eXBlID09IEFVVE9GU19UWVBFX0FOWSkgeworCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKworCQkJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX0ZPTExPVywgJm5kKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisKKwkJCXNiID0gbmQucGF0aC5kZW50cnktPmRfc2I7CisJCQlwYXJhbS0+YXJnMSA9IG5ld19lbmNvZGVfZGV2KHNiLT5zX2Rldik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKKworCQkJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisKKwkJCWVyciA9IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zYmlfdHlwZSgmbmQsIHR5cGUpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF9yZWxlYXNlOworCisJCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8obmQucGF0aC5kZW50cnkpOworCQkJcGFyYW0tPmFyZzEgPSBhdXRvZnM0X2dldF9kZXYoaW5vLT5zYmkpOworCQl9CisKKwkJZXJyID0gMDsKKwkJaWYgKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlICYmCisJCSAgICBuZC5wYXRoLm1udC0+bW50X3Jvb3QgPT0gbmQucGF0aC5kZW50cnkpIHsKKwkJCWVyciA9IDE7CisJCQlwYXJhbS0+YXJnMiA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX21hZ2ljOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X3QgZGV2aWQgPSBuZXdfZW5jb2RlX2RldihzYmktPnNiLT5zX2Rldik7CisKKwkJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCWVyciA9IGF1dG9mc19kZXZfaW9jdGxfZmluZF9zdXBlcigmbmQsIGRldmlkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkJcGFyYW0tPmFyZzEgPSBhdXRvZnM0X2dldF9kZXYoc2JpKTsKKworCQllcnIgPSBoYXZlX3N1Ym1vdW50cyhuZC5wYXRoLmRlbnRyeSk7CisKKwkJaWYgKG5kLnBhdGgubW50LT5tbnRfbW91bnRwb2ludCAhPSBuZC5wYXRoLm1udC0+bW50X3Jvb3QpIHsKKwkJCWlmIChmb2xsb3dfZG93bigmbmQucGF0aC5tbnQsICZuZC5wYXRoLmRlbnRyeSkpIHsKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJCQkJcGFyYW0tPmFyZzIgPSBpbm9kZS0+aV9zYi0+c19tYWdpYzsKKwkJCX0KKwkJfQorCX0KKworb3V0X3JlbGVhc2U6CisJcGF0aF9wdXQoJm5kLnBhdGgpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPdXIgcmFuZ2Ugb2YgaW9jdGwgbnVtYmVycyBpc24ndCAwIGJhc2VkIHNvIHdlIG5lZWQgdG8gc2hpZnQKKyAqIHRoZSBhcnJheSBpbmRleCBieSBfSU9DX05SKEFVVE9GU19DVExfSU9DX0ZJUlNUKSBmb3IgdGhlIHRhYmxlCisgKiBsb29rdXAuCisgKi8KKyNkZWZpbmUgY21kX2lkeChjbWQpCShjbWQgLSBfSU9DX05SKEFVVE9GU19ERVZfSU9DVExfSU9DX0ZJUlNUKSkKKworc3RhdGljIGlvY3RsX2ZuIGxvb2t1cF9kZXZfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKK3sKKwlzdGF0aWMgc3RydWN0IHsKKwkJaW50IGNtZDsKKwkJaW9jdGxfZm4gZm47CisJfSBfaW9jdGxzW10gPSB7CisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQpLCBOVUxMfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1ZFUl9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfcHJvdG92ZXJ9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9wcm90b3N1YnZlcn0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9vcGVubW91bnR9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2Nsb3NlbW91bnR9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9yZWFkeX0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfRkFJTF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfZmFpbH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfU0VUUElQRUZEX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9zZXRwaXBlZmR9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQ19DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfY2F0YXRvbmljfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9USU1FT1VUX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF90aW1lb3V0fSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9SRVFVRVNURVJfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3JlcXVlc3Rlcn0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfRVhQSVJFX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9leHBpcmV9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfYXNrdW1vdW50fSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9JU01PVU5UUE9JTlRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2lzbW91bnRwb2ludH0KKwl9OworCXVuc2lnbmVkIGludCBpZHggPSBjbWRfaWR4KGNtZCk7CisKKwlyZXR1cm4gKGlkeCA+PSBBUlJBWV9TSVpFKF9pb2N0bHMpKSA/IE5VTEwgOiBfaW9jdGxzW2lkeF0uZm47Cit9CisKKy8qIGlvY3RsIGRpc3BhdGNoZXIgKi8KK3N0YXRpYyBpbnQgX2F1dG9mc19kZXZfaW9jdGwodW5zaWduZWQgaW50IGNvbW1hbmQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIF9fdXNlciAqdXNlcikKK3sKKwlzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW07CisJc3RydWN0IGZpbGUgKmZwOworCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpOworCXVuc2lnbmVkIGludCBjbWRfZmlyc3QsIGNtZDsKKwlpb2N0bF9mbiBmbiA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwkvKiBvbmx5IHJvb3QgY2FuIHBsYXkgd2l0aCB0aGlzICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJY21kX2ZpcnN0ID0gX0lPQ19OUihBVVRPRlNfREVWX0lPQ1RMX0lPQ19GSVJTVCk7CisJY21kID0gX0lPQ19OUihjb21tYW5kKTsKKworCWlmIChfSU9DX1RZUEUoY29tbWFuZCkgIT0gX0lPQ19UWVBFKEFVVE9GU19ERVZfSU9DVExfSU9DX0ZJUlNUKSB8fAorCSAgICBjbWQgLSBjbWRfZmlyc3QgPj0gQVVUT0ZTX0RFVl9JT0NUTF9JT0NfQ09VTlQpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJLyogQ29weSB0aGUgcGFyYW1ldGVycyBpbnRvIGtlcm5lbCBzcGFjZS4gKi8KKwlwYXJhbSA9IGNvcHlfZGV2X2lvY3RsKHVzZXIpOworCWlmIChJU19FUlIocGFyYW0pKQorCQlyZXR1cm4gUFRSX0VSUihwYXJhbSk7CisKKwllcnIgPSB2YWxpZGF0ZV9kZXZfaW9jdGwoY29tbWFuZCwgcGFyYW0pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogVGhlIHZhbGlkYXRlIHJvdXRpbmUgYWJvdmUgYWx3YXlzIHNldHMgdGhlIHZlcnNpb24gKi8KKwlpZiAoY21kID09IEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQpCisJCWdvdG8gZG9uZTsKKworCWZuID0gbG9va3VwX2Rldl9pb2N0bChjbWQpOworCWlmICghZm4pIHsKKwkJQVVUT0ZTX1dBUk4oInVua25vd24gY29tbWFuZCAweCUwOHgiLCBjb21tYW5kKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJZnAgPSBOVUxMOworCXNiaSA9IE5VTEw7CisKKwkvKgorCSAqIEZvciBvYnZpb3VzIHJlYXNvbnMgdGhlIG9wZW5tb3VudCBjYW4ndCBoYXZlIGEgZmlsZQorCSAqIGRlc2NyaXB0b3IgeWV0LiBXZSBkb24ndCB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZQorCSAqIGZpbGUgZHVyaW5nIGNsb3NlIHRvIGFsbG93IGZvciBpbW1lZGlhdGUgcmVsZWFzZS4KKwkgKi8KKwlpZiAoY21kICE9IEFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCAmJgorCSAgICBjbWQgIT0gQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UX0NNRCkgeworCQlmcCA9IGZnZXQocGFyYW0tPmlvY3RsZmQpOworCQlpZiAoIWZwKSB7CisJCQlpZiAoY21kID09IEFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRCkKKwkJCQlnb3RvIGNvbnQ7CisJCQllcnIgPSAtRUJBREY7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICghZnAtPmZfb3ApIHsKKwkJCWVyciA9IC1FTk9UVFk7CisJCQlmcHV0KGZwKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2JpID0gYXV0b2ZzX2Rldl9pb2N0bF9zYmkoZnApOworCQlpZiAoIXNiaSB8fCBzYmktPm1hZ2ljICE9IEFVVE9GU19TQklfTUFHSUMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlmcHV0KGZwKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogQWRtaW4gbmVlZHMgdG8gYmUgYWJsZSB0byBzZXQgdGhlIG1vdW50IGNhdGF0b25pYyBpbgorCQkgKiBvcmRlciB0byBiZSBhYmxlIHRvIHBlcmZvcm0gdGhlIHJlLW9wZW4uCisJCSAqLworCQlpZiAoIWF1dG9mczRfb3pfbW9kZShzYmkpICYmCisJCSAgICBjbWQgIT0gQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01EKSB7CisJCQllcnIgPSAtRUFDQ0VTOworCQkJZnB1dChmcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KK2NvbnQ6CisJZXJyID0gZm4oZnAsIHNiaSwgcGFyYW0pOworCisJaWYgKGZwKQorCQlmcHV0KGZwKTsKK2RvbmU6CisJaWYgKGVyciA+PSAwICYmIGNvcHlfdG9fdXNlcih1c2VyLCBwYXJhbSwgQVVUT0ZTX0RFVl9JT0NUTF9TSVpFKSkKKwkJZXJyID0gLUVGQVVMVDsKK291dDoKKwlmcmVlX2Rldl9pb2N0bChwYXJhbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGxvbmcgYXV0b2ZzX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdWludCBjb21tYW5kLCB1bG9uZyB1KQoreworCWludCBlcnI7CisJZXJyID0gX2F1dG9mc19kZXZfaW9jdGwoY29tbWFuZCwgKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIF9fdXNlciAqKSB1KTsKKwlyZXR1cm4gKGxvbmcpIGVycjsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIGF1dG9mc19kZXZfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1aW50IGNvbW1hbmQsIHVsb25nIHUpCit7CisJcmV0dXJuIChsb25nKSBhdXRvZnNfZGV2X2lvY3RsKGZpbGUsIGNvbW1hbmQsICh1bG9uZykgY29tcGF0X3B0cih1KSk7Cit9CisjZWxzZQorI2RlZmluZSBhdXRvZnNfZGV2X2lvY3RsX2NvbXBhdCBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX2Rldl9pb2N0bF9mb3BzID0geworCS51bmxvY2tlZF9pb2N0bAkgPSBhdXRvZnNfZGV2X2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSBhdXRvZnNfZGV2X2lvY3RsX2NvbXBhdCwKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgX2F1dG9mc19kZXZfaW9jdGxfbWlzYyA9IHsKKwkubWlub3IgCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZSAgCQk9IEFVVE9GU19ERVZJQ0VfTkFNRSwKKwkuZm9wcyAgCQk9ICZfZGV2X2lvY3RsX2ZvcHMKK307CisKKy8qIFJlZ2lzdGVyL2RlcmVnaXN0ZXIgbWlzYyBjaGFyYWN0ZXIgZGV2aWNlICovCitpbnQgYXV0b2ZzX2Rldl9pb2N0bF9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gbWlzY19yZWdpc3RlcigmX2F1dG9mc19kZXZfaW9jdGxfbWlzYyk7CisJaWYgKHIpIHsKKwkJQVVUT0ZTX0VSUk9SKCJtaXNjX3JlZ2lzdGVyIGZhaWxlZCBmb3IgY29udHJvbCBkZXZpY2UiKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXV0b2ZzX2Rldl9pb2N0bF9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZfYXV0b2ZzX2Rldl9pb2N0bF9taXNjKTsKKwlyZXR1cm47Cit9CisKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZXhwaXJlLmMgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCmluZGV4IGNkYWJiNzkuLmNkZTJmOGUgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZXhwaXJlLmMKKysrIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwpAQCAtMjQ0LDEwICsyNDQsMTAgQEAKIH0KIAogLyogQ2hlY2sgaWYgd2UgY2FuIGV4cGlyZSBhIGRpcmVjdCBtb3VudCAocG9zc2libHkgYSB0cmVlKSAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCQkgICAgc3RydWN0IHZmc21vdW50ICptbnQsCi0JCQkJCSAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKLQkJCQkJICAgIGludCBob3cpCitzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCSAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICBpbnQgaG93KQogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gZGdldChzYi0+c19yb290KTsKQEAgLTI4MywxMCArMjgzLDEwIEBACiAgKiAgLSBpdCBpcyB1bnVzZWQgYnkgYW55IHVzZXIgcHJvY2VzcwogICogIC0gaXQgaGFzIGJlZW4gdW51c2VkIGZvciBleHBfdGltZW91dCB0aW1lCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCQkgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCi0JCQkJCSAgICAgIGludCBob3cpCitzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgIGludCBob3cpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBzYi0+c19yb290OwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJaWYgKGFyZyAmJiBnZXRfdXNlcihkb19ub3csIGFyZykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX0RJUkVDVCkKKwlpZiAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikKIAkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHNiLCBtbnQsIHNiaSwgZG9fbm93KTsKIAllbHNlCiAJCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHNiLCBtbnQsIHNiaSwgZG9fbm93KTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5pdC5jIGIvZnMvYXV0b2ZzNC9pbml0LmMKaW5kZXggNzIzYTFjNWUuLjk3MjJlNGIgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvaW5pdC5jCisrKyBiL2ZzL2F1dG9mczQvaW5pdC5jCkBAIC0yOSwxMSArMjksMjAgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9hdXRvZnM0X2ZzKHZvaWQpCiB7Ci0JcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmF1dG9mc19mc190eXBlKTsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYXV0b2ZzX2ZzX3R5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhdXRvZnNfZGV2X2lvY3RsX2luaXQoKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2F1dG9mczRfZnModm9pZCkKIHsKKwlhdXRvZnNfZGV2X2lvY3RsX2V4aXQoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmF1dG9mc19mc190eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbm9kZS5jIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCmluZGV4IDQ1ZDU1ODEuLmM3ZTY1YmIgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvaW5vZGUuYworKysgYi9mcy9hdXRvZnM0L2lub2RlLmMKQEAgLTUzLDYgKzUzLDggQEAKIAkJYXRvbWljX3NldCgmaW5vLT5jb3VudCwgMCk7CiAJfQogCisJaW5vLT51aWQgPSAwOworCWluby0+Z2lkID0gMDsKIAlpbm8tPm1vZGUgPSBtb2RlOwogCWluby0+bGFzdF91c2VkID0gamlmZmllczsKIApAQCAtMjg4LDcgKzI5MCw3IEBACiAJCQkqdHlwZSA9IEFVVE9GU19UWVBFX0RJUkVDVDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9vZmZzZXQ6Ci0JCQkqdHlwZSA9IEFVVE9GU19UWVBFX0RJUkVDVCB8IEFVVE9GU19UWVBFX09GRlNFVDsKKwkJCSp0eXBlID0gQVVUT0ZTX1RZUEVfT0ZGU0VUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMTsKQEAgLTMzNiw3ICszMzgsNyBAQAogCXNiaS0+c2IgPSBzOwogCXNiaS0+dmVyc2lvbiA9IDA7CiAJc2JpLT5zdWJfdmVyc2lvbiA9IDA7Ci0Jc2JpLT50eXBlID0gMDsKKwlzYmktPnR5cGUgPSBBVVRPRlNfVFlQRV9JTkRJUkVDVDsKIAlzYmktPm1pbl9wcm90byA9IDA7CiAJc2JpLT5tYXhfcHJvdG8gPSAwOwogCW11dGV4X2luaXQoJnNiaS0+d3FfbXV0ZXgpOwpAQCAtMzc4LDcgKzM4MCw3IEBACiAJfQogCiAJcm9vdF9pbm9kZS0+aV9mb3AgPSAmYXV0b2ZzNF9yb290X29wZXJhdGlvbnM7Ci0Jcm9vdF9pbm9kZS0+aV9vcCA9IHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX0RJUkVDVCA/CisJcm9vdF9pbm9kZS0+aV9vcCA9IHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIgPwogCQkJJmF1dG9mczRfZGlyZWN0X3Jvb3RfaW5vZGVfb3BlcmF0aW9ucyA6CiAJCQkmYXV0b2ZzNF9pbmRpcmVjdF9yb290X2lub2RlX29wZXJhdGlvbnM7CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvd2FpdHEuYyBiL2ZzL2F1dG9mczQvd2FpdHEuYwppbmRleCAzNTIxNmQxLi40YjY3YzJhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3dhaXRxLmMKKysrIGIvZnMvYXV0b2ZzNC93YWl0cS5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkJICogaXMgdmVyeSBzaW1pbGFyIGZvciBpbmRpcmVjdCBtb3VudHMgZXhjZXB0IG9ubHkgZGVudHJ5cwogCQkgKiBpbiB0aGUgcm9vdCBvZiB0aGUgYXV0b2ZzIGZpbGUgc3lzdGVtIG1heSBiZSBuZWdhdGl2ZS4KIAkJICovCi0JCWlmIChzYmktPnR5cGUgJiAoQVVUT0ZTX1RZUEVfRElSRUNUfEFVVE9GU19UWVBFX09GRlNFVCkpCisJCWlmIChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCWVsc2UgaWYgKCFJU19ST09UKGRlbnRyeS0+ZF9wYXJlbnQpKQogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBJZiB0aGlzIGlzIGEgZGlyZWN0IG1vdW50IHJlcXVlc3QgY3JlYXRlIGEgZHVtbXkgbmFtZSAqLwotCWlmIChJU19ST09UKGRlbnRyeSkgJiYgKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX0RJUkVDVCkpCisJaWYgKElTX1JPT1QoZGVudHJ5KSAmJiBzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKQogCQlxc3RyLmxlbiA9IHNwcmludGYobmFtZSwgIiVwIiwgZGVudHJ5KTsKIAllbHNlIHsKIAkJcXN0ci5sZW4gPSBhdXRvZnM0X2dldHBhdGgoc2JpLCBkZW50cnksICZuYW1lKTsKQEAgLTQwNiwxMSArNDA2LDExIEBACiAJCQkJdHlwZSA9IGF1dG9mc19wdHlwZV9leHBpcmVfbXVsdGk7CiAJCX0gZWxzZSB7CiAJCQlpZiAobm90aWZ5ID09IE5GWV9NT1VOVCkKLQkJCQl0eXBlID0gKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX0RJUkVDVCkgPworCQkJCXR5cGUgPSAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikgPwogCQkJCQlhdXRvZnNfcHR5cGVfbWlzc2luZ19kaXJlY3QgOgogCQkJCQkgYXV0b2ZzX3B0eXBlX21pc3NpbmdfaW5kaXJlY3Q7CiAJCQllbHNlCi0JCQkJdHlwZSA9IChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9ESVJFQ1QpID8KKwkJCQl0eXBlID0gKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpID8KIAkJCQkJYXV0b2ZzX3B0eXBlX2V4cGlyZV9kaXJlY3QgOgogCQkJCQlhdXRvZnNfcHR5cGVfZXhwaXJlX2luZGlyZWN0OwogCQl9CkBAIC00NTcsNiArNDU3LDQwIEBACiAKIAlzdGF0dXMgPSB3cS0+c3RhdHVzOwogCisJLyoKKwkgKiBGb3IgZGlyZWN0IGFuZCBvZmZzZXQgbW91bnRzIHdlIG5lZWQgdG8gdHJhY2sgdGhlIHJlcXVlc3RlcidzCisJICogdWlkIGFuZCBnaWQgaW4gdGhlIGRlbnRyeSBpbmZvIHN0cnVjdC4gVGhpcyBpcyBzbyBpdCBjYW4gYmUKKwkgKiBzdXBwbGllZCwgb24gcmVxdWVzdCwgYnkgdGhlIG1pc2MgZGV2aWNlIGlvY3RsIGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIG5lZWRlZCBkdXJpbmcgZGFlbW9uIHJlc2F0YXJ0IHdoZW4gcmVjb25uZWN0aW5nCisJICogdG8gZXhpc3RpbmcsIGFjdGl2ZSwgYXV0b2ZzIG1vdW50cy4gVGhlIHVpZCBhbmQgZ2lkIChhbmQKKwkgKiByZWxhdGVkIHN0cmluZyB2YWx1ZXMpIG1heSBiZSB1c2VkIGZvciBtYWNybyBzdWJzdGl0dXRpb24KKwkgKiBpbiBhdXRvZnMgbW91bnQgbWFwcy4KKwkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKKwkJc3RydWN0IGRlbnRyeSAqZGUgPSBOVUxMOworCisJCS8qIGRpcmVjdCBtb3VudCBvciBicm93c2FibGUgbWFwICovCisJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCQlpZiAoIWlubykgeworCQkJLyogSWYgbm90IGxvb2t1cCBhY3R1YWwgZGVudHJ5IHVzZWQgKi8KKwkJCWRlID0gZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKKwkJCWlmIChkZSkKKwkJCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGUpOworCQl9CisKKwkJLyogU2V0IG1vdW50IHJlcXVlc3RlciAqLworCQlpZiAoaW5vKSB7CisJCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJCQlpbm8tPnVpZCA9IHdxLT51aWQ7CisJCQlpbm8tPmdpZCA9IHdxLT5naWQ7CisJCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwkJfQorCisJCWlmIChkZSkKKwkJCWRwdXQoZGUpOworCX0KKwogCS8qIEFyZSB3ZSB0aGUgbGFzdCBwcm9jZXNzIHRvIG5lZWQgc3RhdHVzPyAqLwogCW11dGV4X2xvY2soJnNiaS0+d3FfbXV0ZXgpOwogCWlmICghLS13cS0+d2FpdF9jdHIpCmRpZmYgLS1naXQgYS9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaCBiL2ZzL2JlZnMvYmVmc19mc190eXBlcy5oCmluZGV4IGUyNTk1YzIuLjc4OTNlYWEgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvYmVmc19mc190eXBlcy5oCisrKyBiL2ZzL2JlZnMvYmVmc19mc190eXBlcy5oCkBAIC01NSw4ICs1NSwxMiBAQAogfTsKIAogI2RlZmluZSBCRUZTX0JZVEVPUkRFUl9OQVRJVkUgMHg0MjQ5NDc0NQorI2RlZmluZSBCRUZTX0JZVEVPUkRFUl9OQVRJVkVfTEUgKF9fZm9yY2UgZnMzMiljcHVfdG9fbGUzMihCRUZTX0JZVEVPUkRFUl9OQVRJVkUpCisjZGVmaW5lIEJFRlNfQllURU9SREVSX05BVElWRV9CRSAoX19mb3JjZSBmczMyKWNwdV90b19iZTMyKEJFRlNfQllURU9SREVSX05BVElWRSkKIAogI2RlZmluZSBCRUZTX1NVUEVSX01BR0lDIEJFRlNfU1VQRVJfTUFHSUMxCisjZGVmaW5lIEJFRlNfU1VQRVJfTUFHSUMxX0xFIChfX2ZvcmNlIGZzMzIpY3B1X3RvX2xlMzIoQkVGU19TVVBFUl9NQUdJQzEpCisjZGVmaW5lIEJFRlNfU1VQRVJfTUFHSUMxX0JFIChfX2ZvcmNlIGZzMzIpY3B1X3RvX2JlMzIoQkVGU19TVVBFUl9NQUdJQzEpCiAKIC8qCiAgKiBGbGFncyBvZiBpbm9kZQpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IDkyODZiMmEuLmI2ZGZlZTMgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTgwOSw4ICs4MDksOCBAQAogCiAJLyogYWNjb3VudCBmb3Igb2Zmc2V0IG9mIHN1cGVyIGJsb2NrIG9uIHg4NiAqLwogCWRpc2tfc2IgPSAoYmVmc19zdXBlcl9ibG9jayAqKSBiaC0+Yl9kYXRhOwotCWlmICgobGUzMl90b19jcHUoZGlza19zYi0+bWFnaWMxKSA9PSBCRUZTX1NVUEVSX01BR0lDMSkgfHwKLQkgICAgKGJlMzJfdG9fY3B1KGRpc2tfc2ItPm1hZ2ljMSkgPT0gQkVGU19TVVBFUl9NQUdJQzEpKSB7CisJaWYgKChkaXNrX3NiLT5tYWdpYzEgPT0gQkVGU19TVVBFUl9NQUdJQzFfTEUpIHx8CisJICAgIChkaXNrX3NiLT5tYWdpYzEgPT0gQkVGU19TVVBFUl9NQUdJQzFfQkUpKSB7CiAJCWJlZnNfZGVidWcoc2IsICJVc2luZyBQUEMgc3VwZXJibG9jayBsb2NhdGlvbiIpOwogCX0gZWxzZSB7CiAJCWJlZnNfZGVidWcoc2IsICJVc2luZyB4ODYgc3VwZXJibG9jayBsb2NhdGlvbiIpOwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9zdXBlci5jIGIvZnMvYmVmcy9zdXBlci5jCmluZGV4IDhjMzQwMWYuLjQxZjJiNGQgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvc3VwZXIuYworKysgYi9mcy9iZWZzL3N1cGVyLmMKQEAgLTI2LDEwICsyNiwxMCBAQAogCWJlZnNfc2JfaW5mbyAqYmVmc19zYiA9IEJFRlNfU0Ioc2IpOwogCiAJLyogQ2hlY2sgdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIGZpbGVzeXN0ZW0gKi8KLQlpZiAobGUzMl90b19jcHUoZGlza19zYi0+ZnNfYnl0ZV9vcmRlcikgPT0gQkVGU19CWVRFT1JERVJfTkFUSVZFKQorCWlmIChkaXNrX3NiLT5mc19ieXRlX29yZGVyID09IEJFRlNfQllURU9SREVSX05BVElWRV9MRSkKIAkgICAgYmVmc19zYi0+Ynl0ZV9vcmRlciA9IEJFRlNfQllURVNFWF9MRTsKLQllbHNlIGlmIChiZTMyX3RvX2NwdShkaXNrX3NiLT5mc19ieXRlX29yZGVyKSA9PSBCRUZTX0JZVEVPUkRFUl9OQVRJVkUpCi0JICAgIGJlZnNfc2ItPmJ5dGVfb3JkZXIgPSBCRUZTX0JZVEVTRVhfQkU7CQorCWVsc2UgaWYgKGRpc2tfc2ItPmZzX2J5dGVfb3JkZXIgPT0gQkVGU19CWVRFT1JERVJfTkFUSVZFX0JFKQorCSAgICBiZWZzX3NiLT5ieXRlX29yZGVyID0gQkVGU19CWVRFU0VYX0JFOwogCiAJYmVmc19zYi0+bWFnaWMxID0gZnMzMl90b19jcHUoc2IsIGRpc2tfc2ItPm1hZ2ljMSk7CiAJYmVmc19zYi0+bWFnaWMyID0gZnMzMl90b19jcHUoc2IsIGRpc2tfc2ItPm1hZ2ljMik7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggNjU1ZWQ4ZC4uOGZjZmEzOSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtNjgzLDcgKzY4Myw3IEBACiAJCQkgKiBzd2l0Y2ggcmVhbGx5IGlzIGdvaW5nIHRvIGhhcHBlbiAtIGRvIHRoaXMgaW4KIAkJCSAqIGZsdXNoX3RocmVhZCgpLgktIGFrcG0KIAkJCSAqLwotCQkJU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4LCAwKTsKKwkJCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCk7CiAKIAkJCWludGVycHJldGVyID0gb3Blbl9leGVjKGVsZl9pbnRlcnByZXRlcik7CiAJCQlyZXR2YWwgPSBQVFJfRVJSKGludGVycHJldGVyKTsKQEAgLTczNCw3ICs3MzQsNyBAQAogCQkJZ290byBvdXRfZnJlZV9kZW50cnk7CiAJfSBlbHNlIHsKIAkJLyogRXhlY3V0YWJsZXMgd2l0aG91dCBhbiBpbnRlcnByZXRlciBhbHNvIG5lZWQgYSBwZXJzb25hbGl0eSAgKi8KLQkJU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4LCAwKTsKKwkJU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4KTsKIAl9CiAKIAkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCkBAIC03NDgsNyArNzQ4LDcgQEAKIAogCS8qIERvIHRoaXMgaW1tZWRpYXRlbHksIHNpbmNlIFNUQUNLX1RPUCBhcyB1c2VkIGluIHNldHVwX2FyZ19wYWdlcwogCSAgIG1heSBkZXBlbmQgb24gdGhlIHBlcnNvbmFsaXR5LiAgKi8KLQlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgsIDApOworCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCk7CiAJaWYgKGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhsb2MtPmVsZl9leCwgZXhlY3V0YWJsZV9zdGFjaykpCiAJCWN1cnJlbnQtPnBlcnNvbmFsaXR5IHw9IFJFQURfSU1QTElFU19FWEVDOwogCkBAIC0xMTU2LDE2ICsxMTU2LDI0IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfZHVtcF9zaXplKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCiB7CisjZGVmaW5lIEZJTFRFUih0eXBlKQkobW1fZmxhZ3MgJiAoMVVMIDw8IE1NRl9EVU1QXyMjdHlwZSkpCisKIAkvKiBUaGUgdm1hIGNhbiBiZSBzZXQgdXAgdG8gdGVsbCB1cyB0aGUgYW5zd2VyIGRpcmVjdGx5LiAgKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0FMV0FZU0RVTVApCiAJCWdvdG8gd2hvbGU7CiAKKwkvKiBIdWdldGxiIG1lbW9yeSBjaGVjayAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVRMQikgeworCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpICYmIEZJTFRFUihIVUdFVExCX1NIQVJFRCkpCisJCQlnb3RvIHdob2xlOworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJiBGSUxURVIoSFVHRVRMQl9QUklWQVRFKSkKKwkJCWdvdG8gd2hvbGU7CisJfQorCiAJLyogRG8gbm90IGR1bXAgSS9PIG1hcHBlZCBkZXZpY2VzIG9yIHNwZWNpYWwgbWFwcGluZ3MgKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1JFU0VSVkVEKSkKIAkJcmV0dXJuIDA7CiAKLSNkZWZpbmUgRklMVEVSKHR5cGUpCShtbV9mbGFncyAmICgxVUwgPDwgTU1GX0RVTVBfIyN0eXBlKSkKLQogCS8qIEJ5IGRlZmF1bHQsIGR1bXAgc2hhcmVkIG1lbW9yeSBpZiBtYXBwZWQgZnJvbSBhbiBhbm9ueW1vdXMgZmlsZS4gKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgewogCQlpZiAodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX25saW5rID09IDAgPwpAQCAtMTMzMywyMCArMTM0MSwxNSBAQAogCXByc3RhdHVzLT5wcl9wZ3JwID0gdGFza19wZ3JwX3ZucihwKTsKIAlwcnN0YXR1cy0+cHJfc2lkID0gdGFza19zZXNzaW9uX3ZucihwKTsKIAlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKIAkJLyoKLQkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQotCQkgKiBjdW11bGF0aXZlIHRpbWVzIG9mIHByZXZpb3VzIGRlYWQgdGhyZWFkcy4gIFRoaXMgdG90YWwKLQkJICogd29uJ3QgaW5jbHVkZSB0aGUgdGltZSBvZiBlYWNoIGxpdmUgdGhyZWFkIHdob3NlIHN0YXRlCi0JCSAqIGlzIGluY2x1ZGVkIGluIHRoZSBjb3JlIGR1bXAuICBUaGUgZmluYWwgdG90YWwgcmVwb3J0ZWQKLQkJICogdG8gb3VyIHBhcmVudCBwcm9jZXNzIHdoZW4gaXQgY2FsbHMgd2FpdDQgd2lsbCBpbmNsdWRlCi0JCSAqIHRob3NlIHN1bXMgYXMgd2VsbCBhcyB0aGUgbGl0dGxlIGJpdCBtb3JlIHRpbWUgaXQgdGFrZXMKLQkJICogdGhpcyBhbmQgZWFjaCBvdGhlciB0aHJlYWQgdG8gZmluaXNoIGR5aW5nIGFmdGVyIHRoZQotCQkgKiBjb3JlIGR1bXAgc3luY2hyb25pemF0aW9uIHBoYXNlLgorCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBJdCBzaG93cyB0aGUKKwkJICogZ3JvdXAtd2lkZSB0b3RhbCwgbm90IGl0cyBpbmRpdmlkdWFsIHRocmVhZCB0b3RhbC4KIAkJICovCi0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT51dGltZSwgcC0+c2lnbmFsLT51dGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl91dGltZSk7Ci0JCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lX2FkZChwLT5zdGltZSwgcC0+c2lnbmFsLT5zdGltZSksCi0JCQkJICAgJnByc3RhdHVzLT5wcl9zdGltZSk7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWUudXRpbWUsICZwcnN0YXR1cy0+cHJfdXRpbWUpOworCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZS5zdGltZSwgJnByc3RhdHVzLT5wcl9zdGltZSk7CiAJfSBlbHNlIHsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnV0aW1lLCAmcHJzdGF0dXMtPnByX3V0aW1lKTsKIAkJY3B1dGltZV90b190aW1ldmFsKHAtPnN0aW1lLCAmcHJzdGF0dXMtPnByX3N0aW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCA4MGMxZjk1Li4wZTgzNjdjIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgpAQCAtNDU1LDggKzQ1NiwxOSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgRUxGX0JBU0VfUExBVEZPUk0KIC8qCi0gKiBwcmVzZW50IHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgcHJvZ3JhbQorICogQVRfQkFTRV9QTEFURk9STSBpbmRpY2F0ZXMgdGhlICJyZWFsIiBoYXJkd2FyZS9taWNyb2FyY2hpdGVjdHVyZS4KKyAqIElmIHRoZSBhcmNoIGRlZmluZXMgRUxGX0JBU0VfUExBVEZPUk0gKGluIGFzbS9lbGYuaCksIHRoZSB2YWx1ZQorICogd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHVzZXIgc3RhY2sgaW4gdGhlIHNhbWUgbWFubmVyIGFzIEFUX1BMQVRGT1JNLgorICovCisjZGVmaW5lIEVMRl9CQVNFX1BMQVRGT1JNIE5VTEwKKyNlbmRpZgorCisvKgorICogcHJlc2VudCB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHByb2dyYW0gYnkgc2hvdmVsbGluZyBpdCBvbnRvIHRoZSBuZXcKKyAqIHByb2Nlc3MncyBzdGFjawogICovCiBzdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiAJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCkBAIC00NjYsMTUgKzQ3OCwxOSBAQAogCXVuc2lnbmVkIGxvbmcgc3AsIGNzcCwgbml0ZW1zOwogCWVsZl9jYWRkcl90IF9fdXNlciAqYXJndiwgKmVudnA7CiAJc2l6ZV90IHBsYXRmb3JtX2xlbiA9IDAsIGxlbjsKLQljaGFyICprX3BsYXRmb3JtOwotCWNoYXIgX191c2VyICp1X3BsYXRmb3JtLCAqcDsKKwljaGFyICprX3BsYXRmb3JtLCAqa19iYXNlX3BsYXRmb3JtOworCWNoYXIgX191c2VyICp1X3BsYXRmb3JtLCAqdV9iYXNlX3BsYXRmb3JtLCAqcDsKIAlsb25nIGh3Y2FwOwogCWludCBsb29wOwogCWludCBucjsJLyogcmVzZXQgZm9yIGVhY2ggY3NwIGFkanVzdG1lbnQgKi8KIAotCS8qIHdlJ3JlIGdvaW5nIHRvIHNob3ZlbCBhIHdob2xlIGxvYWQgb2Ygc3R1ZmYgb250byB0aGUgc3RhY2sgKi8KICNpZmRlZiBDT05GSUdfTU1VCi0Jc3AgPSBicHJtLT5wOworCS8qIEluIHNvbWUgY2FzZXMgKGUuZy4gSHlwZXItVGhyZWFkaW5nKSwgd2Ugd2FudCB0byBhdm9pZCBMMSBldmljdGlvbnMKKwkgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpcworCSAqIHRvIHNodWZmbGUgdGhlIGluaXRpYWwgc3RhY2sgZm9yIHRoZW0sIHNvIHdlIGdpdmUgdGhlIGFyY2hpdGVjdHVyZQorCSAqIGFuIG9wcG9ydHVuaXR5IHRvIGRvIHNvIGhlcmUuCisJICovCisJc3AgPSBhcmNoX2FsaWduX3N0YWNrKGJwcm0tPnApOwogI2Vsc2UKIAlzcCA9IG1tLT5zdGFydF9zdGFjazsKIApAQCAtNDgzLDExICs0OTksMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAjZW5kaWYKIAotCS8qIGdldCBob2xkIG9mIHBsYXRmb3JtIGFuZCBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgbWFza3MgZm9yIHRoZSBtYWNoaW5lCi0JICogd2UgYXJlIHJ1bm5pbmcgb24uICBJbiBzb21lIGNhc2VzIChTcGFyYyksIHRoaXMgaW5mbyBpcyBpbXBvc3NpYmxlCi0JICogdG8gZ2V0LCBpbiBvdGhlcnMgKGkzODYpIGl0IGlzIG1lcmVseSBkaWZmaWN1bHQuCi0JICovCiAJaHdjYXAgPSBFTEZfSFdDQVA7CisKKwkvKgorCSAqIElmIHRoaXMgYXJjaGl0ZWN0dXJlIGhhcyBhIHBsYXRmb3JtIGNhcGFiaWxpdHkgc3RyaW5nLCBjb3B5IGl0CisJICogdG8gdXNlcnNwYWNlLiAgSW4gc29tZSBjYXNlcyAoU3BhcmMpLCB0aGlzIGluZm8gaXMgaW1wb3NzaWJsZQorCSAqIGZvciB1c2Vyc3BhY2UgdG8gZ2V0IGFueSBvdGhlciB3YXksIGluIG90aGVycyAoaTM4NikgaXQgaXMKKwkgKiBtZXJlbHkgZGlmZmljdWx0LgorCSAqLwogCWtfcGxhdGZvcm0gPSBFTEZfUExBVEZPUk07CiAJdV9wbGF0Zm9ybSA9IE5VTEw7CiAKQEAgLTQ5OSwxOSArNTE4LDIwIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JLyogaW4gc29tZSBjYXNlcyAoZS5nLiBIeXBlci1UaHJlYWRpbmcpLCB3ZSB3YW50IHRvIGF2b2lkIEwxIGV2aWN0aW9ucwotCSAqIGJ5IHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZSBwYWNrYWdlLiBPbmUgdGhpbmcgd2UgY2FuIGRvIGlzCi0JICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbS4KLQkgKgotCSAqIHRoZSBjb25kaXRpb25hbHMgaGVyZSBhcmUgdW5uZWVkZWQsIGJ1dCBrZXB0IGluIHRvIG1ha2UgdGhlIGNvZGUKLQkgKiBiZWhhdmlvdXIgdGhlIHNhbWUgYXMgcHJlIGNoYW5nZSB1bmxlc3Mgd2UgaGF2ZSBoeXBlcnRocmVhZGVkCi0JICogcHJvY2Vzc29ycy4gVGhpcyBrZWVwcyBNciBNYXJjZWxvIFBlcnNvbiBoYXBwaWVyIGJ1dCBzaG91bGQgYmUKLQkgKiByZW1vdmVkIGZvciAyLjUKKwkvKgorCSAqIElmIHRoaXMgYXJjaGl0ZWN0dXJlIGhhcyBhICJiYXNlIiBwbGF0Zm9ybSBjYXBhYmlsaXR5CisJICogc3RyaW5nLCBjb3B5IGl0IHRvIHVzZXJzcGFjZS4KIAkgKi8KLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpCi0JCXNwID0gc3AgLSAoKGN1cnJlbnQtPnBpZCAlIDY0KSA8PCA3KTsKLSNlbmRpZgorCWtfYmFzZV9wbGF0Zm9ybSA9IEVMRl9CQVNFX1BMQVRGT1JNOworCXVfYmFzZV9wbGF0Zm9ybSA9IE5VTEw7CisKKwlpZiAoa19iYXNlX3BsYXRmb3JtKSB7CisJCXBsYXRmb3JtX2xlbiA9IHN0cmxlbihrX2Jhc2VfcGxhdGZvcm0pICsgMTsKKwkJc3AgLT0gcGxhdGZvcm1fbGVuOworCQl1X2Jhc2VfcGxhdGZvcm0gPSAoY2hhciBfX3VzZXIgKikgc3A7CisJCWlmIChfX2NvcHlfdG9fdXNlcih1X2Jhc2VfcGxhdGZvcm0sIGtfYmFzZV9wbGF0Zm9ybSwgcGxhdGZvcm1fbGVuKSAhPSAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJc3AgJj0gfjdVTDsKIApAQCAtNTQxLDkgKzU2MSwxMyBAQAogCX0KIAogCS8qIGZvcmNlIDE2IGJ5dGUgX2ZpbmFsXyBhbGlnbm1lbnQgaGVyZSBmb3IgZ2VuZXJhbGl0eSAqLwotI2RlZmluZSBETElORk9fSVRFTVMgMTMKKyNkZWZpbmUgRExJTkZPX0lURU1TIDE1CiAKLQluaXRlbXMgPSAxICsgRExJTkZPX0lURU1TICsgKGtfcGxhdGZvcm0gPyAxIDogMCkgKyBBVF9WRUNUT1JfU0laRV9BUkNIOworCW5pdGVtcyA9IDEgKyBETElORk9fSVRFTVMgKyAoa19wbGF0Zm9ybSA/IDEgOiAwKSArCisJCShrX2Jhc2VfcGxhdGZvcm0gPyAxIDogMCkgKyBBVF9WRUNUT1JfU0laRV9BUkNIOworCisJaWYgKGJwcm0tPmludGVycF9mbGFncyAmIEJJTlBSTV9GTEFHU19FWEVDRkQpCisJCW5pdGVtcysrOwogCiAJY3NwID0gc3A7CiAJc3AgLT0gbml0ZW1zICogMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKQEAgLTU3NSw2ICs1OTksMTkgQEAKIAkJCSAgICAoZWxmX2FkZHJfdCkgKHVuc2lnbmVkIGxvbmcpIHVfcGxhdGZvcm0pOwogCX0KIAorCWlmIChrX2Jhc2VfcGxhdGZvcm0pIHsKKwkJbnIgPSAwOworCQljc3AgLT0gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJTkVXX0FVWF9FTlQoQVRfQkFTRV9QTEFURk9STSwKKwkJCSAgICAoZWxmX2FkZHJfdCkgKHVuc2lnbmVkIGxvbmcpIHVfYmFzZV9wbGF0Zm9ybSk7CisJfQorCisJaWYgKGJwcm0tPmludGVycF9mbGFncyAmIEJJTlBSTV9GTEFHU19FWEVDRkQpIHsKKwkJbnIgPSAwOworCQljc3AgLT0gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJTkVXX0FVWF9FTlQoQVRfRVhFQ0ZELCBicHJtLT5pbnRlcnBfZGF0YSk7CisJfQorCiAJbnIgPSAwOwogCWNzcCAtPSBETElORk9fSVRFTVMgKiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCU5FV19BVVhfRU5UKEFUX0hXQ0FQLAlod2NhcCk7CkBAIC01OTAsNiArNjI3LDggQEAKIAlORVdfQVVYX0VOVChBVF9FVUlELAkoZWxmX2FkZHJfdCkgY3VycmVudC0+ZXVpZCk7CiAJTkVXX0FVWF9FTlQoQVRfR0lELAkoZWxmX2FkZHJfdCkgY3VycmVudC0+Z2lkKTsKIAlORVdfQVVYX0VOVChBVF9FR0lELAkoZWxmX2FkZHJfdCkgY3VycmVudC0+ZWdpZCk7CisJTkVXX0FVWF9FTlQoQVRfU0VDVVJFLAlzZWN1cml0eV9icHJtX3NlY3VyZWV4ZWMoYnBybSkpOworCU5FV19BVVhfRU5UKEFUX0VYRUNGTiwJYnBybS0+ZXhlYyk7CiAKICNpZmRlZiBBUkNIX0RMSU5GTwogCW5yID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbTg2LmMgYi9mcy9iaW5mbXRfZW04Ni5jCmluZGV4IGY5Yzg4ZDAuLjMyZmIwMGIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbTg2LmMKKysrIGIvZnMvYmluZm10X2VtODYuYwpAQCAtNDMsNyArNDMsNyBAQAogCQkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAotCWJwcm0tPnNoX2JhbmcgPSAxOwkvKiBXZWxsLCB0aGUgYmFuZy1zaGVsbCBpcyBpbXBsaWNpdC4uLiAqLworCWJwcm0tPnJlY3Vyc2lvbl9kZXB0aCsrOyAvKiBXZWxsLCB0aGUgYmFuZy1zaGVsbCBpcyBpbXBsaWNpdC4uLiAqLwogCWFsbG93X3dyaXRlX2FjY2VzcyhicHJtLT5maWxlKTsKIAlmcHV0KGJwcm0tPmZpbGUpOwogCWJwcm0tPmZpbGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2ZsYXQuYyBiL2ZzL2JpbmZtdF9mbGF0LmMKaW5kZXggZGZjMDE5Ny4uY2NiNzgxYSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2ZsYXQuYworKysgYi9mcy9iaW5mbXRfZmxhdC5jCkBAIC0yMjksMTMgKzIyOSwxMyBAQAogCXJldCA9IDEwOwogCWlmIChidWZbM10gJiBFWFRSQV9GSUVMRCkgewogCQlyZXQgKz0gMiArIGJ1ZlsxMF0gKyAoYnVmWzExXSA8PCA4KTsKLQkJaWYgKHVubGlrZWx5KExCVUZTSVpFID09IHJldCkpIHsKKwkJaWYgKHVubGlrZWx5KExCVUZTSVpFIDw9IHJldCkpIHsKIAkJCURCR19GTFQoImJpbmZtdF9mbGF0OiBidWZmZXIgb3ZlcmZsb3cgKEVYVFJBKT9cbiIpOwogCQkJZ290byBvdXRfZnJlZV9idWY7CiAJCX0KIAl9CiAJaWYgKGJ1ZlszXSAmIE9SSUdfTkFNRSkgewotCQlmb3IgKDsgcmV0IDwgTEJVRlNJWkUgJiYgKGJ1ZltyZXRdICE9IDApOyByZXQrKykKKwkJd2hpbGUgKHJldCA8IExCVUZTSVpFICYmIGJ1ZltyZXQrK10gIT0gMCkKIAkJCTsKIAkJaWYgKHVubGlrZWx5KExCVUZTSVpFID09IHJldCkpIHsKIAkJCURCR19GTFQoImJpbmZtdF9mbGF0OiBidWZmZXIgb3ZlcmZsb3cgKE9SSUdfTkFNRSk/XG4iKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQl9CiAJfQogCWlmIChidWZbM10gJiBDT01NRU5UKSB7Ci0JCWZvciAoOyAgcmV0IDwgTEJVRlNJWkUgJiYgKGJ1ZltyZXRdICE9IDApOyByZXQrKykKKwkJd2hpbGUgKHJldCA8IExCVUZTSVpFICYmIGJ1ZltyZXQrK10gIT0gMCkKIAkJCTsKIAkJaWYgKHVubGlrZWx5KExCVUZTSVpFID09IHJldCkpIHsKIAkJCURCR19GTFQoImJpbmZtdF9mbGF0OiBidWZmZXIgb3ZlcmZsb3cgKENPTU1FTlQpP1xuIik7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA4ZDdlODhlLi5mMjc0NGFiIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCisrKyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCQlnb3RvIF9yZXQ7CiAKIAlyZXR2YWwgPSAtRU5PRVhFQzsKLQlpZiAoYnBybS0+bWlzY19iYW5nKQorCWlmIChicHJtLT5yZWN1cnNpb25fZGVwdGggPiBCSU5QUk1fTUFYX1JFQ1VSU0lPTikKIAkJZ290byBfcmV0OwogCiAJLyogdG8ga2VlcCBsb2NraW5nIHRpbWUgbG93LCB3ZSBjb3B5IHRoZSBpbnRlcnByZXRlciBzdHJpbmcgKi8KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIF9lcnJvcjsKIAotCWJwcm0tPm1pc2NfYmFuZyA9IDE7CisJYnBybS0+cmVjdXJzaW9uX2RlcHRoKys7CiAKIAlyZXR2YWwgPSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIgKGJwcm0sIHJlZ3MpOwogCWlmIChyZXR2YWwgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X3NjcmlwdC5jIGIvZnMvYmluZm10X3NjcmlwdC5jCmluZGV4IDllMzk2M2YuLjA4MzQzNTAgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zY3JpcHQuYworKysgYi9mcy9iaW5mbXRfc2NyaXB0LmMKQEAgLTIyLDE0ICsyMiwxNSBAQAogCWNoYXIgaW50ZXJwW0JJTlBSTV9CVUZfU0laRV07CiAJaW50IHJldHZhbDsKIAotCWlmICgoYnBybS0+YnVmWzBdICE9ICcjJykgfHwgKGJwcm0tPmJ1ZlsxXSAhPSAnIScpIHx8IChicHJtLT5zaF9iYW5nKSkgCisJaWYgKChicHJtLT5idWZbMF0gIT0gJyMnKSB8fCAoYnBybS0+YnVmWzFdICE9ICchJykgfHwKKwkgICAgKGJwcm0tPnJlY3Vyc2lvbl9kZXB0aCA+IEJJTlBSTV9NQVhfUkVDVVJTSU9OKSkKIAkJcmV0dXJuIC1FTk9FWEVDOwogCS8qCiAJICogVGhpcyBzZWN0aW9uIGRvZXMgdGhlICMhIGludGVycHJldGF0aW9uLgogCSAqIFNvcnRhIGNvbXBsaWNhdGVkLCBidXQgaG9wZWZ1bGx5IGl0IHdpbGwgd29yay4gIC1UWVQKIAkgKi8KIAotCWJwcm0tPnNoX2JhbmcgPSAxOworCWJwcm0tPnJlY3Vyc2lvbl9kZXB0aCsrOwogCWFsbG93X3dyaXRlX2FjY2VzcyhicHJtLT5maWxlKTsKIAlmcHV0KGJwcm0tPmZpbGUpOwogCWJwcm0tPmZpbGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X3NvbS5jIGIvZnMvYmluZm10X3NvbS5jCmluZGV4IDY4YmU1ODAuLjc0ZTU4N2EgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zb20uYworKysgYi9mcy9iaW5mbXRfc29tLmMKQEAgLTMwNiwzICszMDYsNSBAQAogCiBjb3JlX2luaXRjYWxsKGluaXRfc29tX2JpbmZtdCk7CiBtb2R1bGVfZXhpdChleGl0X3NvbV9iaW5mbXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IGQ4NGYwNDY5Li4yMTg0MDhlIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTI2Miw3ICsxMjYyLDcgQEAKIAogLyoqCiAgKiBsb29rdXBfYmRldiAgLSBsb29rdXAgYSBzdHJ1Y3QgYmxvY2tfZGV2aWNlIGJ5IG5hbWUKLSAqIEBwYXRobmFtZToJc3BlY2lhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgYmxvY2sgZGV2aWNlCisgKiBAcGF0aDoJc3BlY2lhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgYmxvY2sgZGV2aWNlCiAgKgogICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBibG9ja2RldmljZSBhdCBAcGF0aG5hbWUgaW4gdGhlIGN1cnJlbnQKICAqIG5hbWVzcGFjZSBpZiBwb3NzaWJsZSBhbmQgcmV0dXJuIGl0LiAgUmV0dXJuIEVSUl9QVFIoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IGFjNzhkNGMuLjY1NjlmZGEgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC03Niw4ICs3Niw3IEBACiAKIHZvaWQgdW5sb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNsZWFyX2J1ZmZlcl9sb2NrZWQoYmgpOworCWNsZWFyX2JpdF91bmxvY2soQkhfTG9jaywgJmJoLT5iX3N0YXRlKTsKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCXdha2VfdXBfYml0KCZiaC0+Yl9zdGF0ZSwgQkhfTG9jayk7CiB9CmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCAzY2I3Y2RhLi4yNjJmYTEwIDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTIyLDkgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxYTk4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMCwwICsxLDE0MiBAQAorY29uZmlnIENJRlMKKwl0cmlzdGF0ZSAiQ0lGUyBzdXBwb3J0IChhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0sIFNNQkZTIHN1Y2Nlc3NvcikiCisJZGVwZW5kcyBvbiBJTkVUCisJc2VsZWN0IE5MUworCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCisJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKKwkgIChTTUIpIHByb3RvY29sLCB0aGUgbmF0aXZlIGZpbGUgc2hhcmluZyBtZWNoYW5pc20gZm9yIG1vc3QgZWFybHkKKwkgIFBDIG9wZXJhdGluZyBzeXN0ZW1zLiAgVGhlIENJRlMgcHJvdG9jb2wgaXMgZnVsbHkgc3VwcG9ydGVkIGJ5CisJICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQKKwkgIGFuZCBXaW5kb3dzIFhQKSBhcyB3ZWxsIGJ5IFNhbWJhICh3aGljaCBwcm92aWRlcyBleGNlbGxlbnQgQ0lGUworCSAgc2VydmVyIHN1cHBvcnQgZm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKS4gTGltaXRlZAorCSAgc3VwcG9ydCBmb3IgT1MvMiBhbmQgV2luZG93cyBNRSBhbmQgc2ltaWxhciBzZXJ2ZXJzIGlzIHByb3ZpZGVkIGFzCisJICB3ZWxsLgorCisJICBUaGUgY2lmcyBtb2R1bGUgcHJvdmlkZXMgYW4gYWR2YW5jZWQgbmV0d29yayBmaWxlIHN5c3RlbQorCSAgY2xpZW50IGZvciBtb3VudGluZyB0byBDSUZTIGNvbXBsaWFudCBzZXJ2ZXJzLiAgSXQgaW5jbHVkZXMKKwkgIHN1cHBvcnQgZm9yIERGUyAoaGllcmFyY2hpY2FsIG5hbWUgc3BhY2UpLCBzZWN1cmUgcGVyLXVzZXIKKwkgIHNlc3Npb24gZXN0YWJsaXNobWVudCB2aWEgS2VyYmVyb3Mgb3IgTlRMTSBvciBOVExNdjIsCisJICBzYWZlIGRpc3RyaWJ1dGVkIGNhY2hpbmcgKG9wbG9jayksIG9wdGlvbmFsIHBhY2tldAorCSAgc2lnbmluZywgVW5pY29kZSBhbmQgb3RoZXIgaW50ZXJuYXRpb25hbGl6YXRpb24gaW1wcm92ZW1lbnRzLgorCSAgSWYgeW91IG5lZWQgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCisKK2NvbmZpZyBDSUZTX1NUQVRTCisgICAgICAgIGJvb2wgIkNJRlMgc3RhdGlzdGljcyIKKyAgICAgICAgZGVwZW5kcyBvbiBDSUZTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggc2VydmVyIHNoYXJlCisJICBtb3VudGVkIGJ5IHRoZSBjaWZzIGNsaWVudCB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9TdGF0cworCitjb25maWcgQ0lGU19TVEFUUzIKKwlib29sICJFeHRlbmRlZCBzdGF0aXN0aWNzIgorCWRlcGVuZHMgb24gQ0lGU19TVEFUUworCWhlbHAKKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgbW9yZSBkZXRhaWxlZCBzdGF0aXN0aWNzIG9uIFNNQgorCSAgcmVxdWVzdCB0aW1pbmcgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvRGVidWdEYXRhIGFuZCBhbHNvCisJICBhbGxvdyBvcHRpb25hbCBsb2dnaW5nIG9mIHNsb3cgcmVzcG9uc2VzIHRvIGRtZXNnIChkZXBlbmRpbmcgb24gdGhlCisJICB2YWx1ZSBvZiAvcHJvYy9mcy9jaWZzL2NpZnNGWUksIHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzKS4KKwkgIFRoZXNlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBtYXkgaGF2ZSBhIG1pbm9yIGVmZmVjdCBvbiBwZXJmb3JtYW5jZQorCSAgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi4KKworCSAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb3IgYXJlIGRvaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMKKwkgIG9yIHR1bmluZywgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1dFQUtfUFdfSEFTSAorCWJvb2wgIlN1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIHdlYWtlciBMQU5NQU4gc2VjdXJpdHkiCisJZGVwZW5kcyBvbiBDSUZTCisJaGVscAorCSAgTW9kZXJuIENJRlMgc2VydmVycyBpbmNsdWRpbmcgU2FtYmEgYW5kIG1vc3QgV2luZG93cyB2ZXJzaW9ucworCSAgKHNpbmNlIDE5OTcpIHN1cHBvcnQgc3Ryb25nZXIgTlRMTSAoYW5kIGV2ZW4gTlRMTXYyIGFuZCBLZXJiZXJvcykKKwkgIHNlY3VyaXR5IG1lY2hhbmlzbXMuIFRoZXNlIGhhc2ggdGhlIHBhc3N3b3JkIG1vcmUgc2VjdXJlbHkKKwkgIHRoYW4gdGhlIG1lY2hhbmlzbXMgdXNlZCBpbiB0aGUgb2xkZXIgTEFOTUFOIHZlcnNpb24gb2YgdGhlCisJICBTTUIgcHJvdG9jb2wgYnV0IExBTk1BTiBiYXNlZCBhdXRoZW50aWNhdGlvbiBpcyBuZWVkZWQgdG8KKwkgIGVzdGFibGlzaCBzZXNzaW9ucyB3aXRoIHNvbWUgb2xkIFNNQiBzZXJ2ZXJzLgorCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlIGNpZnMgbW9kdWxlIHRvIG1vdW50IHRvIG9sZGVyCisJICBMQU5NQU4gYmFzZWQgc2VydmVycyBzdWNoIGFzIE9TLzIgYW5kIFdpbmRvd3MgOTUsIGJ1dCBzdWNoCisJICBtb3VudHMgbWF5IGJlIGxlc3Mgc2VjdXJlIHRoYW4gbW91bnRzIHVzaW5nIE5UTE0gb3IgbW9yZSByZWNlbnQKKwkgIHNlY3VyaXR5IG1lY2hhbmlzbXMgaWYgeW91IGFyZSBvbiBhIHB1YmxpYyBuZXR3b3JrLiAgVW5sZXNzIHlvdQorCSAgaGF2ZSBhIG5lZWQgdG8gYWNjZXNzIG9sZCBTTUIgc2VydmVycyAoYW5kIGFyZSBvbiBhIHByaXZhdGUKKwkgIG5ldHdvcmspIHlvdSBwcm9iYWJseSB3YW50IHRvIHNheSBOLiAgRXZlbiBpZiB0aGlzIHN1cHBvcnQKKwkgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZCwgTEFOTUFOIGF1dGhlbnRpY2F0aW9uIHdpbGwgbm90IGJlCisJICB1c2VkIGF1dG9tYXRpY2FsbHkuIEF0IHJ1bnRpbWUgTEFOTUFOIG1vdW50cyBhcmUgZGlzYWJsZWQgYnV0CisJICBjYW4gYmUgc2V0IHRvIHJlcXVpcmVkIChvciBvcHRpb25hbCkgZWl0aGVyIGluCisJICAvcHJvYy9mcy9jaWZzIChzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlsKSBvciB2aWEgYW4KKwkgIG9wdGlvbiBvbiB0aGUgbW91bnQgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5CisJICBkZWZhdWx0IGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBkb3duZ3JhZGUKKwkgIGF0dGFjay4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfVVBDQUxMCisJICBib29sICJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCIKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCisJICBoZWxwCisJICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBhY2Nlc3NlcworCSAgICB1c2Vyc3BhY2UgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIFNQTkVHTyBwYWNrYWdlZCAoUkZDIDQxNzgpCisJICAgIEtlcmJlcm9zIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCisJICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgorCSAgICB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19YQVRUUgorICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGUworICAgICAgICBoZWxwCisgICAgICAgICAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisgICAgICAgICAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorICAgICAgICAgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLiAgQ0lGUyBtYXBzIHRoZSBuYW1lIG9mCisgICAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlcyBiZWdpbm5pbmcgd2l0aCB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4CisgICAgICAgICAgdG8gU01CL0NJRlMgRUFzLiBFQXMgYXJlIHN0b3JlZCBvbiBXaW5kb3dzIHNlcnZlcnMgd2l0aG91dCB0aGUKKyAgICAgICAgICB1c2VyIG5hbWVzcGFjZSBwcmVmaXgsIGJ1dCB0aGVpciBuYW1lcyBhcmUgc2VlbiBieSBMaW51eCBjaWZzIGNsaWVudHMKKyAgICAgICAgICBwcmVmYWNlZCBieSB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4LiBUaGUgc3lzdGVtIG5hbWVzcGFjZQorICAgICAgICAgICh1c2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgdG8gc3RvcmUgQUNMcykgaXMgbm90IHN1cHBvcnRlZCBhdAorICAgICAgICAgIHRoaXMgdGltZS4KKworICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1BPU0lYCisgICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyIKKyAgICAgICAgZGVwZW5kcyBvbiBDSUZTX1hBVFRSCisgICAgICAgIGhlbHAKKyAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBjaWZzIGNsaWVudCB0byBhdHRlbXB0IHRvCisJICBuZWdvdGlhdGUgYSBuZXdlciBkaWFsZWN0IHdpdGggc2VydmVycywgc3VjaCBhcyBTYW1iYSAzLjAuNQorCSAgb3IgbGF0ZXIsIHRoYXQgb3B0aW9uYWxseSBjYW4gaGFuZGxlIG1vcmUgUE9TSVggbGlrZSAocmF0aGVyCisJICB0aGFuIFdpbmRvd3MgbGlrZSkgZmlsZSBiZWhhdmlvci4gIEl0IGFsc28gZW5hYmxlcworCSAgc3VwcG9ydCBmb3IgUE9TSVggQUNMcyAoZ2V0ZmFjbCBhbmQgc2V0ZmFjbCkgdG8gc2VydmVycworCSAgKHN1Y2ggYXMgU2FtYmEgMy4xMCBhbmQgbGF0ZXIpIHdoaWNoIGNhbiBuZWdvdGlhdGUKKwkgIENJRlMgUE9TSVggQUNMIHN1cHBvcnQuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19ERUJVRzIKKwlib29sICJFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lcyIKKwlkZXBlbmRzIG9uIENJRlMKKwloZWxwCisJICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWRkcyBhIGZldyBtb3JlIGRlYnVnZ2luZyByb3V0aW5lcworCSAgIHRvIHRoZSBjaWZzIGNvZGUgd2hpY2ggc2xpZ2h0bHkgaW5jcmVhc2VzIHRoZSBzaXplIG9mCisJICAgdGhlIGNpZnMgbW9kdWxlIGFuZCBjYW4gY2F1c2UgYWRkaXRpb25hbCBsb2dnaW5nIG9mIGRlYnVnCisJICAgbWVzc2FnZXMgaW4gc29tZSBlcnJvciBwYXRocywgc2xvd2luZyBwZXJmb3JtYW5jZS4gVGhpcworCSAgIG9wdGlvbiBjYW4gYmUgdHVybmVkIG9mZiB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcKKwkgICBjaWZzIHByb2JsZW1zLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCisJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzIGFyZQorCSAgICBleHBlcmltZW50YWwgYW5kIGN1cnJlbnRseSBpbmNsdWRlIERGUyBzdXBwb3J0IGFuZCBkaXJlY3RvcnkKKwkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKKwkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgorCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uCisJICAgIHNldHRpbmcgYSB2YWx1ZSBvZiAxIHRvIHRoZSBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbAorCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQorCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfREZTX1VQQ0FMTAorCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKKwkgIGRlcGVuZHMgb24gS0VZUworCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCisJICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCisJICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCisJICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggYzRhOGEwNi4uNjJkOGJkOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCWlmICghcGFnZXZlY19hZGQocGxydV9wdmVjLCBwYWdlKSkKLQkJCV9fcGFnZXZlY19scnVfYWRkKHBscnVfcHZlYyk7CisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKHBscnVfcHZlYyk7CiAJCWRhdGEgKz0gUEFHRV9DQUNIRV9TSVpFOwogCX0KIAlyZXR1cm47CkBAIC0xOTI1LDcgKzE5MjUsNyBAQAogCQlieXRlc19yZWFkID0gMDsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCiAvKiBuZWVkIHRvIGZyZWUgc21iX3JlYWRfZGF0YSBidWYgYmVmb3JlIGV4aXQgKi8KIAlpZiAoc21iX3JlYWRfZGF0YSkgewpkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IDBkOWI4MGUuLmNmZDI5ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTM2Miw5ICszNjIsOCBAQAogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQkJCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DT0RBREVWUzsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY29kYV9wc2Rldl9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihDT0RBX1BTREVWX01BSk9SLCBpKSwKLQkJCQkgICAgICBOVUxMLCAiY2ZzJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZShjb2RhX3BzZGV2X2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoQ09EQV9QU0RFVl9NQUpPUiwgaSksIE5VTEwsICJjZnMlZCIsIGkpOwogCWNvZGFfc3lzY3RsX2luaXQoKTsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCAwNzVkMDUwLi41ZjllYzQ0IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTM3LDYgKzEzNyw0NSBAQAogCXJldHVybiBjb21wYXRfc3lzX2Z1dGltZXNhdChBVF9GRENXRCwgZmlsZW5hbWUsIHQpOwogfQogCitzdGF0aWMgaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfaW5vX3QgaW5vID0gc3RhdC0+aW5vOworCXR5cGVvZih1YnVmLT5zdF91aWQpIHVpZCA9IDA7CisJdHlwZW9mKHVidWYtPnN0X2dpZCkgZ2lkID0gMDsKKwlpbnQgZXJyOworCisJU0VUX1VJRCh1aWQsIHN0YXQtPnVpZCk7CisJU0VUX0dJRChnaWQsIHN0YXQtPmdpZCk7CisKKwlpZiAoKHU2NCkgc3RhdC0+c2l6ZSA+IE1BWF9OT05fTEZTIHx8CisJICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPmRldikgfHwKKwkgICAgIW9sZF92YWxpZF9kZXYoc3RhdC0+cmRldikpCisJCXJldHVybiAtRU9WRVJGTE9XOworCWlmIChzaXplb2YoaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIGlubyAhPSBzdGF0LT5pbm8pCisJCXJldHVybiAtRU9WRVJGTE9XOworCisJaWYgKGNsZWFyX3VzZXIodWJ1Ziwgc2l6ZW9mKCp1YnVmKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyICA9IF9fcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnVidWYtPnN0X2Rldik7CisJZXJyIHw9IF9fcHV0X3VzZXIoaW5vLCAmdWJ1Zi0+c3RfaW5vKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tb2RlLCAmdWJ1Zi0+c3RfbW9kZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bmxpbmssICZ1YnVmLT5zdF9ubGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIodWlkLCAmdWJ1Zi0+c3RfdWlkKTsKKwllcnIgfD0gX19wdXRfdXNlcihnaWQsICZ1YnVmLT5zdF9naWQpOworCWVyciB8PSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmdWJ1Zi0+c3RfcmRldik7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnVidWYtPnN0X3NpemUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfYXRpbWVfbnNlYyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZV9uc2VjKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZ1YnVmLT5zdF9jdGltZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibG9ja3MsICZ1YnVmLT5zdF9ibG9ja3MpOworCXJldHVybiBlcnI7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25ld3N0YXQoY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwKIAkJc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqc3RhdGJ1ZikKIHsKQEAgLTEyMzksNyArMTI3OCw3IEBACiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7CiAJCQlhcmd2Kys7Ci0JCQlpZigrK2kgPiBtYXgpCisJCQlpZiAoaSsrID49IG1heCkKIAkJCQlyZXR1cm4gLUUyQklHOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA5NjA2ZWU4Li5hZjA1NThkIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtNSwxMSArNSwxMSBAQAogICoKICAqIE9fRElSRUNUCiAgKgotICogMDRKdWwyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMDRKdWwyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24KICAqIDExU2VwMjAwMglqYW5ldGluY0B1cy5pYm0uY29tCiAgKiAJCWFkZGVkIHJlYWR2L3dyaXRldiBzdXBwb3J0LgotICogMjlPY3QyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMjlPY3QyMDAyCUFuZHJldyBNb3J0b24KICAqCQlyZXdyb3RlIGJpb19hZGRfcGFnZSgpIHN1cHBvcnQuCiAgKiAzME9jdDIwMDIJcGJhZGFyaUB1cy5pYm0uY29tCiAgKgkJYWRkZWQgc3VwcG9ydCBmb3Igbm9uLWFsaWduZWQgSU8uCmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCBhZDdlNTkwLi5kYTMwYTI3IDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTksOCArOSw2IEBACiAgKiBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBvbmUgb2YgdGhlIHNldmVyYWwgdmFyaWFudHMgb2YgdGhlIExJTlVYCiAgKiBpbm9kZS1zdWJzeXN0ZW0gd2l0aCBhZGRlZCBjb21wbGV4aXR5IG9mIHRoZSBkaXNrcXVvdGEgc3lzdGVtLgogICogCi0gKiBWZXJzaW9uOiAkSWQ6IGRxdW90LmMsdiA2LjMgMTk5Ni8xMS8xNyAxODozNTozNCBtdncgRXhwIG12dyAkCi0gKiAKICAqIEF1dGhvcjoJTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KICAqCiAgKiBGaXhlczogICBEbWl0cnkgR29yb2RjaGFuaW4gPHBnbWRzZ0BpYmkuY29tPiwgMTEgRmViIDk2CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9NYWtlZmlsZSBiL2ZzL2VjcnlwdGZzL01ha2VmaWxlCmluZGV4IGI0NzU1YTguLjJjYzllZTQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL01ha2VmaWxlCisrKyBiL2ZzL2VjcnlwdGZzL01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfRUNSWVBUX0ZTKSArPSBlY3J5cHRmcy5vCiAKLWVjcnlwdGZzLW9ianMgOj0gZGVudHJ5Lm8gZmlsZS5vIGlub2RlLm8gbWFpbi5vIHN1cGVyLm8gbW1hcC5vIHJlYWRfd3JpdGUubyBjcnlwdG8ubyBrZXlzdG9yZS5vIG1lc3NhZ2luZy5vIG5ldGxpbmsubyBtaXNjZGV2Lm8ga3RocmVhZC5vIGRlYnVnLm8KK2VjcnlwdGZzLW9ianMgOj0gZGVudHJ5Lm8gZmlsZS5vIGlub2RlLm8gbWFpbi5vIHN1cGVyLm8gbW1hcC5vIHJlYWRfd3JpdGUubyBjcnlwdG8ubyBrZXlzdG9yZS5vIG1lc3NhZ2luZy5vIG1pc2NkZXYubyBrdGhyZWFkLm8gZGVidWcubwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBiNzNmYjc1Li4zNTA0Y2Y5IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtNzksMTEgKzc5LDYgQEAKICNkZWZpbmUgRUNSWVBURlNfTUFYX1BLSV9OQU1FX0JZVEVTIDE2CiAjZGVmaW5lIEVDUllQVEZTX0RFRkFVTFRfTlVNX1VTRVJTIDQKICNkZWZpbmUgRUNSWVBURlNfTUFYX05VTV9VU0VSUyAzMjc2OAotI2RlZmluZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSyAwCi0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9DT05ORUNUT1IgMQotI2RlZmluZSBFQ1JZUFRGU19UUkFOU1BPUlRfUkVMQVlGUyAyCi0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWIDMKLSNkZWZpbmUgRUNSWVBURlNfREVGQVVMVF9UUkFOU1BPUlQgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVYKICNkZWZpbmUgRUNSWVBURlNfWEFUVFJfTkFNRSAidXNlci5lY3J5cHRmcyIKIAogI2RlZmluZSBSRkMyNDQwX0NJUEhFUl9ERVMzX0VERSAweDAyCkBAIC00MDAsOCArMzk1LDYgQEAKIAlzdHJ1Y3QgbXV0ZXggbXV4OwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBlY3J5cHRmc190cmFuc3BvcnQ7Ci0KIHN0cnVjdCBlY3J5cHRmc19kYWVtb247CiAKIHN0cnVjdCBlY3J5cHRmc19kYWVtb24gewpAQCAtNjI3LDMxICs2MjAsMjAgQEAKIGVjcnlwdGZzX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCiAJCSAgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBpbnQgZWNyeXB0ZnNfcmVhZF94YXR0cl9yZWdpb24oY2hhciAqcGFnZV92aXJ0LCBzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2lub2RlKTsKLWludCBlY3J5cHRmc19wcm9jZXNzX2hlbG8odW5zaWduZWQgaW50IHRyYW5zcG9ydCwgdWlkX3QgZXVpZCwKLQkJCSAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgcGlkICpwaWQpOworaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1aWRfdCBldWlkLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsCisJCQkgIHN0cnVjdCBwaWQgKnBpZCk7CiBpbnQgZWNyeXB0ZnNfcHJvY2Vzc19xdWl0KHVpZF90IGV1aWQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywKIAkJCSAgc3RydWN0IHBpZCAqcGlkKTsKIGludCBlY3J5cHRmc19wcm9jZXNzX3Jlc3BvbnNlKHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICptc2csIHVpZF90IGV1aWQsCiAJCQkgICAgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCwKIAkJCSAgICAgIHUzMiBzZXEpOwotaW50IGVjcnlwdGZzX3NlbmRfbWVzc2FnZSh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCitpbnQgZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKIAkJCSAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKIGludCBlY3J5cHRmc193YWl0X2Zvcl9yZXNwb25zZShzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eCwKIAkJCSAgICAgICBzdHJ1Y3QgZWNyeXB0ZnNfbWVzc2FnZSAqKmVtc2cpOwotaW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpOwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0KTsKK2ludCBlY3J5cHRmc19pbml0X21lc3NhZ2luZyh2b2lkKTsKK3ZvaWQgZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcodm9pZCk7CiAKLWludCBlY3J5cHRmc19zZW5kX25ldGxpbmsoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJICBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eCwgdTggbXNnX3R5cGUsCi0JCQkgIHUxNiBtc2dfZmxhZ3MsIHN0cnVjdCBwaWQgKmRhZW1vbl9waWQpOwotaW50IGVjcnlwdGZzX2luaXRfbmV0bGluayh2b2lkKTsKLXZvaWQgZWNyeXB0ZnNfcmVsZWFzZV9uZXRsaW5rKHZvaWQpOwotCi1pbnQgZWNyeXB0ZnNfc2VuZF9jb25uZWN0b3IoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJICAgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4LCB1OCBtc2dfdHlwZSwKLQkJCSAgICB1MTYgbXNnX2ZsYWdzLCBzdHJ1Y3QgcGlkICpkYWVtb25fcGlkKTsKLWludCBlY3J5cHRmc19pbml0X2Nvbm5lY3Rvcih2b2lkKTsKLXZvaWQgZWNyeXB0ZnNfcmVsZWFzZV9jb25uZWN0b3Iodm9pZCk7CiB2b2lkCiBlY3J5cHRmc193cml0ZV9oZWFkZXJfbWV0YWRhdGEoY2hhciAqdmlydCwKIAkJCSAgICAgICBzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCA5MjQ0ZDY1Li5lYjNkYzRjIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC03MSwxMiArNzEsMTEgQEAKIAl2b2lkICpkaXJlbnQ7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWZpbGxkaXJfdCBmaWxsZGlyOwotCWludCBlcnI7CiAJaW50IGZpbGxkaXJfY2FsbGVkOwogCWludCBlbnRyaWVzX3dyaXR0ZW47CiB9OwogCi0vKiBJbnNwaXJlZCBieSBnZW5lcmljIGZpbGxkaXIgaW4gZnMvcmVhZGlyLmMgKi8KKy8qIEluc3BpcmVkIGJ5IGdlbmVyaWMgZmlsbGRpciBpbiBmcy9yZWFkZGlyLmMgKi8KIHN0YXRpYyBpbnQKIGVjcnlwdGZzX2ZpbGxkaXIodm9pZCAqZGlyZW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgbG9mZl90IG9mZnNldCwKIAkJIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCkBAIC0xMjUsMTggKzEyNCwxOCBAQAogCWJ1Zi5kaXJlbnQgPSBkaXJlbnQ7CiAJYnVmLmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJYnVmLmZpbGxkaXIgPSBmaWxsZGlyOwotcmV0cnk6CiAJYnVmLmZpbGxkaXJfY2FsbGVkID0gMDsKIAlidWYuZW50cmllc193cml0dGVuID0gMDsKLQlidWYuZXJyID0gMDsKIAlyYyA9IHZmc19yZWFkZGlyKGxvd2VyX2ZpbGUsIGVjcnlwdGZzX2ZpbGxkaXIsICh2b2lkICopJmJ1Zik7Ci0JaWYgKGJ1Zi5lcnIpCi0JCXJjID0gYnVmLmVycjsKLQlpZiAoYnVmLmZpbGxkaXJfY2FsbGVkICYmICFidWYuZW50cmllc193cml0dGVuKQotCQlnb3RvIHJldHJ5OwogCWZpbGUtPmZfcG9zID0gbG93ZXJfZmlsZS0+Zl9wb3M7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGJ1Zi5maWxsZGlyX2NhbGxlZCAmJiAhYnVmLmVudHJpZXNfd3JpdHRlbikKKwkJZ290byBvdXQ7CiAJaWYgKHJjID49IDApCi0JCWZzc3RhY2tfY29weV9hdHRyX2F0aW1lKGlub2RlLCBsb3dlcl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwkJZnNzdGFja19jb3B5X2F0dHJfYXRpbWUoaW5vZGUsCisJCQkJCWxvd2VyX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworb3V0OgogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKaW5kZXggZjViNzZhMy4uZTIyYmMzOSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYworKysgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCkBAIC0yMzQsOCArMjM0LDggQEAKIAl9CiAJaSArPSBkYXRhX2xlbjsKIAlpZiAobWVzc2FnZV9sZW4gPCAoaSArIG1fc2l6ZSkpIHsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiVGhlIHJlY2VpdmVkIG5ldGxpbmsgbWVzc2FnZSBpcyAiCi0JCQkJInNob3J0ZXIgdGhhbiBleHBlY3RlZFxuIik7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIlRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gZWNyeXB0ZnNkICIKKwkJCQkiaXMgc2hvcnRlciB0aGFuIGV4cGVjdGVkXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MzgsOCArNDM4LDggQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbWVzc2FnZSAqbXNnID0gTlVMTDsKIAljaGFyICphdXRoX3Rva19zaWc7Ci0JY2hhciAqbmV0bGlua19tZXNzYWdlOwotCXNpemVfdCBuZXRsaW5rX21lc3NhZ2VfbGVuZ3RoOworCWNoYXIgKnBheWxvYWQ7CisJc2l6ZV90IHBheWxvYWRfbGVuOwogCWludCByYzsKIAogCXJjID0gZWNyeXB0ZnNfZ2V0X2F1dGhfdG9rX3NpZygmYXV0aF90b2tfc2lnLCBhdXRoX3Rvayk7CkBAIC00NDksMTUgKzQ0OSwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSB3cml0ZV90YWdfNjRfcGFja2V0KGF1dGhfdG9rX3NpZywgJihhdXRoX3Rvay0+c2Vzc2lvbl9rZXkpLAotCQkJCSAmbmV0bGlua19tZXNzYWdlLCAmbmV0bGlua19tZXNzYWdlX2xlbmd0aCk7CisJCQkJICZwYXlsb2FkLCAmcGF5bG9hZF9sZW4pOwogCWlmIChyYykgewogCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gd3JpdGUgdGFnIDY0IHBhY2tldFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShlY3J5cHRmc190cmFuc3BvcnQsIG5ldGxpbmtfbWVzc2FnZSwKLQkJCQkgICBuZXRsaW5rX21lc3NhZ2VfbGVuZ3RoLCAmbXNnX2N0eCk7CisJcmMgPSBlY3J5cHRmc19zZW5kX21lc3NhZ2UocGF5bG9hZCwgcGF5bG9hZF9sZW4sICZtc2dfY3R4KTsKIAlpZiAocmMpIHsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3Igc2VuZGluZyBuZXRsaW5rIG1lc3NhZ2VcbiIpOworCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG1lc3NhZ2UgdG8gIgorCQkJCSJlY3J5cHRmc2RcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc193YWl0X2Zvcl9yZXNwb25zZShtc2dfY3R4LCAmbXNnKTsKQEAgLTEzMzMsMjMgKzEzMzMsMjIgQEAKIAkJCXN0cnVjdCBlY3J5cHRmc19rZXlfcmVjb3JkICprZXlfcmVjKQogewogCXN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4ID0gTlVMTDsKLQljaGFyICpuZXRsaW5rX3BheWxvYWQ7Ci0Jc2l6ZV90IG5ldGxpbmtfcGF5bG9hZF9sZW5ndGg7CisJY2hhciAqcGF5bG9hZCA9IE5VTEw7CisJc2l6ZV90IHBheWxvYWRfbGVuOwogCXN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICptc2c7CiAJaW50IHJjOwogCiAJcmMgPSB3cml0ZV90YWdfNjZfcGFja2V0KGF1dGhfdG9rLT50b2tlbi5wcml2YXRlX2tleS5zaWduYXR1cmUsCiAJCQkJIGVjcnlwdGZzX2NvZGVfZm9yX2NpcGhlcl9zdHJpbmcoY3J5cHRfc3RhdCksCi0JCQkJIGNyeXB0X3N0YXQsICZuZXRsaW5rX3BheWxvYWQsCi0JCQkJICZuZXRsaW5rX3BheWxvYWRfbGVuZ3RoKTsKKwkJCQkgY3J5cHRfc3RhdCwgJnBheWxvYWQsICZwYXlsb2FkX2xlbik7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGdlbmVyYXRpbmcgdGFnIDY2IHBhY2tldFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShlY3J5cHRmc190cmFuc3BvcnQsIG5ldGxpbmtfcGF5bG9hZCwKLQkJCQkgICBuZXRsaW5rX3BheWxvYWRfbGVuZ3RoLCAmbXNnX2N0eCk7CisJcmMgPSBlY3J5cHRmc19zZW5kX21lc3NhZ2UocGF5bG9hZCwgcGF5bG9hZF9sZW4sICZtc2dfY3R4KTsKIAlpZiAocmMpIHsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3Igc2VuZGluZyBuZXRsaW5rIG1lc3NhZ2VcbiIpOworCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG1lc3NhZ2UgdG8gIgorCQkJCSJlY3J5cHRmc2RcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc193YWl0X2Zvcl9yZXNwb25zZShtc2dfY3R4LCAmbXNnKTsKQEAgLTEzNjQsOCArMTM2Myw3IEBACiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHBhcnNpbmcgdGFnIDY3IHBhY2tldFxuIik7CiAJa2ZyZWUobXNnKTsKIG91dDoKLQlpZiAobmV0bGlua19wYXlsb2FkKQotCQlrZnJlZShuZXRsaW5rX3BheWxvYWQpOworCWtmcmVlKHBheWxvYWQpOwogCXJldHVybiByYzsKIH0KIC8qKgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDhlYmU5YTUuLjA0NmUwMjcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KQEAgLTQ5LDggKzQ4LDcgQEAKIAkJICIwLCB3aGljaCBpcyBRdWlldCkiKTsKIAogLyoqCi0gKiBNb2R1bGUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIG5ldGxpbmsgbWVzc2FnZSBidWZmZXIKLSAqIGVsZW1lbnRzCisgKiBNb2R1bGUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2UgYnVmZmVyIGVsZW1lbnRzCiAgKi8KIHVuc2lnbmVkIGludCBlY3J5cHRmc19tZXNzYWdlX2J1Zl9sZW4gPSBFQ1JZUFRGU19ERUZBVUxUX01TR19DVFhfRUxFTVM7CiAKQEAgLTYwLDkgKzU4LDkgQEAKIAogLyoqCiAgKiBNb2R1bGUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgbWF4aW11bSBndWFyYW50ZWVkIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQKLSAqIGZvciBhIHJlc3BvbnNlIHRocm91Z2ggbmV0bGluay4gIFRoZSBhY3R1YWwgc2xlZXAgdGltZSB3aWxsIGJlLCBtb3JlIHRoYW4KKyAqIGZvciBhIHJlc3BvbnNlIGZyb20gZWNyeXB0ZnNkLiAgVGhlIGFjdHVhbCBzbGVlcCB0aW1lIHdpbGwgYmUsIG1vcmUgdGhhbgogICogbGlrZWx5LCBhIHNtYWxsIGFtb3VudCBncmVhdGVyIHRoYW4gdGhpcyBzcGVjaWZpZWQgdmFsdWUsIGJ1dCBvbmx5IGxlc3MgaWYKLSAqIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IGFycml2ZXMuCisgKiB0aGUgbWVzc2FnZSBzdWNjZXNzZnVsbHkgYXJyaXZlcy4KICAqLwogc2lnbmVkIGxvbmcgZWNyeXB0ZnNfbWVzc2FnZV93YWl0X3RpbWVvdXQgPSBFQ1JZUFRGU19NQVhfTVNHX0NUWF9UVEwgLyBIWjsKIApAQCAtODMsOCArODEsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhlY3J5cHRmc19udW1iZXJfb2ZfdXNlcnMsICJBbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mICIKIAkJICJjb25jdXJyZW50IHVzZXJzIG9mIGVDcnlwdGZzIik7CiAKLXVuc2lnbmVkIGludCBlY3J5cHRmc190cmFuc3BvcnQgPSBFQ1JZUFRGU19ERUZBVUxUX1RSQU5TUE9SVDsKLQogdm9pZCBfX2VjcnlwdGZzX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CkBAIC03NzksMTAgKzc3NSwxMSBAQAogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZG9fc3lzZnNfdW5yZWdpc3RyYXRpb247CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwlyYyA9IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbHVyZSBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gIgotCQkJCSJpbml0aWFsaXplIHRoZSBlQ3J5cHRmcyBuZXRsaW5rIHNvY2tldFxuIik7CisJCQkJImluaXRpYWxpemUgdGhlIGNvbW11bmljYXRpb25zIGNoYW5uZWwgdG8gIgorCQkJCSJlY3J5cHRmc2RcbiIpOwogCQlnb3RvIG91dF9kZXN0cm95X2t0aHJlYWQ7CiAJfQogCXJjID0gZWNyeXB0ZnNfaW5pdF9jcnlwdG8oKTsKQEAgLTc5Nyw3ICs3OTQsNyBAQAogCiAJZ290byBvdXQ7CiBvdXRfcmVsZWFzZV9tZXNzYWdpbmc6Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogb3V0X2Rlc3Ryb3lfa3RocmVhZDoKIAllY3J5cHRmc19kZXN0cm95X2t0aHJlYWQoKTsKIG91dF9kb19zeXNmc191bnJlZ2lzdHJhdGlvbjoKQEAgLTgxOCw3ICs4MTUsNyBAQAogCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIHdoaWxzdCBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgY3J5cHRvOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfa3RocmVhZCgpOwogCWRvX3N5c2ZzX3VucmVnaXN0cmF0aW9uKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZlY3J5cHRmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKaW5kZXggMWI1YzIwMC4uYzY5ODM5NyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKQEAgLTEzNCwxMiArMTM0LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJICAgICB1OCBtc2dfdHlwZSwgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKK2VjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLCB1OCBtc2dfdHlwZSwKKwkJCSAgICAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlCi0gKiBAdHJhbnNwb3J0OiBUcmFuc3BvcnQgdHlwZQogICogQG1zZ190eXBlOiBNZXNzYWdlIHR5cGUKICAqIEBkYWVtb246IERhZW1vbiBzdHJ1Y3QgZm9yIHJlY2lwaWVudCBvZiBtZXNzYWdlCiAgKgpAQCAtMTUwLDM4ICsxNDksMjUgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1OCBtc2dfdHlwZSwKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1OCBtc2dfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19kYWVtb24gKmRhZW1vbikKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eDsKIAlpbnQgcmM7CiAKLQlzd2l0Y2godHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoTlVMTCwgMCwgTlVMTCwgbXNnX3R5cGUsIDAsCi0JCQkJCSAgIGRhZW1vbi0+cGlkKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTUlTQ0RFVjoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKHRyYW5zcG9ydCwgTlVMTCwgMCwgbXNnX3R5cGUsCi0JCQkJCQkgICZtc2dfY3R4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3QgYXR0ZW1wdGluZyB0byBzZW5kICIKLQkJCSAgICAgICAibWVzc2FnZSB2aWEgcHJvY2ZzOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKiBSYXcgbWVzc2FnZXMgYXJlIGxvZ2ljYWxseSBjb250ZXh0LWZyZWUgKGUuZy4sIG5vCi0JCSAqIHJlcGx5IGlzIGV4cGVjdGVkKSwgc28gd2Ugc2V0IHRoZSBzdGF0ZSBvZiB0aGUKLQkJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKLQkJICogYmUgZnJlZWQgYXMgc29vbiBhcyB0aGUgdHJhbnNwb3J0IHNlbmRzIG91dCB0aGUgbWVzc2FnZS4gKi8KLQkJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKLQkJbXNnX2N0eC0+c3RhdGUgPSBFQ1JZUFRGU19NU0dfQ1RYX1NUQVRFX05PX1JFUExZOwotCQltdXRleF91bmxvY2soJm1zZ19jdHgtPm11eCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoTlVMTCwgMCwgbXNnX3R5cGUsICZtc2dfY3R4KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd2hpbHN0IGF0dGVtcHRpbmcgdG8gc2VuZCAiCisJCSAgICAgICAibWVzc2FnZSB0byBlY3J5cHRmc2Q7IHJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwkJZ290byBvdXQ7CiAJfQorCS8qIFJhdyBtZXNzYWdlcyBhcmUgbG9naWNhbGx5IGNvbnRleHQtZnJlZSAoZS5nLiwgbm8KKwkgKiByZXBseSBpcyBleHBlY3RlZCksIHNvIHdlIHNldCB0aGUgc3RhdGUgb2YgdGhlCisJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKKwkgKiBiZSBmcmVlZCBhcyBzb29uIGFzIHRoZSBtZXNzYWdlIGlzIHNlbnQuICovCisJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKKwltc2dfY3R4LT5zdGF0ZSA9IEVDUllQVEZTX01TR19DVFhfU1RBVEVfTk9fUkVQTFk7CisJbXV0ZXhfdW5sb2NrKCZtc2dfY3R4LT5tdXgpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTIyNyw3ICsyMTMsNiBAQAogCiAvKioKICAqIGVjcnlwdGZzX3Byb2Nlc3NfaGVsbwotICogQHRyYW5zcG9ydDogVGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IChuZXRsaW5rLCBldGMuKQogICogQGV1aWQ6IFRoZSB1c2VyIElEIG93bmVyIG9mIHRoZSBtZXNzYWdlCiAgKiBAdXNlcl9uczogVGhlIG5hbWVzcGFjZSBpbiB3aGljaCBAZXVpZCBhcHBsaWVzCiAgKiBAcGlkOiBUaGUgcHJvY2VzcyBJRCBmb3IgdGhlIHVzZXJzcGFjZSBwcm9ncmFtIHRoYXQgc2VudCB0aGUKQEAgLTIzOSw4ICsyMjQsOCBAQAogICogUmV0dXJucyB6ZXJvIGFmdGVyIGFkZGluZyBhIG5ldyBkYWVtb24gdG8gdGhlIGhhc2ggbGlzdDsKICAqIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwotaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1aWRfdCBldWlkLAotCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCkKK2ludCBlY3J5cHRmc19wcm9jZXNzX2hlbG8odWlkX3QgZXVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAorCQkJICBzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2RhZW1vbiAqbmV3X2RhZW1vbjsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpvbGRfZGFlbW9uOwpAQCAtMjUyLDggKzIzNyw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIHJlcXVlc3QgZnJvbSB1c2VyIFslZF0gIgogCQkgICAgICAgInRvIHJlZ2lzdGVyIGRhZW1vbiBbMHglcF07IHVucmVnaXN0ZXJpbmcgZGFlbW9uICIKIAkJICAgICAgICJbMHglcF1cbiIsIGV1aWQsIHBpZCwgb2xkX2RhZW1vbi0+cGlkKTsKLQkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKHRyYW5zcG9ydCwgRUNSWVBURlNfTVNHX1FVSVQsCi0JCQkJCSAgICAgICBvbGRfZGFlbW9uKTsKKwkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKEVDUllQVEZTX01TR19RVUlULCBvbGRfZGFlbW9uKTsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHNlbmQgUVVJVCAiCiAJCQkgICAgICAgIm1lc3NhZ2UgdG8gZGFlbW9uIFsweCVwXTsgcmMgPSBbJWRdXG4iLApAQCAtNDY3LDggKzQ1MSw2IEBACiAKIC8qKgogICogZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZAotICogQHRyYW5zcG9ydDogVGhlIHRyYW5zcG9ydCBvdmVyIHdoaWNoIHRvIHNlbmQgdGhlIG1lc3NhZ2UgKGkuZS4sCi0gKiAgICAgICAgICAgICBuZXRsaW5rKQogICogQGRhdGE6IFRoZSBkYXRhIHRvIHNlbmQKICAqIEBkYXRhX2xlbjogVGhlIGxlbmd0aCBvZiBkYXRhCiAgKiBAbXNnX2N0eDogVGhlIG1lc3NhZ2UgY29udGV4dCBhbGxvY2F0ZWQgZm9yIHRoZSBzZW5kCkBAIC00NzgsOCArNDYwLDggQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwogc3RhdGljIGludAotZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgICAgIHU4IG1zZ190eXBlLCBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqKm1zZ19jdHgpCitlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwgdTggbXNnX3R5cGUsCisJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpkYWVtb247CiAJaW50IHJjOwpAQCAtNTAzLDIwICs0ODUsOCBAQAogCWVjcnlwdGZzX21zZ19jdHhfZnJlZV90b19hbGxvYygqbXNnX2N0eCk7CiAJbXV0ZXhfdW5sb2NrKCYoKm1zZ19jdHgpLT5tdXgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9saXN0c19tdXgpOwotCXN3aXRjaCAodHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoZGF0YSwgZGF0YV9sZW4sICptc2dfY3R4LCBtc2dfdHlwZSwKLQkJCQkJICAgMCwgZGFlbW9uLT5waWQpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQlyYyA9IGVjcnlwdGZzX3NlbmRfbWlzY2RldihkYXRhLCBkYXRhX2xlbiwgKm1zZ19jdHgsIG1zZ190eXBlLAotCQkJCQkgICAwLCBkYWVtb24pOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9DT05ORUNUT1I6Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfUkVMQVlGUzoKLQlkZWZhdWx0OgotCQlyYyA9IC1FTk9TWVM7Ci0JfQorCXJjID0gZWNyeXB0ZnNfc2VuZF9taXNjZGV2KGRhdGEsIGRhdGFfbGVuLCAqbXNnX2N0eCwgbXNnX3R5cGUsIDAsCisJCQkJICAgZGFlbW9uKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gc2VuZCBtZXNzYWdlIHRvICIKIAkJICAgICAgICJ1c2Vyc3BhY2UgZGFlbW9uOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CkBAIC01MjYsOCArNDk2LDYgQEAKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX21lc3NhZ2UKLSAqIEB0cmFuc3BvcnQ6IFRoZSB0cmFuc3BvcnQgb3ZlciB3aGljaCB0byBzZW5kIHRoZSBtZXNzYWdlIChpLmUuLAotICogICAgICAgICAgICAgbmV0bGluaykKICAqIEBkYXRhOiBUaGUgZGF0YSB0byBzZW5kCiAgKiBAZGF0YV9sZW46IFRoZSBsZW5ndGggb2YgZGF0YQogICogQG1zZ19jdHg6IFRoZSBtZXNzYWdlIGNvbnRleHQgYWxsb2NhdGVkIGZvciB0aGUgc2VuZApAQCAtNTM2LDE0ICs1MDQsMTQgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLWludCBlY3J5cHRmc19zZW5kX21lc3NhZ2UodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAoraW50IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCiAJCQkgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlpbnQgcmM7CiAKIAltdXRleF9sb2NrKCZlY3J5cHRmc19kYWVtb25faGFzaF9tdXgpOwotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh0cmFuc3BvcnQsIGRhdGEsIGRhdGFfbGVuLAotCQkJCQkgIEVDUllQVEZTX01TR19SRVFVRVNULCBtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoZGF0YSwgZGF0YV9sZW4sIEVDUllQVEZTX01TR19SRVFVRVNULAorCQkJCQkgIG1zZ19jdHgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC01ODYsNyArNTU0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBlY3J5cHRmc19pbml0X21lc3NhZ2luZyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0KQoraW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaW50IGk7CiAJaW50IHJjID0gMDsKQEAgLTYzOSwyNyArNjA3LDE0IEBACiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9hcnJbaV0ubXV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlY3J5cHRmc19tc2dfY3R4X2xpc3RzX211eCk7Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVY6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9lY3J5cHRmc19taXNjZGV2KCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKLQl9CisJcmMgPSBlY3J5cHRmc19pbml0X2VjcnlwdGZzX21pc2NkZXYoKTsKKwlpZiAocmMpCisJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi12b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpCit2b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaWYgKGVjcnlwdGZzX21zZ19jdHhfYXJyKSB7CiAJCWludCBpOwpAQCAtNjk4LDE3ICs2NTMsNiBAQAogCQlrZnJlZShlY3J5cHRmc19kYWVtb25faGFzaCk7CiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAl9Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCWVjcnlwdGZzX3JlbGVhc2VfbmV0bGluaygpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQllY3J5cHRmc19kZXN0cm95X2VjcnlwdGZzX21pc2NkZXYoKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfQ09OTkVDVE9SOgotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX1JFTEFZRlM6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWVjcnlwdGZzX2Rlc3Ryb3lfZWNyeXB0ZnNfbWlzY2RldigpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCAyNDVjMmRjLi4wNGQ3YjNmIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC0yNjUsMjIgKzI2NSwzNCBAQAogfQogCiAvKioKLSAqIGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2JlZ2luCiAgKiBAZmlsZTogVGhlIGVDcnlwdGZzIGZpbGUKLSAqIEBwYWdlOiBUaGUgZUNyeXB0ZnMgcGFnZQotICogQGZyb206IFRoZSBzdGFydCBieXRlIGZyb20gd2hpY2ggd2Ugd2lsbCB3cml0ZQotICogQHRvOiBUaGUgZW5kIGJ5dGUgdG8gd2hpY2ggd2Ugd2lsbCB3cml0ZQorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0byBzdGFydCB3cml0aW5nCisgKiBAbGVuOiBMZW5ndGggb2YgdGhlIHdyaXRlCisgKiBAZmxhZ3M6IFZhcmlvdXMgZmxhZ3MKKyAqIEBwYWdlcDogUG9pbnRlciB0byByZXR1cm4gdGhlIHBhZ2UKKyAqIEBmc2RhdGE6IFBvaW50ZXIgdG8gcmV0dXJuIGZzIGRhdGEgKHVudXNlZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgemVybyBhbnkgaG9sZSB3ZSBjcmVhdGUKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsCisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogeworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlsb2ZmX3QgcHJldl9wYWdlX2VuZF9zaXplOwogCWludCByYyA9IDA7CiAKKwlwYWdlID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJKnBhZ2VwID0gcGFnZTsKKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJCSZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKApAQCAtMjg5LDggKzMwMSw3IEBACiAJCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEKQogCQkgICAgfHwgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfTkVXX0ZJTEUpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXJfcGFnZV9zZWdtZW50KAotCQkJCXBhZ2UsIHBhZ2UtPmluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCi0JCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJcGFnZSwgaW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwgbWFwcGluZy0+aG9zdCk7CiAJCQlpZiAocmMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXBpbmcgdG8gcmVhZCAiCiAJCQkJICAgICAgICJsb3dlciBwYWdlIHNlZ21lbnQ7IHJjID0gWyVkXVxuIiwKQEAgLTMxNiw4ICszMjcsOCBAQAogCQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyX3BhZ2Vfc2VnbWVudCgKLQkJCQkJcGFnZSwgcGFnZS0+aW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwKLQkJCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJCXBhZ2UsIGluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCisJCQkJCW1hcHBpbmctPmhvc3QpOwogCQkJCWlmIChyYykgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZWFkaW5nICIKIAkJCQkJICAgICAgICJwYWdlOyByYyA9IFslZF1cbiIsCkBAIC0zMzksMTAgKzM1MCwxMCBAQAogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9CiAJfQotCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOworCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwogCS8qIElmIGNyZWF0aW5nIGEgcGFnZSBvciBtb3JlIG9mIGhvbGVzLCB6ZXJvIHRoZW0gb3V0IHZpYSB0cnVuY2F0ZS4KIAkgKiBOb3RlLCB0aGlzIHdpbGwgaW5jcmVhc2UgaV9zaXplLiAqLwotCWlmIChwYWdlLT5pbmRleCAhPSAwKSB7CisJaWYgKGluZGV4ICE9IDApIHsKIAkJaWYgKHByZXZfcGFnZV9lbmRfc2l6ZSA+IGlfc2l6ZV9yZWFkKHBhZ2UtPm1hcHBpbmctPmhvc3QpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3RydW5jYXRlKGZpbGUtPmZfcGF0aC5kZW50cnksCiAJCQkJCSAgICAgICBwcmV2X3BhZ2VfZW5kX3NpemUpOwpAQCAtMzU3LDggKzM2OCw4IEBACiAJfQogCS8qIFdyaXRpbmcgdG8gYSBuZXcgcGFnZSwgYW5kIGNyZWF0aW5nIGEgc21hbGwgaG9sZSBmcm9tIHN0YXJ0CiAJICogb2YgcGFnZT8gIFplcm8gaXQgb3V0LiAqLwotCWlmICgoaV9zaXplX3JlYWQocGFnZS0+bWFwcGluZy0+aG9zdCkgPT0gcHJldl9wYWdlX2VuZF9zaXplKQotCSAgICAmJiAoZnJvbSAhPSAwKSkKKwlpZiAoKGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpID09IHByZXZfcGFnZV9lbmRfc2l6ZSkKKwkgICAgJiYgKHBvcyAhPSAwKSkKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNDQ1LDIxICs0NTYsMjggQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19jb21taXRfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2VuZAogICogQGZpbGU6IFRoZSBlQ3J5cHRmcyBmaWxlIG9iamVjdAorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIHBvc2l0aW9uCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhICh1bnVzZWQpCisgKiBAY29waWVkOiBUaGUgYW1vdW50IG9mIGRhdGEgY29waWVkCiAgKiBAcGFnZTogVGhlIGVDcnlwdGZzIHBhZ2UKLSAqIEBmcm9tOiBJZ25vcmVkICh3ZSByb3RhdGUgdGhlIHBhZ2UgSVYgb24gZWFjaCB3cml0ZSkKLSAqIEB0bzogSWdub3JlZAorICogQGZzZGF0YTogVGhlIGZzZGF0YSAodW51c2VkKQogICoKICAqIFRoaXMgaXMgd2hlcmUgd2UgZW5jcnlwdCB0aGUgZGF0YSBhbmQgcGFzcyB0aGUgZW5jcnlwdGVkIGRhdGEgdG8KICAqIHRoZSBsb3dlciBmaWxlc3lzdGVtLiAgSW4gT3BlblBHUC1jb21wYXRpYmxlIG1vZGUsIHdlIG9wZXJhdGUgb24KICAqIGVudGlyZSB1bmRlcmx5aW5nIHBhY2tldHMuCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IGVjcnlwdGZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQogewotCWxvZmZfdCBwb3M7Ci0Jc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJcGdvZmZfdCBpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgdG8gPSBmcm9tICsgY29waWVkOworCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJaW50IHJjOwpAQCAtNDcxLDI1ICs0ODksMjIgQEAKIAl9IGVsc2UKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJOb3QgYSBuZXcgZmlsZVxuIik7CiAJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJDYWxsaW5nIGZpbGxfemVyb3NfdG9fZW5kX29mX3BhZ2UiCi0JCQkiKHBhZ2Ugdy8gaW5kZXggPSBbMHglLjE2eF0sIHRvID0gWyVkXSlcbiIsIHBhZ2UtPmluZGV4LAotCQkJdG8pOworCQkJIihwYWdlIHcvIGluZGV4ID0gWzB4JS4xNnhdLCB0byA9IFslZF0pXG4iLCBpbmRleCwgdG8pOwogCS8qIEZpbGxzIGluIHplcm9zIGlmICd0bycgZ29lcyBiZXlvbmQgaW5vZGUgc2l6ZSAqLwogCXJjID0gZmlsbF96ZXJvc190b19lbmRfb2ZfcGFnZShwYWdlLCB0byk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBhdHRlbXB0aW5nIHRvIGZpbGwgIgotCQkJCSJ6ZXJvcyBpbiBwYWdlIHdpdGggaW5kZXggPSBbMHglLjE2eF1cbiIsCi0JCQkJcGFnZS0+aW5kZXgpOworCQkJInplcm9zIGluIHBhZ2Ugd2l0aCBpbmRleCA9IFsweCUuMTZ4XVxuIiwgaW5kZXgpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc19lbmNyeXB0X3BhZ2UocGFnZSk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBlbmNyeXB0aW5nIHBhZ2UgKHVwcGVyICIKLQkJCQkiaW5kZXggWzB4JS4xNnhdKVxuIiwgcGFnZS0+aW5kZXgpOworCQkJCSJpbmRleCBbMHglLjE2eF0pXG4iLCBpbmRleCk7CiAJCWdvdG8gb3V0OwogCX0KLQlwb3MgPSAoKChsb2ZmX3QpcGFnZS0+aW5kZXgpIDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgdG87Ci0JaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgewotCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyk7CisJaWYgKHBvcyArIGNvcGllZCA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgeworCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyArIGNvcGllZCk7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiRXhwYW5kZWQgZmlsZSBzaXplIHRvICIKIAkJCQkiWzB4JS4xNnhdXG4iLCBpX3NpemVfcmVhZChlY3J5cHRmc19pbm9kZSkpOwogCX0KQEAgLTQ5Nyw3ICs1MTIsMTEgQEAKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyBpbm9kZSBzaXplIHRvIG1ldGFkYXRhOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7CisJZWxzZQorCQlyYyA9IGNvcGllZDsKIG91dDoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MTgsNyArNTM3LDcgQEAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wcyA9IHsKIAkud3JpdGVwYWdlID0gZWNyeXB0ZnNfd3JpdGVwYWdlLAogCS5yZWFkcGFnZSA9IGVjcnlwdGZzX3JlYWRwYWdlLAotCS5wcmVwYXJlX3dyaXRlID0gZWNyeXB0ZnNfcHJlcGFyZV93cml0ZSwKLQkuY29tbWl0X3dyaXRlID0gZWNyeXB0ZnNfY29tbWl0X3dyaXRlLAorCS53cml0ZV9iZWdpbiA9IGVjcnlwdGZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQgPSBlY3J5cHRmc193cml0ZV9lbmQsCiAJLmJtYXAgPSBlY3J5cHRmc19ibWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL25ldGxpbmsuYyBiL2ZzL2VjcnlwdGZzL25ldGxpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhYmFkNi4uMDAwMDAwMAotLS0gYS9mcy9lY3J5cHRmcy9uZXRsaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqCi0gKiBlQ3J5cHRmczogTGludXggZmlsZXN5c3RlbSBlbmNyeXB0aW9uIGxheWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLgotICogICBBdXRob3Iocyk6IE1pY2hhZWwgQS4gSGFsY3JvdyA8bWhhbGNyb3dAdXMuaWJtLmNvbT4KLSAqCQlUeWxlciBIaWNrcyA8dHloaWNrc0BvdS5lZHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0gKiAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgotCi1zdGF0aWMgc3RydWN0IHNvY2sgKmVjcnlwdGZzX25sX3NvY2s7Ci0KLS8qKgotICogZWNyeXB0ZnNfc2VuZF9uZXRsaW5rCi0gKiBAZGF0YTogVGhlIGRhdGEgdG8gaW5jbHVkZSBhcyB0aGUgcGF5bG9hZAotICogQGRhdGFfbGVuOiBUaGUgYnl0ZSBjb3VudCBvZiB0aGUgZGF0YQotICogQG1zZ19jdHg6IFRoZSBuZXRsaW5rIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIHRoZQotICogICAgICAgICAgcmVzcG9uc2UgbWVzc2FnZQotICogQG1zZ190eXBlOiBUaGUgdHlwZSBvZiBuZXRsaW5rIG1lc3NhZ2UgdG8gc2VuZAotICogQG1zZ19mbGFnczogVGhlIGZsYWdzIHRvIGluY2x1ZGUgaW4gdGhlIG5ldGxpbmsgaGVhZGVyCi0gKiBAZGFlbW9uX3BpZDogVGhlIHByb2Nlc3MgaWQgb2YgdGhlIGRhZW1vbiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCi0gKgotICogU2VuZHMgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBkYWVtb24gcGlkIGFuZCB1c2VzIHRoZSBuZXRsaW5rCi0gKiBjb250ZXh0IGVsZW1lbnQgdG8gc3RvcmUgdGhlIGRhdGEgbmVlZGVkIGZvciB2YWxpZGF0aW9uIHVwb24KLSAqIHJlY2VpdmluZyB0aGUgcmVzcG9uc2UuICBUaGUgZGF0YSBhbmQgdGhlIG5ldGxpbmsgY29udGV4dCBjYW4gYmUKLSAqIG51bGwgaWYganVzdCBzZW5kaW5nIGEgbmV0bGluayBoZWFkZXIgaXMgc3VmZmljaWVudC4gIFJldHVybnMgemVybwotICogdXBvbiBzZW5kaW5nIHRoZSBtZXNzYWdlOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfc2VuZF9uZXRsaW5rKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCSAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHgsIHU4IG1zZ190eXBlLAotCQkJICB1MTYgbXNnX2ZsYWdzLCBzdHJ1Y3QgcGlkICpkYWVtb25fcGlkKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG5sbXNnaGRyICpubGg7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZzsKLQlzaXplX3QgcGF5bG9hZF9sZW47Ci0JaW50IHJjOwotCi0JcGF5bG9hZF9sZW4gPSAoKGRhdGEgJiYgZGF0YV9sZW4pID8gKHNpemVvZigqbXNnKSArIGRhdGFfbGVuKSA6IDApOwotCXNrYiA9IGFsbG9jX3NrYihOTE1TR19TUEFDRShwYXlsb2FkX2xlbiksIEdGUF9LRVJORUwpOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNvY2tldCBidWZmZXJcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JbmxoID0gTkxNU0dfUFVUKHNrYiwgcGlkX25yKGRhZW1vbl9waWQpLCBtc2dfY3R4ID8gbXNnX2N0eC0+Y291bnRlciA6IDAsCi0JCQltc2dfdHlwZSwgcGF5bG9hZF9sZW4pOwotCW5saC0+bmxtc2dfZmxhZ3MgPSBtc2dfZmxhZ3M7Ci0JaWYgKG1zZ19jdHggJiYgcGF5bG9hZF9sZW4pIHsKLQkJbXNnID0gKHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICopTkxNU0dfREFUQShubGgpOwotCQltc2ctPmluZGV4ID0gbXNnX2N0eC0+aW5kZXg7Ci0JCW1zZy0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKLQkJbWVtY3B5KG1zZy0+ZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwotCX0KLQlyYyA9IG5ldGxpbmtfdW5pY2FzdChlY3J5cHRmc19ubF9zb2NrLCBza2IsIHBpZF9ucihkYWVtb25fcGlkKSwgMCk7Ci0JaWYgKHJjIDwgMCkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc2VuZCBlQ3J5cHRmcyBuZXRsaW5rICIKLQkJCQkibWVzc2FnZTsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IDA7Ci0JZ290byBvdXQ7Ci1ubG1zZ19mYWlsdXJlOgotCXJjID0gLUVNU0dTSVpFOwotCWtmcmVlX3NrYihza2IpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX3JlcG9uc2UKLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBvZiBzdGF0ZQotICogICAgICAgUkVTUE9OU0UKLSAqCi0gKiBQcm9jZXNzZXMgYSByZXNwb25zZSBtZXNzYWdlIGFmdGVyIHNlbmRpbmcgYSBvcGVyYXRpb24gcmVxdWVzdCB0bwotICogdXNlcnNwYWNlLiAgQXR0ZW1wdHMgdG8gYXNzaWduIHRoZSBtc2cgdG8gYSBuZXRsaW5rIGNvbnRleHQgZWxlbWVudAotICogYXQgdGhlIGluZGV4IHNwZWNpZmllZCBpbiB0aGUgbXNnLiAgVGhlIHNrX2J1ZmYgYW5kIG5sbXNnaGRyIG11c3QKLSAqIGJlIHZhbGlkYXRlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gUmV0dXJucyB6ZXJvIHVwb24gZGVsaXZlcnkgdG8KLSAqIGRlc2lyZWQgY29udGV4dCBlbGVtZW50OyBub24temVybyB1cG9uIGRlbGl2ZXJ5IGZhaWx1cmUgb3IgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJvY2Vzc19ubF9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JaWYgKHNrYi0+bGVuIC0gTkxNU0dfSERSTEVOIC0gc2l6ZW9mKCptc2cpICE9IG1zZy0+ZGF0YV9sZW4pIHsKLQkJcmMgPSAtRUlOVkFMOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBuZXRsaW5rIG1lc3NhZ2Ugd2l0aCAiCi0JCQkJImluY29ycmVjdGx5IHNwZWNpZmllZCBkYXRhIGxlbmd0aFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19yZXNwb25zZShtc2csIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLAotCQkJCSAgICAgICBwaWQsIG5saC0+bmxtc2dfc2VxKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJFcnJvciBwcm9jZXNzaW5nIHJlc3BvbnNlIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX2hlbG8KLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5sbXNnaGRyIGluIEhFTE8gc3RhdGUKLSAqCi0gKiBHZXRzIHVpZCBhbmQgcGlkIG9mIHRoZSBza2IgYW5kIGFkZHMgdGhlIHZhbHVlcyB0byB0aGUgZGFlbW9uIGlkCi0gKiBoYXNoLiBSZXR1cm5zIHplcm8gYWZ0ZXIgYWRkaW5nIGEgbmV3IGRhZW1vbiBpZCB0byB0aGUgaGFzaCBsaXN0OwotICogbm9uLXplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwaWQgKnBpZDsKLQlpbnQgcmM7Ci0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19oZWxvKEVDUllQVEZTX1RSQU5TUE9SVF9ORVRMSU5LLAotCQkJCSAgIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLCBwaWQpOwotCXB1dF9waWQocGlkKTsKLQlpZiAocmMpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHByb2Nlc3NpbmcgSEVMTzsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGVjcnlwdGZzX3Byb2Nlc3NfbmxfcXVpdAotICogQHNrYjogVGhlIHNvY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgbmxtc2doZHIgaW4gUVVJVCBzdGF0ZQotICoKLSAqIEdldHMgdWlkIGFuZCBwaWQgb2YgdGhlIHNrYiBhbmQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBkYWVtb24KLSAqIGlkLCBpZiBpdCBpcyB0aGUgcmVnaXN0ZXJlZCB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlCi0gKiBkZWxldGlvbi4gUmV0dXJucyB6ZXJvIGFmdGVyIGRlbGV0aW5nIHRoZSBkZXNpcmVkIGRhZW1vbiBpZDsKLSAqIG5vbi16ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBlY3J5cHRmc19wcm9jZXNzX25sX3F1aXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JcGlkID0gZmluZF9nZXRfcGlkKE5FVExJTktfQ1JFRFMoc2tiKS0+cGlkKTsKLQlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfcXVpdChORVRMSU5LX0NSRURTKHNrYiktPnVpZCwgTlVMTCwgcGlkKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiRXJyb3IgcHJvY2Vzc2luZyBRVUlUIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWNlaXZlX25sX21lc3NhZ2UKLSAqCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgYnkgbmV0bGluayBzeXN0ZW0gd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4KLSAqIElmIHRoZSBtZXNzYWdlIGxvb2tzIHRvIGJlIHZhbGlkLCB0aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24KLSAqIGl0IHRvIGl0cyBkZXNpcmVkIG5ldGxpbmsgY29udGV4dCBlbGVtZW50IGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzCi0gKiB0aGF0IGlzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuCi0gKi8KLXN0YXRpYyB2b2lkIGVjcnlwdGZzX3JlY2VpdmVfbmxfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCi0JbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0JaWYgKCFOTE1TR19PSyhubGgsIHNrYi0+bGVuKSkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBjb3JydXB0IG5ldGxpbmsgIgotCQkJCSJtZXNzYWdlXG4iKTsKLQkJZ290byBmcmVlOwotCX0KLQlzd2l0Y2ggKG5saC0+bmxtc2dfdHlwZSkgewotCQljYXNlIEVDUllQVEZTX01TR19SRVNQT05TRToKLQkJCWlmIChlY3J5cHRmc19wcm9jZXNzX25sX3Jlc3BvbnNlKHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJkZWxpdmVyIG5ldGxpbmsgcmVzcG9uc2UgdG8gIgotCQkJCQkJInJlcXVlc3Rpbmcgb3BlcmF0aW9uXG4iKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEVDUllQVEZTX01TR19IRUxPOgotCQkJaWYgKGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhza2IpKSB7Ci0JCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fV0FSTklORywgIkZhaWxlZCB0byAiCi0JCQkJCQkiZnVsZmlsbCBIRUxPIHJlcXVlc3RcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgRUNSWVBURlNfTVNHX1FVSVQ6Ci0JCQlpZiAoZWNyeXB0ZnNfcHJvY2Vzc19ubF9xdWl0KHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJmdWxmaWxsIFFVSVQgcmVxdWVzdFxuIik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJEcm9wcGluZyBuZXRsaW5rICIKLQkJCQkJIm1lc3NhZ2Ugb2YgdW5yZWNvZ25pemVkIHR5cGUgWyVkXVxuIiwKLQkJCQkJbmxoLT5ubG1zZ190eXBlKTsKLQkJCWJyZWFrOwotCX0KLWZyZWU6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci19Ci0KLS8qKgotICogZWNyeXB0ZnNfaW5pdF9uZXRsaW5rCi0gKgotICogSW5pdGlhbGl6ZXMgdGhlIGRhZW1vbiBpZCBoYXNoIGxpc3QsIG5ldGxpbmsgY29udGV4dCBhcnJheSwgYW5kCi0gKiBuZWNlc3NhcnkgbG9ja3MuICBSZXR1cm5zIHplcm8gdXBvbiBzdWNjZXNzOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKHZvaWQpCi17Ci0JaW50IHJjOwotCi0JZWNyeXB0ZnNfbmxfc29jayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgmaW5pdF9uZXQsIE5FVExJTktfRUNSWVBURlMsIDAsCi0JCQkJCQkgZWNyeXB0ZnNfcmVjZWl2ZV9ubF9tZXNzYWdlLAotCQkJCQkJIE5VTEwsIFRISVNfTU9EVUxFKTsKLQlpZiAoIWVjcnlwdGZzX25sX3NvY2spIHsKLQkJcmMgPSAtRUlPOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gY3JlYXRlIG5ldGxpbmsgc29ja2V0XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVjcnlwdGZzX25sX3NvY2stPnNrX3NuZHRpbWVvID0gRUNSWVBURlNfREVGQVVMVF9TRU5EX1RJTUVPVVQ7Ci0JcmMgPSAwOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsKLSAqCi0gKiBGcmVlcyBhbGwgbWVtb3J5IHVzZWQgYnkgdGhlIG5ldGxpbmsgY29udGV4dCBhcnJheSBhbmQgcmVsZWFzZXMgdGhlCi0gKiBuZXRsaW5rIHNvY2tldC4KLSAqLwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsodm9pZCkKLXsKLQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVjcnlwdGZzX25sX3NvY2spOwotCWVjcnlwdGZzX25sX3NvY2sgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCA3Y2MwZWI3Li45OTM2OGJkIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtOTI3LDE0ICs5MjcsMTEgQEAKIAkvKgogCSAqIER1cmluZyB0aGUgdGltZSB3ZSBzcGVudCBpbiB0aGUgbG9vcCBhYm92ZSwgc29tZSBvdGhlciBldmVudHMKIAkgKiBtaWdodCBoYXZlIGJlZW4gcXVldWVkIGJ5IHRoZSBwb2xsIGNhbGxiYWNrLiBXZSByZS1pbnNlcnQgdGhlbQotCSAqIGhlcmUgKGluIGNhc2UgdGhleSBhcmUgbm90IGFscmVhZHkgcXVldWVkLCBvciB0aGV5J3JlIG9uZS1zaG90KS4KKwkgKiBpbnNpZGUgdGhlIG1haW4gcmVhZHktbGlzdCBoZXJlLgogCSAqLwogCWZvciAobmVwaSA9IGVwLT5vdmZsaXN0OyAoZXBpID0gbmVwaSkgIT0gTlVMTDsKLQkgICAgIG5lcGkgPSBlcGktPm5leHQsIGVwaS0+bmV4dCA9IEVQX1VOQUNUSVZFX1BUUikgewotCQlpZiAoIWVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSAmJgotCQkgICAgKGVwaS0+ZXZlbnQuZXZlbnRzICYgfkVQX1BSSVZBVEVfQklUUykpCi0JCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7Ci0JfQorCSAgICAgbmVwaSA9IGVwaS0+bmV4dCwgZXBpLT5uZXh0ID0gRVBfVU5BQ1RJVkVfUFRSKQorCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIHNldCBiYWNrIGVwLT5vdmZsaXN0IHRvIEVQX1VOQUNUSVZFX1BUUiwgc28gdGhhdCBhZnRlcgogCSAqIHJlbGVhc2luZyB0aGUgbG9jaywgZXZlbnRzIHdpbGwgYmUgcXVldWVkIGluIHRoZSBub3JtYWwgd2F5IGluc2lkZQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGNlY2VlNTAuLjRlODM0ZjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTUwLDE1ICs1MCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2NuX3Byb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogI2lmZGVmIF9fYWxwaGFfXwogLyogZm9yIC9zYmluL2xvYWRlciBoYW5kbGluZyBpbiBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CkBAIC0zOTEsNyArMzg4LDcgQEAKIAkJCWlmICghcCkKIAkJCQlicmVhazsKIAkJCWFyZ3YrKzsKLQkJCWlmKCsraSA+IG1heCkKKwkJCWlmIChpKysgPj0gbWF4KQogCQkJCXJldHVybiAtRTJCSUc7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJfQpAQCAtODI1LDggKzgyMiw2IEBACiAJCQlzY2hlZHVsZSgpOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KHRhc2tfY2hpbGRfcmVhcGVyKHRzaykgPT0gbGVhZGVyKSkKLQkJCXRhc2tfYWN0aXZlX3BpZF9ucyh0c2spLT5jaGlsZF9yZWFwZXIgPSB0c2s7CiAJCS8qCiAJCSAqIFRoZSBvbmx5IHJlY29yZCB3ZSBoYXZlIG9mIHRoZSByZWFsLXRpbWUgYWdlIG9mIGEKIAkJICogcHJvY2VzcywgcmVnYXJkbGVzcyBvZiBleGVjcyBpdCdzIGRvbmUsIGlzIHN0YXJ0X3RpbWUuCkBAIC0xMTg5LDcgKzExODQsNyBAQAogCQkJcmV0dXJuIHJldHZhbDsKIAogCQkvKiBSZW1lbWJlciBpZiB0aGUgYXBwbGljYXRpb24gaXMgVEFTTy4gICovCi0JCWJwcm0tPnNoX2JhbmcgPSBlaC0+YWguZW50cnkgPCAweDEwMDAwMDAwMFVMOworCQlicHJtLT50YXNvID0gZWgtPmFoLmVudHJ5IDwgMHgxMDAwMDAwMDBVTDsKIAogCQlicHJtLT5maWxlID0gZmlsZTsKIAkJYnBybS0+bG9hZGVyID0gbG9hZGVyOwpAQCAtMTI0Nyw4ICsxMjQyLDggQEAKIAkJcmVhZF91bmxvY2soJmJpbmZtdF9sb2NrKTsKIAkJaWYgKHJldHZhbCAhPSAtRU5PRVhFQyB8fCBicHJtLT5tbSA9PSBOVUxMKSB7CiAJCQlicmVhazsKLSNpZmRlZiBDT05GSUdfS01PRAotCQl9ZWxzZXsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCQl9IGVsc2UgewogI2RlZmluZSBwcmludGFibGUoYykgKCgoYyk9PSdcdCcpIHx8ICgoYyk9PSdcbicpIHx8ICgweDIwPD0oYykgJiYgKGMpPD0weDdlKSkKIAkJCWlmIChwcmludGFibGUoYnBybS0+YnVmWzBdKSAmJgogCQkJICAgIHByaW50YWJsZShicHJtLT5idWZbMV0pICYmCkBAIC0xMzkxLDcgKzEzODYsNyBAQAogICogbmFtZSBpbnRvIGNvcmVuYW1lLCB3aGljaCBtdXN0IGhhdmUgc3BhY2UgZm9yIGF0IGxlYXN0CiAgKiBDT1JFTkFNRV9NQVhfU0laRSBieXRlcyBwbHVzIG9uZSBieXRlIGZvciB0aGUgemVybyB0ZXJtaW5hdG9yLgogICovCi1zdGF0aWMgaW50IGZvcm1hdF9jb3JlbmFtZShjaGFyICpjb3JlbmFtZSwgaW50IG5yX3RocmVhZHMsIGxvbmcgc2lnbnIpCitzdGF0aWMgaW50IGZvcm1hdF9jb3JlbmFtZShjaGFyICpjb3JlbmFtZSwgbG9uZyBzaWducikKIHsKIAljb25zdCBjaGFyICpwYXRfcHRyID0gY29yZV9wYXR0ZXJuOwogCWludCBpc3BpcGUgPSAoKnBhdF9wdHIgPT0gJ3wnKTsKQEAgLTE0OTgsOCArMTQ5Myw3IEBACiAJICogSWYgY29yZV9wYXR0ZXJuIGRvZXMgbm90IGluY2x1ZGUgYSAlcCAoYXMgaXMgdGhlIGRlZmF1bHQpCiAJICogYW5kIGNvcmVfdXNlc19waWQgaXMgc2V0LCB0aGVuIC4lcGlkIHdpbGwgYmUgYXBwZW5kZWQgdG8KIAkgKiB0aGUgZmlsZW5hbWUuIERvIG5vdCBkbyB0aGlzIGZvciBwaXBlZCBjb21tYW5kcy4gKi8KLQlpZiAoIWlzcGlwZSAmJiAhcGlkX2luX3BhdHRlcm4KLQkgICAgJiYgKGNvcmVfdXNlc19waWQgfHwgbnJfdGhyZWFkcykpIHsKKwlpZiAoIWlzcGlwZSAmJiAhcGlkX2luX3BhdHRlcm4gJiYgY29yZV91c2VzX3BpZCkgewogCQlyYyA9IHNucHJpbnRmKG91dF9wdHIsIG91dF9lbmQgLSBvdXRfcHRyLAogCQkJICAgICAgIi4lZCIsIHRhc2tfdGdpZF92bnIoY3VycmVudCkpOwogCQlpZiAocmMgPiBvdXRfZW5kIC0gb3V0X3B0cikKQEAgLTE3NjIsNyArMTc1Niw3IEBACiAJICogdXNlcyBsb2NrX2tlcm5lbCgpCiAJICovCiAgCWxvY2tfa2VybmVsKCk7Ci0JaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCByZXR2YWwsIHNpZ25yKTsKKwlpc3BpcGUgPSBmb3JtYXRfY29yZW5hbWUoY29yZW5hbWUsIHNpZ25yKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJLyoKIAkgKiBEb24ndCBib3RoZXIgdG8gY2hlY2sgdGhlIFJMSU1JVF9DT1JFIHZhbHVlIGlmIGNvcmVfcGF0dGVybiBwb2ludHMKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvS2NvbmZpZyBiL2ZzL2V4dDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE2NzgwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXh0Mi9LY29uZmlnCkBAIC0wLDAgKzEsNTUgQEAKK2NvbmZpZyBFWFQyX0ZTCisJdHJpc3RhdGUgIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IgorCWhlbHAKKwkgIEV4dDIgaXMgYSBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbSBmb3IgaGFyZCBkaXNrcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDIuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBFWFQyX0ZTX1hBVFRSCisJYm9vbCAiRXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUMl9GUworCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBFWFQyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUMl9GU19TRUNVUklUWQorCWJvb2wgIkV4dDIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEVYVDJfRlNfWElQCisJYm9vbCAiRXh0MiBleGVjdXRlIGluIHBsYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBFWFQyX0ZTICYmIE1NVQorCWhlbHAKKwkgIEV4ZWN1dGUgaW4gcGxhY2UgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLiBJZiB5b3UKKwkgIGVuYWJsZSB0aGlzIG9wdGlvbiwgeW91IGNhbiBzZWxlY3QgdG8gbW91bnQgYmxvY2sgZGV2aWNlcyB3aGljaCBhcmUKKwkgIGNhcGFibGUgb2YgdGhpcyBmZWF0dXJlIHdpdGhvdXQgdXNpbmcgdGhlIHBhZ2UgY2FjaGUuCisKKwkgIElmIHlvdSBkbyBub3QgdXNlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLAorCSAgb3IgaWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYmFsbG9jLmMgYi9mcy9leHQyL2JhbGxvYy5jCmluZGV4IDEwYmIwMmMuLjZkYWM3YmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYmFsbG9jLmMKKysrIGIvZnMvZXh0Mi9iYWxsb2MuYwpAQCAtMTI5NSw2ICsxMjk1LDcgQEAKIAkgKiB0dXJuIG9mZiByZXNlcnZhdGlvbiBmb3IgdGhpcyBhbGxvY2F0aW9uCiAJICovCiAJaWYgKG15X3JzdiAmJiAoZnJlZV9ibG9ja3MgPCB3aW5kb3dzeikKKwkJJiYgKGZyZWVfYmxvY2tzID4gMCkKIAkJJiYgKHJzdl9pc19lbXB0eSgmbXlfcnN2LT5yc3Zfd2luZG93KSkpCiAJCW15X3JzdiA9IE5VTEw7CiAKQEAgLTEzMzIsNyArMTMzMyw3IEBACiAJCSAqIGZyZWUgYmxvY2tzIGlzIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSByZXNlcnZhdGlvbgogCQkgKiB3aW5kb3cgc2l6ZS4KIAkJICovCi0JCWlmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpCisJCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDw9ICh3aW5kb3dzei8yKSkpCiAJCQljb250aW51ZTsKIAogCQlicmVsc2UoYml0bWFwX2JoKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jCmluZGV4IGE3OGM2YjQuLjExYTQ5Y2UgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZGlyLmMKKysrIGIvZnMvZXh0Mi9kaXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgZXh0Ml9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIHZvaWQgZXh0Ml9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcXVpZXQpCiB7CiAJc3RydWN0IGlub2RlICpkaXIgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQAogCS8qIFRvbyBiYWQsIHdlIGhhZCBhbiBlcnJvciAqLwogCiBFYmFkc2l6ZToKLQlleHQyX2Vycm9yKHNiLCAiZXh0Ml9jaGVja19wYWdlIiwKLQkJInNpemUgb2YgZGlyZWN0b3J5ICMlbHUgaXMgbm90IGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSIsCi0JCWRpci0+aV9pbm8KLQkpOworCWlmICghcXVpZXQpCisJCWV4dDJfZXJyb3Ioc2IsIF9fZnVuY19fLAorCQkJInNpemUgb2YgZGlyZWN0b3J5ICMlbHUgaXMgbm90IGEgbXVsdGlwbGUgIgorCQkJIm9mIGNodW5rIHNpemUiLCBkaXItPmlfaW5vKTsKIAlnb3RvIGZhaWw7CiBFc2hvcnQ6CiAJZXJyb3IgPSAicmVjX2xlbiBpcyBzbWFsbGVyIHRoYW4gbWluaW1hbCI7CkBAIC0xNjYsMzIgKzE2NiwzNiBAQAogRWludW1iZXI6CiAJZXJyb3IgPSAiaW5vZGUgb3V0IG9mIGJvdW5kcyI7CiBiYWRfZW50cnk6Ci0JZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX3BhZ2UiLCAiYmFkIGVudHJ5IGluIGRpcmVjdG9yeSAjJWx1OiAlcyAtICIKLQkJIm9mZnNldD0lbHUsIGlub2RlPSVsdSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAotCQlkaXItPmlfaW5vLCBlcnJvciwgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAotCQkodW5zaWduZWQgbG9uZykgbGUzMl90b19jcHUocC0+aW5vZGUpLAotCQlyZWNfbGVuLCBwLT5uYW1lX2xlbik7CisJaWYgKCFxdWlldCkKKwkJZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sICJiYWQgZW50cnkgaW4gZGlyZWN0b3J5ICMlbHU6IDogJXMgLSAiCisJCQkib2Zmc2V0PSVsdSwgaW5vZGU9JWx1LCByZWNfbGVuPSVkLCBuYW1lX2xlbj0lZCIsCisJCQlkaXItPmlfaW5vLCBlcnJvciwgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAorCQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSwKKwkJCXJlY19sZW4sIHAtPm5hbWVfbGVuKTsKIAlnb3RvIGZhaWw7CiBFZW5kOgotCXAgPSAoZXh0Ml9kaXJlbnQgKikoa2FkZHIgKyBvZmZzKTsKLQlleHQyX2Vycm9yIChzYiwgImV4dDJfY2hlY2tfcGFnZSIsCi0JCSJlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdSBzcGFucyB0aGUgcGFnZSBib3VuZGFyeSIKLQkJIm9mZnNldD0lbHUsIGlub2RlPSVsdSIsCi0JCWRpci0+aV9pbm8sIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKLQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSk7CisJaWYgKCFxdWlldCkgeworCQlwID0gKGV4dDJfZGlyZW50ICopKGthZGRyICsgb2Zmcyk7CisJCWV4dDJfZXJyb3Ioc2IsICJleHQyX2NoZWNrX3BhZ2UiLAorCQkJImVudHJ5IGluIGRpcmVjdG9yeSAjJWx1IHNwYW5zIHRoZSBwYWdlIGJvdW5kYXJ5IgorCQkJIm9mZnNldD0lbHUsIGlub2RlPSVsdSIsCisJCQlkaXItPmlfaW5vLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCisJCQkodW5zaWduZWQgbG9uZykgbGUzMl90b19jcHUocC0+aW5vZGUpKTsKKwl9CiBmYWlsOgogCVNldFBhZ2VDaGVja2VkKHBhZ2UpOwogCVNldFBhZ2VFcnJvcihwYWdlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICogZXh0Ml9nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuKQorc3RhdGljIHN0cnVjdCBwYWdlICogZXh0Ml9nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuLAorCQkJCSAgIGludCBxdWlldCkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGRpci0+aV9tYXBwaW5nOwogCXN0cnVjdCBwYWdlICpwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiwgTlVMTCk7CiAJaWYgKCFJU19FUlIocGFnZSkpIHsKIAkJa21hcChwYWdlKTsKIAkJaWYgKCFQYWdlQ2hlY2tlZChwYWdlKSkKLQkJCWV4dDJfY2hlY2tfcGFnZShwYWdlKTsKKwkJCWV4dDJfY2hlY2tfcGFnZShwYWdlLCBxdWlldCk7CiAJCWlmIChQYWdlRXJyb3IocGFnZSkpCiAJCQlnb3RvIGZhaWw7CiAJfQpAQCAtMjkyLDcgKzI5Niw3IEBACiAJZm9yICggOyBuIDwgbnBhZ2VzOyBuKyssIG9mZnNldCA9IDApIHsKIAkJY2hhciAqa2FkZHIsICpsaW1pdDsKIAkJZXh0Ml9kaXJlbnQgKmRlOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoaW5vZGUsIG4pOworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoaW5vZGUsIG4sIDApOwogCiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCWV4dDJfZXJyb3Ioc2IsIF9fZnVuY19fLApAQCAtMzYxLDYgKzM2NSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGRpcik7CiAJZXh0Ml9kaXJlbnQgKiBkZTsKKwlpbnQgZGlyX2hhc19lcnJvciA9IDA7CiAKIAlpZiAobnBhZ2VzID09IDApCiAJCWdvdG8gb3V0OwpAQCAtMzc0LDcgKzM3OSw3IEBACiAJbiA9IHN0YXJ0OwogCWRvIHsKIAkJY2hhciAqa2FkZHI7Ci0JCXBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgbik7CisJCXBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgbiwgZGlyX2hhc19lcnJvcik7CiAJCWlmICghSVNfRVJSKHBhZ2UpKSB7CiAJCQlrYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAkJCWRlID0gKGV4dDJfZGlyZW50ICopIGthZGRyOwpAQCAtMzkxLDcgKzM5Niw5IEBACiAJCQkJZGUgPSBleHQyX25leHRfZW50cnkoZGUpOwogCQkJfQogCQkJZXh0Ml9wdXRfcGFnZShwYWdlKTsKLQkJfQorCQl9IGVsc2UKKwkJCWRpcl9oYXNfZXJyb3IgPSAxOworCiAJCWlmICgrK24gPj0gbnBhZ2VzKQogCQkJbiA9IDA7CiAJCS8qIG5leHQgcGFnZSBpcyBwYXN0IHRoZSBibG9ja3Mgd2UndmUgZ290ICovCkBAIC00MTQsNyArNDIxLDcgQEAKIAogc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBleHQyX2RvdGRvdCAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBwYWdlICoqcCkKIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCAwKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCAwLCAwKTsKIAlleHQyX2RpcmVudCAqZGUgPSBOVUxMOwogCiAJaWYgKCFJU19FUlIocGFnZSkpIHsKQEAgLTQ4Nyw3ICs0OTQsNyBAQAogCWZvciAobiA9IDA7IG4gPD0gbnBhZ2VzOyBuKyspIHsKIAkJY2hhciAqZGlyX2VuZDsKIAotCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4pOworCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4sIDApOwogCQllcnIgPSBQVFJfRVJSKHBhZ2UpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQogCQkJZ290byBvdXQ7CkBAIC02NTUsMTQgKzY2MiwxNyBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGksIG5wYWdlcyA9IGRpcl9wYWdlcyhpbm9kZSk7CisJaW50IGRpcl9oYXNfZXJyb3IgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CiAJCWNoYXIgKmthZGRyOwogCQlleHQyX2RpcmVudCAqIGRlOwotCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShpbm9kZSwgaSk7CisJCXBhZ2UgPSBleHQyX2dldF9wYWdlKGlub2RlLCBpLCBkaXJfaGFzX2Vycm9yKTsKIAotCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlkaXJfaGFzX2Vycm9yID0gMTsKIAkJCWNvbnRpbnVlOworCQl9CiAKIAkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJCWRlID0gKGV4dDJfZGlyZW50ICopa2FkZHI7CmRpZmYgLS1naXQgYS9mcy9leHQzL0tjb25maWcgYi9mcy9leHQzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwY2ZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDMvS2NvbmZpZwpAQCAtMCwwICsxLDY3IEBACitjb25maWcgRVhUM19GUworCXRyaXN0YXRlICJFeHQzIGpvdXJuYWxsaW5nIGZpbGUgc3lzdGVtIHN1cHBvcnQiCisJc2VsZWN0IEpCRAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGpvdXJuYWxsaW5nIHZlcnNpb24gb2YgdGhlIFNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorCSAgKG9mdGVuIGNhbGxlZCBleHQzKSwgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtCisJICAobWV0aG9kIHRvIG9yZ2FuaXplIGZpbGVzIG9uIGEgc3RvcmFnZSBkZXZpY2UpIGZvciBoYXJkIGRpc2tzLgorCisJICBUaGUgam91cm5hbGxpbmcgY29kZSBpbmNsdWRlZCBpbiB0aGlzIGRyaXZlciBtZWFucyB5b3UgZG8gbm90IGhhdmUKKwkgIHRvIHJ1biBlMmZzY2sgKGZpbGUgc3lzdGVtIGNoZWNrZXIpIG9uIHlvdXIgZmlsZSBzeXN0ZW1zIGFmdGVyIGEKKwkgIGNyYXNoLiAgVGhlIGpvdXJuYWwga2VlcHMgdHJhY2sgb2YgYW55IGNoYW5nZXMgdGhhdCB3ZXJlIGJlaW5nIG1hZGUKKwkgIGF0IHRoZSB0aW1lIHRoZSBzeXN0ZW0gY3Jhc2hlZCwgYW5kIGNhbiBlbnN1cmUgdGhhdCB5b3VyIGZpbGUgc3lzdGVtCisJICBpcyBjb25zaXN0ZW50IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgbGVuZ3RoeSBjaGVjay4KKworCSAgT3RoZXIgdGhhbiBhZGRpbmcgdGhlIGpvdXJuYWwgdG8gdGhlIGZpbGUgc3lzdGVtLCB0aGUgb24tZGlzayBmb3JtYXQKKwkgIG9mIGV4dDMgaXMgaWRlbnRpY2FsIHRvIGV4dDIuICBJdCBpcyBwb3NzaWJsZSB0byBmcmVlbHkgc3dpdGNoCisJICBiZXR3ZWVuIHVzaW5nIHRoZSBleHQzIGRyaXZlciBhbmQgdGhlIGV4dDIgZHJpdmVyLCBhcyBsb25nIGFzIHRoZQorCSAgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gY2xlYW5seSB1bm1vdW50ZWQsIG9yIGUyZnNjayBpcyBydW4gb24gdGhlIGZpbGUKKwkgIHN5c3RlbS4KKworCSAgVG8gYWRkIGEgam91cm5hbCBvbiBhbiBleGlzdGluZyBleHQyIGZpbGUgc3lzdGVtIG9yIGNoYW5nZSB0aGUKKwkgIGJlaGF2aW9yIG9mIGV4dDMgZmlsZSBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGUgdHVuZTJmcyB1dGlsaXR5ICgibWFuCisJICB0dW5lMmZzIikuICBUbyBtb2RpZnkgYXR0cmlidXRlcyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgb24gZXh0MworCSAgZmlsZSBzeXN0ZW1zLCB1c2UgY2hhdHRyICgibWFuIGNoYXR0ciIpLiAgWW91IG5lZWQgdG8gYmUgdXNpbmcKKwkgIGUyZnNwcm9ncyB2ZXJzaW9uIDEuMjAgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gY3JlYXRlIGV4dDMgam91cm5hbHMKKwkgIChhdmFpbGFibGUgYXQgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzLz4pLgorCisJICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0My4KKworY29uZmlnIEVYVDNfRlNfWEFUVFIKKwlib29sICJFeHQzIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0My4KKworY29uZmlnIEVYVDNfRlNfUE9TSVhfQUNMCisJYm9vbCAiRXh0MyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKKwlkZXBlbmRzIG9uIEVYVDNfRlNfWEFUVFIKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBFWFQzX0ZTX1NFQ1VSSVRZCisJYm9vbCAiRXh0MyBTZWN1cml0eSBMYWJlbHMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGV4dDMgZmlsZXN5c3RlbS4KKworCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggOTJmZDAzMy4uZjViNTdhMiAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC0xNTQ3LDYgKzE1NDcsNyBAQAogCSAqIHR1cm4gb2ZmIHJlc2VydmF0aW9uIGZvciB0aGlzIGFsbG9jYXRpb24KIAkgKi8KIAlpZiAobXlfcnN2ICYmIChmcmVlX2Jsb2NrcyA8IHdpbmRvd3N6KQorCQkmJiAoZnJlZV9ibG9ja3MgPiAwKQogCQkmJiAocnN2X2lzX2VtcHR5KCZteV9yc3YtPnJzdl93aW5kb3cpKSkKIAkJbXlfcnN2ID0gTlVMTDsKIApAQCAtMTU4NSw3ICsxNTg2LDcgQEAKIAkJICogZnJlZSBibG9ja3MgaXMgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIHJlc2VydmF0aW9uCiAJCSAqIHdpbmRvdyBzaXplLgogCQkgKi8KLQkJaWYgKGZyZWVfYmxvY2tzIDw9ICh3aW5kb3dzei8yKSkKKwkJaWYgKG15X3JzdiAmJiAoZnJlZV9ibG9ja3MgPD0gKHdpbmRvd3N6LzIpKSkKIAkJCWNvbnRpbnVlOwogCiAJCWJyZWxzZShiaXRtYXBfYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggMmVlYTk2ZS4uNGM4MjUzMSAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXQgPSAwOworCWludCBkaXJfaGFzX2Vycm9yID0gMDsKIAogCXNiID0gaW5vZGUtPmlfc2I7CiAKQEAgLTE0OCw5ICsxNDksMTIgQEAKIAkJICogb2YgcmVjb3ZlcmluZyBkYXRhIHdoZW4gdGhlcmUncyBhIGJhZCBzZWN0b3IKIAkJICovCiAJCWlmICghYmgpIHsKLQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19yZWFkZGlyIiwKLQkJCQkiZGlyZWN0b3J5ICMlbHUgY29udGFpbnMgYSBob2xlIGF0IG9mZnNldCAlbHUiLAotCQkJCWlub2RlLT5pX2lubywgKHVuc2lnbmVkIGxvbmcpZmlscC0+Zl9wb3MpOworCQkJaWYgKCFkaXJfaGFzX2Vycm9yKSB7CisJCQkJZXh0M19lcnJvcihzYiwgX19mdW5jX18sICJkaXJlY3RvcnkgIyVsdSAiCisJCQkJCSJjb250YWlucyBhIGhvbGUgYXQgb2Zmc2V0ICVsbGQiLAorCQkJCQlpbm9kZS0+aV9pbm8sIGZpbHAtPmZfcG9zKTsKKwkJCQlkaXJfaGFzX2Vycm9yID0gMTsKKwkJCX0KIAkJCS8qIGNvcnJ1cHQgc2l6ZT8gIE1heWJlIG5vIG1vcmUgYmxvY2tzIHRvIHJlYWQgKi8KIAkJCWlmIChmaWxwLT5mX3BvcyA+IGlub2RlLT5pX2Jsb2NrcyA8PCA5KQogCQkJCWJyZWFrOwpAQCAtNDEwLDcgKzQxNCw3IEBACiAJCQkJZ2V0X2R0eXBlKHNiLCBmbmFtZS0+ZmlsZV90eXBlKSk7CiAJCWlmIChlcnJvcikgewogCQkJZmlscC0+Zl9wb3MgPSBjdXJyX3BvczsKLQkJCWluZm8tPmV4dHJhX2ZuYW1lID0gZm5hbWUtPm5leHQ7CisJCQlpbmZvLT5leHRyYV9mbmFtZSA9IGZuYW1lOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWZuYW1lID0gZm5hbWUtPm5leHQ7CkBAIC00NDksMTEgKzQ1MywyMSBAQAogCSAqIElmIHRoZXJlIGFyZSBhbnkgbGVmdG92ZXIgbmFtZXMgb24gdGhlIGhhc2ggY29sbGlzaW9uCiAJICogY2hhaW4sIHJldHVybiB0aGVtIGZpcnN0LgogCSAqLwotCWlmIChpbmZvLT5leHRyYV9mbmFtZSAmJgotCSAgICBjYWxsX2ZpbGxkaXIoZmlscCwgZGlyZW50LCBmaWxsZGlyLCBpbmZvLT5leHRyYV9mbmFtZSkpCi0JCWdvdG8gZmluaXNoZWQ7CisJaWYgKGluZm8tPmV4dHJhX2ZuYW1lKSB7CisJCWlmIChjYWxsX2ZpbGxkaXIoZmlscCwgZGlyZW50LCBmaWxsZGlyLCBpbmZvLT5leHRyYV9mbmFtZSkpCisJCQlnb3RvIGZpbmlzaGVkOwogCi0JaWYgKCFpbmZvLT5jdXJyX25vZGUpCisJCWluZm8tPmV4dHJhX2ZuYW1lID0gTlVMTDsKKwkJaW5mby0+Y3Vycl9ub2RlID0gcmJfbmV4dChpbmZvLT5jdXJyX25vZGUpOworCQlpZiAoIWluZm8tPmN1cnJfbm9kZSkgeworCQkJaWYgKGluZm8tPm5leHRfaGFzaCA9PSB+MCkgeworCQkJCWZpbHAtPmZfcG9zID0gRVhUM19IVFJFRV9FT0Y7CisJCQkJZ290byBmaW5pc2hlZDsKKwkJCX0KKwkJCWluZm8tPmN1cnJfaGFzaCA9IGluZm8tPm5leHRfaGFzaDsKKwkJCWluZm8tPmN1cnJfbWlub3JfaGFzaCA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKCFpbmZvLT5jdXJyX25vZGUpCiAJCWluZm8tPmN1cnJfbm9kZSA9IHJiX2ZpcnN0KCZpbmZvLT5yb290KTsKIAogCXdoaWxlICgxKSB7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggZWJmZWM0ZC4uZjg0MjRhZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTE4Niw2ICsxMTg2LDEzIEBACiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCS8qCisJCSAqIGJsb2NrX3dyaXRlX2JlZ2luIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKKwkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4gRG9uJ3QgbmVlZAorCQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KKwkJICovCisJCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQogCQlnb3RvIHJldHJ5OwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNzcyNzhlOS4uNzhmZGYzOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC03OTAsNyArNzkwLDggQEAKIAogCWlmIChyZXNlcnZlZF9nZGIgfHwgZ2RiX29mZiA9PSAwKSB7CiAJCWlmICghRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpKXsKKwkJCQkJICAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkKKwkJICAgIHx8ICFsZTE2X3RvX2NwdShlcy0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSkgewogCQkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCQkgICAgICJObyByZXNlcnZlZCBHRFQgYmxvY2tzLCBjYW4ndCByZXNpemUiKTsKIAkJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggMzk5YTk2YS4uM2EyNjBhZiAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNjI1LDYgKzYyNSw5IEBACiAJZWxzZSBpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEpCiAJCXNlcV9wdXRzKHNlcSwgIixkYXRhPXdyaXRlYmFjayIpOwogCisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCisJCXNlcV9wdXRzKHNlcSwgIixkYXRhX2Vycj1hYm9ydCIpOworCiAJZXh0M19zaG93X3F1b3RhX29wdGlvbnMoc2VxLCBzYik7CiAKIAlyZXR1cm4gMDsKQEAgLTc1NCw2ICs3NTcsNyBAQAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLCBPcHRfYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLCBPcHRfam91cm5hbF9kZXYsCiAJT3B0X2Fib3J0LCBPcHRfZGF0YV9qb3VybmFsLCBPcHRfZGF0YV9vcmRlcmVkLCBPcHRfZGF0YV93cml0ZWJhY2ssCisJT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLAogCU9wdF91c3JqcXVvdGEsIE9wdF9ncnBqcXVvdGEsIE9wdF9vZmZ1c3JqcXVvdGEsIE9wdF9vZmZncnBqcXVvdGEsCiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLCBPcHRfdXNycXVvdGEsCkBAIC03OTYsNiArODAwLDggQEAKIAl7T3B0X2RhdGFfam91cm5hbCwgImRhdGE9am91cm5hbCJ9LAogCXtPcHRfZGF0YV9vcmRlcmVkLCAiZGF0YT1vcmRlcmVkIn0sCiAJe09wdF9kYXRhX3dyaXRlYmFjaywgImRhdGE9d3JpdGViYWNrIn0sCisJe09wdF9kYXRhX2Vycl9hYm9ydCwgImRhdGFfZXJyPWFib3J0In0sCisJe09wdF9kYXRhX2Vycl9pZ25vcmUsICJkYXRhX2Vycj1pZ25vcmUifSwKIAl7T3B0X29mZnVzcmpxdW90YSwgInVzcmpxdW90YT0ifSwKIAl7T3B0X3VzcmpxdW90YSwgInVzcmpxdW90YT0lcyJ9LAogCXtPcHRfb2ZmZ3JwanF1b3RhLCAiZ3JwanF1b3RhPSJ9LApAQCAtMTAxMSw2ICsxMDE3LDEyIEBACiAJCQkJc2JpLT5zX21vdW50X29wdCB8PSBkYXRhX29wdDsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9kYXRhX2Vycl9hYm9ydDoKKwkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RhdGFfZXJyX2lnbm9yZToKKwkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQlicmVhazsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAkJY2FzZSBPcHRfdXNyanF1b3RhOgogCQkJcXR5cGUgPSBVU1JRVU9UQTsKQEAgLTE5ODYsNiArMTk5OCwxMCBAQAogCQlqb3VybmFsLT5qX2ZsYWdzIHw9IEpGU19CQVJSSUVSOwogCWVsc2UKIAkJam91cm5hbC0+al9mbGFncyAmPSB+SkZTX0JBUlJJRVI7CisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCisJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUjsKKwllbHNlCisJCWpvdXJuYWwtPmpfZmxhZ3MgJj0gfkpGU19BQk9SVF9PTl9TWU5DREFUQV9FUlI7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA1NDgyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0wLDAgKzEsNzkgQEAKK2NvbmZpZyBFWFQ0X0ZTCisJdHJpc3RhdGUgIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtIgorCXNlbGVjdCBKQkQyCisJc2VsZWN0IENSQzE2CisJaGVscAorCSAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uCisKKwkgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSwKKwkgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGgKKwkgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXQKKwkgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZAorCSAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsCisJICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWQKKwkgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXQKKwkgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy4KKworCSAgVGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIHN1cHBvcnQgbW91bnRpbmcgYW4gZXh0MworCSAgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmUgd2lsbCBiZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20KKwkgIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QKKwkgIHBlcmZvcm1hbmNlIGdhaW5zIHdpbGwgcmVxdWlyZSBlbmFibGluZyBleHQ0IGZlYXR1cmVzIGluIHRoZQorCSAgZmlsZXN5c3RlbSwgb3IgZm9ybWF0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAorCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgRVhUNERFVl9DT01QQVQKKwlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgorCWRlcGVuZHMgb24gRVhUNF9GUworCWhlbHAKKwkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcworCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKKwkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKKwkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCisKKwkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKKwkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCisJICBjaG9zZSBZIGhlcmUuICAgVGhpcyBmZWF0dXJlIHdpbGwgZ28gYXdheSBieSAyLjYuMzEsIHNvCisJICBwbGVhc2UgYXJyYW5nZSB0byBnZXQgeW91ciB1c2Vyc3BhY2UgcHJvZ3JhbXMgZml4ZWQhCisKK2NvbmZpZyBFWFQ0X0ZTX1hBVFRSCisJYm9vbCAiRXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUNF9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDQuCisKK2NvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBPU0lYIEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUNF9GU19TRUNVUklUWQorCWJvb2wgIkV4dDQgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUNF9GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IGJkMmVjZTIuLmI5ODIxYmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNTY4LDggKzU2OCwxNiBAQAogCiAJLyogdGhpcyBpc24ndCB0aGUgcmlnaHQgcGxhY2UgdG8gZGVjaWRlIHdoZXRoZXIgYmxvY2sgaXMgbWV0YWRhdGEKIAkgKiBpbm9kZS5jL2V4dGVudHMuYyBrbm93cyBiZXR0ZXIsIGJ1dCBmb3Igc2FmZXR5IC4uLiAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgfHwKLQkJCWV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJbWV0YWRhdGEgPSAxOworCisJLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmV1c2UKKwkgKiBibG9jayByZWxlYXNlZCB1bnRpbGwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdC4KKwkgKiB3cml0ZWJhY2sgbW9kZSBoYXZlIHdlYWsgZGF0YSBjb25zaXN0ZW5jeSBzbworCSAqIGRvbid0IGZvcmNlIGRhdGEgYXMgbWV0YWRhdGEgd2hlbiBmcmVlaW5nIGJsb2NrCisJICogZm9yIHdyaXRlYmFjayBtb2RlLgorCSAqLworCWlmIChtZXRhZGF0YSA9PSAwICYmICFleHQ0X3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCiAJCW1ldGFkYXRhID0gMTsKIAogCXNiID0gaW5vZGUtPmlfc2I7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDY2OTBhNDEuLjQ4ODBjYzMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC01MTEsNyArNTExLDYgQEAKIC8qCiAgKiBNb3VudCBmbGFncwogICovCi0jZGVmaW5lIEVYVDRfTU9VTlRfQ0hFQ0sJCTB4MDAwMDEJLyogRG8gbW91bnQtdGltZSBjaGVja3MgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9PTERBTExPQwkJMHgwMDAwMiAgLyogRG9uJ3QgdXNlIHRoZSBuZXcgT3Jsb3YgYWxsb2NhdG9yICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfR1JQSUQJCTB4MDAwMDQJLyogQ3JlYXRlIGZpbGVzIHdpdGggZGlyZWN0b3J5J3MgZ3JvdXAgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9ERUJVRwkJMHgwMDAwOAkvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X3NiLmggYi9mcy9leHQ0L2V4dDRfc2IuaAppbmRleCA2YTBiNDBkLi40NDVmZGU2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfc2IuaAorKysgYi9mcy9leHQ0L2V4dDRfc2IuaApAQCAtOTksOSArOTksNiBAQAogCXN0cnVjdCBpbm9kZSAqc19idWRkeV9jYWNoZTsKIAlsb25nIHNfYmxvY2tzX3Jlc2VydmVkOwogCXNwaW5sb2NrX3Qgc19yZXNlcnZlX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzX2FjdGl2ZV90cmFuc2FjdGlvbjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNfY2xvc2VkX3RyYW5zYWN0aW9uOwotCXN0cnVjdCBsaXN0X2hlYWQgc19jb21taXR0ZWRfdHJhbnNhY3Rpb247CiAJc3BpbmxvY2tfdCBzX21kX2xvY2s7CiAJdGlkX3Qgc19sYXN0X3RyYW5zYWN0aW9uOwogCXVuc2lnbmVkIHNob3J0ICpzX21iX29mZnNldHMsICpzX21iX21heHM7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggOWI0ZWM5ZC4uOGRiZjY5NSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTY0OCw2ICsxNjQ4LDcgQEAKIAlpbnQgcmV0ID0gMCwgZXJyLCBucl9wYWdlcywgaTsKIAl1bnNpZ25lZCBsb25nIGluZGV4LCBlbmQ7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlsb25nIHBhZ2VzX3NraXBwZWQ7CiAKIAlCVUdfT04obXBkLT5uZXh0X3BhZ2UgPD0gbXBkLT5maXJzdF9wYWdlKTsKIAlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwpAQCAtMTY1NSwyMCArMTY1NiwzMCBAQAogCWVuZCA9IG1wZC0+bmV4dF9wYWdlIC0gMTsKIAogCXdoaWxlIChpbmRleCA8PSBlbmQpIHsKLQkJLyogWFhYOiBvcHRpbWl6ZSB0YWlsICovCi0JCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsIG1hcHBpbmcsIGluZGV4LCBQQUdFVkVDX1NJWkUpOworCQkvKgorCQkgKiBXZSBjYW4gdXNlIFBBR0VDQUNIRV9UQUdfRElSVFkgbG9va3VwIGhlcmUgYmVjYXVzZQorCQkgKiBldmVuIHRob3VnaCB3ZSBoYXZlIGNsZWFyZWQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIHBhZ2UKKwkJICogV2Ugc3RpbGwga2VlcCB0aGUgcGFnZSBpbiB0aGUgcmFkaXggdHJlZSB3aXRoIHRhZworCQkgKiBQQUdFQ0FDSEVfVEFHX0RJUlRZLiBTZWUgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8uCisJCSAqIFRoZSBQQUdFQ0FDSEVfVEFHX0RJUlRZIGlzIGNsZWFyZWQgaW4gc2V0X3BhZ2Vfd3JpdGViYWNrCisJCSAqIHdoaWNoIGlzIGNhbGxlZCB2aWEgdGhlIGJlbG93IHdyaXRlcGFnZSBjYWxsYmFjay4KKwkJICovCisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCisJCQkJCVBBR0VDQUNIRV9UQUdfRElSVFksCisJCQkJCW1pbihlbmQgLSBpbmRleCwKKwkJCQkJKHBnb2ZmX3QpUEFHRVZFQ19TSVpFLTEpICsgMSk7CiAJCWlmIChucl9wYWdlcyA9PSAwKQogCQkJYnJlYWs7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CiAKLQkJCWluZGV4ID0gcGFnZS0+aW5kZXg7Ci0JCQlpZiAoaW5kZXggPiBlbmQpCi0JCQkJYnJlYWs7Ci0JCQlpbmRleCsrOwotCisJCQlwYWdlc19za2lwcGVkID0gbXBkLT53YmMtPnBhZ2VzX3NraXBwZWQ7CiAJCQllcnIgPSBtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlKHBhZ2UsIG1wZC0+d2JjKTsKLQkJCWlmICghZXJyKQorCQkJaWYgKCFlcnIgJiYgKHBhZ2VzX3NraXBwZWQgPT0gbXBkLT53YmMtPnBhZ2VzX3NraXBwZWQpKQorCQkJCS8qCisJCQkJICogaGF2ZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0aGUgcGFnZQorCQkJCSAqIHdpdGhvdXQgc2tpcHBpbmcgdGhlIHNhbWUKKwkJCQkgKi8KIAkJCQltcGQtPnBhZ2VzX3dyaXR0ZW4rKzsKIAkJCS8qCiAJCQkgKiBJbiBlcnJvciBjYXNlLCB3ZSBoYXZlIHRvIGNvbnRpbnVlIGJlY2F1c2UKQEAgLTIxMDQsNyArMjExNSw2IEBACiAJCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiAJCQkgICAgICAgc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCkKIHsKLQlsb25nIHRvX3dyaXRlOwogCWludCByZXQ7CiAKIAlpZiAoIW1wZC0+Z2V0X2Jsb2NrKQpAQCAtMjExOSwxOSArMjEyOSwxOCBAQAogCW1wZC0+cGFnZXNfd3JpdHRlbiA9IDA7CiAJbXBkLT5yZXR2YWwgPSAwOwogCi0JdG9fd3JpdGUgPSB3YmMtPm5yX3RvX3dyaXRlOwotCiAJcmV0ID0gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX21wYWdlX2RhX3dyaXRlcGFnZSwgbXBkKTsKLQogCS8qCiAJICogSGFuZGxlIGxhc3QgZXh0ZW50IG9mIHBhZ2VzCiAJICovCiAJaWYgKCFtcGQtPmlvX2RvbmUgJiYgbXBkLT5uZXh0X3BhZ2UgIT0gbXBkLT5maXJzdF9wYWdlKSB7CiAJCWlmIChtcGFnZV9kYV9tYXBfYmxvY2tzKG1wZCkgPT0gMCkKIAkJCW1wYWdlX2RhX3N1Ym1pdF9pbyhtcGQpOwotCX0KIAotCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSAtIG1wZC0+cGFnZXNfd3JpdHRlbjsKKwkJbXBkLT5pb19kb25lID0gMTsKKwkJcmV0ID0gTVBBR0VfREFfRVhURU5UX1RBSUw7CisJfQorCXdiYy0+bnJfdG9fd3JpdGUgLT0gbXBkLT5wYWdlc193cml0dGVuOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzNjAsMTIgKzIzNjksMTQgQEAKIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CisJcGdvZmZfdAlpbmRleDsKKwlpbnQgcmFuZ2Vfd2hvbGUgPSAwOwogCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwotCWxvZmZfdCByYW5nZV9zdGFydCA9IDA7CiAJc3RydWN0IG1wYWdlX2RhX2RhdGEgbXBkOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCWludCBub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwlsb25nIHBhZ2VzX3dyaXR0ZW4gPSAwLCBwYWdlc19za2lwcGVkOwogCWludCBuZWVkZWRfYmxvY2tzLCByZXQgPSAwLCBucl90b193cml0ZWJ1bXAgPSAwOwotCWxvbmcgdG9fd3JpdGUsIHBhZ2VzX3NraXBwZWQgPSAwOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IobWFwcGluZy0+aG9zdC0+aV9zYik7CiAKIAkvKgpAQCAtMjM4NSwyMyArMjM5NiwyNiBAQAogCQlucl90b193cml0ZWJ1bXAgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QgLSB3YmMtPm5yX3RvX3dyaXRlOwogCQl3YmMtPm5yX3RvX3dyaXRlID0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0OwogCX0KKwlpZiAod2JjLT5yYW5nZV9zdGFydCA9PSAwICYmIHdiYy0+cmFuZ2VfZW5kID09IExMT05HX01BWCkKKwkJcmFuZ2Vfd2hvbGUgPSAxOwogCi0JaWYgKCF3YmMtPnJhbmdlX2N5Y2xpYykKLQkJLyoKLQkJICogSWYgcmFuZ2VfY3ljbGljIGlzIG5vdCBzZXQgZm9yY2UgcmFuZ2VfY29udAotCQkgKiBhbmQgc2F2ZSB0aGUgb2xkIHdyaXRlYmFja19pbmRleAotCQkgKi8KLQkJd2JjLT5yYW5nZV9jb250ID0gMTsKLQotCXJhbmdlX3N0YXJ0ID0gIHdiYy0+cmFuZ2Vfc3RhcnQ7Ci0JcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKKwlpZiAod2JjLT5yYW5nZV9jeWNsaWMpCisJCWluZGV4ID0gbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OworCWVsc2UKKwkJaW5kZXggPSB3YmMtPnJhbmdlX3N0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAltcGQud2JjID0gd2JjOwogCW1wZC5pbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAKLXJlc3RhcnRfbG9vcDoKLQl0b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGU7Ci0Jd2hpbGUgKCFyZXQgJiYgdG9fd3JpdGUgPiAwKSB7CisJLyoKKwkgKiB3ZSBkb24ndCB3YW50IHdyaXRlX2NhY2hlX3BhZ2VzIHRvIHVwZGF0ZQorCSAqIG5yX3RvX3dyaXRlIGFuZCB3cml0ZWJhY2tfaW5kZXgKKwkgKi8KKwlub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IHdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGU7CisJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDE7CisJcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKKworCXdoaWxlICghcmV0ICYmIHdiYy0+bnJfdG9fd3JpdGUgPiAwKSB7CiAKIAkJLyoKIAkJICogd2UgIGluc2VydCBvbmUgZXh0ZW50IGF0IGEgdGltZS4gU28gd2UgbmVlZApAQCAtMjQyMiw0OCArMjQzNiw1MyBAQAogCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQotCQl0b193cml0ZSAtPSB3YmMtPm5yX3RvX3dyaXRlOwotCiAJCW1wZC5nZXRfYmxvY2sgPSBleHQ0X2RhX2dldF9ibG9ja193cml0ZTsKIAkJcmV0ID0gbXBhZ2VfZGFfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsICZtcGQpOwogCiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAKLQkJaWYgKG1wZC5yZXR2YWwgPT0gLUVOT1NQQykKKwkJaWYgKG1wZC5yZXR2YWwgPT0gLUVOT1NQQykgeworCQkJLyogY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB3aGljaCB3b3VsZAorCQkJICogZnJlZSBibG9ja3MgcmVsZWFzZWQgaW4gdGhlIHRyYW5zYWN0aW9uCisJCQkgKiBhbmQgdHJ5IGFnYWluCisJCQkgKi8KIAkJCWpiZDJfam91cm5hbF9mb3JjZV9jb21taXRfbmVzdGVkKHNiaS0+c19qb3VybmFsKTsKLQotCQkvKiByZXNldCB0aGUgcmV0cnkgY291bnQgKi8KLQkJaWYgKHJldCA9PSBNUEFHRV9EQV9FWFRFTlRfVEFJTCkgeworCQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSBpZiAocmV0ID09IE1QQUdFX0RBX0VYVEVOVF9UQUlMKSB7CiAJCQkvKgogCQkJICogZ290IG9uZSBleHRlbnQgbm93IHRyeSB3aXRoCiAJCQkgKiByZXN0IG9mIHRoZSBwYWdlcwogCQkJICovCi0JCQl0b193cml0ZSArPSB3YmMtPm5yX3RvX3dyaXRlOworCQkJcGFnZXNfd3JpdHRlbiArPSBtcGQucGFnZXNfd3JpdHRlbjsKKwkJCXdiYy0+cGFnZXNfc2tpcHBlZCA9IHBhZ2VzX3NraXBwZWQ7CiAJCQlyZXQgPSAwOwotCQl9IGVsc2UgaWYgKHdiYy0+bnJfdG9fd3JpdGUpIHsKKwkJfSBlbHNlIGlmICh3YmMtPm5yX3RvX3dyaXRlKQogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIG5vIG1vcmUgd3JpdGVvdXQgbmVlZGVkCiAJCQkgKiBvciB3ZSByZXF1ZXN0ZWQgZm9yIGEgbm9ibG9ja2luZyB3cml0ZW91dAogCQkJICogYW5kIHdlIGZvdW5kIHRoZSBkZXZpY2UgY29uZ2VzdGVkCiAJCQkgKi8KLQkJCXRvX3dyaXRlICs9IHdiYy0+bnJfdG9fd3JpdGU7CiAJCQlicmVhazsKLQkJfQotCQl3YmMtPm5yX3RvX3dyaXRlID0gdG9fd3JpdGU7CiAJfQorCWlmIChwYWdlc19za2lwcGVkICE9IHdiYy0+cGFnZXNfc2tpcHBlZCkKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gbGVhdmluZyAlcyAiCisJCQkJIndpdGggbnJfdG9fd3JpdGUgPSAlbGQgcmV0ID0gJWRcbiIsCisJCQkJX19mdW5jX18sIHdiYy0+bnJfdG9fd3JpdGUsIHJldCk7CiAKLQlpZiAod2JjLT5yYW5nZV9jb250ICYmIChwYWdlc19za2lwcGVkICE9IHdiYy0+cGFnZXNfc2tpcHBlZCkpIHsKLQkJLyogV2Ugc2tpcHBlZCBwYWdlcyBpbiB0aGlzIGxvb3AgKi8KLQkJd2JjLT5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0OwotCQl3YmMtPm5yX3RvX3dyaXRlID0gdG9fd3JpdGUgKwotCQkJCXdiYy0+cGFnZXNfc2tpcHBlZCAtIHBhZ2VzX3NraXBwZWQ7Ci0JCXdiYy0+cGFnZXNfc2tpcHBlZCA9IHBhZ2VzX3NraXBwZWQ7Ci0JCWdvdG8gcmVzdGFydF9sb29wOwotCX0KKwkvKiBVcGRhdGUgaW5kZXggKi8KKwlpbmRleCArPSBwYWdlc193cml0dGVuOworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQorCQkvKgorCQkgKiBzZXQgdGhlIHdyaXRlYmFja19pbmRleCBzbyB0aGF0IHJhbmdlX2N5Y2xpYworCQkgKiBtb2RlIHdpbGwgd3JpdGUgaXQgYmFjayBsYXRlcgorCQkgKi8KKwkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CiAKIG91dF93cml0ZXBhZ2VzOgotCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSAtIG5yX3RvX3dyaXRlYnVtcDsKLQl3YmMtPnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CisJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKKwkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7CisJd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDE3NSw3ICs0MTk0LDYgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJihlaS0+dmZzX2lub2RlKTsKIAl1NjQgaV9ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCWludCBlcnIgPSAwOwogCiAJaWYgKGlfYmxvY2tzIDw9IH4wVSkgewogCQkvKgpAQCAtNDE4NSwzNiArNDIwMywyNyBAQAogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2xvICAgPSBjcHVfdG9fbGUzMihpX2Jsb2Nrcyk7CiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfaGlnaCA9IDA7CiAJCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0hVR0VfRklMRV9GTDsKLQl9IGVsc2UgaWYgKGlfYmxvY2tzIDw9IDB4ZmZmZmZmZmZmZmZmVUxMKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAoIUVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkpCisJCXJldHVybiAtRUZCSUc7CisKKwlpZiAoaV9ibG9ja3MgPD0gMHhmZmZmZmZmZmZmZmZVTEwpIHsKIAkJLyoKIAkJICogaV9ibG9ja3MgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgNDggYml0IHZhcmlhYmxlCiAJCSAqIGFzIG11bHRpcGxlIG9mIDUxMiBieXRlcwogCQkgKi8KLQkJZXJyID0gZXh0NF91cGRhdGVfcm9jb21wYXRfZmVhdHVyZShoYW5kbGUsIHNiLAotCQkJCQkgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpOwotCQlpZiAoZXJyKQotCQkJZ290byAgZXJyX291dDsKLQkJLyogaV9ibG9jayBpcyBzdG9yZWQgaW4gdGhlIHNwbGl0ICA0OCBiaXQgZmllbGRzICovCiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gY3B1X3RvX2xlMTYoaV9ibG9ja3MgPj4gMzIpOwogCQllaS0+aV9mbGFncyAmPSB+RVhUNF9IVUdFX0ZJTEVfRkw7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogaV9ibG9ja3Mgc2hvdWxkIGJlIHJlcHJlc2VudGVkIGluIGEgNDggYml0IHZhcmlhYmxlCi0JCSAqIGFzIG11bHRpcGxlIG9mICBmaWxlIHN5c3RlbSBibG9jayBzaXplCi0JCSAqLwotCQllcnIgPSBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZSwgc2IsCi0JCQkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvICBlcnJfb3V0OwogCQllaS0+aV9mbGFncyB8PSBFWFQ0X0hVR0VfRklMRV9GTDsKIAkJLyogaV9ibG9jayBpcyBzdG9yZWQgaW4gZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSAqLwogCQlpX2Jsb2NrcyA9IGlfYmxvY2tzID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSk7CiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gY3B1X3RvX2xlMTYoaV9ibG9ja3MgPj4gMzIpOwogCX0KLWVycl9vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggYjU4MDcxNC4uZGZlMTdhMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTIzMDAsNiArMjMwMCw3IEBACiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJm1ldGFfZ3JvdXBfaW5mb1tpXS0+YmJfcHJlYWxsb2NfbGlzdCk7CisJbWV0YV9ncm91cF9pbmZvW2ldLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSA9IE5VTEw7OwogCiAjaWZkZWYgRE9VQkxFX0NIRUNLCiAJewpAQCAtMjUyMiw5ICsyNTIzLDYgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmc2JpLT5zX21kX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uKTsKLQlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbik7Ci0JSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfYmFsX2xvY2spOwogCiAJc2JpLT5zX21iX21heF90b19zY2FuID0gTUJfREVGQVVMVF9NQVhfVE9fU0NBTjsKQEAgLTI1NTMsNiArMjU1MSw4IEBACiAJZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzYik7CiAJZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpOwogCisJc2JpLT5zX2pvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrID0gcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0OworCiAJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogbWJhbGxvYyBlbmFibGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NjgsNyArMjU2OCw3IEBACiAJCXBhID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlLCBwYV9ncm91cF9saXN0KTsKIAkJbGlzdF9kZWwoJnBhLT5wYV9ncm91cF9saXN0KTsKIAkJY291bnQrKzsKLQkJa2ZyZWUocGEpOworCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7CiAJfQogCWlmIChjb3VudCkKIAkJbWJfZGVidWcoIm1iYWxsb2M6ICV1IFBBcyBsZWZ0XG4iLCBjb3VudCk7CkBAIC0yNTgyLDE1ICsyNTgyLDYgQEAKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm87CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKLQkvKiByZWxlYXNlIGZyZWVkLCBub24tY29tbWl0dGVkIGJsb2NrcyAqLwotCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24sCi0JCQkmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2FjdGl2ZV90cmFuc2FjdGlvbiwKLQkJCSZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKTsKLQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOwotCWV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHNiKTsKLQogCWlmIChzYmktPnNfZ3JvdXBfaW5mbykgewogCQlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7CiAJCQlncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTsKQEAgLTI2NDQsNjEgKzI2MzUsNTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkCi1leHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBqYmQyIGxheWVyIG9uY2UgdGhlIGNvbW1pdCBoYXMgZmluaXNoZWQsCisgKiBzbyB3ZSBrbm93IHdlIGNhbiBmcmVlIHRoZSBibG9ja3MgdGhhdCB3ZXJlIHJlbGVhc2VkIHdpdGggdGhhdCBjb21taXQuCisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKnR4bikKIHsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlpbnQgZXJyOwotCWludCBpOwotCWludCBjb3VudCA9IDA7Ci0JaW50IGNvdW50MiA9IDA7Ci0Jc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSAqbWQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGpvdXJuYWwtPmpfcHJpdmF0ZTsKIAlzdHJ1Y3QgZXh0NF9idWRkeSBlNGI7CisJc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZGI7CisJaW50IGVyciwgY291bnQgPSAwLCBjb3VudDIgPSAwOworCXN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnk7CisJZXh0NF9mc2Jsa190IGRpc2NhcmRfYmxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0bXA7CiAKLQlpZiAobGlzdF9lbXB0eSgmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbikpCi0JCXJldHVybjsKLQotCS8qIHRoZXJlIGlzIGNvbW1pdHRlZCBibG9ja3MgdG8gYmUgZnJlZWQgeWV0ICovCi0JZG8gewotCQkvKiBnZXQgbmV4dCBhcnJheSBvZiBibG9ja3MgKi8KLQkJbWQgPSBOVUxMOwotCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKSkgewotCQkJbWQgPSBsaXN0X2VudHJ5KHNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24ubmV4dCwKLQkJCQkJc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSwgbGlzdCk7Ci0JCQlsaXN0X2RlbCgmbWQtPmxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0KLQkJaWYgKG1kID09IE5VTEwpCi0JCQlicmVhazsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHRtcCwgJnR4bi0+dF9wcml2YXRlX2xpc3QpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbGlzdCk7CiAKIAkJbWJfZGVidWcoImdvbm5hIGZyZWUgJXUgYmxvY2tzIGluIGdyb3VwICVsdSAoMHglcCk6IiwKLQkJCQltZC0+bnVtLCBtZC0+Z3JvdXAsIG1kKTsKKwkJCSBlbnRyeS0+Y291bnQsIGVudHJ5LT5ncm91cCwgZW50cnkpOwogCi0JCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgbWQtPmdyb3VwLCAmZTRiKTsKKwkJZXJyID0gZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBlbnRyeS0+Z3JvdXAsICZlNGIpOwogCQkvKiB3ZSBleHBlY3QgdG8gZmluZCBleGlzdGluZyBidWRkeSBiZWNhdXNlIGl0J3MgcGlubmVkICovCiAJCUJVR19PTihlcnIgIT0gMCk7CiAKKwkJZGIgPSBlNGIuYmRfaW5mbzsKIAkJLyogdGhlcmUgYXJlIGJsb2NrcyB0byBwdXQgaW4gYnVkZHkgdG8gbWFrZSB0aGVtIHJlYWxseSBmcmVlICovCi0JCWNvdW50ICs9IG1kLT5udW07CisJCWNvdW50ICs9IGVudHJ5LT5jb3VudDsKIAkJY291bnQyKys7Ci0JCWV4dDRfbG9ja19ncm91cChzYiwgbWQtPmdyb3VwKTsKLQkJZm9yIChpID0gMDsgaSA8IG1kLT5udW07IGkrKykgewotCQkJbWJfZGVidWcoIiAldSIsIG1kLT5ibG9ja3NbaV0pOwotCQkJbWJfZnJlZV9ibG9ja3MoTlVMTCwgJmU0YiwgbWQtPmJsb2Nrc1tpXSwgMSk7CisJCWV4dDRfbG9ja19ncm91cChzYiwgZW50cnktPmdyb3VwKTsKKwkJLyogVGFrZSBpdCBvdXQgb2YgcGVyIGdyb3VwIHJiIHRyZWUgKi8KKwkJcmJfZXJhc2UoJmVudHJ5LT5ub2RlLCAmKGRiLT5iYl9mcmVlX3Jvb3QpKTsKKwkJbWJfZnJlZV9ibG9ja3MoTlVMTCwgJmU0YiwgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKworCQlpZiAoIWRiLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSkgeworCQkJLyogTm8gbW9yZSBpdGVtcyBpbiB0aGUgcGVyIGdyb3VwIHJiIHRyZWUKKwkJCSAqIGJhbGFuY2UgcmVmY291bnRzIGZyb20gZXh0NF9tYl9mcmVlX21ldGFkYXRhKCkKKwkJCSAqLworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9idWRkeV9wYWdlKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYml0bWFwX3BhZ2UpOwogCQl9Ci0JCW1iX2RlYnVnKCJcbiIpOwotCQlleHQ0X3VubG9ja19ncm91cChzYiwgbWQtPmdyb3VwKTsKKwkJZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGVudHJ5LT5ncm91cCk7CisJCWRpc2NhcmRfYmxvY2sgPSAoZXh0NF9mc2Jsa190KSBlbnRyeS0+Z3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpCisJCQkrIGVudHJ5LT5zdGFydF9ibGsKKwkJCSsgbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCXRyYWNlX21hcmsoZXh0NF9kaXNjYXJkX2Jsb2NrcywgImRldiAlcyBibGsgJWxsdSBjb3VudCAldSIsIHNiLT5zX2lkLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzY2FyZF9ibG9jaywgZW50cnktPmNvdW50KTsKKwkJc2JfaXNzdWVfZGlzY2FyZChzYiwgZGlzY2FyZF9ibG9jaywgZW50cnktPmNvdW50KTsKIAotCQkvKiBiYWxhbmNlIHJlZmNvdW50cyBmcm9tIGV4dDRfbWJfZnJlZV9tZXRhZGF0YSgpICovCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYnVkZHlfcGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYml0bWFwX3BhZ2UpOwotCi0JCWtmcmVlKG1kKTsKKwkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CiAJCWV4dDRfbWJfcmVsZWFzZV9kZXNjKCZlNGIpOwotCi0JfSB3aGlsZSAobWQpOworCX0KIAogCW1iX2RlYnVnKCJmcmVlZCAldSBibG9ja3MgaW4gJXUgc3RydWN0dXJlc1xuIiwgY291bnQsIGNvdW50Mik7CiB9CkBAIC0yNzEyLDYgKzI2OTksNyBAQAogCiBzdGF0aWMgaW50IGV4dDRfbWJfaW5pdF9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKQEAgLTI3MzUsMTAgKzI3MjMsMTQgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01BWF9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX1NUQVRTX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZXR1cm4gLUVOT01FTTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKIAogCWlmIChzYmktPnNfcHJvYyA9PSBOVUxMKQpAQCAtMjc1MCw3ICsyNzQyLDcgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01JTl9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01BWF9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX1NUQVRTX05BTUUsIHNiaS0+c19wcm9jKTsKLQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NzEsNiArMjc2MywxNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9wc3BhY2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJZXh0NF9mcmVlX2V4dF9jYWNoZXAgPQorCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZXh0NF9mcmVlX2Jsb2NrX2V4dGVudHMiLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSksCisJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgTlVMTCk7CisJaWYgKGV4dDRfZnJlZV9leHRfY2FjaGVwID09IE5VTEwpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CisJCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2FjX2NhY2hlcCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc3OSw2ICsyNzgxLDcgQEAKIAkvKiBYWFg6IHN5bmNocm9uaXplX3JjdSgpOyAqLwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X3BzcGFjZV9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2FjX2NhY2hlcCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfZnJlZV9leHRfY2FjaGVwKTsKIH0KIAogCkBAIC00MzI0LDggKzQzMjcsNiBAQAogCQlnb3RvIG91dDE7CiAJfQogCi0JZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzYiwgaGFuZGxlKTsKLQogCSplcnJwID0gZXh0NF9tYl9pbml0aWFsaXplX2NvbnRleHQoYWMsIGFyKTsKIAlpZiAoKmVycnApIHsKIAkJYXItPmxlbiA9IDA7CkBAIC00Mzg0LDM1ICs0Mzg1LDIwIEBACiAKIAlyZXR1cm4gYmxvY2s7CiB9Ci1zdGF0aWMgdm9pZCBleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJCQloYW5kbGVfdCAqaGFuZGxlKQorCisvKgorICogV2UgY2FuIG1lcmdlIHR3byBmcmVlIGRhdGEgZXh0ZW50cyBvbmx5IGlmIHRoZSBwaHlzaWNhbCBibG9ja3MKKyAqIGFyZSBjb250aWd1b3VzLCBBTkQgdGhlIGV4dGVudHMgd2VyZSBmcmVlZCBieSB0aGUgc2FtZSB0cmFuc2FjdGlvbiwKKyAqIEFORCB0aGUgYmxvY2tzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbnQgY2FuX21lcmdlKHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnkxLAorCQkJc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTIpCiB7Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0KLQlpZiAoc2JpLT5zX2xhc3RfdHJhbnNhY3Rpb24gPT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCkKLQkJcmV0dXJuOwotCi0JLyogbmV3IHRyYW5zYWN0aW9uISB0aW1lIHRvIGNsb3NlIGxhc3Qgb25lIGFuZCBmcmVlIGJsb2NrcyBmb3IKLQkgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24uIHdlIGtub3cgdGhhdCBvbmx5IHRyYW5zYWN0aW9uIGNhbiBiZQotCSAqIGFjdGl2ZSwgc28gcHJldmlvcyB0cmFuc2FjdGlvbiBjYW4gYmUgYmVpbmcgbG9nZ2VkIGFuZCB3ZQotCSAqIGtub3cgdGhhdCB0cmFuc2FjdGlvbiBiZWZvcmUgcHJldmlvdXMgaXMga25vd24gdG8gYmUgYWxyZWFkeQotCSAqIGxvZ2dlZC4gdGhpcyBtZWFucyB0aGF0IG5vdyB3ZSBtYXkgZnJlZSBibG9ja3MgZnJlZWQgaW4gYWxsCi0JICogdHJhbnNhY3Rpb25zIGJlZm9yZSBwcmV2aW91cyBvbmUuIGhvcGUgSSdtIGNsZWFyIGVub3VnaCAuLi4gKi8KLQotCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCWlmIChzYmktPnNfbGFzdF90cmFuc2FjdGlvbiAhPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKSB7Ci0JCW1iX2RlYnVnKCJuZXcgdHJhbnNhY3Rpb24gJWx1LCBvbGQgJWx1XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkLAotCQkJCSh1bnNpZ25lZCBsb25nKSBzYmktPnNfbGFzdF90cmFuc2FjdGlvbik7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24sCi0JCQkJJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwotCQlsaXN0X3NwbGljZV9pbml0KCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uLAotCQkJCSZzYmktPnNfY2xvc2VkX3RyYW5zYWN0aW9uKTsKLQkJc2JpLT5zX2xhc3RfdHJhbnNhY3Rpb24gPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkOwotCX0KLQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOwotCi0JZXh0NF9tYl9mcmVlX2NvbW1pdHRlZF9ibG9ja3Moc2IpOworCWlmICgoZW50cnkxLT50X3RpZCA9PSBlbnRyeTItPnRfdGlkKSAmJgorCSAgICAoZW50cnkxLT5ncm91cCA9PSBlbnRyeTItPmdyb3VwKSAmJgorCSAgICAoKGVudHJ5MS0+c3RhcnRfYmxrICsgZW50cnkxLT5jb3VudCkgPT0gZW50cnkyLT5zdGFydF9ibGspKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQKQEAgLTQ0MjIsNTcgKzQ0MDgsODAgQEAKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpkYiA9IGU0Yi0+YmRfaW5mbzsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZTRiLT5iZF9zYjsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICptZDsKLQlpbnQgaTsKKwlzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEgKmVudHJ5LCAqbmV3X2VudHJ5OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZkYi0+YmJfZnJlZV9yb290LnJiX25vZGUsICpub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMLCAqbmV3X25vZGU7CisKIAogCUJVR19PTihlNGItPmJkX2JpdG1hcF9wYWdlID09IE5VTEwpOwogCUJVR19PTihlNGItPmJkX2J1ZGR5X3BhZ2UgPT0gTlVMTCk7CiAKKwluZXdfZW50cnkgID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2ZyZWVfZXh0X2NhY2hlcCwgR0ZQX05PRlMpOworCW5ld19lbnRyeS0+c3RhcnRfYmxrID0gYmxvY2s7CisJbmV3X2VudHJ5LT5ncm91cCAgPSBncm91cDsKKwluZXdfZW50cnktPmNvdW50ID0gY291bnQ7CisJbmV3X2VudHJ5LT50X3RpZCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7CisJbmV3X25vZGUgPSAmbmV3X2VudHJ5LT5ub2RlOworCiAJZXh0NF9sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJbWQgPSBkYi0+YmJfbWRfY3VyOwotCQlpZiAobWQgJiYgZGItPmJiX3RpZCAhPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKSB7Ci0JCQlkYi0+YmJfbWRfY3VyID0gTlVMTDsKLQkJCW1kID0gTlVMTDsKLQkJfQotCi0JCWlmIChtZCA9PSBOVUxMKSB7Ci0JCQlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApOwotCQkJbWQgPSBrbWFsbG9jKHNpemVvZigqbWQpLCBHRlBfTk9GUyk7Ci0JCQlpZiAobWQgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW1kLT5udW0gPSAwOwotCQkJbWQtPmdyb3VwID0gZ3JvdXA7Ci0KLQkJCWV4dDRfbG9ja19ncm91cChzYiwgZ3JvdXApOwotCQkJaWYgKGRiLT5iYl9tZF9jdXIgPT0gTlVMTCkgewotCQkJCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCQkJCWxpc3RfYWRkKCZtZC0+bGlzdCwgJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24pOwotCQkJCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JCQkJLyogcHJvdGVjdCBidWRkeSBjYWNoZSBmcm9tIGJlaW5nIGZyZWVkLAotCQkJCSAqIG90aGVyd2lzZSB3ZSdsbCByZWZyZXNoIGl0IGZyb20KLQkJCQkgKiBvbi1kaXNrIGJpdG1hcCBhbmQgbG9zZSBub3QteWV0LWF2YWlsYWJsZQotCQkJCSAqIGJsb2NrcyAqLwotCQkJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYnVkZHlfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9nZXQoZTRiLT5iZF9iaXRtYXBfcGFnZSk7Ci0JCQkJZGItPmJiX21kX2N1ciA9IG1kOwotCQkJCWRiLT5iYl90aWQgPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkOwotCQkJCW1iX2RlYnVnKCJuZXcgbWQgMHglcCBmb3IgZ3JvdXAgJWx1XG4iLAotCQkJCQkJbWQsIG1kLT5ncm91cCk7Ci0JCQl9IGVsc2UgewotCQkJCWtmcmVlKG1kKTsKLQkJCQltZCA9IGRiLT5iYl9tZF9jdXI7Ci0JCQl9Ci0JCX0KLQotCQlCVUdfT04obWQtPm51bSA+PSBFWFQ0X0JCX01BWF9CTE9DS1MpOwotCQltZC0+YmxvY2tzW21kLT5udW1dID0gYmxvY2sgKyBpOwotCQltZC0+bnVtKys7Ci0JCWlmIChtZC0+bnVtID09IEVYVDRfQkJfTUFYX0JMT0NLUykgewotCQkJLyogbm8gbW9yZSBzcGFjZSwgcHV0IGZ1bGwgY29udGFpbmVyIG9uIGEgc2IncyBsaXN0ICovCi0JCQlkYi0+YmJfbWRfY3VyID0gTlVMTDsKKwlpZiAoISpuKSB7CisJCS8qIGZpcnN0IGZyZWUgYmxvY2sgZXhlbnQuIFdlIG5lZWQgdG8KKwkJICAgcHJvdGVjdCBidWRkeSBjYWNoZSBmcm9tIGJlaW5nIGZyZWVkLAorCQkgKiBvdGhlcndpc2Ugd2UnbGwgcmVmcmVzaCBpdCBmcm9tCisJCSAqIG9uLWRpc2sgYml0bWFwIGFuZCBsb3NlIG5vdC15ZXQtYXZhaWxhYmxlCisJCSAqIGJsb2NrcyAqLworCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2J1ZGR5X3BhZ2UpOworCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2JpdG1hcF9wYWdlKTsKKwl9CisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCQllbnRyeSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBub2RlKTsKKwkJaWYgKGJsb2NrIDwgZW50cnktPnN0YXJ0X2JsaykKKwkJCW4gPSAmKCpuKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYmxvY2sgPj0gKGVudHJ5LT5zdGFydF9ibGsgKyBlbnRyeS0+Y291bnQpKQorCQkJbiA9ICYoKm4pLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCSAgICAiRG91YmxlIGZyZWUgb2YgYmxvY2tzICVkICglZCAlZClcbiIsCisJCQkgICAgYmxvY2ssIGVudHJ5LT5zdGFydF9ibGssIGVudHJ5LT5jb3VudCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KKworCXJiX2xpbmtfbm9kZShuZXdfbm9kZSwgcGFyZW50LCBuKTsKKwlyYl9pbnNlcnRfY29sb3IobmV3X25vZGUsICZkYi0+YmJfZnJlZV9yb290KTsKKworCS8qIE5vdyB0cnkgdG8gc2VlIHRoZSBleHRlbnQgY2FuIGJlIG1lcmdlZCB0byBsZWZ0IGFuZCByaWdodCAqLworCW5vZGUgPSByYl9wcmV2KG5ld19ub2RlKTsKKwlpZiAobm9kZSkgeworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbm9kZSk7CisJCWlmIChjYW5fbWVyZ2UoZW50cnksIG5ld19lbnRyeSkpIHsKKwkJCW5ld19lbnRyeS0+c3RhcnRfYmxrID0gZW50cnktPnN0YXJ0X2JsazsKKwkJCW5ld19lbnRyeS0+Y291bnQgKz0gZW50cnktPmNvdW50OworCQkJcmJfZXJhc2Uobm9kZSwgJihkYi0+YmJfZnJlZV9yb290KSk7CisJCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CisJCX0KKwl9CisKKwlub2RlID0gcmJfbmV4dChuZXdfbm9kZSk7CisJaWYgKG5vZGUpIHsKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEsIG5vZGUpOworCQlpZiAoY2FuX21lcmdlKG5ld19lbnRyeSwgZW50cnkpKSB7CisJCQluZXdfZW50cnktPmNvdW50ICs9IGVudHJ5LT5jb3VudDsKKwkJCXJiX2VyYXNlKG5vZGUsICYoZGItPmJiX2ZyZWVfcm9vdCkpOworCQkJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWttZW1fY2FjaGVfZnJlZShleHQ0X2ZyZWVfZXh0X2NhY2hlcCwgZW50cnkpOworCQl9CisJfQorCS8qIEFkZCB0aGUgZXh0ZW50IHRvIHRyYW5zYWN0aW9uJ3MgcHJpdmF0ZSBsaXN0ICovCisJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJbGlzdF9hZGQoJm5ld19lbnRyeS0+bGlzdCwgJmhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9wcml2YXRlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7CiAJZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MDAsOCArNDUwOSw2IEBACiAKIAkqZnJlZWQgPSAwOwogCi0JZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzYiwgaGFuZGxlKTsKLQogCXNiaSA9IEVYVDRfU0Ioc2IpOwogCWVzID0gRVhUNF9TQihzYiktPnNfZXM7CiAJaWYgKGJsb2NrIDwgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggYjNiNDgyOC4uYjVkZmYxZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCiAjaW5jbHVkZSAiZXh0NC5oIgogI2luY2x1ZGUgImdyb3VwLmgiCkBAIC05OCwyMyArMTAwLDI5IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9wc3BhY2VfY2FjaGVwOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2FjX2NhY2hlcDsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9mcmVlX2V4dF9jYWNoZXA7CiAKLSNpZmRlZiBFWFQ0X0JCX01BWF9CTE9DS1MKLSN1bmRlZiBFWFQ0X0JCX01BWF9CTE9DS1MKLSNlbmRpZgotI2RlZmluZSBFWFQ0X0JCX01BWF9CTE9DS1MJMzAKK3N0cnVjdCBleHQ0X2ZyZWVfZGF0YSB7CisJLyogdGhpcyBsaW5rcyB0aGUgZnJlZSBibG9jayBpbmZvcm1hdGlvbiBmcm9tIGdyb3VwX2luZm8gKi8KKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogCi1zdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhIHsKLQlleHQ0X2dyb3VwX3QgZ3JvdXA7Ci0JdW5zaWduZWQgc2hvcnQgbnVtOwotCWV4dDRfZ3JwYmxrX3QgIGJsb2Nrc1tFWFQ0X0JCX01BWF9CTE9DS1NdOworCS8qIHRoaXMgbGlua3MgdGhlIGZyZWUgYmxvY2sgaW5mb3JtYXRpb24gZnJvbSBleHQ0X3NiX2luZm8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBncm91cCB3aGljaCBmcmVlIGJsb2NrIGV4dGVudCBiZWxvbmdzICovCisJZXh0NF9ncm91cF90IGdyb3VwOworCisJLyogZnJlZSBibG9jayBleHRlbnQgKi8KKwlleHQ0X2dycGJsa190IHN0YXJ0X2JsazsKKwlleHQ0X2dycGJsa190IGNvdW50OworCisJLyogdHJhbnNhY3Rpb24gd2hpY2ggZnJlZWQgdGhpcyBleHRlbnQgKi8KKwl0aWRfdAl0X3RpZDsKIH07CiAKIHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gewogCXVuc2lnbmVkIGxvbmcJYmJfc3RhdGU7Ci0JdW5zaWduZWQgbG9uZwliYl90aWQ7Ci0Jc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSAqYmJfbWRfY3VyOworCXN0cnVjdCByYl9yb290ICBiYl9mcmVlX3Jvb3Q7CiAJdW5zaWduZWQgc2hvcnQJYmJfZmlyc3RfZnJlZTsKIAl1bnNpZ25lZCBzaG9ydAliYl9mcmVlOwogCXVuc2lnbmVkIHNob3J0CWJiX2ZyYWdtZW50czsKQEAgLTI2MSw4ICsyNjksNiBAQAogCiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLAogCQkJCQlleHQ0X2dyb3VwX3QgZ3JvdXApOwotc3RhdGljIHZvaWQgZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaGFuZGxlX3QgKik7Ci1zdGF0aWMgdm9pZCBleHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgdm9pZCBleHQ0X21iX3JldHVybl90b19wcmVhbGxvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHNlY3Rvcl90IGJsb2NrLAogCQkJCQlpbnQgY291bnQpOwpAQCAtMjcwLDYgKzI3Niw3IEBACiAJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKTsKIHN0YXRpYyBpbnQgZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBpbnQgZXh0NF9tYl9kZXN0cm95X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKnR4bik7CiAKIAogc3RhdGljIGlubGluZSB2b2lkIGV4dDRfbG9ja19ncm91cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3QgZ3JvdXApCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZGVhOGYxMy4uOWIyYjJiYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzc0LDY2ICszNzQsNiBAQAogCSAqLwogfQogCi1pbnQgZXh0NF91cGRhdGVfY29tcGF0X2ZlYXR1cmUoaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIGNvbXBhdCkpIHsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlFWFQ0X1NFVF9DT01QQVRfRkVBVFVSRShzYiwgY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIHJvY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIHJvY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCByb2NvbXBhdCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCQloYW5kbGUtPmhfc3luYyA9IDE7Ci0JCUJVRkZFUl9UUkFDRShFWFQ0X1NCKHNiKS0+c19zYmgsCi0JCQkJCSJjYWxsIGV4dDRfam91cm5hbF9kaXJ0eV9tZXQgYWRhdGEiKTsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgZXh0NF91cGRhdGVfaW5jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBpbmNvbXBhdCkKLXsKLQlpbnQgZXJyID0gMDsKLQlpZiAoIUVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIGluY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIGluY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiBPcGVuIHRoZSBleHRlcm5hbCBqb3VybmFsIGRldmljZQogICovCkBAIC05MDQsNyArODQ0LDcgQEAKIGVudW0gewogCU9wdF9ic2RfZGYsIE9wdF9taW5peF9kZiwgT3B0X2dycGlkLCBPcHRfbm9ncnBpZCwKIAlPcHRfcmVzZ2lkLCBPcHRfcmVzdWlkLCBPcHRfc2IsIE9wdF9lcnJfY29udCwgT3B0X2Vycl9wYW5pYywgT3B0X2Vycl9ybywKLQlPcHRfbm91aWQzMiwgT3B0X25vY2hlY2ssIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCisJT3B0X25vdWlkMzIsIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9ub3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9ub2FjbCwKIAlPcHRfcmVzZXJ2YXRpb24sIE9wdF9ub3Jlc2VydmF0aW9uLCBPcHRfbm9sb2FkLCBPcHRfbm9iaCwgT3B0X2JoLAogCU9wdF9jb21taXQsIE9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfaW51bSwgT3B0X2pvdXJuYWxfZGV2LApAQCAtOTE1LDcgKzg1NSw3IEBACiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLCBPcHRfdXNycXVvdGEsCiAJT3B0X2dycHF1b3RhLCBPcHRfZXh0ZW50cywgT3B0X25vZXh0ZW50cywgT3B0X2lfdmVyc2lvbiwKLQlPcHRfbWJhbGxvYywgT3B0X25vbWJhbGxvYywgT3B0X3N0cmlwZSwgT3B0X2RlbGFsbG9jLCBPcHRfbm9kZWxhbGxvYywKKwlPcHRfc3RyaXBlLCBPcHRfZGVsYWxsb2MsIE9wdF9ub2RlbGFsbG9jLAogCU9wdF9pbm9kZV9yZWFkYWhlYWRfYmxrcwogfTsKIApAQCAtOTMzLDggKzg3Myw2IEBACiAJe09wdF9lcnJfcGFuaWMsICJlcnJvcnM9cGFuaWMifSwKIAl7T3B0X2Vycl9ybywgImVycm9ycz1yZW1vdW50LXJvIn0sCiAJe09wdF9ub3VpZDMyLCAibm91aWQzMiJ9LAotCXtPcHRfbm9jaGVjaywgIm5vY2hlY2sifSwKLQl7T3B0X25vY2hlY2ssICJjaGVjaz1ub25lIn0sCiAJe09wdF9kZWJ1ZywgImRlYnVnIn0sCiAJe09wdF9vbGRhbGxvYywgIm9sZGFsbG9jIn0sCiAJe09wdF9vcmxvdiwgIm9ybG92In0sCkBAIC05NzMsOCArOTExLDYgQEAKIAl7T3B0X2V4dGVudHMsICJleHRlbnRzIn0sCiAJe09wdF9ub2V4dGVudHMsICJub2V4dGVudHMifSwKIAl7T3B0X2lfdmVyc2lvbiwgImlfdmVyc2lvbiJ9LAotCXtPcHRfbWJhbGxvYywgIm1iYWxsb2MifSwKLQl7T3B0X25vbWJhbGxvYywgIm5vbWJhbGxvYyJ9LAogCXtPcHRfc3RyaXBlLCAic3RyaXBlPSV1In0sCiAJe09wdF9yZXNpemUsICJyZXNpemUifSwKIAl7T3B0X2RlbGFsbG9jLCAiZGVsYWxsb2MifSwKQEAgLTEwNzMsOSArMTAwOSw2IEBACiAJCWNhc2UgT3B0X25vdWlkMzI6CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PX1VJRDMyKTsKIAkJCWJyZWFrOwotCQljYXNlIE9wdF9ub2NoZWNrOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIENIRUNLKTsKLQkJCWJyZWFrOwogCQljYXNlIE9wdF9kZWJ1ZzoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREVCVUcpOwogCQkJYnJlYWs7CkBAIC0xNjE4LDE0ICsxNTUxLDE0IEBACiAJCWlmIChibG9ja19iaXRtYXAgPCBmaXJzdF9ibG9jayB8fCBibG9ja19iaXRtYXAgPiBsYXN0X2Jsb2NrKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGV4dDRfY2hlY2tfZGVzY3JpcHRvcnM6ICIKIAkJCSAgICAgICAiQmxvY2sgYml0bWFwIGZvciBncm91cCAlbHUgbm90IGluIGdyb3VwICIKLQkJCSAgICAgICAiKGJsb2NrICVsbHUpISIsIGksIGJsb2NrX2JpdG1hcCk7CisJCQkgICAgICAgIihibG9jayAlbGx1KSFcbiIsIGksIGJsb2NrX2JpdG1hcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpbm9kZV9iaXRtYXAgPSBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKTsKIAkJaWYgKGlub2RlX2JpdG1hcCA8IGZpcnN0X2Jsb2NrIHx8IGlub2RlX2JpdG1hcCA+IGxhc3RfYmxvY2spIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZXh0NF9jaGVja19kZXNjcmlwdG9yczogIgogCQkJICAgICAgICJJbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVsdSBub3QgaW4gZ3JvdXAgIgotCQkJICAgICAgICIoYmxvY2sgJWxsdSkhIiwgaSwgaW5vZGVfYml0bWFwKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgaW5vZGVfYml0bWFwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlub2RlX3RhYmxlID0gZXh0NF9pbm9kZV90YWJsZShzYiwgZ2RwKTsKQEAgLTE2MzMsNyArMTU2Niw3IEBACiAJCSAgICBpbm9kZV90YWJsZSArIHNiaS0+c19pdGJfcGVyX2dyb3VwIC0gMSA+IGxhc3RfYmxvY2spIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZXh0NF9jaGVja19kZXNjcmlwdG9yczogIgogCQkJICAgICAgICJJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWx1IG5vdCBpbiBncm91cCAiCi0JCQkgICAgICAgIihibG9jayAlbGx1KSEiLCBpLCBpbm9kZV90YWJsZSk7CisJCQkgICAgICAgIihibG9jayAlbGx1KSFcbiIsIGksIGlub2RlX3RhYmxlKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGkpKTsKQEAgLTE3NzgsMTMgKzE3MTEsMTMgQEAKICAqCiAgKiBOb3RlLCB0aGlzIGRvZXMgKm5vdCogY29uc2lkZXIgYW55IG1ldGFkYXRhIG92ZXJoZWFkIGZvciB2ZnMgaV9ibG9ja3MuCiAgKi8KLXN0YXRpYyBsb2ZmX3QgZXh0NF9tYXhfc2l6ZShpbnQgYmxrYml0cykKK3N0YXRpYyBsb2ZmX3QgZXh0NF9tYXhfc2l6ZShpbnQgYmxrYml0cywgaW50IGhhc19odWdlX2ZpbGVzKQogewogCWxvZmZfdCByZXM7CiAJbG9mZl90IHVwcGVyX2xpbWl0ID0gTUFYX0xGU19GSUxFU0laRTsKIAogCS8qIHNtYWxsIGlfYmxvY2tzIGluIHZmcyBpbm9kZT8gKi8KLQlpZiAoc2l6ZW9mKGJsa2NudF90KSA8IHNpemVvZih1NjQpKSB7CisJaWYgKCFoYXNfaHVnZV9maWxlcyB8fCBzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKIAkJLyoKIAkJICogQ09ORklHX0xTRiBpcyBub3QgZW5hYmxlZCBpbXBsaWVzIHRoZSBpbm9kZQogCQkgKiBpX2Jsb2NrIHJlcHJlc2VudCB0b3RhbCBibG9ja3MgaW4gNTEyIGJ5dGVzCkBAIC0xODE0LDcgKzE3NDcsNyBAQAogICogYmxvY2sgbGltaXQsIGFuZCBhbHNvIGEgbGltaXQgb2YgKDJeNDggLSAxKSA1MTItYnl0ZSBzZWN0b3JzIGluIGlfYmxvY2tzLgogICogV2UgbmVlZCB0byBiZSAxIGZpbGVzeXN0ZW0gYmxvY2sgbGVzcyB0aGFuIHRoZSAyXjQ4IHNlY3RvciBsaW1pdC4KICAqLwotc3RhdGljIGxvZmZfdCBleHQ0X21heF9iaXRtYXBfc2l6ZShpbnQgYml0cykKK3N0YXRpYyBsb2ZmX3QgZXh0NF9tYXhfYml0bWFwX3NpemUoaW50IGJpdHMsIGludCBoYXNfaHVnZV9maWxlcykKIHsKIAlsb2ZmX3QgcmVzID0gRVhUNF9ORElSX0JMT0NLUzsKIAlpbnQgbWV0YV9ibG9ja3M7CkBAIC0xODI3LDExICsxNzYwLDExIEBACiAJICogdG90YWwgbnVtYmVyIG9mICA1MTIgYnl0ZXMgYmxvY2tzIG9mIHRoZSBmaWxlCiAJICovCiAKLQlpZiAoc2l6ZW9mKGJsa2NudF90KSA8IHNpemVvZih1NjQpKSB7CisJaWYgKCFoYXNfaHVnZV9maWxlcyB8fCBzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKIAkJLyoKLQkJICogQ09ORklHX0xTRiBpcyBub3QgZW5hYmxlZCBpbXBsaWVzIHRoZSBpbm9kZQotCQkgKiBpX2Jsb2NrIHJlcHJlc2VudCB0b3RhbCBibG9ja3MgaW4gNTEyIGJ5dGVzCi0JCSAqIDMyID09IHNpemUgb2YgdmZzIGlub2RlIGlfYmxvY2tzICogOAorCQkgKiAhaGFzX2h1Z2VfZmlsZXMgb3IgQ09ORklHX0xTRiBpcyBub3QgZW5hYmxlZAorCQkgKiBpbXBsaWVzIHRoZSBpbm9kZSBpX2Jsb2NrIHJlcHJlc2VudCB0b3RhbCBibG9ja3MgaW4KKwkJICogNTEyIGJ5dGVzIDMyID09IHNpemUgb2YgdmZzIGlub2RlIGlfYmxvY2tzICogOAogCQkgKi8KIAkJdXBwZXJfbGltaXQgPSAoMUxMIDw8IDMyKSAtIDE7CiAKQEAgLTE5NDAsNyArMTg3Myw3IEBACiAJaW50IGJsb2Nrc2l6ZTsKIAlpbnQgZGJfY291bnQ7CiAJaW50IGk7Ci0JaW50IG5lZWRzX3JlY292ZXJ5OworCWludCBuZWVkc19yZWNvdmVyeSwgaGFzX2h1Z2VfZmlsZXM7CiAJX19sZTMyIGZlYXR1cmVzOwogCV9fdTY0IGJsb2Nrc19jb3VudDsKIAlpbnQgZXJyOwpAQCAtMjA4MSw3ICsyMDE0LDkgQEAKIAkJICAgICAgIHNiLT5zX2lkLCBsZTMyX3RvX2NwdShmZWF0dXJlcykpOwogCQlnb3RvIGZhaWxlZF9tb3VudDsKIAl9Ci0JaWYgKEVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkpIHsKKwloYXNfaHVnZV9maWxlcyA9IEVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAorCQkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSk7CisJaWYgKGhhc19odWdlX2ZpbGVzKSB7CiAJCS8qCiAJCSAqIExhcmdlIGZpbGUgc2l6ZSBlbmFibGVkIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlCiAJCSAqIG1vdW50IGlmIGtlcm5lbCBpcyBidWlsZCB3aXRoIENPTkZJR19MU0YKQEAgLTIxMzEsOCArMjA2Niw5IEBACiAJCX0KIAl9CiAKLQlzYmktPnNfYml0bWFwX21heGJ5dGVzID0gZXh0NF9tYXhfYml0bWFwX3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCXNiLT5zX21heGJ5dGVzID0gZXh0NF9tYXhfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cyk7CisJc2JpLT5zX2JpdG1hcF9tYXhieXRlcyA9IGV4dDRfbWF4X2JpdG1hcF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLAorCQkJCQkJICAgICAgaGFzX2h1Z2VfZmlsZXMpOworCXNiLT5zX21heGJ5dGVzID0gZXh0NF9tYXhfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cywgaGFzX2h1Z2VfZmlsZXMpOwogCiAJaWYgKGxlMzJfdG9fY3B1KGVzLT5zX3Jldl9sZXZlbCkgPT0gRVhUNF9HT09EX09MRF9SRVYpIHsKIAkJc2JpLT5zX2lub2RlX3NpemUgPSBFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkU7CkBAIC0yNDU2LDYgKzIzOTIsMjEgQEAKIAkJCSJhdmFpbGFibGUuXG4iKTsKIAl9CiAKKwlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnM6IElnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKKwkJCQkicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlXG4iKTsKKwkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKKwl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCisJCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGRlbGF5ZWQgYWxsb2NhdGlvbiBlbmFibGVkXG4iKTsKKworCWV4dDRfZXh0X2luaXQoc2IpOworCWVyciA9IGV4dDRfbWJfaW5pdChzYiwgbmVlZHNfcmVjb3ZlcnkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBmYWlsZWQgdG8gaW5pdGFsaXplIG1iYWxsb2MgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gZmFpbGVkX21vdW50NDsKKwl9CisKIAkvKgogCSAqIGFrcG06IGNvcmUgcmVhZF9zdXBlcigpIGNhbGxzIGluIGhlcmUgd2l0aCB0aGUgc3VwZXJibG9jayBsb2NrZWQuCiAJICogVGhhdCBkZWFkbG9ja3MsIGJlY2F1c2Ugb3JwaGFuIGNsZWFudXAgbmVlZHMgdG8gbG9jayB0aGUgc3VwZXJibG9jawpAQCAtMjQ3NSwyMSArMjQyNiw2IEBACiAJICAgICAgIHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX09SREVSRURfREFUQSA/ICJvcmRlcmVkIjoKIAkgICAgICAgIndyaXRlYmFjayIpOwogCi0JaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQ0LWZzOiBJZ25vcmluZyBkZWxhbGxvYyBvcHRpb24gLSAiCi0JCQkJInJlcXVlc3RlZCBkYXRhIGpvdXJuYWxpbmcgbW9kZVxuIik7Ci0JCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBERUxBTExPQyk7Ci0JfSBlbHNlIGlmICh0ZXN0X29wdChzYiwgREVMQUxMT0MpKQotCQlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBkZWxheWVkIGFsbG9jYXRpb24gZW5hYmxlZFxuIik7Ci0KLQlleHQ0X2V4dF9pbml0KHNiKTsKLQllcnIgPSBleHQ0X21iX2luaXQoc2IsIG5lZWRzX3JlY292ZXJ5KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZmFpbGVkIHRvIGluaXRhbGl6ZSBtYmFsbG9jICglZClcbiIsCi0JCSAgICAgICBlcnIpOwotCQlnb3RvIGZhaWxlZF9tb3VudDQ7Ci0JfQotCiAJbG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCAyNWFkZmMzLi5kMGZmMGI4IDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtOCw3ICs4LDcgQEAKICAqIHBhZ2VzIGFnYWluc3QgaW5vZGVzLiAgaWU6IGRhdGEgd3JpdGViYWNrLiAgV3JpdGVvdXQgb2YgdGhlCiAgKiBpbm9kZSBpdHNlbGYgaXMgbm90IGhhbmRsZWQgaGVyZS4KICAqCi0gKiAxMEFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxMEFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCVNwbGl0IG91dCBvZiBmcy9pbm9kZS5jCiAgKgkJQWRkaXRpb25zIGZvciBhZGRyZXNzX3NwYWNlLWJhc2VkIHdyaXRlYmFjawogICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDJiYWRhNmIuLjM0OTMwYTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDEsNiArMTAxLDggQEAKIAkJZmlsZS0+Zl9vcCA9ICZmdXNlX2RpcmVjdF9pb19maWxlX29wZXJhdGlvbnM7CiAJaWYgKCEob3V0YXJnLT5vcGVuX2ZsYWdzICYgRk9QRU5fS0VFUF9DQUNIRSkpCiAJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChvdXRhcmctPm9wZW5fZmxhZ3MgJiBGT1BFTl9OT05TRUVLQUJMRSkKKwkJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJZmYtPmZoID0gb3V0YXJnLT5maDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmdXNlX2ZpbGVfZ2V0KGZmKTsKIH0KQEAgLTE0NDgsNiArMTQ1MCw5IEBACiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJY2FzZSBTRUVLX0VORDoKKwkJcmV0dmFsID0gZnVzZV91cGRhdGVfYXR0cmlidXRlcyhpbm9kZSwgTlVMTCwgZmlsZSwgTlVMTCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOwogCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlicmVhazsKIAljYXNlIFNFRUtfQ1VSOgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggM2E4NzYwNy4uMzVhY2NmZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC02LDYgKzYsOSBAQAogICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KICovCiAKKyNpZm5kZWYgX0ZTX0ZVU0VfSV9ICisjZGVmaW5lIF9GU19GVVNFX0lfSAorCiAjaW5jbHVkZSA8bGludXgvZnVzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTY1NSwzICs2NTgsNSBAQAogdm9pZCBmdXNlX3JlbGVhc2Vfbm93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogdTY0IGZ1c2VfZ2V0X2F0dHJfdmVyc2lvbihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CisKKyNlbmRpZiAvKiBfRlNfRlVTRV9JX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA2YTg0Mzg4Li41NGIxZjBlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC04NjUsNyArODY1LDcgQEAKIAlpZiAoaXNfYmRldikgewogCQlmYy0+ZGVzdHJveV9yZXEgPSBmdXNlX3JlcXVlc3RfYWxsb2MoKTsKIAkJaWYgKCFmYy0+ZGVzdHJveV9yZXEpCi0JCQlnb3RvIGVycl9wdXRfcm9vdDsKKwkJCWdvdG8gZXJyX2ZyZWVfaW5pdF9yZXE7CiAJfQogCiAJbXV0ZXhfbG9jaygmZnVzZV9tdXRleCk7CkBAIC04OTUsNiArODk1LDcgQEAKIAogIGVycl91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdXNlX211dGV4KTsKKyBlcnJfZnJlZV9pbml0X3JlcToKIAlmdXNlX3JlcXVlc3RfZnJlZShpbml0X3JlcSk7CiAgZXJyX3B1dF9yb290OgogCWRwdXQocm9vdF9kZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2NhdGFsb2cuYyBiL2ZzL2hmcy9jYXRhbG9nLmMKaW5kZXggYmE4NTE1Ny4uNmQ5OGYxMSAxMDA2NDQKLS0tIGEvZnMvaGZzL2NhdGFsb2cuYworKysgYi9mcy9oZnMvY2F0YWxvZy5jCkBAIC0xOTAsNiArMTkwLDEwIEBACiAKIAlmZC0+c2VhcmNoX2tleS0+Y2F0LlBhcklEID0gcmVjLnRocmVhZC5QYXJJRDsKIAlsZW4gPSBmZC0+c2VhcmNoX2tleS0+Y2F0LkNOYW1lLmxlbiA9IHJlYy50aHJlYWQuQ05hbWUubGVuOworCWlmIChsZW4gPiBIRlNfTkFNRUxFTikgeworCQlwcmludGsoS0VSTl9FUlIgImhmczogYmFkIGNhdGFsb2cgbmFtZWxlbmd0aFxuIik7CisJCXJldHVybiAtRUlPOworCX0KIAltZW1jcHkoZmQtPnNlYXJjaF9rZXktPmNhdC5DTmFtZS5uYW1lLCByZWMudGhyZWFkLkNOYW1lLm5hbWUsIGxlbik7CiAJcmV0dXJuIGhmc19icmVjX2ZpbmQoZmQpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggZDEyOGEyNWIuLmVhMzBhZmMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKKysrIGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAltdXRleF9sb2NrKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX211dGV4KTsKIAltYXBwaW5nID0gSEZTUExVU19TQihzYikuYWxsb2NfZmlsZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsIE5VTEwpOworCWlmIChJU19FUlIocGFnZSkpIHsKKwkJc3RhcnQgPSBzaXplOworCQlnb3RvIG91dDsKKwl9CiAJcHB0ciA9IGttYXAocGFnZSk7CiAJY3VyciA9IHBwdHIgKyAob2Zmc2V0ICYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyOwogCWkgPSBvZmZzZXQgJSAzMjsKQEAgLTczLDYgKzc3LDEwIEBACiAJCQlicmVhazsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCQkJIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlzdGFydCA9IHNpemU7CisJCQlnb3RvIG91dDsKKwkJfQogCQljdXJyID0gcHB0ciA9IGttYXAocGFnZSk7CiAJCWlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpCiAJCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0xMjAsNiArMTI4LDEwIEBACiAJCW9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7CiAJCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsCiAJCQkJCSBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJc3RhcnQgPSBzaXplOworCQkJZ290byBvdXQ7CisJCX0KIAkJcHB0ciA9IGttYXAocGFnZSk7CiAJCWN1cnIgPSBwcHRyOwogCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2NhdGFsb2cuYyBiL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCmluZGV4IGJhMTE3YzQuLmY2ODc0YWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCkBAIC0xNjgsNiArMTY4LDExIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCWlmIChiZTE2X3RvX2NwdSh0bXAudGhyZWFkLm5vZGVOYW1lLmxlbmd0aCkgPiAyNTUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGNhdGFsb2cgbmFtZSBsZW5ndGggY29ycnVwdGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJaGZzcGx1c19jYXRfYnVpbGRfa2V5X3VuaShmZC0+c2VhcmNoX2tleSwgYmUzMl90b19jcHUodG1wLnRocmVhZC5wYXJlbnRJRCksCiAJCQkJICZ0bXAudGhyZWFkLm5vZGVOYW1lKTsKIAlyZXR1cm4gaGZzX2JyZWNfZmluZChmZCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IGZlYzhmNjEuLjAwMjJlZWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0xOTksNiArMTk5LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWlmIChpbm9kZS0+aV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRCkKKwkJcmV0dXJuIC1FSU87CisKIAltdXRleF9sb2NrKCZIRlNQTFVTX0koaW5vZGUpLmV4dGVudHNfbG9jayk7CiAJcmVzID0gaGZzcGx1c19leHRfcmVhZF9leHRlbnQoaW5vZGUsIGFibG9jayk7CiAJaWYgKCFyZXMpIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCBiMDg1ZDY0Li45NjNiZTY0IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0yNTQsNiArMjU0LDggQEAKIHsKIAlpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSkKIAkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLnJzcmNfaW5vZGU7CisJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTEFSR0VGSUxFKSAmJiBpX3NpemVfcmVhZChpbm9kZSkgPiBNQVhfTk9OX0xGUykKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJYXRvbWljX2luYygmSEZTUExVU19JKGlub2RlKS5vcGVuY250KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCBlODM0ZTU3Li5lYjc0NTMxIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAl9IGVsc2UgaWYgKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9TT0ZUTE9DSykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiBGaWxlc3lzdGVtIGlzIG1hcmtlZCBsb2NrZWQsIG1vdW50aW5nIHJlYWQtb25seS5cbiIpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JfSBlbHNlIGlmICh2aGRyLT5hdHRyaWJ1dGVzICYgY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfSk9VUk5BTEVEKSkgeworCX0gZWxzZSBpZiAoKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9KT1VSTkFMRUQpKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IHdyaXRlIGFjY2VzcyB0byBhIGpvdXJuYWxlZCBmaWxlc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQsICIKIAkJICAgICAgICJ1c2UgdGhlIGZvcmNlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLCBtb3VudGluZyByZWFkLW9ubHkuXG4iKTsKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwpkaWZmIC0tZ2l0IGEvZnMvamJkL0tjb25maWcgYi9mcy9qYmQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorY29uZmlnIEpCRAorCXRyaXN0YXRlCisJaGVscAorCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMuICBJdCBpcworCSAgY3VycmVudGx5IHVzZWQgYnkgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlCisJICB1c2VkIHRvIGFkZCBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrCisJICBkZXZpY2VzIHN1Y2ggYXMgUkFJRCBvciBMVk0uCisKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQzIHRoZW4geW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgamJkLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0MyBpbnRvIHRoZSBrZXJuZWwsIHlvdQorCSAgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEX0RFQlVHCisJYm9vbCAiSkJEIChleHQzKSBkZWJ1Z2dpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKKwkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCisJICBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGluIG9yZGVyIHRvCisJICBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLiAgQnkgZGVmYXVsdCB0aGUKKwkgIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIiwgd2hlcmUgTiBpcyBhCisJICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LCB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZworCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KKwkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIi4KZGlmZiAtLWdpdCBhL2ZzL2piZC9jb21taXQuYyBiL2ZzL2piZC9jb21taXQuYwppbmRleCBhZTA4YzA1Li4yNTcxOWQ5IDEwMDY0NAotLS0gYS9mcy9qYmQvY29tbWl0LmMKKysrIGIvZnMvamJkL2NvbW1pdC5jCkBAIC00ODIsNiArNDgyLDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkpCRDogRGV0ZWN0ZWQgSU8gZXJyb3JzIHdoaWxlIGZsdXNoaW5nIGZpbGUgZGF0YSAiCiAJCQkib24gJXNcbiIsIGJkZXZuYW1lKGpvdXJuYWwtPmpfZnNfZGV2LCBiKSk7CisJCWlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUikKKwkJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKIAkJZXJyID0gMDsKIAl9CiAKQEAgLTUxOCw5ICs1MjAsMTAgQEAKIAkJamggPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfYnVmZmVyczsKIAogCQkvKiBJZiB3ZSdyZSBpbiBhYm9ydCBtb2RlLCB3ZSBqdXN0IHVuLWpvdXJuYWwgdGhlIGJ1ZmZlciBhbmQKLQkJICAgcmVsZWFzZSBpdCBmb3IgYmFja2dyb3VuZCB3cml0aW5nLiAqLworCQkgICByZWxlYXNlIGl0LiAqLwogCiAJCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKKwkJCWNsZWFyX2J1ZmZlcl9qYmRkaXJ0eShqaDJiaChqaCkpOwogCQkJSkJVRkZFUl9UUkFDRShqaCwgImpvdXJuYWwgaXMgYWJvcnRpbmc6IHJlZmlsZSIpOwogCQkJam91cm5hbF9yZWZpbGVfYnVmZmVyKGpvdXJuYWwsIGpoKTsKIAkJCS8qIElmIHRoYXQgd2FzIHRoZSBsYXN0IG9uZSwgd2UgbmVlZCB0byBjbGVhbiB1cApAQCAtNzYyLDYgKzc2NSw5IEBACiAJCS8qIEFLUE06IGJmb3JnZXQgaGVyZSAqLwogCX0KIAorCWlmIChlcnIpCisJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKKwogCWpiZF9kZWJ1ZygzLCAiSkJEOiBjb21taXQgcGhhc2UgNlxuIik7CiAKIAlpZiAoam91cm5hbF93cml0ZV9jb21taXRfcmVjb3JkKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbikpCkBAIC04NTIsNiArODU4LDggQEAKIAkJaWYgKGJ1ZmZlcl9qYmRkaXJ0eShiaCkpIHsKIAkJCUpCVUZGRVJfVFJBQ0UoamgsICJhZGQgdG8gbmV3IGNoZWNrcG9pbnRpbmcgdHJhbnMiKTsKIAkJCV9fam91cm5hbF9pbnNlcnRfY2hlY2twb2ludChqaCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKKwkJCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpCisJCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGJoKTsKIAkJCUpCVUZGRVJfVFJBQ0UoamgsICJyZWZpbGUgZm9yIGNoZWNrcG9pbnQgd3JpdGViYWNrIik7CiAJCQlfX2pvdXJuYWxfcmVmaWxlX2J1ZmZlcihqaCk7CiAJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggMDU0MGNhMi4uZDE1Y2Q2ZSAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTk1NCw5ICs5NTQsMTAgQEAKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKIAlpbnQgbmVlZF9icmVsc2UgPSAwOwogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOworCWludCByZXQgPSAwOwogCiAJaWYgKGlzX2hhbmRsZV9hYm9ydGVkKGhhbmRsZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJamggPSBqb3VybmFsX2FkZF9qb3VybmFsX2hlYWQoYmgpOwogCUpCVUZGRVJfVFJBQ0UoamgsICJlbnRyeSIpOwpAQCAtMTA2Nyw3ICsxMDY4LDE2IEBACiAJCQkJICAgdGltZSBpZiBpdCBpcyByZWRpcnRpZWQgKi8KIAkJCX0KIAotCQkJLyogam91cm5hbF9jbGVhbl9kYXRhX2xpc3QoKSBtYXkgaGF2ZSBnb3QgdGhlcmUgZmlyc3QgKi8KKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBidWZmZXIgd2l0aCBpbyBlcnJvciBmcm9tIHRoZQorCQkJICogY29tbWl0dGluZyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQKKwkJCSAqIG1pc3MgdGhlIGVycm9yIGFuZCB0aGUgY29tbWl0IHdvdWxkIG5vdCBhYm9ydC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkgeworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBub19qb3VybmFsOworCQkJfQorCiAJCQlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gTlVMTCkgewogCQkJCUpCVUZGRVJfVFJBQ0UoamgsICJ1bmZpbGUgZnJvbSBjb21taXQiKTsKIAkJCQlfX2pvdXJuYWxfdGVtcF91bmxpbmtfYnVmZmVyKGpoKTsKQEAgLTExMDgsNyArMTExOCw3IEBACiAJfQogCUpCVUZGRVJfVFJBQ0UoamgsICJleGl0Iik7CiAJam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2piZDIvS2NvbmZpZyBiL2ZzL2piZDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJmMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkMi9LY29uZmlnCkBAIC0wLDAgKzEsMzMgQEAKK2NvbmZpZyBKQkQyCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsaW5nIGxheWVyIGZvciBibG9jayBkZXZpY2VzIHRoYXQgc3VwcG9ydAorCSAgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBibG9jayBudW1iZXJzLiAgSXQgaXMgY3VycmVudGx5IHVzZWQgYnkKKwkgIHRoZSBleHQ0IGFuZCBPQ0ZTMiBmaWxlc3lzdGVtcywgYnV0IGl0IGNvdWxkIGFsc28gYmUgdXNlZCB0byBhZGQKKwkgIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sgZGV2aWNlcyBzdWNoCisJICBhcyBSQUlEIG9yIExWTS4KKworCSAgSWYgeW91IGFyZSB1c2luZyBleHQ0IG9yIE9DRlMyLCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlLgorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgZXh0NCBvciBPQ0ZTMiB0aGVuIHlvdSB3aWxsCisJICBwcm9iYWJseSB3YW50IHRvIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBqYmQyLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0NCBvciBPQ0ZTMiBpbnRvIHRoZSBrZXJuZWwsCisJICB5b3UgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEMl9ERUJVRworCWJvb2wgIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSkJEMiAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDQgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvcgorCSAgcG90ZW50aWFsbHkgYW55IG90aGVyIGZpbGVzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRDIpLCB0aGlzIG9wdGlvbgorCSAgYWxsb3dzIHlvdSB0byBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsCisJICBpbiBvcmRlciB0byBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLgorCSAgQnkgZGVmYXVsdCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLCB3aGVyZSBOIGlzIGEKKwkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCisJICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbworCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIuCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCAwYWJlMDJjLi44YjExOWUxIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTk5NSw2ICs5OTUsOSBAQAogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCisJaWYgKGpvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrKQorCQlqb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOworCiAJdHJhY2VfbWFyayhqYmQyX2VuZF9jb21taXQsICJkZXYgJXMgdHJhbnNhY3Rpb24gJWQgaGVhZCAlZCIsCiAJCSAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwKIAkJICAgam91cm5hbC0+al90YWlsX3NlcXVlbmNlKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBlNWQ1NDA1Li4zOWI3ODA1IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC01Miw2ICs1Miw3IEBACiAJdHJhbnNhY3Rpb24tPnRfZXhwaXJlcyA9IGppZmZpZXMgKyBqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbDsKIAlzcGluX2xvY2tfaW5pdCgmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnNhY3Rpb24tPnRfcHJpdmF0ZV9saXN0KTsKIAogCS8qIFNldCB1cCB0aGUgY29tbWl0IHRpbWVyIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAqLwogCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvS2NvbmZpZyBiL2ZzL2pmZnMyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMTY5YwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL0tjb25maWcKQEAgLTAsMCArMSwxODggQEAKK2NvbmZpZyBKRkZTMl9GUworCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJZGVwZW5kcyBvbiBNVEQKKwloZWxwCisJICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCisJICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKKwkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCisJICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCisKKwkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKKwkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgorCitjb25maWcgSkZGUzJfRlNfREVCVUcKKwlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgorCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAorCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKKwkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKKwkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgorCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgorCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKKwkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KKworCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCisJICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KKworY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCisJYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCisKKwkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKKwkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6CisJICAgIC0gTkFORCBmbGFzaAorCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQworCSAgICAtIERhdGFGbGFzaAorCitjb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKKwlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCisJICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgorCitjb25maWcgSkZGUzJfU1VNTUFSWQorCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgorCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgorCisJICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKKwkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCitjb25maWcgSkZGUzJfRlNfWEFUVFIKKwlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBKRkZTMl9GU19TRUNVUklUWQorCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAorCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKKwkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCisJICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91CisJICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgorCisJICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCisKK2NvbmZpZyBKRkZTMl9aTElCCisJYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXNlbGVjdCBaTElCX0RFRkxBVEUKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCisJICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCisJICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKKwkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisKKwkgIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfTFpPCisJYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgorCisJICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgorCitjb25maWcgSkZGUzJfUlRJTUUKKwlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfUlVCSU4KKwlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgorCitjaG9pY2UKKwlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJaGVscAorCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KKwkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KKworY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKKwlib29sICJubyBjb21wcmVzc2lvbiIKKwloZWxwCisJICBVc2VzIG5vIGNvbXByZXNzaW9uLgorCitjb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlib29sICJwcmlvcml0eSIKKwloZWxwCisJICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAorCSAgc3VjY2Vzc2Z1bCBvbmUuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCisJYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0CisJICByZXN1bHQuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KKwlib29sICJGYXZvdXIgTFpPIgorCWhlbHAKKwkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKKwkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgorCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCA4NjczOWVlLi5mMjVlNzBjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTUzLDggKzUzLDggQEAKIH0KIAogLyogamZmczJfY29tcHJlc3M6Ci0gKiBAZGF0YTogUG9pbnRlciB0byB1bmNvbXByZXNzZWQgZGF0YQotICogQGNkYXRhOiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKKyAqIEBkYXRhX2luOiBQb2ludGVyIHRvIHVuY29tcHJlc3NlZCBkYXRhCisgKiBAY3BhZ2Vfb3V0OiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKICAqIEBkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSBmb3IgY29tcHJlc3Npb24uCiAgKglPbiBleGl0LCBleHBlY3RlZCB0byBob2xkIHRoZSBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSBjb21wcmVzc2VkLgogICogQGNkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgZm9yIGNvbXByZXNzZWQKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2Rpci5jIGIvZnMvamZmczIvZGlyLmMKaW5kZXggY2QyMTllZi4uYjFhYWFlOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKKysrIGIvZnMvamZmczIvZGlyLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCS8qIEZJWE1FOiBJZiB5b3UgY2FyZS4gV2UnZCBuZWVkIHRvIHVzZSBmcmFncyBmb3IgdGhlIHRhcmdldAogCSAgIGlmIGl0IGdyb3dzIG11Y2ggbW9yZSB0aGFuIHRoaXMgKi8KIAlpZiAodGFyZ2V0bGVuID4gMjU0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKIAlyaSA9IGpmZnMyX2FsbG9jX3Jhd19pbm9kZSgpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9lcmFzZS5jIGIvZnMvamZmczIvZXJhc2UuYwppbmRleCBkZGRiMmE2Li4yNTk0NjFiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9lcmFzZS5jCisrKyBiL2ZzL2pmZnMyL2VyYXNlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAlpbnN0ci0+bGVuID0gYy0+c2VjdG9yX3NpemU7CiAJaW5zdHItPmNhbGxiYWNrID0gamZmczJfZXJhc2VfY2FsbGJhY2s7CiAJaW5zdHItPnByaXYgPSAodW5zaWduZWQgbG9uZykoJmluc3RyWzFdKTsKLQlpbnN0ci0+ZmFpbF9hZGRyID0gMHhmZmZmZmZmZjsKKwlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOwogCiAJKChzdHJ1Y3QgZXJhc2VfcHJpdl9zdHJ1Y3QgKilpbnN0ci0+cHJpdiktPmplYiA9IGplYjsKIAkoKHN0cnVjdCBlcmFzZV9wcml2X3N0cnVjdCAqKWluc3RyLT5wcml2KS0+YyA9IGM7CkBAIC0xNzUsNyArMTc1LDcgQEAKIHsKIAkvKiBGb3IgTkFORCwgaWYgdGhlIGZhaWx1cmUgZGlkIG5vdCBvY2N1ciBhdCB0aGUgZGV2aWNlIGxldmVsIGZvciBhCiAJICAgc3BlY2lmaWMgcGh5c2ljYWwgcGFnZSwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBiYWQgYmxvY2sgdGFibGUuICovCi0JaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAmJiAoYmFkX29mZnNldCAhPSAweGZmZmZmZmZmKSkgeworCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykgJiYgKGJhZF9vZmZzZXQgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKSkgewogCQkvKiBXZSBoYWQgYSBkZXZpY2UtbGV2ZWwgZmFpbHVyZSB0byBlcmFzZS4gIExldCdzIHNlZSBpZiB3ZSd2ZQogCQkgICBmYWlsZWQgdG9vIG1hbnkgdGltZXMuICovCiAJCWlmICghamZmczJfd3JpdGVfbmFuZF9iYWRibG9jayhjLCBqZWIsIGJhZF9vZmZzZXQpKSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCAwODZjNDM4Li4yNDkzMDVkIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTIwNyw2ICsyMDcsOCBAQAogCWJ1Zi0+Zl9maWxlcyA9IDA7CiAJYnVmLT5mX2ZmcmVlID0gMDsKIAlidWYtPmZfbmFtZWxlbiA9IEpGRlMyX01BWF9OQU1FX0xFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSBKRkZTMl9TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSBjLT5tdGQtPmluZGV4OwogCiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCWF2YWlsID0gYy0+ZGlydHlfc2l6ZSArIGMtPmZyZWVfc2l6ZTsKQEAgLTQ0MCwxNCArNDQyLDE0IEBACiAKIAltZW1zZXQocmksIDAsIHNpemVvZigqcmkpKTsKIAkvKiBTZXQgT1Mtc3BlY2lmaWMgZGVmYXVsdHMgZm9yIG5ldyBpbm9kZXMgKi8KLQlyaS0+dWlkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnN1aWQpOworCXJpLT51aWQgPSBjcHVfdG9famUxNihjdXJyZW50X2ZzdWlkKCkpOwogCiAJaWYgKGRpcl9pLT5pX21vZGUgJiBTX0lTR0lEKSB7CiAJCXJpLT5naWQgPSBjcHVfdG9famUxNihkaXJfaS0+aV9naWQpOwogCQlpZiAoU19JU0RJUihtb2RlKSkKIAkJCW1vZGUgfD0gU19JU0dJRDsKIAl9IGVsc2UgewotCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnNnaWQpOworCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudF9mc2dpZCgpKTsKIAl9CiAKIAkvKiBQT1NJWCBBQ0xzIGhhdmUgdG8gYmUgcHJvY2Vzc2VkIG5vdywgYXQgbGVhc3QgcGFydGx5LgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZW1nbXQuYyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKaW5kZXggYTliZjk2MC4uMDg3NWI2MCAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZW1nbXQuYworKysgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCkBAIC0yNjEsNiArMjYxLDEwIEBACiAKIAlqZmZzMl9zdW1fcmVzZXRfY29sbGVjdGVkKGMtPnN1bW1hcnkpOyAvKiByZXNldCBjb2xsZWN0ZWQgc3VtbWFyeSAqLwogCisJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCisJaWYgKCEoYy0+d2J1Zl9vZnMgJSBjLT5zZWN0b3Jfc2l6ZSkgJiYgIWMtPndidWZfbGVuKQorCQljLT53YnVmX29mcyA9IDB4ZmZmZmZmZmY7CisKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZmluZF9uZXh0YmxvY2soKTogbmV3IG5leHRibG9jayA9IDB4JTA4eFxuIiwgYy0+bmV4dGJsb2NrLT5vZmZzZXQpKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IDBlNzhiMDAuLmQ5YTcyMWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTY3OSwxMCArNjc5LDcgQEAKIAogCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7CiAJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCi0JaWYgKFNFQ1RPUl9BRERSKGMtPndidWZfb2ZzKSA9PSBTRUNUT1JfQUREUihjLT53YnVmX29mcytjLT53YnVmX3BhZ2VzaXplKSkKLQkJYy0+d2J1Zl9vZnMgKz0gYy0+d2J1Zl9wYWdlc2l6ZTsKLQllbHNlCi0JCWMtPndidWZfb2ZzID0gMHhmZmZmZmZmZjsKKwljLT53YnVmX29mcyArPSBjLT53YnVmX3BhZ2VzaXplOwogCWMtPndidWZfbGVuID0gMDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL21wYWdlLmMgYi9mcy9tcGFnZS5jCmluZGV4IGRiY2M3YWYuLjU1MmI4MGIgMTAwNjQ0Ci0tLSBhL2ZzL21wYWdlLmMKKysrIGIvZnMvbXBhZ2UuYwpAQCAtNiw3ICs2LDcgQEAKICAqIENvbnRhaW5zIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHByZXBhcmluZyBhbmQgc3VibWl0dGluZyBCSU9zIHdoaWNoIGNvbnRhaW4KICAqIG11bHRpcGxlIHBhZ2VjYWNoZSBwYWdlcy4KICAqCi0gKiAxNU1heTIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxNU1heTIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbgogICogMjdKdW4yMDAyCWF4Ym9lQHN1c2UuZGUKICAqCQl1c2UgYmlvX2FkZF9wYWdlKCkgdG8gYnVpbGQgYmlvJ3MganVzdCB0aGUgcmlnaHQgc2l6ZQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCA2YTA5NzYwLi5jMmU5Y2ZkIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtNDAsNiArNDAsMTYgQEAKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21pbiA9IDA7CiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9tYXggPSA2NTUzNTsKIAorLyoKKyAqIElmIHRoZSBrZXJuZWwgaGFzIElQdjYgc3VwcG9ydCBhdmFpbGFibGUsIGFsd2F5cyBsaXN0ZW4gZm9yCisgKiBib3RoIEFGX0lORVQgYW5kIEFGX0lORVQ2IHJlcXVlc3RzLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCitzdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmZzX2NhbGxiYWNrX2ZhbWlseSA9IEFGX0lORVQ2OworI2Vsc2UKK3N0YXRpYyBjb25zdCBzYV9mYW1pbHlfdAluZnNfY2FsbGJhY2tfZmFtaWx5ID0gQUZfSU5FVDsKKyNlbmRpZgorCiBzdGF0aWMgaW50IHBhcmFtX3NldF9wb3J0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJY2hhciAqZW5kcDsKQEAgLTEwNiw3ICsxMTYsNyBAQAogCWlmIChuZnNfY2FsbGJhY2tfaW5mby51c2VycysrIHx8IG5mc19jYWxsYmFja19pbmZvLnRhc2sgIT0gTlVMTCkKIAkJZ290byBvdXQ7CiAJc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLAotCQkJCUFGX0lORVQsIE5VTEwpOworCQkJCW5mc19jYWxsYmFja19mYW1pbHksIE5VTEwpOwogCXJldCA9IC1FTk9NRU07CiAJaWYgKCFzZXJ2KQogCQlnb3RvIG91dF9lcnI7CkBAIC0xMTYsNyArMTI2LDggQEAKIAlpZiAocmV0IDw9IDApCiAJCWdvdG8gb3V0X2VycjsKIAluZnNfY2FsbGJhY2tfdGNwcG9ydCA9IHJldDsKLQlkcHJpbnRrKCJDYWxsYmFjayBwb3J0ID0gMHgleFxuIiwgbmZzX2NhbGxiYWNrX3RjcHBvcnQpOworCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCisJCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgbmZzX2NhbGxiYWNrX2ZhbWlseSk7CiAKIAluZnNfY2FsbGJhY2tfaW5mby5ycXN0ID0gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsICZzZXJ2LT5zdl9wb29sc1swXSk7CiAJaWYgKElTX0VSUihuZnNfY2FsbGJhY2tfaW5mby5ycXN0KSkgewpAQCAtMTQ5LDggKzE2MCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogCXJldHVybiByZXQ7CiBvdXRfZXJyOgotCWRwcmludGsoIkNvdWxkbid0IGNyZWF0ZSBjYWxsYmFjayBzb2NrZXQgb3Igc2VydmVyIHRocmVhZDsgZXJyID0gJWRcbiIsCi0JCXJldCk7CisJZHByaW50aygiTkZTOiBDb3VsZG4ndCBjcmVhdGUgY2FsbGJhY2sgc29ja2V0IG9yIHNlcnZlciB0aHJlYWQ7ICIKKwkJImVyciA9ICVkXG4iLCByZXQpOwogCW5mc19jYWxsYmFja19pbmZvLnVzZXJzLS07CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNWVlMjNlNy4uNzU0NzYwMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtNjc1LDcgKzY3NSw3IEBACiAJc2VydmVyLT5uZnNfY2xpZW50ID0gY2xwOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgY2xpZW50IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG1vdW50IGRhdGEgKi8KLQlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfRkxBR01BU0s7CisJc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzOwogCiAJaWYgKGRhdGEtPnJzaXplKQogCQlzZXJ2ZXItPnJzaXplID0gbmZzX2Jsb2NrX3NpemUoZGF0YS0+cnNpemUsIE5VTEwpOwpAQCAtODUwLDcgKzg1MCw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnNlcnZlci0+Y2xpZW50X2xpbmspOwogCUlOSVRfTElTVF9IRUFEKCZzZXJ2ZXItPm1hc3Rlcl9saW5rKTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcnZlci0+YWN0aXZlX3dxKTsKIAlhdG9taWNfc2V0KCZzZXJ2ZXItPmFjdGl2ZSwgMCk7CiAKIAlzZXJ2ZXItPmlvX3N0YXRzID0gbmZzX2FsbG9jX2lvc3RhdHMoKTsKQEAgLTEwNzMsNyArMTA3Miw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwotCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFncyAmIE5GU19NT1VOVF9GTEFHTUFTSzsKKwlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3M7CiAJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfQVRPTUlDX09QRU47CiAKIAlpZiAoZGF0YS0+cnNpemUpCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNzRmOTJiNy4uZWZkYmEyZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAJZGVjb2RlX2RpcmVudF90CWRlY29kZTsKIAlpbnQJCXBsdXM7CiAJdW5zaWduZWQgbG9uZwl0aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZwlnZW5jb3VudDsKIAlpbnQJCXRpbWVzdGFtcF92YWxpZDsKIH0gbmZzX3JlYWRkaXJfZGVzY3JpcHRvcl90OwogCkBAIC0xNzcsNyArMTc4LDcgQEAKIAlzdHJ1Y3QgZmlsZQkqZmlsZSA9IGRlc2MtPmZpbGU7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHJwY19jcmVkCSpjcmVkID0gbmZzX2ZpbGVfY3JlZChmaWxlKTsKLQl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsKKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcCwgZ2VuY291bnQ7CiAJaW50CQllcnJvcjsKIAogCWRmcHJpbnRrKERJUkNBQ0hFLCAiTkZTOiAlczogcmVhZGluZyBjb29raWUgJUx1IGludG8gcGFnZSAlbHVcbiIsCkBAIC0xODYsNiArMTg3LDcgQEAKIAogIGFnYWluOgogCXRpbWVzdGFtcCA9IGppZmZpZXM7CisJZ2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7CiAJZXJyb3IgPSBORlNfUFJPVE8oaW5vZGUpLT5yZWFkZGlyKGZpbGUtPmZfcGF0aC5kZW50cnksIGNyZWQsIGRlc2MtPmVudHJ5LT5jb29raWUsIHBhZ2UsCiAJCQkJCSAgTkZTX1NFUlZFUihpbm9kZSktPmR0c2l6ZSwgZGVzYy0+cGx1cyk7CiAJaWYgKGVycm9yIDwgMCkgewpAQCAtMTk5LDYgKzIwMSw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCWRlc2MtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwlkZXNjLT5nZW5jb3VudCA9IGdlbmNvdW50OwogCWRlc2MtPnRpbWVzdGFtcF92YWxpZCA9IDE7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCS8qIEVuc3VyZSBjb25zaXN0ZW50IHBhZ2UgYWxpZ25tZW50IG9mIHRoZSBkYXRhLgpAQCAtMjI0LDkgKzIyNywxMCBAQAogCWlmIChJU19FUlIocCkpCiAJCXJldHVybiBQVFJfRVJSKHApOwogCWRlc2MtPnB0ciA9IHA7Ci0JaWYgKGRlc2MtPnRpbWVzdGFtcF92YWxpZCkKKwlpZiAoZGVzYy0+dGltZXN0YW1wX3ZhbGlkKSB7CiAJCWRlc2MtPmVudHJ5LT5mYXR0ci0+dGltZV9zdGFydCA9IGRlc2MtPnRpbWVzdGFtcDsKLQllbHNlCisJCWRlc2MtPmVudHJ5LT5mYXR0ci0+Z2VuY291bnQgPSBkZXNjLT5nZW5jb3VudDsKKwl9IGVsc2UKIAkJZGVzYy0+ZW50cnktPmZhdHRyLT52YWxpZCAmPSB+TkZTX0FUVFJfRkFUVFI7CiAJcmV0dXJuIDA7CiB9CkBAIC00NzEsNyArNDc1LDcgQEAKIAlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSBuZnNfZmlsZV9jcmVkKGZpbGUpOwogCXN0cnVjdCBwYWdlCSpwYWdlID0gTlVMTDsKIAlpbnQJCXN0YXR1czsKLQl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsKKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcCwgZ2VuY291bnQ7CiAKIAlkZnByaW50ayhESVJDQUNIRSwgIk5GUzogdW5jYWNoZWRfcmVhZGRpcigpIHNlYXJjaGluZyBmb3IgY29va2llICVMdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKmRlc2MtPmRpcl9jb29raWUpOwpAQCAtNDgyLDYgKzQ4Niw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAl0aW1lc3RhbXAgPSBqaWZmaWVzOworCWdlbmNvdW50ID0gbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcigpOwogCXN0YXR1cyA9IE5GU19QUk9UTyhpbm9kZSktPnJlYWRkaXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgY3JlZCwKIAkJCQkJCSpkZXNjLT5kaXJfY29va2llLCBwYWdlLAogCQkJCQkJTkZTX1NFUlZFUihpbm9kZSktPmR0c2l6ZSwKQEAgLTQ5MCw2ICs0OTUsNyBAQAogCWRlc2MtPnB0ciA9IGttYXAocGFnZSk7CQkvKiBtYXRjaGluZyBrdW5tYXAgaW4gbmZzX2RvX2ZpbGxkaXIgKi8KIAlpZiAoc3RhdHVzID49IDApIHsKIAkJZGVzYy0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCQlkZXNjLT5nZW5jb3VudCA9IGdlbmNvdW50OwogCQlkZXNjLT50aW1lc3RhbXBfdmFsaWQgPSAxOwogCQlpZiAoKHN0YXR1cyA9IGRpcl9kZWNvZGUoZGVzYykpID09IDApCiAJCQlkZXNjLT5lbnRyeS0+cHJldl9jb29raWUgPSAqZGVzYy0+ZGlyX2Nvb2tpZTsKQEAgLTY1NSw3ICs2NjEsNyBAQAogICovCiB2b2lkIG5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKLQlORlNfSShkaXIpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlID0gamlmZmllczsKKwlORlNfSShkaXIpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlKys7CiB9CiAKIC8qCkBAIC02NjcsNiArNjczLDggQEAKIHsKIAlpZiAoSVNfUk9PVChkZW50cnkpKQogCQlyZXR1cm4gMTsKKwlpZiAoTkZTX1NFUlZFUihkaXIpLT5mbGFncyAmIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORSkKKwkJcmV0dXJuIDA7CiAJaWYgKCFuZnNfdmVyaWZ5X2NoYW5nZV9hdHRyaWJ1dGUoZGlyLCBkZW50cnktPmRfdGltZSkpCiAJCXJldHVybiAwOwogCS8qIFJldmFsaWRhdGUgbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSBiZWZvcmUgd2UgZGVjbGFyZSBhIG1hdGNoICovCkBAIC03NTAsNiArNzU4LDggQEAKIAkvKiBEb24ndCByZXZhbGlkYXRlIGEgbmVnYXRpdmUgZGVudHJ5IGlmIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgKi8KIAlpZiAobmQgIT0gTlVMTCAmJiBuZnNfbG9va3VwX2NoZWNrX2ludGVudChuZCwgTE9PS1VQX0NSRUFURSkgIT0gMCkKIAkJcmV0dXJuIDA7CisJaWYgKE5GU19TRVJWRVIoZGlyKS0+ZmxhZ3MgJiBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gIW5mc19jaGVja192ZXJpZmllcihkaXIsIGRlbnRyeSk7CiB9CiAKQEAgLTE1MDcsNyArMTUxNyw3IEBACiAJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZywgMCwKIAkJCQkJCQlHRlBfS0VSTkVMKSkgewogCQlwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpOwotCQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDc4NDYwNjUuLmQzMTliNDkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMTg4LDEzICsxODgsMTYgQEAKIAkvKiBvcmlnaW4gPT0gU0VFS19FTkQgPT4gd2UgbXVzdCByZXZhbGlkYXRlIHRoZSBjYWNoZWQgZmlsZSBsZW5ndGggKi8KIAlpZiAob3JpZ2luID09IFNFRUtfRU5EKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX21hcHBpbmctPmhvc3Q7CisKIAkJaW50IHJldHZhbCA9IG5mc19yZXZhbGlkYXRlX2ZpbGVfc2l6ZShpbm9kZSwgZmlscCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIChsb2ZmX3QpcmV0dmFsOwotCX0KLQlsb2NrX2tlcm5lbCgpOwkvKiBCS0wgbmVlZGVkPyAqLwotCWxvZmYgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3VubG9ja2VkKGZpbHAsIG9mZnNldCwgb3JpZ2luKTsKLQl1bmxvY2tfa2VybmVsKCk7CisKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJbG9mZiA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfSBlbHNlCisJCWxvZmYgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3VubG9ja2VkKGZpbHAsIG9mZnNldCwgb3JpZ2luKTsKIAlyZXR1cm4gbG9mZjsKIH0KIApAQCAtNjk5LDEzICs3MDIsNiBAQAogCQkJZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQlmbC0+ZmxfdHlwZSwgZmwtPmZsX2ZsYWdzKTsKIAotCS8qCi0JICogTm8gQlNEIGZsb2NrcyBvdmVyIE5GUyBhbGxvd2VkLgotCSAqIE5vdGU6IHdlIGNvdWxkIHRyeSB0byBmYWtlIGEgUE9TSVggbG9jayByZXF1ZXN0IGhlcmUgYnkKLQkgKiB1c2luZyAoKHUzMikgZmlscCB8IDB4ODAwMDAwMDApIG9yIHNvbWUgc3VjaCBhcyB0aGUgcGlkLgotCSAqIE5vdCBzdXJlIHdoZXRoZXIgdGhhdCB3b3VsZCBiZSB1bmlxdWUsIHRob3VnaCwgb3Igd2hldGhlcgotCSAqIHRoYXQgd291bGQgYnJlYWsgaW4gb3RoZXIgcGxhY2VzLgotCSAqLwogCWlmICghKGZsLT5mbF9mbGFncyAmIEZMX0ZMT0NLKSkKIAkJcmV0dXJuIC1FTk9MQ0s7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggNTJkYWVmYS4uYjkxOTVjMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTMwNSw4ICszMDUsNyBAQAogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBmYXR0ci0+cmRldik7CiAKIAkJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7Ci0JCW5mc2ktPmxhc3RfdXBkYXRlZCA9IG5vdzsKLQkJbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSA9IG5vdzsKKwkJbmZzaS0+YXR0cl9nZW5jb3VudCA9IGZhdHRyLT5nZW5jb3VudDsKIAkJaW5vZGUtPmlfYXRpbWUgPSBmYXR0ci0+YXRpbWU7CiAJCWlub2RlLT5pX210aW1lID0gZmF0dHItPm10aW1lOwogCQlpbm9kZS0+aV9jdGltZSA9IGZhdHRyLT5jdGltZTsKQEAgLTQ1Myw2ICs0NTIsNyBAQAogdm9pZCBuZnNfc2V0YXR0cl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKQogewogCWlmICgoYXR0ci0+aWFfdmFsaWQgJiAoQVRUUl9NT0RFfEFUVFJfVUlEfEFUVFJfR0lEKSkgIT0gMCkgeworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSAhPSAwKSB7CiAJCQlpbnQgbW9kZSA9IGF0dHItPmlhX21vZGUgJiBTX0lBTExVR087CiAJCQltb2RlIHw9IGlub2RlLT5pX21vZGUgJiB+U19JQUxMVUdPOwpAQCAtNDYyLDcgKzQ2Miw2IEBACiAJCQlpbm9kZS0+aV91aWQgPSBhdHRyLT5pYV91aWQ7CiAJCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgIT0gMCkKIAkJCWlub2RlLT5pX2dpZCA9IGF0dHItPmlhX2dpZDsKLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJTkZTX0koaW5vZGUpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9CkBAIC00NzIsMzcgKzQ3MSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5mc193YWl0X3NjaGVkdWxlKHZvaWQgKndvcmQpCi17Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciB0aGUgaW5vZGUgdG8gZ2V0IHVubG9ja2VkLgotICovCi1zdGF0aWMgaW50IG5mc193YWl0X29uX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IHdhaXRfb25fYml0X2xvY2soJm5mc2ktPmZsYWdzLCBORlNfSU5PX1JFVkFMSURBVElORywKLQkJCQkJbmZzX3dhaXRfc2NoZWR1bGUsIFRBU0tfS0lMTEFCTEUpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBuZnNfd2FrZV91cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7Ci0KLQljbGVhcl9iaXQoTkZTX0lOT19SRVZBTElEQVRJTkcsICZuZnNpLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQl3YWtlX3VwX2JpdCgmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fUkVWQUxJREFUSU5HKTsKLX0KLQogaW50IG5mc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdCAqc3RhdCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwpAQCAtNjk3LDIwICs2NjUsMTUgQEAKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJldmFsaWRhdGluZyAoJXMvJUxkKVxuIiwKIAkJaW5vZGUtPmlfc2ItPnNfaWQsIChsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSkpOwogCi0JbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX0lOT0RFUkVWQUxJREFURSk7CiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCi0gCQlnb3RvIG91dF9ub3dhaXQ7Ci0JaWYgKE5GU19TVEFMRShpbm9kZSkpCi0gCQlnb3RvIG91dF9ub3dhaXQ7Ci0KLQlzdGF0dXMgPSBuZnNfd2FpdF9vbl9pbm9kZShpbm9kZSk7Ci0JaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gb3V0OwotCi0Jc3RhdHVzID0gLUVTVEFMRTsKIAlpZiAoTkZTX1NUQUxFKGlub2RlKSkKIAkJZ290byBvdXQ7CiAKKwlpZiAoTkZTX1NUQUxFKGlub2RlKSkKKwkJZ290byBvdXQ7CisKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfSU5PREVSRVZBTElEQVRFKTsKIAlzdGF0dXMgPSBORlNfUFJPVE8oaW5vZGUpLT5nZXRhdHRyKHNlcnZlciwgTkZTX0ZIKGlub2RlKSwgJmZhdHRyKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJZGZwcmludGsoUEFHRUNBQ0hFLCAibmZzX3JldmFsaWRhdGVfaW5vZGU6ICglcy8lTGQpIGdldGF0dHIgZmFpbGVkLCBlcnJvcj0lZFxuIiwKQEAgLTcyNCwxNiArNjg3LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0Jc3RhdHVzID0gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgJmZhdHRyKTsKKwlzdGF0dXMgPSBuZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgJmZhdHRyKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJZGZwcmludGsoUEFHRUNBQ0hFLCAibmZzX3JldmFsaWRhdGVfaW5vZGU6ICglcy8lTGQpIHJlZnJlc2ggZmFpbGVkLCBlcnJvcj0lZFxuIiwKIAkJCSBpbm9kZS0+aV9zYi0+c19pZCwKIAkJCSAobG9uZyBsb25nKU5GU19GSUxFSUQoaW5vZGUpLCBzdGF0dXMpOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCiAJaWYgKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0FDTCkKIAkJbmZzX3phcF9hY2xfY2FjaGUoaW5vZGUpOwpAQCAtNzQzLDkgKzcwMyw2IEBACiAJCShsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSkpOwogCiAgb3V0OgotCW5mc193YWtlX3VwX2lub2RlKGlub2RlKTsKLQotIG91dF9ub3dhaXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTA4LDkgKzg2NSw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIERvIGF0b21pYyB3ZWFrIGNhY2hlIGNvbnNpc3RlbmN5IHVwZGF0ZXMgKi8KLQluZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwotCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkgIT0gMCAmJgogCQkJbmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwpAQCAtOTM5LDE1ICs4OTMsODEgQEAKIAogCWlmIChpbnZhbGlkICE9IDApCiAJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IGludmFsaWQ7Ci0JZWxzZQotCQluZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+KE5GU19JTk9fSU5WQUxJRF9BVFRSCi0JCQkJfCBORlNfSU5PX0lOVkFMSURfQVRJTUUKLQkJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKIAogCW5mc2ktPnJlYWRfY2FjaGVfamlmZmllcyA9IGZhdHRyLT50aW1lX3N0YXJ0OwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5mc19jdGltZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlyZXR1cm4gdGltZXNwZWNfY29tcGFyZSgmZmF0dHItPmN0aW1lLCAmaW5vZGUtPmlfY3RpbWUpID4gMDsKK30KKworc3RhdGljIGludCBuZnNfc2l6ZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlyZXR1cm4gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSA+IGlfc2l6ZV9yZWFkKGlub2RlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZzX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfcmVhZF9hdHRyX2dlbmVyYXRpb25fY291bnRlcih2b2lkKQoreworCXNtcF9ybWIoKTsKKwlyZXR1cm4gbmZzX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyOworfQorCit1bnNpZ25lZCBsb25nIG5mc19pbmNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwlzbXBfcm1iKCk7CisJcmV0ID0gKytuZnNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXI7CisJc21wX3dtYigpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmZzX2ZhdHRyX2luaXQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJZmF0dHItPnZhbGlkID0gMDsKKwlmYXR0ci0+dGltZV9zdGFydCA9IGppZmZpZXM7CisJZmF0dHItPmdlbmNvdW50ID0gbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcigpOworfQorCisvKioKKyAqIG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZSAtIGNoZWNrIGlmIHRoZSBpbm9kZSBhdHRyaWJ1dGVzIG5lZWQgdXBkYXRpbmcKKyAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKKyAqIEBmYXR0ciAtIGF0dHJpYnV0ZXMKKyAqCisgKiBBdHRlbXB0IHRvIGRpdmluZSB3aGV0aGVyIG9yIG5vdCBhbiBSUEMgY2FsbCByZXBseSBjYXJyeWluZyBzdGFsZQorICogYXR0cmlidXRlcyBnb3Qgc2NoZWR1bGVkIGFmdGVyIGFub3RoZXIgY2FsbCBjYXJyeWluZyB1cGRhdGVkIG9uZXMuCisgKgorICogVG8gZG8gc28sIHRoZSBmdW5jdGlvbiBmaXJzdCBhc3N1bWVzIHRoYXQgYSBtb3JlIHJlY2VudCBjdGltZSBtZWFucworICogdGhhdCB0aGUgYXR0cmlidXRlcyBpbiBmYXR0ciBhcmUgbmV3ZXIsIGhvd2V2ZXIgaXQgYWxzbyBhdHRlbXB0IHRvCisgKiBjYXRjaCB0aGUgY2FzZSB3aGVyZSBjdGltZSBlaXRoZXIgZGlkbid0IGNoYW5nZSwgb3Igd2VudCBiYWNrd2FyZHMKKyAqIChpZiBzb21lb25lIHJlc2V0IHRoZSBjbG9jayBvbiB0aGUgc2VydmVyKSBieSBsb29raW5nIGF0IHdoZXRoZXIKKyAqIG9yIG5vdCB0aGlzIFJQQyBjYWxsIHdhcyBzdGFydGVkIGFmdGVyIHRoZSBpbm9kZSB3YXMgbGFzdCB1cGRhdGVkLgorICogTm90ZSBhbHNvIHRoZSBjaGVjayBmb3Igd3JhcGFyb3VuZCBvZiAnYXR0cl9nZW5jb3VudCcKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAndHJ1ZScgaWYgaXQgdGhpbmtzIHRoZSBhdHRyaWJ1dGVzIGluICdmYXR0cicgYXJlCisgKiBtb3JlIHJlY2VudCB0aGFuIHRoZSBvbmVzIGNhY2hlZCBpbiB0aGUgaW5vZGUuCisgKgorICovCitzdGF0aWMgaW50IG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJcmV0dXJuICgobG9uZylmYXR0ci0+Z2VuY291bnQgLSAobG9uZyluZnNpLT5hdHRyX2dlbmNvdW50KSA+IDAgfHwKKwkJbmZzX2N0aW1lX25lZWRfdXBkYXRlKGlub2RlLCBmYXR0cikgfHwKKwkJbmZzX3NpemVfbmVlZF91cGRhdGUoaW5vZGUsIGZhdHRyKSB8fAorCQkoKGxvbmcpbmZzaS0+YXR0cl9nZW5jb3VudCAtIChsb25nKW5mc19yZWFkX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCkgPiAwKTsKK30KKworc3RhdGljIGludCBuZnNfcmVmcmVzaF9pbm9kZV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJaWYgKG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpKQorCQlyZXR1cm4gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworCXJldHVybiBuZnNfY2hlY2tfaW5vZGVfYXR0cmlidXRlcyhpbm9kZSwgZmF0dHIpOworfQorCiAvKioKICAqIG5mc19yZWZyZXNoX2lub2RlIC0gdHJ5IHRvIHVwZGF0ZSB0aGUgaW5vZGUgYXR0cmlidXRlIGNhY2hlCiAgKiBAaW5vZGUgLSBwb2ludGVyIHRvIGlub2RlCkBAIC05NjAsMjEgKzk4MCwyOCBAQAogICovCiBpbnQgbmZzX3JlZnJlc2hfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCkKIAkJcmV0dXJuIDA7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAodGltZV9hZnRlcihmYXR0ci0+dGltZV9zdGFydCwgbmZzaS0+bGFzdF91cGRhdGVkKSkKLQkJc3RhdHVzID0gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwotCWVsc2UKLQkJc3RhdHVzID0gbmZzX2NoZWNrX2lub2RlX2F0dHJpYnV0ZXMoaW5vZGUsIGZhdHRyKTsKLQorCXN0YXR1cyA9IG5mc19yZWZyZXNoX2lub2RlX2xvY2tlZChpbm9kZSwgZmF0dHIpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZzX3JlZnJlc2hfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7Cit9CisKIC8qKgogICogbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlIC0gdHJ5IHRvIHVwZGF0ZSB0aGUgaW5vZGUgYXR0cmlidXRlIGNhY2hlCiAgKiBAaW5vZGUgLSBwb2ludGVyIHRvIGlub2RlCkBAIC05OTEsMTQgKzEwMTgsMTIgQEAKICAqLwogaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCWludCBzdGF0dXM7CiAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwlzdGF0dXMgPSBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXJldHVybiBuZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgZmF0dHIpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTAxNCw2ICsxMDM5LDE1IEBACiAgKi8KIGludCBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfZm9yY2Vfd2NjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogeworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCS8qIERvbid0IGRvIGEgV0NDIHVwZGF0ZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBhbHJlYWR5IHN0YWxlICovCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCB8fAorCQkJIW5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpKSB7CisJCWZhdHRyLT52YWxpZCAmPSB+KE5GU19BVFRSX1dDQ19WNHxORlNfQVRUUl9XQ0MpOworCQlnb3RvIG91dF9ub2ZvcmNlOworCX0KIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0KSAhPSAwICYmCiAJCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfV0NDX1Y0KSA9PSAwKSB7CiAJCWZhdHRyLT5wcmVfY2hhbmdlX2F0dHIgPSBORlNfSShpbm9kZSktPmNoYW5nZV9hdHRyOwpAQCAtMTAyNiw3ICsxMDYwLDEwIEBACiAJCWZhdHRyLT5wcmVfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX1dDQzsKIAl9Ci0JcmV0dXJuIG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworb3V0X25vZm9yY2U6CisJc3RhdHVzID0gbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlX2xvY2tlZChpbm9kZSwgZmF0dHIpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgpAQCAtMTA5Miw3ICsxMTI5LDcgQEAKIAkJfQogCQkvKiBJZiBjdGltZSBoYXMgY2hhbmdlZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBjbGVhciBhY2Nlc3MrYWNsIGNhY2hlcyAqLwogCQlpZiAoIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSkpCi0JCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOwogCX0gZWxzZSBpZiAobmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKSB7CiAJCWRwcmludGsoIk5GUzogY2hhbmdlX2F0dHIgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCiAJCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CkBAIC0xMTI2LDYgKzExNjMsOSBAQAogCSAgICBpbm9kZS0+aV9naWQgIT0gZmF0dHItPmdpZCkKIAkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAKKwlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKQorCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCiAJaW5vZGUtPmlfbW9kZSA9IGZhdHRyLT5tb2RlOwogCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOwogCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7CkBAIC0xMTQ1LDE4ICsxMTg1LDEzIEBACiAJCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19BVFRSSU5WQUxJREFURSk7CiAJCW5mc2ktPmF0dHJ0aW1lbyA9IE5GU19NSU5BVFRSVElNRU8oaW5vZGUpOwogCQluZnNpLT5hdHRydGltZW9fdGltZXN0YW1wID0gbm93OwotCQluZnNpLT5sYXN0X3VwZGF0ZWQgPSBub3c7CisJCW5mc2ktPmF0dHJfZ2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7CiAJfSBlbHNlIHsKIAkJaWYgKCF0aW1lX2luX3JhbmdlKG5vdywgbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCwgbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCArIG5mc2ktPmF0dHJ0aW1lbykpIHsKIAkJCWlmICgobmZzaS0+YXR0cnRpbWVvIDw8PSAxKSA+IE5GU19NQVhBVFRSVElNRU8oaW5vZGUpKQogCQkJCW5mc2ktPmF0dHJ0aW1lbyA9IE5GU19NQVhBVFRSVElNRU8oaW5vZGUpOwogCQkJbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCA9IG5vdzsKIAkJfQotCQkvKgotCQkgKiBBdm9pZCBqaWZmeSB3cmFwYXJvdW5kIGlzc3VlcyB3aXRoIG5mc2ktPmxhc3RfdXBkYXRlZAotCQkgKi8KLQkJaWYgKCF0aW1lX2luX3JhbmdlKG5mc2ktPmxhc3RfdXBkYXRlZCwgbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzLCBub3cpKQotCQkJbmZzaS0+bGFzdF91cGRhdGVkID0gbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzOwogCX0KIAlpbnZhbGlkICY9IH5ORlNfSU5PX0lOVkFMSURfQVRUUjsKIAkvKiBEb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGlmIHdlIHdlcmUgdG8gYmxhbWUgKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggMjQyNDFmYy4uZDIxMmVlNCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogdm9pZCBuZnNfemFwX2FjbF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogc3VwZXIuYyAqLwordm9pZCBuZnNfcGFyc2VfaXBfYWRkcmVzcyhjaGFyICosIHNpemVfdCwgc3RydWN0IHNvY2thZGRyICosIHNpemVfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfeGRldl9mc190eXBlOwogI2lmZGVmIENPTkZJR19ORlNfVjQKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnM0X3hkZXZfZnNfdHlwZTsKQEAgLTE2Myw4ICsxNjQsOCBAQAogCiBleHRlcm4gaW50IF9faW5pdCByZWdpc3Rlcl9uZnNfZnModm9pZCk7CiBleHRlcm4gdm9pZCBfX2V4aXQgdW5yZWdpc3Rlcl9uZnNfZnModm9pZCk7Ci1leHRlcm4gdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpOwotZXh0ZXJuIHZvaWQgbmZzX3NiX2RlYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpOworZXh0ZXJuIHZvaWQgbmZzX3NiX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiB2b2lkIG5mc19zYl9kZWFjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogLyogbmFtZXNwYWNlLmMgKi8KIGV4dGVybiBjaGFyICpuZnNfcGF0aChjb25zdCBjaGFyICpiYXNlLApAQCAtMjc2LDMgKzI3NywyMyBAQAogCQlQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogfQogCisjZGVmaW5lIElQVjZfU0NPUEVfREVMSU1JVEVSCSclJworCisvKgorICogU2V0IHRoZSBwb3J0IG51bWJlciBpbiBhbiBhZGRyZXNzLiAgQmUgYWdub3N0aWMgYWJvdXQgdGhlIGFkZHJlc3MKKyAqIGZhbWlseS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19zZXRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFwID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphcDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWFwLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlhcDYtPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9uZnMvbW91bnRfY2xudC5jIGIvZnMvbmZzL21vdW50X2NsbnQuYwppbmRleCA3NzlkMmViLi4wODZhNjgzIDEwMDY0NAotLS0gYS9mcy9uZnMvbW91bnRfY2xudC5jCisrKyBiL2ZzL25mcy9tb3VudF9jbG50LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCiAKICNpZmRlZiBSUENfREVCVUcKICMgZGVmaW5lIE5GU0RCR19GQUNJTElUWQlORlNEQkdfTU9VTlQKQEAgLTk4LDcgKzk5LDcgQEAKIAogb3V0X21udF9lcnI6CiAJZHByaW50aygiTkZTOiBNTlQgc2VydmVyIHJldHVybmVkIHJlc3VsdCAlZFxuIiwgcmVzdWx0LnN0YXR1cyk7Ci0Jc3RhdHVzID0gLUVBQ0NFUzsKKwlzdGF0dXMgPSBuZnNfc3RhdF90b19lcnJubyhyZXN1bHQuc3RhdHVzKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDY2ZGYwOGQuLjY0YTI4OGUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTEwNSw3ICsxMDUsMTAgQEAKIAogCWRwcmludGsoIi0tPiBuZnNfZm9sbG93X21vdW50cG9pbnQoKVxuIik7CiAKLQlCVUdfT04oSVNfUk9PVChkZW50cnkpKTsKKwllcnIgPSAtRVNUQUxFOworCWlmIChJU19ST09UKGRlbnRyeSkpCisJCWdvdG8gb3V0X2VycjsKKwogCWRwcmludGsoIiVzOiBlbnRlclxuIiwgX19mdW5jX18pOwogCWRwdXQobmQtPnBhdGguZGVudHJ5KTsKIAluZC0+cGF0aC5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CkBAIC0xODksNyArMTkyLDcgQEAKIAkJCQkJICAgc3RydWN0IG5mc19jbG9uZV9tb3VudCAqbW91bnRkYXRhKQogewogI2lmZGVmIENPTkZJR19ORlNfVjQKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IE5VTEw7CisJc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN3aXRjaCAoc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uKSB7CiAJCWNhc2UgMjoKIAkJY2FzZSAzOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggNDIzODQyZi4uY2VmNjI1NSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0yMjksNiArMjI5LDcgQEAKIAogCWRwcmludGsoIk5GUyBjYWxsIGdldGFjbFxuIik7CiAJbXNnLnJwY19wcm9jID0gJnNlcnZlci0+Y2xpZW50X2FjbC0+Y2xfcHJvY2luZm9bQUNMUFJPQzNfR0VUQUNMXTsKKwluZnNfZmF0dHJfaW5pdCgmZmF0dHIpOwogCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5jbGllbnRfYWNsLCAmbXNnLCAwKTsKIAlkcHJpbnRrKCJORlMgcmVwbHkgZ2V0YWNsOiAlZFxuIiwgc3RhdHVzKTsKIApAQCAtMzIyLDYgKzMyMyw3IEBACiAKIAlkcHJpbnRrKCJORlMgY2FsbCBzZXRhY2xcbiIpOwogCW1zZy5ycGNfcHJvYyA9ICZzZXJ2ZXItPmNsaWVudF9hY2wtPmNsX3Byb2NpbmZvW0FDTFBST0MzX1NFVEFDTF07CisJbmZzX2ZhdHRyX2luaXQoJmZhdHRyKTsKIAlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50X2FjbCwgJm1zZywgMCk7CiAJbmZzX2FjY2Vzc196YXBfY2FjaGUoaW5vZGUpOwogCW5mc196YXBfYWNsX2NhY2hlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggMWU3NTBlNDUuLmM1NWJlN2EgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCisrKyBiL2ZzL25mcy9uZnMzcHJvYy5jCkBAIC02OTksNyArNjk5LDcgQEAKIH0KIAogc3RhdGljIGludAotbmZzM19wcm9jX2ZzaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAorZG9fcHJvY19mc2luZm8oc3RydWN0IHJwY19jbG50ICpjbGllbnQsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCiAJCSBzdHJ1Y3QgbmZzX2ZzaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewpAQCAtNzExLDExICs3MTEsMjcgQEAKIAogCWRwcmludGsoIk5GUyBjYWxsICBmc2luZm9cbiIpOwogCW5mc19mYXR0cl9pbml0KGluZm8tPmZhdHRyKTsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiTkZTIHJlcGx5IGZzaW5mbzogJWRcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoKKyAqIEJhcmUtYm9uZXMgYWNjZXNzIHRvIGZzaW5mbzogdGhpcyBpcyBmb3IgbmZzX2dldF9yb290L25mc19nZXRfc2IgdmlhCisgKiBuZnNfY3JlYXRlX3NlcnZlcgorICovCitzdGF0aWMgaW50CituZnMzX3Byb2NfZnNpbmZvKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCisJCSAgIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQoreworCWludAlzdGF0dXM7CisKKwlzdGF0dXMgPSBkb19wcm9jX2ZzaW5mbyhzZXJ2ZXItPmNsaWVudCwgZmhhbmRsZSwgaW5mbyk7CisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gZG9fcHJvY19mc2luZm8oc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQsIGZoYW5kbGUsIGluZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQKIG5mczNfcHJvY19wYXRoY29uZihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAogCQkgICBzdHJ1Y3QgbmZzX3BhdGhjb25mICppbmZvKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggYjExMjg1Ny4uMzBiZWZjMyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC05MywyMSArOTMsNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENoZWNrIGlmIHRoZSBzdHJpbmcgcmVwcmVzZW50cyBhICJ2YWxpZCIgSVB2NCBhZGRyZXNzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2lwYWRkcjQoY29uc3QgY2hhciAqYnVmKQorc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJ5X2xvY2F0aW9uKHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKm1vdW50ZGF0YSwKKwkJCQkgICAgIGNoYXIgKnBhZ2UsIGNoYXIgKnBhZ2UyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uKQogewotCWludCByYywgY291bnQsIGluWzRdOworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PRU5UKTsKKwljaGFyICptbnRfcGF0aDsKKwlpbnQgcGFnZTJsZW47CisJdW5zaWduZWQgaW50IHM7CiAKLQlyYyA9IHNzY2FuZihidWYsICIlZC4lZC4lZC4lZCIsICZpblswXSwgJmluWzFdLCAmaW5bMl0sICZpblszXSk7Ci0JaWYgKHJjICE9IDQpCi0JCXJldHVybiAtRUlOVkFMOwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQ7IGNvdW50KyspIHsKLQkJaWYgKGluW2NvdW50XSA+IDI1NSkKLQkJCXJldHVybiAtRUlOVkFMOworCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihtbnRfcGF0aCkpCisJCXJldHVybiBtbnQ7CisJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOworCXBhZ2UyICs9IHN0cmxlbihtbnRfcGF0aCkgKyAxOworCXBhZ2UybGVuID0gUEFHRV9TSVpFIC0gc3RybGVuKG1udF9wYXRoKSAtIDE7CisKKwlmb3IgKHMgPSAwOyBzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzOyBzKyspIHsKKwkJY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpidWYgPSAmbG9jYXRpb24tPnNlcnZlcnNbc107CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CisKKwkJaWYgKGJ1Zi0+bGVuIDw9IDAgfHwgYnVmLT5sZW4gPj0gUEFHRV9TSVpFKQorCQkJY29udGludWU7CisKKwkJbW91bnRkYXRhLT5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOworCisJCWlmIChtZW1jaHIoYnVmLT5kYXRhLCBJUFY2X1NDT1BFX0RFTElNSVRFUiwgYnVmLT5sZW4pKQorCQkJY29udGludWU7CisJCW5mc19wYXJzZV9pcF9hZGRyZXNzKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sCisJCQkJbW91bnRkYXRhLT5hZGRyLCAmbW91bnRkYXRhLT5hZGRybGVuKTsKKwkJaWYgKG1vdW50ZGF0YS0+YWRkci0+c2FfZmFtaWx5ID09IEFGX1VOU1BFQykKKwkJCWNvbnRpbnVlOworCQluZnNfc2V0X3BvcnQobW91bnRkYXRhLT5hZGRyLCBORlNfUE9SVCk7CisKKwkJc3RybmNweShwYWdlMiwgYnVmLT5kYXRhLCBwYWdlMmxlbik7CisJCXBhZ2UyW3BhZ2UybGVuXSA9ICdcMCc7CisJCW1vdW50ZGF0YS0+aG9zdG5hbWUgPSBwYWdlMjsKKworCQlzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIlczolcyIsCisJCQkJbW91bnRkYXRhLT5ob3N0bmFtZSwKKwkJCQltb3VudGRhdGEtPm1udF9wYXRoKTsKKworCQltbnQgPSB2ZnNfa2Vybl9tb3VudCgmbmZzNF9yZWZlcnJhbF9mc190eXBlLCAwLCBwYWdlLCBtb3VudGRhdGEpOworCQlpZiAoIUlTX0VSUihtbnQpKQorCQkJYnJlYWs7CiAJfQotCXJldHVybiAwOworCXJldHVybiBtbnQ7CiB9CiAKIC8qKgpAQCAtMTI4LDcgKzE1OSw2IEBACiAJCS5hdXRoZmxhdm9yID0gTkZTX1NCKG1udF9wYXJlbnQtPm1udF9zYiktPmNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yLAogCX07CiAJY2hhciAqcGFnZSA9IE5VTEwsICpwYWdlMiA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IHM7CiAJaW50IGxvYywgZXJyb3I7CiAKIAlpZiAobG9jYXRpb25zID09IE5VTEwgfHwgbG9jYXRpb25zLT5ubG9jYXRpb25zIDw9IDApCkBAIC0xNTIsNTMgKzE4MiwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlsb2MgPSAwOwotCXdoaWxlIChsb2MgPCBsb2NhdGlvbnMtPm5sb2NhdGlvbnMgJiYgSVNfRVJSKG1udCkpIHsKKwlmb3IgKGxvYyA9IDA7IGxvYyA8IGxvY2F0aW9ucy0+bmxvY2F0aW9uczsgbG9jKyspIHsKIAkJY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uID0gJmxvY2F0aW9ucy0+bG9jYXRpb25zW2xvY107Ci0JCWNoYXIgKm1udF9wYXRoOwogCiAJCWlmIChsb2NhdGlvbiA9PSBOVUxMIHx8IGxvY2F0aW9uLT5uc2VydmVycyA8PSAwIHx8Ci0JCSAgICBsb2NhdGlvbi0+cm9vdHBhdGgubmNvbXBvbmVudHMgPT0gMCkgewotCQkJbG9jKys7CisJCSAgICBsb2NhdGlvbi0+cm9vdHBhdGgubmNvbXBvbmVudHMgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQl9CiAKLQkJbW50X3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygmbG9jYXRpb24tPnJvb3RwYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsKLQkJaWYgKElTX0VSUihtbnRfcGF0aCkpIHsKLQkJCWxvYysrOwotCQkJY29udGludWU7Ci0JCX0KLQkJbW91bnRkYXRhLm1udF9wYXRoID0gbW50X3BhdGg7Ci0KLQkJcyA9IDA7Ci0JCXdoaWxlIChzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzKSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciA9IHsKLQkJCQkuc2luX2ZhbWlseQk9IEFGX0lORVQsCi0JCQkJLnNpbl9wb3J0CT0gaHRvbnMoTkZTX1BPUlQpLAotCQkJfTsKLQotCQkJaWYgKGxvY2F0aW9uLT5zZXJ2ZXJzW3NdLmxlbiA8PSAwIHx8Ci0JCQkgICAgdmFsaWRfaXBhZGRyNChsb2NhdGlvbi0+c2VydmVyc1tzXS5kYXRhKSA8IDApIHsKLQkJCQlzKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW1vdW50ZGF0YS5ob3N0bmFtZSA9IGxvY2F0aW9uLT5zZXJ2ZXJzW3NdLmRhdGE7Ci0JCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24obW91bnRkYXRhLmhvc3RuYW1lKSwKLQkJCW1vdW50ZGF0YS5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOwotCQkJbW91bnRkYXRhLmFkZHJsZW4gPSBzaXplb2YoYWRkcik7Ci0KLQkJCXNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiVzOiVzIiwKLQkJCQkJbW91bnRkYXRhLmhvc3RuYW1lLAotCQkJCQltb3VudGRhdGEubW50X3BhdGgpOwotCi0JCQltbnQgPSB2ZnNfa2Vybl9tb3VudCgmbmZzNF9yZWZlcnJhbF9mc190eXBlLCAwLCBwYWdlLCAmbW91bnRkYXRhKTsKLQkJCWlmICghSVNfRVJSKG1udCkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXMrKzsKLQkJfQotCQlsb2MrKzsKKwkJbW50ID0gdHJ5X2xvY2F0aW9uKCZtb3VudGRhdGEsIHBhZ2UsIHBhZ2UyLCBsb2NhdGlvbik7CisJCWlmICghSVNfRVJSKG1udCkpCisJCQlicmVhazsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggYzkxMDQxMy4uODNlNzAwYSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTE2NTksOCArMTY1OSwxMCBAQAogCQlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwogCiAJCWN0eCA9IG5mc19maWxlX29wZW5fY29udGV4dChzYXR0ci0+aWFfZmlsZSk7Ci0JCWNyZWQgPSBjdHgtPmNyZWQ7Ci0JCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJaWYgKGN0eCkgeworCQkJY3JlZCA9IGN0eC0+Y3JlZDsKKwkJCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJfQogCX0KIAogCXN0YXR1cyA9IG5mczRfZG9fc2V0YXR0cihpbm9kZSwgY3JlZCwgZmF0dHIsIHNhdHRyLCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvcHJvYy5jIGIvZnMvbmZzL3Byb2MuYwppbmRleCA0ZGJiODRkLi4xOTM0NjUyIDEwMDY0NAotLS0gYS9mcy9uZnMvcHJvYy5jCisrKyBiL2ZzL25mcy9wcm9jLmMKQEAgLTY1LDE0ICs2NSwyMCBAQAogCiAJZHByaW50aygiJXM6IGNhbGwgZ2V0YXR0clxuIiwgX19mdW5jX18pOwogCW5mc19mYXR0cl9pbml0KGZhdHRyKTsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwKTsKKwkvKiBSZXRyeSB3aXRoIGRlZmF1bHQgYXV0aGVudGljYXRpb24gaWYgZGlmZmVyZW50ICovCisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiJXM6IHJlcGx5IGdldGF0dHI6ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCWRwcmludGsoIiVzOiBjYWxsIHN0YXRmc1xuIiwgX19mdW5jX18pOwogCW1zZy5ycGNfcHJvYyA9ICZuZnNfcHJvY2VkdXJlc1tORlNQUk9DX1NUQVRGU107CiAJbXNnLnJwY19yZXNwID0gJmZzaW5mbzsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwKTsKKwkvKiBSZXRyeSB3aXRoIGRlZmF1bHQgYXV0aGVudGljYXRpb24gaWYgZGlmZmVyZW50ICovCisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiJXM6IHJlcGx5IHN0YXRmczogJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGZmYjY5NzQuLmEzYjAwNjEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC05MSw2ICs5MSw3IEBACiAJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2Ugc3RyaW5nIGFyZ3VtZW50cyAqLwogCU9wdF9zZWMsIE9wdF9wcm90bywgT3B0X21vdW50cHJvdG8sIE9wdF9tb3VudGhvc3QsCiAJT3B0X2FkZHIsIE9wdF9tb3VudGFkZHIsIE9wdF9jbGllbnRhZGRyLAorCU9wdF9sb29rdXBjYWNoZSwKIAogCS8qIFNwZWNpYWwgbW91bnQgb3B0aW9ucyAqLwogCU9wdF91c2Vyc3BhY2UsIE9wdF9kZXByZWNhdGVkLCBPcHRfc2xvcHB5LApAQCAtMTU0LDYgKzE1NSw4IEBACiAJeyBPcHRfbW91bnRob3N0LCAibW91bnRob3N0PSVzIiB9LAogCXsgT3B0X21vdW50YWRkciwgIm1vdW50YWRkcj0lcyIgfSwKIAorCXsgT3B0X2xvb2t1cGNhY2hlLCAibG9va3VwY2FjaGU9JXMiIH0sCisKIAl7IE9wdF9lcnIsIE5VTEwgfQogfTsKIApAQCAtMjAwLDYgKzIwMywyMiBAQAogCXsgT3B0X3NlY19lcnIsIE5VTEwgfQogfTsKIAorZW51bSB7CisJT3B0X2xvb2t1cGNhY2hlX2FsbCwgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLAorCU9wdF9sb29rdXBjYWNoZV9ub25lLAorCisJT3B0X2xvb2t1cGNhY2hlX2VycgorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgbmZzX2xvb2t1cGNhY2hlX3Rva2VucyA9IHsKKwl7IE9wdF9sb29rdXBjYWNoZV9hbGwsICJhbGwiIH0sCisJeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3MiIH0sCisJeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3NpdGl2ZSIgfSwKKwl7IE9wdF9sb29rdXBjYWNoZV9ub25lLCAibm9uZSIgfSwKKworCXsgT3B0X2xvb2t1cGNhY2hlX2VyciwgTlVMTCB9Cit9OworCiAKIHN0YXRpYyB2b2lkIG5mc191bW91bnRfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCAgbmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopOwpAQCAtMjA5LDcgKzIyOCw2IEBACiBzdGF0aWMgaW50IG5mc194ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIHN0YXRpYyB2b2lkIG5mc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLXN0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCBuZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfZnNfdHlwZSA9IHsKQEAgLTIzMiw3ICsyNTAsNiBAQAogCS5hbGxvY19pbm9kZQk9IG5mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IG5mc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IG5mc193cml0ZV9pbm9kZSwKLQkucHV0X3N1cGVyCT0gbmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG5mc19zdGF0ZnMsCiAJLmNsZWFyX2lub2RlCT0gbmZzX2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMzM3LDI2ICszNTQsMjAgQEAKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJm5mc19mc190eXBlKTsKIH0KIAotdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCi17Ci0JYXRvbWljX2luYygmc2VydmVyLT5hY3RpdmUpOwotfQotCi12b2lkIG5mc19zYl9kZWFjdGl2ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZXJ2ZXItPmFjdGl2ZSkpCi0JCXdha2VfdXAoJnNlcnZlci0+YWN0aXZlX3dxKTsKLX0KLQotc3RhdGljIHZvaWQgbmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQordm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzYik7Ci0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIG9wcyB0byB0aGlzIHNlcnZlci4KLQkgKiBJZiBzbywgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggYmVmb3JlIGFsbG93aW5nIHRoZQotCSAqIHVubW91bnQgdG8gY29udGludWUuCi0JICovCi0Jd2FpdF9ldmVudChzZXJ2ZXItPmFjdGl2ZV93cSwgYXRvbWljX3JlYWQoJnNlcnZlci0+YWN0aXZlKSA9PSAwKTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmc2VydmVyLT5hY3RpdmUpID09IDEpCisJCWF0b21pY19pbmMoJnNiLT5zX2FjdGl2ZSk7Cit9CisKK3ZvaWQgbmZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzYik7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2VydmVyLT5hY3RpdmUpKQorCQlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKIH0KIAogLyoKQEAgLTY2NCwyNSArNjc1LDYgQEAKIH0KIAogLyoKLSAqIFNldCB0aGUgcG9ydCBudW1iZXIgaW4gYW4gYWRkcmVzcy4gIEJlIGFnbm9zdGljIGFib3V0IHRoZSBhZGRyZXNzIGZhbWlseS4KLSAqLwotc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQotewotCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6IHsKLQkJc3RydWN0IHNvY2thZGRyX2luICphcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7Ci0JCWFwLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBBRl9JTkVUNjogewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOwotCQlhcC0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0JCWJyZWFrOwotCX0KLQl9Ci19Ci0KLS8qCiAgKiBTYW5pdHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgbW91bnQgY29tbWFuZC4KICAqCiAgKiBBZGRyZXNzIGZhbWlseSBtdXN0IGJlIGluaXRpYWxpemVkLCBhbmQgYWRkcmVzcyBtdXN0IG5vdCBiZQpAQCAtNzI0LDIwICs3MTYsMjIgQEAKIAkqYWRkcl9sZW4gPSAwOwogfQogCi0jZGVmaW5lIElQVjZfU0NPUEVfREVMSU1JVEVSCSclJwotCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2Nl9zY29wZV9pZChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IHNpemVfdCBzdHJfbGVuLAotCQkJCSAgICBjb25zdCBjaGFyICpkZWxpbSwKLQkJCQkgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKK3N0YXRpYyBpbnQgbmZzX3BhcnNlX2lwdjZfc2NvcGVfaWQoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBzaXplX3Qgc3RyX2xlbiwKKwkJCQkgICBjb25zdCBjaGFyICpkZWxpbSwKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQogewogCWNoYXIgKnA7CiAJc2l6ZV90IGxlbjsKIAotCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpCi0JCXJldHVybiA7CisJaWYgKChzdHJpbmcgKyBzdHJfbGVuKSA9PSBkZWxpbSkKKwkJcmV0dXJuIDE7CisKIAlpZiAoKmRlbGltICE9IElQVjZfU0NPUEVfREVMSU1JVEVSKQotCQlyZXR1cm47CisJCXJldHVybiAwOworCisJaWYgKCEoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkKKwkJcmV0dXJuIDA7CiAKIAlsZW4gPSAoc3RyaW5nICsgc3RyX2xlbikgLSBkZWxpbSAtIDE7CiAJcCA9IGtzdHJuZHVwKGRlbGltICsgMSwgbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTc1MCwxNCArNzQ0LDIwIEBACiAJCQlzY29wZV9pZCA9IGRldi0+aWZpbmRleDsKIAkJCWRldl9wdXQoZGV2KTsKIAkJfSBlbHNlIHsKLQkJCS8qIHNjb3BlX2lkIGlzIHNldCB0byB6ZXJvIG9uIGVycm9yICovCi0JCQlzdHJpY3Rfc3RydG91bChwLCAxMCwgJnNjb3BlX2lkKTsKKwkJCWlmIChzdHJpY3Rfc3RydG91bChwLCAxMCwgJnNjb3BlX2lkKSA9PSAwKSB7CisJCQkJa2ZyZWUocCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCX0KIAogCQlrZnJlZShwKTsKKwogCQlzaW42LT5zaW42X3Njb3BlX2lkID0gc2NvcGVfaWQ7CiAJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBJUHY2IHNjb3BlIElEID0gJWx1XG4iLCBzY29wZV9pZCk7CisJCXJldHVybiAxOwogCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2Nl9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCkBAIC03NzMsOSArNzczLDExIEBACiAKIAkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJKmFkZHJfbGVuID0gc2l6ZW9mKCpzaW42KTsKLQkJaWYgKGluNl9wdG9uKHN0cmluZywgc3RyX2xlbiwgYWRkciwgSVBWNl9TQ09QRV9ERUxJTUlURVIsICZkZWxpbSkpIHsKLQkJCW5mc19wYXJzZV9pcHY2X3Njb3BlX2lkKHN0cmluZywgc3RyX2xlbiwgZGVsaW0sIHNpbjYpOwotCQkJcmV0dXJuOworCQlpZiAoaW42X3B0b24oc3RyaW5nLCBzdHJfbGVuLCBhZGRyLAorCQkJCQlJUFY2X1NDT1BFX0RFTElNSVRFUiwgJmRlbGltKSAhPSAwKSB7CisJCQlpZiAobmZzX3BhcnNlX2lwdjZfc2NvcGVfaWQoc3RyaW5nLCBzdHJfbGVuLAorCQkJCQkJCWRlbGltLCBzaW42KSAhPSAwKQorCQkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtNzk4LDcgKzgwMCw3IEBACiAgKiBJZiB0aGVyZSBpcyBhIHByb2JsZW0gY29uc3RydWN0aW5nIHRoZSBuZXcgc29ja2FkZHIsIHNldCB0aGUgYWRkcmVzcwogICogZmFtaWx5IHRvIEFGX1VOU1BFQy4KICAqLwotc3RhdGljIHZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwKK3ZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwKIAkJCQkgc3RydWN0IHNvY2thZGRyICpzYXAsIHNpemVfdCAqYWRkcl9sZW4pCiB7CiAJdW5zaWduZWQgaW50IGksIGNvbG9uczsKQEAgLTEyNTgsNiArMTI2MCwzMCBAQAogCQkJCQkgICAgICZtbnQtPm1vdW50X3NlcnZlci5hZGRybGVuKTsKIAkJCWtmcmVlKHN0cmluZyk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfbG9va3VwY2FjaGU6CisJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7CisJCQlpZiAoc3RyaW5nID09IE5VTEwpCisJCQkJZ290byBvdXRfbm9tZW07CisJCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywKKwkJCQkJbmZzX2xvb2t1cGNhY2hlX3Rva2VucywgYXJncyk7CisJCQlrZnJlZShzdHJpbmcpOworCQkJc3dpdGNoICh0b2tlbikgeworCQkJCWNhc2UgT3B0X2xvb2t1cGNhY2hlX2FsbDoKKwkJCQkJbW50LT5mbGFncyAmPSB+KE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmU6CisJCQkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORTsKKwkJCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHOworCQkJCQlicmVhazsKKwkJCQljYXNlIE9wdF9sb29rdXBjYWNoZV9ub25lOgorCQkJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllcnJvcnMrKzsKKwkJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgaW52YWxpZCAiCisJCQkJCQkJImxvb2t1cGNhY2hlIGFyZ3VtZW50XG4iKTsKKwkJCX07CisJCQlicmVhazsKIAogCQkvKgogCQkgKiBTcGVjaWFsIG9wdGlvbnMKQEAgLTE1NTgsNyArMTU4NCw3IEBACiAJCSAqIFRyYW5zbGF0ZSB0byBuZnNfcGFyc2VkX21vdW50X2RhdGEsIHdoaWNoIG5mc19maWxsX3N1cGVyCiAJCSAqIGNhbiBkZWFsIHdpdGguCiAJCSAqLwotCQlhcmdzLT5mbGFncwkJPSBkYXRhLT5mbGFnczsKKwkJYXJncy0+ZmxhZ3MJCT0gZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfRkxBR01BU0s7CiAJCWFyZ3MtPnJzaXplCQk9IGRhdGEtPnJzaXplOwogCQlhcmdzLT53c2l6ZQkJPSBkYXRhLT53c2l6ZTsKIAkJYXJncy0+dGltZW8JCT0gZGF0YS0+dGltZW87CkBAIC0yNDMzLDcgKzI0NTksNyBAQAogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCi0JcyA9IHNnZXQoJm5mc19mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CisJcyA9IHNnZXQoJm5mczRfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHMpOwogCQlnb3RvIG91dF9lcnJfbm9zYjsKQEAgLTI1MTgsNyArMjU0NCw3IEBACiAJCWNvbXBhcmVfc3VwZXIgPSBOVUxMOwogCiAJLyogR2V0IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQgYWxyZWFkeSBleGlzdHMgKi8KLQlzID0gc2dldCgmbmZzX2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKKwlzID0gc2dldCgmbmZzNF9mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewogCQllcnJvciA9IFBUUl9FUlIocyk7CiAJCWdvdG8gb3V0X2Vycl9ub3NiOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jCmluZGV4IGYwODllNTguLmVjYzI5NTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy91bmxpbmsuYworKysgYi9mcy9uZnMvdW5saW5rLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogCW5mc19kZWNfc2lsbHljb3VudChkYXRhLT5kaXIpOwogCW5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7Ci0JbmZzX3NiX2RlYWN0aXZlKE5GU19TQihzYikpOworCW5mc19zYl9kZWFjdGl2ZShzYik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mc191bmxpbmtfb3BzID0gewpAQCAtMTE4LDYgKzExOCw3IEBACiAJCS5ycGNfbWVzc2FnZSA9ICZtc2csCiAJCS5jYWxsYmFja19vcHMgPSAmbmZzX3VubGlua19vcHMsCiAJCS5jYWxsYmFja19kYXRhID0gZGF0YSwKKwkJLndvcmtxdWV1ZSA9IG5mc2lvZF93b3JrcXVldWUsCiAJCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLAogCX07CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJCW5mc19kZWNfc2lsbHljb3VudChkaXIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JbmZzX3NiX2FjdGl2ZShORlNfU0VSVkVSKGRpcikpOworCW5mc19zYl9hY3RpdmUoZGlyLT5pX3NiKTsKIAlkYXRhLT5hcmdzLmZoID0gTkZTX0ZIKGRpcik7CiAJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPnJlcy5kaXJfYXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggMzIyOWUyMS4uOWY5ODQ1OCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTE0MjcsOCArMTQyNyw5IEBACiAJCS5iZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAogCQkuc3luY19tb2RlID0gV0JfU1lOQ19OT05FLAogCQkubnJfdG9fd3JpdGUgPSBMT05HX01BWCwKKwkJLnJhbmdlX3N0YXJ0ID0gMCwKKwkJLnJhbmdlX2VuZCA9IExMT05HX01BWCwKIAkJLmZvcl93cml0ZXBhZ2VzID0gMSwKLQkJLnJhbmdlX2N5Y2xpYyA9IDEsCiAJfTsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9mcy9ubHMvbmxzX2Jhc2UuYyBiL2ZzL25scy9ubHNfYmFzZS5jCmluZGV4IDY0OTY1ZTEuLjliMGVmZGEgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfYmFzZS5jCisrKyBiL2ZzL25scy9ubHNfYmFzZS5jCkBAIC0xMyw5ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmxzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbmxzX3RhYmxlIGRlZmF1bHRfdGFibGU7CkBAIC0yMTUsMjQgKzIxMyw3IEBACiAKIHN0cnVjdCBubHNfdGFibGUgKmxvYWRfbmxzKGNoYXIgKmNoYXJzZXQpCiB7Ci0Jc3RydWN0IG5sc190YWJsZSAqbmxzOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaW50IHJldDsKLSNlbmRpZgotCi0JbmxzID0gZmluZF9ubHMoY2hhcnNldCk7Ci0JaWYgKG5scykKLQkJcmV0dXJuIG5sczsKLQotI2lmZGVmIENPTkZJR19LTU9ECi0JcmV0ID0gcmVxdWVzdF9tb2R1bGUoIm5sc18lcyIsIGNoYXJzZXQpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoIlVuYWJsZSB0byBsb2FkIE5MUyBjaGFyc2V0ICVzXG4iLCBjaGFyc2V0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW5scyA9IGZpbmRfbmxzKGNoYXJzZXQpOwotI2VuZGlmCi0JcmV0dXJuIG5sczsKKwlyZXR1cm4gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoZmluZF9ubHMoY2hhcnNldCksICJubHNfJXMiLCBjaGFyc2V0KTsKIH0KIAogdm9pZCB1bmxvYWRfbmxzKHN0cnVjdCBubHNfdGFibGUgKm5scykKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggZDAyMDg2Ni4uMzE0MGE0NCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCQkJcGFnZXNbbnJdID0gKmNhY2hlZF9wYWdlOwogCQkJcGFnZV9jYWNoZV9nZXQoKmNhY2hlZF9wYWdlKTsKIAkJCWlmICh1bmxpa2VseSghcGFnZXZlY19hZGQobHJ1X3B2ZWMsICpjYWNoZWRfcGFnZSkpKQotCQkJCV9fcGFnZXZlY19scnVfYWRkKGxydV9wdmVjKTsKKwkJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKGxydV9wdmVjKTsKIAkJCSpjYWNoZWRfcGFnZSA9IE5VTEw7CiAJCX0KIAkJaW5kZXgrKzsKQEAgLTIwODQsNyArMjA4NCw3IEBACiAJCQkJCQlPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKIAkJfQogICAJfQotCXBhZ2V2ZWNfbHJ1X2FkZCgmbHJ1X3B2ZWMpOworCXBhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CiAJbnRmc19kZWJ1ZygiRG9uZS4gIFJldHVybmluZyAlcyAod3JpdHRlbiAweCVseCwgc3RhdHVzICVsaSkuIiwKIAkJCXdyaXR0ZW4gPyAid3JpdHRlbiIgOiAic3RhdHVzIiwgKHVuc2lnbmVkIGxvbmcpd3JpdHRlbiwKIAkJCShsb25nKXN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBjMjU3ODBhLi44MDJjNDE0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTIzNDksNyArMjM0OSw3IEBACiAJCSAqLwogCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgeHMtPmJ1Y2tldC5iaHNbMF0tPmJfYmxvY2tuciArIDEsCiAJCQkJCWJsa19wZXJfYnVja2V0IC0gMSwgJnhzLT5idWNrZXQuYmhzWzFdLAotCQkJCQlPQ0ZTMl9CSF9DQUNIRUQpOworCQkJCQkwKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyssIGJsa25vICs9IGJsa19wZXJfYnVja2V0KSB7CiAJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBibGtubywgYmxrX3Blcl9idWNrZXQsCi0JCQkJCWJ1Y2tldC5iaHMsIE9DRlMyX0JIX0NBQ0hFRCk7CisJCQkJCWJ1Y2tldC5iaHMsIDApOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTI2OTQsNyArMjY5NCw3IEBACiAJCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwKIAkJCQkJeHMtPmJ1Y2tldC5iaHNbMF0tPmJfYmxvY2tuciArIDEsCiAJCQkJCWJsa19wZXJfYnVja2V0IC0gMSwgJnhzLT5idWNrZXQuYmhzWzFdLAotCQkJCQlPQ0ZTMl9CSF9DQUNIRUQpOworCQkJCQkwKTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJcmV0dXJuIHJldDsKQEAgLTI4OTgsOCArMjg5OCw3IEBACiAJaWYgKCFiaHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIGJsa25vLCBibGtfcGVyX2J1Y2tldCwgYmhzLAotCQkJCU9DRlMyX0JIX0NBQ0hFRCk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIGJsa25vLCBibGtfcGVyX2J1Y2tldCwgYmhzLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtMzE1Myw4ICszMTUyLDcgQEAKIAogCWlmICghbmV3KQogCQlyZXR1cm4gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIGJsa25vLAotCQkJCQkgYmxrX3Blcl9idWNrZXQsIGJocywKLQkJCQkJIE9DRlMyX0JIX0NBQ0hFRCk7CisJCQkJCSBibGtfcGVyX2J1Y2tldCwgYmhzLCAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CiAJCWJoc1tpXSA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxrbm8gKyBpKTsKQEAgLTQxMDEsNyArNDA5OSw3IEBACiAJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLAogCQkJCQl4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yICsgMSwKIAkJCQkJYmxrX3Blcl9idWNrZXQgLSAxLCAmeHMtPmJ1Y2tldC5iaHNbMV0sCi0JCQkJCU9DRlMyX0JIX0NBQ0hFRCk7CisJCQkJCTApOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYyBiL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYwppbmRleCAzZDNlMTY2Li5hOTdiNDc3IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMKKysrIGIvZnMvcGFydGl0aW9ucy9hY29ybi5jCkBAIC0yNzUsMTYgKzI3NSw2IEBACiAJaWQgPSBkYXRhWzB4MWZjXSAmIDE1OwogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfTUZNCi0JaWYgKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTUZNX0FDT1JOX01BSk9SKSB7Ci0JCWV4dGVybiB2b2lkIHhkX3NldF9nZW9tZXRyeShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCi0JCQl1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBpbnQpOwotCQl4ZF9zZXRfZ2VvbWV0cnkoYmRldiwgZHItPnNlY3NwZXJ0cmFjaywgaGVhZHMsIDEpOwotCQlpbnZhbGlkYXRlX2JoX2xydXMoKTsKLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgMCk7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIFdvcmsgb3V0IHN0YXJ0IG9mIG5vbi1hZGZzIHBhcnRpdGlvbi4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCA3NDA4MjI3Li5jZmIwYzgwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0xOTUsNiArMTk1LDE0IEBACiAJcmV0dXJuIEVSUl9QVFIocmVzKTsKIH0KIAorc3RhdGljIHNzaXplX3QgcGFydF9wYXJ0aXRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwLT5wYXJ0bm8pOworfQorCiBzdGF0aWMgc3NpemVfdCBwYXJ0X3N0YXJ0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0yNjAsNiArMjY4LDcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCBTX0lSVUdPLCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgU19JUlVHTywgcGFydF9zdGFydF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzaXplLCBTX0lSVUdPLCBwYXJ0X3NpemVfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdCwgU19JUlVHTywgcGFydF9zdGF0X3Nob3csIE5VTEwpOwpAQCAtMjY5LDYgKzI3OCw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcGFydGl0aW9uLmF0dHIsCiAJJmRldl9hdHRyX3N0YXJ0LmF0dHIsCiAJJmRldl9hdHRyX3NpemUuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdC5hdHRyLApAQCAtNTM4LDEwICs1NDgsMjMgQEAKIAkJc2VjdG9yX3QgZnJvbSA9IHN0YXRlLT5wYXJ0c1twXS5mcm9tOwogCQlpZiAoIXNpemUpCiAJCQljb250aW51ZTsKLQkJaWYgKGZyb20gKyBzaXplID4gZ2V0X2NhcGFjaXR5KGRpc2spKSB7CisJCWlmIChmcm9tID49IGdldF9jYXBhY2l0eShkaXNrKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSIlczogcCVkIGV4Y2VlZHMgZGV2aWNlIGNhcGFjaXR5XG4iLAotCQkJCWRpc2stPmRpc2tfbmFtZSwgcCk7CisJCQkgICAgICAgIiVzOiBwJWQgaWdub3JlZCwgc3RhcnQgJWxsdSBpcyBiZWhpbmQgdGhlIGVuZCBvZiB0aGUgZGlza1xuIiwKKwkJCSAgICAgICBkaXNrLT5kaXNrX25hbWUsIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpIGZyb20pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZyb20gKyBzaXplID4gZ2V0X2NhcGFjaXR5KGRpc2spKSB7CisJCQkvKgorCQkJICogd2UgY2FuIG5vdCBpZ25vcmUgcGFydGl0aW9ucyBvZiBicm9rZW4gdGFibGVzCisJCQkgKiBjcmVhdGVkIGJ5IGZvciBleGFtcGxlIGNhbWVyYSBmaXJtd2FyZSwgYnV0IHdlCisJCQkgKiBsaW1pdCB0aGVtIHRvIHRoZSBlbmQgb2YgdGhlIGRpc2sgdG8gYXZvaWQKKwkJCSAqIGNyZWF0aW5nIGludmFsaWQgYmxvY2sgZGV2aWNlcworCQkJICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBwJWQgc2l6ZSAlbGx1IGxpbWl0ZWQgdG8gZW5kIG9mIGRpc2tcbiIsCisJCQkgICAgICAgZGlzay0+ZGlza19uYW1lLCBwLCAodW5zaWduZWQgbG9uZyBsb25nKSBzaXplKTsKKwkJCXNpemUgPSBnZXRfY2FwYWNpdHkoZGlzaykgLSBmcm9tOwogCQl9CiAJCXJlcyA9IGFkZF9wYXJ0aXRpb24oZGlzaywgcCwgZnJvbSwgc2l6ZSwgc3RhdGUtPnBhcnRzW3BdLmZsYWdzKTsKIAkJaWYgKHJlcykgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY0YmMwZTcuLmJiOWY0YjAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTM4OCwyMCArMzg4LDIwIEBACiAKIAkJLyogYWRkIHVwIGxpdmUgdGhyZWFkIHN0YXRzIGF0IHRoZSBncm91cCBsZXZlbCAqLwogCQlpZiAod2hvbGUpIHsKKwkJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRhc2s7CiAJCQlkbyB7CiAJCQkJbWluX2ZsdCArPSB0LT5taW5fZmx0OwogCQkJCW1hal9mbHQgKz0gdC0+bWFqX2ZsdDsKLQkJCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0YXNrX3V0aW1lKHQpKTsKLQkJCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0YXNrX3N0aW1lKHQpKTsKIAkJCQlndGltZSA9IGNwdXRpbWVfYWRkKGd0aW1lLCB0YXNrX2d0aW1lKHQpKTsKIAkJCQl0ID0gbmV4dF90aHJlYWQodCk7CiAJCQl9IHdoaWxlICh0ICE9IHRhc2spOwogCiAJCQltaW5fZmx0ICs9IHNpZy0+bWluX2ZsdDsKIAkJCW1hal9mbHQgKz0gc2lnLT5tYWpfZmx0OwotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgc2lnLT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBzaWctPnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHRhc2ssICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKKwkJCXN0aW1lID0gY3B1dGltZS5zdGltZTsKIAkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHNpZy0+Z3RpbWUpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IGI2NzVhNDkuLjYxYjI1ZjQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KQEAgLTEzNyw2ICsxMzYsOCBAQAogCXVuc2lnbmVkIGxvbmcgYWxsb3dlZDsKIAlzdHJ1Y3Qgdm1hbGxvY19pbmZvIHZtaTsKIAlsb25nIGNhY2hlZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzW05SX0xSVV9MSVNUU107CisJaW50IGxydTsKIAogLyoKICAqIGRpc3BsYXkgaW4ga2lsb2J5dGVzLgpAQCAtMTU1LDUxICsxNTYsNzAgQEAKIAogCWdldF92bWFsbG9jX2luZm8oJnZtaSk7CiAKKwlmb3IgKGxydSA9IExSVV9CQVNFOyBscnUgPCBOUl9MUlVfTElTVFM7IGxydSsrKQorCQlwYWdlc1tscnVdID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfTFJVX0JBU0UgKyBscnUpOworCiAJLyoKIAkgKiBUYWdnZWQgZm9ybWF0LCBmb3IgZWFzeSBncmVwcGluZyBhbmQgZXhwYW5zaW9uLgogCSAqLwogCWxlbiA9IHNwcmludGYocGFnZSwKLQkJIk1lbVRvdGFsOiAgICAgJThsdSBrQlxuIgotCQkiTWVtRnJlZTogICAgICAlOGx1IGtCXG4iCi0JCSJCdWZmZXJzOiAgICAgICU4bHUga0JcbiIKLQkJIkNhY2hlZDogICAgICAgJThsdSBrQlxuIgotCQkiU3dhcENhY2hlZDogICAlOGx1IGtCXG4iCi0JCSJBY3RpdmU6ICAgICAgICU4bHUga0JcbiIKLQkJIkluYWN0aXZlOiAgICAgJThsdSBrQlxuIgorCQkiTWVtVG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJIk1lbUZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisJCSJCdWZmZXJzOiAgICAgICAgJThsdSBrQlxuIgorCQkiQ2FjaGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJIlN3YXBDYWNoZWQ6ICAgICAlOGx1IGtCXG4iCisJCSJBY3RpdmU6ICAgICAgICAgJThsdSBrQlxuIgorCQkiSW5hY3RpdmU6ICAgICAgICU4bHUga0JcbiIKKwkJIkFjdGl2ZShhbm9uKTogICAlOGx1IGtCXG4iCisJCSJJbmFjdGl2ZShhbm9uKTogJThsdSBrQlxuIgorCQkiQWN0aXZlKGZpbGUpOiAgICU4bHUga0JcbiIKKwkJIkluYWN0aXZlKGZpbGUpOiAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkiVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKKwkJIk1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCQkiSGlnaFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSJIaWdoRnJlZTogICAgICU4bHUga0JcbiIKLQkJIkxvd1RvdGFsOiAgICAgJThsdSBrQlxuIgotCQkiTG93RnJlZTogICAgICAlOGx1IGtCXG4iCisJCSJIaWdoVG90YWw6ICAgICAgJThsdSBrQlxuIgorCQkiSGlnaEZyZWU6ICAgICAgICU4bHUga0JcbiIKKwkJIkxvd1RvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSJMb3dGcmVlOiAgICAgICAgJThsdSBrQlxuIgogI2VuZGlmCi0JCSJTd2FwVG90YWw6ICAgICU4bHUga0JcbiIKLQkJIlN3YXBGcmVlOiAgICAgJThsdSBrQlxuIgotCQkiRGlydHk6ICAgICAgICAlOGx1IGtCXG4iCi0JCSJXcml0ZWJhY2s6ICAgICU4bHUga0JcbiIKLQkJIkFub25QYWdlczogICAgJThsdSBrQlxuIgotCQkiTWFwcGVkOiAgICAgICAlOGx1IGtCXG4iCi0JCSJTbGFiOiAgICAgICAgICU4bHUga0JcbiIKLQkJIlNSZWNsYWltYWJsZTogJThsdSBrQlxuIgotCQkiU1VucmVjbGFpbTogICAlOGx1IGtCXG4iCi0JCSJQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKKwkJIlN3YXBUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSJTd2FwRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkiRGlydHk6ICAgICAgICAgICU4bHUga0JcbiIKKwkJIldyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCisJCSJBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkiTWFwcGVkOiAgICAgICAgICU4bHUga0JcbiIKKwkJIlNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSJTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkiU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIKKwkJIlBhZ2VUYWJsZXM6ICAgICAlOGx1IGtCXG4iCiAjaWZkZWYgQ09ORklHX1FVSUNLTElTVAotCQkiUXVpY2tsaXN0czogICAlOGx1IGtCXG4iCisJCSJRdWlja2xpc3RzOiAgICAgJThsdSBrQlxuIgogI2VuZGlmCi0JCSJORlNfVW5zdGFibGU6ICU4bHUga0JcbiIKLQkJIkJvdW5jZTogICAgICAgJThsdSBrQlxuIgotCQkiV3JpdGViYWNrVG1wOiAlOGx1IGtCXG4iCi0JCSJDb21taXRMaW1pdDogICU4bHUga0JcbiIKLQkJIkNvbW1pdHRlZF9BUzogJThsdSBrQlxuIgotCQkiVm1hbGxvY1RvdGFsOiAlOGx1IGtCXG4iCi0JCSJWbWFsbG9jVXNlZDogICU4bHUga0JcbiIKLQkJIlZtYWxsb2NDaHVuazogJThsdSBrQlxuIiwKKwkJIk5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCisJCSJCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgorCQkiV3JpdGViYWNrVG1wOiAgICU4bHUga0JcbiIKKwkJIkNvbW1pdExpbWl0OiAgICAlOGx1IGtCXG4iCisJCSJDb21taXR0ZWRfQVM6ICAgJThsdSBrQlxuIgorCQkiVm1hbGxvY1RvdGFsOiAgICU4bHUga0JcbiIKKwkJIlZtYWxsb2NVc2VkOiAgICAlOGx1IGtCXG4iCisJCSJWbWFsbG9jQ2h1bms6ICAgJThsdSBrQlxuIiwKIAkJSyhpLnRvdGFscmFtKSwKIAkJSyhpLmZyZWVyYW0pLAogCQlLKGkuYnVmZmVycmFtKSwKIAkJSyhjYWNoZWQpLAogCQlLKHRvdGFsX3N3YXBjYWNoZV9wYWdlcyksCi0JCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFKSksCi0JCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkUpKSwKKwkJSyhwYWdlc1tMUlVfQUNUSVZFX0FOT05dICAgKyBwYWdlc1tMUlVfQUNUSVZFX0ZJTEVdKSwKKwkJSyhwYWdlc1tMUlVfSU5BQ1RJVkVfQU5PTl0gKyBwYWdlc1tMUlVfSU5BQ1RJVkVfRklMRV0pLAorCQlLKHBhZ2VzW0xSVV9BQ1RJVkVfQU5PTl0pLAorCQlLKHBhZ2VzW0xSVV9JTkFDVElWRV9BTk9OXSksCisJCUsocGFnZXNbTFJVX0FDVElWRV9GSUxFXSksCisJCUsocGFnZXNbTFJVX0lOQUNUSVZFX0ZJTEVdKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCUsocGFnZXNbTFJVX1VORVZJQ1RBQkxFXSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfTUxPQ0spKSwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJCUsoaS50b3RhbGhpZ2gpLAogCQlLKGkuZnJlZWhpZ2gpLApAQCAtNzA0LDI4ICs3MjQsNiBAQAogCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0vKgotICogd3JpdGluZyAnQycgdG8gL3Byb2Mvc3lzcnEtdHJpZ2dlciBpcyBsaWtlIHN5c3JxLUMKLSAqLwotc3RhdGljIHNzaXplX3Qgd3JpdGVfc3lzcnFfdHJpZ2dlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpZiAoY291bnQpIHsKLQkJY2hhciBjOwotCi0JCWlmIChnZXRfdXNlcihjLCBidWYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCV9faGFuZGxlX3N5c3JxKGMsIE5VTEwsIDApOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc3lzcnFfdHJpZ2dlcl9vcGVyYXRpb25zID0gewotCS53cml0ZQkJPSB3cml0ZV9zeXNycV90cmlnZ2VyLAotfTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SCiAjZGVmaW5lIEtQTVNJWkUgc2l6ZW9mKHU2NCkKICNkZWZpbmUgS1BNTUFTSyAoS1BNU0laRSAtIDEpCkBAIC05MzQsNyArOTMyLDQgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKIAlwcm9jX3ZtY29yZSA9IHByb2NfY3JlYXRlKCJ2bWNvcmUiLCBTX0lSVVNSLCBOVUxMLCAmcHJvY192bWNvcmVfb3BlcmF0aW9ucyk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLQlwcm9jX2NyZWF0ZSgic3lzcnEtdHJpZ2dlciIsIFNfSVdVU1IsIE5VTEwsICZwcm9jX3N5c3JxX3RyaWdnZXJfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvdm1jb3JlLmMgYi9mcy9wcm9jL3ZtY29yZS5jCmluZGV4IDg0MTM2OGIuLmNkOWNhNjcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtMzIsOSArMzIsNiBAQAogLyogVG90YWwgc2l6ZSBvZiB2bWNvcmUgZmlsZS4gKi8KIHN0YXRpYyB1NjQgdm1jb3JlX3NpemU7CiAKLS8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwotdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7Ci0KIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192bWNvcmUgPSBOVUxMOwogCiAvKiBSZWFkcyBhIHBhZ2UgZnJvbSB0aGUgb2xkbWVtIGRldmljZSBmcm9tIGdpdmVuIG9mZnNldC4gKi8KQEAgLTY0Nyw3ICs2NDQsNyBAQAogCWludCByYyA9IDA7CiAKIAkvKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSwgdGhlbiBjYXB0dXJlIHRoZSBkdW1wLiovCi0JaWYgKCEoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkpCisJaWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSkKIAkJcmV0dXJuIHJjOwogCXJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA1MTQ1Y2I5Li43NmFjZGJjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCQkJZ290byBhZGRfZXJyb3I7CiAKIAkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQotCQkJX19wYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCXJldHVybiAwOwogCiAgZnNpemVfZXhjZWVkZWQ6CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiMTMxMjM0Li5mMDMxZDFjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmFtZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyYW1mc19iYWNraW5nX2Rldl9pbmZvOwogCQltYXBwaW5nX3NldF9nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nLCBHRlBfSElHSFVTRVIpOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggYjlkYmVlYy4uMzcxNzNmYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTgsOCArOCw2IEBACiAKIC8qIHByb2MgaW5mbyBzdXBwb3J0IGEgbGEgb25lIGNyZWF0ZWQgYnkgU2l6aWZAQm90aWsuUlUgZm9yIFBHQyAqLwogCi0vKiAkSWQ6IHByb2Nmcy5jLHYgMS4xLjguMiAyMDAxLzA3LzE1IDE3OjA4OjQyIGdvZCBFeHAgJCAqLwotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC02MjEsNyArNjE5LDYgQEAKICNlbmRpZgogCiAvKgotICogJExvZzogcHJvY2ZzLmMsdiAkCiAgKiBSZXZpc2lvbiAxLjEuOC4yICAyMDAxLzA3LzE1IDE3OjA4OjQyICBnb2QKICAqICAuIHVzZSBnZXRfc3VwZXIoKSBpbiBwcm9jZnMuYwogICogIC4gcmVtb3ZlIHJlbW92ZV9zYXZlX2xpbmsoKSBmcm9tIHJlaXNlcmZzX2RvX3RydW5jYXRlKCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGJiM2NiNWIuLmFkOTI0NjEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJeGFkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFkaXIpKSB7CiAJCXJldHVybiBFUlJfQ0FTVCh4YWRpcik7Ci0JfSBlbHNlIGlmICh4YWRpciAmJiAheGFkaXItPmRfaW5vZGUpIHsKKwl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewogCQlkcHV0KHhhZGlyKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IGJkMjBmN2YuLmViYTJlYWIgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNDUyLDE3ICs0NTIsMzQgQEAKIAogaW50IHNlcV9iaXRtYXAoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgbnJfYml0cykKIHsKLQlzaXplX3QgbGVuID0gYml0bWFwX3NjbnByaW50Zl9sZW4obnJfYml0cyk7Ci0KLQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7Ci0JCWJpdG1hcF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkgYml0cywgbnJfYml0cyk7Ci0JCW0tPmNvdW50ICs9IGxlbjsKLQkJcmV0dXJuIDA7CisJaWYgKG0tPmNvdW50IDwgbS0+c2l6ZSkgeworCQlpbnQgbGVuID0gYml0bWFwX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwKKwkJCQltLT5zaXplIC0gbS0+Y291bnQsIGJpdHMsIG5yX2JpdHMpOworCQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7CisJCQltLT5jb3VudCArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAltLT5jb3VudCA9IG0tPnNpemU7CiAJcmV0dXJuIC0xOwogfQorRVhQT1JUX1NZTUJPTChzZXFfYml0bWFwKTsKKworaW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCXVuc2lnbmVkIGludCBucl9iaXRzKQoreworCWlmIChtLT5jb3VudCA8IG0tPnNpemUpIHsKKwkJaW50IGxlbiA9IGJpdG1hcF9zY25saXN0cHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LAorCQkJCW0tPnNpemUgLSBtLT5jb3VudCwgYml0cywgbnJfYml0cyk7CisJCWlmIChtLT5jb3VudCArIGxlbiA8IG0tPnNpemUpIHsKKwkJCW0tPmNvdW50ICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCW0tPmNvdW50ID0gbS0+c2l6ZTsKKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MKHNlcV9iaXRtYXBfbGlzdCk7CiAKIHN0YXRpYyB2b2lkICpzaW5nbGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpwLCBsb2ZmX3QgKnBvcykKIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggMDA2ZmM2NC4uNjZmNmU1OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAlpbnQgc2l6ZSA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOwogCWxvZmZfdCBvZmZzID0gKm9mZjsKIAlpbnQgY291bnQgPSBtaW5fdChzaXplX3QsIGJ5dGVzLCBQQUdFX1NJWkUpOworCWNoYXIgKnRlbXA7CiAKIAlpZiAoc2l6ZSkgewogCQlpZiAob2ZmcyA+IHNpemUpCkBAIC02OSwyMyArNzAsMzMgQEAKIAkJCWNvdW50ID0gc2l6ZSAtIG9mZnM7CiAJfQogCisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOwogCiAJY291bnQgPSBmaWxsX3JlYWQoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7Ci0JaWYgKGNvdW50IDwgMCkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmIChjb3VudCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAotCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgYmItPmJ1ZmZlciwgY291bnQpKSB7CisJbWVtY3B5KHRlbXAsIGJiLT5idWZmZXIsIGNvdW50KTsKKworCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgdGVtcCwgY291bnQpKSB7CiAJCWNvdW50ID0gLUVGQVVMVDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXByX2RlYnVnKCJvZmZzID0gJWxsZCwgKm9mZiA9ICVsbGQsIGNvdW50ID0gJWRcbiIsIG9mZnMsICpvZmYsIGNvdW50KTsKIAogCSpvZmYgPSBvZmZzICsgY291bnQ7CiAKLSBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKyBvdXRfZnJlZToKKwlrZnJlZSh0ZW1wKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTExOCw2ICsxMjksNyBAQAogCWludCBzaXplID0gZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJbG9mZl90IG9mZnMgPSAqb2ZmOwogCWludCBjb3VudCA9IG1pbl90KHNpemVfdCwgYnl0ZXMsIFBBR0VfU0laRSk7CisJY2hhciAqdGVtcDsKIAogCWlmIChzaXplKSB7CiAJCWlmIChvZmZzID4gc2l6ZSkKQEAgLTEyNiwxOSArMTM4LDI3IEBACiAJCQljb3VudCA9IHNpemUgLSBvZmZzOwogCX0KIAotCW11dGV4X2xvY2soJmJiLT5tdXRleCk7CisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoYmItPmJ1ZmZlciwgdXNlcmJ1ZiwgY291bnQpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIHVzZXJidWYsIGNvdW50KSkgewogCQljb3VudCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOworCisJbWVtY3B5KGJiLT5idWZmZXIsIHRlbXAsIGNvdW50KTsKKwogCWNvdW50ID0gZmx1c2hfd3JpdGUoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCiAJaWYgKGNvdW50ID4gMCkKIAkJKm9mZiA9IG9mZnMgKyBjb3VudDsKIAotIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworb3V0X2ZyZWU6CisJa2ZyZWUodGVtcCk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGFlZGFlYmEuLjNhMDVhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zNzAsMTcgKzM3MCwxNyBAQAogCW1lbXNldChhY3h0LCAwLCBzaXplb2YoKmFjeHQpKTsKIAlhY3h0LT5wYXJlbnRfc2QgPSBwYXJlbnRfc2Q7CiAKLQkvKiBMb29rdXAgcGFyZW50IGlub2RlLiAgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIElfTkVXCi0JICogY2xlYXJpbmcgYXJlIHByb3RlY3RlZCBieSBzeXNmc19tdXRleC4gIEJ5IGdyYWJiaW5nIGl0IGFuZAotCSAqIGxvb2tpbmcgdXAgd2l0aCBfbm93YWl0IHZhcmlhbnQsIGlub2RlIHN0YXRlIGNhbiBiZQotCSAqIGRldGVybWluZWQgcmVsaWFibHkuCisJLyogTG9va3VwIHBhcmVudCBpbm9kZS4gIGlub2RlIGluaXRpYWxpemF0aW9uIGlzIHByb3RlY3RlZCBieQorCSAqIHN5c2ZzX211dGV4LCBzbyBpbm9kZSBleGlzdGVuY2UgY2FuIGJlIGRldGVybWluZWQgYnkKKwkgKiBsb29raW5nIHVwIGlub2RlIHdoaWxlIGhvbGRpbmcgc3lzZnNfbXV0ZXguCiAJICovCiAJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCi0JaW5vZGUgPSBpbG9va3VwNV9ub3dhaXQoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKLQkJCQlwYXJlbnRfc2QpOworCWlub2RlID0gaWxvb2t1cDUoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKKwkJCSBwYXJlbnRfc2QpOworCWlmIChpbm9kZSkgeworCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCi0JaWYgKGlub2RlICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpIHsKIAkJLyogcGFyZW50IGlub2RlIGF2YWlsYWJsZSAqLwogCQlhY3h0LT5wYXJlbnRfaW5vZGUgPSBpbm9kZTsKIApAQCAtMzkzLDggKzM5Myw3IEBACiAJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJCX0KLQl9IGVsc2UKLQkJaXB1dChpbm9kZSk7CisJfQogfQogCiAvKioKQEAgLTYzNiw2ICs2MzUsNyBAQAogCiAJcmV0dXJuIHNkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0X2RpcmVudCk7CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2RpcihzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCkKQEAgLTgyOSwxNiArODI5LDEyIEBACiAJaWYgKCFuZXdfZGVudHJ5KQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKiByZW5hbWUga29iamVjdCBhbmQgc3lzZnNfZGlyZW50ICovCisJLyogcmVuYW1lIHN5c2ZzX2RpcmVudCAqLwogCWVycm9yID0gLUVOT01FTTsKIAluZXdfbmFtZSA9IGR1cF9uYW1lID0ga3N0cmR1cChuZXdfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfbmFtZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZXJyb3IgPSBrb2JqZWN0X3NldF9uYW1lKGtvYmosICIlcyIsIG5ld19uYW1lKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3VubG9jazsKLQogCWR1cF9uYW1lID0gc2QtPnNfbmFtZTsKIAlzZC0+c19uYW1lID0gbmV3X25hbWU7CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBjOWU0ZTUwLi4xZjRhM2Y4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xOSwxMCArMTksMTggQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKKy8qIHVzZWQgaW4gY3Jhc2ggZHVtcHMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZyAqLworc3RhdGljIGNoYXIgbGFzdF9zeXNmc19maWxlW1BBVEhfTUFYXTsKK3ZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0VNRVJHICJsYXN0IHN5c2ZzIGZpbGU6ICVzXG4iLCBsYXN0X3N5c2ZzX2ZpbGUpOworfQorCiAvKgogICogVGhlcmUncyBvbmUgc3lzZnNfYnVmZmVyIGZvciBlYWNoIG9wZW4gZmlsZSBhbmQgb25lCiAgKiBzeXNmc19vcGVuX2RpcmVudCBmb3IgZWFjaCBzeXNmc19kaXJlbnQgd2l0aCBvbmUgb3IgbW9yZSBvcGVuCkBAIC0zMjgsNiArMzM2LDExIEBACiAJc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBzeXNmc19vcHMgKm9wczsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOworCWNoYXIgKnA7CisKKwlwID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGxhc3Rfc3lzZnNfZmlsZSwgc2l6ZW9mKGxhc3Rfc3lzZnNfZmlsZSkpOworCWlmIChwKQorCQltZW1tb3ZlKGxhc3Rfc3lzZnNfZmlsZSwgcCwgc3RybGVuKHApICsgMSk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIgYW5kIG9wcywgaXRzIHBhcmVudCBmb3Iga29iaiAqLwogCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCkBAIC00NDAsNyArNDUzLDIzIEBACiAJcmV0dXJuIFBPTExFUlJ8UE9MTFBSSTsKIH0KIAotdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNoYXIgKmRpciwgY2hhciAqYXR0cikKK3ZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOworCisJc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKworCW9kID0gc2QtPnNfYXR0ci5vcGVuOworCWlmIChvZCkgeworCQlhdG9taWNfaW5jKCZvZC0+ZXZlbnQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9kLT5wb2xsKTsKKwl9CisKKwlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19ub3RpZnlfZGlyZW50KTsKKwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqYXR0cikKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IGstPnNkOwogCkBAIC00NTAsMTkgKzQ3OSw4IEBACiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGRpcik7CiAJaWYgKHNkICYmIGF0dHIpCiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGF0dHIpOwotCWlmIChzZCkgewotCQlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOwotCi0JCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Ci0KLQkJb2QgPSBzZC0+c19hdHRyLm9wZW47Ci0JCWlmIChvZCkgewotCQkJYXRvbWljX2luYygmb2QtPmV2ZW50KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb2QtPnBvbGwpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwotCX0KKwlpZiAoc2QpCisJCXN5c2ZzX25vdGlmeV9kaXJlbnQoc2QpOwogCiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCAxNGYwMDIzLi5hYjM0M2UzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCkBAIC0xMTUsMyArMTE2LDE3IEBACiAJc3lzZnNfZGlyX2NhY2hlcCA9IE5VTEw7CiAJZ290byBvdXQ7CiB9CisKKyN1bmRlZiBzeXNmc19nZXQKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlyZXR1cm4gX19zeXNmc19nZXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0KTsKKworI3VuZGVmIHN5c2ZzX3B1dAordm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCit7CisJX19zeXNmc19wdXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcHV0KTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGE1ZGI0OTYuLjkzYzZkNmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCk7CiB2b2lkIHN5c2ZzX3JlbW92ZV9zdWJkaXIoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5c2ZzX2RpcmVudCAqX19zeXNmc19nZXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJaWYgKHNkKSB7CiAJCVdBUk5fT04oIWF0b21pY19yZWFkKCZzZC0+c19jb3VudCkpOwpAQCAtMTMyLDEyICsxMzIsMTQgQEAKIAl9CiAJcmV0dXJuIHNkOwogfQorI2RlZmluZSBzeXNmc19nZXQoc2QpIF9fc3lzZnNfZ2V0KHNkKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQorc3RhdGljIGlubGluZSB2b2lkIF9fc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCWlmIChzZCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzZC0+c19jb3VudCkpCiAJCXJlbGVhc2Vfc3lzZnNfZGlyZW50KHNkKTsKIH0KKyNkZWZpbmUgc3lzZnNfcHV0KHNkKSBfX3N5c2ZzX3B1dChzZCkKIAogLyoKICAqIGlub2RlLmMKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2J1ZGdldC5jIGIvZnMvdWJpZnMvYnVkZ2V0LmMKaW5kZXggNzNkYjQ2NC4uMWE0OTczZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvYnVkZ2V0LmMKKysrIGIvZnMvdWJpZnMvYnVkZ2V0LmMKQEAgLTQxNCwxOSArNDE0LDIxIEBACiAJICogICAgQGMtPmxzdC5lbXB0eV9sZWJzICsgQGMtPmZyZWVhYmxlX2NudCArIEBjLT5pZHhfZ2NfY250IC0KIAkgKiAgICBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMKIAkgKgotCSAqIEBlbXB0eV9sZWJzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBlbXB0eS4gQGZyZWVhYmxlX2NudCBhcmUKLQkgKiBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGNvbnRhaW4gb25seSBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBhbmQgdGhlCi0JICogaW5kZXggYWxsb2NhdGlvbiBhbHdheXMgb2NjdXJzIGFmdGVyIHdidWZzIGFyZSBzeW5jaCdlZC4KLQkgKiBAaWR4X2djX2NudCBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kZXggTEVCcyB0aGF0IGhhdmUgYmVlbgotCSAqIGdhcmJhZ2UgY29sbGVjdGVkIChpbmNsdWRpbmcgdHJpdmlhbCBHQykgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0Ci0JICogYmVmb3JlIHRoZXkgY2FuIGJlIHVubWFwcGVkIC0gbm90ZSB0aGF0IHRoZSBpbi10aGUtZ2FwcyBtZXRob2Qgd2lsbAotCSAqIGdyYWIgdGhlc2UgaWYgaXQgbmVlZHMgdGhlbS4gQHRha2VuX2VtcHR5X2xlYnMgYXJlIGVtcHR5X2xlYnMgdGhhdAotCSAqIGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3Igc29tZSBwdXJwb3NlIChhbHNvIGluY2x1ZGVzIHRob3NlCi0JICogTEVCcyBvbiB0aGUgQGlkeF9nYyBsaXN0KS4KKwkgKiBAYy0+bHN0LmVtcHR5X2xlYnMgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgYXJlIGVtcHR5LgorCSAqIEBjLT5mcmVlYWJsZV9jbnQgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgY29udGFpbiBvbmx5IGZyZWUgYW5kCisJICogZGlydHkgc3BhY2UsIEBjLT5pZHhfZ2NfY250IGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBpbmRleAorCSAqIExFQnMgdGhhdCBoYXZlIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0CisJICogYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuIEFuZCB0aGUgaW4tdGhlLWdhcHMgbWV0aG9kIHdpbGwgZ3JhYiB0aGVzZQorCSAqIGlmIGl0IG5lZWRzIHRoZW0uIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBhcmUgZW1wdHkgTEVCcyB0aGF0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGZvciBzb21lIHB1cnBvc2UuCiAJICoKLQkgKiBOb3RlLCBAdGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZSBiZWNhdXNlIG9mCi0JICogdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhIGNvbW1lbnQgaW4KLQkgKiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgorCSAqIE5vdGUsIEBjLT5pZHhfZ2NfY250IGlzIGluY2x1ZGVkIHRvIGJvdGggQGMtPmxzdC5lbXB0eV9sZWJzIChiZWNhdXNlCisJICogdGhlc2UgTEVCcyBhcmUgZW1wdHkpIGFuZCB0byBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMgKGJlY2F1c2UgdGhleQorCSAqIGFyZSB0YWtlbiB1bnRpbCBhZnRlciB0aGUgY29tbWl0KS4KKwkgKgorCSAqIE5vdGUsIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZQorCSAqIGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhCisJICogY29tbWVudCBpbiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgogCSAqLwogCWxlYnMgPSBjLT5sc3QuZW1wdHlfbGVicyArIGMtPmZyZWVhYmxlX2NudCArIGMtPmlkeF9nY19jbnQgLQogCSAgICAgICBjLT5sc3QudGFrZW5fZW1wdHlfbGViczsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2NvbXByZXNzLmMgYi9mcy91Ymlmcy9jb21wcmVzcy5jCmluZGV4IDViYjUxZGEuLmEwYWRhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2NvbXByZXNzLmMKKysrIGIvZnMvdWJpZnMvY29tcHJlc3MuYwpAQCAtOTEsOCArOTEsNiBAQAogICoKICAqIE5vdGUsIGlmIHRoZSBpbnB1dCBidWZmZXIgd2FzIG5vdCBjb21wcmVzc2VkLCBpdCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dAogICogYnVmZmVyIGFuZCAlVUJJRlNfQ09NUFJfTk9ORSBpcyByZXR1cm5lZCBpbiBAY29tcHJfdHlwZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zICUwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHZvaWQgdWJpZnNfY29tcHJlc3MoY29uc3Qgdm9pZCAqaW5fYnVmLCBpbnQgaW5fbGVuLCB2b2lkICpvdXRfYnVmLCBpbnQgKm91dF9sZW4sCiAJCSAgICBpbnQgKmNvbXByX3R5cGUpCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBkN2Y3NjQ1Li43MTg2NDAwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTIyMiwzMCArMjIyLDM4IEBACiB7CiAJY29uc3Qgc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJpbm9kZSAgICAgICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQlwcmludGsoS0VSTl9ERUJVRyAic2l6ZSAgICAgICAlbGx1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJEdW1wIGluLW1lbW9yeSBpbm9kZToiKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRpbm9kZSAgICAgICAgICAlbHVcbiIsIGlub2RlLT5pX2lubyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0c2l6ZSAgICAgICAgICAgJWxsdVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSkpOwotCXByaW50ayhLRVJOX0RFQlVHICJubGluayAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInVpZCAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZ2lkICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOwotCXByaW50ayhLRVJOX0RFQlVHICJhdGltZSAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdG5saW5rICAgICAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0dWlkICAgICAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRnaWQgICAgICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGF0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2F0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9hdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibXRpbWUgICAgICAldS4ldVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRtdGltZSAgICAgICAgICAldS4ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9tdGltZS50dl9zZWMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfbXRpbWUudHZfbnNlYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImN0aW1lICAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdGN0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2N0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY3JlYXRfc3FudW0gJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfc2l6ZSAgJXVcbiIsIHVpLT54YXR0cl9zaXplKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfY250ICAgJXVcbiIsIHVpLT54YXR0cl9jbnQpOwotCXByaW50ayhLRVJOX0RFQlVHICJ4YXR0cl9uYW1lcyAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGlydHkgICAgICAgJXVcbiIsIHVpLT5kaXJ0eSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInhhdHRyICAgICAgICV1XG4iLCB1aS0+eGF0dHIpOwotCXByaW50ayhLRVJOX0RFQlVHICJmbGFncyAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY29tcHJfdHlwZSAgJWRcbiIsIHVpLT5jb21wcl90eXBlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGF0YV9sZW4gICAgJWRcbiIsIHVpLT5kYXRhX2xlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0Y3JlYXRfc3FudW0gICAgJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9zaXplICAgICAldVxuIiwgdWktPnhhdHRyX3NpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHhhdHRyX2NudCAgICAgICV1XG4iLCB1aS0+eGF0dHJfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9uYW1lcyAgICAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkaXJ0eSAgICAgICAgICAldVxuIiwgdWktPmRpcnR5KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0ciAgICAgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRidWxrX3JlYWQgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRzeW5jZWRfaV9zaXplICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT5zeW5jZWRfaV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR1aV9zaXplICAgICAgICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT51aV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRmbGFncyAgICAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRjb21wcl90eXBlICAgICAlZFxuIiwgdWktPmNvbXByX3R5cGUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxhc3RfcGFnZV9yZWFkICVsdVxuIiwgdWktPmxhc3RfcGFnZV9yZWFkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRyZWFkX2luX2Ffcm93ICAlbHVcbiIsIHVpLT5yZWFkX2luX2Ffcm93KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkYXRhX2xlbiAgICAgICAlZFxuIiwgdWktPmRhdGFfbGVuKTsKIH0KIAogdm9pZCBkYmdfZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpub2RlKQpAQCAtNjQ3LDYgKzY1NSw0MyBAQAogCX0KIH0KIAordm9pZCBkYmdfZHVtcF9scHRfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmZGJnX2xvY2spOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zejogICAgICAgICVsbGRcbiIsIGMtPmxwdF9zeik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0cG5vZGVfc3o6ICAgICAgJWRcbiIsIGMtPnBub2RlX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRubm9kZV9zejogICAgICAlZFxuIiwgYy0+bm5vZGVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGx0YWJfc3o6ICAgICAgICVkXG4iLCBjLT5sdGFiX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsc2F2ZV9zejogICAgICAlZFxuIiwgYy0+bHNhdmVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGJpZ19scHQ6ICAgICAgICVkXG4iLCBjLT5iaWdfbHB0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfaGdodDogICAgICAlZFxuIiwgYy0+bHB0X2hnaHQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBub2RlX2NudDogICAgICVkXG4iLCBjLT5wbm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdG5ub2RlX2NudDogICAgICVkXG4iLCBjLT5ubm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X3BuX2NudDogICVkXG4iLCBjLT5kaXJ0eV9wbl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X25uX2NudDogICVkXG4iLCBjLT5kaXJ0eV9ubl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxzYXZlX2NudDogICAgICVkXG4iLCBjLT5sc2F2ZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHNwYWNlX2JpdHM6ICAgICVkXG4iLCBjLT5zcGFjZV9iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfbG51bV9iaXRzOiAlZFxuIiwgYy0+bHB0X2xudW1fYml0cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHB0X29mZnNfYml0czogJWRcbiIsIGMtPmxwdF9vZmZzX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zcGNfYml0czogICVkXG4iLCBjLT5scHRfc3BjX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBjbnRfYml0czogICAgICVkXG4iLCBjLT5wY250X2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxudW1fYml0czogICAgICVkXG4iLCBjLT5sbnVtX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCByb290IGlzIGF0ICVkOiVkXG4iLCBjLT5scHRfbG51bSwgYy0+bHB0X29mZnMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCBoZWFkIGlzIGF0ICVkOiVkXG4iLAorCSAgICAgICBjLT5uaGVhZF9sbnVtLCBjLT5uaGVhZF9vZmZzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHRhYiBpcyBhdCAlZDolZFxuIiwgYy0+bHRhYl9sbnVtLCBjLT5sdGFiX29mZnMpOworCWlmIChjLT5iaWdfbHB0KQorCQlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHNhdmUgaXMgYXQgJWQ6JWRcbiIsCisJCSAgICAgICBjLT5sc2F2ZV9sbnVtLCBjLT5sc2F2ZV9vZmZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0TFBUIExFQiAlZCBmcmVlICVkIGRpcnR5ICVkIHRnYyAlZCAiCisJCSAgICAgICAiY210ICVkXG4iLCBpICsgYy0+bHB0X2ZpcnN0LCBjLT5sdGFiW2ldLmZyZWUsCisJCSAgICAgICBjLT5sdGFiW2ldLmRpcnR5LCBjLT5sdGFiW2ldLnRnYywgYy0+bHRhYltpXS5jbXQpOworCXNwaW5fdW5sb2NrKCZkYmdfbG9jayk7Cit9CisKIHZvaWQgZGJnX2R1bXBfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSkKIHsKIAlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5oIGIvZnMvdWJpZnMvZGVidWcuaAppbmRleCA1MDMxNWZjLi4zM2Q2Yjk1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5oCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmgKQEAgLTIyNCw2ICsyMjQsNyBAQAogdm9pZCBkYmdfZHVtcF9idWRnKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHZvaWQgZGJnX2R1bXBfbHByb3AoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKTsKIHZvaWQgZGJnX2R1bXBfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK3ZvaWQgZGJnX2R1bXBfbHB0X2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCBkYmdfZHVtcF9sZWIoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtKTsKIHZvaWQgZGJnX2R1bXBfem5vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCSAgICBjb25zdCBzdHJ1Y3QgdWJpZnNfem5vZGUgKnpub2RlKTsKQEAgLTI0OSw2ICsyNTAsOCBAQAogaW50IGRiZ19jaGVja19vbGRfaW5kZXgoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6cm9vdCk7CiBpbnQgZGJnX2NoZWNrX2NhdHMoc3RydWN0IHViaWZzX2luZm8gKmMpOwogaW50IGRiZ19jaGVja19sdGFiKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pOwogaW50IGRiZ19jaGVja19zeW5jZWRfaV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGRiZ19jaGVja19kaXJfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGRiZ19jaGVja190bmMoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBleHRyYSk7CkBAIC0zNjcsNiArMzcwLDcgQEAKICNkZWZpbmUgZGJnX2R1bXBfYnVkZyhjKSAgICAgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xwcm9wKGMsIGxwKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF9scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICh7fSkKKyNkZWZpbmUgZGJnX2R1bXBfbHB0X2luZm8oYykgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xlYihjLCBsbnVtKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF96bm9kZShjLCB6bm9kZSkgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfaGVhcChjLCBoZWFwLCBjYXQpICAgICAgICAgICAoe30pCkBAIC0zNzksNiArMzgzLDggQEAKICNkZWZpbmUgZGJnX2NoZWNrX29sZF9pbmRleChjLCB6cm9vdCkgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2NhdHMoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2x0YWIoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfZnJlZV9zcGMoYykgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfc3ooYywgYWN0aW9uLCBsZW4pICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3N5bmNlZF9pX3NpemUoaW5vZGUpICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2Rpcl9zaXplKGMsIGRpcikgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3RuYyhjLCB4KSAgICAgICAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAzZDY5OGUyLi41MWNmNTExIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC0xNDcsNiArMTQ3LDEyIEBACiAJCQkJZXJyID0gcmV0OwogCQkJCWlmIChlcnIgIT0gLUVOT0VOVCkKIAkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGJsb2NrICsgMSA9PSBiZXlvbmQpIHsKKwkJCQlpbnQgZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCQlpbnQgaWxlbiA9IGlfc2l6ZSAmIChVQklGU19CTE9DS19TSVpFIC0gMSk7CisKKwkJCQlpZiAoaWxlbiAmJiBpbGVuIDwgZGxlbikKKwkJCQkJbWVtc2V0KGFkZHIgKyBpbGVuLCAwLCBkbGVuIC0gaWxlbik7CiAJCQl9CiAJCX0KIAkJaWYgKCsraSA+PSBVQklGU19CTE9DS1NfUEVSX1BBR0UpCkBAIC01NzcsOCArNTgzLDI2MiBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKKy8qKgorICogcG9wdWxhdGVfcGFnZSAtIGNvcHkgZGF0YSBub2RlcyBpbnRvIGEgcGFnZSBmb3IgYnVsay1yZWFkLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHBhZ2U6IHBhZ2UKKyAqIEBidTogYnVsay1yZWFkIGluZm9ybWF0aW9uCisgKiBAbjogbmV4dCB6YnJhbmNoIHNsb3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcG9wdWxhdGVfcGFnZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgc3RydWN0IGJ1X2luZm8gKmJ1LCBpbnQgKm4pCit7CisJaW50IGkgPSAwLCBubiA9ICpuLCBvZmZzID0gYnUtPnpicmFuY2hbMF0ub2ZmcywgaG9sZSA9IDAsIHJlYWQgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJdW5zaWduZWQgaW50IHBhZ2VfYmxvY2s7CisJdm9pZCAqYWRkciwgKnphZGRyOworCXBnb2ZmX3QgZW5kX2luZGV4OworCisJZGJnX2dlbigiaW5vICVsdSwgcGcgJWx1LCBpX3NpemUgJWxsZCwgZmxhZ3MgJSNseCIsCisJCWlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsIGlfc2l6ZSwgcGFnZS0+ZmxhZ3MpOworCisJYWRkciA9IHphZGRyID0ga21hcChwYWdlKTsKKworCWVuZF9pbmRleCA9IChpX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWlmICghaV9zaXplIHx8IHBhZ2UtPmluZGV4ID4gZW5kX2luZGV4KSB7CisJCWhvbGUgPSAxOworCQltZW1zZXQoYWRkciwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfaG9sZTsKKwl9CisKKwlwYWdlX2Jsb2NrID0gcGFnZS0+aW5kZXggPDwgVUJJRlNfQkxPQ0tTX1BFUl9QQUdFX1NISUZUOworCXdoaWxlICgxKSB7CisJCWludCBlcnIsIGxlbiwgb3V0X2xlbiwgZGxlbjsKKworCQlpZiAobm4gPj0gYnUtPmNudCkgeworCQkJaG9sZSA9IDE7CisJCQltZW1zZXQoYWRkciwgMCwgVUJJRlNfQkxPQ0tfU0laRSk7CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA9PSBwYWdlX2Jsb2NrKSB7CisJCQlzdHJ1Y3QgdWJpZnNfZGF0YV9ub2RlICpkbjsKKworCQkJZG4gPSBidS0+YnVmICsgKGJ1LT56YnJhbmNoW25uXS5vZmZzIC0gb2Zmcyk7CisKKwkJCXViaWZzX2Fzc2VydChkbi0+Y2guc3FudW0gPgorCQkJCSAgICAgdWJpZnNfaW5vZGUoaW5vZGUpLT5jcmVhdF9zcW51bSk7CisKKwkJCWxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCWlmIChsZW4gPD0gMCB8fCBsZW4gPiBVQklGU19CTE9DS19TSVpFKQorCQkJCWdvdG8gb3V0X2VycjsKKworCQkJZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5jaC5sZW4pIC0gVUJJRlNfREFUQV9OT0RFX1NaOworCQkJb3V0X2xlbiA9IFVCSUZTX0JMT0NLX1NJWkU7CisJCQllcnIgPSB1Ymlmc19kZWNvbXByZXNzKCZkbi0+ZGF0YSwgZGxlbiwgYWRkciwgJm91dF9sZW4sCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdShkbi0+Y29tcHJfdHlwZSkpOworCQkJaWYgKGVyciB8fCBsZW4gIT0gb3V0X2xlbikKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWlmIChsZW4gPCBVQklGU19CTE9DS19TSVpFKQorCQkJCW1lbXNldChhZGRyICsgbGVuLCAwLCBVQklGU19CTE9DS19TSVpFIC0gbGVuKTsKKworCQkJbm4gKz0gMTsKKwkJCXJlYWQgPSAoaSA8PCBVQklGU19CTE9DS19TSElGVCkgKyBsZW47CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA8IHBhZ2VfYmxvY2spIHsKKwkJCW5uICs9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWhvbGUgPSAxOworCQkJbWVtc2V0KGFkZHIsIDAsIFVCSUZTX0JMT0NLX1NJWkUpOworCQl9CisJCWlmICgrK2kgPj0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFKQorCQkJYnJlYWs7CisJCWFkZHIgKz0gVUJJRlNfQkxPQ0tfU0laRTsKKwkJcGFnZV9ibG9jayArPSAxOworCX0KKworCWlmIChlbmRfaW5kZXggPT0gcGFnZS0+aW5kZXgpIHsKKwkJaW50IGxlbiA9IGlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKworCQlpZiAobGVuICYmIGxlbiA8IHJlYWQpCisJCQltZW1zZXQoemFkZHIgKyBsZW4sIDAsIHJlYWQgLSBsZW4pOworCX0KKworb3V0X2hvbGU6CisJaWYgKGhvbGUpIHsKKwkJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJCWRiZ19nZW4oImhvbGUiKTsKKwl9CisKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJa3VubWFwKHBhZ2UpOworCSpuID0gbm47CisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKKwl1Ymlmc19lcnIoImJhZCBkYXRhIG5vZGUgKGJsb2NrICV1LCBpbm9kZSAlbHUpIiwKKwkJICBwYWdlX2Jsb2NrLCBpbm9kZS0+aV9pbm8pOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHViaWZzX2RvX2J1bGtfcmVhZCAtIGRvIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBwYWdlMTogZmlyc3QgcGFnZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiB0aGUgYnVsay1yZWFkIGlzIGRvbmUsIG90aGVyd2lzZSAlMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCB1Ymlmc19kb19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBwYWdlICpwYWdlMSkKK3sKKwlwZ29mZl90IG9mZnNldCA9IHBhZ2UxLT5pbmRleCwgZW5kX2luZGV4OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZTEtPm1hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgYnVfaW5mbyAqYnU7CisJaW50IGVyciwgcGFnZV9pZHgsIHBhZ2VfY250LCByZXQgPSAwLCBuID0gMDsKKwlsb2ZmX3QgaXNpemU7CisKKwlidSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBidV9pbmZvKSwgR0ZQX05PRlMpOworCWlmICghYnUpCisJCXJldHVybiAwOworCisJYnUtPmJ1Zl9sZW4gPSBjLT5idWxrX3JlYWRfYnVmX3NpemU7CisJYnUtPmJ1ZiA9IGttYWxsb2MoYnUtPmJ1Zl9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1LT5idWYpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkYXRhX2tleV9pbml0KGMsICZidS0+a2V5LCBpbm9kZS0+aV9pbm8sCisJCSAgICAgIG9mZnNldCA8PCBVQklGU19CTE9DS1NfUEVSX1BBR0VfU0hJRlQpOworCisJZXJyID0gdWJpZnNfdG5jX2dldF9idV9rZXlzKGMsIGJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF93YXJuOworCisJaWYgKGJ1LT5lb2YpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQl1aS0+YnVsa19yZWFkID0gMDsKKwl9CisKKwlwYWdlX2NudCA9IGJ1LT5ibGtfY250ID4+IFVCSUZTX0JMT0NLU19QRVJfUEFHRV9TSElGVDsKKwlpZiAoIXBhZ2VfY250KSB7CisJCS8qCisJCSAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBibG9ja3MgcGVyIHBhZ2UgYW5kIHRoZQorCQkgKiBibG9ja3MgZm9yIHRoZSBmaXJzdCBwYWdlIHdlIGFyZSBsb29raW5nIGZvciwgYXJlIG5vdAorCQkgKiB0b2dldGhlci4gSWYgYWxsIHRoZSBwYWdlcyB3ZXJlIGxpa2UgdGhpcywgYnVsay1yZWFkIHdvdWxkCisJCSAqIHJlZHVjZSBwZXJmb3JtYW5jZSwgc28gd2UgdHVybiBpdCBvZmYgZm9yIGEgd2hpbGUuCisJCSAqLworCQl1aS0+cmVhZF9pbl9hX3JvdyA9IDA7CisJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWlmIChidS0+Y250KSB7CisJCWVyciA9IHViaWZzX3RuY19idWxrX3JlYWQoYywgYnUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfd2FybjsKKwl9CisKKwllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UxLCBidSwgJm4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3dhcm47CisKKwl1bmxvY2tfcGFnZShwYWdlMSk7CisJcmV0ID0gMTsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmIChpc2l6ZSA9PSAwKQorCQlnb3RvIG91dF9mcmVlOworCWVuZF9pbmRleCA9ICgoaXNpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKworCWZvciAocGFnZV9pZHggPSAxOyBwYWdlX2lkeCA8IHBhZ2VfY250OyBwYWdlX2lkeCsrKSB7CisJCXBnb2ZmX3QgcGFnZV9vZmZzZXQgPSBvZmZzZXQgKyBwYWdlX2lkeDsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJaWYgKHBhZ2Vfb2Zmc2V0ID4gZW5kX2luZGV4KQorCQkJYnJlYWs7CisJCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIHBhZ2Vfb2Zmc2V0LAorCQkJCQkgICBHRlBfTk9GUyB8IF9fR0ZQX0NPTEQpOworCQlpZiAoIXBhZ2UpCisJCQlicmVhazsKKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCQllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UsIGJ1LCAmbik7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBvZmZzZXQgKyBwYWdlX2lkeCAtIDE7CisKK291dF9mcmVlOgorCWtmcmVlKGJ1LT5idWYpOworCWtmcmVlKGJ1KTsKKwlyZXR1cm4gcmV0OworCitvdXRfd2FybjoKKwl1Ymlmc193YXJuKCJpZ25vcmluZyBlcnJvciAlZCBhbmQgc2tpcHBpbmcgYnVsay1yZWFkIiwgZXJyKTsKKwlnb3RvIG91dF9mcmVlOworfQorCisvKioKKyAqIHViaWZzX2J1bGtfcmVhZCAtIGRldGVybWluZSB3aGV0aGVyIHRvIGJ1bGstcmVhZCBhbmQsIGlmIHNvLCBkbyBpdC4KKyAqIEBwYWdlOiBwYWdlIGZyb20gd2hpY2ggdG8gc3RhcnQgYnVsay1yZWFkLgorICoKKyAqIFNvbWUgZmxhc2ggbWVkaWEgYXJlIGNhcGFibGUgb2YgcmVhZGluZyBzZXF1ZW50aWFsbHkgYXQgZmFzdGVyIHJhdGVzLiBVQklGUworICogYnVsay1yZWFkIGZhY2lsaXR5IGlzIGRlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoYXQsIGJ5IHJlYWRpbmcgaW4gb25lCisgKiBnbyBjb25zZWN1dGl2ZSBkYXRhIG5vZGVzIHRoYXQgYXJlIGFsc28gbG9jYXRlZCBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lCisgKiBMRUIuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBhIGJ1bGstcmVhZCBpcyBkb25lIGFuZCAlMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdWJpZnNfYnVsa19yZWFkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgdWJpZnNfaW5vZGUgKnVpID0gdWJpZnNfaW5vZGUoaW5vZGUpOworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleCwgbGFzdF9wYWdlX3JlYWQgPSB1aS0+bGFzdF9wYWdlX3JlYWQ7CisJaW50IHJldCA9IDA7CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBpbmRleDsKKworCWlmICghYy0+YnVsa19yZWFkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIEJ1bGstcmVhZCBpcyBwcm90ZWN0ZWQgYnkgdWlfbXV0ZXgsIGJ1dCBpdCBpcyBhbiBvcHRpbWl6YXRpb24sIHNvCisJICogZG9uJ3QgYm90aGVyIGlmIHdlIGNhbm5vdCBsb2NrIHRoZSBtdXRleC4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJnVpLT51aV9tdXRleCkpCisJCXJldHVybiAwOworCWlmIChpbmRleCAhPSBsYXN0X3BhZ2VfcmVhZCArIDEpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGlmIHdlIHN0b3AgcmVhZGluZyBzZXF1ZW50aWFsbHkgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQlpZiAodWktPmJ1bGtfcmVhZCkKKwkJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmICghdWktPmJ1bGtfcmVhZCkgeworCQl1aS0+cmVhZF9pbl9hX3JvdyArPSAxOworCQlpZiAodWktPnJlYWRfaW5fYV9yb3cgPCAzKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkvKiBUaHJlZSByZWFkcyBpbiBhIHJvdywgc28gc3dpdGNoIG9uIGJ1bGstcmVhZCAqLworCQl1aS0+YnVsa19yZWFkID0gMTsKKwl9CisJcmV0ID0gdWJpZnNfZG9fYnVsa19yZWFkKGMsIHBhZ2UpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnVpLT51aV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB1Ymlmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaWYgKHViaWZzX2J1bGtfcmVhZChwYWdlKSkKKwkJcmV0dXJuIDA7CiAJZG9fcmVhZHBhZ2UocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maW5kLmMgYi9mcy91Ymlmcy9maW5kLmMKaW5kZXggNDc4MTRjZC4uNzE3ZDc5YyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmluZC5jCisrKyBiL2ZzL3ViaWZzL2ZpbmQuYwpAQCAtOTAxLDExICs5MDEsMTEgQEAKIAkgKiBpdCBpcyBuZWVkZWQgbm93IGZvciB0aGlzIGNvbW1pdC4KIAkgKi8KIAlscCA9IHViaWZzX2xwdF9sb29rdXBfZGlydHkoYywgbG51bSk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihscCkpKQorCWlmIChJU19FUlIobHApKQogCQlyZXR1cm4gUFRSX0VSUihscCk7CiAJbHAgPSB1Ymlmc19jaGFuZ2VfbHAoYywgbHAsIExQUk9QU19OQywgTFBST1BTX05DLAogCQkJICAgICBscC0+ZmxhZ3MgfCBMUFJPUFNfSU5ERVgsIC0xKTsKLQlpZiAodW5saWtlbHkoSVNfRVJSKGxwKSkpCisJaWYgKElTX0VSUihscCkpCiAJCXJldHVybiBQVFJfRVJSKGxwKTsKIAlkYmdfZmluZCgiTEVCICVkLCBkaXJ0eSAlZCBhbmQgZnJlZSAlZCBmbGFncyAlI3giLAogCQkgbHAtPmxudW0sIGxwLT5kaXJ0eSwgbHAtPmZyZWUsIGxwLT5mbGFncyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9nYy5jIGIvZnMvdWJpZnMvZ2MuYwppbmRleCAwMmFiYTM2Li4wYmVmNjUwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9nYy5jCisrKyBiL2ZzL3ViaWZzL2djLmMKQEAgLTk2LDYgKzk2LDQ4IEBACiB9CiAKIC8qKgorICogam9pbnVwIC0gYnJpbmcgZGF0YSBub2RlcyBmb3IgYW4gaW5vZGUgdG9nZXRoZXIuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAc2xlYjogZGVzY3JpYmVzIHNjYW5uZWQgTEVCCisgKiBAaW51bTogaW5vZGUgbnVtYmVyCisgKiBAYmxrOiBibG9jayBudW1iZXIKKyAqIEBkYXRhOiBsaXN0IHRvIHdoaWNoIHRvIGFkZCBkYXRhIG5vZGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBhdCB0aGUgZmlyc3QgZmV3IG5vZGVzIGluIHRoZSBzY2FubmVkIExFQiBAc2xlYiBhbmQgYWRkcworICogdGhlbSB0byBAZGF0YSBpZiB0aGV5IGFyZSBkYXRhIG5vZGVzIGZyb20gQGludW0gYW5kIGhhdmUgYSBsYXJnZXIgYmxvY2sKKyAqIG51bWJlciB0aGFuIEBibGsuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgam9pbnVwKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIsIGlub190IGludW0sCisJCSAgdW5zaWduZWQgaW50IGJsaywgc3RydWN0IGxpc3RfaGVhZCAqZGF0YSkKK3sKKwlpbnQgZXJyLCBjbnQgPSA2LCBsbnVtID0gc2xlYi0+bG51bSwgb2ZmczsKKwlzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlICpzbm9kLCAqdG1wOworCXVuaW9uIHViaWZzX2tleSAqa2V5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7CisJCWtleSA9ICZzbm9kLT5rZXk7CisJCWlmIChrZXlfaW51bShjLCBrZXkpID09IGludW0gJiYKKwkJICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKKwkJICAgIGtleV9ibG9jayhjLCBrZXkpID4gYmxrKSB7CisJCQlvZmZzID0gc25vZC0+b2ZmczsKKwkJCWVyciA9IHViaWZzX3RuY19oYXNfbm9kZShjLCBrZXksIDAsIGxudW0sIG9mZnMsIDApOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWxpc3RfZGVsKCZzbm9kLT5saXN0KTsKKwkJCWlmIChlcnIpIHsKKwkJCQlsaXN0X2FkZF90YWlsKCZzbm9kLT5saXN0LCBkYXRhKTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJCX0gZWxzZQorCQkJCWtmcmVlKHNub2QpOworCQkJY250ID0gNjsKKwkJfSBlbHNlIGlmICgtLWNudCA9PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIG1vdmVfbm9kZXMgLSBtb3ZlIG5vZGVzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNsZWI6IGRlc2NyaWJlcyBub2RlcyB0byBtb3ZlCkBAIC0xMTYsMTYgKzE1OCwyMSBAQAogc3RhdGljIGludCBtb3ZlX25vZGVzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIpCiB7CiAJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZCwgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxhcmdlLCBtZWRpdW0sIHNtYWxsOworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YSwgbGFyZ2UsIG1lZGl1bSwgc21hbGw7CiAJc3RydWN0IHViaWZzX3didWYgKndidWYgPSAmYy0+amhlYWRzW0dDSERdLndidWY7CiAJaW50IGF2YWlsLCBlcnIsIG1pbiA9IElOVF9NQVg7CisJdW5zaWduZWQgaW50IGJsayA9IDA7CisJaW5vX3QgaW51bSA9IDA7CiAKKwlJTklUX0xJU1RfSEVBRCgmZGF0YSk7CiAJSU5JVF9MSVNUX0hFQUQoJmxhcmdlKTsKIAlJTklUX0xJU1RfSEVBRCgmbWVkaXVtKTsKIAlJTklUX0xJU1RfSEVBRCgmc21hbGwpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmxzdDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnNsZWItPm5vZGVzKSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3QgPSBzbGViLT5ub2Rlcy5uZXh0OworCisJCXNub2QgPSBsaXN0X2VudHJ5KGxzdCwgc3RydWN0IHViaWZzX3NjYW5fbm9kZSwgbGlzdCk7CiAKIAkJdWJpZnNfYXNzZXJ0KHNub2QtPnR5cGUgIT0gVUJJRlNfSURYX05PREUpOwogCQl1Ymlmc19hc3NlcnQoc25vZC0+dHlwZSAhPSBVQklGU19SRUZfTk9ERSk7CkBAIC0xMzYsNyArMTgzLDYgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlsc3QgPSAmc25vZC0+bGlzdDsKIAkJbGlzdF9kZWwobHN0KTsKIAkJaWYgKCFlcnIpIHsKIAkJCS8qIFRoZSBub2RlIGlzIG9ic29sZXRlLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwpAQCAtMTQ1LDE1ICsxOTEsMzAgQEAKIAkJfQogCiAJCS8qCi0JCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBsYXJnZSBub2RlcyBnbyBmaXJzdCwgYW5kCi0JCSAqIHNtYWxsIG5vZGVzIGdvIGxhc3QuCisJCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBkYXRhIG5vZGVzIGdvIGZpcnN0LCBsYXJnZQorCQkgKiBub2RlcyBnbyBzZWNvbmQsIGFuZCBzbWFsbCBub2RlcyBnbyBsYXN0LgogCQkgKi8KLQkJaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQotCQkJbGlzdF9hZGQobHN0LCAmbGFyZ2UpOworCQlpZiAoa2V5X3R5cGUoYywgJnNub2QtPmtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCWlmIChpbnVtICE9IGtleV9pbnVtKGMsICZzbm9kLT5rZXkpKSB7CisJCQkJaWYgKGludW0pIHsKKwkJCQkJLyoKKwkJCQkJICogVHJ5IHRvIG1vdmUgZGF0YSBub2RlcyBmcm9tIHRoZSBzYW1lCisJCQkJCSAqIGlub2RlIHRvZ2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJZXJyID0gam9pbnVwKGMsIHNsZWIsIGludW0sIGJsaywgJmRhdGEpOworCQkJCQlpZiAoZXJyKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCWludW0gPSBrZXlfaW51bShjLCAmc25vZC0+a2V5KTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywgJnNub2QtPmtleSk7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJmRhdGEpOworCQl9IGVsc2UgaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQorCQkJbGlzdF9hZGRfdGFpbChsc3QsICZsYXJnZSk7CiAJCWVsc2UgaWYgKHNub2QtPmxlbiA+IFNNQUxMX05PREVfV00pCi0JCQlsaXN0X2FkZChsc3QsICZtZWRpdW0pOworCQkJbGlzdF9hZGRfdGFpbChsc3QsICZtZWRpdW0pOwogCQllbHNlCi0JCQlsaXN0X2FkZChsc3QsICZzbWFsbCk7CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJnNtYWxsKTsKIAogCQkvKiBBbmQgZmluZCB0aGUgc21hbGxlc3Qgbm9kZSAqLwogCQlpZiAoc25vZC0+bGVuIDwgbWluKQpAQCAtMTY0LDYgKzIyNSw3IEBACiAJICogSm9pbiB0aGUgdHJlZSBsaXN0cyBzbyB0aGF0IHdlJ2QgaGF2ZSBvbmUgcm91Z2hseSBzb3J0ZWQgbGlzdAogCSAqICgnbGFyZ2UnIHdpbGwgYmUgdGhlIGhlYWQgb2YgdGhlIGpvaW5lZCBsaXN0KS4KIAkgKi8KKwlsaXN0X3NwbGljZSgmZGF0YSwgJmxhcmdlKTsKIAlsaXN0X3NwbGljZSgmbWVkaXVtLCBsYXJnZS5wcmV2KTsKIAlsaXN0X3NwbGljZSgmc21hbGwsIGxhcmdlLnByZXYpOwogCkBAIC02NTMsNyArNzE1LDcgQEAKIAkgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmVlYWJsZShjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02NjUsNyArNzI3LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGxwLT5mbGFncywgMCk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjgwLDcgKzc0Miw3IEBACiAJLyogUmVjb3JkIGluZGV4IGZyZWVhYmxlIExFQnMgZm9yIHVubWFwcGluZyBhZnRlciBjb21taXQgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmRpX2lkeChjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02OTYsNyArNzU4LDcgQEAKIAkJLyogRG9uJ3QgcmVsZWFzZSB0aGUgTEVCIHVudGlsIGFmdGVyIHRoZSBuZXh0IGNvbW1pdCAqLwogCQlmbGFncyA9IChscC0+ZmxhZ3MgfCBMUFJPUFNfVEFLRU4pIF4gTFBST1BTX0lOREVYOwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGZsYWdzLCAxKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWtmcmVlKGlkeF9nYyk7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IDA1NDM2M2YuLjAxNjgyNzEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtNjIsNiArNjIsNyBAQAogewogCWlmICghYy0+cm9fbWVkaWEpIHsKIAkJYy0+cm9fbWVkaWEgPSAxOworCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOwogCQl1Ymlmc193YXJuKCJzd2l0Y2hlZCB0byByZWFkLW9ubHkgbW9kZSwgZXJyb3IgJWQiLCBlcnIpOwogCQlkYmdfZHVtcF9zdGFjaygpOwogCX0KQEAgLTc0LDYgKzc1LDcgQEAKICAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0IHdpdGhpbiB0aGUgbG9naWNhbCBlcmFzZWJsb2NrCiAgKiBAcXVpZXQ6IHByaW50IG5vIG1lc3NhZ2VzCisgKiBAY2hrX2NyYzogaW5kaWNhdGVzIHdoZXRoZXIgdG8gYWx3YXlzIGNoZWNrIHRoZSBDUkMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBub2RlIG1hZ2ljIG51bWJlciBhbmQgQ1JDIGNoZWNrc3VtLiBUaGlzIGZ1bmN0aW9uIGFsc28KICAqIHZhbGlkYXRlcyBub2RlIGxlbmd0aCB0byBwcmV2ZW50IFVCSUZTIGZyb20gYmVjb21pbmcgY3Jhenkgd2hlbiBhbiBhdHRhY2tlcgpAQCAtODUsNyArODcsNyBAQAogICogb3IgbWFnaWMuCiAgKi8KIGludCB1Ymlmc19jaGVja19ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpidWYsIGludCBsbnVtLAotCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQpCisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpCiB7CiAJaW50IGVyciA9IC1FSU5WQUwsIHR5cGUsIG5vZGVfbGVuOwogCXVpbnQzMl90IGNyYywgbm9kZV9jcmMsIG1hZ2ljOwpAQCAtMTIxLDYgKzEyMywxMCBAQAogCQkgICBub2RlX2xlbiA+IGMtPnJhbmdlc1t0eXBlXS5tYXhfbGVuKQogCQlnb3RvIG91dF9sZW47CiAKKwlpZiAoIWNoa19jcmMgJiYgdHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykgewpAQCAtNzIyLDcgKzcyOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzgxLDcgKzc4Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMva2V5LmggYi9mcy91Ymlmcy9rZXkuaAppbmRleCA4Zjc0NzYwLi45ZWU2NTA4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9rZXkuaAorKysgYi9mcy91Ymlmcy9rZXkuaApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgKiBAa2V5MjogdGhlIHNlY29uZCBrZXkgdG8gY29tcGFyZQogICoKICAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgMiBrZXlzIGFuZCByZXR1cm5zICUtMSBpZiBAa2V5MSBpcyBsZXNzIHRoYW4KLSAqIEBrZXkyLCAwIGlmIHRoZSBrZXlzIGFyZSBlcXVpdmFsZW50IGFuZCAlMSBpZiBAa2V5MSBpcyBncmVhdGVyIHRoYW4gQGtleTIuCisgKiBAa2V5MiwgJTAgaWYgdGhlIGtleXMgYXJlIGVxdWl2YWxlbnQgYW5kICUxIGlmIEBrZXkxIGlzIGdyZWF0ZXIgdGhhbiBAa2V5Mi4KICAqLwogc3RhdGljIGlubGluZSBpbnQga2V5c19jbXAoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCQkgICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTEsCkBAIC01MDMsNiArNTAzLDI2IEBACiB9CiAKIC8qKgorICoga2V5c19lcSAtIGRldGVybWluZSBpZiBrZXlzIGFyZSBlcXVpdmFsZW50LgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGtleTE6IHRoZSBmaXJzdCBrZXkgdG8gY29tcGFyZQorICogQGtleTI6IHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIDIga2V5cyBhbmQgcmV0dXJucyAlMSBpZiBAa2V5MSBpcyBlcXVhbCB0byBAa2V5MiBhbmQKKyAqICUwIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQga2V5c19lcShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkxLAorCQkJICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTIpCit7CisJaWYgKGtleTEtPnUzMlswXSAhPSBrZXkyLT51MzJbMF0pCisJCXJldHVybiAwOworCWlmIChrZXkxLT51MzJbMV0gIT0ga2V5Mi0+dTMyWzFdKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBpc19oYXNoX2tleSAtIGlzIGEga2V5IHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb25zLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleToga2V5CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHJvcHMuYyBiL2ZzL3ViaWZzL2xwcm9wcy5jCmluZGV4IDJiYTkzZGEuLmYyNzE3NmUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwcm9wcy5jCisrKyBiL2ZzL3ViaWZzL2xwcm9wcy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAkJCX0KIAkJfQogCX0KKwogCS8qIE5vdCBncmVhdGVyIHRoYW4gcGFyZW50LCBzbyBjb21wYXJlIHRvIGNoaWxkcmVuICovCiAJd2hpbGUgKDEpIHsKIAkJLyogQ29tcGFyZSB0byBsZWZ0IGNoaWxkICovCkBAIC00NjAsMTggKzQ2MSw2IEBACiB9CiAKIC8qKgotICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCi0gKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICoKLSAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQotICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgotICovCi12b2lkIHViaWZzX2dldF9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCi17Ci0JbXV0ZXhfbG9jaygmYy0+bHBfbXV0ZXgpOwotfQotCi0vKioKICAqIGNhbGNfZGFyayAtIGNhbGN1bGF0ZSBMRUIgZGFyayBzcGFjZSBzaXplLgogICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBzcGM6IGFtb3VudCBvZiBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBpbiB0aGUgTEVCCkBAIC01NzYsNyArNTY1LDYgQEAKIAl1Ymlmc19hc3NlcnQoIShscHJvcHMtPmZyZWUgJiA3KSAmJiAhKGxwcm9wcy0+ZGlydHkgJiA3KSk7CiAKIAlzcGluX2xvY2soJmMtPnNwYWNlX2xvY2spOwotCiAJaWYgKChscHJvcHMtPmZsYWdzICYgTFBST1BTX1RBS0VOKSAmJiBscHJvcHMtPmZyZWUgPT0gYy0+bGViX3NpemUpCiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzIC09IDE7CiAKQEAgLTYzNywzMSArNjI1LDEyIEBACiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzICs9IDE7CiAKIAljaGFuZ2VfY2F0ZWdvcnkoYywgbHByb3BzKTsKLQogCWMtPmlkeF9nY19jbnQgKz0gaWR4X2djX2NudDsKLQogCXNwaW5fdW5sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQogCXJldHVybiBscHJvcHM7CiB9CiAKIC8qKgotICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgotICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCi0gKiB1bmxvY2sgbHByb3BzLgotICovCi12b2lkIHViaWZzX3JlbGVhc2VfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCXViaWZzX2Fzc2VydChtdXRleF9pc19sb2NrZWQoJmMtPmxwX211dGV4KSk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmxzdC5lbXB0eV9sZWJzID49IDAgJiYKLQkJICAgICBjLT5sc3QuZW1wdHlfbGVicyA8PSBjLT5tYWluX2xlYnMpOwotCi0JbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Ci19Ci0KLS8qKgogICogdWJpZnNfZ2V0X2xwX3N0YXRzIC0gZ2V0IGxwcm9wcyBzdGF0aXN0aWNzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHN0OiByZXR1cm4gc3RhdGlzdGljcwpAQCAtMTI2Miw3ICsxMjMxLDYgQEAKIAl9CiAKIAl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7Ci0KIAlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CiAKIG91dF9wcmludDoKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdC5jIGIvZnMvdWJpZnMvbHB0LmMKaW5kZXggOWZmMjQ2My4uZGI4YmQwZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0LmMKKysrIGIvZnMvdWJpZnMvbHB0LmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCWMtPmxwdF9zeiA9IChsb25nIGxvbmcpYy0+cG5vZGVfY250ICogYy0+cG5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IChsb25nIGxvbmcpYy0+bm5vZGVfY250ICogYy0+bm5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IGMtPmx0YWJfc3o7Ci0JYy0+bHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCWlmIChjLT5iaWdfbHB0KQorCQljLT5scHRfc3ogKz0gYy0+bHNhdmVfc3o7CiAKIAkvKiBBZGQgd2FzdGFnZSAqLwogCXN6ID0gYy0+bHB0X3N6OwpAQCAtMjg3LDI1ICsyODgsNTYgQEAKIAljb25zdCBpbnQgayA9IDMyIC0gbnJiaXRzOwogCXVpbnQ4X3QgKnAgPSAqYWRkcjsKIAlpbnQgYiA9ICpwb3M7Ci0JdWludDMyX3QgdmFsOworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHZhbCk7CisJY29uc3QgaW50IGJ5dGVzID0gKG5yYml0cyArIGIgKyA3KSA+PiAzOwogCiAJdWJpZnNfYXNzZXJ0KG5yYml0cyA+IDApOwogCXViaWZzX2Fzc2VydChucmJpdHMgPD0gMzIpOwogCXViaWZzX2Fzc2VydCgqcG9zID49IDApOwogCXViaWZzX2Fzc2VydCgqcG9zIDwgOCk7CiAJaWYgKGIpIHsKLQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8ICgodWludDMyX3QpcFszXSA8PCAxNikgfAotCQkgICAgICAoKHVpbnQzMl90KXBbNF0gPDwgMjQpOworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMjoKKwkJCXZhbCA9IHBbMV07CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQl2YWwgPSBwWzFdIHwgKCh1aW50MzJfdClwWzJdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbM10gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFs0XSA8PCAyNCk7CisJCX0KIAkJdmFsIDw8PSAoOCAtIGIpOwogCQl2YWwgfD0gKnAgPj4gYjsKIAkJbnJiaXRzICs9IGI7Ci0JfSBlbHNlCi0JCXZhbCA9IHBbMF0gfCAoKHVpbnQzMl90KXBbMV0gPDwgOCkgfCAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKLQkJICAgICAgKCh1aW50MzJfdClwWzNdIDw8IDI0KTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMToKKwkJCXZhbCA9IHBbMF07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2YWwgPSBwWzBdIHwgKCh1aW50MzJfdClwWzFdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFsyXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAyNCk7CisJCQlicmVhazsKKwkJfQorCX0KIAl2YWwgPDw9IGs7CiAJdmFsID4+PSBrOwogCWIgPSBucmJpdHMgJiA3OwotCXAgKz0gbnJiaXRzIC8gODsKKwlwICs9IG5yYml0cyA+PiAzOwogCSphZGRyID0gcDsKIAkqcG9zID0gYjsKIAl1Ymlmc19hc3NlcnQoKHZhbCA+PiBucmJpdHMpID09IDAgfHwgbnJiaXRzIC0gYiA9PSAzMik7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHRfY29tbWl0LmMgYi9mcy91Ymlmcy9scHRfY29tbWl0LmMKaW5kZXggNWYwYjgzZS4uZWVkNWEwMCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCisrKyBiL2ZzL3ViaWZzL2xwdF9jb21taXQuYwpAQCAtMTc3LDggKzE3Nyw2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlkYmdfZXJyKCJsYXN0IExFQiAlZCIsICpsbnVtKTsKLQlkdW1wX3N0YWNrKCk7CiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTE5Myw2ICsxOTEsOSBAQAogCWludCBsbnVtLCBvZmZzLCBsZW4sIGFsZW4sIGRvbmVfbHNhdmUsIGRvbmVfbHRhYiwgZXJyOwogCXN0cnVjdCB1Ymlmc19jbm9kZSAqY25vZGU7CiAKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWNub2RlID0gYy0+bHB0X2NuZXh0OwogCWlmICghY25vZGUpCiAJCXJldHVybiAwOwpAQCAtMjA2LDYgKzIwNyw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCWlmIChvZmZzICsgYy0+bHRhYl9zeiA8PSBjLT5sZWJfc2l6ZSkgewpAQCAtMjEzLDYgKzIxNSw3IEBACiAJCWMtPmx0YWJfbG51bSA9IGxudW07CiAJCWMtPmx0YWJfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJZG8gewpAQCAtMjI2LDkgKzIyOSwxMCBAQAogCQl3aGlsZSAob2ZmcyArIGxlbiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjM4LDYgKzI0Miw3IEBACiAJCQkJYy0+bHNhdmVfbG51bSA9IGxudW07CiAJCQkJYy0+bHNhdmVfb2ZmcyA9IG9mZnM7CiAJCQkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sc2F2ZV9zeik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIWRvbmVfbHRhYikgewpAQCAtMjQ1LDYgKzI1MCw3IEBACiAJCQkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJCQljLT5sdGFiX29mZnMgPSBvZmZzOwogCQkJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjU3LDYgKzI2Myw3IEBACiAJCQljLT5scHRfb2ZmcyA9IG9mZnM7CiAJCX0KIAkJb2ZmcyArPSBsZW47CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGxlbik7CiAJCWNub2RlID0gY25vZGUtPmNuZXh0OwogCX0gd2hpbGUgKGNub2RlICYmIGNub2RlICE9IGMtPmxwdF9jbmV4dCk7CiAKQEAgLTI2NSw5ICsyNzIsMTAgQEAKIAkJaWYgKG9mZnMgKyBjLT5sc2F2ZV9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjc2LDYgKzI4NCw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC0yODMsOSArMjkyLDEwIEBACiAJCWlmIChvZmZzICsgYy0+bHRhYl9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjk0LDExICszMDQsMjMgQEAKIAkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJYy0+bHRhYl9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCWRiZ19jaGtfbHB0X3N6KGMsIDQsIGFsZW4gLSBvZmZzKTsKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAzLCBhbGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOworCitub19zcGFjZToKKwl1Ymlmc19lcnIoIkxQVCBvdXQgb2Ygc3BhY2UiKTsKKwlkYmdfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIGF0IExFQiAlZDolZCBuZWVkaW5nICVkLCBkb25lX2x0YWIgJWQsICIKKwkJImRvbmVfbHNhdmUgJWQiLCBsbnVtLCBvZmZzLCBsZW4sIGRvbmVfbHRhYiwgZG9uZV9sc2F2ZSk7CisJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0zMzMsOCArMzU1LDYgQEAKIAkJCSpsbnVtID0gaSArIGMtPmxwdF9maXJzdDsKIAkJCXJldHVybiAwOwogCQl9Ci0JZGJnX2VycigibGFzdCBMRUIgJWQiLCAqbG51bSk7Ci0JZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0zNjksMTIgKzM4OSwxNCBAQAogCQlkb25lX2xzYXZlID0gMTsKIAkJdWJpZnNfcGFja19sc2F2ZShjLCBidWYgKyBvZmZzLCBjLT5sc2F2ZSk7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAlpZiAob2ZmcyArIGMtPmx0YWJfc3ogPD0gYy0+bGViX3NpemUpIHsKIAkJZG9uZV9sdGFiID0gMTsKIAkJdWJpZnNfcGFja19sdGFiKGMsIGJ1ZiArIG9mZnMsIGMtPmx0YWJfY210KTsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAkvKiBMb29wIGZvciBlYWNoIGNub2RlICovCkBAIC0zOTIsMTAgKzQxNCwxMiBAQAogCQkJCQkJICAgICAgIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CisJCQkJZGJnX2Noa19scHRfc3ooYywgNCwgYWxlbiAtIHdsZW4pOwogCQkJfQorCQkJZGJnX2Noa19scHRfc3ooYywgMiwgMCk7CiAJCQllcnIgPSByZWFsbG9jX2xwdF9sZWIoYywgJmxudW0pOwogCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOworCQkJCWdvdG8gbm9fc3BhY2U7CiAJCQlvZmZzID0gMDsKIAkJCWZyb20gPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCkBAIC00MDgsMTIgKzQzMiwxNCBAQAogCQkJCWRvbmVfbHNhdmUgPSAxOwogCQkJCXViaWZzX3BhY2tfbHNhdmUoYywgYnVmICsgb2ZmcywgYy0+bHNhdmUpOwogCQkJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCQkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFkb25lX2x0YWIpIHsKIAkJCQlkb25lX2x0YWIgPSAxOwogCQkJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCQkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQkJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmx0YWJfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00MzUsNiArNDYxLDcgQEAKIAkJY2xlYXJfYml0KENPV19aTk9ERSwgJmNub2RlLT5mbGFncyk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJCW9mZnMgKz0gbGVuOworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBsZW4pOwogCQljbm9kZSA9IGNub2RlLT5jbmV4dDsKIAl9IHdoaWxlIChjbm9kZSAmJiBjbm9kZSAhPSBjLT5scHRfY25leHQpOwogCkBAIC00NDgsOSArNDc1LDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDYxLDYgKzQ4OSw3IEBACiAJCWRvbmVfbHNhdmUgPSAxOwogCQl1Ymlmc19wYWNrX2xzYXZlKGMsIGJ1ZiArIG9mZnMsIGMtPmxzYXZlKTsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC00NzMsOSArNTAyLDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDg2LDYgKzUxNiw3IEBACiAJCWRvbmVfbHRhYiA9IDE7CiAJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJLyogV3JpdGUgcmVtYWluaW5nIGRhdGEgaW4gYnVmZmVyICovCkBAIC00OTUsNiArNTI2LDEyIEBACiAJZXJyID0gdWJpZnNfbGViX3dyaXRlKGMsIGxudW0sIGJ1ZiArIGZyb20sIGZyb20sIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisKKwlkYmdfY2hrX2xwdF9zeihjLCA0LCBhbGVuIC0gd2xlbik7CisJZXJyID0gZGJnX2Noa19scHRfc3ooYywgMywgQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJYy0+bmhlYWRfbG51bSA9IGxudW07CiAJYy0+bmhlYWRfb2ZmcyA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIApAQCAtNTAzLDcgKzU0MCwxNSBAQAogCWRiZ19scCgiTFBUIGx0YWIgaXMgYXQgJWQ6JWQiLCBjLT5sdGFiX2xudW0sIGMtPmx0YWJfb2Zmcyk7CiAJaWYgKGMtPmJpZ19scHQpCiAJCWRiZ19scCgiTFBUIGxzYXZlIGlzIGF0ICVkOiVkIiwgYy0+bHNhdmVfbG51bSwgYy0+bHNhdmVfb2Zmcyk7CisKIAlyZXR1cm4gMDsKKworbm9fc3BhY2U6CisJdWJpZnNfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIG1pc21hdGNoIik7CisJZGJnX2VycigiTFBUIG91dCBvZiBzcGFjZSBtaXNtYXRjaCBhdCBMRUIgJWQ6JWQgbmVlZGluZyAlZCwgZG9uZV9sdGFiICIKKwkgICAgICAgICIlZCwgZG9uZV9sc2F2ZSAlZCIsIGxudW0sIG9mZnMsIGxlbiwgZG9uZV9sdGFiLCBkb25lX2xzYXZlKTsKKwlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTEwNDQsNiArMTA4OSw4IEBACiAJaW50IHBvcyA9IDAsIG5vZGVfdHlwZSwgbm9kZV9sZW47CiAJdWludDE2X3QgY3JjLCBjYWxjX2NyYzsKIAorCWlmIChsZW4gPCBVQklGU19MUFRfQ1JDX0JZVEVTICsgKFVCSUZTX0xQVF9UWVBFX0JJVFMgKyA3KSAvIDgpCisJCXJldHVybiAwOwogCW5vZGVfdHlwZSA9IHViaWZzX3VucGFja19iaXRzKCZhZGRyLCAmcG9zLCBVQklGU19MUFRfVFlQRV9CSVRTKTsKIAlpZiAobm9kZV90eXBlID09IFVCSUZTX0xQVF9OT1RfQV9OT0RFKQogCQlyZXR1cm4gMDsKQEAgLTExNTYsNiArMTIwMyw5IEBACiAJZGJnX2xwKCIiKTsKIAogCW11dGV4X2xvY2soJmMtPmxwX211dGV4KTsKKwllcnIgPSBkYmdfY2hrX2xwdF9mcmVlX3NwYyhjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAllcnIgPSBkYmdfY2hlY2tfbHRhYihjKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTE2NDUsNCArMTY5NSwxMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBkYmdfY2hrX2xwdF9mcmVlX3NwYyAtIGNoZWNrIExQVCBmcmVlIHNwYWNlIGlzIGVub3VnaCB0byB3cml0ZSBlbnRpcmUgTFBULgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlsb25nIGxvbmcgZnJlZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykgeworCQlpZiAoYy0+bHRhYltpXS50Z2MgfHwgYy0+bHRhYltpXS5jbXQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgKyBjLT5scHRfZmlyc3QgPT0gYy0+bmhlYWRfbG51bSkKKwkJCWZyZWUgKz0gYy0+bGViX3NpemUgLSBjLT5uaGVhZF9vZmZzOworCQllbHNlIGlmIChjLT5sdGFiW2ldLmZyZWUgPT0gYy0+bGViX3NpemUpCisJCQlmcmVlICs9IGMtPmxlYl9zaXplOworCX0KKwlpZiAoZnJlZSA8IGMtPmxwdF9zeikgeworCQlkYmdfZXJyKCJMUFQgc3BhY2UgZXJyb3I6IGZyZWUgJWxsZCBscHRfc3ogJWxsZCIsCisJCQlmcmVlLCBjLT5scHRfc3opOworCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGRiZ19jaGtfbHB0X3N6IC0gY2hlY2sgTFBUIGRvZXMgbm90IHdyaXRlIG1vcmUgdGhhbiBMUFQgc2l6ZS4KKyAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYWN0aW9uOiBhY3Rpb24KKyAqIEBsZW46IGxlbmd0aCB3cml0dGVuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pCit7CisJbG9uZyBsb25nIGNoa19scHRfc3osIGxwdF9zejsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSAwOgorCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF9zejIgPSAwOworCQljLT5jaGtfbHB0X2xlYnMgPSAwOworCQljLT5jaGtfbHB0X3dhc3RhZ2UgPSAwOworCQlpZiAoYy0+ZGlydHlfcG5fY250ID4gYy0+cG5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBwbm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfcG5fY250LCBjLT5wbm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+ZGlydHlfbm5fY250ID4gYy0+bm5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBubm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfbm5fY250LCBjLT5ubm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXJyOworCWNhc2UgMToKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCWMtPmNoa19scHRfd2FzdGFnZSArPSBsZW47CisJCWMtPmNoa19scHRfbGVicyArPSAxOworCQlyZXR1cm4gMDsKKwljYXNlIDM6CisJCWNoa19scHRfc3ogPSBjLT5sZWJfc2l6ZTsKKwkJY2hrX2xwdF9zeiAqPSBjLT5jaGtfbHB0X2xlYnM7CisJCWNoa19scHRfc3ogKz0gbGVuIC0gYy0+bmhlYWRfb2ZmczsKKwkJaWYgKGMtPmNoa19scHRfc3ogIT0gY2hrX2xwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IHNwYWNlIHVzZWQgd2FzICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGNoa19scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zeiA+IGMtPmxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IGxwdF9zeiBpcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zejIgJiYgYy0+Y2hrX2xwdF9zeiAhPSBjLT5jaGtfbHB0X3N6MikgeworCQkJZGJnX2VycigiTFBUIGxheW91dCBzaXplICVsbGQgYnV0IHdyb3RlICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGMtPmNoa19scHRfc3oyKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmNoa19scHRfc3oyICYmIGMtPm5ld19uaGVhZF9vZmZzICE9IGxlbikgeworCQkJZGJnX2VycigiTFBUIG5ldyBuaGVhZCBvZmZzOiBleHBlY3RlZCAlZCB3YXMgJWQiLAorCQkJCWMtPm5ld19uaGVhZF9vZmZzLCBsZW4pOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlscHRfc3ogPSAobG9uZyBsb25nKWMtPnBub2RlX2NudCAqIGMtPnBub2RlX3N6OworCQlscHRfc3ogKz0gKGxvbmcgbG9uZyljLT5ubm9kZV9jbnQgKiBjLT5ubm9kZV9zejsKKwkJbHB0X3N6ICs9IGMtPmx0YWJfc3o7CisJCWlmIChjLT5iaWdfbHB0KQorCQkJbHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCQlpZiAoYy0+Y2hrX2xwdF9zeiAtIGMtPmNoa19scHRfd2FzdGFnZSA+IGxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIGNoa19scHRfc3ogJWxsZCArIHdhc3RlICVsbGQgZXhjZWVkcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5jaGtfbHB0X3dhc3RhZ2UsIGxwdF9zeik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWlmIChlcnIpCisJCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJYy0+Y2hrX2xwdF9zejIgPSBjLT5jaGtfbHB0X3N6OworCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlID0gMDsKKwkJYy0+Y2hrX2xwdF9sZWJzID0gMDsKKwkJYy0+bmV3X25oZWFkX29mZnMgPSBsZW47CisJCXJldHVybiBlcnI7CisJY2FzZSA0OgorCQljLT5jaGtfbHB0X3N6ICs9IGxlbjsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlICs9IGxlbjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCiAjZW5kaWYgLyogQ09ORklHX1VCSUZTX0ZTX0RFQlVHICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9taXNjLmggYi9mcy91Ymlmcy9taXNjLmgKaW5kZXggNGMxMmE5Mi4uNGZhODFkOCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbWlzYy5oCisrKyBiL2ZzL3ViaWZzL21pc2MuaApAQCAtMzEwLDQgKzMxMCwzMSBAQAogCXJldHVybiB1Ymlmc190bmNfbG9jYXRlKGMsIGtleSwgbm9kZSwgTlVMTCwgTlVMTCk7CiB9CiAKKy8qKgorICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCisgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQorICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfZ2V0X2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwltdXRleF9sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKKy8qKgorICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCisgKiB1bmxvY2sgbHByb3BzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfcmVsZWFzZV9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJdWJpZnNfYXNzZXJ0KG11dGV4X2lzX2xvY2tlZCgmYy0+bHBfbXV0ZXgpKTsKKwl1Ymlmc19hc3NlcnQoYy0+bHN0LmVtcHR5X2xlYnMgPj0gMCAmJgorCQkgICAgIGMtPmxzdC5lbXB0eV9sZWJzIDw9IGMtPm1haW5fbGVicyk7CisJbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKICNlbmRpZiAvKiBfX1VCSUZTX01JU0NfSF9fICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zY2FuLmMgYi9mcy91Ymlmcy9zY2FuLmMKaW5kZXggYWNmNWM1Zi4uMGVkODI0NyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2Nhbi5jCisrKyBiL2ZzL3ViaWZzL3NjYW4uYwpAQCAtODcsNyArODcsNyBAQAogCiAJZGJnX3NjYW4oInNjYW5uaW5nICVzIiwgZGJnX250eXBlKGNoLT5ub2RlX3R5cGUpKTsKIAotCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQpKQorCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQsIDEpKQogCQlyZXR1cm4gU0NBTk5FRF9BX0NPUlJVUFRfTk9ERTsKIAogCWlmIChjaC0+bm9kZV90eXBlID09IFVCSUZTX1BBRF9OT0RFKSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCA5YTkyMjAzLi44NzgwZWZiIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTQwMSw2ICs0MDEsMTYgQEAKIAllbHNlIGlmIChjLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9PSAxKQogCQlzZXFfcHJpbnRmKHMsICIsbm9ybV91bm1vdW50Iik7CiAKKwlpZiAoYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPT0gMikKKwkJc2VxX3ByaW50ZihzLCAiLGJ1bGtfcmVhZCIpOworCWVsc2UgaWYgKGMtPm1vdW50X29wdHMuYnVsa19yZWFkID09IDEpCisJCXNlcV9wcmludGYocywgIixub19idWxrX3JlYWQiKTsKKworCWlmIChjLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9PSAyKQorCQlzZXFfcHJpbnRmKHMsICIsY2hrX2RhdGFfY3JjIik7CisJZWxzZSBpZiAoYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPT0gMSkKKwkJc2VxX3ByaW50ZihzLCAiLG5vX2Noa19kYXRhX2NyYyIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwOCwxMyArNDE4LDI2IEBACiB7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCWludCBpLCByZXQgPSAwLCBlcnI7CisJbG9uZyBsb25nIGJ1ZF9ieXRlczsKIAotCWlmIChjLT5qaGVhZHMpCisJaWYgKGMtPmpoZWFkcykgewogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspIHsKIAkJCWVyciA9IHViaWZzX3didWZfc3luYygmYy0+amhlYWRzW2ldLndidWYpOwogCQkJaWYgKGVyciAmJiAhcmV0KQogCQkJCXJldCA9IGVycjsKIAkJfQorCisJCS8qIENvbW1pdCB0aGUgam91cm5hbCB1bmxlc3MgaXQgaGFzIHRvbyBsaXR0bGUgZGF0YSAqLworCQlzcGluX2xvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWJ1ZF9ieXRlcyA9IGMtPmJ1ZF9ieXRlczsKKwkJc3Bpbl91bmxvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWlmIChidWRfYnl0ZXMgPiBjLT5sZWJfc2l6ZSkgeworCQkJZXJyID0gdWJpZnNfcnVuX2NvbW1pdChjKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qCiAJICogV2Ugb3VnaHQgdG8gY2FsbCBzeW5jIGZvciBjLT51YmkgYnV0IGl0IGRvZXMgbm90IGhhdmUgb25lLiBJZiBpdCBoYWQKIAkgKiBpdCB3b3VsZCBpbiB0dXJuIGNhbGwgbXRkLT5zeW5jLCBob3dldmVyIG10ZCBvcGVyYXRpb25zIGFyZQpAQCAtNTM4LDYgKzU2MSwxOCBAQAogCSAqIGNhbGN1bGF0aW9ucyB3aGVuIHJlcG9ydGluZyBmcmVlIHNwYWNlLgogCSAqLwogCWMtPmxlYl9vdmVyaGVhZCA9IGMtPmxlYl9zaXplICUgVUJJRlNfTUFYX0RBVEFfTk9ERV9TWjsKKwkvKiBCdWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcyAqLworCWMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA9IFVCSUZTX01BWF9CVUxLX1JFQUQgKiBVQklGU19NQVhfREFUQV9OT0RFX1NaOworCWlmIChjLT5idWxrX3JlYWRfYnVmX3NpemUgPiBjLT5sZWJfc2l6ZSkKKwkJYy0+YnVsa19yZWFkX2J1Zl9zaXplID0gYy0+bGViX3NpemU7CisJaWYgKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA+IDEyOCAqIDEwMjQpIHsKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIGttYWxsb2MgbW9yZSB0aGFuIDEyOEtpQiAqLworCQl2b2lkICp0cnkgPSBrbWFsbG9jKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJa2ZyZWUodHJ5KTsKKwkJaWYgKCF0cnkpCisJCQljLT5idWxrX3JlYWRfYnVmX3NpemUgPSAxMjggKiAxMDI0OworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODQwLDE3ICs4NzUsMjkgQEAKICAqCiAgKiBPcHRfZmFzdF91bm1vdW50OiBkbyBub3QgcnVuIGEgam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCiAgKiBPcHRfbm9ybV91bm1vdW50OiBydW4gYSBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKKyAqIE9wdF9idWxrX3JlYWQ6IGVuYWJsZSBidWxrLXJlYWRzCisgKiBPcHRfbm9fYnVsa19yZWFkOiBkaXNhYmxlIGJ1bGstcmVhZHMKKyAqIE9wdF9jaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKKyAqIE9wdF9ub19jaGtfZGF0YV9jcmM6IGRvIG5vdCBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCiAgKiBPcHRfZXJyOiBqdXN0IGVuZCBvZiBhcnJheSBtYXJrZXIKICAqLwogZW51bSB7CiAJT3B0X2Zhc3RfdW5tb3VudCwKIAlPcHRfbm9ybV91bm1vdW50LAorCU9wdF9idWxrX3JlYWQsCisJT3B0X25vX2J1bGtfcmVhZCwKKwlPcHRfY2hrX2RhdGFfY3JjLAorCU9wdF9ub19jaGtfZGF0YV9jcmMsCiAJT3B0X2VyciwKIH07CiAKIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2Zhc3RfdW5tb3VudCwgImZhc3RfdW5tb3VudCJ9LAogCXtPcHRfbm9ybV91bm1vdW50LCAibm9ybV91bm1vdW50In0sCisJe09wdF9idWxrX3JlYWQsICJidWxrX3JlYWQifSwKKwl7T3B0X25vX2J1bGtfcmVhZCwgIm5vX2J1bGtfcmVhZCJ9LAorCXtPcHRfY2hrX2RhdGFfY3JjLCAiY2hrX2RhdGFfY3JjIn0sCisJe09wdF9ub19jaGtfZGF0YV9jcmMsICJub19jaGtfZGF0YV9jcmMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC04ODgsNiArOTM1LDIyIEBACiAJCQljLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9IDE7CiAJCQljLT5mYXN0X3VubW91bnQgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1bGtfcmVhZDoKKwkJCWMtPm1vdW50X29wdHMuYnVsa19yZWFkID0gMjsKKwkJCWMtPmJ1bGtfcmVhZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9fYnVsa19yZWFkOgorCQkJYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPSAxOworCQkJYy0+YnVsa19yZWFkID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9jaGtfZGF0YV9jcmM6CisJCQljLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9IDI7CisJCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vX2Noa19kYXRhX2NyYzoKKwkJCWMtPm1vdW50X29wdHMuY2hrX2RhdGFfY3JjID0gMTsKKwkJCWMtPm5vX2Noa19kYXRhX2NyYyA9IDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXViaWZzX2VycigidW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCSAgIm9yIG1pc3NpbmcgdmFsdWUiLCBwKTsKQEAgLTk5Niw2ICsxMDU5LDggQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJYy0+YWx3YXlzX2Noa19jcmMgPSAxOworCiAJZXJyID0gdWJpZnNfcmVhZF9zdXBlcmJsb2NrKGMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMDMyLDggKzEwOTcsNiBAQAogCiAJCS8qIENyZWF0ZSBiYWNrZ3JvdW5kIHRocmVhZCAqLwogCQljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQkJaWYgKCFjLT5iZ3QpCi0JCQljLT5iZ3QgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoYy0+Ymd0KTsKIAkJCWMtPmJndCA9IE5VTEw7CkBAIC0xMTM5LDI0ICsxMjAyLDI4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CiAKKwljLT5hbHdheXNfY2hrX2NyYyA9IDA7CisKIAl1Ymlmc19tc2coIm1vdW50ZWQgVUJJIGRldmljZSAlZCwgdm9sdW1lICVkLCBuYW1lIFwiJXNcIiIsCiAJCSAgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkLCBjLT52aS5uYW1lKTsKIAlpZiAobW91bnRlZF9yZWFkX29ubHkpCiAJCXViaWZzX21zZygibW91bnRlZCByZWFkLW9ubHkiKTsKIAl4ID0gKGxvbmcgbG9uZyljLT5tYWluX2xlYnMgKiBjLT5sZWJfc2l6ZTsKLQl1Ymlmc19tc2coImZpbGUgc3lzdGVtIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CisJdWJpZnNfbXNnKCJmaWxlIHN5c3RlbSBzaXplOiAgICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgIgorCQkgICJMRUJzKSIsIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CiAJeCA9IChsb25nIGxvbmcpYy0+bG9nX2xlYnMgKiBjLT5sZWJfc2l6ZSArIGMtPm1heF9idWRfYnl0ZXM7Ci0JdWJpZnNfbXNnKCJqb3VybmFsIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPmxvZ19sZWJzICsgYy0+bWF4X2J1ZF9jbnQpOwotCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOwotCXViaWZzX21zZygibWVkaWEgZm9ybWF0ICVkLCBsYXRlc3QgZm9ybWF0ICVkIiwKKwl1Ymlmc19tc2coImpvdXJuYWwgc2l6ZTogICAgICAgJWxsZCBieXRlcyAoJWxsZCBLaUIsICVsbGQgTWlCLCAlZCAiCisJCSAgIkxFQnMpIiwgeCwgeCA+PiAxMCwgeCA+PiAyMCwgYy0+bG9nX2xlYnMgKyBjLT5tYXhfYnVkX2NudCk7CisJdWJpZnNfbXNnKCJtZWRpYSBmb3JtYXQ6ICAgICAgICVkIChsYXRlc3QgaXMgJWQpIiwKIAkJICBjLT5mbXRfdmVyc2lvbiwgVUJJRlNfRk9STUFUX1ZFUlNJT04pOworCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOworCXViaWZzX21zZygicmVzZXJ2ZWQgZm9yIHJvb3Q6ICAlbGx1IGJ5dGVzICglbGx1IEtpQikiLAorCQljLT5yZXBvcnRfcnBfc2l6ZSwgYy0+cmVwb3J0X3JwX3NpemUgPj4gMTApOwogCiAJZGJnX21zZygiY29tcGlsZWQgb246ICAgICAgICAgIiBfX0RBVEVfXyAiIGF0ICIgX19USU1FX18pOwogCWRiZ19tc2coIm1pbi4gSS9PIHVuaXQgc2l6ZTogICVkIGJ5dGVzIiwgYy0+bWluX2lvX3NpemUpOwogCWRiZ19tc2coIkxFQiBzaXplOiAgICAgICAgICAgICVkIGJ5dGVzICglZCBLaUIpIiwKLQkJYy0+bGViX3NpemUsIGMtPmxlYl9zaXplIC8gMTAyNCk7CisJCWMtPmxlYl9zaXplLCBjLT5sZWJfc2l6ZSA+PiAxMCk7CiAJZGJnX21zZygiZGF0YSBqb3VybmFsIGhlYWRzOiAgJWQiLAogCQljLT5qaGVhZF9jbnQgLSBOT05EQVRBX0pIRUFEU19DTlQpOwogCWRiZ19tc2coIlVVSUQ6ICAgICAgICAgICAgICAgICUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgiCkBAIC0xMjgyLDYgKzEzNDksNyBAQAogCiAJbXV0ZXhfbG9jaygmYy0+dW1vdW50X211dGV4KTsKIAljLT5yZW1vdW50aW5nX3J3ID0gMTsKKwljLT5hbHdheXNfY2hrX2NyYyA9IDE7CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGZyZWUgc3BhY2UgKi8KIAlpZiAodWJpZnNfY2FsY19hdmFpbGFibGUoYywgYy0+bWluX2lkeF9sZWJzKSA8PSAwKSB7CkBAIC0xMzQ1LDIwICsxNDEzLDIwIEBACiAKIAkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQlpZiAoIWMtPmJndCkKLQkJYy0+Ymd0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJZXJyID0gUFRSX0VSUihjLT5iZ3QpOwogCQljLT5iZ3QgPSBOVUxMOwogCQl1Ymlmc19lcnIoImNhbm5vdCBzcGF3biBcIiVzXCIsIGVycm9yICVkIiwKIAkJCSAgYy0+Ymd0X25hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAl3YWtlX3VwX3Byb2Nlc3MoYy0+Ymd0KTsKIAogCWMtPm9ycGhfYnVmID0gdm1hbGxvYyhjLT5sZWJfc2l6ZSk7Ci0JaWYgKCFjLT5vcnBoX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFjLT5vcnBoX2J1ZikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGxvZyBzcGFjZSAqLwogCWxudW0gPSBjLT5saGVhZF9sbnVtICsgMTsKQEAgLTEzODUsNiArMTQ1Myw3IEBACiAJZGJnX2dlbigicmUtbW91bnRlZCByZWFkLXdyaXRlIik7CiAJYy0+dmZzX3NiLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMTQwMCw2ICsxNDY5LDcgQEAKIAljLT5pbGViX2J1ZiA9IE5VTEw7CiAJdWJpZnNfbHB0X2ZyZWUoYywgMSk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTQwOCwxMiArMTQ3OCw5IEBACiAgKiBjb21taXRfb25fdW5tb3VudCAtIGNvbW1pdCB0aGUgam91cm5hbCB3aGVuIHVuLW1vdW50aW5nLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB1bi1tb3VudGluZyBhbmQgaXQgY29tbWl0cyB0aGUgam91cm5hbCB1bmxlc3MKLSAqIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzIGNvbW1pdHRpbmcgdGhlIGpvdXJuYWwgaWYKLSAqIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KLSAqCi0gKiBTb21ldGltZXMgcmVjb3ZlcnkgcmVxdWlyZXMgdGhlIGpvdXJuYWwgdG8gYmUgY29tbWl0dGVkIGF0IGxlYXN0IG9uY2UsIGFuZAotICogdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIGFib3V0IHRoaXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdW4tbW91bnRpbmcgYW5kIHJlLW1vdW50aW5nLCBhbmQgaXQgY29tbWl0cworICogdGhlIGpvdXJuYWwgdW5sZXNzIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzCisgKiBjb21taXR0aW5nIHRoZSBqb3VybmFsIGlmIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KICAqLwogc3RhdGljIHZvaWQgY29tbWl0X29uX3VubW91bnQoc3RydWN0IHViaWZzX2luZm8gKmMpCiB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy90bmMuYyBiL2ZzL3ViaWZzL3RuYy5jCmluZGV4IDc2MzRjNTkuLmQyN2ZkOTEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuYy5jCisrKyBiL2ZzL3ViaWZzL3RuYy5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAl9CiAKIAl6biA9IGNvcHlfem5vZGUoYywgem5vZGUpOwotCWlmICh1bmxpa2VseShJU19FUlIoem4pKSkKKwlpZiAoSVNfRVJSKHpuKSkKIAkJcmV0dXJuIHpuOwogCiAJaWYgKHpici0+bGVuKSB7CkBAIC00NzAsNiArNDcwLDEwIEBACiAJaWYgKG5vZGVfbGVuICE9IGxlbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAodHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykKQEAgLTExMjgsNyArMTEzMiw3IEBACiAJCQl1Ymlmc19hc3NlcnQoem5vZGUgPT0gYy0+enJvb3Quem5vZGUpOwogCQkJem5vZGUgPSBkaXJ0eV9jb3dfem5vZGUoYywgJmMtPnpyb290KTsKIAkJfQotCQlpZiAodW5saWtlbHkoSVNfRVJSKHpub2RlKSkgfHwgIXApCisJCWlmIChJU19FUlIoem5vZGUpIHx8ICFwKQogCQkJYnJlYWs7CiAJCXViaWZzX2Fzc2VydChwYXRoW3AgLSAxXSA+PSAwKTsKIAkJdWJpZnNfYXNzZXJ0KHBhdGhbcCAtIDFdIDwgem5vZGUtPmNoaWxkX2NudCk7CkBAIC0xNDkyLDYgKzE0OTYsMjg5IEBACiB9CiAKIC8qKgorICogdWJpZnNfdG5jX2dldF9idV9rZXlzIC0gbG9va3VwIGtleXMgZm9yIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBidTogYnVsay1yZWFkIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMKKyAqCisgKiBMb29rdXAgY29uc2VjdXRpdmUgZGF0YSBub2RlIGtleXMgZm9yIHRoZSBzYW1lIGlub2RlIHRoYXQgcmVzaWRlCisgKiBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lIExFQi4KKyAqLworaW50IHViaWZzX3RuY19nZXRfYnVfa2V5cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IGJ1X2luZm8gKmJ1KQoreworCWludCBuLCBlcnIgPSAwLCBsbnVtID0gLTEsIHVuaW5pdGlhbGl6ZWRfdmFyKG9mZnMpOworCWludCB1bmluaXRpYWxpemVkX3ZhcihsZW4pOworCXVuc2lnbmVkIGludCBibG9jayA9IGtleV9ibG9jayhjLCAmYnUtPmtleSk7CisJc3RydWN0IHViaWZzX3pub2RlICp6bm9kZTsKKworCWJ1LT5jbnQgPSAwOworCWJ1LT5ibGtfY250ID0gMDsKKwlidS0+ZW9mID0gMDsKKworCW11dGV4X2xvY2soJmMtPnRuY19tdXRleCk7CisJLyogRmluZCBmaXJzdCBrZXkgKi8KKwllcnIgPSB1Ymlmc19sb29rdXBfbGV2ZWwwKGMsICZidS0+a2V5LCAmem5vZGUsICZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGVycikgeworCQkvKiBLZXkgZm91bmQgKi8KKwkJbGVuID0gem5vZGUtPnpicmFuY2hbbl0ubGVuOworCQkvKiBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCBmb3IgYXQgbGVhc3QgMSBub2RlICovCisJCWlmIChsZW4gPiBidS0+YnVmX2xlbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gem5vZGUtPnpicmFuY2hbbl07CisJCWJ1LT5ibGtfY250ICs9IDE7CisJCWxudW0gPSB6bm9kZS0+emJyYW5jaFtuXS5sbnVtOworCQlvZmZzID0gQUxJR04oem5vZGUtPnpicmFuY2hbbl0ub2ZmcyArIGxlbiwgOCk7CisJfQorCXdoaWxlICgxKSB7CisJCXN0cnVjdCB1Ymlmc196YnJhbmNoICp6YnI7CisJCXVuaW9uIHViaWZzX2tleSAqa2V5OworCQl1bnNpZ25lZCBpbnQgbmV4dF9ibG9jazsKKworCQkvKiBGaW5kIG5leHQga2V5ICovCisJCWVyciA9IHRuY19uZXh0KGMsICZ6bm9kZSwgJm4pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCXpiciA9ICZ6bm9kZS0+emJyYW5jaFtuXTsKKwkJa2V5ID0gJnpici0+a2V5OworCQkvKiBTZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBkYXRhIGtleSBmb3IgdGhpcyBmaWxlICovCisJCWlmIChrZXlfaW51bShjLCBrZXkpICE9IGtleV9pbnVtKGMsICZidS0+a2V5KSB8fAorCQkgICAga2V5X3R5cGUoYywga2V5KSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChsbnVtIDwgMCkgeworCQkJLyogRmlyc3Qga2V5IGZvdW5kICovCisJCQlsbnVtID0gemJyLT5sbnVtOworCQkJb2ZmcyA9IEFMSUdOKHpici0+b2ZmcyArIHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IHpici0+bGVuOworCQkJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgZGF0YSBub2RlcyBtdXN0IGJlIGluIGNvbnNlY3V0aXZlIHBvc2l0aW9ucyBpbgorCQkJICogdGhlIHNhbWUgTEVCLgorCQkJICovCisJCQlpZiAoemJyLT5sbnVtICE9IGxudW0gfHwgemJyLT5vZmZzICE9IG9mZnMpCisJCQkJZ290byBvdXQ7CisJCQlvZmZzICs9IEFMSUdOKHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IEFMSUdOKGxlbiwgOCkgKyB6YnItPmxlbjsKKwkJCS8qIE11c3Qgbm90IGV4Y2VlZCBidWZmZXIgbGVuZ3RoICovCisJCQlpZiAobGVuID4gYnUtPmJ1Zl9sZW4pCisJCQkJZ290byBvdXQ7CisJCX0KKwkJLyogQWxsb3cgZm9yIGhvbGVzICovCisJCW5leHRfYmxvY2sgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJYnUtPmJsa19jbnQgKz0gKG5leHRfYmxvY2sgLSBibG9jayAtIDEpOworCQlpZiAoYnUtPmJsa19jbnQgPj0gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJCWdvdG8gb3V0OworCQlibG9jayA9IG5leHRfYmxvY2s7CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gKnpicjsKKwkJYnUtPmJsa19jbnQgKz0gMTsKKwkJLyogU2VlIGlmIHdlIGhhdmUgcm9vbSBmb3IgbW9yZSAqLworCQlpZiAoYnUtPmNudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJCWlmIChidS0+YmxrX2NudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJfQorb3V0OgorCWlmIChlcnIgPT0gLUVOT0VOVCkgeworCQlidS0+ZW9mID0gMTsKKwkJZXJyID0gMDsKKwl9CisJYnUtPmdjX3NlcSA9IGMtPmdjX3NlcTsKKwltdXRleF91bmxvY2soJmMtPnRuY19tdXRleCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKgorCSAqIEFuIGVub3Jtb3VzIGhvbGUgY291bGQgY2F1c2UgYnVsay1yZWFkIHRvIGVuY29tcGFzcyB0b28gbWFueQorCSAqIHBhZ2UgY2FjaGUgcGFnZXMsIHNvIGxpbWl0IHRoZSBudW1iZXIgaGVyZS4KKwkgKi8KKwlpZiAoYnUtPmJsa19jbnQgPiBVQklGU19NQVhfQlVMS19SRUFEKQorCQlidS0+YmxrX2NudCA9IFVCSUZTX01BWF9CVUxLX1JFQUQ7CisJLyoKKwkgKiBFbnN1cmUgdGhhdCBidWxrLXJlYWQgY292ZXJzIGEgd2hvbGUgbnVtYmVyIG9mIHBhZ2UgY2FjaGUKKwkgKiBwYWdlcy4KKwkgKi8KKwlpZiAoVUJJRlNfQkxPQ0tTX1BFUl9QQUdFID09IDEgfHwKKwkgICAgIShidS0+YmxrX2NudCAmIChVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKSkpCisJCXJldHVybiAwOworCWlmIChidS0+ZW9mKSB7CisJCS8qIEF0IHRoZSBlbmQgb2YgZmlsZSB3ZSBjYW4gcm91bmQgdXAgKi8KKwkJYnUtPmJsa19jbnQgKz0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEV4Y2x1ZGUgZGF0YSBub2RlcyB0aGF0IGRvIG5vdCBtYWtlIHVwIGEgd2hvbGUgcGFnZSBjYWNoZSBwYWdlICovCisJYmxvY2sgPSBrZXlfYmxvY2soYywgJmJ1LT5rZXkpICsgYnUtPmJsa19jbnQ7CisJYmxvY2sgJj0gfihVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKTsKKwl3aGlsZSAoYnUtPmNudCkgeworCQlpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtidS0+Y250IC0gMV0ua2V5KSA8IGJsb2NrKQorCQkJYnJlYWs7CisJCWJ1LT5jbnQgLT0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmVhZF93YnVmIC0gYnVsay1yZWFkIGZyb20gYSBMRUIgd2l0aCBhIHdidWYuCisgKiBAd2J1Zjogd2J1ZiB0aGF0IG1heSBvdmVybGFwIHRoZSByZWFkCisgKiBAYnVmOiBidWZmZXIgaW50byB3aGljaCB0byByZWFkCisgKiBAbGVuOiByZWFkIGxlbmd0aAorICogQGxudW06IExFQiBudW1iZXIgZnJvbSB3aGljaCB0byByZWFkCisgKiBAb2Zmczogb2Zmc2V0IGZyb20gd2hpY2ggdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCByZWFkX3didWYoc3RydWN0IHViaWZzX3didWYgKndidWYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IGxudW0sCisJCSAgICAgaW50IG9mZnMpCit7CisJY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMgPSB3YnVmLT5jOworCWludCBybGVuLCBvdmVybGFwOworCisJZGJnX2lvKCJMRUIgJWQ6JWQsIGxlbmd0aCAlZCIsIGxudW0sIG9mZnMsIGxlbik7CisJdWJpZnNfYXNzZXJ0KHdidWYgJiYgbG51bSA+PSAwICYmIGxudW0gPCBjLT5sZWJfY250ICYmIG9mZnMgPj0gMCk7CisJdWJpZnNfYXNzZXJ0KCEob2ZmcyAmIDcpICYmIG9mZnMgPCBjLT5sZWJfc2l6ZSk7CisJdWJpZnNfYXNzZXJ0KG9mZnMgKyBsZW4gPD0gYy0+bGViX3NpemUpOworCisJc3Bpbl9sb2NrKCZ3YnVmLT5sb2NrKTsKKwlvdmVybGFwID0gKGxudW0gPT0gd2J1Zi0+bG51bSAmJiBvZmZzICsgbGVuID4gd2J1Zi0+b2Zmcyk7CisJaWYgKCFvdmVybGFwKSB7CisJCS8qIFdlIG1heSBzYWZlbHkgdW5sb2NrIHRoZSB3cml0ZS1idWZmZXIgYW5kIHJlYWQgdGhlIGRhdGEgKi8KKwkJc3Bpbl91bmxvY2soJndidWYtPmxvY2spOworCQlyZXR1cm4gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidWYsIG9mZnMsIGxlbik7CisJfQorCisJLyogRG9uJ3QgcmVhZCB1bmRlciB3YnVmICovCisJcmxlbiA9IHdidWYtPm9mZnMgLSBvZmZzOworCWlmIChybGVuIDwgMCkKKwkJcmxlbiA9IDA7CisKKwkvKiBDb3B5IHRoZSByZXN0IGZyb20gdGhlIHdyaXRlLWJ1ZmZlciAqLworCW1lbWNweShidWYgKyBybGVuLCB3YnVmLT5idWYgKyBvZmZzICsgcmxlbiAtIHdidWYtPm9mZnMsIGxlbiAtIHJsZW4pOworCXNwaW5fdW5sb2NrKCZ3YnVmLT5sb2NrKTsKKworCWlmIChybGVuID4gMCkKKwkJLyogUmVhZCBldmVyeXRoaW5nIHRoYXQgZ29lcyBiZWZvcmUgd3JpdGUtYnVmZmVyICovCisJCXJldHVybiB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1Ziwgb2Zmcywgcmxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2YWxpZGF0ZV9kYXRhX25vZGUgLSB2YWxpZGF0ZSBkYXRhIG5vZGVzIGZvciBidWxrLXJlYWQuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyBkYXRhIG5vZGUgdG8gdmFsaWRhdGUKKyAqIEB6YnI6IHpicmFuY2ggb2YgZGF0YSBub2RlIHRvIHZhbGlkYXRlCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyAlMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2RhdGFfbm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLAorCQkJICAgICAgc3RydWN0IHViaWZzX3picmFuY2ggKnpicikKK3sKKwl1bmlvbiB1Ymlmc19rZXkga2V5MTsKKwlzdHJ1Y3QgdWJpZnNfY2ggKmNoID0gYnVmOworCWludCBlcnIsIGxlbjsKKworCWlmIChjaC0+bm9kZV90eXBlICE9IFVCSUZTX0RBVEFfTk9ERSkgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIHR5cGUgKCVkIGJ1dCBleHBlY3RlZCAlZCkiLAorCQkJICBjaC0+bm9kZV90eXBlLCBVQklGU19EQVRBX05PREUpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJZXJyID0gdWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIHpici0+bG51bSwgemJyLT5vZmZzLCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCXViaWZzX2VycigiZXhwZWN0ZWQgbm9kZSB0eXBlICVkIiwgVUJJRlNfREFUQV9OT0RFKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gbGUzMl90b19jcHUoY2gtPmxlbik7CisJaWYgKGxlbiAhPSB6YnItPmxlbikgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQiLCBsZW4sIHpici0+bGVuKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUga2V5IG9mIHRoZSByZWFkIG5vZGUgaXMgY29ycmVjdCAqLworCWtleV9yZWFkKGMsIGJ1ZiArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywgJnpici0+a2V5LCAma2V5MSkpIHsKKwkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKKwkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKKwkJCURCR0tFWSgmemJyLT5rZXkpLCBEQkdLRVkxKCZrZXkxKSk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwllcnIgPSAtRUlOVkFMOworb3V0OgorCXViaWZzX2VycigiYmFkIG5vZGUgYXQgTEVCICVkOiVkIiwgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCWRiZ19kdW1wX25vZGUoYywgYnVmKTsKKwlkYmdfZHVtcF9zdGFjaygpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdWJpZnNfdG5jX2J1bGtfcmVhZCAtIHJlYWQgYSBudW1iZXIgb2YgZGF0YSBub2RlcyBpbiBvbmUgZ28uCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnU6IGJ1bGstcmVhZCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmVhZHMgYW5kIHZhbGlkYXRlcyB0aGUgZGF0YSBub2RlcyB0aGF0IHdlcmUgaWRlbnRpZmllZCBieSB0aGUKKyAqICd1Ymlmc190bmNfZ2V0X2J1X2tleXMoKScgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcywKKyAqIC1FQUdBSU4gdG8gaW5kaWNhdGUgYSByYWNlIHdpdGggR0MsIG9yIGFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSBvbgorICogZmFpbHVyZS4KKyAqLworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSkKK3sKKwlpbnQgbG51bSA9IGJ1LT56YnJhbmNoWzBdLmxudW0sIG9mZnMgPSBidS0+emJyYW5jaFswXS5vZmZzLCBsZW4sIGVyciwgaTsKKwlzdHJ1Y3QgdWJpZnNfd2J1ZiAqd2J1ZjsKKwl2b2lkICpidWY7CisKKwlsZW4gPSBidS0+emJyYW5jaFtidS0+Y250IC0gMV0ub2ZmczsKKwlsZW4gKz0gYnUtPnpicmFuY2hbYnUtPmNudCAtIDFdLmxlbiAtIG9mZnM7CisJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCXViaWZzX2VycigiYnVmZmVyIHRvbyBzbWFsbCAlZCB2cyAlZCIsIGJ1LT5idWZfbGVuLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyB0aGUgcmVhZCAqLworCXdidWYgPSB1Ymlmc19nZXRfd2J1ZihjLCBsbnVtKTsKKwlpZiAod2J1ZikKKwkJZXJyID0gcmVhZF93YnVmKHdidWYsIGJ1LT5idWYsIGxlbiwgbG51bSwgb2Zmcyk7CisJZWxzZQorCQllcnIgPSB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1LT5idWYsIG9mZnMsIGxlbik7CisKKwkvKiBDaGVjayBmb3IgYSByYWNlIHdpdGggR0MgKi8KKwlpZiAobWF5YmVfbGViX2djZWQoYywgbG51bSwgYnUtPmdjX3NlcSkpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKGVyciAmJiBlcnIgIT0gLUVCQURNU0cpIHsKKwkJdWJpZnNfZXJyKCJmYWlsZWQgdG8gcmVhZCBmcm9tIExFQiAlZDolZCwgZXJyb3IgJWQiLAorCQkJICBsbnVtLCBvZmZzLCBlcnIpOworCQlkYmdfZHVtcF9zdGFjaygpOworCQlkYmdfdG5jKCJrZXkgJXMiLCBEQkdLRVkoJmJ1LT5rZXkpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgbm9kZXMgcmVhZCAqLworCWJ1ZiA9IGJ1LT5idWY7CisJZm9yIChpID0gMDsgaSA8IGJ1LT5jbnQ7IGkrKykgeworCQllcnIgPSB2YWxpZGF0ZV9kYXRhX25vZGUoYywgYnVmLCAmYnUtPnpicmFuY2hbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnVmID0gYnVmICsgQUxJR04oYnUtPnpicmFuY2hbaV0ubGVuLCA4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBkb19sb29rdXBfbm0tIGxvb2sgdXAgYSAiaGFzaGVkIiBub2RlLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleTogbm9kZSBrZXkgdG8gbG9va3VwCkBAIC0xNjc1LDcgKzE5NjIsNyBAQAogewogCXN0cnVjdCB1Ymlmc196bm9kZSAqem4sICp6aSwgKnpwOwogCWludCBpLCBrZWVwLCBtb3ZlLCBhcHBlbmRpbmcgPSAwOwotCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5OworCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5LCAqa2V5MTsKIAogCXViaWZzX2Fzc2VydChuID49IDAgJiYgbiA8PSBjLT5mYW5vdXQpOwogCkBAIC0xNzE2LDIwICsyMDAzLDMzIEBACiAJem4tPmxldmVsID0gem5vZGUtPmxldmVsOwogCiAJLyogRGVjaWRlIHdoZXJlIHRvIHNwbGl0ICovCi0JaWYgKHpub2RlLT5sZXZlbCA9PSAwICYmIG4gPT0gYy0+ZmFub3V0ICYmCi0JICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKLQkJdW5pb24gdWJpZnNfa2V5ICprZXkxOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYW4gaW5vZGUgd2hpY2ggaXMgYmVpbmcgYXBwZW5kZWQgLSBkbyBub3Qgc3BsaXQKLQkJICogaXQgYmVjYXVzZSBubyBvdGhlciB6YnJhbmNoZXMgY2FuIGJlIGluc2VydGVkIGJldHdlZW4KLQkJICogemJyYW5jaGVzIG9mIGNvbnNlY3V0aXZlIGRhdGEgbm9kZXMgYW55d2F5LgotCQkgKi8KLQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OwotCQlpZiAoa2V5X2ludW0oYywga2V5MSkgPT0ga2V5X2ludW0oYywga2V5KSAmJgotCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKLQkJICAgIGtleV9ibG9jayhjLCBrZXkxKSA9PSBrZXlfYmxvY2soYywga2V5KSAtIDEpCi0JCQlhcHBlbmRpbmcgPSAxOworCWlmICh6bm9kZS0+bGV2ZWwgPT0gMCAmJiBrZXlfdHlwZShjLCBrZXkpID09IFVCSUZTX0RBVEFfS0VZKSB7CisJCS8qIFRyeSBub3QgdG8gc3BsaXQgY29uc2VjdXRpdmUgZGF0YSBrZXlzICovCisJCWlmIChuID09IGMtPmZhbm91dCkgeworCQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OworCQkJaWYgKGtleV9pbnVtKGMsIGtleTEpID09IGtleV9pbnVtKGMsIGtleSkgJiYKKwkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSA9PSBVQklGU19EQVRBX0tFWSkKKwkJCQlhcHBlbmRpbmcgPSAxOworCQl9IGVsc2UKKwkJCWdvdG8gY2hlY2tfc3BsaXQ7CisJfSBlbHNlIGlmIChhcHBlbmRpbmcgJiYgbiAhPSBjLT5mYW5vdXQpIHsKKwkJLyogVHJ5IG5vdCB0byBzcGxpdCBjb25zZWN1dGl2ZSBkYXRhIGtleXMgKi8KKwkJYXBwZW5kaW5nID0gMDsKK2NoZWNrX3NwbGl0OgorCQlpZiAobiA+PSAoYy0+ZmFub3V0ICsgMSkgLyAyKSB7CisJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoWzBdLmtleTsKKwkJCWlmIChrZXlfaW51bShjLCBrZXkxKSA9PSBrZXlfaW51bShjLCBrZXkpICYmCisJCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoW25dLmtleTsKKwkJCQlpZiAoa2V5X2ludW0oYywga2V5MSkgIT0ga2V5X2ludW0oYywga2V5KSB8fAorCQkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJCQlrZWVwID0gbjsKKwkJCQkJbW92ZSA9IGMtPmZhbm91dCAtIGtlZXA7CisJCQkJCXppID0gem5vZGU7CisJCQkJCWdvdG8gZG9fc3BsaXQ7CisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJaWYgKGFwcGVuZGluZykgewpAQCAtMTc1OSw2ICsyMDU5LDggQEAKIAkJCXpici0+em5vZGUtPnBhcmVudCA9IHpuOwogCX0KIAorZG9fc3BsaXQ6CisKIAlfX3NldF9iaXQoRElSVFlfWk5PREUsICZ6bi0+ZmxhZ3MpOwogCWF0b21pY19sb25nX2luYygmYy0+ZGlydHlfem5fY250KTsKIApAQCAtMTc4NSwxNCArMjA4NywxMSBAQAogCiAJLyogSW5zZXJ0IG5ldyB6bm9kZSAocHJvZHVjZWQgYnkgc3BpdHRpbmcpIGludG8gdGhlIHBhcmVudCAqLwogCWlmICh6cCkgewotCQlpID0gbjsKKwkJaWYgKG4gPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCisJCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKKwogCQkvKiBMb2NhdGUgaW5zZXJ0aW9uIHBvaW50ICovCiAJCW4gPSB6bm9kZS0+aWlwICsgMTsKLQkJaWYgKGFwcGVuZGluZyAmJiBuICE9IGMtPmZhbm91dCkKLQkJCWFwcGVuZGluZyA9IDA7Ci0KLQkJaWYgKGkgPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCi0JCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKIAogCQkvKiBUYWlsIHJlY3Vyc2lvbiAqLwogCQl6YnItPmtleSA9IHpuLT56YnJhbmNoWzBdLmtleTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19taXNjLmMgYi9mcy91Ymlmcy90bmNfbWlzYy5jCmluZGV4IGEyNWMxY2MuLmI0OGRiOTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuY19taXNjLmMKKysrIGIvZnMvdWJpZnMvdG5jX21pc2MuYwpAQCAtNDgwLDggKzQ4MCw4IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBrZXkgb2YgdGhlIHJlYWQgbm9kZSBpcyBjb3JyZWN0ICovCi0Ja2V5X3JlYWQoYywga2V5LCAma2V5MSk7Ci0JaWYgKG1lbWNtcChub2RlICsgVUJJRlNfS0VZX09GRlNFVCwgJmtleTEsIGMtPmtleV9sZW4pKSB7CisJa2V5X3JlYWQoYywgbm9kZSArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywga2V5LCAma2V5MSkpIHsKIAkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKIAkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOwogCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IGE5ZWNiZDkuLjBiMzc4MDQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtNzUsNyArNzUsNiBAQAogICovCiAjZGVmaW5lIFVCSUZTX0JMT0NLX1NJWkUgIDQwOTYKICNkZWZpbmUgVUJJRlNfQkxPQ0tfU0hJRlQgMTIKLSNkZWZpbmUgVUJJRlNfQkxPQ0tfTUFTSyAgMHgwMDAwMEZGRgogCiAvKiBVQklGUyBwYWRkaW5nIGJ5dGUgcGF0dGVybiAobXVzdCBub3QgYmUgZmlyc3Qgb3IgbGFzdCBieXRlIG9mIG5vZGUgbWFnaWMpICovCiAjZGVmaW5lIFVCSUZTX1BBRERJTkdfQllURSAweENFCmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAxN2M2MjBiLi5hN2JkMzJmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE0Miw2ICsxNDIsOSBAQAogLyogTWF4aW11bSBleHBlY3RlZCB0cmVlIGhlaWdodCBmb3IgdXNlIGJ5IGJvdHRvbV91cF9idWYgKi8KICNkZWZpbmUgQk9UVE9NX1VQX0hFSUdIVCA2NAogCisvKiBNYXhpbXVtIG51bWJlciBvZiBkYXRhIG5vZGVzIHRvIGJ1bGstcmVhZCAqLworI2RlZmluZSBVQklGU19NQVhfQlVMS19SRUFEIDMyCisKIC8qCiAgKiBMb2NrZGVwIGNsYXNzZXMgZm9yIFVCSUZTIGlub2RlIEB1aV9tdXRleC4KICAqLwpAQCAtMzI4LDkgKzMzMSwxMCBAQAogICogICAgICAgICAgICAgICB0aGlzIGlub2RlCiAgKiBAZGlydHk6IG5vbi16ZXJvIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eQogICogQHhhdHRyOiBub24temVybyBpZiB0aGlzIGlzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbm9kZQorICogQGJ1bGtfcmVhZDogbm9uLXplcm8gaWYgYnVsay1yZWFkIHNob3VsZCBiZSB1c2VkCiAgKiBAdWlfbXV0ZXg6IHNlcmlhbGl6ZXMgaW5vZGUgd3JpdGUtYmFjayB3aXRoIHRoZSByZXN0IG9mIFZGUyBvcGVyYXRpb25zLAotICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHByb3RlY3RzIEBkaXJ0eSwKLSAqICAgICAgICAgICAgQHVpX3NpemUsIGFuZCBAeGF0dHJfc2l6ZQorICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHNlcmlhbGl6ZXMgYnVsay1yZWFkLAorICogICAgICAgICAgICBwcm90ZWN0cyBAZGlydHksIEBidWxrX3JlYWQsIEB1aV9zaXplLCBhbmQgQHhhdHRyX3NpemUKICAqIEB1aV9sb2NrOiBwcm90ZWN0cyBAc3luY2VkX2lfc2l6ZQogICogQHN5bmNlZF9pX3NpemU6IHN5bmNocm9uaXplZCBzaXplIG9mIGlub2RlLCBpLmUuIHRoZSB2YWx1ZSBvZiBpbm9kZSBzaXplCiAgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgZmxhc2g7IHVzZWQgb25seSBmb3IgcmVndWxhciBmaWxlCkBAIC0zMzgsNiArMzQyLDggQEAKICAqIEB1aV9zaXplOiBpbm9kZSBzaXplIHVzZWQgYnkgVUJJRlMgd2hlbiB3cml0aW5nIHRvIGZsYXNoCiAgKiBAZmxhZ3M6IGlub2RlIGZsYWdzIChAVUJJRlNfQ09NUFJfRkwsIGV0YykKICAqIEBjb21wcl90eXBlOiBkZWZhdWx0IGNvbXByZXNzaW9uIHR5cGUgdXNlZCBmb3IgdGhpcyBpbm9kZQorICogQGxhc3RfcGFnZV9yZWFkOiBwYWdlIG51bWJlciBvZiBsYXN0IHBhZ2UgcmVhZCAoZm9yIGJ1bGsgcmVhZCkKKyAqIEByZWFkX2luX2Ffcm93OiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFnZXMgcmVhZCBpbiBhIHJvdyAoZm9yIGJ1bGsgcmVhZCkKICAqIEBkYXRhX2xlbjogbGVuZ3RoIG9mIHRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbm9kZQogICogQGRhdGE6IGlub2RlJ3MgZGF0YQogICoKQEAgLTM3OSwxMiArMzg1LDE1IEBACiAJdW5zaWduZWQgaW50IHhhdHRyX25hbWVzOwogCXVuc2lnbmVkIGludCBkaXJ0eToxOwogCXVuc2lnbmVkIGludCB4YXR0cjoxOworCXVuc2lnbmVkIGludCBidWxrX3JlYWQ6MTsKIAlzdHJ1Y3QgbXV0ZXggdWlfbXV0ZXg7CiAJc3BpbmxvY2tfdCB1aV9sb2NrOwogCWxvZmZfdCBzeW5jZWRfaV9zaXplOwogCWxvZmZfdCB1aV9zaXplOwogCWludCBmbGFnczsKIAlpbnQgY29tcHJfdHlwZTsKKwlwZ29mZl90IGxhc3RfcGFnZV9yZWFkOworCXBnb2ZmX3QgcmVhZF9pbl9hX3JvdzsKIAlpbnQgZGF0YV9sZW47CiAJdm9pZCAqZGF0YTsKIH07CkBAIC02OTgsOCArNzA3LDggQEAKICAqIHN0cnVjdCB1Ymlmc196YnJhbmNoIC0ga2V5L2Nvb3JkaW5hdGUvbGVuZ3RoIGJyYW5jaCBzdG9yZWQgaW4gem5vZGVzLgogICogQGtleToga2V5CiAgKiBAem5vZGU6IHpub2RlIGFkZHJlc3MgaW4gbWVtb3J5Ci0gKiBAbG51bTogTEVCIG51bWJlciBvZiB0aGUgaW5kZXhpbmcgbm9kZQotICogQG9mZnM6IG9mZnNldCBvZiB0aGUgaW5kZXhpbmcgbm9kZSB3aXRoaW4gQGxudW0KKyAqIEBsbnVtOiBMRUIgbnVtYmVyIG9mIHRoZSB0YXJnZXQgbm9kZSAoaW5kZXhpbmcgbm9kZSBvciBkYXRhIG5vZGUpCisgKiBAb2ZmczogdGFyZ2V0IG5vZGUgb2Zmc2V0IHdpdGhpbiBAbG51bQogICogQGxlbjogdGFyZ2V0IG5vZGUgbGVuZ3RoCiAgKi8KIHN0cnVjdCB1Ymlmc196YnJhbmNoIHsKQEAgLTc0NCw2ICs3NTMsMjggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGJ1X2luZm8gLSBidWxrLXJlYWQgaW5mb3JtYXRpb24KKyAqIEBrZXk6IGZpcnN0IGRhdGEgbm9kZSBrZXkKKyAqIEB6YnJhbmNoOiB6YnJhbmNoZXMgb2YgZGF0YSBub2RlcyB0byBidWxrIHJlYWQKKyAqIEBidWY6IGJ1ZmZlciB0byByZWFkIGludG8KKyAqIEBidWZfbGVuOiBidWZmZXIgbGVuZ3RoCisgKiBAZ2Nfc2VxOiBHQyBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZWN0IHJhY2VzIHdpdGggR0MKKyAqIEBjbnQ6IG51bWJlciBvZiBkYXRhIG5vZGVzIGZvciBidWxrIHJlYWQKKyAqIEBibGtfY250OiBudW1iZXIgb2YgZGF0YSBibG9ja3MgaW5jbHVkaW5nIGhvbGVzCisgKiBAb2VmOiBlbmQgb2YgZmlsZSByZWFjaGVkCisgKi8KK3N0cnVjdCBidV9pbmZvIHsKKwl1bmlvbiB1Ymlmc19rZXkga2V5OworCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpicmFuY2hbVUJJRlNfTUFYX0JVTEtfUkVBRF07CisJdm9pZCAqYnVmOworCWludCBidWZfbGVuOworCWludCBnY19zZXE7CisJaW50IGNudDsKKwlpbnQgYmxrX2NudDsKKwlpbnQgZW9mOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdWJpZnNfbm9kZV9yYW5nZSAtIG5vZGUgbGVuZ3RoIHJhbmdlIGRlc2NyaXB0aW9uIGRhdGEgc3RydWN0dXJlLgogICogQGxlbjogZml4ZWQgbm9kZSBsZW5ndGgKICAqIEBtaW5fbGVuOiBtaW5pbXVtIHBvc3NpYmxlIG5vZGUgbGVuZ3RoCkBAIC04NjIsOSArODkzLDEzIEBACiAvKioKICAqIHN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIC0gVUJJRlMtc3BlY2lmaWMgbW91bnQgb3B0aW9ucyBpbmZvcm1hdGlvbi4KICAqIEB1bm1vdW50X21vZGU6IHNlbGVjdGVkIHVubW91bnQgbW9kZSAoJTAgZGVmYXVsdCwgJTEgbm9ybWFsLCAlMiBmYXN0KQorICogQGJ1bGtfcmVhZDogZW5hYmxlIGJ1bGstcmVhZHMKKyAqIEBjaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKICAqLwogc3RydWN0IHViaWZzX21vdW50X29wdHMgewogCXVuc2lnbmVkIGludCB1bm1vdW50X21vZGU6MjsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjI7CisJdW5zaWduZWQgaW50IGNoa19kYXRhX2NyYzoyOwogfTsKIAogLyoqCkBAIC05MDUsMTMgKzk0MCwxMiBAQAogICogQGNtdF9zdGF0ZTogY29tbWl0IHN0YXRlCiAgKiBAY3NfbG9jazogY29tbWl0IHN0YXRlIGxvY2sKICAqIEBjbXRfd3E6IHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgdGhlIGxvZyBpcyBmdWxsIGFuZCBhIGNvbW1pdCBpcyBydW5uaW5nCisgKgogICogQGZhc3RfdW5tb3VudDogZG8gbm90IHJ1biBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKICAqIEBiaWdfbHB0OiBmbGFnIHRoYXQgTFBUIGlzIHRvbyBiaWcgdG8gd3JpdGUgd2hvbGUgZHVyaW5nIGNvbW1pdAotICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCi0gKiBAbm9zcGFjZTogbm9uLXplcm8gaWYgdGhlIGZpbGUtc3lzdGVtIGRvZXMgbm90IGhhdmUgZmxhc2ggc3BhY2UgKHVzZWQgYXMKLSAqICAgICAgICAgICBvcHRpbWl6YXRpb24pCi0gKiBAbm9zcGFjZV9ycDogdGhlIHNhbWUgYXMgQG5vc3BhY2UsIGJ1dCBhZGRpdGlvbmFsbHkgbWVhbnMgdGhhdCBldmVuIHJlc2VydmVkCi0gKiAgICAgICAgICAgICAgcG9vbCBpcyBmdWxsCisgKiBAbm9fY2hrX2RhdGFfY3JjOiBkbyBub3QgY2hlY2sgQ1JDcyB3aGVuIHJlYWRpbmcgZGF0YSBub2RlcyAoZXhjZXB0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkpCisgKiBAYnVsa19yZWFkOiBlbmFibGUgYnVsay1yZWFkcwogICoKICAqIEB0bmNfbXV0ZXg6IHByb3RlY3RzIHRoZSBUcmVlIE5vZGUgQ2FjaGUgKFROQyksIEB6cm9vdCwgQGNuZXh0LCBAZW5leHQsIGFuZAogICogICAgICAgICAgICAgQGNhbGNfaWR4X3N6CkBAIC05MzUsNiArOTY5LDcgQEAKICAqIEBtc3Rfbm9kZTogbWFzdGVyIG5vZGUKICAqIEBtc3Rfb2Zmczogb2Zmc2V0IG9mIHZhbGlkIG1hc3RlciBub2RlCiAgKiBAbXN0X211dGV4OiBwcm90ZWN0cyB0aGUgbWFzdGVyIG5vZGUgYXJlYSwgQG1zdF9ub2RlLCBhbmQgQG1zdF9vZmZzCisgKiBAYnVsa19yZWFkX2J1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcwogICoKICAqIEBsb2dfbGViczogbnVtYmVyIG9mIGxvZ2ljYWwgZXJhc2VibG9ja3MgaW4gdGhlIGxvZwogICogQGxvZ19ieXRlczogbG9nIHNpemUgaW4gYnl0ZXMKQEAgLTk3NywxMiArMTAxMiwxNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBidXQgd2hpY2ggc3RpbGwgaGF2ZSB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgYmVjYXVzZQogICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5kZXggaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCBzbyBmYXIKICAqIEBzcGFjZV9sb2NrOiBwcm90ZWN0cyBAYnVkZ19pZHhfZ3Jvd3RoLCBAYnVkZ19kYXRhX2dyb3d0aCwgQGJ1ZGdfZGRfZ3Jvd3RoLAotICogICAgICAgICAgICAgIEBidWRnX3VuY29tbWl0ZWRfaWR4LCBAbWluX2lkeF9sZWJzLCBAb2xkX2lkeF9zeiwgYW5kIEBsc3Q7CisgKiAgICAgICAgICAgICAgQGJ1ZGdfdW5jb21taXRlZF9pZHgsIEBtaW5faWR4X2xlYnMsIEBvbGRfaWR4X3N6LCBAbHN0LAorICogICAgICAgICAgICAgIEBub3NwYWNlLCBhbmQgQG5vc3BhY2VfcnA7CiAgKiBAbWluX2lkeF9sZWJzOiBtaW5pbXVtIG51bWJlciBvZiBMRUJzIHJlcXVpcmVkIGZvciB0aGUgaW5kZXgKICAqIEBvbGRfaWR4X3N6OiBzaXplIG9mIGluZGV4IG9uIGZsYXNoCiAgKiBAY2FsY19pZHhfc3o6IHRlbXBvcmFyeSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgaW5kZXggc2l6ZQogICogICAgICAgICAgICAgICAoY29udGFpbnMgYWNjdXJhdGUgbmV3IGluZGV4IHNpemUgYXQgZW5kIG9mIFROQyBjb21taXQgc3RhcnQpCiAgKiBAbHN0OiBscHJvcHMgc3RhdGlzdGljcworICogQG5vc3BhY2U6IG5vbi16ZXJvIGlmIHRoZSBmaWxlLXN5c3RlbSBkb2VzIG5vdCBoYXZlIGZsYXNoIHNwYWNlICh1c2VkIGFzCisgKiAgICAgICAgICAgb3B0aW1pemF0aW9uKQorICogQG5vc3BhY2VfcnA6IHRoZSBzYW1lIGFzIEBub3NwYWNlLCBidXQgYWRkaXRpb25hbGx5IG1lYW5zIHRoYXQgZXZlbiByZXNlcnZlZAorICogICAgICAgICAgICAgIHBvb2wgaXMgZnVsbAogICoKICAqIEBwYWdlX2J1ZGdldDogYnVkZ2V0IGZvciBhIHBhZ2UKICAqIEBpbm9kZV9idWRnZXQ6IGJ1ZGdldCBmb3IgYW4gaW5vZGUKQEAgLTEwNjEsNiArMTEwMSw3IEBACiAgKiBAbHB0X2RydHlfZmxnczogZGlydHkgZmxhZ3MgZm9yIExQVCBzcGVjaWFsIG5vZGVzIGUuZy4gbHRhYgogICogQGRpcnR5X25uX2NudDogbnVtYmVyIG9mIGRpcnR5IG5ub2RlcwogICogQGRpcnR5X3BuX2NudDogbnVtYmVyIG9mIGRpcnR5IHBub2RlcworICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCiAgKiBAbHB0X3N6OiBMUFQgc2l6ZQogICogQGxwdF9ub2RfYnVmOiBidWZmZXIgZm9yIGFuIG9uLWZsYXNoIG5ub2RlIG9yIHBub2RlCiAgKiBAbHB0X2J1ZjogYnVmZmVyIG9mIExFQiBzaXplIHVzZWQgYnkgTFBUCkBAIC0xMTAyLDYgKzExNDMsNyBAQAogICogQHJjdnJkX21zdF9ub2RlOiByZWNvdmVyZWQgbWFzdGVyIG5vZGUgdG8gd3JpdGUgd2hlbiBtb3VudGluZyBybyB0byBydwogICogQHNpemVfdHJlZTogaW5vZGUgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVjb3ZlcnkKICAqIEByZW1vdW50aW5nX3J3OiBzZXQgd2hpbGUgcmVtb3VudGluZyBmcm9tIHJvIHRvIHJ3IChzYiBmbGFncyBoYXZlIE1TX1JET05MWSkKKyAqIEBhbHdheXNfY2hrX2NyYzogYWx3YXlzIGNoZWNrIENSQ3MgKHdoaWxlIG1vdW50aW5nIGFuZCByZW1vdW50aW5nIHJ3KQogICogQG1vdW50X29wdHM6IFVCSUZTLXNwZWNpZmljIG1vdW50IG9wdGlvbnMKICAqCiAgKiBAZGJnX2J1ZjogYSBidWZmZXIgb2YgTEVCIHNpemUgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkBAIC0xMTQ2LDExICsxMTg4LDExIEBACiAJaW50IGNtdF9zdGF0ZTsKIAlzcGlubG9ja190IGNzX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY210X3dxOworCiAJdW5zaWduZWQgaW50IGZhc3RfdW5tb3VudDoxOwogCXVuc2lnbmVkIGludCBiaWdfbHB0OjE7Ci0JdW5zaWduZWQgaW50IGNoZWNrX2xwdF9mcmVlOjE7Ci0JdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKLQl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOworCXVuc2lnbmVkIGludCBub19jaGtfZGF0YV9jcmM6MTsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjE7CiAKIAlzdHJ1Y3QgbXV0ZXggdG5jX211dGV4OwogCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpyb290OwpAQCAtMTE3NSw2ICsxMjE3LDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKm1zdF9ub2RlOwogCWludCBtc3Rfb2ZmczsKIAlzdHJ1Y3QgbXV0ZXggbXN0X211dGV4OworCWludCBidWxrX3JlYWRfYnVmX3NpemU7CiAKIAlpbnQgbG9nX2xlYnM7CiAJbG9uZyBsb25nIGxvZ19ieXRlczsKQEAgLTEyMTgsNiArMTI2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9sZF9pZHhfc3o7CiAJdW5zaWduZWQgbG9uZyBsb25nIGNhbGNfaWR4X3N6OwogCXN0cnVjdCB1Ymlmc19scF9zdGF0cyBsc3Q7CisJdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOwogCiAJaW50IHBhZ2VfYnVkZ2V0OwogCWludCBpbm9kZV9idWRnZXQ7CkBAIC0xMjk0LDYgKzEzMzksNyBAQAogCWludCBscHRfZHJ0eV9mbGdzOwogCWludCBkaXJ0eV9ubl9jbnQ7CiAJaW50IGRpcnR5X3BuX2NudDsKKwlpbnQgY2hlY2tfbHB0X2ZyZWU7CiAJbG9uZyBsb25nIGxwdF9zejsKIAl2b2lkICpscHRfbm9kX2J1ZjsKIAl2b2lkICpscHRfYnVmOwpAQCAtMTMzNSw2ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKnJjdnJkX21zdF9ub2RlOwogCXN0cnVjdCByYl9yb290IHNpemVfdHJlZTsKIAlpbnQgcmVtb3VudGluZ19ydzsKKwlpbnQgYWx3YXlzX2Noa19jcmM7CiAJc3RydWN0IHViaWZzX21vdW50X29wdHMgbW91bnRfb3B0czsKIAogI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRwpAQCAtMTM0Nyw2ICsxMzk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmYWlsX3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50IGZhaWxfY250OwogCXVuc2lnbmVkIGludCBmYWlsX2NudF9tYXg7CisJbG9uZyBsb25nIGNoa19scHRfc3o7CisJbG9uZyBsb25nIGNoa19scHRfc3oyOworCWxvbmcgbG9uZyBjaGtfbHB0X3dhc3RhZ2U7CisJaW50IGNoa19scHRfbGViczsKKwlpbnQgbmV3X25oZWFkX2xudW07CisJaW50IG5ld19uaGVhZF9vZmZzOwogI2VuZGlmCiB9OwogCkBAIC0xMzc3LDcgKzE0MzAsNyBAQAogaW50IHViaWZzX3dyaXRlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsbnVtLAogCQkgICAgIGludCBvZmZzLCBpbnQgZHR5cGUpOwogaW50IHViaWZzX2NoZWNrX25vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxudW0sCi0JCSAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpOwogdm9pZCB1Ymlmc19wcmVwYXJlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZCk7CiB2b2lkIHViaWZzX3ByZXBfZ3JwX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsYXN0KTsKIGludCB1Ymlmc19pb19pbml0KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKQEAgLTE0OTAsNiArMTU0Myw4IEBACiBpbnQgaXNfaWR4X25vZGVfaW5fdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW50IGxldmVsLAogCQkgICAgICAgaW50IGxudW0sIGludCBvZmZzKTsKIGludCBpbnNlcnRfb2xkX2lkeF96bm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSk7CitpbnQgdWJpZnNfdG5jX2dldF9idV9rZXlzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpOworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSk7CiAKIC8qIHRuY19taXNjLmMgKi8KIHN0cnVjdCB1Ymlmc196bm9kZSAqdWJpZnNfdG5jX2xldmVsb3JkZXJfbmV4dChzdHJ1Y3QgdWJpZnNfem5vZGUgKnpyLApAQCAtMTU4NiwxMiArMTY0MSwxMCBAQAogdm9pZCB1Ymlmc19scHRfZnJlZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHdyX29ubHkpOwogCiAvKiBscHJvcHMuYyAqLwotdm9pZCB1Ymlmc19nZXRfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2NoYW5nZV9scChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCQkJICAgY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqbHAsCiAJCQkJCSAgIGludCBmcmVlLCBpbnQgZGlydHksIGludCBmbGFncywKIAkJCQkJICAgaW50IGlkeF9nY19jbnQpOwotdm9pZCB1Ymlmc19yZWxlYXNlX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIHViaWZzX2dldF9scF9zdGF0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwX3N0YXRzICpzdGF0cyk7CiB2b2lkIHViaWZzX2FkZF90b19jYXQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcywKIAkJICAgICAgaW50IGNhdCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCA2NDliZWM3Li5jZmQzMWUyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlpbnQgdHlwZTsKIAogCQl4ZW50ID0gdWJpZnNfdG5jX25leHRfZW50KGMsICZrZXksICZubSk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoeGVudCkpKSB7CisJCWlmIChJU19FUlIoeGVudCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoeGVudCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggNzIyN2IyZS4uZTM5MDEzNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC0xMzIzLDcgKzEzMjMsNyBAQAogCSJYRlM6IG1vdW50IG9wdGlvbiBcIiVzXCIgbm90IHN1cHBvcnRlZCBmb3IgcmVtb3VudFxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCi0JCQlyZXR1cm4gMDsKKwkJCWJyZWFrOwogI2VuZGlmCiAJCX0KIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaCBiL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCmluZGV4IDU3YWI5ZTkuLjc0YTk2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCkBAIC00NjcsNyArNDY3LDcgQEAKIC8qCiAgKiBJZiBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FIHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgY29tcGlsZXItZGVwZW5kZW50IGhlYWRlciwKICAqIGRlZmluZSBpdCBub3cuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQKLSAqIGEgX19GVU5DVElPTl9fIG1hY3JvIG9yIGVxdWl2YWxlbnQuCisgKiBhIF9fZnVuY19fIG1hY3JvIG9yIGVxdWl2YWxlbnQuCiAgKi8KICNpZm5kZWYgQUNQSV9HRVRfRlVOQ1RJT05fTkFNRQogI2RlZmluZSBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FICAgICAgICAgIF9hY3BpX2Z1bmN0aW9uX25hbWUKQEAgLTQ3NSwxMiArNDc1LDEyIEBACiAgKiBUaGUgTmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBwcm9jZWR1cmUgbmFtZSBhcyBhIHF1b3RlZCBzdHJpbmcuCiAgKiBUaGUgZnVuY3Rpb24gbmFtZSBpcyBhbHNvIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIGV4aXQgbWFjcm9zIGJlbG93LgogICogTm90ZTogKGNvbnN0IGNoYXIpIGlzIHVzZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBkZWJ1ZyBpbnRlcmZhY2VzCi0gKiBhbmQgbWFjcm9zIHN1Y2ggYXMgX19GVU5DVElPTl9fLgorICogYW5kIG1hY3JvcyBzdWNoIGFzIF9fZnVuY19fLgogICovCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fTkFNRShuYW1lKQlzdGF0aWMgY29uc3QgY2hhciBfYWNwaV9mdW5jdGlvbl9uYW1lW10gPSAjbmFtZTsKIAogI2Vsc2UKLS8qIENvbXBpbGVyIHN1cHBvcnRzIF9fRlVOQ1RJT05fXyAob3IgZXF1aXZhbGVudCkgLS0gSWdub3JlIHRoaXMgbWFjcm8gKi8KKy8qIENvbXBpbGVyIHN1cHBvcnRzIF9fZnVuY19fIChvciBlcXVpdmFsZW50KSAtLSBJZ25vcmUgdGhpcyBtYWNybyAqLwogCiAjZGVmaW5lIEFDUElfRlVOQ1RJT05fTkFNRShuYW1lKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNnY2MuaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCmluZGV4IDg5OTZkYmEuLjhlMmNkYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oCkBAIC00Niw3ICs0Niw3IEBACiAKIC8qIEZ1bmN0aW9uIG5hbWUgaXMgdXNlZCBmb3IgZGVidWcgb3V0cHV0LiBOb24tQU5TSSwgY29tcGlsZXItZGVwZW5kZW50ICovCiAKLSNkZWZpbmUgQUNQSV9HRVRfRlVOQ1RJT05fTkFNRSAgICAgICAgICBfX0ZVTkNUSU9OX18KKyNkZWZpbmUgQUNQSV9HRVRfRlVOQ1RJT05fTkFNRSAgICAgICAgICBfX2Z1bmNfXwogCiAvKgogICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRhZyBmdW5jdGlvbnMgYXMgInByaW50Zi1saWtlIiBiZWNhdXNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGM0MGI4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9kZWJ1Zy1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSwgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KLQotLyogVGhlIFMzQzI0NDAgaW1wbGVtZW50YXRpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhleSBhcmUgdGhlCi0gKiBtb3N0IHdpZGVseSByZS11c2VkICovCi0KLQkubWFjcm8gZmlmb19sZXZlbF9zM2MyNDQwIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCi0JCWFuZAlccmQsIFxyZCwgI1MzQzI0NDBfVUZTVEFUX1RYTUFTSwotCS5lbmRtCi0KLSNpZm5kZWYgZmlmb19sZXZlbAotI2RlZmluZSBmaWZvX2xldmVsIGZpZm9fbGV2ZWxfczNjMjQxMAotI2VuZGlmCi0KLQkubWFjcm8gIGZpZm9fZnVsbF9zM2MyNDQwIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDQwX1VGU1RBVF9UWEZVTEwKLQkuZW5kbQotCi0jaWZuZGVmIGZpZm9fZnVsbAotI2RlZmluZSBmaWZvX2Z1bGwgZmlmb19mdWxsX3MzYzI0NDAKLSNlbmRpZgotCi0JLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIgCVxyZCwgW1xyeCwgIyBTM0MyNDEwX1VUWEggXQotCS5lbmRtCi0KLQkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGQ09OIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVUZDT05fRklGT01PREUJQCBmaWZvIGVuYWJsZWQ/Ci0JCWJlcQkxMDAxZgkJCQlACi0JCUAgRklGTyBlbmFibGVkLi4uCi0xMDAzOgotCQlmaWZvX2Z1bGwgXHJkLCBccngKLQkJYm5lCTEwMDNiCi0JCWIJMTAwMmYKLQotMTAwMToKLQkJQCBidXN5IHdhaXRpbmcgZm9yIG5vbiBmaWZvCi0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQotCQliZXEJMTAwMWIKLQotMTAwMjoJCUAgZXhpdCBidXN5dWFydAotCS5lbmRtCi0KLQkubWFjcm8Jd2FpdHVhcnQscmQscngKLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPwotCQliZXEJMTAwMWYJCQkJQAotCQlAIEZJRk8gZW5hYmxlZC4uLgotMTAwMzoKLQkJZmlmb19sZXZlbCBccmQsIFxyeAotCQl0ZXEJXHJkLCAjMAotCQlibmUJMTAwM2IKLQkJYgkxMDAyZgotMTAwMToKLQkJQCBpZGxlIHdhaXRpbmcgZm9yIG5vbiBmaWZvCi0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQotCQliZXEJMTAwMWIKLQotMTAwMjoJCUAgZXhpdCBidXN5dWFydAotCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliOWVkYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMywgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDIC0gdW5jb21wcmVzcyBjb2RlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fUExBVF9VTkNPTVBSRVNTX0gKLSNkZWZpbmUgX19BU01fUExBVF9VTkNPTVBSRVNTX0gKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdXBmX3Q7CS8qIGNhbm5vdCBpbmNsdWRlIGxpbnV4L3NlcmlhbF9jb3JlLmggKi8KLQotLyogdWFydCBzZXR1cCAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpZm9fbWFzazsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmlmb19tYXg7Ci0KLS8qIGZvcndhcmQgZGVjbGVyYXRpb25zICovCi0KLXN0YXRpYyB2b2lkIGFyY2hfZGV0ZWN0X2NwdSh2b2lkKTsKLQotLyogZGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KLQotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmg+Ci0KLS8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KLSN1bmRlZiBTM0MyNDEwX1dET0dSRUcKLSNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjRYWF9QQV9XQVRDSERPRyArICh4KSkpCi0KLS8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLwotI2RlZmluZSBGSUZPX01BWAkgKDE0KQotCi0jZGVmaW5lIHVhcnRfYmFzZSBTM0MyNFhYX1BBX1VBUlQgKyAoMHg0MDAwKkNPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUKQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi11YXJ0X3dyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7Ci0KLQlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7Ci0JKnB0ciA9IHZhbDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50Ci11YXJ0X3JkKHVuc2lnbmVkIGludCByZWcpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7Ci0KLQlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7Ci0JcmV0dXJuICpwdHI7Ci19Ci0KLS8qIHdlIGNhbiBkZWFsIHdpdGggdGhlIGNhc2UgdGhlIFVBUlRzIGFyZSBiZWluZyBydW4KLSAqIGluIEZJRk8gbW9kZSwgc28gdGhhdCB3ZSBkb24ndCBob2xkIHVwIG91ciBleGVjdXRpb24KLSAqIHdhaXRpbmcgZm9yIHR4IHRvIGhhcHBlbi4uLgotKi8KLQotc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCi17Ci0JaWYgKHVhcnRfcmQoUzNDMjQxMF9VRkNPTikgJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSB7Ci0JCWludCBsZXZlbDsKLQotCQl3aGlsZSAoMSkgewotCQkJbGV2ZWwgPSB1YXJ0X3JkKFMzQzI0MTBfVUZTVEFUKTsKLQkJCWxldmVsICY9IGZpZm9fbWFzazsKLQotCQkJaWYgKGxldmVsIDwgZmlmb19tYXgpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCS8qIG5vdCB1c2luZyBmaWZvcyAqLwotCi0JCXdoaWxlICgodWFydF9yZChTM0MyNDEwX1VUUlNUQVQpICYgUzNDMjQxMF9VVFJTVEFUX1RYRSkgIT0gUzNDMjQxMF9VVFJTVEFUX1RYRSkKLQkJCWJhcnJpZXIoKTsKLQl9Ci0KLQkvKiB3cml0ZSBieXRlIHRvIHRyYW5zbWlzc2lvbiByZWdpc3RlciAqLwotCXVhcnRfd3IoUzNDMjQxMF9VVFhILCBjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQotewotfQotCi0jZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCi0KLS8qIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRwotICoKLSAqIFNpbXBsZSBib290LXRpbWUgd2F0Y2hkb2cgc2V0dXAsIHRvIHJlYm9vdCB0aGUgc3lzdGVtIGlmIHRoZXJlIGlzCi0gKiBhbnkgcHJvYmxlbSB3aXRoIHRoZSBib290IHByb2Nlc3MKLSovCi0KLSNpZmRlZiBDT05GSUdfUzNDX0JPT1RfV0FUQ0hET0cKLQotI2RlZmluZSBXRE9HX0NPVU5UICgweGZmMDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF93ZG9nKHZvaWQpCi17Ci0JX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwotfQotCi1zdGF0aWMgdm9pZCBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KHZvaWQpCi17Ci0JX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1REQVQpOwotCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4ODApLCBTM0MyNDEwX1dUQ09OKTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpCi0jZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQKLQotc3RhdGljIHZvaWQgYXJjaF9kZWNvbXBfZXJyb3IoY29uc3QgY2hhciAqeCkKLXsKLQlwdXRzdHIoIlxuXG4iKTsKLQlwdXRzdHIoeCk7Ci0JcHV0c3RyKCJcblxuIC0tIFN5c3RlbSByZXNldHRpbmdcbiIpOwotCi0JX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVERBVCk7Ci0JX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVENOVCk7Ci0JX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFIHwgUzNDMjQxMF9XVENPTl9ESVYxMjggfCBTM0MyNDEwX1dUQ09OX1JTVEVOIHwgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDQwKSwgUzNDMjQxMF9XVENPTik7Ci0KLQl3aGlsZSgxKTsKLX0KLQotI2RlZmluZSBhcmNoX2Vycm9yIGFyY2hfZGVjb21wX2Vycm9yCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqZXJyKTsKLQotc3RhdGljIHZvaWQKLWFyY2hfZGVjb21wX3NldHVwKHZvaWQpCi17Ci0JLyogd2UgbWF5IG5lZWQgdG8gc2V0dXAgdGhlIHVhcnQocykgaGVyZSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcKLQkgKiBvbiBhbiBCQVNULi4uIHRoZSBCQVNUIHdpbGwgaGF2ZSBsZWZ0IHRoZSB1YXJ0cyBjb25maWd1cmVkCi0JICogYWZ0ZXIgY2FsbGluZyBsaW51eC4KLQkgKi8KLQotCWFyY2hfZGV0ZWN0X2NwdSgpOwotCWFyY2hfZGVjb21wX3dkb2dfc3RhcnQoKTsKLX0KLQotCi0jZW5kaWYgLyogX19BU01fUExBVF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmggYi9pbmNsdWRlL2FzbS1jcmlzL2VsZi5oCmluZGV4IDAwMWY2NGEuLmYwZDE3ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9lbGYuaApAQCAtODgsNiArODgsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCmluZGV4IDdlZmUxMDAuLmNlZTk3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmgKQEAgLTg4LDYgKzg4LDcgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk5CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE4CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTk1LDYgKzk2LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaCBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaAppbmRleCA5ZmI5NDZiLi43Mjc5ZWMwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKQEAgLTEzNyw2ICsxMzcsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmluZGV4IDdlYmNjNTYuLjM2MTA3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKaW5kZXggODM5YTJmYi4uNmM2MWMwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaApAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBfQVNNX1VOQUxJR05FRF9ICiAKICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogCiAjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCBlZGM2YmE4Li4wZjZkYWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAotCXByaW50aygiQlVHOiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsoIkJVRzogZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7IFwKIAlwYW5pYygiQlVHISIpOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDBmOTlhZDMuLjgxNzk3ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0zNSwxMSArMzUsMTcgQEAKICAqIEBsYWJlbDogZm9yIGRpYWdub3N0aWNzCiAgKiBAZGV2OiBvcHRpb25hbCBkZXZpY2UgcHJvdmlkaW5nIHRoZSBHUElPcwogICogQG93bmVyOiBoZWxwcyBwcmV2ZW50IHJlbW92YWwgb2YgbW9kdWxlcyBleHBvcnRpbmcgYWN0aXZlIEdQSU9zCisgKiBAcmVxdWVzdDogb3B0aW9uYWwgaG9vayBmb3IgY2hpcC1zcGVjaWZpYyBhY3RpdmF0aW9uLCBzdWNoIGFzCisgKgllbmFibGluZyBtb2R1bGUgcG93ZXIgYW5kIGNsb2NrOyBtYXkgc2xlZXAKKyAqIEBmcmVlOiBvcHRpb25hbCBob29rIGZvciBjaGlwLXNwZWNpZmljIGRlYWN0aXZhdGlvbiwgc3VjaCBhcworICoJZGlzYWJsaW5nIG1vZHVsZSBwb3dlciBhbmQgY2xvY2s7IG1heSBzbGVlcAogICogQGRpcmVjdGlvbl9pbnB1dDogY29uZmlndXJlcyBzaWduYWwgIm9mZnNldCIgYXMgaW5wdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBnZXQ6IHJldHVybnMgdmFsdWUgZm9yIHNpZ25hbCAib2Zmc2V0IjsgZm9yIG91dHB1dCBzaWduYWxzIHRoaXMKICAqCXJldHVybnMgZWl0aGVyIHRoZSB2YWx1ZSBhY3R1YWxseSBzZW5zZWQsIG9yIHplcm8KICAqIEBkaXJlY3Rpb25fb3V0cHV0OiBjb25maWd1cmVzIHNpZ25hbCAib2Zmc2V0IiBhcyBvdXRwdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBzZXQ6IGFzc2lnbnMgb3V0cHV0IHZhbHVlIGZvciBzaWduYWwgIm9mZnNldCIKKyAqIEB0b19pcnE6IG9wdGlvbmFsIGhvb2sgc3VwcG9ydGluZyBub24tc3RhdGljIGdwaW9fdG9faXJxKCkgbWFwcGluZ3M7CisgKglpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHNsZWVwCiAgKiBAZGJnX3Nob3c6IG9wdGlvbmFsIHJvdXRpbmUgdG8gc2hvdyBjb250ZW50cyBpbiBkZWJ1Z2ZzOyBkZWZhdWx0IGNvZGUKICAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgaXMgb21pdHRlZCwgYnV0IGN1c3RvbSBjb2RlIGNhbiBzaG93IGV4dHJhCiAgKglzdGF0ZSAoc3VjaCBhcyBwdWxsdXAvcHVsbGRvd24gY29uZmlndXJhdGlvbikuCkBAIC02MSwxMCArNjcsMTUgQEAKICAqIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgQGJhc2UgZnJvbSB0aGUgZ3BpbyBudW1iZXIuCiAgKi8KIHN0cnVjdCBncGlvX2NoaXAgewotCWNoYXIJCQkqbGFiZWw7CisJY29uc3QgY2hhcgkJKmxhYmVsOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCisJaW50CQkJKCpyZXF1ZXN0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwl2b2lkCQkJKCpmcmVlKShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwogCWludAkJCSgqZGlyZWN0aW9uX2lucHV0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKIAlpbnQJCQkoKmdldCkoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKQEAgLTczLDYgKzg0LDEwIEBACiAJCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSk7CiAJdm9pZAkJCSgqc2V0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpOworCisJaW50CQkJKCp0b19pcnEpKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCQl1bnNpZ25lZCBvZmZzZXQpOworCiAJdm9pZAkJCSgqZGJnX3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCQkJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogCWludAkJCWJhc2U7CkBAIC0xMTIsNiArMTI3LDcgQEAKIAogZXh0ZXJuIGludCBfX2dwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3Bpbyk7CiAKK2V4dGVybiBpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogI2lmZGVmIENPTkZJR19HUElPX1NZU0ZTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oCmluZGV4IDcxZWYzZjAuLjg5MDYxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaApAQCAtODQsMTIgKzg0LDEyIEBACiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCiAJewotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tb24pOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3llYXIpOworCQl0aW1lLT50bV9zZWMgPSBiY2QyYmluKHRpbWUtPnRtX3NlYyk7CisJCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4odGltZS0+dG1fbWluKTsKKwkJdGltZS0+dG1faG91ciA9IGJjZDJiaW4odGltZS0+dG1faG91cik7CisJCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKHRpbWUtPnRtX21kYXkpOworCQl0aW1lLT50bV9tb24gPSBiY2QyYmluKHRpbWUtPnRtX21vbik7CisJCXRpbWUtPnRtX3llYXIgPSBiY2QyYmluKHRpbWUtPnRtX3llYXIpOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KQEAgLTE1OSwxMiArMTU5LDEyIEBACiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkKIAkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQklOX1RPX0JDRChzZWMpOwotCQlCSU5fVE9fQkNEKG1pbik7Ci0JCUJJTl9UT19CQ0QoaHJzKTsKLQkJQklOX1RPX0JDRChkYXkpOwotCQlCSU5fVE9fQkNEKG1vbik7Ci0JCUJJTl9UT19CQ0QoeXJzKTsKKwkJc2VjID0gYmluMmJjZChzZWMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJZGF5ID0gYmluMmJjZChkYXkpOworCQltb24gPSBiaW4yYmNkKG1vbik7CisJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAl9CiAKIAlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDc0NDBhMGQuLjc0YzVmYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTI2OCw3ICsyNjgsMTUgQEAKIAlDUFVfRElTQ0FSRChpbml0LmRhdGEpCQkJCQkJXAogCUNQVV9ESVNDQVJEKGluaXQucm9kYXRhKQkJCQkJXAogCU1FTV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCi0JTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCisJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKKwlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZV9zdHJpbmdzKSA9IC47ICAgICAgICAgICAgICAgICAgXAorCSooX192ZXJib3NlX3N0cmluZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZV9zdHJpbmdzKSA9IC47ICAgICAgICAgICAgICAgICAgIFwKKwkuID0gQUxJR04oOCk7CQkJCQkJCVwKKwlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSooX192ZXJib3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdmVyYm9zZSkgPSAuOwogCiAjZGVmaW5lIElOSVRfVEVYVAkJCQkJCQlcCiAJKiguaW5pdC50ZXh0KQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC90aW1lci5oIGIvaW5jbHVkZS9hc20taDgzMDAvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWY4MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdGltZXIuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fSDgzMDBfVElNRVJfSAorI2RlZmluZSBfX0g4MzAwX1RJTUVSX0gKKwordm9pZCBoODMwMF90aW1lcl90aWNrKHZvaWQpOwordm9pZCBoODMwMF90aW1lcl9zZXR1cCh2b2lkKTsKK3ZvaWQgaDgzMDBfZ2V0dG9kKHVuc2lnbmVkIGludCAqeWVhciwgdW5zaWduZWQgaW50ICptb24sIHVuc2lnbmVkIGludCAqZGF5LAorCQkgICB1bnNpZ25lZCBpbnQgKmhvdXIsIHVuc2lnbmVkIGludCAqbWluLCB1bnNpZ25lZCBpbnQgKnNlYyk7CisKKyNkZWZpbmUgVElNRVJfRlJFUSAoQ09ORklHX0NQVV9DTE9DSyoxMDAwMCkgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KKworI2RlZmluZSBjYWxjX3BhcmFtKGNudCwgZGl2LCByYXRlLCBsaW1pdCkJCQlcCitkbyB7CQkJCQkJCQlcCisJY250ID0gVElNRVJfRlJFUSAvIEhaOwkJCQkJXAorCWZvciAoZGl2ID0gMDsgZGl2IDwgQVJSQVlfU0laRShkaXZpZGVfcmF0ZSk7IGRpdisrKSB7CVwKKwkJaWYgKHJhdGVbZGl2XSA9PSAwKQkJCQlcCisJCQljb250aW51ZTsJCQkJXAorCQlpZiAoKGNudCAvIHJhdGVbZGl2XSkgPiBsaW1pdCkJCQlcCisJCQlicmVhazsJCQkJCVwKKwl9CQkJCQkJCVwKKwlpZiAoZGl2ID09IEFSUkFZX1NJWkUoZGl2aWRlX3JhdGUpKQkJCVwKKwkJcGFuaWMoIlRpbWVyIGNvdW50ZXIgb3ZlcmZsb3ciKTsJCVwKKwljbnQgLz0gZGl2aWRlX3JhdGVbZGl2XTsJCQkJXAorfSB3aGlsZSgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmggYi9pbmNsdWRlL2FzbS1tMzJyL2VsZi5oCmluZGV4IDY3YmNkNzcuLjBjYzM0YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9lbGYuaApAQCAtMTI5LDYgKzEyOSw2IEBACiAgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZiAgLyogX0FTTV9NMzJSX19FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lbGYuaCBiL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKaW5kZXggMTRlYTQyMTUuLjBiMGY0OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9lbGYuaApAQCAtMTE0LDYgKzExNCw2IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAppbmRleCAxZGFmNmNiLi5iOTk2YTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKQEAgLTkyLDE1ICs5Miw2IEBACiAjZGVmaW5lIG91dHN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKICNlbmRpZgogCi0KLS8qIFE0MCBhbmQgQXRhcmkgaGF2ZSBieXRlc3dhcHBlZCBJREUgYnVzc2VzIGFuZCBzaW5jZSBtYW55IGludGVyZXN0aW5nCi0gKiB2YWx1ZXMgaW4gdGhlIGlkZW50aWZpY2F0aW9uIHN0cmluZyBhcmUgdGV4dCwgY2hhcnMgYW5kIHdvcmRzIHRoZXkKLSAqIGhhcHBlbmVkIHRvIGJlIGFsbW9zdCBjb3JyZWN0IHdpdGhvdXQgc3dhcHBpbmcuLiBIb3dldmVyICpfY2FwYWNpdHkKLSAqIGlzIG5lZWRlZCBmb3IgZHJpdmVzIG92ZXIgOCBHQi4gUlogKi8KLSNpZiBkZWZpbmVkKENPTkZJR19RNDApIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKQotI2RlZmluZSBNNjhLX0lERV9TV0FQVyAgKE1BQ0hfSVNfUTQwIHx8IE1BQ0hfSVNfQVRBUkkpCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUKICNkZWZpbmUgSURFX0FSQ0hfTE9DSwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKaW5kZXggYWJjMDAyNy4uYWYwZmRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaApAQCAtNTIsNSArNTIsNiBAQAogI2RlZmluZSBUSUZfREVMQVlFRF9UUkFDRQkxNAkvKiBzaW5nbGUgc3RlcCBhIHN5c2NhbGwgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMTUJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTYKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTcJLyogdGhyZWFkIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNlbmRpZgkvKiBfQVNNX002OEtfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9lbGYuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvZWxmLmgKaW5kZXggMjU2YTcwNC4uYmYwOWY4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2VsZi5oCkBAIC0xNDEsNyArMTQxLDcgQEAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKaW5kZXggZDBhNGE4Mi4uN2ZhNjc1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaApAQCAtMjM2LDcgKzIzNiw3IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoIlBBUklTQ1wwIikKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgXAogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYOyBcCiAJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlID0gREVGQVVMVF9NQVBfQkFTRTsgXAogCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKaW5kZXggYzI0NmVmNy4uODE3MDBhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaApAQCAtMTMsMTAgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBpZGVfcmVxdWVzdF9pcnEoaXJxLGhhbmQsZmxnLGRldixpZCkJcmVxdWVzdF9pcnEoKGlycSksKGhhbmQpLChmbGcpLChkZXYpLChpZCkpCi0jZGVmaW5lIGlkZV9mcmVlX2lycShpcnEsZGV2X2lkKQkJZnJlZV9pcnEoKGlycSksIChkZXZfaWQpKQotI2RlZmluZSBpZGVfcmVxdWVzdF9yZWdpb24oZnJvbSxleHRlbnQsbmFtZSkJcmVxdWVzdF9yZWdpb24oKGZyb20pLCAoZXh0ZW50KSwgKG5hbWUpKQotI2RlZmluZSBpZGVfcmVsZWFzZV9yZWdpb24oZnJvbSxleHRlbnQpCQlyZWxlYXNlX3JlZ2lvbigoZnJvbSksIChleHRlbnQpKQogLyogR2VuZXJpYyBJL08gYW5kIE1FTUlPIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KIAogI2RlZmluZSBfX2lkZV9pbnN3CWluc3cKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKaW5kZXggOWY4MTI3NC4uMDQwNzk1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgVElGXzMyQklUICAgICAgICAgICAgICAgNCAgICAgICAvKiAzMiBiaXQgYmluYXJ5ICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2F2ZWQgc2lnbmFsIG1hc2sgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJNwkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTY1LDYgKzY2LDcgQEAKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxIDw8IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfU0lHUEVORElORyB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLWkzODYuaAppbmRleCAyM2Q2ODkzLi5kMGRhOWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi1pMzg2LmgKQEAgLTg2LDcgKzg2LDcgQEAKIGV4dGVybiBjaGFyICogZWxmX2F1eF9wbGF0Zm9ybTsKICNkZWZpbmUgRUxGX1BMQVRGT1JNIChlbGZfYXV4X3BsYXRmb3JtKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBkbyB7IH0gd2hpbGUgKDApCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHZzeXNjYWxsX2VoZHI7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9lbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmggYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKaW5kZXggZDNiOTBiNy4uYWY5NDYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaApAQCAtNSw3ICs1LDcgQEAKIGV4dGVybiBsb25nIGVsZl9hdXhfaHdjYXA7CiAjZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2F1eF9od2NhcCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyA7IHdoaWxlKDApCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgZG8gOyB3aGlsZSgwKQogCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oCmluZGV4IDNiMmQ1MjIuLjZlOGE5MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYteDg2XzY0LmgKQEAgLTExNCw2ICsxMTQsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAieDg2XzY0IgogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIDsgd2hpbGUoMCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBkbyA7IHdoaWxlKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKaW5kZXggZTA3ZTcyOC4uNjIyNzRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJIAk1CiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTYKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk3CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE2CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQpAQCAtNzcsNSArNzgsNiBAQAogI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZWxmLmggYi9pbmNsdWRlL2FzbS14ODYvZWxmLmgKaW5kZXggNWM0NzQ1Yi4uMjZiYzE1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAJc2V0X2ZzKFVTRVJfRFMpOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJXAorI2RlZmluZSBDT01QQVRfU0VUX1BFUlNPTkFMSVRZKGV4KQkJCVwKIGRvIHsJCQkJCQkJXAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkJCQlcCiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCiAgICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHlfNjRiaXQoKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCiAKIC8qCiAgKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAppbmRleCBiZDJjNDRkLi5hYWU1MGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaApAQCAtMTcxLDcgKzE3MSw3IEBACiAJCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwogCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0KIAkJCQkJYXBpY2lkX2NsdXN0ZXIobmV3X2FwaWNpZCkpewotCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIixfX0ZVTkNUSU9OX18pOworCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIiwgX19mdW5jX18pOwogI2lmIGRlZmluZWQgQ09ORklHX0VTNzAwMF9DTFVTVEVSRURfQVBJQwogCQkJCXJldHVybiAweEZGOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oIGIvaW5jbHVkZS9hc20teDg2L2lvbW11LmgKaW5kZXggNTQ2YWQzMS4uOTYxZTc0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvbW11LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lvbW11LmgKQEAgLTgsNyArOCw3IEBACiBleHRlcm4gaW50IGlvbW11X2RldGVjdGVkOwogZXh0ZXJuIGludCBkbWFyX2Rpc2FibGVkOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIAogI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCiBleHRlcm4gaW50IGdhcnRfaW9tbXVfYXBlcnR1cmU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtLmggYi9pbmNsdWRlL2FzbS14ODYva3ZtLmgKaW5kZXggNzhlOTU0ZC4uYmEwZGQ3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2t2bS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9rdm0uaApAQCAtMjA4LDI2ICsyMDgsNCBAQAogc3RydWN0IGt2bV9waXRfc3RhdGUgewogCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107CiB9OwotCi0jZGVmaW5lIEtWTV9UUkNfSU5KX1ZJUlEgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMikKLSNkZWZpbmUgS1ZNX1RSQ19SRURFTElWRVJfRVZUICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAzKQotI2RlZmluZSBLVk1fVFJDX1BFTkRfSU5UUiAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDQpCi0jZGVmaW5lIEtWTV9UUkNfSU9fUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNSkKLSNkZWZpbmUgS1ZNX1RSQ19JT19XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA2KQotI2RlZmluZSBLVk1fVFJDX0NSX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDcpCi0jZGVmaW5lIEtWTV9UUkNfQ1JfV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwOCkKLSNkZWZpbmUgS1ZNX1RSQ19EUl9SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA5KQotI2RlZmluZSBLVk1fVFJDX0RSX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEEpCi0jZGVmaW5lIEtWTV9UUkNfTVNSX1JFQUQgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQikKLSNkZWZpbmUgS1ZNX1RSQ19NU1JfV1JJVEUgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBDKQotI2RlZmluZSBLVk1fVFJDX0NQVUlEICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEQpCi0jZGVmaW5lIEtWTV9UUkNfSU5UUiAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRSkKLSNkZWZpbmUgS1ZNX1RSQ19OTUkgICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBGKQotI2RlZmluZSBLVk1fVFJDX1ZNTUNBTEwgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTApCi0jZGVmaW5lIEtWTV9UUkNfSExUICAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMSkKLSNkZWZpbmUgS1ZNX1RSQ19DTFRTICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEyKQotI2RlZmluZSBLVk1fVFJDX0xNU1cgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTMpCi0jZGVmaW5lIEtWTV9UUkNfQVBJQ19BQ0NFU1MgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNCkKLSNkZWZpbmUgS1ZNX1RSQ19URFBfRkFVTFQgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE1KQotCiAjZW5kaWYgLyogQVNNX1g4Nl9fS1ZNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oIGIvaW5jbHVkZS9hc20teDg2L2t2bV9ob3N0LmgKaW5kZXggNjk3OTQ1NC4uNDExZmI4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2t2bV9ob3N0LmgKQEAgLTU3LDYgKzU3LDEwIEBACiAjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UgKEtWTV9IUEFHRV9TSVpFIC8gUEFHRV9TSVpFKQogCiAjZGVmaW5lIERFX1ZFQ1RPUiAwCisjZGVmaW5lIERCX1ZFQ1RPUiAxCisjZGVmaW5lIEJQX1ZFQ1RPUiAzCisjZGVmaW5lIE9GX1ZFQ1RPUiA0CisjZGVmaW5lIEJSX1ZFQ1RPUiA1CiAjZGVmaW5lIFVEX1ZFQ1RPUiA2CiAjZGVmaW5lIE5NX1ZFQ1RPUiA3CiAjZGVmaW5lIERGX1ZFQ1RPUiA4CkBAIC02NSw2ICs2OSw3IEBACiAjZGVmaW5lIFNTX1ZFQ1RPUiAxMgogI2RlZmluZSBHUF9WRUNUT1IgMTMKICNkZWZpbmUgUEZfVkVDVE9SIDE0CisjZGVmaW5lIE1GX1ZFQ1RPUiAxNgogI2RlZmluZSBNQ19WRUNUT1IgMTgKIAogI2RlZmluZSBTRUxFQ1RPUl9USV9NQVNLICgxIDw8IDIpCkBAIC04OSw3ICs5NCw3IEBACiBzdHJ1Y3Qga3ZtX3ZjcHU7CiBzdHJ1Y3Qga3ZtOwogCi1lbnVtIHsKK2VudW0ga3ZtX3JlZyB7CiAJVkNQVV9SRUdTX1JBWCA9IDAsCiAJVkNQVV9SRUdTX1JDWCA9IDEsCiAJVkNQVV9SRUdTX1JEWCA9IDIsCkBAIC0xMDgsNiArMTEzLDcgQEAKIAlWQ1BVX1JFR1NfUjE0ID0gMTQsCiAJVkNQVV9SRUdTX1IxNSA9IDE1LAogI2VuZGlmCisJVkNQVV9SRUdTX1JJUCwKIAlOUl9WQ1BVX1JFR1MKIH07CiAKQEAgLTE4OSwxMCArMTk1LDIwIEBACiAJCQkJICAgICovCiAJaW50IG11bHRpbWFwcGVkOyAgICAgICAgIC8qIE1vcmUgdGhhbiBvbmUgcGFyZW50X3B0ZT8gKi8KIAlpbnQgcm9vdF9jb3VudDsgICAgICAgICAgLyogQ3VycmVudGx5IHNlcnZpbmcgYXMgYWN0aXZlIHJvb3QgKi8KKwlib29sIHVuc3luYzsKKwlib29sIHVuc3luY19jaGlsZHJlbjsKIAl1bmlvbiB7CiAJCXU2NCAqcGFyZW50X3B0ZTsgICAgICAgICAgICAgICAvKiAhbXVsdGltYXBwZWQgKi8KIAkJc3RydWN0IGhsaXN0X2hlYWQgcGFyZW50X3B0ZXM7IC8qIG11bHRpbWFwcGVkLCBrdm1fcHRlX2NoYWluICovCiAJfTsKKwlERUNMQVJFX0JJVE1BUCh1bnN5bmNfY2hpbGRfYml0bWFwLCA1MTIpOworfTsKKworc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIHsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbGVuOworCXVuc2lnbmVkIHByb2Nlc3NlZDsKKwljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOwogfTsKIAogLyoKQEAgLTIwNyw2ICsyMjMsOSBAQAogCWdwYV90ICgqZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOwogCXZvaWQgKCpwcmVmZXRjaF9wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlKTsKKwlpbnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisJdm9pZCAoKmludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOwogCWhwYV90IHJvb3RfaHBhOwogCWludCByb290X2xldmVsOwogCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKQEAgLTIxOSw4ICsyMzgsMTMgQEAKIAlpbnQgaW50ZXJydXB0X3dpbmRvd19vcGVuOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N1bW1hcnk7IC8qIGJpdCB2ZWN0b3I6IDEgcGVyIHdvcmQgaW4gaXJxX3BlbmRpbmcgKi8KIAlERUNMQVJFX0JJVE1BUChpcnFfcGVuZGluZywgS1ZNX05SX0lOVEVSUlVQVFMpOwotCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOyAvKiBmb3IgcnNwOiB2Y3B1X2xvYWRfcnNwX3JpcCgpICovCi0JdW5zaWduZWQgbG9uZyByaXA7ICAgICAgLyogbmVlZHMgdmNwdV9sb2FkX3JzcF9yaXAoKSAqLworCS8qCisJICogcmlwIGFuZCByZWdzIGFjY2Vzc2VzIG11c3QgZ28gdGhyb3VnaAorCSAqIGt2bV97cmVnaXN0ZXIscmlwfV97cmVhZCx3cml0ZX0gZnVuY3Rpb25zLgorCSAqLworCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOworCXUzMiByZWdzX2F2YWlsOworCXUzMiByZWdzX2RpcnR5OwogCiAJdW5zaWduZWQgbG9uZyBjcjA7CiAJdW5zaWduZWQgbG9uZyBjcjI7CkBAIC0yMzcsNiArMjYxLDkgQEAKIAlib29sIHRwcl9hY2Nlc3NfcmVwb3J0aW5nOwogCiAJc3RydWN0IGt2bV9tbXUgbW11OworCS8qIG9ubHkgbmVlZGVkIGluIGt2bV9wdl9tbXVfb3AoKSBwYXRoLCBidXQgaXQncyBob3Qgc28KKwkgKiBwdXQgaXQgaGVyZSB0byBhdm9pZCBhbGxvY2F0aW9uICovCisJc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIG1tdV9vcF9idWZmZXI7CiAKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X3B0ZV9jaGFpbl9jYWNoZTsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X3JtYXBfZGVzY19jYWNoZTsKQEAgLTI2OSw2ICsyOTYsMTEgQEAKIAkJdTMyIGVycm9yX2NvZGU7CiAJfSBleGNlcHRpb247CiAKKwlzdHJ1Y3Qga3ZtX3F1ZXVlZF9pbnRlcnJ1cHQgeworCQlib29sIHBlbmRpbmc7CisJCXU4IG5yOworCX0gaW50ZXJydXB0OworCiAJc3RydWN0IHsKIAkJaW50IGFjdGl2ZTsKIAkJdTggc2F2ZV9pb3BsOwpAQCAtMjk0LDYgKzMyNiw3IEBACiAJc3RydWN0IHBhZ2UgKnRpbWVfcGFnZTsKIAogCWJvb2wgbm1pX3BlbmRpbmc7CisJYm9vbCBubWlfaW5qZWN0ZWQ7CiAKIAl1NjQgbXRyclsweDEwMF07CiB9OwpAQCAtMzE2LDkgKzM0OSwxMiBAQAogCSAqIEhhc2ggdGFibGUgb2Ygc3RydWN0IGt2bV9tbXVfcGFnZS4KIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9tbXVfcGFnZXM7CisJc3RydWN0IGxpc3RfaGVhZCBhc3NpZ25lZF9kZXZfaGVhZDsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmludGVsX2lvbW11X2RvbWFpbjsKIAlzdHJ1Y3Qga3ZtX3BpYyAqdnBpYzsKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYzsKIAlzdHJ1Y3Qga3ZtX3BpdCAqdnBpdDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBpcnFfYWNrX25vdGlmaWVyX2xpc3Q7CiAKIAlpbnQgcm91bmRfcm9iaW5fcHJldl92Y3B1OwogCXVuc2lnbmVkIGludCB0c3NfYWRkcjsKQEAgLTMzOCw2ICszNzQsNyBAQAogCXUzMiBtbXVfZmxvb2RlZDsKIAl1MzIgbW11X3JlY3ljbGVkOwogCXUzMiBtbXVfY2FjaGVfbWlzczsKKwl1MzIgbW11X3Vuc3luYzsKIAl1MzIgcmVtb3RlX3RsYl9mbHVzaDsKIAl1MzIgbHBhZ2VzOwogfTsKQEAgLTM2NCw2ICs0MDEsNyBAQAogCXUzMiBpbnNuX2VtdWxhdGlvbjsKIAl1MzIgaW5zbl9lbXVsYXRpb25fZmFpbDsKIAl1MzIgaHlwZXJjYWxsczsKKwl1MzIgaXJxX2luamVjdGlvbnM7CiB9OwogCiBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSB7CkBAIC00MTQsOCArNDUyLDcgQEAKIAl1bnNpZ25lZCBsb25nICgqZ2V0X2RyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7CiAJdm9pZCAoKnNldF9kcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCiAJCSAgICAgICBpbnQgKmV4Y2VwdGlvbik7Ci0Jdm9pZCAoKmNhY2hlX3JlZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKmRlY2FjaGVfcmVncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwl2b2lkICgqY2FjaGVfcmVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpzZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKTsKIApAQCAtNTI4LDYgKzU2NSw4IEBACiB2b2lkIGt2bV9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IyLAogCQkJICAgdTMyIGVycm9yX2NvZGUpOwogCit2b2lkIGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CisKIHZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CkBAIC01NTAsMTIgKzU4OSwxNCBAQAogdm9pZCBfX2t2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQga3ZtX21tdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9tbXVfdW5sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV9tbXVfc3luY19yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGludCBrdm1fZml4X2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgZXJyb3JfY29kZSk7Cit2b2lkIGt2bV9tbXVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAogdm9pZCBrdm1fZW5hYmxlX3RkcCh2b2lkKTsKIHZvaWQga3ZtX2Rpc2FibGVfdGRwKHZvaWQpOwpAQCAtNjg2LDMzICs3MjcsNiBAQAogCVRBU0tfU1dJVENIX0dBVEUgPSAzLAogfTsKIAotI2RlZmluZSBLVk1UUkFDRV81RChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgNSwgZDEsIGQyLCBkMywgZDQsIGQ1KQotI2RlZmluZSBLVk1UUkFDRV80RChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIGQ0LCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCA0LCBkMSwgZDIsIGQzLCBkNCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfM0QoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCAzLCBkMSwgZDIsIGQzLCAwLCAwKQotI2RlZmluZSBLVk1UUkFDRV8yRChldnQsIHZjcHUsIGQxLCBkMiwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMiwgZDEsIGQyLCAwLCAwLCAwKQotI2RlZmluZSBLVk1UUkFDRV8xRChldnQsIHZjcHUsIGQxLCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCAxLCBkMSwgMCwgMCwgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMEQoZXZ0LCB2Y3B1LCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCAwLCAwLCAwLCAwLCAwLCAwKQotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0jIGRlZmluZSBLVk1fRVhfRU5UUlkgIi5xdWFkIgotIyBkZWZpbmUgS1ZNX0VYX1BVU0ggInB1c2hxIgotI2Vsc2UKLSMgZGVmaW5lIEtWTV9FWF9FTlRSWSAiLmxvbmciCi0jIGRlZmluZSBLVk1fRVhfUFVTSCAicHVzaGwiCi0jZW5kaWYKLQogLyoKICAqIEhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgbWF5IGZhdWx0IGlmIGEKICAqIHJlYm9vdCB0dXJucyBvZmYgdmlydHVhbGl6YXRpb24gd2hpbGUgcHJvY2Vzc2VzIGFyZSBydW5uaW5nLgpAQCAtNzI0LDExICs3MzgsMTEgQEAKIAkiNjY2OiAiIGluc24gIlxuXHQiIFwKIAkiLnB1c2hzZWN0aW9uIC5maXh1cCwgXCJheFwiIFxuIiBcCiAJIjY2NzogXG5cdCIgXAotCUtWTV9FWF9QVVNIICIgJDY2NmIgXG5cdCIgXAorCV9fQVNNX1NJWkUocHVzaCkgIiAkNjY2YiBcblx0IgkgICAgICBcCiAJImptcCBrdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdCBcblx0IiBcCiAJIi5wb3BzZWN0aW9uIFxuXHQiIFwKIAkiLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiIFxuXHQiIFwKLQlLVk1fRVhfRU5UUlkgIiA2NjZiLCA2NjdiIFxuXHQiIFwKKwlfQVNNX1BUUiAiIDY2NmIsIDY2N2IgXG5cdCIgXAogCSIucG9wc2VjdGlvbiIKIAogI2RlZmluZSBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oIGIvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCmluZGV4IDBiYjQzMzAuLmRhYmQxMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKQEAgLTE3OCw2ICsxNzgsOSBAQAogI2RlZmluZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTgkJMHgwMDAwMDAyYQogI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wgICAgICAgIDB4MDAwMDAwM2EKIAorI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfTE9DS0VECQkoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQJKDE8PDIpCisKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0UJCTB4MDAwMDAwMWIKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQlNQCQkoMTw8OCkKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFCSgxPDwxMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oCmluZGV4IGU4ZDgwZDEuLmJkZjVkYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaApAQCAtMzksNyArMzksNiBAQAogdHlwZWRlZiB1NjQJcHVkdmFsX3Q7CiB0eXBlZGVmIHU2NAlwZ2R2YWxfdDsKIHR5cGVkZWYgdTY0CXBncHJvdHZhbF90OwotdHlwZWRlZiB1NjQJcGh5c19hZGRyX3Q7CiAKIHR5cGVkZWYgdW5pb24gewogCXN0cnVjdCB7CkBAIC02MCw3ICs1OSw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGh5c19hZGRyX3Q7CiAKIHR5cGVkZWYgdW5pb24gewogCXB0ZXZhbF90IHB0ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvcGFnZV82NC5oCmluZGV4IDVlNjRhY2YuLjQ5MzgwYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaApAQCAtNzksNyArNzksNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB1ZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBnZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBncHJvdHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBoeXNfYWRkcl90OwogCiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCmluZGV4IDE4MmY5ZDQuLjg4YTUzYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaApAQCAtMTQ4LDggKzE0OCwxMyBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9JREVOVF9MQVJHRV9FWEVDCV9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwogI2Vsc2UKKy8qCisgKiBGb3IgUERFX0lERU5UX0FUVFIgaW5jbHVkZSBVU0VSIGJpdC4gQXMgdGhlIFBERSBhbmQgUFRFIHByb3RlY3Rpb24KKyAqIGJpdHMgYXJlIGNvbWJpbmVkLCB0aGlzIHdpbGwgYWxvdyB1c2VyIHRvIGFjY2VzcyB0aGUgaGlnaCBhZGRyZXNzIG1hcHBlZAorICogVkRTTyBpbiB0aGUgcHJlc2VuY2Ugb2YgQ09ORklHX0NPTVBBVF9WRFNPCisgKi8KICNkZWZpbmUgUFRFX0lERU5UX0FUVFIJIDB4MDAzCQkvKiBQUkVTRU5UK1JXICovCi0jZGVmaW5lIFBERV9JREVOVF9BVFRSCSAweDA2MwkJLyogUFJFU0VOVCtSVytESVJUWStBQ0NFU1NFRCAqLworI2RlZmluZSBQREVfSURFTlRfQVRUUgkgMHgwNjcJCS8qIFBSRVNFTlQrUlcrVVNFUitESVJUWStBQ0NFU1NFRCAqLwogI2RlZmluZSBQR0RfSURFTlRfQVRUUgkgMHgwMDEJCS8qIFBSRVNFTlQgKG5vIG90aGVyIGF0dHJpYnV0ZXMpICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3B2Y2xvY2suaCBiL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmgKaW5kZXggMWEzOGY2OC4uYWQyOWUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3B2Y2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay5oCkBAIC02LDYgKzYsNyBAQAogCiAvKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgZm9yIHhlbiBhbmQga3ZtIHB2IGNsb2NrIHNvdXJjZXMgKi8KIGN5Y2xlX3QgcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmMpOwordW5zaWduZWQgbG9uZyBwdmNsb2NrX3RzY19raHooc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYyk7CiB2b2lkIHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2FsbCwKIAkJCSAgICBzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqdmNwdSwKIAkJCSAgICBzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKaW5kZXggYzViMmU0Yi4uMzk0YjAwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKQEAgLTE2MCw3ICsxNjAsNyBAQAogCQkJaW50IG5ld19hcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKIAkJCWlmIChhcGljaWRfY2x1c3RlcihhcGljaWQpICE9CiAJCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKLQkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsX19GVU5DVElPTl9fKTsKKwkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gMHhGRjsKIAkJCX0KIAkJCWFwaWNpZCA9IGFwaWNpZCB8IG5ld19hcGljaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCmluZGV4IGM1MDE4NWQuLmQ1ZWFkYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCkBAIC03NiwxMyArNzYsMTMgQEAKIHN0YXRpYyBpbmxpbmUgeG1hZGRyX3QgcGh5c190b19tYWNoaW5lKHhwYWRkcl90IHBoeXMpCiB7CiAJdW5zaWduZWQgb2Zmc2V0ID0gcGh5cy5wYWRkciAmIH5QQUdFX01BU0s7Ci0JcmV0dXJuIFhNQUREUihQRk5fUEhZUygodTY0KXBmbl90b19tZm4oUEZOX0RPV04ocGh5cy5wYWRkcikpKSB8IG9mZnNldCk7CisJcmV0dXJuIFhNQUREUihQRk5fUEhZUyhwZm5fdG9fbWZuKFBGTl9ET1dOKHBoeXMucGFkZHIpKSkgfCBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHhwYWRkcl90IG1hY2hpbmVfdG9fcGh5cyh4bWFkZHJfdCBtYWNoaW5lKQogewogCXVuc2lnbmVkIG9mZnNldCA9IG1hY2hpbmUubWFkZHIgJiB+UEFHRV9NQVNLOwotCXJldHVybiBYUEFERFIoUEZOX1BIWVMoKHU2NCltZm5fdG9fcGZuKFBGTl9ET1dOKG1hY2hpbmUubWFkZHIpKSkgfCBvZmZzZXQpOworCXJldHVybiBYUEFERFIoUEZOX1BIWVMobWZuX3RvX3BmbihQRk5fRE9XTihtYWNoaW5lLm1hZGRyKSkpIHwgb2Zmc2V0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaAppbmRleCBjYTZlNTEwLi5jM2Y1M2U3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oCkBAIC0xODksNyArMTg5LDcgQEAKICNlbmRpZgogfSBlbGZfeHRyZWdzX3Q7CiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKaW5kZXggN2U0MTMxZC4uMGY0ZmUxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogI2RlZmluZSBUSUZfTUVNRElFCQk1CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNgkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNwkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQpAQCAtMTQyLDYgKzE0Myw3IEBACiAjZGVmaW5lIF9USUZfSVJFVAkJKDE8PFRJRl9JUkVUKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDBGRkZGCS8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm0uaCBiL2luY2x1ZGUvZHJtL2RybS5oCmluZGV4IDM4ZDNjNmIuLmY0NmJhNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybS5oCkBAIC0zNiw3ICszNiw2IEBACiAjaWZuZGVmIF9EUk1fSF8KICNkZWZpbmUgX0RSTV9IXwogCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CQkvKiBGb3IgX0lPKiBtYWNyb3MgKi8KQEAgLTQ2LDIyICs0NSw2IEBACiAjZGVmaW5lIERSTV9JT0NfV1JJVEUJCV9JT0NfV1JJVEUKICNkZWZpbmUgRFJNX0lPQ19SRUFEV1JJVEUJX0lPQ19SRUFEfF9JT0NfV1JJVEUKICNkZWZpbmUgRFJNX0lPQyhkaXIsIGdyb3VwLCBuciwgc2l6ZSkgX0lPQyhkaXIsIGdyb3VwLCBuciwgc2l6ZSkKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKElOX01PRFVMRSkKLS8qIFByZXZlbnQgbmFtZSBjb2xsaXNpb24gd2hlbiBpbmNsdWRpbmcgc3lzL2lvY2NvbS5oICovCi0jdW5kZWYgaW9jdGwKLSNpbmNsdWRlIDxzeXMvaW9jY29tLmg+Ci0jZGVmaW5lIGlvY3RsKGEsYixjKQkJeGY4NmlvY3RsKGEsYixjKQotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvaW9jY29tLmg+Ci0jZW5kaWYJCQkJLyogX19GcmVlQlNEX18gJiYgeGY4NmlvY3RsICovCi0jZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJKChuKSAmIDB4ZmYpCi0jZGVmaW5lIERSTV9JT0NfVk9JRAkJSU9DX1ZPSUQKLSNkZWZpbmUgRFJNX0lPQ19SRUFECQlJT0NfT1VUCi0jZGVmaW5lIERSTV9JT0NfV1JJVEUJCUlPQ19JTgotI2RlZmluZSBEUk1fSU9DX1JFQURXUklURQlJT0NfSU5PVVQKLSNkZWZpbmUgRFJNX0lPQyhkaXIsIGdyb3VwLCBuciwgc2l6ZSkgX0lPQyhkaXIsIGdyb3VwLCBuciwgc2l6ZSkKLSNlbmRpZgogCiAjZGVmaW5lIERSTV9NQUpPUiAgICAgICAyMjYKICNkZWZpbmUgRFJNX01BWF9NSU5PUiAgIDE1CkBAIC00NzEsNiArNDU0LDcgQEAKIGVudW0gZHJtX3ZibGFua19zZXFfdHlwZSB7CiAJX0RSTV9WQkxBTktfQUJTT0xVVEUgPSAweDAsCS8qKjwgV2FpdCBmb3Igc3BlY2lmaWMgdmJsYW5rIHNlcXVlbmNlIG51bWJlciAqLwogCV9EUk1fVkJMQU5LX1JFTEFUSVZFID0gMHgxLAkvKio8IFdhaXQgZm9yIGdpdmVuIG51bWJlciBvZiB2YmxhbmtzICovCisJX0RSTV9WQkxBTktfRkxJUCA9IDB4ODAwMDAwMCwgICAvKio8IFNjaGVkdWxlZCBidWZmZXIgc3dhcCBzaG91bGQgZmxpcCAqLwogCV9EUk1fVkJMQU5LX05FWFRPTk1JU1MgPSAweDEwMDAwMDAwLAkvKio8IElmIG1pc3NlZCwgd2FpdCBmb3IgbmV4dCB2YmxhbmsgKi8KIAlfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPSAweDIwMDAwMDAwLAkvKio8IFNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KIAlfRFJNX1ZCTEFOS19TSUdOQUwgPSAweDQwMDAwMDAwCS8qKjwgU2VuZCBzaWduYWwgaW5zdGVhZCBvZiBibG9ja2luZyAqLwpAQCAtNTAzLDYgKzQ4NywxOSBAQAogCXN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVwbHkgcmVwbHk7CiB9OwogCisjZGVmaW5lIF9EUk1fUFJFX01PREVTRVQgMQorI2RlZmluZSBfRFJNX1BPU1RfTU9ERVNFVCAyCisKKy8qKgorICogRFJNX0lPQ1RMX01PREVTRVRfQ1RMIGlvY3RsIGFyZ3VtZW50IHR5cGUKKyAqCisgKiBcc2EgZHJtTW9kZXNldEN0bCgpLgorICovCitzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsIHsKKwl1aW50MzJfdCBjcnRjOworCXVpbnQzMl90IGNtZDsKK307CisKIC8qKgogICogRFJNX0lPQ1RMX0FHUF9FTkFCTEUgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqCkBAIC01NzMsNiArNTcwLDM0IEBACiAJaW50IGRybV9kZF9taW5vcjsKIH07CiAKKy8qKiBEUk1fSU9DVExfR0VNX0NMT1NFIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX2Nsb3NlIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgY2xvc2VkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCisvKiogRFJNX0lPQ1RMX0dFTV9GTElOSyBpb2N0bCBhcmd1bWVudCB0eXBlICovCitzdHJ1Y3QgZHJtX2dlbV9mbGluayB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBuYW1lZCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBSZXR1cm5lZCBnbG9iYWwgbmFtZSAqLworCXVpbnQzMl90IG5hbWU7Cit9OworCisvKiogRFJNX0lPQ1RMX0dFTV9PUEVOIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX29wZW4geworCS8qKiBOYW1lIG9mIG9iamVjdCBiZWluZyBvcGVuZWQgKi8KKwl1aW50MzJfdCBuYW1lOworCisJLyoqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBSZXR1cm5lZCBzaXplIG9mIHRoZSBvYmplY3QgKi8KKwl1aW50NjRfdCBzaXplOworfTsKKwogI2RlZmluZSBEUk1fSU9DVExfQkFTRQkJCSdkJwogI2RlZmluZSBEUk1fSU8obnIpCQkJX0lPKERSTV9JT0NUTF9CQVNFLG5yKQogI2RlZmluZSBEUk1fSU9SKG5yLHR5cGUpCQlfSU9SKERSTV9JT0NUTF9CQVNFLG5yLHR5cGUpCkBAIC01ODcsNiArNjEyLDEwIEBACiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfQ0xJRU5UICAgICAgICAgICAgRFJNX0lPV1IoMHgwNSwgc3RydWN0IGRybV9jbGllbnQpCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfU1RBVFMgICAgICAgICAgICAgRFJNX0lPUiggMHgwNiwgc3RydWN0IGRybV9zdGF0cykKICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9WRVJTSU9OCQlEUk1fSU9XUigweDA3LCBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERVNFVF9DVEwgICAgICAgICAgIERSTV9JT1coMHgwOCwgc3RydWN0IGRybV9tb2Rlc2V0X2N0bCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9DTE9TRQkJRFJNX0lPVyAoMHgwOSwgc3RydWN0IGRybV9nZW1fY2xvc2UpCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fRkxJTksJCURSTV9JT1dSKDB4MGEsIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX09QRU4JCURSTV9JT1dSKDB4MGIsIHN0cnVjdCBkcm1fZ2VtX29wZW4pCiAKICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9VTklRVUUJCURSTV9JT1coIDB4MTAsIHN0cnVjdCBkcm1fdW5pcXVlKQogI2RlZmluZSBEUk1fSU9DVExfQVVUSF9NQUdJQwkJRFJNX0lPVyggMHgxMSwgc3RydWN0IGRybV9hdXRoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDFjMWIxM2UuLjU5Yzc5NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2RlZmluZSBEUklWRVJfRE1BX1FVRVVFICAgMHgyMDAKICNkZWZpbmUgRFJJVkVSX0ZCX0RNQSAgICAgIDB4NDAwCiAjZGVmaW5lIERSSVZFUl9JUlFfVkJMMiAgICAweDgwMAorI2RlZmluZSBEUklWRVJfR0VNICAgICAgICAgMHgxMDAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBCZWdpbiB0aGUgRFJNLi4uICovCkBAIC0zODcsNiArMzg4LDEwIEBACiAJc3RydWN0IGRybV9taW5vciAqbWlub3I7CiAJaW50IHJlbW92ZV9hdXRoX29uX2Nsb3NlOwogCXVuc2lnbmVkIGxvbmcgbG9ja19jb3VudDsKKwkvKiogTWFwcGluZyBvZiBtbSBvYmplY3QgaGFuZGxlcyB0byBvYmplY3QgcG9pbnRlcnMuICovCisJc3RydWN0IGlkciBvYmplY3RfaWRyOworCS8qKiBMb2NrIGZvciBzeW5jaHJvbml6YXRpb24gb2YgYWNjZXNzIHRvIG9iamVjdF9pZHIuICovCisJc3BpbmxvY2tfdCB0YWJsZV9sb2NrOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCXZvaWQgKmRyaXZlcl9wcml2OwogfTsKQEAgLTU1OCw2ICs1NjMsNTYgQEAKIH07CiAKIC8qKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZHJtX21tIG1lbW9yeSBvYmplY3QsIHdoaWNoIHdpbGwgYmUgdXNlZCBieSB0aGUKKyAqIERSTSBmb3IgaXRzIGJ1ZmZlciBvYmplY3RzLgorICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgeworCS8qKiBSZWZlcmVuY2UgY291bnQgb2YgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKworCS8qKiBIYW5kbGUgY291bnQgb2YgdGhpcyBvYmplY3QuIEVhY2ggaGFuZGxlIGFsc28gaG9sZHMgYSByZWZlcmVuY2UgKi8KKwlzdHJ1Y3Qga3JlZiBoYW5kbGVjb3VudDsKKworCS8qKiBSZWxhdGVkIGRybSBkZXZpY2UgKi8KKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJLyoqIEZpbGUgcmVwcmVzZW50aW5nIHRoZSBzaG1lbSBzdG9yYWdlICovCisJc3RydWN0IGZpbGUgKmZpbHA7CisKKwkvKioKKwkgKiBTaXplIG9mIHRoZSBvYmplY3QsIGluIGJ5dGVzLiAgSW1tdXRhYmxlIG92ZXIgdGhlIG9iamVjdCdzCisJICogbGlmZXRpbWUuCisJICovCisJc2l6ZV90IHNpemU7CisKKwkvKioKKwkgKiBHbG9iYWwgbmFtZSBmb3IgdGhpcyBvYmplY3QsIHN0YXJ0cyBhdCAxLiAwIG1lYW5zIHVubmFtZWQuCisJICogQWNjZXNzIGlzIGNvdmVyZWQgYnkgdGhlIG9iamVjdF9uYW1lX2xvY2sgaW4gdGhlIHJlbGF0ZWQgZHJtX2RldmljZQorCSAqLworCWludCBuYW1lOworCisJLyoqCisJICogTWVtb3J5IGRvbWFpbnMuIFRoZXNlIG1vbml0b3Igd2hpY2ggY2FjaGVzIGNvbnRhaW4gcmVhZC93cml0ZSBkYXRhCisJICogcmVsYXRlZCB0byB0aGUgb2JqZWN0LiBXaGVuIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgc2V0IG9mIGRvbWFpbnMKKwkgKiB0byBhbm90aGVyLCB0aGUgZHJpdmVyIGlzIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjYWNoZXMgYXJlIHN1aXRhYmx5CisJICogZmx1c2hlZCBhbmQgaW52YWxpZGF0ZWQKKwkgKi8KKwl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJdWludDMyX3Qgd3JpdGVfZG9tYWluOworCisJLyoqCisJICogV2hpbGUgdmFsaWRhdGluZyBhbiBleGVjIG9wZXJhdGlvbiwgdGhlCisJICogbmV3IHJlYWQvd3JpdGUgZG9tYWluIHZhbHVlcyBhcmUgY29tcHV0ZWQgaGVyZS4KKwkgKiBUaGV5IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIGFib3ZlIHZhbHVlcworCSAqIGF0IHRoZSBwb2ludCB0aGF0IGFueSBjYWNoZSBmbHVzaGluZyBvY2N1cnMKKwkgKi8KKwl1aW50MzJfdCBwZW5kaW5nX3JlYWRfZG9tYWluczsKKwl1aW50MzJfdCBwZW5kaW5nX3dyaXRlX2RvbWFpbjsKKworCXZvaWQgKmRyaXZlcl9wcml2YXRlOworfTsKKworLyoqCiAgKiBEUk0gZHJpdmVyIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50IHRoZSBjb21tb24gY29kZSBmb3IKICAqIGEgZmFtaWx5IG9mIGNhcmRzLiBUaGVyZSB3aWxsIG9uZSBkcm1fZGV2aWNlIGZvciBlYWNoIGNhcmQgcHJlc2VudAogICogaW4gdGhpcyBmYW1pbHkKQEAgLTU4MCwxMSArNjM1LDU0IEBACiAJaW50ICgqa2VybmVsX2NvbnRleHRfc3dpdGNoKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG9sZCwKIAkJCQkgICAgICBpbnQgbmV3KTsKIAl2b2lkICgqa2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jaykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotCWludCAoKnZibGFua193YWl0KSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci0JaW50ICgqdmJsYW5rX3dhaXQyKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CiAJaW50ICgqZHJpX2xpYnJhcnlfbmFtZSkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmJ1Zik7CiAKIAkvKioKKwkgKiBnZXRfdmJsYW5rX2NvdW50ZXIgLSBnZXQgcmF3IGhhcmR3YXJlIHZibGFuayBjb3VudGVyCisJICogQGRldjogRFJNIGRldmljZQorCSAqIEBjcnRjOiBjb3VudGVyIHRvIGZldGNoCisJICoKKwkgKiBEcml2ZXIgY2FsbGJhY2sgZm9yIGZldGNoaW5nIGEgcmF3IGhhcmR3YXJlIHZibGFuayBjb3VudGVyCisJICogZm9yIEBjcnRjLiAgSWYgYSBkZXZpY2UgZG9lc24ndCBoYXZlIGEgaGFyZHdhcmUgY291bnRlciwgdGhlCisJICogZHJpdmVyIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSB2YWx1ZSBvZiBkcm1fdmJsYW5rX2NvdW50IGFuZAorCSAqIG1ha2UgdGhlIGVuYWJsZV92YmxhbmsoKSBhbmQgZGlzYWJsZV92YmxhbmsoKSBob29rcyBpbnRvIG5vLW9wcywKKwkgKiBsZWF2aW5nIGludGVycnVwdHMgZW5hYmxlZCBhdCBhbGwgdGltZXMuCisJICoKKwkgKiBXcmFwYXJvdW5kIGhhbmRsaW5nIGFuZCBsb3NzIG9mIGV2ZW50cyBkdWUgdG8gbW9kZXNldHRpbmcgaXMgZGVhbHQKKwkgKiB3aXRoIGluIHRoZSBEUk0gY29yZSBjb2RlLgorCSAqCisJICogUkVUVVJOUworCSAqIFJhdyB2YmxhbmsgY291bnRlciB2YWx1ZS4KKwkgKi8KKwl1MzIgKCpnZXRfdmJsYW5rX2NvdW50ZXIpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKKwkgKiBlbmFibGVfdmJsYW5rIC0gZW5hYmxlIHZibGFuayBpbnRlcnJ1cHQgZXZlbnRzCisJICogQGRldjogRFJNIGRldmljZQorCSAqIEBjcnRjOiB3aGljaCBpcnEgdG8gZW5hYmxlCisJICoKKwkgKiBFbmFibGUgdmJsYW5rIGludGVycnVwdHMgZm9yIEBjcnRjLiAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUKKwkgKiBhIGhhcmR3YXJlIHZibGFuayBjb3VudGVyLCB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGEgbm8tb3AsIHNpbmNlCisJICogaW50ZXJydXB0cyB3aWxsIGhhdmUgdG8gc3RheSBvbiB0byBrZWVwIHRoZSBjb3VudCBhY2N1cmF0ZS4KKwkgKgorCSAqIFJFVFVSTlMKKwkgKiBaZXJvIG9uIHN1Y2Nlc3MsIGFwcHJvcHJpYXRlIGVycm5vIGlmIHRoZSBnaXZlbiBAY3J0YydzIHZibGFuaworCSAqIGludGVycnVwdCBjYW5ub3QgYmUgZW5hYmxlZC4KKwkgKi8KKwlpbnQgKCplbmFibGVfdmJsYW5rKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworCisJLyoqCisJICogZGlzYWJsZV92YmxhbmsgLSBkaXNhYmxlIHZibGFuayBpbnRlcnJ1cHQgZXZlbnRzCisJICogQGRldjogRFJNIGRldmljZQorCSAqIEBjcnRjOiB3aGljaCBpcnEgdG8gZW5hYmxlCisJICoKKwkgKiBEaXNhYmxlIHZibGFuayBpbnRlcnJ1cHRzIGZvciBAY3J0Yy4gIElmIHRoZSBkZXZpY2UgZG9lc24ndCBoYXZlCisJICogYSBoYXJkd2FyZSB2YmxhbmsgY291bnRlciwgdGhpcyByb3V0aW5lIHNob3VsZCBiZSBhIG5vLW9wLCBzaW5jZQorCSAqIGludGVycnVwdHMgd2lsbCBoYXZlIHRvIHN0YXkgb24gdG8ga2VlcCB0aGUgY291bnQgYWNjdXJhdGUuCisJICovCisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworCisJLyoqCiAJICogQ2FsbGVkIGJ5IFxjIGRybV9kZXZpY2VfaXNfYWdwLiAgVHlwaWNhbGx5IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEKIAkgKiBjYXJkIGlzIHJlYWxseSBhdHRhY2hlZCB0byBBR1Agb3Igbm90LgogCSAqCkBAIC02MDEsNyArNjk5LDcgQEAKIAogCWlycXJldHVybl90KCppcnFfaGFuZGxlcikgKERSTV9JUlFfQVJHUyk7CiAJdm9pZCAoKmlycV9wcmVpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmlycV9wb3N0aW5zdGFsbCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCWludCAoKmlycV9wb3N0aW5zdGFsbCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCXZvaWQgKCppcnFfdW5pbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnJlY2xhaW1fYnVmZmVycykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqIGZpbGVfcHJpdik7CkBAIC02MTQsNiArNzEyLDE4IEBACiAJdm9pZCAoKnNldF92ZXJzaW9uKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGRybV9zZXRfdmVyc2lvbiAqc3YpOwogCisJaW50ICgqcHJvY19pbml0KShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisJdm9pZCAoKnByb2NfY2xlYW51cCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworCisJLyoqCisJICogRHJpdmVyLXNwZWNpZmljIGNvbnN0cnVjdG9yIGZvciBkcm1fZ2VtX29iamVjdHMsIHRvIHNldCB1cAorCSAqIG9iai0+ZHJpdmVyX3ByaXZhdGUuCisJICoKKwkgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKwkgKi8KKwlpbnQgKCpnZW1faW5pdF9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisJdm9pZCAoKmdlbV9mcmVlX29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwogCWludCBtYWpvcjsKIAlpbnQgbWlub3I7CiAJaW50IHBhdGNobGV2ZWw7CkBAIC03MTQsNyArODI0LDYgQEAKIAogCS8qKiBcbmFtZSBDb250ZXh0IHN1cHBvcnQgKi8KIAkvKkB7ICovCi0JaW50IGlycTsJCQkvKio8IEludGVycnVwdCB1c2VkIGJ5IGJvYXJkICovCiAJaW50IGlycV9lbmFibGVkOwkJLyoqPCBUcnVlIGlmIGlycSBoYW5kbGVyIGlzIGVuYWJsZWQgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBjb250ZXh0X2ZsYWc7CS8qKjwgQ29udGV4dCBzd2FwcGluZyBmbGFnICovCiAJX192b2xhdGlsZV9fIGxvbmcgaW50ZXJydXB0X2ZsYWc7IC8qKjwgSW50ZXJydXB0aW9uIGhhbmRsZXIgZmxhZyAqLwpAQCAtNzMwLDEzICs4MzksMjggQEAKIAkvKiogXG5hbWUgVkJMQU5LIElSUSBzdXBwb3J0ICovCiAJLypAeyAqLwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgdmJsX3F1ZXVlOwkvKio8IFZCTEFOSyB3YWl0IHF1ZXVlICovCi0JYXRvbWljX3QgdmJsX3JlY2VpdmVkOwotCWF0b21pY190IHZibF9yZWNlaXZlZDI7CQkvKio8IG51bWJlciBvZiBzZWNvbmRhcnkgVkJMQU5LIGludGVycnVwdHMgKi8KKwkvKgorCSAqIEF0IGxvYWQgdGltZSwgZGlzYWJsaW5nIHRoZSB2YmxhbmsgaW50ZXJydXB0IHdvbid0IGJlIGFsbG93ZWQgc2luY2UKKwkgKiBvbGQgY2xpZW50cyBtYXkgbm90IGNhbGwgdGhlIG1vZGVzZXQgaW9jdGwgYW5kIHRoZXJlZm9yZSBtaXNiZWhhdmUuCisJICogT25jZSB0aGUgbW9kZXNldCBpb2N0bCAqaGFzKiBiZWVuIGNhbGxlZCB0aG91Z2gsIHdlIGNhbiBzYWZlbHkKKwkgKiBkaXNhYmxlIHRoZW0gd2hlbiB1bnVzZWQuCisJICovCisJaW50IHZibGFua19kaXNhYmxlX2FsbG93ZWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqdmJsX3F1ZXVlOyAgIC8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KKwlhdG9taWNfdCAqX3ZibGFua19jb3VudDsgICAgICAgIC8qKjwgbnVtYmVyIG9mIFZCTEFOSyBpbnRlcnJ1cHRzIChkcml2ZXIgbXVzdCBhbGxvYyB0aGUgcmlnaHQgbnVtYmVyIG9mIGNvdW50ZXJzKSAqLwogCXNwaW5sb2NrX3QgdmJsX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCB2Ymxfc2lnczsJCS8qKjwgc2lnbmFsIGxpc3QgdG8gc2VuZCBvbiBWQkxBTksgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF9zaWdzMjsJLyoqPCBzaWduYWxzIHRvIHNlbmQgb24gc2Vjb25kYXJ5IFZCTEFOSyAqLwotCXVuc2lnbmVkIGludCB2YmxfcGVuZGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lnczsJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLworCWF0b21pY190IHZibF9zaWduYWxfcGVuZGluZzsgICAgLyogbnVtYmVyIG9mIHNpZ25hbHMgcGVuZGluZyBvbiBhbGwgY3J0Y3MqLworCWF0b21pY190ICp2YmxhbmtfcmVmY291bnQ7ICAgICAgLyogbnVtYmVyIG9mIHVzZXJzIG9mIHZibGFuayBpbnRlcnJ1cHRzcGVyIGNydGMgKi8KKwl1MzIgKmxhc3RfdmJsYW5rOyAgICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBieSBkZXYtPnZibF9sb2NrLCB1c2VkICovCisJCQkJCS8qIGZvciB3cmFwYXJvdW5kIGhhbmRsaW5nICovCisJaW50ICp2YmxhbmtfZW5hYmxlZDsgICAgICAgICAgICAvKiBzbyB3ZSBkb24ndCBjYWxsIGVuYWJsZSBtb3JlIHRoYW4KKwkJCQkJICAgb25jZSBwZXIgZGlzYWJsZSAqLworCWludCAqdmJsYW5rX2lubW9kZXNldDsgICAgICAgICAgLyogRGlzcGxheSBkcml2ZXIgaXMgc2V0dGluZyBtb2RlICovCisJc3RydWN0IHRpbWVyX2xpc3QgdmJsYW5rX2Rpc2FibGVfdGltZXI7CisKKwl1MzIgbWF4X3ZibGFua19jb3VudDsgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB2YmxhbmsgY291bnRlciByZWdpc3RlciAqLwogCXNwaW5sb2NrX3QgdGFza2xldF9sb2NrOwkvKio8IEZvciBkcm1fbG9ja2VkX3Rhc2tsZXQgKi8KIAl2b2lkICgqbG9ja2VkX3Rhc2tsZXRfZnVuYykoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKQEAgLTc1Nyw2ICs4ODEsNyBAQAogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKICNlbmRpZgogCXN0cnVjdCBkcm1fc2dfbWVtICpzZzsJLyoqPCBTY2F0dGVyIGdhdGhlciBtZW1vcnkgKi8KKwlpbnQgbnVtX2NydGNzOyAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIENSVENzIG9uIHRoaXMgZGV2aWNlICovCiAJdm9pZCAqZGV2X3ByaXZhdGU7CQkvKio8IGRldmljZSBwcml2YXRlIGRhdGEgKi8KIAlzdHJ1Y3QgZHJtX3NpZ2RhdGEgc2lnZGF0YTsJICAgLyoqPCBGb3IgYmxvY2tfYWxsX3NpZ25hbHMgKi8KIAlzaWdzZXRfdCBzaWdtYXNrOwpAQCAtNzcxLDggKzg5NiwyOSBAQAogCXNwaW5sb2NrX3QgZHJ3X2xvY2s7CiAJc3RydWN0IGlkciBkcndfaWRyOwogCS8qQH0gKi8KKworCS8qKiBcbmFtZSBHRU0gaW5mb3JtYXRpb24gKi8KKwkvKkB7ICovCisJc3BpbmxvY2tfdCBvYmplY3RfbmFtZV9sb2NrOworCXN0cnVjdCBpZHIgb2JqZWN0X25hbWVfaWRyOworCWF0b21pY190IG9iamVjdF9jb3VudDsKKwlhdG9taWNfdCBvYmplY3RfbWVtb3J5OworCWF0b21pY190IHBpbl9jb3VudDsKKwlhdG9taWNfdCBwaW5fbWVtb3J5OworCWF0b21pY190IGd0dF9jb3VudDsKKwlhdG9taWNfdCBndHRfbWVtb3J5OworCXVpbnQzMl90IGd0dF90b3RhbDsKKwl1aW50MzJfdCBpbnZhbGlkYXRlX2RvbWFpbnM7ICAgIC8qIGRvbWFpbnMgcGVuZGluZyBpbnZhbGlkYXRpb24gKi8KKwl1aW50MzJfdCBmbHVzaF9kb21haW5zOyAgICAgICAgIC8qIGRvbWFpbnMgcGVuZGluZyBmbHVzaCAqLworCS8qQH0gKi8KKwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgZHJtX2Rldl90b19pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wZGV2LT5pcnE7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIGludCBkcm1fY29yZV9jaGVja19mZWF0dXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgaW50IGZlYXR1cmUpCiB7CkBAIC04NjcsNiArMTAxMywxMSBAQAogZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWxsb2NfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwYWdlcywgdTMyIHR5cGUpOwogZXh0ZXJuIGludCBkcm1fZnJlZV9hZ3AoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIGludCBwYWdlcyk7CiBleHRlcm4gaW50IGRybV9iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgdW5zaWduZWQgaW50IHN0YXJ0KTsKK2V4dGVybiBEUk1fQUdQX01FTSAqZHJtX2FncF9iaW5kX3BhZ2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzLAorCQkJCSAgICAgICB1aW50MzJfdCBndHRfb2Zmc2V0LAorCQkJCSAgICAgICB1aW50MzJfdCB0eXBlKTsKIGV4dGVybiBpbnQgZHJtX3VuYmluZF9hZ3AoRFJNX0FHUF9NRU0gKiBoYW5kbGUpOwogCiAJCQkJLyogTWlzYy4gSU9DVEwgc3VwcG9ydCAoZHJtX2lvY3RsLmgpICovCkBAIC05MjksNiArMTA4MCw5IEBACiBleHRlcm4gaW50IGRybV9hdXRobWFnaWMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKKy8qIENhY2hlIG1hbmFnZW1lbnQgKGRybV9jYWNoZS5jKSAqLwordm9pZCBkcm1fY2xmbHVzaF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZXNbXSwgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMpOworCiAJCQkJLyogTG9ja2luZyBJT0NUTCBzdXBwb3J0IChkcm1fbG9jay5oKSAqLwogZXh0ZXJuIGludCBkcm1fbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwpAQCAtOTg1LDE1ICsxMTM5LDI1IEBACiBleHRlcm4gaW50IGRybV9jb250cm9sKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaXJxcmV0dXJuX3QgZHJtX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CitleHRlcm4gaW50IGRybV9pcnFfaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKK2V4dGVybiBpbnQgZHJtX3ZibGFua19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBudW1fY3J0Y3MpOwogZXh0ZXJuIGludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IGRybV92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnZibF9zZXEpOwotZXh0ZXJuIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fbG9ja2VkX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICB2b2lkKCpmdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqKSk7CitleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisvKiBNb2Rlc2V0dGluZyBzdXBwb3J0ICovCitleHRlcm4gaW50IGRybV9tb2Rlc2V0X2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHZvaWQgZHJtX2xvY2tlZF90YXNrbGV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQoKmZ1bmMpKHN0cnVjdCBkcm1fZGV2aWNlKikpOwogCiAJCQkJLyogQUdQL0dBUlQgc3VwcG9ydCAoZHJtX2FncHN1cHBvcnQuaCkgKi8KQEAgLTEwMjYsNiArMTE5MCw3IEBACiBleHRlcm4gaW50IGRybV9hZ3BfZnJlZV9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUpOwogZXh0ZXJuIGludCBkcm1fYWdwX2JpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlLCBvZmZfdCBzdGFydCk7CiBleHRlcm4gaW50IGRybV9hZ3BfdW5iaW5kX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CitleHRlcm4gdm9pZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIAkJCQkvKiBTdHViIHN1cHBvcnQgKGRybV9zdHViLmgpICovCiBleHRlcm4gaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LApAQCAtMTA4OCw2ICsxMjUzLDY2IEBACiBleHRlcm4gaW50IGRybV9tbV9yZW1vdmVfc3BhY2VfZnJvbV90YWlsKHN0cnVjdCBkcm1fbW0gKm1tLCB1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIGludCBkcm1fbW1fYWRkX3NwYWNlX3RvX3RhaWwoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKKy8qIEdyYXBoaWNzIEV4ZWN1dGlvbiBNYW5hZ2VyIGxpYnJhcnkgZnVuY3Rpb25zIChkcm1fZ2VtLmMpICovCitpbnQgZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHNpemVfdCBzaXplKTsKK3ZvaWQgZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2RybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlrcmVmX2dldCgmb2JqLT5yZWZjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cit9CisKK2ludCBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICBpbnQgKmhhbmRsZXApOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2RybV9nZW1fb2JqZWN0X2hhbmRsZV9yZWZlcmVuY2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisJa3JlZl9nZXQoJm9iai0+aGFuZGxlY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogTXVzdCBidW1wIGhhbmRsZSBjb3VudCBmaXJzdCBhcyB0aGlzIG1heSBiZSB0aGUgbGFzdAorCSAqIHJlZiwgaW4gd2hpY2ggY2FzZSB0aGUgb2JqZWN0IHdvdWxkIGRpc2FwcGVhciBiZWZvcmUgd2UKKwkgKiBjaGVja2VkIGZvciBhIG5hbWUKKwkgKi8KKwlrcmVmX3B1dCgmb2JqLT5oYW5kbGVjb3VudCwgZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAorCQkJCQkgICAgIGludCBoYW5kbGUpOworaW50IGRybV9nZW1fY2xvc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBkcm1fZ2VtX2ZsaW5rX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgZHJtX2dlbV9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIGRybV9nZW1fb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cit2b2lkIGRybV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7CisKIGV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggMTM1YmQxOS4uZGEwNDEwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtODQsMTggKzg0LDE4IEBACiAJezB4MTAwMiwgMHg1NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTY1NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU1NTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDU2NEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTY0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1NjRGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTExMyw4ICsxMTMsMTAgQEAKIAl7MHgxMDAyLCAweDU5NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKLQl7MHgxMDAyLCAweDVhNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0ODB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCi0JezB4MTAwMiwgMHg1YTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDgwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDVhNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YjYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDViNjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0xMjIsMTYgKzEyNCwxNiBAQAogCXsweDEwMDIsIDB4NWI2NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVjNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NWM2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg1ZDQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDRjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDRkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDRjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDRkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0yMzcsNiArMjM5LDEwIEBACiAJezB4MTAwMiwgMHg3ODM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzkxZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4NzkxZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4Nzk2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4Nzk2ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4Nzk2ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4Nzk2ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXswLCAwLCAwfQogCiAjZGVmaW5lIHIxMjhfUENJX0lEUyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAppbmRleCAwNWM2NmNmLi5lYjRiMzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKQEAgLTE0Myw2ICsxNDMsMjIgQEAKICNkZWZpbmUgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFCTB4MGUKICNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1NXQVAJMHgwZgogI2RlZmluZSBEUk1fSTkxNV9IV1NfQUREUgkweDExCisjZGVmaW5lIERSTV9JOTE1X0dFTV9JTklUCTB4MTMKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIJMHgxNAorI2RlZmluZSBEUk1fSTkxNV9HRU1fUElOCTB4MTUKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1VOUElOCTB4MTYKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0JVU1kJMHgxNworI2RlZmluZSBEUk1fSTkxNV9HRU1fVEhST1RUTEUJMHgxOAorI2RlZmluZSBEUk1fSTkxNV9HRU1fRU5URVJWVAkweDE5CisjZGVmaW5lIERSTV9JOTE1X0dFTV9MRUFWRVZUCTB4MWEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0NSRUFURQkweDFiCisjZGVmaW5lIERSTV9JOTE1X0dFTV9QUkVBRAkweDFjCisjZGVmaW5lIERSTV9JOTE1X0dFTV9QV1JJVEUJMHgxZAorI2RlZmluZSBEUk1fSTkxNV9HRU1fTU1BUAkweDFlCisjZGVmaW5lIERSTV9JOTE1X0dFTV9TRVRfRE9NQUlOCTB4MWYKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NXX0ZJTklTSAkweDIwCisjZGVmaW5lIERSTV9JOTE1X0dFTV9TRVRfVElMSU5HCTB4MjEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcJMHgyMgogCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0lOSVQJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklULCBkcm1faTkxNV9pbml0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0ZMVVNICQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfRkxVU0gpCkBAIC0xNjAsNiArMTc2LDIwIEBACiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1NFVF9WQkxBTktfUElQRQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRVRfVkJMQU5LX1BJUEUJRFJNX0lPUiggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVF9WQkxBTktfUElQRSwgZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfVkJMQU5LX1NXQVAJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1ZCTEFOS19TV0FQLCBkcm1faTkxNV92Ymxhbmtfc3dhcF90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUElOCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BJTiwgc3RydWN0IGRybV9pOTE1X2dlbV9waW4pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9VTlBJTglEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVU5QSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9CVVNZCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0JVU1ksIHN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1RIUk9UVExFCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVEhST1RUTEUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FTlRFUlZUCURSTV9JTyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VOVEVSVlQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9MRUFWRVZUCURSTV9JTyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0xFQVZFVlQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DUkVBVEUJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFJFQUQJRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9QUkVBRCwgc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1BXUklURQlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BXUklURSwgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NFVF9ET01BSU4JRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TRVRfRE9NQUlOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4pCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TV19GSU5JU0gJRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TV19GSU5JU0gsIHN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX1RJTElORwlEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfVElMSU5HCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcsIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZykKIAogLyogQWxsb3cgZHJpdmVycyB0byBzdWJtaXQgYmF0Y2hidWZmZXJzIGRpcmVjdGx5IHRvIGhhcmR3YXJlLCByZWx5aW5nCiAgKiBvbiB0aGUgc2VjdXJpdHkgbWVjaGFuaXNtcyBwcm92aWRlZCBieSBoYXJkd2FyZS4KQEAgLTIwMCw2ICsyMzAsOCBAQAogI2RlZmluZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkUgICAgICAgICAgICAxCiAjZGVmaW5lIEk5MTVfUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVIgICAgIDIKICNkZWZpbmUgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIICAgICAgICAgMworI2RlZmluZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQgICAgICAgICAgICA0CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0dFTSAgICAgICAgICAgICAgIDUKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gewogCWludCBwYXJhbTsKQEAgLTI2Nyw0ICsyOTksMzA1IEBACiAJdWludDY0X3QgYWRkcjsKIH0gZHJtX2k5MTVfaHdzX2FkZHJfdDsKIAorc3RydWN0IGRybV9pOTE1X2dlbV9pbml0IHsKKwkvKioKKwkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQorCSAqIG1hbmFnZXIuCisJICovCisJdWludDY0X3QgZ3R0X3N0YXJ0OworCS8qKgorCSAqIEVuZGluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwl1aW50NjRfdCBndHRfZW5kOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgeworCS8qKgorCSAqIFJlcXVlc3RlZCBzaXplIGZvciB0aGUgb2JqZWN0LgorCSAqCisJICogVGhlIChwYWdlLWFsaWduZWQpIGFsbG9jYXRlZCBzaXplIGZvciB0aGUgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQuCisJICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KKwkgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyByZWFkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gcmVhZCBmcm9tICovCisJdWludDY0X3Qgb2Zmc2V0OworCS8qKiBMZW5ndGggb2YgZGF0YSB0byByZWFkICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHdyaXRlIHRoZSBkYXRhIGludG8uCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCXVpbnQ2NF90IGRhdGFfcHRyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgd3JpdHRlbiB0by4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCisJdWludDY0X3Qgb2Zmc2V0OworCS8qKiBMZW5ndGggb2YgZGF0YSB0byB3cml0ZSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqCisJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCXVpbnQ2NF90IGRhdGFfcHRyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCS8qKiBPZmZzZXQgaW4gdGhlIG9iamVjdCB0byBtYXAuICovCisJdWludDY0X3Qgb2Zmc2V0OworCS8qKgorCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KKwkgKgorCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KKwkgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIHBvaW50ZXIgdGhlIGRhdGEgd2FzIG1hcHBlZCBhdC4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgYWRkcl9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4geworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKiogTmV3IHJlYWQgZG9tYWlucyAqLworCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKworCS8qKiBOZXcgd3JpdGUgZG9tYWluICovCisJdWludDMyX3Qgd3JpdGVfZG9tYWluOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KKwl1aW50MzJfdCBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgeworCS8qKgorCSAqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIGJlaW5nIHBvaW50ZWQgdG8gYnkgdGhpcyByZWxvY2F0aW9uIGVudHJ5LgorCSAqCisJICogSXQncyBhcHBlYWxpbmcgdG8gbWFrZSB0aGlzIGJlIGFuIGluZGV4IGludG8gdGhlIG1tX3ZhbGlkYXRlX2VudHJ5CisJICogbGlzdCB0byByZWZlciB0byB0aGUgYnVmZmVyLCBidXQgdGhpcyBhbGxvd3MgdGhlIGRyaXZlciB0byBjcmVhdGUKKwkgKiBhIHJlbG9jYXRpb24gbGlzdCBmb3Igc3RhdGUgYnVmZmVycyBhbmQgbm90IHJlLXdyaXRlIGl0IHBlcgorCSAqIGV4ZWMgdXNpbmcgdGhlIGJ1ZmZlci4KKwkgKi8KKwl1aW50MzJfdCB0YXJnZXRfaGFuZGxlOworCisJLyoqCisJICogVmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0byBtYWtlIHVwCisJICogdGhlIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJdWludDMyX3QgZGVsdGE7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBidWZmZXIgdGhlIHJlbG9jYXRpb24gZW50cnkgd2lsbCBiZSB3cml0dGVuIGludG8gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisKKwkvKioKKwkgKiBPZmZzZXQgdmFsdWUgb2YgdGhlIHRhcmdldCBidWZmZXIgdGhhdCB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3YXMgbGFzdAorCSAqIHdyaXR0ZW4gYXMuCisJICoKKwkgKiBJZiB0aGUgYnVmZmVyIGhhcyB0aGUgc2FtZSBvZmZzZXQgYXMgbGFzdCB0aW1lLCB3ZSBjYW4gc2tpcCBzeW5jaW5nCisJICogYW5kIHdyaXRpbmcgdGhlIHJlbG9jYXRpb24uICBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYmFjayBvdXQgYnkKKwkgKiB0aGUgZXhlY2J1ZmZlciBpb2N0bCB3aGVuIHRoZSByZWxvY2F0aW9uIGlzIHdyaXR0ZW4uCisJICovCisJdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCisJLyoqCisJICogVGFyZ2V0IG1lbW9yeSBkb21haW5zIHJlYWQgYnkgdGhpcyBvcGVyYXRpb24uCisJICovCisJdWludDMyX3QgcmVhZF9kb21haW5zOworCisJLyoqCisJICogVGFyZ2V0IG1lbW9yeSBkb21haW5zIHdyaXR0ZW4gYnkgdGhpcyBvcGVyYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgb25seSBvbmUgZG9tYWluIG1heSBiZSB3cml0dGVuIGJ5IHRoZSB3aG9sZQorCSAqIGV4ZWNidWZmZXIgb3BlcmF0aW9uLCBzbyB0aGF0IHdoZXJlIHRoZXJlIGFyZSBjb25mbGljdHMsCisJICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IC1FSU5WQUwgYmFjay4KKwkgKi8KKwl1aW50MzJfdCB3cml0ZV9kb21haW47Cit9OworCisvKiogQHsKKyAqIEludGVsIG1lbW9yeSBkb21haW5zCisgKgorICogTW9zdCBvZiB0aGVzZSBqdXN0IGFsaWduIHdpdGggdGhlIHZhcmlvdXMgY2FjaGVzIGluCisgKiB0aGUgc3lzdGVtIGFuZCBhcmUgdXNlZCB0byBmbHVzaCBhbmQgaW52YWxpZGF0ZSBhcworICogb2JqZWN0cyBlbmQgdXAgY2FjaGVkIGluIGRpZmZlcmVudCBkb21haW5zLgorICovCisvKiogQ1BVIGNhY2hlICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DUFUJCTB4MDAwMDAwMDEKKy8qKiBSZW5kZXIgY2FjaGUsIHVzZWQgYnkgMkQgYW5kIDNEIGRyYXdpbmcgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUgkJMHgwMDAwMDAwMgorLyoqIFNhbXBsZXIgY2FjaGUsIHVzZWQgYnkgdGV4dHVyZSBlbmdpbmUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIJCTB4MDAwMDAwMDQKKy8qKiBDb21tYW5kIHF1ZXVlLCB1c2VkIHRvIGxvYWQgYmF0Y2ggYnVmZmVycyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORAkJMHgwMDAwMDAwOAorLyoqIEluc3RydWN0aW9uIGNhY2hlLCB1c2VkIGJ5IHNoYWRlciBwcm9ncmFtcyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04JMHgwMDAwMDAxMAorLyoqIFZlcnRleCBhZGRyZXNzIGNhY2hlICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgJCTB4MDAwMDAwMjAKKy8qKiBHVFQgZG9tYWluIC0gYXBlcnR1cmUgYW5kIHNjYW5vdXQgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0dUVAkJMHgwMDAwMDA0MAorLyoqIEB9ICovCisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgeworCS8qKgorCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcworCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKiogTnVtYmVyIG9mIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGlzIGJ1ZmZlciAqLworCXVpbnQzMl90IHJlbG9jYXRpb25fY291bnQ7CisJLyoqCisJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZworCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCisJICovCisJdWludDY0X3QgcmVsb2NzX3B0cjsKKworCS8qKiBSZXF1aXJlZCBhbGlnbm1lbnQgaW4gZ3JhcGhpY3MgYXBlcnR1cmUgKi8KKwl1aW50NjRfdCBhbGlnbm1lbnQ7CisKKwkvKioKKwkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQorCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCisJICovCisJdWludDY0X3Qgb2Zmc2V0OworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyIHsKKwkvKioKKwkgKiBMaXN0IG9mIGJ1ZmZlcnMgdG8gYmUgdmFsaWRhdGVkIHdpdGggdGhlaXIgcmVsb2NhdGlvbnMgdG8gYmUKKwkgKiBwZXJmb3JtZW5kIG9uIHRoZW0uCisJICoKKwkgKiBUaGlzIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZhbGlkYXRlX2VudHJ5LgorCSAqCisJICogVGhlc2UgYnVmZmVycyBtdXN0IGJlIGxpc3RlZCBpbiBhbiBvcmRlciBzdWNoIHRoYXQgYWxsIHJlbG9jYXRpb25zCisJICogYSBidWZmZXIgaXMgcGVyZm9ybWluZyByZWZlciB0byBidWZmZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFwcGVhcmVkCisJICogaW4gdGhlIHZhbGlkYXRlIGxpc3QuCisJICovCisJdWludDY0X3QgYnVmZmVyc19wdHI7CisJdWludDMyX3QgYnVmZmVyX2NvdW50OworCisJLyoqIE9mZnNldCBpbiB0aGUgYmF0Y2hidWZmZXIgdG8gc3RhcnQgZXhlY3V0aW9uIGZyb20uICovCisJdWludDMyX3QgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCisJdWludDMyX3QgYmF0Y2hfbGVuOworCXVpbnQzMl90IERSMTsKKwl1aW50MzJfdCBEUjQ7CisJdWludDMyX3QgbnVtX2NsaXByZWN0czsKKwkvKiogVGhpcyBpcyBhIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgKi8KKwl1aW50NjRfdCBjbGlwcmVjdHNfcHRyOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9waW4geworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBiZSBwaW5uZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKworCS8qKiBhbGlnbm1lbnQgcmVxdWlyZWQgd2l0aGluIHRoZSBhcGVydHVyZSAqLworCXVpbnQ2NF90IGFsaWdubWVudDsKKworCS8qKiBSZXR1cm5lZCBHVFQgb2Zmc2V0IG9mIHRoZSBidWZmZXIuICovCisJdWludDY0X3Qgb2Zmc2V0OworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHVucGlubmVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBjaGVjayBmb3IgYnVzeSAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBSZXR1cm4gYnVzeSBzdGF0dXMgKDEgaWYgYnVzeSwgMCBpZiBpZGxlKSAqLworCXVpbnQzMl90IGJ1c3k7Cit9OworCisjZGVmaW5lIEk5MTVfVElMSU5HX05PTkUJMAorI2RlZmluZSBJOTE1X1RJTElOR19YCQkxCisjZGVmaW5lIEk5MTVfVElMSU5HX1kJCTIKKworI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORQkJMAorI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOQkJMQorI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMAkJMgorI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMQkJMworI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xMQk0CisvKiBOb3Qgc2VlbiBieSB1c2VybGFuZCAqLworI2RlZmluZSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTgk1CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGhhdmUgaXRzIHRpbGluZyBzdGF0ZSB1cGRhdGVkICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqCisJICogVGlsaW5nIG1vZGUgZm9yIHRoZSBvYmplY3QgKEk5MTVfVElMSU5HX05PTkUsIEk5MTVfVElMSU5HX1gsCisJICogSTkxNV9USUxJTkdfWSkuCisJICoKKwkgKiBUaGlzIHZhbHVlIGlzIHRvIGJlIHNldCBvbiByZXF1ZXN0LCBhbmQgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZQorCSAqIGtlcm5lbCBvbiBzdWNjZXNzZnVsIHJldHVybiB3aXRoIHRoZSBhY3R1YWwgY2hvc2VuIHRpbGluZyBsYXlvdXQuCisJICoKKwkgKiBUaGUgdGlsaW5nIG1vZGUgbWF5IGJlIGRlbW90ZWQgdG8gSTkxNV9USUxJTkdfTk9ORSB3aGVuIHRoZSBzeXN0ZW0KKwkgKiBoYXMgYml0IDYgc3dpenpsaW5nIHRoYXQgY2FuJ3QgYmUgbWFuYWdlZCBjb3JyZWN0bHkgYnkgR0VNLgorCSAqCisJICogQnVmZmVyIGNvbnRlbnRzIGJlY29tZSB1bmRlZmluZWQgd2hlbiBjaGFuZ2luZyB0aWxpbmdfbW9kZS4KKwkgKi8KKwl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKworCS8qKgorCSAqIFN0cmlkZSBpbiBieXRlcyBmb3IgdGhlIG9iamVjdCB3aGVuIGluIEk5MTVfVElMSU5HX1ggb3IKKwkgKiBJOTE1X1RJTElOR19ZLgorCSAqLworCXVpbnQzMl90IHN0cmlkZTsKKworCS8qKgorCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKKwkgKiBtbWFwIG1hcHBpbmcuCisJICovCisJdWludDMyX3Qgc3dpenpsZV9tb2RlOworfTsKKworc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gZ2V0IHRpbGluZyBzdGF0ZSBmb3IuICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqCisJICogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKi8KKwl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKworCS8qKgorCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKKwkgKiBtbWFwIG1hcHBpbmcuCisJICovCisJdWludDMyX3Qgc3dpenpsZV9tb2RlOworfTsKKwogI2VuZGlmCQkJCS8qIF9JOTE1X0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAyODJhNTA0Li5lNTMxNzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTA3LDYgKzEwNyw3IEBACiBoZWFkZXIteSArPSBsaW1pdHMuaAogaGVhZGVyLXkgKz0gbWFnaWMuaAogaGVhZGVyLXkgKz0gbWFqb3IuaAoraGVhZGVyLXkgKz0gbWFwX3RvXzdzZWdtZW50LmgKIGhlYWRlci15ICs9IG1hdHJveGZiLmgKIGhlYWRlci15ICs9IG1leWUuaAogaGVhZGVyLXkgKz0gbWluaXhfZnMuaApAQCAtMTgyLDYgKzE4Myw3IEBACiB1bmlmZGVmLXkgKz0gYXV4dmVjLmgKIHVuaWZkZWYteSArPSBiaW5mbXRzLmgKIHVuaWZkZWYteSArPSBibGt0cmFjZV9hcGkuaAordW5pZmRlZi15ICs9IGJ5dGVvcmRlci5oCiB1bmlmZGVmLXkgKz0gY2FwYWJpbGl0eS5oCiB1bmlmZGVmLXkgKz0gY2FwaS5oCiB1bmlmZGVmLXkgKz0gY2Npc3NfaW9jdGwuaApAQCAtMzM5LDYgKzM0MSw3IEBACiB1bmlmZGVmLXkgKz0gc3RhdC5oCiB1bmlmZGVmLXkgKz0gc3RkZGVmLmgKIHVuaWZkZWYteSArPSBzdHJpbmcuaAordW5pZmRlZi15ICs9IHN3YWIuaAogdW5pZmRlZi15ICs9IHN5bmNsaW5rLmgKIHVuaWZkZWYteSArPSBzeXNjdGwuaAogdW5pZmRlZi15ICs9IHRjcC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCAwOWIyNzZjLi5mNmI4Y2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTIwNCwxMiArMjA0LDIxIEBACiAvKiBwcm90b3R5cGVzICovCiBleHRlcm4gdW5zaWduZWQgYWlvX21heF9zaXplOwogCisjaWZkZWYgQ09ORklHX0FJTwogZXh0ZXJuIHNzaXplX3Qgd2FpdF9vbl9zeW5jX2tpb2NiKHN0cnVjdCBraW9jYiAqaW9jYik7CiBleHRlcm4gaW50IGFpb19wdXRfcmVxKHN0cnVjdCBraW9jYiAqaW9jYik7CiBleHRlcm4gdm9pZCBraWNrX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKTsKIGV4dGVybiBpbnQgYWlvX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXMsIGxvbmcgcmVzMik7CiBzdHJ1Y3QgbW1fc3RydWN0OwogZXh0ZXJuIHZvaWQgZXhpdF9haW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCB3YWl0X29uX3N5bmNfa2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBhaW9fcHV0X3JlcShzdHJ1Y3Qga2lvY2IgKmlvY2IpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBraWNrX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGFpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmVzLCBsb25nIHJlczIpIHsgcmV0dXJuIDA7IH0KK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9haW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQorI2VuZGlmIC8qIENPTkZJR19BSU8gKi8KIAogI2RlZmluZSBpb193YWl0X3RvX2tpb2NiKHdhaXQpIGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qga2lvY2IsIGtpX3dhaXQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSWFuIEtlbnQgPHJhdmVuQHRoZW1hdy5uZXQ+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfQVVUT19ERVZfSU9DVExfSAorI2RlZmluZSBfTElOVVhfQVVUT19ERVZfSU9DVExfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBBVVRPRlNfREVWSUNFX05BTUUJCSJhdXRvZnMiCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SCTEKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SCTAKKworI2RlZmluZSBBVVRPRlNfREVWSURfTEVOCQkxNgorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfU0laRQkJc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisvKgorICogQW4gaW9jdGwgaW50ZXJmYWNlIGZvciBhdXRvZnMgbW91bnQgcG9pbnQgY29udHJvbC4KKyAqLworCisvKgorICogQWxsIHRoZSBpb2N0bHMgdXNlIHRoaXMgc3RydWN0dXJlLgorICogV2hlbiBzZW5kaW5nIGEgcGF0aCBzaXplIG11c3QgYWNjb3VudCBmb3IgdGhlIHRvdGFsIGxlbmd0aAorICogb2YgdGhlIGNodW5rIG9mIG1lbW9yeSBvdGhlcndpc2UgaXMgaXMgdGhlIHNpemUgb2YgdGhlCisgKiBzdHJ1Y3R1cmUuCisgKi8KKworc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgeworCV9fdTMyIHZlcl9tYWpvcjsKKwlfX3UzMiB2ZXJfbWlub3I7CisJX191MzIgc2l6ZTsJCS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KKwlfX3MzMiBpb2N0bGZkOwkJLyogYXV0b21vdW50IGNvbW1hbmQgZmQgKi8KKworCV9fdTMyIGFyZzE7CQkvKiBDb21tYW5kIHBhcmFtZXRlcnMgKi8KKwlfX3UzMiBhcmcyOworCisJY2hhciBwYXRoWzBdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXV0b2ZzX2Rldl9pb2N0bChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqaW4pCit7CisJaW4tPnZlcl9tYWpvciA9IEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NQUpPUjsKKwlpbi0+dmVyX21pbm9yID0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SOworCWluLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKTsKKwlpbi0+aW9jdGxmZCA9IC0xOworCWluLT5hcmcxID0gMDsKKwlpbi0+YXJnMiA9IDA7CisJcmV0dXJuOworfQorCisvKgorICogSWYgeW91IGNoYW5nZSB0aGlzIG1ha2Ugc3VyZSB5b3UgbWFrZSB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2UKKyAqIHRvIGF1dG9mcy1kZXYtaW9jdGwuYzpsb29rdXBfaW9jdGwoKQorICovCitlbnVtIHsKKwkvKiBHZXQgdmFyaW91cyB2ZXJzaW9uIGluZm8gKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fQ01EID0gMHg3MSwKKwlBVVRPRlNfREVWX0lPQ1RMX1BST1RPVkVSX0NNRCwKKwlBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRCwKKworCS8qIE9wZW4gbW91bnQgaW9jdGwgZmQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVF9DTUQsCisKKwkvKiBDbG9zZSBtb3VudCBpb2N0bCBmZCAqLworCUFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQsCisKKwkvKiBNb3VudC9leHBpcmUgc3RhdHVzIHJldHVybnMgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCwKKwlBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01ELAorCisJLyogQWN0aXZhdGUvZGVhY3RpdmF0ZSBhdXRvZnMgbW91bnQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRF9DTUQsCisJQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01ELAorCisJLyogRXhwaXJ5IHRpbWVvdXQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVRfQ01ELAorCisJLyogR2V0IG1vdW50IGxhc3QgcmVxdWVzdGluZyB1aWQgYW5kIGdpZCAqLworCUFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSX0NNRCwKKworCS8qIENoZWNrIGZvciBlbGlnaWJsZSBleHBpcmUgY2FuZGlkYXRlcyAqLworCUFVVE9GU19ERVZfSU9DVExfRVhQSVJFX0NNRCwKKworCS8qIFJlcXVlc3QgYnVzeSBzdGF0dXMgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQsCisKKwkvKiBDaGVjayBpZiBwYXRoIGlzIGEgbW91bnRwb2ludCAqLworCUFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRCwKK307CisKKyNkZWZpbmUgQVVUT0ZTX0lPQ1RMIDB4OTMKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT04gXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVIgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVJfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlRfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1JFQURZIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9GQUlMIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRCBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9TRVRQSVBFRkRfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQyBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1JFUVVFU1RFUl9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfRVhQSVJFIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0VYUElSRV9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0lTTU9VTlRQT0lOVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZW5kaWYJLyogX0xJTlVYX0FVVE9fREVWX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAppbmRleCBiNzg1YzZmLi4yMjUzNzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC0yMywxMiArMjMsMTcgQEAKICNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCTMKICNkZWZpbmUgQVVUT0ZTX01BWF9QUk9UT19WRVJTSU9OCTUKIAotI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJMAorI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJMQogCiAvKiBNYXNrIGZvciBleHBpcmUgYmVoYXZpb3VyICovCiAjZGVmaW5lIEFVVE9GU19FWFBfSU1NRURJQVRFCQkxCiAjZGVmaW5lIEFVVE9GU19FWFBfTEVBVkVTCQkyCiAKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfQU5ZCQkJMHgwMDAwCisjZGVmaW5lIEFVVE9GU19UWVBFX0lORElSRUNUCQkweDAwMDEKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfRElSRUNUCQkweDAwMDIKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfT0ZGU0VUCQkweDAwMDQKKwogLyogRGFlbW9uIG5vdGlmaWNhdGlvbiBwYWNrZXQgdHlwZXMgKi8KIGVudW0gYXV0b2ZzX25vdGlmeSB7CiAJTkZZX05PTkUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKaW5kZXggMGEyNGQ1NS4uYmVlNTJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaApAQCAtMTc1LDYgKzE3NSw4IEBACiAgKiBCRElfQ0FQX1JFQURfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciByZWFkaW5nCiAgKiBCRElfQ0FQX1dSSVRFX01BUDogICAgICBDYW4gYmUgbWFwcGVkIGZvciB3cml0aW5nCiAgKiBCRElfQ0FQX0VYRUNfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciBleGVjdXRpb24KKyAqCisgKiBCRElfQ0FQX1NXQVBfQkFDS0VEOiAgICBDb3VudCBzaG1lbS90bXBmcyBvYmplY3RzIGFzIHN3YXAtYmFja2VkLgogICovCiAjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9ESVJUWQkweDAwMDAwMDAxCiAjZGVmaW5lIEJESV9DQVBfTk9fV1JJVEVCQUNLCTB4MDAwMDAwMDIKQEAgLTE4NCw2ICsxODYsNyBAQAogI2RlZmluZSBCRElfQ0FQX1dSSVRFX01BUAkweDAwMDAwMDIwCiAjZGVmaW5lIEJESV9DQVBfRVhFQ19NQVAJMHgwMDAwMDA0MAogI2RlZmluZSBCRElfQ0FQX05PX0FDQ1RfV0IJMHgwMDAwMDA4MAorI2RlZmluZSBCRElfQ0FQX1NXQVBfQkFDS0VECTB4MDAwMDAxMDAKIAogI2RlZmluZSBCRElfQ0FQX1ZNRkxBR1MgXAogCShCRElfQ0FQX1JFQURfTUFQIHwgQkRJX0NBUF9XUklURV9NQVAgfCBCRElfQ0FQX0VYRUNfTUFQKQpAQCAtMjQ4LDYgKzI1MSwxMSBAQAogCQkJCSAgICAgIEJESV9DQVBfTk9fV1JJVEVCQUNLKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGlfY2FwX3N3YXBfYmFja2VkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJcmV0dXJuIGJkaS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9TV0FQX0JBQ0tFRDsKK30KKwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfY2FwX3dyaXRlYmFja19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gYmRpX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CkBAIC0yNTgsNCArMjY2LDkgQEAKIAlyZXR1cm4gYmRpX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8pOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19jYXBfc3dhcF9iYWNrZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIGJkaV9jYXBfc3dhcF9iYWNrZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7Cit9CisKICNlbmRpZgkJLyogX0xJTlVYX0JBQ0tJTkdfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNkLmggYi9pbmNsdWRlL2xpbnV4L2JjZC5oCmluZGV4IDdhYzUxOGUuLjIyZWE1NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9iY2QuaApAQCAtMSwxMiArMSwzIEBACi0vKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgY29kZQotICogaW4gdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiBvciBsYXRlciwKLSAqIGF0IHlvdXIgb3B0aW9uLgotICovCi0KLS8qIG1hY3JvcyB0byB0cmFuc2xhdGUgdG8vZnJvbSBiaW5hcnkgYW5kIGJpbmFyeS1jb2RlZCBkZWNpbWFsIChmcmVxdWVudGx5Ci0gKiBmb3VuZCBpbiBSVEMgY2hpcHMpLgotICovCi0KICNpZm5kZWYgX0JDRF9ICiAjZGVmaW5lIF9CQ0RfSAogCkBAIC0xNSwxMSArNiw0IEBACiB1bnNpZ25lZCBiY2QyYmluKHVuc2lnbmVkIGNoYXIgdmFsKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwogdW5zaWduZWQgY2hhciBiaW4yYmNkKHVuc2lnbmVkIHZhbCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKIAotI2RlZmluZSBCQ0QyQklOKHZhbCkJYmNkMmJpbih2YWwpCi0jZGVmaW5lIEJJTjJCQ0QodmFsKQliaW4yYmNkKHZhbCkKLQotLyogYmFja3dhcmRzIGNvbXBhdCAqLwotI2RlZmluZSBCQ0RfVE9fQklOKHZhbCkgKCh2YWwpPUJDRDJCSU4odmFsKSkKLSNkZWZpbmUgQklOX1RPX0JDRCh2YWwpICgodmFsKT1CSU4yQkNEKHZhbCkpCi0KICNlbmRpZiAvKiBfQkNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggODI2ZjYyMy4uNzM5NGI1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTM2LDYgKzM2LDEwIEBACiAJdW5zaWduZWQgbG9uZyBwOyAvKiBjdXJyZW50IHRvcCBvZiBtZW0gKi8KIAl1bnNpZ25lZCBpbnQgc2hfYmFuZzoxLAogCQkgICAgIG1pc2NfYmFuZzoxOworI2lmZGVmIF9fYWxwaGFfXworCXVuc2lnbmVkIGludCB0YXNvOjE7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgcmVjdXJzaW9uX2RlcHRoOwogCXN0cnVjdCBmaWxlICogZmlsZTsKIAlpbnQgZV91aWQsIGVfZ2lkOwogCWtlcm5lbF9jYXBfdCBjYXBfcG9zdF9leGVjX3Blcm1pdHRlZDsKQEAgLTU4LDYgKzYyLDcgQEAKICNkZWZpbmUgQklOUFJNX0ZMQUdTX0VYRUNGRF9CSVQgMQogI2RlZmluZSBCSU5QUk1fRkxBR1NfRVhFQ0ZEICgxIDw8IEJJTlBSTV9GTEFHU19FWEVDRkRfQklUKQogCisjZGVmaW5lIEJJTlBSTV9NQVhfUkVDVVJTSU9OIDQKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGxvYWQgdGhlIGJpbmFyeSBmb3JtYXRzIHRoYXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IGZmNWI0Y2YuLjFjOTFhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtNzksNiArNzksMTMgQEAKIAogCXVuc2lnbmVkIGludAkJYmlfc2l6ZTsJLyogcmVzaWR1YWwgSS9PIGNvdW50ICovCiAKKwkvKgorCSAqIFRvIGtlZXAgdHJhY2sgb2YgdGhlIG1heCBzZWdtZW50IHNpemUsIHdlIGFjY291bnQgZm9yIHRoZQorCSAqIHNpemVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBtZXJnZWFibGUgc2VnbWVudHMgaW4gdGhpcyBiaW8uCisJICovCisJdW5zaWduZWQgaW50CQliaV9zZWdfZnJvbnRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19iYWNrX3NpemU7CisKIAl1bnNpZ25lZCBpbnQJCWJpX21heF92ZWNzOwkvKiBtYXggYnZsX3ZlY3Mgd2UgY2FuIGhvbGQgKi8KIAogCXVuc2lnbmVkIGludAkJYmlfY29tcF9jcHU7CS8qIGNvbXBsZXRpb24gQ1BVICovCkBAIC0xMjksMjUgKzEzNiwzMCBAQAogICogYml0IDIgLS0gYmFycmllcgogICoJSW5zZXJ0IGEgc2VyaWFsaXphdGlvbiBwb2ludCBpbiB0aGUgSU8gcXVldWUsIGZvcmNpbmcgcHJldmlvdXNseQogICoJc3VibWl0dGVkIElPIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhpcyBvZW4gaXMgaXNzdWVkLgotICogYml0IDMgLS0gZmFpbCBmYXN0LCBkb24ndCB3YW50IGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcwotICogYml0IDQgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQorICogYml0IDMgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQogICoJTm90ZSB0aGF0IHRoaXMgZG9lcyBOT1QgaW5kaWNhdGUgdGhhdCB0aGUgSU8gaXRzZWxmIGlzIHN5bmMsIGp1c3QKICAqCXRoYXQgdGhlIGJsb2NrIGxheWVyIHdpbGwgbm90IHBvc3Rwb25lIGlzc3VlIG9mIHRoaXMgSU8gYnkgcGx1Z2dpbmcuCi0gKiBiaXQgNSAtLSBtZXRhZGF0YSByZXF1ZXN0CisgKiBiaXQgNCAtLSBtZXRhZGF0YSByZXF1ZXN0CiAgKglVc2VkIGZvciB0cmFjaW5nIHRvIGRpZmZlcmVudGlhdGUgbWV0YWRhdGEgYW5kIGRhdGEgSU8uIE1heSBhbHNvCiAgKglnZXQgc29tZSBwcmVmZXJlbnRpYWwgdHJlYXRtZW50IGluIHRoZSBJTyBzY2hlZHVsZXIKLSAqIGJpdCA2IC0tIGRpc2NhcmQgc2VjdG9ycworICogYml0IDUgLS0gZGlzY2FyZCBzZWN0b3JzCiAgKglJbmZvcm1zIHRoZSBsb3dlciBsZXZlbCBkZXZpY2UgdGhhdCB0aGlzIHJhbmdlIG9mIHNlY3RvcnMgaXMgbm8gbG9uZ2VyCiAgKgl1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSBhbmQgbWF5IHRodXMgYmUgZnJlZWQgYnkgdGhlIGRldmljZS4gVXNlZAogICoJZm9yIGZsYXNoIGJhc2VkIHN0b3JhZ2UuCisgKiBiaXQgNiAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycworICogYml0IDcgLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKKyAqIGJpdCA4IC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCisgKglEb24ndCB3YW50IGRyaXZlciByZXRyaWVzIGZvciBhbnkgZmFzdCBmYWlsIHdoYXRldmVyIHRoZSByZWFzb24uCiAgKi8KICNkZWZpbmUgQklPX1JXCQkwCS8qIE11c3QgbWF0Y2ggUlcgaW4gcmVxIGZsYWdzIChibGtkZXYuaCkgKi8KICNkZWZpbmUgQklPX1JXX0FIRUFECTEJLyogTXVzdCBtYXRjaCBGQUlMRkFTVCBpbiByZXEgZmxhZ3MgKi8KICNkZWZpbmUgQklPX1JXX0JBUlJJRVIJMgotI2RlZmluZSBCSU9fUldfRkFJTEZBU1QJMwotI2RlZmluZSBCSU9fUldfU1lOQwk0Ci0jZGVmaW5lIEJJT19SV19NRVRBCTUKLSNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNgorI2RlZmluZSBCSU9fUldfU1lOQwkzCisjZGVmaW5lIEJJT19SV19NRVRBCTQKKyNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNQorI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfREVWCQk2CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQJNworI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfRFJJVkVSCQk4CiAKIC8qCiAgKiB1cHBlciAxNiBiaXRzIG9mIGJpX3J3IGRlZmluZSB0aGUgaW8gcHJpb3JpdHkgb2YgdGhpcyBiaW8KQEAgLTE3NCw3ICsxODYsMTAgQEAKICNkZWZpbmUgYmlvX3NlY3RvcnMoYmlvKQkoKGJpbyktPmJpX3NpemUgPj4gOSkKICNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQogI2RlZmluZSBiaW9fc3luYyhiaW8pCQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX1NZTkMpKQotI2RlZmluZSBiaW9fZmFpbGZhc3QoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RldihiaW8pCSgoYmlvKS0+YmlfcncgJgkoMSA8PCBCSU9fUldfRkFJTEZBU1RfREVWKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pCVwKKwkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCkpCisjZGVmaW5lIGJpb19mYWlsZmFzdF9kcml2ZXIoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUikpCiAjZGVmaW5lIGJpb19yd19haGVhZChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQUhFQUQpKQogI2RlZmluZSBiaW9fcndfbWV0YShiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfTUVUQSkpCiAjZGVmaW5lIGJpb19kaXNjYXJkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19ESVNDQVJEKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDg5NzgxZmQuLjFhYmZlNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtMTEwLDcgKzExMCw2IEBACiAKIGV4dGVybiBpbnQgYml0bWFwX3NjbnByaW50ZihjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sCiAJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7Ci1leHRlcm4gaW50IGJpdG1hcF9zY25wcmludGZfbGVuKHVuc2lnbmVkIGludCBucl9iaXRzKTsKIGV4dGVybiBpbnQgX19iaXRtYXBfcGFyc2UoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgaXNfdXNlciwKIAkJCXVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IG5iaXRzKTsKIGV4dGVybiBpbnQgYml0bWFwX3BhcnNlX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHVuc2lnbmVkIGludCB1bGVuLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYTkyZDllNC4uYjRmZTY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04Nyw3ICs4Nyw5IEBACiAgKi8KIGVudW0gcnFfZmxhZ19iaXRzIHsKIAlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KLQlfX1JFUV9GQUlMRkFTVCwJCS8qIG5vIGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcyAqLworCV9fUkVRX0ZBSUxGQVNUX0RFViwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZGV2aWNlIGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCwgLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgdHJhbnNwb3J0IGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX0RSSVZFUiwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZHJpdmVyIGVycm9ycyAqLwogCV9fUkVRX0RJU0NBUkQsCQkvKiByZXF1ZXN0IHRvIGRpc2NhcmQgc2VjdG9ycyAqLwogCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLwogCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLwpAQCAtMTExLDggKzExMywxMCBAQAogfTsKIAogI2RlZmluZSBSRVFfUlcJCSgxIDw8IF9fUkVRX1JXKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfREVWCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RFVikKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVAkoMSA8PCBfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9EUklWRVIJKDEgPDwgX19SRVFfRkFJTEZBU1RfRFJJVkVSKQogI2RlZmluZSBSRVFfRElTQ0FSRAkoMSA8PCBfX1JFUV9ESVNDQVJEKQotI2RlZmluZSBSRVFfRkFJTEZBU1QJKDEgPDwgX19SRVFfRkFJTEZBU1QpCiAjZGVmaW5lIFJFUV9TT1JURUQJKDEgPDwgX19SRVFfU09SVEVEKQogI2RlZmluZSBSRVFfU09GVEJBUlJJRVIJKDEgPDwgX19SRVFfU09GVEJBUlJJRVIpCiAjZGVmaW5lIFJFUV9IQVJEQkFSUklFUgkoMSA8PCBfX1JFUV9IQVJEQkFSUklFUikKQEAgLTU2MCw3ICs1NjQsMTIgQEAKICNkZWZpbmUgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpCiAjZGVmaW5lIGJsa19zZW5zZV9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU0VOU0UpCiAKLSNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKyNkZWZpbmUgYmxrX2ZhaWxmYXN0X2RldihycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9ERVYpCisjZGVmaW5lIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpICgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUKQorI2RlZmluZSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKGJsa19mYWlsZmFzdF9kZXYocnEpIHx8CVwKKwkJCQkgYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChycSkgfHwJXAorCQkJCSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKSkKICNkZWZpbmUgYmxrX3JxX3N0YXJ0ZWQocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfU1RBUlRFRCkKIAogI2RlZmluZSBibGtfYWNjb3VudF9ycShycSkJKGJsa19ycV9zdGFydGVkKHJxKSAmJiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSkpIApAQCAtODU2LDcgKzg2NSw2IEBACiBleHRlcm4gaW50IGJsa19ycV9tYXBfc2coc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICopOwogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfcnFfZmxhZ3Moc3RydWN0IHJlcXVlc3QgKiwgY2hhciAqKTsKIGV4dGVybiB2b2lkIGdlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLWV4dGVybiB2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIGxvbmcgbnJfYmxvY2tkZXZfcGFnZXModm9pZCk7CiAKIGludCBibGtfZ2V0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggM2EzMWViNS4uYmRmNTA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0yNCw2ICsyNCw3IEBACiAJQkxLX1RDX0FIRUFECT0gMSA8PCAxMSwJLyogcmVhZGFoZWFkICovCiAJQkxLX1RDX01FVEEJPSAxIDw8IDEyLAkvKiBtZXRhZGF0YSAqLwogCUJMS19UQ19ESVNDQVJECT0gMSA8PCAxMywJLyogZGlzY2FyZCByZXF1ZXN0cyAqLworCUJMS19UQ19EUlZfREFUQQk9IDEgPDwgMTQsCS8qIGJpbmFyeSBwZXItZHJpdmVyIGRhdGEgKi8KIAogCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiBvbmx5IDE2LWJpdHMsIHJlbWluZGVyICovCiB9OwpAQCAtNTEsNiArNTIsNyBAQAogCV9fQkxLX1RBX0JPVU5DRSwJCS8qIGJpbyB3YXMgYm91bmNlZCAqLwogCV9fQkxLX1RBX1JFTUFQLAkJCS8qIGJpbyB3YXMgcmVtYXBwZWQgKi8KIAlfX0JMS19UQV9BQk9SVCwJCQkvKiByZXF1ZXN0IGFib3J0ZWQgKi8KKwlfX0JMS19UQV9EUlZfREFUQSwJCS8qIGRyaXZlci1zcGVjaWZpYyBiaW5hcnkgZGF0YSAqLwogfTsKIAogLyoKQEAgLTgyLDYgKzg0LDcgQEAKICNkZWZpbmUgQkxLX1RBX0JPVU5DRQkJKF9fQkxLX1RBX0JPVU5DRSkKICNkZWZpbmUgQkxLX1RBX1JFTUFQCQkoX19CTEtfVEFfUkVNQVAgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCiAjZGVmaW5lIEJMS19UQV9BQk9SVAkJKF9fQkxLX1RBX0FCT1JUIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfRFJWX0RBVEEJKF9fQkxLX1RBX0RSVl9EQVRBIHwgQkxLX1RDX0FDVChCTEtfVENfRFJWX0RBVEEpKQogCiAjZGVmaW5lIEJMS19UTl9QUk9DRVNTCQkoX19CTEtfVE5fUFJPQ0VTUyB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCiAjZGVmaW5lIEJMS19UTl9USU1FU1RBTVAJKF9fQkxLX1ROX1RJTUVTVEFNUCB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCkBAIC0zMTcsNiArMzIwLDM0IEBACiAJX19ibGtfYWRkX3RyYWNlKGJ0LCBmcm9tLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIEJMS19UQV9SRU1BUCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7CiB9CiAKKy8qKgorICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCWlvIHJlcXVlc3QKKyAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCisgKgorICoqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCBycS0+ZGF0YV9sZW4sIDAsIEJMS19UQV9EUlZfREFUQSwKKwkJCQlycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOworCWVsc2UKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKKwkJCQkwLCBCTEtfVEFfRFJWX0RBVEEsIHJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Cit9CisKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKQEAgLTMzMCw2ICszNjEsNyBAQAogI2RlZmluZSBibGtfYWRkX3RyYWNlX2dlbmVyaWMocSwgcnEsIHJ3LCB3aGF0KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfcGR1X2ludChxLCB3aGF0LCBiaW8sIHBkdSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBibGtfYWRkX3RyYWNlX3JlbWFwKHEsIGJpbywgZGV2LCBmLCB0KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF9kcml2ZXJfZGF0YShxLCBycSwgZGF0YSwgbGVuKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYnV0cykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zZXR1cChxLCBuYW1lLCBkZXYsIGFyZykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpCQkoLUVOT1RUWSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCBlYWRhYWI0Li4zY2U2NGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlyZXR1cm4gbGlrZWx5KCF0ZXN0X2FuZF9zZXRfYml0KEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpOworCXJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhCSF9Mb2NrLCAmYmgtPmJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKaW5kZXggMTEzM2Q1Zi4uZmJhYTdmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZApAQCAtMSwzICsxLDQgQEAKIHVuaWZkZWYteSArPSBiaWdfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBsaXR0bGVfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBzd2FiLmgKK3VuaWZkZWYteSArPSBzd2FiYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmggYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKaW5kZXggNDRmOTViOS4uMWNiYTNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAppbmRleCA0Y2MxNzBhLi5jZWRjMWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAKICNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX2JlMzIpKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggYzk4ZGQ3Yy4uOGIwMGY2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC05LDEyICs5LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3Vwc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcmlvX2hlYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogCiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIApAQCAtMTM3LDYgKzEzNywxNSBAQAogCSAqIHJlbGVhc2VfbGlzdF9sb2NrCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCByZWxlYXNlX2xpc3Q7CisKKwkvKiBwaWRzX211dGV4IHByb3RlY3RzIHRoZSBmaWVsZHMgYmVsb3cgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHBpZHNfbXV0ZXg7CisJLyogQXJyYXkgb2YgcHJvY2VzcyBpZHMgaW4gdGhlIGNncm91cCAqLworCXBpZF90ICp0YXNrc19waWRzOworCS8qIEhvdyBtYW55IGZpbGVzIGFyZSB1c2luZyB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfdXNlX2NvdW50OworCS8qIExlbmd0aCBvZiB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfbGVuZ3RoOwogfTsKIAogLyogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKQEAgLTE0OSw3ICsxNTgsNyBAQAogc3RydWN0IGNzc19zZXQgewogCiAJLyogUmVmZXJlbmNlIGNvdW50ICovCi0Jc3RydWN0IGtyZWYgcmVmOworCWF0b21pY190IHJlZmNvdW50OwogCiAJLyoKIAkgKiBMaXN0IHJ1bm5pbmcgdGhyb3VnaCBhbGwgY2dyb3VwIGdyb3VwcyBpbiB0aGUgc2FtZSBoYXNoCkBAIC0zMjYsNyArMzM1LDggQEAKIAkgKi8KIAl2b2lkICgqbW1fb3duZXJfY2hhbmdlZCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQlzdHJ1Y3QgY2dyb3VwICpvbGQsCi0JCQkJCXN0cnVjdCBjZ3JvdXAgKm5ldyk7CisJCQkJCXN0cnVjdCBjZ3JvdXAgKm5ldywKKwkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAlpbnQgc3Vic3lzX2lkOwogCWludCBhY3RpdmU7CiAJaW50IGRpc2FibGVkOwpAQCAtMzkzLDYgKzQwMyw5IEBACiBpbnQgY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKTsKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3ZvaWQgY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwKKwkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CisKICNlbHNlIC8qICFDT05GSUdfQ0dST1VQUyAqLwogCiBzdGF0aWMgaW5saW5lIGludCBjZ3JvdXBfaW5pdF9lYXJseSh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC00MTEsMTUgKzQyNCw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KSB7fQorCiAjZW5kaWYgLyogIUNPTkZJR19DR1JPVVBTICovCiAKLSNpZmRlZiBDT05GSUdfTU1fT1dORVIKLWV4dGVybiB2b2lkCi1jZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7Ci0jZWxzZSAvKiAhQ09ORklHX01NX09XTkVSICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KQotewotfQotI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogI2VuZGlmIC8qIF9MSU5VWF9DR1JPVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAppbmRleCBlMjg3NzQ1Li45YzIyMzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaApAQCAtNDgsMyArNDgsOSBAQAogI2VuZGlmCiAKIC8qICovCisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK1NVQlNZUyhmcmVlemVyKQorI2VuZGlmCisKKy8qICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsay5oIGIvaW5jbHVkZS9saW51eC9jbGsuaAppbmRleCA1Y2E4YzZmLi43Nzg3NzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrLmgKQEAgLTM1LDYgKzM1LDggQEAKICAqIGNsa19nZXQgbWF5IHJldHVybiBkaWZmZXJlbnQgY2xvY2sgcHJvZHVjZXJzIGRlcGVuZGluZyBvbiBAZGV2LikKICAqCiAgKiBEcml2ZXJzIG11c3QgYXNzdW1lIHRoYXQgdGhlIGNsb2NrIHNvdXJjZSBpcyBub3QgZW5hYmxlZC4KKyAqCisgKiBjbGtfZ2V0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgogICovCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpOwogCkBAIC03Niw2ICs3OCw4IEBACiAgKiBOb3RlOiBkcml2ZXJzIG11c3QgZW5zdXJlIHRoYXQgYWxsIGNsa19lbmFibGUgY2FsbHMgbWFkZSBvbiB0aGlzCiAgKiBjbG9jayBzb3VyY2UgYXJlIGJhbGFuY2VkIGJ5IGNsa19kaXNhYmxlIGNhbGxzIHByaW9yIHRvIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCisgKgorICogY2xrX3B1dCBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqLwogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsayk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA1NWU0MzRmLi5mODhkMzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC00NSw3ICs0NSw4IEBACiAgKiBAcmVhZDoJCXJldHVybnMgYSBjeWNsZSB2YWx1ZQogICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CiAgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMKLSAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAoYWRqdXN0ZWQgYnkgTlRQKQorICogQG11bHRfb3JpZzoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAodW5hZGp1c3RlZCBieSBOVFApCiAgKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKICAqIEBmbGFnczoJCWZsYWdzIGRlc2NyaWJpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzCiAgKiBAdnJlYWQ6CQl2c3lzY2FsbCBiYXNlZCByZWFkCkBAIC02Myw2ICs2NCw3IEBACiAJY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogCWN5Y2xlX3QgbWFzazsKIAl1MzIgbXVsdDsKKwl1MzIgbXVsdF9vcmlnOwogCXUzMiBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7CkBAIC03Nyw2ICs3OSw3IEBACiAJLyogdGltZWtlZXBpbmcgc3BlY2lmaWMgZGF0YSwgaWdub3JlICovCiAJY3ljbGVfdCBjeWNsZV9pbnRlcnZhbDsKIAl1NjQJeHRpbWVfaW50ZXJ2YWw7CisJdTMyCXJhd19pbnRlcnZhbDsKIAkvKgogCSAqIFNlY29uZCBwYXJ0IGlzIHdyaXR0ZW4gYXQgZWFjaCB0aW1lciBpbnRlcnJ1cHQKIAkgKiBLZWVwIGl0IGluIGEgZGlmZmVyZW50IGNhY2hlIGxpbmUgdG8gZGlydHkgbm8KQEAgLTg1LDYgKzg4LDcgQEAKIAljeWNsZV90IGN5Y2xlX2xhc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1NjQgeHRpbWVfbnNlYzsKIAlzNjQgZXJyb3I7CisJc3RydWN0IHRpbWVzcGVjIHJhd190aW1lOwogCiAjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCiAJLyogV2F0Y2hkb2cgcmVsYXRlZCBkYXRhLCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgKi8KQEAgLTIwMSwxNyArMjA1LDE5IEBACiB7CiAJdTY0IHRtcDsKIAotCS8qIFhYWCAtIEFsbCBvZiB0aGlzIGNvdWxkIHVzZSBhIHdob2xlIGxvdCBvZiBvcHRpbWl6YXRpb24gKi8KKwkvKiBEbyB0aGUgbnMgLT4gY3ljbGUgY29udmVyc2lvbiBmaXJzdCwgdXNpbmcgb3JpZ2luYWwgbXVsdCAqLwogCXRtcCA9IGxlbmd0aF9uc2VjOwogCXRtcCA8PD0gYy0+c2hpZnQ7Ci0JdG1wICs9IGMtPm11bHQvMjsKLQlkb19kaXYodG1wLCBjLT5tdWx0KTsKKwl0bXAgKz0gYy0+bXVsdF9vcmlnLzI7CisJZG9fZGl2KHRtcCwgYy0+bXVsdF9vcmlnKTsKIAogCWMtPmN5Y2xlX2ludGVydmFsID0gKGN5Y2xlX3QpdG1wOwogCWlmIChjLT5jeWNsZV9pbnRlcnZhbCA9PSAwKQogCQljLT5jeWNsZV9pbnRlcnZhbCA9IDE7CiAKKwkvKiBHbyBiYWNrIGZyb20gY3ljbGVzIC0+IHNoaWZ0ZWQgbnMsIHRoaXMgdGltZSB1c2UgbnRwIGFkanVzZWQgbXVsdCAqLwogCWMtPnh0aW1lX2ludGVydmFsID0gKHU2NCljLT5jeWNsZV9pbnRlcnZhbCAqIGMtPm11bHQ7CisJYy0+cmF3X2ludGVydmFsID0gKCh1NjQpYy0+Y3ljbGVfaW50ZXJ2YWwgKiBjLT5tdWx0X29yaWcpID4+IGMtPnNoaWZ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGNmOGQxMWMuLmYwNjFhMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtNzgsNyArNzgsNiBAQAogCWNvbXBhdF9zaWdzZXRfd29yZAlzaWdbX0NPTVBBVF9OU0lHX1dPUkRTXTsKIH0gY29tcGF0X3NpZ3NldF90OwogCi1leHRlcm4gaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqLCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICopOwogZXh0ZXJuIGludCBnZXRfY29tcGF0X3RpbWVzcGVjKHN0cnVjdCB0aW1lc3BlYyAqLCBjb25zdCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgcHV0X2NvbXBhdF90aW1lc3BlYyhjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKik7CiAKQEAgLTIzNSw2ICsyMzQsMTEgQEAKIGV4dGVybiBpbnQgcHV0X2NvbXBhdF9pdGltZXJzcGVjKHN0cnVjdCBjb21wYXRfaXRpbWVyc3BlYyBfX3VzZXIgKmRzdCwKIAkJCQkgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKnNyYyk7CiAKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAorCQlzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eik7CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2FkanRpbWV4KHN0cnVjdCBjb21wYXRfdGltZXggX191c2VyICp1dHApOwogCiBleHRlcm4gaW50IGNvbXBhdF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmggYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAppbmRleCAwMjVlNGY1Li4wYWNmM2I3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaApAQCAtOCwxMiArOCw5IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjZGVmaW5lIEVMRkNPUkVfQUREUl9NQVgJKC0xVUxMKQorI2RlZmluZSBFTEZDT1JFX0FERFJfRVJSCSgtMlVMTCkKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotI2VuZGlmCiAKIGV4dGVybiBzc2l6ZV90IGNvcHlfb2xkbWVtX3BhZ2UodW5zaWduZWQgbG9uZywgY2hhciAqLCBzaXplX3QsCiAJCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQpOwpAQCAtMjgsMTAgKzI1LDQzIEBACiAKICNkZWZpbmUgdm1jb3JlX2VsZl9jaGVja19hcmNoKHgpIChlbGZfY2hlY2tfYXJjaCh4KSB8fCB2bWNvcmVfZWxmX2NoZWNrX2FyY2hfY3Jvc3MoeCkpCiAKKy8qCisgKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2YKKyAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWwKKyAqIGhhcyBwYXNzZWQgdGhlIGVsZiBjb3JlIGhlYWRlciBhZGRyZXNzIG9uIGNvbW1hbmQgbGluZS4KKyAqCisgKiBUaGlzIGlzIG5vdCBqdXN0IGEgdGVzdCBpZiBDT05GSUdfQ1JBU0hfRFVNUCBpcyBlbmFibGVkIG9yIG5vdC4gSXQgd2lsbAorICogcmV0dXJuIDEgaWYgQ09ORklHX0NSQVNIX0RVTVA9eSBhbmQgaWYga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZgorICogcHJldmlvdXMga2VybmVsLgorICovCisKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2tkdW1wX2tlcm5lbCh2b2lkKQogewogCXJldHVybiAoZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVgpID8gMSA6IDA7CiB9CisKKy8qIGlzX3ZtY29yZV91c2FibGUoKSBjaGVja3MgaWYgdGhlIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgYW5kCisgKiB0aGUgdm1jb3JlIHJlZ2lvbiBpcyB1c2FibGUuCisgKgorICogVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBkdWUgdG8gYWxpZ25tZW50IC0yVUxMIGlzIG5vdAorICogYSB2YWxpZCBwb2ludGVyLCBtdWNoIGluIHRoZSB2YWluIG9mIElTX0VSUigpLCBleGNlcHQKKyAqIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBhbiB1bnNpZ25lZCBsb25nIGxvbmcgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtY29yZV91c2FibGUodm9pZCkKK3sKKwlyZXR1cm4gaXNfa2R1bXBfa2VybmVsKCkgJiYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9FUlIgPyAxIDogMDsKK30KKworLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSwKKyAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKCkKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX3VudXNhYmxlKHZvaWQpCit7CisJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQorCQllbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSOworfQogI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovCiBzdGF0aWMgaW5saW5lIGludCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyNDY5MzdjLi45ODdmNTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTkwLDYgKzkwLDkgQEAKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpzdGFydCwgdm9pZCAqZGF0YSwKIAkJCQkgIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCB2b2lkICopKTsKIAordm9pZCBidXNfc29ydF9icmVhZHRoZmlyc3Qoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkgICBpbnQgKCpjb21wYXJlKShjb25zdCBzdHJ1Y3QgZGV2aWNlICphLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmIpKTsKIC8qCiAgKiBCdXMgbm90aWZpZXJzOiBHZXQgbm90aWZpZWQgb2YgYWRkaXRpb24vcmVtb3ZhbCBvZiBkZXZpY2VzCiAgKiBhbmQgYmluZGluZy91bmJpbmRpbmcgb2YgZHJpdmVycyB0byBkZXZpY2VzLgpAQCAtNTAyLDcgKzUwNSw2IEBACiAJCQkJICAgIGRldl90IGRldnQsIHZvaWQgKmRydmRhdGEsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCQkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCA1LCA2KSkpOwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2RydmRhdGEJZGV2aWNlX2NyZWF0ZQogZXh0ZXJuIHZvaWQgZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGNsYXNzICpjbHMsIGRldl90IGRldnQpOwogCiAvKgpAQCAtNTUxLDcgKzU1MywxMSBAQAogI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAogCWRldl9wcmludGsoS0VSTl9JTkZPICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogCi0jaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7IFwKKwlkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKIAlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZWxzZQpAQCAtNTY3LDYgKzU3MywxNCBAQAogCSh7IGlmICgwKSBkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZyk7IDA7IH0pCiAjZW5kaWYKIAorLyoKKyAqIGRldl9XQVJOKCkgYWN0cyBsaWtlIGRldl9wcmludGsoKSwgYnV0IHdpdGggdGhlIGtleSBkaWZmZXJlbmNlCisgKiBvZiB1c2luZyBhIFdBUk4vV0FSTl9PTiB0byBnZXQgdGhlIG1lc3NhZ2Ugb3V0LCBpbmNsdWRpbmcgdGhlCisgKiBmaWxlL2xpbmUgaW5mb3JtYXRpb24gYW5kIGEgYmFja3RyYWNlLgorICovCisjZGVmaW5lIGRldl9XQVJOKGRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlXQVJOKDEsICJEZXZpY2U6ICVzXG4iIGZvcm1hdCwgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgIyMgYXJnKTsKKwogLyogQ3JlYXRlIGFsaWFzLCBzbyBJIGNhbiBiZSBhdXRvbG9hZGVkLiAqLwogI2RlZmluZSBNT0RVTEVfQUxJQVNfQ0hBUkRFVihtYWpvcixtaW5vcikgXAogCU1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hX3JlbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvcGNpL2RtYV9yZW1hcHBpbmcuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHMxMjg2LmggYi9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oCmluZGV4IGQ4OTg5ODYuLjQ1ZWEwYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHMxMjg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9kczEyODYuaApAQCAtOCw4ICs4LDYgQEAKICNpZm5kZWYgX19MSU5VWF9EUzEyODZfSAogI2RlZmluZSBfX0xJTlVYX0RTMTI4Nl9ICiAKLSNpbmNsdWRlIDxhc20vZHMxMjg2Lmg+Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiByZWdpc3RlciBzdW1tYXJ5CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCmluZGV4IDZlNGFjZTIuLjc5YThlZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtMTY2LDYgKzE2Niw3IEBACiAJVlNCXzE2LAogCVBTS184LAogCUFQU0tfMTYsCisJQVBTS18zMiwKIAlEUVBTSywKIH0gZmVfbW9kdWxhdGlvbl90OwogCkBAIC0yOTUsNiArMjk2LDcgQEAKIAlTWVNfRFZCQ19BTk5FWF9BQywKIAlTWVNfRFZCQ19BTk5FWF9CLAogCVNZU19EVkJULAorCVNZU19EU1MsCiAJU1lTX0RWQlMsCiAJU1lTX0RWQlMyLAogCVNZU19EVkJILApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTI4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKQEAgLTAsMCArMSw5MyBAQAorI2lmbmRlZiBfRFlOQU1JQ19QUklOVEtfSAorI2RlZmluZSBfRFlOQU1JQ19QUklOVEtfSAorCisjZGVmaW5lIERZTkFNSUNfREVCVUdfSEFTSF9CSVRTIDYKKyNkZWZpbmUgREVCVUdfSEFTSF9UQUJMRV9TSVpFICgxIDw8IERZTkFNSUNfREVCVUdfSEFTSF9CSVRTKQorCisjZGVmaW5lIFRZUEVfQk9PTEVBTiAxCisKKyNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX0FMTCAwCisjZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9OT05FIDEKKyNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX1NPTUUgMgorCitleHRlcm4gaW50IGR5bmFtaWNfZW5hYmxlZDsKKworLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAorICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQorICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7CisKK3N0cnVjdCBtb2RfZGVidWcgeworCWNoYXIgKm1vZG5hbWU7CisJY2hhciAqbG9naWNhbF9tb2RuYW1lOworCWNoYXIgKmZsYWdfbmFtZXM7CisJaW50IHR5cGU7CisJaW50IGhhc2g7CisJaW50IGhhc2gyOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisKK2ludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCisJCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKTsKK2V4dGVybiBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKKwkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCk7CisKKyNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsJICAgICBcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCisJaWYgKHVubGlrZWx5KChkeW5hbWljX3ByaW50a19lbmFibGVkICYgKDFMTCA8PCBERUJVR19IQVNIKSkgJiYJICAgICBcCisJCQkoZHluYW1pY19wcmludGtfZW5hYmxlZDIgJiAoMUxMIDw8IERFQlVHX0hBU0gyKSkpKSAgIFwKKwkJCV9fcmV0ID0gX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihtb2R1bGUsIHR5cGUsICAgXAorCQkJCQkJCQl2YWx1ZSwgaGFzaCk7XAorCV9fcmV0OyB9KQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCSAgICBcCisJc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKKwkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAorCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKKwlfX3VzZWQJCQkJCQkJCSAgICBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAorCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCisJCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjoiIGZtdCwJCSAgICBcCisJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJCSAgICBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8gewkJCQkgICAgXAorCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCisJID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKKwlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCisJX191c2VkCQkJCQkJCQkgICAgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKKwl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAorCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQkgICAgXAorCQkJCQlLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCwJICAgIFwKKwkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJICAgIFwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKKwkJCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsgMDsgfSkKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCmluZGV4IDJlZmU3YjguLjc4Yzc3NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaWZkZWYgRVhUMkZTX0RFQlVHCiAjCWRlZmluZSBleHQyX2RlYnVnKGYsIGEuLi4pCXsgXAogCQkJCQlwcmludGsgKCJFWFQyLWZzIERFQlVHICglcywgJWQpOiAlczoiLCBcCi0JCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOyBcCiAJCQkJICAJcHJpbnRrIChmLCAjIyBhKTsgXAogCQkJCQl9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCA4MTIwZmExLi5kMTRmMDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtNDMsNyArNDMsNyBAQAogI2RlZmluZSBleHQzX2RlYnVnKGYsIGEuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJcHJpbnRrIChLRVJOX0RFQlVHICJFWFQzLWZzIERFQlVHICglcywgJWQpOiAlczoiLAlcCi0JCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJCVwKIAkJcHJpbnRrIChLRVJOX0RFQlVHIGYsICMjIGEpOwkJCQlcCiAJfSB3aGlsZSAoMCkKICNlbHNlCkBAIC0zODAsNiArMzgwLDggQEAKICNkZWZpbmUgRVhUM19NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUM19NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQzX01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLworI2RlZmluZSBFWFQzX01PVU5UX0RBVEFfRVJSX0FCT1JUCTB4NDAwMDAwIC8qIEFib3J0IG9uIGZpbGUgZGF0YSB3cml0ZQorCQkJCQkJICAqIGVycm9yIGluIG9yZGVyZWQgbW9kZSAqLwogCiAvKiBDb21wYXRpYmlsaXR5LCBmb3IgaGF2aW5nIGJvdGggZXh0Ml9mcy5oIGFuZCBleHQzX2ZzLmggaW5jbHVkZWQgYXQgb25jZSAqLwogI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICkBAIC04NzEsNyArODczLDcgQEAKICNkZWZpbmUgZXh0M19zdGRfZXJyb3Ioc2IsIGVycm5vKQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJaWYgKChlcnJubykpCQkJCQkJXAotCQlfX2V4dDNfc3RkX2Vycm9yKChzYiksIF9fRlVOQ1RJT05fXywgKGVycm5vKSk7CVwKKwkJX19leHQzX3N0ZF9lcnJvcigoc2IpLCBfX2Z1bmNfXywgKGVycm5vKSk7CVwKIH0gd2hpbGUgKDApCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKaW5kZXggOGM0M2IxMy4uY2Y4MmQ1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaApAQCAtMTM3LDE3ICsxMzcsMTcgQEAKIAkJCQloYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAogI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJoKSkKKwlfX2V4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKSBcCi0JX19leHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfcmV2b2tlKGhhbmRsZSwgYmxvY2tuciwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9yZXZva2UoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJsb2NrbnIpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX3Jldm9rZShfX2Z1bmNfXywgKGhhbmRsZSksIChibG9ja25yKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2ZvcmdldChoYW5kbGUsIGJoKSBcCi0JX19leHQzX2pvdXJuYWxfZm9yZ2V0KF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisJX19leHQzX2pvdXJuYWxfZm9yZ2V0KF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKIAogaW50IGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCkBAIC0xNjAsNyArMTYwLDcgQEAKIH0KIAogI2RlZmluZSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpIFwKLQlfX2V4dDNfam91cm5hbF9zdG9wKF9fRlVOQ1RJT05fXywgKGhhbmRsZSkpCisJX19leHQzX2pvdXJuYWxfc3RvcChfX2Z1bmNfXywgKGhhbmRsZSkpCiAKIHN0YXRpYyBpbmxpbmUgaGFuZGxlX3QgKmV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IDUzMWNjZDUuLjc1YTgxZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTgwOCw2ICs4MDgsNyBAQAogc3RydWN0IGZiX2luZm8gewogCWludCBub2RlOwogCWludCBmbGFnczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIExvY2sgZm9yIG9wZW4vcmVsZWFzZS9pb2N0bCBmdW5jcyAqLwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7CS8qIEN1cnJlbnQgdmFyICovCiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsJLyogQ3VycmVudCBmaXggKi8KIAlzdHJ1Y3QgZmJfbW9uc3BlY3MgbW9uc3BlY3M7CS8qIEN1cnJlbnQgTW9uaXRvciBzcGVjcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCAwZjBlMjcxLi40ZDA3OGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMTU0LDggKzE1NCwxMyBAQAogICogQHJlcXVlc3Q6ICAgICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUCiAgKiBAaXNvX2ludGVycnVwdDogVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQKICAqCi0gKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYSBjaGFyCi0gKiBidWZmZXIgYW5kIHRoZW4gY2FzdCB0byB0aGlzIHVuaW9uIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KKyAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKKyAqIHByb2Nlc3NpbmcuICBOb3RlIHRoYXQgZm9yIGEgcmVxdWVzdCwgcmVzcG9uc2Ugb3IgaXNvX2ludGVycnVwdCBldmVudCwKKyAqIHRoZSBkYXRhW10gb3IgaGVhZGVyW10gbWF5IG1ha2UgdGhlIHNpemUgb2YgdGhlIGZ1bGwgZXZlbnQgbGFyZ2VyIHRoYW4KKyAqIHNpemVvZih1bmlvbiBmd19jZGV2X2V2ZW50KS4gIEFsc28gbm90ZSB0aGF0IGlmIHlvdSBhdHRlbXB0IHRvIHJlYWQoMikKKyAqIGFuIGV2ZW50IGludG8gYSBidWZmZXIgdGhhdCBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciBpdCwgdGhlIGRhdGEgdGhhdCBkb2VzCisgKiBub3QgZml0IHdpbGwgYmUgZGlzY2FyZGVkIHNvIHRoYXQgdGhlIG5leHQgcmVhZCgyKSB3aWxsIHJldHVybiBhIG5ldyBldmVudC4KICAqLwogdW5pb24gZndfY2Rldl9ldmVudCB7CiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uIGNvbW1vbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGVkZGVlZC4uOGYyMjUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNpZmRlZiBDT05GSUdfRlJFRVpFUgogLyoKICAqIENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgYmVlbiBmcm96ZW4KICAqLwpAQCAtMzksMjggKzM5LDE4IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9GUkVFWkUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOworfQorCiAvKgogICogV2FrZSB1cCBhIGZyb3plbiBwcm9jZXNzCi0gKgotICogdGFza19sb2NrKCkgaXMgdGFrZW4gdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQotICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKLSAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KLSAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQotICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl0YXNrX2xvY2socCk7Ci0JaWYgKGZyb3plbihwKSkgewotCQlwLT5mbGFncyAmPSB+UEZfRlJPWkVOOwotCQl0YXNrX3VubG9jayhwKTsKLQkJd2FrZV91cF9wcm9jZXNzKHApOwotCQlyZXR1cm4gMTsKLQl9Ci0JY2xlYXJfZnJlZXplX2ZsYWcocCk7Ci0JdGFza191bmxvY2socCk7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFRha2VzIGFuZCByZWxlYXNlcyB0YXNrIGFsbG9jIGxvY2sgdXNpbmcgdGFza19sb2NrKCkgKi8KK2V4dGVybiBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIGV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKTsKIGV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTsKQEAgLTc1LDYgKzY1LDE1IEBACiAJCXJldHVybiAwOwogfQogCitleHRlcm4gYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpOworZXh0ZXJuIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK2V4dGVybiBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBfRlJFRVpFUiAqLworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUF9GUkVFWkVSICovCisKIC8qCiAgKiBUaGUgUEZfRlJFRVpFUl9TS0lQIGZsYWcgc2hvdWxkIGJlIHNldCBieSBhIHZmb3JrIHBhcmVudCByaWdodCBiZWZvcmUgaXQKICAqIGNhbGxzIHdhaXRfZm9yX2NvbXBsZXRpb24oJnZmb3JrKSBhbmQgcmVzZXQgcmlnaHQgYWZ0ZXIgaXQgcmV0dXJucyBmcm9tIHRoaXMKQEAgLTE2Niw3ICsxNjUsNyBAQAogCX0gd2hpbGUgKHRyeV90b19mcmVlemUoKSk7CQkJCQlcCiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCi0jZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZWxzZSAvKiAhQ09ORklHX0ZSRUVaRVIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlemVfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CkBAIC0xOTEsNiArMTkwLDYgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT05GSUdfRlJFRVpFUiAqLwogCiAjZW5kaWYJLyogRlJFRVpFUl9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1c2UuaCBiL2luY2x1ZGUvbGludXgvZnVzZS5oCmluZGV4IDI2NTYzNWQuLjM1MGZlOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnVzZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnVzZS5oCkBAIC0xNyw4ICsxNywxNCBAQAogICogIC0gYWRkIGxvY2tfb3duZXIgZmllbGQgdG8gZnVzZV9zZXRhdHRyX2luLCBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KICAqICAtIGFkZCBibGtzaXplIGZpZWxkIHRvIGZ1c2VfYXR0cgogICogIC0gYWRkIGZpbGUgZmxhZ3MgZmllbGQgdG8gZnVzZV9yZWFkX2luIGFuZCBmdXNlX3dyaXRlX2luCisgKgorICogNy4xMAorICogIC0gYWRkIG5vbnNlZWthYmxlIG9wZW4gZmxhZwogICovCiAKKyNpZm5kZWYgX0xJTlVYX0ZVU0VfSAorI2RlZmluZSBfTElOVVhfRlVTRV9ICisKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogCkBAIC0yNiw3ICszMiw3IEBACiAjZGVmaW5lIEZVU0VfS0VSTkVMX1ZFUlNJT04gNwogCiAvKiogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA5CisjZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMTAKIAogLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovCiAjZGVmaW5lIEZVU0VfUk9PVF9JRCAxCkBAIC05OCw5ICsxMDQsMTEgQEAKICAqCiAgKiBGT1BFTl9ESVJFQ1RfSU86IGJ5cGFzcyBwYWdlIGNhY2hlIGZvciB0aGlzIG9wZW4gZmlsZQogICogRk9QRU5fS0VFUF9DQUNIRTogZG9uJ3QgaW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZSBvbiBvcGVuCisgKiBGT1BFTl9OT05TRUVLQUJMRTogdGhlIGZpbGUgaXMgbm90IHNlZWthYmxlCiAgKi8KICNkZWZpbmUgRk9QRU5fRElSRUNUX0lPCQkoMSA8PCAwKQogI2RlZmluZSBGT1BFTl9LRUVQX0NBQ0hFCSgxIDw8IDEpCisjZGVmaW5lIEZPUEVOX05PTlNFRUtBQkxFCSgxIDw8IDIpCiAKIC8qKgogICogSU5JVCByZXF1ZXN0L3JlcGx5IGZsYWdzCkBAIC00MDksMyArNDE3LDUgQEAKICNkZWZpbmUgRlVTRV9ESVJFTlRfQUxJR04oeCkgKCgoeCkgKyBzaXplb2YoX191NjQpIC0gMSkgJiB+KHNpemVvZihfX3U2NCkgLSAxKSkKICNkZWZpbmUgRlVTRV9ESVJFTlRfU0laRShkKSBcCiAJRlVTRV9ESVJFTlRfQUxJR04oRlVTRV9OQU1FX09GRlNFVCArIChkKS0+bmFtZWxlbikKKworI2VuZGlmIC8qIF9MSU5VWF9GVVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaCBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAppbmRleCBmNjRlMjljLi4wY2Q4MjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCkBAIC0xNDYsMTAgKzE0NiwxMSBAQAogCW11dGV4X3VubG9jaygmZ2FtZXBvcnQtPmRydl9tdXRleCk7CiB9CiAKLXZvaWQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKK2ludCBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsCisJCQkJc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKTsKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KQogewotCV9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKGRydiwgVEhJU19NT0RVTEUpOworCXJldHVybiBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFLCBLQlVJTERfTU9ETkFNRSk7CiB9CiAKIHZvaWQgZ2FtZXBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKaW5kZXggNzMwYTIwYi4uZTEwYzQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKQEAgLTgsNiArOCw3IEBACiAKICNlbHNlCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKQEAgLTMyLDYgKzMzLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkICovCiAJV0FSTl9PTigxKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggMmYyNDVmZS4uOWE0ZTM1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTEyNSwxMiArMTI1LDEyIEBACiAJZW51bSBocnRpbWVyX3Jlc3RhcnQJCSgqZnVuY3Rpb24pKHN0cnVjdCBocnRpbWVyICopOwogCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UJKmJhc2U7CiAJdW5zaWduZWQgbG9uZwkJCXN0YXRlOwotCWVudW0gaHJ0aW1lcl9jYl9tb2RlCQljYl9tb2RlOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNiX2VudHJ5OworCWVudW0gaHJ0aW1lcl9jYl9tb2RlCQljYl9tb2RlOwogI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUworCWludAkJCQlzdGFydF9waWQ7CiAJdm9pZAkJCQkqc3RhcnRfc2l0ZTsKIAljaGFyCQkJCXN0YXJ0X2NvbW1bMTZdOwotCWludAkJCQlzdGFydF9waWQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1NSwxMCArMTU1LDggQEAKICAqIEBmaXJzdDoJCXBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgd2hpY2ggZXhwaXJlcyBmaXJzdAogICogQHJlc29sdXRpb246CQl0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2ssIGluIG5hbm9zZWNvbmRzCiAgKiBAZ2V0X3RpbWU6CQlmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jawotICogQGdldF9zb2Z0aXJxX3RpbWU6CWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUgc29mdGlycQogICogQHNvZnRpcnFfdGltZToJdGhlIHRpbWUgd2hlbiBydW5uaW5nIHRoZSBocnRpbWVyIHF1ZXVlIGluIHRoZSBzb2Z0aXJxCiAgKiBAb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoaXMgY2xvY2sgdG8gdGhlIG1vbm90b25pYyBiYXNlCi0gKiBAcmVwcm9ncmFtOgkJZnVuY3Rpb24gdG8gcmVwcm9ncmFtIHRoZSB0aW1lciBldmVudAogICovCiBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZQkqY3B1X2Jhc2U7CkBAIC0xNjcsMTMgKzE2NSw5IEBACiAJc3RydWN0IHJiX25vZGUJCSpmaXJzdDsKIAlrdGltZV90CQkJcmVzb2x1dGlvbjsKIAlrdGltZV90CQkJKCpnZXRfdGltZSkodm9pZCk7Ci0Ja3RpbWVfdAkJCSgqZ2V0X3NvZnRpcnFfdGltZSkodm9pZCk7CiAJa3RpbWVfdAkJCXNvZnRpcnFfdGltZTsKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAJa3RpbWVfdAkJCW9mZnNldDsKLQlpbnQJCQkoKnJlcHJvZ3JhbSkoc3RydWN0IGhydGltZXIgKnQsCi0JCQkJCSAgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYiwKLQkJCQkJICAgICBrdGltZV90IG4pOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCA0OTM0MzViLi4wMWQ2N2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODc3NQk2OQkvKiB3bTg3NzUgYXVkaW8gcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9DUzUzTDMyQQk3MAkvKiBjczUzbDMyYSBhdWRpbyBwcm9jZXNzb3IJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0NYMjU4NDAJNzEJLyogY3gyNTg0eCB2aWRlbyBlbmNvZGVyCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTI3CTcyCS8qIHNhYTcxMjQgdmlkZW8gZW5jb2RlcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI3IHZpZGVvIGVuY29kZXIJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMVgJNzMJLyogc2FhNzExeCB2aWRlbyBlbmNvZGVycwkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQUtJVEFJT0VYUAk3NAkvKiBJTyBFeHBhbmRlciBvbiBTaGFycCBTTC1DMTAwMCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfSU5GUkFSRUQJNzUJLyogSTJDIEluZnJhUmVkIG9uIFZpZGVvIGJvYXJkcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjQ1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiB0d2w0MDMwLmggLSBoZWFkZXIgZm9yIFRXTDQwMzAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fVFdMNDAzMF9IXworI2RlZmluZSBfX1RXTDQwMzBfSF8KKworLyoKKyAqIFVzaW5nIHRoZSB0d2w0MDMwIGNvcmUgd2UgYWRkcmVzcyByZWdpc3RlcnMgdXNpbmcgYSBwYWlyCisgKgl7IG1vZHVsZSBpZCwgcmVsYXRpdmUgcmVnaXN0ZXIgb2Zmc2V0IH0KKyAqIHdoaWNoIHRoYXQgY29yZSB0aGVuIG1hcHMgdG8gdGhlIHJlbGV2YW50CisgKgl7IGkyYyBzbGF2ZSwgYWJzb2x1dGUgcmVnaXN0ZXIgYWRkcmVzcyB9CisgKgorICogVGhlIG1vZHVsZSBJRHMgYXJlIG1lYW5pbmdmdWwgb25seSB0byB0aGUgdHdsNDAzMCBjb3JlIGNvZGUsCisgKiB3aGljaCB1c2VzIHRoZW0gYXMgYXJyYXkgaW5kaWNlcyB0byBsb29rIHVwIHRoZSBmaXJzdCByZWdpc3RlcgorICogYWRkcmVzcyBlYWNoIG1vZHVsZSB1c2VzIHdpdGhpbiBhIGdpdmVuIGkyYyBzbGF2ZS4KKyAqLworCisvKiBTbGF2ZSAwIChpMmMgYWRkcmVzcyAweDQ4KSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9VU0IJCTB4MDAKKworLyogU2xhdmUgMSAoaTJjIGFkZHJlc3MgMHg0OSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UJMHgwMQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9HUElPCQkweDAyCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEJSCQkweDAzCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BJSAkJMHgwNAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9URVNUCQkweDA1CisKKy8qIFNsYXZlIDIgKGkyYyBhZGRyZXNzIDB4NGEpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0tFWVBBRAkJMHgwNgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9NQURDCQkweDA3CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMJMHgwOAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MRUQJCTB4MDkKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTUFJTl9DSEFSR0UJMHgwQQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QUkVDSEFSR0UJMHgwQgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV00wCQkweDBDCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTTEJCTB4MEQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNQQkJMHgwRQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV01CCQkweDBGCisKKy8qIFNsYXZlIDMgKGkyYyBhZGRyZXNzIDB4NGIpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0JBQ0tVUAkJMHgxMAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlQJCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIJMHgxMworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9SVEMJCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcJMHgxNQorCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2luZ2xlIDgtYml0IHJlZ2lzdGVycworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWwsIHU4IHJlZyk7CitpbnQgdHdsNDAzMF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWwsIHU4IHJlZyk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSBzZXZlcmFsIDgtYml0IHJlZ2lzdGVycyBhdCBvbmNlLgorICoKKyAqIElNUE9SVEFOVDogIEZvciB0d2w0MDMwX2kyY193cml0ZSgpLCBhbGxvY2F0ZSBudW1fYnl0ZXMgKyAxCisgKiBmb3IgdGhlIHZhbHVlLCBhbmQgcG9wdWxhdGUgeW91ciBkYXRhIHN0YXJ0aW5nIGF0IG9mZnNldCAxLgorICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKTsKK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOT1RFOiAgYXQgdXAgdG8gMTAyNCByZWdpc3RlcnMsIHRoaXMgaXMgYSBiaWcgY2hpcC4KKyAqCisgKiBBdm9pZCBwdXR0aW5nIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGlzIGZpbGUsIGluc3RlYWQgb2YgaW50bworICogYSBkcml2ZXItcHJpdmF0ZSBmaWxlLCB1bmxlc3Mgc29tZSBvZiB0aGUgcmVnaXN0ZXJzIGluIGEgYmxvY2sKKyAqIG5lZWQgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycy4gIE9uZSBleGFtcGxlIGlzIGJsb2NrcyB0aGF0CisgKiBoYXZlIFNlY29uZGFyeSBJUlEgSGFuZGxlciAoU0lIKSByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0VYQ0xFTl9NQVNLCUJJVCgwKQorI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX1BFTkRESVNfTUFTSwlCSVQoMSkKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSwlCSVQoMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdQSU8gQmxvY2sgUmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKi8KKworI2RlZmluZSBSRUdfR1BJT0RBVEFJTjEJCQkweDAKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4yCQkJMHgxCisjZGVmaW5lIFJFR19HUElPREFUQUlOMwkJCTB4MgorI2RlZmluZSBSRUdfR1BJT0RBVEFESVIxCQkweDMKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMgkJMHg0CisjZGVmaW5lIFJFR19HUElPREFUQURJUjMJCTB4NQorI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQxCQkweDYKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMgkJMHg3CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDMJCTB4OAorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDEJCTB4OQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDIJCTB4QQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDMJCTB4QgorI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQxCQkweEMKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMgkJMHhECisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDMJCTB4RQorI2RlZmluZSBSRUdfR1BJT19ERUJFTjEJCQkweEYKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4yCQkJMHgxMAorI2RlZmluZSBSRUdfR1BJT19ERUJFTjMJCQkweDExCisjZGVmaW5lIFJFR19HUElPX0NUUkwJCQkweDEyCisjZGVmaW5lIFJFR19HUElPUFVQRENUUjEJCTB4MTMKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMgkJMHgxNAorI2RlZmluZSBSRUdfR1BJT1BVUERDVFIzCQkweDE1CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjQJCTB4MTYKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNQkJMHgxNworI2RlZmluZSBSRUdfR1BJT19JU1IxQQkJCTB4MTkKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkEJCQkweDFBCisjZGVmaW5lIFJFR19HUElPX0lTUjNBCQkJMHgxQgorI2RlZmluZSBSRUdfR1BJT19JTVIxQQkJCTB4MUMKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkEJCQkweDFECisjZGVmaW5lIFJFR19HUElPX0lNUjNBCQkJMHgxRQorI2RlZmluZSBSRUdfR1BJT19JU1IxQgkJCTB4MUYKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkIJCQkweDIwCisjZGVmaW5lIFJFR19HUElPX0lTUjNCCQkJMHgyMQorI2RlZmluZSBSRUdfR1BJT19JTVIxQgkJCTB4MjIKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkIJCQkweDIzCisjZGVmaW5lIFJFR19HUElPX0lNUjNCCQkJMHgyNAorI2RlZmluZSBSRUdfR1BJT19FRFIxCQkJMHgyOAorI2RlZmluZSBSRUdfR1BJT19FRFIyCQkJMHgyOQorI2RlZmluZSBSRUdfR1BJT19FRFIzCQkJMHgyQQorI2RlZmluZSBSRUdfR1BJT19FRFI0CQkJMHgyQgorI2RlZmluZSBSRUdfR1BJT19FRFI1CQkJMHgyQworI2RlZmluZSBSRUdfR1BJT19TSUhfQ1RSTAkJMHgyRAorCisvKiBVcCB0byAxOCBzaWduYWxzIGFyZSBhdmFpbGFibGUgYXMgR1BJT3MsIHdoZW4gdGhlaXIKKyAqIHBpbnMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbm90aGVyIHVzZSAoc3VjaCBhcyBVTFBJL1VTQikuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9HUElPX01BWAkJMTgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEtleXBhZCByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfS0VZUEFEKQorICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyCTB4MTMKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9TSVIJCTB4MTUJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0VEUgkJMHgxNgorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMCTB4MTcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE11bHRpY2hhbm5lbCBBREMgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX01BREMpCisgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CisgKi8KKworI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMQkJMHg2MQorI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMQkJMHg2MgorI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMgkJMHg2MworI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMgkJMHg2NAorI2RlZmluZSBUV0w0MDMwX01BRENfU0lSCQkweDY1CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9NQURDX0VEUgkJMHg2NgorI2RlZmluZSBUV0w0MDMwX01BRENfU0lIX0NUUkwJCTB4NjcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJhdHRlcnkgY2hhcmdlciByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUykKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQQkweDAKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBCTB4MQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUEJMHgyCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQQkweDMKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCCTB4NAorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQgkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCCTB4NworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMQkweDgJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMgkweDkJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMQkweGEKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjIJMHhiCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIzCTB4YworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTAkweGQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFBvd2VyIEludGVycnVwdCBibG9jayByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5UKQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjEJCTB4MAorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMQkJMHgxCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JU1IyCQkweDIKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lNUjIJCTB4MworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lSCQkweDQJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfRURSMQkJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIyCQkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMCTB4NworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YSB7CisJaW50ICpiYXR0ZXJ5X3RtcF90Ymw7CisJdW5zaWduZWQgaW50IHRibHNpemU7Cit9OworCisvKiBUV0w0MDMwX0dQSU9fTUFYICgxOCkgR1BJT3MsIHdpdGggaW50ZXJydXB0cyAqLworc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCWdwaW9fYmFzZTsKKwl1bnNpZ25lZAlpcnFfYmFzZSwgaXJxX2VuZDsKKworCS8qIEZvciBncGlvLU4sIGJpdCAoMSA8PCBOKSBpbiAicHVsbHVwcyIgaXMgc2V0IGlmIHRoYXQgcHVsbHVwCisJICogc2hvdWxkIGJlIGVuYWJsZWQuICBFbHNlLCBpZiB0aGF0IGJpdCBpcyBzZXQgaW4gInB1bGxkb3ducyIsCisJICogdGhhdCBwdWxsZG93biBpcyBlbmFibGVkLiAgRG9uJ3Qgd2FzdGUgcG93ZXIgYnkgbGV0dGluZyBhbnkKKwkgKiBkaWdpdGFsIGlucHV0cyBmbG9hdC4uLgorCSAqLworCXUzMgkJcHVsbHVwczsKKwl1MzIJCXB1bGxkb3duczsKKworCWludAkJKCpzZXR1cCkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKTsKKwlpbnQJCSgqdGVhcmRvd24pKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbyk7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEgeworCWludAkJaXJxX2xpbmU7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7CisJaW50IHJvd3M7CisJaW50IGNvbHM7CisJaW50ICprZXltYXA7CisJaW50IGlycTsKKwl1bnNpZ25lZCBpbnQga2V5bWFwc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmVwOjE7Cit9OworCitlbnVtIHR3bDQwMzBfdXNiX21vZGUgeworCVQyX1VTQl9NT0RFX1VMUEkgPSAxLAorCVQyX1VTQl9NT0RFX0NFQTIwMTFfM1BJTiA9IDIsCit9OworCitzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSB7CisJZW51bSB0d2w0MDMwX3VzYl9tb2RlCXVzYl9tb2RlOworfTsKKworc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQJCQkJaXJxX2Jhc2UsIGlycV9lbmQ7CisJc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEJKmJjaTsKKwlzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEJKmdwaW87CisJc3RydWN0IHR3bDQwMzBfbWFkY19wbGF0Zm9ybV9kYXRhCSptYWRjOworCXN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhCQkqa2V5cGFkOworCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhCQkJKnVzYjsKKworCS8qIFJFVklTSVQgbW9yZSB0byBjb21lIC4uLiBfbm90aGluZ18gc2hvdWxkIGJlIGhhcmQtd2lyZWQgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBGSVhNRSBjb21wbGV0ZWx5IHN0b3AgdXNpbmcgVFdMNDAzMF9JUlFfQkFTRSAuLi4gaW5zdGVhZCwgcGFzcyB0aGUKKyAqIElSUSBkYXRhIHRvIHN1YnNpZGlhcnkgZGV2aWNlcyB1c2luZyBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2VzLgorICovCisKKy8qIElSUSBpbmZvcm1hdGlvbi1uZWVkIGJhc2UgKi8KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKy8qIFRXTDQwMzAgaW50ZXJydXB0cyAqLworCisvKiAjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0dQSU8JCShUV0w0MDMwX0lSUV9CQVNFICsgMCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfS0VZUEFECQkoVFdMNDAzMF9JUlFfQkFTRSArIDEpCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0JDSQkJKFRXTDQwMzBfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBUV0w0MDMwX01PRElSUV9NQURDCQkoVFdMNDAzMF9JUlFfQkFTRSArIDMpCisvKiAjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX1VTQgkJKFRXTDQwMzBfSVJRX0JBU0UgKyA0KSAqLworI2RlZmluZSBUV0w0MDMwX01PRElSUV9QV1IJCShUV0w0MDMwX0lSUV9CQVNFICsgNSkKKworI2RlZmluZSBUV0w0MDMwX1BXUklSUV9QV1JCVE4JCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDApCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX0NIR19QUkVTCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9VU0JfUFJFUwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUlRDCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAzKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9IT1RfRElFCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9QV1JPS19USU1FT1VUCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDUpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX01CQ0hHCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA2KQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9TQ19ERVRFQ1QJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNykKKworLyogUmVzdCBhcmUgdW5zdWVkIGN1cnJlbnRseSovCisKKy8qIE9mZnNldHMgdG8gUG93ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFRXTDQwMzBfVkRBQ19ERVZfR1JQCQkweDNCCisjZGVmaW5lIFRXTDQwMzBfVkRBQ19ERURJQ0FURUQJCTB4M0UKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMV9ERVZfR1JQCQkweDE3CisjZGVmaW5lIFRXTDQwMzBfVkFVWDFfREVESUNBVEVECQkweDFBCisjZGVmaW5lIFRXTDQwMzBfVkFVWDJfREVWX0dSUAkJMHgxQgorI2RlZmluZSBUV0w0MDMwX1ZBVVgyX0RFRElDQVRFRAkJMHgxRQorI2RlZmluZSBUV0w0MDMwX1ZBVVgzX0RFVl9HUlAJCTB4MUYKKyNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERURJQ0FURUQJCTB4MjIKKworLyogVFdMNDAzMCBHUElPIGludGVycnVwdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFRXTDQwMzBfR1BJT19JUlFfTk8obikJCShUV0w0MDMwX0dQSU9fSVJRX0JBU0UgKyAobikpCisjZGVmaW5lIFRXTDQwMzBfR1BJT19JU19FTkFCTEUJCTEKKworLyoKKyAqIEV4cG9ydGVkIFRXTDQwMzAgR1BJTyBBUElzCisgKgorICogV0FSTklORyAtLSB1c2Ugc3RhbmRhcmQgR1BJTyBhbmQgSVJRIGNhbGxzIGluc3RlYWQ7IHRoZXNlIHdpbGwgdmFuaXNoLgorICovCitpbnQgdHdsNDAzMF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pOworaW50IHR3bDQwMzBfcmVxdWVzdF9ncGlvKGludCBncGlvKTsKK2ludCB0d2w0MDMwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKK2ludCB0d2w0MDMwX2ZyZWVfZ3BpbyhpbnQgZ3Bpbyk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCisJZXh0ZXJuIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSk7CisjZWxzZQorCXN0YXRpYyBpbmxpbmUgaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworI2VuZGlmIC8qIEVuZCBvZiBfX1RXTDQwMzBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKaW5kZXggNzVhZTZkOC4uNGM0ZTU3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby5oCkBAIC01NzAsNyArNTcwLDYgQEAKICNlbmRpZgogCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayBmb3IgY29udHJvbGxlcgogCQkJCSAgIGNvbmZpZ3VyYXRpb24gKi8KLQogCXZvaWQgKmRyaXZlcl9kYXRhW0kyT19NQVhfRFJJVkVSU107CS8qIHN0b3JhZ2UgZm9yIGRyaXZlcnMgKi8KIH07CiAKQEAgLTY5MSwyODkgKzY5MCwyMiBAQAogfTsKICNlbmRpZgogCi0vKioKLSAqCWkyb19zZ190YWJsZXNpemUgLSBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgU0dMCi0gKglAYzogSTJPIGNvbnRyb2xsZXIgZm9yIHdoaWNoIHRoZSBjYWxjdWxhdGlvbiBzaG91bGQgYmUgZG9uZQotICoJQGJvZHlfc2l6ZTogbWF4aW11bSBib2R5IHNpemUgdXNlZCBmb3IgbWVzc2FnZSBpbiAzMi1iaXQgd29yZHMuCi0gKgotICoJUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBTRyBlbGVtZW50cyBpbiBhIFNHIGxpc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGkyb19zZ190YWJsZXNpemUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB1MTYgYm9keV9zaXplKQotewotCWkyb19zdGF0dXNfYmxvY2sgKnNiID0gYy0+c3RhdHVzX2Jsb2NrLnZpcnQ7Ci0JdTE2IHNnX2NvdW50ID0KLQkgICAgKHNiLT5pbmJvdW5kX2ZyYW1lX3NpemUgLSBzaXplb2Yoc3RydWN0IGkyb19tZXNzYWdlKSAvIDQpIC0KLQkgICAgYm9keV9zaXplOwotCi0JaWYgKGMtPnBhZV9zdXBwb3J0KSB7Ci0JCS8qCi0JCSAqIGZvciA2NC1iaXQgYSBTRyBhdHRyaWJ1dGUgZWxlbWVudCBtdXN0IGJlIGFkZGVkIGFuZCBlYWNoCi0JCSAqIFNHIGVsZW1lbnQgbmVlZHMgMTIgYnl0ZXMgaW5zdGVhZCBvZiA4LgotCQkgKi8KLQkJc2dfY291bnQgLT0gMjsKLQkJc2dfY291bnQgLz0gMzsKLQl9IGVsc2UKLQkJc2dfY291bnQgLz0gMjsKLQotCWlmIChjLT5zaG9ydF9yZXEgJiYgKHNnX2NvdW50ID4gOCkpCi0JCXNnX2NvdW50ID0gODsKLQotCXJldHVybiBzZ19jb3VudDsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9tYXBfc2luZ2xlIC0gTWFwIHBvaW50ZXIgdG8gY29udHJvbGxlciBhbmQgZmlsbCBpbiBJMk8gbWVzc2FnZS4KLSAqCUBjOiBJMk8gY29udHJvbGxlcgotICoJQHB0cjogcG9pbnRlciB0byB0aGUgZGF0YSB3aGljaCBzaG91bGQgYmUgbWFwcGVkCi0gKglAc2l6ZTogc2l6ZSBvZiBkYXRhIGluIGJ5dGVzCi0gKglAZGlyZWN0aW9uOiBETUFfVE9fREVWSUNFIC8gRE1BX0ZST01fREVWSUNFCi0gKglAc2dfcHRyOiBwb2ludGVyIHRvIHRoZSBTRyBsaXN0IGluc2lkZSB0aGUgSTJPIG1lc3NhZ2UKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIG5lY2Vzc2FyeSBETUEgaGFuZGxpbmcgYW5kIGFsc28gd3JpdGVzIHRoZSBJMk8KLSAqCVNHTCBlbGVtZW50cyBpbnRvIHRoZSBJMk8gbWVzc2FnZS4gRm9yIGRldGFpbHMgb24gRE1BIGhhbmRsaW5nIHNlZSBhbHNvCi0gKglkbWFfbWFwX3NpbmdsZSgpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZQotICoJU0cgbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqCi0gKglSZXR1cm5zIERNQSBhZGRyZXNzIHdoaWNoIG11c3QgYmUgY2hlY2tlZCBmb3IgZmFpbHVyZXMgdXNpbmcKLSAqCWRtYV9tYXBwaW5nX2Vycm9yKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpMm9fZG1hX21hcF9zaW5nbGUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB2b2lkICpwdHIsCitleHRlcm4gdTE2IGkyb19zZ190YWJsZXNpemUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB1MTYgYm9keV9zaXplKTsKK2V4dGVybiBkbWFfYWRkcl90IGkyb19kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHZvaWQgKnB0ciwKIAkJCQkJICAgIHNpemVfdCBzaXplLAogCQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkgICAgdTMyICoqIHNnX3B0cikKLXsKLQl1MzIgc2dfZmxhZ3M7Ci0JdTMyICptcHRyID0gKnNnX3B0cjsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9UT19ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHhkNDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHhkMDAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7Ci0JaWYgKCFkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfYWRkcikpIHsKLSNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0Ci0JCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpIHsKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOwotCQl9Ci0jZW5kaWYKLQotCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzaXplKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KGRtYV9hZGRyKSk7Ci0jaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAotCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KQotCQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfaGlnaChkbWFfYWRkcikpOwotI2VuZGlmCi0JCSpzZ19wdHIgPSBtcHRyOwotCX0KLQlyZXR1cm4gZG1hX2FkZHI7Ci19OwotCi0vKioKLSAqCWkyb19kbWFfbWFwX3NnIC0gTWFwIGEgU0cgTGlzdCB0byBjb250cm9sbGVyIGFuZCBmaWxsIGluIEkyTyBtZXNzYWdlLgotICoJQGM6IEkyTyBjb250cm9sbGVyCi0gKglAc2c6IFNHIGxpc3QgdG8gYmUgbWFwcGVkCi0gKglAc2dfY291bnQ6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgU0cgbGlzdAotICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQotICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCi0gKgotICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCi0gKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbwotICoJZG1hX21hcF9zZygpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZSBTRwotICoJbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqCi0gKglSZXR1cm5zIDAgb24gZmFpbHVyZSBvciAxIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19kbWFfbWFwX3NnKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywKKwkJCQkJICAgIHUzMiAqKiBzZ19wdHIpOworZXh0ZXJuIGludCBpMm9fZG1hX21hcF9zZyhzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsCiAJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBzZ19jb3VudCwKIAkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCSB1MzIgKiogc2dfcHRyKQotewotCXUzMiBzZ19mbGFnczsKLQl1MzIgKm1wdHIgPSAqc2dfcHRyOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9UT19ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHgxNDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHgxMDAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2dfY291bnQgPSBkbWFfbWFwX3NnKCZjLT5wZGV2LT5kZXYsIHNnLCBzZ19jb3VudCwgZGlyZWN0aW9uKTsKLQlpZiAoIXNnX2NvdW50KQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKLQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKFBBR0VfU0laRSk7Ci0JfQotI2VuZGlmCi0KLQl3aGlsZSAoc2dfY291bnQtLSA+IDApIHsKLQkJaWYgKCFzZ19jb3VudCkKLQkJCXNnX2ZsYWdzIHw9IDB4QzAwMDAwMDA7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMihzZ19mbGFncyB8IHNnX2RtYV9sZW4oc2cpKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKLQkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goc2dfZG1hX2FkZHJlc3Moc2cpKSk7Ci0jZW5kaWYKLQkJc2cgPSBzZ19uZXh0KHNnKTsKLQl9Ci0JKnNnX3B0ciA9IG1wdHI7Ci0KLQlyZXR1cm4gMTsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9hbGxvYyAtIEFsbG9jYXRlIERNQSBtZW1vcnkKLSAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKLSAqCUBhZGRyOiBpMm9fZG1hIHN0cnVjdCB3aGljaCBzaG91bGQgZ2V0IHRoZSBETUEgYnVmZmVyCi0gKglAbGVuOiBsZW5ndGggb2YgdGhlIG5ldyBETUEgbWVtb3J5Ci0gKglAZ2ZwX21hc2s6IEdGUCBtYXNrCi0gKgotICoJQWxsb2NhdGUgYSBjb2hlcmVudCBETUEgbWVtb3J5IGFuZCB3cml0ZSB0aGUgcG9pbnRlcnMgaW50byBhZGRyLgotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAotCQkJCXNpemVfdCBsZW4sIGdmcF90IGdmcF9tYXNrKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCWludCBkbWFfNjQgPSAwOwotCi0JaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiAocGRldi0+ZG1hX21hc2sgPT0gRE1BXzY0QklUX01BU0spKSB7Ci0JCWRtYV82NCA9IDE7Ci0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFkZHItPnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBsZW4sICZhZGRyLT5waHlzLCBnZnBfbWFzayk7Ci0KLQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGRtYV82NCkKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJvOiB1bmFibGUgdG8gc2V0IDY0LWJpdCBETUEiKTsKLQotCWlmICghYWRkci0+dmlydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoYWRkci0+dmlydCwgMCwgbGVuKTsKLQlhZGRyLT5sZW4gPSBsZW47Ci0KLQlyZXR1cm4gMDsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9mcmVlIC0gRnJlZSBETUEgbWVtb3J5Ci0gKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCi0gKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIERNQSBidWZmZXIKLSAqCi0gKglGcmVlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgc2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhZGRyIHRvIE5VTEwuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZG1hX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkcikKLXsKLQlpZiAoYWRkci0+dmlydCkgewotCQlpZiAoYWRkci0+cGh5cykKLQkJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgYWRkci0+bGVuLCBhZGRyLT52aXJ0LAotCQkJCQkgIGFkZHItPnBoeXMpOwotCQllbHNlCi0JCQlrZnJlZShhZGRyLT52aXJ0KTsKLQkJYWRkci0+dmlydCA9IE5VTEw7Ci0JfQotfTsKLQotLyoqCi0gKglpMm9fZG1hX3JlYWxsb2MgLSBSZWFsbG9jIERNQSBtZW1vcnkKLSAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKLSAqCUBhZGRyOiBwb2ludGVyIHRvIGEgaTJvX2RtYSBzdHJ1Y3QgRE1BIGJ1ZmZlcgotICoJQGxlbjogbmV3IGxlbmd0aCBvZiBtZW1vcnkKLSAqCUBnZnBfbWFzazogR0ZQIG1hc2sKLSAqCi0gKglJZiB0aGVyZSB3YXMgc29tZXRoaW5nIGFsbG9jYXRlZCBpbiB0aGUgYWRkciwgZnJlZSBpdCBmaXJzdC4gSWYgbGVuID4gMAotICoJdGhhbiB0cnkgdG8gYWxsb2NhdGUgaXQgYW5kIHdyaXRlIHRoZSBhZGRyZXNzZXMgYmFjayB0byB0aGUgYWRkcgotICoJc3RydWN0dXJlLiBJZiBsZW4gPT0gMCBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBOVUxMLgotICoKLSAqCVJldHVybnMgdGhlIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19kbWFfcmVhbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAotCQkJCSAgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JaTJvX2RtYV9mcmVlKGRldiwgYWRkcik7Ci0KLQlpZiAobGVuKQotCQlyZXR1cm4gaTJvX2RtYV9hbGxvYyhkZXYsIGFkZHIsIGxlbiwgZ2ZwX21hc2spOwotCi0JcmV0dXJuIDA7Ci19OwotCi0vKgotICoJaTJvX3Bvb2xfYWxsb2MgLSBBbGxvY2F0ZSBhbiBzbGFiIGNhY2hlIGFuZCBtZW1wb29sCi0gKglAbWVtcG9vbDogcG9pbnRlciB0byBzdHJ1Y3QgaTJvX3Bvb2wgdG8gd3JpdGUgZGF0YSBpbnRvLgotICoJQG5hbWU6IG5hbWUgd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBjYWNoZQotICoJQHNpemU6IHNpemUgb2YgZWFjaCBvYmplY3QKLSAqCUBtaW5fbnI6IG1pbmltdW0gbnVtYmVyIG9mIG9iamVjdHMKLSAqCi0gKglGaXJzdCBhbGxvY2F0ZXMgYSBzbGFiIGNhY2hlIHdpdGggbmFtZSBhbmQgc2l6ZS4gVGhlbiBhbGxvY2F0ZXMgYQotICoJbWVtcG9vbCB3aGljaCB1c2VzIHRoZSBzbGFiIGNhY2hlIGZvciBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLgotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaTJvX3Bvb2xfYWxsb2Moc3RydWN0IGkyb19wb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBzaXplX3Qgc2l6ZSwgaW50IG1pbl9ucikKLXsKLQlwb29sLT5uYW1lID0ga21hbGxvYyhzdHJsZW4obmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBvb2wtPm5hbWUpCi0JCWdvdG8gZXhpdDsKLQlzdHJjcHkocG9vbC0+bmFtZSwgbmFtZSk7Ci0KLQlwb29sLT5zbGFiID0KLQkgICAga21lbV9jYWNoZV9jcmVhdGUocG9vbC0+bmFtZSwgc2l6ZSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKLQlpZiAoIXBvb2wtPnNsYWIpCi0JCWdvdG8gZnJlZV9uYW1lOwotCi0JcG9vbC0+bWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChtaW5fbnIsIHBvb2wtPnNsYWIpOwotCWlmICghcG9vbC0+bWVtcG9vbCkKLQkJZ290byBmcmVlX3NsYWI7Ci0KLQlyZXR1cm4gMDsKLQotICAgICAgZnJlZV9zbGFiOgotCWttZW1fY2FjaGVfZGVzdHJveShwb29sLT5zbGFiKTsKLQotICAgICAgZnJlZV9uYW1lOgotCWtmcmVlKHBvb2wtPm5hbWUpOwotCi0gICAgICBleGl0OgotCXJldHVybiAtRU5PTUVNOwotfTsKLQotLyoKLSAqCWkyb19wb29sX2ZyZWUgLSBGcmVlIHNsYWIgY2FjaGUgYW5kIG1lbXBvb2wgYWdhaW4KLSAqCUBtZW1wb29sOiBwb2ludGVyIHRvIHN0cnVjdCBpMm9fcG9vbCB3aGljaCBzaG91bGQgYmUgZnJlZWQKLSAqCi0gKglOb3RlIHRoYXQgeW91IGhhdmUgdG8gcmV0dXJuIGFsbCBvYmplY3RzIHRvIHRoZSBtZW1wb29sIGFnYWluIGJlZm9yZQotICoJY2FsbGluZyBpMm9fcG9vbF9mcmVlKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMm9fcG9vbF9mcmVlKHN0cnVjdCBpMm9fcG9vbCAqcG9vbCkKLXsKLQltZW1wb29sX2Rlc3Ryb3kocG9vbC0+bWVtcG9vbCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNsYWIpOwotCWtmcmVlKHBvb2wtPm5hbWUpOwotfTsKLQorCQkJCSB1MzIgKiogc2dfcHRyKTsKK2V4dGVybiBpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkIGkyb19kbWFfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyKTsKK2V4dGVybiBpbnQgaTJvX2RtYV9yZWFsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIsCisJCQkJCQkJCXNpemVfdCBsZW4pOworZXh0ZXJuIGludCBpMm9fcG9vbF9hbGxvYyhzdHJ1Y3QgaTJvX3Bvb2wgKnBvb2wsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgbWluX25yKTsKK2V4dGVybiB2b2lkIGkyb19wb29sX2ZyZWUoc3RydWN0IGkyb19wb29sICpwb29sKTsKIC8qIEkyTyBkcml2ZXIgKE9TTSkgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGkyb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CiBleHRlcm4gdm9pZCBpMm9fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCAwMzA2NzQ0Li5hOTNhOGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTQwLDE2ICs0MCwxOCBAQAogICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wdjZfbmRfcmEgewogCQkJX191OAkJaG9wX2xpbWl0OwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCQkJX191OAkJcmVzZXJ2ZWQ6NCwKKwkJCV9fdTgJCXJlc2VydmVkOjMsCiAJCQkJCXJvdXRlcl9wcmVmOjIsCisJCQkJCWhvbWVfYWdlbnQ6MSwKIAkJCQkJb3RoZXI6MSwKIAkJCQkJbWFuYWdlZDoxOwogCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKIAkJCV9fdTgJCW1hbmFnZWQ6MSwKIAkJCQkJb3RoZXI6MSwKKwkJCQkJaG9tZV9hZ2VudDoxLAogCQkJCQlyb3V0ZXJfcHJlZjoyLAotCQkJCQlyZXNlcnZlZDo0OworCQkJCQlyZXNlcnZlZDozOwogI2Vsc2UKICNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYzQ3ZTM3MS4uODllNTNjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC00NjEsMTIgKzQ2MSwyNiBAQAogc3RydWN0IGlkZV9hY3BpX2h3aWZfbGluazsKICNlbmRpZgogCitzdHJ1Y3QgaWRlX2RyaXZlX3M7CisKK3N0cnVjdCBpZGVfZGlza19vcHMgeworCWludAkJKCpjaGVjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGNvbnN0IGNoYXIgKik7CisJaW50CQkoKmdldF9jYXBhY2l0eSkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJCSgqc2V0dXApKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwl2b2lkCQkoKmZsdXNoKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJaW50CQkoKmluaXRfbWVkaWEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgZ2VuZGlzayAqKTsKKwlpbnQJCSgqc2V0X2Rvb3Jsb2NrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGdlbmRpc2sgKiwKKwkJCQkJaW50KTsKKwlpZGVfc3RhcnRzdG9wX3QJKCpkb19yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IHJlcXVlc3QgKiwKKwkJCQkgICAgICBzZWN0b3JfdCk7CisJaW50CQkoKmVuZF9yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50LCBpbnQpOworCWludAkJKCppb2N0bCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBpbm9kZSAqLAorCQkJCSBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworfTsKKwogLyogQVRBUEkgZGV2aWNlIGZsYWdzICovCiBlbnVtIHsKIAlJREVfQUZMQUdfRFJRX0lOVEVSUlVQVAkJPSAoMSA8PCAwKSwKLQlJREVfQUZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAxKSwKLQkvKiBEcml2ZSBjYW5ub3QgbG9jayB0aGUgZG9vci4gKi8KLQlJREVfQUZMQUdfTk9fRE9PUkxPQ0sJCT0gKDEgPDwgMiksCiAKIAkvKiBpZGUtY2QgKi8KIAkvKiBEcml2ZSBjYW5ub3QgZWplY3QgdGhlIGRpc2MuICovCkBAIC00OTgsMTQgKzUxMiwxMCBAQAogCUlERV9BRkxBR19MRV9TUEVFRF9GSUVMRFMJPSAoMSA8PCAxNyksCiAKIAkvKiBpZGUtZmxvcHB5ICovCi0JLyogRm9ybWF0IGluIHByb2dyZXNzICovCi0JSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUwk9ICgxIDw8IDE4KSwKIAkvKiBBdm9pZCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIGluIENsaWsgZHJpdmUgKi8KIAlJREVfQUZMQUdfQ0xJS19EUklWRQkJPSAoMSA8PCAxOSksCiAJLyogUmVxdWlyZXMgQkggYWxnb3JpdGhtIGZvciBwYWNrZXRzICovCiAJSURFX0FGTEFHX1pJUF9EUklWRQkJPSAoMSA8PCAyMCksCi0JLyogV3JpdGUgcHJvdGVjdCAqLwotCUlERV9BRkxBR19XUAkJCT0gKDEgPDwgMjEpLAogCS8qIFN1cHBvcnRzIGZvcm1hdCBwcm9ncmVzcyByZXBvcnQgKi8KIAlJREVfQUZMQUdfU1JGUAkJCT0gKDEgPDwgMjIpLAogCkBAIC01NzgsNyArNTg4LDExIEBACiAJLyogZG9uJ3QgdW5sb2FkIGhlYWRzICovCiAJSURFX0RGTEFHX05PX1VOTE9BRAkJPSAoMSA8PCAyNyksCiAJLyogaGVhZHMgdW5sb2FkZWQsIHBsZWFzZSBkb24ndCByZXNldCBwb3J0ICovCi0JSURFX0RGTEFHX1BBUktFRAkJPSAoMSA8PCAyOCkKKwlJREVfREZMQUdfUEFSS0VECQk9ICgxIDw8IDI4KSwKKwlJREVfREZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAyOSksCisJLyogd3JpdGUgcHJvdGVjdCAqLworCUlERV9ERkxBR19XUAkJCT0gKDEgPDwgMzApLAorCUlERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAzMSksCiB9OwogCiBzdHJ1Y3QgaWRlX2RyaXZlX3MgewpAQCAtNTk3LDYgKzYxMSw4IEBACiAjZW5kaWYKIAlzdHJ1Y3QgaHdpZl9zCQkqaHdpZjsJLyogYWN0dWFsbHkgKGlkZV9od2lmX3QgKikgKi8KIAorCWNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgKmRpc2tfb3BzOworCiAJdW5zaWduZWQgbG9uZyBkZXZfZmxhZ3M7CiAKIAl1bnNpZ25lZCBsb25nIHNsZWVwOwkJLyogc2xlZXAgdW50aWwgdGhpcyB0aW1lICovCkBAIC0xMTIzLDggKzExMzksOCBAQAogCXZvaWQJCSgqcmVzdW1lKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCQkoKnNodXRkb3duKShpZGVfZHJpdmVfdCAqKTsKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQlpZGVfcHJvY19lbnRyeV90CQkqcHJvYzsKLQljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0CSpzZXR0aW5nczsKKwlpZGVfcHJvY19lbnRyeV90ICoJCSgqcHJvY19lbnRyaWVzKShpZGVfZHJpdmVfdCAqKTsKKwljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICoJKCpwcm9jX2RldnNldHMpKGlkZV9kcml2ZV90ICopOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDkzNTM4YjYuLmFkNjM4MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yMzMsOSArMjMzLDYgQEAKIAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgoc2l6ZW9mKGxvbmcpKSkpKQlcCiAJCT0geyBfX3NldHVwX3N0cl8jI3VuaXF1ZV9pZCwgZm4sIGVhcmx5IH0KIAotI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpCQkJXAotCV9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIE5VTEwsIDApCi0KICNkZWZpbmUgX19zZXR1cChzdHIsIGZuKQkJCQkJXAogCV9fc2V0dXBfcGFyYW0oc3RyLCBmbiwgZm4sIDApCiAKQEAgLTI5Niw3ICsyOTMsNiBAQAogCXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2V4aXRmbikpKTsKIAogI2RlZmluZSBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBmbikJLyogbm90aGluZyAqLwotI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpIAkvKiBub3RoaW5nICovCiAjZGVmaW5lIF9fc2V0dXAoc3RyLCBmdW5jKSAJCQkvKiBub3RoaW5nICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGE1ODAyYzkuLmI4NmZiNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTU3Nyw5ICs1NzcsMjIgQEAKICNkZWZpbmUgS0VZX0JSTF9ET1Q5CQkweDFmOQogI2RlZmluZSBLRVlfQlJMX0RPVDEwCQkweDFmYQogCisjZGVmaW5lIEtFWV9OVU1FUklDXzAJCTB4MjAwCS8qIHVzZWQgYnkgcGhvbmVzLCByZW1vdGUgY29udHJvbHMsICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzEJCTB4MjAxCS8qIGFuZCBvdGhlciBrZXlwYWRzICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzIJCTB4MjAyCisjZGVmaW5lIEtFWV9OVU1FUklDXzMJCTB4MjAzCisjZGVmaW5lIEtFWV9OVU1FUklDXzQJCTB4MjA0CisjZGVmaW5lIEtFWV9OVU1FUklDXzUJCTB4MjA1CisjZGVmaW5lIEtFWV9OVU1FUklDXzYJCTB4MjA2CisjZGVmaW5lIEtFWV9OVU1FUklDXzcJCTB4MjA3CisjZGVmaW5lIEtFWV9OVU1FUklDXzgJCTB4MjA4CisjZGVmaW5lIEtFWV9OVU1FUklDXzkJCTB4MjA5CisjZGVmaW5lIEtFWV9OVU1FUklDX1NUQVIJMHgyMGEKKyNkZWZpbmUgS0VZX05VTUVSSUNfUE9VTkQJMHgyMGIKKwogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKLSNkZWZpbmUgS0VZX01BWAkJCTB4MWZmCisjZGVmaW5lIEtFWV9NQVgJCQkweDJmZgogI2RlZmluZSBLRVlfQ05UCQkJKEtFWV9NQVgrMSkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTExN2YzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYgX0lOVEVMX0lPTU1VX0hfCisjZGVmaW5lIF9JTlRFTF9JT01NVV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFfcmVtYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIEludGVsIElPTU1VIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gcGVyIHZlcnNpb24gMS4wIHB1YmxpYyBzcGVjLgorICovCisKKyNkZWZpbmUJRE1BUl9WRVJfUkVHCTB4MAkvKiBBcmNoIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoaXMgSU9NTVUgKi8KKyNkZWZpbmUJRE1BUl9DQVBfUkVHCTB4OAkvKiBIYXJkd2FyZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lCURNQVJfRUNBUF9SRUcJMHgxMAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkICovCisjZGVmaW5lCURNQVJfR0NNRF9SRUcJMHgxOAkvKiBHbG9iYWwgY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZQlETUFSX0dTVFNfUkVHCTB4MWMJLyogR2xvYmFsIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlETUFSX1JUQUREUl9SRUcJMHgyMAkvKiBSb290IGVudHJ5IHRhYmxlICovCisjZGVmaW5lCURNQVJfQ0NNRF9SRUcJMHgyOAkvKiBDb250ZXh0IGNvbW1hbmQgcmVnICovCisjZGVmaW5lCURNQVJfRlNUU19SRUcJMHgzNAkvKiBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9GRUNUTF9SRUcJMHgzOAkvKiBGYXVsdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVEQVRBX1JFRwkweDNjCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVBRERSX1JFRwkweDQwCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBhZGRyIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVVQUREUl9SRUcgMHg0NAkvKiBVcHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfQUZMT0dfUkVHCTB4NTgJLyogQWR2YW5jZWQgRmF1bHQgY29udHJvbCAqLworI2RlZmluZQlETUFSX1BNRU5fUkVHCTB4NjQJLyogRW5hYmxlIFByb3RlY3RlZCBNZW1vcnkgUmVnaW9uICovCisjZGVmaW5lCURNQVJfUExNQkFTRV9SRUcgMHg2OAkvKiBQTVJSIExvdyBhZGRyICovCisjZGVmaW5lCURNQVJfUExNTElNSVRfUkVHIDB4NmMJLyogUE1SUiBsb3cgbGltaXQgKi8KKyNkZWZpbmUJRE1BUl9QSE1CQVNFX1JFRyAweDcwCS8qIHBtcnIgaGlnaCBiYXNlIGFkZHIgKi8KKyNkZWZpbmUJRE1BUl9QSE1MSU1JVF9SRUcgMHg3OAkvKiBwbXJyIGhpZ2ggbGltaXQgKi8KKyNkZWZpbmUgRE1BUl9JUUhfUkVHCTB4ODAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JUVRfUkVHCTB4ODgJLyogSW52YWxpZGF0aW9uIHF1ZXVlIHRhaWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JUUFfUkVHCTB4OTAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGFkZHIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JQ1NfUkVHCTB4OTgJLyogSW52YWxpZGF0aW9uIGNvbXBsZXRlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lSVEFfUkVHCTB4YjggICAgLyogSW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBhZGRyIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgT0ZGU0VUX1NUUklERQkJKDkpCisvKgorI2RlZmluZSBkbWFyX3JlYWRsKGRtYXIsIHJlZykgcmVhZGwoZG1hciArIHJlZykKKyNkZWZpbmUgZG1hcl9yZWFkcShkbWFyLCByZWcpICh7IFwKKwkJdTMyIGxvLCBoaTsgXAorCQlsbyA9IHJlYWRsKGRtYXIgKyByZWcpOyBcCisJCWhpID0gcmVhZGwoZG1hciArIHJlZyArIDQpOyBcCisJCSgoKHU2NCkgaGkpIDw8IDMyKSArIGxvOyB9KQorKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGRtYXJfcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiBsbywgaGk7CisJbG8gPSByZWFkbChhZGRyKTsKKwloaSA9IHJlYWRsKGFkZHIgKyA0KTsKKwlyZXR1cm4gKCgodTY0KSBoaSkgPDwgMzIpICsgbG87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFyX3dyaXRlcSh2b2lkIF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCit7CisJd3JpdGVsKCh1MzIpdmFsLCBhZGRyKTsKKwl3cml0ZWwoKHUzMikodmFsID4+IDMyKSwgYWRkciArIDQpOworfQorCisjZGVmaW5lIERNQVJfVkVSX01BSk9SKHYpCQkoKCh2KSAmIDB4ZjApID4+IDQpCisjZGVmaW5lIERNQVJfVkVSX01JTk9SKHYpCQkoKHYpICYgMHgwZikKKworLyoKKyAqIERlY29kaW5nIENhcGFiaWxpdHkgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBjYXBfcmVhZF9kcmFpbihjKQkoKChjKSA+PiA1NSkgJiAxKQorI2RlZmluZSBjYXBfd3JpdGVfZHJhaW4oYykJKCgoYykgPj4gNTQpICYgMSkKKyNkZWZpbmUgY2FwX21heF9hbWFza192YWwoYykJKCgoYykgPj4gNDgpICYgMHgzZikKKyNkZWZpbmUgY2FwX251bV9mYXVsdF9yZWdzKGMpCSgoKChjKSA+PiA0MCkgJiAweGZmKSArIDEpCisjZGVmaW5lIGNhcF9wZ3NlbF9pbnYoYykJKCgoYykgPj4gMzkpICYgMSkKKworI2RlZmluZSBjYXBfc3VwZXJfcGFnZV92YWwoYykJKCgoYykgPj4gMzQpICYgMHhmKQorI2RlZmluZSBjYXBfc3VwZXJfb2Zmc2V0KGMpCSgoKGZpbmRfZmlyc3RfYml0KCZjYXBfc3VwZXJfcGFnZV92YWwoYyksIDQpKSBcCisJCQkJCSogT0ZGU0VUX1NUUklERSkgKyAyMSkKKworI2RlZmluZSBjYXBfZmF1bHRfcmVnX29mZnNldChjKQkoKCgoYykgPj4gMjQpICYgMHgzZmYpICogMTYpCisjZGVmaW5lIGNhcF9tYXhfZmF1bHRfcmVnX29mZnNldChjKSBcCisJKGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpICsgY2FwX251bV9mYXVsdF9yZWdzKGMpICogMTYpCisKKyNkZWZpbmUgY2FwX3pscihjKQkJKCgoYykgPj4gMjIpICYgMSkKKyNkZWZpbmUgY2FwX2lzb2NoKGMpCQkoKChjKSA+PiAyMykgJiAxKQorI2RlZmluZSBjYXBfbWdhdyhjKQkJKCgoKGMpID4+IDE2KSAmIDB4M2YpICsgMSkKKyNkZWZpbmUgY2FwX3NhZ2F3KGMpCQkoKChjKSA+PiA4KSAmIDB4MWYpCisjZGVmaW5lIGNhcF9jYWNoaW5nX21vZGUoYykJKCgoYykgPj4gNykgJiAxKQorI2RlZmluZSBjYXBfcGhtcihjKQkJKCgoYykgPj4gNikgJiAxKQorI2RlZmluZSBjYXBfcGxtcihjKQkJKCgoYykgPj4gNSkgJiAxKQorI2RlZmluZSBjYXBfcndiZihjKQkJKCgoYykgPj4gNCkgJiAxKQorI2RlZmluZSBjYXBfYWZsKGMpCQkoKChjKSA+PiAzKSAmIDEpCisjZGVmaW5lIGNhcF9uZG9tcyhjKQkJKCgodW5zaWduZWQgbG9uZykxKSA8PCAoNCArIDIgKiAoKGMpICYgMHg3KSkpCisvKgorICogRXh0ZW5kZWQgQ2FwYWJpbGl0eSBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgZWNhcF9uaW90bGJfaXVuaXRzKGUpCSgoKChlKSA+PiAyNCkgJiAweGZmKSArIDEpCisjZGVmaW5lIGVjYXBfaW90bGJfb2Zmc2V0KGUpIAkoKCgoZSkgPj4gOCkgJiAweDNmZikgKiAxNikKKyNkZWZpbmUgZWNhcF9tYXhfaW90bGJfb2Zmc2V0KGUpIFwKKwkoZWNhcF9pb3RsYl9vZmZzZXQoZSkgKyBlY2FwX25pb3RsYl9pdW5pdHMoZSkgKiAxNikKKyNkZWZpbmUgZWNhcF9jb2hlcmVudChlKQkoKGUpICYgMHgxKQorI2RlZmluZSBlY2FwX3FpcyhlKQkJKChlKSAmIDB4MikKKyNkZWZpbmUgZWNhcF9laW1fc3VwcG9ydChlKQkoKGUgPj4gNCkgJiAweDEpCisjZGVmaW5lIGVjYXBfaXJfc3VwcG9ydChlKQkoKGUgPj4gMykgJiAweDEpCisjZGVmaW5lIGVjYXBfbWF4X2hhbmRsZV9tYXNrKGUpICgoZSA+PiAyMCkgJiAweGYpCisKKworLyogSU9UTEJfUkVHICovCisjZGVmaW5lIERNQV9UTEJfR0xPQkFMX0ZMVVNIICgoKHU2NCkxKSA8PCA2MCkKKyNkZWZpbmUgRE1BX1RMQl9EU0lfRkxVU0ggKCgodTY0KTIpIDw8IDYwKQorI2RlZmluZSBETUFfVExCX1BTSV9GTFVTSCAoKCh1NjQpMykgPDwgNjApCisjZGVmaW5lIERNQV9UTEJfSUlSRyh0eXBlKSAoKHR5cGUgPj4gNjApICYgNykKKyNkZWZpbmUgRE1BX1RMQl9JQUlHKHZhbCkgKCgodmFsKSA+PiA1NykgJiA3KQorI2RlZmluZSBETUFfVExCX1JFQURfRFJBSU4gKCgodTY0KTEpIDw8IDQ5KQorI2RlZmluZSBETUFfVExCX1dSSVRFX0RSQUlOICgoKHU2NCkxKSA8PCA0OCkKKyNkZWZpbmUgRE1BX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkKSAmIDB4ZmZmZikpIDw8IDMyKQorI2RlZmluZSBETUFfVExCX0lWVCAoKCh1NjQpMSkgPDwgNjMpCisjZGVmaW5lIERNQV9UTEJfSUhfTk9OTEVBRiAoKCh1NjQpMSkgPDwgNikKKyNkZWZpbmUgRE1BX1RMQl9NQVhfU0laRSAoMHgzZikKKworLyogSU5WQUxJRF9ERVNDICovCisjZGVmaW5lIERNQV9JRF9UTEJfR0xPQkFMX0ZMVVNICSgoKHU2NCkxKSA8PCAzKQorI2RlZmluZSBETUFfSURfVExCX0RTSV9GTFVTSAkoKCh1NjQpMikgPDwgMykKKyNkZWZpbmUgRE1BX0lEX1RMQl9QU0lfRkxVU0gJKCgodTY0KTMpIDw8IDMpCisjZGVmaW5lIERNQV9JRF9UTEJfUkVBRF9EUkFJTgkoKCh1NjQpMSkgPDwgNykKKyNkZWZpbmUgRE1BX0lEX1RMQl9XUklURV9EUkFJTgkoKCh1NjQpMSkgPDwgNikKKyNkZWZpbmUgRE1BX0lEX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkICYgMHhmZmZmKSA8PCAxNikpKQorI2RlZmluZSBETUFfSURfVExCX0lIX05PTkxFQUYJKCgodTY0KTEpIDw8IDYpCisjZGVmaW5lIERNQV9JRF9UTEJfQUREUihhZGRyKQkoYWRkcikKKyNkZWZpbmUgRE1BX0lEX1RMQl9BRERSX01BU0sobWFzaykJKG1hc2spCisKKy8qIFBNRU5fUkVHICovCisjZGVmaW5lIERNQV9QTUVOX0VQTSAoKCh1MzIpMSk8PDMxKQorI2RlZmluZSBETUFfUE1FTl9QUlMgKCgodTMyKTEpPDwwKQorCisvKiBHQ01EX1JFRyAqLworI2RlZmluZSBETUFfR0NNRF9URSAoKCh1MzIpMSkgPDwgMzEpCisjZGVmaW5lIERNQV9HQ01EX1NSVFAgKCgodTMyKTEpIDw8IDMwKQorI2RlZmluZSBETUFfR0NNRF9TRkwgKCgodTMyKTEpIDw8IDI5KQorI2RlZmluZSBETUFfR0NNRF9FQUZMICgoKHUzMikxKSA8PCAyOCkKKyNkZWZpbmUgRE1BX0dDTURfV0JGICgoKHUzMikxKSA8PCAyNykKKyNkZWZpbmUgRE1BX0dDTURfUUlFICgoKHUzMikxKSA8PCAyNikKKyNkZWZpbmUgRE1BX0dDTURfU0lSVFAgKCgodTMyKTEpIDw8IDI0KQorI2RlZmluZSBETUFfR0NNRF9JUkUgKCgodTMyKSAxKSA8PCAyNSkKKworLyogR1NUU19SRUcgKi8KKyNkZWZpbmUgRE1BX0dTVFNfVEVTICgoKHUzMikxKSA8PCAzMSkKKyNkZWZpbmUgRE1BX0dTVFNfUlRQUyAoKCh1MzIpMSkgPDwgMzApCisjZGVmaW5lIERNQV9HU1RTX0ZMUyAoKCh1MzIpMSkgPDwgMjkpCisjZGVmaW5lIERNQV9HU1RTX0FGTFMgKCgodTMyKTEpIDw8IDI4KQorI2RlZmluZSBETUFfR1NUU19XQkZTICgoKHUzMikxKSA8PCAyNykKKyNkZWZpbmUgRE1BX0dTVFNfUUlFUyAoKCh1MzIpMSkgPDwgMjYpCisjZGVmaW5lIERNQV9HU1RTX0lSVFBTICgoKHUzMikxKSA8PCAyNCkKKyNkZWZpbmUgRE1BX0dTVFNfSVJFUyAoKCh1MzIpMSkgPDwgMjUpCisKKy8qIENDTURfUkVHICovCisjZGVmaW5lIERNQV9DQ01EX0lDQyAoKCh1NjQpMSkgPDwgNjMpCisjZGVmaW5lIERNQV9DQ01EX0dMT0JBTF9JTlZMICgoKHU2NCkxKSA8PCA2MSkKKyNkZWZpbmUgRE1BX0NDTURfRE9NQUlOX0lOVkwgKCgodTY0KTIpIDw8IDYxKQorI2RlZmluZSBETUFfQ0NNRF9ERVZJQ0VfSU5WTCAoKCh1NjQpMykgPDwgNjEpCisjZGVmaW5lIERNQV9DQ01EX0ZNKG0pICgoKHU2NCkoKG0pICYgMHgzKSkgPDwgMzIpCisjZGVmaW5lIERNQV9DQ01EX01BU0tfTk9CSVQgMAorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzFCSVQgMQorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzJCSVQgMgorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzNCSVQgMworI2RlZmluZSBETUFfQ0NNRF9TSUQocykgKCgodTY0KSgocykgJiAweGZmZmYpKSA8PCAxNikKKyNkZWZpbmUgRE1BX0NDTURfRElEKGQpICgodTY0KSgoZCkgJiAweGZmZmYpKQorCisvKiBGRUNUTF9SRUcgKi8KKyNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHUzMikxKSA8PCAzMSkKKworLyogRlNUU19SRUcgKi8KKyNkZWZpbmUgRE1BX0ZTVFNfUFBGICgodTMyKTIpCisjZGVmaW5lIERNQV9GU1RTX1BGTyAoKHUzMikxKQorI2RlZmluZSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgocykgKCgocykgPj4gOCkgJiAweGZmKQorCisvKiBGUkNEX1JFRywgMzIgYml0cyBhY2Nlc3MgKi8KKyNkZWZpbmUgRE1BX0ZSQ0RfRiAoKCh1MzIpMSkgPDwgMzEpCisjZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChkID4+IDMwKSAmIDEpCisjZGVmaW5lIGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihjKSAoYyAmIDB4ZmYpCisjZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9pZChjKSAoYyAmIDB4ZmZmZikKKyNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KKworI2RlZmluZSBETUFSX09QRVJBVElPTl9USU1FT1VUICgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkgLyogMTBzZWMgKi8KKworI2RlZmluZSBJT01NVV9XQUlUX09QKGlvbW11LCBvZmZzZXQsIG9wLCBjb25kLCBzdHMpIFwKK3tcCisJY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTtcCisJd2hpbGUgKDEpIHtcCisJCXN0cyA9IG9wIChpb21tdS0+cmVnICsgb2Zmc2V0KTtcCisJCWlmIChjb25kKVwKKwkJCWJyZWFrO1wKKwkJaWYgKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpXAorCQkJcGFuaWMoIkRNQVIgaGFyZHdhcmUgaXMgbWFsZnVuY3Rpb25pbmdcbiIpO1wKKwkJY3B1X3JlbGF4KCk7XAorCX1cCit9CisKKyNkZWZpbmUgUUlfTEVOR1RICTI1NgkvKiBxdWV1ZSBsZW5ndGggKi8KKworZW51bSB7CisJUUlfRlJFRSwKKwlRSV9JTl9VU0UsCisJUUlfRE9ORQorfTsKKworI2RlZmluZSBRSV9DQ19UWVBFCQkweDEKKyNkZWZpbmUgUUlfSU9UTEJfVFlQRQkJMHgyCisjZGVmaW5lIFFJX0RJT1RMQl9UWVBFCQkweDMKKyNkZWZpbmUgUUlfSUVDX1RZUEUJCTB4NAorI2RlZmluZSBRSV9JV0RfVFlQRQkJMHg1CisKKyNkZWZpbmUgUUlfSUVDX1NFTEVDVElWRQkoKCh1NjQpMSkgPDwgNCkKKyNkZWZpbmUgUUlfSUVDX0lJREVYKGlkeCkJKCgodTY0KShpZHggJiAweGZmZmYpIDw8IDMyKSkKKyNkZWZpbmUgUUlfSUVDX0lNKG0pCQkoKCh1NjQpKG0gJiAweDFmKSA8PCAyNykpCisKKyNkZWZpbmUgUUlfSVdEX1NUQVRVU19EQVRBKGQpCSgoKHU2NClkKSA8PCAzMikKKyNkZWZpbmUgUUlfSVdEX1NUQVRVU19XUklURQkoKCh1NjQpMSkgPDwgNSkKKworc3RydWN0IHFpX2Rlc2MgeworCXU2NCBsb3csIGhpZ2g7Cit9OworCitzdHJ1Y3QgcV9pbnZhbCB7CisJc3BpbmxvY2tfdCAgICAgIHFfbG9jazsKKwlzdHJ1Y3QgcWlfZGVzYyAgKmRlc2M7ICAgICAgICAgIC8qIGludmFsaWRhdGlvbiBxdWV1ZSAqLworCWludCAgICAgICAgICAgICAqZGVzY19zdGF0dXM7ICAgLyogZGVzYyBzdGF0dXMgKi8KKwlpbnQgICAgICAgICAgICAgZnJlZV9oZWFkOyAgICAgIC8qIGZpcnN0IGZyZWUgZW50cnkgKi8KKwlpbnQgICAgICAgICAgICAgZnJlZV90YWlsOyAgICAgIC8qIGxhc3QgZnJlZSBlbnRyeSAqLworCWludCAgICAgICAgICAgICBmcmVlX2NudDsKK307CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyogMU1CIC0gbWF4aW11bSBwb3NzaWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIHNpemUgKi8KKyNkZWZpbmUgSU5UUl9SRU1BUF9QQUdFX09SREVSCTgKKyNkZWZpbmUgSU5UUl9SRU1BUF9UQUJMRV9SRUdfU0laRQkweGYKKworI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX0VOVFJJRVMJNjU1MzYKKworc3RydWN0IGlyX3RhYmxlIHsKKwlzdHJ1Y3QgaXJ0ZSAqYmFzZTsKK307CisjZW5kaWYKKworc3RydWN0IGludGVsX2lvbW11IHsKKwl2b2lkIF9faW9tZW0JKnJlZzsgLyogUG9pbnRlciB0byBoYXJkd2FyZSByZWdzLCB2aXJ0dWFsIGFkZHIgKi8KKwl1NjQJCWNhcDsKKwl1NjQJCWVjYXA7CisJaW50CQlzZWc7CisJdTMyCQlnY21kOyAvKiBIb2xkcyBURSwgRUFGTC4gRG9uJ3QgbmVlZCBTUlRQLCBTRkwsIFdCRiAqLworCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLworCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KKworI2lmZGVmIENPTkZJR19ETUFSCisJdW5zaWduZWQgbG9uZyAJKmRvbWFpbl9pZHM7IC8qIGJpdG1hcCBvZiBkb21haW5zICovCisJc3RydWN0IGRtYXJfZG9tYWluICoqZG9tYWluczsgLyogcHRyIHRvIGRvbWFpbnMgKi8KKwlzcGlubG9ja190CWxvY2s7IC8qIHByb3RlY3QgY29udGV4dCwgZG9tYWluIGlkcyAqLworCXN0cnVjdCByb290X2VudHJ5ICpyb290X2VudHJ5OyAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgY2hhciBuYW1lWzddOyAgICAvKiBEZXZpY2UgTmFtZSAqLworCXN0cnVjdCBtc2lfbXNnIHNhdmVkX21zZzsKKwlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7CisjZW5kaWYKKwlzdHJ1Y3QgcV9pbnZhbCAgKnFpOyAgICAgICAgICAgIC8qIFF1ZXVlZCBpbnZhbGlkYXRpb24gaW5mbyAqLworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJc3RydWN0IGlyX3RhYmxlICppcl90YWJsZTsJLyogSW50ZXJydXB0IHJlbWFwcGluZyBpbmZvICovCisjZW5kaWYKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbW11X2ZsdXNoX2NhY2hlKAorCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCWlmICghZWNhcF9jb2hlcmVudChpb21tdS0+ZWNhcCkpCisJCWNsZmx1c2hfY2FjaGVfcmFuZ2UoYWRkciwgc2l6ZSk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKiBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK2V4dGVybiBpbnQgYWxsb2NfaW9tbXUoc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkKTsKK2V4dGVybiB2b2lkIGZyZWVfaW9tbXUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gaW50IGRtYXJfZW5hYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworZXh0ZXJuIHZvaWQgcWlfZ2xvYmFsX2llYyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKKworZXh0ZXJuIHZvaWQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworCit2b2lkIGludGVsX2lvbW11X2RvbWFpbl9leGl0KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKTsKK3N0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCBpbnRlbF9pb21tdV9jb250ZXh0X21hcHBpbmcoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhLAorCQkJICAgICB1NjQgaHBhLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwordm9pZCBpbnRlbF9pb21tdV9kZXRhY2hfZGV2KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1OCBidXMsIHU4IGRldmZuKTsKK3N0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZmluZF9kb21haW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordTY0IGludGVsX2lvbW11X2lvdmFfdG9fcGZuKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1NjQgaW92YSk7CisKKyNpZmRlZiBDT05GSUdfRE1BUgoraW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpOworI2Vsc2UgLyogQ09ORklHX0RNQVIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA1OGZmNGU3Li4zNWE2MWRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjUyLDYgKzI1NCw4IEBACiAJSFJUSU1FUl9TT0ZUSVJRLAogI2VuZGlmCiAJUkNVX1NPRlRJUlEsIAkvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi8KKworCU5SX1NPRlRJUlFTCiB9OwogCiAvKiBzb2Z0aXJxIG1hc2sgYW5kIGFjdGl2ZSBmaWVsZHMgbW92ZWQgdG8gaXJxX2NwdXN0YXRfdCBpbgpAQCAtMjcxLDYgKzI3NSwyNSBAQAogZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycV9pcnFvZmYodW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiB2b2lkIHJhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IG5yKTsKIAorLyogVGhpcyBpcyB0aGUgd29ya2xpc3QgdGhhdCBxdWV1ZXMgdXAgcGVyLWNwdSBzb2Z0aXJxIHdvcmsuCisgKgorICogc2VuZF9yZW1vdGVfc2VuZGlycSgpIGFkZHMgd29yayB0byB0aGVzZSBsaXN0cywgYW5kCisgKiB0aGUgc29mdGlycSBoYW5kbGVyIGl0c2VsZiBkZXF1ZXVlcyBmcm9tIHRoZW0uICBUaGUgcXVldWVzCisgKiBhcmUgcHJvdGVjdGVkIGJ5IGRpc2FibGluZyBsb2NhbCBjcHUgaW50ZXJydXB0cyBhbmQgdGhleSBtdXN0CisgKiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHRoZSBsb2NhbCBjcHUgdGhhdCB0aGV5IGFyZSBmb3IuCisgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkIFtOUl9TT0ZUSVJRU10sIHNvZnRpcnFfd29ya19saXN0KTsKKworLyogVHJ5IHRvIHNlbmQgYSBzb2Z0aXJxIHRvIGEgcmVtb3RlIGNwdS4gIElmIHRoaXMgY2Fubm90IGJlIGRvbmUsIHRoZQorICogd29yayB3aWxsIGJlIHF1ZXVlZCB0byB0aGUgbG9jYWwgY3B1LgorICovCitleHRlcm4gdm9pZCBzZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpOworCisvKiBMaWtlIHNlbmRfcmVtb3RlX3NvZnRpcnEoKSwgYnV0IHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGxvY2FsIGNwdSBpbnRlcnJ1cHRzCisgKiBhbmQgY29tcHV0ZSB0aGUgY3VycmVudCBjcHUsIHBhc3NlZCBpbiBhcyAndGhpc19jcHUnLgorICovCitleHRlcm4gdm9pZCBfX3NlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LAorCQkJCSAgaW50IHRoaXNfY3B1LCBpbnQgc29mdGlycSk7CiAKIC8qIFRhc2tsZXRzIC0tLSBtdWx0aXRocmVhZGVkIGFuYWxvZ3VlIG9mIEJIcy4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKaW5kZXggYTZkMDU4Ni4uM2IwNjhlNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaApAQCAtMjMsNCArMjMsNyBAQAogZXh0ZXJuIHZvaWQgaW9tbXVfYXJlYV9mcmVlKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgbnIpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9zaXplKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaAppbmRleCBlZTliY2M2Li4wNDFlOTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTM0LDcgKzM0LDggQEAKICAqLwogI2RlZmluZSBJT1JFU09VUkNFX0JJVFMJCTB4MDAwMDAwZmYJLyogQnVzLXNwZWNpZmljIGJpdHMgKi8KIAotI2RlZmluZSBJT1JFU09VUkNFX0lPCQkweDAwMDAwMTAwCS8qIFJlc291cmNlIHR5cGUgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9UWVBFX0JJVFMJMHgwMDAwMGYwMAkvKiBSZXNvdXJjZSB0eXBlICovCisjZGVmaW5lIElPUkVTT1VSQ0VfSU8JCTB4MDAwMDAxMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9NRU0JCTB4MDAwMDAyMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9JUlEJCTB4MDAwMDA0MDAKICNkZWZpbmUgSU9SRVNPVVJDRV9ETUEJCTB4MDAwMDA4MDAKQEAgLTEyNiw2ICsxMjcsMTAgQEAKIHsKIAlyZXR1cm4gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXJldHVybiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9UWVBFX0JJVFM7Cit9CiAKIC8qIENvbnZlbmllbmNlIHNob3J0aGFuZCB3aXRoIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgcmVxdWVzdF9yZWdpb24oc3RhcnQsbixuYW1lKQlfX3JlcXVlc3RfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIChzdGFydCksIChuKSwgKG5hbWUpKQpAQCAtMTY5LDYgKzE3NCw3IEBACiAKIGV4dGVybiB2b2lkIF9fZGV2bV9yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3Qgbik7CitleHRlcm4gaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vfc2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZgkvKiBfTElOVVhfSU9QT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdmEuaCBiL2luY2x1ZGUvbGludXgvaW92YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3BjaS9pb3ZhLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvaW92YS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCAwN2E5YjUyLi4zNWQ0ZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgobikgPD0gam91cm5hbF9lbmFibGVfZGVidWcpIHsJCQlcCiAJCQlwcmludGsgKEtFUk5fREVCVUcgIiglcywgJWQpOiAlczogIiwJCVwKLQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJXAogCQkJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQpAQCAtODE2LDYgKzgxNiw5IEBACiAjZGVmaW5lIEpGU19GTFVTSEVECTB4MDA4CS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gZmx1c2hlZCAqLwogI2RlZmluZSBKRlNfTE9BREVECTB4MDEwCS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gbG9hZGVkICovCiAjZGVmaW5lIEpGU19CQVJSSUVSCTB4MDIwCS8qIFVzZSBJREUgYmFycmllcnMgKi8KKyNkZWZpbmUgSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUgkweDA0MCAgLyogQWJvcnQgdGhlIGpvdXJuYWwgb24gZmlsZQorCQkJCQkJKiBkYXRhIHdyaXRlIGVycm9yIGluIG9yZGVyZWQKKwkJCQkJCSogbW9kZSAqLwogCiAvKgogICogRnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgam91cm5hbGluZyB0cmFuc2FjdGlvbiBhbmQgYnVmZmVyCkBAIC05ODQsNyArOTg3LDcgQEAKIAogI2RlZmluZSBqYmRfRU5PU1lTKCkgXAogZG8gewkJCQkJCQkJICAgICAgICAgICBcCi0JcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXNcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19mdW5jX18pOyBcCiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICAgICAgIFwKIAlzY2hlZHVsZSgpOwkJCQkJCSAgICAgICAgICAgXAogfSB3aGlsZSAoMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkMi5oIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKaW5kZXggZDJlOTFlYS4uYzdkMTA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgobikgPD0gamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1ZykgewkJCVwKIAkJCXByaW50ayAoS0VSTl9ERUJVRyAiKCVzLCAlZCk6ICVzOiAiLAkJXAotCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwlcCiAJCQlwcmludGsgKGYsICMjIGEpOwkJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCkBAIC02NDEsNiArNjQxLDExIEBACiAJICovCiAJaW50IHRfaGFuZGxlX2NvdW50OwogCisJLyoKKwkgKiBGb3IgdXNlIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHN0b3JlIGZzLXNwZWNpZmljIGRhdGEKKwkgKiBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbnNhY3Rpb24KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfcHJpdmF0ZV9saXN0OwogfTsKIAogc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zIHsKQEAgLTkzNSw2ICs5NDAsMTAgQEAKIAogCXBpZF90CQkJal9sYXN0X3N5bmNfd3JpdGVyOwogCisJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGlzIGNsb3NlZCAqLworCXZvaWQJCQkoKmpfY29tbWl0X2NhbGxiYWNrKShqb3VybmFsX3QgKiwKKwkJCQkJCSAgICAgdHJhbnNhY3Rpb25fdCAqKTsKKwogCS8qCiAJICogSm91cm5hbCBzdGF0aXN0aWNzCiAJICovCkBAIC0xMTQzLDcgKzExNTIsNyBAQAogCiAjZGVmaW5lIGpiZF9FTk9TWVMoKSBcCiBkbyB7CQkJCQkJCQkgICAgICAgICAgIFwKLQlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19GVU5DVElPTl9fKTsgXAorCXByaW50ayAoS0VSTl9FUlIgIkpCRCB1bmltcGxlbWVudGVkIGZ1bmN0aW9uICVzXG4iLCBfX2Z1bmNfXyk7IFwKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwkJCSAgICAgICAgICAgXAogCXNjaGVkdWxlKCk7CQkJCQkJICAgICAgICAgICBcCiB9IHdoaWxlICgxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qb3VybmFsLWhlYWQuaCBiL2luY2x1ZGUvbGludXgvam91cm5hbC1oZWFkLmgKaW5kZXggOGE2MmQxZS4uYmI3MGViYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qb3VybmFsLWhlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIGJ1ZmZlcl9oZWFkIGZpZWxkcyBmb3IgSkJECiAgKgotICogMjcgTWF5IDIwMDEgQW5kcmV3IE1vcnRvbiA8YWtwbUBkaWdlby5jb20+CisgKiAyNyBNYXkgMjAwMSBBbmRyZXcgTW9ydG9uCiAgKglDcmVhdGVkIC0gcHVsbGVkIG91dCBvZiBmcy5oCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCmluZGV4IGI5NjE0NDguLmYzZmUzNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKQEAgLTkzLDEyICs5MywxMCBAQAogfQogCiAvKgotICogUHJldHR5LXByaW50IGEgZnVuY3Rpb24gcG9pbnRlci4KLSAqCi0gKiBpYTY0IGFuZCBwcGM2NCBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLAotICogd2hpY2ggY29udGFpbiBhIHBvaW50ZXIgdGhlIHJlYWwgYWRkcmVzcy4KKyAqIFByZXR0eS1wcmludCBhIGZ1bmN0aW9uIHBvaW50ZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuCisgKiBQbGVhc2UgdXNlIHRoZSAiJXBGIiB2c3ByaW50ZiBmb3JtYXQgaW5zdGVhZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKGNvbnN0IGNoYXIgKmZtdCwgdm9pZCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woY29uc3QgY2hhciAqZm10LCB2b2lkICphZGRyKQogewogI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQogCWFkZHIgPSAqKHZvaWQgKiopYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDc1ZDgxZjEuLjVhNTY2YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX3ByaW50ay5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKQEAgLTIxMyw2ICsyMTQsOSBAQAogCQl7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKK2V4dGVybiBpbnQgcHJpbnRrX25lZWRzX2NwdShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHByaW50a190aWNrKHZvaWQpOworCiBleHRlcm4gdm9pZCBhc21saW5rYWdlIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKIAllYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogCkBAIC0yMzUsOSArMjM5LDEwIEBACiBleHRlcm4gaW50IHBhbmljX3RpbWVvdXQ7CiBleHRlcm4gaW50IHBhbmljX29uX29vcHM7CiBleHRlcm4gaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKLWV4dGVybiBpbnQgdGFpbnRlZDsKIGV4dGVybiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpOwotZXh0ZXJuIHZvaWQgYWRkX3RhaW50KHVuc2lnbmVkKTsKK2V4dGVybiB2b2lkIGFkZF90YWludCh1bnNpZ25lZCBmbGFnKTsKK2V4dGVybiBpbnQgdGVzdF90YWludCh1bnNpZ25lZCBmbGFnKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF90YWludCh2b2lkKTsKIGV4dGVybiBpbnQgcm9vdF9tb3VudGZsYWdzOwogCiAvKiBWYWx1ZXMgdXNlZCBmb3Igc3lzdGVtX3N0YXRlICovCkBAIC0yNTAsMTYgKzI1NSwxNyBAQAogCVNZU1RFTV9TVVNQRU5EX0RJU0ssCiB9IHN5c3RlbV9zdGF0ZTsKIAotI2RlZmluZSBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUJKDE8PDApCi0jZGVmaW5lIFRBSU5UX0ZPUkNFRF9NT0RVTEUJCSgxPDwxKQotI2RlZmluZSBUQUlOVF9VTlNBRkVfU01QCQkoMTw8MikKLSNkZWZpbmUgVEFJTlRfRk9SQ0VEX1JNTU9ECQkoMTw8MykKLSNkZWZpbmUgVEFJTlRfTUFDSElORV9DSEVDSwkJKDE8PDQpCi0jZGVmaW5lIFRBSU5UX0JBRF9QQUdFCQkJKDE8PDUpCi0jZGVmaW5lIFRBSU5UX1VTRVIJCQkoMTw8NikKLSNkZWZpbmUgVEFJTlRfRElFCQkJKDE8PDcpCi0jZGVmaW5lIFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRQkoMTw8OCkKLSNkZWZpbmUgVEFJTlRfV0FSTgkJCSgxPDw5KQorI2RlZmluZSBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUJMAorI2RlZmluZSBUQUlOVF9GT1JDRURfTU9EVUxFCQkxCisjZGVmaW5lIFRBSU5UX1VOU0FGRV9TTVAJCTIKKyNkZWZpbmUgVEFJTlRfRk9SQ0VEX1JNTU9ECQkzCisjZGVmaW5lIFRBSU5UX01BQ0hJTkVfQ0hFQ0sJCTQKKyNkZWZpbmUgVEFJTlRfQkFEX1BBR0UJCQk1CisjZGVmaW5lIFRBSU5UX1VTRVIJCQk2CisjZGVmaW5lIFRBSU5UX0RJRQkJCTcKKyNkZWZpbmUgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFCTgKKyNkZWZpbmUgVEFJTlRfV0FSTgkJCTkKKyNkZWZpbmUgVEFJTlRfQ1JBUAkJCTEwCiAKIGV4dGVybiB2b2lkIGR1bXBfc3RhY2sodm9pZCkgX19jb2xkOwogCkBAIC0zMDMsOCArMzA5LDEyIEBACiAjZGVmaW5lIHByX2luZm8oZm10LCBhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9JTkZPIGZtdCwgIyNhcmcpCiAKLSNpZmRlZiBERUJVRwogLyogSWYgeW91IGFyZSB3cml0aW5nIGEgZHJpdmVyLCBwbGVhc2UgdXNlIGRldl9kYmcgaW5zdGVhZCAqLworI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgZG8geyBcCisJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI2FyZykKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggY2Y5ZjQwYS4uY2FjMzc1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtNTIsNiArNTIsNyBAQAogCXJldHVybiBzdW07CiB9CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGFjY291bnRfdXNlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjcHV0aW1lX3QpOwogZXh0ZXJuIHZvaWQgYWNjb3VudF91c2VyX3RpbWVfc2NhbGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjcHV0aW1lX3QpOwogZXh0ZXJuIHZvaWQgYWNjb3VudF9zeXN0ZW1fdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LCBjcHV0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaAppbmRleCBhMWE5MTU3Li45MjIxM2E5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttb2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApAQCAtOTksNCArOTksNyBAQAogZXh0ZXJuIGludCBjYWxsX3VzZXJtb2RlaGVscGVyX3BpcGUoY2hhciAqcGF0aCwgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10sCiAJCQkJICAgIHN0cnVjdCBmaWxlICoqZmlscCk7CiAKK2V4dGVybiBpbnQgdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHVzZXJtb2RlaGVscGVyX2VuYWJsZSh2b2lkKTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtLmggYi9pbmNsdWRlL2xpbnV4L2t2bS5oCmluZGV4IDcwYTMwNjUuLjc5N2ZjZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm0uaApAQCAtMzExLDIyICszMTEsMzMgQEAKIAogLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIHNpbmdsZSB0cmFjZSBidWZmZXIgcmVjb3JkLiAqLwogc3RydWN0IGt2bV90cmFjZV9yZWMgewotCV9fdTMyIGV2ZW50OjI4OwotCV9fdTMyIGV4dHJhX3UzMjozOwotCV9fdTMyIGN5Y2xlX2luOjE7CisJLyogdmFyaWFibGUgcmVjX3ZhbAorCSAqIGlzIHNwbGl0IGludG86CisJICogYml0cyAwIC0gMjcgIC0+IGV2ZW50IGlkCisJICogYml0cyAyOCAtMzAgIC0+IG51bWJlciBvZiBleHRyYSBkYXRhIGFyZ3Mgb2Ygc2l6ZSB1MzIKKwkgKiBiaXRzIDMxICAgICAgLT4gYmluYXJ5IGluZGljYXRvciBmb3IgaWYgdHNjIGlzIGluIHJlY29yZAorCSAqLworCV9fdTMyIHJlY192YWw7CiAJX191MzIgcGlkOwogCV9fdTMyIHZjcHVfaWQ7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJX191NjQgY3ljbGVfdTY0OworCQkJX191NjQgdGltZXN0YW1wOwogCQkJX191MzIgZXh0cmFfdTMyW0tWTV9UUkNfRVhUUkFfTUFYXTsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjeWNsZTsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0aW1lc3RhbXA7CiAJCXN0cnVjdCB7CiAJCQlfX3UzMiBleHRyYV91MzJbS1ZNX1RSQ19FWFRSQV9NQVhdOwotCQl9IG5vY3ljbGU7CisJCX0gbm90aW1lc3RhbXA7CiAJfSB1OwogfTsKIAorI2RlZmluZSBUUkFDRV9SRUNfRVZFTlRfSUQodmFsKSBcCisJCSgweDBmZmZmZmZmICYgKHZhbCkpCisjZGVmaW5lIFRSQUNFX1JFQ19OVU1fREFUQV9BUkdTKHZhbCkgXAorCQkoMHg3MDAwMDAwMCAmICgodmFsKSA8PCAyOCkpCisjZGVmaW5lIFRSQUNFX1JFQ19UQ1ModmFsKSBcCisJCSgweDgwMDAwMDAwICYgKCh2YWwpIDw8IDMxKSkKKwogI2RlZmluZSBLVk1JTyAweEFFCiAKIC8qCkBAIC0zNzIsNiArMzgzLDEwIEBACiAjZGVmaW5lIEtWTV9DQVBfTVBfU1RBVEUgMTQKICNkZWZpbmUgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTyAxNQogI2RlZmluZSBLVk1fQ0FQX1NZTkNfTU1VIDE2ICAvKiBDaGFuZ2VzIHRvIGhvc3QgbW1hcCBhcmUgcmVmbGVjdGVkIGluIGd1ZXN0ICovCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KXx8ZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVCAxNworI2VuZGlmCisjZGVmaW5lIEtWTV9DQVBfSU9NTVUgMTgKIAogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCkBAIC00MDEsNiArNDE2LDEwIEBACiAJCQlfSU9XKEtWTUlPLCAgMHg2Nywgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyBcCiAJCQlfSU9XKEtWTUlPLCAgMHg2OCwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQorI2RlZmluZSBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UgX0lPUihLVk1JTywgMHg2OSwgXAorCQkJCSAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKKyNkZWZpbmUgS1ZNX0FTU0lHTl9JUlEgX0lPUihLVk1JTywgMHg3MCwgXAorCQkJICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQogCiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwpAQCAtNDQwLDQgKzQ1OSw0NSBAQAogI2RlZmluZSBLVk1fR0VUX01QX1NUQVRFICAgICAgICAgIF9JT1IoS1ZNSU8sICAweDk4LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogI2RlZmluZSBLVk1fU0VUX01QX1NUQVRFICAgICAgICAgIF9JT1coS1ZNSU8sICAweDk5LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogCisjZGVmaW5lIEtWTV9UUkNfSU5KX1ZJUlEgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMikKKyNkZWZpbmUgS1ZNX1RSQ19SRURFTElWRVJfRVZUICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAzKQorI2RlZmluZSBLVk1fVFJDX1BFTkRfSU5UUiAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDQpCisjZGVmaW5lIEtWTV9UUkNfSU9fUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNSkKKyNkZWZpbmUgS1ZNX1RSQ19JT19XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA2KQorI2RlZmluZSBLVk1fVFJDX0NSX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDcpCisjZGVmaW5lIEtWTV9UUkNfQ1JfV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwOCkKKyNkZWZpbmUgS1ZNX1RSQ19EUl9SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA5KQorI2RlZmluZSBLVk1fVFJDX0RSX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEEpCisjZGVmaW5lIEtWTV9UUkNfTVNSX1JFQUQgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQikKKyNkZWZpbmUgS1ZNX1RSQ19NU1JfV1JJVEUgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBDKQorI2RlZmluZSBLVk1fVFJDX0NQVUlEICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEQpCisjZGVmaW5lIEtWTV9UUkNfSU5UUiAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRSkKKyNkZWZpbmUgS1ZNX1RSQ19OTUkgICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBGKQorI2RlZmluZSBLVk1fVFJDX1ZNTUNBTEwgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTApCisjZGVmaW5lIEtWTV9UUkNfSExUICAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMSkKKyNkZWZpbmUgS1ZNX1RSQ19DTFRTICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEyKQorI2RlZmluZSBLVk1fVFJDX0xNU1cgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTMpCisjZGVmaW5lIEtWTV9UUkNfQVBJQ19BQ0NFU1MgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNCkKKyNkZWZpbmUgS1ZNX1RSQ19URFBfRkFVTFQgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE1KQorI2RlZmluZSBLVk1fVFJDX0dUTEJfV1JJVEUgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTYpCisjZGVmaW5lIEtWTV9UUkNfU1RMQl9XUklURSAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNykKKyNkZWZpbmUgS1ZNX1RSQ19TVExCX0lOVkFMICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE4KQorI2RlZmluZSBLVk1fVFJDX1BQQ19JTlNUUiAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTkpCisKK3N0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldiB7CisJX191MzIgYXNzaWduZWRfZGV2X2lkOworCV9fdTMyIGJ1c25yOworCV9fdTMyIGRldmZuOworCV9fdTMyIGZsYWdzOworfTsKKworc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEgeworCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKKwlfX3UzMiBob3N0X2lycTsKKwlfX3UzMiBndWVzdF9pcnE7CisJX191MzIgZmxhZ3M7Cit9OworCisjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVQkoMSA8PCAwKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCA4NTI1YWZjLi4zODMzYzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIEtWTV9SRVFfTU1VX1JFTE9BRCAgICAgICAgIDMKICNkZWZpbmUgS1ZNX1JFUV9UUklQTEVfRkFVTFQgICAgICAgNAogI2RlZmluZSBLVk1fUkVRX1BFTkRJTkdfVElNRVIgICAgICA1CisjZGVmaW5lIEtWTV9SRVFfVU5IQUxUICAgICAgICAgICAgIDYKKyNkZWZpbmUgS1ZNX1JFUV9NTVVfU1lOQyAgICAgICAgICAgNwogCiBzdHJ1Y3Qga3ZtX3ZjcHU7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmt2bV92Y3B1X2NhY2hlOwpAQCAtMjc5LDEyICsyODEsNjggQEAKIAogc3RydWN0ICBrdm0gKmt2bV9hcmNoX2NyZWF0ZV92bSh2b2lkKTsKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fZnJlZV9hbGxfYXNzaWduZWRfZGV2aWNlcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiBpbnQga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdik7CiBpbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdik7CiBpbnQga3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fdmNwdV9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKK2ludCBrdm1faXNfbW1pb19wZm4ocGZuX3QgcGZuKTsKKworc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaW5rOworCXVuc2lnbmVkIGdzaTsKKwl2b2lkICgqaXJxX2Fja2VkKShzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOworfTsKKworc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsIHsKKwlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgYWNrX25vdGlmaWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnRlcnJ1cHRfd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IGFzc2lnbmVkX2Rldl9pZDsKKwlpbnQgaG9zdF9idXNucjsKKwlpbnQgaG9zdF9kZXZmbjsKKwlpbnQgaG9zdF9pcnE7CisJaW50IGd1ZXN0X2lycTsKKwlpbnQgaXJxX3JlcXVlc3RlZDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBrdm0gKmt2bTsKK307Cit2b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgaW50IGxldmVsKTsKK3ZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpOwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOworCisjaWZkZWYgQ09ORklHX0RNQVIKK2ludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgYmFzZV9nZm4sCisJCQl1bnNpZ25lZCBsb25nIG5wYWdlcyk7CitpbnQga3ZtX2lvbW11X21hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sCisJCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2Rldik7CitpbnQga3ZtX2lvbW11X3VubWFwX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSk7CisjZWxzZSAvKiBDT05GSUdfRE1BUiAqLworc3RhdGljIGlubGluZSBpbnQga3ZtX2lvbW11X21hcF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICAgZ2ZuX3QgYmFzZV9nZm4sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBucGFnZXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pb21tdV9tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbAorCQkJCSAgICAgICphc3NpZ25lZF9kZXYpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pb21tdV91bm1hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KKwogc3RhdGljIGlubGluZSB2b2lkIGt2bV9ndWVzdF9lbnRlcih2b2lkKQogewogCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwpAQCAtMzA3LDYgKzM2NSwxMSBAQAogCXJldHVybiAoZ3BhX3QpZ2ZuIDw8IFBBR0VfU0hJRlQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaHBhX3QgcGZuX3RvX2hwYShwZm5fdCBwZm4pCit7CisJcmV0dXJuIChocGFfdClwZm4gPDwgUEFHRV9TSElGVDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGt2bV9taWdyYXRlX3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc2V0X2JpdChLVk1fUkVRX01JR1JBVEVfVElNRVIsICZ2Y3B1LT5yZXF1ZXN0cyk7CkBAIC0zMjYsNiArMzg5LDI1IEBACiBleHRlcm4gc3RydWN0IGt2bV9zdGF0c19kZWJ1Z2ZzX2l0ZW0gZGVidWdmc19lbnRyaWVzW107CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqa3ZtX2RlYnVnZnNfZGlyOwogCisjZGVmaW5lIEtWTVRSQUNFXzVEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgZDQsIGQ1LCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCA1LCBkMSwgZDIsIGQzLCBkNCwgZDUpCisjZGVmaW5lIEtWTVRSQUNFXzREKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgZDQsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDQsIGQxLCBkMiwgZDMsIGQ0LCAwKQorI2RlZmluZSBLVk1UUkFDRV8zRChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDMsIGQxLCBkMiwgZDMsIDAsIDApCisjZGVmaW5lIEtWTVRSQUNFXzJEKGV2dCwgdmNwdSwgZDEsIGQyLCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCAyLCBkMSwgZDIsIDAsIDAsIDApCisjZGVmaW5lIEtWTVRSQUNFXzFEKGV2dCwgdmNwdSwgZDEsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDEsIGQxLCAwLCAwLCAwLCAwKQorI2RlZmluZSBLVk1UUkFDRV8wRChldnQsIHZjcHUsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDAsIDAsIDAsIDAsIDAsIDApCisKICNpZmRlZiBDT05GSUdfS1ZNX1RSQUNFCiBpbnQga3ZtX3RyYWNlX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwogdm9pZCBrdm1fdHJhY2VfY2xlYW51cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmggYi9pbmNsdWRlL2xpbnV4L21hcF90b183c2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjg0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21hcF90b183c2VnbWVudC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlbmsgVmVyZ29uZXQgPEhlbmsuVmVyZ29uZXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBNQVBfVE9fN1NFR01FTlRfSAorI2RlZmluZSBNQVBfVE9fN1NFR01FTlRfSAorCisvKiBUaGlzIGZpbGUgcHJvdmlkZXMgdHJhbnNsYXRpb24gcHJpbWl0aXZlcyBhbmQgdGFibGVzIGZvciB0aGUgY29udmVyc2lvbgorICogb2YgKEFTQ0lJKSBjaGFyYWN0ZXJzIHRvIGEgNy1zZWdtZW50cyBub3RhdGlvbi4KKyAqCisgKiBUaGUgNyBzZWdtZW50J3Mgd2lraXBlZGlhIG5vdGF0aW9uIGJlbG93IGlzIHVzZWQgYXMgc3RhbmRhcmQuCisgKiBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2V2ZW5fc2VnbWVudF9kaXNwbGF5CisgKgorICogTm90YXRpb246CSstYS0rCisgKgkJZiAgIGIKKyAqCQkrLWctKworICoJCWUgICBjCisgKgkJKy1kLSsKKyAqCisgKiBVc2FnZToKKyAqCisgKiAgIFJlZ2lzdGVyIGEgbWFwIHZhcmlhYmxlLCBhbmQgZmlsbCBpdCB3aXRoIGEgY2hhcmFjdGVyIHNldDoKKyAqCXN0YXRpYyBTRUc3X0RFRkFVTFRfTUFQKG1hcF9zZWc3KTsKKyAqCisgKgorICogICBUaGVuIHVzZSBmb3IgY29udmVyc2lvbjoKKyAqCXNlZzcgPSBtYXBfdG9fc2VnNygmbWFwX3NlZzcsIHNvbWVfY2hhcik7CisgKgkuLi4KKyAqCisgKiBJbiBkZXZpY2UgZHJpdmVycyBpdCBpcyByZWNvbW1lbmRlZCwgaWYgcmVxdWlyZWQsIHRvIG1ha2UgdGhlIGNoYXIgbWFwCisgKiBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIHVzaW5nIHRoZSBmb2xsb3dpbmcgc2NoZW1lOgorICoKKyAqIHN0YXRpYyBzc2l6ZV90IHNob3dfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKSB7CisgKgltZW1jcHkoYnVmLCAmbWFwX3NlZzcsIHNpemVvZihtYXBfc2VnNykpOworICoJcmV0dXJuIHNpemVvZihtYXBfc2VnNyk7CisgKiB9CisgKiBzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjbnQpIHsKKyAqCWlmKGNudCAhPSBzaXplb2YobWFwX3NlZzcpKQorICoJCXJldHVybiAtRUlOVkFMOworICoJbWVtY3B5KCZtYXBfc2VnNywgYnVmLCBjbnQpOworICoJcmV0dXJuIGNudDsKKyAqIH0KKyAqIHN0YXRpYyBERVZJQ0VfQVRUUihtYXBfc2VnNywgUEVSTVNfUlcsIHNob3dfbWFwLCBzdG9yZV9tYXApOworICoKKyAqIEhpc3Rvcnk6CisgKiAyMDA1LTA1LTMxCVJGQyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisKKyNkZWZpbmUgQklUX1NFRzdfQQkJMAorI2RlZmluZSBCSVRfU0VHN19CCQkxCisjZGVmaW5lIEJJVF9TRUc3X0MJCTIKKyNkZWZpbmUgQklUX1NFRzdfRAkJMworI2RlZmluZSBCSVRfU0VHN19FCQk0CisjZGVmaW5lIEJJVF9TRUc3X0YJCTUKKyNkZWZpbmUgQklUX1NFRzdfRwkJNgorI2RlZmluZSBCSVRfU0VHN19SRVNFUlZFRAk3CisKK3N0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwIHsKKwl1bnNpZ25lZCBjaGFyCXRhYmxlWzEyOF07Cit9OworCitzdGF0aWMgaW5saW5lIGludCBtYXBfdG9fc2VnNyhzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCAqbWFwLCBpbnQgYykKK3sKKwlyZXR1cm4gYyA+PSAwICYmIGMgPCBzaXplb2YobWFwLT50YWJsZSkgPyBtYXAtPnRhYmxlW2NdIDogLUVJTlZBTDsKK30KKworI2RlZmluZSBTRUc3X0NPTlZFUlNJT05fTUFQKF9uYW1lLCBfbWFwKQlcCisJc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgX25hbWUgPSB7IC50YWJsZSA9IHsgX21hcCB9IH0KKworLyoKKyAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIGZhY2lsaXR5IHRoYXQgYWxsb3dzIHVzZXIgc3BhY2UgdG8gcmVkZWZpbmUKKyAqIGN1c3RvbSBjaGFyYWN0ZXIgc2V0cyBmb3IgTENEIGRldmljZXMuIFBsZWFzZSB1c2UgYSBzeXNmcyBpbnRlcmZhY2UKKyAqIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworI2RlZmluZSBNQVBfVE9fU0VHN19TWVNGU19GSUxFCSJtYXBfc2VnNyIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFTQ0lJIGNvbnZlcnNpb24gdGFibGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX1NFRzcobCxhLGIsYyxkLGUsZixnKQlcCisgICAgICAoCWE8PEJJVF9TRUc3X0EgfAliPDxCSVRfU0VHN19CIHwJYzw8QklUX1NFRzdfQyB8CWQ8PEJJVF9TRUc3X0QgfAlcCisJZTw8QklUX1NFRzdfRSB8CWY8PEJJVF9TRUc3X0YgfAlnPDxCSVRfU0VHN19HICkKKworI2RlZmluZSBfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKworI2RlZmluZSBfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJyEnLDAsMCwwLDAsMSwxLDApLCBfU0VHNygnIicsMCwxLDAsMCwwLDEsMCksIF9TRUc3KCcjJywwLDEsMSwwLDEsMSwwKSxcCisgX1NFRzcoJyQnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnJScsMCwwLDEsMCwwLDEsMCksIF9TRUc3KCcmJywxLDAsMSwxLDEsMSwxKSxcCisgX1NFRzcoJ1wnJywwLDAsMCwwLDAsMSwwKSxfU0VHNygnKCcsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCcpJywxLDEsMSwxLDAsMCwwKSxcCisgX1NFRzcoJyonLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnKycsMCwxLDEsMCwwLDAsMSksIF9TRUc3KCcsJywwLDAsMCwwLDEsMCwwKSxcCisgX1NFRzcoJy0nLDAsMCwwLDAsMCwwLDEpLCBfU0VHNygnLicsMCwwLDAsMCwxLDAsMCksIF9TRUc3KCcvJywwLDEsMCwwLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAorIF9TRUc3KCcwJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJzEnLDAsMSwxLDAsMCwwLDApLCBfU0VHNygnMicsMSwxLDAsMSwxLDAsMSksXAorIF9TRUc3KCczJywxLDEsMSwxLDAsMCwxKSwgX1NFRzcoJzQnLDAsMSwxLDAsMCwxLDEpLCBfU0VHNygnNScsMSwwLDEsMSwwLDEsMSksXAorIF9TRUc3KCc2JywxLDAsMSwxLDEsMSwxKSwgX1NFRzcoJzcnLDEsMSwxLDAsMCwwLDApLCBfU0VHNygnOCcsMSwxLDEsMSwxLDEsMSksXAorIF9TRUc3KCc5JywxLDEsMSwxLDAsMSwxKSwKKworI2RlZmluZSBfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJzonLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnOycsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc8JywxLDAsMCwwLDAsMSwxKSxcCisgX1NFRzcoJz0nLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnPicsMSwxLDAsMCwwLDAsMSksIF9TRUc3KCc/JywxLDEsMSwwLDAsMSwwKSxcCisgX1NFRzcoJ0AnLDEsMSwwLDEsMSwxLDEpLAorCisjZGVmaW5lIF9NQVBfNjVfOTBfQVNDSUlfU0VHN19BTFBIQV9VUFBSCVwKKyBfU0VHNygnQScsMSwxLDEsMCwxLDEsMSksIF9TRUc3KCdCJywxLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ0MnLDEsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnRCcsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCdFJywxLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ0YnLDEsMCwwLDAsMSwxLDEpLFwKKyBfU0VHNygnRycsMSwxLDEsMSwwLDEsMSksIF9TRUc3KCdIJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0knLDAsMSwxLDAsMCwwLDApLFwKKyBfU0VHNygnSicsMCwxLDEsMSwwLDAsMCksIF9TRUc3KCdLJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0wnLDAsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnTScsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCdOJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ08nLDEsMSwxLDEsMSwxLDApLFwKKyBfU0VHNygnUCcsMSwxLDAsMCwxLDEsMSksIF9TRUc3KCdRJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ1InLDEsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygnUycsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCdUJywwLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ1UnLDAsMSwxLDEsMSwxLDApLFwKKyBfU0VHNygnVicsMCwxLDEsMSwxLDEsMCksIF9TRUc3KCdXJywwLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ1gnLDAsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygnWScsMCwxLDEsMCwwLDEsMSksIF9TRUc3KCdaJywxLDEsMCwxLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJ1snLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnXFwnLDAsMCwxLDAsMCwxLDEpLF9TRUc3KCddJywxLDEsMSwxLDAsMCwwKSxcCisgX1NFRzcoJ14nLDEsMSwwLDAsMCwxLDApLCBfU0VHNygnXycsMCwwLDAsMSwwLDAsMCksIF9TRUc3KCdgJywwLDEsMCwwLDAsMCwwKSwKKworI2RlZmluZSBfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKyBfU0VHNygnQScsMSwxLDEsMCwxLDEsMSksIF9TRUc3KCdiJywwLDAsMSwxLDEsMSwxKSwgX1NFRzcoJ2MnLDAsMCwwLDEsMSwwLDEpLFwKKyBfU0VHNygnZCcsMCwxLDEsMSwxLDAsMSksIF9TRUc3KCdFJywxLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ0YnLDEsMCwwLDAsMSwxLDEpLFwKKyBfU0VHNygnRycsMSwxLDEsMSwwLDEsMSksIF9TRUc3KCdoJywwLDAsMSwwLDEsMSwxKSwgX1NFRzcoJ2knLDAsMCwxLDAsMCwwLDApLFwKKyBfU0VHNygnaicsMCwwLDEsMSwwLDAsMCksIF9TRUc3KCdrJywwLDAsMSwwLDEsMSwxKSwgX1NFRzcoJ0wnLDAsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnTScsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCduJywwLDAsMSwwLDEsMCwxKSwgX1NFRzcoJ28nLDAsMCwxLDEsMSwwLDEpLFwKKyBfU0VHNygnUCcsMSwxLDAsMCwxLDEsMSksIF9TRUc3KCdxJywxLDEsMSwwLDAsMSwxKSwgX1NFRzcoJ3InLDAsMCwwLDAsMSwwLDEpLFwKKyBfU0VHNygnUycsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCdUJywwLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ3UnLDAsMCwxLDEsMSwwLDApLFwKKyBfU0VHNygndicsMCwwLDEsMSwxLDAsMCksIF9TRUc3KCdXJywwLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ1gnLDAsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygneScsMCwxLDEsMSwwLDEsMSksIF9TRUc3KCdaJywxLDEsMCwxLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygneycsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCd8JywwLDAsMCwwLDEsMSwwKSwgX1NFRzcoJ30nLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnficsMSwwLDAsMCwwLDAsMCksCisKKy8qIE1hcHMgKi8KKworLyogVGhpcyBzZXQgdHJpZXMgdG8gbWFwIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSB2aXNpYmxlIGNoYXJhY3RlcmlzdGljcworICogb2YgdGhlIEFTQ0lJIHN5bWJvbCwgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgbGV0dGVycyBtYXkgZGlmZmVyIGluCisgKiBwcmVzZW50YXRpb24gb24gdGhlIGRpc3BsYXkuCisgKi8KKyNkZWZpbmUgTUFQX0FTQ0lJN1NFR19BTFBIQU5VTQkJCVwKKwlfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwlfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKKwlfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF82NV85MF9BU0NJSV9TRUc3X0FMUEhBX1VQUFIJXAorCV9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKwlfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wKKworLyogVGhpcyBzZXQgdHJpZXMgdG8gbWFwIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBzeW1ib2xpYyBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZm9yIG1heGltdW0gZGlzY3JpbWluYXRpb24uCisgKiBGb3Igbm93IHRoaXMgbWVhbnMgYWxsIGFscGhhIGNoYXJzIGFyZSBpbiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucy4KKyAqIChUaGlzIGZvciBleGFtcGxlIGZhY2lsaXRhdGVzIHRoZSB1c2Ugb2YgaGV4IG51bWJlcnMgd2l0aCB1cHBlcmNhc2UgaW5wdXQuKQorICovCisjZGVmaW5lIE1BUF9BU0NJSTdTRUdfQUxQSEFOVU1fTEMJCQlcCisJX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCisJX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCisJX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKwlfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wKKworI2RlZmluZSBTRUc3X0RFRkFVTFRfTUFQKF9uYW1lKQkJXAorCVNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsTUFQX0FTQ0lJN1NFR19BTFBIQU5VTSkKKworI2VuZGlmCS8qIE1BUF9UT183U0VHTUVOVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZmRmMzk2Ny4uMWZiZTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI3LDE2ICsyNywxMyBAQAogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIAotI2RlZmluZSBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAocGFnZSkJKChwYWdlKS0+cGFnZV9jZ3JvdXAgPSAwKQotCi1leHRlcm4gc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBhY3RpdmUpOwogZXh0ZXJuIGludCBtZW1fY2dyb3VwX3Nocmlua191c2FnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLApAQCAtNDQsNyArNDEsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsCiAJCQkJCWludCBtb2RlLCBzdHJ1Y3Qgem9uZSAqeiwKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJCQlpbnQgYWN0aXZlKTsKKwkJCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrKTsKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIApAQCAtNjksMjEgKzY2LDExIEBACiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3JlY29yZF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQkJaW50IHByaW9yaXR5KTsKIAotZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHpvbmUgKnpvbmUsCisJCQkJCWludCBwcmlvcml0eSwgZW51bSBscnVfbGlzdCBscnUpOworCiAKICNlbHNlIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9yZXNldF9iYWRfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9nZXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xNTksMTQgKzE0Niw5IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSwKKwkJCQkJZW51bSBscnVfbGlzdCBscnUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaCBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDMxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaApAQCAtMCwwICsxLDIwMSBAQAorI2lmbmRlZiBfX0xJTlVYX1BNSUNfREE5MDNYX0gKKyNkZWZpbmUgX19MSU5VWF9QTUlDX0RBOTAzWF9ICisKKy8qIFVuaWZpZWQgc3ViIGRldmljZSBJRHMgZm9yIERBOTAzMC9EQTkwMzQgKi8KK2VudW0geworCURBOTAzMF9JRF9MRURfMSwKKwlEQTkwMzBfSURfTEVEXzIsCisJREE5MDMwX0lEX0xFRF8zLAorCURBOTAzMF9JRF9MRURfNCwKKwlEQTkwMzBfSURfTEVEX1BDLAorCURBOTAzMF9JRF9WSUJSQSwKKwlEQTkwMzBfSURfV0xFRCwKKwlEQTkwMzBfSURfQlVDSzEsCisJREE5MDMwX0lEX0JVQ0syLAorCURBOTAzMF9JRF9MRE8xLAorCURBOTAzMF9JRF9MRE8yLAorCURBOTAzMF9JRF9MRE8zLAorCURBOTAzMF9JRF9MRE80LAorCURBOTAzMF9JRF9MRE81LAorCURBOTAzMF9JRF9MRE82LAorCURBOTAzMF9JRF9MRE83LAorCURBOTAzMF9JRF9MRE84LAorCURBOTAzMF9JRF9MRE85LAorCURBOTAzMF9JRF9MRE8xMCwKKwlEQTkwMzBfSURfTERPMTEsCisJREE5MDMwX0lEX0xETzEyLAorCURBOTAzMF9JRF9MRE8xMywKKwlEQTkwMzBfSURfTERPMTQsCisJREE5MDMwX0lEX0xETzE1LAorCURBOTAzMF9JRF9MRE8xNiwKKwlEQTkwMzBfSURfTERPMTcsCisJREE5MDMwX0lEX0xETzE4LAorCURBOTAzMF9JRF9MRE8xOSwKKwlEQTkwMzBfSURfTERPX0lOVCwJLyogTERPIEludGVybmFsICovCisKKwlEQTkwMzRfSURfTEVEXzEsCisJREE5MDM0X0lEX0xFRF8yLAorCURBOTAzNF9JRF9WSUJSQSwKKwlEQTkwMzRfSURfV0xFRCwKKwlEQTkwMzRfSURfVE9VQ0gsCisKKwlEQTkwMzRfSURfQlVDSzEsCisJREE5MDM0X0lEX0JVQ0syLAorCURBOTAzNF9JRF9MRE8xLAorCURBOTAzNF9JRF9MRE8yLAorCURBOTAzNF9JRF9MRE8zLAorCURBOTAzNF9JRF9MRE80LAorCURBOTAzNF9JRF9MRE81LAorCURBOTAzNF9JRF9MRE82LAorCURBOTAzNF9JRF9MRE83LAorCURBOTAzNF9JRF9MRE84LAorCURBOTAzNF9JRF9MRE85LAorCURBOTAzNF9JRF9MRE8xMCwKKwlEQTkwMzRfSURfTERPMTEsCisJREE5MDM0X0lEX0xETzEyLAorCURBOTAzNF9JRF9MRE8xMywKKwlEQTkwMzRfSURfTERPMTQsCisJREE5MDM0X0lEX0xETzE1LAorfTsKKworLyoKKyAqIERBOTAzMC9EQTkwMzQgTEVEcyBzdWItZGV2aWNlcyB1c2VzIGdlbmVyaWMgInN0cnVjdCBsZWRfaW5mbyIKKyAqIGFzIHRoZSBwbGF0Zm9ybV9kYXRhCisgKi8KKworLyogREE5MDMwIGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIgorICovCisjZGVmaW5lIERBOTAzMF9MRURfUkFURV9PTgkoMCA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX1JBVEVfMDUyUwkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV8xNgkoMCA8PCAzKQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV84CSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzQJKDIgPDwgMykKKyNkZWZpbmUgREE5MDMwX0xFRF9EVVRZXzFfMgkoMyA8PCAzKQorCisjZGVmaW5lIERBOTAzMF9WSUJSQV9NT0RFXzFQM1YJKDAgPDwgMSkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX01PREVfMlA3VgkoMSA8PCAxKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV8xSFoJKDAgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0ZSRVFfMkhaCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzRIWgkoMiA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV84SFoJKDMgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfT04JKDAgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfNzVQCSgxIDw8IDQpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9EVVRZXzUwUAkoMiA8PCA0KQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV8yNVAJKDMgPDwgNCkKKworLyogREE5MDM0IGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIiAqLworI2RlZmluZSBEQTkwMzRfTEVEX1JBTVAJCSgxIDw8IDcpCisKKy8qIERBOTAzNCB0b3VjaCBzY3JlZW4gcGxhdGZvcm0gZGF0YSAqLworc3RydWN0IGRhOTAzNF90b3VjaF9wZGF0YSB7CisJaW50CWludGVydmFsX21zOwkvKiBzYW1wbGluZyBpbnRlcnZhbCB3aGlsZSBwZW4gZG93biAqLworCWludAl4X2ludmVydGVkOworCWludAl5X2ludmVydGVkOworfTsKKworc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyB7CisJaW50CQlpZDsKKwljb25zdCBjaGFyCSpuYW1lOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworfTsKKworc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgbnVtX3N1YmRldnM7CisJc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyAqc3ViZGV2czsKK307CisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDMwIGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzBfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9QV1JFTgkJKDEgPDwgMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9UQkFUCQkoMSA8PCA0KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hJT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQURDX1JFQURZCQkoMSA8PCAxMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFA0CQkoMSA8PCAxMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFAwCQkoMSA8PCAxMikKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1NFU1NfVkFMSUQJCSgxIDw8IDEzKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfU1JQX0RFVEVDVAkJKDEgPDwgMTQpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMTUpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNQkJKDEgPDwgMTYpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNgkJKDEgPDwgMTcpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNwkJKDEgPDwgMTgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOAkJKDEgPDwgMTkpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOQkJKDEgPDwgMjApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9CVUNLMgkJKDEgPDwgMjEpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDM0IGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzRfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIREVUCQkoMSA8PCAzKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9SRVZfSU9WRVIJCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9JT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVVNCX0RFVgkJKDEgPDwgMTApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9PVEdDUF9JT1ZFUgkoMSA8PCAxMSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCVVNfNFA1NQkJKDEgPDwgMTIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9WQlVTXzNQOAkJKDEgPDwgMTMpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TRVNTXzFQOAkJKDEgPDwgMTQpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TUlBfUkVBRFkJCSgxIDw8IDE1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX01BTgkJKDEgPDwgMTYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfQVVUTzQJCSgxIDw8IDE3KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX0FVVE81CQkoMSA8PCAxOCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0FEQ19BVVRPNgkJKDEgPDwgMTkpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9QRU5fRE9XTgkJKDEgPDwgMjApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9UU0lfUkVBRFkJCSgxIDw8IDIxKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVUFSVF9UWAkJKDEgPDwgMjIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VQVJUX1JYCQkoMSA8PCAyMykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0hFQURTRVQJCSgxIDw8IDI1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfSE9PS1NXSVRDSAkJKDEgPDwgMjYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMjcpCisKK2V4dGVybiBpbnQgZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CitleHRlcm4gaW50IGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisKKy8qIFN0YXR1cyBRdWVyeSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgREE5MDMwX1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19QV1JFTjEJCSgxIDw8IDEpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfRVhUT04JCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19WQkFUTU9OCQkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX01DTEtERVQJCSgxIDw8IDcpCisKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfUEVOX0RPV04JCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfTUNMS0RFVAkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19VU0JfREVWCQkoMSA8PCA4KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDkpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfSE9PS1NXSVRDSAkoMSA8PCAxMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19SRU1DT04JCSgxIDw8IDExKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCVVNfVkFMSURfNFA1NQkoMSA8PCAxMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19WQlVTX1ZBTElEXzNQOAkoMSA8PCAxMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TRVNTX1ZBTElEXzFQOAkoMSA8PCAxNCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TUlBfUkVBRFkJCSgxIDw8IDE1KQorCitleHRlcm4gaW50IGRhOTAzeF9xdWVyeV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKworCisvKiBOT1RFOiB0aGUgdHdvIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZQorICogb2YgdGhlIERBOTAzNCBzdWItZGV2aWNlIGRyaXZlcnMKKyAqLworZXh0ZXJuIGludCBkYTkwM3hfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCk7CitleHRlcm4gaW50IGRhOTAzeF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCAqdmFsKTsKK2V4dGVybiBpbnQgZGE5MDN4X3VwZGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsLCB1aW50OF90IG1hc2spOworZXh0ZXJuIGludCBkYTkwM3hfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKK2V4dGVybiBpbnQgZGE5MDN4X2Nscl9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzayk7CisjZW5kaWYgLyogX19MSU5VWF9QTUlDX0RBOTAzWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmgKaW5kZXggZTgzYzdmMi4uYjQ2Mjk4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdDdsNjZ4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaApAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAKIHN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQgKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2Mzg3eGIuaAppbmRleCBmYTA2ZTA2Li5iNDg4ODIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmgKQEAgLTExLDkgKzExLDYgQEAKICNkZWZpbmUgTUZEX1RDNjM4N1hCX0gKIAogc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwotCiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oCmluZGV4IGZlYzdiM2YuLjYyNmU0NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaApAQCAtMTcsMTIgKzE3LDEyIEBACiAjaWZuZGVmIE1GRF9UQzYzOTNYQl9ICiAjZGVmaW5lIE1GRF9UQzYzOTNYQl9ICiAKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCiAvKiBBbHNvIG9uZSBzaG91bGQgcHJvdmlkZSB0aGUgQ0szUDZNSSBjbG9jayAqLwogc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgewogCXUxNglzY3JfcGxsMmNyOwkvKiBQTEwyIENvbnRyb2wgKi8KIAl1MTYJc2NyX2dwZXI7CS8qIEdQIEVuYWJsZSAqLwotCXUzMglzY3JfZ3BvX2RvZWNyOwkvKiBHUE8gRGF0YSBPRSBDb250cm9sICovCi0JdTMyCXNjcl9ncG9fZHNyOwkvKiBHUE8gRGF0YSBTZXQgKi8KIAogCWludAkoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQJKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpAQCAtMzEsMTUgKzMxLDI4IEBACiAKIAlpbnQJaXJxX2Jhc2U7CS8qIGJhc2UgZm9yIHN1YmRldmljZSBpcnFzICovCiAJaW50CWdwaW9fYmFzZTsKKwlpbnQJKCpzZXR1cCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKwl2b2lkCSgqdGVhcmRvd24pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKIAlzdHJ1Y3QgdG1pb19uYW5kX2RhdGEJKm5hbmRfZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhCSpmYl9kYXRhOworCisJdW5zaWduZWQgcmVzdW1lX3Jlc3RvcmUgOiAxOyAvKiBtYWtlIHNwZWNpYWwgYWN0aW9ucworCQkJCQl0byBwcmVzZXJ2ZSB0aGUgc3RhdGUKKwkJCQkJb24gc3VzcGVuZC9yZXN1bWUgKi8KIH07CiAKK2V4dGVybiBpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpOworZXh0ZXJuIGludCB0YzYzOTN4Yl9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiLCBib29sIG9uKTsKKwogLyoKICAqIFJlbGF0aXZlIHRvIGlycV9iYXNlCiAgKi8KICNkZWZpbmUJSVJRX1RDNjM5M19OQU5ECQkwCiAjZGVmaW5lCUlSUV9UQzYzOTNfTU1DCQkxCisjZGVmaW5lCUlSUV9UQzYzOTNfT0hDSQkJMgorI2RlZmluZQlJUlFfVEM2MzkzX0ZCCQk0CiAKICNkZWZpbmUJVEM2MzkzWEJfTlJfSVJRUwk4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaAppbmRleCBlYzYxMmU2Li41MTZkOTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBNRkRfVE1JT19ICiAjZGVmaW5lIE1GRF9UTUlPX0gKIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKICNkZWZpbmUgdG1pb19pb3JlYWQ4KGFkZHIpIHJlYWRiKGFkZHIpCiAjZGVmaW5lIHRtaW9faW9yZWFkMTYoYWRkcikgcmVhZHcoYWRkcikKICNkZWZpbmUgdG1pb19pb3JlYWQxNl9yZXAociwgYiwgbCkgcmVhZHN3KHIsIGIsIGwpCkBAIC0yNSw0ICsyNywyMSBAQAogCXVuc2lnbmVkIGludAkJbnVtX3BhcnRpdGlvbnM7CiB9OwogCisjZGVmaW5lIEZCSU9fVE1JT19BQ0NfV1JJVEUJMHg3QzYzOTMwMAorI2RlZmluZSBGQklPX1RNSU9fQUNDX1NZTkMJMHg3QzYzOTMwMQorCitzdHJ1Y3QgdG1pb19mYl9kYXRhIHsKKwlpbnQJCQkoKmxjZF9zZXRfcG93ZXIpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiX2RldiwKKwkJCQkJCQkJYm9vbCBvbik7CisJaW50CQkJKCpsY2RfbW9kZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmJfZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlKTsKKwlpbnQJCQludW1fbW9kZXM7CisJc3RydWN0IGZiX3ZpZGVvbW9kZQkqbW9kZXM7CisKKwkvKiBpbiBtbTogc2l6ZSBvZiBzY3JlZW4gKi8KKwlpbnQJCQloZWlnaHQ7CisJaW50CQkJd2lkdGg7Cit9OworCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAppbmRleCAwM2FlYTYxLi4zZjM0MDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtNyw3ICs3LDYgQEAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKm5ld19wYWdlX3Qoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBpbnQgKiopOwogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgotZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCk7CiBleHRlcm4gaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKIAkJCXN0cnVjdCBwYWdlICosIHN0cnVjdCBwYWdlICopOwpAQCAtMjEsOCArMjAsNiBAQAogCQljb25zdCBub2RlbWFza190ICpmcm9tLCBjb25zdCBub2RlbWFza190ICp0bywKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLQkJCQkJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfcGFnZV90IHgsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkgeyByZXR1cm4gLUVOT1NZUzsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGM2MWJhMTAuLmZmZWUyZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzMiw2ICsxMzIsMTEgQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgorICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKi8KKyNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCisKKy8qCiAgKiBtYXBwaW5nIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgdm1fZmxhZ3MgcHJvdGVjdGlvbiBiaXRzICh0aGUKICAqIGxvdyBmb3VyIGJpdHMpIHRvIGEgcGFnZSBwcm90ZWN0aW9uIG1hc2suLgogICovCkBAIC03MDAsMTAgKzcwNSwxMCBAQAogZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NITUVNCi1pbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CitleHRlcm4gaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLAotCQkJICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCisJCQkgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggODk1YmM0ZS4uYzk0ODM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0xLDQwICsxLDEwMCBAQAotc3RhdGljIGlubGluZSB2b2lkCi1hZGRfcGFnZV90b19hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCisjaWZuZGVmIExJTlVYX01NX0lOTElORV9ICisjZGVmaW5lIExJTlVYX01NX0lOTElORV9ICisKKy8qKgorICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICoKKyAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIG9yIDAgaWYgQHBhZ2UgaXMgYW5vbnltb3VzLCB0bXBmcyBvciBvdGhlcndpc2UgcmFtIG9yIHN3YXAgYmFja2VkLgorICogVXNlZCBieSBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBMUlUgbGlzdHMsIHRvIHNvcnQgYSBwYWdlCisgKiBvbnRvIHRoZSByaWdodCBMUlUgbGlzdC4KKyAqCisgKiBXZSB3b3VsZCBsaWtlIHRvIGdldCB0aGlzIGluZm8gd2l0aG91dCBhIHBhZ2UgZmxhZywgYnV0IHRoZSBzdGF0ZQorICogbmVlZHMgdG8gc3Vydml2ZSB1bnRpbCB0aGUgcGFnZSBpcyBsYXN0IGRlbGV0ZWQgZnJvbSB0aGUgTFJVLCB3aGljaAorICogY291bGQgYmUgYXMgZmFyIGRvd24gYXMgX19wYWdlX2NhY2hlX3JlbGVhc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfZmlsZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCXJldHVybiAwOworCisJLyogVGhlIHBhZ2UgaXMgcGFnZSBjYWNoZSBiYWNrZWQgYnkgYSBub3JtYWwgZmlsZXN5c3RlbS4gKi8KKwlyZXR1cm4gTFJVX0ZJTEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCithZGRfcGFnZV90b19scnVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbCkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtsXS5saXN0KTsKKwlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitkZWxfcGFnZV9mcm9tX2xydV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBsKQogewogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkZWxfcGFnZV9mcm9tX2xydShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJZW51bSBscnVfbGlzdCBsID0gTFJVX0JBU0U7CisKIAlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQlfX0NsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQkJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgewotCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJCV9fQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQkJbCArPSBMUlVfQUNUSVZFOworCQl9CisJCWwgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KKwlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKKy8qKgorICogcGFnZV9scnUgLSB3aGljaCBMUlUgbGlzdCBzaG91bGQgYSBwYWdlIGJlIG9uPworICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBMUlUgbGlzdCBhIHBhZ2Ugc2hvdWxkIGJlIG9uLCBhcyBhbiBpbmRleAorICogaW50byB0aGUgYXJyYXkgb2YgTFJVIGxpc3RzLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJbHJ1ICs9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gbHJ1OworfQorCisvKioKKyAqIGluYWN0aXZlX2Fub25faXNfbG93IC0gY2hlY2sgaWYgYW5vbnltb3VzIHBhZ2VzIG5lZWQgdG8gYmUgZGVhY3RpdmF0ZWQKKyAqIEB6b25lOiB6b25lIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB6b25lIGRvZXMgbm90IGhhdmUgZW5vdWdoIGluYWN0aXZlIGFub24gcGFnZXMsCisgKiBtZWFuaW5nIHNvbWUgYWN0aXZlIGFub24gcGFnZXMgbmVlZCB0byBiZSBkZWFjdGl2YXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IHpvbmUgKnpvbmUpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOworCisJYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKTsKKwlpbmFjdGl2ZSA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKworCWlmIChpbmFjdGl2ZSAqIHpvbmUtPmluYWN0aXZlX3JhdGlvIDwgYWN0aXZlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOWQ0OWZhMy4uZmU4MjU0NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk0LDkgKzk0LDYgQEAKIAl2b2lkICp2aXJ0dWFsOwkJCS8qIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKE5VTEwgaWYKIAkJCQkJICAgbm90IGttYXBwZWQsIGllLiBoaWdobWVtKSAqLwogI2VuZGlmIC8qIFdBTlRfUEFHRV9WSVJUVUFMICovCi0jaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKLQl1bnNpZ25lZCBsb25nIHBhZ2VfY2dyb3VwOwotI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggNDI4MzI4YS4uMzVhN2I1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC04MSwyMSArODEsMzEgQEAKIGVudW0gem9uZV9zdGF0X2l0ZW0gewogCS8qIEZpcnN0IDEyOCBieXRlIGNhY2hlbGluZSAoYXNzdW1pbmcgNjQgYml0IHdvcmRzKSAqLwogCU5SX0ZSRUVfUEFHRVMsCi0JTlJfSU5BQ1RJVkUsCi0JTlJfQUNUSVZFLAorCU5SX0xSVV9CQVNFLAorCU5SX0lOQUNUSVZFX0FOT04gPSBOUl9MUlVfQkFTRSwgLyogbXVzdCBtYXRjaCBvcmRlciBvZiBMUlVfW0lOXUFDVElWRSAqLworCU5SX0FDVElWRV9BTk9OLAkJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworCU5SX0lOQUNUSVZFX0ZJTEUsCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKwlOUl9BQ1RJVkVfRklMRSwJCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJTlJfVU5FVklDVEFCTEUsCQkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisJTlJfTUxPQ0ssCQkvKiBtbG9jaygpZWQgcGFnZXMgZm91bmQgYW5kIG1vdmVkIG9mZiBMUlUgKi8KKyNlbHNlCisJTlJfVU5FVklDVEFCTEUgPSBOUl9BQ1RJVkVfRklMRSwgLyogYXZvaWQgY29tcGlsZXIgZXJyb3JzIGluIGRlYWQgY29kZSAqLworCU5SX01MT0NLID0gTlJfQUNUSVZFX0ZJTEUsCisjZW5kaWYKIAlOUl9BTk9OX1BBR0VTLAkvKiBNYXBwZWQgYW5vbnltb3VzIHBhZ2VzICovCiAJTlJfRklMRV9NQVBQRUQsCS8qIHBhZ2VjYWNoZSBwYWdlcyBtYXBwZWQgaW50byBwYWdldGFibGVzLgogCQkJICAgb25seSBtb2RpZmllZCBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogCU5SX0ZJTEVfUEFHRVMsCiAJTlJfRklMRV9ESVJUWSwKIAlOUl9XUklURUJBQ0ssCi0JLyogU2Vjb25kIDEyOCBieXRlIGNhY2hlbGluZSAqLwogCU5SX1NMQUJfUkVDTEFJTUFCTEUsCiAJTlJfU0xBQl9VTlJFQ0xBSU1BQkxFLAogCU5SX1BBR0VUQUJMRSwJCS8qIHVzZWQgZm9yIHBhZ2V0YWJsZXMgKi8KIAlOUl9VTlNUQUJMRV9ORlMsCS8qIE5GUyB1bnN0YWJsZSBwYWdlcyAqLwogCU5SX0JPVU5DRSwKIAlOUl9WTVNDQU5fV1JJVEUsCisJLyogU2Vjb25kIDEyOCBieXRlIGNhY2hlbGluZSAqLwogCU5SX1dSSVRFQkFDS19URU1QLAkvKiBXcml0ZWJhY2sgdXNpbmcgdGVtcG9yYXJ5IGJ1ZmZlcnMgKi8KICNpZmRlZiBDT05GSUdfTlVNQQogCU5VTUFfSElULAkJLyogYWxsb2NhdGVkIGluIGludGVuZGVkIG5vZGUgKi8KQEAgLTEwNyw2ICsxMTcsNTUgQEAKICNlbmRpZgogCU5SX1ZNX1pPTkVfU1RBVF9JVEVNUyB9OwogCisvKgorICogV2UgZG8gYXJpdGhtZXRpYyBvbiB0aGUgTFJVIGxpc3RzIGluIHZhcmlvdXMgcGxhY2VzIGluIHRoZSBjb2RlLAorICogc28gaXQgaXMgaW1wb3J0YW50IHRvIGtlZXAgdGhlIGFjdGl2ZSBsaXN0cyBMUlVfQUNUSVZFIGhpZ2hlciBpbgorICogdGhlIGFycmF5IHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5hY3RpdmUgbGlzdHMsIGFuZCB0byBrZWVwCisgKiB0aGUgKl9GSUxFIGxpc3RzIExSVV9GSUxFIGhpZ2hlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIF9BTk9OIGxpc3RzLgorICoKKyAqIFRoaXMgaGFzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBzdGF0aXN0aWNzIGluIHpvbmVfc3RhdF9pdGVtCisgKiBhYm92ZSBhbmQgdGhlIGRlc2NyaXB0aW9ucyBpbiB2bXN0YXRfdGV4dCBpbiBtbS92bXN0YXQuYworICovCisjZGVmaW5lIExSVV9CQVNFIDAKKyNkZWZpbmUgTFJVX0FDVElWRSAxCisjZGVmaW5lIExSVV9GSUxFIDIKKworZW51bSBscnVfbGlzdCB7CisJTFJVX0lOQUNUSVZFX0FOT04gPSBMUlVfQkFTRSwKKwlMUlVfQUNUSVZFX0FOT04gPSBMUlVfQkFTRSArIExSVV9BQ1RJVkUsCisJTFJVX0lOQUNUSVZFX0ZJTEUgPSBMUlVfQkFTRSArIExSVV9GSUxFLAorCUxSVV9BQ1RJVkVfRklMRSA9IExSVV9CQVNFICsgTFJVX0ZJTEUgKyBMUlVfQUNUSVZFLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlMUlVfVU5FVklDVEFCTEUsCisjZWxzZQorCUxSVV9VTkVWSUNUQUJMRSA9IExSVV9BQ1RJVkVfRklMRSwgLyogYXZvaWQgY29tcGlsZXIgZXJyb3JzIGluIGRlYWQgY29kZSAqLworI2VuZGlmCisJTlJfTFJVX0xJU1RTCit9OworCisjZGVmaW5lIGZvcl9lYWNoX2xydShsKSBmb3IgKGwgPSAwOyBsIDwgTlJfTFJVX0xJU1RTOyBsKyspCisKKyNkZWZpbmUgZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSBmb3IgKGwgPSAwOyBsIDw9IExSVV9BQ1RJVkVfRklMRTsgbCsrKQorCitzdGF0aWMgaW5saW5lIGludCBpc19maWxlX2xydShlbnVtIGxydV9saXN0IGwpCit7CisJcmV0dXJuIChsID09IExSVV9JTkFDVElWRV9GSUxFIHx8IGwgPT0gTFJVX0FDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfYWN0aXZlX2xydShlbnVtIGxydV9saXN0IGwpCit7CisJcmV0dXJuIChsID09IExSVV9BQ1RJVkVfQU5PTiB8fCBsID09IExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3VuZXZpY3RhYmxlX2xydShlbnVtIGxydV9saXN0IGwpCit7CisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCXJldHVybiAobCA9PSBMUlVfVU5FVklDVEFCTEUpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyB7CiAJaW50IGNvdW50OwkJLyogbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBsaXN0ICovCiAJaW50IGhpZ2g7CQkvKiBoaWdoIHdhdGVybWFyaywgZW1wdHlpbmcgbmVlZGVkICovCkBAIC0yNTEsMTAgKzMxMCwyMiBAQAogCiAJLyogRmllbGRzIGNvbW1vbmx5IGFjY2Vzc2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gc2Nhbm5lciAqLwogCXNwaW5sb2NrX3QJCWxydV9sb2NrOwkKLQlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJaW5hY3RpdmVfbGlzdDsKLQl1bnNpZ25lZCBsb25nCQlucl9zY2FuX2FjdGl2ZTsKLQl1bnNpZ25lZCBsb25nCQlucl9zY2FuX2luYWN0aXZlOworCXN0cnVjdCB7CisJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkJdW5zaWduZWQgbG9uZyBucl9zY2FuOworCX0gbHJ1W05SX0xSVV9MSVNUU107CisKKwkvKgorCSAqIFRoZSBwYWdlb3V0IGNvZGUgaW4gdm1zY2FuLmMga2VlcHMgdHJhY2sgb2YgaG93IG1hbnkgb2YgdGhlCisJICogbWVtL3N3YXAgYmFja2VkIGFuZCBmaWxlIGJhY2tlZCBwYWdlcyBhcmUgcmVmZWZlcmVuY2VkLgorCSAqIFRoZSBoaWdoZXIgdGhlIHJvdGF0ZWQvc2Nhbm5lZCByYXRpbywgdGhlIG1vcmUgdmFsdWFibGUKKwkgKiB0aGF0IGNhY2hlIGlzLgorCSAqCisJICogVGhlIGFub24gTFJVIHN0YXRzIGxpdmUgaW4gWzBdLCBmaWxlIExSVSBzdGF0cyBpbiBbMV0KKwkgKi8KKwl1bnNpZ25lZCBsb25nCQlyZWNlbnRfcm90YXRlZFsyXTsKKwl1bnNpZ25lZCBsb25nCQlyZWNlbnRfc2Nhbm5lZFsyXTsKKwogCXVuc2lnbmVkIGxvbmcJCXBhZ2VzX3NjYW5uZWQ7CSAgIC8qIHNpbmNlIGxhc3QgcmVjbGFpbSAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJICAgLyogem9uZSBmbGFncywgc2VlIGJlbG93ICovCiAKQEAgLTI3Niw2ICszNDcsMTIgQEAKIAkgKi8KIAlpbnQgcHJldl9wcmlvcml0eTsKIAorCS8qCisJICogVGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkVfQU5PTiB0byBJTkFDVElWRV9BTk9OIHBhZ2VzIG9uCisJICogdGhpcyB6b25lJ3MgTFJVLiAgTWFpbnRhaW5lZCBieSB0aGUgcGFnZW91dCBjb2RlLgorCSAqLworCXVuc2lnbmVkIGludCBpbmFjdGl2ZV9yYXRpbzsKKwogCiAJWk9ORV9QQURESU5HKF9wYWQyXykKIAkvKiBSYXJlbHkgdXNlZCBvciByZWFkLW1vc3RseSBmaWVsZHMgKi8KQEAgLTUyNCw4ICs2MDEsMTEgQEAKIAlzdHJ1Y3Qgem9uZSBub2RlX3pvbmVzW01BWF9OUl9aT05FU107CiAJc3RydWN0IHpvbmVsaXN0IG5vZGVfem9uZWxpc3RzW01BWF9aT05FTElTVFNdOwogCWludCBucl96b25lczsKLSNpZmRlZiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAKKyNpZmRlZiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAJLyogbWVhbnMgIVNQQVJTRU1FTSAqLwogCXN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7CisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKm5vZGVfcGFnZV9jZ3JvdXA7CisjZW5kaWYKICNlbmRpZgogCXN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhOwogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtODU0LDYgKzkzNCw3IEBACiAjZW5kaWYKIAogc3RydWN0IHBhZ2U7CitzdHJ1Y3QgcGFnZV9jZ3JvdXA7CiBzdHJ1Y3QgbWVtX3NlY3Rpb24gewogCS8qCiAJICogVGhpcyBpcywgbG9naWNhbGx5LCBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0CkBAIC04NzEsNiArOTUyLDE0IEBACiAKIAkvKiBTZWUgZGVjbGFyYXRpb24gb2Ygc2ltaWxhciBmaWVsZCBpbiBzdHJ1Y3Qgem9uZSAqLwogCXVuc2lnbmVkIGxvbmcgKnBhZ2VibG9ja19mbGFnczsKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgorCS8qCisJICogSWYgIVNQQVJTRU1FTSwgcGdkYXQgZG9lc24ndCBoYXZlIHBhZ2VfY2dyb3VwIHBvaW50ZXIuIFdlIHVzZQorCSAqIHNlY3Rpb24uIChzZWUgbWVtY29udHJvbC5oL3BhZ2VfY2dyb3VwLmggYWJvdXQgdGhpcy4pCisJICovCisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2Nncm91cDsKKwl1bnNpZ25lZCBsb25nIHBhZDsKKyNlbmRpZgogfTsKIAogI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKaW5kZXggZDZhM2Y0Ny4uZWI3MWI0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC0yODQsNyArMjg0LDcgQEAKIC8qIElucHV0ICovCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9FVl9NQVgJCTB4MWYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0tFWV9NSU5fSU5URVJFU1RJTkcJMHg3MQotI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWAkJMHgxZmYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0tFWV9NQVgJCTB4MmZmCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9SRUxfTUFYCQkweDBmCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9BQlNfTUFYCQkweDNmCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NU0NfTUFYCQkweDA3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA2OGUwOTU1Li5hNDE1NTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTM0NSw3ICszNDUsNiBAQAogCS8qIFJlZmVyZW5jZSBjb3VudHMgKi8KIAlzdHJ1Y3QgbW9kdWxlX3JlZiByZWZbTlJfQ1BVU107CiAjZW5kaWYKLQogfTsKICNpZm5kZWYgTU9EVUxFX0FSQ0hfSU5JVAogI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggMzBhMWQ2My4uY2FiMmE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtNSw4ICs1LDYgQEAKICAqCiAgKiBBdXRob3I6ICBNYXJjbyB2YW4gV2llcmluZ2VuIDxtdndAcGxhbmV0cy5lbG0ubmV0PgogICoKLSAqIFZlcnNpb246ICRJZDogbW91bnQuaCx2IDIuMCAxOTk2LzExLzE3IDE2OjQ4OjE0IG12dyBFeHAgbXZ3ICQKLSAqCiAgKi8KICNpZm5kZWYgX0xJTlVYX01PVU5UX0gKICNkZWZpbmUgX0xJTlVYX01PVU5UX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKaW5kZXggZDZmYjExNS4uZWU1MTI0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpX2VuZGlhbi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC94aXAuaD4KIAogI2lmZGVmIENPTkZJR19NVERfQ0ZJX0kxCiAjZGVmaW5lIGNmaV9pbnRlcmxlYXZlKGNmaSkgMQpAQCAtNDMwLDcgKzQzMSw2IEBACiB7CiAJbWFwX3dvcmQgdmFsOwogCXVpbnQzMl90IGFkZHIgPSBiYXNlICsgY2ZpX2J1aWxkX2NtZF9hZGRyKGNtZF9hZGRyLCBjZmlfaW50ZXJsZWF2ZShjZmkpLCB0eXBlKTsKLQogCXZhbCA9IGNmaV9idWlsZF9jbWQoY21kLCBtYXAsIGNmaSk7CiAKIAlpZiAocHJldl92YWwpCkBAIC00ODMsNiArNDgzLDEzIEBACiAJfQogfQogCitpbnQgX194aXByYW0gY2ZpX3FyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSk7CitpbnQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29uKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSk7Cit2b2lkIF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vZmYodWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOworCiBzdHJ1Y3QgY2ZpX2V4dHF1ZXJ5ICpjZmlfcmVhZF9wcmkoc3RydWN0IG1hcF9pbmZvICptYXAsIHVpbnQxNl90IGFkciwgdWludDE2X3Qgc2l6ZSwKIAkJCSAgICAgY29uc3QgY2hhciogbmFtZSk7CiBzdHJ1Y3QgY2ZpX2ZpeHVwIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oIGIvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmgKaW5kZXggMDhkZDEzMS4uZDRmMzhjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmgKQEAgLTczLDYgKzczLDEwIEBACiAJaW50IGJ1ZmZlcl93cml0ZV90aW1lOwogCWludCBlcmFzZV90aW1lOwogCisJaW50IHdvcmRfd3JpdGVfdGltZV9tYXg7CisJaW50IGJ1ZmZlcl93cml0ZV90aW1lX21heDsKKwlpbnQgZXJhc2VfdGltZV9tYXg7CisKIAl2b2lkICpwcml2OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAppbmRleCA5MjI2MzY1Li5lYWUyNmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApAQCAtMjUsOCArMjUsMTAgQEAKICNkZWZpbmUgTVREX0VSQVNFX0RPTkUgICAgICAgICAgMHgwOAogI2RlZmluZSBNVERfRVJBU0VfRkFJTEVEICAgICAgICAweDEwCiAKKyNkZWZpbmUgTVREX0ZBSUxfQUREUl9VTktOT1dOIDB4ZmZmZmZmZmYKKwogLyogSWYgdGhlIGVyYXNlIGZhaWxzLCBmYWlsX2FkZHIgbWlnaHQgaW5kaWNhdGUgZXhhY3RseSB3aGljaCBibG9jayBmYWlsZWQuICBJZgotICAgZmFpbF9hZGRyID0gMHhmZmZmZmZmZiwgdGhlIGZhaWx1cmUgd2FzIG5vdCBhdCB0aGUgZGV2aWNlIGxldmVsIG9yIHdhcyBub3QKKyAgIGZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTiwgdGhlIGZhaWx1cmUgd2FzIG5vdCBhdCB0aGUgZGV2aWNlIGxldmVsIG9yIHdhcyBub3QKICAgIHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1bGFyIGJsb2NrLiAqLwogc3RydWN0IGVyYXNlX2luZm8gewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC1ncGlvLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTUzNGU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC1ncGlvLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX0xJTlVYX01URF9OQU5EX0dQSU9fSAorI2RlZmluZSBfX0xJTlVYX01URF9OQU5EX0dQSU9fSAorCisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKworc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSB7CisJaW50CWdwaW9fbmNlOworCWludAlncGlvX253cDsKKwlpbnQJZ3Bpb19jbGU7CisJaW50CWdwaW9fYWxlOworCWludAlncGlvX3JkeTsKKwl2b2lkCSgqYWRqdXN0X3BhcnRzKShzdHJ1Y3QgZ3Bpb19uYW5kX3BsYXRkYXRhICosIHNpemVfdCk7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXVuc2lnbmVkIGludCBudW1fcGFydHM7CisJdW5zaWduZWQgaW50IG9wdGlvbnM7CisJaW50CWNoaXBfZGVsYXk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCA4MTc3NGU1Li43MzNkM2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC0yNDgsNiArMjQ4LDcgQEAKICAqIEByZWFkX3BhZ2VfcmF3OglmdW5jdGlvbiB0byByZWFkIGEgcmF3IHBhZ2Ugd2l0aG91dCBFQ0MKICAqIEB3cml0ZV9wYWdlX3JhdzoJZnVuY3Rpb24gdG8gd3JpdGUgYSByYXcgcGFnZSB3aXRob3V0IEVDQwogICogQHJlYWRfcGFnZToJZnVuY3Rpb24gdG8gcmVhZCBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yIHJlcXVpcmVtZW50cworICogQHJlYWRfc3VicGFnZToJZnVuY3Rpb24gdG8gcmVhZCBwYXJ0cyBvZiB0aGUgcGFnZSBjb3ZlcmVkIGJ5IEVDQy4KICAqIEB3cml0ZV9wYWdlOglmdW5jdGlvbiB0byB3cml0ZSBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yIHJlcXVpcmVtZW50cwogICogQHJlYWRfb29iOglmdW5jdGlvbiB0byByZWFkIGNoaXAgT09CIGRhdGEKICAqIEB3cml0ZV9vb2I6CWZ1bmN0aW9uIHRvIHdyaXRlIGNoaXAgT09CIGRhdGEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKaW5kZXggZDFiMzEwYy4uMGM2YmJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKQEAgLTE1Miw2ICsxNTIsOCBAQAogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0lOVAkJKDEgPDwgNikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JT0JFCQkoMSA8PCA1KQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1JEWV9DT05GCSgxIDw8IDQpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSEYJCSgxIDw8IDIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfU1lOQ19XUklURQkoMSA8PCAxKQogCiAvKgogICogQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgRjI0MGggKFIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmggYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKaW5kZXggNTAxNGY3YS4uYzkyYjRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaApAQCAtNzMsNyArNzMsNiBAQAogc3RydWN0IGRldmljZV9ub2RlOwogCiBpbnQgX19kZXZpbml0IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oIGIvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdjMWNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIFN1cGVySCBGTENUTCBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX19TSF9GTENUTF9IX18KKyNkZWZpbmUgX19TSF9GTENUTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKy8qIEZMQ1RMIHJlZ2lzdGVycyAqLworI2RlZmluZSBGTENNTkNSKGYpCQkoZi0+cmVnICsgMHgwKQorI2RlZmluZSBGTENNRENSKGYpCQkoZi0+cmVnICsgMHg0KQorI2RlZmluZSBGTENNQ0RSKGYpCQkoZi0+cmVnICsgMHg4KQorI2RlZmluZSBGTEFEUihmKQkJKGYtPnJlZyArIDB4QykKKyNkZWZpbmUgRkxBRFIyKGYpCQkoZi0+cmVnICsgMHgzQykKKyNkZWZpbmUgRkxEQVRBUihmKQkJKGYtPnJlZyArIDB4MTApCisjZGVmaW5lIEZMRFRDTlRSKGYpCQkoZi0+cmVnICsgMHgxNCkKKyNkZWZpbmUgRkxJTlRETUFDUihmKQkJKGYtPnJlZyArIDB4MTgpCisjZGVmaW5lIEZMQlNZVE1SKGYpCQkoZi0+cmVnICsgMHgxQykKKyNkZWZpbmUgRkxCU1lDTlQoZikJCShmLT5yZWcgKyAweDIwKQorI2RlZmluZSBGTERURklGTyhmKQkJKGYtPnJlZyArIDB4MjQpCisjZGVmaW5lIEZMRUNGSUZPKGYpCQkoZi0+cmVnICsgMHgyOCkKKyNkZWZpbmUgRkxUUkNSKGYpCQkoZi0+cmVnICsgMHgyQykKKyNkZWZpbmUJRkw0RUNDUkVTVUxUMChmKQkoZi0+cmVnICsgMHg4MCkKKyNkZWZpbmUJRkw0RUNDUkVTVUxUMShmKQkoZi0+cmVnICsgMHg4NCkKKyNkZWZpbmUJRkw0RUNDUkVTVUxUMihmKQkoZi0+cmVnICsgMHg4OCkKKyNkZWZpbmUJRkw0RUNDUkVTVUxUMyhmKQkoZi0+cmVnICsgMHg4QykKKyNkZWZpbmUJRkw0RUNDQ1IoZikJCShmLT5yZWcgKyAweDkwKQorI2RlZmluZQlGTDRFQ0NDTlQoZikJCShmLT5yZWcgKyAweDk0KQorI2RlZmluZQlGTEVSUkFEUihmKQkJKGYtPnJlZyArIDB4OTgpCisKKy8qIEZMQ01OQ1IgY29udHJvbCBiaXRzICovCisjZGVmaW5lIEVDQ1BPUzIJCSgweDEgPDwgMjUpCisjZGVmaW5lIF80RUNDQ05URU4JKDB4MSA8PCAyNCkKKyNkZWZpbmUgXzRFQ0NFTgkJKDB4MSA8PCAyMykKKyNkZWZpbmUgXzRFQ0NDT1JSRUNUCSgweDEgPDwgMjIpCisjZGVmaW5lIFNOQU5EX0UJCSgweDEgPDwgMTgpCS8qIFNOQU5EICgwPTUxMiAxPTIwNDgpKi8KKyNkZWZpbmUgUVRTRUxfRQkJKDB4MSA8PCAxNykKKyNkZWZpbmUgRU5ESUFOCQkoMHgxIDw8IDE2KQkvKiAxID0gbGl0dGxlIGVuZGlhbiAqLworI2RlZmluZSBGQ0tTRUxfRQkoMHgxIDw8IDE1KQorI2RlZmluZSBFQ0NQT1NfMDAJKDB4MDAgPDwgMTIpCisjZGVmaW5lIEVDQ1BPU18wMQkoMHgwMSA8PCAxMikKKyNkZWZpbmUgRUNDUE9TXzAyCSgweDAyIDw8IDEyKQorI2RlZmluZSBBQ01fU0FDQ0VTX01PREUJKDB4MDEgPDwgMTApCisjZGVmaW5lIE5BTldGX0UJCSgweDEgPDwgOSkKKyNkZWZpbmUgU0VfRAkJKDB4MSA8PCA4KQkvKiBTcGFyZSBhcmVhIGRpc2FibGUgKi8KKyNkZWZpbmUJQ0UxX0VOQUJMRQkoMHgxIDw8IDQpCS8qIENoaXAgRW5hYmxlIDEgKi8KKyNkZWZpbmUJQ0UwX0VOQUJMRQkoMHgxIDw8IDMpCS8qIENoaXAgRW5hYmxlIDAgKi8KKyNkZWZpbmUJVFlQRVNFTF9TRVQJKDB4MSA8PCAwKQorCisvKiBGTENNRENSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBBRFJDTlQyX0UJKDB4MSA8PCAzMSkJLyogNWJ5dGUgYWRkcmVzcyBlbmFibGUgKi8KKyNkZWZpbmUgQURSTURfRQkJKDB4MSA8PCAyNikJLyogU2VjdG9yIGFkZHJlc3MgYWNjZXNzICovCisjZGVmaW5lIENEU1JDX0UJCSgweDEgPDwgMjUpCS8qIERhdGEgYnVmZmVyIHNlbGVjdGlvbiAqLworI2RlZmluZSBET1NSX0UJCSgweDEgPDwgMjQpCS8qIFN0YXR1cyByZWFkIGNoZWNrICovCisjZGVmaW5lIFNFTFJXCQkoMHgxIDw8IDIxKQkvKiAgMDpyZWFkIDE6d3JpdGUgKi8KKyNkZWZpbmUgRE9BRFJfRQkJKDB4MSA8PCAyMCkJLyogQWRkcmVzcyBzdGFnZSBleGVjdXRlICovCisjZGVmaW5lIEFEUkNOVF8xCSgweDAwIDw8IDE4KQkvKiBBZGRyZXNzIGRhdGEgYnl0ZXM6IDFieXRlICovCisjZGVmaW5lIEFEUkNOVF8yCSgweDAxIDw8IDE4KQkvKiBBZGRyZXNzIGRhdGEgYnl0ZXM6IDJieXRlICovCisjZGVmaW5lIEFEUkNOVF8zCSgweDAyIDw8IDE4KQkvKiBBZGRyZXNzIGRhdGEgYnl0ZXM6IDNieXRlICovCisjZGVmaW5lIEFEUkNOVF80CSgweDAzIDw8IDE4KQkvKiBBZGRyZXNzIGRhdGEgYnl0ZXM6IDRieXRlICovCisjZGVmaW5lIERPQ01EMl9FCSgweDEgPDwgMTcpCS8qIDJuZCBjbWQgc3RhZ2UgZXhlY3V0ZSAqLworI2RlZmluZSBET0NNRDFfRQkoMHgxIDw8IDE2KQkvKiAxc3QgY21kIHN0YWdlIGV4ZWN1dGUgKi8KKworLyogRkxUUkNSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBUUlNUUlQJCSgweDEgPDwgMCkJLyogdHJhbnNsYXRpb24gc3RhcnQgKi8KKyNkZWZpbmUgVFJFTkQJCSgweDEgPDwgMSkJLyogdHJhbnNsYXRpb24gZW5kICovCisKKy8qIEZMNEVDQ0NSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZQlfNEVDQ0ZBCQkoMHgxIDw8IDIpCS8qIDQgc3ltYm9scyBjb3JyZWN0IGZhdWx0ICovCisjZGVmaW5lCV80RUNDRU5ECSgweDEgPDwgMSkJLyogNCBzeW1ib2xzIGVuZCAqLworI2RlZmluZQlfNEVDQ0VYU1QJKDB4MSA8PCAwKQkvKiA0IHN5bWJvbHMgZXhpc3QgKi8KKworI2RlZmluZSBJTklUX0ZMNEVDQ1JFU1VMVF9WQUwJMHgwM0ZGMDNGRgorI2RlZmluZSBMT09QX1RJTUVPVVRfTUFYCTB4MDAwMTAwMDAKKworI2RlZmluZSBtdGRfdG9fZmxjdGwobXRkKQljb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgc2hfZmxjdGwsIG10ZCkKKworc3RydWN0IHNoX2ZsY3RsIHsKKwlzdHJ1Y3QgbXRkX2luZm8JCW10ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwCWNoaXA7CisJdm9pZCBfX2lvbWVtCQkqcmVnOworCisJdWludDhfdAlkb25lX2J1ZmZbMjA0OCArIDY0XTsJLyogbWF4IHNpemUgMjA0OCArIDY0ICovCisJaW50CXJlYWRfYnl0ZXM7CisJaW50CWluZGV4OworCWludAlzZXFpbl9jb2x1bW47CQkvKiBjb2x1bW4gaW4gU0VRSU4gY21kICovCisJaW50CXNlcWluX3BhZ2VfYWRkcjsJLyogcGFnZV9hZGRyIGluIFNFUUlOIGNtZCAqLworCXVpbnQzMl90IHNlcWluX3JlYWRfY21kOwkJLyogcmVhZCBjbWQgaW4gU0VRSU4gY21kICovCisJaW50CWVyYXNlMV9wYWdlX2FkZHI7CS8qIHBhZ2VfYWRkciBpbiBFUkFTRTEgY21kICovCisJdWludDMyX3QgZXJhc2VfQURSQ05UOwkJLyogYml0cyBvZiBGTENNRENSIGluIEVSQVNFMSBjbWQgKi8KKwl1aW50MzJfdCByd19BRFJDTlQ7CS8qIGJpdHMgb2YgRkxDTURDUiBpbiBSRUFEIFdSSVRFIGNtZCAqLworCisJaW50CWh3ZWNjX2NhbnRfY29ycmVjdFs0XTsKKworCXVuc2lnbmVkIHBhZ2Vfc2l6ZToxOwkvKiBOQU5EIHBhZ2Ugc2l6ZSAoMCA9IDUxMiwgMSA9IDIwNDgpICovCisJdW5zaWduZWQgaHdlY2M6MTsJLyogSGFyZHdhcmUgRUNDICgwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkKSAqLworfTsKKworc3RydWN0IHNoX2ZsY3RsX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKwlpbnQJCQlucl9wYXJ0czsKKwl1bnNpZ25lZCBsb25nCQlmbGNtbmNyX3ZhbDsKKworCXVuc2lnbmVkIGhhc19od2VjYzoxOworfTsKKworI2VuZGlmCS8qIF9fU0hfRkxDVExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDBkODQyNGY3Li43ZDhlMDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtNzgsNiArNzgsOSBAQAogCQkJICBpbnQgZWNobyk7CiBleHRlcm4gaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncyk7CiAKK2V4dGVybiB2b2lkIG5mbmxfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIG5mbmxfdW5sb2NrKHZvaWQpOworCiAjZGVmaW5lIE1PRFVMRV9BTElBU19ORk5MX1NVQlNZUyhzdWJzeXMpIFwKIAlNT0RVTEVfQUxJQVMoIm5mbmV0bGluay1zdWJzeXMtIiBfX3N0cmluZ2lmeShzdWJzeXMpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCA3OGE1OTIyLi40ZWFhODM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTEzNyw3ICsxMzcsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lb190aW1lc3RhbXA7CiAJX191NjQJCQljaGFuZ2VfYXR0cjsJCS8qIHY0IG9ubHkgKi8KIAotCXVuc2lnbmVkIGxvbmcJCWxhc3RfdXBkYXRlZDsKKwl1bnNpZ25lZCBsb25nCQlhdHRyX2dlbmNvdW50OwogCS8qICJHZW5lcmF0aW9uIGNvdW50ZXIiIGZvciB0aGUgYXR0cmlidXRlIGNhY2hlLiBUaGlzIGlzCiAJICogYnVtcGVkIHdoZW5ldmVyIHdlIHVwZGF0ZSB0aGUgbWV0YWRhdGEgb24gdGhlCiAJICogc2VydmVyLgpAQCAtMjAwLDExICsyMDAsMTAgQEAKIC8qCiAgKiBCaXQgb2Zmc2V0cyBpbiBmbGFncyBmaWVsZAogICovCi0jZGVmaW5lIE5GU19JTk9fUkVWQUxJREFUSU5HCSgwKQkJLyogcmV2YWxpZGF0aW5nIGF0dHJzICovCi0jZGVmaW5lIE5GU19JTk9fQURWSVNFX1JEUExVUwkoMSkJCS8qIGFkdmlzZSByZWFkZGlycGx1cyAqLwotI2RlZmluZSBORlNfSU5PX1NUQUxFCQkoMikJCS8qIHBvc3NpYmxlIHN0YWxlIGlub2RlICovCi0jZGVmaW5lIE5GU19JTk9fQUNMX0xSVV9TRVQJKDMpCQkvKiBJbm9kZSBpcyBvbiB0aGUgTFJVIGxpc3QgKi8KLSNkZWZpbmUgTkZTX0lOT19NT1VOVFBPSU5UCSg0KQkJLyogaW5vZGUgaXMgcmVtb3RlIG1vdW50cG9pbnQgKi8KKyNkZWZpbmUgTkZTX0lOT19BRFZJU0VfUkRQTFVTCSgwKQkJLyogYWR2aXNlIHJlYWRkaXJwbHVzICovCisjZGVmaW5lIE5GU19JTk9fU1RBTEUJCSgxKQkJLyogcG9zc2libGUgc3RhbGUgaW5vZGUgKi8KKyNkZWZpbmUgTkZTX0lOT19BQ0xfTFJVX1NFVAkoMikJCS8qIElub2RlIGlzIG9uIHRoZSBMUlUgbGlzdCAqLworI2RlZmluZSBORlNfSU5PX01PVU5UUE9JTlQJKDMpCQkvKiBpbm9kZSBpcyByZW1vdGUgbW91bnRwb2ludCAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW5vZGUgKk5GU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0zNDUsMTUgKzM0NCwxMSBAQAogZXh0ZXJuIHZvaWQgcHV0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7CiBleHRlcm4gc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKm5mc19maW5kX29wZW5fY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBtb2RlKTsKIGV4dGVybiB1NjQgbmZzX2NvbXBhdF91c2VyX2lubzY0KHU2NCBmaWxlaWQpOworZXh0ZXJuIHZvaWQgbmZzX2ZhdHRyX2luaXQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwogCiAvKiBsaW51eC9uZXQvaXB2NC9pcGNvbmZpZy5jOiB0cmltcyBpcCBhZGRyIG9mZiBmcm9udCBvZiBuYW1lLCB0b28uICovCiBleHRlcm4gX19iZTMyIHJvb3RfbmZzX3BhcnNlX2FkZHIoY2hhciAqbmFtZSk7IC8qX19pbml0Ki8KLQotc3RhdGljIGlubGluZSB2b2lkIG5mc19mYXR0cl9pbml0KHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCWZhdHRyLT52YWxpZCA9IDA7Ci0JZmF0dHItPnRpbWVfc3RhcnQgPSBqaWZmaWVzOwotfQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcih2b2lkKTsKIAogLyoKICAqIGxpbnV4L2ZzL25mcy9maWxlLmMKQEAgLTM3Miw4ICszNjcsMTIgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2NyZWQgKm5mc19maWxlX2NyZWQoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKGZpbGUgIT0gTlVMTCkKLQkJcmV0dXJuIG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKS0+Y3JlZDsKKwlpZiAoZmlsZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPQorCQkJbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOworCQlpZiAoY3R4KQorCQkJcmV0dXJuIGN0eC0+Y3JlZDsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IGM5YmVhY2QuLjRlNDc3YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMTE5LDcgKzExOSw2IEBACiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBuZnNfc2VydmVyICopOwogCiAJYXRvbWljX3QgYWN0aXZlOyAvKiBLZWVwIHRyYWNlIG9mIGFueSBhY3Rpdml0eSB0byB0aGlzIHNlcnZlciAqLwotCXdhaXRfcXVldWVfaGVhZF90IGFjdGl2ZV93cTsgIC8qIFdhaXQgZm9yIGFueSBhY3Rpdml0eSB0byBzdG9wICAqLwogCiAJLyogbW91bnRkLXJlbGF0ZWQgbW91bnQgb3B0aW9ucyAqLwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCW1vdW50ZF9hZGRyZXNzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmgKaW5kZXggZGY3YzZiNy4uNjU0OWEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCkBAIC02NSw0ICs2NSw4IEBACiAjZGVmaW5lIE5GU19NT1VOVF9VTlNIQVJFRAkweDgwMDAJLyogNSAqLwogI2RlZmluZSBORlNfTU9VTlRfRkxBR01BU0sJMHhGRkZGCiAKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seSAqLworI2RlZmluZSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHCTB4MTAwMDAKKyNkZWZpbmUgTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FCTB4MjAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDhjNzdjMTEuLmMxYzMxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC0zNiw2ICszNiw3IEBACiAJX191MzIJCQlubGluazsKIAlfX3UzMgkJCXVpZDsKIAlfX3UzMgkJCWdpZDsKKwlkZXZfdAkJCXJkZXY7CiAJX191NjQJCQlzaXplOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTQ2LDcgKzQ3LDYgQEAKIAkJCV9fdTY0CXVzZWQ7CiAJCX0gbmZzMzsKIAl9IGR1OwotCWRldl90CQkJcmRldjsKIAlzdHJ1Y3QgbmZzX2ZzaWQJCWZzaWQ7CiAJX191NjQJCQlmaWxlaWQ7CiAJc3RydWN0IHRpbWVzcGVjCQlhdGltZTsKQEAgLTU2LDYgKzU2LDcgQEAKIAlfX3U2NAkJCWNoYW5nZV9hdHRyOwkvKiBORlN2NCBjaGFuZ2UgYXR0cmlidXRlICovCiAJX191NjQJCQlwcmVfY2hhbmdlX2F0dHI7LyogcHJlLW9wIE5GU3Y0IGNoYW5nZSBhdHRyaWJ1dGUgKi8KIAl1bnNpZ25lZCBsb25nCQl0aW1lX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcJCWdlbmNvdW50OwogfTsKIAogI2RlZmluZSBORlNfQVRUUl9XQ0MJCTB4MDAwMQkJLyogcHJlLW9wIFdDQyBkYXRhICAgICovCkBAIC02NzIsMTYgKzY3MywxNiBAQAogCXN0cnVjdCBuZnNfZmF0dHIgKgkJbmV3X2ZhdHRyOwogfTsKIAotI2RlZmluZSBORlM0X1NFVENMSUVOVElEX05BTUVMRU4JKDU2KQorI2RlZmluZSBORlM0X1NFVENMSUVOVElEX05BTUVMRU4JKDEyNykKIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkIHsKIAljb25zdCBuZnM0X3ZlcmlmaWVyICoJCXNjX3ZlcmlmaWVyOwogCXVuc2lnbmVkIGludAkJCXNjX25hbWVfbGVuOwotCWNoYXIJCQkJc2NfbmFtZVtORlM0X1NFVENMSUVOVElEX05BTUVMRU5dOworCWNoYXIJCQkJc2NfbmFtZVtORlM0X1NFVENMSUVOVElEX05BTUVMRU4gKyAxXTsKIAl1MzIJCQkJc2NfcHJvZzsKIAl1bnNpZ25lZCBpbnQJCQlzY19uZXRpZF9sZW47Ci0JY2hhcgkJCQlzY19uZXRpZFtSUENCSU5EX01BWE5FVElETEVOXTsKKwljaGFyCQkJCXNjX25ldGlkW1JQQ0JJTkRfTUFYTkVUSURMRU4gKyAxXTsKIAl1bnNpZ25lZCBpbnQJCQlzY191YWRkcl9sZW47Ci0JY2hhcgkJCQlzY191YWRkcltSUENCSU5EX01BWFVBRERSTEVOXTsKKwljaGFyCQkJCXNjX3VhZGRyW1JQQ0JJTkRfTUFYVUFERFJMRU4gKyAxXTsKIAl1MzIJCQkJc2NfY2JfaWRlbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggNzk4ODZhZC4uZTI0ODhmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtNzEsNSArNzEsOCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX21hdGNoX25vZGUoCiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiBpbnQgb2ZfbW9kYWxpYXNfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNoYXIgKm1vZGFsaWFzLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJY29uc3QgY2hhciAqbGlzdF9uYW1lLCBjb25zdCBjaGFyICpjZWxsc19uYW1lLCBpbnQgaW5kZXgsCisJc3RydWN0IGRldmljZV9ub2RlICoqb3V0X25vZGUsIGNvbnN0IHZvaWQgKipvdXRfYXJncyk7CiAKICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCBjNzRkM2U4Li5iMTJmOTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtOTMsNiArOTMsMTEgQEAKIAlQR19tYXBwZWR0b2Rpc2ssCS8qIEhhcyBibG9ja3MgYWxsb2NhdGVkIG9uLWRpc2sgKi8KIAlQR19yZWNsYWltLAkJLyogVG8gYmUgcmVjbGFpbWVkIGFzYXAgKi8KIAlQR19idWRkeSwJCS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8KKwlQR19zd2FwYmFja2VkLAkJLyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJUEdfdW5ldmljdGFibGUsCQkvKiBQYWdlIGlzICJ1bmV2aWN0YWJsZSIgICovCisJUEdfbWxvY2tlZCwJCS8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi8KKyNlbmRpZgogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogCVBHX3VuY2FjaGVkLAkJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KICNlbmRpZgpAQCAtMTYxLDYgKzE2NiwxOCBAQAogI2RlZmluZSBURVNUU0NGTEFHKHVuYW1lLCBsbmFtZSkJCQkJCVwKIAlURVNUU0VURkxBRyh1bmFtZSwgbG5hbWUpIFRFU1RDTEVBUkZMQUcodW5hbWUsIGxuYW1lKQogCisjZGVmaW5lIFNFVFBBR0VGTEFHX05PT1AodW5hbWUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7ICB9CisKKyNkZWZpbmUgQ0xFQVJQQUdFRkxBR19OT09QKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBfX0NMRUFSUEFHRUZMQUdfTk9PUCh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0NsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDA7IH0KKwogc3RydWN0IHBhZ2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIAogVEVTVFBBR0VGTEFHKExvY2tlZCwgbG9ja2VkKQpAQCAtMTY5LDYgKzE4Niw3IEBACiBQQUdFRkxBRyhEaXJ0eSwgZGlydHkpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5KSBfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5KQogUEFHRUZMQUcoTFJVLCBscnUpIF9fQ0xFQVJQQUdFRkxBRyhMUlUsIGxydSkKIFBBR0VGTEFHKEFjdGl2ZSwgYWN0aXZlKSBfX0NMRUFSUEFHRUZMQUcoQWN0aXZlLCBhY3RpdmUpCisJVEVTVENMRUFSRkxBRyhBY3RpdmUsIGFjdGl2ZSkKIF9fUEFHRUZMQUcoU2xhYiwgc2xhYikKIFBBR0VGTEFHKENoZWNrZWQsIGNoZWNrZWQpCQkvKiBVc2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgKi8KIFBBR0VGTEFHKFBpbm5lZCwgcGlubmVkKSBURVNUU0NGTEFHKFBpbm5lZCwgcGlubmVkKQkvKiBYZW4gKi8KQEAgLTE3Niw2ICsxOTQsNyBAQAogUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKSBfX0NMRUFSUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKQogUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkgX19DTEVBUlBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCiAJX19TRVRQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQorUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkgX19DTEVBUlBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpCiAKIF9fUEFHRUZMQUcoU2xvYlBhZ2UsIHNsb2JfcGFnZSkKIF9fUEFHRUZMQUcoU2xvYkZyZWUsIHNsb2JfZnJlZSkKQEAgLTIxMSw2ICsyMzAsMjUgQEAKIFBBR0VGTEFHX0ZBTFNFKFN3YXBDYWNoZSkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKSBfX0NMRUFSUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCVRFU1RDTEVBUkZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCisjZGVmaW5lIE1MT0NLX1BBR0VTIDEKK1BBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpIF9fQ0xFQVJQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKKworI2Vsc2UKKworI2RlZmluZSBNTE9DS19QQUdFUyAwCitQQUdFRkxBR19GQUxTRShNbG9ja2VkKQorCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQorCitQQUdFRkxBR19GQUxTRShVbmV2aWN0YWJsZSkgVEVTVENMRUFSRkxBR19GQUxTRShVbmV2aWN0YWJsZSkKKwlTRVRQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKSBDTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisJX19DTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogUEFHRUZMQUcoVW5jYWNoZWQsIHVuY2FjaGVkKQogI2Vsc2UKQEAgLTMyNiwxNSArMzY0LDI1IEBACiAKICNlbmRpZiAvKiAhUEFHRUZMQUdTX0VYVEVOREVEICovCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJKDEgPDwgUEdfdW5ldmljdGFibGUpCisjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJKDEgPDwgUEdfbWxvY2tlZCkKKyNlbHNlCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJMAorI2RlZmluZSBfX1BHX01MT0NLRUQJCTAKKyNlbmRpZgorCiAjZGVmaW5lIFBBR0VfRkxBR1MJKDEgPDwgUEdfbHJ1ICAgfCAxIDw8IFBHX3ByaXZhdGUgICB8IDEgPDwgUEdfbG9ja2VkIHwgXAogCQkJIDEgPDwgUEdfYnVkZHkgfCAxIDw8IFBHX3dyaXRlYmFjayB8IFwKLQkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSkKKwkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSB8IFwKKwkJCSBfX1BHX1VORVZJQ1RBQkxFIHwgX19QR19NTE9DS0VEKQogCiAvKgogICogRmxhZ3MgY2hlY2tlZCBpbiBiYWRfcGFnZSgpLiAgUGFnZXMgb24gdGhlIGZyZWUgbGlzdCBzaG91bGQgbm90IGhhdmUKICAqIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZSBpcyBhIHByb2JsZW0uCiAgKi8KLSNkZWZpbmUgUEFHRV9GTEFHU19DTEVBUl9XSEVOX0JBRCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkpCisjZGVmaW5lIFBBR0VfRkxBR1NfQ0xFQVJfV0hFTl9CQUQgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkgfCAxIDw8IFBHX3N3YXBiYWNrZWQpCiAKIC8qCiAgKiBGbGFncyBjaGVja2VkIHdoZW4gYSBwYWdlIGlzIGZyZWVkLiAgUGFnZXMgYmVpbmcgZnJlZWQgc2hvdWxkIG5vdCBoYXZlCkBAIC0zNDcsNyArMzk1LDggQEAKICAqIFBhZ2VzIGJlaW5nIHByZXBwZWQgc2hvdWxkIG5vdCBoYXZlIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZQogICogaXMgYSBwcm9ibGVtLgogICovCi0jZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5KQorI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5IHwgMSA8PCBQR19zd2FwYmFja2VkKQogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqLwogI2VuZGlmCS8qIFBBR0VfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDM5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX19MSU5VWF9QQUdFX0NHUk9VUF9ICisjZGVmaW5lIF9fTElOVVhfUEFHRV9DR1JPVVBfSAorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKy8qCisgKiBQYWdlIENncm91cCBjYW4gYmUgY29uc2lkZXJlZCBhcyBhbiBleHRlbmRlZCBtZW1fbWFwLgorICogQSBwYWdlX2Nncm91cCBwYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYWdlIGRlc2NyaXB0b3IuIFRoZQorICogcGFnZV9jZ3JvdXAgaGVscHMgdXMgaWRlbnRpZnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNncm91cAorICogQWxsIHBhZ2UgY2dyb3VwcyBhcmUgYWxsb2NhdGVkIGF0IGJvb3Qgb3IgbWVtb3J5IGhvdHBsdWcgZXZlbnQsCisgKiB0aGVuIHRoZSBwYWdlIGNncm91cCBmb3IgcGZuIGFsd2F5cyBleGlzdHMuCisgKi8KK3N0cnVjdCBwYWdlX2Nncm91cCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIHBlciBjZ3JvdXAgTFJVIGxpc3QgKi8KK307CisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7Cit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpOworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworCitlbnVtIHsKKwkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCAqLworCVBDR19MT0NLLCAgLyogcGFnZSBjZ3JvdXAgaXMgbG9ja2VkICovCisJUENHX0NBQ0hFLCAvKiBjaGFyZ2VkIGFzIGNhY2hlICovCisJUENHX1VTRUQsIC8qIHRoaXMgb2JqZWN0IGlzIGluIHVzZS4gKi8KKwkvKiBmbGFncyBmb3IgTFJVIHBsYWNlbWVudCAqLworCVBDR19BQ1RJVkUsIC8qIHBhZ2UgaXMgYWN0aXZlIGluIHRoaXMgY2dyb3VwICovCisJUENHX0ZJTEUsIC8qIHBhZ2UgaXMgZmlsZSBzeXN0ZW0gYmFja2VkICovCisJUENHX1VORVZJQ1RBQkxFLCAvKiBwYWdlIGlzIHVuZXZpY3RhYmxlYWJsZSAqLworfTsKKworI2RlZmluZSBURVNUUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSBpbnQgUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgcmV0dXJuIHRlc3RfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgfQorCisjZGVmaW5lIFNFVFBDR0ZMQUcodW5hbWUsIGxuYW1lKQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKVwKKwl7IHNldF9iaXQoUENHXyMjbG5hbWUsICZwYy0+ZmxhZ3MpOyAgfQorCisjZGVmaW5lIENMRUFSUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgY2xlYXJfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgIH0KKworLyogQ2FjaGUgZmxhZyBpcyBzZXQgb25seSBvbmNlIChhdCBhbGxvY2F0aW9uKSAqLworVEVTVFBDR0ZMQUcoQ2FjaGUsIENBQ0hFKQorCitURVNUUENHRkxBRyhVc2VkLCBVU0VEKQorQ0xFQVJQQ0dGTEFHKFVzZWQsIFVTRUQpCisKKy8qIExSVSBtYW5hZ2VtZW50IGZsYWdzIChmcm9tIGdsb2JhbC1scnUgZGVmaW5pdGlvbikgKi8KK1RFU1RQQ0dGTEFHKEZpbGUsIEZJTEUpCitTRVRQQ0dGTEFHKEZpbGUsIEZJTEUpCitDTEVBUlBDR0ZMQUcoRmlsZSwgRklMRSkKKworVEVTVFBDR0ZMQUcoQWN0aXZlLCBBQ1RJVkUpCitTRVRQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorQ0xFQVJQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorCitURVNUUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCitTRVRQQ0dGTEFHKFVuZXZpY3RhYmxlLCBVTkVWSUNUQUJMRSkKK0NMRUFSUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY2dyb3VwX25pZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCXJldHVybiBwYWdlX3RvX25pZChwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIHBhZ2Vfem9uZW51bShwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJYml0X3NwaW5fbG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRyeWxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwlyZXR1cm4gYml0X3NwaW5fdHJ5bG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwliaXRfc3Bpbl91bmxvY2soUENHX0xPQ0ssICZwYy0+ZmxhZ3MpOworfQorCisjZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiAqLworc3RydWN0IHBhZ2VfY2dyb3VwOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQoreworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggNWRhMzFjMS4uNzA5NzQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTMyLDYgKzMyLDM0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorI2RlZmluZSBBU19VTkVWSUNUQUJMRQkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzZXRfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwljbGVhcl9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJaWYgKGxpa2VseShtYXBwaW5nKSkKKwkJcmV0dXJuIHRlc3RfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworCXJldHVybiAhIW1hcHBpbmc7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gKF9fZm9yY2UgZ2ZwX3QpbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CkBAIC0yNzEsMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHZvaWQgX19sb2NrX3BhZ2Vfbm9zeW5jKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzZXRfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlfX3NldF9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQljbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCV9fY2xlYXJfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJcmV0dXJuIChsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncykpKTsKIH0KIAogLyoKQEAgLTQxMCwxNyArNDM4LDE3IEBACiAKIC8qCiAgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IHVzZWQgdG8gYWRkIG5ld2x5IGFsbG9jYXRlZCBwYWdlczoKLSAqIHRoZSBwYWdlIGlzIG5ldywgc28gd2UgY2FuIGp1c3QgcnVuIHNldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCisgKiB0aGUgcGFnZSBpcyBuZXcsIHNvIHdlIGNhbiBqdXN0IHJ1biBfX3NldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsIGdmcF90IGdmcF9tYXNrKQogewogCWludCBlcnJvcjsKIAotCXNldF9wYWdlX2xvY2tlZChwYWdlKTsKKwlfX3NldF9wYWdlX2xvY2tlZChwYWdlKTsKIAllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQotCQljbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKaW5kZXggOGViN2ZhNy4uZTkwYTJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKQEAgLTIzLDkgKzIzLDkgQEAKIHZvaWQgX19wYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZV9ub25scnUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Ci12b2lkIF9fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpOwogdm9pZCBwYWdldmVjX3N0cmlwKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdW5zaWduZWQgcGFnZXZlY19sb29rdXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlwZ29mZl90IHN0YXJ0LCB1bnNpZ25lZCBucl9wYWdlcyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cF90YWcoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsCkBAIC04MSwxMCArODEsMzYgQEAKIAkJX19wYWdldmVjX2ZyZWUocHZlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZV9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2ZpbGUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBMUlVfSU5BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUocHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX2xydV9hZGRfYW5vbihwdmVjKTsKIH0KIAogI2VuZGlmIC8qIF9MSU5VWF9QQUdFVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKaW5kZXggNmEwZDdjZC4uZTFmODNjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKQEAgLTEsNSArMSwzIEBACi0vKiAkSWQ6IHBhcnBvcnQuaCx2IDEuMSAxOTk4LzA1LzE3IDEwOjU3OjUyIGFuZHJlYSBFeHAgYW5kcmVhICQgKi8KLQogLyoKICAqIEFueSBwYXJ0IG9mIHRoaXMgcHJvZ3JhbSBtYXkgYmUgdXNlZCBpbiBkb2N1bWVudHMgbGljZW5zZWQgdW5kZXIKICAqIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA5OGRjNjI0Li5hY2Y4ZjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTYzMSw2ICs2MzEsOCBAQAogaW50IHBjaV9zZWxlY3RfYmFycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogUk9NIGNvbnRyb2wgcmVsYXRlZCByb3V0aW5lcyAqLworaW50IHBjaV9lbmFibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3ZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHZvaWQgX19pb21lbSBfX211c3RfY2hlY2sgKnBjaV9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgKnNpemUpOwogdm9pZCBwY2lfdW5tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKnJvbSk7CiBzaXplX3QgcGNpX2dldF9yb21fc2l6ZSh2b2lkIF9faW9tZW0gKnJvbSwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAxMTc2ZjFmLi44ZWRkZGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTg3LDYgKzU4Nyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJCTB4MDUyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUAkweDA1MjEKICNkZWZpbmUJUENJX0RFVklDRV9JRF9NQVRST1hfRzQwMAkweDA1MjUKKyNkZWZpbmUJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMEVWX1BDSQkweDA1MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzU1MAkweDI1MjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfVklBCTB4NDUzNgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bmbi5oIGIvaW5jbHVkZS9saW51eC9wZm4uaAppbmRleCBiYjAxZjhiLi43NjQ2NjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bmbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZuLmgKQEAgLTEsOSArMSwxMyBAQAogI2lmbmRlZiBfTElOVVhfUEZOX0hfCiAjZGVmaW5lIF9MSU5VWF9QRk5fSF8KIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKICNkZWZpbmUgUEZOX0FMSUdOKHgpCSgoKHVuc2lnbmVkIGxvbmcpKHgpICsgKFBBR0VfU0laRSAtIDEpKSAmIFBBR0VfTUFTSykKICNkZWZpbmUgUEZOX1VQKHgpCSgoKHgpICsgUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBGTl9ET1dOKHgpCSgoeCkgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgUEZOX1BIWVMoeCkJKCh4KSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQRk5fUEhZUyh4KQkoKHBoeXNfYWRkcl90KSh4KSA8PCBQQUdFX1NISUZUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKaW5kZXggMWFmODJjNC4uZDgyZmU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKQEAgLTg0LDEyICs4NCw2IEBACiAJcmV0dXJuIHRzay0+bnNwcm94eS0+cGlkX25zOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JQlVHX09OKHRzayAhPSBjdXJyZW50KTsKLQlyZXR1cm4gdHNrLT5uc3Byb3h5LT5waWRfbnMtPmNoaWxkX3JlYXBlcjsKLX0KLQogdm9pZCBwaWRoYXNoX2luaXQodm9pZCk7CiB2b2lkIHBpZG1hcF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA5NWFjMjFhLi40YjhjYzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTM3LDYgKzM3LDggQEAKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoY29uc3QgY2hhciAqLCBpbnQgaWQsCiAJCQkJCXN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKHN0cnVjdCBkZXZpY2UgKiwKKwkJY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9hbGxvYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQpOwogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG51bSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNGRjY2U1NC4uNDJkZTQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDE5LDcgKzQxOSw3IEBACiAKICNkZWZpbmUgc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGZuLCByZXQpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX0ZVTkNUSU9OX18sIGZuLCByZXQpOwkJXAorCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX2Z1bmNfXywgZm4sIHJldCk7CQlcCiAJfSB3aGlsZSAoMCkKIAogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKaW5kZXggYmU3NjRlNS4uNTNiNzBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BucC5oCkBAIC0yMiw5ICsyMiwxMSBAQAogICogUmVzb3VyY2UgTWFuYWdlbWVudAogICovCiAjaWZkZWYgQ09ORklHX1BOUAotc3RydWN0IHJlc291cmNlICpwbnBfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbnBfZGV2ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJdW5zaWduZWQgaW50IG51bSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVzb3VyY2UgKnBucF9nZXRfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAorCQkJdW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBpbnQgbnVtKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKaW5kZXggYTdkZDM4Zi4uYTdjNzIxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCkBAIC00NSw4ICs0NSw2IEBACiAJaW50IGl0X3JlcXVldWVfcGVuZGluZzsJCS8qIHdhaXRpbmcgdG8gcmVxdWV1ZSB0aGlzIHRpbWVyICovCiAjZGVmaW5lIFJFUVVFVUVfUEVORElORyAxCiAJaW50IGl0X3NpZ2V2X25vdGlmeTsJCS8qIG5vdGlmeSB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLwotCWludCBpdF9zaWdldl9zaWdubzsJCS8qIHNpZ25vIHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCi0Jc2lndmFsX3QgaXRfc2lnZXZfdmFsdWU7CS8qIHZhbHVlIHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICppdF9wcm9jZXNzOwkvKiBwcm9jZXNzIHRvIHNlbmQgc2lnbmFsIHRvICovCiAJc3RydWN0IHNpZ3F1ZXVlICpzaWdxOwkJLyogc2lnbmFsIHF1ZXVlIGVudHJ5LiAqLwogCXVuaW9uIHsKQEAgLTExNSw0ICsxMTMsNiBAQAogCiBsb25nIGNsb2NrX25hbm9zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKTsKIAordm9pZCB1cGRhdGVfcmxpbWl0X2NwdSh1bnNpZ25lZCBsb25nIHJsaW1fbmV3KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaAppbmRleCBlYTk2ZWFkLi5mOTM0OGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKQEAgLTE2NSw2ICsxNjUsMTIgQEAKIGV4dGVybiB2b2lkIHBvd2VyX3N1cHBseV9jaGFuZ2VkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiBleHRlcm4gaW50IHBvd2VyX3N1cHBseV9hbV9pX3N1cHBsaWVkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QT1dFUl9TVVBQTFkpIHx8IGRlZmluZWQoQ09ORklHX1BPV0VSX1NVUFBMWV9NT0RVTEUpCitleHRlcm4gaW50IHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9CisjZW5kaWYKKwogZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJCSBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogZXh0ZXJuIHZvaWQgcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggZmI2MTg1MC4uMjdkNTM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTEzOSw3ICsxMzksNiBAQAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa2NvcmVfb3BlcmF0aW9uczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwY19odGFiX29wZXJhdGlvbnM7CiAKIGV4dGVybiBpbnQgcGlkX25zX3ByZXBhcmVfcHJvYyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwogZXh0ZXJuIHZvaWQgcGlkX25zX3JlbGVhc2VfcHJvYyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAppbmRleCA3ZTcwODcyLi41NzAwNDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaApAQCAtMzUsNyArMzUsOSBAQAogZXh0ZXJuIGludCBwcm9mX29uIF9fcmVhZF9tb3N0bHk7CiAKIC8qIGluaXQgYmFzaWMga2VybmVsIHByb2ZpbGVyICovCi12b2lkIF9faW5pdCBwcm9maWxlX2luaXQodm9pZCk7CitpbnQgcHJvZmlsZV9pbml0KHZvaWQpOworaW50IHByb2ZpbGVfc2V0dXAoY2hhciAqc3RyKTsKK2ludCBjcmVhdGVfcHJvY19wcm9maWxlKHZvaWQpOwogdm9pZCBwcm9maWxlX3RpY2soaW50IHR5cGUpOwogCiAvKgpAQCAtODQsOSArODYsOSBAQAogCiAjZGVmaW5lIHByb2Zfb24gMAogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvZmlsZV9pbml0KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBwcm9maWxlX2luaXQodm9pZCkKIHsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9maWxlX3RpY2soaW50IHR5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBlYTc0MTZjLi4yMjY0MWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTk0LDcgKzk0LDYgQEAKIGV4dGVybiB2b2lkIF9fcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKIAkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXdfcGFyZW50KTsKIGV4dGVybiB2b2lkIF9fcHRyYWNlX3VubGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogI2RlZmluZSBQVFJBQ0VfTU9ERV9SRUFEICAgMQogI2RlZmluZSBQVFJBQ0VfTU9ERV9BVFRBQ0ggMgogLyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBkZW5pYWwuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggMzc2YTA1MC4uNDA0MDFiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMjgsOCArMjgsNiBAQAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCi0gKgotICogVmVyc2lvbjogJElkOiBxdW90YS5oLHYgMi4wIDE5OTYvMTEvMTcgMTY6NDg6MTQgbXZ3IEV4cCBtdncgJAogICovCiAKICNpZm5kZWYgX0xJTlVYX1FVT1RBXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IGNhNmI5YjUuLmE1NThhNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTMsOSArMyw2IEBACiAgKiBtYWNyb3MgZXhwYW5kIHRvIHRoZSByaWdodCBzb3VyY2UtY29kZS4KICAqCiAgKiBBdXRob3I6ICBNYXJjbyB2YW4gV2llcmluZ2VuIDxtdndAcGxhbmV0cy5lbG0ubmV0PgotICoKLSAqIFZlcnNpb246ICRJZDogcXVvdGFvcHMuaCx2IDEuMiAxOTk4LzAxLzE1IDE2OjIyOjI2IGVjZCBFeHAgJAotICoKICAqLwogI2lmbmRlZiBfTElOVVhfUVVPVEFPUFNfCiAjZGVmaW5lIF9MSU5VWF9RVU9UQU9QU18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAppbmRleCA3ZTM3NTExLi5mMzhiOWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCkBAIC01LDggKzUsOCBAQAogCiBzdHJ1Y3QgZGV2X2luZm8gewogCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJc2l6ZTsKLQlzZWN0b3JfdAlvZmZzZXQ7CisJc2VjdG9yX3QJbnVtX3NlY3RvcnM7CisJc2VjdG9yX3QJc3RhcnRfc2VjdG9yOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm9fdDsKQEAgLTE1LDkgKzE1LDExIEBACiB7CiAJc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEgKnByZXY7CS8qIGVhcmxpZXIgdmVyc2lvbiAqLwogCWRldl9pbmZvX3QJCSoqaGFzaF90YWJsZTsKLQlzZWN0b3JfdAkJaGFzaF9zcGFjaW5nOworCXNlY3Rvcl90CQlzcGFjaW5nOwogCXNlY3Rvcl90CQlhcnJheV9zZWN0b3JzOwotCWludAkJCXByZXNoaWZ0OyAvKiBzaGlmdCBiZWZvcmUgZGl2aWRpbmcgYnkgaGFzaF9zcGFjaW5nICovCisJaW50CQkJc2VjdG9yX3NoaWZ0OwkvKiBzaGlmdCBiZWZvcmUgZGl2aWRpbmcKKwkJCQkJCSAqIGJ5IHNwYWNpbmcKKwkJCQkJCSAqLwogCWRldl9pbmZvX3QJCWRpc2tzWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAppbmRleCBkYzBlM2ZjLi44MmJlYTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApAQCAtMTksMjcgKzE5LDcgQEAKICNkZWZpbmUgX01EX0gKIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+CiAKIC8qCiAgKiAnbWRfcC5oJyBob2xkcyB0aGUgJ3BoeXNpY2FsJyBsYXlvdXQgb2YgUkFJRCBkZXZpY2VzCkBAIC03NCwxOSArNTQsMTcgQEAKIAogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiAKLWV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOwotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5IChzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwKTsKLWV4dGVybiBtZGtfdGhyZWFkX3QgKiBtZF9yZWdpc3Rlcl90aHJlYWQgKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCitleHRlcm4gaW50IHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIG1ka190aHJlYWRfdCAqIG1kX3JlZ2lzdGVyX3RocmVhZCh2b2lkICgqcnVuKSAobWRkZXZfdCAqbWRkZXYpLAogCQkJCW1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkIChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CitleHRlcm4gdm9pZCBtZF91bnJlZ2lzdGVyX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CiBleHRlcm4gdm9pZCBtZF93YWtldXBfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKIGV4dGVybiB2b2lkIG1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaSk7CiBleHRlcm4gdm9pZCBtZF93cml0ZV9lbmQobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfaGFuZGxlX3NhZmVtb2RlKG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKLWV4dGVybiB2b2lkIG1kX2Vycm9yIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7Ci1leHRlcm4gdm9pZCBtZF91bnBsdWdfbWRkZXYobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfZXJyb3IobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOwogCiBleHRlcm4gdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKIAkJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBlOTk2M2FmLi5iYzUxMTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC04Nyw3ICs4Nyw3IEBACiBpZiggISggY29uZCApICkgCQkJCQkJCQlcCiAgIHJlaXNlcmZzX3BhbmljKCBOVUxMLCAicmVpc2VyZnNbJWldOiBhc3NlcnRpb24gIiBzY29uZCAiIGZhaWxlZCBhdCAiCVwKIAkJICBfX0ZJTEVfXyAiOiVpOiVzOiAiIGZvcm1hdCAiXG4iLAkJXAotCQkgIGluX2ludGVycnVwdCgpID8gLTEgOiB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19MSU5FX18gLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MgKQorCQkgIGluX2ludGVycnVwdCgpID8gLTEgOiB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19MSU5FX18gLCBfX2Z1bmNfXyAsICMjYXJncyApCiAKICNkZWZpbmUgUkFTU0VSVChjb25kLCBmb3JtYXQsIGFyZ3MuLi4pIF9fUkFTU0VSVChjb25kLCAjY29uZCwgZm9ybWF0LCAjI2FyZ3MpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggZmVkNmY1ZS4uODlmMDU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTM5LDE4ICszOSw2IEBACiAKICNpZmRlZiBDT05GSUdfTU1VCiAKLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWFfYWxsb2Modm9pZCkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhhbm9uX3ZtYV9jYWNoZXAsIEdGUF9LRVJORUwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQotewotCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CkBAIC03NSw2ICs2Myw5IEBACiB2b2lkIGFub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCitleHRlcm4gc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSk7CisKIC8qCiAgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCiAgKi8KQEAgLTExNyw2ICsxMDgsMTkgQEAKICAqLwogaW50IHBhZ2VfbWtjbGVhbihzdHJ1Y3QgcGFnZSAqKTsKIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBjYWxsZWQgaW4gbXVubG9jaygpL211bm1hcCgpIHBhdGggdG8gY2hlY2sgZm9yIG90aGVyIHZtYXMgaG9sZGluZworICogdGhlIHBhZ2UgbWxvY2tlZC4KKyAqLworaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHRyeV90b19tdW5sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOwkvKiBhLmsuYS4gU1dBUF9TVUNDRVNTICovCit9CisjZW5kaWYKKwogI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KIAogI2RlZmluZSBhbm9uX3ZtYV9pbml0KCkJCWRvIHt9IHdoaWxlICgwKQpAQCAtMTQwLDUgKzE0NCw2IEBACiAjZGVmaW5lIFNXQVBfU1VDQ0VTUwkwCiAjZGVmaW5lIFNXQVBfQUdBSU4JMQogI2RlZmluZSBTV0FQX0ZBSUwJMgorI2RlZmluZSBTV0FQX01MT0NLCTMKIAogI2VuZGlmCS8qIF9MSU5VWF9STUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKaW5kZXggMzgyYmI3OS4uZjE5YjAwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKQEAgLTU0LDcgKzU0LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfUlRfTVVURVhFUwogIyBkZWZpbmUgX19ERUJVR19SVF9NVVRFWF9JTklUSUFMSVpFUihtdXRleG5hbWUpIFwKIAksIC5uYW1lID0gI211dGV4bmFtZSwgLmZpbGUgPSBfX0ZJTEVfXywgLmxpbmUgPSBfX0xJTkVfXwotIyBkZWZpbmUgcnRfbXV0ZXhfaW5pdChtdXRleCkJCQlfX3J0X211dGV4X2luaXQobXV0ZXgsIF9fRlVOQ1RJT05fXykKKyMgZGVmaW5lIHJ0X211dGV4X2luaXQobXV0ZXgpCQkJX19ydF9tdXRleF9pbml0KG11dGV4LCBfX2Z1bmNfXykKICBleHRlcm4gdm9pZCBydF9tdXRleF9kZWJ1Z190YXNrX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2Vsc2UKICMgZGVmaW5lIF9fREVCVUdfUlRfTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IGMyMjZjN2IuLjVjMzhkYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTQwMywxMiArNDAzLDIxIEBACiAjZGVmaW5lIE1NRl9EVU1QX01BUFBFRF9QUklWQVRFCTQKICNkZWZpbmUgTU1GX0RVTVBfTUFQUEVEX1NIQVJFRAk1CiAjZGVmaW5lIE1NRl9EVU1QX0VMRl9IRUFERVJTCTYKKyNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFIDcKKyNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDgKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUCU1NRl9EVU1QQUJMRV9CSVRTCi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTUKKyNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0JJVFMJNwogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfTUFTSyBcCiAJKCgoMSA8PCBNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSA8PCBNTUZfRFVNUF9GSUxURVJfU0hJRlQpCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9ERUZBVUxUIFwKLQkoKDEgPDwgTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8CSgxIDw8IE1NRl9EVU1QX0FOT05fU0hBUkVEKSkKKwkoKDEgPDwgTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8CSgxIDw8IE1NRl9EVU1QX0FOT05fU0hBUkVEKSB8XAorCSAoMSA8PCBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRikKKworI2lmZGVmIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUworIyBkZWZpbmUgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRgkoMSA8PCBNTUZfRFVNUF9FTEZfSEVBREVSUykKKyNlbHNlCisjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCTAKKyNlbmRpZgogCiBzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgewogCWF0b21pY190CQljb3VudDsKQEAgLTQyNSw2ICs0MzQsMzkgQEAKIAl1bnNpZ25lZCBsb25nCQlhY19taW5mbHQsIGFjX21hamZsdDsKIH07CiAKKy8qKgorICogc3RydWN0IHRhc2tfY3B1dGltZSAtIGNvbGxlY3RlZCBDUFUgdGltZSBjb3VudHMKKyAqIEB1dGltZToJCXRpbWUgc3BlbnQgaW4gdXNlciBtb2RlLCBpbiAmY3B1dGltZV90IHVuaXRzCisgKiBAc3RpbWU6CQl0aW1lIHNwZW50IGluIGtlcm5lbCBtb2RlLCBpbiAmY3B1dGltZV90IHVuaXRzCisgKiBAc3VtX2V4ZWNfcnVudGltZToJdG90YWwgdGltZSBzcGVudCBvbiB0aGUgQ1BVLCBpbiBuYW5vc2Vjb25kcworICoKKyAqIFRoaXMgc3RydWN0dXJlIGdyb3VwcyB0b2dldGhlciB0aHJlZSBraW5kcyBvZiBDUFUgdGltZSB0aGF0IGFyZQorICogdHJhY2tlZCBmb3IgdGhyZWFkcyBhbmQgdGhyZWFkIGdyb3Vwcy4gIE1vc3QgdGhpbmdzIGNvbnNpZGVyaW5nCisgKiBDUFUgdGltZSB3YW50IHRvIGdyb3VwIHRoZXNlIGNvdW50cyB0b2dldGhlciBhbmQgdHJlYXQgYWxsIHRocmVlCisgKiBvZiB0aGVtIGluIHBhcmFsbGVsLgorICovCitzdHJ1Y3QgdGFza19jcHV0aW1lIHsKKwljcHV0aW1lX3QgdXRpbWU7CisJY3B1dGltZV90IHN0aW1lOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW1fZXhlY19ydW50aW1lOworfTsKKy8qIEFsdGVybmF0ZSBmaWVsZCBuYW1lcyB3aGVuIHVzZWQgdG8gY2FjaGUgZXhwaXJhdGlvbnMuICovCisjZGVmaW5lIHByb2ZfZXhwCXN0aW1lCisjZGVmaW5lIHZpcnRfZXhwCXV0aW1lCisjZGVmaW5lIHNjaGVkX2V4cAlzdW1fZXhlY19ydW50aW1lCisKKy8qKgorICogc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lIC0gdGhyZWFkIGdyb3VwIGludGVydmFsIHRpbWVyIGNvdW50cworICogQHRvdGFsczoJCXRocmVhZCBncm91cCBpbnRlcnZhbCB0aW1lcnM7IHN1YnN0cnVjdHVyZSBmb3IKKyAqCQkJdW5pcHJvY2Vzc29yIGtlcm5lbCwgcGVyLWNwdSBmb3IgU01QIGtlcm5lbC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgdmVyc2lvbiBvZiB0YXNrX2NwdXRpbWUsIGFib3ZlLCB0aGF0IGlzCisgKiB1c2VkIGZvciB0aHJlYWQgZ3JvdXAgQ1BVIGNsb2NrIGNhbGN1bGF0aW9ucy4KKyAqLworc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lIHsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICp0b3RhbHM7Cit9OworCiAvKgogICogTk9URSEgInNpZ25hbF9zdHJ1Y3QiIGRvZXMgbm90IGhhdmUgaXQncyBvd24KICAqIGxvY2tpbmcsIGJlY2F1c2UgYSBzaGFyZWQgc2lnbmFsX3N0cnVjdCBhbHdheXMKQEAgLTQ3MCw2ICs1MTIsMTcgQEAKIAljcHV0aW1lX3QgaXRfcHJvZl9leHBpcmVzLCBpdF92aXJ0X2V4cGlyZXM7CiAJY3B1dGltZV90IGl0X3Byb2ZfaW5jciwgaXRfdmlydF9pbmNyOwogCisJLyoKKwkgKiBUaHJlYWQgZ3JvdXAgdG90YWxzIGZvciBwcm9jZXNzIENQVSBjbG9ja3MuCisJICogU2VlIHRocmVhZF9ncm91cF9jcHV0aW1lKCksIGV0IGFsLCBmb3IgZGV0YWlscy4KKwkgKi8KKwlzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWUgY3B1dGltZTsKKworCS8qIEVhcmxpZXN0LWV4cGlyYXRpb24gY2FjaGUuICovCisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lX2V4cGlyZXM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNwdV90aW1lcnNbM107CisKIAkvKiBqb2IgY29udHJvbCBJRHMgKi8KIAogCS8qCkBAIC01MDAsNyArNTUzLDcgQEAKIAkgKiBMaXZlIHRocmVhZHMgbWFpbnRhaW4gdGhlaXIgb3duIGNvdW50ZXJzIGFuZCBhZGQgdG8gdGhlc2UKIAkgKiBpbiBfX2V4aXRfc2lnbmFsLCBleGNlcHQgZm9yIHRoZSBncm91cCBsZWFkZXIuCiAJICovCi0JY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CisJY3B1dGltZV90IGN1dGltZSwgY3N0aW1lOwogCWNwdXRpbWVfdCBndGltZTsKIAljcHV0aW1lX3QgY2d0aW1lOwogCXVuc2lnbmVkIGxvbmcgbnZjc3csIG5pdmNzdywgY252Y3N3LCBjbml2Y3N3OwpAQCAtNTA5LDE0ICs1NjIsNiBAQAogCXN0cnVjdCB0YXNrX2lvX2FjY291bnRpbmcgaW9hYzsKIAogCS8qCi0JICogQ3VtdWxhdGl2ZSBucyBvZiBzY2hlZHVsZWQgQ1BVIHRpbWUgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUKLQkgKiBncm91cCwgbm90IGluY2x1ZGluZyBhIHpvbWJpZSBncm91cCBsZWFkZXIuICAoVGhpcyBvbmx5IGRpZmZlcnMKLQkgKiBmcm9tIGppZmZpZXNfdG9fbnModXRpbWUgKyBzdGltZSkgaWYgc2NoZWRfY2xvY2sgdXNlcyBzb21ldGhpbmcKLQkgKiBvdGhlciB0aGFuIGppZmZpZXMuKQotCSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW1fc2NoZWRfcnVudGltZTsKLQotCS8qCiAJICogV2UgZG9uJ3QgYm90aGVyIHRvIHN5bmNocm9uaXplIG1vc3QgcmVhZGVycyBvZiB0aGlzIGF0IGFsbCwKIAkgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYWRlciBjaGVja2luZyBhIGxpbWl0IHRoYXQgYWN0dWFsbHkgbmVlZHMKIAkgKiB0byBnZXQgYm90aCBybGltX2N1ciBhbmQgcmxpbV9tYXggYXRvbWljYWxseSwgYW5kIGVpdGhlciBvbmUKQEAgLTUyNyw4ICs1NzIsNiBAQAogCSAqLwogCXN0cnVjdCBybGltaXQgcmxpbVtSTElNX05MSU1JVFNdOwogCi0Jc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwotCiAJLyoga2VlcCB0aGUgcHJvY2Vzcy1zaGFyZWQga2V5cmluZ3MgaGVyZSBzbyB0aGF0IHRoZXkgZG8gdGhlIHJpZ2h0CiAJICogdGhpbmcgaW4gdGhyZWFkcyBjcmVhdGVkIHdpdGggQ0xPTkVfVEhSRUFEICovCiAjaWZkZWYgQ09ORklHX0tFWVMKQEAgLTExMzcsOCArMTE4MCw3IEBACiAvKiBtbSBmYXVsdCBhbmQgc3dhcCBpbmZvOiB0aGlzIGNhbiBhcmd1YWJseSBiZSBzZWVuIGFzIGVpdGhlciBtbS1zcGVjaWZpYyBvciB0aHJlYWQtc3BlY2lmaWMgKi8KIAl1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1hal9mbHQ7CiAKLSAgCWNwdXRpbWVfdCBpdF9wcm9mX2V4cGlyZXMsIGl0X3ZpcnRfZXhwaXJlczsKLQl1bnNpZ25lZCBsb25nIGxvbmcgaXRfc2NoZWRfZXhwaXJlczsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWVfZXhwaXJlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNwdV90aW1lcnNbM107CiAKIC8qIHByb2Nlc3MgY3JlZGVudGlhbHMgKi8KQEAgLTE1ODgsNiArMTYzMCw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcKIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB0aHJlYWRfZ3JvdXBfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAvKiBzY2hlZF9leGVjIGlzIGNhbGxlZCBieSBwcm9jZXNzZXMgcGVyZm9ybWluZyBhbiBleGVjICovCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjA4NSw2ICsyMTI4LDMwIEBACiB9CiAKIC8qCisgKiBUaHJlYWQgZ3JvdXAgQ1BVIHRpbWUgYWNjb3VudGluZy4KKyAqLworCitleHRlcm4gaW50IHRocmVhZF9ncm91cF9jcHV0aW1lX2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdGFza19jcHV0aW1lICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfaW5pdChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCXNpZy0+Y3B1dGltZS50b3RhbHMgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9jbG9uZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQoreworCWlmIChjdXJyLT5zaWduYWwtPmNwdXRpbWUudG90YWxzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdGhyZWFkX2dyb3VwX2NwdXRpbWVfYWxsb2MoY3Vycik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9mcmVlKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCit7CisJZnJlZV9wZXJjcHUoc2lnLT5jcHV0aW1lLnRvdGFscyk7Cit9CisKKy8qCiAgKiBSZWV2YWx1YXRlIHdoZXRoZXIgdGhlIHRhc2sgaGFzIHNpZ25hbHMgcGVuZGluZyBkZWxpdmVyeS4KICAqIFdha2UgdGhlIHRhc2sgaWYgc28uCiAgKiBUaGlzIGlzIHJlcXVpcmVkIGV2ZXJ5IHRpbWUgdGhlIGJsb2NrZWQgc2lnc2V0X3QgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAppbmRleCBhMTc4M2IyLi5kYzUwYmNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC02MCw2ICs2MCwxOSBAQAogCXJldHVybiBzZXFfYml0bWFwKG0sIG1hc2stPmJpdHMsIE1BWF9OVU1OT0RFUyk7CiB9CiAKK2ludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLAorCQl1bnNpZ25lZCBpbnQgbnJfYml0cyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlcV9jcHVtYXNrX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCBjcHVtYXNrX3QgKm1hc2spCit7CisJcmV0dXJuIHNlcV9iaXRtYXBfbGlzdChtLCBtYXNrLT5iaXRzLCBOUl9DUFVTKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VxX25vZGVtYXNrX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCBub2RlbWFza190ICptYXNrKQoreworCXJldHVybiBzZXFfYml0bWFwX2xpc3QobSwgbWFzay0+Yml0cywgTUFYX05VTU5PREVTKTsKK30KKwogaW50IHNpbmdsZV9vcGVuKHN0cnVjdCBmaWxlICosIGludCAoKikoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKiksIHZvaWQgKik7CiBpbnQgc2luZ2xlX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogdm9pZCAqX19zZXFfb3Blbl9wcml2YXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGUyMTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaF9pbnRjLmgKQEAgLTAsMCArMSw5MSBAQAorI2lmbmRlZiBfX1NIX0lOVENfSAorI2RlZmluZSBfX1NIX0lOVENfSAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgaW50Y19lbnVtOworCitzdHJ1Y3QgaW50Y192ZWN0IHsKKwlpbnRjX2VudW0gZW51bV9pZDsKKwl1bnNpZ25lZCBzaG9ydCB2ZWN0OworfTsKKworI2RlZmluZSBJTlRDX1ZFQ1QoZW51bV9pZCwgdmVjdCkgeyBlbnVtX2lkLCB2ZWN0IH0KKyNkZWZpbmUgSU5UQ19JUlEoZW51bV9pZCwgaXJxKSBJTlRDX1ZFQ1QoZW51bV9pZCwgaXJxMmV2dChpcnEpKQorCitzdHJ1Y3QgaW50Y19ncm91cCB7CisJaW50Y19lbnVtIGVudW1faWQ7CisJaW50Y19lbnVtIGVudW1faWRzWzMyXTsKK307CisKKyNkZWZpbmUgSU5UQ19HUk9VUChlbnVtX2lkLCBpZHMuLi4pIHsgZW51bV9pZCwgeyBpZHMgfSB9CisKK3N0cnVjdCBpbnRjX21hc2tfcmVnIHsKKwl1bnNpZ25lZCBsb25nIHNldF9yZWcsIGNscl9yZWcsIHJlZ193aWR0aDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMzJdOworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nIHNtcDsKKyNlbmRpZgorfTsKKworc3RydWN0IGludGNfcHJpb19yZWcgeworCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMTZdOworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nIHNtcDsKKyNlbmRpZgorfTsKKworc3RydWN0IGludGNfc2Vuc2VfcmVnIHsKKwl1bnNpZ25lZCBsb25nIHJlZywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMTZdOworfTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikgLnNtcCA9IChzdHJpZGUpIHwgKChucikgPDwgOCkKKyNlbHNlCisjZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpCisjZW5kaWYKKworc3RydWN0IGludGNfZGVzYyB7CisJc3RydWN0IGludGNfdmVjdCAqdmVjdG9yczsKKwl1bnNpZ25lZCBpbnQgbnJfdmVjdG9yczsKKwlzdHJ1Y3QgaW50Y19ncm91cCAqZ3JvdXBzOworCXVuc2lnbmVkIGludCBucl9ncm91cHM7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1hc2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfbWFza19yZWdzOworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwcmlvX3JlZ3M7CisJdW5zaWduZWQgaW50IG5yX3ByaW9fcmVnczsKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNlbnNlX3JlZ3M7CisJdW5zaWduZWQgaW50IG5yX3NlbnNlX3JlZ3M7CisJY2hhciAqbmFtZTsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqYWNrX3JlZ3M7CisJdW5zaWduZWQgaW50IG5yX2Fja19yZWdzOworI2VuZGlmCit9OworCisjZGVmaW5lIF9JTlRDX0FSUkFZKGEpIGEsIHNpemVvZihhKS9zaXplb2YoKmEpCisjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJCVwKKwltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncykJCQkJXAorc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCisJX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCisJY2hpcG5hbWUsCQkJCQkJCVwKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorI2RlZmluZSBERUNMQVJFX0lOVENfREVTQ19BQ0soc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAlcCisJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MsIGFja19yZWdzKQkJCVwKK3N0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCisJX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAorCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAorCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAorCWNoaXBuYW1lLAkJCQkJCQlcCisJX0lOVENfQVJSQVkoYWNrX3JlZ3MpLAkJCQkJCVwKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CitpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pOworCisjZW5kaWYgLyogX19TSF9JTlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCmluZGV4IDY2NDg0ZDQuLjJlNGQ1OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXAuaApAQCAtNyw2ICs3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKQEAgLTE2LDcgKzE3LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKTsKIAl2b2lkICppbmZvOwotCXVuc2lnbmVkIGludCBmbGFnczsKKwl1MTYgZmxhZ3M7CisJdTE2IHByaXY7CiB9OwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvb3Jpb25fc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9vcmlvbl9zcGkuaAppbmRleCBiNGQ5ZmE2Li5kZWNmNmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9vcmlvbl9zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9vcmlvbl9zcGkuaApAQCAtMTEsNiArMTEsNyBAQAogCiBzdHJ1Y3Qgb3Jpb25fc3BpX2luZm8gewogCXUzMgl0Y2xrOwkJLyogbm8gPGxpbnV4L2Nsay5oPiBzdXBwb3J0IHlldCAqLworCXUzMgllbmFibGVfY2xvY2tfZml4OwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaAppbmRleCA0ZGU1NmIxLi41NGEzNzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmgKQEAgLTY2LDkgKzY2LDYgQEAKIAogI2RlZmluZSBSUENSRE1BX0lOTElORV9QQURfVEhSRVNIICAoNTEyKS8qIHBheWxvYWQgdGhyZXNob2xkIHRvIHBhZCAoYnl0ZXMpICovCiAKLSNkZWZpbmUgUkRNQV9SRVNPTFZFX1RJTUVPVVQJKDUqSFopCS8qIFRCRCA1IHNlY29uZHMgKi8KLSNkZWZpbmUgUkRNQV9DT05ORUNUX1JFVFJZX01BWAkoMikJLyogcmV0cmllcyBpZiBubyBsaXN0ZW5lciBiYWNrbG9nICovCi0KIC8qIG1lbW9yeSByZWdpc3RyYXRpb24gc3RyYXRlZ2llcyAqLwogI2RlZmluZSBSUENSRE1BX1BFUlNJU1RFTlRfUkVHSVNUUkFUSU9OICgxKQogCkBAIC03OCw2ICs3NSw3IEBACiAJUlBDUkRNQV9NRU1XSU5ET1dTLAogCVJQQ1JETUFfTUVNV0lORE9XU19BU1lOQywKIAlSUENSRE1BX01USENBRk1SLAorCVJQQ1JETUFfRlJNUiwKIAlSUENSRE1BX0FMTFBIWVNJQ0FMLAogCVJQQ1JETUFfTEFTVAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhYi5oIGIvaW5jbHVkZS9saW51eC9zd2FiLmgKaW5kZXggMjcwZDVjMjAuLmJiZWQyNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhYi5oCkBAIC00Nyw4ICs0Nyw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWIxNgogCXJldHVybiBfX2FyY2hfc3dhYjE2KHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FiMTZwKQotCXJldHVybiBfX2FyY2hfc3dhYjE2cCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhYjE2KHZhbCk7CiAjZW5kaWYKQEAgLTU4LDggKzU2LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhYjMyCiAJcmV0dXJuIF9fYXJjaF9zd2FiMzIodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FiMzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FiMzIodmFsKTsKICNlbmRpZgpAQCAtNjksOCArNjUsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FiNjQKIAlyZXR1cm4gX19hcmNoX3N3YWI2NCh2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhYjY0cCkKLQlyZXR1cm4gX19hcmNoX3N3YWI2NHAoJnZhbCk7CiAjZWxpZiBkZWZpbmVkKF9fU1dBQl82NF9USFJVXzMyX18pCiAJX191MzIgaCA9IHZhbCA+PiAzMjsKIAlfX3UzMiBsID0gdmFsICYgKCgxVUxMIDw8IDMyKSAtIDEpOwpAQCAtODQsOCArNzgsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FodzMyCiAJcmV0dXJuIF9fYXJjaF9zd2FodzMyKHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FodzMycCkKLQlyZXR1cm4gX19hcmNoX3N3YWh3MzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FodzMyKHZhbCk7CiAjZW5kaWYKQEAgLTk1LDggKzg3LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhaGIzMgogCXJldHVybiBfX2FyY2hfc3dhaGIzMih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhaGIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FoYjMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhaGIzMih2YWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGRlNDBmMTY5YS4uYTNhZjk1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGUuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTcxLDggKzE3MiwxMCBAQAogCiAKIC8qIGxpbnV4L21tL3N3YXAuYyAqLwotZXh0ZXJuIHZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqKTsKLWV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfbHJ1KHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHN0cnVjdCBwYWdlICosCisJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpOwpAQCAtMTgwLDEyICsxODMsMzggQEAKIGV4dGVybiB2b2lkIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7CiAKK2V4dGVybiB2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKioKKyAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2UgdG8gdGhlIHBhZ2UgbGlzdHMKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0FOT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9GSUxFKTsKK30KKwogLyogbGludXgvbW0vdm1zY2FuLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJCWdmcF90IGdmcF9tYXNrKTsKLWV4dGVybiBpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUsIGludCBmaWxlKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogZXh0ZXJuIGludCByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpOwpAQCAtMjA0LDYgKzIzMywzNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCitleHRlcm4gaW50IHBhZ2VfZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gdm9pZCBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNjYW5fdW5ldmljdGFibGVfcGFnZXM7CitleHRlcm4gaW50IHNjYW5fdW5ldmljdGFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKK2V4dGVybiB2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkgeyB9CisjZW5kaWYKKwogZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBuaWQpOwogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMjUxLDYgKzMwOCw3IEBACiBleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2luZm9fc3RydWN0KHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqKTsKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwogCiAvKiBsaW51eC9tbS90aHJhc2guYyAqLwpAQCAtMzM5LDYgKzM5NywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKQogewogCXN3cF9lbnRyeV90IGVudHJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmggYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX0xJTlVYX1NXSU9UTEJfSAorI2RlZmluZSBfX0xJTlVYX1NXSU9UTEJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkbWFfYXR0cnM7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkCisqc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncyk7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworZXh0ZXJuIGRtYV9hZGRyX3QKK3N3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiBkbWFfYWRkcl90Citzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gaW50Citzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgICAgICBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gaW50Citzd2lvdGxiX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZWxlbXMsCisJCSAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQlpbnQgbmVsZW1zLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIGludCBkaXIpOworCitleHRlcm4gaW50Citzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKworZXh0ZXJuIGludAorc3dpb3RsYl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX1NXSU9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggZDA0MzdmMy4uMzlkNDcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC05NzIsNyArOTcyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF90YWJsZTsKIAotdHlwZWRlZiBpbnQgY3RsX2hhbmRsZXIgKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3R5cGVkZWYgaW50IGN0bF9oYW5kbGVyIChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggMzdmYTI0MS4uOWQ2OGZlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtMjEsOCArMjEsOSBAQAogc3RydWN0IG1vZHVsZTsKIAogLyogRklYTUUKLSAqIFRoZSAqb3duZXIgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQsIGJ1dCBsZWF2ZSBhcm91bmQKLSAqIHVudGlsIHRoZSB0cmVlIGdldHMgY2xlYW5lZCB1cCBmdWxseS4KKyAqIFRoZSAqb3duZXIgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQuCisgKiB4ODYgdHJlZSBoYXMgYmVlbiBjbGVhbmVkIHVwLiBUaGUgb3duZXIKKyAqIGF0dHJpYnV0ZSBpcyBzdGlsbCBsZWZ0IGZvciBvdGhlciBhcmNoZXMuCiAgKi8KIHN0cnVjdCBhdHRyaWJ1dGUgewogCWNvbnN0IGNoYXIJCSpuYW1lOwpAQCAtNzgsNiArNzksOCBAQAogCXNzaXplX3QJKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKixzdHJ1Y3QgYXR0cmlidXRlICosY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RydWN0IHN5c2ZzX2RpcmVudDsKKwogI2lmZGVmIENPTkZJR19TWVNGUwogCiBpbnQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHZvaWQgKCpmdW5jKSh2b2lkICopLApAQCAtMTE3LDkgKzEyMCwxNCBAQAogdm9pZCBzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqZ3JvdXApOwogCi12b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqZGlyLCBjaGFyICphdHRyKTsKLQotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgc3lzZnNfaW5pdCh2b2lkKTsKK3ZvaWQgc3lzZnNfbm90aWZ5KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmF0dHIpOwordm9pZCBzeXNmc19ub3RpZnlfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZ2V0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKTsKK2ludCBfX211c3RfY2hlY2sgc3lzZnNfaW5pdCh2b2lkKTsKIAogI2Vsc2UgLyogQ09ORklHX1NZU0ZTICovCiAKQEAgLTIyMiw3ICsyMzAsMjQgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqZGlyLCBjaGFyICphdHRyKQorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZGlyLAorCQkJCWNvbnN0IGNoYXIgKmF0dHIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiB9CiAKQEAgLTIzMSw2ICsyNTYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3ByaW50a19sYXN0X2ZpbGUodm9pZCkKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCiAjZW5kaWYgLyogX1NZU0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oIGIvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmcuaAppbmRleCA1ZTg4YWZjLi5iZGY4NTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nLmgKQEAgLTUsNyArNSw3IEBACiAgKiBEb24ndCBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUgZGlyZWN0bHkgLSBpdCBpcyBkZXNpZ25lZCB0byBiZSBkcmFnZ2VkIGluIHZpYQogICogc2NoZWQuaC4KICAqCi0gKiBCbGFtZSBha3BtQG9zZGwub3JnIGZvciBhbGwgdGhpcy4KKyAqIEJsYW1lIEFuZHJldyBNb3J0b24gZm9yIGFsbCB0aGlzLgogICovCiAKIHN0cnVjdCB0YXNrX2lvX2FjY291bnRpbmcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaCBiL2luY2x1ZGUvbGludXgvdGVsZXBob255LmgKaW5kZXggMGQwY2YyYS4uNWIyYjYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RlbGVwaG9ueS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBIQVMgTk8gT0JMSUdBVElPTgogICogVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgogICoKLSAqIFZlcnNpb246ICAgICAgICRSZXZpc2lvbjogNC4yICQKLSAqCi0gKiAkSWQ6IHRlbGVwaG9ueS5oLHYgNC4yIDIwMDEvMDgvMDYgMDc6MDk6NDMgY3JhaWdzIEV4cCAkCi0gKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZuZGVmIFRFTEVQSE9OWV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpY2suaCBiL2luY2x1ZGUvbGludXgvdGljay5oCmluZGV4IDk4OTIxYTMuLmI2ZWM4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvdGljay5oCkBAIC05Niw5ICs5NiwxMSBAQAogZXh0ZXJuIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCk7CiBleHRlcm4gaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopOwogZXh0ZXJuIHN0cnVjdCB0aWNrX3NjaGVkICp0aWNrX2dldF90aWNrX3NjaGVkKGludCBjcHUpOworZXh0ZXJuIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpOwogIyBlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2NoZWNrX29uZXNob3RfY2hhbmdlKGludCBhbGxvd19ub2h6KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpIHsgfQogIyBlbmRpZgogCiAjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwpAQCAtMTA2LDI2ICsxMDgsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NhbmNlbF9zY2hlZF90aW1lcihpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkgeyB9CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCiAKICMgaWZkZWYgQ09ORklHX05PX0haCiBleHRlcm4gdm9pZCB0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKGludCBpbmlkbGUpOwogZXh0ZXJuIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKTsKLWV4dGVybiB2b2lkIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyh2b2lkKTsKIGV4dGVybiBrdGltZV90IHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KTsKIGV4dGVybiB1NjQgZ2V0X2NwdV9pZGxlX3RpbWVfdXMoaW50IGNwdSwgdTY0ICpsYXN0X3VwZGF0ZV90aW1lKTsKICMgZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soaW50IGluaWRsZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCkKIHsKIAlrdGltZV90IGxlbiA9IHsgLnR2NjQgPSBOU0VDX1BFUl9TRUMvSFogfTsKIAogCXJldHVybiBsZW47CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcHVfaWRsZV90aW1lX3VzKGludCBjcHUsIHU2NCAqdW51c2VkKSB7IHJldHVybiAtMTsgfQogIyBlbmRpZiAvKiAhTk9fSFogKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCBlMTUyMDZhLi40ZjFjOWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMjksNiArMjksOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKKwogLyogUGFyYW1ldGVycyB1c2VkIHRvIGNvbnZlcnQgdGhlIHRpbWVzcGVjIHZhbHVlczogKi8KICNkZWZpbmUgTVNFQ19QRVJfU0VDCTEwMDBMCiAjZGVmaW5lIFVTRUNfUEVSX01TRUMJMTAwMEwKQEAgLTExNyw2ICsxMTksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybV9zZXRpdGltZXIodW5zaWduZWQgaW50IHNlY29uZHMpOwogZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CiBleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKK2V4dGVybiB2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIGdldGJvb3R0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwogZXh0ZXJuIHZvaWQgbW9ub3RvbmljX3RvX2Jvb3RiYXNlZChzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIApAQCAtMTI1LDYgKzEyOCw5IEBACiBleHRlcm4gdm9pZCB1cGRhdGVfd2FsbF90aW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2NhY2hlKHU2NCBuc2VjKTsKIAorc3RydWN0IHRtczsKK2V4dGVybiB2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICopOworCiAvKioKICAqIHRpbWVzcGVjX3RvX25zIC0gQ29udmVydCB0aW1lc3BlYyB0byBuYW5vc2Vjb25kcwogICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdmFyaWFibGUgdG8gYmUgY29udmVydGVkCkBAIC0yMTQsNiArMjIwLDcgQEAKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQogI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQJMgogI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRAkJMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXCQk0CiAKIC8qCiAgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IGZjNjAzNWQuLjkwMDczMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KICNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKLSNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAyMAorI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCiAKQEAgLTE0MSw4ICsxNDEsMTUgQEAKICNkZWZpbmUgQURKX01JQ1JPCQkweDEwMDAJLyogc2VsZWN0IG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gKi8KICNkZWZpbmUgQURKX05BTk8JCTB4MjAwMAkvKiBzZWxlY3QgbmFub3NlY29uZCByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBBREpfQURKVElNRQkJMHg4MDAwCS8qIHN3aXRjaCBiZXR3ZWVuIGFkanRpbWUvYWRqdGltZXggbW9kZXMgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UCTB4MDAwMQkvKiBvbGQtZmFzaGlvbmVkIGFkanRpbWUgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9SRUFET05MWQkweDIwMDAJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbHNlCiAjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDgwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCi0jZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEgIC8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbmRpZgogCiAvKiB4bnRwIDMuNCBjb21wYXRpYmlsaXR5IG5hbWVzICovCiAjZGVmaW5lIE1PRF9PRkZTRVQJQURKX09GRlNFVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGQ0YTljZTYuLmYyNGY3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTE5MSwxMiArMTkxLDE0IEBACiAjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiB1bnNpZ25lZCBfX2JpdHdpc2VfXyBnZnBfdDsKIAotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLXR5cGVkZWYgdTY0IHJlc291cmNlX3NpemVfdDsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKK3R5cGVkZWYgdTY0IHBoeXNfYWRkcl90OwogI2Vsc2UKLXR5cGVkZWYgdTMyIHJlc291cmNlX3NpemVfdDsKK3R5cGVkZWYgdTMyIHBoeXNfYWRkcl90OwogI2VuZGlmCiAKK3R5cGVkZWYgcGh5c19hZGRyX3QgcmVzb3VyY2Vfc2l6ZV90OworCiBzdHJ1Y3QgdXN0YXQgewogCV9fa2VybmVsX2RhZGRyX3QJZl90ZnJlZTsKIAlfX2tlcm5lbF9pbm9fdAkJZl90aW5vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA5NGFjNzRhLi44ZmE5NzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExMzUsNiArMTEzNSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcG9pc29uZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3VzYl9hbmNob3Ioc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKQEAgLTE0NTksMTIgKzE0NjAsMTggQEAKIGV4dGVybiBpbnQgdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwogZXh0ZXJuIGludCB1c2JfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2JfcG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworZXh0ZXJuIHZvaWQgdXNiX3VucG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9wb2lzb25fYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl91bmxpbmtfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl9hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiBleHRlcm4gdm9pZCB1c2JfdW5hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gaW50IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IsCiAJCQkJCSB1bnNpZ25lZCBpbnQgdGltZW91dCk7CitleHRlcm4gc3RydWN0IHVyYiAqdXNiX2dldF9mcm9tX2FuY2hvcihzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CitleHRlcm4gaW50IHVzYl9hbmNob3JfZW1wdHkoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiAKIC8qKgogICogdXNiX3VyYl9kaXJfaW4gLSBjaGVjayBpZiBhbiBVUkIgZGVzY3JpYmVzIGFuIElOIHRyYW5zZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKaW5kZXggNDJlODRmYy4uNTRjNDQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZApAQCAtNCw0ICs0LDUgQEAKIGhlYWRlci15ICs9IGdhZGdldGZzLmgKIGhlYWRlci15ICs9IG1pZGkuaAogaGVhZGVyLXkgKz0gZ19wcmludGVyLmgKLQoraGVhZGVyLXkgKz0gdG1jLmgKK2hlYWRlci15ICs9IHZzdHVzYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IGNhMjI4YmIuLjE4YTcyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCkBAIC0xNjAsNiArMTYwLDE1IEBACiAJX191OAliRGV0YWlsRGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiAiT0JFWCBDb250cm9sIE1vZGVsIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgKi8KK3N0cnVjdCB1c2JfY2RjX29iZXhfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX19sZTE2CWJjZFZlcnNpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggYzkzMjM5MC4uOTM1YzM4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTEzMCw2ICsxMzAsOSBAQAogCiBpbnQgdXNiX2FkZF9mdW5jdGlvbihzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKiwgc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKIAoraW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CitpbnQgdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisKIGludCB1c2JfaW50ZXJmYWNlX2lkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOwogCiAvKioKQEAgLTMxNiw5ICszMTksMTMgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIJKmRyaXZlcjsKIAl1OAkJCQluZXh0X3N0cmluZ19pZDsKIAotCXNwaW5sb2NrX3QJCQlsb2NrOworCS8qIHRoZSBnYWRnZXQgZHJpdmVyIHdvbid0IGVuYWJsZSB0aGUgZGF0YSBwdWxsdXAKKwkgKiB3aGlsZSB0aGUgZGVhY3RpdmF0aW9uIGNvdW50IGlzIG5vbnplcm8uCisJICovCisJdW5zaWduZWQJCQlkZWFjdGl2YXRpb25zOwogCi0JLyogUkVWSVNJVCB1c2UgYW5kIGV4aXN0ZW5jZSBvZiBsb2NrIC4uLiAqLworCS8qIHByb3RlY3RzIGF0IGxlYXN0IGRlYWN0aXZhdGlvbiBjb3VudCAqLworCXNwaW5sb2NrX3QJCQlsb2NrOwogfTsKIAogZXh0ZXJuIGludCB1c2Jfc3RyaW5nX2lkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDY1NTM0MWQuLjBiODYxN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xOTIsNyArMTkyLDcgQEAKICAqIFRoZSBkcml2ZXIub3duZXIgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgogICogVGhlIGRyaXZlci5uYW1lIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhpcyBkcml2ZXIgKHJlbWVtYmVyCiAgKiBpdCB3aWxsIHNob3cgdXAgaW4gc3lzZnMsIHNvIGl0IG5lZWRzIHRvIGJlIHNob3J0IGFuZCB0byB0aGUgcG9pbnQuCi0gKiBVc2VpbmcgdGhlIG1vZHVsZSBuYW1lIGlzIGEgZ29vZCBpZGVhLikKKyAqIFVzaW5nIHRoZSBtb2R1bGUgbmFtZSBpcyBhIGdvb2QgaWRlYS4pCiAgKi8KIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB7CiAJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaCBiL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFN0ZWZhbiBLb3BwLCBHZWNoaW5nZW4sIEdlcm1hbnkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIFRoaXMgZmlsZSBob2xkcyBVU0IgY29uc3RhbnRzIGRlZmluZWQgYnkgdGhlIFVTQiBEZXZpY2UgQ2xhc3MKKyAqIERlZmluaXRpb24gZm9yIFRlc3QgYW5kIE1lYXN1cmVtZW50IGRldmljZXMgcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCisgKgorICogSXQgYWxzbyBoYXMgdGhlIGlvY3RsIGRlZmluaXRpb25zIGZvciB0aGUgdXNidG1jIGtlcm5lbCBkcml2ZXIgdGhhdAorICogdXNlcnNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9UTUNfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9UTUNfSAorCisvKiBVU0IgVE1DIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19TVUNDRVNTCQkJCTB4MDEKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19QRU5ESU5HCQkJCTB4MDIKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19GQUlMRUQJCQkJMHg4MAorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1RSQU5TRkVSX05PVF9JTl9QUk9HUkVTUwkJMHg4MQorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX05PVF9JTl9QUk9HUkVTUwkJMHg4MgorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX0lOX1BST0dSRVNTCQkJMHg4MworCisvKiBVU0IgVE1DIHJlcXVlc3RzIHZhbHVlcyAqLworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX09VVAkJMQorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX09VVF9TVEFUVVMJMgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX0lOCQkzCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfSU5fU1RBVFVTCTQKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQ0xFQVIJCQk1CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0NMRUFSX1NUQVRVUwkJNgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9HRVRfQ0FQQUJJTElUSUVTCQkJNworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTkRJQ0FUT1JfUFVMU0UJCQk2NAorCisvKiBSZXF1ZXN0IHZhbHVlcyBmb3IgVVNCVE1DIGRyaXZlcidzIGlvY3RsIGVudHJ5IHBvaW50ICovCisjZGVmaW5lIFVTQlRNQ19JT0NfTlIJCQk5MQorI2RlZmluZSBVU0JUTUNfSU9DVExfSU5ESUNBVE9SX1BVTFNFCV9JTyhVU0JUTUNfSU9DX05SLCAxKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVIJCV9JTyhVU0JUTUNfSU9DX05SLCAyKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19PVVQJX0lPKFVTQlRNQ19JT0NfTlIsIDMpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX0lOCV9JTyhVU0JUTUNfSU9DX05SLCA0KQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVJfT1VUX0hBTFQJX0lPKFVTQlRNQ19JT0NfTlIsIDYpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUl9JTl9IQUxUCV9JTyhVU0JUTUNfSU9DX05SLCA3KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmgKKyAqCisgKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCisgKgorICogIEF1dGhvcjogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgorICogICAgICAgICAgICAgIE9yZWdvbiBDaXR5LCBPUiwgVVNBIDk3MDQ1CisgKgorICogIENvcHlyaWdodDogIDIwMDcsIDIwMDgKKyAqICAgICAgICAgICAgICBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neQorICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBXZWI6ICAgICAgICB3d3cudmVybmllci5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBUaGUgdnN0dXNiIG1vZHVsZSBpcyBhIHN0YW5kYXJkIHVzYiAnY2xpZW50JyBkcml2ZXIgcnVubmluZyBvbiB0b3Agb2YgdGhlCisgKiAgc3RhbmRhcmQgdXNiIGhvc3QgY29udHJvbGxlciBzdGFjay4KKyAqCisgKiAgSW4gZ2VuZXJhbCwgdnN0dXNiIHN1cHBvcnRzIHN0YW5kYXJkIGJ1bGsgdXNiIHBpcGVzLiAgSXQgc3VwcG9ydHMgbXVsdGlwbGUKKyAqICBkZXZpY2VzIGFuZCBtdWx0aXBsZSBwaXBlcyBwZXIgZGV2aWNlLgorICoKKyAqICBUaGUgdnN0dXNiIGRyaXZlciBzdXBwb3J0cyB0d28gaW50ZXJmYWNlczoKKyAqICAxIC0gaW9jdGwgU0VORF9QSVBFL1JFQ1ZfUElQRSAtIGEgZ2VuZXJhbCBidWxrIHdyaXRlL3JlYWQgbXNnCisgKiAgCWludGVyZmFjZSB0byBhbnkgcGlwZSB3aXRoIHRpbWVvdXQgc3VwcG9ydDsKKyAqICAyIC0gc3RhbmRhcmQgcmVhZC93cml0ZSB3aXRoIGlvY3RsIGNvbmZpZyAtIG9mZmVycyBzdGFuZGFyZCByZWFkL3dyaXRlCisgKiAgCWludGVyZmFjZSB3aXRoIGlvY3RsIGNvbmZpZ3VyZWQgcGlwZXMgYW5kIHRpbWVvdXRzLgorICoKKyAqICBCb3RoIGludGVyZmFjZXMgY2FuIGJlIHNpZ25hbCBmcm9tIG90aGVyIHByb2Nlc3MgYW5kIHdpbGwgYWJvcnQgaXRzIGkvbworICogIG9wZXJhdGlvbi4KKyAqCisgKiAgQSB0aW1lb3V0IG9mIDAgbWVhbnMgTk8gdGltZW91dC4gIFRoZSB1c2VyIGNhbiBzdGlsbCB0ZXJtaW5hdGUgdGhlIHJlYWQgdmlhCisgKiAgc2lnbmFsLgorICoKKyAqICBJZiB1c2luZyBtdWx0aXBsZSB0aHJlYWRzIHdpdGggdGhpcyBkcml2ZXIsIHRoZSB1c2VyIHNob3VsZCBlbnN1cmUgdGhhdAorICogIGFueSByZWFkcywgd3JpdGVzLCBvciBpb2N0bHMgYXJlIGNvbXBsZXRlIGJlZm9yZSBjbG9zaW5nIHRoZSBkZXZpY2UuCisgKiAgQ2hhbmdpbmcgcmVhZC93cml0ZSB0aW1lb3V0cyBvciBwaXBlcyB0YWtlcyBlZmZlY3Qgb24gbmV4dCByZWFkL3dyaXRlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHZzdHVzYl9hcmdzIHsKKwl1bmlvbiB7CisJCS8qIHRoaXMgc3RydWN0IGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUsCSoKKwkJICogSU9DVExfVlNUVVNCX1JFQ1ZfUElQRSwgYW5kIHJlYWQoKS93cml0ZSgpIGZvcHMJKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgX191c2VyCSpidWZmZXI7CisJCQlzaXplX3QgICAgICAgICAgY291bnQ7CisJCQl1bnNpZ25lZCBpbnQgICAgdGltZW91dF9tczsKKwkJCWludCAgICAgICAgICAgICBwaXBlOworCQl9OworCisJCS8qIHRoaXMgb25lIGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9DT05GSUdfUlcgIAkqLworCQlzdHJ1Y3QgeworCQkJaW50IHJkX3BpcGU7CisJCQlpbnQgcmRfdGltZW91dF9tczsKKwkJCWludCB3cl9waXBlOworCQkJaW50IHdyX3RpbWVvdXRfbXM7CisJCX07CisJfTsKK307CisKKyNkZWZpbmUgVlNUX0lPQ19NQUdJQyAnTCcKKyNkZWZpbmUgVlNUX0lPQ19GSVJTVCAweDIwCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QpCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QgKyAxKQorI2RlZmluZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggMzI4ZWI0MC4uNGMyOGM0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WTUFMTE9DX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBwZ3Byb3RfdCAqLwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CQkvKiB2bWEgZGVmaW5pbmcgdXNlciBtYXBwaW5nIGluIG1tX3R5cGVzLmggKi8KQEAgLTIzLDcgKzI0LDYgQEAKICNlbmRpZgogCiBzdHJ1Y3Qgdm1fc3RydWN0IHsKLQkvKiBrZWVwIG5leHQsYWRkcixzaXplIHRvZ2V0aGVyIHRvIHNwZWVkdXAgbG9va3VwcyAqLwogCXN0cnVjdCB2bV9zdHJ1Y3QJKm5leHQ7CiAJdm9pZAkJCSphZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CkBAIC0zNyw2ICszNywxOSBAQAogLyoKICAqCUhpZ2hsZXZlbCBBUElzIGZvciBkcml2ZXIgdXNlCiAgKi8KK2V4dGVybiB2b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudCk7CitleHRlcm4gdm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJaW50IG5vZGUsIHBncHJvdF90IHByb3QpOworZXh0ZXJuIHZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2b2lkKTsKKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfaW5pdCh2b2lkKQoreworfQorI2VuZGlmCisKIGV4dGVybiB2b2lkICp2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY191c2VyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCAqdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKaW5kZXggNTgzMzRkNC4uOWNkM2FiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC00MSw2ICs0MSwxNiBAQAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAkJSFRMQl9CVUREWV9QR0FMTE9DLCBIVExCX0JVRERZX1BHQUxMT0NfRkFJTCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJVU5FVklDVEFCTEVfUEdDVUxMRUQsCS8qIGN1bGxlZCB0byBub3JlY2xhaW0gbGlzdCAqLworCQlVTkVWSUNUQUJMRV9QR1NDQU5ORUQsCS8qIHNjYW5uZWQgZm9yIHJlY2xhaW1hYmlsaXR5ICovCisJCVVORVZJQ1RBQkxFX1BHUkVTQ1VFRCwJLyogcmVzY3VlZCBmcm9tIG5vcmVjbGFpbSBsaXN0ICovCisJCVVORVZJQ1RBQkxFX1BHTUxPQ0tFRCwKKwkJVU5FVklDVEFCTEVfUEdNVU5MT0NLRUQsCisJCVVORVZJQ1RBQkxFX1BHQ0xFQVJFRCwJLyogb24gQ09XLCBwYWdlIHRydW5jYXRlICovCisJCVVORVZJQ1RBQkxFX1BHU1RSQU5ERUQsCS8qIHVuYWJsZSB0byBpc29sYXRlIG9uIHVubG9jayAqLworCQlVTkVWSUNUQUJMRV9NTE9DS0ZSRUVELAorI2VuZGlmCiAJCU5SX1ZNX0VWRU5UX0lURU1TCiB9OwogCkBAIC0xNTksNiArMTY5LDE2IEBACiAJcmV0dXJuIHg7CiB9CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdsb2JhbF9scnVfcGFnZXModm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6b25lX2xydV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlyZXR1cm4gKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTikKKwkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpCisJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pCisJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpKTsKK30KKwogI2lmZGVmIENPTkZJR19OVU1BCiAvKgogICogRGV0ZXJtaW5lIHRoZSBwZXIgbm9kZSB2YWx1ZSBvZiBhIHN0YXQgaXRlbS4gVGhpcyBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCAwMDgxMTQ3Li5lZjYwOWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMTA4LDE1ICsxMDgsNiBAQAogCXJldHVybiAhbGlzdF9lbXB0eSgmcS0+dGFza19saXN0KTsKIH0KIAotLyoKLSAqIFVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzeW5jIGFuZCBhc3luYyBpbyB3YWl0IGNvbnRleHQ6Ci0gKiBzeW5jIGkvbyB0eXBpY2FsbHkgc3BlY2lmaWVzIGEgTlVMTCB3YWl0IHF1ZXVlIGVudHJ5IG9yIGEgd2FpdAotICogcXVldWUgZW50cnkgYm91bmQgdG8gYSB0YXNrIChjdXJyZW50IHRhc2spIHRvIHdha2UgdXAuCi0gKiBhaW8gc3BlY2lmaWVzIGEgd2FpdCBxdWV1ZSBlbnRyeSB3aXRoIGFuIGFzeW5jIG5vdGlmaWNhdGlvbgotICogY2FsbGJhY2sgcm91dGluZSwgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdGFzay4KLSAqLwotI2RlZmluZSBpc19zeW5jX3dhaXQod2FpdCkJKCEod2FpdCkgfHwgKCh3YWl0KS0+cHJpdmF0ZSkpCi0KIGV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQpOwogZXh0ZXJuIHZvaWQgYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQpOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCAxMmIxNWM1Li5lNTg1NjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTYzLDcgKzYzLDE1IEBACiAJdW5zaWduZWQgZm9yX3dyaXRlcGFnZXM6MTsJLyogVGhpcyBpcyBhIHdyaXRlcGFnZXMoKSBjYWxsICovCiAJdW5zaWduZWQgcmFuZ2VfY3ljbGljOjE7CS8qIHJhbmdlX3N0YXJ0IGlzIGN5Y2xpYyAqLwogCXVuc2lnbmVkIG1vcmVfaW86MTsJCS8qIG1vcmUgaW8gdG8gYmUgZGlzcGF0Y2hlZCAqLwotCXVuc2lnbmVkIHJhbmdlX2NvbnQ6MTsKKwkvKgorCSAqIHdyaXRlX2NhY2hlX3BhZ2VzKCkgd29uJ3QgdXBkYXRlIHdiYy0+bnJfdG9fd3JpdGUgYW5kCisJICogbWFwcGluZy0+d3JpdGViYWNrX2luZGV4IGlmIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlCisJICogaXMgc2V0LiAgd3JpdGVfY2FjaGVfcGFnZXMoKSBtYXkgd3JpdGUgbW9yZSB0aGFuIHdlCisJICogcmVxdWVzdGVkIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBucl90b193cml0ZSBhbmQKKwkgKiB3cml0ZWJhY2tfaW5kZXggYXJlIHVwZGF0ZWQgaW4gYSBjb25zaXN0ZW50IG1hbm5lcgorCSAqIHNvIHdlIHVzZSBhIHNpbmdsZSBjb250cm9sIHRvIHVwZGF0ZSB0aGVtCisJICovCisJdW5zaWduZWQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGU6MTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L29wLTIuaCBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtMi5oCmluZGV4IGUxOTNmYjAuLjRmMjZlY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtMi5oCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtMi5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIF9fTUFUSF9FTVVfT1BfMl9IX18KICNkZWZpbmUgX19NQVRIX0VNVV9PUF8yX0hfXwogCi0jZGVmaW5lIF9GUF9GUkFDX0RFQ0xfMihYKQlfRlBfV19UWVBFIFgjI19mMCwgWCMjX2YxCisjZGVmaW5lIF9GUF9GUkFDX0RFQ0xfMihYKQlfRlBfV19UWVBFIFgjI19mMCA9IDAsIFgjI19mMSA9IDAKICNkZWZpbmUgX0ZQX0ZSQUNfQ09QWV8yKEQsUykJKEQjI19mMCA9IFMjI19mMCwgRCMjX2YxID0gUyMjX2YxKQogI2RlZmluZSBfRlBfRlJBQ19TRVRfMihYLEkpCV9fRlBfRlJBQ19TRVRfMihYLCBJKQogI2RlZmluZSBfRlBfRlJBQ19ISUdIXzIoWCkJKFgjI19mMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmggYi9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCmluZGV4IGJiNDZlNzYuLmNjMWVjMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaApAQCAtNzMsNyArNzMsNyBAQAogCVgjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCiAJLyogQ2hlY2sgZm9yIHNpZ25hbGluZyBOYU4gKi8JCQkJCVwKIAlpZiAoIShfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFgpICYgX0ZQX1FOQU5CSVRfIyNmcykpCQlcCi0JICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQlcCisJICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX1NOQU4pOwkJXAogICAgICAgfQkJCQkJCQkJCVwKICAgICBicmVhazsJCQkJCQkJCVwKICAgfQkJCQkJCQkJCVwKQEAgLTMyNCw3ICszMjQsNyBAQAogCV9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCQkgICAgIFwKIAlSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCQkgICAgIFwKIAlSIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJICAgICBcCi0JRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQkJICAgICBcCisJRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEIHwgRlBfRVhfSU5WQUxJRF9JU0kpOwkJICAgICBcCiAJYnJlYWs7CQkJCQkJCQkgICAgIFwKICAgICAgIH0JCQkJCQkJCQkgICAgIFwKICAgICAvKiBGQUxMVEhSVSAqLwkJCQkJCQkgICAgIFwKQEAgLTQzMSw3ICs0MzEsNyBAQAogICAgIFIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJXAogICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKICAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKLSAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCVwKKyAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX0lNWik7XAogICAgIGJyZWFrOwkJCQkJCVwKIAkJCQkJCQlcCiAgIGRlZmF1bHQ6CQkJCQkJXApAQCAtNDkwLDExICs0OTAsMTUgQEAKICAgICBicmVhazsJCQkJCQlcCiAJCQkJCQkJXAogICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19JTkYpOgkJXAorICAgIFIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJXAorICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKKyAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKKyAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX0lESSk7XAogICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CVwKICAgICBSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCVwKICAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCiAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCi0gICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQlcCisgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEIHwgRlBfRVhfSU5WQUxJRF9aRFopO1wKICAgICBicmVhazsJCQkJCQlcCiAJCQkJCQkJXAogICBkZWZhdWx0OgkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oIGIvaW5jbHVkZS9tYXRoLWVtdS9zb2Z0LWZwLmgKaW5kZXggYTZmODczYi4uM2YyODRiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9zb2Z0LWZwLmgKKysrIGIvaW5jbHVkZS9tYXRoLWVtdS9zb2Z0LWZwLmgKQEAgLTUxLDYgKzUxLDI1IEBACiAjaWZuZGVmIEZQX0VYX0lOVkFMSUQKICNkZWZpbmUgRlBfRVhfSU5WQUxJRAkJMAogI2VuZGlmCisjaWZuZGVmIEZQX0VYX0lOVkFMSURfU05BTgorI2RlZmluZSBGUF9FWF9JTlZBTElEX1NOQU4JMAorI2VuZGlmCisvKiBpbmYgLSBpbmYgKi8KKyNpZm5kZWYgRlBfRVhfSU5WQUxJRF9JU0kKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JU0kJMAorI2VuZGlmCisvKiBpbmYgLyBpbmYgKi8KKyNpZm5kZWYgRlBfRVhfSU5WQUxJRF9JREkKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JREkJMAorI2VuZGlmCisvKiAwIC8gMCAqLworI2lmbmRlZiBGUF9FWF9JTlZBTElEX1pEWgorI2RlZmluZSBGUF9FWF9JTlZBTElEX1pEWgkwCisjZW5kaWYKKy8qIGluZiAqIDAgKi8KKyNpZm5kZWYgRlBfRVhfSU5WQUxJRF9JTVoKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JTVoJMAorI2VuZGlmCiAjaWZuZGVmIEZQX0VYX09WRVJGTE9XCiAjZGVmaW5lIEZQX0VYX09WRVJGTE9XCQkwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggNjRhMmVjNy4uYzVhNmUyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBzYWE3MTQ2X2RlYnVnOwogCi0vLyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiKDB4JTA4eCkoMHglMDh4KSAlczogJXMoKTogIiwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LFJQU19BRERSMCkpKSwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LElFUikpKSxLQlVJTERfTU9ETkFNRSxfX0ZVTkNUSU9OX18pCisvLyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiKDB4JTA4eCkoMHglMDh4KSAlczogJXMoKTogIiwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LFJQU19BRERSMCkpKSwoZGV2PT0wPy0xOihkZXYtPm1lbT09MD8tMTpzYWE3MTQ2X3JlYWQoZGV2LElFUikpKSxLQlVJTERfTU9ETkFNRSxfX2Z1bmNfXykKIAogI2lmbmRlZiBERUJVR19WQVJJQUJMRQogCSNkZWZpbmUgREVCVUdfVkFSSUFCTEUgc2FhNzE0Nl9kZWJ1ZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmggYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaAppbmRleCA4NTFmMTgyLi4xZDA5MmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaApAQCAtMSwzICsxLDEzIEBACisvKgorICogR2VuZXJpYyBQbGF0Zm9ybSBDYW1lcmEgRHJpdmVyIEhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKwogI2lmbmRlZiBfX1NPQ19DQU1FUkFfSF9fCiAjZGVmaW5lIF9fU09DX0NBTUVSQV9IX18KIApAQCAtOSw2ICsxOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7CiAJdW5zaWduZWQgbG9uZyBidXNfcGFyYW07CisJdm9pZCAoKnBvd2VyKShpbnQpOwogCWludCAoKnNldF9jYXB0dXJlKShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLCBpbnQgZW5hYmxlKTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCA2N2MxZjUxLi43ZDRlMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgVFVORVJfVEVBNTc2MQkJCTc1CS8qIE9ubHkgRk0gUmFkaW8gVHVuZXIgKi8KICNkZWZpbmUgVFVORVJfWEM1MDAwCQkJNzYJLyogWGNlaXZlIFNpbGljb24gVHVuZXIgKi8KICNkZWZpbmUgVFVORVJfVENMX01GMDJHSVBfNU4JCTc3CS8qIFRDTCBNRjAyR0lQXzVOICovCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzMJNzgKIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKaW5kZXggOTc1ZmZiZi4uZTY1ZGQ5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKQEAgLTIxLDYgKzIxLDE3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisvKiBOT1RFOiB0aGUgZnVsbCB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGlzIGluIHRoZSB2NGwtZHZiIHJlcG9zaXRvcnkKKyAqIGFuZCBhbGxvd3MgdjRsIGkyYyBkcml2ZXJzIHRvIGJlIGNvbXBpbGVkIG9uIG9sZGVyIGtlcm5lbHMgYXMgd2VsbC4KKyAqIFRoZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGtlcm5lbCBpcyBhIHN0cmlwcGVkCisgKiB2ZXJzaW9uICh3aXRob3V0IGFsbCB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc3R1ZmYpIGFuZCBzbyBpdAorICogbG9va3MgYSBiaXQgb2RkLgorICoKKyAqIElmIHlvdSBsb29rIGF0IHRoZSBmdWxsIHZlcnNpb24gdGhlbiB5b3Ugd2lsbCB1bmRlcnN0YW5kIHRoZSByZWFzb24KKyAqIGZvciBpbnRyb2R1Y2luZyB0aGlzIGhlYWRlciBzaW5jZSB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSBhbGwKKyAqIHRoZSB0cmlja3kgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY29kZSBpbiBlYWNoIGFuZCBldmVyeSBpMmMgZHJpdmVyLgorICovCisKIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB7CiAJY29uc3QgY2hhciAqIGNvbnN0IG5hbWU7CiAJaW50IGRyaXZlcmlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmgKaW5kZXggNDBlY2VmMi4uZWZkYzhiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oCkBAIC0yMSw2ICsyMSwxNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorLyogTk9URTogdGhlIGZ1bGwgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBpcyBpbiB0aGUgdjRsLWR2YiByZXBvc2l0b3J5CisgKiBhbmQgYWxsb3dzIHY0bCBpMmMgZHJpdmVycyB0byBiZSBjb21waWxlZCBvbiBvbGRlciBrZXJuZWxzIGFzIHdlbGwuCisgKiBUaGUgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBhcyBpdCBhcHBlYXJzIGluIHRoZSBrZXJuZWwgaXMgYSBzdHJpcHBlZAorICogdmVyc2lvbiAod2l0aG91dCBhbGwgdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN0dWZmKSBhbmQgc28gaXQKKyAqIGxvb2tzIGEgYml0IG9kZC4KKyAqCisgKiBJZiB5b3UgbG9vayBhdCB0aGUgZnVsbCB2ZXJzaW9uIHRoZW4geW91IHdpbGwgdW5kZXJzdGFuZCB0aGUgcmVhc29uCisgKiBmb3IgaW50cm9kdWNpbmcgdGhpcyBoZWFkZXIgc2luY2UgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgYWxsCisgKiB0aGUgdHJpY2t5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNvZGUgaW4gZWFjaCBhbmQgZXZlcnkgaTJjIGRyaXZlci4KKyAqLworCiAjaWZuZGVmIF9fVjRMMl9JMkNfRFJWX0hfXwogI2RlZmluZSBfX1Y0TDJfSTJDX0RSVl9IX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKaW5kZXggYjc3NzQ4Ni4uODA0NzFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCkBAIC0xNiw3ICsxNiw2IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbmZlZWRzOwogCiAJLyogdmlkZW9idWZfZHZiXyh1bilyZWdpc3RlciBtYW5nZXMgdGhpcyAqLwotCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgICAgIGFkYXB0ZXI7CiAJc3RydWN0IGR2Yl9kZW11eCAgICAgICAgICAgZGVtdXg7CiAJc3RydWN0IGRteGRldiAgICAgICAgICAgICAgZG14ZGV2OwogCXN0cnVjdCBkbXhfZnJvbnRlbmQgICAgICAgIGZlX2h3OwpAQCAtMjQsMTIgKzIzLDM0IEBACiAJc3RydWN0IGR2Yl9uZXQgICAgICAgICAgICAgbmV0OwogfTsKIAotaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIsCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbGlzdDsKKwlpbnQgaWQ7CisJc3RydWN0IHZpZGVvYnVmX2R2YiBkdmI7Cit9OworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyB7CisJc3RydWN0IGxpc3RfaGVhZCBmZWxpc3Q7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXB0ZXI7CisJaW50IGFjdGl2ZV9mZV9pZDsgLyogSW5kaWNhdGVzIHdoaWNoIGZyb250ZW5kIGluIHRoZSBmZWxpc3QgaXMgaW4gdXNlICovCisJaW50IGdhdGU7IC8qIEZyb250ZW5kIHdpdGggZ2F0ZSBjb250cm9sIDA9IU1GRSwxPWZlMCwyPWZlMSBldGMgKi8KK307CisKK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAogCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkJICBzaG9ydCAqYWRhcHRlcl9ucik7Ci12b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2Yik7CisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCk7CisKK3ZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCk7CitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnApOworCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCBjMzYyNmMwLi5kMmM2MGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgTkVUXzlQX0gKICNkZWZpbmUgTkVUXzlQX0gKIAotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQogLyoqCiAgKiBlbnVtIHA5X2RlYnVnX2ZsYWdzIC0gYml0cyBmb3IgbW91bnQgdGltZSBkZWJ1ZyBwYXJhbWV0ZXIKICAqIEBQOV9ERUJVR19FUlJPUjogbW9yZSB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGluY2x1ZGluZyBvcmlnaW5hbCBlcnJvciBzdHJpbmcKQEAgLTM5LDYgKzM3LDcgQEAKICAqIEBQOV9ERUJVR19UUkFOUzogdHJhbnNwb3J0IHRyYWNpbmcKICAqIEBQOV9ERUJVR19TTEFCUzogbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2luZwogICogQFA5X0RFQlVHX0ZDQUxMOiB2ZXJib3NlIGR1bXAgb2YgcHJvdG9jb2wgbWVzc2FnZXMKKyAqIEBQOV9ERUJVR19GSUQ6IGZpZCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0cmFja2luZwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgYXQgbW91bnQgdGltZSB0byB0dXJuIG9uIHZhcmlvdXMgbGV2ZWxzIG9mCiAgKiB2ZXJib3NpdHkgYW5kIHRyYWNpbmcgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHN5c3RlbSBsb2dzLgpAQCAtNTMsMzAgKzUyLDMzIEBACiAJUDlfREVCVUdfVFJBTlMgPQkoMTw8NiksCiAJUDlfREVCVUdfU0xBQlMgPSAgICAgIAkoMTw8NyksCiAJUDlfREVCVUdfRkNBTEwgPQkoMTw8OCksCisJUDlfREVCVUdfRklEID0JCSgxPDw5KSwKKwlQOV9ERUJVR19QS1QgPQkJKDE8PDEwKSwKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcDlfZGVidWdfbGV2ZWw7CiAKKyNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCiAjZGVmaW5lIFA5X0RQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7ICBcCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCAmIGxldmVsKSA9PSBsZXZlbCkgXAotCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tICVzICglZCk6ICIgXAotCQlmb3JtYXQgLCBfX0ZVTkNUSU9OX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAorCWlmICgocDlfZGVidWdfbGV2ZWwgJiBsZXZlbCkgPT0gbGV2ZWwpIHtcCisJCWlmIChsZXZlbCA9PSBQOV9ERUJVR185UCkgXAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIoJTguOGQpICIgXAorCQkJZm9ybWF0ICwgdGFza19waWRfbnIoY3VycmVudCkgLCAjIyBhcmcpOyBcCisJCWVsc2UgXAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICItLSAlcyAoJWQpOiAiIFwKKwkJCWZvcm1hdCAsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSAsICMjIGFyZyk7IFwKKwl9IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUFJJTlRfRkNBTExfRVJST1IocywgZmNhbGwpIFA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICAgXAotCSIlczogJS4qc1xuIiwgcywgZmNhbGw/ZmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3IubGVuOjAsIFwKLQlmY2FsbD9mY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJvci5zdHI6IiIpOwotCiAjZWxzZQogI2RlZmluZSBQOV9EUFJJTlRLKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUFJJTlRfRkNBTExfRVJST1IocywgZmNhbGwpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIFA5X0VQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7IFwKIAlwcmludGsobGV2ZWwgIjlwOiAlcyAoJWQpOiAiIFwKLQkJZm9ybWF0ICwgX19GVU5DVElPTl9fLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgIyMgYXJnKTsgXAorCQlmb3JtYXQgLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCksICMjIGFyZyk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKgpAQCAtMzI1LDMzICszMjcsNiBAQAogICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAogICovCiAKLXN0cnVjdCBwOV9zdGF0IHsKLQl1MTYgc2l6ZTsKLQl1MTYgdHlwZTsKLQl1MzIgZGV2OwotCXN0cnVjdCBwOV9xaWQgcWlkOwotCXUzMiBtb2RlOwotCXUzMiBhdGltZTsKLQl1MzIgbXRpbWU7Ci0JdTY0IGxlbmd0aDsKLQlzdHJ1Y3QgcDlfc3RyIG5hbWU7Ci0Jc3RydWN0IHA5X3N0ciB1aWQ7Ci0Jc3RydWN0IHA5X3N0ciBnaWQ7Ci0Jc3RydWN0IHA5X3N0ciBtdWlkOwotCXN0cnVjdCBwOV9zdHIgZXh0ZW5zaW9uOwkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi0JdTMyIG5fdWlkOwkJCS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLQl1MzIgbl9naWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotCXUzMiBuX211aWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotfTsKLQotLyoKLSAqIGZpbGUgbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZSB1c2VkIHRvIGNyZWF0ZSBUd3N0YXQgbWVzc2FnZQotICogVGhlIGlzIGlkZW50aWNhbCB0byAmcDlfc3RhdCwgYnV0IHRoZSBzdHJpbmdzIGRvbid0IHBvaW50IHRvCi0gKiB0aGUgc2FtZSBtZW1vcnkgYmxvY2sgYW5kIHNob3VsZCBiZSBmcmVlZCBzZXBhcmF0ZWx5Ci0gKgotICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAotICovCi0KIHN0cnVjdCBwOV93c3RhdCB7CiAJdTE2IHNpemU7CiAJdTE2IHR5cGU7CkBAIC00OTMsMTIgKzQ2OCwxMiBAQAogfTsKIAogc3RydWN0IHA5X3JzdGF0IHsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3R3c3RhdCB7CiAJdTMyIGZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3J3c3RhdCB7CkBAIC01MDksOCArNDg0LDkgQEAKICAqIEBzaXplOiBwcmVmaXhlZCBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZQogICogQGlkOiBwcm90b2NvbCBvcGVyYXRpbmcgaWRlbnRpZmllciBvZiB0eXBlICZwOV9tc2dfdAogICogQHRhZzogdHJhbnNhY3Rpb24gaWQgb2YgdGhlIHJlcXVlc3QKKyAqIEBvZmZzZXQ6IHVzZWQgYnkgbWFyc2hhbGxpbmcgcm91dGluZXMgdG8gdHJhY2sgY3VycmVudHBvc2l0aW9uIGluIGJ1ZmZlcgorICogQGNhcGFjaXR5OiB1c2VkIGJ5IG1hcnNoYWxsaW5nIHJvdXRpbmVzIHRvIHRyYWNrIHRvdGFsIGNhcGFjaXR5CiAgKiBAc2RhdGE6IHBheWxvYWQKLSAqIEBwYXJhbXM6IHBlci1vcGVyYXRpb24gcGFyYW1ldGVycwogICoKICAqICZwOV9mY2FsbCByZXByZXNlbnRzIHRoZSBzdHJ1Y3R1cmUgZm9yIGFsbCA5UCBSUEMKICAqIHRyYW5zYWN0aW9ucy4gIFJlcXVlc3RzIGFyZSBwYWNrYWdlZCBpbnRvIGZjYWxscywgYW5kIHJlcG9uc2VzCkBAIC01MjMsNjggKzQ5OSwxNSBAQAogCXUzMiBzaXplOwogCXU4IGlkOwogCXUxNiB0YWc7Ci0Jdm9pZCAqc2RhdGE7CiAKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwOV90dmVyc2lvbiB0dmVyc2lvbjsKLQkJc3RydWN0IHA5X3J2ZXJzaW9uIHJ2ZXJzaW9uOwotCQlzdHJ1Y3QgcDlfdGF1dGggdGF1dGg7Ci0JCXN0cnVjdCBwOV9yYXV0aCByYXV0aDsKLQkJc3RydWN0IHA5X3JlcnJvciByZXJyb3I7Ci0JCXN0cnVjdCBwOV90Zmx1c2ggdGZsdXNoOwotCQlzdHJ1Y3QgcDlfcmZsdXNoIHJmbHVzaDsKLQkJc3RydWN0IHA5X3RhdHRhY2ggdGF0dGFjaDsKLQkJc3RydWN0IHA5X3JhdHRhY2ggcmF0dGFjaDsKLQkJc3RydWN0IHA5X3R3YWxrIHR3YWxrOwotCQlzdHJ1Y3QgcDlfcndhbGsgcndhbGs7Ci0JCXN0cnVjdCBwOV90b3BlbiB0b3BlbjsKLQkJc3RydWN0IHA5X3JvcGVuIHJvcGVuOwotCQlzdHJ1Y3QgcDlfdGNyZWF0ZSB0Y3JlYXRlOwotCQlzdHJ1Y3QgcDlfcmNyZWF0ZSByY3JlYXRlOwotCQlzdHJ1Y3QgcDlfdHJlYWQgdHJlYWQ7Ci0JCXN0cnVjdCBwOV9ycmVhZCBycmVhZDsKLQkJc3RydWN0IHA5X3R3cml0ZSB0d3JpdGU7Ci0JCXN0cnVjdCBwOV9yd3JpdGUgcndyaXRlOwotCQlzdHJ1Y3QgcDlfdGNsdW5rIHRjbHVuazsKLQkJc3RydWN0IHA5X3JjbHVuayByY2x1bms7Ci0JCXN0cnVjdCBwOV90cmVtb3ZlIHRyZW1vdmU7Ci0JCXN0cnVjdCBwOV9ycmVtb3ZlIHJyZW1vdmU7Ci0JCXN0cnVjdCBwOV90c3RhdCB0c3RhdDsKLQkJc3RydWN0IHA5X3JzdGF0IHJzdGF0OwotCQlzdHJ1Y3QgcDlfdHdzdGF0IHR3c3RhdDsKLQkJc3RydWN0IHA5X3J3c3RhdCByd3N0YXQ7Ci0JfSBwYXJhbXM7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgY2FwYWNpdHk7CisKKwl1aW50OF90ICpzZGF0YTsKIH07CiAKIHN0cnVjdCBwOV9pZHBvb2w7CiAKLWludCBwOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JaW50IGRvdHUpOwotaW50IHA5X2Rlc2VyaWFsaXplX2ZjYWxsKHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X2ZjYWxsICpmYywgaW50IGRvdHUpOwotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHZlcnNpb24odTMyIG1zaXplLCBjaGFyICp2ZXJzaW9uKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLAotCWNoYXIgKmFuYW1lLCB1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGF1dGgodTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGZsdXNoKHUxNiBvbGR0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdhbGsodTMyIGZpZCwgdTMyIG5ld2ZpZCwgdTE2IG53bmFtZSwKLQljaGFyICoqd25hbWVzKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSwKLQljaGFyICpleHRlbnNpb24sIGludCBkb3R1KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZWFkKHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgKmRhdGEpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdyaXRlX3UodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgX191c2VyICpkYXRhKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RjbHVuayh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZW1vdmUodTMyIGZpZCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90c3RhdCh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCWludCBkb3R1KTsKLQotaW50IHA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZG90dSk7CiBpbnQgcDlfZXJyc3RyMmVycm5vKGNoYXIgKmVycnN0ciwgaW50IGxlbik7CiAKIHN0cnVjdCBwOV9pZHBvb2wgKnA5X2lkcG9vbF9jcmVhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGM5MzZkZDEuLjFmMTdmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0yNiw2ICsyNiw4NyBAQAogI2lmbmRlZiBORVRfOVBfQ0xJRU5UX0gKICNkZWZpbmUgTkVUXzlQX0NMSUVOVF9ICiAKKy8qIE51bWJlciBvZiByZXF1ZXN0cyBwZXIgcm93ICovCisjZGVmaW5lIFA5X1JPV19NQVhUQUcgMjU1CisKKy8qKgorICogZW51bSBwOV90cmFuc19zdGF0dXMgLSBkaWZmZXJlbnQgc3RhdGVzIG9mIHVuZGVybHlpbmcgdHJhbnNwb3J0cworICogQENvbm5lY3RlZDogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBhbmQgaGVhbHRoeQorICogQERpc2Nvbm5lY3RlZDogdHJhbnNwb3J0IGhhcyBiZWVuIGRpc2Nvbm5lY3RlZAorICogQEh1bmc6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYnkgd2VkZ2VkCisgKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZXRhaWxzIHRoZSB2YXJpb3VzIHN0YXRlcyBhIHRyYW5zcG9ydAorICogaW5zdGF0aWF0aW9uIGNhbiBiZSBpbi4KKyAqLworCitlbnVtIHA5X3RyYW5zX3N0YXR1cyB7CisJQ29ubmVjdGVkLAorCURpc2Nvbm5lY3RlZCwKKwlIdW5nLAorfTsKKworLyoqCisgKiBlbnVtIHA5X3JlcV9zdGF0dXNfdCAtIHZpcnRpbyByZXF1ZXN0IHN0YXR1cworICogQFJFUV9TVEFUVVNfSURMRTogcmVxdWVzdCBzbG90IHVudXNlZAorICogQFJFUV9TVEFUVVNfQUxMT0M6IHJlcXVlc3QgaGFzIGJlZW4gYWxsb2NhdGVkIGJ1dCBub3Qgc2VudAorICogQFJFUV9TVEFUVVNfVU5TRU5UOiByZXF1ZXN0IHdhaXRpbmcgdG8gYmUgc2VudAorICogQFJFUV9TVEFUVVNfU0VOVDogcmVxdWVzdCBzZW50IHRvIHNlcnZlcgorICogQFJFUV9TVEFUVVNfRkxTSDogYSBmbHVzaCBoYXMgYmVlbiBzZW50IGZvciB0aGlzIHJlcXVlc3QKKyAqIEBSRVFfU1RBVFVTX1JDVkQ6IHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmVyCisgKiBAUkVRX1NUQVRVU19GTFNIRDogcmVxdWVzdCBoYXMgYmVlbiBmbHVzaGVkCisgKiBAUkVRX1NUQVRVU19FUlJPUjogcmVxdWVzdCBlbmNvdW50ZXJlZCBhbiBlcnJvciBvbiB0aGUgY2xpZW50IHNpZGUKKyAqCisgKiBUaGUgQFJFUV9TVEFUVVNfSURMRSBzdGF0ZSBpcyB1c2VkIHRvIG1hcmsgYSByZXF1ZXN0IHNsb3QgYXMgdW51c2VkCisgKiBidXQgdXNlIGlzIGFjdHVhbGx5IHRyYWNrZWQgYnkgdGhlIGlkcG9vbCBzdHJ1Y3R1cmUgd2hpY2ggaGFuZGxlcyB0YWcKKyAqIGlkIGFsbG9jYXRpb24uCisgKgorICovCisKK2VudW0gcDlfcmVxX3N0YXR1c190IHsKKwlSRVFfU1RBVFVTX0lETEUsCisJUkVRX1NUQVRVU19BTExPQywKKwlSRVFfU1RBVFVTX1VOU0VOVCwKKwlSRVFfU1RBVFVTX1NFTlQsCisJUkVRX1NUQVRVU19GTFNILAorCVJFUV9TVEFUVVNfUkNWRCwKKwlSRVFfU1RBVFVTX0ZMU0hELAorCVJFUV9TVEFUVVNfRVJST1IsCit9OworCisvKioKKyAqIHN0cnVjdCBwOV9yZXFfdCAtIHJlcXVlc3Qgc2xvdHMKKyAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIHJlcXVlc3Qgc2xvdAorICogQHRfZXJyOiB0cmFuc3BvcnQgZXJyb3IKKyAqIEBmbHVzaF90YWc6IHRhZyBvZiByZXF1ZXN0IGJlaW5nIGZsdXNoZWQgKGZvciBmbHVzaCByZXF1ZXN0cykKKyAqIEB3cTogd2FpdF9xdWV1ZSBmb3IgdGhlIGNsaWVudCB0byBibG9jayBvbiBmb3IgdGhpcyByZXF1ZXN0CisgKiBAdGM6IHRoZSByZXF1ZXN0IGZjYWxsIHN0cnVjdHVyZQorICogQHJjOiB0aGUgcmVzcG9uc2UgZmNhbGwgc3RydWN0dXJlCisgKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgZGF0YSAocHJvdmlkZWQgZm9yIHRyYW5zX2ZkIG1pZ3JhdGlvbikKKyAqIEByZXFfbGlzdDogbGluayBmb3IgaGlnaGVyIGxldmVsIG9iamVjdHMgdG8gY2hhaW4gcmVxdWVzdHMKKyAqCisgKiBUcmFuc3BvcnQgdXNlIGFuIGFycmF5IHRvIHRyYWNrIG91dHN0YW5kaW5nIHJlcXVlc3RzCisgKiBpbnN0ZWFkIG9mIGEgbGlzdC4gIFdoaWxlIHRoaXMgbWF5IGluY3VyciBvdmVyaGVhZCBkdXJpbmcgaW5pdGlhbAorICogYWxsb2NhdGlvbiBvciBleHBhbnNpb24sIGl0IG1ha2VzIHJlcXVlc3QgbG9va3VwIG11Y2ggZWFzaWVyIGFzIHRoZQorICogdGFnIGlkIGlzIGEgaW5kZXggaW50byBhbiBhcnJheS4gIChXZSB1c2UgdGFnKzEgc28gdGhhdCB3ZSBjYW4gYWNjb21vZGF0ZQorICogdGhlIC0xIHRhZyBmb3IgdGhlIFRfVkVSU0lPTiByZXF1ZXN0KS4KKyAqIFRoaXMgYWxzbyBoYXMgdGhlIG5pY2UgZWZmZWN0IG9mIG9ubHkgaGF2aW5nIHRvIGFsbG9jYXRlIHdhaXRfcXVldWVzCisgKiBvbmNlLCBpbnN0ZWFkIG9mIGNvbnN0YW50bHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZyB0aGVtLiAgSXRzIHBvc3NpYmxlCisgKiBvdGhlciByZXNvdXJjZXMgY291bGQgYmVuZWZpdCBmcm9tIHRoaXMgc2NoZW1lIGFzIHdlbGwuCisgKgorICovCisKK3N0cnVjdCBwOV9yZXFfdCB7CisJaW50IHN0YXR1czsKKwlpbnQgdF9lcnI7CisJdTE2IGZsdXNoX3RhZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisJc3RydWN0IHA5X2ZjYWxsICp0YzsKKwlzdHJ1Y3QgcDlfZmNhbGwgKnJjOworCXZvaWQgKmF1eDsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Cit9OworCiAvKioKICAqIHN0cnVjdCBwOV9jbGllbnQgLSBwZXIgY2xpZW50IGluc3RhbmNlIHN0YXRlCiAgKiBAbG9jazogcHJvdGVjdCBAZmlkbGlzdApAQCAtMzYsOSArMTE3LDIwIEBACiAgKiBAY29ubjogY29ubmVjdGlvbiBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRyYW5zX2ZkCiAgKiBAZmlkcG9vbDogZmlkIGhhbmRsZSBhY2NvdW50aW5nIGZvciBzZXNzaW9uCiAgKiBAZmlkbGlzdDogTGlzdCBvZiBhY3RpdmUgZmlkIGhhbmRsZXMKKyAqIEB0YWdwb29sIC0gdHJhbnNhY3Rpb24gaWQgYWNjb3VudGluZyBmb3Igc2Vzc2lvbgorICogQHJlcXMgLSAyRCBhcnJheSBvZiByZXF1ZXN0cworICogQG1heF90YWcgLSBjdXJyZW50IG1heGltdW0gdGFnIGlkIGFsbG9jYXRlZAogICoKICAqIFRoZSBjbGllbnQgc3RydWN0dXJlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB2YXJpb3VzIHBlci1jbGllbnQKICAqIHN0YXRlIHRoYXQgaGFzIGJlZW4gaW5zdGFudGlhdGVkLgorICogSW4gb3JkZXIgdG8gbWluaW1pemUgcGVyLXRyYW5zYWN0aW9uIG92ZXJoZWFkIHdlIHVzZSBhCisgKiBzaW1wbGUgYXJyYXkgdG8gbG9va3VwIHJlcXVlc3RzIGluc3RlYWQgb2YgYSBoYXNoIHRhYmxlCisgKiBvciBsaW5rZWQgbGlzdC4gIEluIG9yZGVyIHRvIHN1cHBvcnQgbGFyZ2VyIG51bWJlciBvZgorICogdHJhbnNhY3Rpb25zLCB3ZSBtYWtlIHRoaXMgYSAyRCBhcnJheSwgYWxsb2NhdGluZyBuZXcgcm93cworICogd2hlbiB3ZSBuZWVkIHRvIGdyb3cgdGhlIHRvdGFsIG51bWJlciBvZiB0aGUgdHJhbnNhY3Rpb25zLgorICoKKyAqIEVhY2ggcm93IGlzIDI1NiByZXF1ZXN0cyBhbmQgd2UnbGwgc3VwcG9ydCB1cCB0byAyNTYgcm93cyBmb3IKKyAqIGEgdG90YWwgb2YgNjRrIGNvbmN1cnJlbnQgcmVxdWVzdHMgcGVyIHNlc3Npb24uCiAgKgogICogQnVnczogZHVwbGljYXRlZCBkYXRhIGFuZCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBlbGVtZW50cy4KICAqLwpAQCAtNDgsMTEgKzE0MCwxNiBAQAogCWludCBtc2l6ZTsKIAl1bnNpZ25lZCBjaGFyIGRvdHU7CiAJc3RydWN0IHA5X3RyYW5zX21vZHVsZSAqdHJhbnNfbW9kOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CisJZW51bSBwOV90cmFuc19zdGF0dXMgc3RhdHVzOworCXZvaWQgKnRyYW5zOwogCXN0cnVjdCBwOV9jb25uICpjb25uOwogCiAJc3RydWN0IHA5X2lkcG9vbCAqZmlkcG9vbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpZGxpc3Q7CisKKwlzdHJ1Y3QgcDlfaWRwb29sICp0YWdwb29sOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxc1tQOV9ST1dfTUFYVEFHXTsKKwlpbnQgbWF4X3RhZzsKIH07CiAKIC8qKgpAQCAtNjUsOCArMTYyLDYgQEAKICAqIEB1aWQ6IHRoZSBudW1lcmljIHVpZCBvZiB0aGUgbG9jYWwgdXNlciB3aG8gb3ducyB0aGlzIGhhbmRsZQogICogQGF1eDogdHJhbnNwb3J0IHNwZWNpZmljIGluZm9ybWF0aW9uICh1bnVzZWQ/KQogICogQHJkaXJfZnBvczogdHJhY2tzIG9mZnNldCBvZiBmaWxlIHBvc2l0aW9uIHdoZW4gcmVhZGluZyBkaXJlY3RvcnkgY29udGVudHMKLSAqIEByZGlyX3BvczogKHVudXNlZD8pCi0gKiBAcmRpcl9mY2FsbDogaG9sZHMgcmVzcG9uc2Ugb2YgbGFzdCBkaXJlY3RvcnkgcmVhZCByZXF1ZXN0CiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtODMsOCArMTc4LDYgQEAKIAl2b2lkICphdXg7CiAKIAlpbnQgcmRpcl9mcG9zOwotCWludCByZGlyX3BvczsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJkaXJfZmNhbGw7CiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpAQCAtMTAzLDE1ICsxOTYsMTggQEAKIAkJCQkJCQljaGFyICpleHRlbnNpb24pOwogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF9yZW1vdmUoc3RydWN0IHA5X2ZpZCAqZmlkKTsKLWludCBwOV9jbGllbnRfcmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3JlYWRuKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfd3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF91cmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQl1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF91d3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwgdTY0IG9mZnNldCwKLQkJCQkJCQkJdTMyIGNvdW50KTsKLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpOworaW50IHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCk7CitpbnQgcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCk7CitzdHJ1Y3QgcDlfd3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3dzdGF0KHN0cnVjdCBwOV9maWQgKmZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3QpOwotc3RydWN0IHA5X3N0YXQgKnA5X2NsaWVudF9kaXJyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgdTY0IG9mZnNldCk7CisKK3N0cnVjdCBwOV9yZXFfdCAqcDlfdGFnX2xvb2t1cChzdHJ1Y3QgcDlfY2xpZW50ICosIHUxNik7Cit2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CisKK2ludCBwOXN0YXRfcmVhZChjaGFyICosIGludCwgc3RydWN0IHA5X3dzdGF0ICosIGludCk7Cit2b2lkIHA5c3RhdF9mcmVlKHN0cnVjdCBwOV93c3RhdCAqKTsKKwogCiAjZW5kaWYgLyogTkVUXzlQX0NMSUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaCBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCmluZGV4IDNjYTczNzEuLjZkNTg4NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oCkBAIC0yNiw1MiArMjYsNiBAQAogI2lmbmRlZiBORVRfOVBfVFJBTlNQT1JUX0gKICNkZWZpbmUgTkVUXzlQX1RSQU5TUE9SVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotLyoqCi0gKiBlbnVtIHA5X3RyYW5zX3N0YXR1cyAtIGRpZmZlcmVudCBzdGF0ZXMgb2YgdW5kZXJseWluZyB0cmFuc3BvcnRzCi0gKiBAQ29ubmVjdGVkOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGFuZCBoZWFsdGh5Ci0gKiBARGlzY29ubmVjdGVkOiB0cmFuc3BvcnQgaGFzIGJlZW4gZGlzY29ubmVjdGVkCi0gKiBASHVuZzogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBieSB3ZWRnZWQKLSAqCi0gKiBUaGlzIGVudW1lcmF0aW9uIGRldGFpbHMgdGhlIHZhcmlvdXMgc3RhdGVzIGEgdHJhbnNwb3J0Ci0gKiBpbnN0YXRpYXRpb24gY2FuIGJlIGluLgotICovCi0KLWVudW0gcDlfdHJhbnNfc3RhdHVzIHsKLQlDb25uZWN0ZWQsCi0JRGlzY29ubmVjdGVkLAotCUh1bmcsCi19OwotCi0vKioKLSAqIHN0cnVjdCBwOV90cmFucyAtIHBlci10cmFuc3BvcnQgc3RhdGUgYW5kIEFQSQotICogQHN0YXR1czogdHJhbnNwb3J0ICZwOV90cmFuc19zdGF0dXMKLSAqIEBtc2l6ZTogbmVnb3RpYXRlZCBtYXhpbXVtIHBhY2tldCBzaXplIChkdXBsaWNhdGUgZnJvbSBjbGllbnQpCi0gKiBAZXh0ZW5kZWQ6IG5lZ290aWF0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyAoZHVwbGljYXRlIGZyb20gY2xpZW50KQotICogQHByaXY6IHRyYW5zcG9ydCBwcml2YXRlIGRhdGEKLSAqIEBjbG9zZTogbWVtYmVyIGZ1bmN0aW9uIHRvIGRpc2Nvbm5lY3QgYW5kIGNsb3NlIHRoZSB0cmFuc3BvcnQKLSAqIEBycGM6IG1lbWJlciBmdW5jdGlvbiB0byBpc3N1ZSBhIHJlcXVlc3QgdG8gdGhlIHRyYW5zcG9ydAotICoKLSAqIFRoaXMgaXMgdGhlIGJhc2ljIEFQSSBmb3IgYSB0cmFuc3BvcnQgaW5zdGFuY2UuICBJdCBpcyB1c2VkIGFzCi0gKiBhIGhhbmRsZSBieSB0aGUgY2xpZW50IHRvIGlzc3VlIHJlcXVlc3RzLiAgVGhpcyBpbnRlcmZhY2UgaXMgY3VycmVudGx5Ci0gKiBpbiBmbHV4IGR1cmluZyByZW9yZ2FuaXphdGlvbi4KLSAqCi0gKiBCdWdzOiB0aGVyZSBpcyBsb3RzIG9mIGR1cGxpY2F0ZWQgZGF0YSBoZXJlIGFuZCBpdHMgbm90IGNsZWFyIHRoYXQKLSAqIHRoZSBtZW1iZXIgZnVuY3Rpb25zIG5lZWQgdG8gYmUgcGVyLWluc3RhbmNlIHZlcnN1cyBwZXIgdHJhbnNwb3J0Ci0gKiBtb2R1bGUuCi0gKi8KLQotc3RydWN0IHA5X3RyYW5zIHsKLQllbnVtIHA5X3RyYW5zX3N0YXR1cyBzdGF0dXM7Ci0JaW50IG1zaXplOwotCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQ7Ci0Jdm9pZCAqcHJpdjsKLQl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgcDlfdHJhbnMgKik7Ci0JaW50ICgqcnBjKSAoc3RydWN0IHA5X3RyYW5zICp0LCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLAotCQkJCQkJCXN0cnVjdCBwOV9mY2FsbCAqKnJjKTsKLX07Ci0KIC8qKgogICogc3RydWN0IHA5X3RyYW5zX21vZHVsZSAtIHRyYW5zcG9ydCBtb2R1bGUgaW50ZXJmYWNlCiAgKiBAbGlzdDogdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgY3VycmVudGx5IGF2YWlsYWJsZSB0cmFuc3BvcnRzCkBAIC03OSwxMiArMzMsMTQgQEAKICAqIEBtYXhzaXplOiB0cmFuc3BvcnQgcHJvdmlkZWQgbWF4aW11bSBwYWNrZXQgc2l6ZQogICogQGRlZjogc2V0IGlmIHRoaXMgdHJhbnNwb3J0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0CiAgKiBAY3JlYXRlOiBtZW1iZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gb24gdGhpcyB0cmFuc3BvcnQKKyAqIEByZXF1ZXN0OiBtZW1iZXIgZnVuY3Rpb24gdG8gaXNzdWUgYSByZXF1ZXN0IHRvIHRoZSB0cmFuc3BvcnQKKyAqIEBjYW5jZWw6IG1lbWJlciBmdW5jdGlvbiB0byBjYW5jZWwgYSByZXF1ZXN0IChpZiBpdCBoYXNuJ3QgYmVlbiBzZW50KQogICoKICAqIFRoaXMgaXMgdGhlIGJhc2ljIEFQSSBmb3IgYSB0cmFuc3BvcnQgbW9kdWxlIHdoaWNoIGlzIHJlZ2lzdGVyZWQgYnkgdGhlCiAgKiB0cmFuc3BvcnQgbW9kdWxlIHdpdGggdGhlIDlQIGNvcmUgbmV0d29yayBtb2R1bGUgYW5kIHVzZWQgYnkgdGhlIGNsaWVudAogICogdG8gaW5zdGFudGlhdGUgYSBuZXcgY29ubmVjdGlvbiBvbiBhIHRyYW5zcG9ydC4KICAqCi0gKiBCdWdzOiB0aGUgdHJhbnNwb3J0IG1vZHVsZSBsaXN0IGlzbid0IHByb3RlY3RlZC4KKyAqIEJVR1M6IHRoZSB0cmFuc3BvcnQgbW9kdWxlIGxpc3QgaXNuJ3QgcHJvdGVjdGVkLgogICovCiAKIHN0cnVjdCBwOV90cmFuc19tb2R1bGUgewpAQCAtOTIsOCArNDgsMTEgQEAKIAljaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0cmFuc3BvcnQgKi8KIAlpbnQgbWF4c2l6ZTsJCS8qIG1heCBtZXNzYWdlIHNpemUgb2YgdHJhbnNwb3J0ICovCiAJaW50IGRlZjsJCS8qIHRoaXMgdHJhbnNwb3J0IHNob3VsZCBiZSBkZWZhdWx0ICovCi0Jc3RydWN0IHA5X3RyYW5zICogKCpjcmVhdGUpKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludCAoKmNyZWF0ZSkoc3RydWN0IHA5X2NsaWVudCAqLCBjb25zdCBjaGFyICosIGNoYXIgKik7CisJdm9pZCAoKmNsb3NlKSAoc3RydWN0IHA5X2NsaWVudCAqKTsKKwlpbnQgKCpyZXF1ZXN0KSAoc3RydWN0IHA5X2NsaWVudCAqLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CisJaW50ICgqY2FuY2VsKSAoc3RydWN0IHA5X2NsaWVudCAqLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSk7CiB9OwogCiB2b2lkIHY5ZnNfcmVnaXN0ZXJfdHJhbnMoc3RydWN0IHA5X3RyYW5zX21vZHVsZSAqbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggNmY4NDE4Yi4uOTk2ZDEyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtNTQsOCArNTQsOCBAQAogI2RlZmluZSBTT0xfUkZDT01NCTE4CiAKICNkZWZpbmUgQlRfSU5GTyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiQmx1ZXRvb3RoOiAiIGZtdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBCVF9EQkcoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQgIlxuIiAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZykKLSNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICAiJXM6ICIgZm10ICJcbiIgLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmcpCisjZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCisjZGVmaW5lIEJUX0VSUihmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0VSUiAgIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCiAKIC8qIENvbm5lY3Rpb24gYW5kIHNvY2tldCBzdGF0ZXMgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCA2MDQ4NTc5Li45M2E1NmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMTE0LDcgKzExNCw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiBkbyB7IGlmIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCiAgIHByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICVjICVzICIgZm10LCBcCi0gICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19GVU5DVElPTl9fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisgICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKIHsKIAlyZXR1cm4gKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIGxldmVsKSAmJiBuZXRfcmF0ZWxpbWl0KCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCAxY2JjY2FmLi5iYzAyNmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTM5Niw3ICszOTYsNyBAQAogaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiAJCQkgc3RydWN0IGZpbGUqIGZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwotaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCiAJCQkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDBiMjA3MWQuLmZlOWZjZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMTY1LDEzICsxNjUsMTMgQEAKICAgICBkbyB7CQkJCQkJCQlcCiAJICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCiAJCSAgICBwcmludGsoS0VSTl9ERUJVRyAiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLAlcCi0JCQkgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisJCQkgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKICAgICB9IHdoaWxlICgwKQogI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiTGVhdmU6ICVzLCAlcyBsaW5lICVpXG4iLCAgICBcCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICBcCisJCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgRW50ZXJGdW5jdGlvbihsZXZlbCkgICBkbyB7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKaW5kZXggMDgzODc1NS4uN2U1ODIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgSVJEQV9BU1NFUlQoZXhwciwgZnVuYykgXAogZG8geyBpZighKGV4cHIpKSB7IFwKIAlwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlczolczolZCAlc1xuIiwgXAotCQlfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18sKCNleHByKSApOyBcCisJCV9fRklMRV9fLF9fZnVuY19fLF9fTElORV9fLCgjZXhwcikgKTsgXAogCWZ1bmMgfSB9IHdoaWxlICgwKQogI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkJbGFiZWwKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA1NjE3YTE2Li5kODYxMTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTY0NSw3ICs2NDUsOCBAQAogICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBUeCBNSUMgS2V5ICg2NCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBSeCBNSUMgS2V5ICg2NCBiaXRzKQotICoKKyAqIEBpY3ZfbGVuOiBGSVhNRQorICogQGl2X2xlbjogRklYTUUKICAqLwogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiB7CiAJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCBhMDFiN2M0Li4xMWRkMDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTEyOSw5ICsxMjksOCBAQAogCQkJCQkJCSAgIHZvaWQgX191c2VyICpidWZmZXIsCiAJCQkJCQkJICAgc2l6ZV90ICpsZW5wLAogCQkJCQkJCSAgIGxvZmZfdCAqcHBvcyk7Ci1pbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCi0JCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCitpbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwKKwkJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAppbmRleCBmMjllZWI5Li41ODY4NDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaApAQCAtMjUsNCArMjUsMTIgQEAKIAllbHNlCiAJCXJldHVybiB0ZXN0X2JpdChJUFNfRFNUX05BVF9ET05FX0JJVCwgJmN0LT5zdGF0dXMpOwogfQorCitzdHJ1Y3QgbmxhdHRyOworCitleHRlcm4gaW50CisoKm5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaykoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpOworCiAjZW5kaWYgLyogX05GX05BVF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCmluZGV4IDBjYjYzZWQuLmI4MDkzOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaApAQCAtMiw5ICsyLDkgQEAKICNkZWZpbmUgX19ORVROU19YX1RBQkxFU19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKIHN0cnVjdCBuZXRuc194dCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTlBST1RPXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlc1tORlBST1RPX05VTVBST1RPXTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggNzAzMzA1ZC4uZWQ3MWIxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTMwMyw3ICszMDMsNyBAQAogI2RlZmluZSBTQ1RQX0FTU0VSVChleHByLCBzdHIsIGZ1bmMpIFwKIAlpZiAoIShleHByKSkgeyBcCiAJCVNDVFBfREVCVUdfUFJJTlRLKCJBc3NlcnRpb24gRmFpbGVkOiAlcyglcykgYXQgJXM6JXM6JWRcbiIsIFwKLQkJCXN0ciwgKCNleHByKSwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisJCQlzdHIsICgjZXhwciksIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCiAJCWZ1bmM7IFwKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggMTZiZTEyZi4uMGM5NTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTIxMyw2ICsyMTMsOCBAQAogCUlTQ1NJX0VSUl9EQVRBX0RHU1QJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNSwKIAlJU0NTSV9FUlJfUEFSQU1fTk9UX0ZPVU5ECT0gSVNDU0lfRVJSX0JBU0UgKyAxNiwKIAlJU0NTSV9FUlJfTk9fU0NTSV9DTUQJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNywKKwlJU0NTSV9FUlJfSU5WQUxJRF9IT1NUCQk9IElTQ1NJX0VSUl9CQVNFICsgMTgsCisJSVNDU0lfRVJSX1hNSVRfRkFJTEVECQk9IElTQ1NJX0VSUl9CQVNFICsgMTksCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA1ZTc1YmI3Li42MWU1M2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMjg3LDYgKzI4NywxMSBAQAogCXN0cnVjdCBpc2NzaV9wb29sCWNtZHBvb2w7CS8qIFBEVSdzIHBvb2wgKi8KIH07CiAKK2VudW0geworCUlTQ1NJX0hPU1RfU0VUVVAsCisJSVNDU0lfSE9TVF9SRU1PVkVELAorfTsKKwogc3RydWN0IGlzY3NpX2hvc3QgewogCWNoYXIJCQkqaW5pdGlhdG9ybmFtZTsKIAkvKiBodyBhZGRyZXNzIG9yIG5ldGRldiBpc2NzaSBjb25uZWN0aW9uIGlzIGJvdW5kIHRvICovCkBAIC0yOTUsNiArMzAwLDEyIEBACiAJLyogbG9jYWwgYWRkcmVzcyAqLwogCWludAkJCWxvY2FsX3BvcnQ7CiAJY2hhcgkJCWxvY2FsX2FkZHJlc3NbSVNDU0lfQUREUkVTU19CVUZfTEVOXTsKKworCXdhaXRfcXVldWVfaGVhZF90CXNlc3Npb25fcmVtb3ZhbF93cTsKKwkvKiBwcm90ZWN0cyBzZXNzaW9ucyBhbmQgc3RhdGUgKi8KKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCW51bV9zZXNzaW9uczsKKwlpbnQJCQlzdGF0ZTsKIH07CiAKIC8qCkBAIC0zMDIsNyArMzEzLDcgQEAKICAqLwogZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7Ci1leHRlcm4gaW50IGlzY3NpX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOworZXh0ZXJuIGludCBpc2NzaV9laF90YXJnZXRfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc2MsCiAJCQkgICAgICB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CkBAIC0zNTEsNiArMzYyLDggQEAKIGV4dGVybiBpbnQgaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqLCBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKiwKIAkJCSAgIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9jb25uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycik7CitleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJCQkgIGVudW0gaXNjc2lfZXJyIGVycik7CiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCiAJCQkJZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggMTkyZjg3MS4uYTEwOTE2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0zODEsNiArMzgxLDExIEBACiAjZGVmaW5lIERJRF9JTU1fUkVUUlkgICAweDBjCS8qIFJldHJ5IHdpdGhvdXQgZGVjcmVtZW50aW5nIHJldHJ5IGNvdW50ICAqLwogI2RlZmluZSBESURfUkVRVUVVRQkweDBkCS8qIFJlcXVldWUgY29tbWFuZCAobm8gaW1tZWRpYXRlIHJldHJ5KSBhbHNvCiAJCQkJICogd2l0aG91dCBkZWNyZW1lbnRpbmcgdGhlIHJldHJ5IGNvdW50CSAgICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDB4MGUgLyogVHJhbnNwb3J0IGVycm9yIGRpc3J1cHRlZCBleGVjdXRpb24KKwkJCQkgICAgICAqIGFuZCB0aGUgZHJpdmVyIGJsb2NrZWQgdGhlIHBvcnQgdG8KKwkJCQkgICAgICAqIHJlY292ZXIgdGhlIGxpbmsuIFRyYW5zcG9ydCBjbGFzcyB3aWxsCisJCQkJICAgICAgKiByZXRyeSBvciBmYWlsIElPICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRkFJTEZBU1QJMHgwZiAvKiBUcmFuc3BvcnQgY2xhc3MgZmFzdGZhaWxlZCB0aGUgaW8gKi8KICNkZWZpbmUgRFJJVkVSX09LICAgICAgIDB4MDAJLyogRHJpdmVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qCkBAIC00MjYsNiArNDMxLDcgQEAKICNkZWZpbmUgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSAgIDB4MTA1NQogI2RlZmluZSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgMHgxMDU2CiAjZGVmaW5lIFNDU0lfTUxRVUVVRV9FSF9SRVRSWSAgICAweDEwNTcKKyNkZWZpbmUgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZIDB4MTA1OAogCiAvKgogICogIFVzZSB0aGVzZSB0byBzZXBhcmF0ZSBzdGF0dXMgbXNnIGFuZCBvdXIgYnl0ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggYjQ5ZTcyNS4uYTM3YTgxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTIzOCw2ICsyMzgsMTYgQEAKIAkJCQkJCSAqIGZvciB0aGUgZGV2aWNlIGF0IGEgdGltZS4gKi8KIAl1bnNpZ25lZCBpbnQJCXBkdF8xZl9mb3Jfbm9fbHVuOwkvKiBQRFQgPSAweDFmICovCiAJCQkJCQkvKiBtZWFucyBubyBsdW4gcHJlc2VudCAqLworCS8qIGNvbW1hbmRzIGFjdHVhbGx5IGFjdGl2ZSBvbiBMTEQuIHByb3RlY3RlZCBieSBob3N0IGxvY2suICovCisJdW5zaWduZWQgaW50CQl0YXJnZXRfYnVzeTsKKwkvKgorCSAqIExMRHMgc2hvdWxkIHNldCB0aGlzIGluIHRoZSBzbGF2ZV9hbGxvYyBob3N0IHRlbXBsYXRlIGNhbGxvdXQuCisJICogSWYgc2V0IHRvIHplcm8gdGhlbiB0aGVyZSBpcyBub3QgbGltaXQuCisJICovCisJdW5zaWduZWQgaW50CQljYW5fcXVldWU7CisJdW5zaWduZWQgaW50CQl0YXJnZXRfYmxvY2tlZDsKKwl1bnNpZ25lZCBpbnQJCW1heF90YXJnZXRfYmxvY2tlZDsKKyNkZWZpbmUgU0NTSV9ERUZBVUxUX1RBUkdFVF9CTE9DS0VECTMKIAogCWNoYXIJCQlzY3NpX2xldmVsOwogCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDIxMDE4YTQuLjQ5ZDg5MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0zNTcsNiArMzU3LDcgQEAKIC8qIGJpdCBmaWVsZCB2YWx1ZXMgZm9yIHN0cnVjdCBmY19ycG9ydCAiZmxhZ3MiIGZpZWxkOiAqLwogI2RlZmluZSBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcJMHgwMQogI2RlZmluZSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcJCTB4MDIKKyNkZWZpbmUgRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUCTB4MDMKIAogI2RlZmluZQlkZXZfdG9fcnBvcnQoZCkJCQkJXAogCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZmNfcnBvcnQsIGRldikKQEAgLTY3OCwxMiArNjc5LDE1IEBACiAJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVCkKIAkJCXJlc3VsdCA9IDA7CiAJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKLQkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJZWxzZQogCQkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfUE9SVFNUQVRFX0JMT0NLRUQ6Ci0JCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQpCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OworCQllbHNlCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IDhiNmM5MWQuLmM2NjdjYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0xMzUsNyArMTM1LDggQEAKIC8qCiAgKiBjb250cm9sIHBsYW5lIHVwY2FsbHMKICAqLwotZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKK2V4dGVybiB2b2lkIGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAorCQkJCSAgIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKIGV4dGVybiBpbnQgaXNjc2lfcmVjdl9wZHUoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFfc2l6ZSk7CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogc3RydWN0IGlzY3NpX2VuZHBvaW50IHsKIAl2b2lkICpkZF9kYXRhOwkJCS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKLQl1bnNpZ25lZCBpbnQgaWQ7CisJdWludDY0X3QgaWQ7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9jeWJsYWZiLmggYi9pbmNsdWRlL3ZpZGVvL2N5YmxhZmIuaAppbmRleCA3MTc0NDA1Li5kM2MxZDRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2N5YmxhZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL2N5YmxhZmIuaApAQCAtNCw3ICs0LDcgQEAKICNlbmRpZgogCiAjaWYgQ1lCTEFGQl9ERUJVRwotI2RlZmluZSBkZWJ1ZyhmLGEuLi4pCXByaW50aygiJXM6IiBmLCAgX19GVU5DVElPTl9fICwgIyMgYSk7CisjZGVmaW5lIGRlYnVnKGYsYS4uLikJcHJpbnRrKCIlczoiIGYsICBfX2Z1bmNfXyAsICMjIGEpOwogI2Vsc2UKICNkZWZpbmUgZGVidWcoZixhLi4uKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmggYi9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmgKaW5kZXggMzg5MTBkYS4uMDhiNjYzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaApAQCAtMTIzLDcgKzEyMyw2IEBACiAKIHN0cnVjdCBuZW9mYl9wYXIgewogCXN0cnVjdCB2Z2FzdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwogCXVuc2lnbmVkIGludCByZWZfY291bnQ7CiAKIAl1bnNpZ25lZCBjaGFyIE1pc2NPdXRSZWc7CS8qIE1pc2MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmggYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCmluZGV4IDA5OWZmYTUuLmQ1ZGNhZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmgKKysrIGIvaW5jbHVkZS92aWRlby9yYWRlb24uaApAQCAtMzg2LDcgKzM4Niw3IEBACiAjZGVmaW5lIFNDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZGMCAgCiAjZGVmaW5lIFNSQ19TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgICAgIDB4MTZGNCAgCiAjZGVmaW5lIFJCMkRfRFNUQ0FDSEVfTU9ERQkJICAgICAgIDB4MzQyOAotI2RlZmluZSBSQjJEX0RTVENBQ0hFX0NUTFNUQVQJCSAgICAgICAweDM0MkMKKyNkZWZpbmUgUkIyRF9EU1RDQUNIRV9DVExTVEFUX2Jyb2tlbgkgICAgICAgMHgzNDJDIC8qIGRvIG5vdCB1c2UgKi8KICNkZWZpbmUgTFZEU19HRU5fQ05UTAkJCSAgICAgICAweDAyZDAKICNkZWZpbmUgTFZEU19QTExfQ05UTAkJCSAgICAgICAweDAyZDQKICNkZWZpbmUgRlAyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjg4CkBAIC01MjUsNiArNTI1LDkgQEAKICNkZWZpbmUgQ1JUQ19ESVNQTEFZX0RJUwkJCSAgICgxIDw8IDEwKQogI2RlZmluZSBDUlRDX0NSVF9PTgkJCQkgICAoMSA8PCAxNSkKIAorLyogRFNUQ0FDSEVfTU9ERSBiaXRzIGNvbnN0YW50cyAqLworI2RlZmluZSBSQjJEX0RDX0FVVE9GTFVTSF9FTkFCTEUgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgUkIyRF9EQ19EQ19ESVNBQkxFX0lHTk9SRV9QRSAgICAgICAgICAgICAgICgxIDw8IDE3KQogCiAvKiBEU1RDQUNIRV9DVExTVEFUIGJpdCBjb25zdGFudHMgKi8KICNkZWZpbmUgUkIyRF9EQ19GTFVTSF8yRAkJCSAgICgxIDw8IDApCkBAIC01MzIsNiArNTM1LDkgQEAKICNkZWZpbmUgUkIyRF9EQ19GTFVTSF9BTEwJCQkgICAoUkIyRF9EQ19GTFVTSF8yRCB8IFJCMkRfRENfRlJFRV8yRCkKICNkZWZpbmUgUkIyRF9EQ19CVVNZCQkJCSAgICgxIDw8IDMxKQogCisvKiBEU1RDQUNIRV9NT0RFIGJpdHMgY29uc3RhbnRzICovCisjZGVmaW5lIFJCMkRfRENfQVVUT0ZMVVNIX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBSQjJEX0RDX0RDX0RJU0FCTEVfSUdOT1JFX1BFICAgICAgICAgICAgICAgKDEgPDwgMTcpCiAKIC8qIENSVENfR0VOX0NOVEwgYml0IGNvbnN0YW50cyAqLwogI2RlZmluZSBDUlRDX0RCTF9TQ0FOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQpAQCAtODYzLDE1ICs4NjksMTAgQEAKICNkZWZpbmUgR01DX0RTVF8xNkJQUF9ZVllVNDIyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBjMDAKICNkZWZpbmUgR01DX0RTVF8zMkJQUF9BWVVWNDQ0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBlMDAKICNkZWZpbmUgR01DX0RTVF8xNkJQUF9BUkdCNDQ0NCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgR01DX1NSQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgR01DX1NSQ19NT05PX0xCS0dEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgR01DX1NSQ19EU1RDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKICNkZWZpbmUgR01DX0JZVEVfT1JERVJfTVNCX1RPX0xTQiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgR01DX0JZVEVfT1JERVJfTFNCX1RPX01TQiAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgR01DX0RQX0NPTlZFUlNJT05fVEVNUF85MzAwICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgR01DX0RQX0NPTlZFUlNJT05fVEVNUF82NTAwICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgR01DX0RQX1NSQ19SRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgR01DX0RQX1NSQ19IT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKICNkZWZpbmUgR01DX0RQX1NSQ19IT1NUX0JZVEVBTElHTiAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKICNkZWZpbmUgR01DXzNEX0ZDTl9FTl9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgR01DXzNEX0ZDTl9FTl9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKQEAgLTg4Miw2ICs4ODMsOSBAQAogI2RlZmluZSBHTUNfV1JJVEVfTUFTS19MRUFWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBHTUNfV1JJVEVfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBHTUNfQ0xSX0NNUF9DTlRMX0RJUyAgICAgIAkJICAgKDEgPDwgMjgpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfTUFTSwkJCSAgICgzIDw8IDEyKQorI2RlZmluZSBHTUNfU1JDX0RBVEFUWVBFX01PTk9fRkdfQkcJCSAgICgwIDw8IDEyKQorI2RlZmluZSBHTUNfU1JDX0RBVEFUWVBFX01PTk9fRkdfTEEJCSAgICgxIDw8IDEyKQogI2RlZmluZSBHTUNfU1JDX0RBVEFUWVBFX0NPTE9SCQkJICAgKDMgPDwgMTIpCiAjZGVmaW5lIFJPUDNfUyAgICAgICAgICAgICAgICAJCQkgICAweDAwY2MwMDAwCiAjZGVmaW5lIFJPUDNfU1JDQ09QWQkJCQkgICAweDAwY2MwMDAwCkBAIC04OTAsNiArODk0LDcgQEAKICNkZWZpbmUgRFBfU1JDX1NPVVJDRV9NQVNLICAgICAgICAJCSAgICg3ICAgIDw8IDI0KQogI2RlZmluZSBHTUNfQlJVU0hfTk9ORSAgICAgICAgICAgIAkJICAgKDE1ICAgPDwgIDQpCiAjZGVmaW5lIERQX1NSQ19TT1VSQ0VfTUVNT1JZCQkJICAgKDIgICAgPDwgMjQpCisjZGVmaW5lIERQX1NSQ19TT1VSQ0VfSE9TVF9EQVRBCQkJICAgKDMgICAgPDwgMjQpCiAjZGVmaW5lIEdNQ19CUlVTSF9TT0xJRENPTE9SCQkJICAgMHgwMDAwMDBkMAogCiAvKiBEUF9NSVggYml0IGNvbnN0YW50cyAqLwpAQCAtOTc1LDYgKzk4MCwxMiBAQAogI2RlZmluZSBESVNQX1BXUl9NQU5fVFZfRU5BQkxFX1JTVCAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCiAjZGVmaW5lIERJU1BfUFdSX01BTl9BVVRPX1BXUlVQX0VOICAgICAgICAgICAgICAgICAoMSA8PCAyNikKIAorLyogUkJCTV9HVUlDTlRMIGNvbnN0YW50cyAqLworI2RlZmluZSBSQkJNX0dVSUNOVExfSE9TVF9EQVRBX1NXQVBfTk9ORQkgICAoMCA8PCAwKQorI2RlZmluZSBSQkJNX0dVSUNOVExfSE9TVF9EQVRBX1NXQVBfMTZCSVQgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUkJCTV9HVUlDTlRMX0hPU1RfREFUQV9TV0FQXzMyQklUCSAgICgyIDw8IDApCisjZGVmaW5lIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF9IRFcJCSAgICgzIDw8IDApCisKIC8qIG1hc2tzICovCiAKICNkZWZpbmUgQ09ORklHX01FTVNJWkVfTUFTSwkJMHgxZjAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zMWQxM3h4eGZiLmggYi9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaAppbmRleCBjOTlkMjYxLi5mZTQxYjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaApAQCAtMTQsNyArMTQsOCBAQAogI2RlZmluZQlTMUQxM1hYWEZCX0gKIAogI2RlZmluZSBTMURfUEFMRVRURV9TSVpFCQkyNTYKLSNkZWZpbmUgUzFEX0NISVBfUkVWCQkJNwkvKiBleHBlY3RlZCBjaGlwIHJldmlzaW9uIG51bWJlciBmb3IgczFkMTM4MDYgKi8KKyNkZWZpbmUgUzFEMTM1MDZfQ0hJUF9SRVYJCTQJLyogZXhwZWN0ZWQgY2hpcCByZXZpc2lvbiBudW1iZXIgZm9yIHMxZDEzNTA2ICovCisjZGVmaW5lIFMxRDEzODA2X0NISVBfUkVWCQk3CS8qIGV4cGVjdGVkIGNoaXAgcmV2aXNpb24gbnVtYmVyIGZvciBzMWQxMzgwNiAqLwogI2RlZmluZSBTMURfRkJJRAkJCSJTMUQxMzgwNiIKICNkZWZpbmUgUzFEX0RFVklDRU5BTUUJCQkiczFkMTM4MDZmYiIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNGJjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKQEAgLTAsMCArMSw3OCBAQAorI2lmbmRlZiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KKyNkZWZpbmUgX19BU01fU0hfTU9CSUxFX0xDRENfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCitlbnVtIHsgUkdCOCwgICAvKiAyNGJwcCwgODo4OjggKi8KKyAgICAgICBSR0I5LCAgIC8qIDE4YnBwLCA5OjkgKi8KKyAgICAgICBSR0IxMkEsIC8qIDI0YnBwLCAxMjoxMiAqLworICAgICAgIFJHQjEyQiwgLyogMTJicHAgKi8KKyAgICAgICBSR0IxNiwgIC8qIDE2YnBwICovCisgICAgICAgUkdCMTgsICAvKiAxOGJwcCAqLworICAgICAgIFJHQjI0LCAgLyogMjRicHAgKi8KKyAgICAgICBTWVM4QSwgIC8qIDI0YnBwLCA4Ojg6OCAqLworICAgICAgIFNZUzhCLCAgLyogMThicHAsIDg6ODoyICovCisgICAgICAgU1lTOEMsICAvKiAxOGJwcCwgMjo4OjggKi8KKyAgICAgICBTWVM4RCwgIC8qIDE2YnBwLCA4OjggKi8KKyAgICAgICBTWVM5LCAgIC8qIDE4YnBwLCA5OjkgKi8KKyAgICAgICBTWVMxMiwgIC8qIDI0YnBwLCAxMjoxMiAqLworICAgICAgIFNZUzE2QSwgLyogMTZicHAgKi8KKyAgICAgICBTWVMxNkIsIC8qIDE4YnBwLCAxNjoyICovCisgICAgICAgU1lTMTZDLCAvKiAxOGJwcCwgMjoxNiAqLworICAgICAgIFNZUzE4LCAgLyogMThicHAgKi8KKyAgICAgICBTWVMyNCB9Oy8qIDI0YnBwICovCisKK2VudW0geyBMQ0RDX0NIQU5fRElTQUJMRUQgPSAwLAorICAgICAgIExDRENfQ0hBTl9NQUlOTENELAorICAgICAgIExDRENfQ0hBTl9TVUJMQ0QgfTsKKworZW51bSB7IExDRENfQ0xLX0JVUywgTENEQ19DTEtfUEVSSVBIRVJBTCwgTENEQ19DTEtfRVhURVJOQUwgfTsKKworI2RlZmluZSBMQ0RDX0ZMQUdTX0RXUE9MICgxIDw8IDApIC8qIFJpc2luZyBlZGdlIGRvdCBjbG9jayBkYXRhIGxhdGNoICovCisjZGVmaW5lIExDRENfRkxBR1NfRElQT0wgKDEgPDwgMSkgLyogQWN0aXZlIGxvdyBkaXNwbGF5IGVuYWJsZSBwb2xhcml0eSAqLworI2RlZmluZSBMQ0RDX0ZMQUdTX0RBUE9MICgxIDw8IDIpIC8qIEFjdGl2ZSBsb3cgZGlzcGxheSBkYXRhIHBvbGFyaXR5ICovCisjZGVmaW5lIExDRENfRkxBR1NfSFNDTlQgKDEgPDwgMykgLyogRGlzYWJsZSBIU1lOQyBkdXJpbmcgVkJMQU5LICovCisjZGVmaW5lIExDRENfRkxBR1NfRFdDTlQgKDEgPDwgNCkgLyogRGlzYWJsZSBkb3RjbG9jayBkdXJpbmcgYmxhbmtpbmcgKi8KKworc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHsKKwl1bnNpZ25lZCBsb25nIGxkbXQycjsKKwl1bnNpZ25lZCBsb25nIGxkbXQzcjsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyB7CisJdm9pZCAoKndyaXRlX2luZGV4KSh2b2lkICpoYW5kbGUsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisJdm9pZCAoKndyaXRlX2RhdGEpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9kYXRhKSh2b2lkICpoYW5kbGUpOworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZyB7CisJdm9pZCAqYm9hcmRfZGF0YTsKKwlpbnQgKCpzZXR1cF9zeXMpKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAorCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7CisJdm9pZCAoKmRpc3BsYXlfb24pKHZvaWQgKmJvYXJkX2RhdGEpOworCXZvaWQgKCpkaXNwbGF5X29mZikodm9pZCAqYm9hcmRfZGF0YSk7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfbGNkX3NpemVfY2ZnIHsgLyogd2lkdGggYW5kIGhlaWdodCBvZiBwYW5lbCBpbiBtbSAqLworCXVuc2lnbmVkIGxvbmcgd2lkdGg7CisJdW5zaWduZWQgbG9uZyBoZWlnaHQ7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbl9jZmcgeworCWludCBjaGFuOworCWludCBicHA7CisJaW50IGludGVyZmFjZV90eXBlOyAvKiBzZWxlY3RzIFJHQm4gb3IgU1lTbiBJL0YsIHNlZSBhYm92ZSAqLworCWludCBjbG9ja19kaXZpZGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIExDRENfRkxBR1NfLi4uICovCisJc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RfY2ZnOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgbGNkX3NpemVfY2ZnOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcgYm9hcmRfY2ZnOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyBzeXNfYnVzX2NmZzsgLyogb25seSBmb3IgU1lTbiBJL0YgKi8KK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHsKKwlpbnQgY2xvY2tfc291cmNlOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyBjaFsyXTsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA4YThlMmQwLi44ODI4ZWQwIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0yOTksNiArMjk5LDEzIEBACiAgICAgICAgICAgZm9yIGluc3RhbmNlIHZpcnR1YWwgc2VydmVycyBhbmQgY2hlY2twb2ludC9yZXN0YXJ0CiAgICAgICAgICAgam9icy4KIAorY29uZmlnIENHUk9VUF9GUkVFWkVSCisgICAgICAgIGJvb2wgImNvbnRyb2wgZ3JvdXAgZnJlZXplciBzdWJzeXN0ZW0iCisgICAgICAgIGRlcGVuZHMgb24gQ0dST1VQUworICAgICAgICBoZWxwCisgICAgICAgICAgUHJvdmlkZXMgYSB3YXkgdG8gZnJlZXplIGFuZCB1bmZyZWV6ZSBhbGwgdGFza3MgaW4gYQorCSAgY2dyb3VwLgorCiBjb25maWcgQ0dST1VQX0RFVklDRQogCWJvb2wgIkRldmljZSBjb250cm9sbGVyIGZvciBjZ3JvdXBzIgogCWRlcGVuZHMgb24gQ0dST1VQUyAmJiBFWFBFUklNRU5UQUwKQEAgLTcxMyw2ICs3MjAsMTQgQEAKIAkgIG9wdGlvbiByZXBsYWNlcyBzaG1lbSBhbmQgdG1wZnMgd2l0aCB0aGUgbXVjaCBzaW1wbGVyIHJhbWZzIGNvZGUsCiAJICB3aGljaCBtYXkgYmUgYXBwcm9wcmlhdGUgb24gc21hbGwgc3lzdGVtcyB3aXRob3V0IHN3YXAuCiAKK2NvbmZpZyBBSU8KKwlib29sICJFbmFibGUgQUlPIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBQT1NJWCBhc3luY2hyb25vdXMgSS9PIHdoaWNoIG1heSBieSB1c2VkCisgICAgICAgICAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nCisgICAgICAgICAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suCisKIGNvbmZpZyBWTV9FVkVOVF9DT1VOVEVSUwogCWRlZmF1bHQgeQogCWJvb2wgIkVuYWJsZSBWTSBldmVudCBjb3VudGVycyBmb3IgL3Byb2Mvdm1zdGF0IiBpZiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfbWQuYyBiL2luaXQvZG9fbW91bnRzX21kLmMKaW5kZXggNDhiM2ZhZC4uNGM4N2VlMSAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfbWQuYworKysgYi9pbml0L2RvX21vdW50c19tZC5jCkBAIC0xLDUgKzEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJkb19tb3VudHMuaCIKIApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfcmQuYyBiL2luaXQvZG9fbW91bnRzX3JkLmMKaW5kZXggZmVkZWY5My4uYTdjNzQ4ZiAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfcmQuYworKysgYi9pbml0L2RvX21vdW50c19yZC5jCkBAIC03MSw3ICs3MSw3IEBACiAJc3lzX3JlYWQoZmQsIGJ1Ziwgc2l6ZSk7CiAKIAkvKgotCSAqIElmIGl0IG1hdGNoZXMgdGhlIGd6aXAgbWFnaWMgbnVtYmVycywgcmV0dXJuIC0xCisJICogSWYgaXQgbWF0Y2hlcyB0aGUgZ3ppcCBtYWdpYyBudW1iZXJzLCByZXR1cm4gMAogCSAqLwogCWlmIChidWZbMF0gPT0gMDM3ICYmICgoYnVmWzFdID09IDAyMTMpIHx8IChidWZbMV0gPT0gMDIzNikpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRQpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNjQ0ZmMwMS4uNGY1YmE3NSAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC91dGltZS5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyICptZXNzYWdlOwogc3RhdGljIHZvaWQgX19pbml0IGVycm9yKGNoYXIgKngpCkBAIC03Miw2ICs3Myw0OSBAQAogCX0KIH0KIAorc3RhdGljIGxvbmcgX19pbml0IGRvX3V0aW1lKGNoYXIgX191c2VyICpmaWxlbmFtZSwgdGltZV90IG10aW1lKQoreworCXN0cnVjdCB0aW1lc3BlYyB0WzJdOworCisJdFswXS50dl9zZWMgPSBtdGltZTsKKwl0WzBdLnR2X25zZWMgPSAwOworCXRbMV0udHZfc2VjID0gbXRpbWU7CisJdFsxXS50dl9uc2VjID0gMDsKKworCXJldHVybiBkb191dGltZXMoQVRfRkRDV0QsIGZpbGVuYW1lLCB0LCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKK30KKworc3RhdGljIF9faW5pdGRhdGEgTElTVF9IRUFEKGRpcl9saXN0KTsKK3N0cnVjdCBkaXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpuYW1lOworCXRpbWVfdCBtdGltZTsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXJfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHRpbWVfdCBtdGltZSkKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlKQorCQlwYW5pYygiY2FuJ3QgYWxsb2NhdGUgZGlyX2VudHJ5IGJ1ZmZlciIpOworCUlOSVRfTElTVF9IRUFEKCZkZS0+bGlzdCk7CisJZGUtPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOworCWRlLT5tdGltZSA9IG10aW1lOworCWxpc3RfYWRkKCZkZS0+bGlzdCwgJmRpcl9saXN0KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGRpcl91dGltZSh2b2lkKQoreworCXN0cnVjdCBkaXJfZW50cnkgKmRlLCAqdG1wOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZSwgdG1wLCAmZGlyX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmRlLT5saXN0KTsKKwkJZG9fdXRpbWUoZGUtPm5hbWUsIGRlLT5tdGltZSk7CisJCWtmcmVlKGRlLT5uYW1lKTsKKwkJa2ZyZWUoZGUpOworCX0KK30KKworc3RhdGljIF9faW5pdGRhdGEgdGltZV90IG10aW1lOworCiAvKiBjcGlvIGhlYWRlciBwYXJzaW5nICovCiAKIHN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgaW5vLCBtYWpvciwgbWlub3IsIG5saW5rOwpAQCAtOTcsNiArMTQxLDcgQEAKIAl1aWQgPSBwYXJzZWRbMl07CiAJZ2lkID0gcGFyc2VkWzNdOwogCW5saW5rID0gcGFyc2VkWzRdOworCW10aW1lID0gcGFyc2VkWzVdOwogCWJvZHlfbGVuID0gcGFyc2VkWzZdOwogCW1ham9yID0gcGFyc2VkWzddOwogCW1pbm9yID0gcGFyc2VkWzhdOwpAQCAtMTMwLDYgKzE3NSw3IEBACiAJY291bnQgLT0gbjsKIH0KIAorc3RhdGljIF9faW5pdGRhdGEgY2hhciAqdmNvbGxlY3RlZDsKIHN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbGxlY3RlZDsKIHN0YXRpYyBfX2luaXRkYXRhIGludCByZW1haW5zOwogc3RhdGljIF9faW5pdGRhdGEgY2hhciAqY29sbGVjdDsKQEAgLTI3MSw2ICszMTcsNyBAQAogCQkJaWYgKHdmZCA+PSAwKSB7CiAJCQkJc3lzX2ZjaG93bih3ZmQsIHVpZCwgZ2lkKTsKIAkJCQlzeXNfZmNobW9kKHdmZCwgbW9kZSk7CisJCQkJdmNvbGxlY3RlZCA9IGtzdHJkdXAoY29sbGVjdGVkLCBHRlBfS0VSTkVMKTsKIAkJCQlzdGF0ZSA9IENvcHlGaWxlOwogCQkJfQogCQl9CkBAIC0yNzgsMTIgKzMyNSwxNCBAQAogCQlzeXNfbWtkaXIoY29sbGVjdGVkLCBtb2RlKTsKIAkJc3lzX2Nob3duKGNvbGxlY3RlZCwgdWlkLCBnaWQpOwogCQlzeXNfY2htb2QoY29sbGVjdGVkLCBtb2RlKTsKKwkJZGlyX2FkZChjb2xsZWN0ZWQsIG10aW1lKTsKIAl9IGVsc2UgaWYgKFNfSVNCTEsobW9kZSkgfHwgU19JU0NIUihtb2RlKSB8fAogCQkgICBTX0lTRklGTyhtb2RlKSB8fCBTX0lTU09DSyhtb2RlKSkgewogCQlpZiAobWF5YmVfbGluaygpID09IDApIHsKIAkJCXN5c19ta25vZChjb2xsZWN0ZWQsIG1vZGUsIHJkZXYpOwogCQkJc3lzX2Nob3duKGNvbGxlY3RlZCwgdWlkLCBnaWQpOwogCQkJc3lzX2NobW9kKGNvbGxlY3RlZCwgbW9kZSk7CisJCQlkb191dGltZShjb2xsZWN0ZWQsIG10aW1lKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTI5NCw2ICszNDMsOCBAQAogCWlmIChjb3VudCA+PSBib2R5X2xlbikgewogCQlzeXNfd3JpdGUod2ZkLCB2aWN0aW0sIGJvZHlfbGVuKTsKIAkJc3lzX2Nsb3NlKHdmZCk7CisJCWRvX3V0aW1lKHZjb2xsZWN0ZWQsIG10aW1lKTsKKwkJa2ZyZWUodmNvbGxlY3RlZCk7CiAJCWVhdChib2R5X2xlbik7CiAJCXN0YXRlID0gU2tpcEl0OwogCQlyZXR1cm4gMDsKQEAgLTMxMSw2ICszNjIsNyBAQAogCWNsZWFuX3BhdGgoY29sbGVjdGVkLCAwKTsKIAlzeXNfc3ltbGluayhjb2xsZWN0ZWQgKyBOX0FMSUdOKG5hbWVfbGVuKSwgY29sbGVjdGVkKTsKIAlzeXNfbGNob3duKGNvbGxlY3RlZCwgdWlkLCBnaWQpOworCWRvX3V0aW1lKGNvbGxlY3RlZCwgbXRpbWUpOwogCXN0YXRlID0gU2tpcEl0OwogCW5leHRfc3RhdGUgPSBSZXNldDsKIAlyZXR1cm4gMDsKQEAgLTQ2Niw2ICs1MTgsNyBAQAogCQlidWYgKz0gaW5wdHI7CiAJCWxlbiAtPSBpbnB0cjsKIAl9CisJZGlyX3V0aW1lKCk7CiAJa2ZyZWUod2luZG93KTsKIAlrZnJlZShuYW1lX2J1Zik7CiAJa2ZyZWUoc3ltbGlua19idWYpOwpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAyN2Y2YmY2Li40MzcxZDExIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFydF9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtNjQyLDYgKzY0Myw3IEBACiAJCWluaXRyZF9zdGFydCA9IDA7CiAJfQogI2VuZGlmCisJdm1hbGxvY19pbml0KCk7CiAJdmZzX2NhY2hlc19pbml0X2Vhcmx5KCk7CiAJY3B1c2V0X2luaXRfZWFybHkoKTsKIAltZW1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvaXBjL2lwY19zeXNjdGwuYyBiL2lwYy9pcGNfc3lzY3RsLmMKaW5kZXggNjliYzg1OS4uMGRmZWJjNSAxMDA2NDQKLS0tIGEvaXBjL2lwY19zeXNjdGwuYworKysgYi9pcGMvaXBjX3N5c2N0bC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogLyogVGhlIGdlbmVyaWMgc3lzY3RsIGlwYyBkYXRhIHJvdXRpbmUuICovCi1zdGF0aWMgaW50IHN5c2N0bF9pcGNfZGF0YShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgc3lzY3RsX2lwY19kYXRhKGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xNjksMTQgKzE2OSwxMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHN5c2N0bF9pcGNfcmVnaXN0ZXJlZF9kYXRhKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCi0JCWludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAorc3RhdGljIGludCBzeXNjdGxfaXBjX3JlZ2lzdGVyZWRfZGF0YShjdGxfdGFibGUgKnRhYmxlLAorCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCByYzsKIAotCXJjID0gc3lzY3RsX2lwY19kYXRhKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwKLQkJbmV3bGVuKTsKKwlyYyA9IHN5c2N0bF9pcGNfZGF0YSh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAKIAlpZiAobmV3dmFsICYmIG5ld2xlbiAmJiByYyA+IDApCiAJCS8qCmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggOTZmYjM2Yy4uNjhlYjg1NyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtNTIsNiArNTIsMTQgQEAKICNkZWZpbmUgSEFSRF9NU0dNQVggCSgxMzEwNzIvc2l6ZW9mKHZvaWQqKSkKICNkZWZpbmUgREZMVF9NU0dTSVpFTUFYIDgxOTIJLyogbWF4IG1lc3NhZ2Ugc2l6ZSAqLwogCisvKgorICogRGVmaW5lIHRoZSByYW5nZXMgdmFyaW91cyB1c2VyLXNwZWNpZmllZCBtYXhpbXVtIHZhbHVlcyBjYW4KKyAqIGJlIHNldCB0by4KKyAqLworI2RlZmluZSBNSU5fTVNHTUFYCTEJCS8qIG1pbiB2YWx1ZSBmb3IgbXNnX21heCAqLworI2RlZmluZSBNQVhfTVNHTUFYCUhBUkRfTVNHTUFYCS8qIG1heCB2YWx1ZSBmb3IgbXNnX21heCAqLworI2RlZmluZSBNSU5fTVNHU0laRU1BWAkxMjgJCS8qIG1pbiB2YWx1ZSBmb3IgbXNnc2l6ZV9tYXggKi8KKyNkZWZpbmUgTUFYX01TR1NJWkVNQVgJKDgxOTIqMTI4KQkvKiBtYXggdmFsdWUgZm9yIG1zZ3NpemVfbWF4ICovCiAKIHN0cnVjdCBleHRfd2FpdF9xdWV1ZSB7CQkvKiBxdWV1ZSBvZiBzbGVlcGluZyB0YXNrcyAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKQEAgLTEzNCw4ICsxNDIsOCBAQAogCQkJaW5mby0+cXNpemUgPSAwOwogCQkJaW5mby0+dXNlciA9IE5VTEw7CS8qIHNldCB3aGVuIGFsbCBpcyBvayAqLwogCQkJbWVtc2V0KCZpbmZvLT5hdHRyLCAwLCBzaXplb2YoaW5mby0+YXR0cikpOwotCQkJaW5mby0+YXR0ci5tcV9tYXhtc2cgPSBERkxUX01TR01BWDsKLQkJCWluZm8tPmF0dHIubXFfbXNnc2l6ZSA9IERGTFRfTVNHU0laRU1BWDsKKwkJCWluZm8tPmF0dHIubXFfbWF4bXNnID0gbXNnX21heDsKKwkJCWluZm8tPmF0dHIubXFfbXNnc2l6ZSA9IG1zZ3NpemVfbWF4OwogCQkJaWYgKGF0dHIpIHsKIAkJCQlpbmZvLT5hdHRyLm1xX21heG1zZyA9IGF0dHItPm1xX21heG1zZzsKIAkJCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBhdHRyLT5tcV9tc2dzaXplOwpAQCAtMTE5MSwxMSArMTE5OSwxMSBAQAogCS5raWxsX3NiID0ga2lsbF9saXR0ZXJfc3VwZXIsCiB9OwogCi1zdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWluID0gREZMVF9NU0dNQVg7Ci1zdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWF4ID0gSEFSRF9NU0dNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWluID0gTUlOX01TR01BWDsKK3N0YXRpYyBpbnQgbXNnX21heF9saW1pdF9tYXggPSBNQVhfTVNHTUFYOwogCi1zdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21pbiA9IERGTFRfTVNHU0laRU1BWDsKLXN0YXRpYyBpbnQgbXNnX21heHNpemVfbGltaXRfbWF4ID0gSU5UX01BWDsKK3N0YXRpYyBpbnQgbXNnX21heHNpemVfbGltaXRfbWluID0gTUlOX01TR1NJWkVNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21heCA9IE1BWF9NU0dTSVpFTUFYOwogCiBzdGF0aWMgY3RsX3RhYmxlIG1xX3N5c2N0bHNbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggYmYxYmMzNi4uMDgyMTIyNCAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAJcmV0dXJuIHNlbXpjbnQ7CiB9CiAKLXZvaWQgZnJlZV91bihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCitzdGF0aWMgdm9pZCBmcmVlX3VuKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3Qgc2VtX3VuZG8gKnVuID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBzZW1fdW5kbywgcmN1KTsKIAlrZnJlZSh1bik7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggZTc3ZWM2OTguLjBhZGQzZmEgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTczNyw2ICs3MzcsMTAgQEAKIAljYXNlIFNITV9MT0NLOgogCWNhc2UgU0hNX1VOTE9DSzoKIAl7CisJCXN0cnVjdCBmaWxlICp1bmluaXRpYWxpemVkX3ZhcihzaG1fZmlsZSk7CisKKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsgIC8qIGRyYWluIHBhZ2V2ZWNzIHRvIGxydSBsaXN0cyAqLworCiAJCXNocCA9IHNobV9sb2NrX2NoZWNrKG5zLCBzaG1pZCk7CiAJCWlmIChJU19FUlIoc2hwKSkgewogCQkJZXJyID0gUFRSX0VSUihzaHApOwpkaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcuZnJlZXplciBiL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYjRjYgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIKQEAgLTAsMCArMSwyIEBACitjb25maWcgRlJFRVpFUgorCWRlZl9ib29sIFBNX1NMRUVQIHx8IENHUk9VUF9GUkVFWkVSCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGUxZDdkZi4uMDY2NTUwYSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQAogQ0ZMQUdTX1JFTU9WRV9zY2hlZC5vID0gLW1uby1zcGUgLXBnCiBlbmRpZgogCitvYmotJChDT05GSUdfRlJFRVpFUikgKz0gZnJlZXplci5vCiBvYmotJChDT05GSUdfUFJPRklMSU5HKSArPSBwcm9maWxlLm8KIG9iai0kKENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSykgKz0gc3lzY3RsX2NoZWNrLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKSArPSBzdGFja3RyYWNlLm8KQEAgLTU1LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19DT01QQVQpICs9IGNvbXBhdC5vCiBvYmotJChDT05GSUdfQ0dST1VQUykgKz0gY2dyb3VwLm8KIG9iai0kKENPTkZJR19DR1JPVVBfREVCVUcpICs9IGNncm91cF9kZWJ1Zy5vCitvYmotJChDT05GSUdfQ0dST1VQX0ZSRUVaRVIpICs9IGNncm91cF9mcmVlemVyLm8KIG9iai0kKENPTkZJR19DUFVTRVRTKSArPSBjcHVzZXQubwogb2JqLSQoQ09ORklHX0NHUk9VUF9OUykgKz0gbnNfY2dyb3VwLm8KIG9iai0kKENPTkZJR19VVFNfTlMpICs9IHV0c25hbWUubwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGEwMTIzZDcuLjA0NmMxNjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTI0MSw3ICsyNDEsNiBAQAogCXN0cnVjdCBjZ19jZ3JvdXBfbGluayAqbGluazsKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKnNhdmVkX2xpbms7CiAKLQl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOwogCWhsaXN0X2RlbCgmY2ctPmhsaXN0KTsKIAljc3Nfc2V0X2NvdW50LS07CiAKQEAgLTI1MSwxNiArMjUwLDI1IEBACiAJCWxpc3RfZGVsKCZsaW5rLT5jZ3JwX2xpbmtfbGlzdCk7CiAJCWtmcmVlKGxpbmspOwogCX0KLQotCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgX19yZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmssIGludCB0YXNrZXhpdCkKK3N0YXRpYyB2b2lkIF9fcHV0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnLCBpbnQgdGFza2V4aXQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGNzc19zZXQgKmNnID0gY29udGFpbmVyX29mKGssIHN0cnVjdCBjc3Nfc2V0LCByZWYpOwotCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgZG9lc24ndCBoaXQgemVybyB3aGlsZSBhbnkgcmVhZGVycworCSAqIGNhbiBzZWUgaXQuIFNpbWlsYXIgdG8gYXRvbWljX2RlY19hbmRfbG9jaygpLCBidXQgZm9yIGFuCisJICogcndsb2NrCisJICovCisJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZjZy0+cmVmY291bnQsIC0xLCAxKSkKKwkJcmV0dXJuOworCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjZy0+cmVmY291bnQpKSB7CisJCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKKwkJcmV0dXJuOworCX0KIAl1bmxpbmtfY3NzX3NldChjZyk7CisJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKQEAgLTI3NiwzMiArMjg0LDIyIEBACiAJa2ZyZWUoY2cpOwogfQogCi1zdGF0aWMgdm9pZCByZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmspCi17Ci0JX19yZWxlYXNlX2Nzc19zZXQoaywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VfY3NzX3NldF90YXNrZXhpdChzdHJ1Y3Qga3JlZiAqaykKLXsKLQlfX3JlbGVhc2VfY3NzX3NldChrLCAxKTsKLX0KLQogLyoKICAqIHJlZmNvdW50ZWQgZ2V0L3B1dCBmb3IgY3NzX3NldCBvYmplY3RzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3NzX3NldChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9nZXQoJmNnLT5yZWYpOworCWF0b21pY19pbmMoJmNnLT5yZWZjb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY3NzX3NldChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9wdXQoJmNnLT5yZWYsIHJlbGVhc2VfY3NzX3NldCk7CisJX19wdXRfY3NzX3NldChjZywgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY3NzX3NldF90YXNrZXhpdChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9wdXQoJmNnLT5yZWYsIHJlbGVhc2VfY3NzX3NldF90YXNrZXhpdCk7CisJX19wdXRfY3NzX3NldChjZywgMSk7CiB9CiAKIC8qCkBAIC00MjcsNyArNDI1LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Ja3JlZl9pbml0KCZyZXMtPnJlZik7CisJYXRvbWljX3NldCgmcmVzLT5yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2dfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPnRhc2tzKTsKIAlJTklUX0hMSVNUX05PREUoJnJlcy0+aGxpc3QpOwpAQCAtODcwLDYgKzg2OCwxNCBAQAogCS5yZW1vdW50X2ZzID0gY2dyb3VwX3JlbW91bnQsCiB9OwogCitzdGF0aWMgdm9pZCBpbml0X2Nncm91cF9ob3VzZWtlZXBpbmcoc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfcndzZW0oJmNncnAtPnBpZHNfbXV0ZXgpOworfQogc3RhdGljIHZvaWQgaW5pdF9jZ3JvdXBfcm9vdChzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gJnJvb3QtPnRvcF9jZ3JvdXA7CkBAIC04NzgsMTAgKzg4NCw3IEBACiAJcm9vdC0+bnVtYmVyX29mX2Nncm91cHMgPSAxOwogCWNncnAtPnJvb3QgPSByb290OwogCWNncnAtPnRvcF9jZ3JvdXAgPSBjZ3JwOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5zaWJsaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y2hpbGRyZW4pOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jc3Nfc2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPnJlbGVhc2VfbGlzdCk7CisJaW5pdF9jZ3JvdXBfaG91c2VrZWVwaW5nKGNncnApOwogfQogCiBzdGF0aWMgaW50IGNncm91cF90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCkBAIC0xNzI4LDcgKzE3MzEsNyBAQAogCiAJcmVhZF9sb2NrKCZjc3Nfc2V0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobGluaywgJmNncnAtPmNzc19zZXRzLCBjZ3JwX2xpbmtfbGlzdCkgewotCQljb3VudCArPSBhdG9taWNfcmVhZCgmbGluay0+Y2ctPnJlZi5yZWZjb3VudCk7CisJCWNvdW50ICs9IGF0b21pY19yZWFkKCZsaW5rLT5jZy0+cmVmY291bnQpOwogCX0KIAlyZWFkX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xOTk3LDE2ICsyMDAwLDcgQEAKICAqIGJ1dCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHdlIHByb2R1Y2UgaXMgY29ycmVjdAogICogdW5sZXNzIHdlIHByb2R1Y2UgaXQgZW50aXJlbHkgYXRvbWljYWxseS4KICAqCi0gKiBVcG9uIHRhc2tzIGZpbGUgb3BlbigpLCBhIHN0cnVjdCBjdHJfc3RydWN0IGlzIGFsbG9jYXRlZCwgdGhhdAotICogd2lsbCBoYXZlIGEgcG9pbnRlciB0byBhbiBhcnJheSAoYWxzbyBhbGxvY2F0ZWQgaGVyZSkuICBUaGUgc3RydWN0Ci0gKiBjdHJfc3RydWN0ICogaXMgc3RvcmVkIGluIGZpbGUtPnByaXZhdGVfZGF0YS4gIEl0cyByZXNvdXJjZXMgd2lsbAotICogYmUgZnJlZWQgYnkgcmVsZWFzZSgpIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiAgVGhlIGFycmF5IGlzIHVzZWQKLSAqIHRvIHNwcmludGYgdGhlIFBJRHMgYW5kIHRoZW4gdXNlZCBieSByZWFkKCkuCiAgKi8KLXN0cnVjdCBjdHJfc3RydWN0IHsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6OwotfTsKIAogLyoKICAqIExvYWQgaW50byAncGlkYXJyYXknIHVwIHRvICducGlkcycgb2YgdGhlIHRhc2tzIHVzaW5nIGNncm91cApAQCAtMjA4OCw0MSArMjA4MiwxMzEgQEAKIAlyZXR1cm4gKihwaWRfdCAqKWEgLSAqKHBpZF90ICopYjsKIH0KIAotLyoKLSAqIENvbnZlcnQgYXJyYXkgJ2EnIG9mICducGlkcycgcGlkX3QncyB0byBhIHN0cmluZyBvZiBuZXdsaW5lIHNlcGFyYXRlZAotICogZGVjaW1hbCBwaWRzIGluICdidWYnLiAgRG9uJ3Qgd3JpdGUgbW9yZSB0aGFuICdzeicgY2hhcnMsIGJ1dCByZXR1cm4KLSAqIGNvdW50ICdjbnQnIG9mIGhvdyBtYW55IGNoYXJzIHdvdWxkIGJlIHdyaXR0ZW4gaWYgYnVmIHdlcmUgbGFyZ2UgZW5vdWdoLgotICovCi1zdGF0aWMgaW50IHBpZF9hcnJheV90b19idWYoY2hhciAqYnVmLCBpbnQgc3osIHBpZF90ICphLCBpbnQgbnBpZHMpCi17Ci0JaW50IGNudCA9IDA7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKLQkJY250ICs9IHNucHJpbnRmKGJ1ZiArIGNudCwgbWF4KHN6IC0gY250LCAwKSwgIiVkXG4iLCBhW2ldKTsKLQlyZXR1cm4gY250OworLyoKKyAqIHNlcV9maWxlIG1ldGhvZHMgZm9yIHRoZSAidGFza3MiIGZpbGUuIFRoZSBzZXFfZmlsZSBwb3NpdGlvbiBpcyB0aGUKKyAqIG5leHQgcGlkIHRvIGRpc3BsYXk7IHRoZSBzZXFfZmlsZSBpdGVyYXRvciBpcyBhIHBvaW50ZXIgdG8gdGhlIHBpZAorICogaW4gdGhlIGNncm91cC0+dGFza3NfcGlkcyBhcnJheS4KKyAqLworCitzdGF0aWMgdm9pZCAqY2dyb3VwX3Rhc2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpCit7CisJLyoKKwkgKiBJbml0aWFsbHkgd2UgcmVjZWl2ZSBhIHBvc2l0aW9uIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8KKwkgKiBvbmUgbW9yZSB0aGFuIHRoZSBsYXN0IHBpZCBzaG93biAob3IgMCBvbiB0aGUgZmlyc3QgY2FsbCBvcgorCSAqIGFmdGVyIGEgc2VlayB0byB0aGUgc3RhcnQpLiBVc2UgYSBiaW5hcnktc2VhcmNoIHRvIGZpbmQgdGhlCisJICogbmV4dCBwaWQgdG8gZGlzcGxheSwgaWYgYW55CisJICovCisJc3RydWN0IGNncm91cCAqY2dycCA9IHMtPnByaXZhdGU7CisJaW50IGluZGV4ID0gMCwgcGlkID0gKnBvczsKKwlpbnQgKml0ZXI7CisKKwlkb3duX3JlYWQoJmNncnAtPnBpZHNfbXV0ZXgpOworCWlmIChwaWQpIHsKKwkJaW50IGVuZCA9IGNncnAtPnBpZHNfbGVuZ3RoOworCQlpbnQgaTsKKwkJd2hpbGUgKGluZGV4IDwgZW5kKSB7CisJCQlpbnQgbWlkID0gKGluZGV4ICsgZW5kKSAvIDI7CisJCQlpZiAoY2dycC0+dGFza3NfcGlkc1ttaWRdID09IHBpZCkgeworCQkJCWluZGV4ID0gbWlkOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChjZ3JwLT50YXNrc19waWRzW21pZF0gPD0gcGlkKQorCQkJCWluZGV4ID0gbWlkICsgMTsKKwkJCWVsc2UKKwkJCQllbmQgPSBtaWQ7CisJCX0KKwl9CisJLyogSWYgd2UncmUgb2ZmIHRoZSBlbmQgb2YgdGhlIGFycmF5LCB3ZSdyZSBkb25lICovCisJaWYgKGluZGV4ID49IGNncnAtPnBpZHNfbGVuZ3RoKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBVcGRhdGUgdGhlIGFic3RyYWN0IHBvc2l0aW9uIHRvIGJlIHRoZSBhY3R1YWwgcGlkIHRoYXQgd2UgZm91bmQgKi8KKwlpdGVyID0gY2dycC0+dGFza3NfcGlkcyArIGluZGV4OworCSpwb3MgPSAqaXRlcjsKKwlyZXR1cm4gaXRlcjsKIH0KIAotLyoKLSAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYSBidWZmZXIgbGlzdGluZyB0aGUKLSAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNncm91cCBiZWluZyBvcGVuZWQuCi0gKgotICogRG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY2dyb3VwIG11dGV4ZXMsIGFuZCBkb2VzIG5vdCB0YWtlIGFueS4KLSAqLwotc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCBjZ3JvdXBfdGFza3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IHMtPnByaXZhdGU7CisJdXBfcmVhZCgmY2dycC0+cGlkc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkICpjZ3JvdXBfdGFza3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCWludCAqcCA9IHY7CisJaW50ICplbmQgPSBjZ3JwLT50YXNrc19waWRzICsgY2dycC0+cGlkc19sZW5ndGg7CisKKwkvKgorCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgcGlkIGluIHRoZSBhcnJheS4gSWYgdGhpcyBnb2VzIG9mZiB0aGUKKwkgKiBlbmQsIHdlJ3JlIGRvbmUKKwkgKi8KKwlwKys7CisJaWYgKHAgPj0gZW5kKSB7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCSpwb3MgPSAqcDsKKwkJcmV0dXJuIHA7CisJfQorfQorCitzdGF0aWMgaW50IGNncm91cF90YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJWRcbiIsICooaW50ICopdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2dyb3VwX3Rhc2tzX3NlcV9vcGVyYXRpb25zID0geworCS5zdGFydCA9IGNncm91cF90YXNrc19zdGFydCwKKwkuc3RvcCA9IGNncm91cF90YXNrc19zdG9wLAorCS5uZXh0ID0gY2dyb3VwX3Rhc2tzX25leHQsCisJLnNob3cgPSBjZ3JvdXBfdGFza3Nfc2hvdywKK307CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY2dyb3VwX3BpZF9hcnJheShzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWRvd25fd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworCUJVR19PTighY2dycC0+cGlkc191c2VfY291bnQpOworCWlmICghLS1jZ3JwLT5waWRzX3VzZV9jb3VudCkgeworCQlrZnJlZShjZ3JwLT50YXNrc19waWRzKTsKKwkJY2dycC0+dGFza3NfcGlkcyA9IE5VTEw7CisJCWNncnAtPnBpZHNfbGVuZ3RoID0gMDsKKwl9CisJdXBfd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IGNncm91cF90YXNrc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBfX2RfY2dycChmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHI7Ci0JcGlkX3QgKnBpZGFycmF5OwotCWludCBucGlkczsKLQljaGFyIGM7CiAKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKIAkJcmV0dXJuIDA7CiAKLQljdHIgPSBrbWFsbG9jKHNpemVvZigqY3RyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHIpCi0JCWdvdG8gZXJyMDsKKwlyZWxlYXNlX2Nncm91cF9waWRfYXJyYXkoY2dycCk7CisJcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX3Rhc2tzX29wZXJhdGlvbnMgPSB7CisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGNncm91cF9maWxlX3dyaXRlLAorCS5yZWxlYXNlID0gY2dyb3VwX3Rhc2tzX3JlbGVhc2UsCit9OworCisvKgorICogSGFuZGxlIGFuIG9wZW4gb24gJ3Rhc2tzJyBmaWxlLiAgUHJlcGFyZSBhbiBhcnJheSBjb250YWluaW5nIHRoZQorICogcHJvY2VzcyBpZCdzIG9mIHRhc2tzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgY2dyb3VwIGJlaW5nIG9wZW5lZC4KKyAqLworCitzdGF0aWMgaW50IGNncm91cF90YXNrc19vcGVuKHN0cnVjdCBpbm9kZSAqdW51c2VkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gX19kX2NncnAoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlwaWRfdCAqcGlkYXJyYXk7CisJaW50IG5waWRzOworCWludCByZXR2YWw7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciB3cml0ZS1vbmx5IGZpbGVzICovCisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBJZiBjZ3JvdXAgZ2V0cyBtb3JlIHVzZXJzIGFmdGVyIHdlIHJlYWQgY291bnQsIHdlIHdvbid0IGhhdmUKQEAgLTIxMzEsNTcgKzIyMTUsMzEgQEAKIAkgKiBzaG93IHVwIHVudGlsIHNvbWV0aW1lIGxhdGVyIG9uLgogCSAqLwogCW5waWRzID0gY2dyb3VwX3Rhc2tfY291bnQoY2dycCk7Ci0JaWYgKG5waWRzKSB7Ci0JCXBpZGFycmF5ID0ga21hbGxvYyhucGlkcyAqIHNpemVvZihwaWRfdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIXBpZGFycmF5KQotCQkJZ290byBlcnIxOworCXBpZGFycmF5ID0ga21hbGxvYyhucGlkcyAqIHNpemVvZihwaWRfdCksIEdGUF9LRVJORUwpOworCWlmICghcGlkYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCW5waWRzID0gcGlkX2FycmF5X2xvYWQocGlkYXJyYXksIG5waWRzLCBjZ3JwKTsKKwlzb3J0KHBpZGFycmF5LCBucGlkcywgc2l6ZW9mKHBpZF90KSwgY21wcGlkLCBOVUxMKTsKIAotCQlucGlkcyA9IHBpZF9hcnJheV9sb2FkKHBpZGFycmF5LCBucGlkcywgY2dycCk7Ci0JCXNvcnQocGlkYXJyYXksIG5waWRzLCBzaXplb2YocGlkX3QpLCBjbXBwaWQsIE5VTEwpOworCS8qCisJICogU3RvcmUgdGhlIGFycmF5IGluIHRoZSBjZ3JvdXAsIGZyZWVpbmcgdGhlIG9sZAorCSAqIGFycmF5IGlmIG5lY2Vzc2FyeQorCSAqLworCWRvd25fd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworCWtmcmVlKGNncnAtPnRhc2tzX3BpZHMpOworCWNncnAtPnRhc2tzX3BpZHMgPSBwaWRhcnJheTsKKwljZ3JwLT5waWRzX2xlbmd0aCA9IG5waWRzOworCWNncnAtPnBpZHNfdXNlX2NvdW50Kys7CisJdXBfd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOwogCi0JCS8qIENhbGwgcGlkX2FycmF5X3RvX2J1ZigpIHR3aWNlLCBmaXJzdCBqdXN0IHRvIGdldCBidWZzeiAqLwotCQljdHItPmJ1ZnN6ID0gcGlkX2FycmF5X3RvX2J1ZigmYywgc2l6ZW9mKGMpLCBwaWRhcnJheSwgbnBpZHMpICsgMTsKLQkJY3RyLT5idWYgPSBrbWFsbG9jKGN0ci0+YnVmc3osIEdGUF9LRVJORUwpOwotCQlpZiAoIWN0ci0+YnVmKQotCQkJZ290byBlcnIyOwotCQljdHItPmJ1ZnN6ID0gcGlkX2FycmF5X3RvX2J1ZihjdHItPmJ1ZiwgY3RyLT5idWZzeiwgcGlkYXJyYXksIG5waWRzKTsKKwlmaWxlLT5mX29wID0gJmNncm91cF90YXNrc19vcGVyYXRpb25zOwogCi0JCWtmcmVlKHBpZGFycmF5KTsKLQl9IGVsc2UgewotCQljdHItPmJ1ZiA9IE5VTEw7Ci0JCWN0ci0+YnVmc3ogPSAwOworCXJldHZhbCA9IHNlcV9vcGVuKGZpbGUsICZjZ3JvdXBfdGFza3Nfc2VxX29wZXJhdGlvbnMpOworCWlmIChyZXR2YWwpIHsKKwkJcmVsZWFzZV9jZ3JvdXBfcGlkX2FycmF5KGNncnApOworCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBjdHI7Ci0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0Ja2ZyZWUocGlkYXJyYXkpOwotZXJyMToKLQlrZnJlZShjdHIpOwotZXJyMDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHNzaXplX3QgY2dyb3VwX3Rhc2tzX3JlYWQoc3RydWN0IGNncm91cCAqY2dycCwKLQkJCQkgICAgc3RydWN0IGNmdHlwZSAqY2Z0LAotCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGN0ci0+YnVmLCBjdHItPmJ1ZnN6KTsKLX0KLQotc3RhdGljIGludCBjZ3JvdXBfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZF9pbm9kZSwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWN0ciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJa2ZyZWUoY3RyLT5idWYpOwotCQlrZnJlZShjdHIpOwotCX0KKwkoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGUgPSBjZ3JwOwogCXJldHVybiAwOwogfQogCkBAIC0yMjEwLDcgKzIyNjgsNiBAQAogCXsKIAkJLm5hbWUgPSAidGFza3MiLAogCQkub3BlbiA9IGNncm91cF90YXNrc19vcGVuLAotCQkucmVhZCA9IGNncm91cF90YXNrc19yZWFkLAogCQkud3JpdGVfdTY0ID0gY2dyb3VwX3Rhc2tzX3dyaXRlLAogCQkucmVsZWFzZSA9IGNncm91cF90YXNrc19yZWxlYXNlLAogCQkucHJpdmF0ZSA9IEZJTEVfVEFTS0xJU1QsCkBAIC0yMzAwLDEwICsyMzU3LDcgQEAKIAogCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CiAKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfY2dyb3VwX2hvdXNla2VlcGluZyhjZ3JwKTsKIAogCWNncnAtPnBhcmVudCA9IHBhcmVudDsKIAljZ3JwLT5yb290ID0gcGFyZW50LT5yb290OwpAQCAtMjQ5NSw4ICsyNTQ5LDcgQEAKIGludCBfX2luaXQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkKIHsKIAlpbnQgaTsKLQlrcmVmX2luaXQoJmluaXRfY3NzX3NldC5yZWYpOwotCWtyZWZfZ2V0KCZpbml0X2Nzc19zZXQucmVmKTsKKwlhdG9taWNfc2V0KCZpbml0X2Nzc19zZXQucmVmY291bnQsIDEpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQuY2dfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQudGFza3MpOwogCUlOSVRfSExJU1RfTk9ERSgmaW5pdF9jc3Nfc2V0LmhsaXN0KTsKQEAgLTI3MzUsNiArMjc4OCw4IEBACiAgKiBDYWxsZWQgb24gZXZlcnkgY2hhbmdlIHRvIG1tLT5vd25lci4gbW1faW5pdF9vd25lcigpIGRvZXMgbm90CiAgKiBpbnZva2UgdGhpcyByb3V0aW5lLCBzaW5jZSBpdCBhc3NpZ25zIHRoZSBtbS0+b3duZXIgdGhlIGZpcnN0IHRpbWUKICAqIGFuZCBkb2VzIG5vdCBjaGFuZ2UgaXQuCisgKgorICogVGhlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIG1tYXBfc2VtIGhlbGQgaW4gcmVhZCBtb2RlLgogICovCiB2b2lkIGNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KQogewpAQCAtMjc1MCw3ICsyODA1LDcgQEAKIAkJCWlmIChvbGRjZ3JwID09IG5ld2NncnApCiAJCQkJY29udGludWU7CiAJCQlpZiAoc3MtPm1tX293bmVyX2NoYW5nZWQpCi0JCQkJc3MtPm1tX293bmVyX2NoYW5nZWQoc3MsIG9sZGNncnAsIG5ld2NncnApOworCQkJCXNzLT5tbV9vd25lcl9jaGFuZ2VkKHNzLCBvbGRjZ3JwLCBuZXdjZ3JwLCBuZXcpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCmluZGV4IGMzZGMzYWIuLmRhY2E2MjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXBfZGVidWcuYworKysgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAl1NjQgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY291bnQgPSBhdG9taWNfcmVhZCgmY3VycmVudC0+Y2dyb3Vwcy0+cmVmLnJlZmNvdW50KTsKKwljb3VudCA9IGF0b21pY19yZWFkKCZjdXJyZW50LT5jZ3JvdXBzLT5yZWZjb3VudCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtOTAsNyArOTAsNyBAQAogCXsKIAkJLm5hbWUgPSAicmVsZWFzYWJsZSIsCiAJCS5yZWFkX3U2NCA9IHJlbGVhc2FibGVfcmVhZCwKLQl9CisJfSwKIH07CiAKIHN0YXRpYyBpbnQgZGVidWdfcG9wdWxhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9mcmVlemVyLmMgYi9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTUwNTY5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2Nncm91cF9mcmVlemVyLmMKQEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBjZ3JvdXBfZnJlZXplci5jIC0gIGNvbnRyb2wgZ3JvdXAgZnJlZXplciBzdWJzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA3CisgKgorICogQXV0aG9yIDogQ2VkcmljIExlIEdvYXRlciA8Y2xnQGZyLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworZW51bSBmcmVlemVyX3N0YXRlIHsKKwlDR1JPVVBfVEhBV0VEID0gMCwKKwlDR1JPVVBfRlJFRVpJTkcsCisJQ0dST1VQX0ZST1pFTiwKK307CisKK3N0cnVjdCBmcmVlemVyIHsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CisJZW51bSBmcmVlemVyX3N0YXRlIHN0YXRlOworCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVjdHMgX3dyaXRlc18gdG8gc3RhdGUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyZWV6ZXIgKmNncm91cF9mcmVlemVyKAorCQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigKKwkJY2dyb3VwX3N1YnN5c19zdGF0ZShjZ3JvdXAsIGZyZWV6ZXJfc3Vic3lzX2lkKSwKKwkJc3RydWN0IGZyZWV6ZXIsIGNzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyZWV6ZXIgKnRhc2tfZnJlZXplcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0YXNrLCBmcmVlemVyX3N1YnN5c19pZCksCisJCQkgICAgc3RydWN0IGZyZWV6ZXIsIGNzcyk7Cit9CisKK2ludCBjZ3JvdXBfZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCXRhc2tfdW5sb2NrKHRhc2spOworCisJcmV0dXJuIHN0YXRlID09IENHUk9VUF9GUk9aRU47Cit9CisKKy8qCisgKiBjZ3JvdXBzX3dyaXRlX3N0cmluZygpIGxpbWl0cyB0aGUgc2l6ZSBvZiBmcmVlemVyIHN0YXRlIHN0cmluZ3MgdG8KKyAqIENHUk9VUF9MT0NBTF9CVUZGRVJfU0laRQorICovCitzdGF0aWMgY29uc3QgY2hhciAqZnJlZXplcl9zdGF0ZV9zdHJzW10gPSB7CisJIlRIQVdFRCIsCisJIkZSRUVaSU5HIiwKKwkiRlJPWkVOIiwKK307CisKKy8qCisgKiBTdGF0ZSBkaWFncmFtCisgKiBUcmFuc2l0aW9ucyBhcmUgY2F1c2VkIGJ5IHVzZXJzcGFjZSB3cml0ZXMgdG8gdGhlIGZyZWV6ZXIuc3RhdGUgZmlsZS4KKyAqIFRoZSB2YWx1ZXMgaW4gcGFyZW50aGVzaXMgYXJlIHN0YXRlIGxhYmVscy4gVGhlIHJlc3QgYXJlIGVkZ2UgbGFiZWxzLgorICoKKyAqIChUSEFXRUQpIC0tRlJPWkVOLS0+IChGUkVFWklORykgLS1GUk9aRU4tLT4gKEZST1pFTikKKyAqICAgIF4gXiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIHwgXF9fX19fX19USEFXRURfX19fX19fLyAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIFxfX19fX19fX19fX19fX19fX19fX19fX19fX1RIQVdFRF9fX19fX19fX19fXy8KKyAqLworCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBmcmVlemVyX3N1YnN5czsKKworLyogTG9ja3MgdGFrZW4gYW5kIHRoZWlyIG9yZGVyaW5nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGNzc19zZXRfbG9jaworICogY2dyb3VwX211dGV4IChBS0EgY2dyb3VwX2xvY2spCisgKiB0YXNrLT5hbGxvY19sb2NrIChBS0EgdGFza19sb2NrKQorICogZnJlZXplci0+bG9jaworICogdGFzay0+c2lnaGFuZC0+c2lnbG9jaworICoKKyAqIGNncm91cCBjb2RlIGZvcmNlcyBjc3Nfc2V0X2xvY2sgdG8gYmUgdGFrZW4gYmVmb3JlIHRhc2stPmFsbG9jX2xvY2sKKyAqCisgKiBmcmVlemVyX2NyZWF0ZSgpLCBmcmVlemVyX2Rlc3Ryb3koKToKKyAqIGNncm91cF9tdXRleCBbIGJ5IGNncm91cCBjb3JlIF0KKyAqCisgKiBjYW5fYXR0YWNoKCk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqCisgKiBjZ3JvdXBfZnJvemVuKCk6CisgKiB0YXNrLT5hbGxvY19sb2NrICh0byBnZXQgdGFzaydzIGNncm91cCkKKyAqCisgKiBmcmVlemVyX2ZvcmsoKSAocHJlc2VydmluZyBmb3JrKCkgcGVyZm9ybWFuY2UgbWVhbnMgY2FuJ3QgdGFrZSBjZ3JvdXBfbXV0ZXgpOgorICogdGFzay0+YWxsb2NfbG9jayAodG8gZ2V0IHRhc2sncyBjZ3JvdXApCisgKiBmcmVlemVyLT5sb2NrCisgKiAgc2lnaGFuZC0+c2lnbG9jayAoaWYgdGhlIGNncm91cCBpcyBmcmVlemluZykKKyAqCisgKiBmcmVlemVyX3JlYWQoKToKKyAqIGNncm91cF9tdXRleAorICogIGZyZWV6ZXItPmxvY2sKKyAqICAgcmVhZF9sb2NrIGNzc19zZXRfbG9jayAoY2dyb3VwIGl0ZXJhdG9yIHN0YXJ0KQorICoKKyAqIGZyZWV6ZXJfd3JpdGUoKSAoZnJlZXplKToKKyAqIGNncm91cF9tdXRleAorICogIGZyZWV6ZXItPmxvY2sKKyAqICAgcmVhZF9sb2NrIGNzc19zZXRfbG9jayAoY2dyb3VwIGl0ZXJhdG9yIHN0YXJ0KQorICogICAgc2lnaGFuZC0+c2lnbG9jaworICoKKyAqIGZyZWV6ZXJfd3JpdGUoKSAodW5mcmVlemUpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKiAgICB0YXNrLT5hbGxvY19sb2NrICh0byBwcmV2ZW50IHJhY2VzIHdpdGggZnJlZXplX3Rhc2soKSkKKyAqICAgICBzaWdoYW5kLT5zaWdsb2NrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZnJlZXplcl9jcmVhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisKKwlmcmVlemVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyZWV6ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWV6ZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3Bpbl9sb2NrX2luaXQoJmZyZWV6ZXItPmxvY2spOworCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwlyZXR1cm4gJmZyZWV6ZXItPmNzczsKK30KKworc3RhdGljIHZvaWQgZnJlZXplcl9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJa2ZyZWUoY2dyb3VwX2ZyZWV6ZXIoY2dyb3VwKSk7Cit9CisKKy8qIFRhc2sgaXMgZnJvemVuIG9yIHdpbGwgZnJlZXplIGltbWVkaWF0ZWx5IHdoZW4gbmV4dCBpdCBnZXRzIHdva2VuICovCitzdGF0aWMgYm9vbCBpc190YXNrX2Zyb3plbl9lbm91Z2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiBmcm96ZW4odGFzaykgfHwKKwkJKHRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQodGFzaykgJiYgZnJlZXppbmcodGFzaykpOworfQorCisvKgorICogVGhlIGNhbGwgdG8gY2dyb3VwX2xvY2soKSBpbiB0aGUgZnJlZXplci5zdGF0ZSB3cml0ZSBtZXRob2QgcHJldmVudHMKKyAqIGEgd3JpdGUgdG8gdGhhdCBmaWxlIHJhY2luZyBhZ2FpbnN0IGFuIGF0dGFjaCwgYW5kIGhlbmNlIHRoZQorICogY2FuX2F0dGFjaCgpIHJlc3VsdCB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgYXR0YWNoIGNvbXBsZXRlcy4KKyAqLworc3RhdGljIGludCBmcmVlemVyX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgICAgc3RydWN0IGNncm91cCAqbmV3X2Nncm91cCwKKwkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwlpbnQgcmV0dmFsOworCisJLyogQW55dGhpbmcgZnJvemVuIGNhbid0IG1vdmUgb3IgYmUgbW92ZWQgdG8vZnJvbSAqLworCisJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZyZWV6ZXIgPSBjZ3JvdXBfZnJlZXplcihuZXdfY2dyb3VwKTsKKwlpZiAoZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZST1pFTikKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHZhbCA9IDA7CisJdGFza19sb2NrKHRhc2spOworCWZyZWV6ZXIgPSB0YXNrX2ZyZWV6ZXIodGFzayk7CisJaWYgKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUk9aRU4pCisJCXJldHZhbCA9IC1FQlVTWTsKKwl0YXNrX3VubG9jayh0YXNrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBmcmVlemVyX2Zvcmsoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwl0YXNrX3VubG9jayh0YXNrKTsKKworCUJVR19PTihmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKTsKKwlzcGluX2xvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwkvKiBMb2NraW5nIGF2b2lkcyByYWNlIHdpdGggRlJFRVpJTkcgLT4gVEhBV0VEIHRyYW5zaXRpb25zLiAqLworCWlmIChmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJFRVpJTkcpCisJCWZyZWV6ZV90YXNrKHRhc2ssIHRydWUpOworCXNwaW5fdW5sb2NrX2lycSgmZnJlZXplci0+bG9jayk7Cit9CisKKy8qCisgKiBjYWxsZXIgbXVzdCBob2xkIGZyZWV6ZXItPmxvY2sKKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJCSBzdHJ1Y3QgZnJlZXplciAqZnJlZXplcikKK3sKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXVuc2lnbmVkIGludCBuZnJvemVuID0gMCwgbnRvdGFsID0gMDsKKworCWNncm91cF9pdGVyX3N0YXJ0KGNncm91cCwgJml0KTsKKwl3aGlsZSAoKHRhc2sgPSBjZ3JvdXBfaXRlcl9uZXh0KGNncm91cCwgJml0KSkpIHsKKwkJbnRvdGFsKys7CisJCWlmIChpc190YXNrX2Zyb3plbl9lbm91Z2godGFzaykpCisJCQluZnJvemVuKys7CisJfQorCisJLyoKKwkgKiBUcmFuc2l0aW9uIHRvIEZST1pFTiB3aGVuIG5vIG5ldyB0YXNrcyBjYW4gYmUgYWRkZWQgZW5zdXJlcworCSAqIHRoYXQgd2UgbmV2ZXIgZXhpc3QgaW4gdGhlIEZST1pFTiBzdGF0ZSB3aGlsZSB0aGVyZSBhcmUgdW5mcm96ZW4KKwkgKiB0YXNrcy4KKwkgKi8KKwlpZiAobmZyb3plbiA9PSBudG90YWwpCisJCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX0ZST1pFTjsKKwllbHNlIGlmIChuZnJvemVuID4gMCkKKwkJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJFRVpJTkc7CisJZWxzZQorCQlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9USEFXRUQ7CisJY2dyb3VwX2l0ZXJfZW5kKGNncm91cCwgJml0KTsKK30KKworc3RhdGljIGludCBmcmVlemVyX3JlYWQoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisJZW51bSBmcmVlemVyX3N0YXRlIHN0YXRlOworCisJaWYgKCFjZ3JvdXBfbG9ja19saXZlX2dyb3VwKGNncm91cCkpCisJCXJldHVybiAtRU5PREVWOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKGNncm91cCk7CisJc3Bpbl9sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJc3RhdGUgPSBmcmVlemVyLT5zdGF0ZTsKKwlpZiAoc3RhdGUgPT0gQ0dST1VQX0ZSRUVaSU5HKSB7CisJCS8qIFdlIGNoYW5nZSBmcm9tIEZSRUVaSU5HIHRvIEZST1pFTiBsYXppbHkgaWYgdGhlIGNncm91cCB3YXMKKwkJICogb25seSBwYXJ0aWFsbHkgZnJvemVuIHdoZW4gd2UgZXhpdHRlZCB3cml0ZS4gKi8KKwkJdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoY2dyb3VwLCBmcmVlemVyKTsKKwkJc3RhdGUgPSBmcmVlemVyLT5zdGF0ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwljZ3JvdXBfdW5sb2NrKCk7CisKKwlzZXFfcHV0cyhtLCBmcmVlemVyX3N0YXRlX3N0cnNbc3RhdGVdKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfdG9fZnJlZXplX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgaW50IG51bV9jYW50X2ZyZWV6ZV9ub3cgPSAwOworCisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJFRVpJTkc7CisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQlpZiAoIWZyZWV6ZV90YXNrKHRhc2ssIHRydWUpKQorCQkJY29udGludWU7CisJCWlmIChpc190YXNrX2Zyb3plbl9lbm91Z2godGFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKCFmcmVlemluZyh0YXNrKSAmJiAhZnJlZXplcl9zaG91bGRfc2tpcCh0YXNrKSkKKwkJCW51bV9jYW50X2ZyZWV6ZV9ub3crKzsKKwl9CisJY2dyb3VwX2l0ZXJfZW5kKGNncm91cCwgJml0KTsKKworCXJldHVybiBudW1fY2FudF9mcmVlemVfbm93ID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB1bmZyZWV6ZV9jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgZnJlZXplciAqZnJlZXplcikKK3sKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQlpbnQgZG9fd2FrZTsKKworCQl0YXNrX2xvY2sodGFzayk7CisJCWRvX3dha2UgPSBfX3RoYXdfcHJvY2Vzcyh0YXNrKTsKKwkJdGFza191bmxvY2sodGFzayk7CisJCWlmIChkb193YWtlKQorCQkJd2FrZV91cF9wcm9jZXNzKHRhc2spOworCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfY2hhbmdlX3N0YXRlKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCQllbnVtIGZyZWV6ZXJfc3RhdGUgZ29hbF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZyZWV6ZXIgPSBjZ3JvdXBfZnJlZXplcihjZ3JvdXApOworCXNwaW5fbG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCXVwZGF0ZV9mcmVlemVyX3N0YXRlKGNncm91cCwgZnJlZXplcik7CisJaWYgKGdvYWxfc3RhdGUgPT0gZnJlZXplci0+c3RhdGUpCisJCWdvdG8gb3V0OworCXN3aXRjaCAoZnJlZXplci0+c3RhdGUpIHsKKwljYXNlIENHUk9VUF9USEFXRUQ6CisJCXJldHZhbCA9IHRyeV90b19mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCWJyZWFrOworCWNhc2UgQ0dST1VQX0ZSRUVaSU5HOgorCQlpZiAoZ29hbF9zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKSB7CisJCQkvKiBVc2Vyc3BhY2UgaXMgcmV0cnlpbmcgYWZ0ZXIKKwkJCSAqICIvYmluL2VjaG8gRlJPWkVOID4gZnJlZXplci5zdGF0ZSIgcmV0dXJuZWQgLUVCVVNZICovCisJCQlyZXR2YWwgPSB0cnlfdG9fZnJlZXplX2Nncm91cChjZ3JvdXAsIGZyZWV6ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogc3RhdGUgPT0gRlJFRVpJTkcgYW5kIGdvYWxfc3RhdGUgPT0gVEhBV0VELCBzbyB1bmZyZWV6ZSAqLworCWNhc2UgQ0dST1VQX0ZST1pFTjoKKwkJcmV0dmFsID0gdW5mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK291dDoKKwlzcGluX3VubG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBmcmVlemVyX3dyaXRlKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCSBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkgY29uc3QgY2hhciAqYnVmZmVyKQoreworCWludCByZXR2YWw7CisJZW51bSBmcmVlemVyX3N0YXRlIGdvYWxfc3RhdGU7CisKKwlpZiAoc3RyY21wKGJ1ZmZlciwgZnJlZXplcl9zdGF0ZV9zdHJzW0NHUk9VUF9USEFXRURdKSA9PSAwKQorCQlnb2FsX3N0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwllbHNlIGlmIChzdHJjbXAoYnVmZmVyLCBmcmVlemVyX3N0YXRlX3N0cnNbQ0dST1VQX0ZST1pFTl0pID09IDApCisJCWdvYWxfc3RhdGUgPSBDR1JPVVBfRlJPWkVOOworCWVsc2UKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dyb3VwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dmFsID0gZnJlZXplcl9jaGFuZ2Vfc3RhdGUoY2dyb3VwLCBnb2FsX3N0YXRlKTsKKwljZ3JvdXBfdW5sb2NrKCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBjZnR5cGUgZmlsZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gInN0YXRlIiwKKwkJLnJlYWRfc2VxX3N0cmluZyA9IGZyZWV6ZXJfcmVhZCwKKwkJLndyaXRlX3N0cmluZyA9IGZyZWV6ZXJfd3JpdGUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgZnJlZXplcl9wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlyZXR1cm4gY2dyb3VwX2FkZF9maWxlcyhjZ3JvdXAsIHNzLCBmaWxlcywgQVJSQVlfU0laRShmaWxlcykpOworfQorCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBmcmVlemVyX3N1YnN5cyA9IHsKKwkubmFtZQkJPSAiZnJlZXplciIsCisJLmNyZWF0ZQkJPSBmcmVlemVyX2NyZWF0ZSwKKwkuZGVzdHJveQk9IGZyZWV6ZXJfZGVzdHJveSwKKwkucG9wdWxhdGUJPSBmcmVlemVyX3BvcHVsYXRlLAorCS5zdWJzeXNfaWQJPSBmcmVlemVyX3N1YnN5c19pZCwKKwkuY2FuX2F0dGFjaAk9IGZyZWV6ZXJfY2FuX2F0dGFjaCwKKwkuYXR0YWNoCQk9IE5VTEwsCisJLmZvcmsJCT0gZnJlZXplcl9mb3JrLAorCS5leGl0CQk9IE5VTEwsCit9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbXBhdC5jIGIva2VybmVsL2NvbXBhdC5jCmluZGV4IDMyYzI1NGEuLjhlYWZlM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb21wYXQuYworKysgYi9rZXJuZWwvY29tcGF0LmMKQEAgLTIzLDkgKzIzLDY4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKy8qCisgKiBOb3RlIHRoYXQgdGhlIG5hdGl2ZSBzaWRlIGlzIGFscmVhZHkgY29udmVydGVkIHRvIGEgdGltZXNwZWMsIGJlY2F1c2UKKyAqIHRoYXQncyB3aGF0IHdlIHdhbnQgYW55d2F5LgorICovCitzdGF0aWMgaW50IGNvbXBhdF9nZXRfdGltZXZhbChzdHJ1Y3QgdGltZXNwZWMgKm8sCisJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCit7CisJbG9uZyB1c2VjOworCisJaWYgKGdldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfHwKKwkgICAgZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X3B1dF90aW1ldmFsKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sCisJCXN0cnVjdCB0aW1ldmFsICppKQoreworCXJldHVybiAocHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8fAorCQlwdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpID8gLUVGQVVMVCA6IDA7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCit7CisJaWYgKHR2KSB7CisJCXN0cnVjdCB0aW1ldmFsIGt0djsKKwkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOworCQlpZiAoY29tcGF0X3B1dF90aW1ldmFsKHR2LCAma3R2KSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAodHopIHsKKwkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCit7CisJc3RydWN0IHRpbWVzcGVjIGt0czsKKwlzdHJ1Y3QgdGltZXpvbmUga3R6OworCisJaWYgKHR2KSB7CisJCWlmIChjb21wYXRfZ2V0X3RpbWV2YWwoJmt0cywgdHYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICh0eikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOworfQorCiBpbnQgZ2V0X2NvbXBhdF90aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCBjb25zdCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqY3RzKQogewogCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgY3RzLCBzaXplb2YoKmN0cykpIHx8CkBAIC0xNTAsNDkgKzIwOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29tcGF0X2Nsb2NrX3QgY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdChjbG9ja190IHgpCit7CisJcmV0dXJuIGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY2xvY2tfdF90b19qaWZmaWVzKHgpKTsKK30KKwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfdGltZXMoc3RydWN0IGNvbXBhdF90bXMgX191c2VyICp0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgeworCQlzdHJ1Y3QgdG1zIHRtczsKIAkJc3RydWN0IGNvbXBhdF90bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSBoYXZlIHRhc2tsaXN0X2xvY2sgcmVhZC1sb2NrZWQsIG5vIGR5aW5nIHRocmVhZAotCQkgKiBjYW4gYmUgdXBkYXRpbmcgY3VycmVudC0+c2lnbmFsLT5bdXNddGltZS4gIEluc3RlYWQsCi0JCSAqIHdlIGdvdCB0aGVpciBjb3VudHMgaW5jbHVkZWQgaW4gdGhlIGxpdmUgdGhyZWFkIGxvb3AuCi0JCSAqIEhvd2V2ZXIsIGFub3RoZXIgdGhyZWFkIGNhbiBjb21lIGluIHJpZ2h0IG5vdyBhbmQKLQkJICogZG8gYSB3YWl0IGNhbGwgdGhhdCB1cGRhdGVzIGN1cnJlbnQtPnNpZ25hbC0+Y1t1c110aW1lLgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGF0IHBhaXIgdXBkYXRlZCBhdG9taWNhbGx5LAotCQkgKiB3ZSB0YWtlIHRoZSBzaWdsb2NrIGFyb3VuZCBmZXRjaGluZyB0aGVtLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKHV0aW1lKSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhzdGltZSkpOwotCQl0bXAudG1zX2N1dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGN1dGltZSkpOwotCQl0bXAudG1zX2NzdGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGNzdGltZSkpOworCQlkb19zeXNfdGltZXMoJnRtcyk7CisJCS8qIENvbnZlcnQgb3VyIHN0cnVjdCB0bXMgdG8gdGhlIGNvbXBhdCB2ZXJzaW9uLiAqLworCQl0bXAudG1zX3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX3V0aW1lKTsKKwkJdG1wLnRtc19zdGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19zdGltZSk7CisJCXRtcC50bXNfY3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2N1dGltZSk7CisJCXRtcC50bXNfY3N0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2NzdGltZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbmZpZ3MuYyBiL2tlcm5lbC9jb25maWdzLmMKaW5kZXggNGMzNDUyMS4uYWJhZWU2OCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbmZpZ3MuYworKysgYi9rZXJuZWwvY29uZmlncy5jCkBAIC01NCw5ICs1NCw2IEBACiAKICNpZmRlZiBDT05GSUdfSUtDT05GSUdfUFJPQwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBnbG9iYWxzIGFuZCB1c2VmdWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICovCi0KIHN0YXRpYyBzc2l6ZV90CiBpa2NvbmZpZ19yZWFkX2N1cnJlbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZnNldCkKQEAgLTcxLDkgKzY4LDYgQEAKIAkucmVhZCA9IGlrY29uZmlnX3JlYWRfY3VycmVudCwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19pbml0OiBzdGFydCB1cCBldmVyeXRoaW5nIHdlIG5lZWQgdG8gKi8KLQogc3RhdGljIGludCBfX2luaXQgaWtjb25maWdfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CkBAIC04OSw5ICs4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19jbGVhbnVwOiBjbGVhbiB1cCBvdXIgbWVzcyAgICAgICAgICAgKi8KLQogc3RhdGljIHZvaWQgX19leGl0IGlrY29uZmlnX2NsZWFudXAodm9pZCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiY29uZmlnLmd6IiwgTlVMTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZWFiN2JkNjYuLjNlMDA1MjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTExNzIsNyArMTE3Miw3IEBACiB7CiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCWludCBlcnI7Ci0JaW50IGNwdXNfbm9uZW1wdHksIGJhbGFuY2VfZmxhZ19jaGFuZ2VkOworCWludCBiYWxhbmNlX2ZsYWdfY2hhbmdlZDsKIAogCXRyaWFsY3MgPSAqY3M7CiAJaWYgKHR1cm5pbmdfb24pCkBAIC0xMTg0LDcgKzExODQsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY3B1c19ub25lbXB0eSA9ICFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKTsKIAliYWxhbmNlX2ZsYWdfY2hhbmdlZCA9IChpc19zY2hlZF9sb2FkX2JhbGFuY2UoY3MpICE9CiAJCSAJCQlpc19zY2hlZF9sb2FkX2JhbGFuY2UoJnRyaWFsY3MpKTsKIApAQCAtMTE5Miw3ICsxMTkxLDcgQEAKIAljcy0+ZmxhZ3MgPSB0cmlhbGNzLmZsYWdzOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCi0JaWYgKGNwdXNfbm9uZW1wdHkgJiYgYmFsYW5jZV9mbGFnX2NoYW5nZWQpCisJaWYgKCFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKSAmJiBiYWxhbmNlX2ZsYWdfY2hhbmdlZCkKIAkJYXN5bmNfcmVidWlsZF9zY2hlZF9kb21haW5zKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0MzcsMTkgKzI0MzYsMTUgQEAKIHZvaWQgY3B1c2V0X3Rhc2tfc3RhdHVzX2FsbG93ZWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFzayhtLCAmdGFzay0+Y3B1c19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogCXNlcV9wcmludGYobSwgIkNwdXNfYWxsb3dlZF9saXN0Olx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFza19saXN0KG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gbm9kZW1hc2tfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCi0JCQkJCXRhc2stPm1lbXNfYWxsb3dlZCk7CisJc2VxX25vZGVtYXNrKG0sICZ0YXNrLT5tZW1zX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkX2xpc3Q6XHQiKTsKLQltLT5jb3VudCArPSBub2RlbGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKKwlzZXFfbm9kZW1hc2tfbGlzdChtLCAmdGFzay0+bWVtc19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS5jIGIva2VybmVsL2RtYS5jCmluZGV4IGQyYzYwYTguLmY5MDMxODkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEuYworKysgYi9rZXJuZWwvZG1hLmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IGRtYS5jLHYgMS43IDE5OTQvMTIvMjggMDM6MzU6MzMgcm9vdCBFeHAgcm9vdCAkCisvKgogICogbGludXgva2VybmVsL2RtYS5jOiBBIERNQSBjaGFubmVsIGFsbG9jYXRvci4gSW5zcGlyZWQgYnkgbGludXgva2VybmVsL2lycS5jLgogICoKICAqIFdyaXR0ZW4gYnkgSGVubnVzIEJlcmdtYW4sIDE5OTIuCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA4NWE4M2M4Li4wNTliMzhjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTExMiw4ICsxMTIsNiBAQAogCQkgKiBXZSB3b24ndCBldmVyIGdldCBoZXJlIGZvciB0aGUgZ3JvdXAgbGVhZGVyLCBzaW5jZSBpdAogCQkgKiB3aWxsIGhhdmUgYmVlbiB0aGUgbGFzdCByZWZlcmVuY2Ugb24gdGhlIHNpZ25hbF9zdHJ1Y3QuCiAJCSAqLwotCQlzaWctPnV0aW1lID0gY3B1dGltZV9hZGQoc2lnLT51dGltZSwgdGFza191dGltZSh0c2spKTsKLQkJc2lnLT5zdGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsIHRhc2tfc3RpbWUodHNrKSk7CiAJCXNpZy0+Z3RpbWUgPSBjcHV0aW1lX2FkZChzaWctPmd0aW1lLCB0YXNrX2d0aW1lKHRzaykpOwogCQlzaWctPm1pbl9mbHQgKz0gdHNrLT5taW5fZmx0OwogCQlzaWctPm1hal9mbHQgKz0gdHNrLT5tYWpfZmx0OwpAQCAtMTIyLDcgKzEyMCw2IEBACiAJCXNpZy0+aW5ibG9jayArPSB0YXNrX2lvX2dldF9pbmJsb2NrKHRzayk7CiAJCXNpZy0+b3VibG9jayArPSB0YXNrX2lvX2dldF9vdWJsb2NrKHRzayk7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnNpZy0+aW9hYywgJnRzay0+aW9hYyk7Ci0JCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgKz0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCQlzaWcgPSBOVUxMOyAvKiBNYXJrZXIgZm9yIGJlbG93LiAqLwogCX0KIApAQCAtNjQwLDI0ICs2MzcsMjMgQEAKIGFzc2lnbl9uZXdfb3duZXI6CiAJQlVHX09OKGMgPT0gcCk7CiAJZ2V0X3Rhc2tfc3RydWN0KGMpOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCS8qCiAJICogVGhlIHRhc2tfbG9jayBwcm90ZWN0cyBjLT5tbSBmcm9tIGNoYW5naW5nLgogCSAqIFdlIGFsd2F5cyB3YW50IG1tLT5vd25lci0+bW0gPT0gbW0KIAkgKi8KIAl0YXNrX2xvY2soYyk7Ci0JLyoKLQkgKiBEZWxheSByZWFkX3VubG9jaygpIHRpbGwgd2UgaGF2ZSB0aGUgdGFza19sb2NrKCkKLQkgKiB0byBlbnN1cmUgdGhhdCBjIGRvZXMgbm90IHNsaXAgYXdheSB1bmRlcm5lYXRoIHVzCi0JICovCi0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmIChjLT5tbSAhPSBtbSkgewogCQl0YXNrX3VubG9jayhjKTsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJCXB1dF90YXNrX3N0cnVjdChjKTsKIAkJZ290byByZXRyeTsKIAl9CiAJY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhtbS0+b3duZXIsIGMpOwogCW1tLT5vd25lciA9IGM7CiAJdGFza191bmxvY2soYyk7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcHV0X3Rhc2tfc3RydWN0KGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwpAQCAtMTMwMiw2ICsxMjk4LDcgQEAKIAlpZiAobGlrZWx5KCF0cmFjZWQpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAkJLyoKIAkJICogVGhlIHJlc291cmNlIGNvdW50ZXJzIGZvciB0aGUgZ3JvdXAgbGVhZGVyIGFyZSBpbiBpdHMKQEAgLTEzMTcsMjAgKzEzMTQsMjMgQEAKIAkJICogbmVlZCB0byBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gcC0+cGFyZW50LT5zaWduYWwgZmllbGRzLAogCQkgKiBhcyBvdGhlciB0aHJlYWRzIGluIHRoZSBwYXJlbnQgZ3JvdXAgY2FuIGJlIHJpZ2h0CiAJCSAqIGhlcmUgcmVhcGluZyBvdGhlciBjaGlsZHJlbiBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKgorCQkgKiBXZSB1c2UgdGhyZWFkX2dyb3VwX2NwdXRpbWUoKSB0byBnZXQgdGltZXMgZm9yIHRoZSB0aHJlYWQKKwkJICogZ3JvdXAsIHdoaWNoIGNvbnNvbGlkYXRlcyB0aW1lcyBmb3IgYWxsIHRocmVhZHMgaW4gdGhlCisJCSAqIGdyb3VwIGluY2x1ZGluZyB0aGUgZ3JvdXAgbGVhZGVyLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcC0+cGFyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJcHNpZyA9IHAtPnBhcmVudC0+c2lnbmFsOwogCQlzaWcgPSBwLT5zaWduYWw7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKIAkJcHNpZy0+Y3V0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmN1dGltZSwKLQkJCWNwdXRpbWVfYWRkKHAtPnV0aW1lLAotCQkJY3B1dGltZV9hZGQoc2lnLT51dGltZSwKLQkJCQkgICAgc2lnLT5jdXRpbWUpKSk7CisJCQljcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLAorCQkJCSAgICBzaWctPmN1dGltZSkpOwogCQlwc2lnLT5jc3RpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y3N0aW1lLAotCQkJY3B1dGltZV9hZGQocC0+c3RpbWUsCi0JCQljcHV0aW1lX2FkZChzaWctPnN0aW1lLAotCQkJCSAgICBzaWctPmNzdGltZSkpKTsKKwkJCWNwdXRpbWVfYWRkKGNwdXRpbWUuc3RpbWUsCisJCQkJICAgIHNpZy0+Y3N0aW1lKSk7CiAJCXBzaWctPmNndGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jZ3RpbWUsCiAJCQljcHV0aW1lX2FkZChwLT5ndGltZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDMwZGU2NDQuLjQ0ZTY0ZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNzU5LDE1ICs3NTksNDQgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBzaWdoYW5kKTsKIH0KIAorCisvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCS8qIFRocmVhZCBncm91cCBjb3VudGVycy4gKi8KKwl0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHNpZyk7CisKKwkvKiBFeHBpcmF0aW9uIHRpbWVzIGFuZCBpbmNyZW1lbnRzLiAqLworCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfdmlydF9pbmNyID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9pbmNyID0gY3B1dGltZV96ZXJvOworCisJLyogQ2FjaGVkIGV4cGlyYXRpb24gdGltZXMuICovCisJc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKKworCS8qIFRoZSB0aW1lciBsaXN0cy4gKi8KKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKK30KKwogc3RhdGljIGludCBjb3B5X3NpZ25hbCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCWludCByZXQ7CiAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5jb3VudCk7Ci0JCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+bGl2ZSk7Ci0JCXJldHVybiAwOworCQlyZXQgPSB0aHJlYWRfZ3JvdXBfY3B1dGltZV9jbG9uZV90aHJlYWQoY3VycmVudCk7CisJCWlmIChsaWtlbHkoIXJldCkpIHsKKwkJCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+Y291bnQpOworCQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5saXZlKTsKKwkJfQorCQlyZXR1cm4gcmV0OwogCX0KIAlzaWcgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ25hbF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCXRzay0+c2lnbmFsID0gc2lnOwpAQCAtNzk1LDQwICs4MjQsMjUgQEAKIAlzaWctPml0X3JlYWxfaW5jci50djY0ID0gMDsKIAlzaWctPnJlYWxfdGltZXIuZnVuY3Rpb24gPSBpdF9yZWFsX2ZuOwogCi0Jc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF92aXJ0X2luY3IgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2luY3IgPSBjcHV0aW1lX3plcm87Ci0KIAlzaWctPmxlYWRlciA9IDA7CS8qIHNlc3Npb24gbGVhZGVyc2hpcCBkb2Vzbid0IGluaGVyaXQgKi8KIAlzaWctPnR0eV9vbGRfcGdycCA9IE5VTEw7CiAJc2lnLT50dHkgPSBOVUxMOwogCi0Jc2lnLT51dGltZSA9IHNpZy0+c3RpbWUgPSBzaWctPmN1dGltZSA9IHNpZy0+Y3N0aW1lID0gY3B1dGltZV96ZXJvOworCXNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5ndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPmNndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPm52Y3N3ID0gc2lnLT5uaXZjc3cgPSBzaWctPmNudmNzdyA9IHNpZy0+Y25pdmNzdyA9IDA7CiAJc2lnLT5taW5fZmx0ID0gc2lnLT5tYWpfZmx0ID0gc2lnLT5jbWluX2ZsdCA9IHNpZy0+Y21hal9mbHQgPSAwOwogCXNpZy0+aW5ibG9jayA9IHNpZy0+b3VibG9jayA9IHNpZy0+Y2luYmxvY2sgPSBzaWctPmNvdWJsb2NrID0gMDsKIAl0YXNrX2lvX2FjY291bnRpbmdfaW5pdCgmc2lnLT5pb2FjKTsKLQlzaWctPnN1bV9zY2hlZF9ydW50aW1lID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKIAl0YXNrc3RhdHNfdGdpZF9pbml0KHNpZyk7CiAKIAl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAltZW1jcHkoc2lnLT5ybGltLCBjdXJyZW50LT5zaWduYWwtPnJsaW0sIHNpemVvZiBzaWctPnJsaW0pOwogCXRhc2tfdW5sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7CiAKLQlpZiAoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJLyoKLQkJICogTmV3IHNvbGUgdGhyZWFkIGluIHRoZSBwcm9jZXNzIGdldHMgYW4gZXhwaXJ5IHRpbWUKLQkJICogb2YgdGhlIHdob2xlIENQVSB0aW1lIGxpbWl0LgotCQkgKi8KLQkJdHNrLT5pdF9wcm9mX2V4cGlyZXMgPQotCQkJc2Vjc190b19jcHV0aW1lKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7Ci0JfQorCXBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpOworCiAJYWNjdF9pbml0X3BhY2N0KCZzaWctPnBhY2N0KTsKIAogCXR0eV9hdWRpdF9mb3JrKHNpZyk7CkBAIC04MzgsNiArODUyLDcgQEAKIAogdm9pZCBfX2NsZWFudXBfc2lnbmFsKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzaWcpOwogCWV4aXRfdGhyZWFkX2dyb3VwX2tleXMoc2lnKTsKIAl0dHlfa3JlZl9wdXQoc2lnLT50dHkpOwogCWttZW1fY2FjaGVfZnJlZShzaWduYWxfY2FjaGVwLCBzaWcpOwpAQCAtODg4LDYgKzkwMywxOSBAQAogI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogCiAvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSBzaW5nbGUgdGFzay4KKyAqLworc3RhdGljIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1swXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1sxXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1syXSk7Cit9CisKKy8qCiAgKiBUaGlzIGNyZWF0ZXMgYSBuZXcgcHJvY2VzcyBhcyBhIGNvcHkgb2YgdGhlIG9sZCBvbmUsCiAgKiBidXQgZG9lcyBub3QgYWN0dWFsbHkgc3RhcnQgaXQgeWV0LgogICoKQEAgLTk5NywxMiArMTAyNSw3IEBACiAJdGFza19pb19hY2NvdW50aW5nX2luaXQoJnAtPmlvYWMpOwogCWFjY3RfY2xlYXJfaW50ZWdyYWxzKHApOwogCi0JcC0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXAtPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlwLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1swXSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMV0pOwotCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzJdKTsKKwlwb3NpeF9jcHVfdGltZXJzX2luaXQocCk7CiAKIAlwLT5sb2NrX2RlcHRoID0gLTE7CQkvKiAtMSA9IG5vIGxvY2sgKi8KIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmcC0+c3RhcnRfdGltZSk7CkBAIC0xMjAzLDIxICsxMjI2LDYgQEAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKIAkJcC0+Z3JvdXBfbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGhyZWFkX2dyb3VwLCAmcC0+Z3JvdXBfbGVhZGVyLT50aHJlYWRfZ3JvdXApOwotCi0JCWlmICghY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAhY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSB8fAotCQkgICAgIWxpc3RfZW1wdHkoJmN1cnJlbnQtPnNpZ25hbC0+Y3B1X3RpbWVyc1swXSkgfHwKLQkJICAgICFsaXN0X2VtcHR5KCZjdXJyZW50LT5zaWduYWwtPmNwdV90aW1lcnNbMV0pIHx8Ci0JCSAgICAhbGlzdF9lbXB0eSgmY3VycmVudC0+c2lnbmFsLT5jcHVfdGltZXJzWzJdKSkgewotCQkJLyoKLQkJCSAqIEhhdmUgY2hpbGQgd2FrZSB1cCBvbiBpdHMgZmlyc3QgdGljayB0byBjaGVjawotCQkJICogZm9yIHByb2Nlc3MgQ1BVIHRpbWVycy4KLQkJCSAqLwotCQkJcC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CiAJfQogCiAJaWYgKGxpa2VseShwLT5waWQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyNDhiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIGtlcm5lbC9mcmVlemVyLmMgLSBGdW5jdGlvbiB0byBmcmVlemUgYSBwcm9jZXNzCisgKgorICogT3JpZ2luYWxseSBmcm9tIGtlcm5lbC9wb3dlci9wcm9jZXNzLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisvKgorICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKK3sKKwlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKKwkJd21iKCk7CisJfQorCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOworfQorCisvKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KK3ZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCit7CisJLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCisJICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KKwlsb25nIHNhdmU7CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7CisJCWZyb3plbl9wcm9jZXNzKCk7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCX0gZWxzZSB7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQlyZXR1cm47CisJfQorCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKKwlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICghZnJvemVuKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlKCk7CisJfQorCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7CisJX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKK30KK0VYUE9SVF9TWU1CT0wocmVmcmlnZXJhdG9yKTsKKworc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJc2lnbmFsX3dha2VfdXAocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKKyAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KKyAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCisgKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0CisgKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcworICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKKyAqCisgKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKKyAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgorICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCisgKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cworICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KKyAqLworYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpCit7CisJLyoKKwkgKiBXZSBmaXJzdCBjaGVjayBpZiB0aGUgdGFzayBpcyBmcmVlemluZyBhbmQgbmV4dCBpZiBpdCBoYXMgYWxyZWFkeQorCSAqIGJlZW4gZnJvemVuIHRvIGF2b2lkIHRoZSByYWNlIHdpdGggZnJvemVuX3Byb2Nlc3MoKSB3aGljaCBmaXJzdCBtYXJrcworCSAqIHRoZSB0YXNrIGFzIGZyb3plbiBhbmQgbmV4dCBjbGVhcnMgaXRzIFRJRl9GUkVFWkUuCisJICovCisJaWYgKCFmcmVlemluZyhwKSkgeworCQlybWIoKTsKKwkJaWYgKGZyb3plbihwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIXNpZ19vbmx5IHx8IHNob3VsZF9zZW5kX3NpZ25hbChwKSkKKwkJCXNldF9mcmVlemVfZmxhZyhwKTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaG91bGRfc2VuZF9zaWduYWwocCkpIHsKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhwKSkKKwkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCk7CisJfSBlbHNlIGlmIChzaWdfb25seSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJd2FrZV91cF9zdGF0ZShwLCBUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGNhbmNlbF9mcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmcmVlemluZyhwKSkgeworCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOworCQljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UocCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKKyAqCisgKiB0YXNrX2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQorICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKKyAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KKyAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQorICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KKyAqLworaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAoZnJvemVuKHApKSB7CisJCXAtPmZsYWdzICY9IH5QRl9GUk9aRU47CisJCXJldHVybiAxOworCX0KKwljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdGFza19sb2NrKHApOworCWlmIChfX3RoYXdfcHJvY2VzcyhwKSA9PSAxKSB7CisJCXRhc2tfdW5sb2NrKHApOworCQl3YWtlX3VwX3Byb2Nlc3MocCk7CisJCXJldHVybiAxOworCX0KKwl0YXNrX3VubG9jayhwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGNkZWM4M2UuLjk1OTc4ZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTQwMyw5ICsxNDAzLDcgQEAKIAkJaWYgKCFiYXNlLT5maXJzdCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQotCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwotCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCWlmIChnZXR0aW1lKSB7CiAJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOwogCQkJZ2V0dGltZSA9IDA7CiAJCX0KQEAgLTE2ODgsOSArMTY4NiwxMSBAQAogCW5ld19iYXNlID0gJmdldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJdGlja19jYW5jZWxfc2NoZWRfdGltZXIoY3B1KTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7CkBAIC0xNzAzLDggKzE3MDMsNyBAQAogCQlyYWlzZSA9IDE7CiAKIAlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNwaW5fdW5sb2NrX2lycSgmbmV3X2Jhc2UtPmxvY2spOwogCXB1dF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJaWYgKHJhaXNlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IGFiOTgyNzQuLmRiN2MzNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTU1LDE3ICs1NSwxNSBAQAogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgSVRJTUVSX1ZJUlRVQUw6Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWN2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzOwogCQljaW50ZXJ2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9pbmNyOwogCQlpZiAoIWNwdXRpbWVfZXEoY3ZhbCwgY3B1dGltZV96ZXJvKSkgewotCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdHNrOwotCQkJY3B1dGltZV90IHV0aW1lID0gdHNrLT5zaWduYWwtPnV0aW1lOwotCQkJZG8gewotCQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHQtPnV0aW1lKTsKLQkJCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCQl9IHdoaWxlICh0ICE9IHRzayk7CisJCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisJCQljcHV0aW1lX3QgdXRpbWU7CisKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmNwdXRpbWUpOworCQkJdXRpbWUgPSBjcHV0aW1lLnV0aW1lOwogCQkJaWYgKGNwdXRpbWVfbGUoY3ZhbCwgdXRpbWUpKSB7IC8qIGFib3V0IHRvIGZpcmUgKi8KIAkJCQljdmFsID0gamlmZmllc190b19jcHV0aW1lKDEpOwogCQkJfSBlbHNlIHsKQEAgLTczLDI1ICs3MSwxOSBAQAogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwogCQlicmVhazsKIAljYXNlIElUSU1FUl9QUk9GOgotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlczsKIAkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfaW5jcjsKIAkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzazsKLQkJCWNwdXRpbWVfdCBwdGltZSA9IGNwdXRpbWVfYWRkKHRzay0+c2lnbmFsLT51dGltZSwKLQkJCQkJCSAgICAgIHRzay0+c2lnbmFsLT5zdGltZSk7Ci0JCQlkbyB7Ci0JCQkJcHRpbWUgPSBjcHV0aW1lX2FkZChwdGltZSwKLQkJCQkJCSAgICBjcHV0aW1lX2FkZCh0LT51dGltZSwKLQkJCQkJCQkJdC0+c3RpbWUpKTsKLQkJCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCQl9IHdoaWxlICh0ICE9IHRzayk7CisJCQlzdHJ1Y3QgdGFza19jcHV0aW1lIHRpbWVzOworCQkJY3B1dGltZV90IHB0aW1lOworCisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZ0aW1lcyk7CisJCQlwdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLnV0aW1lLCB0aW1lcy5zdGltZSk7CiAJCQlpZiAoY3B1dGltZV9sZShjdmFsLCBwdGltZSkpIHsgLyogYWJvdXQgdG8gZmlyZSAqLwogCQkJCWN2YWwgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7CiAJCQl9IGVsc2UgewpAQCAtOTksNyArOTEsNiBAQAogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJnZhbHVlLT5pdF92YWx1ZSk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwogCQlicmVhazsKQEAgLTE4NSw3ICsxNzYsNiBAQAogCWNhc2UgSVRJTUVSX1ZJUlRVQUw6CiAJCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7CiAJCW5pbnRlcnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X2ludGVydmFsKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF92aXJ0X2luY3I7CkBAIC0yMDAsNyArMTkwLDYgQEAKIAkJdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlcyA9IG52YWw7CiAJCXRzay0+c2lnbmFsLT5pdF92aXJ0X2luY3IgPSBuaW50ZXJ2YWw7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlpZiAob3ZhbHVlKSB7CiAJCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJm92YWx1ZS0+aXRfdmFsdWUpOwogCQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJm92YWx1ZS0+aXRfaW50ZXJ2YWwpOwpAQCAtMjA5LDcgKzE5OCw2IEBACiAJY2FzZSBJVElNRVJfUFJPRjoKIAkJbnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X3ZhbHVlKTsKIAkJbmludGVydmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwpOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlczsKIAkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3Byb2ZfaW5jcjsKQEAgLTIyNCw3ICsyMTIsNiBAQAogCQl0c2stPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzID0gbnZhbDsKIAkJdHNrLT5zaWduYWwtPml0X3Byb2ZfaW5jciA9IG5pbnRlcnZhbDsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWlmIChvdmFsdWUpIHsKIAkJCWNwdXRpbWVfdG9fdGltZXZhbChjdmFsLCAmb3ZhbHVlLT5pdF92YWx1ZSk7CiAJCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmb3ZhbHVlLT5pdF9pbnRlcnZhbCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva2FsbHN5bXMuYyBiL2tlcm5lbC9rYWxsc3ltcy5jCmluZGV4IDM4ZmMxMGEuLjUwNzJjZjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rYWxsc3ltcy5jCisrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCkBAIC0yNjAsNyArMjYwLDYgQEAKIAkvKiBzZWUgaWYgaXQncyBpbiBhIG1vZHVsZSAqLwogCXJldHVybiBtb2R1bGVfYWRkcmVzc19sb29rdXAoYWRkciwgc3ltYm9sc2l6ZSwgb2Zmc2V0LCBtb2RuYW1lLAogCQkJCSAgICAgbmFtZWJ1Zik7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIGludCBsb29rdXBfc3ltYm9sX25hbWUodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpzeW1uYW1lKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCBhZWYyNjUzLi43NzdhYzQ1IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMTM3MSw2ICsxMzcxLDcgQEAKIAlWTUNPUkVJTkZPX1NZTUJPTChub2RlX29ubGluZV9tYXApOwogCVZNQ09SRUlORk9fU1lNQk9MKHN3YXBwZXJfcGdfZGlyKTsKIAlWTUNPUkVJTkZPX1NZTUJPTChfc3RleHQpOworCVZNQ09SRUlORk9fU1lNQk9MKHZtbGlzdCk7CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKIAlWTUNPUkVJTkZPX1NZTUJPTChtZW1fbWFwKTsKQEAgLTE0MDYsNiArMTQwNyw3IEBACiAJVk1DT1JFSU5GT19PRkZTRVQoZnJlZV9hcmVhLCBmcmVlX2xpc3QpOwogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgbmV4dCk7CiAJVk1DT1JFSU5GT19PRkZTRVQobGlzdF9oZWFkLCBwcmV2KTsKKwlWTUNPUkVJTkZPX09GRlNFVCh2bV9zdHJ1Y3QsIGFkZHIpOwogCVZNQ09SRUlORk9fTEVOR1RIKHpvbmUuZnJlZV9hcmVhLCBNQVhfT1JERVIpOwogCVZNQ09SRUlORk9fTEVOR1RIKGZyZWVfYXJlYS5mcmVlX2xpc3QsIE1JR1JBVEVfVFlQRVMpOwogCVZNQ09SRUlORk9fTlVNQkVSKE5SX0ZSRUVfUEFHRVMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggMjQ1NmQxYS4uM2QzYzNlYSAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChyZXF1ZXN0X21vZHVsZSk7Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogLyoKICAqIElmIHNldCwgY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd2lsbCBleGl0IGltbWVkaWF0ZWx5IHJldHVybmluZyAtRUJVU1kKICAqICh1c2VkIGZvciBwcmV2ZW50aW5nIHVzZXIgbGFuZCBwcm9jZXNzZXMgZnJvbSBiZWluZyBjcmVhdGVkIGFmdGVyIHRoZSB1c2VyCkBAIC0yODgsMzkgKzI4OCwzNyBAQAogICovCiAjZGVmaW5lIFJVTk5JTkdfSEVMUEVSU19USU1FT1VUCSg1ICogSFopCiAKLXN0YXRpYyBpbnQgdXNlcm1vZGVoZWxwZXJfcG1fY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCQkJCQl2b2lkICppZ25vcmVkKQorLyoqCisgKiB1c2VybW9kZWhlbHBlcl9kaXNhYmxlIC0gcHJldmVudCBuZXcgaGVscGVycyBmcm9tIGJlaW5nIHN0YXJ0ZWQKKyAqLworaW50IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUodm9pZCkKIHsKIAlsb25nIHJldHZhbDsKIAotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgotCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgotCQl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDE7Ci0JCXNtcF9tYigpOwotCQkvKgotCQkgKiBGcm9tIG5vdyBvbiBjYWxsX3VzZXJtb2RlaGVscGVyX2V4ZWMoKSB3b24ndCBzdGFydCBhbnkgbmV3Ci0JCSAqIGhlbHBlcnMsIHNvIGl0IGlzIHN1ZmZpY2llbnQgaWYgcnVubmluZ19oZWxwZXJzIHR1cm5zIG91dCB0bwotCQkgKiBiZSB6ZXJvIGF0IG9uZSBwb2ludCAoaXQgbWF5IGJlIGluY3JlYXNlZCBsYXRlciwgYnV0IHRoYXQKLQkJICogZG9lc24ndCBtYXR0ZXIpLgotCQkgKi8KLQkJcmV0dmFsID0gd2FpdF9ldmVudF90aW1lb3V0KHJ1bm5pbmdfaGVscGVyc193YWl0cSwKKwl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDE7CisJc21wX21iKCk7CisJLyoKKwkgKiBGcm9tIG5vdyBvbiBjYWxsX3VzZXJtb2RlaGVscGVyX2V4ZWMoKSB3b24ndCBzdGFydCBhbnkgbmV3CisJICogaGVscGVycywgc28gaXQgaXMgc3VmZmljaWVudCBpZiBydW5uaW5nX2hlbHBlcnMgdHVybnMgb3V0IHRvCisJICogYmUgemVybyBhdCBvbmUgcG9pbnQgKGl0IG1heSBiZSBpbmNyZWFzZWQgbGF0ZXIsIGJ1dCB0aGF0CisJICogZG9lc24ndCBtYXR0ZXIpLgorCSAqLworCXJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChydW5uaW5nX2hlbHBlcnNfd2FpdHEsCiAJCQkJCWF0b21pY19yZWFkKCZydW5uaW5nX2hlbHBlcnMpID09IDAsCiAJCQkJCVJVTk5JTkdfSEVMUEVSU19USU1FT1VUKTsKLQkJaWYgKHJldHZhbCkgewotCQkJcmV0dXJuIE5PVElGWV9PSzsKLQkJfSBlbHNlIHsKLQkJCXVzZXJtb2RlaGVscGVyX2Rpc2FibGVkID0gMDsKLQkJCXJldHVybiBOT1RJRllfQkFEOwotCQl9Ci0JY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgotCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgotCQl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7Ci0JCXJldHVybiBOT1RJRllfT0s7Ci0JfQorCWlmIChyZXR2YWwpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIE5PVElGWV9ET05FOworCXVzZXJtb2RlaGVscGVyX2Rpc2FibGVkID0gMDsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworLyoqCisgKiB1c2VybW9kZWhlbHBlcl9lbmFibGUgLSBhbGxvdyBuZXcgaGVscGVycyB0byBiZSBzdGFydGVkIGFnYWluCisgKi8KK3ZvaWQgdXNlcm1vZGVoZWxwZXJfZW5hYmxlKHZvaWQpCit7CisJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBoZWxwZXJfbG9jayh2b2lkKQpAQCAtMzM0LDE4ICszMzIsMTIgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcnVubmluZ19oZWxwZXJzKSkKIAkJd2FrZV91cCgmcnVubmluZ19oZWxwZXJzX3dhaXRxKTsKIH0KLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcG1fbm90aWZpZXJfY2FsbGJhY2sodm9pZCkKLXsKLQlwbV9ub3RpZmllcih1c2VybW9kZWhlbHBlcl9wbV9jYWxsYmFjaywgMCk7Ci19Ci0jZWxzZSAvKiBDT05GSUdfUE0gKi8KKyNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLwogI2RlZmluZSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlZAkwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoZWxwZXJfbG9jayh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGhlbHBlcl91bmxvY2sodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9wbV9ub3RpZmllcl9jYWxsYmFjayh2b2lkKSB7fQotI2VuZGlmIC8qIENPTkZJR19QTSAqLworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiAvKioKICAqIGNhbGxfdXNlcm1vZGVoZWxwZXJfc2V0dXAgLSBwcmVwYXJlIHRvIGNhbGwgYSB1c2VybW9kZSBoZWxwZXIKQEAgLTUxNSw1ICs1MDcsNCBAQAogewogCWtoZWxwZXJfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia2hlbHBlciIpOwogCUJVR19PTigha2hlbHBlcl93cSk7Ci0JcmVnaXN0ZXJfcG1fbm90aWZpZXJfY2FsbGJhY2soKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDc1YmMyY2QuLjhiNTdhMjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoaGxpc3RfbG9jaywgKmZsYWdzKTsKIH0KIAotdm9pZCBrcmV0cHJvYmVfdGFibGVfbG9jayh1bnNpZ25lZCBsb25nIGhhc2gsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RhdGljIHZvaWQga3JldHByb2JlX3RhYmxlX2xvY2sodW5zaWduZWQgbG9uZyBoYXNoLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzcGlubG9ja190ICpobGlzdF9sb2NrID0ga3JldHByb2JlX3RhYmxlX2xvY2tfcHRyKGhhc2gpOwogCXNwaW5fbG9ja19pcnFzYXZlKGhsaXN0X2xvY2ssICpmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwva3N5c2ZzLmMgYi9rZXJuZWwva3N5c2ZzLmMKaW5kZXggZTUzYmMzMC4uMDhkZDhlZCAxMDA2NDQKLS0tIGEva2VybmVsL2tzeXNmcy5jCisrKyBiL2tlcm5lbC9rc3lzZnMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjZGVmaW5lIEtFUk5FTF9BVFRSX1JPKF9uYW1lKSBcCkBAIC01Myw2ICs1NCwzNyBAQAogS0VSTkVMX0FUVFJfUlcodWV2ZW50X2hlbHBlcik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUk9GSUxJTkcKK3N0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByb2Zfb24pOworfQorc3RhdGljIHNzaXplX3QgcHJvZmlsaW5nX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHByb2Zfb24pCisJCXJldHVybiAtRUVYSVNUOworCS8qCisJICogVGhpcyBldmVudHVhbGx5IGNhbGxzIGludG8gZ2V0X29wdGlvbigpIHdoaWNoCisJICogaGFzIGEgdG9uIG9mIGNhbGxlcnMgYW5kIGlzIG5vdCBjb25zdC4gIEl0IGlzCisJICogZWFzaWVzdCB0byBjYXN0IGl0IGF3YXkgaGVyZS4KKwkgKi8KKwlwcm9maWxlX3NldHVwKChjaGFyICopYnVmKTsKKwlyZXQgPSBwcm9maWxlX2luaXQoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNyZWF0ZV9wcm9jX3Byb2ZpbGUoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBjb3VudDsKK30KK0tFUk5FTF9BVFRSX1JXKHByb2ZpbGluZyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19LRVhFQwogc3RhdGljIHNzaXplX3Qga2V4ZWNfbG9hZGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTA5LDYgKzE0MSw5IEBACiAJJnVldmVudF9zZXFudW1fYXR0ci5hdHRyLAogCSZ1ZXZlbnRfaGVscGVyX2F0dHIuYXR0ciwKICNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9GSUxJTkcKKwkmcHJvZmlsaW5nX2F0dHIuYXR0ciwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19LRVhFQwogCSZrZXhlY19sb2FkZWRfYXR0ci5hdHRyLAogCSZrZXhlY19jcmFzaF9sb2FkZWRfYXR0ci5hdHRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggOTZjZmYyZi4uMTRlYzY0ZiAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xNzEsMTIgKzE3MSwxMSBAQAogICovCiB2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmssIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaWYgKGstPnN0YXRlICE9IFRBU0tfVU5JTlRFUlJVUFRJQkxFKSB7CisJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLworCWlmICghd2FpdF90YXNrX2luYWN0aXZlKGssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm47CiAJfQotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQl3YWl0X3Rhc2tfaW5hY3RpdmUoaywgMCk7CiAJc2V0X3Rhc2tfY3B1KGssIGNwdSk7CiAJay0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKIAlrLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDlkYjExOTEuLjI1YmM5YWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFkZF90YWludF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBmbGFnKQogewogCWFkZF90YWludChmbGFnKTsKLQltb2QtPnRhaW50cyB8PSBmbGFnOworCW1vZC0+dGFpbnRzIHw9ICgxVSA8PCBmbGFnKTsKIH0KIAogLyoKQEAgLTc4NCw2ICs3ODQsNyBAQAogCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CiAJLyogU3RvcmUgdGhlIG5hbWUgb2YgdGhlIGxhc3QgdW5sb2FkZWQgbW9kdWxlIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzICovCiAJc3RybGNweShsYXN0X3VubG9hZGVkX21vZHVsZSwgbW9kLT5uYW1lLCBzaXplb2YobGFzdF91bmxvYWRlZF9tb2R1bGUpKTsKKwl1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKG1vZC0+bmFtZSk7CiAJZnJlZV9tb2R1bGUobW9kKTsKIAogIG91dDoKQEAgLTkyMyw3ICs5MjQsNyBAQAogc3RhdGljIGludCB0cnlfdG9fZm9yY2VfbG9hZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKnN5bW5hbWUpCiB7CiAjaWZkZWYgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FECi0JaWYgKCEodGFpbnRlZCAmIFRBSU5UX0ZPUkNFRF9NT0RVTEUpKQorCWlmICghdGVzdF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKSkKIAkJcHJpbnRrKCIlczogbm8gdmVyc2lvbiBmb3IgXCIlc1wiIGZvdW5kOiBrZXJuZWwgdGFpbnRlZC5cbiIsCiAJCSAgICAgICBtb2QtPm5hbWUsIHN5bW5hbWUpOwogCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9GT1JDRURfTU9EVUxFKTsKQEAgLTEwMzMsNyArMTAzNCw3IEBACiAJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjOwogCiAJcmV0ID0gZmluZF9zeW1ib2wobmFtZSwgJm93bmVyLCAmY3JjLAotCQkJICAhKG1vZC0+dGFpbnRzICYgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSwgdHJ1ZSk7CisJCQkgICEobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKSwgdHJ1ZSk7CiAJaWYgKCFJU19FUlJfVkFMVUUocmV0KSkgewogCQkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCiAJCSAgIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciB1bmxvYWRpbmcgKi8KQEAgLTExNzMsNyArMTE3NCw3IEBACiAJCXdoaWxlIChpLS0gPiAwKQogCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKG5vdGVzX2F0dHJzLT5kaXIsCiAJCQkJCSAgICAgICZub3Rlc19hdHRycy0+YXR0cnNbaV0pOwotCQlrb2JqZWN0X2RlbChub3Rlc19hdHRycy0+ZGlyKTsKKwkJa29iamVjdF9wdXQobm90ZXNfYXR0cnMtPmRpcik7CiAJfQogCWtmcmVlKG5vdGVzX2F0dHJzKTsKIH0KQEAgLTE2MzQsNyArMTYzNSw3IEBACiAJCWxpY2Vuc2UgPSAidW5zcGVjaWZpZWQiOwogCiAJaWYgKCFsaWNlbnNlX2lzX2dwbF9jb21wYXRpYmxlKGxpY2Vuc2UpKSB7Ci0JCWlmICghKHRhaW50ZWQgJiBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKQorCQlpZiAoIXRlc3RfdGFpbnQoVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtb2R1bGUgbGljZW5zZSAnJXMnIHRhaW50cyAiCiAJCQkJImtlcm5lbC5cbiIsIG1vZC0+bmFtZSwgbGljZW5zZSk7CiAJCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpOwpAQCAtMTc4Myw2ICsxNzg0LDMzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovCiAKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKK3N0YXRpYyB2b2lkIGR5bmFtaWNfcHJpbnRrX3NldHVwKEVsZl9TaGRyICpzZWNoZHJzLCB1bnNpZ25lZCBpbnQgdmVyYm9zZWluZGV4KQoreworCXN0cnVjdCBtb2RfZGVidWcgKmRlYnVnX2luZm87CisJdW5zaWduZWQgbG9uZyBwb3MsIGVuZDsKKwl1bnNpZ25lZCBpbnQgbnVtX3ZlcmJvc2U7CisKKwlwb3MgPSBzZWNoZHJzW3ZlcmJvc2VpbmRleF0uc2hfYWRkcjsKKwludW1fdmVyYm9zZSA9IHNlY2hkcnNbdmVyYm9zZWluZGV4XS5zaF9zaXplIC8KKwkJCQlzaXplb2Yoc3RydWN0IG1vZF9kZWJ1Zyk7CisJZW5kID0gcG9zICsgKG51bV92ZXJib3NlICogc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKTsKKworCWZvciAoOyBwb3MgPCBlbmQ7IHBvcyArPSBzaXplb2Yoc3RydWN0IG1vZF9kZWJ1ZykpIHsKKwkJZGVidWdfaW5mbyA9IChzdHJ1Y3QgbW9kX2RlYnVnICopcG9zOworCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShkZWJ1Z19pbmZvLT5tb2RuYW1lLAorCQkJZGVidWdfaW5mby0+dHlwZSwgZGVidWdfaW5mby0+bG9naWNhbF9tb2RuYW1lLAorCQkJZGVidWdfaW5mby0+ZmxhZ19uYW1lcywgZGVidWdfaW5mby0+aGFzaCwKKwkJCWRlYnVnX2luZm8tPmhhc2gyKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGR5bmFtaWNfcHJpbnRrX3NldHVwKEVsZl9TaGRyICpzZWNoZHJzLAorCQkJCQl1bnNpZ25lZCBpbnQgdmVyYm9zZWluZGV4KQoreworfQorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyAqLworCiBzdGF0aWMgdm9pZCAqbW9kdWxlX2FsbG9jX3VwZGF0ZV9ib3VuZHModW5zaWduZWQgbG9uZyBzaXplKQogewogCXZvaWQgKnJldCA9IG1vZHVsZV9hbGxvYyhzaXplKTsKQEAgLTE4MDYsNiArMTgzNCw3IEBACiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAljaGFyICpzZWNzdHJpbmdzLCAqYXJncywgKm1vZG1hZ2ljLCAqc3RydGFiID0gTlVMTDsKKwljaGFyICpzdGFnaW5nOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBzeW1pbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IHN0cmluZGV4ID0gMDsKQEAgLTE4MzEsNiArMTg2MCw3IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBpbnQgbWFya2Vyc2luZGV4OwogCXVuc2lnbmVkIGludCBtYXJrZXJzc3RyaW5nc2luZGV4OworCXVuc2lnbmVkIGludCB2ZXJib3NlaW5kZXg7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KQEAgLTE5NjAsNiArMTk5MCwxNCBAQAogCQlnb3RvIGZyZWVfaGRyOwogCX0KIAorCXN0YWdpbmcgPSBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJzdGFnaW5nIik7CisJaWYgKHN0YWdpbmcpIHsKKwkJYWRkX3RhaW50X21vZHVsZShtb2QsIFRBSU5UX0NSQVApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGlzIGZyb20gdGhlIHN0YWdpbmcgZGlyZWN0b3J5LCIKKwkJICAgICAgICIgdGhlIHF1YWxpdHkgaXMgdW5rbm93biwgeW91IGhhdmUgYmVlbiB3YXJuZWQuXG4iLAorCQkgICAgICAgbW9kLT5uYW1lKTsKKwl9CisKIAkvKiBOb3cgY29weSBpbiBhcmdzICovCiAJYXJncyA9IHN0cm5kdXBfdXNlcih1YXJncywgfjBVTCA+PiAxKTsKIAlpZiAoSVNfRVJSKGFyZ3MpKSB7CkBAIC0yMTE3LDYgKzIxNTUsNyBAQAogCW1hcmtlcnNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fbWFya2VycyIpOwogIAltYXJrZXJzc3RyaW5nc2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLAogCQkJCQkiX19tYXJrZXJzX3N0cmluZ3MiKTsKKwl2ZXJib3NlaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3ZlcmJvc2UiKTsKIAogCS8qIE5vdyBkbyByZWxvY2F0aW9ucy4gKi8KIAlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKQEAgLTIxNjcsNiArMjIwNiw3IEBACiAJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAogCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7CiAjZW5kaWYKKwlkeW5hbWljX3ByaW50a19zZXR1cChzZWNoZHJzLCB2ZXJib3NlaW5kZXgpOwogCWVyciA9IG1vZHVsZV9maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1vZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTI1NTIsMTAgKzI1OTIsMTIgQEAKIAkgICAgbW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfR09JTkcgfHwKIAkgICAgbW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfQ09NSU5HKSB7CiAJCWJ1ZltieCsrXSA9ICcoJzsKLQkJaWYgKG1vZC0+dGFpbnRzICYgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKQorCQlpZiAobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKQogCQkJYnVmW2J4KytdID0gJ1AnOwotCQlpZiAobW9kLT50YWludHMgJiBUQUlOVF9GT1JDRURfTU9EVUxFKQorCQlpZiAobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9GT1JDRURfTU9EVUxFKSkKIAkJCWJ1ZltieCsrXSA9ICdGJzsKKwkJaWYgKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfQ1JBUCkpCisJCQlidWZbYngrK10gPSAnQyc7CiAJCS8qCiAJCSAqIFRBSU5UX0ZPUkNFRF9STU1PRDogY291bGQgYmUgYWRkZWQuCiAJCSAqIFRBSU5UX1VOU0FGRV9TTVAsIFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIFRBSU5UX0JBRF9QQUdFIGRvbid0CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDEyYzVhMGEuLmJkYTU2MWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KIAogaW50IHBhbmljX29uX29vcHM7Ci1pbnQgdGFpbnRlZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRhaW50ZWRfbWFzazsKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wczsKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wc19mbGFnOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwYXVzZV9vbl9vb3BzX2xvY2spOwpAQCAtMTQzLDYgKzE0MywyNyBAQAogCiBFWFBPUlRfU1lNQk9MKHBhbmljKTsKIAorCitzdHJ1Y3QgdG50IHsKKwl1OCBiaXQ7CisJY2hhciB0cnVlOworCWNoYXIgZmFsc2U7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRudCB0bnRzW10gPSB7CisJeyBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUsICdQJywgJ0cnIH0sCisJeyBUQUlOVF9GT1JDRURfTU9EVUxFLCAnRicsICcgJyB9LAorCXsgVEFJTlRfVU5TQUZFX1NNUCwgJ1MnLCAnICcgfSwKKwl7IFRBSU5UX0ZPUkNFRF9STU1PRCwgJ1InLCAnICcgfSwKKwl7IFRBSU5UX01BQ0hJTkVfQ0hFQ0ssICdNJywgJyAnIH0sCisJeyBUQUlOVF9CQURfUEFHRSwgJ0InLCAnICcgfSwKKwl7IFRBSU5UX1VTRVIsICdVJywgJyAnIH0sCisJeyBUQUlOVF9ESUUsICdEJywgJyAnIH0sCisJeyBUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUsICdBJywgJyAnIH0sCisJeyBUQUlOVF9XQVJOLCAnVycsICcgJyB9LAorCXsgVEFJTlRfQ1JBUCwgJ0MnLCAnICcgfSwKK307CisKIC8qKgogICoJcHJpbnRfdGFpbnRlZCAtIHJldHVybiBhIHN0cmluZyB0byByZXByZXNlbnQgdGhlIGtlcm5lbCB0YWludCBzdGF0ZS4KICAqCkBAIC0xNTUsMzUgKzE3Niw0NSBAQAogICogICdVJyAtIFVzZXJzcGFjZS1kZWZpbmVkIG5hdWdodGluZXNzLgogICogICdBJyAtIEFDUEkgdGFibGUgb3ZlcnJpZGRlbi4KICAqICAnVycgLSBUYWludCBvbiB3YXJuaW5nLgorICogICdDJyAtIG1vZHVsZXMgZnJvbSBkcml2ZXJzL3N0YWdpbmcgYXJlIGxvYWRlZC4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnQoKS4KICAqLwotCiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzIwXTsKLQlpZiAodGFpbnRlZCkgewotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVGFpbnRlZDogJWMlYyVjJWMlYyVjJWMlYyVjJWMiLAotCQkJdGFpbnRlZCAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSA/ICdQJyA6ICdHJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9GT1JDRURfTU9EVUxFID8gJ0YnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX1VOU0FGRV9TTVAgPyAnUycgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfRk9SQ0VEX1JNTU9EID8gJ1InIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX01BQ0hJTkVfQ0hFQ0sgPyAnTScgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfQkFEX1BBR0UgPyAnQicgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfVVNFUiA/ICdVJyA6ICcgJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9ESUUgPyAnRCcgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFID8gJ0EnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX1dBUk4gPyAnVycgOiAnICcpOwotCX0KLQllbHNlCisJc3RhdGljIGNoYXIgYnVmW0FSUkFZX1NJWkUodG50cykgKyBzaXplb2YoIlRhaW50ZWQ6ICIpICsgMV07CisKKwlpZiAodGFpbnRlZF9tYXNrKSB7CisJCWNoYXIgKnM7CisJCWludCBpOworCisJCXMgPSBidWYgKyBzcHJpbnRmKGJ1ZiwgIlRhaW50ZWQ6ICIpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0bnRzKTsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgdG50ICp0ID0gJnRudHNbaV07CisJCQkqcysrID0gdGVzdF9iaXQodC0+Yml0LCAmdGFpbnRlZF9tYXNrKSA/CisJCQkJCXQtPnRydWUgOiB0LT5mYWxzZTsKKwkJfQorCQkqcyA9IDA7CisJfSBlbHNlCiAJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJOb3QgdGFpbnRlZCIpOwogCXJldHVybihidWYpOwogfQogCitpbnQgdGVzdF90YWludCh1bnNpZ25lZCBmbGFnKQoreworCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmdGFpbnRlZF9tYXNrKTsKK30KK0VYUE9SVF9TWU1CT0wodGVzdF90YWludCk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RhaW50KHZvaWQpCit7CisJcmV0dXJuIHRhaW50ZWRfbWFzazsKK30KKwogdm9pZCBhZGRfdGFpbnQodW5zaWduZWQgZmxhZykKIHsKIAlkZWJ1Z19sb2NrcyA9IDA7IC8qIGNhbid0IHRydXN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGtlcm5lbCBhbnltb3JlICovCi0JdGFpbnRlZCB8PSBmbGFnOworCXNldF9iaXQoZmxhZywgJnRhaW50ZWRfbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGFkZF90YWludCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IGM0MmEwM2EuLjE1M2RjYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtNyw2ICs3LDkzIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlIGFwcHJvcHJpYXRlbHkgYW5kIGZpbGwgaW4gdGhlCisgKiBjdXJyZW50IHZhbHVlcyBvZiB0aGUgZmllbGRzLiAgQ2FsbGVkIGZyb20gY29weV9zaWduYWwoKSB2aWEKKyAqIHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZCgpIHdoZW4gYWRkaW5nIGEgc2Vjb25kIG9yIHN1YnNlcXVlbnQKKyAqIHRocmVhZCB0byBhIHRocmVhZCBncm91cC4gIEFzc3VtZXMgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCB3aGVuIGNhbGxlZC4KKyAqLworaW50IHRocmVhZF9ncm91cF9jcHV0aW1lX2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stPnNpZ25hbDsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICpjcHV0aW1lOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIG11bHRpcGxlIHRocmVhZHMgYW5kIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhCisJICogcGVyLUNQVSB0YXNrX2NwdXRpbWUgc3RydWN0IChjaGVja2VkIGluIHRoZSBjYWxsZXIpLCBhbGxvY2F0ZQorCSAqIG9uZSBhbmQgZmlsbCBpdCBpbiB3aXRoIHRoZSB0aW1lcyBhY2N1bXVsYXRlZCBzbyBmYXIuICBXZSBtYXkKKwkgKiByYWNlIHdpdGggYW5vdGhlciB0aHJlYWQgc28gcmVjaGVjayBhZnRlciB3ZSBwaWNrIHVwIHRoZSBzaWdoYW5kCisJICogbG9jay4KKwkgKi8KKwljcHV0aW1lID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0YXNrX2NwdXRpbWUpOworCWlmIChjcHV0aW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlmcmVlX3BlcmNwdShjcHV0aW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXNpZy0+Y3B1dGltZS50b3RhbHMgPSBjcHV0aW1lOworCWNwdXRpbWUgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWNwdXRpbWUtPnV0aW1lID0gdHNrLT51dGltZTsKKwljcHV0aW1lLT5zdGltZSA9IHRzay0+c3RpbWU7CisJY3B1dGltZS0+c3VtX2V4ZWNfcnVudGltZSA9IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGhyZWFkX2dyb3VwX2NwdXRpbWUgLSBTdW0gdGhlIHRocmVhZCBncm91cCB0aW1lIGZpZWxkcyBhY3Jvc3MgYWxsIENQVXMuCisgKgorICogQHRzazoJVGhlIHRhc2sgd2UgdXNlIHRvIGlkZW50aWZ5IHRoZSB0aHJlYWQgZ3JvdXAuCisgKiBAdGltZXM6CXRhc2tfY3B1dGltZSBzdHJ1Y3R1cmUgaW4gd2hpY2ggd2UgcmV0dXJuIHRoZSBzdW1tZWQgZmllbGRzLgorICoKKyAqIFdhbGsgdGhlIGxpc3Qgb2YgQ1BVcyB0byBzdW0gdGhlIHBlci1DUFUgdGltZSBmaWVsZHMgaW4gdGhlIHRocmVhZCBncm91cAorICogdGltZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWUoCisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXMpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKwlpbnQgaTsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICp0b3Q7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykgfHwgIXNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJdGltZXMtPnV0aW1lID0gdHNrLT51dGltZTsKKwkJdGltZXMtPnN0aW1lID0gdHNrLT5zdGltZTsKKwkJdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgPSB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWU7CisJCXJldHVybjsKKwl9CisJdGltZXMtPnN0aW1lID0gdGltZXMtPnV0aW1lID0gY3B1dGltZV96ZXJvOworCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gMDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQl0b3QgPSBwZXJfY3B1X3B0cih0c2stPnNpZ25hbC0+Y3B1dGltZS50b3RhbHMsIGkpOworCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIHRvdC0+dXRpbWUpOworCQl0aW1lcy0+c3RpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+c3RpbWUsIHRvdC0+c3RpbWUpOworCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSB0b3QtPnN1bV9leGVjX3J1bnRpbWU7CisJfQorfQorCisvKgorICogQ2FsbGVkIGFmdGVyIHVwZGF0aW5nIFJMSU1JVF9DUFUgdG8gc2V0IHRpbWVyIGV4cGlyYXRpb24gaWYgbmVjZXNzYXJ5LgorICovCit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHVuc2lnbmVkIGxvbmcgcmxpbV9uZXcpCit7CisJY3B1dGltZV90IGNwdXRpbWU7CisKKwljcHV0aW1lID0gc2Vjc190b19jcHV0aW1lKHJsaW1fbmV3KTsKKwlpZiAoY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAorCSAgICBjcHV0aW1lX2x0KGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lKSkgeworCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKGN1cnJlbnQsIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY2xvY2soY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrKQogewpAQCAtMTU4LDEwICsyNDUsNiBAQAogewogCXJldHVybiBwLT51dGltZTsKIH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gdGFza19zY2hlZF9ydW50aW1lKHApOwotfQogCiBpbnQgcG9zaXhfY3B1X2Nsb2NrX2dldHJlcyhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCiB7CkBAIC0yMTEsNDYgKzI5NCw3IEBACiAJCWNwdS0+Y3B1ID0gdmlydF90aWNrcyhwKTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJY3B1LT5zY2hlZCA9IHNjaGVkX25zKHApOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTYW1wbGUgYSBwcm9jZXNzICh0aHJlYWQgZ3JvdXApIGNsb2NrIGZvciB0aGUgZ2l2ZW4gZ3JvdXBfbGVhZGVyIHRhc2suCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBmb3IgcmVhZGluZy4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciByZWFkaW5nLCBhbmQgcC0+c2lnaGFuZC0+c2lnbG9jay4KLSAqLwotc3RhdGljIGludCBjcHVfY2xvY2tfc2FtcGxlX2dyb3VwX2xvY2tlZCh1bnNpZ25lZCBpbnQgY2xvY2tfaWR4LAotCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkJCQkgdW5pb24gY3B1X3RpbWVfY291bnQgKmNwdSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBwOwotIAlzd2l0Y2ggKGNsb2NrX2lkeCkgewotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChwLT5zaWduYWwtPnV0aW1lLCBwLT5zaWduYWwtPnN0aW1lKTsKLQkJZG8gewotCQkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHUtPmNwdSwgcHJvZl90aWNrcyh0KSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJY3B1LT5jcHUgPSBwLT5zaWduYWwtPnV0aW1lOwotCQlkbyB7Ci0JCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKGNwdS0+Y3B1LCB2aXJ0X3RpY2tzKHQpKTsKLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJY3B1LT5zY2hlZCA9IHAtPnNpZ25hbC0+c3VtX3NjaGVkX3J1bnRpbWU7Ci0JCS8qIEFkZCBpbiBlYWNoIG90aGVyIGxpdmUgdGhyZWFkLiAgKi8KLQkJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IHApIHsKLQkJCWNwdS0+c2NoZWQgKz0gdC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKLQkJfQotCQljcHUtPnNjaGVkICs9IHNjaGVkX25zKHApOworCQljcHUtPnNjaGVkID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSArIHRhc2tfZGVsdGFfZXhlYyhwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMjY0LDEzICszMDgsMjMgQEAKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgIHVuaW9uIGNwdV90aW1lX2NvdW50ICpjcHUpCiB7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0ID0gY3B1X2Nsb2NrX3NhbXBsZV9ncm91cF9sb2NrZWQoQ1BVQ0xPQ0tfV0hJQ0god2hpY2hfY2xvY2spLCBwLAotCQkJCQkgICAgY3B1KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmY3B1dGltZSk7CisJc3dpdGNoICh3aGljaF9jbG9jaykgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKKwkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVDTE9DS19WSVJUOgorCQljcHUtPmNwdSA9IGNwdXRpbWUudXRpbWU7CisJCWJyZWFrOworCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6CisJCWNwdS0+c2NoZWQgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWUgKyB0YXNrX2RlbHRhX2V4ZWMocCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKIH0KIAogCkBAIC00NzEsODAgKzUyNSwxMSBAQAogfQogdm9pZCBwb3NpeF9jcHVfdGltZXJzX2V4aXRfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCisJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CiAJY2xlYW51cF90aW1lcnModHNrLT5zaWduYWwtPmNwdV90aW1lcnMsCi0JCSAgICAgICBjcHV0aW1lX2FkZCh0c2stPnV0aW1lLCB0c2stPnNpZ25hbC0+dXRpbWUpLAotCQkgICAgICAgY3B1dGltZV9hZGQodHNrLT5zdGltZSwgdHNrLT5zaWduYWwtPnN0aW1lKSwKLQkJICAgICB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUgKyB0c2stPnNpZ25hbC0+c3VtX3NjaGVkX3J1bnRpbWUpOwotfQotCi0KLS8qCi0gKiBTZXQgdGhlIGV4cGlyeSB0aW1lcyBvZiBhbGwgdGhlIHRocmVhZHMgaW4gdGhlIHByb2Nlc3Mgc28gb25lIG9mIHRoZW0KLSAqIHdpbGwgZ28gb2ZmIGJlZm9yZSB0aGUgcHJvY2VzcyBjdW11bGF0aXZlIGV4cGlyeSB0b3RhbCBpcyByZWFjaGVkLgotICovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3RpbWVyX3JlYmFsYW5jZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbG9ja19pZHgsCi0JCQkJICAgIHVuaW9uIGNwdV90aW1lX2NvdW50IGV4cGlyZXMsCi0JCQkJICAgIHVuaW9uIGNwdV90aW1lX2NvdW50IHZhbCkKLXsKLQljcHV0aW1lX3QgdGlja3MsIGxlZnQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG5zLCBuc2xlZnQ7Ci0gCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHA7Ci0JdW5zaWduZWQgaW50IG50aHJlYWRzID0gYXRvbWljX3JlYWQoJnAtPnNpZ25hbC0+bGl2ZSk7Ci0KLQlpZiAoIW50aHJlYWRzKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGNsb2NrX2lkeCkgewotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCWxlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhjcHV0aW1lX3N1YihleHBpcmVzLmNwdSwgdmFsLmNwdSksCi0JCQkJICAgICAgIG50aHJlYWRzKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJdGlja3MgPSBjcHV0aW1lX2FkZChwcm9mX3RpY2tzKHQpLCBsZWZ0KTsKLQkJCQlpZiAoY3B1dGltZV9lcSh0LT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QodC0+aXRfcHJvZl9leHBpcmVzLCB0aWNrcykpIHsKLQkJCQkJdC0+aXRfcHJvZl9leHBpcmVzID0gdGlja3M7Ci0JCQkJfQotCQkJfQotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCWxlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhjcHV0aW1lX3N1YihleHBpcmVzLmNwdSwgdmFsLmNwdSksCi0JCQkJICAgICAgIG50aHJlYWRzKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJdGlja3MgPSBjcHV0aW1lX2FkZCh2aXJ0X3RpY2tzKHQpLCBsZWZ0KTsKLQkJCQlpZiAoY3B1dGltZV9lcSh0LT5pdF92aXJ0X2V4cGlyZXMsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QodC0+aXRfdmlydF9leHBpcmVzLCB0aWNrcykpIHsKLQkJCQkJdC0+aXRfdmlydF9leHBpcmVzID0gdGlja3M7Ci0JCQkJfQotCQkJfQotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1NDSEVEOgotCQluc2xlZnQgPSBleHBpcmVzLnNjaGVkIC0gdmFsLnNjaGVkOwotCQlkb19kaXYobnNsZWZ0LCBudGhyZWFkcyk7Ci0JCW5zbGVmdCA9IG1heF90KHVuc2lnbmVkIGxvbmcgbG9uZywgbnNsZWZ0LCAxKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJbnMgPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lICsgbnNsZWZ0OwotCQkJCWlmICh0LT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKLQkJCQkgICAgdC0+aXRfc2NoZWRfZXhwaXJlcyA+IG5zKSB7Ci0JCQkJCXQtPml0X3NjaGVkX2V4cGlyZXMgPSBuczsKLQkJCQl9Ci0JCQl9Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCX0KKwkJICAgICAgIGNwdXRpbWUudXRpbWUsIGNwdXRpbWUuc3RpbWUsIGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX2RlYWRfdGFzayhzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLCB1bmlvbiBjcHVfdGltZV9jb3VudCBub3cpCkBAIC02MDgsMjkgKzU5MywzMiBAQAogCQkJZGVmYXVsdDoKIAkJCQlCVUcoKTsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJCQlpZiAoY3B1dGltZV9lcShwLT5pdF9wcm9mX2V4cGlyZXMsCisJCQkJaWYgKGNwdXRpbWVfZXEocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAogCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHAtPml0X3Byb2ZfZXhwaXJlcywKKwkJCQkgICAgY3B1dGltZV9ndChwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAsCiAJCQkJCSAgICAgICBudC0+ZXhwaXJlcy5jcHUpKQotCQkJCQlwLT5pdF9wcm9mX2V4cGlyZXMgPSBudC0+ZXhwaXJlcy5jcHU7CisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9CisJCQkJCQludC0+ZXhwaXJlcy5jcHU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCQkJaWYgKGNwdXRpbWVfZXEocC0+aXRfdmlydF9leHBpcmVzLAorCQkJCWlmIChjcHV0aW1lX2VxKHAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwKIAkJCQkJICAgICAgIGNwdXRpbWVfemVybykgfHwKLQkJCQkgICAgY3B1dGltZV9ndChwLT5pdF92aXJ0X2V4cGlyZXMsCisJCQkJICAgIGNwdXRpbWVfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLAogCQkJCQkgICAgICAgbnQtPmV4cGlyZXMuY3B1KSkKLQkJCQkJcC0+aXRfdmlydF9leHBpcmVzID0gbnQtPmV4cGlyZXMuY3B1OworCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPQorCQkJCQkJbnQtPmV4cGlyZXMuY3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJCQlpZiAocC0+aXRfc2NoZWRfZXhwaXJlcyA9PSAwIHx8Ci0JCQkJICAgIHAtPml0X3NjaGVkX2V4cGlyZXMgPiBudC0+ZXhwaXJlcy5zY2hlZCkKLQkJCQkJcC0+aXRfc2NoZWRfZXhwaXJlcyA9IG50LT5leHBpcmVzLnNjaGVkOworCQkJCWlmIChwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID09IDAgfHwKKwkJCQkgICAgcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA+CisJCQkJCQkJbnQtPmV4cGlyZXMuc2NoZWQpCisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPQorCQkJCQkJbnQtPmV4cGlyZXMuc2NoZWQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogRm9yIGEgcHJvY2VzcyB0aW1lciwgd2UgbXVzdCBiYWxhbmNlCi0JCQkgKiBhbGwgdGhlIGxpdmUgdGhyZWFkcycgZXhwaXJhdGlvbnMuCisJCQkgKiBGb3IgYSBwcm9jZXNzIHRpbWVyLCBzZXQgdGhlIGNhY2hlZCBleHBpcmF0aW9uIHRpbWUuCiAJCQkgKi8KIAkJCXN3aXRjaCAoQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKSkgewogCQkJZGVmYXVsdDoKQEAgLTY0MSw3ICs2MjksOSBAQAogCQkJCSAgICBjcHV0aW1lX2x0KHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAogCQkJCQkgICAgICAgdGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWdvdG8gcmViYWxhbmNlOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0KKwkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKIAkJCQlpZiAoIWNwdXRpbWVfZXEocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCiAJCQkJCQljcHV0aW1lX3plcm8pICYmCkBAIC02NTIsMTMgKzY0MiwxMiBAQAogCQkJCWlmIChpICE9IFJMSU1fSU5GSU5JVFkgJiYKIAkJCQkgICAgaSA8PSBjcHV0aW1lX3RvX3NlY3ModGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWdvdG8gcmViYWxhbmNlOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0KKwkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCQlyZWJhbGFuY2U6Ci0JCQkJcHJvY2Vzc190aW1lcl9yZWJhbGFuY2UoCi0JCQkJCXRpbWVyLT5pdC5jcHUudGFzaywKLQkJCQkJQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKSwKLQkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLCBub3cpOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9CisJCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtOTY5LDEzICs5NTgsMTMgQEAKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqY29uc3Qgc2lnID0gdHNrLT5zaWduYWw7CiAKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHJvZl90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKLQkJCXRzay0+aXRfcHJvZl9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CisJCQl0c2stPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IHQtPmV4cGlyZXMuY3B1OwogCQkJYnJlYWs7CiAJCX0KIAkJdC0+ZmlyaW5nID0gMTsKQEAgLTk4NCwxMyArOTczLDEzIEBACiAKIAkrK3RpbWVyczsKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQodmlydF90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKLQkJCXRzay0+aXRfdmlydF9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CisJCQl0c2stPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IHQtPmV4cGlyZXMuY3B1OwogCQkJYnJlYWs7CiAJCX0KIAkJdC0+ZmlyaW5nID0gMTsKQEAgLTk5OSwxMyArOTg4LDEzIEBACiAKIAkrK3RpbWVyczsKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwogCQlpZiAoIS0tbWF4ZmlyZSB8fCB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUgPCB0LT5leHBpcmVzLnNjaGVkKSB7Ci0JCQl0c2stPml0X3NjaGVkX2V4cGlyZXMgPSB0LT5leHBpcmVzLnNjaGVkOworCQkJdHNrLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gdC0+ZXhwaXJlcy5zY2hlZDsKIAkJCWJyZWFrOwogCQl9CiAJCXQtPmZpcmluZyA9IDE7CkBAIC0xMDU1LDEwICsxMDQ0LDEwIEBACiB7CiAJaW50IG1heGZpcmU7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKmNvbnN0IHNpZyA9IHRzay0+c2lnbmFsOwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIHB0aW1lLCB2aXJ0X2V4cGlyZXMsIHByb2ZfZXhwaXJlczsKKwljcHV0aW1lX3QgdXRpbWUsIHB0aW1lLCB2aXJ0X2V4cGlyZXMsIHByb2ZfZXhwaXJlczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWUsIHNjaGVkX2V4cGlyZXM7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRpbWVycyA9IHNpZy0+Y3B1X3RpbWVyczsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAkvKgogCSAqIERvbid0IHNhbXBsZSB0aGUgY3VycmVudCBwcm9jZXNzIENQVSBjbG9ja3MgaWYgdGhlcmUgYXJlIG5vIHRpbWVycy4KQEAgLTEwNzQsMTggKzEwNjMsMTAgQEAKIAkvKgogCSAqIENvbGxlY3QgdGhlIGN1cnJlbnQgcHJvY2VzcyB0b3RhbHMuCiAJICovCi0JdXRpbWUgPSBzaWctPnV0aW1lOwotCXN0aW1lID0gc2lnLT5zdGltZTsKLQlzdW1fc2NoZWRfcnVudGltZSA9IHNpZy0+c3VtX3NjaGVkX3J1bnRpbWU7Ci0JdCA9IHRzazsKLQlkbyB7Ci0JCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHQtPnV0aW1lKTsKLQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdC0+c3RpbWUpOwotCQlzdW1fc2NoZWRfcnVudGltZSArPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lOwotCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JfSB3aGlsZSAodCAhPSB0c2spOwotCXB0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHN0aW1lKTsKLQorCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmNwdXRpbWUpOworCXV0aW1lID0gY3B1dGltZS51dGltZTsKKwlwdGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwlzdW1fc2NoZWRfcnVudGltZSA9IGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZTsKIAltYXhmaXJlID0gMjA7CiAJcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CkBAIC0xMTkzLDYwICsxMTc0LDE4IEBACiAJCX0KIAl9CiAKLQlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgICFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCSAgICBzY2hlZF9leHBpcmVzICE9IDApIHsKLQkJLyoKLQkJICogUmViYWxhbmNlIHRoZSB0aHJlYWRzJyBleHBpcnkgdGltZXMgZm9yIHRoZSByZW1haW5pbmcKLQkJICogcHJvY2VzcyBDUFUgdGltZXJzLgotCQkgKi8KLQotCQljcHV0aW1lX3QgcHJvZl9sZWZ0LCB2aXJ0X2xlZnQsIHRpY2tzOwotCQl1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfbGVmdCwgc2NoZWQ7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBudGhyZWFkcyA9IGF0b21pY19yZWFkKCZzaWctPmxpdmUpOwotCi0JCWlmICghbnRocmVhZHMpCi0JCQlyZXR1cm47Ci0KLQkJcHJvZl9sZWZ0ID0gY3B1dGltZV9zdWIocHJvZl9leHBpcmVzLCB1dGltZSk7Ci0JCXByb2ZfbGVmdCA9IGNwdXRpbWVfc3ViKHByb2ZfbGVmdCwgc3RpbWUpOwotCQlwcm9mX2xlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhwcm9mX2xlZnQsIG50aHJlYWRzKTsKLQkJdmlydF9sZWZ0ID0gY3B1dGltZV9zdWIodmlydF9leHBpcmVzLCB1dGltZSk7Ci0JCXZpcnRfbGVmdCA9IGNwdXRpbWVfZGl2X25vbl96ZXJvKHZpcnRfbGVmdCwgbnRocmVhZHMpOwotCQlpZiAoc2NoZWRfZXhwaXJlcykgewotCQkJc2NoZWRfbGVmdCA9IHNjaGVkX2V4cGlyZXMgLSBzdW1fc2NoZWRfcnVudGltZTsKLQkJCWRvX2RpdihzY2hlZF9sZWZ0LCBudGhyZWFkcyk7Ci0JCQlzY2hlZF9sZWZ0ID0gbWF4X3QodW5zaWduZWQgbG9uZyBsb25nLCBzY2hlZF9sZWZ0LCAxKTsKLQkJfSBlbHNlIHsKLQkJCXNjaGVkX2xlZnQgPSAwOwotCQl9Ci0JCXQgPSB0c2s7Ci0JCWRvIHsKLQkJCWlmICh1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJCWNvbnRpbnVlOwotCi0JCQl0aWNrcyA9IGNwdXRpbWVfYWRkKGNwdXRpbWVfYWRkKHQtPnV0aW1lLCB0LT5zdGltZSksCi0JCQkJCSAgICBwcm9mX2xlZnQpOwotCQkJaWYgKCFjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkJICAgIChjcHV0aW1lX2VxKHQtPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkJICAgICBjcHV0aW1lX2d0KHQtPml0X3Byb2ZfZXhwaXJlcywgdGlja3MpKSkgewotCQkJCXQtPml0X3Byb2ZfZXhwaXJlcyA9IHRpY2tzOwotCQkJfQotCi0JCQl0aWNrcyA9IGNwdXRpbWVfYWRkKHQtPnV0aW1lLCB2aXJ0X2xlZnQpOwotCQkJaWYgKCFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkJICAgIChjcHV0aW1lX2VxKHQtPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkJICAgICBjcHV0aW1lX2d0KHQtPml0X3ZpcnRfZXhwaXJlcywgdGlja3MpKSkgewotCQkJCXQtPml0X3ZpcnRfZXhwaXJlcyA9IHRpY2tzOwotCQkJfQotCi0JCQlzY2hlZCA9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWUgKyBzY2hlZF9sZWZ0OwotCQkJaWYgKHNjaGVkX2V4cGlyZXMgJiYgKHQtPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCQkJCQkgICAgICB0LT5pdF9zY2hlZF9leHBpcmVzID4gc2NoZWQpKSB7Ci0JCQkJdC0+aXRfc2NoZWRfZXhwaXJlcyA9IHNjaGVkOwotCQkJfQotCQl9IHdoaWxlICgodCA9IG5leHRfdGhyZWFkKHQpKSAhPSB0c2spOwotCX0KKwlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgIChjcHV0aW1lX2VxKHNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICBjcHV0aW1lX2d0KHNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLCBwcm9mX2V4cGlyZXMpKSkKKwkJc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBwcm9mX2V4cGlyZXM7CisJaWYgKCFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgorCSAgICAoY3B1dGltZV9lcShzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwgY3B1dGltZV96ZXJvKSB8fAorCSAgICAgY3B1dGltZV9ndChzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwgdmlydF9leHBpcmVzKSkpCisJCXNpZy0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gdmlydF9leHBpcmVzOworCWlmIChzY2hlZF9leHBpcmVzICE9IDAgJiYKKwkgICAgKHNpZy0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9PSAwIHx8CisJICAgICBzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPiBzY2hlZF9leHBpcmVzKSkKKwkJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gc2NoZWRfZXhwaXJlczsKIH0KIAogLyoKQEAgLTEzMTQsNiArMTI1Myw4NiBAQAogCSsrdGltZXItPml0X3JlcXVldWVfcGVuZGluZzsKIH0KIAorLyoqCisgKiB0YXNrX2NwdXRpbWVfemVybyAtIENoZWNrIGEgdGFza19jcHV0aW1lIHN0cnVjdCBmb3IgYWxsIHplcm8gZmllbGRzLgorICoKKyAqIEBjcHV0aW1lOglUaGUgc3RydWN0IHRvIGNvbXBhcmUuCisgKgorICogQ2hlY2tzIEBjcHV0aW1lIHRvIHNlZSBpZiBhbGwgZmllbGRzIGFyZSB6ZXJvLiAgUmV0dXJucyB0cnVlIGlmIGFsbCBmaWVsZHMKKyAqIGFyZSB6ZXJvLCBmYWxzZSBpZiBhbnkgZmllbGQgaXMgbm9uemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19jcHV0aW1lX3plcm8oY29uc3Qgc3RydWN0IHRhc2tfY3B1dGltZSAqY3B1dGltZSkKK3sKKwlpZiAoY3B1dGltZV9lcShjcHV0aW1lLT51dGltZSwgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2VxKGNwdXRpbWUtPnN0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWUtPnN1bV9leGVjX3J1bnRpbWUgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGFza19jcHV0aW1lX2V4cGlyZWQgLSBDb21wYXJlIHR3byB0YXNrX2NwdXRpbWUgZW50aXRpZXMuCisgKgorICogQHNhbXBsZToJVGhlIHRhc2tfY3B1dGltZSBzdHJ1Y3R1cmUgdG8gYmUgY2hlY2tlZCBmb3IgZXhwaXJhdGlvbi4KKyAqIEBleHBpcmVzOglFeHBpcmF0aW9uIHRpbWVzLCBhZ2FpbnN0IHdoaWNoIEBzYW1wbGUgd2lsbCBiZSBjaGVja2VkLgorICoKKyAqIENoZWNrcyBAc2FtcGxlIGFnYWluc3QgQGV4cGlyZXMgdG8gc2VlIGlmIGFueSBmaWVsZCBvZiBAc2FtcGxlIGhhcyBleHBpcmVkLgorICogUmV0dXJucyB0cnVlIGlmIGFueSBmaWVsZCBvZiB0aGUgZm9ybWVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZworICogZmllbGQgb2YgdGhlIGxhdHRlciBpZiB0aGUgbGF0dGVyIGZpZWxkIGlzIHNldC4gIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2NwdXRpbWVfZXhwaXJlZChjb25zdCBzdHJ1Y3QgdGFza19jcHV0aW1lICpzYW1wbGUsCisJCQkJCWNvbnN0IHN0cnVjdCB0YXNrX2NwdXRpbWUgKmV4cGlyZXMpCit7CisJaWYgKCFjcHV0aW1lX2VxKGV4cGlyZXMtPnV0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWVfZ2Uoc2FtcGxlLT51dGltZSwgZXhwaXJlcy0+dXRpbWUpKQorCQlyZXR1cm4gMTsKKwlpZiAoIWNwdXRpbWVfZXEoZXhwaXJlcy0+c3RpbWUsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9nZShjcHV0aW1lX2FkZChzYW1wbGUtPnV0aW1lLCBzYW1wbGUtPnN0aW1lKSwKKwkJICAgICAgIGV4cGlyZXMtPnN0aW1lKSkKKwkJcmV0dXJuIDE7CisJaWYgKGV4cGlyZXMtPnN1bV9leGVjX3J1bnRpbWUgIT0gMCAmJgorCSAgICBzYW1wbGUtPnN1bV9leGVjX3J1bnRpbWUgPj0gZXhwaXJlcy0+c3VtX2V4ZWNfcnVudGltZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZmFzdHBhdGhfdGltZXJfY2hlY2sgLSBQT1NJWCBDUFUgdGltZXJzIGZhc3QgcGF0aC4KKyAqCisgKiBAdHNrOglUaGUgdGFzayAodGhyZWFkKSBiZWluZyBjaGVja2VkLgorICoKKyAqIENoZWNrIHRoZSB0YXNrIGFuZCB0aHJlYWQgZ3JvdXAgdGltZXJzLiAgSWYgYm90aCBhcmUgemVybyAodGhlcmUgYXJlIG5vCisgKiB0aW1lcnMgc2V0KSByZXR1cm4gZmFsc2UuICBPdGhlcndpc2Ugc25hcHNob3QgdGhlIHRhc2sgYW5kIHRocmVhZCBncm91cAorICogdGltZXJzIGFuZCBjb21wYXJlIHRoZW0gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBleHBpcmF0aW9uIHRpbWVzLiAgUmV0dXJuCisgKiB0cnVlIGlmIGEgdGltZXIgaGFzIGV4cGlyZWQsIGVsc2UgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0cGF0aF90aW1lcl9jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLT5zaWduYWw7CisKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybiAwOworCisJaWYgKCF0YXNrX2NwdXRpbWVfemVybygmdHNrLT5jcHV0aW1lX2V4cGlyZXMpKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGFza19zYW1wbGUgPSB7CisJCQkudXRpbWUgPSB0c2stPnV0aW1lLAorCQkJLnN0aW1lID0gdHNrLT5zdGltZSwKKwkJCS5zdW1fZXhlY19ydW50aW1lID0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lCisJCX07CisKKwkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZ0YXNrX3NhbXBsZSwgJnRzay0+Y3B1dGltZV9leHBpcmVzKSkKKwkJCXJldHVybiAxOworCX0KKwlpZiAoIXRhc2tfY3B1dGltZV96ZXJvKCZzaWctPmNwdXRpbWVfZXhwaXJlcykpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSBncm91cF9zYW1wbGU7CisKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmZ3JvdXBfc2FtcGxlKTsKKwkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBpcnEgaGFuZGxlciBoYXMKICAqIGFscmVhZHkgdXBkYXRlZCBvdXIgY291bnRzLiAgV2UgbmVlZCB0byBjaGVjayBpZiBhbnkgdGltZXJzIGZpcmUgbm93LgpAQCAtMTMyNiw0MiArMTM0NSwzMSBAQAogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0jZGVmaW5lIFVORVhQSVJFRChjbG9jaykgXAotCQkoY3B1dGltZV9lcSh0c2stPml0XyMjY2xvY2sjI19leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8IFwKLQkJIGNwdXRpbWVfbHQoY2xvY2sjI190aWNrcyh0c2spLCB0c2stPml0XyMjY2xvY2sjI19leHBpcmVzKSkKLQotCWlmIChVTkVYUElSRUQocHJvZikgJiYgVU5FWFBJUkVEKHZpcnQpICYmCi0JICAgICh0c2stPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCSAgICAgdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lIDwgdHNrLT5pdF9zY2hlZF9leHBpcmVzKSkKKwkvKgorCSAqIFRoZSBmYXN0IHBhdGggY2hlY2tzIHRoYXQgdGhlcmUgYXJlIG5vIGV4cGlyZWQgdGhyZWFkIG9yIHRocmVhZAorCSAqIGdyb3VwIHRpbWVycy4gIElmIHRoYXQncyBzbywganVzdCByZXR1cm4uCisJICovCisJaWYgKCFmYXN0cGF0aF90aW1lcl9jaGVjayh0c2spKQogCQlyZXR1cm47CiAKLSN1bmRlZglVTkVYUElSRUQKKwlzcGluX2xvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJLyoKKwkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+c2lnbmFsLT5jcHVfdGltZXJzW05dIGFuZAorCSAqIHRzay0+Y3B1X3RpbWVyc1tOXSBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZAorCSAqIHB1dCB0aGVtIG9uIHRoZSBmaXJpbmcgbGlzdC4KKwkgKi8KKwljaGVja190aHJlYWRfdGltZXJzKHRzaywgJmZpcmluZyk7CisJY2hlY2tfcHJvY2Vzc190aW1lcnModHNrLCAmZmlyaW5nKTsKIAogCS8qCi0JICogRG91YmxlLWNoZWNrIHdpdGggbG9ja3MgaGVsZC4KKwkgKiBXZSBtdXN0IHJlbGVhc2UgdGhlc2UgbG9ja3MgYmVmb3JlIHRha2luZyBhbnkgdGltZXIncyBsb2NrLgorCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKKwkgKiBzaWdsb2NrIG5vdyBwcm90ZWN0cyBvdXIgcHJpdmF0ZSBmaXJpbmcgbGlzdC4gIFdlIGhhdmUgc2V0CisJICogdGhlIGZpcmluZyBmbGFnIGluIGVhY2ggdGltZXIsIHNvIHRoYXQgYSBkZWxldGlvbiBhdHRlbXB0CisJICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCisJICogc3BpbiB1bnRpbCB3ZSd2ZSB0YWtlbiBjYXJlIG9mIHRoYXQgdGltZXIgYmVsb3cuCiAJICovCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlpZiAobGlrZWx5KHRzay0+c2lnbmFsICE9IE5VTEwpKSB7Ci0JCXNwaW5fbG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCQkvKgotCQkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+Y3B1X3RpbWVyc1tOXSBhbmQgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0KLQkJICogYWxsIHRoZSB0aW1lcnMgdGhhdCBhcmUgZmlyaW5nLCBhbmQgcHV0IHRoZW0gb24gdGhlIGZpcmluZyBsaXN0LgotCQkgKi8KLQkJY2hlY2tfdGhyZWFkX3RpbWVycyh0c2ssICZmaXJpbmcpOwotCQljaGVja19wcm9jZXNzX3RpbWVycyh0c2ssICZmaXJpbmcpOwotCi0JCS8qCi0JCSAqIFdlIG11c3QgcmVsZWFzZSB0aGVzZSBsb2NrcyBiZWZvcmUgdGFraW5nIGFueSB0aW1lcidzIGxvY2suCi0JCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKLQkJICogc2lnbG9jayBub3cgcHJvdGVjdHMgb3VyIHByaXZhdGUgZmlyaW5nIGxpc3QuICBXZSBoYXZlIHNldAotCQkgKiB0aGUgZmlyaW5nIGZsYWcgaW4gZWFjaCB0aW1lciwgc28gdGhhdCBhIGRlbGV0aW9uIGF0dGVtcHQKLQkJICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCi0JCSAqIHNwaW4gdW50aWwgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGF0IHRpbWVyIGJlbG93LgotCQkgKi8KLQkJc3Bpbl91bmxvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JfQotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAogCS8qCiAJICogTm93IHRoYXQgYWxsIHRoZSB0aW1lcnMgb24gb3VyIGxpc3QgaGF2ZSB0aGUgZmlyaW5nIGZsYWcsCkBAIC0xMzg5LDEwICsxMzk3LDkgQEAKIAogLyoKICAqIFNldCBvbmUgb2YgdGhlIHByb2Nlc3Mtd2lkZSBzcGVjaWFsIGNhc2UgQ1BVIHRpbWVycy4KLSAqIFRoZSB0YXNrbGlzdF9sb2NrIGFuZCB0c2stPnNpZ2hhbmQtPnNpZ2xvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuCi0gKiBUaGUgb2xkdmFsIGFyZ3VtZW50IGlzIG51bGwgZm9yIHRoZSBSTElNSVRfQ1BVIHRpbWVyLCB3aGVyZSAqbmV3dmFsIGlzCi0gKiBhYnNvbHV0ZTsgbm9uLW51bGwgZm9yIElUSU1FUl8qLCB3aGVyZSAqbmV3dmFsIGlzIHJlbGF0aXZlIGFuZCB3ZSB1cGRhdGUKLSAqIGl0IHRvIGJlIGFic29sdXRlLCAqb2xkdmFsIGlzIGFic29sdXRlIGFuZCB3ZSB1cGRhdGUgaXQgdG8gYmUgcmVsYXRpdmUuCisgKiBUaGUgdHNrLT5zaWdoYW5kLT5zaWdsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLgorICogVGhlICpuZXd2YWwgYXJndW1lbnQgaXMgcmVsYXRpdmUgYW5kIHdlIHVwZGF0ZSBpdCB0byBiZSBhYnNvbHV0ZSwgKm9sZHZhbAorICogaXMgYWJzb2x1dGUgYW5kIHdlIHVwZGF0ZSBpdCB0byBiZSByZWxhdGl2ZS4KICAqLwogdm9pZCBzZXRfcHJvY2Vzc19jcHVfdGltZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjbG9ja19pZHgsCiAJCQkgICBjcHV0aW1lX3QgKm5ld3ZhbCwgY3B1dGltZV90ICpvbGR2YWwpCkBAIC0xNDAxLDcgKzE0MDgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKIAlCVUdfT04oY2xvY2tfaWR4ID09IENQVUNMT0NLX1NDSEVEKTsKLQljcHVfY2xvY2tfc2FtcGxlX2dyb3VwX2xvY2tlZChjbG9ja19pZHgsIHRzaywgJm5vdyk7CisJY3B1X2Nsb2NrX3NhbXBsZV9ncm91cChjbG9ja19pZHgsIHRzaywgJm5vdyk7CiAKIAlpZiAob2xkdmFsKSB7CiAJCWlmICghY3B1dGltZV9lcSgqb2xkdmFsLCBjcHV0aW1lX3plcm8pKSB7CkBAIC0xNDM1LDEzICsxNDQyLDE0IEBACiAJICAgIGNwdXRpbWVfZ2UobGlzdF9maXJzdF9lbnRyeShoZWFkLAogCQkJCSAgc3RydWN0IGNwdV90aW1lcl9saXN0LCBlbnRyeSktPmV4cGlyZXMuY3B1LAogCQkgICAgICAgKm5ld3ZhbCkpIHsKLQkJLyoKLQkJICogUmVqaWdnZXIgZWFjaCB0aHJlYWQncyBleHBpcnkgdGltZSBzbyB0aGF0IG9uZSB3aWxsCi0JCSAqIG5vdGljZSBiZWZvcmUgd2UgaGl0IHRoZSBwcm9jZXNzLWN1bXVsYXRpdmUgZXhwaXJ5IHRpbWUuCi0JCSAqLwotCQl1bmlvbiBjcHVfdGltZV9jb3VudCBleHBpcmVzID0geyAuc2NoZWQgPSAwIH07Ci0JCWV4cGlyZXMuY3B1ID0gKm5ld3ZhbDsKLQkJcHJvY2Vzc190aW1lcl9yZWJhbGFuY2UodHNrLCBjbG9ja19pZHgsIGV4cGlyZXMsIG5vdyk7CisJCXN3aXRjaCAoY2xvY2tfaWR4KSB7CisJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKKwkJCXRzay0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSAqbmV3dmFsOworCQkJYnJlYWs7CisJCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKKwkJCXRzay0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSAqbmV3dmFsOworCQkJYnJlYWs7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCA1MTMxZTU0Li5iOTMxZDdjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC0yMjMsNiArMjIzLDE1IEBACiB9CiAKIC8qCisgKiBHZXQgbW9ub3RvbmljIHRpbWUgZm9yIHBvc2l4IHRpbWVycworICovCitzdGF0aWMgaW50IHBvc2l4X2dldF9tb25vdG9uaWNfcmF3KGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCkKK3sKKwlnZXRyYXdtb25vdG9uaWModHApOworCXJldHVybiAwOworfQorCisvKgogICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nLCB3ZWxsLCBqdXN0IGV2ZXJ5dGhpbmcgaW4gUG9zaXggY2xvY2tzL3RpbWVycyA7KQogICovCiBzdGF0aWMgX19pbml0IGludCBpbml0X3Bvc2l4X3RpbWVycyh2b2lkKQpAQCAtMjM1LDkgKzI0NCwxNSBAQAogCQkuY2xvY2tfZ2V0ID0gcG9zaXhfa3RpbWVfZ2V0X3RzLAogCQkuY2xvY2tfc2V0ID0gZG9fcG9zaXhfY2xvY2tfbm9zZXR0aW1lLAogCX07CisJc3RydWN0IGtfY2xvY2sgY2xvY2tfbW9ub3RvbmljX3JhdyA9IHsKKwkJLmNsb2NrX2dldHJlcyA9IGhydGltZXJfZ2V0X3JlcywKKwkJLmNsb2NrX2dldCA9IHBvc2l4X2dldF9tb25vdG9uaWNfcmF3LAorCQkuY2xvY2tfc2V0ID0gZG9fcG9zaXhfY2xvY2tfbm9zZXR0aW1lLAorCX07CiAKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19SRUFMVElNRSwgJmNsb2NrX3JlYWx0aW1lKTsKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19NT05PVE9OSUMsICZjbG9ja19tb25vdG9uaWMpOworCXJlZ2lzdGVyX3Bvc2l4X2Nsb2NrKENMT0NLX01PTk9UT05JQ19SQVcsICZjbG9ja19tb25vdG9uaWNfcmF3KTsKIAogCXBvc2l4X3RpbWVyc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwb3NpeF90aW1lcnNfY2FjaGUiLAogCQkJCQlzaXplb2YgKHN0cnVjdCBrX2l0aW1lciksIDAsIFNMQUJfUEFOSUMsCkBAIC0yOTgsNiArMzEzLDcgQEAKIAogaW50IHBvc2l4X3RpbWVyX2V2ZW50KHN0cnVjdCBrX2l0aW1lciAqdGltciwgaW50IHNpX3ByaXZhdGUpCiB7CisJaW50IHNoYXJlZCwgcmV0OwogCS8qCiAJICogRklYTUU6IGlmIC0+c2lncSBpcyBxdWV1ZWQgd2UgY2FuIHJhY2Ugd2l0aAogCSAqIGRlcXVldWVfc2lnbmFsKCktPmRvX3NjaGVkdWxlX25leHRfdGltZXIoKS4KQEAgLTMxMSwyNSArMzI3LDEwIEBACiAJICovCiAJdGltci0+c2lncS0+aW5mby5zaV9zeXNfcHJpdmF0ZSA9IHNpX3ByaXZhdGU7CiAKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX3NpZ25vID0gdGltci0+aXRfc2lnZXZfc2lnbm87Ci0JdGltci0+c2lncS0+aW5mby5zaV9jb2RlID0gU0lfVElNRVI7Ci0JdGltci0+c2lncS0+aW5mby5zaV90aWQgPSB0aW1yLT5pdF9pZDsKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX3ZhbHVlID0gdGltci0+aXRfc2lnZXZfdmFsdWU7Ci0KLQlpZiAodGltci0+aXRfc2lnZXZfbm90aWZ5ICYgU0lHRVZfVEhSRUFEX0lEKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyOwotCQlpbnQgcmV0ID0gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCAwKTsKLQotCQlpZiAobGlrZWx5KHJldCA+PSAwKSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdGltci0+aXRfc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwotCQlsZWFkZXIgPSB0aW1yLT5pdF9wcm9jZXNzLT5ncm91cF9sZWFkZXI7Ci0JCXB1dF90YXNrX3N0cnVjdCh0aW1yLT5pdF9wcm9jZXNzKTsKLQkJdGltci0+aXRfcHJvY2VzcyA9IGxlYWRlcjsKLQl9Ci0KLQlyZXR1cm4gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCAxKTsKKwlzaGFyZWQgPSAhKHRpbXItPml0X3NpZ2V2X25vdGlmeSAmIFNJR0VWX1RIUkVBRF9JRCk7CisJcmV0ID0gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCBzaGFyZWQpOworCS8qIElmIHdlIGZhaWxlZCB0byBzZW5kIHRoZSBzaWduYWwgdGhlIHRpbWVyIHN0b3BzLiAqLworCXJldHVybiByZXQgPiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG9zaXhfdGltZXJfZXZlbnQpOwogCkBAIC00NjgsMTEgKzQ2OSw5IEBACiAJCSBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp0aW1lcl9ldmVudF9zcGVjLAogCQkgdGltZXJfdCBfX3VzZXIgKiBjcmVhdGVkX3RpbWVyX2lkKQogewotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGtfaXRpbWVyICpuZXdfdGltZXIgPSBOVUxMOwotCWludCBuZXdfdGltZXJfaWQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwcm9jZXNzID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBrX2l0aW1lciAqbmV3X3RpbWVyOworCWludCBlcnJvciwgbmV3X3RpbWVyX2lkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJvY2VzczsKIAlzaWdldmVudF90IGV2ZW50OwogCWludCBpdF9pZF9zZXQgPSBJVF9JRF9OT1RfU0VUOwogCkBAIC00OTAsMTIgKzQ4OSwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl9sb2NrX2lycSgmaWRyX2xvY2spOwotCWVycm9yID0gaWRyX2dldF9uZXcoJnBvc2l4X3RpbWVyc19pZCwgKHZvaWQgKikgbmV3X3RpbWVyLAotCQkJICAgICZuZXdfdGltZXJfaWQpOworCWVycm9yID0gaWRyX2dldF9uZXcoJnBvc2l4X3RpbWVyc19pZCwgbmV3X3RpbWVyLCAmbmV3X3RpbWVyX2lkKTsKIAlzcGluX3VubG9ja19pcnEoJmlkcl9sb2NrKTsKLQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKLQkJZ290byByZXRyeTsKLQllbHNlIGlmIChlcnJvcikgeworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKKwkJCWdvdG8gcmV0cnk7CiAJCS8qCiAJCSAqIFdlaXJkIGxvb2tpbmcsIGJ1dCB3ZSByZXR1cm4gRUFHQUlOIGlmIHRoZSBJRFIgaXMKIAkJICogZnVsbCAocHJvcGVyIFBPU0lYIHJldHVybiB2YWx1ZSBmb3IgdGhpcykKQEAgLTUyNiw2NyArNTI0LDQzIEBACiAJCQllcnJvciA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQluZXdfdGltZXItPml0X3NpZ2V2X25vdGlmeSA9IGV2ZW50LnNpZ2V2X25vdGlmeTsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl9zaWdubyA9IGV2ZW50LnNpZ2V2X3NpZ25vOwotCQluZXdfdGltZXItPml0X3NpZ2V2X3ZhbHVlID0gZXZlbnQuc2lnZXZfdmFsdWU7Ci0KLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJaWYgKChwcm9jZXNzID0gZ29vZF9zaWdldmVudCgmZXZlbnQpKSkgewotCQkJLyoKLQkJCSAqIFdlIG1heSBiZSBzZXR0aW5nIHVwIHRoaXMgcHJvY2VzcyBmb3IgYW5vdGhlcgotCQkJICogdGhyZWFkLiAgSXQgbWF5IGJlIGV4aXRpbmcuICBUbyBjYXRjaCB0aGlzCi0JCQkgKiBjYXNlIHRoZSB3ZSBjaGVjayB0aGUgUEZfRVhJVElORyBmbGFnLiAgSWYKLQkJCSAqIHRoZSBmbGFnIGlzIG5vdCBzZXQsIHRoZSBzaWdsb2NrIHdpbGwgY2F0Y2gKLQkJCSAqIGhpbSBiZWZvcmUgaXQgaXMgdG9vIGxhdGUgKGluIGV4aXRfaXRpbWVycykuCi0JCQkgKgotCQkJICogVGhlIGV4ZWMgY2FzZSBpcyBhIGJpdCBtb3JlIGludmxvdmVkIGJ1dCBlYXN5Ci0JCQkgKiB0byBjb2RlLiAgSWYgdGhlIHByb2Nlc3MgaXMgaW4gb3VyIHRocmVhZAotCQkJICogZ3JvdXAgKGFuZCBpdCBtdXN0IGJlIG9yIHdlIHdvdWxkIG5vdCBhbGxvdwotCQkJICogaXQgaGVyZSkgYW5kIGlzIGRvaW5nIGFuIGV4ZWMsIGl0IHdpbGwgY2F1c2UKLQkJCSAqIHVzIHRvIGJlIGtpbGxlZC4gIEluIHRoaXMgY2FzZSBpdCB3aWxsIHdhaXQKLQkJCSAqIGZvciB1cyB0byBkaWUgd2hpY2ggbWVhbnMgd2UgY2FuIGZpbmlzaCB0aGlzCi0JCQkgKiBsaW5rYWdlIHdpdGggb3VyIGxhc3QgZ2FzcC4gSS5lLiBubyBjb2RlIDopCi0JCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQlpZiAoIShwcm9jZXNzLT5mbGFncyAmIFBGX0VYSVRJTkcpKSB7Ci0JCQkJbmV3X3RpbWVyLT5pdF9wcm9jZXNzID0gcHJvY2VzczsKLQkJCQlsaXN0X2FkZCgmbmV3X3RpbWVyLT5saXN0LAotCQkJCQkgJnByb2Nlc3MtPnNpZ25hbC0+cG9zaXhfdGltZXJzKTsKLQkJCQlpZiAobmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQkJCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJfSBlbHNlIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQkJcHJvY2VzcyA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXByb2Nlc3MgPSBnb29kX3NpZ2V2ZW50KCZldmVudCk7CisJCWlmIChwcm9jZXNzKQorCQkJZ2V0X3Rhc2tfc3RydWN0KHByb2Nlc3MpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWYgKCFwcm9jZXNzKSB7CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwotCQluZXdfdGltZXItPml0X3NpZ2V2X3NpZ25vID0gU0lHQUxSTTsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl92YWx1ZS5zaXZhbF9pbnQgPSBuZXdfdGltZXItPml0X2lkOworCQlldmVudC5zaWdldl9ub3RpZnkgPSBTSUdFVl9TSUdOQUw7CisJCWV2ZW50LnNpZ2V2X3NpZ25vID0gU0lHQUxSTTsKKwkJZXZlbnQuc2lnZXZfdmFsdWUuc2l2YWxfaW50ID0gbmV3X3RpbWVyLT5pdF9pZDsKIAkJcHJvY2VzcyA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJbmV3X3RpbWVyLT5pdF9wcm9jZXNzID0gcHJvY2VzczsKLQkJbGlzdF9hZGQoJm5ld190aW1lci0+bGlzdCwgJnByb2Nlc3MtPnNpZ25hbC0+cG9zaXhfdGltZXJzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7CiAJfQogCisJbmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgICAgID0gZXZlbnQuc2lnZXZfbm90aWZ5OworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV9zaWdubyA9IGV2ZW50LnNpZ2V2X3NpZ25vOworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV92YWx1ZSA9IGV2ZW50LnNpZ2V2X3ZhbHVlOworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV90aWQgICA9IG5ld190aW1lci0+aXRfaWQ7CisJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX2NvZGUgID0gU0lfVElNRVI7CisKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwluZXdfdGltZXItPml0X3Byb2Nlc3MgPSBwcm9jZXNzOworCWxpc3RfYWRkKCZuZXdfdGltZXItPmxpc3QsICZjdXJyZW50LT5zaWduYWwtPnBvc2l4X3RpbWVycyk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCXJldHVybiAwOwogIAkvKgogCSAqIEluIHRoZSBjYXNlIG9mIHRoZSB0aW1lciBiZWxvbmdpbmcgdG8gYW5vdGhlciB0YXNrLCBhZnRlcgogCSAqIHRoZSB0YXNrIGlzIHVubG9ja2VkLCB0aGUgdGltZXIgaXMgb3duZWQgYnkgdGhlIG90aGVyIHRhc2sKIAkgKiBhbmQgbWF5IGNlYXNlIHRvIGV4aXN0IGF0IGFueSB0aW1lLiAgRG9uJ3QgdXNlIG9yIG1vZGlmeQogCSAqIG5ld190aW1lciBhZnRlciB0aGUgdW5sb2NrIGNhbGwuCiAJICovCi0KIG91dDoKLQlpZiAoZXJyb3IpCi0JCXJlbGVhc2VfcG9zaXhfdGltZXIobmV3X3RpbWVyLCBpdF9pZF9zZXQpOwotCisJcmVsZWFzZV9wb3NpeF90aW1lcihuZXdfdGltZXIsIGl0X2lkX3NldCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01OTcsNyArNTcxLDcgQEAKICAqIHRoZSBmaW5kIHRvIHRoZSB0aW1lciBsb2NrLiAgVG8gYXZvaWQgYSBkZWFkIGxvY2ssIHRoZSB0aW1lciBpZCBNVVNUCiAgKiBiZSByZWxlYXNlIHdpdGggb3V0IGhvbGRpbmcgdGhlIHRpbWVyIGxvY2suCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qga19pdGltZXIgKiBsb2NrX3RpbWVyKHRpbWVyX3QgdGltZXJfaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RhdGljIHN0cnVjdCBrX2l0aW1lciAqbG9ja190aW1lcih0aW1lcl90IHRpbWVyX2lkLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzdHJ1Y3Qga19pdGltZXIgKnRpbXI7CiAJLyoKQEAgLTYwNSwyMyArNTc5LDIwIEBACiAJICogZmxhZ3MgcGFydCBvdmVyIHRvIHRoZSB0aW1lciBsb2NrLiAgTXVzdCBub3QgbGV0IGludGVycnVwdHMgaW4KIAkgKiB3aGlsZSB3ZSBhcmUgbW92aW5nIHRoZSBsb2NrLgogCSAqLwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwotCXRpbXIgPSAoc3RydWN0IGtfaXRpbWVyICopIGlkcl9maW5kKCZwb3NpeF90aW1lcnNfaWQsIChpbnQpIHRpbWVyX2lkKTsKKwl0aW1yID0gaWRyX2ZpbmQoJnBvc2l4X3RpbWVyc19pZCwgKGludCl0aW1lcl9pZCk7CiAJaWYgKHRpbXIpIHsKIAkJc3Bpbl9sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKLQotCQlpZiAoKHRpbXItPml0X2lkICE9IHRpbWVyX2lkKSB8fCAhKHRpbXItPml0X3Byb2Nlc3MpIHx8Ci0JCQkJIXNhbWVfdGhyZWFkX2dyb3VwKHRpbXItPml0X3Byb2Nlc3MsIGN1cnJlbnQpKSB7Ci0JCQlzcGluX3VubG9jaygmdGltci0+aXRfbG9jayk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHJfbG9jaywgKmZsYWdzKTsKLQkJCXRpbXIgPSBOVUxMOwotCQl9IGVsc2UKKwkJaWYgKHRpbXItPml0X3Byb2Nlc3MgJiYKKwkJICAgIHNhbWVfdGhyZWFkX2dyb3VwKHRpbXItPml0X3Byb2Nlc3MsIGN1cnJlbnQpKSB7CiAJCQlzcGluX3VubG9jaygmaWRyX2xvY2spOwotCX0gZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHJfbG9jaywgKmZsYWdzKTsKKwkJCXJldHVybiB0aW1yOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRyX2xvY2ssICpmbGFncyk7CiAKLQlyZXR1cm4gdGltcjsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTg2Miw4ICs4MzMsNyBAQAogCSAqIFRoaXMga2VlcHMgYW55IHRhc2tzIHdhaXRpbmcgb24gdGhlIHNwaW4gbG9jayBmcm9tIHRoaW5raW5nCiAJICogdGhleSBnb3Qgc29tZXRoaW5nIChzZWUgdGhlIGxvY2sgY29kZSBhYm92ZSkuCiAJICovCi0JaWYgKHRpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOworCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CiAJdGltZXItPml0X3Byb2Nlc3MgPSBOVUxMOwogCiAJdW5sb2NrX3RpbWVyKHRpbWVyLCBmbGFncyk7CkBAIC04OTAsOCArODYwLDcgQEAKIAkgKiBUaGlzIGtlZXBzIGFueSB0YXNrcyB3YWl0aW5nIG9uIHRoZSBzcGluIGxvY2sgZnJvbSB0aGlua2luZwogCSAqIHRoZXkgZ290IHNvbWV0aGluZyAoc2VlIHRoZSBsb2NrIGNvZGUgYWJvdmUpLgogCSAqLwotCWlmICh0aW1lci0+aXRfc2lnZXZfbm90aWZ5ID09IChTSUdFVl9TSUdOQUx8U0lHRVZfVEhSRUFEX0lEKSkKLQkJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKKwlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOwogCXRpbWVyLT5pdF9wcm9jZXNzID0gTlVMTDsKIAogCXVubG9ja190aW1lcih0aW1lciwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggYmJkODVjNi4uMzMxZjk4MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtNTIwLDYgKzUyMSwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBFeGl0OwogCisJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CisJaWYgKGVycm9yKQorCQlnb3RvIEV4aXQ7CisKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzICovCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCkBAIC01NTgsNiArNTYzLDcgQEAKIAl0aGF3X3Byb2Nlc3NlcygpOwogIEZpbmlzaDoKIAlmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CisJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAgRXhpdDoKIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1BPU1RfSElCRVJOQVRJT04pOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpAQCAtNjM0LDYgKzY0MCwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBGaW5pc2g7CiAKKwllcnJvciA9IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRmluaXNoOworCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRmluaXNoOwpAQCAtNjU2LDYgKzY2Niw3IEBACiAJdGhhd19wcm9jZXNzZXMoKTsKICBEb25lOgogCWZyZWVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKICBGaW5pc2g6CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1JFU1RPUkUpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggNTQwYjE2Yi4uMTkxMjJjZiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgpAQCAtMjM3LDYgKzIzOCwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBGaW5pc2g7CiAKKwllcnJvciA9IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRmluaXNoOworCiAJaWYgKHN1c3BlbmRfZnJlZXplX3Byb2Nlc3NlcygpKSB7CiAJCWVycm9yID0gLUVBR0FJTjsKIAkJZ290byBUaGF3OwpAQCAtMjU2LDYgKzI2MSw3IEBACiAKICBUaGF3OgogCXN1c3BlbmRfdGhhd19wcm9jZXNzZXMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKICBGaW5pc2g6CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1NVU1BFTkQpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpAQCAtMzc2LDYgKzM4Miw3IEBACiBzdGF0aWMgdm9pZCBzdXNwZW5kX2ZpbmlzaCh2b2lkKQogewogCXN1c3BlbmRfdGhhd19wcm9jZXNzZXMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1BPU1RfU1VTUEVORCk7CiAJcG1fcmVzdG9yZV9jb25zb2xlKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCAyNzg5NDZhLi5jYTYzNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTI4LDEyMSArMjgsNiBAQAogCXJldHVybiAxOwogfQogCi0vKgotICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKLXsKLQlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7Ci0JCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKLQkJd21iKCk7Ci0JfQotCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOwotfQotCi0vKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KLXZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCi17Ci0JLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCi0JICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KLQlsb25nIHNhdmU7Ci0KLQl0YXNrX2xvY2soY3VycmVudCk7Ci0JaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7Ci0JCWZyb3plbl9wcm9jZXNzKCk7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCX0gZWxzZSB7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCQlyZXR1cm47Ci0JfQotCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKLQlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JZm9yICg7OykgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghZnJvemVuKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0Jc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOwotfQotCi0vKioKLSAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKLSAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KLSAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCi0gKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0Ci0gKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcwotICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKLSAqCi0gKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKLSAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgotICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCi0gKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cwotICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KLSAqLwotc3RhdGljIGJvb2wgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHNpZ19vbmx5KQotewotCS8qCi0JICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIHRhc2sgaXMgZnJlZXppbmcgYW5kIG5leHQgaWYgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIGZyb3plbiB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIGZyb3plbl9wcm9jZXNzKCkgd2hpY2ggZmlyc3QgbWFya3MKLQkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgotCSAqLwotCWlmICghZnJlZXppbmcocCkpIHsKLQkJcm1iKCk7Ci0JCWlmIChmcm96ZW4ocCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKCFzaWdfb25seSB8fCBzaG91bGRfc2VuZF9zaWduYWwocCkpCi0JCQlzZXRfZnJlZXplX2ZsYWcocCk7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7Ci0JCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCi0JCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOwotCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGZyZWV6aW5nKHApKSB7Ci0JCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7Ci0JCWNsZWFyX2ZyZWV6ZV9mbGFnKHApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZ19hbmRfd2FrZShwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCB0cnlfdG9fZnJlZXplX3Rhc2tzKGJvb2wgc2lnX29ubHkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKQEAgLTI1MCw2ICsxMzUsOSBAQAogCQlpZiAobm9zaWdfb25seSAmJiBzaG91bGRfc2VuZF9zaWduYWwocCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoY2dyb3VwX2Zyb3plbihwKSkKKwkJCWNvbnRpbnVlOworCiAJCXRoYXdfcHJvY2VzcyhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTI2NCw0ICsxNTIsMyBAQAogCXByaW50aygiZG9uZS5cbiIpOwogfQogCi1FWFBPUlRfU1lNQk9MKHJlZnJpZ2VyYXRvcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCBhNjMzMmEzLi4wMDViOTNkIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvdXNlci5jCisrKyBiL2tlcm5lbC9wb3dlci91c2VyLmMKQEAgLTIxMiwxMyArMjEyLDIwIEBACiAJY2FzZSBTTkFQU0hPVF9GUkVFWkU6CiAJCWlmIChkYXRhLT5mcm96ZW4pCiAJCQlicmVhazsKKwogCQlwcmludGsoIlN5bmNpbmcgZmlsZXN5c3RlbXMgLi4uICIpOwogCQlzeXNfc3luYygpOwogCQlwcmludGsoImRvbmUuXG4iKTsKIAotCQllcnJvciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKKwkJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CiAJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCWVycm9yID0gZnJlZXplX3Byb2Nlc3NlcygpOworCQlpZiAoZXJyb3IpIHsKIAkJCXRoYXdfcHJvY2Vzc2VzKCk7CisJCQl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKKwkJfQogCQlpZiAoIWVycm9yKQogCQkJZGF0YS0+ZnJvemVuID0gMTsKIAkJYnJlYWs7CkBAIC0yMjcsNiArMjM0LDcgQEAKIAkJaWYgKCFkYXRhLT5mcm96ZW4gfHwgZGF0YS0+cmVhZHkpCiAJCQlicmVhazsKIAkJdGhhd19wcm9jZXNzZXMoKTsKKwkJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAJCWRhdGEtPmZyb3plbiA9IDA7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggYTQzMGZkMC4uNjM0MWFmNyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMTMsNyArMTMsNyBAQAogICogRml4ZWQgU01QIHN5bmNocm9uaXphdGlvbiwgMDgvMDgvOTksIE1hbmZyZWQgU3ByYXVsCiAgKiAgICAgbWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tCiAgKiBSZXdyb3RlIGJpdHMgdG8gZ2V0IHJpZCBvZiBjb25zb2xlX2xvY2sKLSAqCTAxTWFyMDEgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICoJMDFNYXIwMSBBbmRyZXcgTW9ydG9uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTc3LDkgKzU3Nyw2IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nCiAgKgogICogVGhpcyBpcyBwcmludGsoKS4gIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gIFdlIHdhbnQgaXQgdG8gd29yay4KLSAqIEJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgaWYgb29wc19pbl9wcm9ncmVzcyBpcyBub3Qgc2V0LCB3ZSBtaWdodCB0cnkgdG8KLSAqIHdha2Uga2xvZ2QgdXAgd2hpY2ggY291bGQgZGVhZGxvY2sgb24gcnVucXVldWUgbG9jayBpZiBwcmludGsoKSBpcyBjYWxsZWQKLSAqIGZyb20gc2NoZWR1bGVyIGNvZGUuCiAgKgogICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfc2VtLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCiAgKiBjYWxsIHRoZSBjb25zb2xlIGRyaXZlcnMuICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgc2VtYXBob3JlIHdlIHBsYWNlIHRoZSBvdXRwdXQKQEAgLTU5Myw2ICs1OTAsOCBAQAogICoKICAqIFNlZSBhbHNvOgogICogcHJpbnRmKDMpCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIAogYXNtbGlua2FnZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtOTgyLDEwICs5ODEsMjUgQEAKIAlyZXR1cm4gY29uc29sZV9sb2NrZWQ7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHByaW50a19wZW5kaW5nKTsKKwordm9pZCBwcmludGtfdGljayh2b2lkKQoreworCWlmIChfX2dldF9jcHVfdmFyKHByaW50a19wZW5kaW5nKSkgeworCQlfX2dldF9jcHVfdmFyKHByaW50a19wZW5kaW5nKSA9IDA7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9nX3dhaXQpOworCX0KK30KKworaW50IHByaW50a19uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlyZXR1cm4gcGVyX2NwdShwcmludGtfcGVuZGluZywgY3B1KTsKK30KKwogdm9pZCB3YWtlX3VwX2tsb2dkKHZvaWQpCiB7Ci0JaWYgKCFvb3BzX2luX3Byb2dyZXNzICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsb2dfd2FpdCk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKKwkJX19yYXdfZ2V0X2NwdV92YXIocHJpbnRrX3BlbmRpbmcpID0gMTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJvZmlsZS5jIGIva2VybmVsL3Byb2ZpbGUuYwppbmRleCBjZDI2YmVkLi5hOWU0MjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJvZmlsZS5jCisrKyBiL2tlcm5lbC9wcm9maWxlLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTUwLDExICs1MiwxMSBAQAogc3RhdGljIERFRklORV9NVVRFWChwcm9maWxlX2ZsaXBfbXV0ZXgpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIGludCBfX2luaXQgcHJvZmlsZV9zZXR1cChjaGFyICpzdHIpCitpbnQgcHJvZmlsZV9zZXR1cChjaGFyICpzdHIpCiB7Ci0Jc3RhdGljIGNoYXIgX19pbml0ZGF0YSBzY2hlZHN0cltdID0gInNjaGVkdWxlIjsKLQlzdGF0aWMgY2hhciBfX2luaXRkYXRhIHNsZWVwc3RyW10gPSAic2xlZXAiOwotCXN0YXRpYyBjaGFyIF9faW5pdGRhdGEga3Ztc3RyW10gPSAia3ZtIjsKKwlzdGF0aWMgY2hhciBzY2hlZHN0cltdID0gInNjaGVkdWxlIjsKKwlzdGF0aWMgY2hhciBzbGVlcHN0cltdID0gInNsZWVwIjsKKwlzdGF0aWMgY2hhciBrdm1zdHJbXSA9ICJrdm0iOwogCWludCBwYXI7CiAKIAlpZiAoIXN0cm5jbXAoc3RyLCBzbGVlcHN0ciwgc3RybGVuKHNsZWVwc3RyKSkpIHsKQEAgLTEwMCwxNCArMTAyLDMzIEBACiBfX3NldHVwKCJwcm9maWxlPSIsIHByb2ZpbGVfc2V0dXApOwogCiAKLXZvaWQgX19pbml0IHByb2ZpbGVfaW5pdCh2b2lkKQoraW50IHByb2ZpbGVfaW5pdCh2b2lkKQogeworCWludCBidWZmZXJfYnl0ZXM7CiAJaWYgKCFwcm9mX29uKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJLyogb25seSB0ZXh0IGlzIHByb2ZpbGVkICovCiAJcHJvZl9sZW4gPSAoX2V0ZXh0IC0gX3N0ZXh0KSA+PiBwcm9mX3NoaWZ0OwotCXByb2ZfYnVmZmVyID0gYWxsb2NfYm9vdG1lbShwcm9mX2xlbipzaXplb2YoYXRvbWljX3QpKTsKKwlidWZmZXJfYnl0ZXMgPSBwcm9mX2xlbipzaXplb2YoYXRvbWljX3QpOworCWlmICghc2xhYl9pc19hdmFpbGFibGUoKSkgeworCQlwcm9mX2J1ZmZlciA9IGFsbG9jX2Jvb3RtZW0oYnVmZmVyX2J5dGVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJvZl9idWZmZXIgPSBremFsbG9jKGJ1ZmZlcl9ieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKHByb2ZfYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCXByb2ZfYnVmZmVyID0gYWxsb2NfcGFnZXNfZXhhY3QoYnVmZmVyX2J5dGVzLCBHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOworCWlmIChwcm9mX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlwcm9mX2J1ZmZlciA9IHZtYWxsb2MoYnVmZmVyX2J5dGVzKTsKKwlpZiAocHJvZl9idWZmZXIpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFByb2ZpbGUgZXZlbnQgbm90aWZpY2F0aW9ucyAqLwpAQCAtNTI3LDcgKzU0OCw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9oYXNoX3RhYmxlcyh2b2lkKQorc3RhdGljIGludCBjcmVhdGVfaGFzaF90YWJsZXModm9pZCkKIHsKIAlpbnQgY3B1OwogCkBAIC01NzUsMTQgKzU5NiwxNCBAQAogI2RlZmluZSBjcmVhdGVfaGFzaF90YWJsZXMoKQkJCSh7IDA7IH0pCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgY3JlYXRlX3Byb2NfcHJvZmlsZSh2b2lkKQoraW50IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJaWYgKCFwcm9mX29uKQogCQlyZXR1cm4gMDsKIAlpZiAoY3JlYXRlX2hhc2hfdGFibGVzKCkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgicHJvZmlsZSIsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkJICAgIE5VTEwsICZwcm9jX3Byb2ZpbGVfb3BlcmF0aW9ucyk7CiAJaWYgKCFlbnRyeSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzNTY2OTlhLi4xZTY4ZTRjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC00NSw3ICs0NSw3IEBACiAgKiBUQVNLX1RSQUNFRCwgcmVzdW1lIGl0IG5vdy4KICAqIFJlcXVpcmVzIHRoYXQgaXJxcyBiZSBkaXNhYmxlZC4KICAqLwotdm9pZCBwdHJhY2VfdW50cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorc3RhdGljIHZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAodGFza19pc190cmFjZWQoY2hpbGQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cHJlZW1wdC5jIGIva2VybmVsL3JjdXByZWVtcHQuYwppbmRleCBjYTRiYmJlLi41OTIzNmU4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cHJlZW1wdC5jCisrKyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKQEAgLTU0LDkgKzU0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwcmVlbXB0X3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKgogICogUFJFRU1QVF9SQ1UgZGF0YSBzdHJ1Y3R1cmVzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOTBiNWIxMi4uODVjYjkwNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC00MiwxMCArNDIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggNDE0ZDZmYy4uNDA4OWQxMiAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTM4LDEwICszOCw2IEBACiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHJlc291cmNlX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotZW51bSB7IE1BWF9JT1JFU19MRVZFTCA9IDUgfTsKLQogc3RhdGljIHZvaWQgKnJfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCByZXNvdXJjZSAqcCA9IHY7CkBAIC01Myw2ICs0OSwxMCBAQAogCXJldHVybiBwLT5zaWJsaW5nOwogfQogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworZW51bSB7IE1BWF9JT1JFU19MRVZFTCA9IDUgfTsKKwogc3RhdGljIHZvaWQgKnJfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKHJlc291cmNlX2xvY2spCiB7CkBAIC01NDksMTMgKzU0OSw5IEBACiAJfQogCiAJaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICBfX3Jlc2VydmVfcmVnaW9uX3dpdGhfc3BsaXQ6ICglcykgWyVsbHgsICVsbHhdLCByZXM6ICglcykgWyVsbHgsICVsbHhdXG4iLAotCQkJIGNvbmZsaWN0LT5uYW1lLCBjb25mbGljdC0+c3RhcnQsIGNvbmZsaWN0LT5lbmQsCi0JCQkgbmFtZSwgc3RhcnQsIGVuZCk7Ci0KIAkJLyogZmFpbGVkLCBzcGxpdCBhbmQgdHJ5IGFnYWluICovCiAKLQkJLyogY29uZmxpY3QgY292ZXJyZWQgd2hvbGUgYXJlYSAqLworCQkvKiBjb25mbGljdCBjb3ZlcmVkIHdob2xlIGFyZWEgKi8KIAkJaWYgKGNvbmZsaWN0LT5zdGFydCA8PSBzdGFydCAmJiBjb25mbGljdC0+ZW5kID49IGVuZCkKIAkJCXJldHVybjsKIApAQCAtNjMwLDMzICs2MjYsMzQgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKIAotCWlmIChyZXMpIHsKLQkJcmVzLT5uYW1lID0gbmFtZTsKLQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQlyZXMtPmVuZCA9IHN0YXJ0ICsgbiAtIDE7Ci0JCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1k7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOwogCi0JCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOworCXJlcy0+bmFtZSA9IG5hbWU7CisJcmVzLT5zdGFydCA9IHN0YXJ0OworCXJlcy0+ZW5kID0gc3RhcnQgKyBuIC0gMTsKKwlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOwogCi0JCWZvciAoOzspIHsKLQkJCXN0cnVjdCByZXNvdXJjZSAqY29uZmxpY3Q7CisJd3JpdGVfbG9jaygmcmVzb3VyY2VfbG9jayk7CiAKLQkJCWNvbmZsaWN0ID0gX19yZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgcmVzKTsKLQkJCWlmICghY29uZmxpY3QpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoY29uZmxpY3QgIT0gcGFyZW50KSB7Ci0JCQkJcGFyZW50ID0gY29uZmxpY3Q7Ci0JCQkJaWYgKCEoY29uZmxpY3QtPmZsYWdzICYgSU9SRVNPVVJDRV9CVVNZKSkKLQkJCQkJY29udGludWU7Ci0JCQl9CisJZm9yICg7OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0OwogCi0JCQkvKiBVaGh1aCwgdGhhdCBkaWRuJ3Qgd29yayBvdXQuLiAqLwotCQkJa2ZyZWUocmVzKTsKLQkJCXJlcyA9IE5VTEw7CisJCWNvbmZsaWN0ID0gX19yZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgcmVzKTsKKwkJaWYgKCFjb25mbGljdCkKIAkJCWJyZWFrOworCQlpZiAoY29uZmxpY3QgIT0gcGFyZW50KSB7CisJCQlwYXJlbnQgPSBjb25mbGljdDsKKwkJCWlmICghKGNvbmZsaWN0LT5mbGFncyAmIElPUkVTT1VSQ0VfQlVTWSkpCisJCQkJY29udGludWU7CiAJCX0KLQkJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKworCQkvKiBVaGh1aCwgdGhhdCBkaWRuJ3Qgd29yayBvdXQuLiAqLworCQlrZnJlZShyZXMpOworCQlyZXMgPSBOVUxMOworCQlicmVhazsKIAl9CisJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTChfX3JlcXVlc3RfcmVnaW9uKTsKQEAgLTgzMSwzICs4MjgsNDAgQEAKIH0KIAogX19zZXR1cCgicmVzZXJ2ZT0iLCByZXNlcnZlX3NldHVwKTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgYWRkciBhbmQgc2l6ZSBzcGFucyBtb3JlIHRoYW4gYW55IHNsb3QgaW4gdGhlCisgKiBpb21lbSByZXNvdXJjZSB0cmVlLgorICovCitpbnQgaW9tZW1fbWFwX3Nhbml0eV9jaGVjayhyZXNvdXJjZV9zaXplX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCByZXNvdXJjZSAqcCA9ICZpb21lbV9yZXNvdXJjZTsKKwlpbnQgZXJyID0gMDsKKwlsb2ZmX3QgbDsKKworCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7CisJZm9yIChwID0gcC0+Y2hpbGQ7IHAgOyBwID0gcl9uZXh0KE5VTEwsIHAsICZsKSkgeworCQkvKgorCQkgKiBXZSBjYW4gcHJvYmFibHkgc2tpcCB0aGUgcmVzb3VyY2VzIHdpdGhvdXQKKwkJICogSU9SRVNPVVJDRV9JTyBhdHRyaWJ1dGU/CisJCSAqLworCQlpZiAocC0+c3RhcnQgPj0gYWRkciArIHNpemUpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPmVuZCA8IGFkZHIpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPnN0YXJ0IDw9IGFkZHIgJiYgKHAtPmVuZCA+PSBhZGRyICsgc2l6ZSAtIDEpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlc291cmNlIG1hcCBzYW5pdHkgY2hlY2sgY29uZmxpY3Q6ICIKKwkJICAgICAgICIweCVsbHggMHglbGx4IDB4JWxseCAweCVsbHggJXNcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShhZGRyICsgc2l6ZSAtIDEpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5zdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+ZW5kLAorCQkgICAgICAgcC0+bmFtZSk7CisJCWVyciA9IC0xOworCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2soJnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNmYyMzA1OS4uMDlhOGMxNSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTQwNTIsMjMgKzQwNTIsMjYgQEAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChrc3RhdCk7CiAKIC8qCi0gKiBSZXR1cm4gcC0+c3VtX2V4ZWNfcnVudGltZSBwbHVzIGFueSBtb3JlIG5zIG9uIHRoZSBzY2hlZF9jbG9jawotICogdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBiYW5rZWQgaW4gY2FzZSB0aGUgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KKyAqIFJldHVybiBhbnkgbnMgb24gdGhlIHNjaGVkX2Nsb2NrIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYmFua2VkIGluCisgKiBAcCBpbiBjYXNlIHRoYXQgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit1bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCBucywgZGVsdGFfZXhlYzsKIAlzdHJ1Y3QgcnEgKnJxOworCXU2NCBucyA9IDA7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCW5zID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCWlmICh0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCXU2NCBkZWx0YV9leGVjOworCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCWRlbHRhX2V4ZWMgPSBycS0+Y2xvY2sgLSBwLT5zZS5leGVjX3N0YXJ0OwogCQlpZiAoKHM2NClkZWx0YV9leGVjID4gMCkKLQkJCW5zICs9IGRlbHRhX2V4ZWM7CisJCQlucyA9IGRlbHRhX2V4ZWM7CiAJfQorCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gbnM7CkBAIC00MDg1LDYgKzQwODgsNyBAQAogCWNwdXRpbWU2NF90IHRtcDsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCiAJLyogQWRkIHVzZXIgdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDEwOSw2ICs0MTEzLDcgQEAKIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCXAtPmd0aW1lID0gY3B1dGltZV9hZGQocC0+Z3RpbWUsIGNwdXRpbWUpOwogCiAJY3B1c3RhdC0+dXNlciA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+dXNlciwgdG1wKTsKQEAgLTQxNDQsNiArNDE0OSw3IEBACiAJfQogCiAJcC0+c3RpbWUgPSBjcHV0aW1lX2FkZChwLT5zdGltZSwgY3B1dGltZSk7CisJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBjcHV0aW1lKTsKIAogCS8qIEFkZCBzeXN0ZW0gdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDE4NSw2ICs0MTkxLDcgQEAKIAogCWlmIChwID09IHJxLT5pZGxlKSB7CiAJCXAtPnN0aW1lID0gY3B1dGltZV9hZGQocC0+c3RpbWUsIHN0ZWFsKTsKKwkJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBzdGVhbCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcnEtPm5yX2lvd2FpdCkgPiAwKQogCQkJY3B1c3RhdC0+aW93YWl0ID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pb3dhaXQsIHRtcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggZThhYjA5Ni4uODE3ODcyNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTExOCwxMyArMTE4LDEzIEBACiAKIAkvKgogCSAqIHNjZC0+Y2xvY2sgPSBjbGFtcChzY2QtPnRpY2tfZ3RvZCArIGRlbHRhLAotCSAqIAkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKLQkgKiAJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKKwkgKgkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKKwkgKgkJICAgICAgbWF4KHNjZC0+Y2xvY2ssIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKSk7CiAJICovCiAKIAljbG9jayA9IHNjZC0+dGlja19ndG9kICsgZGVsdGE7CiAJbWluX2Nsb2NrID0gd3JhcF9tYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spOwotCW1heF9jbG9jayA9IHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDOworCW1heF9jbG9jayA9IHdyYXBfbWF4KHNjZC0+Y2xvY2ssIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKIAogCWNsb2NrID0gd3JhcF9tYXgoY2xvY2ssIG1pbl9jbG9jayk7CiAJY2xvY2sgPSB3cmFwX21pbihjbG9jaywgbWF4X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDE4ZmQxNzEuLmY2MDRkYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VydGFzayA9IHRhc2tfb2YoY3Vycik7CiAKIAkJY3B1YWNjdF9jaGFyZ2UoY3VydGFzaywgZGVsdGFfZXhlYyk7CisJCWFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBjZGY1NzQwLi5iNDQ2ZGM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtNTI2LDYgKzUyNiw4IEBACiAJc2NoZWRzdGF0X3NldChjdXJyLT5zZS5leGVjX21heCwgbWF4KGN1cnItPnNlLmV4ZWNfbWF4LCBkZWx0YV9leGVjKSk7CiAKIAljdXJyLT5zZS5zdW1fZXhlY19ydW50aW1lICs9IGRlbHRhX2V4ZWM7CisJYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoY3VyciwgZGVsdGFfZXhlYyk7CisKIAljdXJyLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOwogCWNwdWFjY3RfY2hhcmdlKGN1cnIsIGRlbHRhX2V4ZWMpOwogCkBAIC0xNDU4LDcgKzE0NjAsNyBAQAogCQlwLT5ydC50aW1lb3V0Kys7CiAJCW5leHQgPSBESVZfUk9VTkRfVVAobWluKHNvZnQsIGhhcmQpLCBVU0VDX1BFUl9TRUMvSFopOwogCQlpZiAocC0+cnQudGltZW91dCA+IG5leHQpCi0JCQlwLT5pdF9zY2hlZF9leHBpcmVzID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwkJCXAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCA4Mzg1ZDQzLi5iOGMxNTY5IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtMjcwLDMgKzI3MCw4OSBAQAogI2RlZmluZSBzY2hlZF9pbmZvX3N3aXRjaCh0LCBuZXh0KQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19TQ0hFRFNUQVRTIHx8IENPTkZJR19UQVNLX0RFTEFZX0FDQ1QgKi8KIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgc2NoZWR1bGVyLWludGVybmFsIHRpbWUgYWNjb3VudGluZy4KKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGNhbGxlZCBhdCB0aGUgdGltZXIgdGljay4gIE5vbmUgb2YgdGhpcyBkZXBlbmRzCisgKiBvbiBDT05GSUdfU0NIRURTVEFUUy4KKyAqLworCisvKioKKyAqIGFjY291bnRfZ3JvdXBfdXNlcl90aW1lIC0gTWFpbnRhaW4gdXRpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorICoKKyAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1cmUuCisgKiBAY3B1dGltZToJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHV0aW1lIGZpZWxkIG9mIHRoZQorICoJCXRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSB1dGltZSBmaWVsZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgICBjcHV0aW1lX3QgY3B1dGltZSkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm47CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXM7CisKKwkJdGltZXMgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBnZXRfY3B1KCkpOworCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIGNwdXRpbWUpOworCQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwl9Cit9CisKKy8qKgorICogYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZSAtIE1haW50YWluIHN0aW1lIGZvciBhIHRocmVhZCBncm91cC4KKyAqCisgKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorICogQGNwdXRpbWU6CVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBzdGltZSBmaWVsZCBvZiB0aGUKKyAqCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUuCisgKgorICogSWYgdGhyZWFkIGdyb3VwIHRpbWUgaXMgYmVpbmcgbWFpbnRhaW5lZCwgZ2V0IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQorICogcnVubmluZyBDUFUgYW5kIHVwZGF0ZSB0aGUgc3RpbWUgZmllbGQgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgICAgIGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT5zdGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT5zdGltZSwgY3B1dGltZSk7CisJCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworCX0KK30KKworLyoqCisgKiBhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZSAtIE1haW50YWluIGV4ZWMgcnVudGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKgorICogQHRzazoJUG9pbnRlciB0byB0YXNrIHN0cnVjdHVyZS4KKyAqIEBuczoJCVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBzdW1fZXhlY19ydW50aW1lIGZpZWxkCisgKgkJb2YgdGhlIHRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSBzdW1fZXhlY19ydW50aW1lIGZpZWxkIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBucykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm47CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXM7CisKKwkJdGltZXMgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBnZXRfY3B1KCkpOworCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSBuczsKKwkJcHV0X2NwdV9ub19yZXNjaGVkKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGU2NjFiMDEuLjZlZWE1ODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTEzMzgsNiArMTMzOCw3IEBACiAJc3RydWN0IHNpZ2luZm8gaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqcHNpZzsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAJaW50IHJldCA9IHNpZzsKIAogCUJVR19PTihzaWcgPT0gLTEpOwpAQCAtMTM2OCwxMCArMTM2OSw5IEBACiAKIAlpbmZvLnNpX3VpZCA9IHRzay0+dWlkOwogCi0JaW5mby5zaV91dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX2FkZCh0c2stPnV0aW1lLAotCQkJCQkJICAgICAgIHRzay0+c2lnbmFsLT51dGltZSkpOwotCWluZm8uc2lfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV9hZGQodHNrLT5zdGltZSwKLQkJCQkJCSAgICAgICB0c2stPnNpZ25hbC0+c3RpbWUpKTsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKKwlpbmZvLnNpX3V0aW1lID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWUudXRpbWUpOworCWluZm8uc2lfc3RpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXMoY3B1dGltZS5zdGltZSk7CiAKIAlpbmZvLnNpX3N0YXR1cyA9IHRzay0+ZXhpdF9jb2RlICYgMHg3ZjsKIAlpZiAodHNrLT5leGl0X2NvZGUgJiAweDgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggYzUwNmYyNi4uNzExMGRhZSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC02LDYgKzYsOCBAQAogICoJRGlzdHJpYnV0ZSB1bmRlciBHUEx2Mi4KICAqCiAgKglSZXdyaXR0ZW4uIE9sZCBvbmUgd2FzIGdvb2QgaW4gMi4yLCBidXQgaW4gMi4zIGl0IHdhcyBpbW1vcmFsLiAtLUFOSyAoOTkwOTAzKQorICoKKyAqCVJlbW90ZSBzb2Z0aXJxIGluZnJhc3RydWN0dXJlIGlzIGJ5IEplbnMgQXhib2UuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDYsNyArNDgsNyBAQAogRVhQT1JUX1NZTUJPTChpcnFfc3RhdCk7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiBzb2Z0aXJxX3ZlY1szMl0gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CitzdGF0aWMgc3RydWN0IHNvZnRpcnFfYWN0aW9uIHNvZnRpcnFfdmVjW05SX1NPRlRJUlFTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBrc29mdGlycWQpOwogCkBAIC0yMDUsNyArMjA3LDE4IEBACiAKIAlkbyB7CiAJCWlmIChwZW5kaW5nICYgMSkgeworCQkJaW50IHByZXZfY291bnQgPSBwcmVlbXB0X2NvdW50KCk7CisKIAkJCWgtPmFjdGlvbihoKTsKKworCQkJaWYgKHVubGlrZWx5KHByZXZfY291bnQgIT0gcHJlZW1wdF9jb3VudCgpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiaHVoLCBlbnRlcmVkIHNvZnRpcnEgJXRkICVwIgorCQkJCSAgICAgICAid2l0aCBwcmVlbXB0X2NvdW50ICUwOHgsIgorCQkJCSAgICAgICAiIGV4aXRlZCB3aXRoICUwOHg/XG4iLCBoIC0gc29mdGlycV92ZWMsCisJCQkJICAgICAgIGgtPmFjdGlvbiwgcHJldl9jb3VudCwgcHJlZW1wdF9jb3VudCgpKTsKKwkJCQlwcmVlbXB0X2NvdW50KCkgPSBwcmV2X2NvdW50OworCQkJfQorCiAJCQlyY3VfYmhfcXNjdHJfaW5jKGNwdSk7CiAJCX0KIAkJaCsrOwpAQCAtMjU0LDE2ICsyNjcsMTIgQEAKICAqLwogdm9pZCBpcnFfZW50ZXIodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTk9fSFoKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJaWYgKGlkbGVfY3B1KGNwdSkgJiYgIWluX2ludGVycnVwdCgpKQotCQl0aWNrX25vaHpfc3RvcF9pZGxlKGNwdSk7Ci0jZW5kaWYKKwkJdGlja19jaGVja19pZGxlKGNwdSk7CisKIAlfX2lycV9lbnRlcigpOwotI2lmZGVmIENPTkZJR19OT19IWgotCWlmIChpZGxlX2NwdShjcHUpKQotCQl0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXMoKTsKLSNlbmRpZgogfQogCiAjaWZkZWYgX19BUkNIX0lSUV9FWElUX0lSUVNfRElTQUJMRUQKQEAgLTQ2MywxNyArNDcyLDE0NCBAQAogCiBFWFBPUlRfU1lNQk9MKHRhc2tsZXRfa2lsbCk7CiAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQgW05SX1NPRlRJUlFTXSwgc29mdGlycV93b3JrX2xpc3QpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHNvZnRpcnFfd29ya19saXN0KTsKKworc3RhdGljIHZvaWQgX19sb2NhbF90cmlnZ2VyKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IHNvZnRpcnEpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZfX2dldF9jcHVfdmFyKHNvZnRpcnFfd29ya19saXN0W3NvZnRpcnFdKTsKKworCWxpc3RfYWRkX3RhaWwoJmNwLT5saXN0LCBoZWFkKTsKKworCS8qIFRyaWdnZXIgdGhlIHNvZnRpcnEgb25seSBpZiB0aGUgbGlzdCB3YXMgcHJldmlvdXNseSBlbXB0eS4gICovCisJaWYgKGhlYWQtPm5leHQgPT0gJmNwLT5saXN0KQorCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihzb2Z0aXJxKTsKK30KKworI2lmZGVmIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUworc3RhdGljIHZvaWQgcmVtb3RlX3NvZnRpcnFfcmVjZWl2ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc29mdGlycTsKKworCXNvZnRpcnEgPSBjcC0+cHJpdjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2xvY2FsX3RyaWdnZXIoY3AsIHNvZnRpcnEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX3RyeV9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCBzb2Z0aXJxKQoreworCWlmIChjcHVfb25saW5lKGNwdSkpIHsKKwkJY3AtPmZ1bmMgPSByZW1vdGVfc29mdGlycV9yZWNlaXZlOworCQljcC0+aW5mbyA9IGNwOworCQljcC0+ZmxhZ3MgPSAwOworCQljcC0+cHJpdiA9IHNvZnRpcnE7CisKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBjcCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbHNlIC8qIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyAqLworc3RhdGljIGludCBfX3RyeV9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCBzb2Z0aXJxKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKKy8qKgorICogX19zZW5kX3JlbW90ZV9zb2Z0aXJxIC0gdHJ5IHRvIHNjaGVkdWxlIHNvZnRpcnEgd29yayBvbiBhIHJlbW90ZSBjcHUKKyAqIEBjcDogcHJpdmF0ZSBTTVAgY2FsbCBmdW5jdGlvbiBkYXRhIGFyZWEKKyAqIEBjcHU6IHRoZSByZW1vdGUgY3B1CisgKiBAdGhpc19jcHU6IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNwdQorICogQHNvZnRpcnE6IHRoZSBzb2Z0aXJxIGZvciB0aGUgd29yaworICoKKyAqIEF0dGVtcHQgdG8gc2NoZWR1bGUgc29mdGlycSB3b3JrIG9uIGEgcmVtb3RlIGNwdS4gIElmIHRoaXMgY2Fubm90IGJlCisgKiBkb25lLCB0aGUgd29yayBpcyBpbnN0ZWFkIHF1ZXVlZCB1cCBvbiB0aGUgbG9jYWwgY3B1LgorICoKKyAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4KKyAqLwordm9pZCBfX3NlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgdGhpc19jcHUsIGludCBzb2Z0aXJxKQoreworCWlmIChjcHUgPT0gdGhpc19jcHUgfHwgX190cnlfcmVtb3RlX3NvZnRpcnEoY3AsIGNwdSwgc29mdGlycSkpCisJCV9fbG9jYWxfdHJpZ2dlcihjcCwgc29mdGlycSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fc2VuZF9yZW1vdGVfc29mdGlycSk7CisKKy8qKgorICogc2VuZF9yZW1vdGVfc29mdGlycSAtIHRyeSB0byBzY2hlZHVsZSBzb2Z0aXJxIHdvcmsgb24gYSByZW1vdGUgY3B1CisgKiBAY3A6IHByaXZhdGUgU01QIGNhbGwgZnVuY3Rpb24gZGF0YSBhcmVhCisgKiBAY3B1OiB0aGUgcmVtb3RlIGNwdQorICogQHNvZnRpcnE6IHRoZSBzb2Z0aXJxIGZvciB0aGUgd29yaworICoKKyAqIExpa2UgX19zZW5kX3JlbW90ZV9zb2Z0aXJxIGV4Y2VwdCB0aGF0IGRpc2FibGluZyBpbnRlcnJ1cHRzIGFuZAorICogY29tcHV0aW5nIHRoZSBjdXJyZW50IGNwdSBpcyBkb25lIGZvciB0aGUgY2FsbGVyLgorICovCit2b2lkIHNlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0aGlzX2NwdTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlfX3NlbmRfcmVtb3RlX3NvZnRpcnEoY3AsIGNwdSwgdGhpc19jcHUsIHNvZnRpcnEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc2VuZF9yZW1vdGVfc29mdGlycSk7CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJLyoKKwkgKiBJZiBhIENQVSBnb2VzIGF3YXksIHNwbGljZSBpdHMgZW50cmllcyB0byB0aGUgY3VycmVudCBDUFUKKwkgKiBhbmQgdHJpZ2dlciBhIHJ1biBvZiB0aGUgc29mdGlycQorCSAqLworCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQgfHwgYWN0aW9uID09IENQVV9ERUFEX0ZST1pFTikgeworCQlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpIGhjcHU7CisJCWludCBpOworCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWZvciAoaSA9IDA7IGkgPCBOUl9TT0ZUSVJRUzsgaSsrKSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnBlcl9jcHUoc29mdGlycV93b3JrX2xpc3RbaV0sIGNwdSk7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsb2NhbF9oZWFkOworCisJCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJCQljb250aW51ZTsKKworCQkJbG9jYWxfaGVhZCA9ICZfX2dldF9jcHVfdmFyKHNvZnRpcnFfd29ya19saXN0W2ldKTsKKwkJCWxpc3Rfc3BsaWNlX2luaXQoaGVhZCwgbG9jYWxfaGVhZCk7CisJCQlyYWlzZV9zb2Z0aXJxX2lycW9mZihpKTsKKwkJfQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZnksCit9OworCiB2b2lkIF9faW5pdCBzb2Z0aXJxX2luaXQodm9pZCkKIHsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlpbnQgaTsKKwogCQlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLnRhaWwgPQogCQkJJnBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkuaGVhZDsKIAkJcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS50YWlsID0KIAkJCSZwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmhlYWQ7CisJCWZvciAoaSA9IDA7IGkgPCBOUl9TT0ZUSVJRUzsgaSsrKQorCQkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoc29mdGlycV93b3JrX2xpc3RbaV0sIGNwdSkpOwogCX0KIAorCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcmVtb3RlX3NvZnRpcnFfY3B1X25vdGlmaWVyKTsKKwogCW9wZW5fc29mdGlycShUQVNLTEVUX1NPRlRJUlEsIHRhc2tsZXRfYWN0aW9uKTsKIAlvcGVuX3NvZnRpcnEoSElfU09GVElSUSwgdGFza2xldF9oaV9hY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKaW5kZXggY2I4MzhlZS4uMzk1M2U0YSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkgKiBJZiB0aGUgc3lzdGVtIGNyYXNoZWQgYWxyZWFkeSB0aGVuIGFsbCBiZXRzIGFyZSBvZmYsCiAJICogZG8gbm90IHJlcG9ydCBleHRyYSBodW5nIHRhc2tzOgogCSAqLwotCWlmICgodGFpbnRlZCAmIFRBSU5UX0RJRSkgfHwgZGlkX3BhbmljKQorCWlmICh0ZXN0X3RhaW50KFRBSU5UX0RJRSkgfHwgZGlkX3BhbmljKQogCQlyZXR1cm47CiAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDIzNGQ5NDUuLjUzODc5Y2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTg1MywzOCArODUzLDI4IEBACiAJcmV0dXJuIG9sZF9mc2dpZDsKIH0KIAordm9pZCBkb19zeXNfdGltZXMoc3RydWN0IHRtcyAqdG1zKQoreworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwljcHV0aW1lX3QgY3V0aW1lLCBjc3RpbWU7CisKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZShjdXJyZW50LCAmY3B1dGltZSk7CisJY3V0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jdXRpbWU7CisJY3N0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jc3RpbWU7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl0bXMtPnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnV0aW1lKTsKKwl0bXMtPnRtc19zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnN0aW1lKTsKKwl0bXMtPnRtc19jdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3V0aW1lKTsKKwl0bXMtPnRtc19jc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3N0aW1lKTsKK30KKwogYXNtbGlua2FnZSBsb25nIHN5c190aW1lcyhzdHJ1Y3QgdG1zIF9fdXNlciAqIHRidWYpCiB7Ci0JLyoKLQkgKglJbiB0aGUgU01QIHdvcmxkIHdlIG1pZ2h0IGp1c3QgYmUgdW5sdWNreSBhbmQgaGF2ZSBvbmUgb2YKLQkgKgl0aGUgdGltZXMgaW5jcmVtZW50IGFzIHdlIHVzZSBpdC4gU2luY2UgdGhlIHZhbHVlIGlzIGFuCi0JICoJYXRvbWljYWxseSBzYWZlIHR5cGUgdGhpcyBpcyBqdXN0IGZpbmUuIENvbmNlcHR1YWxseSBpdHMKLQkgKglhcyBpZiB0aGUgc3lzY2FsbCB0b29rIGFuIGluc3RhbnQgbG9uZ2VyIHRvIG9jY3VyLgotCSAqLwogCWlmICh0YnVmKSB7CiAJCXN0cnVjdCB0bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQljdXRpbWUgPSB0c2stPnNpZ25hbC0+Y3V0aW1lOwotCQljc3RpbWUgPSB0c2stPnNpZ25hbC0+Y3N0aW1lOwotCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdCh1dGltZSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3Qoc3RpbWUpOwotCQl0bXAudG1zX2N1dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjdXRpbWUpOwotCQl0bXAudG1zX2NzdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjc3RpbWUpOworCQlkb19zeXNfdGltZXMoJnRtcCk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHN0cnVjdCB0bXMpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTEzNDksOCArMTMzOSwxMCBAQAogCWRvd25fd3JpdGUoJnV0c19zZW0pOwogCWVycm5vID0gLUVGQVVMVDsKIAlpZiAoIWNvcHlfZnJvbV91c2VyKHRtcCwgbmFtZSwgbGVuKSkgewotCQltZW1jcHkodXRzbmFtZSgpLT5ub2RlbmFtZSwgdG1wLCBsZW4pOwotCQl1dHNuYW1lKCktPm5vZGVuYW1lW2xlbl0gPSAwOworCQlzdHJ1Y3QgbmV3X3V0c25hbWUgKnUgPSB1dHNuYW1lKCk7CisKKwkJbWVtY3B5KHUtPm5vZGVuYW1lLCB0bXAsIGxlbik7CisJCW1lbXNldCh1LT5ub2RlbmFtZSArIGxlbiwgMCwgc2l6ZW9mKHUtPm5vZGVuYW1lKSAtIGxlbik7CiAJCWVycm5vID0gMDsKIAl9CiAJdXBfd3JpdGUoJnV0c19zZW0pOwpAQCAtMTM2MiwxNSArMTM1NCwxNyBAQAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRob3N0bmFtZShjaGFyIF9fdXNlciAqbmFtZSwgaW50IGxlbikKIHsKIAlpbnQgaSwgZXJybm87CisJc3RydWN0IG5ld191dHNuYW1lICp1OwogCiAJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JaSA9IDEgKyBzdHJsZW4odXRzbmFtZSgpLT5ub2RlbmFtZSk7CisJdSA9IHV0c25hbWUoKTsKKwlpID0gMSArIHN0cmxlbih1LT5ub2RlbmFtZSk7CiAJaWYgKGkgPiBsZW4pCiAJCWkgPSBsZW47CiAJZXJybm8gPSAwOwotCWlmIChjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLT5ub2RlbmFtZSwgaSkpCisJaWYgKGNvcHlfdG9fdXNlcihuYW1lLCB1LT5ub2RlbmFtZSwgaSkpCiAJCWVycm5vID0gLUVGQVVMVDsKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJybm87CkBAIC0xMzk1LDggKzEzODksMTAgQEAKIAlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKIAllcnJubyA9IC1FRkFVTFQ7CiAJaWYgKCFjb3B5X2Zyb21fdXNlcih0bXAsIG5hbWUsIGxlbikpIHsKLQkJbWVtY3B5KHV0c25hbWUoKS0+ZG9tYWlubmFtZSwgdG1wLCBsZW4pOwotCQl1dHNuYW1lKCktPmRvbWFpbm5hbWVbbGVuXSA9IDA7CisJCXN0cnVjdCBuZXdfdXRzbmFtZSAqdSA9IHV0c25hbWUoKTsKKworCQltZW1jcHkodS0+ZG9tYWlubmFtZSwgdG1wLCBsZW4pOworCQltZW1zZXQodS0+ZG9tYWlubmFtZSArIGxlbiwgMCwgc2l6ZW9mKHUtPmRvbWFpbm5hbWUpIC0gbGVuKTsKIAkJZXJybm8gPSAwOwogCX0KIAl1cF93cml0ZSgmdXRzX3NlbSk7CkBAIC0xNDQzLDIxICsxNDM5LDI4IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgX191c2VyICpybGltKQogewogCXN0cnVjdCBybGltaXQgbmV3X3JsaW0sICpvbGRfcmxpbTsKLQl1bnNpZ25lZCBsb25nIGl0X3Byb2Zfc2VjczsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKHJlc291cmNlID49IFJMSU1fTkxJTUlUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfcmxpbSwgcmxpbSwgc2l6ZW9mKCpybGltKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQotCQlyZXR1cm4gLUVJTlZBTDsKIAlvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwogCWlmICgobmV3X3JsaW0ucmxpbV9tYXggPiBvbGRfcmxpbS0+cmxpbV9tYXgpICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfTk9GSUxFICYmIG5ld19ybGltLnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCi0JCXJldHVybiAtRVBFUk07CisKKwlpZiAocmVzb3VyY2UgPT0gUkxJTUlUX05PRklMRSkgeworCQlpZiAobmV3X3JsaW0ucmxpbV9tYXggPT0gUkxJTV9JTkZJTklUWSkKKwkJCW5ld19ybGltLnJsaW1fbWF4ID0gc3lzY3RsX25yX29wZW47CisJCWlmIChuZXdfcmxpbS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorCQkJbmV3X3JsaW0ucmxpbV9jdXIgPSBzeXNjdGxfbnJfb3BlbjsKKwkJaWYgKG5ld19ybGltLnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHZhbCA9IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0KHJlc291cmNlLCAmbmV3X3JsaW0pOwogCWlmIChyZXR2YWwpCkBAIC0xNDg5LDE4ICsxNDkyLDcgQEAKIAlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKIAkJZ290byBvdXQ7CiAKLQlpdF9wcm9mX3NlY3MgPSBjcHV0aW1lX3RvX3NlY3MoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMpOwotCWlmIChpdF9wcm9mX3NlY3MgPT0gMCB8fCBuZXdfcmxpbS5ybGltX2N1ciA8PSBpdF9wcm9mX3NlY3MpIHsKLQkJdW5zaWduZWQgbG9uZyBybGltX2N1ciA9IG5ld19ybGltLnJsaW1fY3VyOwotCQljcHV0aW1lX3QgY3B1dGltZTsKLQotCQljcHV0aW1lID0gc2Vjc190b19jcHV0aW1lKHJsaW1fY3VyKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNldF9wcm9jZXNzX2NwdV90aW1lcihjdXJyZW50LCBDUFVDTE9DS19QUk9GLCAmY3B1dGltZSwgTlVMTCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQl9CisJdXBkYXRlX3JsaW1pdF9jcHUobmV3X3JsaW0ucmxpbV9jdXIpOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtMTUzOCwxMSArMTUzMCw4IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBydXNhZ2UgKnIsCi0JCQkJICAgICBjcHV0aW1lX3QgKnV0aW1lcCwgY3B1dGltZV90ICpzdGltZXApCitzdGF0aWMgdm9pZCBhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcnVzYWdlICpyKQogewotCSp1dGltZXAgPSBjcHV0aW1lX2FkZCgqdXRpbWVwLCB0LT51dGltZSk7Ci0JKnN0aW1lcCA9IGNwdXRpbWVfYWRkKCpzdGltZXAsIHQtPnN0aW1lKTsKIAlyLT5ydV9udmNzdyArPSB0LT5udmNzdzsKIAlyLT5ydV9uaXZjc3cgKz0gdC0+bml2Y3N3OwogCXItPnJ1X21pbmZsdCArPSB0LT5taW5fZmx0OwpAQCAtMTU1NiwxMiArMTU0NSwxMyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCiAJbWVtc2V0KChjaGFyICopIHIsIDAsIHNpemVvZiAqcik7CiAJdXRpbWUgPSBzdGltZSA9IGNwdXRpbWVfemVybzsKIAogCWlmICh3aG8gPT0gUlVTQUdFX1RIUkVBRCkgewotCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgciwgJnV0aW1lLCAmc3RpbWUpOworCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgcik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU4NCw4ICsxNTc0LDkgQEAKIAkJCQlicmVhazsKIAogCQljYXNlIFJVU0FHRV9TRUxGOgotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgcC0+c2lnbmFsLT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBwLT5zaWduYWwtPnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIGNwdXRpbWUudXRpbWUpOworCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgY3B1dGltZS5zdGltZSk7CiAJCQlyLT5ydV9udmNzdyArPSBwLT5zaWduYWwtPm52Y3N3OwogCQkJci0+cnVfbml2Y3N3ICs9IHAtPnNpZ25hbC0+bml2Y3N3OwogCQkJci0+cnVfbWluZmx0ICs9IHAtPnNpZ25hbC0+bWluX2ZsdDsKQEAgLTE1OTQsNyArMTU4NSw3IEBACiAJCQlyLT5ydV9vdWJsb2NrICs9IHAtPnNpZ25hbC0+b3VibG9jazsKIAkJCXQgPSBwOwogCQkJZG8gewotCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByLCAmdXRpbWUsICZzdGltZSk7CisJCQkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHQsIHIpOwogCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKIAkJCX0gd2hpbGUgKHQgIT0gcCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCA1MDNkOGQ0Li5hNzdiMjdiIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC0xMjYsNiArMTI2LDExIEBACiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19pcGMpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc3lzY3RsKTsKIGNvbmRfc3lzY2FsbChzeXNfZmxvY2spOworY29uZF9zeXNjYWxsKHN5c19pb19zZXR1cCk7Citjb25kX3N5c2NhbGwoc3lzX2lvX2Rlc3Ryb3kpOworY29uZF9zeXNjYWxsKHN5c19pb19zdWJtaXQpOworY29uZF9zeXNjYWxsKHN5c19pb19jYW5jZWwpOworY29uZF9zeXNjYWxsKHN5c19pb19nZXRldmVudHMpOwogCiAvKiBhcmNoLXNwZWNpZmljIHdlYWsgc3lzY2FsbCBlbnRyaWVzICovCiBjb25kX3N5c2NhbGwoc3lzX3BjaWNvbmZpZ19yZWFkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBjZmM1Mjk1Li5iM2NjNzM5IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIHN0YXRpYyBpbnQgcHJvY19kb19jYWRfcGlkKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKIApAQCAtMzc5LDEwICszNzksOSBAQAogI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCXsKIAkJLnByb2NuYW1lCT0gInRhaW50ZWQiLAotCQkuZGF0YQkJPSAmdGFpbnRlZCwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1heGxlbiAJPSBzaXplb2YobG9uZyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY190YWludCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX3RhaW50LAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTEFURU5DWVRPUApAQCAtODM0LDYgKzgzMywxNiBAQAogCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzIiwKKwkJLmRhdGEJCT0gJnNjYW5fdW5ldmljdGFibGVfcGFnZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHNjYW5fdW5ldmljdGFibGVfcGFnZXMpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnNjYW5fdW5ldmljdGFibGVfaGFuZGxlciwKKwl9LAorI2VuZGlmCiAvKgogICogTk9URTogZG8gbm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCiAgKiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQKQEAgLTEyODIsNiArMTI5MSw3IEBACiAJCS5leHRyYTIJCT0gJnR3bywKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FJTwogCXsKIAkJLnByb2NuYW1lCT0gImFpby1uciIsCiAJCS5kYXRhCQk9ICZhaW9fbnIsCkBAIC0xMjk2LDYgKzEzMDYsNyBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiAJfSwKKyNlbmRpZiAvKiBDT05GSUdfQUlPICovCiAjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogCXsKIAkJLmN0bF9uYW1lCT0gRlNfSU5PVElGWSwKQEAgLTE1MDEsNyArMTUxMiw2IEBACiAvKiBQZXJmb3JtIHRoZSBhY3R1YWwgcmVhZC93cml0ZSBvZiBhIHN5c2N0bCB0YWJsZSBlbnRyeS4gKi8KIHN0YXRpYyBpbnQgZG9fc3lzY3RsX3N0cmF0ZWd5KHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKIAkJCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAotCQkJaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTE1MTUsOCArMTUyNSw3IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodGFibGUtPnN0cmF0ZWd5KSB7Ci0JCXJjID0gdGFibGUtPnN0cmF0ZWd5KHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsCi0JCQkJICAgICBuZXd2YWwsIG5ld2xlbik7CisJCXJjID0gdGFibGUtPnN0cmF0ZWd5KHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAkJaWYgKHJjID4gMCkKQEAgLTE1MjYsOCArMTUzNSw3IEBACiAJLyogSWYgdGhlcmUgaXMgbm8gc3RyYXRlZ3kgcm91dGluZSwgb3IgaWYgdGhlIHN0cmF0ZWd5IHJldHVybnMKIAkgKiB6ZXJvLCBwcm9jZWVkIHdpdGggYXV0b21hdGljIHIvdyAqLwogCWlmICh0YWJsZS0+ZGF0YSAmJiB0YWJsZS0+bWF4bGVuKSB7Ci0JCXJjID0gc3lzY3RsX2RhdGEodGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwKLQkJCQkgbmV3dmFsLCBuZXdsZW4pOworCQlyYyA9IHN5c2N0bF9kYXRhKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAl9CkBAIC0xNTU5LDcgKzE1NjcsNyBAQAogCQkJCXRhYmxlID0gdGFibGUtPmNoaWxkOwogCQkJCWdvdG8gcmVwZWF0OwogCQkJfQotCQkJZXJyb3IgPSBkb19zeXNjdGxfc3RyYXRlZ3kocm9vdCwgdGFibGUsIG5hbWUsIG5sZW4sCisJCQllcnJvciA9IGRvX3N5c2N0bF9zdHJhdGVneShyb290LCB0YWJsZSwKIAkJCQkJCSAgIG9sZHZhbCwgb2xkbGVucCwKIAkJCQkJCSAgIG5ld3ZhbCwgbmV3bGVuKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTIyMjgsNDkgKzIyMzYsMzkgQEAKIAkJICAgIAkgICAgTlVMTCxOVUxMKTsKIH0KIAotI2RlZmluZSBPUF9TRVQJMAotI2RlZmluZSBPUF9BTkQJMQotI2RlZmluZSBPUF9PUgkyCi0KLXN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19ic2V0X2NvbnYoaW50ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKLQkJCQkgICAgICBpbnQgKnZhbHAsCi0JCQkJICAgICAgaW50IHdyaXRlLCB2b2lkICpkYXRhKQotewotCWludCBvcCA9ICooaW50ICopZGF0YTsKLQlpZiAod3JpdGUpIHsKLQkJaW50IHZhbCA9ICpuZWdwID8gLSpsdmFscCA6ICpsdmFscDsKLQkJc3dpdGNoKG9wKSB7Ci0JCWNhc2UgT1BfU0VUOgkqdmFscCA9IHZhbDsgYnJlYWs7Ci0JCWNhc2UgT1BfQU5EOgkqdmFscCAmPSB2YWw7IGJyZWFrOwotCQljYXNlIE9QX09SOgkqdmFscCB8PSB2YWw7IGJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IHZhbCA9ICp2YWxwOwotCQlpZiAodmFsIDwgMCkgewotCQkJKm5lZ3AgPSAtMTsKLQkJCSpsdmFscCA9ICh1bnNpZ25lZCBsb25nKS12YWw7Ci0JCX0gZWxzZSB7Ci0JCQkqbmVncCA9IDA7Ci0JCQkqbHZhbHAgPSAodW5zaWduZWQgbG9uZyl2YWw7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCi0gKglUYWludCB2YWx1ZXMgY2FuIG9ubHkgYmUgaW5jcmVhc2VkCisgKiBUYWludCB2YWx1ZXMgY2FuIG9ubHkgYmUgaW5jcmVhc2VkCisgKiBUaGlzIG1lYW5zIHdlIGNhbiBzYWZlbHkgdXNlIGEgdGVtcG9yYXJ5LgogICovCi1zdGF0aWMgaW50IHByb2NfZG9pbnR2ZWNfdGFpbnQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfdGFpbnQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IG9wOworCXN0cnVjdCBjdGxfdGFibGUgdDsKKwl1bnNpZ25lZCBsb25nIHRtcHRhaW50ID0gZ2V0X3RhaW50KCk7CisJaW50IGVycjsKIAogCWlmICh3cml0ZSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCW9wID0gT1BfT1I7Ci0JcmV0dXJuIGRvX3Byb2NfZG9pbnR2ZWModGFibGUsd3JpdGUsZmlscCxidWZmZXIsbGVucCxwcG9zLAotCQkJCWRvX3Byb2NfZG9pbnR2ZWNfYnNldF9jb252LCZvcCk7CisJdCA9ICp0YWJsZTsKKwl0LmRhdGEgPSAmdG1wdGFpbnQ7CisJZXJyID0gcHJvY19kb3Vsb25ndmVjX21pbm1heCgmdCwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAod3JpdGUpIHsKKwkJLyoKKwkJICogUG9vciBtYW4ncyBhdG9taWMgb3IuIE5vdCB3b3J0aCBhZGRpbmcgYSBwcmltaXRpdmUKKwkJICogdG8gZXZlcnlvbmUncyBhdG9taWMuaCBmb3IgdGhpcworCQkgKi8KKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBCSVRTX1BFUl9MT05HICYmIHRtcHRhaW50ID4+IGk7IGkrKykgeworCQkJaWYgKCh0bXB0YWludCA+PiBpKSAmIDEpCisJCQkJYWRkX3RhaW50KGkpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RydWN0IGRvX3Byb2NfZG9pbnR2ZWNfbWlubWF4X2NvbnZfcGFyYW0gewpAQCAtMjcxOCw3ICsyNzE2LDcgQEAKICAqLwogCiAvKiBUaGUgZ2VuZXJpYyBzeXNjdGwgZGF0YSByb3V0aW5lICh1c2VkIGlmIG5vIHN0cmF0ZWd5IHJvdXRpbmUgc3VwcGxpZWQpICovCi1pbnQgc3lzY3RsX2RhdGEoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9kYXRhKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjc1Miw3ICsyNzUwLDcgQEAKIH0KIAogLyogVGhlIGdlbmVyaWMgc3RyaW5nIHN0cmF0ZWd5IHJvdXRpbmU6ICovCi1pbnQgc3lzY3RsX3N0cmluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX3N0cmluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNzk4LDcgKzI3OTYsNyBAQAogICogYXJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGdpdmVuIGluIHRoZSBhcnJheXMKICAqIHRhYmxlLT5leHRyYTEgYW5kIHRhYmxlLT5leHRyYTIsIHJlc3BlY3RpdmVseS4KICAqLwotaW50IHN5c2N0bF9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yODM0LDcgKzI4MzIsNyBAQAogfQogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byBjb252ZXJ0IGppZmZpZXMgdG8gc2Vjb25kcyAqLyAKLWludCBzeXNjdGxfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yODY4LDcgKzI4NjYsNyBAQAogfQogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byBjb252ZXJ0IGppZmZpZXMgdG8gc2Vjb25kcyAqLyAKLWludCBzeXNjdGxfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yOTIzLDM1ICsyOTIxLDM1IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgc3lzY3RsX2RhdGEoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9kYXRhKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHN5c2N0bF9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHN5c2N0bF9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHN5c2N0bF9tc19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL0tjb25maWcgYi9rZXJuZWwvdGltZS9LY29uZmlnCmluZGV4IDhkNTMxMDYuLjk1ZWQ0MjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL0tjb25maWcKKysrIGIva2VybmVsL3RpbWUvS2NvbmZpZwpAQCAtMyw3ICszLDYgQEAKICMKIGNvbmZpZyBUSUNLX09ORVNIT1QKIAlib29sCi0JZGVmYXVsdCBuCiAKIGNvbmZpZyBOT19IWgogCWJvb2wgIlRpY2tsZXNzIFN5c3RlbSAoRHluYW1pYyBUaWNrcykiCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCAwOTNkNGFjLi45ZWQyZWVjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTMyNSw2ICszMjUsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAorCS8qIHNhdmUgbXVsdF9vcmlnIG9uIHJlZ2lzdHJhdGlvbiAqLworCWMtPm11bHRfb3JpZyA9IGMtPm11bHQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzb3VyY2VfbG9jaywgZmxhZ3MpOwogCXJldCA9IGNsb2Nrc291cmNlX2VucXVldWUoYyk7CiAJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKaW5kZXggNGMyNTZmZC4uMWNhOTk1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jCisrKyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwpAQCAtNjEsNiArNjEsNyBAQAogCS5yZWFkCQk9IGppZmZpZXNfcmVhZCwKIAkubWFzawkJPSAweGZmZmZmZmZmLCAvKjMyYml0cyovCiAJLm11bHQJCT0gTlNFQ19QRVJfSklGRlkgPDwgSklGRklFU19TSElGVCwgLyogZGV0YWlscyBhYm92ZSAqLworCS5tdWx0X29yaWcJPSBOU0VDX1BFUl9KSUZGWSA8PCBKSUZGSUVTX1NISUZULAogCS5zaGlmdAkJPSBKSUZGSUVTX1NISUZULAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCAxYWQ0NmYzLi4xYTIwNzE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMTAsMTMgKzEwLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KIAogLyoKQEAgLTIxOCwxMSArMjE4LDExIEBACiAvKiBEaXNhYmxlIHRoZSBjbW9zIHVwZGF0ZSAtIHVzZWQgYnkgdmlydHVhbGl6YXRpb24gYW5kIGVtYmVkZGVkICovCiBpbnQgbm9fc3luY19jbW9zX2Nsb2NrICBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2sodW5zaWduZWQgbG9uZyBkdW1teSk7CitzdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAotc3RhdGljIERFRklORV9USU1FUihzeW5jX2Ntb3NfdGltZXIsIHN5bmNfY21vc19jbG9jaywgMCwgMCk7CitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoc3luY19jbW9zX3dvcmssIHN5bmNfY21vc19jbG9jayk7CiAKLXN0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayh1bnNpZ25lZCBsb25nIGR1bW15KQorc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93LCBuZXh0OwogCWludCBmYWlsID0gMTsKQEAgLTI1OCwxMyArMjU4LDEzIEBACiAJCW5leHQudHZfc2VjKys7CiAJCW5leHQudHZfbnNlYyAtPSBOU0VDX1BFUl9TRUM7CiAJfQotCW1vZF90aW1lcigmc3luY19jbW9zX3RpbWVyLCBqaWZmaWVzICsgdGltZXNwZWNfdG9famlmZmllcygmbmV4dCkpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3luY19jbW9zX3dvcmssIHRpbWVzcGVjX3RvX2ppZmZpZXMoJm5leHQpKTsKIH0KIAogc3RhdGljIHZvaWQgbm90aWZ5X2Ntb3NfdGltZXIodm9pZCkKIHsKIAlpZiAoIW5vX3N5bmNfY21vc19jbG9jaykKLQkJbW9kX3RpbWVyKCZzeW5jX2Ntb3NfdGltZXIsIGppZmZpZXMgKyAxKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzeW5jX2Ntb3Nfd29yaywgMCk7CiB9CiAKICNlbHNlCkBAIC0yNzcsMzggKzI3Nyw1MCBAQAogaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqdHhjKQogewogCXN0cnVjdCB0aW1lc3BlYyB0czsKLQlsb25nIHNhdmVfYWRqdXN0LCBzZWM7CiAJaW50IHJlc3VsdDsKIAotCS8qIEluIG9yZGVyIHRvIG1vZGlmeSBhbnl0aGluZywgeW91IGdvdHRhIGJlIHN1cGVyLXVzZXIhICovCi0JaWYgKHR4Yy0+bW9kZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCS8qIE5vdyB3ZSB2YWxpZGF0ZSB0aGUgZGF0YSBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMgKi8KLQotCWlmICgodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKSB7CisJLyogVmFsaWRhdGUgdGhlIGRhdGEgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzICovCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgewogCQkvKiBzaW5nbGVzaG90IG11c3Qgbm90IGJlIHVzZWQgd2l0aCBhbnkgb3RoZXIgbW9kZSBiaXRzICovCi0JCWlmICh0eGMtPm1vZGVzICYgfkFESl9PRkZTRVRfU1NfUkVBRCkKKwkJaWYgKCEodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfU0lOR0xFU0hPVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCEodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfUkVBRE9OTFkpICYmCisJCSAgICAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9IGVsc2UgeworCQkvKiBJbiBvcmRlciB0byBtb2RpZnkgYW55dGhpbmcsIHlvdSBnb3R0YSBiZSBzdXBlci11c2VyISAqLworCQkgaWYgKHR4Yy0+bW9kZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwkJLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEgKi8KKwkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSyAmJgorCQkgICAgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAorCQkgICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTICYmIHRpbWVfc3RhdGUgIT0gVElNRV9PSykKKwkJCWhydGltZXJfY2FuY2VsKCZsZWFwX3RpbWVyKTsKIAl9CiAKLQkvKiBpZiB0aGUgcXVhcnR6IGlzIG9mZiBieSBtb3JlIHRoYW4gMTAlIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nICEgKi8KLQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQotCQlpZiAodHhjLT50aWNrIDwgIDkwMDAwMC9VU0VSX0haIHx8Ci0JCSAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh0aW1lX3N0YXRlICE9IFRJTUVfT0sgJiYgdHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpCi0JCWhydGltZXJfY2FuY2VsKCZsZWFwX3RpbWVyKTsKIAlnZXRuc3RpbWVvZmRheSgmdHMpOwogCiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCi0JLyogU2F2ZSBmb3IgbGF0ZXIgLSBzZW1hbnRpY3Mgb2YgYWRqdGltZSBpcyB0byByZXR1cm4gb2xkIHZhbHVlICovCi0Jc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKLQogCS8qIElmIHRoZXJlIGFyZSBpbnB1dCBwYXJhbWV0ZXJzLCB0aGVuIHByb2Nlc3MgdGhlbSAqLworCWlmICh0eGMtPm1vZGVzICYgQURKX0FESlRJTUUpIHsKKwkJbG9uZyBzYXZlX2FkanVzdCA9IHRpbWVfYWRqdXN0OworCisJCWlmICghKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1JFQURPTkxZKSkgeworCQkJLyogYWRqdGltZSgpIGlzIGluZGVwZW5kZW50IGZyb20gbnRwX2FkanRpbWUoKSAqLworCQkJdGltZV9hZGp1c3QgPSB0eGMtPm9mZnNldDsKKwkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CisJCX0KKwkJdHhjLT5vZmZzZXQgPSBzYXZlX2FkanVzdDsKKwkJZ290byBhZGpfZG9uZTsKKwl9CiAJaWYgKHR4Yy0+bW9kZXMpIHsKKwkJbG9uZyBzZWM7CisKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKSB7CiAJCQlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYKIAkJCSAgICAhKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpIHsKQEAgLTM3NSwxMyArMzg3LDggQEAKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVEFJICYmIHR4Yy0+Y29uc3RhbnQgPiAwKQogCQkJdGltZV90YWkgPSB0eGMtPmNvbnN0YW50OwogCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkgewotCQkJaWYgKHR4Yy0+bW9kZXMgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKQotCQkJCS8qIGFkanRpbWUoKSBpcyBpbmRlcGVuZGVudCBmcm9tIG50cF9hZGp0aW1lKCkgKi8KLQkJCQl0aW1lX2FkanVzdCA9IHR4Yy0+b2Zmc2V0OwotCQkJZWxzZQotCQkJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKLQkJfQorCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCisJCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7CiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCiAJCQl0aWNrX3VzZWMgPSB0eGMtPnRpY2s7CiAKQEAgLTM4OSwyMiArMzk2LDE4IEBACiAJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwogCX0KIAorCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKKwkJCQkgIE5UUF9TQ0FMRV9TSElGVCk7CisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7CisKK2Fkal9kb25lOgogCXJlc3VsdCA9IHRpbWVfc3RhdGU7CS8qIG1vc3RseSBgVElNRV9PSycgKi8KIAlpZiAodGltZV9zdGF0dXMgJiAoU1RBX1VOU1lOQ3xTVEFfQ0xPQ0tFUlIpKQogCQlyZXN1bHQgPSBUSU1FX0VSUk9SOwogCi0JaWYgKCh0eGMtPm1vZGVzID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgfHwKLQkgICAgKHR4Yy0+bW9kZXMgPT0gQURKX09GRlNFVF9TU19SRUFEKSkKLQkJdHhjLT5vZmZzZXQgPSBzYXZlX2FkanVzdDsKLQllbHNlIHsKLQkJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAotCQkJCQkgIE5UUF9TQ0FMRV9TSElGVCk7Ci0JCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKLQl9Ci0JdHhjLT5mcmVxCSAgID0gc2hpZnRfcmlnaHQoKHMzMikodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKLQkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwKLQkJCQkJIE5UUF9TQ0FMRV9TSElGVCk7CisJdHhjLT5mcmVxCSAgID0gc2hpZnRfcmlnaHQoKHRpbWVfZnJlcSA+PiBQUE1fU0NBTEVfSU5WX1NISUZUKSAqCisJCQkJCSAoczY0KVBQTV9TQ0FMRV9JTlYsIE5UUF9TQ0FMRV9TSElGVCk7CiAJdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7CiAJdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7CiAJdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCmluZGV4IGNiMDFjZDguLmY5OGExYjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwpAQCAtMzg0LDYgKzM4NCwxOSBAQAogfQogCiAvKgorICogQ2FsbGVkIGZyb20gaXJxX2VudGVyKCkgd2hlbiBpZGxlIHdhcyBpbnRlcnJ1cHRlZCB0byByZWVuYWJsZSB0aGUKKyAqIHBlciBjcHUgZGV2aWNlLgorICovCit2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSkKK3sKKwlpZiAoY3B1X2lzc2V0KGNwdSwgdGlja19icm9hZGNhc3Rfb25lc2hvdF9tYXNrKSkgeworCQlzdHJ1Y3QgdGlja19kZXZpY2UgKnRkID0gJnBlcl9jcHUodGlja19jcHVfZGV2aWNlLCBjcHUpOworCisJCWNsb2NrZXZlbnRzX3NldF9tb2RlKHRkLT5ldnRkZXYsIENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOworCX0KK30KKworLyoKICAqIEhhbmRsZSBvbmVzaG90IG1vZGUgYnJvYWRjYXN0aW5nCiAgKi8KIHN0YXRpYyB2b2lkIHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaCBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAppbmRleCA0NjkyNDg3Li5iMWMwNWJmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKKysrIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCkBAIC0zNiw2ICszNiw3IEBACiBleHRlcm4gdm9pZCB0aWNrX3NodXRkb3duX2Jyb2FkY2FzdF9vbmVzaG90KHVuc2lnbmVkIGludCAqY3B1cCk7CiBleHRlcm4gaW50IHRpY2tfcmVzdW1lX2Jyb2FkY2FzdF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKTsKIGV4dGVybiBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCk7CitleHRlcm4gdm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpOwogIyBlbHNlIC8qIEJST0FEQ0FTVCAqLwogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCiB7CkBAIC00NSw2ICs0Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfc3dpdGNoX3RvX29uZXNob3Qodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApIHsgfQogc3RhdGljIGlubGluZSBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSkgeyB9CiAjIGVuZGlmIC8qICFCUk9BRENBU1QgKi8KIAogI2Vsc2UgLyogIU9ORVNIT1QgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCBhNGQyMTkzLi4wNTgxYzExIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiB9CiAKLXZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KQorc3RhdGljIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KQogewogCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOwogCkBAIC0yNzAsNyArMjcwLDcgQEAKIAluZXh0X2ppZmZpZXMgPSBnZXRfbmV4dF90aW1lcl9pbnRlcnJ1cHQobGFzdF9qaWZmaWVzKTsKIAlkZWx0YV9qaWZmaWVzID0gbmV4dF9qaWZmaWVzIC0gbGFzdF9qaWZmaWVzOwogCi0JaWYgKHJjdV9uZWVkc19jcHUoY3B1KSkKKwlpZiAocmN1X25lZWRzX2NwdShjcHUpIHx8IHByaW50a19uZWVkc19jcHUoY3B1KSkKIAkJZGVsdGFfamlmZmllcyA9IDE7CiAJLyoKIAkgKiBEbyBub3Qgc3RvcCB0aGUgdGljaywgaWYgd2UgYXJlIG9ubHkgb25lIG9mZgpAQCAtMzc3LDYgKzM3NywzMiBAQAogCXJldHVybiB0cy0+c2xlZXBfbGVuZ3RoOwogfQogCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfcmVzdGFydChzdHJ1Y3QgdGlja19zY2hlZCAqdHMsIGt0aW1lX3Qgbm93KQoreworCWhydGltZXJfY2FuY2VsKCZ0cy0+c2NoZWRfdGltZXIpOworCXRzLT5zY2hlZF90aW1lci5leHBpcmVzID0gdHMtPmlkbGVfdGljazsKKworCXdoaWxlICgxKSB7CisJCS8qIEZvcndhcmQgdGhlIHRpbWUgdG8gZXhwaXJlIGluIHRoZSBmdXR1cmUgKi8KKwkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOworCisJCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7CisJCQlocnRpbWVyX3N0YXJ0KCZ0cy0+c2NoZWRfdGltZXIsCisJCQkJICAgICAgdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMsCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCQkvKiBDaGVjaywgaWYgdGhlIHRpbWVyIHdhcyBhbHJlYWR5IGluIHRoZSBwYXN0ICovCisJCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnRzLT5zY2hlZF90aW1lcikpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRpY2tfcHJvZ3JhbV9ldmVudCh0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywgMCkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogVXBkYXRlIGppZmZpZXMgYW5kIHJlcmVhZCB0aW1lICovCisJCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOworCQlub3cgPSBrdGltZV9nZXQoKTsKKwl9Cit9CisKIC8qKgogICogdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayAtIHJlc3RhcnQgdGhlIGlkbGUgdGljayBmcm9tIHRoZSBpZGxlIHRhc2sKICAqCkBAIC00MzAsMjggKzQ1Niw3IEBACiAJICovCiAJdHMtPnRpY2tfc3RvcHBlZCAgPSAwOwogCXRzLT5pZGxlX2V4aXR0aW1lID0gbm93OwotCWhydGltZXJfY2FuY2VsKCZ0cy0+c2NoZWRfdGltZXIpOwotCXRzLT5zY2hlZF90aW1lci5leHBpcmVzID0gdHMtPmlkbGVfdGljazsKLQotCXdoaWxlICgxKSB7Ci0JCS8qIEZvcndhcmQgdGhlIHRpbWUgdG8gZXhwaXJlIGluIHRoZSBmdXR1cmUgKi8KLQkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOwotCi0JCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7Ci0JCQlocnRpbWVyX3N0YXJ0KCZ0cy0+c2NoZWRfdGltZXIsCi0JCQkJICAgICAgdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMsCi0JCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7Ci0JCQkvKiBDaGVjaywgaWYgdGhlIHRpbWVyIHdhcyBhbHJlYWR5IGluIHRoZSBwYXN0ICovCi0JCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnRzLT5zY2hlZF90aW1lcikpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIXRpY2tfcHJvZ3JhbV9ldmVudCh0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywgMCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJLyogVXBkYXRlIGppZmZpZXMgYW5kIHJlcmVhZCB0aW1lICovCi0JCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOwotCQlub3cgPSBrdGltZV9nZXQoKTsKLQl9CisJdGlja19ub2h6X3Jlc3RhcnQodHMsIG5vdyk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCkBAIC01MDMsMTAgKzUwOCw2IEBACiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAKLQkvKiBEbyBub3QgcmVzdGFydCwgd2hlbiB3ZSBhcmUgaW4gdGhlIGlkbGUgbG9vcCAqLwotCWlmICh0cy0+dGlja19zdG9wcGVkKQotCQlyZXR1cm47Ci0KIAl3aGlsZSAodGlja19ub2h6X3JlcHJvZ3JhbSh0cywgbm93KSkgewogCQlub3cgPSBrdGltZV9nZXQoKTsKIAkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CkBAIC01NTIsNiArNTUzLDI3IEBACiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKKy8qCisgKiBXaGVuIE5PSFogaXMgZW5hYmxlZCBhbmQgdGhlIHRpY2sgaXMgc3RvcHBlZCwgd2UgbmVlZCB0byBraWNrIHRoZQorICogdGljayB0aW1lciBmcm9tIGlycV9lbnRlcigpIHNvIHRoYXQgdGhlIGppZmZpZXMgdXBkYXRlIGlzIGtlcHQKKyAqIGFsaXZlIGR1cmluZyBsb25nIHJ1bm5pbmcgc29mdGlycXMuIFRoYXQncyB1Z2x5IGFzIGhlbGwsIGJ1dAorICogY29ycmVjdG5lc3MgaXMga2V5IGV2ZW4gaWYgd2UgbmVlZCB0byBmaXggdGhlIG9mZmVuZGluZyBzb2Z0aXJxIGluCisgKiB0aGUgZmlyc3QgcGxhY2UuCisgKgorICogTm90ZSwgdGhpcyBpcyBkaWZmZXJlbnQgdG8gdGlja19ub2h6X3Jlc3RhcnQuIFdlIGp1c3Qga2ljayB0aGUKKyAqIHRpbWVyIGFuZCBkbyBub3QgdG91Y2ggdGhlIG90aGVyIG1hZ2ljIGJpdHMgd2hpY2ggbmVlZCB0byBiZSBkb25lCisgKiB3aGVuIGlkbGUgaXMgbGVmdC4KKyAqLworc3RhdGljIHZvaWQgdGlja19ub2h6X2tpY2tfdGljayhpbnQgY3B1KQoreworCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOworCisJaWYgKCF0cy0+dGlja19zdG9wcGVkKQorCQlyZXR1cm47CisKKwl0aWNrX25vaHpfcmVzdGFydCh0cywga3RpbWVfZ2V0KCkpOworfQorCiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N3aXRjaF90b19ub2h6KHZvaWQpIHsgfQpAQCAtNTU5LDYgKzU4MSwxOSBAQAogI2VuZGlmIC8qIE5PX0haICovCiAKIC8qCisgKiBDYWxsZWQgZnJvbSBpcnFfZW50ZXIgdG8gbm90aWZ5IGFib3V0IHRoZSBwb3NzaWJsZSBpbnRlcnJ1cHRpb24gb2YgaWRsZSgpCisgKi8KK3ZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpCit7CisJdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChjcHUpOworI2lmZGVmIENPTkZJR19OT19IWgorCXRpY2tfbm9oel9zdG9wX2lkbGUoY3B1KTsKKwl0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXMoKTsKKwl0aWNrX25vaHpfa2lja190aWNrKGNwdSk7CisjZW5kaWYKK30KKworLyoKICAqIEhpZ2ggcmVzb2x1dGlvbiB0aW1lciBzcGVjaWZpYyBjb2RlCiAgKi8KICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCkBAIC02MTEsMTAgKzY0Niw2IEBACiAJCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKIAl9CiAKLQkvKiBEbyBub3QgcmVzdGFydCwgd2hlbiB3ZSBhcmUgaW4gdGhlIGlkbGUgbG9vcCAqLwotCWlmICh0cy0+dGlja19zdG9wcGVkKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAlocnRpbWVyX2ZvcndhcmQodGltZXIsIG5vdywgdGlja19wZXJpb2QpOwogCiAJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGU5MWMyOWYuLmU3YWNmYjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNTgsMjcgKzU4LDI2IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAvKioKLSAqIF9fZ2V0X25zZWNfb2Zmc2V0IC0gUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgdG8gcGVyaW9kaWNfaG9vaworICogY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3cgLSB1cGRhdGUgY2xvY2sgdG8gdGhlIGN1cnJlbnQgdGltZQogICoKLSAqIHByaXZhdGUgZnVuY3Rpb24sIG11c3QgaG9sZCB4dGltZV9sb2NrIGxvY2sgd2hlbiBiZWluZwotICogY2FsbGVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgc2luY2UgdGhlCi0gKiBsYXN0IGNhbGwgdG8gdXBkYXRlX3dhbGxfdGltZSgpIChhZGp1c3RlZCBieSBOVFAgc2NhbGluZykKKyAqIEZvcndhcmQgdGhlIGN1cnJlbnQgY2xvY2sgdG8gdXBkYXRlIGl0cyBzdGF0ZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiB1cGRhdGVfd2FsbF90aW1lKCkuIFRoaXMgaXMgdXNlZnVsIGJlZm9yZSBzaWduaWZpY2FudCBjbG9jayBjaGFuZ2VzLAorICogYXMgaXQgYXZvaWRzIGhhdmluZyB0byBkZWFsIHdpdGggdGhpcyB0aW1lIG9mZnNldCBleHBsaWNpdGx5LgogICovCi1zdGF0aWMgaW5saW5lIHM2NCBfX2dldF9uc2VjX29mZnNldCh2b2lkKQorc3RhdGljIHZvaWQgY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3codm9pZCkKIHsKIAljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7Ci0JczY0IG5zX29mZnNldDsKKwlzNjQgbnNlYzsKIAotCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCiAJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCiAJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBjeWNsZV9ub3c7CiAKLQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLwotCW5zX29mZnNldCA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOworCW5zZWMgPSBjeWMybnMoY2xvY2ssIGN5Y2xlX2RlbHRhKTsKKwl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCBuc2VjKTsKIAotCXJldHVybiBuc19vZmZzZXQ7CisJbnNlYyA9ICgoczY0KWN5Y2xlX2RlbHRhICogY2xvY2stPm11bHRfb3JpZykgPj4gY2xvY2stPnNoaWZ0OworCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjICs9IG5zZWM7CiB9CiAKIC8qKgpAQCAtODksNiArODgsNyBAQAogICovCiB2b2lkIGdldG5zdGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CisJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOwogCXVuc2lnbmVkIGxvbmcgc2VxOwogCXM2NCBuc2VjczsKIApAQCAtOTYsNyArOTYsMTUgQEAKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CiAKIAkJKnRzID0geHRpbWU7Ci0JCW5zZWNzID0gX19nZXRfbnNlY19vZmZzZXQoKTsKKworCQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLworCQljeWNsZV9ub3cgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCisJCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCisJCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJCW5zZWNzID0gY3ljMm5zKGNsb2NrLCBjeWNsZV9kZWx0YSk7CiAKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIApAQCAtMTI5LDIyICsxMzcsMjIgQEAKICAqLwogaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQogeworCXN0cnVjdCB0aW1lc3BlYyB0c19kZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKIAogCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKLQluc2VjIC09IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisJY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3coKTsKIAotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKKwl0c19kZWx0YS50dl9zZWMgPSB0di0+dHZfc2VjIC0geHRpbWUudHZfc2VjOworCXRzX2RlbHRhLnR2X25zZWMgPSB0di0+dHZfbnNlYyAtIHh0aW1lLnR2X25zZWM7CisJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsIHRzX2RlbHRhKTsKIAotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKKwl4dGltZSA9ICp0djsKKwogCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAogCWNsb2NrLT5lcnJvciA9IDA7CkBAIC0xNzAsMjIgKzE3OCwxOSBAQAogc3RhdGljIHZvaWQgY2hhbmdlX2Nsb2Nrc291cmNlKHZvaWQpCiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpuZXc7Ci0JY3ljbGVfdCBub3c7Ci0JdTY0IG5zZWM7CiAKIAluZXcgPSBjbG9ja3NvdXJjZV9nZXRfbmV4dCgpOwogCiAJaWYgKGNsb2NrID09IG5ldykKIAkJcmV0dXJuOwogCi0JbmV3LT5jeWNsZV9sYXN0ID0gMDsKLQlub3cgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7Ci0JbnNlYyA9ICBfX2dldF9uc2VjX29mZnNldCgpOwotCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIG5zZWMpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CisKKwluZXctPnJhd190aW1lID0gY2xvY2stPnJhd190aW1lOwogCiAJY2xvY2sgPSBuZXc7Ci0JY2xvY2stPmN5Y2xlX2xhc3QgPSBub3c7Ci0KKwljbG9jay0+Y3ljbGVfbGFzdCA9IDA7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7CiAJY2xvY2stPmVycm9yID0gMDsKIAljbG9jay0+eHRpbWVfbnNlYyA9IDA7CiAJY2xvY2tzb3VyY2VfY2FsY3VsYXRlX2ludGVydmFsKGNsb2NrLCBOVFBfSU5URVJWQUxfTEVOR1RIKTsKQEAgLTIwMCwxMSArMjA1LDQ0IEBACiAJICovCiB9CiAjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgczY0IF9fZ2V0X25zZWNfb2Zmc2V0KHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAvKioKKyAqIGdldHJhd21vbm90b25pYyAtIFJldHVybnMgdGhlIHJhdyBtb25vdG9uaWMgdGltZSBpbiBhIHRpbWVzcGVjCisgKiBAdHM6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQKKyAqCisgKiBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgKGNvbXBsZXRlbHkgdW4tbW9kaWZpZWQgYnkgbnRwKQorICovCit2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXVuc2lnbmVkIGxvbmcgc2VxOworCXM2NCBuc2VjczsKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOworCisJCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCisJCWN5Y2xlX25vdyA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdXBkYXRlX3dhbGxfdGltZTogKi8KKwkJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisKKwkJLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KKwkJbnNlY3MgPSAoKHM2NCljeWNsZV9kZWx0YSAqIGNsb2NrLT5tdWx0X29yaWcpID4+IGNsb2NrLT5zaGlmdDsKKworCQkqdHMgPSBjbG9jay0+cmF3X3RpbWU7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKKworCXRpbWVzcGVjX2FkZF9ucyh0cywgbnNlY3MpOworfQorRVhQT1JUX1NZTUJPTChnZXRyYXdtb25vdG9uaWMpOworCisKKy8qKgogICogdGltZWtlZXBpbmdfdmFsaWRfZm9yX2hyZXMgLSBDaGVjayBpZiB0aW1la2VlcGluZyBpcyBzdWl0YWJsZSBmb3IgaHJlcwogICovCiBpbnQgdGltZWtlZXBpbmdfdmFsaWRfZm9yX2hyZXModm9pZCkKQEAgLTI2NSw4ICszMDMsNiBAQAogc3RhdGljIGludCB0aW1la2VlcGluZ19zdXNwZW5kZWQ7CiAvKiB0aW1lIGluIHNlY29uZHMgd2hlbiBzdXNwZW5kIGJlZ2FuICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7Ci0vKiB4dGltZSBvZmZzZXQgd2hlbiB3ZSB3ZW50IGludG8gc3VzcGVuZCAqLwotc3RhdGljIHM2NCB0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzOwogCiAvKioKICAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLgpAQCAtMjkyLDggKzMyOCw2IEBACiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBzbGVlcF9sZW5ndGg7CiAJCXRvdGFsX3NsZWVwX3RpbWUgKz0gc2xlZXBfbGVuZ3RoOwogCX0KLQkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBjb3JyZWN0IHh0aW1lIHJlZmVyZW5jZSAqLwotCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIHRpbWVrZWVwaW5nX3N1c3BlbmRfbnNlY3MpOwogCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAkvKiByZS1iYXNlIHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCiAJY2xvY2stPmN5Y2xlX2xhc3QgPSAwOwpAQCAtMzE5LDggKzM1Myw3IEBACiAJdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkvKiBHZXQgdGhlIGN1cnJlbnQgeHRpbWUgb2Zmc2V0ICovCi0JdGltZWtlZXBpbmdfc3VzcGVuZF9uc2VjcyA9IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisJY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3coKTsKIAl0aW1la2VlcGluZ19zdXNwZW5kZWQgPSAxOwogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKQEAgLTQ1NCwyMyArNDg3LDI5IEBACiAjZWxzZQogCW9mZnNldCA9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKICNlbmRpZgotCWNsb2NrLT54dGltZV9uc2VjICs9IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CisJY2xvY2stPnh0aW1lX25zZWMgPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OwogCiAJLyogbm9ybWFsbHkgdGhpcyBsb29wIHdpbGwgcnVuIGp1c3Qgb25jZSwgaG93ZXZlciBpbiB0aGUKIAkgKiBjYXNlIG9mIGxvc3Qgb3IgbGF0ZSB0aWNrcywgaXQgd2lsbCBhY2N1bXVsYXRlIGNvcnJlY3RseS4KIAkgKi8KIAl3aGlsZSAob2Zmc2V0ID49IGNsb2NrLT5jeWNsZV9pbnRlcnZhbCkgewogCQkvKiBhY2N1bXVsYXRlIG9uZSBpbnRlcnZhbCAqLwotCQljbG9jay0+eHRpbWVfbnNlYyArPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWw7Ci0JCWNsb2NrLT5jeWNsZV9sYXN0ICs9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKIAkJb2Zmc2V0IC09IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKKwkJY2xvY2stPmN5Y2xlX2xhc3QgKz0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwogCisJCWNsb2NrLT54dGltZV9uc2VjICs9IGNsb2NrLT54dGltZV9pbnRlcnZhbDsKIAkJaWYgKGNsb2NrLT54dGltZV9uc2VjID49ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdCkgewogCQkJY2xvY2stPnh0aW1lX25zZWMgLT0gKHU2NClOU0VDX1BFUl9TRUMgPDwgY2xvY2stPnNoaWZ0OwogCQkJeHRpbWUudHZfc2VjKys7CiAJCQlzZWNvbmRfb3ZlcmZsb3coKTsKIAkJfQogCisJCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjICs9IGNsb2NrLT5yYXdfaW50ZXJ2YWw7CisJCWlmIChjbG9jay0+cmF3X3RpbWUudHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpIHsKKwkJCWNsb2NrLT5yYXdfdGltZS50dl9uc2VjIC09IE5TRUNfUEVSX1NFQzsKKwkJCWNsb2NrLT5yYXdfdGltZS50dl9zZWMrKzsKKwkJfQorCiAJCS8qIGFjY3VtdWxhdGUgZXJyb3IgYmV0d2VlbiBOVFAgYW5kIGNsb2NrIGludGVydmFsICovCiAJCWNsb2NrLT5lcnJvciArPSB0aWNrX2xlbmd0aDsKIAkJY2xvY2stPmVycm9yIC09IGNsb2NrLT54dGltZV9pbnRlcnZhbCA8PCAoTlRQX1NDQUxFX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKQEAgLTQ3OSw5ICs1MTgsMTIgQEAKIAkvKiBjb3JyZWN0IHRoZSBjbG9jayB3aGVuIE5UUCBlcnJvciBpcyB0b28gYmlnICovCiAJY2xvY2tzb3VyY2VfYWRqdXN0KG9mZnNldCk7CiAKLQkvKiBzdG9yZSBmdWxsIG5hbm9zZWNvbmRzIGludG8geHRpbWUgKi8KLQl4dGltZS50dl9uc2VjID0gKHM2NCljbG9jay0+eHRpbWVfbnNlYyA+PiBjbG9jay0+c2hpZnQ7CisJLyogc3RvcmUgZnVsbCBuYW5vc2Vjb25kcyBpbnRvIHh0aW1lIGFmdGVyIHJvdW5kaW5nIGl0IHVwIGFuZAorCSAqIGFkZCB0aGUgcmVtYWluZGVyIHRvIHRoZSBlcnJvciBkaWZmZXJlbmNlLgorCSAqLworCXh0aW1lLnR2X25zZWMgPSAoKHM2NCljbG9jay0+eHRpbWVfbnNlYyA+PiBjbG9jay0+c2hpZnQpICsgMTsKIAljbG9jay0+eHRpbWVfbnNlYyAtPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OworCWNsb2NrLT5lcnJvciArPSBjbG9jay0+eHRpbWVfbnNlYyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKIAogCXVwZGF0ZV94dGltZV9jYWNoZShjeWMybnMoY2xvY2ssIG9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggYTQwZTIwZi4uZjY0MjY5MSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtNDcsMTMgKzQ3LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wcmludF90aW1lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyICp0aW1lciwgaW50IGlkeCwgdTY0IG5vdykKK3ByaW50X3RpbWVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXIgKnRhZGRyLCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCisJICAgIGludCBpZHgsIHU2NCBub3cpCiB7CiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCiAJY2hhciB0bXBbVEFTS19DT01NX0xFTiArIDFdOwogI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiICMlZDogIiwgaWR4KTsKLQlwcmludF9uYW1lX29mZnNldChtLCB0aW1lcik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgdGFkZHIpOwogCVNFUV9wcmludGYobSwgIiwgIik7CiAJcHJpbnRfbmFtZV9vZmZzZXQobSwgdGltZXItPmZ1bmN0aW9uKTsKIAlTRVFfcHJpbnRmKG0sICIsIFM6JTAybHgiLCB0aW1lci0+c3RhdGUpOwpAQCAtOTksNyArMTAwLDcgQEAKIAkJdG1wID0gKnRpbWVyOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCi0JCXByaW50X3RpbWVyKG0sICZ0bXAsIGksIG5vdyk7CisJCXByaW50X3RpbWVyKG0sIHRpbWVyLCAmdG1wLCBpLCBub3cpOwogCQluZXh0Kys7CiAJCWdvdG8gbmV4dF9vbmU7CiAJfQpAQCAtMTA5LDYgKzExMCw3IEBACiBzdGF0aWMgdm9pZAogcHJpbnRfYmFzZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsIHU2NCBub3cpCiB7CisJU0VRX3ByaW50ZihtLCAiICAuYmFzZTogICAgICAgJXBcbiIsIGJhc2UpOwogCVNFUV9wcmludGYobSwgIiAgLmluZGV4OiAgICAgICVkXG4iLAogCQkJYmFzZS0+aW5kZXgpOwogCVNFUV9wcmludGYobSwgIiAgLnJlc29sdXRpb246ICVMdSBuc2Vjc1xuIiwKQEAgLTE4MywxMiArMTg1LDE2IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUwogc3RhdGljIHZvaWQKLXByaW50X3RpY2tkZXZpY2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGlja19kZXZpY2UgKnRkKQorcHJpbnRfdGlja2RldmljZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0aWNrX2RldmljZSAqdGQsIGludCBjcHUpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2ID0gdGQtPmV2dGRldjsKIAogCVNFUV9wcmludGYobSwgIlxuIik7CiAJU0VRX3ByaW50ZihtLCAiVGljayBEZXZpY2U6IG1vZGU6ICAgICAlZFxuIiwgdGQtPm1vZGUpOworCWlmIChjcHUgPCAwKQorCQlTRVFfcHJpbnRmKG0sICJCcm9hZGNhc3QgZGV2aWNlXG4iKTsKKwllbHNlCisJCVNFUV9wcmludGYobSwgIlBlciBDUFUgZGV2aWNlOiAlZFxuIiwgY3B1KTsKIAogCVNFUV9wcmludGYobSwgIkNsb2NrIEV2ZW50IERldmljZTogIik7CiAJaWYgKCFkZXYpIHsKQEAgLTIyMiw3ICsyMjgsNyBAQAogCWludCBjcHU7CiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKLQlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSk7CisJcHJpbnRfdGlja2RldmljZShtLCB0aWNrX2dldF9icm9hZGNhc3RfZGV2aWNlKCksIC0xKTsKIAlTRVFfcHJpbnRmKG0sICJ0aWNrX2Jyb2FkY2FzdF9tYXNrOiAlMDhseFxuIiwKIAkJICAgdGlja19nZXRfYnJvYWRjYXN0X21hc2soKS0+Yml0c1swXSk7CiAjaWZkZWYgQ09ORklHX1RJQ0tfT05FU0hPVApAQCAtMjMyLDcgKzIzOCw3IEBACiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKICNlbmRpZgogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkgICBwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2RldmljZShjcHUpKTsKKwkJcHJpbnRfdGlja2RldmljZShtLCB0aWNrX2dldF9kZXZpY2UoY3B1KSwgY3B1KTsKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogfQogI2Vsc2UKQEAgLTI0NCw3ICsyNTAsNyBAQAogCXU2NCBub3cgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CiAJaW50IGNwdTsKIAotCVNFUV9wcmludGYobSwgIlRpbWVyIExpc3QgVmVyc2lvbjogdjAuM1xuIik7CisJU0VRX3ByaW50ZihtLCAiVGltZXIgTGlzdCBWZXJzaW9uOiB2MC40XG4iKTsKIAlTRVFfcHJpbnRmKG0sICJIUlRJTUVSX01BWF9DTE9DS19CQVNFUzogJWRcbiIsIEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTKTsKIAlTRVFfcHJpbnRmKG0sICJub3cgYXQgJUxkIG5zZWNzXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW5vdyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggMDNiYzdmMS4uNTZiZWNmMyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTk3OCw2ICs5NzgsNyBAQAogCXJ1bl9sb2NhbF90aW1lcnMoKTsKIAlpZiAocmN1X3BlbmRpbmcoY3B1KSkKIAkJcmN1X2NoZWNrX2NhbGxiYWNrcyhjcHUsIHVzZXJfdGljayk7CisJcHJpbnRrX3RpY2soKTsKIAlzY2hlZHVsZXJfdGljaygpOwogCXJ1bl9wb3NpeF9jcHVfdGltZXJzKHApOwogfQpAQCAtMTQzNSw5ICsxNDM2LDExIEBACiAJQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7CiAJb2xkX2Jhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CiAJbmV3X2Jhc2UgPSBnZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCUJVR19PTihvbGRfYmFzZS0+cnVubmluZ190aW1lcik7CkBAIC0xNDUyLDggKzE0NTUsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0Jc3Bpbl91bmxvY2soJm5ld19iYXNlLT5sb2NrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJcHV0X2NwdV92YXIodHZlY19iYXNlcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYyBiL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jCmluZGV4IDRhYjk2NTkuLjNiMzRiMzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jCisrKyBiL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jCkBAIC02MCw3ICs2MCw3IEBACiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIC8qIFRoZSBnZW5lcmljIHN0cmluZyBzdHJhdGVneSByb3V0aW5lOiAqLwotc3RhdGljIGludCBzeXNjdGxfdXRzX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgc3lzY3RsX3V0c19zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC02OSw4ICs2OSw3IEBACiAJd3JpdGUgPSBuZXd2YWwgJiYgbmV3bGVuOwogCW1lbWNweSgmdXRzX3RhYmxlLCB0YWJsZSwgc2l6ZW9mKHV0c190YWJsZSkpOwogCXV0c190YWJsZS5kYXRhID0gZ2V0X3V0cyh0YWJsZSwgd3JpdGUpOwotCXIgPSBzeXNjdGxfc3RyaW5nKCZ1dHNfdGFibGUsIG5hbWUsIG5sZW4sCi0JCW9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXIgPSBzeXNjdGxfc3RyaW5nKCZ1dHNfdGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCXB1dF91dHModGFibGUsIHdyaXRlLCB1dHNfdGFibGUuZGF0YSk7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvd2FpdC5jIGIva2VybmVsL3dhaXQuYwppbmRleCBjMjc1YzU2Li5jZDg3MTMxIDEwMDY0NAotLS0gYS9rZXJuZWwvd2FpdC5jCisrKyBiL2tlcm5lbC93YWl0LmMKQEAgLTcyLDEyICs3Miw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9lbXB0eSgmd2FpdC0+dGFza19saXN0KSkKIAkJX19hZGRfd2FpdF9xdWV1ZShxLCB3YWl0KTsKLQkvKgotCSAqIGRvbid0IGFsdGVyIHRoZSB0YXNrIHN0YXRlIGlmIHRoaXMgaXMganVzdCBnb2luZyB0bwotCSAqIHF1ZXVlIGFuIGFzeW5jIHdhaXQgcXVldWUgY2FsbGJhY2sKLQkgKi8KLQlpZiAoaXNfc3luY193YWl0KHdhaXQpKQotCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CisJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0wocHJlcGFyZV90b193YWl0KTsKQEAgLTkxLDEyICs4Niw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9lbXB0eSgmd2FpdC0+dGFza19saXN0KSkKIAkJX19hZGRfd2FpdF9xdWV1ZV90YWlsKHEsIHdhaXQpOwotCS8qCi0JICogZG9uJ3QgYWx0ZXIgdGhlIHRhc2sgc3RhdGUgaWYgdGhpcyBpcyBqdXN0IGdvaW5nIHRvCi0gCSAqIHF1ZXVlIGFuIGFzeW5jIHdhaXQgcXVldWUgY2FsbGJhY2sKLQkgKi8KLQlpZiAoaXNfc3luY193YWl0KHdhaXQpKQotCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CisJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0wocHJlcGFyZV90b193YWl0X2V4Y2x1c2l2ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggNDA0OGU5Mi4uNzE0YWZhZCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtOSw3ICs5LDcgQEAKICAqIERlcml2ZWQgZnJvbSB0aGUgdGFza3F1ZXVlL2tldmVudGQgY29kZSBieToKICAqCiAgKiAgIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KLSAqICAgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogICBBbmRyZXcgTW9ydG9uCiAgKiAgIEthaSBQZXR6a2UgPHdwcEBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgogICogICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgogICoKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggYzdhZDdhNS4uODVjZjdlYSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTgsMTAgKzgsMTAgQEAKIAl0cmlzdGF0ZQogCiBjb25maWcgR0VORVJJQ19GSU5EX0ZJUlNUX0JJVAotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgQ1JDX0NDSVRUCiAJdHJpc3RhdGUgIkNSQy1DQ0lUVCBmdW5jdGlvbnMiCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGFhODFkMjguLmIwZjIzOWUgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC02NTIsNiArNjUyLDExIEBACiAJZGVwZW5kcyBvbiBCTE9DSwogCWRlZmF1bHQgbgogCWhlbHAKKwkgIEJJRyBGQVQgV0FSTklORzogRU5BQkxJTkcgVEhJUyBPUFRJT04gTUlHSFQgQlJFQUsgQk9PVElORyBPTgorCSAgU09NRSBESVNUUklCVVRJT05TLiAgRE8gTk9UIEVOQUJMRSBUSElTIFVOTEVTUyBZT1UgS05PVyBXSEFUCisJICBZT1UgQVJFIERPSU5HLiAgRGlzdHJvcywgcGxlYXNlIGVuYWJsZSB0aGlzIGFuZCBmaXggd2hhdGV2ZXIKKwkgIGlzIGJyb2tlbi4KKwogCSAgQ29udmVudGlvbmFsbHksIGJsb2NrIGRldmljZSBudW1iZXJzIGFyZSBhbGxvY2F0ZWQgZnJvbQogCSAgcHJlZGV0ZXJtaW5lZCBjb250aWd1b3VzIGFyZWEuICBIb3dldmVyLCBleHRlbmRlZCBibG9jayBhcmVhCiAJICBtYXkgaW50cm9kdWNlIG5vbi1jb250aWd1b3VzIGJsb2NrIGRldmljZSBudW1iZXJzLiAgVGhpcwpAQCAtODA3LDYgKzgxMiw2MSBAQAogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAorY29uZmlnIERZTkFNSUNfUFJJTlRLX0RFQlVHCisJYm9vbCAiRW5hYmxlIGR5bmFtaWMgcHJpbnRrKCkgY2FsbCBzdXBwb3J0IgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gUFJJTlRLCisJc2VsZWN0IFBSSU5US19ERUJVRworCWhlbHAKKworCSAgQ29tcGlsZXMgZGVidWcgbGV2ZWwgbWVzc2FnZXMgaW50byB0aGUga2VybmVsLCB3aGljaCB3b3VsZCBub3QKKwkgIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgYXQgcnVudGltZS4gVGhlc2UgbWVzc2FnZXMgY2FuIHRoZW4gYmUKKwkgIGVuYWJsZWQvZGlzYWJsZWQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLiBUaGlzIG1lY2hhbmlzbSBpbXBsaWNpdGx5CisJICBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YgdGhpcworCSAgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KKworCSAgVXNhZ2U6CisKKwkgIER5bmFtaWMgZGVidWdnaW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGRlYnVnZnMgZmlsZSwKKwkgIGR5bmFtaWNfcHJpbnRrL21vZHVsZXMuIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIG1vZHVsZXMgdGhhdAorCSAgY2FuIGJlIGVuYWJsZWQuIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgaXMgdGhlIG1vZHVsZSBuYW1lLCBmb2xsb3dlZAorCSAgYnkgYSBzZXQgb2YgZmxhZ3MgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlIGZpcnN0IGZsYWcgaXMgYWx3YXlzIHRoZQorCSAgJ2VuYWJsZWQnIGZsYWcuIEZvciBleGFtcGxlOgorCisJCTxtb2R1bGVfbmFtZT4gPGVuYWJsZWQ9MC8xPgorCQkJCS4KKwkJCQkuCisJCQkJLgorCisJICA8bW9kdWxlX25hbWU+IDogTmFtZSBvZiB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBkZWJ1ZyBjYWxsIHJlc2lkZXMKKwkgIDxlbmFibGVkPTAvMT4gOiB3aGV0aGVyIHRoZSBtZXNzYWdlcyBhcmUgZW5hYmxlZCBvciBub3QKKworCSAgRnJvbSBhIGxpdmUgc3lzdGVtOgorCisJCXNuZF9oZGFfaW50ZWwgZW5hYmxlZD0wCisJCWZpeHVwIGVuYWJsZWQ9MAorCQlkcml2ZXIgZW5hYmxlZD0wCisKKwkgIEVuYWJsZSBhIG1vZHVsZToKKworCSAgCSRlY2hvICJzZXQgZW5hYmxlZD0xIDxtb2R1bGVfbmFtZT4iID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCisJICBEaXNhYmxlIGEgbW9kdWxlOgorCisJICAJJGVjaG8gInNldCBlbmFibGVkPTAgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisKKwkgIEVuYWJsZSBhbGwgbW9kdWxlczoKKworCQkkZWNobyAic2V0IGVuYWJsZWQ9MSBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCisJICBEaXNhYmxlIGFsbCBtb2R1bGVzOgorCisJCSRlY2hvICJzZXQgZW5hYmxlZD0wIGFsbCIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisKKwkgIEZpbmFsbHksIHBhc3NpbmcgImR5bmFtaWNfcHJpbnRrIiBhdCB0aGUgY29tbWFuZCBsaW5lIGVuYWJsZXMKKwkgIGRlYnVnZ2luZyBmb3IgYWxsIG1vZHVsZXMuIFRoaXMgbW9kZSBjYW4gYmUgdHVybmVkIG9mZiB2aWEgdGhlIGFib3ZlCisJICBkaXNhYmxlIGNvbW1hbmQuCisKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCiBzb3VyY2UgImxpYi9LY29uZmlnLmtnZGIiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggNDQwMDFhZi4uMTZmZWFhYiAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtODEsNiArODEsOCBAQAogCiBvYmotJChDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSykgKz0gc3lzY2FsbC5vCiAKK29iai0kKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykgKz0gZHluYW1pY19wcmludGsubworCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCiAKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAwNmZiNTdjLi40ODJkZjk0IDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC0zMTYsMTcgKzMxNiw2IEBACiBFWFBPUlRfU1lNQk9MKGJpdG1hcF9zY25wcmludGYpOwogCiAvKioKLSAqIGJpdG1hcF9zY25wcmludGZfbGVuIC0gcmV0dXJuIGJ1ZmZlciBsZW5ndGggbmVlZGVkIHRvIGNvbnZlcnQKLSAqIGJpdG1hcCB0byBhbiBBU0NJSSBoZXggc3RyaW5nCi0gKiBAbnJfYml0czogbnVtYmVyIG9mIGJpdHMgdG8gYmUgY29udmVydGVkCi0gKi8KLWludCBiaXRtYXBfc2NucHJpbnRmX2xlbih1bnNpZ25lZCBpbnQgbnJfYml0cykKLXsKLQl1bnNpZ25lZCBpbnQgbnJfbmliYmxlcyA9IEFMSUdOKG5yX2JpdHMsIDQpIC8gNDsKLQlyZXR1cm4gbnJfbmliYmxlcyArIEFMSUdOKG5yX25pYmJsZXMsIENIVU5LU1ogLyA0KSAvIChDSFVOS1NaIC8gNCkgLSAxOwotfQotCi0vKioKICAqIF9fYml0bWFwX3BhcnNlIC0gY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIGludG8gYSBiaXRtYXAuCiAgKiBAYnVmOiBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHN0cmluZy4KICAqIEBidWZsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19wcmludGsuYyBiL2xpYi9keW5hbWljX3ByaW50ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDBmODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZHluYW1pY19wcmludGsuYwpAQCAtMCwwICsxLDQxOCBAQAorLyoKKyAqIGxpYi9keW5hbWljX3ByaW50ay5jCisgKgorICogbWFrZSBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBydW50aW1lIGNvbmZpZ3VyYWJsZSBiYXNlZCB1cG9uIHRoZWlyCisgKiB0aGVpciBzb3VyY2UgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuLCBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCitleHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0YXJ0X19fdmVyYm9zZVtdOworZXh0ZXJuIHN0cnVjdCBtb2RfZGVidWcgX19zdG9wX19fdmVyYm9zZVtdOworCitzdHJ1Y3QgZGVidWdfbmFtZSB7CisJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUgaGxpc3QyOworCWludCBoYXNoMTsKKwlpbnQgaGFzaDI7CisJY2hhciAqbmFtZTsKKwlpbnQgZW5hYmxlOworCWludCB0eXBlOworfTsKKworc3RhdGljIGludCBucl9lbnRyaWVzOworc3RhdGljIGludCBudW1fZW5hYmxlZDsKK2ludCBkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfTk9ORTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGVbREVCVUdfSEFTSF9UQUJMRV9TSVpFXSA9CisJeyBbMCAuLi4gREVCVUdfSEFTSF9UQUJMRV9TSVpFLTFdID0gSExJU1RfSEVBRF9JTklUIH07CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlX3RhYmxlMltERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KKwl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGRlYnVnX2xpc3RfbXV0ZXgpOworCisvKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7CitFWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX3ByaW50a19lbmFibGVkKTsKK2xvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkMjsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyKTsKKworLyogcmV0dXJucyB0aGUgZGVidWcgbW9kdWxlIHBvaW50ZXIuICovCitzdGF0aWMgc3RydWN0IGRlYnVnX25hbWUgKmZpbmRfZGVidWdfbW9kdWxlKGNoYXIgKm1vZHVsZV9uYW1lKQoreworCWludCBpOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OworCisJZWxlbWVudCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IERFQlVHX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7CisJCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbWVudCwgbm9kZSwgaGVhZCwgaGxpc3QpCisJCQlpZiAoIXN0cmNtcChlbGVtZW50LT5uYW1lLCBtb2R1bGVfbmFtZSkpCisJCQkJcmV0dXJuIGVsZW1lbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGVfaGFzaChjaGFyICptb2R1bGVfbmFtZSwgaW50IGhhc2gpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7CisKKwllbGVtZW50ID0gTlVMTDsKKwloZWFkID0gJm1vZHVsZV90YWJsZVtoYXNoXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbWVudCwgbm9kZSwgaGVhZCwgaGxpc3QpCisJCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKKwkJCXJldHVybiBlbGVtZW50OworCXJldHVybiBOVUxMOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4Ki8KK3N0YXRpYyBpbnQgX19hZGRfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgaGFzaCwgaW50IGhhc2gyKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICpuZXc7CisJY2hhciAqbW9kdWxlX25hbWU7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwltb2R1bGVfbmFtZSA9IGttYWxsb2Moc3RybGVuKG1vZF9uYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghbW9kdWxlX25hbWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCW1vZHVsZV9uYW1lID0gc3RyY3B5KG1vZHVsZV9uYW1lLCBtb2RfbmFtZSk7CisJbW9kdWxlX25hbWVbc3RybGVuKG1vZF9uYW1lKV0gPSAnXDAnOworCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWJ1Z19uYW1lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXcpIHsKKwkJa2ZyZWUobW9kdWxlX25hbWUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJSU5JVF9ITElTVF9OT0RFKCZuZXctPmhsaXN0KTsKKwlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QyKTsKKwluZXctPm5hbWUgPSBtb2R1bGVfbmFtZTsKKwluZXctPmhhc2gxID0gaGFzaDsKKwluZXctPmhhc2gyID0gaGFzaDI7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZuZXctPmhsaXN0LCAmbW9kdWxlX3RhYmxlW2hhc2hdKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QyLCAmbW9kdWxlX3RhYmxlMltoYXNoMl0pOworCW5yX2VudHJpZXMrKzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSkKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKKwlpbnQgcmV0ID0gMDsKKworCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOworCWVsZW1lbnQgPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7CisJaWYgKCFlbGVtZW50KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdCk7CisJaGxpc3RfZGVsX3JjdSgmZWxlbWVudC0+aGxpc3QyKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwlrZnJlZShlbGVtZW50LT5uYW1lKTsKKwlpZiAoZWxlbWVudC0+ZW5hYmxlKQorCQludW1fZW5hYmxlZC0tOworCWtmcmVlKGVsZW1lbnQpOworCW5yX2VudHJpZXMtLTsKK291dDoKKwl1cCgmZGVidWdfbGlzdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKKworaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKKwkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW07CisJaW50IHJldCA9IDA7CisKKwlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKKwllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOworCWlmICghZWxlbSkgeworCQlpZiAoX19hZGRfZGVidWdfbW9kdWxlKG1vZF9uYW1lLCBoYXNoLCBoYXNoMikpCisJCQlnb3RvIG91dDsKKwkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKKwkJaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMICYmCisJCQkJIXN0cmNtcChtb2RfbmFtZSwgc2hhcmVfbmFtZSkpIHsKKwkJCWVsZW0tPmVuYWJsZSA9IHRydWU7CisJCQludW1fZW5hYmxlZCsrOworCQl9CisJfQorCWVsZW0tPnR5cGUgfD0gdHlwZTsKK291dDoKKwl1cCgmZGVidWdfbGlzdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKTsKKworaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBpbnQgdmFsdWUsIGludCBoYXNoKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOworCWludCByZXQgPSAwOworCisJaWYgKGR5bmFtaWNfZW5hYmxlZCA9PSBEWU5BTUlDX0VOQUJMRURfQUxMKQorCQlyZXR1cm4gMTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlX2hhc2gobW9kX25hbWUsIGhhc2gpOworCWlmIChlbGVtICYmIGVsZW0tPmVuYWJsZSkKKwkJcmV0ID0gMTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcik7CisKK3N0YXRpYyB2b2lkIHNldF9hbGwoYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKmU7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJaW50IGk7CisJbG9uZyBsb25nIGVuYWJsZV9tYXNrOworCisJZm9yIChpID0gMDsgaSA8IERFQlVHX0hBU0hfVEFCTEVfU0laRTsgaSsrKSB7CisJCWlmIChtb2R1bGVfdGFibGVbaV0uZmlyc3QgIT0gTlVMTCkgeworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKKwkJCQllLT5lbmFibGUgPSBlbmFibGU7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuYWJsZSkKKwkJZW5hYmxlX21hc2sgPSBVTExPTkdfTUFYOworCWVsc2UKKwkJZW5hYmxlX21hc2sgPSAwOworCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgPSBlbmFibGVfbWFzazsKKwlkeW5hbWljX3ByaW50a19lbmFibGVkMiA9IGVuYWJsZV9tYXNrOworfQorCitzdGF0aWMgaW50IGRpc2FibGVkX2hhc2goaW50IGksIGJvb2wgZmlyc3RfdGFibGUpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKmU7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlpZiAoZmlyc3RfdGFibGUpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZVtpXSwgaGxpc3QpIHsKKwkJCWlmIChlLT5lbmFibGUpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlMltpXSwgaGxpc3QyKSB7CisJCQlpZiAoZS0+ZW5hYmxlKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBwcl9kZWJ1Z193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqYnVmZmVyLCAqcywgKnZhbHVlX3N0ciwgKnNldHRpbmdfc3RyOworCWludCBlcnIsIHZhbHVlOworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtID0gTlVMTDsKKwlpbnQgYWxsID0gMDsKKworCWlmIChsZW5ndGggPiBQQUdFX1NJWkUgfHwgbGVuZ3RoIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWZmZXIgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSAtRUZBVUxUOworCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgbGVuZ3RoKSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRUlOVkFMOworCWlmIChsZW5ndGggPCBQQUdFX1NJWkUpCisJCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKwllbHNlIGlmIChidWZmZXJbUEFHRV9TSVpFLTFdKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5WQUw7CisJZG93bigmZGVidWdfbGlzdF9tdXRleCk7CisKKwlpZiAoc3RybmNtcCgic2V0IiwgYnVmZmVyLCAzKSkKKwkJZ290byBvdXRfdXA7CisJcyA9IGJ1ZmZlciArIDM7CisJc2V0dGluZ19zdHIgPSBzdHJzZXAoJnMsICI9Iik7CisJaWYgKHMgPT0gTlVMTCkKKwkJZ290byBvdXRfdXA7CisJc2V0dGluZ19zdHIgPSBzdHJzdHJpcChzZXR0aW5nX3N0cik7CisJdmFsdWVfc3RyID0gc3Ryc2VwKCZzLCAiICIpOworCWlmIChzID09IE5VTEwpCisJCWdvdG8gb3V0X3VwOworCXMgPSBzdHJzdHJpcChzKTsKKwlpZiAoIXN0cm5jbXAocywgImFsbCIsIDMpKQorCQlhbGwgPSAxOworCWVsc2UKKwkJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKHMpOworCWlmICghc3RybmNtcChzZXR0aW5nX3N0ciwgImVuYWJsZSIsIDYpKSB7CisJCXZhbHVlID0gISFzaW1wbGVfc3RydG9sKHZhbHVlX3N0ciwgTlVMTCwgMTApOworCQlpZiAoYWxsKSB7CisJCQlpZiAodmFsdWUpIHsKKwkJCQlzZXRfYWxsKHRydWUpOworCQkJCW51bV9lbmFibGVkID0gbnJfZW50cmllczsKKwkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOworCQkJfSBlbHNlIHsKKwkJCQlzZXRfYWxsKGZhbHNlKTsKKwkJCQludW1fZW5hYmxlZCA9IDA7CisJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7CisJCQl9CisJCQllcnIgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKGVsZW0pIHsKKwkJCQlpZiAodmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAwKSkgeworCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkIHw9CisJCQkJCQkJKDFMTCA8PCBlbGVtLT5oYXNoMSk7CisJCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIHw9CisJCQkJCQkJKDFMTCA8PCBlbGVtLT5oYXNoMik7CisJCQkJCWVsZW0tPmVuYWJsZSA9IDE7CisJCQkJCW51bV9lbmFibGVkKys7CisJCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOworCQkJCQllcnIgPSAwOworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImRlYnVnZ2luZyBlbmFibGVkIGZvciBtb2R1bGUgJXMiLAorCQkJCQkgICAgICAgZWxlbS0+bmFtZSk7CisJCQkJfSBlbHNlIGlmICghdmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAxKSkgeworCQkJCQllbGVtLT5lbmFibGUgPSAwOworCQkJCQludW1fZW5hYmxlZC0tOworCQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMSwgdHJ1ZSkpCisJCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkICY9CisJCQkJCQkJfigxTEwgPDwgZWxlbS0+aGFzaDEpOworCQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMiwgZmFsc2UpKQorCQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgJj0KKwkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMik7CisJCQkJCWlmIChudW1fZW5hYmxlZCkKKwkJCQkJCWR5bmFtaWNfZW5hYmxlZCA9CisJCQkJCQkJRFlOQU1JQ19FTkFCTEVEX1NPTUU7CisJCQkJCWVsc2UKKwkJCQkJCWR5bmFtaWNfZW5hYmxlZCA9CisJCQkJCQkJRFlOQU1JQ19FTkFCTEVEX05PTkU7CisJCQkJCWVyciA9IDA7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCSAgICAgICAiZGVidWdnaW5nIGRpc2FibGVkIGZvciBtb2R1bGUgIgorCQkJCQkgICAgICAgIiVzIiwgZWxlbS0+bmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICghZXJyKQorCQllcnIgPSBsZW5ndGg7CitvdXRfdXA6CisJdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOworb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gKCpwb3MgPCBERUJVR19IQVNIX1RBQkxFX1NJWkUpID8gcG9zIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgKnByX2RlYnVnX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJaWYgKCpwb3MgPj0gREVCVUdfSEFTSF9UQUJMRV9TSVpFKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgdm9pZCBwcl9kZWJ1Z19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgaW50IHByX2RlYnVnX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKKwl1bnNpZ25lZCBpbnQgaSA9ICoobG9mZl90ICopIHY7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCXNlcV9wcmludGYocywgIiVzIGVuYWJsZWQ9JWQiLCBlbGVtLT5uYW1lLCBlbGVtLT5lbmFibGUpOworCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcl9kZWJ1Z19zZXFfb3BzID0geworCS5zdGFydCA9IHByX2RlYnVnX3NlcV9zdGFydCwKKwkubmV4dCAgPSBwcl9kZWJ1Z19zZXFfbmV4dCwKKwkuc3RvcCAgPSBwcl9kZWJ1Z19zZXFfc3RvcCwKKwkuc2hvdyAgPSBwcl9kZWJ1Z19zZXFfc2hvdworfTsKKworc3RhdGljIGludCBwcl9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzZXFfb3BlbihmaWxwLCAmcHJfZGVidWdfc2VxX29wcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByX2RlYnVnX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gcHJfZGVidWdfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gcHJfZGVidWdfd3JpdGUsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlOworCXN0cnVjdCBtb2RfZGVidWcgKml0ZXI7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19wcmludGsiLCBOVUxMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1vZHVsZXMiLCAwNjQ0LCBkaXIsIE5VTEwsCisJCQkJCSZwcl9kZWJ1Z19vcGVyYXRpb25zKTsKKwlpZiAoIWZpbGUpIHsKKwkJZGVidWdmc19yZW1vdmUoZGlyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAodmFsdWUgPSAodW5zaWduZWQgbG9uZylfX3N0YXJ0X19fdmVyYm9zZTsKKwkJdmFsdWUgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfX192ZXJib3NlOworCQl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IG1vZF9kZWJ1ZykpIHsKKwkJCWl0ZXIgPSAoc3RydWN0IG1vZF9kZWJ1ZyAqKXZhbHVlOworCQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoaXRlci0+bW9kbmFtZSwKKwkJCQlpdGVyLT50eXBlLAorCQkJCWl0ZXItPmxvZ2ljYWxfbW9kbmFtZSwKKwkJCQlpdGVyLT5mbGFnX25hbWVzLCBpdGVyLT5oYXNoLCBpdGVyLT5oYXNoMik7CisJfQorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQoZHluYW1pY19wcmludGtfaW5pdCk7CisvKiBtYXkgd2FudCB0byBtb3ZlIHRoaXMgZWFybGllciBzbyB3ZSBjYW4gZ2V0IHRyYWNlcyBhcyBlYXJseSBhcyBwb3NzaWJsZSAqLworCitzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKHN0cikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJc2V0X2FsbCh0cnVlKTsKKwlyZXR1cm4gMDsKK30KKy8qIFVzZSBlYXJseV9wYXJhbSgpLCBzbyB3ZSBjYW4gZ2V0IGRlYnVnIG91dHB1dCBhcyBlYXJseSBhcyBwb3NzaWJsZSAqLworZWFybHlfcGFyYW0oImR5bmFtaWNfcHJpbnRrIiwgZHluYW1pY19wcmludGtfc2V0dXApOwpkaWZmIC0tZ2l0IGEvbGliL2lvbW11LWhlbHBlci5jIGIvbGliL2lvbW11LWhlbHBlci5jCmluZGV4IDVkOTAwNzQuLjc1ZGJkYTAgMTAwNjQ0Ci0tLSBhL2xpYi9pb21tdS1oZWxwZXIuYworKysgYi9saWIvaW9tbXUtaGVscGVyLmMKQEAgLTc5LDMgKzc5LDEyIEBACiAJfQogfQogRVhQT1JUX1NZTUJPTChpb21tdV9hcmVhX2ZyZWUpOworCit1bnNpZ25lZCBsb25nIGlvbW11X251bV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBpb19wYWdlX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKGFkZHIgJiAoaW9fcGFnZV9zaXplIC0gMSkpICsgbGVuOworCisJcmV0dXJuIERJVl9ST1VORF9VUChzaXplLCBpb19wYWdlX3NpemUpOworfQorRVhQT1JUX1NZTUJPTChpb21tdV9udW1fcGFnZXMpOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3QuYyBiL2xpYi9rb2JqZWN0LmMKaW5kZXggZmJmMGFlMi4uMDQ4N2QxZiAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3QuYworKysgYi9saWIva29iamVjdC5jCkBAIC0zODcsMTEgKzM4NywxNyBAQAogICoga29iamVjdF9yZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb2YgYW4gb2JqZWN0CiAgKiBAa29iajogb2JqZWN0IGluIHF1ZXN0aW9uLgogICogQG5ld19uYW1lOiBvYmplY3QncyBuZXcgbmFtZQorICoKKyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIHByb3ZpZGUgbXV0dWFsCisgKiBleGNsdXNpb24gYmV0d2VlbiB0d28gZGlmZmVyZW50IGNhbGxzIG9mIGtvYmplY3RfcmVuYW1lCisgKiBvbiB0aGUgc2FtZSBrb2JqZWN0IGFuZCB0byBlbnN1cmUgdGhhdCBuZXdfbmFtZSBpcyB2YWxpZCBhbmQKKyAqIHdvbid0IGNvbmZsaWN0IHdpdGggb3RoZXIga29iamVjdHMuCiAgKi8KIGludCBrb2JqZWN0X3JlbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqbmV3X25hbWUpCiB7CiAJaW50IGVycm9yID0gMDsKIAljb25zdCBjaGFyICpkZXZwYXRoID0gTlVMTDsKKwljb25zdCBjaGFyICpkdXBfbmFtZSA9IE5VTEwsICpuYW1lOwogCWNoYXIgKmRldnBhdGhfc3RyaW5nID0gTlVMTDsKIAljaGFyICplbnZwWzJdOwogCkBAIC00MDEsMTkgKzQwNyw2IEBACiAJaWYgKCFrb2JqLT5wYXJlbnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogc2VlIGlmIHRoaXMgbmFtZSBpcyBhbHJlYWR5IGluIHVzZSAqLwotCWlmIChrb2JqLT5rc2V0KSB7Ci0JCXN0cnVjdCBrb2JqZWN0ICp0ZW1wX2tvYmo7Ci0JCXRlbXBfa29iaiA9IGtzZXRfZmluZF9vYmooa29iai0+a3NldCwgbmV3X25hbWUpOwotCQlpZiAodGVtcF9rb2JqKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0ICclcycgY2Fubm90IGJlIHJlbmFtZWQgIgotCQkJICAgICAgICJ0byAnJXMnIGFzICclcycgaXMgYWxyZWFkeSBpbiBleGlzdGVuY2UuXG4iLAotCQkJICAgICAgIGtvYmplY3RfbmFtZShrb2JqKSwgbmV3X25hbWUsIG5ld19uYW1lKTsKLQkJCWtvYmplY3RfcHV0KHRlbXBfa29iaik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQogCWRldnBhdGggPSBrb2JqZWN0X2dldF9wYXRoKGtvYmosIEdGUF9LRVJORUwpOwogCWlmICghZGV2cGF0aCkgewogCQllcnJvciA9IC1FTk9NRU07CkBAIC00MjgsMTUgKzQyMSwyNyBAQAogCWVudnBbMF0gPSBkZXZwYXRoX3N0cmluZzsKIAllbnZwWzFdID0gTlVMTDsKIAorCW5hbWUgPSBkdXBfbmFtZSA9IGtzdHJkdXAobmV3X25hbWUsIEdGUF9LRVJORUwpOworCWlmICghbmFtZSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCWVycm9yID0gc3lzZnNfcmVuYW1lX2Rpcihrb2JqLCBuZXdfbmFtZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCS8qIEluc3RhbGwgdGhlIG5ldyBrb2JqZWN0IG5hbWUgKi8KKwlkdXBfbmFtZSA9IGtvYmotPm5hbWU7CisJa29iai0+bmFtZSA9IG5hbWU7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseS9vbmx5IHVzZWQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlLgogCSAqIFNvbWUgaG90cGx1ZyBwYWNrYWdlIHRyYWNrIGludGVyZmFjZXMgYnkgdGhlaXIgbmFtZSBhbmQKIAkgKiB0aGVyZWZvcmUgd2FudCB0byBrbm93IHdoZW4gdGhlIG5hbWUgaXMgY2hhbmdlZCBieSB0aGUgdXNlci4gKi8KLQlpZiAoIWVycm9yKQotCQlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9NT1ZFLCBlbnZwKTsKKwlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9NT1ZFLCBlbnZwKTsKIAogb3V0OgorCWtmcmVlKGR1cF9uYW1lKTsKIAlrZnJlZShkZXZwYXRoX3N0cmluZyk7CiAJa2ZyZWUoZGV2cGF0aCk7CiAJa29iamVjdF9wdXQoa29iaik7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGMzOTliYzEuLmEwMTNiYmMgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgkJLyogZm9yIFBBR0VfU0laRSAqLwogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMzIsNDAgKzMzLDQ4IEBACiAvKiBXb3JrcyBvbmx5IGZvciBkaWdpdHMgYW5kIGxldHRlcnMsIGJ1dCBzbWFsbCBhbmQgZmFzdCAqLwogI2RlZmluZSBUT0xPV0VSKHgpICgoeCkgfCAweDIwKQogCitzdGF0aWMgdW5zaWduZWQgaW50IHNpbXBsZV9ndWVzc19iYXNlKGNvbnN0IGNoYXIgKmNwKQoreworCWlmIChjcFswXSA9PSAnMCcpIHsKKwkJaWYgKFRPTE9XRVIoY3BbMV0pID09ICd4JyAmJiBpc3hkaWdpdChjcFsyXSkpCisJCQlyZXR1cm4gMTY7CisJCWVsc2UKKwkJCXJldHVybiA4OworCX0gZWxzZSB7CisJCXJldHVybiAxMDsKKwl9Cit9CisKIC8qKgogICogc2ltcGxlX3N0cnRvdWwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcKICAqIEBjcDogVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKICAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCiAgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQogICovCi11bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQordW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewotCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMCx2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7CiAKLQlpZiAoIWJhc2UpIHsKLQkJYmFzZSA9IDEwOwotCQlpZiAoKmNwID09ICcwJykgewotCQkJYmFzZSA9IDg7Ci0JCQljcCsrOwotCQkJaWYgKChUT0xPV0VSKCpjcCkgPT0gJ3gnKSAmJiBpc3hkaWdpdChjcFsxXSkpIHsKLQkJCQljcCsrOwotCQkJCWJhc2UgPSAxNjsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoYmFzZSA9PSAxNikgewotCQlpZiAoY3BbMF0gPT0gJzAnICYmIFRPTE9XRVIoY3BbMV0pID09ICd4JykKLQkJCWNwICs9IDI7Ci0JfQotCXdoaWxlIChpc3hkaWdpdCgqY3ApICYmCi0JICAgICAgICh2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcC0nMCcgOiBUT0xPV0VSKCpjcCktJ2EnKzEwKSA8IGJhc2UpIHsKLQkJcmVzdWx0ID0gcmVzdWx0KmJhc2UgKyB2YWx1ZTsKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSBzaW1wbGVfZ3Vlc3NfYmFzZShjcCk7CisKKwlpZiAoYmFzZSA9PSAxNiAmJiBjcFswXSA9PSAnMCcgJiYgVE9MT1dFUihjcFsxXSkgPT0gJ3gnKQorCQljcCArPSAyOworCisJd2hpbGUgKGlzeGRpZ2l0KCpjcCkpIHsKKwkJdW5zaWduZWQgaW50IHZhbHVlOworCisJCXZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwIC0gJzAnIDogVE9MT1dFUigqY3ApIC0gJ2EnICsgMTA7CisJCWlmICh2YWx1ZSA+PSBiYXNlKQorCQkJYnJlYWs7CisJCXJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyB2YWx1ZTsKIAkJY3ArKzsKIAl9CisKIAlpZiAoZW5kcCkKIAkJKmVuZHAgPSAoY2hhciAqKWNwOwogCXJldHVybiByZXN1bHQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2ltcGxlX3N0cnRvdWwpOwogCiAvKioKQEAgLTc0LDEzICs4MywxMiBAQAogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKICAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCiAgKi8KLWxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKK2xvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewotCWlmKCpjcD09Jy0nKQotCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsKGNwKzEsZW5kcCxiYXNlKTsKLQlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsZW5kcCxiYXNlKTsKKwlpZigqY3AgPT0gJy0nKQorCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsKGNwICsgMSwgZW5kcCwgYmFzZSk7CisJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKGNwLCBlbmRwLCBiYXNlKTsKIH0KLQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG9sKTsKIAogLyoqCkBAIC04OSwzNCArOTcsMzAgQEAKICAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCiAgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQogICovCi11bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQgPSAwLHZhbHVlOworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQgPSAwOwogCi0JaWYgKCFiYXNlKSB7Ci0JCWJhc2UgPSAxMDsKLQkJaWYgKCpjcCA9PSAnMCcpIHsKLQkJCWJhc2UgPSA4OwotCQkJY3ArKzsKLQkJCWlmICgoVE9MT1dFUigqY3ApID09ICd4JykgJiYgaXN4ZGlnaXQoY3BbMV0pKSB7Ci0JCQkJY3ArKzsKLQkJCQliYXNlID0gMTY7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYpIHsKLQkJaWYgKGNwWzBdID09ICcwJyAmJiBUT0xPV0VSKGNwWzFdKSA9PSAneCcpCi0JCQljcCArPSAyOwotCX0KLQl3aGlsZSAoaXN4ZGlnaXQoKmNwKQotCSAmJiAodmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AtJzAnIDogVE9MT1dFUigqY3ApLSdhJysxMCkgPCBiYXNlKSB7Ci0JCXJlc3VsdCA9IHJlc3VsdCpiYXNlICsgdmFsdWU7CisJaWYgKCFiYXNlKQorCQliYXNlID0gc2ltcGxlX2d1ZXNzX2Jhc2UoY3ApOworCisJaWYgKGJhc2UgPT0gMTYgJiYgY3BbMF0gPT0gJzAnICYmIFRPTE9XRVIoY3BbMV0pID09ICd4JykKKwkJY3AgKz0gMjsKKworCXdoaWxlIChpc3hkaWdpdCgqY3ApKSB7CisJCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCQl2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcCAtICcwJyA6IFRPTE9XRVIoKmNwKSAtICdhJyArIDEwOworCQlpZiAodmFsdWUgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlyZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7CiAJCWNwKys7CiAJfQorCiAJaWYgKGVuZHApCiAJCSplbmRwID0gKGNoYXIgKiljcDsKIAlyZXR1cm4gcmVzdWx0OwogfQotCiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9zdHJ0b3VsbCk7CiAKIC8qKgpAQCAtMTI1LDE0ICsxMjksMTMgQEAKICAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCiAgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQogICovCi1sb25nIGxvbmcgc2ltcGxlX3N0cnRvbGwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCitsb25nIGxvbmcgc2ltcGxlX3N0cnRvbGwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKIAlpZigqY3A9PSctJykKLQkJcmV0dXJuIC1zaW1wbGVfc3RydG91bGwoY3ArMSxlbmRwLGJhc2UpOwotCXJldHVybiBzaW1wbGVfc3RydG91bGwoY3AsZW5kcCxiYXNlKTsKKwkJcmV0dXJuIC1zaW1wbGVfc3RydG91bGwoY3AgKyAxLCBlbmRwLCBiYXNlKTsKKwlyZXR1cm4gc2ltcGxlX3N0cnRvdWxsKGNwLCBlbmRwLCBiYXNlKTsKIH0KIAotCiAvKioKICAqIHN0cmljdF9zdHJ0b3VsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIHN0cmljdGx5CiAgKiBAY3A6IFRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkCkBAIC0xNTUsNyArMTU4LDI3IEBACiAgKiBzaW1wbGVfc3RydG91bCBqdXN0IGlnbm9yZXMgdGhlIHN1Y2Nlc3NpdmUgaW52YWxpZCBjaGFyYWN0ZXJzIGFuZAogICogcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUgb2YgcHJlZml4IHBhcnQgb2YgdGhlIHN0cmluZy4KICAqLwotaW50IHN0cmljdF9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyAqcmVzKTsKK2ludCBzdHJpY3Rfc3RydG91bChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGxvbmcgKnJlcykKK3sKKwljaGFyICp0YWlsOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXNpemVfdCBsZW47CisKKwkqcmVzID0gMDsKKwlsZW4gPSBzdHJsZW4oY3ApOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChjcCwgJnRhaWwsIGJhc2UpOworCWlmICgoKnRhaWwgPT0gJ1wwJykgfHwKKwkJKChsZW4gPT0gKHNpemVfdCkodGFpbCAtIGNwKSArIDEpICYmICgqdGFpbCA9PSAnXG4nKSkpIHsKKwkJKnJlcyA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsKTsKIAogLyoqCiAgKiBzdHJpY3Rfc3RydG9sIC0gY29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgc3RyaWN0bHkKQEAgLTE2OSw3ICsxOTIsMjAgQEAKICAqIEl0IHJldHVybnMgMCBpZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwgYW5kICpyZXMgaXMgc2V0IHRvIHRoZSBjb252ZXJ0ZWQKICAqIHZhbHVlLCBvdGhlcndpc2UgaXQgcmV0dXJucyAtRUlOVkFMIGFuZCAqcmVzIGlzIHNldCB0byAwLgogICovCi1pbnQgc3RyaWN0X3N0cnRvbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgKnJlcyk7CitpbnQgc3RyaWN0X3N0cnRvbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgKnJlcykKK3sKKwlpbnQgcmV0OworCWlmICgqY3AgPT0gJy0nKSB7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsKGNwICsgMSwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgKilyZXMpOworCQlpZiAoIXJldCkKKwkJCSpyZXMgPSAtKCpyZXMpOworCX0gZWxzZSB7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsKGNwLCBiYXNlLCAodW5zaWduZWQgbG9uZyAqKXJlcyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvbCk7CiAKIC8qKgogICogc3RyaWN0X3N0cnRvdWxsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcgc3RyaWN0bHkKQEAgLTE5Myw3ICsyMjksMjcgQEAKICAqIHNpbXBsZV9zdHJ0b3VsbCBqdXN0IGlnbm9yZXMgdGhlIHN1Y2Nlc3NpdmUgaW52YWxpZCBjaGFyYWN0ZXJzIGFuZAogICogcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUgb2YgcHJlZml4IHBhcnQgb2YgdGhlIHN0cmluZy4KICAqLwotaW50IHN0cmljdF9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcmVzKTsKK2ludCBzdHJpY3Rfc3RydG91bGwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnJlcykKK3sKKwljaGFyICp0YWlsOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJc2l6ZV90IGxlbjsKKworCSpyZXMgPSAwOworCWxlbiA9IHN0cmxlbihjcCk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsbChjcCwgJnRhaWwsIGJhc2UpOworCWlmICgoKnRhaWwgPT0gJ1wwJykgfHwKKwkJKChsZW4gPT0gKHNpemVfdCkodGFpbCAtIGNwKSArIDEpICYmICgqdGFpbCA9PSAnXG4nKSkpIHsKKwkJKnJlcyA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsbCk7CiAKIC8qKgogICogc3RyaWN0X3N0cnRvbGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nIHN0cmljdGx5CkBAIC0yMDcsNTMgKzI2MywyMCBAQAogICogSXQgcmV0dXJucyAwIGlmIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bCBhbmQgKnJlcyBpcyBzZXQgdG8gdGhlIGNvbnZlcnRlZAogICogdmFsdWUsIG90aGVyd2lzZSBpdCByZXR1cm5zIC1FSU5WQUwgYW5kICpyZXMgaXMgc2V0IHRvIDAuCiAgKi8KLWludCBzdHJpY3Rfc3RydG9sbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgbG9uZyAqcmVzKTsKK2ludCBzdHJpY3Rfc3RydG9sbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIGxvbmcgbG9uZyAqcmVzKQoreworCWludCByZXQ7CisJaWYgKCpjcCA9PSAnLScpIHsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWxsKGNwICsgMSwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKXJlcyk7CisJCWlmICghcmV0KQorCQkJKnJlcyA9IC0oKnJlcyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWxsKGNwLCBiYXNlLCAodW5zaWduZWQgbG9uZyBsb25nICopcmVzKTsKKwl9CiAKLSNkZWZpbmUgZGVmaW5lX3N0cmljdF9zdHJ0b3V4KHR5cGUsIHZhbHR5cGUpCQkJCVwKLWludCBzdHJpY3Rfc3RydG91IyN0eXBlKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdmFsdHlwZSAqcmVzKVwKLXsJCQkJCQkJCQlcCi0JY2hhciAqdGFpbDsJCQkJCQkJXAotCXZhbHR5cGUgdmFsOwkJCQkJCQlcCi0Jc2l6ZV90IGxlbjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCSpyZXMgPSAwOwkJCQkJCQlcCi0JbGVuID0gc3RybGVuKGNwKTsJCQkJCQlcCi0JaWYgKGxlbiA9PSAwKQkJCQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQl2YWwgPSBzaW1wbGVfc3RydG91IyN0eXBlKGNwLCAmdGFpbCwgYmFzZSk7CQkJXAotCWlmICgoKnRhaWwgPT0gJ1wwJykgfHwJCQkJCQlcCi0JCSgobGVuID09IChzaXplX3QpKHRhaWwgLSBjcCkgKyAxKSAmJiAoKnRhaWwgPT0gJ1xuJykpKSB7XAotCQkqcmVzID0gdmFsOwkJCQkJCVwKLQkJcmV0dXJuIDA7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gLUVJTlZBTDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQotI2RlZmluZSBkZWZpbmVfc3RyaWN0X3N0cnRveCh0eXBlLCB2YWx0eXBlKQkJCQlcCi1pbnQgc3RyaWN0X3N0cnRvIyN0eXBlKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdmFsdHlwZSAqcmVzKQlcCi17CQkJCQkJCQkJXAotCWludCByZXQ7CQkJCQkJCVwKLQlpZiAoKmNwID09ICctJykgewkJCQkJCVwKLQkJcmV0ID0gc3RyaWN0X3N0cnRvdSMjdHlwZShjcCsxLCBiYXNlLCByZXMpOwkJXAotCQlpZiAoIXJldCkJCQkJCQlcCi0JCQkqcmVzID0gLSgqcmVzKTsJCQkJCVwKLQl9IGVsc2UJCQkJCQkJCVwKLQkJcmV0ID0gc3RyaWN0X3N0cnRvdSMjdHlwZShjcCwgYmFzZSwgcmVzKTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCi1kZWZpbmVfc3RyaWN0X3N0cnRvdXgobCwgdW5zaWduZWQgbG9uZykKLWRlZmluZV9zdHJpY3Rfc3RydG94KGwsIGxvbmcpCi1kZWZpbmVfc3RyaWN0X3N0cnRvdXgobGwsIHVuc2lnbmVkIGxvbmcgbG9uZykKLWRlZmluZV9zdHJpY3Rfc3RydG94KGxsLCBsb25nIGxvbmcpCi0KLUVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvdWwpOwotRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG9sKTsKKwlyZXR1cm4gcmV0OworfQogRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG9sbCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsbCk7CiAKIHN0YXRpYyBpbnQgc2tpcF9hdG9pKGNvbnN0IGNoYXIgKipzKQogewpAQCAtNTI4LDE4ICs1NTEsNTEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgY2hhciAqcmVzb3VyY2Vfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCit7CisjaWZuZGVmIElPX1JTUkNfUFJJTlRLX1NJWkUKKyNkZWZpbmUgSU9fUlNSQ19QUklOVEtfU0laRQk0CisjZW5kaWYKKworI2lmbmRlZiBNRU1fUlNSQ19QUklOVEtfU0laRQorI2RlZmluZSBNRU1fUlNSQ19QUklOVEtfU0laRQk4CisjZW5kaWYKKworCS8qIHJvb20gZm9yIHRoZSBhY3R1YWwgbnVtYmVycywgdGhlIHR3byAiMHgiLCAtLCBbLCBdIGFuZCB0aGUgZmluYWwgemVybyAqLworCWNoYXIgc3ltWzQqc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgKyA4XTsKKwljaGFyICpwID0gc3ltLCAqcGVuZCA9IHN5bSArIHNpemVvZihzeW0pOworCWludCBzaXplID0gLTE7CisKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCXNpemUgPSBJT19SU1JDX1BSSU5US19TSVpFOworCWVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKKwkJc2l6ZSA9IE1FTV9SU1JDX1BSSU5US19TSVpFOworCisJKnArKyA9ICdbJzsKKwlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+c3RhcnQsIDE2LCBzaXplLCAtMSwgU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCk7CisJKnArKyA9ICctJzsKKwlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCAxNiwgc2l6ZSwgLTEsIFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQpOworCSpwKysgPSAnXSc7CisJKnAgPSAwOworCisJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Cit9CisKIC8qCiAgKiBTaG93IGEgJyVwJyB0aGluZy4gIEEga2VybmVsIGV4dGVuc2lvbiBpcyB0aGF0IHRoZSAnJXAnIGlzIGZvbGxvd2VkCiAgKiBieSBhbiBleHRyYSBzZXQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgdGhhdCBhcmUgZXh0ZW5kZWQgZm9ybWF0CiAgKiBzcGVjaWZpZXJzLgogICoKLSAqIFJpZ2h0IG5vdyB3ZSBqdXN0IGhhbmRsZSAnRicgKGZvciBzeW1ib2xpYyBGdW5jdGlvbiBkZXNjcmlwdG9yIHBvaW50ZXJzKQotICogYW5kICdTJyAoZm9yIFN5bWJvbGljIGRpcmVjdCBwb2ludGVycyksIGJ1dCB0aGlzIGNhbiBlYXNpbHkgYmUKLSAqIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgKG5ldHdvcmsgYWRkcmVzcyB0eXBlcyBldGMpLgorICogUmlnaHQgbm93IHdlIGhhbmRsZToKICAqCi0gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdTJyBhbmQgJ0YnIGlzIHRoYXQgb24gaWE2NCBhbmQgcHBjNjQgZnVuY3Rpb24KLSAqIHBvaW50ZXJzIGFyZSByZWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMsIHdoaWNoIGNvbnRhaW4gYSBwb2ludGVyIHRoZQotICogcmVhbCBhZGRyZXNzLiAKKyAqIC0gJ0YnIEZvciBzeW1ib2xpYyBmdW5jdGlvbiBkZXNjcmlwdG9yIHBvaW50ZXJzCisgKiAtICdTJyBGb3Igc3ltYm9saWMgZGlyZWN0IHBvaW50ZXJzCisgKiAtICdSJyBGb3IgYSBzdHJ1Y3QgcmVzb3VyY2UgcG9pbnRlciwgaXQgcHJpbnRzIHRoZSByYW5nZSBvZgorICogICAgICAgYWRkcmVzc2VzIChub3QgdGhlIG5hbWUgbm9yIHRoZSBmbGFncykKKyAqCisgKiBOb3RlOiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdTJyBhbmQgJ0YnIGlzIHRoYXQgb24gaWE2NCBhbmQgcHBjNjQKKyAqIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSByZWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMsIHdoaWNoIGNvbnRhaW4gYQorICogcG9pbnRlciB0byB0aGUgcmVhbCBhZGRyZXNzLgogICovCiBzdGF0aWMgY2hhciAqcG9pbnRlcihjb25zdCBjaGFyICpmbXQsIGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQogewpAQCAtNTQ5LDYgKzYwNSw4IEBACiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnUyc6CiAJCXJldHVybiBzeW1ib2xfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwljYXNlICdSJzoKKwkJcmV0dXJuIHJlc291cmNlX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CiAJfQogCWZsYWdzIHw9IFNNQUxMOwogCWlmIChmaWVsZF93aWR0aCA9PSAtMSkgewpAQCAtNTY1LDYgKzYyMywxMSBAQAogICogQGZtdDogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlCiAgKiBAYXJnczogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZwogICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyBDOTkgdnNucHJpbnRmLCBidXQgaGFzIHNvbWUgZXh0ZW5zaW9uczoKKyAqICVwUyBvdXRwdXQgdGhlIG5hbWUgb2YgYSB0ZXh0IHN5bWJvbAorICogJXBGIG91dHB1dCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIKKyAqICVwUiBvdXRwdXQgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gYSBzdHJ1Y3QgcmVzb3VyY2UKKyAqCiAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZAogICogYmUgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKICAqICdcMCcsIGFzIHBlciBJU08gQzk5LiBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBleGFjdApAQCAtNzkwLDcgKzg1Myw2IEBACiAJLyogdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSBkb2Vzbid0IGNvdW50IHRvd2FyZHMgdGhlIHRvdGFsICovCiAJcmV0dXJuIHN0ci1idWY7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodnNucHJpbnRmKTsKIAogLyoqCkBAIC04MDYsNiArODY4LDggQEAKICAqCiAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhIHZhX2xpc3QuCiAgKiBZb3UgcHJvYmFibHkgd2FudCBzY25wcmludGYoKSBpbnN0ZWFkLgorICoKKyAqIFNlZSB0aGUgdnNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0IHN0cmluZyBleHRlbnNpb25zIG92ZXIgQzk5LgogICovCiBpbnQgdnNjbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKQEAgLTgxNCw3ICs4NzgsNiBAQAogCWk9dnNucHJpbnRmKGJ1ZixzaXplLGZtdCxhcmdzKTsKIAlyZXR1cm4gKGkgPj0gc2l6ZSkgPyAoc2l6ZSAtIDEpIDogaTsKIH0KLQogRVhQT1JUX1NZTUJPTCh2c2NucHJpbnRmKTsKIAogLyoqCkBAIC04MjgsNiArODkxLDggQEAKICAqIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIGlucHV0LCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIG51bGwsCiAgKiBhcyBwZXIgSVNPIEM5OS4gIElmIHRoZSByZXR1cm4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCiAgKiBAc2l6ZSwgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgdHJ1bmNhdGVkLgorICoKKyAqIFNlZSB0aGUgdnNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0IHN0cmluZyBleHRlbnNpb25zIG92ZXIgQzk5LgogICovCiBpbnQgc25wcmludGYoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtODM5LDcgKzkwNCw2IEBACiAJdmFfZW5kKGFyZ3MpOwogCXJldHVybiBpOwogfQotCiBFWFBPUlRfU1lNQk9MKHNucHJpbnRmKTsKIAogLyoqCkBAIC04NzcsMTIgKzk0MSwxMyBAQAogICoKICAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFscmVhZHkgZGVhbGluZyB3aXRoIGEgdmFfbGlzdC4KICAqIFlvdSBwcm9iYWJseSB3YW50IHNwcmludGYoKSBpbnN0ZWFkLgorICoKKyAqIFNlZSB0aGUgdnNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0IHN0cmluZyBleHRlbnNpb25zIG92ZXIgQzk5LgogICovCiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKIAlyZXR1cm4gdnNucHJpbnRmKGJ1ZiwgSU5UX01BWCwgZm10LCBhcmdzKTsKIH0KLQogRVhQT1JUX1NZTUJPTCh2c3ByaW50Zik7CiAKIC8qKgpAQCAtODk0LDYgKzk1OSw4IEBACiAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbgogICogaW50byBAYnVmLiBVc2Ugc25wcmludGYoKSBvciBzY25wcmludGYoKSBpbiBvcmRlciB0byBhdm9pZAogICogYnVmZmVyIG92ZXJmbG93cy4KKyAqCisgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwogaW50IHNwcmludGYoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC05MDUsNyArOTcyLDYgQEAKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIGk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc3ByaW50Zik7CiAKIC8qKgpAQCAtMTEzNCw3ICsxMjAwLDYgQEAKIAogCXJldHVybiBudW07CiB9Ci0KIEVYUE9SVF9TWU1CT0wodnNzY2FuZik7CiAKIC8qKgpAQCAtMTE1Myw1ICsxMjE4LDQgQEAKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIGk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc3NjYW5mKTsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDBiZDljMmQuLjViNTc5MGYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAjIHdpdGggZ2NjIDMuNCBhbmQgbGF0ZXIuCiAjCiBjb25maWcgU1BBUlNFTUVNX1NUQVRJQwotCWRlZl9ib29sIG4KKwlib29sCiAKICMKICMgQXJjaGl0ZWN0dXJlIHBsYXRmb3JtcyB3aGljaCByZXF1aXJlIGEgdHdvIGxldmVsIG1lbV9zZWN0aW9uIGluIFNQQVJTRU1FTQpAQCAtMTEzLDcgKzExMyw3IEBACiAJZGVwZW5kcyBvbiBTUEFSU0VNRU0gJiYgIVNQQVJTRU1FTV9TVEFUSUMKIAogY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRQotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUAogCWJvb2wgIlNwYXJzZSBNZW1vcnkgdmlydHVhbCBtZW1tYXAiCkBAIC0xODcsNiArMTg3LDkgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhbGxvd3MgbWVtb3J5IGFuZCBJTyByZXNvdXJjZXMgdG8gYmUgNjQgYml0LgogCitjb25maWcgUEhZU19BRERSX1RfNjRCSVQKKwlkZWZfYm9vbCA2NEJJVCB8fCBBUkNIX1BIWVNfQUREUl9UXzY0QklUCisKIGNvbmZpZyBaT05FX0RNQV9GTEFHCiAJaW50CiAJZGVmYXVsdCAiMCIgaWYgIVpPTkVfRE1BCkBAIC0yMDYsNSArMjA5LDE2IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIUFSQ0hfTk9fVklSVF9UT19CVVMKIAorY29uZmlnIFVORVZJQ1RBQkxFX0xSVQorCWJvb2wgIkFkZCBMUlUgbGlzdCB0byB0cmFjayBub24tZXZpY3RhYmxlIHBhZ2VzIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTU1VCisJaGVscAorCSAgS2VlcHMgdW5ldmljdGFibGUgcGFnZXMgb2ZmIG9mIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIHBhZ2VvdXQKKwkgIGxpc3RzLCBzbyBrc3dhcGQgd2lsbCBub3Qgd2FzdGUgQ1BVIHRpbWUgb3IgaGF2ZSBpdHMgYmFsYW5jaW5nCisJICBhbGdvcml0aG1zIHRocm93biBvZmYgYnkgc2Nhbm5pbmcgdGhlc2UgcGFnZXMuICBTZWxlY3RpbmcgdGhpcworCSAgd2lsbCB1c2Ugb25lIHBhZ2UgZmxhZyBhbmQgaW5jcmVhc2UgdGhlIGNvZGUgc2l6ZSBhIGxpdHRsZSwKKwkgIHNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKIGNvbmZpZyBNTVVfTk9USUZJRVIKIAlib29sCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGRhNGNjZjAuLmMwNmI0NWEgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0zMyw1ICszMyw0IEBACiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KIG9iai0kKENPTkZJR19TTVApICs9IGFsbG9jcGVyY3B1Lm8KIG9iai0kKENPTkZJR19RVUlDS0xJU1QpICs9IHF1aWNrbGlzdC5vCi1vYmotJChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgKz0gbWVtY29udHJvbC5vCi0KK29iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8gcGFnZV9jZ3JvdXAubwpkaWZmIC0tZ2l0IGEvbW0vYm9vdG1lbS5jIGIvbW0vYm9vdG1lbS5jCmluZGV4IGFkOGVlYzYuLmFjNWE4OTEgMTAwNjQ0Ci0tLSBhL21tL2Jvb3RtZW0uYworKysgYi9tbS9ib290bWVtLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlpZiAodW5saWtlbHkoYm9vdG1lbV9kZWJ1ZykpCQkJXAogCQlwcmludGsoS0VSTl9JTkZPCQkJXAogCQkJImJvb3RtZW06OiVzICIgZm10LAkJXAotCQkJX19GVU5DVElPTl9fLCAjIyBhcmdzKTsJCVwKKwkJCV9fZnVuY19fLCAjIyBhcmdzKTsJCVwKIH0pCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBib290bWFwX2J5dGVzKHVuc2lnbmVkIGxvbmcgcGFnZXMpCmRpZmYgLS1naXQgYS9tbS9mYWR2aXNlLmMgYi9tbS9mYWR2aXNlLmMKaW5kZXggMzQzY2ZkZi4uYTFkYTk2OSAxMDA2NDQKLS0tIGEvbW0vZmFkdmlzZS5jCisrKyBiL21tL2ZhZHZpc2UuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIExpbnVzIFRvcnZhbGRzCiAgKgotICogMTFKYW4yMDAzCWFrcG1AZGlnZW8uY29tCisgKiAxMUphbjIwMDMJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbi4KICAqLwogCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggODc2YmM1OS4uYWI4NTUzNiAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4gLyogZm9yIEJVR19PTighaW5fYXRvbWljKCkpIG9ubHkgKi8KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+IC8qIGZvciBwYWdlX2lzX2ZpbGVfY2FjaGUoKSAqLwogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qCkBAIC0xMTUsMTIgKzExNiwxMiBAQAogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAotCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIAlyYWRpeF90cmVlX2RlbGV0ZSgmbWFwcGluZy0+cGFnZV90cmVlLCBwYWdlLT5pbmRleCk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiAJbWFwcGluZy0+bnJwYWdlcy0tOwogCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKIAlCVUdfT04ocGFnZV9tYXBwZWQocGFnZSkpOworCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKIAogCS8qCiAJICogU29tZSBmaWxlc3lzdGVtcyBzZWVtIHRvIHJlLWRpcnR5IHRoZSBwYWdlIGV2ZW4gYWZ0ZXIKQEAgLTQ5Miw5ICs0OTMsMjQgQEAKIGludCBhZGRfdG9fcGFnZV9jYWNoZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXBnb2ZmX3Qgb2Zmc2V0LCBnZnBfdCBnZnBfbWFzaykKIHsKLQlpbnQgcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgb2Zmc2V0LCBnZnBfbWFzayk7Ci0JaWYgKHJldCA9PSAwKQotCQlscnVfY2FjaGVfYWRkKHBhZ2UpOworCWludCByZXQ7CisKKwkvKgorCSAqIFNwbGljZV9yZWFkIGFuZCByZWFkYWhlYWQgYWRkIHNobWVtL3RtcGZzIHBhZ2VzIGludG8gdGhlIHBhZ2UgY2FjaGUKKwkgKiBiZWZvcmUgc2htZW1fcmVhZHBhZ2UgaGFzIGEgY2hhbmNlIHRvIG1hcmsgdGhlbSBhcyBTd2FwQmFja2VkOiB0aGV5CisJICogbmVlZCB0byBnbyBvbiB0aGUgYWN0aXZlX2Fub24gbHJ1IGJlbG93LCBhbmQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UKKwkgKiAoY2FsbGVkIGluIGFkZF90b19wYWdlX2NhY2hlKSBuZWVkcyB0byBrbm93IHdoZXJlIHRoZXkncmUgZ29pbmcgdG9vLgorCSAqLworCWlmIChtYXBwaW5nX2NhcF9zd2FwX2JhY2tlZChtYXBwaW5nKSkKKwkJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisKKwlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkKKwkJCWxydV9jYWNoZV9hZGRfZmlsZShwYWdlKTsKKwkJZWxzZQorCQkJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfYW5vbihwYWdlKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTU3LDE3ICs1NzMsMTQgQEAKICAqIG1lY2hhbmFuaXNtIGJldHdlZW4gUGFnZUxvY2tlZCBwYWdlcyBhbmQgUGFnZVdyaXRlYmFjayBwYWdlcyBpcyBzaGFyZWQuCiAgKiBCdXQgdGhhdCdzIE9LIC0gc2xlZXBlcnMgaW4gd2FpdF9vbl9wYWdlX3dyaXRlYmFjaygpIGp1c3QgZ28gYmFjayB0byBzbGVlcC4KICAqCi0gKiBUaGUgZmlyc3QgbWIgaXMgbmVjZXNzYXJ5IHRvIHNhZmVseSBjbG9zZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBvcGVuZWQgYnkgdGhlCi0gKiB0ZXN0X2FuZF9zZXRfYml0KCkgdG8gbG9jayB0aGUgcGFnZTsgdGhlIHNlY29uZCBtYiBpcyBuZWNlc3NhcnkgdG8gZW5mb3JjZQotICogb3JkZXJpbmcgYmV0d2VlbiB0aGUgY2xlYXJfYml0IGFuZCB0aGUgcmVhZCBvZiB0aGUgd2FpdHF1ZXVlICh0byBhdm9pZCBTTVAKLSAqIHJhY2VzIHdpdGggYSBwYXJhbGxlbCB3YWl0X29uX3BhZ2VfbG9ja2VkKCkpLgorICogVGhlIG1iIGlzIG5lY2Vzc2FyeSB0byBlbmZvcmNlIG9yZGVyaW5nIGJldHdlZW4gdGhlIGNsZWFyX2JpdCBhbmQgdGhlIHJlYWQKKyAqIG9mIHRoZSB3YWl0cXVldWUgKHRvIGF2b2lkIFNNUCByYWNlcyB3aXRoIGEgcGFyYWxsZWwgd2FpdF9vbl9wYWdlX2xvY2tlZCgpKS4KICAqLwogdm9pZCB1bmxvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncykpCi0JCUJVRygpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7IAorCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJY2xlYXJfYml0X3VubG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAl3YWtlX3VwX3BhZ2UocGFnZSwgUEdfbG9ja2VkKTsKIH0KIEVYUE9SVF9TWU1CT0wodW5sb2NrX3BhZ2UpOwpAQCAtMTEwMCw4ICsxMTEzLDkgQEAKIAogcGFnZV9ub3RfdXBfdG9fZGF0ZToKIAkJLyogR2V0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHBhZ2UgLi4uICovCi0JCWlmIChsb2NrX3BhZ2Vfa2lsbGFibGUocGFnZSkpCi0JCQlnb3RvIHJlYWRwYWdlX2VpbzsKKwkJZXJyb3IgPSBsb2NrX3BhZ2Vfa2lsbGFibGUocGFnZSk7CisJCWlmICh1bmxpa2VseShlcnJvcikpCisJCQlnb3RvIHJlYWRwYWdlX2Vycm9yOwogCiBwYWdlX25vdF91cF90b19kYXRlX2xvY2tlZDoKIAkJLyogRGlkIGl0IGdldCB0cnVuY2F0ZWQgYmVmb3JlIHdlIGdvdCB0aGUgbG9jaz8gKi8KQEAgLTExMzAsOCArMTE0NCw5IEBACiAJCX0KIAogCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQkJaWYgKGxvY2tfcGFnZV9raWxsYWJsZShwYWdlKSkKLQkJCQlnb3RvIHJlYWRwYWdlX2VpbzsKKwkJCWVycm9yID0gbG9ja19wYWdlX2tpbGxhYmxlKHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCQlnb3RvIHJlYWRwYWdlX2Vycm9yOwogCQkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJCQlpZiAocGFnZS0+bWFwcGluZyA9PSBOVUxMKSB7CiAJCQkJCS8qCkBAIC0xMTQzLDE1ICsxMTU4LDE0IEBACiAJCQkJfQogCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJCXNocmlua19yZWFkYWhlYWRfc2l6ZV9laW8oZmlscCwgcmEpOwotCQkJCWdvdG8gcmVhZHBhZ2VfZWlvOworCQkJCWVycm9yID0gLUVJTzsKKwkJCQlnb3RvIHJlYWRwYWdlX2Vycm9yOwogCQkJfQogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCX0KIAogCQlnb3RvIHBhZ2Vfb2s7CiAKLXJlYWRwYWdlX2VpbzoKLQkJZXJyb3IgPSAtRUlPOwogcmVhZHBhZ2VfZXJyb3I6CiAJCS8qIFVISFVIISBBIHN5bmNocm9ub3VzIHJlYWQgZXJyb3Igb2NjdXJyZWQuIFJlcG9ydCBpdCAqLwogCQlkZXNjLT5lcnJvciA9IGVycm9yOwpAQCAtMTE4Niw4ICsxMjAwLDcgQEAKIAlyYS0+cHJldl9wb3MgfD0gcHJldl9vZmZzZXQ7CiAKIAkqcHBvcyA9ICgobG9mZl90KWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgb2Zmc2V0OwotCWlmIChmaWxwKQotCQlmaWxlX2FjY2Vzc2VkKGZpbHApOworCWZpbGVfYWNjZXNzZWQoZmlscCk7CiB9CiAKIGludCBmaWxlX3JlYWRfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBwYWdlICpwYWdlLApkaWZmIC0tZ2l0IGEvbW0vZnJlbWFwLmMgYi9tbS9mcmVtYXAuYwppbmRleCA3ODgxNjM4Li43ZDEyY2E3IDEwMDY0NAotLS0gYS9tbS9mcmVtYXAuYworKysgYi9tbS9mcmVtYXAuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiBzdGF0aWMgdm9pZCB6YXBfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CkBAIC0yMTUsMTUgKzIxNywzMSBAQAogCQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCX0KIAorCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCS8qCisJCSAqIGRyb3AgUEdfTWxvY2tlZCBmbGFnIGZvciBvdmVyLW1hcHBlZCByYW5nZQorCQkgKi8KKwkJdW5zaWduZWQgaW50IHNhdmVkX2ZsYWdzID0gdm1hLT52bV9mbGFnczsKKwkJbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKKwkJdm1hLT52bV9mbGFncyA9IHNhdmVkX2ZsYWdzOworCX0KKwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKIAllcnIgPSBwb3B1bGF0ZV9yYW5nZShtbSwgdm1hLCBzdGFydCwgc2l6ZSwgcGdvZmYpOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiAJaWYgKCFlcnIgJiYgIShmbGFncyAmIE1BUF9OT05CTE9DSykpIHsKLQkJaWYgKHVubGlrZWx5KGhhc193cml0ZV9sb2NrKSkgewotCQkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCQkJaGFzX3dyaXRlX2xvY2sgPSAwOworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJLyoKKwkJCSAqIG1pZ2h0IGJlIG1hcHBpbmcgcHJldmlvdXNseSB1bm1hcHBlZCByYW5nZSBvZiBmaWxlCisJCQkgKi8KKwkJCW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBzdGFydCArIHNpemUpOworCQl9IGVsc2UgeworCQkJaWYgKHVubGlrZWx5KGhhc193cml0ZV9sb2NrKSkgeworCQkJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJCQloYXNfd3JpdGVfbG9jayA9IDA7CisJCQl9CisJCQltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIHN0YXJ0K3NpemUpOwogCQl9Ci0JCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgc3RhcnQrc2l6ZSk7CiAJfQogCiAJLyoKQEAgLTI0MCw0ICsyNTgsMyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDY3YTcxMTkuLmNlOGNiYjIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uczsKIH07CiAKLXN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXBfYWxsb2Modm9pZCkKK3N0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcCA9IGttYWxsb2Moc2l6ZW9mKCpyZXN2X21hcCksIEdGUF9LRVJORUwpOwogCWlmICghcmVzdl9tYXApCkBAIC0yNzQsNyArMjc0LDcgQEAKIAlyZXR1cm4gcmVzdl9tYXA7CiB9CiAKLXZvaWQgcmVzdl9tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQorc3RhdGljIHZvaWQgcmVzdl9tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewogCXN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXAgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgcmVzdl9tYXAsIHJlZnMpOwogCkBAIC0yODksNyArMjg5LDcgQEAKIAlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKIAkJcmV0dXJuIChzdHJ1Y3QgcmVzdl9tYXAgKikoZ2V0X3ZtYV9wcml2YXRlX2RhdGEodm1hKSAmCiAJCQkJCQkJfkhQQUdFX1JFU1ZfTUFTSyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF92bWFfcmVzdl9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCByZXN2X21hcCAqbWFwKQpAQCAtMTQ1OSwxMSArMTQ1OSwxMSBAQAogewogCXN0cnVjdCBoc3RhdGUgKmggPSAmZGVmYXVsdF9oc3RhdGU7CiAJcmV0dXJuIHNwcmludGYoYnVmLAotCQkJIkh1Z2VQYWdlc19Ub3RhbDogJTVsdVxuIgotCQkJIkh1Z2VQYWdlc19GcmVlOiAgJTVsdVxuIgotCQkJIkh1Z2VQYWdlc19Sc3ZkOiAgJTVsdVxuIgotCQkJIkh1Z2VQYWdlc19TdXJwOiAgJTVsdVxuIgotCQkJIkh1Z2VwYWdlc2l6ZTogICAgJTVsdSBrQlxuIiwKKwkJCSJIdWdlUGFnZXNfVG90YWw6ICAgJTVsdVxuIgorCQkJIkh1Z2VQYWdlc19GcmVlOiAgICAlNWx1XG4iCisJCQkiSHVnZVBhZ2VzX1JzdmQ6ICAgICU1bHVcbiIKKwkJCSJIdWdlUGFnZXNfU3VycDogICAgJTVsdVxuIgorCQkJIkh1Z2VwYWdlc2l6ZTogICAlOGx1IGtCXG4iLAogCQkJaC0+bnJfaHVnZV9wYWdlcywKIAkJCWgtPmZyZWVfaHVnZV9wYWdlcywKIAkJCWgtPnJlc3ZfaHVnZV9wYWdlcywKQEAgLTE3NDcsMTAgKzE3NDcsOCBAQAogICogZnJvbSBvdGhlciBWTUFzIGFuZCBsZXQgdGhlIGNoaWxkcmVuIGJlIFNJR0tJTExlZCBpZiB0aGV5IGFyZSBmYXVsdGluZyB0aGUKICAqIHNhbWUgcmVnaW9uLgogICovCi1pbnQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGludCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKml0ZXJfdm1hOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwpAQCAtMjAwOCw3ICsyMDA2LDcgQEAKIAllbnRyeSA9IGh1Z2VfcHRlcF9nZXQocHRlcCk7CiAJaWYgKGh1Z2VfcHRlX25vbmUoZW50cnkpKSB7CiAJCXJldCA9IGh1Z2V0bGJfbm9fcGFnZShtbSwgdm1hLCBhZGRyZXNzLCBwdGVwLCB3cml0ZV9hY2Nlc3MpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X211dGV4OwogCX0KIAogCXJldCA9IDA7CkBAIC0yMDI0LDcgKzIwMjIsNyBAQAogCWlmICh3cml0ZV9hY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpIHsKIAkJaWYgKHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHJlc3MpIDwgMCkgewogCQkJcmV0ID0gVk1fRkFVTFRfT09NOwotCQkJZ290byBvdXRfdW5sb2NrOworCQkJZ290byBvdXRfbXV0ZXg7CiAJCX0KIAogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKQEAgLTIwMzQsMTAgKzIwMzIsMjMgQEAKIAogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJLyogQ2hlY2sgZm9yIGEgcmFjaW5nIHVwZGF0ZSBiZWZvcmUgY2FsbGluZyBodWdldGxiX2NvdyAqLwotCWlmIChsaWtlbHkocHRlX3NhbWUoZW50cnksIGh1Z2VfcHRlcF9nZXQocHRlcCkpKSkKLQkJaWYgKHdyaXRlX2FjY2VzcyAmJiAhcHRlX3dyaXRlKGVudHJ5KSkKKwlpZiAodW5saWtlbHkoIXB0ZV9zYW1lKGVudHJ5LCBodWdlX3B0ZXBfZ2V0KHB0ZXApKSkpCisJCWdvdG8gb3V0X3BhZ2VfdGFibGVfbG9jazsKKworCisJaWYgKHdyaXRlX2FjY2VzcykgeworCQlpZiAoIXB0ZV93cml0ZShlbnRyeSkpIHsKIAkJCXJldCA9IGh1Z2V0bGJfY293KG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIGVudHJ5LAogCQkJCQkJCXBhZ2VjYWNoZV9wYWdlKTsKKwkJCWdvdG8gb3V0X3BhZ2VfdGFibGVfbG9jazsKKwkJfQorCQllbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTsKKwl9CisJZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7CisJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIHdyaXRlX2FjY2VzcykpCisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisKK291dF9wYWdlX3RhYmxlX2xvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCiAJaWYgKHBhZ2VjYWNoZV9wYWdlKSB7CkBAIC0yMDQ1LDcgKzIwNTYsNyBAQAogCQlwdXRfcGFnZShwYWdlY2FjaGVfcGFnZSk7CiAJfQogCi1vdXRfdW5sb2NrOgorb3V0X211dGV4OgogCW11dGV4X3VubG9jaygmaHVnZXRsYl9pbnN0YW50aWF0aW9uX211dGV4KTsKIAogCXJldHVybiByZXQ7CkBAIC0yMDYwLDYgKzIwNzEsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludCBodWdlX3plcm9wYWdlX29rKHB0ZV90ICpwdGVwLCBpbnQgd3JpdGUsIGludCBzaGFyZWQpCit7CisJaWYgKCFwdGVwIHx8IHdyaXRlIHx8IHNoYXJlZCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZXApKTsKK30KKwogaW50IGZvbGxvd19odWdldGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywKIAkJCXVuc2lnbmVkIGxvbmcgKnBvc2l0aW9uLCBpbnQgKmxlbmd0aCwgaW50IGksCkBAIC0yMDY5LDYgKzIwODgsOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAqcG9zaXRpb247CiAJaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKKwlpbnQgemVyb3BhZ2Vfb2sgPSAwOworCWludCBzaGFyZWQgPSB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAl3aGlsZSAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIpIHsKQEAgLTIwODEsOCArMjEwMiwxMSBAQAogCQkgKiBmaXJzdCwgZm9yIHRoZSBwYWdlIGluZGV4aW5nIGJlbG93IHRvIHdvcmsuCiAJCSAqLwogCQlwdGUgPSBodWdlX3B0ZV9vZmZzZXQobW0sIHZhZGRyICYgaHVnZV9wYWdlX21hc2soaCkpOworCQlpZiAoaHVnZV96ZXJvcGFnZV9vayhwdGUsIHdyaXRlLCBzaGFyZWQpKQorCQkJemVyb3BhZ2Vfb2sgPSAxOwogCi0JCWlmICghcHRlIHx8IGh1Z2VfcHRlX25vbmUoaHVnZV9wdGVwX2dldChwdGUpKSB8fAorCQlpZiAoIXB0ZSB8fAorCQkgICAgKGh1Z2VfcHRlX25vbmUoaHVnZV9wdGVwX2dldChwdGUpKSAmJiAhemVyb3BhZ2Vfb2spIHx8CiAJCSAgICAod3JpdGUgJiYgIXB0ZV93cml0ZShodWdlX3B0ZXBfZ2V0KHB0ZSkpKSkgewogCQkJaW50IHJldDsKIApAQCAtMjEwMiw4ICsyMTI2LDExIEBACiAJCXBhZ2UgPSBwdGVfcGFnZShodWdlX3B0ZXBfZ2V0KHB0ZSkpOwogc2FtZV9wYWdlOgogCQlpZiAocGFnZXMpIHsKLQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJcGFnZXNbaV0gPSBwYWdlICsgcGZuX29mZnNldDsKKwkJCWlmICh6ZXJvcGFnZV9vaykKKwkJCQlwYWdlc1tpXSA9IFpFUk9fUEFHRSgwKTsKKwkJCWVsc2UKKwkJCQlwYWdlc1tpXSA9IHBhZ2UgKyBwZm5fb2Zmc2V0OworCQkJZ2V0X3BhZ2UocGFnZXNbaV0pOwogCQl9CiAKIAkJaWYgKHZtYXMpCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxZjQzZjc0Li5lNGU3MjhiIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCisrKyBiL21tL2ludGVybmFsLmgKQEAgLTM5LDYgKzM5LDE1IEBACiAJYXRvbWljX2RlYygmcGFnZS0+X2NvdW50KTsKIH0KIAorLyoKKyAqIGluIG1tL3Ztc2Nhbi5jOgorICovCitleHRlcm4gaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgcHV0YmFja19scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKy8qCisgKiBpbiBtbS9wYWdlX2FsbG9jLmMKKyAqLwogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2Jvb3RtZW0oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiAKIC8qCkBAIC01Miw2ICs2MSwxMjAgQEAKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQogCitleHRlcm4gbG9uZyBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBtdW5sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdW5sb2NrX3ZtYV9wYWdlc19hbGwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogdW5ldmljdGFibGVfbWlncmF0ZV9wYWdlKCkgY2FsbGVkIG9ubHkgZnJvbSBtaWdyYXRlX3BhZ2VfY29weSgpIHRvCisgKiBtaWdyYXRlIHVuZXZpY3RhYmxlIGZsYWcgdG8gbmV3IHBhZ2UuCisgKiBOb3RlIHRoYXQgdGhlIG9sZCBwYWdlIGhhcyBiZWVuIGlzb2xhdGVkIGZyb20gdGhlIExSVSBsaXN0cyBhdCB0aGlzCisgKiBwb2ludCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IExSVSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5ldmljdGFibGVfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXcsIHN0cnVjdCBwYWdlICpvbGQpCit7CisJaWYgKFRlc3RDbGVhclBhZ2VVbmV2aWN0YWJsZShvbGQpKQorCQlTZXRQYWdlVW5ldmljdGFibGUobmV3KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdW5ldmljdGFibGVfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXcsIHN0cnVjdCBwYWdlICpvbGQpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBDYWxsZWQgb25seSBpbiBmYXVsdCBwYXRoIHZpYSBwYWdlX2V2aWN0YWJsZSgpIGZvciBhIG5ldyBwYWdlCisgKiB0byBkZXRlcm1pbmUgaWYgaXQncyBiZWluZyBtYXBwZWQgaW50byBhIExPQ0tFRCB2bWEuCisgKiBJZiBzbywgbWFyayBwYWdlIGFzIG1sb2NrZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX21sb2NrZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisKKwlpZiAobGlrZWx5KCh2bWEtPnZtX2ZsYWdzICYgKFZNX0xPQ0tFRCB8IFZNX1NQRUNJQUwpKSAhPSBWTV9MT0NLRUQpKQorCQlyZXR1cm4gMDsKKworCWlmICghVGVzdFNldFBhZ2VNbG9ja2VkKHBhZ2UpKSB7CisJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01MT0NLRUQpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIG11c3QgYmUgY2FsbGVkIHdpdGggdm1hJ3MgbW1hcF9zZW0gaGVsZCBmb3IgcmVhZCwgYW5kIHBhZ2UgbG9ja2VkLgorICovCitleHRlcm4gdm9pZCBtbG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKy8qCisgKiBDbGVhciB0aGUgcGFnZSdzIFBhZ2VNbG9ja2VkKCkuICBUaGlzIGNhbiBiZSB1c2VmdWwgaW4gYSBzaXR1YXRpb24gd2hlcmUKKyAqIHdlIHdhbnQgdG8gdW5jb25kaXRpb25hbGx5IHJlbW92ZSBhIHBhZ2UgZnJvbSB0aGUgcGFnZWNhY2hlIC0tIGUuZy4sCisgKiBvbiB0cnVuY2F0aW9uIG9yIGZyZWVpbmcuCisgKgorICogSXQgaXMgbGVnYWwgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBhbnkgcGFnZSwgbWxvY2tlZCBvciBub3QuCisgKiBJZiBjYWxsZWQgZm9yIGEgcGFnZSB0aGF0IGlzIHN0aWxsIG1hcHBlZCBieSBtbG9ja2VkIHZtYXMsIGFsbCB3ZSBkbworICogaXMgcmV2ZXJ0IHRvIGxhenkgTFJVIGJlaGF2aW91ciAtLSBzZW1hbnRpY3MgYXJlIG5vdCBicm9rZW4uCisgKi8KK2V4dGVybiB2b2lkIF9fY2xlYXJfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAodW5saWtlbHkoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpKQorCQlfX2NsZWFyX3BhZ2VfbWxvY2socGFnZSk7Cit9CisKKy8qCisgKiBtbG9ja19taWdyYXRlX3BhZ2UgLSBjYWxsZWQgb25seSBmcm9tIG1pZ3JhdGVfcGFnZV9jb3B5KCkgdG8KKyAqIG1pZ3JhdGUgdGhlIE1sb2NrZWQgcGFnZSBmbGFnOyB1cGRhdGUgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKFRlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQlTZXRQYWdlTWxvY2tlZChuZXdwYWdlKTsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKG5ld3BhZ2UsIE5SX01MT0NLKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworLyoKKyAqIGZyZWVfcGFnZV9tbG9jaygpIC0tIGNsZWFuIHVwIGF0dGVtcHRzIHRvIGZyZWUgYW5kIG1sb2NrZWQoKSBwYWdlLgorICogUGFnZSBzaG91bGQgbm90IGJlIG9uIGxydSwgc28gbm8gbmVlZCB0byBmaXggdGhhdCB1cC4KKyAqIGZyZWVfcGFnZXNfY2hlY2soKSB3aWxsIHZlcmlmeS4uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh1bmxpa2VseShUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCV9fY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfTUxPQ0tGUkVFRCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKKyNlbHNlIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX21sb2NrZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdiwgc3RydWN0IHBhZ2UgKnApCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCiAvKgogICogRkxBVE1FTSBhbmQgRElTQ09OVElHTUVNIGNvbmZpZ3VyYXRpb25zIHVzZSBhbGxvY19ib290bWVtX25vZGUsCiAgKiBzbyBhbGwgZnVuY3Rpb25zIHN0YXJ0aW5nIGF0IHBhZ2luZ19pbml0IHNob3VsZCBiZSBtYXJrZWQgX19pbml0CkBAIC0xMjAsNCArMjQzLDEyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLwogCisjZGVmaW5lIEdVUF9GTEFHU19XUklURSAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBHVVBfRkxBR1NfRk9SQ0UgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMgMHg0CisKK2ludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgZmxhZ3MsCisJCSAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDM2ODk2ZjMuLmQ0YTkyYjYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMyLDExICszMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbV9jZ3JvdXBfc3Vic3lzIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBhZ2VfY2dyb3VwX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAjZGVmaW5lIE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTCTUKIAogLyoKQEAgLTY1LDExICs2NiwxMCBAQAogLyoKICAqIEZvciBhY2NvdW50aW5nIHVuZGVyIGlycSBkaXNhYmxlLCBubyBuZWVkIGZvciBpbmNyZW1lbnQgcHJlZW1wdCBjb3VudC4KICAqLwotc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqc3RhdCwKIAkJZW51bSBtZW1fY2dyb3VwX3N0YXRfaW5kZXggaWR4LCBpbnQgdmFsKQogewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RhdC0+Y3B1c3RhdFtjcHVdLmNvdW50W2lkeF0gKz0gdmFsOworCXN0YXQtPmNvdW50W2lkeF0gKz0gdmFsOwogfQogCiBzdGF0aWMgczY0IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQsCkBAIC04NSwyMiArODUsMTMgQEAKIC8qCiAgKiBwZXItem9uZSBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgY29udHJvbGxlci4KICAqLwotCi1lbnVtIG1lbV9jZ3JvdXBfenN0YXRfaW5kZXggewotCU1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFLAotCU1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUsCi0KLQlOUl9NRU1fQ0dST1VQX1pTVEFULAotfTsKLQogc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgewogCS8qCiAJICogc3Bpbl9sb2NrIHRvIHByb3RlY3QgdGhlIHBlciBjZ3JvdXAgTFJVCiAJICovCiAJc3BpbmxvY2tfdAkJbHJ1X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7Ci0JdW5zaWduZWQgbG9uZyBjb3VudFtOUl9NRU1fQ0dST1VQX1pTVEFUXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3RzW05SX0xSVV9MSVNUU107CisJdW5zaWduZWQgbG9uZwkJY291bnRbTlJfTFJVX0xJU1RTXTsKIH07CiAvKiBNYWNybyBmb3IgYWNjZXNzaW5nIGNvdW50ZXIgKi8KICNkZWZpbmUgTUVNX0NHUk9VUF9aU1RBVChteiwgaWR4KQkoKG16KS0+Y291bnRbKGlkeCldKQpAQCAtMTQ0LDY5ICsxMzUsNTIgQEAKIH07CiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgaW5pdF9tZW1fY2dyb3VwOwogCi0vKgotICogV2UgdXNlIHRoZSBsb3dlciBiaXQgb2YgdGhlIHBhZ2UtPnBhZ2VfY2dyb3VwIHBvaW50ZXIgYXMgYSBiaXQgc3BpbgotICogbG9jay4gIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgcGFnZS0+cGFnZV9jZ3JvdXAgaXMgYXQgbGVhc3QgdHdvCi0gKiBieXRlIGFsaWduZWQgKGJhc2VkIG9uIGNvbW1lbnRzIGZyb20gTmljayBQaWdnaW4pLiAgQnV0IHNpbmNlCi0gKiBiaXRfc3Bpbl9sb2NrIGRvZXNuJ3QgYWN0dWFsbHkgc2V0IHRoYXQgbG9jayBiaXQgaW4gYSBub24tZGVidWcKLSAqIHVuaXByb2Nlc3NvciBrZXJuZWwsIHdlIHNob3VsZCBhdm9pZCBzZXR0aW5nIGl0IGhlcmUgdG9vLgotICovCi0jZGVmaW5lIFBBR0VfQ0dST1VQX0xPQ0tfQklUIAkweDAKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQotI2RlZmluZSBQQUdFX0NHUk9VUF9MT0NLIAkoMSA8PCBQQUdFX0NHUk9VUF9MT0NLX0JJVCkKLSNlbHNlCi0jZGVmaW5lIFBBR0VfQ0dST1VQX0xPQ0sJMHgwCi0jZW5kaWYKLQotLyoKLSAqIEEgcGFnZV9jZ3JvdXAgcGFnZSBpcyBhc3NvY2lhdGVkIHdpdGggZXZlcnkgcGFnZSBkZXNjcmlwdG9yLiBUaGUKLSAqIHBhZ2VfY2dyb3VwIGhlbHBzIHVzIGlkZW50aWZ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjZ3JvdXAKLSAqLwotc3RydWN0IHBhZ2VfY2dyb3VwIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIHBlciBjZ3JvdXAgTFJVIGxpc3QgKi8KLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKLQlpbnQgZmxhZ3M7Ci19OwotI2RlZmluZSBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFCSgweDEpCS8qIGNoYXJnZWQgYXMgY2FjaGUgKi8KLSNkZWZpbmUgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkUgKDB4MikJLyogcGFnZSBpcyBhY3RpdmUgaW4gdGhpcyBjZ3JvdXAgKi8KLQotc3RhdGljIGludCBwYWdlX2Nncm91cF9uaWQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKLXsKLQlyZXR1cm4gcGFnZV90b19uaWQocGMtPnBhZ2UpOwotfQotCi1zdGF0aWMgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0JcmV0dXJuIHBhZ2Vfem9uZW51bShwYy0+cGFnZSk7Ci19Ci0KIGVudW0gY2hhcmdlX3R5cGUgewogCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUgPSAwLAogCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVELAorCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0sCS8qIHVzZWQgYnkgcGFnZSBtaWdyYXRpb24gb2Ygc2htZW0gKi8KIAlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0ZPUkNFLAkvKiB1c2VkIGJ5IGZvcmNlX2VtcHR5ICovCisJTlJfQ0hBUkdFX1RZUEUsCit9OworCisvKiBvbmx5IGZvciBoZXJlIChmb3IgZWFzeSByZWFkaW5nLikgKi8KKyNkZWZpbmUgUENHRl9DQUNIRQkoMVVMIDw8IFBDR19DQUNIRSkKKyNkZWZpbmUgUENHRl9VU0VECSgxVUwgPDwgUENHX1VTRUQpCisjZGVmaW5lIFBDR0ZfQUNUSVZFCSgxVUwgPDwgUENHX0FDVElWRSkKKyNkZWZpbmUgUENHRl9MT0NLCSgxVUwgPDwgUENHX0xPQ0spCisjZGVmaW5lIFBDR0ZfRklMRQkoMVVMIDw8IFBDR19GSUxFKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcKK3BjZ19kZWZhdWx0X2ZsYWdzW05SX0NIQVJHRV9UWVBFXSA9IHsKKwlQQ0dGX0NBQ0hFIHwgUENHRl9GSUxFIHwgUENHRl9VU0VEIHwgUENHRl9MT0NLLCAvKiBGaWxlIENhY2hlICovCisJUENHRl9BQ1RJVkUgfCBQQ0dGX1VTRUQgfCBQQ0dGX0xPQ0ssIC8qIEFub24gKi8KKwlQQ0dGX0FDVElWRSB8IFBDR0ZfQ0FDSEUgfCBQQ0dGX1VTRUQgfCBQQ0dGX0xPQ0ssIC8qIFNobWVtICovCisJMCwgLyogRk9SQ0UgKi8KIH07CiAKIC8qCiAgKiBBbHdheXMgbW9kaWZpZWQgdW5kZXIgbHJ1IGxvY2suIFRoZW4sIG5vdCBuZWNlc3NhcnkgdG8gcHJlZW1wdF9kaXNhYmxlKCkKICAqLwotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBpbnQgZmxhZ3MsCi0JCQkJCWJvb2wgY2hhcmdlKQorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJCQkgc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKKwkJCQkJIGJvb2wgY2hhcmdlKQogewogCWludCB2YWwgPSAoY2hhcmdlKT8gMSA6IC0xOwogCXN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQgPSAmbWVtLT5zdGF0OworCXN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfY3B1ICpjcHVzdGF0OwogCiAJVk1fQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwotCWlmIChmbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQ0FDSEUpCi0JCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSwgdmFsKTsKKworCWNwdXN0YXQgPSAmc3RhdC0+Y3B1c3RhdFtzbXBfcHJvY2Vzc29yX2lkKCldOworCWlmIChQYWdlQ2dyb3VwQ2FjaGUocGMpKQorCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsIHZhbCk7CiAJZWxzZQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTLCB2YWwpOworCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTLCB2YWwpOwogCiAJaWYgKGNoYXJnZSkKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RhdCwKKwkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwKIAkJCQlNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5ULCAxKTsKIAllbHNlCi0JCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsCisJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKGNwdXN0YXQsCiAJCQkJTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQsIDEpOwogfQogCkBAIC0yMjcsNyArMjAxLDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCWVudW0gbWVtX2Nncm91cF96c3RhdF9pbmRleCBpZHgpCisJCQkJCWVudW0gbHJ1X2xpc3QgaWR4KQogewogCWludCBuaWQsIHppZDsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CkBAIC0yNjIsODUgKzIzNiw3NyBAQAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwYWdlX2Nncm91cF9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIGJpdF9zcGluX2lzX2xvY2tlZChQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKLX0KLQotc3RhdGljIHZvaWQgcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0JVk1fQlVHX09OKCFwYWdlX2Nncm91cF9sb2NrZWQocGFnZSkpOwotCXBhZ2UtPnBhZ2VfY2dyb3VwID0gKCh1bnNpZ25lZCBsb25nKXBjIHwgUEFHRV9DR1JPVVBfTE9DSyk7Ci19Ci0KLXN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9nZXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKikgKHBhZ2UtPnBhZ2VfY2dyb3VwICYgflBBR0VfQ0dST1VQX0xPQ0spOwotfQotCi1zdGF0aWMgdm9pZCBsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCWJpdF9zcGluX2xvY2soUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJ5X2xvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIGJpdF9zcGluX3RyeWxvY2soUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQliaXRfc3Bpbl91bmxvY2soUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewotCWludCBmcm9tID0gcGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7CisJaW50IGxydSA9IExSVV9CQVNFOwogCi0JaWYgKGZyb20pCi0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKSAtPSAxOwotCWVsc2UKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSkgLT0gMTsKKwlpZiAoUGFnZUNncm91cFVuZXZpY3RhYmxlKHBjKSkKKwkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOworCWVsc2UgeworCQlpZiAoUGFnZUNncm91cEFjdGl2ZShwYykpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJaWYgKFBhZ2VDZ3JvdXBGaWxlKHBjKSkKKwkJCWxydSArPSBMUlVfRklMRTsKKwl9CiAKLQltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHBjLT5tZW1fY2dyb3VwLCBwYy0+ZmxhZ3MsIGZhbHNlKTsKKwlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpIC09IDE7CisKKwltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHBjLT5tZW1fY2dyb3VwLCBwYywgZmFsc2UpOwogCWxpc3RfZGVsKCZwYy0+bHJ1KTsKIH0KIAogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2FkZF9saXN0KHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwKIAkJCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewotCWludCB0byA9IHBjLT5mbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOworCWludCBscnUgPSBMUlVfQkFTRTsKIAotCWlmICghdG8pIHsKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSkgKz0gMTsKLQkJbGlzdF9hZGQoJnBjLT5scnUsICZtei0+aW5hY3RpdmVfbGlzdCk7Ci0JfSBlbHNlIHsKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpICs9IDE7Ci0JCWxpc3RfYWRkKCZwYy0+bHJ1LCAmbXotPmFjdGl2ZV9saXN0KTsKKwlpZiAoUGFnZUNncm91cFVuZXZpY3RhYmxlKHBjKSkKKwkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOworCWVsc2UgeworCQlpZiAoUGFnZUNncm91cEFjdGl2ZShwYykpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJaWYgKFBhZ2VDZ3JvdXBGaWxlKHBjKSkKKwkJCWxydSArPSBMUlVfRklMRTsKIAl9Ci0JbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhwYy0+bWVtX2Nncm91cCwgcGMtPmZsYWdzLCB0cnVlKTsKKworCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgKz0gMTsKKwlsaXN0X2FkZCgmcGMtPmxydSwgJm16LT5saXN0c1tscnVdKTsKKworCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MocGMtPm1lbV9jZ3JvdXAsIHBjLCB0cnVlKTsKIH0KIAotc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgYm9vbCBhY3RpdmUpCitzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlpbnQgZnJvbSA9IHBjLT5mbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKKwlpbnQgYWN0aXZlICAgID0gUGFnZUNncm91cEFjdGl2ZShwYyk7CisJaW50IGZpbGUgICAgICA9IFBhZ2VDZ3JvdXBGaWxlKHBjKTsKKwlpbnQgdW5ldmljdGFibGUgPSBQYWdlQ2dyb3VwVW5ldmljdGFibGUocGMpOworCWVudW0gbHJ1X2xpc3QgZnJvbSA9IHVuZXZpY3RhYmxlID8gTFJVX1VORVZJQ1RBQkxFIDoKKwkJCQkoTFJVX0ZJTEUgKiAhIWZpbGUgKyAhIWFjdGl2ZSk7CiAKLQlpZiAoZnJvbSkKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpIC09IDE7Ci0JZWxzZQotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKSAtPSAxOworCWlmIChscnUgPT0gZnJvbSkKKwkJcmV0dXJuOwogCi0JaWYgKGFjdGl2ZSkgewotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSkgKz0gMTsKLQkJcGMtPmZsYWdzIHw9IFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOwotCQlsaXN0X21vdmUoJnBjLT5scnUsICZtei0+YWN0aXZlX2xpc3QpOworCU1FTV9DR1JPVVBfWlNUQVQobXosIGZyb20pIC09IDE7CisJLyoKKwkgKiBIb3dldmVyIHRoaXMgaXMgZG9uZSB1bmRlciBtei0+bHJ1X2xvY2ssIGFub3RoZXIgZmxhZ3MsIHdoaWNoCisJICogYXJlIG5vdCByZWxhdGVkIHRvIExSVSwgd2lsbCBiZSBtb2RpZmllZCBmcm9tIG91dC1vZi1sb2NrLgorCSAqIFdlIGhhdmUgdG8gdXNlIGF0b21pYyBzZXQvY2xlYXIgZmxhZ3MuCisJICovCisJaWYgKGlzX3VuZXZpY3RhYmxlX2xydShscnUpKSB7CisJCUNsZWFyUGFnZUNncm91cEFjdGl2ZShwYyk7CisJCVNldFBhZ2VDZ3JvdXBVbmV2aWN0YWJsZShwYyk7CiAJfSBlbHNlIHsKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSkgKz0gMTsKLQkJcGMtPmZsYWdzICY9IH5QQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKLQkJbGlzdF9tb3ZlKCZwYy0+bHJ1LCAmbXotPmluYWN0aXZlX2xpc3QpOworCQlpZiAoaXNfYWN0aXZlX2xydShscnUpKQorCQkJU2V0UGFnZUNncm91cEFjdGl2ZShwYyk7CisJCWVsc2UKKwkJCUNsZWFyUGFnZUNncm91cEFjdGl2ZShwYyk7CisJCUNsZWFyUGFnZUNncm91cFVuZXZpY3RhYmxlKHBjKTsKIAl9CisKKwlNRU1fQ0dST1VQX1pTVEFUKG16LCBscnUpICs9IDE7CisJbGlzdF9tb3ZlKCZwYy0+bHJ1LCAmbXotPmxpc3RzW2xydV0pOwogfQogCiBpbnQgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKQEAgLTM1Niw3ICszMjIsNyBAQAogLyoKICAqIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHpvbmUncyBscnUgbG9jayBpcyBhbHJlYWR5IGhlbGQKICAqLwotdm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgYWN0aXZlKQordm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwpAQCAtMzcyLDE3ICszMzgsMTYgQEAKIAkgKiBzYWZlbHkgZ2V0IHRvIHBhZ2VfY2dyb3VwIHdpdGhvdXQgaXQsIHNvIGp1c3QgdHJ5X2xvY2sgaXQ6CiAJICogbWVtX2Nncm91cF9pc29sYXRlX3BhZ2VzIGFsbG93cyBmb3IgcGFnZSBsZWZ0IG9uIHdyb25nIGxpc3QuCiAJICovCi0JaWYgKCF0cnlfbG9ja19wYWdlX2Nncm91cChwYWdlKSkKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwlpZiAoIXRyeWxvY2tfcGFnZV9jZ3JvdXAocGMpKQogCQlyZXR1cm47Ci0KLQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmIChwYykgeworCWlmIChwYyAmJiBQYWdlQ2dyb3VwVXNlZChwYykpIHsKIAkJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKLQkJX19tZW1fY2dyb3VwX21vdmVfbGlzdHMocGMsIGFjdGl2ZSk7CisJCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBscnUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAl9Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiB9CiAKIC8qCkBAIC00MDMsMjEgKzM2OCw2IEBACiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHZtc2Nhbi5jLiBJbiBwYWdlIHJlY2xhaW1pbmcgbG9vcC4gYmFsYW5jZQotICogYmV0d2VlbiBhY3RpdmUgYW5kIGluYWN0aXZlIGxpc3QgaXMgY2FsY3VsYXRlZC4gRm9yIG1lbW9yeSBjb250cm9sbGVyCi0gKiBwYWdlIHJlY2xhaW1pbmcsIHdlIHNob3VsZCB1c2UgdXNpbmcgbWVtX2Nncm91cCdzIGltYmFsYW5jZSByYXRoZXIgdGhhbgotICogem9uZSdzIGdsb2JhbCBscnUgaW1iYWxhbmNlLgotICovCi1sb25nIG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKLXsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmU7Ci0JLyogYWN0aXZlIGFuZCBpbmFjdGl2ZSBhcmUgdGhlIG51bWJlciBvZiBwYWdlcy4gJ2xvbmcnIGlzIG9rLiovCi0JYWN0aXZlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbSwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpOwotCWluYWN0aXZlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbSwgTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSk7Ci0JcmV0dXJuIChsb25nKSAoYWN0aXZlIC8gKGluYWN0aXZlICsgMSkpOwotfQotCi0vKgogICogcHJldl9wcmlvcml0eSBjb250cm9sLi4udGhpcyB3aWxsIGJlIHVzZWQgaW4gbWVtb3J5IHJlY2xhaW0gcGF0aC4KICAqLwogaW50IG1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKQEAgLTQ0NCwyOCArMzk0LDE3IEBACiAgKiAoc2VlIGluY2x1ZGUvbGludXgvbW16b25lLmgpCiAgKi8KIAotbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkgICBzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KQorbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQkJaW50IHByaW9yaXR5LCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlsb25nIG5yX2FjdGl2ZTsKKwlsb25nIG5yX3BhZ2VzOwogCWludCBuaWQgPSB6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkOwogCWludCB6aWQgPSB6b25lX2lkeCh6b25lKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOwogCi0JbnJfYWN0aXZlID0gTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpOwotCXJldHVybiAobnJfYWN0aXZlID4+IHByaW9yaXR5KTsKLX0KKwlucl9wYWdlcyA9IE1FTV9DR1JPVVBfWlNUQVQobXosIGxydSk7CiAKLWxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1faW5hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKLXsKLQlsb25nIG5yX2luYWN0aXZlOwotCWludCBuaWQgPSB6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkOwotCWludCB6aWQgPSB6b25lX2lkeCh6b25lKTsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOwotCi0JbnJfaW5hY3RpdmUgPSBNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKTsKLQlyZXR1cm4gKG5yX2luYWN0aXZlID4+IHByaW9yaXR5KTsKKwlyZXR1cm4gKG5yX3BhZ2VzID4+IHByaW9yaXR5KTsKIH0KIAogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLApAQCAtNDczLDcgKzQxMiw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKIAkJCQkJaW50IG1vZGUsIHN0cnVjdCB6b25lICp6LAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQkJCWludCBhY3RpdmUpCisJCQkJCWludCBhY3RpdmUsIGludCBmaWxlKQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNDg0LDM4ICs0MjMsMzggQEAKIAlpbnQgbmlkID0gei0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKIAlpbnQgemlkID0gem9uZV9pZHgoeik7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OworCWludCBscnUgPSBMUlVfRklMRSAqICEhZmlsZSArICEhYWN0aXZlOwogCiAJQlVHX09OKCFtZW1fY29udCk7CiAJbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbV9jb250LCBuaWQsIHppZCk7Ci0JaWYgKGFjdGl2ZSkKLQkJc3JjID0gJm16LT5hY3RpdmVfbGlzdDsKLQllbHNlCi0JCXNyYyA9ICZtei0+aW5hY3RpdmVfbGlzdDsKLQorCXNyYyA9ICZtei0+bGlzdHNbbHJ1XTsKIAogCXNwaW5fbG9jaygmbXotPmxydV9sb2NrKTsKIAlzY2FuID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShwYywgdG1wLCBzcmMsIGxydSkgewogCQlpZiAoc2NhbiA+PSBucl90b19zY2FuKQogCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseSghUGFnZUNncm91cFVzZWQocGMpKSkKKwkJCWNvbnRpbnVlOwogCQlwYWdlID0gcGMtPnBhZ2U7CiAKIAkJaWYgKHVubGlrZWx5KCFQYWdlTFJVKHBhZ2UpKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChQYWdlQWN0aXZlKHBhZ2UpICYmICFhY3RpdmUpIHsKLQkJCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCB0cnVlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiBhY3RpdmUpIHsKLQkJCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBmYWxzZSk7CisJCS8qCisJCSAqIFRPRE86IHBsYXkgYmV0dGVyIHdpdGggbHVtcHkgcmVjbGFpbSwgZ3JhYmJpbmcgYW55dGhpbmcuCisJCSAqLworCQlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpIHx8CisJCSAgICAoUGFnZUFjdGl2ZShwYWdlKSAmJiAhYWN0aXZlKSB8fAorCQkgICAgKCFQYWdlQWN0aXZlKHBhZ2UpICYmIGFjdGl2ZSkpIHsKKwkJCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBwYWdlX2xydShwYWdlKSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXNjYW4rKzsKIAkJbGlzdF9tb3ZlKCZwYy0+bHJ1LCAmcGNfbGlzdCk7CiAKLQkJaWYgKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlKSA9PSAwKSB7CisJCWlmIChfX2lzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgbW9kZSwgZmlsZSkgPT0gMCkgewogCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsIGRzdCk7CiAJCQlucl90YWtlbisrOwogCQl9CkBAIC01NDAsMjYgKzQ3OSwyNyBAQAogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcGMgPSBrbWVtX2NhY2hlX2FsbG9jKHBhZ2VfY2dyb3VwX2NhY2hlLCBnZnBfbWFzayk7Ci0JaWYgKHVubGlrZWx5KHBjID09IE5VTEwpKQotCQlnb3RvIGVycjsKLQorCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCS8qIGNhbiBoYXBwZW4gYXQgYm9vdCAqLworCWlmICh1bmxpa2VseSghcGMpKQorCQlyZXR1cm4gMDsKKwlwcmVmZXRjaHcocGMpOwogCS8qCiAJICogV2UgYWx3YXlzIGNoYXJnZSB0aGUgY2dyb3VwIHRoZSBtbV9zdHJ1Y3QgYmVsb25ncyB0by4KIAkgKiBUaGUgbW1fc3RydWN0J3MgbWVtX2Nncm91cCBjaGFuZ2VzIG9uIHRhc2sgbWlncmF0aW9uIGlmIHRoZQogCSAqIHRocmVhZCBncm91cCBsZWFkZXIgbWlncmF0ZXMuIEl0J3MgcG9zc2libGUgdGhhdCBtbSBpcyBub3QKIAkgKiBzZXQsIGlmIHNvIGNoYXJnZSB0aGUgaW5pdF9tbSAoaGFwcGVucyBmb3IgcGFnZWNhY2hlIHVzYWdlKS4KIAkgKi8KKwogCWlmIChsaWtlbHkoIW1lbWNnKSkgewogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCW1lbSA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHJjdV9kZXJlZmVyZW5jZShtbS0+b3duZXIpKTsKIAkJaWYgKHVubGlrZWx5KCFtZW0pKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWttZW1fY2FjaGVfZnJlZShwYWdlX2Nncm91cF9jYWNoZSwgcGMpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyoKQEAgLTU3Miw3ICs1MTIsNyBAQAogCQljc3NfZ2V0KCZtZW1jZy0+Y3NzKTsKIAl9CiAKLQl3aGlsZSAocmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKSkgeworCXdoaWxlICh1bmxpa2VseShyZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpKSkgewogCQlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQkJZ290byBvdXQ7CiAKQEAgLTU5NSwzOSArNTM1LDMzIEBACiAJCX0KIAl9CiAKKworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CisJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKKwkJY3NzX3B1dCgmbWVtLT5jc3MpOworCisJCWdvdG8gZG9uZTsKKwl9CiAJcGMtPm1lbV9jZ3JvdXAgPSBtZW07Ci0JcGMtPnBhZ2UgPSBwYWdlOwogCS8qCiAJICogSWYgYSBwYWdlIGlzIGFjY291bnRlZCBhcyBhIHBhZ2UgY2FjaGUsIGluc2VydCB0byBpbmFjdGl2ZSBsaXN0LgogCSAqIElmIGFub24sIGluc2VydCB0byBhY3RpdmUgbGlzdC4KIAkgKi8KLQlpZiAoY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRSkKLQkJcGMtPmZsYWdzID0gUEFHRV9DR1JPVVBfRkxBR19DQUNIRTsKLQllbHNlCi0JCXBjLT5mbGFncyA9IFBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOwotCi0JbG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQlpZiAodW5saWtlbHkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkpKSB7Ci0JCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwotCQljc3NfcHV0KCZtZW0tPmNzcyk7Ci0JCWttZW1fY2FjaGVfZnJlZShwYWdlX2Nncm91cF9jYWNoZSwgcGMpOwotCQlnb3RvIGRvbmU7Ci0JfQotCXBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHBhZ2UsIHBjKTsKKwlwYy0+ZmxhZ3MgPSBwY2dfZGVmYXVsdF9mbGFnc1tjdHlwZV07CiAKIAlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAlfX21lbV9jZ3JvdXBfYWRkX2xpc3QobXosIHBjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKKwl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCi0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogZG9uZToKIAlyZXR1cm4gMDsKIG91dDoKIAljc3NfcHV0KCZtZW0tPmNzcyk7Ci0Ja21lbV9jYWNoZV9mcmVlKHBhZ2VfY2dyb3VwX2NhY2hlLCBwYyk7Ci1lcnI6CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTYzNSw3ICs1NjksOCBAQAogewogCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKIAkJcmV0dXJuIDA7Ci0KKwlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKQorCQlyZXR1cm4gMDsKIAkvKgogCSAqIElmIGFscmVhZHkgbWFwcGVkLCB3ZSBkb24ndCBoYXZlIHRvIGFjY291bnQuCiAJICogSWYgcGFnZSBjYWNoZSwgcGFnZS0+bWFwcGluZyBoYXMgYWRkcmVzc19zcGFjZS4KQEAgLTY1Niw3ICs1OTEsOCBAQAogewogCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKIAkJcmV0dXJuIDA7Ci0KKwlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKQorCQlyZXR1cm4gMDsKIAkvKgogCSAqIENvcm5lciBjYXNlIGhhbmRsaW5nLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGFkZF90b19wYWdlX2NhY2hlKCkKIAkgKiBpbiB1c3VhbC4gQnV0IHNvbWUgRlMgKHNobWVtKSBwcmVjaGFyZ2VzIHRoaXMgcGFnZSBiZWZvcmUgY2FsbGluZyBpdApAQCAtNjY5LDIyICs2MDUsMjcgQEAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKSB7CiAJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKLQkJbG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQkJcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQkJaWYgKHBjKSB7Ci0JCQlWTV9CVUdfT04ocGMtPnBhZ2UgIT0gcGFnZSk7Ci0JCQlWTV9CVUdfT04oIXBjLT5tZW1fY2dyb3VwKTsKLQkJCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKKworCQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwkJaWYgKCFwYykKKwkJCXJldHVybiAwOworCQlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwkJaWYgKFBhZ2VDZ3JvdXBVc2VkKHBjKSkgeworCQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKKwkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoIW1tKSkKIAkJbW0gPSAmaW5pdF9tbTsKIAotCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAorCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAogCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUsIE5VTEwpOworCWVsc2UKKwkJcmV0dXJuIG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCisJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTSwgTlVMTCk7CiB9CiAKIC8qCkBAIC03MDQsNDQgKzY0NSw0NiBAQAogCS8qCiAJICogQ2hlY2sgaWYgb3VyIHBhZ2VfY2dyb3VwIGlzIHZhbGlkCiAJICovCi0JbG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmICh1bmxpa2VseSghcGMpKQotCQlnb3RvIHVubG9jazsKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwlpZiAodW5saWtlbHkoIXBjIHx8ICFQYWdlQ2dyb3VwVXNlZChwYykpKQorCQlyZXR1cm47CiAKLQlWTV9CVUdfT04ocGMtPnBhZ2UgIT0gcGFnZSk7Ci0KLQlpZiAoKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKQotCSAgICAmJiAoKHBjLT5mbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQ0FDSEUpCi0JCXx8IHBhZ2VfbWFwcGVkKHBhZ2UpKSkKLQkJZ290byB1bmxvY2s7CisJbG9ja19wYWdlX2Nncm91cChwYyk7CisJaWYgKChjdHlwZSA9PSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCAmJiBwYWdlX21hcHBlZChwYWdlKSkKKwkgICAgIHx8ICFQYWdlQ2dyb3VwVXNlZChwYykpIHsKKwkJLyogVGhpcyBoYXBwZW5zIGF0IHJhY2UgaW4gemFwX3B0ZV9yYW5nZSgpIGFuZCBkb19zd2FwX3BhZ2UoKSovCisJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CisJCXJldHVybjsKKwl9CisJQ2xlYXJQYWdlQ2dyb3VwVXNlZChwYyk7CisJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CiAKIAlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJX19tZW1fY2dyb3VwX3JlbW92ZV9saXN0KG16LCBwYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAotCXBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHBhZ2UsIE5VTEwpOwotCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQotCW1lbSA9IHBjLT5tZW1fY2dyb3VwOwogCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAljc3NfcHV0KCZtZW0tPmNzcyk7CiAKLQlrbWVtX2NhY2hlX2ZyZWUocGFnZV9jZ3JvdXBfY2FjaGUsIHBjKTsKIAlyZXR1cm47Ci11bmxvY2s6Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogfQogCiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwkvKiBlYXJseSBjaGVjay4gKi8KKwlpZiAocGFnZV9tYXBwZWQocGFnZSkpCisJCXJldHVybjsKKwlpZiAocGFnZS0+bWFwcGluZyAmJiAhUGFnZUFub24ocGFnZSkpCisJCXJldHVybjsKIAlfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfY29tbW9uKHBhZ2UsIE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKTsKIH0KIAogdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJVk1fQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKKwlWTV9CVUdfT04ocGFnZS0+bWFwcGluZyk7CiAJX19tZW1fY2dyb3VwX3VuY2hhcmdlX2NvbW1vbihwYWdlLCBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKTsKIH0KIApAQCAtNzU4LDE1ICs3MDEsMTkgQEAKIAlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCiAJCXJldHVybiAwOwogCi0JbG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmIChwYykgeworCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKIAkJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CiAJCWNzc19nZXQoJm1lbS0+Y3NzKTsKLQkJaWYgKHBjLT5mbGFncyAmIFBBR0VfQ0dST1VQX0ZMQUdfQ0FDSEUpCi0JCQljdHlwZSA9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEU7CisJCWlmIChQYWdlQ2dyb3VwQ2FjaGUocGMpKSB7CisJCQlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKQorCQkJCWN0eXBlID0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRTsKKwkJCWVsc2UKKwkJCQljdHlwZSA9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU07CisJCX0KIAl9Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJaWYgKG1lbSkgewogCQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24obmV3cGFnZSwgTlVMTCwgR0ZQX0tFUk5FTCwKIAkJCWN0eXBlLCBtZW0pOwpAQCAtNzkxLDcgKzczOCw3IEBACiAJICovCiAJaWYgKCFuZXdwYWdlLT5tYXBwaW5nKQogCQlfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfY29tbW9uKG5ld3BhZ2UsCi0JCQkJCSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0ZPUkNFKTsKKwkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0ZPUkNFKTsKIAllbHNlIGlmIChQYWdlQW5vbihuZXdwYWdlKSkKIAkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKG5ld3BhZ2UpOwogfQpAQCAtODYzLDcgKzgxMCw3IEBACiAjZGVmaW5lIEZPUkNFX1VOQ0hBUkdFX0JBVENICSgxMjgpCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCSAgICBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCi0JCQkgICAgaW50IGFjdGl2ZSkKKwkJCSAgICBlbnVtIGxydV9saXN0IGxydSkKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtODcxLDE1ICs4MTgsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKLQlpZiAoYWN0aXZlKQotCQlsaXN0ID0gJm16LT5hY3RpdmVfbGlzdDsKLQllbHNlCi0JCWxpc3QgPSAmbXotPmluYWN0aXZlX2xpc3Q7CisJbGlzdCA9ICZtei0+bGlzdHNbbHJ1XTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKIAkJcGMgPSBsaXN0X2VudHJ5KGxpc3QtPnByZXYsIHN0cnVjdCBwYWdlX2Nncm91cCwgbHJ1KTsKIAkJcGFnZSA9IHBjLT5wYWdlOworCQlpZiAoIVBhZ2VDZ3JvdXBVc2VkKHBjKSkKKwkJCWJyZWFrOwogCQlnZXRfcGFnZShwYWdlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJCS8qCkBAIC04OTQsOCArODQwLDEwIEBACiAJCQkJY291bnQgPSBGT1JDRV9VTkNIQVJHRV9CQVRDSDsKIAkJCQljb25kX3Jlc2NoZWQoKTsKIAkJCX0KLQkJfSBlbHNlCi0JCQljb25kX3Jlc2NoZWQoKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CkBAIC05MTksMTUgKzg2NywxNyBAQAogCXdoaWxlIChtZW0tPnJlcy51c2FnZSA+IDApIHsKIAkJaWYgKGF0b21pY19yZWFkKCZtZW0tPmNzcy5jZ3JvdXAtPmNvdW50KSA+IDApCiAJCQlnb3RvIG91dDsKKwkJLyogVGhpcyBpcyBmb3IgbWFraW5nIGFsbCAqdXNlZCogcGFnZXMgdG8gYmUgb24gTFJVLiAqLworCQlscnVfYWRkX2RyYWluX2FsbCgpOwogCQlmb3JfZWFjaF9ub2RlX3N0YXRlKG5vZGUsIE5fUE9TU0lCTEUpCiAJCQlmb3IgKHppZCA9IDA7IHppZCA8IE1BWF9OUl9aT05FUzsgemlkKyspIHsKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CisJCQkJZW51bSBscnVfbGlzdCBsOwogCQkJCW16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIG5vZGUsIHppZCk7Ci0JCQkJLyogZHJvcCBhbGwgcGFnZV9jZ3JvdXAgaW4gYWN0aXZlX2xpc3QgKi8KLQkJCQltZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X2xpc3QobWVtLCBteiwgMSk7Ci0JCQkJLyogZHJvcCBhbGwgcGFnZV9jZ3JvdXAgaW4gaW5hY3RpdmVfbGlzdCAqLwotCQkJCW1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdChtZW0sIG16LCAwKTsKKwkJCQlmb3JfZWFjaF9scnUobCkKKwkJCQkJbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KG1lbSwgbXosIGwpOwogCQkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJcmV0ID0gMDsKIG91dDoKQEAgLTEwMTIsMTQgKzk2MiwyNyBAQAogCX0KIAkvKiBzaG93aW5nICMgb2YgYWN0aXZlIHBhZ2VzICovCiAJewotCQl1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmU7CisJCXVuc2lnbmVkIGxvbmcgYWN0aXZlX2Fub24sIGluYWN0aXZlX2Fub247CisJCXVuc2lnbmVkIGxvbmcgYWN0aXZlX2ZpbGUsIGluYWN0aXZlX2ZpbGU7CisJCXVuc2lnbmVkIGxvbmcgdW5ldmljdGFibGU7CiAKLQkJaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKTsKLQkJYWN0aXZlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpOwotCQljYi0+ZmlsbChjYiwgImFjdGl2ZSIsIChhY3RpdmUpICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZSIsIChpbmFjdGl2ZSkgKiBQQUdFX1NJWkUpOworCQlpbmFjdGl2ZV9hbm9uID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAorCQkJCQkJTFJVX0lOQUNUSVZFX0FOT04pOworCQlhY3RpdmVfYW5vbiA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKKwkJCQkJCUxSVV9BQ1RJVkVfQU5PTik7CisJCWluYWN0aXZlX2ZpbGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCisJCQkJCQlMUlVfSU5BQ1RJVkVfRklMRSk7CisJCWFjdGl2ZV9maWxlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAorCQkJCQkJTFJVX0FDVElWRV9GSUxFKTsKKwkJdW5ldmljdGFibGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCisJCQkJCQkJTFJVX1VORVZJQ1RBQkxFKTsKKworCQljYi0+ZmlsbChjYiwgImFjdGl2ZV9hbm9uIiwgKGFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7CisJCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfYW5vbiIsIChpbmFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7CisJCWNiLT5maWxsKGNiLCAiYWN0aXZlX2ZpbGUiLCAoYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKKwkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9maWxlIiwgKGluYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKKwkJY2ItPmZpbGwoY2IsICJ1bmV2aWN0YWJsZSIsIHVuZXZpY3RhYmxlICogUEFHRV9TSVpFKTsKKwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEwNjIsNiArMTAyNSw3IEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwllbnVtIGxydV9saXN0IGw7CiAJaW50IHpvbmUsIHRtcCA9IG5vZGU7CiAJLyoKIAkgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFnYWluc3QgcG9zc2libGUgbm9kZXMuCkBAIC0xMDgyLDkgKzEwNDYsOSBAQAogCiAJZm9yICh6b25lID0gMDsgem9uZSA8IE1BWF9OUl9aT05FUzsgem9uZSsrKSB7CiAJCW16ID0gJnBuLT56b25laW5mb1t6b25lXTsKLQkJSU5JVF9MSVNUX0hFQUQoJm16LT5hY3RpdmVfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZtei0+aW5hY3RpdmVfbGlzdCk7CiAJCXNwaW5fbG9ja19pbml0KCZtei0+bHJ1X2xvY2spOworCQlmb3JfZWFjaF9scnUobCkKKwkJCUlOSVRfTElTVF9IRUFEKCZtei0+bGlzdHNbbF0pOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExMjQsOCArMTA4OCw4IEBACiAJaW50IG5vZGU7CiAKIAlpZiAodW5saWtlbHkoKGNvbnQtPnBhcmVudCkgPT0gTlVMTCkpIHsKKwkJcGFnZV9jZ3JvdXBfaW5pdCgpOwogCQltZW0gPSAmaW5pdF9tZW1fY2dyb3VwOwotCQlwYWdlX2Nncm91cF9jYWNoZSA9IEtNRU1fQ0FDSEUocGFnZV9jZ3JvdXAsIFNMQUJfUEFOSUMpOwogCX0gZWxzZSB7CiAJCW1lbSA9IG1lbV9jZ3JvdXBfYWxsb2MoKTsKIAkJaWYgKCFtZW0pCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDEwMDJmNDcuLjNhNmM0YTYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC02NCw2ICs2NCw4IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogLyogdXNlIHRoZSBwZXItcGdkYXQgZGF0YSBpbnN0ZWFkIGZvciBkaXNjb250aWdtZW0gLSBtYmxpZ2ggKi8KIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwpAQCAtMTEyOSwxMiArMTEzMSwxNyBAQAogCXJldHVybiAhdm1hLT52bV9vcHMgfHwgIXZtYS0+dm1fb3BzLT5mYXVsdDsKIH0KIAotaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCisKKworaW50IF9fZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCBmbGFncywKIAkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgdm1fZmxhZ3M7CisJdW5zaWduZWQgaW50IHZtX2ZsYWdzID0gMDsKKwlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7CisJaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOworCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKIAogCWlmIChsZW4gPD0gMCkKIAkJcmV0dXJuIDA7CkBAIC0xMTU4LDcgKzExNjUsOSBAQAogCQkJcHVkX3QgKnB1ZDsKIAkJCXBtZF90ICpwbWQ7CiAJCQlwdGVfdCAqcHRlOwotCQkJaWYgKHdyaXRlKSAvKiB1c2VyIGdhdGUgcGFnZXMgYXJlIHJlYWQtb25seSAqLworCisJCQkvKiB1c2VyIGdhdGUgcGFnZXMgYXJlIHJlYWQtb25seSAqLworCQkJaWYgKCFpZ25vcmUgJiYgd3JpdGUpCiAJCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAJCQlpZiAocGcgPiBUQVNLX1NJWkUpCiAJCQkJcGdkID0gcGdkX29mZnNldF9rKHBnKTsKQEAgLTExOTAsOCArMTE5OSw5IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghdm1hIHx8ICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkKLQkJCQl8fCAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpCisJCWlmICghdm1hIHx8CisJCSAgICAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpIHx8CisJCSAgICAoIWlnbm9yZSAmJiAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpKQogCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAKIAkJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CkBAIC0xMjY2LDYgKzEyNzYsMjMgQEAKIAl9IHdoaWxlIChsZW4pOwogCXJldHVybiBpOwogfQorCitpbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKKwkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKK3sKKwlpbnQgZmxhZ3MgPSAwOworCisJaWYgKHdyaXRlKQorCQlmbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisJaWYgKGZvcmNlKQorCQlmbGFncyB8PSBHVVBfRkxBR1NfRk9SQ0U7CisKKwlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLAorCQkJCXN0YXJ0LCBsZW4sIGZsYWdzLAorCQkJCXBhZ2VzLCB2bWFzKTsKK30KKwogRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlcyk7CiAKIHB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLApAQCAtMTI5NiwxOCArMTMyMywxNCBAQAogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwogCi0JcmV0dmFsID0gbWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0OwotCiAJcmV0dmFsID0gLUVJTlZBTDsKIAlpZiAoUGFnZUFub24ocGFnZSkpCi0JCWdvdG8gb3V0X3VuY2hhcmdlOworCQlnb3RvIG91dDsKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCXB0ZSA9IGdldF9sb2NrZWRfcHRlKG1tLCBhZGRyLCAmcHRsKTsKIAlpZiAoIXB0ZSkKLQkJZ290byBvdXRfdW5jaGFyZ2U7CisJCWdvdG8gb3V0OwogCXJldHZhbCA9IC1FQlVTWTsKIAlpZiAoIXB0ZV9ub25lKCpwdGUpKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMzIzLDggKzEzNDYsNiBAQAogCXJldHVybiByZXR2YWw7CiBvdXRfdW5sb2NrOgogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwotb3V0X3VuY2hhcmdlOgotCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTg1OCw2ICsxODc5LDE1IEBACiAJbmV3X3BhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVJfTU9WQUJMRSwgdm1hLCBhZGRyZXNzKTsKIAlpZiAoIW5ld19wYWdlKQogCQlnb3RvIG9vbTsKKwkvKgorCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAorCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KKwkgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQlsb2NrX3BhZ2Uob2xkX3BhZ2UpOwkvKiBmb3IgTFJVIG1hbmlwdWxhdGlvbiAqLworCQljbGVhcl9wYWdlX21sb2NrKG9sZF9wYWdlKTsKKwkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOworCX0KIAljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKIAlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CiAKQEAgLTE4ODYsMTEgKzE5MTYsMTMgQEAKIAkJICogdGhyZWFkIGRvaW5nIENPVy4KIAkJICovCiAJCXB0ZXBfY2xlYXJfZmx1c2hfbm90aWZ5KHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7Ci0JCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKLQkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKLQkJbHJ1X2NhY2hlX2FkZF9hY3RpdmUobmV3X3BhZ2UpOworCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7CisJCWxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKG5ld19wYWdlLCB2bWEpOwogCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKG5ld19wYWdlLCB2bWEsIGFkZHJlc3MpOwogCisvL1RPRE86ICBpcyB0aGlzIHNhZmU/ICBkb19hbm9ueW1vdXNfcGFnZSgpIGRvZXMgaXQgdGhpcyB3YXkuCisJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKKwkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgogCQkJICogT25seSBhZnRlciBzd2l0Y2hpbmcgdGhlIHB0ZSB0byB0aGUgbmV3IHBhZ2UgbWF5CkBAIC0yMjg4LDE2ICsyMzIwLDE3IEBACiAJCWNvdW50X3ZtX2V2ZW50KFBHTUFKRkFVTFQpOwogCX0KIAotCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKLQkJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX1NXQVBJTik7Ci0JCXJldCA9IFZNX0ZBVUxUX09PTTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOworCiAJbG9ja19wYWdlKHBhZ2UpOwogCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwogCisJaWYgKG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlnb3RvIG91dDsKKwl9CisKIAkvKgogCSAqIEJhY2sgb3V0IGlmIHNvbWVib2R5IGVsc2UgYWxyZWFkeSBmYXVsdGVkIGluIHRoaXMgcHRlLgogCSAqLwpAQCAtMjMyNCw3ICsyMzU3LDcgQEAKIAlwYWdlX2FkZF9hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIAogCXN3YXBfZnJlZShlbnRyeSk7Ci0JaWYgKHZtX3N3YXBfZnVsbCgpKQorCWlmICh2bV9zd2FwX2Z1bGwoKSB8fCAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgfHwgUGFnZU1sb2NrZWQocGFnZSkpCiAJCXJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCkBAIC0yMzgyLDcgKzI0MTUsOCBAQAogCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQlnb3RvIHJlbGVhc2U7CiAJaW5jX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKLQlscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKKwlTZXRQYWdlU3dhcEJhY2tlZChwYWdlKTsKKwlscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShwYWdlLCB2bWEpOwogCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKQEAgLTI0MjMsNiArMjQ1Nyw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcHRlX3QgZW50cnk7CiAJaW50IGFub24gPSAwOworCWludCBjaGFyZ2VkID0gMDsKIAlzdHJ1Y3QgcGFnZSAqZGlydHlfcGFnZSA9IE5VTEw7CiAJc3RydWN0IHZtX2ZhdWx0IHZtZjsKIAlpbnQgcmV0OwpAQCAtMjQ2Myw2ICsyNDk4LDE4IEBACiAJCQkJcmV0ID0gVk1fRkFVTFRfT09NOwogCQkJCWdvdG8gb3V0OwogCQkJfQorCQkJaWYgKG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkgeworCQkJCXJldCA9IFZNX0ZBVUxUX09PTTsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQljaGFyZ2VkID0gMTsKKwkJCS8qCisJCQkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkJCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KKwkJCSAqLworCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCisJCQkJY2xlYXJfcGFnZV9tbG9jayh2bWYucGFnZSk7CiAJCQljb3B5X3VzZXJfaGlnaHBhZ2UocGFnZSwgdm1mLnBhZ2UsIGFkZHJlc3MsIHZtYSk7CiAJCQlfX1NldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJfSBlbHNlIHsKQEAgLTI0OTcsMTEgKzI1NDQsNiBAQAogCiAJfQogCi0JaWYgKG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkgewotCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCWdvdG8gb3V0OwotCX0KLQogCXBhZ2VfdGFibGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCiAJLyoKQEAgLTI1MjAsMTEgKzI1NjIsMTEgQEAKIAkJZW50cnkgPSBta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpOwogCQlpZiAoZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKQogCQkJZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKLQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCQlpZiAoYW5vbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5jX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxydV9jYWNoZV9hZGRfYWN0aXZlKHBhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9hZGRfbmV3X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOworCQkJaW5jX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKKwkJCVNldFBhZ2VTd2FwQmFja2VkKHBhZ2UpOworCQkJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfb3JfdW5ldmljdGFibGUocGFnZSwgdm1hKTsKKwkJCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIAkJfSBlbHNlIHsKIAkJCWluY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CiAJCQlwYWdlX2FkZF9maWxlX3JtYXAocGFnZSk7CkBAIC0yNTMzLDExICsyNTc1LDE0IEBACiAJCQkJZ2V0X3BhZ2UoZGlydHlfcGFnZSk7CiAJCQl9CiAJCX0KKy8vVE9ETzogIGlzIHRoaXMgc2FmZT8gIGRvX2Fub255bW91c19wYWdlKCkgZG9lcyBpdCB0aGlzIHdheS4KKwkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCiAJCS8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqLwogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOwogCX0gZWxzZSB7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKKwkJaWYgKGNoYXJnZWQpCisJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiAJCWlmIChhbm9uKQogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQllbHNlCkBAIC0yNzcyLDE5ICsyODE3LDkgQEAKIAlsZW4gPSBESVZfUk9VTkRfVVAoZW5kLCBQQUdFX1NJWkUpIC0gYWRkci9QQUdFX1NJWkU7CiAJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsCiAJCQlsZW4sIHdyaXRlLCAwLCBOVUxMLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQkvKgotCQkgICBTVVMgcmVxdWlyZSBzdHJhbmdlIHJldHVybiB2YWx1ZSB0byBtbG9jawotCQkgICAgLSBpbnZhbGlkIGFkZHIgZ2VuZXJhdGUgdG8gRU5PTUVNLgotCQkgICAgLSBvdXQgb2YgbWVtb3J5IHNob3VsZCBnZW5lcmF0ZSBFQUdBSU4uCi0JCSovCi0JCWlmIChyZXQgPT0gLUVGQVVMVCkKLQkJCXJldCA9IC1FTk9NRU07Ci0JCWVsc2UgaWYgKHJldCA9PSAtRU5PTUVNKQotCQkJcmV0ID0gLUVBR0FJTjsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIHJldCA9PSBsZW4gPyAwIDogLUVOT01FTTsKKwlyZXR1cm4gcmV0ID09IGxlbiA/IDAgOiAtRUZBVUxUOwogfQogCiAjaWYgIWRlZmluZWQoX19IQVZFX0FSQ0hfR0FURV9BUkVBKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggODlmZWUyZC4uNjgzN2ExMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCkBAIC0zMjMsMTEgKzMyNCwxMSBAQAogCUJVR19PTihwaHlzX3N0YXJ0X3BmbiAmIH5QQUdFX1NFQ1RJT05fTUFTSyk7CiAJQlVHX09OKG5yX3BhZ2VzICUgUEFHRVNfUEVSX1NFQ1RJT04pOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKHBoeXNfc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsIG5yX3BhZ2VzICogUEFHRV9TSVpFKTsKLQogCXNlY3Rpb25zX3RvX3JlbW92ZSA9IG5yX3BhZ2VzIC8gUEFHRVNfUEVSX1NFQ1RJT047CiAJZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zX3RvX3JlbW92ZTsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcGh5c19zdGFydF9wZm4gKyBpKlBBR0VTX1BFUl9TRUNUSU9OOworCQlyZWxlYXNlX21lbV9yZWdpb24ocGZuIDw8IFBBR0VfU0hJRlQsCisJCQkJICAgUEFHRVNfUEVSX1NFQ1RJT04gPDwgUEFHRV9TSElGVCk7CiAJCXJldCA9IF9fcmVtb3ZlX3NlY3Rpb24oem9uZSwgX19wZm5fdG9fc2VjdGlvbihwZm4pKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpAQCAtNjU3LDggKzY1OCw5IEBACiAJCSAqIFdlIGNhbiBza2lwIGZyZWUgcGFnZXMuIEFuZCB3ZSBjYW4gb25seSBkZWFsIHdpdGggcGFnZXMgb24KIAkJICogTFJVLgogCQkgKi8KLQkJcmV0ID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlLCAmc291cmNlKTsKKwkJcmV0ID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlKTsKIAkJaWYgKCFyZXQpIHsgLyogU3VjY2VzcyAqLworCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmc291cmNlKTsKIAkJCW1vdmVfcGFnZXMtLTsKIAkJfSBlbHNlIHsKIAkJCS8qIEJlY2FzdWUgd2UgZG9uJ3QgaGF2ZSBiaWcgem9uZS0+bG9jay4gd2Ugc2hvdWxkCkBAIC04NDksMTAgKzg1MSwxOSBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKworCXN0YXJ0X3BmbiA9IFBGTl9ET1dOKHN0YXJ0KTsKKwllbmRfcGZuID0gc3RhcnRfcGZuICsgUEZOX0RPV04oc2l6ZSk7CisJcmV0dXJuIG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBlbmRfcGZuLCAxMjAgKiBIWik7Cit9CiAjZWxzZQogaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCitFWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggODMzNjkwNS4uMzZmNDI1NyAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTkzLDYgKzkzLDggQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogLyogSW50ZXJuYWwgZmxhZ3MgKi8KICNkZWZpbmUgTVBPTF9NRl9ESVNDT05USUdfT0sgKE1QT0xfTUZfSU5URVJOQUwgPDwgMCkJLyogU2tpcCBjaGVja3MgZm9yIGNvbnRpbnVvdXMgdm1hcyAqLwogI2RlZmluZSBNUE9MX01GX0lOVkVSVCAoTVBPTF9NRl9JTlRFUk5BTCA8PCAxKQkJLyogSW52ZXJ0IGNoZWNrIGZvciBub2RlbWFzayAqLwpAQCAtNzYyLDggKzc2NCwxMSBAQAogCS8qCiAJICogQXZvaWQgbWlncmF0aW5nIGEgcGFnZSB0aGF0IGlzIHNoYXJlZCB3aXRoIG90aGVycy4KIAkgKi8KLQlpZiAoKGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCkgfHwgcGFnZV9tYXBjb3VudChwYWdlKSA9PSAxKQotCQlpc29sYXRlX2xydV9wYWdlKHBhZ2UsIHBhZ2VsaXN0KTsKKwlpZiAoKGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCkgfHwgcGFnZV9tYXBjb3VudChwYWdlKSA9PSAxKSB7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCBwYWdlbGlzdCk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbmV3X25vZGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBub2RlLCBpbnQgKip4KQpAQCAtMjE5Nyw3ICsyMjAyLDcgQEAKIAlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKIAkJbWQtPnN3YXBjYWNoZSsrOwogCi0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJaWYgKFBhZ2VBY3RpdmUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQogCQltZC0+YWN0aXZlKys7CiAKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAyYTgwMTM2Li42NjAyOTQxIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC0zNywzNiArMzcsNiBAQAogI2RlZmluZSBscnVfdG9fcGFnZShfaGVhZCkgKGxpc3RfZW50cnkoKF9oZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCiAKIC8qCi0gKiBJc29sYXRlIG9uZSBwYWdlIGZyb20gdGhlIExSVSBsaXN0cy4gSWYgc3VjY2Vzc2Z1bCBwdXQgaXQgb250bwotICogdGhlIGluZGljYXRlZCBsaXN0IHdpdGggZWxldmF0ZWQgcGFnZSBjb3VudC4KLSAqCi0gKiBSZXN1bHQ6Ci0gKiAgLUVCVVNZOiBwYWdlIG5vdCBvbiBMUlUgbGlzdAotICogIDA6IHBhZ2UgcmVtb3ZlZCBmcm9tIExSVSBsaXN0IGFuZCBhZGRlZCB0byB0aGUgc3BlY2lmaWVkIGxpc3QuCi0gKi8KLWludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCkKLXsKLQlpbnQgcmV0ID0gLUVCVVNZOwotCi0JaWYgKFBhZ2VMUlUocGFnZSkpIHsKLQkJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQlpZiAoUGFnZUxSVShwYWdlKSAmJiBnZXRfcGFnZV91bmxlc3NfemVybyhwYWdlKSkgewotCQkJcmV0ID0gMDsKLQkJCUNsZWFyUGFnZUxSVShwYWdlKTsKLQkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQotCQkJCWRlbF9wYWdlX2Zyb21fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JCQllbHNlCi0JCQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCBwYWdlbGlzdCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiBtaWdyYXRlX3ByZXAoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHdlIHN0YXJ0IGNvbXBpbGluZyBhIGxpc3Qgb2YgcGFnZXMKICAqIHRvIGJlIG1pZ3JhdGVkIHVzaW5nIGlzb2xhdGVfbHJ1X3BhZ2UoKS4KICAqLwpAQCAtODMsMjMgKzUzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1vdmVfdG9fbHJ1KHN0cnVjdCBwYWdlICpwYWdlKQotewotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCS8qCi0JCSAqIGxydV9jYWNoZV9hZGRfYWN0aXZlIGNoZWNrcyB0aGF0Ci0JCSAqIHRoZSBQR19hY3RpdmUgYml0IGlzIG9mZi4KLQkJICovCi0JCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQkJbHJ1X2NhY2hlX2FkZF9hY3RpdmUocGFnZSk7Ci0JfSBlbHNlIHsKLQkJbHJ1X2NhY2hlX2FkZChwYWdlKTsKLQl9Ci0JcHV0X3BhZ2UocGFnZSk7Ci19Ci0KIC8qCi0gKiBBZGQgaXNvbGF0ZWQgcGFnZXMgb24gdGhlIGxpc3QgYmFjayB0byB0aGUgTFJVLgorICogQWRkIGlzb2xhdGVkIHBhZ2VzIG9uIHRoZSBsaXN0IGJhY2sgdG8gdGhlIExSVSB1bmRlciBwYWdlIGxvY2sKKyAqIHRvIGF2b2lkIGxlYWtpbmcgZXZpY3RhYmxlIHBhZ2VzIGJhY2sgb250byB1bmV2aWN0YWJsZSBsaXN0LgogICoKICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyBwdXQgYmFjay4KICAqLwpAQCAtMTExLDcgKzY3LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgbCwgbHJ1KSB7CiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCQltb3ZlX3RvX2xydShwYWdlKTsKKwkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAkJY291bnQrKzsKIAl9CiAJcmV0dXJuIGNvdW50OwpAQCAtMzc0LDggKzMzMCw2IEBACiAJX19pbmNfem9uZV9wYWdlX3N0YXRlKG5ld3BhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCWlmICghUGFnZVN3YXBDYWNoZShuZXdwYWdlKSkKLQkJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODUsNiArMzM5LDggQEAKICAqLwogc3RhdGljIHZvaWQgbWlncmF0ZV9wYWdlX2NvcHkoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQogeworCWludCBhbm9uOworCiAJY29weV9oaWdocGFnZShuZXdwYWdlLCBwYWdlKTsKIAogCWlmIChQYWdlRXJyb3IocGFnZSkpCkBAIC0zOTMsOCArMzQ5LDExIEBACiAJCVNldFBhZ2VSZWZlcmVuY2VkKG5ld3BhZ2UpOwogCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCiAJCVNldFBhZ2VVcHRvZGF0ZShuZXdwYWdlKTsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKKwlpZiAoVGVzdENsZWFyUGFnZUFjdGl2ZShwYWdlKSkgeworCQlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKIAkJU2V0UGFnZUFjdGl2ZShuZXdwYWdlKTsKKwl9IGVsc2UKKwkJdW5ldmljdGFibGVfbWlncmF0ZV9wYWdlKG5ld3BhZ2UsIHBhZ2UpOwogCWlmIChQYWdlQ2hlY2tlZChwYWdlKSkKIAkJU2V0UGFnZUNoZWNrZWQobmV3cGFnZSk7CiAJaWYgKFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkpCkBAIC00MTIsMTQgKzM3MSwyMCBAQAogCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhuZXdwYWdlKTsKICAJfQogCisJbWxvY2tfbWlncmF0ZV9wYWdlKG5ld3BhZ2UsIHBhZ2UpOworCiAjaWZkZWYgQ09ORklHX1NXQVAKIAlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7CiAjZW5kaWYKLQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOworCS8qIHBhZ2UtPm1hcHBpbmcgY29udGFpbnMgYSBmbGFnIGZvciBQYWdlQW5vbigpICovCisJYW5vbiA9IFBhZ2VBbm9uKHBhZ2UpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCisJaWYgKCFhbm9uKSAvKiBUaGlzIHBhZ2Ugd2FzIHJlbW92ZWQgZnJvbSByYWRpeC10cmVlLiAqLworCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisKIAkvKgogCSAqIElmIGFueSB3YWl0ZXJzIGhhdmUgYWNjdW11bGF0ZWQgb24gdGhlIG5ldyBwYWdlIHRoZW4KIAkgKiB3YWtlIHRoZW0gdXAuCkBAIC01OTQsNiArNTU5LDEwIEBACiAgKgogICogVGhlIG5ldyBwYWdlIHdpbGwgaGF2ZSByZXBsYWNlZCB0aGUgb2xkIHBhZ2UgaWYgdGhpcyBmdW5jdGlvbgogICogaXMgc3VjY2Vzc2Z1bC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgIDwgMCAtIGVycm9yIGNvZGUKKyAqICA9PSAwIC0gc3VjY2VzcwogICovCiBzdGF0aWMgaW50IG1vdmVfdG9fbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNjExLDYgKzU4MCw4IEBACiAJLyogUHJlcGFyZSBtYXBwaW5nIGZvciB0aGUgbmV3IHBhZ2UuKi8KIAluZXdwYWdlLT5pbmRleCA9IHBhZ2UtPmluZGV4OwogCW5ld3BhZ2UtPm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJU2V0UGFnZVN3YXBCYWNrZWQobmV3cGFnZSk7CiAKIAltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCWlmICghbWFwcGluZykKQEAgLTY1NCw5ICs2MjUsMTAgQEAKIAlpZiAoIW5ld3BhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSkKKwlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKSB7CiAJCS8qIHBhZ2Ugd2FzIGZyZWVkIGZyb20gdW5kZXIgdXMuIFNvIHdlIGFyZSBkb25lLiAqLwogCQlnb3RvIG1vdmVfbmV3cGFnZTsKKwl9CiAKIAljaGFyZ2UgPSBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uKHBhZ2UsIG5ld3BhZ2UpOwogCWlmIChjaGFyZ2UgPT0gLUVOT01FTSkgewpAQCAtNzMwLDcgKzcwMiw2IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCiB1bmxvY2s6Ci0KIAl1bmxvY2tfcGFnZShwYWdlKTsKIAogCWlmIChyYyAhPSAtRUFHQUlOKSB7CkBAIC03NDEsMTcgKzcxMiwxOSBAQAogIAkJICogcmVzdG9yZWQuCiAgCQkgKi8KICAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotIAkJbW92ZV90b19scnUocGFnZSk7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiAJfQogCiBtb3ZlX25ld3BhZ2U6CiAJaWYgKCFjaGFyZ2UpCiAJCW1lbV9jZ3JvdXBfZW5kX21pZ3JhdGlvbihuZXdwYWdlKTsKKwogCS8qCiAJICogTW92ZSB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVS4gSWYgbWlncmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bAogCSAqIHRoZW4gdGhpcyB3aWxsIGZyZWUgdGhlIHBhZ2UuCiAJICovCi0JbW92ZV90b19scnUobmV3cGFnZSk7CisJcHV0YmFja19scnVfcGFnZShuZXdwYWdlKTsKKwogCWlmIChyZXN1bHQpIHsKIAkJaWYgKHJjKQogCQkJKnJlc3VsdCA9IHJjOwpAQCAtODU4LDkgKzgzMSwxMSBAQAogICogTW92ZSBhIHNldCBvZiBwYWdlcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIHBtIGFycmF5LiBUaGUgYWRkcgogICogZmllbGQgbXVzdCBiZSBzZXQgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcGFnZSB0byBiZSBtb3ZlZAogICogYW5kIHRoZSBub2RlIG51bWJlciBtdXN0IGNvbnRhaW4gYSB2YWxpZCB0YXJnZXQgbm9kZS4KKyAqIFRoZSBwbSBhcnJheSBlbmRzIHdpdGggbm9kZSA9IE1BWF9OVU1OT0RFUy4KICAqLwotc3RhdGljIGludCBkb19tb3ZlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSwKLQkJCQlpbnQgbWlncmF0ZV9hbGwpCitzdGF0aWMgaW50IGRvX21vdmVfcGFnZV90b19ub2RlX2FycmF5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgIHN0cnVjdCBwYWdlX3RvX25vZGUgKnBtLAorCQkJCSAgICAgIGludCBtaWdyYXRlX2FsbCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBwYWdlX3RvX25vZGUgKnBwOwpAQCAtOTE0LDcgKzg4OSw5IEBACiAJCQkJIW1pZ3JhdGVfYWxsKQogCQkJZ290byBwdXRfYW5kX3NldDsKIAotCQllcnIgPSBpc29sYXRlX2xydV9wYWdlKHBhZ2UsICZwYWdlbGlzdCk7CisJCWVyciA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSk7CisJCWlmICghZXJyKQorCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGFnZWxpc3QpOwogcHV0X2FuZF9zZXQ6CiAJCS8qCiAJCSAqIEVpdGhlciByZW1vdmUgdGhlIGR1cGxpY2F0ZSByZWZjb3VudCBmcm9tCkBAIC05MjYsMzYgKzkwMywxMTggQEAKIAkJcHAtPnN0YXR1cyA9IGVycjsKIAl9CiAKKwllcnIgPSAwOwogCWlmICghbGlzdF9lbXB0eSgmcGFnZWxpc3QpKQogCQllcnIgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2Vfbm9kZSwKIAkJCQkodW5zaWduZWQgbG9uZylwbSk7Ci0JZWxzZQotCQllcnIgPSAtRU5PRU5UOwogCiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKgotICogRGV0ZXJtaW5lIHRoZSBub2RlcyBvZiBhIGxpc3Qgb2YgcGFnZXMuIFRoZSBhZGRyIGluIHRoZSBwbSBhcnJheQotICogbXVzdCBoYXZlIGJlZW4gc2V0IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2Ygd2hpY2ggd2Ugd2FudCB0byBkZXRlcm1pbmUKLSAqIHRoZSBub2RlIG51bWJlci4KKyAqIE1pZ3JhdGUgYW4gYXJyYXkgb2YgcGFnZSBhZGRyZXNzIG9udG8gYW4gYXJyYXkgb2Ygbm9kZXMgYW5kIGZpbGwKKyAqIHRoZSBjb3JyZXNwb25kaW5nIGFycmF5IG9mIHN0YXR1cy4KICAqLwotc3RhdGljIGludCBkb19wYWdlc19zdGF0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSkKK3N0YXRpYyBpbnQgZG9fcGFnZXNfbW92ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkgY29uc3Qgdm9pZCBfX3VzZXIgKiBfX3VzZXIgKnBhZ2VzLAorCQkJIGNvbnN0IGludCBfX3VzZXIgKm5vZGVzLAorCQkJIGludCBfX3VzZXIgKnN0YXR1cywgaW50IGZsYWdzKQogewotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlzdHJ1Y3QgcGFnZV90b19ub2RlICpwbSA9IE5VTEw7CisJbm9kZW1hc2tfdCB0YXNrX25vZGVzOworCWludCBlcnIgPSAwOworCWludCBpOwogCi0JZm9yICggOyBwbS0+bm9kZSAhPSBNQVhfTlVNTk9ERVM7IHBtKyspIHsKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlpbnQgZXJyOworCXRhc2tfbm9kZXMgPSBjcHVzZXRfbWVtc19hbGxvd2VkKHRhc2spOworCisJLyogTGltaXQgbnJfcGFnZXMgc28gdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gbWF5IG5vdCBvdmVyZmxvdyAqLworCWlmIChucl9wYWdlcyA+PSBVTE9OR19NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkgLSAxKSB7CisJCWVyciA9IC1FMkJJRzsKKwkJZ290byBvdXQ7CisJfQorCisJcG0gPSB2bWFsbG9jKChucl9wYWdlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpKTsKKwlpZiAoIXBtKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogR2V0IHBhcmFtZXRlcnMgZnJvbSB1c2VyIHNwYWNlIGFuZCBpbml0aWFsaXplIHRoZSBwbQorCSAqIGFycmF5LiBSZXR1cm4gdmFyaW91cyBlcnJvcnMgaWYgdGhlIHVzZXIgZGlkIHNvbWV0aGluZyB3cm9uZy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQljb25zdCB2b2lkIF9fdXNlciAqcDsKIAogCQllcnIgPSAtRUZBVUxUOwotCQl2bWEgPSBmaW5kX3ZtYShtbSwgcG0tPmFkZHIpOworCQlpZiAoZ2V0X3VzZXIocCwgcGFnZXMgKyBpKSkKKwkJCWdvdG8gb3V0X3BtOworCisJCXBtW2ldLmFkZHIgPSAodW5zaWduZWQgbG9uZylwOworCQlpZiAobm9kZXMpIHsKKwkJCWludCBub2RlOworCisJCQlpZiAoZ2V0X3VzZXIobm9kZSwgbm9kZXMgKyBpKSkKKwkJCQlnb3RvIG91dF9wbTsKKworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWlmICghbm9kZV9zdGF0ZShub2RlLCBOX0hJR0hfTUVNT1JZKSkKKwkJCQlnb3RvIG91dF9wbTsKKworCQkJZXJyID0gLUVBQ0NFUzsKKwkJCWlmICghbm9kZV9pc3NldChub2RlLCB0YXNrX25vZGVzKSkKKwkJCQlnb3RvIG91dF9wbTsKKworCQkJcG1baV0ubm9kZSA9IG5vZGU7CisJCX0gZWxzZQorCQkJcG1baV0ubm9kZSA9IDA7CS8qIGFueXRoaW5nIHRvIG5vdCBtYXRjaCBNQVhfTlVNTk9ERVMgKi8KKwl9CisJLyogRW5kIG1hcmtlciAqLworCXBtW25yX3BhZ2VzXS5ub2RlID0gTUFYX05VTU5PREVTOworCisJZXJyID0gZG9fbW92ZV9wYWdlX3RvX25vZGVfYXJyYXkobW0sIHBtLCBmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpOworCWlmIChlcnIgPj0gMCkKKwkJLyogUmV0dXJuIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKKwkJCWlmIChwdXRfdXNlcihwbVtpXS5zdGF0dXMsIHN0YXR1cyArIGkpKQorCQkJCWVyciA9IC1FRkFVTFQ7CisKK291dF9wbToKKwl2ZnJlZShwbSk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIERldGVybWluZSB0aGUgbm9kZXMgb2YgYW4gYXJyYXkgb2YgcGFnZXMgYW5kIHN0b3JlIGl0IGluIGFuIGFycmF5IG9mIHN0YXR1cy4KKyAqLworc3RhdGljIGludCBkb19wYWdlc19zdGF0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJIGNvbnN0IHZvaWQgX191c2VyICogX191c2VyICpwYWdlcywKKwkJCSBpbnQgX191c2VyICpzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCWludCBlcnI7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQljb25zdCB2b2lkIF9fdXNlciAqcDsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJZXJyID0gLUVGQVVMVDsKKwkJaWYgKGdldF91c2VyKHAsIHBhZ2VzK2kpKQorCQkJZ290byBvdXQ7CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcDsKKworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmICghdm1hKQogCQkJZ290byBzZXRfc3RhdHVzOwogCi0JCXBhZ2UgPSBmb2xsb3dfcGFnZSh2bWEsIHBtLT5hZGRyLCAwKTsKKwkJcGFnZSA9IGZvbGxvd19wYWdlKHZtYSwgYWRkciwgMCk7CiAKIAkJZXJyID0gUFRSX0VSUihwYWdlKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKQEAgLTk2OCwxMSArMTAyNywxMyBAQAogCiAJCWVyciA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwogc2V0X3N0YXR1czoKLQkJcG0tPnN0YXR1cyA9IGVycjsKKwkJcHV0X3VzZXIoZXJyLCBzdGF0dXMraSk7CiAJfQorCWVyciA9IDA7CiAKK291dDoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC05ODQsMTIgKzEwNDUsOSBAQAogCQkJY29uc3QgaW50IF9fdXNlciAqbm9kZXMsCiAJCQlpbnQgX191c2VyICpzdGF0dXMsIGludCBmbGFncykKIHsKLQlpbnQgZXJyID0gMDsKLQlpbnQgaTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jbm9kZW1hc2tfdCB0YXNrX25vZGVzOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCBwYWdlX3RvX25vZGUgKnBtID0gTlVMTDsKKwlpbnQgZXJyOwogCiAJLyogQ2hlY2sgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiB+KE1QT0xfTUZfTU9WRXxNUE9MX01GX01PVkVfQUxMKSkKQEAgLTEwMjEsNzUgKzEwNzksMjEgQEAKIAkgICAgKGN1cnJlbnQtPnVpZCAhPSB0YXNrLT5zdWlkKSAmJiAoY3VycmVudC0+dWlkICE9IHRhc2stPnVpZCkgJiYKIAkgICAgIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkgewogCQllcnIgPSAtRVBFUk07Ci0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQ7CiAJfQogCiAgCWVyciA9IHNlY3VyaXR5X3Rhc2tfbW92ZW1lbW9yeSh0YXNrKTsKICAJaWYgKGVycikKLSAJCWdvdG8gb3V0MjsKKwkJZ290byBvdXQ7CiAKLQotCXRhc2tfbm9kZXMgPSBjcHVzZXRfbWVtc19hbGxvd2VkKHRhc2spOwotCi0JLyogTGltaXQgbnJfcGFnZXMgc28gdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gbWF5IG5vdCBvdmVyZmxvdyAqLwotCWlmIChucl9wYWdlcyA+PSBVTE9OR19NQVggLyBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkgLSAxKSB7Ci0JCWVyciA9IC1FMkJJRzsKLQkJZ290byBvdXQyOworCWlmIChub2RlcykgeworCQllcnIgPSBkb19wYWdlc19tb3ZlKG1tLCB0YXNrLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCBzdGF0dXMsCisJCQkJICAgIGZsYWdzKTsKKwl9IGVsc2UgeworCQllcnIgPSBkb19wYWdlc19zdGF0KG1tLCBucl9wYWdlcywgcGFnZXMsIHN0YXR1cyk7CiAJfQogCi0JcG0gPSB2bWFsbG9jKChucl9wYWdlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBwYWdlX3RvX25vZGUpKTsKLQlpZiAoIXBtKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0MjsKLQl9Ci0KLQkvKgotCSAqIEdldCBwYXJhbWV0ZXJzIGZyb20gdXNlciBzcGFjZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcG0KLQkgKiBhcnJheS4gUmV0dXJuIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSB1c2VyIGRpZCBzb21ldGhpbmcgd3JvbmcuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJY29uc3Qgdm9pZCBfX3VzZXIgKnA7Ci0KLQkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHAsIHBhZ2VzICsgaSkpCi0JCQlnb3RvIG91dDsKLQotCQlwbVtpXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKLQkJaWYgKG5vZGVzKSB7Ci0JCQlpbnQgbm9kZTsKLQotCQkJaWYgKGdldF91c2VyKG5vZGUsIG5vZGVzICsgaSkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlpZiAoIW5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCWVyciA9IC1FQUNDRVM7Ci0JCQlpZiAoIW5vZGVfaXNzZXQobm9kZSwgdGFza19ub2RlcykpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXBtW2ldLm5vZGUgPSBub2RlOwotCQl9IGVsc2UKLQkJCXBtW2ldLm5vZGUgPSAwOwkvKiBhbnl0aGluZyB0byBub3QgbWF0Y2ggTUFYX05VTU5PREVTICovCi0JfQotCS8qIEVuZCBtYXJrZXIgKi8KLQlwbVtucl9wYWdlc10ubm9kZSA9IE1BWF9OVU1OT0RFUzsKLQotCWlmIChub2RlcykKLQkJZXJyID0gZG9fbW92ZV9wYWdlcyhtbSwgcG0sIGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCk7Ci0JZWxzZQotCQllcnIgPSBkb19wYWdlc19zdGF0KG1tLCBwbSk7Ci0KLQlpZiAoZXJyID49IDApCi0JCS8qIFJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KLQkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCi0JCQlpZiAocHV0X3VzZXIocG1baV0uc3RhdHVzLCBzdGF0dXMgKyBpKSkKLQkJCQllcnIgPSAtRUZBVUxUOwotCiBvdXQ6Ci0JdmZyZWUocG0pOwotb3V0MjoKIAltbXB1dChtbSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jCmluZGV4IDAxZmJlOTMuLjAwOGVhNzAgMTAwNjQ0Ci0tLSBhL21tL21sb2NrLmMKKysrIGIvbW0vbWxvY2suYwpAQCAtOCwxMCArOCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcm1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBjYW5fZG9fbWxvY2sodm9pZCkKIHsKQEAgLTIzLDE3ICszMSwzODEgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2FuX2RvX21sb2NrKTsKIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBNbG9ja2VkIHBhZ2VzIGFyZSBtYXJrZWQgd2l0aCBQYWdlTWxvY2tlZCgpIGZsYWcgZm9yIGVmZmljaWVudCB0ZXN0aW5nCisgKiBpbiB2bXNjYW4gYW5kLCBwb3NzaWJseSwgdGhlIGZhdWx0IHBhdGg7IGFuZCB0byBzdXBwb3J0IHNlbWktYWNjdXJhdGUKKyAqIHN0YXRpc3RpY3MuCisgKgorICogQW4gbWxvY2tlZCBwYWdlIFtQYWdlTWxvY2tlZChwYWdlKV0gaXMgdW5ldmljdGFibGUuICBBcyBzdWNoLCBpdCB3aWxsCisgKiBiZSBwbGFjZWQgb24gdGhlIExSVSAidW5ldmljdGFibGUiIGxpc3QsIHJhdGhlciB0aGFuIHRoZSBbaW5dYWN0aXZlIGxpc3RzLgorICogVGhlIHVuZXZpY3RhYmxlIGxpc3QgaXMgYW4gTFJVIHNpYmxpbmcgbGlzdCB0byB0aGUgW2luXWFjdGl2ZSBsaXN0cy4KKyAqIFBhZ2VVbmV2aWN0YWJsZSBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlIHVuZXZpY3RhYmxlIHN0YXRlLgorICoKKyAqIFdoZW4gbGF6eSBtbG9ja2luZyB2aWEgdm1zY2FuLCBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhlCisgKiB2bWEncyBWTV9MT0NLRUQgc3RhdHVzIGlzIG5vdCBjb25jdXJyZW50bHkgYmVpbmcgbW9kaWZpZWQsIG90aGVyd2lzZSB3ZQorICogbWF5IGhhdmUgbWxvY2tlZCBhIHBhZ2UgdGhhdCBpcyBiZWluZyBtdW5sb2NrZWQuIFNvIGxhenkgbWxvY2sgbXVzdCB0YWtlCisgKiB0aGUgbW1hcF9zZW0gZm9yIHJlYWQsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgdm1hIHJlYWxseSBpcyBsb2NrZWQKKyAqIChzZWUgbW0vcm1hcC5jKS4KKyAqLworCisvKgorICogIExSVSBhY2NvdW50aW5nIGZvciBjbGVhcl9wYWdlX21sb2NrKCkKKyAqLwordm9pZCBfX2NsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCWlmICghcGFnZS0+bWFwcGluZykgewkvKiB0cnVuY2F0ZWQgPyAqLworCQlyZXR1cm47CisJfQorCisJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdDTEVBUkVEKTsKKwlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQYWdlIG5vdCBvbiB0aGUgTFJVIHlldC4gIEZsdXNoIGFsbCBwYWdldmVjcyBhbmQgcmV0cnkuCisJCSAqLworCQlscnVfYWRkX2RyYWluX2FsbCgpOworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCisJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQllbHNlIGlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR1NUUkFOREVEKTsKKworCX0KK30KKworLyoKKyAqIE1hcmsgcGFnZSBhcyBtbG9ja2VkIGlmIG5vdCBhbHJlYWR5LgorICogSWYgcGFnZSBvbiBMUlUsIGlzb2xhdGUgYW5kIHB1dGJhY2sgdG8gbW92ZSB0byB1bmV2aWN0YWJsZSBsaXN0LgorICovCit2b2lkIG1sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAoIVRlc3RTZXRQYWdlTWxvY2tlZChwYWdlKSkgeworCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNTE9DS0VEKTsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKQorCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwl9Cit9CisKKy8qCisgKiBjYWxsZWQgZnJvbSBtdW5sb2NrKCkvbXVubWFwKCkgcGF0aCB3aXRoIHBhZ2Ugc3VwcG9zZWRseSBvbiB0aGUgTFJVLgorICoKKyAqIE5vdGU6ICB1bmxpa2UgbWxvY2tfdm1hX3BhZ2UoKSwgd2UgY2FuJ3QganVzdCBjbGVhciB0aGUgUGFnZU1sb2NrZWQKKyAqIFtpbiB0cnlfdG9fbXVubG9jaygpXSBhbmQgdGhlbiBhdHRlbXB0IHRvIGlzb2xhdGUgdGhlIHBhZ2UuICBXZSBtdXN0CisgKiBpc29sYXRlIHRoZSBwYWdlIHRvIGtlZXAgb3RoZXJzIGZyb20gbWVzc2luZyB3aXRoIGl0cyB1bmV2aWN0YWJsZQorICogYW5kIG1sb2NrZWQgc3RhdGUgd2hpbGUgdHJ5aW5nIHRvIG11bmxvY2suICBIb3dldmVyLCB3ZSBwcmUtY2xlYXIgdGhlCisgKiBtbG9ja2VkIHN0YXRlIGFueXdheSBhcyB3ZSBtaWdodCBsb3NlIHRoZSBpc29sYXRpb24gcmFjZSBhbmQgd2UgbWlnaHQKKyAqIG5vdCBnZXQgYW5vdGhlciBjaGFuY2UgdG8gY2xlYXIgUGFnZU1sb2NrZWQuICBJZiB3ZSBzdWNjZXNzZnVsbHkKKyAqIGlzb2xhdGUgdGhlIHBhZ2UgYW5kIHRyeV90b19tdW5sb2NrKCkgZGV0ZWN0cyBvdGhlciBWTV9MT0NLRUQgdm1hcworICogbWFwcGluZyB0aGUgcGFnZSwgaXQgd2lsbCByZXN0b3JlIHRoZSBQYWdlTWxvY2tlZCBzdGF0ZSwgdW5sZXNzIHRoZSBwYWdlCisgKiBpcyBtYXBwZWQgaW4gYSBub24tbGluZWFyIHZtYS4gIFNvLCB3ZSBnbyBhaGVhZCBhbmQgU2V0UGFnZU1sb2NrZWQoKSwKKyAqIHBlcmhhcHMgcmVkdW5kYW50bHkuCisgKiBJZiB3ZSBsb3NlIHRoZSBpc29sYXRpb24gcmFjZSwgYW5kIHRoZSBwYWdlIGlzIG1hcHBlZCBieSBvdGhlciBWTV9MT0NLRUQKKyAqIHZtYXMsIHdlJ2xsIGRldGVjdCB0aGlzIGluIHZtc2Nhbi0tdmlhIHRyeV90b19tdW5sb2NrKCkgb3IgdHJ5X3RvX3VubWFwKCkKKyAqIGVpdGhlciBvZiB3aGljaCB3aWxsIHJlc3RvcmUgdGhlIFBhZ2VNbG9ja2VkIHN0YXRlIGJ5IGNhbGxpbmcKKyAqIG1sb2NrX3ZtYV9wYWdlKCkgYWJvdmUsIGlmIGl0IGNhbiBncmFiIHRoZSB2bWEncyBtbWFwIHNlbS4KKyAqLworc3RhdGljIHZvaWQgbXVubG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJaWYgKFRlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpKSB7CisJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCWludCByZXQgPSB0cnlfdG9fbXVubG9jayhwYWdlKTsKKwkJCS8qCisJCQkgKiBkaWQgdHJ5X3RvX3VubG9jaygpIHN1Y2NlZWQgb3IgcHVudD8KKwkJCSAqLworCQkJaWYgKHJldCA9PSBTV0FQX1NVQ0NFU1MgfHwgcmV0ID09IFNXQVBfQUdBSU4pCisJCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNVU5MT0NLRUQpOworCisJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGxvc3QgdGhlIHJhY2UuICBsZXQgdHJ5X3RvX3VubWFwKCkgZGVhbAorCQkJICogd2l0aCBpdC4gIEF0IGxlYXN0IHdlIGdldCB0aGUgcGFnZSBzdGF0ZSBhbmQKKwkJCSAqIG1sb2NrIHN0YXRzIHJpZ2h0LiAgSG93ZXZlciwgcGFnZSBpcyBzdGlsbCBvbgorCQkJICogdGhlIG5vcmVjbGFpbSBsaXN0LiAgV2UnbGwgZml4IHRoYXQgdXAgd2hlbgorCQkJICogdGhlIHBhZ2UgaXMgZXZlbnR1YWxseSBmcmVlZCBvciB3ZSBzY2FuIHRoZQorCQkJICogbm9yZWNsYWltIGxpc3QuCisJCQkgKi8KKwkJCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdTVFJBTkRFRCk7CisJCQllbHNlCisJCQkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNVU5MT0NLRUQpOworCQl9CisJfQorfQorCisvKioKKyAqIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSAgbWxvY2svbXVubG9jayBhIHJhbmdlIG9mIHBhZ2VzIGluIHRoZSB2bWEuCisgKiBAdm1hOiAgIHRhcmdldCB2bWEKKyAqIEBzdGFydDogc3RhcnQgYWRkcmVzcworICogQGVuZDogICBlbmQgYWRkcmVzcworICogQG1sb2NrOiAwIGluZGljYXRlIG11bmxvY2ssIG90aGVyd2lzZSBtbG9jay4KKyAqCisgKiBJZiBAbWxvY2sgPT0gMCwgdW5sb2NrIGFuIG1sb2NrZWQgcmFuZ2U7CisgKiBlbHNlIG1sb2NrIHRoZSByYW5nZSBvZiBwYWdlcy4gIFRoaXMgdGFrZXMgY2FyZSBvZiBtYWtpbmcgdGhlIHBhZ2VzIHByZXNlbnQgLAorICogdG9vLgorICoKKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZXJyb3IuCisgKgorICogdm1hLT52bV9tbS0+bW1hcF9zZW0gbXVzdCBiZSBoZWxkIGZvciBhdCBsZWFzdCByZWFkLgorICovCitzdGF0aWMgbG9uZyBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICBpbnQgbWxvY2spCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0OworCXN0cnVjdCBwYWdlICpwYWdlc1sxNl07IC8qIDE2IGdpdmVzIGEgcmVhc29uYWJsZSBiYXRjaCAqLworCWludCBucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkU7CisJaW50IHJldDsKKwlpbnQgZ3VwX2ZsYWdzID0gMDsKKworCVZNX0JVR19PTihzdGFydCAmIH5QQUdFX01BU0spOworCVZNX0JVR19PTihlbmQgICAmIH5QQUdFX01BU0spOworCVZNX0JVR19PTihzdGFydCA8IHZtYS0+dm1fc3RhcnQpOworCVZNX0JVR19PTihlbmQgICA+IHZtYS0+dm1fZW5kKTsKKwlWTV9CVUdfT04oKCFyd3NlbV9pc19sb2NrZWQoJm1tLT5tbWFwX3NlbSkpICYmCisJCSAgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpICE9IDApKTsKKworCS8qCisJICogbWxvY2s6ICAgZG9uJ3QgcGFnZSBwb3B1bGF0ZSBpZiBwYWdlIGhhcyBQUk9UX05PTkUgcGVybWlzc2lvbi4KKwkgKiBtdW5sb2NrOiB0aGUgcGFnZXMgYWx3YXlzIGRvIG11bmxvY2sgYWx0aHJvdWdoCisJICogICAgICAgICAgaXRzIGhhcyBQUk9UX05PTkUgcGVybWlzc2lvbi4KKwkgKi8KKwlpZiAoIW1sb2NrKQorCQlndXBfZmxhZ3MgfD0gR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlM7CisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQorCQlndXBfZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCisJbHJ1X2FkZF9kcmFpbl9hbGwoKTsJLyogcHVzaCBjYWNoZWQgcGFnZXMgdG8gTFJVICovCisKKwl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CisJCWludCBpOworCisJCWNvbmRfcmVzY2hlZCgpOworCisJCS8qCisJCSAqIGdldF91c2VyX3BhZ2VzIG1ha2VzIHBhZ2VzIHByZXNlbnQgaWYgd2UgYXJlCisJCSAqIHNldHRpbmcgbWxvY2suIGFuZCB0aGlzIGV4dHJhIHJlZmVyZW5jZSBjb3VudCB3aWxsCisJCSAqIGRpc2FibGUgbWlncmF0aW9uIG9mIHRoaXMgcGFnZS4gIEhvd2V2ZXIsIHBhZ2UgbWF5CisJCSAqIHN0aWxsIGJlIHRydW5jYXRlZCBvdXQgZnJvbSB1bmRlciB1cy4KKwkJICovCisJCXJldCA9IF9fZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sIGFkZHIsCisJCQkJbWluX3QoaW50LCBucl9wYWdlcywgQVJSQVlfU0laRShwYWdlcykpLAorCQkJCWd1cF9mbGFncywgcGFnZXMsIE5VTEwpOworCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gZm9yLCBlLmcuLCBWTV9OT05MSU5FQVIgcmVnaW9ucyBiZWZvcmUKKwkJICogYSBwYWdlIGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQgbWFwcGVkIGF0IGEgZ2l2ZW4gb2Zmc2V0LAorCQkgKiBvciBmb3IgYWRkcmVzc2VzIHRoYXQgbWFwIGJleW9uZCBlbmQgb2YgYSBmaWxlLgorCQkgKiBXZSdsbCBtbG9jayB0aGUgdGhlIHBhZ2VzIGlmL3doZW4gdGhleSBnZXQgZmF1bHRlZCBpbi4KKwkJICovCisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCWlmIChyZXQgPT0gMCkgeworCQkJLyoKKwkJCSAqIFdlIGtub3cgdGhlIHZtYSBpcyB0aGVyZSwgc28gdGhlIG9ubHkgdGltZQorCQkJICogd2UgY2Fubm90IGdldCBhIHNpbmdsZSBwYWdlIHNob3VsZCBiZSBhbgorCQkJICogZXJyb3IgKHJldCA8IDApIGNhc2UuCisJCQkgKi8KKwkJCVdBUk5fT04oMSk7CisJCQlicmVhazsKKwkJfQorCisJCWxydV9hZGRfZHJhaW4oKTsJLyogcHVzaCBjYWNoZWQgcGFnZXMgdG8gTFJVICovCisKKwkJZm9yIChpID0gMDsgaSA8IHJldDsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW2ldOworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQkvKgorCQkJICogQmVjYXVzZSB3ZSBsb2NrIHBhZ2UgaGVyZSBhbmQgbWlncmF0aW9uIGlzIGJsb2NrZWQKKwkJCSAqIGJ5IHRoZSBlbGV2YXRlZCByZWZlcmVuY2UsIHdlIG5lZWQgb25seSBjaGVjayBmb3IKKwkJCSAqIHBhZ2UgdHJ1bmNhdGlvbiAoZmlsZS1jYWNoZSBvbmx5KS4KKwkJCSAqLworCQkJaWYgKHBhZ2UtPm1hcHBpbmcpIHsKKwkJCQlpZiAobWxvY2spCisJCQkJCW1sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJCWVsc2UKKwkJCQkJbXVubG9ja192bWFfcGFnZShwYWdlKTsKKwkJCX0KKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJcHV0X3BhZ2UocGFnZSk7CQkvKiByZWYgZnJvbSBnZXRfdXNlcl9wYWdlcygpICovCisKKwkJCS8qCisJCQkgKiBoZXJlIHdlIGFzc3VtZSB0aGF0IGdldF91c2VyX3BhZ2VzKCkgaGFzIGdpdmVuIHVzCisJCQkgKiBhIGxpc3Qgb2YgdmlydHVhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuCisJCQkgKi8KKwkJCWFkZHIgKz0gUEFHRV9TSVpFOwkvKiBmb3IgbmV4dCBnZXRfdXNlcl9wYWdlcygpICovCisJCQlucl9wYWdlcy0tOworCQl9CisJCXJldCA9IDA7CisJfQorCisJbHJ1X2FkZF9kcmFpbl9hbGwoKTsJLyogdG8gdXBkYXRlIHN0YXRzICovCisKKwlyZXR1cm4gcmV0OwkvKiBjb3VudCBlbnRpcmUgdm1hIGFzIGxvY2tlZF92bSAqLworfQorCisvKgorICogY29udmVydCBnZXRfdXNlcl9wYWdlcygpIHJldHVybiB2YWx1ZSB0byBwb3NpeCBtbG9jaygpIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpCit7CisJaWYgKHJldHZhbCA9PSAtRUZBVUxUKQorCQlyZXR2YWwgPSAtRU5PTUVNOworCWVsc2UgaWYgKHJldHZhbCA9PSAtRU5PTUVNKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCXJldHVybiByZXR2YWw7Cit9CisKKyNlbHNlIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKworLyoKKyAqIEp1c3QgbWFrZSBwYWdlcyBwcmVzZW50IGlmIFZNX0xPQ0tFRC4gIE5vLW9wIGlmIHVubG9ja2luZy4KKyAqLworc3RhdGljIGxvbmcgX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICAgaW50IG1sb2NrKQoreworCWlmIChtbG9jayAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCXJldHVybiBtYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIGVuZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbWxvY2tfcG9zaXhfZXJyb3JfcmV0dXJuKGxvbmcgcmV0dmFsKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCisvKioKKyAqIG1sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gbWxvY2sgcGFnZXMgaW4gc3BlY2lmaWVkIHZtYSByYW5nZS4KKyAqIEB2bWEgLSB0aGUgdm1hIGNvbnRhaW5pbmcgdGhlIHNwZWNmaWVkIGFkZHJlc3MgcmFuZ2UKKyAqIEBzdGFydCAtIHN0YXJ0aW5nIGFkZHJlc3MgaW4gQHZtYSB0byBtbG9jaworICogQGVuZCAgIC0gZW5kIGFkZHJlc3MgWysxXSBpbiBAdm1hIHRvIG1sb2NrCisgKgorICogRm9yIG1tYXAoKS9tcmVtYXAoKS9leHBhbnNpb24gb2YgbWxvY2tlZCB2bWEuCisgKgorICogcmV0dXJuIDAgb24gc3VjY2VzcyBmb3IgIm5vcm1hbCIgdm1hcy4KKyAqCisgKiByZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIFs+IDBdIHRvIGJlIHJlbW92ZWQgZnJvbSBsb2NrZWRfdm0gb24gc3VjY2VzcworICogb2YgInNwZWNpYWwiIHZtYXMuCisgKgorICogcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGlmIHZtYSBzcGFubmluZyBAc3RhcnQtQHJhbmdlIGRpc2FwcGVhcnMgd2hpbGUKKyAqIG1tYXAgc2VtYXBob3JlIGlzIGRyb3BwZWQuICBVbmxpa2VseT8KKyAqLworbG9uZyBtbG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJaW50IG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKKwlCVUdfT04oISh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSk7CisKKwkvKgorCSAqIGZpbHRlciB1bmxvY2thYmxlIHZtYXMKKwkgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpCisJCWdvdG8gbm9fbWxvY2s7CisKKwlpZiAoISgodm1hLT52bV9mbGFncyAmIChWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQpKSB8fAorCQkJaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgfHwKKwkJCXZtYSA9PSBnZXRfZ2F0ZV92bWEoY3VycmVudCkpKSB7CisJCWxvbmcgZXJyb3I7CisJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCQllcnJvciA9IF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMSk7CisKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJLyogdm1hIGNhbiBjaGFuZ2Ugb3IgZGlzYXBwZWFyICovCisJCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CisJCS8qIG5vbi1OVUxMIHZtYSBtdXN0IGNvbnRhaW4gQHN0YXJ0LCBidXQgbmVlZCB0byBjaGVjayBAZW5kICovCisJCWlmICghdm1hIHx8ICBlbmQgPiB2bWEtPnZtX2VuZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldHVybiAwOwkvKiBoaWRlIG90aGVyIGVycm9ycyBmcm9tIG1tYXAoKSwgZXQgYWwgKi8KKwl9CisKKwkvKgorCSAqIFVzZXIgbWFwcGVkIGtlcm5lbCBwYWdlcyBvciBodWdlIHBhZ2VzOgorCSAqIG1ha2UgdGhlc2UgcGFnZXMgcHJlc2VudCB0byBwb3B1bGF0ZSB0aGUgcHRlcywgYnV0CisJICogZmFsbCB0aHJ1JyB0byByZXNldCBWTV9MT0NLRUQtLW5vIG5lZWQgdG8gdW5sb2NrLCBhbmQKKwkgKiByZXR1cm4gbnJfcGFnZXMgc28gdGhlc2UgZG9uJ3QgZ2V0IGNvdW50ZWQgYWdhaW5zdCB0YXNrJ3MKKwkgKiBsb2NrZWQgbGltaXQuICBodWdlIHBhZ2VzIGFyZSBhbHJlYWR5IGNvdW50ZWQgYWdhaW5zdAorCSAqIGxvY2tlZCB2bSBsaW1pdC4KKwkgKi8KKwltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIGVuZCk7CisKK25vX21sb2NrOgorCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0xPQ0tFRDsJLyogYW5kIGRvbid0IGNvbWUgYmFjayEgKi8KKwlyZXR1cm4gbnJfcGFnZXM7CQkvKiBlcnJvciBvciBwYWdlcyBOT1QgbWxvY2tlZCAqLworfQorCisKKy8qCisgKiBtdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIC0gbXVubG9jayBhbGwgcGFnZXMgaW4gdGhlIHZtYSByYW5nZS4nCisgKiBAdm1hIC0gdm1hIGNvbnRhaW5pbmcgcmFuZ2UgdG8gYmUgbXVubG9jaygpZWQuCisgKiBAc3RhcnQgLSBzdGFydCBhZGRyZXNzIGluIEB2bWEgb2YgdGhlIHJhbmdlCisgKiBAZW5kIC0gZW5kIG9mIHJhbmdlIGluIEB2bWEuCisgKgorICogIEZvciBtcmVtYXAoKSwgbXVubWFwKCkgYW5kIGV4aXQoKS4KKyAqCisgKiBDYWxsZWQgd2l0aCBAdm1hIFZNX0xPQ0tFRC4KKyAqCisgKiBSZXR1cm5zIHdpdGggVk1fTE9DS0VEIGNsZWFyZWQuICBDYWxsZXJzIG11c3QgYmUgcHJlcGFyZWQgdG8KKyAqIGRlYWwgd2l0aCB0aGlzLgorICoKKyAqIFdlIGRvbid0IHNhdmUgYW5kIHJlc3RvcmUgVk1fTE9DS0VEIGhlcmUgYmVjYXVzZSBwYWdlcyBhcmUKKyAqIHN0aWxsIG9uIGxydS4gIEluIHVubWFwIHBhdGgsIHBhZ2VzIG1pZ2h0IGJlIHNjYW5uZWQgYnkgcmVjbGFpbQorICogYW5kIHJlLW1sb2NrZWQgYnkgdHJ5X3RvX3ttdW5sb2NrfHVubWFwfSBiZWZvcmUgd2UgdW5tYXAgYW5kCisgKiBmcmVlIHRoZW0uICBUaGlzIHdpbGwgcmVzdWx0IGluIGZyZWVpbmcgbWxvY2tlZCBwYWdlcy4KKyAqLwordm9pZCBtdW5sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0xPQ0tFRDsKKwlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDApOworfQorCisvKgorICogbWxvY2tfZml4dXAgIC0gaGFuZGxlIG1sb2NrW2FsbF0vbXVubG9ja1thbGxdIHJlcXVlc3RzLgorICoKKyAqIEZpbHRlcnMgb3V0ICJzcGVjaWFsIiB2bWFzIC0tIFZNX0xPQ0tFRCBuZXZlciBnZXRzIHNldCBmb3IgdGhlc2UsIGFuZAorICogbXVubG9jayBpcyBhIG5vLW9wLiAgSG93ZXZlciwgZm9yIHNvbWUgc3BlY2lhbCB2bWFzLCB3ZSBnbyBhaGVhZCBhbmQKKyAqIHBvcHVsYXRlIHRoZSBwdGVzIHZpYSBtYWtlX3BhZ2VzX3ByZXNlbnQoKS4KKyAqCisgKiBGb3Igdm1hcyB0aGF0IHBhc3MgdGhlIGZpbHRlcnMsIG1lcmdlL3NwbGl0IGFzIGFwcHJvcHJpYXRlLgorICovCiBzdGF0aWMgaW50IG1sb2NrX2ZpeHVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcmV2LAogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBpbnQgbmV3ZmxhZ3MpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqIG1tID0gdm1hLT52bV9tbTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJcGdvZmZfdCBwZ29mZjsKLQlpbnQgcGFnZXM7CisJaW50IG5yX3BhZ2VzOwogCWludCByZXQgPSAwOworCWludCBsb2NrID0gbmV3ZmxhZ3MgJiBWTV9MT0NLRUQ7CiAKLQlpZiAobmV3ZmxhZ3MgPT0gdm1hLT52bV9mbGFncykgewotCQkqcHJldiA9IHZtYTsKLQkJZ290byBvdXQ7CisJaWYgKG5ld2ZsYWdzID09IHZtYS0+dm1fZmxhZ3MgfHwKKwkJCSh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkpCisJCWdvdG8gb3V0OwkvKiBkb24ndCBzZXQgVk1fTE9DS0VELCAgZG9uJ3QgY291bnQgKi8KKworCWlmICgodm1hLT52bV9mbGFncyAmIChWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQpKSB8fAorCQkJaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgfHwKKwkJCXZtYSA9PSBnZXRfZ2F0ZV92bWEoY3VycmVudCkpIHsKKwkJaWYgKGxvY2spCisJCQltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIGVuZCk7CisJCWdvdG8gb3V0OwkvKiBkb24ndCBzZXQgVk1fTE9DS0VELCAgZG9uJ3QgY291bnQgKi8KIAl9CiAKIAlwZ29mZiA9IHZtYS0+dm1fcGdvZmYgKyAoKHN0YXJ0IC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCk7CkBAIC00NCw4ICs0MTYsNiBAQAogCQlnb3RvIHN1Y2Nlc3M7CiAJfQogCi0JKnByZXYgPSB2bWE7Ci0KIAlpZiAoc3RhcnQgIT0gdm1hLT52bV9zdGFydCkgewogCQlyZXQgPSBzcGxpdF92bWEobW0sIHZtYSwgc3RhcnQsIDEpOwogCQlpZiAocmV0KQpAQCAtNjAsMjQgKzQzMCw2MSBAQAogCiBzdWNjZXNzOgogCS8qCisJICogS2VlcCB0cmFjayBvZiBhbW91bnQgb2YgbG9ja2VkIFZNLgorCSAqLworCW5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOworCWlmICghbG9jaykKKwkJbnJfcGFnZXMgPSAtbnJfcGFnZXM7CisJbW0tPmxvY2tlZF92bSArPSBucl9wYWdlczsKKworCS8qCiAJICogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX3NlbSBoZWxkIGluIHdyaXRlIG1vZGUuCiAJICogSXQncyBva2F5IGlmIHRyeV90b191bm1hcF9vbmUgdW5tYXBzIGEgcGFnZSBqdXN0IGFmdGVyIHdlCi0JICogc2V0IFZNX0xPQ0tFRCwgbWFrZV9wYWdlc19wcmVzZW50IGJlbG93IHdpbGwgYnJpbmcgaXQgYmFjay4KKwkgKiBzZXQgVk1fTE9DS0VELCBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suCiAJICovCiAJdm1hLT52bV9mbGFncyA9IG5ld2ZsYWdzOwogCi0JLyoKLQkgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uCi0JICovCi0JcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7Ci0JaWYgKG5ld2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCXBhZ2VzID0gLXBhZ2VzOwotCQlpZiAoIShuZXdmbGFncyAmIFZNX0lPKSkKLQkJCXJldCA9IG1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKwlpZiAobG9jaykgeworCQkvKgorCQkgKiBtbWFwX3NlbSBpcyBjdXJyZW50bHkgaGVsZCBmb3Igd3JpdGUuICBEb3duZ3JhZGUgdGhlIHdyaXRlCisJCSAqIGxvY2sgdG8gYSByZWFkIGxvY2sgc28gdGhhdCBvdGhlciBmYXVsdHMsIG1tYXAgc2NhbnMsIC4uLgorCQkgKiB3aGlsZSB3ZSBmYXVsdCBpbiBhbGwgcGFnZXMuCisJCSAqLworCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwkJcmV0ID0gX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAxKTsKKworCQkvKgorCQkgKiBOZWVkIHRvIHJlYWNxdWlyZSBtbWFwIHNlbSBpbiB3cml0ZSBtb2RlLCBhcyBvdXIgY2FsbGVycworCQkgKiBleHBlY3QgdGhpcy4gIFdlIGhhdmUgbm8gc3VwcG9ydCBmb3IgYXRvbWljYWxseSB1cGdyYWRpbmcKKwkJICogYSBzZW0gdG8gd3JpdGUsIHNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJhbmdlcyB3aGlsZSBzZW0KKwkJICogaXMgdW5sb2NrZWQuCisJCSAqLworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkvKiB2bWEgY2FuIGNoYW5nZSBvciBkaXNhcHBlYXIgKi8KKwkJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJKnByZXYgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOworCQkvKiBub24tTlVMTCAqcHJldiBtdXN0IGNvbnRhaW4gQHN0YXJ0LCBidXQgbmVlZCB0byBjaGVjayBAZW5kICovCisJCWlmICghKCpwcmV2KSB8fCBlbmQgPiAoKnByZXYpLT52bV9lbmQpCisJCQlyZXQgPSAtRU5PTUVNOworCQllbHNlIGlmIChyZXQgPiAwKSB7CisJCQltbS0+bG9ja2VkX3ZtIC09IHJldDsKKwkJCXJldCA9IDA7CisJCX0gZWxzZQorCQkJcmV0ID0gX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4ocmV0KTsgLyogdHJhbnNsYXRlIGlmIG5lZWRlZCAqLworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRPRE86ICBmb3IgdW5sb2NraW5nLCBwYWdlcyB3aWxsIGFscmVhZHkgYmUgcmVzaWRlbnQsIHNvCisJCSAqIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYWxsb2NhdGlvbnMvcmVjbGFpbS9wYWdlaW4sIC4uLgorCQkgKiBIb3dldmVyLCB1bmxvY2tpbmcgYSB2ZXJ5IGxhcmdlIHJlZ2lvbiBjYW4gc3RpbGwgdGFrZSBhCisJCSAqIHdoaWxlLiAgU2hvdWxkIHdlIGRvd25ncmFkZSB0aGUgc2VtYXBob3JlIGZvciBib3RoIGxvY2sKKwkJICogQU5EIHVubG9jayA/CisJCSAqLworCQlfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDApOwogCX0KIAotCW1tLT5sb2NrZWRfdm0gLT0gcGFnZXM7CiBvdXQ6CisJKnByZXYgPSB2bWE7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IGU3YTVhNjguLjc0ZjRkMTUgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCXJiX2luc2VydF9jb2xvcigmdm1hLT52bV9yYiwgJm1tLT5tbV9yYik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtYV9saW5rX2ZpbGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCitzdGF0aWMgdm9pZCBfX3ZtYV9saW5rX2ZpbGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGZpbGUgKiBmaWxlOwogCkBAIC02NjIsOCArNjYyLDYgQEAKICAqIElmIHRoZSB2bWEgaGFzIGEgLT5jbG9zZSBvcGVyYXRpb24gdGhlbiB0aGUgZHJpdmVyIHByb2JhYmx5IG5lZWRzIHRvIHJlbGVhc2UKICAqIHBlci12bWEgcmVzb3VyY2VzLCBzbyB3ZSBkb24ndCBhdHRlbXB0IHRvIG1lcmdlIHRob3NlLgogICovCi0jZGVmaW5lIFZNX1NQRUNJQUwgKFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQKQotCiBzdGF0aWMgaW5saW5lIGludCBpc19tZXJnZWFibGVfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MpCiB7CkBAIC05NzIsNiArOTcwLDcgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJCXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDsKIAl9CisKIAkvKiBtbG9jayBNQ0xfRlVUVVJFPyAqLwogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewogCQl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKQEAgLTExMzksMTAgKzExMzgsMTIgQEAKIAkgKiBUaGUgVk1fU0hBUkVEIHRlc3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2htZW1femVyb19zZXR1cAogCSAqIHdpbGwgY3JlYXRlIHRoZSBmaWxlIG9iamVjdCBmb3IgYSBzaGFyZWQgYW5vbnltb3VzIG1hcCBiZWxvdy4KIAkgKi8KLQlpZiAoIWZpbGUgJiYgISh2bV9mbGFncyAmIFZNX1NIQVJFRCkgJiYKLQkgICAgdm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCB2bV9mbGFncywKLQkJCQkJTlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpKQotCQlnb3RvIG91dDsKKwlpZiAoIWZpbGUgJiYgISh2bV9mbGFncyAmIFZNX1NIQVJFRCkpIHsKKwkJdm1hID0gdm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCB2bV9mbGFncywKKwkJCQkJTlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpOworCQlpZiAodm1hKQorCQkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBEZXRlcm1pbmUgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQgYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlCkBAIC0xMjI0LDEwICsxMjI1LDE0IEBACiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCXZtX3N0YXRfYWNjb3VudChtbSwgdm1fZmxhZ3MsIGZpbGUsIGxlbiA+PiBQQUdFX1NISUZUKTsKIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJbW0tPmxvY2tlZF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKLQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOwotCX0KLQlpZiAoKGZsYWdzICYgTUFQX1BPUFVMQVRFKSAmJiAhKGZsYWdzICYgTUFQX05PTkJMT0NLKSkKKwkJLyoKKwkJICogbWFrZXMgcGFnZXMgcHJlc2VudDsgZG93bmdyYWRlcywgZHJvcHMsIHJlYWNxdWlyZXMgbW1hcF9zZW0KKwkJICovCisJCWxvbmcgbnJfcGFnZXMgPSBtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuKTsKKwkJaWYgKG5yX3BhZ2VzIDwgMCkKKwkJCXJldHVybiBucl9wYWdlczsJLyogdm1hIGdvbmUhICovCisJCW1tLT5sb2NrZWRfdm0gKz0gKGxlbiA+PiBQQUdFX1NISUZUKSAtIG5yX3BhZ2VzOworCX0gZWxzZSBpZiAoKGZsYWdzICYgTUFQX1BPUFVMQVRFKSAmJiAhKGZsYWdzICYgTUFQX05PTkJMT0NLKSkKIAkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOwogCXJldHVybiBhZGRyOwogCkBAIC0xNTg2LDcgKzE1OTEsNyBAQAogICogdm1hIGlzIHRoZSBsYXN0IG9uZSB3aXRoIGFkZHJlc3MgPiB2bWEtPnZtX2VuZC4gIEhhdmUgdG8gZXh0ZW5kIHZtYS4KICAqLwogI2lmbmRlZiBDT05GSUdfSUE2NAotc3RhdGljIGlubGluZQorc3RhdGljCiAjZW5kaWYKIGludCBleHBhbmRfdXB3YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtMTYzNiw3ICsxNjQxLDcgQEAKIC8qCiAgKiB2bWEgaXMgdGhlIGZpcnN0IG9uZSB3aXRoIGFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0LiAgSGF2ZSB0byBleHRlbmQgdm1hLgogICovCi1zdGF0aWMgaW5saW5lIGludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorc3RhdGljIGludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlpbnQgZXJyb3I7CkBAIC0xNjk4LDEwICsxNzAzLDEyIEBACiAJdm1hID0gZmluZF92bWFfcHJldihtbSwgYWRkciwgJnByZXYpOwogCWlmICh2bWEgJiYgKHZtYS0+dm1fc3RhcnQgPD0gYWRkcikpCiAJCXJldHVybiB2bWE7Ci0JaWYgKCFwcmV2IHx8IGV4cGFuZF9zdGFjayhwcmV2LCBhZGRyKSkKKwlpZiAoZXhwYW5kX3N0YWNrKHByZXYsIGFkZHIpKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAocHJldi0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBwcmV2LT52bV9lbmQpOworCWlmIChwcmV2LT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQlpZiAobWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtPnZtX2VuZCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CS8qIHZtYSBnb25lISAqLworCX0KIAlyZXR1cm4gcHJldjsKIH0KICNlbHNlCkBAIC0xNzI3LDggKzE3MzQsMTAgQEAKIAlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHIpKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIHN0YXJ0KTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQlpZiAobWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQpIDwgMCkKKwkJCXJldHVybiBOVUxMOwkvKiB2bWEgZ29uZSEgKi8KKwl9CiAJcmV0dXJuIHZtYTsKIH0KICNlbmRpZgpAQCAtMTc0Nyw4ICsxNzU2LDYgQEAKIAkJbG9uZyBucnBhZ2VzID0gdm1hX3BhZ2VzKHZtYSk7CiAKIAkJbW0tPnRvdGFsX3ZtIC09IG5ycGFnZXM7Ci0JCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQkJbW0tPmxvY2tlZF92bSAtPSBucnBhZ2VzOwogCQl2bV9zdGF0X2FjY291bnQobW0sIHZtYS0+dm1fZmxhZ3MsIHZtYS0+dm1fZmlsZSwgLW5ycGFnZXMpOwogCQl2bWEgPSByZW1vdmVfdm1hKHZtYSk7CiAJfSB3aGlsZSAodm1hKTsKQEAgLTE5MTQsNiArMTkyMSwyMCBAQAogCXZtYSA9IHByZXY/IHByZXYtPnZtX25leHQ6IG1tLT5tbWFwOwogCiAJLyoKKwkgKiB1bmxvY2sgYW55IG1sb2NrKCllZCByYW5nZXMgYmVmb3JlIGRldGFjaGluZyB2bWFzCisJICovCisJaWYgKG1tLT5sb2NrZWRfdm0pIHsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp0bXAgPSB2bWE7CisJCXdoaWxlICh0bXAgJiYgdG1wLT52bV9zdGFydCA8IGVuZCkgeworCQkJaWYgKHRtcC0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCQltbS0+bG9ja2VkX3ZtIC09IHZtYV9wYWdlcyh0bXApOworCQkJCW11bmxvY2tfdm1hX3BhZ2VzX2FsbCh0bXApOworCQkJfQorCQkJdG1wID0gdG1wLT52bV9uZXh0OworCQl9CisJfQorCisJLyoKIAkgKiBSZW1vdmUgdGhlIHZtYSdzLCBhbmQgdW5tYXAgdGhlIGFjdHVhbCBwYWdlcwogCSAqLwogCWRldGFjaF92bWFzX3RvX2JlX3VubWFwcGVkKG1tLCB2bWEsIHByZXYsIGVuZCk7CkBAIC0yMDI1LDggKzIwNDYsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIENhbiB3ZSBqdXN0IGV4cGFuZCBhbiBvbGQgcHJpdmF0ZSBhbm9ueW1vdXMgbWFwcGluZz8gKi8KLQlpZiAodm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCBmbGFncywKLQkJCQkJTlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpKQorCXZtYSA9IHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsCisJCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKTsKKwlpZiAodm1hKQogCQlnb3RvIG91dDsKIAogCS8qCkBAIC0yMDQ4LDggKzIwNzAsOCBAQAogb3V0OgogCW1tLT50b3RhbF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAlpZiAoZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJbW0tPmxvY2tlZF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKLQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOworCQlpZiAoIW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pKQorCQkJbW0tPmxvY2tlZF92bSArPSAobGVuID4+IFBBR0VfU0hJRlQpOwogCX0KIAlyZXR1cm4gYWRkcjsKIH0KQEAgLTIwNjAsNyArMjA4Miw3IEBACiB2b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbW11X2dhdGhlciAqdGxiOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbW0tPm1tYXA7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBucl9hY2NvdW50ZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCkBAIC0yMDY4LDYgKzIwOTAsMTUgQEAKIAlhcmNoX2V4aXRfbW1hcChtbSk7CiAJbW11X25vdGlmaWVyX3JlbGVhc2UobW0pOwogCisJaWYgKG1tLT5sb2NrZWRfdm0pIHsKKwkJdm1hID0gbW0tPm1tYXA7CisJCXdoaWxlICh2bWEpIHsKKwkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQorCQkJCW11bmxvY2tfdm1hX3BhZ2VzX2FsbCh2bWEpOworCQkJdm1hID0gdm1hLT52bV9uZXh0OworCQl9CisJfQorCXZtYSA9IG1tLT5tbWFwOwogCWxydV9hZGRfZHJhaW4oKTsKIAlmbHVzaF9jYWNoZV9tbShtbSk7CiAJdGxiID0gdGxiX2dhdGhlcl9tbXUobW0sIDEpOwpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCAxYTc3NDM5Li41OGEyOTA4IDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiBzdGF0aWMgcG1kX3QgKmdldF9vbGRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGdkX3QgKnBnZDsKQEAgLTIzOCw4ICsyNDAsOCBAQAogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewogCQltbS0+bG9ja2VkX3ZtICs9IG5ld19sZW4gPj4gUEFHRV9TSElGVDsKIAkJaWYgKG5ld19sZW4gPiBvbGRfbGVuKQotCQkJbWFrZV9wYWdlc19wcmVzZW50KG5ld19hZGRyICsgb2xkX2xlbiwKLQkJCQkJICAgbmV3X2FkZHIgKyBuZXdfbGVuKTsKKwkJCW1sb2NrX3ZtYV9wYWdlc19yYW5nZShuZXdfdm1hLCBuZXdfYWRkciArIG9sZF9sZW4sCisJCQkJCQkgICAgICAgbmV3X2FkZHIgKyBuZXdfbGVuKTsKIAl9CiAKIAlyZXR1cm4gbmV3X2FkZHI7CkBAIC0zNzksNyArMzgxLDcgQEAKIAkJCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLT52bV9mbGFncywgdm1hLT52bV9maWxlLCBwYWdlcyk7CiAJCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgewogCQkJCW1tLT5sb2NrZWRfdm0gKz0gcGFnZXM7Ci0JCQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIgKyBvbGRfbGVuLAorCQkJCW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIgKyBvbGRfbGVuLAogCQkJCQkJICAgYWRkciArIG5ld19sZW4pOwogCQkJfQogCQkJcmV0ID0gYWRkcjsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGVkNzViYzkuLjI2OTZiMjQgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIHZvaWQgKmhpZ2hfbWVtb3J5Owogc3RydWN0IHBhZ2UgKm1lbV9tYXA7CiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKQEAgLTEyOCwyMCArMTMwLDE2IEBACiAJcmV0dXJuIFBBR0VfU0laRSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKIH0KIAotLyoKLSAqIGdldCBhIGxpc3Qgb2YgcGFnZXMgaW4gYW4gYWRkcmVzcyByYW5nZSBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZCBwcm9jZXNzCi0gKiBhbmQgaW5kaWNhdGUgdGhlIFZNQSB0aGF0IGNvdmVycyBlYWNoIHBhZ2UKLSAqIC0gdGhpcyBpcyBwb3RlbnRpYWxseSBkb2RneSBhcyB3ZSBtYXkgZW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBjb3VudCBvZiBhCi0gKiAgIHNsYWIgcGFnZSBvciBhIHNlY29uZGFyeSBwYWdlIGZyb20gYSBjb21wb3VuZCBwYWdlCi0gKiAtIGRvbid0IHBlcm1pdCBhY2Nlc3MgdG8gVk1BcyB0aGF0IGRvbid0IHN1cHBvcnQgaXQsIHN1Y2ggYXMgSS9PIG1hcHBpbmdzCi0gKi8KLWludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCi0Jc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKK2ludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgZmxhZ3MsCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAlpbnQgaTsKKwlpbnQgd3JpdGUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19XUklURSk7CisJaW50IGZvcmNlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfRk9SQ0UpOworCWludCBpZ25vcmUgPSAhIShmbGFncyAmIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TKTsKIAogCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb25zLgogCSAqIC0gaWYgJ2ZvcmNlJyBpcyBzZXQsIHdlIG9ubHkgcmVxdWlyZSB0aGUgIk1BWSIgZmxhZ3MuCkBAIC0xNTYsNyArMTU0LDcgQEAKIAogCQkvKiBwcm90ZWN0IHdoYXQgd2UgY2FuLCBpbmNsdWRpbmcgY2hhcmRldnMgKi8KIAkJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApIHx8Ci0JCSAgICAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpCisJCSAgICAoIWlnbm9yZSAmJiAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpKQogCQkJZ290byBmaW5pc2hfb3JfZmF1bHQ7CiAKIAkJaWYgKHBhZ2VzKSB7CkBAIC0xNzQsNiArMTcyLDMwIEBACiBmaW5pc2hfb3JfZmF1bHQ6CiAJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiB9CisKKworLyoKKyAqIGdldCBhIGxpc3Qgb2YgcGFnZXMgaW4gYW4gYWRkcmVzcyByYW5nZSBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZCBwcm9jZXNzCisgKiBhbmQgaW5kaWNhdGUgdGhlIFZNQSB0aGF0IGNvdmVycyBlYWNoIHBhZ2UKKyAqIC0gdGhpcyBpcyBwb3RlbnRpYWxseSBkb2RneSBhcyB3ZSBtYXkgZW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBjb3VudCBvZiBhCisgKiAgIHNsYWIgcGFnZSBvciBhIHNlY29uZGFyeSBwYWdlIGZyb20gYSBjb21wb3VuZCBwYWdlCisgKiAtIGRvbid0IHBlcm1pdCBhY2Nlc3MgdG8gVk1BcyB0aGF0IGRvbid0IHN1cHBvcnQgaXQsIHN1Y2ggYXMgSS9PIG1hcHBpbmdzCisgKi8KK2ludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCisJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKK3sKKwlpbnQgZmxhZ3MgPSAwOworCisJaWYgKHdyaXRlKQorCQlmbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisJaWYgKGZvcmNlKQorCQlmbGFncyB8PSBHVVBfRkxBR1NfRk9SQ0U7CisKKwlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLAorCQkJCXN0YXJ0LCBsZW4sIGZsYWdzLAorCQkJCXBhZ2VzLCB2bWFzKTsKK30KIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCiBERUZJTkVfUldMT0NLKHZtbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDI0ZGU4YjYuLjI5NzBlMzUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtNyw3ICs3LDcgQEAKICAqIENvbnRhaW5zIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHdyaXRpbmcgYmFjayBkaXJ0eSBwYWdlcyBhdCB0aGUKICAqIGFkZHJlc3Nfc3BhY2UgbGV2ZWwuCiAgKgotICogMTBBcHIyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMTBBcHIyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24KICAqLwogCkBAIC0zMjksOSArMzI5LDcgQEAKIAkJc3RydWN0IHpvbmUgKnogPQogCQkJJk5PREVfREFUQShub2RlKS0+bm9kZV96b25lc1taT05FX0hJR0hNRU1dOwogCi0JCXggKz0gem9uZV9wYWdlX3N0YXRlKHosIE5SX0ZSRUVfUEFHRVMpCi0JCQkrIHpvbmVfcGFnZV9zdGF0ZSh6LCBOUl9JTkFDVElWRSkKLQkJCSsgem9uZV9wYWdlX3N0YXRlKHosIE5SX0FDVElWRSk7CisJCXggKz0gem9uZV9wYWdlX3N0YXRlKHosIE5SX0ZSRUVfUEFHRVMpICsgem9uZV9scnVfcGFnZXMoeik7CiAJfQogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBoaWdobWVtIHBhZ2VzIGlzIG5ldmVyIGxhcmdlcgpAQCAtMzU1LDkgKzM1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB4OwogCi0JeCA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkUpCi0JCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFKTsKKwl4ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykgKyBnbG9iYWxfbHJ1X3BhZ2VzKCk7CiAKIAlpZiAoIXZtX2hpZ2htZW1faXNfZGlydHlhYmxlKQogCQl4IC09IGhpZ2htZW1fZGlydHlhYmxlX21lbW9yeSh4KTsKQEAgLTg3Niw2ICs4NzIsNyBAQAogCXBnb2ZmX3QgZW5kOwkJLyogSW5jbHVzaXZlICovCiAJaW50IHNjYW5uZWQgPSAwOwogCWludCByYW5nZV93aG9sZSA9IDA7CisJbG9uZyBucl90b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGU7CiAKIAlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKIAkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKQEAgLTkzOSw3ICs5MzYsNyBAQAogCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJCXJldCA9IDA7CiAJCQl9Ci0JCQlpZiAocmV0IHx8ICgtLSh3YmMtPm5yX3RvX3dyaXRlKSA8PSAwKSkKKwkJCWlmIChyZXQgfHwgKC0tbnJfdG9fd3JpdGUgPD0gMCkpCiAJCQkJZG9uZSA9IDE7CiAJCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKIAkJCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwpAQCAtOTU4LDExICs5NTUsMTIgQEAKIAkJaW5kZXggPSAwOwogCQlnb3RvIHJldHJ5OwogCX0KLQlpZiAod2JjLT5yYW5nZV9jeWNsaWMgfHwgKHJhbmdlX3dob2xlICYmIHdiYy0+bnJfdG9fd3JpdGUgPiAwKSkKLQkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisJaWYgKCF3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlKSB7CisJCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgbnJfdG9fd3JpdGUgPiAwKSkKKwkJCW1hcHBpbmctPndyaXRlYmFja19pbmRleCA9IGluZGV4OworCQl3YmMtPm5yX3RvX3dyaXRlID0gbnJfdG9fd3JpdGU7CisJfQogCi0JaWYgKHdiYy0+cmFuZ2VfY29udCkKLQkJd2JjLT5yYW5nZV9zdGFydCA9IGluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wod3JpdGVfY2FjaGVfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDI3Yjg2ODEuLmQwYTI0MGYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZhdWx0LWluamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTIyMywxNyArMjIzLDEyIEBACiAKIHN0YXRpYyB2b2lkIGJhZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXZvaWQgKnBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0KIAlwcmludGsoS0VSTl9FTUVSRyAiQmFkIHBhZ2Ugc3RhdGUgaW4gcHJvY2VzcyAnJXMnXG4iIEtFUk5fRU1FUkcKIAkJInBhZ2U6JXAgZmxhZ3M6MHglMCpseCBtYXBwaW5nOiVwIG1hcGNvdW50OiVkIGNvdW50OiVkXG4iLAogCQljdXJyZW50LT5jb21tLCBwYWdlLCAoaW50KSgyKnNpemVvZih1bnNpZ25lZCBsb25nKSksCiAJCSh1bnNpZ25lZCBsb25nKXBhZ2UtPmZsYWdzLCBwYWdlLT5tYXBwaW5nLAogCQlwYWdlX21hcGNvdW50KHBhZ2UpLCBwYWdlX2NvdW50KHBhZ2UpKTsKLQlpZiAocGMpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgImNncm91cDolcFxuIiwgcGMpOwotCQlwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAocGFnZSk7Ci0JfQorCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlRyeWluZyB0byBmaXggaXQgdXAsIGJ1dCBhIHJlYm9vdCBpcyBuZWVkZWRcbiIKIAkJS0VSTl9FTUVSRyAiQmFja3RyYWNlOlxuIik7CiAJZHVtcF9zdGFjaygpOwpAQCAtNDU0LDE0ICs0NDksMTYgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZnJlZV9wYWdlc19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlmcmVlX3BhZ2VfbWxvY2socGFnZSk7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAotCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX0ZSRUUpKSkKIAkJYmFkX3BhZ2UocGFnZSk7CiAJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKIAkJX19DbGVhclBhZ2VEaXJ0eShwYWdlKTsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCV9fQ2xlYXJQYWdlU3dhcEJhY2tlZChwYWdlKTsKIAkvKgogCSAqIEZvciBub3csIHdlIHJlcG9ydCBpZiBQR19yZXNlcnZlZCB3YXMgZm91bmQgc2V0LCBidXQgZG8gbm90CiAJICogY2xlYXIgaXQsIGFuZCBkbyBub3QgZnJlZSB0aGUgcGFnZS4gIEJ1dCB3ZSBzaGFsbCBzb29uIG5lZWQKQEAgLTYwMCw3ICs1OTcsNiBAQAogewogCWlmICh1bmxpa2VseShwYWdlX21hcGNvdW50KHBhZ2UpIHwKIAkJKHBhZ2UtPm1hcHBpbmcgIT0gTlVMTCkgIHwKLQkJKHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpICE9IE5VTEwpIHwKIAkJKHBhZ2VfY291bnQocGFnZSkgIT0gMCkgIHwKIAkJKHBhZ2UtPmZsYWdzICYgUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQKSkpCiAJCWJhZF9wYWdlKHBhZ2UpOwpAQCAtNjE0LDcgKzYxMCwxMSBAQAogCiAJcGFnZS0+ZmxhZ3MgJj0gfigxIDw8IFBHX3VwdG9kYXRlIHwgMSA8PCBQR19lcnJvciB8IDEgPDwgUEdfcmVjbGFpbSB8CiAJCQkxIDw8IFBHX3JlZmVyZW5jZWQgfCAxIDw8IFBHX2FyY2hfMSB8Ci0JCQkxIDw8IFBHX293bmVyX3ByaXZfMSB8IDEgPDwgUEdfbWFwcGVkdG9kaXNrKTsKKwkJCTEgPDwgUEdfb3duZXJfcHJpdl8xIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2sKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCQl8IDEgPDwgUEdfbWxvY2tlZAorI2VuZGlmCisJCQkpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CiAJc2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTsKIApAQCAtMTg2MiwxMCArMTg2MiwyMSBAQAogCQl9CiAJfQogCi0JcHJpbnRrKCJBY3RpdmU6JWx1IGluYWN0aXZlOiVsdSBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKKwlwcmludGsoIkFjdGl2ZV9hbm9uOiVsdSBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfYW5vbjolbHVcbiIKKwkJIiBpbmFjdGl2ZV9maWxlOiVsdSIKKy8vVE9ETzogIGNoZWNrL2FkanVzdCBsaW5lIGxlbmd0aHMKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCSIgdW5ldmljdGFibGU6JWx1IgorI2VuZGlmCisJCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1XG4iCiAJCSIgZnJlZTolbHUgc2xhYjolbHUgbWFwcGVkOiVsdSBwYWdldGFibGVzOiVsdSBib3VuY2U6JWx1XG4iLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpLAotCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9BTk9OKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfRklMRSksCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTkVWSUNUQUJMRSksCisjZW5kaWYKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCkBAIC0xODg4LDggKzE4OTksMTMgQEAKIAkJCSIgbWluOiVsdWtCIgogCQkJIiBsb3c6JWx1a0IiCiAJCQkiIGhpZ2g6JWx1a0IiCi0JCQkiIGFjdGl2ZTolbHVrQiIKLQkJCSIgaW5hY3RpdmU6JWx1a0IiCisJCQkiIGFjdGl2ZV9hbm9uOiVsdWtCIgorCQkJIiBpbmFjdGl2ZV9hbm9uOiVsdWtCIgorCQkJIiBhY3RpdmVfZmlsZTolbHVrQiIKKwkJCSIgaW5hY3RpdmVfZmlsZTolbHVrQiIKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCQkiIHVuZXZpY3RhYmxlOiVsdWtCIgorI2VuZGlmCiAJCQkiIHByZXNlbnQ6JWx1a0IiCiAJCQkiIHBhZ2VzX3NjYW5uZWQ6JWx1IgogCQkJIiBhbGxfdW5yZWNsYWltYWJsZT8gJXMiCkBAIC0xODk5LDggKzE5MTUsMTMgQEAKIAkJCUsoem9uZS0+cGFnZXNfbWluKSwKIAkJCUsoem9uZS0+cGFnZXNfbG93KSwKIAkJCUsoem9uZS0+cGFnZXNfaGlnaCksCi0JCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpKSwKLQkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTikpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUpKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9VTkVWSUNUQUJMRSkpLAorI2VuZGlmCiAJCQlLKHpvbmUtPnByZXNlbnRfcGFnZXMpLAogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCwKIAkJCSh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpID8gInllcyIgOiAibm8iKQpAQCAtMzQxMCwxMCArMzQzMSwxMiBAQAogCXBnZGF0LT5ucl96b25lcyA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGdkYXQtPmtzd2FwZF93YWl0KTsKIAlwZ2RhdC0+a3N3YXBkX21heF9vcmRlciA9IDA7CisJcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChwZ2RhdCk7CiAJCiAJZm9yIChqID0gMDsgaiA8IE1BWF9OUl9aT05FUzsgaisrKSB7CiAJCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBqOwogCQl1bnNpZ25lZCBsb25nIHNpemUsIHJlYWxzaXplLCBtZW1tYXBfcGFnZXM7CisJCWVudW0gbHJ1X2xpc3QgbDsKIAogCQlzaXplID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUobmlkLCBqLCB6b25lc19zaXplKTsKIAkJcmVhbHNpemUgPSBzaXplIC0gem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShuaWQsIGosCkBAIC0zNDI4LDggKzM0NTEsOCBAQAogCQkJUEFHRV9BTElHTihzaXplICogc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPj4gUEFHRV9TSElGVDsKIAkJaWYgKHJlYWxzaXplID49IG1lbW1hcF9wYWdlcykgewogCQkJcmVhbHNpemUgLT0gbWVtbWFwX3BhZ2VzOwotCQkJbW1pbml0X2RwcmludGsoTU1JTklUX1RSQUNFLCAibWVtbWFwX2luaXQiLAotCQkJCSIlcyB6b25lOiAlbHUgcGFnZXMgdXNlZCBmb3IgbWVtbWFwXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkiICAlcyB6b25lOiAlbHUgcGFnZXMgdXNlZCBmb3IgbWVtbWFwXG4iLAogCQkJCXpvbmVfbmFtZXNbal0sIG1lbW1hcF9wYWdlcyk7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMzQzOSw4ICszNDYyLDcgQEAKIAkJLyogQWNjb3VudCBmb3IgcmVzZXJ2ZWQgcGFnZXMgKi8KIAkJaWYgKGogPT0gMCAmJiByZWFsc2l6ZSA+IGRtYV9yZXNlcnZlKSB7CiAJCQlyZWFsc2l6ZSAtPSBkbWFfcmVzZXJ2ZTsKLQkJCW1taW5pdF9kcHJpbnRrKE1NSU5JVF9UUkFDRSwgIm1lbW1hcF9pbml0IiwKLQkJCQkJIiVzIHpvbmU6ICVsdSBwYWdlcyByZXNlcnZlZFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIHpvbmU6ICVsdSBwYWdlcyByZXNlcnZlZFxuIiwKIAkJCQkJem9uZV9uYW1lc1swXSwgZG1hX3Jlc2VydmUpOwogCQl9CiAKQEAgLTM0NjUsMTAgKzM0ODcsMTQgQEAKIAkJem9uZS0+cHJldl9wcmlvcml0eSA9IERFRl9QUklPUklUWTsKIAogCQl6b25lX3BjcF9pbml0KHpvbmUpOwotCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+YWN0aXZlX2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKLQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA9IDA7CisJCWZvcl9lYWNoX2xydShsKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+bHJ1W2xdLmxpc3QpOworCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOworCQl9CisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWzBdID0gMDsKKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMV0gPSAwOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSA9IDA7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzFdID0gMDsKIAkJemFwX3pvbmVfdm1fc3RhdHMoem9uZSk7CiAJCXpvbmUtPmZsYWdzID0gMDsKIAkJaWYgKCFzaXplKQpAQCAtMzk1Miw3ICszOTc4LDcgQEAKIHZvaWQgX19pbml0IGZyZWVfYXJlYV9pbml0X25vZGVzKHVuc2lnbmVkIGxvbmcgKm1heF96b25lX3BmbikKIHsKIAl1bnNpZ25lZCBsb25nIG5pZDsKLQllbnVtIHpvbmVfdHlwZSBpOworCWludCBpOwogCiAJLyogU29ydCBlYXJseV9ub2RlX21hcCBhcyBpbml0aWFsaXNhdGlvbiBhc3N1bWVzIGl0IGlzIHNvcnRlZCAqLwogCXNvcnRfbm9kZV9tYXAoKTsKQEAgLTQyMTAsNyArNDIzNiw3IEBACiAJZm9yX2VhY2hfem9uZSh6b25lKSB7CiAJCXU2NCB0bXA7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7CiAJCXRtcCA9ICh1NjQpcGFnZXNfbWluICogem9uZS0+cHJlc2VudF9wYWdlczsKIAkJZG9fZGl2KHRtcCwgbG93bWVtX3BhZ2VzKTsKIAkJaWYgKGlzX2hpZ2htZW0oem9uZSkpIHsKQEAgLTQyNDIsMTMgKzQyNjgsNTMgQEAKIAkJem9uZS0+cGFnZXNfbG93ICAgPSB6b25lLT5wYWdlc19taW4gKyAodG1wID4+IDIpOwogCQl6b25lLT5wYWdlc19oaWdoICA9IHpvbmUtPnBhZ2VzX21pbiArICh0bXAgPj4gMSk7CiAJCXNldHVwX3pvbmVfbWlncmF0ZV9yZXNlcnZlKHpvbmUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyogdXBkYXRlIHRvdGFscmVzZXJ2ZV9wYWdlcyAqLwogCWNhbGN1bGF0ZV90b3RhbHJlc2VydmVfcGFnZXMoKTsKIH0KIAorLyoqCisgKiBzZXR1cF9wZXJfem9uZV9pbmFjdGl2ZV9yYXRpbyAtIGNhbGxlZCB3aGVuIG1pbl9mcmVlX2tieXRlcyBjaGFuZ2VzLgorICoKKyAqIFRoZSBpbmFjdGl2ZSBhbm9uIGxpc3Qgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBWTSBuZXZlciBoYXMgdG8KKyAqIGRvIHRvbyBtdWNoIHdvcmssIGJ1dCBsYXJnZSBlbm91Z2ggdGhhdCBlYWNoIGluYWN0aXZlIHBhZ2UgaGFzIGEgY2hhbmNlCisgKiB0byBiZSByZWZlcmVuY2VkIGFnYWluIGJlZm9yZSBpdCBpcyBzd2FwcGVkIG91dC4KKyAqCisgKiBUaGUgaW5hY3RpdmVfYW5vbiByYXRpbyBpcyB0aGUgdGFyZ2V0IHJhdGlvIG9mIEFDVElWRV9BTk9OIHRvCisgKiBJTkFDVElWRV9BTk9OIHBhZ2VzIG9uIHRoaXMgem9uZSdzIExSVSwgbWFpbnRhaW5lZCBieSB0aGUKKyAqIHBhZ2VvdXQgY29kZS4gQSB6b25lLT5pbmFjdGl2ZV9yYXRpbyBvZiAzIG1lYW5zIDM6MSBvciAyNSUgb2YKKyAqIHRoZSBhbm9ueW1vdXMgcGFnZXMgYXJlIGtlcHQgb24gdGhlIGluYWN0aXZlIGxpc3QuCisgKgorICogdG90YWwgICAgIHRhcmdldCAgICBtYXgKKyAqIG1lbW9yeSAgICByYXRpbyAgICAgaW5hY3RpdmUgYW5vbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAxME1CICAgICAgIDEgICAgICAgICA1TUIKKyAqICAxMDBNQiAgICAgICAxICAgICAgICA1ME1CCisgKiAgICAxR0IgICAgICAgMyAgICAgICAyNTBNQgorICogICAxMEdCICAgICAgMTAgICAgICAgMC45R0IKKyAqICAxMDBHQiAgICAgIDMxICAgICAgICAgM0dCCisgKiAgICAxVEIgICAgIDEwMSAgICAgICAgMTBHQgorICogICAxMFRCICAgICAzMjAgICAgICAgIDMyR0IKKyAqLwordm9pZCBzZXR1cF9wZXJfem9uZV9pbmFjdGl2ZV9yYXRpbyh2b2lkKQoreworCXN0cnVjdCB6b25lICp6b25lOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXVuc2lnbmVkIGludCBnYiwgcmF0aW87CisKKwkJLyogWm9uZSBzaXplIGluIGdpZ2FieXRlcyAqLworCQlnYiA9IHpvbmUtPnByZXNlbnRfcGFnZXMgPj4gKDMwIC0gUEFHRV9TSElGVCk7CisJCXJhdGlvID0gaW50X3NxcnQoMTAgKiBnYik7CisJCWlmICghcmF0aW8pCisJCQlyYXRpbyA9IDE7CisKKwkJem9uZS0+aW5hY3RpdmVfcmF0aW8gPSByYXRpbzsKKwl9Cit9CisKIC8qCiAgKiBJbml0aWFsaXNlIG1pbl9mcmVlX2tieXRlcy4KICAqCkBAIC00Mjg2LDYgKzQzNTIsNyBAQAogCQltaW5fZnJlZV9rYnl0ZXMgPSA2NTUzNjsKIAlzZXR1cF9wZXJfem9uZV9wYWdlc19taW4oKTsKIAlzZXR1cF9wZXJfem9uZV9sb3dtZW1fcmVzZXJ2ZSgpOworCXNldHVwX3Blcl96b25lX2luYWN0aXZlX3JhdGlvKCk7CiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChpbml0X3Blcl96b25lX3BhZ2VzX21pbikKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY2dyb3VwLmMgYi9tbS9wYWdlX2Nncm91cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODY1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0wLDAgKzEsMjM3IEBACisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisKK3N0YXRpYyB2b2lkIF9fbWVtaW5pdAorX19pbml0X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsIHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXBjLT5mbGFncyA9IDA7CisJcGMtPm1lbV9jZ3JvdXAgPSBOVUxMOworCXBjLT5wYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKK30KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX3VzYWdlOworCisjaWYgIWRlZmluZWQoQ09ORklHX1NQQVJTRU1FTSkKKworCit2b2lkIF9faW5pdCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCit7CisJcGdkYXQtPm5vZGVfcGFnZV9jZ3JvdXAgPSBOVUxMOworfQorCitzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKKworCWJhc2UgPSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLT5ub2RlX3BhZ2VfY2dyb3VwOworCWlmICh1bmxpa2VseSghYmFzZSkpCisJCXJldHVybiBOVUxMOworCisJb2Zmc2V0ID0gcGZuIC0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKHBhZ2UpKS0+bm9kZV9zdGFydF9wZm47CisJcmV0dXJuIGJhc2UgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFsbG9jX25vZGVfcGFnZV9jZ3JvdXAoaW50IG5pZCkKK3sKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2UsICpwYzsKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG5yX3BhZ2VzLCBpbmRleDsKKworCXN0YXJ0X3BmbiA9IE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbjsKKwlucl9wYWdlcyA9IE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXM7CisKKwl0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBucl9wYWdlczsKKworCWJhc2UgPSBfX2FsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKE5PREVfREFUQShuaWQpLAorCQkJdGFibGVfc2l6ZSwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnJfcGFnZXM7IGluZGV4KyspIHsKKwkJcGMgPSBiYXNlICsgaW5kZXg7CisJCV9faW5pdF9wYWdlX2Nncm91cChwYywgc3RhcnRfcGZuICsgaW5kZXgpOworCX0KKwlOT0RFX0RBVEEobmlkKS0+bm9kZV9wYWdlX2Nncm91cCA9IGJhc2U7CisJdG90YWxfdXNhZ2UgKz0gdGFibGVfc2l6ZTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgcGFnZV9jZ3JvdXBfaW5pdCh2b2lkKQoreworCisJaW50IG5pZCwgZmFpbDsKKworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgIHsKKwkJZmFpbCA9IGFsbG9jX25vZGVfcGFnZV9jZ3JvdXAobmlkKTsKKwkJaWYgKGZhaWwpCisJCQlnb3RvIGZhaWw7CisJfQorCXByaW50ayhLRVJOX0lORk8gImFsbG9jYXRlZCAlbGQgYnl0ZXMgb2YgcGFnZV9jZ3JvdXBcbiIsIHRvdGFsX3VzYWdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJwbGVhc2UgdHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBvcHRpb24gaWYgeW91IgorCSIgZG9uJ3Qgd2FudFxuIik7CisJcmV0dXJuOworZmFpbDoKKwlwcmludGsoS0VSTl9DUklUICJhbGxvY2F0aW9uIG9mIHBhZ2VfY2dyb3VwIHdhcyBmYWlsZWQuXG4iKTsKKwlwcmludGsoS0VSTl9DUklUICJwbGVhc2UgdHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBib290IG9wdGlvblxuIik7CisJcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKK30KKworI2Vsc2UgLyogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQICovCisKK3N0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CisJc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCisJcmV0dXJuIHNlY3Rpb24tPnBhZ2VfY2dyb3VwICsgcGZuOworfQorCitpbnQgX19tZW1pbml0IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb247CisJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlLCAqcGM7CisJdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplOworCWludCBuaWQsIGluZGV4OworCisJc2VjdGlvbiA9IF9fcGZuX3RvX3NlY3Rpb24ocGZuKTsKKworCWlmIChzZWN0aW9uLT5wYWdlX2Nncm91cCkKKwkJcmV0dXJuIDA7CisKKwluaWQgPSBwYWdlX3RvX25pZChwZm5fdG9fcGFnZShwZm4pKTsKKworCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIFBBR0VTX1BFUl9TRUNUSU9OOworCWJhc2UgPSBrbWFsbG9jX25vZGUodGFibGVfc2l6ZSwgR0ZQX0tFUk5FTCwgbmlkKTsKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSB2bWFsbG9jX25vZGUodGFibGVfc2l6ZSwgbmlkKTsKKworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgInBhZ2UgY2dyb3VwIGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBBR0VTX1BFUl9TRUNUSU9OOyBpbmRleCsrKSB7CisJCXBjID0gYmFzZSArIGluZGV4OworCQlfX2luaXRfcGFnZV9jZ3JvdXAocGMsIHBmbiArIGluZGV4KTsKKwl9CisKKwlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCXNlY3Rpb24tPnBhZ2VfY2dyb3VwID0gYmFzZSAtIHBmbjsKKwl0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplOworCXJldHVybiAwOworfQorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwordm9pZCBfX2ZyZWVfcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4pCit7CisJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2U7CisKKwltcyA9IF9fcGZuX3RvX3NlY3Rpb24ocGZuKTsKKwlpZiAoIW1zIHx8ICFtcy0+cGFnZV9jZ3JvdXApCisJCXJldHVybjsKKwliYXNlID0gbXMtPnBhZ2VfY2dyb3VwICsgcGZuOworCW1zLT5wYWdlX2Nncm91cCA9IE5VTEw7CisJaWYgKGlzX3ZtYWxsb2NfYWRkcihiYXNlKSkKKwkJdmZyZWUoYmFzZSk7CisJZWxzZQorCQlrZnJlZShiYXNlKTsKK30KKworaW50IG9ubGluZV9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQlpbnQgbmlkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgcGZuOworCWludCBmYWlsID0gMDsKKworCXN0YXJ0ID0gc3RhcnRfcGZuICYgKFBBR0VTX1BFUl9TRUNUSU9OIC0gMSk7CisJZW5kID0gQUxJR04oc3RhcnRfcGZuICsgbnJfcGFnZXMsIFBBR0VTX1BFUl9TRUNUSU9OKTsKKworCWZvciAocGZuID0gc3RhcnQ7ICFmYWlsICYmIHBmbiA8IGVuZDsgcGZuICs9IFBBR0VTX1BFUl9TRUNUSU9OKSB7CisJCWlmICghcGZuX3ByZXNlbnQocGZuKSkKKwkJCWNvbnRpbnVlOworCQlmYWlsID0gaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHBmbik7CisJfQorCWlmICghZmFpbCkKKwkJcmV0dXJuIDA7CisKKwkvKiByb2xsYmFjayAqLworCWZvciAocGZuID0gc3RhcnQ7IHBmbiA8IGVuZDsgcGZuICs9IFBBR0VTX1BFUl9TRUNUSU9OKQorCQlfX2ZyZWVfcGFnZV9jZ3JvdXAocGZuKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCitpbnQgb2ZmbGluZV9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywgaW50IG5pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIHBmbjsKKworCXN0YXJ0ID0gc3RhcnRfcGZuICYgKFBBR0VTX1BFUl9TRUNUSU9OIC0gMSk7CisJZW5kID0gQUxJR04oc3RhcnRfcGZuICsgbnJfcGFnZXMsIFBBR0VTX1BFUl9TRUNUSU9OKTsKKworCWZvciAocGZuID0gc3RhcnQ7IHBmbiA8IGVuZDsgcGZuICs9IFBBR0VTX1BFUl9TRUNUSU9OKQorCQlfX2ZyZWVfcGFnZV9jZ3JvdXAocGZuKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHBhZ2VfY2dyb3VwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtZW1vcnlfbm90aWZ5ICptbiA9IGFyZzsKKwlpbnQgcmV0ID0gMDsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgTUVNX0dPSU5HX09OTElORToKKwkJcmV0ID0gb25saW5lX3BhZ2VfY2dyb3VwKG1uLT5zdGFydF9wZm4sCisJCQkJICAgbW4tPm5yX3BhZ2VzLCBtbi0+c3RhdHVzX2NoYW5nZV9uaWQpOworCQlicmVhazsKKwljYXNlIE1FTV9DQU5DRUxfT05MSU5FOgorCWNhc2UgTUVNX09GRkxJTkU6CisJCW9mZmxpbmVfcGFnZV9jZ3JvdXAobW4tPnN0YXJ0X3BmbiwKKwkJCQltbi0+bnJfcGFnZXMsIG1uLT5zdGF0dXNfY2hhbmdlX25pZCk7CisJCWJyZWFrOworCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6CisJCWJyZWFrOworCWNhc2UgTUVNX09OTElORToKKwljYXNlIE1FTV9DQU5DRUxfT0ZGTElORToKKwkJYnJlYWs7CisJfQorCXJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKKwordm9pZCBfX2luaXQgcGFnZV9jZ3JvdXBfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCWludCBmYWlsID0gMDsKKworCWZvciAocGZuID0gMDsgIWZhaWwgJiYgcGZuIDwgbWF4X3BmbjsgcGZuICs9IFBBR0VTX1BFUl9TRUNUSU9OKSB7CisJCWlmICghcGZuX3ByZXNlbnQocGZuKSkKKwkJCWNvbnRpbnVlOworCQlmYWlsID0gaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHBmbik7CisJfQorCWlmIChmYWlsKSB7CisJCXByaW50ayhLRVJOX0NSSVQgInRyeSBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgYm9vdCBvcHRpb25cbiIpOworCQlwYW5pYygiT3V0IG9mIG1lbW9yeSIpOworCX0gZWxzZSB7CisJCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKHBhZ2VfY2dyb3VwX2NhbGxiYWNrLCAwKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiYWxsb2NhdGVkICVsZCBieXRlcyBvZiBwYWdlX2Nncm91cFxuIiwgdG90YWxfdXNhZ2UpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IG9wdGlvbiBpZiB5b3UgZG9uJ3QiCisJIiB3YW50XG4iKTsKK30KKwordm9pZCBfX2luaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQoreworCXJldHVybjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9wZGZsdXNoLmMgYi9tbS9wZGZsdXNoLmMKaW5kZXggMGNiZTBjNi4uYTBhMTRjNCAxMDA2NDQKLS0tIGEvbW0vcGRmbHVzaC5jCisrKyBiL21tL3BkZmx1c2guYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIExpbnVzIFRvcnZhbGRzLgogICoKLSAqIDA5QXByMjAwMglha3BtQHppcC5jb20uYXUKKyAqIDA5QXByMjAwMglBbmRyZXcgTW9ydG9uCiAgKgkJSW5pdGlhbCB2ZXJzaW9uCiAgKiAyOUZlYjIwMDQJa2Fvc0BzZ2kuY29tCiAgKgkJTW92ZSB3b3JrZXIgdGhyZWFkIGNyZWF0aW9uIHRvIGt0aHJlYWQgdG8gYXZvaWQgY2hld2luZwpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA3N2U4ZGRmLi5iZWM4M2MxIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIExpbnVzIFRvcnZhbGRzCiAgKgotICogMDlBcHIyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMDlBcHIyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24uCiAgKi8KIApAQCAtMjI5LDcgKzIyOSw3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgbWF4X3NhbmVfcmVhZGFoZWFkKHVuc2lnbmVkIGxvbmcgbnIpCiB7Ci0JcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkUpCisJcmV0dXJuIG1pbihuciwgKG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfSU5BQ1RJVkVfRklMRSkKIAkJKyBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpKSAvIDIpOwogfQogCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMDM4M2FjZi4uMTA5OTM5NCAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNTMsOSArNTMsNDcgQEAKIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOworI2luY2x1ZGUgImludGVybmFsLmgiCiAKLS8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIG1tYXBfc2VtLiAqLworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit7CisJa21lbV9jYWNoZV9mcmVlKGFub25fdm1hX2NhY2hlcCwgYW5vbl92bWEpOworfQorCisvKioKKyAqIGFub25fdm1hX3ByZXBhcmUgLSBhdHRhY2ggYW4gYW5vbl92bWEgdG8gYSBtZW1vcnkgcmVnaW9uCisgKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvbgorICoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGUgbWVtb3J5IG1hcHBpbmcgZGVzY3JpYmVkIGJ5ICd2bWEnIGhhcworICogYW4gJ2Fub25fdm1hJyBhdHRhY2hlZCB0byBpdCwgc28gdGhhdCB3ZSBjYW4gYXNzb2NpYXRlIHRoZQorICogYW5vbnltb3VzIHBhZ2VzIG1hcHBlZCBpbnRvIGl0IHdpdGggdGhhdCBhbm9uX3ZtYS4KKyAqCisgKiBUaGUgY29tbW9uIGNhc2Ugd2lsbCBiZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSBvbmUsIGJ1dCBpZgorICogaWYgbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlCisgKiBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYSBmcm9tICh2ZXJ5IGNvbW1vbiB3aGVuIHRoZSBvbmx5CisgKiByZWFzb24gZm9yIHNwbGl0dGluZyBhIHZtYSBoYXMgYmVlbiBtcHJvdGVjdCgpKSwgb3Igd2UKKyAqIGFsbG9jYXRlIGEgbmV3IG9uZS4KKyAqCisgKiBBbm9uLXZtYSBhbGxvY2F0aW9ucyBhcmUgdmVyeSBzdWJ0bGUsIGJlY2F1c2Ugd2UgbWF5IGhhdmUKKyAqIG9wdGltaXN0aWNhbGx5IGxvb2tlZCB1cCBhbiBhbm9uX3ZtYSBpbiBwYWdlX2xvY2tfYW5vbl92bWEoKQorICogYW5kIHRoYXQgbWF5IGFjdHVhbGx5IHRvdWNoIHRoZSBzcGlubG9jayBldmVuIGluIHRoZSBuZXdseQorICogYWxsb2NhdGVkIHZtYSAoaXQgZGVwZW5kcyBvbiBSQ1UgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBhbm9uX3ZtYSBpc24ndCBhY3R1YWxseSBkZXN0cm95ZWQpLgorICoKKyAqIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIHByb3BlciBhbm9uX3ZtYSBsb2NraW5nIGV2ZW4KKyAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB3YW50CisgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nCisgKiBhbiBhbm9uX3ZtYS4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWRpbmcuCisgKi8KIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwpAQCAtNjMsMjAgKzEwMSwxNyBAQAogCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpIHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZCwgKmxvY2tlZDsKKwkJc3RydWN0IGFub25fdm1hICphbGxvY2F0ZWQ7CiAKIAkJYW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpOwotCQlpZiAoYW5vbl92bWEpIHsKLQkJCWFsbG9jYXRlZCA9IE5VTEw7Ci0JCQlsb2NrZWQgPSBhbm9uX3ZtYTsKLQkJCXNwaW5fbG9jaygmbG9ja2VkLT5sb2NrKTsKLQkJfSBlbHNlIHsKKwkJYWxsb2NhdGVkID0gTlVMTDsKKwkJaWYgKCFhbm9uX3ZtYSkgewogCQkJYW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpOwogCQkJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlhbGxvY2F0ZWQgPSBhbm9uX3ZtYTsKLQkJCWxvY2tlZCA9IE5VTEw7CiAJCX0KKwkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAKIAkJLyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovCiAJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CkBAIC04Nyw4ICsxMjIsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAotCQlpZiAobG9ja2VkKQotCQkJc3Bpbl91bmxvY2soJmxvY2tlZC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAJCWlmICh1bmxpa2VseShhbGxvY2F0ZWQpKQogCQkJYW5vbl92bWFfZnJlZShhbGxvY2F0ZWQpOwogCX0KQEAgLTE1Nyw3ICsxOTEsNyBAQAogICogR2V0dGluZyBhIGxvY2sgb24gYSBzdGFibGUgYW5vbl92bWEgZnJvbSBhIHBhZ2Ugb2ZmIHRoZSBMUlUgaXMKICAqIHRyaWNreTogcGFnZV9sb2NrX2Fub25fdm1hIHJlbHkgb24gUkNVIHRvIGd1YXJkIGFnYWluc3QgdGhlIHJhY2VzLgogICovCi1zdGF0aWMgc3RydWN0IGFub25fdm1hICpwYWdlX2xvY2tfYW5vbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXVuc2lnbmVkIGxvbmcgYW5vbl9tYXBwaW5nOwpAQCAtMTc3LDcgKzIxMSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7CiAJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTI2OCw2ICszMDIsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBwYWdlX21hcHBlZF9pbl92bWEgLSBjaGVjayB3aGV0aGVyIGEgcGFnZSBpcyByZWFsbHkgbWFwcGVkIGluIGEgVk1BCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICogQHZtYTogdGhlIFZNQSB0byB0ZXN0CisgKgorICogUmV0dXJucyAxIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCBpbnRvIHRoZSBwYWdlIHRhYmxlcyBvZiB0aGUgVk1BLCAwCisgKiBpZiB0aGUgcGFnZSBpcyBub3QgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIHRoaXMgVk1BLiAgT25seQorICogdmFsaWQgZm9yIG5vcm1hbCBmaWxlIG9yIGFub255bW91cyBWTUFzLgorICovCitzdGF0aWMgaW50IHBhZ2VfbWFwcGVkX2luX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXB0ZV90ICpwdGU7CisJc3BpbmxvY2tfdCAqcHRsOworCisJYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkJCS8qIG91dCBvZiB2bWEgcmFuZ2UgKi8KKwkJcmV0dXJuIDA7CisJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIHZtYS0+dm1fbW0sIGFkZHJlc3MsICZwdGwsIDEpOworCWlmICghcHRlKQkJCS8qIHRoZSBwYWdlIGlzIG5vdCBpbiB0aGlzIG1tICovCisJCXJldHVybiAwOworCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBTdWJmdW5jdGlvbnMgb2YgcGFnZV9yZWZlcmVuY2VkOiBwYWdlX3JlZmVyZW5jZWRfb25lIGNhbGxlZAogICogcmVwZWF0ZWRseSBmcm9tIGVpdGhlciBwYWdlX3JlZmVyZW5jZWRfYW5vbiBvciBwYWdlX3JlZmVyZW5jZWRfZmlsZS4KQEAgLTI4OSwxMCArMzQ5LDE3IEBACiAJaWYgKCFwdGUpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBEb24ndCB3YW50IHRvIGVsZXZhdGUgcmVmZXJlbmNlZCBmb3IgbWxvY2tlZCBwYWdlIHRoYXQgZ2V0cyB0aGlzIGZhciwKKwkgKiBpbiBvcmRlciB0aGF0IGl0IHByb2dyZXNzZXMgdG8gdHJ5X3RvX3VubWFwIGFuZCBpcyBtb3ZlZCB0byB0aGUKKwkgKiB1bmV2aWN0YWJsZSBsaXN0LgorCSAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCXJlZmVyZW5jZWQrKzsKIAkJKm1hcGNvdW50ID0gMTsJLyogYnJlYWsgZWFybHkgZnJvbSBsb29wICovCi0JfSBlbHNlIGlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCisJCWdvdG8gb3V0X3VubWFwOworCX0KKworCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCXJlZmVyZW5jZWQrKzsKIAogCS8qIFByZXRlbmQgdGhlIHBhZ2UgaXMgcmVmZXJlbmNlZCBpZiB0aGUgdGFzayBoYXMgdGhlCkBAIC0zMDEsNiArMzY4LDcgQEAKIAkJCXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkKIAkJcmVmZXJlbmNlZCsrOwogCitvdXRfdW5tYXA6CiAJKCptYXBjb3VudCktLTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIG91dDoKQEAgLTM5MCwxMSArNDU4LDYgQEAKIAkJICovCiAJCWlmIChtZW1fY29udCAmJiAhbW1fbWF0Y2hfY2dyb3VwKHZtYS0+dm1fbW0sIG1lbV9jb250KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEfFZNX01BWVNIQVJFKSkKLQkJCQkgID09IChWTV9MT0NLRUR8Vk1fTUFZU0hBUkUpKSB7Ci0JCQlyZWZlcmVuY2VkKys7Ci0JCQlicmVhazsKLQkJfQogCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9vbmUocGFnZSwgdm1hLCAmbWFwY291bnQpOwogCQlpZiAoIW1hcGNvdW50KQogCQkJYnJlYWs7CkBAIC02NzQsOCArNzM3LDggQEAKIAkJCXBhZ2VfY2xlYXJfZGlydHkocGFnZSk7CiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJfQotCi0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwKIAkJCVBhZ2VBbm9uKHBhZ2UpID8gTlJfQU5PTl9QQUdFUyA6IE5SX0ZJTEVfTUFQUEVEKTsKIAkJLyoKQEAgLTcxNywxMSArNzgwLDE2IEBACiAJICogSWYgaXQncyByZWNlbnRseSByZWZlcmVuY2VkIChwZXJoYXBzIHBhZ2VfcmVmZXJlbmNlZAogCSAqIHNraXBwZWQgb3ZlciB0aGlzIG1tKSB0aGVuIHdlIHNob3VsZCByZWFjdGl2YXRlIGl0LgogCSAqLwotCWlmICghbWlncmF0aW9uICYmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgfHwKLQkJCShwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpKSkgewotCQlyZXQgPSBTV0FQX0ZBSUw7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KKwlpZiAoIW1pZ3JhdGlvbikgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpIHsKKwkJCXJldCA9IFNXQVBfRkFJTDsKKwkJCWdvdG8gb3V0X3VubWFwOworCQl9CisgIAl9CiAKIAkvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqLwogCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwYWdlX3RvX3BmbihwYWdlKSk7CkBAIC04MDIsMTIgKzg3MCwxNyBAQAogICogRm9yIHZlcnkgc3BhcnNlbHkgcG9wdWxhdGVkIFZNQXMgdGhpcyBpcyBhIGxpdHRsZSBpbmVmZmljaWVudCAtIGNoYW5jZXMgYXJlCiAgKiB0aGVyZSB0aGVyZSB3b24ndCBiZSBtYW55IHB0ZXMgbG9jYXRlZCB3aXRoaW4gdGhlIHNjYW4gY2x1c3Rlci4gIEluIHRoaXMgY2FzZQogICogbWF5YmUgd2UgY291bGQgc2NhbiBmdXJ0aGVyIC0gdG8gdGhlIGVuZCBvZiB0aGUgcHRlIHBhZ2UsIHBlcmhhcHMuCisgKgorICogTWxvY2tlZCBwYWdlczogIGNoZWNrIFZNX0xPQ0tFRCB1bmRlciBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBpZiB3ZSBjYW4KKyAqIGFjcXVpcmUgaXQgd2l0aG91dCBibG9ja2luZy4gIElmIHZtYSBsb2NrZWQsIG1sb2NrIHRoZSBwYWdlcyBpbiB0aGUgY2x1c3RlciwKKyAqIHJhdGhlciB0aGFuIHVubWFwcGluZyB0aGVtLiAgSWYgd2UgZW5jb3VudGVyIHRoZSAiY2hlY2tfcGFnZSIgdGhhdCB2bXNjYW4gaXMKKyAqIHRyeWluZyB0byB1bm1hcCwgcmV0dXJuIFNXQVBfTUxPQ0ssIGVsc2UgZGVmYXVsdCBTV0FQX0FHQUlOLgogICovCiAjZGVmaW5lIENMVVNURVJfU0laRQltaW4oMzIqUEFHRV9TSVpFLCBQTURfU0laRSkKICNkZWZpbmUgQ0xVU1RFUl9NQVNLCSh+KENMVVNURVJfU0laRSAtIDEpKQogCi1zdGF0aWMgdm9pZCB0cnlfdG9fdW5tYXBfY2x1c3Rlcih1bnNpZ25lZCBsb25nIGN1cnNvciwKLQl1bnNpZ25lZCBpbnQgKm1hcGNvdW50LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2NsdXN0ZXIodW5zaWduZWQgbG9uZyBjdXJzb3IsIHVuc2lnbmVkIGludCAqbWFwY291bnQsCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqY2hlY2tfcGFnZSkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJcGdkX3QgKnBnZDsKQEAgLTgxOSw2ICs4OTIsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKKwlpbnQgbG9ja2VkX3ZtYSA9IDA7CiAKIAlhZGRyZXNzID0gKHZtYS0+dm1fc3RhcnQgKyBjdXJzb3IpICYgQ0xVU1RFUl9NQVNLOwogCWVuZCA9IGFkZHJlc3MgKyBDTFVTVEVSX1NJWkU7CkBAIC04MjksMTUgKzkwNCwyNiBAQAogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1MT0NLX1BBR0VTID0+IGZlYXR1cmUgaXMgY29uZmlndXJlZC4KKwkgKiBpZiB3ZSBjYW4gYWNxdWlyZSB0aGUgbW1hcF9zZW0gZm9yIHJlYWQsIGFuZCB2bWEgaXMgVk1fTE9DS0VELAorCSAqIGtlZXAgdGhlIHNlbSB3aGlsZSBzY2FubmluZyB0aGUgY2x1c3RlciBmb3IgbWxvY2tpbmcgcGFnZXMuCisJICovCisJaWYgKE1MT0NLX1BBR0VTICYmIGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJbG9ja2VkX3ZtYSA9ICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKTsKKwkJaWYgKCFsb2NrZWRfdm1hKQorCQkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOyAvKiBkb24ndCBuZWVkIGl0ICovCisJfQogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIApAQCAtODUwLDYgKzkzNiwxMyBAQAogCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyZXNzLCAqcHRlKTsKIAkJQlVHX09OKCFwYWdlIHx8IFBhZ2VBbm9uKHBhZ2UpKTsKIAorCQlpZiAobG9ja2VkX3ZtYSkgeworCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7ICAgLyogbm8tb3AgaWYgYWxyZWFkeSBtbG9ja2VkICovCisJCQlpZiAocGFnZSA9PSBjaGVja19wYWdlKQorCQkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCQljb250aW51ZTsJLyogZG9uJ3QgdW5tYXAgKi8KKwkJfQorCiAJCWlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSkpCiAJCQljb250aW51ZTsKIApAQCAtODcxLDM5ICs5NjQsMTA0IEBACiAJCSgqbWFwY291bnQpLS07CiAJfQogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKKwlpZiAobG9ja2VkX3ZtYSkKKwkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCisvKgorICogY29tbW9uIGhhbmRsaW5nIGZvciBwYWdlcyBtYXBwZWQgaW4gVk1fTE9DS0VEIHZtYXMKKyAqLworc3RhdGljIGludCB0cnlfdG9fbWxvY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IG1sb2NrZWQgPSAwOworCisJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSkpIHsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCW1sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJbWxvY2tlZCsrOwkvKiByZWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCQl9CisJCXVwX3JlYWQoJnZtYS0+dm1fbW0tPm1tYXBfc2VtKTsKKwl9CisJcmV0dXJuIG1sb2NrZWQ7Cit9CisKKy8qKgorICogdHJ5X3RvX3VubWFwX2Fub24gLSB1bm1hcCBvciB1bmxvY2sgYW5vbnltb3VzIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZAorICogcm1hcCBtZXRob2QKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB1bm1hcC91bmxvY2sKKyAqIEB1bmxvY2s6ICByZXF1ZXN0IGZvciB1bmxvY2sgcmF0aGVyIHRoYW4gdW5tYXAgW3VubGlrZWx5XQorICogQG1pZ3JhdGlvbjogIHVubWFwcGluZyBmb3IgbWlncmF0aW9uIC0gaWdub3JlZCBpZiBAdW5sb2NrCisgKgorICogRmluZCBhbGwgdGhlIG1hcHBpbmdzIG9mIGEgcGFnZSB1c2luZyB0aGUgbWFwcGluZyBwb2ludGVyIGFuZCB0aGUgdm1hIGNoYWlucworICogY29udGFpbmVkIGluIHRoZSBhbm9uX3ZtYSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAvdHJ5X3RvX211bmxvY2sgZm9yCisgKiBhbm9ueW1vdXMgcGFnZXMuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHRyeV90b19tdW5sb2NrKCksIHRoZSBtbWFwX3NlbSBvZiB0aGUgbW0gY29udGFpbmluZyB0aGUgdm1hCisgKiB3aGVyZSB0aGUgcGFnZSB3YXMgZm91bmQgd2lsbCBiZSBoZWxkIGZvciB3cml0ZS4gIFNvLCB3ZSB3b24ndCByZWNoZWNrCisgKiB2bV9mbGFncyBmb3IgdGhhdCBWTUEuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGF0IHZtYSBzaG91bGRuJ3QgYmUKKyAqICdMT0NLRUQuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB1bmxvY2ssIGludCBtaWdyYXRpb24pCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CiAJaW50IHJldCA9IFNXQVBfQUdBSU47CiAKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCisKIAlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm4gcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgewotCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKLQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQotCQkJYnJlYWs7CisJCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7CisJCQlpZiAoISgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYKKwkJCSAgICAgIHBhZ2VfbWFwcGVkX2luX3ZtYShwYWdlLCB2bWEpKSkKKwkJCQljb250aW51ZTsgIC8qIG11c3QgdmlzaXQgYWxsIHVubG9ja2VkIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7ICAvKiBzYXcgYXQgbGVhc3Qgb25lIG1sb2NrZWQgdm1hICovCisJCX0gZWxzZSB7CisJCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKKwkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKKwkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOworCQkJaWYgKG1sb2NrZWQpCisJCQkJYnJlYWs7CS8qIHN0b3AgaWYgYWN0dWFsbHkgbWxvY2tlZCBwYWdlICovCisJCX0KIAl9CiAKIAlwYWdlX3VubG9ja19hbm9uX3ZtYShhbm9uX3ZtYSk7CisKKwlpZiAobWxvY2tlZCkKKwkJcmV0ID0gU1dBUF9NTE9DSzsJLyogYWN0dWFsbHkgbWxvY2tlZCB0aGUgcGFnZSAqLworCWVsc2UgaWYgKHJldCA9PSBTV0FQX01MT0NLKQorCQlyZXQgPSBTV0FQX0FHQUlOOwkvKiBzYXcgVk1fTE9DS0VEIHZtYSAqLworCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwIGZpbGUgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkIHJtYXAgbWV0aG9kCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gdW5tYXAKLSAqIEBtaWdyYXRpb246IG1pZ3JhdGlvbiBmbGFnCisgKiB0cnlfdG9fdW5tYXBfZmlsZSAtIHVubWFwL3VubG9jayBmaWxlIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZCBybWFwIG1ldGhvZAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jaworICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCisgKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKICAqCiAgKiBGaW5kIGFsbCB0aGUgbWFwcGluZ3Mgb2YgYSBwYWdlIHVzaW5nIHRoZSBtYXBwaW5nIHBvaW50ZXIgYW5kIHRoZSB2bWEgY2hhaW5zCiAgKiBjb250YWluZWQgaW4gdGhlIGFkZHJlc3Nfc3BhY2Ugc3RydWN0IGl0IHBvaW50cyB0by4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwIGZvciBvYmplY3QtYmFzZWQgcGFnZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdHJ5X3RvX3VubWFwL3RyeV90b19tdW5sb2NrIGZvcgorICogb2JqZWN0LWJhc2VkIHBhZ2VzLgorICogV2hlbiBjYWxsZWQgZnJvbSB0cnlfdG9fbXVubG9jaygpLCB0aGUgbW1hcF9zZW0gb2YgdGhlIG1tIGNvbnRhaW5pbmcgdGhlIHZtYQorICogd2hlcmUgdGhlIHBhZ2Ugd2FzIGZvdW5kIHdpbGwgYmUgaGVsZCBmb3Igd3JpdGUuICBTbywgd2Ugd29uJ3QgcmVjaGVjaworICogdm1fZmxhZ3MgZm9yIHRoYXQgVk1BLiAgVGhhdCBzaG91bGQgYmUgT0ssIGJlY2F1c2UgdGhhdCB2bWEgc2hvdWxkbid0IGJlCisgKiAnTE9DS0VELgogICovCi1zdGF0aWMgaW50IHRyeV90b191bm1hcF9maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQorc3RhdGljIGludCB0cnlfdG9fdW5tYXBfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHVubG9jaywgaW50IG1pZ3JhdGlvbikKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAJcGdvZmZfdCBwZ29mZiA9IHBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7CkBAIC05MTQsMjAgKzEwNzIsNDQgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9ubF9jdXJzb3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWF4X25sX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBtYXBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbWxvY2tlZCA9IDA7CisKKwlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkKKwkJcmV0ID0gU1dBUF9TVUNDRVNTOwkvKiBkZWZhdWx0IGZvciB0cnlfdG9fbXVubG9jaygpICovCiAKIAlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl2bWFfcHJpb190cmVlX2ZvcmVhY2godm1hLCAmaXRlciwgJm1hcHBpbmctPmlfbW1hcCwgcGdvZmYsIHBnb2ZmKSB7Ci0JCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOwotCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCi0JCQlnb3RvIG91dDsKKwkJaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpIHsKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQorCQkJCWNvbnRpbnVlOwkvKiBtdXN0IHZpc2l0IGFsbCB2bWFzICovCisJCQlyZXQgPSBTV0FQX01MT0NLOworCQl9IGVsc2UgeworCQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIG1pZ3JhdGlvbik7CisJCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHJldCA9PSBTV0FQX01MT0NLKSB7CisJCQltbG9ja2VkID0gdHJ5X3RvX21sb2NrX3BhZ2UocGFnZSwgdm1hKTsKKwkJCWlmIChtbG9ja2VkKQorCQkJCWJyZWFrOyAgLyogc3RvcCBpZiBhY3R1YWxseSBtbG9ja2VkIHBhZ2UgKi8KKwkJfQogCX0KIAorCWlmIChtbG9ja2VkKQorCQlnb3RvIG91dDsKKwogCWlmIChsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiAhbWlncmF0aW9uKQorCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGxlYXZlIG1sb2NrZWQgPT0gMCAqLworCQkJZ290byBvdXQ7CQkvKiBubyBuZWVkIHRvIGxvb2sgZnVydGhlciAqLworCQl9CisJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCiAJCQljb250aW51ZTsKIAkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCQlpZiAoY3Vyc29yID4gbWF4X25sX2N1cnNvcikKQEAgLTkzNyw3ICsxMTE5LDcgQEAKIAkJCW1heF9ubF9zaXplID0gY3Vyc29yOwogCX0KIAotCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFueSBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCAqLworCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFsbCBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCA/ICovCiAJCXJldCA9IFNXQVBfRkFJTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTYxLDEyICsxMTQzLDE2IEBACiAJZG8gewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsCiAJCQkJCQlzaGFyZWQudm1fc2V0Lmxpc3QpIHsKLQkJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgJiYgIW1pZ3JhdGlvbikKKwkJCWlmICghTUxPQ0tfUEFHRVMgJiYgIW1pZ3JhdGlvbiAmJgorCQkJICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKIAkJCQljb250aW51ZTsKIAkJCWN1cnNvciA9ICh1bnNpZ25lZCBsb25nKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAkJCXdoaWxlICggY3Vyc29yIDwgbWF4X25sX2N1cnNvciAmJgogCQkJCWN1cnNvciA8IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgewotCQkJCXRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LCB2bWEpOworCQkJCXJldCA9IHRyeV90b191bm1hcF9jbHVzdGVyKGN1cnNvciwgJm1hcGNvdW50LAorCQkJCQkJCQl2bWEsIHBhZ2UpOworCQkJCWlmIChyZXQgPT0gU1dBUF9NTE9DSykKKwkJCQkJbWxvY2tlZCA9IDI7CS8qIHRvIHJldHVybiBiZWxvdyAqLwogCQkJCWN1cnNvciArPSBDTFVTVEVSX1NJWkU7CiAJCQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjdXJzb3I7CiAJCQkJaWYgKChpbnQpbWFwY291bnQgPD0gMCkKQEAgLTk4Nyw2ICsxMTczLDEwIEBACiAJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCWlmIChtbG9ja2VkKQorCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCisJCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwMiw2ICsxMTkyLDcgQEAKICAqIFNXQVBfU1VDQ0VTUwktIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyBhbGwgbWFwcGluZ3MKICAqIFNXQVBfQUdBSU4JLSB3ZSBtaXNzZWQgYSBtYXBwaW5nLCB0cnkgYWdhaW4gbGF0ZXIKICAqIFNXQVBfRkFJTAktIHRoZSBwYWdlIGlzIHVuc3dhcHBhYmxlCisgKiBTV0FQX01MT0NLCS0gcGFnZSBpcyBtbG9ja2VkLgogICovCiBpbnQgdHJ5X3RvX3VubWFwKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbWlncmF0aW9uKQogewpAQCAtMTAxMCwxMiArMTIwMSwzNiBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlpZiAoUGFnZUFub24ocGFnZSkpCi0JCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIG1pZ3JhdGlvbik7CisJCXJldCA9IHRyeV90b191bm1hcF9hbm9uKHBhZ2UsIDAsIG1pZ3JhdGlvbik7CiAJZWxzZQotCQlyZXQgPSB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCBtaWdyYXRpb24pOwotCi0JaWYgKCFwYWdlX21hcHBlZChwYWdlKSkKKwkJcmV0ID0gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMCwgbWlncmF0aW9uKTsKKwlpZiAocmV0ICE9IFNXQVBfTUxPQ0sgJiYgIXBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qKgorICogdHJ5X3RvX211bmxvY2sgLSB0cnkgdG8gbXVubG9jayBhIHBhZ2UKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBiZSBtdW5sb2NrZWQKKyAqCisgKiBDYWxsZWQgZnJvbSBtdW5sb2NrIGNvZGUuICBDaGVja3MgYWxsIG9mIHRoZSBWTUFzIG1hcHBpbmcgdGhlIHBhZ2UKKyAqIHRvIG1ha2Ugc3VyZSBub2JvZHkgZWxzZSBoYXMgdGhpcyBwYWdlIG1sb2NrZWQuIFRoZSBwYWdlIHdpbGwgYmUKKyAqIHJldHVybmVkIHdpdGggUEdfbWxvY2tlZCBjbGVhcmVkIGlmIG5vIG90aGVyIHZtYXMgaGF2ZSBpdCBtbG9ja2VkLgorICoKKyAqIFJldHVybiB2YWx1ZXMgYXJlOgorICoKKyAqIFNXQVBfU1VDQ0VTUwktIG5vIHZtYSdzIGhvbGRpbmcgcGFnZSBtbG9ja2VkLgorICogU1dBUF9BR0FJTgktIHBhZ2UgbWFwcGVkIGluIG1sb2NrZWQgdm1hIC0tIGNvdWxkbid0IGFjcXVpcmUgbW1hcCBzZW0KKyAqIFNXQVBfTUxPQ0sJLSBwYWdlIGlzIG5vdyBtbG9ja2VkLgorICovCitpbnQgdHJ5X3RvX211bmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpIHx8IFBhZ2VMUlUocGFnZSkpOworCisJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgMSwgMCk7CisJZWxzZQorCQlyZXR1cm4gdHJ5X3RvX3VubWFwX2ZpbGUocGFnZSwgMSwgMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGJmNjZkMDEuLmQzOGQ3ZTYgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzaG1lbV9iYWNraW5nX2Rldl9pbmZvICBfX3JlYWRfbW9zdGx5ID0gewogCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLwotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSywKKwkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0sgfCBCRElfQ0FQX1NXQVBfQkFDS0VELAogCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKIH07CiAKQEAgLTEzNjcsNiArMTM2Nyw3IEBACiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQorCQkJU2V0UGFnZVN3YXBCYWNrZWQoZmlsZXBhZ2UpOwogCiAJCQkvKiBQcmVjaGFyZ2UgcGFnZSB3aGlsZSB3ZSBjYW4gd2FpdCwgY29tcGVuc2F0ZSBhZnRlciAqLwogCQkJZXJyb3IgPSBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShmaWxlcGFnZSwgY3VycmVudC0+bW0sCkBAIC0xNDc2LDEyICsxNDc3LDE2IEBACiAJCWlmICghdXNlcl9zaG1fbG9jayhpbm9kZS0+aV9zaXplLCB1c2VyKSkKIAkJCWdvdG8gb3V0X25vbWVtOwogCQlpbmZvLT5mbGFncyB8PSBWTV9MT0NLRUQ7CisJCW1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CiAJfQogCWlmICghbG9jayAmJiAoaW5mby0+ZmxhZ3MgJiBWTV9MT0NLRUQpICYmIHVzZXIpIHsKIAkJdXNlcl9zaG1fdW5sb2NrKGlub2RlLT5pX3NpemUsIHVzZXIpOwogCQlpbmZvLT5mbGFncyAmPSB+Vk1fTE9DS0VEOworCQltYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKGZpbGUtPmZfbWFwcGluZyk7CisJCXNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlyZXR2YWwgPSAwOworCiBvdXRfbm9tZW06CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXR2YWw7CkBAIC0yNTgwLDYgKzI1ODUsNyBAQAogCXNobWVtX3VuYWNjdF9zaXplKGZsYWdzLCBzaXplKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzaG1lbV9maWxlX3NldHVwKTsKIAogLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA5ZTBjYjMxLi4yMTUyZTQ4IDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC0zMSwxMSArMzEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIC8qIEhvdyBtYW55IHBhZ2VzIGRvIHdlIHRyeSB0byBzd2FwIG9yIHBhZ2UgaW4vb3V0IHRvZ2V0aGVyPyAqLwogaW50IHBhZ2VfY2x1c3RlcjsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjLCBscnVfYWRkX3B2ZWNzKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjW05SX0xSVV9MSVNUU10sIGxydV9hZGRfcHZlY3MpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdldmVjLCBscnVfcm90YXRlX3B2ZWNzKTsKIAogLyoKQEAgLTExNiw4ICsxMTcsOSBAQAogCQkJem9uZSA9IHBhZ2V6b25lOwogCQkJc3Bpbl9sb2NrKCZ6b25lLT5scnVfbG9jayk7CiAJCX0KLQkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKKwkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkgJiYgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCQkJaW50IGxydSA9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbHJ1XS5saXN0KTsKIAkJCXBnbW92ZWQrKzsKIAkJfQogCX0KQEAgLTEzNiw3ICsxMzgsNyBAQAogdm9pZCAgcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpICYmICFQYWdlRGlydHkocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkgJiYKLQkgICAgUGFnZUxSVShwYWdlKSkgeworCSAgICAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpICYmIFBhZ2VMUlUocGFnZSkpIHsKIAkJc3RydWN0IHBhZ2V2ZWMgKnB2ZWM7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE1NywxMiArMTU5LDE5IEBACiAJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJaW50IGZpbGUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWludCBscnUgPSBMUlVfQkFTRSArIGZpbGU7CisJCWRlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKKwogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwotCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CiAJCV9fY291bnRfdm1fZXZlbnQoUEdBQ1RJVkFURSk7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCB0cnVlKTsKKwkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisKKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbISFmaWxlXSsrOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFshIWZpbGVdKys7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogfQpAQCAtMTc2LDcgKzE4NSw4IEBACiAgKi8KIHZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiBQYWdlUmVmZXJlbmNlZChwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CisJaWYgKCFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkgJiYKKwkJCVBhZ2VSZWZlcmVuY2VkKHBhZ2UpICYmIFBhZ2VMUlUocGFnZSkpIHsKIAkJYWN0aXZhdGVfcGFnZShwYWdlKTsKIAkJQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKTsKIAl9IGVsc2UgaWYgKCFQYWdlUmVmZXJlbmNlZChwYWdlKSkgewpAQCAtMTg2LDI4ICsxOTYsNzMgQEAKIAogRVhQT1JUX1NZTUJPTChtYXJrX3BhZ2VfYWNjZXNzZWQpOwogCi0vKioKLSAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2UgdG8gdGhlIHBhZ2UgbGlzdHMKLSAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQKLSAqLwotdm9pZCBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICpwYWdlKQordm9pZCBfX2xydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewotCXN0cnVjdCBwYWdldmVjICpwdmVjID0gJmdldF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpOworCXN0cnVjdCBwYWdldmVjICpwdmVjID0gJmdldF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpW2xydV07CiAKIAlwYWdlX2NhY2hlX2dldChwYWdlKTsKIAlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjKTsKKwkJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBscnUpOwogCXB1dF9jcHVfdmFyKGxydV9hZGRfcHZlY3MpOwogfQogCi12b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdlICpwYWdlKQorLyoqCisgKiBscnVfY2FjaGVfYWRkX2xydSAtIGFkZCBhIHBhZ2UgdG8gYSBwYWdlIGxpc3QKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byB0aGUgTFJVLgorICogQGxydTogdGhlIExSVSBsaXN0IHRvIHdoaWNoIHRoZSBwYWdlIGlzIGFkZGVkLgorICovCit2b2lkIGxydV9jYWNoZV9hZGRfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX2FjdGl2ZV9wdmVjcyk7CisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CisJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwl9IGVsc2UgaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CisJCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCX0KIAotCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwotCWlmICghcGFnZXZlY19hZGQocHZlYywgcGFnZSkpCi0JCV9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShwdmVjKTsKLQlwdXRfY3B1X3ZhcihscnVfYWRkX2FjdGl2ZV9wdmVjcyk7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkgfHwgUGFnZUFjdGl2ZShwYWdlKSB8fCBQYWdlVW5ldmljdGFibGUocGFnZSkpOworCV9fbHJ1X2NhY2hlX2FkZChwYWdlLCBscnUpOworfQorCisvKioKKyAqIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QgLSBhZGQgYSBwYWdlIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKiBAcGFnZTogIHRoZSBwYWdlIHRvIGJlIGFkZGVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKgorICogQWRkIHBhZ2UgZGlyZWN0bHkgdG8gaXRzIHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LiAgVG8gYXZvaWQgcmFjZXMgd2l0aAorICogdGFza3MgdGhhdCBtaWdodCBiZSBtYWtpbmcgdGhlIHBhZ2UgZXZpY3RhYmxlLCB0aHJvdWdoIGVnLiBtdW5sb2NrLAorICogbXVubWFwIG9yIGV4aXQsIHdoaWxlIGl0J3Mgbm90IG9uIHRoZSBscnUsIHdlIHdhbnQgdG8gYWRkIHRoZSBwYWdlCisgKiB3aGlsZSBpdCdzIGxvY2tlZCBvciBvdGhlcndpc2UgImludmlzaWJsZSIgdG8gb3RoZXIgdGFza3MuICBUaGlzIGlzCisgKiBkaWZmaWN1bHQgdG8gZG8gd2hlbiB1c2luZyB0aGUgcGFnZXZlYyBjYWNoZSwgc28gYnlwYXNzIHRoYXQuCisgKi8KK3ZvaWQgYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwlTZXRQYWdlVW5ldmljdGFibGUocGFnZSk7CisJU2V0UGFnZUxSVShwYWdlKTsKKwlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBMUlVfVU5FVklDVEFCTEUpOworCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworfQorCisvKioKKyAqIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlCisgKiBAcGFnZTogIHRoZSBwYWdlIHRvIGJlIGFkZGVkIHRvIExSVQorICogQHZtYTogICB2bWEgaW4gd2hpY2ggcGFnZSBpcyBtYXBwZWQgZm9yIGRldGVybWluaW5nIHJlY2xhaW1hYmlsaXR5CisgKgorICogcGxhY2UgQHBhZ2Ugb24gYWN0aXZlIG9yIHVuZXZpY3RhYmxlIExSVSBsaXN0LCBkZXBlbmRpbmcgb24KKyAqIHBhZ2VfZXZpY3RhYmxlKCkuICBOb3RlIHRoYXQgaWYgdGhlIHBhZ2UgaXMgbm90IGV2aWN0YWJsZSwKKyAqIGl0IGdvZXMgZGlyZWN0bHkgYmFjayBvbnRvIGl0J3Mgem9uZSdzIHVuZXZpY3RhYmxlIGxpc3QuICBJdCBkb2VzCisgKiBOT1QgdXNlIGEgcGVyIGNwdSBwYWdldmVjLgorICovCit2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgdm1hKSkKKwkJbHJ1X2NhY2hlX2FkZF9scnUocGFnZSwgTFJVX0FDVElWRSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSk7CisJZWxzZQorCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOwogfQogCiAvKgpAQCAtMjE3LDE1ICsyNzIsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgZHJhaW5fY3B1X3BhZ2V2ZWNzKGludCBjcHUpCiB7CisJc3RydWN0IHBhZ2V2ZWMgKnB2ZWNzID0gcGVyX2NwdShscnVfYWRkX3B2ZWNzLCBjcHUpOwogCXN0cnVjdCBwYWdldmVjICpwdmVjOworCWludCBscnU7CiAKLQlwdmVjID0gJnBlcl9jcHUobHJ1X2FkZF9wdmVjcywgY3B1KTsKLQlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7Ci0KLQlwdmVjID0gJnBlcl9jcHUobHJ1X2FkZF9hY3RpdmVfcHZlY3MsIGNwdSk7Ci0JaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCi0JCV9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShwdmVjKTsKKwlmb3JfZWFjaF9scnUobHJ1KSB7CisJCXB2ZWMgPSAmcHZlY3NbbHJ1IC0gTFJVX0JBU0VdOworCQlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgbHJ1KTsKKwl9CiAKIAlwdmVjID0gJnBlcl9jcHUobHJ1X3JvdGF0ZV9wdmVjcywgY3B1KTsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkgewpAQCAtMjQ0LDcgKzI5OSw3IEBACiAJcHV0X2NwdSgpOwogfQogCi0jaWZkZWYgQ09ORklHX05VTUEKKyNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSB8fCBkZWZpbmVkKENPTkZJR19VTkVWSUNUQUJMRV9MUlUpCiBzdGF0aWMgdm9pZCBscnVfYWRkX2RyYWluX3Blcl9jcHUoc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSkKIHsKIAlscnVfYWRkX2RyYWluKCk7CkBAIC0zMDgsNiArMzYzLDcgQEAKIAogCQlpZiAoUGFnZUxSVShwYWdlKSkgewogCQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOworCiAJCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewogCQkJCWlmICh6b25lKQogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywKQEAgLTM4MCwxMCArNDM2LDExIEBACiAgKiBBZGQgdGhlIHBhc3NlZCBwYWdlcyB0byB0aGUgTFJVLCB0aGVuIGRyb3AgdGhlIGNhbGxlcidzIHJlZmNvdW50CiAgKiBvbiB0aGVtLiAgUmVpbml0aWFsaXNlcyB0aGUgY2FsbGVyJ3MgcGFnZXZlYy4KICAqLwotdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJaW50IGk7CiAJc3RydWN0IHpvbmUgKnpvbmUgPSBOVUxMOworCVZNX0JVR19PTihpc191bmV2aWN0YWJsZV9scnUobHJ1KSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CkBAIC0zOTUsMzggKzQ1MiwxMyBAQAogCQkJem9uZSA9IHBhZ2V6b25lOwogCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKLQkJU2V0UGFnZUxSVShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQl9Ci0JaWYgKHpvbmUpCi0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCXJlbGVhc2VfcGFnZXMocHZlYy0+cGFnZXMsIHB2ZWMtPm5yLCBwdmVjLT5jb2xkKTsKLQlwYWdldmVjX3JlaW5pdChwdmVjKTsKLX0KLQotRVhQT1JUX1NZTUJPTChfX3BhZ2V2ZWNfbHJ1X2FkZCk7Ci0KLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKQotewotCWludCBpOwotCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KHB2ZWMpOyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLT5wYWdlc1tpXTsKLQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCi0JCWlmIChwYWdlem9uZSAhPSB6b25lKSB7Ci0JCQlpZiAoem9uZSkKLQkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJCXpvbmUgPSBwYWdlem9uZTsKLQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJfQotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7CiAJCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKLQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOworCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisJCVNldFBhZ2VMUlUocGFnZSk7CisJCWlmIChpc19hY3RpdmVfbHJ1KGxydSkpCisJCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwogCX0KIAlpZiAoem9uZSkKIAkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CkBAIC00MzQsNiArNDY2LDggQEAKIAlwYWdldmVjX3JlaW5pdChwdmVjKTsKIH0KIAorRVhQT1JUX1NZTUJPTChfX19fcGFnZXZlY19scnVfYWRkKTsKKwogLyoKICAqIFRyeSB0byBkcm9wIGJ1ZmZlcnMgZnJvbSB0aGUgcGFnZXMgaW4gYSBwYWdldmVjCiAgKi8KQEAgLTQ1Myw2ICs0ODcsMzAgQEAKIH0KIAogLyoqCisgKiBwYWdldmVjX3N3YXBfZnJlZSAtIHRyeSB0byBmcmVlIHN3YXAgc3BhY2UgZnJvbSB0aGUgcGFnZXMgaW4gYSBwYWdldmVjCisgKiBAcHZlYzogcGFnZXZlYyB3aXRoIHN3YXBjYWNoZSBwYWdlcyB0byBmcmVlIHRoZSBzd2FwIHNwYWNlIG9mCisgKgorICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIGFuIGV4dHJhIHJlZmVyZW5jZSB0byBlYWNoIHBhZ2UgYW5kCisgKiBub3QgaG9sZCB0aGUgcGFnZSBsb2NrIG9uIHRoZSBwYWdlcy4gIFRoaXMgZnVuY3Rpb24gdXNlcyBhCisgKiB0cnlsb2NrIG9uIHRoZSBwYWdlIGxvY2sgc28gaXQgbWF5IG5vdCBhbHdheXMgZnJlZSB0aGUgc3dhcAorICogc3BhY2UgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZS4KKyAqLwordm9pZCBwYWdldmVjX3N3YXBfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KHB2ZWMpOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLT5wYWdlc1tpXTsKKworCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSAmJiB0cnlsb2NrX3BhZ2UocGFnZSkpIHsKKwkJCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQorCQkJCXJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihwYWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQl9CisJfQorfQorCisvKioKICAqIHBhZ2V2ZWNfbG9va3VwIC0gZ2FuZyBwYWdlY2FjaGUgbG9va3VwCiAgKiBAcHZlYzoJV2hlcmUgdGhlIHJlc3VsdGluZyBwYWdlcyBhcmUgcGxhY2VkCiAgKiBAbWFwcGluZzoJVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNzk3YzM4My4uMzM1M2M5MCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCisrKyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzMsNyArMzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIHN3YXBfYmFja2luZ19kZXZfaW5mbyA9IHsKLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLIHwgQkRJX0NBUF9TV0FQX0JBQ0tFRCwKIAkudW5wbHVnX2lvX2ZuCT0gc3dhcF91bnBsdWdfaW9fZm4sCiB9OwogCkBAIC03NSw2ICs3NSw3IEBACiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oUGFnZVN3YXBDYWNoZShwYWdlKSk7CiAJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlCVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2UpKTsKIAllcnJvciA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfbWFzayk7CiAJaWYgKCFlcnJvcikgewogCQlwYWdlX2NhY2hlX2dldChwYWdlKTsKQEAgLTMwMiwxNyArMzAzLDE5IEBACiAJCSAqIHJlLXVzaW5nIHRoZSBqdXN0IGZyZWVkIHN3YXAgZW50cnkgZm9yIGFuIGV4aXN0aW5nIHBhZ2UuCiAJCSAqIE1heSBmYWlsICgtRU5PTUVNKSBpZiByYWRpeC10cmVlIG5vZGUgYWxsb2NhdGlvbiBmYWlsZWQuCiAJCSAqLwotCQlzZXRfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlfX3NldF9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCVNldFBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKIAkJZXJyID0gYWRkX3RvX3N3YXBfY2FjaGUobmV3X3BhZ2UsIGVudHJ5LCBnZnBfbWFzayAmIEdGUF9LRVJORUwpOwogCQlpZiAobGlrZWx5KCFlcnIpKSB7CiAJCQkvKgogCQkJICogSW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBwYWdlIGFuZCByZXR1cm4uCiAJCQkgKi8KLQkJCWxydV9jYWNoZV9hZGRfYWN0aXZlKG5ld19wYWdlKTsKKwkJCWxydV9jYWNoZV9hZGRfYW5vbihuZXdfcGFnZSk7CiAJCQlzd2FwX3JlYWRwYWdlKE5VTEwsIG5ld19wYWdlKTsKIAkJCXJldHVybiBuZXdfcGFnZTsKIAkJfQotCQljbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CisJCUNsZWFyUGFnZVN3YXBCYWNrZWQobmV3X3BhZ2UpOworCQlfX2NsZWFyX3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKIAkJc3dhcF9mcmVlKGVudHJ5KTsKIAl9IHdoaWxlIChlcnIgIT0gLUVOT01FTSk7CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDFlMzMwZjIuLjkwY2I2N2EgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgKiBXb3JrIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHByb2Nlc3NlcyBzaGFyaW5nIHRoaXMKICAqIHN3YXAgY2FjaGUgcGFnZS4gRnJlZSBpdCBpZiB5b3UgY2FuLiBSZXR1cm4gc3VjY2Vzcy4KICAqLwotaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvdW50KQogewogCWludCByZXR2YWw7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiBwOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCXJldHVybiAwOwogCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQogCQlyZXR1cm4gMDsKLQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAyKSAvKiAyOiB1cyArIGNhY2hlICovCisJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gY291bnQpIC8qIHVzICsgY2FjaGUgKyBwdGVzICovCiAJCXJldHVybiAwOwogCiAJZW50cnkudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJaWYgKHAtPnN3YXBfbWFwW3N3cF9vZmZzZXQoZW50cnkpXSA9PSAxKSB7CiAJCS8qIFJlY2hlY2sgdGhlIHBhZ2UgY291bnQgd2l0aCB0aGUgc3dhcGNhY2hlIGxvY2sgaGVsZC4uICovCiAJCXNwaW5fbG9ja19pcnEoJnN3YXBwZXJfc3BhY2UudHJlZV9sb2NrKTsKLQkJaWYgKChwYWdlX2NvdW50KHBhZ2UpID09IDIpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CisJCWlmICgocGFnZV9jb3VudChwYWdlKSA9PSBjb3VudCkgJiYgIVBhZ2VXcml0ZWJhY2socGFnZSkpIHsKIAkJCV9fZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwYWdlKTsKIAkJCVNldFBhZ2VEaXJ0eShwYWdlKTsKIAkJCXJldHZhbCA9IDE7CkBAIC0zODgsNiArMzg4LDI1IEBACiB9CiAKIC8qCisgKiBNb3N0IG9mIHRoZSB0aW1lIHRoZSBwYWdlIHNob3VsZCBoYXZlIHR3byByZWZlcmVuY2VzOiBvbmUgZm9yIHRoZQorICogcHJvY2VzcyBhbmQgb25lIGZvciB0aGUgc3dhcCBjYWNoZS4KKyAqLworaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChwYWdlLCAyKTsKK30KKworLyoKKyAqIFRoZSBwYWdlb3V0IGNvZGUgaG9sZHMgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIHRoZSBwYWdlLiAgVGhhdCByYWlzZXMKKyAqIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGVzdCBmb3IgdG8gMiBmb3IgYSBwYWdlIHRoYXQgaXMgb25seSBpbiB0aGUKKyAqIHN3YXAgY2FjaGUgcGx1cyAxIGZvciBlYWNoIHByb2Nlc3MgdGhhdCBtYXBzIHRoZSBwYWdlLgorICovCitpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9jb3VudChwYWdlLCAyICsgcGFnZV9tYXBjb3VudChwYWdlKSk7Cit9CisKKy8qCiAgKiBGcmVlIHRoZSBzd2FwIGVudHJ5IGxpa2UgYWJvdmUsIGJ1dCBhbHNvIHRyeSB0bwogICogZnJlZSB0aGUgcGFnZSBjYWNoZSBlbnRyeSBpZiBpdCBpcyB0aGUgbGFzdCB1c2VyLgogICovCkBAIC00MDMsNyArNDIyLDcgQEAKIAlpZiAocCkgewogCQlpZiAoc3dhcF9lbnRyeV9mcmVlKHAsIHN3cF9vZmZzZXQoZW50cnkpKSA9PSAxKSB7CiAJCQlwYWdlID0gZmluZF9nZXRfcGFnZSgmc3dhcHBlcl9zcGFjZSwgZW50cnkudmFsKTsKLQkJCWlmIChwYWdlICYmIHVubGlrZWx5KCF0cnlsb2NrX3BhZ2UocGFnZSkpKSB7CisJCQlpZiAocGFnZSAmJiAhdHJ5bG9ja19wYWdlKHBhZ2UpKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJCXBhZ2UgPSBOVUxMOwogCQkJfQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggNjY1MGMxZC4uMTIyOTIxMSAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMKICAqCi0gKiAxMFNlcDIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxMFNlcDIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbi4KICAqLwogCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGdyci4gdHJ5X3RvX3JlbGVhc2VfcGFnZSwKIAkJCQkgICBkb19pbnZhbGlkYXRlcGFnZSAqLworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIAogLyoqCkBAIC0xMDMsNiArMTA0LDcgQEAKIAogCWNhbmNlbF9kaXJ0eV9wYWdlKHBhZ2UsIFBBR0VfQ0FDSEVfU0laRSk7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCXJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJQ2xlYXJQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwpAQCAtMTI3LDYgKzEyOSw3IEBACiAJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQogCQlyZXR1cm4gMDsKIAorCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CiAJcmV0ID0gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzUyLDYgKzM1NSw3IEBACiAJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKIAkJZ290byBmYWlsZWQ7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CiAJX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCBiYmEwNmM0Li43MTJhZTQ3IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC04LDYgKzgsNyBAQAogICogIE51bWEgYXdhcmVuZXNzLCBDaHJpc3RvcGggTGFtZXRlciwgU0dJLCBKdW5lIDIwMDUKICAqLwogCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtMTgsMTYgKzE5LDE3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIAotREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7Ci1zdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7Ci0KLXN0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAotCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOworLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqLwogCiBzdGF0aWMgdm9pZCB2dW5tYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC00MCw4ICs0Miw3IEBACiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2dW5tYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIHZvaWQgdnVubWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtNTUsOCArNTYsNyBAQAogCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnVubWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTcwLDEyICs3MCwxMCBAQAogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi12b2lkIHVubWFwX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKIAogCUJVR19PTihhZGRyID49IGVuZCk7CiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwpAQCAtODYsMzUgKzg0LDM2IEBACiAJCQljb250aW51ZTsKIAkJdnVubWFwX3B1ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQpOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSkKLXsKLQl1bm1hcF9rZXJuZWxfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkciwgYXJlYS0+c2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKIHsKIAlwdGVfdCAqcHRlOwogCisJLyoKKwkgKiBuciBpcyBhIHJ1bm5pbmcgaW5kZXggaW50byB0aGUgYXJyYXkgd2hpY2ggaGVscHMgaGlnaGVyIGxldmVsCisJICogY2FsbGVycyBrZWVwIHRyYWNrIG9mIHdoZXJlIHdlJ3JlIHVwIHRvLgorCSAqLworCiAJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHIpOwogCWlmICghcHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gKipwYWdlczsKLQkJV0FSTl9PTighcHRlX25vbmUoKnB0ZSkpOwotCQlpZiAoIXBhZ2UpCisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTsKKworCQlpZiAoV0FSTl9PTighcHRlX25vbmUoKnB0ZSkpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKFdBUk5fT04oIXBhZ2UpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXNldF9wdGVfYXQoJmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKLQkJKCpwYWdlcykrKzsKKwkJKCpucikrKzsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTI0LDE0ICsxMjMsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKSkKKwkJaWYgKHZtYXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2bWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKioqcGFnZXMpCitzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC0xNDEsNDQgKzE0MCw0OSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHZtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMpKQorCQlpZiAodm1hcF9wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKKy8qCisgKiBTZXQgdXAgcGFnZSB0YWJsZXMgaW4ga3ZhIChhZGRyLCBlbmQpLiBUaGUgcHRlcyBzaGFsbCBoYXZlIHByb3QgInByb3QiLCBhbmQKKyAqIHdpbGwgaGF2ZSBwZm5zIGNvcnJlc3BvbmRpbmcgdG8gdGhlICJwYWdlcyIgYXJyYXkuCisgKgorICogSWUuIHB0ZSBhdCBhZGRyK04qUEFHRV9TSVpFIHNoYWxsIHBvaW50IHRvIHBmbiBjb3JyZXNwb25kaW5nIHRvIHBhZ2VzW05dCisgKi8KK3N0YXRpYyBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgKyBhcmVhLT5zaXplIC0gUEFHRV9TSVpFOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CisJaW50IG5yID0gMDsKIAogCUJVR19PTihhZGRyID49IGVuZCk7CiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQllcnIgPSB2bWFwX3B1ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKTsKKwkJZXJyID0gdm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJm5yKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCWZsdXNoX2NhY2hlX3ZtYXAoKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHIsIGVuZCk7Ci0JcmV0dXJuIGVycjsKKwlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7CisKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbnI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXBfdm1fYXJlYSk7CiAKIC8qCi0gKiBNYXAgYSB2bWFsbG9jKCktc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlLgorICogV2FsayBhIHZtYXAgYWRkcmVzcyB0byB0aGUgc3RydWN0IHBhZ2UgaXQgbWFwcy4KICAqLwogc3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICp2bWFsbG9jX2FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2NfYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZXAsIHB0ZTsKIAogCS8qCiAJICogWFhYIHdlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHRoaXMgaWYgd2UgYWRkIFZJUlRVQUxfQlVHX09OIGZvcgpAQCAtMTg4LDEwICsxOTIsMTIgQEAKIAkJCSFpc19tb2R1bGVfYWRkcmVzcyhhZGRyKSk7CiAKIAlpZiAoIXBnZF9ub25lKCpwZ2QpKSB7Ci0JCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKIAkJaWYgKCFwdWRfbm9uZSgqcHVkKSkgewotCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAkJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKKwkJCQlwdGVfdCAqcHRlcCwgcHRlOworCiAJCQkJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCQkJcHRlID0gKnB0ZXA7CiAJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCkBAIC0yMTMsMTMgKzIxOSw3NTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wZm4pOwogCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqCi1fX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCisKKy8qKiogR2xvYmFsIGt2YSBhbGxvY2F0b3IgKioqLworCisjZGVmaW5lIFZNX0xBWllfRlJFRQkweDAxCisjZGVmaW5lIFZNX0xBWllfRlJFRUlORwkweDAyCisjZGVmaW5lIFZNX1ZNX0FSRUEJMHgwNAorCitzdHJ1Y3Qgdm1hcF9hcmVhIHsKKwl1bnNpZ25lZCBsb25nIHZhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdmFfZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsJCS8qIGFkZHJlc3Mgc29ydGVkIHJidHJlZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGFkZHJlc3Mgc29ydGVkIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7CS8qICJsYXp5IHB1cmdlIiBsaXN0ICovCisJdm9pZCAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtYXBfYXJlYV9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB2bWFwX2FyZWFfcm9vdCA9IFJCX1JPT1Q7CitzdGF0aWMgTElTVF9IRUFEKHZtYXBfYXJlYV9saXN0KTsKKworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKl9fZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHZtYXBfYXJlYV9yb290LnJiX25vZGU7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCQl2YSA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlpZiAoYWRkciA8IHZhLT52YV9zdGFydCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gdmEtPnZhX3N0YXJ0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gdmE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0X3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqdG1wOworCisJd2hpbGUgKCpwKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnRtcDsKKworCQlwYXJlbnQgPSAqcDsKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJaWYgKHZhLT52YV9zdGFydCA8IHRtcC0+dmFfZW5kKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmICh2YS0+dmFfZW5kID4gdG1wLT52YV9zdGFydCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKworCXJiX2xpbmtfbm9kZSgmdmEtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZ2YS0+cmJfbm9kZSwgJnZtYXBfYXJlYV9yb290KTsKKworCS8qIGFkZHJlc3Mtc29ydCB0aGlzIGxpc3Qgc28gaXQgaXMgdXNhYmxlIGxpa2UgdGhlIHZtbGlzdCAqLworCXRtcCA9IHJiX3ByZXYoJnZhLT5yYl9ub2RlKTsKKwlpZiAodG1wKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnByZXY7CisJCXByZXYgPSByYl9lbnRyeSh0bXAsIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlsaXN0X2FkZF9yY3UoJnZhLT5saXN0LCAmcHJldi0+bGlzdCk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3JjdSgmdmEtPmxpc3QsICZ2bWFwX2FyZWFfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpOworCisvKgorICogQWxsb2NhdGUgYSByZWdpb24gb2YgS1ZBIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgYWxpZ25tZW50LCB3aXRoaW4gdGhlCisgKiB2c3RhcnQgYW5kIHZlbmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICphbGxvY192bWFwX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJdW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGxvbmcgdmVuZCwKKwkJCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHJiX25vZGUgKm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBwdXJnZWQgPSAwOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKworCWFkZHIgPSBBTElHTih2c3RhcnQsIGFsaWduKTsKKworCXZhID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9hcmVhKSwKKwkJCWdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCF2YSkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCityZXRyeToKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwkvKiBYWFg6IGNvdWxkIGhhdmUgYSBsYXN0X2hvbGUgY2FjaGUgKi8KKwluID0gdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlpZiAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICpmaXJzdCA9IE5VTEw7CisKKwkJZG8geworCQkJc3RydWN0IHZtYXBfYXJlYSAqdG1wOworCQkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQlpZiAodG1wLT52YV9lbmQgPj0gYWRkcikgeworCQkJCWlmICghZmlyc3QgJiYgdG1wLT52YV9zdGFydCA8IGFkZHIgKyBzaXplKQorCQkJCQlmaXJzdCA9IHRtcDsKKwkJCQluID0gbi0+cmJfbGVmdDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSB0bXA7CisJCQkJbiA9IG4tPnJiX3JpZ2h0OworCQkJfQorCQl9IHdoaWxlIChuKTsKKworCQlpZiAoIWZpcnN0KQorCQkJZ290byBmb3VuZDsKKworCQlpZiAoZmlyc3QtPnZhX2VuZCA8IGFkZHIpIHsKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKworCQl3aGlsZSAoYWRkciArIHNpemUgPj0gZmlyc3QtPnZhX3N0YXJ0ICYmIGFkZHIgKyBzaXplIDw9IHZlbmQpIHsKKwkJCWFkZHIgPSBBTElHTihmaXJzdC0+dmFfZW5kICsgUEFHRV9TSVpFLCBhbGlnbik7CisKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9Citmb3VuZDoKKwlpZiAoYWRkciArIHNpemUgPiB2ZW5kKSB7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJCWlmICghcHVyZ2VkKSB7CisJCQlwdXJnZV92bWFwX2FyZWFfbGF6eSgpOworCQkJcHVyZ2VkID0gMTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtYXAgYWxsb2NhdGlvbiBmYWlsZWQ6ICIKKwkJCQkgInVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisJfQorCisJQlVHX09OKGFkZHIgJiAoYWxpZ24tMSkpOworCisJdmEtPnZhX3N0YXJ0ID0gYWRkcjsKKwl2YS0+dmFfZW5kID0gYWRkciArIHNpemU7CisJdmEtPmZsYWdzID0gMDsKKwlfX2luc2VydF92bWFwX2FyZWEodmEpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisKKwlyZXR1cm4gdmE7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3ZhKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJnZhLT5yYl9ub2RlKSk7CisJcmJfZXJhc2UoJnZhLT5yYl9ub2RlLCAmdm1hcF9hcmVhX3Jvb3QpOworCVJCX0NMRUFSX05PREUoJnZhLT5yYl9ub2RlKTsKKwlsaXN0X2RlbF9yY3UoJnZhLT5saXN0KTsKKworCWNhbGxfcmN1KCZ2YS0+cmN1X2hlYWQsIHJjdV9mcmVlX3ZhKTsKK30KKworLyoKKyAqIEZyZWUgYSByZWdpb24gb2YgS1ZBIGFsbG9jYXRlZCBieSBhbGxvY192bWFwX2FyZWEKKyAqLworc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJc3Bpbl9sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKK30KKworLyoKKyAqIENsZWFyIHRoZSBwYWdldGFibGUgZW50cmllcyBvZiBhIGdpdmVuIHZtYXBfYXJlYQorICovCitzdGF0aWMgdm9pZCB1bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJdnVubWFwX3BhZ2VfcmFuZ2UodmEtPnZhX3N0YXJ0LCB2YS0+dmFfZW5kKTsKK30KKworLyoKKyAqIGxhenlfbWF4X3BhZ2VzIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2UgZ2F0aGVyIHVwCisgKiBiZWZvcmUgYXR0ZW1wdGluZyB0byBwdXJnZSB3aXRoIGEgVExCIGZsdXNoLgorICoKKyAqIFRoZXJlIGlzIGEgdHJhZGVvZmYgaGVyZTogYSBsYXJnZXIgbnVtYmVyIHdpbGwgY292ZXIgbW9yZSBrZXJuZWwgcGFnZSB0YWJsZXMKKyAqIGFuZCB0YWtlIHNsaWdodGx5IGxvbmdlciB0byBwdXJnZSwgYnV0IGl0IHdpbGwgbGluZWFybHkgcmVkdWNlIHRoZSBudW1iZXIgb2YKKyAqIGdsb2JhbCBUTEIgZmx1c2hlcyB0aGF0IG11c3QgYmUgcGVyZm9ybWVkLiBJdCB3b3VsZCBzZWVtIG5hdHVyYWwgdG8gc2NhbGUKKyAqIHRoaXMgbnVtYmVyIHVwIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzIChiZWNhdXNlIHZtYXBwaW5nIGFjdGl2aXR5CisgKiBjb3VsZCBhbHNvIHNjYWxlIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzKSwgaG93ZXZlciBpdCBpcyBsaWtlbHkKKyAqIHRoYXQgaW4gcHJhY3RpY2UsIHdvcmtsb2FkcyBtaWdodCBiZSBjb25zdHJhaW5lZCBpbiBvdGhlciB3YXlzIHRoYXQgbWVhbgorICogdm1hcCBhY3Rpdml0eSB3aWxsIG5vdCBzY2FsZSBsaW5lYXJseSB3aXRoIENQVXMuIEFsc28sIEkgd2FudCB0byBiZQorICogY29uc2VydmF0aXZlIGFuZCBub3QgaW50cm9kdWNlIGEgYmlnIGxhdGVuY3kgb24gaHVnZSBzeXN0ZW1zLCBzbyBnbyB3aXRoCisgKiBhIGxlc3MgYWdncmVzc2l2ZSBsb2cgc2NhbGUuIEl0IHdpbGwgc3RpbGwgYmUgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgb2xkCisgKiBjb2RlLCBhbmQgaXQgd2lsbCBiZSBzaW1wbGUgdG8gY2hhbmdlIHRoZSBzY2FsZSBmYWN0b3IgaWYgd2UgZmluZCB0aGF0IGl0CisgKiBiZWNvbWVzIGEgcHJvYmxlbSBvbiBiaWdnZXIgc3lzdGVtcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGF6eV9tYXhfcGFnZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbG9nOworCisJbG9nID0gZmxzKG51bV9vbmxpbmVfY3B1cygpKTsKKworCXJldHVybiBsb2cgKiAoMzJVTCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGF0b21pY190IHZtYXBfbGF6eV9uciA9IEFUT01JQ19JTklUKDApOworCisvKgorICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KKyAqCisgKiBJZiBzeW5jIGlzIDAgdGhlbiBkb24ndCBwdXJnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHVyZ2UgaW4gcHJvZ3Jlc3MuCisgKiBJZiBmb3JjZV9mbHVzaCBpcyAxLCB0aGVuIGZsdXNoIGtlcm5lbCBUTEJzIGJldHdlZW4gKnN0YXJ0IGFuZCAqZW5kIGV2ZW4KKyAqIGlmIHdlIGZvdW5kIG5vIGxhenkgdm1hcCBhcmVhcyB0byB1bm1hcCAoY2FsbGVycyBjYW4gdXNlIHRoaXMgdG8gb3B0aW1pc2UKKyAqIHRoZWlyIG93biBUTEIgZmx1c2hpbmcpLgorICogUmV0dXJucyB3aXRoICpzdGFydCA9IG1pbigqc3RhcnQsIGxvd2VzdCBwdXJnZWQgYWRkcmVzcykKKyAqICAgICAgICAgICAgICAqZW5kID0gbWF4KCplbmQsIGhpZ2hlc3QgcHVyZ2VkIGFkZHJlc3MpCisgKi8KK3N0YXRpYyB2b2lkIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKKwkJCQkJaW50IHN5bmMsIGludCBmb3JjZV9mbHVzaCkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB1cmdlX2xvY2spOworCUxJU1RfSEVBRCh2YWxpc3QpOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCWludCBuciA9IDA7CisKKwkvKgorCSAqIElmIHN5bmMgaXMgMCBidXQgZm9yY2VfZmx1c2ggaXMgMSwgd2UnbGwgZ28gc3luYyBhbnl3YXkgYnV0IGNhbGxlcnMKKwkgKiBzaG91bGQgbm90IGV4cGVjdCBzdWNoIGJlaGF2aW91ci4gVGhpcyBqdXN0IHNpbXBsaWZpZXMgbG9ja2luZyBmb3IKKwkgKiB0aGUgY2FzZSB0aGF0IGlzbid0IGFjdHVhbGx5IHVzZWQgYXQgdGhlIG1vbWVudCBhbnl3YXkuCisJICovCisJaWYgKCFzeW5jICYmICFmb3JjZV9mbHVzaCkgeworCQlpZiAoIXNwaW5fdHJ5bG9jaygmcHVyZ2VfbG9jaykpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCXNwaW5fbG9jaygmcHVyZ2VfbG9jayk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmEsICZ2bWFwX2FyZWFfbGlzdCwgbGlzdCkgeworCQlpZiAodmEtPmZsYWdzICYgVk1fTEFaWV9GUkVFKSB7CisJCQlpZiAodmEtPnZhX3N0YXJ0IDwgKnN0YXJ0KQorCQkJCSpzdGFydCA9IHZhLT52YV9zdGFydDsKKwkJCWlmICh2YS0+dmFfZW5kID4gKmVuZCkKKwkJCQkqZW5kID0gdmEtPnZhX2VuZDsKKwkJCW5yICs9ICh2YS0+dmFfZW5kIC0gdmEtPnZhX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCQkJdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnZhLT5wdXJnZV9saXN0LCAmdmFsaXN0KTsKKwkJCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUVJTkc7CisJCQl2YS0+ZmxhZ3MgJj0gflZNX0xBWllfRlJFRTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChucikgeworCQlCVUdfT04obnIgPiBhdG9taWNfcmVhZCgmdm1hcF9sYXp5X25yKSk7CisJCWF0b21pY19zdWIobnIsICZ2bWFwX2xhenlfbnIpOworCX0KKworCWlmIChuciB8fCBmb3JjZV9mbHVzaCkKKwkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSgqc3RhcnQsICplbmQpOworCisJaWYgKG5yKSB7CisJCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCAmdmFsaXN0LCBwdXJnZV9saXN0KQorCQkJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZwdXJnZV9sb2NrKTsKK30KKworLyoKKyAqIEtpY2sgb2ZmIGEgcHVyZ2Ugb2YgdGhlIG91dHN0YW5kaW5nIGxhenkgYXJlYXMuCisgKi8KK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAwLCAwKTsKK30KKworLyoKKyAqIEZyZWUgYW5kIHVubWFwIGEgdm1hcCBhcmVhCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfdW5tYXBfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKQoreworCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUU7CisJYXRvbWljX2FkZCgodmEtPnZhX2VuZCAtIHZhLT52YV9zdGFydCkgPj4gUEFHRV9TSElGVCwgJnZtYXBfbGF6eV9ucik7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ2bWFwX2xhenlfbnIpID4gbGF6eV9tYXhfcGFnZXMoKSkpCisJCXB1cmdlX3ZtYXBfYXJlYV9sYXp5KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwl2YSA9IF9fZmluZF92bWFwX2FyZWEoYWRkcik7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKworCXJldHVybiB2YTsKK30KKworc3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWFfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwl2YSA9IGZpbmRfdm1hcF9hcmVhKGFkZHIpOworCUJVR19PTighdmEpOworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKK30KKworCisvKioqIFBlciBjcHUga3ZhIGFsbG9jYXRvciAqKiovCisKKy8qCisgKiB2bWFwIHNwYWNlIGlzIGxpbWl0ZWQgZXNwZWNpYWxseSBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcy4gRW5zdXJlIHRoZXJlIGlzCisgKiByb29tIGZvciBhdCBsZWFzdCAxNiBwZXJjcHUgdm1hcCBibG9ja3MgcGVyIENQVS4KKyAqLworLyoKKyAqIElmIHdlIGhhZCBhIGNvbnN0YW50IFZNQUxMT0NfU1RBUlQgYW5kIFZNQUxMT0NfRU5ELCB3ZSdkIGxpa2UgdG8gYmUgYWJsZQorICogdG8gI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoVk1BTExPQ19FTkQtVk1BTExPQ19TVEFSVCkuIEd1ZXNzCisgKiBpbnN0ZWFkICh3ZSBqdXN0IG5lZWQgYSByb3VnaCBpZGVhKQorICovCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoMTI4VUwqMTAyNCoxMDI0KQorI2Vsc2UKKyNkZWZpbmUgVk1BTExPQ19TUEFDRQkJKDEyOFVMKjEwMjQqMTAyNCoxMDI0KQorI2VuZGlmCisKKyNkZWZpbmUgVk1BTExPQ19QQUdFUwkJKFZNQUxMT0NfU1BBQ0UgLyBQQUdFX1NJWkUpCisjZGVmaW5lIFZNQVBfTUFYX0FMTE9DCQlCSVRTX1BFUl9MT05HCS8qIDI1Nksgd2l0aCA0SyBwYWdlcyAqLworI2RlZmluZSBWTUFQX0JCTUFQX0JJVFNfTUFYCTEwMjQJLyogNE1CIHdpdGggNEsgcGFnZXMgKi8KKyNkZWZpbmUgVk1BUF9CQk1BUF9CSVRTX01JTgkoVk1BUF9NQVhfQUxMT0MqMikKKyNkZWZpbmUgVk1BUF9NSU4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpIC8qIGNhbid0IHVzZSBtaW4oKSAqLworI2RlZmluZSBWTUFQX01BWCh4LCB5KQkJKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkgLyogY2FuJ3QgdXNlIG1heCgpICovCisjZGVmaW5lIFZNQVBfQkJNQVBfQklUUwkJVk1BUF9NSU4oVk1BUF9CQk1BUF9CSVRTX01BWCwJCVwKKwkJCQkJVk1BUF9NQVgoVk1BUF9CQk1BUF9CSVRTX01JTiwJXAorCQkJCQkJVk1BTExPQ19QQUdFUyAvIE5SX0NQVVMgLyAxNikpCisKKyNkZWZpbmUgVk1BUF9CTE9DS19TSVpFCQkoVk1BUF9CQk1BUF9CSVRTICogUEFHRV9TSVpFKQorCitzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OworCXVuc2lnbmVkIGludCBucl9kaXJ0eTsKK307CisKK3N0cnVjdCB2bWFwX2Jsb2NrIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwl1bnNpZ25lZCBsb25nIGZyZWUsIGRpcnR5OworCURFQ0xBUkVfQklUTUFQKGFsbG9jX21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwlERUNMQVJFX0JJVE1BUChkaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CisJCX07CisJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwl9OworfTsKKworLyogUXVldWUgb2YgZnJlZSBhbmQgZGlydHkgdm1hcCBibG9ja3MsIGZvciBhbGxvY2F0aW9uIGFuZCBmbHVzaGluZyBwdXJwb3NlcyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlLCB2bWFwX2Jsb2NrX3F1ZXVlKTsKKworLyoKKyAqIFJhZGl4IHRyZWUgb2Ygdm1hcCBibG9ja3MsIGluZGV4ZWQgYnkgYWRkcmVzcywgdG8gcXVpY2tseSBmaW5kIGEgdm1hcCBibG9jaworICogaW4gdGhlIGZyZWUgcGF0aC4gQ291bGQgZ2V0IHJpZCBvZiB0aGlzIGlmIHdlIGNoYW5nZSB0aGUgQVBJIHRvIHJldHVybiBhCisgKiAiY29va2llIiBmcm9tIGFsbG9jLCB0byBiZSBwYXNzZWQgdG8gZnJlZS4gQnV0IG5vIGJpZyBkZWFsIHlldC4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyh2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CitzdGF0aWMgUkFESVhfVFJFRSh2bWFwX2Jsb2NrX3RyZWUsIEdGUF9BVE9NSUMpOworCisvKgorICogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBmYWxsYmFjayBtZWNoYW5pc20gdG8gYWxsb2NhdGUgdmlydHVhbCBtZW1vcnkKKyAqIG91dCBvZiBwYXJ0aWFsbHkgZmlsbGVkIHZtYXAgYmxvY2tzLiBIb3dldmVyIHZtYXAgYmxvY2sgc2l6aW5nIHNob3VsZCBiZQorICogZmFpcmx5IHJlYXNvbmFibGUgYWNjb3JkaW5nIHRvIHRoZSB2bWFsbG9jIHNpemUsIHNvIGl0IHNob3VsZG4ndCBiZSBhCisgKiBiaWcgcHJvYmxlbS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3RvX3ZiX2lkeCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJYWRkciAtPSBWTUFMTE9DX1NUQVJUICYgfihWTUFQX0JMT0NLX1NJWkUtMSk7CisJYWRkciAvPSBWTUFQX0JMT0NLX1NJWkU7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9ibG9jayAqbmV3X3ZtYXBfYmxvY2soZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJdW5zaWduZWQgbG9uZyB2Yl9pZHg7CisJaW50IG5vZGUsIGVycjsKKworCW5vZGUgPSBudW1hX25vZGVfaWQoKTsKKworCXZiID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9ibG9jayksCisJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOworCWlmICh1bmxpa2VseSghdmIpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXZhID0gYWxsb2Nfdm1hcF9hcmVhKFZNQVBfQkxPQ0tfU0laRSwgVk1BUF9CTE9DS19TSVpFLAorCQkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJCQkJbm9kZSwgZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShJU19FUlIodmEpKSkgeworCQlrZnJlZSh2Yik7CisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodmEpKTsKKwl9CisKKwllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWtmcmVlKHZiKTsKKwkJZnJlZV92bWFwX2FyZWEodmEpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ2Yi0+bG9jayk7CisJdmItPnZhID0gdmE7CisJdmItPmZyZWUgPSBWTUFQX0JCTUFQX0JJVFM7CisJdmItPmRpcnR5ID0gMDsKKwliaXRtYXBfemVybyh2Yi0+YWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCWJpdG1hcF96ZXJvKHZiLT5kaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJSU5JVF9MSVNUX0hFQUQoJnZiLT5mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ2Yi0+ZGlydHlfbGlzdCk7CisKKwl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCWVyciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCwgdmIpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CisJQlVHX09OKGVycik7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCXZiLT52YnEgPSB2YnE7CisJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCWxpc3RfYWRkKCZ2Yi0+ZnJlZV9saXN0LCAmdmJxLT5mcmVlKTsKKwlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCisJcmV0dXJuIHZiOworfQorCitzdGF0aWMgdm9pZCByY3VfZnJlZV92YihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB2bWFwX2Jsb2NrLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2Yik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdm1hcF9ibG9jayhzdHJ1Y3Qgdm1hcF9ibG9jayAqdmIpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnRtcDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKworCXNwaW5fbG9jaygmdmItPnZicS0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2Yi0+ZnJlZV9saXN0KSkKKwkJbGlzdF9kZWwoJnZiLT5mcmVlX2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmdmItPmRpcnR5X2xpc3QpKQorCQlsaXN0X2RlbCgmdmItPmRpcnR5X2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKworCXZiX2lkeCA9IGFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCXRtcCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCk7CisJc3Bpbl91bmxvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKKwlCVUdfT04odG1wICE9IHZiKTsKKworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZiLT52YSk7CisJY2FsbF9yY3UoJnZiLT5yY3VfaGVhZCwgcmN1X2ZyZWVfdmIpOworfQorCitzdGF0aWMgdm9pZCAqdmJfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOworCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCXVuc2lnbmVkIGludCBvcmRlcjsKKworCUJVR19PTihzaXplICYgflBBR0VfTUFTSyk7CisJQlVHX09OKHNpemUgPiBQQUdFX1NJWkUqVk1BUF9NQVhfQUxMT0MpOworCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCithZ2FpbjoKKwlyY3VfcmVhZF9sb2NrKCk7CisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZiLCAmdmJxLT5mcmVlLCBmcmVlX2xpc3QpIHsKKwkJaW50IGk7CisKKwkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCWkgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih2Yi0+YWxsb2NfbWFwLAorCQkJCQkJVk1BUF9CQk1BUF9CSVRTLCBvcmRlcik7CisKKwkJaWYgKGkgPj0gMCkgeworCQkJYWRkciA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCUJVR19PTihhZGRyX3RvX3ZiX2lkeChhZGRyKSAhPQorCQkJCQlhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KSk7CisJCQl2Yi0+ZnJlZSAtPSAxVUwgPDwgb3JkZXI7CisJCQlpZiAodmItPmZyZWUgPT0gMCkgeworCQkJCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKKwkJCQlsaXN0X2RlbF9pbml0KCZ2Yi0+ZnJlZV9saXN0KTsKKwkJCQlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCX0KKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKCFhZGRyKSB7CisJCXZiID0gbmV3X3ZtYXBfYmxvY2soZ2ZwX21hc2spOworCQlpZiAoSVNfRVJSKHZiKSkKKwkJCXJldHVybiB2YjsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlyZXR1cm4gKHZvaWQgKilhZGRyOworfQorCitzdGF0aWMgdm9pZCB2Yl9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSpWTUFQX01BWF9BTExPQyk7CisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylhZGRyICYgKFZNQVBfQkxPQ0tfU0laRSAtIDEpOworCisJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJcmN1X3JlYWRfbG9jaygpOworCXZiID0gcmFkaXhfdHJlZV9sb29rdXAoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlCVUdfT04oIXZiKTsKKworCXNwaW5fbG9jaygmdmItPmxvY2spOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odmItPmRpcnR5X21hcCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsIG9yZGVyKTsKKwlpZiAoIXZiLT5kaXJ0eSkgeworCQlzcGluX2xvY2soJnZiLT52YnEtPmxvY2spOworCQlsaXN0X2FkZCgmdmItPmRpcnR5X2xpc3QsICZ2Yi0+dmJxLT5kaXJ0eSk7CisJCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKwl9CisJdmItPmRpcnR5ICs9IDFVTCA8PCBvcmRlcjsKKwlpZiAodmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUykgeworCQlCVUdfT04odmItPmZyZWUgfHwgIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKTsKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJZnJlZV92bWFwX2Jsb2NrKHZiKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKK30KKworLyoqCisgKiB2bV91bm1hcF9hbGlhc2VzIC0gdW5tYXAgb3V0c3RhbmRpbmcgbGF6eSBhbGlhc2VzIGluIHRoZSB2bWFwIGxheWVyCisgKgorICogVGhlIHZtYXAvdm1hbGxvYyBsYXllciBsYXppbHkgZmx1c2hlcyBrZXJuZWwgdmlydHVhbCBtYXBwaW5ncyBwcmltYXJpbHkKKyAqIHRvIGFtb3J0aXplIFRMQiBmbHVzaGluZyBvdmVyaGVhZHMuIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGFueSBwYWdlIHlvdQorICogaGF2ZSBub3csIG1heSwgaW4gYSBmb3JtZXIgbGlmZSwgaGF2ZSBiZWVuIG1hcHBlZCBpbnRvIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIGJ5IHRoZSB2bWFwIGxheWVyIGFuZCBzbyB0aGVyZSBtaWdodCBiZSBzb21lIENQVXMgd2l0aCBUTEIgZW50cmllcworICogc3RpbGwgcmVmZXJlbmNpbmcgdGhhdCBwYWdlIChhZGRpdGlvbmFsIHRvIHRoZSByZWd1bGFyIDE6MSBrZXJuZWwgbWFwcGluZykuCisgKgorICogdm1fdW5tYXBfYWxpYXNlcyBmbHVzaGVzIGFsbCBzdWNoIGxhenkgbWFwcGluZ3MuIEFmdGVyIGl0IHJldHVybnMsIHdlIGNhbgorICogYmUgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIHBhZ2VzIHdlIGhhdmUgY29udHJvbCBvdmVyIHdpbGwgaGF2ZSBhbnkgYWxpYXNlcworICogZnJvbSB0aGUgdm1hcCBsYXllci4KKyAqLwordm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKwlpbnQgY3B1OworCWludCBmbHVzaCA9IDA7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnEgPSAmcGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBjcHUpOworCQlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2YiwgJnZicS0+ZnJlZSwgZnJlZV9saXN0KSB7CisJCQlpbnQgaTsKKworCQkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCQlpID0gZmluZF9maXJzdF9iaXQodmItPmRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwkJCXdoaWxlIChpIDwgVk1BUF9CQk1BUF9CSVRTKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzLCBlOworCQkJCWludCBqOworCQkJCWogPSBmaW5kX25leHRfemVyb19iaXQodmItPmRpcnR5X21hcCwKKwkJCQkJVk1BUF9CQk1BUF9CSVRTLCBpKTsKKworCQkJCXMgPSB2Yi0+dmEtPnZhX3N0YXJ0ICsgKGkgPDwgUEFHRV9TSElGVCk7CisJCQkJZSA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaiA8PCBQQUdFX1NISUZUKTsKKwkJCQl2dW5tYXBfcGFnZV9yYW5nZShzLCBlKTsKKwkJCQlmbHVzaCA9IDE7CisKKwkJCQlpZiAocyA8IHN0YXJ0KQorCQkJCQlzdGFydCA9IHM7CisJCQkJaWYgKGUgPiBlbmQpCisJCQkJCWVuZCA9IGU7CisKKwkJCQlpID0gajsKKwkJCQlpID0gZmluZF9uZXh0X2JpdCh2Yi0+ZGlydHlfbWFwLAorCQkJCQkJCVZNQVBfQkJNQVBfQklUUywgaSk7CisJCQl9CisJCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAxLCBmbHVzaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2bV91bm1hcF9hbGlhc2VzKTsKKworLyoqCisgKiB2bV91bm1hcF9yYW0gLSB1bm1hcCBsaW5lYXIga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc2V0IHVwIGJ5IHZtX21hcF9yYW0KKyAqIEBtZW06IHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHZtX21hcF9yYW0KKyAqIEBjb3VudDogdGhlIGNvdW50IHBhc3NlZCB0byB0aGF0IHZtX21hcF9yYW0gY2FsbCAoY2Fubm90IHVubWFwIHBhcnRpYWwpCisgKi8KK3ZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvdW50IDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCisJQlVHX09OKCFhZGRyKTsKKwlCVUdfT04oYWRkciA8IFZNQUxMT0NfU1RBUlQpOworCUJVR19PTihhZGRyID4gVk1BTExPQ19FTkQpOworCUJVR19PTihhZGRyICYgKFBBR0VfU0laRS0xKSk7CisKKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChtZW0sIHNpemUpOworCisJaWYgKGxpa2VseShjb3VudCA8PSBWTUFQX01BWF9BTExPQykpCisJCXZiX2ZyZWUobWVtLCBzaXplKTsKKwllbHNlCisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhX2FkZHIoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKHZtX3VubWFwX3JhbSk7CisKKy8qKgorICogdm1fbWFwX3JhbSAtIG1hcCBwYWdlcyBsaW5lYXJseSBpbnRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKHZtYWxsb2Mgc3BhY2UpCisgKiBAcGFnZXM6IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyB0byBiZSBtYXBwZWQKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBhZ2VzCisgKiBAbm9kZTogcHJlZmVyIHRvIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBvbiB0aGlzIG5vZGUKKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiB0byB1c2UuIFBBR0VfS0VSTkVMIGZvciByZWd1bGFyIFJBTQorICogQHJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgYWRkcmVzcyB0aGF0IGhhcyBiZWVuIG1hcHBlZCwgb3IgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3ZvaWQgKnZtX21hcF9yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LCBpbnQgbm9kZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBjb3VudCA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkICptZW07CisKKwlpZiAobGlrZWx5KGNvdW50IDw9IFZNQVBfTUFYX0FMTE9DKSkgeworCQltZW0gPSB2Yl9hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKElTX0VSUihtZW0pKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJfSBlbHNlIHsKKwkJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJCXZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIFBBR0VfU0laRSwKKwkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChJU19FUlIodmEpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJYWRkciA9IHZhLT52YV9zdGFydDsKKwkJbWVtID0gKHZvaWQgKilhZGRyOworCX0KKwlpZiAodm1hcF9wYWdlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwcm90LCBwYWdlcykgPCAwKSB7CisJCXZtX3VubWFwX3JhbShtZW0sIGNvdW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBtZW07Cit9CitFWFBPUlRfU1lNQk9MKHZtX21hcF9yYW0pOworCit2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnE7CisKKwkJdmJxID0gJnBlcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CisJCXNwaW5fbG9ja19pbml0KCZ2YnEtPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmdmJxLT5mcmVlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnZicS0+ZGlydHkpOworCQl2YnEtPm5yX2RpcnR5ID0gMDsKKwl9Cit9CisKK3ZvaWQgdW5tYXBfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CisJdnVubWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kKTsKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGVuZCk7Cit9CisKK2ludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIGFyZWEtPnNpemUgLSBQQUdFX1NJWkU7CisJaW50IGVycjsKKworCWVyciA9IHZtYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQsIHByb3QsICpwYWdlcyk7CisJaWYgKGVyciA+IDApIHsKKwkJKnBhZ2VzICs9IGVycjsKKwkJZXJyID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCisvKioqIE9sZCB2bWFsbG9jIGludGVyZmFjZXMgKioqLworREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CitzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCit7CisJc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKnZhOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmIChmbGFncyAmIFZNX0lPUkVNQVApIHsKQEAgLTIzMiwxMyArOTc2LDEyIEBACiAKIAkJYWxpZ24gPSAxdWwgPDwgYml0OwogCX0KLQlhZGRyID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOwotCiAJaWYgKHVubGlrZWx5KCFhcmVhKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI0Nyw0OCArOTkwLDMyIEBACiAJICovCiAJc2l6ZSArPSBQQUdFX1NJWkU7CiAKLQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSBOVUxMIDtwID0gJnRtcC0+bmV4dCkgewotCQlpZiAoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyIDwgYWRkcikgewotCQkJaWYoKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyICsgdG1wLT5zaXplID49IGFkZHIpCi0JCQkJYWRkciA9IEFMSUdOKHRtcC0+c2l6ZSArIAotCQkJCQkgICAgICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciwgYWxpZ24pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChzaXplICsgYWRkcikgPCBhZGRyKQotCQkJZ290byBvdXQ7Ci0JCWlmIChzaXplICsgYWRkciA8PSAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIpCi0JCQlnb3RvIGZvdW5kOwotCQlhZGRyID0gQUxJR04odG1wLT5zaXplICsgKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyLCBhbGlnbik7Ci0JCWlmIChhZGRyID4gZW5kIC0gc2l6ZSkKLQkJCWdvdG8gb3V0OworCXZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzayk7CisJaWYgKElTX0VSUih2YSkpIHsKKwkJa2ZyZWUoYXJlYSk7CisJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoKHNpemUgKyBhZGRyKSA8IGFkZHIpCi0JCWdvdG8gb3V0OwotCWlmIChhZGRyID4gZW5kIC0gc2l6ZSkKLQkJZ290byBvdXQ7Ci0KLWZvdW5kOgotCWFyZWEtPm5leHQgPSAqcDsKLQkqcCA9IGFyZWE7CiAKIAlhcmVhLT5mbGFncyA9IGZsYWdzOwotCWFyZWEtPmFkZHIgPSAodm9pZCAqKWFkZHI7CisJYXJlYS0+YWRkciA9ICh2b2lkICopdmEtPnZhX3N0YXJ0OwogCWFyZWEtPnNpemUgPSBzaXplOwogCWFyZWEtPnBhZ2VzID0gTlVMTDsKIAlhcmVhLT5ucl9wYWdlcyA9IDA7CiAJYXJlYS0+cGh5c19hZGRyID0gMDsKIAlhcmVhLT5jYWxsZXIgPSBjYWxsZXI7CisJdmEtPnByaXZhdGUgPSBhcmVhOworCXZhLT5mbGFncyB8PSBWTV9WTV9BUkVBOworCisJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOworCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gTlVMTDsgcCA9ICZ0bXAtPm5leHQpIHsKKwkJaWYgKHRtcC0+YWRkciA+PSBhcmVhLT5hZGRyKQorCQkJYnJlYWs7CisJfQorCWFyZWEtPm5leHQgPSAqcDsKKwkqcCA9IGFyZWE7CiAJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAKIAlyZXR1cm4gYXJlYTsKLQotb3V0OgotCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwotCWtmcmVlKGFyZWEpOwotCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImFsbG9jYXRpb24gZmFpbGVkOiBvdXQgb2Ygdm1hbGxvYyBzcGFjZSAtIHVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIik7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLApAQCAtMzI4LDM5ICsxMDU1LDE1IEBACiAJCQkJICBnZnBfbWFzaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwotc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpCitzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpCiB7Ci0Jc3RydWN0IHZtX3N0cnVjdCAqdG1wOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOwogCi0JZm9yICh0bXAgPSB2bWxpc3Q7IHRtcCAhPSBOVUxMOyB0bXAgPSB0bXAtPm5leHQpIHsKLQkJIGlmICh0bXAtPmFkZHIgPT0gYWRkcikKLQkJCWJyZWFrOwotCX0KKwl2YSA9IGZpbmRfdm1hcF9hcmVhKCh1bnNpZ25lZCBsb25nKWFkZHIpOworCWlmICh2YSAmJiB2YS0+ZmxhZ3MgJiBWTV9WTV9BUkVBKQorCQlyZXR1cm4gdmEtPnByaXZhdGU7CiAKLQlyZXR1cm4gdG1wOwotfQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIHZtbGlzdF9sb2NrICovCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19yZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQotewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOwotCi0JZm9yIChwID0gJnZtbGlzdCA7ICh0bXAgPSAqcCkgIT0gTlVMTCA7cCA9ICZ0bXAtPm5leHQpIHsKLQkJIGlmICh0bXAtPmFkZHIgPT0gYWRkcikKLQkJCSBnb3RvIGZvdW5kOwotCX0KIAlyZXR1cm4gTlVMTDsKLQotZm91bmQ6Ci0JdW5tYXBfdm1fYXJlYSh0bXApOwotCSpwID0gdG1wLT5uZXh0OwotCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGd1YXJkIHBhZ2UuCi0JICovCi0JdG1wLT5zaXplIC09IFBBR0VfU0laRTsKLQlyZXR1cm4gdG1wOwogfQogCiAvKioKQEAgLTM3MywxMSArMTA3NiwyNCBAQAogICovCiBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKnY7Ci0Jd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCXYgPSBfX3JlbW92ZV92bV9hcmVhKGFkZHIpOwotCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwotCXJldHVybiB2OworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCisJdmEgPSBmaW5kX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAodmEgJiYgdmEtPmZsYWdzICYgVk1fVk1fQVJFQSkgeworCQlzdHJ1Y3Qgdm1fc3RydWN0ICp2bSA9IHZhLT5wcml2YXRlOworCQlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAsICoqcDsKKwkJZnJlZV91bm1hcF92bWFwX2FyZWEodmEpOworCQl2bS0+c2l6ZSAtPSBQQUdFX1NJWkU7CisKKwkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOworCQlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IHZtOyBwID0gJnRtcC0+bmV4dCkKKwkJCTsKKwkJKnAgPSB0bXAtPm5leHQ7CisJCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOworCisJCXJldHVybiB2bTsKKwl9CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIsIGludCBkZWFsbG9jYXRlX3BhZ2VzKQpAQCAtNDg3LDYgKzEyMDMsOCBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWFwKTsKIAorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCisJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcik7CiBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzaywKIAkJCQkgcGdwcm90X3QgcHJvdCwgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKIHsKQEAgLTYxMywxMCArMTMzMSw4IEBACiAKIAlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CiAJaWYgKHJldCkgewotCQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JCWFyZWEgPSBfX2ZpbmRfdm1fYXJlYShyZXQpOworCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX1VTRVJNQVA7Ci0JCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNjk2LDEwICsxNDEyLDggQEAKIAogCXJldCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwMCwyNiArMTUxNCwyNSBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdW5zaWduZWQgbG9uZyB1YWRkciA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyB1c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQlpbnQgcmV0OwogCiAJaWYgKChQQUdFX1NJWkUtMSkgJiAodW5zaWduZWQgbG9uZylhZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9jaygmdm1saXN0X2xvY2spOwotCWFyZWEgPSBfX2ZpbmRfdm1fYXJlYShhZGRyKTsKKwlhcmVhID0gZmluZF92bV9hcmVhKGFkZHIpOwogCWlmICghYXJlYSkKLQkJZ290byBvdXRfZWludmFsX2xvY2tlZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIShhcmVhLT5mbGFncyAmIFZNX1VTRVJNQVApKQotCQlnb3RvIG91dF9laW52YWxfbG9ja2VkOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh1c2l6ZSArIChwZ29mZiA8PCBQQUdFX1NISUZUKSA+IGFyZWEtPnNpemUgLSBQQUdFX1NJWkUpCi0JCWdvdG8gb3V0X2VpbnZhbF9sb2NrZWQ7Ci0JcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRyICs9IHBnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKwkJaW50IHJldDsKKwogCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHVhZGRyLCBwYWdlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC04MzIsMTEgKzE1NDUsNyBAQAogCS8qIFByZXZlbnQgInRoaW5ncyIgbGlrZSBtZW1vcnkgbWlncmF0aW9uPyBWTV9mbGFncyBuZWVkIGEgY2xlYW51cC4uLiAqLwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CiAKLQlyZXR1cm4gcmV0OwotCi1vdXRfZWludmFsX2xvY2tlZDoKLQlyZWFkX3VubG9jaygmdm1saXN0X2xvY2spOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChyZW1hcF92bWFsbG9jX3JhbmdlKTsKIApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAxZmYxYTU4Li4zYjU4NjAyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTc4LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBsb25nICgqaXNvbGF0ZV9wYWdlcykodW5zaWduZWQgbG9uZyBuciwgc3RydWN0IGxpc3RfaGVhZCAqZHN0LAogCQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSwKIAkJCXN0cnVjdCB6b25lICp6LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQlpbnQgYWN0aXZlKTsKKwkJCWludCBhY3RpdmUsIGludCBmaWxlKTsKIH07CiAKICNkZWZpbmUgbHJ1X3RvX3BhZ2UoX2hlYWQpIChsaXN0X2VudHJ5KChfaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQpAQCAtNDcwLDYgKzQ3MSw4NSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHB1dGJhY2tfbHJ1X3BhZ2UgLSBwdXQgcHJldmlvdXNseSBpc29sYXRlZCBwYWdlIG9udG8gYXBwcm9wcmlhdGUgTFJVIGxpc3QKKyAqIEBwYWdlOiBwYWdlIHRvIGJlIHB1dCBiYWNrIHRvIGFwcHJvcHJpYXRlIGxydSBsaXN0CisgKgorICogQWRkIHByZXZpb3VzbHkgaXNvbGF0ZWQgQHBhZ2UgdG8gYXBwcm9wcmlhdGUgTFJVIGxpc3QuCisgKiBQYWdlIG1heSBzdGlsbCBiZSB1bmV2aWN0YWJsZSBmb3Igb3RoZXIgcmVhc29ucy4KKyAqCisgKiBscnVfbG9jayBtdXN0IG5vdCBiZSBoZWxkLCBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZC4KKyAqLworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKK3ZvaWQgcHV0YmFja19scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgbHJ1OworCWludCBhY3RpdmUgPSAhIVRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSk7CisJaW50IHdhc191bmV2aWN0YWJsZSA9IFBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKKworcmVkbzoKKwlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKworCWlmIChwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkgeworCQkvKgorCQkgKiBGb3IgZXZpY3RhYmxlIHBhZ2VzLCB3ZSBjYW4gdXNlIHRoZSBjYWNoZS4KKwkJICogSW4gZXZlbnQgb2YgYSByYWNlLCB3b3JzdCBjYXNlIGlzIHdlIGVuZCB1cCB3aXRoIGFuCisJCSAqIHVuZXZpY3RhYmxlIHBhZ2Ugb24gW2luXWFjdGl2ZSBsaXN0LgorCQkgKiBXZSBrbm93IGhvdyB0byBoYW5kbGUgdGhhdC4KKwkJICovCisJCWxydSA9IGFjdGl2ZSArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwkJbHJ1X2NhY2hlX2FkZF9scnUocGFnZSwgbHJ1KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQdXQgdW5ldmljdGFibGUgcGFnZXMgZGlyZWN0bHkgb24gem9uZSdzIHVuZXZpY3RhYmxlCisJCSAqIGxpc3QuCisJCSAqLworCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CisJCWFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QocGFnZSk7CisJfQorCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCisJLyoKKwkgKiBwYWdlJ3Mgc3RhdHVzIGNhbiBjaGFuZ2Ugd2hpbGUgd2UgbW92ZSBpdCBhbW9uZyBscnUuIElmIGFuIGV2aWN0YWJsZQorCSAqIHBhZ2UgaXMgb24gdW5ldmljdGFibGUgbGlzdCwgaXQgbmV2ZXIgYmUgZnJlZWQuIFRvIGF2b2lkIHRoYXQsCisJICogY2hlY2sgYWZ0ZXIgd2UgYWRkZWQgaXQgdG8gdGhlIGxpc3QsIGFnYWluLgorCSAqLworCWlmIChscnUgPT0gTFJVX1VORVZJQ1RBQkxFICYmIHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSB7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQkJcHV0X3BhZ2UocGFnZSk7CisJCQlnb3RvIHJlZG87CisJCX0KKwkJLyogVGhpcyBtZWFucyBzb21lb25lIGVsc2UgZHJvcHBlZCB0aGlzIHBhZ2UgZnJvbSBMUlUKKwkJICogU28sIGl0IHdpbGwgYmUgZnJlZWQgb3IgcHV0YmFjayB0byBMUlUgYWdhaW4uIFRoZXJlIGlzCisJCSAqIG5vdGhpbmcgdG8gZG8gaGVyZS4KKwkJICovCisJfQorCisJaWYgKHdhc191bmV2aWN0YWJsZSAmJiBscnUgIT0gTFJVX1VORVZJQ1RBQkxFKQorCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR1JFU0NVRUQpOworCWVsc2UgaWYgKCF3YXNfdW5ldmljdGFibGUgJiYgbHJ1ID09IExSVV9VTkVWSUNUQUJMRSkKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdDVUxMRUQpOworCisJcHV0X3BhZ2UocGFnZSk7CQkvKiBkcm9wIHJlZiBmcm9tIGlzb2xhdGUgKi8KK30KKworI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCit2b2lkIHB1dGJhY2tfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IGxydTsKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisKKwlscnUgPSAhIVRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJbHJ1X2NhY2hlX2FkZF9scnUocGFnZSwgbHJ1KTsKKwltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKKwlwdXRfcGFnZShwYWdlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKKwogLyoKICAqIHNocmlua19wYWdlX2xpc3QoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjbGFpbWVkIHBhZ2VzCiAgKi8KQEAgLTUwMyw2ICs1ODMsOSBAQAogCiAJCXNjLT5ucl9zY2FubmVkKys7CiAKKwkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpCisJCQlnb3RvIGN1bGxfbWxvY2tlZDsKKwogCQlpZiAoIXNjLT5tYXlfc3dhcCAmJiBwYWdlX21hcHBlZChwYWdlKSkKIAkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAKQEAgLTUzOSw5ICs2MjIsMTkgQEAKIAkJICogQW5vbnltb3VzIHByb2Nlc3MgbWVtb3J5IGhhcyBiYWNraW5nIHN0b3JlPwogCQkgKiBUcnkgdG8gYWxsb2NhdGUgaXQgc29tZSBzd2FwIHNwYWNlIGhlcmUuCiAJCSAqLwotCQlpZiAoUGFnZUFub24ocGFnZSkgJiYgIVBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCWlmIChQYWdlQW5vbihwYWdlKSAmJiAhUGFnZVN3YXBDYWNoZShwYWdlKSkgeworCQkJc3dpdGNoICh0cnlfdG9fbXVubG9jayhwYWdlKSkgeworCQkJY2FzZSBTV0FQX0ZBSUw6CQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCQljYXNlIFNXQVBfQUdBSU46CisJCQkJZ290byBrZWVwX2xvY2tlZDsKKwkJCWNhc2UgU1dBUF9NTE9DSzoKKwkJCQlnb3RvIGN1bGxfbWxvY2tlZDsKKwkJCWNhc2UgU1dBUF9TVUNDRVNTOgorCQkJCTsgLyogZmFsbCB0aHJ1JzsgYWRkIHRvIHN3YXAgY2FjaGUgKi8KKwkJCX0KIAkJCWlmICghYWRkX3RvX3N3YXAocGFnZSwgR0ZQX0FUT01JQykpCiAJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CisJCX0KICNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLwogCiAJCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CkBAIC01NTYsNiArNjQ5LDggQEAKIAkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCWNhc2UgU1dBUF9BR0FJTjoKIAkJCQlnb3RvIGtlZXBfbG9ja2VkOworCQkJY2FzZSBTV0FQX01MT0NLOgorCQkJCWdvdG8gY3VsbF9tbG9ja2VkOwogCQkJY2FzZSBTV0FQX1NVQ0NFU1M6CiAJCQkJOyAvKiB0cnkgdG8gZnJlZSB0aGUgcGFnZSBiZWxvdyAqLwogCQkJfQpAQCAtNjAyLDcgKzY5Nyw3IEBACiAJCSAqIHBvc3NpYmxlIGZvciBhIHBhZ2UgdG8gaGF2ZSBQYWdlRGlydHkgc2V0LCBidXQgaXQgaXMgYWN0dWFsbHkKIAkJICogY2xlYW4gKGFsbCBpdHMgYnVmZmVycyBhcmUgY2xlYW4pLiAgVGhpcyBoYXBwZW5zIGlmIHRoZQogCQkgKiBidWZmZXJzIHdlcmUgd3JpdHRlbiBvdXQgZGlyZWN0bHksIHdpdGggc3VibWl0X2JoKCkuIGV4dDMKLQkJICogd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzIHRoZSBibG9ja2RldiBtYXBwaW5nLiAKKwkJICogd2lsbCBkbyB0aGlzLCBhcyB3ZWxsIGFzIHRoZSBibG9ja2RldiBtYXBwaW5nLgogCQkgKiB0cnlfdG9fcmVsZWFzZV9wYWdlKCkgd2lsbCBkaXNjb3ZlciB0aGF0IGNsZWFubmVzcyBhbmQgd2lsbAogCQkgKiBkcm9wIHRoZSBidWZmZXJzIGFuZCBtYXJrIHRoZSBwYWdlIGNsZWFuIC0gaXQgY2FuIGJlIGZyZWVkLgogCQkgKgpAQCAtNjM3LDcgKzczMiwxNCBAQAogCQlpZiAoIW1hcHBpbmcgfHwgIV9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgcGFnZSkpCiAJCQlnb3RvIGtlZXBfbG9ja2VkOwogCi0JCXVubG9ja19wYWdlKHBhZ2UpOworCQkvKgorCQkgKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG5vIG90aGVyIHJlZmVyZW5jZXMgYW5kIHRoZXJlIGlzCisJCSAqIG5vIHdheSB0byBwaWNrIGFueSBtb3JlIHVwIChyZW1vdmVkIGZyb20gTFJVLCByZW1vdmVkCisJCSAqIGZyb20gcGFnZWNhY2hlKS4gQ2FuIHVzZSBub24tYXRvbWljIGJpdG9wcyBub3cgKGFuZAorCQkgKiB3ZSBvYnZpb3VzbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3YWtpbmcgdXAgYSBwcm9jZXNzCisJCSAqIHdhaXRpbmcgb24gdGhlIHBhZ2UgbG9jaywgYmVjYXVzZSB0aGVyZSBhcmUgbm8gcmVmZXJlbmNlcy4KKwkJICovCisJCV9fY2xlYXJfcGFnZV9sb2NrZWQocGFnZSk7CiBmcmVlX2l0OgogCQlucl9yZWNsYWltZWQrKzsKIAkJaWYgKCFwYWdldmVjX2FkZCgmZnJlZWRfcHZlYywgcGFnZSkpIHsKQEAgLTY0NiwxNCArNzQ4LDIzIEBACiAJCX0KIAkJY29udGludWU7CiAKK2N1bGxfbWxvY2tlZDoKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCWNvbnRpbnVlOworCiBhY3RpdmF0ZV9sb2NrZWQ6CisJCS8qIE5vdCBhIGNhbmRpZGF0ZSBmb3Igc3dhcHBpbmcsIHNvIHJlY2xhaW0gc3dhcCBzcGFjZS4gKi8KKwkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdm1fc3dhcF9mdWxsKCkpCisJCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYocGFnZSk7CisJCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKIAkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKIAkJcGdhY3RpdmF0ZSsrOwoga2VlcF9sb2NrZWQ6CiAJCXVubG9ja19wYWdlKHBhZ2UpOwoga2VlcDoKIAkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnJldF9wYWdlcyk7Ci0JCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKKwkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKIAl9CiAJbGlzdF9zcGxpY2UoJnJldF9wYWdlcywgcGFnZV9saXN0KTsKIAlpZiAocGFnZXZlY19jb3VudCgmZnJlZWRfcHZlYykpCkBAIC02NzcsNyArNzg4LDcgQEAKICAqCiAgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgLXZlIGVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLWludCBfX2lzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtb2RlKQoraW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUsIGludCBmaWxlKQogewogCWludCByZXQgPSAtRUlOVkFMOwogCkBAIC02OTMsNiArODA0LDE3IEBACiAJaWYgKG1vZGUgIT0gSVNPTEFURV9CT1RIICYmICghUGFnZUFjdGl2ZShwYWdlKSAhPSAhbW9kZSkpCiAJCXJldHVybiByZXQ7CiAKKwlpZiAobW9kZSAhPSBJU09MQVRFX0JPVEggJiYgKCFwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkgIT0gIWZpbGUpKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZvciBsdW1weSByZWNsYWltLCB3ZQorCSAqIGluaXRpYWxseSBsb29rIGludG8gYWxsIExSVSBwYWdlcywgYWN0aXZlLCBpbmFjdGl2ZSBhbmQKKwkgKiB1bmV2aWN0YWJsZTsgb25seSBnaXZlIHNocmlua19wYWdlX2xpc3QgZXZpY3RhYmxlIHBhZ2VzLgorCSAqLworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCXJldHVybiByZXQ7CisKIAlyZXQgPSAtRUJVU1k7CiAJaWYgKGxpa2VseShnZXRfcGFnZV91bmxlc3NfemVybyhwYWdlKSkpIHsKIAkJLyoKQEAgLTcyMywxMiArODQ1LDEzIEBACiAgKiBAc2Nhbm5lZDoJVGhlIG51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZC4KICAqIEBvcmRlcjoJVGhlIGNhbGxlcidzIGF0dGVtcHRlZCBhbGxvY2F0aW9uIG9yZGVyCiAgKiBAbW9kZToJT25lIG9mIHRoZSBMUlUgaXNvbGF0aW9uIG1vZGVzCisgKiBAZmlsZToJVHJ1ZSBbMV0gaWYgaXNvbGF0aW5nIGZpbGUgWyFhbm9uXSBwYWdlcwogICoKICAqIHJldHVybnMgaG93IG1hbnkgcGFnZXMgd2VyZSBtb3ZlZCBvbnRvICpAZHN0LgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9wYWdlcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnNyYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LAotCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsIGludCBtb2RlKQorCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsIGludCBtb2RlLCBpbnQgZmlsZSkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDsKIAl1bnNpZ25lZCBsb25nIHNjYW47CkBAIC03NDUsNyArODY4LDcgQEAKIAogCQlWTV9CVUdfT04oIVBhZ2VMUlUocGFnZSkpOwogCi0JCXN3aXRjaCAoX19pc29sYXRlX2xydV9wYWdlKHBhZ2UsIG1vZGUpKSB7CisJCXN3aXRjaCAoX19pc29sYXRlX2xydV9wYWdlKHBhZ2UsIG1vZGUsIGZpbGUpKSB7CiAJCWNhc2UgMDoKIAkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCBkc3QpOwogCQkJbnJfdGFrZW4rKzsKQEAgLTc4OCwxMCArOTExLDExIEBACiAJCQkJYnJlYWs7CiAKIAkJCWN1cnNvcl9wYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwogCQkJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIG5vdCBjcm9zc2VkIGEgem9uZSBib3VuZGFyeS4gKi8KIAkJCWlmICh1bmxpa2VseShwYWdlX3pvbmVfaWQoY3Vyc29yX3BhZ2UpICE9IHpvbmVfaWQpKQogCQkJCWNvbnRpbnVlOwotCQkJc3dpdGNoIChfX2lzb2xhdGVfbHJ1X3BhZ2UoY3Vyc29yX3BhZ2UsIG1vZGUpKSB7CisJCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShjdXJzb3JfcGFnZSwgbW9kZSwgZmlsZSkpIHsKIAkJCWNhc2UgMDoKIAkJCQlsaXN0X21vdmUoJmN1cnNvcl9wYWdlLT5scnUsIGRzdCk7CiAJCQkJbnJfdGFrZW4rKzsKQEAgLTgwMiw3ICs5MjYsNyBAQAogCQkJCS8qIGVsc2UgaXQgaXMgYmVpbmcgZnJlZWQgZWxzZXdoZXJlICovCiAJCQkJbGlzdF9tb3ZlKCZjdXJzb3JfcGFnZS0+bHJ1LCBzcmMpOwogCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKKwkJCQlicmVhazsJLyogISBvbiBMUlUgb3Igd3JvbmcgbGlzdCAqLwogCQkJfQogCQl9CiAJfQpAQCAtODE2LDQwICs5NDAsOTMgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLAogCQkJCQlpbnQgbW9kZSwgc3RydWN0IHpvbmUgKnosCiAJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY29udCwKLQkJCQkJaW50IGFjdGl2ZSkKKwkJCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpCiB7CisJaW50IGxydSA9IExSVV9CQVNFOwogCWlmIChhY3RpdmUpCi0JCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmFjdGl2ZV9saXN0LCBkc3QsCi0JCQkJCQlzY2FubmVkLCBvcmRlciwgbW9kZSk7Ci0JZWxzZQotCQlyZXR1cm4gaXNvbGF0ZV9scnVfcGFnZXMobnIsICZ6LT5pbmFjdGl2ZV9saXN0LCBkc3QsCi0JCQkJCQlzY2FubmVkLCBvcmRlciwgbW9kZSk7CisJCWxydSArPSBMUlVfQUNUSVZFOworCWlmIChmaWxlKQorCQlscnUgKz0gTFJVX0ZJTEU7CisJcmV0dXJuIGlzb2xhdGVfbHJ1X3BhZ2VzKG5yLCAmei0+bHJ1W2xydV0ubGlzdCwgZHN0LCBzY2FubmVkLCBvcmRlciwKKwkJCQkJCQkJbW9kZSwgISFmaWxlKTsKIH0KIAogLyoKICAqIGNsZWFyX2FjdGl2ZV9mbGFncygpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfYWN0aXZlX2xpc3QoKSwgY2xlYXJpbmcKICAqIGFueSBhY3RpdmUgYml0cyBmcm9tIHRoZSBwYWdlcyBpbiB0aGUgbGlzdC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xlYXJfYWN0aXZlX2ZsYWdzKHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsZWFyX2FjdGl2ZV9mbGFncyhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QsCisJCQkJCXVuc2lnbmVkIGludCAqY291bnQpCiB7CiAJaW50IG5yX2FjdGl2ZSA9IDA7CisJaW50IGxydTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZV9saXN0LCBscnUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBwYWdlX2xpc3QsIGxydSkgeworCQlscnUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CiAJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCQlscnUgKz0gTFJVX0FDVElWRTsKIAkJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAkJCW5yX2FjdGl2ZSsrOwogCQl9CisJCWNvdW50W2xydV0rKzsKKwl9CiAKIAlyZXR1cm4gbnJfYWN0aXZlOwogfQogCisvKioKKyAqIGlzb2xhdGVfbHJ1X3BhZ2UgLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZSBmcm9tIGl0cyBMUlUgbGlzdAorICogQHBhZ2U6IHBhZ2UgdG8gaXNvbGF0ZSBmcm9tIGl0cyBMUlUgbGlzdAorICoKKyAqIElzb2xhdGVzIGEgQHBhZ2UgZnJvbSBhbiBMUlUgbGlzdCwgY2xlYXJzIFBhZ2VMUlUgYW5kIGFkanVzdHMgdGhlCisgKiB2bXN0YXQgc3RhdGlzdGljIGNvcnJlc3BvbmRpbmcgdG8gd2hhdGV2ZXIgTFJVIGxpc3QgdGhlIHBhZ2Ugd2FzIG9uLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgcGFnZSB3YXMgcmVtb3ZlZCBmcm9tIGFuIExSVSBsaXN0LgorICogUmV0dXJucyAtRUJVU1kgaWYgdGhlIHBhZ2Ugd2FzIG5vdCBvbiBhbiBMUlUgbGlzdC4KKyAqCisgKiBUaGUgcmV0dXJuZWQgcGFnZSB3aWxsIGhhdmUgUGFnZUxSVSgpIGNsZWFyZWQuICBJZiBpdCB3YXMgZm91bmQgb24KKyAqIHRoZSBhY3RpdmUgbGlzdCwgaXQgd2lsbCBoYXZlIFBhZ2VBY3RpdmUgc2V0LiAgSWYgaXQgd2FzIGZvdW5kIG9uCisgKiB0aGUgdW5ldmljdGFibGUgbGlzdCwgaXQgd2lsbCBoYXZlIHRoZSBQYWdlVW5ldmljdGFibGUgYml0IHNldC4gVGhhdCBmbGFnCisgKiBtYXkgbmVlZCB0byBiZSBjbGVhcmVkIGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGxldHRpbmcgdGhlIHBhZ2UgZ28uCisgKgorICogVGhlIHZtc3RhdCBzdGF0aXN0aWMgY29ycmVzcG9uZGluZyB0byB0aGUgbGlzdCBvbiB3aGljaCB0aGUgcGFnZSB3YXMKKyAqIGZvdW5kIHdpbGwgYmUgZGVjcmVtZW50ZWQuCisgKgorICogUmVzdHJpY3Rpb25zOgorICogKDEpIE11c3QgYmUgY2FsbGVkIHdpdGggYW4gZWxldmF0ZWQgcmVmY291bnQgb24gdGhlIHBhZ2UuIFRoaXMgaXMgYQorICogICAgIGZ1bmRhbWVudG5hbCBkaWZmZXJlbmNlIGZyb20gaXNvbGF0ZV9scnVfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZAorICogICAgIHdpdGhvdXQgYSBzdGFibGUgcmVmZXJlbmNlKS4KKyAqICgyKSB0aGUgbHJ1X2xvY2sgbXVzdCBub3QgYmUgaGVsZC4KKyAqICgzKSBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZC4KKyAqLworaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IHJldCA9IC1FQlVTWTsKKworCWlmIChQYWdlTFJVKHBhZ2UpKSB7CisJCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOworCisJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpIHsKKwkJCWludCBscnUgPSBwYWdlX2xydShwYWdlKTsKKwkJCXJldCA9IDA7CisJCQlDbGVhclBhZ2VMUlUocGFnZSk7CisKKwkJCWRlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua196b25lKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXIKICAqIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG1heF9zY2FuLAotCQkJCXN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKKwkJCXN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKKwkJCWludCBwcmlvcml0eSwgaW50IGZpbGUpCiB7CiAJTElTVF9IRUFEKHBhZ2VfbGlzdCk7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKQEAgLTg2NiwyMCArMTA0Myw0MyBAQAogCQl1bnNpZ25lZCBsb25nIG5yX3NjYW47CiAJCXVuc2lnbmVkIGxvbmcgbnJfZnJlZWQ7CiAJCXVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlOworCQl1bnNpZ25lZCBpbnQgY291bnRbTlJfTFJVX0xJU1RTXSA9IHsgMCwgfTsKKwkJaW50IG1vZGUgPSBJU09MQVRFX0lOQUNUSVZFOworCisJCS8qCisJCSAqIElmIHdlIG5lZWQgYSBsYXJnZSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSwgb3IgaGF2ZQorCQkgKiB0cm91YmxlIGdldHRpbmcgYSBzbWFsbCBzZXQgb2YgY29udGlndW91cyBwYWdlcywgd2UKKwkJICogd2lsbCByZWNsYWltIGJvdGggYWN0aXZlIGFuZCBpbmFjdGl2ZSBwYWdlcy4KKwkJICoKKwkJICogV2UgdXNlIHRoZSBzYW1lIHRocmVzaG9sZCBhcyBwYWdlb3V0IGNvbmdlc3Rpb25fd2FpdCBiZWxvdy4KKwkJICovCisJCWlmIChzYy0+b3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikKKwkJCW1vZGUgPSBJU09MQVRFX0JPVEg7CisJCWVsc2UgaWYgKHNjLT5vcmRlciAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpCisJCQltb2RlID0gSVNPTEFURV9CT1RIOwogCiAJCW5yX3Rha2VuID0gc2MtPmlzb2xhdGVfcGFnZXMoc2MtPnN3YXBfY2x1c3Rlcl9tYXgsCi0JCQkgICAgICZwYWdlX2xpc3QsICZucl9zY2FuLCBzYy0+b3JkZXIsCi0JCQkgICAgIChzYy0+b3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik/Ci0JCQkJCSAgICAgSVNPTEFURV9CT1RIIDogSVNPTEFURV9JTkFDVElWRSwKLQkJCQl6b25lLCBzYy0+bWVtX2Nncm91cCwgMCk7Ci0JCW5yX2FjdGl2ZSA9IGNsZWFyX2FjdGl2ZV9mbGFncygmcGFnZV9saXN0KTsKKwkJCSAgICAgJnBhZ2VfbGlzdCwgJm5yX3NjYW4sIHNjLT5vcmRlciwgbW9kZSwKKwkJCQl6b25lLCBzYy0+bWVtX2Nncm91cCwgMCwgZmlsZSk7CisJCW5yX2FjdGl2ZSA9IGNsZWFyX2FjdGl2ZV9mbGFncygmcGFnZV9saXN0LCBjb3VudCk7CiAJCV9fY291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgbnJfYWN0aXZlKTsKIAotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCAtbnJfYWN0aXZlKTsKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFLAotCQkJCQkJLShucl90YWtlbiAtIG5yX2FjdGl2ZSkpOwotCQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFLAorCQkJCQkJLWNvdW50W0xSVV9BQ1RJVkVfRklMRV0pOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSwKKwkJCQkJCS1jb3VudFtMUlVfSU5BQ1RJVkVfRklMRV0pOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04sCisJCQkJCQktY291bnRbTFJVX0FDVElWRV9BTk9OXSk7CisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OLAorCQkJCQkJLWNvdW50W0xSVV9JTkFDVElWRV9BTk9OXSk7CisKKwkJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKIAkJCXpvbmUtPnBhZ2VzX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdICs9IGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKKwkJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdICs9IGNvdW50W0xSVV9BQ1RJVkVfQU5PTl07CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSArPSBjb3VudFtMUlVfSU5BQ1RJVkVfRklMRV07CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSArPSBjb3VudFtMUlVfQUNUSVZFX0ZJTEVdOworCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCiAJCW5yX3NjYW5uZWQgKz0gbnJfc2NhbjsKQEAgLTg5OSw3ICsxMDk5LDcgQEAKIAkJCSAqIFRoZSBhdHRlbXB0IGF0IHBhZ2Ugb3V0IG1heSBoYXZlIG1hZGUgc29tZQogCQkJICogb2YgdGhlIHBhZ2VzIGFjdGl2ZSwgbWFyayB0aGVtIGluYWN0aXZlIGFnYWluLgogCQkJICovCi0JCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCk7CisJCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCwgY291bnQpOwogCQkJY291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgbnJfYWN0aXZlKTsKIAogCQkJbnJfZnJlZWQgKz0gc2hyaW5rX3BhZ2VfbGlzdCgmcGFnZV9saXN0LCBzYywKQEAgLTkyNCwxNCArMTEyNCwyNCBAQAogCQkgKiBQdXQgYmFjayBhbnkgdW5mcmVlYWJsZSBwYWdlcy4KIAkJICovCiAJCXdoaWxlICghbGlzdF9lbXB0eSgmcGFnZV9saXN0KSkgeworCQkJaW50IGxydTsKIAkJCXBhZ2UgPSBscnVfdG9fcGFnZSgmcGFnZV9saXN0KTsKIAkJCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKLQkJCVNldFBhZ2VMUlUocGFnZSk7CiAJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQotCQkJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQkJZWxzZQotCQkJCWFkZF9wYWdlX3RvX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCQlpZiAodW5saWtlbHkoIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSkgeworCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJU2V0UGFnZUxSVShwYWdlKTsKKwkJCWxydSA9IHBhZ2VfbHJ1KHBhZ2UpOworCQkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKKwkJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCQkJaWYgKFBhZ2VBY3RpdmUocGFnZSkgJiYgc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgeworCQkJCWludCBmaWxlID0gISFwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCQkJem9uZS0+cmVjZW50X3JvdGF0ZWRbZmlsZV0rKzsKKwkJCX0KIAkJCWlmICghcGFnZXZlY19hZGQoJnB2ZWMsIHBhZ2UpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCQkJX19wYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwpAQCAtOTYyLDExNSArMTE3Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHpvbmVfaXNfbmVhcl9vb20oc3RydWN0IHpvbmUgKnpvbmUpCiB7Ci0JcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0gKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpCi0JCQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSozOwotfQotCi0vKgotICogRGV0ZXJtaW5lIHdlIHNob3VsZCB0cnkgdG8gcmVjbGFpbSBtYXBwZWQgcGFnZXMuCi0gKiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gc2MtPm1lbV9jZ3JvdXAgaXMgTlVMTC4KLSAqLwotc3RhdGljIGludCBjYWxjX3JlY2xhaW1fbWFwcGVkKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3Qgem9uZSAqem9uZSwKLQkJCQlpbnQgcHJpb3JpdHkpCi17Ci0JbG9uZyBtYXBwZWRfcmF0aW87Ci0JbG9uZyBkaXN0cmVzczsKLQlsb25nIHN3YXBfdGVuZGVuY3k7Ci0JbG9uZyBpbWJhbGFuY2U7Ci0JaW50IHJlY2xhaW1fbWFwcGVkID0gMDsKLQlpbnQgcHJldl9wcmlvcml0eTsKLQotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpICYmIHpvbmVfaXNfbmVhcl9vb20oem9uZSkpCi0JCXJldHVybiAxOwotCS8qCi0JICogYGRpc3RyZXNzJyBpcyBhIG1lYXN1cmUgb2YgaG93IG11Y2ggdHJvdWJsZSB3ZSdyZSBoYXZpbmcKLQkgKiByZWNsYWltaW5nIHBhZ2VzLiAgMCAtPiBubyBwcm9ibGVtcy4gIDEwMCAtPiBncmVhdCB0cm91YmxlLgotCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKQotCQlwcmV2X3ByaW9yaXR5ID0gem9uZS0+cHJldl9wcmlvcml0eTsKLQllbHNlCi0JCXByZXZfcHJpb3JpdHkgPSBtZW1fY2dyb3VwX2dldF9yZWNsYWltX3ByaW9yaXR5KHNjLT5tZW1fY2dyb3VwKTsKLQotCWRpc3RyZXNzID0gMTAwID4+IG1pbihwcmV2X3ByaW9yaXR5LCBwcmlvcml0eSk7Ci0KLQkvKgotCSAqIFRoZSBwb2ludCBvZiB0aGlzIGFsZ29yaXRobSBpcyB0byBkZWNpZGUgd2hlbiB0byBzdGFydAotCSAqIHJlY2xhaW1pbmcgbWFwcGVkIG1lbW9yeSBpbnN0ZWFkIG9mIGp1c3QgcGFnZWNhY2hlLiAgV29yayBvdXQKLQkgKiBob3cgbXVjaCBtZW1vcnkKLQkgKiBpcyBtYXBwZWQuCi0JICovCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCi0JCW1hcHBlZF9yYXRpbyA9ICgoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpICsKLQkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BTk9OX1BBR0VTKSkgKiAxMDApIC8KLQkJCQkJdm1fdG90YWxfcGFnZXM7Ci0JZWxzZQotCQltYXBwZWRfcmF0aW8gPSBtZW1fY2dyb3VwX2NhbGNfbWFwcGVkX3JhdGlvKHNjLT5tZW1fY2dyb3VwKTsKLQotCS8qCi0JICogTm93IGRlY2lkZSBob3cgbXVjaCB3ZSByZWFsbHkgd2FudCB0byB1bm1hcCBzb21lIHBhZ2VzLiAgVGhlCi0JICogbWFwcGVkIHJhdGlvIGlzIGRvd25ncmFkZWQgLSBqdXN0IGJlY2F1c2UgdGhlcmUncyBhIGxvdCBvZgotCSAqIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgcGFnZSByZWNsYWltCi0JICogaXNuJ3Qgc3VjY2VlZGluZy4KLQkgKgotCSAqIFRoZSBkaXN0cmVzcyByYXRpbyBpcyBpbXBvcnRhbnQgLSB3ZSBkb24ndCB3YW50IHRvIHN0YXJ0Ci0JICogZ29pbmcgb29tLgotCSAqCi0JICogQSAxMDAlIHZhbHVlIG9mIHZtX3N3YXBwaW5lc3Mgb3ZlcnJpZGVzIHRoaXMgYWxnb3JpdGhtCi0JICogYWx0b2dldGhlci4KLQkgKi8KLQlzd2FwX3RlbmRlbmN5ID0gbWFwcGVkX3JhdGlvIC8gMiArIGRpc3RyZXNzICsgc2MtPnN3YXBwaW5lc3M7Ci0KLQkvKgotCSAqIElmIHRoZXJlJ3MgaHVnZSBpbWJhbGFuY2UgYmV0d2VlbiBhY3RpdmUgYW5kIGluYWN0aXZlCi0JICogKHRoaW5rIGFjdGl2ZSAxMDAgdGltZXMgbGFyZ2VyIHRoYW4gaW5hY3RpdmUpIHdlIHNob3VsZAotCSAqIGJlY29tZSBtb3JlIHBlcm1pc3NpdmUsIG9yIHRoZSBzeXN0ZW0gd2lsbCB0YWtlIHRvbyBtdWNoCi0JICogY3B1IGJlZm9yZSBpdCBzdGFydCBzd2FwcGluZyBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLgotCSAqIERpc3RyZXNzIGlzIGFib3V0IGF2b2lkaW5nIGVhcmx5LW9vbSwgdGhpcyBpcyBhYm91dAotCSAqIG1ha2luZyBzd2FwcGluZXNzIGdyYWNlZnVsIGRlc3BpdGUgc2V0dGluZyBpdCB0byBsb3cKLQkgKiB2YWx1ZXMuCi0JICoKLQkgKiBBdm9pZCBkaXYgYnkgemVybyB3aXRoIG5yX2luYWN0aXZlKzEsIGFuZCBtYXggcmVzdWx0aW5nCi0JICogdmFsdWUgaXMgdm1fdG90YWxfcGFnZXMuCi0JICovCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKLQkJaW1iYWxhbmNlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOwotCQlpbWJhbGFuY2UgLz0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSArIDE7Ci0JfSBlbHNlCi0JCWltYmFsYW5jZSA9IG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc2MtPm1lbV9jZ3JvdXApOwotCi0JLyoKLQkgKiBSZWR1Y2UgdGhlIGVmZmVjdCBvZiBpbWJhbGFuY2UgaWYgc3dhcHBpbmVzcyBpcyBsb3csCi0JICogdGhpcyBtZWFucyBmb3IgYSBzd2FwcGluZXNzIHZlcnkgbG93LCB0aGUgaW1iYWxhbmNlCi0JICogbXVzdCBiZSBtdWNoIGhpZ2hlciB0aGFuIDEwMCBmb3IgdGhpcyBsb2dpYyB0byBtYWtlCi0JICogdGhlIGRpZmZlcmVuY2UuCi0JICoKLQkgKiBNYXggdGVtcG9yYXJ5IHZhbHVlIGlzIHZtX3RvdGFsX3BhZ2VzKjEwMC4KLQkgKi8KLQlpbWJhbGFuY2UgKj0gKHZtX3N3YXBwaW5lc3MgKyAxKTsKLQlpbWJhbGFuY2UgLz0gMTAwOwotCi0JLyoKLQkgKiBJZiBub3QgbXVjaCBvZiB0aGUgcmFtIGlzIG1hcHBlZCwgbWFrZXMgdGhlIGltYmFsYW5jZQotCSAqIGxlc3MgcmVsZXZhbnQsIGl0J3MgaGlnaCBwcmlvcml0eSB3ZSByZWZpbGwgdGhlIGluYWN0aXZlCi0JICogbGlzdCB3aXRoIG1hcHBlZCBwYWdlcyBvbmx5IGluIHByZXNlbmNlIG9mIGhpZ2ggcmF0aW8gb2YKLQkgKiBtYXBwZWQgcGFnZXMuCi0JICoKLQkgKiBNYXggdGVtcG9yYXJ5IHZhbHVlIGlzIHZtX3RvdGFsX3BhZ2VzKjEwMC4KLQkgKi8KLQlpbWJhbGFuY2UgKj0gbWFwcGVkX3JhdGlvOwotCWltYmFsYW5jZSAvPSAxMDA7Ci0KLQkvKiBhcHBseSBpbWJhbGFuY2UgZmVlZGJhY2sgdG8gc3dhcF90ZW5kZW5jeSAqLwotCXN3YXBfdGVuZGVuY3kgKz0gaW1iYWxhbmNlOwotCi0JLyoKLQkgKiBOb3cgdXNlIHRoaXMgbWV0cmljIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHN0YXJ0IG1vdmluZyBtYXBwZWQKLQkgKiBtZW1vcnkgb250byB0aGUgaW5hY3RpdmUgbGlzdC4KLQkgKi8KLQlpZiAoc3dhcF90ZW5kZW5jeSA+PSAxMDApCi0JCXJlY2xhaW1fbWFwcGVkID0gMTsKLQotCXJldHVybiByZWNsYWltX21hcHBlZDsKKwlyZXR1cm4gem9uZS0+cGFnZXNfc2Nhbm5lZCA+PSAoem9uZV9scnVfcGFnZXMoem9uZSkgKiAzKTsKIH0KIAogLyoKQEAgLTEwOTMsNTMgKzExOTUsNzEgQEAKIAogCiBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBwcmlvcml0eSkKKwkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgcHJpb3JpdHksIGludCBmaWxlKQogewogCXVuc2lnbmVkIGxvbmcgcGdtb3ZlZDsKIAlpbnQgcGdkZWFjdGl2YXRlID0gMDsKIAl1bnNpZ25lZCBsb25nIHBnc2Nhbm5lZDsKIAlMSVNUX0hFQUQobF9ob2xkKTsJLyogVGhlIHBhZ2VzIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi8KLQlMSVNUX0hFQUQobF9pbmFjdGl2ZSk7CS8qIFBhZ2VzIHRvIGdvIG9udG8gdGhlIGluYWN0aXZlX2xpc3QgKi8KLQlMSVNUX0hFQUQobF9hY3RpdmUpOwkvKiBQYWdlcyB0byBnbyBvbnRvIHRoZSBhY3RpdmVfbGlzdCAqLworCUxJU1RfSEVBRChsX2luYWN0aXZlKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCWludCByZWNsYWltX21hcHBlZCA9IDA7Ci0KLQlpZiAoc2MtPm1heV9zd2FwKQotCQlyZWNsYWltX21hcHBlZCA9IGNhbGNfcmVjbGFpbV9tYXBwZWQoc2MsIHpvbmUsIHByaW9yaXR5KTsKKwllbnVtIGxydV9saXN0IGxydTsKIAogCWxydV9hZGRfZHJhaW4oKTsKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJcGdtb3ZlZCA9IHNjLT5pc29sYXRlX3BhZ2VzKG5yX3BhZ2VzLCAmbF9ob2xkLCAmcGdzY2FubmVkLCBzYy0+b3JkZXIsCiAJCQkJCUlTT0xBVEVfQUNUSVZFLCB6b25lLAotCQkJCQlzYy0+bWVtX2Nncm91cCwgMSk7CisJCQkJCXNjLT5tZW1fY2dyb3VwLCAxLCBmaWxlKTsKIAkvKgogCSAqIHpvbmUtPnBhZ2VzX3NjYW5uZWQgaXMgdXNlZCBmb3IgZGV0ZWN0IHpvbmUncyBvb20KIAkgKiBtZW1fY2dyb3VwIHJlbWVtYmVycyBucl9zY2FuIGJ5IGl0c2VsZi4KIAkgKi8KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKKwlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgewogCQl6b25lLT5wYWdlc19zY2FubmVkICs9IHBnc2Nhbm5lZDsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbISFmaWxlXSArPSBwZ21vdmVkOworCX0KIAotCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUsIC1wZ21vdmVkKTsKKwlpZiAoZmlsZSkKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFLCAtcGdtb3ZlZCk7CisJZWxzZQorCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04sIC1wZ21vdmVkKTsKIAlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAorCXBnbW92ZWQgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbF9ob2xkKSkgewogCQljb25kX3Jlc2NoZWQoKTsKIAkJcGFnZSA9IGxydV90b19wYWdlKCZsX2hvbGQpOwogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKSB7Ci0JCQlpZiAoIXJlY2xhaW1fbWFwcGVkIHx8Ci0JCQkgICAgKHRvdGFsX3N3YXBfcGFnZXMgPT0gMCAmJiBQYWdlQW5vbihwYWdlKSkgfHwKLQkJCSAgICBwYWdlX3JlZmVyZW5jZWQocGFnZSwgMCwgc2MtPm1lbV9jZ3JvdXApKSB7Ci0JCQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmxfYWN0aXZlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KKworCQlpZiAodW5saWtlbHkoIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSkgeworCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJLyogcGFnZV9yZWZlcmVuY2VkIGNsZWFycyBQYWdlUmVmZXJlbmNlZCAqLworCQlpZiAocGFnZV9tYXBwaW5nX2ludXNlKHBhZ2UpICYmCisJCSAgICBwYWdlX3JlZmVyZW5jZWQocGFnZSwgMCwgc2MtPm1lbV9jZ3JvdXApKQorCQkJcGdtb3ZlZCsrOworCiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2luYWN0aXZlKTsKIAl9CiAKKwkvKgorCSAqIENvdW50IHJlZmVyZW5jZWQgcGFnZXMgZnJvbSBjdXJyZW50bHkgdXNlZCBtYXBwaW5ncyBhcworCSAqIHJvdGF0ZWQsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZSBsaXN0LgorCSAqIFRoaXMgaGVscHMgYmFsYW5jZSBzY2FuIHByZXNzdXJlIGJldHdlZW4gZmlsZSBhbmQgYW5vbnltb3VzCisJICogcGFnZXMgaW4gZ2V0X3NjYW5fcmF0aW8uCisJICovCisJem9uZS0+cmVjZW50X3JvdGF0ZWRbISFmaWxlXSArPSBwZ21vdmVkOworCisJLyoKKwkgKiBNb3ZlIHRoZSBwYWdlcyB0byB0aGUgW2ZpbGUgb3IgYW5vbl0gaW5hY3RpdmUgbGlzdC4KKwkgKi8KIAlwYWdldmVjX2luaXQoJnB2ZWMsIDEpOworCiAJcGdtb3ZlZCA9IDA7CisJbHJ1ID0gTFJVX0JBU0UgKyBmaWxlICogTFJVX0ZJTEU7CiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbF9pbmFjdGl2ZSkpIHsKIAkJcGFnZSA9IGxydV90b19wYWdlKCZsX2luYWN0aXZlKTsKQEAgLTExNDksMTEgKzEyNjksMTEgQEAKIAkJVk1fQlVHX09OKCFQYWdlQWN0aXZlKHBhZ2UpKTsKIAkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwogCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBmYWxzZSk7CisJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOwogCQlwZ21vdmVkKys7CiAJCWlmICghcGFnZXZlY19hZGQoJnB2ZWMsIHBhZ2UpKSB7Ci0JCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUsIHBnbW92ZWQpOworCQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbHJ1LCBwZ21vdmVkKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQkJcGdkZWFjdGl2YXRlICs9IHBnbW92ZWQ7CiAJCQlwZ21vdmVkID0gMDsKQEAgLTExNjMsMTA0ICsxMjgzLDE4OSBAQAogCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQl9CiAJfQotCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSwgcGdtb3ZlZCk7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbHJ1LCBwZ21vdmVkKTsKIAlwZ2RlYWN0aXZhdGUgKz0gcGdtb3ZlZDsKIAlpZiAoYnVmZmVyX2hlYWRzX292ZXJfbGltaXQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCXBhZ2V2ZWNfc3RyaXAoJnB2ZWMpOwogCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJfQotCi0JcGdtb3ZlZCA9IDA7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZsX2FjdGl2ZSkpIHsKLQkJcGFnZSA9IGxydV90b19wYWdlKCZsX2FjdGl2ZSk7Ci0JCXByZWZldGNod19wcmV2X2xydV9wYWdlKHBhZ2UsICZsX2FjdGl2ZSwgZmxhZ3MpOwotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7Ci0JCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7Ci0KLQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCB0cnVlKTsKLQkJcGdtb3ZlZCsrOwotCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewotCQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgcGdtb3ZlZCk7Ci0JCQlwZ21vdmVkID0gMDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQkJX19wYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwotCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQl9Ci0JfQotCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUsIHBnbW92ZWQpOwotCiAJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1JFRklMTCwgem9uZSwgcGdzY2FubmVkKTsKIAlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIHBnZGVhY3RpdmF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJaWYgKHZtX3N3YXBfZnVsbCgpKQorCQlwYWdldmVjX3N3YXBfZnJlZSgmcHZlYyk7CiAKIAlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLAorCXN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5KQoreworCWludCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKKworCWlmIChscnUgPT0gTFJVX0FDVElWRV9GSUxFKSB7CisJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHksIGZpbGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobHJ1ID09IExSVV9BQ1RJVkVfQU5PTiAmJgorCSAgICAoIXNjYW5fZ2xvYmFsX2xydShzYykgfHwgaW5hY3RpdmVfYW5vbl9pc19sb3coem9uZSkpKSB7CisJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHksIGZpbGUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSwgZmlsZSk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaG93IGFnZ3Jlc3NpdmVseSB0aGUgYW5vbiBhbmQgZmlsZSBMUlUgbGlzdHMgc2hvdWxkIGJlCisgKiBzY2FubmVkLiAgVGhlIHJlbGF0aXZlIHZhbHVlIG9mIGVhY2ggc2V0IG9mIExSVSBsaXN0cyBpcyBkZXRlcm1pbmVkCisgKiBieSBsb29raW5nIGF0IHRoZSBmcmFjdGlvbiBvZiB0aGUgcGFnZXMgc2Nhbm5lZCB3ZSBkaWQgcm90YXRlIGJhY2sKKyAqIG9udG8gdGhlIGFjdGl2ZSBsaXN0IGluc3RlYWQgb2YgZXZpY3QuCisgKgorICogcGVyY2VudFswXSBzcGVjaWZpZXMgaG93IG11Y2ggcHJlc3N1cmUgdG8gcHV0IG9uIHJhbS9zd2FwIGJhY2tlZAorICogbWVtb3J5LCB3aGlsZSBwZXJjZW50WzFdIGRldGVybWluZXMgcHJlc3N1cmUgb24gdGhlIGZpbGUgTFJVcy4KKyAqLworc3RhdGljIHZvaWQgZ2V0X3NjYW5fcmF0aW8oc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAorCQkJCQl1bnNpZ25lZCBsb25nICpwZXJjZW50KQoreworCXVuc2lnbmVkIGxvbmcgYW5vbiwgZmlsZSwgZnJlZTsKKwl1bnNpZ25lZCBsb25nIGFub25fcHJpbywgZmlsZV9wcmlvOworCXVuc2lnbmVkIGxvbmcgYXAsIGZwOworCisJYW5vbiAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pICsKKwkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCWZpbGUgID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFKSArCisJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFKTsKKwlmcmVlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKKworCS8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIHBhZ2VzLiAqLworCWlmIChucl9zd2FwX3BhZ2VzIDw9IDApIHsKKwkJcGVyY2VudFswXSA9IDA7CisJCXBlcmNlbnRbMV0gPSAxMDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB3ZSBoYXZlIHZlcnkgZmV3IHBhZ2UgY2FjaGUgcGFnZXMsIGZvcmNlLXNjYW4gYW5vbiBwYWdlcy4gKi8KKwlpZiAodW5saWtlbHkoZmlsZSArIGZyZWUgPD0gem9uZS0+cGFnZXNfaGlnaCkpIHsKKwkJcGVyY2VudFswXSA9IDEwMDsKKwkJcGVyY2VudFsxXSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9LLCBzbyB3ZSBoYXZlIHN3YXAgc3BhY2UgYW5kIGEgZmFpciBhbW91bnQgb2YgcGFnZSBjYWNoZQorCSAqIHBhZ2VzLiAgV2UgdXNlIHRoZSByZWNlbnRseSByb3RhdGVkIC8gcmVjZW50bHkgc2Nhbm5lZAorCSAqIHJhdGlvcyB0byBkZXRlcm1pbmUgaG93IHZhbHVhYmxlIGVhY2ggY2FjaGUgaXMuCisJICoKKwkgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWQgb3ZlcmZsb3cpCisJICogd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmcgYXZlcmFnZSwgd2hpY2ggZW5kcworCSAqIHVwIHdlaWdoaW5nIHJlY2VudCByZWZlcmVuY2VzIG1vcmUgdGhhbiBvbGQgb25lcy4KKwkgKgorCSAqIGFub24gaW4gWzBdLCBmaWxlIGluIFsxXQorCSAqLworCWlmICh1bmxpa2VseSh6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSA+IGFub24gLyA0KSkgeworCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdIC89IDI7CisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWzBdIC89IDI7CisJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCX0KKworCWlmICh1bmxpa2VseSh6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSA+IGZpbGUgLyA0KSkgeworCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzFdIC89IDI7CisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWzFdIC89IDI7CisJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCX0KKworCS8qCisJICogV2l0aCBzd2FwcGluZXNzIGF0IDEwMCwgYW5vbnltb3VzIGFuZCBmaWxlIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuCisJICogVGhpcyBzY2FubmluZyBwcmlvcml0eSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBJTyBjb3N0LgorCSAqLworCWFub25fcHJpbyA9IHNjLT5zd2FwcGluZXNzOworCWZpbGVfcHJpbyA9IDIwMCAtIHNjLT5zd2FwcGluZXNzOworCisJLyoKKwkgKiAgICAgICAgICAgICAgICAgIGFub24gICAgICAgcmVjZW50X3JvdGF0ZWRbMF0KKwkgKiAlYW5vbiA9IDEwMCAqIC0tLS0tLS0tLS0tIC8gLS0tLS0tLS0tLS0tLS0tLS0gKiBJTyBjb3N0CisJICogICAgICAgICAgICAgICBhbm9uICsgZmlsZSAgICAgIHJvdGF0ZV9zdW0KKwkgKi8KKwlhcCA9IChhbm9uX3ByaW8gKyAxKSAqICh6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSArIDEpOworCWFwIC89IHpvbmUtPnJlY2VudF9yb3RhdGVkWzBdICsgMTsKKworCWZwID0gKGZpbGVfcHJpbyArIDEpICogKHpvbmUtPnJlY2VudF9zY2FubmVkWzFdICsgMSk7CisJZnAgLz0gem9uZS0+cmVjZW50X3JvdGF0ZWRbMV0gKyAxOworCisJLyogTm9ybWFsaXplIHRvIHBlcmNlbnRhZ2VzICovCisJcGVyY2VudFswXSA9IDEwMCAqIGFwIC8gKGFwICsgZnAgKyAxKTsKKwlwZXJjZW50WzFdID0gMTAwIC0gcGVyY2VudFswXTsKK30KKworCiAvKgogICogVGhpcyBpcyBhIGJhc2ljIHBlci16b25lIHBhZ2UgZnJlZXIuICBVc2VkIGJ5IGJvdGgga3N3YXBkIGFuZCBkaXJlY3QgcmVjbGFpbS4KICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3pvbmUoaW50IHByaW9yaXR5LCBzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKLQl1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZTsKLQl1bnNpZ25lZCBsb25nIG5yX2luYWN0aXZlOworCXVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47CiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGVyY2VudFsyXTsJLyogYW5vbiBAIDA7IGZpbGUgQCAxICovCisJZW51bSBscnVfbGlzdCBsOwogCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKLQkJLyoKLQkJICogQWRkIG9uZSB0byBucl90b19zY2FuIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGtlcm5lbAotCQkgKiB3aWxsIHNsb3dseSBzaWZ0IHRocm91Z2ggdGhlIGFjdGl2ZSBsaXN0LgotCQkgKi8KLQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgKz0KLQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKSA+PiBwcmlvcml0eSkgKyAxOwotCQlucl9hY3RpdmUgPSB6b25lLT5ucl9zY2FuX2FjdGl2ZTsKLQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSArPQotCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkgPj4gcHJpb3JpdHkpICsgMTsKLQkJbnJfaW5hY3RpdmUgPSB6b25lLT5ucl9zY2FuX2luYWN0aXZlOwotCQlpZiAobnJfaW5hY3RpdmUgPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCi0JCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKLQkJZWxzZQotCQkJbnJfaW5hY3RpdmUgPSAwOworCWdldF9zY2FuX3JhdGlvKHpvbmUsIHNjLCBwZXJjZW50KTsKIAotCQlpZiAobnJfYWN0aXZlID49IHNjLT5zd2FwX2NsdXN0ZXJfbWF4KQotCQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQllbHNlCi0JCQlucl9hY3RpdmUgPSAwOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRoaXMgcmVjbGFpbSBvY2N1cnMgbm90IGJlY2F1c2Ugem9uZSBtZW1vcnkgc2hvcnRhZ2UgYnV0Ci0JCSAqIGJlY2F1c2UgbWVtb3J5IGNvbnRyb2xsZXIgaGl0cyBpdHMgbGltaXQuCi0JCSAqIFRoZW4sIGRvbid0IG1vZGlmeSB6b25lIHJlY2xhaW0gcmVsYXRlZCBkYXRhLgotCQkgKi8KLQkJbnJfYWN0aXZlID0gbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1fYWN0aXZlKHNjLT5tZW1fY2dyb3VwLAotCQkJCQl6b25lLCBwcmlvcml0eSk7CisJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSB7CisJCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7CisJCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGwpOworCQkJaW50IHNjYW47CiAKLQkJbnJfaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzYy0+bWVtX2Nncm91cCwKLQkJCQkJem9uZSwgcHJpb3JpdHkpOwotCX0KLQotCi0Jd2hpbGUgKG5yX2FjdGl2ZSB8fCBucl9pbmFjdGl2ZSkgewotCQlpZiAobnJfYWN0aXZlKSB7Ci0JCQlucl90b19zY2FuID0gbWluKG5yX2FjdGl2ZSwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpc2MtPnN3YXBfY2x1c3Rlcl9tYXgpOwotCQkJbnJfYWN0aXZlIC09IG5yX3RvX3NjYW47Ci0JCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5KTsKLQkJfQotCi0JCWlmIChucl9pbmFjdGl2ZSkgewotCQkJbnJfdG9fc2NhbiA9IG1pbihucl9pbmFjdGl2ZSwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpc2MtPnN3YXBfY2x1c3Rlcl9tYXgpOwotCQkJbnJfaW5hY3RpdmUgLT0gbnJfdG9fc2NhbjsKLQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLAotCQkJCQkJCQlzYyk7CisJCQlzY2FuID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CisJCQlpZiAocHJpb3JpdHkpIHsKKwkJCQlzY2FuID4+PSBwcmlvcml0eTsKKwkJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKKwkJCX0KKwkJCXpvbmUtPmxydVtsXS5ucl9zY2FuICs9IHNjYW47CisJCQlucltsXSA9IHpvbmUtPmxydVtsXS5ucl9zY2FuOworCQkJaWYgKG5yW2xdID49IHNjLT5zd2FwX2NsdXN0ZXJfbWF4KQorCQkJCXpvbmUtPmxydVtsXS5ucl9zY2FuID0gMDsKKwkJCWVsc2UKKwkJCQlucltsXSA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhpcyByZWNsYWltIG9jY3VycyBub3QgYmVjYXVzZSB6b25lIG1lbW9yeSBzaG9ydGFnZQorCQkJICogYnV0IGJlY2F1c2UgbWVtb3J5IGNvbnRyb2xsZXIgaGl0cyBpdHMgbGltaXQuCisJCQkgKiBEb24ndCBtb2RpZnkgem9uZSByZWNsYWltIHJlbGF0ZWQgZGF0YS4KKwkJCSAqLworCQkJbnJbbF0gPSBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzYy0+bWVtX2Nncm91cCwgem9uZSwKKwkJCQkJCQkJcHJpb3JpdHksIGwpOwogCQl9CiAJfQogCisJd2hpbGUgKG5yW0xSVV9JTkFDVElWRV9BTk9OXSB8fCBucltMUlVfQUNUSVZFX0ZJTEVdIHx8CisJCQkJCW5yW0xSVV9JTkFDVElWRV9GSUxFXSkgeworCQlmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIHsKKwkJCWlmIChucltsXSkgeworCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJbbF0sCisJCQkJCSh1bnNpZ25lZCBsb25nKXNjLT5zd2FwX2NsdXN0ZXJfbWF4KTsKKwkJCQlucltsXSAtPSBucl90b19zY2FuOworCisJCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sCisJCQkJCQkJem9uZSwgc2MsIHByaW9yaXR5KTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogRXZlbiBpZiB3ZSBkaWQgbm90IHRyeSB0byBldmljdCBhbm9uIHBhZ2VzIGF0IGFsbCwgd2Ugd2FudCB0bworCSAqIHJlYmFsYW5jZSB0aGUgYW5vbiBscnUgYWN0aXZlL2luYWN0aXZlIHJhdGlvLgorCSAqLworCWlmICghc2Nhbl9nbG9iYWxfbHJ1KHNjKSB8fCBpbmFjdGl2ZV9hbm9uX2lzX2xvdyh6b25lKSkKKwkJc2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIHpvbmUsIHNjLCBwcmlvcml0eSwgMCk7CisJZWxzZSBpZiAoIXNjYW5fZ2xvYmFsX2xydShzYykpCisJCXNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCB6b25lLCBzYywgcHJpb3JpdHksIDApOworCiAJdGhyb3R0bGVfdm1fd3JpdGVvdXQoc2MtPmdmcF9tYXNrKTsKIAlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQpAQCAtMTMyMSw3ICsxNTI2LDcgQEAKIAogCXJldHVybiBucl9yZWNsYWltZWQ7CiB9Ci0gCisKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGRpcmVjdCBwYWdlIHJlY2xhaW0uCiAgKgpAQCAtMTM2NCw4ICsxNTY5LDcgQEAKIAkJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCQljb250aW51ZTsKIAotCQkJbHJ1X3BhZ2VzICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpCi0JCQkJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJCWxydV9wYWdlcyArPSB6b25lX2xydV9wYWdlcyh6b25lKTsKIAkJfQogCX0KIApAQCAtMTU1NSw2ICsxNzU5LDE0IEBACiAJCQkgICAgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKgorCQkJICogRG8gc29tZSBiYWNrZ3JvdW5kIGFnaW5nIG9mIHRoZSBhbm9uIGxpc3QsIHRvIGdpdmUKKwkJCSAqIHBhZ2VzIGEgY2hhbmNlIHRvIGJlIHJlZmVyZW5jZWQgYmVmb3JlIHJlY2xhaW1pbmcuCisJCQkgKi8KKwkJCWlmIChpbmFjdGl2ZV9hbm9uX2lzX2xvdyh6b25lKSkKKwkJCQlzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgem9uZSwKKwkJCQkJCQkmc2MsIHByaW9yaXR5LCAwKTsKKwogCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgem9uZS0+cGFnZXNfaGlnaCwKIAkJCQkJICAgICAgIDAsIDApKSB7CiAJCQkJZW5kX3pvbmUgPSBpOwpAQCAtMTU2Nyw4ICsxNzc5LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8PSBlbmRfem9uZTsgaSsrKSB7CiAJCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKIAotCQkJbHJ1X3BhZ2VzICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpCi0JCQkJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJCWxydV9wYWdlcyArPSB6b25lX2xydV9wYWdlcyh6b25lKTsKIAkJfQogCiAJCS8qCkBAIC0xNjEyLDggKzE4MjMsNyBAQAogCQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAobnJfc2xhYiA9PSAwICYmIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0KLQkJCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkKLQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkpICogNikKKwkJCQkJCSh6b25lX2xydV9wYWdlcyh6b25lKSAqIDYpKQogCQkJCQl6b25lX3NldF9mbGFnKHpvbmUsCiAJCQkJCQkgICAgICBaT05FX0FMTF9VTlJFQ0xBSU1BQkxFKTsKIAkJCS8qCkBAIC0xNjY3LDcgKzE4NzcsNyBAQAogCiAvKgogICogVGhlIGJhY2tncm91bmQgcGFnZW91dCBkYWVtb24sIHN0YXJ0ZWQgYXMgYSBrZXJuZWwgdGhyZWFkCi0gKiBmcm9tIHRoZSBpbml0IHByb2Nlc3MuIAorICogZnJvbSB0aGUgaW5pdCBwcm9jZXNzLgogICoKICAqIFRoaXMgYmFzaWNhbGx5IHRyaWNrbGVzIG91dCBwYWdlcyBzbyB0aGF0IHdlIGhhdmUgX3NvbWVfCiAgKiBmcmVlIG1lbW9yeSBhdmFpbGFibGUgZXZlbiBpZiB0aGVyZSBpcyBubyBvdGhlciBhY3Rpdml0eQpAQCAtMTc2MSw2ICsxOTcxLDE0IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogfQogCit1bnNpZ25lZCBsb25nIGdsb2JhbF9scnVfcGFnZXModm9pZCkKK3sKKwlyZXR1cm4gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTikKKwkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKTsKK30KKwogI2lmZGVmIENPTkZJR19QTQogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc2hyaW5rX2FsbF9tZW1vcnkoKS4gIFRyaWVzIHRvIHJlY2xhaW0gJ25yX3BhZ2VzJyBwYWdlcwpAQCAtMTc3NCw2ICsxOTkyLDcgQEAKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHJldCA9IDA7CisJZW51bSBscnVfbGlzdCBsOwogCiAJZm9yX2VhY2hfem9uZSh6b25lKSB7CiAKQEAgLTE3ODMsMzggKzIwMDIsMzEgQEAKIAkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYgcHJpbyAhPSBERUZfUFJJT1JJVFkpCiAJCQljb250aW51ZTsKIAotCQkvKiBGb3IgcGFzcyA9IDAgd2UgZG9uJ3Qgc2hyaW5rIHRoZSBhY3RpdmUgbGlzdCAqLwotCQlpZiAocGFzcyA+IDApIHsKLQkJCXpvbmUtPm5yX3NjYW5fYWN0aXZlICs9Ci0JCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpID4+IHByaW8pICsgMTsKLQkJCWlmICh6b25lLT5ucl9zY2FuX2FjdGl2ZSA+PSBucl9wYWdlcyB8fCBwYXNzID4gMykgewotCQkJCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKLQkJCQlucl90b19zY2FuID0gbWluKG5yX3BhZ2VzLAotCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKSk7Ci0JCQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvKTsKLQkJCX0KLQkJfQorCQlmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIHsKKwkJCS8qIEZvciBwYXNzID0gMCwgd2UgZG9uJ3Qgc2hyaW5rIHRoZSBhY3RpdmUgbGlzdCAqLworCQkJaWYgKHBhc3MgPT0gMCAmJgorCQkJCShsID09IExSVV9BQ1RJVkUgfHwgbCA9PSBMUlVfQUNUSVZFX0ZJTEUpKQorCQkJCWNvbnRpbnVlOwogCi0JCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgKz0KLQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpID4+IHByaW8pICsgMTsKLQkJaWYgKHpvbmUtPm5yX3NjYW5faW5hY3RpdmUgPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKLQkJCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgPSAwOwotCQkJbnJfdG9fc2NhbiA9IG1pbihucl9wYWdlcywKLQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKTsKLQkJCXJldCArPSBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYyk7Ci0JCQlpZiAocmV0ID49IG5yX3BhZ2VzKQotCQkJCXJldHVybiByZXQ7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiArPQorCQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKQorCQkJCQkJCQk+PiBwcmlvKSArIDE7CisJCQlpZiAoem9uZS0+bHJ1W2xdLm5yX3NjYW4gPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKKwkJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCQkJbnJfdG9fc2NhbiA9IG1pbihucl9wYWdlcywKKwkJCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsCisJCQkJCQkJTlJfTFJVX0JBU0UgKyBsKSk7CisJCQkJcmV0ICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCisJCQkJCQkJCXNjLCBwcmlvKTsKKwkJCQlpZiAocmV0ID49IG5yX3BhZ2VzKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfbHJ1X3BhZ2VzKHZvaWQpCi17Ci0JcmV0dXJuIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSkgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSk7Ci19Ci0KIC8qCiAgKiBUcnkgdG8gZnJlZSBgbnJfcGFnZXMnIG9mIG1lbW9yeSwgc3lzdGVtLXdpZGUsIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgogICogZnJlZWQgcGFnZXMuCkBAIC0xODQwLDcgKzIwNTIsNyBAQAogCiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JbHJ1X3BhZ2VzID0gY291bnRfbHJ1X3BhZ2VzKCk7CisJbHJ1X3BhZ2VzID0gZ2xvYmFsX2xydV9wYWdlcygpOwogCW5yX3NsYWIgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKIAkvKiBJZiBzbGFiIGNhY2hlcyBhcmUgaHVnZSwgaXQncyBiZXR0ZXIgdG8gaGl0IHRoZW0gZmlyc3QgKi8KIAl3aGlsZSAobnJfc2xhYiA+PSBscnVfcGFnZXMpIHsKQEAgLTE4ODMsNyArMjA5NSw3IEBACiAKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJc2hyaW5rX3NsYWIoc2MubnJfc2Nhbm5lZCwgc2MuZ2ZwX21hc2ssCi0JCQkJCWNvdW50X2xydV9wYWdlcygpKTsKKwkJCQkJZ2xvYmFsX2xydV9wYWdlcygpKTsKIAkJCXJldCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQkJaWYgKHJldCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKQEAgLTE5MDAsNyArMjExMiw3IEBACiAJaWYgKCFyZXQpIHsKIAkJZG8gewogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssIGNvdW50X2xydV9wYWdlcygpKTsKKwkJCXNocmlua19zbGFiKG5yX3BhZ2VzLCBzYy5nZnBfbWFzaywgZ2xvYmFsX2xydV9wYWdlcygpKTsKIAkJCXJldCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwogCQl9IHdoaWxlIChyZXQgPCBucl9wYWdlcyAmJiByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID4gMCk7CiAJfQpAQCAtMjEyOCwzICsyMzQwLDI4NSBAQAogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiBwYWdlX2V2aWN0YWJsZSAtIHRlc3Qgd2hldGhlciBhIHBhZ2UgaXMgZXZpY3RhYmxlCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICogQHZtYTogdGhlIFZNQSBpbiB3aGljaCB0aGUgcGFnZSBpcyBvciB3aWxsIGJlIG1hcHBlZCwgbWF5IGJlIE5VTEwKKyAqCisgKiBUZXN0IHdoZXRoZXIgcGFnZSBpcyBldmljdGFibGUtLWkuZS4sIHNob3VsZCBiZSBwbGFjZWQgb24gYWN0aXZlL2luYWN0aXZlCisgKiBsaXN0cyB2cyB1bmV2aWN0YWJsZSBsaXN0LiAgVGhlIHZtYSBhcmd1bWVudCBpcyAhTlVMTCB3aGVuIGNhbGxlZCBmcm9tIHRoZQorICogZmF1bHQgcGF0aCB0byBkZXRlcm1pbmUgaG93IHRvIGluc3RhbnRhdGUgYSBuZXcgcGFnZS4KKyAqCisgKiBSZWFzb25zIHBhZ2UgbWlnaHQgbm90IGJlIGV2aWN0YWJsZToKKyAqICgxKSBwYWdlJ3MgbWFwcGluZyBtYXJrZWQgdW5ldmljdGFibGUKKyAqICgyKSBwYWdlIGlzIHBhcnQgb2YgYW4gbWxvY2tlZCBWTUEKKyAqCisgKi8KK2ludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisKKwlpZiAobWFwcGluZ191bmV2aWN0YWJsZShwYWdlX21hcHBpbmcocGFnZSkpKQorCQlyZXR1cm4gMDsKKworCWlmIChQYWdlTWxvY2tlZChwYWdlKSB8fCAodm1hICYmIGlzX21sb2NrZWRfdm1hKHZtYSwgcGFnZSkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzaG93X3BhZ2VfcGF0aChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwljaGFyIGJ1ZlsyNTZdOworCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpIHsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJCXBnb2ZmX3QgcGdvZmYgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIFBBR0VfU0hJRlQpOworCisJCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCQlkZW50cnkgPSBkX2ZpbmRfYWxpYXMobWFwcGluZy0+aG9zdCk7CisJCXByaW50ayhLRVJOX0lORk8gInJlc2N1ZWQ6ICVzICVsdVxuIiwKKwkJICAgICAgIGRlbnRyeV9wYXRoKGRlbnRyeSwgYnVmLCAyNTYpLCBwZ29mZik7CisJCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKENPTkZJR19NTV9PV05FUikgJiYgZGVmaW5lZChDT05GSUdfTU1VKQorCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCQlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKKwkJaWYgKCFhbm9uX3ZtYSkKKwkJCXJldHVybjsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJyZXNjdWVkOiBhbm9uICVzXG4iLAorCQkJICAgICAgIHZtYS0+dm1fbW0tPm93bmVyLT5jb21tKTsKKwkJCWJyZWFrOworCQl9CisJCXBhZ2VfdW5sb2NrX2Fub25fdm1hKGFub25fdm1hKTsKKyNlbmRpZgorCX0KK30KKworCisvKioKKyAqIGNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZSAtIGNoZWNrIHBhZ2UgZm9yIGV2aWN0YWJpbGl0eSBhbmQgbW92ZSB0byBhcHByb3ByaWF0ZSB6b25lIGxydSBsaXN0CisgKiBAcGFnZTogcGFnZSB0byBjaGVjayBldmljdGFiaWxpdHkgYW5kIG1vdmUgdG8gYXBwcm9wcmlhdGUgbHJ1IGxpc3QKKyAqIEB6b25lOiB6b25lIHBhZ2UgaXMgaW4KKyAqCisgKiBDaGVja3MgYSBwYWdlIGZvciBldmljdGFiaWxpdHkgYW5kIG1vdmVzIHRoZSBwYWdlIHRvIHRoZSBhcHByb3ByaWF0ZQorICogem9uZSBscnUgbGlzdC4KKyAqCisgKiBSZXN0cmljdGlvbnM6IHpvbmUtPmxydV9sb2NrIG11c3QgYmUgaGVsZCwgcGFnZSBtdXN0IGJlIG9uIExSVSBhbmQgbXVzdAorICogaGF2ZSBQYWdlVW5ldmljdGFibGUgc2V0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6b25lICp6b25lKQoreworCVZNX0JVR19PTihQYWdlQWN0aXZlKHBhZ2UpKTsKKworcmV0cnk6CisJQ2xlYXJQYWdlVW5ldmljdGFibGUocGFnZSk7CisJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSB7CisJCWVudW0gbHJ1X2xpc3QgbCA9IExSVV9JTkFDVElWRV9BTk9OICsgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCisJCXNob3dfcGFnZV9wYXRoKHBhZ2UpOworCisJCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfVU5FVklDVEFCTEUpOworCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtsXS5saXN0KTsKKwkJX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OICsgbCk7CisJCV9fY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdSRVNDVUVEKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiByb3RhdGUgdW5ldmljdGFibGUgbGlzdAorCQkgKi8KKwkJU2V0UGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtMUlVfVU5FVklDVEFCTEVdLmxpc3QpOworCQlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpCisJCQlnb3RvIHJldHJ5OworCX0KK30KKworLyoqCisgKiBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMgLSBzY2FuIGFuIGFkZHJlc3Mgc3BhY2UgZm9yIGV2aWN0YWJsZSBwYWdlcworICogQG1hcHBpbmc6IHN0cnVjdCBhZGRyZXNzX3NwYWNlIHRvIHNjYW4gZm9yIGV2aWN0YWJsZSBwYWdlcworICoKKyAqIFNjYW4gYWxsIHBhZ2VzIGluIG1hcHBpbmcuICBDaGVjayB1bmV2aWN0YWJsZSBwYWdlcyBmb3IKKyAqIGV2aWN0YWJpbGl0eSBhbmQgbW92ZSB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSB6b25lIGxydSBsaXN0LgorICovCit2b2lkIHNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlwZ29mZl90IG5leHQgPSAwOworCXBnb2ZmX3QgZW5kICAgPSAoaV9zaXplX3JlYWQobWFwcGluZy0+aG9zdCkgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgorCQkJIFBBR0VfQ0FDSEVfU0hJRlQ7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKworCWlmIChtYXBwaW5nLT5ucnBhZ2VzID09IDApCisJCXJldHVybjsKKworCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CisJd2hpbGUgKG5leHQgPCBlbmQgJiYKKwkJcGFnZXZlY19sb29rdXAoJnB2ZWMsIG1hcHBpbmcsIG5leHQsIFBBR0VWRUNfU0laRSkpIHsKKwkJaW50IGk7CisJCWludCBwZ19zY2FubmVkID0gMDsKKworCQl6b25lID0gTlVMTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOworCQkJcGdvZmZfdCBwYWdlX2luZGV4ID0gcGFnZS0+aW5kZXg7CisJCQlzdHJ1Y3Qgem9uZSAqcGFnZXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwkJCXBnX3NjYW5uZWQrKzsKKwkJCWlmIChwYWdlX2luZGV4ID4gbmV4dCkKKwkJCQluZXh0ID0gcGFnZV9pbmRleDsKKwkJCW5leHQrKzsKKworCQkJaWYgKHBhZ2V6b25lICE9IHpvbmUpIHsKKwkJCQlpZiAoem9uZSkKKwkJCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQkJem9uZSA9IHBhZ2V6b25lOworCQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCX0KKworCQkJaWYgKFBhZ2VMUlUocGFnZSkgJiYgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQkJCWNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZShwYWdlLCB6b25lKTsKKwkJfQorCQlpZiAoem9uZSkKKwkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCisJCWNvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR1NDQU5ORUQsIHBnX3NjYW5uZWQpOworCX0KKworfQorCisvKioKKyAqIHNjYW5fem9uZV91bmV2aWN0YWJsZV9wYWdlcyAtIGNoZWNrIHVuZXZpY3RhYmxlIGxpc3QgZm9yIGV2aWN0YWJsZSBwYWdlcworICogQHpvbmUgLSB6b25lIG9mIHdoaWNoIHRvIHNjYW4gdGhlIHVuZXZpY3RhYmxlIGxpc3QKKyAqCisgKiBTY2FuIEB6b25lJ3MgdW5ldmljdGFibGUgTFJVIGxpc3RzIHRvIGNoZWNrIGZvciBwYWdlcyB0aGF0IGhhdmUgYmVjb21lCisgKiBldmljdGFibGUuICBNb3ZlIHRob3NlIHRoYXQgaGF2ZSB0byBAem9uZSdzIGluYWN0aXZlIGxpc3Qgd2hlcmUgdGhleQorICogYmVjb21lIGNhbmRpZGF0ZXMgZm9yIHJlY2xhaW0sIHVubGVzcyBzaHJpbmtfaW5hY3RpdmVfem9uZSgpIGRlY2lkZXMKKyAqIHRvIHJlYWN0aXZhdGUgdGhlbS4gIFBhZ2VzIHRoYXQgYXJlIHN0aWxsIHVuZXZpY3RhYmxlIGFyZSByb3RhdGVkCisgKiBiYWNrIG9udG8gQHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LgorICovCisjZGVmaW5lIFNDQU5fVU5FVklDVEFCTEVfQkFUQ0hfU0laRSAxNlVMIC8qIGFyYml0cmFyeSBsb2NrIGhvbGQgYmF0Y2ggc2l6ZSAqLwordm9pZCBzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbF91bmV2aWN0YWJsZSA9ICZ6b25lLT5scnVbTFJVX1VORVZJQ1RBQkxFXS5saXN0OworCXVuc2lnbmVkIGxvbmcgc2NhbjsKKwl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4gPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfVU5FVklDVEFCTEUpOworCisJd2hpbGUgKG5yX3RvX3NjYW4gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IG1pbihucl90b19zY2FuLAorCQkJCQkJU0NBTl9VTkVWSUNUQUJMRV9CQVRDSF9TSVpFKTsKKworCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCWZvciAoc2NhbiA9IDA7ICBzY2FuIDwgYmF0Y2hfc2l6ZTsgc2NhbisrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGxydV90b19wYWdlKGxfdW5ldmljdGFibGUpOworCisJCQlpZiAoIXRyeWxvY2tfcGFnZShwYWdlKSkKKwkJCQljb250aW51ZTsKKworCQkJcHJlZmV0Y2h3X3ByZXZfbHJ1X3BhZ2UocGFnZSwgbF91bmV2aWN0YWJsZSwgZmxhZ3MpOworCisJCQlpZiAobGlrZWx5KFBhZ2VMUlUocGFnZSkgJiYgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSkKKwkJCQljaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2UocGFnZSwgem9uZSk7CisKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCisJCW5yX3RvX3NjYW4gLT0gYmF0Y2hfc2l6ZTsKKwl9Cit9CisKKworLyoqCisgKiBzY2FuX2FsbF96b25lc191bmV2aWN0YWJsZV9wYWdlcyAtIHNjYW4gYWxsIHVuZXZpY3RhYmxlIGxpc3RzIGZvciBldmljdGFibGUgcGFnZXMKKyAqCisgKiBBIHJlYWxseSBiaWcgaGFtbWVyOiAgc2NhbiBhbGwgem9uZXMnIHVuZXZpY3RhYmxlIExSVSBsaXN0cyB0byBjaGVjayBmb3IKKyAqIHBhZ2VzIHRoYXQgaGF2ZSBiZWNvbWUgZXZpY3RhYmxlLiAgTW92ZSB0aG9zZSBiYWNrIHRvIHRoZSB6b25lcycKKyAqIGluYWN0aXZlIGxpc3Qgd2hlcmUgdGhleSBiZWNvbWUgY2FuZGlkYXRlcyBmb3IgcmVjbGFpbS4KKyAqIFRoaXMgb2NjdXJzIHdoZW4sIGUuZy4sIHdlIGhhdmUgdW5zd2FwcGFibGUgcGFnZXMgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3RzLAorICogYW5kIHdlIGFkZCBzd2FwIHRvIHRoZSBzeXN0ZW0uICBBcyBzdWNoLCBpdCBydW5zIGluIHRoZSBjb250ZXh0IG9mIGEgdGFzaworICogdGhhdCBoYXMgcG9zc2libHkvcHJvYmFibHkgbWFkZSBzb21lIHByZXZpb3VzbHkgdW5ldmljdGFibGUgcGFnZXMKKyAqIGV2aWN0YWJsZS4KKyAqLwordm9pZCBzY2FuX2FsbF96b25lc191bmV2aWN0YWJsZV9wYWdlcyh2b2lkKQoreworCXN0cnVjdCB6b25lICp6b25lOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXNjYW5fem9uZV91bmV2aWN0YWJsZV9wYWdlcyh6b25lKTsKKwl9Cit9CisKKy8qCisgKiBzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzIFt2bV0gc3lzY3RsIGhhbmRsZXIuICBPbiBkZW1hbmQgcmUtc2NhbiBvZgorICogYWxsIG5vZGVzJyB1bmV2aWN0YWJsZSBsaXN0cyBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKi8KK3Vuc2lnbmVkIGxvbmcgc2Nhbl91bmV2aWN0YWJsZV9wYWdlczsKKworaW50IHNjYW5fdW5ldmljdGFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkgICBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQoreworCXByb2NfZG91bG9uZ3ZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CisKKwlpZiAod3JpdGUgJiYgKih1bnNpZ25lZCBsb25nICopdGFibGUtPmRhdGEpCisJCXNjYW5fYWxsX3pvbmVzX3VuZXZpY3RhYmxlX3BhZ2VzKCk7CisKKwlzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBlciBub2RlICdzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzJyBhdHRyaWJ1dGUuICBPbiBkZW1hbmQgcmUtc2NhbiBvZgorICogYSBzcGVjaWZpZWQgbm9kZSdzIHBlciB6b25lIHVuZXZpY3RhYmxlIGxpc3RzIGZvciBldmljdGFibGUgcGFnZXMuCisgKi8KKworc3RhdGljIHNzaXplX3QgcmVhZF9zY2FuX3VuZXZpY3RhYmxlX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7CS8qIGFsd2F5cyB6ZXJvOyBzaG91bGQgZml0Li4uICovCit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3NjYW5fdW5ldmljdGFibGVfbm9kZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBOT0RFX0RBVEEoZGV2LT5pZCktPm5vZGVfem9uZXM7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJdW5zaWduZWQgbG9uZyByZXM7CisJdW5zaWduZWQgbG9uZyByZXEgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmcmVzKTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gMTsJLyogemVybyBpcyBuby1vcCAqLworCisJZm9yICh6b25lID0gbm9kZV96b25lczsgem9uZSAtIG5vZGVfem9uZXMgPCBNQVhfTlJfWk9ORVM7ICsrem9uZSkgeworCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQorCQkJY29udGludWU7CisJCXNjYW5fem9uZV91bmV2aWN0YWJsZV9wYWdlcyh6b25lKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIFNZU0RFVl9BVFRSKHNjYW5fdW5ldmljdGFibGVfcGFnZXMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJcmVhZF9zY2FuX3VuZXZpY3RhYmxlX25vZGUsCisJCQl3cml0ZV9zY2FuX3VuZXZpY3RhYmxlX25vZGUpOworCitpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCXJldHVybiBzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyk7Cit9CisKK3ZvaWQgc2Nhbl91bmV2aWN0YWJsZV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJc3lzZGV2X3JlbW92ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX3NjYW5fdW5ldmljdGFibGVfcGFnZXMpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZDc4MjZhZi4uOTM0MzIyNyAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTYxOSw4ICs2MTksMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHsKIAkvKiBab25lZCBWTSBjb3VudGVycyAqLwogCSJucl9mcmVlX3BhZ2VzIiwKLQkibnJfaW5hY3RpdmUiLAotCSJucl9hY3RpdmUiLAorCSJucl9pbmFjdGl2ZV9hbm9uIiwKKwkibnJfYWN0aXZlX2Fub24iLAorCSJucl9pbmFjdGl2ZV9maWxlIiwKKwkibnJfYWN0aXZlX2ZpbGUiLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkibnJfdW5ldmljdGFibGUiLAorCSJucl9tbG9jayIsCisjZW5kaWYKIAkibnJfYW5vbl9wYWdlcyIsCiAJIm5yX21hcHBlZCIsCiAJIm5yX2ZpbGVfcGFnZXMiLApAQCAtNjc1LDYgKzY4MSwxNiBAQAogCSJodGxiX2J1ZGR5X2FsbG9jX3N1Y2Nlc3MiLAogCSJodGxiX2J1ZGR5X2FsbG9jX2ZhaWwiLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCSJ1bmV2aWN0YWJsZV9wZ3NfY3VsbGVkIiwKKwkidW5ldmljdGFibGVfcGdzX3NjYW5uZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfcmVzY3VlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19tbG9ja2VkIiwKKwkidW5ldmljdGFibGVfcGdzX211bmxvY2tlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19jbGVhcmVkIiwKKwkidW5ldmljdGFibGVfcGdzX3N0cmFuZGVkIiwKKwkidW5ldmljdGFibGVfcGdzX21sb2NrZnJlZWQiLAorI2VuZGlmCiAjZW5kaWYKIH07CiAKQEAgLTY4OCw3ICs3MDQsNyBAQAogCQkgICAiXG4gICAgICAgIG1pbiAgICAgICVsdSIKIAkJICAgIlxuICAgICAgICBsb3cgICAgICAlbHUiCiAJCSAgICJcbiAgICAgICAgaGlnaCAgICAgJWx1IgotCQkgICAiXG4gICAgICAgIHNjYW5uZWQgICVsdSAoYTogJWx1IGk6ICVsdSkiCisJCSAgICJcbiAgICAgICAgc2Nhbm5lZCAgJWx1IChhYTogJWx1IGlhOiAlbHUgYWY6ICVsdSBpZjogJWx1KSIKIAkJICAgIlxuICAgICAgICBzcGFubmVkICAlbHUiCiAJCSAgICJcbiAgICAgICAgcHJlc2VudCAgJWx1IiwKIAkJICAgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpLApAQCAtNjk2LDcgKzcxMiwxMCBAQAogCQkgICB6b25lLT5wYWdlc19sb3csCiAJCSAgIHpvbmUtPnBhZ2VzX2hpZ2gsCiAJCSAgIHpvbmUtPnBhZ2VzX3NjYW5uZWQsCi0JCSAgIHpvbmUtPm5yX3NjYW5fYWN0aXZlLCB6b25lLT5ucl9zY2FuX2luYWN0aXZlLAorCQkgICB6b25lLT5scnVbTFJVX0FDVElWRV9BTk9OXS5ucl9zY2FuLAorCQkgICB6b25lLT5scnVbTFJVX0lOQUNUSVZFX0FOT05dLm5yX3NjYW4sCisJCSAgIHpvbmUtPmxydVtMUlVfQUNUSVZFX0ZJTEVdLm5yX3NjYW4sCisJCSAgIHpvbmUtPmxydVtMUlVfSU5BQ1RJVkVfRklMRV0ubnJfc2NhbiwKIAkJICAgem9uZS0+c3Bhbm5lZF9wYWdlcywKIAkJICAgem9uZS0+cHJlc2VudF9wYWdlcyk7CiAKQEAgLTczMywxMCArNzUyLDEyIEBACiAJc2VxX3ByaW50ZihtLAogCQkgICAiXG4gIGFsbF91bnJlY2xhaW1hYmxlOiAldSIKIAkJICAgIlxuICBwcmV2X3ByaW9yaXR5OiAgICAgJWkiCi0JCSAgICJcbiAgc3RhcnRfcGZuOiAgICAgICAgICVsdSIsCisJCSAgICJcbiAgc3RhcnRfcGZuOiAgICAgICAgICVsdSIKKwkJICAgIlxuICBpbmFjdGl2ZV9yYXRpbzogICAgJXUiLAogCQkJICAgem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSwKIAkJICAgem9uZS0+cHJldl9wcmlvcml0eSwKLQkJICAgem9uZS0+em9uZV9zdGFydF9wZm4pOworCQkgICB6b25lLT56b25lX3N0YXJ0X3BmbiwKKwkJICAgem9uZS0+aW5hY3RpdmVfcmF0aW8pOwogCXNlcV9wdXRjKG0sICdcbicpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvODAyL2ZjLmMgYi9uZXQvODAyL2ZjLmMKaW5kZXggY2IzNDc1ZS4uMzRjZjFlZSAxMDA2NDQKLS0tIGEvbmV0LzgwMi9mYy5jCisrKyBiL25ldC84MDIvZmMuYwpAQCAtODIsMTMgKzgyLDEzIEBACiAKIHN0YXRpYyBpbnQgZmNfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKyNpZmRlZiBDT05GSUdfSU5FVAogCXN0cnVjdCBmY2hfaGRyICpmY2g9KHN0cnVjdCBmY2hfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBmY2xsYyAqZmNsbGM9KHN0cnVjdCBmY2xsYyAqKShza2ItPmRhdGErc2l6ZW9mKHN0cnVjdCBmY2hfaGRyKSk7CiAJaWYoZmNsbGMtPmV0aGVydHlwZSAhPSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJcHJpbnRrKCJmY19yZWJ1aWxkX2hlYWRlcjogRG9uJ3Qga25vdyBob3cgdG8gcmVzb2x2ZSB0eXBlICUwNFggYWRkcmVzc2VzID9cbiIsIG50b2hzKGZjbGxjLT5ldGhlcnR5cGUpKTsKIAkJcmV0dXJuIDA7CiAJfQotI2lmZGVmIENPTkZJR19JTkVUCiAJcmV0dXJuIGFycF9maW5kKGZjaC0+ZGFkZHIsIHNrYik7CiAjZWxzZQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL01ha2VmaWxlIGIvbmV0LzlwL01ha2VmaWxlCmluZGV4IDUxOTIxOTQuLjEwNDFiN2IgMTAwNjQ0Ci0tLSBhL25ldC85cC9NYWtlZmlsZQorKysgYi9uZXQvOXAvTWFrZWZpbGUKQEAgLTQsMTAgKzQsOSBAQAogOXBuZXQtb2JqcyA6PSBcCiAJbW9kLm8gXAogCWNsaWVudC5vIFwKLQljb252Lm8gXAogCWVycm9yLm8gXAotCWZjcHJpbnQubyBcCiAJdXRpbC5vIFwKKwlwcm90b2NvbC5vIFwKIAl0cmFuc19mZC5vIFwKIAogOXBuZXRfdmlydGlvLW9ianMgOj0gXApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IGUwNTNlMDYuLmJiYWMyZjcgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTMzLDEyICszMyw5IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgotI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpOwotc3RhdGljIHZvaWQgcDlfZmlkX2Rlc3Ryb3koc3RydWN0IHA5X2ZpZCAqZmlkKTsKLXN0YXRpYyBzdHJ1Y3QgcDlfc3RhdCAqcDlfY2xvbmVfc3RhdChzdHJ1Y3QgcDlfc3RhdCAqc3QsIGludCBkb3R1KTsKKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSAicHJvdG9jb2wuaCIKIAogLyoKICAgKiBDbGllbnQgT3B0aW9uIFBhcnNpbmcgKGNvZGUgaW5zcGlyZWQgYnkgTkZTIGNvZGUpCkBAIC01OSw2ICs1Niw5IEBACiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKIC8qKgogICogdjlmc19wYXJzZV9vcHRpb25zIC0gcGFyc2UgbW91bnQgb3B0aW9ucyBpbnRvIHNlc3Npb24gc3RydWN0dXJlCiAgKiBAb3B0aW9uczogb3B0aW9ucyBzdHJpbmcgcGFzc2VkIGZyb20gbW91bnQKQEAgLTEyNCw5MjIgKzEyNCw0OTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHA5X3RhZ19hbGxvYyAtIGxvb2t1cC9hbGxvY2F0ZSBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgorICogdGhpcyBpcyBhIHNpbXBsZSBhcnJheSBsb29rdXAsIGJ1dCB3aWxsIGdyb3cgdGhlCisgKiByZXF1ZXN0X3Nsb3RzIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW9kYXRlIHRyYW5zYWN0aW9uCisgKiBpZHMgd2hpY2ggZGlkIG5vdCBwcmV2aW91c2x5IGhhdmUgYSBzbG90LgorICoKKyAqIHRoaXMgY29kZSByZWxpZXMgb24gdGhlIGNsaWVudCBzcGlubG9jayB0byBtYW5hZ2UgbG9ja3MsIGl0cworICogcG9zc2libGUgd2Ugc2hvdWxkIHN3aXRjaCB0byBzb21ldGhpbmcgZWxzZSwgYnV0IEknZCByYXRoZXIKKyAqIHN0aWNrIHdpdGggc29tZXRoaW5nIGxvdy1vdmVyaGVhZCBmb3IgdGhlIGNvbW1vbiBjYXNlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV90YWdfYWxsb2Moc3RydWN0IHA5X2NsaWVudCAqYywgdTE2IHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByb3csIGNvbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCS8qIFRoaXMgbG9va3MgdXAgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYnkgdGFnIHNvIHdlIGtub3cgd2hpY2gKKwkgKiBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvICovCisJdGFnKys7CisKKwlpZiAodGFnID49IGMtPm1heF90YWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJLyogY2hlY2sgYWdhaW4gc2luY2Ugb3JpZ2luYWwgY2hlY2sgd2FzIG91dHNpZGUgb2YgbG9jayAqLworCQl3aGlsZSAodGFnID49IGMtPm1heF90YWcpIHsKKwkJCXJvdyA9ICh0YWcgLyBQOV9ST1dfTUFYVEFHKTsKKwkJCWMtPnJlcXNbcm93XSA9IGtjYWxsb2MoUDlfUk9XX01BWFRBRywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwOV9yZXFfdCksIEdGUF9BVE9NSUMpOworCisJCQlpZiAoIWMtPnJlcXNbcm93XSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJfQorCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJCWMtPnJlcXNbcm93XVtjb2xdLnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwkJCQljLT5yZXFzW3Jvd11bY29sXS50YyA9IE5VTEw7CisJCQl9CisJCQljLT5tYXhfdGFnICs9IFA5X1JPV19NQVhUQUc7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCX0KKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXEgPSAmYy0+cmVxc1tyb3ddW2NvbF07CisJaWYgKCFyZXEtPnRjKSB7CisJCXJlcS0+d3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXJlcS0+d3EpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwkJaW5pdF93YWl0cXVldWVfaGVhZChyZXEtPndxKTsKKwkJcmVxLT50YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkrYy0+bXNpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlyZXEtPnJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKStjLT5tc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICgoIXJlcS0+dGMpIHx8ICghcmVxLT5yYykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJa2ZyZWUocmVxLT50Yyk7CisJCQlrZnJlZShyZXEtPnJjKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CisJCXJlcS0+dGMtPnNkYXRhID0gKGNoYXIgKikgcmVxLT50YyArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQlyZXEtPnRjLT5jYXBhY2l0eSA9IGMtPm1zaXplOworCQlyZXEtPnJjLT5zZGF0YSA9IChjaGFyICopIHJlcS0+cmMgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKKwkJcmVxLT5yYy0+Y2FwYWNpdHkgPSBjLT5tc2l6ZTsKKwl9CisKKwlwOXBkdV9yZXNldChyZXEtPnRjKTsKKwlwOXBkdV9yZXNldChyZXEtPnJjKTsKKworCXJlcS0+Zmx1c2hfdGFnID0gMDsKKwlyZXEtPnRjLT50YWcgPSB0YWctMTsKKwlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfQUxMT0M7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOworfQogCiAvKioKLSAqIHA5X2NsaWVudF9ycGMgLSBzZW5kcyA5UCByZXF1ZXN0IGFuZCB3YWl0cyB1bnRpbCBhIHJlc3BvbnNlIGlzIGF2YWlsYWJsZS4KLSAqICAgICAgVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4KLSAqIEBjOiBjbGllbnQgZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEByYzogcG9pbnRlciB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlzIHN0b3JlZAorICogcDlfdGFnX2xvb2t1cCAtIGxvb2t1cCBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgogICovCi1pbnQKLXA5X2NsaWVudF9ycGMoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X2ZjYWxsICp0YywKLQlzdHJ1Y3QgcDlfZmNhbGwgKipyYykKKworc3RydWN0IHA5X3JlcV90ICpwOV90YWdfbG9va3VwKHN0cnVjdCBwOV9jbGllbnQgKmMsIHUxNiB0YWcpCiB7Ci0JcmV0dXJuIGMtPnRyYW5zLT5ycGMoYy0+dHJhbnMsIHRjLCByYyk7CisJaW50IHJvdywgY29sOworCisJLyogVGhpcyBsb29rcyB1cCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBieSB0YWcgc28gd2Uga25vdyB3aGljaAorCSAqIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRhIGludG8gKi8KKwl0YWcrKzsKKworCUJVR19PTih0YWcgPj0gYy0+bWF4X3RhZyk7CisKKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOwogfQorRVhQT1JUX1NZTUJPTChwOV90YWdfbG9va3VwKTsKIAotc3RydWN0IHA5X2NsaWVudCAqcDlfY2xpZW50X2NyZWF0ZShjb25zdCBjaGFyICpkZXZfbmFtZSwgY2hhciAqb3B0aW9ucykKKy8qKgorICogcDlfdGFnX2luaXQgLSBzZXR1cCB0YWdzIHN0cnVjdHVyZSBhbmQgY29udGVudHMKKyAqIEB0YWdzOiB0YWdzIHN0cnVjdHVyZSBmcm9tIHRoZSBjbGllbnQgc3RydWN0CisgKgorICogVGhpcyBpbml0aWFsaXplcyB0aGUgdGFncyBzdHJ1Y3R1cmUgZm9yIGVhY2ggY2xpZW50IGluc3RhbmNlLgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X3RhZ19pbml0KHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0JaW50IGVyciwgbjsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfc3RyICp2ZXJzaW9uOworCWludCBlcnIgPSAwOwogCi0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbG50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNsbnQtPnRyYW5zX21vZCA9IE5VTEw7Ci0JY2xudC0+dHJhbnMgPSBOVUxMOwotCXNwaW5fbG9ja19pbml0KCZjbG50LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xudC0+ZmlkbGlzdCk7Ci0JY2xudC0+ZmlkcG9vbCA9IHA5X2lkcG9vbF9jcmVhdGUoKTsKLQlpZiAoSVNfRVJSKGNsbnQtPmZpZHBvb2wpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2xudC0+ZmlkcG9vbCk7Ci0JCWNsbnQtPmZpZHBvb2wgPSBOVUxMOworCWMtPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjLT50YWdwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGMtPnRhZ3Bvb2wpOworCQljLT50YWdwb29sID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwYXJzZV9vcHRzKG9wdGlvbnMsIGNsbnQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCXA5X2lkcG9vbF9nZXQoYy0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KIAotCWlmIChjbG50LT50cmFuc19tb2QgPT0gTlVMTCkgewotCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJObyB0cmFuc3BvcnQgZGVmaW5lZCBvciBkZWZhdWx0IHRyYW5zcG9ydFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdHJhbnMgJXAgbXNpemUgJWQgZG90dSAlZFxuIiwKLQkJY2xudCwgY2xudC0+dHJhbnNfbW9kLCBjbG50LT5tc2l6ZSwgY2xudC0+ZG90dSk7Ci0KLQotCWNsbnQtPnRyYW5zID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoZGV2X25hbWUsIG9wdGlvbnMsIGNsbnQtPm1zaXplLAotCQkJCQkJCQljbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKGNsbnQtPnRyYW5zKSkgewotCQllcnIgPSBQVFJfRVJSKGNsbnQtPnRyYW5zKTsKLQkJY2xudC0+dHJhbnMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICgoY2xudC0+bXNpemUrUDlfSU9IRFJTWikgPiBjbG50LT50cmFuc19tb2QtPm1heHNpemUpCi0JCWNsbnQtPm1zaXplID0gY2xudC0+dHJhbnNfbW9kLT5tYXhzaXplLVA5X0lPSERSU1o7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90dmVyc2lvbihjbG50LT5tc2l6ZSwgY2xudC0+ZG90dT8iOVAyMDAwLnUiOiI5UDIwMDAiKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCXZlcnNpb24gPSAmcmMtPnBhcmFtcy5ydmVyc2lvbi52ZXJzaW9uOwotCWlmICh2ZXJzaW9uLT5sZW4gPT0gOCAmJiAhbWVtY21wKHZlcnNpb24tPnN0ciwgIjlQMjAwMC51IiwgOCkpCi0JCWNsbnQtPmRvdHUgPSAxOwotCWVsc2UgaWYgKHZlcnNpb24tPmxlbiA9PSA2ICYmICFtZW1jbXAodmVyc2lvbi0+c3RyLCAiOVAyMDAwIiwgNikpCi0JCWNsbnQtPmRvdHUgPSAwOwotCWVsc2UgewotCQllcnIgPSAtRVJFTU9URUlPOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW4gPSByYy0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplOwotCWlmIChuIDwgY2xudC0+bXNpemUpCi0JCWNsbnQtPm1zaXplID0gbjsKLQotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGNsbnQ7Ci0KKwljLT5tYXhfdGFnID0gMDsKIGVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY3JlYXRlKTsKIAotdm9pZCBwOV9jbGllbnRfZGVzdHJveShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQorLyoqCisgKiBwOV90YWdfY2xlYW51cCAtIGNsZWFucyB1cCB0YWdzIHN0cnVjdHVyZSBhbmQgcmVjbGFpbXMgcmVzb3VyY2VzCisgKiBAdGFnczogdGFncyBzdHJ1Y3R1cmUgZnJvbSB0aGUgY2xpZW50IHN0cnVjdAorICoKKyAqIFRoaXMgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFncyBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHA5X3RhZ19jbGVhbnVwKHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkLCAqZmlkcHRyOworCWludCByb3csIGNvbDsKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKLQotCWlmIChjbG50LT50cmFucykgewotCQljbG50LT50cmFucy0+Y2xvc2UoY2xudC0+dHJhbnMpOwotCQlrZnJlZShjbG50LT50cmFucyk7Ci0JCWNsbnQtPnRyYW5zID0gTlVMTDsKLQl9Ci0KLQl2OWZzX3B1dF90cmFucyhjbG50LT50cmFuc19tb2QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpZCwgZmlkcHRyLCAmY2xudC0+ZmlkbGlzdCwgZmxpc3QpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlpZiAoY2xudC0+ZmlkcG9vbCkKLQkJcDlfaWRwb29sX2Rlc3Ryb3koY2xudC0+ZmlkcG9vbCk7Ci0KLQlrZnJlZShjbG50KTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2Rlc3Ryb3kpOwotCi12b2lkIHA5X2NsaWVudF9kaXNjb25uZWN0KHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCi17Ci0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXBcbiIsIGNsbnQpOwotCWNsbnQtPnRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKLQotc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAotCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKLQkJY2xudCwgYWZpZD9hZmlkLT5maWQ6LTEsIHVuYW1lLCBhbmFtZSk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCi0JZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKLQlpZiAoSVNfRVJSKGZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQlmaWQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXRjID0gcDlfY3JlYXRlX3RhdHRhY2goZmlkLT5maWQsIGFmaWQ/YWZpZC0+ZmlkOlA5X05PRklELCB1bmFtZSwgYW5hbWUsCi0JCW5fdW5hbWUsIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOwotCi0JbWVtbW92ZSgmZmlkLT5xaWQsICZyYy0+cGFyYW1zLnJhdHRhY2gucWlkLCBzaXplb2Yoc3RydWN0IHA5X3FpZCkpOwotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGZpZDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlpZiAoZmlkKQotCQlwOV9maWRfZGVzdHJveShmaWQpOwotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9hdHRhY2gpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfYXV0aChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBjaGFyICp1bmFtZSwKLQl1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdW5hbWUgJXMgYW5hbWUgJXNcbiIsIGNsbnQsIHVuYW1lLAotCQkJCQkJCQkJYW5hbWUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQotCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JaWYgKElTX0VSUihmaWQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZmlkKTsKLQkJZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0YyA9IHA5X2NyZWF0ZV90YXV0aChmaWQtPmZpZCwgdW5hbWUsIGFuYW1lLCBuX3VuYW1lLCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCW1lbW1vdmUoJmZpZC0+cWlkLCAmcmMtPnBhcmFtcy5yYXV0aC5xaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCWlmIChmaWQpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCi0JaW50IGNsb25lKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBud25hbWUgJWQgd25hbWVbMF0gJXNcbiIsCi0JCW9sZGZpZC0+ZmlkLCBud25hbWUsIHduYW1lcz93bmFtZXNbMF06TlVMTCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBvbGRmaWQtPmNsbnQ7Ci0JaWYgKGNsb25lKSB7Ci0JCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JCWlmIChJU19FUlIoZmlkKSkgewotCQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQkJZmlkID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7CisJLyogY2hlY2sgdG8gaW5zdXJlIGFsbCByZXF1ZXN0cyBhcmUgaWRsZSAqLworCWZvciAocm93ID0gMDsgcm93IDwgKGMtPm1heF90YWcvUDlfUk9XX01BWFRBRyk7IHJvdysrKSB7CisJCWZvciAoY29sID0gMDsgY29sIDwgUDlfUk9XX01BWFRBRzsgY29sKyspIHsKKwkJCWlmIChjLT5yZXFzW3Jvd11bY29sXS5zdGF0dXMgIT0gUkVRX1NUQVRVU19JRExFKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCisJCQkJICAiQXR0ZW1wdGluZyB0byBjbGVhbnVwIG5vbi1mcmVlIHRhZyAlZCwlZFxuIiwKKwkJCQkgIHJvdywgY29sKTsKKwkJCQkvKiBUT0RPOiBkZWxheSBleGVjdXRpb24gb2YgY2xlYW51cCAqLworCQkJCXJldHVybjsKKwkJCX0KIAkJfQotCi0JCWZpZC0+dWlkID0gb2xkZmlkLT51aWQ7Ci0JfSBlbHNlCi0JCWZpZCA9IG9sZGZpZDsKLQotCXRjID0gcDlfY3JlYXRlX3R3YWxrKG9sZGZpZC0+ZmlkLCBmaWQtPmZpZCwgbnduYW1lLCB3bmFtZXMpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKKwlpZiAoYy0+dGFncG9vbCkKKwkJcDlfaWRwb29sX2Rlc3Ryb3koYy0+dGFncG9vbCk7CisKKwkvKiBmcmVlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0YWdzICovCisJZm9yIChyb3cgPSAwOyByb3cgPCAoYy0+bWF4X3RhZy9QOV9ST1dfTUFYVEFHKTsgcm93KyspIHsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ud3EpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0udGMpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ucmMpOworCQl9CisJCWtmcmVlKGMtPnJlcXNbcm93XSk7CisJfQorCWMtPm1heF90YWcgPSAwOworfQorCisvKioKKyAqIHA5X2ZyZWVfcmVxIC0gZnJlZSBhIHJlcXVlc3QgYW5kIGNsZWFuLXVwIGFzIG5lY2Vzc2FyeQorICogYzogY2xpZW50IHN0YXRlCisgKiByOiByZXF1ZXN0IHRvIHJlbGVhc2UKKyAqCisgKi8KKworc3RhdGljIHZvaWQgcDlfZnJlZV9yZXEoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X3JlcV90ICpyKQoreworCWludCB0YWcgPSByLT50Yy0+dGFnOworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCByZXEgJXAgdGFnOiAlZFxuIiwgYywgciwgdGFnKTsKKworCXItPnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwlpZiAodGFnICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayh0YWcsIGMtPnRhZ3Bvb2wpKQorCQlwOV9pZHBvb2xfcHV0KHRhZywgYy0+dGFncG9vbCk7CisKKwkvKiBpZiB0aGlzIHdhcyBhIGZsdXNoIHJlcXVlc3Qgd2UgaGF2ZSB0byBmcmVlIHJlc3BvbnNlIGZjYWxsICovCisJaWYgKHItPnJjLT5pZCA9PSBQOV9SRkxVU0gpIHsKKwkJa2ZyZWUoci0+dGMpOworCQlrZnJlZShyLT5yYyk7CisJfQorfQorCisvKioKKyAqIHA5X2NsaWVudF9jYiAtIGNhbGwgYmFjayBmcm9tIHRyYW5zcG9ydCB0byBjbGllbnQKKyAqIGM6IGNsaWVudCBzdGF0ZQorICogcmVxOiByZXF1ZXN0IHJlY2VpdmVkCisgKgorICovCit2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcDlfcmVxX3QgKm90aGVyX3JlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgdGFnICVkXG4iLCByZXEtPnRjLT50YWcpOworCisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpCisJCXdha2VfdXAocmVxLT53cSk7CisKKwlpZiAocmVxLT5mbHVzaF90YWcpIHsgCQkJLyogZmx1c2ggcmVjZWl2ZSBwYXRoICovCisJCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUkZMVVNIICVkXG4iLCByZXEtPnRjLT50YWcpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlvdGhlcl9yZXEgPSBwOV90YWdfbG9va3VwKGMsIHJlcS0+Zmx1c2hfdGFnKTsKKwkJaWYgKG90aGVyX3JlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSCkgLyogc3RhbGUgZmx1c2ggKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJZWxzZSB7CisJCQlvdGhlcl9yZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRkxTSEQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT5sb2NrLCBmbGFncyk7CisJCQl3YWtlX3VwKG90aGVyX3JlcS0+d3EpOworCQl9CisJCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisJfSBlbHNlIHsgCQkJCS8qIG5vcm1hbCByZWNlaXZlIHBhdGggKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJub3JtYWw6IHRhZyAlZFxuIiwgcmVxLT50Yy0+dGFnKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSEQpCisJCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwKHJlcS0+d3EpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndha2V1cDogJWRcbiIsIHJlcS0+dGMtPnRhZyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY2IpOworCisvKioKKyAqIHA5X3BhcnNlX2hlYWRlciAtIHBhcnNlIGhlYWRlciBhcmd1bWVudHMgb3V0IG9mIGEgcGFja2V0CisgKiBAcGR1OiBwYWNrZXQgdG8gcGFyc2UKKyAqIEBzaXplOiBzaXplIG9mIHBhY2tldAorICogQHR5cGU6IHR5cGUgb2YgcmVxdWVzdAorICogQHRhZzogdGFnIG9mIHBhY2tldAorICogQHJld2luZDogc2V0IGlmIHdlIG5lZWQgdG8gcmV3aW5kIG9mZnNldCBhZnRlcndhcmRzCisgKi8KKworaW50CitwOV9wYXJzZV9oZWFkZXIoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDMyX3QgKnNpemUsIGludDhfdCAqdHlwZSwgaW50MTZfdCAqdGFnLAorCQkJCQkJCQlpbnQgcmV3aW5kKQoreworCWludDhfdCByX3R5cGU7CisJaW50MTZfdCByX3RhZzsKKwlpbnQzMl90IHJfc2l6ZTsKKwlpbnQgb2Zmc2V0ID0gcGR1LT5vZmZzZXQ7CisJaW50IGVycjsKKworCXBkdS0+b2Zmc2V0ID0gMDsKKwlpZiAocGR1LT5zaXplID09IDApCisJCXBkdS0+c2l6ZSA9IDc7CisKKwllcnIgPSBwOXBkdV9yZWFkZihwZHUsIDAsICJkYnciLCAmcl9zaXplLCAmcl90eXBlLCAmcl90YWcpOworCWlmIChlcnIpCisJCWdvdG8gcmV3aW5kX2FuZF9leGl0OworCisJcGR1LT5zaXplID0gcl9zaXplOworCXBkdS0+aWQgPSByX3R5cGU7CisJcGR1LT50YWcgPSByX3RhZzsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgc2l6ZT0lZCB0eXBlOiAlZCB0YWc6ICVkXG4iLCBwZHUtPnNpemUsCisJCQkJCQkJcGR1LT5pZCwgcGR1LT50YWcpOworCisJaWYgKHR5cGUpCisJCSp0eXBlID0gcl90eXBlOworCWlmICh0YWcpCisJCSp0YWcgPSByX3RhZzsKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSByX3NpemU7CisKKworcmV3aW5kX2FuZF9leGl0OgorCWlmIChyZXdpbmQpCisJCXBkdS0+b2Zmc2V0ID0gb2Zmc2V0OworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X3BhcnNlX2hlYWRlcik7CisKKy8qKgorICogcDlfY2hlY2tfZXJyb3JzIC0gY2hlY2sgOXAgcGFja2V0IGZvciBlcnJvciByZXR1cm4gYW5kIHByb2Nlc3MgaXQKKyAqIEBjOiBjdXJyZW50IGNsaWVudCBpbnN0YW5jZQorICogQHJlcTogcmVxdWVzdCB0byBwYXJzZSBhbmQgY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMKKyAqCisgKiByZXR1cm5zIGVycm9yIGNvZGUgaWYgb25lIGlzIGRpc2NvdmVyZWQsIG90aGVyd2lzZSByZXR1cm5zIDAKKyAqCisgKiB0aGlzIHdpbGwgaGF2ZSB0byBiZSBtb3JlIGNvbXBsaWNhdGVkIGlmIHdlIGhhdmUgbXVsdGlwbGUKKyAqIGVycm9yIHBhY2tldCB0eXBlcworICovCisKK3N0YXRpYyBpbnQgcDlfY2hlY2tfZXJyb3JzKHN0cnVjdCBwOV9jbGllbnQgKmMsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCWludDhfdCB0eXBlOworCWludCBlcnI7CisKKwllcnIgPSBwOV9wYXJzZV9oZWFkZXIocmVxLT5yYywgTlVMTCwgJnR5cGUsIE5VTEwsIDApOwogCWlmIChlcnIpIHsKLQkJaWYgKHJjICYmIHJjLT5pZCA9PSBQOV9SV0FMSykKLQkJCWdvdG8gY2x1bmtfZmlkOwotCQllbHNlCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgaGVhZGVyICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChyYy0+cGFyYW1zLnJ3YWxrLm53cWlkICE9IG53bmFtZSkgewotCQllcnIgPSAtRU5PRU5UOwotCQlnb3RvIGNsdW5rX2ZpZDsKLQl9CisJaWYgKHR5cGUgPT0gUDlfUkVSUk9SKSB7CisJCWludCBlY29kZTsKKwkJY2hhciAqZW5hbWU7CiAKLQlpZiAobnduYW1lKQotCQltZW1tb3ZlKCZmaWQtPnFpZCwKLQkJCSZyYy0+cGFyYW1zLnJ3YWxrLndxaWRzW3JjLT5wYXJhbXMucndhbGsubndxaWQgLSAxXSwKLQkJCXNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0JZWxzZQotCQlmaWQtPnFpZCA9IG9sZGZpZC0+cWlkOwotCi0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1jbHVua19maWQ6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyYyA9IE5VTEw7Ci0JdGMgPSBwOV9jcmVhdGVfdGNsdW5rKGZpZC0+ZmlkKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0KLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7Ci0KLWludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG1vZGUgJWRcbiIsIGZpZC0+ZmlkLCBtb2RlKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCWlmIChmaWQtPm1vZGUgIT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGMgPSBwOV9jcmVhdGVfdG9wZW4oZmlkLT5maWQsIG1vZGUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9vcGVuKTsKLQotaW50IHA5X2NsaWVudF9mY3JlYXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIGludCBtb2RlLAotCQkgICAgIGNoYXIgKmV4dGVuc2lvbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsCi0JCW5hbWUsIHBlcm0sIG1vZGUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JaWYgKGZpZC0+bW9kZSAhPSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90Y3JlYXRlKGZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlLCBleHRlbnNpb24sCi0JCQkJCQkJICAgICAgIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKLQotaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCXRjID0gcDlfY3JlYXRlX3RjbHVuayhmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7Ci0KLWludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JdGMgPSBwOV9jcmVhdGVfdHJlbW92ZShmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZW1vdmUpOwotCi1pbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHJlYWQoZmlkLT5maWQsIG9mZnNldCwgcnNpemUpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWlmIChuID4gY291bnQpCi0JCQluID0gY291bnQ7Ci0KLQkJbWVtbW92ZShkYXRhLCByYy0+cGFyYW1zLnJyZWFkLmRhdGEsIG4pOwotCQljb3VudCAtPSBuOwotCQlkYXRhICs9IG47Ci0JCW9mZnNldCArPSBuOwotCQl0b3RhbCArPSBuOwotCQlrZnJlZSh0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJa2ZyZWUocmMpOwotCQlyYyA9IE5VTEw7Ci0JfSB3aGlsZSAoY291bnQgPiAwICYmIG4gPT0gcnNpemUpOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkKTsKLQotaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90d3JpdGUoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWNvdW50IC09IG47Ci0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCXRvdGFsICs9IG47Ci0JCWtmcmVlKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlrZnJlZShyYyk7Ci0JCXJjID0gTlVMTDsKLQl9IHdoaWxlIChjb3VudCA+IDApOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93cml0ZSk7Ci0KLWludAotcDlfY2xpZW50X3VyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7Ci0JCWlmIChJU19FUlIodGMpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCXRjID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsKLQotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJaWYgKG4gPiBjb3VudCkKLQkJCW4gPSBjb3VudDsKLQotCQllcnIgPSBjb3B5X3RvX3VzZXIoZGF0YSwgcmMtPnBhcmFtcy5ycmVhZC5kYXRhLCBuKTsKKwkJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgYy0+ZG90dSwgInM/ZCIsICZlbmFtZSwgJmVjb2RlKTsKIAkJaWYgKGVycikgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3I7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgZXJyb3IlZFxuIiwKKwkJCQkJCQkJCWVycik7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCAmJiBuID09IHJzaXplKTsKKwkJaWYgKGMtPmRvdHUpCisJCQllcnIgPSAtZWNvZGU7CiAKLQlyZXR1cm4gdG90YWw7CisJCWlmICghZXJyKSB7CisJCQllcnIgPSBwOV9lcnJzdHIyZXJybm8oZW5hbWUsIHN0cmxlbihlbmFtZSkpOwogCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF91cmVhZCk7Ci0KLWludAotcDlfY2xpZW50X3V3cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQkgICB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHdyaXRlX3UoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOworCQkJLyogc3RyaW5nIG1hdGNoIGZhaWxlZCAqLworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gLUVTRVJWRVJGQVVMVDsKIAkJfQogCi0JCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJFUlJPUiAoJWQpICVzXG4iLCAtZWNvZGUsIGVuYW1lKTsKIAotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCk7CisJCWtmcmVlKGVuYW1lKTsKKwl9IGVsc2UKKwkJZXJyID0gMDsKIAotCXJldHVybiB0b3RhbDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdXdyaXRlKTsKIAotaW50IHA5X2NsaWVudF9yZWFkbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKKy8qKgorICogcDlfY2xpZW50X2ZsdXNoIC0gZmx1c2ggKGNhbmNlbCkgYSByZXF1ZXN0CisgKiBjOiBjbGllbnQgc3RhdGUKKyAqIHJlcTogcmVxdWVzdCB0byBjYW5jZWwKKyAqCisgKiBUaGlzIHNlbnRzIGEgZmx1c2ggZm9yIGEgcGFydGljdWxhciByZXF1ZXN0cyBhbmQgbGlua3MKKyAqIHRoZSBmbHVzaCByZXF1ZXN0IHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAgVGhlIGN1cnJlbnQKKyAqIGNvZGUgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBmbHVzaCByZXF1ZXN0IGFsdGhvdWdoIHRoZSBwcm90b2NvbAorICogYWxsb3dzIGZvciBtdWx0aXBsZSBmbHVzaCByZXF1ZXN0cyB0byBiZSBzZW50IGZvciBhIHNpbmdsZSByZXF1ZXN0LgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X2NsaWVudF9mbHVzaChzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKm9sZHJlcSkKIHsKLQlpbnQgbiwgdG90YWw7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JbiA9IDA7Ci0JdG90YWwgPSAwOwotCXdoaWxlIChjb3VudCkgewotCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCBvZmZzZXQsIGNvdW50KTsKLQkJaWYgKG4gPD0gMCkKLQkJCWJyZWFrOwotCi0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCWNvdW50IC09IG47Ci0JCXRvdGFsICs9IG47Ci0JfQotCi0JaWYgKG4gPCAwKQotCQl0b3RhbCA9IG47Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkbik7Ci0KLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpCi17CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBvbGR0YWc7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQlzdHJ1Y3QgcDlfc3RhdCAqcmV0OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQlyZXQgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90c3RhdChmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCWVyciA9IHA5X3BhcnNlX2hlYWRlcihvbGRyZXEtPnRjLCBOVUxMLCBOVUxMLCAmb2xkdGFnLCAxKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gZXJyOwogCi0JcmV0ID0gcDlfY2xvbmVfc3RhdCgmcmMtPnBhcmFtcy5yc3RhdC5zdGF0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHJldCkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXQpOwotCQlyZXQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRGTFVTSCB0YWcgJWRcbiIsIG9sZHRhZyk7CiAKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiByZXQ7CisJcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9URkxVU0gsICJ3Iiwgb2xkdGFnKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0Ja2ZyZWUocmV0KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJlcS0+Zmx1c2hfdGFnID0gb2xkdGFnOworCisJLyogd2UgZG9uJ3QgZnJlZSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgUlBDIGlzbid0IGNvbXBsZXRlICovCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zdGF0KTsKIAotaW50IHA5X2NsaWVudF93c3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV93c3RhdCAqd3N0KQorLyoqCisgKiBwOV9jbGllbnRfcnBjIC0gaXNzdWUgYSByZXF1ZXN0IGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlCisgKiBAYzogY2xpZW50IHNlc3Npb24KKyAqIEB0eXBlOiB0eXBlIG9mIHJlcXVlc3QKKyAqIEBmbXQ6IHByb3RvY29sIGZvcm1hdCBzdHJpbmcgKHNlZSBwcm90b2NvbC5jKQorICoKKyAqIFJldHVybnMgcmVxdWVzdCBzdHJ1Y3R1cmUgKHdoaWNoIGNsaWVudCBtdXN0IGZyZWUgdXNpbmcgcDlfZnJlZV9yZXEpCisgKi8KKworc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXZhX2xpc3QgYXA7CisJaW50IHRhZywgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpZ3BlbmRpbmc7CisJaW50IGZsdXNoZWQgPSAwOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xpZW50ICVwIG9wICVkXG4iLCBjLCB0eXBlKTsKIAotCXRjID0gcDlfY3JlYXRlX3R3c3RhdChmaWQtPmZpZCwgd3N0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGRvbmU7CisJaWYgKGMtPnN0YXR1cyAhPSBDb25uZWN0ZWQpCisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNpZ3BlbmRpbmcgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJfSBlbHNlCisJCXNpZ3BlbmRpbmcgPSAwOworCisJdGFnID0gUDlfTk9UQUc7CisJaWYgKHR5cGUgIT0gUDlfVFZFUlNJT04pIHsKKwkJdGFnID0gcDlfaWRwb29sX2dldChjLT50YWdwb29sKTsKKwkJaWYgKHRhZyA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCXJlcSA9IHA5X3RhZ19hbGxvYyhjLCB0YWcpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIHJlcTsKIAotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93c3RhdCk7CisJLyogbWFyc2hhbGwgdGhlIGRhdGEgKi8KKwlwOXBkdV9wcmVwYXJlKHJlcS0+dGMsIHRhZywgdHlwZSk7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZXJyID0gcDlwZHVfdndyaXRlZihyZXEtPnRjLCBjLT5kb3R1LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXA5cGR1X2ZpbmFsaXplKHJlcS0+dGMpOwogCi1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X2RpcnJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCB1NjQgb2Zmc2V0KQotewotCWludCBlcnIsIG4sIG07Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X3N0YXQgc3QsICpyZXQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1XG4iLCBmaWQtPmZpZCwKLQkJCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCXJldCA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCS8qIGlmIHRoZSBvZmZzZXQgaXMgYmVsb3cgb3IgYWJvdmUgdGhlIGN1cnJlbnQgcmVzcG9uc2UsIGZyZWUgaXQgKi8KLQlpZiAob2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MgfHwgKGZpZC0+cmRpcl9mY2FsbCAmJgotCQlvZmZzZXQgPj0gZmlkLT5yZGlyX2Zwb3MrZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpKSB7Ci0JCWZpZC0+cmRpcl9wb3MgPSAwOwotCQlpZiAoZmlkLT5yZGlyX2ZjYWxsKQotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0KLQkJa2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKLQkJZmlkLT5yZGlyX2ZjYWxsID0gTlVMTDsKLQkJaWYgKG9mZnNldCA8IGZpZC0+cmRpcl9mcG9zKQotCQkJZmlkLT5yZGlyX2Zwb3MgPSAwOworCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOworCWlmIChlcnIgPCAwKSB7CisJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwkJZ290byByZXRlcnI7CiAJfQogCi0JaWYgKCFmaWQtPnJkaXJfZmNhbGwpIHsKLQkJbiA9IGZpZC0+aW91bml0OwotCQlpZiAoIW4gfHwgbiA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCQluID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCS8qIGlmIGl0IHdhcyBhIGZsdXNoIHdlIGp1c3QgdHJhbnNtaXR0ZWQsIHJldHVybiBvdXIgdGFnICovCisJaWYgKHR5cGUgPT0gUDlfVEZMVVNIKQorCQlyZXR1cm4gcmVxOworYWdhaW46CisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJ3YWl0ICVwIHRhZzogJWRcbiIsIHJlcS0+d3EsIHRhZyk7CisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpyZXEtPndxLAorCQkJCQkJcmVxLT5zdGF0dXMgPj0gUkVRX1NUQVRVU19SQ1ZEKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndhaXQgJXAgdGFnOiAlZCByZXR1cm5lZCAlZCAoZmx1c2hlZD0lZClcbiIsCisJCQkJCQlyZXEtPndxLCB0YWcsIGVyciwgZmx1c2hlZCk7CiAKLQkJd2hpbGUgKDEpIHsKLQkJCWlmIChmaWQtPnJkaXJfZmNhbGwpIHsKLQkJCQlmaWQtPnJkaXJfZnBvcyArPQotCQkJCQlmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJCQlrZnJlZShmaWQtPnJkaXJfZmNhbGwpOwotCQkJCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7Ci0JCQl9CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgInJlcV9zdGF0dXMgZXJyb3IgJWRcbiIsIHJlcS0+dF9lcnIpOworCQllcnIgPSByZXEtPnRfZXJyOworCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUyAmJiBmbHVzaGVkKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hlZCAtIGdvaW5nIGFnYWluXG4iKTsKKwkJZ290byBhZ2FpbjsKKwl9IGVsc2UgaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRkxTSEQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJmbHVzaGVkIC0gZXJlc3RhcnRzeXNcbiIpOworCQllcnIgPSAtRVJFU1RBUlRTWVM7CisJfQogCi0JCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgZmlkLT5yZGlyX2Zwb3MsIG4pOwotCQkJaWYgKElTX0VSUih0YykpIHsKLQkJCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCQl0YyA9IE5VTEw7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KKwlpZiAoKGVyciA9PSAtRVJFU1RBUlRTWVMpICYmIChjLT5zdGF0dXMgPT0gQ29ubmVjdGVkKSAmJiAoIWZsdXNoZWQpKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hpbmdcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlpZiAocmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19TRU5UKQorCQkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0ZMU0g7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJc2lncGVuZGluZyA9IDE7CisJCWZsdXNoZWQgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAKLQkJCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCW4gPSByYy0+cGFyYW1zLnJyZWFkLmNvdW50OwotCQkJaWYgKG4gPT0gMCkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCWZpZC0+cmRpcl9mY2FsbCA9IHJjOwotCQkJcmMgPSBOVUxMOwotCQkJaWYgKG9mZnNldCA+PSBmaWQtPnJkaXJfZnBvcyAmJgotCQkJCQkJb2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MrbikKLQkJCQlicmVhazsKKwkJaWYgKGMtPnRyYW5zX21vZC0+Y2FuY2VsKGMsIHJlcSkpIHsKKwkJCWVyciA9IHA5X2NsaWVudF9mbHVzaChjLCByZXEpOworCQkJaWYgKGVyciA9PSAwKQorCQkJCWdvdG8gYWdhaW47CiAJCX0KLQotCQlmaWQtPnJkaXJfcG9zID0gMDsKIAl9CiAKLQltID0gb2Zmc2V0IC0gZmlkLT5yZGlyX2Zwb3M7Ci0JaWYgKG0gPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQluID0gcDlfZGVzZXJpYWxpemVfc3RhdChmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5kYXRhICsgbSwKLQkJZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQgLSBtLCAmc3QsIGNsbnQtPmRvdHUpOwotCi0JaWYgKCFuKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHNpZ3BlbmRpbmcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCX0KIAotCWZpZC0+cmRpcl9wb3MgKz0gbjsKLQlzdC5zaXplID0gbjsKLQlyZXQgPSBwOV9jbG9uZV9zdGF0KCZzdCwgY2xudC0+ZG90dSk7Ci0JaWYgKElTX0VSUihyZXQpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmV0KTsKLQkJcmV0ID0gTlVMTDsKLQkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byByZXRlcnI7CisKKwllcnIgPSBwOV9jaGVja19lcnJvcnMoYywgcmVxKTsKKwlpZiAoIWVycikgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImV4aXQ6IGNsaWVudCAlcCBvcCAlZFxuIiwgYywgdHlwZSk7CisJCXJldHVybiByZXE7CiAJfQogCi1kb25lOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIHJldDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlrZnJlZShyZXQpOworcmV0ZXJyOgorCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXhpdDogY2xpZW50ICVwIG9wICVkIGVycm9yOiAlZFxuIiwgYywgdHlwZSwKKwkJCQkJCQkJCWVycik7CisJcDlfZnJlZV9yZXEoYywgcmVxKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfZGlycmVhZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfc3RhdCAqcDlfY2xvbmVfc3RhdChzdHJ1Y3QgcDlfc3RhdCAqc3QsIGludCBkb3R1KQotewotCWludCBuOwotCWNoYXIgKnA7Ci0Jc3RydWN0IHA5X3N0YXQgKnJldDsKLQotCW4gPSBzaXplb2Yoc3RydWN0IHA5X3N0YXQpICsgc3QtPm5hbWUubGVuICsgc3QtPnVpZC5sZW4gKyBzdC0+Z2lkLmxlbiArCi0JCXN0LT5tdWlkLmxlbjsKLQotCWlmIChkb3R1KQotCQluICs9IHN0LT5leHRlbnNpb24ubGVuOwotCi0JcmV0ID0ga21hbGxvYyhuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltZW1tb3ZlKHJldCwgc3QsIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCkpOwotCXAgPSAoKGNoYXIgKikgcmV0KSArIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCk7Ci0JbWVtbW92ZShwLCBzdC0+bmFtZS5zdHIsIHN0LT5uYW1lLmxlbik7Ci0JcmV0LT5uYW1lLnN0ciA9IHA7Ci0JcCArPSBzdC0+bmFtZS5sZW47Ci0JbWVtbW92ZShwLCBzdC0+dWlkLnN0ciwgc3QtPnVpZC5sZW4pOwotCXJldC0+dWlkLnN0ciA9IHA7Ci0JcCArPSBzdC0+dWlkLmxlbjsKLQltZW1tb3ZlKHAsIHN0LT5naWQuc3RyLCBzdC0+Z2lkLmxlbik7Ci0JcmV0LT5naWQuc3RyID0gcDsKLQlwICs9IHN0LT5naWQubGVuOwotCW1lbW1vdmUocCwgc3QtPm11aWQuc3RyLCBzdC0+bXVpZC5sZW4pOwotCXJldC0+bXVpZC5zdHIgPSBwOwotCXAgKz0gc3QtPm11aWQubGVuOwotCi0JaWYgKGRvdHUpIHsKLQkJbWVtbW92ZShwLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgc3QtPmV4dGVuc2lvbi5sZW4pOwotCQlyZXQtPmV4dGVuc2lvbi5zdHIgPSBwOwotCQlwICs9IHN0LT5leHRlbnNpb24ubGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiY2xudCAlcFxuIiwgY2xudCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GSUQsICJjbG50ICVwXG4iLCBjbG50KTsKIAlmaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmlkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTA1Myw4ICs2MjcsNiBAQAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7CiAJZmlkLT5yZGlyX2Zwb3MgPSAwOwotCWZpZC0+cmRpcl9wb3MgPSAwOwotCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7CiAJZmlkLT51aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlmaWQtPmNsbnQgPSBjbG50OwogCWZpZC0+YXV4ID0gTlVMTDsKQEAgLTEwNzQsMTIgKzY0Niw2MzEgQEAKIHsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfRklELCAiZmlkICVkXG4iLCBmaWQtPmZpZCk7CiAJY2xudCA9IGZpZC0+Y2xudDsKIAlwOV9pZHBvb2xfcHV0KGZpZC0+ZmlkLCBjbG50LT5maWRwb29sKTsKIAlzcGluX2xvY2soJmNsbnQtPmxvY2spOwogCWxpc3RfZGVsKCZmaWQtPmZsaXN0KTsKIAlzcGluX3VubG9jaygmY2xudC0+bG9jayk7Ci0Ja2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKIAlrZnJlZShmaWQpOwogfQorCitpbnQgcDlfY2xpZW50X3ZlcnNpb24oc3RydWN0IHA5X2NsaWVudCAqYykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICp2ZXJzaW9uOworCWludCBtc2l6ZTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFZFUlNJT04gbXNpemUgJWQgZXh0ZW5kZWQgJWRcbiIsCisJCQkJCQkJYy0+bXNpemUsIGMtPmRvdHUpOworCXJlcSA9IHA5X2NsaWVudF9ycGMoYywgUDlfVFZFUlNJT04sICJkcyIsIGMtPm1zaXplLAorCQkJCWMtPmRvdHUgPyAiOVAyMDAwLnUiIDogIjlQMjAwMCIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGMtPmRvdHUsICJkcyIsICZtc2l6ZSwgJnZlcnNpb24pOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgInZlcnNpb24gZXJyb3IgJWRcbiIsIGVycik7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSVkVSU0lPTiBtc2l6ZSAlZCAlc1xuIiwgbXNpemUsIHZlcnNpb24pOworCWlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAudSIsIDgpKQorCQljLT5kb3R1ID0gMTsKKwllbHNlIGlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAiLCA2KSkKKwkJYy0+ZG90dSA9IDA7CisJZWxzZSB7CisJCWVyciA9IC1FUkVNT1RFSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG1zaXplIDwgYy0+bXNpemUpCisJCWMtPm1zaXplID0gbXNpemU7CisKK2Vycm9yOgorCWtmcmVlKHZlcnNpb24pOworCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdmVyc2lvbik7CisKK3N0cnVjdCBwOV9jbGllbnQgKnA5X2NsaWVudF9jcmVhdGUoY29uc3QgY2hhciAqZGV2X25hbWUsIGNoYXIgKm9wdGlvbnMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJZXJyID0gMDsKKwljbG50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmICghY2xudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljbG50LT50cmFuc19tb2QgPSBOVUxMOworCWNsbnQtPnRyYW5zID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmY2xudC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNsbnQtPmZpZGxpc3QpOworCWNsbnQtPmZpZHBvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjbG50LT5maWRwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGNsbnQtPmZpZHBvb2wpOworCQljbG50LT5maWRwb29sID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwOV90YWdfaW5pdChjbG50KTsKKworCWVyciA9IHBhcnNlX29wdHMob3B0aW9ucywgY2xudCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoY2xudC0+dHJhbnNfbW9kID09IE5VTEwpIHsKKwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkiTm8gdHJhbnNwb3J0IGRlZmluZWQgb3IgZGVmYXVsdCB0cmFuc3BvcnRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCB0cmFucyAlcCBtc2l6ZSAlZCBkb3R1ICVkXG4iLAorCQljbG50LCBjbG50LT50cmFuc19tb2QsIGNsbnQtPm1zaXplLCBjbG50LT5kb3R1KTsKKworCWVyciA9IGNsbnQtPnRyYW5zX21vZC0+Y3JlYXRlKGNsbnQsIGRldl9uYW1lLCBvcHRpb25zKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJaWYgKChjbG50LT5tc2l6ZStQOV9JT0hEUlNaKSA+IGNsbnQtPnRyYW5zX21vZC0+bWF4c2l6ZSkKKwkJY2xudC0+bXNpemUgPSBjbG50LT50cmFuc19tb2QtPm1heHNpemUtUDlfSU9IRFJTWjsKKworCWVyciA9IHA5X2NsaWVudF92ZXJzaW9uKGNsbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gY2xudDsKKworZXJyb3I6CisJcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2NyZWF0ZSk7CisKK3ZvaWQgcDlfY2xpZW50X2Rlc3Ryb3koc3RydWN0IHA5X2NsaWVudCAqY2xudCkKK3sKKwlzdHJ1Y3QgcDlfZmlkICpmaWQsICpmaWRwdHI7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImNsbnQgJXBcbiIsIGNsbnQpOworCisJaWYgKGNsbnQtPnRyYW5zX21vZCkKKwkJY2xudC0+dHJhbnNfbW9kLT5jbG9zZShjbG50KTsKKworCXY5ZnNfcHV0X3RyYW5zKGNsbnQtPnRyYW5zX21vZCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmaWRwdHIsICZjbG50LT5maWRsaXN0LCBmbGlzdCkKKwkJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworCWlmIChjbG50LT5maWRwb29sKQorCQlwOV9pZHBvb2xfZGVzdHJveShjbG50LT5maWRwb29sKTsKKworCXA5X3RhZ19jbGVhbnVwKGNsbnQpOworCisJa2ZyZWUoY2xudCk7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kZXN0cm95KTsKKwordm9pZCBwOV9jbGllbnRfZGlzY29ubmVjdChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQoreworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKKwljbG50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKKworc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAorCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVFRBQ0ggYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKKwkJCQkJYWZpZCA/IGFmaWQtPmZpZCA6IC0xLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCWlmIChJU19FUlIoZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCWZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQVRUQUNILCAiZGRzcz9kIiwgZmlkLT5maWQsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVFRBQ0ggcWlkICV4LiVsbHguJXhcbiIsCisJCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24pOworCisJbWVtbW92ZSgmZmlkLT5xaWQsICZxaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBmaWQ7CisKK2Vycm9yOgorCWlmIChmaWQpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F0dGFjaCk7CisKK3N0cnVjdCBwOV9maWQgKgorcDlfY2xpZW50X2F1dGgoc3RydWN0IHA5X2NsaWVudCAqY2xudCwgY2hhciAqdW5hbWUsIHUzMiBuX3VuYW1lLCBjaGFyICphbmFtZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBwOV9maWQgKmFmaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVVRIIHVuYW1lICVzIGFuYW1lICVzXG4iLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlhZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKKwlpZiAoSVNfRVJSKGFmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoYWZpZCk7CisJCWFmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVEFVVEgsICJkc3M/ZCIsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVVRIIHFpZCAleC4lbGx4LiV4XG4iLAorCQkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uKTsKKworCW1lbW1vdmUoJmFmaWQtPnFpZCwgJnFpZCwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBhZmlkOworCitlcnJvcjoKKwlpZiAoYWZpZCkKKwkJcDlfZmlkX2Rlc3Ryb3koYWZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOworCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCisJaW50IGNsb25lKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCAqd3FpZHM7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBud3FpZHMsIGNvdW50OworCisJZXJyID0gMDsKKwljbG50ID0gb2xkZmlkLT5jbG50OworCWlmIChjbG9uZSkgeworCQlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCWZpZCA9IE5VTEw7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJZmlkLT51aWQgPSBvbGRmaWQtPnVpZDsKKwl9IGVsc2UKKwkJZmlkID0gb2xkZmlkOworCisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRXQUxLIGZpZHMgJWQsJWQgbnduYW1lICVkIHduYW1lWzBdICVzXG4iLAorCQlvbGRmaWQtPmZpZCwgZmlkLT5maWQsIG53bmFtZSwgd25hbWVzID8gd25hbWVzWzBdIDogTlVMTCk7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RXQUxLLCAiZGRUIiwgb2xkZmlkLT5maWQsIGZpZC0+ZmlkLAorCQkJCQkJCQlud25hbWUsIHduYW1lcyk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUiIsICZud3FpZHMsICZ3cWlkcyk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCQlnb3RvIGNsdW5rX2ZpZDsKKwl9CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUldBTEsgbndxaWQgJWQ6XG4iLCBud3FpZHMpOworCisJaWYgKG53cWlkcyAhPSBud25hbWUpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBjbHVua19maWQ7CisJfQorCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbndxaWRzOyBjb3VudCsrKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8ICAgICBbJWRdICV4LiVsbHguJXhcbiIsCisJCQljb3VudCwgd3FpZHNbY291bnRdLnR5cGUsIHdxaWRzW2NvdW50XS5wYXRoLAorCQkJd3FpZHNbY291bnRdLnZlcnNpb24pOworCisJaWYgKG53bmFtZSkKKwkJbWVtbW92ZSgmZmlkLT5xaWQsICZ3cWlkc1tud3FpZHMgLSAxXSwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwllbHNlCisJCWZpZC0+cWlkID0gb2xkZmlkLT5xaWQ7CisKKwlyZXR1cm4gZmlkOworCitjbHVua19maWQ6CisJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJZmlkID0gTlVMTDsKKworZXJyb3I6CisJaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7CisKK2ludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUT1BFTiBmaWQgJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsIG1vZGUpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCWlmIChmaWQtPm1vZGUgIT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UT1BFTiwgImRiIiwgZmlkLT5maWQsIG1vZGUpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgIlFkIiwgJnFpZCwgJmlvdW5pdCk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUk9QRU4gcWlkICV4LiVsbHguJXggaW91bml0ICV4XG4iLAorCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24sIGlvdW5pdCk7CisKKwlmaWQtPm1vZGUgPSBtb2RlOworCWZpZC0+aW91bml0ID0gaW91bml0OworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X29wZW4pOworCitpbnQgcDlfY2xpZW50X2ZjcmVhdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgaW50IG1vZGUsCisJCSAgICAgY2hhciAqZXh0ZW5zaW9uKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ1JFQVRFIGZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwKKwkJCQkJCWZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlKTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlpZiAoZmlkLT5tb2RlICE9IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVENSRUFURSwgImRzZGI/cyIsIGZpZC0+ZmlkLCBuYW1lLCBwZXJtLAorCQkJCW1vZGUsIGV4dGVuc2lvbik7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUWQiLCAmcWlkLCAmaW91bml0KTsKKwlpZiAoZXJyKSB7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZnJlZV9hbmRfZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ1JFQVRFIHFpZCAleC4lbGx4LiV4IGlvdW5pdCAleFxuIiwKKwkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uLCBpb3VuaXQpOworCisJZmlkLT5tb2RlID0gbW9kZTsKKwlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKKworZnJlZV9hbmRfZXJyb3I6CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKKworaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQ0xVTkssICJkIiwgZmlkLT5maWQpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7CisKK2ludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRSRU1PVkUgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UUkVNT1ZFLCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlJFTU9WRSBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3JlbW92ZSk7CisKK2ludAorcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsIHU2NCBvZmZzZXQsCisJCQkJCQkJCXUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICpkYXRhcHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUUkVBRCBmaWQgJWQgb2Zmc2V0ICVsbHUgJWRcbiIsIGZpZC0+ZmlkLAorCQkJCQkobG9uZyBsb25nIHVuc2lnbmVkKSBvZmZzZXQsIGNvdW50KTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisJdG90YWwgPSAwOworCisJcnNpemUgPSBmaWQtPmlvdW5pdDsKKwlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKKwkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CisKKwlpZiAoY291bnQgPCByc2l6ZSkKKwkJcnNpemUgPSBjb3VudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFJFQUQsICJkcWQiLCBmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiRCIsICZjb3VudCwgJmRhdGFwdHIpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJSRUFEIGNvdW50ICVkXG4iLCBjb3VudCk7CisKKwlpZiAoZGF0YSkgeworCQltZW1tb3ZlKGRhdGEsIGRhdGFwdHIsIGNvdW50KTsKKwkJZGF0YSArPSBjb3VudDsKKwl9CisKKwlpZiAodWRhdGEpIHsKKwkJZXJyID0gY29weV90b191c2VyKHVkYXRhLCBkYXRhcHRyLCBjb3VudCk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCQl9CisJfQorCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfcmVhZCk7CisKK2ludAorcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFdSSVRFIGZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwKKwkJCQlmaWQtPmZpZCwgKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCXRvdGFsID0gMDsKKworCXJzaXplID0gZmlkLT5pb3VuaXQ7CisJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCisJCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCisJaWYgKGNvdW50IDwgcnNpemUpCisJCXJzaXplID0gY291bnQ7CisJaWYgKGRhdGEpCisJCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdSSVRFLCAiZHFEIiwgZmlkLT5maWQsIG9mZnNldCwKKwkJCQkJCQkJcnNpemUsIGRhdGEpOworCWVsc2UKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UV1JJVEUsICJkcVUiLCBmaWQtPmZpZCwgb2Zmc2V0LAorCQkJCQkJCQlyc2l6ZSwgdWRhdGEpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgImQiLCAmY291bnQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXUklURSBjb3VudCAlZFxuIiwgY291bnQpOworCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3JpdGUpOworCitzdHJ1Y3QgcDlfd3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3dzdGF0ICpyZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwl1MTYgaWdub3JlZDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFNUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RTVEFULCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJ3UyIsICZpZ25vcmVkLCByZXQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gRVJSX1BUUihlcnIpOworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsCisJCSI8PDwgUlNUQVQgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIjw8PCAgICBtb2RlPSU4Ljh4IGF0aW1lPSU4Ljh4IG10aW1lPSU4Ljh4IGxlbmd0aD0lbGx4XG4iCisJCSI8PDwgICAgbmFtZT0lcyB1aWQ9JXMgZ2lkPSVzIG11aWQ9JXMgZXh0ZW5zaW9uPSglcylcbiIKKwkJIjw8PCAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJcmV0LT5zaXplLCByZXQtPnR5cGUsIHJldC0+ZGV2LCByZXQtPnFpZC50eXBlLAorCQlyZXQtPnFpZC5wYXRoLCByZXQtPnFpZC52ZXJzaW9uLCByZXQtPm1vZGUsCisJCXJldC0+YXRpbWUsIHJldC0+bXRpbWUsIHJldC0+bGVuZ3RoLCByZXQtPm5hbWUsCisJCXJldC0+dWlkLCByZXQtPmdpZCwgcmV0LT5tdWlkLCByZXQtPmV4dGVuc2lvbiwKKwkJcmV0LT5uX3VpZCwgcmV0LT5uX2dpZCwgcmV0LT5uX211aWQpOworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3N0YXQpOworCitpbnQgcDlfY2xpZW50X3dzdGF0KHN0cnVjdCBwOV9maWQgKmZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV1NUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJIiAgICAgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIiAgICAgbW9kZT0lOC44eCBhdGltZT0lOC44eCBtdGltZT0lOC44eCBsZW5ndGg9JWxseFxuIgorCQkiICAgICBuYW1lPSVzIHVpZD0lcyBnaWQ9JXMgbXVpZD0lcyBleHRlbnNpb249KCVzKVxuIgorCQkiICAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJd3N0LT5zaXplLCB3c3QtPnR5cGUsIHdzdC0+ZGV2LCB3c3QtPnFpZC50eXBlLAorCQl3c3QtPnFpZC5wYXRoLCB3c3QtPnFpZC52ZXJzaW9uLCB3c3QtPm1vZGUsCisJCXdzdC0+YXRpbWUsIHdzdC0+bXRpbWUsIHdzdC0+bGVuZ3RoLCB3c3QtPm5hbWUsCisJCXdzdC0+dWlkLCB3c3QtPmdpZCwgd3N0LT5tdWlkLCB3c3QtPmV4dGVuc2lvbiwKKwkJd3N0LT5uX3VpZCwgd3N0LT5uX2dpZCwgd3N0LT5uX211aWQpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdTVEFULCAiZHdTIiwgZmlkLT5maWQsIDAsIHdzdCk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXU1RBVCBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3N0YXQpOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL2NvbnYuYyBiL25ldC85cC9jb252LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZDNhM2IuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2NvbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTQgKzAsMCBAQAotLyoKLSAqIG5ldC85cC9jb252LmMKLSAqCi0gKiA5UCBwcm90b2NvbCBjb252ZXJzaW9uIGZ1bmN0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86Ci0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgotICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0vKgotICogQnVmZmVyIHRvIGhlbHAgd2l0aCBzdHJpbmcgcGFyc2luZwotICovCi1zdHJ1Y3QgY2J1ZiB7Ci0JdW5zaWduZWQgY2hhciAqc3A7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQl1bnNpZ25lZCBjaGFyICplcDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidWZfaW5pdChzdHJ1Y3QgY2J1ZiAqYnVmLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKLXsKLQlidWYtPnNwID0gYnVmLT5wID0gZGF0YTsKLQlidWYtPmVwID0gZGF0YSArIGRhdGFsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJ1Zl9jaGVja19vdmVyZmxvdyhzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXJldHVybiBidWYtPnAgPiBidWYtPmVwOwotfQotCi1zdGF0aWMgaW50IGJ1Zl9jaGVja19zaXplKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0JaWYgKGJ1Zi0+cCArIGxlbiA+IGJ1Zi0+ZXApIHsKLQkJaWYgKGJ1Zi0+cCA8IGJ1Zi0+ZXApIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJImJ1ZmZlciBvdmVyZmxvdzogd2FudCAlZCBoYXMgJWRcbiIsIGxlbiwKLQkJCQkoaW50KShidWYtPmVwIC0gYnVmLT5wKSk7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlidWYtPnAgPSBidWYtPmVwICsgMTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCAqYnVmX2FsbG9jKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0Jdm9pZCAqcmV0ID0gTlVMTDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIGxlbikpIHsKLQkJcmV0ID0gYnVmLT5wOwotCQlidWYtPnAgKz0gbGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmLCB1OCB2YWwpCi17Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMSkpIHsKLQkJYnVmLT5wWzBdID0gdmFsOwotCQlidWYtPnArKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MTYoc3RydWN0IGNidWYgKmJ1ZiwgdTE2IHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAyKSkgewotCQkqKF9fbGUxNiAqKSBidWYtPnAgPSBjcHVfdG9fbGUxNih2YWwpOwotCQlidWYtPnAgKz0gMjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZiwgdTMyIHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA0KSkgewotCQkqKF9fbGUzMiAqKWJ1Zi0+cCA9IGNwdV90b19sZTMyKHZhbCk7Ci0JCWJ1Zi0+cCArPSA0OwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX3B1dF9pbnQ2NChzdHJ1Y3QgY2J1ZiAqYnVmLCB1NjQgdmFsKQotewotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDgpKSB7Ci0JCSooX19sZTY0ICopYnVmLT5wID0gY3B1X3RvX2xlNjQodmFsKTsKLQkJYnVmLT5wICs9IDg7Ci0JfQotfQotCi1zdGF0aWMgY2hhciAqYnVmX3B1dF9zdHJpbmduKHN0cnVjdCBjYnVmICpidWYsIGNvbnN0IGNoYXIgKnMsIHUxNiBzbGVuKQotewotCWNoYXIgKnJldDsKLQotCXJldCA9IE5VTEw7Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1Ziwgc2xlbiArIDIpKSB7Ci0JCWJ1Zl9wdXRfaW50MTYoYnVmLCBzbGVuKTsKLQkJcmV0ID0gYnVmLT5wOwotCQltZW1jcHkoYnVmLT5wLCBzLCBzbGVuKTsKLQkJYnVmLT5wICs9IHNsZW47Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU4IGJ1Zl9nZXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXU4IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAxKSkgewotCQlyZXQgPSBidWYtPnBbMF07Ci0JCWJ1Zi0+cCsrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1MTYgYnVmX2dldF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXUxNiByZXQgPSAwOwotCi0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMikpIHsKLQkJcmV0ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKilidWYtPnApOwotCQlidWYtPnAgKz0gMjsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTMyIGJ1Zl9nZXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZikKLXsKLQl1MzIgcmV0ID0gMDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDQpKSB7Ci0JCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopYnVmLT5wKTsKLQkJYnVmLT5wICs9IDQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU2NCBidWZfZ2V0X2ludDY0KHN0cnVjdCBjYnVmICpidWYpCi17Ci0JdTY0IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA4KSkgewotCQlyZXQgPSBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKWJ1Zi0+cCk7Ci0JCWJ1Zi0+cCArPSA4OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9nZXRfc3RyKHN0cnVjdCBjYnVmICpidWYsIHN0cnVjdCBwOV9zdHIgKnZzdHIpCi17Ci0JdnN0ci0+bGVuID0gYnVmX2dldF9pbnQxNihidWYpOwotCWlmICghYnVmX2NoZWNrX292ZXJmbG93KGJ1ZikgJiYgYnVmX2NoZWNrX3NpemUoYnVmLCB2c3RyLT5sZW4pKSB7Ci0JCXZzdHItPnN0ciA9IGJ1Zi0+cDsKLQkJYnVmLT5wICs9IHZzdHItPmxlbjsKLQl9IGVsc2UgewotCQl2c3RyLT5sZW4gPSAwOwotCQl2c3RyLT5zdHIgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX2dldF9xaWQoc3RydWN0IGNidWYgKmJ1ZnAsIHN0cnVjdCBwOV9xaWQgKnFpZCkKLXsKLQlxaWQtPnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0JcWlkLT52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlxaWQtPnBhdGggPSBidWZfZ2V0X2ludDY0KGJ1ZnApOwotfQotCi0vKioKLSAqIHA5X3NpemVfd3N0YXQgLSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSB2YXJpYWJsZSBsZW5ndGggc3RhdCBzdHJ1Y3QKLSAqIEB3c3RhdDogbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZQotICogQGRvdHU6IG5vbi16ZXJvIGlmIDlQMjAwMC51Ci0gKgotICovCi0KLXN0YXRpYyBpbnQgcDlfc2l6ZV93c3RhdChzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZSA9IDA7Ci0KLQlpZiAod3N0YXQgPT0gTlVMTCkgewotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAicDlfc2l6ZV9zdGF0OiBnb3QgYSBOVUxMIHN0YXQgcG9pbnRlclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNpemUgPQkJCS8qIDIgKyAqLy8qIHNpemVbMl0gKi8KLQkgICAgMiArCQkJLyogdHlwZVsyXSAqLwotCSAgICA0ICsJCQkvKiBkZXZbNF0gKi8KLQkgICAgMSArCQkJLyogcWlkLnR5cGVbMV0gKi8KLQkgICAgNCArCQkJLyogcWlkLnZlcnNbNF0gKi8KLQkgICAgOCArCQkJLyogcWlkLnBhdGhbOF0gKi8KLQkgICAgNCArCQkJLyogbW9kZVs0XSAqLwotCSAgICA0ICsJCQkvKiBhdGltZVs0XSAqLwotCSAgICA0ICsJCQkvKiBtdGltZVs0XSAqLwotCSAgICA4ICsJCQkvKiBsZW5ndGhbOF0gKi8KLQkgICAgODsJCQkvKiBtaW5pbXVtIHN1bSBvZiBzdHJpbmcgbGVuZ3RocyAqLwotCi0JaWYgKHdzdGF0LT5uYW1lKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+bmFtZSk7Ci0JaWYgKHdzdGF0LT51aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT51aWQpOwotCWlmICh3c3RhdC0+Z2lkKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+Z2lkKTsKLQlpZiAod3N0YXQtPm11aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXNpemUgKz0gNCArCS8qIG5fdWlkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fZ2lkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fbXVpZFs0XSAqLwotCQkgICAgMjsJCS8qIHN0cmluZyBsZW5ndGggb2YgZXh0ZW5zaW9uWzRdICovCi0JCWlmICh3c3RhdC0+ZXh0ZW5zaW9uKQotCQkJc2l6ZSArPSBzdHJsZW4od3N0YXQtPmV4dGVuc2lvbik7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qKgotICogYnVmX2dldF9zdGF0IC0gc2FmZWx5IGRlY29kZSBhIHJlY2lldmVkIG1ldGFkYXRhIChzdGF0KSBzdHJ1Y3R1cmUKLSAqIEBidWZwOiBidWZmZXIgdG8gZGVzZXJpYWxpemUKLSAqIEBzdGF0OiBtZXRhZGF0YSAoc3RhdCkgc3RydWN0dXJlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQKLWJ1Zl9nZXRfc3RhdChzdHJ1Y3QgY2J1ZiAqYnVmcCwgc3RydWN0IHA5X3N0YXQgKnN0YXQsIGludCBkb3R1KQotewotCXN0YXQtPnNpemUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPnR5cGUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPmRldiA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+cWlkLnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0Jc3RhdC0+cWlkLnZlcnNpb24gPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQlzdGF0LT5tb2RlID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlzdGF0LT5hdGltZSA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+bXRpbWUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPmxlbmd0aCA9IGJ1Zl9nZXRfaW50NjQoYnVmcCk7Ci0JYnVmX2dldF9zdHIoYnVmcCwgJnN0YXQtPm5hbWUpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT51aWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5naWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5leHRlbnNpb24pOwotCQlzdGF0LT5uX3VpZCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXN0YXQtPm5fZ2lkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJc3RhdC0+bl9tdWlkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQl9Ci19Ci0KLS8qKgotICogcDlfZGVzZXJpYWxpemVfc3RhdCAtIGRlY29kZSBhIHJlY2VpdmVkIG1ldGFkYXRhIHN0cnVjdHVyZQotICogQGJ1ZjogYnVmZmVyIHRvIGRlc2VyaWFsaXplCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAc3RhdDogbWV0YWRhdGEgc3RydWN0dXJlIHRvIGRlY29kZSBpbnRvCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKiBOb3RlOiBzdGF0IHdpbGwgcG9pbnQgdG8gdGhlIGJ1ZiByZWdpb24uCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JCWludCBkb3R1KQotewotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQotCWJ1Zl9pbml0KGJ1ZnAsIGJ1ZiwgYnVmbGVuKTsKLQlwID0gYnVmcC0+cDsKLQlidWZfZ2V0X3N0YXQoYnVmcCwgc3RhdCwgZG90dSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBidWZwLT5wIC0gcDsKLX0KLUVYUE9SVF9TWU1CT0wocDlfZGVzZXJpYWxpemVfc3RhdCk7Ci0KLS8qKgotICogZGVzZXJpYWxpemVfZmNhbGwgLSB1bm1hcnNoYWwgYSByZXNwb25zZQotICogQGJ1ZjogcmVjaWV2ZWQgYnVmZmVyCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAcmNhbGw6IGZjYWxsIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQotICogQHJjYWxsbGVuOiBsZW5ndGggb2YgZmNhbGwgc3RydWN0dXJlIHRvIHBvcHVsYXRlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9mY2FsbCh2b2lkICpidWYsIHUzMiBidWZsZW4sIHN0cnVjdCBwOV9mY2FsbCAqcmNhbGwsCi0JCSAgICAgICBpbnQgZG90dSkKLXsKLQotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JaW50IGkgPSAwOwotCi0JYnVmX2luaXQoYnVmcCwgYnVmLCBidWZsZW4pOwotCi0JcmNhbGwtPnNpemUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXJjYWxsLT5pZCA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQlyY2FsbC0+dGFnID0gYnVmX2dldF9pbnQxNihidWZwKTsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfQ09OViwgInNpemUgJWQgaWQgJWQgdGFnICVkXG4iLCByY2FsbC0+c2l6ZSwKLQkJCQkJCQlyY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCi0Jc3dpdGNoIChyY2FsbC0+aWQpIHsKLQlkZWZhdWx0OgotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAidW5rbm93biBtZXNzYWdlIHR5cGU6ICVkXG4iLCByY2FsbC0+aWQpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQljYXNlIFA5X1JWRVJTSU9OOgotCQlyY2FsbC0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkZMVVNIOgotCQlicmVhazsKLQljYXNlIFA5X1JBVFRBQ0g6Ci0JCXJjYWxsLT5wYXJhbXMucmF0dGFjaC5xaWQudHlwZSA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SV0FMSzoKLQkJcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZCA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWlmIChyY2FsbC0+cGFyYW1zLnJ3YWxrLm53cWlkID4gUDlfTUFYV0VMRU0pIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJCSJSd2FsayB3aXRoIG1vcmUgdGhhbiAlZCBxaWRzOiAlZFxuIiwKLQkJCQkJUDlfTUFYV0VMRU0sIHJjYWxsLT5wYXJhbXMucndhbGsubndxaWQpOwotCQkJcmV0dXJuIC1FUFJPVE87Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZDsgaSsrKQotCQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucndhbGsud3FpZHNbaV0pOwotCQlicmVhazsKLQljYXNlIFA5X1JPUEVOOgotCQlidWZfZ2V0X3FpZChidWZwLCAmcmNhbGwtPnBhcmFtcy5yb3Blbi5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJvcGVuLmlvdW5pdCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkNSRUFURToKLQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJjcmVhdGUuaW91bml0ID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVBRDoKLQkJcmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXJjYWxsLT5wYXJhbXMucnJlYWQuZGF0YSA9IGJ1ZnAtPnA7Ci0JCWJ1Zl9jaGVja19zaXplKGJ1ZnAsIHJjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpOwotCQlicmVhazsKLQljYXNlIFA5X1JXUklURToKLQkJcmNhbGwtPnBhcmFtcy5yd3JpdGUuY291bnQgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCQlicmVhazsKLQljYXNlIFA5X1JDTFVOSzoKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVNT1ZFOgotCQlicmVhazsKLQljYXNlIFA5X1JTVEFUOgotCQlidWZfZ2V0X2ludDE2KGJ1ZnApOwotCQlidWZfZ2V0X3N0YXQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnN0YXQuc3RhdCwgZG90dSk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUldTVEFUOgotCQlicmVhazsKLQljYXNlIFA5X1JFUlJPUjoKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yKTsKLQkJaWYgKGRvdHUpCi0JCQlyY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJubyA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiBidWZwLT5wIC0gYnVmcC0+c3A7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2Rlc2VyaWFsaXplX2ZjYWxsKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQ4KHN0cnVjdCBjYnVmICpidWZwLCB1OCB2YWwsIHU4ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDgoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTE2IHZhbCwgdTE2ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDE2KGJ1ZnAsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwOV9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZnAsIHUzMiB2YWwsIHUzMiAqIHApCi17Ci0JKnAgPSB2YWw7Ci0JYnVmX3B1dF9pbnQzMihidWZwLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcDlfcHV0X2ludDY0KHN0cnVjdCBjYnVmICpidWZwLCB1NjQgdmFsLCB1NjQgKiBwKQotewotCSpwID0gdmFsOwotCWJ1Zl9wdXRfaW50NjQoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLXA5X3B1dF9zdHIoc3RydWN0IGNidWYgKmJ1ZnAsIGNoYXIgKmRhdGEsIHN0cnVjdCBwOV9zdHIgKnN0cikKLXsKLQlpbnQgbGVuOwotCWNoYXIgKnM7Ci0KLQlpZiAoZGF0YSkKLQkJbGVuID0gc3RybGVuKGRhdGEpOwotCWVsc2UKLQkJbGVuID0gMDsKLQotCXMgPSBidWZfcHV0X3N0cmluZ24oYnVmcCwgZGF0YSwgbGVuKTsKLQlpZiAoc3RyKSB7Ci0JCXN0ci0+bGVuID0gbGVuOwotCQlzdHItPnN0ciA9IHM7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1wOV9wdXRfZGF0YShzdHJ1Y3QgY2J1ZiAqYnVmcCwgY29uc3QgY2hhciAqZGF0YSwgaW50IGNvdW50LAotCQkgICB1bnNpZ25lZCBjaGFyICoqcGRhdGEpCi17Ci0JKnBkYXRhID0gYnVmX2FsbG9jKGJ1ZnAsIGNvdW50KTsKLQlpZiAoKnBkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbW1vdmUoKnBkYXRhLCBkYXRhLCBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXA5X3B1dF91c2VyX2RhdGEoc3RydWN0IGNidWYgKmJ1ZnAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCBpbnQgY291bnQsCi0JCSAgIHVuc2lnbmVkIGNoYXIgKipwZGF0YSkKLXsKLQkqcGRhdGEgPSBidWZfYWxsb2MoYnVmcCwgY291bnQpOwotCWlmICgqcGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKCpwZGF0YSwgZGF0YSwgY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotcDlfcHV0X3dzdGF0KHN0cnVjdCBjYnVmICpidWZwLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCSAgICAgICBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCwgaW50IHN0YXRzeiwgaW50IGRvdHUpCi17Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIHN0YXRzeiwgJnN0YXQtPnNpemUpOwotCXA5X3B1dF9pbnQxNihidWZwLCB3c3RhdC0+dHlwZSwgJnN0YXQtPnR5cGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+ZGV2LCAmc3RhdC0+ZGV2KTsKLQlwOV9wdXRfaW50OChidWZwLCB3c3RhdC0+cWlkLnR5cGUsICZzdGF0LT5xaWQudHlwZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5xaWQudmVyc2lvbiwgJnN0YXQtPnFpZC52ZXJzaW9uKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPnFpZC5wYXRoLCAmc3RhdC0+cWlkLnBhdGgpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bW9kZSwgJnN0YXQtPm1vZGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+YXRpbWUsICZzdGF0LT5hdGltZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5tdGltZSwgJnN0YXQtPm10aW1lKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPmxlbmd0aCwgJnN0YXQtPmxlbmd0aCk7Ci0KLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5uYW1lLCAmc3RhdC0+bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB3c3RhdC0+dWlkLCAmc3RhdC0+dWlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5naWQsICZzdGF0LT5naWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPm11aWQsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPmV4dGVuc2lvbiwgJnN0YXQtPmV4dGVuc2lvbik7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl91aWQsICZzdGF0LT5uX3VpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9naWQsICZzdGF0LT5uX2dpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9tdWlkLCAmc3RhdC0+bl9tdWlkKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTMyIHNpemUsIHU4IGlkKQotewotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0KLQlzaXplICs9IDQgKyAxICsgMjsJLyogc2l6ZVs0XSBpZFsxXSB0YWdbMl0gKi8KLQlmYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZjKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWZjLT5zZGF0YSA9IChjaGFyICopZmMgKyBzaXplb2YoKmZjKTsKLQotCWJ1Zl9pbml0KGJ1ZnAsIChjaGFyICopZmMtPnNkYXRhLCBzaXplKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgc2l6ZSwgJmZjLT5zaXplKTsKLQlwOV9wdXRfaW50OChidWZwLCBpZCwgJmZjLT5pZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIFA5X05PVEFHLCAmZmMtPnRhZyk7Ci0KLQlyZXR1cm4gZmM7Ci19Ci0KLS8qKgotICogcDlfc2V0X3RhZyAtIHNldCB0aGUgdGFnIGZpZWxkIG9mIGFuICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBmYzogZmNhbGwgc3RydWN0dXJlIHRvIHNldCB0YWcgd2l0aGluCi0gKiBAdGFnOiB0YWcgaWQgdG8gc2V0Ci0gKi8KLQotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpCi17Ci0JZmMtPnRhZyA9IHRhZzsKLQkqKF9fbGUxNiAqKSAoZmMtPnNkYXRhICsgNSkgPSBjcHVfdG9fbGUxNih0YWcpOwotfQotRVhQT1JUX1NZTUJPTChwOV9zZXRfdGFnKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHZlcnNpb24gLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1ZFUlNJT04gcmVxdWVzdAotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBkYXRhIHNpemUKLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyB0byBuZWdvdGlhdGUKLSAqCi0gKi8KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R2ZXJzaW9uKHUzMiBtc2l6ZSwgY2hhciAqdmVyc2lvbikKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNCArIDIgKyBzdHJsZW4odmVyc2lvbik7CS8qIG1zaXplWzRdIHZlcnNpb25bc10gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFZFUlNJT04pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIG1zaXplLCAmZmMtPnBhcmFtcy50dmVyc2lvbi5tc2l6ZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB2ZXJzaW9uLCAmZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHZlcnNpb24pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90YXV0aCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVVUSCByZXF1ZXN0Ci0gKiBAYWZpZDogaGFuZGxlIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLSAqIEB1bmFtZTogdXNlciBuYW1lIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlCi0gKiBAYW5hbWU6IG1vdW50IHNwZWNpZmllciBmb3IgcmVtb3RlIHNlcnZlcgotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdXRobmV0aWNhdGUKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90YXV0aCh1MzIgYWZpZCwgY2hhciAqdW5hbWUsIGNoYXIgKmFuYW1lLAotCXUzMiBuX3VuYW1lLCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBhZmlkWzRdIHVuYW1lW3NdIGFuYW1lW3NdICovCi0Jc2l6ZSA9IDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVVRIKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXV0aC5hZmlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHVuYW1lLCAmZmMtPnBhcmFtcy50YXV0aC51bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCBhbmFtZSwgJmZjLT5wYXJhbXMudGF1dGguYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF1dGgubl91bmFtZSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RhdXRoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGF0dGFjaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVRUQUNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB0byB1c2UgZm9yIHRoZSBuZXcgbW91bnQgcG9pbnQKLSAqIEBhZmlkOiBoYW5kbGUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiBwcm90b2NvbAotICogQHVuYW1lOiB1c2VyIG5hbWUgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBhbmFtZTogbW91bnQgc3BlY2lmaWVyIGZvciByZW1vdGUgc2VydmVyCi0gKiBAbl91bmFtZTogbnVtZXJpYyBpZCBmb3IgdXNlciBhdHRlbXB0aW5nIHRvIGF0dGFjaAotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIGFmaWRbNF0gdW5hbWVbc10gYW5hbWVbc10gKi8KLQlzaXplID0gNCArIDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVFRBQ0gpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGF0dGFjaC5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXR0YWNoLmFmaWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgdW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2gudW5hbWUpOwotCXA5X3B1dF9zdHIoYnVmcCwgYW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2guYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF0dGFjaC5uX3VuYW1lKTsKLQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGF0dGFjaCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RmbHVzaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfRkxVU0ggcmVxdWVzdAotICogQG9sZHRhZzogdGFnIGlkIGZvciB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIGF0dGVtcHRpbmcgdG8gY2FuY2VsCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RmbHVzaCh1MTYgb2xkdGFnKQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSAyOwkJLyogb2xkdGFnWzJdICovCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RGTFVTSCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MTYoYnVmcCwgb2xkdGFnLCAmZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGZsdXNoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdhbGsgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX0ZMVVNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJhdmVyc2luZyBmcm9tCi0gKiBAbmV3ZmlkOiBhIG5ldyBoYW5kbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24KLSAqIEBud25hbWU6IG51bWJlciBvZiBwYXRoIGVsZW1lbnRzIHRvIHRyYXZlcnNlCi0gKiBAd25hbWVzOiBhcnJheSBvZiBwYXRoIGVsZW1lbnRzCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3YWxrKHUzMiBmaWQsIHUzMiBuZXdmaWQsIHUxNiBud25hbWUsCi0JCQkJICAgICBjaGFyICoqd25hbWVzKQotewotCWludCBpLCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCWlmIChud25hbWUgPiBQOV9NQVhXRUxFTSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibnduYW1lID4gJWRcbiIsIFA5X01BWFdFTEVNKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2l6ZSA9IDQgKyA0ICsgMjsJLyogZmlkWzRdIG5ld2ZpZFs0XSBud25hbWVbMl0gLi4uICovCi0JZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7Ci0JCXNpemUgKz0gMiArIHN0cmxlbih3bmFtZXNbaV0pOwkvKiB3bmFtZVtzXSAqLwotCX0KLQotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV0FMSyk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d2Fsay5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBuZXdmaWQsICZmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIG53bmFtZSwgJmZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnduYW1lOyBpKyspIHsKLQkJcDlfcHV0X3N0cihidWZwLCB3bmFtZXNbaV0sICZmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXSk7Ci0JfQotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90d2Fsayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RvcGVuIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9PUEVOIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJ5aW5nIHRvIG9wZW4KLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQgKyAxOwkJLyogZmlkWzRdIG1vZGVbMV0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVE9QRU4pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudG9wZW4uZmlkKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50b3Blbi5tb2RlKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdG9wZW4pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90Y3JlYXRlIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9DUkVBVEUgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBpbgotICogQG5hbWU6IG5hbWUgb2YgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBwZXJtOiBwZXJtaXNzaW9ucyBmb3IgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKiBAZXh0ZW5zaW9uOiA5cDIwMDAudSBleHRlbnNpb24gc3RyaW5nIChmb3Igc3BlY2lhbCBmaWxlcykKLSAqIEBkb3R1OiA5cDIwMDAudSBlbmFibGVkIGZsYWcKLSAqCi0gKiBOb3RlOiBQbGFuIDkgY3JlYXRlIHNlbWFudGljcyBpbmNsdWRlIG9wZW5pbmcgdGhlIHJlc3VsdGluZyBmaWxlCi0gKiB3aGljaCBpcyB3aHkgbW9kZSBpcyBpbmNsdWRlZC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y3JlYXRlKHUzMiBmaWQsIGNoYXIgKm5hbWUsIHUzMiBwZXJtLCB1OCBtb2RlLAotCWNoYXIgKmV4dGVuc2lvbiwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIG5hbWVbc10gcGVybVs0XSBtb2RlWzFdICovCi0Jc2l6ZSA9IDQgKyAyICsgc3RybGVuKG5hbWUpICsgNCArIDE7Ci0JaWYgKGRvdHUpIHsKLQkJc2l6ZSArPSAyICsJCQkvKiBleHRlbnNpb25bc10gKi8KLQkJICAgIChleHRlbnNpb24gPT0gTlVMTCA/IDAgOiBzdHJsZW4oZXh0ZW5zaW9uKSk7Ci0JfQotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RDUkVBVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNyZWF0ZS5maWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgbmFtZSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgcGVybSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5wZXJtKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50Y3JlYXRlLm1vZGUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfc3RyKGJ1ZnAsIGV4dGVuc2lvbiwgJmZjLT5wYXJhbXMudGNyZWF0ZS5leHRlbnNpb24pOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90Y3JlYXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHJlYWQgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1JFQUQgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIHdlIGFyZSB0cnlpbmcgdG8gcmVhZAotICogQG9mZnNldDogb2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbQotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byByZWFkCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHJlYWQodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50KQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSA0ICsgOCArIDQ7CS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFQUQpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHJlYWQuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBjb3VudCwgJmZjLT5wYXJhbXMudHJlYWQuY291bnQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90cmVhZCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3R3cml0ZSAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfV1JJVEUgcmVxdWVzdCBmcm9tIHRoZSBrZXJuZWwKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdXN0IHdpdGggZGF0YSBidWZmZXJzIGZyb20gdGhlIGtlcm5lbAotICogc3VjaCBhcyB0aGUgcGFnZSBjYWNoZS4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEpCi17Ci0JaW50IHNpemUsIGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBmaWRbNF0gb2Zmc2V0WzhdIGNvdW50WzRdIGRhdGFbY291bnRdICovCi0Jc2l6ZSA9IDQgKyA4ICsgNCArIGNvdW50OwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV1JJVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHdyaXRlLmZpZCk7Ci0JcDlfcHV0X2ludDY0KGJ1ZnAsIG9mZnNldCwgJmZjLT5wYXJhbXMudHdyaXRlLm9mZnNldCk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuY291bnQpOwotCWVyciA9IHA5X3B1dF9kYXRhKGJ1ZnAsIGRhdGEsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuZGF0YSk7Ci0JaWYgKGVycikgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUihlcnIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdyaXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdyaXRlX3UgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1dSSVRFIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdWVzdCB3aXRoIGRhdGEgYnVmZmVycyBmcm9tIHVzZXJzcGFjZQotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3cml0ZV91KHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCwKLQkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSkKLXsKLQlpbnQgc2l6ZSwgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gZGF0YVtjb3VudF0gKi8KLQlzaXplID0gNCArIDggKyA0ICsgY291bnQ7Ci0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RXUklURSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d3JpdGUuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50d3JpdGUub2Zmc2V0KTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgY291bnQsICZmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JZXJyID0gcDlfcHV0X3VzZXJfZGF0YShidWZwLCBkYXRhLCBjb3VudCwgJmZjLT5wYXJhbXMudHdyaXRlLmRhdGEpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3R3cml0ZV91KTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGNsdW5rIC0gYWxsb2NhdGUgYSByZXF1ZXN0IHRvIGZvcmdldCBhYm91dCBhIGZpbGUgaGFuZGxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgd2UgY2xvc2luZyBvciBmb3JnZXR0aW5nIGFib3V0Ci0gKgotICogY2x1bmsgaXMgdXNlZCBib3RoIHRvIGNsb3NlIG9wZW4gZmlsZXMgYW5kIHRvIGRpc2NhcmQgdHJhbnNpZW50IGhhbmRsZXMKLSAqIHdoaWNoIG1heSBiZSBjcmVhdGVkIGR1cmluZyBtZXRhLWRhdGEgb3BlcmF0aW9ucyBhbmQgaGllcmFyY2h5IHRyYXZlcnNhbC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y2x1bmsodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UQ0xVTkspOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNsdW5rLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RjbHVuayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RyZW1vdmUgLSBhbGxvY2F0ZSBhbmQgY3JlYXRlIGEgcmVxdWVzdCB0byByZW1vdmUgYSBmaWxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHdlIGFyZSByZW1vdmluZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90cmVtb3ZlKHUzMiBmaWQpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQ7CQkvKiBmaWRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFTU9WRSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50cmVtb3ZlLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RyZW1vdmUpOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90c3RhdCAtIGFsbG9jYXRlIGFuZCBwb3B1bGF0ZSBhIHJlcXVlc3QgZm9yIGF0dHJpYnV0ZXMKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSBvciBkaXJlY3Rvcnkgd2UgYXJlIHRyeWluZyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMgb2YKLSAqCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHN0YXQodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UU1RBVCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50c3RhdC5maWQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90c3RhdCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RzdGF0IC0gYWxsb2NhdGUgYW5kIHBvcHVsYXRlIGEgcmVxdWVzdCB0byBjaGFuZ2UgYXR0cmlidXRlcwotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNoYW5nZQotICogQHdzdGF0OiAmcDlfc3RhdCBzdHJ1Y3R1cmUgd2l0aCBhdHRyaWJ1dGVzIHdlIHdpc2ggdG8gc2V0Ci0gKiBAZG90dTogOXAyMDAwLnUgZW5hYmxlZCBmbGFnCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCQkJCSAgICAgIGludCBkb3R1KQotewotCWludCBzaXplLCBzdGF0c3o7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc3RhdHN6ID0gcDlfc2l6ZV93c3RhdCh3c3RhdCwgZG90dSk7Ci0Jc2l6ZSA9IDQgKyAyICsgMiArIHN0YXRzejsJLyogZmlkWzRdIHN0YXRbbl0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFdTVEFUKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBmaWQsICZmYy0+cGFyYW1zLnR3c3RhdC5maWQpOwotCWJ1Zl9wdXRfaW50MTYoYnVmcCwgc3RhdHN6ICsgMik7Ci0JcDlfcHV0X3dzdGF0KGJ1ZnAsIHdzdGF0LCAmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgc3RhdHN6LCBkb3R1KTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdzdGF0KTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL2ZjcHJpbnQuYyBiL25ldC85cC9mY3ByaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZGQ4ZTIuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2ZjcHJpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKgotICogIG5ldC85cC9mY3ByaW50LmMKLSAqCi0gKiAgUHJpbnQgOVAgY2FsbC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0bzoKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwMSAgVVNBCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCi1zdGF0aWMgaW50Ci1wOV9wcmludHFpZChjaGFyICpidWYsIGludCBidWZsZW4sIHN0cnVjdCBwOV9xaWQgKnEpCi17Ci0JaW50IG47Ci0JY2hhciBiWzEwXTsKLQotCW4gPSAwOwotCWlmIChxLT50eXBlICYgUDlfUVRESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHEtPnR5cGUgJiBQOV9RVEFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FURVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChxLT50eXBlICYgUDlfUVRUTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiglLjE2bGx4ICV4ICVzKSIsCi0JCQkJCShsb25nIGxvbmcgaW50KSBxLT5wYXRoLCBxLT52ZXJzaW9uLCBiKTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRwZXJtKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHBlcm0pCi17Ci0JaW50IG47Ci0JY2hhciBiWzE1XTsKLQotCW4gPSAwOwotCWlmIChwZXJtICYgUDlfRE1ESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocGVybSAmIFA5X0RNQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHBlcm0gJiBQOV9ETUFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocGVybSAmIFA5X0RNRVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChwZXJtICYgUDlfRE1UTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocGVybSAmIFA5X0RNREVWSUNFKQotCQliW24rK10gPSAnRCc7Ci0JaWYgKHBlcm0gJiBQOV9ETVNPQ0tFVCkKLQkJYltuKytdID0gJ1MnOwotCWlmIChwZXJtICYgUDlfRE1OQU1FRFBJUEUpCi0JCWJbbisrXSA9ICdQJzsKLQlpZiAocGVybSAmIFA5X0RNU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJTAzbyIsIGIsIHBlcm0mMDc3KTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRzdGF0KGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0LCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IG47Ci0KLQluID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJyUuKnMnICclLipzJyIsIHN0LT5uYW1lLmxlbiwKLQkJc3QtPm5hbWUuc3RyLCBzdC0+dWlkLmxlbiwgc3QtPnVpZC5zdHIpOwotCWlmIChleHRlbmRlZCkKLQkJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiKCVkKSIsIHN0LT5uX3VpZCk7Ci0KLQluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIgJyUuKnMnIiwgc3QtPmdpZC5sZW4sIHN0LT5naWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9naWQpOwotCi0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiICclLipzJyIsIHN0LT5tdWlkLmxlbiwgc3QtPm11aWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9tdWlkKTsKLQotCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBxICIpOwotCW4gKz0gcDlfcHJpbnRxaWQoYnVmK24sIGJ1Zmxlbi1uLCAmc3QtPnFpZCk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIG0gIik7Ci0JbiArPSBwOV9wcmludHBlcm0oYnVmK24sIGJ1Zmxlbi1uLCBzdC0+bW9kZSk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIGF0ICVkIG10ICVkIGwgJWxsZCIsCi0JCXN0LT5hdGltZSwgc3QtPm10aW1lLCAobG9uZyBsb25nIGludCkgc3QtPmxlbmd0aCk7Ci0KLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBleHQgJyUuKnMnIiwKLQkJCXN0LT5leHRlbnNpb24ubGVuLCBzdC0+ZXh0ZW5zaW9uLnN0cik7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludAotcDlfZHVtcGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JaW50IGksIG47Ci0KLQlpID0gbiA9IDA7Ci0Jd2hpbGUgKGkgPCBkYXRhbGVuKSB7Ci0JCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIlMDJ4IiwgZGF0YVtpXSk7Ci0JCWlmIChpJTQgPT0gMykKLQkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7Ci0JCWlmIChpJTMyID09IDMxKQotCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7Ci0KLQkJaSsrOwotCX0KLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50Ci1wOV9wcmludGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JcmV0dXJuIHA5X2R1bXBkYXRhKGJ1ZiwgYnVmbGVuLCBkYXRhLCBkYXRhbGVuIDwgMTY/ZGF0YWxlbjoxNik7Ci19Ci0KLS8qKgotICogcDlfcHJpbnRmY2FsbCAtIGRlY29kZSBhbmQgcHJpbnQgYSBwcm90b2NvbCBzdHJ1Y3R1cmUgaW50byBhIGJ1ZmZlcgotICogQGJ1ZjogYnVmZmVyIHRvIGRlcG9zaXQgZGVjb2RlZCBzdHJ1Y3R1cmUgaW50bwotICogQGJ1ZmxlbjogYXZhaWxhYmxlIHNwYWNlIGluIGJ1ZmZlcgotICogQGZjOiBwcm90b2NvbCBycGMgc3RydWN0dXJlIG9mIHR5cGUgJnA5X2ZjYWxsCi0gKiBAZXh0ZW5kZWQ6IHdoZXRoZXIgb3Igbm90IHNlc3Npb24gaXMgb3BlcmF0aW5nIHdpdGggZXh0ZW5kZWQgcHJvdG9jb2wKLSAqLwotCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IGksIHJldCwgdHlwZSwgdGFnOwotCi0JaWYgKCFmYykKLQkJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIjxOVUxMPiIpOwotCi0JdHlwZSA9IGZjLT5pZDsKLQl0YWcgPSBmYy0+dGFnOwotCi0JcmV0ID0gMDsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFA5X1RWRVJTSU9OOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkJIlR2ZXJzaW9uIHRhZyAldSBtc2l6ZSAldSB2ZXJzaW9uICclLipzJyIsIHRhZywKLQkJCQlmYy0+cGFyYW1zLnR2ZXJzaW9uLm1zaXplLAotCQkJCWZjLT5wYXJhbXMudHZlcnNpb24udmVyc2lvbi5sZW4sCi0JCQkJZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uLnN0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SVkVSU0lPTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSJSdmVyc2lvbiB0YWcgJXUgbXNpemUgJXUgdmVyc2lvbiAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5ydmVyc2lvbi5tc2l6ZSwKLQkJCQlmYy0+cGFyYW1zLnJ2ZXJzaW9uLnZlcnNpb24ubGVuLAotCQkJCWZjLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbi5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVEFVVEg6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUYXV0aCB0YWcgJXUgYWZpZCAlZCB1bmFtZSAnJS4qcycgYW5hbWUgJyUuKnMnIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50YXV0aC5hZmlkLCBmYy0+cGFyYW1zLnRhdXRoLnVuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGgudW5hbWUuc3RyLCBmYy0+cGFyYW1zLnRhdXRoLmFuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGguYW5hbWUuc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JBVVRIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSYXV0aCB0YWcgJXUgcWlkICIsIHRhZyk7Ci0JCXA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJhdXRoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UQVRUQUNIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCSAiVGF0dGFjaCB0YWcgJXUgZmlkICVkIGFmaWQgJWQgdW5hbWUgJyUuKnMnIGFuYW1lICclLipzJyIsIHRhZywKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5maWQsIGZjLT5wYXJhbXMudGF0dGFjaC5hZmlkLAotCQkgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLmxlbiwgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLnN0ciwKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5sZW4sIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkFUVEFDSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmF0dGFjaCB0YWcgJXUgcWlkICIsCi0JCQkJCQkJCQl0YWcpOwotCQlwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LCAmZmMtPnBhcmFtcy5yYXR0YWNoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SRVJST1I6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCQkiUmVycm9yIHRhZyAldSBlbmFtZSAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5yZXJyb3IuZXJyb3IubGVuLAotCQkJCWZjLT5wYXJhbXMucmVycm9yLmVycm9yLnN0cik7Ci0JCWlmIChleHRlbmRlZCkKLQkJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBlY29kZSAlZFxuIiwKLQkJCQlmYy0+cGFyYW1zLnJlcnJvci5lcnJubyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9URkxVU0g6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRmbHVzaCB0YWcgJXUgb2xkdGFnICV1IiwKLQkJCXRhZywgZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JGTFVTSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmZsdXNoIHRhZyAldSIsIHRhZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV0FMSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlR3YWxrIHRhZyAldSBmaWQgJWQgbmV3ZmlkICVkIG53bmFtZSAlZCIsIHRhZywKLQkJCWZjLT5wYXJhbXMudHdhbGsuZmlkLCBmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCwKLQkJCWZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMudHdhbGsubnduYW1lOyBpKyspCi0JCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgJyUuKnMnIiwKLQkJCQlmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXS5sZW4sCi0JCQkJZmMtPnBhcmFtcy50d2Fsay53bmFtZXNbaV0uc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXQUxLOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd2FsayB0YWcgJXUgbndxaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnJ3YWxrLm53cWlkKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMucndhbGsubndxaWQ7IGkrKykKLQkJCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSZmYy0+cGFyYW1zLnJ3YWxrLndxaWRzW2ldKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RPUEVOOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiVG9wZW4gdGFnICV1IGZpZCAlZCBtb2RlICVkIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50b3Blbi5maWQsIGZjLT5wYXJhbXMudG9wZW4ubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9ST1BFTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUm9wZW4gdGFnICV1IiwgdGFnKTsKLQkJcmV0ICs9IHA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJvcGVuLnFpZCk7Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBpb3VuaXQgJWQiLAotCQkJZmMtPnBhcmFtcy5yb3Blbi5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVENSRUFURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlRjcmVhdGUgdGFnICV1IGZpZCAlZCBuYW1lICclLipzJyBwZXJtICIsIHRhZywKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5maWQsIGZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLnN0cik7Ci0KLQkJcmV0ICs9IHA5X3ByaW50cGVybShidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJZmMtPnBhcmFtcy50Y3JlYXRlLnBlcm0pOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgbW9kZSAlZCIsCi0JCQlmYy0+cGFyYW1zLnRjcmVhdGUubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SQ1JFQVRFOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY3JlYXRlIHRhZyAldSIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJJmZjLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgaW91bml0ICVkIiwKLQkJCWZjLT5wYXJhbXMucmNyZWF0ZS5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFJFQUQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUcmVhZCB0YWcgJXUgZmlkICVkIG9mZnNldCAlbGxkIGNvdW50ICV1IiwgdGFnLAotCQkJZmMtPnBhcmFtcy50cmVhZC5maWQsCi0JCQkobG9uZyBsb25nIGludCkgZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnRyZWFkLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JSRUFEOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiUnJlYWQgdGFnICV1IGNvdW50ICV1IGRhdGEgIiwgdGFnLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy5ycmVhZC5kYXRhLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV1JJVEU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUd3JpdGUgdGFnICV1IGZpZCAlZCBvZmZzZXQgJWxsZCBjb3VudCAldSBkYXRhICIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHdyaXRlLmZpZCwKLQkJCShsb25nIGxvbmcgaW50KSBmYy0+cGFyYW1zLnR3cml0ZS5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy50d3JpdGUuZGF0YSwKLQkJCWZjLT5wYXJhbXMudHdyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXUklURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUndyaXRlIHRhZyAldSBjb3VudCAldSIsCi0JCQl0YWcsIGZjLT5wYXJhbXMucndyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RDTFVOSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVGNsdW5rIHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRjbHVuay5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkNMVU5LOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY2x1bmsgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RSRU1PVkU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRyZW1vdmUgdGFnICV1IGZpZCAlZCIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHJlbW92ZS5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUlJFTU9WRToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnJlbW92ZSB0YWcgJXUiLCB0YWcpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFNUQVQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRzdGF0IHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRzdGF0LmZpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnN0YXQgdGFnICV1ICIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHN0YXQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucnN0YXQuc3RhdCwKLQkJCWV4dGVuZGVkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RXU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVHdzdGF0IHRhZyAldSBmaWQgJWQgIiwKLQkJCXRhZywgZmMtPnBhcmFtcy50d3N0YXQuZmlkKTsKLQkJcmV0ICs9IHA5X3ByaW50c3RhdChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgZXh0ZW5kZWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUldTVEFUOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd3N0YXQgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJ1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX05FVF85UF9ERUJVRyAqLwotRVhQT1JUX1NZTUJPTChwOV9wcmludGZjYWxsKTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL21vZC5jIGIvbmV0LzlwL21vZC5jCmluZGV4IDEwODRmZWIuLmNmOGE0MTIgMTAwNjQ0Ci0tLSBhL25ldC85cC9tb2QuYworKysgYi9uZXQvOXAvbW9kLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuYyBiL25ldC85cC9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5jCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF9vZgorI2RlZmluZSBvZmZzZXRfb2YodHlwZSwgbWVtYikgXAorCSgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iKSkKKyNlbmRpZgorI2lmbmRlZiBjb250YWluZXJfb2YKKyNkZWZpbmUgY29udGFpbmVyX29mKG9iaiwgdHlwZSwgbWVtYikgXAorCSgodHlwZSAqKSgoKGNoYXIgKilvYmopIC0gb2Zmc2V0X29mKHR5cGUsIG1lbWIpKSkKKyNlbmRpZgorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCit2b2lkCitwOXBkdV9kdW1wKGludCB3YXksIHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBpLCBuOworCXU4ICpkYXRhID0gcGR1LT5zZGF0YTsKKwlpbnQgZGF0YWxlbiA9IHBkdS0+c2l6ZTsKKwljaGFyIGJ1ZlsyNTVdOworCWludCBidWZsZW4gPSAyNTU7CisKKwlpID0gbiA9IDA7CisJaWYgKGRhdGFsZW4gPiAoYnVmbGVuLTE2KSkKKwkJZGF0YWxlbiA9IGJ1Zmxlbi0xNjsKKwl3aGlsZSAoaSA8IGRhdGFsZW4pIHsKKwkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIiUwMnggIiwgZGF0YVtpXSk7CisJCWlmIChpJTQgPT0gMykKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7CisJCWlmIChpJTMyID09IDMxKQorCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7CisKKwkJaSsrOworCX0KKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKKworCWlmICh3YXkpCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiW1tbKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKKwllbHNlCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiXV1dKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wocDlwZHVfZHVtcCk7CisKK3ZvaWQgcDlzdGF0X2ZyZWUoc3RydWN0IHA5X3dzdGF0ICpzdGJ1ZikKK3sKKwlrZnJlZShzdGJ1Zi0+bmFtZSk7CisJa2ZyZWUoc3RidWYtPnVpZCk7CisJa2ZyZWUoc3RidWYtPmdpZCk7CisJa2ZyZWUoc3RidWYtPm11aWQpOworCWtmcmVlKHN0YnVmLT5leHRlbnNpb24pOworfQorRVhQT1JUX1NZTUJPTChwOXN0YXRfZnJlZSk7CisKK3N0YXRpYyBzaXplX3QgcGR1X3JlYWQoc3RydWN0IHA5X2ZjYWxsICpwZHUsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSBNSU4ocGR1LT5zaXplIC0gcGR1LT5vZmZzZXQsIHNpemUpOworCW1lbWNweShkYXRhLCAmcGR1LT5zZGF0YVtwZHUtPm9mZnNldF0sIGxlbik7CisJcGR1LT5vZmZzZXQgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBkdV93cml0ZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IE1JTihwZHUtPmNhcGFjaXR5IC0gcGR1LT5zaXplLCBzaXplKTsKKwltZW1jcHkoJnBkdS0+c2RhdGFbcGR1LT5zaXplXSwgZGF0YSwgbGVuKTsKKwlwZHUtPnNpemUgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90CitwZHVfd3JpdGVfdShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgbGVuID0gTUlOKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOworCWludCBlcnIgPSBjb3B5X2Zyb21fdXNlcigmcGR1LT5zZGF0YVtwZHUtPnNpemVdLCB1ZGF0YSwgbGVuKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJwZHVfd3JpdGVfdSByZXR1cm5pbmc6ICVkXG4iLCBlcnIpOworCisJcGR1LT5zaXplICs9IGxlbjsKKwlyZXR1cm4gc2l6ZSAtIGxlbjsKK30KKworLyoKKwliIC0gaW50OF90CisJdyAtIGludDE2X3QKKwlkIC0gaW50MzJfdAorCXEgLSBpbnQ2NF90CisJcyAtIHN0cmluZworCVMgLSBzdGF0CisJUSAtIHFpZAorCUQgLSBkYXRhIGJsb2IgKGludDMyX3Qgc2l6ZSBmb2xsb3dlZCBieSB2b2lkICosIHJlc3VsdHMgYXJlIG5vdCBmcmVlZCkKKwlUIC0gYXJyYXkgb2Ygc3RyaW5ncyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgc3RyaW5ncykKKwlSIC0gYXJyYXkgb2YgcWlkcyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgcWlkcykKKwk/IC0gaWYgb3B0aW9uYWwgPSAxLCBjb250aW51ZSBwYXJzaW5nCisqLworCitzdGF0aWMgaW50CitwOXBkdV92cmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50OF90ICopOworCQkJCWlmIChwZHVfcmVhZChwZHUsIHZhbCwgc2l6ZW9mKCp2YWwpKSkgeworCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTE2KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2QnOnsKKwkJCQlpbnQzMl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTMyKCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90ICp2YWwgPSB2YV9hcmcoYXAsIGludDY0X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTY0KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3MnOnsKKwkJCQljaGFyICoqcHRyID0gdmFfYXJnKGFwLCBjaGFyICoqKTsKKwkJCQlpbnQxNl90IGxlbjsKKwkJCQlpbnQgc2l6ZTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAidyIsICZsZW4pOworCQkJCWlmIChlcnJjb2RlKQorCQkJCQlicmVhazsKKworCQkJCXNpemUgPSBNQVgobGVuLCAwKTsKKworCQkJCSpwdHIgPSBrbWFsbG9jKHNpemUgKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoKnB0ciA9PSBOVUxMKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgKnB0ciwgc2l6ZSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWtmcmVlKCpwdHIpOworCQkJCQkqcHRyID0gTlVMTDsKKwkJCQl9IGVsc2UKKwkJCQkJKCpwdHIpW3NpemVdID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdRJzp7CisJCQkJc3RydWN0IHA5X3FpZCAqcWlkID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfcWlkICopOworCisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJiZHEiLAorCQkJCQkJICAgICAgJnFpZC0+dHlwZSwgJnFpZC0+dmVyc2lvbiwKKwkJCQkJCSAgICAgICZxaWQtPnBhdGgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOnsKKwkJCQlzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfd3N0YXQgKik7CisKKwkJCQltZW1zZXQoc3RidWYsIDAsIHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpKTsKKwkJCQlzdGJ1Zi0+bl91aWQgPSBzdGJ1Zi0+bl9naWQgPSBzdGJ1Zi0+bl9tdWlkID0KKwkJCQkJCQkJCS0xOworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSZzdGJ1Zi0+c2l6ZSwgJnN0YnVmLT50eXBlLAorCQkJCQkJJnN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLAorCQkJCQkJJnN0YnVmLT5tb2RlLCAmc3RidWYtPmF0aW1lLAorCQkJCQkJJnN0YnVmLT5tdGltZSwgJnN0YnVmLT5sZW5ndGgsCisJCQkJCQkmc3RidWYtPm5hbWUsICZzdGJ1Zi0+dWlkLAorCQkJCQkJJnN0YnVmLT5naWQsICZzdGJ1Zi0+bXVpZCwKKwkJCQkJCSZzdGJ1Zi0+ZXh0ZW5zaW9uLAorCQkJCQkJJnN0YnVmLT5uX3VpZCwgJnN0YnVmLT5uX2dpZCwKKwkJCQkJCSZzdGJ1Zi0+bl9tdWlkKTsKKwkJCQlpZiAoZXJyY29kZSkKKwkJCQkJcDlzdGF0X2ZyZWUoc3RidWYpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0QnOnsKKwkJCQlpbnQzMl90ICpjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCAqKTsKKwkJCQl2b2lkICoqZGF0YSA9IHZhX2FyZyhhcCwgdm9pZCAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCSpjb3VudCA9CisJCQkJCSAgICBNSU4oKmNvdW50LAorCQkJCQkJcGR1LT5zaXplIC0gcGR1LT5vZmZzZXQpOworCQkJCQkqZGF0YSA9ICZwZHUtPnNkYXRhW3BkdS0+b2Zmc2V0XTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVCc6eworCQkJCWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgaW50MTZfdCAqKTsKKwkJCQljaGFyICoqKnduYW1lcyA9IHZhX2FyZyhhcCwgY2hhciAqKiopOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJKnduYW1lcyA9CisJCQkJCSAgICBrbWFsbG9jKHNpemVvZihjaGFyICopICogKm53bmFtZSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCEqd25hbWVzKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbnduYW1lOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkJCSJzIiwKKwkJCQkJCQkJJigqd25hbWVzKVtpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChlcnJjb2RlKSB7CisJCQkJCWlmICgqd25hbWVzKSB7CisJCQkJCQlpbnQgaTsKKworCQkJCQkJZm9yIChpID0gMDsgaSA8ICpud25hbWU7IGkrKykKKwkJCQkJCQlrZnJlZSgoKnduYW1lcylbaV0pOworCQkJCQl9CisJCQkJCWtmcmVlKCp3bmFtZXMpOworCQkJCQkqd25hbWVzID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnUic6eworCQkJCWludDE2X3QgKm53cWlkID0gdmFfYXJnKGFwLCBpbnQxNl90ICopOworCQkJCXN0cnVjdCBwOV9xaWQgKip3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKik7CisKKwkJCQkqd3FpZHMgPSBOVUxMOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbndxaWQpOworCQkJCWlmICghZXJyY29kZSkgeworCQkJCQkqd3FpZHMgPQorCQkJCQkgICAga21hbGxvYygqbndxaWQgKgorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCp3cWlkcyA9PSBOVUxMKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbndxaWQ7IGkrKykgeworCQkJCQkJZXJyY29kZSA9CisJCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJIlEiLAorCQkJCQkJCQkmKCp3cWlkcylbaV0pOworCQkJCQkJaWYgKGVycmNvZGUpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoZXJyY29kZSkgeworCQkJCQlrZnJlZSgqd3FpZHMpOworCQkJCQkqd3FpZHMgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90IHZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlpZiAocGR1X3dyaXRlKHBkdSwgJnZhbCwgc2l6ZW9mKHZhbCkpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdkJzp7CisJCQkJaW50MzJfdCB2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90IHZhbCA9IHZhX2FyZyhhcCwgaW50NjRfdCk7CisJCQkJaWYgKHBkdV93cml0ZShwZHUsICZ2YWwsIHNpemVvZih2YWwpKSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6eworCQkJCWNvbnN0IGNoYXIgKnB0ciA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKTsKKwkJCQlpbnQxNl90IGxlbiA9IDA7CisJCQkJaWYgKHB0cikKKwkJCQkJbGVuID0gTUlOKHN0cmxlbihwdHIpLCBVU0hPUlRfTUFYKTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBsZW4pOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGUocGR1LCBwdHIsIGxlbikpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1EnOnsKKwkJCQljb25zdCBzdHJ1Y3QgcDlfcWlkICpxaWQgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV9xaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiYmRxIiwKKwkJCQkJCSBxaWQtPnR5cGUsIHFpZC0+dmVyc2lvbiwKKwkJCQkJCSBxaWQtPnBhdGgpOworCQkJfSBicmVhazsKKwkJY2FzZSAnUyc6eworCQkJCWNvbnN0IHN0cnVjdCBwOV93c3RhdCAqc3RidWYgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV93c3RhdCAqKTsKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkgInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSBzdGJ1Zi0+c2l6ZSwgc3RidWYtPnR5cGUsCisJCQkJCQkgc3RidWYtPmRldiwgJnN0YnVmLT5xaWQsCisJCQkJCQkgc3RidWYtPm1vZGUsIHN0YnVmLT5hdGltZSwKKwkJCQkJCSBzdGJ1Zi0+bXRpbWUsIHN0YnVmLT5sZW5ndGgsCisJCQkJCQkgc3RidWYtPm5hbWUsIHN0YnVmLT51aWQsCisJCQkJCQkgc3RidWYtPmdpZCwgc3RidWYtPm11aWQsCisJCQkJCQkgc3RidWYtPmV4dGVuc2lvbiwgc3RidWYtPm5fdWlkLAorCQkJCQkJIHN0YnVmLT5uX2dpZCwgc3RidWYtPm5fbXVpZCk7CisJCQl9IGJyZWFrOworCQljYXNlICdEJzp7CisJCQkJaW50MzJfdCBjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CisJCQkJY29uc3Qgdm9pZCAqZGF0YSA9IHZhX2FyZyhhcCwgY29uc3Qgdm9pZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlICYmIHBkdV93cml0ZShwZHUsIGRhdGEsIGNvdW50KSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVSc6eworCQkJCWludDMyX3QgY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSA9CisJCQkJCQl2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiZCIsIGNvdW50KTsKKwkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlX3UocGR1LCB1ZGF0YSwgY291bnQpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdUJzp7CisJCQkJaW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CisJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJaW50IGk7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJzIiwKKwkJCQkJCQkJIHduYW1lc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdSJzp7CisJCQkJaW50MTZfdCBud3FpZCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlzdHJ1Y3QgcDlfcWlkICp3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBud3FpZCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBud3FpZDsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJRIiwKKwkJCQkJCQkJICZ3cWlkc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdnJlYWRmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdndyaXRlZihwZHUsIG9wdGlvbmFsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHA5c3RhdF9yZWFkKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHA5X3dzdGF0ICpzdCwgaW50IGRvdHUpCit7CisJc3RydWN0IHA5X2ZjYWxsIGZha2VfcGR1OworCWludCByZXQ7CisKKwlmYWtlX3BkdS5zaXplID0gbGVuOworCWZha2VfcGR1LmNhcGFjaXR5ID0gbGVuOworCWZha2VfcGR1LnNkYXRhID0gYnVmOworCWZha2VfcGR1Lm9mZnNldCA9IDA7CisKKwlyZXQgPSBwOXBkdV9yZWFkZigmZmFrZV9wZHUsIGRvdHUsICJTIiwgc3QpOworCWlmIChyZXQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBwOXN0YXRfcmVhZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwOXBkdV9kdW1wKDEsICZmYWtlX3BkdSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlzdGF0X3JlYWQpOworCitpbnQgcDlwZHVfcHJlcGFyZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50MTZfdCB0YWcsIGludDhfdCB0eXBlKQoreworCXJldHVybiBwOXBkdV93cml0ZWYocGR1LCAwLCAiZGJ3IiwgMCwgdHlwZSwgdGFnKTsKK30KKworaW50IHA5cGR1X2ZpbmFsaXplKHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBzaXplID0gcGR1LT5zaXplOworCWludCBlcnI7CisKKwlwZHUtPnNpemUgPSAwOworCWVyciA9IHA5cGR1X3dyaXRlZihwZHUsIDAsICJkIiwgc2l6ZSk7CisJcGR1LT5zaXplID0gc2l6ZTsKKworCWlmICgocDlfZGVidWdfbGV2ZWwgJiBQOV9ERUJVR19QS1QpID09IFA5X0RFQlVHX1BLVCkKKwkJcDlwZHVfZHVtcCgwLCBwZHUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBzaXplPSVkIHR5cGU6ICVkIHRhZzogJWRcbiIsIHBkdS0+c2l6ZSwKKwkJCQkJCQlwZHUtPmlkLCBwZHUtPnRhZyk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHA5cGR1X3Jlc2V0KHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCXBkdS0+b2Zmc2V0ID0gMDsKKwlwZHUtPnNpemUgPSAwOworfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmggYi9uZXQvOXAvcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RlNDYyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0LzlwL3Byb3RvY29sLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5oCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworaW50CitwOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHA5cGR1X3ByZXBhcmUoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDE2X3QgdGFnLCBpbnQ4X3QgdHlwZSk7CitpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpOwordm9pZCBwOXBkdV9kdW1wKGludCwgc3RydWN0IHA5X2ZjYWxsICopOwordm9pZCBwOXBkdV9yZXNldChzdHJ1Y3QgcDlfZmNhbGwgKnBkdSk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IDZkYWJiZGIuLmJlNjVkODIgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC0zOSwxMiArMzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KIAogI2RlZmluZSBQOV9QT1JUIDU2NAogI2RlZmluZSBNQVhfU09DS19CVUYgKDY0KjEwMjQpCi0jZGVmaW5lIEVSUkVRRkxVU0gJMQotI2RlZmluZSBTQ0hFRF9USU1FT1VUCTEwCiAjZGVmaW5lIE1BWFBPTExXQUREUgkyCiAKIC8qKgpAQCAtNjEsNyArNjAsNiBAQAogCXUxNiBwb3J0OwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBwOV90cmFuc19mZCAtIHRyYW5zcG9ydCBzdGF0ZQogICogQHJkOiByZWZlcmVuY2UgdG8gZmlsZSB0byByZWFkIGZyb20KQEAgLTEwMCw2MCArOTgsMjIgQEAKIAlXcGVuZGluZyA9IDgsCQkvKiBjYW4gd3JpdGUgKi8KIH07CiAKLWVudW0gewotCU5vbmUsCi0JRmx1c2hpbmcsCi0JRmx1c2hlZCwKLX07Ci0KLXN0cnVjdCBwOV9yZXE7Ci10eXBlZGVmIHZvaWQgKCpwOV9jb25uX3JlcV9jYWxsYmFjaykoc3RydWN0IHA5X3JlcSAqcmVxLCB2b2lkICphKTsKLQotLyoqCi0gKiBzdHJ1Y3QgcDlfcmVxIC0gZmQgbXV4IGVuY29kaW5nIG9mIGFuIHJwYyB0cmFuc2FjdGlvbgotICogQGxvY2s6IHByb3RlY3RzIHJlcV9saXN0Ci0gKiBAdGFnOiBudW1lcmljIHRhZyBmb3IgcnBjIHRyYW5zYWN0aW9uCi0gKiBAdGNhbGw6IHJlcXVlc3QgJnA5X2ZjYWxsIHN0cnVjdHVyZQotICogQHJjYWxsOiByZXNwb25zZSAmcDlfZmNhbGwgc3RydWN0dXJlCi0gKiBAZXJyOiBlcnJvciBzdGF0ZQotICogQGNiOiBjYWxsYmFjayBmb3Igd2hlbiByZXNwb25zZSBpcyByZWNlaXZlZAotICogQGNiYTogYXJndW1lbnQgdG8gcGFzcyB0byBjYWxsYmFjawotICogQGZsdXNoOiBmbGFnIHRvIGluZGljYXRlIFJQQyBoYXMgYmVlbiBmbHVzaGVkCi0gKiBAcmVxX2xpc3Q6IGxpc3QgbGluayBmb3IgaGlnaGVyIGxldmVsIG9iamVjdHMgdG8gY2hhaW4gcmVxdWVzdHMKLSAqCi0gKi8KLQotc3RydWN0IHA5X3JlcSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCWludCB0YWc7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0Y2FsbDsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJjYWxsOwotCWludCBlcnI7Ci0JcDlfY29ubl9yZXFfY2FsbGJhY2sgY2I7Ci0Jdm9pZCAqY2JhOwotCWludCBmbHVzaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwotfTsKLQotc3RydWN0IHA5X211eF9wb2xsX3Rhc2sgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG11eF9saXN0OwotCWludCBtdXhudW07CitzdHJ1Y3QgcDlfcG9sbF93YWl0IHsKKwlzdHJ1Y3QgcDlfY29ubiAqY29ubjsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyOwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgcDlfY29ubiAtIGZkIG11eCBjb25uZWN0aW9uIHN0YXRlIGluZm9ybWF0aW9uCi0gKiBAbG9jazogcHJvdGVjdHMgbXV4X2xpc3QgKD8pCiAgKiBAbXV4X2xpc3Q6IGxpc3QgbGluayBmb3IgbXV4IHRvIG1hbmFnZSBtdWx0aXBsZSBjb25uZWN0aW9ucyAoPykKLSAqIEBwb2xsX3Rhc2s6IHRhc2sgcG9sbGluZyBvbiB0aGlzIGNvbm5lY3Rpb24KLSAqIEBtc2l6ZTogbWF4aW11bSBzaXplIGZvciBjb25uZWN0aW9uIChkdXApCi0gKiBAZXh0ZW5kZWQ6IDlwMjAwMC51IGZsYWcgKGR1cCkKLSAqIEB0cmFuczogcmVmZXJlbmNlIHRvIHRyYW5zcG9ydCBpbnN0YW5jZSBmb3IgdGhpcyBjb25uZWN0aW9uCi0gKiBAdGFncG9vbDogaWQgYWNjb3VudGluZyBmb3IgdHJhbnNhY3Rpb25zCisgKiBAY2xpZW50OiByZWZlcmVuY2UgdG8gY2xpZW50IGluc3RhbmNlIGZvciB0aGlzIGNvbm5lY3Rpb24KICAqIEBlcnI6IGVycm9yIHN0YXRlCiAgKiBAcmVxX2xpc3Q6IGFjY291bnRpbmcgZm9yIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBzZW50CiAgKiBAdW5zZW50X3JlcV9saXN0OiBhY2NvdW50aW5nIGZvciByZXF1ZXN0cyB0aGF0IGhhdmVuJ3QgYmVlbiBzZW50Ci0gKiBAcmNhbGw6IGN1cnJlbnQgcmVzcG9uc2UgJnA5X2ZjYWxsIHN0cnVjdHVyZQorICogQHJlcTogY3VycmVudCByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZCAoaWYgYW55KQorICogQHRtcF9idWY6IHRlbXBvcmFyeSBidWZmZXIgdG8gcmVhZCBpbiBoZWFkZXIKKyAqIEByc2l6ZTogYW1vdW50IHRvIHJlYWQgZm9yIGN1cnJlbnQgZnJhbWUKICAqIEBycG9zOiByZWFkIHBvc2l0aW9uIGluIGN1cnJlbnQgZnJhbWUKICAqIEByYnVmOiBjdXJyZW50IHJlYWQgYnVmZmVyCiAgKiBAd3Bvczogd3JpdGUgcG9zaXRpb24gZm9yIGN1cnJlbnQgZnJhbWUKQEAgLTE2OSw0MDkgKzEyOSwzMDAgQEAKICAqLwogCiBzdHJ1Y3QgcDlfY29ubiB7Ci0Jc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0IGxvY2sgc3RydWN0dXJlICovCiAJc3RydWN0IGxpc3RfaGVhZCBtdXhfbGlzdDsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqcG9sbF90YXNrOwotCWludCBtc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7Ci0Jc3RydWN0IHA5X2lkcG9vbCAqdGFncG9vbDsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQ7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgdW5zZW50X3JlcV9saXN0OwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJY2hhciB0bXBfYnVmWzddOworCWludCByc2l6ZTsKIAlpbnQgcnBvczsKIAljaGFyICpyYnVmOwogCWludCB3cG9zOwogCWludCB3c2l6ZTsKIAljaGFyICp3YnVmOwotCXdhaXRfcXVldWVfdCBwb2xsX3dhaXRbTUFYUE9MTFdBRERSXTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqcG9sbF93YWRkcltNQVhQT0xMV0FERFJdOworCXN0cnVjdCBsaXN0X2hlYWQgcG9sbF9wZW5kaW5nX2xpbms7CisJc3RydWN0IHA5X3BvbGxfd2FpdCBwb2xsX3dhaXRbTUFYUE9MTFdBRERSXTsKIAlwb2xsX3RhYmxlIHB0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBycTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3E7CiAJdW5zaWduZWQgbG9uZyB3c2NoZWQ7CiB9OwogCi0vKioKLSAqIHN0cnVjdCBwOV9tdXhfcnBjIC0gZmQgbXV4IHJwYyBhY2NvdW50aW5nIHN0cnVjdHVyZQotICogQG06IGNvbm5lY3Rpb24gdGhpcyByZXF1ZXN0IHdhcyBpc3N1ZWQgb24KLSAqIEBlcnI6IGVycm9yIHN0YXRlCi0gKiBAdGNhbGw6IHJlcXVlc3QgJnA5X2ZjYWxsCi0gKiBAcmNhbGw6IHJlc3BvbnNlICZwOV9mY2FsbAotICogQHdxdWV1ZTogd2FpdCBxdWV1ZSB0aGF0IGNsaWVudCBpcyBibG9ja2VkIG9uIGZvciB0aGlzIHJwYwotICoKLSAqIEJ1ZzogaXNuJ3QgdGhpcyBpbmZvcm1hdGlvbiBkdXBsaWNhdGVkIGVsc2V3aGVyZSBsaWtlICZwOV9yZXEKLSAqLwotCi1zdHJ1Y3QgcDlfbXV4X3JwYyB7Ci0Jc3RydWN0IHA5X2Nvbm4gKm07Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjYWxsOwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3F1ZXVlOwotfTsKLQotc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqKTsKLXN0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcDlfd3JpdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsCi0JCQkJCQkJCXBvbGxfdGFibGUgKnApOwotc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKTsKLQotc3RhdGljIERFRklORV9NVVRFWChwOV9tdXhfdGFza19sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socDlfcG9sbF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQocDlfcG9sbF9wZW5kaW5nX2xpc3QpOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwOV9tdXhfd3E7Ci0KLXN0YXRpYyBpbnQgcDlfbXV4X251bTsKLXN0YXRpYyBpbnQgcDlfbXV4X3BvbGxfdGFza19udW07Ci1zdGF0aWMgc3RydWN0IHA5X211eF9wb2xsX3Rhc2sgcDlfbXV4X3BvbGxfdGFza3NbMTAwXTsKLQotc3RhdGljIHZvaWQgcDlfY29ubl9kZXN0cm95KHN0cnVjdCBwOV9jb25uICopOwotc3RhdGljIHVuc2lnbmVkIGludCBwOV9mZF9wb2xsKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsCi0JCQkJCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KTsKLQotI2lmZGVmIFA5X05PTkJMT0NLCi1zdGF0aWMgaW50IHA5X2Nvbm5fcnBjbmIoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JcDlfY29ubl9yZXFfY2FsbGJhY2sgY2IsIHZvaWQgKmEpOwotI2VuZGlmIC8qIFA5X05PTkJMT0NLICovCi0KLXN0YXRpYyB2b2lkIHA5X2Nvbm5fY2FuY2VsKHN0cnVjdCBwOV9jb25uICptLCBpbnQgZXJyKTsKLQotc3RhdGljIHUxNiBwOV9tdXhfZ2V0X3RhZyhzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgdGFnOwotCi0JdGFnID0gcDlfaWRwb29sX2dldChtLT50YWdwb29sKTsKLQlpZiAodGFnIDwgMCkKLQkJcmV0dXJuIFA5X05PVEFHOwotCWVsc2UKLQkJcmV0dXJuICh1MTYpIHRhZzsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X3B1dF90YWcoc3RydWN0IHA5X2Nvbm4gKm0sIHUxNiB0YWcpCi17Ci0JaWYgKHRhZyAhPSBQOV9OT1RBRyAmJiBwOV9pZHBvb2xfY2hlY2sodGFnLCBtLT50YWdwb29sKSkKLQkJcDlfaWRwb29sX3B1dCh0YWcsIG0tPnRhZ3Bvb2wpOwotfQotCi0vKioKLSAqIHA5X211eF9jYWxjX3BvbGxfcHJvY3MgLSBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgcG9sbGluZyBwcm9jcwotICogQG11eG51bTogbnVtYmVyIG9mIG1vdW50cwotICoKLSAqIENhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbW91bnRlZCB2OWZzIGZpbGVzeXN0ZW1zLgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBzcXJ0IG9mIHRoZSBudW1iZXIgb2YgbW91bnRzLgotICovCi0KLXN0YXRpYyBpbnQgcDlfbXV4X2NhbGNfcG9sbF9wcm9jcyhpbnQgbXV4bnVtKQotewotCWludCBuOwotCi0JaWYgKHA5X211eF9wb2xsX3Rhc2tfbnVtKQotCQluID0gbXV4bnVtIC8gcDlfbXV4X3BvbGxfdGFza19udW0gKwotCQkgICAgKG11eG51bSAlIHA5X211eF9wb2xsX3Rhc2tfbnVtID8gMSA6IDApOwotCWVsc2UKLQkJbiA9IDE7Ci0KLQlpZiAobiA+IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKQotCQluID0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludCBwOV9tdXhfcG9sbF9zdGFydChzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgaSwgbjsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0LCAqdnB0bGFzdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBwcm9jOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgbXV4bnVtICVkIHByb2NudW0gJWRcbiIsIG0sIHA5X211eF9udW0sCi0JCXA5X211eF9wb2xsX3Rhc2tfbnVtKTsKLQltdXRleF9sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQotCW4gPSBwOV9tdXhfY2FsY19wb2xsX3Byb2NzKHA5X211eF9udW0gKyAxKTsKLQlpZiAobiA+IHA5X211eF9wb2xsX3Rhc2tfbnVtKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsgaSsrKSB7Ci0JCQlpZiAocDlfbXV4X3BvbGxfdGFza3NbaV0udGFzayA9PSBOVUxMKSB7Ci0JCQkJdnB0ID0gJnA5X211eF9wb2xsX3Rhc2tzW2ldOwotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY3JlYXRlIHByb2MgJXBcbiIsCi0JCQkJCQkJCQl2cHQpOwotCQkJCXBwcm9jID0ga3RocmVhZF9jcmVhdGUocDlfcG9sbF9wcm9jLCB2cHQsCi0JCQkJCQkJCSJ2OWZzLXBvbGwiKTsKLQotCQkJCWlmICghSVNfRVJSKHBwcm9jKSkgewotCQkJCQl2cHQtPnRhc2sgPSBwcHJvYzsKLQkJCQkJSU5JVF9MSVNUX0hFQUQoJnZwdC0+bXV4X2xpc3QpOwotCQkJCQl2cHQtPm11eG51bSA9IDA7Ci0JCQkJCXA5X211eF9wb2xsX3Rhc2tfbnVtKys7Ci0JCQkJCXdha2VfdXBfcHJvY2Vzcyh2cHQtPnRhc2spOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChpID49IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKQotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkJIndhcm5pbmc6IG5vIGZyZWUgcG9sbCBzbG90c1xuIik7Ci0JfQotCi0JbiA9IChwOV9tdXhfbnVtICsgMSkgLyBwOV9tdXhfcG9sbF90YXNrX251bSArCi0JICAgICgocDlfbXV4X251bSArIDEpICUgcDlfbXV4X3BvbGxfdGFza19udW0gPyAxIDogMCk7Ci0KLQl2cHRsYXN0ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7IGkrKykgewotCQl2cHQgPSAmcDlfbXV4X3BvbGxfdGFza3NbaV07Ci0JCWlmICh2cHQtPnRhc2sgIT0gTlVMTCkgewotCQkJdnB0bGFzdCA9IHZwdDsKLQkJCWlmICh2cHQtPm11eG51bSA8IG4pIHsKLQkJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInB1dCBpbiBwcm9jICVkXG4iLCBpKTsKLQkJCQlsaXN0X2FkZCgmbS0+bXV4X2xpc3QsICZ2cHQtPm11eF9saXN0KTsKLQkJCQl2cHQtPm11eG51bSsrOwotCQkJCW0tPnBvbGxfdGFzayA9IHZwdDsKLQkJCQltZW1zZXQoJm0tPnBvbGxfd2FkZHIsIDAsCi0JCQkJCQkJc2l6ZW9mKG0tPnBvbGxfd2FkZHIpKTsKLQkJCQlpbml0X3BvbGxfZnVuY3B0cigmbS0+cHQsIHA5X3BvbGx3YWl0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChpID49IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpKSB7Ci0JCWlmICh2cHRsYXN0ID09IE5VTEwpIHsKLQkJCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAicHV0IGluIHByb2MgJWRcbiIsIGkpOwotCQlsaXN0X2FkZCgmbS0+bXV4X2xpc3QsICZ2cHRsYXN0LT5tdXhfbGlzdCk7Ci0JCXZwdGxhc3QtPm11eG51bSsrOwotCQltLT5wb2xsX3Rhc2sgPSB2cHRsYXN0OwotCQltZW1zZXQoJm0tPnBvbGxfd2FkZHIsIDAsIHNpemVvZihtLT5wb2xsX3dhZGRyKSk7Ci0JCWluaXRfcG9sbF9mdW5jcHRyKCZtLT5wdCwgcDlfcG9sbHdhaXQpOwotCX0KLQotCXA5X211eF9udW0rKzsKLQltdXRleF91bmxvY2soJnA5X211eF90YXNrX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwOV9wb2xsX3Rhc2s7CiAKIHN0YXRpYyB2b2lkIHA5X211eF9wb2xsX3N0b3Aoc3RydWN0IHA5X2Nvbm4gKm0pCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0OwogCi0JbXV0ZXhfbG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0JdnB0ID0gbS0+cG9sbF90YXNrOwotCWxpc3RfZGVsKCZtLT5tdXhfbGlzdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykgewotCQlpZiAobS0+cG9sbF93YWRkcltpXSAhPSBOVUxMKSB7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZShtLT5wb2xsX3dhZGRyW2ldLCAmbS0+cG9sbF93YWl0W2ldKTsKLQkJCW0tPnBvbGxfd2FkZHJbaV0gPSBOVUxMOwotCQl9Ci0JfQotCXZwdC0+bXV4bnVtLS07Ci0JaWYgKCF2cHQtPm11eG51bSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImRlc3Ryb3kgcHJvYyAlcFxuIiwgdnB0KTsKLQkJa3RocmVhZF9zdG9wKHZwdC0+dGFzayk7Ci0JCXZwdC0+dGFzayA9IE5VTEw7Ci0JCXA5X211eF9wb2xsX3Rhc2tfbnVtLS07Ci0JfQotCXA5X211eF9udW0tLTsKLQltdXRleF91bmxvY2soJnA5X211eF90YXNrX2xvY2spOwotfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FpdCk7IGkrKykgeworCQlzdHJ1Y3QgcDlfcG9sbF93YWl0ICpwd2FpdCA9ICZtLT5wb2xsX3dhaXRbaV07CiAKLS8qKgotICogcDlfY29ubl9jcmVhdGUgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyLXNlc3Npb24gbXV4IGRhdGEKLSAqIEB0cmFuczogdHJhbnNwb3J0IHN0cnVjdHVyZQotICoKLSAqIE5vdGU6IENyZWF0ZXMgdGhlIHBvbGxpbmcgdGFzayBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzZXNzaW9uLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcDlfY29ubiAqcDlfY29ubl9jcmVhdGUoc3RydWN0IHA5X3RyYW5zICp0cmFucykKLXsKLQlpbnQgaSwgbjsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAidHJhbnNwb3J0ICVwIG1zaXplICVkXG4iLCB0cmFucywKLQkJCQkJCQkJdHJhbnMtPm1zaXplKTsKLQltID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA5X2Nvbm4pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3Bpbl9sb2NrX2luaXQoJm0tPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZtLT5tdXhfbGlzdCk7Ci0JbS0+bXNpemUgPSB0cmFucy0+bXNpemU7Ci0JbS0+ZXh0ZW5kZWQgPSB0cmFucy0+ZXh0ZW5kZWQ7Ci0JbS0+dHJhbnMgPSB0cmFuczsKLQltLT50YWdwb29sID0gcDlfaWRwb29sX2NyZWF0ZSgpOwotCWlmIChJU19FUlIobS0+dGFncG9vbCkpIHsKLQkJa2ZyZWUobSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZtLT5yZXFfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm0tPnVuc2VudF9yZXFfbGlzdCk7Ci0JSU5JVF9XT1JLKCZtLT5ycSwgcDlfcmVhZF93b3JrKTsKLQlJTklUX1dPUksoJm0tPndxLCBwOV93cml0ZV93b3JrKTsKLQluID0gcDlfbXV4X3BvbGxfc3RhcnQobSk7Ci0JaWYgKG4pIHsKLQkJa2ZyZWUobSk7Ci0JCXJldHVybiBFUlJfUFRSKG4pOwotCX0KLQotCW4gPSBwOV9mZF9wb2xsKHRyYW5zLCAmbS0+cHQpOwotCWlmIChuICYgUE9MTElOKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKLQkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JfQotCi0JaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiB3cml0ZVxuIiwgbSk7Ci0JCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FkZHIpOyBpKyspIHsKLQkJaWYgKElTX0VSUihtLT5wb2xsX3dhZGRyW2ldKSkgewotCQkJcDlfbXV4X3BvbGxfc3RvcChtKTsKLQkJCWtmcmVlKG0pOwotCQkJcmV0dXJuICh2b2lkICopbS0+cG9sbF93YWRkcjsJLyogdGhlIGVycm9yIGNvZGUgKi8KKwkJaWYgKHB3YWl0LT53YWl0X2FkZHIpIHsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKHB3YWl0LT53YWl0X2FkZHIsICZwd2FpdC0+d2FpdCk7CisJCQlwd2FpdC0+d2FpdF9hZGRyID0gTlVMTDsKIAkJfQogCX0KIAotCXJldHVybiBtOworCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZtLT5wb2xsX3BlbmRpbmdfbGluayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogcDlfbXV4X2Rlc3Ryb3kgLSBjYW5jZWxzIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCBmcmVlcyBtdXggcmVzb3VyY2VzCi0gKiBAbTogbXV4IHRvIGRlc3Ryb3kKKyAqIHA5X2Nvbm5fY2FuY2VsIC0gY2FuY2VsIGFsbCBwZW5kaW5nIHJlcXVlc3RzIHdpdGggZXJyb3IKKyAqIEBtOiBtdXggZGF0YQorICogQGVycjogZXJyb3IgY29kZQogICoKICAqLwogCi1zdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKm0pCitzdGF0aWMgdm9pZCBwOV9jb25uX2NhbmNlbChzdHJ1Y3QgcDlfY29ubiAqbSwgaW50IGVycikKIHsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBwcmV2ICVwIG5leHQgJXBcbiIsIG0sCi0JCW0tPm11eF9saXN0LnByZXYsIG0tPm11eF9saXN0Lm5leHQpOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxLCAqcnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChjYW5jZWxfbGlzdCk7CiAKLQlwOV9tdXhfcG9sbF9zdG9wKG0pOwotCWNhbmNlbF93b3JrX3N5bmMoJm0tPnJxKTsKLQljYW5jZWxfd29ya19zeW5jKCZtLT53cSk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm11eCAlcCBlcnIgJWRcbiIsIG0sIGVycik7CiAKLQlwOV9jb25uX2NhbmNlbChtLCAtRUNPTk5SRVNFVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmNsaWVudC0+bG9jaywgZmxhZ3MpOwogCi0JbS0+dHJhbnMgPSBOVUxMOwotCXA5X2lkcG9vbF9kZXN0cm95KG0tPnRhZ3Bvb2wpOwotCWtmcmVlKG0pOworCWlmIChtLT5lcnIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwltLT5lcnIgPSBlcnI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19FUlJPUjsKKwkJaWYgKCFyZXEtPnRfZXJyKQorCQkJcmVxLT50X2VyciA9IGVycjsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+dW5zZW50X3JlcV9saXN0LCByZXFfbGlzdCkgeworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRVJST1I7CisJCWlmICghcmVxLT50X2VycikKKwkJCXJlcS0+dF9lcnIgPSBlcnI7CisJCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7CisJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImNhbGwgYmFjayByZXEgJXBcbiIsIHJlcSk7CisJCXA5X2NsaWVudF9jYihtLT5jbGllbnQsIHJlcSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitwOV9mZF9wb2xsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKK3sKKwlpbnQgcmV0LCBuOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOworCisJaWYgKGNsaWVudCAmJiBjbGllbnQtPnN0YXR1cyA9PSBDb25uZWN0ZWQpCisJCXRzID0gY2xpZW50LT50cmFuczsKKworCWlmICghdHMpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKCF0cy0+cmQtPmZfb3AgfHwgIXRzLT5yZC0+Zl9vcC0+cG9sbCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIXRzLT53ci0+Zl9vcCB8fCAhdHMtPndyLT5mX29wLT5wb2xsKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IHRzLT5yZC0+Zl9vcC0+cG9sbCh0cy0+cmQsIHB0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0cy0+cmQgIT0gdHMtPndyKSB7CisJCW4gPSB0cy0+d3ItPmZfb3AtPnBvbGwodHMtPndyLCBwdCk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiBuOworCQlyZXQgPSAocmV0ICYgflBPTExPVVQpIHwgKG4gJiB+UE9MTElOKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHA5X3BvbGx3YWl0IC0gYWRkIHBvbGwgdGFzayB0byB0aGUgd2FpdCBxdWV1ZQotICogQGZpbHA6IGZpbGUgcG9pbnRlciBiZWluZyBwb2xsZWQKLSAqIEB3YWl0X2FkZHJlc3M6IHdhaXRfcSB0byBibG9jayBvbgotICogQHA6IHBvbGwgc3RhdGUKKyAqIHA5X2ZkX3JlYWQtIHJlYWQgZnJvbSBhIGZkCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEB2OiBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGludG8KKyAqIEBsZW46IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIKICAqCi0gKiBjYWxsZWQgYnkgZmlsZXMgcG9sbCBvcGVyYXRpb24gdG8gYWRkIHY5ZnMtcG9sbCB0YXNrIHRvIGZpbGVzIHdhaXQgcXVldWUKICAqLwogCi1zdGF0aWMgdm9pZAotcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsIHBvbGxfdGFibGUgKnApCitzdGF0aWMgaW50IHA5X2ZkX3JlYWQoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCB2b2lkICp2LCBpbnQgbGVuKQogewotCWludCBpOworCWludCByZXQ7CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzICE9IERpc2Nvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOworCisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoISh0cy0+cmQtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJsb2NraW5nIHJlYWQgLi4uXG4iKTsKKworCXJldCA9IGtlcm5lbF9yZWFkKHRzLT5yZCwgdHMtPnJkLT5mX3BvcywgdiwgbGVuKTsKKwlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKKwkJY2xpZW50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwOV9yZWFkX3dvcmsgLSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGEgdHJhbnNwb3J0CisgKiBAd29yazogY29udGFpbmVyIG9mIHdvcmsgdG8gYmUgZG9uZQorICoKKyAqLworCitzdGF0aWMgdm9pZCBwOV9yZWFkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBuLCBlcnI7CiAJc3RydWN0IHA5X2Nvbm4gKm07CiAKLQltID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBwOV9jb25uLCBwdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykKLQkJaWYgKG0tPnBvbGxfd2FkZHJbaV0gPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JaWYgKGkgPj0gQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibm90IGVub3VnaCB3YWl0X2FkZHJlc3Mgc2xvdHNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbS0+cG9sbF93YWRkcltpXSA9IHdhaXRfYWRkcmVzczsKLQotCWlmICghd2FpdF9hZGRyZXNzKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJubyB3YWl0X2FkZHJlc3NcbiIpOwotCQltLT5wb2xsX3dhZGRyW2ldID0gRVJSX1BUUigtRUlPKTsKLQkJcmV0dXJuOwotCX0KLQotCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZtLT5wb2xsX3dhaXRbaV0sIG0tPnBvbGxfdGFzay0+dGFzayk7Ci0JYWRkX3dhaXRfcXVldWUod2FpdF9hZGRyZXNzLCAmbS0+cG9sbF93YWl0W2ldKTsKLX0KLQotLyoqCi0gKiBwOV9wb2xsX211eCAtIHBvbGxzIGEgbXV4IGFuZCBzY2hlZHVsZXMgcmVhZCBvciB3cml0ZSB3b3JrcyBpZiBuZWNlc3NhcnkKLSAqIEBtOiBjb25uZWN0aW9uIHRvIHBvbGwKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgcDlfcG9sbF9tdXgoc3RydWN0IHA5X2Nvbm4gKm0pCi17Ci0JaW50IG47CisJbSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDlfY29ubiwgcnEpOwogCiAJaWYgKG0tPmVyciA8IDApCiAJCXJldHVybjsKIAotCW4gPSBwOV9mZF9wb2xsKG0tPnRyYW5zLCBOVUxMKTsKLQlpZiAobiA8IDAgfHwgbiAmIChQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExOVkFMKSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImVycm9yIG11eCAlcCBlcnIgJWRcbiIsIG0sIG4pOwotCQlpZiAobiA+PSAwKQotCQkJbiA9IC1FQ09OTlJFU0VUOwotCQlwOV9jb25uX2NhbmNlbChtLCBuKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic3RhcnQgbXV4ICVwIHBvcyAlZFxuIiwgbSwgbS0+cnBvcyk7CisKKwlpZiAoIW0tPnJidWYpIHsKKwkJbS0+cmJ1ZiA9IG0tPnRtcF9idWY7CisJCW0tPnJwb3MgPSAwOworCQltLT5yc2l6ZSA9IDc7IC8qIHN0YXJ0IGJ5IHJlYWRpbmcgaGVhZGVyICovCiAJfQogCi0JaWYgKG4gJiBQT0xMSU4pIHsKLQkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHJlYWQgd29yayAlcFxuIiwgbSk7CisJY2xlYXJfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAicmVhZCBtdXggJXAgcG9zICVkIHNpemU6ICVkID0gJWRcbiIsIG0sCisJCQkJCW0tPnJwb3MsIG0tPnJzaXplLCBtLT5yc2l6ZS1tLT5ycG9zKTsKKwllcnIgPSBwOV9mZF9yZWFkKG0tPmNsaWVudCwgbS0+cmJ1ZiArIG0tPnJwb3MsCisJCQkJCQltLT5yc2l6ZSAtIG0tPnJwb3MpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgZ290ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOworCWlmIChlcnIgPT0gLUVBR0FJTikgeworCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXJyIDw9IDApCisJCWdvdG8gZXJyb3I7CisKKwltLT5ycG9zICs9IGVycjsKKworCWlmICgoIW0tPnJlcSkgJiYgKG0tPnJwb3MgPT0gbS0+cnNpemUpKSB7IC8qIGhlYWRlciByZWFkIGluICovCisJCXUxNiB0YWc7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJnb3QgbmV3IGhlYWRlclxuIik7CisKKwkJbiA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIG0tPnJidWYpOyAvKiByZWFkIHBhY2tldCBzaXplICovCisJCWlmIChuID49IG0tPmNsaWVudC0+bXNpemUpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJInJlcXVlc3RlZCBwYWNrZXQgc2l6ZSB0b28gYmlnOiAlZFxuIiwgbik7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXRhZyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopIChtLT5yYnVmKzUpKTsgLyogcmVhZCB0YWcgKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKKwkJCSJtdXggJXAgcGt0OiBzaXplOiAlZCBieXRlcyB0YWc6ICVkXG4iLCBtLCBuLCB0YWcpOworCisJCW0tPnJlcSA9IHA5X3RhZ19sb29rdXAobS0+Y2xpZW50LCB0YWcpOworCQlpZiAoIW0tPnJlcSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIlVuZXhwZWN0ZWQgcGFja2V0IHRhZyAlZFxuIiwKKwkJCQkJCQkJIHRhZyk7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlmIChtLT5yZXEtPnJjID09IE5VTEwpIHsKKwkJCW0tPnJlcS0+cmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsKKwkJCQkJCW0tPmNsaWVudC0+bXNpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFtLT5yZXEtPnJjKSB7CisJCQkJbS0+cmVxID0gTlVMTDsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmVxLT5yYyArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQltZW1jcHkobS0+cmJ1ZiwgbS0+dG1wX2J1ZiwgbS0+cnNpemUpOworCQltLT5yc2l6ZSA9IG47CisJfQorCisJLyogbm90IGFuIGVsc2UgYmVjYXVzZSBzb21lIHBhY2tldHMgKGxpa2UgY2x1bmspIGhhdmUgbm8gcGF5bG9hZCAqLworCWlmICgobS0+cmVxKSAmJiAobS0+cnBvcyA9PSBtLT5yc2l6ZSkpIHsgLyogcGFja2V0IGlzIHJlYWQgaW4gKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImdvdCBuZXcgcGFja2V0XG4iKTsKKwkJc3Bpbl9sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlsaXN0X2RlbCgmbS0+cmVxLT5yZXFfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlwOV9jbGllbnRfY2IobS0+Y2xpZW50LCBtLT5yZXEpOworCisJCW0tPnJidWYgPSBOVUxMOworCQltLT5ycG9zID0gMDsKKwkJbS0+cnNpemUgPSAwOworCQltLT5yZXEgPSBOVUxMOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmbS0+cmVxX2xpc3QpKSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpKQorCQkJbiA9IFBPTExJTjsKKwkJZWxzZQorCQkJbiA9IHA5X2ZkX3BvbGwobS0+Y2xpZW50LCBOVUxMKTsKKworCQlpZiAobiAmIFBPTExJTikgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHJlYWQgd29yayAlcFxuIiwgbSk7CiAJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKLQkJfQotCX0KKwkJfSBlbHNlCisJCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJfSBlbHNlCisJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIAotCWlmIChuICYgUE9MTE9VVCkgewotCQlzZXRfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKLQkJaWYgKChtLT53c2l6ZSB8fCAhbGlzdF9lbXB0eSgmbS0+dW5zZW50X3JlcV9saXN0KSkKLQkJICAgICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHdyaXRlIHdvcmsgJXBcbiIsIG0pOwotCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT53cSk7Ci0JCX0KLQl9CisJcmV0dXJuOworZXJyb3I6CisJcDlfY29ubl9jYW5jZWwobSwgZXJyKTsKKwljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiB9CiAKIC8qKgotICogcDlfcG9sbF9wcm9jIC0gcG9sbCB3b3JrZXIgdGhyZWFkCi0gKiBAYTogdGhyZWFkIHN0YXRlIGFuZCBhcmd1bWVudHMKLSAqCi0gKiBwb2xscyBhbGwgdjlmcyB0cmFuc3BvcnRzIGZvciBuZXcgZXZlbnRzIGFuZCBxdWV1ZXMgdGhlIGFwcHJvcHJpYXRlCi0gKiB3b3JrIHRvIHRoZSB3b3JrIHF1ZXVlCisgKiBwOV9mZF93cml0ZSAtIHdyaXRlIHRvIGEgc29ja2V0CisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEB2OiBidWZmZXIgdG8gc2VuZCBkYXRhIGZyb20KKyAqIEBsZW46IHNpemUgb2Ygc2VuZCBidWZmZXIKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqYSkKK3N0YXRpYyBpbnQgcDlfZmRfd3JpdGUoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCB2b2lkICp2LCBpbnQgbGVuKQogewotCXN0cnVjdCBwOV9jb25uICptLCAqbXRtcDsKLQlzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayAqdnB0OworCWludCByZXQ7CisJbW1fc2VnbWVudF90IG9sZGZzOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwogCi0JdnB0ID0gYTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInN0YXJ0ICVwICVwXG4iLCBjdXJyZW50LCB2cHQpOwotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKGNsaWVudCAmJiBjbGllbnQtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCisJCXRzID0gY2xpZW50LT50cmFuczsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobSwgbXRtcCwgJnZwdC0+bXV4X2xpc3QsIG11eF9saXN0KSB7Ci0JCQlwOV9wb2xsX211eChtKTsKLQkJfQorCWlmICghdHMpCisJCXJldHVybiAtRVJFTU9URUlPOwogCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2xlZXBpbmcuLi5cbiIpOwotCQlzY2hlZHVsZV90aW1lb3V0KFNDSEVEX1RJTUVPVVQgKiBIWik7Ci0JfQorCWlmICghKHRzLT53ci0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgd3JpdGUgLi4uXG4iKTsKIAotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImZpbmlzaFxuIik7Ci0JcmV0dXJuIDA7CisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCS8qIFRoZSBjYXN0IHRvIGEgdXNlciBwb2ludGVyIGlzIHZhbGlkIGR1ZSB0byB0aGUgc2V0X2ZzKCkgKi8KKwlyZXQgPSB2ZnNfd3JpdGUodHMtPndyLCAodm9pZCBfX3VzZXIgKil2LCBsZW4sICZ0cy0+d3ItPmZfcG9zKTsKKwlzZXRfZnMob2xkZnMpOworCisJaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCisJCWNsaWVudC0+c3RhdHVzID0gRGlzY29ubmVjdGVkOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNTg0LDcgKzQzNSw3IEBACiB7CiAJaW50IG4sIGVycjsKIAlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXE7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAKIAltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCB3cSk7CiAKQEAgLTU5OSwyNSArNDUwLDIzIEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlzcGluX2xvY2soJm0tPmxvY2spOwotYWdhaW46Ci0JCXJlcSA9IGxpc3RfZW50cnkobS0+dW5zZW50X3JlcV9saXN0Lm5leHQsIHN0cnVjdCBwOV9yZXEsCisJCXNwaW5fbG9jaygmbS0+Y2xpZW50LT5sb2NrKTsKKwkJcmVxID0gbGlzdF9lbnRyeShtLT51bnNlbnRfcmVxX2xpc3QubmV4dCwgc3RydWN0IHA5X3JlcV90LAogCQkJICAgICAgIHJlcV9saXN0KTsKKwkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX1NFTlQ7CiAJCWxpc3RfbW92ZV90YWlsKCZyZXEtPnJlcV9saXN0LCAmbS0+cmVxX2xpc3QpOwotCQlpZiAocmVxLT5lcnIgPT0gRVJSRVFGTFVTSCkKLQkJCWdvdG8gYWdhaW47CiAKLQkJbS0+d2J1ZiA9IHJlcS0+dGNhbGwtPnNkYXRhOwotCQltLT53c2l6ZSA9IHJlcS0+dGNhbGwtPnNpemU7CisJCW0tPndidWYgPSByZXEtPnRjLT5zZGF0YTsKKwkJbS0+d3NpemUgPSByZXEtPnRjLT5zaXplOwogCQltLT53cG9zID0gMDsKLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOworCQlzcGluX3VubG9jaygmbS0+Y2xpZW50LT5sb2NrKTsKIAl9CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBwb3MgJWQgc2l6ZSAlZFxuIiwgbSwgbS0+d3BvcywKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHBvcyAlZCBzaXplICVkXG4iLCBtLCBtLT53cG9zLAogCQkJCQkJCQltLT53c2l6ZSk7CiAJY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQllcnIgPSBwOV9mZF93cml0ZShtLT50cmFucywgbS0+d2J1ZiArIG0tPndwb3MsIG0tPndzaXplIC0gbS0+d3Bvcyk7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgc2VudCAlZCBieXRlc1xuIiwgbSwgZXJyKTsKKwllcnIgPSBwOV9mZF93cml0ZShtLT5jbGllbnQsIG0tPndidWYgKyBtLT53cG9zLCBtLT53c2l6ZSAtIG0tPndwb3MpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgc2VudCAlZCBieXRlc1xuIiwgbSwgZXJyKTsKIAlpZiAoZXJyID09IC1FQUdBSU4pIHsKIAkJY2xlYXJfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwogCQlyZXR1cm47CkBAIC02MzgsMTAgKzQ4NywxMCBAQAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKSkKIAkJCW4gPSBQT0xMT1VUOwogCQllbHNlCi0JCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOwogCiAJCWlmIChuICYgUE9MTE9VVCkgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzY2hlZHVsZSB3cml0ZSB3b3JrICVwXG4iLCBtKTsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCB3cml0ZSB3b3JrICVwXG4iLCBtKTsKIAkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOwogCQl9IGVsc2UKIAkJCWNsZWFyX2JpdChXd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKQEAgLTY1NSw1MDQgKzUwNCwxOTcgQEAKIAljbGVhcl9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQorc3RhdGljIGludCBwOV9wb2xsd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCiB7Ci0JaW50IGVjb2RlOwotCXN0cnVjdCBwOV9zdHIgKmVuYW1lOworCXN0cnVjdCBwOV9wb2xsX3dhaXQgKnB3YWl0ID0KKwkJY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBwOV9wb2xsX3dhaXQsIHdhaXQpOworCXN0cnVjdCBwOV9jb25uICptID0gcHdhaXQtPmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlERUNMQVJFX1dBSVRRVUVVRShkdW1teV93YWl0LCBwOV9wb2xsX3Rhc2spOwogCi0JaWYgKCFyZXEtPmVyciAmJiByZXEtPnJjYWxsLT5pZCA9PSBQOV9SRVJST1IpIHsKLQkJZWNvZGUgPSByZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm5vOwotCQllbmFtZSA9ICZyZXEtPnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yOworCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmbS0+cG9sbF9wZW5kaW5nX2xpbmspKQorCQlsaXN0X2FkZF90YWlsKCZtLT5wb2xsX3BlbmRpbmdfbGluaywgJnA5X3BvbGxfcGVuZGluZ19saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKIAotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIlJlcnJvciAlLipzXG4iLCBlbmFtZS0+bGVuLAotCQkJCQkJCQllbmFtZS0+c3RyKTsKLQotCQlpZiAobS0+ZXh0ZW5kZWQpCi0JCQlyZXEtPmVyciA9IC1lY29kZTsKLQotCQlpZiAoIXJlcS0+ZXJyKSB7Ci0JCQlyZXEtPmVyciA9IHA5X2VycnN0cjJlcnJubyhlbmFtZS0+c3RyLCBlbmFtZS0+bGVuKTsKLQotCQkJLyogc3RyaW5nIG1hdGNoIGZhaWxlZCAqLwotCQkJaWYgKCFyZXEtPmVycikgewotCQkJCVBSSU5UX0ZDQUxMX0VSUk9SKCJ1bmtub3duIGVycm9yIiwgcmVxLT5yY2FsbCk7Ci0JCQkJcmVxLT5lcnIgPSAtRVNFUlZFUkZBVUxUOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChyZXEtPnRjYWxsICYmIHJlcS0+cmNhbGwtPmlkICE9IHJlcS0+dGNhbGwtPmlkICsgMSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJmY2FsbCBtaXNtYXRjaDogZXhwZWN0ZWQgJWQsIGdvdCAlZFxuIiwKLQkJCQlyZXEtPnRjYWxsLT5pZCArIDEsIHJlcS0+cmNhbGwtPmlkKTsKLQkJaWYgKCFyZXEtPmVycikKLQkJCXJlcS0+ZXJyID0gLUVJTzsKLQl9CisJLyogcGVyZm9ybSB0aGUgZGVmYXVsdCB3YWtlIHVwIG9wZXJhdGlvbiAqLworCXJldHVybiBkZWZhdWx0X3dha2VfZnVuY3Rpb24oJmR1bW15X3dhaXQsIG1vZGUsIHN5bmMsIGtleSk7CiB9CiAKIC8qKgotICogcDlfcmVhZF93b3JrIC0gY2FsbGVkIHdoZW4gdGhlcmUgaXMgc29tZSBkYXRhIHRvIGJlIHJlYWQgZnJvbSBhIHRyYW5zcG9ydAotICogQHdvcms6IGNvbnRhaW5lciBvZiB3b3JrIHRvIGJlIGRvbmUKKyAqIHA5X3BvbGx3YWl0IC0gYWRkIHBvbGwgdGFzayB0byB0aGUgd2FpdCBxdWV1ZQorICogQGZpbHA6IGZpbGUgcG9pbnRlciBiZWluZyBwb2xsZWQKKyAqIEB3YWl0X2FkZHJlc3M6IHdhaXRfcSB0byBibG9jayBvbgorICogQHA6IHBvbGwgc3RhdGUKICAqCisgKiBjYWxsZWQgYnkgZmlsZXMgcG9sbCBvcGVyYXRpb24gdG8gYWRkIHY5ZnMtcG9sbCB0YXNrIHRvIGZpbGVzIHdhaXQgcXVldWUKICAqLwogCi1zdGF0aWMgdm9pZCBwOV9yZWFkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQKK3A5X3BvbGx3YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9hZGRyZXNzLCBwb2xsX3RhYmxlICpwKQogewotCWludCBuLCBlcnI7Ci0Jc3RydWN0IHA5X2Nvbm4gKm07Ci0Jc3RydWN0IHA5X3JlcSAqcmVxLCAqcnB0ciwgKnJyZXE7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKLQljaGFyICpyYnVmOworCXN0cnVjdCBwOV9jb25uICptID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBwOV9jb25uLCBwdCk7CisJc3RydWN0IHA5X3BvbGxfd2FpdCAqcHdhaXQgPSBOVUxMOworCWludCBpOwogCi0JbSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDlfY29ubiwgcnEpOwotCi0JaWYgKG0tPmVyciA8IDApCi0JCXJldHVybjsKLQotCXJjYWxsID0gTlVMTDsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInN0YXJ0IG11eCAlcCBwb3MgJWRcbiIsIG0sIG0tPnJwb3MpOwotCi0JaWYgKCFtLT5yY2FsbCkgewotCQltLT5yY2FsbCA9Ci0JCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgbS0+bXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW0tPnJjYWxsKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCW0tPnJidWYgPSAoY2hhciAqKW0tPnJjYWxsICsgc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7Ci0JCW0tPnJwb3MgPSAwOwotCX0KLQotCWNsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7Ci0JZXJyID0gcDlfZmRfcmVhZChtLT50cmFucywgbS0+cmJ1ZiArIG0tPnJwb3MsIG0tPm1zaXplIC0gbS0+cnBvcyk7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgZ290ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOwotCWlmIChlcnIgPT0gLUVBR0FJTikgewotCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZXJyIDw9IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQltLT5ycG9zICs9IGVycjsKLQl3aGlsZSAobS0+cnBvcyA+IDQpIHsKLQkJbiA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIG0tPnJidWYpOwotCQlpZiAobiA+PSBtLT5tc2l6ZSkgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkicmVxdWVzdGVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVkXG4iLCBuKTsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKG0tPnJwb3MgPCBuKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FpdCk7IGkrKykgeworCQlpZiAobS0+cG9sbF93YWl0W2ldLndhaXRfYWRkciA9PSBOVUxMKSB7CisJCQlwd2FpdCA9ICZtLT5wb2xsX3dhaXRbaV07CiAJCQlicmVhazsKLQotCQllcnIgPQotCQkgICAgcDlfZGVzZXJpYWxpemVfZmNhbGwobS0+cmJ1ZiwgbiwgbS0+cmNhbGwsIG0tPmV4dGVuZGVkKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycm9yOwotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCQlpZiAoKHA5X2RlYnVnX2xldmVsJlA5X0RFQlVHX0ZDQUxMKSA9PSBQOV9ERUJVR19GQ0FMTCkgewotCQkJY2hhciBidWZbMTUwXTsKLQotCQkJcDlfcHJpbnRmY2FsbChidWYsIHNpemVvZihidWYpLCBtLT5yY2FsbCwKLQkJCQltLT5leHRlbmRlZCk7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIj4+PiAlcCAlc1xuIiwgbSwgYnVmKTsKLQkJfQotI2VuZGlmCi0KLQkJcmNhbGwgPSBtLT5yY2FsbDsKLQkJcmJ1ZiA9IG0tPnJidWY7Ci0JCWlmIChtLT5ycG9zID4gbikgewotCQkJbS0+cmNhbGwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgbS0+bXNpemUsCi0JCQkJCSAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtLT5yY2FsbCkgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQotCQkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmNhbGwgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKLQkJCW1lbW1vdmUobS0+cmJ1ZiwgcmJ1ZiArIG4sIG0tPnJwb3MgLSBuKTsKLQkJCW0tPnJwb3MgLT0gbjsKLQkJfSBlbHNlIHsKLQkJCW0tPnJjYWxsID0gTlVMTDsKLQkJCW0tPnJidWYgPSBOVUxMOwotCQkJbS0+cnBvcyA9IDA7Ci0JCX0KLQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBmY2FsbCBpZCAlZCB0YWcgJWRcbiIsIG0sCi0JCQkJCQkJcmNhbGwtPmlkLCByY2FsbC0+dGFnKTsKLQotCQlyZXEgPSBOVUxMOwotCQlzcGluX2xvY2soJm0tPmxvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQkJaWYgKHJyZXEtPnRhZyA9PSByY2FsbC0+dGFnKSB7Ci0JCQkJcmVxID0gcnJlcTsKLQkJCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykKLQkJCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQotCQlpZiAocmVxKSB7Ci0JCQlyZXEtPnJjYWxsID0gcmNhbGw7Ci0JCQlwcm9jZXNzX3JlcXVlc3QobSwgcmVxKTsKLQotCQkJaWYgKHJlcS0+Zmx1c2ggIT0gRmx1c2hpbmcpIHsKLQkJCQlpZiAocmVxLT5jYikKLQkJCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCQkJZWxzZQotCQkJCQlrZnJlZShyZXEtPnJjYWxsKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChlcnIgPj0gMCAmJiByY2FsbC0+aWQgIT0gUDlfUkZMVVNIKQotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJICAidW5leHBlY3RlZCByZXNwb25zZSBtdXggJXAgaWQgJWQgdGFnICVkXG4iLAotCQkJCSAgbSwgcmNhbGwtPmlkLCByY2FsbC0+dGFnKTsKLQkJCWtmcmVlKHJjYWxsKTsKIAkJfQogCX0KIAotCWlmICghbGlzdF9lbXB0eSgmbS0+cmVxX2xpc3QpKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpKQotCQkJbiA9IFBPTExJTjsKLQkJZWxzZQotCQkJbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOworCWlmICghcHdhaXQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm5vdCBlbm91Z2ggd2FpdF9hZGRyZXNzIHNsb3RzXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCQlpZiAobiAmIFBPTExJTikgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzY2hlZHVsZSByZWFkIHdvcmsgJXBcbiIsIG0pOwotCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT5ycSk7Ci0JCX0gZWxzZQotCQkJY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwotCX0gZWxzZQotCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0KLQlyZXR1cm47Ci0KLWVycm9yOgotCXA5X2Nvbm5fY2FuY2VsKG0sIGVycik7Ci0JY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOworCXB3YWl0LT5jb25uID0gbTsKKwlwd2FpdC0+d2FpdF9hZGRyID0gd2FpdF9hZGRyZXNzOworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnB3YWl0LT53YWl0LCBwOV9wb2xsd2FrZSk7CisJYWRkX3dhaXRfcXVldWUod2FpdF9hZGRyZXNzLCAmcHdhaXQtPndhaXQpOwogfQogCiAvKioKLSAqIHA5X3NlbmRfcmVxdWVzdCAtIHNlbmQgOVAgcmVxdWVzdAotICogVGhlIGZ1bmN0aW9uIGNhbiBzbGVlcCB1bnRpbCB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZWQgZm9yIHNlbmRpbmcuCi0gKiBUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLiBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgbm90Ci0gKiBhIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5LiBDYW4gcmV0dXJuIGVycm9ycwotICogdGhhdCBjYW4gYmUgcmV0cmlldmVkIGJ5IFBUUl9FUlIgbWFjcm9zLgorICogcDlfY29ubl9jcmVhdGUgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyLXNlc3Npb24gbXV4IGRhdGEKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQogICoKLSAqIEBtOiBtdXggZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEBjYjogY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkCi0gKiBAY2JhOiBwYXJhbWV0ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCisgKiBOb3RlOiBDcmVhdGVzIHRoZSBwb2xsaW5nIHRhc2sgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2Vzc2lvbi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHA5X3JlcSAqcDlfc2VuZF9yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLAotCQkJCQkgIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCQkJCSAgcDlfY29ubl9yZXFfY2FsbGJhY2sgY2IsIHZvaWQgKmNiYSkKK3N0YXRpYyBzdHJ1Y3QgcDlfY29ubiAqcDlfY29ubl9jcmVhdGUoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50KQogewogCWludCBuOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKKwlzdHJ1Y3QgcDlfY29ubiAqbTsKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHRhc2sgJXAgdGNhbGwgJXAgaWQgJWRcbiIsIG0sIGN1cnJlbnQsCi0JCXRjLCB0Yy0+aWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJjbGllbnQgJXAgbXNpemUgJWRcbiIsIGNsaWVudCwKKwkJCQkJCQkJY2xpZW50LT5tc2l6ZSk7CisJbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9jb25uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZtLT5tdXhfbGlzdCk7CisJbS0+Y2xpZW50ID0gY2xpZW50OworCisJSU5JVF9MSVNUX0hFQUQoJm0tPnJlcV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbS0+dW5zZW50X3JlcV9saXN0KTsKKwlJTklUX1dPUksoJm0tPnJxLCBwOV9yZWFkX3dvcmspOworCUlOSVRfV09SSygmbS0+d3EsIHA5X3dyaXRlX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZtLT5wb2xsX3BlbmRpbmdfbGluayk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJm0tPnB0LCBwOV9wb2xsd2FpdCk7CisKKwluID0gcDlfZmRfcG9sbChjbGllbnQsICZtLT5wdCk7CisJaWYgKG4gJiBQT0xMSU4pIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gcmVhZFxuIiwgbSk7CisJCXNldF9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpOworCX0KKworCWlmIChuICYgUE9MTE9VVCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIGNhbiB3cml0ZVxuIiwgbSk7CisJCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOworCX0KKworCXJldHVybiBtOworfQorCisvKioKKyAqIHA5X3BvbGxfbXV4IC0gcG9sbHMgYSBtdXggYW5kIHNjaGVkdWxlcyByZWFkIG9yIHdyaXRlIHdvcmtzIGlmIG5lY2Vzc2FyeQorICogQG06IGNvbm5lY3Rpb24gdG8gcG9sbAorICoKKyAqLworCitzdGF0aWMgdm9pZCBwOV9wb2xsX211eChzdHJ1Y3QgcDlfY29ubiAqbSkKK3sKKwlpbnQgbjsKKwogCWlmIChtLT5lcnIgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihtLT5lcnIpOworCQlyZXR1cm47CiAKLQlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfcmVxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXEpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JaWYgKHRjLT5pZCA9PSBQOV9UVkVSU0lPTikKLQkJbiA9IFA5X05PVEFHOwotCWVsc2UKLQkJbiA9IHA5X211eF9nZXRfdGFnKG0pOwotCi0JaWYgKG4gPCAwKSB7Ci0JCWtmcmVlKHJlcSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CisJaWYgKG4gPCAwIHx8IG4gJiAoUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMTlZBTCkpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImVycm9yIG11eCAlcCBlcnIgJWRcbiIsIG0sIG4pOworCQlpZiAobiA+PSAwKQorCQkJbiA9IC1FQ09OTlJFU0VUOworCQlwOV9jb25uX2NhbmNlbChtLCBuKTsKIAl9CiAKLQlwOV9zZXRfdGFnKHRjLCBuKTsKLQotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQlpZiAoKHA5X2RlYnVnX2xldmVsJlA5X0RFQlVHX0ZDQUxMKSA9PSBQOV9ERUJVR19GQ0FMTCkgewotCQljaGFyIGJ1ZlsxNTBdOwotCi0JCXA5X3ByaW50ZmNhbGwoYnVmLCBzaXplb2YoYnVmKSwgdGMsIG0tPmV4dGVuZGVkKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICI8PDwgJXAgJXNcbiIsIG0sIGJ1Zik7CisJaWYgKG4gJiBQT0xMSU4pIHsKKwkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCByZWFkIHdvcmsgJXBcbiIsIG0pOworCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT5ycSk7CisJCX0KIAl9Ci0jZW5kaWYKIAotCXNwaW5fbG9ja19pbml0KCZyZXEtPmxvY2spOwotCXJlcS0+dGFnID0gbjsKLQlyZXEtPnRjYWxsID0gdGM7Ci0JcmVxLT5yY2FsbCA9IE5VTEw7Ci0JcmVxLT5lcnIgPSAwOwotCXJlcS0+Y2IgPSBjYjsKLQlyZXEtPmNiYSA9IGNiYTsKLQlyZXEtPmZsdXNoID0gTm9uZTsKKwlpZiAobiAmIFBPTExPVVQpIHsKKwkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKKwkJaWYgKChtLT53c2l6ZSB8fCAhbGlzdF9lbXB0eSgmbS0+dW5zZW50X3JlcV9saXN0KSkKKwkJICAgICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic2NoZWQgd3JpdGUgd29yayAlcFxuIiwgbSk7CisJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKKwkJfQorCX0KK30KIAotCXNwaW5fbG9jaygmbS0+bG9jayk7CisvKioKKyAqIHA5X2ZkX3JlcXVlc3QgLSBzZW5kIDlQIHJlcXVlc3QKKyAqIFRoZSBmdW5jdGlvbiBjYW4gc2xlZXAgdW50aWwgdGhlIHJlcXVlc3QgaXMgc2NoZWR1bGVkIGZvciBzZW5kaW5nLgorICogVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4gUmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uIGlzIG5vdAorICogYSBndWFyYW50ZWUgdGhhdCB0aGUgcmVxdWVzdCBpcyBzZW50IHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKKyAqIEByZXE6IHJlcXVlc3QgdG8gYmUgc2VudAorICoKKyAqLworCitzdGF0aWMgaW50IHA5X2ZkX3JlcXVlc3Qoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gY2xpZW50LT50cmFuczsKKwlzdHJ1Y3QgcDlfY29ubiAqbSA9IHRzLT5jb25uOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCB0YXNrICVwIHRjYWxsICVwIGlkICVkXG4iLCBtLAorCQkJCQkJY3VycmVudCwgcmVxLT50YywgcmVxLT50Yy0+aWQpOworCWlmIChtLT5lcnIgPCAwKQorCQlyZXR1cm4gbS0+ZXJyOworCisJc3Bpbl9sb2NrKCZjbGllbnQtPmxvY2spOworCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19VTlNFTlQ7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5yZXFfbGlzdCwgJm0tPnVuc2VudF9yZXFfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOworCXNwaW5fdW5sb2NrKCZjbGllbnQtPmxvY2spOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXcGVuZGluZywgJm0tPndzY2hlZCkpCiAJCW4gPSBQT0xMT1VUOwogCWVsc2UKLQkJbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOworCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOwogCiAJaWYgKG4gJiBQT0xMT1VUICYmICF0ZXN0X2FuZF9zZXRfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpKQogCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKIAotCXJldHVybiByZXE7Ci19Ci0KLXN0YXRpYyB2b2lkIHA5X211eF9mcmVlX3JlcXVlc3Qoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9yZXEgKnJlcSkKLXsKLQlwOV9tdXhfcHV0X3RhZyhtLCByZXEtPnRhZyk7Ci0Ja2ZyZWUocmVxKTsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X2ZsdXNoX2NiKHN0cnVjdCBwOV9yZXEgKmZyZXEsIHZvaWQgKmEpCi17Ci0JaW50IHRhZzsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXEsICpycmVxLCAqcnB0cjsKLQotCW0gPSBhOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHRjICVwIHJjICVwIGVyciAlZCBvbGR0YWcgJWRcbiIsIG0sCi0JCWZyZXEtPnRjYWxsLCBmcmVxLT5yY2FsbCwgZnJlcS0+ZXJyLAotCQlmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWcpOwotCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQl0YWcgPSBmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWc7Ci0JcmVxID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlpZiAocnJlcS0+dGFnID09IHRhZykgewotCQkJcmVxID0gcnJlcTsKLQkJCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQotCWlmIChyZXEpIHsKLQkJc3Bpbl9sb2NrKCZyZXEtPmxvY2spOwotCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKLQkJc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0KLQkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJZWxzZQotCQkJa2ZyZWUocmVxLT5yY2FsbCk7Ci0JfQotCi0Ja2ZyZWUoZnJlcS0+dGNhbGwpOwotCWtmcmVlKGZyZXEtPnJjYWxsKTsKLQlwOV9tdXhfZnJlZV9yZXF1ZXN0KG0sIGZyZXEpOwotfQotCi1zdGF0aWMgaW50Ci1wOV9tdXhfZmx1c2hfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQotewotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IHA5X3JlcSAqcnJlcSwgKnJwdHI7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCByZXEgJXAgdGFnICVkXG4iLCBtLCByZXEsIHJlcS0+dGFnKTsKLQotCS8qIGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGZvciBhIHJlcXVlc3QsIGRvIG5vdGhpbmcgKi8KLQlzcGluX2xvY2soJnJlcS0+bG9jayk7Ci0JaWYgKHJlcS0+cmNhbGwgfHwgcmVxLT5lcnIpIHsKLQkJc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLAotCQkJIm11eCAlcCByZXEgJXAgcmVzcG9uc2UgYWxyZWFkeSByZWNlaXZlZFxuIiwgbSwgcmVxKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmVxLT5mbHVzaCA9IEZsdXNoaW5nOwotCXNwaW5fdW5sb2NrKCZyZXEtPmxvY2spOwotCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQkvKiBpZiB0aGUgcmVxdWVzdCBpcyBub3Qgc2VudCB5ZXQsIGp1c3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKLQkJaWYgKHJyZXEtPnRhZyA9PSByZXEtPnRhZykgewotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCi0JCQkgICAibXV4ICVwIHJlcSAlcCByZXF1ZXN0IGlzIG5vdCBzZW50IHlldFxuIiwgbSwgcmVxKTsKLQkJCWxpc3RfZGVsKCZycmVxLT5yZXFfbGlzdCk7Ci0JCQlyZXEtPmZsdXNoID0gRmx1c2hlZDsKLQkJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKLQkJCWlmIChyZXEtPmNiKQotCQkJCSgqcmVxLT5jYikgKHJlcSwgcmVxLT5jYmEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwotCWZjID0gcDlfY3JlYXRlX3RmbHVzaChyZXEtPnRhZyk7Ci0JcDlfc2VuZF9yZXF1ZXN0KG0sIGZjLCBwOV9tdXhfZmx1c2hfY2IsIG0pOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZAotcDlfY29ubl9ycGNfY2Ioc3RydWN0IHA5X3JlcSAqcmVxLCB2b2lkICphKQotewotCXN0cnVjdCBwOV9tdXhfcnBjICpyOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJyZXEgJXAgciAlcFxuIiwgcmVxLCBhKTsKLQlyID0gYTsKLQlyLT5yY2FsbCA9IHJlcS0+cmNhbGw7Ci0Jci0+ZXJyID0gcmVxLT5lcnI7Ci0KLQlpZiAocmVxLT5mbHVzaCAhPSBOb25lICYmICFyZXEtPmVycikKLQkJci0+ZXJyID0gLUVSRVNUQVJUU1lTOwotCi0Jd2FrZV91cCgmci0+d3F1ZXVlKTsKLX0KLQotLyoqCi0gKiBwOV9mZF9ycGMtIHNlbmRzIDlQIHJlcXVlc3QgYW5kIHdhaXRzIHVudGlsIGEgcmVzcG9uc2UgaXMgYXZhaWxhYmxlLgotICoJVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4KLSAqIEB0OiB0cmFuc3BvcnQgZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEByYzogcG9pbnRlciB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlzIHN0b3JlZAotICoKLSAqLwotCi1pbnQKLXA5X2ZkX3JwYyhzdHJ1Y3QgcDlfdHJhbnMgKnQsIHN0cnVjdCBwOV9mY2FsbCAqdGMsIHN0cnVjdCBwOV9mY2FsbCAqKnJjKQotewotCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IHQtPnByaXY7Ci0Jc3RydWN0IHA5X2Nvbm4gKm0gPSBwLT5jb25uOwotCWludCBlcnIsIHNpZ3BlbmRpbmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcDlfcmVxICpyZXE7Ci0Jc3RydWN0IHA5X211eF9ycGMgcjsKLQotCXIuZXJyID0gMDsKLQlyLnRjYWxsID0gdGM7Ci0Jci5yY2FsbCA9IE5VTEw7Ci0Jci5tID0gbTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyLndxdWV1ZSk7Ci0KLQlpZiAocmMpCi0JCSpyYyA9IE5VTEw7Ci0KLQlzaWdwZW5kaW5nID0gMDsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJc2lncGVuZGluZyA9IDE7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKLQl9Ci0KLQlyZXEgPSBwOV9zZW5kX3JlcXVlc3QobSwgdGMsIHA5X2Nvbm5fcnBjX2NiLCAmcik7Ci0JaWYgKElTX0VSUihyZXEpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVxKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsIHIucmNhbGwgIT0gTlVMTCB8fCByLmVyciA8IDApOwotCWlmIChyLmVyciA8IDApCi0JCWVyciA9IHIuZXJyOwotCi0JaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMgJiYgbS0+dHJhbnMtPnN0YXR1cyA9PSBDb25uZWN0ZWQKLQkJCQkJCQkmJiBtLT5lcnIgPT0gMCkgewotCQlpZiAocDlfbXV4X2ZsdXNoX3JlcXVlc3QobSwgcmVxKSkgewotCQkJLyogd2FpdCB1bnRpbCB3ZSBnZXQgcmVzcG9uc2Ugb2YgdGhlIGZsdXNoIG1lc3NhZ2UgKi8KLQkJCWRvIHsKLQkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7Ci0JCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHIud3F1ZXVlLAotCQkJCQlyLnJjYWxsIHx8IHIuZXJyKTsKLQkJCX0gd2hpbGUgKCFyLnJjYWxsICYmICFyLmVyciAmJiBlcnIgPT0gLUVSRVNUQVJUU1lTICYmCi0JCQkJbS0+dHJhbnMtPnN0YXR1cyA9PSBDb25uZWN0ZWQgJiYgIW0tPmVycik7Ci0KLQkJCWVyciA9IC1FUkVTVEFSVFNZUzsKLQkJfQotCQlzaWdwZW5kaW5nID0gMTsKLQl9Ci0KLQlpZiAoc2lncGVuZGluZykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKHJjKQotCQkqcmMgPSByLnJjYWxsOwotCWVsc2UKLQkJa2ZyZWUoci5yY2FsbCk7Ci0KLQlwOV9tdXhfZnJlZV9yZXF1ZXN0KG0sIHJlcSk7Ci0JaWYgKGVyciA+IDApCi0JCWVyciA9IC1FSU87Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWZkZWYgUDlfTk9OQkxPQ0sKLS8qKgotICogcDlfY29ubl9ycGNuYiAtIHNlbmRzIDlQIHJlcXVlc3Qgd2l0aG91dCB3YWl0aW5nIGZvciByZXNwb25zZS4KLSAqIEBtOiBtdXggZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEBjYjogY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gcmVzcG9uc2UgYXJyaXZlcwotICogQGE6IHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKgotICovCi0KLWludCBwOV9jb25uX3JwY25iKHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLAotCQkgICBwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqYSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKLQotCXJlcSA9IHA5X3NlbmRfcmVxdWVzdChtLCB0YywgY2IsIGEpOwotCWlmIChJU19FUlIocmVxKSkgewotCQllcnIgPSBQVFJfRVJSKHJlcSk7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXJyb3IgJWRcbiIsIGVycik7Ci0JCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JfQotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGMgJXAgdGFnICVkXG4iLCBtLCB0YywgcmVxLT50YWcpOwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIFA5X05PTkJMT0NLICovCiAKLS8qKgotICogcDlfY29ubl9jYW5jZWwgLSBjYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCBlcnJvcgotICogQG06IG11eCBkYXRhCi0gKiBAZXJyOiBlcnJvciBjb2RlCi0gKgotICovCi0KLXZvaWQgcDlfY29ubl9jYW5jZWwoc3RydWN0IHA5X2Nvbm4gKm0sIGludCBlcnIpCitzdGF0aWMgaW50IHA5X2ZkX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQogewotCXN0cnVjdCBwOV9yZXEgKnJlcSwgKnJ0bXA7Ci0JTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gY2xpZW50LT50cmFuczsKKwlzdHJ1Y3QgcDlfY29ubiAqbSA9IHRzLT5jb25uOworCWludCByZXQgPSAxOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm11eCAlcCBlcnIgJWRcbiIsIG0sIGVycik7Ci0JbS0+ZXJyID0gZXJyOwotCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewotCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7Ci0JfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgcmVxICVwXG4iLCBtLCByZXEpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJmNhbmNlbF9saXN0LCByZXFfbGlzdCkgewotCQlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7Ci0JCWlmICghcmVxLT5lcnIpCi0JCQlyZXEtPmVyciA9IGVycjsKKwlzcGluX2xvY2soJmNsaWVudC0+bG9jayk7CisJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwogCi0JCWlmIChyZXEtPmNiKQotCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCWVsc2UKLQkJCWtmcmVlKHJlcS0+cmNhbGwpOworCWlmIChyZXEtPnN0YXR1cyA9PSBSRVFfU1RBVFVTX1VOU0VOVCkgeworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRkxTSEQ7CisJCXJldCA9IDA7CiAJfQorCisJc3Bpbl91bmxvY2soJmNsaWVudC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTEyMTYsNyArNzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwOV9mZF9vcGVuKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIGludCByZmQsIGludCB3ZmQpCitzdGF0aWMgaW50IHA5X2ZkX29wZW4oc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBpbnQgcmZkLCBpbnQgd2ZkKQogewogCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnNfZmQpLAogCQkJCQkgICBHRlBfS0VSTkVMKTsKQEAgLTEyMzQsMTMgKzc3NiwxMyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0cmFucy0+cHJpdiA9IHRzOwotCXRyYW5zLT5zdGF0dXMgPSBDb25uZWN0ZWQ7CisJY2xpZW50LT50cmFucyA9IHRzOworCWNsaWVudC0+c3RhdHVzID0gQ29ubmVjdGVkOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcDlfc29ja2V0X29wZW4oc3RydWN0IHA5X3RyYW5zICp0cmFucywgc3RydWN0IHNvY2tldCAqY3NvY2tldCkKK3N0YXRpYyBpbnQgcDlfc29ja2V0X29wZW4oc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQogewogCWludCBmZCwgcmV0OwogCkBAIC0xMjUxLDEzNyArNzkzLDY1IEBACiAJCXJldHVybiBmZDsKIAl9CiAKLQlyZXQgPSBwOV9mZF9vcGVuKHRyYW5zLCBmZCwgZmQpOworCXJldCA9IHA5X2ZkX29wZW4oY2xpZW50LCBmZCwgZmQpOwogCWlmIChyZXQgPCAwKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV9zb2NrZXRfb3BlbjogZmFpbGVkIHRvIG9wZW4gZmRcbiIpOwogCQlzb2NrZmRfcHV0KGNzb2NrZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCSgoc3RydWN0IHA5X3RyYW5zX2ZkICopdHJhbnMtPnByaXYpLT5yZC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCSgoc3RydWN0IHA5X3RyYW5zX2ZkICopY2xpZW50LT50cmFucyktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBwOV9mZF9yZWFkLSByZWFkIGZyb20gYSBmZAotICogQHRyYW5zOiB0cmFuc3BvcnQgaW5zdGFuY2Ugc3RhdGUKLSAqIEB2OiBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGludG8KLSAqIEBsZW46IHNpemUgb2YgcmVjZWl2ZSBidWZmZXIKKyAqIHA5X211eF9kZXN0cm95IC0gY2FuY2VscyBhbGwgcGVuZGluZyByZXF1ZXN0cyBhbmQgZnJlZXMgbXV4IHJlc291cmNlcworICogQG06IG11eCB0byBkZXN0cm95CiAgKgogICovCiAKLXN0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcDlfY29ubl9kZXN0cm95KHN0cnVjdCBwOV9jb25uICptKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBwcmV2ICVwIG5leHQgJXBcbiIsIG0sCisJCW0tPm11eF9saXN0LnByZXYsIG0tPm11eF9saXN0Lm5leHQpOwogCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OworCXA5X211eF9wb2xsX3N0b3AobSk7CisJY2FuY2VsX3dvcmtfc3luYygmbS0+cnEpOworCWNhbmNlbF93b3JrX3N5bmMoJm0tPndxKTsKIAotCWlmICghdHMpCi0JCXJldHVybiAtRVJFTU9URUlPOworCXA5X2Nvbm5fY2FuY2VsKG0sIC1FQ09OTlJFU0VUKTsKIAotCWlmICghKHRzLT5yZC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgcmVhZCAuLi5cbiIpOwotCi0JcmV0ID0ga2VybmVsX3JlYWQodHMtPnJkLCB0cy0+cmQtPmZfcG9zLCB2LCBsZW4pOwotCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCXJldHVybiByZXQ7CisJbS0+Y2xpZW50ID0gTlVMTDsKKwlrZnJlZShtKTsKIH0KIAogLyoqCi0gKiBwOV9mZF93cml0ZSAtIHdyaXRlIHRvIGEgc29ja2V0Ci0gKiBAdHJhbnM6IHRyYW5zcG9ydCBpbnN0YW5jZSBzdGF0ZQotICogQHY6IGJ1ZmZlciB0byBzZW5kIGRhdGEgZnJvbQotICogQGxlbjogc2l6ZSBvZiBzZW5kIGJ1ZmZlcgorICogcDlfZmRfY2xvc2UgLSBzaHV0ZG93biBmaWxlIGRlc2NyaXB0b3IgdHJhbnNwb3J0CisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQotewotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwotCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OwotCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0KLQlpZiAoISh0cy0+d3ItPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJsb2NraW5nIHdyaXRlIC4uLlxuIik7Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0JLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOwotCXNldF9mcyhvbGRmcyk7Ci0KLQlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKLQkJdHJhbnMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1wOV9mZF9wb2xsKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpCi17Ci0JaW50IHJldCwgbjsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKLQotCWlmICh0cmFucyAmJiB0cmFucy0+c3RhdHVzID09IENvbm5lY3RlZCkKLQkJdHMgPSB0cmFucy0+cHJpdjsKLQotCWlmICghdHMpCi0JCXJldHVybiAtRVJFTU9URUlPOwotCi0JaWYgKCF0cy0+cmQtPmZfb3AgfHwgIXRzLT5yZC0+Zl9vcC0+cG9sbCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoIXRzLT53ci0+Zl9vcCB8fCAhdHMtPndyLT5mX29wLT5wb2xsKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9IHRzLT5yZC0+Zl9vcC0+cG9sbCh0cy0+cmQsIHB0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh0cy0+cmQgIT0gdHMtPndyKSB7Ci0JCW4gPSB0cy0+d3ItPmZfb3AtPnBvbGwodHMtPndyLCBwdCk7Ci0JCWlmIChuIDwgMCkKLQkJCXJldHVybiBuOwotCQlyZXQgPSAocmV0ICYgflBPTExPVVQpIHwgKG4gJiB+UE9MTElOKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHA5X2ZkX2Nsb3NlIC0gc2h1dGRvd24gc29ja2V0Ci0gKiBAdHJhbnM6IHByaXZhdGUgc29ja2V0IHN0cnVjdHVyZQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBwOV9mZF9jbG9zZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQorc3RhdGljIHZvaWQgcDlfZmRfY2xvc2Uoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwOV90cmFuc19mZCAqdHM7CiAKLQlpZiAoIXRyYW5zKQorCWlmICghY2xpZW50KQogCQlyZXR1cm47CiAKLQl0cyA9IHhjaGcoJnRyYW5zLT5wcml2LCBOVUxMKTsKLQorCXRzID0gY2xpZW50LT50cmFuczsKIAlpZiAoIXRzKQogCQlyZXR1cm47CiAKKwljbGllbnQtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwogCXA5X2Nvbm5fZGVzdHJveSh0cy0+Y29ubik7CiAKLQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwogCWlmICh0cy0+cmQpCiAJCWZwdXQodHMtPnJkKTsKIAlpZiAodHMtPndyKQogCQlmcHV0KHRzLT53cik7CisKIAlrZnJlZSh0cyk7CiB9CiAKQEAgLTE0MDIsMzEgKzg3MiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3RyYW5zX2NyZWF0ZV90Y3AoY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncywgaW50IG1zaXplLCB1bnNpZ25lZCBjaGFyIGRvdHUpCitzdGF0aWMgaW50CitwOV9mZF9jcmVhdGVfdGNwKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3NlcnZlcjsKIAlzdHJ1Y3QgcDlfZmRfb3B0cyBvcHRzOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldHMgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCWVyciA9IHBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKHZhbGlkX2lwYWRkcjQoYWRkcikgPCAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljc29ja2V0ID0gTlVMTDsKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCXRyYW5zLT5tc2l6ZSA9IG1zaXplOwotCXRyYW5zLT5leHRlbmRlZCA9IGRvdHU7Ci0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKIAogCXNpbl9zZXJ2ZXIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJc2luX3NlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpOwpAQCAtMTQ0OSw0NSArOTExLDM4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfc29ja2V0X29wZW4odHJhbnMsIGNzb2NrZXQpOworCWVyciA9IHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgogCWlmIChjc29ja2V0KQogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX3VuaXgoY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncywgaW50IG1zaXplLAotCQkJCQkJCXVuc2lnbmVkIGNoYXIgZG90dSkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZV91bml4KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKmNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyX3VuIHN1bl9zZXJ2ZXI7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnA7CisJc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXRzIGFsbG9jYXRlZCBpbiBwOV9mZF9vcGVuICovCiAKIAljc29ja2V0ID0gTlVMTDsKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKIAogCWlmIChzdHJsZW4oYWRkcikgPiBVTklYX1BBVEhfTUFYKSB7CiAJCVA5X0VQUklOVEsoS0VSTl9FUlIsICJwOV90cmFuc191bml4OiBhZGRyZXNzIHRvbyBsb25nOiAlc1xuIiwKQEAgLTE1MDgsNzkgKzk2Myw2OSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5X3NvY2tldF9vcGVuKHRyYW5zLCBjc29ja2V0KTsKKwllcnIgPSBwOV9zb2NrZXRfb3BlbihjbGllbnQsIGNzb2NrZXQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZG90dTsKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgogCWlmIChjc29ja2V0KQogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3RyYW5zX2NyZWF0ZV9mZChjb25zdCBjaGFyICpuYW1lLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBleHRlbmRlZCkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmFyZ3MpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwogCXN0cnVjdCBwOV9mZF9vcHRzIG9wdHM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwOworCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0IGFsbG9jYXRlZCBpbiBwOV9mZF9vcGVuICovCiAKIAlwYXJzZV9vcHRzKGFyZ3MsICZvcHRzKTsKIAogCWlmIChvcHRzLnJmZCA9PSB+MCB8fCBvcHRzLndmZCA9PSB+MCkgewogCQlwcmludGsoS0VSTl9FUlIgInY5ZnM6IEluc3VmZmljaWVudCBvcHRpb25zIGZvciBwcm90bz1mZFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9QUk9UT09QVCk7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JdHJhbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyYW5zKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXRyYW5zLT5ycGMgPSBwOV9mZF9ycGM7Ci0JdHJhbnMtPmNsb3NlID0gcDlfZmRfY2xvc2U7Ci0KLQllcnIgPSBwOV9mZF9vcGVuKHRyYW5zLCBvcHRzLnJmZCwgb3B0cy53ZmQpOworCWVyciA9IHA5X2ZkX29wZW4oY2xpZW50LCBvcHRzLnJmZCwgb3B0cy53ZmQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZXh0ZW5kZWQ7Ci0JcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgdHJhbnMtPnByaXY7Ci0JcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKHRyYW5zKTsKKwlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSBjbGllbnQtPnRyYW5zOworCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZShjbGllbnQpOwogCWlmIChJU19FUlIocC0+Y29ubikpIHsKIAkJZXJyID0gUFRSX0VSUihwLT5jb25uKTsKIAkJcC0+Y29ubiA9IE5VTEw7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcmV0dXJuIHRyYW5zOworCXJldHVybiAwOwogCiBlcnJvcjoKLQlrZnJlZSh0cmFucyk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHA5X3RyYW5zX21vZHVsZSBwOV90Y3BfdHJhbnMgPSB7CiAJLm5hbWUgPSAidGNwIiwKIAkubWF4c2l6ZSA9IE1BWF9TT0NLX0JVRiwKIAkuZGVmID0gMSwKLQkuY3JlYXRlID0gcDlfdHJhbnNfY3JlYXRlX3RjcCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlX3RjcCwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE1ODgsNyArMTAzMywxMCBAQAogCS5uYW1lID0gInVuaXgiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAwLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfdW5peCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlX3VuaXgsCisJLmNsb3NlID0gcDlfZmRfY2xvc2UsCisJLnJlcXVlc3QgPSBwOV9mZF9yZXF1ZXN0LAorCS5jYW5jZWwgPSBwOV9mZF9jYW5jZWwsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCkBAIC0xNTk2LDIzICsxMDQ0LDcxIEBACiAJLm5hbWUgPSAiZmQiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAwLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfZmQsCisJLmNyZWF0ZSA9IHA5X2ZkX2NyZWF0ZSwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKKy8qKgorICogcDlfcG9sbF9wcm9jIC0gcG9sbCB3b3JrZXIgdGhyZWFkCisgKiBAYTogdGhyZWFkIHN0YXRlIGFuZCBhcmd1bWVudHMKKyAqCisgKiBwb2xscyBhbGwgdjlmcyB0cmFuc3BvcnRzIGZvciBuZXcgZXZlbnRzIGFuZCBxdWV1ZXMgdGhlIGFwcHJvcHJpYXRlCisgKiB3b3JrIHRvIHRoZSB3b3JrIHF1ZXVlCisgKgorICovCisKK3N0YXRpYyBpbnQgcDlfcG9sbF9wcm9jKHZvaWQgKmEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzdGFydCAlcFxuIiwgY3VycmVudCk7CisgcmVwZWF0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnA5X3BvbGxfcGVuZGluZ19saXN0KSkgeworCQlzdHJ1Y3QgcDlfY29ubiAqY29ubiA9IGxpc3RfZmlyc3RfZW50cnkoJnA5X3BvbGxfcGVuZGluZ19saXN0LAorCQkJCQkJCXN0cnVjdCBwOV9jb25uLAorCQkJCQkJCXBvbGxfcGVuZGluZ19saW5rKTsKKwkJbGlzdF9kZWxfaW5pdCgmY29ubi0+cG9sbF9wZW5kaW5nX2xpbmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKworCQlwOV9wb2xsX211eChjb25uKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAobGlzdF9lbXB0eSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QpKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzbGVlcGluZy4uLlxuIik7CisJCXNjaGVkdWxlKCk7CisJfQorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlnb3RvIHJlcGVhdDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJmaW5pc2hcbiIpOworCXJldHVybiAwOworfQorCiBpbnQgcDlfdHJhbnNfZmRfaW5pdCh2b2lkKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpOyBpKyspCi0JCXA5X211eF9wb2xsX3Rhc2tzW2ldLnRhc2sgPSBOVUxMOwotCiAJcDlfbXV4X3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgidjlmcyIpOwogCWlmICghcDlfbXV4X3dxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInY5ZnM6IG11eDogY3JlYXRpbmcgd29ya3F1ZXVlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXA5X3BvbGxfdGFzayA9IGt0aHJlYWRfcnVuKHA5X3BvbGxfcHJvYywgTlVMTCwgInY5ZnMtcG9sbCIpOworCWlmIChJU19FUlIocDlfcG9sbF90YXNrKSkgeworCQlkZXN0cm95X3dvcmtxdWV1ZShwOV9tdXhfd3EpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2OWZzOiBtdXg6IGNyZWF0aW5nIHBvbGwgdGFzayBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwOV9wb2xsX3Rhc2spOworCX0KKwogCXY5ZnNfcmVnaXN0ZXJfdHJhbnMoJnA5X3RjcF90cmFucyk7CiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfdW5peF90cmFucyk7CiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfZmRfdHJhbnMpOwpAQCAtMTYyMiw2ICsxMTE4LDcgQEAKIAogdm9pZCBwOV90cmFuc19mZF9leGl0KHZvaWQpCiB7CisJa3RocmVhZF9zdG9wKHA5X3BvbGxfdGFzayk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV90Y3BfdHJhbnMpOwogCXY5ZnNfdW5yZWdpc3Rlcl90cmFucygmcDlfdW5peF90cmFucyk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggOTQ5MTJlMC4uMmQ3NzgxZSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoZSBHdWVzdCA5cCB0cmFuc3BvcnQgZHJpdmVyCisgKiBUaGUgVmlydGlvIDlwIHRyYW5zcG9ydCBkcml2ZXIKICAqCiAgKiBUaGlzIGlzIGEgYmxvY2sgYmFzZWQgdHJhbnNwb3J0IGRyaXZlciBiYXNlZCBvbiB0aGUgbGd1ZXN0IGJsb2NrIGRyaXZlcgogICogY29kZS4KICAqCi0gKi8KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgVmFuIEhlbnNiZXJnZW4sIElCTSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFZhbiBIZW5zYmVyZ2VuLCBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiAgQmFzZWQgb24gdmlydGlvIGNvbnNvbGUgZHJpdmVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgpAQCAtNDEsNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CkBAIC01Myw1MCArNTIsNiBAQAogLyogZ2xvYmFsIHdoaWNoIHRyYWNrcyBoaWdoZXN0IGluaXRpYWxpemVkIGNoYW5uZWwgKi8KIHN0YXRpYyBpbnQgY2hhbl9pbmRleDsKIAotI2RlZmluZSBQOV9JTklUX01BWFRBRwkxNgotCi0KLS8qKgotICogZW51bSBwOV9yZXFfc3RhdHVzX3QgLSB2aXJ0aW8gcmVxdWVzdCBzdGF0dXMKLSAqIEBSRVFfU1RBVFVTX0lETEU6IHJlcXVlc3Qgc2xvdCB1bnVzZWQKLSAqIEBSRVFfU1RBVFVTX1NFTlQ6IHJlcXVlc3Qgc2VudCB0byBzZXJ2ZXIKLSAqIEBSRVFfU1RBVFVTX1JDVkQ6IHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmVyCi0gKiBAUkVRX1NUQVRVU19GTFNIOiByZXF1ZXN0IGhhcyBiZWVuIGZsdXNoZWQKLSAqCi0gKiBUaGUgQFJFUV9TVEFUVVNfSURMRSBzdGF0ZSBpcyB1c2VkIHRvIG1hcmsgYSByZXF1ZXN0IHNsb3QgYXMgdW51c2VkCi0gKiBidXQgdXNlIGlzIGFjdHVhbGx5IHRyYWNrZWQgYnkgdGhlIGlkcG9vbCBzdHJ1Y3R1cmUgd2hpY2ggaGFuZGxlcyB0YWcKLSAqIGlkIGFsbG9jYXRpb24uCi0gKgotICovCi0KLWVudW0gcDlfcmVxX3N0YXR1c190IHsKLQlSRVFfU1RBVFVTX0lETEUsCi0JUkVRX1NUQVRVU19TRU5ULAotCVJFUV9TVEFUVVNfUkNWRCwKLQlSRVFfU1RBVFVTX0ZMU0gsCi19OwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXFfdCAtIHZpcnRpbyByZXF1ZXN0IHNsb3RzCi0gKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0IHNsb3QKLSAqIEB3cTogd2FpdF9xdWV1ZSBmb3IgdGhlIGNsaWVudCB0byBibG9jayBvbiBmb3IgdGhpcyByZXF1ZXN0Ci0gKgotICogVGhlIHZpcnRpbyB0cmFuc3BvcnQgdXNlcyBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cwotICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKLSAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKLSAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKLSAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCi0gKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcwotICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQotICogb3RoZXIgcmVzb3VyY2VzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIHNjaGVtZSBhcyB3ZWxsLgotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxX3QgewotCWludCBzdGF0dXM7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgdmlydGlvX2NoYW4gLSBwZXItaW5zdGFuY2UgdHJhbnNwb3J0IGluZm9ybWF0aW9uCiAgKiBAaW5pdGlhbGl6ZWQ6IHdoZXRoZXIgdGhlIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZWQKQEAgLTEyMSw2NyArNzYsMTQgQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAorCXN0cnVjdCBwOV9jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKIAotCXN0cnVjdCBwOV9pZHBvb2wgKnRhZ3Bvb2w7Ci0Jc3RydWN0IHA5X3JlcV90ICpyZXFzOwotCWludCBtYXhfdGFnOwotCiAJLyogU2NhdHRlcmxpc3Q6IGNhbiBiZSB0b28gYmlnIGZvciBzdGFjay4gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVFFVRVVFX05VTV07CiB9IGNoYW5uZWxzW01BWF85UF9DSEFOXTsKIAotLyoqCi0gKiBwOV9sb29rdXBfdGFnIC0gTG9va3VwIHJlcXVlc3RzIGJ5IHRhZwotICogQGM6IHZpcnRpbyBjaGFubmVsIHRvIGxvb2t1cCB0YWcgd2l0aGluCi0gKiBAdGFnOiBudW1lcmljIGlkIGZvciB0cmFuc2FjdGlvbgotICoKLSAqIHRoaXMgaXMgYSBzaW1wbGUgYXJyYXkgbG9va3VwLCBidXQgd2lsbCBncm93IHRoZQotICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21vZGF0ZSB0cmFuc2FjdGlvbgotICogaWRzIHdoaWNoIGRpZCBub3QgcHJldmlvdXNseSBoYXZlIGEgc2xvdC4KLSAqCi0gKiBCdWdzOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gdXBwZXIgbGltaXQgb24gcmVxdWVzdCBzbG90cyBzZXQKLSAqIGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZCBieSB0aGUgaWQgYWNjb3VudGluZy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV9sb29rdXBfdGFnKHN0cnVjdCB2aXJ0aW9fY2hhbiAqYywgdTE2IHRhZykKLXsKLQkvKiBUaGlzIGxvb2tzIHVwIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGJ5IHRhZyBzbyB3ZSBrbm93IHdoaWNoCi0JICogYnVmZmVyIHRvIHJlYWQgdGhlIGRhdGEgaW50byAqLwotCXRhZysrOwotCi0Jd2hpbGUgKHRhZyA+PSBjLT5tYXhfdGFnKSB7Ci0JCWludCBvbGRfbWF4ID0gYy0+bWF4X3RhZzsKLQkJaW50IGNvdW50OwotCi0JCWlmIChjLT5tYXhfdGFnKQotCQkJYy0+bWF4X3RhZyAqPSAyOwotCQllbHNlCi0JCQljLT5tYXhfdGFnID0gUDlfSU5JVF9NQVhUQUc7Ci0KLQkJYy0+cmVxcyA9IGtyZWFsbG9jKGMtPnJlcXMsIHNpemVvZihzdHJ1Y3QgcDlfcmVxX3QpKmMtPm1heF90YWcsCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQlpZiAoIWMtPnJlcXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJZm9yIChjb3VudCA9IG9sZF9tYXg7IGNvdW50IDwgYy0+bWF4X3RhZzsgY291bnQrKykgewotCQkJYy0+cmVxc1tjb3VudF0uc3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCQkJYy0+cmVxc1tjb3VudF0ud3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQkJaWYgKCFjLT5yZXFzW2NvdW50XS53cSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJCUJVRygpOwotCQkJfQotCQkJaW5pdF93YWl0cXVldWVfaGVhZChjLT5yZXFzW2NvdW50XS53cSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gJmMtPnJlcXNbdGFnXTsKLX0KLQotCiAvKiBIb3cgbWFueSBieXRlcyBsZWZ0IGluIHRoaXMgcGFnZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVzdF9vZl9wYWdlKHZvaWQgKmRhdGEpCiB7CkBAIC0xOTcsMjUgKzk5LDEzIEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHA5X3ZpcnRpb19jbG9zZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQorc3RhdGljIHZvaWQgcDlfdmlydGlvX2Nsb3NlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0cmFucy0+cHJpdjsKLQlpbnQgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7Ci0JcDlfaWRwb29sX2Rlc3Ryb3koY2hhbi0+dGFncG9vbCk7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgY2hhbi0+bWF4X3RhZzsgY291bnQrKykKLQkJa2ZyZWUoY2hhbi0+cmVxc1tjb3VudF0ud3EpOwotCWtmcmVlKGNoYW4tPnJlcXMpOwotCWNoYW4tPm1heF90YWcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSBjbGllbnQtPnRyYW5zOwogCiAJbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOwogCWNoYW4tPmludXNlID0gZmFsc2U7CiAJbXV0ZXhfdW5sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7Ci0KLQlrZnJlZSh0cmFucyk7CiB9CiAKIC8qKgpAQCAtMjM2LDE3ICsxMjYsMTYgQEAKIAlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB2cS0+dmRldi0+cHJpdjsKIAlzdHJ1Y3QgcDlfZmNhbGwgKnJjOwogCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmVxdWVzdCBkb25lXG4iKTsKKwogCXdoaWxlICgocmMgPSBjaGFuLT52cS0+dnFfb3BzLT5nZXRfYnVmKGNoYW4tPnZxLCAmbGVuKSkgIT0gTlVMTCkgewotCQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIHJjLT50YWcpOwotCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKLQkJd2FrZV91cChyZXEtPndxKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmMgJXBcbiIsIHJjKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogbG9va3VwIHRhZyAlZFxuIiwgcmMtPnRhZyk7CisJCXJlcSA9IHA5X3RhZ19sb29rdXAoY2hhbi0+Y2xpZW50LCByYy0+dGFnKTsKKwkJcDlfY2xpZW50X2NiKGNoYW4tPmNsaWVudCwgcmVxKTsKIAl9Ci0JLyogSW4gY2FzZSBxdWV1ZSBpcyBzdG9wcGVkIHdhaXRpbmcgZm9yIG1vcmUgYnVmZmVycy4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjgzLDggKzE3MiwxNCBAQAogCXJldHVybiBpbmRleC1zdGFydDsKIH0KIAorLyogV2UgZG9uJ3QgY3VycmVudGx5IGFsbG93IGNhbmNlbGluZyBvZiB2aXJ0aW8gcmVxdWVzdHMgKi8KK3N0YXRpYyBpbnQgcDlfdmlydGlvX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCXJldHVybiAxOworfQorCiAvKioKLSAqIHA5X3ZpcnRpb19ycGMgLSBpc3N1ZSBhIHJlcXVlc3QgYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UKKyAqIHA5X3ZpcnRpb19yZXF1ZXN0IC0gaXNzdWUgYSByZXF1ZXN0CiAgKiBAdDogdHJhbnNwb3J0IHN0YXRlCiAgKiBAdGM6ICZwOV9mY2FsbCByZXF1ZXN0IHRvIHRyYW5zbWl0CiAgKiBAcmM6ICZwOV9mY2FsbCB0byBwdXQgcmVwb25zZSBpbnRvCkBAIC0yOTIsNDQgKzE4NywyMiBAQAogICovCiAKIHN0YXRpYyBpbnQKLXA5X3ZpcnRpb19ycGMoc3RydWN0IHA5X3RyYW5zICp0LCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLCBzdHJ1Y3QgcDlfZmNhbGwgKipyYykKK3A5X3ZpcnRpb19yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7CiAJaW50IGluLCBvdXQ7Ci0JaW50IG4sIGVyciwgc2l6ZTsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0LT5wcml2OwotCWNoYXIgKnJkYXRhOwotCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gY2xpZW50LT50cmFuczsKKwljaGFyICpyZGF0YSA9IChjaGFyICopcmVxLT5yYytzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKIAotCWlmICgqcmMgPT0gTlVMTCkgewotCQkqcmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgdC0+bXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoISpyYykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXAgZGVidWc6IHZpcnRpbyByZXF1ZXN0XG4iKTsKIAotCXJkYXRhID0gKGNoYXIgKikqcmMrc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7Ci0KLQluID0gUDlfTk9UQUc7Ci0JaWYgKHRjLT5pZCAhPSBQOV9UVkVSU0lPTikgewotCQluID0gcDlfaWRwb29sX2dldChjaGFuLT50YWdwb29sKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIG4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCXA5X3NldF90YWcodGMsIG4pOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIHRhZyAlZFxuIiwgbik7Ci0KLQlvdXQgPSBwYWNrX3NnX2xpc3QoY2hhbi0+c2csIDAsIFZJUlRRVUVVRV9OVU0sIHRjLT5zZGF0YSwgdGMtPnNpemUpOwotCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwgdC0+bXNpemUpOworCW91dCA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgMCwgVklSVFFVRVVFX05VTSwgcmVxLT50Yy0+c2RhdGEsCisJCQkJCQkJCXJlcS0+dGMtPnNpemUpOworCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwKKwkJCQkJCQkJY2xpZW50LT5tc2l6ZSk7CiAKIAlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAotCWlmIChjaGFuLT52cS0+dnFfb3BzLT5hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgdGMpKSB7CisJaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCByZXEtPnRjKSkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAogCQkJIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIGFkZF9idWYgcmV0dXJuZWQgZmFpbHVyZSIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMzNywzMSArMjEwLDcgQEAKIAogCWNoYW4tPnZxLT52cV9vcHMtPmtpY2soY2hhbi0+dnEpOwogCi0Jd2FpdF9ldmVudCgqcmVxLT53cSwgcmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19SQ1ZEKTsKLQotCXNpemUgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSByZGF0YSk7Ci0KLQllcnIgPSBwOV9kZXNlcmlhbGl6ZV9mY2FsbChyZGF0YSwgc2l6ZSwgKnJjLCB0LT5leHRlbmRlZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKLQkJCSI5cCBkZWJ1ZzogdmlydGlvIHJwYyBkZXNlcmlhbGl6ZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCZQOV9ERUJVR19GQ0FMTCkgPT0gUDlfREVCVUdfRkNBTEwpIHsKLQkJY2hhciBidWZbMTUwXTsKLQotCQlwOV9wcmludGZjYWxsKGJ1Ziwgc2l6ZW9mKGJ1ZiksICpyYywgdC0+ZXh0ZW5kZWQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIj4+PiAlcCAlc1xuIiwgdCwgYnVmKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChuICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayhuLCBjaGFuLT50YWdwb29sKSkKLQkJcDlfaWRwb29sX3B1dChuLCBjaGFuLT50YWdwb29sKTsKLQotCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcmVxdWVzdCBraWNrZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsMTAgKzI3MSw5IEBACiAKIC8qKgogICogcDlfdmlydGlvX2NyZWF0ZSAtIGFsbG9jYXRlIGEgbmV3IHZpcnRpbyBjaGFubmVsCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UgaW52b2tpbmcgdGhpcyB0cmFuc3BvcnQKICAqIEBkZXZuYW1lOiBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0byAodW51c2VkKQogICogQGFyZ3M6IGFyZ3MgcGFzc2VkIGZyb20gc3lzX21vdW50KCkgZm9yIHBlci10cmFuc3BvcnQgb3B0aW9ucyAodW51c2VkKQotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBwYWNrZXQgc2l6ZQotICogQGV4dGVuZGVkOiA5cDIwMDAudSBlbmFibGVkIGZsYWcKICAqCiAgKiBUaGlzIHNldHMgdXAgYSB0cmFuc3BvcnQgY2hhbm5lbCBmb3IgOXAgY29tbXVuaWNhdGlvbi4gIFJpZ2h0IG5vdwogICogd2Ugb25seSBtYXRjaCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNoYW5uZWwsIGJ1dCBldmVudHVhbGx5IHdlIGNvdWxkbG9vayB1cApAQCAtNDQxLDExICsyODksOSBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3ZpcnRpb19jcmVhdGUoY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncywgaW50IG1zaXplLAotCQkJCQkJCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQpCitzdGF0aWMgaW50CitwOV92aXJ0aW9fY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncykKIHsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNoYW5uZWxzOwogCWludCBpbmRleCA9IDA7CiAKQEAgLTQ2MywzMCArMzA5LDEzIEBACiAKIAlpZiAoaW5kZXggPj0gTUFYXzlQX0NIQU4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICI5cDogbm8gY2hhbm5lbHMgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNoYW4tPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihjaGFuLT50YWdwb29sKSkgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0YWdwb29sXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXA5X2lkcG9vbF9nZXQoY2hhbi0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KLQljaGFuLT5tYXhfdGFnID0gMDsKLQljaGFuLT5yZXFzID0gTlVMTDsKKwljbGllbnQtPnRyYW5zID0gKHZvaWQgKiljaGFuOworCWNoYW4tPmNsaWVudCA9IGNsaWVudDsKIAotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0cmFuc3BvcnRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JdHJhbnMtPmV4dGVuZGVkID0gZXh0ZW5kZWQ7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmNsb3NlID0gcDlfdmlydGlvX2Nsb3NlOwotCXRyYW5zLT5ycGMgPSBwOV92aXJ0aW9fcnBjOwotCXRyYW5zLT5wcml2ID0gY2hhbjsKLQotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01MjYsNiArMzU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3ZpcnRpb190cmFucyA9IHsKIAkubmFtZSA9ICJ2aXJ0aW8iLAogCS5jcmVhdGUgPSBwOV92aXJ0aW9fY3JlYXRlLAorCS5jbG9zZSA9IHA5X3ZpcnRpb19jbG9zZSwKKwkucmVxdWVzdCA9IHA5X3ZpcnRpb19yZXF1ZXN0LAorCS5jYW5jZWwgPSBwOV92aXJ0aW9fY2FuY2VsLAogCS5tYXhzaXplID0gUEFHRV9TSVpFKjE2LAogCS5kZWYgPSAwLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0LzlwL3V0aWwuYyBiL25ldC85cC91dGlsLmMKaW5kZXggOTU4ZmM1OC4uZGM0ZWMwNSAxMDA2NDQKLS0tIGEvbmV0LzlwL3V0aWwuYworKysgYi9uZXQvOXAvdXRpbC5jCkBAIC0xMDUsNiArMTA1LDcgQEAKIAllbHNlIGlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgaWQgJWQgcG9vbCAlcFxuIiwgaSwgcCk7CiAJcmV0dXJuIGk7CiB9CiBFWFBPUlRfU1lNQk9MKHA5X2lkcG9vbF9nZXQpOwpAQCAtMTIxLDYgKzEyMiw5IEBACiB2b2lkIHA5X2lkcG9vbF9wdXQoaW50IGlkLCBzdHJ1Y3QgcDlfaWRwb29sICpwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIiBpZCAlZCBwb29sICVwXG4iLCBpZCwgcCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwogCWlkcl9yZW1vdmUoJnAtPnBvb2wsIGlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCBmNjM0OGUwLi44Zjk0MzFhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTM3LDEwICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKQEAgLTE0NSwxMSArMTQyLDggQEAKIAlpZiAocHJvdG8gPCAwIHx8IHByb3RvID49IEJUX01BWF9QUk9UTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19LTU9EKQotCWlmICghYnRfcHJvdG9bcHJvdG9dKSB7CisJaWYgKCFidF9wcm90b1twcm90b10pCiAJCXJlcXVlc3RfbW9kdWxlKCJidC1wcm90by0lZCIsIHByb3RvKTsKLQl9Ci0jZW5kaWYKIAogCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGE0YWJlZDUuLmZhNWNkYTQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCSpkID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW47Ci0JTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAorCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAogCQkoc3RydWN0IG5ldF9kZXZpY2UgKilvdXQsIGJyX25mX2ZvcndhcmRfZmluaXNoKTsKIAogCXJldHVybiBORl9TVE9MRU47CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzNjZkM2U5Li5iYTZmNzNlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIG1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTCiAJdHJpc3RhdGUgIkV0aGVybmV0IEJyaWRnZSB0YWJsZXMgKGVidGFibGVzKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlJJREdFICYmIEJSSURHRV9ORVRGSUxURVIKIAlzZWxlY3QgTkVURklMVEVSX1hUQUJMRVMKIAloZWxwCiAJICBlYnRhYmxlcyBpcyBhIGdlbmVyYWwsIGV4dGVuc2libGUgZnJhbWUvcGFja2V0IGlkZW50aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA1YmI4OGViLi4wZmEyMDhlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTMwNSwyMyArMzA1LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0tNT0QKLSNkZWZpbmUgZmluZF9pbmxpc3RfbG9jayhoLG4scCxlLG0pIGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKChoKSwobiksKGUpLChtKSkKLSNlbHNlCiBzdGF0aWMgdm9pZCAqCiBmaW5kX2lubGlzdF9sb2NrKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7Ci0Jdm9pZCAqcmV0OwotCi0JcmV0ID0gZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KTsKLQlpZiAoIXJldCkgewotCQlyZXF1ZXN0X21vZHVsZSgiJXMlcyIsIHByZWZpeCwgbmFtZSk7Ci0JCXJldCA9IGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KSwKKwkJCSIlcyVzIiwgcHJlZml4LCBuYW1lKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfdGFibGUgKgogZmluZF90YWJsZV9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA4MDM1ZmJmNS4uN2Q0ZDJiMyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC0xMjgsOCArMTI4LDggQEAKIAlpZiAobmV0ICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAotCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSwgd2hlbiBDT05GSUdfS01PRCBpcyBkZWZpbmVkICovCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiB0cnkgdG8gbG9hZCBwcm90b2NvbCBtb2R1bGUga2VybmVsIGlzIG1vZHVsYXIgKi8KIAlpZiAoIXByb3RvX3RhYltwcm90b2NvbF0pIHsKIAkJZXJyID0gcmVxdWVzdF9tb2R1bGUoImNhbi1wcm90by0lZCIsIHByb3RvY29sKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCAxNDA4YTA4My4uYjhhNGZkMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTkyNCwxMCArOTI0LDEwIEBACiAJCXN0cmxjcHkoZGV2LT5uYW1lLCBuZXduYW1lLCBJRk5BTVNJWik7CiAKIHJvbGxiYWNrOgotCWVyciA9IGRldmljZV9yZW5hbWUoJmRldi0+ZGV2LCBkZXYtPm5hbWUpOwotCWlmIChlcnIpIHsKKwlyZXQgPSBkZXZpY2VfcmVuYW1lKCZkZXYtPmRldiwgZGV2LT5uYW1lKTsKKwlpZiAocmV0KSB7CiAJCW1lbWNweShkZXYtPm5hbWUsIG9sZG5hbWUsIElGTkFNU0laKTsKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAl3cml0ZV9sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKQEAgLTQ5NTYsOCArNDk1Niw2IEBACiBFWFBPUlRfU1lNQk9MKGJyX2ZkYl9wdXRfaG9vayk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LTU9ECiBFWFBPUlRfU1lNQk9MKGRldl9sb2FkKTsKLSNlbmRpZgogCiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woc29mdG5ldF9kYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBiMGRjODE4Li5mMWQwN2I1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC05Niw3ICs5Niw3IEBACiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQorCWtmcmVlKG5ldC0+Z2VuKTsKIAlrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAzNjMwMTMxLi4zMWYyOWQyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICpsaW5raW5mb1tJRkxBX0lORk9fTUFYKzFdOwogCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiByZXBsYXk6CiAjZW5kaWYKIAllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGTEFfTUFYLCBpZmxhX3BvbGljeSk7CkBAIC0xMTI5LDcgKzExMjksNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCWlmICghb3BzKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJaWYgKGtpbmRbMF0pIHsKIAkJCQlfX3J0bmxfdW5sb2NrKCk7CiAJCQkJcmVxdWVzdF9tb2R1bGUoInJ0bmwtbGluay0lcyIsIGtpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZC5jIGIvbmV0L2RjY3AvY2NpZC5jCmluZGV4IDQ4MDk3NTNkMS4uOGZlOTMxYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc3RydWN0IGNjaWQgKmNjaWQgPSBOVUxMOwogCiAJY2NpZHNfcmVhZF9sb2NrKCk7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCWlmIChjY2lkc1tpZF0gPT0gTlVMTCkgewogCQkvKiBXZSBvbmx5IHRyeSB0byBsb2FkIGlmIGluIHByb2Nlc3MgY29udGV4dCAqLwogCQljY2lkc19yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IDExMDYyNzguLmQ0Y2UxMjIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCWZsLmZsNl9mbG93bGFiZWwgPSAwOwogCWZsLm9pZiA9IGlyZXE2LT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC01NTgsNyArNTU4LDcgQEAKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZpcmVxNi0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OwotCQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9taW5pc29ja3MuYyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCmluZGV4IGIyODA0ZTJkLi5lNmJmOTllIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMzA5LDYgKzMwOSw3IEBACiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxID0gZGNjcF9yc2socmVxKTsKIAogCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKKwlpbmV0X3JzayhyZXEpLT5sb2NfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQ7CiAJaW5ldF9yc2socmVxKS0+YWNrZWQJICA9IDA7CiAJcmVxLT5yY3Zfd25kCQkgID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7CiAJZHJlcS0+ZHJlcV90aW1lc3RhbXBfZWNobyA9IDA7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IGQwNjk0NWMuLjgwOWQ4MDMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkvKiBCdWlsZCBhbmQgY2hlY2tzdW0gaGVhZGVyICovCiAJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIAotCWRoLT5kY2NwaF9zcG9ydAk9IGluZXRfc2soc2spLT5zcG9ydDsKKwlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlkaC0+ZGNjcGhfZHBvcnQJPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKIAlkaC0+ZGNjcGhfZG9mZgk9IChkY2NwX2hlYWRlcl9zaXplICsKIAkJCSAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4pIC8gNDsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IDJmMGFjM2MuLjI4ZTI2YmQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKICNkZWZpbmUgRE5fREVWX0xJU1RfU0laRSBBUlJBWV9TSVpFKGRuX2Rldl9saXN0KQogCi0jZGVmaW5lIEROX0RFVl9QQVJNU19PRkZTRVQoeCkgKChpbnQpICgoY2hhciAqKSAmKChzdHJ1Y3QgZG5fZGV2X3Bhcm1zICopMCktPngpKQorI2RlZmluZSBETl9ERVZfUEFSTVNfT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBkbl9kZXZfcGFybXMsIHgpCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfcHJvYyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAKQEAgLTMxOCw3ICszMTgsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTQ5MCw5ICs0OTAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZnItPmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQoJmluaXRfbmV0LCBpZnItPmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCQljYXNlIFNJT0NHSUZBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IDIyODA2N2MuLjM2NDAwYjIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZG5fbm9kZV9hZGRyZXNzX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBkbl9ub2RlX2FkZHJlc3Nfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yMTcsNyArMjE3LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IGIwNDNlZGEuLjFhOWRkNjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIHZvaWQgYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBTZW5kIGl0IG9mZiwgbWF5YmUgZmlsdGVyIGl0IHVzaW5nIGZpcmV3YWxsaW5nIGZpcnN0LiAgKi8KLQlORl9IT09LKE5GX0FSUCwgTkZfQVJQX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwgZGV2X3F1ZXVlX3htaXQpOworCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsIGRldl9xdWV1ZV94bWl0KTsKIH0KIAogLyoKQEAgLTkyOCw3ICs5MjgsNyBAQAogCiAJbWVtc2V0KE5FSUdIX0NCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgbmVpZ2hib3VyX2NiKSk7CiAKLQlyZXR1cm4gTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9JTiwgc2tiLCBkZXYsIE5VTEwsIGFycF9wcm9jZXNzKTsKKwlyZXR1cm4gTkZfSE9PSyhORlBST1RPX0FSUCwgTkZfQVJQX0lOLCBza2IsIGRldiwgTlVMTCwgYXJwX3Byb2Nlc3MpOwogCiBmcmVlc2tiOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IGIxMmRhZTIuLjU2ZmNlM2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTYxMyw5ICs2MTMsNyBAQAogCWlmIChjb2xvbikKIAkJKmNvbG9uID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwotI2VuZGlmCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dJRkFERFI6CS8qIEdldCBpbnRlcmZhY2UgYWRkcmVzcyAqLwpAQCAtMTI4Myw3ICsxMjgxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRldmluZXRfY29uZl9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRldmluZXRfY29uZl9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xMzc5LDEyICsxMzc3LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCiAJCQkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKLQlpbnQgcmV0ID0gZGV2aW5ldF9jb25mX3N5c2N0bCh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLAotCQkJCSAgICAgIG5ld3ZhbCwgbmV3bGVuKTsKKwlpbnQgcmV0ID0gZGV2aW5ldF9jb25mX3N5c2N0bCh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJc3RydWN0IG5ldCAqbmV0ID0gdGFibGUtPmV4dHJhMjsKIAogCWlmIChyZXQgPT0gMSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggODljYjA0Ny4uNTY0MjMwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUzLDExICs1Myw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmluZXRfZGlhZ19sb2NrX2hhbmRsZXIoaW50IHR5cGUpCiB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoIWluZXRfZGlhZ190YWJsZVt0eXBlXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm5ldC1wZi0lZC1wcm90by0lZC10eXBlLSVkIiwgUEZfTkVUTElOSywKIAkJCSAgICAgICBORVRMSU5LX0lORVRfRElBRywgdHlwZSk7Ci0jZW5kaWYKIAogCW11dGV4X2xvY2soJmluZXRfZGlhZ190YWJsZV9tdXRleCk7CiAJaWYgKCFpbmV0X2RpYWdfdGFibGVbdHlwZV0pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCmluZGV4IGFhMmM1MGEuLmZhMmQ2YjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jCkBAIC00MSwxMiArNDEsMTMgQEAKIAkJCQkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisjaWYgIWRlZmluZWQoQ09ORklHX05GX05BVCkgJiYgIWRlZmluZWQoQ09ORklHX05GX05BVF9NT0RVTEUpCiAJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayk/ICBJZ25vcmUuICBEbyB0aGlzIGJlZm9yZQogCSAgIGZyYWdtZW50IGNoZWNrLiAqLwogCWlmIChza2ItPm5mY3QpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAjZW5kaWYKLQorI2VuZGlmCiAJLyogR2F0aGVyIGZyYWdtZW50cy4gKi8KIAlpZiAoaXBfaGRyKHNrYiktPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJUF9PRkZTRVQpKSB7CiAJCWlmIChuZl9jdF9pcHY0X2dhdGhlcl9mcmFncyhza2IsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDJhYzllYWYuLmE2NWNmNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC01ODQsNiArNTg0LDk4IEBACiAJLmZsYWdzCQk9IE5GX0NUX0VYVF9GX1BSRUFMTE9DLAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwcm90b25hdF9ubGFfcG9saWN5W0NUQV9QUk9UT05BVF9NQVgrMV0gPSB7CisJW0NUQV9QUk9UT05BVF9QT1JUX01JTl0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAorCVtDVEFfUFJPVE9OQVRfUE9SVF9NQVhdCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKK307CisKK3N0YXRpYyBpbnQgbmZuZXRsaW5rX3BhcnNlX25hdF9wcm90byhzdHJ1Y3QgbmxhdHRyICphdHRyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICAgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCit7CisJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX1BST1RPTkFUX01BWCsxXTsKKwljb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpucHQ7CisJaW50IGVycjsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT05BVF9NQVgsIGF0dHIsIHByb3RvbmF0X25sYV9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbnB0ID0gbmZfbmF0X3Byb3RvX2ZpbmRfZ2V0KG5mX2N0X3Byb3RvbnVtKGN0KSk7CisJaWYgKG5wdC0+bmxhdHRyX3RvX3JhbmdlKQorCQllcnIgPSBucHQtPm5sYXR0cl90b19yYW5nZSh0YiwgcmFuZ2UpOworCW5mX25hdF9wcm90b19wdXQobnB0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmF0X25sYV9wb2xpY3lbQ1RBX05BVF9NQVgrMV0gPSB7CisJW0NUQV9OQVRfTUlOSVBdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9OQVRfTUFYSVBdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCitzdGF0aWMgaW50CituZm5ldGxpbmtfcGFyc2VfbmF0KHN0cnVjdCBubGF0dHIgKm5hdCwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCit7CisJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX05BVF9NQVgrMV07CisJaW50IGVycjsKKworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOworCisJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX05BVF9NQVgsIG5hdCwgbmF0X25sYV9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHRiW0NUQV9OQVRfTUlOSVBdKQorCQlyYW5nZS0+bWluX2lwID0gbmxhX2dldF9iZTMyKHRiW0NUQV9OQVRfTUlOSVBdKTsKKworCWlmICghdGJbQ1RBX05BVF9NQVhJUF0pCisJCXJhbmdlLT5tYXhfaXAgPSByYW5nZS0+bWluX2lwOworCWVsc2UKKwkJcmFuZ2UtPm1heF9pcCA9IG5sYV9nZXRfYmUzMih0YltDVEFfTkFUX01BWElQXSk7CisKKwlpZiAocmFuZ2UtPm1pbl9pcCkKKwkJcmFuZ2UtPmZsYWdzIHw9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCisJaWYgKCF0YltDVEFfTkFUX1BST1RPXSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBuZm5ldGxpbmtfcGFyc2VfbmF0X3Byb3RvKHRiW0NUQV9OQVRfUFJPVE9dLCBjdCwgcmFuZ2UpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAorCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7CisKKwlpZiAobmZuZXRsaW5rX3BhcnNlX25hdChhdHRyLCBjdCwgJnJhbmdlKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIG1hbmlwKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgbWFuaXApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQKK25mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAorCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbmF0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXQtPmlwdjQubmF0X2J5c291cmNlID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9uYXRfaHRhYmxlX3NpemUsCkBAIC02NTQsNiArNzQ2LDkgQEAKIAogCUJVR19PTihuZl9uYXRfc2VxX2FkanVzdF9ob29rICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2VxX2FkanVzdF9ob29rLCBuZl9uYXRfc2VxX2FkanVzdCk7CisJQlVHX09OKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayAhPSBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rLAorCQkJICAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cCk7CiAJcmV0dXJuIDA7CiAKICBjbGVhbnVwX2V4dGVuZDoKQEAgLTY2NywxMCArNzYyLDEyIEBACiAJbmZfY3RfbDNwcm90b19wdXQobDNwcm90byk7CiAJbmZfY3RfZXh0ZW5kX3VucmVnaXN0ZXIoJm5hdF9leHRlbmQpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2VxX2FkanVzdF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rLCBOVUxMKTsKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJuZi1uYXQtaXB2NCIpOwogCiBtb2R1bGVfaW5pdChuZl9uYXRfaW5pdCk7CiBtb2R1bGVfZXhpdChuZl9uYXRfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCmluZGV4IGZmZWFmZmMuLjgzMDNlNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCkBAIC03NDIsNiArNzQyLDcgQEAKIAkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLAogCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKIAkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShwKTsKIAkJCQlrZnJlZShpZCk7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggYTZkN2M1OC4uMmVhNmRjYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMTA5LDcgKzExMDksMTIgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgotCXJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4gPSBydDsKKwkvKgorCSAqIFNpbmNlIGxvb2t1cCBpcyBsb2NrZnJlZSwgd2UgbXVzdCBtYWtlIHN1cmUKKwkgKiBwcmV2aW91cyB3cml0ZXMgdG8gcnQgYXJlIGNvbWl0dGVkIHRvIG1lbW9yeQorCSAqIGJlZm9yZSBtYWtpbmcgcnQgdmlzaWJsZSB0byBvdGhlciBDUFVTLgorCSAqLworCXJjdV9hc3NpZ25fcG9pbnRlcihydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluLCBydCk7CiAJc3Bpbl91bmxvY2tfYmgocnRfaGFzaF9sb2NrX2FkZHIoaGFzaCkpOwogCSpycCA9IHJ0OwogCXJldHVybiAwOwpAQCAtMjkwOCw4ICsyOTEzLDYgQEAKIH0KIAogc3RhdGljIGludCBpcHY0X3N5c2N0bF9ydGNhY2hlX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCi0JCQkJCQlpbnQgX191c2VyICpuYW1lLAotCQkJCQkJaW50IG5sZW4sCiAJCQkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkJc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJCXZvaWQgX191c2VyICpuZXd2YWwsCkBAIC0yOTcyLDE2ICsyOTc1LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgaXB2NF9zeXNjdGxfcnRfc2VjcmV0X2ludGVydmFsX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCi0JCQkJCQkgICBpbnQgX191c2VyICpuYW1lLAotCQkJCQkJICAgaW50IG5sZW4sCiAJCQkJCQkgICB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkJICAgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJCSAgIHZvaWQgX191c2VyICpuZXd2YWwsCiAJCQkJCQkgICBzaXplX3QgbmV3bGVuKQogewogCWludCBvbGQgPSBpcF9ydF9zZWNyZXRfaW50ZXJ2YWw7Ci0JaW50IHJldCA9IHN5c2N0bF9qaWZmaWVzKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwKLQkJCQkgbmV3bGVuKTsKKwlpbnQgcmV0ID0gc3lzY3RsX2ppZmZpZXModGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCiAJcnRfc2VjcmV0X3Jlc2NoZWR1bGUob2xkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAyNzZkMDQ3Li4xYmIxMGRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNjQsOCArNjQsOCBAQAogfQogCiAvKiBWYWxpZGF0ZSBjaGFuZ2VzIGZyb20gc3lzY3RsIGludGVyZmFjZS4gKi8KLXN0YXRpYyBpbnQgaXB2NF9zeXNjdGxfbG9jYWxfcG9ydF9yYW5nZShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAotCQkJCQkgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCitzdGF0aWMgaW50IGlwdjRfc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2UoY3RsX3RhYmxlICp0YWJsZSwKKwkJCQkJIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCSBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtODAsNyArODAsNyBAQAogCX07CiAKIAlpbmV0X2dldF9sb2NhbF9wb3J0X3JhbmdlKHJhbmdlLCByYW5nZSArIDEpOwotCXJldCA9IHN5c2N0bF9pbnR2ZWMoJnRtcCwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJcmV0ID0gc3lzY3RsX2ludHZlYygmdG1wLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAocmV0ID09IDAgJiYgbmV3dmFsICYmIG5ld2xlbikgewogCQlpZiAocmFuZ2VbMV0gPCByYW5nZVswXSkKIAkJCXJldCA9IC1FSU5WQUw7CkBAIC0xMDksOCArMTA5LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHN5c2N0bF90Y3BfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJCSBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKK3N0YXRpYyBpbnQgc3lzY3RsX3RjcF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICp0YWJsZSwKKwkJCQkJIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCSBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCWludCByZXQ7CiAKIAl0Y3BfZ2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKHZhbCk7Ci0JcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyZXQgPT0gMSAmJiBuZXd2YWwgJiYgbmV3bGVuKQogCQlyZXQgPSB0Y3Bfc2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKHZhbCk7CiAJcmV0dXJuIHJldDsKQEAgLTE2NSw4ICsxNjUsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3RyYXRlZ3lfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkJICAgICAgIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLAorc3RhdGljIGludCBzdHJhdGVneV9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKnRhYmxlLAorCQkJCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJICAgICAgIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLAogCQkJCQkgICAgICAgc2l6ZV90IG5ld2xlbikKQEAgLTE3OSw3ICsxNzksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRjcF9nZXRfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbCh0YmwuZGF0YSwgdGJsLm1heGxlbik7Ci0JcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyZXQgPT0gMSAmJiBuZXd2YWwgJiYgbmV3bGVuKQogCQlyZXQgPSB0Y3Bfc2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKHRibC5kYXRhKTsKIAlrZnJlZSh0YmwuZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA2YTI1MDgyLi40ZWM1YjRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJc3Bpbl9sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCWNhID0gdGNwX2NhX2ZpbmQobmFtZSk7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCWlmICghY2EgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKIAkJc3Bpbl91bmxvY2soJnRjcF9jb25nX2xpc3RfbG9jayk7CiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogCWlmIChjYSA9PSBpY3NrLT5pY3NrX2NhX29wcykKIAkJZ290byBvdXQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJLyogbm90IGZvdW5kIGF0dGVtcHQgdG8gYXV0b2xvYWQgbW9kdWxlICovCiAJaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDdiNmE1ODQuLmVlYTk1NDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMzk4Miw3ICszOTgyLDYgQEAKIH0KIAogc3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfZm9yd2FyZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAotCQkJCQkgICAgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQkJCSAgICB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkgICAgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCA4NDBiMTU3Li4xNzI0MzgzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTExOTksNyArMTE5OSw3IEBACiAJCX0KIAkJbmVpZ2gtPmZsYWdzIHw9IE5URl9ST1VURVI7CiAJfSBlbHNlIGlmIChydCkgewotCQlydC0+cnQ2aV9mbGFncyB8PSAocnQtPnJ0NmlfZmxhZ3MgJiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTsKKwkJcnQtPnJ0NmlfZmxhZ3MgPSAocnQtPnJ0NmlfZmxhZ3MgJiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTsKIAl9CiAKIAlpZiAocnQpCkBAIC0xNzMwLDkgKzE3MzAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBuZGlzY19pZmluZm9fc3lzY3RsX3N0cmF0ZWd5KGN0bF90YWJsZSAqY3RsLCBpbnQgX191c2VyICpuYW1lLAotCQkJCSBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKLQkJCQkgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKK2ludCBuZGlzY19pZmluZm9fc3lzY3RsX3N0cmF0ZWd5KGN0bF90YWJsZSAqY3RsLAorCQkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdGwtPmV4dHJhMTsKQEAgLTE3NDUsMTMgKzE3NDQsMTEgQEAKIAogCXN3aXRjaCAoY3RsLT5jdGxfbmFtZSkgewogCWNhc2UgTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FOgotCQlyZXQgPSBzeXNjdGxfamlmZmllcyhjdGwsIG5hbWUsIG5sZW4sCi0JCQkJICAgICBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwkJcmV0ID0gc3lzY3RsX2ppZmZpZXMoY3RsLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRfTkVJR0hfUkVUUkFOU19USU1FX01TOgogCWNhc2UgTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FX01TOgotCQkgcmV0ID0gc3lzY3RsX21zX2ppZmZpZXMoY3RsLCBuYW1lLCBubGVuLAotCQkJCQkgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJCSByZXQgPSBzeXNjdGxfbXNfamlmZmllcyhjdGwsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCQkgYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKaW5kZXggNmIyOWIwMy4uZmQ1YjNhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKIAogaW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpOwogCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CkBAIC0yMyw3ICsyNCw3IEBACiAJCSAgICAuc2FkZHIgPSBpcGgtPnNhZGRyLCB9IH0sCiAJfTsKIAotCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChza2ItPmRzdC0+ZGV2KSwgc2tiLT5zaywgJmZsKTsKKwlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2tiLT5zaywgJmZsKTsKIAogI2lmZGVmIENPTkZJR19YRlJNCiAJaWYgKCEoSVA2Q0Ioc2tiKS0+ZmxhZ3MgJiBJUDZTS0JfWEZSTV9UUkFOU0ZPUk1FRCkgJiYKQEAgLTMzLDggKzM0LDcgQEAKICNlbmRpZgogCiAJaWYgKGRzdC0+ZXJyb3IpIHsKLQkJSVA2X0lOQ19TVEFUUygmaW5pdF9uZXQsIGlwNl9kc3RfaWRldihkc3QpLAotCQkJICAgICAgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiaXA2X3JvdXRlX21lX2hhcmRlcjogTm8gbW9yZSByb3V0ZS5cbiIpOwogCQlkc3RfcmVsZWFzZShkc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwppbmRleCBlYzM5NGNmLi42NzZjODBiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAogCXJlcS0+bXNzID0gbXNzOwogCWlyZXEtPnJtdF9wb3J0ID0gdGgtPnNvdXJjZTsKKwlpcmVxLT5sb2NfcG9ydCA9IHRoLT5kZXN0OwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+cm10X2FkZHIsICZpcHY2X2hkcihza2IpLT5zYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJmlyZXE2LT5sb2NfYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyKTsKIAlpZiAoaXB2Nl9vcHRfYWNjZXB0ZWQoc2ssIHNrYikgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGU1MzEwYzliLi5iNmIzNTZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCWZsLmZsNl9mbG93bGFiZWwgPSAwOwogCWZsLm9pZiA9IHRyZXEtPmlpZjsKIAlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OwotCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9zayhzayktPnNwb3J0OworCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwogCiAJb3B0ID0gbnAtPm9wdDsKQEAgLTEzMDksNyArMTMwOSw3IEBACiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmdHJlcS0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OwotCQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAkJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwogCiAJCWlmIChpcDZfZHN0X2xvb2t1cChzaywgJmRzdCwgJmZsKSkKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAJCSAgIGksCiAJCSAgIHNyYy0+czZfYWRkcjMyWzBdLCBzcmMtPnM2X2FkZHIzMlsxXSwKIAkJICAgc3JjLT5zNl9hZGRyMzJbMl0sIHNyYy0+czZfYWRkcjMyWzNdLAotCQkgICBudG9ocyhpbmV0X3NrKHNrKS0+c3BvcnQpLAorCQkgICBudG9ocyhpbmV0X3JzayhyZXEpLT5sb2NfcG9ydCksCiAJCSAgIGRlc3QtPnM2X2FkZHIzMlswXSwgZGVzdC0+czZfYWRkcjMyWzFdLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMl0sIGRlc3QtPnM2X2FkZHIzMlszXSwKIAkJICAgbnRvaHMoaW5ldF9yc2socmVxKS0+cm10X3BvcnQpLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCAyYTQ1MTU2Li4yYWQ1MDRmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtNTQ1LDggKzU0NSwxMiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0Jc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBkZXYtPm5hbWUpOwogCWRpciA9IHNkYXRhLT5kZWJ1Z2ZzZGlyOworCisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCisJc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBkZXYtPm5hbWUpOwogCWlmICghZGVidWdmc19yZW5hbWUoZGlyLT5kX3BhcmVudCwgZGlyLCBkaXItPmRfcGFyZW50LCBidWYpKQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExOiBkZWJ1Z2ZzOiBmYWlsZWQgdG8gcmVuYW1lIGRlYnVnZnMgIgogCQkgICAgICAgImRpciB0byAlc1xuIiwgYnVmKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggYjk5MDJlNC4uMTg5ZDBiYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTI0OSwxMSArMjQ5LDIyIEBACiAJREVDTEFSRV9NQUNfQlVGKG1idWYpOwogCXU4ICptYWM7CiAKKwlzdGEtPmRlYnVnZnMuYWRkX2hhc19ydW4gPSB0cnVlOworCiAJaWYgKCFzdGF0aW9uc19kaXIpCiAJCXJldHVybjsKIAogCW1hYyA9IHByaW50X21hYyhtYnVmLCBzdGEtPnN0YS5hZGRyKTsKIAorCS8qCisJICogVGhpcyBtaWdodCBmYWlsIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uOgorCSAqIFdoZW4gbWFjODAyMTEgdW5saW5rcyBhIHN0YXRpb24sIHRoZSBkZWJ1Z2ZzIGVudHJpZXMKKwkgKiByZW1haW4sIGJ1dCBpdCBpcyBhbHJlYWR5IHBvc3NpYmxlIHRvIGxpbmsgYSBuZXcKKwkgKiBzdGF0aW9uIHdpdGggdGhlIHNhbWUgYWRkcmVzcyB3aGljaCB0cmlnZ2VycyBhZGRpbmcKKwkgKiBpdCB0byBkZWJ1Z2ZzOyB0aGVyZWZvcmUsIGlmIHRoZSBvbGQgc3RhdGlvbiBpc24ndAorCSAqIGRlc3Ryb3llZCBxdWlja2x5IGVub3VnaCB0aGUgb2xkIHN0YXRpb24ncyBkZWJ1Z2ZzCisJICogZGlyIG1pZ2h0IHN0aWxsIGJlIGFyb3VuZC4KKwkgKi8KIAlzdGEtPmRlYnVnZnMuZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG1hYywgc3RhdGlvbnNfZGlyKTsKIAlpZiAoIXN0YS0+ZGVidWdmcy5kaXIpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggODAyNWIyOS4uMTU2ZTQyYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTgxNiw4ICs4MTYsOCBAQAogCXU4ICpleHRfc3VwcF9yYXRlczsKIAl1OCAqd21tX2luZm87CiAJdTggKndtbV9wYXJhbTsKLQl1OCAqaHRfY2FwX2VsZW07Ci0JdTggKmh0X2luZm9fZWxlbTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwX2VsZW07CisJc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKmh0X2luZm9fZWxlbTsKIAl1OCAqbWVzaF9jb25maWc7CiAJdTggKm1lc2hfaWQ7CiAJdTggKnBlZXJfbGluazsKQEAgLTg0NCw4ICs4NDQsNiBAQAogCXU4IGV4dF9zdXBwX3JhdGVzX2xlbjsKIAl1OCB3bW1faW5mb19sZW47CiAJdTggd21tX3BhcmFtX2xlbjsKLQl1OCBodF9jYXBfZWxlbV9sZW47Ci0JdTggaHRfaW5mb19lbGVtX2xlbjsKIAl1OCBtZXNoX2NvbmZpZ19sZW47CiAJdTggbWVzaF9pZF9sZW47CiAJdTggcGVlcl9saW5rX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDQ5Zjg2ZmEuLjg3NjY1ZDdiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTEzNDgsMTAgKzEzNDgsOCBAQAogCSAgICAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyBic3NfaW5mbzsKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19odF9pbmZvKAotCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKQogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfaW5mbyk7CiAJCWllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICopCiAJCQkJZWxlbXMuaHRfaW5mb19lbGVtLCAmYnNzX2luZm8pOwogCQlpZWVlODAyMTFfaGFuZGxlX2h0KGxvY2FsLCAxLCAmc3RhLT5zdGEuaHRfaW5mbywgJmJzc19pbmZvKTsKIAl9CkBAIC0xNzA5LDcgKzE3MDcsNiBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOwogCiAJCWllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICopCiAJCQkJZWxlbXMuaHRfaW5mb19lbGVtLCAmYnNzX2luZm8pOwogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfaHQobG9jYWwsIDEsICZjb25mLT5odF9jb25mLAogCQkJCQkgICAgICAgJmJzc19pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IDhlNjY4NWUuLjQxNmJiNDEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtMzg4LDcgKzM4OCw4IEBACiAJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzZGF0YS0+bG9jYWwsIHJ4X3N0YXR1cywKIAkJCQkJbWdtdCwgc2tiLT5sZW4sICZlbGVtcywKIAkJCQkJZnJlcSwgYmVhY29uKTsKLQlpZWVlODAyMTFfcnhfYnNzX3B1dChzZGF0YS0+bG9jYWwsIGJzcyk7CisJaWYgKGJzcykKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiBSWF9RVUVVRUQ7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IDliNzJkMTUuLjdmZWY4ZWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC02MzUsNyArNjM1LDEyIEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQkJaWYgKCF0bXAtPmRlYnVnZnMuZGlyKSB7CisJCQkvKgorCQkJICogZGVidWdmcy5hZGRfaGFzX3J1biB3aWxsIGJlIHNldCBieQorCQkJICogaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX2FkZCByZWdhcmRsZXNzCisJCQkgKiBvZiB3aGF0IGVsc2UgaXQgZG9lcy4KKwkJCSAqLworCQkJaWYgKCF0bXAtPmRlYnVnZnMuYWRkX2hhc19ydW4pIHsKIAkJCQlzdGEgPSB0bXA7CiAJCQkJX19zdGFfaW5mb19waW4oc3RhKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggYTZiNTE4Ni4uMTY4YTM5YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTMwMCw2ICszMDAsNyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICppbmFjdGl2ZV9tczsKIAkJc3RydWN0IGRlbnRyeSAqbGFzdF9zZXFfY3RybDsKIAkJc3RydWN0IGRlbnRyeSAqYWdnX3N0YXR1czsKKwkJYm9vbCBhZGRfaGFzX3J1bjsKIAl9IGRlYnVnZnM7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZjMyNTYxZS4uY2VlNDg4NCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC01MjksMTIgKzUyOSwxMiBAQAogCQkJZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbiA9IGVsZW47CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgotCQkJZWxlbXMtPmh0X2NhcF9lbGVtID0gcG9zOwotCQkJZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiA9IGVsZW47CisJCQlpZiAoZWxlbiA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKQorCQkJCWVsZW1zLT5odF9jYXBfZWxlbSA9ICh2b2lkICopcG9zOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfRVhUUkFfSU5GTzoKLQkJCWVsZW1zLT5odF9pbmZvX2VsZW0gPSBwb3M7Ci0JCQllbGVtcy0+aHRfaW5mb19lbGVtX2xlbiA9IGVsZW47CisJCQlpZiAoZWxlbiA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8pKQorCQkJCWVsZW1zLT5odF9pbmZvX2VsZW0gPSAodm9pZCAqKXBvczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX01FU0hfSUQ6CiAJCQllbGVtcy0+bWVzaF9pZCA9IHBvczsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXh0LmMgYi9uZXQvbWFjODAyMTEvd2V4dC5jCmluZGV4IDdlMGQ1M2EuLjc0MmY4MTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXh0LmMKKysrIGIvbmV0L21hYzgwMjExL3dleHQuYwpAQCAtNzc1LDcgKzc3NSw3IEBACiAJICogY29uZmlndXJlIGl0IGhlcmUgKi8KIAogCWlmIChsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQpCi0JCWxvY2FsLT5vcHMtPnNldF9mcmFnX3RocmVzaG9sZCgKKwkJcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9mcmFnX3RocmVzaG9sZCgKIAkJCWxvY2FsX3RvX2h3KGxvY2FsKSwKIAkJCWxvY2FsLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA3ODg5MmNmLi4yNWRjZWY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC0yNzEsNyArMjcxLDYgQEAKIGNvbmZpZyBORl9DVF9ORVRMSU5LCiAJdHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnCiAJc2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LCi0JZGVwZW5kcyBvbiBORl9OQVQ9biB8fCBORl9OQVQKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCmluZGV4IDA1MDQ4ZTQuLjc5YTY5ODAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCkBAIC0yNSwxMSArMjUsMTMgQEAKIGlmIElQX1ZTCiAKIGNvbmZpZwlJUF9WU19JUFY2Ci0JYm9vbCAiSVB2NiBzdXBwb3J0IGZvciBJUFZTIChEQU5HRVJPVVMpIgorCWJvb2wgIklQdjYgc3VwcG9ydCBmb3IgSVBWUyIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2KQogCS0tLWhlbHAtLS0KIAkgIEFkZCBJUHY2IHN1cHBvcnQgdG8gSVBWUy4gVGhpcyBpcyBpbmNvbXBsZXRlIGFuZCBtaWdodCBiZSBkYW5nZXJvdXMuCiAKKwkgIFNlZSBodHRwOi8vd3d3Lm1pbmRiYXNrZXQuY29tL2lwdnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX0RFQlVHCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmMKaW5kZXggMDM1OTFkMy4uYjkyZGY1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAKIAlpZiAobmV0X2VxKG5ldCwgJmluaXRfbmV0KSkgewogI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTkZJR19ORl9DVF9BQ0NUIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiBQbGFzZSB1c2VcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTkZJR19ORl9DVF9BQ0NUIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiBQbGVhc2UgdXNlXG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibmZfY29ubnRyYWNrLmFjY3Q9MSBrZXJuZWwgcGFyYW1hdGVyLCBhY2N0PTEgbmZfY29ubnRyYWNrIG1vZHVsZSBvcHRpb24gb3JcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNjdGwgbmV0Lm5ldGZpbHRlci5uZl9jb25udHJhY2tfYWNjdD0xIHRvIGVuYWJsZSBpdC5cbiIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMjdkZTNjNy4uNjIyZDdjNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMzgsOSArMzgsMTYgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CiAKICNkZWZpbmUgTkZfQ09OTlRSQUNLX1ZFUlNJT04JIjAuNS4wIgogCit1bnNpZ25lZCBpbnQKKygqbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKShzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAorCQkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CisKIERFRklORV9TUElOTE9DSyhuZl9jb25udHJhY2tfbG9jayk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCBjYWRmZDE1Li5hMDQwZDQ2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC02ODksNzEgKzY4OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAotc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHByb3RvbmF0X25sYV9wb2xpY3lbQ1RBX1BST1RPTkFUX01BWCsxXSA9IHsKLQlbQ1RBX1BST1RPTkFUX1BPUlRfTUlOXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCi0JW0NUQV9QUk9UT05BVF9QT1JUX01BWF0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAotfTsKLQotc3RhdGljIGludCBuZm5ldGxpbmtfcGFyc2VfbmF0X3Byb3RvKHN0cnVjdCBubGF0dHIgKmF0dHIsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJICAgICBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKLXsKLQlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfUFJPVE9OQVRfTUFYKzFdOwotCWNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKm5wdDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPTkFUX01BWCwgYXR0ciwgcHJvdG9uYXRfbmxhX3BvbGljeSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlucHQgPSBuZl9uYXRfcHJvdG9fZmluZF9nZXQobmZfY3RfcHJvdG9udW0oY3QpKTsKLQlpZiAobnB0LT5ubGF0dHJfdG9fcmFuZ2UpCi0JCWVyciA9IG5wdC0+bmxhdHRyX3RvX3JhbmdlKHRiLCByYW5nZSk7Ci0JbmZfbmF0X3Byb3RvX3B1dChucHQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuYXRfbmxhX3BvbGljeVtDVEFfTkFUX01BWCsxXSA9IHsKLQlbQ1RBX05BVF9NSU5JUF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbQ1RBX05BVF9NQVhJUF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1uZm5ldGxpbmtfcGFyc2VfbmF0KHN0cnVjdCBubGF0dHIgKm5hdCwKLQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCi17Ci0Jc3RydWN0IG5sYXR0ciAqdGJbQ1RBX05BVF9NQVgrMV07Ci0JaW50IGVycjsKLQotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwotCi0JZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX05BVF9NQVgsIG5hdCwgbmF0X25sYV9wb2xpY3kpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHRiW0NUQV9OQVRfTUlOSVBdKQotCQlyYW5nZS0+bWluX2lwID0gbmxhX2dldF9iZTMyKHRiW0NUQV9OQVRfTUlOSVBdKTsKLQotCWlmICghdGJbQ1RBX05BVF9NQVhJUF0pCi0JCXJhbmdlLT5tYXhfaXAgPSByYW5nZS0+bWluX2lwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9pcCA9IG5sYV9nZXRfYmUzMih0YltDVEFfTkFUX01BWElQXSk7Ci0KLQlpZiAocmFuZ2UtPm1pbl9pcCkKLQkJcmFuZ2UtPmZsYWdzIHw9IElQX05BVF9SQU5HRV9NQVBfSVBTOwotCi0JaWYgKCF0YltDVEFfTkFUX1BST1RPXSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBuZm5ldGxpbmtfcGFyc2VfbmF0X3Byb3RvKHRiW0NUQV9OQVRfUFJPVE9dLCBjdCwgcmFuZ2UpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSBpbnQKIGN0bmV0bGlua19wYXJzZV9oZWxwKHN0cnVjdCBubGF0dHIgKmF0dHIsIGNoYXIgKipoZWxwZXJfbmFtZSkKIHsKQEAgLTg3OCw2ICs4MTMsMzYgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKK3N0YXRpYyBpbnQKK2N0bmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAorCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXR5cGVvZihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spIHBhcnNlX25hdF9zZXR1cDsKKworCXBhcnNlX25hdF9zZXR1cCA9IHJjdV9kZXJlZmVyZW5jZShuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spOworCWlmICghcGFyc2VfbmF0X3NldHVwKSB7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCW5mbmxfdW5sb2NrKCk7CisJCWlmIChyZXF1ZXN0X21vZHVsZSgibmYtbmF0LWlwdjQiKSA8IDApIHsKKwkJCW5mbmxfbG9jaygpOworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisJCW5mbmxfbG9jaygpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWlmIChuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spCisJCQlyZXR1cm4gLUVBR0FJTjsKKyNlbmRpZgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIHBhcnNlX25hdF9zZXR1cChjdCwgbWFuaXAsIGF0dHIpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCiB7CkBAIC04OTcsMzEgKzg2Miw2IEBACiAJCS8qIEFTU1VSRUQgYml0IGNhbiBvbmx5IGJlIHNldCAqLwogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSkgewotI2lmbmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0jZWxzZQotCQlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOwotCi0JCWlmIChjZGFbQ1RBX05BVF9EU1RdKSB7Ci0JCQlpZiAobmZuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9EU1RdLCBjdCwKLQkJCQkJCSZyYW5nZSkgPCAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKG5mX25hdF9pbml0aWFsaXplZChjdCwgSVBfTkFUX01BTklQX0RTVCkpCi0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBJUF9OQVRfTUFOSVBfRFNUKTsKLQkJfQotCQlpZiAoY2RhW0NUQV9OQVRfU1JDXSkgewotCQkJaWYgKG5mbmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfU1JDXSwgY3QsCi0JCQkJCQkmcmFuZ2UpIDwgMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIElQX05BVF9NQU5JUF9TUkMpKQotCQkJCXJldHVybiAtRUVYSVNUOwotCQkJbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgSVBfTkFUX01BTklQX1NSQyk7Ci0JCX0KLSNlbmRpZgotCX0KLQogCS8qIEJlIGNhcmVmdWwgaGVyZSwgbW9kaWZ5aW5nIE5BVCBiaXRzIGNhbiBzY3JldyB1cCB0aGluZ3MsCiAJICogc28gZG9uJ3QgbGV0IHVzZXJzIG1vZGlmeSB0aGVtIGRpcmVjdGx5IGlmIHRoZXkgZG9uJ3QgcGFzcwogCSAqIG5mX25hdF9yYW5nZS4gKi8KQEAgLTkyOSw2ICs4NjksMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorY3RuZXRsaW5rX2NoYW5nZV9uYXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK3sKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCWludCByZXQ7CisKKwlpZiAoY2RhW0NUQV9OQVRfRFNUXSkgeworCQlyZXQgPSBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKGN0LAorCQkJCQkJSVBfTkFUX01BTklQX0RTVCwKKwkJCQkJCWNkYVtDVEFfTkFUX0RTVF0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChjZGFbQ1RBX05BVF9TUkNdKSB7CisJCXJldCA9IGN0bmV0bGlua19wYXJzZV9uYXRfc2V0dXAoY3QsCisJCQkJCQlJUF9OQVRfTUFOSVBfU1JDLAorCQkJCQkJY2RhW0NUQV9OQVRfU1JDXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAtRU9QTk9UU1VQUDsKKyNlbmRpZgorfQogCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKQEAgLTExNTcsNiArMTEyMiwxNCBAQAogCQl9CiAJfQogCisJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSkgeworCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdChjdCwgY2RhKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKIAlpZiAoY2RhW0NUQV9QUk9UT0lORk9dKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKGN0LCBjZGEpOwogCQlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCmluZGV4IDM3M2U1MWUuLjFiYzMwMDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pOwogCi0jaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKIC8qIFBwdHBDb250cm9sTWVzc2FnZVR5cGUgbmFtZXMgKi8KIGNvbnN0IGNoYXIgKmNvbnN0IHBwdHBfbXNnX25hbWVbXSA9IHsKIAkiVU5LTk9XTl9NRVNTQUdFIiwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IGI3NWM5YzQuLjljMGJhMTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtNDQsMTUgKzQ0LDE3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gKnN1YnN5c190YWJsZVtORk5MX1NVQlNZU19DT1VOVF07CiBzdGF0aWMgREVGSU5FX01VVEVYKG5mbmxfbXV0ZXgpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZubF9sb2NrKHZvaWQpCit2b2lkIG5mbmxfbG9jayh2b2lkKQogewogCW11dGV4X2xvY2soJm5mbmxfbXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZubF9sb2NrKTsKIAotc3RhdGljIGlubGluZSB2b2lkIG5mbmxfdW5sb2NrKHZvaWQpCit2b2lkIG5mbmxfdW5sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfdW5sb2NrKCZuZm5sX211dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmxfdW5sb2NrKTsKIAogaW50IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gKm4pCiB7CkBAIC0xMzIsOSArMTM0LDEwIEBACiAJCXJldHVybiAwOwogCiAJdHlwZSA9IG5saC0+bmxtc2dfdHlwZTsKK3JlcGxheToKIAlzcyA9IG5mbmV0bGlua19nZXRfc3Vic3lzKHR5cGUpOwogCWlmICghc3MpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCW5mbmxfdW5sb2NrKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZm5ldGxpbmstc3Vic3lzLSVkIiwgTkZOTF9TVUJTWVNfSUQodHlwZSkpOwogCQluZm5sX2xvY2soKTsKQEAgLTE2NSw3ICsxNjgsMTAgQEAKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gbmMtPmNhbGwobmZubCwgc2tiLCBubGgsIGNkYSk7CisJCWVyciA9IG5jLT5jYWxsKG5mbmwsIHNrYiwgbmxoLCBjZGEpOworCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQlnb3RvIHJlcGxheTsKKwkJcmV0dXJuIGVycjsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKaW5kZXggMmNjMWZmZi4uZjk5NzdiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIk5GUVVFVUUiLAotCQkuZmFtaWx5CQk9IE5GX0FSUCwKKwkJLmZhbWlseQkJPSBORlBST1RPX0FSUCwKIAkJLnRhcmdldAkJPSBuZnF1ZXVlX3RnLAogCQkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfTkZRX2luZm8pLAogCQkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCmluZGV4IDZmNjJjMzYuLjdhYzU0ZWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKIAkJbSAgPSBudG9obChpcGgtPnNhZGRyKSA8IG50b2hsKGluZm8tPnNyY19taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+c2FkZHIpID4gbnRvaGwoaW5mby0+c3JjX21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoInNyYyBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC03NSw3ICs3NSw3IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBudG9obChpcGgtPmRhZGRyKSA8IG50b2hsKGluZm8tPmRzdF9taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0+ZGFkZHIpID4gbnRvaGwoaW5mby0+ZHN0X21heC5pcCk7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlYpOwogCQlpZiAobSkgewogCQkJcHJfZGVidWcoImRzdCBJUCAiIE5JUFFVQURfRk1UICIgTk9UIGluIHJhbmdlICVzIgogCQkJICAgICAgICAgTklQUVVBRF9GTVQgIi0iIE5JUFFVQURfRk1UICJcbiIsCkBAIC0xMTQsMTQgKzExNCwxNCBAQAogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDKSB7CiAJCW0gID0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KSA8IDA7CiAJCW0gfD0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5zYWRkciwgJmluZm8tPnNyY19tYXguaW42KSA+IDA7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVik7CiAJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCmluZGV4IDRlYmQ0Y2EuLjI4MGM0NzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwpAQCAtMzE4LDE1ICszMTgsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfbGlzdF9oYXNoX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnQtPmlwaGFzaFtpXSk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQl0LT5wcm9jID0gcHJvY19jcmVhdGUodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAotCQkgICZyZWNlbnRfbXRfZm9wcyk7CisJdC0+cHJvYyA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X3Byb2NfZGlyLAorCQkgICZyZWNlbnRfbXRfZm9wcywgdCk7CiAJaWYgKHQtPnByb2MgPT0gTlVMTCkgewogCQlrZnJlZSh0KTsKIAkJZ290byBvdXQ7CiAJfQogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JdC0+cHJvY19vbGQgPSBwcm9jX2NyZWF0ZSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCi0JCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMpOworCXQtPnByb2Nfb2xkID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX29sZF9kaXIsCisJCSAgICAgICZyZWNlbnRfb2xkX2ZvcHMsIHQpOwogCWlmICh0LT5wcm9jX29sZCA9PSBOVUxMKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2Nfb2xkX2Rpcik7CiAJCWtmcmVlKHQpOwpAQCAtMzM0LDExICszMzQsOSBAQAogCX0KIAl0LT5wcm9jX29sZC0+dWlkICAgPSBpcF9saXN0X3VpZDsKIAl0LT5wcm9jX29sZC0+Z2lkICAgPSBpcF9saXN0X2dpZDsKLQl0LT5wcm9jX29sZC0+ZGF0YSAgPSB0OwogI2VuZGlmCiAJdC0+cHJvYy0+dWlkICAgICAgID0gaXBfbGlzdF91aWQ7CiAJdC0+cHJvYy0+Z2lkICAgICAgID0gaXBfbGlzdF9naWQ7Ci0JdC0+cHJvYy0+ZGF0YSAgICAgID0gdDsKICNlbmRpZgogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZ0YWJsZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDJmZDhhZmEuLjQ4MDE4NGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCW5ldGxpbmtfbG9ja190YWJsZSgpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIW5sX3RhYmxlW3Byb3RvY29sXS5yZWdpc3RlcmVkKSB7CiAJCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9ORVRMSU5LLCBwcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCA5ZTljNmZjLi5iOWQ5N2VmIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTY3LDExICs2NywxMCBAQAogCX0KIAogCXBucCA9IHBob25ldF9wcm90b19nZXQocHJvdG9jb2wpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKHBucCA9PSBOVUxMICYmCiAJICAgIHJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9QSE9ORVQsIHByb3RvY29sKSA9PSAwKQogCQlwbnAgPSBwaG9uZXRfcHJvdG9fZ2V0KHByb3RvY29sKTsKLSNlbmRpZgorCiAJaWYgKHBucCA9PSBOVUxMKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAlpZiAoc29jay0+dHlwZSAhPSBwbnAtPnNvY2tfdHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggOTk3NGIzZi4uOGY0NTdmMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAogCWFfbyA9IHRjX2xvb2t1cF9hY3Rpb25fbihhY3RfbmFtZSk7CiAJaWYgKGFfbyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQlydG5sX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgiYWN0XyVzIiwgYWN0X25hbWUpOwogCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDhlYjc5ZTkuLjE2ZTdhYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWVyciA9IC1FTk9FTlQ7CiAJCXRwX29wcyA9IHRjZl9wcm90b19sb29rdXBfb3BzKHRjYVtUQ0FfS0lORF0pOwogCQlpZiAodHBfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlzdHJ1Y3QgbmxhdHRyICpraW5kID0gdGNhW1RDQV9LSU5EXTsKIAkJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbWF0Y2guYyBiL25ldC9zY2hlZC9lbWF0Y2guYwppbmRleCA1ZTZmODJlLi5lODI1MTllIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1hdGNoLmMKKysrIGIvbmV0L3NjaGVkL2VtYXRjaC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCQlpZiAoZW0tPm9wcyA9PSBOVUxMKSB7CiAJCQllcnIgPSAtRU5PRU5UOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJlcXVlc3RfbW9kdWxlKCJlbWF0Y2gta2luZC0ldSIsIGVtX2hkci0+a2luZCk7CiAJCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDExMjJjOTUuLmIxNmFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7CiAKIAlvcHMgPSBxZGlzY19sb29rdXBfb3BzKGtpbmQpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAob3BzID09IE5VTEwgJiYga2luZCAhPSBOVUxMKSB7CiAJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAJCWlmIChubGFfc3RybGNweShuYW1lLCBraW5kLCBJRk5BTVNJWikgPCBJRk5BTVNJWikgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCA3YjU1NzJkLi45M2NkMzBjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlIG5vb3BfbmV0ZGV2X3F1ZXVlID0gewogCS5xZGlzYwkJPQkmbm9vcF9xZGlzYywKKwkucWRpc2Nfc2xlZXBpbmcJPQkmbm9vcF9xZGlzYywKIH07CiAKIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjID0gewpAQCAtMzUyLDYgKzM1Myw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2M7CiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSBub3F1ZXVlX25ldGRldl9xdWV1ZSA9IHsKIAkucWRpc2MJCT0JJm5vcXVldWVfcWRpc2MsCisJLnFkaXNjX3NsZWVwaW5nCT0JJm5vcXVldWVfcWRpc2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2MgPSB7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggM2U4ZDRlMy4uMmI3YTRiNSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAogCXNvY2stPnR5cGUgPSB0eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIEF0dGVtcHQgdG8gbG9hZCBhIHByb3RvY29sIG1vZHVsZSBpZiB0aGUgZmluZCBmYWlsZWQuCiAJICoKIAkgKiAxMi8wOS8xOTk2IE1hcmNpbjogQnV0ISB0aGlzIG1ha2VzIFJFQUxMWSBvbmx5IHNlbnNlLCBpZiB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA2YmZlYTllLi40MzZiZjFiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtODMsMTAgKzgzLDggQEAKIAlpZiAoZmxhdm9yID49IFJQQ19BVVRIX01BWEZMQVZPUikKIAkJZ290byBvdXQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmICgob3BzID0gYXV0aF9mbGF2b3JzW2ZsYXZvcl0pID09IE5VTEwpCiAJCXJlcXVlc3RfbW9kdWxlKCJycGMtYXV0aC0ldSIsIGZsYXZvcik7Ci0jZW5kaWYKIAlzcGluX2xvY2soJnJwY19hdXRoZmxhdm9yX2xvY2spOwogCW9wcyA9IGF1dGhfZmxhdm9yc1tmbGF2b3JdOwogCWlmIChvcHMgPT0gTlVMTCB8fCAhdHJ5X21vZHVsZV9nZXQob3BzLT5vd25lcikpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggZGEwNzg5Zi4uNDg5NWMzNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTIxMywxMCArMjEzLDEwIEBACiAJfQogCiAJLyogc2F2ZSB0aGUgbm9kZW5hbWUgKi8KLQljbG50LT5jbF9ub2RlbGVuID0gc3RybGVuKHV0c25hbWUoKS0+bm9kZW5hbWUpOworCWNsbnQtPmNsX25vZGVsZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lKTsKIAlpZiAoY2xudC0+Y2xfbm9kZWxlbiA+IFVOWF9NQVhOT0RFTkFNRSkKIAkJY2xudC0+Y2xfbm9kZWxlbiA9IFVOWF9NQVhOT0RFTkFNRTsKLQltZW1jcHkoY2xudC0+Y2xfbm9kZW5hbWUsIHV0c25hbWUoKS0+bm9kZW5hbWUsIGNsbnQtPmNsX25vZGVsZW4pOworCW1lbWNweShjbG50LT5jbF9ub2RlbmFtZSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLCBjbG50LT5jbF9ub2RlbGVuKTsKIAlycGNfcmVnaXN0ZXJfY2xpZW50KGNsbnQpOwogCXJldHVybiBjbG50OwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwppbmRleCAzNGFiYzkxLi40MTAxM2RkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jCisrKyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKQEAgLTQ2MCw2ICs0NjAsMjggQEAKIAlyZXR1cm4gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogfQogCisvKgorICogSW4gdGhlIGNhc2Ugd2hlcmUgcnBjIGNsaWVudHMgaGF2ZSBiZWVuIGNsb25lZCwgd2Ugd2FudCB0byBtYWtlCisgKiBzdXJlIHRoYXQgd2UgdXNlIHRoZSBwcm9ncmFtIG51bWJlci92ZXJzaW9uIGV0YyBvZiB0aGUgYWN0dWFsCisgKiBvd25lciBvZiB0aGUgeHBydC4gVG8gZG8gc28sIHdlIHdhbGsgYmFjayB1cCB0aGUgdHJlZSBvZiBwYXJlbnRzCisgKiB0byBmaW5kIHdob2V2ZXIgY3JlYXRlZCB0aGUgdHJhbnNwb3J0IGFuZC9vciB3aG9ldmVyIGhhcyB0aGUKKyAqIGF1dG9iaW5kIGZsYWcgc2V0LgorICovCitzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2ZpbmRfdHJhbnNwb3J0X293bmVyKHN0cnVjdCBycGNfY2xudCAqY2xudCkKK3sKKwlzdHJ1Y3QgcnBjX2NsbnQgKnBhcmVudCA9IGNsbnQtPmNsX3BhcmVudDsKKworCXdoaWxlIChwYXJlbnQgIT0gY2xudCkgeworCQlpZiAocGFyZW50LT5jbF94cHJ0ICE9IGNsbnQtPmNsX3hwcnQpCisJCQlicmVhazsKKwkJaWYgKGNsbnQtPmNsX2F1dG9iaW5kKQorCQkJYnJlYWs7CisJCWNsbnQgPSBwYXJlbnQ7CisJCXBhcmVudCA9IHBhcmVudC0+Y2xfcGFyZW50OworCX0KKwlyZXR1cm4gY2xudDsKK30KKwogLyoqCiAgKiBycGNiX2dldHBvcnRfYXN5bmMgLSBvYnRhaW4gdGhlIHBvcnQgZm9yIGEgZ2l2ZW4gUlBDIHNlcnZpY2Ugb24gYSBnaXZlbiBob3N0CiAgKiBAdGFzazogdGFzayB0aGF0IGlzIHdhaXRpbmcgZm9yIHBvcnRtYXBwZXIgcmVxdWVzdApAQCAtNDY5LDEwICs0OTEsMTAgQEAKICAqLwogdm9pZCBycGNiX2dldHBvcnRfYXN5bmMoc3RydWN0IHJwY190YXNrICp0YXNrKQogewotCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQ7CiAJc3RydWN0IHJwY19wcm9jaW5mbyAqcHJvYzsKIAl1MzIgYmluZF92ZXJzaW9uOwotCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IHRhc2stPnRrX3hwcnQ7CisJc3RydWN0IHJwY194cHJ0ICp4cHJ0OwogCXN0cnVjdCBycGNfY2xudAkqcnBjYl9jbG50OwogCXN0YXRpYyBzdHJ1Y3QgcnBjYmluZF9hcmdzICptYXA7CiAJc3RydWN0IHJwY190YXNrCSpjaGlsZDsKQEAgLTQ4MSwxMyArNTAzLDEzIEBACiAJc2l6ZV90IHNhbGVuOwogCWludCBzdGF0dXM7CiAKKwljbG50ID0gcnBjYl9maW5kX3RyYW5zcG9ydF9vd25lcih0YXNrLT50a19jbGllbnQpOworCXhwcnQgPSBjbG50LT5jbF94cHJ0OworCiAJZHByaW50aygiUlBDOiAlNXUgJXMoJXMsICV1LCAldSwgJWQpXG4iLAogCQl0YXNrLT50a19waWQsIF9fZnVuY19fLAogCQljbG50LT5jbF9zZXJ2ZXIsIGNsbnQtPmNsX3Byb2csIGNsbnQtPmNsX3ZlcnMsIHhwcnQtPnByb3QpOwogCi0JLyogQXV0b2JpbmQgb24gY2xvbmVkIHJwYyBjbGllbnRzIGlzIGRpc2NvdXJhZ2VkICovCi0JQlVHX09OKGNsbnQtPmNsX3BhcmVudCAhPSBjbG50KTsKLQogCS8qIFB1dCBzZWxmIG9uIHRoZSB3YWl0IHF1ZXVlIHRvIGVuc3VyZSB3ZSBnZXQgbm90aWZpZWQgaWYKIAkgKiBzb21lIG90aGVyIHRhc2sgaXMgYWxyZWFkeSBhdHRlbXB0aW5nIHRvIGJpbmQgdGhlIHBvcnQgKi8KIAlycGNfc2xlZXBfb24oJnhwcnQtPmJpbmRpbmcsIHRhc2ssIE5VTEwpOwpAQCAtNTQ5LDcgKzU3MSw3IEBACiAJCXN0YXR1cyA9IC1FTk9NRU07CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBubyBtZW1vcnkgYXZhaWxhYmxlXG4iLAogCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gYmFpbG91dF9ub2ZyZWU7CisJCWdvdG8gYmFpbG91dF9yZWxlYXNlX2NsaWVudDsKIAl9CiAJbWFwLT5yX3Byb2cgPSBjbG50LT5jbF9wcm9nOwogCW1hcC0+cl92ZXJzID0gY2xudC0+Y2xfdmVyczsKQEAgLTU2OSwxMSArNTkxLDEzIEBACiAJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KLQlycGNfcHV0X3Rhc2soY2hpbGQpOwogCi0JdGFzay0+dGtfeHBydC0+c3RhdC5iaW5kX2NvdW50Kys7CisJeHBydC0+c3RhdC5iaW5kX2NvdW50Kys7CisJcnBjX3B1dF90YXNrKGNoaWxkKTsKIAlyZXR1cm47CiAKK2JhaWxvdXRfcmVsZWFzZV9jbGllbnQ6CisJcnBjX3JlbGVhc2VfY2xpZW50KHJwY2JfY2xudCk7CiBiYWlsb3V0X25vZnJlZToKIAlycGNiX3dha2VfcnBjYmluZF93YWl0ZXJzKHhwcnQsIHN0YXR1cyk7CiAJdGFzay0+dGtfc3RhdHVzID0gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCA5OWE1MmFhLi4yOWU0MDFiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtMTA4LDEzICsxMDgsMTAgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXJlc3VsdCA9IC1FSU5WQUw7Ci0JaWYgKHRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewotCQlsaXN0X2FkZF90YWlsKCZ0cmFuc3BvcnQtPmxpc3QsICZ4cHJ0X2xpc3QpOwotCQlwcmludGsoS0VSTl9JTkZPICJSUEM6IFJlZ2lzdGVyZWQgJXMgdHJhbnNwb3J0IG1vZHVsZS5cbiIsCi0JCQl0cmFuc3BvcnQtPm5hbWUpOwotCQlyZXN1bHQgPSAwOwotCX0KKwlsaXN0X2FkZF90YWlsKCZ0cmFuc3BvcnQtPmxpc3QsICZ4cHJ0X2xpc3QpOworCXByaW50ayhLRVJOX0lORk8gIlJQQzogUmVnaXN0ZXJlZCAlcyB0cmFuc3BvcnQgbW9kdWxlLlxuIiwKKwkgICAgICAgdHJhbnNwb3J0LT5uYW1lKTsKKwlyZXN1bHQgPSAwOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2soJnhwcnRfbGlzdF9sb2NrKTsKQEAgLTE0Myw3ICsxNDAsNiBAQAogCQkJCSJSUEM6IFVucmVnaXN0ZXJlZCAlcyB0cmFuc3BvcnQgbW9kdWxlLlxuIiwKIAkJCQl0cmFuc3BvcnQtPm5hbWUpOwogCQkJbGlzdF9kZWxfaW5pdCgmdHJhbnNwb3J0LT5saXN0KTsKLQkJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKaW5kZXggNWMxOTU0ZDI4Li4xNDEwNmQyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCkBAIC0xMTgsNiArMTE4LDEwIEBACiAJfQogCiAJaWYgKHhkcmJ1Zi0+dGFpbFswXS5pb3ZfbGVuKSB7CisJCS8qIHRoZSBycGNyZG1hIHByb3RvY29sIGFsbG93cyB1cyB0byBvbWl0IGFueSB0cmFpbGluZworCQkgKiB4ZHIgcGFkIGJ5dGVzLCBzYXZpbmcgdGhlIHNlcnZlciBhbiBSRE1BIG9wZXJhdGlvbi4gKi8KKwkJaWYgKHhkcmJ1Zi0+dGFpbFswXS5pb3ZfbGVuIDwgNCAmJiB4cHJ0X3JkbWFfcGFkX29wdGltaXplKQorCQkJcmV0dXJuIG47CiAJCWlmIChuID09IG5zZWdzKQogCQkJcmV0dXJuIDA7CiAJCXNlZ1tuXS5tcl9wYWdlID0gTlVMTDsKQEAgLTUwOCw4ICs1MTIsOCBAQAogCWlmIChoZHJsZW4gPT0gMCkKIAkJcmV0dXJuIC0xOwogCi0JZHByaW50aygiUlBDOiAgICAgICAlczogJXM6IGhkcmxlbiAlemQgcnBjbGVuICV6ZCBwYWRsZW4gJXpkXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgaGVhZGVycCAweCVwIGJhc2UgMHglcCBsa2V5IDB4JXhcbiIsCisJZHByaW50aygiUlBDOiAgICAgICAlczogJXM6IGhkcmxlbiAlemQgcnBjbGVuICV6ZCBwYWRsZW4gJXpkIgorCQkiIGhlYWRlcnAgMHglcCBiYXNlIDB4JXAgbGtleSAweCV4XG4iLAogCQlfX2Z1bmNfXywgdHJhbnNmZXJ0eXBlc1t3dHlwZV0sIGhkcmxlbiwgcnBjbGVuLCBwYWRsZW4sCiAJCWhlYWRlcnAsIGJhc2UsIHJlcS0+cmxfaW92LmxrZXkpOwogCkBAIC01OTQsNyArNTk4LDcgQEAKICAqIFNjYXR0ZXIgaW5saW5lIHJlY2VpdmVkIGRhdGEgYmFjayBpbnRvIHByb3ZpZGVkIGlvdidzLgogICovCiBzdGF0aWMgdm9pZAotcnBjcmRtYV9pbmxpbmVfZml4dXAoc3RydWN0IHJwY19ycXN0ICpycXN0LCBjaGFyICpzcmNwLCBpbnQgY29weV9sZW4pCitycGNyZG1hX2lubGluZV9maXh1cChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3QsIGNoYXIgKnNyY3AsIGludCBjb3B5X2xlbiwgaW50IHBhZCkKIHsKIAlpbnQgaSwgbnBhZ2VzLCBjdXJsZW4sIG9sZW47CiAJY2hhciAqZGVzdHA7CkBAIC02NjAsNiArNjY0LDEzIEBACiAJfSBlbHNlCiAJCXJxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfbGVuID0gMDsKIAorCWlmIChwYWQpIHsKKwkJLyogaW1wbGljaXQgcGFkZGluZyBvbiB0ZXJtaW5hbCBjaHVuayAqLworCQl1bnNpZ25lZCBjaGFyICpwID0gcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9iYXNlOworCQl3aGlsZSAocGFkLS0pCisJCQlwW3Jxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfbGVuKytdID0gMDsKKwl9CisKIAlpZiAoY29weV9sZW4pCiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6ICVkIGJ5dGVzIGluIgogCQkJIiAlZCBleHRyYSBzZWdtZW50cyAoJWQgbG9zdClcbiIsCkBAIC02ODEsMTIgKzY5MiwxNCBAQAogCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IGVwLT5yZXBfeHBydDsKIAogCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOworCWlmICgrK3hwcnQtPmNvbm5lY3RfY29va2llID09IDApCS8qIG1haW50YWluIGEgcmVzZXJ2ZWQgdmFsdWUgKi8KKwkJKyt4cHJ0LT5jb25uZWN0X2Nvb2tpZTsKIAlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgPiAwKSB7CiAJCWlmICgheHBydF90ZXN0X2FuZF9zZXRfY29ubmVjdGVkKHhwcnQpKQogCQkJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgMCk7CiAJfSBlbHNlIHsKIAkJaWYgKHhwcnRfdGVzdF9hbmRfY2xlYXJfY29ubmVjdGVkKHhwcnQpKQotCQkJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgZXAtPnJlcF9jb25uZWN0ZWQpOworCQkJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVOT1RDT05OKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIH0KQEAgLTc5MiwxNCArODA1LDIwIEBACiAJCQkgICAgKCh1bnNpZ25lZCBjaGFyICopaXB0ciAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVycCk7CiAJCQlzdGF0dXMgPSByZXAtPnJyX2xlbiArIHJkbWFsZW47CiAJCQlyX3hwcnQtPnJ4X3N0YXRzLnRvdGFsX3JkbWFfcmVwbHkgKz0gcmRtYWxlbjsKKwkJCS8qIHNwZWNpYWwgY2FzZSAtIGxhc3QgY2h1bmsgbWF5IG9taXQgcGFkZGluZyAqLworCQkJaWYgKHJkbWFsZW4gJj0gMykgeworCQkJCXJkbWFsZW4gPSA0IC0gcmRtYWxlbjsKKwkJCQlzdGF0dXMgKz0gcmRtYWxlbjsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGVsc2Ugb3JkaW5hcnkgaW5saW5lICovCisJCQlyZG1hbGVuID0gMDsKIAkJCWlwdHIgPSAoX19iZTMyICopKCh1bnNpZ25lZCBjaGFyICopaGVhZGVycCArIDI4KTsKIAkJCXJlcC0+cnJfbGVuIC09IDI4OyAvKnNpemVvZiAqaGVhZGVycDsqLwogCQkJc3RhdHVzID0gcmVwLT5ycl9sZW47CiAJCX0KIAkJLyogRml4IHVwIHRoZSBycGMgcmVzdWx0cyBmb3IgdXBwZXIgbGF5ZXIgKi8KLQkJcnBjcmRtYV9pbmxpbmVfZml4dXAocnFzdCwgKGNoYXIgKilpcHRyLCByZXAtPnJyX2xlbik7CisJCXJwY3JkbWFfaW5saW5lX2ZpeHVwKHJxc3QsIChjaGFyICopaXB0ciwgcmVwLT5ycl9sZW4sIHJkbWFsZW4pOwogCQlicmVhazsKIAogCWNhc2UgaHRvbmwoUkRNQV9OT01TRyk6CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwppbmRleCBhNTY0YzFhLi45ODM5YzNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKQEAgLTcwLDExICs3MCw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3JlYWQgPSBSUENSRE1BX0RFRl9JTkxJTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3dyaXRlID0gUlBDUkRNQV9ERUZfSU5MSU5FOwogc3RhdGljIHVuc2lnbmVkIGludCB4cHJ0X3JkbWFfaW5saW5lX3dyaXRlX3BhZGRpbmc7Ci0jaWYgIVJQQ1JETUFfUEVSU0lTVEVOVF9SRUdJU1RSQVRJT04KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSA9IFJQQ1JETUFfUkVHSVNURVI7IC8qIEZNUj8gKi8KLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOwotI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0ZSTVI7CisgICAgICAgICAgICAgICAgaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemUgPSAwOwogCiAjaWZkZWYgUlBDX0RFQlVHCiAKQEAgLTE0MCw2ICsxMzcsMTQgQEAKIAkJLmV4dHJhMgkJPSAmbWF4X21lbXJlZywKIAl9LAogCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJyZG1hX3BhZF9vcHRpbWl6ZSIsCisJCS5kYXRhCQk9ICZ4cHJ0X3JkbWFfcGFkX29wdGltaXplLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5jdGxfbmFtZSA9IDAsCiAJfSwKIH07CkBAIC00NTgsNiArNDYzLDggQEAKIAlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQgPSBycGN4X3RvX3JkbWF4KHhwcnQpOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlczogY2xvc2luZ1xuIiwgX19mdW5jX18pOworCWlmIChyX3hwcnQtPnJ4X2VwLnJlcF9jb25uZWN0ZWQgPiAwKQorCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKIAl4cHJ0X2Rpc2Nvbm5lY3RfZG9uZSh4cHJ0KTsKIAkodm9pZCkgcnBjcmRtYV9lcF9kaXNjb25uZWN0KCZyX3hwcnQtPnJ4X2VwLCAmcl94cHJ0LT5yeF9pYSk7CiB9CkBAIC00ODUsNiArNDkyLDExIEBACiAJCQkvKiBSZWNvbm5lY3QgKi8KIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcl94cHJ0LT5yZG1hX2Nvbm5lY3QsCiAJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCk7CisJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0IDw8PSAxOworCQkJaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPiAoMzAgKiBIWikpCisJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCA9ICgzMCAqIEhaKTsKKwkJCWVsc2UgaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPCAoNSAqIEhaKSkKKwkJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gKDUgKiBIWik7CiAJCX0gZWxzZSB7CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJfeHBydC0+cmRtYV9jb25uZWN0LCAwKTsKIAkJCWlmICghUlBDX0lTX0FTWU5DKHRhc2spKQpAQCAtNTkxLDYgKzYwMyw3IEBACiAJfQogCWRwcmludGsoIlJQQzogICAgICAgJXM6IHNpemUgJXpkLCByZXF1ZXN0IDB4JXBcbiIsIF9fZnVuY19fLCBzaXplLCByZXEpOwogb3V0OgorCXJlcS0+cmxfY29ubmVjdF9jb29raWUgPSAwOwkvKiBvdXIgcmVzZXJ2ZWQgdmFsdWUgKi8KIAlyZXR1cm4gcmVxLT5ybF94ZHJfYnVmOwogCiBvdXRmYWlsOgpAQCAtNjk0LDEzICs3MDcsMjEgQEAKIAkJcmVxLT5ybF9yZXBseS0+cnJfeHBydCA9IHhwcnQ7CiAJfQogCi0JaWYgKHJwY3JkbWFfZXBfcG9zdCgmcl94cHJ0LT5yeF9pYSwgJnJfeHBydC0+cnhfZXAsIHJlcSkpIHsKLQkJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7Ci0JCXJldHVybiAtRU5PVENPTk47CS8qIGltcGxpZXMgZGlzY29ubmVjdCAqLwotCX0KKwkvKiBNdXN0IHN1cHByZXNzIHJldHJhbnNtaXQgdG8gbWFpbnRhaW4gY3JlZGl0cyAqLworCWlmIChyZXEtPnJsX2Nvbm5lY3RfY29va2llID09IHhwcnQtPmNvbm5lY3RfY29va2llKQorCQlnb3RvIGRyb3BfY29ubmVjdGlvbjsKKwlyZXEtPnJsX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29ubmVjdF9jb29raWU7CiAKKwlpZiAocnBjcmRtYV9lcF9wb3N0KCZyX3hwcnQtPnJ4X2lhLCAmcl94cHJ0LT5yeF9lcCwgcmVxKSkKKwkJZ290byBkcm9wX2Nvbm5lY3Rpb247CisKKwl0YXNrLT50a19ieXRlc19zZW50ICs9IHJxc3QtPnJxX3NuZF9idWYubGVuOwogCXJxc3QtPnJxX2J5dGVzX3NlbnQgPSAwOwogCXJldHVybiAwOworCitkcm9wX2Nvbm5lY3Rpb246CisJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7CisJcmV0dXJuIC1FTk9UQ09OTjsJLyogaW1wbGllcyBkaXNjb25uZWN0ICovCiB9CiAKIHN0YXRpYyB2b2lkIHhwcnRfcmRtYV9wcmludF9zdGF0cyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQpAQCAtNzcwLDcgKzc5MSw3IEBACiB7CiAJaW50IHJjOwogCi0JZHByaW50aygiUlBDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPICJSUENSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7CiAjaWZkZWYgUlBDX0RFQlVHCiAJaWYgKHN1bnJwY190YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKaW5kZXggOGVhMjgzZS4uYTVmZWY1ZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwpAQCAtMjg0LDYgKzI4NCw3IEBACiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKIAljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKIAljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCWlhLT5yaV9hc3luY19yYyA9IDA7CiAJCWNvbXBsZXRlKCZpYS0+cmlfZG9uZSk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOgpAQCAtMzM4LDEzICszMzksMzIgQEAKIAkJd2FrZV91cF9hbGwoJmVwLT5yZXBfY29ubmVjdF93YWl0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWEtPnJpX2FzeW5jX3JjID0gLUVJTlZBTDsKLQkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlWFxuIiwKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlZFxuIiwKIAkJCV9fZnVuY19fLCBldmVudC0+ZXZlbnQpOwotCQljb21wbGV0ZSgmaWEtPnJpX2RvbmUpOwogCQlicmVhazsKIAl9CiAKKyNpZmRlZiBSUENfREVCVUcKKwlpZiAoY29ubnN0YXRlID09IDEpIHsKKwkJaW50IGlyZCA9IGF0dHIubWF4X2Rlc3RfcmRfYXRvbWljOworCQlpbnQgdGlyZCA9IGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOworCQlwcmludGsoS0VSTl9JTkZPICJycGNyZG1hOiBjb25uZWN0aW9uIHRvICV1LiV1LiV1LiV1OiV1ICIKKwkJCSJvbiAlcywgbWVtcmVnICVkIHNsb3RzICVkIGlyZCAlZCVzXG4iLAorCQkJTklQUVVBRChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLAorCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpLAorCQkJaWEtPnJpX2lkLT5kZXZpY2UtPm5hbWUsCisJCQlpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5LAorCQkJeHBydC0+cnhfYnVmLnJiX21heF9yZXF1ZXN0cywKKwkJCWlyZCwgaXJkIDwgNCAmJiBpcmQgPCB0aXJkIC8gMiA/ICIgKGxvdyEpIiA6ICIiKTsKKwl9IGVsc2UgaWYgKGNvbm5zdGF0ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnBjcmRtYTogY29ubmVjdGlvbiB0byAldS4ldS4ldS4ldToldSAiCisJCQkiY2xvc2VkICglZClcbiIsCisJCQlOSVBRVUFEKGFkZHItPnNpbl9hZGRyLnNfYWRkciksCisJCQludG9ocyhhZGRyLT5zaW5fcG9ydCksCisJCQljb25uc3RhdGUpOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NSw2ICszNzUsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmM7CiAKKwlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwogCWlkID0gcmRtYV9jcmVhdGVfaWQocnBjcmRtYV9jb25uX3VwY2FsbCwgeHBydCwgUkRNQV9QU19UQ1ApOwogCWlmIChJU19FUlIoaWQpKSB7CiAJCXJjID0gUFRSX0VSUihpZCk7CkBAIC0zNjMsMjYgKzM4NSwyOCBAQAogCQlyZXR1cm4gaWQ7CiAJfQogCi0JaWEtPnJpX2FzeW5jX3JjID0gMDsKKwlpYS0+cmlfYXN5bmNfcmMgPSAtRVRJTUVET1VUOwogCXJjID0gcmRtYV9yZXNvbHZlX2FkZHIoaWQsIE5VTEwsIGFkZHIsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX2FkZHIoKSBmYWlsZWQgJWlcbiIsCiAJCQlfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmaWEtPnJpX2RvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZpYS0+cmlfZG9uZSwKKwkJCQltc2Vjc190b19qaWZmaWVzKFJETUFfUkVTT0xWRV9USU1FT1VUKSArIDEpOwogCXJjID0gaWEtPnJpX2FzeW5jX3JjOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlpYS0+cmlfYXN5bmNfcmMgPSAwOworCWlhLT5yaV9hc3luY19yYyA9IC1FVElNRURPVVQ7CiAJcmMgPSByZG1hX3Jlc29sdmVfcm91dGUoaWQsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX3JvdXRlKCkgZmFpbGVkICVpXG4iLAogCQkJX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXQ7CiAJfQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmaWEtPnJpX2RvbmUsCisJCQkJbXNlY3NfdG9famlmZmllcyhSRE1BX1JFU09MVkVfVElNRU9VVCkgKyAxKTsKIAlyYyA9IGlhLT5yaV9hc3luY19yYzsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtNDIzLDExICs0NDcsMTAgQEAKIGludAogcnBjcmRtYV9pYV9vcGVuKHN0cnVjdCBycGNyZG1hX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IG1lbXJlZykKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBtZW1fcHJpdjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgZGV2YXR0cjsKIAlzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEgPSAmeHBydC0+cnhfaWE7CiAKLQlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKLQogCWlhLT5yaV9pZCA9IHJwY3JkbWFfY3JlYXRlX2lkKHhwcnQsIGlhLCBhZGRyKTsKIAlpZiAoSVNfRVJSKGlhLT5yaV9pZCkpIHsKIAkJcmMgPSBQVFJfRVJSKGlhLT5yaV9pZCk7CkBAIC00NDMsNiArNDY2LDczIEBACiAJfQogCiAJLyoKKwkgKiBRdWVyeSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgcmVxdWVzdGVkIG1lbW9yeQorCSAqIHJlZ2lzdHJhdGlvbiBzdHJhdGVneSBpcyBzdXBwb3J0ZWQuIElmIGl0IGlzbid0LCBzZXQgdGhlCisJICogc3RyYXRlZ3kgdG8gYSBnbG9iYWxseSBzdXBwb3J0ZWQgbW9kZWwuCisJICovCisJcmMgPSBpYl9xdWVyeV9kZXZpY2UoaWEtPnJpX2lkLT5kZXZpY2UsICZkZXZhdHRyKTsKKwlpZiAocmMpIHsKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfcXVlcnlfZGV2aWNlIGZhaWxlZCAlZFxuIiwKKwkJCV9fZnVuY19fLCByYyk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSB7CisJCWlhLT5yaV9oYXZlX2RtYV9sa2V5ID0gMTsKKwkJaWEtPnJpX2RtYV9sa2V5ID0gaWEtPnJpX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5OworCX0KKworCXN3aXRjaCAobWVtcmVnKSB7CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CisJCWlmICghKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmIElCX0RFVklDRV9NRU1fV0lORE9XKSkgeworCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTUVNV0lORE9XUyByZWdpc3RyYXRpb24gIgorCQkJCSJzcGVjaWZpZWQgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgYWRhcHRlciwgIgorCQkJCSJ1c2luZyBzbG93ZXIgUlBDUkRNQV9SRUdJU1RFUlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX1JFR0lTVEVSOworCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKKwkJaWYgKCFpYS0+cmlfaWQtPmRldmljZS0+YWxsb2NfZm1yKSB7CisjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgcmlza2llciBSUENSRE1BX0FMTFBIWVNJQ0FMXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCW1lbXJlZyA9IFJQQ1JETUFfQUxMUEhZU0lDQUw7CisjZWxzZQorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBSZXF1aXJlcyBib3RoIGZybXIgcmVnIGFuZCBsb2NhbCBkbWEgbGtleSAqLworCQlpZiAoKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmCisJCSAgICAgKElCX0RFVklDRV9NRU1fTUdUX0VYVEVOU0lPTlN8SUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgIT0KKwkJICAgIChJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TfElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSkpIHsKKyNpZiBSUENSRE1BX1BFUlNJU1RFTlRfUkVHSVNUUkFUSU9OCisJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBGUk1SIHJlZ2lzdHJhdGlvbiAiCisJCQkJInNwZWNpZmllZCBidXQgbm90IHN1cHBvcnRlZCBieSBhZGFwdGVyLCAiCisJCQkJInVzaW5nIHJpc2tpZXIgUlBDUkRNQV9BTExQSFlTSUNBTFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOworI2Vsc2UKKwkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IEZSTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCX0KKworCS8qCiAJICogT3B0aW9uYWxseSBvYnRhaW4gYW4gdW5kZXJseWluZyBwaHlzaWNhbCBpZGVudGl0eSBtYXBwaW5nIGluCiAJICogb3JkZXIgdG8gZG8gYSBtZW1vcnkgd2luZG93LWJhc2VkIGJpbmQuIFRoaXMgYmFzZSByZWdpc3RyYXRpb24KIAkgKiBpcyBwcm90ZWN0ZWQgZnJvbSByZW1vdGUgYWNjZXNzIC0gdGhhdCBpcyBlbmFibGVkIG9ubHkgYnkgYmluZGluZwpAQCAtNDUwLDIyICs1NDAsMjggQEAKIAkgKiByZXZva2VkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBsZXRpb24gc2ltaWxhciB0byBhIHN0b3JhZ2UKIAkgKiBhZGFwdGVyLgogCSAqLwotCWlmIChtZW1yZWcgPiBSUENSRE1BX1JFR0lTVEVSKSB7Ci0JCWludCBtZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKLQkJc3dpdGNoIChtZW1yZWcpIHsKKwlzd2l0Y2ggKG1lbXJlZykgeworCWNhc2UgUlBDUkRNQV9CT1VOQ0VCVUZGRVJTOgorCWNhc2UgUlBDUkRNQV9SRUdJU1RFUjoKKwljYXNlIFJQQ1JETUFfRlJNUjoKKwkJYnJlYWs7CiAjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCQljYXNlIFJQQ1JETUFfQUxMUEhZU0lDQUw6Ci0JCQltZW1fcHJpdiB8PSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOwotCQkJbWVtX3ByaXYgfD0gSUJfQUNDRVNTX1JFTU9URV9SRUFEOwotCQkJYnJlYWs7CisJY2FzZSBSUENSRE1BX0FMTFBIWVNJQ0FMOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEOworCQlnb3RvIHJlZ2lzdGVyX3NldHVwOwogI2VuZGlmCi0JCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgotCQljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJCW1lbV9wcml2IHw9IElCX0FDQ0VTU19NV19CSU5EOworCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgorCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX01XX0JJTkQ7CisJCWdvdG8gcmVnaXN0ZXJfc2V0dXA7CisJY2FzZSBSUENSRE1BX01USENBRk1SOgorCQlpZiAoaWEtPnJpX2hhdmVfZG1hX2xrZXkpCiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCW1lbV9wcml2ID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCXJlZ2lzdGVyX3NldHVwOgogCQlpYS0+cmlfYmluZF9tZW0gPSBpYl9nZXRfZG1hX21yKGlhLT5yaV9wZCwgbWVtX3ByaXYpOwogCQlpZiAoSVNfRVJSKGlhLT5yaV9iaW5kX21lbSkpIHsKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogaWJfZ2V0X2RtYV9tciBmb3IgIgpAQCAtNDc1LDcgKzU3MSwxNSBAQAogCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKIAkJCWlhLT5yaV9iaW5kX21lbSA9IE5VTEw7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtZW1vcnkgcmVnaXN0cmF0aW9uIG1vZGUgJWRcbiIsCisJCQkJX19mdW5jX18sIG1lbXJlZyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQyOwogCX0KKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWd5IGlzICVkXG4iLAorCQlfX2Z1bmNfXywgbWVtcmVnKTsKIAogCS8qIEVsc2Ugd2lsbCBkbyBtZW1vcnkgcmVnL2RlcmVnIGZvciBlYWNoIGNodW5rICovCiAJaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9IG1lbXJlZzsKQEAgLTQ4Myw2ICs1ODcsNyBAQAogCXJldHVybiAwOwogb3V0MjoKIAlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwlpYS0+cmlfaWQgPSBOVUxMOwogb3V0MToKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDMsMTUgKzYwOCwxNyBAQAogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBpYl9kZXJlZ19tciByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkgJiYgaWEtPnJpX2lkLT5xcCkKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7CisJaWYgKGlhLT5yaV9pZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX2lkKSkgeworCQlpZiAoaWEtPnJpX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwkJaWEtPnJpX2lkID0gTlVMTDsKKwl9CiAJaWYgKGlhLT5yaV9wZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX3BkKSkgewogCQlyYyA9IGliX2RlYWxsb2NfcGQoaWEtPnJpX3BkKTsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfZGVhbGxvY19wZCByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkpCi0JCXJkbWFfZGVzdHJveV9pZChpYS0+cmlfaWQpOwogfQogCiAvKgpAQCAtNTQxLDYgKzY0OCwxMiBAQAogCWVwLT5yZXBfYXR0ci5zcnEgPSBOVUxMOwogCWVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBjZGF0YS0+bWF4X3JlcXVlc3RzOwogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgeworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBBZGQgcm9vbSBmb3IgZnJtciByZWdpc3RlciBhbmQgaW52YWxpZGF0ZSBXUnMgKi8KKwkJZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciAqPSAzOworCQlpZiAoZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciA+IGRldmF0dHIubWF4X3FwX3dyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgogCQkvKiBBZGQgcm9vbSBmb3IgbXdfYmluZHMrdW5iaW5kcyAtIG92ZXJraWxsISAqLwpAQCAtNjE3LDI5ICs3MzAsMTMgQEAKIAllcC0+cmVwX3JlbW90ZV9jbWEucHJpdmF0ZV9kYXRhX2xlbiA9IDA7CiAKIAkvKiBDbGllbnQgb2ZmZXJzIFJETUEgUmVhZCBidXQgZG9lcyBub3QgaW5pdGlhdGUgKi8KLQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKLQljYXNlIFJQQ1JETUFfQk9VTkNFQlVGRkVSUzoKLQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAwOwotCQlicmVhazsKLQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JY2FzZSBSUENSRE1BX1JFR0lTVEVSOgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyA4KTsKLQkJYnJlYWs7Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6Ci0jaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCWNhc2UgUlBDUkRNQV9BTExQSFlTSUNBTDoKLSNlbmRpZgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA+IGRldmF0dHIubWF4X3FwX3JkX2F0b20pCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gZGV2YXR0ci5tYXhfcXBfcmRfYXRvbTsKIAllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0gMDsKKwlpZiAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0JPVU5DRUJVRkZFUlMpCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMDsKKwllbHNlIGlmIChkZXZhdHRyLm1heF9xcF9yZF9hdG9tID4gMzIpCS8qIGFyYml0cmFyeSBidXQgPD0gMjU1ICovCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMzI7CisJZWxzZQorCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGRldmF0dHIubWF4X3FwX3JkX2F0b207CiAKIAllcC0+cmVwX3JlbW90ZV9jbWEucmV0cnlfY291bnQgPSA3OwogCWVwLT5yZXBfcmVtb3RlX2NtYS5mbG93X2NvbnRyb2wgPSAwOwpAQCAtNjc5LDIxICs3NzYsMTYgQEAKIAkJaWYgKHJjKQogCQkJZHByaW50aygiUlBDOiAgICAgICAlczogcnBjcmRtYV9lcF9kaXNjb25uZWN0IgogCQkJCSIgcmV0dXJuZWQgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlpYS0+cmlfaWQtPnFwID0gTlVMTDsKIAl9CiAKLQllcC0+cmVwX2Z1bmMgPSBOVUxMOwotCiAJLyogcGFkZGluZyAtIGNvdWxkIGJlIGRvbmUgaW4gcnBjcmRtYV9idWZmZXJfZGVzdHJveS4uLiAqLwogCWlmIChlcC0+cmVwX3BhZF9tcikgewogCQlycGNyZG1hX2RlcmVnaXN0ZXJfaW50ZXJuYWwoaWEsIGVwLT5yZXBfcGFkX21yLCAmZXAtPnJlcF9wYWQpOwogCQllcC0+cmVwX3BhZF9tciA9IE5VTEw7CiAJfQogCi0JaWYgKGlhLT5yaV9pZC0+cXApIHsKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7Ci0JCWlhLT5yaV9pZC0+cXAgPSBOVUxMOwotCX0KLQogCXJwY3JkbWFfY2xlYW5fY3EoZXAtPnJlcF9jcSk7CiAJcmMgPSBpYl9kZXN0cm95X2NxKGVwLT5yZXBfY3EpOwogCWlmIChyYykKQEAgLTcxMiw5ICs4MDQsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmMgPSAwOwogCWludCByZXRyeV9jb3VudCA9IDA7Ci0JaW50IHJlY29ubmVjdCA9IChlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAotCWlmIChyZWNvbm5lY3QpIHsKKwlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgIT0gMCkgewogCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICp4cHJ0OwogcmV0cnk6CiAJCXJjID0gcnBjcmRtYV9lcF9kaXNjb25uZWN0KGVwLCBpYSk7CkBAIC03NDUsNiArODM2LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIEVORCBURU1QICovCisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKIAkJaWEtPnJpX2lkID0gaWQ7CiAJfQpAQCAtNzY5LDE0ICs4NjEsNiBAQAogCX0KIH0KIAotCS8qIFRoZW9yZXRpY2FsbHkgYSBjbGllbnQgaW5pdGlhdG9yX2RlcHRoID4gMCBpcyBub3QgbmVlZGVkLAotCSAqIGJ1dCBtYW55IHBlZXJzIGZhaWwgdG8gY29tcGxldGUgdGhlIGNvbm5lY3Rpb24gdW5sZXNzIHRoZXkKLQkgKiA9PSByZXNwb25kZXJfcmVzb3VyY2VzISAqLwotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9Ci0JCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXM7Ci0KIAllcC0+cmVwX2Nvbm5lY3RlZCA9IDA7CiAKIAlyYyA9IHJkbWFfY29ubmVjdChpYS0+cmlfaWQsICZlcC0+cmVwX3JlbW90ZV9jbWEpOwpAQCAtNzg2LDkgKzg3MCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChyZWNvbm5lY3QpCi0JCXJldHVybiAwOwotCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGVwLT5yZXBfY29ubmVjdF93YWl0LCBlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAogCS8qCkBAIC04MDUsMTQgKzg4NiwxNiBAQAogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA8PSAwKSB7CiAJCS8qIFNvbWV0aW1lcywgdGhlIG9ubHkgd2F5IHRvIHJlbGlhYmx5IGNvbm5lY3QgdG8gcmVtb3RlCiAJCSAqIENNcyBpcyB0byB1c2Ugc2FtZSBub256ZXJvIHZhbHVlcyBmb3IgT1JEIGFuZCBJUkQuICovCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPT0gMCkKLQkJCSsrZXAtPnJlcF9yZW1vdGVfY21hLmluaXRpYXRvcl9kZXB0aDsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDApCi0JCQkrK2VwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOwotCQlpZiAocmV0cnlfY291bnQrKyA9PSAwKQorCQlpZiAocmV0cnlfY291bnQrKyA8PSBSRE1BX0NPTk5FQ1RfUkVUUllfTUFYICsgMSAmJgorCQkgICAgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDAgfHwKKwkJICAgICBlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9CisJCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpKSB7CisJCQlpZiAoZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPT0gMCkKKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJCQllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0KKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKIAkJCWdvdG8gcmV0cnk7CisJCX0KIAkJcmMgPSBlcC0+cmVwX2Nvbm5lY3RlZDsKIAl9IGVsc2UgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTg2Myw2ICs5NDYsNyBAQAogCWNoYXIgKnA7CiAJc2l6ZV90IGxlbjsKIAlpbnQgaSwgcmM7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlidWYtPnJiX21heF9yZXF1ZXN0cyA9IGNkYXRhLT5tYXhfcmVxdWVzdHM7CiAJc3Bpbl9sb2NrX2luaXQoJmJ1Zi0+cmJfbG9jayk7CkBAIC04NzMsNyArOTU3LDcgQEAKIAkgKiAgIDIuICBhcnJheXMgb2Ygc3RydWN0IHJwY3JkbWFfcmVxIHRvIGZpbGwgaW4gcG9pbnRlcnMKIAkgKiAgIDMuICBhcnJheSBvZiBzdHJ1Y3QgcnBjcmRtYV9yZXAgZm9yIHJlcGxpZXMKIAkgKiAgIDQuICBwYWRkaW5nLCBpZiBhbnkKLQkgKiAgIDUuICBtdydzLCBpZiBhbnkKKwkgKiAgIDUuICBtdydzLCBmbXIncyBvciBmcm1yJ3MsIGlmIGFueQogCSAqIFNlbmQvcmVjdiBidWZmZXJzIGluIHJlcS9yZXAgbmVlZCB0byBiZSByZWdpc3RlcmVkCiAJICovCiAKQEAgLTg4MSw2ICs5NjUsMTAgQEAKIAkJKHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZXEgKikgKyBzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVwICopKTsKIAlsZW4gKz0gY2RhdGEtPnBhZGRpbmc7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWxlbiArPSBidWYtPnJiX21heF9yZXF1ZXN0cyAqIFJQQ1JETUFfTUFYX1NFR1MgKgorCQkJCXNpemVvZihzdHJ1Y3QgcnBjcmRtYV9tdyk7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKIAkJLyogVEJEIHdlIGFyZSBwZXJoYXBzIG92ZXJhbGxvY2F0aW5nIGhlcmUgKi8KIAkJbGVuICs9IChidWYtPnJiX21heF9yZXF1ZXN0cyArIDEpICogUlBDUkRNQV9NQVhfU0VHUyAqCkBAIC05MjcsMTUgKzEwMTUsMzcgQEAKIAkgKiBhbmQgYWxzbyByZWR1Y2UgdW5iaW5kLXRvLWJpbmQgY29sbGlzaW9uLgogCSAqLwogCUlOSVRfTElTVF9IRUFEKCZidWYtPnJiX213cyk7CisJciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWZvciAoaSA9IGJ1Zi0+cmJfbWF4X3JlcXVlc3RzICogUlBDUkRNQV9NQVhfU0VHUzsgaTsgaS0tKSB7CisJCQlyLT5yLmZybXIuZnJfbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihpYS0+cmlfcGQsCisJCQkJCQkJIFJQQ1JETUFfTUFYX1NFR1MpOworCQkJaWYgKElTX0VSUihyLT5yLmZybXIuZnJfbXIpKSB7CisJCQkJcmMgPSBQVFJfRVJSKHItPnIuZnJtci5mcl9tcik7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfYWxsb2NfZmFzdF9yZWdfbXIiCisJCQkJCSIgZmFpbGVkICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJci0+ci5mcm1yLmZyX3BnbCA9CisJCQkJaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KGlhLT5yaV9pZC0+ZGV2aWNlLAorCQkJCQkJCSAgICBSUENSRE1BX01BWF9TRUdTKTsKKwkJCWlmIChJU19FUlIoci0+ci5mcm1yLmZyX3BnbCkpIHsKKwkJCQlyYyA9IFBUUl9FUlIoci0+ci5mcm1yLmZyX3BnbCk7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogIgorCQkJCQkiaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0ICIKKwkJCQkJImZhaWxlZCAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOworCQkJKytyOworCQl9CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKLQkJewotCQlzdHJ1Y3QgcnBjcmRtYV9tdyAqciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7Ci0JCXN0cnVjdCBpYl9mbXJfYXR0ciBmYSA9IHsKLQkJCVJQQ1JETUFfTUFYX0RBVEFfU0VHUywgMSwgUEFHRV9TSElGVAotCQl9OwogCQkvKiBUQkQgd2UgYXJlIHBlcmhhcHMgb3ZlcmFsbG9jYXRpbmcgaGVyZSAqLwogCQlmb3IgKGkgPSAoYnVmLT5yYl9tYXhfcmVxdWVzdHMrMSkgKiBSUENSRE1BX01BWF9TRUdTOyBpOyBpLS0pIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgaWJfZm1yX2F0dHIgZmEgPQorCQkJCXsgUlBDUkRNQV9NQVhfREFUQV9TRUdTLCAxLCBQQUdFX1NISUZUIH07CiAJCQlyLT5yLmZtciA9IGliX2FsbG9jX2ZtcihpYS0+cmlfcGQsCiAJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8IElCX0FDQ0VTU19SRU1PVEVfUkVBRCwKIAkJCQkmZmEpOwpAQCAtOTQ4LDEyICsxMDU4LDkgQEAKIAkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOwogCQkJKytyOwogCQl9Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JCXsKLQkJc3RydWN0IHJwY3JkbWFfbXcgKnIgPSAoc3RydWN0IHJwY3JkbWFfbXcgKilwOwogCQkvKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcmVxdWVzdCdzIHdvcnRoLCBmb3IgZnVsbCBjeWNsaW5nICovCiAJCWZvciAoaSA9IChidWYtPnJiX21heF9yZXF1ZXN0cysxKSAqIFJQQ1JETUFfTUFYX1NFR1M7IGk7IGktLSkgewogCQkJci0+ci5tdyA9IGliX2FsbG9jX213KGlhLT5yaV9wZCk7CkBAIC05NjYsNyArMTA3Myw2IEBACiAJCQlsaXN0X2FkZCgmci0+bXdfbGlzdCwgJmJ1Zi0+cmJfbXdzKTsKIAkJCSsrcjsKIAkJfQotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTA0Niw2ICsxMTUyLDcgQEAKIHsKIAlpbnQgcmMsIGk7CiAJc3RydWN0IHJwY3JkbWFfaWEgKmlhID0gcmRtYWJfdG9faWEoYnVmKTsKKwlzdHJ1Y3QgcnBjcmRtYV9tdyAqcjsKIAogCS8qIGNsZWFuIHVwIGluIHJldmVyc2Ugb3JkZXIgZnJvbSBjcmVhdGUKIAkgKiAgIDEuICByZWN2IG1yIG1lbW9yeSAobXIgZnJlZSwgdGhlbiBrZnJlZSkKQEAgLTEwNjUsMTEgKzExNzIsMTkgQEAKIAkJfQogCQlpZiAoYnVmLT5yYl9zZW5kX2J1ZnMgJiYgYnVmLT5yYl9zZW5kX2J1ZnNbaV0pIHsKIAkJCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5yYl9td3MpKSB7Ci0JCQkJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAJCQkJciA9IGxpc3RfZW50cnkoYnVmLT5yYl9td3MubmV4dCwKIAkJCQkJc3RydWN0IHJwY3JkbWFfbXcsIG13X2xpc3QpOwogCQkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKIAkJCQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwkJCQljYXNlIFJQQ1JETUFfRlJNUjoKKwkJCQkJcmMgPSBpYl9kZXJlZ19tcihyLT5yLmZybXIuZnJfbXIpOworCQkJCQlpZiAocmMpCisJCQkJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiIKKwkJCQkJCQkiIGliX2RlcmVnX21yIgorCQkJCQkJCSIgZmFpbGVkICVpXG4iLAorCQkJCQkJCV9fZnVuY19fLCByYyk7CisJCQkJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KHItPnIuZnJtci5mcl9wZ2wpOworCQkJCQlicmVhazsKIAkJCQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJCQkJCXJjID0gaWJfZGVhbGxvY19mbXIoci0+ci5mbXIpOwogCQkJCQlpZiAocmMpCkBAIC0xMTE1LDYgKzEyMzAsOCBAQAogewogCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVycy0+cmJfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJzLT5yYl9zZW5kX2luZGV4ID09IGJ1ZmZlcnMtPnJiX21heF9yZXF1ZXN0cykgewpAQCAtMTEzNSw5ICsxMjUyLDggQEAKIAl9CiAJYnVmZmVycy0+cmJfc2VuZF9idWZzW2J1ZmZlcnMtPnJiX3NlbmRfaW5kZXgrK10gPSBOVUxMOwogCWlmICghbGlzdF9lbXB0eSgmYnVmZmVycy0+cmJfbXdzKSkgewotCQlpbnQgaSA9IFJQQ1JETUFfTUFYX1NFR1MgLSAxOworCQlpID0gUlBDUkRNQV9NQVhfU0VHUyAtIDE7CiAJCWRvIHsKLQkJCXN0cnVjdCBycGNyZG1hX213ICpyOwogCQkJciA9IGxpc3RfZW50cnkoYnVmZmVycy0+cmJfbXdzLm5leHQsCiAJCQkJCXN0cnVjdCBycGNyZG1hX213LCBtd19saXN0KTsKIAkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKQEAgLTExNzEsNiArMTI4Nyw3IEBACiAJCXJlcS0+cmxfcmVwbHkgPSBOVUxMOwogCX0KIAlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwljYXNlIFJQQ1JETUFfRlJNUjoKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CkBAIC0xMjUyLDcgKzEzNjksMTEgQEAKIAkJCXZhLCBsZW4sIERNQV9CSURJUkVDVElPTkFMKTsKIAlpb3YtPmxlbmd0aCA9IGxlbjsKIAotCWlmIChpYS0+cmlfYmluZF9tZW0gIT0gTlVMTCkgeworCWlmIChpYS0+cmlfaGF2ZV9kbWFfbGtleSkgeworCQkqbXJwID0gTlVMTDsKKwkJaW92LT5sa2V5ID0gaWEtPnJpX2RtYV9sa2V5OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGlhLT5yaV9iaW5kX21lbSAhPSBOVUxMKSB7CiAJCSptcnAgPSBOVUxMOwogCQlpb3YtPmxrZXkgPSBpYS0+cmlfYmluZF9tZW0tPmxrZXk7CiAJCXJldHVybiAwOwpAQCAtMTMyOSwxNSArMTQ1MCwyOTIgQEAKIAkJCQlzZWctPm1yX2RtYSwgc2VnLT5tcl9kbWFsZW4sIHNlZy0+bXJfZGlyKTsKIH0KIAorc3RhdGljIGludAorcnBjcmRtYV9yZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJaW50ICpuc2VncywgaW50IHdyaXRpbmcsIHN0cnVjdCBycGNyZG1hX2lhICppYSwKKwkJCXN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJc3RydWN0IGliX3NlbmRfd3IgZnJtcl93ciwgKmJhZF93cjsKKwl1OCBrZXk7CisJaW50IGxlbiwgcGFnZW9mZjsKKwlpbnQgaSwgcmM7CisKKwlwYWdlb2ZmID0gb2Zmc2V0X2luX3BhZ2Uoc2VnMS0+bXJfb2Zmc2V0KTsKKwlzZWcxLT5tcl9vZmZzZXQgLT0gcGFnZW9mZjsJLyogc3RhcnQgb2YgcGFnZSAqLworCXNlZzEtPm1yX2xlbiArPSBwYWdlb2ZmOworCWxlbiA9IC1wYWdlb2ZmOworCWlmICgqbnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCisJCSpuc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKKwlmb3IgKGkgPSAwOyBpIDwgKm5zZWdzOykgeworCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJCXNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfcGdsLT5wYWdlX2xpc3RbaV0gPSBzZWctPm1yX2RtYTsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCArIChzZWctMSktPm1yX2xlbikpCisJCQlicmVhazsKKwl9CisJZHByaW50aygiUlBDOiAgICAgICAlczogVXNpbmcgZnJtciAlcCB0byBtYXAgJWQgc2VnbWVudHNcbiIsCisJCV9fZnVuY19fLCBzZWcxLT5tcl9jaHVuay5ybF9tdywgaSk7CisKKwkvKiBCdW1wIHRoZSBrZXkgKi8KKwlrZXkgPSAodTgpKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXkgJiAweDAwMDAwMEZGKTsKKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXIsICsra2V5KTsKKworCS8qIFByZXBhcmUgRlJNUiBXUiAqLworCW1lbXNldCgmZnJtcl93ciwgMCwgc2l6ZW9mIGZybXJfd3IpOworCWZybXJfd3Iub3Bjb2RlID0gSUJfV1JfRkFTVF9SRUdfTVI7CisJZnJtcl93ci5zZW5kX2ZsYWdzID0gMDsJCQkvKiB1bnNpZ25hbGVkICovCisJZnJtcl93ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpc2VnMS0+bXJfZG1hOworCWZybXJfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZnJtci5mcl9wZ2w7CisJZnJtcl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gaTsKKwlmcm1yX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gaSA8PCBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gKHdyaXRpbmcgPworCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgOiBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCWZybXJfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZmcm1yX3dyLCAmYmFkX3dyKTsKKworCWlmIChyYykgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfcG9zdF9zZW5kIGZvciByZWdpc3RlciwiCisJCQkiIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJd2hpbGUgKGktLSkKKwkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7CisJfSBlbHNlIHsKKwkJc2VnMS0+bXJfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWEgKyBwYWdlb2ZmOworCQlzZWcxLT5tcl9uc2VncyA9IGk7CisJCXNlZzEtPm1yX2xlbiA9IGxlbjsKKwl9CisJKm5zZWdzID0gaTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK3JwY3JkbWFfZGVyZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLCBzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXN0cnVjdCBpYl9zZW5kX3dyIGludmFsaWRhdGVfd3IsICpiYWRfd3I7CisJaW50IHJjOworCisJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCisJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7CisKKwltZW1zZXQoJmludmFsaWRhdGVfd3IsIDAsIHNpemVvZiBpbnZhbGlkYXRlX3dyKTsKKwlpbnZhbGlkYXRlX3dyLm9wY29kZSA9IElCX1dSX0xPQ0FMX0lOVjsKKwlpbnZhbGlkYXRlX3dyLnNlbmRfZmxhZ3MgPSAwOwkJCS8qIHVuc2lnbmFsZWQgKi8KKwlpbnZhbGlkYXRlX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZpbnZhbGlkYXRlX3dyLCAmYmFkX3dyKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9wb3N0X3NlbmQgZm9yIGludmFsaWRhdGUsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKKwlpbnQgbGVuLCBwYWdlb2ZmLCBpLCByYzsKKworCXBhZ2VvZmYgPSBvZmZzZXRfaW5fcGFnZShzZWcxLT5tcl9vZmZzZXQpOworCXNlZzEtPm1yX29mZnNldCAtPSBwYWdlb2ZmOwkvKiBzdGFydCBvZiBwYWdlICovCisJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7CisJbGVuID0gLXBhZ2VvZmY7CisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAoaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7CisJCWxlbiArPSBzZWctPm1yX2xlbjsKKwkJKytzZWc7CisJCSsraTsKKwkJLyogQ2hlY2sgZm9yIGhvbGVzICovCisJCWlmICgoaSA8ICpuc2VncyAmJiBvZmZzZXRfaW5fcGFnZShzZWctPm1yX29mZnNldCkpIHx8CisJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQgKyAoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXJjID0gaWJfbWFwX3BoeXNfZm1yKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtciwKKwkJCQlwaHlzYWRkcnMsIGksIHNlZzEtPm1yX2RtYSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgorCQkJIiV1QDB4JWxseCslaSAoJWQpLi4uIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sCisJCQlsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLAorCQkJcGFnZW9mZiwgaSwgcmMpOworCQl3aGlsZSAoaS0tKQorCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKKwl9IGVsc2UgeworCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OworCQlzZWcxLT5tcl9iYXNlID0gc2VnMS0+bXJfZG1hICsgcGFnZW9mZjsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJbGlzdF9hZGQoJnNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtci0+bGlzdCwgJmwpOworCXJjID0gaWJfdW5tYXBfZm1yKCZsKTsKKwl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKKwkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIHNlZysrKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl91bm1hcF9mbXIsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX21lbXdpbl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsCisJCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJaW50IG1lbV9wcml2ID0gKHdyaXRpbmcgPyBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIDoKKwkJCQkgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CisJc3RydWN0IGliX213X2JpbmQgcGFyYW07CisJaW50IHJjOworCisJKm5zZWdzID0gMTsKKwlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0ud3JfaWQgPSAwVUxMOwkvKiBubyBzZW5kIGNvb2tpZSAqLworCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKKwlwYXJhbS5sZW5ndGggPSBzZWctPm1yX2xlbjsKKwlwYXJhbS5zZW5kX2ZsYWdzID0gMDsKKwlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKKworCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJcmMgPSBpYl9iaW5kX213KGlhLT5yaV9pZC0+cXAsIHNlZy0+bXJfY2h1bmsucmxfbXctPnIubXcsICZwYXJhbSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9iaW5kX213ICIKKwkJCSIldUAweCVsbHggc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzZWctPm1yX2RtYSwgcmMpOworCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKKwl9IGVsc2UgeworCQlzZWctPm1yX3JrZXkgPSBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LT5ya2V5OworCQlzZWctPm1yX2Jhc2UgPSBwYXJhbS5hZGRyOworCQlzZWctPm1yX25zZWdzID0gMTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfbWVtd2luX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLAorCQkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICoqcikKK3sKKwlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJQlVHX09OKHNlZy0+bXJfbnNlZ3MgIT0gMSk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLworCXBhcmFtLmxlbmd0aCA9IDA7CisJcGFyYW0ubXdfYWNjZXNzX2ZsYWdzID0gMDsKKwlpZiAoKnIpIHsKKwkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgKnI7CisJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQlJTklUX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOworCX0gZWxzZSB7CisJCXBhcmFtLndyX2lkID0gMFVMTDsKKwkJcGFyYW0uc2VuZF9mbGFncyA9IDA7CisJCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJfQorCXJjID0gaWJfYmluZF9tdyhpYS0+cmlfaWQtPnFwLCBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOworCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliXyh1biliaW5kX213LCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCWVsc2UKKwkJKnIgPSBOVUxMOwkvKiB3aWxsIHVwY2FsbCBvbiBjb21wbGV0aW9uICovCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2RlZmF1bHRfZXh0ZXJuYWwoc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcsCisJCQlpbnQgKm5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6CisJCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgaXBiW1JQQ1JETUFfTUFYX0RBVEFfU0VHU107CisJaW50IGxlbiwgaSwgcmMgPSAwOworCisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAobGVuID0gMCwgaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJaXBiW2ldLmFkZHIgPSBzZWctPm1yX2RtYTsKKwkJaXBiW2ldLnNpemUgPSBzZWctPm1yX2xlbjsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBpYl9yZWdfcGh5c19tcihpYS0+cmlfcGQsCisJCQkJaXBiLCBpLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOworCWlmIChJU19FUlIoc2VnMS0+bXJfY2h1bmsucmxfbXIpKSB7CisJCXJjID0gUFRSX0VSUihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCisJCQkiJXVAMHglbGx4ICglZCkuLi4gc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIGxlbiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBpLCByYyk7CisJCXdoaWxlIChpLS0pCisJCQlycGNyZG1hX3VubWFwX29uZShpYSwgLS1zZWcpOworCX0gZWxzZSB7CisJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCXN0cnVjdCBycGNyZG1hX2lhICppYSkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJaW50IHJjOworCisJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBOVUxMOworCXdoaWxlIChzZWcxLT5tcl9uc2Vncy0tKQorCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX2RlcmVnX21yLCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCXJldHVybiByYzsKK30KKwogaW50CiBycGNyZG1hX3JlZ2lzdGVyX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAogCQkJaW50IG5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0KQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6Ci0JCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKLQlpbnQgaTsKIAlpbnQgcmMgPSAwOwogCiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CkBAIC0xMzUyLDExNCArMTc1MCwyNSBAQAogCQlicmVhazsKICNlbmRpZgogCi0JLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZhc3QgbWVtb3J5IHJlZ2lzdHJhdGlvbiAqLworCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBmcm1yIHJlZ2lzdHJhdGlvbiAqLworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZnJtcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEsIHJfeHBydCk7CisJCWJyZWFrOworCisJLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZtciBtZW1vcnkgcmVnaXN0cmF0aW9uICovCiAJY2FzZSBSUENSRE1BX01USENBRk1SOgotCQl7Ci0JCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKLQkJaW50IGxlbiwgcGFnZW9mZiA9IG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KTsKLQkJc2VnMS0+bXJfb2Zmc2V0IC09IHBhZ2VvZmY7CS8qIHN0YXJ0IG9mIHBhZ2UgKi8KLQkJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7Ci0JCWxlbiA9IC1wYWdlb2ZmOwotCQlpZiAobnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCi0JCQluc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKLQkJZm9yIChpID0gMDsgaSA8IG5zZWdzOykgewotCQkJcnBjcmRtYV9tYXBfb25lKGlhLCBzZWcsIHdyaXRpbmcpOwotCQkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7Ci0JCQlsZW4gKz0gc2VnLT5tcl9sZW47Ci0JCQkrK3NlZzsKLQkJCSsraTsKLQkJCS8qIENoZWNrIGZvciBob2xlcyAqLwotCQkJaWYgKChpIDwgbnNlZ3MgJiYgb2Zmc2V0X2luX3BhZ2Uoc2VnLT5tcl9vZmZzZXQpKSB8fAotCQkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQotCQkJCWJyZWFrOwotCQl9Ci0JCW5zZWdzID0gaTsKLQkJcmMgPSBpYl9tYXBfcGh5c19mbXIoc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLAotCQkJCQlwaHlzYWRkcnMsIG5zZWdzLCBzZWcxLT5tcl9kbWEpOwotCQlpZiAocmMpIHsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgotCQkJCSIldUAweCVsbHgrJWkgKCVkKS4uLiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLAotCQkJCWxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWcxLT5tcl9kbWEsCi0JCQkJcGFnZW9mZiwgbnNlZ3MsIHJjKTsKLQkJCXdoaWxlIChuc2Vncy0tKQotCQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OwotCQkJc2VnMS0+bXJfYmFzZSA9IHNlZzEtPm1yX2RtYSArIHBhZ2VvZmY7Ci0JCQlzZWcxLT5tcl9uc2VncyA9IG5zZWdzOwotCQkJc2VnMS0+bXJfbGVuID0gbGVuOwotCQl9Ci0JCX0KKwkJcmMgPSBycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAogCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBtZW1vcnkgd2luZG93cyAqLwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgotCQl7Ci0JCXN0cnVjdCBpYl9td19iaW5kIHBhcmFtOwotCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7Ci0JCXBhcmFtLm1yID0gaWEtPnJpX2JpbmRfbWVtOwotCQlwYXJhbS53cl9pZCA9IDBVTEw7CS8qIG5vIHNlbmQgY29va2llICovCi0JCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKLQkJcGFyYW0ubGVuZ3RoID0gc2VnLT5tcl9sZW47Ci0JCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKLQotCQlERUNSX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOwotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQkJc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdywgJnBhcmFtKTsKLQkJaWYgKHJjKSB7Ci0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfYmluZF9tdyAiCi0JCQkJIiV1QDB4JWxseCBzdGF0dXMgJWlcbiIsCi0JCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnLT5tcl9kbWEsIHJjKTsKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOwotCQl9IGVsc2UgewotCQkJc2VnLT5tcl9ya2V5ID0gc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdy0+cmtleTsKLQkJCXNlZy0+bXJfYmFzZSA9IHBhcmFtLmFkZHI7Ci0JCQlzZWctPm1yX25zZWdzID0gMTsKLQkJCW5zZWdzID0gMTsKLQkJfQotCQl9CisJCXJjID0gcnBjcmRtYV9yZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCAmbnNlZ3MsIHdyaXRpbmcsIGlhLCByX3hwcnQpOwogCQlicmVhazsKIAogCS8qIERlZmF1bHQgcmVnaXN0cmF0aW9uIGVhY2ggdGltZSAqLwogCWRlZmF1bHQ6Ci0JCXsKLQkJc3RydWN0IGliX3BoeXNfYnVmIGlwYltSUENSRE1BX01BWF9EQVRBX1NFR1NdOwotCQlpbnQgbGVuID0gMDsKLQkJaWYgKG5zZWdzID4gUlBDUkRNQV9NQVhfREFUQV9TRUdTKQotCQkJbnNlZ3MgPSBSUENSRE1BX01BWF9EQVRBX1NFR1M7Ci0JCWZvciAoaSA9IDA7IGkgPCBuc2VnczspIHsKLQkJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKLQkJCWlwYltpXS5hZGRyID0gc2VnLT5tcl9kbWE7Ci0JCQlpcGJbaV0uc2l6ZSA9IHNlZy0+bXJfbGVuOwotCQkJbGVuICs9IHNlZy0+bXJfbGVuOwotCQkJKytzZWc7Ci0JCQkrK2k7Ci0JCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KLQkJCWlmICgoaSA8IG5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKLQkJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQrKHNlZy0xKS0+bXJfbGVuKSkKLQkJCQlicmVhazsKLQkJfQotCQluc2VncyA9IGk7Ci0JCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gaWJfcmVnX3BoeXNfbXIoaWEtPnJpX3BkLAotCQkJCQlpcGIsIG5zZWdzLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOwotCQlpZiAoSVNfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKSkgewotCQkJcmMgPSBQVFJfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKTsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCi0JCQkJIiV1QDB4JWxseCAoJWQpLi4uIHN0YXR1cyAlaVxuIiwKLQkJCQlfX2Z1bmNfXywgbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBuc2VncywgcmMpOwotCQkJd2hpbGUgKG5zZWdzLS0pCi0JCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKLQkJfSBlbHNlIHsKLQkJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKLQkJCXNlZzEtPm1yX25zZWdzID0gbnNlZ3M7Ci0JCQlzZWcxLT5tcl9sZW4gPSBsZW47Ci0JCX0KLQkJfQorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHJjKQpAQCAtMTQ3Myw3ICsxNzgyLDYgQEAKIAkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICpyKQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKIAlpbnQgbnNlZ3MgPSBzZWctPm1yX25zZWdzLCByYzsKIAogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgewpAQCAtMTQ4Niw1NiArMTc5NCwyMSBAQAogCQlicmVhazsKICNlbmRpZgogCisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2ZybXJfZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0KTsKKwkJYnJlYWs7CisKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JCXsKLQkJTElTVF9IRUFEKGwpOwotCQlsaXN0X2FkZCgmc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5mbXItPmxpc3QsICZsKTsKLQkJcmMgPSBpYl91bm1hcF9mbXIoJmwpOwotCQl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7Ci0JCX0KLQkJaWYgKHJjKQotCQkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX3VubWFwX2ZtciwiCi0JCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsIGlhKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XU19BU1lOQzoKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJewotCQlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKLQkJQlVHX09OKG5zZWdzICE9IDEpOwotCQlwYXJhbS5tciA9IGlhLT5yaV9iaW5kX21lbTsKLQkJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLwotCQlwYXJhbS5sZW5ndGggPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSAwOwotCQlpZiAocikgewotCQkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgcjsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOwotCQkJSU5JVF9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfSBlbHNlIHsKLQkJCXBhcmFtLndyX2lkID0gMFVMTDsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQkJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfQotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQlzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOwotCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKLQkJfQotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfKHVuKWJpbmRfbXcsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOwotCQllbHNlCi0JCQlyID0gTlVMTDsJLyogd2lsbCB1cGNhbGwgb24gY29tcGxldGlvbiAqLworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0LCAmcik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gTlVMTDsKLQkJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCi0JCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOwotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfZGVyZWdfbXIsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9kZWZhdWx0X2V4dGVybmFsKHNlZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmggYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCmluZGV4IDI0Mjc4MjIuLmM3YTdlYmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaApAQCAtNTEsNiArNTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcmRtYS5oPiAJLyogUlBDL1JETUEgcHJvdG9jb2wgKi8KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHJkbWEuaD4gCS8qIHhwcnQgcGFyYW1ldGVycyAqLwogCisjZGVmaW5lIFJETUFfUkVTT0xWRV9USU1FT1VUCSg1MDAwKQkvKiA1IHNlY29uZHMgKi8KKyNkZWZpbmUgUkRNQV9DT05ORUNUX1JFVFJZX01BWAkoMikJLyogcmV0cmllcyBpZiBubyBsaXN0ZW5lciBiYWNrbG9nICovCisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciAtLSBvbmUgcGVyIHRyYW5zcG9ydCBpbnN0YW5jZQogICovCkBAIC01OCw2ICs2MSw4IEBACiAJc3RydWN0IHJkbWFfY21faWQgCSpyaV9pZDsKIAlzdHJ1Y3QgaWJfcGQJCSpyaV9wZDsKIAlzdHJ1Y3QgaWJfbXIJCSpyaV9iaW5kX21lbTsKKwl1MzIJCQlyaV9kbWFfbGtleTsKKwlpbnQJCQlyaV9oYXZlX2RtYV9sa2V5OwogCXN0cnVjdCBjb21wbGV0aW9uCXJpX2RvbmU7CiAJaW50CQkJcmlfYXN5bmNfcmM7CiAJZW51bSBycGNyZG1hX21lbXJlZwlyaV9tZW1yZWdfc3RyYXRlZ3k7CkBAIC0xNTYsNiArMTYxLDEwIEBACiAJCQl1bmlvbiB7CiAJCQkJc3RydWN0IGliX213CSptdzsKIAkJCQlzdHJ1Y3QgaWJfZm1yCSpmbXI7CisJCQkJc3RydWN0IHsKKwkJCQkJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqZnJfcGdsOworCQkJCQlzdHJ1Y3QgaWJfbXIgKmZyX21yOworCQkJCX0gZnJtcjsKIAkJCX0gcjsKIAkJCXN0cnVjdCBsaXN0X2hlYWQgbXdfbGlzdDsKIAkJfSAqcmxfbXc7CkBAIC0xNzUsNiArMTg0LDcgQEAKIAlzaXplX3QgCQlybF9zaXplOwkvKiBhY3R1YWwgbGVuZ3RoIG9mIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludAlybF9uaW92czsJLyogMCwgMiBvciA0ICovCiAJdW5zaWduZWQgaW50CXJsX25jaHVua3M7CS8qIG5vbi16ZXJvIGlmIGNodW5rcyAqLworCXVuc2lnbmVkIGludAlybF9jb25uZWN0X2Nvb2tpZTsJLyogcmV0cnkgZGV0ZWN0aW9uICovCiAJc3RydWN0IHJwY3JkbWFfYnVmZmVyICpybF9idWZmZXI7IC8qIGhvbWUgYmFzZSBmb3IgdGhpcyBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgcnBjcmRtYV9yZXAJKnJsX3JlcGx5Oy8qIGhvbGRlciBmb3IgcmVwbHkgYnVmZmVyICovCiAJc3RydWN0IHJwY3JkbWFfbXJfc2VnIHJsX3NlZ21lbnRzW1JQQ1JETUFfTUFYX1NFR1NdOy8qIGNodW5rIHNlZ21lbnRzICovCkBAIC0xOTgsNyArMjA4LDcgQEAKIAlhdG9taWNfdAlyYl9jcmVkaXRzOwkvKiBtb3N0IHJlY2VudCBzZXJ2ZXIgY3JlZGl0cyAqLwogCXVuc2lnbmVkIGxvbmcJcmJfY3duZHNjYWxlOwkvKiBjYWNoZWQgZnJhbWV3b3JrIHJwY19jd25kc2NhbGUgKi8KIAlpbnQJCXJiX21heF9yZXF1ZXN0czsvKiBjbGllbnQgbWF4IHJlcXVlc3RzICovCi0Jc3RydWN0IGxpc3RfaGVhZCByYl9td3M7CS8qIG9wdGlvbmFsIG1lbW9yeSB3aW5kb3dzL2ZtcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJiX213czsJLyogb3B0aW9uYWwgbWVtb3J5IHdpbmRvd3MvZm1ycy9mcm1ycyAqLwogCWludAkJcmJfc2VuZF9pbmRleDsKIAlzdHJ1Y3QgcnBjcmRtYV9yZXEJKipyYl9zZW5kX2J1ZnM7CiAJaW50CQlyYl9yZWN2X2luZGV4OwpAQCAtMjczLDYgKzI4MywxMSBAQAogI2RlZmluZSBycGN4X3RvX3JkbWF4KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCB4cHJ0KQogI2RlZmluZSBycGN4X3RvX3JkbWFkKHgpIChycGN4X3RvX3JkbWF4KHgpLT5yeF9kYXRhKQogCisvKiBTZXR0aW5nIHRoaXMgdG8gMCBlbnN1cmVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBlYXJseSBzZXJ2ZXJzLgorICogU2V0dGluZyB0aGlzIHRvIDEgZW5oYW5jZXMgY2VydGFpbiB1bmFsaWduZWQgcmVhZC93cml0ZSBwZXJmb3JtYW5jZS4KKyAqIERlZmF1bHQgaXMgMCwgc2VlIHN5c2N0bCBlbnRyeSBhbmQgcnBjX3JkbWEuYyBycGNyZG1hX2NvbnZlcnRfaW92cygpICovCitleHRlcm4gaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemU7CisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciBjYWxscyAtIHhwcnRyZG1hL3ZlcmJzLmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggMjRmZGQ0Yy4uNTAzMWRiNyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xODQsNyArMTg0LDggQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAorCWlmIChyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyICYmCisJICAgICFkZWJ1Z2ZzX3JlbmFtZShyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyLT5kX3BhcmVudCwKIAkJCSAgICByZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyLAogCQkJICAgIHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAogCQkJICAgIG5ld25hbWUpKQpAQCAtMzE3LDYgKzMxOCw4IEBACiAJZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyID0KIAkJZGVidWdmc19jcmVhdGVfZGlyKHdpcGh5X25hbWUoJmRydi0+d2lwaHkpLAogCQkJCSAgIGllZWU4MDIxMV9kZWJ1Z2ZzX2Rpcik7CisJaWYgKElTX0VSUihkcnYtPndpcGh5LmRlYnVnZnNkaXIpKQorCQlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPSBOVUxMOwogCiAJcmVzID0gMDsKIG91dF91bmxvY2s6CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IGVhNDhiODIuLmI0Y2EzOGEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC05Niw2ICs5NiwxNCBAQAogbW9kbmFtZV9mbGFncyAgPSAkKGlmICQoZmlsdGVyIDEsJCh3b3JkcyAkKG1vZG5hbWUpKSksXAogICAgICAgICAgICAgICAgICAtRCJLQlVJTERfTU9ETkFNRT1LQlVJTERfU1RSKCQoY2FsbCBuYW1lLWZpeCwkKG1vZG5hbWUpKSkiKQogCisjaGFzaCB2YWx1ZXMKK2lmZGVmIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRworZGVidWdfZmxhZ3MgPSAtRCJERUJVR19IQVNIPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggZGpiMiAkKEBEKSQobW9kbmFtZSkpIlwKKyAgICAgICAgICAgICAgLUQiREVCVUdfSEFTSDI9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCByNSAkKEBEKSQobW9kbmFtZSkpIgorZWxzZQorZGVidWdfZmxhZ3MgPQorZW5kaWYKKwogb3JpZ19jX2ZsYWdzICAgPSAkKEtCVUlMRF9DRkxBR1MpICQoY2NmbGFncy15KSAkKENGTEFHU18kKGJhc2V0YXJnZXQpLm8pCiBfY19mbGFncyAgICAgICA9ICQoZmlsdGVyLW91dCAkKENGTEFHU19SRU1PVkVfJChiYXNldGFyZ2V0KS5vKSwgJChvcmlnX2NfZmxhZ3MpKQogX2FfZmxhZ3MgICAgICAgPSAkKEtCVUlMRF9BRkxBR1MpICQoYXNmbGFncy15KSAkKEFGTEFHU18kKGJhc2V0YXJnZXQpLm8pCkBAIC0xMjEsNyArMTI5LDggQEAKIAogY19mbGFncyAgICAgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChOT1NURElOQ19GTEFHUykgJChLQlVJTERfQ1BQRkxBR1MpIFwKIAkJICQoX19jX2ZsYWdzKSAkKG1vZGtlcm5fY2ZsYWdzKSBcCi0JCSAtRCJLQlVJTERfU1RSKHMpPVwjcyIgJChiYXNlbmFtZV9mbGFncykgJChtb2RuYW1lX2ZsYWdzKQorCQkgLUQiS0JVSUxEX1NUUihzKT1cI3MiICQoYmFzZW5hbWVfZmxhZ3MpICQobW9kbmFtZV9mbGFncykgXAorCQkgICQoZGVidWdfZmxhZ3MpCiAKIGFfZmxhZ3MgICAgICAgID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoTk9TVERJTkNfRkxBR1MpICQoS0JVSUxEX0NQUEZMQUdTKSBcCiAJCSAkKF9fYV9mbGFncykgJChtb2RrZXJuX2FmbGFncykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZSBiL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQppbmRleCA3MzA0ZTE5Li5iZjhiMTk5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljLy5naXRpZ25vcmUKKysrIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCkBAIC0xLDMgKzEsMyBAQAoraGFzaAogZml4ZGVwCi1zcGxpdC1pbmNsdWRlCiBkb2Nwcm9jCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL01ha2VmaWxlIGIvc2NyaXB0cy9iYXNpYy9NYWtlZmlsZQppbmRleCA0YzMyNGExLi4wOTU1OTk1IDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljL01ha2VmaWxlCisrKyBiL3NjcmlwdHMvYmFzaWMvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAjIGZpeGRlcDogCSBVc2VkIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZHVyaW5nIGJ1aWxkIHByb2Nlc3MKICMgZG9jcHJvYzoJIFVzZWQgaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rCiAKLWhvc3Rwcm9ncy15CTo9IGZpeGRlcCBkb2Nwcm9jCitob3N0cHJvZ3MteQk6PSBmaXhkZXAgZG9jcHJvYyBoYXNoCiBhbHdheXMJCTo9ICQoaG9zdHByb2dzLXkpCiAKICMgZml4ZGVwIGlzIG5lZWRlZCB0byBjb21waWxlIG90aGVyIGhvc3QgcHJvZ3JhbXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvaGFzaC5jIGIvc2NyaXB0cy9iYXNpYy9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5OWFkNwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvYmFzaWMvaGFzaC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUyA2CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9ncmFtOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCXByaW50ZigiVXNhZ2U6ICVzIDxkamIyfHI1PiA8bW9kbmFtZT5cbiIsIHByb2dyYW0pOworCWV4aXQoMSk7Cit9CisKKy8qIGRqYjIgaGFzaGluZyBhbGdvcml0aG0gYnkgRGFuIEJlcm5zdGVpbi4gRnJvbToKKyAqIGh0dHA6Ly93d3cuY3NlLnlvcmt1LmNhL35vei9oYXNoLmh0bWwKKyAqLworCit1bnNpZ25lZCBpbnQgZGpiMl9oYXNoKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSA1MzgxOworCWludCBjOworCisJYyA9ICpzdHI7CisJd2hpbGUgKGMpIHsKKwkJaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgYzsKKwkJYyA9ICorK3N0cjsKKwl9CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpKGhhc2ggJiAoKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpIC0gMSkpOworfQorCit1bnNpZ25lZCBpbnQgcjVfaGFzaChjaGFyICpzdHIpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gMDsKKwlpbnQgYzsKKworCWMgPSAqc3RyOworCXdoaWxlIChjKSB7CisJCWhhc2ggPSAoaGFzaCArIChjIDw8IDQpICsgKGMgPj4gNCkpICogMTE7CisJCWMgPSAqKytzdHI7CisJfQorCXJldHVybiAodW5zaWduZWQgaW50KShoYXNoICYgKCgxIDw8IERZTkFNSUNfREVCVUdfSEFTSF9CSVRTKSAtIDEpKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcm9ncmFtID0gYXJndlswXTsKKworCWlmIChhcmdjICE9IDMpCisJCXVzYWdlKCk7CisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImRqYjIiKSkKKwkJcHJpbnRmKCIlZFxuIiwgZGpiMl9oYXNoKGFyZ3ZbMl0pKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyNSIpKQorCQlwcmludGYoIiVkXG4iLCByNV9oYXNoKGFyZ3ZbMl0pKTsKKwllbHNlCisJCXVzYWdlKCk7CisJZXhpdCgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IGJjNjc3OTMuLmY4OGJiM2UgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTEsNSArMSw1IEBACiAjIS91c3IvYmluL3BlcmwgLXcKLSMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKKyMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQogIyAoYykgMjAwNSwgSm9lbCBTY2hvcHAgPGpzY2hvcHBAYXVzdGluLmlibS5jb20+ICh0aGUgdWdseSBiaXQpCiAjIChjKSAyMDA3LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSwgZXRjKQogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKQEAgLTksNyArOSw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMjEnOworbXkgJFYgPSAnMC4yNCc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTY2LDYgKzY2LDcgQEAKIG15ICRkYmdfdmFsdWVzID0gMDsKIG15ICRkYmdfcG9zc2libGUgPSAwOwogbXkgJGRiZ190eXBlID0gMDsKK215ICRkYmdfYXR0ciA9IDA7CiBmb3IgbXkgJGtleSAoa2V5cyAlZGVidWcpIHsKIAlldmFsICJcJHtkYmdfJGtleX0gPSAnJGRlYnVneyRrZXl9JzsiCiB9CkBAIC0xMTIsNyArMTEzLDEwIEBACiAJCQljb25zdHwKIAkJCV9fcmVhZF9tb3N0bHl8CiAJCQlfX2twcm9iZXN8Ci0JCQlfXyg/Om1lbXxjcHV8ZGV2fCkoPzppbml0ZGF0YXxpbml0KQorCQkJX18oPzptZW18Y3B1fGRldnwpKD86aW5pdGRhdGF8aW5pdCl8CisJCQlfX19fY2FjaGVsaW5lX2FsaWduZWR8CisJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wfAorCQkJX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcAogCQkgIH14Owogb3VyICRNb2RpZmllcjsKIG91ciAkSW5saW5lCT0gcXJ7aW5saW5lfF9fYWx3YXlzX2lubGluZXxub2lubGluZX07CkBAIC0xNDIsNiArMTQ2LDExIEBACiAJfCAgXHhGNFtceDgwLVx4OEZdW1x4ODAtXHhCRl17Mn0gICAgICMgcGxhbmUgMTYKIH14OwogCitvdXIgJHR5cGVUeXBlZGVmcyA9IHFyeyg/eDoKKwkoPzpfXyk/KD86dXxzfGJlfGxlKSg/OlxkfFxkXGQpfAorCWF0b21pY190CispfTsKKwogb3VyIEB0eXBlTGlzdCA9ICgKIAlxcnt2b2lkfSwKIAlxcnsoPzp1bnNpZ25lZFxzKyk/Y2hhcn0sCkBAIC0xNTUsNyArMTY0LDYgQEAKIAlxcntmbG9hdH0sCiAJcXJ7ZG91YmxlfSwKIAlxcntib29sfSwKLQlxcnsoPzpfXyk/KD86dXxzfGJlfGxlKSg/Ojh8MTZ8MzJ8NjQpfSwKIAlxcntzdHJ1Y3RccyskSWRlbnR9LAogCXFye3VuaW9uXHMrJElkZW50fSwKIAlxcntlbnVtXHMrJElkZW50fSwKQEAgLTE3NSw2ICsxODMsNyBAQAogCQkJKD86JE1vZGlmaWVyXHMrfGNvbnN0XHMrKSoKIAkJCSg/OgogCQkJCSg/OnR5cGVvZnxfX3R5cGVvZl9fKVxzKlwoXHMqXCoqXHMqJElkZW50XHMqXCl8CisJCQkJKD86JHR5cGVUeXBlZGVmc1xiKXwKIAkJCQkoPzoke2FsbH1cYikKIAkJCSkKIAkJCSg/OlxzKyRNb2RpZmllcnxccytjb25zdCkqCkBAIC0zMzEsNyArMzQwLDcgQEAKIAkJCSRvZmYrKzsKIAkJCW5leHQ7CiAJCX0KLQkJaWYgKHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJyovJykgeworCQlpZiAoJHNhbml0aXNlX3F1b3RlIGVxICcqLycgJiYgc3Vic3RyKCRsaW5lLCAkb2ZmLCAyKSBlcSAnKi8nKSB7CiAJCQkkc2FuaXRpc2VfcXVvdGUgPSAnJzsKIAkJCXN1YnN0cigkcmVzLCAkb2ZmLCAyLCAiJDskOyIpOwogCQkJJG9mZisrOwpAQCAtNDA0LDYgKzQxMyw3IEBACiAJCSMgY29udGV4dC4KIAkJaWYgKCRvZmYgPj0gJGxlbikgewogCQkJZm9yICg7ICRyZW1haW4gPiAwOyAkbGluZSsrKSB7CisJCQkJbGFzdCBpZiAoIWRlZmluZWQgJGxpbmVzWyRsaW5lXSk7CiAJCQkJbmV4dCBpZiAoJGxpbmVzWyRsaW5lXSA9fiAvXi0vKTsKIAkJCQkkcmVtYWluLS07CiAJCQkJJGxvZmYgPSAkbGVuOwpAQCAtNjY5LDYgKzY3OSwyMiBAQAogCXJldHVybiAoJGNtdCBuZSAnJyk7CiB9CiAKK3N1YiByYXdfbGluZSB7CisJbXkgKCRsaW5lbnIsICRjbnQpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gJGxpbmVuciAtIDE7CisJJGNudCsrOworCisJbXkgJGxpbmU7CisJd2hpbGUgKCRjbnQpIHsKKwkJJGxpbmUgPSAkcmF3bGluZXNbJG9mZnNldCsrXTsKKwkJbmV4dCBpZiAoZGVmaW5lZCgkbGluZSkgJiYgJGxpbmUgPX4gL14tLyk7CisJCSRjbnQtLTsKKwl9CisKKwlyZXR1cm4gJGxpbmU7Cit9CisKIHN1YiBjYXRfdmV0IHsKIAlteSAoJHZldCkgPSBAXzsKIAlteSAoJHJlcywgJGNvZGVkKTsKQEAgLTc4Miw5ICs4MDgsOSBAQAogCQkJfQogCQkJJHR5cGUgPSAnTic7CiAKLQkJfSBlbHNpZiAoJGN1ciA9fiAvXihpZnx3aGlsZXx0eXBlb2Z8X190eXBlb2ZfX3xmb3IpXGIvbykgeworCQl9IGVsc2lmICgkY3VyID1+IC9eKGlmfHdoaWxlfGZvcilcYi9vKSB7CiAJCQlwcmludCAiQ09ORCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7Ci0JCQkkYXZfcGVuZGluZyA9ICdOJzsKKwkJCSRhdl9wZW5kaW5nID0gJ0UnOwogCQkJJHR5cGUgPSAnTic7CiAKIAkJfSBlbHNpZiAoJGN1ciA9fi9eKGNhc2UpL28pIHsKQEAgLTc5Miw3ICs4MTgsNyBAQAogCQkJJGF2X3BlbmRfY29sb24gPSAnQyc7CiAJCQkkdHlwZSA9ICdOJzsKIAotCQl9IGVsc2lmICgkY3VyID1+L14ocmV0dXJufGVsc2V8Z290bykvbykgeworCQl9IGVsc2lmICgkY3VyID1+L14ocmV0dXJufGVsc2V8Z290b3x0eXBlb2Z8X190eXBlb2ZfXylcYi9vKSB7CiAJCQlwcmludCAiS0VZV09SRCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CiAJCQkkdHlwZSA9ICdOJzsKIApAQCAtODU4LDcgKzg4NCw3IEBACiAJCQlwcmludCAiQ0xPU0UoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJJHR5cGUgPSAnTic7CiAKLQkJfSBlbHNpZiAoJGN1ciA9fiAvXigtKD8hWy0+XSl8XCsoPyFcKyl8XCp8XCYoPyFcJikpL28pIHsKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigtKD8hWy0+XSl8XCsoPyFcKyl8XCp8XCZcJnxcJikvbykgewogCQkJbXkgJHZhcmlhbnQ7CiAKIAkJCXByaW50ICJPUFYoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwpAQCAtODkyLDEyICs5MTgsMjIgQEAKIHN1YiBwb3NzaWJsZSB7CiAJbXkgKCRwb3NzaWJsZSwgJGxpbmUpID0gQF87CiAKLQlwcmludCAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMSk7Ci0JaWYgKCRwb3NzaWJsZSAhfiAvXig/OiRNb2RpZmllcnwkU3RvcmFnZXwkVHlwZXxERUZJTkVfXFMrKSQvICYmCi0JICAgICRwb3NzaWJsZSBuZSAnZ290bycgJiYgJHBvc3NpYmxlIG5lICdyZXR1cm4nICYmCi0JICAgICRwb3NzaWJsZSBuZSAnY2FzZScgJiYgJHBvc3NpYmxlIG5lICdlbHNlJyAmJgotCSAgICAkcG9zc2libGUgbmUgJ2FzbScgJiYgJHBvc3NpYmxlIG5lICdfX2FzbV9fJyAmJgotCSAgICAkcG9zc2libGUgIX4gL14odHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYi8pIHsKKwlwcmludCAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAvKD86CisJCV4oPzoKKwkJCSRNb2RpZmllcnwKKwkJCSRTdG9yYWdlfAorCQkJJFR5cGV8CisJCQlERUZJTkVfXFMrfAorCQkJZ290b3wKKwkJCXJldHVybnwKKwkJCWNhc2V8CisJCQllbHNlfAorCQkJYXNtfF9fYXNtX198CisJCQlkbworCQkpJHwKKwkJXig/OnR5cGVkZWZ8c3RydWN0fGVudW0pXGIKKwkgICAgKS94KSB7CiAJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KIAkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CkBAIC05MTUsNiArOTUxLDggQEAKIAkJCXB1c2goQHR5cGVMaXN0LCAkcG9zc2libGUpOwogCQl9CiAJCWJ1aWxkX3R5cGVzKCk7CisJfSBlbHNlIHsKKwkJd2FybiAiTk9UUE9TUzogJHBvc3NpYmxlICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAxKTsKIAl9CiB9CiAKQEAgLTk1NCw2ICs5OTIsMzMgQEAKIAl9CiB9CiAKK3N1YiBjaGVja19hYnNvbHV0ZV9maWxlIHsKKwlteSAoJGFic29sdXRlLCAkaGVyZWN1cnIpID0gQF87CisJbXkgJGZpbGUgPSAkYWJzb2x1dGU7CisKKwkjI3ByaW50ICJhYnNvbHV0ZTwkYWJzb2x1dGU+XG4iOworCisJIyBTZWUgaWYgYW55IHN1ZmZpeCBvZiB0aGlzIHBhdGggaXMgYSBwYXRoIHdpdGhpbiB0aGUgdHJlZS4KKwl3aGlsZSAoJGZpbGUgPX4gc0BeW14vXSovQEApIHsKKwkJaWYgKC1mICIkcm9vdC8kZmlsZSIpIHsKKwkJCSMjcHJpbnQgImZpbGU8JGZpbGU+XG4iOworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoISAtZiBfKSAgeworCQlyZXR1cm4gMDsKKwl9CisKKwkjIEl0IGlzLCBzbyBzZWUgaWYgdGhlIHByZWZpeCBpcyBhY2NlcHRhYmxlLgorCW15ICRwcmVmaXggPSAkYWJzb2x1dGU7CisJc3Vic3RyKCRwcmVmaXgsIC1sZW5ndGgoJGZpbGUpKSA9ICcnOworCisJIyNwcmludCAicHJlZml4PCRwcmVmaXg+XG4iOworCWlmICgkcHJlZml4IG5lICIuLi4vIikgeworCQlXQVJOKCJ1c2UgcmVsYXRpdmUgcGF0aG5hbWUgaW5zdGVhZCBvZiBhYnNvbHV0ZSBpbiBjaGFuZ2Vsb2cgdGV4dFxuIiAuICRoZXJlY3Vycik7CisJfQorfQorCiBzdWIgcHJvY2VzcyB7CiAJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CiAKQEAgLTk5MSw2ICsxMDU2LDcgQEAKIAogCSMgc3VwcHJlc3Npb24gZmxhZ3MKIAlteSAlc3VwcHJlc3NfaWZicmFjZXM7CisJbXkgJXN1cHByZXNzX3doaWxldHJhaWxlcnM7CiAKIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBzYW5pdGl6aW5nIHRoZSBsaW5lcy4KIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBsb29raW5nIGZvciBhbnkgX19zZXR1cCBkb2N1bWVudGF0aW9uLgpAQCAtMTAyNSw5ICsxMDkxLDE0IEBACiAJCQkjIGVkZ2UgaXMgYSBjbG9zZSBjb21tZW50IHRoZW4gd2UgbXVzdCBiZSBpbiBhIGNvbW1lbnQKIAkJCSMgYXQgY29udGV4dCBzdGFydC4KIAkJCW15ICRlZGdlOwotCQkJZm9yIChteSAkbG4gPSAkbGluZW5yICsgMTsgJGxuIDwgKCRsaW5lbnIgKyAkcmVhbGNudCk7ICRsbisrKSB7Ci0JCQkJbmV4dCBpZiAoJGxpbmUgPX4gL14tLyk7Ci0JCQkJKCRlZGdlKSA9ICgkcmF3bGluZXNbJGxuIC0gMV0gPX4gbUAoL1wqfFwqLylAKTsKKwkJCW15ICRjbnQgPSAkcmVhbGNudDsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVuciArIDE7ICRjbnQgPiAwOyAkbG4rKykgeworCQkJCW5leHQgaWYgKGRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdICYmCisJCQkJCSAkcmF3bGluZXNbJGxuIC0gMV0gPX4gL14tLyk7CisJCQkJJGNudC0tOworCQkJCSNwcmludCAiUkFXPCRyYXdsaW5lc1skbG4gLSAxXT5cbiI7CisJCQkJKCRlZGdlKSA9IChkZWZpbmVkICRyYXdsaW5lc1skbG4gLSAxXSAmJgorCQkJCQkkcmF3bGluZXNbJGxuIC0gMV0gPX4gbUAoL1wqfFwqLylAKTsKIAkJCQlsYXN0IGlmIChkZWZpbmVkICRlZGdlKTsKIAkJCX0KIAkJCWlmIChkZWZpbmVkICRlZGdlICYmICRlZGdlIGVxICcqLycpIHsKQEAgLTEwNzUsNiArMTE0Niw3IEBACiAJCSRsaW5lbnIrKzsKIAogCQlteSAkcmF3bGluZSA9ICRyYXdsaW5lc1skbGluZW5yIC0gMV07CisJCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CiAKICNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCiAJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewpAQCAtMTA5MCw2ICsxMTYyLDcgQEAKIAkJCSRwcmV2X3ZhbHVlcyA9ICdFJzsKIAogCQkJJXN1cHByZXNzX2lmYnJhY2VzID0gKCk7CisJCQklc3VwcHJlc3Nfd2hpbGV0cmFpbGVycyA9ICgpOwogCQkJbmV4dDsKIAogIyB0cmFjayB0aGUgbGluZSBudW1iZXIgYXMgd2UgbW92ZSB0aHJvdWdoIHRoZSBodW5rLCBub3RlIHRoYXQKQEAgLTExMjUsNyArMTE5OCw3IEBACiAJCQkkcmVhbGZpbGUgPSAkMTsKIAkJCSRyZWFsZmlsZSA9fiBzQF5bXi9dKi9AQDsKIAotCQkJaWYgKCRyZWFsZmlsZSA9fiBtQGluY2x1ZGUvYXNtL0ApIHsKKwkJCWlmICgkcmVhbGZpbGUgPX4gbUBeaW5jbHVkZS9hc20vQCkgewogCQkJCUVSUk9SKCJkbyBub3QgbW9kaWZ5IGZpbGVzIGluIGluY2x1ZGUvYXNtLCBjaGFuZ2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpbGVzIGluIGluY2x1ZGUvYXNtLTxhcmNoaXRlY3R1cmU+XG4iIC4gIiRoZXJlJHJhd2xpbmVcbiIpOwogCQkJfQogCQkJbmV4dDsKQEAgLTExNTksNiArMTIzMiwyMCBAQAogCQkJCSRoZXJlY3VycikgaWYgKCEkZW1pdHRlZF9jb3JydXB0KyspOwogCQl9CiAKKyMgQ2hlY2sgZm9yIGFic29sdXRlIGtlcm5lbCBwYXRocy4KKwkJaWYgKCR0cmVlKSB7CisJCQl3aGlsZSAoJGxpbmUgPX4gbXsoPzpefFxzKSgvXFMqKX1nKSB7CisJCQkJbXkgJGZpbGUgPSAkMTsKKworCQkJCWlmICgkZmlsZSA9fiBte14oLio/KSg/OjpcZCspKzo/JH0gJiYKKwkJCQkgICAgY2hlY2tfYWJzb2x1dGVfZmlsZSgkMSwgJGhlcmVjdXJyKSkgeworCQkJCQkjCisJCQkJfSBlbHNlIHsKKwkJCQkJY2hlY2tfYWJzb2x1dGVfZmlsZSgkZmlsZSwgJGhlcmVjdXJyKTsKKwkJCQl9CisJCQl9CisJCX0KKwogIyBVVEYtOCByZWdleCBmb3VuZCBhdCBodHRwOi8vd3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL3F1ZXN0aW9ucy9xYS1mb3Jtcy11dGYtOC5lbi5waHAKIAkJaWYgKCgkcmVhbGZpbGUgPX4gL14kLyB8fCAkbGluZSA9fiAvXlwrLykgJiYKIAkJICAgICRyYXdsaW5lICF+IG0vXiRVVEY4KiQvKSB7CkBAIC0xMTcxLDExICsxMjU4LDggQEAKIAkJCUVSUk9SKCJJbnZhbGlkIFVURi04LCBwYXRjaCBhbmQgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlIGVuY29kZWQgaW4gVVRGLThcbiIgLiAkaGVyZXB0cik7CiAJCX0KIAotI2lnbm9yZSBsaW5lcyBiZWluZyByZW1vdmVkCi0JCWlmICgkbGluZT1+L14tLykge25leHQ7fQotCi0jIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIHNvdXJjZSBmaWxlIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKLQkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGN8c3xTfHBsfHNoKSQvKTsKKyMgaWdub3JlIG5vbi1odW5rIGxpbmVzIGFuZCBsaW5lcyBiZWluZyByZW1vdmVkCisJCW5leHQgaWYgKCEkaHVua19saW5lIHx8ICRsaW5lID1+IC9eLS8pOwogCiAjdHJhaWxpbmcgd2hpdGVzcGFjZQogCQlpZiAoJGxpbmUgPX4gL15cKy4qXDAxNS8pIHsKQEAgLTExODYsNiArMTI3MCwxMCBAQAogCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRyYXdsaW5lKSAuICJcbiI7CiAJCQlFUlJPUigidHJhaWxpbmcgd2hpdGVzcGFjZVxuIiAuICRoZXJldmV0KTsKIAkJfQorCisjIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIHNvdXJjZSBmaWxlIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKKwkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGN8c3xTfHBsfHNoKSQvKTsKKwogIzgwIGNvbHVtbiBsaW1pdAogCQlpZiAoJGxpbmUgPX4gL15cKy8gJiYgJHByZXZyYXdsaW5lICF+IC9cL1wqXCovICYmCiAJCSAgICAkcmF3bGluZSAhfiAvXi5ccypcKlxzKlxAJElkZW50XHMvICYmCkBAIC0xMjAwLDggKzEyODgsOCBAQAogCQkJV0FSTigiYWRkaW5nIGEgbGluZSB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKLSMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgKi5baGNdIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKLQkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLltoY10kLyk7CisjIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIHNvdXJjZSBmaWxlIEMgb3IgcGVybCBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCisJCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjfHBsKSQvKTsKIAogIyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBhbnkgdGFicyBtdXN0IGNvbWUgZmlyc3QgYW5kIGFueXRoaW5nCiAjIG1vcmUgdGhhbiA4IG11c3QgdXNlIHRhYnMuCkBAIC0xMjExLDE1ICsxMjk5LDE4IEBACiAJCQlFUlJPUigiY29kZSBpbmRlbnQgc2hvdWxkIHVzZSB0YWJzIHdoZXJlIHBvc3NpYmxlXG4iIC4gJGhlcmV2ZXQpOwogCQl9CiAKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgQyBzb3VyY2UgZmlsZSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCisJCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjKSQvKTsKKwogIyBjaGVjayBmb3IgUkNTL0NWUyByZXZpc2lvbiBtYXJrZXJzCiAJCWlmICgkcmF3bGluZSA9fiAvXlwrLipcJChSZXZpc2lvbnxMb2d8SWQpKD86XCR8KS8pIHsKIAkJCVdBUk4oIkNWUyBzdHlsZSBrZXl3b3JkIG1hcmtlcnMsIHRoZXNlIHdpbGwgX25vdF8gYmUgdXBkYXRlZFxuIi4gJGhlcmVjdXJyKTsKIAkJfQogCiAjIENoZWNrIGZvciBwb3RlbnRpYWwgJ2JhcmUnIHR5cGVzCi0JCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCk7CisJCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKIAkJaWYgKCRyZWFsY250ICYmICRsaW5lID1+IC8uXHMqXFMvKSB7Ci0JCQkoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQpID0KKwkJCSgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KSA9CiAJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVhbGNudCwgMCk7CiAJCQkkc3RhdCA9fiBzL1xuLi9cbiAvZzsKIAkJCSRjb25kID1+IHMvXG4uL1xuIC9nOwpAQCAtMTI0MCw3ICsxMzMxLDcgQEAKIAkJCQlwb3NzaWJsZSgkdHlwZSwgIkE6IiAuICRzKTsKIAogCQkJIyBkZWZpbml0aW9ucyBpbiBnbG9iYWwgc2NvcGUgY2FuIG9ubHkgc3RhcnQgd2l0aCB0eXBlcwotCQkJfSBlbHNpZiAoJHMgPX4gL14uKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oJElkZW50KVxiL3MpIHsKKwkJCX0gZWxzaWYgKCRzID1+IC9eLig/OiRTdG9yYWdlXHMrKT8oPzokSW5saW5lXHMrKT8oPzpjb25zdFxzKyk/KCRJZGVudClcYlxzKig/ITopL3MpIHsKIAkJCQlwb3NzaWJsZSgkMSwgIkI6IiAuICRzKTsKIAkJCX0KIApAQCAtMTI5NCwxMCArMTM4NSw2IEBACiAJCQkJRVJST1IoInN3aXRjaCBhbmQgY2FzZSBzaG91bGQgYmUgYXQgdGhlIHNhbWUgaW5kZW50XG4kaGVyZWxpbmUkZXJyIik7CiAJCQl9CiAJCX0KLQkJaWYgKCRsaW5lID1+IC9eLlxzKig/OmNhc2VccyouKnxkZWZhdWx0XHMqKTovZyAmJgotCQkgICAgJGxpbmUgIX4gL1xHKD86XHMqeyk/KD86XHMqJDsqKSg/OlxzKlxcKT9ccyokL2cpIHsKLQkJCUVSUk9SKCJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOwotCQl9CiAKICMgaWYvd2hpbGUvZXRjIGJyYWNlIGRvIG5vdCBnbyBvbiBuZXh0IGxpbmUsIHVubGVzcyBkZWZpbmluZyBhIGRvIHdoaWxlIGxvb3AsCiAjIG9yIGlmIHRoYXQgYnJhY2Ugb24gdGhlIG5leHQgbGluZSBpcyBmb3Igc29tZXRoaW5nIGVsc2UKQEAgLTEzMzgsNiArMTQyNSw5MSBAQAogCQkJfQogCQl9CiAKKyMgQ2hlY2sgcmVsYXRpdmUgaW5kZW50IGZvciBjb25kaXRpb25hbHMgYW5kIGJsb2Nrcy4KKwkJaWYgKCRsaW5lID1+IC9cYig/Oig/OmlmfHdoaWxlfGZvcilccypcKHxkb1xiKS8gJiYgJGxpbmUgIX4gL14uXHMqIy8gJiYgJGxpbmUgIX4gL1x9XHMqd2hpbGVccyovKSB7CisJCQlteSAoJHMsICRjKSA9ICgkc3RhdCwgJGNvbmQpOworCisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKKworCQkJIyBNYWtlIHN1cmUgd2UgcmVtb3ZlIHRoZSBsaW5lIHByZWZpeGVzIGFzIHdlIGhhdmUKKwkJCSMgbm9uZSBvbiB0aGUgZmlyc3QgbGluZSwgYW5kIGFyZSBnb2luZyB0byByZWFkZCB0aGVtCisJCQkjIHdoZXJlIG5lY2Vzc2FyeS4KKwkJCSRzID1+IHMvXG4uL1xuL2dzOworCisJCQkjIEZpbmQgb3V0IGhvdyBsb25nIHRoZSBjb25kaXRpb25hbCBhY3R1YWxseSBpcy4KKwkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJbXkgJGNvbmRfbGluZXMgPSAxICsgJCNuZXdsaW5lczsKKworCQkJIyBXZSB3YW50IHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lIGluc2lkZSB0aGUgYmxvY2sKKwkJCSMgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uYWwsIHNvIHJlbW92ZToKKwkJCSMgIDEpIGFueSBibGFuayBsaW5lIHRlcm1pbmF0aW9uCisJCQkjICAyKSBhbnkgb3BlbmluZyBicmFjZSB7IG9uIGVuZCBvZiB0aGUgbGluZQorCQkJIyAgMykgYW55IGRvICguLi4pIHsKKwkJCW15ICRjb250aW51YXRpb24gPSAwOworCQkJbXkgJGNoZWNrID0gMDsKKwkJCSRzID1+IHMvXi4qXGJkb1xiLy87CisJCQkkcyA9fiBzL15ccyp7Ly87CisJCQlpZiAoJHMgPX4gcy9eXHMqXFwvLykgeworCQkJCSRjb250aW51YXRpb24gPSAxOworCQkJfQorCQkJaWYgKCRzID1+IHMvXlxzKj9cbi8vKSB7CisJCQkJJGNoZWNrID0gMTsKKwkJCQkkY29uZF9saW5lcysrOworCQkJfQorCisJCQkjIEFsc28gaWdub3JlIGEgbG9vcCBjb25zdHJ1Y3QgYXQgdGhlIGVuZCBvZiBhCisJCQkjIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuCisJCQlpZiAoKCRwcmV2bGluZSA9fiAvXi5ccyojXHMqZGVmaW5lXHMvIHx8CisJCQkgICAgJHByZXZsaW5lID1+IC9cXFxzKiQvKSAmJiAkY29udGludWF0aW9uID09IDApIHsKKwkJCQkkY2hlY2sgPSAwOworCQkJfQorCisJCQlteSAkY29uZF9wdHIgPSAtMTsKKwkJCSRjb250aW51YXRpb24gPSAwOworCQkJd2hpbGUgKCRjb25kX3B0ciAhPSAkY29uZF9saW5lcykgeworCQkJCSRjb25kX3B0ciA9ICRjb25kX2xpbmVzOworCisJCQkJIyBJZiB3ZSBzZWUgYW4gI2Vsc2UvI2VsaWYgdGhlbiB0aGUgY29kZQorCQkJCSMgaXMgbm90IGxpbmVhci4KKwkJCQlpZiAoJHMgPX4gL15ccypcI1xzKig/OmVsc2V8ZWxpZikvKSB7CisJCQkJCSRjaGVjayA9IDA7CisJCQkJfQorCisJCQkJIyBJZ25vcmU6CisJCQkJIyAgMSkgYmxhbmsgbGluZXMsIHRoZXkgc2hvdWxkIGJlIGF0IDAsCisJCQkJIyAgMikgcHJlcHJvY2Vzc29yIGxpbmVzLCBhbmQKKwkJCQkjICAzKSBsYWJlbHMuCisJCQkJaWYgKCRjb250aW51YXRpb24gfHwKKwkJCQkgICAgJHMgPX4gL15ccyo/XG4vIHx8CisJCQkJICAgICRzID1+IC9eXHMqI1xzKj8vIHx8CisJCQkJICAgICRzID1+IC9eXHMqJElkZW50XHMqOi8pIHsKKwkJCQkJJGNvbnRpbnVhdGlvbiA9ICgkcyA9fiAvXi4qP1xcXG4vKSA/IDEgOiAwOworCQkJCQkkcyA9fiBzL14uKj9cbi8vOworCQkJCQkkY29uZF9saW5lcysrOworCQkJCX0KKwkJCX0KKworCQkJbXkgKHVuZGVmLCAkc2luZGVudCkgPSBsaW5lX3N0YXRzKCIrIiAuICRzKTsKKwkJCW15ICRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcyk7CisKKwkJCSMgQ2hlY2sgaWYgZWl0aGVyIG9mIHRoZXNlIGxpbmVzIGFyZSBtb2RpZmllZCwgZWxzZQorCQkJIyB0aGlzIGlzIG5vdCB0aGlzIHBhdGNoJ3MgZmF1bHQuCisJCQlpZiAoIWRlZmluZWQoJHN0YXRfcmVhbCkgfHwKKwkJCSAgICAkc3RhdCAhfiAvXlwrLyAmJiAkc3RhdF9yZWFsICF+IC9eXCsvKSB7CisJCQkJJGNoZWNrID0gMDsKKwkJCX0KKwkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCSRzdGF0X3JlYWwgPSAiWy4uLl1cbiRzdGF0X3JlYWwiOworCQkJfQorCisJCQkjcHJpbnQgImxpbmU8JGxpbmU+IHByZXZsaW5lPCRwcmV2bGluZT4gaW5kZW50PCRpbmRlbnQ+IHNpbmRlbnQ8JHNpbmRlbnQ+IGNoZWNrPCRjaGVjaz4gY29udGludWF0aW9uPCRjb250aW51YXRpb24+IHM8JHM+IGNvbmRfbGluZXM8JGNvbmRfbGluZXM+IHN0YXRfcmVhbDwkc3RhdF9yZWFsPiBzdGF0PCRzdGF0PlxuIjsKKworCQkJaWYgKCRjaGVjayAmJiAoKCRzaW5kZW50ICUgOCkgIT0gMCB8fAorCQkJICAgICgkc2luZGVudCA8PSAkaW5kZW50ICYmICRzIG5lICcnKSkpIHsKKwkJCQlXQVJOKCJzdXNwZWN0IGNvZGUgaW5kZW50IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzICgkaW5kZW50LCAkc2luZGVudClcbiIgLiAkaGVyZWN1cnIgLiAiJHN0YXRfcmVhbFxuIik7CisJCQl9CisJCX0KKwogCQkjIFRyYWNrIHRoZSAndmFsdWVzJyBhY3Jvc3MgY29udGV4dCBhbmQgYWRkZWQgbGluZXMuCiAJCW15ICRvcGxpbmUgPSAkbGluZTsgJG9wbGluZSA9fiBzL14uLyAvOwogCQlteSAoJGN1cnJfdmFsdWVzLCAkY3Vycl92YXJzKSA9CkBAIC0xMzYzLDYgKzE1MzUsMTUgQEAKIAkJCX0KIAkJCW5leHQ7CiAJCX0KKyMgVEVTVDogYWxsb3cgZGlyZWN0IHRlc3Rpbmcgb2YgdGhlIGF0dHJpYnV0ZSBtYXRjaGVyLgorCQlpZiAoJGRiZ19hdHRyKSB7CisJCQlpZiAoJGxpbmUgPX4gL14uXHMqJEF0dHJpYnV0ZVxzKiQvKSB7CisJCQkJRVJST1IoIlRFU1Q6IGlzIGF0dHJcbiIgLiAkaGVyZWN1cnIpOworCQkJfSBlbHNpZiAoJGRiZ19hdHRyID4gMSAmJiAkbGluZSA9fiAvXi4rKCRBdHRyaWJ1dGUpLykgeworCQkJCUVSUk9SKCJURVNUOiBpcyBub3QgYXR0ciAoJDEgaXMpXG4iLiAkaGVyZWN1cnIpOworCQkJfQorCQkJbmV4dDsKKwkJfQogCiAjIGNoZWNrIGZvciBpbml0aWFsaXNhdGlvbiB0byBhZ2dyZWdhdGVzIG9wZW4gYnJhY2Ugb24gdGhlIG5leHQgbGluZQogCQlpZiAoJHByZXZsaW5lID1+IC8kRGVjbGFyZVxzKiRJZGVudFxzKj1ccyokLyAmJgpAQCAtMTM5NSwxMyArMTU3NiwxNCBAQAogCQlpZiAoKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8pIHx8CiAJCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CiAJCQlteSAkbmFtZSA9ICQxOwotCQkJaWYgKCgkcHJldmxpbmUgIX4gL159LykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL15cK30vKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXiB9LykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL14uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpLykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL14uTElTVF9IRUFEXChcUSRuYW1lXEVcKS8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9eLiRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCgvKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD18XFspLykpIHsKKwkJCWlmICgkcHJldmxpbmUgIX4gLyg/OgorCQkJCV4ufXwKKwkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKKwkJCQleLiRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8CisJCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD18XFspCisJCQkgICAgKS94KSB7CiAJCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CiAJCQl9CiAJCX0KQEAgLTE0MjIsNiArMTYwNCw3IEBACiAJCWlmICgkbGluZSA9fiAvXGJ0eXBlZGVmXHMvICYmCiAJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccytcKFxzKlwqPyRJZGVudFxzKlwpXHMqXCgvICYmCiAJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccyskSWRlbnRccypcKC8gJiYKKwkJICAgICRsaW5lICF+IC9cYiR0eXBlVHlwZWRlZnNcYi8gJiYKIAkJICAgICRsaW5lICF+IC9cYl9fYml0d2lzZSg/Ol9ffClcYi8pIHsKIAkJCVdBUk4oImRvIG5vdCBhZGQgbmV3IHR5cGVkZWZzXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQpAQCAtMTQ5MywxMSArMTY3NiwxMyBAQAogCiAjIGNoZWNrIGZvciBzcGFjaW5nIHJvdW5kIHNxdWFyZSBicmFja2V0czsgYWxsb3dlZDoKICMgIDEuIHdpdGggYSB0eXBlIG9uIHRoZSBsZWZ0IC0tIGludCBbXSBhOwotIyAgMi4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgZm9yIHNsaWNlIGluaXRpYWxpc2VycyAtLSBbMC4uMTBdID0gNSwKKyMgIDIuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGZvciBzbGljZSBpbml0aWFsaXNlcnMgLS0gWzAuLi4xMF0gPSA1LAorIyAgMy4gaW5zaWRlIGEgY3VybHkgYnJhY2UgLS0gPSB7IFswLi4uMTBdID0gNSB9CiAJCXdoaWxlICgkbGluZSA9fiAvKC4qP1xzKVxbL2cpIHsKIAkJCW15ICgkd2hlcmUsICRwcmVmaXgpID0gKCQtWzFdLCAkMSk7CiAJCQlpZiAoJHByZWZpeCAhfiAvJFR5cGVccyskLyAmJgotCQkJICAgICgkd2hlcmUgIT0gMCB8fCAkcHJlZml4ICF+IC9eLlxzKyQvKSkgeworCQkJICAgICgkd2hlcmUgIT0gMCB8fCAkcHJlZml4ICF+IC9eLlxzKyQvKSAmJgorCQkJICAgICRwcmVmaXggIX4gL3tccyskLykgewogCQkJCUVSUk9SKCJzcGFjZSBwcm9oaWJpdGVkIGJlZm9yZSBvcGVuIHNxdWFyZSBicmFja2V0ICdbJ1xuIiAuICRoZXJlY3Vycik7CiAJCQl9CiAJCX0KQEAgLTE2MzIsNyArMTgxNyw3IEBACiAJCQkJIyB1bmFyeSBvcGVyYXRvciwgb3IgYSBjYXN0CiAJCQkJfSBlbHNpZiAoJG9wIGVxICchJyB8fCAkb3AgZXEgJ34nIHx8CiAJCQkJCSAkb3B2IGVxICcqVScgfHwgJG9wdiBlcSAnLVUnIHx8Ci0JCQkJCSAkb3B2IGVxICcmVScpIHsKKwkJCQkJICRvcHYgZXEgJyZVJyB8fCAkb3B2IGVxICcmJlUnKSB7CiAJCQkJCWlmICgkY3R4ICF+IC9bV0VCQ114Li8gJiYgJGNhICF+IC8oPzpcKXwhfH58XCp8LXxcJnxcfHxcK1wrfFwtXC18XHspJC8pIHsKIAkJCQkJCUVSUk9SKCJzcGFjZSByZXF1aXJlZCBiZWZvcmUgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KQEAgLTE3ODUsNyArMTk3MCwyNiBAQAogCiAjIENoZWNrIGZvciBpbGxlZ2FsIGFzc2lnbm1lbnQgaW4gaWYgY29uZGl0aW9uYWwgLS0gYW5kIGNoZWNrIGZvciB0cmFpbGluZwogIyBzdGF0ZW1lbnRzIGFmdGVyIHRoZSBjb25kaXRpb25hbC4KLQkJaWYgKCRsaW5lID1+IC9cYig/OmlmfHdoaWxlfGZvcilccypcKC8gJiYgJGxpbmUgIX4gL14uXHMqIy8pIHsKKwkJaWYgKCRsaW5lID1+IC9kb1xzKig/IXspLykgeworCQkJbXkgKCRzdGF0X25leHQpID0gY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZV9ucl9uZXh0LAorCQkJCQkJJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpOworCQkJJHN0YXRfbmV4dCA9fiBzL1xuLi9cbiAvZzsKKwkJCSMjcHJpbnQgInN0YXQ8JHN0YXQ+IHN0YXRfbmV4dDwkc3RhdF9uZXh0PlxuIjsKKworCQkJaWYgKCRzdGF0X25leHQgPX4gL15ccyp3aGlsZVxiLykgeworCQkJCSMgSWYgdGhlIHN0YXRlbWVudCBjYXJyaWVzIGxlYWRpbmcgbmV3bGluZXMsCisJCQkJIyB0aGVuIGNvdW50IHRob3NlIGFzIG9mZnNldHMuCisJCQkJbXkgKCR3aGl0ZXNwYWNlKSA9CisJCQkJCSgkc3RhdF9uZXh0ID1+IC9eKCg/OlxzKlxuWystXSkqXHMqKS9zKTsKKwkJCQlteSAkb2Zmc2V0ID0KKwkJCQkJc3RhdGVtZW50X3Jhd2xpbmVzKCR3aGl0ZXNwYWNlKSAtIDE7CisKKwkJCQkkc3VwcHJlc3Nfd2hpbGV0cmFpbGVyc3skbGluZV9ucl9uZXh0ICsKKwkJCQkJCQkJJG9mZnNldH0gPSAxOworCQkJfQorCQl9CisJCWlmICghZGVmaW5lZCAkc3VwcHJlc3Nfd2hpbGV0cmFpbGVyc3skbGluZW5yfSAmJgorCQkgICAgJGxpbmUgPX4gL1xiKD86aWZ8d2hpbGV8Zm9yKVxzKlwoLyAmJiAkbGluZSAhfiAvXi5ccyojLykgewogCQkJbXkgKCRzLCAkYykgPSAoJHN0YXQsICRjb25kKTsKIAogCQkJaWYgKCRjID1+IC9cYmlmXHMqXCguKltePD4hPV09W149XS4qLykgewpAQCAtMTgwMCw1NyArMjAwNCwxNiBAQAogCQkJaWYgKGxlbmd0aCgkYykgJiYgJHMgIX4gL15ccyp7P1xzKlxcKlxzKiQvICYmCiAJCQkgICAgJGMgIX4gL31ccyp3aGlsZVxzKi8pCiAJCQl7Ci0JCQkJRVJST1IoInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3Vycik7Ci0JCQl9Ci0JCX0KKwkJCQkjIEZpbmQgb3V0IGhvdyBsb25nIHRoZSBjb25kaXRpb25hbCBhY3R1YWxseSBpcy4KKwkJCQlteSBAbmV3bGluZXMgPSAoJGMgPX4gL1xuL2dzKTsKKwkJCQlteSAkY29uZF9saW5lcyA9IDEgKyAkI25ld2xpbmVzOwogCi0jIENoZWNrIHJlbGF0aXZlIGluZGVudCBmb3IgY29uZGl0aW9uYWxzIGFuZCBibG9ja3MuCi0JCWlmICgkbGluZSA9fiAvXGIoPzooPzppZnx3aGlsZXxmb3IpXHMqXCh8ZG9cYikvICYmICRsaW5lICF+IC9eLlxzKiMvICYmICRsaW5lICF+IC9cfVxzKndoaWxlXHMqLykgewotCQkJbXkgKCRzLCAkYykgPSAoJHN0YXQsICRjb25kKTsKKwkJCQlteSAkc3RhdF9yZWFsID0gcmF3X2xpbmUoJGxpbmVuciwgJGNvbmRfbGluZXMpOworCQkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCQkkc3RhdF9yZWFsID0gIlsuLi5dXG4kc3RhdF9yZWFsIjsKKwkJCQl9CiAKLQkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjKSwgJycpOwotCi0JCQkjIE1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhlIGxpbmUgcHJlZml4ZXMgYXMgd2UgaGF2ZQotCQkJIyBub25lIG9uIHRoZSBmaXJzdCBsaW5lLCBhbmQgYXJlIGdvaW5nIHRvIHJlYWRkIHRoZW0KLQkJCSMgd2hlcmUgbmVjZXNzYXJ5LgotCQkJJHMgPX4gcy9cbi4vXG4vZ3M7Ci0KLQkJCSMgV2Ugd2FudCB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBpbnNpZGUgdGhlIGJsb2NrCi0JCQkjIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmRpdGlvbmFsLCBzbyByZW1vdmU6Ci0JCQkjICAxKSBhbnkgYmxhbmsgbGluZSB0ZXJtaW5hdGlvbgotCQkJIyAgMikgYW55IG9wZW5pbmcgYnJhY2UgeyBvbiBlbmQgb2YgdGhlIGxpbmUKLQkJCSMgIDMpIGFueSBkbyAoLi4uKSB7Ci0JCQlteSAkY29udGludWF0aW9uID0gMDsKLQkJCW15ICRjaGVjayA9IDA7Ci0JCQkkcyA9fiBzL14uKlxiZG9cYi8vOwotCQkJJHMgPX4gcy9eXHMqey8vOwotCQkJaWYgKCRzID1+IHMvXlxzKlxcLy8pIHsKLQkJCQkkY29udGludWF0aW9uID0gMTsKLQkJCX0KLQkJCWlmICgkcyA9fiBzL15ccypcbi8vKSB7Ci0JCQkJJGNoZWNrID0gMTsKLQkJCX0KLQotCQkJIyBBbHNvIGlnbm9yZSBhIGxvb3AgY29uc3RydWN0IGF0IHRoZSBlbmQgb2YgYQotCQkJIyBwcmVwcm9jZXNzb3Igc3RhdGVtZW50LgotCQkJaWYgKCgkcHJldmxpbmUgPX4gL14uXHMqI1xzKmRlZmluZVxzLyB8fAotCQkJICAgICRwcmV2bGluZSA9fiAvXFxccyokLykgJiYgJGNvbnRpbnVhdGlvbiA9PSAwKSB7Ci0JCQkJJGNoZWNrID0gMDsKLQkJCX0KLQotCQkJIyBJZ25vcmUgdGhlIGN1cnJlbnQgbGluZSBpZiBpdHMgaXMgYSBwcmVwcm9jZXNzb3IKLQkJCSMgbGluZS4KLQkJCWlmICgkcyA9fiAvXlxzKiNccyovKSB7Ci0JCQkJJGNoZWNrID0gMDsKLQkJCX0KLQotCQkJbXkgKHVuZGVmLCAkc2luZGVudCkgPSBsaW5lX3N0YXRzKCIrIiAuICRzKTsKLQotCQkJIyNwcmludCAibGluZTwkbGluZT4gcHJldmxpbmU8JHByZXZsaW5lPiBpbmRlbnQ8JGluZGVudD4gc2luZGVudDwkc2luZGVudD4gY2hlY2s8JGNoZWNrPiBjb250aW51YXRpb248JGNvbnRpbnVhdGlvbj4gczwkcz5cbiI7Ci0KLQkJCWlmICgkY2hlY2sgJiYgKCgkc2luZGVudCAlIDgpICE9IDAgfHwKLQkJCSAgICAoJHNpbmRlbnQgPD0gJGluZGVudCAmJiAkcyBuZSAnJykpKSB7Ci0JCQkJV0FSTigic3VzcGVjdCBjb2RlIGluZGVudCBmb3IgY29uZGl0aW9uYWwgc3RhdGVtZW50c1xuIiAuICRoZXJlY3Vycik7CisJCQkJRVJST1IoInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3VyciAuICRzdGF0X3JlYWwpOwogCQkJfQogCQl9CiAKQEAgLTE4NzcsNiArMjA0MCwxNSBAQAogCQkJCUVSUk9SKCJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CisjIGNhc2UgYW5kIGRlZmF1bHQgc2hvdWxkIG5vdCBoYXZlIGdlbmVyYWwgc3RhdGVtZW50cyBhZnRlciB0aGVtCisJCWlmICgkbGluZSA9fiAvXi5ccyooPzpjYXNlXHMqLip8ZGVmYXVsdFxzKik6L2cgJiYKKwkJICAgICRsaW5lICF+IC9cRyg/OgorCQkJKD86XHMqJDsqKSg/OlxzKnspPyg/OlxzKiQ7KikoPzpccypcXCk/XHMqJHwKKwkJCVxzKnJldHVyblxzKworCQkgICAgKS94ZykKKwkJeworCQkJRVJST1IoInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3Vycik7CisJCX0KIAogCQkjIENoZWNrIGZvciB9PG5sPmVsc2UgeywgdGhlc2UgbXVzdCBiZSBhdCB0aGUgc2FtZQogCQkjIGluZGVudCBsZXZlbCB0byBiZSByZWxldmFudCB0byBlYWNoIG90aGVyLgpAQCAtMTkxMywxMiArMjA4NSwxNyBAQAogCiAjd2FybiBpZiA8YXNtL2Zvby5oPiBpcyAjaW5jbHVkZWQgYW5kIDxsaW51eC9mb28uaD4gaXMgYXZhaWxhYmxlICh1c2VzIFJBVyBsaW5lKQogCQlpZiAoJHRyZWUgJiYgJHJhd2xpbmUgPX4gbXteLlxzKlwjXHMqaW5jbHVkZVxzKlw8YXNtXC8oLiopXC5oXD59KSB7Ci0JCQlteSAkY2hlY2tmaWxlID0gImluY2x1ZGUvbGludXgvJDEuaCI7Ci0JCQlpZiAoLWYgIiRyb290LyRjaGVja2ZpbGUiICYmICRyZWFsZmlsZSBuZSAkY2hlY2tmaWxlICYmCisJCQlteSAkZmlsZSA9ICIkMS5oIjsKKwkJCW15ICRjaGVja2ZpbGUgPSAiaW5jbHVkZS9saW51eC8kZmlsZSI7CisJCQlpZiAoLWYgIiRyb290LyRjaGVja2ZpbGUiICYmCisJCQkgICAgJHJlYWxmaWxlIG5lICRjaGVja2ZpbGUgJiYKIAkJCSAgICAkMSBuZSAnaXJxJykKIAkJCXsKLQkJCQlXQVJOKCJVc2UgI2luY2x1ZGUgPGxpbnV4LyQxLmg+IGluc3RlYWQgb2YgPGFzbS8kMS5oPlxuIiAuCi0JCQkJCSRoZXJlY3Vycik7CisJCQkJaWYgKCRyZWFsZmlsZSA9fiBte15hcmNoL30pIHsKKwkJCQkJQ0hLKCJDb25zaWRlciB1c2luZyAjaW5jbHVkZSA8bGludXgvJGZpbGU+IGluc3RlYWQgb2YgPGFzbS8kZmlsZT5cbiIgLiAkaGVyZWN1cnIpOworCQkJCX0gZWxzZSB7CisJCQkJCVdBUk4oIlVzZSAjaW5jbHVkZSA8bGludXgvJGZpbGU+IGluc3RlYWQgb2YgPGFzbS8kZmlsZT5cbiIgLiAkaGVyZWN1cnIpOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC0xOTUzLDggKzIxMzAsOCBAQAogCQkJIyBFeHRyYWN0IHRoZSByZW1haW5kZXIgb2YgdGhlIGRlZmluZSAoaWYgYW55KSBhbmQKIAkJCSMgcmlwIG9mZiBzdXJyb3VuZGluZyBzcGFjZXMsIGFuZCB0cmFpbGluZyBcJ3MuCiAJCQkkcmVzdCA9ICcnOwotCQkJd2hpbGUgKCRvZmYgIT0gMCB8fCAoJGNudCA+IDAgJiYgJHJlc3QgPX4gLyg/Ol58XFwpXHMqJC8pKSB7Ci0JCQkJI3ByaW50ICJBRERJTkcgJG9mZiA8IiAuIHN1YnN0cigkbGluZXNbJGxuIC0gMV0sICRvZmYpIC4gIj5cbiI7CisJCQl3aGlsZSAoJG9mZiAhPSAwIHx8ICgkY250ID4gMCAmJiAkcmVzdCA9fiAvXFxccyokLykpIHsKKwkJCQkjcHJpbnQgIkFERElORyBjbnQ8JGNudD4gJG9mZiA8IiAuIHN1YnN0cigkbGluZXNbJGxuIC0gMV0sICRvZmYpIC4gIj4gcmVzdDwkcmVzdD5cbiI7CiAJCQkJaWYgKCRvZmYgIT0gMCB8fCAkbGluZXNbJGxuIC0gMV0gIX4gL14tLykgewogCQkJCQkkcmVzdCAuPSBzdWJzdHIoJGxpbmVzWyRsbiAtIDFdLCAkb2ZmKSAuICJcbiI7CiAJCQkJCSRjbnQtLTsKQEAgLTE5NzgsOSArMjE1NSwxMCBAQAogCQkJJGRzdGF0ID1+IHMvXHMqJC8vczsKIAogCQkJIyBGbGF0dGVuIGFueSBwYXJlbnRoZXNlcyBhbmQgYnJhY2VzCi0JCQl3aGlsZSAoJGRzdGF0ID1+IHMvXChbXlwoXCldKlwpLzEvKSB7Ci0JCQl9Ci0JCQl3aGlsZSAoJGRzdGF0ID1+IHMvXHtbXlx7XH1dKlx9LzEvKSB7CisJCQl3aGlsZSAoJGRzdGF0ID1+IHMvXChbXlwoXCldKlwpLzEvIHx8CisJCQkgICAgICAgJGRzdGF0ID1+IHMvXHtbXlx7XH1dKlx9LzEvIHx8CisJCQkgICAgICAgJGRzdGF0ID1+IHMvXFtbXlx7XH1dKlxdLzEvKQorCQkJewogCQkJfQogCiAJCQlteSAkZXhjZXB0aW9ucyA9IHFyewpAQCAtMjAwMyw2ICsyMTgxLDcgQEAKIAkJCQlpZiAoJGRzdGF0IG5lICcnICYmCiAJCQkJICAgICRkc3RhdCAhfiAvXig/OiRJZGVudHwtPyRDb25zdGFudCkkLyAmJgogCQkJCSAgICAkZHN0YXQgIX4gLyRleGNlcHRpb25zLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gL15cLiRJZGVudFxzKj0vICYmCiAJCQkJICAgICRkc3RhdCA9fiAvJE9wZXJhdG9ycy8pCiAJCQkJewogCQkJCQlFUlJPUigiTWFjcm9zIHdpdGggY29tcGxleCB2YWx1ZXMgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHBhcmVudGhlc2lzXG4iIC4gIiRoZXJlXG4kY3R4XG4iKTsKQEAgLTIxMDMsMTAgKzIyODIsMTAgQEAKIAkJCX0KIAkJCWlmICgkbGV2ZWwgPT0gMCAmJiAkYmxvY2sgPX4gL15ccypcey8gJiYgISRhbGxvd2VkKSB7CiAJCQkJbXkgJGhlcmVjdHggPSAkaGVyZSAuICJcbiI7OwotCQkJCW15ICRlbmQgPSAkbGluZW5yICsgc3RhdGVtZW50X3Jhd2xpbmVzKCRibG9jaykgLSAxOworCQkJCW15ICRjbnQgPSBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKTsKIAotCQkJCWZvciAobXkgJGxuID0gJGxpbmVuciAtIDE7ICRsbiA8ICRlbmQ7ICRsbisrKSB7Ci0JCQkJCSRoZXJlY3R4IC49ICRyYXdsaW5lc1skbG5dIC4gIlxuIjs7CisJCQkJZm9yIChteSAkbiA9IDA7ICRuIDwgJGNudDsgJG4rKykgeworCQkJCQkkaGVyZWN0eCAuPSByYXdfbGluZSgkbGluZW5yLCAkbikgLiAiXG4iOzsKIAkJCQl9CiAKIAkJCQlXQVJOKCJicmFjZXMge30gYXJlIG5vdCBuZWNlc3NhcnkgZm9yIHNpbmdsZSBzdGF0ZW1lbnQgYmxvY2tzXG4iIC4gJGhlcmVjdHgpOwpAQCAtMjI4MSw2ICsyNDYwLDcgQEAKIAkJbXkgJHN0cmluZzsKIAkJd2hpbGUgKCRsaW5lID1+IC8oPzpefCIpKFtYXHRdKikoPzoifCQpL2cpIHsKIAkJCSRzdHJpbmcgPSBzdWJzdHIoJHJhd2xpbmUsICQtWzFdLCAkK1sxXSAtICQtWzFdKTsKKwkJCSRzdHJpbmcgPX4gcy8lJS9fXy9nOwogCQkJaWYgKCRzdHJpbmcgPX4gLyg/PCElKSVMW3VkaV0vKSB7CiAJCQkJV0FSTigiXCVMZC8lTHUgYXJlIG5vdC1zdGFuZGFyZCBDLCB1c2UgJWxsZC8lbGx1XG4iIC4gJGhlcmVjdXJyKTsKIAkJCQlsYXN0OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDhlMGRlNmEuLjg4OTIxNjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTE3MjYsNiArMTcyNiwxNCBAQAogCWJ1Zl9wcmludGYoYiwgIn07XG4iKTsKIH0KIAordm9pZCBhZGRfc3RhZ2luZ19mbGFnKHN0cnVjdCBidWZmZXIgKmIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN0YWdpbmdfZGlyID0gImRyaXZlcnMvc3RhZ2luZyI7CisKKwlpZiAoc3RybmNtcChzdGFnaW5nX2RpciwgbmFtZSwgc3RybGVuKHN0YWdpbmdfZGlyKSkgPT0gMCkKKwkJYnVmX3ByaW50ZihiLCAiXG5NT0RVTEVfSU5GTyhzdGFnaW5nLCBcIllcIik7XG4iKTsKK30KKwogLyoqCiAgKiBSZWNvcmQgQ1JDcyBmb3IgdW5yZXNvbHZlZCBzeW1ib2xzCiAgKiovCkBAIC0yMTM1LDYgKzIxNDMsNyBAQAogCQlidWYucG9zID0gMDsKIAogCQlhZGRfaGVhZGVyKCZidWYsIG1vZCk7CisJCWFkZF9zdGFnaW5nX2ZsYWcoJmJ1ZiwgbW9kLT5uYW1lKTsKIAkJZXJyIHw9IGFkZF92ZXJzaW9ucygmYnVmLCBtb2QpOwogCQlhZGRfZGVwZW5kcygmYnVmLCBtb2QsIG1vZHVsZXMpOwogCQlhZGRfbW9kZGV2dGFibGUoJmJ1ZiwgbW9kKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwppbmRleCA0NmYyMzk3Li41YmE3ODcwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKKysrIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGRldl9jZ3JvdXAuYyAtIGRldmljZSBjZ3JvdXAgc3Vic3lzdGVtCisgKiBkZXZpY2VfY2dyb3VwLmMgLSBkZXZpY2UgY2dyb3VwIHN1YnN5c3RlbQogICoKICAqIENvcHlyaWdodCAyMDA3IElCTSBDb3JwCiAgKi8KQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogI2RlZmluZSBBQ0NfTUtOT0QgMQogI2RlZmluZSBBQ0NfUkVBRCAgMgpAQCAtMjIsMTggKzIzLDggQEAKIAogLyoKICAqIHdoaXRlbGlzdCBsb2NraW5nIHJ1bGVzOgotICogY2dyb3VwX2xvY2soKSBjYW5ub3QgYmUgdGFrZW4gdW5kZXIgZGV2X2Nncm91cC0+bG9jay4KLSAqIGRldl9jZ3JvdXAtPmxvY2sgY2FuIGJlIHRha2VuIHdpdGggb3Igd2l0aG91dCBjZ3JvdXBfbG9jaygpLgotICoKLSAqIG1vZGlmaWNhdGlvbnMgYWx3YXlzIHJlcXVpcmUgY2dyb3VwX2xvY2sKLSAqIG1vZGlmaWNhdGlvbnMgdG8gYSBsaXN0IHdoaWNoIGlzIHZpc2libGUgcmVxdWlyZSB0aGUKLSAqICAgZGV2X2Nncm91cC0+bG9jayAqYW5kKiBjZ3JvdXBfbG9jaygpCi0gKiB3YWxraW5nIHRoZSBsaXN0IHJlcXVpcmVzIGRldl9jZ3JvdXAtPmxvY2sgb3IgY2dyb3VwX2xvY2soKS4KLSAqCi0gKiByZWFzb25pbmc6IGRldl93aGl0ZWxpc3RfY29weSgpIG5lZWRzIHRvIGttYWxsb2MsIHNvIG5lZWRzCi0gKiAgIGEgbXV0ZXgsIHdoaWNoIHRoZSBjZ3JvdXBfbG9jaygpIGlzLiAgU2luY2UgbW9kaWZ5aW5nCi0gKiAgIGEgdmlzaWJsZSBsaXN0IHJlcXVpcmVzIGJvdGggbG9ja3MsIGVpdGhlciBsb2NrIGNhbiBiZQotICogICB0YWtlbiBmb3Igd2Fsa2luZyB0aGUgbGlzdC4KKyAqIGhvbGQgY2dyb3VwX2xvY2soKSBmb3IgdXBkYXRlL3JlYWQuCisgKiBob2xkIHJjdV9yZWFkX2xvY2soKSBmb3IgcmVhZC4KICAqLwogCiBzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtIHsKQEAgLTQ3LDcgKzM4LDYgQEAKIHN0cnVjdCBkZXZfY2dyb3VwIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAJc3RydWN0IGxpc3RfaGVhZCB3aGl0ZWxpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X2Nncm91cCAqY3NzX3RvX2RldmNncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcykKQEAgLTg0LDEzICs3NCw5IEBACiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gsICp0bXAsICpuZXc7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdoLCBvcmlnLCBsaXN0KSB7Ci0JCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCp3aCksIEdGUF9LRVJORUwpOworCQluZXcgPSBrbWVtZHVwKHdoLCBzaXplb2YoKndoKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbmV3KQogCQkJZ290byBmcmVlX2FuZF9leGl0OwotCQluZXctPm1ham9yID0gd2gtPm1ham9yOwotCQluZXctPm1pbm9yID0gd2gtPm1pbm9yOwotCQluZXctPnR5cGUgPSB3aC0+dHlwZTsKLQkJbmV3LT5hY2Nlc3MgPSB3aC0+YWNjZXNzOwogCQlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsIGRlc3QpOwogCX0KIApAQCAtMTA3LDE5ICs5MywxNiBAQAogLyogU3R1cGlkIHByb3RvdHlwZSAtIGRvbid0IGJvdGhlciBjb21iaW5pbmcgZXhpc3RpbmcgZW50cmllcyAqLwogLyoKICAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCi0gKiBzaW5jZSB0aGUgbGlzdCBpcyB2aXNpYmxlIHRvIG90aGVyIHRhc2tzLCB3ZSBuZWVkIHRoZSBzcGlubG9jayBhbHNvCiAgKi8KIHN0YXRpYyBpbnQgZGV2X3doaXRlbGlzdF9hZGQoc3RydWN0IGRldl9jZ3JvdXAgKmRldl9jZ3JvdXAsCiAJCQlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCkKIHsKIAlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aGNvcHksICp3YWxrOwogCi0Jd2hjb3B5ID0ga21hbGxvYyhzaXplb2YoKndoY29weSksIEdGUF9LRVJORUwpOworCXdoY29weSA9IGttZW1kdXAod2gsIHNpemVvZigqd2gpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXdoY29weSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkod2hjb3B5LCB3aCwgc2l6ZW9mKCp3aGNvcHkpKTsKLQlzcGluX2xvY2soJmRldl9jZ3JvdXAtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkod2FsaywgJmRldl9jZ3JvdXAtPndoaXRlbGlzdCwgbGlzdCkgewogCQlpZiAod2Fsay0+dHlwZSAhPSB3aC0+dHlwZSkKIAkJCWNvbnRpbnVlOwpAQCAtMTM1LDcgKzExOCw2IEBACiAKIAlpZiAod2hjb3B5ICE9IE5VTEwpCiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZ3aGNvcHktPmxpc3QsICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QpOwotCXNwaW5fdW5sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ5LDE0ICsxMzEsMTIgQEAKIAogLyoKICAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCi0gKiBzaW5jZSB0aGUgbGlzdCBpcyB2aXNpYmxlIHRvIG90aGVyIHRhc2tzLCB3ZSBuZWVkIHRoZSBzcGlubG9jayBhbHNvCiAgKi8KIHN0YXRpYyB2b2lkIGRldl93aGl0ZWxpc3Rfcm0oc3RydWN0IGRldl9jZ3JvdXAgKmRldl9jZ3JvdXAsCiAJCQlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCkKIHsKIAlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3YWxrLCAqdG1wOwogCi0Jc3Bpbl9sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2FsaywgdG1wLCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0LCBsaXN0KSB7CiAJCWlmICh3YWxrLT50eXBlID09IERFVl9BTEwpCiAJCQlnb3RvIHJlbW92ZTsKQEAgLTE3NCw3ICsxNTQsNiBAQAogCQkJY2FsbF9yY3UoJndhbGstPnJjdSwgd2hpdGVsaXN0X2l0ZW1fZnJlZSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmRldl9jZ3JvdXAtPmxvY2spOwogfQogCiAvKgpAQCAtMjE0LDcgKzE5Myw2IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmZGV2X2Nncm91cC0+bG9jayk7CiAJcmV0dXJuICZkZXZfY2dyb3VwLT5jc3M7CiB9CiAKQEAgLTMzMCwxNSArMzA4LDExIEBACiB7CiAJc3RydWN0IGNncm91cCAqcGNnID0gY2hpbGRjZy0+Y3NzLmNncm91cC0+cGFyZW50OwogCXN0cnVjdCBkZXZfY2dyb3VwICpwYXJlbnQ7Ci0JaW50IHJldDsKIAogCWlmICghcGNnKQogCQlyZXR1cm4gMTsKIAlwYXJlbnQgPSBjZ3JvdXBfdG9fZGV2Y2dyb3VwKHBjZyk7Ci0Jc3Bpbl9sb2NrKCZwYXJlbnQtPmxvY2spOwotCXJldCA9IG1heV9hY2Nlc3Nfd2hpdGVsaXN0KHBhcmVudCwgd2gpOwotCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmxvY2spOwotCXJldHVybiByZXQ7CisJcmV0dXJuIG1heV9hY2Nlc3Nfd2hpdGVsaXN0KHBhcmVudCwgd2gpOwogfQogCiAvKgpAQCAtMzU3LDE3ICszMzEsMTQgQEAKIHN0YXRpYyBpbnQgZGV2Y2dyb3VwX3VwZGF0ZV9hY2Nlc3Moc3RydWN0IGRldl9jZ3JvdXAgKmRldmNncm91cCwKIAkJCQkgICBpbnQgZmlsZXR5cGUsIGNvbnN0IGNoYXIgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3QgZGV2X2Nncm91cCAqY3VyX2RldmNncm91cDsKIAljb25zdCBjaGFyICpiOwogCWNoYXIgKmVuZHA7Ci0JaW50IHJldHZhbCA9IDAsIGNvdW50OworCWludCBjb3VudDsKIAlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtIHdoOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JY3VyX2RldmNncm91cCA9IHRhc2tfZGV2Y2dyb3VwKGN1cnJlbnQpOwotCiAJbWVtc2V0KCZ3aCwgMCwgc2l6ZW9mKHdoKSk7CiAJYiA9IGJ1ZmZlcjsKIApAQCAtNDM3LDcgKzQwOCw2IEBACiAJfQogCiBoYW5kbGU6Ci0JcmV0dmFsID0gMDsKIAlzd2l0Y2ggKGZpbGV0eXBlKSB7CiAJY2FzZSBERVZDR19BTExPVzoKIAkJaWYgKCFwYXJlbnRfaGFzX3Blcm0oZGV2Y2dyb3VwLCAmd2gpKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDU3NmU1MTEuLjNlM2ZkZTdjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTIzMjIsMTMgKzIzMjMsNyBAQAogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltK2k7CiAJCQlybGltLT5ybGltX2N1ciA9IG1pbihybGltLT5ybGltX21heCwgaW5pdHJsaW0tPnJsaW1fY3VyKTsKIAkJfQotCQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHdpbGwgY2F1c2UgUkxJTUlUX0NQVSBjYWxjdWxhdGlvbnMKLQkJCSAqIHRvIGJlIHJlZmlndXJlZC4KLQkJCSAqLwotCQkJY3VycmVudC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CisJCXVwZGF0ZV9ybGltaXRfY3B1KHJsaW0tPnJsaW1fY3VyKTsKIAl9CiAKIAkvKiBXYWtlIHVwIHRoZSBwYXJlbnQgaWYgaXQgaXMgd2FpdGluZyBzbyB0aGF0IGl0IGNhbgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL3NvdW5kYnVzLmggYi9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaAppbmRleCA2MjJjZDM3Li5hMGYyMjNjIDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaAorKysgYi9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaApAQCAtOCw3ICs4LDcgQEAKICNpZm5kZWYgX19TT1VOREJVU19ICiAjZGVmaW5lIF9fU09VTkRCVVNfSAogCi0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDk5MDI2ZGYuLjM0YzFkOTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCi0JaWYgKChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSAmJiByZWcgPT0gQUM5N19HUElPX1NUQVRVUykKKwlpZiAoY3B1X2lzX3B4YTI1eCgpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTTUNfUkVHX0JBU0UgOiAmUE1DX1JFR19CQVNFOwogCWVsc2UKIAkJcmVnX2FkZHIgPSBhYzk3LT5udW0gPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTkwLDcgKzkwLDcgQEAKIAltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCi0JaWYgKChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSAmJiByZWcgPT0gQUM5N19HUElPX1NUQVRVUykKKwlpZiAoY3B1X2lzX3B4YTI1eCgpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTTUNfUkVHX0JBU0UgOiAmUE1DX1JFR19CQVNFOwogCWVsc2UKIAkJcmVnX2FkZHIgPSBhYzk3LT5udW0gPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTIwMCw3ICsyMDAsNyBAQAogYm9vbCBweGEyeHhfYWM5N190cnlfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAjaWZkZWYgQ09ORklHX1BYQTI1eAotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKQorCWlmIChjcHVfaXNfcHhhMjV4KCkpCiAJCXB4YV9hYzk3X3dhcm1fcHhhMjV4KCk7CiAJZWxzZQogI2VuZGlmCkBAIC0yMzAsNyArMjMwLDcgQEAKIGJvb2wgcHhhMnh4X2FjOTdfdHJ5X2NvbGRfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewogI2lmZGVmIENPTkZJR19QWEEyNXgKLQlpZiAoY3B1X2lzX3B4YTIxeCgpIHx8IGNwdV9pc19weGEyNXgoKSkKKwlpZiAoY3B1X2lzX3B4YTI1eCgpKQogCQlweGFfYWM5N19jb2xkX3B4YTI1eCgpOwogCWVsc2UKICNlbmRpZgpAQCAtMzAxLDcgKzMwMSw3IEBACiAKIGludCBweGEyeHhfYWM5N19od19yZXN1bWUodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTIxeCgpIHx8IGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpIHsKKwlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRCk7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzI4X0JJVENMS19BQzk3X01EKTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgeworCWlmIChjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKSB7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMxX1NZTkNfQUM5N19NRCk7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMwX1NEQVRBX09VVF9BQzk3X01EKTsKIAkJcHhhX2dwaW9fbW9kZShHUElPMjhfQklUQ0xLX0FDOTdfTUQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA4YWY0NjdkLi5lZjIzNTJjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNTQ5LDkgKzU0OSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogI2lmbmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAogCWlmICghY2FyZC0+Y2FyZF9kZXYpIHsKLQkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIGNhcmQtPmRldiwKLQkJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkJCSAgICAgICAiY2FyZCVpIiwgY2FyZC0+bnVtYmVyKTsKKwkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBjYXJkLT5kZXYsCisJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKKwkJCQkJICAgICAgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOwogCQlpZiAoSVNfRVJSKGNhcmQtPmNhcmRfZGV2KSkKIAkJCWNhcmQtPmNhcmRfZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDgxMzNhMmIuLmJkMmQ5ZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0xNDcsNiArMTQ3LDkgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWlmICghamFjaykKKwkJcmV0dXJuOworCiAJaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCiAJCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19IRUFEUEhPTkVfSU5TRVJULAogCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19IRUFEUEhPTkUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA2ZWE1Y2ZiLi45MjE2OTEwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtOTA4LDEyICs5MDgsMTIgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19ydWxlX2FkZCk7CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21hc2sKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrIC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSAzMi1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzayhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJICAgICAgIHVfaW50MzJfdCBtYXNrKQpAQCAtOTI4LDEyICs5MjgsMTIgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0IC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIDY0Yml0IGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSA2NC1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkJIHVfaW50NjRfdCBtYXNrKQpAQCAtOTQ5LDcgKzk0OSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyIC0gYXBwbHkgYW4gaW50ZWdlciBjb25zdHJhaW50IHRvIGFuIGludGVydmFsCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgaW50ZWdlciBjb25zdHJhaW50CiAgKgpAQCAtOTY0LDcgKzk2NCw3IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4IC0gYXBwbHkgYSBtaW4vbWF4IHJhbmdlIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYW5nZQogICogQG1pbjogdGhlIG1pbmltYWwgdmFsdWUKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IC0gYXBwbHkgYSBsaXN0IG9mIGNvbnN0cmFpbnRzIHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBsaXN0IGNvbnN0cmFpbnQKQEAgLTEwMzEsNyArMTAzMSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRudW1zIC0gYXBwbHkgcmF0bnVtcyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRudW1zIGNvbnN0cmFpbnQKQEAgLTEwNjQsNyArMTA2NCw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zIC0gYXBwbHkgcmF0ZGVucyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRkZW5zIGNvbnN0cmFpbnQKQEAgLTEwOTUsNyArMTA5NSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cworICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgbXNiaXRzIHJ1bGUKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAd2lkdGg6IHNhbXBsZSBiaXRzIHdpZHRoCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogfQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcCAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgc3RlcCBydWxlCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBzdGVwIGNvbnN0cmFpbnQKQEAgLTExNTQsNyArMTE1NCw3IEBACiB9CQkKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MgorICogc25kX3BjbV9od19jb25zdHJhaW50X3BvdzIgLSBhZGQgYSBodyBjb25zdHJhaW50IHBvd2VyLW9mLTIgcnVsZQogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgcG93ZXItb2YtMiBjb25zdHJhaW50CkBAIC0xMjAyLDEzICsxMjAyLDEzIEBACiBFWFBPUlRfU1lNQk9MKF9zbmRfcGNtX2h3X3BhcmFtc19hbnkpOwogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUKKyAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUgLSByZXR1cm4gQHBhcmFtcyBmaWVsZCBAdmFyIHZhbHVlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBmaWVsZCBQQVIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlIAotICogIGRlZmluZWQgYnkgUEFSQU1TLiBSZXR1cm4gLUVJTlZBTCBvdGhlcndpc2UKKyAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIEB2YXIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlCisgKiBkZWZpbmVkIGJ5IEBwYXJhbXMuIFJldHVybiAtJUVJTlZBTCBvdGhlcndpc2UuCiAgKi8KIGludCBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgc25kX3BjbV9od19wYXJhbV90IHZhciwgaW50ICpkaXIpCkBAIC0xMjcxLDEzICsxMjcxLDEzIEBACiAKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0CisgKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1pbmltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzID4gbWluaW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1pbmltdW0uCiAgKi8KQEAgLTEzMTcsMTMgKzEzMTcsMTMgQEAKIAogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fbGFzdAorICogc25kX3BjbV9od19wYXJhbV9sYXN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1heGltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzIDwgbWF4aW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1heGltdW0uCiAgKi8KQEAgLTEzNDUsMTEgKzEzNDUsMTEgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19wYXJhbV9sYXN0KTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2Nob29zZQorICogc25kX3BjbV9od19wYXJhbV9jaG9vc2UgLSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIGRlZmluZWQgYnkgQHBhcmFtcwogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKgotICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUworICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IEBwYXJhbXMuCiAgKiBUaGUgY29uZmlndXJhdGlvbiBjaG9zZW4gaXMgdGhhdCBvYnRhaW5lZCBmaXhpbmcgaW4gdGhpcyBvcmRlcjoKICAqIGZpcnN0IGFjY2VzcywgZmlyc3QgZm9ybWF0LCBmaXJzdCBzdWJmb3JtYXQsIG1pbiBjaGFubmVscywKICAqIG1pbiByYXRlLCBtaW4gcGVyaW9kIHRpbWUsIG1heCBidWZmZXIgc2l6ZSwgbWluIHRpY2sgdGltZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWlzYy5jIGIvc291bmQvY29yZS9wY21fbWlzYy5jCmluZGV4IDg5YjdmNTQuLmVhMmJmODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21pc2MuYworKysgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKQEAgLTMxOSw2ICszMTksNyBAQAogLyoqCiAgKiBzbmRfcGNtX2Zvcm1hdF9zaXplIC0gcmV0dXJuIHRoZSBieXRlIHNpemUgb2Ygc2FtcGxlcyBvbiB0aGUgZ2l2ZW4gZm9ybWF0CiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGNoZWNrCisgKiBAc2FtcGxlczogc2FtcGxpbmcgcmF0ZQogICoKICAqIFJldHVybnMgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gc2FtcGxlcyBmb3IgdGhlIGZvcm1hdCwgb3IgYQogICogbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB1bmtub3duIGZvcm1hdC4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZTYxZTEyNS4uYWVmMTg2ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC04NzUsMTAgKzg3NSw4IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3RhcnQKKyAqIHNuZF9wY21fc3RhcnQgLSBzdGFydCBhbGwgbGlua2VkIHN0cmVhbXMKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCi0gKgotICogU3RhcnQgYWxsIGxpbmtlZCBzdHJlYW1zLgogICovCiBpbnQgc25kX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTkyNiwxMiArOTI0LDExIEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3RvcAorICogc25kX3BjbV9zdG9wIC0gdHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwCiAgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbSBpbnN0YW5jZQogICogQHN0YXRlOiBQQ00gc3RhdGUgYWZ0ZXIgc3RvcHBpbmcgdGhlIHN0cmVhbQogICoKLSAqIFRyeSB0byBzdG9wIGFsbCBydW5uaW5nIHN0cmVhbXMgaW4gdGhlIHN1YnN0cmVhbSBncm91cC4KLSAqIFRoZSBzdGF0ZSBvZiBlYWNoIHN0cmVhbSBpcyBjaGFuZ2VkIHRvIHRoZSBnaXZlbiB2YWx1ZSBhZnRlciB0aGF0IHVuY29uZGl0aW9uYWxseS4KKyAqIFRoZSBzdGF0ZSBvZiBlYWNoIHN0cmVhbSBpcyB0aGVuIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHN0YXRlIHVuY29uZGl0aW9uYWxseS4KICAqLwogaW50IHNuZF9wY21fc3RvcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHN0YXRlKQogewpAQCAtOTQxLDExICs5MzgsMTAgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9zdG9wKTsKIAogLyoqCi0gKiBzbmRfcGNtX2RyYWluX2RvbmUKKyAqIHNuZF9wY21fZHJhaW5fZG9uZSAtIHN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjawogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0KICAqCi0gKiBTdG9wIHRoZSBETUEgb25seSB3aGVuIHRoZSBnaXZlbiBzdHJlYW0gaXMgcGxheWJhY2suCi0gKiBUaGUgc3RhdGUgaXMgY2hhbmdlZCB0byBTRVRVUC4KKyAqIEFmdGVyIHN0b3BwaW5nLCB0aGUgc3RhdGUgaXMgY2hhbmdlZCB0byBTRVRVUC4KICAqIFVubGlrZSBzbmRfcGNtX3N0b3AoKSwgdGhpcyBhZmZlY3RzIG9ubHkgdGhlIGdpdmVuIHN0cmVhbS4KICAqLwogaW50IHNuZF9wY21fZHJhaW5fZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTEwNjUsMTAgKzEwNjEsOSBAQAogfTsKIAogLyoqCi0gKiBzbmRfcGNtX3N1c3BlbmQKKyAqIHNuZF9wY21fc3VzcGVuZCAtIHRyaWdnZXIgU1VTUEVORCB0byBhbGwgbGlua2VkIHN0cmVhbXMKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtCiAgKgotICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcy4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgogICovCiBpbnQgc25kX3BjbV9zdXNwZW5kKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTA4OCwxMCArMTA4Myw5IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fc3VzcGVuZCk7CiAKIC8qKgotICogc25kX3BjbV9zdXNwZW5kX2FsbAorICogc25kX3BjbV9zdXNwZW5kX2FsbCAtIHRyaWdnZXIgU1VTUEVORCB0byBhbGwgc3Vic3RyZWFtcyBpbiB0aGUgZ2l2ZW4gcGNtCiAgKiBAcGNtOiB0aGUgUENNIGluc3RhbmNlCiAgKgotICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20uCiAgKiBBZnRlciB0aGlzIGNhbGwsIGFsbCBzdHJlYW1zIGFyZSBjaGFuZ2VkIHRvIFNVU1BFTkRFRCBzdGF0ZS4KICAqLwogaW50IHNuZF9wY21fc3VzcGVuZF9hbGwoc3RydWN0IHNuZF9wY20gKnBjbSkKQEAgLTEzMTMsMTEgKzEzMDcsOSBAQAogfTsKIAogLyoqCi0gKiBzbmRfcGNtX3ByZXBhcmUKKyAqIHNuZF9wY21fcHJlcGFyZSAtIHByZXBhcmUgdGhlIFBDTSBzdWJzdHJlYW0gdG8gYmUgdHJpZ2dlcmFibGUKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKiBAZmlsZTogZmlsZSB0byByZWZlciBmX2ZsYWdzCi0gKgotICogUHJlcGFyZSB0aGUgUENNIHN1YnN0cmVhbSB0byBiZSB0cmlnZ2VyYWJsZS4KICAqLwogc3RhdGljIGludCBzbmRfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCBjMDY4NWUyLi40NGE2OWJiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NvdW5kLmMKKysrIGIvc291bmQvY29yZS9zb3VuZC5jCkBAIC0yNzQsOSArMjc0LDggQEAKIAkJcmV0dXJuIG1pbm9yOwogCX0KIAlzbmRfbWlub3JzW21pbm9yXSA9IHByZWc7Ci0JcHJlZy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBkZXZpY2UsCi0JCQkJCSAgTUtERVYobWFqb3IsIG1pbm9yKSwKLQkJCQkJICBwcml2YXRlX2RhdGEsICIlcyIsIG5hbWUpOworCXByZWctPmRldiA9IGRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIGRldmljZSwgTUtERVYobWFqb3IsIG1pbm9yKSwKKwkJCQkgIHByaXZhdGVfZGF0YSwgIiVzIiwgbmFtZSk7CiAJaWYgKElTX0VSUihwcmVnLT5kZXYpKSB7CiAJCXNuZF9taW5vcnNbbWlub3JdID0gTlVMTDsKIAkJbXV0ZXhfdW5sb2NrKCZzb3VuZF9tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggZTVlNzQ5Zi4uNzNiZTdlMSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNTEsNyArNTEsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgMjU2LCBVSU5UX01BWCk7Ci0JaWYgKGVycikgPCAwKQorCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IGI0OTM2NjAuLmU1ZDQyMzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIE1PRE5BTUUgInNoX2RhY19hdWRpbyIKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCA3ZDg5YzA4Li42MWFhZWRhIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC01NjAsMTkgKzU2MCwxOCBAQAogCXNvdW5kX2RtYXBfZmxhZyA9IChkbWFidWYgPiAwID8gMSA6IDApOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2X2xpc3QpOyBpKyspIHsKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKFNPVU5EX01BSk9SLCBkZXZfbGlzdFtpXS5taW5vciksCi0JCQkJICAgICAgTlVMTCwgIiVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCisJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgIiVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CiAKIAkJaWYgKCFkZXZfbGlzdFtpXS5udW0pCiAJCQljb250aW51ZTsKIAogCQlmb3IgKGogPSAxOyBqIDwgKmRldl9saXN0W2ldLm51bTsgaisrKQotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwKLQkJCQkJCSAgICBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKLQkJCQkJICAgICAgTlVMTCwKLQkJCQkJICAgICAgIiVzJWQiLCBkZXZfbGlzdFtpXS5uYW1lLCBqKTsKKwkJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCisJCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsCisJCQkJCSAgICBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKKwkJCQkgICAgICBOVUxMLCAiJXMlZCIsIGRldl9saXN0W2ldLm5hbWUsIGopOwogCX0KIAogCWlmIChzb3VuZF9uYmxvY2tzID49IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggYTdkODk2Ni4uODhmYmYyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtNzU5LDcgKzc1OSw2IEBACiAJCQkgICAgICAgU1BDU19DSEFOTkVMTlVNX0xFRlQgfCBTUENTX1NPVVJDRU5VTV9VTlNQRUMgfAogCQkJICAgICAgIFNQQ1NfR0VORVJBVElPTlNUQVRVUyB8IDB4MDAwMDEyMDAgfAogCQkJICAgICAgIDB4MDAwMDAwMDAgfCBTUENTX0VNUEhBU0lTX05PTkUgfCBTUENTX0NPUFlSSUdIVCApOwotCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCAxYTY1Nzc1Li4yZWVkMmM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKIAlpbmZvLT5uYW1lID0gIk5WSURJQSBIRE1JIjsKKwlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAwYjZlNjgyLi5lNzI3MDdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtODIyLDYgKzgyMiwyNyBAQAogCQkJICAgIHNwZWMtPmphY2tfcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjX21pY19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQgbWljX25pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdOworCXVuc2lnbmVkIGludCBmbWljX25pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdOworCXVuc2lnbmVkIGludCBtaXhfbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbMF07CisJdW5zaWduZWQgaW50IGNhcHNyY19pZHhfbWljLCBjYXBzcmNfaWR4X2ZtaWM7CisKKwljYXBzcmNfaWR4X21pYyA9IG1pY19uaWQgLSAweDE4OworCWNhcHNyY19pZHhfZm1pYyA9IGZtaWNfbmlkIC0gMHgxODsKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBtaWNfbmlkLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbWl4X25pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJICAgIDB4NzAwMCB8IChjYXBzcmNfaWR4X21pYyA8PCA4KSB8IChwcmVzZW50ID8gMCA6IDB4ODApKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBtaXhfbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkgICAgMHg3MDAwIHwgKGNhcHNyY19pZHhfZm1pYyA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGIsIEhEQV9JTlBVVCwgY2Fwc3JjX2lkeF9mbWljLAorCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOworfQorCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCiBzdGF0aWMgdm9pZCBhbGNfc2t1X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtODI5LDEwICs4NTAsMTcgQEAKIAkJcmVzID4+PSAyODsKIAllbHNlCiAJCXJlcyA+Pj0gMjY7Ci0JaWYgKHJlcyAhPSBBTEM4ODBfSFBfRVZFTlQpCi0JCXJldHVybjsKKwlpZiAocmVzID09IEFMQzg4MF9IUF9FVkVOVCkKKwkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CiAKKwlpZiAocmVzID09IEFMQzg4MF9NSUNfRVZFTlQpCisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBhbGNfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CiAJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKIC8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIEFMQzg4OCB2YXJpYW50cyAqLwpAQCAtMTAxOCwxMCArMTA0NiwxNyBAQAogCQllbHNlCiAJCQlyZXR1cm47CiAJfQorCWlmIChzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwgMCwKKwkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCUFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UKTsKIAotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCi0JCQkgICAgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlQpOworCWlmIChzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSAmJgorCQlzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKKwkJCXNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLCAwLAorCQkJQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UKTsKIAogCXNwZWMtPnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudDsKIH0KQEAgLTM4MDgsNyArMzg0Myw3IEBACiAJYWxjODgwX2F1dG9faW5pdF9leHRyYV9vdXQoY29kZWMpOwogCWFsYzg4MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtNTIxOSw3ICs1MjU0LDcgQEAKIAlhbGMyNjBfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJYWxjMjYwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC02NjI5LDcgKzY2NjQsNyBAQAogCWFsYzg4Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hbGM4ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOyAvKiBjYWxsZWQgaW4gcGF0Y2hfYWxjODgyKCkgKi8KQEAgLTgzMDYsOCArODM0MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE0ZiwgIkhQIFNhbWJhIiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MCwgIkhQIEx1Y2tub3ciLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYxLCAiSFAgTmV0dGxlIiwgQUxDODgzXzZTVF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzMsICJBc3VzIE05MFYiLCBBTEM4ODhfQVNVU19NOTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjQ5LCAiQXN1cyBNMkEtVk0gSERNSSIsIEFMQzg4M18zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxNywgIkFzdXMgTTkwViIsIEFMQzg4OF9BU1VTX005MFYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzNWYsICJBc3VzIEVlZSAxNjAxIiwgQUxDODg4X0FTVVNfRUVFMTYwMSksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNlOCwgIkZveGNvbm4gUDM1QVgtUyIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHg2NjY4LCAiRm94Y29ubiIsIEFMQzg4M182U1RfRElHKSwKQEAgLTg3NTgsNyArODc5Myw3IEBACiAJYWxjODgzX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzg4M19hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg4MyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTg4MDIsOCArODgzNywxMyBAQAogCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDEwZWMwODg4OgotCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7Ci0JCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODg4IERpZ2l0YWwiOworCQlpZiAoY29kZWMtPnJldmlzaW9uX2lkID09IDB4MTAwMTAxKSB7CisJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMTIwMCBBbmFsb2ciOworCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEMxMjAwIERpZ2l0YWwiOworCQl9IGVsc2UgeworCQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OCBBbmFsb2ciOworCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODggRGlnaXRhbCI7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDEwZWMwODg5OgogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg5IEFuYWxvZyI7CkBAIC0xMDI4NSw3ICsxMDMyNSw3IEBACiAJYWxjMjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzI2Ml9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtMTAzNDMsNyArMTAzODMsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgZHluYWJvb2sgU1MgUlgxIiwKIAkJICAgICAgQUxDMjYyX1RPU0hJQkFfUlgxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMjY4LCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmN2IsICJUb3NoaWJhIFMwNiIsIEFMQzI2Ml9UT1NISUJBX1MwNiksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTM5NywgIkZ1aml0c3UiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTQyZCwgIkZ1aml0c3UgTGlmZWJvb2sgRTg0MTAiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzMiwgIlNhbXN1bmcgUTEgVWx0cmEiLCBBTEMyNjJfVUxUUkEpLApAQCAtMTE0MTcsNyArMTE0NTcsNyBAQAogCWFsYzI2OF9hdXRvX2luaXRfbW9ub19zcGVha2VyX291dChjb2RlYyk7CiAJYWxjMjY4X2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKIC8qCkBAIC0xMjIwMCw3ICsxMjI0MCw3IEBACiAJYWxjMjY5X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzI2OV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtMTMyODEsNyArMTMzMjEsNyBAQAogCWFsYzg2MV9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGM4NjFfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTE0MzkzLDcgKzE0NDMzLDcgQEAKIAlhbGM4NjF2ZF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4NjF2ZF9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg2MXZkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTU2NjcsNyArMTU3MDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX001MVZBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX0c1MFYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIEc1MFYiLCBBTEM2NjNfQVNVU19HNTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjkwLCAiQVNVUyBQNUdDLU1YIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmExLCAiQVNVUyBFZWVwYyIsIEFMQzY2Ml9BU1VTX0VFRVBDX1A3MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZDEsICJBU1VTIEVlZXBjIEVQMjAiLCBBTEM2NjJfQVNVU19FRUVQQ19FUDIwKSwKQEAgLTE1NjgwLDYgKzE1NzIwLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE2MjIzLDcgKzE2MjY0LDcgQEAKIAlhbGM2NjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjNjYyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjNjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTYyNjgsNiArMTYzMDksOSBAQAogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMpIHsKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzY2MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzY2MyBEaWdpdGFsIjsKKwl9IGVsc2UgaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MikgeworCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMjcyIEFuYWxvZyI7CisJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMjcyIERpZ2l0YWwiOwogCX0gZWxzZSB7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM2NjIgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM2NjIgRGlnaXRhbCI7CkBAIC0xNjMwNSw2ICsxNjM0OSw3IEBACiAJeyAuaWQgPSAweDEwZWMwMjY3LCAubmFtZSA9ICJBTEMyNjciLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjggfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjgsIC5uYW1lID0gIkFMQzI2OCIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OCB9LAogCXsgLmlkID0gMHgxMGVjMDI2OSwgLm5hbWUgPSAiQUxDMjY5IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCisJeyAuaWQgPSAweDEwZWMwMjcyLCAubmFtZSA9ICJBTEMyNzIiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDY2MCwgLm5hbWUgPSAiQUxDNjYwLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKQEAgLTE2MzIzLDcgKzE2MzY4LDEwIEBACiAJeyAuaWQgPSAweDEwZWMwODg1LCAucmV2ID0gMHgxMDAxMDMsIC5uYW1lID0gIkFMQzg4OUEiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sIC8qIHNob3VsZCBiZSBwYXRjaF9hbGM4ODMoKSBpbiBmdXR1cmUgKi8KIAl7IC5pZCA9IDB4MTBlYzA4ODUsIC5uYW1lID0gIkFMQzg4NSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAorCXsgLmlkID0gMHgxMGVjMDg4NywgLm5hbWUgPSAiQUxDODg3IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCiAJeyAuaWQgPSAweDEwZWMwODg4LCAubmFtZSA9ICJBTEM4ODgiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKKwl7IC5pZCA9IDB4MTBlYzA4ODgsIC5yZXYgPSAweDEwMDEwMSwgLm5hbWUgPSAiQUxDMTIwMCIsCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODksIC5uYW1lID0gIkFMQzg4OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggYzU5MDY1NS4uYTJhYzcyMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjgxNiw3ICsyODE2LDcgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWQ7CisJaGRhX25pZF90IG5pZCA9IDA7CiAJaW50IGksIGVycjsKIAogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCAyMGQwZTMyLi44ZjllMzg1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTY2Niw2ICs2NjYsNyBAQAogCWNhcmQtPmF2cy5hdnNfYXVkaW9fd2lkdGggPSBQUzNBVl9DTURfQVVESU9fV09SRF9CSVRTXzE2OwogCWNhcmQtPmF2cy5hdnNfYXVkaW9fZm9ybWF0ID0gUFMzQVZfQ01EX0FVRElPX0ZPUk1BVF9QQ007CiAJY2FyZC0+YXZzLmF2c19hdWRpb19zb3VyY2UgPSBQUzNBVl9DTURfQVVESU9fU09VUkNFX1NFUklBTDsKKwltZW1jcHkoY2FyZC0+YXZzLmF2c19jc19pbmZvLCBwczNhdl9tb2RlX2NzX2luZm8sIDgpOwogCiAJcmV0ID0gc25kX3BzM19jaGFuZ2VfYXZzZXR0aW5nKGNhcmQpOwogCkBAIC02ODUsNiArNjg2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BzM19jYXJkX2luZm8gKmNhcmQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wczNfYXZzZXR0aW5nX2luZm8gYXZzOworCWludCByZXQ7CiAKIAlhdnMgPSBjYXJkLT5hdnM7CiAKQEAgLTcyOSwxOSArNzMxLDkyIEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmICgoY2FyZC0+YXZzLmF2c19hdWRpb193aWR0aCAhPSBhdnMuYXZzX2F1ZGlvX3dpZHRoKSB8fAotCSAgICAoY2FyZC0+YXZzLmF2c19hdWRpb19yYXRlICE9IGF2cy5hdnNfYXVkaW9fcmF0ZSkpIHsKLQkJY2FyZC0+YXZzID0gYXZzOwotCQlzbmRfcHMzX2NoYW5nZV9hdnNldHRpbmcoY2FyZCk7CisJbWVtY3B5KGF2cy5hdnNfY3NfaW5mbywgcHMzYXZfbW9kZV9jc19pbmZvLCA4KTsKIAorCWlmIChtZW1jbXAoJmNhcmQtPmF2cywgJmF2cywgc2l6ZW9mKGF2cykpKSB7CiAJCXByX2RlYnVnKCIlczogYWZ0ZXIgZnJlcT0lZCB3aWR0aD0lZFxuIiwgX19mdW5jX18sCiAJCQkgY2FyZC0+YXZzLmF2c19hdWRpb19yYXRlLCBjYXJkLT5hdnMuYXZzX2F1ZGlvX3dpZHRoKTsKIAotCQlyZXR1cm4gMDsKKwkJY2FyZC0+YXZzID0gYXZzOworCQlzbmRfcHMzX2NoYW5nZV9hdnNldHRpbmcoY2FyZCk7CisJCXJldCA9IDA7CiAJfSBlbHNlCi0JCXJldHVybiAxOworCQlyZXQgPSAxOworCisJLyogY2hlY2sgQ1Mgbm9uLWF1ZGlvIGJpdCBhbmQgbXV0ZSBhY2NvcmRpbmdseSAqLworCWlmIChhdnMuYXZzX2NzX2luZm9bMF0gJiAweDAyKQorCQlwczNhdl9hdWRpb19tdXRlX2FuYWxvZygxKTsgLyogbXV0ZSBpZiBub24tYXVkaW8gKi8KKwllbHNlCisJCXBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKDApOworCisJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFNQRElGIHN0YXR1cyBiaXRzIGNvbnRyb2xzCisgKi8KK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9tYXNrX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSUVDOTU4OworCXVpbmZvLT5jb3VudCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiBwczNhdl9zZXRfYXVkaW9fbW9kZSgpIGFzc3VtZXMgb25seSBjb25zdW1lciBtb2RlICovCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfY21hc2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCW1lbXNldCh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1cywgMHhmZiwgOCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9wbWFza19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9kZWZhdWx0X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCW1lbWNweSh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1cywgcHMzYXZfbW9kZV9jc19pbmZvLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaWYgKG1lbWNtcChwczNhdl9tb2RlX2NzX2luZm8sIHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCA4KSkgeworCQltZW1jcHkocHMzYXZfbW9kZV9jc19pbmZvLCB1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1cywgOCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwZGlmX2N0bHNbXSA9IHsKKwl7CisJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxDT05fTUFTSyksCisJCS5pbmZvID0gc25kX3BzM19zcGRpZl9tYXNrX2luZm8sCisJCS5nZXQgPSBzbmRfcHMzX3NwZGlmX2NtYXNrX2dldCwKKwl9LAorCXsKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAorCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLFBST19NQVNLKSwKKwkJLmluZm8gPSBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbywKKwkJLmdldCA9IHNuZF9wczNfc3BkaWZfcG1hc2tfZ2V0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLERFRkFVTFQpLAorCQkuaW5mbyA9IHNuZF9wczNfc3BkaWZfbWFza19pbmZvLAorCQkuZ2V0ID0gc25kX3BzM19zcGRpZl9kZWZhdWx0X2dldCwKKwkJLnB1dCA9IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9wdXQsCisJfSwKK307CiAKIAogc3RhdGljIGludCBzbmRfcHMzX21hcF9tbWlvKHZvaWQpCkBAIC04NDIsNyArOTE3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc25kX3BzM19kcml2ZXJfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQogewotCWludCByZXQ7CisJaW50IGksIHJldDsKIAl1NjQgbHBhcl9hZGRyLCBscGFyX3NpemU7CiAKIAlCVUdfT04oIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfUFMzX0xWMSkpOwpAQCAtOTAzLDYgKzk3OCwxNSBAQAogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5kcml2ZXIsICJQUzMiKTsKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+c2hvcnRuYW1lLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPmxvbmduYW1lLCAiUFMzIHNvdW5kIik7CisKKwkvKiBjcmVhdGUgY29udHJvbCBlbGVtZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZGlmX2N0bHMpOyBpKyspIHsKKwkJcmV0ID0gc25kX2N0bF9hZGQodGhlX2NhcmQuY2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MSgmc3BkaWZfY3Rsc1tpXSwgJnRoZV9jYXJkKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBjbGVhbl9jYXJkOworCX0KKwogCS8qIGNyZWF0ZSBQQ00gZGV2aWNlcyBpbnN0YW5jZSAqLwogCS8qIE5PVEU6dGhpcyBkcml2ZXIgd29ya3MgYXNzdW1pbmcgcGNtOnN1YnN0cmVhbSA9IDE6MSAqLwogCXJldCA9IHNuZF9wY21fbmV3KHRoZV9jYXJkLmNhcmQsCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5oIGIvc291bmQvcHBjL3NuZF9wczMuaAppbmRleCA0YjdlNmZiLi4zMjZmYjI5IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5oCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAl1aW50MzJfdCBhdnNfYXVkaW9fd2lkdGg7CiAJdWludDMyX3QgYXZzX2F1ZGlvX2Zvcm1hdDsgLyogZml4ZWQgKi8KIAl1aW50MzJfdCBhdnNfYXVkaW9fc291cmNlOyAvKiBmaXhlZCAqLworCXVuc2lnbmVkIGNoYXIgYXZzX2NzX2luZm9bOF07CiB9OwogLyoKICAqIFBTMyBhdWRpbyAnY2FyZCcgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMgYi9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jCmluZGV4IDk4YTJkNTguLmIxOTY2ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMKKysrIGIvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAKIAogCi1zdGF0aWMgY29uc3QgY2hhciAqaW50ZXJjb25bXVszXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CiAJLyogc3BlYWtlciBjb25uZWN0ZWQgdG8gU1BLT1VUICovCiAJeyJFeHQgU3BrIiwgTlVMTCwgIlNQS09VVFAifSwKIAl7IkV4dCBTcGsiLCBOVUxMLCAiU1BLT1VUTiJ9LApAQCAtMzEyLDkgKzMxMiw2IEBACiAJeyJNaWMgQmlhcyIsIE5VTEwsICJJbnQgTWljIn0sCiAJeyJNSUNOIiwgTlVMTCwgIk1pYyBCaWFzIn0sCiAJeyJNSUNQIiwgTlVMTCwgIk1pYyBCaWFzIn0sCi0KLQkvKiBUZXJtaW5hdG9yICovCi0Je05VTEwsIE5VTEwsIE5VTEx9LAogfTsKIAogCkBAIC0zMzQsMTEgKzMzMSw4IEBACiAJLyoKIAkgKiBTZXR1cCBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMKIAkgKi8KLQlmb3IgKGkgPSAwOyBpbnRlcmNvbltpXVswXSAhPSBOVUxMOyBpKyspIHsKLQkJc25kX3NvY19kYXBtX2Nvbm5lY3RfaW5wdXQoY29kZWMsCi0JCQkJCSAgIGludGVyY29uW2ldWzBdLAotCQkJCQkgICBpbnRlcmNvbltpXVsxXSwgaW50ZXJjb25baV1bMl0pOwotCX0KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKwogCiAKIAkvKiBhbHdheXMgY29ubmVjdGVkIHBpbnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCA0OTc1ZDg1Li4zOGEwZTNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC02OCw3ICs2OCw3IEBACiAJZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjYKLQl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIgaWYgU05EX1NPQ19PRl9TSU1QTEUKIAlkZXBlbmRzIG9uIFNQSQogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMzWApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IGJhYzc4MTUuLjQ0MzA4ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQogewogCi0JdTggZGF0YTsKKwl1OCBkYXRhWzJdOwogCiAJLyogVExWMzIwQUlDMjMgaGFzIDcgYml0IGFkZHJlc3MgYW5kIDkgYml0cyBvZiBkYXRhCiAJICogc28gd2UgbmVlZCB0byBzd2l0Y2ggb25lIGRhdGEgYml0IGludG8gcmVnIGFuZCByZXN0CkBAIC05NiwxMiArOTYsMTIgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWRhdGEgPSAocmVnIDw8IDEpIHwgKHZhbHVlID4+IDggJiAweDAxKTsKKwlkYXRhWzBdID0gKHJlZyA8PCAxKSB8ICh2YWx1ZSA+PiA4ICYgMHgwMSk7CisJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKIAogCXRsdjMyMGFpYzIzX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsCi0JCQkgICAgKHZhbHVlICYgMHhmZikpID09IDApCisJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQogCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX0VSUiAiJXMgY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCBfX2Z1bmNfXywKQEAgLTY3NCw3ICs2NzQsNyBAQAogCiAJdGx2MzIwYWljMjNfc29jZGV2ID0gc29jZGV2OwogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCkgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YTsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCkgaTJjX21hc3Rlcl9zZW5kOwogCWNvZGVjLT5od19yZWFkID0gTlVMTDsKIAlyZXQgPSBpMmNfYWRkX2RyaXZlcigmdGx2MzIwYWljMjNfaTJjX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCmluZGV4IDBhMDYzYTkuLjg1M2IzM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKQEAgLTQzLDYgKzQzLDcgQEAKIHN0cnVjdCBvbWFwX21jYnNwX2RhdGEgewogCXVuc2lnbmVkIGludAkJCWJ1c19pZDsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnCXJlZ3M7CisJdW5zaWduZWQgaW50CQkJZm10OwogCS8qCiAJICogRmxhZ3MgaW5kaWNhdGluZyBpcyB0aGUgYnVzIGFscmVhZHkgYWN0aXZhdGVkIGFuZCBjb25maWd1cmVkIGJ5CiAJICogYW5vdGhlciBzdWJzdHJlYW0KQEAgLTIwMCw2ICsyMDEsNyBAQAogCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSB0b19tY2JzcChjcHVfZGFpLT5wcml2YXRlX2RhdGEpOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgKnJlZ3MgPSAmbWNic3BfZGF0YS0+cmVnczsKIAlpbnQgZG1hLCBidXNfaWQgPSBtY2JzcF9kYXRhLT5idXNfaWQsIGlkID0gY3B1X2RhaS0+aWQ7CisJaW50IHdsZW47CiAJdW5zaWduZWQgbG9uZyBwb3J0OwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CkBAIC0yNDQsMTkgKzI0NiwyOSBAQAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKIAkJLyogU2V0IHdvcmQgbGVuZ3RocyAqLworCQl3bGVuID0gMTY7CiAJCXJlZ3MtPnJjcjIJfD0gUldETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT5yY3IxCXw9IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+eGNyMgl8PSBYV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNik7CiAJCXJlZ3MtPnhjcjEJfD0gWFdETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpOwotCQkvKiBTZXQgRlMgcGVyaW9kIGFuZCBsZW5ndGggaW4gdGVybXMgb2YgYml0IGNsb2NrIHBlcmlvZHMgKi8KLQkJcmVncy0+c3JncjIJfD0gRlBFUigxNiAqIDIgLSAxKTsKLQkJcmVncy0+c3JncjEJfD0gRldJRCgxNiAtIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBVbnN1cHBvcnRlZCBQQ00gZm9ybWF0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIFNldCBGUyBwZXJpb2QgYW5kIGxlbmd0aCBpbiB0ZXJtcyBvZiBiaXQgY2xvY2sgcGVyaW9kcyAqLworCXN3aXRjaCAobWNic3BfZGF0YS0+Zm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJcmVncy0+c3JncjIJfD0gRlBFUih3bGVuICogMiAtIDEpOworCQlyZWdzLT5zcmdyMQl8PSBGV0lEKHdsZW4gLSAxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJcmVncy0+c3JncjIJfD0gRlBFUih3bGVuICogMiAtIDEpOworCQlyZWdzLT5zcmdyMQl8PSBGV0lEKDApOworCQlicmVhazsKKwl9CisKIAlvbWFwX21jYnNwX2NvbmZpZyhidXNfaWQsICZtY2JzcF9kYXRhLT5yZWdzKTsKIAltY2JzcF9kYXRhLT5jb25maWd1cmVkID0gMTsKIApAQCAtMjcyLDEwICsyODQsMTIgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhICptY2JzcF9kYXRhID0gdG9fbWNic3AoY3B1X2RhaS0+cHJpdmF0ZV9kYXRhKTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnICpyZWdzID0gJm1jYnNwX2RhdGEtPnJlZ3M7CisJdW5zaWduZWQgaW50IHRlbXBfZm10ID0gZm10OwogCiAJaWYgKG1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQpCiAJCXJldHVybiAwOwogCisJbWNic3BfZGF0YS0+Zm10ID0gZm10OwogCW1lbXNldChyZWdzLCAwLCBzaXplb2YoKnJlZ3MpKTsKIAkvKiBHZW5lcmljIE1jQlNQIHJlZ2lzdGVyIHNldHRpbmdzICovCiAJcmVncy0+c3BjcjIJfD0gWElOVE0oMykgfCBGUkVFOwpAQCAtMjkzLDYgKzMwNyw4IEBACiAJCS8qIDAtYml0IGRhdGEgZGVsYXkgKi8KIAkJcmVncy0+cmNyMiAgICAgIHw9IFJEQVRETFkoMCk7CiAJCXJlZ3MtPnhjcjIgICAgICB8PSBYREFURExZKDApOworCQkvKiBJbnZlcnQgYml0IGNsb2NrIGFuZCBGUyBwb2xhcml0eSBjb25maWd1cmF0aW9uIGZvciBEU1BfQSAqLworCQl0ZW1wX2ZtdCBePSBTTkRfU09DX0RBSUZNVF9JQl9JRjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgKi8KQEAgLTMxNiw3ICszMzIsNyBAQAogCX0KIAogCS8qIFNldCBiaXQgY2xvY2sgKENMS1gvQ0xLUikgYW5kIEZTIHBvbGFyaXRpZXMgKi8KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJc3dpdGNoICh0ZW1wX2ZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKIAkJLyoKIAkJICogTm9ybWFsIEJDTEsgKyBGUy4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggZWZiZDBiMy4uNzM1MWRiOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTgzMSw3ICs4MzEsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJYXNvY19kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKCJhc29jIiwgTlVMTCk7Ci0JaWYgKCFJU19FUlIoYXNvY19kZWJ1Z2ZzKSkKKwlpZiAoIUlTX0VSUihhc29jX2RlYnVnZnMpICYmIGFzb2NfZGVidWdmcykKIAkJZGVidWdmc19jcmVhdGVfdTMyKCJkYXBtX3BvcF90aW1lIiwgMDc0NCwgYXNvY19kZWJ1Z2ZzLAogCQkJCSAgICZwb3BfdGltZSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IDRhZTA3ZTIuLmZhZWY4N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTIyMCw5ICsyMjAsOCBAQAogCWVsc2UKIAkJc3ByaW50ZihzLT5uYW1lLCAic291bmQvJXMlZCIsIG5hbWUsIHIgLyBTT1VORF9TVEVQKTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgZGV2LAotCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsIHMtPnVuaXRfbWlub3IpLAotCQkJICAgICAgTlVMTCwgcy0+bmFtZSs2KTsKKwlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBkZXYsIE1LREVWKFNPVU5EX01BSk9SLCBzLT51bml0X21pbm9yKSwKKwkJICAgICAgTlVMTCwgcy0+bmFtZSs2KTsKIAlyZXR1cm4gcjsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggYjQ0MWZlMi4uYzI1MTViNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTE4LDEyICsxMTgsMTEgQEAKIAl2b2lkICp2YWRkcjsKIAlzdHJ1Y3QgdXMxMjJsICp1czEyMmwgPSBhcmVhLT52bV9wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzYl9zdHJlYW0gKnM7Ci0JaW50IHZtX2YgPSBWTV9GQVVMVF9TSUdCVVM7CiAKIAltdXRleF9sb2NrKCZ1czEyMmwtPm11dGV4KTsKIAlzID0gdXMxMjJsLT5zay5zOwogCWlmICghcykKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCiAJb2Zmc2V0ID0gdm1mLT5wZ29mZiA8PCBQQUdFX1NISUZUOwogCWlmIChvZmZzZXQgPCBQQUdFX0FMSUdOKHMtPnJlYWRfc2l6ZSkpCkBAIC0xMzEsNyArMTMwLDcgQEAKIAllbHNlIHsKIAkJb2Zmc2V0IC09IFBBR0VfQUxJR04ocy0+cmVhZF9zaXplKTsKIAkJaWYgKG9mZnNldCA+PSBQQUdFX0FMSUdOKHMtPndyaXRlX3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIHVubG9jazsKIAogCQl2YWRkciA9IHVzMTIybC0+c2sud3JpdGVfcGFnZSArIG9mZnNldDsKIAl9CkBAIC0xNDEsOSArMTQwLDExIEBACiAJbXV0ZXhfdW5sb2NrKCZ1czEyMmwtPm11dGV4KTsKIAogCXZtZi0+cGFnZSA9IHBhZ2U7Ci0Jdm1fZiA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIHZtX2Y7CisKKwlyZXR1cm4gMDsKK3VubG9jazoKKwltdXRleF91bmxvY2soJnVzMTIybC0+bXV0ZXgpOworCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYl9zdHJlYW1faHdkZXBfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCBjMGQyMjg3Li41Mzc3MmJiIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAjaW5jbHVkZSAibGFwaWMuaCIKKyNpbmNsdWRlICJpcnEuaCIKIAogI2lmIDAKICNkZWZpbmUgaW9hcGljX2RlYnVnKGZtdCxhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgZm10LCMjYXJnKQpAQCAtMjg1LDI2ICsyODYsMzEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBnc2kpCitzdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgZ3NpLAorCQkJCSAgICBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqZW50OwogCiAJZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbZ3NpXTsKLQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKIAotCWVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAwOwotCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKLQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBnc2kpOworCisJaWYgKHRyaWdnZXJfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykgeworCQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKKwkJZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDA7CisJCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKKwkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgZ3NpKTsKKwl9CiB9CiAKLXZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvcikKK3ZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSkKIHsKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLT5hcmNoLnZpb2FwaWM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSU9BUElDX05VTV9QSU5TOyBpKyspCiAJCWlmIChpb2FwaWMtPnJlZGlydGJsW2ldLmZpZWxkcy52ZWN0b3IgPT0gdmVjdG9yKQotCQkJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCBpKTsKKwkJCV9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKGlvYXBpYywgaSwgdHJpZ2dlcl9tb2RlKTsKIH0KIAogc3RhdGljIGludCBpb2FwaWNfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCkBAIC0zODAsNyArMzg2LDcgQEAKIAkJYnJlYWs7CiAjaWZkZWYJQ09ORklHX0lBNjQKIAljYXNlIElPQVBJQ19SRUdfRU9JOgotCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLT5rdm0sIGRhdGEpOworCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLT5rdm0sIGRhdGEsIElPQVBJQ19MRVZFTF9UUklHKTsKIAkJYnJlYWs7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmggYi92aXJ0L2t2bS9pb2FwaWMuaAppbmRleCA3ZjE2Njc1Li5jZDdhZTc2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuaAorKysgYi92aXJ0L2t2bS9pb2FwaWMuaApAQCAtNTgsNiArNTgsNyBAQAogCX0gcmVkaXJ0YmxbSU9BUElDX05VTV9QSU5TXTsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSBkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOworCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CiB9OwogCiAjaWZkZWYgREVCVUcKQEAgLTc4LDE2ICs3OSw5IEBACiAJcmV0dXJuIGt2bS0+YXJjaC52aW9hcGljOwogfQogCi0jaWZkZWYgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUgaW50IGlycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHU4IHZlY3RvciwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXRtYXApOwotdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yKTsKK3ZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSk7CiBpbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaXJxX2NvbW0uYyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNjlmNQotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGlycV9jb21tLmM6IENvbW1vbiBBUEkgZm9yIGluIGtlcm5lbCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKiBBdXRob3JzOgorICogICBZYW96dSAoRWRkaWUpIERvbmcgPEVkZGllLmRvbmdAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlICJpcnEuaCIKKworI2luY2x1ZGUgImlvYXBpYy5oIgorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQgKi8KK3ZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCit7CisJLyogTm90IHBvc3NpYmxlIHRvIGRldGVjdCBpZiB0aGUgZ3Vlc3QgdXNlcyB0aGUgUElDIG9yIHRoZQorCSAqIElPQVBJQy4gIFNvIHNldCB0aGUgYml0IGluIGJvdGguIFRoZSBndWVzdCB3aWxsIGlnbm9yZQorCSAqIHdyaXRlcyB0byB0aGUgdW51c2VkIG9uZS4KKwkgKi8KKwlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGlycSwgbGV2ZWwpOworI2lmZGVmIENPTkZJR19YODYKKwlrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgaXJxLCBsZXZlbCk7CisjZW5kaWYKK30KKwordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGdzaSkKK3sKKwlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraWFuLCBuLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCwgbGluaykKKwkJaWYgKGtpYW4tPmdzaSA9PSBnc2kpCisJCQlraWFuLT5pcnFfYWNrZWQoa2lhbik7Cit9CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKK3sKKwlobGlzdF9hZGRfaGVhZCgma2lhbi0+bGluaywgJmt2bS0+YXJjaC5pcnFfYWNrX25vdGlmaWVyX2xpc3QpOworfQorCit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQoreworCWhsaXN0X2RlbCgma2lhbi0+bGluayk7Cit9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA3ZGQ5YjBiLi5jZjBhYjhlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTUxLDYgKzUxLDEyIEBACiAjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKICNlbmRpZgogCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgImlycS5oIgorI2VuZGlmCisKIE1PRFVMRV9BVVRIT1IoIlF1bXJhbmV0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTcxLDExICs3NywyNTMgQEAKIAogYm9vbCBrdm1fcmVib290aW5nOwogCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorc3RhdGljIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqa3ZtX2ZpbmRfYXNzaWduZWRfZGV2KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICAgICBpbnQgYXNzaWduZWRfZGV2X2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCisJbGlzdF9mb3JfZWFjaChwdHIsIGhlYWQpIHsKKwkJbWF0Y2ggPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsLCBsaXN0KTsKKwkJaWYgKG1hdGNoLT5hc3NpZ25lZF9kZXZfaWQgPT0gYXNzaWduZWRfZGV2X2lkKQorCQkJcmV0dXJuIG1hdGNoOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQga3ZtX2Fzc2lnbmVkX2Rldl9pbnRlcnJ1cHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldjsKKworCWFzc2lnbmVkX2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwsCisJCQkJICAgIGludGVycnVwdF93b3JrKTsKKworCS8qIFRoaXMgaXMgdGFrZW4gdG8gc2FmZWx5IGluamVjdCBpcnEgaW5zaWRlIHRoZSBndWVzdC4gV2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIChvciB0aGUgaW9hcGljIGNvZGUpIHVzZXMgYQorCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKKwkgKi8KKwltdXRleF9sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7CisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sCisJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7CisJbXV0ZXhfdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7CisJa3ZtX3B1dF9rdm0oYXNzaWduZWRfZGV2LT5rdm0pOworfQorCisvKiBGSVhNRTogSW1wbGVtZW50IHRoZSBPUiBsb2dpYyBuZWVkZWQgdG8gbWFrZSBzaGFyZWQgaW50ZXJydXB0cyBvbgorICogdGhpcyBsaW5lIGJlaGF2ZSBwcm9wZXJseQorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qga3ZtX2Fzc2lnbmVkX2Rldl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldiA9CisJCShzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKikgZGV2X2lkOworCisJa3ZtX2dldF9rdm0oYXNzaWduZWRfZGV2LT5rdm0pOworCXNjaGVkdWxlX3dvcmsoJmFzc2lnbmVkX2Rldi0+aW50ZXJydXB0X3dvcmspOworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogQWNrIHRoZSBpcnEgbGluZSBmb3IgYW4gYXNzaWduZWQgZGV2aWNlICovCitzdGF0aWMgdm9pZCBrdm1fYXNzaWduZWRfZGV2X2Fja19pcnEoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2OworCisJaWYgKGtpYW4tPmdzaSA9PSAtMSkKKwkJcmV0dXJuOworCisJZGV2ID0gY29udGFpbmVyX29mKGtpYW4sIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKKwkJCSAgIGFja19ub3RpZmllcik7CisJa3ZtX3NldF9pcnEoZGV2LT5rdm0sIGRldi0+Z3Vlc3RfaXJxLCAwKTsKKwllbmFibGVfaXJxKGRldi0+aG9zdF9pcnEpOworfQorCitzdGF0aWMgdm9pZCBrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsCisJCQkJICAgICAqYXNzaWduZWRfZGV2KQoreworCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pICYmIGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZCkKKwkJZnJlZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSwgKHZvaWQgKilhc3NpZ25lZF9kZXYpOworCisJa3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sICZhc3NpZ25lZF9kZXYtPmFja19ub3RpZmllcik7CisKKwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yaykpCisJCS8qIFdlIGhhZCBwZW5kaW5nIHdvcmsuIFRoYXQgbWVhbnMgd2Ugd2lsbCBoYXZlIHRvIHRha2UKKwkJICogY2FyZSBvZiBrdm1fcHV0X2t2bS4KKwkJICovCisJCWt2bV9wdXRfa3ZtKGt2bSk7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGFzc2lnbmVkX2Rldi0+ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoYXNzaWduZWRfZGV2LT5kZXYpOworCXBjaV9kZXZfcHV0KGFzc2lnbmVkX2Rldi0+ZGV2KTsKKworCWxpc3RfZGVsKCZhc3NpZ25lZF9kZXYtPmxpc3QpOworCWtmcmVlKGFzc2lnbmVkX2Rldik7Cit9CisKK3ZvaWQga3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKnB0cjI7CisJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXY7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCBwdHIyLCAma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkKSB7CisJCWFzc2lnbmVkX2RldiA9IGxpc3RfZW50cnkocHRyLAorCQkJCQkgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKKwkJCQkJICBsaXN0KTsKKworCQlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBhc3NpZ25lZF9kZXYpOworCX0KK30KKworc3RhdGljIGludCBrdm1fdm1faW9jdGxfYXNzaWduX2lycShzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEKKwkJCQkgICAqYXNzaWduZWRfaXJxKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCisJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKworCW1hdGNoID0ga3ZtX2ZpbmRfYXNzaWduZWRfZGV2KCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQsCisJCQkJICAgICAgYXNzaWduZWRfaXJxLT5hc3NpZ25lZF9kZXZfaWQpOworCWlmICghbWF0Y2gpIHsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWF0Y2gtPmlycV9yZXF1ZXN0ZWQpIHsKKwkJbWF0Y2gtPmd1ZXN0X2lycSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltYXRjaC0+YWNrX25vdGlmaWVyLmdzaSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCUlOSVRfV09SSygmbWF0Y2gtPmludGVycnVwdF93b3JrLAorCQkgIGt2bV9hc3NpZ25lZF9kZXZfaW50ZXJydXB0X3dvcmtfaGFuZGxlcik7CisKKwlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKKwkJCXIgPSAtRVBFUk07CisJCQlnb3RvIG91dF9yZWxlYXNlOworCQl9CisKKwkJaWYgKGFzc2lnbmVkX2lycS0+aG9zdF9pcnEpCisJCQltYXRjaC0+aG9zdF9pcnEgPSBhc3NpZ25lZF9pcnEtPmhvc3RfaXJxOworCQllbHNlCisJCQltYXRjaC0+aG9zdF9pcnEgPSBtYXRjaC0+ZGV2LT5pcnE7CisJCW1hdGNoLT5ndWVzdF9pcnEgPSBhc3NpZ25lZF9pcnEtPmd1ZXN0X2lycTsKKwkJbWF0Y2gtPmFja19ub3RpZmllci5nc2kgPSBhc3NpZ25lZF9pcnEtPmd1ZXN0X2lycTsKKwkJbWF0Y2gtPmFja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fYXNzaWduZWRfZGV2X2Fja19pcnE7CisJCWt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJm1hdGNoLT5hY2tfbm90aWZpZXIpOworCisJCS8qIEV2ZW4gdGhvdWdoIHRoaXMgaXMgUENJLCB3ZSBkb24ndCB3YW50IHRvIHVzZSBzaGFyZWQKKwkJICogaW50ZXJydXB0cy4gU2hhcmluZyBob3N0IGRldmljZXMgd2l0aCBndWVzdC1hc3NpZ25lZCBkZXZpY2VzCisJCSAqIG9uIHRoZSBzYW1lIGludGVycnVwdCBsaW5lIGlzIG5vdCBhIGhhcHB5IHNpdHVhdGlvbjogdGhlcmUKKwkJICogYXJlIGdvaW5nIHRvIGJlIGxvbmcgZGVsYXlzIGluIGFjY2VwdGluZywgYWNraW5nLCBldGMuCisJCSAqLworCQlpZiAocmVxdWVzdF9pcnEobWF0Y2gtPmhvc3RfaXJxLCBrdm1fYXNzaWduZWRfZGV2X2ludHIsIDAsCisJCQkJImt2bV9hc3NpZ25lZF9kZXZpY2UiLCAodm9pZCAqKW1hdGNoKSkgeworCQkJciA9IC1FSU87CisJCQlnb3RvIG91dF9yZWxlYXNlOworCQl9CisJfQorCisJbWF0Y2gtPmlycV9yZXF1ZXN0ZWQgPSB0cnVlOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwlyZXR1cm4gcjsKK291dF9yZWxlYXNlOgorCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBtYXRjaCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldiAqYXNzaWduZWRfZGV2KQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCisJbWF0Y2ggPSBrdm1fZmluZF9hc3NpZ25lZF9kZXYoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCwKKwkJCQkgICAgICBhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9pZCk7CisJaWYgKG1hdGNoKSB7CisJCS8qIGRldmljZSBhbHJlYWR5IGFzc2lnbmVkICovCisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwltYXRjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCksIEdGUF9LRVJORUwpOworCWlmIChtYXRjaCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYXNzaWduZWRfZGV2LT5idXNuciwKKwkJCQkgICBhc3NpZ25lZF9kZXYtPmRldmZuKTsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCBkZXZpY2Ugbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworCX0KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogQ291bGQgbm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisJciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAia3ZtX2Fzc2lnbmVkX2RldmljZSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZCBub3QgZ2V0IGFjY2VzcyB0byBkZXZpY2UgcmVnaW9uc1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisJbWF0Y2gtPmFzc2lnbmVkX2Rldl9pZCA9IGFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2lkOworCW1hdGNoLT5ob3N0X2J1c25yID0gYXNzaWduZWRfZGV2LT5idXNucjsKKwltYXRjaC0+aG9zdF9kZXZmbiA9IGFzc2lnbmVkX2Rldi0+ZGV2Zm47CisJbWF0Y2gtPmRldiA9IGRldjsKKworCW1hdGNoLT5rdm0gPSBrdm07CisKKwlsaXN0X2FkZCgmbWF0Y2gtPmxpc3QsICZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOworCisJaWYgKGFzc2lnbmVkX2Rldi0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpIHsKKwkJciA9IGt2bV9pb21tdV9tYXBfZ3Vlc3Qoa3ZtLCBtYXRjaCk7CisJCWlmIChyKQorCQkJZ290byBvdXRfbGlzdF9kZWw7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXJldHVybiByOworb3V0X2xpc3RfZGVsOgorCWxpc3RfZGVsKCZtYXRjaC0+bGlzdCk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CitvdXRfcHV0OgorCXBjaV9kZXZfcHV0KGRldik7CitvdXRfZnJlZToKKwlrZnJlZShtYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXJldHVybiByOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3ZjcHUoaW50IG4pCiB7CiAJcmV0dXJuIGxpa2VseShuID49IDAgJiYgbiA8IEtWTV9NQVhfVkNQVVMpOwogfQogCitpbmxpbmUgaW50IGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pCit7CisJaWYgKHBmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBTd2l0Y2hlcyB0byBzcGVjaWZpZWQgdmNwdSwgdW50aWwgYSBtYXRjaGluZyB2Y3B1X3B1dCgpCiAgKi8KQEAgLTU3MCw2ICs4MTgsMTIgQEAKIAl9CiAKIAlrdm1fZnJlZV9waHlzbWVtX3Nsb3QoJm9sZCwgJm5ldyk7CisjaWZkZWYgQ09ORklHX0RNQVIKKwkvKiBtYXAgdGhlIHBhZ2VzIGluIGlvbW11IHBhZ2UgdGFibGUgKi8KKwlyID0ga3ZtX2lvbW11X21hcF9wYWdlcyhrdm0sIGJhc2VfZ2ZuLCBucGFnZXMpOworCWlmIChyKQorCQlnb3RvIG91dDsKKyNlbmRpZgogCXJldHVybiAwOwogCiBvdXRfZnJlZToKQEAgLTcwOCw5ICs5NjIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2ZuX3RvX2h2YSk7CiAKLS8qCi0gKiBSZXF1aXJlcyBjdXJyZW50LT5tbS0+bW1hcF9zZW0gdG8gYmUgaGVsZAotICovCiBwZm5fdCBnZm5fdG9fcGZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCXN0cnVjdCBwYWdlICpwYWdlWzFdOwpAQCAtNzI2LDIxICs5NzcsMjQgQEAKIAkJcmV0dXJuIHBhZ2VfdG9fcGZuKGJhZF9wYWdlKTsKIAl9CiAKLQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwgMSwgMSwgcGFnZSwKLQkJCQlOVUxMKTsKKwlucGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIDEsIDEsIHBhZ2UpOwogCiAJaWYgKHVubGlrZWx5KG5wYWdlcyAhPSAxKSkgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAorCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwogCQlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJICAgICEodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkpIHsKKwkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCQlnZXRfcGFnZShiYWRfcGFnZSk7CiAJCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOwogCQl9CiAKIAkJcGZuID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKyB2bWEtPnZtX3Bnb2ZmOwotCQlCVUdfT04ocGZuX3ZhbGlkKHBmbikpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlCVUdfT04oIWt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAl9IGVsc2UKIAkJcGZuID0gcGFnZV90b19wZm4ocGFnZVswXSk7CiAKQEAgLTc1NCwxMCArMTAwOCwxMCBAQAogCXBmbl90IHBmbjsKIAogCXBmbiA9IGdmbl90b19wZm4oa3ZtLCBnZm4pOwotCWlmIChwZm5fdmFsaWQocGZuKSkKKwlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2UocGZuKTsKIAotCVdBUk5fT04oIXBmbl92YWxpZChwZm4pKTsKKwlXQVJOX09OKGt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAogCWdldF9wYWdlKGJhZF9wYWdlKTsKIAlyZXR1cm4gYmFkX3BhZ2U7CkBAIC03NzMsNyArMTAyNyw3IEBACiAKIHZvaWQga3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCisJaWYgKCFrdm1faXNfbW1pb19wZm4ocGZuKSkKIAkJcHV0X3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVsZWFzZV9wZm5fY2xlYW4pOwpAQCAtNzk5LDcgKzEwNTMsNyBAQAogCiB2b2lkIGt2bV9zZXRfcGZuX2RpcnR5KHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CkBAIC04MDksMTQgKzEwNjMsMTQgQEAKIAogdm9pZCBrdm1fc2V0X3Bmbl9hY2Nlc3NlZChwZm5fdCBwZm4pCiB7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQorCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwZm5fdG9fcGFnZShwZm4pKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfcGZuX2FjY2Vzc2VkKTsKIAogdm9pZCBrdm1fZ2V0X3BmbihwZm5fdCBwZm4pCiB7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQorCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCiAJCWdldF9wYWdlKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9wZm4pOwpAQCAtOTcyLDEyICsxMjI2LDEyIEBACiAJZm9yICg7OykgewogCQlwcmVwYXJlX3RvX3dhaXQoJnZjcHUtPndxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKQorCQlpZiAoa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpIHx8CisJCSAgICBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHZjcHUpIHx8CisJCSAgICBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKSB7CisJCQlzZXRfYml0KEtWTV9SRVFfVU5IQUxULCAmdmNwdS0+cmVxdWVzdHMpOwogCQkJYnJlYWs7Ci0JCWlmIChrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHZjcHUpKQotCQkJYnJlYWs7Ci0JCWlmIChrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKQotCQkJYnJlYWs7CisJCX0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CiAKQEAgLTEwNzQsMTIgKzEzMjgsMTEgQEAKIAogCXIgPSBrdm1fYXJjaF92Y3B1X3NldHVwKHZjcHUpOwogCWlmIChyKQotCQlnb3RvIHZjcHVfZGVzdHJveTsKKwkJcmV0dXJuIHI7CiAKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCWlmIChrdm0tPnZjcHVzW25dKSB7CiAJCXIgPSAtRUVYSVNUOwotCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCWdvdG8gdmNwdV9kZXN0cm95OwogCX0KIAlrdm0tPnZjcHVzW25dID0gdmNwdTsKQEAgLTEwOTUsOCArMTM0OCw4IEBACiB1bmxpbms6CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKIAlrdm0tPnZjcHVzW25dID0gTlVMTDsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiB2Y3B1X2Rlc3Ryb3k6CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCWt2bV9hcmNoX3ZjcHVfZGVzdHJveSh2Y3B1KTsKIAlyZXR1cm4gcjsKIH0KQEAgLTExMTgsNiArMTM3MSw4IEBACiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByOworCXN0cnVjdCBrdm1fZnB1ICpmcHUgPSBOVUxMOworCXN0cnVjdCBrdm1fc3JlZ3MgKmt2bV9zcmVncyA9IE5VTEw7CiAKIAlpZiAodmNwdS0+a3ZtLT5tbSAhPSBjdXJyZW50LT5tbSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xMTY1LDI1ICsxNDIwLDI4IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9HRVRfU1JFR1M6IHsKLQkJc3RydWN0IGt2bV9zcmVncyBrdm1fc3JlZ3M7Ci0KLQkJbWVtc2V0KCZrdm1fc3JlZ3MsIDAsIHNpemVvZiBrdm1fc3JlZ3MpOwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3ModmNwdSwgJmt2bV9zcmVncyk7CisJCWt2bV9zcmVncyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fc3JlZ3MpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICgha3ZtX3NyZWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyh2Y3B1LCBrdm1fc3JlZ3MpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAma3ZtX3NyZWdzLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBrdm1fc3JlZ3MsIHNpemVvZihzdHJ1Y3Qga3ZtX3NyZWdzKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfU1JFR1M6IHsKLQkJc3RydWN0IGt2bV9zcmVncyBrdm1fc3JlZ3M7Ci0KLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX3NyZWdzLCBhcmdwLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJa3ZtX3NyZWdzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9zcmVncyksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFrdm1fc3JlZ3MpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzKHZjcHUsICZrdm1fc3JlZ3MpOworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGt2bV9zcmVncywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc3JlZ3MpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3ModmNwdSwga3ZtX3NyZWdzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xMjY0LDI1ICsxNTIyLDI4IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9HRVRfRlBVOiB7Ci0JCXN0cnVjdCBrdm1fZnB1IGZwdTsKLQotCQltZW1zZXQoJmZwdSwgMCwgc2l6ZW9mIGZwdSk7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUodmNwdSwgJmZwdSk7CisJCWZwdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSwgR0ZQX0tFUk5FTCk7CisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWZwdSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfZnB1KHZjcHUsIGZwdSk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZmcHUsIHNpemVvZiBmcHUpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGZwdSwgc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfRlBVOiB7Ci0JCXN0cnVjdCBrdm1fZnB1IGZwdTsKLQotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmcHUsIGFyZ3AsIHNpemVvZiBmcHUpKQorCQlmcHUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2ZwdSksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFmcHUpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdSh2Y3B1LCAmZnB1KTsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihmcHUsIGFyZ3AsIHNpemVvZihzdHJ1Y3Qga3ZtX2ZwdSkpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUodmNwdSwgZnB1KTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xMjkyLDYgKzE1NTMsOCBAQAogCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CiBvdXQ6CisJa2ZyZWUoZnB1KTsKKwlrZnJlZShrdm1fc3JlZ3MpOwogCXJldHVybiByOwogfQogCkBAIC0xMzYwLDYgKzE2MjMsMzAgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorCWNhc2UgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFOiB7CisJCXN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldiBhc3NpZ25lZF9kZXY7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXNzaWduZWRfZGV2LCBhcmdwLCBzaXplb2YgYXNzaWduZWRfZGV2KSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX2Fzc2lnbl9kZXZpY2Uoa3ZtLCAmYXNzaWduZWRfZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0FTU0lHTl9JUlE6IHsKKwkJc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEgYXNzaWduZWRfaXJxOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmFzc2lnbmVkX2lycSwgYXJncCwgc2l6ZW9mIGFzc2lnbmVkX2lycSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9hc3NpZ25faXJxKGt2bSwgJmFzc2lnbmVkX2lycSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0xMzY5LDE3ICsxNjU2LDIyIEBACiAKIHN0YXRpYyBpbnQga3ZtX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZVsxXTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IG5wYWdlczsKKwlnZm5fdCBnZm4gPSB2bWYtPnBnb2ZmOwogCXN0cnVjdCBrdm0gKmt2bSA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JaWYgKCFrdm1faXNfdmlzaWJsZV9nZm4oa3ZtLCB2bWYtPnBnb2ZmKSkKKwlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7CisJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0JcGFnZSA9IGdmbl90b19wYWdlKGt2bSwgdm1mLT5wZ29mZik7Ci0JaWYgKGlzX2Vycm9yX3BhZ2UocGFnZSkpIHsKLQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKworCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLCAxLCAxLCAwLCBwYWdlLAorCQkJCU5VTEwpOworCWlmICh1bmxpa2VseShucGFnZXMgIT0gMSkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0JfQotCXZtZi0+cGFnZSA9IHBhZ2U7CisKKwl2bWYtPnBhZ2UgPSBwYWdlWzBdOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fdHJhY2UuYyBiL3ZpcnQva3ZtL2t2bV90cmFjZS5jCmluZGV4IDU4MTQxZjMuLjQxZGNjODQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV90cmFjZS5jCisrKyBiL3ZpcnQva3ZtL2t2bV90cmFjZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKQEAgLTM1LDE2ICszNiwxNiBAQAogc3RydWN0IGt2bV90cmFjZV9wcm9iZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpmb3JtYXQ7Ci0JdTMyIGN5Y2xlX2luOworCXUzMiB0aW1lc3RhbXBfaW47CiAJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBjYWxjX3JlY19zaXplKGludCBjeWNsZSwgaW50IGV4dHJhKQorc3RhdGljIGlubGluZSBpbnQgY2FsY19yZWNfc2l6ZShpbnQgdGltZXN0YW1wLCBpbnQgZXh0cmEpCiB7CiAJaW50IHJlY19zaXplID0gS1ZNX1RSQ19IRUFEX1NJWkU7CiAKIAlyZWNfc2l6ZSArPSBleHRyYTsKLQlyZXR1cm4gY3ljbGUgPyByZWNfc2l6ZSArPSBLVk1fVFJDX0NZQ0xFX1NJWkUgOiByZWNfc2l6ZTsKKwlyZXR1cm4gdGltZXN0YW1wID8gcmVjX3NpemUgKz0gS1ZNX1RSQ19DWUNMRV9TSVpFIDogcmVjX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9hZGRfdHJhY2Uodm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9kYXRhLApAQCAtNTQsMTIgKzU1LDEzIEBACiAJc3RydWN0IGt2bV90cmFjZSAqa3QgPSBrdm1fdHJhY2U7CiAJc3RydWN0IGt2bV90cmFjZV9yZWMgcmVjOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgICAgaSwgZXh0cmEsIHNpemU7CisJaW50ICAgIGksIHNpemU7CisJdTMyICAgIGV4dHJhOwogCiAJaWYgKHVubGlrZWx5KGt0LT50cmFjZV9zdGF0ZSAhPSBLVk1fVFJBQ0VfU1RBVEVfUlVOTklORykpCiAJCXJldHVybjsKIAotCXJlYy5ldmVudAk9IHZhX2FyZygqYXJncywgdTMyKTsKKwlyZWMucmVjX3ZhbAk9IFRSQUNFX1JFQ19FVkVOVF9JRCh2YV9hcmcoKmFyZ3MsIHUzMikpOwogCXZjcHUJCT0gdmFfYXJnKCphcmdzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKik7CiAJcmVjLnBpZAkJPSBjdXJyZW50LT50Z2lkOwogCXJlYy52Y3B1X2lkCT0gdmNwdS0+dmNwdV9pZDsKQEAgLTY3LDIxICs2OSwyMSBAQAogCWV4dHJhICAgCT0gdmFfYXJnKCphcmdzLCB1MzIpOwogCVdBUk5fT04oIShleHRyYSA8PSBLVk1fVFJDX0VYVFJBX01BWCkpOwogCWV4dHJhIAkJPSBtaW5fdCh1MzIsIGV4dHJhLCBLVk1fVFJDX0VYVFJBX01BWCk7Ci0JcmVjLmV4dHJhX3UzMiAgID0gZXh0cmE7CiAKLQlyZWMuY3ljbGVfaW4gCT0gcC0+Y3ljbGVfaW47CisJcmVjLnJlY192YWwgfD0gVFJBQ0VfUkVDX1RDUyhwLT50aW1lc3RhbXBfaW4pCisJCQl8IFRSQUNFX1JFQ19OVU1fREFUQV9BUkdTKGV4dHJhKTsKIAotCWlmIChyZWMuY3ljbGVfaW4pIHsKLQkJcmVjLnUuY3ljbGUuY3ljbGVfdTY0ID0gZ2V0X2N5Y2xlcygpOworCWlmIChwLT50aW1lc3RhbXBfaW4pIHsKKwkJcmVjLnUudGltZXN0YW1wLnRpbWVzdGFtcCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgcmVjLmV4dHJhX3UzMjsgaSsrKQotCQkJcmVjLnUuY3ljbGUuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOworCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKKwkJCXJlYy51LnRpbWVzdGFtcC5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IHJlYy5leHRyYV91MzI7IGkrKykKLQkJCXJlYy51Lm5vY3ljbGUuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOworCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKKwkJCXJlYy51Lm5vdGltZXN0YW1wLmV4dHJhX3UzMltpXSA9IHZhX2FyZygqYXJncywgdTMyKTsKIAl9CiAKLQlzaXplID0gY2FsY19yZWNfc2l6ZShyZWMuY3ljbGVfaW4sIHJlYy5leHRyYV91MzIgKiBzaXplb2YodTMyKSk7CisJc2l6ZSA9IGNhbGNfcmVjX3NpemUocC0+dGltZXN0YW1wX2luLCBleHRyYSAqIHNpemVvZih1MzIpKTsKIAlyZWxheV93cml0ZShrdC0+cmNoYW4sICZyZWMsIHNpemUpOwogfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS92dGQuYyBiL3ZpcnQva3ZtL3Z0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzA4NzQKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS92dGQuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA4CisgKiBBdXRob3I6IEFsbGVuIE0uIEtheSA8YWxsZW4ubS5rYXlAaW50ZWwuY29tPgorICogQXV0aG9yOiBXZWlkb25nIEhhbiA8d2VpZG9uZy5oYW5AaW50ZWwuY29tPgorICogQXV0aG9yOiBCZW4tQW1pIFlhc3NvdXIgPGJlbmFtaUBpbC5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KKworc3RhdGljIGludCBrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKTsKK3N0YXRpYyB2b2lkIGt2bV9pb21tdV9wdXRfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CisKK2ludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKK3sKKwlnZm5fdCBnZm4gPSBiYXNlX2dmbjsKKwlwZm5fdCBwZm47CisJaW50IGksIHIgPSAwOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluID0ga3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbjsKKworCS8qIGNoZWNrIGlmIGlvbW11IGV4aXN0cyBhbmQgaW4gdXNlICovCisJaWYgKCFkb21haW4pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCS8qIGNoZWNrIGlmIGFscmVhZHkgbWFwcGVkICovCisJCXBmbiA9IChwZm5fdClpbnRlbF9pb21tdV9pb3ZhX3RvX3Bmbihkb21haW4sCisJCQkJCQkgICAgIGdmbl90b19ncGEoZ2ZuKSk7CisJCWlmIChwZm4pCisJCQljb250aW51ZTsKKworCQlwZm4gPSBnZm5fdG9fcGZuKGt2bSwgZ2ZuKTsKKwkJciA9IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZyhkb21haW4sCisJCQkJCSAgICAgZ2ZuX3RvX2dwYShnZm4pLAorCQkJCQkgICAgIHBmbl90b19ocGEocGZuKSwKKwkJCQkJICAgICBQQUdFX1NJWkUsCisJCQkJCSAgICAgRE1BX1BURV9SRUFEIHwKKwkJCQkJICAgICBETUFfUFRFX1dSSVRFKTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAia3ZtX2lvbW11X21hcF9wYWdlczoiCisJCQkgICAgICAgImlvbW11IGZhaWxlZCB0byBtYXAgcGZuPSVseFxuIiwgcGZuKTsKKwkJCWdvdG8gdW5tYXBfcGFnZXM7CisJCX0KKwkJZ2ZuKys7CisJfQorCXJldHVybiAwOworCit1bm1hcF9wYWdlczoKKwlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwgYmFzZV9nZm4sIGkpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGt2bV9pb21tdV9tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQoreworCWludCBpLCByOworCisJZG93bl9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBrdm0tPm5tZW1zbG90czsgaSsrKSB7CisJCXIgPSBrdm1faW9tbXVfbWFwX3BhZ2VzKGt2bSwga3ZtLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKKwkJCQkJa3ZtLT5tZW1zbG90c1tpXS5ucGFnZXMpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCXJldHVybiByOworfQorCitpbnQga3ZtX2lvbW11X21hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sCisJCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJaW50IHI7CisKKwlpZiAoIWludGVsX2lvbW11X2ZvdW5kKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW50ZWwgaW9tbXUgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJWVC1kIGRpcmVjdCBtYXA6IGhvc3QgYmRmID0gJXg6JXg6JXhcbiIsCisJICAgICAgIGFzc2lnbmVkX2Rldi0+aG9zdF9idXNuciwKKwkgICAgICAgUENJX1NMT1QoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSwKKwkgICAgICAgUENJX0ZVTkMoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSk7CisKKwlwZGV2ID0gYXNzaWduZWRfZGV2LT5kZXY7CisKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCWlmIChrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKSB7CisJCQlpbnRlbF9pb21tdV9kb21haW5fZXhpdChrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKTsKKwkJCWt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4gPSBOVUxMOworCQl9CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4gPSBpbnRlbF9pb21tdV9kb21haW5fYWxsb2MocGRldik7CisJaWYgKCFrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXIgPSBrdm1faW9tbXVfbWFwX21lbXNsb3RzKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X3VubWFwOworCisJaW50ZWxfaW9tbXVfZGV0YWNoX2Rldihrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluLAorCQkJICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7CisKKwlyID0gaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4sCisJCQkJCXBkZXYpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRG9tYWluIGNvbnRleHQgbWFwIGZvciAlcyBmYWlsZWQiLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoa3ZtKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQga3ZtX2lvbW11X3B1dF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkgICAgICAgZ2ZuX3QgYmFzZV9nZm4sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCWdmbl90IGdmbiA9IGJhc2VfZ2ZuOworCXBmbl90IHBmbjsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiA9IGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW47CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJcGZuID0gKHBmbl90KWludGVsX2lvbW11X2lvdmFfdG9fcGZuKGRvbWFpbiwKKwkJCQkJCSAgICAgZ2ZuX3RvX2dwYShnZm4pKTsKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWdmbisrOworCX0KK30KKworc3RhdGljIGludCBrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQoreworCWludCBpOworCWRvd25fcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7IGkrKykgeworCQlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwga3ZtLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKKwkJCQkgICAga3ZtLT5tZW1zbG90c1tpXS5ucGFnZXMpOworCX0KKwl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZW50cnk7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4gPSBrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluOworCisJLyogY2hlY2sgaWYgaW9tbXUgZXhpc3RzIGFuZCBpbiB1c2UgKi8KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkLCBsaXN0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJWVC1kIHVubWFwOiBob3N0IGJkZiA9ICV4OiV4OiV4XG4iLAorCQkgICAgICAgZW50cnktPmhvc3RfYnVzbnIsCisJCSAgICAgICBQQ0lfU0xPVChlbnRyeS0+aG9zdF9kZXZmbiksCisJCSAgICAgICBQQ0lfRlVOQyhlbnRyeS0+aG9zdF9kZXZmbikpOworCisJCS8qIGRldGFjaCBrdm0gZG1hciBkb21haW4gKi8KKwkJaW50ZWxfaW9tbXVfZGV0YWNoX2Rldihkb21haW4sIGVudHJ5LT5ob3N0X2J1c25yLAorCQkJCSAgICAgICBlbnRyeS0+aG9zdF9kZXZmbik7CisJfQorCWt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhrdm0pOworCWludGVsX2lvbW11X2RvbWFpbl9leGl0KGRvbWFpbik7CisJcmV0dXJuIDA7Cit9Cg==